@pathmode/mcp-server 1.15.1 → 1.16.1

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.
Files changed (47) hide show
  1. package/dist/index.js +1548 -129
  2. package/dist/{api-client.d.ts → packages/mcp-server/src/api-client.d.ts} +9 -0
  3. package/dist/packages/mcp-server/src/api-client.d.ts.map +1 -0
  4. package/dist/{cli-info.d.ts → packages/mcp-server/src/cli-info.d.ts} +1 -0
  5. package/dist/packages/mcp-server/src/cli-info.d.ts.map +1 -0
  6. package/dist/{index.d.ts → packages/mcp-server/src/index.d.ts} +1 -0
  7. package/dist/packages/mcp-server/src/index.d.ts.map +1 -0
  8. package/dist/{install-skills.d.ts → packages/mcp-server/src/install-skills.d.ts} +1 -0
  9. package/dist/packages/mcp-server/src/install-skills.d.ts.map +1 -0
  10. package/dist/{intent-compiler.d.ts → packages/mcp-server/src/intent-compiler.d.ts} +41 -0
  11. package/dist/packages/mcp-server/src/intent-compiler.d.ts.map +1 -0
  12. package/dist/{local-reader.d.ts → packages/mcp-server/src/local-reader.d.ts} +1 -0
  13. package/dist/packages/mcp-server/src/local-reader.d.ts.map +1 -0
  14. package/dist/{measurement-schema.d.ts → packages/mcp-server/src/measurement-schema.d.ts} +1 -0
  15. package/dist/packages/mcp-server/src/measurement-schema.d.ts.map +1 -0
  16. package/dist/packages/mcp-server/src/openspec-import.d.ts +56 -0
  17. package/dist/packages/mcp-server/src/openspec-import.d.ts.map +1 -0
  18. package/dist/packages/mcp-server/src/openspec-product-reader.d.ts +85 -0
  19. package/dist/packages/mcp-server/src/openspec-product-reader.d.ts.map +1 -0
  20. package/dist/packages/mcp-server/src/openspec-writer.d.ts +66 -0
  21. package/dist/packages/mcp-server/src/openspec-writer.d.ts.map +1 -0
  22. package/dist/{pathmode-section.d.ts → packages/mcp-server/src/pathmode-section.d.ts} +1 -0
  23. package/dist/packages/mcp-server/src/pathmode-section.d.ts.map +1 -0
  24. package/dist/{push-spec.d.ts → packages/mcp-server/src/push-spec.d.ts} +1 -0
  25. package/dist/packages/mcp-server/src/push-spec.d.ts.map +1 -0
  26. package/dist/{readiness.d.ts → packages/mcp-server/src/readiness.d.ts} +4 -3
  27. package/dist/packages/mcp-server/src/readiness.d.ts.map +1 -0
  28. package/dist/{save-policy.d.ts → packages/mcp-server/src/save-policy.d.ts} +1 -0
  29. package/dist/packages/mcp-server/src/save-policy.d.ts.map +1 -0
  30. package/dist/{setup.d.ts → packages/mcp-server/src/setup.d.ts} +1 -0
  31. package/dist/packages/mcp-server/src/setup.d.ts.map +1 -0
  32. package/dist/scripts/openspec-corpus/openspec-reader.d.ts +142 -0
  33. package/dist/scripts/openspec-corpus/openspec-reader.d.ts.map +1 -0
  34. package/manifest.json +1 -1
  35. package/package.json +1 -1
  36. package/dist/api-client.d.ts.map +0 -1
  37. package/dist/cli-info.d.ts.map +0 -1
  38. package/dist/index.d.ts.map +0 -1
  39. package/dist/install-skills.d.ts.map +0 -1
  40. package/dist/intent-compiler.d.ts.map +0 -1
  41. package/dist/local-reader.d.ts.map +0 -1
  42. package/dist/measurement-schema.d.ts.map +0 -1
  43. package/dist/pathmode-section.d.ts.map +0 -1
  44. package/dist/push-spec.d.ts.map +0 -1
  45. package/dist/readiness.d.ts.map +0 -1
  46. package/dist/save-policy.d.ts.map +0 -1
  47. package/dist/setup.d.ts.map +0 -1
@@ -47,6 +47,8 @@ export interface ApiIntent {
47
47
  verification: Record<string, any>;
48
48
  externalLinks: any[];
49
49
  evidenceAnchors: Record<string, string[]>;
50
+ /** Readiness confirmations and waivers. Present since mcp-server 1.16.0 / the confirmations column. */
51
+ confirmations?: Record<string, unknown>[];
50
52
  decisions?: IntentDecision[];
51
53
  implementationContext?: {
52
54
  relevantAreas: {
@@ -164,6 +166,12 @@ export interface UpdateIntentInput {
164
166
  inScope?: string[];
165
167
  outOfScope?: string[];
166
168
  };
169
+ /**
170
+ * Readiness confirmations, sent WHOLE: the column is replace-all, so the caller must carry
171
+ * forward what it read. Never send one in the same call that edits the field it confirms; the
172
+ * API refuses that (M1), and refuses an anchor that does not match the stored text.
173
+ */
174
+ confirmations?: Record<string, unknown>[];
167
175
  }
168
176
  export interface EvidenceQuery {
169
177
  productId?: string;
@@ -459,3 +467,4 @@ export declare class PathmodeClient {
459
467
  codeChanges?: string;
460
468
  }): Promise<ApiVerificationResult>;
461
469
  }
470
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/api-client.ts"],"names":[],"mappings":"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"}
@@ -15,3 +15,4 @@ export declare function isVersionCommand(argv?: string[]): boolean;
15
15
  export declare function isHelpCommand(argv?: string[]): boolean;
16
16
  export declare function formatVersion(version: string): string;
17
17
  export declare function formatHelp(version: string): string;
18
+ //# sourceMappingURL=cli-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-info.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/cli-info.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,wBAAgB,gBAAgB,CAAC,IAAI,WAAe,GAAG,OAAO,CAE7D;AAED,wBAAgB,aAAa,CAAC,IAAI,WAAe,GAAG,OAAO,CAE1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA6BlD"}
@@ -25,3 +25,4 @@
25
25
  * }
26
26
  */
27
27
  export {};
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/index.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG"}
@@ -11,3 +11,4 @@
11
11
  */
12
12
  export declare function isInstallSkillsCommand(argv?: string[]): boolean;
13
13
  export declare function runInstallSkills(): Promise<void>;
14
+ //# sourceMappingURL=install-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-skills.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/install-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmBH,wBAAgB,sBAAsB,CAAC,IAAI,WAAe,GAAG,OAAO,CAEnE;AAoDD,wBAAsB,gBAAgB,kBAsGrC"}
@@ -25,6 +25,8 @@ export interface VerificationCheck {
25
25
  status?: VerificationCheckStatus;
26
26
  verifies?: string;
27
27
  }
28
+ /** Read verification uniformly as a check collection: canonical checks[] + adapted legacy buckets. */
29
+ export declare function toVerificationChecks(v: IntentFields['verification']): VerificationCheck[];
28
30
  export interface IntentFields {
29
31
  id?: string;
30
32
  title: string;
@@ -152,3 +154,42 @@ export declare function formatOutcomeRubric(spec: IntentFields, opts?: OutcomeRu
152
154
  export declare function spliceConfirmationsSection(original: string, section: string): string;
153
155
  /** Render confirmation records as the `## Confirmations` section body. */
154
156
  export declare function renderConfirmationsSection(records: Record<string, unknown>[]): string;
157
+ /**
158
+ * Write one confirmation record into a file's `## Confirmations` section, under a
159
+ * read-modify-write guard.
160
+ *
161
+ * Extracted from the tool handler so the race it exists to narrow is actually testable. The
162
+ * handler version could only be exercised through stdio, which cannot open the window: the bug
163
+ * needed a write landing between the handler's parse and its write, and a test that cannot create
164
+ * that window proves nothing about the guard. Everything here is injected, so a test supplies a
165
+ * `read` that returns different bytes on successive calls.
166
+ *
167
+ * The three refusals, all of which lose a record if waved through:
168
+ * - DUPLICATE_SECTION: the reader takes the LAST `## Confirmations` heading and this writer
169
+ * replaces the FIRST, so on a two-section file a successful write lands where nothing reads.
170
+ * - FIELD_CHANGED: the confirmed text was edited while we were writing, so the record would be
171
+ * stale the moment it landed.
172
+ * - FILE_CHANGED: the file moved under us twice. One retry, then stop.
173
+ *
174
+ * This narrows the window; it does not close it. There is no atomic compare-and-swap on a plain
175
+ * file, and a lockfile brings failure modes a local dev tool should not have. What remains needs a
176
+ * write landing between the final read and the write itself.
177
+ */
178
+ export type ConfirmationWriteResult = {
179
+ ok: true;
180
+ kept: Record<string, unknown>[];
181
+ } | {
182
+ ok: false;
183
+ code: 'DUPLICATE_SECTION' | 'FIELD_CHANGED' | 'FILE_CHANGED';
184
+ };
185
+ export declare function writeConfirmationRecord(opts: {
186
+ read: () => string;
187
+ write: (content: string) => void;
188
+ dimension: string;
189
+ record: Record<string, unknown>;
190
+ /** The digest the record is anchored to; recomputed from each candidate read. */
191
+ anchor: string;
192
+ anchorOf: (raw: string) => string;
193
+ confirmationsOf: (raw: string) => Record<string, unknown>[];
194
+ }): ConfirmationWriteResult;
195
+ //# sourceMappingURL=intent-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-compiler.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/intent-compiler.ts"],"names":[],"mappings":"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"}
@@ -106,3 +106,4 @@ export declare function readIntentMeta(filePath: string): LocalIntentMeta | null
106
106
  */
107
107
  export declare function readIntentFile(filePath: string): LocalIntent | null;
108
108
  export declare function parseIntentMarkdown(content: string, fallbackId?: string): LocalIntent;
109
+ //# sourceMappingURL=local-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-reader.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/local-reader.ts"],"names":[],"mappings":"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"}
@@ -323,3 +323,4 @@ export declare function outcomeSelectorError(input: {
323
323
  outcomeId?: string;
324
324
  outcomeIndex?: number;
325
325
  }): string | null;
326
+ //# sourceMappingURL=measurement-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measurement-schema.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/measurement-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,cAAc,6CAA2C,CAAC;AACvE,eAAO,MAAM,cAAc,+CAA6C,CAAC;AAEzE,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAclB,CAAC;AAEP,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS1B,CAAC;AAEH,4EAA4E;AAC5E,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAW/C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,IAAI,CAKxG"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * OpenSpec change -> IntentFields: the import half of the bridge whose emit half is
3
+ * openspec-writer.ts.
4
+ *
5
+ * This exists for the OpenSpec-first user, who arrives with changes already written. Without it,
6
+ * signing up means re-typing judgment that already exists in their repo — the exact activation
7
+ * wall for the persona the acquisition story is aimed at. With it, adopting a change is one tool
8
+ * call, and the text is DETERMINISTICALLY EXTRACTED — never paraphrased by a model. That is a
9
+ * weaker claim than byte-verbatim and deliberately so: the reader strips markdown structure and
10
+ * HTML comments, and joins multi-line prose. What it never does is reword. The distinction that
11
+ * matters is the digest: normalizeAnchor collapses whitespace, so the extracted text hashes to
12
+ * the same digest as the author's, and a confirmation made after import survives exactly as long
13
+ * as the imported claim does.
14
+ *
15
+ * The projection is openSpecChangeToSpec — the SAME reader the preflight grades with, so an
16
+ * imported intent's verdict matches the preflight verdict of the change it came from on FIVE of
17
+ * six gates. `goal` is the exception, by design: see the title note below. Pinned in
18
+ * openspec-import.test.ts rather than asserted here.
19
+ *
20
+ * The one place import deliberately reads MORE than the grading projection: the title. The
21
+ * reader derives title from the directory name (hyphens to spaces), because as an instrument it
22
+ * must not reward pretty H1s — the corpus numbers depend on it staying frozen. An import is not a
23
+ * measurement: if proposal.md opens with an H1, that is the author's own name for the change and
24
+ * the intent should carry it. The grading projection is NOT changed for this; recalibrating the
25
+ * corpus over a title heuristic would contaminate recorded numbers for zero judgment value.
26
+ *
27
+ * That is where the `goal` gate can diverge, and the divergence is reachable rather than
28
+ * theoretical: a change directory named `wip`, `fix`, `update`, or `v2` fails the title gate as a
29
+ * title while its H1 passes. The import is the more useful reading of the same change; the
30
+ * preflight is the frozen instrument. Both are right for their job.
31
+ *
32
+ * What does not import, said out loud rather than silently dropped: design.md prose (their
33
+ * technical context and decisions stay in the change folder, where their workflow owns them) and
34
+ * tasks.md task lists (implementation state belongs to their flow; only the verification contract
35
+ * is judgment and travels). The tool receipt names both.
36
+ */
37
+ import { OpenSpecChangeRef } from '../../../scripts/openspec-corpus/openspec-reader';
38
+ import { IntentFields } from './intent-compiler';
39
+ export interface OpenSpecImport {
40
+ fields: IntentFields;
41
+ /** What the reader could not carry over — surfaced in the receipt, never silent. */
42
+ notes: string[];
43
+ /** False when nothing judgment-bearing was readable; the caller refuses instead of minting an empty intent. */
44
+ hasContent: boolean;
45
+ /**
46
+ * Why the import produced nothing, when the reason is specific.
47
+ *
48
+ * Separate from `notes` because the tool handler prints its own generic sentence for an empty
49
+ * import ("no readable proposal, design, or spec content"), which is actively WRONG when the
50
+ * real cause is an unreadable change-local intent.md: it points the author at files that were
51
+ * never the problem. A caller must prefer this string when it is set.
52
+ */
53
+ error?: string;
54
+ }
55
+ export declare function importOpenSpecChange(ref: OpenSpecChangeRef): OpenSpecImport;
56
+ //# sourceMappingURL=openspec-import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openspec-import.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/openspec-import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAErF,OAAO,EAAE,YAAY,EAAwB,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,oFAAoF;IACpF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+GAA+G;IAC/G,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAsBD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,GAAG,cAAc,CAwD3E"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * The product-judgment adapter for an OpenSpec change.
3
+ *
4
+ * WHY THIS IS A SEPARATE LAYER. `scripts/openspec-corpus/openspec-reader.ts` is a frozen
5
+ * instrument: the corpus measurements in docs/research/openspec-corpus-audit.md are only
6
+ * reproducible while it keeps reading exactly what it read then (that is also why it derives the
7
+ * title from the directory name rather than an H1, and why `openspec-import.ts` layers the nicer
8
+ * title on top instead of editing it). Teaching that file about `intent.md` would silently
9
+ * invalidate every recorded rate. So preference lives here, above it, and the reader stays
10
+ * untouched.
11
+ *
12
+ * WHAT THIS FIXES. The `pathmode-intent` schema writes the product judgment to a change-local
13
+ * `intent.md`, ahead of the proposal. The corpus reader has never heard of that file, so before
14
+ * this adapter existed, a change authored faithfully through our own schema graded as
15
+ * "nothing found" on five of six dimensions: we would have shipped a schema whose output our own
16
+ * gate accused of having no product judgment. That is the false-accusation failure the whole
17
+ * unconfirmed-not-absent program exists to remove, so it must not be reintroduced by two of our
18
+ * own tools disagreeing about where judgment lives.
19
+ *
20
+ * THE PRECEDENCE RULES, and each one is a decision rather than a default:
21
+ *
22
+ * 1. A recognized change-local `intent.md` is AUTHORITATIVE for the product fields. It was
23
+ * written to answer exactly these questions, in a format built for them.
24
+ * 2. No `intent.md` -> fall back to `openSpecChangeToSpec()` unchanged, so a standard OpenSpec
25
+ * repo grades exactly as it did before this file existed. Pinned by test.
26
+ * 3. An `intent.md` that exists but cannot be read is an ERROR, never a silent fallback. Quietly
27
+ * grading proposal.md instead would report a verdict about a document the author did not
28
+ * write, and hide the broken file that caused it.
29
+ * 4. Blank fields are NEVER backfilled from proposal.md. A missing objective in an intent.md is
30
+ * an unfinished product judgment, and the gate saying so is the product working. Merging the
31
+ * proposal's `## Why` over the gap would manufacture a pass out of a document written to
32
+ * answer a different question.
33
+ *
34
+ * Read-only throughout: nothing here writes, moves, or creates a file.
35
+ */
36
+ import { OpenSpecChangeRef, OpenSpecProjection } from '../../../scripts/openspec-corpus/openspec-reader';
37
+ /** The file the `pathmode-intent` schema's `product-intent` artifact generates. */
38
+ export declare const CHANGE_LOCAL_INTENT_FILE = "intent.md";
39
+ export type OpenSpecProductSource = 'intent.md' | 'openspec-artifacts';
40
+ /**
41
+ * What the adapter hands back.
42
+ *
43
+ * `verification` and `confirmations` are passed through VERBATIM rather than normalized, and both
44
+ * are load-bearing:
45
+ *
46
+ * - Verification kinds carry the feedback-loop semantics of intent.md. Flattening a
47
+ * `Fastest check` and a `Shipped signal` both to `test` throws away the distinction the file
48
+ * was written to record, and import would then write it back wrong.
49
+ * - Confirmations are what make the four-state gate work at all. `computeReadinessVerdict` reads
50
+ * `spec.confirmations` to lift a dimension the lexical test could not confirm. Dropping them
51
+ * re-blocks a dimension a human already confirmed, which is the exact accusation this whole
52
+ * program exists to stop, aimed at someone who did the extra work to answer it.
53
+ */
54
+ export interface PathmodeProductSpec extends Omit<OpenSpecProjection, 'verification'> {
55
+ /** The parsed verification object, kinds intact. */
56
+ verification: unknown;
57
+ /** Present only when the source file carried a `## Confirmations` section. */
58
+ confirmations?: unknown;
59
+ }
60
+ export interface OpenSpecProductRead {
61
+ /** Same shape either way, so every caller is source-agnostic. */
62
+ spec: PathmodeProductSpec;
63
+ source: OpenSpecProductSource;
64
+ /** Absolute path of the intent.md that won, when one did. */
65
+ intentPath?: string;
66
+ /** Losses and limitations, surfaced in receipts rather than left silent. */
67
+ notes: string[];
68
+ }
69
+ export interface OpenSpecProductError {
70
+ error: string;
71
+ intentPath: string;
72
+ }
73
+ export type OpenSpecProductResult = OpenSpecProductRead | OpenSpecProductError;
74
+ export declare function isProductReadError(r: OpenSpecProductResult): r is OpenSpecProductError;
75
+ /**
76
+ * Read a change's product judgment, preferring a change-local intent.md.
77
+ *
78
+ * `readFile` is injectable so tests can simulate an unreadable file (a permissions error, a
79
+ * directory where a file belongs) without depending on the filesystem to misbehave on cue.
80
+ */
81
+ export declare function readOpenSpecChangeForPathmode(ref: OpenSpecChangeRef, io?: {
82
+ exists?: (p: string) => boolean;
83
+ readFile?: (p: string) => string;
84
+ }): OpenSpecProductResult;
85
+ //# sourceMappingURL=openspec-product-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openspec-product-reader.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/openspec-product-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,EAAwB,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;AAG/H,mFAAmF;AACnF,eAAO,MAAM,wBAAwB,cAAc,CAAC;AAEpD,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,oBAAoB,CAAC;AAEvE;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC;IACjF,oDAAoD;IACpD,YAAY,EAAE,OAAO,CAAC;IACtB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAChC,iEAAiE;IACjE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AAE/E,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,qBAAqB,GAAG,CAAC,IAAI,oBAAoB,CAEtF;AA2DD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CACzC,GAAG,EAAE,iBAAiB,EACtB,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAO,GAC/E,qBAAqB,CAkDvB"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * OpenSpec change writer: the inverse of scripts/openspec-corpus/openspec-reader.ts.
3
+ *
4
+ * Pathmode emits a change folder that OpenSpec's own workflow can pick up: proposal.md,
5
+ * tasks.md, and a spec delta. The write is judged by TWO contracts, and the scenario-placement
6
+ * episode is why both are named: an emission can satisfy either one alone and still be wrong.
7
+ *
8
+ * 1. Round-trip fidelity, held by scripts/openspec-corpus/openspec-write-roundtrip.test.ts:
9
+ * reading the emitted change back through the OpenSpec reader reproduces the original spec's
10
+ * readiness verdict, dimension by dimension, with field digests intact. Digest intactness is
11
+ * what keeps a confirmation minted in Pathmode LIVE on the emitted change — the anchor is a
12
+ * digest of the field text, so the field must survive verbatim (whitespace collapse aside,
13
+ * which the digest normalizes anyway).
14
+ * 2. Structural acceptance by OpenSpec's own tooling, verified empirically against 1.11.0:
15
+ * `openspec validate` accepts a structurally complete emission (the first version passed
16
+ * contract 1 while failing this one — every requirement must carry at least one scenario).
17
+ *
18
+ * Every placement below is dictated by where the reader looks, measured on 80 public repos:
19
+ * - objective -> `## Why` in proposal.md (prose, read verbatim minus comment lines)
20
+ * - outcomes -> `### Requirement:` bodies in the spec delta (requirements win over
21
+ * `## What Changes` when both exist; What Changes is still emitted because
22
+ * that is what a human skims)
23
+ * - constraints-> `## Non-Goals` bullets in proposal.md. OpenSpec has no first-class
24
+ * constraints; prohibitions inside requirement prose are the other native form,
25
+ * but prefixing SHALL NOT onto the author's text would rewrite it and kill its
26
+ * digest. Non-Goals round-trips verbatim.
27
+ * - edge cases -> `#### Scenario:` blocks (scenario = header, expectedBehavior = the THEN line).
28
+ * The reader takes THEN/AND clauses only, so WHEN is emitted for human readers
29
+ * and ignored on the way back.
30
+ * - verification -> `## Verification` checklist in tasks.md, because that is where the corpus
31
+ * showed real authors put it (the finding the whole audit started from).
32
+ *
33
+ * What is deliberately NOT emitted: evidence anchors and confirmations (they live in Pathmode's
34
+ * record, and a file in someone's repo cannot vouch for itself), and fabricated implementation
35
+ * tasks (their /opsx workflow authors those; we contribute the verification contract only).
36
+ *
37
+ * Known seams, asserted in the round-trip test rather than hidden:
38
+ * - An outcome containing "never"/"no writes" reads back as BOTH an outcome and a constraint,
39
+ * because the reader mines requirement prose for prohibition sentences.
40
+ * - Scenarios are distributed across requirements in sequential chunks to satisfy OpenSpec's
41
+ * scenario-per-requirement rule; the assignment is mechanical, not a claimed linkage, and
42
+ * requirements left bare (fewer edge cases than outcomes) are reported, never papered over.
43
+ * - A multi-line objective containing its own `## ` heading would split the Why section. Real
44
+ * objectives are prose; this is documented, not defended against.
45
+ */
46
+ import { IntentFields } from './intent-compiler';
47
+ export interface OpenSpecChangeFile {
48
+ /** Relative to the change directory, e.g. "proposal.md" or "specs/<cap>/spec.md". */
49
+ path: string;
50
+ content: string;
51
+ }
52
+ export interface OpenSpecChange {
53
+ changeId: string;
54
+ files: OpenSpecChangeFile[];
55
+ /**
56
+ * Requirements OpenSpec's validator will flag: it requires at least one scenario per
57
+ * requirement, and an intent with fewer edge cases than outcomes cannot cover them all
58
+ * without fabricating a scenario, which this writer refuses to do. The caller surfaces
59
+ * these so the author adds real edge cases instead of the tool inventing fake ones.
60
+ */
61
+ uncoveredRequirements: string[];
62
+ }
63
+ /** Kebab a title into a change id: diacritics folded, non-alphanumerics collapsed to hyphens. */
64
+ export declare function openSpecChangeId(title: string): string;
65
+ export declare function formatOpenSpecChange(fields: IntentFields): OpenSpecChange;
66
+ //# sourceMappingURL=openspec-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openspec-writer.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/openspec-writer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,EAAE,YAAY,EAAwB,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IAC/B,qFAAqF;IACrF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;;;;;OAKG;IACH,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACnC;AAED,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUtD;AAeD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,cAAc,CAoHzE"}
@@ -20,3 +20,4 @@ export interface PathmodeMergeResult {
20
20
  * Pure; callers decide whether to actually write (skip the write when 'unchanged').
21
21
  */
22
22
  export declare function mergePathmodeSection(existing: string, section: string): PathmodeMergeResult;
23
+ //# sourceMappingURL=pathmode-section.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathmode-section.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/pathmode-section.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;AAEpF,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAiB3F"}
@@ -76,3 +76,4 @@ export type PushSpecResult = {
76
76
  }[];
77
77
  };
78
78
  export declare function pushSpec(input: PushSpecInput): Promise<PushSpecResult>;
79
+ //# sourceMappingURL=push-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-spec.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/push-spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,WAAW,UAAU;IACvB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,sEAAsE;IACtE,SAAS,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtE,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7E;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,iEAAiE;IACjE,EAAE,EAAE,MAAM,CAAC;IACX,kGAAkG;IAClG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,sFAAsF;IACtF,iBAAiB,EAAE,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACzG;AAED,MAAM,MAAM,cAAc,GACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,GAClG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC;AAElH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAsE5E"}
@@ -20,12 +20,12 @@ export declare function isVerificationCheckSubstantive(description: string | nul
20
20
  export declare function isObjectiveSpecific(objective: string | null | undefined): boolean;
21
21
  export declare function isOutcomeMeasurable(text: string): boolean;
22
22
  export declare const READINESS_BLOCKER_DESCRIPTIONS: Record<string, string>;
23
- /** Display order for the gate strip (title first, matching the Preflight page). */
24
23
  /**
25
24
  * Fold away everything that is a rewrite of the same claim, and nothing that is a change to it.
26
25
  * NFC because one glyph has two encodings; soft hyphens because editors inject them invisibly;
27
- * quote/dash folding and markdown emphasis because adding `**` around a word is formatting, not
28
- * a reword. Lowercased and whitespace-collapsed last.
26
+ * quote/dash folding and PAIRED markdown emphasis because adding `**` around a word is
27
+ * formatting, not a reword. An unpaired `*` or `_` is left alone: it is content (a wildcard),
28
+ * and deleting it silently kept confirmations alive across a real change to the claim. Lowercased and whitespace-collapsed last.
29
29
  */
30
30
  export declare function normalizeAnchor(value: unknown): string;
31
31
  /**
@@ -124,3 +124,4 @@ export declare function formatReadinessVerdict(verdict: ReadinessVerdict, specTi
124
124
  /** Override the closing repair line. The default names MCP tools, which are wrong in a CLI
125
125
  * reading a repo that has never installed Pathmode. */
126
126
  repairHint?: string): string;
127
+ //# sourceMappingURL=readiness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/readiness.ts"],"names":[],"mappings":"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"}
@@ -39,3 +39,4 @@ export declare function decideSave(params: {
39
39
  /** Id generator for a genuinely new intent. Injected so tests stay deterministic. */
40
40
  mintId: () => string;
41
41
  }): SaveDecision;
42
+ //# sourceMappingURL=save-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-policy.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/save-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAIlE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE;IAC/B,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qFAAqF;IACrF,MAAM,EAAE,MAAM,MAAM,CAAC;CACxB,GAAG,YAAY,CAqBf"}
@@ -10,3 +10,4 @@
10
10
  export declare function getSetupArgs(argv?: string[]): string[];
11
11
  export declare function isSetupCommand(argv?: string[]): boolean;
12
12
  export declare function runSetup(): Promise<void>;
13
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4HH,wBAAgB,YAAY,CAAC,IAAI,WAAe,GAAG,MAAM,EAAE,CAG1D;AAED,wBAAgB,cAAc,CAAC,IAAI,WAAe,GAAG,OAAO,CAE3D;AAID,wBAAsB,QAAQ,kBAoL7B"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * OpenSpec project reader.
3
+ *
4
+ * A lot of the people who launch the keyless first run already plan with OpenSpec: they have a
5
+ * change proposal sitting in the repo and no answer to "did this change deserve to be built".
6
+ * OpenSpec answers whether the code matches the agreed change; this reads that change and puts
7
+ * the deterministic Pathmode readiness gate on the product judgment behind it.
8
+ *
9
+ * Contract, enforced by openspec-reader.test.ts:
10
+ * - READ ONLY. Nothing in this file writes, creates, or deletes. Not under `openspec/`, not in
11
+ * a registered store, not anywhere.
12
+ * - NO SUBPROCESS. The `openspec` CLI may not be installed, and spawning a binary off PATH
13
+ * during a first run is not something a greeting gets to do. Everything comes off disk.
14
+ * - NO NETWORK. Keyless stays keyless.
15
+ * - SILENT ON FAILURE. Every read is individually wrapped and returns null. A malformed,
16
+ * unreadable, or unrecognized layout falls back to the normal first run with no error
17
+ * output and no stack trace. Nothing here writes to stderr — this runs at startup on the
18
+ * stdio transport.
19
+ * - `tasks.md` IS READ, BUT ONLY UNDER A VERIFICATION HEADING. Implementation work items are
20
+ * the plan, not the judgment behind it, and stay out of every field. A section headed
21
+ * Verification / Tests / Acceptance is where these authors actually record their checks.
22
+ */
23
+ import type { ReadinessSpecInput } from '../../packages/mcp-server/src/readiness';
24
+ export interface OpenSpecChangeRef {
25
+ /** Directory name of the change, which is its id. */
26
+ id: string;
27
+ /** Absolute path to the change directory. */
28
+ dir: string;
29
+ }
30
+ export interface OpenSpecContext {
31
+ /** The repo's own `openspec/` directory — always present when detection fires. */
32
+ openspecDir: string;
33
+ /** Store id from `openspec/config.yaml`, when planning is externalized. */
34
+ storeId?: string;
35
+ /** Resolved local path of that store, when the store is registered and readable. */
36
+ storeRoot?: string;
37
+ /** True when a store id was named but could not be resolved or read on this machine. */
38
+ storeUnresolved: boolean;
39
+ /** Where changes were actually found: the store when resolved, else the repo. */
40
+ planningHome: string;
41
+ changes: OpenSpecChangeRef[];
42
+ }
43
+ /**
44
+ * Pull a top-level `store:` scalar out of `openspec/config.yaml`.
45
+ *
46
+ * Deliberately not a YAML parse. The package declares three runtime dependencies and a YAML
47
+ * parser is only available transitively; depending on a transitive package is how a bundle
48
+ * breaks on someone else's install. One top-level scalar does not justify a new dependency.
49
+ * Anything that is not a plain top-level `store: <id>` returns null, which reads as "no store
50
+ * pointer" and falls back to local artifacts.
51
+ */
52
+ export declare function readStorePointer(configYaml: string | null): string | null;
53
+ /** Where OpenSpec 1.11.0 registers stores. XDG override honoured, home fallback otherwise. */
54
+ export declare function storeRegistryPath(env?: NodeJS.ProcessEnv): string;
55
+ /**
56
+ * Resolve a store id to a local path by scanning the registry's indentation.
57
+ *
58
+ * A bounded scanner rather than a YAML parse, for the dependency reason above and because the
59
+ * shape is documented as beta: this looks for the block whose key is the store id, then returns
60
+ * the first scalar beneath it whose key looks like a local path, at any depth. A rename of the
61
+ * intervening `backend:` level does not break it. Anything unexpected returns null and the
62
+ * caller reports the store as unresolved rather than claiming there is no OpenSpec project.
63
+ */
64
+ export declare function resolveStorePath(registryYaml: string | null, storeId: string): string | null;
65
+ /**
66
+ * Detect an OpenSpec project in `cwd`, or return null.
67
+ *
68
+ * The no-OpenSpec path is a single `existsSync`. Nothing else is stat'ed, opened, or walked, so
69
+ * a repo without OpenSpec cannot pay measurable cost for this.
70
+ */
71
+ export declare function detectOpenSpec(cwd?: string, env?: NodeJS.ProcessEnv): OpenSpecContext | null;
72
+ export interface OpenSpecProjection extends ReadinessSpecInput {
73
+ title: string;
74
+ objective: string;
75
+ outcomes: string[];
76
+ constraints: string[];
77
+ edgeCases: {
78
+ scenario: string;
79
+ expectedBehavior: string;
80
+ }[];
81
+ verification: {
82
+ checks: {
83
+ kind: 'test';
84
+ description: string;
85
+ }[];
86
+ };
87
+ /** False when nothing judgment-bearing could be read — the caller must not fabricate a verdict. */
88
+ hasContent: boolean;
89
+ }
90
+ /**
91
+ * Map a change's judgment-bearing artifacts onto the six readiness gates.
92
+ *
93
+ * Scenarios feed `edgeCases` and deliberately NOT `verification`. A scenario states what must be
94
+ * true; it does not say how you would observe it after shipping. Feeding one source into two
95
+ * gates would make both pass off a single artifact and hollow out the verdict.
96
+ *
97
+ * RECALL IS UNVALIDATED. This is heading-matching over four filenames, so a change with checks
98
+ * under an unfamiliar heading, nested deeper, or written as prose outside any section is invisible
99
+ * to it. When the gate fires, the honest statement is "this reader found no check", never "the
100
+ * author recorded none" — the difference between those two is exactly the mistake this file
101
+ * already made once at scale. Same caution on `objective`, which is an exact `## Why` match, and
102
+ * on `outcomes`, which maps OpenSpec requirements (system behaviour) onto Pathmode outcomes
103
+ * (observable product change). Those are related but not the same field, and a low pass rate
104
+ * there is a hypothesis, not a measurement.
105
+ */
106
+ export declare function openSpecChangeToSpec(change: OpenSpecChangeRef): OpenSpecProjection;
107
+ /**
108
+ * The OpenSpec-aware replacement for the generic first-run guidance. Names the change instead of
109
+ * welcoming the user to an empty repo, and never guesses when there is more than one change.
110
+ */
111
+ export declare function formatOpenSpecFirstRun(ctx: OpenSpecContext): string;
112
+ /**
113
+ * Pick the first-run guidance. With no OpenSpec project this returns the caller's own constant
114
+ * unchanged — by reference, so a repo without `openspec/` provably gets byte-identical guidance
115
+ * to the one it got before this change.
116
+ */
117
+ export declare function localFirstRunInstructions(fallback: string, ctx: OpenSpecContext | null): string;
118
+ export type OpenSpecResolution =
119
+ /** Preflight this projection. */
120
+ {
121
+ kind: 'spec';
122
+ spec: OpenSpecProjection;
123
+ sourceNote: string;
124
+ }
125
+ /** Say this instead of running a verdict — ambiguity, absence, or nothing readable. */
126
+ | {
127
+ kind: 'message';
128
+ text: string;
129
+ }
130
+ /** Nothing to say; the caller keeps its existing behaviour. */
131
+ | {
132
+ kind: 'none';
133
+ };
134
+ /**
135
+ * Resolve what `check_intent_readiness` should preflight when no local intent answered.
136
+ *
137
+ * Never guesses between changes: with more than one and no id, it hands back the list. An
138
+ * `intentId` that matches no change returns `none`, so the caller's own "no intent with that id"
139
+ * message still wins rather than being replaced by an OpenSpec-flavoured near-miss.
140
+ */
141
+ export declare function resolveOpenSpecSubject(ctx: OpenSpecContext | null, intentId?: string): OpenSpecResolution;
142
+ //# sourceMappingURL=openspec-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openspec-reader.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/scripts/openspec-corpus/openspec-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAmDH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAElF,MAAM,WAAW,iBAAiB;IAC9B,qDAAqD;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC5B,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,eAAe,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAChC;AA+CD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAkBzE;AAID,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAK9E;AAMD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA4C5F;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,GAAE,MAAsB,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,GAAG,IAAI,CAoCxH;AAiFD,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,YAAY,EAAE;QAAE,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IAClE,mGAAmG;IACnG,UAAU,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,CAuClF;AAwFD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAyCnE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,GAAG,MAAM,CAE/F;AAID,MAAM,MAAM,kBAAkB;AAC1B,iCAAiC;AAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAChE,uFAAuF;GACrF;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACnC,+DAA+D;GAC7D;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvB;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,kBAAkB,CA2BzG"}