@isaacriehm/cairn-core 0.19.1 → 0.22.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/.tsbuildinfo +1 -1
- package/dist/align-undo/log.js +3 -2
- package/dist/align-undo/log.js.map +1 -1
- package/dist/attention/index.d.ts +0 -2
- package/dist/attention/index.js +0 -2
- package/dist/attention/index.js.map +1 -1
- package/dist/attention/restore.d.ts +1 -1
- package/dist/attention/restore.js +1 -1
- package/dist/attention/source-strip.d.ts +2 -2
- package/dist/attention/source-strip.js +4 -3
- package/dist/attention/source-strip.js.map +1 -1
- package/dist/components/audit.d.ts +7 -1
- package/dist/components/audit.js +144 -72
- package/dist/components/audit.js.map +1 -1
- package/dist/components/emit.js +33 -6
- package/dist/components/emit.js.map +1 -1
- package/dist/components/freshness.d.ts +51 -0
- package/dist/components/freshness.js +121 -0
- package/dist/components/freshness.js.map +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/reconfirm.d.ts +64 -0
- package/dist/components/reconfirm.js +204 -0
- package/dist/components/reconfirm.js.map +1 -0
- package/dist/context/handoff-builder.js +3 -3
- package/dist/context/handoff-builder.js.map +1 -1
- package/dist/context/task-summary.js +2 -2
- package/dist/context/task-summary.js.map +1 -1
- package/dist/doctor/index.js +102 -9
- package/dist/doctor/index.js.map +1 -1
- package/dist/events/paths.js +2 -2
- package/dist/events/paths.js.map +1 -1
- package/dist/fix-align/sentinel.js +2 -3
- package/dist/fix-align/sentinel.js.map +1 -1
- package/dist/gc/attested-commits.js +2 -2
- package/dist/gc/attested-commits.js.map +1 -1
- package/dist/gc/canary.js +2 -3
- package/dist/gc/canary.js.map +1 -1
- package/dist/gc/citation-integrity.d.ts +4 -5
- package/dist/gc/citation-integrity.js +11 -33
- package/dist/gc/citation-integrity.js.map +1 -1
- package/dist/gc/classify.js +3 -16
- package/dist/gc/classify.js.map +1 -1
- package/dist/gc/completion-integrity.js +4 -3
- package/dist/gc/completion-integrity.js.map +1 -1
- package/dist/gc/entity-orphan.js +66 -12
- package/dist/gc/entity-orphan.js.map +1 -1
- package/dist/gc/ghost-anchor.d.ts +57 -0
- package/dist/gc/ghost-anchor.js +171 -0
- package/dist/gc/ghost-anchor.js.map +1 -0
- package/dist/gc/index.d.ts +2 -0
- package/dist/gc/index.js +1 -0
- package/dist/gc/index.js.map +1 -1
- package/dist/gc/sweep.d.ts +1 -1
- package/dist/gc/sweep.js +13 -1
- package/dist/gc/sweep.js.map +1 -1
- package/dist/gc/types.d.ts +1 -1
- package/dist/hooks/bypass-detection.js +3 -2
- package/dist/hooks/bypass-detection.js.map +1 -1
- package/dist/hooks/defer.js +3 -2
- package/dist/hooks/defer.js.map +1 -1
- package/dist/hooks/ghost-backup.d.ts +37 -0
- package/dist/hooks/ghost-backup.js +82 -0
- package/dist/hooks/ghost-backup.js.map +1 -0
- package/dist/hooks/post-tool-use/allowlist-reader.js +2 -2
- package/dist/hooks/post-tool-use/allowlist-reader.js.map +1 -1
- package/dist/hooks/post-tool-use/ask-user-blocked.d.ts +1 -2
- package/dist/hooks/post-tool-use/ask-user-blocked.js +3 -4
- package/dist/hooks/post-tool-use/ask-user-blocked.js.map +1 -1
- package/dist/hooks/post-tool-use/citation-scanner.d.ts +9 -7
- package/dist/hooks/post-tool-use/citation-scanner.js +9 -14
- package/dist/hooks/post-tool-use/citation-scanner.js.map +1 -1
- package/dist/hooks/post-tool-use/legend-builder.d.ts +2 -2
- package/dist/hooks/post-tool-use/legend-builder.js +1 -19
- package/dist/hooks/post-tool-use/legend-builder.js.map +1 -1
- package/dist/hooks/post-tool-use/post-write.js +18 -1
- package/dist/hooks/post-tool-use/post-write.js.map +1 -1
- package/dist/hooks/post-tool-use/read-enricher.d.ts +2 -2
- package/dist/hooks/post-tool-use/read-enricher.js +4 -6
- package/dist/hooks/post-tool-use/read-enricher.js.map +1 -1
- package/dist/hooks/post-tool-use/sot-align.js +29 -3
- package/dist/hooks/post-tool-use/sot-align.js.map +1 -1
- package/dist/hooks/post-tool-use/write-guardian.d.ts +1 -5
- package/dist/hooks/post-tool-use/write-guardian.js +25 -18
- package/dist/hooks/post-tool-use/write-guardian.js.map +1 -1
- package/dist/hooks/runners/context-threshold.js +3 -3
- package/dist/hooks/runners/context-threshold.js.map +1 -1
- package/dist/hooks/runners/payload.js +2 -1
- package/dist/hooks/runners/payload.js.map +1 -1
- package/dist/hooks/runners/phase-ready-surface.js +3 -2
- package/dist/hooks/runners/phase-ready-surface.js.map +1 -1
- package/dist/hooks/runners/session-start.js +103 -4
- package/dist/hooks/runners/session-start.js.map +1 -1
- package/dist/hooks/runners/stop.js +46 -42
- package/dist/hooks/runners/stop.js.map +1 -1
- package/dist/hooks/runners/user-prompt-submit.d.ts +2 -2
- package/dist/hooks/runners/user-prompt-submit.js +4 -9
- package/dist/hooks/runners/user-prompt-submit.js.map +1 -1
- package/dist/hooks/seed-attested.js +3 -2
- package/dist/hooks/seed-attested.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/init/baseline-audit.js +3 -3
- package/dist/init/baseline-audit.js.map +1 -1
- package/dist/init/claude-rule.js +13 -1
- package/dist/init/claude-rule.js.map +1 -1
- package/dist/init/curator/corpus.d.ts +1 -0
- package/dist/init/curator/corpus.js +6 -2
- package/dist/init/curator/corpus.js.map +1 -1
- package/dist/init/curator/emit.js +2 -3
- package/dist/init/curator/emit.js.map +1 -1
- package/dist/init/detect-components.d.ts +3 -2
- package/dist/init/detect-components.js +33 -15
- package/dist/init/detect-components.js.map +1 -1
- package/dist/init/detect.d.ts +1 -5
- package/dist/init/detect.js +157 -143
- package/dist/init/detect.js.map +1 -1
- package/dist/init/eta-calibration.js +2 -2
- package/dist/init/eta-calibration.js.map +1 -1
- package/dist/init/glob-inference.js +24 -0
- package/dist/init/glob-inference.js.map +1 -1
- package/dist/init/index.d.ts +4 -4
- package/dist/init/index.js +2 -2
- package/dist/init/index.js.map +1 -1
- package/dist/init/init.d.ts +8 -0
- package/dist/init/init.js +16 -20
- package/dist/init/init.js.map +1 -1
- package/dist/init/mapper-merge.d.ts +1 -4
- package/dist/init/mapper-merge.js +4 -17
- package/dist/init/mapper-merge.js.map +1 -1
- package/dist/init/mapper-parallel.js +1 -1
- package/dist/init/mapper-parallel.js.map +1 -1
- package/dist/init/mapper-prompts.d.ts +1 -23
- package/dist/init/mapper-prompts.js +1 -25
- package/dist/init/mapper-prompts.js.map +1 -1
- package/dist/init/mapper.d.ts +0 -6
- package/dist/init/mapper.js +2 -5
- package/dist/init/mapper.js.map +1 -1
- package/dist/init/module-slicer.js +3 -24
- package/dist/init/module-slicer.js.map +1 -1
- package/dist/init/multi-dev/install.js +24 -0
- package/dist/init/multi-dev/install.js.map +1 -1
- package/dist/init/overlay.js +5 -16
- package/dist/init/overlay.js.map +1 -1
- package/dist/init/phases/11-baseline.js +1 -1
- package/dist/init/phases/11-baseline.js.map +1 -1
- package/dist/init/phases/4-seed.js +7 -5
- package/dist/init/phases/4-seed.js.map +1 -1
- package/dist/init/phases/9a-walker.js +4 -0
- package/dist/init/phases/9a-walker.js.map +1 -1
- package/dist/init/phases/9b-curate.d.ts +1 -0
- package/dist/init/phases/9b-curate.js +6 -2
- package/dist/init/phases/9b-curate.js.map +1 -1
- package/dist/init/phases/9d-comp-walk.js +3 -3
- package/dist/init/phases/9d-comp-walk.js.map +1 -1
- package/dist/init/phases/9e-comp-annotate.js +63 -3
- package/dist/init/phases/9e-comp-annotate.js.map +1 -1
- package/dist/init/phases/index.d.ts +0 -1
- package/dist/init/phases/index.js +0 -1
- package/dist/init/phases/index.js.map +1 -1
- package/dist/init/phases/mapper-output-io.d.ts +1 -1
- package/dist/init/phases/mapper-output-io.js +3 -2
- package/dist/init/phases/mapper-output-io.js.map +1 -1
- package/dist/init/phases/state-io.d.ts +1 -1
- package/dist/init/phases/state-io.js +3 -2
- package/dist/init/phases/state-io.js.map +1 -1
- package/dist/init/phases/types.d.ts +20 -8
- package/dist/init/phases/types.js +0 -1
- package/dist/init/phases/types.js.map +1 -1
- package/dist/init/progress.d.ts +1 -0
- package/dist/init/progress.js +3 -1
- package/dist/init/progress.js.map +1 -1
- package/dist/init/rules-merge/ingest.js +3 -3
- package/dist/init/rules-merge/ingest.js.map +1 -1
- package/dist/init/seed.js +54 -5
- package/dist/init/seed.js.map +1 -1
- package/dist/init/source-comments/strip-replace.d.ts +1 -2
- package/dist/init/source-comments/strip-replace.js +19 -3
- package/dist/init/source-comments/strip-replace.js.map +1 -1
- package/dist/init/source-comments/walker.js +8 -79
- package/dist/init/source-comments/walker.js.map +1 -1
- package/dist/init/types.d.ts +8 -16
- package/dist/init/walker.d.ts +1 -1
- package/dist/init/walker.js +1 -1
- package/dist/join/index.d.ts +9 -0
- package/dist/join/index.js +82 -25
- package/dist/join/index.js.map +1 -1
- package/dist/lock.js +4 -3
- package/dist/lock.js.map +1 -1
- package/dist/mcp/bootstrap-guard.js +10 -1
- package/dist/mcp/bootstrap-guard.js.map +1 -1
- package/dist/mcp/schemas.d.ts +26 -4
- package/dist/mcp/schemas.js +23 -1
- package/dist/mcp/schemas.js.map +1 -1
- package/dist/mcp/serve.js +9 -0
- package/dist/mcp/serve.js.map +1 -1
- package/dist/mcp/server.js +3 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/telemetry.js +4 -3
- package/dist/mcp/telemetry.js.map +1 -1
- package/dist/mcp/tools/component-reconfirm.d.ts +7 -0
- package/dist/mcp/tools/component-reconfirm.js +39 -0
- package/dist/mcp/tools/component-reconfirm.js.map +1 -0
- package/dist/mcp/tools/component-register.d.ts +15 -0
- package/dist/mcp/tools/component-register.js +65 -0
- package/dist/mcp/tools/component-register.js.map +1 -0
- package/dist/mcp/tools/decision-get.js +2 -2
- package/dist/mcp/tools/decision-get.js.map +1 -1
- package/dist/mcp/tools/index.js +5 -6
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/init-phases.d.ts +2 -0
- package/dist/mcp/tools/init-phases.js +21 -5
- package/dist/mcp/tools/init-phases.js.map +1 -1
- package/dist/mcp/tools/mission-advance.d.ts +3 -4
- package/dist/mcp/tools/mission-advance.js +15 -19
- package/dist/mcp/tools/mission-advance.js.map +1 -1
- package/dist/mcp/tools/mission-resume.js +3 -3
- package/dist/mcp/tools/mission-resume.js.map +1 -1
- package/dist/mcp/tools/record-decision.js +17 -9
- package/dist/mcp/tools/record-decision.js.map +1 -1
- package/dist/mcp/tools/resolve-attention.js +70 -34
- package/dist/mcp/tools/resolve-attention.js.map +1 -1
- package/dist/mcp/tools/resume.js +3 -2
- package/dist/mcp/tools/resume.js.map +1 -1
- package/dist/mcp/tools/search.js +2 -2
- package/dist/mcp/tools/search.js.map +1 -1
- package/dist/mcp/tools/task-complete.js +2 -3
- package/dist/mcp/tools/task-complete.js.map +1 -1
- package/dist/mcp/tools/task-create.js +2 -2
- package/dist/mcp/tools/task-create.js.map +1 -1
- package/dist/migrate/config-io.d.ts +24 -0
- package/dist/migrate/config-io.js +73 -0
- package/dist/migrate/config-io.js.map +1 -0
- package/dist/migrate/gitignore.d.ts +28 -0
- package/dist/migrate/gitignore.js +82 -0
- package/dist/migrate/gitignore.js.map +1 -0
- package/dist/migrate/index.d.ts +6 -0
- package/dist/migrate/index.js +6 -0
- package/dist/migrate/index.js.map +1 -0
- package/dist/migrate/migrations/0001-drop-dead-config-fields.d.ts +12 -0
- package/dist/migrate/migrations/0001-drop-dead-config-fields.js +39 -0
- package/dist/migrate/migrations/0001-drop-dead-config-fields.js.map +1 -0
- package/dist/migrate/migrations/0002-backfill-gitignore.d.ts +14 -0
- package/dist/migrate/migrations/0002-backfill-gitignore.js +40 -0
- package/dist/migrate/migrations/0002-backfill-gitignore.js.map +1 -0
- package/dist/migrate/registry.d.ts +9 -0
- package/dist/migrate/registry.js +11 -0
- package/dist/migrate/registry.js.map +1 -0
- package/dist/migrate/runner.d.ts +45 -0
- package/dist/migrate/runner.js +177 -0
- package/dist/migrate/runner.js.map +1 -0
- package/dist/migrate/semver.d.ts +11 -0
- package/dist/migrate/semver.js +35 -0
- package/dist/migrate/semver.js.map +1 -0
- package/dist/migrate/types.d.ts +47 -0
- package/dist/migrate/types.js +13 -0
- package/dist/migrate/types.js.map +1 -0
- package/dist/missions/task-link.js +7 -8
- package/dist/missions/task-link.js.map +1 -1
- package/dist/paths/index.d.ts +12 -1
- package/dist/paths/index.js +17 -3
- package/dist/paths/index.js.map +1 -1
- package/dist/sensors/catalog.js +6 -11
- package/dist/sensors/catalog.js.map +1 -1
- package/dist/sensors/decisions.js +55 -19
- package/dist/sensors/decisions.js.map +1 -1
- package/dist/sensors/diff.d.ts +12 -0
- package/dist/sensors/diff.js +103 -0
- package/dist/sensors/diff.js.map +1 -1
- package/dist/sensors/index.d.ts +4 -5
- package/dist/sensors/index.js +2 -3
- package/dist/sensors/index.js.map +1 -1
- package/dist/sensors/runner.d.ts +34 -37
- package/dist/sensors/runner.js +63 -53
- package/dist/sensors/runner.js.map +1 -1
- package/dist/sensors/stub-catalog.d.ts +6 -3
- package/dist/sensors/stub-catalog.js +7 -19
- package/dist/sensors/stub-catalog.js.map +1 -1
- package/dist/sensors/types.d.ts +11 -55
- package/dist/sensors/types.js +4 -8
- package/dist/sensors/types.js.map +1 -1
- package/dist/session-start/build.js +36 -21
- package/dist/session-start/build.js.map +1 -1
- package/dist/session-start/templates.d.ts +1 -1
- package/dist/session-start/templates.js +1 -1
- package/dist/status-line/event-queue.js +2 -1
- package/dist/status-line/event-queue.js.map +1 -1
- package/dist/status-line/reader.js +5 -5
- package/dist/status-line/reader.js.map +1 -1
- package/dist/status-line/writer.js +2 -1
- package/dist/status-line/writer.js.map +1 -1
- package/dist/tasks/lifecycle.d.ts +3 -4
- package/dist/tasks/lifecycle.js +19 -21
- package/dist/tasks/lifecycle.js.map +1 -1
- package/dist/trace/index.js +2 -2
- package/dist/trace/index.js.map +1 -1
- package/dist/update-check.d.ts +28 -0
- package/dist/update-check.js +137 -0
- package/dist/update-check.js.map +1 -0
- package/package.json +2 -2
- package/templates/.cairn/git-hooks/commit-msg +33 -5
- package/templates/.cairn/git-hooks/post-commit +13 -3
- package/templates/.cairn/git-hooks/pre-commit +48 -22
- package/templates/.github/workflows/cairn-check.yml +8 -0
- package/dist/attention/bulk-accept.d.ts +0 -78
- package/dist/attention/bulk-accept.js +0 -348
- package/dist/attention/bulk-accept.js.map +0 -1
- package/dist/attention/serve/api.d.ts +0 -24
- package/dist/attention/serve/api.js +0 -383
- package/dist/attention/serve/api.js.map +0 -1
- package/dist/attention/serve/index.d.ts +0 -63
- package/dist/attention/serve/index.js +0 -219
- package/dist/attention/serve/index.js.map +0 -1
- package/dist/hooks/read-enrich.d.ts +0 -6
- package/dist/hooks/read-enrich.js +0 -11
- package/dist/hooks/read-enrich.js.map +0 -1
- package/dist/hooks/write-guard.d.ts +0 -6
- package/dist/hooks/write-guard.js +0 -11
- package/dist/hooks/write-guard.js.map +0 -1
- package/dist/init/phases/12-strip.d.ts +0 -10
- package/dist/init/phases/12-strip.js +0 -88
- package/dist/init/phases/12-strip.js.map +0 -1
- package/dist/mcp/tools/attention-serve.d.ts +0 -23
- package/dist/mcp/tools/attention-serve.js +0 -84
- package/dist/mcp/tools/attention-serve.js.map +0 -1
- package/dist/mcp/tools/attention-wait.d.ts +0 -18
- package/dist/mcp/tools/attention-wait.js +0 -84
- package/dist/mcp/tools/attention-wait.js.map +0 -1
- package/dist/mcp/tools/bulk-accept-attention.d.ts +0 -22
- package/dist/mcp/tools/bulk-accept-attention.js +0 -84
- package/dist/mcp/tools/bulk-accept-attention.js.map +0 -1
- package/dist/sensors/attestation.d.ts +0 -44
- package/dist/sensors/attestation.js +0 -262
- package/dist/sensors/attestation.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
2
|
-
import { dirname
|
|
3
|
-
import { appendMissionJournal, findActiveMission, readMissionState, readRoadmap, writeMissionState, } from "@isaacriehm/cairn-state";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { cairnDir, appendMissionJournal, findActiveMission, readMissionState, readRoadmap, writeMissionState, } from "@isaacriehm/cairn-state";
|
|
4
4
|
import { requireBootstrap } from "../bootstrap-guard.js";
|
|
5
5
|
import { mcpError } from "../errors.js";
|
|
6
6
|
import { missionAdvanceInput } from "../schemas.js";
|
|
@@ -12,7 +12,7 @@ import { advanceMissionPhase as advancePhase } from "../../missions/index.js";
|
|
|
12
12
|
* / `aborted`). Returns "unknown" when the file is missing or unreadable.
|
|
13
13
|
*/
|
|
14
14
|
function readGraduatedOutcome(repoRoot, taskId) {
|
|
15
|
-
const statusPath =
|
|
15
|
+
const statusPath = cairnDir(repoRoot, "tasks", "done", taskId, "status.yaml");
|
|
16
16
|
if (!existsSync(statusPath))
|
|
17
17
|
return "unknown";
|
|
18
18
|
try {
|
|
@@ -37,7 +37,7 @@ function writeMissionPhaseDefer(repoRoot, missionId, phaseId, hours) {
|
|
|
37
37
|
deferred_at: now.toISOString(),
|
|
38
38
|
deferred_until: until.toISOString(),
|
|
39
39
|
};
|
|
40
|
-
const path =
|
|
40
|
+
const path = cairnDir(repoRoot, ".mission-phase-deferred-until");
|
|
41
41
|
mkdirSync(dirname(path), { recursive: true });
|
|
42
42
|
writeFileSync(path, JSON.stringify(payload, null, 2), "utf8");
|
|
43
43
|
return until.toISOString();
|
|
@@ -48,13 +48,12 @@ function writeMissionPhaseDefer(repoRoot, missionId, phaseId, hours) {
|
|
|
48
48
|
* force) or when the parent mission closes — keeping a stale marker
|
|
49
49
|
* around suppresses the prompt for a phase that no longer needs it.
|
|
50
50
|
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
* 24h expiry rolled past.
|
|
51
|
+
* A stale marker left after a deferred phase auto-advances would
|
|
52
|
+
* otherwise suppress phase-ready prompts on unrelated missions until
|
|
53
|
+
* the 24h expiry rolled past.
|
|
55
54
|
*/
|
|
56
55
|
export function clearMissionPhaseDeferIfMatches(repoRoot, match) {
|
|
57
|
-
const path =
|
|
56
|
+
const path = cairnDir(repoRoot, ".mission-phase-deferred-until");
|
|
58
57
|
if (!existsSync(path))
|
|
59
58
|
return false;
|
|
60
59
|
try {
|
|
@@ -129,7 +128,7 @@ async function handler(ctx, input) {
|
|
|
129
128
|
// not re-fire the same phase-exit AskUserQuestion. The defer file
|
|
130
129
|
// only suppresses the cross-session SessionStart re-ask; in-session
|
|
131
130
|
// re-emit on a new task completion still flows via the
|
|
132
|
-
// `ready_emitted = false` reset above
|
|
131
|
+
// `ready_emitted = false` reset above.
|
|
133
132
|
const deferredUntil = writeMissionPhaseDefer(ctx.repoRoot, missionId, input.phase_id, 24);
|
|
134
133
|
appendMissionJournal(ctx.repoRoot, missionId, {
|
|
135
134
|
ts: new Date().toISOString(),
|
|
@@ -166,10 +165,9 @@ async function handler(ctx, input) {
|
|
|
166
165
|
if (input.choice === "exit") {
|
|
167
166
|
// Cursor validation — `exit` is the cursor-honouring advance. Reject
|
|
168
167
|
// out-of-order phase exits so a caller can't skip an incomplete phase
|
|
169
|
-
// by submitting a later phase_id (
|
|
170
|
-
//
|
|
171
|
-
//
|
|
172
|
-
// skip ahead intentionally.
|
|
168
|
+
// by submitting a later phase_id (which would orphan the skipped
|
|
169
|
+
// phase and corrupt progress accounting). Operator must use `force`
|
|
170
|
+
// to skip ahead intentionally.
|
|
173
171
|
const cursorPhase = state.cursor.active_phase;
|
|
174
172
|
if (cursorPhase !== null && cursorPhase !== input.phase_id) {
|
|
175
173
|
return mcpError("VALIDATION_FAILED", `phase_id ${input.phase_id} is not the active cursor (cursor on ${cursorPhase}). ` +
|
|
@@ -180,11 +178,9 @@ async function handler(ctx, input) {
|
|
|
180
178
|
return mcpError("VALIDATION_FAILED", `phase ${input.phase_id} has no linked tasks. Pass choice="force" to advance an empty phase.`);
|
|
181
179
|
}
|
|
182
180
|
// Failed-task gate — refuse to mark a phase as graduated if every
|
|
183
|
-
// linked task ended in failure
|
|
184
|
-
//
|
|
185
|
-
//
|
|
186
|
-
// while no work succeeded. Force can still skip, but it requires
|
|
187
|
-
// explicit operator intent.
|
|
181
|
+
// linked task ended in failure, which would leave the mission
|
|
182
|
+
// journal claiming "phase done" while no work succeeded. Force can
|
|
183
|
+
// still skip, but it requires explicit operator intent.
|
|
188
184
|
const outcomes = progress.task_ids.map((id) => readGraduatedOutcome(ctx.repoRoot, id));
|
|
189
185
|
const hasUngraduated = outcomes.some((o) => o === "unknown");
|
|
190
186
|
const hasSucceeded = outcomes.some((o) => o === "succeeded");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mission-advance.js","sourceRoot":"","sources":["../../../src/mcp/tools/mission-advance.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,UAAU,EACV,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"mission-advance.js","sourceRoot":"","sources":["../../../src/mcp/tools/mission-advance.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
11
11
|
import { join } from "node:path";
|
|
12
12
|
import { parse as parseYaml } from "yaml";
|
|
13
|
-
import { countDonePhases, findActiveMission, locateMission, readMissionSpec, readMissionState, readPhaseBrief, readRoadmap, slicePhaseSection, } from "@isaacriehm/cairn-state";
|
|
13
|
+
import { cairnDir, countDonePhases, findActiveMission, locateMission, readMissionSpec, readMissionState, readPhaseBrief, readRoadmap, slicePhaseSection, } from "@isaacriehm/cairn-state";
|
|
14
14
|
import { requireBootstrap } from "../bootstrap-guard.js";
|
|
15
15
|
import { mcpError } from "../errors.js";
|
|
16
16
|
import { missionResumeInput } from "../schemas.js";
|
|
@@ -172,7 +172,7 @@ function parseStatusYaml(path) {
|
|
|
172
172
|
};
|
|
173
173
|
}
|
|
174
174
|
function collectRecentGraduatedTasks(repoRoot, missionId, cap) {
|
|
175
|
-
const doneDir =
|
|
175
|
+
const doneDir = cairnDir(repoRoot, "tasks", "done");
|
|
176
176
|
if (!existsSync(doneDir))
|
|
177
177
|
return [];
|
|
178
178
|
let entries;
|
|
@@ -212,7 +212,7 @@ function collectRecentGraduatedTasks(repoRoot, missionId, cap) {
|
|
|
212
212
|
}));
|
|
213
213
|
}
|
|
214
214
|
function collectInFlightTasks(repoRoot, missionId) {
|
|
215
|
-
const activeDir =
|
|
215
|
+
const activeDir = cairnDir(repoRoot, "tasks", "active");
|
|
216
216
|
if (!existsSync(activeDir))
|
|
217
217
|
return [];
|
|
218
218
|
let entries;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mission-resume.js","sourceRoot":"","sources":["../../../src/mcp/tools/mission-resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"mission-resume.js","sourceRoot":"","sources":["../../../src/mcp/tools/mission-resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { stringify as stringifyYaml } from "yaml";
|
|
|
4
4
|
import { computeDecisionId, scanExistingDecisionIds, } from "../../decision-capture/index.js";
|
|
5
5
|
import { writeInvalidationEvent } from "../../events/index.js";
|
|
6
6
|
import { isDuplicateOfAccepted } from "../../attention/dedup.js";
|
|
7
|
-
import { bodyContentHash,
|
|
7
|
+
import { bodyContentHash, decisionsDir, deriveDecId, isGhost, readAnchorMap, readRejectedYaml, readTopicIndex, setTopic, writeDecisionsLedger, writeFileCandidatesMap, writeTopicIndex, } from "@isaacriehm/cairn-state";
|
|
8
8
|
import { DecisionAssertion } from "@isaacriehm/cairn-state";
|
|
9
9
|
import { withWriteLock } from "../../lock.js";
|
|
10
10
|
import { requireBootstrap } from "../bootstrap-guard.js";
|
|
@@ -127,18 +127,20 @@ async function handler(ctx, input) {
|
|
|
127
127
|
// ── Auto-accept gate ──────────────────────────────────────────────
|
|
128
128
|
// When auto-accept is on (the default) and the caller did NOT pin a
|
|
129
129
|
// target, an AI-proposed decision lands straight in the ledger instead
|
|
130
|
-
// of the triage inbox — the human review checkpoint shifts to the
|
|
131
|
-
// committed-ground-state PR diff
|
|
130
|
+
// of the triage inbox — the human review checkpoint shifts to the diff
|
|
131
|
+
// (the committed-ground-state PR diff in committed mode; the operator's
|
|
132
|
+
// local working/commit diff in ghost, which has no PR). Verify-then-accept: assertions
|
|
132
133
|
// already passed schema validation above; here we dedup against the
|
|
133
134
|
// accepted ledger so a restatement of an existing decision still queues
|
|
134
135
|
// as a draft for human eyes rather than silently re-landing.
|
|
135
136
|
//
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
137
|
+
// Decisions always auto-accept (the human review checkpoint is the
|
|
138
|
+
// committed/local diff). An explicit `target` is always honored:
|
|
139
|
+
// `"accepted"` forces direct accept (skips the dedup gate); `"inbox"`
|
|
140
|
+
// forces a triage draft (the per-call escape hatch).
|
|
139
141
|
let autoAccepted = false;
|
|
140
142
|
let dedupNote;
|
|
141
|
-
if (input.target === undefined
|
|
143
|
+
if (input.target === undefined) {
|
|
142
144
|
const dup = isDuplicateOfAccepted({ repoRoot: ctx.repoRoot, title });
|
|
143
145
|
if (dup.dup) {
|
|
144
146
|
dedupNote =
|
|
@@ -205,13 +207,19 @@ async function handler(ctx, input) {
|
|
|
205
207
|
catch {
|
|
206
208
|
/* ignore */
|
|
207
209
|
}
|
|
210
|
+
// Ghost has no committed PR for the auto-accepted DEC to ride — surface
|
|
211
|
+
// that review rides the operator's local diff instead (§3.3 seam 6).
|
|
212
|
+
const note = dedupNote ??
|
|
213
|
+
(autoAccepted && isGhost(ctx.repoRoot)
|
|
214
|
+
? "auto-accepted to local ground — review rides your local diff (ghost has no committed PR)"
|
|
215
|
+
: undefined);
|
|
208
216
|
return {
|
|
209
217
|
ok: true,
|
|
210
218
|
id,
|
|
211
219
|
target,
|
|
212
220
|
path: relPath,
|
|
213
221
|
auto_accepted: autoAccepted,
|
|
214
|
-
...(
|
|
222
|
+
...(note !== undefined ? { note } : {}),
|
|
215
223
|
};
|
|
216
224
|
});
|
|
217
225
|
}
|
|
@@ -251,7 +259,7 @@ function allocateUniqueDecId(input, existingIds) {
|
|
|
251
259
|
}
|
|
252
260
|
export const recordDecisionTool = {
|
|
253
261
|
name: "cairn_record_decision",
|
|
254
|
-
description: "Record a decision. Use `slug` to promote a candidate from the topic index, or provide `title` and `summary` for a manual entry.
|
|
262
|
+
description: "Record a decision. Use `slug` to promote a candidate from the topic index, or provide `title` and `summary` for a manual entry. Decisions AUTO-ACCEPT straight into the ledger (the human review checkpoint is the committed/local diff); a near-duplicate of an already-accepted decision falls back to an `_inbox/` draft instead. The response reports `auto_accepted` and, on dedup fallback, a `note`. `target='accepted'` forces direct accept (skips the dedup gate); `target='inbox'` forces a triage draft.\n\n" +
|
|
255
263
|
"**`assertions` schema** (only emit one of these `kind` values — anything else returns INVALID_ASSERTION_KIND):\n" +
|
|
256
264
|
"- `text_must_match` / `text_must_not_match`: `{id, kind, pattern, in_globs[]}` — regex over files in globs.\n" +
|
|
257
265
|
"- `ast_pattern`: `{id, kind, language, pattern, in_globs[]}` — AST grep in named lang over globs.\n" +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-decision.js","sourceRoot":"","sources":["../../../src/mcp/tools/record-decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EACL,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"record-decision.js","sourceRoot":"","sources":["../../../src/mcp/tools/record-decision.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,11 @@
|
|
|
7
7
|
* option. It maps the option (a/b/c/d) to a ground-state write (promote
|
|
8
8
|
* draft, suppress finding, record resolution event).
|
|
9
9
|
*/
|
|
10
|
-
import { appendFileSync, existsSync, mkdirSync, readFileSync,
|
|
10
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
|
|
11
11
|
import { dirname, join } from "node:path";
|
|
12
|
-
import { createHash } from "node:crypto";
|
|
13
12
|
import { stringify as stringifyYaml } from "yaml";
|
|
14
13
|
import { z } from "zod";
|
|
15
|
-
import { bindDec, bodyContentHash, conflictsDir, readSotBindings, readSotCache, recordDriftEvent, setSotCacheEntry, writeSotBindings, writeSotCache, decisionsDir, invariantsDir, writeDecisionsLedger, writeInvariantsLedger, parseFrontmatterRecord, deleteSotCacheEntry, unbindDec, alignmentPendingDir, archivedConflictsDir, deriveLedgerDecId, deriveLedgerInvId, writeFileSafe, } from "@isaacriehm/cairn-state";
|
|
14
|
+
import { cairnDir, bindDec, bodyContentHash, conflictsDir, readSotBindings, readSotCache, recordDriftEvent, setSotCacheEntry, writeSotBindings, writeSotCache, decisionsDir, invariantsDir, writeDecisionsLedger, writeInvariantsLedger, parseFrontmatterRecord, deleteSotCacheEntry, unbindDec, alignmentPendingDir, archivedConflictsDir, deriveLedgerDecId, deriveLedgerInvId, writeFileSafe, } from "@isaacriehm/cairn-state";
|
|
16
15
|
import { writeInvalidationEvent } from "../../events/index.js";
|
|
17
16
|
import { withWriteLock } from "../../lock.js";
|
|
18
17
|
import { requireBootstrap } from "../bootstrap-guard.js";
|
|
@@ -53,6 +52,8 @@ async function handler(ctx, input) {
|
|
|
53
52
|
return resolveBaselineFinding(ctx, input);
|
|
54
53
|
case "invalidation_event":
|
|
55
54
|
return resolveInvalidationEvent(ctx, input);
|
|
55
|
+
case "drift":
|
|
56
|
+
return resolveDriftEvent(ctx, input);
|
|
56
57
|
case "bypass":
|
|
57
58
|
return resolveStopSignal(ctx, input, "bypass");
|
|
58
59
|
case "review":
|
|
@@ -145,7 +146,7 @@ function appendAttestedShas(repoRoot, flagged) {
|
|
|
145
146
|
}
|
|
146
147
|
if (matchingFull.length === 0)
|
|
147
148
|
return 0;
|
|
148
|
-
const path =
|
|
149
|
+
const path = cairnDir(repoRoot, ".attested-commits");
|
|
149
150
|
const existing = new Set();
|
|
150
151
|
if (existsSync(path)) {
|
|
151
152
|
try {
|
|
@@ -173,6 +174,13 @@ function appendAttestedShas(repoRoot, flagged) {
|
|
|
173
174
|
return fresh.length;
|
|
174
175
|
}
|
|
175
176
|
async function resolveDecisionDraft(ctx, input) {
|
|
177
|
+
// `d` is only meaningful for conflict resolution (keep A / keep B / merge /
|
|
178
|
+
// archive both). DEC drafts accept a/b/c (accept / reject / edit) — reject
|
|
179
|
+
// `d` before any filesystem lookup so the caller gets a clear validation
|
|
180
|
+
// error rather than a misleading FILE_NOT_FOUND.
|
|
181
|
+
if (input.choice === "d") {
|
|
182
|
+
return Promise.resolve(mcpError("VALIDATION_FAILED", `choice "d" is only valid for kind="conflict"; decision_draft accepts a (accept) / b (reject) / c (edit)`));
|
|
183
|
+
}
|
|
176
184
|
if (!/^DEC-[0-9a-f]{7,}$/.test(input.item_id)) {
|
|
177
185
|
return Promise.resolve(mcpError("VALIDATION_FAILED", `decision_draft item_id must match DEC-<hash7>, got ${input.item_id}`));
|
|
178
186
|
}
|
|
@@ -293,7 +301,7 @@ function resolveBaselineFinding(ctx, input) {
|
|
|
293
301
|
}
|
|
294
302
|
// choice === "b" — append to suppressions.
|
|
295
303
|
return withWriteLock(ctx.repoRoot, () => {
|
|
296
|
-
const suppressionsPath =
|
|
304
|
+
const suppressionsPath = cairnDir(ctx.repoRoot, "baseline", "suppressions.yaml");
|
|
297
305
|
mkdirSync(dirname(suppressionsPath), { recursive: true });
|
|
298
306
|
let needsHeader = !existsSync(suppressionsPath);
|
|
299
307
|
if (!needsHeader) {
|
|
@@ -948,11 +956,16 @@ function mergeConflict(repoRoot, conflict, rationale) {
|
|
|
948
956
|
}
|
|
949
957
|
const now = new Date().toISOString();
|
|
950
958
|
const mergedKind = conflict.aRef.kind === "INV" && conflict.bRef.kind === "INV" ? "INV" : "DEC";
|
|
951
|
-
const mergedId = synthesizeMergedId(
|
|
959
|
+
const mergedId = synthesizeMergedId(mergedKind, conflict.aRef.id, conflict.bRef.id);
|
|
960
|
+
// Logical display label only — the actual write routes through the dir
|
|
961
|
+
// helpers below so ghost repos land the merged entity out-of-repo (under
|
|
962
|
+
// cairnDir), never inside the client tree. `join(repoRoot, ".cairn/…")` here
|
|
963
|
+
// would write in-repo in ghost and split-brain against the cairnDir-routed
|
|
964
|
+
// ledger/anchor writers that follow.
|
|
952
965
|
const mergedRel = mergedKind === "DEC"
|
|
953
966
|
? `.cairn/ground/decisions/${mergedId}.md`
|
|
954
967
|
: `.cairn/ground/invariants/${mergedId}.md`;
|
|
955
|
-
const mergedAbs = join(repoRoot,
|
|
968
|
+
const mergedAbs = join(mergedKind === "DEC" ? decisionsDir(repoRoot) : invariantsDir(repoRoot), `${mergedId}.md`);
|
|
956
969
|
const titleA = String(a.fm["title"] ?? conflict.aRef.id);
|
|
957
970
|
const titleB = String(b.fm["title"] ?? conflict.bRef.id);
|
|
958
971
|
const mergedTitle = `Merged: ${titleA} + ${titleB}`;
|
|
@@ -999,34 +1012,29 @@ function mergeConflict(repoRoot, conflict, rationale) {
|
|
|
999
1012
|
bindAndCacheMergedEntity(repoRoot, mergedId, mergedBody);
|
|
1000
1013
|
return { mergedId, mergedRel };
|
|
1001
1014
|
}
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
}
|
|
1017
|
-
const seed = `merge-${Date.now()}-${Math.floor(Math.random() * 1_000_000)}`;
|
|
1018
|
-
let candidate = `${kind}-${hashHex(seed).slice(0, 7)}`;
|
|
1019
|
-
let suffix = 0;
|
|
1020
|
-
while (existing.has(candidate)) {
|
|
1021
|
-
suffix += 1;
|
|
1022
|
-
candidate = `${kind}-${hashHex(`${seed}-${suffix}`).slice(0, 7)}`;
|
|
1023
|
-
}
|
|
1024
|
-
return candidate;
|
|
1025
|
-
}
|
|
1026
|
-
function hashHex(input) {
|
|
1027
|
-
return createHash("sha256").update(input, "utf8").digest("hex");
|
|
1015
|
+
/**
|
|
1016
|
+
* Derive the merged entity's id deterministically from the two source ids.
|
|
1017
|
+
*
|
|
1018
|
+
* Content-addressed like every other emit path (`deriveLedger{Dec,Inv}Id`):
|
|
1019
|
+
* the same conflict pair always yields the same merged id, so re-running a
|
|
1020
|
+
* merge reuses the id instead of forking a new entity. (The previous
|
|
1021
|
+
* `Date.now()+Math.random()` seed broke that idempotency contract.)
|
|
1022
|
+
*/
|
|
1023
|
+
function synthesizeMergedId(kind, aId, bId) {
|
|
1024
|
+
const derive = kind === "DEC" ? deriveLedgerDecId : deriveLedgerInvId;
|
|
1025
|
+
return derive({
|
|
1026
|
+
source_file: `conflict-merge:${aId}+${bId}`,
|
|
1027
|
+
source_offset: 0,
|
|
1028
|
+
capture_source: "conflict-merge",
|
|
1029
|
+
});
|
|
1028
1030
|
}
|
|
1029
1031
|
function resolveInvalidationEvent(_ctx, input) {
|
|
1032
|
+
// `d` is conflict-only; the shared Input schema permits it, so reject it here
|
|
1033
|
+
// rather than index a 3-key map with `undefined` and return a malformed
|
|
1034
|
+
// `invalidation_undefined` success.
|
|
1035
|
+
if (input.choice === "d") {
|
|
1036
|
+
return Promise.resolve(mcpError("VALIDATION_FAILED", `choice "d" is only valid for kind="conflict"; invalidation accepts a (refresh) / b (continue) / c (abort)`));
|
|
1037
|
+
}
|
|
1030
1038
|
const map = {
|
|
1031
1039
|
a: "refresh",
|
|
1032
1040
|
b: "continue_under_old",
|
|
@@ -1040,6 +1048,34 @@ function resolveInvalidationEvent(_ctx, input) {
|
|
|
1040
1048
|
...(input.rationale !== undefined ? { rationale: input.rationale } : {}),
|
|
1041
1049
|
});
|
|
1042
1050
|
}
|
|
1051
|
+
/**
|
|
1052
|
+
* Drift events (GC staleness findings — doc-source drift, doc-claim drift,
|
|
1053
|
+
* scope-orphan, generator drift) surface in the cairn-attention queue and
|
|
1054
|
+
* resolve via the same A/B/C path. Resolution records the operator's intent;
|
|
1055
|
+
* the actual repair (re-sync the drifted source) is a caller action, exactly
|
|
1056
|
+
* like baseline/invalidation findings. The staleness log is an append-only
|
|
1057
|
+
* advisory snapshot rebuilt by the next GC sweep, so there is no per-event
|
|
1058
|
+
* entry to mutate here.
|
|
1059
|
+
*/
|
|
1060
|
+
function resolveDriftEvent(_ctx, input) {
|
|
1061
|
+
// `d` is conflict-only; reject the schema-permitted-but-unsupported choice
|
|
1062
|
+
// instead of returning a malformed `drift_undefined` success.
|
|
1063
|
+
if (input.choice === "d") {
|
|
1064
|
+
return Promise.resolve(mcpError("VALIDATION_FAILED", `choice "d" is only valid for kind="conflict"; drift accepts a (refresh) / b (defer) / c (dismiss)`));
|
|
1065
|
+
}
|
|
1066
|
+
const map = {
|
|
1067
|
+
a: "refresh",
|
|
1068
|
+
b: "defer",
|
|
1069
|
+
c: "dismiss",
|
|
1070
|
+
};
|
|
1071
|
+
const choice = input.choice;
|
|
1072
|
+
return Promise.resolve({
|
|
1073
|
+
ok: true,
|
|
1074
|
+
resolved_kind: `drift_${map[choice]}`,
|
|
1075
|
+
item_id: input.item_id,
|
|
1076
|
+
...(input.rationale !== undefined ? { rationale: input.rationale } : {}),
|
|
1077
|
+
});
|
|
1078
|
+
}
|
|
1043
1079
|
function promoteDraftStatus(body) {
|
|
1044
1080
|
return body.replace(/^status:\s*draft(?:-from-[a-z-]+)?\b/m, "status: accepted");
|
|
1045
1081
|
}
|
|
@@ -1053,7 +1089,7 @@ function emitEvent(ctx, kind, decId, path) {
|
|
|
1053
1089
|
}
|
|
1054
1090
|
export const resolveAttentionTool = {
|
|
1055
1091
|
name: "cairn_resolve_attention",
|
|
1056
|
-
description: "Resolve an inline-A/B/C attention pick — DEC draft accept/reject/edit, baseline finding suppress/defer/triage, invalidation event refresh/continue/abort. Called by the cairn-attention skill after the operator picks an option.",
|
|
1092
|
+
description: "Resolve an inline-A/B/C attention pick — DEC draft accept/reject/edit, baseline finding suppress/defer/triage, invalidation event refresh/continue/abort, drift event refresh/defer/dismiss. Called by the cairn-attention skill after the operator picks an option.",
|
|
1057
1093
|
inputSchema: resolveAttentionInput,
|
|
1058
1094
|
handler,
|
|
1059
1095
|
};
|