@pathmode/mcp-server 1.18.0 → 1.19.0
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/dist/index.js +444 -199
- package/dist/packages/intentspec-format/serializeIntentMd.d.ts +164 -0
- package/dist/packages/intentspec-format/serializeIntentMd.d.ts.map +1 -0
- package/dist/packages/mcp-server/src/api-client.d.ts +6 -0
- package/dist/packages/mcp-server/src/api-client.d.ts.map +1 -1
- package/dist/packages/mcp-server/src/intent-compiler.d.ts +19 -1
- package/dist/packages/mcp-server/src/intent-compiler.d.ts.map +1 -1
- package/dist/packages/mcp-server/src/local-reader.d.ts +8 -0
- package/dist/packages/mcp-server/src/local-reader.d.ts.map +1 -1
- package/dist/packages/mcp-server/src/push-spec.d.ts +19 -12
- package/dist/packages/mcp-server/src/push-spec.d.ts.map +1 -1
- package/manifest.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -39170,6 +39170,398 @@ module.exports = function(str) {
|
|
|
39170
39170
|
};
|
|
39171
39171
|
|
|
39172
39172
|
|
|
39173
|
+
/***/ }),
|
|
39174
|
+
|
|
39175
|
+
/***/ 229:
|
|
39176
|
+
/***/ ((__unused_webpack_module, exports) => {
|
|
39177
|
+
|
|
39178
|
+
"use strict";
|
|
39179
|
+
|
|
39180
|
+
/**
|
|
39181
|
+
* serializeIntentMd — the one implementation of the intent.md file format.
|
|
39182
|
+
*
|
|
39183
|
+
* Two writers used to exist: `lib/agentPromptGenerator.ts` (cloud exports, browser downloads) and
|
|
39184
|
+
* `packages/mcp-server/src/intent-compiler.ts` (every local, keyless write). They diverged in BOTH
|
|
39185
|
+
* directions, and the divergence cost more than tidiness:
|
|
39186
|
+
*
|
|
39187
|
+
* - the cloud writer emitted no `## Confirmations`, so a human's authenticated confirmation died
|
|
39188
|
+
* at the boundary and never reached the repo;
|
|
39189
|
+
* - the local writer emitted no authorization gate, so an agent proposal still pending human
|
|
39190
|
+
* judgment lost its DO-NOT-IMPLEMENT banner on the next local save.
|
|
39191
|
+
*
|
|
39192
|
+
* Both are the same failure: judgment recorded in one place not travelling to the other. This
|
|
39193
|
+
* module emits the union, and `serializer-parity.test.ts` holds the two callers to it.
|
|
39194
|
+
*
|
|
39195
|
+
* ZERO IMPORTS, deliberately. The local writer is bundled by ncc into a published npm package that
|
|
39196
|
+
* must run keyless and offline, and the cloud writer is reached from `'use client'` components — so
|
|
39197
|
+
* a single node builtin here (`crypto`, say) would break the browser bundle. Callers compute their
|
|
39198
|
+
* own environment-specific values (id minting, readiness verdicts, evidence resolution) and hand
|
|
39199
|
+
* the results in as plain data.
|
|
39200
|
+
*/
|
|
39201
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
39202
|
+
exports.toSerializableChecks = toSerializableChecks;
|
|
39203
|
+
exports.renderAuthorizationGateText = renderAuthorizationGateText;
|
|
39204
|
+
exports.renderConfirmationsBody = renderConfirmationsBody;
|
|
39205
|
+
exports.serializeIntentMd = serializeIntentMd;
|
|
39206
|
+
// ── Small helpers ───────────────────────────────────────────────────────────
|
|
39207
|
+
const VERIFICATION_KIND_LABELS = {
|
|
39208
|
+
fastest: 'Fastest check',
|
|
39209
|
+
'shipped-signal': 'Shipped signal',
|
|
39210
|
+
'regression-guard': 'Regression guard',
|
|
39211
|
+
manual: 'Manual check',
|
|
39212
|
+
test: 'Automated test',
|
|
39213
|
+
};
|
|
39214
|
+
const VERIFICATION_KIND_ORDER = ['fastest', 'shipped-signal', 'regression-guard', 'manual', 'test'];
|
|
39215
|
+
const VERIFICATION_KIND_SET = new Set(VERIFICATION_KIND_ORDER);
|
|
39216
|
+
function nonEmpty(v) {
|
|
39217
|
+
return typeof v === 'string' && v.trim().length > 0;
|
|
39218
|
+
}
|
|
39219
|
+
/** YAML double-quoted scalars. Both writers used to interpolate raw, so a product named `The "Real"
|
|
39220
|
+
* One` produced a file gray-matter could not parse. */
|
|
39221
|
+
function yamlScalar(value) {
|
|
39222
|
+
if (typeof value === 'number')
|
|
39223
|
+
return String(value);
|
|
39224
|
+
return `"${String(value).replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
39225
|
+
}
|
|
39226
|
+
function outcomeOf(o) {
|
|
39227
|
+
return typeof o === 'string' ? { text: o } : o;
|
|
39228
|
+
}
|
|
39229
|
+
function constraintOf(c) {
|
|
39230
|
+
return typeof c === 'string' ? { text: c } : c;
|
|
39231
|
+
}
|
|
39232
|
+
/** `backed by:` suffix on its own indented bullet. Empty when nothing resolved, so callers append
|
|
39233
|
+
* unconditionally. */
|
|
39234
|
+
function backedBySuffix(refs, indent = ' ') {
|
|
39235
|
+
const clean = (refs || []).filter(nonEmpty);
|
|
39236
|
+
if (!clean.length)
|
|
39237
|
+
return '';
|
|
39238
|
+
return `\n${indent}- backed by: ${clean.join('; ')}`;
|
|
39239
|
+
}
|
|
39240
|
+
/** Read verification uniformly as a check collection: canonical `checks[]` plus the legacy
|
|
39241
|
+
* {manual,unit,e2e} buckets, which are adapted rather than dropped. */
|
|
39242
|
+
function toSerializableChecks(v) {
|
|
39243
|
+
if (!v || typeof v !== 'object')
|
|
39244
|
+
return [];
|
|
39245
|
+
const out = [];
|
|
39246
|
+
for (const c of Array.isArray(v.checks) ? v.checks : []) {
|
|
39247
|
+
if (!nonEmpty(c?.description))
|
|
39248
|
+
continue;
|
|
39249
|
+
out.push({
|
|
39250
|
+
kind: VERIFICATION_KIND_SET.has(String(c.kind)) ? String(c.kind) : 'test',
|
|
39251
|
+
description: c.description.trim(),
|
|
39252
|
+
status: c.status,
|
|
39253
|
+
verifies: c.verifies,
|
|
39254
|
+
});
|
|
39255
|
+
}
|
|
39256
|
+
for (const d of Array.isArray(v.manualChecks) ? v.manualChecks : []) {
|
|
39257
|
+
if (nonEmpty(d))
|
|
39258
|
+
out.push({ kind: 'manual', description: d.trim() });
|
|
39259
|
+
}
|
|
39260
|
+
for (const d of Array.isArray(v.unitTests) ? v.unitTests : []) {
|
|
39261
|
+
if (nonEmpty(d))
|
|
39262
|
+
out.push({ kind: 'test', description: d.trim() });
|
|
39263
|
+
}
|
|
39264
|
+
for (const d of Array.isArray(v.e2eTests) ? v.e2eTests : []) {
|
|
39265
|
+
if (nonEmpty(d))
|
|
39266
|
+
out.push({ kind: 'test', description: d.trim() });
|
|
39267
|
+
}
|
|
39268
|
+
return out;
|
|
39269
|
+
}
|
|
39270
|
+
function groupChecks(v) {
|
|
39271
|
+
const checks = toSerializableChecks(v);
|
|
39272
|
+
return VERIFICATION_KIND_ORDER
|
|
39273
|
+
.map(kind => ({ kind, label: VERIFICATION_KIND_LABELS[kind], checks: checks.filter(c => c.kind === kind) }))
|
|
39274
|
+
.filter(g => g.checks.length > 0);
|
|
39275
|
+
}
|
|
39276
|
+
function checkLine(c) {
|
|
39277
|
+
const verifies = nonEmpty(c.verifies) ? ` (verifies: ${c.verifies})` : '';
|
|
39278
|
+
const status = nonEmpty(c.status) && c.status !== 'unknown' ? ` [${c.status}]` : '';
|
|
39279
|
+
return `${c.description}${verifies}${status}`;
|
|
39280
|
+
}
|
|
39281
|
+
// ── The authorization gate ──────────────────────────────────────────────────
|
|
39282
|
+
/**
|
|
39283
|
+
* The DO-NOT-IMPLEMENT banner for an agent proposal a human has not authorized.
|
|
39284
|
+
*
|
|
39285
|
+
* Lives here, not in either caller, because the local writer used to omit it entirely: a pending
|
|
39286
|
+
* proposal pulled into a repo and re-saved came back without its gate, which is the one thing in
|
|
39287
|
+
* the file an agent must not be able to lose.
|
|
39288
|
+
*
|
|
39289
|
+
* Trailing blank line included, so callers can prepend unconditionally.
|
|
39290
|
+
*/
|
|
39291
|
+
function renderAuthorizationGateText(opts) {
|
|
39292
|
+
if (opts.origin !== 'agent' || opts.authorization === 'authorized')
|
|
39293
|
+
return '';
|
|
39294
|
+
if (opts.authorization === 'rejected') {
|
|
39295
|
+
const note = nonEmpty(opts.authorizationNote) ? ` The human's note: "${opts.authorizationNote}".` : '';
|
|
39296
|
+
return `> **REJECTED BY HUMAN REVIEW — DO NOT IMPLEMENT.** This spec was proposed by an agent and a human rejected it.${note} Revise the proposal per the note, or ask your operator before proceeding.\n\n`;
|
|
39297
|
+
}
|
|
39298
|
+
return `> **PENDING HUMAN AUTHORIZATION — DO NOT IMPLEMENT YET.** This spec was proposed by an agent and no human has authorized it. Ask your operator to review it in Pathmode before building against it.\n\n`;
|
|
39299
|
+
}
|
|
39300
|
+
// ── Confirmations ───────────────────────────────────────────────────────────
|
|
39301
|
+
/**
|
|
39302
|
+
* Render confirmation records as the `## Confirmations` section body.
|
|
39303
|
+
*
|
|
39304
|
+
* Derived fields (`assurance`, `source`) are NOT written: anything read back out of a file is
|
|
39305
|
+
* local-unverified by definition, so persisting a trust level would let a record vouch for itself.
|
|
39306
|
+
* Records outside the dimensions the readiness gate can resolve are dropped rather than emitted,
|
|
39307
|
+
* so an unwaivable dimension never leaves an empty section behind.
|
|
39308
|
+
*/
|
|
39309
|
+
function renderConfirmationsBody(records) {
|
|
39310
|
+
const emittable = (records || []).filter(c => {
|
|
39311
|
+
const dim = String(c?.dimension ?? '').toLowerCase();
|
|
39312
|
+
const kind = String(c?.kind ?? '').toLowerCase();
|
|
39313
|
+
const by = String(c?.by ?? '').toLowerCase();
|
|
39314
|
+
return ['objective', 'outcomes'].includes(dim)
|
|
39315
|
+
&& ['confirmed', 'waived'].includes(kind)
|
|
39316
|
+
&& ['agent', 'human'].includes(by);
|
|
39317
|
+
});
|
|
39318
|
+
if (!emittable.length)
|
|
39319
|
+
return '';
|
|
39320
|
+
const out = ['## Confirmations'];
|
|
39321
|
+
for (const c of emittable) {
|
|
39322
|
+
out.push('');
|
|
39323
|
+
out.push(`**${String(c.dimension).toLowerCase()}** — ${String(c.kind).toLowerCase()} by ${String(c.by).toLowerCase()}`);
|
|
39324
|
+
for (const key of ['actor', 'problem', 'outcome', 'observable', 'reason', 'anchor', 'at']) {
|
|
39325
|
+
const v = c[key];
|
|
39326
|
+
if (!nonEmpty(v))
|
|
39327
|
+
continue;
|
|
39328
|
+
out.push(`- ${key}: ${v.replace(/\s+/g, ' ').trim()}`);
|
|
39329
|
+
}
|
|
39330
|
+
}
|
|
39331
|
+
return out.join('\n');
|
|
39332
|
+
}
|
|
39333
|
+
// ── The serializer ──────────────────────────────────────────────────────────
|
|
39334
|
+
/**
|
|
39335
|
+
* Frontmatter key order. Fixed so a file rewritten by the other implementation produces a clean
|
|
39336
|
+
* diff instead of a reordering churn that hides the real change.
|
|
39337
|
+
*/
|
|
39338
|
+
const FRONTMATTER_ORDER = [
|
|
39339
|
+
'id', 'version', 'status', 'readiness', 'source', 'specVersion',
|
|
39340
|
+
'origin', 'authorization', 'authorizationNote', 'evidence', 'space', 'severity', 'created', 'updated',
|
|
39341
|
+
];
|
|
39342
|
+
function serializeIntentMd(spec, opts = {}) {
|
|
39343
|
+
const values = {
|
|
39344
|
+
id: spec.id,
|
|
39345
|
+
version: opts.version && opts.version >= 1 ? opts.version : 1,
|
|
39346
|
+
status: opts.status || 'draft',
|
|
39347
|
+
readiness: opts.readiness,
|
|
39348
|
+
source: opts.source,
|
|
39349
|
+
specVersion: opts.specVersion,
|
|
39350
|
+
origin: opts.origin,
|
|
39351
|
+
// Only meaningful for agent-originated specs; human-authored ones are authorized by
|
|
39352
|
+
// authorship and carrying a key here would imply a gate that does not exist.
|
|
39353
|
+
authorization: opts.origin === 'agent' ? (opts.authorization ?? 'pending') : undefined,
|
|
39354
|
+
// The banner renders the note as prose, but prose is not recoverable: a reader cannot tell
|
|
39355
|
+
// the reviewer's words from the sentence around them. Persisting it here is what stops a
|
|
39356
|
+
// local rewrite from keeping the REJECTED verdict while erasing the correction it asked
|
|
39357
|
+
// for. Single-line by contract, like a confirmation value; flattened rather than escaped.
|
|
39358
|
+
authorizationNote: opts.origin === 'agent' && nonEmpty(opts.authorizationNote)
|
|
39359
|
+
? opts.authorizationNote.replace(/\s+/g, ' ').trim()
|
|
39360
|
+
: undefined,
|
|
39361
|
+
evidence: opts.evidence?.length || undefined,
|
|
39362
|
+
space: opts.space?.name,
|
|
39363
|
+
severity: opts.severity,
|
|
39364
|
+
created: opts.created,
|
|
39365
|
+
updated: opts.updated,
|
|
39366
|
+
};
|
|
39367
|
+
// null, not just undefined: the cloud mapper reads absent columns as null (`problemSeverity`,
|
|
39368
|
+
// `currentState`, a product with no name), and an unguarded null reached the quoter as a
|
|
39369
|
+
// crash rather than an omitted key.
|
|
39370
|
+
const yamlLines = FRONTMATTER_ORDER
|
|
39371
|
+
.filter(key => values[key] !== undefined && values[key] !== null && values[key] !== '')
|
|
39372
|
+
.map(key => `${key}: ${yamlScalar(values[key])}`)
|
|
39373
|
+
.join('\n');
|
|
39374
|
+
const sections = ['---', yamlLines, '---', ''];
|
|
39375
|
+
// Directly under the frontmatter: the `authorization` key is machine-readable, but the body
|
|
39376
|
+
// must also say DO NOT IMPLEMENT before any instruction an agent might act on.
|
|
39377
|
+
const gate = renderAuthorizationGateText(opts).trim();
|
|
39378
|
+
if (gate) {
|
|
39379
|
+
sections.push(gate);
|
|
39380
|
+
sections.push('');
|
|
39381
|
+
}
|
|
39382
|
+
sections.push(`# ${spec.title || 'Untitled Intent'}`);
|
|
39383
|
+
const space = opts.space;
|
|
39384
|
+
if (space && (nonEmpty(space.productVision) || nonEmpty(space.northStar) || nonEmpty(space.targetAudience)
|
|
39385
|
+
|| space.constraints?.length || space.principles?.length)) {
|
|
39386
|
+
sections.push('');
|
|
39387
|
+
sections.push('## Space Context');
|
|
39388
|
+
if (nonEmpty(space.productVision))
|
|
39389
|
+
sections.push(`**Product Vision**: ${space.productVision}`);
|
|
39390
|
+
if (nonEmpty(space.northStar))
|
|
39391
|
+
sections.push(`**North Star**: ${space.northStar}`);
|
|
39392
|
+
if (nonEmpty(space.targetAudience))
|
|
39393
|
+
sections.push(`**Target Audience**: ${space.targetAudience}`);
|
|
39394
|
+
if (space.constraints?.length)
|
|
39395
|
+
sections.push('**Constraints**: ' + space.constraints.join(', '));
|
|
39396
|
+
if (space.principles?.length)
|
|
39397
|
+
sections.push('**Principles**: ' + space.principles.join(', '));
|
|
39398
|
+
}
|
|
39399
|
+
if (nonEmpty(spec.objective)) {
|
|
39400
|
+
sections.push('');
|
|
39401
|
+
sections.push('## Objective');
|
|
39402
|
+
sections.push(spec.objective);
|
|
39403
|
+
}
|
|
39404
|
+
// Heading text is the round-trip key (the reader keys sections by exact heading) — keep it
|
|
39405
|
+
// plain, exactly like Objective above.
|
|
39406
|
+
if (nonEmpty(spec.currentState)) {
|
|
39407
|
+
sections.push('');
|
|
39408
|
+
sections.push('## Current State');
|
|
39409
|
+
sections.push(spec.currentState.trim());
|
|
39410
|
+
}
|
|
39411
|
+
// Sits next to Current State on purpose: one is what the author says is true today, the other
|
|
39412
|
+
// is what the repo says. Same heading in both modes, so a handoff reads identically either way.
|
|
39413
|
+
const icBody = implementationContextBody(spec);
|
|
39414
|
+
if (icBody.length) {
|
|
39415
|
+
sections.push('');
|
|
39416
|
+
sections.push('## Implementation Context');
|
|
39417
|
+
sections.push(...icBody);
|
|
39418
|
+
}
|
|
39419
|
+
const decisions = (spec.decisions || []).filter(d => d && nonEmpty(d.choice) && typeof d.reason === 'string');
|
|
39420
|
+
if (decisions.length) {
|
|
39421
|
+
sections.push('');
|
|
39422
|
+
sections.push('## Decisions & Ruled-Out Alternatives');
|
|
39423
|
+
for (const d of decisions) {
|
|
39424
|
+
sections.push(`- **${d.choice}**${nonEmpty(d.ruledOut) ? ` (instead of: ${d.ruledOut})` : ''} — ${d.reason}`);
|
|
39425
|
+
if (nonEmpty(d.reopenTrigger))
|
|
39426
|
+
sections.push(` - reopen if: ${d.reopenTrigger.trim()}`);
|
|
39427
|
+
}
|
|
39428
|
+
}
|
|
39429
|
+
const outcomes = (spec.outcomes || []).map(outcomeOf).filter(o => nonEmpty(o.text));
|
|
39430
|
+
if (outcomes.length) {
|
|
39431
|
+
sections.push('');
|
|
39432
|
+
sections.push('## Outcomes');
|
|
39433
|
+
// No priority prefix. The writer used to emit `[MUST] `, which is in neither SPEC.md nor the
|
|
39434
|
+
// normalization corpus, and neither parser strips it — so it read back as part of the
|
|
39435
|
+
// outcome text. Emitting a label the format cannot read back is worse than omitting it.
|
|
39436
|
+
for (const o of outcomes) {
|
|
39437
|
+
sections.push(`- [ ] ${o.text}${backedBySuffix(o.backedBy)}`);
|
|
39438
|
+
}
|
|
39439
|
+
}
|
|
39440
|
+
if (spec.scope?.inScope?.length || spec.scope?.outOfScope?.length) {
|
|
39441
|
+
sections.push('');
|
|
39442
|
+
sections.push('## Scope');
|
|
39443
|
+
if (spec.scope.inScope?.length) {
|
|
39444
|
+
sections.push('**In scope:**');
|
|
39445
|
+
for (const s of spec.scope.inScope)
|
|
39446
|
+
sections.push(`- ${s}`);
|
|
39447
|
+
}
|
|
39448
|
+
if (spec.scope.outOfScope?.length) {
|
|
39449
|
+
sections.push('**Out of scope:**');
|
|
39450
|
+
for (const s of spec.scope.outOfScope)
|
|
39451
|
+
sections.push(`- ${s}`);
|
|
39452
|
+
}
|
|
39453
|
+
}
|
|
39454
|
+
const constraints = (spec.constraints || []).map(constraintOf).filter(c => nonEmpty(c.text));
|
|
39455
|
+
if (constraints.length) {
|
|
39456
|
+
sections.push('');
|
|
39457
|
+
sections.push('## Constraints');
|
|
39458
|
+
for (const c of constraints)
|
|
39459
|
+
sections.push(`- ${c.text}${backedBySuffix(c.backedBy)}`);
|
|
39460
|
+
}
|
|
39461
|
+
const edgeCases = (spec.edgeCases || []).filter(ec => ec && nonEmpty(ec.scenario));
|
|
39462
|
+
if (edgeCases.length) {
|
|
39463
|
+
sections.push('');
|
|
39464
|
+
sections.push('## Edge Cases');
|
|
39465
|
+
for (const ec of edgeCases) {
|
|
39466
|
+
sections.push(`- **${ec.scenario}**: ${ec.expectedBehavior}${backedBySuffix(ec.backedBy)}`);
|
|
39467
|
+
}
|
|
39468
|
+
}
|
|
39469
|
+
const evidenceBody = renderCompactEvidence(opts.evidence);
|
|
39470
|
+
if (evidenceBody.length) {
|
|
39471
|
+
sections.push('');
|
|
39472
|
+
sections.push('## Supporting Evidence');
|
|
39473
|
+
sections.push(...evidenceBody);
|
|
39474
|
+
}
|
|
39475
|
+
if (spec.healthMetrics?.length) {
|
|
39476
|
+
sections.push('');
|
|
39477
|
+
sections.push('## Health Metrics');
|
|
39478
|
+
for (const metric of spec.healthMetrics)
|
|
39479
|
+
sections.push(`- ${metric}`);
|
|
39480
|
+
}
|
|
39481
|
+
const checkGroups = groupChecks(spec.verification);
|
|
39482
|
+
if (checkGroups.length) {
|
|
39483
|
+
sections.push('');
|
|
39484
|
+
sections.push('## Verification');
|
|
39485
|
+
sections.push('_A feedback loop, not just a test list._');
|
|
39486
|
+
for (const g of checkGroups) {
|
|
39487
|
+
sections.push(`**${g.label}**:`);
|
|
39488
|
+
for (const c of g.checks)
|
|
39489
|
+
sections.push(`- [ ] ${checkLine(c)}`);
|
|
39490
|
+
}
|
|
39491
|
+
}
|
|
39492
|
+
// `## Confirmations` is emitted LAST so it never sits between the fields a reader is comparing,
|
|
39493
|
+
// and so appending one cannot shift any other section's parse.
|
|
39494
|
+
const confirmationsBody = renderConfirmationsBody(spec.confirmations);
|
|
39495
|
+
if (confirmationsBody) {
|
|
39496
|
+
sections.push('');
|
|
39497
|
+
sections.push(confirmationsBody);
|
|
39498
|
+
}
|
|
39499
|
+
return sections.join('\n');
|
|
39500
|
+
}
|
|
39501
|
+
/**
|
|
39502
|
+
* The body of `## Implementation Context`.
|
|
39503
|
+
*
|
|
39504
|
+
* Two sources, one section. Local mode carries prose the agent gathered; cloud intents carry the
|
|
39505
|
+
* analyzer's structured object. Rendering both under the same heading is what lets a spec move
|
|
39506
|
+
* between modes without the section disappearing on the way through.
|
|
39507
|
+
*/
|
|
39508
|
+
function implementationContextBody(spec) {
|
|
39509
|
+
if (nonEmpty(spec.implementationContextText))
|
|
39510
|
+
return [spec.implementationContextText.trim()];
|
|
39511
|
+
const ic = spec.implementationContext;
|
|
39512
|
+
if (!ic)
|
|
39513
|
+
return [];
|
|
39514
|
+
const lines = [];
|
|
39515
|
+
if (ic.relevantAreas?.length) {
|
|
39516
|
+
lines.push('### Relevant areas');
|
|
39517
|
+
for (const a of ic.relevantAreas) {
|
|
39518
|
+
if (nonEmpty(a?.path))
|
|
39519
|
+
lines.push(`- \`${a.path}\`${nonEmpty(a.reason) ? ` — ${a.reason}` : ''}`);
|
|
39520
|
+
}
|
|
39521
|
+
}
|
|
39522
|
+
if (nonEmpty(ic.currentBehavior)) {
|
|
39523
|
+
if (lines.length)
|
|
39524
|
+
lines.push('');
|
|
39525
|
+
lines.push('### Current behavior');
|
|
39526
|
+
lines.push(ic.currentBehavior.trim());
|
|
39527
|
+
}
|
|
39528
|
+
if (ic.risks?.length) {
|
|
39529
|
+
if (lines.length)
|
|
39530
|
+
lines.push('');
|
|
39531
|
+
lines.push('### Risks');
|
|
39532
|
+
for (const r of ic.risks)
|
|
39533
|
+
if (nonEmpty(r))
|
|
39534
|
+
lines.push(`- ${r.trim()}`);
|
|
39535
|
+
}
|
|
39536
|
+
if (ic.verificationSuggestions?.length) {
|
|
39537
|
+
if (lines.length)
|
|
39538
|
+
lines.push('');
|
|
39539
|
+
lines.push('### Verification suggestions');
|
|
39540
|
+
for (const v of ic.verificationSuggestions)
|
|
39541
|
+
if (nonEmpty(v))
|
|
39542
|
+
lines.push(`- ${v.trim()}`);
|
|
39543
|
+
}
|
|
39544
|
+
return lines;
|
|
39545
|
+
}
|
|
39546
|
+
/** Compact evidence list — one truncated line per item, quotes as blockquotes. Lighter than the
|
|
39547
|
+
* execution prompt's full rendering so a committed intent.md stays readable. */
|
|
39548
|
+
function renderCompactEvidence(evidence) {
|
|
39549
|
+
const items = (evidence || []).filter(e => nonEmpty(e?.content));
|
|
39550
|
+
if (!items.length)
|
|
39551
|
+
return [];
|
|
39552
|
+
const lines = [];
|
|
39553
|
+
const truncate = (s) => (s.length > 160 ? `${s.slice(0, 160)}…` : s);
|
|
39554
|
+
for (const q of items.filter(e => e.type === 'quote')) {
|
|
39555
|
+
lines.push(`> "${truncate(q.content)}"${nonEmpty(q.source) ? ` — ${q.source}` : ''}`);
|
|
39556
|
+
}
|
|
39557
|
+
for (const e of items.filter(e => e.type !== 'quote')) {
|
|
39558
|
+
const severity = nonEmpty(e.severity) ? ` (${e.severity})` : '';
|
|
39559
|
+
lines.push(`- [${e.type}]${severity} ${truncate(e.content)}${nonEmpty(e.source) ? ` — ${e.source}` : ''}`);
|
|
39560
|
+
}
|
|
39561
|
+
return lines;
|
|
39562
|
+
}
|
|
39563
|
+
|
|
39564
|
+
|
|
39173
39565
|
/***/ }),
|
|
39174
39566
|
|
|
39175
39567
|
/***/ 7475:
|
|
@@ -39792,6 +40184,10 @@ exports.writeConfirmationRecord = writeConfirmationRecord;
|
|
|
39792
40184
|
// Verification check collection. Mirrors lib/verification in the main app — this package is
|
|
39793
40185
|
// standalone (own ncc build) and can't import it, so the type + adapter live here. `kind` is the
|
|
39794
40186
|
const crypto_1 = __nccwpck_require__(6982);
|
|
40187
|
+
// The intent.md file format itself. Shared verbatim with the cloud writer
|
|
40188
|
+
// (lib/agentPromptGenerator.ts) so a spec crossing between local and connected mode keeps every
|
|
40189
|
+
// section — notably `## Confirmations` and the authorization gate, which each side used to drop.
|
|
40190
|
+
const serializeIntentMd_1 = __nccwpck_require__(229);
|
|
39795
40191
|
const VERIFICATION_KIND_LABELS = {
|
|
39796
40192
|
fastest: 'Fastest check',
|
|
39797
40193
|
'shipped-signal': 'Shipped signal',
|
|
@@ -39984,185 +40380,27 @@ function decisionLines(decisions, heading) {
|
|
|
39984
40380
|
* is saved twice must keep its identity and its lifecycle state. Only a genuinely new intent
|
|
39985
40381
|
* (no id) gets a minted id, version 1, and status 'draft'.
|
|
39986
40382
|
*/
|
|
39987
|
-
/**
|
|
39988
|
-
* The body of `## Implementation Context` in intent.md.
|
|
39989
|
-
*
|
|
39990
|
-
* Two sources, one section. Local mode carries prose the agent gathered; cloud intents carry the
|
|
39991
|
-
* analyzer's structured object. Rendering both under the same heading is what lets a spec move
|
|
39992
|
-
* between modes without the section disappearing on the way through.
|
|
39993
|
-
*/
|
|
39994
|
-
function implementationContextBody(spec) {
|
|
39995
|
-
const text = spec.implementationContextText?.trim();
|
|
39996
|
-
if (text)
|
|
39997
|
-
return [text];
|
|
39998
|
-
const ic = spec.implementationContext;
|
|
39999
|
-
if (!ic)
|
|
40000
|
-
return [];
|
|
40001
|
-
const lines = [];
|
|
40002
|
-
if (ic.relevantAreas?.length) {
|
|
40003
|
-
lines.push('### Relevant areas');
|
|
40004
|
-
for (const a of ic.relevantAreas) {
|
|
40005
|
-
if (a?.path?.trim())
|
|
40006
|
-
lines.push(`- \`${a.path}\`${a.reason?.trim() ? ` — ${a.reason}` : ''}`);
|
|
40007
|
-
}
|
|
40008
|
-
}
|
|
40009
|
-
if (ic.currentBehavior?.trim()) {
|
|
40010
|
-
if (lines.length)
|
|
40011
|
-
lines.push('');
|
|
40012
|
-
lines.push('### Current behavior');
|
|
40013
|
-
lines.push(ic.currentBehavior.trim());
|
|
40014
|
-
}
|
|
40015
|
-
if (ic.risks?.length) {
|
|
40016
|
-
if (lines.length)
|
|
40017
|
-
lines.push('');
|
|
40018
|
-
lines.push('### Risks');
|
|
40019
|
-
for (const r of ic.risks)
|
|
40020
|
-
if (r?.trim())
|
|
40021
|
-
lines.push(`- ${r.trim()}`);
|
|
40022
|
-
}
|
|
40023
|
-
if (ic.verificationSuggestions?.length) {
|
|
40024
|
-
if (lines.length)
|
|
40025
|
-
lines.push('');
|
|
40026
|
-
lines.push('### Verification suggestions');
|
|
40027
|
-
for (const v of ic.verificationSuggestions)
|
|
40028
|
-
if (v?.trim())
|
|
40029
|
-
lines.push(`- ${v.trim()}`);
|
|
40030
|
-
}
|
|
40031
|
-
return lines;
|
|
40032
|
-
}
|
|
40033
40383
|
function formatIntentMd(spec, opts = {}) {
|
|
40034
40384
|
const now = new Date().toISOString();
|
|
40035
|
-
|
|
40385
|
+
// The only thing this wrapper still owns is id minting, which needs `crypto` and therefore
|
|
40386
|
+
// cannot live in the shared serializer (it is imported from browser bundles too).
|
|
40387
|
+
return (0, serializeIntentMd_1.serializeIntentMd)({
|
|
40388
|
+
...spec,
|
|
40389
|
+
// Only a genuinely new intent gets a minted id; a re-save keeps its identity.
|
|
40036
40390
|
id: spec.id || (0, crypto_1.randomUUID)(),
|
|
40037
|
-
|
|
40038
|
-
|
|
40039
|
-
|
|
40040
|
-
|
|
40041
|
-
|
|
40391
|
+
confirmations: spec.confirmations,
|
|
40392
|
+
}, {
|
|
40393
|
+
version: opts.version,
|
|
40394
|
+
status: opts.status,
|
|
40395
|
+
readiness: opts.readiness,
|
|
40396
|
+
source: opts.source,
|
|
40397
|
+
specVersion: opts.specVersion,
|
|
40042
40398
|
created: opts.created || now,
|
|
40043
40399
|
updated: now,
|
|
40044
|
-
|
|
40045
|
-
|
|
40046
|
-
.
|
|
40047
|
-
|
|
40048
|
-
const sections = [];
|
|
40049
|
-
sections.push('---');
|
|
40050
|
-
sections.push(yamlLines);
|
|
40051
|
-
sections.push('---');
|
|
40052
|
-
sections.push('');
|
|
40053
|
-
sections.push(`# ${spec.title || 'Untitled Intent'}`);
|
|
40054
|
-
if (spec.objective) {
|
|
40055
|
-
sections.push('');
|
|
40056
|
-
sections.push('## Objective');
|
|
40057
|
-
sections.push(spec.objective);
|
|
40058
|
-
}
|
|
40059
|
-
// Heading text is the round-trip key (readIntentFile keys sections by exact
|
|
40060
|
-
// heading) — keep it plain, exactly like Objective above.
|
|
40061
|
-
if (spec.currentState?.trim()) {
|
|
40062
|
-
sections.push('');
|
|
40063
|
-
sections.push('## Current State');
|
|
40064
|
-
sections.push(spec.currentState.trim());
|
|
40065
|
-
}
|
|
40066
|
-
// Sits next to Current State on purpose: one is what the author says is true today, the other is
|
|
40067
|
-
// what the repo says. Same heading the cloud agent prompt emits, so a handoff reads identically
|
|
40068
|
-
// in either mode.
|
|
40069
|
-
const icBody = implementationContextBody(spec);
|
|
40070
|
-
if (icBody.length) {
|
|
40071
|
-
sections.push('');
|
|
40072
|
-
sections.push('## Implementation Context');
|
|
40073
|
-
sections.push(...icBody);
|
|
40074
|
-
}
|
|
40075
|
-
sections.push(...decisionLines(spec.decisions, '## Decisions & Ruled-Out Alternatives'));
|
|
40076
|
-
if (spec.outcomes?.length) {
|
|
40077
|
-
sections.push('');
|
|
40078
|
-
sections.push('## Outcomes');
|
|
40079
|
-
for (const outcome of spec.outcomes) {
|
|
40080
|
-
sections.push(`- [ ] ${getPriorityLabel(outcome)}${getOutcomeText(outcome)}`);
|
|
40081
|
-
}
|
|
40082
|
-
}
|
|
40083
|
-
if (spec.scope?.inScope?.length || spec.scope?.outOfScope?.length) {
|
|
40084
|
-
sections.push('');
|
|
40085
|
-
sections.push('## Scope');
|
|
40086
|
-
if (spec.scope.inScope?.length) {
|
|
40087
|
-
sections.push('**In scope:**');
|
|
40088
|
-
for (const s of spec.scope.inScope)
|
|
40089
|
-
sections.push(`- ${s}`);
|
|
40090
|
-
}
|
|
40091
|
-
if (spec.scope.outOfScope?.length) {
|
|
40092
|
-
sections.push('**Out of scope:**');
|
|
40093
|
-
for (const s of spec.scope.outOfScope)
|
|
40094
|
-
sections.push(`- ${s}`);
|
|
40095
|
-
}
|
|
40096
|
-
}
|
|
40097
|
-
if (spec.constraints?.length) {
|
|
40098
|
-
sections.push('');
|
|
40099
|
-
sections.push('## Constraints');
|
|
40100
|
-
for (const constraint of spec.constraints) {
|
|
40101
|
-
sections.push(`- ${constraint}`);
|
|
40102
|
-
}
|
|
40103
|
-
}
|
|
40104
|
-
if (spec.edgeCases?.length) {
|
|
40105
|
-
sections.push('');
|
|
40106
|
-
sections.push('## Edge Cases');
|
|
40107
|
-
for (const ec of spec.edgeCases) {
|
|
40108
|
-
sections.push(`- **${ec.scenario}**: ${ec.expectedBehavior}`);
|
|
40109
|
-
}
|
|
40110
|
-
}
|
|
40111
|
-
if (spec.healthMetrics?.length) {
|
|
40112
|
-
sections.push('');
|
|
40113
|
-
sections.push('## Health Metrics');
|
|
40114
|
-
for (const metric of spec.healthMetrics) {
|
|
40115
|
-
sections.push(`- ${metric}`);
|
|
40116
|
-
}
|
|
40117
|
-
}
|
|
40118
|
-
const intentMdChecks = groupVerificationChecks(spec.verification);
|
|
40119
|
-
if (intentMdChecks.length) {
|
|
40120
|
-
sections.push('');
|
|
40121
|
-
sections.push('## Verification');
|
|
40122
|
-
sections.push('_A feedback loop, not just a test list._');
|
|
40123
|
-
for (const g of intentMdChecks) {
|
|
40124
|
-
sections.push(`**${g.label}**:`);
|
|
40125
|
-
for (const c of g.checks)
|
|
40126
|
-
sections.push(`- [ ] ${renderCheckLine(c)}`);
|
|
40127
|
-
}
|
|
40128
|
-
}
|
|
40129
|
-
// `## Confirmations` is emitted LAST so it never sits between the fields a reader is
|
|
40130
|
-
// comparing, and so appending one cannot shift any other section's parse. Derived fields
|
|
40131
|
-
// (assurance, source) are NOT written: anything read from a file is local-unverified.
|
|
40132
|
-
const rawConfirmations = spec.confirmations;
|
|
40133
|
-
const confirmations = Array.isArray(rawConfirmations)
|
|
40134
|
-
? rawConfirmations
|
|
40135
|
-
: [];
|
|
40136
|
-
// Filter BEFORE emitting the heading: a spec whose only confirmation targets an
|
|
40137
|
-
// unwaivable dimension must not leave an empty `## Confirmations` section behind.
|
|
40138
|
-
const emittable = confirmations.filter((c) => {
|
|
40139
|
-
const dim = String(c.dimension ?? '').toLowerCase();
|
|
40140
|
-
const kind = String(c.kind ?? '').toLowerCase();
|
|
40141
|
-
const by = String(c.by ?? '').toLowerCase();
|
|
40142
|
-
return ['objective', 'outcomes'].includes(dim)
|
|
40143
|
-
&& ['confirmed', 'waived'].includes(kind)
|
|
40144
|
-
&& ['agent', 'human'].includes(by);
|
|
40145
|
-
});
|
|
40146
|
-
if (emittable.length) {
|
|
40147
|
-
sections.push('');
|
|
40148
|
-
sections.push('## Confirmations');
|
|
40149
|
-
for (const c of emittable) {
|
|
40150
|
-
const dim = String(c.dimension ?? '').toLowerCase();
|
|
40151
|
-
const kind = String(c.kind ?? '').toLowerCase();
|
|
40152
|
-
const by = String(c.by ?? '').toLowerCase();
|
|
40153
|
-
sections.push('');
|
|
40154
|
-
sections.push(`**${dim}** — ${kind} by ${by}`);
|
|
40155
|
-
for (const key of ['actor', 'problem', 'outcome', 'observable', 'reason', 'anchor', 'at']) {
|
|
40156
|
-
const v = c[key];
|
|
40157
|
-
if (typeof v !== 'string' || !v.trim())
|
|
40158
|
-
continue;
|
|
40159
|
-
// Values are single-line by contract; the writer flattens rather than escaping.
|
|
40160
|
-
sections.push(`- ${key}: ${v.replace(/\s+/g, ' ').trim()}`);
|
|
40161
|
-
}
|
|
40162
|
-
}
|
|
40163
|
-
}
|
|
40164
|
-
sections.push('');
|
|
40165
|
-
return sections.join('\n');
|
|
40400
|
+
origin: opts.origin,
|
|
40401
|
+
authorization: opts.authorization,
|
|
40402
|
+
authorizationNote: opts.authorizationNote,
|
|
40403
|
+
}) + '\n';
|
|
40166
40404
|
}
|
|
40167
40405
|
// ============================================================
|
|
40168
40406
|
// Format: .cursorrules
|
|
@@ -40576,30 +40814,10 @@ function spliceConfirmationsSection(original, section) {
|
|
|
40576
40814
|
const after = lines.slice(end).join('\n').replace(/^\s*/, '');
|
|
40577
40815
|
return `${before}\n\n${section.trim()}\n${after ? `\n${after}` : ''}`;
|
|
40578
40816
|
}
|
|
40579
|
-
/** Render confirmation records as the `## Confirmations` section body.
|
|
40817
|
+
/** Render confirmation records as the `## Confirmations` section body. Thin wrapper over the
|
|
40818
|
+
* shared serializer so the splice path and the full-file write cannot format records differently. */
|
|
40580
40819
|
function renderConfirmationsSection(records) {
|
|
40581
|
-
|
|
40582
|
-
const dim = String(c.dimension ?? '').toLowerCase();
|
|
40583
|
-
const kind = String(c.kind ?? '').toLowerCase();
|
|
40584
|
-
const by = String(c.by ?? '').toLowerCase();
|
|
40585
|
-
return ['objective', 'outcomes'].includes(dim)
|
|
40586
|
-
&& ['confirmed', 'waived'].includes(kind)
|
|
40587
|
-
&& ['agent', 'human'].includes(by);
|
|
40588
|
-
});
|
|
40589
|
-
if (!emittable.length)
|
|
40590
|
-
return '';
|
|
40591
|
-
const out = ['## Confirmations'];
|
|
40592
|
-
for (const c of emittable) {
|
|
40593
|
-
out.push('');
|
|
40594
|
-
out.push(`**${String(c.dimension).toLowerCase()}** — ${String(c.kind).toLowerCase()} by ${String(c.by).toLowerCase()}`);
|
|
40595
|
-
for (const key of ['actor', 'problem', 'outcome', 'observable', 'reason', 'anchor', 'at']) {
|
|
40596
|
-
const v = c[key];
|
|
40597
|
-
if (typeof v !== 'string' || !v.trim())
|
|
40598
|
-
continue;
|
|
40599
|
-
out.push(`- ${key}: ${v.replace(/\s+/g, ' ').trim()}`);
|
|
40600
|
-
}
|
|
40601
|
-
}
|
|
40602
|
-
return out.join('\n');
|
|
40820
|
+
return (0, serializeIntentMd_1.renderConfirmationsBody)(records);
|
|
40603
40821
|
}
|
|
40604
40822
|
function writeConfirmationRecord(opts) {
|
|
40605
40823
|
let raw = opts.read();
|
|
@@ -40734,6 +40952,9 @@ function readIntentMeta(filePath) {
|
|
|
40734
40952
|
status: typeof data.status === 'string' && data.status.trim() ? data.status.trim() : 'draft',
|
|
40735
40953
|
created: typeof data.created === 'string' ? data.created : undefined,
|
|
40736
40954
|
specVersion: typeof data.specVersion === 'string' && data.specVersion.trim() ? data.specVersion.trim() : undefined,
|
|
40955
|
+
origin: typeof data.origin === 'string' && data.origin.trim() ? data.origin.trim() : undefined,
|
|
40956
|
+
authorization: typeof data.authorization === 'string' && data.authorization.trim() ? data.authorization.trim() : undefined,
|
|
40957
|
+
authorizationNote: typeof data.authorizationNote === 'string' && data.authorizationNote.trim() ? data.authorizationNote.trim() : undefined,
|
|
40737
40958
|
};
|
|
40738
40959
|
}
|
|
40739
40960
|
catch {
|
|
@@ -41836,6 +42057,9 @@ async function pushSpec(input) {
|
|
|
41836
42057
|
let canonicalId;
|
|
41837
42058
|
let specVersion;
|
|
41838
42059
|
let sourceUrl;
|
|
42060
|
+
let origin;
|
|
42061
|
+
let authorization;
|
|
42062
|
+
let authorizationNote;
|
|
41839
42063
|
try {
|
|
41840
42064
|
// On create the local id travels with the spec. Promotion must not change identity: a
|
|
41841
42065
|
// keyless author may already have stamped `intent/<uuid>` on a branch, and a new id would
|
|
@@ -41863,6 +42087,9 @@ async function pushSpec(input) {
|
|
|
41863
42087
|
}
|
|
41864
42088
|
canonicalId = saved.id || id;
|
|
41865
42089
|
specVersion = saved.specVersion;
|
|
42090
|
+
origin = saved.origin;
|
|
42091
|
+
authorization = saved.authorization;
|
|
42092
|
+
authorizationNote = saved.authorizationNote;
|
|
41866
42093
|
sourceUrl = `https://www.pathmode.io/intent/${canonicalId}`;
|
|
41867
42094
|
}
|
|
41868
42095
|
catch (e) {
|
|
@@ -41876,7 +42103,7 @@ async function pushSpec(input) {
|
|
|
41876
42103
|
...(products ? { products } : {}),
|
|
41877
42104
|
};
|
|
41878
42105
|
}
|
|
41879
|
-
input.onIdentitySettled({ canonicalId, specVersion, sourceUrl });
|
|
42106
|
+
input.onIdentitySettled({ canonicalId, specVersion, sourceUrl, origin, authorization, authorizationNote });
|
|
41880
42107
|
const didNotTravel = [];
|
|
41881
42108
|
for (const d of input.decisions ?? []) {
|
|
41882
42109
|
try {
|
|
@@ -71463,7 +71690,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"$schema":"http://json-schema.org/dra
|
|
|
71463
71690
|
/***/ ((module) => {
|
|
71464
71691
|
|
|
71465
71692
|
"use strict";
|
|
71466
|
-
module.exports = /*#__PURE__*/JSON.parse('{"name":"@pathmode/mcp-server","version":"1.
|
|
71693
|
+
module.exports = /*#__PURE__*/JSON.parse('{"name":"@pathmode/mcp-server","version":"1.19.0","publishConfig":{"access":"public"},"mcpName":"io.github.pathmodeio/mcp-server","description":"Deterministic intent preflight before your agent builds: six calibrated gates, keyless, no model call. Draft and sharpen specs in conversation, or connect a Pathmode workspace to sync intent and evidence across a team.","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"},"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"}}');
|
|
71467
71694
|
|
|
71468
71695
|
/***/ })
|
|
71469
71696
|
|
|
@@ -72932,6 +73159,24 @@ function startMcpServer() {
|
|
|
72932
73159
|
readiness: (0, readiness_1.formatReadinessFrontmatter)(verdict),
|
|
72933
73160
|
specVersion: opts.specVersion,
|
|
72934
73161
|
source: opts.sourceUrl,
|
|
73162
|
+
// The gate is carried, never inferred. Two sources, and the order matters:
|
|
73163
|
+
//
|
|
73164
|
+
// - CLOUD: whatever identity just settled to. A v1 create is stamped
|
|
73165
|
+
// origin='agent' + pending by the API, so a create that took the file's
|
|
73166
|
+
// value (there is none) wrote an UNGATED file for a spec the workspace
|
|
73167
|
+
// considers unauthorized. The server is the authority in this mode; it
|
|
73168
|
+
// also means a human authorizing in the workspace clears the local banner
|
|
73169
|
+
// on the next save instead of leaving a stale one.
|
|
73170
|
+
// - LOCAL: the file being replaced, and only on an update. Without it, an
|
|
73171
|
+
// agent editing a pending proposal cleared its own gate.
|
|
73172
|
+
//
|
|
73173
|
+
// The note follows the same rule, and the distinction that makes it work is
|
|
73174
|
+
// `undefined` (the server did not speak) versus `null` (the server says there
|
|
73175
|
+
// is none now). `??` would collapse the two and keep showing a rejection note
|
|
73176
|
+
// after the reviewer authorized the spec, or after they rewrote the note.
|
|
73177
|
+
origin: opts.origin !== undefined ? opts.origin : (decision.action === 'update' ? existing?.origin : undefined),
|
|
73178
|
+
authorization: opts.authorization !== undefined ? opts.authorization : (decision.action === 'update' ? existing?.authorization : undefined),
|
|
73179
|
+
authorizationNote: opts.authorizationNote !== undefined ? opts.authorizationNote : existing?.authorizationNote,
|
|
72935
73180
|
});
|
|
72936
73181
|
// Carry existing confirmations across the rewrite. intent_save builds its content from
|
|
72937
73182
|
// the incoming spec, which by design has no `confirmations` field (that absence is what
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* serializeIntentMd — the one implementation of the intent.md file format.
|
|
3
|
+
*
|
|
4
|
+
* Two writers used to exist: `lib/agentPromptGenerator.ts` (cloud exports, browser downloads) and
|
|
5
|
+
* `packages/mcp-server/src/intent-compiler.ts` (every local, keyless write). They diverged in BOTH
|
|
6
|
+
* directions, and the divergence cost more than tidiness:
|
|
7
|
+
*
|
|
8
|
+
* - the cloud writer emitted no `## Confirmations`, so a human's authenticated confirmation died
|
|
9
|
+
* at the boundary and never reached the repo;
|
|
10
|
+
* - the local writer emitted no authorization gate, so an agent proposal still pending human
|
|
11
|
+
* judgment lost its DO-NOT-IMPLEMENT banner on the next local save.
|
|
12
|
+
*
|
|
13
|
+
* Both are the same failure: judgment recorded in one place not travelling to the other. This
|
|
14
|
+
* module emits the union, and `serializer-parity.test.ts` holds the two callers to it.
|
|
15
|
+
*
|
|
16
|
+
* ZERO IMPORTS, deliberately. The local writer is bundled by ncc into a published npm package that
|
|
17
|
+
* must run keyless and offline, and the cloud writer is reached from `'use client'` components — so
|
|
18
|
+
* a single node builtin here (`crypto`, say) would break the browser bundle. Callers compute their
|
|
19
|
+
* own environment-specific values (id minting, readiness verdicts, evidence resolution) and hand
|
|
20
|
+
* the results in as plain data.
|
|
21
|
+
*/
|
|
22
|
+
/** Evidence refs are PRE-RESOLVED by the caller. Resolution needs an evidence store; formatting
|
|
23
|
+
* does not, and only formatting belongs here. */
|
|
24
|
+
export interface SerializableOutcome {
|
|
25
|
+
id?: string;
|
|
26
|
+
text: string;
|
|
27
|
+
/** Formatted inline evidence references, e.g. `complaint: "checkout times out"`. */
|
|
28
|
+
backedBy?: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface SerializableConstraint {
|
|
31
|
+
text: string;
|
|
32
|
+
backedBy?: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface SerializableEdgeCase {
|
|
35
|
+
scenario: string;
|
|
36
|
+
expectedBehavior: string;
|
|
37
|
+
backedBy?: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface SerializableDecision {
|
|
40
|
+
choice?: string;
|
|
41
|
+
ruledOut?: string;
|
|
42
|
+
reason?: string;
|
|
43
|
+
/** What would justify reopening a settled decision. Cloud-side only today. */
|
|
44
|
+
reopenTrigger?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface SerializableVerificationCheck {
|
|
47
|
+
kind?: string;
|
|
48
|
+
description?: string;
|
|
49
|
+
status?: string;
|
|
50
|
+
verifies?: string;
|
|
51
|
+
}
|
|
52
|
+
export interface SerializableEvidence {
|
|
53
|
+
type?: string;
|
|
54
|
+
content?: string;
|
|
55
|
+
source?: string;
|
|
56
|
+
severity?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Product/space framing. Cloud-only today: keyless mode has no product record to draw it from. */
|
|
59
|
+
export interface SerializableSpaceContext {
|
|
60
|
+
name?: string;
|
|
61
|
+
productVision?: string;
|
|
62
|
+
northStar?: string;
|
|
63
|
+
targetAudience?: string;
|
|
64
|
+
constraints?: string[];
|
|
65
|
+
principles?: string[];
|
|
66
|
+
}
|
|
67
|
+
export interface SerializableConfirmation {
|
|
68
|
+
dimension?: string;
|
|
69
|
+
kind?: string;
|
|
70
|
+
by?: string;
|
|
71
|
+
actor?: string;
|
|
72
|
+
problem?: string;
|
|
73
|
+
outcome?: string;
|
|
74
|
+
observable?: string;
|
|
75
|
+
reason?: string;
|
|
76
|
+
anchor?: string;
|
|
77
|
+
at?: string;
|
|
78
|
+
}
|
|
79
|
+
export interface SerializableIntent {
|
|
80
|
+
id?: string;
|
|
81
|
+
title?: string;
|
|
82
|
+
objective?: string;
|
|
83
|
+
currentState?: string;
|
|
84
|
+
outcomes?: (string | SerializableOutcome)[];
|
|
85
|
+
decisions?: SerializableDecision[];
|
|
86
|
+
constraints?: (string | SerializableConstraint)[];
|
|
87
|
+
edgeCases?: SerializableEdgeCase[];
|
|
88
|
+
healthMetrics?: string[];
|
|
89
|
+
scope?: {
|
|
90
|
+
inScope?: string[];
|
|
91
|
+
outOfScope?: string[];
|
|
92
|
+
} | null;
|
|
93
|
+
verification?: {
|
|
94
|
+
checks?: SerializableVerificationCheck[];
|
|
95
|
+
manualChecks?: string[];
|
|
96
|
+
unitTests?: string[];
|
|
97
|
+
e2eTests?: string[];
|
|
98
|
+
} | null;
|
|
99
|
+
/** Agent-gathered repo context, as prose. Wins over the structured object when both exist. */
|
|
100
|
+
implementationContextText?: string;
|
|
101
|
+
implementationContext?: {
|
|
102
|
+
relevantAreas?: {
|
|
103
|
+
path?: string;
|
|
104
|
+
reason?: string;
|
|
105
|
+
}[];
|
|
106
|
+
currentBehavior?: string;
|
|
107
|
+
risks?: string[];
|
|
108
|
+
verificationSuggestions?: string[];
|
|
109
|
+
} | null;
|
|
110
|
+
/** Readiness judgments recorded against this spec's text. Emitted last; see below. */
|
|
111
|
+
confirmations?: SerializableConfirmation[];
|
|
112
|
+
}
|
|
113
|
+
export interface SerializeIntentMdOptions {
|
|
114
|
+
version?: number;
|
|
115
|
+
status?: string;
|
|
116
|
+
/** ISO timestamps. Emitted only when the caller supplies them. */
|
|
117
|
+
created?: string;
|
|
118
|
+
updated?: string;
|
|
119
|
+
/** Preflight verdict line ("passed 6/6" / "failed 4/6 — blocking: …"), recomputed at write. */
|
|
120
|
+
readiness?: string;
|
|
121
|
+
/** Canonical record URL. Omitted when this file is the only copy. */
|
|
122
|
+
source?: string;
|
|
123
|
+
/** The server's opaque content token, carried verbatim. See IntentMdOptions in intent-compiler. */
|
|
124
|
+
specVersion?: string;
|
|
125
|
+
/** How this spec came to exist. Only 'agent' changes what is rendered (the gate). */
|
|
126
|
+
origin?: string | null;
|
|
127
|
+
/** Human verdict on an agent proposal: 'authorized' | 'rejected' | undefined (pending). */
|
|
128
|
+
authorization?: string | null;
|
|
129
|
+
/** The reviewer's note. `null` clears it: the key is simply not emitted, which is what lets an
|
|
130
|
+
* authorized spec stop carrying the rejection note it used to have. */
|
|
131
|
+
authorizationNote?: string | null;
|
|
132
|
+
severity?: string;
|
|
133
|
+
space?: SerializableSpaceContext | null;
|
|
134
|
+
/** Rendered as `## Supporting Evidence` and counted into the `evidence:` frontmatter key. */
|
|
135
|
+
evidence?: SerializableEvidence[];
|
|
136
|
+
}
|
|
137
|
+
/** Read verification uniformly as a check collection: canonical `checks[]` plus the legacy
|
|
138
|
+
* {manual,unit,e2e} buckets, which are adapted rather than dropped. */
|
|
139
|
+
export declare function toSerializableChecks(v: SerializableIntent['verification']): SerializableVerificationCheck[];
|
|
140
|
+
/**
|
|
141
|
+
* The DO-NOT-IMPLEMENT banner for an agent proposal a human has not authorized.
|
|
142
|
+
*
|
|
143
|
+
* Lives here, not in either caller, because the local writer used to omit it entirely: a pending
|
|
144
|
+
* proposal pulled into a repo and re-saved came back without its gate, which is the one thing in
|
|
145
|
+
* the file an agent must not be able to lose.
|
|
146
|
+
*
|
|
147
|
+
* Trailing blank line included, so callers can prepend unconditionally.
|
|
148
|
+
*/
|
|
149
|
+
export declare function renderAuthorizationGateText(opts: {
|
|
150
|
+
origin?: string | null;
|
|
151
|
+
authorization?: string | null;
|
|
152
|
+
authorizationNote?: string | null;
|
|
153
|
+
}): string;
|
|
154
|
+
/**
|
|
155
|
+
* Render confirmation records as the `## Confirmations` section body.
|
|
156
|
+
*
|
|
157
|
+
* Derived fields (`assurance`, `source`) are NOT written: anything read back out of a file is
|
|
158
|
+
* local-unverified by definition, so persisting a trust level would let a record vouch for itself.
|
|
159
|
+
* Records outside the dimensions the readiness gate can resolve are dropped rather than emitted,
|
|
160
|
+
* so an unwaivable dimension never leaves an empty section behind.
|
|
161
|
+
*/
|
|
162
|
+
export declare function renderConfirmationsBody(records: SerializableConfirmation[] | undefined): string;
|
|
163
|
+
export declare function serializeIntentMd(spec: SerializableIntent, opts?: SerializeIntentMdOptions): string;
|
|
164
|
+
//# sourceMappingURL=serializeIntentMd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializeIntentMd.d.ts","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/intentspec-format/serializeIntentMd.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,12 @@ export interface ApiIntent {
|
|
|
47
47
|
verification: Record<string, any>;
|
|
48
48
|
externalLinks: any[];
|
|
49
49
|
evidenceAnchors: Record<string, string[]>;
|
|
50
|
+
/** How the spec came to exist. A v1-API create is stamped 'agent' server-side. */
|
|
51
|
+
origin?: string | null;
|
|
52
|
+
/** Human verdict on an agent proposal. 'pending' until someone authorizes or rejects. */
|
|
53
|
+
authorization?: 'pending' | 'authorized' | 'rejected' | null;
|
|
54
|
+
/** The reviewer's note. Null means there is none NOW, which is not the same as unknown. */
|
|
55
|
+
authorizationNote?: string | null;
|
|
50
56
|
/** Readiness confirmations and waivers. Present since mcp-server 1.16.0 / the confirmations column. */
|
|
51
57
|
confirmations?: Record<string, unknown>[];
|
|
52
58
|
decisions?: IntentDecision[];
|
|
@@ -1 +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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"}
|
|
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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"}
|
|
@@ -104,7 +104,24 @@ export interface IntentMdOptions {
|
|
|
104
104
|
* `expectedVersion` on the next push, which is what makes a concurrent edit a 409 instead of a
|
|
105
105
|
* silent overwrite. Absent means this file has never been in the cloud. */
|
|
106
106
|
specVersion?: string;
|
|
107
|
+
/** How the spec came to exist. Only 'agent' renders a gate. Carried from frontmatter on a
|
|
108
|
+
* re-save so a local write cannot silently strip a pending proposal's DO-NOT-IMPLEMENT
|
|
109
|
+
* banner — the one thing in the file an agent must not be able to lose. */
|
|
110
|
+
origin?: string | null;
|
|
111
|
+
/** Human verdict on an agent proposal: 'authorized' | 'rejected' | undefined (pending). */
|
|
112
|
+
authorization?: string | null;
|
|
113
|
+
/** `null` is meaningful: it clears a note the file currently holds, which is what stops an
|
|
114
|
+
* authorized spec from still displaying the rejection note it was given earlier. */
|
|
115
|
+
authorizationNote?: string | null;
|
|
107
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Generate intent.md content with YAML frontmatter.
|
|
119
|
+
* Adapted from lib/agentPromptGenerator.ts generateIntentMd().
|
|
120
|
+
*
|
|
121
|
+
* `spec.id`, `opts.version`, and `opts.status` are preserved rather than reset — an intent that
|
|
122
|
+
* is saved twice must keep its identity and its lifecycle state. Only a genuinely new intent
|
|
123
|
+
* (no id) gets a minted id, version 1, and status 'draft'.
|
|
124
|
+
*/
|
|
108
125
|
export declare function formatIntentMd(spec: IntentFields, opts?: IntentMdOptions): string;
|
|
109
126
|
/**
|
|
110
127
|
* Generate .cursorrules content for a single intent.
|
|
@@ -152,7 +169,8 @@ export declare function formatOutcomeRubric(spec: IntentFields, opts?: OutcomeRu
|
|
|
152
169
|
* appends one at the end, and touches nothing else in the file.
|
|
153
170
|
*/
|
|
154
171
|
export declare function spliceConfirmationsSection(original: string, section: string): string;
|
|
155
|
-
/** Render confirmation records as the `## Confirmations` section body.
|
|
172
|
+
/** Render confirmation records as the `## Confirmations` section body. Thin wrapper over the
|
|
173
|
+
* shared serializer so the splice path and the full-file write cannot format records differently. */
|
|
156
174
|
export declare function renderConfirmationsSection(records: Record<string, unknown>[]): string;
|
|
157
175
|
/**
|
|
158
176
|
* Write one confirmation record into a file's `## Confirmations` section, under a
|
|
@@ -1 +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":"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;
|
|
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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"}
|
|
@@ -90,6 +90,14 @@ export interface LocalIntentMeta {
|
|
|
90
90
|
/** The server's token as of the last sync. Present only on cloud-backed files; its presence is
|
|
91
91
|
* what tells a save whether this spec already exists in a workspace. */
|
|
92
92
|
specVersion?: string;
|
|
93
|
+
/** Provenance and human verdict, carried so a local re-save cannot strip the DO-NOT-IMPLEMENT
|
|
94
|
+
* gate off a proposal no human has authorized. Read here rather than from the body because
|
|
95
|
+
* the banner is prose an agent could edit; the frontmatter key is the machine-readable one. */
|
|
96
|
+
origin?: string;
|
|
97
|
+
authorization?: string;
|
|
98
|
+
/** The reviewer's requested correction. Only ever known from the file: the v1 API does not
|
|
99
|
+
* expose it (mapIntentRowToApiIntent omits it), so the file is its only carrier. */
|
|
100
|
+
authorizationNote?: string;
|
|
93
101
|
}
|
|
94
102
|
/**
|
|
95
103
|
* Read all intent.md files from the current directory and subdirectories (1 level deep).
|
|
@@ -1 +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":"AAAA;;;;;;;;;GASG;AAMH,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,MAAM,CAAC;AAE1G,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wGAAwG;AACxG,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAClC,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,kBAAkB,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;CACf;AAuCD,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;iDAE6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACtD,YAAY,EAAE,iBAAiB,CAAC;IAChC,0EAA0E;IAC1E,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;6EACyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
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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"}
|
|
@@ -22,20 +22,24 @@
|
|
|
22
22
|
* A failed enrichment leg is recoverable by saving again: its content is already in the local file,
|
|
23
23
|
* and the retry is an update.
|
|
24
24
|
*/
|
|
25
|
+
/** What identity settles to. `origin`/`authorization` ride along because the file's gate has to
|
|
26
|
+
* come from the server rather than be inferred locally: a v1 create is stamped agent-authored and
|
|
27
|
+
* pending by the API, and a client that guessed would drift the day that policy changed. */
|
|
28
|
+
export interface SettledIdentity {
|
|
29
|
+
id: string;
|
|
30
|
+
specVersion?: string;
|
|
31
|
+
origin?: string | null;
|
|
32
|
+
authorization?: string | null;
|
|
33
|
+
/** The reviewer's note. `null` is meaningful and distinct from absent: it means the workspace
|
|
34
|
+
* currently holds no note, so a mirror must CLEAR the one it has. Absent means the server did
|
|
35
|
+
* not speak (local mode, or an older API), and the file's own value stands. */
|
|
36
|
+
authorizationNote?: string | null;
|
|
37
|
+
}
|
|
25
38
|
export interface PushClient {
|
|
26
|
-
createIntent(input: any): Promise<
|
|
27
|
-
id: string;
|
|
28
|
-
specVersion?: string;
|
|
29
|
-
}>;
|
|
39
|
+
createIntent(input: any): Promise<SettledIdentity>;
|
|
30
40
|
/** Used to recover when a create commits but its response is lost. */
|
|
31
|
-
getIntent?(id: string): Promise<
|
|
32
|
-
|
|
33
|
-
specVersion?: string;
|
|
34
|
-
}>;
|
|
35
|
-
updateIntent(id: string, input: any): Promise<{
|
|
36
|
-
id: string;
|
|
37
|
-
specVersion?: string;
|
|
38
|
-
}>;
|
|
41
|
+
getIntent?(id: string): Promise<SettledIdentity>;
|
|
42
|
+
updateIntent(id: string, input: any): Promise<SettledIdentity>;
|
|
39
43
|
recordDecision(intentId: string, input: any): Promise<unknown>;
|
|
40
44
|
saveImplementationContext(intentId: string, input: any): Promise<unknown>;
|
|
41
45
|
}
|
|
@@ -57,6 +61,9 @@ export interface PushSpecInput {
|
|
|
57
61
|
canonicalId: string;
|
|
58
62
|
specVersion?: string;
|
|
59
63
|
sourceUrl: string;
|
|
64
|
+
origin?: string | null;
|
|
65
|
+
authorization?: string | null;
|
|
66
|
+
authorizationNote?: string | null;
|
|
60
67
|
}) => void;
|
|
61
68
|
}
|
|
62
69
|
export type PushSpecResult = {
|
|
@@ -1 +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,
|
|
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;;6FAE6F;AAC7F,MAAM,WAAW,eAAe;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;oFAEgF;IAChF,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,UAAU;IACvB,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACnD,sEAAsE;IACtE,SAAS,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/D,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,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC;CACnM;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,CA4E5E"}
|
package/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "pathmode",
|
|
4
4
|
"display_name": "Pathmode",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.19.0",
|
|
6
6
|
"description": "Deterministic preflight for the intent you hand to a coding agent: six calibrated gates, the exact blockers named, no model call, no key needed.",
|
|
7
7
|
"long_description": "Pathmode MCP Server runs a deterministic preflight before your coding agent builds: check_intent_readiness scores an intent spec against six calibrated gates (title, objective, outcomes, constraints, edge cases, verification) and names the exact blockers, with no model call and no account. Keyless local mode works out of the box; specs live in intent.md in your repo, plain markdown you own, and skills for drafting, pressure-testing, and handing off intent ride along. Connect a Pathmode workspace with an API key to sync intent and evidence across a team, analyze dependency graphs, and verify pull requests against the outcomes you agreed to.",
|
|
8
8
|
"author": {
|