@humwick/server 0.130.1 → 0.130.2
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 +5 -0
- package/docs/guides/tools-administration.md +4 -0
- package/docs/guides/tools-coordination.md +1 -0
- package/docs/guides/tools-tasks.md +8 -0
- package/docs/guides/workflows.md +58 -0
- package/docs/openapi.json +414 -1
- package/package.json +8 -17
- package/public/assets/{MessageBubble-BWpoBjl4.js → MessageBubble-BWLqMGKG.js} +2 -2
- package/public/assets/{PlanGraphPanel-C0auck3n.js → PlanGraphPanel-3TlIQpjk.js} +2 -2
- package/public/assets/{TraceView-DBnOx7AQ.js → TraceView-Wimm0Czv.js} +2 -2
- package/public/assets/{VaultDecisionCard-0kp2oNBC.js → VaultDecisionCard-Bau_vNax.js} +2 -2
- package/public/assets/{activity-yLztXEBt.js → activity-CrSurn-r.js} +2 -2
- package/public/assets/{agent-lineage-BbJDR1dW.js → agent-lineage-CknAJKcb.js} +2 -2
- package/public/assets/agent-liveness-CaNwK0Zf.js +2 -0
- package/public/assets/{agent-name-CTZBrSD9.js → agent-name-DKbiIhBo.js} +2 -2
- package/public/assets/agent-profiles-DwF6EQ4R.js +2 -0
- package/public/assets/{agent-project-badge-9TqzUUYE.js → agent-project-badge-Diz4Sjjb.js} +2 -2
- package/public/assets/{agent-tools-D4n40pn8.js → agent-tools-CRhpRQza.js} +2 -2
- package/public/assets/{agent-type-icon-D6FUarOf.js → agent-type-icon-LrUEU3lB.js} +2 -2
- package/public/assets/{agents-BYDslkJc.js → agents-B-v66C-4.js} +2 -2
- package/public/assets/{analytics-B-XSbEMC.js → analytics-BqCb-LKi.js} +2 -2
- package/public/assets/{artifact-viewer-DdWIfV6M.js → artifact-viewer-kf4pGuAR.js} +2 -2
- package/public/assets/{artifacts-oBOqks-2.js → artifacts-D32zyw4Y.js} +2 -2
- package/public/assets/{artifacts-DPN1q4pA.js → artifacts-DJevXcvg.js} +2 -2
- package/public/assets/{automation-4KcRFXEu.js → automation-BpRajx_5.js} +2 -2
- package/public/assets/{backlog-Cw9xPTCF.js → backlog-D_UjTdzX.js} +2 -2
- package/public/assets/{busy-health-CTu32MZt.js → busy-health-N3VEh4ao.js} +2 -2
- package/public/assets/{channels-BiXzg1G9.js → channels-9jopungq.js} +2 -2
- package/public/assets/{chat-Ctk2qwvA.js → chat-CSXrTB3C.js} +2 -2
- package/public/assets/{code-preview-Bm1wWqAp.js → code-preview-p1NnmqK0.js} +2 -2
- package/public/assets/{connectors-C36ax4Vw.js → connectors-CZdqlDNL.js} +2 -2
- package/public/assets/{cosmos-Jj9LK2Wf.js → cosmos-BgdsE4dG.js} +2 -2
- package/public/assets/{crate-agent-H6S7-B9T.js → crate-agent-30aXTKva.js} +2 -2
- package/public/assets/{dependency-graph-Cd1E23wa.js → dependency-graph-B_jvw2GE.js} +2 -2
- package/public/assets/{deploys-Bwfq146q.js → deploys-DoN6bAb5.js} +2 -2
- package/public/assets/{display-CfO7rTuF.js → display-BrKWFGJz.js} +2 -2
- package/public/assets/{files-DhhZI2Ih.js → files-D6XEu8Ng.js} +2 -2
- package/public/assets/{fleet-B_rFEbnL.js → fleet-C7jQWbw2.js} +2 -2
- package/public/assets/{fleet-metrics-BkHP-P3R.js → fleet-metrics-BiDs3MLx.js} +2 -2
- package/public/assets/{formatted-body-Cm1RrzmN.js → formatted-body-CQBwc1fb.js} +3 -3
- package/public/assets/{formatted-body-impl-DQiOuOD1.js → formatted-body-impl-DyG0WsQS.js} +2 -2
- package/public/assets/{host-providers-dialog-CHqwXTov.js → host-providers-dialog-DKaW31dN.js} +2 -2
- package/public/assets/index-CRHep3M9.js +15 -0
- package/public/assets/index-MYAIwYTX.css +2 -0
- package/public/assets/{insights-fH1EL-qZ.js → insights-CzrtkpOE.js} +2 -2
- package/public/assets/{integrations-C5Oix6ng.js → integrations-aVsUmigt.js} +2 -2
- package/public/assets/{issue-ref-chip-ODyondIa.js → issue-ref-chip-BnSlM_95.js} +2 -2
- package/public/assets/{log-viewer-Cvfy6PW7.js → log-viewer-qe7Ee47Z.js} +2 -2
- package/public/assets/{maintenance-D8CDH5wZ.js → maintenance-NfjqFZAk.js} +2 -2
- package/public/assets/{managed-agents-egllbpij.js → managed-agents-BiH0HgaE.js} +2 -2
- package/public/assets/{markdown-preview-CYSFgVgK.js → markdown-preview-BixaT3Xr.js} +3 -3
- package/public/assets/{markdown-preview-impl-BteVIjX4.js → markdown-preview-impl-DNGlWIS3.js} +2 -2
- package/public/assets/{memory-C8WmXsyr.js → memory-DNsCl6UX.js} +2 -2
- package/public/assets/{messages-BzQdqlO6.js → messages-DopU1L1X.js} +2 -2
- package/public/assets/{orchestrators-B1HxzkNw.js → orchestrators-Cq7ckLQT.js} +2 -2
- package/public/assets/{overview-DCUnI4Z7.js → overview-C1DCTzzV.js} +2 -2
- package/public/assets/{pairs-ftCd2XcD.js → pairs-DE_m6rrE.js} +2 -2
- package/public/assets/{profile-icon-B2zH8DMH.js → profile-icon-B3rfh77F.js} +2 -2
- package/public/assets/project-profile-instructions-DQWZE0kA.js +2 -0
- package/public/assets/projects-Br2Bd2h1.js +2 -0
- package/public/assets/{prompt-settings-Bftq9czX.js → prompt-settings-BKvFsvGD.js} +2 -2
- package/public/assets/provider-display-DsuWMvVL.js +2 -0
- package/public/assets/{registry-DWCU5c8q.js → registry-Cw38_6gW.js} +2 -2
- package/public/assets/run-card-CpKqRbhg.js +2 -0
- package/public/assets/scroll-text-BKXS1ahr.js +2 -0
- package/public/assets/{secrets-C7GIUATz.js → secrets-DxI-vzSq.js} +2 -2
- package/public/assets/{service-access-settings-C3aujqTG.js → service-access-settings-D9s_VJbd.js} +2 -2
- package/public/assets/{settings-C6sZ9eBa.js → settings-CKZTVGIx.js} +2 -2
- package/public/assets/{shipping-Bu8p1gEw.js → shipping-B9YtnwtG.js} +2 -2
- package/public/assets/{stats-V9Z-GxUd.js → stats-DyUBKyWI.js} +2 -2
- package/public/assets/{status-dot-CVv0iGHL.js → status-dot-DYqlEUhJ.js} +2 -2
- package/public/assets/{store-BvtFdlGX.js → store-DcClXLH0.js} +3 -3
- package/public/assets/{tasks-CXU75HRF.js → tasks-Bh7Chr4-.js} +2 -2
- package/public/assets/{teams-BPf976zb.js → teams-bowI7qVY.js} +2 -2
- package/public/assets/{terminal-viewer-DE9BOe-8.js → terminal-viewer-BgVLHdsU.js} +3 -3
- package/public/assets/{terminal-viewer-impl-D04pjmGh.js → terminal-viewer-impl-Dz22UPy6.js} +2 -2
- package/public/assets/token-estimate-Co-Jdphh.js +2 -0
- package/public/assets/{use-agent-terminal-B1yR456R.js → use-agent-terminal-DSQQ-iY7.js} +2 -2
- package/public/assets/{use-decisions-D-S4tpDf.js → use-decisions-samMQhQf.js} +2 -2
- package/public/assets/use-project-list-59LheVP7.js +2 -0
- package/public/assets/{use-selectors-CnrAk2YP.js → use-selectors-BZa25xEB.js} +2 -2
- package/public/assets/{user-avatar-nBFIcR4M.js → user-avatar-DHxlvUvV.js} +2 -2
- package/public/assets/versioned-prompt-editor-BmED5DnJ.js +8 -0
- package/public/assets/{work-queue-TCjJxeT-.js → work-queue-CSvpuNLz.js} +2 -2
- package/public/assets/{workflow-marker-Cf3Hf2fN.js → workflow-marker-DAZcj5qt.js} +2 -2
- package/public/assets/{workflows-CXQX20Qj.js → workflows-DdmxRSyg.js} +2 -2
- package/public/assets/{workspaces-qSYzKYMA.js → workspaces-BxeKfVuF.js} +2 -2
- package/public/cosmos.html +4 -4
- package/public/index.html +31 -29
- package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +31 -1
- package/runner/src/adapters/claude-effort.ts +2 -4
- package/runner/src/adapters/codex-launch-config.ts +4 -5
- package/runner/src/adapters/codex.ts +1 -1
- package/runner/src/adapters/opencode-provider.ts +7 -22
- package/runner/src/adapters/opencode.ts +4 -4
- package/runner/src/agent-runner/credentials.ts +42 -12
- package/runner/src/agent-runner/inbox.ts +27 -0
- package/runner/src/agent-runner/lifecycle-milestones.ts +0 -2
- package/runner/src/bin/claude.ts +4 -0
- package/runner/src/bin/codex.ts +4 -0
- package/runner/src/bin/opencode.ts +4 -0
- package/runner/src/index.ts +5 -2
- package/runner/src/provider-setup.ts +34 -0
- package/runner/src/providers.ts +2 -1
- package/runner/src/runner-core.ts +18 -23
- package/runner/src/spawn-input.ts +2 -1
- package/runner/src/test-run-dedup.ts +59 -56
- package/scripts/cd-config.ts +8 -0
- package/scripts/gate-run-lease.ts +10 -7
- package/scripts/gate.sh +5 -1
- package/src/branch-land-notice.ts +93 -0
- package/src/branch-landed.ts +7 -76
- package/src/bus.ts +19 -20
- package/src/cd-deploy-notify.ts +30 -2
- package/src/cd-host-lag-notify.ts +7 -6
- package/src/ci/incidents.ts +2 -2
- package/src/ci/monitor.ts +5 -8
- package/src/ci/root-missing.ts +2 -7
- package/src/ci/transition-notify.ts +7 -39
- package/src/cli/cd-pauses.ts +19 -0
- package/src/cli/orchestrator.ts +1 -1
- package/src/cli/state.ts +2 -19
- package/src/cli/task-edit.ts +22 -0
- package/src/cli/task.ts +3 -1
- package/src/cli/workflow.ts +8 -2
- package/src/commands-db.ts +3 -3
- package/src/config-store-write.ts +13 -1
- package/src/config-store.ts +25 -14
- package/src/db/activity-async.ts +6 -1
- package/src/db/activity-write-ops.ts +12 -1
- package/src/db/activity.ts +1 -14
- package/src/db/agent-search.ts +1 -15
- package/src/db/agents-async.ts +52 -5
- package/src/db/agents-write-ops.ts +12 -3
- package/src/db/agents.ts +81 -54
- package/src/db/ci-incidents-async.ts +5 -5
- package/src/db/ci-incidents-write-ops.ts +2 -2
- package/src/db/command-row.ts +10 -2
- package/src/db/commands-list-query.ts +2 -0
- package/src/db/commands-spawn-read.ts +1 -1
- package/src/db/config-store-write-ops.ts +7 -2
- package/src/db/continuation-archives-async.ts +5 -0
- package/src/db/continuation-archives-write-ops.ts +7 -0
- package/src/db/continuations.ts +2 -2
- package/src/db/db-writer-worker.ts +8 -1
- package/src/db/deploy-events-async.ts +1 -0
- package/src/db/deploy-events-read-ops.ts +2 -1
- package/src/db/deploy-events.ts +35 -4
- package/src/db/hosts-registration.ts +10 -2
- package/src/db/hosts.ts +9 -6
- package/src/db/inbox.ts +0 -14
- package/src/db/index.ts +2 -0
- package/src/db/integrations-async.ts +8 -0
- package/src/db/integrations-ops.ts +15 -0
- package/src/db/integrations.ts +15 -21
- package/src/db/issue-lifecycle.ts +3 -4
- package/src/db/issue-refs-async.ts +20 -0
- package/src/db/issue-refs-write-ops.ts +29 -0
- package/src/db/issue-refs.ts +7 -8
- package/src/db/long-running-work.ts +2 -2
- package/src/db/main-connection-writes.ts +23 -2
- package/src/db/maintenance-job-reconcile.ts +61 -0
- package/src/db/maintenance-job-runs-async.ts +14 -0
- package/src/db/maintenance-job-write-ops.ts +9 -0
- package/src/db/mappers.ts +2 -14
- package/src/db/merge-lease.ts +1 -15
- package/src/db/migrations.ts +7 -15
- package/src/db/orchestrators.ts +4 -72
- package/src/db/pairs.ts +1 -13
- package/src/db/project-profile-instructions.ts +50 -0
- package/src/db/prompt-versions.ts +9 -2
- package/src/db/provider-config-history.ts +8 -3
- package/src/db/provider-model-seed.ts +34 -0
- package/src/db/read-op-marshaling-fixtures.ts +5 -0
- package/src/db/read-ops.ts +4 -0
- package/src/db/routing-policy.ts +2 -3
- package/src/db/schema.ts +9 -3
- package/src/db/spawn-delegation-state.ts +11 -4
- package/src/db/stats-async.ts +4 -3
- package/src/db/task-entity.ts +23 -2
- package/src/db/task-list.ts +3 -1
- package/src/db/tasks.ts +1 -17
- package/src/db/timer-ingress.ts +7 -1
- package/src/db/token-db-write-ops.ts +17 -0
- package/src/db/token-standing.ts +15 -11
- package/src/db/workflow-contact.ts +1 -1
- package/src/db/workflow-task-read-ops.ts +30 -0
- package/src/db/write-ops.ts +6 -0
- package/src/db/writer-gateway.ts +17 -11
- package/src/dispatch-availability.ts +10 -6
- package/src/ephemeral/{landing-ingress-proof-worker.ts → landing-ingress-proof.test-fixture.ts} +4 -2
- package/src/host/disk-alert.ts +121 -0
- package/src/lifecycle-manager.ts +3 -2
- package/src/maintenance/cd-watcher.ts +3 -3
- package/src/maintenance/critical-job-watchdog.ts +16 -17
- package/src/maintenance/index.ts +1 -0
- package/src/maintenance/jobs.ts +3 -2
- package/src/maintenance/scheduler.ts +84 -128
- package/src/maintenance/stalled-delivery-pager.ts +6 -5
- package/src/maintenance/workspaces.ts +1 -1
- package/src/managed-policy.ts +31 -27
- package/src/mcp/index.ts +5 -2
- package/src/mcp/output-descriptions.ts +8 -8
- package/src/mcp/presentation.ts +4 -4
- package/src/mcp/project-profile-instructions.ts +32 -0
- package/src/mcp/tool-groups.ts +1 -1
- package/src/mcp/tools-spawn.ts +4 -3
- package/src/mcp-agent-action.ts +1 -2
- package/src/mcp-issue-ref-tools.ts +12 -11
- package/src/mcp-maintenance-tools.ts +2 -2
- package/src/mcp-profile-trust-tools.ts +4 -4
- package/src/mcp-provider-catalog.ts +2 -2
- package/src/mcp-task-tools.ts +11 -5
- package/src/mcp-team-template-tools.ts +3 -3
- package/src/mcp-workflow-tools.ts +10 -3
- package/src/notification-types.ts +2 -1
- package/src/operator-alarm.ts +26 -11
- package/src/project-instructions.ts +4 -0
- package/src/project-profile-instruction-text.ts +6 -0
- package/src/project-profile-instructions.ts +20 -0
- package/src/provider-catalog-store.ts +3 -49
- package/src/provider-config-store.ts +12 -11
- package/src/provider-model-seed.ts +1 -18
- package/src/provider-quota-config-store.ts +5 -4
- package/src/provider-secrets.test-fixture.ts +3 -3
- package/src/recipe-runner.ts +2 -2
- package/src/repo-config-source.ts +10 -4
- package/src/routes/agent-profiles.ts +6 -6
- package/src/routes/agents-spawn.ts +1 -1
- package/src/routes/agents.ts +6 -6
- package/src/routes/commands-listing.ts +4 -0
- package/src/routes/commands.ts +2 -2
- package/src/routes/continuation-archives.ts +2 -2
- package/src/routes/index.ts +10 -1
- package/src/routes/integrations.ts +24 -50
- package/src/routes/issue-refs.ts +7 -7
- package/src/routes/orchestrator-bootstrap.ts +1 -1
- package/src/routes/orchestrator-host-registration.ts +2 -2
- package/src/routes/orchestrator-host-utilization.ts +3 -1
- package/src/routes/orchestrator-proxy.ts +2 -2
- package/src/routes/orchestrator.ts +2 -2
- package/src/routes/project-profile-instructions.ts +27 -0
- package/src/routes/project-trust.ts +2 -2
- package/src/routes/provider-config.ts +6 -6
- package/src/routes/provider-quota-config.ts +2 -2
- package/src/routes/settings.ts +5 -5
- package/src/routes/stats.ts +6 -6
- package/src/routes/task-http.ts +15 -1
- package/src/routes/task-issues.ts +11 -26
- package/src/routes/tasks.ts +22 -53
- package/src/routes/team-templates.ts +5 -5
- package/src/routes/teams-config.ts +2 -2
- package/src/routes/tokens.ts +12 -5
- package/src/routes/workflows.ts +20 -5
- package/src/routing-policy-normalize.ts +1 -2
- package/src/routing-step-defaults.ts +0 -2
- package/src/runner-token-mint-limit.ts +63 -0
- package/src/runtime-grant.ts +4 -2
- package/src/runtime-tokens.ts +39 -7
- package/src/security.ts +13 -20
- package/src/server-background.ts +1 -1
- package/src/server.ts +5 -2
- package/src/services/host-utilization.ts +23 -0
- package/src/services/idle-epics.ts +5 -6
- package/src/services/issue-lifecycle.ts +57 -61
- package/src/services/issue-refs.ts +9 -13
- package/src/services/kernel-timers-cutover-chaos-worker.ts +10 -7
- package/src/services/kernel-timers-ingress.ts +1 -1
- package/src/services/landed-ancestry.ts +19 -3
- package/src/services/memory-areas.ts +15 -51
- package/src/services/plan-ci-notice.ts +57 -0
- package/src/services/plan-ci-recovery.ts +2 -55
- package/src/services/plan-wake-digest.ts +1 -0
- package/src/services/profile-trust.ts +4 -3
- package/src/services/project-config-read.ts +70 -0
- package/src/services/project-profile-instructions.ts +54 -0
- package/src/services/provisioning-harness/budget-baseline.json +4 -4
- package/src/services/restart-spawn.ts +61 -49
- package/src/services/self-care-state.ts +2 -1
- package/src/services/self-effort.ts +5 -5
- package/src/services/send-message.ts +5 -1
- package/src/services/spawn-agent.ts +13 -2
- package/src/services/spawn-chain-inspector.ts +6 -13
- package/src/services/spawn-policy.ts +68 -0
- package/src/services/spawn-tree-cleanup.ts +2 -2
- package/src/services/task-dispatch.ts +3 -0
- package/src/services/task-state-reconcile.ts +6 -14
- package/src/services/team-templates.ts +9 -8
- package/src/services/transient-agent-reaper.ts +3 -1
- package/src/services/workflow-auto-start.ts +25 -13
- package/src/services/workflow-ci-main.ts +1 -1
- package/src/services/workflow-deferred-cleanup.ts +4 -2
- package/src/services/workflow-effect-driver.ts +2 -0
- package/src/services/workflow-effects.ts +18 -11
- package/src/services/workflow-land-notice.ts +10 -0
- package/src/services/workflow-pause-text.ts +43 -0
- package/src/services/workflow-reconcile.ts +13 -11
- package/src/services/workflow-run-view.ts +2 -0
- package/src/services/workflow-runs.ts +29 -13
- package/src/services/workflow-supervisor-state.ts +5 -0
- package/src/services/workflow-supervisor.ts +7 -3
- package/src/settings/registry.ts +1 -2
- package/src/spawn-command.ts +4 -4
- package/src/spawn-models.ts +10 -12
- package/src/spawn-placement.ts +1 -1
- package/src/spawn-targets.ts +1 -1
- package/src/startup-context-injection.ts +1 -0
- package/src/state-adoption/cd-cutover.ts +53 -7
- package/src/state-adoption/fleet-cutover.ts +35 -0
- package/src/state-adoption/fleet-plan.ts +36 -0
- package/src/state-adoption/index.ts +2 -2
- package/src/state-adoption/linux-plan.ts +2 -2
- package/src/state-adoption/linux.ts +2 -2
- package/src/state-adoption/macos-plan.ts +2 -2
- package/src/state-adoption/macos.ts +1 -1
- package/src/steward.ts +7 -6
- package/src/task-dispatch-live.ts +1 -1
- package/src/task-dispatcher.ts +1 -1
- package/src/teams-config-store.ts +4 -3
- package/src/token-db-write.ts +10 -0
- package/src/workspace-command-settle.ts +2 -1
- package/src/workspace-steward-wake.ts +2 -2
- package/node_modules/@humwick/kernel/LICENSE +0 -167
- package/node_modules/@humwick/kernel/async-entity-persistence.ts +0 -344
- package/node_modules/@humwick/kernel/async-event-log.ts +0 -107
- package/node_modules/@humwick/kernel/automations.pilot.ts +0 -147
- package/node_modules/@humwick/kernel/config.ts +0 -111
- package/node_modules/@humwick/kernel/contract.ts +0 -572
- package/node_modules/@humwick/kernel/control-authz.ts +0 -281
- package/node_modules/@humwick/kernel/control.ts +0 -645
- package/node_modules/@humwick/kernel/effects.ts +0 -493
- package/node_modules/@humwick/kernel/event-log.ts +0 -319
- package/node_modules/@humwick/kernel/http-transport.ts +0 -384
- package/node_modules/@humwick/kernel/identity-grammar.ts +0 -20
- package/node_modules/@humwick/kernel/identity.ts +0 -248
- package/node_modules/@humwick/kernel/index.ts +0 -28
- package/node_modules/@humwick/kernel/kernel-persistence.ts +0 -181
- package/node_modules/@humwick/kernel/landing-incident.ts +0 -306
- package/node_modules/@humwick/kernel/landing.ts +0 -953
- package/node_modules/@humwick/kernel/manifest-validation.ts +0 -460
- package/node_modules/@humwick/kernel/mcp-transport.ts +0 -109
- package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +0 -200
- package/node_modules/@humwick/kernel/message-authority.ts +0 -281
- package/node_modules/@humwick/kernel/module-host.ts +0 -722
- package/node_modules/@humwick/kernel/openapi-init.ts +0 -14
- package/node_modules/@humwick/kernel/package.json +0 -39
- package/node_modules/@humwick/kernel/persistence-schema.ts +0 -248
- package/node_modules/@humwick/kernel/persistence.ts +0 -510
- package/node_modules/@humwick/kernel/registry.ts +0 -60
- package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +0 -499
- package/node_modules/@humwick/kernel/sqlite-module-host.ts +0 -87
- package/node_modules/@humwick/kernel/timers-chaos-worker.ts +0 -186
- package/node_modules/@humwick/kernel/timers.pilot.ts +0 -1411
- package/node_modules/@humwick/kernel/workflow-activation.ts +0 -25
- package/node_modules/@humwick/kernel/workflow-backstop.ts +0 -40
- package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +0 -20
- package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +0 -213
- package/node_modules/@humwick/kernel/workflow-composition.ts +0 -231
- package/node_modules/@humwick/kernel/workflow-container.ts +0 -72
- package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +0 -42
- package/node_modules/@humwick/kernel/workflow-control.ts +0 -178
- package/node_modules/@humwick/kernel/workflow-definition.ts +0 -507
- package/node_modules/@humwick/kernel/workflow-dispatch.ts +0 -60
- package/node_modules/@humwick/kernel/workflow-foreach.ts +0 -167
- package/node_modules/@humwick/kernel/workflow-journal-codec.ts +0 -339
- package/node_modules/@humwick/kernel/workflow-journal.ts +0 -922
- package/node_modules/@humwick/kernel/workflow-lane.ts +0 -48
- package/node_modules/@humwick/kernel/workflow-lease-owner.ts +0 -60
- package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +0 -19
- package/node_modules/@humwick/kernel/workflow-runtime.ts +0 -938
- package/node_modules/@humwick/kernel/workflow-script.ts +0 -11
- package/node_modules/@humwick/kernel/workflow-state.ts +0 -299
- package/node_modules/@humwick/kernel/workflow-step-commit.ts +0 -195
- package/node_modules/@humwick/kernel/workflow-transitions.ts +0 -317
- package/node_modules/@humwick/kernel/workflow-values.ts +0 -153
- package/node_modules/@humwick/kernel/workflow.pilot.ts +0 -376
- package/node_modules/@humwick/offload/LICENSE +0 -167
- package/node_modules/@humwick/offload/README.md +0 -57
- package/node_modules/@humwick/offload/dist/async-runner.d.ts +0 -18
- package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/async-runner.js +0 -158
- package/node_modules/@humwick/offload/dist/async-runner.js.map +0 -1
- package/node_modules/@humwick/offload/dist/envelope.d.ts +0 -25
- package/node_modules/@humwick/offload/dist/envelope.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/envelope.js +0 -80
- package/node_modules/@humwick/offload/dist/envelope.js.map +0 -1
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +0 -10
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +0 -59
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +0 -1
- package/node_modules/@humwick/offload/dist/index.d.ts +0 -5
- package/node_modules/@humwick/offload/dist/index.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/index.js +0 -5
- package/node_modules/@humwick/offload/dist/index.js.map +0 -1
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +0 -62
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/subprocess-runner.js +0 -295
- package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +0 -1
- package/node_modules/@humwick/offload/dist/types.d.ts +0 -111
- package/node_modules/@humwick/offload/dist/types.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/types.js +0 -176
- package/node_modules/@humwick/offload/dist/types.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts +0 -23
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-pool.js +0 -435
- package/node_modules/@humwick/offload/dist/worker-pool.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +0 -2
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-runtime.js +0 -27
- package/node_modules/@humwick/offload/dist/worker-runtime.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker.d.ts +0 -5
- package/node_modules/@humwick/offload/dist/worker.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker.js +0 -1
- package/node_modules/@humwick/offload/dist/worker.js.map +0 -1
- package/node_modules/@humwick/offload/package.json +0 -42
- package/node_modules/@humwick/offload/src/async-runner.ts +0 -170
- package/node_modules/@humwick/offload/src/envelope.ts +0 -92
- package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +0 -49
- package/node_modules/@humwick/offload/src/index.ts +0 -4
- package/node_modules/@humwick/offload/src/subprocess-runner.ts +0 -334
- package/node_modules/@humwick/offload/src/types.ts +0 -235
- package/node_modules/@humwick/offload/src/worker-pool.ts +0 -463
- package/node_modules/@humwick/offload/src/worker-runtime.ts +0 -32
- package/node_modules/@humwick/offload/src/worker.ts +0 -5
- package/public/assets/agent-liveness-DyqxfB-t.js +0 -2
- package/public/assets/agent-profiles-BpI_jTxq.js +0 -2
- package/public/assets/index-B7ZerHLY.css +0 -2
- package/public/assets/index-BU3uWo2t.js +0 -15
- package/public/assets/projects-B_lmcqfO.js +0 -2
- package/public/assets/provider-display-DbLWpP3j.js +0 -2
- package/public/assets/run-card-CO_bguQf.js +0 -2
- package/public/assets/use-project-list-B-T2Bnnn.js +0 -2
- package/public/assets/versioned-prompt-editor-Diu8BIaM.js +0 -8
- package/runner/src/gate-run-lease-probe.ts +0 -38
- package/src/db/claude-catalog-reconcile.ts +0 -27
- package/src/routing-model-aliases.ts +0 -21
|
@@ -1,319 +0,0 @@
|
|
|
1
|
-
import type { Database } from "bun:sqlite";
|
|
2
|
-
import { isDeepStrictEqual } from "node:util";
|
|
3
|
-
import type * as z from "zod";
|
|
4
|
-
import type {
|
|
5
|
-
Clock,
|
|
6
|
-
EventName,
|
|
7
|
-
EventWriter,
|
|
8
|
-
ModuleDefinition,
|
|
9
|
-
ModuleManifest,
|
|
10
|
-
Scope,
|
|
11
|
-
} from "./contract";
|
|
12
|
-
|
|
13
|
-
const EVENTS_TABLE = "kernel_events";
|
|
14
|
-
const SEQ_TABLE = "kernel_event_scope_seq";
|
|
15
|
-
|
|
16
|
-
export const DEFAULT_EVENT_PAGE_SIZE = 500;
|
|
17
|
-
export const MAX_EVENT_PAGE_SIZE = 5_000;
|
|
18
|
-
|
|
19
|
-
export class EventSessionClosedError extends Error {
|
|
20
|
-
constructor() {
|
|
21
|
-
super("event session is closed");
|
|
22
|
-
this.name = "EventSessionClosedError";
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** Runtime rejection of an emit whose name is not one of the module's declared events. */
|
|
27
|
-
export class UndeclaredEventError extends Error {
|
|
28
|
-
constructor(readonly moduleId: string, readonly eventName: string) {
|
|
29
|
-
super(`module '${moduleId}' declares no event named '${eventName}'`);
|
|
30
|
-
this.name = "UndeclaredEventError";
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** Runtime rejection of an emit whose topic prefix does not match the emitting module's id. */
|
|
35
|
-
export class EventTopicMismatchError extends Error {
|
|
36
|
-
constructor(readonly moduleId: string, readonly eventName: string) {
|
|
37
|
-
super(`event '${eventName}' does not carry module '${moduleId}'s topic prefix '${moduleId}.'`);
|
|
38
|
-
this.name = "EventTopicMismatchError";
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export class EventLogCorruptionError extends Error {
|
|
43
|
-
constructor(message: string) {
|
|
44
|
-
super(`event log corruption: ${message}`);
|
|
45
|
-
this.name = "EventLogCorruptionError";
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
interface PendingEvent {
|
|
50
|
-
readonly name: string;
|
|
51
|
-
readonly payload: string;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export interface EmittedEvent {
|
|
55
|
-
readonly scope: Scope;
|
|
56
|
-
readonly moduleId: string;
|
|
57
|
-
readonly seq: number;
|
|
58
|
-
readonly name: EventName;
|
|
59
|
-
readonly payload: unknown;
|
|
60
|
-
readonly createdAt: number;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export interface EventReplaySlice {
|
|
64
|
-
readonly events: readonly EmittedEvent[];
|
|
65
|
-
/** The highest seq in this slice (or `since` when empty); resume from here for the next page. */
|
|
66
|
-
readonly lastSeq: number;
|
|
67
|
-
/** More events exist beyond `lastSeq` in this scope; the caller must fetch the next slice. */
|
|
68
|
-
readonly truncated: boolean;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
interface EventRow {
|
|
72
|
-
scope: string;
|
|
73
|
-
seq: number;
|
|
74
|
-
module_id: string;
|
|
75
|
-
name: string;
|
|
76
|
-
payload: string;
|
|
77
|
-
created_at: number;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/** Mirrors the *lossless* parts of a JSON round-trip (dropping explicit `undefined` object
|
|
81
|
-
* keys, folding `-0` to `0`) without touching anything else, so genuinely non-JSON-safe shapes
|
|
82
|
-
* (Date, bigint, function values) still show up as a mismatch against the real encoded output. */
|
|
83
|
-
function normalizeJsonSafe(value: unknown): unknown {
|
|
84
|
-
if (typeof value === "number") return Object.is(value, -0) ? 0 : value;
|
|
85
|
-
if (Array.isArray(value)) return value.map(normalizeJsonSafe);
|
|
86
|
-
if (value !== null && typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype) {
|
|
87
|
-
const result: Record<string, unknown> = {};
|
|
88
|
-
for (const [key, entry] of Object.entries(value)) {
|
|
89
|
-
if (entry === undefined) continue;
|
|
90
|
-
result[key] = normalizeJsonSafe(entry);
|
|
91
|
-
}
|
|
92
|
-
return result;
|
|
93
|
-
}
|
|
94
|
-
return value;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
function encodeEventPayload(value: unknown, name: string): string {
|
|
98
|
-
try {
|
|
99
|
-
const encoded = JSON.stringify(value);
|
|
100
|
-
if (encoded === undefined) throw new TypeError("value is not JSON-serializable");
|
|
101
|
-
if (!isDeepStrictEqual(JSON.parse(encoded) as unknown, normalizeJsonSafe(value))) {
|
|
102
|
-
throw new TypeError("value changes during JSON encoding");
|
|
103
|
-
}
|
|
104
|
-
return encoded;
|
|
105
|
-
} catch (error) {
|
|
106
|
-
const reason = error instanceof Error ? error.message : String(error);
|
|
107
|
-
throw new TypeError(`event '${name}' payload must be JSON-safe: ${reason}`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function decodeEventPayload(raw: string, seq: number): unknown {
|
|
112
|
-
try {
|
|
113
|
-
return JSON.parse(raw) as unknown;
|
|
114
|
-
} catch {
|
|
115
|
-
throw new EventLogCorruptionError(`event at seq ${seq} has invalid JSON payload`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function rowToEvent(row: EventRow): EmittedEvent {
|
|
120
|
-
return {
|
|
121
|
-
scope: row.scope as Scope,
|
|
122
|
-
moduleId: row.module_id,
|
|
123
|
-
seq: row.seq,
|
|
124
|
-
name: row.name as EventName,
|
|
125
|
-
payload: decodeEventPayload(row.payload, row.seq),
|
|
126
|
-
createdAt: row.created_at,
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Install the kernel event-log catalog on a caller's shared connection (KAPI-1 W4c fix 3b): the
|
|
132
|
-
* append-only `kernel_events` table + its per-scope high-water `kernel_event_scope_seq`. Idempotent
|
|
133
|
-
* (`IF NOT EXISTS`), so a fresh `EventLogPersistence` still ensures it, but the src startup migration
|
|
134
|
-
* calls this up front so the tables are never created at request time by a lazily-built control host.
|
|
135
|
-
* Mirrors `ensureWorkflowJournalSchema(db)` — kernel-owned DDL, installed on the shared handle.
|
|
136
|
-
*/
|
|
137
|
-
export function ensureEventLogSchema(db: Database): void {
|
|
138
|
-
db.run(`CREATE TABLE IF NOT EXISTS ${EVENTS_TABLE} (
|
|
139
|
-
scope TEXT NOT NULL,
|
|
140
|
-
seq INTEGER NOT NULL,
|
|
141
|
-
module_id TEXT NOT NULL,
|
|
142
|
-
name TEXT NOT NULL,
|
|
143
|
-
payload TEXT NOT NULL,
|
|
144
|
-
created_at INTEGER NOT NULL,
|
|
145
|
-
PRIMARY KEY (scope, seq)
|
|
146
|
-
)`);
|
|
147
|
-
db.run(`CREATE INDEX IF NOT EXISTS ${EVENTS_TABLE}__idx_module ON ${EVENTS_TABLE} (scope, module_id, seq)`);
|
|
148
|
-
db.run(`CREATE TABLE IF NOT EXISTS ${SEQ_TABLE} (
|
|
149
|
-
scope TEXT PRIMARY KEY,
|
|
150
|
-
high_water INTEGER NOT NULL
|
|
151
|
-
)`);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/** A buffered-intent emit attempt for one module's scoped event log, mirroring EntitySession. */
|
|
155
|
-
export interface EventSession<E> {
|
|
156
|
-
/** Scope-bound writer installed directly as ModuleCtx.events. */
|
|
157
|
-
readonly events: EventWriter<E>;
|
|
158
|
-
readonly pendingEvents: number;
|
|
159
|
-
/** Close the async attempt before entering its synchronous commit transaction. */
|
|
160
|
-
seal(): void;
|
|
161
|
-
/** Flush into a caller-owned synchronous transaction (for workflow checkpoint composition). */
|
|
162
|
-
flush(): void;
|
|
163
|
-
/** Seal and flush in a standalone synchronous transaction. */
|
|
164
|
-
commit(): void;
|
|
165
|
-
/** Close the session and forget every buffered emit. */
|
|
166
|
-
discard(): void;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
class EventSessionRuntime<E> implements EventSession<E> {
|
|
170
|
-
readonly events: EventWriter<E>;
|
|
171
|
-
readonly #buffer: PendingEvent[] = [];
|
|
172
|
-
#closed = false;
|
|
173
|
-
#finished = false;
|
|
174
|
-
|
|
175
|
-
constructor(
|
|
176
|
-
readonly db: Database,
|
|
177
|
-
readonly clock: Clock,
|
|
178
|
-
readonly scope: Scope,
|
|
179
|
-
readonly moduleId: string,
|
|
180
|
-
readonly schemas: ReadonlyMap<string, z.ZodType>,
|
|
181
|
-
) {
|
|
182
|
-
const prefix = `${moduleId}.`;
|
|
183
|
-
const emit = async (name: string, payload: unknown): Promise<void> => {
|
|
184
|
-
this.#assertOpen();
|
|
185
|
-
if (!name.startsWith(prefix) || name.length === prefix.length) {
|
|
186
|
-
throw new EventTopicMismatchError(moduleId, name);
|
|
187
|
-
}
|
|
188
|
-
const schema = this.schemas.get(name);
|
|
189
|
-
if (!schema) throw new UndeclaredEventError(moduleId, name);
|
|
190
|
-
const parsed: unknown = schema.parse(payload);
|
|
191
|
-
const encoded = encodeEventPayload(parsed, name);
|
|
192
|
-
this.#buffer.push({ name, payload: encoded });
|
|
193
|
-
};
|
|
194
|
-
this.events = { emit } as unknown as EventWriter<E>;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
get pendingEvents(): number {
|
|
198
|
-
return this.#buffer.length;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
#assertOpen(): void {
|
|
202
|
-
if (this.#closed) throw new EventSessionClosedError();
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
seal(): void {
|
|
206
|
-
if (this.#finished) throw new EventSessionClosedError();
|
|
207
|
-
this.#closed = true;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
#flushInsideTransaction(): void {
|
|
211
|
-
if (!this.#closed || this.#finished) throw new EventSessionClosedError();
|
|
212
|
-
if (!this.db.inTransaction) throw new Error("event emits must flush inside a synchronous SQLite transaction");
|
|
213
|
-
try {
|
|
214
|
-
if (this.#buffer.length > 0) {
|
|
215
|
-
const bumped = this.db.query(`INSERT INTO ${SEQ_TABLE} (scope, high_water) VALUES (?, ?)
|
|
216
|
-
ON CONFLICT(scope) DO UPDATE SET high_water = high_water + excluded.high_water
|
|
217
|
-
RETURNING high_water`).get(this.scope, this.#buffer.length) as { high_water: number };
|
|
218
|
-
const firstSeq = bumped.high_water - this.#buffer.length + 1;
|
|
219
|
-
const now = this.clock.now();
|
|
220
|
-
const insert = this.db.query(`INSERT INTO ${EVENTS_TABLE} (scope, seq, module_id, name, payload, created_at)
|
|
221
|
-
VALUES (?, ?, ?, ?, ?, ?)`);
|
|
222
|
-
this.#buffer.forEach((pending, index) => {
|
|
223
|
-
insert.run(this.scope, firstSeq + index, this.moduleId, pending.name, pending.payload, now);
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
this.#finished = true;
|
|
227
|
-
} catch (error) {
|
|
228
|
-
this.#finished = true;
|
|
229
|
-
throw error;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
flush(): void {
|
|
234
|
-
this.#flushInsideTransaction();
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
commit(): void {
|
|
238
|
-
if (!this.#closed) this.seal();
|
|
239
|
-
this.db.transaction(() => this.#flushInsideTransaction())();
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
discard(): void {
|
|
243
|
-
if (this.#finished) throw new EventSessionClosedError();
|
|
244
|
-
this.#closed = true;
|
|
245
|
-
this.#buffer.length = 0;
|
|
246
|
-
this.#finished = true;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
export interface EventLogOptions {
|
|
251
|
-
readonly db: Database;
|
|
252
|
-
readonly clock: Clock;
|
|
253
|
-
readonly modules?: Iterable<ModuleDefinition<ModuleManifest>>;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/** Kernel-owned scoped event log: schema-derived per module (like K4's entities), one shared
|
|
257
|
-
* append-only table underneath so a scope's events interleave in one monotonic sequence. */
|
|
258
|
-
export class EventLogPersistence {
|
|
259
|
-
readonly #modules = new Map<string, ReadonlyMap<string, z.ZodType>>();
|
|
260
|
-
|
|
261
|
-
constructor(readonly options: EventLogOptions) {
|
|
262
|
-
ensureEventLogSchema(options.db);
|
|
263
|
-
for (const module of options.modules ?? []) this.register(module);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
register<M extends ModuleManifest>(module: ModuleDefinition<M>): void {
|
|
267
|
-
if (this.#modules.has(module.id)) throw new Error(`module '${module.id}' event log is already installed`);
|
|
268
|
-
this.#modules.set(module.id, new Map(Object.entries(module.events ?? {}) as Array<[string, z.ZodType]>));
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
begin<M extends ModuleManifest>(module: ModuleDefinition<M>, scope: Scope): EventSession<NonNullable<M["events"]>> {
|
|
272
|
-
const schemas = this.#modules.get(module.id);
|
|
273
|
-
if (!schemas) throw new Error(`module '${module.id}' event log is not installed`);
|
|
274
|
-
return new EventSessionRuntime<NonNullable<M["events"]>>(this.options.db, this.options.clock, scope, module.id, schemas);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Paged, ordered replay of one scope's events across every module that wrote into it, or — with
|
|
279
|
-
* `moduleId` (KAPI-1 / G-D) — narrowed to just that module's events, using the existing
|
|
280
|
-
* `(scope, module_id, seq)` index. Omitting `moduleId` reproduces the prior all-module behavior
|
|
281
|
-
* exactly, including how `truncated` is computed (the scope-wide high-water mark); with a
|
|
282
|
-
* `moduleId` filter, truncation instead checks for a further matching row past `lastSeq`, since
|
|
283
|
-
* the scope-wide high-water mark would over-report truncation for a narrowed module view.
|
|
284
|
-
*/
|
|
285
|
-
replay(scope: Scope, since: number, limit = DEFAULT_EVENT_PAGE_SIZE, moduleId?: string): EventReplaySlice {
|
|
286
|
-
if (!Number.isInteger(since) || since < 0) throw new TypeError("since must be a non-negative integer");
|
|
287
|
-
if (!Number.isFinite(limit)) throw new TypeError("limit must be finite");
|
|
288
|
-
const pageSize = Math.min(Math.max(Math.trunc(limit), 1), MAX_EVENT_PAGE_SIZE);
|
|
289
|
-
const rows = moduleId === undefined
|
|
290
|
-
? this.options.db.query(`SELECT scope, seq, module_id, name, payload, created_at
|
|
291
|
-
FROM ${EVENTS_TABLE} WHERE scope = ? AND seq > ? ORDER BY seq ASC LIMIT ?`)
|
|
292
|
-
.all(scope, since, pageSize) as EventRow[]
|
|
293
|
-
: this.options.db.query(`SELECT scope, seq, module_id, name, payload, created_at
|
|
294
|
-
FROM ${EVENTS_TABLE} WHERE scope = ? AND module_id = ? AND seq > ? ORDER BY seq ASC LIMIT ?`)
|
|
295
|
-
.all(scope, moduleId, since, pageSize) as EventRow[];
|
|
296
|
-
const events = rows.map(rowToEvent);
|
|
297
|
-
const lastSeq = events.at(-1)?.seq ?? since;
|
|
298
|
-
const truncated = rows.length === pageSize && this.#hasMoreEvents(scope, lastSeq, moduleId);
|
|
299
|
-
return { events, lastSeq, truncated };
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/** Whether a further event exists past `lastSeq` — scope-wide via the high-water mark (unchanged
|
|
303
|
-
* fast path), or module-scoped via an index-backed existence check when `moduleId` is given. */
|
|
304
|
-
#hasMoreEvents(scope: Scope, lastSeq: number, moduleId: string | undefined): boolean {
|
|
305
|
-
if (moduleId === undefined) return this.highWater(scope) > lastSeq;
|
|
306
|
-
return this.options.db.query(`SELECT 1 FROM ${EVENTS_TABLE}
|
|
307
|
-
WHERE scope = ? AND module_id = ? AND seq > ? LIMIT 1`).get(scope, moduleId, lastSeq) != null;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/** The highest seq ever assigned within a scope; survives even if that scope's rows are pruned. */
|
|
311
|
-
highWater(scope: Scope): number {
|
|
312
|
-
const row = this.options.db.query(`SELECT high_water FROM ${SEQ_TABLE} WHERE scope = ?`).get(scope) as { high_water: number } | undefined;
|
|
313
|
-
return row?.high_water ?? 0;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
export function createEventLogPersistence(options: EventLogOptions): EventLogPersistence {
|
|
318
|
-
return new EventLogPersistence(options);
|
|
319
|
-
}
|