@wrongstack/sdd 0.296.2 → 0.296.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -84,9 +84,9 @@ export declare class SddInterviewDriver {
84
84
  loadExisting(): Promise<boolean>;
85
85
  /** Drop the on-disk session (if any) and clear in-memory interview state. */
86
86
  discard(): Promise<void>;
87
- setLastAgentText(text: string): void;
87
+ setLastAgentText(text: string): Promise<void>;
88
88
  getLastAgentText(): string | undefined;
89
- setLastRunId(runId: string): void;
89
+ setLastRunId(runId: string): Promise<void>;
90
90
  getLastRunId(): string | undefined;
91
91
  wasResumed(): boolean;
92
92
  phase(): AISpecPhase;
@@ -1 +1 @@
1
- {"version":3,"file":"sdd-interview-driver.d.ts","sourceRoot":"","sources":["../src/sdd-interview-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdd-interview-driver.d.ts","sourceRoot":"","sources":["../src/sdd-interview-driver.ts"],"names":[],"mappings":"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"}
@@ -108,18 +108,29 @@ export declare class AISpecBuilder {
108
108
  */
109
109
  markDone(): void;
110
110
  /**
111
- * Set the task graph ID for this session.
111
+ * Set the task graph ID for this session. Awaits the save so a caller that
112
+ * immediately follows with `await saveSession()` cannot end up with the
113
+ * awaited write committing first and the fire-and-forget rename reverting
114
+ * the persisted `taskGraphId` to its pre-set value. Same race window that
115
+ * broke `setLastAgentText`/`setLastRunId` on the resume test.
112
116
  */
113
- setTaskGraphId(graphId: string): void;
117
+ setTaskGraphId(graphId: string): Promise<void>;
114
118
  /**
115
119
  * Get the task graph ID for this session.
116
120
  */
117
121
  getTaskGraphId(): string | undefined;
118
- /** Persist the last agent utterance so resume can rehydrate the UI + Q/A pairing. */
119
- setLastAgentText(text: string): void;
122
+ /**
123
+ * Persist the last agent utterance so resume can rehydrate the UI + Q/A
124
+ * pairing. Awaits the save so the next mutation in the call chain (e.g.
125
+ * `setLastRunId`) cannot fire a concurrent save that overwrites this one
126
+ * with a stale snapshot — the fire-and-forget `autoSave()` pattern leaves
127
+ * a race window where an earlier queued save may commit its rename after
128
+ * a later one, silently reverting the persisted state.
129
+ */
130
+ setLastAgentText(text: string): Promise<void>;
120
131
  getLastAgentText(): string | undefined;
121
- /** Record a run kicked off from this interview (board deep-link after restart). */
122
- setLastRunId(runId: string): void;
132
+ /** Record a run kicked off from this interview (board deep-link after restart). See {@link setLastAgentText} for the awaited-save rationale. */
133
+ setLastRunId(runId: string): Promise<void>;
123
134
  getLastRunId(): string | undefined;
124
135
  /**
125
136
  * Hard-reset in-memory session fields while keeping the same session id /
@@ -1 +1 @@
1
- {"version":3,"file":"spec-builder.d.ts","sourceRoot":"","sources":["../src/spec-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-builder.d.ts","sourceRoot":"","sources":["../src/spec-builder.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,23 @@
1
1
  import type { TaskNode, TaskResult } from '@wrongstack/core/types';
2
2
  export interface CommandVerifierOptions {
3
- /** Metadata key holding the shell command to run. Default 'verificationCommand'. */
3
+ /** Metadata key holding the verification command. Default 'verificationCommand'. */
4
4
  metadataKey?: string;
5
5
  /** Kill + fail the verification after this many ms. Default 180_000 (3 min). */
6
6
  timeoutMs?: number;
7
7
  }
8
- export declare function verificationShell(platform: NodeJS.Platform): [shell: string, ...args: string[]];
8
+ /**
9
+ * Tokenize a command string into an argv array **without** shell interpolation.
10
+ *
11
+ * Splits on whitespace while respecting single and double quotes (matching
12
+ * POSIX shell quoting rules for the common cases). Shell metacharacters
13
+ * (`;`, `|`, `&&`, `$()`, backticks, `>`, `<`) that appear *inside* a token
14
+ * are preserved as literal characters — they are passed to the executable as
15
+ * argument data, never interpreted by a shell.
16
+ *
17
+ * Returns `undefined` when the input is empty/whitespace or contains
18
+ * unbalanced quotes (which would indicate a malformed command).
19
+ */
20
+ export declare function tokenizeCommand(command: string): string[] | undefined;
9
21
  /** Shape shared by every SDD task verifier (matches SddParallelRunOptions.verifyTask). */
10
22
  export type SddVerifyTask = (info: {
11
23
  task: TaskNode;
@@ -38,8 +50,13 @@ export declare function makeAcceptanceCriteriaVerifier(options: AcceptanceCriter
38
50
  /**
39
51
  * Build a `verifyTask` closure (shape matches {@link SddParallelRunOptions.verifyTask}).
40
52
  * Returns `{ ok: true }` immediately when the task carries no verification command,
41
- * otherwise spawns the command in `cwd` (shell, output discarded) and resolves
42
- * `{ ok: false, reason }` on non-zero exit, spawn error, or timeout.
53
+ * otherwise spawns the command in `cwd` as `executable + argv` with `shell: false`
54
+ * (no shell interpolation), and resolves `{ ok: false, reason }` on non-zero exit,
55
+ * spawn error, malformed command, or timeout.
56
+ *
57
+ * Defense-in-depth: even if the authorization gate on `set_task_verification`
58
+ * were bypassed, shell metacharacters (`;`, `|`, `&&`, `$()`, etc.) are tokenized
59
+ * into literal arguments rather than being interpreted by a shell.
43
60
  */
44
61
  export declare function makeCommandVerifier(options?: CommandVerifierOptions): (info: {
45
62
  task: TaskNode;
@@ -1 +1 @@
1
- {"version":3,"file":"verify-task.d.ts","sourceRoot":"","sources":["../src/verify-task.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAE/F;AAED,0FAA0F;AAC1F,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb,KAAK,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,CAQ3E;AAED,MAAM,WAAW,iCAAiC;IAChD,8EAA8E;IAC9E,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,iCAAiC,GACzC,aAAa,CAuCf;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,sBAA2B,UAI/B;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb,KAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuC9C"}
1
+ {"version":3,"file":"verify-task.d.ts","sourceRoot":"","sources":["../src/verify-task.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CA+ErE;AAED,0FAA0F;AAC1F,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb,KAAK,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,CAQ3E;AAED,MAAM,WAAW,iCAAiC;IAChD,8EAA8E;IAC9E,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,iCAAiC,GACzC,aAAa,CAuCf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,sBAA2B,UAI/B;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb,KAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0C9C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wrongstack/sdd",
3
- "version": "0.296.2",
3
+ "version": "0.296.3",
4
4
  "license": "MIT",
5
5
  "description": "WrongStack Spec-Driven Development engine — standalone package extracted from @wrongstack/core. Task graph generation, tracking, execution, lifecycle management, and AI-driven spec building for SDD workflows.",
6
6
  "repository": {
@@ -26,8 +26,8 @@
26
26
  "dist"
27
27
  ],
28
28
  "dependencies": {
29
- "@wrongstack/core": "0.296.2",
30
- "@wrongstack/kanban": "0.296.2"
29
+ "@wrongstack/core": "0.296.3",
30
+ "@wrongstack/kanban": "0.296.3"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@types/node": "^26.1.1",