cloving 1.2.0 → 1.3.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/README.md +525 -185
- package/dist/src/agent-harness-shell.d.ts +12 -0
- package/dist/src/agent-harness-shell.js +90 -0
- package/dist/src/agent-harness-versions.d.ts +8 -0
- package/dist/src/agent-harness-versions.js +49 -0
- package/dist/src/agent-harnesses.d.ts +4 -0
- package/dist/src/agent-harnesses.js +13 -0
- package/dist/src/authority/commands.d.ts +1 -0
- package/dist/src/authority/commands.js +24 -4
- package/dist/src/authority/gate-reduction.d.ts +1 -0
- package/dist/src/authority/gate-reduction.js +18 -3
- package/dist/src/authority/gates.d.ts +2 -1
- package/dist/src/authority/gates.js +5 -1
- package/dist/src/authority/operations.js +1 -1
- package/dist/src/authority/reduction.d.ts +1 -1
- package/dist/src/authority/reduction.js +6 -1
- package/dist/src/authority/status-input.d.ts +1 -1
- package/dist/src/authority/status.d.ts +1 -0
- package/dist/src/authority/status.js +27 -3
- package/dist/src/authority/transitions.d.ts +5 -5
- package/dist/src/authority/transitions.js +6 -0
- package/dist/src/broker/actor/authority-delivery.js +1 -0
- package/dist/src/broker/actor/authority-queries.d.ts +7 -1
- package/dist/src/broker/actor/authority-queries.js +17 -2
- package/dist/src/broker/actor/authority-receipts.js +11 -1
- package/dist/src/broker/actor/authority-session.js +2 -2
- package/dist/src/broker/actor/authority-settings.js +4 -0
- package/dist/src/broker/actor/delivery-intents.d.ts +2 -1
- package/dist/src/broker/actor/delivery-intents.js +4 -4
- package/dist/src/broker/actor/effect-delivery.js +4 -1
- package/dist/src/broker/actor/effect-queries.d.ts +1 -0
- package/dist/src/broker/actor/effect-queries.js +7 -0
- package/dist/src/broker/actor/pin-check.js +1 -1
- package/dist/src/broker/actor/stop-plan.js +1 -1
- package/dist/src/broker/actor/turn-state.js +1 -1
- package/dist/src/broker/authority-admission.js +22 -9
- package/dist/src/broker/authority-restore.js +1 -0
- package/dist/src/broker/decision-restore.js +4 -4
- package/dist/src/broker/socket-address.d.ts +3 -1
- package/dist/src/broker/socket-address.js +2 -2
- package/dist/src/cli/arguments.d.ts +11 -13
- package/dist/src/cli/arguments.js +37 -107
- package/dist/src/cli/command-effects.d.ts +7 -0
- package/dist/src/cli/command-effects.js +39 -0
- package/dist/src/cli/commands.js +11 -4
- package/dist/src/cli/config-arguments.d.ts +11 -0
- package/dist/src/cli/config-arguments.js +59 -0
- package/dist/src/cli/config-command.d.ts +2 -0
- package/dist/src/cli/config-command.js +105 -0
- package/dist/src/cli/config-file.d.ts +3 -0
- package/dist/src/cli/config-file.js +50 -0
- package/dist/src/cli/config-lock.d.ts +7 -0
- package/dist/src/cli/config-lock.js +61 -0
- package/dist/src/cli/config-notice.d.ts +5 -0
- package/dist/src/cli/config-notice.js +46 -0
- package/dist/src/cli/doctor-github.d.ts +9 -0
- package/dist/src/cli/doctor-github.js +138 -0
- package/dist/src/cli/doctor-harness.d.ts +13 -0
- package/dist/src/cli/doctor-harness.js +242 -0
- package/dist/src/cli/doctor-local.d.ts +18 -0
- package/dist/src/cli/doctor-local.js +77 -0
- package/dist/src/cli/doctor-runtime.d.ts +15 -0
- package/dist/src/cli/doctor-runtime.js +176 -0
- package/dist/src/cli/doctor-service.d.ts +1 -0
- package/dist/src/cli/doctor-service.js +11 -0
- package/dist/src/cli/doctor-workflows.d.ts +3 -0
- package/dist/src/cli/doctor-workflows.js +45 -0
- package/dist/src/cli/doctor.d.ts +15 -0
- package/dist/src/cli/doctor.js +190 -0
- package/dist/src/cli/github-ci-progress.d.ts +8 -0
- package/dist/src/cli/github-ci-progress.js +83 -0
- package/dist/src/cli/github-retry.d.ts +6 -0
- package/dist/src/cli/github-retry.js +47 -0
- package/dist/src/cli/harness-probes.d.ts +22 -0
- package/dist/src/cli/harness-probes.js +183 -0
- package/dist/src/cli/main.d.ts +7 -1
- package/dist/src/cli/main.js +39 -61
- package/dist/src/cli/phone-arguments.d.ts +14 -0
- package/dist/src/cli/phone-arguments.js +37 -0
- package/dist/src/cli/phone-client.d.ts +2 -0
- package/dist/src/cli/phone-client.js +32 -0
- package/dist/src/cli/phone-command.d.ts +13 -0
- package/dist/src/cli/phone-command.js +101 -0
- package/dist/src/cli/probe-command.d.ts +36 -0
- package/dist/src/cli/probe-command.js +59 -0
- package/dist/src/cli/project-settings.d.ts +4 -0
- package/dist/src/cli/project-settings.js +33 -0
- package/dist/src/cli/render.d.ts +2 -1
- package/dist/src/cli/render.js +44 -28
- package/dist/src/cli/report-github.d.ts +18 -0
- package/dist/src/cli/report-github.js +200 -0
- package/dist/src/cli/report.d.ts +17 -0
- package/dist/src/cli/report.js +192 -0
- package/dist/src/cli/repository-arguments.d.ts +5 -0
- package/dist/src/cli/repository-arguments.js +34 -0
- package/dist/src/cli/runtime-arguments.d.ts +4 -0
- package/dist/src/cli/runtime-arguments.js +15 -0
- package/dist/src/cli/runtime-directory.d.ts +6 -2
- package/dist/src/cli/runtime-directory.js +72 -14
- package/dist/src/cli/toolchain.d.ts +2 -0
- package/dist/src/cli/toolchain.js +22 -2
- package/dist/src/cli/usage-render.d.ts +5 -0
- package/dist/src/cli/usage-render.js +40 -1
- package/dist/src/cli/usage.d.ts +3 -3
- package/dist/src/cli/usage.js +70 -44
- package/dist/src/cli/watch-actions.d.ts +2 -0
- package/dist/src/cli/watch-actions.js +4 -4
- package/dist/src/cli/watch-board-view.d.ts +1 -1
- package/dist/src/cli/watch-board-view.js +8 -2
- package/dist/src/cli/watch-board.js +23 -10
- package/dist/src/cli/watch-card-forms.js +2 -2
- package/dist/src/cli/watch-client.d.ts +1 -1
- package/dist/src/cli/watch-client.js +7 -2
- package/dist/src/cli/watch-header-view.d.ts +27 -0
- package/dist/src/cli/watch-header-view.js +116 -0
- package/dist/src/cli/watch-model.js +17 -4
- package/dist/src/cli/watch-page.js +48 -12
- package/dist/src/cli/watch-phone-client.d.ts +1 -0
- package/dist/src/cli/watch-phone-client.js +84 -0
- package/dist/src/cli/watch-phone-view.d.ts +56 -0
- package/dist/src/cli/watch-phone-view.js +113 -0
- package/dist/src/cli/watch-phone.d.ts +5 -0
- package/dist/src/cli/watch-phone.js +53 -0
- package/dist/src/cli/watch-pull-request.d.ts +3 -1
- package/dist/src/cli/watch-pull-request.js +4 -0
- package/dist/src/cli/watch-render.d.ts +9 -1
- package/dist/src/cli/watch-server.js +23 -5
- package/dist/src/cli/watch-turn.d.ts +4 -1
- package/dist/src/cli/watch-turn.js +37 -1
- package/dist/src/cli/watch-usage.js +5 -1
- package/dist/src/cli/watch-view.d.ts +6 -20
- package/dist/src/cli/watch-view.js +14 -106
- package/dist/src/cli.js +106 -23
- package/dist/src/command-settings.d.ts +16 -0
- package/dist/src/command-settings.js +42 -0
- package/dist/src/configuration-change.d.ts +11 -0
- package/dist/src/configuration-change.js +62 -0
- package/dist/src/configuration-display.d.ts +21 -0
- package/dist/src/configuration-display.js +69 -0
- package/dist/src/configuration-schema.d.ts +49 -0
- package/dist/src/configuration-schema.js +159 -0
- package/dist/src/daemon/claude-turn.d.ts +19 -5
- package/dist/src/daemon/claude-turn.js +116 -53
- package/dist/src/daemon/claude-worker.d.ts +3 -3
- package/dist/src/daemon/claude-worker.js +65 -76
- package/dist/src/daemon/command-journal.d.ts +5 -0
- package/dist/src/daemon/command-journal.js +50 -0
- package/dist/src/daemon/command-process.d.ts +28 -0
- package/dist/src/daemon/command-process.js +164 -0
- package/dist/src/daemon/command-worker.d.ts +19 -0
- package/dist/src/daemon/command-worker.js +182 -0
- package/dist/src/daemon/cursor-stream.d.ts +4 -0
- package/dist/src/daemon/cursor-stream.js +154 -0
- package/dist/src/daemon/daemon-adapters.d.ts +58 -0
- package/dist/src/daemon/daemon-adapters.js +102 -0
- package/dist/src/daemon/daemon-loops.d.ts +14 -0
- package/dist/src/daemon/daemon-loops.js +39 -0
- package/dist/src/daemon/daemon.d.ts +2 -33
- package/dist/src/daemon/daemon.js +126 -132
- package/dist/src/daemon/declared-input.d.ts +3 -0
- package/dist/src/daemon/declared-input.js +9 -0
- package/dist/src/daemon/delivery-router.js +1 -1
- package/dist/src/daemon/gemini-stream.d.ts +4 -0
- package/dist/src/daemon/gemini-stream.js +129 -0
- package/dist/src/daemon/github-ci-rerun.d.ts +26 -0
- package/dist/src/daemon/github-ci-rerun.js +92 -0
- package/dist/src/daemon/github-ci.js +89 -8
- package/dist/src/daemon/github-merge-call.d.ts +2 -0
- package/dist/src/daemon/github-merge.js +7 -3
- package/dist/src/daemon/github-methods.js +10 -0
- package/dist/src/daemon/github-operation.d.ts +1 -0
- package/dist/src/daemon/github-retry.js +8 -44
- package/dist/src/daemon/issue-queue.d.ts +1 -0
- package/dist/src/daemon/issue-queue.js +3 -26
- package/dist/src/daemon/notify.js +2 -1
- package/dist/src/daemon/opencode-stream.d.ts +5 -0
- package/dist/src/daemon/opencode-stream.js +87 -0
- package/dist/src/daemon/queue-status.d.ts +4 -0
- package/dist/src/daemon/queue-status.js +38 -0
- package/dist/src/daemon/retry-worktree.d.ts +18 -0
- package/dist/src/daemon/retry-worktree.js +139 -0
- package/dist/src/daemon/retrying-turn.d.ts +2 -0
- package/dist/src/daemon/retrying-turn.js +108 -30
- package/dist/src/daemon/schedule-journal.d.ts +19 -0
- package/dist/src/daemon/schedule-journal.js +57 -0
- package/dist/src/daemon/text-output.d.ts +18 -0
- package/dist/src/daemon/text-output.js +44 -0
- package/dist/src/daemon/ticket-registration.d.ts +5 -7
- package/dist/src/daemon/ticket-registration.js +85 -40
- package/dist/src/daemon/turn-command.d.ts +10 -0
- package/dist/src/daemon/turn-command.js +33 -0
- package/dist/src/daemon/turn-report.d.ts +18 -0
- package/dist/src/daemon/turn-report.js +79 -0
- package/dist/src/daemon/work-tree.d.ts +2 -1
- package/dist/src/daemon/work-tree.js +15 -12
- package/dist/src/daemon/workflow-generations.d.ts +32 -0
- package/dist/src/daemon/workflow-generations.js +57 -0
- package/dist/src/daemon/workflow-replay.d.ts +16 -0
- package/dist/src/daemon/workflow-replay.js +58 -0
- package/dist/src/daemon/workflow-schedules.d.ts +27 -0
- package/dist/src/daemon/workflow-schedules.js +185 -0
- package/dist/src/decision-wait.d.ts +1 -0
- package/dist/src/decision-wait.js +3 -0
- package/dist/src/delivery-backoff.d.ts +1 -0
- package/dist/src/delivery-backoff.js +3 -0
- package/dist/src/doctor-report.d.ts +24 -0
- package/dist/src/doctor-report.js +70 -0
- package/dist/src/execution-pin.d.ts +5 -0
- package/dist/src/execution-pin.js +67 -4
- package/dist/src/grok-result.d.ts +12 -0
- package/dist/src/grok-result.js +61 -0
- package/dist/src/harness-defaults.d.ts +35 -0
- package/dist/src/harness-defaults.js +121 -0
- package/dist/src/host/decision-resume.d.ts +35 -0
- package/dist/src/host/decision-resume.js +86 -0
- package/dist/src/host/gate-bridge.d.ts +48 -0
- package/dist/src/host/gate-bridge.js +124 -0
- package/dist/src/host/run-wait.d.ts +26 -0
- package/dist/src/host/run-wait.js +37 -0
- package/dist/src/host/start-delivery.d.ts +1 -1
- package/dist/src/host/start-delivery.js +10 -3
- package/dist/src/host/step-bridge-host.d.ts +6 -20
- package/dist/src/host/step-bridge-host.js +44 -58
- package/dist/src/merge-request.d.ts +19 -0
- package/dist/src/merge-request.js +32 -0
- package/dist/src/phone/canonical-json.d.ts +1 -0
- package/dist/src/phone/canonical-json.js +16 -0
- package/dist/src/phone/phone-link.d.ts +7 -0
- package/dist/src/phone/phone-link.js +21 -0
- package/dist/src/phone/qr-data.d.ts +8 -0
- package/dist/src/phone/qr-data.js +133 -0
- package/dist/src/phone/qr-matrix.d.ts +6 -0
- package/dist/src/phone/qr-matrix.js +175 -0
- package/dist/src/phone/qr-penalty.d.ts +3 -0
- package/dist/src/phone/qr-penalty.js +67 -0
- package/dist/src/phone/qr-picture.d.ts +5 -0
- package/dist/src/phone/qr-picture.js +24 -0
- package/dist/src/private-config.schema.json +263 -0
- package/dist/src/project-config.schema.json +65 -0
- package/dist/src/project-settings.d.ts +19 -0
- package/dist/src/project-settings.js +131 -0
- package/dist/src/relay/answer-check.d.ts +24 -0
- package/dist/src/relay/answer-check.js +145 -0
- package/dist/src/relay/answer-inbox.d.ts +15 -0
- package/dist/src/relay/answer-inbox.js +173 -0
- package/dist/src/relay/daemon-keys.d.ts +16 -0
- package/dist/src/relay/daemon-keys.js +75 -0
- package/dist/src/relay/decision-check.d.ts +3 -0
- package/dist/src/relay/decision-check.js +77 -0
- package/dist/src/relay/decision-close.d.ts +6 -0
- package/dist/src/relay/decision-close.js +72 -0
- package/dist/src/relay/decision-envelopes.d.ts +29 -0
- package/dist/src/relay/decision-envelopes.js +93 -0
- package/dist/src/relay/decision-watch.d.ts +14 -0
- package/dist/src/relay/decision-watch.js +68 -0
- package/dist/src/relay/envelope-post.d.ts +8 -0
- package/dist/src/relay/envelope-post.js +71 -0
- package/dist/src/relay/envelope.d.ts +28 -0
- package/dist/src/relay/envelope.js +53 -0
- package/dist/src/relay/hpke.d.ts +25 -0
- package/dist/src/relay/hpke.js +108 -0
- package/dist/src/relay/pairing-checks.d.ts +42 -0
- package/dist/src/relay/pairing-checks.js +172 -0
- package/dist/src/relay/pairing-follow.d.ts +8 -0
- package/dist/src/relay/pairing-follow.js +95 -0
- package/dist/src/relay/pairing-session.d.ts +29 -0
- package/dist/src/relay/pairing-session.js +87 -0
- package/dist/src/relay/phone-delivery.d.ts +51 -0
- package/dist/src/relay/phone-delivery.js +139 -0
- package/dist/src/relay/phone-devices.d.ts +36 -0
- package/dist/src/relay/phone-devices.js +46 -0
- package/dist/src/relay/phone-inbox.d.ts +18 -0
- package/dist/src/relay/phone-inbox.js +17 -0
- package/dist/src/relay/phone-operations.d.ts +18 -0
- package/dist/src/relay/phone-operations.js +121 -0
- package/dist/src/relay/phone-outbox.d.ts +21 -0
- package/dist/src/relay/phone-outbox.js +25 -0
- package/dist/src/relay/phone-socket.d.ts +6 -0
- package/dist/src/relay/phone-socket.js +63 -0
- package/dist/src/relay/relay-control.d.ts +7 -0
- package/dist/src/relay/relay-control.js +24 -0
- package/dist/src/relay/relay-files.d.ts +2 -0
- package/dist/src/relay/relay-files.js +23 -0
- package/dist/src/relay/relay-heartbeat.d.ts +17 -0
- package/dist/src/relay/relay-heartbeat.js +81 -0
- package/dist/src/relay/relay-http.d.ts +14 -0
- package/dist/src/relay/relay-http.js +63 -0
- package/dist/src/relay/relay-registration.d.ts +15 -0
- package/dist/src/relay/relay-registration.js +63 -0
- package/dist/src/relay/relay-service.d.ts +25 -0
- package/dist/src/relay/relay-service.js +216 -0
- package/dist/src/relay/relay-store.d.ts +48 -0
- package/dist/src/relay/relay-store.js +131 -0
- package/dist/src/relay/sealed-post.d.ts +25 -0
- package/dist/src/relay/sealed-post.js +52 -0
- package/dist/src/relay.d.ts +1 -0
- package/dist/src/relay.js +8 -0
- package/dist/src/report-statistics.d.ts +50 -0
- package/dist/src/report-statistics.js +70 -0
- package/dist/src/report.d.ts +171 -0
- package/dist/src/report.js +119 -0
- package/dist/src/repository-identity.d.ts +4 -0
- package/dist/src/repository-identity.js +4 -0
- package/dist/src/review-subject.d.ts +41 -0
- package/dist/src/review-subject.js +91 -0
- package/dist/src/run-wait.d.ts +23 -0
- package/dist/src/run-wait.js +20 -0
- package/dist/src/service/active-tickets.d.ts +4 -0
- package/dist/src/service/active-tickets.js +49 -0
- package/dist/src/service/command-effects.d.ts +4 -0
- package/dist/src/service/command-effects.js +16 -0
- package/dist/src/service/decision-handler.d.ts +4 -0
- package/dist/src/service/decision-handler.js +39 -4
- package/dist/src/service/gateway.js +18 -3
- package/dist/src/service/registry.d.ts +16 -3
- package/dist/src/service/registry.js +34 -3
- package/dist/src/service/replies.d.ts +9 -1
- package/dist/src/service/replies.js +12 -0
- package/dist/src/service/run-handlers.js +14 -55
- package/dist/src/service/run-metadata.d.ts +8 -0
- package/dist/src/service/run-metadata.js +53 -0
- package/dist/src/service/run-waits.d.ts +3 -0
- package/dist/src/service/run-waits.js +41 -0
- package/dist/src/service/service.d.ts +18 -2
- package/dist/src/service/service.js +23 -7
- package/dist/src/service/submission-handler.d.ts +0 -1
- package/dist/src/service/submission-handler.js +6 -34
- package/dist/src/service/worker-port.d.ts +1 -0
- package/dist/src/service/worker-totals.js +8 -23
- package/dist/src/step-bridge.d.ts +23 -0
- package/dist/src/steps/decision-gate.d.ts +2 -1
- package/dist/src/steps/decision-gate.js +7 -0
- package/dist/src/steps/merge-by-person.d.ts +2 -0
- package/dist/src/steps/merge-by-person.js +18 -0
- package/dist/src/steps/merge-when-green.d.ts +2 -0
- package/dist/src/steps/merge-when-green.js +62 -0
- package/dist/src/steps/review-by-agent.d.ts +5 -0
- package/dist/src/steps/review-by-agent.js +124 -0
- package/dist/src/steps/review-by-person.d.ts +4 -0
- package/dist/src/steps/review-by-person.js +16 -0
- package/dist/src/steps/review-subject.d.ts +2 -0
- package/dist/src/steps/review-subject.js +11 -0
- package/dist/src/steps/run-command.d.ts +2 -0
- package/dist/src/steps/run-command.js +15 -0
- package/dist/src/steps/sleep.d.ts +3 -0
- package/dist/src/steps/sleep.js +19 -0
- package/dist/src/steps/wait-for-decision.d.ts +2 -0
- package/dist/src/steps/wait-for-decision.js +71 -0
- package/dist/src/steps/wait-for-run.d.ts +5 -0
- package/dist/src/steps/wait-for-run.js +9 -0
- package/dist/src/storage/decision-snapshots.d.ts +1 -0
- package/dist/src/storage/decision-snapshots.js +7 -1
- package/dist/src/submission.d.ts +4 -0
- package/dist/src/submission.js +6 -2
- package/dist/src/testing.d.ts +29 -0
- package/dist/src/testing.js +264 -0
- package/dist/src/ticket-status-stream.d.ts +9 -0
- package/dist/src/ticket-status-stream.js +94 -0
- package/dist/src/token-prices.d.ts +12 -4
- package/dist/src/token-prices.js +15 -2
- package/dist/src/turn-profile.d.ts +1 -0
- package/dist/src/turn-profile.js +8 -1
- package/dist/src/worker-usage.d.ts +16 -0
- package/dist/src/worker-usage.js +57 -0
- package/dist/src/workflow-admission.d.ts +5 -0
- package/dist/src/workflow-candidate.d.ts +7 -2
- package/dist/src/workflow-candidate.js +47 -5
- package/dist/src/workflow-declaration.d.ts +21 -3
- package/dist/src/workflow-declaration.js +77 -9
- package/dist/src/workflow-discovery.d.ts +2 -1
- package/dist/src/workflow-discovery.js +4 -1
- package/dist/src/workflow-refusals.js +3 -0
- package/dist/src/workflow-schedule.d.ts +22 -0
- package/dist/src/workflow-schedule.js +53 -0
- package/dist/src/workflows.d.ts +11 -1
- package/dist/src/workflows.js +8 -0
- package/dist/tools/admit-workflow.d.ts +1 -0
- package/dist/tools/admit-workflow.js +18 -5
- package/dist/tools/doctor-adoption.d.ts +1 -0
- package/dist/tools/doctor-adoption.js +11 -0
- package/dist/tools/project-configuration.d.ts +4 -0
- package/dist/tools/project-configuration.js +47 -0
- package/dist/tools/self-host-processes.d.ts +1 -0
- package/dist/tools/self-host-processes.js +33 -22
- package/dist/tools/self-host-project.d.ts +4 -0
- package/dist/tools/self-host-project.js +61 -14
- package/dist/tools/self-host-runtime.d.ts +16 -0
- package/dist/tools/self-host-runtime.js +60 -0
- package/dist/tools/self-host-workflows.d.ts +1 -0
- package/dist/tools/self-host-workflows.js +36 -1
- package/dist/tools/self-host.js +86 -61
- package/dist/tools/workflow-candidate-counts.d.ts +6 -2
- package/dist/tools/workflow-candidate-counts.js +31 -16
- package/dist/tools/workflow-candidate-fields.d.ts +5 -0
- package/dist/tools/workflow-candidate-fields.js +24 -0
- package/dist/tools/workflow-candidate-helper-counts.d.ts +10 -0
- package/dist/tools/workflow-candidate-helper-counts.js +129 -0
- package/dist/tools/workflow-candidate-program.d.ts +2 -0
- package/dist/tools/workflow-candidate-program.js +36 -8
- package/dist/tools/workflow-candidate-source.js +77 -15
- package/dist/tools/workflow-candidate-syntax.d.ts +8 -2
- package/dist/tools/workflow-candidate-syntax.js +70 -26
- package/dist/tools/workflow-command.d.ts +1 -0
- package/dist/tools/workflow-command.js +143 -0
- package/dist/tools/workflow-folder-capture.d.ts +1 -0
- package/dist/tools/workflow-folder-capture.js +47 -2
- package/dist/tools/workflow-folders.d.ts +17 -1
- package/dist/tools/workflow-folders.js +59 -6
- package/dist/tools/workflow-test-hook.d.ts +7 -0
- package/dist/tools/workflow-test-hook.js +16 -0
- package/dist/tools/workflow-test-loader.d.ts +1 -0
- package/dist/tools/workflow-test-loader.js +10 -0
- package/dist/workflows/develop-ticket.js +1 -1
- package/dist/workflows/ticket-prompts.js +5 -1
- package/package.json +46 -4
- package/templates/develop/README.md +78 -0
- package/templates/develop/develop/accept.ts +11 -0
- package/templates/develop/develop/flow-tests.ts +357 -0
- package/templates/develop/develop/local.ts +40 -0
- package/templates/develop/develop/option-tests.ts +174 -0
- package/templates/develop/develop/partial-choice.ts +29 -0
- package/templates/develop/develop/partial.ts +28 -0
- package/templates/develop/develop/pull.ts +152 -0
- package/templates/develop/develop/queue-partial.ts +39 -0
- package/templates/develop/develop/refusal-tests.ts +174 -0
- package/templates/develop/develop/report.ts +156 -0
- package/templates/develop/develop/round.ts +40 -0
- package/templates/develop/develop/scenarios.ts +87 -0
- package/templates/develop/develop/turn.ts +67 -0
- package/templates/develop/develop.declaration.json +24 -0
- package/templates/develop/develop.test.ts +287 -0
- package/templates/develop/develop.ts +30 -0
- package/templates/develop/template.json +153 -0
- package/dist/src/chats/analysis-batches.d.ts +0 -42
- package/dist/src/chats/analysis-batches.js +0 -97
- package/dist/src/chats/analysis-checkpoint.d.ts +0 -29
- package/dist/src/chats/analysis-checkpoint.js +0 -31
- package/dist/src/chats/analysis-contract.d.ts +0 -80
- package/dist/src/chats/analysis-contract.js +0 -16
- package/dist/src/chats/analysis-data.d.ts +0 -3
- package/dist/src/chats/analysis-data.js +0 -85
- package/dist/src/chats/analysis-input.d.ts +0 -18
- package/dist/src/chats/analysis-input.js +0 -97
- package/dist/src/chats/analysis-links.d.ts +0 -2
- package/dist/src/chats/analysis-links.js +0 -25
- package/dist/src/chats/analysis-merge.d.ts +0 -16
- package/dist/src/chats/analysis-merge.js +0 -134
- package/dist/src/chats/analysis-prompt.d.ts +0 -18
- package/dist/src/chats/analysis-prompt.js +0 -42
- package/dist/src/chats/analysis-proposal.d.ts +0 -4
- package/dist/src/chats/analysis-proposal.js +0 -41
- package/dist/src/chats/analysis-provenance.d.ts +0 -4
- package/dist/src/chats/analysis-provenance.js +0 -99
- package/dist/src/chats/analysis-shape.d.ts +0 -4
- package/dist/src/chats/analysis-shape.js +0 -235
- package/dist/src/chats/analysis.d.ts +0 -3
- package/dist/src/chats/analysis.js +0 -42
- package/dist/src/chats/corpus-input.d.ts +0 -5
- package/dist/src/chats/corpus-input.js +0 -288
- package/dist/src/chats/destination.d.ts +0 -4
- package/dist/src/chats/destination.js +0 -96
- package/dist/src/chats/import.d.ts +0 -15
- package/dist/src/chats/import.js +0 -243
- package/dist/src/chats/input-file.d.ts +0 -3
- package/dist/src/chats/input-file.js +0 -32
- package/dist/src/chats/normalize.d.ts +0 -29
- package/dist/src/chats/normalize.js +0 -155
- package/dist/src/chats/previous-import.d.ts +0 -5
- package/dist/src/chats/previous-import.js +0 -34
- package/dist/src/chats/reader.d.ts +0 -21
- package/dist/src/chats/reader.js +0 -118
- package/dist/src/chats/redact-import.d.ts +0 -14
- package/dist/src/chats/redact-import.js +0 -141
- package/dist/src/chats/redaction.d.ts +0 -41
- package/dist/src/chats/redaction.js +0 -161
- package/dist/src/chats/reference-mapping.d.ts +0 -16
- package/dist/src/chats/reference-mapping.js +0 -153
- package/dist/src/chats/revision-input.d.ts +0 -3
- package/dist/src/chats/revision-input.js +0 -180
- package/dist/src/chats/revision.d.ts +0 -48
- package/dist/src/chats/revision.js +0 -94
- package/dist/src/chats/selection.d.ts +0 -25
- package/dist/src/chats/selection.js +0 -109
- package/dist/src/chats/source.d.ts +0 -23
- package/dist/src/chats/source.js +0 -135
- package/dist/src/chats/structure.d.ts +0 -57
- package/dist/src/chats/structure.js +0 -216
- package/dist/src/chats/workflow-generation-projection.d.ts +0 -8
- package/dist/src/chats/workflow-generation-projection.js +0 -75
- package/dist/src/chats/workflow-generation-source.d.ts +0 -25
- package/dist/src/chats/workflow-generation-source.js +0 -124
- package/dist/src/chats/workflow-generation-text.d.ts +0 -23
- package/dist/src/chats/workflow-generation-text.js +0 -74
- package/dist/src/chats/workflow-generation.d.ts +0 -69
- package/dist/src/chats/workflow-generation.js +0 -142
- package/dist/src/daemon/analysis-launch.d.ts +0 -5
- package/dist/src/daemon/analysis-launch.js +0 -81
- package/dist/src/daemon/analysis-token.d.ts +0 -6
- package/dist/src/daemon/analysis-token.js +0 -88
- package/dist/src/daemon/analysis-worker.d.ts +0 -20
- package/dist/src/daemon/analysis-worker.js +0 -271
- package/dist/src/daemon/chats-batch-binding.d.ts +0 -23
- package/dist/src/daemon/chats-batch-binding.js +0 -99
- package/dist/src/daemon/chats-capture.d.ts +0 -18
- package/dist/src/daemon/chats-capture.js +0 -194
- package/dist/src/daemon/chats-checkpoints.d.ts +0 -41
- package/dist/src/daemon/chats-checkpoints.js +0 -186
- package/dist/src/daemon/chats-files.d.ts +0 -42
- package/dist/src/daemon/chats-files.js +0 -252
- package/dist/src/daemon/chats-follow-up.d.ts +0 -38
- package/dist/src/daemon/chats-follow-up.js +0 -180
- package/dist/src/daemon/chats-question.d.ts +0 -15
- package/dist/src/daemon/chats-question.js +0 -93
- package/dist/src/daemon/chats-worker.d.ts +0 -13
- package/dist/src/daemon/chats-worker.js +0 -201
- package/dist/workflows/analyze-chats.d.ts +0 -15
- package/dist/workflows/analyze-chats.declaration.json +0 -22
- package/dist/workflows/analyze-chats.js +0 -250
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { analysisDocumentBytes, analysisEvidence, isAnalysisSnapshot, validAnalysisImportId, } from "./analysis-input.js";
|
|
2
|
-
import { analysisLaunchBytes, analysisPrompt, } from "./analysis-prompt.js";
|
|
3
|
-
export const analysisCaptureBytes = 52_428_800;
|
|
4
|
-
export function analysisBatchData(batch, capture) {
|
|
5
|
-
if (batch.batchIndex === 0 && batch.nextRecordIndex === batch.totalRecords)
|
|
6
|
-
return { snapshot: capture.snapshot ?? batch.snapshot };
|
|
7
|
-
return {
|
|
8
|
-
snapshot: batch.snapshot,
|
|
9
|
-
context: batch.context,
|
|
10
|
-
batch: {
|
|
11
|
-
batchIndex: batch.batchIndex,
|
|
12
|
-
nextRecordIndex: batch.nextRecordIndex,
|
|
13
|
-
capturedDigest: capture.digest,
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
export function prepareAnalysisBatch(snapshot, position) {
|
|
18
|
-
if (!isAnalysisSnapshot(snapshot) ||
|
|
19
|
-
!validAnalysisImportId(snapshot.importId))
|
|
20
|
-
return { kind: "refused", code: "analysis-input-refused" };
|
|
21
|
-
if (Buffer.byteLength(snapshot.corpus) > analysisCaptureBytes ||
|
|
22
|
-
[snapshot.redaction, snapshot.structure].some((text) => Buffer.byteLength(text) > analysisDocumentBytes))
|
|
23
|
-
return { kind: "refused", code: "analysis-too-large" };
|
|
24
|
-
try {
|
|
25
|
-
return preparedBatch(snapshot, position);
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return { kind: "refused", code: "analysis-input-refused" };
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
function preparedBatch(snapshot, position) {
|
|
32
|
-
const lines = snapshot.corpus.match(/[^\n]*\n|[^\n]+$/g) ?? [];
|
|
33
|
-
if (![position.nextRecordIndex, position.completedBatchCount].every(Number.isSafeInteger) ||
|
|
34
|
-
position.nextRecordIndex < 0 ||
|
|
35
|
-
position.nextRecordIndex >= lines.length ||
|
|
36
|
-
position.completedBatchCount < 0 ||
|
|
37
|
-
position.completedBatchCount > 4)
|
|
38
|
-
return { kind: "refused", code: "analysis-input-refused" };
|
|
39
|
-
if (position.completedBatchCount === 4)
|
|
40
|
-
return { kind: "refused", code: "analysis-batch-limit" };
|
|
41
|
-
const structure = analysisEvidence(snapshot).structure;
|
|
42
|
-
let longest = {
|
|
43
|
-
kind: "refused",
|
|
44
|
-
code: "analysis-too-large",
|
|
45
|
-
};
|
|
46
|
-
for (let end = position.nextRecordIndex + 1; end <= lines.length; end++) {
|
|
47
|
-
const batch = batchOf(snapshot, { lines, position, end, structure });
|
|
48
|
-
if (Math.max(batch.launchBytes, Buffer.byteLength(batch.adapterDocument)) >
|
|
49
|
-
analysisDocumentBytes)
|
|
50
|
-
break;
|
|
51
|
-
longest = batch;
|
|
52
|
-
}
|
|
53
|
-
return longest;
|
|
54
|
-
}
|
|
55
|
-
function batchOf(snapshot, input) {
|
|
56
|
-
const { position, lines, end } = input;
|
|
57
|
-
const batchSnapshot = {
|
|
58
|
-
...snapshot,
|
|
59
|
-
corpus: lines.slice(position.nextRecordIndex, end).join(""),
|
|
60
|
-
structure: projectedStructure(snapshot.importId, input),
|
|
61
|
-
};
|
|
62
|
-
const context = {
|
|
63
|
-
batchIndex: position.completedBatchCount,
|
|
64
|
-
firstRecordIndex: position.nextRecordIndex,
|
|
65
|
-
previousResult: position.previousResult,
|
|
66
|
-
};
|
|
67
|
-
const prompt = analysisPrompt(batchSnapshot, context);
|
|
68
|
-
return {
|
|
69
|
-
kind: "batch",
|
|
70
|
-
batchIndex: context.batchIndex,
|
|
71
|
-
firstRecordIndex: context.firstRecordIndex,
|
|
72
|
-
nextRecordIndex: end,
|
|
73
|
-
totalRecords: lines.length,
|
|
74
|
-
snapshot: batchSnapshot,
|
|
75
|
-
prompt,
|
|
76
|
-
launchBytes: analysisLaunchBytes(prompt),
|
|
77
|
-
adapterDocument: JSON.stringify({ snapshot: batchSnapshot, context }),
|
|
78
|
-
context,
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
function projectedStructure(importId, input) {
|
|
82
|
-
const { structure, position, end } = input;
|
|
83
|
-
return JSON.stringify({
|
|
84
|
-
schemaVersion: 1,
|
|
85
|
-
importId,
|
|
86
|
-
historyCompleteness: structure.historyCompleteness,
|
|
87
|
-
occurrences: structure.occurrences.slice(position.nextRecordIndex, end),
|
|
88
|
-
conflictGroups: structure.conflictGroups
|
|
89
|
-
.map((group) => ({
|
|
90
|
-
uuid: group.uuid,
|
|
91
|
-
variants: group.variants
|
|
92
|
-
.map((variant) => variant.filter((reference) => reference.recordIndex < end))
|
|
93
|
-
.filter((variant) => variant.length > 0),
|
|
94
|
-
}))
|
|
95
|
-
.filter((group) => group.variants.length > 0),
|
|
96
|
-
});
|
|
97
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { AnalysisResult } from "./analysis-contract.ts";
|
|
2
|
-
export interface AnalysisCheckpoint {
|
|
3
|
-
readonly schemaVersion: 1;
|
|
4
|
-
readonly runId: string;
|
|
5
|
-
readonly importId: string;
|
|
6
|
-
readonly capturedDigest: string;
|
|
7
|
-
readonly batchIndex: number | null;
|
|
8
|
-
readonly status: "partial" | "complete";
|
|
9
|
-
readonly result: AnalysisResult | null;
|
|
10
|
-
readonly total: number;
|
|
11
|
-
readonly covered: number;
|
|
12
|
-
readonly uncovered: number;
|
|
13
|
-
readonly completedBatchCount: number;
|
|
14
|
-
readonly nextRecordIndex: number;
|
|
15
|
-
}
|
|
16
|
-
export interface AnalysisCheckpointCapture {
|
|
17
|
-
readonly runId: string;
|
|
18
|
-
readonly importId: string;
|
|
19
|
-
readonly digest: string;
|
|
20
|
-
readonly totalRecords: number;
|
|
21
|
-
}
|
|
22
|
-
export declare function initialAnalysisCheckpoint(capture: AnalysisCheckpointCapture): AnalysisCheckpoint;
|
|
23
|
-
export declare function batchAnalysisCheckpoint(capture: AnalysisCheckpointCapture, position: {
|
|
24
|
-
readonly batchIndex: number;
|
|
25
|
-
readonly nextRecordIndex: number;
|
|
26
|
-
readonly result: AnalysisResult;
|
|
27
|
-
}): AnalysisCheckpoint & {
|
|
28
|
-
readonly result: AnalysisResult;
|
|
29
|
-
};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export function initialAnalysisCheckpoint(capture) {
|
|
2
|
-
return {
|
|
3
|
-
schemaVersion: 1,
|
|
4
|
-
runId: capture.runId,
|
|
5
|
-
importId: capture.importId,
|
|
6
|
-
capturedDigest: capture.digest,
|
|
7
|
-
batchIndex: null,
|
|
8
|
-
status: "partial",
|
|
9
|
-
result: null,
|
|
10
|
-
total: capture.totalRecords,
|
|
11
|
-
covered: 0,
|
|
12
|
-
uncovered: capture.totalRecords,
|
|
13
|
-
completedBatchCount: 0,
|
|
14
|
-
nextRecordIndex: 0,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
export function batchAnalysisCheckpoint(capture, position) {
|
|
18
|
-
return {
|
|
19
|
-
...initialAnalysisCheckpoint(capture),
|
|
20
|
-
batchIndex: position.batchIndex,
|
|
21
|
-
status: position.nextRecordIndex === capture.totalRecords &&
|
|
22
|
-
position.result.openQuestion === undefined
|
|
23
|
-
? "complete"
|
|
24
|
-
: "partial",
|
|
25
|
-
result: position.result,
|
|
26
|
-
covered: position.nextRecordIndex,
|
|
27
|
-
uncovered: capture.totalRecords - position.nextRecordIndex,
|
|
28
|
-
completedBatchCount: position.batchIndex + 1,
|
|
29
|
-
nextRecordIndex: position.nextRecordIndex,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import type { MessageRecord } from "./normalize.ts";
|
|
2
|
-
import type { ImportStructure, OccurrenceReference } from "./structure.ts";
|
|
3
|
-
export declare const analysisCodes: readonly ["not-plain-data", "unknown-version", "invalid-shape", "unknown-kind", "unknown-decision-type", "invalid-question", "question-without-conflict", "missing-source", "unknown-source", "copy-only", "insufficient-repetition", "invalid-loop-limit", "gate-on-non-gate", "authority-field"];
|
|
4
|
-
export type AnalysisCode = (typeof analysisCodes)[number];
|
|
5
|
-
export type ClaimKind = "explicit-human-instruction" | "observed-repetition" | "assistant-claim" | "exception" | "rejected-approach" | "uncertain-inference";
|
|
6
|
-
export type StageActivity = "work" | "routine-repair" | "accidental-interruption" | "tool-imposed-confirmation";
|
|
7
|
-
export type DecisionType = "design-decision" | "configured-action-approval" | "factual-input";
|
|
8
|
-
export interface AnalysisItem {
|
|
9
|
-
readonly id: string;
|
|
10
|
-
readonly description: string;
|
|
11
|
-
}
|
|
12
|
-
export interface AnalysisClaim extends AnalysisItem {
|
|
13
|
-
readonly kind: ClaimKind;
|
|
14
|
-
readonly sourceRefs: readonly OccurrenceReference[];
|
|
15
|
-
readonly counterevidenceRefs: readonly OccurrenceReference[];
|
|
16
|
-
}
|
|
17
|
-
export interface AnalysisStage extends AnalysisClaim {
|
|
18
|
-
readonly activity: StageActivity;
|
|
19
|
-
}
|
|
20
|
-
export interface AnalysisGate extends AnalysisClaim {
|
|
21
|
-
readonly stageId: string;
|
|
22
|
-
readonly type: DecisionType;
|
|
23
|
-
}
|
|
24
|
-
export interface AnalysisLoop extends AnalysisClaim {
|
|
25
|
-
readonly stageIds: readonly string[];
|
|
26
|
-
readonly maxIterations: number;
|
|
27
|
-
readonly exitCondition: string;
|
|
28
|
-
readonly exhaustedStoppingConditionId: string;
|
|
29
|
-
}
|
|
30
|
-
export interface AnalysisBranch extends AnalysisItem {
|
|
31
|
-
readonly sourceStageId: string;
|
|
32
|
-
readonly condition: string;
|
|
33
|
-
readonly targetStageId: string;
|
|
34
|
-
}
|
|
35
|
-
export interface AnalysisNonGate extends AnalysisItem {
|
|
36
|
-
readonly stageId: string;
|
|
37
|
-
readonly reason: Exclude<StageActivity, "work">;
|
|
38
|
-
}
|
|
39
|
-
export interface AnalysisProcess {
|
|
40
|
-
readonly id: string;
|
|
41
|
-
readonly name: string;
|
|
42
|
-
readonly scope: string;
|
|
43
|
-
readonly inputs: readonly AnalysisItem[];
|
|
44
|
-
readonly stages: readonly AnalysisStage[];
|
|
45
|
-
readonly branches: readonly AnalysisBranch[];
|
|
46
|
-
readonly loops: readonly AnalysisLoop[];
|
|
47
|
-
readonly artifacts: readonly AnalysisItem[];
|
|
48
|
-
readonly stoppingConditions: readonly AnalysisItem[];
|
|
49
|
-
readonly gates: readonly AnalysisGate[];
|
|
50
|
-
readonly nonGates: readonly AnalysisNonGate[];
|
|
51
|
-
}
|
|
52
|
-
export interface AnalysisCandidate {
|
|
53
|
-
readonly schemaVersion: 1;
|
|
54
|
-
readonly process: AnalysisProcess;
|
|
55
|
-
readonly openQuestion?: AnalysisQuestion;
|
|
56
|
-
}
|
|
57
|
-
export interface AnalysisQuestion {
|
|
58
|
-
readonly claimId: string;
|
|
59
|
-
readonly description: string;
|
|
60
|
-
readonly sourceRefs: readonly OccurrenceReference[];
|
|
61
|
-
readonly choices: readonly AnalysisItem[];
|
|
62
|
-
}
|
|
63
|
-
export interface AnalysisEvidence {
|
|
64
|
-
readonly records: readonly MessageRecord[];
|
|
65
|
-
readonly structure: ImportStructure;
|
|
66
|
-
}
|
|
67
|
-
export interface AnalysisResult extends AnalysisCandidate {
|
|
68
|
-
readonly limitations: {
|
|
69
|
-
readonly historyCompleteness: "unknown";
|
|
70
|
-
readonly independentObservations: "not-established";
|
|
71
|
-
readonly conflictGroups: ImportStructure["conflictGroups"];
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
export type AnalysisValidation = {
|
|
75
|
-
readonly accepted: true;
|
|
76
|
-
readonly result: AnalysisResult;
|
|
77
|
-
} | {
|
|
78
|
-
readonly accepted: false;
|
|
79
|
-
readonly codes: readonly AnalysisCode[];
|
|
80
|
-
};
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export const analysisCodes = [
|
|
2
|
-
"not-plain-data",
|
|
3
|
-
"unknown-version",
|
|
4
|
-
"invalid-shape",
|
|
5
|
-
"unknown-kind",
|
|
6
|
-
"unknown-decision-type",
|
|
7
|
-
"invalid-question",
|
|
8
|
-
"question-without-conflict",
|
|
9
|
-
"missing-source",
|
|
10
|
-
"unknown-source",
|
|
11
|
-
"copy-only",
|
|
12
|
-
"insufficient-repetition",
|
|
13
|
-
"invalid-loop-limit",
|
|
14
|
-
"gate-on-non-gate",
|
|
15
|
-
"authority-field",
|
|
16
|
-
];
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { isProxy } from "node:util/types";
|
|
2
|
-
export function forbiddenAnalysisField(key) {
|
|
3
|
-
const name = key.replaceAll(/[-_]/g, "").toLowerCase();
|
|
4
|
-
return /authority|permission|credential|publish|spend|tdd|^(?:code|scripts?|prompts?|workflows?|executable(?:workflow)?|commands?)$/.test(name);
|
|
5
|
-
}
|
|
6
|
-
function plainPrototype(value) {
|
|
7
|
-
const prototype = Object.getPrototypeOf(value);
|
|
8
|
-
const expected = Object.getPrototypeOf(Array.isArray(value) ? [] : {});
|
|
9
|
-
return (prototype === expected || (prototype === null && !Array.isArray(value)));
|
|
10
|
-
}
|
|
11
|
-
function arrayKeys(value, keys) {
|
|
12
|
-
return (keys.length === value.length + 1 &&
|
|
13
|
-
keys.every((key) => typeof key === "string" &&
|
|
14
|
-
(key === "length" ||
|
|
15
|
-
(/^(0|[1-9]\d*)$/.test(key) && Number(key) < value.length))));
|
|
16
|
-
}
|
|
17
|
-
function dataMember(value, key) {
|
|
18
|
-
const descriptor = Object.getOwnPropertyDescriptor(value, key);
|
|
19
|
-
if (!descriptor?.enumerable || !Object.hasOwn(descriptor, "value"))
|
|
20
|
-
return;
|
|
21
|
-
const member = descriptor.value;
|
|
22
|
-
return { key, value: member };
|
|
23
|
-
}
|
|
24
|
-
function members(value) {
|
|
25
|
-
if (!plainPrototype(value))
|
|
26
|
-
return;
|
|
27
|
-
const keys = Reflect.ownKeys(value);
|
|
28
|
-
if (Array.isArray(value) && !arrayKeys(value, keys))
|
|
29
|
-
return;
|
|
30
|
-
const result = [];
|
|
31
|
-
for (const key of keys) {
|
|
32
|
-
if (typeof key !== "string")
|
|
33
|
-
return;
|
|
34
|
-
if (Array.isArray(value) && key === "length")
|
|
35
|
-
continue;
|
|
36
|
-
const member = dataMember(value, key);
|
|
37
|
-
if (!member)
|
|
38
|
-
return;
|
|
39
|
-
result.push(member);
|
|
40
|
-
}
|
|
41
|
-
return result;
|
|
42
|
-
}
|
|
43
|
-
function primitive(value) {
|
|
44
|
-
return (value === null ||
|
|
45
|
-
typeof value === "string" ||
|
|
46
|
-
typeof value === "boolean" ||
|
|
47
|
-
(typeof value === "number" && Number.isFinite(value)));
|
|
48
|
-
}
|
|
49
|
-
export function inspectAnalysisData(value) {
|
|
50
|
-
const active = new Set();
|
|
51
|
-
const stack = [{ value }];
|
|
52
|
-
const codes = new Set();
|
|
53
|
-
while (stack.length > 0) {
|
|
54
|
-
const item = stack.pop();
|
|
55
|
-
if (!item)
|
|
56
|
-
break;
|
|
57
|
-
if (item.leave) {
|
|
58
|
-
active.delete(item.leave);
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
if (!enqueueData(item.value, { active, stack, codes }))
|
|
62
|
-
return ["not-plain-data"];
|
|
63
|
-
}
|
|
64
|
-
return [...codes];
|
|
65
|
-
}
|
|
66
|
-
function enqueueData(value, context) {
|
|
67
|
-
if (primitive(value))
|
|
68
|
-
return true;
|
|
69
|
-
if (typeof value !== "object" ||
|
|
70
|
-
value === null ||
|
|
71
|
-
isProxy(value) ||
|
|
72
|
-
context.active.has(value))
|
|
73
|
-
return false;
|
|
74
|
-
const entries = members(value);
|
|
75
|
-
if (!entries)
|
|
76
|
-
return false;
|
|
77
|
-
context.active.add(value);
|
|
78
|
-
context.stack.push({ value: null, leave: value });
|
|
79
|
-
for (const entry of entries) {
|
|
80
|
-
if (forbiddenAnalysisField(entry.key))
|
|
81
|
-
context.codes.add("authority-field");
|
|
82
|
-
context.stack.push({ value: entry.value });
|
|
83
|
-
}
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type Fields } from "../protocol.ts";
|
|
2
|
-
import type { AnalysisEvidence } from "./analysis-contract.ts";
|
|
3
|
-
export declare const analysisDocumentBytes = 65536;
|
|
4
|
-
export interface AnalysisSnapshot {
|
|
5
|
-
readonly importId: string;
|
|
6
|
-
readonly redaction: string;
|
|
7
|
-
readonly corpus: string;
|
|
8
|
-
readonly structure: string;
|
|
9
|
-
}
|
|
10
|
-
export declare function validAnalysisImportId(value: string): boolean;
|
|
11
|
-
export declare function isAnalysisSnapshot(value: unknown): value is AnalysisSnapshot;
|
|
12
|
-
export declare function analysisSaveInput(payload: Fields): {
|
|
13
|
-
snapshot: AnalysisSnapshot;
|
|
14
|
-
cycleId: string;
|
|
15
|
-
candidate: unknown;
|
|
16
|
-
reply: string;
|
|
17
|
-
};
|
|
18
|
-
export declare function analysisEvidence(snapshot: AnalysisSnapshot): AnalysisEvidence;
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { record } from "../protocol.js";
|
|
2
|
-
import { parseCorpus } from "./corpus-input.js";
|
|
3
|
-
import { structureImport } from "./structure.js";
|
|
4
|
-
import { categories } from "./redaction.js";
|
|
5
|
-
export const analysisDocumentBytes = 65_536;
|
|
6
|
-
export function validAnalysisImportId(value) {
|
|
7
|
-
return /^[a-f\d]{8}-[a-f\d]{4}-4[a-f\d]{3}-[89ab][a-f\d]{3}-[a-f\d]{12}$/.test(value);
|
|
8
|
-
}
|
|
9
|
-
function natural(value) {
|
|
10
|
-
return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
|
|
11
|
-
}
|
|
12
|
-
function validCounts(value, total) {
|
|
13
|
-
const counts = record(value);
|
|
14
|
-
if (counts === undefined || Object.keys(counts).length !== categories.length)
|
|
15
|
-
return false;
|
|
16
|
-
return (categories.every((category) => natural(counts[category])) &&
|
|
17
|
-
natural(total) &&
|
|
18
|
-
total ===
|
|
19
|
-
Object.values(counts).reduce((sum, count) => sum + Number(count), 0));
|
|
20
|
-
}
|
|
21
|
-
function validManifest(snapshot, recordCount) {
|
|
22
|
-
const fields = record(JSON.parse(snapshot.redaction));
|
|
23
|
-
if (fields === undefined || Object.keys(fields).length !== 6)
|
|
24
|
-
return false;
|
|
25
|
-
return (fields["schemaVersion"] === 1 &&
|
|
26
|
-
fields["ruleVersion"] === 1 &&
|
|
27
|
-
fields["importId"] === snapshot.importId &&
|
|
28
|
-
fields["recordCount"] === recordCount &&
|
|
29
|
-
validCounts(fields["counts"], fields["totalCount"]));
|
|
30
|
-
}
|
|
31
|
-
export function isAnalysisSnapshot(value) {
|
|
32
|
-
const fields = record(value);
|
|
33
|
-
return (fields !== undefined &&
|
|
34
|
-
Object.keys(fields).length === 4 &&
|
|
35
|
-
["importId", "redaction", "corpus", "structure"].every((key) => typeof fields[key] === "string"));
|
|
36
|
-
}
|
|
37
|
-
export function analysisSaveInput(payload) {
|
|
38
|
-
const snapshot = payload["snapshot"];
|
|
39
|
-
const cycleId = payload["cycleId"];
|
|
40
|
-
if (!isAnalysisSnapshot(snapshot) ||
|
|
41
|
-
snapshot.importId !== payload["importId"] ||
|
|
42
|
-
typeof cycleId !== "string" ||
|
|
43
|
-
!/^[A-Za-z0-9_-]{1,128}$/.test(cycleId) ||
|
|
44
|
-
typeof payload["reply"] !== "string")
|
|
45
|
-
throw new Error("analysis-input-refused");
|
|
46
|
-
let candidate;
|
|
47
|
-
try {
|
|
48
|
-
candidate = JSON.parse(payload["reply"]);
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
throw new Error("followUp" in payload
|
|
52
|
-
? "analysis-follow-up-refused"
|
|
53
|
-
: "analysis-invalid-json");
|
|
54
|
-
}
|
|
55
|
-
return { snapshot, cycleId, candidate, reply: payload["reply"] };
|
|
56
|
-
}
|
|
57
|
-
function canonical(value) {
|
|
58
|
-
if (Array.isArray(value))
|
|
59
|
-
return `[${value.map(canonical).join(",")}]`;
|
|
60
|
-
const fields = record(value);
|
|
61
|
-
if (fields === undefined)
|
|
62
|
-
return JSON.stringify(value);
|
|
63
|
-
return `{${Object.keys(fields)
|
|
64
|
-
.sort()
|
|
65
|
-
.map((key) => `${JSON.stringify(key)}:${canonical(fields[key])}`)
|
|
66
|
-
.join(",")}}`;
|
|
67
|
-
}
|
|
68
|
-
function matchingStructure(value, records) {
|
|
69
|
-
const fields = record(value);
|
|
70
|
-
const occurrences = fields?.["occurrences"];
|
|
71
|
-
if (!Array.isArray(occurrences) || occurrences.length !== records.length)
|
|
72
|
-
return false;
|
|
73
|
-
const classified = records.map((message, index) => {
|
|
74
|
-
const occurrence = record(occurrences[index]);
|
|
75
|
-
const copy = record(occurrence?.["copyOf"]);
|
|
76
|
-
return {
|
|
77
|
-
...message,
|
|
78
|
-
role: "user",
|
|
79
|
-
text: String(copy === undefined ? index : Number(copy["recordIndex"])),
|
|
80
|
-
blocks: [],
|
|
81
|
-
};
|
|
82
|
-
});
|
|
83
|
-
return canonical(value) === canonical(structureImport(classified));
|
|
84
|
-
}
|
|
85
|
-
export function analysisEvidence(snapshot) {
|
|
86
|
-
const records = parseCorpus(snapshot.corpus);
|
|
87
|
-
if (!validManifest(snapshot, records.length))
|
|
88
|
-
throw new Error("analysis-input-refused");
|
|
89
|
-
const envelope = record(JSON.parse(snapshot.structure));
|
|
90
|
-
if (envelope?.["schemaVersion"] !== 1 ||
|
|
91
|
-
envelope["importId"] !== snapshot.importId)
|
|
92
|
-
throw new Error("analysis-input-refused");
|
|
93
|
-
const structure = Object.fromEntries(Object.entries(envelope).filter(([key]) => !["schemaVersion", "importId"].includes(key)));
|
|
94
|
-
if (!matchingStructure(structure, records))
|
|
95
|
-
throw new Error("analysis-input-refused");
|
|
96
|
-
return { records, structure };
|
|
97
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
function validNonGate(stage, process) {
|
|
2
|
-
const classifications = process.nonGates.filter((item) => item.stageId === stage.id);
|
|
3
|
-
if (stage.activity === "work")
|
|
4
|
-
return classifications.length === 0;
|
|
5
|
-
return (classifications.length === 1 &&
|
|
6
|
-
classifications[0]?.reason === stage.activity &&
|
|
7
|
-
!process.gates.some((gate) => gate.stageId === stage.id));
|
|
8
|
-
}
|
|
9
|
-
export function inspectAnalysisLinks(process) {
|
|
10
|
-
const codes = new Set();
|
|
11
|
-
const stages = new Set(process.stages.map((stage) => stage.id));
|
|
12
|
-
const stopping = new Set(process.stoppingConditions.map((item) => item.id));
|
|
13
|
-
if (process.branches.some((branch) => !stages.has(branch.sourceStageId) || !stages.has(branch.targetStageId)))
|
|
14
|
-
codes.add("invalid-shape");
|
|
15
|
-
if (process.loops.some((loop) => loop.stageIds.some((id) => !stages.has(id)) ||
|
|
16
|
-
!stopping.has(loop.exhaustedStoppingConditionId)))
|
|
17
|
-
codes.add("invalid-shape");
|
|
18
|
-
if ([...process.gates, ...process.nonGates].some((item) => !stages.has(item.stageId)))
|
|
19
|
-
codes.add("invalid-shape");
|
|
20
|
-
if (codes.has("invalid-shape"))
|
|
21
|
-
return [...codes];
|
|
22
|
-
if (process.stages.some((stage) => !validNonGate(stage, process)))
|
|
23
|
-
codes.add("gate-on-non-gate");
|
|
24
|
-
return [...codes];
|
|
25
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { type AnalysisCode, type AnalysisEvidence, type AnalysisResult } from "./analysis.ts";
|
|
2
|
-
export interface AnalysisMergeInput {
|
|
3
|
-
readonly previousResult: AnalysisResult | null;
|
|
4
|
-
readonly candidate: unknown;
|
|
5
|
-
readonly evidence: AnalysisEvidence;
|
|
6
|
-
readonly nextRecordIndex: number;
|
|
7
|
-
}
|
|
8
|
-
export type AnalysisMergeCode = AnalysisCode | "analysis-merge-conflict" | "analysis-input-refused";
|
|
9
|
-
export type AnalysisMergeValidation = {
|
|
10
|
-
readonly accepted: true;
|
|
11
|
-
readonly result: AnalysisResult;
|
|
12
|
-
} | {
|
|
13
|
-
readonly accepted: false;
|
|
14
|
-
readonly codes: readonly AnalysisMergeCode[];
|
|
15
|
-
};
|
|
16
|
-
export declare function mergeAnalysisBatch(input: AnalysisMergeInput): AnalysisMergeValidation;
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { validateAnalysis, } from "./analysis.js";
|
|
2
|
-
import { inspectAnalysisData } from "./analysis-data.js";
|
|
3
|
-
import { inspectAnalysisBatchShape } from "./analysis-shape.js";
|
|
4
|
-
import { analysisCodes } from "./analysis-contract.js";
|
|
5
|
-
import { matchingAnalysisEvidence } from "./analysis-provenance.js";
|
|
6
|
-
const collections = [
|
|
7
|
-
"inputs",
|
|
8
|
-
"stages",
|
|
9
|
-
"branches",
|
|
10
|
-
"loops",
|
|
11
|
-
"artifacts",
|
|
12
|
-
"stoppingConditions",
|
|
13
|
-
"gates",
|
|
14
|
-
"nonGates",
|
|
15
|
-
];
|
|
16
|
-
function referencesInOrder(left, right) {
|
|
17
|
-
const references = new Map([...left, ...right].map((reference) => [
|
|
18
|
-
JSON.stringify([reference.recordIndex, reference.sourceId]),
|
|
19
|
-
reference,
|
|
20
|
-
]));
|
|
21
|
-
return [...references.values()].sort((left, right) => left.recordIndex - right.recordIndex);
|
|
22
|
-
}
|
|
23
|
-
function isClaim(item) {
|
|
24
|
-
return "sourceRefs" in item && "counterevidenceRefs" in item;
|
|
25
|
-
}
|
|
26
|
-
function mergeCollection(previous, incoming) {
|
|
27
|
-
const merged = new Map(previous.map((item) => [item.id, item]));
|
|
28
|
-
for (const item of incoming) {
|
|
29
|
-
const earlier = merged.get(item.id);
|
|
30
|
-
if (!isClaim(item)) {
|
|
31
|
-
merged.set(item.id, item);
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
const prior = earlier !== undefined && isClaim(earlier) ? earlier : undefined;
|
|
35
|
-
merged.set(item.id, {
|
|
36
|
-
...item,
|
|
37
|
-
sourceRefs: referencesInOrder(prior?.sourceRefs ?? [], item.sourceRefs),
|
|
38
|
-
counterevidenceRefs: referencesInOrder(prior?.counterevidenceRefs ?? [], item.counterevidenceRefs),
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
return [...merged.values()];
|
|
42
|
-
}
|
|
43
|
-
function mergeProcess(previous, incoming) {
|
|
44
|
-
const earlier = previous ?? incoming;
|
|
45
|
-
return {
|
|
46
|
-
...incoming,
|
|
47
|
-
inputs: mergeCollection(earlier.inputs, incoming.inputs),
|
|
48
|
-
stages: mergeCollection(earlier.stages, incoming.stages),
|
|
49
|
-
branches: mergeCollection(earlier.branches, incoming.branches),
|
|
50
|
-
loops: mergeCollection(earlier.loops, incoming.loops),
|
|
51
|
-
artifacts: mergeCollection(earlier.artifacts, incoming.artifacts),
|
|
52
|
-
stoppingConditions: mergeCollection(earlier.stoppingConditions, incoming.stoppingConditions),
|
|
53
|
-
gates: mergeCollection(earlier.gates, incoming.gates),
|
|
54
|
-
nonGates: mergeCollection(earlier.nonGates, incoming.nonGates),
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
function nonReferences(item) {
|
|
58
|
-
return JSON.stringify(Object.entries(item)
|
|
59
|
-
.filter(([key]) => !["sourceRefs", "counterevidenceRefs"].includes(key))
|
|
60
|
-
.sort(([left], [right]) => (left < right ? -1 : Number(left > right))));
|
|
61
|
-
}
|
|
62
|
-
function mergeConflict(previous, incoming) {
|
|
63
|
-
if (previous === undefined)
|
|
64
|
-
return false;
|
|
65
|
-
if (["id", "name", "scope"].some((key) => Reflect.get(previous, key) !== Reflect.get(incoming, key)))
|
|
66
|
-
return true;
|
|
67
|
-
const earlier = new Map(collections.flatMap((collection) => previous[collection].map((item) => [item.id, { collection, item }])));
|
|
68
|
-
return collections.some((collection) => incoming[collection].some((item) => {
|
|
69
|
-
const prior = earlier.get(item.id);
|
|
70
|
-
return (prior !== undefined &&
|
|
71
|
-
(prior.collection !== collection ||
|
|
72
|
-
nonReferences(prior.item) !== nonReferences(item)));
|
|
73
|
-
}));
|
|
74
|
-
}
|
|
75
|
-
function processedEvidence(input) {
|
|
76
|
-
const { records, structure } = input.evidence;
|
|
77
|
-
const end = input.nextRecordIndex;
|
|
78
|
-
return {
|
|
79
|
-
records: records.slice(0, end),
|
|
80
|
-
structure: {
|
|
81
|
-
...structure,
|
|
82
|
-
counts: { ...structure.counts, records: end },
|
|
83
|
-
occurrences: structure.occurrences.slice(0, end),
|
|
84
|
-
conflictGroups: structure.conflictGroups
|
|
85
|
-
.map((group) => ({
|
|
86
|
-
...group,
|
|
87
|
-
variants: group.variants
|
|
88
|
-
.map((variant) => variant.filter((reference) => reference.recordIndex < end))
|
|
89
|
-
.filter((variant) => variant.length > 0),
|
|
90
|
-
}))
|
|
91
|
-
.filter((group) => group.variants.length > 0),
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
function priorCodes(previous, evidence) {
|
|
96
|
-
if (previous === null)
|
|
97
|
-
return [];
|
|
98
|
-
const codes = inspectAnalysisData(previous);
|
|
99
|
-
if (codes.length > 0)
|
|
100
|
-
return codes;
|
|
101
|
-
if (previous.openQuestion !== undefined)
|
|
102
|
-
return ["analysis-input-refused"];
|
|
103
|
-
const candidate = Object.fromEntries(Object.entries(previous).filter(([key]) => key !== "limitations"));
|
|
104
|
-
const validation = validateAnalysis(candidate, evidence);
|
|
105
|
-
return validation.accepted ? [] : validation.codes;
|
|
106
|
-
}
|
|
107
|
-
function validInput(input) {
|
|
108
|
-
return (Number.isSafeInteger(input.nextRecordIndex) &&
|
|
109
|
-
input.nextRecordIndex > 0 &&
|
|
110
|
-
input.nextRecordIndex <= input.evidence.records.length &&
|
|
111
|
-
matchingAnalysisEvidence(input.evidence));
|
|
112
|
-
}
|
|
113
|
-
export function mergeAnalysisBatch(input) {
|
|
114
|
-
if (!validInput(input))
|
|
115
|
-
return { accepted: false, codes: ["analysis-input-refused"] };
|
|
116
|
-
const evidence = processedEvidence(input);
|
|
117
|
-
const previousCodes = priorCodes(input.previousResult, evidence);
|
|
118
|
-
if (previousCodes.length > 0)
|
|
119
|
-
return { accepted: false, codes: previousCodes };
|
|
120
|
-
const codes = new Set(inspectAnalysisData(input.candidate));
|
|
121
|
-
if (codes.has("not-plain-data"))
|
|
122
|
-
return { accepted: false, codes: ["not-plain-data"] };
|
|
123
|
-
if (!inspectAnalysisBatchShape(input.candidate, codes) || codes.size > 0)
|
|
124
|
-
return {
|
|
125
|
-
accepted: false,
|
|
126
|
-
codes: analysisCodes.filter((code) => codes.has(code)),
|
|
127
|
-
};
|
|
128
|
-
if (mergeConflict(input.previousResult?.process, input.candidate.process))
|
|
129
|
-
return { accepted: false, codes: ["analysis-merge-conflict"] };
|
|
130
|
-
return validateAnalysis({
|
|
131
|
-
...input.candidate,
|
|
132
|
-
process: mergeProcess(input.previousResult?.process, input.candidate.process),
|
|
133
|
-
}, evidence);
|
|
134
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { AnalysisResult } from "./analysis-contract.ts";
|
|
2
|
-
import type { AnalysisSnapshot } from "./analysis-input.ts";
|
|
3
|
-
export declare const analysisInstruction: string;
|
|
4
|
-
export interface AnalysisBatchContext {
|
|
5
|
-
readonly batchIndex: number;
|
|
6
|
-
readonly firstRecordIndex: number;
|
|
7
|
-
readonly previousResult: AnalysisResult | null;
|
|
8
|
-
}
|
|
9
|
-
export declare function analysisPrompt(snapshot: AnalysisSnapshot, context?: AnalysisBatchContext): string;
|
|
10
|
-
export declare function analysisLaunchBytes(prompt: string): number;
|
|
11
|
-
export interface AnalysisFollowUp {
|
|
12
|
-
readonly draft: Readonly<Record<string, unknown>>;
|
|
13
|
-
readonly answer: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function analysisFollowUpPrompt(snapshot: AnalysisSnapshot, input: AnalysisFollowUp & {
|
|
16
|
-
readonly context?: Readonly<Record<string, unknown>>;
|
|
17
|
-
}): string;
|
|
18
|
-
export declare function analysisFollowUp(value: unknown): AnalysisFollowUp;
|