@pathmode/mcp-server 1.11.0 → 1.12.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.
- package/README.md +3 -0
- package/dist/cli-info.d.ts +17 -0
- package/dist/cli-info.d.ts.map +1 -0
- package/dist/index.js +115 -5
- package/dist/intent-compiler.d.ts +4 -0
- package/dist/intent-compiler.d.ts.map +1 -1
- package/dist/readiness.d.ts +7 -0
- package/dist/readiness.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/preflight/SKILL.md +2 -0
package/README.md
CHANGED
|
@@ -61,6 +61,7 @@ That's it. No API key needed.
|
|
|
61
61
|
id: "intent_17291..."
|
|
62
62
|
version: 1
|
|
63
63
|
status: "draft"
|
|
64
|
+
readiness: "passed 6/6"
|
|
64
65
|
---
|
|
65
66
|
# Fix Checkout Payment Timeout
|
|
66
67
|
|
|
@@ -78,6 +79,8 @@ timeouts exceeding 3 seconds.
|
|
|
78
79
|
- **Unknown provider status**: Hold order, notify user within 30s
|
|
79
80
|
```
|
|
80
81
|
|
|
82
|
+
The `readiness` line is the deterministic preflight verdict, stamped on every save — "passed 6/6", or "failed N/6" naming the blocking gates — so any agent reading the file knows whether the spec cleared the gate without re-running it. Specs exported from a Pathmode workspace also carry `source:` (the canonical intent URL — the file is a working copy of that record) and `evidence:` (how many linked evidence items back it).
|
|
83
|
+
|
|
81
84
|
**.cursorrules** — Agent-directive format for Cursor:
|
|
82
85
|
```
|
|
83
86
|
# CURRENT OBJECTIVE
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `--version` / `--help` handling.
|
|
3
|
+
*
|
|
4
|
+
* Without this, any argument that is not a known subcommand falls through to
|
|
5
|
+
* StdioServerTransport, which waits on stdin forever. `npx @pathmode/mcp-server --version`
|
|
6
|
+
* — the first thing someone types after installing — looked like a hang.
|
|
7
|
+
*
|
|
8
|
+
* Deliberately narrow: only these exact flags are claimed. An unrecognized flag still
|
|
9
|
+
* starts the server, because an MCP client passing something we do not know about must
|
|
10
|
+
* get a working server, not a usage screen on stdout (which would corrupt the JSON-RPC
|
|
11
|
+
* stream). Like the other subcommands, these print to stdout and must run before the
|
|
12
|
+
* transport claims it.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isVersionCommand(argv?: string[]): boolean;
|
|
15
|
+
export declare function isHelpCommand(argv?: string[]): boolean;
|
|
16
|
+
export declare function formatVersion(version: string): string;
|
|
17
|
+
export declare function formatHelp(version: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"","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"}
|
package/dist/index.js
CHANGED
|
@@ -33753,6 +33753,74 @@ class PathmodeClient {
|
|
|
33753
33753
|
exports.PathmodeClient = PathmodeClient;
|
|
33754
33754
|
|
|
33755
33755
|
|
|
33756
|
+
/***/ }),
|
|
33757
|
+
|
|
33758
|
+
/***/ 7198:
|
|
33759
|
+
/***/ ((__unused_webpack_module, exports) => {
|
|
33760
|
+
|
|
33761
|
+
"use strict";
|
|
33762
|
+
|
|
33763
|
+
/**
|
|
33764
|
+
* `--version` / `--help` handling.
|
|
33765
|
+
*
|
|
33766
|
+
* Without this, any argument that is not a known subcommand falls through to
|
|
33767
|
+
* StdioServerTransport, which waits on stdin forever. `npx @pathmode/mcp-server --version`
|
|
33768
|
+
* — the first thing someone types after installing — looked like a hang.
|
|
33769
|
+
*
|
|
33770
|
+
* Deliberately narrow: only these exact flags are claimed. An unrecognized flag still
|
|
33771
|
+
* starts the server, because an MCP client passing something we do not know about must
|
|
33772
|
+
* get a working server, not a usage screen on stdout (which would corrupt the JSON-RPC
|
|
33773
|
+
* stream). Like the other subcommands, these print to stdout and must run before the
|
|
33774
|
+
* transport claims it.
|
|
33775
|
+
*/
|
|
33776
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
33777
|
+
exports.isVersionCommand = isVersionCommand;
|
|
33778
|
+
exports.isHelpCommand = isHelpCommand;
|
|
33779
|
+
exports.formatVersion = formatVersion;
|
|
33780
|
+
exports.formatHelp = formatHelp;
|
|
33781
|
+
const VERSION_FLAGS = new Set(['--version', '-v']);
|
|
33782
|
+
const HELP_FLAGS = new Set(['--help', '-h']);
|
|
33783
|
+
function isVersionCommand(argv = process.argv) {
|
|
33784
|
+
return argv.slice(2).some((a) => VERSION_FLAGS.has(a));
|
|
33785
|
+
}
|
|
33786
|
+
function isHelpCommand(argv = process.argv) {
|
|
33787
|
+
return argv.slice(2).some((a) => HELP_FLAGS.has(a));
|
|
33788
|
+
}
|
|
33789
|
+
function formatVersion(version) {
|
|
33790
|
+
return `@pathmode/mcp-server ${version}`;
|
|
33791
|
+
}
|
|
33792
|
+
function formatHelp(version) {
|
|
33793
|
+
return [
|
|
33794
|
+
formatVersion(version),
|
|
33795
|
+
'',
|
|
33796
|
+
'MCP server for Pathmode — intent specs your coding agent can read.',
|
|
33797
|
+
'',
|
|
33798
|
+
'USAGE',
|
|
33799
|
+
' npx @pathmode/mcp-server Start the server (stdio). This is what an',
|
|
33800
|
+
' MCP client runs; it waits on stdin by design.',
|
|
33801
|
+
' npx @pathmode/mcp-server setup [key] Configure Claude Code/Desktop, Cursor, Windsurf.',
|
|
33802
|
+
' npx @pathmode/mcp-server install-skills Install the skill pack into this project.',
|
|
33803
|
+
' npx @pathmode/mcp-server --version Print the version.',
|
|
33804
|
+
' npx @pathmode/mcp-server --help Print this help.',
|
|
33805
|
+
'',
|
|
33806
|
+
'MODES',
|
|
33807
|
+
' Local (default, no key) Specs live in intent.md in your repo. Nothing leaves the machine.',
|
|
33808
|
+
' Cloud (with a key) Syncs intent and evidence with a Pathmode workspace.',
|
|
33809
|
+
' Set PATHMODE_API_KEY, or run setup with a pm_live_ key.',
|
|
33810
|
+
'',
|
|
33811
|
+
'FLAGS',
|
|
33812
|
+
' --local Force local mode even when an API key is configured.',
|
|
33813
|
+
'',
|
|
33814
|
+
'ENVIRONMENT',
|
|
33815
|
+
' PATHMODE_API_KEY Workspace key (pm_live_…). Absent means local mode.',
|
|
33816
|
+
' PATHMODE_API_URL Override the API base URL. Defaults to https://pathmode.io',
|
|
33817
|
+
' PATHMODE_MCP_DEBUG=1 Log the inferred mode to stderr on startup.',
|
|
33818
|
+
'',
|
|
33819
|
+
'Docs: https://pathmode.io/developers · Preflight: https://preflight.pathmode.io',
|
|
33820
|
+
].join('\n');
|
|
33821
|
+
}
|
|
33822
|
+
|
|
33823
|
+
|
|
33756
33824
|
/***/ }),
|
|
33757
33825
|
|
|
33758
33826
|
/***/ 3783:
|
|
@@ -34165,6 +34233,8 @@ function formatIntentMd(spec, opts = {}) {
|
|
|
34165
34233
|
id: spec.id || `intent_${Date.now()}`,
|
|
34166
34234
|
version: opts.version && opts.version >= 1 ? opts.version : 1,
|
|
34167
34235
|
status: opts.status || 'draft',
|
|
34236
|
+
...(opts.readiness ? { readiness: opts.readiness } : {}),
|
|
34237
|
+
...(opts.source ? { source: opts.source } : {}),
|
|
34168
34238
|
created: opts.created || now,
|
|
34169
34239
|
updated: now,
|
|
34170
34240
|
};
|
|
@@ -35034,6 +35104,7 @@ exports.isVerificationCheckSubstantive = isVerificationCheckSubstantive;
|
|
|
35034
35104
|
exports.isObjectiveSpecific = isObjectiveSpecific;
|
|
35035
35105
|
exports.isOutcomeMeasurable = isOutcomeMeasurable;
|
|
35036
35106
|
exports.computeReadinessVerdict = computeReadinessVerdict;
|
|
35107
|
+
exports.formatReadinessFrontmatter = formatReadinessFrontmatter;
|
|
35037
35108
|
exports.formatReadinessVerdict = formatReadinessVerdict;
|
|
35038
35109
|
// ── Text/shape coercion (mirrors lib/intentReadiness coerceText/asArray) ───
|
|
35039
35110
|
function coerceText(value) {
|
|
@@ -35205,6 +35276,29 @@ const GATE_LABELS = {
|
|
|
35205
35276
|
edgeCases: 'Edge cases',
|
|
35206
35277
|
verification: 'Verification',
|
|
35207
35278
|
};
|
|
35279
|
+
/** Gate keys → short labels for the frontmatter blocking list. */
|
|
35280
|
+
const FRONTMATTER_GATE_LABELS = {
|
|
35281
|
+
goal: 'title',
|
|
35282
|
+
objective: 'objective',
|
|
35283
|
+
outcomes: 'outcomes',
|
|
35284
|
+
constraints: 'constraints',
|
|
35285
|
+
edgeCases: 'edge-cases',
|
|
35286
|
+
verification: 'verification',
|
|
35287
|
+
};
|
|
35288
|
+
/**
|
|
35289
|
+
* Single-line readiness value stamped into intent.md frontmatter, so the verdict travels
|
|
35290
|
+
* with the file: "passed 6/6" or "failed 4/6 — blocking: constraints, verification".
|
|
35291
|
+
* Deterministic and greppable. Mirrored in lib/intentReadiness.formatReadinessFrontmatter;
|
|
35292
|
+
* lib/preflightReadinessParity.test.ts fails CI if the two drift.
|
|
35293
|
+
*/
|
|
35294
|
+
function formatReadinessFrontmatter(verdict) {
|
|
35295
|
+
const total = exports.READINESS_GATE_ORDER.length;
|
|
35296
|
+
const passed = exports.READINESS_GATE_ORDER.filter((k) => verdict.signals[k]).length;
|
|
35297
|
+
if (verdict.ready)
|
|
35298
|
+
return `passed ${passed}/${total}`;
|
|
35299
|
+
const blocking = exports.READINESS_GATE_ORDER.filter((k) => !verdict.signals[k]).map((k) => FRONTMATTER_GATE_LABELS[k]);
|
|
35300
|
+
return `failed ${passed}/${total} — blocking: ${blocking.join(', ')}`;
|
|
35301
|
+
}
|
|
35208
35302
|
/** Human/agent-readable verdict block, stable enough to parse by line prefix. */
|
|
35209
35303
|
function formatReadinessVerdict(verdict, specTitle) {
|
|
35210
35304
|
const lines = [];
|
|
@@ -65155,7 +65249,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"$schema":"http://json-schema.org/dra
|
|
|
65155
65249
|
/***/ ((module) => {
|
|
65156
65250
|
|
|
65157
65251
|
"use strict";
|
|
65158
|
-
module.exports = /*#__PURE__*/JSON.parse('{"name":"@pathmode/mcp-server","version":"1.
|
|
65252
|
+
module.exports = /*#__PURE__*/JSON.parse('{"name":"@pathmode/mcp-server","version":"1.12.1","publishConfig":{"access":"public"},"mcpName":"io.github.pathmodeio/mcp-server","description":"Pathmode MCP Server — Build structured intent specs through Socratic AI conversation (zero-config), or connect to your Intent Layer for strategic context, dependency graphs, and implementation prompts.","main":"dist/index.js","bin":{"pathmode-mcp":"dist/index.js"},"files":["dist/","manifest.json","icon.svg","README.md","skills/"],"scripts":{"build":"rm -rf dist && ncc build src/index.ts -o dist","dev":"ts-node src/index.ts","prepublishOnly":"npm run build"},"keywords":["pathmode","mcp","model-context-protocol","claude-code","claude-code-skills","agent-skills","cursor","windsurf","intent-engineering","intent-compiler","ai-agents","product-development","dependency-graph","strategic-planning"],"author":"Pathmode","license":"MIT","type":"commonjs","engines":{"node":">=18.0.0"},"repository":{"type":"git","url":"git+https://github.com/pathmodeio/mcp-server.git","directory":"packages/mcp-server"},"homepage":"https://pathmode.io","dependencies":{"@modelcontextprotocol/sdk":"^1.12.1","gray-matter":"^4.0.3","zod":"^3.24.0"},"devDependencies":{"@types/node":"^25.1.0","@vercel/ncc":"^0.38.4","ts-node":"^10.9.2","typescript":"^5.9.3"}}');
|
|
65159
65253
|
|
|
65160
65254
|
/***/ })
|
|
65161
65255
|
|
|
@@ -65257,15 +65351,24 @@ const intent_compiler_1 = __nccwpck_require__(6488);
|
|
|
65257
65351
|
const pathmode_section_1 = __nccwpck_require__(4681);
|
|
65258
65352
|
const setup_1 = __nccwpck_require__(8294);
|
|
65259
65353
|
const install_skills_1 = __nccwpck_require__(3783);
|
|
65354
|
+
const cli_info_1 = __nccwpck_require__(7198);
|
|
65260
65355
|
// Server version is sourced from package.json so the version reported to MCP
|
|
65261
65356
|
// clients always matches the published package. ncc statically resolves this
|
|
65262
65357
|
// require() and inlines the JSON at build time (no runtime fs read).
|
|
65263
65358
|
const { version: SERVER_VERSION } = __nccwpck_require__(8330);
|
|
65264
65359
|
// ─── Subcommand routing ───────────────────────────────────────
|
|
65265
|
-
// Human-readable subcommands (`setup`, `install-skills`) use stdout
|
|
65360
|
+
// Human-readable subcommands (`setup`, `install-skills`, `--version`, `--help`) use stdout
|
|
65266
65361
|
// and must run before StdioServerTransport claims stdout for JSON-RPC.
|
|
65267
65362
|
// We call startMcpServer() only when NOT in a subcommand.
|
|
65268
|
-
if ((0,
|
|
65363
|
+
if ((0, cli_info_1.isVersionCommand)()) {
|
|
65364
|
+
console.log((0, cli_info_1.formatVersion)(SERVER_VERSION));
|
|
65365
|
+
process.exit(0);
|
|
65366
|
+
}
|
|
65367
|
+
else if ((0, cli_info_1.isHelpCommand)()) {
|
|
65368
|
+
console.log((0, cli_info_1.formatHelp)(SERVER_VERSION));
|
|
65369
|
+
process.exit(0);
|
|
65370
|
+
}
|
|
65371
|
+
else if ((0, setup_1.isSetupCommand)()) {
|
|
65269
65372
|
(0, setup_1.runSetup)().then(() => process.exit(0)).catch((err) => {
|
|
65270
65373
|
console.error(err);
|
|
65271
65374
|
process.exit(1);
|
|
@@ -66354,13 +66457,20 @@ function startMcpServer() {
|
|
|
66354
66457
|
};
|
|
66355
66458
|
}
|
|
66356
66459
|
const { id, version, status, created } = decision;
|
|
66357
|
-
|
|
66460
|
+
// The preflight verdict travels with the file: stamped into frontmatter on every save,
|
|
66461
|
+
// recomputed from the spec alone (deterministic). A failing verdict never blocks the
|
|
66462
|
+
// save — the gate reports, the user decides.
|
|
66463
|
+
const verdict = (0, readiness_1.computeReadinessVerdict)(spec);
|
|
66464
|
+
const content = (0, intent_compiler_1.formatIntentMd)({ ...spec, id }, { version, status, created, readiness: (0, readiness_1.formatReadinessFrontmatter)(verdict) });
|
|
66358
66465
|
(0, fs_1.writeFileSync)(filePath, content, 'utf-8');
|
|
66359
66466
|
const action = decision.action === 'update' ? `Updated intent spec (v${version})` : 'Saved intent spec';
|
|
66467
|
+
const readinessNote = verdict.ready
|
|
66468
|
+
? ''
|
|
66469
|
+
: `\n\n${(0, readiness_1.formatReadinessVerdict)(verdict, spec.title)}`;
|
|
66360
66470
|
return {
|
|
66361
66471
|
content: [{
|
|
66362
66472
|
type: 'text',
|
|
66363
|
-
text: `✓ ${action} at ${filePath}\n id: ${id} · status: ${status}\n\nTo connect this to Pathmode for dependency tracking and team collaboration, visit pathmode.io`,
|
|
66473
|
+
text: `✓ ${action} at ${filePath}\n id: ${id} · status: ${status} · readiness: ${(0, readiness_1.formatReadinessFrontmatter)(verdict)}${readinessNote}\n\nTo connect this to Pathmode for dependency tracking and team collaboration, visit pathmode.io`,
|
|
66364
66474
|
}],
|
|
66365
66475
|
};
|
|
66366
66476
|
});
|
|
@@ -83,6 +83,10 @@ export interface IntentMdOptions {
|
|
|
83
83
|
status?: string;
|
|
84
84
|
/** Original `created` timestamp. Preserved across updates; defaults to now. */
|
|
85
85
|
created?: string;
|
|
86
|
+
/** Preflight verdict line ("passed 6/6" / "failed 4/6 — blocking: …"), recomputed at save time. */
|
|
87
|
+
readiness?: string;
|
|
88
|
+
/** Canonical record URL (cloud intents). Omitted when this file is the only copy. */
|
|
89
|
+
source?: string;
|
|
86
90
|
}
|
|
87
91
|
/**
|
|
88
92
|
* Generate intent.md content with YAML frontmatter.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/intent-compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,WAAW,cAAc;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAC1G,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AACxE,MAAM,WAAW,iBAAiB;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,qBAAqB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAsDD,MAAM,WAAW,YAAY;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB;;iCAE6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,MAAM,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC,EAAE,CAAC;IAC7F,6GAA6G;IAC7G,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACtD,YAAY,CAAC,EAAE;QACX,8GAA8G;QAC9G,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAC7B,kDAAkD;QAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF;sFACkF;IAClF,qBAAqB,CAAC,EAAE;QACpB,aAAa,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACnD,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;KACtC,GAAG,IAAI,CAAC;CACZ;AAwDD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CA4D/C;AAoBD,kGAAkG;AAClG,MAAM,WAAW,eAAe;IAC5B,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/intent-compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/readiness.d.ts
CHANGED
|
@@ -42,5 +42,12 @@ export interface ReadinessVerdict {
|
|
|
42
42
|
* (the legacy phase-engagement signal never gates the verdict here).
|
|
43
43
|
*/
|
|
44
44
|
export declare function computeReadinessVerdict(spec: ReadinessSpecInput): ReadinessVerdict;
|
|
45
|
+
/**
|
|
46
|
+
* Single-line readiness value stamped into intent.md frontmatter, so the verdict travels
|
|
47
|
+
* with the file: "passed 6/6" or "failed 4/6 — blocking: constraints, verification".
|
|
48
|
+
* Deterministic and greppable. Mirrored in lib/intentReadiness.formatReadinessFrontmatter;
|
|
49
|
+
* lib/preflightReadinessParity.test.ts fails CI if the two drift.
|
|
50
|
+
*/
|
|
51
|
+
export declare function formatReadinessFrontmatter(verdict: ReadinessVerdict): string;
|
|
45
52
|
/** Human/agent-readable verdict block, stable enough to parse by line prefix. */
|
|
46
53
|
export declare function formatReadinessVerdict(verdict: ReadinessVerdict, specTitle?: string): string;
|
package/dist/readiness.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/readiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQjD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,EAAE,CAIjE;AAoCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAQ3E;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI5D;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAI9F;AAQD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAOjF;AAQD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKzD;AAID,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOjE,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,wFAAyF,CAAC;AAK3H,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B;AAoBD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,CAkBlF;
|
|
1
|
+
{"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/readiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQjD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,EAAE,CAIjE;AAoCD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAQ3E;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI5D;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAI9F;AAQD,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAOjF;AAQD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKzD;AAID,eAAO,MAAM,8BAA8B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOjE,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,oBAAoB,wFAAyF,CAAC;AAK3H,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B;AAoBD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,CAkBlF;AAqBD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAM5E;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB5F"}
|
package/package.json
CHANGED
|
@@ -30,6 +30,8 @@ If the verdict passes: say so and stop. Do not invent extra requirements beyond
|
|
|
30
30
|
|
|
31
31
|
The gate is pure functions over the spec text: no model call, no network. Re-running never changes the verdict unless the spec changed. That makes it a floor you can put in front of any implementation work — and it means a passing verdict is reproducible evidence, not an opinion. The same gate runs live at preflight.pathmode.io.
|
|
32
32
|
|
|
33
|
+
Every `intent_save` also stamps the verdict into the file's frontmatter as `readiness:` ("passed 6/6", or "failed N/6" with the blocking gates named), so anyone reading intent.md — human or agent — sees the gate state without re-running anything. A failing verdict never blocks the save; the gate reports, the user decides.
|
|
34
|
+
|
|
33
35
|
## Division of labor with the other skills
|
|
34
36
|
|
|
35
37
|
- `preflight` — deterministic verdict: IS the spec ready? Cheap, run it first and often.
|