feat(sdk): Phase 1 typed query foundation (gsd-sdk query) (#2118)
* feat(sdk): add typed query foundation and gsd-sdk query (Phase 1) Add sdk/src/query registry and handlers with tests, GSDQueryError, CLI query wiring, and supporting type/tool-scoping hooks. Update CHANGELOG. Vitest 4 constructor mock fixes in milestone-runner tests. Made-with: Cursor * chore: gitignore .cursor for local-only Cursor assets Made-with: Cursor * fix(sdk): harden query layer for PR review (paths, locks, CLI, ReDoS) - resolvePathUnderProject: realpath + relative containment for frontmatter and key_links - commitToSubrepo: path checks + sanitizeCommitMessage - statePlannedPhase: readModifyWriteStateMd (lock); MUTATION_COMMANDS + events - key_links: regexForKeyLinkPattern length/ReDoS guard; phase dirs: reject .. and separators - gsd-sdk: strip --pick before parseArgs; strict parser; QueryRegistry.commands() - progress: static GSDError import; tests updated Made-with: Cursor * feat(sdk): query follow-up — tests, QUERY-HANDLERS, registry, locks, intel depth Made-with: Cursor * docs(sdk): use ASCII punctuation in QUERY-HANDLERS.md Made-with: Cursor
This commit is contained in:
@@ -100,10 +100,20 @@ describe('parseCliArgs', () => {
|
||||
expect(result.maxBudget).toBe(15);
|
||||
});
|
||||
|
||||
it('ignores unknown options (non-strict for --pick support)', () => {
|
||||
// strict: false allows --pick and other query-specific flags
|
||||
const result = parseCliArgs(['--unknown-flag']);
|
||||
expect(result.command).toBeUndefined();
|
||||
it('rejects unknown options (strict parser)', () => {
|
||||
expect(() => parseCliArgs(['--unknown-flag'])).toThrow();
|
||||
});
|
||||
|
||||
it('rejects unknown flags on run command', () => {
|
||||
expect(() => parseCliArgs(['run', 'hello', '--not-a-real-option'])).toThrow();
|
||||
});
|
||||
|
||||
it('parses query with --pick stripped before strict parse', () => {
|
||||
const result = parseCliArgs([
|
||||
'query', 'state.load', '--pick', 'data', '--project-dir', 'C:\\tmp\\proj',
|
||||
]);
|
||||
expect(result.command).toBe('query');
|
||||
expect(result.projectDir).toBe('C:\\tmp\\proj');
|
||||
});
|
||||
|
||||
// ─── Init command parsing ──────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user