@isaacriehm/cairn 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +37 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/backprop/id.d.ts +14 -0
- package/dist/backprop/id.js +40 -0
- package/dist/backprop/id.js.map +1 -0
- package/dist/backprop/index.d.ts +23 -0
- package/dist/backprop/index.js +21 -0
- package/dist/backprop/index.js.map +1 -0
- package/dist/backprop/prompt.d.ts +16 -0
- package/dist/backprop/prompt.js +101 -0
- package/dist/backprop/prompt.js.map +1 -0
- package/dist/backprop/runner.d.ts +18 -0
- package/dist/backprop/runner.js +95 -0
- package/dist/backprop/runner.js.map +1 -0
- package/dist/backprop/schema.d.ts +61 -0
- package/dist/backprop/schema.js +55 -0
- package/dist/backprop/schema.js.map +1 -0
- package/dist/backprop/types.d.ts +101 -0
- package/dist/backprop/types.js +24 -0
- package/dist/backprop/types.js.map +1 -0
- package/dist/backprop/writer.d.ts +27 -0
- package/dist/backprop/writer.js +301 -0
- package/dist/backprop/writer.js.map +1 -0
- package/dist/claude/error.d.ts +33 -0
- package/dist/claude/error.js +58 -0
- package/dist/claude/error.js.map +1 -0
- package/dist/claude/index.d.ts +3 -0
- package/dist/claude/index.js +3 -0
- package/dist/claude/index.js.map +1 -0
- package/dist/claude/runner.d.ts +11 -0
- package/dist/claude/runner.js +132 -0
- package/dist/claude/runner.js.map +1 -0
- package/dist/claude/types.d.ts +52 -0
- package/dist/claude/types.js +14 -0
- package/dist/claude/types.js.map +1 -0
- package/dist/cli/attention.d.ts +11 -0
- package/dist/cli/attention.js +234 -0
- package/dist/cli/attention.js.map +1 -0
- package/dist/cli/daemon.d.ts +54 -0
- package/dist/cli/daemon.js +351 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/doctor.js +116 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/gc.d.ts +15 -0
- package/dist/cli/gc.js +139 -0
- package/dist/cli/gc.js.map +1 -0
- package/dist/cli/hook.d.ts +18 -0
- package/dist/cli/hook.js +57 -0
- package/dist/cli/hook.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +127 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +1 -0
- package/dist/cli/init.js +77 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/install.d.ts +52 -0
- package/dist/cli/install.js +308 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/join.d.ts +1 -0
- package/dist/cli/join.js +84 -0
- package/dist/cli/join.js.map +1 -0
- package/dist/cli/mcp.d.ts +1 -0
- package/dist/cli/mcp.js +62 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/mirror.d.ts +1 -0
- package/dist/cli/mirror.js +97 -0
- package/dist/cli/mirror.js.map +1 -0
- package/dist/cli/run.d.ts +1 -0
- package/dist/cli/run.js +174 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/scope.d.ts +8 -0
- package/dist/cli/scope.js +65 -0
- package/dist/cli/scope.js.map +1 -0
- package/dist/cli/task.d.ts +18 -0
- package/dist/cli/task.js +137 -0
- package/dist/cli/task.js.map +1 -0
- package/dist/cli/watch.d.ts +1 -0
- package/dist/cli/watch.js +73 -0
- package/dist/cli/watch.js.map +1 -0
- package/dist/decision-capture/capture.d.ts +57 -0
- package/dist/decision-capture/capture.js +186 -0
- package/dist/decision-capture/capture.js.map +1 -0
- package/dist/decision-capture/extractor.d.ts +20 -0
- package/dist/decision-capture/extractor.js +103 -0
- package/dist/decision-capture/extractor.js.map +1 -0
- package/dist/decision-capture/id.d.ts +14 -0
- package/dist/decision-capture/id.js +44 -0
- package/dist/decision-capture/id.js.map +1 -0
- package/dist/decision-capture/index.d.ts +25 -0
- package/dist/decision-capture/index.js +21 -0
- package/dist/decision-capture/index.js.map +1 -0
- package/dist/decision-capture/prompt.d.ts +15 -0
- package/dist/decision-capture/prompt.js +68 -0
- package/dist/decision-capture/prompt.js.map +1 -0
- package/dist/decision-capture/refinement-prompt.d.ts +25 -0
- package/dist/decision-capture/refinement-prompt.js +146 -0
- package/dist/decision-capture/refinement-prompt.js.map +1 -0
- package/dist/decision-capture/refinement-schema.d.ts +52 -0
- package/dist/decision-capture/refinement-schema.js +61 -0
- package/dist/decision-capture/refinement-schema.js.map +1 -0
- package/dist/decision-capture/refinement.d.ts +60 -0
- package/dist/decision-capture/refinement.js +439 -0
- package/dist/decision-capture/refinement.js.map +1 -0
- package/dist/decision-capture/schema.d.ts +70 -0
- package/dist/decision-capture/schema.js +71 -0
- package/dist/decision-capture/schema.js.map +1 -0
- package/dist/decision-capture/types.d.ts +201 -0
- package/dist/decision-capture/types.js +20 -0
- package/dist/decision-capture/types.js.map +1 -0
- package/dist/decision-capture/writer.d.ts +90 -0
- package/dist/decision-capture/writer.js +267 -0
- package/dist/decision-capture/writer.js.map +1 -0
- package/dist/frontend/discord/acl.d.ts +6 -0
- package/dist/frontend/discord/acl.js +19 -0
- package/dist/frontend/discord/acl.js.map +1 -0
- package/dist/frontend/discord/channels.d.ts +29 -0
- package/dist/frontend/discord/channels.js +58 -0
- package/dist/frontend/discord/channels.js.map +1 -0
- package/dist/frontend/discord/classifier.d.ts +16 -0
- package/dist/frontend/discord/classifier.js +29 -0
- package/dist/frontend/discord/classifier.js.map +1 -0
- package/dist/frontend/discord/index.d.ts +118 -0
- package/dist/frontend/discord/index.js +1104 -0
- package/dist/frontend/discord/index.js.map +1 -0
- package/dist/frontend/discord/slash.d.ts +18 -0
- package/dist/frontend/discord/slash.js +90 -0
- package/dist/frontend/discord/slash.js.map +1 -0
- package/dist/frontend/inbox.d.ts +17 -0
- package/dist/frontend/inbox.js +30 -0
- package/dist/frontend/inbox.js.map +1 -0
- package/dist/frontend/index.d.ts +8 -0
- package/dist/frontend/index.js +6 -0
- package/dist/frontend/index.js.map +1 -0
- package/dist/frontend/stub/index.d.ts +58 -0
- package/dist/frontend/stub/index.js +144 -0
- package/dist/frontend/stub/index.js.map +1 -0
- package/dist/frontend/types.d.ts +247 -0
- package/dist/frontend/types.js +15 -0
- package/dist/frontend/types.js.map +1 -0
- package/dist/gc/apply.d.ts +26 -0
- package/dist/gc/apply.js +48 -0
- package/dist/gc/apply.js.map +1 -0
- package/dist/gc/canary.d.ts +42 -0
- package/dist/gc/canary.js +134 -0
- package/dist/gc/canary.js.map +1 -0
- package/dist/gc/classify.d.ts +25 -0
- package/dist/gc/classify.js +89 -0
- package/dist/gc/classify.js.map +1 -0
- package/dist/gc/doc-gardening.d.ts +29 -0
- package/dist/gc/doc-gardening.js +146 -0
- package/dist/gc/doc-gardening.js.map +1 -0
- package/dist/gc/frontmatter.d.ts +35 -0
- package/dist/gc/frontmatter.js +111 -0
- package/dist/gc/frontmatter.js.map +1 -0
- package/dist/gc/generator-drift.d.ts +28 -0
- package/dist/gc/generator-drift.js +53 -0
- package/dist/gc/generator-drift.js.map +1 -0
- package/dist/gc/index.d.ts +35 -0
- package/dist/gc/index.js +26 -0
- package/dist/gc/index.js.map +1 -0
- package/dist/gc/quality-update.d.ts +23 -0
- package/dist/gc/quality-update.js +69 -0
- package/dist/gc/quality-update.js.map +1 -0
- package/dist/gc/stub-hits.d.ts +31 -0
- package/dist/gc/stub-hits.js +125 -0
- package/dist/gc/stub-hits.js.map +1 -0
- package/dist/gc/sweep.d.ts +56 -0
- package/dist/gc/sweep.js +178 -0
- package/dist/gc/sweep.js.map +1 -0
- package/dist/gc/types.d.ts +129 -0
- package/dist/gc/types.js +26 -0
- package/dist/gc/types.js.map +1 -0
- package/dist/ground/drift.d.ts +8 -0
- package/dist/ground/drift.js +23 -0
- package/dist/ground/drift.js.map +1 -0
- package/dist/ground/frontmatter.d.ts +20 -0
- package/dist/ground/frontmatter.js +49 -0
- package/dist/ground/frontmatter.js.map +1 -0
- package/dist/ground/glob.d.ts +10 -0
- package/dist/ground/glob.js +46 -0
- package/dist/ground/glob.js.map +1 -0
- package/dist/ground/index.d.ts +14 -0
- package/dist/ground/index.js +10 -0
- package/dist/ground/index.js.map +1 -0
- package/dist/ground/ledgers.d.ts +18 -0
- package/dist/ground/ledgers.js +103 -0
- package/dist/ground/ledgers.js.map +1 -0
- package/dist/ground/manifest.d.ts +10 -0
- package/dist/ground/manifest.js +88 -0
- package/dist/ground/manifest.js.map +1 -0
- package/dist/ground/paths.d.ts +20 -0
- package/dist/ground/paths.js +61 -0
- package/dist/ground/paths.js.map +1 -0
- package/dist/ground/quality-grades.d.ts +11 -0
- package/dist/ground/quality-grades.js +98 -0
- package/dist/ground/quality-grades.js.map +1 -0
- package/dist/ground/schemas.d.ts +306 -0
- package/dist/ground/schemas.js +188 -0
- package/dist/ground/schemas.js.map +1 -0
- package/dist/ground/walk.d.ts +7 -0
- package/dist/ground/walk.js +53 -0
- package/dist/ground/walk.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/init/detect.d.ts +25 -0
- package/dist/init/detect.js +336 -0
- package/dist/init/detect.js.map +1 -0
- package/dist/init/index.d.ts +14 -0
- package/dist/init/index.js +9 -0
- package/dist/init/index.js.map +1 -0
- package/dist/init/init.d.ts +68 -0
- package/dist/init/init.js +673 -0
- package/dist/init/init.js.map +1 -0
- package/dist/init/mapper.d.ts +160 -0
- package/dist/init/mapper.js +248 -0
- package/dist/init/mapper.js.map +1 -0
- package/dist/init/prompts.d.ts +70 -0
- package/dist/init/prompts.js +80 -0
- package/dist/init/prompts.js.map +1 -0
- package/dist/init/secrets.d.ts +18 -0
- package/dist/init/secrets.js +76 -0
- package/dist/init/secrets.js.map +1 -0
- package/dist/init/seed.d.ts +21 -0
- package/dist/init/seed.js +75 -0
- package/dist/init/seed.js.map +1 -0
- package/dist/init/setup-runners.d.ts +17 -0
- package/dist/init/setup-runners.js +70 -0
- package/dist/init/setup-runners.js.map +1 -0
- package/dist/init/types.d.ts +59 -0
- package/dist/init/types.js +10 -0
- package/dist/init/types.js.map +1 -0
- package/dist/init/walker.d.ts +53 -0
- package/dist/init/walker.js +460 -0
- package/dist/init/walker.js.map +1 -0
- package/dist/init/workflow-block.d.ts +34 -0
- package/dist/init/workflow-block.js +110 -0
- package/dist/init/workflow-block.js.map +1 -0
- package/dist/logger.d.ts +3 -0
- package/dist/logger.js +23 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp/context.d.ts +16 -0
- package/dist/mcp/context.js +8 -0
- package/dist/mcp/context.js.map +1 -0
- package/dist/mcp/errors.d.ts +17 -0
- package/dist/mcp/errors.js +23 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/path-allowlist.d.ts +25 -0
- package/dist/mcp/path-allowlist.js +66 -0
- package/dist/mcp/path-allowlist.js.map +1 -0
- package/dist/mcp/result.d.ts +8 -0
- package/dist/mcp/result.js +18 -0
- package/dist/mcp/result.js.map +1 -0
- package/dist/mcp/schemas.d.ts +153 -0
- package/dist/mcp/schemas.js +135 -0
- package/dist/mcp/schemas.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -0
- package/dist/mcp/server.js +58 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/telemetry.d.ts +15 -0
- package/dist/mcp/telemetry.js +13 -0
- package/dist/mcp/telemetry.js.map +1 -0
- package/dist/mcp/tools/append.d.ts +8 -0
- package/dist/mcp/tools/append.js +33 -0
- package/dist/mcp/tools/append.js.map +1 -0
- package/dist/mcp/tools/archive.d.ts +8 -0
- package/dist/mcp/tools/archive.js +49 -0
- package/dist/mcp/tools/archive.js.map +1 -0
- package/dist/mcp/tools/ask-operator.d.ts +34 -0
- package/dist/mcp/tools/ask-operator.js +93 -0
- package/dist/mcp/tools/ask-operator.js.map +1 -0
- package/dist/mcp/tools/canonical-for-topic.d.ts +6 -0
- package/dist/mcp/tools/canonical-for-topic.js +40 -0
- package/dist/mcp/tools/canonical-for-topic.js.map +1 -0
- package/dist/mcp/tools/decision-get.d.ts +6 -0
- package/dist/mcp/tools/decision-get.js +49 -0
- package/dist/mcp/tools/decision-get.js.map +1 -0
- package/dist/mcp/tools/decisions-for-symbol.d.ts +7 -0
- package/dist/mcp/tools/decisions-for-symbol.js +42 -0
- package/dist/mcp/tools/decisions-for-symbol.js.map +1 -0
- package/dist/mcp/tools/decisions-in-scope.d.ts +7 -0
- package/dist/mcp/tools/decisions-in-scope.js +47 -0
- package/dist/mcp/tools/decisions-in-scope.js.map +1 -0
- package/dist/mcp/tools/drop-task.d.ts +12 -0
- package/dist/mcp/tools/drop-task.js +47 -0
- package/dist/mcp/tools/drop-task.js.map +1 -0
- package/dist/mcp/tools/get-full.d.ts +7 -0
- package/dist/mcp/tools/get-full.js +46 -0
- package/dist/mcp/tools/get-full.js.map +1 -0
- package/dist/mcp/tools/ground-get.d.ts +7 -0
- package/dist/mcp/tools/ground-get.js +80 -0
- package/dist/mcp/tools/ground-get.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +3 -0
- package/dist/mcp/tools/index.js +44 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/invariant-get.d.ts +6 -0
- package/dist/mcp/tools/invariant-get.js +49 -0
- package/dist/mcp/tools/invariant-get.js.map +1 -0
- package/dist/mcp/tools/invariants-in-scope.d.ts +7 -0
- package/dist/mcp/tools/invariants-in-scope.js +65 -0
- package/dist/mcp/tools/invariants-in-scope.js.map +1 -0
- package/dist/mcp/tools/query-history.d.ts +9 -0
- package/dist/mcp/tools/query-history.js +33 -0
- package/dist/mcp/tools/query-history.js.map +1 -0
- package/dist/mcp/tools/record-decision.d.ts +14 -0
- package/dist/mcp/tools/record-decision.js +101 -0
- package/dist/mcp/tools/record-decision.js.map +1 -0
- package/dist/mcp/tools/record-run-event.d.ts +10 -0
- package/dist/mcp/tools/record-run-event.js +28 -0
- package/dist/mcp/tools/record-run-event.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +9 -0
- package/dist/mcp/tools/search.js +165 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/tools/supersedes-chain.d.ts +6 -0
- package/dist/mcp/tools/supersedes-chain.js +66 -0
- package/dist/mcp/tools/supersedes-chain.js.map +1 -0
- package/dist/mcp/tools/timeline.d.ts +9 -0
- package/dist/mcp/tools/timeline.js +65 -0
- package/dist/mcp/tools/timeline.js.map +1 -0
- package/dist/mcp/tools/types.d.ts +9 -0
- package/dist/mcp/tools/types.js +2 -0
- package/dist/mcp/tools/types.js.map +1 -0
- package/dist/mirror/clone.d.ts +6 -0
- package/dist/mirror/clone.js +48 -0
- package/dist/mirror/clone.js.map +1 -0
- package/dist/mirror/dirty-overlap.d.ts +13 -0
- package/dist/mirror/dirty-overlap.js +77 -0
- package/dist/mirror/dirty-overlap.js.map +1 -0
- package/dist/mirror/index.d.ts +7 -0
- package/dist/mirror/index.js +7 -0
- package/dist/mirror/index.js.map +1 -0
- package/dist/mirror/paths.d.ts +18 -0
- package/dist/mirror/paths.js +45 -0
- package/dist/mirror/paths.js.map +1 -0
- package/dist/mirror/push.d.ts +9 -0
- package/dist/mirror/push.js +27 -0
- package/dist/mirror/push.js.map +1 -0
- package/dist/mirror/state.d.ts +4 -0
- package/dist/mirror/state.js +36 -0
- package/dist/mirror/state.js.map +1 -0
- package/dist/mirror/sync.d.ts +9 -0
- package/dist/mirror/sync.js +33 -0
- package/dist/mirror/sync.js.map +1 -0
- package/dist/mirror/types.d.ts +77 -0
- package/dist/mirror/types.js +2 -0
- package/dist/mirror/types.js.map +1 -0
- package/dist/orchestrator/activity-summarizer.d.ts +33 -0
- package/dist/orchestrator/activity-summarizer.js +120 -0
- package/dist/orchestrator/activity-summarizer.js.map +1 -0
- package/dist/orchestrator/inbox.d.ts +78 -0
- package/dist/orchestrator/inbox.js +115 -0
- package/dist/orchestrator/inbox.js.map +1 -0
- package/dist/orchestrator/index.d.ts +9 -0
- package/dist/orchestrator/index.js +7 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +154 -0
- package/dist/orchestrator/orchestrator.js +2437 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/prompt.d.ts +19 -0
- package/dist/orchestrator/prompt.js +50 -0
- package/dist/orchestrator/prompt.js.map +1 -0
- package/dist/orchestrator/queue.d.ts +21 -0
- package/dist/orchestrator/queue.js +80 -0
- package/dist/orchestrator/queue.js.map +1 -0
- package/dist/orchestrator/run-log.d.ts +53 -0
- package/dist/orchestrator/run-log.js +92 -0
- package/dist/orchestrator/run-log.js.map +1 -0
- package/dist/orchestrator/runner.d.ts +56 -0
- package/dist/orchestrator/runner.js +172 -0
- package/dist/orchestrator/runner.js.map +1 -0
- package/dist/orchestrator/tool-digest.d.ts +35 -0
- package/dist/orchestrator/tool-digest.js +116 -0
- package/dist/orchestrator/tool-digest.js.map +1 -0
- package/dist/orchestrator/types.d.ts +263 -0
- package/dist/orchestrator/types.js +2 -0
- package/dist/orchestrator/types.js.map +1 -0
- package/dist/orchestrator/workspace.d.ts +21 -0
- package/dist/orchestrator/workspace.js +31 -0
- package/dist/orchestrator/workspace.js.map +1 -0
- package/dist/profiles/index.d.ts +3 -0
- package/dist/profiles/index.js +3 -0
- package/dist/profiles/index.js.map +1 -0
- package/dist/profiles/registry.d.ts +5 -0
- package/dist/profiles/registry.js +31 -0
- package/dist/profiles/registry.js.map +1 -0
- package/dist/profiles/types.d.ts +48 -0
- package/dist/profiles/types.js +11 -0
- package/dist/profiles/types.js.map +1 -0
- package/dist/profiles/unknown.d.ts +9 -0
- package/dist/profiles/unknown.js +17 -0
- package/dist/profiles/unknown.js.map +1 -0
- package/dist/reviewer/index.d.ts +6 -0
- package/dist/reviewer/index.js +5 -0
- package/dist/reviewer/index.js.map +1 -0
- package/dist/reviewer/prompt.d.ts +11 -0
- package/dist/reviewer/prompt.js +132 -0
- package/dist/reviewer/prompt.js.map +1 -0
- package/dist/reviewer/remediation.d.ts +15 -0
- package/dist/reviewer/remediation.js +61 -0
- package/dist/reviewer/remediation.js.map +1 -0
- package/dist/reviewer/reviewer.d.ts +9 -0
- package/dist/reviewer/reviewer.js +89 -0
- package/dist/reviewer/reviewer.js.map +1 -0
- package/dist/reviewer/schema.d.ts +45 -0
- package/dist/reviewer/schema.js +43 -0
- package/dist/reviewer/schema.js.map +1 -0
- package/dist/reviewer/types.d.ts +74 -0
- package/dist/reviewer/types.js +14 -0
- package/dist/reviewer/types.js.map +1 -0
- package/dist/sensors/attestation.d.ts +44 -0
- package/dist/sensors/attestation.js +262 -0
- package/dist/sensors/attestation.js.map +1 -0
- package/dist/sensors/catalog.d.ts +41 -0
- package/dist/sensors/catalog.js +123 -0
- package/dist/sensors/catalog.js.map +1 -0
- package/dist/sensors/decisions.d.ts +30 -0
- package/dist/sensors/decisions.js +393 -0
- package/dist/sensors/decisions.js.map +1 -0
- package/dist/sensors/diff.d.ts +27 -0
- package/dist/sensors/diff.js +148 -0
- package/dist/sensors/diff.js.map +1 -0
- package/dist/sensors/index.d.ts +13 -0
- package/dist/sensors/index.js +9 -0
- package/dist/sensors/index.js.map +1 -0
- package/dist/sensors/remediation.d.ts +20 -0
- package/dist/sensors/remediation.js +65 -0
- package/dist/sensors/remediation.js.map +1 -0
- package/dist/sensors/runner.d.ts +44 -0
- package/dist/sensors/runner.js +95 -0
- package/dist/sensors/runner.js.map +1 -0
- package/dist/sensors/structural.d.ts +30 -0
- package/dist/sensors/structural.js +204 -0
- package/dist/sensors/structural.js.map +1 -0
- package/dist/sensors/stub-catalog.d.ts +39 -0
- package/dist/sensors/stub-catalog.js +115 -0
- package/dist/sensors/stub-catalog.js.map +1 -0
- package/dist/sensors/types.d.ts +135 -0
- package/dist/sensors/types.js +14 -0
- package/dist/sensors/types.js.map +1 -0
- package/dist/tier0/classify.d.ts +5 -0
- package/dist/tier0/classify.js +91 -0
- package/dist/tier0/classify.js.map +1 -0
- package/dist/tier0/index.d.ts +3 -0
- package/dist/tier0/index.js +3 -0
- package/dist/tier0/index.js.map +1 -0
- package/dist/tier0/ollama.d.ts +22 -0
- package/dist/tier0/ollama.js +63 -0
- package/dist/tier0/ollama.js.map +1 -0
- package/dist/tier0/types.d.ts +24 -0
- package/dist/tier0/types.js +7 -0
- package/dist/tier0/types.js.map +1 -0
- package/dist/tightener/index.d.ts +4 -0
- package/dist/tightener/index.js +4 -0
- package/dist/tightener/index.js.map +1 -0
- package/dist/tightener/prompt.d.ts +3 -0
- package/dist/tightener/prompt.js +67 -0
- package/dist/tightener/prompt.js.map +1 -0
- package/dist/tightener/schema.d.ts +68 -0
- package/dist/tightener/schema.js +44 -0
- package/dist/tightener/schema.js.map +1 -0
- package/dist/tightener/tighten.d.ts +2 -0
- package/dist/tightener/tighten.js +66 -0
- package/dist/tightener/tighten.js.map +1 -0
- package/dist/tightener/types.d.ts +74 -0
- package/dist/tightener/types.js +6 -0
- package/dist/tightener/types.js.map +1 -0
- package/dist/uat/bundle.d.ts +68 -0
- package/dist/uat/bundle.js +168 -0
- package/dist/uat/bundle.js.map +1 -0
- package/dist/uat/index.d.ts +15 -0
- package/dist/uat/index.js +10 -0
- package/dist/uat/index.js.map +1 -0
- package/dist/uat/persistent.d.ts +64 -0
- package/dist/uat/persistent.js +206 -0
- package/dist/uat/persistent.js.map +1 -0
- package/dist/uat/probes/cli.d.ts +11 -0
- package/dist/uat/probes/cli.js +107 -0
- package/dist/uat/probes/cli.js.map +1 -0
- package/dist/uat/probes/http.d.ts +12 -0
- package/dist/uat/probes/http.js +139 -0
- package/dist/uat/probes/http.js.map +1 -0
- package/dist/uat/probes/index.d.ts +21 -0
- package/dist/uat/probes/index.js +30 -0
- package/dist/uat/probes/index.js.map +1 -0
- package/dist/uat/probes/integration.d.ts +18 -0
- package/dist/uat/probes/integration.js +188 -0
- package/dist/uat/probes/integration.js.map +1 -0
- package/dist/uat/probes/sql/config.d.ts +14 -0
- package/dist/uat/probes/sql/config.js +57 -0
- package/dist/uat/probes/sql/config.js.map +1 -0
- package/dist/uat/probes/sql/index.d.ts +29 -0
- package/dist/uat/probes/sql/index.js +43 -0
- package/dist/uat/probes/sql/index.js.map +1 -0
- package/dist/uat/probes/sql/mysql.d.ts +12 -0
- package/dist/uat/probes/sql/mysql.js +96 -0
- package/dist/uat/probes/sql/mysql.js.map +1 -0
- package/dist/uat/probes/sql/pg.d.ts +20 -0
- package/dist/uat/probes/sql/pg.js +102 -0
- package/dist/uat/probes/sql/pg.js.map +1 -0
- package/dist/uat/probes/sql/sqlite.d.ts +9 -0
- package/dist/uat/probes/sql/sqlite.js +58 -0
- package/dist/uat/probes/sql/sqlite.js.map +1 -0
- package/dist/uat/probes/sql/types.d.ts +46 -0
- package/dist/uat/probes/sql/types.js +10 -0
- package/dist/uat/probes/sql/types.js.map +1 -0
- package/dist/uat/probes/sql.d.ts +9 -0
- package/dist/uat/probes/sql.js +119 -0
- package/dist/uat/probes/sql.js.map +1 -0
- package/dist/uat/probes/ui.d.ts +19 -0
- package/dist/uat/probes/ui.js +244 -0
- package/dist/uat/probes/ui.js.map +1 -0
- package/dist/uat/prompt.d.ts +10 -0
- package/dist/uat/prompt.js +85 -0
- package/dist/uat/prompt.js.map +1 -0
- package/dist/uat/question.d.ts +50 -0
- package/dist/uat/question.js +139 -0
- package/dist/uat/question.js.map +1 -0
- package/dist/uat/rejection.d.ts +58 -0
- package/dist/uat/rejection.js +163 -0
- package/dist/uat/rejection.js.map +1 -0
- package/dist/uat/runner.d.ts +6 -0
- package/dist/uat/runner.js +96 -0
- package/dist/uat/runner.js.map +1 -0
- package/dist/uat/schema.d.ts +322 -0
- package/dist/uat/schema.js +189 -0
- package/dist/uat/schema.js.map +1 -0
- package/dist/uat/types.d.ts +268 -0
- package/dist/uat/types.js +18 -0
- package/dist/uat/types.js.map +1 -0
- package/dist/uat/uat.d.ts +89 -0
- package/dist/uat/uat.js +256 -0
- package/dist/uat/uat.js.map +1 -0
- package/dist/voice/index.d.ts +4 -0
- package/dist/voice/index.js +4 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/model.d.ts +23 -0
- package/dist/voice/model.js +46 -0
- package/dist/voice/model.js.map +1 -0
- package/dist/voice/pipe.d.ts +9 -0
- package/dist/voice/pipe.js +47 -0
- package/dist/voice/pipe.js.map +1 -0
- package/dist/voice/transcribe.d.ts +3 -0
- package/dist/voice/transcribe.js +43 -0
- package/dist/voice/transcribe.js.map +1 -0
- package/dist/voice/types.d.ts +26 -0
- package/dist/voice/types.js +9 -0
- package/dist/voice/types.js.map +1 -0
- package/dist/watch/daemon.d.ts +21 -0
- package/dist/watch/daemon.js +143 -0
- package/dist/watch/daemon.js.map +1 -0
- package/dist/watch/index.d.ts +4 -0
- package/dist/watch/index.js +3 -0
- package/dist/watch/index.js.map +1 -0
- package/dist/watch/regenerate.d.ts +25 -0
- package/dist/watch/regenerate.js +51 -0
- package/dist/watch/regenerate.js.map +1 -0
- package/package.json +75 -0
package/dist/cli/run.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { config as loadDotenv } from "dotenv";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { dirname, resolve } from "node:path";
|
|
5
|
+
import { harnessEnvPath, logger, normalizeProjectName, readMirrorRecord, } from "@devplusllc/harness-core";
|
|
6
|
+
import { Orchestrator } from "@devplusllc/harness-runtime";
|
|
7
|
+
import { DiscordFrontendAdapter } from "@devplusllc/harness-frontend-discord";
|
|
8
|
+
import { StubFrontendAdapter } from "@devplusllc/harness-frontend-stub";
|
|
9
|
+
const log = logger("cli.run");
|
|
10
|
+
function parseArgs(argv) {
|
|
11
|
+
const positional = [];
|
|
12
|
+
const flags = {};
|
|
13
|
+
for (let i = 0; i < argv.length; i++) {
|
|
14
|
+
const arg = argv[i];
|
|
15
|
+
if (arg === undefined)
|
|
16
|
+
continue;
|
|
17
|
+
if (arg.startsWith("--")) {
|
|
18
|
+
const key = arg.slice(2);
|
|
19
|
+
const next = argv[i + 1];
|
|
20
|
+
if (next !== undefined && !next.startsWith("--")) {
|
|
21
|
+
flags[key] = next;
|
|
22
|
+
i += 1;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
flags[key] = true;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
positional.push(arg);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return { positional, flags };
|
|
33
|
+
}
|
|
34
|
+
function usage() {
|
|
35
|
+
console.error("Usage: harness run --project <slug> [--frontend <name[,name...]>] [--repo-root <path>] [--no-orchestrator] [--bypass-tightener] [--default-tier <haiku|sonnet|opus>]\n" +
|
|
36
|
+
" --project project slug (matches `harness mirror init --project ...`)\n" +
|
|
37
|
+
" --frontend adapter name(s): discord | stub (default: discord)\n" +
|
|
38
|
+
" --repo-root override repo root (default: mirror path from state, then cwd)\n" +
|
|
39
|
+
" --no-orchestrator bring up adapters only; skip the FIFO + agent runner\n" +
|
|
40
|
+
" --bypass-tightener skip the spec tightener (Phase 7) — smoke convenience\n" +
|
|
41
|
+
" --default-tier implementer model tier (default: haiku)\n" +
|
|
42
|
+
"\n" +
|
|
43
|
+
"Brings up registered frontend adapters and (unless --no-orchestrator)\n" +
|
|
44
|
+
"the Phase 8 orchestrator, which tails .harness/inbox/<...>.json and\n" +
|
|
45
|
+
"dispatches one task at a time against the mirror checkout.");
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
function buildAdapter(args) {
|
|
49
|
+
const { name, repoRoot } = args;
|
|
50
|
+
switch (name) {
|
|
51
|
+
case "discord": {
|
|
52
|
+
const token = process.env["DISCORD_BOT_TOKEN"];
|
|
53
|
+
const guildId = process.env["DISCORD_GUILD_ID"];
|
|
54
|
+
if (!token || !guildId) {
|
|
55
|
+
throw new Error("discord adapter requires DISCORD_BOT_TOKEN and DISCORD_GUILD_ID in env (harness/.env)");
|
|
56
|
+
}
|
|
57
|
+
return new DiscordFrontendAdapter({
|
|
58
|
+
repoRoot,
|
|
59
|
+
token,
|
|
60
|
+
guildId,
|
|
61
|
+
ownerUserIdsEnv: process.env["DISCORD_OWNER_USER_IDS"],
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
case "stub":
|
|
65
|
+
return new StubFrontendAdapter({ repoRoot });
|
|
66
|
+
default:
|
|
67
|
+
throw new Error(`unknown frontend adapter: ${name}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function resolveRepoRoot(args) {
|
|
71
|
+
if (args.flag)
|
|
72
|
+
return resolve(args.flag);
|
|
73
|
+
const record = readMirrorRecord(args.project);
|
|
74
|
+
if (record)
|
|
75
|
+
return record.mirrorPath;
|
|
76
|
+
return process.cwd();
|
|
77
|
+
}
|
|
78
|
+
function loadEnvFiles() {
|
|
79
|
+
// Try, in order: ~/.local/harness/.env (operator-scoped, written by
|
|
80
|
+
// `harness init`), explicit .env at cwd, packages/harness/.env (when
|
|
81
|
+
// invoked from the monorepo root above the package), then the pkg's own
|
|
82
|
+
// .env (npm-link dev).
|
|
83
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
84
|
+
const pkgRoot = resolve(here, "..", "..");
|
|
85
|
+
const candidates = Array.from(new Set([
|
|
86
|
+
harnessEnvPath(),
|
|
87
|
+
resolve(process.cwd(), ".env"),
|
|
88
|
+
resolve(process.cwd(), "packages", "harness", ".env"),
|
|
89
|
+
resolve(pkgRoot, ".env"),
|
|
90
|
+
]));
|
|
91
|
+
const loaded = [];
|
|
92
|
+
for (const path of candidates) {
|
|
93
|
+
if (existsSync(path)) {
|
|
94
|
+
const result = loadDotenv({ path });
|
|
95
|
+
if (!result.error)
|
|
96
|
+
loaded.push(path);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return loaded;
|
|
100
|
+
}
|
|
101
|
+
export async function runCli(argv) {
|
|
102
|
+
const { flags } = parseArgs(argv);
|
|
103
|
+
const envFiles = loadEnvFiles();
|
|
104
|
+
if (envFiles.length === 0) {
|
|
105
|
+
log.warn("no .env loaded — adapters needing secrets will fail");
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
log.info({ envFiles }, "loaded env files");
|
|
109
|
+
}
|
|
110
|
+
const project = typeof flags["project"] === "string" ? flags["project"] : undefined;
|
|
111
|
+
if (!project)
|
|
112
|
+
usage();
|
|
113
|
+
const projectName = normalizeProjectName(project);
|
|
114
|
+
const repoRoot = resolveRepoRoot({
|
|
115
|
+
project: projectName,
|
|
116
|
+
...(typeof flags["repo-root"] === "string" ? { flag: flags["repo-root"] } : {}),
|
|
117
|
+
});
|
|
118
|
+
const frontendArg = typeof flags["frontend"] === "string" ? flags["frontend"] : "discord";
|
|
119
|
+
const adapterNames = frontendArg
|
|
120
|
+
.split(",")
|
|
121
|
+
.map((s) => s.trim())
|
|
122
|
+
.filter((s) => s.length > 0);
|
|
123
|
+
const adapters = adapterNames.map((name) => buildAdapter({ name, repoRoot }));
|
|
124
|
+
for (const adapter of adapters) {
|
|
125
|
+
await adapter.start();
|
|
126
|
+
log.info({ name: adapter.name }, "frontend adapter started");
|
|
127
|
+
}
|
|
128
|
+
const orchestratorEnabled = flags["no-orchestrator"] !== true;
|
|
129
|
+
const tierFlag = typeof flags["default-tier"] === "string" ? flags["default-tier"] : undefined;
|
|
130
|
+
const defaultTier = tierFlag === "haiku" || tierFlag === "sonnet" || tierFlag === "opus" ? tierFlag : "haiku";
|
|
131
|
+
let orchestrator;
|
|
132
|
+
if (orchestratorEnabled) {
|
|
133
|
+
orchestrator = new Orchestrator({
|
|
134
|
+
projectName,
|
|
135
|
+
repoRoot,
|
|
136
|
+
adapters,
|
|
137
|
+
defaultTier,
|
|
138
|
+
...(flags["bypass-tightener"] === true ? { bypassTightener: true } : {}),
|
|
139
|
+
});
|
|
140
|
+
await orchestrator.start();
|
|
141
|
+
log.info({ defaultTier }, "orchestrator started");
|
|
142
|
+
}
|
|
143
|
+
console.log(`harness run: project=${projectName} repoRoot=${repoRoot} adapters=${adapterNames.join(",")} orchestrator=${orchestratorEnabled ? defaultTier : "off"} (Ctrl-C to stop)`);
|
|
144
|
+
let shuttingDown = false;
|
|
145
|
+
const shutdown = async (signal) => {
|
|
146
|
+
if (shuttingDown)
|
|
147
|
+
return;
|
|
148
|
+
shuttingDown = true;
|
|
149
|
+
log.info({ signal }, "shutdown signal received");
|
|
150
|
+
if (orchestrator) {
|
|
151
|
+
try {
|
|
152
|
+
await orchestrator.stop();
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
log.error({ err: String(err) }, "orchestrator stop threw");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
for (const adapter of adapters) {
|
|
159
|
+
try {
|
|
160
|
+
await adapter.stop();
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
log.error({ err: String(err), adapter: adapter.name }, "adapter stop threw");
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
process.exit(0);
|
|
167
|
+
};
|
|
168
|
+
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
169
|
+
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
170
|
+
await new Promise(() => {
|
|
171
|
+
/* idle until signal */
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cairn scope <subcommand>` — scope-index commands.
|
|
3
|
+
*
|
|
4
|
+
* cairn scope rebuild [--repo <path>] — re-run mapper, rewrite scope-index.yaml
|
|
5
|
+
*
|
|
6
|
+
* Spec: BUILD_REPORT.md Gap 1 / DOCS_SPEC.md §3.8.
|
|
7
|
+
*/
|
|
8
|
+
export declare function scopeCli(argv: string[]): Promise<void>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `cairn scope <subcommand>` — scope-index commands.
|
|
3
|
+
*
|
|
4
|
+
* cairn scope rebuild [--repo <path>] — re-run mapper, rewrite scope-index.yaml
|
|
5
|
+
*
|
|
6
|
+
* Spec: BUILD_REPORT.md Gap 1 / DOCS_SPEC.md §3.8.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync } from "node:fs";
|
|
9
|
+
import { resolve } from "node:path";
|
|
10
|
+
import { rebuildScopeIndex } from "@isaacriehm/cairn-core";
|
|
11
|
+
function usage() {
|
|
12
|
+
console.error("Usage: cairn scope <subcommand>\n" +
|
|
13
|
+
" rebuild re-run mapper LLM and rewrite scope-index.yaml\n" +
|
|
14
|
+
" (--repo <path>? defaults to cwd)\n");
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
function parseRepoFlag(argv) {
|
|
18
|
+
const idx = argv.indexOf("--repo");
|
|
19
|
+
if (idx === -1)
|
|
20
|
+
return process.cwd();
|
|
21
|
+
const candidate = argv[idx + 1];
|
|
22
|
+
if (candidate === undefined || candidate.startsWith("--")) {
|
|
23
|
+
console.error("--repo requires a path argument");
|
|
24
|
+
process.exit(2);
|
|
25
|
+
}
|
|
26
|
+
return resolve(candidate);
|
|
27
|
+
}
|
|
28
|
+
async function rebuildHandler(argv) {
|
|
29
|
+
const repoRoot = parseRepoFlag(argv);
|
|
30
|
+
if (!existsSync(repoRoot)) {
|
|
31
|
+
console.error(`cairn scope rebuild: repo root does not exist: ${repoRoot}`);
|
|
32
|
+
process.exit(2);
|
|
33
|
+
}
|
|
34
|
+
if (!existsSync(`${repoRoot}/.cairn`)) {
|
|
35
|
+
console.error(`cairn scope rebuild: ${repoRoot} is not cairn-adopted (no .cairn/). Run \`cairn init\` first.`);
|
|
36
|
+
process.exit(2);
|
|
37
|
+
}
|
|
38
|
+
process.stdout.write("⬡ cairn scope rebuild — running mapper LLM…\n");
|
|
39
|
+
try {
|
|
40
|
+
const result = await rebuildScopeIndex({ repoRoot });
|
|
41
|
+
const relPath = result.path.startsWith(repoRoot)
|
|
42
|
+
? result.path.slice(repoRoot.length + 1)
|
|
43
|
+
: result.path;
|
|
44
|
+
process.stdout.write(` ✓ wrote ${relPath} — ${result.filesClassified} file${result.filesClassified === 1 ? "" : "s"} classified (${result.mapperDurationMs}ms, ${result.model})\n`);
|
|
45
|
+
process.exit(0);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
49
|
+
console.error(`cairn scope rebuild: mapper failed — ${msg}`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export async function scopeCli(argv) {
|
|
54
|
+
const sub = argv[0];
|
|
55
|
+
switch (sub) {
|
|
56
|
+
case "rebuild":
|
|
57
|
+
await rebuildHandler(argv.slice(1));
|
|
58
|
+
return;
|
|
59
|
+
case undefined:
|
|
60
|
+
default:
|
|
61
|
+
console.error(`cairn scope: unknown subcommand "${String(sub)}"`);
|
|
62
|
+
usage();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/cli/scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `harness task` — terminal-native task submit.
|
|
3
|
+
*
|
|
4
|
+
* Drops a `task` inbox row to the running daemon's mirror checkout. The
|
|
5
|
+
* orchestrator picks it up via chokidar (or the periodic poll). No
|
|
6
|
+
* Discord interaction required.
|
|
7
|
+
*
|
|
8
|
+
* Project resolution order:
|
|
9
|
+
* 1. --project <slug> flag
|
|
10
|
+
* 2. `.harness/config.yaml` in the current working directory
|
|
11
|
+
* 3. error out
|
|
12
|
+
*
|
|
13
|
+
* Operator workflow:
|
|
14
|
+
* cd ~/myapp
|
|
15
|
+
* harness task "build feature X" --acceptance "must do Y" --acceptance "must not Z"
|
|
16
|
+
* # daemon picks up; status visible via /status in Discord
|
|
17
|
+
*/
|
|
18
|
+
export declare function taskCli(argv: string[]): Promise<void>;
|
package/dist/cli/task.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `harness task` — terminal-native task submit.
|
|
3
|
+
*
|
|
4
|
+
* Drops a `task` inbox row to the running daemon's mirror checkout. The
|
|
5
|
+
* orchestrator picks it up via chokidar (or the periodic poll). No
|
|
6
|
+
* Discord interaction required.
|
|
7
|
+
*
|
|
8
|
+
* Project resolution order:
|
|
9
|
+
* 1. --project <slug> flag
|
|
10
|
+
* 2. `.harness/config.yaml` in the current working directory
|
|
11
|
+
* 3. error out
|
|
12
|
+
*
|
|
13
|
+
* Operator workflow:
|
|
14
|
+
* cd ~/myapp
|
|
15
|
+
* harness task "build feature X" --acceptance "must do Y" --acceptance "must not Z"
|
|
16
|
+
* # daemon picks up; status visible via /status in Discord
|
|
17
|
+
*/
|
|
18
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
19
|
+
import { resolve } from "node:path";
|
|
20
|
+
import { parse as parseYaml } from "yaml";
|
|
21
|
+
import { normalizeProjectName, readMirrorRecord, writeInboxRow, } from "@devplusllc/harness-core";
|
|
22
|
+
function parseArgs(argv) {
|
|
23
|
+
const positional = [];
|
|
24
|
+
const flags = {};
|
|
25
|
+
for (let i = 0; i < argv.length; i++) {
|
|
26
|
+
const arg = argv[i];
|
|
27
|
+
if (arg === undefined)
|
|
28
|
+
continue;
|
|
29
|
+
if (arg.startsWith("--")) {
|
|
30
|
+
const key = arg.slice(2);
|
|
31
|
+
const next = argv[i + 1];
|
|
32
|
+
if (next !== undefined && !next.startsWith("--")) {
|
|
33
|
+
const existing = flags[key];
|
|
34
|
+
if (Array.isArray(existing)) {
|
|
35
|
+
existing.push(next);
|
|
36
|
+
}
|
|
37
|
+
else if (typeof existing === "string") {
|
|
38
|
+
flags[key] = [existing, next];
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
flags[key] = next;
|
|
42
|
+
}
|
|
43
|
+
i += 1;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
flags[key] = true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
positional.push(arg);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return { positional, flags };
|
|
54
|
+
}
|
|
55
|
+
function usage() {
|
|
56
|
+
console.error("Usage: harness task <body> [options]\n" +
|
|
57
|
+
" <body> task description (free text)\n" +
|
|
58
|
+
" --project <slug> project slug (default: read .harness/config.yaml in cwd)\n" +
|
|
59
|
+
" --title <s> override title (default: first 80 chars of body)\n" +
|
|
60
|
+
" --acceptance <s> acceptance criterion (repeat for multiple)\n" +
|
|
61
|
+
" --ship-anyway bypass spec-tightener gate (logged)\n" +
|
|
62
|
+
" --target <glob> target path glob (repeat for multiple)\n" +
|
|
63
|
+
"\n" +
|
|
64
|
+
"Drops a task inbox row to the daemon's mirror. Orchestrator picks it\n" +
|
|
65
|
+
"up automatically (no Discord required). Watch progress via Discord\n" +
|
|
66
|
+
"/status or `tail -F .harness/runs/active/<run-id>/log.jsonl`.");
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
function readProjectFromCwd() {
|
|
70
|
+
const configPath = resolve(process.cwd(), ".harness", "config.yaml");
|
|
71
|
+
if (!existsSync(configPath))
|
|
72
|
+
return undefined;
|
|
73
|
+
try {
|
|
74
|
+
const text = readFileSync(configPath, "utf8");
|
|
75
|
+
const parsed = parseYaml(text);
|
|
76
|
+
const slug = parsed["slug"];
|
|
77
|
+
return typeof slug === "string" ? slug : undefined;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function asStringArray(v) {
|
|
84
|
+
if (Array.isArray(v))
|
|
85
|
+
return v;
|
|
86
|
+
if (typeof v === "string")
|
|
87
|
+
return [v];
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
export async function taskCli(argv) {
|
|
91
|
+
const { positional, flags } = parseArgs(argv);
|
|
92
|
+
if (flags["help"] === true || flags["h"] === true)
|
|
93
|
+
usage();
|
|
94
|
+
const body = positional.join(" ").trim();
|
|
95
|
+
if (body.length === 0) {
|
|
96
|
+
console.error("harness task: <body> is required\n");
|
|
97
|
+
usage();
|
|
98
|
+
}
|
|
99
|
+
const slugRaw = typeof flags["project"] === "string"
|
|
100
|
+
? flags["project"]
|
|
101
|
+
: readProjectFromCwd();
|
|
102
|
+
if (slugRaw === undefined || slugRaw.length === 0) {
|
|
103
|
+
console.error("harness task: --project required (no .harness/config.yaml in cwd)");
|
|
104
|
+
process.exit(2);
|
|
105
|
+
}
|
|
106
|
+
const project = normalizeProjectName(slugRaw);
|
|
107
|
+
const record = readMirrorRecord(project);
|
|
108
|
+
if (record === null) {
|
|
109
|
+
console.error(`harness task: no mirror record for project "${project}". Run "harness init" + "harness mirror init --project ${project}" first.`);
|
|
110
|
+
process.exit(2);
|
|
111
|
+
}
|
|
112
|
+
const titleRaw = typeof flags["title"] === "string" ? flags["title"] : undefined;
|
|
113
|
+
const title = titleRaw ?? body.slice(0, 80);
|
|
114
|
+
const acceptance = asStringArray(flags["acceptance"]);
|
|
115
|
+
const targetGlobs = asStringArray(flags["target"]);
|
|
116
|
+
const shipAnyway = flags["ship-anyway"] === true;
|
|
117
|
+
const taskPayload = {
|
|
118
|
+
task: {
|
|
119
|
+
rawText: body,
|
|
120
|
+
intent: "code_task",
|
|
121
|
+
authorId: "cli",
|
|
122
|
+
receivedAt: new Date().toISOString(),
|
|
123
|
+
},
|
|
124
|
+
title,
|
|
125
|
+
...(acceptance.length > 0 ? { acceptance_criteria: acceptance } : {}),
|
|
126
|
+
...(targetGlobs.length > 0 ? { target_path_globs: targetGlobs } : {}),
|
|
127
|
+
...(shipAnyway ? { ship_anyway: true } : {}),
|
|
128
|
+
};
|
|
129
|
+
const file = await writeInboxRow({
|
|
130
|
+
repoRoot: record.mirrorPath,
|
|
131
|
+
source: "cli",
|
|
132
|
+
kind: "task",
|
|
133
|
+
payload: taskPayload,
|
|
134
|
+
});
|
|
135
|
+
process.stdout.write(`task queued for project "${project}"\n inbox: ${file}\n title: ${title}\n body: ${body.slice(0, 200)}${body.length > 200 ? "…" : ""}\n acceptance: ${acceptance.length}\n ship-anyway: ${shipAnyway}\n`);
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/cli/task.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function watchCli(argv: string[]): Promise<void>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { logger, normalizeProjectName, readMirrorRecord } from "@devplusllc/harness-core";
|
|
3
|
+
import { startDaemon } from "@devplusllc/harness-runtime";
|
|
4
|
+
const log = logger("cli.watch");
|
|
5
|
+
function parseArgs(argv) {
|
|
6
|
+
const positional = [];
|
|
7
|
+
const flags = {};
|
|
8
|
+
for (let i = 0; i < argv.length; i++) {
|
|
9
|
+
const arg = argv[i];
|
|
10
|
+
if (arg === undefined)
|
|
11
|
+
continue;
|
|
12
|
+
if (arg.startsWith("--")) {
|
|
13
|
+
const key = arg.slice(2);
|
|
14
|
+
const next = argv[i + 1];
|
|
15
|
+
if (next !== undefined && !next.startsWith("--")) {
|
|
16
|
+
flags[key] = next;
|
|
17
|
+
i += 1;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
flags[key] = true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
positional.push(arg);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return { positional, flags };
|
|
28
|
+
}
|
|
29
|
+
function usage() {
|
|
30
|
+
console.error("Usage: harness watch --project <name> [--repo-root <path>] [--debounce-ms <n>]\n" +
|
|
31
|
+
" --project project slug (matches `harness mirror init --project ...`)\n" +
|
|
32
|
+
" --repo-root target dir to watch (default: mirror path from state)\n" +
|
|
33
|
+
" --debounce-ms debounce window before regen fires (default: 500)");
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
export async function watchCli(argv) {
|
|
37
|
+
const { flags } = parseArgs(argv);
|
|
38
|
+
const project = typeof flags["project"] === "string" ? flags["project"] : undefined;
|
|
39
|
+
if (project === undefined)
|
|
40
|
+
usage();
|
|
41
|
+
const projectName = normalizeProjectName(project);
|
|
42
|
+
const debounceMs = typeof flags["debounce-ms"] === "string" ? Number.parseInt(flags["debounce-ms"], 10) : 500;
|
|
43
|
+
let repoRoot;
|
|
44
|
+
if (typeof flags["repo-root"] === "string") {
|
|
45
|
+
repoRoot = resolve(flags["repo-root"]);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const record = readMirrorRecord(projectName);
|
|
49
|
+
if (!record) {
|
|
50
|
+
console.error(`No mirror record for "${projectName}". Run \`harness mirror init\` first or pass --repo-root explicitly.`);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
repoRoot = record.mirrorPath;
|
|
54
|
+
}
|
|
55
|
+
const handle = await startDaemon({
|
|
56
|
+
projectName,
|
|
57
|
+
repoRoot,
|
|
58
|
+
debounceMs: Number.isFinite(debounceMs) ? debounceMs : 500,
|
|
59
|
+
});
|
|
60
|
+
const shutdown = async (signal) => {
|
|
61
|
+
log.info({ signal }, "shutdown signal received");
|
|
62
|
+
await handle.stop();
|
|
63
|
+
process.exit(0);
|
|
64
|
+
};
|
|
65
|
+
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
66
|
+
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
67
|
+
console.log(`harness watch: project=${projectName} root=${repoRoot} (Ctrl-C to stop)`);
|
|
68
|
+
// Keep the event loop alive until a signal arrives.
|
|
69
|
+
await new Promise(() => {
|
|
70
|
+
/* never resolves */
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* runDecisionCapture — orchestrates the full flow:
|
|
3
|
+
*
|
|
4
|
+
* raw_text → extract → write draft → adapter dialog 🟢/🟡/🔴
|
|
5
|
+
* ├── 🟢 commit → acceptDraft → ledger
|
|
6
|
+
* ├── 🟡 edit → leave draft + return correction text
|
|
7
|
+
* └── 🔴 reject → rejectDraft → no record
|
|
8
|
+
*
|
|
9
|
+
* The dialog is supplied by the caller (typically a FrontendAdapter's
|
|
10
|
+
* requestDialog) so this entry point works equally well in tests with the
|
|
11
|
+
* stub adapter, in CLI with a TTY prompt, and in Discord with the real
|
|
12
|
+
* adapter.
|
|
13
|
+
*/
|
|
14
|
+
import type { FrontendAdapter } from "../frontend/index.js";
|
|
15
|
+
import type { ClaudeTier } from "../claude/index.js";
|
|
16
|
+
import { runDecisionExtractor } from "./extractor.js";
|
|
17
|
+
import { proposeStrictAssertions } from "./refinement.js";
|
|
18
|
+
import type { DecisionCaptureResult } from "./types.js";
|
|
19
|
+
export interface RunDecisionCaptureArgs {
|
|
20
|
+
/** Repo root for the mirror checkout. */
|
|
21
|
+
repoRoot: string;
|
|
22
|
+
/** Raw operator text. */
|
|
23
|
+
rawText: string;
|
|
24
|
+
/** Operator id. */
|
|
25
|
+
authorId: string;
|
|
26
|
+
/** Source — `discord:slash:/direction` or `discord:free_text` etc. */
|
|
27
|
+
source: string;
|
|
28
|
+
/** ISO timestamp the message was received. Default = now. */
|
|
29
|
+
receivedAt?: string;
|
|
30
|
+
/** Tier for the extractor. Default = haiku. */
|
|
31
|
+
tier?: ClaudeTier;
|
|
32
|
+
/** Channel id to thread the confirm dialog through. */
|
|
33
|
+
channelId?: string;
|
|
34
|
+
/** Adapter that owns the confirm dialog. */
|
|
35
|
+
adapter: FrontendAdapter;
|
|
36
|
+
/** Confirm-dialog timeout. Default 60_000 ms. */
|
|
37
|
+
confirmTimeoutMs?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Optional: override the extractor entry point. Smokes inject a stub so
|
|
40
|
+
* the smoke runs without burning claude quota when only the
|
|
41
|
+
* draft/confirm/ledger flow needs verifying.
|
|
42
|
+
*/
|
|
43
|
+
extractorOverride?: typeof runDecisionExtractor;
|
|
44
|
+
/**
|
|
45
|
+
* Skip the post-commit refinement step. Defaults to false. The
|
|
46
|
+
* orchestrator's `bypassRefinement` mirrors this for production runs;
|
|
47
|
+
* smokes that don't care about refinement can flip it on.
|
|
48
|
+
*/
|
|
49
|
+
bypassRefinement?: boolean;
|
|
50
|
+
/** Tier for the refinement proposer. Default = haiku. */
|
|
51
|
+
refinementTier?: ClaudeTier;
|
|
52
|
+
/** Refinement dialog timeout. Default 60_000 ms. */
|
|
53
|
+
refinementDialogTimeoutMs?: number;
|
|
54
|
+
/** Smokes inject a stub proposer to avoid burning claude quota. */
|
|
55
|
+
refinementProposerOverride?: typeof proposeStrictAssertions;
|
|
56
|
+
}
|
|
57
|
+
export declare function runDecisionCapture(args: RunDecisionCaptureArgs): Promise<DecisionCaptureResult>;
|