@isaacriehm/cairn 0.1.0 → 0.1.3
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
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
|
-
import { appendFile, mkdir } from "node:fs/promises";
|
|
3
|
-
import { dirname } from "node:path";
|
|
4
|
-
import { logger } from "../logger.js";
|
|
5
|
-
import { ClaudeError, classifyClaudeError } from "../claude/error.js";
|
|
6
|
-
const log = logger("orchestrator.runner");
|
|
7
|
-
const TIER_MODEL = {
|
|
8
|
-
haiku: "haiku",
|
|
9
|
-
sonnet: "sonnet",
|
|
10
|
-
opus: "opus",
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
* Run the implementer agent via `claude --print --output-format stream-json`
|
|
14
|
-
* and stream every event line to `eventsLogPath` (NDJSON). The final event
|
|
15
|
-
* (type: "result") is returned to the caller.
|
|
16
|
-
*
|
|
17
|
-
* The agent operates in `cwd` (the mirror) and has access to the standard
|
|
18
|
-
* Claude Code tool surface. It MUST NOT commit or push — those are later
|
|
19
|
-
* phases. The `workflow.md` template's "Constraints" section enforces this
|
|
20
|
-
* via instruction; future phases add hook-level enforcement.
|
|
21
|
-
*/
|
|
22
|
-
export async function runImplementer(opts) {
|
|
23
|
-
const model = TIER_MODEL[opts.tier];
|
|
24
|
-
const args = [
|
|
25
|
-
"--print",
|
|
26
|
-
"--output-format",
|
|
27
|
-
"stream-json",
|
|
28
|
-
"--include-partial-messages",
|
|
29
|
-
"--no-session-persistence",
|
|
30
|
-
"--verbose",
|
|
31
|
-
"--permission-mode",
|
|
32
|
-
opts.permissionMode ?? "bypassPermissions",
|
|
33
|
-
"--model",
|
|
34
|
-
model,
|
|
35
|
-
];
|
|
36
|
-
if (opts.allowedTools && opts.allowedTools.length > 0) {
|
|
37
|
-
args.push("--allowedTools", opts.allowedTools.join(" "));
|
|
38
|
-
}
|
|
39
|
-
if (opts.addDirs && opts.addDirs.length > 0) {
|
|
40
|
-
args.push("--add-dir", ...opts.addDirs);
|
|
41
|
-
}
|
|
42
|
-
await mkdir(dirname(opts.eventsLogPath), { recursive: true });
|
|
43
|
-
const startedAt = Date.now();
|
|
44
|
-
const ctrl = new AbortController();
|
|
45
|
-
const timer = setTimeout(() => ctrl.abort("timeout"), opts.timeoutMs ?? 600_000);
|
|
46
|
-
const signal = opts.abortSignal !== undefined
|
|
47
|
-
? AbortSignal.any([ctrl.signal, opts.abortSignal])
|
|
48
|
-
: ctrl.signal;
|
|
49
|
-
return new Promise((resolve, reject) => {
|
|
50
|
-
const child = spawn("claude", args, {
|
|
51
|
-
cwd: opts.cwd,
|
|
52
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
53
|
-
signal,
|
|
54
|
-
});
|
|
55
|
-
// SIGKILL escalation when the abort fires (whether from /halt or timeout).
|
|
56
|
-
// `spawn`'s `signal` option sends SIGTERM via Node's internals; if the
|
|
57
|
-
// child ignores it (e.g. blocked on stdin), we force-terminate after the
|
|
58
|
-
// grace period so /halt actually kills.
|
|
59
|
-
let killEscalation;
|
|
60
|
-
const onAbort = () => {
|
|
61
|
-
if (killEscalation !== undefined)
|
|
62
|
-
return;
|
|
63
|
-
killEscalation = setTimeout(() => {
|
|
64
|
-
if (child.exitCode === null && child.signalCode === null) {
|
|
65
|
-
try {
|
|
66
|
-
child.kill("SIGKILL");
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
// best-effort
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}, opts.killGraceMs ?? 30_000);
|
|
73
|
-
};
|
|
74
|
-
if (signal.aborted)
|
|
75
|
-
onAbort();
|
|
76
|
-
else
|
|
77
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
78
|
-
let stderr = "";
|
|
79
|
-
let buffer = "";
|
|
80
|
-
let eventCount = 0;
|
|
81
|
-
let resultEvent;
|
|
82
|
-
const writeQueue = Promise.resolve();
|
|
83
|
-
let writeChain = writeQueue;
|
|
84
|
-
const handleLine = (line) => {
|
|
85
|
-
const trimmed = line.trim();
|
|
86
|
-
if (trimmed.length === 0)
|
|
87
|
-
return;
|
|
88
|
-
let parsed;
|
|
89
|
-
try {
|
|
90
|
-
parsed = JSON.parse(trimmed);
|
|
91
|
-
}
|
|
92
|
-
catch (err) {
|
|
93
|
-
log.warn({ err: String(err), preview: trimmed.slice(0, 120) }, "stream line parse failed");
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
eventCount += 1;
|
|
97
|
-
if (parsed["type"] === "result")
|
|
98
|
-
resultEvent = parsed;
|
|
99
|
-
writeChain = writeChain
|
|
100
|
-
.then(() => appendFile(opts.eventsLogPath, `${trimmed}\n`, "utf8"))
|
|
101
|
-
.catch((err) => log.warn({ err: String(err) }, "events log append failed"));
|
|
102
|
-
if (opts.onEvent) {
|
|
103
|
-
try {
|
|
104
|
-
opts.onEvent(parsed);
|
|
105
|
-
}
|
|
106
|
-
catch (err) {
|
|
107
|
-
log.warn({ err: String(err) }, "onEvent threw");
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
child.stdout.on("data", (chunk) => {
|
|
112
|
-
buffer += chunk.toString("utf8");
|
|
113
|
-
let nl = buffer.indexOf("\n");
|
|
114
|
-
while (nl !== -1) {
|
|
115
|
-
handleLine(buffer.slice(0, nl));
|
|
116
|
-
buffer = buffer.slice(nl + 1);
|
|
117
|
-
nl = buffer.indexOf("\n");
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
child.stderr.on("data", (chunk) => {
|
|
121
|
-
stderr += chunk.toString("utf8");
|
|
122
|
-
});
|
|
123
|
-
child.on("error", (err) => {
|
|
124
|
-
clearTimeout(timer);
|
|
125
|
-
reject(err);
|
|
126
|
-
});
|
|
127
|
-
child.on("close", (code) => {
|
|
128
|
-
clearTimeout(timer);
|
|
129
|
-
if (killEscalation !== undefined)
|
|
130
|
-
clearTimeout(killEscalation);
|
|
131
|
-
// Flush any trailing line.
|
|
132
|
-
if (buffer.length > 0)
|
|
133
|
-
handleLine(buffer);
|
|
134
|
-
writeChain
|
|
135
|
-
.then(() => {
|
|
136
|
-
const durationMs = Date.now() - startedAt;
|
|
137
|
-
if (code !== 0 && resultEvent === undefined) {
|
|
138
|
-
const message = `claude (implementer) exited ${code}${stderr ? `: ${stderr.trim()}` : ""}`;
|
|
139
|
-
const kind = classifyClaudeError({ message, exitCode: code, stderr });
|
|
140
|
-
reject(new ClaudeError({ message, kind, exitCode: code, stderr }));
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
if (resultEvent === undefined) {
|
|
144
|
-
reject(new ClaudeError({
|
|
145
|
-
message: `implementer ended without a result event`,
|
|
146
|
-
kind: "other",
|
|
147
|
-
exitCode: code,
|
|
148
|
-
stderr,
|
|
149
|
-
}));
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
const isErr = resultEvent["is_error"] === true;
|
|
153
|
-
log.info({
|
|
154
|
-
model,
|
|
155
|
-
durationMs,
|
|
156
|
-
events: eventCount,
|
|
157
|
-
ok: !isErr,
|
|
158
|
-
}, "implementer run complete");
|
|
159
|
-
resolve({
|
|
160
|
-
result: resultEvent,
|
|
161
|
-
events: eventCount,
|
|
162
|
-
durationMs,
|
|
163
|
-
ok: !isErr,
|
|
164
|
-
});
|
|
165
|
-
})
|
|
166
|
-
.catch((err) => reject(err));
|
|
167
|
-
});
|
|
168
|
-
child.stdin.write(opts.prompt);
|
|
169
|
-
child.stdin.end();
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/orchestrator/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool-digest extractor — second-source visibility for §3.3.
|
|
3
|
-
*
|
|
4
|
-
* Reads claude stream-json events (from events.jsonl or the live activity
|
|
5
|
-
* window) and surfaces what the agent is actually doing — the file paths
|
|
6
|
-
* it edited, the bash commands it ran, the search patterns it grep'd.
|
|
7
|
-
*
|
|
8
|
-
* Operator-facing surface: rendered as embed FIELDS alongside the Tier-0
|
|
9
|
-
* Ollama summary. Independent of LLM availability — pure pattern match
|
|
10
|
-
* on tool_use entries. When the Ollama summary fails ("Working…"), the
|
|
11
|
-
* tool digest still gives the operator something concrete.
|
|
12
|
-
*
|
|
13
|
-
* Claude stream-json shape (only the fields we read):
|
|
14
|
-
* { type: "assistant", message: { content: [{ type: "tool_use",
|
|
15
|
-
* name: "Edit"|"Write"|"MultiEdit"|"Bash"|"Grep"|"Glob"|...,
|
|
16
|
-
* input: { file_path?, command?, pattern?, ... } }] } }
|
|
17
|
-
*/
|
|
18
|
-
export interface ToolDigest {
|
|
19
|
-
files: string[];
|
|
20
|
-
bash: string[];
|
|
21
|
-
searches: string[];
|
|
22
|
-
}
|
|
23
|
-
export interface ExtractToolDigestOptions {
|
|
24
|
-
/** Max file paths kept (deduped, most-recent-last). Default 8. */
|
|
25
|
-
maxFiles?: number;
|
|
26
|
-
/** Max bash commands kept (most-recent-last). Default 6. */
|
|
27
|
-
maxBash?: number;
|
|
28
|
-
/** Max search patterns kept (most-recent-last). Default 6. */
|
|
29
|
-
maxSearches?: number;
|
|
30
|
-
/** Trim each captured string to this length. Default 120. */
|
|
31
|
-
truncateTo?: number;
|
|
32
|
-
}
|
|
33
|
-
export declare function extractToolDigest(events: readonly Record<string, unknown>[], opts?: ExtractToolDigestOptions): ToolDigest;
|
|
34
|
-
/** True if any of files/bash/searches are populated. */
|
|
35
|
-
export declare function digestIsEmpty(d: ToolDigest): boolean;
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool-digest extractor — second-source visibility for §3.3.
|
|
3
|
-
*
|
|
4
|
-
* Reads claude stream-json events (from events.jsonl or the live activity
|
|
5
|
-
* window) and surfaces what the agent is actually doing — the file paths
|
|
6
|
-
* it edited, the bash commands it ran, the search patterns it grep'd.
|
|
7
|
-
*
|
|
8
|
-
* Operator-facing surface: rendered as embed FIELDS alongside the Tier-0
|
|
9
|
-
* Ollama summary. Independent of LLM availability — pure pattern match
|
|
10
|
-
* on tool_use entries. When the Ollama summary fails ("Working…"), the
|
|
11
|
-
* tool digest still gives the operator something concrete.
|
|
12
|
-
*
|
|
13
|
-
* Claude stream-json shape (only the fields we read):
|
|
14
|
-
* { type: "assistant", message: { content: [{ type: "tool_use",
|
|
15
|
-
* name: "Edit"|"Write"|"MultiEdit"|"Bash"|"Grep"|"Glob"|...,
|
|
16
|
-
* input: { file_path?, command?, pattern?, ... } }] } }
|
|
17
|
-
*/
|
|
18
|
-
const FILE_EDIT_TOOLS = new Set([
|
|
19
|
-
"Edit",
|
|
20
|
-
"Write",
|
|
21
|
-
"MultiEdit",
|
|
22
|
-
"NotebookEdit",
|
|
23
|
-
]);
|
|
24
|
-
const BASH_TOOLS = new Set(["Bash"]);
|
|
25
|
-
const SEARCH_TOOLS = new Set(["Grep", "Glob"]);
|
|
26
|
-
export function extractToolDigest(events, opts = {}) {
|
|
27
|
-
const maxFiles = opts.maxFiles ?? 8;
|
|
28
|
-
const maxBash = opts.maxBash ?? 6;
|
|
29
|
-
const maxSearches = opts.maxSearches ?? 6;
|
|
30
|
-
const truncateTo = opts.truncateTo ?? 120;
|
|
31
|
-
const files = [];
|
|
32
|
-
const bash = [];
|
|
33
|
-
const searches = [];
|
|
34
|
-
for (const event of events) {
|
|
35
|
-
if (event["type"] !== "assistant")
|
|
36
|
-
continue;
|
|
37
|
-
const msg = event["message"];
|
|
38
|
-
if (typeof msg !== "object" || msg === null)
|
|
39
|
-
continue;
|
|
40
|
-
const content = msg["content"];
|
|
41
|
-
if (!Array.isArray(content))
|
|
42
|
-
continue;
|
|
43
|
-
for (const part of content) {
|
|
44
|
-
if (typeof part !== "object" || part === null)
|
|
45
|
-
continue;
|
|
46
|
-
const p = part;
|
|
47
|
-
if (p["type"] !== "tool_use")
|
|
48
|
-
continue;
|
|
49
|
-
const name = typeof p["name"] === "string" ? p["name"] : "";
|
|
50
|
-
const input = typeof p["input"] === "object" && p["input"] !== null
|
|
51
|
-
? p["input"]
|
|
52
|
-
: undefined;
|
|
53
|
-
if (input === undefined)
|
|
54
|
-
continue;
|
|
55
|
-
if (FILE_EDIT_TOOLS.has(name)) {
|
|
56
|
-
const path = stringFrom(input, ["file_path", "filePath", "notebook_path"]);
|
|
57
|
-
if (path !== undefined)
|
|
58
|
-
pushUnique(files, truncate(path, truncateTo));
|
|
59
|
-
}
|
|
60
|
-
else if (BASH_TOOLS.has(name)) {
|
|
61
|
-
const cmd = stringFrom(input, ["command"]);
|
|
62
|
-
if (cmd !== undefined)
|
|
63
|
-
bash.push(truncate(cmd, truncateTo));
|
|
64
|
-
}
|
|
65
|
-
else if (SEARCH_TOOLS.has(name)) {
|
|
66
|
-
const pat = stringFrom(input, ["pattern", "query", "glob"]);
|
|
67
|
-
if (pat !== undefined)
|
|
68
|
-
searches.push(truncate(pat, truncateTo));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return {
|
|
73
|
-
files: tailDedup(files, maxFiles),
|
|
74
|
-
bash: bash.slice(-maxBash),
|
|
75
|
-
searches: searches.slice(-maxSearches),
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
function stringFrom(obj, keys) {
|
|
79
|
-
for (const k of keys) {
|
|
80
|
-
const v = obj[k];
|
|
81
|
-
if (typeof v === "string" && v.length > 0)
|
|
82
|
-
return v;
|
|
83
|
-
}
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
function pushUnique(arr, value) {
|
|
87
|
-
const idx = arr.indexOf(value);
|
|
88
|
-
if (idx !== -1)
|
|
89
|
-
arr.splice(idx, 1);
|
|
90
|
-
arr.push(value);
|
|
91
|
-
}
|
|
92
|
-
function tailDedup(arr, cap) {
|
|
93
|
-
const seen = new Set();
|
|
94
|
-
const out = [];
|
|
95
|
-
for (let i = arr.length - 1; i >= 0; i--) {
|
|
96
|
-
const v = arr[i];
|
|
97
|
-
if (v === undefined)
|
|
98
|
-
continue;
|
|
99
|
-
if (seen.has(v))
|
|
100
|
-
continue;
|
|
101
|
-
seen.add(v);
|
|
102
|
-
out.unshift(v);
|
|
103
|
-
if (out.length >= cap)
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
return out;
|
|
107
|
-
}
|
|
108
|
-
function truncate(s, n) {
|
|
109
|
-
const trimmed = s.replace(/\s+/g, " ").trim();
|
|
110
|
-
return trimmed.length > n ? `${trimmed.slice(0, n - 1)}…` : trimmed;
|
|
111
|
-
}
|
|
112
|
-
/** True if any of files/bash/searches are populated. */
|
|
113
|
-
export function digestIsEmpty(d) {
|
|
114
|
-
return d.files.length === 0 && d.bash.length === 0 && d.searches.length === 0;
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=tool-digest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-digest.js","sourceRoot":"","sources":["../../src/orchestrator/tool-digest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
import type { ClaudeTier } from "../claude/index.js";
|
|
2
|
-
import type { FrontendAdapter } from "../frontend/index.js";
|
|
3
|
-
import type { ReviewVerdict } from "../reviewer/types.js";
|
|
4
|
-
import type { ProjectGlobs, SensorLanguage, SensorSweepResult } from "../sensors/types.js";
|
|
5
|
-
import type { UatDecision, UatRunnerInput } from "../uat/types.js";
|
|
6
|
-
/**
|
|
7
|
-
* Phases a code-class run can be in. The lifecycle is linear; no skipping.
|
|
8
|
-
*
|
|
9
|
-
* queued — accepted from the inbox; waiting for the FIFO to drain
|
|
10
|
-
* tightening — Layer F spec tightener (Phase 7) is running
|
|
11
|
-
* blocked — tightener returned ready=false; awaiting operator answers
|
|
12
|
-
* prepping — workspace prep: mirror sync + SHA pin + dirty-overlap gate
|
|
13
|
-
* running — agent subprocess executing inside the mirror
|
|
14
|
-
* succeeded — agent finished; sensors / reviewer / UAT gates are later phases
|
|
15
|
-
* failed — terminal: tightener errored, workspace gate refused, agent timed
|
|
16
|
-
* out, or stream parse failed
|
|
17
|
-
*
|
|
18
|
-
* Phase 8 minimum exercises queued → prepping → running → succeeded | failed.
|
|
19
|
-
* `tightening` and `blocked` are wired but Phase 8 lets the smoke bypass via
|
|
20
|
-
* `bypass_tightener` to avoid spending Sonnet quota on every run.
|
|
21
|
-
*/
|
|
22
|
-
export type RunPhase = "queued" | "tightening" | "blocked" | "prepping" | "running" | "sensing" | "reviewing" | "uat" | "backpropping" | "succeeded" | "failed";
|
|
23
|
-
/**
|
|
24
|
-
* Persisted at `.harness/runs/active/<run_id>/meta.json`. The orchestrator
|
|
25
|
-
* writes this on every phase transition. The grounding daemon's drift
|
|
26
|
-
* detector reads it for module-health quality grades.
|
|
27
|
-
*/
|
|
28
|
-
export interface RunMeta {
|
|
29
|
-
run_id: string;
|
|
30
|
-
task_id: string;
|
|
31
|
-
agent_role: "implementer";
|
|
32
|
-
phase: RunPhase;
|
|
33
|
-
started_at: string;
|
|
34
|
-
finished_at?: string;
|
|
35
|
-
tier: ClaudeTier;
|
|
36
|
-
model: string;
|
|
37
|
-
mirror_path: string;
|
|
38
|
-
/** SHA captured at workspace prep (origin/main pin). */
|
|
39
|
-
sha_pin?: string;
|
|
40
|
-
events_count: number;
|
|
41
|
-
duration_ms?: number;
|
|
42
|
-
/** Populated when phase = "failed". */
|
|
43
|
-
error?: string;
|
|
44
|
-
/** Populated when tightener ran. */
|
|
45
|
-
tightener_score?: number;
|
|
46
|
-
tightener_ready?: boolean;
|
|
47
|
-
/**
|
|
48
|
-
* Set when the tightener returned ready=false and the orchestrator
|
|
49
|
-
* fired the resolution dialog. `approve_proposed` runs with the
|
|
50
|
-
* tightener's proposal; `ship_anyway` bypasses the gate using the
|
|
51
|
-
* operator's original body; `edit` / `cancel` / `timeout` mark the run
|
|
52
|
-
* failed (operator chose to re-submit / drop).
|
|
53
|
-
*/
|
|
54
|
-
tightener_user_choice?: "approve_proposed" | "ship_anyway" | "edit" | "cancel" | "timeout";
|
|
55
|
-
/** Source channel id when ingested via Discord — used for postTaskUpdate. */
|
|
56
|
-
channel_id?: string;
|
|
57
|
-
/** Number of agent attempts dispatched (1 = no retries). */
|
|
58
|
-
attempts?: number;
|
|
59
|
-
/** Per-attempt sensor sweep summary; persisted in events log too. */
|
|
60
|
-
sensor_history?: {
|
|
61
|
-
attempt: number;
|
|
62
|
-
ok: boolean;
|
|
63
|
-
hard_failures: number;
|
|
64
|
-
soft_findings: number;
|
|
65
|
-
sensor_ids_failed: string[];
|
|
66
|
-
}[];
|
|
67
|
-
/** Final sweep result reference for downstream layers. */
|
|
68
|
-
last_sensor_sweep?: Pick<SensorSweepResult, "ok" | "hard_failures" | "soft_findings">;
|
|
69
|
-
/** Per-attempt reviewer subagent (Layer C) summary. */
|
|
70
|
-
reviewer_history?: {
|
|
71
|
-
attempt: number;
|
|
72
|
-
ok: boolean;
|
|
73
|
-
verdict: ReviewVerdict;
|
|
74
|
-
hard_gaps: number;
|
|
75
|
-
soft_gaps: number;
|
|
76
|
-
confidence_signal: "high" | "medium" | "low";
|
|
77
|
-
}[];
|
|
78
|
-
last_reviewer?: {
|
|
79
|
-
ok: boolean;
|
|
80
|
-
verdict: ReviewVerdict;
|
|
81
|
-
hard_gaps: number;
|
|
82
|
-
soft_gaps: number;
|
|
83
|
-
confidence_signal: "high" | "medium" | "low";
|
|
84
|
-
};
|
|
85
|
-
/** Per-attempt UAT (Layer U) summary. */
|
|
86
|
-
uat_history?: {
|
|
87
|
-
attempt: number;
|
|
88
|
-
ok: boolean;
|
|
89
|
-
all_passed: boolean;
|
|
90
|
-
probe_failures: number;
|
|
91
|
-
operator_decision: UatDecision;
|
|
92
|
-
}[];
|
|
93
|
-
last_uat?: {
|
|
94
|
-
ok: boolean;
|
|
95
|
-
all_passed: boolean;
|
|
96
|
-
probe_failures: number;
|
|
97
|
-
operator_decision: UatDecision;
|
|
98
|
-
};
|
|
99
|
-
/** Backprop subagent (Phase 13) summary. Set when backprop ran. */
|
|
100
|
-
last_backprop?: {
|
|
101
|
-
ok: boolean;
|
|
102
|
-
invariant_id: string;
|
|
103
|
-
invariant_path: string;
|
|
104
|
-
sensor_path: string;
|
|
105
|
-
enforcement_kind: "regex_sensor" | "named_e2e";
|
|
106
|
-
/** Commit SHA on the mirror; undefined if commit step skipped/failed. */
|
|
107
|
-
commit_sha?: string;
|
|
108
|
-
/** Set when ok=false; agent threw / write failed / commit threw. */
|
|
109
|
-
error?: string;
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Shape of a `task` row dropped to `.harness/inbox/<...>.json` by adapters.
|
|
114
|
-
* The orchestrator is tolerant — fields beyond `task_id` and `task` are
|
|
115
|
-
* optional and just plumb through to the run.
|
|
116
|
-
*/
|
|
117
|
-
export interface InboxTaskRow {
|
|
118
|
-
kind: "task";
|
|
119
|
-
source: string;
|
|
120
|
-
received_at: string;
|
|
121
|
-
task_id?: string;
|
|
122
|
-
task: {
|
|
123
|
-
rawText: string;
|
|
124
|
-
intent: string;
|
|
125
|
-
authorId: string;
|
|
126
|
-
channelId?: string;
|
|
127
|
-
guildId?: string;
|
|
128
|
-
messageId?: string;
|
|
129
|
-
receivedAt?: string;
|
|
130
|
-
};
|
|
131
|
-
classification?: {
|
|
132
|
-
intent: string;
|
|
133
|
-
confidence: number;
|
|
134
|
-
source: string;
|
|
135
|
-
};
|
|
136
|
-
free_text?: unknown;
|
|
137
|
-
slash?: unknown;
|
|
138
|
-
/** Optional override per L24 / WORKFLOW_GUIDE §4.5. */
|
|
139
|
-
ship_anyway?: boolean;
|
|
140
|
-
/** Globs the run is expected to touch — used for dirty-overlap. */
|
|
141
|
-
target_path_globs?: string[];
|
|
142
|
-
/** Optional title override (otherwise derived from rawText[0..80]). */
|
|
143
|
-
title?: string;
|
|
144
|
-
/** Optional acceptance criteria pre-supplied. */
|
|
145
|
-
acceptance_criteria?: string[];
|
|
146
|
-
}
|
|
147
|
-
export interface OrchestratorOptions {
|
|
148
|
-
/** Project name as registered with mirror (slug, not display). */
|
|
149
|
-
projectName: string;
|
|
150
|
-
/** Repo root for inbox + runs + tasks dirs (typically the mirror path). */
|
|
151
|
-
repoRoot: string;
|
|
152
|
-
/** Adapters used for surfacing run progress + dialogs. */
|
|
153
|
-
adapters: FrontendAdapter[];
|
|
154
|
-
/** Skip the spec tightener (Phase 7). Smoke convenience. Default false. */
|
|
155
|
-
bypassTightener?: boolean;
|
|
156
|
-
/** Skip the sensor sweep (Phase 9). Smoke convenience. Default false. */
|
|
157
|
-
bypassSensors?: boolean;
|
|
158
|
-
/** Skip the reviewer subagent (Phase 10). Smoke convenience. Default false. */
|
|
159
|
-
bypassReviewer?: boolean;
|
|
160
|
-
/** Skip the UAT pipeline (Phase 11). Smoke convenience. Default false. */
|
|
161
|
-
bypassUat?: boolean;
|
|
162
|
-
/**
|
|
163
|
-
* Skip the backprop subagent (Phase 13). Smoke convenience. Default
|
|
164
|
-
* false — production runs invoke backprop on every successful code-class
|
|
165
|
-
* UAT-approved run.
|
|
166
|
-
*/
|
|
167
|
-
bypassBackprop?: boolean;
|
|
168
|
-
/**
|
|
169
|
-
* Override the backprop tier. Default = `tier_assignment.backprop_author`
|
|
170
|
-
* from workflow.md (Tier 2 / Sonnet). Smokes drop to Tier 1 (Haiku) for
|
|
171
|
-
* speed + quota.
|
|
172
|
-
*/
|
|
173
|
-
backpropTier?: ClaudeTier;
|
|
174
|
-
/**
|
|
175
|
-
* Tier for the decision-capture extractor (Phase 14). Default = haiku
|
|
176
|
-
* per workflow.md `decision_extractor: 1`. Sonnet may be useful when
|
|
177
|
-
* directions are long-form and a Haiku miss-classifies them.
|
|
178
|
-
*/
|
|
179
|
-
decisionExtractorTier?: ClaudeTier;
|
|
180
|
-
/**
|
|
181
|
-
* Confirm-dialog timeout for the decision-capture flow. Default 60_000
|
|
182
|
-
* ms. Smokes drop this to a few seconds so stub adapters resolve fast.
|
|
183
|
-
*/
|
|
184
|
-
decisionConfirmTimeoutMs?: number;
|
|
185
|
-
/**
|
|
186
|
-
* Skip the post-commit refinement step (Phase 14.x). Default false.
|
|
187
|
-
* Smokes that don't care about refinement (e.g. `smoke:decision-capture`)
|
|
188
|
-
* flip this on to keep the flow pure-mechanical.
|
|
189
|
-
*/
|
|
190
|
-
bypassRefinement?: boolean;
|
|
191
|
-
/**
|
|
192
|
-
* Tier for the refinement-proposer call. Default = decisionExtractorTier
|
|
193
|
-
* (haiku). The refiner is small JSON in / small JSON out; haiku is
|
|
194
|
-
* sufficient for almost every case.
|
|
195
|
-
*/
|
|
196
|
-
refinementTier?: ClaudeTier;
|
|
197
|
-
/** Refinement-dialog timeout. Default 60_000 ms. */
|
|
198
|
-
refinementDialogTimeoutMs?: number;
|
|
199
|
-
/**
|
|
200
|
-
* UAT-runner hints surfaced to the agent — base URL for http probes,
|
|
201
|
-
* cli prefix/cwd, and which heavier probe surfaces are available
|
|
202
|
-
* (ui/sql/integration). Adopted from `<project>:` extension block at
|
|
203
|
-
* init. Defaults exclude the heavy surfaces; ui/sql/integration must be
|
|
204
|
-
* explicitly enabled via setup:uat-* helpers per Phase 11.5/11.6.
|
|
205
|
-
*/
|
|
206
|
-
uatHints?: UatRunnerInput["hints"];
|
|
207
|
-
/**
|
|
208
|
-
* Cold-start smoke command (e.g. `pnpm db:reset && pnpm db:migrate &&
|
|
209
|
-
* pnpm start:dev`). Recorded as a single command + args; orchestrator
|
|
210
|
-
* spawns it before probes when the UAT-runner sets `cold_start_smoke=true`.
|
|
211
|
-
*/
|
|
212
|
-
uatColdStartCommand?: {
|
|
213
|
-
command: string;
|
|
214
|
-
args: string[];
|
|
215
|
-
cwd?: string;
|
|
216
|
-
};
|
|
217
|
-
/**
|
|
218
|
-
* Override the post-reject A/B/C/D dialog timeout. Default 24h per
|
|
219
|
-
* UAT_PIPELINE.md §9 (`uat_decision_seconds`). Smokes pass a short
|
|
220
|
-
* value so stub adapters resolve quickly.
|
|
221
|
-
*/
|
|
222
|
-
uatRejectDialogTimeoutMs?: number;
|
|
223
|
-
/** Override the question agent's tier. Default: same tier as implementer. */
|
|
224
|
-
uatQuestionTier?: ClaudeTier;
|
|
225
|
-
/** Cap on ❓ Ask iterations per run. Default 5 in runUat. */
|
|
226
|
-
uatMaxQuestionRounds?: number;
|
|
227
|
-
/**
|
|
228
|
-
* Force this tier for the implementer. Default: haiku (cheap; raise to
|
|
229
|
-
* sonnet for code-class tasks once Phase 9+ adds trust-class detection).
|
|
230
|
-
*/
|
|
231
|
-
defaultTier?: ClaudeTier;
|
|
232
|
-
/** Inbox poll interval — chokidar fires events but we also poll for safety. */
|
|
233
|
-
pollIntervalMs?: number;
|
|
234
|
-
/** Per-run hard timeout. Default 600_000 ms (10 min). */
|
|
235
|
-
runTimeoutMs?: number;
|
|
236
|
-
/** Allowed tools list passed to `claude --allowed-tools`. */
|
|
237
|
-
allowedTools?: string[];
|
|
238
|
-
/** Stack-profile language list — filters Layer A patterns. Default ["typescript"]. */
|
|
239
|
-
sensorLanguages?: SensorLanguage[];
|
|
240
|
-
/** Resolved <project>: extension globs from workflow.md. Default {}. */
|
|
241
|
-
projectGlobs?: ProjectGlobs;
|
|
242
|
-
/**
|
|
243
|
-
* Max agent attempts before the run is failed-honesty-checked. Default 3
|
|
244
|
-
* per L42 (max_attempts_per_task=3, attempt 2 = first sensor-feedback retry).
|
|
245
|
-
*/
|
|
246
|
-
maxAttempts?: number;
|
|
247
|
-
/**
|
|
248
|
-
* Stall watchdog threshold. When the active run logs no event for this
|
|
249
|
-
* many seconds AND the phase is one that should produce events
|
|
250
|
-
* (excludes operator-pending `blocked`), the orchestrator posts a
|
|
251
|
-
* one-shot remediation embed pointing at `/halt` + `/status`. Default
|
|
252
|
-
* 90s; smokes drop this to a few seconds.
|
|
253
|
-
*/
|
|
254
|
-
watchdogStallSeconds?: number;
|
|
255
|
-
}
|
|
256
|
-
export interface QueueEntry {
|
|
257
|
-
run_id: string;
|
|
258
|
-
task_id: string;
|
|
259
|
-
enqueued_at: string;
|
|
260
|
-
row: InboxTaskRow;
|
|
261
|
-
/** Where the inbox row file lives — moved to processed/ on completion. */
|
|
262
|
-
inbox_file: string;
|
|
263
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/orchestrator/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { DirtyOverlapResult } from "../mirror/index.js";
|
|
2
|
-
export interface WorkspacePrepResult {
|
|
3
|
-
sha_pin: string;
|
|
4
|
-
branch: string;
|
|
5
|
-
/** Empty when no `target_path_globs` was supplied. */
|
|
6
|
-
dirty_overlap: DirtyOverlapResult | null;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Phase 8 workspace prep:
|
|
10
|
-
* 1. `syncMirror` — fetch + reset --hard origin/<branch>; capture SHA pin.
|
|
11
|
-
* 2. `checkLocalDirtyOverlap` — read user's working tree for files that
|
|
12
|
-
* overlap the run's target globs (per L45). The orchestrator decides
|
|
13
|
-
* whether to pause + dialog the operator based on the result; this
|
|
14
|
-
* function only reports.
|
|
15
|
-
*
|
|
16
|
-
* Mutates the mirror only. The user's working tree is NEVER written to.
|
|
17
|
-
*/
|
|
18
|
-
export declare function prepareWorkspace(args: {
|
|
19
|
-
projectName: string;
|
|
20
|
-
targetGlobs?: string[];
|
|
21
|
-
}): Promise<WorkspacePrepResult>;
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { logger } from "../logger.js";
|
|
2
|
-
import { checkLocalDirtyOverlap, syncMirror } from "../mirror/index.js";
|
|
3
|
-
const log = logger("orchestrator.workspace");
|
|
4
|
-
/**
|
|
5
|
-
* Phase 8 workspace prep:
|
|
6
|
-
* 1. `syncMirror` — fetch + reset --hard origin/<branch>; capture SHA pin.
|
|
7
|
-
* 2. `checkLocalDirtyOverlap` — read user's working tree for files that
|
|
8
|
-
* overlap the run's target globs (per L45). The orchestrator decides
|
|
9
|
-
* whether to pause + dialog the operator based on the result; this
|
|
10
|
-
* function only reports.
|
|
11
|
-
*
|
|
12
|
-
* Mutates the mirror only. The user's working tree is NEVER written to.
|
|
13
|
-
*/
|
|
14
|
-
export async function prepareWorkspace(args) {
|
|
15
|
-
const { projectName, targetGlobs } = args;
|
|
16
|
-
const sync = await syncMirror({ projectName });
|
|
17
|
-
log.info({ projectName, sha: sync.sha, branch: sync.branch }, "mirror pinned");
|
|
18
|
-
let dirty = null;
|
|
19
|
-
if (targetGlobs && targetGlobs.length > 0) {
|
|
20
|
-
dirty = await checkLocalDirtyOverlap({ projectName, targetGlobs });
|
|
21
|
-
if (dirty.overlap) {
|
|
22
|
-
log.warn({ projectName, files: dirty.overlappingFiles }, "dirty-overlap detected — orchestrator must pause + dialog");
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return {
|
|
26
|
-
sha_pin: sync.sha,
|
|
27
|
-
branch: sync.branch,
|
|
28
|
-
dirty_overlap: dirty,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=workspace.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/orchestrator/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGxE,MAAM,GAAG,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAS7C;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAGtC;IACC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE1C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;IAC/C,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC;IAE/E,IAAI,KAAK,GAA8B,IAAI,CAAC;IAC5C,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,GAAG,MAAM,sBAAsB,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QACnE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,GAAG,CAAC,IAAI,CACN,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,EAC9C,2DAA2D,CAC5D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,GAAG;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,aAAa,EAAE,KAAK;KACrB,CAAC;AACJ,CAAC"}
|