@isaacriehm/cairn 0.1.0 → 0.1.4
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/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/backprop/id.d.ts +0 -14
- package/dist/backprop/id.js +0 -40
- package/dist/backprop/id.js.map +0 -1
- package/dist/backprop/index.d.ts +0 -23
- package/dist/backprop/index.js +0 -21
- package/dist/backprop/index.js.map +0 -1
- package/dist/backprop/prompt.d.ts +0 -16
- package/dist/backprop/prompt.js +0 -101
- package/dist/backprop/prompt.js.map +0 -1
- package/dist/backprop/runner.d.ts +0 -18
- package/dist/backprop/runner.js +0 -95
- package/dist/backprop/runner.js.map +0 -1
- package/dist/backprop/schema.d.ts +0 -61
- package/dist/backprop/schema.js +0 -55
- package/dist/backprop/schema.js.map +0 -1
- package/dist/backprop/types.d.ts +0 -101
- package/dist/backprop/types.js +0 -24
- package/dist/backprop/types.js.map +0 -1
- package/dist/backprop/writer.d.ts +0 -27
- package/dist/backprop/writer.js +0 -301
- package/dist/backprop/writer.js.map +0 -1
- package/dist/claude/error.d.ts +0 -33
- package/dist/claude/error.js +0 -58
- package/dist/claude/error.js.map +0 -1
- package/dist/claude/index.d.ts +0 -3
- package/dist/claude/index.js +0 -3
- package/dist/claude/index.js.map +0 -1
- package/dist/claude/runner.d.ts +0 -11
- package/dist/claude/runner.js +0 -132
- package/dist/claude/runner.js.map +0 -1
- package/dist/claude/types.d.ts +0 -52
- package/dist/claude/types.js +0 -14
- package/dist/claude/types.js.map +0 -1
- package/dist/cli/daemon.d.ts +0 -54
- package/dist/cli/daemon.js +0 -351
- package/dist/cli/daemon.js.map +0 -1
- package/dist/cli/install.d.ts +0 -52
- package/dist/cli/install.js +0 -308
- package/dist/cli/install.js.map +0 -1
- package/dist/cli/mirror.d.ts +0 -1
- package/dist/cli/mirror.js +0 -97
- package/dist/cli/mirror.js.map +0 -1
- package/dist/cli/run.d.ts +0 -1
- package/dist/cli/run.js +0 -174
- package/dist/cli/run.js.map +0 -1
- package/dist/cli/task.d.ts +0 -18
- package/dist/cli/task.js +0 -137
- package/dist/cli/task.js.map +0 -1
- package/dist/cli/watch.d.ts +0 -1
- package/dist/cli/watch.js +0 -73
- package/dist/cli/watch.js.map +0 -1
- package/dist/decision-capture/capture.d.ts +0 -57
- package/dist/decision-capture/capture.js +0 -186
- package/dist/decision-capture/capture.js.map +0 -1
- package/dist/decision-capture/extractor.d.ts +0 -20
- package/dist/decision-capture/extractor.js +0 -103
- package/dist/decision-capture/extractor.js.map +0 -1
- package/dist/decision-capture/id.d.ts +0 -14
- package/dist/decision-capture/id.js +0 -44
- package/dist/decision-capture/id.js.map +0 -1
- package/dist/decision-capture/index.d.ts +0 -25
- package/dist/decision-capture/index.js +0 -21
- package/dist/decision-capture/index.js.map +0 -1
- package/dist/decision-capture/prompt.d.ts +0 -15
- package/dist/decision-capture/prompt.js +0 -68
- package/dist/decision-capture/prompt.js.map +0 -1
- package/dist/decision-capture/refinement-prompt.d.ts +0 -25
- package/dist/decision-capture/refinement-prompt.js +0 -146
- package/dist/decision-capture/refinement-prompt.js.map +0 -1
- package/dist/decision-capture/refinement-schema.d.ts +0 -52
- package/dist/decision-capture/refinement-schema.js +0 -61
- package/dist/decision-capture/refinement-schema.js.map +0 -1
- package/dist/decision-capture/refinement.d.ts +0 -60
- package/dist/decision-capture/refinement.js +0 -439
- package/dist/decision-capture/refinement.js.map +0 -1
- package/dist/decision-capture/schema.d.ts +0 -70
- package/dist/decision-capture/schema.js +0 -71
- package/dist/decision-capture/schema.js.map +0 -1
- package/dist/decision-capture/types.d.ts +0 -201
- package/dist/decision-capture/types.js +0 -20
- package/dist/decision-capture/types.js.map +0 -1
- package/dist/decision-capture/writer.d.ts +0 -90
- package/dist/decision-capture/writer.js +0 -267
- package/dist/decision-capture/writer.js.map +0 -1
- package/dist/frontend/discord/acl.d.ts +0 -6
- package/dist/frontend/discord/acl.js +0 -19
- package/dist/frontend/discord/acl.js.map +0 -1
- package/dist/frontend/discord/channels.d.ts +0 -29
- package/dist/frontend/discord/channels.js +0 -58
- package/dist/frontend/discord/channels.js.map +0 -1
- package/dist/frontend/discord/classifier.d.ts +0 -16
- package/dist/frontend/discord/classifier.js +0 -29
- package/dist/frontend/discord/classifier.js.map +0 -1
- package/dist/frontend/discord/index.d.ts +0 -118
- package/dist/frontend/discord/index.js +0 -1104
- package/dist/frontend/discord/index.js.map +0 -1
- package/dist/frontend/discord/slash.d.ts +0 -18
- package/dist/frontend/discord/slash.js +0 -90
- package/dist/frontend/discord/slash.js.map +0 -1
- package/dist/frontend/inbox.d.ts +0 -17
- package/dist/frontend/inbox.js +0 -30
- package/dist/frontend/inbox.js.map +0 -1
- package/dist/frontend/index.d.ts +0 -8
- package/dist/frontend/index.js +0 -6
- package/dist/frontend/index.js.map +0 -1
- package/dist/frontend/stub/index.d.ts +0 -58
- package/dist/frontend/stub/index.js +0 -144
- package/dist/frontend/stub/index.js.map +0 -1
- package/dist/frontend/types.d.ts +0 -247
- package/dist/frontend/types.js +0 -15
- package/dist/frontend/types.js.map +0 -1
- package/dist/gc/apply.d.ts +0 -26
- package/dist/gc/apply.js +0 -48
- package/dist/gc/apply.js.map +0 -1
- package/dist/gc/canary.d.ts +0 -42
- package/dist/gc/canary.js +0 -134
- package/dist/gc/canary.js.map +0 -1
- package/dist/gc/classify.d.ts +0 -25
- package/dist/gc/classify.js +0 -89
- package/dist/gc/classify.js.map +0 -1
- package/dist/gc/doc-gardening.d.ts +0 -29
- package/dist/gc/doc-gardening.js +0 -146
- package/dist/gc/doc-gardening.js.map +0 -1
- package/dist/gc/frontmatter.d.ts +0 -35
- package/dist/gc/frontmatter.js +0 -111
- package/dist/gc/frontmatter.js.map +0 -1
- package/dist/gc/generator-drift.d.ts +0 -28
- package/dist/gc/generator-drift.js +0 -53
- package/dist/gc/generator-drift.js.map +0 -1
- package/dist/gc/index.d.ts +0 -35
- package/dist/gc/index.js +0 -26
- package/dist/gc/index.js.map +0 -1
- package/dist/gc/quality-update.d.ts +0 -23
- package/dist/gc/quality-update.js +0 -69
- package/dist/gc/quality-update.js.map +0 -1
- package/dist/gc/stub-hits.d.ts +0 -31
- package/dist/gc/stub-hits.js +0 -125
- package/dist/gc/stub-hits.js.map +0 -1
- package/dist/gc/sweep.d.ts +0 -56
- package/dist/gc/sweep.js +0 -178
- package/dist/gc/sweep.js.map +0 -1
- package/dist/gc/types.d.ts +0 -129
- package/dist/gc/types.js +0 -26
- package/dist/gc/types.js.map +0 -1
- package/dist/ground/drift.d.ts +0 -8
- package/dist/ground/drift.js +0 -23
- package/dist/ground/drift.js.map +0 -1
- package/dist/ground/frontmatter.d.ts +0 -20
- package/dist/ground/frontmatter.js +0 -49
- package/dist/ground/frontmatter.js.map +0 -1
- package/dist/ground/glob.d.ts +0 -10
- package/dist/ground/glob.js +0 -46
- package/dist/ground/glob.js.map +0 -1
- package/dist/ground/index.d.ts +0 -14
- package/dist/ground/index.js +0 -10
- package/dist/ground/index.js.map +0 -1
- package/dist/ground/ledgers.d.ts +0 -18
- package/dist/ground/ledgers.js +0 -103
- package/dist/ground/ledgers.js.map +0 -1
- package/dist/ground/manifest.d.ts +0 -10
- package/dist/ground/manifest.js +0 -88
- package/dist/ground/manifest.js.map +0 -1
- package/dist/ground/paths.d.ts +0 -20
- package/dist/ground/paths.js +0 -61
- package/dist/ground/paths.js.map +0 -1
- package/dist/ground/quality-grades.d.ts +0 -11
- package/dist/ground/quality-grades.js +0 -98
- package/dist/ground/quality-grades.js.map +0 -1
- package/dist/ground/schemas.d.ts +0 -306
- package/dist/ground/schemas.js +0 -188
- package/dist/ground/schemas.js.map +0 -1
- package/dist/ground/walk.d.ts +0 -7
- package/dist/ground/walk.js +0 -53
- package/dist/ground/walk.js.map +0 -1
- package/dist/init/detect.d.ts +0 -25
- package/dist/init/detect.js +0 -336
- package/dist/init/detect.js.map +0 -1
- package/dist/init/index.d.ts +0 -14
- package/dist/init/index.js +0 -9
- package/dist/init/index.js.map +0 -1
- package/dist/init/init.d.ts +0 -68
- package/dist/init/init.js +0 -673
- package/dist/init/init.js.map +0 -1
- package/dist/init/mapper.d.ts +0 -160
- package/dist/init/mapper.js +0 -248
- package/dist/init/mapper.js.map +0 -1
- package/dist/init/prompts.d.ts +0 -70
- package/dist/init/prompts.js +0 -80
- package/dist/init/prompts.js.map +0 -1
- package/dist/init/secrets.d.ts +0 -18
- package/dist/init/secrets.js +0 -76
- package/dist/init/secrets.js.map +0 -1
- package/dist/init/seed.d.ts +0 -21
- package/dist/init/seed.js +0 -75
- package/dist/init/seed.js.map +0 -1
- package/dist/init/setup-runners.d.ts +0 -17
- package/dist/init/setup-runners.js +0 -70
- package/dist/init/setup-runners.js.map +0 -1
- package/dist/init/types.d.ts +0 -59
- package/dist/init/types.js +0 -10
- package/dist/init/types.js.map +0 -1
- package/dist/init/walker.d.ts +0 -53
- package/dist/init/walker.js +0 -460
- package/dist/init/walker.js.map +0 -1
- package/dist/init/workflow-block.d.ts +0 -34
- package/dist/init/workflow-block.js +0 -110
- package/dist/init/workflow-block.js.map +0 -1
- package/dist/logger.d.ts +0 -3
- package/dist/logger.js +0 -23
- package/dist/logger.js.map +0 -1
- package/dist/mcp/context.d.ts +0 -16
- package/dist/mcp/context.js +0 -8
- package/dist/mcp/context.js.map +0 -1
- package/dist/mcp/errors.d.ts +0 -17
- package/dist/mcp/errors.js +0 -23
- package/dist/mcp/errors.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -10
- package/dist/mcp/index.js +0 -7
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/path-allowlist.d.ts +0 -25
- package/dist/mcp/path-allowlist.js +0 -66
- package/dist/mcp/path-allowlist.js.map +0 -1
- package/dist/mcp/result.d.ts +0 -8
- package/dist/mcp/result.js +0 -18
- package/dist/mcp/result.js.map +0 -1
- package/dist/mcp/schemas.d.ts +0 -153
- package/dist/mcp/schemas.js +0 -135
- package/dist/mcp/schemas.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -11
- package/dist/mcp/server.js +0 -58
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/telemetry.d.ts +0 -15
- package/dist/mcp/telemetry.js +0 -13
- package/dist/mcp/telemetry.js.map +0 -1
- package/dist/mcp/tools/append.d.ts +0 -8
- package/dist/mcp/tools/append.js +0 -33
- package/dist/mcp/tools/append.js.map +0 -1
- package/dist/mcp/tools/archive.d.ts +0 -8
- package/dist/mcp/tools/archive.js +0 -49
- package/dist/mcp/tools/archive.js.map +0 -1
- package/dist/mcp/tools/ask-operator.d.ts +0 -34
- package/dist/mcp/tools/ask-operator.js +0 -93
- package/dist/mcp/tools/ask-operator.js.map +0 -1
- package/dist/mcp/tools/canonical-for-topic.d.ts +0 -6
- package/dist/mcp/tools/canonical-for-topic.js +0 -40
- package/dist/mcp/tools/canonical-for-topic.js.map +0 -1
- package/dist/mcp/tools/decision-get.d.ts +0 -6
- package/dist/mcp/tools/decision-get.js +0 -49
- package/dist/mcp/tools/decision-get.js.map +0 -1
- package/dist/mcp/tools/decisions-for-symbol.d.ts +0 -7
- package/dist/mcp/tools/decisions-for-symbol.js +0 -42
- package/dist/mcp/tools/decisions-for-symbol.js.map +0 -1
- package/dist/mcp/tools/decisions-in-scope.d.ts +0 -7
- package/dist/mcp/tools/decisions-in-scope.js +0 -47
- package/dist/mcp/tools/decisions-in-scope.js.map +0 -1
- package/dist/mcp/tools/drop-task.d.ts +0 -12
- package/dist/mcp/tools/drop-task.js +0 -47
- package/dist/mcp/tools/drop-task.js.map +0 -1
- package/dist/mcp/tools/get-full.d.ts +0 -7
- package/dist/mcp/tools/get-full.js +0 -46
- package/dist/mcp/tools/get-full.js.map +0 -1
- package/dist/mcp/tools/ground-get.d.ts +0 -7
- package/dist/mcp/tools/ground-get.js +0 -80
- package/dist/mcp/tools/ground-get.js.map +0 -1
- package/dist/mcp/tools/index.d.ts +0 -3
- package/dist/mcp/tools/index.js +0 -44
- package/dist/mcp/tools/index.js.map +0 -1
- package/dist/mcp/tools/invariant-get.d.ts +0 -6
- package/dist/mcp/tools/invariant-get.js +0 -49
- package/dist/mcp/tools/invariant-get.js.map +0 -1
- package/dist/mcp/tools/invariants-in-scope.d.ts +0 -7
- package/dist/mcp/tools/invariants-in-scope.js +0 -65
- package/dist/mcp/tools/invariants-in-scope.js.map +0 -1
- package/dist/mcp/tools/query-history.d.ts +0 -9
- package/dist/mcp/tools/query-history.js +0 -33
- package/dist/mcp/tools/query-history.js.map +0 -1
- package/dist/mcp/tools/record-decision.d.ts +0 -14
- package/dist/mcp/tools/record-decision.js +0 -101
- package/dist/mcp/tools/record-decision.js.map +0 -1
- package/dist/mcp/tools/record-run-event.d.ts +0 -10
- package/dist/mcp/tools/record-run-event.js +0 -28
- package/dist/mcp/tools/record-run-event.js.map +0 -1
- package/dist/mcp/tools/search.d.ts +0 -9
- package/dist/mcp/tools/search.js +0 -165
- package/dist/mcp/tools/search.js.map +0 -1
- package/dist/mcp/tools/supersedes-chain.d.ts +0 -6
- package/dist/mcp/tools/supersedes-chain.js +0 -66
- package/dist/mcp/tools/supersedes-chain.js.map +0 -1
- package/dist/mcp/tools/timeline.d.ts +0 -9
- package/dist/mcp/tools/timeline.js +0 -65
- package/dist/mcp/tools/timeline.js.map +0 -1
- package/dist/mcp/tools/types.d.ts +0 -9
- package/dist/mcp/tools/types.js +0 -2
- package/dist/mcp/tools/types.js.map +0 -1
- package/dist/mirror/clone.d.ts +0 -6
- package/dist/mirror/clone.js +0 -48
- package/dist/mirror/clone.js.map +0 -1
- package/dist/mirror/dirty-overlap.d.ts +0 -13
- package/dist/mirror/dirty-overlap.js +0 -77
- package/dist/mirror/dirty-overlap.js.map +0 -1
- package/dist/mirror/index.d.ts +0 -7
- package/dist/mirror/index.js +0 -7
- package/dist/mirror/index.js.map +0 -1
- package/dist/mirror/paths.d.ts +0 -18
- package/dist/mirror/paths.js +0 -45
- package/dist/mirror/paths.js.map +0 -1
- package/dist/mirror/push.d.ts +0 -9
- package/dist/mirror/push.js +0 -27
- package/dist/mirror/push.js.map +0 -1
- package/dist/mirror/state.d.ts +0 -4
- package/dist/mirror/state.js +0 -36
- package/dist/mirror/state.js.map +0 -1
- package/dist/mirror/sync.d.ts +0 -9
- package/dist/mirror/sync.js +0 -33
- package/dist/mirror/sync.js.map +0 -1
- package/dist/mirror/types.d.ts +0 -77
- package/dist/mirror/types.js +0 -2
- package/dist/mirror/types.js.map +0 -1
- package/dist/orchestrator/activity-summarizer.d.ts +0 -33
- package/dist/orchestrator/activity-summarizer.js +0 -120
- package/dist/orchestrator/activity-summarizer.js.map +0 -1
- package/dist/orchestrator/inbox.d.ts +0 -78
- package/dist/orchestrator/inbox.js +0 -115
- package/dist/orchestrator/inbox.js.map +0 -1
- package/dist/orchestrator/index.d.ts +0 -9
- package/dist/orchestrator/index.js +0 -7
- package/dist/orchestrator/index.js.map +0 -1
- package/dist/orchestrator/orchestrator.d.ts +0 -154
- package/dist/orchestrator/orchestrator.js +0 -2437
- package/dist/orchestrator/orchestrator.js.map +0 -1
- package/dist/orchestrator/prompt.d.ts +0 -19
- package/dist/orchestrator/prompt.js +0 -50
- package/dist/orchestrator/prompt.js.map +0 -1
- package/dist/orchestrator/queue.d.ts +0 -21
- package/dist/orchestrator/queue.js +0 -80
- package/dist/orchestrator/queue.js.map +0 -1
- package/dist/orchestrator/run-log.d.ts +0 -53
- package/dist/orchestrator/run-log.js +0 -92
- package/dist/orchestrator/run-log.js.map +0 -1
- package/dist/orchestrator/runner.d.ts +0 -56
- package/dist/orchestrator/runner.js +0 -172
- package/dist/orchestrator/runner.js.map +0 -1
- package/dist/orchestrator/tool-digest.d.ts +0 -35
- package/dist/orchestrator/tool-digest.js +0 -116
- package/dist/orchestrator/tool-digest.js.map +0 -1
- package/dist/orchestrator/types.d.ts +0 -263
- package/dist/orchestrator/types.js +0 -2
- package/dist/orchestrator/types.js.map +0 -1
- package/dist/orchestrator/workspace.d.ts +0 -21
- package/dist/orchestrator/workspace.js +0 -31
- package/dist/orchestrator/workspace.js.map +0 -1
- package/dist/profiles/index.d.ts +0 -3
- package/dist/profiles/index.js +0 -3
- package/dist/profiles/index.js.map +0 -1
- package/dist/profiles/registry.d.ts +0 -5
- package/dist/profiles/registry.js +0 -31
- package/dist/profiles/registry.js.map +0 -1
- package/dist/profiles/types.d.ts +0 -48
- package/dist/profiles/types.js +0 -11
- package/dist/profiles/types.js.map +0 -1
- package/dist/profiles/unknown.d.ts +0 -9
- package/dist/profiles/unknown.js +0 -17
- package/dist/profiles/unknown.js.map +0 -1
- package/dist/reviewer/index.d.ts +0 -6
- package/dist/reviewer/index.js +0 -5
- package/dist/reviewer/index.js.map +0 -1
- package/dist/reviewer/prompt.d.ts +0 -11
- package/dist/reviewer/prompt.js +0 -132
- package/dist/reviewer/prompt.js.map +0 -1
- package/dist/reviewer/remediation.d.ts +0 -15
- package/dist/reviewer/remediation.js +0 -61
- package/dist/reviewer/remediation.js.map +0 -1
- package/dist/reviewer/reviewer.d.ts +0 -9
- package/dist/reviewer/reviewer.js +0 -89
- package/dist/reviewer/reviewer.js.map +0 -1
- package/dist/reviewer/schema.d.ts +0 -45
- package/dist/reviewer/schema.js +0 -43
- package/dist/reviewer/schema.js.map +0 -1
- package/dist/reviewer/types.d.ts +0 -74
- package/dist/reviewer/types.js +0 -14
- package/dist/reviewer/types.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
- package/dist/sensors/catalog.d.ts +0 -41
- package/dist/sensors/catalog.js +0 -123
- package/dist/sensors/catalog.js.map +0 -1
- package/dist/sensors/decisions.d.ts +0 -30
- package/dist/sensors/decisions.js +0 -393
- package/dist/sensors/decisions.js.map +0 -1
- package/dist/sensors/diff.d.ts +0 -27
- package/dist/sensors/diff.js +0 -148
- package/dist/sensors/diff.js.map +0 -1
- package/dist/sensors/index.d.ts +0 -13
- package/dist/sensors/index.js +0 -9
- package/dist/sensors/index.js.map +0 -1
- package/dist/sensors/remediation.d.ts +0 -20
- package/dist/sensors/remediation.js +0 -65
- package/dist/sensors/remediation.js.map +0 -1
- package/dist/sensors/runner.d.ts +0 -44
- package/dist/sensors/runner.js +0 -95
- package/dist/sensors/runner.js.map +0 -1
- package/dist/sensors/structural.d.ts +0 -30
- package/dist/sensors/structural.js +0 -204
- package/dist/sensors/structural.js.map +0 -1
- package/dist/sensors/stub-catalog.d.ts +0 -39
- package/dist/sensors/stub-catalog.js +0 -115
- package/dist/sensors/stub-catalog.js.map +0 -1
- package/dist/sensors/types.d.ts +0 -135
- package/dist/sensors/types.js +0 -14
- package/dist/sensors/types.js.map +0 -1
- package/dist/tier0/classify.d.ts +0 -5
- package/dist/tier0/classify.js +0 -91
- package/dist/tier0/classify.js.map +0 -1
- package/dist/tier0/index.d.ts +0 -3
- package/dist/tier0/index.js +0 -3
- package/dist/tier0/index.js.map +0 -1
- package/dist/tier0/ollama.d.ts +0 -22
- package/dist/tier0/ollama.js +0 -63
- package/dist/tier0/ollama.js.map +0 -1
- package/dist/tier0/types.d.ts +0 -24
- package/dist/tier0/types.js +0 -7
- package/dist/tier0/types.js.map +0 -1
- package/dist/tightener/index.d.ts +0 -4
- package/dist/tightener/index.js +0 -4
- package/dist/tightener/index.js.map +0 -1
- package/dist/tightener/prompt.d.ts +0 -3
- package/dist/tightener/prompt.js +0 -67
- package/dist/tightener/prompt.js.map +0 -1
- package/dist/tightener/schema.d.ts +0 -68
- package/dist/tightener/schema.js +0 -44
- package/dist/tightener/schema.js.map +0 -1
- package/dist/tightener/tighten.d.ts +0 -2
- package/dist/tightener/tighten.js +0 -66
- package/dist/tightener/tighten.js.map +0 -1
- package/dist/tightener/types.d.ts +0 -74
- package/dist/tightener/types.js +0 -6
- package/dist/tightener/types.js.map +0 -1
- package/dist/uat/bundle.d.ts +0 -68
- package/dist/uat/bundle.js +0 -168
- package/dist/uat/bundle.js.map +0 -1
- package/dist/uat/index.d.ts +0 -15
- package/dist/uat/index.js +0 -10
- package/dist/uat/index.js.map +0 -1
- package/dist/uat/persistent.d.ts +0 -64
- package/dist/uat/persistent.js +0 -206
- package/dist/uat/persistent.js.map +0 -1
- package/dist/uat/probes/cli.d.ts +0 -11
- package/dist/uat/probes/cli.js +0 -107
- package/dist/uat/probes/cli.js.map +0 -1
- package/dist/uat/probes/http.d.ts +0 -12
- package/dist/uat/probes/http.js +0 -139
- package/dist/uat/probes/http.js.map +0 -1
- package/dist/uat/probes/index.d.ts +0 -21
- package/dist/uat/probes/index.js +0 -30
- package/dist/uat/probes/index.js.map +0 -1
- package/dist/uat/probes/integration.d.ts +0 -18
- package/dist/uat/probes/integration.js +0 -188
- package/dist/uat/probes/integration.js.map +0 -1
- package/dist/uat/probes/sql/config.d.ts +0 -14
- package/dist/uat/probes/sql/config.js +0 -57
- package/dist/uat/probes/sql/config.js.map +0 -1
- package/dist/uat/probes/sql/index.d.ts +0 -29
- package/dist/uat/probes/sql/index.js +0 -43
- package/dist/uat/probes/sql/index.js.map +0 -1
- package/dist/uat/probes/sql/mysql.d.ts +0 -12
- package/dist/uat/probes/sql/mysql.js +0 -96
- package/dist/uat/probes/sql/mysql.js.map +0 -1
- package/dist/uat/probes/sql/pg.d.ts +0 -20
- package/dist/uat/probes/sql/pg.js +0 -102
- package/dist/uat/probes/sql/pg.js.map +0 -1
- package/dist/uat/probes/sql/sqlite.d.ts +0 -9
- package/dist/uat/probes/sql/sqlite.js +0 -58
- package/dist/uat/probes/sql/sqlite.js.map +0 -1
- package/dist/uat/probes/sql/types.d.ts +0 -46
- package/dist/uat/probes/sql/types.js +0 -10
- package/dist/uat/probes/sql/types.js.map +0 -1
- package/dist/uat/probes/sql.d.ts +0 -9
- package/dist/uat/probes/sql.js +0 -119
- package/dist/uat/probes/sql.js.map +0 -1
- package/dist/uat/probes/ui.d.ts +0 -19
- package/dist/uat/probes/ui.js +0 -244
- package/dist/uat/probes/ui.js.map +0 -1
- package/dist/uat/prompt.d.ts +0 -10
- package/dist/uat/prompt.js +0 -85
- package/dist/uat/prompt.js.map +0 -1
- package/dist/uat/question.d.ts +0 -50
- package/dist/uat/question.js +0 -139
- package/dist/uat/question.js.map +0 -1
- package/dist/uat/rejection.d.ts +0 -58
- package/dist/uat/rejection.js +0 -163
- package/dist/uat/rejection.js.map +0 -1
- package/dist/uat/runner.d.ts +0 -6
- package/dist/uat/runner.js +0 -96
- package/dist/uat/runner.js.map +0 -1
- package/dist/uat/schema.d.ts +0 -322
- package/dist/uat/schema.js +0 -189
- package/dist/uat/schema.js.map +0 -1
- package/dist/uat/types.d.ts +0 -268
- package/dist/uat/types.js +0 -18
- package/dist/uat/types.js.map +0 -1
- package/dist/uat/uat.d.ts +0 -89
- package/dist/uat/uat.js +0 -256
- package/dist/uat/uat.js.map +0 -1
- package/dist/voice/index.d.ts +0 -4
- package/dist/voice/index.js +0 -4
- package/dist/voice/index.js.map +0 -1
- package/dist/voice/model.d.ts +0 -23
- package/dist/voice/model.js +0 -46
- package/dist/voice/model.js.map +0 -1
- package/dist/voice/pipe.d.ts +0 -9
- package/dist/voice/pipe.js +0 -47
- package/dist/voice/pipe.js.map +0 -1
- package/dist/voice/transcribe.d.ts +0 -3
- package/dist/voice/transcribe.js +0 -43
- package/dist/voice/transcribe.js.map +0 -1
- package/dist/voice/types.d.ts +0 -26
- package/dist/voice/types.js +0 -9
- package/dist/voice/types.js.map +0 -1
- package/dist/watch/daemon.d.ts +0 -21
- package/dist/watch/daemon.js +0 -143
- package/dist/watch/daemon.js.map +0 -1
- package/dist/watch/index.d.ts +0 -4
- package/dist/watch/index.js +0 -3
- package/dist/watch/index.js.map +0 -1
- package/dist/watch/regenerate.d.ts +0 -25
- package/dist/watch/regenerate.js +0 -51
- package/dist/watch/regenerate.js.map +0 -1
package/dist/mcp/tools/append.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { appendFileSync, existsSync, mkdirSync } from "node:fs";
|
|
2
|
-
import { dirname } from "node:path";
|
|
3
|
-
import { mcpError } from "../errors.js";
|
|
4
|
-
import { isAppendAllowed, relPosix, safeJoin } from "../path-allowlist.js";
|
|
5
|
-
import { appendInput } from "../schemas.js";
|
|
6
|
-
async function handler(ctx, input) {
|
|
7
|
-
const abs = safeJoin(ctx.repoRoot, input.path);
|
|
8
|
-
if (typeof abs !== "string")
|
|
9
|
-
return abs; // error envelope
|
|
10
|
-
const rel = relPosix(ctx.repoRoot, abs);
|
|
11
|
-
if (!isAppendAllowed(rel)) {
|
|
12
|
-
return mcpError("PATH_NOT_ALLOWED", `Append-write is not allowed for "${rel}". Allowlist limited to runs/active/<id>/{events,commands}.jsonl, staleness/log.jsonl, and inbox/**.`);
|
|
13
|
-
}
|
|
14
|
-
// For runs/active/<id>/* paths, the run id segment must exist as a directory.
|
|
15
|
-
const runMatch = rel.match(/^\.harness\/runs\/active\/([^/]+)\//);
|
|
16
|
-
if (runMatch) {
|
|
17
|
-
const runDir = `${ctx.repoRoot}/.harness/runs/active/${runMatch[1]}`;
|
|
18
|
-
if (!existsSync(runDir)) {
|
|
19
|
-
return mcpError("RUN_NOT_FOUND", `No active run dir at ${runDir}`);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
mkdirSync(dirname(abs), { recursive: true });
|
|
23
|
-
const sep = input.newline_separator !== false ? "\n" : "";
|
|
24
|
-
appendFileSync(abs, input.content + sep, "utf8");
|
|
25
|
-
return { ok: true, path: rel, bytes_written: Buffer.byteLength(input.content + sep, "utf8") };
|
|
26
|
-
}
|
|
27
|
-
export const appendTool = {
|
|
28
|
-
name: "harness_append",
|
|
29
|
-
description: "Append-only write to a path-allowlisted file. No read required. Allowlist: runs/active/<id>/{events,commands}.jsonl, staleness/log.jsonl, inbox/**.",
|
|
30
|
-
inputSchema: appendInput,
|
|
31
|
-
handler,
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=append.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"append.js","sourceRoot":"","sources":["../../../src/mcp/tools/append.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAS5C,KAAK,UAAU,OAAO,CAAC,GAAe,EAAE,KAAY;IAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,CAAC,iBAAiB;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CACb,kBAAkB,EAClB,oCAAoC,GAAG,sGAAsG,CAC9I,CAAC;IACJ,CAAC;IACD,8EAA8E;IAC9E,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAClE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,yBAAyB,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,OAAO,QAAQ,CAAC,eAAe,EAAE,wBAAwB,MAAM,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;AAChG,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,qJAAqJ;IACvJ,WAAW,EAAE,WAAW;IACxB,OAAO;CACR,CAAC"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, renameSync, statSync } from "node:fs";
|
|
2
|
-
import { dirname, join } from "node:path";
|
|
3
|
-
import { recordDriftEvent } from "../../ground/index.js";
|
|
4
|
-
import { mcpError } from "../errors.js";
|
|
5
|
-
import { isArchiveDenied, relPosix, safeJoin } from "../path-allowlist.js";
|
|
6
|
-
import { archiveInput } from "../schemas.js";
|
|
7
|
-
async function handler(ctx, input) {
|
|
8
|
-
const abs = safeJoin(ctx.repoRoot, input.path);
|
|
9
|
-
if (typeof abs !== "string")
|
|
10
|
-
return abs;
|
|
11
|
-
const rel = relPosix(ctx.repoRoot, abs);
|
|
12
|
-
if (isArchiveDenied(rel)) {
|
|
13
|
-
return mcpError("NOT_ALLOWED", `Path "${rel}" is in the archive-deny list (sacred ground: AGENTS.md, .claude/**, decisions/, brand/).`);
|
|
14
|
-
}
|
|
15
|
-
if (rel.startsWith(".archive/")) {
|
|
16
|
-
return { ok: true, idempotent: true, path: rel, note: "Already in .archive/" };
|
|
17
|
-
}
|
|
18
|
-
if (!existsSync(abs)) {
|
|
19
|
-
return mcpError("FILE_NOT_FOUND", `No file at ${rel}`);
|
|
20
|
-
}
|
|
21
|
-
if (!statSync(abs).isFile()) {
|
|
22
|
-
return mcpError("NOT_ALLOWED", `Path is not a file: ${rel}`);
|
|
23
|
-
}
|
|
24
|
-
const today = new Date().toISOString().slice(0, 10);
|
|
25
|
-
const bucket = input.archive_dir ?? today;
|
|
26
|
-
const target = join(ctx.repoRoot, ".archive", bucket, rel);
|
|
27
|
-
mkdirSync(dirname(target), { recursive: true });
|
|
28
|
-
renameSync(abs, target);
|
|
29
|
-
recordDriftEvent(ctx.repoRoot, {
|
|
30
|
-
ts: new Date().toISOString(),
|
|
31
|
-
kind: "orphan_path",
|
|
32
|
-
path: rel,
|
|
33
|
-
detail: `archived: ${input.reason}`,
|
|
34
|
-
severity: "soft",
|
|
35
|
-
});
|
|
36
|
-
return {
|
|
37
|
-
ok: true,
|
|
38
|
-
archived_from: rel,
|
|
39
|
-
archived_to: relPosix(ctx.repoRoot, target),
|
|
40
|
-
reason: input.reason,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
export const archiveTool = {
|
|
44
|
-
name: "harness_archive",
|
|
45
|
-
description: "Move a canonical-zone file to .archive/<archive_dir or today>/<original_path>. Idempotent. Records a staleness/log.jsonl event. Refuses sacred paths (AGENTS.md, .claude/**, decisions/, brand/).",
|
|
46
|
-
inputSchema: archiveInput,
|
|
47
|
-
handler,
|
|
48
|
-
};
|
|
49
|
-
//# sourceMappingURL=archive.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../src/mcp/tools/archive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAS7C,KAAK,UAAU,OAAO,CAAC,GAAe,EAAE,KAAY;IAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,QAAQ,CACb,aAAa,EACb,SAAS,GAAG,2FAA2F,CACxG,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;IACjF,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,QAAQ,CAAC,gBAAgB,EAAE,cAAc,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,aAAa,EAAE,uBAAuB,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3D,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACxB,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE;QAC7B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5B,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,GAAG;QACT,MAAM,EAAE,aAAa,KAAK,CAAC,MAAM,EAAE;QACnC,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IACH,OAAO;QACL,EAAE,EAAE,IAAI;QACR,aAAa,EAAE,GAAG;QAClB,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC3C,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,mMAAmM;IACrM,WAAW,EAAE,YAAY;IACzB,OAAO;CACR,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* harness_ask_operator — agent-initiated operator dialog mid-run.
|
|
3
|
-
*
|
|
4
|
-
* The implementer agent calls this when it hits an ambiguity, needs
|
|
5
|
-
* permission for a non-recoverable action, gets stuck, or wants to
|
|
6
|
-
* verify its interpretation. The flow:
|
|
7
|
-
*
|
|
8
|
-
* 1. Tool writes a question file under
|
|
9
|
-
* `.harness/runs/active/<run_id>/questions/<question_id>.q.json`.
|
|
10
|
-
* 2. The orchestrator's question-watcher (chokidar) picks it up,
|
|
11
|
-
* fires `adapter.requestDialog()` with the active operator
|
|
12
|
-
* pinged (so they see it on mobile push).
|
|
13
|
-
* 3. Operator answers via Discord button (or free-form follow-up
|
|
14
|
-
* if no `options` were provided).
|
|
15
|
-
* 4. The orchestrator writes the answer to
|
|
16
|
-
* `.harness/runs/active/<run_id>/questions/<question_id>.a.json`.
|
|
17
|
-
* 5. This tool polls for the answer file and returns its contents to
|
|
18
|
-
* the agent.
|
|
19
|
-
*
|
|
20
|
-
* The agent run continues with the operator's answer in context. If
|
|
21
|
-
* `timeout_ms` elapses before the operator answers, the tool returns
|
|
22
|
-
* `{ timed_out: true }` and the agent decides what to do (default:
|
|
23
|
-
* abort with a remediation note).
|
|
24
|
-
*/
|
|
25
|
-
import type { ToolDef } from "./types.js";
|
|
26
|
-
interface Input {
|
|
27
|
-
run_id: string;
|
|
28
|
-
question: string;
|
|
29
|
-
options?: string[];
|
|
30
|
-
category?: "ambiguity" | "permission" | "stuck" | "verify";
|
|
31
|
-
timeout_ms?: number;
|
|
32
|
-
}
|
|
33
|
-
export declare const askOperatorTool: ToolDef<Input>;
|
|
34
|
-
export {};
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* harness_ask_operator — agent-initiated operator dialog mid-run.
|
|
3
|
-
*
|
|
4
|
-
* The implementer agent calls this when it hits an ambiguity, needs
|
|
5
|
-
* permission for a non-recoverable action, gets stuck, or wants to
|
|
6
|
-
* verify its interpretation. The flow:
|
|
7
|
-
*
|
|
8
|
-
* 1. Tool writes a question file under
|
|
9
|
-
* `.harness/runs/active/<run_id>/questions/<question_id>.q.json`.
|
|
10
|
-
* 2. The orchestrator's question-watcher (chokidar) picks it up,
|
|
11
|
-
* fires `adapter.requestDialog()` with the active operator
|
|
12
|
-
* pinged (so they see it on mobile push).
|
|
13
|
-
* 3. Operator answers via Discord button (or free-form follow-up
|
|
14
|
-
* if no `options` were provided).
|
|
15
|
-
* 4. The orchestrator writes the answer to
|
|
16
|
-
* `.harness/runs/active/<run_id>/questions/<question_id>.a.json`.
|
|
17
|
-
* 5. This tool polls for the answer file and returns its contents to
|
|
18
|
-
* the agent.
|
|
19
|
-
*
|
|
20
|
-
* The agent run continues with the operator's answer in context. If
|
|
21
|
-
* `timeout_ms` elapses before the operator answers, the tool returns
|
|
22
|
-
* `{ timed_out: true }` and the agent decides what to do (default:
|
|
23
|
-
* abort with a remediation note).
|
|
24
|
-
*/
|
|
25
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
26
|
-
import { randomBytes } from "node:crypto";
|
|
27
|
-
import { join } from "node:path";
|
|
28
|
-
import { mcpError } from "../errors.js";
|
|
29
|
-
import { askOperatorInput } from "../schemas.js";
|
|
30
|
-
const POLL_INTERVAL_MS = 500;
|
|
31
|
-
const DEFAULT_TIMEOUT_MS = 10 * 60_000;
|
|
32
|
-
async function handler(ctx, input) {
|
|
33
|
-
const runDir = join(ctx.repoRoot, ".harness", "runs", "active", input.run_id);
|
|
34
|
-
if (!existsSync(runDir)) {
|
|
35
|
-
return mcpError("RUN_NOT_FOUND", `No active run dir at ${runDir}. ask_operator must be called from within an in-flight run.`);
|
|
36
|
-
}
|
|
37
|
-
const questionsDir = join(runDir, "questions");
|
|
38
|
-
mkdirSync(questionsDir, { recursive: true });
|
|
39
|
-
const questionId = `Q-${Date.now().toString(36)}-${randomBytes(2).toString("hex")}`;
|
|
40
|
-
const qPath = join(questionsDir, `${questionId}.q.json`);
|
|
41
|
-
const aPath = join(questionsDir, `${questionId}.a.json`);
|
|
42
|
-
const qPayload = {
|
|
43
|
-
id: questionId,
|
|
44
|
-
run_id: input.run_id,
|
|
45
|
-
asked_at: new Date().toISOString(),
|
|
46
|
-
question: input.question,
|
|
47
|
-
...(input.options !== undefined && input.options.length > 0
|
|
48
|
-
? { options: input.options }
|
|
49
|
-
: {}),
|
|
50
|
-
...(input.category !== undefined ? { category: input.category } : {}),
|
|
51
|
-
timeout_ms: input.timeout_ms ?? DEFAULT_TIMEOUT_MS,
|
|
52
|
-
};
|
|
53
|
-
writeFileSync(qPath, JSON.stringify(qPayload, null, 2), "utf8");
|
|
54
|
-
// Poll for the answer file. The orchestrator's question-watcher
|
|
55
|
-
// observes the question, fires the dialog, writes the answer.
|
|
56
|
-
const deadline = Date.now() + (input.timeout_ms ?? DEFAULT_TIMEOUT_MS);
|
|
57
|
-
while (Date.now() < deadline) {
|
|
58
|
-
if (existsSync(aPath)) {
|
|
59
|
-
try {
|
|
60
|
-
const raw = readFileSync(aPath, "utf8");
|
|
61
|
-
const answer = JSON.parse(raw);
|
|
62
|
-
return {
|
|
63
|
-
ok: true,
|
|
64
|
-
question_id: questionId,
|
|
65
|
-
answer: answer.answer,
|
|
66
|
-
...(answer.choice_id !== undefined ? { choice_id: answer.choice_id } : {}),
|
|
67
|
-
...(answer.free_text === true ? { free_text: true } : {}),
|
|
68
|
-
...(answer.timed_out === true ? { timed_out: true } : {}),
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
return mcpError("VALIDATION_FAILED", `Failed to parse answer file ${aPath}: ${String(err)}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
await sleep(POLL_INTERVAL_MS);
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
ok: true,
|
|
79
|
-
question_id: questionId,
|
|
80
|
-
answer: "",
|
|
81
|
-
timed_out: true,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
function sleep(ms) {
|
|
85
|
-
return new Promise((r) => setTimeout(r, ms));
|
|
86
|
-
}
|
|
87
|
-
export const askOperatorTool = {
|
|
88
|
-
name: "harness_ask_operator",
|
|
89
|
-
description: "Stop and ask the operator a question. Use when the spec is genuinely ambiguous, you need permission for a non-recoverable action, you're stuck, or you want the operator to verify your interpretation. Provide 2-4 short option strings if the answer fits a closed set; omit `options` to invite a free-form reply. The tool blocks until the operator answers or `timeout_ms` (default 10 minutes) elapses.",
|
|
90
|
-
inputSchema: askOperatorInput,
|
|
91
|
-
handler,
|
|
92
|
-
};
|
|
93
|
-
//# sourceMappingURL=ask-operator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ask-operator.js","sourceRoot":"","sources":["../../../src/mcp/tools/ask-operator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { parse as parseYaml } from "yaml";
|
|
5
|
-
import { groundDir, parseFrontmatter } from "../../ground/index.js";
|
|
6
|
-
import { mcpError } from "../errors.js";
|
|
7
|
-
import { canonicalForTopicInput } from "../schemas.js";
|
|
8
|
-
async function handler(ctx, input) {
|
|
9
|
-
const file = join(groundDir(ctx.repoRoot), "canonical-map", "topics.yaml");
|
|
10
|
-
if (!existsSync(file)) {
|
|
11
|
-
return mcpError("TOPIC_NOT_REGISTERED", `No canonical-map registered (topics.yaml not found at ${file})`);
|
|
12
|
-
}
|
|
13
|
-
const parsedFile = parseYaml(readFileSync(file, "utf8"));
|
|
14
|
-
const list = parsedFile?.topics ?? [];
|
|
15
|
-
const entry = list.find((t) => t.topic === input.topic);
|
|
16
|
-
if (!entry) {
|
|
17
|
-
return mcpError("TOPIC_NOT_REGISTERED", `Topic "${input.topic}" is not registered. Curated registry only — do NOT invent topics.`, { available: list.map((t) => t.topic) });
|
|
18
|
-
}
|
|
19
|
-
const docPath = join(ctx.repoRoot, entry.canonical_path.split("#")[0] ?? entry.canonical_path);
|
|
20
|
-
if (!existsSync(docPath) || !statSync(docPath).isFile()) {
|
|
21
|
-
return mcpError("FILE_NOT_FOUND", `Topic registered, but canonical_path does not exist: ${entry.canonical_path}`);
|
|
22
|
-
}
|
|
23
|
-
const buf = readFileSync(docPath);
|
|
24
|
-
const sha256 = createHash("sha256").update(buf).digest("hex");
|
|
25
|
-
const fm = parseFrontmatter(buf.toString("utf8")).frontmatter;
|
|
26
|
-
return {
|
|
27
|
-
topic: entry.topic,
|
|
28
|
-
canonical_path: entry.canonical_path,
|
|
29
|
-
sha256,
|
|
30
|
-
verified_at: fm?.["verified-at"] ?? null,
|
|
31
|
-
audience: entry.audience ?? fm?.audience ?? null,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
export const canonicalForTopicTool = {
|
|
35
|
-
name: "harness_canonical_for_topic",
|
|
36
|
-
description: "Returns the authoritative canonical_path + sha256 + verified-at for a registered topic. Topics are curated; unknown topics return TOPIC_NOT_REGISTERED.",
|
|
37
|
-
inputSchema: canonicalForTopicInput,
|
|
38
|
-
handler,
|
|
39
|
-
};
|
|
40
|
-
//# sourceMappingURL=canonical-for-topic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-for-topic.js","sourceRoot":"","sources":["../../../src/mcp/tools/canonical-for-topic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAkBvD,KAAK,UAAU,OAAO,CAAC,GAAe,EAAE,KAAY;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;IAC3E,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,QAAQ,CACb,sBAAsB,EACtB,yDAAyD,IAAI,GAAG,CACjE,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAsB,CAAC;IAC9E,MAAM,IAAI,GAAiB,UAAU,EAAE,MAAM,IAAI,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,QAAQ,CACb,sBAAsB,EACtB,UAAU,KAAK,CAAC,KAAK,oEAAoE,EACzF,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CACxC,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/F,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACxD,OAAO,QAAQ,CACb,gBAAgB,EAChB,wDAAwD,KAAK,CAAC,cAAc,EAAE,CAC/E,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;IAC9D,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,MAAM;QACN,WAAW,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,IAAI,IAAI;KACjD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAmB;IACnD,IAAI,EAAE,6BAA6B;IACnC,WAAW,EACT,yJAAyJ;IAC3J,WAAW,EAAE,sBAAsB;IACnC,OAAO;CACR,CAAC"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { decisionsDir, parseFrontmatter } from "../../ground/index.js";
|
|
4
|
-
import { DecisionFrontmatter } from "../../ground/index.js";
|
|
5
|
-
import { mcpError } from "../errors.js";
|
|
6
|
-
import { decisionGetInput } from "../schemas.js";
|
|
7
|
-
async function handler(ctx, input) {
|
|
8
|
-
const dir = decisionsDir(ctx.repoRoot);
|
|
9
|
-
if (!existsSync(dir)) {
|
|
10
|
-
return mcpError("DECISION_NOT_FOUND", `No decisions directory at ${dir}`);
|
|
11
|
-
}
|
|
12
|
-
const files = readdirSync(dir, { withFileTypes: true, encoding: "utf8" });
|
|
13
|
-
for (const f of files) {
|
|
14
|
-
if (!f.isFile() || !f.name.endsWith(".md"))
|
|
15
|
-
continue;
|
|
16
|
-
const abs = join(dir, f.name);
|
|
17
|
-
const parsed = parseFrontmatter(readFileSync(abs, "utf8"));
|
|
18
|
-
const fm = DecisionFrontmatter.safeParse(parsed.frontmatter);
|
|
19
|
-
if (!fm.success)
|
|
20
|
-
continue;
|
|
21
|
-
if (fm.data.id !== input.id)
|
|
22
|
-
continue;
|
|
23
|
-
return {
|
|
24
|
-
id: fm.data.id,
|
|
25
|
-
title: fm.data.title,
|
|
26
|
-
status: fm.data.status,
|
|
27
|
-
...(fm.data.scope_globs !== undefined ? { scope_globs: fm.data.scope_globs } : {}),
|
|
28
|
-
...(fm.data.supersedes !== undefined ? { supersedes: fm.data.supersedes } : {}),
|
|
29
|
-
...(fm.data.superseded_by !== undefined ? { superseded_by: fm.data.superseded_by } : {}),
|
|
30
|
-
...(fm.data.decided_at !== undefined ? { decided_at: fm.data.decided_at } : {}),
|
|
31
|
-
...(fm.data.assertions !== undefined ? { assertions: fm.data.assertions } : {}),
|
|
32
|
-
...(fm.data.human_review_hint !== undefined
|
|
33
|
-
? { human_review_hint: fm.data.human_review_hint }
|
|
34
|
-
: {}),
|
|
35
|
-
...(fm.data.related_invariants !== undefined
|
|
36
|
-
? { related_invariants: fm.data.related_invariants }
|
|
37
|
-
: {}),
|
|
38
|
-
body_markdown: parsed.body,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
return mcpError("DECISION_NOT_FOUND", `No decision with id ${input.id}`);
|
|
42
|
-
}
|
|
43
|
-
export const decisionGetTool = {
|
|
44
|
-
name: "harness_decision_get",
|
|
45
|
-
description: "Returns full ADR + assertions block for a decision id.",
|
|
46
|
-
inputSchema: decisionGetInput,
|
|
47
|
-
handler,
|
|
48
|
-
};
|
|
49
|
-
//# sourceMappingURL=decision-get.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decision-get.js","sourceRoot":"","sources":["../../../src/mcp/tools/decision-get.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { decisionsDir, matchAnyGlob, parseFrontmatter } from "../../ground/index.js";
|
|
4
|
-
import { DecisionFrontmatter } from "../../ground/index.js";
|
|
5
|
-
import { decisionsForSymbolInput } from "../schemas.js";
|
|
6
|
-
async function handler(ctx, input) {
|
|
7
|
-
const dir = decisionsDir(ctx.repoRoot);
|
|
8
|
-
if (!existsSync(dir))
|
|
9
|
-
return [];
|
|
10
|
-
const out = [];
|
|
11
|
-
for (const entry of readdirSync(dir, { withFileTypes: true, encoding: "utf8" })) {
|
|
12
|
-
if (!entry.isFile() || !entry.name.endsWith(".md"))
|
|
13
|
-
continue;
|
|
14
|
-
const abs = join(dir, entry.name);
|
|
15
|
-
const raw = readFileSync(abs, "utf8");
|
|
16
|
-
const parsed = parseFrontmatter(raw);
|
|
17
|
-
const fm = DecisionFrontmatter.safeParse(parsed.frontmatter);
|
|
18
|
-
if (!fm.success)
|
|
19
|
-
continue;
|
|
20
|
-
if (fm.data.status !== "accepted")
|
|
21
|
-
continue;
|
|
22
|
-
const scope = fm.data.scope_globs ?? [];
|
|
23
|
-
if (!scope.some((g) => matchAnyGlob(input.file, [g])))
|
|
24
|
-
continue;
|
|
25
|
-
if (!parsed.body.includes(input.symbol))
|
|
26
|
-
continue;
|
|
27
|
-
out.push({
|
|
28
|
-
id: fm.data.id,
|
|
29
|
-
title: fm.data.title,
|
|
30
|
-
status: fm.data.status,
|
|
31
|
-
...(fm.data.scope_globs !== undefined ? { scope_globs: fm.data.scope_globs } : {}),
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
return out;
|
|
35
|
-
}
|
|
36
|
-
export const decisionsForSymbolTool = {
|
|
37
|
-
name: "harness_decisions_for_symbol",
|
|
38
|
-
description: "Decisions whose scope_globs cover `file` AND whose body explicitly mentions `symbol`. Smaller result than path-glob alone.",
|
|
39
|
-
inputSchema: decisionsForSymbolInput,
|
|
40
|
-
handler,
|
|
41
|
-
};
|
|
42
|
-
//# sourceMappingURL=decisions-for-symbol.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decisions-for-symbol.js","sourceRoot":"","sources":["../../../src/mcp/tools/decisions-for-symbol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAQxD,KAAK,UAAU,OAAO,CAAC,GAAe,EAAE,KAAY;IAClD,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,GAAG,GAA4E,EAAE,CAAC;IACxF,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,EAAE,CAAC,OAAO;YAAE,SAAS;QAC1B,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU;YAAE,SAAS;QAC5C,MAAM,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;QAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,SAAS;QAClD,GAAG,CAAC,IAAI,CAAC;YACP,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;YACd,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK;YACpB,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM;YACtB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAmB;IACpD,IAAI,EAAE,8BAA8B;IACpC,WAAW,EACT,4HAA4H;IAC9H,WAAW,EAAE,uBAAuB;IACpC,OAAO;CACR,CAAC"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { decisionsDir, matchAnyGlob, parseFrontmatter } from "../../ground/index.js";
|
|
4
|
-
import { DecisionFrontmatter } from "../../ground/index.js";
|
|
5
|
-
import { decisionsInScopeInput } from "../schemas.js";
|
|
6
|
-
async function handler(ctx, input) {
|
|
7
|
-
const wantStatus = new Set(input.status ?? ["accepted"]);
|
|
8
|
-
const dir = decisionsDir(ctx.repoRoot);
|
|
9
|
-
if (!existsSync(dir))
|
|
10
|
-
return [];
|
|
11
|
-
const out = [];
|
|
12
|
-
for (const entry of readdirSync(dir, { withFileTypes: true, encoding: "utf8" })) {
|
|
13
|
-
if (!entry.isFile() || !entry.name.endsWith(".md"))
|
|
14
|
-
continue;
|
|
15
|
-
const abs = join(dir, entry.name);
|
|
16
|
-
const parsed = parseFrontmatter(readFileSync(abs, "utf8"));
|
|
17
|
-
const fm = DecisionFrontmatter.safeParse(parsed.frontmatter);
|
|
18
|
-
if (!fm.success)
|
|
19
|
-
continue;
|
|
20
|
-
if (!wantStatus.has(fm.data.status))
|
|
21
|
-
continue;
|
|
22
|
-
const scope = fm.data.scope_globs ?? [];
|
|
23
|
-
const overlap = scope.length === 0
|
|
24
|
-
? false
|
|
25
|
-
: scope.some((scopeGlob) => input.path_globs.some((req) => matchAnyGlob(scopeGlob, [req]) || matchAnyGlob(req, [scopeGlob])));
|
|
26
|
-
if (!overlap)
|
|
27
|
-
continue;
|
|
28
|
-
out.push({
|
|
29
|
-
id: fm.data.id,
|
|
30
|
-
title: fm.data.title,
|
|
31
|
-
status: fm.data.status,
|
|
32
|
-
...(fm.data.scope_globs !== undefined ? { scope_globs: fm.data.scope_globs } : {}),
|
|
33
|
-
...(fm.data.supersedes !== undefined ? { supersedes: fm.data.supersedes } : {}),
|
|
34
|
-
...(fm.data.superseded_by !== undefined ? { superseded_by: fm.data.superseded_by } : {}),
|
|
35
|
-
...(fm.data.decided_at !== undefined ? { decided_at: fm.data.decided_at } : {}),
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
out.sort((a, b) => (b.decided_at ?? "").localeCompare(a.decided_at ?? ""));
|
|
39
|
-
return out;
|
|
40
|
-
}
|
|
41
|
-
export const decisionsInScopeTool = {
|
|
42
|
-
name: "harness_decisions_in_scope",
|
|
43
|
-
description: "List decision summaries whose scope_globs overlap any of the given path_globs.",
|
|
44
|
-
inputSchema: decisionsInScopeInput,
|
|
45
|
-
handler,
|
|
46
|
-
};
|
|
47
|
-
//# sourceMappingURL=decisions-in-scope.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"decisions-in-scope.js","sourceRoot":"","sources":["../../../src/mcp/tools/decisions-in-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { ToolDef } from "./types.js";
|
|
2
|
-
interface Input {
|
|
3
|
-
title: string;
|
|
4
|
-
body: string;
|
|
5
|
-
intent: "run_pilot" | "review_module" | "fix_issue" | "eval" | "staleness_scan" | "unknown";
|
|
6
|
-
target_path_globs?: string[];
|
|
7
|
-
priority?: number;
|
|
8
|
-
parent_task_id?: string;
|
|
9
|
-
source?: string;
|
|
10
|
-
}
|
|
11
|
-
export declare const dropTaskTool: ToolDef<Input>;
|
|
12
|
-
export {};
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { stringify as stringifyYaml } from "yaml";
|
|
4
|
-
import { dropTaskInput } from "../schemas.js";
|
|
5
|
-
async function handler(ctx, input) {
|
|
6
|
-
const today = new Date().toISOString().slice(0, 10);
|
|
7
|
-
const slug = input.title
|
|
8
|
-
.toLowerCase()
|
|
9
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
10
|
-
.replace(/^-+|-+$/g, "")
|
|
11
|
-
.slice(0, 60);
|
|
12
|
-
// ms-suffix gives uniqueness when the same agent files multiple tasks per second.
|
|
13
|
-
const id = `TSK-${today}-${slug || "task"}-${Date.now() % 100000}`;
|
|
14
|
-
const dir = join(ctx.repoRoot, ".harness", "tasks", "active", id);
|
|
15
|
-
mkdirSync(dir, { recursive: true });
|
|
16
|
-
const frontmatter = {
|
|
17
|
-
id,
|
|
18
|
-
type: "spec",
|
|
19
|
-
status: "tightening",
|
|
20
|
-
audience: "dual",
|
|
21
|
-
generated: new Date().toISOString(),
|
|
22
|
-
source: input.source ?? "agent_spawned",
|
|
23
|
-
intent: input.intent,
|
|
24
|
-
priority: input.priority ?? 5,
|
|
25
|
-
...(input.parent_task_id !== undefined ? { parent_task_id: input.parent_task_id } : {}),
|
|
26
|
-
...(input.target_path_globs !== undefined ? { target_path_globs: input.target_path_globs } : {}),
|
|
27
|
-
trust_class: "code",
|
|
28
|
-
};
|
|
29
|
-
const spec = `---\n${stringifyYaml(frontmatter)}---\n\n# ${input.title}\n\n${input.body}\n`;
|
|
30
|
-
writeFileSync(join(dir, "spec.md"), spec, "utf8");
|
|
31
|
-
const status = {
|
|
32
|
-
phase: "tightening",
|
|
33
|
-
attempts: 0,
|
|
34
|
-
last_event_at: new Date().toISOString(),
|
|
35
|
-
queued_position: null,
|
|
36
|
-
related_run_ids: [],
|
|
37
|
-
};
|
|
38
|
-
writeFileSync(join(dir, "status.yaml"), stringifyYaml(status), "utf8");
|
|
39
|
-
return { ok: true, id, path: `.harness/tasks/active/${id}/spec.md` };
|
|
40
|
-
}
|
|
41
|
-
export const dropTaskTool = {
|
|
42
|
-
name: "harness_drop_task",
|
|
43
|
-
description: "Create a new active task — writes spec.md + status.yaml under .harness/tasks/active/<id>/. Used by spec-planner subagent. Operator-issued tasks come via the frontend adapter, not this tool.",
|
|
44
|
-
inputSchema: dropTaskInput,
|
|
45
|
-
handler,
|
|
46
|
-
};
|
|
47
|
-
//# sourceMappingURL=drop-task.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drop-task.js","sourceRoot":"","sources":["../../../src/mcp/tools/drop-task.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;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAa9C,KAAK,UAAU,OAAO,CAAC,GAAe,EAAE,KAAY;IAClD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;SACrB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,kFAAkF;IAClF,MAAM,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IACnE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAClE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpC,MAAM,WAAW,GAAG;QAClB,EAAE;QACF,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,eAAe;QACvC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,WAAW,EAAE,MAAM;KACpB,CAAC;IAEF,MAAM,IAAI,GAAG,QAAQ,aAAa,CAAC,WAAW,CAAC,YAAY,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC;IAC5F,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,CAAC;QACX,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACvC,eAAe,EAAE,IAAI;QACrB,eAAe,EAAE,EAAE;KACpB,CAAC;IACF,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IAEvE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,UAAU,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EACT,+LAA+L;IACjM,WAAW,EAAE,aAAa;IAC1B,OAAO;CACR,CAAC"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { decisionsDir, invariantsDir } from "../../ground/index.js";
|
|
4
|
-
import { mcpError } from "../errors.js";
|
|
5
|
-
import { getFullInput } from "../schemas.js";
|
|
6
|
-
async function handler(ctx, input) {
|
|
7
|
-
switch (input.kind) {
|
|
8
|
-
case "decision": {
|
|
9
|
-
const path = join(decisionsDir(ctx.repoRoot), `${input.id}.md`);
|
|
10
|
-
if (!existsSync(path)) {
|
|
11
|
-
return mcpError("DECISION_NOT_FOUND", `No decision file at ${path}`);
|
|
12
|
-
}
|
|
13
|
-
return { id: input.id, kind: input.kind, content: readFileSync(path, "utf8") };
|
|
14
|
-
}
|
|
15
|
-
case "invariant": {
|
|
16
|
-
const path = join(invariantsDir(ctx.repoRoot), `${input.id}.md`);
|
|
17
|
-
if (!existsSync(path)) {
|
|
18
|
-
return mcpError("INVARIANT_NOT_FOUND", `No invariant file at ${path}`);
|
|
19
|
-
}
|
|
20
|
-
return { id: input.id, kind: input.kind, content: readFileSync(path, "utf8") };
|
|
21
|
-
}
|
|
22
|
-
case "task": {
|
|
23
|
-
const path = join(ctx.repoRoot, ".harness", "tasks", "active", input.id, "spec.tightened.md");
|
|
24
|
-
const fallback = join(ctx.repoRoot, ".harness", "tasks", "active", input.id, "spec.md");
|
|
25
|
-
const target = existsSync(path) ? path : existsSync(fallback) ? fallback : null;
|
|
26
|
-
if (!target) {
|
|
27
|
-
return mcpError("TASK_NOT_FOUND", `No active task ${input.id}`);
|
|
28
|
-
}
|
|
29
|
-
return { id: input.id, kind: input.kind, content: readFileSync(target, "utf8") };
|
|
30
|
-
}
|
|
31
|
-
case "run": {
|
|
32
|
-
const meta = join(ctx.repoRoot, ".harness", "runs", "active", input.id, "meta.json");
|
|
33
|
-
if (!existsSync(meta)) {
|
|
34
|
-
return mcpError("RUN_NOT_FOUND", `No active run ${input.id}`);
|
|
35
|
-
}
|
|
36
|
-
return { id: input.id, kind: input.kind, content: readFileSync(meta, "utf8") };
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export const getFullTool = {
|
|
41
|
-
name: "harness_get_full",
|
|
42
|
-
description: "Fetch full content of an artifact by id + kind (decision | invariant | task | run). Used after harness_search/timeline narrows candidates.",
|
|
43
|
-
inputSchema: getFullInput,
|
|
44
|
-
handler,
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=get-full.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-full.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-full.ts"],"names":[],"mappings":"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"}
|