@askdkc/kiokuko 0.1.17 → 0.1.19
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.ja.md +91 -112
- package/README.ko.md +90 -102
- package/README.md +103 -262
- package/README.zh-CN.md +88 -102
- package/dist/agent-file/atomic-write.d.ts +90 -3
- package/dist/agent-file/atomic-write.d.ts.map +1 -1
- package/dist/agent-file/atomic-write.js +990 -14
- package/dist/agent-file/atomic-write.js.map +1 -1
- package/dist/agent-file/managed-block.d.ts +12 -1
- package/dist/agent-file/managed-block.d.ts.map +1 -1
- package/dist/agent-file/managed-block.js +49 -4
- package/dist/agent-file/managed-block.js.map +1 -1
- package/dist/agent-file/render.d.ts +1 -1
- package/dist/agent-file/render.d.ts.map +1 -1
- package/dist/agent-file/render.js +10 -7
- package/dist/agent-file/render.js.map +1 -1
- package/dist/akinator/agent-task.d.ts +11 -22
- package/dist/akinator/agent-task.d.ts.map +1 -1
- package/dist/akinator/agent-task.js +454 -99
- package/dist/akinator/agent-task.js.map +1 -1
- package/dist/akinator/capabilities.d.ts +18 -6
- package/dist/akinator/capabilities.d.ts.map +1 -1
- package/dist/akinator/capabilities.js +72 -35
- package/dist/akinator/capabilities.js.map +1 -1
- package/dist/akinator/capability-binding.d.ts +11 -0
- package/dist/akinator/capability-binding.d.ts.map +1 -0
- package/dist/akinator/capability-binding.js +56 -0
- package/dist/akinator/capability-binding.js.map +1 -0
- package/dist/akinator/domain.js +2 -2
- package/dist/akinator/domain.js.map +1 -1
- package/dist/akinator/knowledge-path.d.ts.map +1 -1
- package/dist/akinator/knowledge-path.js +409 -39
- package/dist/akinator/knowledge-path.js.map +1 -1
- package/dist/akinator/orchestrator.d.ts +3 -4
- package/dist/akinator/orchestrator.d.ts.map +1 -1
- package/dist/akinator/orchestrator.js +1 -4
- package/dist/akinator/orchestrator.js.map +1 -1
- package/dist/akinator/service.d.ts +0 -4
- package/dist/akinator/service.d.ts.map +1 -1
- package/dist/akinator/service.js +19 -35
- package/dist/akinator/service.js.map +1 -1
- package/dist/akinator/skill-discovery-attempt.d.ts +20 -0
- package/dist/akinator/skill-discovery-attempt.d.ts.map +1 -0
- package/dist/akinator/skill-discovery-attempt.js +390 -0
- package/dist/akinator/skill-discovery-attempt.js.map +1 -0
- package/dist/akinator/store.d.ts.map +1 -1
- package/dist/akinator/store.js +107 -52
- package/dist/akinator/store.js.map +1 -1
- package/dist/akinator/types.d.ts +0 -12
- package/dist/akinator/types.d.ts.map +1 -1
- package/dist/bin/kiokuko.js +0 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +534 -148
- package/dist/cli.js.map +1 -1
- package/dist/client/server-client.d.ts +5 -3
- package/dist/client/server-client.d.ts.map +1 -1
- package/dist/client/server-client.js +486 -181
- package/dist/client/server-client.js.map +1 -1
- package/dist/commands/agent.d.ts +2 -0
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +861 -86
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/backup.d.ts +2 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +64 -8
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/doctor.d.ts +5 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +70 -26
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/export.d.ts +0 -4
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +191 -32
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/import.d.ts +10 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +592 -113
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts +19 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +569 -22
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/purge.d.ts.map +1 -1
- package/dist/commands/purge.js +3 -0
- package/dist/commands/purge.js.map +1 -1
- package/dist/commands/setup.d.ts +34 -8
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +418 -86
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/skills.d.ts +9 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +317 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/use.d.ts +10 -2
- package/dist/commands/use.d.ts.map +1 -1
- package/dist/commands/use.js +851 -73
- package/dist/commands/use.js.map +1 -1
- package/dist/config/paths.d.ts +11 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +64 -29
- package/dist/config/paths.js.map +1 -1
- package/dist/config/project-config.d.ts +1 -0
- package/dist/config/project-config.d.ts.map +1 -1
- package/dist/config/project-config.js +70 -32
- package/dist/config/project-config.js.map +1 -1
- package/dist/context/broker.d.ts +28 -14
- package/dist/context/broker.d.ts.map +1 -1
- package/dist/context/broker.js +604 -145
- package/dist/context/broker.js.map +1 -1
- package/dist/context/delivery.d.ts +6 -21
- package/dist/context/delivery.d.ts.map +1 -1
- package/dist/context/delivery.js +196 -147
- package/dist/context/delivery.js.map +1 -1
- package/dist/context/feedback.d.ts +11 -12
- package/dist/context/feedback.d.ts.map +1 -1
- package/dist/context/feedback.js +229 -261
- package/dist/context/feedback.js.map +1 -1
- package/dist/context/ranking.d.ts +1 -12
- package/dist/context/ranking.d.ts.map +1 -1
- package/dist/context/ranking.js +13 -4
- package/dist/context/ranking.js.map +1 -1
- package/dist/context/recommendations.d.ts +0 -5
- package/dist/context/recommendations.d.ts.map +1 -1
- package/dist/context/recommendations.js +0 -1
- package/dist/context/recommendations.js.map +1 -1
- package/dist/context/run-state.d.ts +26 -0
- package/dist/context/run-state.d.ts.map +1 -0
- package/dist/context/run-state.js +399 -0
- package/dist/context/run-state.js.map +1 -0
- package/dist/context/scoped-broker.d.ts +17 -5
- package/dist/context/scoped-broker.d.ts.map +1 -1
- package/dist/context/scoped-broker.js +512 -106
- package/dist/context/scoped-broker.js.map +1 -1
- package/dist/context/selection-state.d.ts +19 -0
- package/dist/context/selection-state.d.ts.map +1 -0
- package/dist/context/selection-state.js +250 -0
- package/dist/context/selection-state.js.map +1 -0
- package/dist/db/adapter.d.ts +5 -3
- package/dist/db/adapter.d.ts.map +1 -1
- package/dist/db/adapter.js +6 -3
- package/dist/db/adapter.js.map +1 -1
- package/dist/db/capabilities.d.ts.map +1 -1
- package/dist/db/capabilities.js +34 -16
- package/dist/db/capabilities.js.map +1 -1
- package/dist/db/connection.d.ts +8 -0
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +55 -26
- package/dist/db/connection.js.map +1 -1
- package/dist/db/migrate.d.ts +28 -7
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +106 -78
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/sqlite-retry.d.ts +11 -0
- package/dist/db/sqlite-retry.d.ts.map +1 -0
- package/dist/db/sqlite-retry.js +66 -0
- package/dist/db/sqlite-retry.js.map +1 -0
- package/dist/db/transaction.d.ts +13 -0
- package/dist/db/transaction.d.ts.map +1 -1
- package/dist/db/transaction.js +53 -24
- package/dist/db/transaction.js.map +1 -1
- package/dist/db/upgrade-backup.d.ts +58 -2
- package/dist/db/upgrade-backup.d.ts.map +1 -1
- package/dist/db/upgrade-backup.js +757 -28
- package/dist/db/upgrade-backup.js.map +1 -1
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/gateway/agent-service.d.ts +4 -1
- package/dist/gateway/agent-service.d.ts.map +1 -1
- package/dist/gateway/agent-service.js +71 -58
- package/dist/gateway/agent-service.js.map +1 -1
- package/dist/gateway/checkpoint-service.d.ts +1 -0
- package/dist/gateway/checkpoint-service.d.ts.map +1 -1
- package/dist/gateway/checkpoint-service.js +47 -24
- package/dist/gateway/checkpoint-service.js.map +1 -1
- package/dist/ledger/archive.d.ts +1 -4
- package/dist/ledger/archive.d.ts.map +1 -1
- package/dist/ledger/archive.js +77 -39
- package/dist/ledger/archive.js.map +1 -1
- package/dist/ledger/maintenance.d.ts +0 -11
- package/dist/ledger/maintenance.d.ts.map +1 -1
- package/dist/ledger/maintenance.js +24 -40
- package/dist/ledger/maintenance.js.map +1 -1
- package/dist/ledger/projection.d.ts +0 -1
- package/dist/ledger/projection.d.ts.map +1 -1
- package/dist/ledger/projection.js.map +1 -1
- package/dist/ledger/promotion.d.ts +0 -9
- package/dist/ledger/promotion.d.ts.map +1 -1
- package/dist/ledger/promotion.js.map +1 -1
- package/dist/ledger/query.d.ts +1 -15
- package/dist/ledger/query.d.ts.map +1 -1
- package/dist/ledger/query.js.map +1 -1
- package/dist/ledger/store.d.ts +0 -1
- package/dist/ledger/store.d.ts.map +1 -1
- package/dist/ledger/store.js +11 -8
- package/dist/ledger/store.js.map +1 -1
- package/dist/ledger/types.d.ts +0 -4
- package/dist/ledger/types.d.ts.map +1 -1
- package/dist/ledger/types.js.map +1 -1
- package/dist/ledger/validate.d.ts.map +1 -1
- package/dist/ledger/validate.js +0 -5
- package/dist/ledger/validate.js.map +1 -1
- package/dist/mcp/server.d.ts +4 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +105 -54
- package/dist/mcp/server.js.map +1 -1
- package/dist/memory/audit.d.ts +0 -1
- package/dist/memory/audit.d.ts.map +1 -1
- package/dist/memory/audit.js +0 -1
- package/dist/memory/audit.js.map +1 -1
- package/dist/memory/curator.d.ts.map +1 -1
- package/dist/memory/curator.js +172 -96
- package/dist/memory/curator.js.map +1 -1
- package/dist/memory/entries.d.ts +12 -2
- package/dist/memory/entries.d.ts.map +1 -1
- package/dist/memory/entries.js +198 -114
- package/dist/memory/entries.js.map +1 -1
- package/dist/memory/federated-retrieval.d.ts +12 -1
- package/dist/memory/federated-retrieval.d.ts.map +1 -1
- package/dist/memory/federated-retrieval.js +183 -70
- package/dist/memory/federated-retrieval.js.map +1 -1
- package/dist/memory/hybrid-retrieval.d.ts +5 -11
- package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
- package/dist/memory/hybrid-retrieval.js +78 -58
- package/dist/memory/hybrid-retrieval.js.map +1 -1
- package/dist/memory/lifecycle.d.ts.map +1 -1
- package/dist/memory/lifecycle.js +17 -13
- package/dist/memory/lifecycle.js.map +1 -1
- package/dist/memory/rebuild-search.d.ts +5 -0
- package/dist/memory/rebuild-search.d.ts.map +1 -1
- package/dist/memory/rebuild-search.js +101 -76
- package/dist/memory/rebuild-search.js.map +1 -1
- package/dist/memory/retrieval-query.d.ts +0 -5
- package/dist/memory/retrieval-query.d.ts.map +1 -1
- package/dist/memory/retrieval-query.js +0 -5
- package/dist/memory/retrieval-query.js.map +1 -1
- package/dist/memory/retrieval.d.ts.map +1 -1
- package/dist/memory/retrieval.js +25 -131
- package/dist/memory/retrieval.js.map +1 -1
- package/dist/memory/revisions.d.ts +76 -1
- package/dist/memory/revisions.d.ts.map +1 -1
- package/dist/memory/revisions.js +539 -35
- package/dist/memory/revisions.js.map +1 -1
- package/dist/memory/scoped-memory.d.ts +16 -1
- package/dist/memory/scoped-memory.d.ts.map +1 -1
- package/dist/memory/scoped-memory.js +240 -107
- package/dist/memory/scoped-memory.js.map +1 -1
- package/dist/memory/secrets.d.ts +2 -0
- package/dist/memory/secrets.d.ts.map +1 -1
- package/dist/memory/secrets.js +36 -0
- package/dist/memory/secrets.js.map +1 -1
- package/dist/memory/structured-memory.d.ts +3 -2
- package/dist/memory/structured-memory.d.ts.map +1 -1
- package/dist/memory/structured-memory.js +54 -22
- package/dist/memory/structured-memory.js.map +1 -1
- package/dist/memory/workspaces.d.ts +9 -0
- package/dist/memory/workspaces.d.ts.map +1 -1
- package/dist/memory/workspaces.js +67 -0
- package/dist/memory/workspaces.js.map +1 -1
- package/dist/package-version.d.ts +2 -0
- package/dist/package-version.d.ts.map +1 -0
- package/dist/package-version.js +7 -0
- package/dist/package-version.js.map +1 -0
- package/dist/repository/binding.d.ts +5 -0
- package/dist/repository/binding.d.ts.map +1 -1
- package/dist/repository/binding.js +117 -17
- package/dist/repository/binding.js.map +1 -1
- package/dist/repository/framework-version.d.ts +8 -0
- package/dist/repository/framework-version.d.ts.map +1 -0
- package/dist/repository/framework-version.js +29 -0
- package/dist/repository/framework-version.js.map +1 -0
- package/dist/repository/identity-value.d.ts +4 -0
- package/dist/repository/identity-value.d.ts.map +1 -0
- package/dist/repository/identity-value.js +24 -0
- package/dist/repository/identity-value.js.map +1 -0
- package/dist/repository/identity.d.ts.map +1 -1
- package/dist/repository/identity.js +2 -0
- package/dist/repository/identity.js.map +1 -1
- package/dist/repository/project-fingerprint.d.ts +14 -2
- package/dist/repository/project-fingerprint.d.ts.map +1 -1
- package/dist/repository/project-fingerprint.js +312 -33
- package/dist/repository/project-fingerprint.js.map +1 -1
- package/dist/repository/remote-url.d.ts +0 -1
- package/dist/repository/remote-url.d.ts.map +1 -1
- package/dist/repository/remote-url.js +0 -1
- package/dist/repository/remote-url.js.map +1 -1
- package/dist/runtime-version.d.ts +2 -1
- package/dist/runtime-version.d.ts.map +1 -1
- package/dist/runtime-version.js +21 -4
- package/dist/runtime-version.js.map +1 -1
- package/dist/serialization/boundary-json.d.ts +20 -0
- package/dist/serialization/boundary-json.d.ts.map +1 -0
- package/dist/serialization/boundary-json.js +129 -0
- package/dist/serialization/boundary-json.js.map +1 -0
- package/dist/serialization/envelope.js +1 -1
- package/dist/serialization/envelope.js.map +1 -1
- package/dist/serialization/validate.d.ts +7 -0
- package/dist/serialization/validate.d.ts.map +1 -1
- package/dist/serialization/validate.js +53 -13
- package/dist/serialization/validate.js.map +1 -1
- package/dist/server/app.js +1 -1
- package/dist/server/app.js.map +1 -1
- package/dist/server/http.d.ts +4 -3
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +90 -50
- package/dist/server/http.js.map +1 -1
- package/dist/server/idempotency.d.ts +0 -6
- package/dist/server/idempotency.d.ts.map +1 -1
- package/dist/server/idempotency.js.map +1 -1
- package/dist/server/router.d.ts.map +1 -1
- package/dist/server/router.js +21 -4
- package/dist/server/router.js.map +1 -1
- package/dist/server/routes/agent-capability-gate.d.ts +40 -0
- package/dist/server/routes/agent-capability-gate.d.ts.map +1 -0
- package/dist/server/routes/agent-capability-gate.js +182 -0
- package/dist/server/routes/agent-capability-gate.js.map +1 -0
- package/dist/server/routes/agent-events.d.ts.map +1 -1
- package/dist/server/routes/agent-events.js +8 -1
- package/dist/server/routes/agent-events.js.map +1 -1
- package/dist/server/routes/agent-intake.d.ts.map +1 -1
- package/dist/server/routes/agent-intake.js +10 -2
- package/dist/server/routes/agent-intake.js.map +1 -1
- package/dist/server/routes/agent-promotions.d.ts.map +1 -1
- package/dist/server/routes/agent-promotions.js +5 -2
- package/dist/server/routes/agent-promotions.js.map +1 -1
- package/dist/server/routes/agent-runs.d.ts.map +1 -1
- package/dist/server/routes/agent-runs.js +18 -4
- package/dist/server/routes/agent-runs.js.map +1 -1
- package/dist/server/routes/request-binding.d.ts +5 -0
- package/dist/server/routes/request-binding.d.ts.map +1 -0
- package/dist/server/routes/request-binding.js +49 -0
- package/dist/server/routes/request-binding.js.map +1 -0
- package/dist/server/routes/task5-support.d.ts +1 -8
- package/dist/server/routes/task5-support.d.ts.map +1 -1
- package/dist/server/routes/task5-support.js +1 -17
- package/dist/server/routes/task5-support.js.map +1 -1
- package/dist/server/routes/task5.d.ts.map +1 -1
- package/dist/server/routes/task5.js +106 -36
- package/dist/server/routes/task5.js.map +1 -1
- package/dist/server/write-queue.js +2 -2
- package/dist/server/write-queue.js.map +1 -1
- package/dist/setup/claude-config.d.ts +2 -1
- package/dist/setup/claude-config.d.ts.map +1 -1
- package/dist/setup/claude-config.js +54 -4
- package/dist/setup/claude-config.js.map +1 -1
- package/dist/setup/client-detection.d.ts +7 -2
- package/dist/setup/client-detection.d.ts.map +1 -1
- package/dist/setup/client-detection.js +27 -9
- package/dist/setup/client-detection.js.map +1 -1
- package/dist/setup/hermes-config.d.ts +2 -1
- package/dist/setup/hermes-config.d.ts.map +1 -1
- package/dist/setup/hermes-config.js +53 -12
- package/dist/setup/hermes-config.js.map +1 -1
- package/dist/setup/legacy-client-cleanup.d.ts +6 -0
- package/dist/setup/legacy-client-cleanup.d.ts.map +1 -0
- package/dist/setup/legacy-client-cleanup.js +152 -0
- package/dist/setup/legacy-client-cleanup.js.map +1 -0
- package/dist/setup/managed-text.d.ts.map +1 -1
- package/dist/setup/managed-text.js +11 -1
- package/dist/setup/managed-text.js.map +1 -1
- package/dist/setup/opencode-config.d.ts +2 -1
- package/dist/setup/opencode-config.d.ts.map +1 -1
- package/dist/setup/opencode-config.js +57 -5
- package/dist/setup/opencode-config.js.map +1 -1
- package/dist/setup/render.d.ts +2 -1
- package/dist/setup/render.d.ts.map +1 -1
- package/dist/setup/render.js +91 -17
- package/dist/setup/render.js.map +1 -1
- package/dist/setup/standard-skills.d.ts +16 -2
- package/dist/setup/standard-skills.d.ts.map +1 -1
- package/dist/setup/standard-skills.js +37 -13
- package/dist/setup/standard-skills.js.map +1 -1
- package/dist/setup/strict-json.d.ts +7 -0
- package/dist/setup/strict-json.d.ts.map +1 -0
- package/dist/setup/strict-json.js +98 -0
- package/dist/setup/strict-json.js.map +1 -0
- package/dist/setup/strict-toml.d.ts +7 -0
- package/dist/setup/strict-toml.d.ts.map +1 -0
- package/dist/setup/strict-toml.js +470 -0
- package/dist/setup/strict-toml.js.map +1 -0
- package/dist/skills/cache.d.ts +15 -0
- package/dist/skills/cache.d.ts.map +1 -0
- package/dist/skills/cache.js +19 -0
- package/dist/skills/cache.js.map +1 -0
- package/dist/skills/candidate-ranking.d.ts +15 -0
- package/dist/skills/candidate-ranking.d.ts.map +1 -0
- package/dist/skills/candidate-ranking.js +52 -0
- package/dist/skills/candidate-ranking.js.map +1 -0
- package/dist/skills/chunking.d.ts +11 -0
- package/dist/skills/chunking.d.ts.map +1 -0
- package/dist/skills/chunking.js +291 -0
- package/dist/skills/chunking.js.map +1 -0
- package/dist/skills/config.d.ts +19 -0
- package/dist/skills/config.d.ts.map +1 -0
- package/dist/skills/config.js +103 -0
- package/dist/skills/config.js.map +1 -0
- package/dist/skills/discovery-service.d.ts +26 -0
- package/dist/skills/discovery-service.d.ts.map +1 -0
- package/dist/skills/discovery-service.js +921 -0
- package/dist/skills/discovery-service.js.map +1 -0
- package/dist/skills/external-transport.d.ts +2 -0
- package/dist/skills/external-transport.d.ts.map +1 -0
- package/dist/skills/external-transport.js +30 -0
- package/dist/skills/external-transport.js.map +1 -0
- package/dist/skills/find.d.ts +16 -0
- package/dist/skills/find.d.ts.map +1 -0
- package/dist/skills/find.js +58 -0
- package/dist/skills/find.js.map +1 -0
- package/dist/skills/gap-detection.d.ts +23 -0
- package/dist/skills/gap-detection.d.ts.map +1 -0
- package/dist/skills/gap-detection.js +62 -0
- package/dist/skills/gap-detection.js.map +1 -0
- package/dist/skills/import-preparation.d.ts +4 -0
- package/dist/skills/import-preparation.d.ts.map +1 -0
- package/dist/skills/import-preparation.js +20 -0
- package/dist/skills/import-preparation.js.map +1 -0
- package/dist/skills/materialization-authority.d.ts +11 -0
- package/dist/skills/materialization-authority.d.ts.map +1 -0
- package/dist/skills/materialization-authority.js +92 -0
- package/dist/skills/materialization-authority.js.map +1 -0
- package/dist/skills/materialization-service.d.ts +22 -0
- package/dist/skills/materialization-service.d.ts.map +1 -0
- package/dist/skills/materialization-service.js +101 -0
- package/dist/skills/materialization-service.js.map +1 -0
- package/dist/skills/official-catalog.d.ts +31 -0
- package/dist/skills/official-catalog.d.ts.map +1 -0
- package/dist/skills/official-catalog.js +110 -0
- package/dist/skills/official-catalog.js.map +1 -0
- package/dist/skills/providers/schema.d.ts +30 -0
- package/dist/skills/providers/schema.d.ts.map +1 -0
- package/dist/skills/providers/schema.js +354 -0
- package/dist/skills/providers/schema.js.map +1 -0
- package/dist/skills/providers/skills-sh-compat.d.ts +17 -0
- package/dist/skills/providers/skills-sh-compat.d.ts.map +1 -0
- package/dist/skills/providers/skills-sh-compat.js +71 -0
- package/dist/skills/providers/skills-sh-compat.js.map +1 -0
- package/dist/skills/providers/skills-sh-v1.d.ts +23 -0
- package/dist/skills/providers/skills-sh-v1.d.ts.map +1 -0
- package/dist/skills/providers/skills-sh-v1.js +134 -0
- package/dist/skills/providers/skills-sh-v1.js.map +1 -0
- package/dist/skills/query-builder.d.ts +18 -0
- package/dist/skills/query-builder.d.ts.map +1 -0
- package/dist/skills/query-builder.js +93 -0
- package/dist/skills/query-builder.js.map +1 -0
- package/dist/skills/source/errors.d.ts +9 -0
- package/dist/skills/source/errors.d.ts.map +1 -0
- package/dist/skills/source/errors.js +15 -0
- package/dist/skills/source/errors.js.map +1 -0
- package/dist/skills/source/frontmatter.d.ts +9 -0
- package/dist/skills/source/frontmatter.d.ts.map +1 -0
- package/dist/skills/source/frontmatter.js +77 -0
- package/dist/skills/source/frontmatter.js.map +1 -0
- package/dist/skills/source/github-fetcher.d.ts +20 -0
- package/dist/skills/source/github-fetcher.d.ts.map +1 -0
- package/dist/skills/source/github-fetcher.js +292 -0
- package/dist/skills/source/github-fetcher.js.map +1 -0
- package/dist/skills/source/snapshot-validator.d.ts +28 -0
- package/dist/skills/source/snapshot-validator.d.ts.map +1 -0
- package/dist/skills/source/snapshot-validator.js +186 -0
- package/dist/skills/source/snapshot-validator.js.map +1 -0
- package/dist/skills/store.d.ts +181 -0
- package/dist/skills/store.d.ts.map +1 -0
- package/dist/skills/store.js +1710 -0
- package/dist/skills/store.js.map +1 -0
- package/dist/skills/types.d.ts +169 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +2 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/web/i18n.d.ts +32 -0
- package/dist/web/i18n.d.ts.map +1 -1
- package/dist/web/i18n.js +128 -0
- package/dist/web/i18n.js.map +1 -1
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +386 -38
- package/dist/web/server.js.map +1 -1
- package/dist/web/ui.d.ts +4 -0
- package/dist/web/ui.d.ts.map +1 -1
- package/dist/web/ui.js +382 -6
- package/dist/web/ui.js.map +1 -1
- package/migrations/009_external_skill_discovery.sql +126 -0
- package/package.json +4 -3
- package/skills/kiokuko-single-purpose-functions/SKILL.md +288 -0
- package/skills/kiokuko-single-purpose-functions/references/kiokuko-patterns.md +344 -0
- package/skills/kiokuko-single-purpose-functions/references/review-checklist.md +97 -0
- package/skills/kiokuko-ui-design-soul/SKILL.md +1186 -28
- package/templates/AGENTS.md +8 -7
- package/dist/client/runtime-discovery.d.ts +0 -15
- package/dist/client/runtime-discovery.d.ts.map +0 -1
- package/dist/client/runtime-discovery.js +0 -45
- package/dist/client/runtime-discovery.js.map +0 -1
- package/dist/commands/call.d.ts +0 -7
- package/dist/commands/call.d.ts.map +0 -1
- package/dist/commands/call.js +0 -10
- package/dist/commands/call.js.map +0 -1
- package/dist/commands/link.d.ts +0 -6
- package/dist/commands/link.d.ts.map +0 -1
- package/dist/commands/link.js +0 -6
- package/dist/commands/link.js.map +0 -1
- package/dist/commands/promote.d.ts +0 -6
- package/dist/commands/promote.d.ts.map +0 -1
- package/dist/commands/promote.js +0 -6
- package/dist/commands/promote.js.map +0 -1
- package/dist/commands/read.d.ts +0 -6
- package/dist/commands/read.d.ts.map +0 -1
- package/dist/commands/read.js +0 -4
- package/dist/commands/read.js.map +0 -1
- package/dist/commands/recall.d.ts +0 -6
- package/dist/commands/recall.d.ts.map +0 -1
- package/dist/commands/recall.js +0 -4
- package/dist/commands/recall.js.map +0 -1
- package/dist/commands/record.d.ts +0 -6
- package/dist/commands/record.d.ts.map +0 -1
- package/dist/commands/record.js +0 -4
- package/dist/commands/record.js.map +0 -1
- package/dist/commands/search.d.ts +0 -6
- package/dist/commands/search.d.ts.map +0 -1
- package/dist/commands/search.js +0 -4
- package/dist/commands/search.js.map +0 -1
- package/dist/commands/supersede.d.ts +0 -6
- package/dist/commands/supersede.d.ts.map +0 -1
- package/dist/commands/supersede.js +0 -6
- package/dist/commands/supersede.js.map +0 -1
- package/dist/knowledge/sources.d.ts +0 -72
- package/dist/knowledge/sources.d.ts.map +0 -1
- package/dist/knowledge/sources.js +0 -388
- package/dist/knowledge/sources.js.map +0 -1
- package/dist/setup/opencode-evidence.d.ts +0 -37
- package/dist/setup/opencode-evidence.d.ts.map +0 -1
- package/dist/setup/opencode-evidence.js +0 -58
- package/dist/setup/opencode-evidence.js.map +0 -1
- package/dist/setup/opencode-loop-guard.d.ts +0 -9
- package/dist/setup/opencode-loop-guard.d.ts.map +0 -1
- package/dist/setup/opencode-loop-guard.js +0 -248
- package/dist/setup/opencode-loop-guard.js.map +0 -1
package/dist/context/delivery.js
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
import { withImmediateTransaction } from '../db/transaction.js';
|
|
2
2
|
import { KiokukoError } from '../errors.js';
|
|
3
|
-
import { CONTEXT_RANKING_COMPONENTS, CONTEXT_RANKING_COMPONENTS_V2, CONTEXT_SELECTION_REASON_ORDER, } from './ranking.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { CONTEXT_RANKING_VERSION, CONTEXT_RANKING_COMPONENTS, CONTEXT_RANKING_COMPONENTS_V2, CONTEXT_SELECTION_REASON_ORDER, } from './ranking.js';
|
|
4
|
+
import { canonicalContentHash, canonicalJson } from '../serialization/validate.js';
|
|
5
|
+
import { effectiveRetrievalScope, hasExplicitApplicability, } from '../memory/structured-memory.js';
|
|
6
|
+
import { readEntry } from '../memory/entries.js';
|
|
7
|
+
import { isRetrievableEntry } from '../memory/hybrid-retrieval.js';
|
|
6
8
|
import { entryOriginMatchesWorkspace, isContextEntryOrigin } from './origin.js';
|
|
9
|
+
import { RUN_STATUSES } from '../ledger/types.js';
|
|
10
|
+
import { RECOMMENDATION_POLICY_VERSION } from './recommendations.js';
|
|
11
|
+
import { readContextRunProfileBinding } from './run-state.js';
|
|
7
12
|
const MAX_IDENTIFIER_BYTES = 256;
|
|
8
13
|
const MAX_ITEMS = 100;
|
|
9
14
|
const MAX_SCORE_COMPONENT = 1_000_000;
|
|
10
15
|
const MAX_CHAR_BUDGET = 100_000;
|
|
11
|
-
const MAX_EXTERNAL_SUMMARY_BYTES = 16 * 1024;
|
|
12
|
-
const MAX_EXTERNAL_ERROR_BYTES = 1024;
|
|
13
|
-
const MAX_SOURCES = 16;
|
|
14
16
|
const MAX_LIMIT = 100;
|
|
15
17
|
const DEFAULT_LIMIT = 100;
|
|
16
18
|
const DELIVERY_CURSOR_VERSION = 1;
|
|
19
|
+
// The persisted score schema is the mode discriminant: v1 is the generic
|
|
20
|
+
// broker contract and v2 is the scoped broker contract.
|
|
21
|
+
const GENERIC_DELIVERY_POLICY_VERSION = `${CONTEXT_RANKING_VERSION}+${RECOMMENDATION_POLICY_VERSION}`;
|
|
22
|
+
const SCOPED_DELIVERY_POLICY_VERSION = 'context-ranking-v4';
|
|
17
23
|
const VALIDATION_MESSAGE = 'Context delivery input is invalid';
|
|
18
24
|
const NOT_FOUND_MESSAGE = 'Context delivery target was not found';
|
|
19
25
|
const CONFLICT_MESSAGE = 'Context delivery conflicts with existing record';
|
|
@@ -37,15 +43,47 @@ function databaseFailure() {
|
|
|
37
43
|
function integrity() {
|
|
38
44
|
return fail('INTEGRITY_ERROR', INTEGRITY_MESSAGE);
|
|
39
45
|
}
|
|
46
|
+
function scopedIdentityIntegrity() {
|
|
47
|
+
return fail('INTEGRITY_ERROR', 'Stored scoped context character accounting is invalid');
|
|
48
|
+
}
|
|
40
49
|
function isKiokukoError(error) {
|
|
41
50
|
return error instanceof KiokukoError;
|
|
42
51
|
}
|
|
43
|
-
|
|
52
|
+
const SQLITE_CONSTRAINT_PRIMARY_KEY = 1_555;
|
|
53
|
+
const SQLITE_CONSTRAINT_UNIQUE = 2_067;
|
|
54
|
+
const NO_UNIQUENESS_FAILURES = new Set();
|
|
55
|
+
const SQLITE_OPERATIONAL_PRIMARY_CODES = new Set([5, 6, 7, 8, 9, 10, 13, 14, 15, 22, 23]);
|
|
56
|
+
const SQLITE_INTEGRITY_PRIMARY_CODES = new Set([11, 24, 26]);
|
|
57
|
+
const DELIVERY_UNIQUENESS_FAILURES = new Set([
|
|
58
|
+
'UNIQUE constraint failed: context_deliveries.delivery_id',
|
|
59
|
+
'UNIQUE constraint failed: context_delivery_entries.delivery_id, context_delivery_entries.entry_id',
|
|
60
|
+
]);
|
|
61
|
+
function nodeSqliteFailure(error) {
|
|
62
|
+
if (!(error instanceof Error))
|
|
63
|
+
return null;
|
|
64
|
+
const failure = error;
|
|
65
|
+
if (failure.code !== 'ERR_SQLITE_ERROR'
|
|
66
|
+
|| typeof failure.errcode !== 'number'
|
|
67
|
+
|| !Number.isSafeInteger(failure.errcode)
|
|
68
|
+
|| failure.errcode < 0)
|
|
69
|
+
return null;
|
|
70
|
+
return failure;
|
|
71
|
+
}
|
|
72
|
+
function normalizeDatabaseError(error, uniquenessFailures = NO_UNIQUENESS_FAILURES) {
|
|
44
73
|
if (isKiokukoError(error))
|
|
45
74
|
throw error;
|
|
46
|
-
|
|
75
|
+
const failure = nodeSqliteFailure(error);
|
|
76
|
+
if (failure === null)
|
|
77
|
+
throw error;
|
|
78
|
+
if ((failure.errcode === SQLITE_CONSTRAINT_PRIMARY_KEY || failure.errcode === SQLITE_CONSTRAINT_UNIQUE)
|
|
79
|
+
&& uniquenessFailures.has(failure.message))
|
|
47
80
|
conflict();
|
|
48
|
-
|
|
81
|
+
const primaryResultCode = failure.errcode & 0xff;
|
|
82
|
+
if (SQLITE_INTEGRITY_PRIMARY_CODES.has(primaryResultCode))
|
|
83
|
+
integrity();
|
|
84
|
+
if (SQLITE_OPERATIONAL_PRIMARY_CODES.has(primaryResultCode))
|
|
85
|
+
databaseFailure();
|
|
86
|
+
throw error;
|
|
49
87
|
}
|
|
50
88
|
function isPlainObject(value) {
|
|
51
89
|
try {
|
|
@@ -157,6 +195,14 @@ function positiveSafeInteger(value) {
|
|
|
157
195
|
validation();
|
|
158
196
|
return value;
|
|
159
197
|
}
|
|
198
|
+
function validatedScoreSchemaVersion(value, onInvalid) {
|
|
199
|
+
if (typeof value !== 'number' || !Number.isSafeInteger(value) || (value !== 1 && value !== 2))
|
|
200
|
+
onInvalid();
|
|
201
|
+
return value;
|
|
202
|
+
}
|
|
203
|
+
function deliveryPolicyVersion(version) {
|
|
204
|
+
return version === 1 ? GENERIC_DELIVERY_POLICY_VERSION : SCOPED_DELIVERY_POLICY_VERSION;
|
|
205
|
+
}
|
|
160
206
|
function storedNonNegativeSafeInteger(value) {
|
|
161
207
|
if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0)
|
|
162
208
|
integrity();
|
|
@@ -277,74 +323,14 @@ function validateDeliveryItems(value, scoreSchemaVersion) {
|
|
|
277
323
|
};
|
|
278
324
|
});
|
|
279
325
|
}
|
|
280
|
-
function sanitizeExternalError(value, workspace) {
|
|
281
|
-
if (typeof value !== 'string' || value.length === 0)
|
|
282
|
-
validation();
|
|
283
|
-
let sanitized;
|
|
284
|
-
try {
|
|
285
|
-
sanitized = sanitizeJson({ error: value }, { workspace }).value;
|
|
286
|
-
}
|
|
287
|
-
catch {
|
|
288
|
-
validation();
|
|
289
|
-
}
|
|
290
|
-
if (!isPlainObject(sanitized))
|
|
291
|
-
validation();
|
|
292
|
-
const error = readField(sanitized, 'error');
|
|
293
|
-
if (typeof error !== 'string' || error.length === 0 || Buffer.byteLength(error, 'utf8') > MAX_EXTERNAL_ERROR_BYTES)
|
|
294
|
-
validation();
|
|
295
|
-
return error;
|
|
296
|
-
}
|
|
297
|
-
function validateExternalSummary(value, workspace) {
|
|
298
|
-
const object = objectInput(value, ['attempted', 'imported', 'sources'], true);
|
|
299
|
-
const attempted = booleanValue(readField(object, 'attempted'));
|
|
300
|
-
const imported = nonNegativeSafeInteger(readField(object, 'imported'));
|
|
301
|
-
const sourceArray = arrayInput(readField(object, 'sources'));
|
|
302
|
-
if (sourceArray.length > MAX_SOURCES)
|
|
303
|
-
validation();
|
|
304
|
-
const sourceIds = new Set();
|
|
305
|
-
const sources = sourceArray.map((source) => {
|
|
306
|
-
const sourceObject = objectInput(source, ['sourceId', 'commit', 'documents', 'imported', 'error'], false);
|
|
307
|
-
for (const field of ['sourceId', 'commit', 'documents', 'imported']) {
|
|
308
|
-
if (!hasOwn(sourceObject, field))
|
|
309
|
-
validation();
|
|
310
|
-
}
|
|
311
|
-
const sourceId = boundedIdentifier(readField(sourceObject, 'sourceId'));
|
|
312
|
-
if (sourceIds.has(sourceId))
|
|
313
|
-
validation();
|
|
314
|
-
sourceIds.add(sourceId);
|
|
315
|
-
const rawCommit = readField(sourceObject, 'commit');
|
|
316
|
-
const commit = rawCommit === null
|
|
317
|
-
? null
|
|
318
|
-
: typeof rawCommit === 'string' && rawCommit.length > 0 && /^[0-9a-f]+$/u.test(rawCommit) && Buffer.byteLength(rawCommit, 'utf8') <= MAX_IDENTIFIER_BYTES
|
|
319
|
-
? rawCommit
|
|
320
|
-
: validation();
|
|
321
|
-
const documents = nonNegativeSafeInteger(readField(sourceObject, 'documents'));
|
|
322
|
-
const sourceImported = nonNegativeSafeInteger(readField(sourceObject, 'imported'));
|
|
323
|
-
if (sourceImported > documents)
|
|
324
|
-
validation();
|
|
325
|
-
const result = { sourceId, commit, documents, imported: sourceImported };
|
|
326
|
-
if (hasOwn(sourceObject, 'error'))
|
|
327
|
-
result.error = sanitizeExternalError(readField(sourceObject, 'error'), workspace);
|
|
328
|
-
return result;
|
|
329
|
-
});
|
|
330
|
-
if (!attempted && (imported !== 0 || sources.length !== 0))
|
|
331
|
-
validation();
|
|
332
|
-
const sourceTotal = sources.reduce((total, source) => total + source.imported, 0);
|
|
333
|
-
if (imported !== sourceTotal)
|
|
334
|
-
validation();
|
|
335
|
-
const summary = { attempted, imported, sources };
|
|
336
|
-
if (Buffer.byteLength(canonicalJson(summary), 'utf8') > MAX_EXTERNAL_SUMMARY_BYTES)
|
|
337
|
-
validation();
|
|
338
|
-
return summary;
|
|
339
|
-
}
|
|
340
326
|
function validateContextDeliveryInput(value) {
|
|
341
327
|
try {
|
|
342
328
|
const object = objectInput(value, [
|
|
343
329
|
'workspace', 'deliveryId', 'runId', 'throughSequence', 'intakeSessionId', 'taskProfileHash',
|
|
344
|
-
'queryHash', 'policyVersion', '
|
|
330
|
+
'queryHash', 'policyVersion', 'charBudget', 'charCount', 'truncated',
|
|
345
331
|
'createdAt', 'items', 'scoreSchemaVersion',
|
|
346
332
|
], false);
|
|
347
|
-
for (const field of ['workspace', 'deliveryId', 'runId', 'throughSequence', 'intakeSessionId', 'taskProfileHash', 'queryHash', 'policyVersion', '
|
|
333
|
+
for (const field of ['workspace', 'deliveryId', 'runId', 'throughSequence', 'intakeSessionId', 'taskProfileHash', 'queryHash', 'policyVersion', 'charBudget', 'charCount', 'truncated', 'createdAt', 'items']) {
|
|
348
334
|
if (!hasOwn(object, field))
|
|
349
335
|
validation();
|
|
350
336
|
}
|
|
@@ -357,7 +343,6 @@ function validateContextDeliveryInput(value) {
|
|
|
357
343
|
const taskProfileHash = hash(readField(object, 'taskProfileHash'));
|
|
358
344
|
const queryHash = hash(readField(object, 'queryHash'));
|
|
359
345
|
const policyVersion = boundedIdentifier(readField(object, 'policyVersion'));
|
|
360
|
-
const externalSyncSummary = validateExternalSummary(readField(object, 'externalSyncSummary'), workspace);
|
|
361
346
|
const charBudget = readField(object, 'charBudget');
|
|
362
347
|
if (typeof charBudget !== 'number' || !Number.isSafeInteger(charBudget) || charBudget < 1 || charBudget > MAX_CHAR_BUDGET)
|
|
363
348
|
validation();
|
|
@@ -366,8 +351,10 @@ function validateContextDeliveryInput(value) {
|
|
|
366
351
|
validation();
|
|
367
352
|
const truncated = booleanValue(readField(object, 'truncated'));
|
|
368
353
|
const createdAt = timestamp(readField(object, 'createdAt'));
|
|
369
|
-
const
|
|
370
|
-
|
|
354
|
+
const parsedScoreSchemaVersion = validatedScoreSchemaVersion(object.scoreSchemaVersion === undefined ? 1 : object.scoreSchemaVersion, validation);
|
|
355
|
+
if (policyVersion !== deliveryPolicyVersion(parsedScoreSchemaVersion))
|
|
356
|
+
validation();
|
|
357
|
+
const items = validateDeliveryItems(readField(object, 'items'), parsedScoreSchemaVersion);
|
|
371
358
|
return {
|
|
372
359
|
workspace,
|
|
373
360
|
deliveryId,
|
|
@@ -377,13 +364,12 @@ function validateContextDeliveryInput(value) {
|
|
|
377
364
|
taskProfileHash,
|
|
378
365
|
queryHash,
|
|
379
366
|
policyVersion,
|
|
380
|
-
externalSyncSummary,
|
|
381
367
|
charBudget,
|
|
382
368
|
charCount,
|
|
383
369
|
truncated,
|
|
384
370
|
createdAt,
|
|
385
371
|
items,
|
|
386
|
-
...(scoreSchemaVersion === undefined ? {} : { scoreSchemaVersion }),
|
|
372
|
+
...(object.scoreSchemaVersion === undefined ? {} : { scoreSchemaVersion: parsedScoreSchemaVersion }),
|
|
387
373
|
};
|
|
388
374
|
}
|
|
389
375
|
catch {
|
|
@@ -461,7 +447,6 @@ function canonicalDeliveryBody(input) {
|
|
|
461
447
|
taskProfileHash: input.taskProfileHash,
|
|
462
448
|
queryHash: input.queryHash,
|
|
463
449
|
policyVersion: input.policyVersion,
|
|
464
|
-
externalSyncSummary: input.externalSyncSummary,
|
|
465
450
|
charBudget: input.charBudget,
|
|
466
451
|
charCount: input.charCount,
|
|
467
452
|
truncated: input.truncated,
|
|
@@ -477,56 +462,111 @@ function canonicalDeliveryBody(input) {
|
|
|
477
462
|
scoreSchemaVersion: input.scoreSchemaVersion ?? 1,
|
|
478
463
|
});
|
|
479
464
|
}
|
|
465
|
+
function scopedDeliveryId(input) {
|
|
466
|
+
return `context-${canonicalContentHash({
|
|
467
|
+
kind: 'scoped-context-delivery-v1',
|
|
468
|
+
workspace: input.workspace,
|
|
469
|
+
runId: input.runId,
|
|
470
|
+
throughSequence: input.throughSequence,
|
|
471
|
+
intakeSessionId: input.intakeSessionId,
|
|
472
|
+
taskProfileHash: input.taskProfileHash,
|
|
473
|
+
queryHash: input.queryHash,
|
|
474
|
+
policyVersion: input.policyVersion,
|
|
475
|
+
charBudget: input.charBudget,
|
|
476
|
+
charCount: input.charCount,
|
|
477
|
+
truncated: input.truncated,
|
|
478
|
+
createdAt: input.createdAt,
|
|
479
|
+
scoreSchemaVersion: input.scoreSchemaVersion ?? 1,
|
|
480
|
+
items: input.items.map((item) => ({
|
|
481
|
+
entryId: item.entryId,
|
|
482
|
+
entryRevision: item.entryRevision,
|
|
483
|
+
rank: item.rank,
|
|
484
|
+
scoreComponents: item.scoreComponents,
|
|
485
|
+
selectionReasons: item.selectionReasons,
|
|
486
|
+
...(item.origin === undefined ? {} : { origin: item.origin }),
|
|
487
|
+
})),
|
|
488
|
+
})}`;
|
|
489
|
+
}
|
|
480
490
|
function selectHeaderByDeliveryId(database, deliveryId) {
|
|
481
491
|
return database.prepare(`
|
|
482
492
|
SELECT cd.delivery_id, cd.run_id, cd.through_sequence, cd.intake_session_id,
|
|
483
493
|
cd.task_profile_hash, cd.query_hash, cd.policy_version,
|
|
484
|
-
cd.
|
|
485
|
-
cd.truncated, cd.created_at, cd.score_schema_version,
|
|
494
|
+
cd.char_budget, cd.char_count, cd.truncated, cd.created_at, cd.score_schema_version,
|
|
486
495
|
lr.workspace AS run_workspace, lr.last_sequence AS run_last_sequence
|
|
487
496
|
FROM context_deliveries AS cd
|
|
488
497
|
LEFT JOIN ledger_runs AS lr ON lr.run_id = cd.run_id
|
|
489
498
|
WHERE cd.delivery_id = ?
|
|
490
499
|
`).get(deliveryId);
|
|
491
500
|
}
|
|
501
|
+
function strictCurrentEntry(database, workspace, entryId, requireStructuredScope) {
|
|
502
|
+
try {
|
|
503
|
+
return readEntry(database, { workspace, entryId }, { requireStructuredScope });
|
|
504
|
+
}
|
|
505
|
+
catch (error) {
|
|
506
|
+
if (isKiokukoError(error) && error.code === 'INTEGRITY_ERROR')
|
|
507
|
+
integrity();
|
|
508
|
+
throw error;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
492
511
|
function assertRunForWrite(database, input) {
|
|
493
|
-
const run = database.prepare('SELECT run_id, last_sequence FROM ledger_runs WHERE run_id = ? AND workspace = ?')
|
|
512
|
+
const run = database.prepare('SELECT run_id, status, last_sequence FROM ledger_runs WHERE run_id = ? AND workspace = ?')
|
|
513
|
+
.get(input.runId, input.workspace);
|
|
494
514
|
if (!run)
|
|
495
515
|
notFound();
|
|
496
516
|
if (typeof run.run_id !== 'string')
|
|
497
517
|
integrity();
|
|
518
|
+
if (typeof run.status !== 'string' || !RUN_STATUSES.includes(run.status))
|
|
519
|
+
integrity();
|
|
498
520
|
const lastSequence = storedNonNegativeSafeInteger(run.last_sequence);
|
|
499
|
-
if (input.throughSequence
|
|
521
|
+
if (run.status !== 'active' || input.throughSequence !== lastSequence)
|
|
500
522
|
conflict();
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
FROM run_intakes AS ri
|
|
505
|
-
LEFT JOIN akinator_sessions AS s ON s.id = ri.session_id
|
|
506
|
-
WHERE ri.run_id = ?
|
|
507
|
-
`).get(input.runId);
|
|
508
|
-
if (!intake || intake.session_id !== input.intakeSessionId || intake.session_id_join !== input.intakeSessionId || intake.session_workspace !== input.workspace)
|
|
509
|
-
notFound();
|
|
523
|
+
let binding;
|
|
524
|
+
try {
|
|
525
|
+
binding = readContextRunProfileBinding(database, input.runId, input.throughSequence);
|
|
510
526
|
}
|
|
527
|
+
catch (error) {
|
|
528
|
+
if (isKiokukoError(error) && (error.code === 'NOT_FOUND' || error.code === 'INTEGRITY_ERROR'))
|
|
529
|
+
integrity();
|
|
530
|
+
throw error;
|
|
531
|
+
}
|
|
532
|
+
if (binding.workspace !== input.workspace)
|
|
533
|
+
integrity();
|
|
534
|
+
if (input.intakeSessionId !== binding.intakeSessionId)
|
|
535
|
+
notFound();
|
|
536
|
+
if (input.taskProfileHash !== binding.profileHash)
|
|
537
|
+
conflict();
|
|
511
538
|
for (const item of input.items) {
|
|
512
|
-
const
|
|
513
|
-
SELECT e.id, e.workspace, r.workspace AS revision_workspace
|
|
539
|
+
const candidate = database.prepare(`
|
|
540
|
+
SELECT e.id, e.workspace, r.workspace AS revision_workspace
|
|
514
541
|
FROM entry_revisions AS r
|
|
515
542
|
JOIN entries AS e ON e.id = r.entry_id
|
|
516
543
|
WHERE r.entry_id = ? AND r.revision = ?
|
|
517
544
|
`).get(item.entryId, item.entryRevision);
|
|
518
|
-
if (!
|
|
545
|
+
if (!candidate || candidate.id !== item.entryId)
|
|
519
546
|
notFound();
|
|
520
|
-
|
|
547
|
+
if (typeof candidate.workspace !== 'string' || candidate.workspace.length === 0)
|
|
548
|
+
integrity();
|
|
549
|
+
const entryWorkspace = candidate.workspace;
|
|
521
550
|
const origin = item.origin ?? 'project';
|
|
522
|
-
if (
|
|
551
|
+
if (candidate.revision_workspace !== entryWorkspace)
|
|
552
|
+
integrity();
|
|
553
|
+
const entry = strictCurrentEntry(database, entryWorkspace, item.entryId, origin !== 'project');
|
|
554
|
+
if (entry.revision !== item.entryRevision)
|
|
555
|
+
conflict();
|
|
556
|
+
if (!isRetrievableEntry(database, entry) || entry.status === 'superseded')
|
|
557
|
+
conflict();
|
|
558
|
+
if (!entryOriginMatchesWorkspace({ origin, runWorkspace: input.workspace, entryWorkspace: entry.workspace }))
|
|
523
559
|
notFound();
|
|
524
560
|
if (origin === 'global') {
|
|
525
|
-
if (entry.workspace !== 'global' ||
|
|
561
|
+
if (entry.workspace !== 'global' || entry.scope.visibility !== 'global' || effectiveRetrievalScope(entry.scope) !== 'global')
|
|
562
|
+
notFound();
|
|
563
|
+
}
|
|
564
|
+
else if (origin === 'ecosystem') {
|
|
565
|
+
if (!hasOwn(entry.scope, 'retrievalScope')
|
|
566
|
+
|| effectiveRetrievalScope(entry.scope) !== 'ecosystem'
|
|
567
|
+
|| !hasExplicitApplicability(entry.scope))
|
|
526
568
|
notFound();
|
|
527
569
|
}
|
|
528
|
-
else if (origin === 'ecosystem' && (typeof entry.scope_json !== 'string' || (!/"retrievalScope"\s*:\s*"ecosystem"/u.test(entry.scope_json) && !/"applicability"\s*:/u.test(entry.scope_json))))
|
|
529
|
-
notFound();
|
|
530
570
|
}
|
|
531
571
|
}
|
|
532
572
|
function validateStoredJson(value) {
|
|
@@ -536,31 +576,24 @@ function validateStoredJson(value) {
|
|
|
536
576
|
try {
|
|
537
577
|
parsed = JSON.parse(value);
|
|
538
578
|
}
|
|
539
|
-
catch {
|
|
540
|
-
|
|
541
|
-
}
|
|
542
|
-
try {
|
|
543
|
-
if (canonicalJson(parsed) !== value)
|
|
579
|
+
catch (error) {
|
|
580
|
+
if (error instanceof SyntaxError || error instanceof RangeError)
|
|
544
581
|
integrity();
|
|
582
|
+
throw error;
|
|
545
583
|
}
|
|
546
|
-
|
|
547
|
-
integrity();
|
|
548
|
-
}
|
|
549
|
-
return parsed;
|
|
550
|
-
}
|
|
551
|
-
function validateStoredExternalSummary(value, workspace) {
|
|
584
|
+
let canonical;
|
|
552
585
|
try {
|
|
553
|
-
|
|
554
|
-
const normalized = validateExternalSummary(parsed, workspace);
|
|
555
|
-
if (canonicalJson(normalized) !== value)
|
|
556
|
-
integrity();
|
|
557
|
-
return normalized;
|
|
586
|
+
canonical = canonicalJson(parsed);
|
|
558
587
|
}
|
|
559
588
|
catch (error) {
|
|
560
|
-
if (
|
|
561
|
-
|
|
562
|
-
|
|
589
|
+
if (error instanceof RangeError
|
|
590
|
+
|| (error instanceof KiokukoError && error.code === 'VALIDATION_ERROR'))
|
|
591
|
+
integrity();
|
|
592
|
+
throw error;
|
|
563
593
|
}
|
|
594
|
+
if (canonical !== value)
|
|
595
|
+
integrity();
|
|
596
|
+
return parsed;
|
|
564
597
|
}
|
|
565
598
|
function validateStoredHeader(row, workspace) {
|
|
566
599
|
const deliveryId = boundedStoredIdentifier(row.delivery_id);
|
|
@@ -577,8 +610,9 @@ function validateStoredHeader(row, workspace) {
|
|
|
577
610
|
const taskProfileHash = storedHash(row.task_profile_hash);
|
|
578
611
|
const queryHash = storedHash(row.query_hash);
|
|
579
612
|
const policyVersion = boundedStoredIdentifier(row.policy_version);
|
|
580
|
-
const scoreSchemaVersion =
|
|
581
|
-
|
|
613
|
+
const scoreSchemaVersion = validatedScoreSchemaVersion(row.score_schema_version, integrity);
|
|
614
|
+
if (policyVersion !== deliveryPolicyVersion(scoreSchemaVersion))
|
|
615
|
+
integrity();
|
|
582
616
|
const charBudget = storedPositiveSafeInteger(row.char_budget);
|
|
583
617
|
if (charBudget > MAX_CHAR_BUDGET)
|
|
584
618
|
integrity();
|
|
@@ -596,7 +630,6 @@ function validateStoredHeader(row, workspace) {
|
|
|
596
630
|
taskProfileHash,
|
|
597
631
|
queryHash,
|
|
598
632
|
policyVersion,
|
|
599
|
-
externalSyncSummary,
|
|
600
633
|
charBudget,
|
|
601
634
|
charCount,
|
|
602
635
|
truncated,
|
|
@@ -651,16 +684,19 @@ function validateStoredEntries(database, header) {
|
|
|
651
684
|
return { entryId, entryRevision, rank, scoreComponents: score, selectionReasons: reasons, ...(origin === 'project' ? {} : { origin }) };
|
|
652
685
|
});
|
|
653
686
|
}
|
|
654
|
-
function
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
687
|
+
function assertStoredProfileBinding(database, header) {
|
|
688
|
+
let binding;
|
|
689
|
+
try {
|
|
690
|
+
binding = readContextRunProfileBinding(database, header.runId, header.throughSequence);
|
|
691
|
+
}
|
|
692
|
+
catch (error) {
|
|
693
|
+
if (isKiokukoError(error) && (error.code === 'NOT_FOUND' || error.code === 'INTEGRITY_ERROR'))
|
|
694
|
+
integrity();
|
|
695
|
+
throw error;
|
|
696
|
+
}
|
|
697
|
+
if (binding.workspace !== header.workspace
|
|
698
|
+
|| header.intakeSessionId !== binding.intakeSessionId
|
|
699
|
+
|| header.taskProfileHash !== binding.profileHash)
|
|
664
700
|
integrity();
|
|
665
701
|
}
|
|
666
702
|
function readStoredDelivery(database, workspace, deliveryId) {
|
|
@@ -672,33 +708,40 @@ function readStoredDelivery(database, workspace, deliveryId) {
|
|
|
672
708
|
if (row.run_workspace !== workspace)
|
|
673
709
|
notFound();
|
|
674
710
|
const header = validateStoredHeader(row, workspace);
|
|
675
|
-
|
|
711
|
+
assertStoredProfileBinding(database, header);
|
|
676
712
|
const items = validateStoredEntries(database, header);
|
|
713
|
+
const complete = { ...header, items };
|
|
714
|
+
if ((header.scoreSchemaVersion ?? 1) === 2 && header.deliveryId !== scopedDeliveryId(complete))
|
|
715
|
+
scopedIdentityIntegrity();
|
|
677
716
|
const view = {
|
|
678
|
-
...
|
|
717
|
+
...complete,
|
|
679
718
|
items: items.map((item) => ({ ...item, scoreComponents: { ...item.scoreComponents }, selectionReasons: [...item.selectionReasons], untrusted: true })),
|
|
680
719
|
untrusted: true,
|
|
681
720
|
};
|
|
682
721
|
return view;
|
|
683
722
|
}
|
|
684
|
-
function writeContextDelivery(database, input) {
|
|
723
|
+
function writeContextDelivery(database, input, options = {}) {
|
|
724
|
+
if ((input.scoreSchemaVersion ?? 1) === 2 && input.deliveryId !== scopedDeliveryId(input))
|
|
725
|
+
validation();
|
|
726
|
+
assertRunForWrite(database, input);
|
|
685
727
|
const existing = selectHeaderByDeliveryId(database, input.deliveryId);
|
|
686
728
|
if (existing) {
|
|
687
729
|
if (existing.run_workspace !== input.workspace)
|
|
688
730
|
conflict();
|
|
689
731
|
const stored = readStoredDelivery(database, input.workspace, input.deliveryId);
|
|
690
|
-
if (canonicalDeliveryBody(stored) === canonicalDeliveryBody(input))
|
|
732
|
+
if (canonicalDeliveryBody(stored) === canonicalDeliveryBody(input)) {
|
|
733
|
+
options.assertBeforePersist?.();
|
|
691
734
|
return stored;
|
|
735
|
+
}
|
|
692
736
|
conflict();
|
|
693
737
|
}
|
|
694
|
-
|
|
695
|
-
const summaryJson = canonicalJson(input.externalSyncSummary);
|
|
738
|
+
options.assertBeforePersist?.();
|
|
696
739
|
database.prepare(`
|
|
697
740
|
INSERT INTO context_deliveries (
|
|
698
741
|
delivery_id, run_id, through_sequence, intake_session_id, task_profile_hash, query_hash,
|
|
699
742
|
policy_version, external_sync_summary_json, char_budget, char_count, truncated, created_at, score_schema_version
|
|
700
743
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
701
|
-
`).run(input.deliveryId, input.runId, input.throughSequence, input.intakeSessionId, input.taskProfileHash, input.queryHash, input.policyVersion,
|
|
744
|
+
`).run(input.deliveryId, input.runId, input.throughSequence, input.intakeSessionId, input.taskProfileHash, input.queryHash, input.policyVersion, '{}', input.charBudget, input.charCount, input.truncated ? 1 : 0, input.createdAt, input.scoreSchemaVersion ?? 1);
|
|
702
745
|
for (const item of input.items) {
|
|
703
746
|
database.prepare(`
|
|
704
747
|
INSERT INTO context_delivery_entries (
|
|
@@ -708,22 +751,26 @@ function writeContextDelivery(database, input) {
|
|
|
708
751
|
}
|
|
709
752
|
return readStoredDelivery(database, input.workspace, input.deliveryId);
|
|
710
753
|
}
|
|
711
|
-
export function recordContextDeliveryInTransaction(database, input) {
|
|
754
|
+
export function recordContextDeliveryInTransaction(database, input, options = {}) {
|
|
712
755
|
const validated = validateContextDeliveryInput(input);
|
|
756
|
+
if (options.assertBeforePersist !== undefined && typeof options.assertBeforePersist !== 'function')
|
|
757
|
+
validation();
|
|
713
758
|
try {
|
|
714
|
-
return writeContextDelivery(database, validated);
|
|
759
|
+
return writeContextDelivery(database, validated, options);
|
|
715
760
|
}
|
|
716
761
|
catch (error) {
|
|
717
|
-
normalizeDatabaseError(error);
|
|
762
|
+
normalizeDatabaseError(error, DELIVERY_UNIQUENESS_FAILURES);
|
|
718
763
|
}
|
|
719
764
|
}
|
|
720
|
-
export function recordContextDelivery(database, input) {
|
|
765
|
+
export function recordContextDelivery(database, input, options = {}) {
|
|
721
766
|
const validated = validateContextDeliveryInput(input);
|
|
767
|
+
if (options.assertBeforePersist !== undefined && typeof options.assertBeforePersist !== 'function')
|
|
768
|
+
validation();
|
|
722
769
|
try {
|
|
723
|
-
return withImmediateTransaction(database, () => writeContextDelivery(database, validated));
|
|
770
|
+
return withImmediateTransaction(database, () => writeContextDelivery(database, validated, options));
|
|
724
771
|
}
|
|
725
772
|
catch (error) {
|
|
726
|
-
normalizeDatabaseError(error);
|
|
773
|
+
normalizeDatabaseError(error, DELIVERY_UNIQUENESS_FAILURES);
|
|
727
774
|
}
|
|
728
775
|
}
|
|
729
776
|
export function readContextDelivery(database, input) {
|
|
@@ -754,8 +801,7 @@ export function listContextDeliveries(database, input) {
|
|
|
754
801
|
const rows = database.prepare(`
|
|
755
802
|
SELECT cd.delivery_id, cd.run_id, cd.through_sequence, cd.intake_session_id,
|
|
756
803
|
cd.task_profile_hash, cd.query_hash, cd.policy_version,
|
|
757
|
-
cd.
|
|
758
|
-
cd.truncated, cd.created_at, cd.score_schema_version,
|
|
804
|
+
cd.char_budget, cd.char_count, cd.truncated, cd.created_at, cd.score_schema_version,
|
|
759
805
|
lr.workspace AS run_workspace, lr.last_sequence AS run_last_sequence
|
|
760
806
|
FROM context_deliveries AS cd
|
|
761
807
|
LEFT JOIN ledger_runs AS lr ON lr.run_id = cd.run_id
|
|
@@ -766,10 +812,13 @@ export function listContextDeliveries(database, input) {
|
|
|
766
812
|
const pageRows = rows.slice(0, validated.limit);
|
|
767
813
|
const items = pageRows.map((row) => {
|
|
768
814
|
const header = validateStoredHeader(row, validated.workspace);
|
|
769
|
-
|
|
815
|
+
assertStoredProfileBinding(database, header);
|
|
770
816
|
const storedItems = validateStoredEntries(database, header);
|
|
817
|
+
const complete = { ...header, items: storedItems };
|
|
818
|
+
if ((header.scoreSchemaVersion ?? 1) === 2 && header.deliveryId !== scopedDeliveryId(complete))
|
|
819
|
+
scopedIdentityIntegrity();
|
|
771
820
|
return {
|
|
772
|
-
...
|
|
821
|
+
...complete,
|
|
773
822
|
items: storedItems.map((item) => ({ ...item, scoreComponents: { ...item.scoreComponents }, selectionReasons: [...item.selectionReasons], untrusted: true })),
|
|
774
823
|
untrusted: true,
|
|
775
824
|
};
|