@telora/daemon 0.19.47 → 0.19.74
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/build-info.json +6 -3
- package/dist/assembly-engine.d.ts +9 -0
- package/dist/assembly-engine.d.ts.map +1 -1
- package/dist/assembly-engine.js.map +1 -1
- package/dist/audit-hooks.js +1 -1
- package/dist/branch-status.js +2 -2
- package/dist/branch-status.js.map +1 -1
- package/dist/ci-sensor-loop.d.ts +47 -0
- package/dist/ci-sensor-loop.d.ts.map +1 -0
- package/dist/ci-sensor-loop.js +116 -0
- package/dist/ci-sensor-loop.js.map +1 -0
- package/dist/ci-status-git.d.ts +52 -0
- package/dist/ci-status-git.d.ts.map +1 -0
- package/dist/ci-status-git.js +86 -0
- package/dist/ci-status-git.js.map +1 -0
- package/dist/ci-status.d.ts +122 -0
- package/dist/ci-status.d.ts.map +1 -0
- package/dist/ci-status.js +114 -0
- package/dist/ci-status.js.map +1 -0
- package/dist/cli/connect/agents.d.ts +24 -0
- package/dist/cli/connect/agents.d.ts.map +1 -0
- package/dist/cli/connect/agents.js +65 -0
- package/dist/cli/connect/agents.js.map +1 -0
- package/dist/cli/connect/claude.d.ts +31 -0
- package/dist/cli/connect/claude.d.ts.map +1 -0
- package/dist/cli/connect/claude.js +104 -0
- package/dist/cli/connect/claude.js.map +1 -0
- package/dist/cli/connect/cline.d.ts +37 -0
- package/dist/cli/connect/cline.d.ts.map +1 -0
- package/dist/cli/connect/cline.js +115 -0
- package/dist/cli/connect/cline.js.map +1 -0
- package/dist/cli/connect/codex.d.ts +44 -0
- package/dist/cli/connect/codex.d.ts.map +1 -0
- package/dist/cli/connect/codex.js +111 -0
- package/dist/cli/connect/codex.js.map +1 -0
- package/dist/cli/connect/ide.d.ts +69 -0
- package/dist/cli/connect/ide.d.ts.map +1 -0
- package/dist/cli/connect/ide.js +134 -0
- package/dist/cli/connect/ide.js.map +1 -0
- package/dist/cli/connect/scaffolding.d.ts +31 -0
- package/dist/cli/connect/scaffolding.d.ts.map +1 -0
- package/dist/cli/connect/scaffolding.js +52 -0
- package/dist/cli/connect/scaffolding.js.map +1 -0
- package/dist/cli/connect/shared.d.ts +30 -0
- package/dist/cli/connect/shared.d.ts.map +1 -0
- package/dist/cli/connect/shared.js +11 -0
- package/dist/cli/connect/shared.js.map +1 -0
- package/dist/cli/connect.d.ts +9 -210
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +10 -526
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/open.js +2 -2
- package/dist/completion/event.d.ts +2 -0
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +19 -2
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/merge-phase.d.ts +3 -0
- package/dist/completion/merge-phase.d.ts.map +1 -1
- package/dist/completion/merge-phase.js +35 -3
- package/dist/completion/merge-phase.js.map +1 -1
- package/dist/completion/read-only-pristine.d.ts +1 -1
- package/dist/completion/read-only-pristine.d.ts.map +1 -1
- package/dist/completion/read-only-pristine.js +1 -1
- package/dist/completion/read-only-pristine.js.map +1 -1
- package/dist/completion/review-exit-phase.d.ts +30 -3
- package/dist/completion/review-exit-phase.d.ts.map +1 -1
- package/dist/completion/review-exit-phase.js +203 -15
- package/dist/completion/review-exit-phase.js.map +1 -1
- package/dist/completion/status-advance-phase.js +1 -1
- package/dist/completion/status-advance-phase.js.map +1 -1
- package/dist/completion/team-completion.d.ts.map +1 -1
- package/dist/completion/team-completion.js +22 -2
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/completion/team-lifecycle.js +1 -1
- package/dist/completion/terminated-work-reconcile.js +1 -1
- package/dist/completion/terminated-work-reconcile.js.map +1 -1
- package/dist/condition-evaluators.d.ts +41 -2
- package/dist/condition-evaluators.d.ts.map +1 -1
- package/dist/condition-evaluators.js +37 -288
- package/dist/condition-evaluators.js.map +1 -1
- package/dist/context-audit.d.ts +1 -1
- package/dist/context-audit.d.ts.map +1 -1
- package/dist/context-lock.d.ts +1 -1
- package/dist/context-lock.d.ts.map +1 -1
- package/dist/control-state.d.ts +2 -2
- package/dist/control-state.d.ts.map +1 -1
- package/dist/control-state.js +4 -3
- package/dist/control-state.js.map +1 -1
- package/dist/daemon-process.d.ts +1 -1
- package/dist/daemon-process.d.ts.map +1 -1
- package/dist/delivery-advance-block.d.ts +1 -1
- package/dist/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery-advance-block.js +1 -1
- package/dist/delivery-advance-block.js.map +1 -1
- package/dist/delivery-lifecycle.js +1 -1
- package/dist/delivery-reconciler-shadow.d.ts +1 -1
- package/dist/delivery-reconciler-shadow.d.ts.map +1 -1
- package/dist/delivery-reconciler-shadow.js +1 -1
- package/dist/delivery-reconciler-shadow.js.map +1 -1
- package/dist/directive-executor.js +1 -1
- package/dist/directive-executor.js.map +1 -1
- package/dist/drift-eval-loop.d.ts.map +1 -1
- package/dist/drift-eval-loop.js +6 -14
- package/dist/drift-eval-loop.js.map +1 -1
- package/dist/escalations.d.ts +1 -1
- package/dist/escalations.d.ts.map +1 -1
- package/dist/escalations.js +1 -1
- package/dist/escalations.js.map +1 -1
- package/dist/evaluation-context.d.ts +2 -33
- package/dist/evaluation-context.d.ts.map +1 -1
- package/dist/evaluation-context.js +2 -56
- package/dist/evaluation-context.js.map +1 -1
- package/dist/focus-engine.d.ts +14 -5
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +35 -289
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +10 -791
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +42 -1568
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-lifecycle.js +2 -2
- package/dist/focus-lifecycle.js.map +1 -1
- package/dist/focus-loop-registry.d.ts +52 -0
- package/dist/focus-loop-registry.d.ts.map +1 -0
- package/dist/focus-loop-registry.js +328 -0
- package/dist/focus-loop-registry.js.map +1 -0
- package/dist/focus-merge.d.ts +1 -1
- package/dist/focus-merge.d.ts.map +1 -1
- package/dist/focus-merge.js +3 -3
- package/dist/focus-merge.js.map +1 -1
- package/dist/focus-phase.d.ts +4 -0
- package/dist/focus-phase.d.ts.map +1 -1
- package/dist/focus-phase.js +3 -3
- package/dist/focus-phase.js.map +1 -1
- package/dist/focus-stage-lifecycle/planning-release.d.ts +197 -0
- package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/planning-release.js +312 -0
- package/dist/focus-stage-lifecycle/planning-release.js.map +1 -0
- package/dist/focus-stage-lifecycle/review-convergence.d.ts +133 -0
- package/dist/focus-stage-lifecycle/review-convergence.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/review-convergence.js +235 -0
- package/dist/focus-stage-lifecycle/review-convergence.js.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts +133 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.d.ts.map +1 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.js +365 -0
- package/dist/focus-stage-lifecycle/wedge-watchdog.js.map +1 -0
- package/dist/focus-stage-lifecycle.d.ts +22 -421
- package/dist/focus-stage-lifecycle.d.ts.map +1 -1
- package/dist/focus-stage-lifecycle.js +24 -832
- package/dist/focus-stage-lifecycle.js.map +1 -1
- package/dist/{git-activity.d.ts → git/activity.d.ts} +1 -1
- package/dist/git/activity.d.ts.map +1 -0
- package/dist/{git-activity.js → git/activity.js} +2 -2
- package/dist/git/activity.js.map +1 -0
- package/dist/{git-branch.d.ts → git/branch.d.ts} +2 -2
- package/dist/git/branch.d.ts.map +1 -0
- package/dist/{git-branch.js → git/branch.js} +2 -2
- package/dist/git/branch.js.map +1 -0
- package/dist/{git-fetch.d.ts → git/fetch.d.ts} +2 -2
- package/dist/git/fetch.d.ts.map +1 -0
- package/dist/{git-fetch.js → git/fetch.js} +1 -1
- package/dist/git/fetch.js.map +1 -0
- package/dist/{git-genesis.d.ts → git/genesis.d.ts} +3 -3
- package/dist/git/genesis.d.ts.map +1 -0
- package/dist/{git-genesis.js → git/genesis.js} +5 -5
- package/dist/git/genesis.js.map +1 -0
- package/dist/git/index.d.ts +36 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +36 -0
- package/dist/git/index.js.map +1 -0
- package/dist/{git-integration.d.ts → git/integration.d.ts} +2 -2
- package/dist/git/integration.d.ts.map +1 -0
- package/dist/{git-integration.js → git/integration.js} +4 -4
- package/dist/git/integration.js.map +1 -0
- package/dist/{git-merge-helpers.d.ts → git/merge-helpers.d.ts} +3 -3
- package/dist/git/merge-helpers.d.ts.map +1 -0
- package/dist/{git-merge-helpers.js → git/merge-helpers.js} +3 -3
- package/dist/git/merge-helpers.js.map +1 -0
- package/dist/{git-merge-lock.d.ts → git/merge-lock.d.ts} +1 -1
- package/dist/git/merge-lock.d.ts.map +1 -0
- package/dist/{git-merge-lock.js → git/merge-lock.js} +1 -1
- package/dist/git/merge-lock.js.map +1 -0
- package/dist/{git-merge-strategies.d.ts → git/merge-strategies.d.ts} +2 -2
- package/dist/git/merge-strategies.d.ts.map +1 -0
- package/dist/{git-merge-strategies.js → git/merge-strategies.js} +3 -3
- package/dist/git/merge-strategies.js.map +1 -0
- package/dist/{git-merge.d.ts → git/merge.d.ts} +4 -4
- package/dist/git/merge.d.ts.map +1 -0
- package/dist/{git-merge.js → git/merge.js} +4 -4
- package/dist/git/merge.js.map +1 -0
- package/dist/{git-state-detector.d.ts → git/state-detector.d.ts} +2 -2
- package/dist/git/state-detector.d.ts.map +1 -0
- package/dist/{git-state-detector.js → git/state-detector.js} +7 -7
- package/dist/git/state-detector.js.map +1 -0
- package/dist/{git-types.d.ts → git/types.d.ts} +2 -2
- package/dist/git/types.d.ts.map +1 -0
- package/dist/{git-types.js → git/types.js} +1 -1
- package/dist/git/types.js.map +1 -0
- package/dist/{git-utils.d.ts → git/utils.d.ts} +1 -1
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/{git-utils.js → git/utils.js} +2 -2
- package/dist/git/utils.js.map +1 -0
- package/dist/git.d.ts +5 -5
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +10 -10
- package/dist/git.js.map +1 -1
- package/dist/guard-engine.d.ts +3 -2
- package/dist/guard-engine.d.ts.map +1 -1
- package/dist/guard-engine.js +2 -2
- package/dist/guard-engine.js.map +1 -1
- package/dist/install-probe-tick.d.ts +63 -0
- package/dist/install-probe-tick.d.ts.map +1 -0
- package/dist/install-probe-tick.js +137 -0
- package/dist/install-probe-tick.js.map +1 -0
- package/dist/install-probe.d.ts +115 -0
- package/dist/install-probe.d.ts.map +1 -0
- package/dist/install-probe.js +197 -0
- package/dist/install-probe.js.map +1 -0
- package/dist/listener-auto-advance.d.ts.map +1 -1
- package/dist/listener-auto-advance.js +31 -0
- package/dist/listener-auto-advance.js.map +1 -1
- package/dist/listener.js +5 -5
- package/dist/listener.js.map +1 -1
- package/dist/{loop-context-audit-pass.d.ts → loops/context-audit-pass.d.ts} +4 -4
- package/dist/loops/context-audit-pass.d.ts.map +1 -0
- package/dist/{loop-context-audit-pass.js → loops/context-audit-pass.js} +7 -7
- package/dist/loops/context-audit-pass.js.map +1 -0
- package/dist/{loop-engine-types.d.ts → loops/engine-types.d.ts} +1 -1
- package/dist/loops/engine-types.d.ts.map +1 -0
- package/dist/{loop-engine-types.js → loops/engine-types.js} +1 -1
- package/dist/loops/engine-types.js.map +1 -0
- package/dist/{loop-engine.d.ts → loops/engine.d.ts} +6 -6
- package/dist/loops/engine.d.ts.map +1 -0
- package/dist/{loop-engine.js → loops/engine.js} +13 -13
- package/dist/loops/engine.js.map +1 -0
- package/dist/{loop-event-bus.d.ts → loops/event-bus.d.ts} +1 -1
- package/dist/loops/event-bus.d.ts.map +1 -0
- package/dist/{loop-event-bus.js → loops/event-bus.js} +1 -1
- package/dist/loops/event-bus.js.map +1 -0
- package/dist/loops/index.d.ts +33 -0
- package/dist/loops/index.d.ts.map +1 -0
- package/dist/loops/index.js +32 -0
- package/dist/loops/index.js.map +1 -0
- package/dist/{loop-llm-client.d.ts → loops/llm-client.d.ts} +3 -3
- package/dist/loops/llm-client.d.ts.map +1 -0
- package/dist/{loop-llm-client.js → loops/llm-client.js} +3 -3
- package/dist/loops/llm-client.js.map +1 -0
- package/dist/{loop-llm-flag.d.ts → loops/llm-flag.d.ts} +1 -1
- package/dist/loops/llm-flag.d.ts.map +1 -0
- package/dist/{loop-llm-flag.js → loops/llm-flag.js} +1 -1
- package/dist/loops/llm-flag.js.map +1 -0
- package/dist/{loop-operational-block.d.ts → loops/operational-block.d.ts} +1 -1
- package/dist/loops/operational-block.d.ts.map +1 -0
- package/dist/{loop-operational-block.js → loops/operational-block.js} +1 -1
- package/dist/loops/operational-block.js.map +1 -0
- package/dist/{loop-prompt-builder.d.ts → loops/prompt-builder.d.ts} +2 -2
- package/dist/loops/prompt-builder.d.ts.map +1 -0
- package/dist/{loop-prompt-builder.js → loops/prompt-builder.js} +1 -1
- package/dist/loops/prompt-builder.js.map +1 -0
- package/dist/{loop-variance.d.ts → loops/variance.d.ts} +1 -1
- package/dist/loops/variance.d.ts.map +1 -0
- package/dist/{loop-variance.js → loops/variance.js} +1 -1
- package/dist/loops/variance.js.map +1 -0
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +4 -3
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/merge-detector.js +2 -2
- package/dist/merge-detector.js.map +1 -1
- package/dist/{nexus-endpoint-clearance.d.ts → nexus/endpoint-clearance.d.ts} +2 -2
- package/dist/nexus/endpoint-clearance.d.ts.map +1 -0
- package/dist/{nexus-endpoint-clearance.js → nexus/endpoint-clearance.js} +2 -2
- package/dist/nexus/endpoint-clearance.js.map +1 -0
- package/dist/{nexus-escalation-bridge.d.ts → nexus/escalation-bridge.d.ts} +1 -1
- package/dist/nexus/escalation-bridge.d.ts.map +1 -0
- package/dist/{nexus-escalation-bridge.js → nexus/escalation-bridge.js} +2 -2
- package/dist/nexus/escalation-bridge.js.map +1 -0
- package/dist/{nexus-incoming.d.ts → nexus/incoming.d.ts} +2 -2
- package/dist/nexus/incoming.d.ts.map +1 -0
- package/dist/{nexus-incoming.js → nexus/incoming.js} +2 -2
- package/dist/nexus/incoming.js.map +1 -0
- package/dist/nexus/index.d.ts +20 -0
- package/dist/nexus/index.d.ts.map +1 -0
- package/dist/nexus/index.js +20 -0
- package/dist/nexus/index.js.map +1 -0
- package/dist/{nexus-intake-spawn.d.ts → nexus/intake-spawn.d.ts} +3 -3
- package/dist/nexus/intake-spawn.d.ts.map +1 -0
- package/dist/{nexus-intake-spawn.js → nexus/intake-spawn.js} +1 -1
- package/dist/nexus/intake-spawn.js.map +1 -0
- package/dist/{nexus-intake.d.ts → nexus/intake.d.ts} +2 -2
- package/dist/nexus/intake.d.ts.map +1 -0
- package/dist/{nexus-intake.js → nexus/intake.js} +4 -4
- package/dist/nexus/intake.js.map +1 -0
- package/dist/{nexus-return.d.ts → nexus/return.d.ts} +3 -3
- package/dist/nexus/return.d.ts.map +1 -0
- package/dist/{nexus-return.js → nexus/return.js} +4 -4
- package/dist/nexus/return.js.map +1 -0
- package/dist/otlp/index.d.ts +19 -0
- package/dist/otlp/index.d.ts.map +1 -0
- package/dist/otlp/index.js +19 -0
- package/dist/otlp/index.js.map +1 -0
- package/dist/{otlp-log-parser.d.ts → otlp/log-parser.d.ts} +2 -2
- package/dist/otlp/log-parser.d.ts.map +1 -0
- package/dist/{otlp-log-parser.js → otlp/log-parser.js} +5 -6
- package/dist/otlp/log-parser.js.map +1 -0
- package/dist/{otlp-metric-parser.d.ts → otlp/metric-parser.d.ts} +2 -2
- package/dist/otlp/metric-parser.d.ts.map +1 -0
- package/dist/{otlp-metric-parser.js → otlp/metric-parser.js} +4 -5
- package/dist/otlp/metric-parser.js.map +1 -0
- package/dist/{otlp-port-manager.d.ts → otlp/port-manager.d.ts} +1 -1
- package/dist/otlp/port-manager.d.ts.map +1 -0
- package/dist/{otlp-port-manager.js → otlp/port-manager.js} +1 -1
- package/dist/otlp/port-manager.js.map +1 -0
- package/dist/{otlp-receiver.d.ts → otlp/receiver.d.ts} +2 -2
- package/dist/otlp/receiver.d.ts.map +1 -0
- package/dist/{otlp-receiver.js → otlp/receiver.js} +5 -33
- package/dist/otlp/receiver.js.map +1 -0
- package/dist/{otlp-types.d.ts → otlp/types.d.ts} +1 -9
- package/dist/otlp/types.d.ts.map +1 -0
- package/dist/{otlp-types.js → otlp/types.js} +1 -27
- package/dist/otlp/types.js.map +1 -0
- package/dist/pipeline-config.d.ts +1 -1
- package/dist/{prd-controller.d.ts → prd/controller.d.ts} +7 -7
- package/dist/prd/controller.d.ts.map +1 -0
- package/dist/{prd-controller.js → prd/controller.js} +11 -11
- package/dist/prd/controller.js.map +1 -0
- package/dist/{prd-divergence.d.ts → prd/divergence.d.ts} +2 -2
- package/dist/prd/divergence.d.ts.map +1 -0
- package/dist/{prd-divergence.js → prd/divergence.js} +1 -1
- package/dist/prd/divergence.js.map +1 -0
- package/dist/{prd-focus-pushdown.d.ts → prd/focus-pushdown.d.ts} +2 -2
- package/dist/prd/focus-pushdown.d.ts.map +1 -0
- package/dist/{prd-focus-pushdown.js → prd/focus-pushdown.js} +3 -3
- package/dist/prd/focus-pushdown.js.map +1 -0
- package/dist/{prd-frontier.d.ts → prd/frontier.d.ts} +2 -2
- package/dist/prd/frontier.d.ts.map +1 -0
- package/dist/{prd-frontier.js → prd/frontier.js} +1 -1
- package/dist/prd/frontier.js.map +1 -0
- package/dist/prd/index.d.ts +26 -0
- package/dist/prd/index.d.ts.map +1 -0
- package/dist/prd/index.js +25 -0
- package/dist/prd/index.js.map +1 -0
- package/dist/{prd-steward.d.ts → prd/steward.d.ts} +4 -4
- package/dist/prd/steward.d.ts.map +1 -0
- package/dist/{prd-steward.js → prd/steward.js} +4 -4
- package/dist/prd/steward.js.map +1 -0
- package/dist/{prd-viability.d.ts → prd/viability.d.ts} +2 -2
- package/dist/prd/viability.d.ts.map +1 -0
- package/dist/{prd-viability.js → prd/viability.js} +1 -1
- package/dist/prd/viability.js.map +1 -0
- package/dist/product-scaffold.js +2 -2
- package/dist/product-scaffold.js.map +1 -1
- package/dist/prompt-sections/persona-sections.d.ts +12 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -1
- package/dist/prompt-sections/persona-sections.js +29 -2
- package/dist/prompt-sections/persona-sections.js.map +1 -1
- package/dist/queries/context-lock-queries.js +1 -1
- package/dist/queries/context-lock-queries.js.map +1 -1
- package/dist/queries/deliveries.d.ts +15 -0
- package/dist/queries/deliveries.d.ts.map +1 -1
- package/dist/queries/deliveries.js +2 -0
- package/dist/queries/deliveries.js.map +1 -1
- package/dist/queries/focuses.d.ts +17 -0
- package/dist/queries/focuses.d.ts.map +1 -1
- package/dist/queries/focuses.js +27 -0
- package/dist/queries/focuses.js.map +1 -1
- package/dist/queries/schemas.d.ts +4 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +8 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/reality-pole.js +1 -1
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -1
- package/dist/resolvers/git-diff-against-base.js +4 -1
- package/dist/resolvers/git-diff-against-base.js.map +1 -1
- package/dist/resolvers/prd-context.js +1 -1
- package/dist/sensor-sweep.js +1 -1
- package/dist/spawn/model-routing.d.ts +277 -0
- package/dist/spawn/model-routing.d.ts.map +1 -0
- package/dist/spawn/model-routing.js +464 -0
- package/dist/spawn/model-routing.js.map +1 -0
- package/dist/spawn/process-spawn.d.ts +128 -0
- package/dist/spawn/process-spawn.d.ts.map +1 -0
- package/dist/spawn/process-spawn.js +378 -0
- package/dist/spawn/process-spawn.js.map +1 -0
- package/dist/spawn/prompt-assembly.d.ts +143 -0
- package/dist/spawn/prompt-assembly.d.ts.map +1 -0
- package/dist/spawn/prompt-assembly.js +263 -0
- package/dist/spawn/prompt-assembly.js.map +1 -0
- package/dist/spawn/shared.d.ts +72 -0
- package/dist/spawn/shared.d.ts.map +1 -0
- package/dist/spawn/shared.js +14 -0
- package/dist/spawn/shared.js.map +1 -0
- package/dist/spawn/spawn-decision.d.ts +189 -0
- package/dist/spawn/spawn-decision.d.ts.map +1 -0
- package/dist/spawn/spawn-decision.js +361 -0
- package/dist/spawn/spawn-decision.js.map +1 -0
- package/dist/spawn/worktree-session.d.ts +105 -0
- package/dist/spawn/worktree-session.d.ts.map +1 -0
- package/dist/spawn/worktree-session.js +216 -0
- package/dist/spawn/worktree-session.js.map +1 -0
- package/dist/spawner/lifecycle.js +2 -2
- package/dist/spawner/lifecycle.js.map +1 -1
- package/dist/spawner/resolution.js +1 -1
- package/dist/stall-detector-config.d.ts +4 -0
- package/dist/stall-detector-config.d.ts.map +1 -1
- package/dist/stall-detector-config.js +6 -0
- package/dist/stall-detector-config.js.map +1 -1
- package/dist/state-cascade.js +1 -1
- package/dist/state-cascade.js.map +1 -1
- package/dist/trigger-executor.d.ts +5 -9
- package/dist/trigger-executor.d.ts.map +1 -1
- package/dist/trigger-executor.js +14 -36
- package/dist/trigger-executor.js.map +1 -1
- package/dist/types/focus.d.ts +13 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/workflow.d.ts +1 -3
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/unified-engine-lifecycle.js +1 -1
- package/dist/unified-init.d.ts +3 -3
- package/dist/unified-init.d.ts.map +1 -1
- package/dist/unified-init.js +9 -25
- package/dist/unified-init.js.map +1 -1
- package/dist/unified-shell.d.ts +3 -3
- package/dist/unified-shell.js +4 -4
- package/dist/unified-shell.js.map +1 -1
- package/dist/verification-engine.d.ts.map +1 -1
- package/dist/verification-engine.js +15 -0
- package/dist/verification-engine.js.map +1 -1
- package/dist/{worktree-focus.d.ts → worktree/focus.d.ts} +2 -2
- package/dist/worktree/focus.d.ts.map +1 -0
- package/dist/{worktree-focus.js → worktree/focus.js} +7 -7
- package/dist/worktree/focus.js.map +1 -0
- package/dist/worktree/index.d.ts +16 -0
- package/dist/worktree/index.d.ts.map +1 -0
- package/dist/worktree/index.js +16 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/{worktree-safety.d.ts → worktree/safety.d.ts} +1 -1
- package/dist/worktree/safety.d.ts.map +1 -0
- package/dist/{worktree-safety.js → worktree/safety.js} +2 -2
- package/dist/worktree/safety.js.map +1 -0
- package/dist/{worktree-state.d.ts → worktree/state.d.ts} +1 -1
- package/dist/worktree/state.d.ts.map +1 -0
- package/dist/{worktree-state.js → worktree/state.js} +6 -6
- package/dist/worktree/state.js.map +1 -0
- package/dist/worktree.d.ts +1 -1
- package/dist/worktree.js +5 -5
- package/dist/worktree.js.map +1 -1
- package/package.json +5 -4
- package/dist/git-activity.d.ts.map +0 -1
- package/dist/git-activity.js.map +0 -1
- package/dist/git-branch.d.ts.map +0 -1
- package/dist/git-branch.js.map +0 -1
- package/dist/git-fetch.d.ts.map +0 -1
- package/dist/git-fetch.js.map +0 -1
- package/dist/git-genesis.d.ts.map +0 -1
- package/dist/git-genesis.js.map +0 -1
- package/dist/git-integration.d.ts.map +0 -1
- package/dist/git-integration.js.map +0 -1
- package/dist/git-merge-helpers.d.ts.map +0 -1
- package/dist/git-merge-helpers.js.map +0 -1
- package/dist/git-merge-lock.d.ts.map +0 -1
- package/dist/git-merge-lock.js.map +0 -1
- package/dist/git-merge-strategies.d.ts.map +0 -1
- package/dist/git-merge-strategies.js.map +0 -1
- package/dist/git-merge.d.ts.map +0 -1
- package/dist/git-merge.js.map +0 -1
- package/dist/git-state-detector.d.ts.map +0 -1
- package/dist/git-state-detector.js.map +0 -1
- package/dist/git-types.d.ts.map +0 -1
- package/dist/git-types.js.map +0 -1
- package/dist/git-utils.d.ts.map +0 -1
- package/dist/git-utils.js.map +0 -1
- package/dist/loop-context-audit-pass.d.ts.map +0 -1
- package/dist/loop-context-audit-pass.js.map +0 -1
- package/dist/loop-engine-types.d.ts.map +0 -1
- package/dist/loop-engine-types.js.map +0 -1
- package/dist/loop-engine.d.ts.map +0 -1
- package/dist/loop-engine.js.map +0 -1
- package/dist/loop-event-bus.d.ts.map +0 -1
- package/dist/loop-event-bus.js.map +0 -1
- package/dist/loop-llm-client.d.ts.map +0 -1
- package/dist/loop-llm-client.js.map +0 -1
- package/dist/loop-llm-flag.d.ts.map +0 -1
- package/dist/loop-llm-flag.js.map +0 -1
- package/dist/loop-operational-block.d.ts.map +0 -1
- package/dist/loop-operational-block.js.map +0 -1
- package/dist/loop-prompt-builder.d.ts.map +0 -1
- package/dist/loop-prompt-builder.js.map +0 -1
- package/dist/loop-variance.d.ts.map +0 -1
- package/dist/loop-variance.js.map +0 -1
- package/dist/nexus-endpoint-clearance.d.ts.map +0 -1
- package/dist/nexus-endpoint-clearance.js.map +0 -1
- package/dist/nexus-escalation-bridge.d.ts.map +0 -1
- package/dist/nexus-escalation-bridge.js.map +0 -1
- package/dist/nexus-incoming.d.ts.map +0 -1
- package/dist/nexus-incoming.js.map +0 -1
- package/dist/nexus-intake-spawn.d.ts.map +0 -1
- package/dist/nexus-intake-spawn.js.map +0 -1
- package/dist/nexus-intake.d.ts.map +0 -1
- package/dist/nexus-intake.js.map +0 -1
- package/dist/nexus-return.d.ts.map +0 -1
- package/dist/nexus-return.js.map +0 -1
- package/dist/otlp-log-parser.d.ts.map +0 -1
- package/dist/otlp-log-parser.js.map +0 -1
- package/dist/otlp-metric-parser.d.ts.map +0 -1
- package/dist/otlp-metric-parser.js.map +0 -1
- package/dist/otlp-port-manager.d.ts.map +0 -1
- package/dist/otlp-port-manager.js.map +0 -1
- package/dist/otlp-receiver.d.ts.map +0 -1
- package/dist/otlp-receiver.js.map +0 -1
- package/dist/otlp-types.d.ts.map +0 -1
- package/dist/otlp-types.js.map +0 -1
- package/dist/prd-controller.d.ts.map +0 -1
- package/dist/prd-controller.js.map +0 -1
- package/dist/prd-divergence.d.ts.map +0 -1
- package/dist/prd-divergence.js.map +0 -1
- package/dist/prd-focus-pushdown.d.ts.map +0 -1
- package/dist/prd-focus-pushdown.js.map +0 -1
- package/dist/prd-frontier.d.ts.map +0 -1
- package/dist/prd-frontier.js.map +0 -1
- package/dist/prd-steward.d.ts.map +0 -1
- package/dist/prd-steward.js.map +0 -1
- package/dist/prd-viability.d.ts.map +0 -1
- package/dist/prd-viability.js.map +0 -1
- package/dist/worktree-focus.d.ts.map +0 -1
- package/dist/worktree-focus.js.map +0 -1
- package/dist/worktree-safety.d.ts.map +0 -1
- package/dist/worktree-safety.js.map +0 -1
- package/dist/worktree-state.d.ts.map +0 -1
- package/dist/worktree-state.js.map +0 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI run-status model + merge-gate decision -- Review Gate Hardening (Reconnect
|
|
3
|
+
* CI to the loop).
|
|
4
|
+
*
|
|
5
|
+
* CI is the loop's only clean-environment instrument. The f1 defect merged three
|
|
6
|
+
* integration->main waves while `npm ci` was structurally broken because the
|
|
7
|
+
* daemon never waited on a green CI run. This module owns the SOURCE-AGNOSTIC
|
|
8
|
+
* pieces of the reconnection:
|
|
9
|
+
* - `CiRunStatus`: the normalized status a SHA's CI run can be in. Every
|
|
10
|
+
* concrete source (Gitea commit-status API, a git-notes status the CI
|
|
11
|
+
* workflow writes, ...) maps onto this enum, so the decision + sensor logic
|
|
12
|
+
* below never depend on which source is wired.
|
|
13
|
+
* - `resolveCiMergeGate`: the pure integration->main merge decision (green ->
|
|
14
|
+
* proceed, pending/red -> hold, unknown -> proceed). This is the AC's
|
|
15
|
+
* test-target for the green-wait.
|
|
16
|
+
* - `CiStatusReader`: the injected seam that READS a SHA's status. Its concrete
|
|
17
|
+
* implementation (the credential-dependent Gitea call) is deliberately NOT
|
|
18
|
+
* here -- it is provided by the caller. With no reader configured, the gate
|
|
19
|
+
* never activates and the merge proceeds exactly as before (safe default).
|
|
20
|
+
*
|
|
21
|
+
* Keeping this module pure + reader-injected means the decision and sensor logic
|
|
22
|
+
* are fully unit-testable without a live registry, and the one part that needs an
|
|
23
|
+
* infra/credential decision (the concrete reader) is a single, isolated seam.
|
|
24
|
+
*
|
|
25
|
+
* @module ci-status
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Pure merge-gate decision: should integration->main proceed given the merged
|
|
29
|
+
* SHA's CI status? FAIL-CLOSED (Jeremy decision 2026-07-05): only an explicit
|
|
30
|
+
* green proceeds; everything else HOLDS.
|
|
31
|
+
*
|
|
32
|
+
* green -> proceed (the clean-environment instrument is satisfied).
|
|
33
|
+
* pending -> HOLD (a run is in flight; wait for it to finish before merging).
|
|
34
|
+
* red -> HOLD (do not merge a red SHA to main).
|
|
35
|
+
* unknown -> HOLD (no determinable green status == not green; a missing or
|
|
36
|
+
* unreadable status ref must not let an unverified SHA reach main).
|
|
37
|
+
*
|
|
38
|
+
* NOTE: this fail-closed model only engages when a CI status READER is wired
|
|
39
|
+
* into the merge path. With no reader configured the merge path SKIPS the gate
|
|
40
|
+
* entirely (runCiMergeToMain), so a focus with CI enabled but no status source
|
|
41
|
+
* is unaffected -- the fail-closed hold applies once a reader exists and reports
|
|
42
|
+
* a non-green (or absent) status for the merged SHA.
|
|
43
|
+
*/
|
|
44
|
+
export function resolveCiMergeGate(status) {
|
|
45
|
+
switch (status) {
|
|
46
|
+
case 'green':
|
|
47
|
+
return { proceed: true, status, reason: 'CI green for the merged SHA' };
|
|
48
|
+
case 'pending':
|
|
49
|
+
return { proceed: false, status, reason: 'CI run pending for the merged SHA -- holding integration->main until green' };
|
|
50
|
+
case 'red':
|
|
51
|
+
return { proceed: false, status, reason: 'CI red for the merged SHA -- holding integration->main (a red run must not reach main)' };
|
|
52
|
+
case 'unknown':
|
|
53
|
+
default:
|
|
54
|
+
return { proceed: false, status: 'unknown', reason: 'CI status unavailable for the merged SHA -- holding (fail-closed: unknown != green)' };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Classify a git-native CI status from the set of `refs/ci-status/<sha>/<state>`
|
|
59
|
+
* ref names published for a SHA. The STATE is encoded in the ref NAME (immutable
|
|
60
|
+
* per-SHA), so no object content read is needed. FAIL-CLOSED: an empty set or an
|
|
61
|
+
* unrecognized suffix is 'unknown' (holds). A failure ref outranks a success ref
|
|
62
|
+
* (a red run must win if both somehow exist). Pure -- the caller supplies the
|
|
63
|
+
* ref names from a scoped `git ls-remote` / fetch.
|
|
64
|
+
*/
|
|
65
|
+
export function classifyGitNativeCiStatus(refNames) {
|
|
66
|
+
let sawGreen = false;
|
|
67
|
+
let sawPending = false;
|
|
68
|
+
for (const raw of refNames) {
|
|
69
|
+
const ref = raw.trim();
|
|
70
|
+
if (ref.endsWith('/failure') || ref.endsWith('/error') || ref.endsWith('/red'))
|
|
71
|
+
return 'red';
|
|
72
|
+
if (ref.endsWith('/success') || ref.endsWith('/green') || ref.endsWith('/passed'))
|
|
73
|
+
sawGreen = true;
|
|
74
|
+
else if (ref.endsWith('/pending') || ref.endsWith('/running') || ref.endsWith('/queued'))
|
|
75
|
+
sawPending = true;
|
|
76
|
+
}
|
|
77
|
+
if (sawGreen)
|
|
78
|
+
return 'green';
|
|
79
|
+
if (sawPending)
|
|
80
|
+
return 'pending';
|
|
81
|
+
return 'unknown';
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Pure CI-result sensor decision: given the integration tip's CI status and
|
|
85
|
+
* whether an open ci_run_red escalation already exists, decide whether to file a
|
|
86
|
+
* new escalation, resolve the open one, or do nothing.
|
|
87
|
+
*
|
|
88
|
+
* red + no open -> 'file' (a failing run becomes signal, once).
|
|
89
|
+
* green + open -> 'resolve' (the branch recovered; close the escalation).
|
|
90
|
+
* otherwise -> 'none' (red+open: already signalled; pending/unknown:
|
|
91
|
+
* nothing actionable -- do NOT resolve on
|
|
92
|
+
* unknown, that would hide an unresolved red).
|
|
93
|
+
*/
|
|
94
|
+
export function decideCiSensorAction(status, hasOpenRedEscalation) {
|
|
95
|
+
if (status === 'red' && !hasOpenRedEscalation)
|
|
96
|
+
return 'file';
|
|
97
|
+
if (status === 'green' && hasOpenRedEscalation)
|
|
98
|
+
return 'resolve';
|
|
99
|
+
return 'none';
|
|
100
|
+
}
|
|
101
|
+
export function createGitNativeCiStatusReader(lister) {
|
|
102
|
+
return async ({ sha, config }) => {
|
|
103
|
+
let refs = [];
|
|
104
|
+
try {
|
|
105
|
+
refs = lister(sha, config);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Fail-closed: an unreachable/erroring remote must not report green.
|
|
109
|
+
refs = [];
|
|
110
|
+
}
|
|
111
|
+
return classifyGitNativeCiStatus(refs);
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=ci-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-status.js","sourceRoot":"","sources":["../src/ci-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAyBH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,CAAC;QAC1E,KAAK,SAAS;YACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,4EAA4E,EAAE,CAAC;QAC1H,KAAK,KAAK;YACR,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,wFAAwF,EAAE,CAAC;QACtI,KAAK,SAAS,CAAC;QACf;YACE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,qFAAqF,EAAE,CAAC;IAChJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA2B;IACnE,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7F,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,QAAQ,GAAG,IAAI,CAAC;aAC9F,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,UAAU,GAAG,IAAI,CAAC;IAC9G,CAAC;IACD,IAAI,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC7B,IAAI,UAAU;QAAE,OAAO,SAAS,CAAC;IACjC,OAAO,SAAS,CAAC;AACnB,CAAC;AAyCD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB,EAAE,oBAA6B;IACrF,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,oBAAoB;QAAE,OAAO,MAAM,CAAC;IAC7D,IAAI,MAAM,KAAK,OAAO,IAAI,oBAAoB;QAAE,OAAO,SAAS,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAyB;IACrE,OAAO,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QAC/B,IAAI,IAAI,GAAa,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;YACrE,IAAI,GAAG,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex/IDE harness config writer: the seeded `AGENTS.md` block. Extracted
|
|
3
|
+
* verbatim from `../connect.ts` and re-exported from there for import
|
|
4
|
+
* stability.
|
|
5
|
+
*/
|
|
6
|
+
import { type AgentsMdConnectionInvariant } from '../../templates/agents-md.js';
|
|
7
|
+
import type { ConnectIO } from './shared.js';
|
|
8
|
+
/**
|
|
9
|
+
* Write or merge a seeded `AGENTS.md` at the repo root (Codex harness).
|
|
10
|
+
*
|
|
11
|
+
* The exact analog of `writeOrMergeClaudeMd` for the Codex operator surface:
|
|
12
|
+
* AGENTS.md is Codex's CLAUDE.md-equivalent. Same merge semantics --
|
|
13
|
+
* - Fresh repo: writes the seeded block straight in.
|
|
14
|
+
* - Existing AGENTS.md without the Telora delimiters: appends a delimited
|
|
15
|
+
* block at the end; user content untouched.
|
|
16
|
+
* - Existing AGENTS.md WITH the delimiters: replaces only the delimited block.
|
|
17
|
+
*
|
|
18
|
+
* Idempotent at the filesystem level: when the computed content equals what is
|
|
19
|
+
* already on disk, NO write occurs (no spurious mtime bump, no git churn). The
|
|
20
|
+
* daemon re-invokes this on boot to self-heal the seed block, so the
|
|
21
|
+
* unchanged-common-case must not touch the file.
|
|
22
|
+
*/
|
|
23
|
+
export declare function writeOrMergeAgentsMd(repoPath: string, inv: AgentsMdConnectionInvariant, io: ConnectIO): void;
|
|
24
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/cli/connect/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAIL,KAAK,2BAA2B,EACjC,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,2BAA2B,EAChC,EAAE,EAAE,SAAS,GACZ,IAAI,CA0CN"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex/IDE harness config writer: the seeded `AGENTS.md` block. Extracted
|
|
3
|
+
* verbatim from `../connect.ts` and re-exported from there for import
|
|
4
|
+
* stability.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
import { TELORA_AGENTS_MD_BEGIN, TELORA_AGENTS_MD_END, renderAgentsMd, } from '../../templates/agents-md.js';
|
|
9
|
+
/**
|
|
10
|
+
* Write or merge a seeded `AGENTS.md` at the repo root (Codex harness).
|
|
11
|
+
*
|
|
12
|
+
* The exact analog of `writeOrMergeClaudeMd` for the Codex operator surface:
|
|
13
|
+
* AGENTS.md is Codex's CLAUDE.md-equivalent. Same merge semantics --
|
|
14
|
+
* - Fresh repo: writes the seeded block straight in.
|
|
15
|
+
* - Existing AGENTS.md without the Telora delimiters: appends a delimited
|
|
16
|
+
* block at the end; user content untouched.
|
|
17
|
+
* - Existing AGENTS.md WITH the delimiters: replaces only the delimited block.
|
|
18
|
+
*
|
|
19
|
+
* Idempotent at the filesystem level: when the computed content equals what is
|
|
20
|
+
* already on disk, NO write occurs (no spurious mtime bump, no git churn). The
|
|
21
|
+
* daemon re-invokes this on boot to self-heal the seed block, so the
|
|
22
|
+
* unchanged-common-case must not touch the file.
|
|
23
|
+
*/
|
|
24
|
+
export function writeOrMergeAgentsMd(repoPath, inv, io) {
|
|
25
|
+
const path = resolve(repoPath, 'AGENTS.md');
|
|
26
|
+
const seedBlock = renderAgentsMd(inv);
|
|
27
|
+
if (!existsSync(path)) {
|
|
28
|
+
writeFileSync(path, seedBlock);
|
|
29
|
+
io.out(`Wrote ${path}.\n`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const existing = readFileSync(path, 'utf-8');
|
|
33
|
+
const beginIdx = existing.indexOf(TELORA_AGENTS_MD_BEGIN);
|
|
34
|
+
let newContent;
|
|
35
|
+
let message;
|
|
36
|
+
if (beginIdx === -1) {
|
|
37
|
+
const sep = existing.endsWith('\n') ? '\n' : '\n\n';
|
|
38
|
+
newContent = existing + sep + seedBlock;
|
|
39
|
+
message = `Appended Telora seed block to ${path}.\n`;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const endIdx = existing.indexOf(TELORA_AGENTS_MD_END, beginIdx);
|
|
43
|
+
if (endIdx === -1) {
|
|
44
|
+
const sep = existing.endsWith('\n') ? '\n' : '\n\n';
|
|
45
|
+
newContent = existing + sep + seedBlock;
|
|
46
|
+
message = `Appended Telora seed block to ${path} (prior block was malformed).\n`;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
const after = endIdx + TELORA_AGENTS_MD_END.length;
|
|
50
|
+
const trailingNewline = existing[after] === '\n' ? 1 : 0;
|
|
51
|
+
newContent =
|
|
52
|
+
existing.slice(0, beginIdx) +
|
|
53
|
+
seedBlock.trimEnd() +
|
|
54
|
+
'\n' +
|
|
55
|
+
existing.slice(after + trailingNewline);
|
|
56
|
+
message = `Refreshed Telora seed block in ${path}.\n`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Idempotency guard: skip the write entirely when nothing would change.
|
|
60
|
+
if (newContent === existing)
|
|
61
|
+
return;
|
|
62
|
+
writeFileSync(path, newContent);
|
|
63
|
+
io.out(message);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/cli/connect/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,GAEf,MAAM,8BAA8B,CAAC;AAGtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,GAAgC,EAChC,EAAa;IAEb,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC/B,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE1D,IAAI,UAAkB,CAAC;IACvB,IAAI,OAAe,CAAC;IACpB,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QACpD,UAAU,GAAG,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC;QACxC,OAAO,GAAG,iCAAiC,IAAI,KAAK,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YACpD,UAAU,GAAG,QAAQ,GAAG,GAAG,GAAG,SAAS,CAAC;YACxC,OAAO,GAAG,iCAAiC,IAAI,iCAAiC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC;YACnD,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,UAAU;gBACR,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;oBAC3B,SAAS,CAAC,OAAO,EAAE;oBACnB,IAAI;oBACJ,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;YAC1C,OAAO,GAAG,kCAAkC,IAAI,KAAK,CAAC;QACxD,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO;IAEpC,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude harness config writers: the seeded `CLAUDE.md` block and the
|
|
3
|
+
* `<repo>/.claude/settings.json` permissions/hooks merge. Extracted verbatim
|
|
4
|
+
* from `../connect.ts` and re-exported from there for import stability.
|
|
5
|
+
*/
|
|
6
|
+
import type { ConnectIO } from './shared.js';
|
|
7
|
+
/**
|
|
8
|
+
* Write or merge a seeded `CLAUDE.md` at the repo root.
|
|
9
|
+
*
|
|
10
|
+
* - Fresh repo: writes the seeded block straight in.
|
|
11
|
+
* - Existing CLAUDE.md without the Telora delimiters: appends a delimited
|
|
12
|
+
* Telora block at the end. The user's content is untouched.
|
|
13
|
+
* - Existing CLAUDE.md WITH the delimiters: replaces only the delimited
|
|
14
|
+
* block. Re-runs are byte-identical (no churn, no duplication).
|
|
15
|
+
*
|
|
16
|
+
* Idempotent at the filesystem level: when the computed content equals what
|
|
17
|
+
* is already on disk, NO write occurs (no spurious mtime bump, no git churn).
|
|
18
|
+
* The daemon re-invokes this on every boot to self-heal the seed block, so
|
|
19
|
+
* the unchanged-common-case must not touch the file.
|
|
20
|
+
*/
|
|
21
|
+
export declare function writeOrMergeClaudeMd(repoPath: string, productName: string | null, io: ConnectIO): void;
|
|
22
|
+
/**
|
|
23
|
+
* Write or deep-merge `<repo>/.claude/settings.json`.
|
|
24
|
+
*
|
|
25
|
+
* Fresh: writes the template directly.
|
|
26
|
+
* Existing: deep-merges our `permissions.allow` entries into the user's
|
|
27
|
+
* settings, deduplicating. All other top-level keys are untouched.
|
|
28
|
+
* Re-runs produce no diff.
|
|
29
|
+
*/
|
|
30
|
+
export declare function writeOrMergeClaudeSettings(repoPath: string, io: ConnectIO): void;
|
|
31
|
+
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../../src/cli/connect/claude.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAaH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,EAAE,EAAE,SAAS,GACZ,IAAI,CAiDN;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,GAAG,IAAI,CA0BhF"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude harness config writers: the seeded `CLAUDE.md` block and the
|
|
3
|
+
* `<repo>/.claude/settings.json` permissions/hooks merge. Extracted verbatim
|
|
4
|
+
* from `../connect.ts` and re-exported from there for import stability.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
import { TELORA_CLAUDE_MD_BEGIN, TELORA_CLAUDE_MD_END, renderClaudeMd, } from '../../templates/claude-md.js';
|
|
9
|
+
import { buildClaudeSettings, mergeClaudeSettings, } from '../../templates/claude-settings.js';
|
|
10
|
+
/**
|
|
11
|
+
* Write or merge a seeded `CLAUDE.md` at the repo root.
|
|
12
|
+
*
|
|
13
|
+
* - Fresh repo: writes the seeded block straight in.
|
|
14
|
+
* - Existing CLAUDE.md without the Telora delimiters: appends a delimited
|
|
15
|
+
* Telora block at the end. The user's content is untouched.
|
|
16
|
+
* - Existing CLAUDE.md WITH the delimiters: replaces only the delimited
|
|
17
|
+
* block. Re-runs are byte-identical (no churn, no duplication).
|
|
18
|
+
*
|
|
19
|
+
* Idempotent at the filesystem level: when the computed content equals what
|
|
20
|
+
* is already on disk, NO write occurs (no spurious mtime bump, no git churn).
|
|
21
|
+
* The daemon re-invokes this on every boot to self-heal the seed block, so
|
|
22
|
+
* the unchanged-common-case must not touch the file.
|
|
23
|
+
*/
|
|
24
|
+
export function writeOrMergeClaudeMd(repoPath, productName, io) {
|
|
25
|
+
const path = resolve(repoPath, 'CLAUDE.md');
|
|
26
|
+
const seedBlock = renderClaudeMd(productName);
|
|
27
|
+
if (!existsSync(path)) {
|
|
28
|
+
writeFileSync(path, seedBlock);
|
|
29
|
+
io.out(`Wrote ${path}.\n`);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const existing = readFileSync(path, 'utf-8');
|
|
33
|
+
const beginIdx = existing.indexOf(TELORA_CLAUDE_MD_BEGIN);
|
|
34
|
+
let newContent;
|
|
35
|
+
let message;
|
|
36
|
+
if (beginIdx === -1) {
|
|
37
|
+
// No prior Telora block -- append, preserving user content.
|
|
38
|
+
const sep = existing.endsWith('\n') ? '\n' : '\n\n';
|
|
39
|
+
newContent = existing + sep + seedBlock;
|
|
40
|
+
message = `Appended Telora seed block to ${path}.\n`;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
const endIdx = existing.indexOf(TELORA_CLAUDE_MD_END, beginIdx);
|
|
44
|
+
if (endIdx === -1) {
|
|
45
|
+
// Begin marker without end -- treat as malformed. Append a fresh block
|
|
46
|
+
// rather than risk corrupting whatever's there.
|
|
47
|
+
const sep = existing.endsWith('\n') ? '\n' : '\n\n';
|
|
48
|
+
newContent = existing + sep + seedBlock;
|
|
49
|
+
message = `Appended Telora seed block to ${path} (prior block was malformed).\n`;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Replace the existing Telora block in place.
|
|
53
|
+
const after = endIdx + TELORA_CLAUDE_MD_END.length;
|
|
54
|
+
// Trim a trailing newline after the end marker so we don't accumulate
|
|
55
|
+
// blank lines on each re-run.
|
|
56
|
+
const trailingNewline = existing[after] === '\n' ? 1 : 0;
|
|
57
|
+
newContent =
|
|
58
|
+
existing.slice(0, beginIdx) +
|
|
59
|
+
seedBlock.trimEnd() +
|
|
60
|
+
'\n' +
|
|
61
|
+
existing.slice(after + trailingNewline);
|
|
62
|
+
message = `Refreshed Telora seed block in ${path}.\n`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Idempotency guard: skip the write entirely when nothing would change.
|
|
66
|
+
// This keeps the boot-time self-heal a no-op for already-current repos.
|
|
67
|
+
if (newContent === existing)
|
|
68
|
+
return;
|
|
69
|
+
writeFileSync(path, newContent);
|
|
70
|
+
io.out(message);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Write or deep-merge `<repo>/.claude/settings.json`.
|
|
74
|
+
*
|
|
75
|
+
* Fresh: writes the template directly.
|
|
76
|
+
* Existing: deep-merges our `permissions.allow` entries into the user's
|
|
77
|
+
* settings, deduplicating. All other top-level keys are untouched.
|
|
78
|
+
* Re-runs produce no diff.
|
|
79
|
+
*/
|
|
80
|
+
export function writeOrMergeClaudeSettings(repoPath, io) {
|
|
81
|
+
const dir = resolve(repoPath, '.claude');
|
|
82
|
+
const path = resolve(dir, 'settings.json');
|
|
83
|
+
const seed = buildClaudeSettings();
|
|
84
|
+
if (!existsSync(dir))
|
|
85
|
+
mkdirSync(dir, { recursive: true });
|
|
86
|
+
let existing = null;
|
|
87
|
+
if (existsSync(path)) {
|
|
88
|
+
try {
|
|
89
|
+
const parsed = JSON.parse(readFileSync(path, 'utf-8'));
|
|
90
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
91
|
+
existing = parsed;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
io.err(`Warning: existing ${path} is not valid JSON; leaving it alone: ` +
|
|
96
|
+
`${err instanceof Error ? err.message : String(err)}\n`);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const merged = mergeClaudeSettings(existing, seed);
|
|
101
|
+
writeFileSync(path, JSON.stringify(merged, null, 2) + '\n');
|
|
102
|
+
io.out(existing ? `Merged Telora entries into ${path}.\n` : `Wrote ${path}.\n`);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../../src/cli/connect/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cline harness config writers: the project-level Cline rules file and the
|
|
3
|
+
* Telora MCP registration in the Cline CLI settings. Extracted verbatim from
|
|
4
|
+
* `../connect.ts` and re-exported from there for import stability.
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentsMdConnectionInvariant } from '../../templates/agents-md.js';
|
|
7
|
+
import type { ConnectIO } from './shared.js';
|
|
8
|
+
/**
|
|
9
|
+
* Render a project-level Cline rules file carrying the same Telora seed
|
|
10
|
+
* discipline as CLAUDE.md / AGENTS.md. Cline CLI reads project rules from
|
|
11
|
+
* `.cline/rules/`, so this is the operator-facing context equivalent for the
|
|
12
|
+
* Cline harness.
|
|
13
|
+
*/
|
|
14
|
+
export declare function renderClineRules(inv: AgentsMdConnectionInvariant): string;
|
|
15
|
+
/**
|
|
16
|
+
* Write the Telora Cline project rules file. The file is owned by the connect
|
|
17
|
+
* flow, so re-runs replace it wholesale; user-authored Cline rules live beside
|
|
18
|
+
* it under `.cline/rules/`.
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeClineProjectRules(repoPath: string, inv: AgentsMdConnectionInvariant, io: ConnectIO): void;
|
|
21
|
+
/**
|
|
22
|
+
* Render the Cline CLI MCP config object. Current Cline CLI documentation
|
|
23
|
+
* stores MCP settings under `~/.cline/data/settings/cline_mcp_settings.json`
|
|
24
|
+
* with a top-level `mcpServers` map.
|
|
25
|
+
*
|
|
26
|
+
* Carries the MCP profile ONLY -- never workstation identity. Like the
|
|
27
|
+
* `.mcp.json` and Codex builders, identity (`TELORA_URL` / `TELORA_TRACKER_ID`)
|
|
28
|
+
* resolves from the single source `~/.telora/daemon.json` via the MCP server's
|
|
29
|
+
* `loadCredentials()` fallback; a persisted copy here would only drift.
|
|
30
|
+
*/
|
|
31
|
+
export declare function renderClineMcpSettings(params: {
|
|
32
|
+
mcpServerPath: string;
|
|
33
|
+
}): Record<string, unknown>;
|
|
34
|
+
export declare function writeOrMergeClineMcpSettings(io: ConnectIO, params?: {
|
|
35
|
+
homeOverride?: string;
|
|
36
|
+
}): void;
|
|
37
|
+
//# sourceMappingURL=cline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cline.d.ts","sourceRoot":"","sources":["../../../src/cli/connect/cline.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,2BAA2B,GAAG,MAAM,CAczE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,2BAA2B,EAChC,EAAE,EAAE,SAAS,GACZ,IAAI,CASN;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc1B;AAED,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,SAAS,EACb,MAAM,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,IAAI,CAuDN"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cline harness config writers: the project-level Cline rules file and the
|
|
3
|
+
* Telora MCP registration in the Cline CLI settings. Extracted verbatim from
|
|
4
|
+
* `../connect.ts` and re-exported from there for import stability.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
import { homedir } from 'node:os';
|
|
9
|
+
import { resolveMcpServerPath } from '../../mcp-resolution.js';
|
|
10
|
+
import { SEED_BODY, SEED_MCP_REGISTRATION_SENTENCE } from '../../templates/claude-md.js';
|
|
11
|
+
const CLINE_MCP_REGISTRATION_SENTENCE = 'The Telora MCP server is registered in `~/.cline/data/settings/cline_mcp_settings.json`.';
|
|
12
|
+
/**
|
|
13
|
+
* Render a project-level Cline rules file carrying the same Telora seed
|
|
14
|
+
* discipline as CLAUDE.md / AGENTS.md. Cline CLI reads project rules from
|
|
15
|
+
* `.cline/rules/`, so this is the operator-facing context equivalent for the
|
|
16
|
+
* Cline harness.
|
|
17
|
+
*/
|
|
18
|
+
export function renderClineRules(inv) {
|
|
19
|
+
const productLabel = inv.productName ? `${inv.productName} (${inv.productId})` : inv.productId;
|
|
20
|
+
const body = SEED_BODY.replace(SEED_MCP_REGISTRATION_SENTENCE, CLINE_MCP_REGISTRATION_SENTENCE);
|
|
21
|
+
return (`# Telora Workstation\n\n` +
|
|
22
|
+
`This workstation is connected to Telora. The connection invariant is recorded here for Cline CLI sessions:\n\n` +
|
|
23
|
+
`- Telora URL: ${inv.teloraUrl}\n` +
|
|
24
|
+
`- Organization: ${inv.organizationId}\n` +
|
|
25
|
+
`- Product: ${productLabel}\n\n` +
|
|
26
|
+
body);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Write the Telora Cline project rules file. The file is owned by the connect
|
|
30
|
+
* flow, so re-runs replace it wholesale; user-authored Cline rules live beside
|
|
31
|
+
* it under `.cline/rules/`.
|
|
32
|
+
*/
|
|
33
|
+
export function writeClineProjectRules(repoPath, inv, io) {
|
|
34
|
+
const dir = resolve(repoPath, '.cline', 'rules');
|
|
35
|
+
const path = resolve(dir, 'telora.md');
|
|
36
|
+
const content = renderClineRules(inv);
|
|
37
|
+
if (!existsSync(dir))
|
|
38
|
+
mkdirSync(dir, { recursive: true });
|
|
39
|
+
if (existsSync(path) && readFileSync(path, 'utf-8') === content)
|
|
40
|
+
return;
|
|
41
|
+
writeFileSync(path, content);
|
|
42
|
+
io.out(`Wrote ${path}.\n`);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Render the Cline CLI MCP config object. Current Cline CLI documentation
|
|
46
|
+
* stores MCP settings under `~/.cline/data/settings/cline_mcp_settings.json`
|
|
47
|
+
* with a top-level `mcpServers` map.
|
|
48
|
+
*
|
|
49
|
+
* Carries the MCP profile ONLY -- never workstation identity. Like the
|
|
50
|
+
* `.mcp.json` and Codex builders, identity (`TELORA_URL` / `TELORA_TRACKER_ID`)
|
|
51
|
+
* resolves from the single source `~/.telora/daemon.json` via the MCP server's
|
|
52
|
+
* `loadCredentials()` fallback; a persisted copy here would only drift.
|
|
53
|
+
*/
|
|
54
|
+
export function renderClineMcpSettings(params) {
|
|
55
|
+
return {
|
|
56
|
+
mcpServers: {
|
|
57
|
+
telora: {
|
|
58
|
+
command: 'node',
|
|
59
|
+
args: [params.mcpServerPath],
|
|
60
|
+
env: {
|
|
61
|
+
TELORA_MCP_PROFILE: 'human',
|
|
62
|
+
},
|
|
63
|
+
disabled: false,
|
|
64
|
+
autoApprove: [],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export function writeOrMergeClineMcpSettings(io, params = {}) {
|
|
70
|
+
let mcpServerPath;
|
|
71
|
+
try {
|
|
72
|
+
mcpServerPath = resolveMcpServerPath();
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
io.err(`Warning: could not resolve @telora/mcp-products; skipping Cline MCP registration: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const home = params.homeOverride ?? homedir();
|
|
79
|
+
const dir = resolve(home, '.cline', 'data', 'settings');
|
|
80
|
+
const path = resolve(dir, 'cline_mcp_settings.json');
|
|
81
|
+
const desired = renderClineMcpSettings({ mcpServerPath });
|
|
82
|
+
if (!existsSync(dir))
|
|
83
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
84
|
+
let parsed = {};
|
|
85
|
+
if (existsSync(path)) {
|
|
86
|
+
try {
|
|
87
|
+
const raw = readFileSync(path, 'utf-8');
|
|
88
|
+
const candidate = JSON.parse(raw);
|
|
89
|
+
if (candidate && typeof candidate === 'object' && !Array.isArray(candidate)) {
|
|
90
|
+
parsed = candidate;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
io.err(`Warning: ${path} is not valid JSON; leaving it alone: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const existingServers = parsed.mcpServers && typeof parsed.mcpServers === 'object' && !Array.isArray(parsed.mcpServers)
|
|
99
|
+
? parsed.mcpServers
|
|
100
|
+
: {};
|
|
101
|
+
const desiredServers = desired.mcpServers;
|
|
102
|
+
const next = {
|
|
103
|
+
...parsed,
|
|
104
|
+
mcpServers: {
|
|
105
|
+
...existingServers,
|
|
106
|
+
telora: desiredServers.telora,
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
const content = JSON.stringify(next, null, 2) + '\n';
|
|
110
|
+
if (existsSync(path) && readFileSync(path, 'utf-8') === content)
|
|
111
|
+
return;
|
|
112
|
+
writeFileSync(path, content, { mode: 0o600 });
|
|
113
|
+
io.out(`Registered Telora MCP server in ${path}.\n`);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=cline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cline.js","sourceRoot":"","sources":["../../../src/cli/connect/cline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex harness config writer: registration of the Telora MCP server in the
|
|
3
|
+
* operator's personal `~/.codex/config.toml`. Extracted verbatim from
|
|
4
|
+
* `../connect.ts` and re-exported from there for import stability.
|
|
5
|
+
*/
|
|
6
|
+
import type { ConnectIO } from './shared.js';
|
|
7
|
+
/**
|
|
8
|
+
* Render the delimited Telora MCP block for the operator's personal
|
|
9
|
+
* `~/.codex/config.toml`. Mirrors the `.mcp.json` shape (command=node + the
|
|
10
|
+
* resolved abs path to @telora/mcp-products) but as a TOML `[mcp_servers.telora]`
|
|
11
|
+
* table, the form Codex reads. Profile is `human` (operator-interactive),
|
|
12
|
+
* matching the `.mcp.json` the Claude path writes.
|
|
13
|
+
*
|
|
14
|
+
* Carries the MCP profile ONLY -- never workstation identity. Identity
|
|
15
|
+
* (`TELORA_URL` / `TELORA_TRACKER_ID`) resolves from the single source
|
|
16
|
+
* `~/.telora/daemon.json` via the MCP server's `loadCredentials()` fallback,
|
|
17
|
+
* so a persisted copy here would only be a drift hazard. Keeping it out is the
|
|
18
|
+
* single-source invariant (the `.mcp.json` builder omits it for the same
|
|
19
|
+
* reason).
|
|
20
|
+
*
|
|
21
|
+
* Values are emitted as JSON-encoded TOML string literals, which is valid TOML
|
|
22
|
+
* for the path value we control here.
|
|
23
|
+
*/
|
|
24
|
+
export declare function renderCodexMcpBlock(params: {
|
|
25
|
+
mcpServerPath: string;
|
|
26
|
+
}): string;
|
|
27
|
+
/**
|
|
28
|
+
* Register the Telora MCP server in the operator's personal
|
|
29
|
+
* `~/.codex/config.toml` (NOT the per-product execution CODEX_HOME -- that is
|
|
30
|
+
* `codex-provision.ts`, a separate concern). This is what makes the Telora
|
|
31
|
+
* tool surface reachable from the operator's interactive Codex chat.
|
|
32
|
+
*
|
|
33
|
+
* Idempotent delimited merge, mirroring `writeOrMergeClaudeMd`: replace the
|
|
34
|
+
* `# BEGIN/END TELORA MCP` block in place if present, append it if absent,
|
|
35
|
+
* never duplicate. When the computed content equals what is on disk, NO write
|
|
36
|
+
* occurs. `homeOverride` lets tests target a temp HOME.
|
|
37
|
+
*
|
|
38
|
+
* Best-effort: if the MCP package cannot be resolved, prints a warning and
|
|
39
|
+
* returns without touching the file (the connect flow must not abort).
|
|
40
|
+
*/
|
|
41
|
+
export declare function writeOrMergeCodexMcpToml(io: ConnectIO, params?: {
|
|
42
|
+
homeOverride?: string;
|
|
43
|
+
}): void;
|
|
44
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/cli/connect/codex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQ7C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAWT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,SAAS,EACb,MAAM,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACrC,IAAI,CA0DN"}
|