@north-light/crouter 0.3.312 → 0.3.314
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/client.d.ts +27 -30
- package/dist/api/client.js +80 -67
- package/dist/api/dto/broker-ops.d.ts +10 -20
- package/dist/api/dto/canvas.d.ts +1 -10
- package/dist/api/dto/health.d.ts +113 -0
- package/dist/api/dto/human-requests.d.ts +14 -3
- package/dist/api/dto/human.d.ts +2 -48
- package/dist/api/dto/human.js +3 -2
- package/dist/api/dto/inbox.d.ts +14 -0
- package/dist/api/dto/mail.d.ts +43 -0
- package/dist/api/dto/nodes.d.ts +11 -8
- package/dist/api/dto/recovery.d.ts +96 -0
- package/dist/api/dto/reviews.d.ts +2 -2
- package/dist/api/routes.d.ts +9 -6
- package/dist/api/routes.js +11 -11
- package/dist/build-root.d.ts +4 -0
- package/dist/build-root.js +11 -1
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +35 -47
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +1 -1
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +12 -5
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +12 -5
- package/dist/cli.js +10 -1
- package/dist/clients/__tests__/helpers/human-daemon.d.ts +11 -0
- package/dist/clients/__tests__/helpers/human-daemon.js +60 -0
- package/dist/clients/attach/chrome/canvas-panels.js +1 -1
- package/dist/clients/attach/chrome/inbox-strip.d.ts +3 -3
- package/dist/clients/attach/chrome/inbox-strip.js +17 -9
- package/dist/clients/attach/chrome/ticket-panel.d.ts +2 -2
- package/dist/clients/attach/chrome/ticket-panel.js +77 -46
- package/dist/clients/attach/overlays/graph.js +6 -9
- package/dist/clients/attach/render/chat-view.d.ts +5 -4
- package/dist/clients/attach/render/chat-view.js +22 -13
- package/dist/clients/attach/render/page-block.d.ts +11 -7
- package/dist/clients/attach/render/page-block.js +64 -55
- package/dist/clients/attach/viewer.js +757 -746
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +56 -56
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +45 -32
- package/dist/clients/inbox/controller.d.ts +42 -14
- package/dist/clients/inbox/controller.js +240 -124
- package/dist/clients/inbox/dto-adapt.d.ts +28 -0
- package/dist/clients/inbox/dto-adapt.js +93 -0
- package/dist/clients/inbox/page-adapter.d.ts +5 -4
- package/dist/clients/inbox/page-adapter.js +12 -12
- package/dist/clients/inbox/resolve.d.ts +10 -5
- package/dist/clients/inbox/resolve.js +13 -12
- package/dist/clients/inbox/review/review-client.d.ts +0 -1
- package/dist/clients/inbox/review/review-client.js +0 -4
- package/dist/clients/inbox/review-adapter.d.ts +2 -1
- package/dist/clients/inbox/review-adapter.js +3 -5
- package/dist/clients/inbox/surface.d.ts +2 -2
- package/dist/clients/inbox/surface.js +19 -8
- package/dist/clients/inbox/tui.d.ts +3 -3
- package/dist/commands/__tests__/human.test.js +31 -15
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +36 -11
- package/dist/commands/{sys/__tests__ → __tests__/integration}/migrate.test.js +142 -36
- package/dist/commands/__tests__/revive-now-gate.test.js +2 -0
- package/dist/commands/api-client.d.ts +5 -4
- package/dist/commands/api-client.js +13 -7
- package/dist/commands/canvas-history/shared.js +1 -1
- package/dist/commands/canvas-history.js +1 -1
- package/dist/commands/canvas-roster.js +1 -1
- package/dist/commands/canvas.js +1 -2
- package/dist/commands/human/feedback.js +20 -17
- package/dist/commands/human/prompts.js +45 -36
- package/dist/commands/human/queue.js +73 -123
- package/dist/commands/human/review.js +6 -16
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +2 -0
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +2 -0
- package/dist/commands/memory/__tests__/repository-root-lint.test.js +2 -0
- package/dist/commands/node-inspect-artifacts.js +1 -1
- package/dist/commands/node-lifecycle-revive.d.ts +2 -2
- package/dist/commands/node-lifecycle-revive.js +9 -19
- package/dist/commands/pkg/plugin-manage.js +0 -1
- package/dist/commands/profile/show.js +4 -12
- package/dist/commands/surface-tmux-spread.js +1 -5
- package/dist/commands/sys/__tests__/config-model-ladders.test.js +23 -30
- package/dist/commands/sys/__tests__/sync-project-guidance.test.js +37 -11
- package/dist/commands/sys/branch.d.ts +2 -0
- package/dist/commands/sys/branch.js +19 -0
- package/dist/commands/sys/config.js +106 -33
- package/dist/commands/sys/daemon.d.ts +2 -0
- package/dist/commands/sys/daemon.js +130 -7
- package/dist/commands/sys/doctor.js +5 -15
- package/dist/commands/sys/migrate.js +21 -92
- package/dist/commands/sys/setup-settings-runner.js +4 -2
- package/dist/commands/sys.js +2 -15
- package/dist/core/__tests__/boot-fault-attempt.test.js +23 -1
- package/dist/core/__tests__/boot.test.js +32 -25
- package/dist/core/__tests__/broker-launch-candidates.test.js +49 -0
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +149 -176
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +59 -10
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +76 -20
- package/dist/core/__tests__/canvas.test.js +18 -47
- package/dist/core/__tests__/child-death-wake.test.js +29 -7
- package/dist/core/__tests__/cli-help-contract.test.js +2 -0
- package/dist/core/__tests__/close.test.js +29 -10
- package/dist/core/__tests__/collectible.test.js +2 -1
- package/dist/core/__tests__/config-change-delta.test.js +2 -0
- package/dist/core/__tests__/context-intro.test.js +13 -1
- package/dist/core/__tests__/cron-armed-context-failure.test.js +17 -12
- package/dist/core/__tests__/cron-held-settlement.test.js +21 -3
- package/dist/core/__tests__/cron-node-sink-parked-root.test.js +29 -10
- package/dist/core/__tests__/cron-self-cancel-delivery.test.js +14 -2
- package/dist/core/__tests__/cron-timeout-descendants.test.js +13 -1
- package/dist/core/__tests__/daemon-boot.test.js +51 -14
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +1 -1
- package/dist/core/__tests__/fixtures/fake-engine.js +8 -3
- package/dist/core/__tests__/focuses.test.js +10 -5
- package/dist/core/__tests__/helpers/harness.js +50 -18
- package/dist/core/__tests__/history-inbox.test.js +12 -16
- package/dist/core/__tests__/human-action-delivery.test.js +48 -28
- package/dist/core/__tests__/human-actions.test.js +7 -3
- package/dist/core/__tests__/inline-memory-refs.test.js +7 -2
- package/dist/core/__tests__/integration/broker-fork-seam.test.js +37 -10
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +42 -0
- package/dist/core/__tests__/integration/broker-snapshot-history.test.js +42 -29
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +36 -35
- package/dist/core/__tests__/integration/command-plugins.test.js +15 -6
- package/dist/core/__tests__/integration/deferred-no-wake.test.js +113 -92
- package/dist/core/__tests__/integration/fresh-home-commands.test.js +49 -0
- package/dist/core/__tests__/integration/host-teardown-process-group.test.js +9 -5
- package/dist/core/__tests__/integration/lifecycle-hooks.test.js +16 -3
- package/dist/core/__tests__/integration/plugin-revalidate.test.js +4 -0
- package/dist/core/__tests__/integration/profile-pause.test.js +4 -4
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +9 -12
- package/dist/core/__tests__/integration/revive.test.js +67 -21
- package/dist/core/__tests__/integration/spawn-root.test.js +51 -8
- package/dist/core/__tests__/integration/subscription-delivery.test.js +33 -21
- package/dist/core/__tests__/integration/worktree-land.test.js +5 -2
- package/dist/core/__tests__/integration/worktree-reap.test.js +15 -1
- package/dist/core/__tests__/kickoff.test.js +36 -39
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +2 -1
- package/dist/core/__tests__/lifecycle.test.js +2 -1
- package/dist/core/__tests__/live-lifecycle-prompt.test.js +13 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +2 -0
- package/dist/core/__tests__/migration.test.js +145 -31
- package/dist/core/__tests__/model-pin-durability.test.js +4 -1
- package/dist/core/__tests__/model-routes-config.test.js +13 -5
- package/dist/core/__tests__/node-outcome.test.js +93 -26
- package/dist/core/__tests__/on-read-crouter-home-fence.test.js +2 -1
- package/dist/core/__tests__/on-read-dedup-resume.test.js +2 -1
- package/dist/core/__tests__/on-read-nested-store.test.js +2 -1
- package/dist/core/__tests__/passive-subscription.test.js +50 -157
- package/dist/core/__tests__/plugin-kinds.test.js +6 -4
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +6 -1
- package/dist/core/__tests__/plugin-page-components.test.js +6 -4
- package/dist/core/__tests__/preview-registry-sync.test.js +2 -0
- package/dist/core/__tests__/profile-project-memory-delivery.test.js +4 -1
- package/dist/core/__tests__/prune.test.js +11 -5
- package/dist/core/__tests__/push-final-guard.test.js +14 -7
- package/dist/core/__tests__/relaunch-root.test.js +30 -2
- package/dist/core/__tests__/remote-canvas-target.test.js +7 -1
- package/dist/core/__tests__/repository-root-identity.test.js +4 -0
- package/dist/core/__tests__/review-model-floor.test.js +6 -3
- package/dist/core/__tests__/revive-all.test.js +13 -3
- package/dist/core/__tests__/revive-capacity.test.js +26 -4
- package/dist/core/__tests__/revive-parked-fresh.test.js +31 -8
- package/dist/core/__tests__/seam/broker-attach-stream.test.js +1 -1
- package/dist/core/__tests__/seam/broker-cap-freeze.test.js +4 -3
- package/dist/core/__tests__/seam/broker-crash-teardown.test.js +11 -14
- package/dist/core/__tests__/seam/broker-provider-retry.test.js +85 -71
- package/dist/core/__tests__/seam/dormancy-release.test.js +33 -19
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +7 -5
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +20 -6
- package/dist/core/__tests__/seam/node-outcome-delivery.test.js +27 -3
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +2 -1
- package/dist/core/__tests__/stop-guard.test.js +2 -1
- package/dist/core/__tests__/subscription-pool-credential-guard.test.js +4 -3
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +18 -4
- package/dist/core/__tests__/yield-ensures-daemon.test.js +2 -1
- package/dist/core/bootstrap.js +2 -0
- package/dist/core/broker-client/__tests__/transport-socket.test.js +51 -6
- package/dist/core/broker-client/transport-socket.d.ts +1 -0
- package/dist/core/broker-client/transport-socket.js +13 -5
- package/dist/core/canvas/__tests__/attention.test.js +29 -35
- package/dist/core/canvas/__tests__/history-transcript.test.js +6 -6
- package/dist/core/canvas/__tests__/render-remote.test.js +25 -9
- package/dist/core/canvas/attention.d.ts +2 -5
- package/dist/core/canvas/attention.js +15 -64
- package/dist/core/canvas/boot.d.ts +6 -7
- package/dist/core/canvas/boot.js +5 -9
- package/dist/core/canvas/canvas.d.ts +13 -109
- package/dist/core/canvas/canvas.js +140 -401
- package/dist/core/canvas/crons.d.ts +2 -0
- package/dist/core/canvas/crons.js +16 -15
- package/dist/core/canvas/daemon-owner.js +10 -0
- package/dist/core/canvas/db.d.ts +2 -2
- package/dist/core/canvas/db.js +2 -18
- package/dist/core/canvas/deliveries.d.ts +104 -0
- package/dist/core/canvas/deliveries.js +354 -0
- package/dist/core/canvas/executions.d.ts +29 -0
- package/dist/core/canvas/executions.js +68 -0
- package/dist/core/canvas/history.js +35 -35
- package/dist/core/canvas/index.d.ts +3 -1
- package/dist/core/canvas/index.js +3 -1
- package/dist/core/canvas/migrations.js +20 -12
- package/dist/core/canvas/nav-model.js +1 -3
- package/dist/core/canvas/nav-render.d.ts +4 -4
- package/dist/core/canvas/nav-render.js +11 -21
- package/dist/core/canvas/node-sql-migration.d.ts +3 -0
- package/dist/core/canvas/node-sql-migration.js +261 -0
- package/dist/core/canvas/paths.d.ts +2 -16
- package/dist/core/canvas/paths.js +2 -31
- package/dist/core/canvas/recovery.d.ts +76 -0
- package/dist/core/canvas/recovery.js +588 -0
- package/dist/core/canvas/remote-canvas-source.js +4 -0
- package/dist/core/canvas/render-source.d.ts +16 -27
- package/dist/core/canvas/render-source.js +16 -45
- package/dist/core/canvas/sessions.d.ts +33 -0
- package/dist/core/canvas/sessions.js +78 -0
- package/dist/core/canvas/types.d.ts +33 -33
- package/dist/core/canvas/types.js +2 -5
- package/dist/core/canvas/waits.d.ts +18 -0
- package/dist/core/canvas/waits.js +70 -0
- package/dist/core/canvas/worktrees.d.ts +40 -0
- package/dist/core/canvas/worktrees.js +93 -0
- package/dist/core/command.js +11 -0
- package/dist/core/config.d.ts +17 -12
- package/dist/core/config.js +106 -155
- package/dist/core/feed/__tests__/inbox-migrate.test.js +27 -31
- package/dist/core/feed/feed.d.ts +0 -6
- package/dist/core/feed/feed.js +68 -56
- package/dist/core/feed/inbox.d.ts +7 -81
- package/dist/core/feed/inbox.js +46 -378
- package/dist/core/feed/messages.d.ts +58 -0
- package/dist/core/feed/messages.js +217 -0
- package/dist/core/fs-utils.d.ts +4 -0
- package/dist/core/fs-utils.js +21 -1
- package/dist/core/human/answer.d.ts +1 -1
- package/dist/core/human/answer.js +1 -1
- package/dist/core/human/claim.d.ts +1 -1
- package/dist/core/human/claim.js +2 -4
- package/dist/core/human/component-docs.js +1 -1
- package/dist/core/human/feedback-companion.js +3 -2
- package/dist/core/human/feedback.d.ts +5 -8
- package/dist/core/human/feedback.js +57 -85
- package/dist/core/human/page-authoring.d.ts +30 -0
- package/dist/core/human/page-authoring.js +19 -0
- package/dist/core/human/requests.d.ts +136 -0
- package/dist/core/human/requests.js +515 -0
- package/dist/core/human/root.d.ts +0 -7
- package/dist/core/human/root.js +0 -17
- package/dist/core/human/scan.d.ts +2 -7
- package/dist/core/human/scan.js +48 -132
- package/dist/core/human/summary.d.ts +1 -1
- package/dist/core/human/summary.js +1 -1
- package/dist/core/human/tickets.d.ts +23 -83
- package/dist/core/human/tickets.js +92 -243
- package/dist/core/human/types.d.ts +5 -1
- package/dist/core/installed-plugins.js +8 -3
- package/dist/core/keybindings/__tests__/resolve.test.js +19 -17
- package/dist/core/locked-file.d.ts +6 -3
- package/dist/core/locked-file.js +36 -9
- package/dist/core/memory/extensions.js +2 -0
- package/dist/core/preview-registry.js +0 -1
- package/dist/core/profiles/__tests__/env-store.test.js +2 -0
- package/dist/core/profiles/default-binding.d.ts +0 -4
- package/dist/core/profiles/default-binding.js +12 -58
- package/dist/core/profiles/env-store.js +8 -3
- package/dist/core/profiles/manifest.d.ts +2 -37
- package/dist/core/profiles/manifest.js +35 -161
- package/dist/core/profiles/select.js +3 -0
- package/dist/core/review/__tests__/capture-origin.test.js +13 -2
- package/dist/core/review/__tests__/comments.test.js +28 -10
- package/dist/core/review/__tests__/remap.test.js +28 -10
- package/dist/core/review/__tests__/stage-identity.test.js +17 -7
- package/dist/core/review/birth.d.ts +1 -1
- package/dist/core/review/birth.js +34 -5
- package/dist/core/review/comments.js +1 -1
- package/dist/core/review/document.js +1 -1
- package/dist/core/review/project.d.ts +5 -1
- package/dist/core/review/project.js +14 -36
- package/dist/core/review/realize.d.ts +3 -6
- package/dist/core/review/realize.js +51 -168
- package/dist/core/review/remap.js +1 -1
- package/dist/core/review/stage.d.ts +3 -2
- package/dist/core/review/stage.js +2 -3
- package/dist/core/review/store.d.ts +3 -21
- package/dist/core/review/store.js +140 -186
- package/dist/core/review/types.d.ts +0 -1
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +9 -5
- package/dist/core/runtime/__tests__/spawn-env.test.js +8 -9
- package/dist/core/runtime/broker/auth-reload.js +9 -10
- package/dist/core/runtime/broker/daemon-ops.d.ts +25 -8
- package/dist/core/runtime/broker/daemon-ops.js +42 -9
- package/dist/core/runtime/broker/extension-abort.d.ts +3 -0
- package/dist/core/runtime/broker/extension-abort.js +11 -0
- package/dist/core/runtime/broker/fault-retry.d.ts +15 -6
- package/dist/core/runtime/broker/fault-retry.js +142 -95
- package/dist/core/runtime/broker/inbox.d.ts +4 -32
- package/dist/core/runtime/broker/inbox.js +4 -92
- package/dist/core/runtime/broker/rebind.d.ts +1 -0
- package/dist/core/runtime/broker/rebind.js +21 -12
- package/dist/core/runtime/broker-persona-guidance.d.ts +1 -1
- package/dist/core/runtime/broker-persona-guidance.js +2 -13
- package/dist/core/runtime/broker.js +28 -22
- package/dist/core/runtime/close.d.ts +3 -9
- package/dist/core/runtime/close.js +16 -27
- package/dist/core/runtime/fault.d.ts +3 -93
- package/dist/core/runtime/fault.js +9 -419
- package/dist/core/runtime/kickoff.d.ts +3 -6
- package/dist/core/runtime/kickoff.js +12 -18
- package/dist/core/runtime/launch.js +1 -1
- package/dist/core/runtime/lifecycle.js +40 -7
- package/dist/core/runtime/placement.js +2 -2
- package/dist/core/runtime/recycle.js +8 -2
- package/dist/core/runtime/reset.js +22 -6
- package/dist/core/runtime/revive.js +226 -218
- package/dist/core/runtime/spawn.js +14 -3
- package/dist/core/scoped-state/db.d.ts +18 -0
- package/dist/core/scoped-state/db.js +135 -0
- package/dist/core/scoped-state/migrate.d.ts +8 -0
- package/dist/core/scoped-state/migrate.js +181 -0
- package/dist/core/scoped-state/paths.d.ts +9 -0
- package/dist/core/scoped-state/paths.js +27 -0
- package/dist/core/scoped-state/profiles.d.ts +12 -0
- package/dist/core/scoped-state/profiles.js +62 -0
- package/dist/core/scoped-state/providers.d.ts +16 -0
- package/dist/core/scoped-state/providers.js +8 -0
- package/dist/core/scoped-state/schema.d.ts +3 -0
- package/dist/core/scoped-state/schema.js +26 -0
- package/dist/core/scoped-state/settings.d.ts +28 -0
- package/dist/core/scoped-state/settings.js +82 -0
- package/dist/core/subscription-state.d.ts +29 -48
- package/dist/core/subscription-state.js +176 -712
- package/dist/core/worktree-close.js +4 -4
- package/dist/core/worktree-mutation-async.js +2 -2
- package/dist/core/worktree-sweep.js +11 -16
- package/dist/core/worktree.js +6 -12
- package/dist/daemon/__tests__/autostart-storm.test.js +1 -39
- package/dist/daemon/__tests__/helpers/source-daemon.d.ts +2 -2
- package/dist/daemon/__tests__/helpers/source-daemon.js +7 -6
- package/dist/daemon/__tests__/integration/migration-startup.test.js +59 -26
- package/dist/daemon/__tests__/node-deadline-lane.test.js +2 -1
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +39 -15
- package/dist/daemon/__tests__/node-outcome-delivery.test.js +39 -10
- package/dist/daemon/__tests__/reconciler-signature.test.js +2 -2
- package/dist/daemon/__tests__/subtree-filter-freshness.test.js +2 -2
- package/dist/daemon/api/__tests__/broker-settle-park.test.js +17 -12
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +27 -5
- package/dist/daemon/api/__tests__/model-config.test.js +8 -8
- package/dist/daemon/api/__tests__/node-create-description.test.js +22 -5
- package/dist/daemon/api/__tests__/node-model-validation.test.js +21 -1
- package/dist/daemon/api/__tests__/nodes-activity-query.test.js +10 -12
- package/dist/daemon/api/__tests__/profile-launch-gates.test.js +4 -1
- package/dist/daemon/api/__tests__/profile-metadata-route.test.js +4 -1
- package/dist/daemon/api/__tests__/reopen-delivery.test.js +26 -8
- package/dist/daemon/api/__tests__/seam/api-server.test.js +24 -32
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +4 -1
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +5 -4
- package/dist/daemon/api/__tests__/seam/profile-delete.test.js +27 -41
- package/dist/daemon/api/__tests__/submit-result.test.js +3 -2
- package/dist/daemon/api/bridge.js +1 -1
- package/dist/daemon/api/handlers/bash-jobs.js +6 -7
- package/dist/daemon/api/handlers/broker-ops.js +47 -84
- package/dist/daemon/api/handlers/broker-recovery.d.ts +4 -0
- package/dist/daemon/api/handlers/broker-recovery.js +251 -0
- package/dist/daemon/api/handlers/canvas.js +2 -44
- package/dist/daemon/api/handlers/daemon.js +41 -0
- package/dist/daemon/api/handlers/feedback-comments.js +2 -2
- package/dist/daemon/api/handlers/health.js +10 -5
- package/dist/daemon/api/handlers/human-requests.js +168 -188
- package/dist/daemon/api/handlers/human.js +3 -151
- package/dist/daemon/api/handlers/inbox-page.d.ts +4 -0
- package/dist/daemon/api/handlers/inbox-page.js +89 -0
- package/dist/daemon/api/handlers/inbox.js +21 -120
- package/dist/daemon/api/handlers/messages.d.ts +1 -0
- package/dist/daemon/api/handlers/messages.js +73 -15
- package/dist/daemon/api/handlers/node-outcomes.js +58 -13
- package/dist/daemon/api/handlers/nodes.js +7 -13
- package/dist/daemon/api/handlers/reviews.js +4 -29
- package/dist/daemon/api/map.d.ts +25 -3
- package/dist/daemon/api/map.js +84 -14
- package/dist/daemon/api/server.js +68 -9
- package/dist/daemon/control.d.ts +18 -0
- package/dist/daemon/cron/disposition.d.ts +2 -0
- package/dist/daemon/cron/disposition.js +8 -5
- package/dist/daemon/cron/settle.js +37 -13
- package/dist/daemon/cron/sinks.d.ts +18 -1
- package/dist/daemon/cron/sinks.js +47 -93
- package/dist/daemon/crtrd-cli.js +4 -19
- package/dist/daemon/crtrd.d.ts +2 -0
- package/dist/daemon/crtrd.js +206 -81
- package/dist/daemon/fleet.js +5 -6
- package/dist/daemon/human/finish.d.ts +12 -24
- package/dist/daemon/human/finish.js +88 -285
- package/dist/daemon/human/settle.d.ts +40 -0
- package/dist/daemon/human/settle.js +89 -0
- package/dist/daemon/human/sweep.d.ts +20 -5
- package/dist/daemon/human/sweep.js +56 -60
- package/dist/daemon/manage.d.ts +21 -16
- package/dist/daemon/manage.js +85 -51
- package/dist/daemon/messaging/node-message.d.ts +1 -1
- package/dist/daemon/messaging/node-message.js +9 -12
- package/dist/daemon/park-activity.js +3 -3
- package/dist/daemon/reconcilers/bash-deadline.js +6 -7
- package/dist/daemon/reconcilers/broker-supervision.d.ts +1 -1
- package/dist/daemon/reconcilers/broker-supervision.js +41 -19
- package/dist/daemon/reconcilers/controller-death.js +6 -18
- package/dist/daemon/reconcilers/delivery-lane.d.ts +9 -0
- package/dist/daemon/reconcilers/delivery-lane.js +130 -0
- package/dist/daemon/reconcilers/live-obligation.js +3 -3
- package/dist/daemon/reconcilers/node-deadline.js +1 -1
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.d.ts +1 -1
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +10 -12
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +5 -5
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -1
- package/dist/daemon/reconcilers/pending-review-submit.js +3 -3
- package/dist/daemon/reconcilers/storage-maintenance.d.ts +2 -8
- package/dist/daemon/reconcilers/storage-maintenance.js +13 -43
- package/dist/daemon/review/companion.js +5 -11
- package/dist/daemon/review/deliver.d.ts +1 -5
- package/dist/daemon/review/deliver.js +3 -52
- package/dist/daemon/review/finish.d.ts +2 -27
- package/dist/daemon/review/finish.js +79 -263
- package/dist/daemon/review/sweep.d.ts +3 -10
- package/dist/daemon/review/sweep.js +13 -131
- package/dist/daemon/startup-policy.d.ts +0 -5
- package/dist/daemon/startup-policy.js +0 -5
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/migrations/__tests__/activation-concurrency.test.js +3 -2
- package/dist/migrations/__tests__/activation.test.js +9 -6
- package/dist/migrations/activation.d.ts +3 -2
- package/dist/migrations/activation.js +2 -4
- package/dist/migrations/corpus.d.ts +2 -5
- package/dist/migrations/corpus.js +9 -20
- package/dist/migrations/runner.d.ts +3 -1
- package/dist/migrations/runner.js +6 -2
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +21 -89
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +4 -2
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +51 -33
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +16 -2
- package/dist/pi-extensions/__tests__/pre-command-gate.test.js +13 -1
- package/dist/pi-extensions/canvas-inbox-watcher.js +98 -244
- package/dist/pi-extensions/canvas-passive-context.d.ts +4 -8
- package/dist/pi-extensions/canvas-passive-context.js +85 -37
- package/dist/pi-extensions/canvas-stophook.js +47 -31
- package/dist/shared/env.d.ts +1 -0
- package/dist/shared/env.js +3 -0
- package/package.json +1 -1
- package/runtime.lock.json +5 -5
- package/dist/clients/attach/__tests__/page-block.test.js +0 -54
- package/dist/clients/inbox/review-visibility.d.ts +0 -5
- package/dist/clients/inbox/review-visibility.js +0 -19
- package/dist/commands/canvas-rebuild-index.d.ts +0 -2
- package/dist/commands/canvas-rebuild-index.js +0 -46
- package/dist/core/__tests__/human-cancel-guard.test.js +0 -110
- package/dist/core/__tests__/human-deliver.test.js +0 -256
- package/dist/core/__tests__/human-node-not-supervised.test.d.ts +0 -1
- package/dist/core/__tests__/human-node-not-supervised.test.js +0 -89
- package/dist/core/__tests__/integration/human-deliver-e2e.test.d.ts +0 -1
- package/dist/core/__tests__/integration/human-deliver-e2e.test.js +0 -131
- package/dist/core/__tests__/phase4-review-store.test.d.ts +0 -1
- package/dist/core/__tests__/phase4-review-store.test.js +0 -144
- package/dist/core/__tests__/watchdog-abort-arms-retry.test.d.ts +0 -1
- package/dist/core/__tests__/watchdog-abort-arms-retry.test.js +0 -110
- package/dist/core/canvas/human-deliveries.d.ts +0 -39
- package/dist/core/canvas/human-deliveries.js +0 -75
- package/dist/core/canvas/node-outcome-deliveries.d.ts +0 -64
- package/dist/core/canvas/node-outcome-deliveries.js +0 -159
- package/dist/core/feed/passive.d.ts +0 -3
- package/dist/core/feed/passive.js +0 -53
- package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +0 -1
- package/dist/core/human/__tests__/inbox-cancel-worker.js +0 -7
- package/dist/core/human/__tests__/inbox-claim-worker.d.ts +0 -1
- package/dist/core/human/__tests__/inbox-claim-worker.js +0 -17
- package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +0 -1
- package/dist/core/human/__tests__/inbox-stale-claim-worker.js +0 -8
- package/dist/core/human/__tests__/integration/inbox-core.test.d.ts +0 -1
- package/dist/core/human/__tests__/integration/inbox-core.test.js +0 -145
- package/dist/core/human/__tests__/page-tickets.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-tickets.test.js +0 -161
- package/dist/core/review/ticket-filter.d.ts +0 -17
- package/dist/core/review/ticket-filter.js +0 -21
- package/dist/core/runtime/broker/passive.d.ts +0 -17
- package/dist/core/runtime/broker/passive.js +0 -44
- package/dist/core/runtime/busy.d.ts +0 -46
- package/dist/core/runtime/busy.js +0 -150
- package/dist/daemon/__tests__/startup-block-marker.test.d.ts +0 -1
- package/dist/daemon/__tests__/startup-block-marker.test.js +0 -86
- package/dist/daemon/api/__tests__/review-terminal-conflict.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/review-terminal-conflict.test.js +0 -98
- package/dist/daemon/human/deliver-action.d.ts +0 -3
- package/dist/daemon/human/deliver-action.js +0 -9
- package/dist/daemon/node-outcome/deliver-outcome.d.ts +0 -3
- package/dist/daemon/node-outcome/deliver-outcome.js +0 -9
- package/dist/daemon/reconcilers/human-delivery-lane.d.ts +0 -10
- package/dist/daemon/reconcilers/human-delivery-lane.js +0 -41
- package/dist/daemon/reconcilers/node-outcome-delivery-lane.d.ts +0 -10
- package/dist/daemon/reconcilers/node-outcome-delivery-lane.js +0 -41
- package/dist/daemon/startup-block-marker.d.ts +0 -25
- package/dist/daemon/startup-block-marker.js +0 -99
- /package/dist/{clients/attach/__tests__/page-block.test.d.ts → api/dto/mail.js} +0 -0
- /package/dist/{commands/sys/__tests__/migrate.test.d.ts → api/dto/recovery.js} +0 -0
- /package/dist/{core/__tests__/human-cancel-guard.test.d.ts → commands/__tests__/integration/migrate.test.d.ts} +0 -0
- /package/dist/core/__tests__/{human-deliver.test.d.ts → integration/fresh-home-commands.test.d.ts} +0 -0
|
@@ -4,7 +4,11 @@ import { tmpdir } from 'node:os';
|
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { afterEach, test } from 'node:test';
|
|
6
6
|
import { createNode } from '../../canvas/canvas.js';
|
|
7
|
-
import { closeDb } from '../../canvas/db.js';
|
|
7
|
+
import { closeDb, migrate, openDb } from '../../canvas/db.js';
|
|
8
|
+
import { resetSession } from '../../canvas/sessions.js';
|
|
9
|
+
import { resetScopeCache } from '../../scope.js';
|
|
10
|
+
import { closeScopedStores } from '../../scoped-state/db.js';
|
|
11
|
+
import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
|
|
8
12
|
import { SessionManager } from '../../runtime/broker-sdk.js';
|
|
9
13
|
import { captureOrigin } from '../companion.js';
|
|
10
14
|
import { stageReview } from '../stage.js';
|
|
@@ -20,6 +24,7 @@ const previousHome = process.env['HOME'];
|
|
|
20
24
|
const previousCrtrHome = process.env['CRTR_HOME'];
|
|
21
25
|
afterEach(() => {
|
|
22
26
|
closeDb();
|
|
27
|
+
closeScopedStores();
|
|
23
28
|
for (const home of homes.splice(0))
|
|
24
29
|
rmSync(home, { recursive: true, force: true });
|
|
25
30
|
if (previousHome === undefined)
|
|
@@ -30,12 +35,17 @@ afterEach(() => {
|
|
|
30
35
|
delete process.env['CRTR_HOME'];
|
|
31
36
|
else
|
|
32
37
|
process.env['CRTR_HOME'] = previousCrtrHome;
|
|
38
|
+
resetScopeCache();
|
|
33
39
|
});
|
|
34
40
|
function home() {
|
|
35
41
|
const value = mkdtempSync(join(tmpdir(), 'crtr-review-capture-'));
|
|
36
42
|
homes.push(value);
|
|
37
43
|
process.env['HOME'] = value;
|
|
38
|
-
process.env['CRTR_HOME'] = value;
|
|
44
|
+
process.env['CRTR_HOME'] = join(value, 'canvas');
|
|
45
|
+
resetScopeCache();
|
|
46
|
+
initializeFreshScopedStore({ kind: 'user', root: join(value, '.crouter') });
|
|
47
|
+
initializeFreshScopedStore({ kind: 'provider', root: join(value, '.pi', 'agent') });
|
|
48
|
+
migrate(openDb());
|
|
39
49
|
return value;
|
|
40
50
|
}
|
|
41
51
|
function node(id, cwd, sourceFile, launchModel) {
|
|
@@ -70,6 +80,7 @@ function seededOrigin(options = {}) {
|
|
|
70
80
|
});
|
|
71
81
|
const sourceFile = options.sourceFile ?? session.getSessionFile();
|
|
72
82
|
createNode(node('origin', cwd, sourceFile, options.launchModel));
|
|
83
|
+
resetSession('origin', { sessionId: session.getSessionId(), transcriptPath: sourceFile });
|
|
73
84
|
return { cwd, session, sourceFile };
|
|
74
85
|
}
|
|
75
86
|
async function capture(options) {
|
|
@@ -3,23 +3,41 @@ import { mkdtempSync, rmSync } from 'node:fs';
|
|
|
3
3
|
import { test } from 'node:test';
|
|
4
4
|
import { tmpdir } from 'node:os';
|
|
5
5
|
import { join } from 'node:path';
|
|
6
|
-
import { closeDb, openDb } from '../../canvas/db.js';
|
|
6
|
+
import { closeDb, migrate, openDb } from '../../canvas/db.js';
|
|
7
|
+
import { commitBindingRequest, openRequest } from '../../human/requests.js';
|
|
7
8
|
import { createComment, deleteComment, editComment, getComment, listCommentEvents, listComments, listReviewEvents, reopenComment, resolveComment, } from '../comments.js';
|
|
8
9
|
function seedReview(reviewId) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
const created = '2026-01-01T00:00:00.000Z';
|
|
11
|
+
commitBindingRequest({
|
|
12
|
+
request_id: reviewId,
|
|
13
|
+
idempotency_key: `idempotency-${reviewId}`,
|
|
14
|
+
requester_node_id: 'origin',
|
|
15
|
+
companion_node_id: 'companion',
|
|
16
|
+
request_dir: '/tmp/review',
|
|
17
|
+
file: '/tmp/source.md',
|
|
18
|
+
specification: {
|
|
19
|
+
origin_kind: 'inline',
|
|
20
|
+
origin_session_file: '/tmp/session.jsonl',
|
|
21
|
+
origin_session_id: 'session',
|
|
22
|
+
origin_leaf_id: 'leaf',
|
|
23
|
+
model_spec: 'anthropic/claude',
|
|
24
|
+
branch_file: '/tmp/branch.jsonl',
|
|
25
|
+
baseline_sha256: 'baseline',
|
|
26
|
+
baseline_bytes: 4,
|
|
27
|
+
captured_at: created,
|
|
28
|
+
},
|
|
29
|
+
anchor_base_sha256: 'baseline',
|
|
30
|
+
anchor_base_bytes: Buffer.from('base'),
|
|
31
|
+
created_at: created,
|
|
32
|
+
inbox_listed: false,
|
|
33
|
+
});
|
|
34
|
+
assert.equal(openRequest(reviewId, created), true);
|
|
18
35
|
}
|
|
19
36
|
test('comment projection and audit are durable, idempotent, and terminally tombstoned', () => {
|
|
20
37
|
const home = mkdtempSync(join(tmpdir(), 'crtr-comments-store-'));
|
|
21
38
|
const previousHome = process.env['CRTR_HOME'];
|
|
22
39
|
process.env['CRTR_HOME'] = home;
|
|
40
|
+
migrate(openDb());
|
|
23
41
|
try {
|
|
24
42
|
const reviewId = 'review-comments-test';
|
|
25
43
|
seedReview(reviewId);
|
|
@@ -3,22 +3,39 @@ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
|
3
3
|
import { tmpdir } from 'node:os';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { test } from 'node:test';
|
|
6
|
-
import { closeDb, openDb, withCanvasWrite } from '../../canvas/db.js';
|
|
6
|
+
import { closeDb, migrate, openDb, withCanvasWrite } from '../../canvas/db.js';
|
|
7
|
+
import { commitBindingRequest, openRequest } from '../../human/requests.js';
|
|
7
8
|
import { createComment, getComment, listCommentEvents } from '../comments.js';
|
|
8
9
|
import { captureAnchorText, requireCurrentDocument, requireCurrentDocumentLocked, readReviewSource } from '../document.js';
|
|
9
10
|
import { applyRangeBatch } from '../remap.js';
|
|
10
11
|
import { readAnchorBase, getReview } from '../store.js';
|
|
11
12
|
import { ReviewOperationError } from '../types.js';
|
|
12
13
|
function seedReview(reviewId, file, hash, bytes) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
const created = '2026-01-01T00:00:00.000Z';
|
|
15
|
+
commitBindingRequest({
|
|
16
|
+
request_id: reviewId,
|
|
17
|
+
idempotency_key: `idempotency-${reviewId}`,
|
|
18
|
+
requester_node_id: 'origin',
|
|
19
|
+
companion_node_id: 'companion',
|
|
20
|
+
request_dir: '/tmp/review',
|
|
21
|
+
file,
|
|
22
|
+
specification: {
|
|
23
|
+
origin_kind: 'inline',
|
|
24
|
+
origin_session_file: '/tmp/session.jsonl',
|
|
25
|
+
origin_session_id: 'session',
|
|
26
|
+
origin_leaf_id: 'leaf',
|
|
27
|
+
model_spec: 'openai/gpt',
|
|
28
|
+
branch_file: '/tmp/branch.jsonl',
|
|
29
|
+
baseline_sha256: hash,
|
|
30
|
+
baseline_bytes: bytes.length,
|
|
31
|
+
captured_at: created,
|
|
32
|
+
},
|
|
33
|
+
anchor_base_sha256: hash,
|
|
34
|
+
anchor_base_bytes: bytes,
|
|
35
|
+
created_at: created,
|
|
36
|
+
inbox_listed: false,
|
|
37
|
+
});
|
|
38
|
+
assert.equal(openRequest(reviewId, created), true);
|
|
22
39
|
}
|
|
23
40
|
function expectReviewError(action, code) {
|
|
24
41
|
let caught;
|
|
@@ -58,6 +75,7 @@ test('document preconditions and a full range batch preserve comment identity an
|
|
|
58
75
|
const home = mkdtempSync(join(tmpdir(), 'crtr-review-remap-'));
|
|
59
76
|
const previousHome = process.env['CRTR_HOME'];
|
|
60
77
|
process.env['CRTR_HOME'] = home;
|
|
78
|
+
migrate(openDb());
|
|
61
79
|
try {
|
|
62
80
|
const file = join(home, 'review.md');
|
|
63
81
|
writeFileSync(file, 'one\ntwo\nthree\n');
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import assert from 'node:assert/strict';
|
|
2
|
-
import { mkdtempSync, mkdirSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { existsSync, mkdtempSync, mkdirSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { tmpdir } from 'node:os';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
5
|
import { afterEach, test } from 'node:test';
|
|
6
6
|
import { createNode } from '../../canvas/canvas.js';
|
|
7
|
-
import { closeDb, openDb } from '../../canvas/db.js';
|
|
7
|
+
import { closeDb, migrate, openDb } from '../../canvas/db.js';
|
|
8
|
+
import { resetSession } from '../../canvas/sessions.js';
|
|
9
|
+
import { resetScopeCache } from '../../scope.js';
|
|
10
|
+
import { closeScopedStores } from '../../scoped-state/db.js';
|
|
11
|
+
import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
|
|
8
12
|
import { SessionManager } from '../../runtime/broker-sdk.js';
|
|
9
13
|
import { stageReview } from '../stage.js';
|
|
10
14
|
import { ReviewOperationError } from '../types.js';
|
|
@@ -14,6 +18,7 @@ const previousAgentDir = process.env['PI_CODING_AGENT_DIR'];
|
|
|
14
18
|
const homes = [];
|
|
15
19
|
afterEach(() => {
|
|
16
20
|
closeDb();
|
|
21
|
+
closeScopedStores();
|
|
17
22
|
for (const home of homes.splice(0))
|
|
18
23
|
rmSync(home, { recursive: true, force: true });
|
|
19
24
|
if (previousHome === undefined)
|
|
@@ -28,6 +33,7 @@ afterEach(() => {
|
|
|
28
33
|
delete process.env['PI_CODING_AGENT_DIR'];
|
|
29
34
|
else
|
|
30
35
|
process.env['PI_CODING_AGENT_DIR'] = previousAgentDir;
|
|
36
|
+
resetScopeCache();
|
|
31
37
|
});
|
|
32
38
|
function assistant(model) {
|
|
33
39
|
return {
|
|
@@ -45,9 +51,13 @@ function setup() {
|
|
|
45
51
|
const home = mkdtempSync(join(tmpdir(), 'crtr-review-identity-'));
|
|
46
52
|
homes.push(home);
|
|
47
53
|
process.env['HOME'] = home;
|
|
48
|
-
process.env['CRTR_HOME'] = home;
|
|
54
|
+
process.env['CRTR_HOME'] = join(home, 'canvas');
|
|
55
|
+
resetScopeCache();
|
|
56
|
+
initializeFreshScopedStore({ kind: 'user', root: join(home, '.crouter') });
|
|
57
|
+
migrate(openDb());
|
|
49
58
|
const agentDir = join(home, 'agent');
|
|
50
59
|
mkdirSync(agentDir);
|
|
60
|
+
initializeFreshScopedStore({ kind: 'provider', root: agentDir });
|
|
51
61
|
process.env['PI_CODING_AGENT_DIR'] = agentDir;
|
|
52
62
|
writeFileSync(join(agentDir, 'models.json'), JSON.stringify({
|
|
53
63
|
providers: {
|
|
@@ -73,9 +83,9 @@ function setup() {
|
|
|
73
83
|
mode: 'base',
|
|
74
84
|
lifecycle: 'terminal',
|
|
75
85
|
status: 'idle',
|
|
76
|
-
pi_session_file: sourceFile,
|
|
77
86
|
launch: { extensions: [], env: {}, model: 'lm-studio/m:high' },
|
|
78
87
|
});
|
|
88
|
+
resetSession('origin', { sessionId: original.getSessionId(), transcriptPath: sourceFile });
|
|
79
89
|
const target = join(home, 'target.md');
|
|
80
90
|
writeFileSync(target, '# target\n');
|
|
81
91
|
return { home, sessions, sourceFile, target };
|
|
@@ -87,7 +97,7 @@ function replacement(sessions, thinking) {
|
|
|
87
97
|
return next.getSessionFile();
|
|
88
98
|
}
|
|
89
99
|
function reviewCount() {
|
|
90
|
-
return openDb().prepare(
|
|
100
|
+
return openDb().prepare("SELECT COUNT(*) AS count FROM human_requests WHERE kind = 'review'").get().count;
|
|
91
101
|
}
|
|
92
102
|
async function stageWithCapturedFileReplacements(fixture, replacements) {
|
|
93
103
|
const originalOpen = SessionManager.open;
|
|
@@ -134,7 +144,7 @@ test('stageReview rejects a source file that loses identity twice', async () =>
|
|
|
134
144
|
assert.equal(error.code, 'review_origin_unstable');
|
|
135
145
|
return true;
|
|
136
146
|
});
|
|
137
|
-
const reviews = join(fixture.home, 'reviews');
|
|
138
|
-
assert.equal(readdirSync(reviews).length, 0);
|
|
147
|
+
const reviews = join(fixture.home, 'canvas', 'reviews');
|
|
148
|
+
assert.equal(existsSync(reviews) ? readdirSync(reviews).length : 0, 0);
|
|
139
149
|
assert.equal(reviewCount(), 0);
|
|
140
150
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type StageReviewArgs } from './stage.js';
|
|
2
1
|
import type { ReviewRecord } from './types.js';
|
|
2
|
+
import { type StageReviewArgs } from './stage.js';
|
|
3
3
|
/**
|
|
4
4
|
* Stage filesystem-only fork state, atomically select the canonical binding,
|
|
5
5
|
* then realize that committed winner. Staging is never visible by itself.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { commitBindingRequest } from '../human/requests.js';
|
|
2
|
+
import { getReview } from './store.js';
|
|
2
3
|
import { discardStaging, stageReview } from './stage.js';
|
|
3
4
|
import { realizeReview } from './realize.js';
|
|
4
5
|
/**
|
|
@@ -7,11 +8,35 @@ import { realizeReview } from './realize.js';
|
|
|
7
8
|
*/
|
|
8
9
|
export async function createReview(args) {
|
|
9
10
|
const staged = await stageReview(args);
|
|
10
|
-
if (staged.existing !== undefined)
|
|
11
|
-
|
|
11
|
+
if (staged.existing !== undefined) {
|
|
12
|
+
await realizeReview(staged.existing.request_id);
|
|
13
|
+
const review = getReview(staged.existing.request_id);
|
|
14
|
+
if (review === null)
|
|
15
|
+
throw new Error(`realized review disappeared: ${staged.existing.request_id}`);
|
|
16
|
+
return review;
|
|
17
|
+
}
|
|
12
18
|
let committed;
|
|
13
19
|
try {
|
|
14
|
-
committed =
|
|
20
|
+
committed = commitBindingRequest({
|
|
21
|
+
request_id: staged.row.review_id,
|
|
22
|
+
idempotency_key: staged.row.idempotency_key,
|
|
23
|
+
requester_node_id: staged.row.origin_node_id,
|
|
24
|
+
companion_node_id: staged.row.companion_node_id,
|
|
25
|
+
request_dir: staged.row.review_dir,
|
|
26
|
+
file: staged.row.file,
|
|
27
|
+
specification: {
|
|
28
|
+
origin_kind: staged.row.origin_kind,
|
|
29
|
+
origin_session_file: staged.row.origin_session_file, origin_session_id: staged.row.origin_session_id,
|
|
30
|
+
origin_leaf_id: staged.row.origin_leaf_id, model_spec: staged.row.model_spec, branch_file: staged.row.branch_file,
|
|
31
|
+
baseline_sha256: staged.row.baseline_sha256, baseline_bytes: staged.row.baseline_bytes,
|
|
32
|
+
captured_at: staged.row.captured_at, output_path: staged.row.output_path,
|
|
33
|
+
},
|
|
34
|
+
anchor_base_sha256: staged.row.anchor_base_sha256,
|
|
35
|
+
anchor_base_bytes: staged.row.anchor_base_bytes,
|
|
36
|
+
created_at: staged.row.created,
|
|
37
|
+
subtitle: staged.row.subtitle,
|
|
38
|
+
inbox_listed: staged.row.origin_kind === 'ticket',
|
|
39
|
+
});
|
|
15
40
|
}
|
|
16
41
|
catch (error) {
|
|
17
42
|
discardStaging(staged.row.review_id);
|
|
@@ -19,5 +44,9 @@ export async function createReview(args) {
|
|
|
19
44
|
}
|
|
20
45
|
if (!committed.won)
|
|
21
46
|
discardStaging(staged.row.review_id);
|
|
22
|
-
|
|
47
|
+
await realizeReview(committed.request_id);
|
|
48
|
+
const review = getReview(committed.request_id);
|
|
49
|
+
if (review === null)
|
|
50
|
+
throw new Error(`realized review disappeared: ${committed.request_id}`);
|
|
51
|
+
return review;
|
|
23
52
|
}
|
|
@@ -88,7 +88,7 @@ function requireStoredComment(db, commentIdValue) {
|
|
|
88
88
|
return row;
|
|
89
89
|
}
|
|
90
90
|
function assertReviewExists(db, reviewId) {
|
|
91
|
-
const row = db.prepare(
|
|
91
|
+
const row = db.prepare("SELECT request_id FROM human_requests WHERE request_id = ? AND kind = 'review' AND state = 'open'").get(reviewId);
|
|
92
92
|
if (row === undefined) {
|
|
93
93
|
throw new ReviewOperationError('unknown_review', 'review was not found', { received: reviewId });
|
|
94
94
|
}
|
|
@@ -68,7 +68,7 @@ export function requireCurrentDocument(review, expected_doc_hash) {
|
|
|
68
68
|
}
|
|
69
69
|
/** Verify a create-time source precondition from the review row held by the caller's canvas write transaction. */
|
|
70
70
|
export function requireCurrentDocumentLocked(db, review_id, expected_doc_hash) {
|
|
71
|
-
const review = db.prepare(
|
|
71
|
+
const review = db.prepare("SELECT file, anchor_base_sha256 FROM human_requests WHERE request_id = ? AND kind = 'review' AND state = 'open'").get(review_id);
|
|
72
72
|
if (review === undefined) {
|
|
73
73
|
throw new ReviewOperationError('unknown_review', 'review was not found', { received: review_id });
|
|
74
74
|
}
|
|
@@ -7,7 +7,11 @@ export interface ReviewCommentSnapshot {
|
|
|
7
7
|
}
|
|
8
8
|
/** Build the immutable approval result from the review row and one comment snapshot. */
|
|
9
9
|
export declare function buildReviewResult(review: ReviewRecord, snapshot: ReviewCommentSnapshot, approvedSha256: string, at: string): ReviewResult;
|
|
10
|
-
/** Project
|
|
10
|
+
/** Project every terminal review from its SQL row; no ticket bridge participates. */
|
|
11
11
|
export declare function projectReviewResult(review: ReviewRecord, result: ReviewResult): {
|
|
12
12
|
destinations: string[];
|
|
13
13
|
};
|
|
14
|
+
/** Cancellation has no review approval payload but still receives a durable projection. */
|
|
15
|
+
export declare function projectReviewCancellation(review: ReviewRecord, result: unknown): {
|
|
16
|
+
destinations: string[];
|
|
17
|
+
};
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
|
-
import { atomicWriteJson
|
|
3
|
-
import { ticketDir } from '../human/root.js';
|
|
4
|
-
import { reviewResultPath } from '../canvas/paths.js';
|
|
2
|
+
import { atomicWriteJson } from '../human/convention.js';
|
|
5
3
|
/** Build the immutable approval result from the review row and one comment snapshot. */
|
|
6
4
|
export function buildReviewResult(review, snapshot, approvedSha256, at) {
|
|
7
5
|
return {
|
|
@@ -21,38 +19,18 @@ export function buildReviewResult(review, snapshot, approvedSha256, at) {
|
|
|
21
19
|
savedAt: at,
|
|
22
20
|
};
|
|
23
21
|
}
|
|
24
|
-
/** Project
|
|
22
|
+
/** Project every terminal review from its SQL row; no ticket bridge participates. */
|
|
25
23
|
export function projectReviewResult(review, result) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
reviewId: result.review_id,
|
|
39
|
-
changed: result.changed,
|
|
40
|
-
baselineSha256: result.baseline_sha256,
|
|
41
|
-
approvedSha256: result.approved_sha256,
|
|
42
|
-
companionNodeId: result.companion_node_id,
|
|
43
|
-
commentsTotal: result.comments_total,
|
|
44
|
-
commentsUnresolved: result.comments_unresolved,
|
|
45
|
-
};
|
|
46
|
-
const response = responsePath(dir);
|
|
47
|
-
publishJsonExclusive(response, { schema: 'humanloop.review-response/v1', kind: 'review', result: feedback, completedAt: result.submittedAt });
|
|
48
|
-
destinations.push(response);
|
|
49
|
-
const output = review.output_path ?? join(dir, 'feedback.json');
|
|
50
|
-
atomicWriteJson(output, feedback);
|
|
51
|
-
destinations.push(output);
|
|
52
|
-
return { destinations };
|
|
53
|
-
}
|
|
54
|
-
const output = reviewResultPath(review.review_id);
|
|
55
|
-
atomicWriteJson(output, result);
|
|
56
|
-
destinations.push(output);
|
|
57
|
-
return { destinations };
|
|
24
|
+
const resultPath = join(review.review_dir, 'result.json');
|
|
25
|
+
atomicWriteJson(resultPath, result);
|
|
26
|
+
const output = review.output_path ?? join(review.review_dir, 'feedback.json');
|
|
27
|
+
if (output !== resultPath)
|
|
28
|
+
atomicWriteJson(output, result);
|
|
29
|
+
return { destinations: output === resultPath ? [resultPath] : [resultPath, output] };
|
|
30
|
+
}
|
|
31
|
+
/** Cancellation has no review approval payload but still receives a durable projection. */
|
|
32
|
+
export function projectReviewCancellation(review, result) {
|
|
33
|
+
const resultPath = join(review.review_dir, 'result.json');
|
|
34
|
+
atomicWriteJson(resultPath, result);
|
|
35
|
+
return { destinations: [resultPath] };
|
|
58
36
|
}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
* safe to repeat after a crash; review.json is the final visibility switch.
|
|
5
|
-
*/
|
|
6
|
-
export declare function realizeReview(reviewId: string): Promise<ReviewRecord>;
|
|
1
|
+
import { type HumanRequestRecord } from '../human/requests.js';
|
|
2
|
+
/** Finish a committed binding without bridge creation or directory descriptor publication. */
|
|
3
|
+
export declare function realizeReview(reviewId: string): Promise<HumanRequestRecord>;
|