@xfey/tutti 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -0
- package/dist/approvals/index.d.ts +3 -0
- package/dist/approvals/index.js +3 -0
- package/dist/approvals/manager.d.ts +47 -0
- package/dist/approvals/manager.js +180 -0
- package/dist/approvals/projections.d.ts +34 -0
- package/dist/approvals/projections.js +444 -0
- package/dist/artifacts/index.d.ts +4 -0
- package/dist/artifacts/index.js +4 -0
- package/dist/artifacts/manifest.d.ts +48 -0
- package/dist/artifacts/manifest.js +334 -0
- package/dist/artifacts/preview-runtime.d.ts +97 -0
- package/dist/artifacts/preview-runtime.js +585 -0
- package/dist/artifacts/static-preview.d.ts +17 -0
- package/dist/artifacts/static-preview.js +180 -0
- package/dist/chat-assistant/index.d.ts +66 -0
- package/dist/chat-assistant/index.js +268 -0
- package/dist/checks/index.d.ts +47 -0
- package/dist/checks/index.js +169 -0
- package/dist/collaboration-state/clarification-messages.d.ts +8 -0
- package/dist/collaboration-state/clarification-messages.js +180 -0
- package/dist/collaboration-state/clarification-records.d.ts +27 -0
- package/dist/collaboration-state/clarification-records.js +266 -0
- package/dist/collaboration-state/clarification-round-writes.d.ts +14 -0
- package/dist/collaboration-state/clarification-round-writes.js +58 -0
- package/dist/collaboration-state/clarification-rounds.d.ts +19 -0
- package/dist/collaboration-state/clarification-rounds.js +347 -0
- package/dist/collaboration-state/clarification-successors.d.ts +8 -0
- package/dist/collaboration-state/clarification-successors.js +318 -0
- package/dist/collaboration-state/execution-status.d.ts +3 -0
- package/dist/collaboration-state/execution-status.js +8 -0
- package/dist/collaboration-state/index.d.ts +17 -0
- package/dist/collaboration-state/index.js +16 -0
- package/dist/collaboration-state/messages.d.ts +25 -0
- package/dist/collaboration-state/messages.js +371 -0
- package/dist/collaboration-state/read-state.d.ts +7 -0
- package/dist/collaboration-state/read-state.js +136 -0
- package/dist/collaboration-state/recovery.d.ts +6 -0
- package/dist/collaboration-state/recovery.js +125 -0
- package/dist/collaboration-state/run-recording.d.ts +5 -0
- package/dist/collaboration-state/run-recording.js +216 -0
- package/dist/collaboration-state/run-results.d.ts +12 -0
- package/dist/collaboration-state/run-results.js +202 -0
- package/dist/collaboration-state/scratchpad-source-state.d.ts +46 -0
- package/dist/collaboration-state/scratchpad-source-state.js +207 -0
- package/dist/collaboration-state/scratchpad.d.ts +8 -0
- package/dist/collaboration-state/scratchpad.js +84 -0
- package/dist/collaboration-state/serialization.d.ts +16 -0
- package/dist/collaboration-state/serialization.js +71 -0
- package/dist/collaboration-state/storage-types.d.ts +136 -0
- package/dist/collaboration-state/storage-types.js +2 -0
- package/dist/collaboration-state/task-details.d.ts +5 -0
- package/dist/collaboration-state/task-details.js +25 -0
- package/dist/collaboration-state/types.d.ts +289 -0
- package/dist/collaboration-state/types.js +2 -0
- package/dist/collaboration-state/worklist.d.ts +11 -0
- package/dist/collaboration-state/worklist.js +286 -0
- package/dist/control-plane/clarification-commands.d.ts +34 -0
- package/dist/control-plane/clarification-commands.js +106 -0
- package/dist/control-plane/command-recovery.d.ts +3 -0
- package/dist/control-plane/command-recovery.js +79 -0
- package/dist/control-plane/context-sync.d.ts +47 -0
- package/dist/control-plane/context-sync.js +207 -0
- package/dist/control-plane/event-publishers.d.ts +24 -0
- package/dist/control-plane/event-publishers.js +192 -0
- package/dist/control-plane/execution-status.d.ts +13 -0
- package/dist/control-plane/execution-status.js +130 -0
- package/dist/control-plane/follow-up-context.d.ts +27 -0
- package/dist/control-plane/follow-up-context.js +93 -0
- package/dist/control-plane/follow-up-output.d.ts +53 -0
- package/dist/control-plane/follow-up-output.js +141 -0
- package/dist/control-plane/follow-up-run.d.ts +22 -0
- package/dist/control-plane/follow-up-run.js +90 -0
- package/dist/control-plane/follow-up-start.d.ts +26 -0
- package/dist/control-plane/follow-up-start.js +101 -0
- package/dist/control-plane/formatters.d.ts +12 -0
- package/dist/control-plane/formatters.js +47 -0
- package/dist/control-plane/index.d.ts +62 -0
- package/dist/control-plane/index.js +416 -0
- package/dist/control-plane/invalidations.d.ts +12 -0
- package/dist/control-plane/invalidations.js +67 -0
- package/dist/control-plane/procedure-logging.d.ts +11 -0
- package/dist/control-plane/procedure-logging.js +95 -0
- package/dist/control-plane/project-brief-refresh.d.ts +31 -0
- package/dist/control-plane/project-brief-refresh.js +105 -0
- package/dist/control-plane/project-context-bootstrap.d.ts +39 -0
- package/dist/control-plane/project-context-bootstrap.js +107 -0
- package/dist/control-plane/reference-summary-refresh.d.ts +22 -0
- package/dist/control-plane/reference-summary-refresh.js +344 -0
- package/dist/control-plane/run-lineage.d.ts +8 -0
- package/dist/control-plane/run-lineage.js +13 -0
- package/dist/control-plane/run-result-recording.d.ts +46 -0
- package/dist/control-plane/run-result-recording.js +81 -0
- package/dist/control-plane/run-scheduler.d.ts +35 -0
- package/dist/control-plane/run-scheduler.js +110 -0
- package/dist/control-plane/run-start.d.ts +30 -0
- package/dist/control-plane/run-start.js +167 -0
- package/dist/control-plane/scratchpad-auto-refresh.d.ts +32 -0
- package/dist/control-plane/scratchpad-auto-refresh.js +150 -0
- package/dist/control-plane/scratchpad-refresh-start.d.ts +60 -0
- package/dist/control-plane/scratchpad-refresh-start.js +240 -0
- package/dist/control-plane/scratchpad-refresh.d.ts +29 -0
- package/dist/control-plane/scratchpad-refresh.js +55 -0
- package/dist/control-plane/scratchpad-source-messages.d.ts +10 -0
- package/dist/control-plane/scratchpad-source-messages.js +131 -0
- package/dist/control-plane/startup-recovery.d.ts +19 -0
- package/dist/control-plane/startup-recovery.js +113 -0
- package/dist/control-plane/task-compile-continuation.d.ts +25 -0
- package/dist/control-plane/task-compile-continuation.js +127 -0
- package/dist/control-plane/task-compile-output.d.ts +29 -0
- package/dist/control-plane/task-compile-output.js +122 -0
- package/dist/control-plane/task-compile-start.d.ts +43 -0
- package/dist/control-plane/task-compile-start.js +280 -0
- package/dist/control-plane/task-proposal.d.ts +3 -0
- package/dist/control-plane/task-proposal.js +37 -0
- package/dist/control-plane/types.d.ts +155 -0
- package/dist/control-plane/types.js +2 -0
- package/dist/control-plane/workflows/index.d.ts +4 -0
- package/dist/control-plane/workflows/index.js +4 -0
- package/dist/control-plane/workflows/openai.d.ts +34 -0
- package/dist/control-plane/workflows/openai.js +411 -0
- package/dist/control-plane/workflows/structured-output-schemas.d.ts +9 -0
- package/dist/control-plane/workflows/structured-output-schemas.js +289 -0
- package/dist/control-plane/workflows/structured-output-validators.d.ts +15 -0
- package/dist/control-plane/workflows/structured-output-validators.js +295 -0
- package/dist/control-plane/workflows/structured-output.d.ts +3 -0
- package/dist/control-plane/workflows/structured-output.js +3 -0
- package/dist/control-plane/workflows/types.d.ts +274 -0
- package/dist/control-plane/workflows/types.js +2 -0
- package/dist/control-plane/worklist-terminal-feedback.d.ts +15 -0
- package/dist/control-plane/worklist-terminal-feedback.js +135 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +32 -0
- package/dist/procedure-engine/index.d.ts +56 -0
- package/dist/procedure-engine/index.js +163 -0
- package/dist/project-brief/index.d.ts +4 -0
- package/dist/project-brief/index.js +3 -0
- package/dist/project-brief/repository.d.ts +5 -0
- package/dist/project-brief/repository.js +97 -0
- package/dist/project-brief/source.d.ts +8 -0
- package/dist/project-brief/source.js +75 -0
- package/dist/project-brief/types.d.ts +40 -0
- package/dist/project-brief/types.js +2 -0
- package/dist/project-docs/context.d.ts +34 -0
- package/dist/project-docs/context.js +86 -0
- package/dist/project-timeline/index.d.ts +20 -0
- package/dist/project-timeline/index.js +100 -0
- package/dist/prompt-templates/index.d.ts +13 -0
- package/dist/prompt-templates/index.js +86 -0
- package/dist/provider-usage/index.d.ts +37 -0
- package/dist/provider-usage/index.js +227 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +2 -0
- package/dist/providers/openai/app-server/json-rpc.d.ts +71 -0
- package/dist/providers/openai/app-server/json-rpc.js +298 -0
- package/dist/providers/openai/app-server/permission-profile.d.ts +64 -0
- package/dist/providers/openai/app-server/permission-profile.js +67 -0
- package/dist/providers/openai/app-server/provider-config.d.ts +10 -0
- package/dist/providers/openai/app-server/provider-config.js +39 -0
- package/dist/providers/openai/app-server/read-only-procedure.d.ts +68 -0
- package/dist/providers/openai/app-server/read-only-procedure.js +293 -0
- package/dist/providers/openai/app-server/runtime-helpers.d.ts +20 -0
- package/dist/providers/openai/app-server/runtime-helpers.js +151 -0
- package/dist/providers/openai/app-server/skills.d.ts +82 -0
- package/dist/providers/openai/app-server/skills.js +222 -0
- package/dist/providers/openai/app-server/smoke-cli.d.ts +2 -0
- package/dist/providers/openai/app-server/smoke-cli.js +42 -0
- package/dist/providers/openai/app-server/smoke-helpers.d.ts +19 -0
- package/dist/providers/openai/app-server/smoke-helpers.js +125 -0
- package/dist/providers/openai/app-server/smoke-provider-input.d.ts +6 -0
- package/dist/providers/openai/app-server/smoke-provider-input.js +20 -0
- package/dist/providers/openai/app-server/smoke-types.d.ts +49 -0
- package/dist/providers/openai/app-server/smoke-types.js +20 -0
- package/dist/providers/openai/app-server/smoke.d.ts +9 -0
- package/dist/providers/openai/app-server/smoke.js +157 -0
- package/dist/providers/openai/app-server/workspace-write-run.d.ts +87 -0
- package/dist/providers/openai/app-server/workspace-write-run.js +379 -0
- package/dist/providers/openai/chat-assistant.d.ts +34 -0
- package/dist/providers/openai/chat-assistant.js +72 -0
- package/dist/providers/openai/codex-app-server.d.ts +126 -0
- package/dist/providers/openai/codex-app-server.js +147 -0
- package/dist/providers/openai/credential-store.d.ts +31 -0
- package/dist/providers/openai/credential-store.js +143 -0
- package/dist/providers/openai/credential-validation.d.ts +45 -0
- package/dist/providers/openai/credential-validation.js +190 -0
- package/dist/providers/openai/index.d.ts +13 -0
- package/dist/providers/openai/index.js +13 -0
- package/dist/providers/openai/machine-local-files.d.ts +19 -0
- package/dist/providers/openai/machine-local-files.js +55 -0
- package/dist/providers/openai/model-config.d.ts +4 -0
- package/dist/providers/openai/model-config.js +4 -0
- package/dist/providers/openai/provider-config-errors.d.ts +6 -0
- package/dist/providers/openai/provider-config-errors.js +13 -0
- package/dist/providers/openai/provider-config-shape.d.ts +3 -0
- package/dist/providers/openai/provider-config-shape.js +108 -0
- package/dist/providers/openai/provider-config-toml.d.ts +13 -0
- package/dist/providers/openai/provider-config-toml.js +113 -0
- package/dist/providers/openai/provider-config.d.ts +73 -0
- package/dist/providers/openai/provider-config.js +117 -0
- package/dist/providers/openai/provider-setup.d.ts +31 -0
- package/dist/providers/openai/provider-setup.js +88 -0
- package/dist/providers/openai/sdk-procedure-runner.d.ts +70 -0
- package/dist/providers/openai/sdk-procedure-runner.js +123 -0
- package/dist/providers/openai/token-usage.d.ts +11 -0
- package/dist/providers/openai/token-usage.js +90 -0
- package/dist/run-engine/index.d.ts +61 -0
- package/dist/run-engine/index.js +140 -0
- package/dist/run-pipeline/candidate-diff.d.ts +3 -0
- package/dist/run-pipeline/candidate-diff.js +10 -0
- package/dist/run-pipeline/openai.d.ts +41 -0
- package/dist/run-pipeline/openai.js +548 -0
- package/dist/run-pipeline/promotion-reconcile.d.ts +13 -0
- package/dist/run-pipeline/promotion-reconcile.js +138 -0
- package/dist/run-pipeline/result-projections.d.ts +39 -0
- package/dist/run-pipeline/result-projections.js +115 -0
- package/dist/run-pipeline/task-run-invocation.d.ts +6 -0
- package/dist/run-pipeline/task-run-invocation.js +130 -0
- package/dist/run-pipeline/task-run-output.d.ts +38 -0
- package/dist/run-pipeline/task-run-output.js +146 -0
- package/dist/server-shell/cli/args.d.ts +7 -0
- package/dist/server-shell/cli/args.js +30 -0
- package/dist/server-shell/cli/cli.d.ts +3 -0
- package/dist/server-shell/cli/cli.js +57 -0
- package/dist/server-shell/cli/errors.d.ts +9 -0
- package/dist/server-shell/cli/errors.js +53 -0
- package/dist/server-shell/cli/git-bootstrap.d.ts +24 -0
- package/dist/server-shell/cli/git-bootstrap.js +246 -0
- package/dist/server-shell/cli/host-lifecycle.d.ts +45 -0
- package/dist/server-shell/cli/host-lifecycle.js +298 -0
- package/dist/server-shell/cli/host-relay-status.d.ts +6 -0
- package/dist/server-shell/cli/host-relay-status.js +43 -0
- package/dist/server-shell/cli/host-runtime-endpoint.d.ts +22 -0
- package/dist/server-shell/cli/host-runtime-endpoint.js +120 -0
- package/dist/server-shell/cli/host-server-runtime.d.ts +30 -0
- package/dist/server-shell/cli/host-server-runtime.js +432 -0
- package/dist/server-shell/cli/index.d.ts +8 -0
- package/dist/server-shell/cli/index.js +8 -0
- package/dist/server-shell/cli/launch.d.ts +45 -0
- package/dist/server-shell/cli/launch.js +115 -0
- package/dist/server-shell/cli/machine-local.d.ts +69 -0
- package/dist/server-shell/cli/machine-local.js +223 -0
- package/dist/server-shell/cli/project-identity.d.ts +20 -0
- package/dist/server-shell/cli/project-identity.js +87 -0
- package/dist/server-shell/cli/relay-registration.d.ts +31 -0
- package/dist/server-shell/cli/relay-registration.js +61 -0
- package/dist/server-shell/command-idempotency/index.d.ts +44 -0
- package/dist/server-shell/command-idempotency/index.js +155 -0
- package/dist/server-shell/dev-runner/cli.d.ts +2 -0
- package/dist/server-shell/dev-runner/cli.js +10 -0
- package/dist/server-shell/dev-runner/config.d.ts +38 -0
- package/dist/server-shell/dev-runner/config.js +277 -0
- package/dist/server-shell/dev-runner/host-cli.d.ts +2 -0
- package/dist/server-shell/dev-runner/host-cli.js +22 -0
- package/dist/server-shell/dev-runner/index.d.ts +3 -0
- package/dist/server-shell/dev-runner/index.js +3 -0
- package/dist/server-shell/dev-runner/runner.d.ts +30 -0
- package/dist/server-shell/dev-runner/runner.js +236 -0
- package/dist/server-shell/http/create-server.d.ts +18 -0
- package/dist/server-shell/http/create-server.js +51 -0
- package/dist/server-shell/http/host-tunnel.d.ts +15 -0
- package/dist/server-shell/http/host-tunnel.js +154 -0
- package/dist/server-shell/http/logger.d.ts +7 -0
- package/dist/server-shell/http/logger.js +19 -0
- package/dist/server-shell/http/routes/agent-context-auth.d.ts +41 -0
- package/dist/server-shell/http/routes/agent-context-auth.js +73 -0
- package/dist/server-shell/http/routes/agent-context-errors.d.ts +6 -0
- package/dist/server-shell/http/routes/agent-context-errors.js +9 -0
- package/dist/server-shell/http/routes/agent-context-messages-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/agent-context-messages-routes.js +74 -0
- package/dist/server-shell/http/routes/agent-context-project-doc-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/agent-context-project-doc-routes.js +86 -0
- package/dist/server-shell/http/routes/agent-context-project-docs.d.ts +40 -0
- package/dist/server-shell/http/routes/agent-context-project-docs.js +98 -0
- package/dist/server-shell/http/routes/agent-context-query.d.ts +31 -0
- package/dist/server-shell/http/routes/agent-context-query.js +72 -0
- package/dist/server-shell/http/routes/agent-context-reference-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/agent-context-reference-routes.js +82 -0
- package/dist/server-shell/http/routes/agent-context-references.d.ts +21 -0
- package/dist/server-shell/http/routes/agent-context-references.js +85 -0
- package/dist/server-shell/http/routes/agent-context-shared.d.ts +34 -0
- package/dist/server-shell/http/routes/agent-context-shared.js +44 -0
- package/dist/server-shell/http/routes/agent-context-skills-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/agent-context-skills-routes.js +85 -0
- package/dist/server-shell/http/routes/agent-context-workspace-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/agent-context-workspace-routes.js +130 -0
- package/dist/server-shell/http/routes/agent-context.d.ts +8 -0
- package/dist/server-shell/http/routes/agent-context.js +16 -0
- package/dist/server-shell/http/routes/health.d.ts +7 -0
- package/dist/server-shell/http/routes/health.js +41 -0
- package/dist/server-shell/http/routes/local-control.d.ts +40 -0
- package/dist/server-shell/http/routes/local-control.js +260 -0
- package/dist/server-shell/http/routes/project-api/approval-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/project-api/approval-routes.js +64 -0
- package/dist/server-shell/http/routes/project-api/artifacts-routes.d.ts +8 -0
- package/dist/server-shell/http/routes/project-api/artifacts-routes.js +166 -0
- package/dist/server-shell/http/routes/project-api/clarification-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/project-api/clarification-routes.js +150 -0
- package/dist/server-shell/http/routes/project-api/constants.d.ts +3 -0
- package/dist/server-shell/http/routes/project-api/constants.js +3 -0
- package/dist/server-shell/http/routes/project-api/errors.d.ts +26 -0
- package/dist/server-shell/http/routes/project-api/errors.js +41 -0
- package/dist/server-shell/http/routes/project-api/events-stream.d.ts +11 -0
- package/dist/server-shell/http/routes/project-api/events-stream.js +55 -0
- package/dist/server-shell/http/routes/project-api/execution-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/project-api/execution-routes.js +92 -0
- package/dist/server-shell/http/routes/project-api/headers.d.ts +2 -0
- package/dist/server-shell/http/routes/project-api/headers.js +7 -0
- package/dist/server-shell/http/routes/project-api/invalidations.d.ts +10 -0
- package/dist/server-shell/http/routes/project-api/invalidations.js +57 -0
- package/dist/server-shell/http/routes/project-api/messages-routes.d.ts +8 -0
- package/dist/server-shell/http/routes/project-api/messages-routes.js +80 -0
- package/dist/server-shell/http/routes/project-api/openapi-approval-routes.d.ts +128 -0
- package/dist/server-shell/http/routes/project-api/openapi-approval-routes.js +32 -0
- package/dist/server-shell/http/routes/project-api/openapi-artifacts-routes.d.ts +51 -0
- package/dist/server-shell/http/routes/project-api/openapi-artifacts-routes.js +56 -0
- package/dist/server-shell/http/routes/project-api/openapi-collaboration-routes.d.ts +466 -0
- package/dist/server-shell/http/routes/project-api/openapi-collaboration-routes.js +165 -0
- package/dist/server-shell/http/routes/project-api/openapi-diagnostic-routes.d.ts +16 -0
- package/dist/server-shell/http/routes/project-api/openapi-diagnostic-routes.js +17 -0
- package/dist/server-shell/http/routes/project-api/openapi-execution-routes.d.ts +215 -0
- package/dist/server-shell/http/routes/project-api/openapi-execution-routes.js +75 -0
- package/dist/server-shell/http/routes/project-api/openapi-path-parameters.d.ts +9 -0
- package/dist/server-shell/http/routes/project-api/openapi-path-parameters.js +18 -0
- package/dist/server-shell/http/routes/project-api/openapi-skills-routes.d.ts +60 -0
- package/dist/server-shell/http/routes/project-api/openapi-skills-routes.js +51 -0
- package/dist/server-shell/http/routes/project-api/openapi-timeline-routes.d.ts +115 -0
- package/dist/server-shell/http/routes/project-api/openapi-timeline-routes.js +17 -0
- package/dist/server-shell/http/routes/project-api/openapi-viewer-routes.d.ts +323 -0
- package/dist/server-shell/http/routes/project-api/openapi-viewer-routes.js +120 -0
- package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.d.ts +1317 -0
- package/dist/server-shell/http/routes/project-api/openapi-workspace-routes.js +95 -0
- package/dist/server-shell/http/routes/project-api/openapi.d.ts +2457 -0
- package/dist/server-shell/http/routes/project-api/openapi.js +30 -0
- package/dist/server-shell/http/routes/project-api/payload-validation.d.ts +6 -0
- package/dist/server-shell/http/routes/project-api/payload-validation.js +36 -0
- package/dist/server-shell/http/routes/project-api/project-docs-helpers.d.ts +9 -0
- package/dist/server-shell/http/routes/project-api/project-docs-helpers.js +17 -0
- package/dist/server-shell/http/routes/project-api/project-docs-routes.d.ts +8 -0
- package/dist/server-shell/http/routes/project-api/project-docs-routes.js +151 -0
- package/dist/server-shell/http/routes/project-api/project-timeline-projection.d.ts +8 -0
- package/dist/server-shell/http/routes/project-api/project-timeline-projection.js +658 -0
- package/dist/server-shell/http/routes/project-api/project-timeline-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/project-api/project-timeline-routes.js +23 -0
- package/dist/server-shell/http/routes/project-api/read-state-routes.d.ts +8 -0
- package/dist/server-shell/http/routes/project-api/read-state-routes.js +82 -0
- package/dist/server-shell/http/routes/project-api/reference-files-routes.d.ts +8 -0
- package/dist/server-shell/http/routes/project-api/reference-files-routes.js +184 -0
- package/dist/server-shell/http/routes/project-api/reference-files.d.ts +17 -0
- package/dist/server-shell/http/routes/project-api/reference-files.js +212 -0
- package/dist/server-shell/http/routes/project-api/repo-projection.d.ts +3 -0
- package/dist/server-shell/http/routes/project-api/repo-projection.js +58 -0
- package/dist/server-shell/http/routes/project-api/schemas.d.ts +1351 -0
- package/dist/server-shell/http/routes/project-api/schemas.js +441 -0
- package/dist/server-shell/http/routes/project-api/session-requirements.d.ts +10 -0
- package/dist/server-shell/http/routes/project-api/session-requirements.js +60 -0
- package/dist/server-shell/http/routes/project-api/skills-helpers.d.ts +7 -0
- package/dist/server-shell/http/routes/project-api/skills-helpers.js +48 -0
- package/dist/server-shell/http/routes/project-api/skills-routes.d.ts +8 -0
- package/dist/server-shell/http/routes/project-api/skills-routes.js +185 -0
- package/dist/server-shell/http/routes/project-api/staged-uploads.d.ts +14 -0
- package/dist/server-shell/http/routes/project-api/staged-uploads.js +149 -0
- package/dist/server-shell/http/routes/project-api/system-routes.d.ts +8 -0
- package/dist/server-shell/http/routes/project-api/system-routes.js +141 -0
- package/dist/server-shell/http/routes/project-api/types.d.ts +137 -0
- package/dist/server-shell/http/routes/project-api/types.js +2 -0
- package/dist/server-shell/http/routes/project-api/viewer-projections.d.ts +17 -0
- package/dist/server-shell/http/routes/project-api/viewer-projections.js +102 -0
- package/dist/server-shell/http/routes/project-api/viewer-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/project-api/viewer-routes.js +100 -0
- package/dist/server-shell/http/routes/project-api/workflow-routes.d.ts +4 -0
- package/dist/server-shell/http/routes/project-api/workflow-routes.js +85 -0
- package/dist/server-shell/http/routes/project-api/workspace-projections.d.ts +5 -0
- package/dist/server-shell/http/routes/project-api/workspace-projections.js +103 -0
- package/dist/server-shell/http/routes/project-api.d.ts +8 -0
- package/dist/server-shell/http/routes/project-api.js +34 -0
- package/dist/server-shell/http/sse-replay-buffer.d.ts +54 -0
- package/dist/server-shell/http/sse-replay-buffer.js +110 -0
- package/dist/server-shell/http/sse.d.ts +12 -0
- package/dist/server-shell/http/sse.js +22 -0
- package/dist/server-shell/http/static-web.d.ts +6 -0
- package/dist/server-shell/http/static-web.js +52 -0
- package/dist/server-shell/http/validation.d.ts +13 -0
- package/dist/server-shell/http/validation.js +136 -0
- package/dist/server-shell/http/workspace-events.d.ts +38 -0
- package/dist/server-shell/http/workspace-events.js +98 -0
- package/dist/server-shell/session/relay-session-context.d.ts +25 -0
- package/dist/server-shell/session/relay-session-context.js +49 -0
- package/dist/server-shell/smoke/e2e-client.d.ts +59 -0
- package/dist/server-shell/smoke/e2e-client.js +304 -0
- package/dist/server-shell/smoke/index.d.ts +2 -0
- package/dist/server-shell/smoke/index.js +2 -0
- package/dist/skills/constants.d.ts +8 -0
- package/dist/skills/constants.js +9 -0
- package/dist/skills/errors.d.ts +6 -0
- package/dist/skills/errors.js +9 -0
- package/dist/skills/index.d.ts +41 -0
- package/dist/skills/index.js +171 -0
- package/dist/skills/metadata.d.ts +8 -0
- package/dist/skills/metadata.js +80 -0
- package/dist/skills/zip-import.d.ts +18 -0
- package/dist/skills/zip-import.js +241 -0
- package/dist/store/command-recovery.d.ts +26 -0
- package/dist/store/command-recovery.js +71 -0
- package/dist/store/index.d.ts +6 -0
- package/dist/store/index.js +6 -0
- package/dist/store/lifecycle.d.ts +23 -0
- package/dist/store/lifecycle.js +53 -0
- package/dist/store/metadata.d.ts +18 -0
- package/dist/store/metadata.js +30 -0
- package/dist/store/migrations.d.ts +20 -0
- package/dist/store/migrations.js +76 -0
- package/dist/store/sqlite.d.ts +11 -0
- package/dist/store/sqlite.js +21 -0
- package/dist/workspace-ops/constants.d.ts +15 -0
- package/dist/workspace-ops/constants.js +20 -0
- package/dist/workspace-ops/errors.d.ts +8 -0
- package/dist/workspace-ops/errors.js +33 -0
- package/dist/workspace-ops/git.d.ts +13 -0
- package/dist/workspace-ops/git.js +53 -0
- package/dist/workspace-ops/index.d.ts +11 -0
- package/dist/workspace-ops/index.js +9 -0
- package/dist/workspace-ops/mainline.d.ts +2 -0
- package/dist/workspace-ops/mainline.js +16 -0
- package/dist/workspace-ops/project-doc-templates.d.ts +12 -0
- package/dist/workspace-ops/project-doc-templates.js +180 -0
- package/dist/workspace-ops/project-docs.d.ts +7 -0
- package/dist/workspace-ops/project-docs.js +156 -0
- package/dist/workspace-ops/reference-files.d.ts +3 -0
- package/dist/workspace-ops/reference-files.js +137 -0
- package/dist/workspace-ops/reference-metadata.d.ts +13 -0
- package/dist/workspace-ops/reference-metadata.js +86 -0
- package/dist/workspace-ops/reference-summaries.d.ts +17 -0
- package/dist/workspace-ops/reference-summaries.js +298 -0
- package/dist/workspace-ops/run-workspaces.d.ts +18 -0
- package/dist/workspace-ops/run-workspaces.js +271 -0
- package/dist/workspace-ops/types.d.ts +219 -0
- package/dist/workspace-ops/types.js +2 -0
- package/dist/workspace-ops/viewer-file.d.ts +4 -0
- package/dist/workspace-ops/viewer-file.js +207 -0
- package/dist/workspace-ops/viewer-git.d.ts +20 -0
- package/dist/workspace-ops/viewer-git.js +111 -0
- package/dist/workspace-ops/viewer-paths.d.ts +3 -0
- package/dist/workspace-ops/viewer-paths.js +13 -0
- package/dist/workspace-ops/viewer-tree.d.ts +9 -0
- package/dist/workspace-ops/viewer-tree.js +144 -0
- package/dist/workspace-ops/viewer.d.ts +5 -0
- package/dist/workspace-ops/viewer.js +5 -0
- package/migrations/0001_init.sql +674 -0
- package/migrations/0002_allow_sealed_round_successor_note.sql +14 -0
- package/migrations/0003_drop_scratchpad_source_message_refs.sql +1 -0
- package/migrations/0004_read_state.sql +109 -0
- package/migrations/0005_provider_usage.sql +15 -0
- package/migrations/0006_scratchpad_source_state.sql +29 -0
- package/migrations/0007_workspace_signal_read_state_scopes.sql +74 -0
- package/migrations/0008_provider_usage_anchors.sql +32 -0
- package/migrations/0009_project_timeline_events.sql +33 -0
- package/migrations/0010_project_brief.sql +13 -0
- package/migrations/0011_message_author_avatar.sql +5 -0
- package/migrations/README.md +44 -0
- package/node_modules/@tutti/relay-client/dist/host-control.d.ts +164 -0
- package/node_modules/@tutti/relay-client/dist/host-control.js +284 -0
- package/node_modules/@tutti/relay-client/dist/index.d.ts +3 -0
- package/node_modules/@tutti/relay-client/dist/index.js +3 -0
- package/node_modules/@tutti/relay-client/dist/tunnel-frames.d.ts +8 -0
- package/node_modules/@tutti/relay-client/dist/tunnel-frames.js +124 -0
- package/node_modules/@tutti/relay-client/dist/tunnel-types.d.ts +61 -0
- package/node_modules/@tutti/relay-client/dist/tunnel-types.js +2 -0
- package/node_modules/@tutti/relay-client/dist/tunnel.d.ts +4 -0
- package/node_modules/@tutti/relay-client/dist/tunnel.js +144 -0
- package/node_modules/@tutti/relay-client/package.json +18 -0
- package/node_modules/@tutti/shared/dist/domain/index.d.ts +59 -0
- package/node_modules/@tutti/shared/dist/domain/index.js +37 -0
- package/node_modules/@tutti/shared/dist/ids/index.d.ts +85 -0
- package/node_modules/@tutti/shared/dist/ids/index.js +88 -0
- package/node_modules/@tutti/shared/dist/index.d.ts +6 -0
- package/node_modules/@tutti/shared/dist/index.js +6 -0
- package/node_modules/@tutti/shared/dist/schemas/api/approvals.d.ts +307 -0
- package/node_modules/@tutti/shared/dist/schemas/api/approvals.js +110 -0
- package/node_modules/@tutti/shared/dist/schemas/api/artifacts.d.ts +173 -0
- package/node_modules/@tutti/shared/dist/schemas/api/artifacts.js +107 -0
- package/node_modules/@tutti/shared/dist/schemas/api/clarifications.d.ts +704 -0
- package/node_modules/@tutti/shared/dist/schemas/api/clarifications.js +224 -0
- package/node_modules/@tutti/shared/dist/schemas/api/index.d.ts +18 -0
- package/node_modules/@tutti/shared/dist/schemas/api/index.js +17 -0
- package/node_modules/@tutti/shared/dist/schemas/api/messages.d.ts +370 -0
- package/node_modules/@tutti/shared/dist/schemas/api/messages.js +134 -0
- package/node_modules/@tutti/shared/dist/schemas/api/openapi.d.ts +32 -0
- package/node_modules/@tutti/shared/dist/schemas/api/openapi.js +100 -0
- package/node_modules/@tutti/shared/dist/schemas/api/primitives.d.ts +109 -0
- package/node_modules/@tutti/shared/dist/schemas/api/primitives.js +174 -0
- package/node_modules/@tutti/shared/dist/schemas/api/project-timeline.d.ts +149 -0
- package/node_modules/@tutti/shared/dist/schemas/api/project-timeline.js +44 -0
- package/node_modules/@tutti/shared/dist/schemas/api/provider-config.d.ts +21 -0
- package/node_modules/@tutti/shared/dist/schemas/api/provider-config.js +33 -0
- package/node_modules/@tutti/shared/dist/schemas/api/provider-usage.d.ts +87 -0
- package/node_modules/@tutti/shared/dist/schemas/api/provider-usage.js +48 -0
- package/node_modules/@tutti/shared/dist/schemas/api/read-state.d.ts +89 -0
- package/node_modules/@tutti/shared/dist/schemas/api/read-state.js +39 -0
- package/node_modules/@tutti/shared/dist/schemas/api/runtime-events.d.ts +484 -0
- package/node_modules/@tutti/shared/dist/schemas/api/runtime-events.js +185 -0
- package/node_modules/@tutti/shared/dist/schemas/api/skills.d.ts +88 -0
- package/node_modules/@tutti/shared/dist/schemas/api/skills.js +71 -0
- package/node_modules/@tutti/shared/dist/schemas/api/types.d.ts +253 -0
- package/node_modules/@tutti/shared/dist/schemas/api/types.js +2 -0
- package/node_modules/@tutti/shared/dist/schemas/api/uploads.d.ts +103 -0
- package/node_modules/@tutti/shared/dist/schemas/api/uploads.js +78 -0
- package/node_modules/@tutti/shared/dist/schemas/api/viewer-reference.d.ts +484 -0
- package/node_modules/@tutti/shared/dist/schemas/api/viewer-reference.js +267 -0
- package/node_modules/@tutti/shared/dist/schemas/api/work-items.d.ts +264 -0
- package/node_modules/@tutti/shared/dist/schemas/api/work-items.js +196 -0
- package/node_modules/@tutti/shared/dist/schemas/api/workspace-commands.d.ts +179 -0
- package/node_modules/@tutti/shared/dist/schemas/api/workspace-commands.js +137 -0
- package/node_modules/@tutti/shared/dist/schemas/domain/index.d.ts +31 -0
- package/node_modules/@tutti/shared/dist/schemas/domain/index.js +49 -0
- package/node_modules/@tutti/shared/dist/schemas/internal/index.d.ts +46 -0
- package/node_modules/@tutti/shared/dist/schemas/internal/index.js +46 -0
- package/node_modules/@tutti/shared/dist/utils/command-idempotency/index.d.ts +40 -0
- package/node_modules/@tutti/shared/dist/utils/command-idempotency/index.js +100 -0
- package/node_modules/@tutti/shared/dist/utils/index.d.ts +5 -0
- package/node_modules/@tutti/shared/dist/utils/index.js +5 -0
- package/node_modules/@tutti/shared/dist/utils/logging/index.d.ts +34 -0
- package/node_modules/@tutti/shared/dist/utils/logging/index.js +130 -0
- package/node_modules/@tutti/shared/dist/utils/path-policy/index.d.ts +13 -0
- package/node_modules/@tutti/shared/dist/utils/path-policy/index.js +80 -0
- package/node_modules/@tutti/shared/dist/utils/redaction/index.d.ts +19 -0
- package/node_modules/@tutti/shared/dist/utils/redaction/index.js +158 -0
- package/node_modules/@tutti/shared/package.json +63 -0
- package/package.json +47 -0
- package/prompts/README.md +36 -0
- package/prompts/chat-assistant.md +43 -0
- package/prompts/codex/README.md +13 -0
- package/prompts/codex/no-write-smoke.md +35 -0
- package/prompts/procedures/README.md +38 -0
- package/prompts/procedures/context-sync.md +66 -0
- package/prompts/procedures/follow-up-check.md +83 -0
- package/prompts/procedures/project-brief-refresh.md +79 -0
- package/prompts/procedures/project-context-bootstrap.md +58 -0
- package/prompts/procedures/reference-file-summary.md +49 -0
- package/prompts/procedures/scratchpad-refresh.md +83 -0
- package/prompts/procedures/task-compile.md +116 -0
- package/prompts/prompt-flow-experiment-plan.md +203 -0
- package/prompts/prompt-flow-map.md +478 -0
- package/prompts/runs/README.md +17 -0
- package/prompts/runs/task-continuation.md +148 -0
- package/prompts/runs/task-retry.md +153 -0
- package/prompts/runs/task-run.md +135 -0
- package/prompts/skills/README.md +25 -0
- package/prompts/skills/read-main-chat/README.md +8 -0
- package/prompts/skills/read-main-chat/SKILL.md +18 -0
- package/prompts/skills/read-project-docs/README.md +13 -0
- package/prompts/skills/read-project-docs/SKILL.md +42 -0
- package/prompts/skills/read-references/README.md +9 -0
- package/prompts/skills/read-references/SKILL.md +26 -0
- package/prompts/skills/read-scratchpad/README.md +8 -0
- package/prompts/skills/read-scratchpad/SKILL.md +16 -0
- package/prompts/skills/read-user-skills/README.md +7 -0
- package/prompts/skills/read-user-skills/SKILL.md +22 -0
- package/prompts/skills/read-worklist/README.md +9 -0
- package/prompts/skills/read-worklist/SKILL.md +20 -0
- package/web/assets/Tutti-B7gEyTp1.png +0 -0
- package/web/assets/Tutti-square-BqFU7F0D.png +0 -0
- package/web/assets/index-CWkBgHap.js +29 -0
- package/web/assets/index-D8xJY8Gr.css +1 -0
- package/web/index.html +13 -0
|
@@ -0,0 +1,674 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
2
|
+
version TEXT PRIMARY KEY,
|
|
3
|
+
checksum TEXT NOT NULL,
|
|
4
|
+
applied_at TEXT NOT NULL
|
|
5
|
+
);
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS store_metadata (
|
|
8
|
+
id TEXT PRIMARY KEY CHECK (id = 'current'),
|
|
9
|
+
project_id TEXT NOT NULL UNIQUE,
|
|
10
|
+
schema_version INTEGER NOT NULL DEFAULT 1 CHECK (schema_version >= 1),
|
|
11
|
+
created_at TEXT NOT NULL,
|
|
12
|
+
updated_at TEXT NOT NULL
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
CREATE TABLE IF NOT EXISTS command_idempotency_records (
|
|
16
|
+
command_id TEXT PRIMARY KEY,
|
|
17
|
+
command_name TEXT NOT NULL,
|
|
18
|
+
target_ref TEXT,
|
|
19
|
+
request_hash TEXT NOT NULL,
|
|
20
|
+
status TEXT NOT NULL CHECK (status IN ('in_progress', 'completed', 'failed')),
|
|
21
|
+
disposition_json TEXT CHECK (
|
|
22
|
+
disposition_json IS NULL
|
|
23
|
+
OR (json_valid(disposition_json) AND json_type(disposition_json) = 'object')
|
|
24
|
+
),
|
|
25
|
+
created_at TEXT NOT NULL,
|
|
26
|
+
updated_at TEXT NOT NULL,
|
|
27
|
+
completed_at TEXT,
|
|
28
|
+
CHECK (
|
|
29
|
+
(status = 'in_progress' AND completed_at IS NULL AND disposition_json IS NULL)
|
|
30
|
+
OR (status IN ('completed', 'failed') AND completed_at IS NOT NULL AND disposition_json IS NOT NULL)
|
|
31
|
+
)
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_command_idempotency_status
|
|
35
|
+
ON command_idempotency_records (status, updated_at, command_name);
|
|
36
|
+
|
|
37
|
+
CREATE TABLE IF NOT EXISTS task_modules (
|
|
38
|
+
id TEXT PRIMARY KEY,
|
|
39
|
+
name TEXT NOT NULL CHECK (length(name) > 0),
|
|
40
|
+
summary TEXT,
|
|
41
|
+
sort_order INTEGER NOT NULL,
|
|
42
|
+
archived INTEGER NOT NULL DEFAULT 0 CHECK (archived IN (0, 1)),
|
|
43
|
+
created_at TEXT NOT NULL,
|
|
44
|
+
updated_at TEXT
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_task_modules_order
|
|
48
|
+
ON task_modules (archived, sort_order, id);
|
|
49
|
+
|
|
50
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
51
|
+
id TEXT PRIMARY KEY,
|
|
52
|
+
module_id TEXT NOT NULL REFERENCES task_modules(id) ON UPDATE CASCADE,
|
|
53
|
+
title TEXT NOT NULL CHECK (length(title) > 0),
|
|
54
|
+
summary TEXT NOT NULL,
|
|
55
|
+
status TEXT NOT NULL CHECK (status IN ('todo', 'running', 'pending', 'done', 'failed')),
|
|
56
|
+
sort_order INTEGER NOT NULL,
|
|
57
|
+
current_activity_ref TEXT,
|
|
58
|
+
active_clarification_thread_id TEXT
|
|
59
|
+
REFERENCES clarification_threads(id)
|
|
60
|
+
DEFERRABLE INITIALLY DEFERRED,
|
|
61
|
+
latest_run_result_id TEXT
|
|
62
|
+
REFERENCES run_results(id)
|
|
63
|
+
DEFERRABLE INITIALLY DEFERRED,
|
|
64
|
+
created_from_workflow_ref TEXT NOT NULL,
|
|
65
|
+
created_at TEXT NOT NULL,
|
|
66
|
+
updated_at TEXT NOT NULL,
|
|
67
|
+
CHECK (
|
|
68
|
+
(status = 'pending' AND active_clarification_thread_id IS NOT NULL)
|
|
69
|
+
OR (status != 'pending' AND active_clarification_thread_id IS NULL)
|
|
70
|
+
)
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_worklist_order
|
|
74
|
+
ON tasks (module_id, sort_order, id);
|
|
75
|
+
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status_order
|
|
77
|
+
ON tasks (status, sort_order, id);
|
|
78
|
+
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_active_activity
|
|
80
|
+
ON tasks (current_activity_ref)
|
|
81
|
+
WHERE current_activity_ref IS NOT NULL;
|
|
82
|
+
|
|
83
|
+
CREATE TABLE IF NOT EXISTS task_details (
|
|
84
|
+
task_id TEXT PRIMARY KEY REFERENCES tasks(id) ON DELETE CASCADE,
|
|
85
|
+
contract_json TEXT NOT NULL CHECK (
|
|
86
|
+
json_valid(contract_json) AND json_type(contract_json) = 'object'
|
|
87
|
+
),
|
|
88
|
+
result_json TEXT NOT NULL DEFAULT '{}' CHECK (
|
|
89
|
+
json_valid(result_json) AND json_type(result_json) = 'object'
|
|
90
|
+
),
|
|
91
|
+
frozen_contract_since_activity_ref TEXT,
|
|
92
|
+
updated_at TEXT NOT NULL
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
96
|
+
id TEXT PRIMARY KEY,
|
|
97
|
+
scope_kind TEXT NOT NULL CHECK (scope_kind IN ('main_chat', 'clarification_round')),
|
|
98
|
+
clarification_round_id TEXT
|
|
99
|
+
REFERENCES clarification_rounds(id)
|
|
100
|
+
DEFERRABLE INITIALLY DEFERRED,
|
|
101
|
+
author_kind TEXT NOT NULL CHECK (author_kind IN ('human', 'system', 'agent')),
|
|
102
|
+
author_ref TEXT,
|
|
103
|
+
author_display_name TEXT,
|
|
104
|
+
message_kind TEXT NOT NULL CHECK (
|
|
105
|
+
message_kind IN (
|
|
106
|
+
'user_text',
|
|
107
|
+
'agent_text',
|
|
108
|
+
'system_notice',
|
|
109
|
+
'clarification_request',
|
|
110
|
+
'clarification_card'
|
|
111
|
+
)
|
|
112
|
+
),
|
|
113
|
+
body TEXT NOT NULL,
|
|
114
|
+
refs_json TEXT CHECK (
|
|
115
|
+
refs_json IS NULL
|
|
116
|
+
OR (json_valid(refs_json) AND json_type(refs_json) = 'object')
|
|
117
|
+
),
|
|
118
|
+
created_at TEXT NOT NULL,
|
|
119
|
+
CHECK (
|
|
120
|
+
(scope_kind = 'main_chat' AND clarification_round_id IS NULL)
|
|
121
|
+
OR (scope_kind = 'clarification_round' AND clarification_round_id IS NOT NULL)
|
|
122
|
+
),
|
|
123
|
+
CHECK (message_kind != 'clarification_card' OR scope_kind = 'main_chat'),
|
|
124
|
+
CHECK (message_kind != 'clarification_request' OR scope_kind = 'clarification_round')
|
|
125
|
+
);
|
|
126
|
+
|
|
127
|
+
CREATE INDEX IF NOT EXISTS idx_messages_main_chat_order
|
|
128
|
+
ON messages (created_at, id)
|
|
129
|
+
WHERE scope_kind = 'main_chat';
|
|
130
|
+
|
|
131
|
+
CREATE INDEX IF NOT EXISTS idx_messages_clarification_round_order
|
|
132
|
+
ON messages (clarification_round_id, created_at, id)
|
|
133
|
+
WHERE scope_kind = 'clarification_round';
|
|
134
|
+
|
|
135
|
+
CREATE TABLE IF NOT EXISTS scratchpad (
|
|
136
|
+
id TEXT PRIMARY KEY CHECK (id = 'current'),
|
|
137
|
+
topic TEXT NOT NULL,
|
|
138
|
+
background_summary TEXT NOT NULL,
|
|
139
|
+
current_consensus_json TEXT NOT NULL CHECK (
|
|
140
|
+
json_valid(current_consensus_json) AND json_type(current_consensus_json) = 'array'
|
|
141
|
+
),
|
|
142
|
+
open_questions_json TEXT NOT NULL CHECK (
|
|
143
|
+
json_valid(open_questions_json) AND json_type(open_questions_json) = 'array'
|
|
144
|
+
),
|
|
145
|
+
task_changes_json TEXT NOT NULL CHECK (
|
|
146
|
+
json_valid(task_changes_json) AND json_type(task_changes_json) = 'array'
|
|
147
|
+
),
|
|
148
|
+
source_message_refs_json TEXT NOT NULL CHECK (
|
|
149
|
+
json_valid(source_message_refs_json) AND json_type(source_message_refs_json) = 'array'
|
|
150
|
+
),
|
|
151
|
+
updated_by_activity_ref TEXT,
|
|
152
|
+
updated_at TEXT NOT NULL
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
CREATE TABLE IF NOT EXISTS clarification_threads (
|
|
156
|
+
id TEXT PRIMARY KEY,
|
|
157
|
+
owner_kind TEXT NOT NULL CHECK (owner_kind IN ('task_compile', 'task')),
|
|
158
|
+
owner_workflow_ref TEXT,
|
|
159
|
+
owner_task_id TEXT REFERENCES tasks(id) DEFERRABLE INITIALLY DEFERRED,
|
|
160
|
+
status TEXT NOT NULL CHECK (status IN ('active', 'closed')),
|
|
161
|
+
current_round_id TEXT
|
|
162
|
+
REFERENCES clarification_rounds(id)
|
|
163
|
+
DEFERRABLE INITIALLY DEFERRED,
|
|
164
|
+
created_from_activity_ref TEXT,
|
|
165
|
+
closed_reason TEXT CHECK (
|
|
166
|
+
closed_reason IS NULL OR closed_reason IN ('resolved', 'contract_changed', 'cancelled')
|
|
167
|
+
),
|
|
168
|
+
created_at TEXT NOT NULL,
|
|
169
|
+
updated_at TEXT NOT NULL,
|
|
170
|
+
CHECK (
|
|
171
|
+
(owner_kind = 'task_compile' AND owner_workflow_ref IS NOT NULL AND owner_task_id IS NULL)
|
|
172
|
+
OR (owner_kind = 'task' AND owner_task_id IS NOT NULL AND owner_workflow_ref IS NULL)
|
|
173
|
+
),
|
|
174
|
+
CHECK (
|
|
175
|
+
(status = 'active' AND closed_reason IS NULL)
|
|
176
|
+
OR (status = 'closed' AND closed_reason IS NOT NULL)
|
|
177
|
+
)
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_clarification_threads_active_task_unique
|
|
181
|
+
ON clarification_threads (owner_task_id)
|
|
182
|
+
WHERE owner_kind = 'task' AND status = 'active';
|
|
183
|
+
|
|
184
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_clarification_threads_active_task_compile_unique
|
|
185
|
+
ON clarification_threads (owner_workflow_ref)
|
|
186
|
+
WHERE owner_kind = 'task_compile' AND status = 'active';
|
|
187
|
+
|
|
188
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_clarification_threads_one_active_global
|
|
189
|
+
ON clarification_threads (status)
|
|
190
|
+
WHERE status = 'active';
|
|
191
|
+
|
|
192
|
+
CREATE INDEX IF NOT EXISTS idx_clarification_threads_current_round
|
|
193
|
+
ON clarification_threads (current_round_id)
|
|
194
|
+
WHERE current_round_id IS NOT NULL;
|
|
195
|
+
|
|
196
|
+
CREATE TABLE IF NOT EXISTS clarification_rounds (
|
|
197
|
+
id TEXT PRIMARY KEY,
|
|
198
|
+
clarification_thread_id TEXT NOT NULL
|
|
199
|
+
REFERENCES clarification_threads(id)
|
|
200
|
+
DEFERRABLE INITIALLY DEFERRED,
|
|
201
|
+
round_index INTEGER NOT NULL CHECK (round_index >= 1),
|
|
202
|
+
status TEXT NOT NULL CHECK (status IN ('writable', 'sealed')),
|
|
203
|
+
request_payload_json TEXT NOT NULL CHECK (
|
|
204
|
+
json_valid(request_payload_json) AND json_type(request_payload_json) = 'object'
|
|
205
|
+
),
|
|
206
|
+
card_message_id TEXT NOT NULL
|
|
207
|
+
REFERENCES messages(id)
|
|
208
|
+
DEFERRABLE INITIALLY DEFERRED,
|
|
209
|
+
opening_message_id TEXT NOT NULL
|
|
210
|
+
REFERENCES messages(id)
|
|
211
|
+
DEFERRABLE INITIALLY DEFERRED,
|
|
212
|
+
submitted_at TEXT,
|
|
213
|
+
submitted_message_refs_json TEXT CHECK (
|
|
214
|
+
submitted_message_refs_json IS NULL
|
|
215
|
+
OR (
|
|
216
|
+
json_valid(submitted_message_refs_json)
|
|
217
|
+
AND json_type(submitted_message_refs_json) = 'array'
|
|
218
|
+
)
|
|
219
|
+
),
|
|
220
|
+
submitted_interaction_response_id TEXT
|
|
221
|
+
REFERENCES clarification_interaction_responses(id)
|
|
222
|
+
DEFERRABLE INITIALLY DEFERRED,
|
|
223
|
+
successor_status TEXT NOT NULL DEFAULT 'not_materialized'
|
|
224
|
+
CHECK (successor_status IN ('not_materialized', 'materialized')),
|
|
225
|
+
successor_ref_json TEXT CHECK (
|
|
226
|
+
successor_ref_json IS NULL
|
|
227
|
+
OR (json_valid(successor_ref_json) AND json_type(successor_ref_json) = 'object')
|
|
228
|
+
),
|
|
229
|
+
created_at TEXT NOT NULL,
|
|
230
|
+
updated_at TEXT NOT NULL,
|
|
231
|
+
UNIQUE (clarification_thread_id, round_index),
|
|
232
|
+
CHECK (
|
|
233
|
+
(status = 'writable' AND submitted_at IS NULL AND submitted_message_refs_json IS NULL)
|
|
234
|
+
OR (status = 'sealed' AND submitted_at IS NOT NULL AND submitted_message_refs_json IS NOT NULL)
|
|
235
|
+
),
|
|
236
|
+
CHECK (successor_status = 'not_materialized' OR status = 'sealed'),
|
|
237
|
+
CHECK (
|
|
238
|
+
(successor_status = 'not_materialized' AND successor_ref_json IS NULL)
|
|
239
|
+
OR (successor_status = 'materialized' AND successor_ref_json IS NOT NULL)
|
|
240
|
+
)
|
|
241
|
+
);
|
|
242
|
+
|
|
243
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_clarification_rounds_one_writable_per_thread
|
|
244
|
+
ON clarification_rounds (clarification_thread_id)
|
|
245
|
+
WHERE status = 'writable';
|
|
246
|
+
|
|
247
|
+
CREATE INDEX IF NOT EXISTS idx_clarification_rounds_order
|
|
248
|
+
ON clarification_rounds (clarification_thread_id, round_index);
|
|
249
|
+
|
|
250
|
+
CREATE INDEX IF NOT EXISTS idx_clarification_rounds_successor_replay
|
|
251
|
+
ON clarification_rounds (successor_status, submitted_at, id)
|
|
252
|
+
WHERE status = 'sealed' AND successor_status = 'not_materialized';
|
|
253
|
+
|
|
254
|
+
CREATE TABLE IF NOT EXISTS clarification_interaction_responses (
|
|
255
|
+
id TEXT PRIMARY KEY,
|
|
256
|
+
clarification_round_id TEXT NOT NULL REFERENCES clarification_rounds(id) ON DELETE CASCADE,
|
|
257
|
+
response_kind TEXT NOT NULL CHECK (response_kind IN ('choice')),
|
|
258
|
+
responder_client_session_id TEXT,
|
|
259
|
+
responder_account_ref TEXT,
|
|
260
|
+
responder_display_name TEXT,
|
|
261
|
+
response_json TEXT NOT NULL CHECK (
|
|
262
|
+
json_valid(response_json) AND json_type(response_json) = 'object'
|
|
263
|
+
),
|
|
264
|
+
created_at TEXT NOT NULL,
|
|
265
|
+
updated_at TEXT,
|
|
266
|
+
UNIQUE (clarification_round_id)
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
CREATE INDEX IF NOT EXISTS idx_clarification_interaction_responses_round
|
|
270
|
+
ON clarification_interaction_responses (clarification_round_id);
|
|
271
|
+
|
|
272
|
+
CREATE TABLE IF NOT EXISTS run_results (
|
|
273
|
+
id TEXT PRIMARY KEY,
|
|
274
|
+
activity_ref TEXT NOT NULL UNIQUE,
|
|
275
|
+
task_id TEXT NOT NULL REFERENCES tasks(id) DEFERRABLE INITIALLY DEFERRED,
|
|
276
|
+
source_event_ref TEXT NOT NULL,
|
|
277
|
+
run_lineage_json TEXT NOT NULL CHECK (
|
|
278
|
+
json_valid(run_lineage_json) AND json_type(run_lineage_json) = 'object'
|
|
279
|
+
),
|
|
280
|
+
result_kind TEXT NOT NULL CHECK (result_kind IN ('needs_human', 'finished', 'failed')),
|
|
281
|
+
result_json TEXT NOT NULL CHECK (
|
|
282
|
+
json_valid(result_json) AND json_type(result_json) = 'object'
|
|
283
|
+
),
|
|
284
|
+
created_at TEXT NOT NULL
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
CREATE INDEX IF NOT EXISTS idx_run_results_task_order
|
|
288
|
+
ON run_results (task_id, created_at, id);
|
|
289
|
+
|
|
290
|
+
CREATE TABLE IF NOT EXISTS recovery_summaries (
|
|
291
|
+
id TEXT PRIMARY KEY,
|
|
292
|
+
affected_activities_json TEXT NOT NULL CHECK (
|
|
293
|
+
json_valid(affected_activities_json) AND json_type(affected_activities_json) = 'array'
|
|
294
|
+
),
|
|
295
|
+
summary TEXT NOT NULL,
|
|
296
|
+
created_at TEXT NOT NULL
|
|
297
|
+
);
|
|
298
|
+
|
|
299
|
+
CREATE TABLE IF NOT EXISTS clarification_submit_replay_hints (
|
|
300
|
+
clarification_round_id TEXT PRIMARY KEY REFERENCES clarification_rounds(id) ON DELETE CASCADE,
|
|
301
|
+
clarification_thread_id TEXT NOT NULL REFERENCES clarification_threads(id),
|
|
302
|
+
accepted_command_id TEXT,
|
|
303
|
+
replay_attempt_count INTEGER NOT NULL DEFAULT 0 CHECK (replay_attempt_count >= 0),
|
|
304
|
+
last_replayed_at TEXT,
|
|
305
|
+
created_at TEXT NOT NULL,
|
|
306
|
+
updated_at TEXT NOT NULL
|
|
307
|
+
);
|
|
308
|
+
|
|
309
|
+
CREATE INDEX IF NOT EXISTS idx_clarification_submit_replay_hints_thread
|
|
310
|
+
ON clarification_submit_replay_hints (clarification_thread_id);
|
|
311
|
+
|
|
312
|
+
CREATE TRIGGER IF NOT EXISTS trg_messages_no_insert_into_sealed_round
|
|
313
|
+
BEFORE INSERT ON messages
|
|
314
|
+
WHEN NEW.scope_kind = 'clarification_round'
|
|
315
|
+
AND EXISTS (
|
|
316
|
+
SELECT 1
|
|
317
|
+
FROM clarification_rounds
|
|
318
|
+
WHERE id = NEW.clarification_round_id AND status = 'sealed'
|
|
319
|
+
)
|
|
320
|
+
BEGIN
|
|
321
|
+
SELECT RAISE(ABORT, 'cannot insert message into sealed clarification round');
|
|
322
|
+
END;
|
|
323
|
+
|
|
324
|
+
CREATE TRIGGER IF NOT EXISTS trg_messages_no_update_in_sealed_round
|
|
325
|
+
BEFORE UPDATE ON messages
|
|
326
|
+
WHEN OLD.scope_kind = 'clarification_round'
|
|
327
|
+
AND EXISTS (
|
|
328
|
+
SELECT 1
|
|
329
|
+
FROM clarification_rounds
|
|
330
|
+
WHERE id = OLD.clarification_round_id AND status = 'sealed'
|
|
331
|
+
)
|
|
332
|
+
BEGIN
|
|
333
|
+
SELECT RAISE(ABORT, 'cannot update message in sealed clarification round');
|
|
334
|
+
END;
|
|
335
|
+
|
|
336
|
+
CREATE TRIGGER IF NOT EXISTS trg_messages_no_delete_from_sealed_round
|
|
337
|
+
BEFORE DELETE ON messages
|
|
338
|
+
WHEN OLD.scope_kind = 'clarification_round'
|
|
339
|
+
AND EXISTS (
|
|
340
|
+
SELECT 1
|
|
341
|
+
FROM clarification_rounds
|
|
342
|
+
WHERE id = OLD.clarification_round_id AND status = 'sealed'
|
|
343
|
+
)
|
|
344
|
+
BEGIN
|
|
345
|
+
SELECT RAISE(ABORT, 'cannot delete message from sealed clarification round');
|
|
346
|
+
END;
|
|
347
|
+
|
|
348
|
+
CREATE TRIGGER IF NOT EXISTS trg_tasks_active_thread_matches_task_insert
|
|
349
|
+
BEFORE INSERT ON tasks
|
|
350
|
+
WHEN NEW.active_clarification_thread_id IS NOT NULL
|
|
351
|
+
AND NOT EXISTS (
|
|
352
|
+
SELECT 1
|
|
353
|
+
FROM clarification_threads
|
|
354
|
+
WHERE id = NEW.active_clarification_thread_id
|
|
355
|
+
AND owner_kind = 'task'
|
|
356
|
+
AND owner_task_id = NEW.id
|
|
357
|
+
AND status = 'active'
|
|
358
|
+
)
|
|
359
|
+
BEGIN
|
|
360
|
+
SELECT RAISE(ABORT, 'active clarification thread must be active and owned by the task');
|
|
361
|
+
END;
|
|
362
|
+
|
|
363
|
+
CREATE TRIGGER IF NOT EXISTS trg_tasks_active_thread_matches_task_update
|
|
364
|
+
BEFORE UPDATE OF active_clarification_thread_id ON tasks
|
|
365
|
+
WHEN NEW.active_clarification_thread_id IS NOT NULL
|
|
366
|
+
AND NOT EXISTS (
|
|
367
|
+
SELECT 1
|
|
368
|
+
FROM clarification_threads
|
|
369
|
+
WHERE id = NEW.active_clarification_thread_id
|
|
370
|
+
AND owner_kind = 'task'
|
|
371
|
+
AND owner_task_id = NEW.id
|
|
372
|
+
AND status = 'active'
|
|
373
|
+
)
|
|
374
|
+
BEGIN
|
|
375
|
+
SELECT RAISE(ABORT, 'active clarification thread must be active and owned by the task');
|
|
376
|
+
END;
|
|
377
|
+
|
|
378
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_threads_no_break_active_task_update
|
|
379
|
+
BEFORE UPDATE OF owner_kind, owner_task_id, status ON clarification_threads
|
|
380
|
+
WHEN EXISTS (
|
|
381
|
+
SELECT 1
|
|
382
|
+
FROM tasks
|
|
383
|
+
WHERE active_clarification_thread_id = OLD.id
|
|
384
|
+
)
|
|
385
|
+
AND NOT EXISTS (
|
|
386
|
+
SELECT 1
|
|
387
|
+
FROM tasks
|
|
388
|
+
WHERE active_clarification_thread_id = OLD.id
|
|
389
|
+
AND id = NEW.owner_task_id
|
|
390
|
+
AND status = 'pending'
|
|
391
|
+
AND NEW.owner_kind = 'task'
|
|
392
|
+
AND NEW.status = 'active'
|
|
393
|
+
)
|
|
394
|
+
BEGIN
|
|
395
|
+
SELECT RAISE(ABORT, 'cannot update clarification thread in a way that breaks an active pending task');
|
|
396
|
+
END;
|
|
397
|
+
|
|
398
|
+
CREATE TRIGGER IF NOT EXISTS trg_tasks_latest_run_result_matches_task_insert
|
|
399
|
+
BEFORE INSERT ON tasks
|
|
400
|
+
WHEN NEW.latest_run_result_id IS NOT NULL
|
|
401
|
+
AND NOT EXISTS (
|
|
402
|
+
SELECT 1
|
|
403
|
+
FROM run_results
|
|
404
|
+
WHERE id = NEW.latest_run_result_id AND task_id = NEW.id
|
|
405
|
+
)
|
|
406
|
+
BEGIN
|
|
407
|
+
SELECT RAISE(ABORT, 'latest run result must belong to the same task');
|
|
408
|
+
END;
|
|
409
|
+
|
|
410
|
+
CREATE TRIGGER IF NOT EXISTS trg_tasks_latest_run_result_matches_task_update
|
|
411
|
+
BEFORE UPDATE OF latest_run_result_id ON tasks
|
|
412
|
+
WHEN NEW.latest_run_result_id IS NOT NULL
|
|
413
|
+
AND NOT EXISTS (
|
|
414
|
+
SELECT 1
|
|
415
|
+
FROM run_results
|
|
416
|
+
WHERE id = NEW.latest_run_result_id AND task_id = NEW.id
|
|
417
|
+
)
|
|
418
|
+
BEGIN
|
|
419
|
+
SELECT RAISE(ABORT, 'latest run result must belong to the same task');
|
|
420
|
+
END;
|
|
421
|
+
|
|
422
|
+
CREATE TRIGGER IF NOT EXISTS trg_run_results_no_break_latest_task_update
|
|
423
|
+
BEFORE UPDATE OF task_id ON run_results
|
|
424
|
+
WHEN EXISTS (
|
|
425
|
+
SELECT 1
|
|
426
|
+
FROM tasks
|
|
427
|
+
WHERE latest_run_result_id = OLD.id
|
|
428
|
+
AND id != NEW.task_id
|
|
429
|
+
)
|
|
430
|
+
BEGIN
|
|
431
|
+
SELECT RAISE(ABORT, 'cannot move latest run result away from the task that references it');
|
|
432
|
+
END;
|
|
433
|
+
|
|
434
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_threads_current_round_matches_thread_insert
|
|
435
|
+
BEFORE INSERT ON clarification_threads
|
|
436
|
+
WHEN NEW.current_round_id IS NOT NULL
|
|
437
|
+
AND NOT EXISTS (
|
|
438
|
+
SELECT 1
|
|
439
|
+
FROM clarification_rounds
|
|
440
|
+
WHERE id = NEW.current_round_id AND clarification_thread_id = NEW.id
|
|
441
|
+
)
|
|
442
|
+
BEGIN
|
|
443
|
+
SELECT RAISE(ABORT, 'current round must belong to the same clarification thread');
|
|
444
|
+
END;
|
|
445
|
+
|
|
446
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_threads_current_round_matches_thread_update
|
|
447
|
+
BEFORE UPDATE OF current_round_id ON clarification_threads
|
|
448
|
+
WHEN NEW.current_round_id IS NOT NULL
|
|
449
|
+
AND NOT EXISTS (
|
|
450
|
+
SELECT 1
|
|
451
|
+
FROM clarification_rounds
|
|
452
|
+
WHERE id = NEW.current_round_id AND clarification_thread_id = NEW.id
|
|
453
|
+
)
|
|
454
|
+
BEGIN
|
|
455
|
+
SELECT RAISE(ABORT, 'current round must belong to the same clarification thread');
|
|
456
|
+
END;
|
|
457
|
+
|
|
458
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_rounds_no_break_current_thread_update
|
|
459
|
+
BEFORE UPDATE OF clarification_thread_id ON clarification_rounds
|
|
460
|
+
WHEN EXISTS (
|
|
461
|
+
SELECT 1
|
|
462
|
+
FROM clarification_threads
|
|
463
|
+
WHERE current_round_id = OLD.id
|
|
464
|
+
AND id != NEW.clarification_thread_id
|
|
465
|
+
)
|
|
466
|
+
BEGIN
|
|
467
|
+
SELECT RAISE(ABORT, 'cannot move a current clarification round to another thread');
|
|
468
|
+
END;
|
|
469
|
+
|
|
470
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_round_card_message_matches_insert
|
|
471
|
+
BEFORE INSERT ON clarification_rounds
|
|
472
|
+
WHEN NOT EXISTS (
|
|
473
|
+
SELECT 1
|
|
474
|
+
FROM messages
|
|
475
|
+
WHERE id = NEW.card_message_id
|
|
476
|
+
AND scope_kind = 'main_chat'
|
|
477
|
+
AND message_kind = 'clarification_card'
|
|
478
|
+
)
|
|
479
|
+
BEGIN
|
|
480
|
+
SELECT RAISE(ABORT, 'card message must be a main chat clarification card');
|
|
481
|
+
END;
|
|
482
|
+
|
|
483
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_round_card_message_matches_update
|
|
484
|
+
BEFORE UPDATE OF card_message_id ON clarification_rounds
|
|
485
|
+
WHEN NOT EXISTS (
|
|
486
|
+
SELECT 1
|
|
487
|
+
FROM messages
|
|
488
|
+
WHERE id = NEW.card_message_id
|
|
489
|
+
AND scope_kind = 'main_chat'
|
|
490
|
+
AND message_kind = 'clarification_card'
|
|
491
|
+
)
|
|
492
|
+
BEGIN
|
|
493
|
+
SELECT RAISE(ABORT, 'card message must be a main chat clarification card');
|
|
494
|
+
END;
|
|
495
|
+
|
|
496
|
+
CREATE TRIGGER IF NOT EXISTS trg_messages_no_break_card_message_update
|
|
497
|
+
BEFORE UPDATE OF scope_kind, message_kind ON messages
|
|
498
|
+
WHEN EXISTS (
|
|
499
|
+
SELECT 1
|
|
500
|
+
FROM clarification_rounds
|
|
501
|
+
WHERE card_message_id = OLD.id
|
|
502
|
+
)
|
|
503
|
+
AND NOT (
|
|
504
|
+
NEW.scope_kind = 'main_chat'
|
|
505
|
+
AND NEW.message_kind = 'clarification_card'
|
|
506
|
+
)
|
|
507
|
+
BEGIN
|
|
508
|
+
SELECT RAISE(ABORT, 'cannot update card message so it is no longer a main chat clarification card');
|
|
509
|
+
END;
|
|
510
|
+
|
|
511
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_round_opening_message_matches_insert
|
|
512
|
+
BEFORE INSERT ON clarification_rounds
|
|
513
|
+
WHEN NOT EXISTS (
|
|
514
|
+
SELECT 1
|
|
515
|
+
FROM messages
|
|
516
|
+
WHERE id = NEW.opening_message_id
|
|
517
|
+
AND scope_kind = 'clarification_round'
|
|
518
|
+
AND clarification_round_id = NEW.id
|
|
519
|
+
AND message_kind = 'clarification_request'
|
|
520
|
+
)
|
|
521
|
+
BEGIN
|
|
522
|
+
SELECT RAISE(ABORT, 'opening message must be a clarification request in the same round');
|
|
523
|
+
END;
|
|
524
|
+
|
|
525
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_round_opening_message_matches_update
|
|
526
|
+
BEFORE UPDATE OF opening_message_id ON clarification_rounds
|
|
527
|
+
WHEN NOT EXISTS (
|
|
528
|
+
SELECT 1
|
|
529
|
+
FROM messages
|
|
530
|
+
WHERE id = NEW.opening_message_id
|
|
531
|
+
AND scope_kind = 'clarification_round'
|
|
532
|
+
AND clarification_round_id = NEW.id
|
|
533
|
+
AND message_kind = 'clarification_request'
|
|
534
|
+
)
|
|
535
|
+
BEGIN
|
|
536
|
+
SELECT RAISE(ABORT, 'opening message must be a clarification request in the same round');
|
|
537
|
+
END;
|
|
538
|
+
|
|
539
|
+
CREATE TRIGGER IF NOT EXISTS trg_messages_no_break_opening_message_update
|
|
540
|
+
BEFORE UPDATE OF scope_kind, clarification_round_id, message_kind ON messages
|
|
541
|
+
WHEN EXISTS (
|
|
542
|
+
SELECT 1
|
|
543
|
+
FROM clarification_rounds
|
|
544
|
+
WHERE opening_message_id = OLD.id
|
|
545
|
+
AND (
|
|
546
|
+
NEW.scope_kind != 'clarification_round'
|
|
547
|
+
OR NEW.clarification_round_id != clarification_rounds.id
|
|
548
|
+
OR NEW.message_kind != 'clarification_request'
|
|
549
|
+
)
|
|
550
|
+
)
|
|
551
|
+
BEGIN
|
|
552
|
+
SELECT RAISE(ABORT, 'cannot update opening message so it is no longer a clarification request in the same round');
|
|
553
|
+
END;
|
|
554
|
+
|
|
555
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_round_no_mutate_sealed_fields
|
|
556
|
+
BEFORE UPDATE ON clarification_rounds
|
|
557
|
+
WHEN OLD.status = 'sealed'
|
|
558
|
+
AND (
|
|
559
|
+
NEW.clarification_thread_id IS NOT OLD.clarification_thread_id
|
|
560
|
+
OR NEW.round_index IS NOT OLD.round_index
|
|
561
|
+
OR NEW.status IS NOT OLD.status
|
|
562
|
+
OR NEW.request_payload_json IS NOT OLD.request_payload_json
|
|
563
|
+
OR NEW.card_message_id IS NOT OLD.card_message_id
|
|
564
|
+
OR NEW.opening_message_id IS NOT OLD.opening_message_id
|
|
565
|
+
OR NEW.submitted_at IS NOT OLD.submitted_at
|
|
566
|
+
OR NEW.submitted_message_refs_json IS NOT OLD.submitted_message_refs_json
|
|
567
|
+
OR NEW.submitted_interaction_response_id IS NOT OLD.submitted_interaction_response_id
|
|
568
|
+
OR NEW.created_at IS NOT OLD.created_at
|
|
569
|
+
)
|
|
570
|
+
BEGIN
|
|
571
|
+
SELECT RAISE(ABORT, 'cannot mutate sealed clarification round fields');
|
|
572
|
+
END;
|
|
573
|
+
|
|
574
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_round_successor_materialized_once
|
|
575
|
+
BEFORE UPDATE OF successor_status, successor_ref_json ON clarification_rounds
|
|
576
|
+
WHEN OLD.successor_status = 'materialized'
|
|
577
|
+
AND (
|
|
578
|
+
NEW.successor_status IS NOT OLD.successor_status
|
|
579
|
+
OR NEW.successor_ref_json IS NOT OLD.successor_ref_json
|
|
580
|
+
)
|
|
581
|
+
BEGIN
|
|
582
|
+
SELECT RAISE(ABORT, 'clarification successor is already materialized');
|
|
583
|
+
END;
|
|
584
|
+
|
|
585
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_response_requires_writable_round_insert
|
|
586
|
+
BEFORE INSERT ON clarification_interaction_responses
|
|
587
|
+
WHEN COALESCE(
|
|
588
|
+
(SELECT status FROM clarification_rounds WHERE id = NEW.clarification_round_id),
|
|
589
|
+
''
|
|
590
|
+
) != 'writable'
|
|
591
|
+
BEGIN
|
|
592
|
+
SELECT RAISE(ABORT, 'cannot record interaction response for non-writable round');
|
|
593
|
+
END;
|
|
594
|
+
|
|
595
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_response_round_id_immutable
|
|
596
|
+
BEFORE UPDATE OF clarification_round_id ON clarification_interaction_responses
|
|
597
|
+
WHEN NEW.clarification_round_id IS NOT OLD.clarification_round_id
|
|
598
|
+
BEGIN
|
|
599
|
+
SELECT RAISE(ABORT, 'cannot move interaction response to another round');
|
|
600
|
+
END;
|
|
601
|
+
|
|
602
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_response_requires_writable_round_update
|
|
603
|
+
BEFORE UPDATE ON clarification_interaction_responses
|
|
604
|
+
WHEN COALESCE(
|
|
605
|
+
(SELECT status FROM clarification_rounds WHERE id = NEW.clarification_round_id),
|
|
606
|
+
''
|
|
607
|
+
) != 'writable'
|
|
608
|
+
BEGIN
|
|
609
|
+
SELECT RAISE(ABORT, 'cannot update interaction response for non-writable round');
|
|
610
|
+
END;
|
|
611
|
+
|
|
612
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_response_requires_writable_round_delete
|
|
613
|
+
BEFORE DELETE ON clarification_interaction_responses
|
|
614
|
+
WHEN COALESCE(
|
|
615
|
+
(SELECT status FROM clarification_rounds WHERE id = OLD.clarification_round_id),
|
|
616
|
+
''
|
|
617
|
+
) != 'writable'
|
|
618
|
+
BEGIN
|
|
619
|
+
SELECT RAISE(ABORT, 'cannot delete interaction response for non-writable round');
|
|
620
|
+
END;
|
|
621
|
+
|
|
622
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_round_submitted_response_matches_round_insert
|
|
623
|
+
BEFORE INSERT ON clarification_rounds
|
|
624
|
+
WHEN NEW.submitted_interaction_response_id IS NOT NULL
|
|
625
|
+
AND NOT EXISTS (
|
|
626
|
+
SELECT 1
|
|
627
|
+
FROM clarification_interaction_responses
|
|
628
|
+
WHERE id = NEW.submitted_interaction_response_id
|
|
629
|
+
AND clarification_round_id = NEW.id
|
|
630
|
+
)
|
|
631
|
+
BEGIN
|
|
632
|
+
SELECT RAISE(ABORT, 'submitted interaction response must belong to the same round');
|
|
633
|
+
END;
|
|
634
|
+
|
|
635
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_submit_replay_hint_matches_round_insert
|
|
636
|
+
BEFORE INSERT ON clarification_submit_replay_hints
|
|
637
|
+
WHEN NOT EXISTS (
|
|
638
|
+
SELECT 1
|
|
639
|
+
FROM clarification_rounds
|
|
640
|
+
WHERE id = NEW.clarification_round_id
|
|
641
|
+
AND clarification_thread_id = NEW.clarification_thread_id
|
|
642
|
+
AND status = 'sealed'
|
|
643
|
+
AND successor_status = 'not_materialized'
|
|
644
|
+
)
|
|
645
|
+
BEGIN
|
|
646
|
+
SELECT RAISE(ABORT, 'replay hint must point to a sealed round without materialized successor');
|
|
647
|
+
END;
|
|
648
|
+
|
|
649
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_submit_replay_hint_matches_round_update
|
|
650
|
+
BEFORE UPDATE OF clarification_round_id, clarification_thread_id ON clarification_submit_replay_hints
|
|
651
|
+
WHEN NOT EXISTS (
|
|
652
|
+
SELECT 1
|
|
653
|
+
FROM clarification_rounds
|
|
654
|
+
WHERE id = NEW.clarification_round_id
|
|
655
|
+
AND clarification_thread_id = NEW.clarification_thread_id
|
|
656
|
+
AND status = 'sealed'
|
|
657
|
+
AND successor_status = 'not_materialized'
|
|
658
|
+
)
|
|
659
|
+
BEGIN
|
|
660
|
+
SELECT RAISE(ABORT, 'replay hint must point to a sealed round without materialized successor');
|
|
661
|
+
END;
|
|
662
|
+
|
|
663
|
+
CREATE TRIGGER IF NOT EXISTS trg_clarification_round_submitted_response_matches_round_update
|
|
664
|
+
BEFORE UPDATE OF submitted_interaction_response_id ON clarification_rounds
|
|
665
|
+
WHEN NEW.submitted_interaction_response_id IS NOT NULL
|
|
666
|
+
AND NOT EXISTS (
|
|
667
|
+
SELECT 1
|
|
668
|
+
FROM clarification_interaction_responses
|
|
669
|
+
WHERE id = NEW.submitted_interaction_response_id
|
|
670
|
+
AND clarification_round_id = NEW.id
|
|
671
|
+
)
|
|
672
|
+
BEGIN
|
|
673
|
+
SELECT RAISE(ABORT, 'submitted interaction response must belong to the same round');
|
|
674
|
+
END;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
DROP TRIGGER IF EXISTS trg_messages_no_insert_into_sealed_round;
|
|
2
|
+
|
|
3
|
+
CREATE TRIGGER IF NOT EXISTS trg_messages_no_insert_into_sealed_round
|
|
4
|
+
BEFORE INSERT ON messages
|
|
5
|
+
WHEN NEW.scope_kind = 'clarification_round'
|
|
6
|
+
AND NEW.message_kind != 'agent_text'
|
|
7
|
+
AND EXISTS (
|
|
8
|
+
SELECT 1
|
|
9
|
+
FROM clarification_rounds
|
|
10
|
+
WHERE id = NEW.clarification_round_id AND status = 'sealed'
|
|
11
|
+
)
|
|
12
|
+
BEGIN
|
|
13
|
+
SELECT RAISE(ABORT, 'cannot insert non-agent message into sealed clarification round');
|
|
14
|
+
END;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ALTER TABLE scratchpad DROP COLUMN source_message_refs_json;
|