@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
|
@@ -1,71 +1,270 @@
|
|
|
1
1
|
import { KiokukoError } from '../errors.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { LedgerStore } from '../ledger/store.js';
|
|
3
|
+
import { readEntry } from '../memory/entries.js';
|
|
4
|
+
import { isRetrievableEntry } from '../memory/hybrid-retrieval.js';
|
|
5
|
+
import { effectiveRetrievalScope, hasExplicitApplicability } from '../memory/structured-memory.js';
|
|
6
|
+
import { GLOBAL_WORKSPACE, resolveProjectWorkspace, resolveProjectWorkspaceReadOnly, } from '../memory/workspaces.js';
|
|
4
7
|
import { getAkinatorContextService } from './service.js';
|
|
5
|
-
import {
|
|
8
|
+
import { deriveMemoryUseSignal, hasActionableMemorySelection, memoryReasoningCapabilityAvailability, memoryReasoningRequired, normalizeCapabilityCatalog, resolveCapabilities, } from './capabilities.js';
|
|
9
|
+
import { capabilityCatalogDigest } from './capability-binding.js';
|
|
10
|
+
import { claimAgentTaskSkillDiscoveryAttempt, completeAgentTaskSkillDiscoveryAttempt, failAgentTaskSkillDiscoveryAttempt, readAgentTaskSkillDiscoveryAttempt, } from './skill-discovery-attempt.js';
|
|
6
11
|
import { AgentGatewayService } from '../gateway/agent-service.js';
|
|
7
12
|
import { canonicalContentHash } from '../serialization/validate.js';
|
|
8
|
-
import {
|
|
13
|
+
import { queryScopedContextGated, SCOPED_CONTEXT_DEFAULT_CHARACTER_BUDGET, SCOPED_CONTEXT_MAX_CHARACTER_BUDGET, } from '../context/scoped-broker.js';
|
|
14
|
+
import { contextFeedbackSignals } from '../context/feedback.js';
|
|
15
|
+
import { entryOriginMatchesWorkspace } from '../context/origin.js';
|
|
16
|
+
import { readContextBrokerRunState } from '../context/broker.js';
|
|
17
|
+
import { ordinaryContextSelectionStateHash } from '../context/selection-state.js';
|
|
9
18
|
import { deriveAkinatorReasoning } from './reasoning.js';
|
|
10
|
-
|
|
19
|
+
import { assertProjectManifestSnapshotBinding, bindProjectManifestSnapshot, captureProjectManifestSnapshot, resolveProjectFingerprint, } from '../repository/project-fingerprint.js';
|
|
20
|
+
import { readSkillDiscoveryConfig } from '../skills/config.js';
|
|
21
|
+
import { discoverSkills } from '../skills/discovery-service.js';
|
|
22
|
+
import { isExternalSkillReference } from '../skills/store.js';
|
|
23
|
+
const AGENT_TASK_DISCOVERY_BINDING_METADATA_KEY = 'kiokukoAgentTaskDiscoveryBinding';
|
|
24
|
+
const AGENT_TASK_DISCOVERY_BINDING_VERSION = 1;
|
|
25
|
+
const AGENT_TASK_DISCOVERY_BINDING_FIELDS = new Set(['version', 'mode', 'requestDigest']);
|
|
26
|
+
const AGENT_TASK_CONTEXT_BINDING_METADATA_KEY = 'kiokukoAgentTaskContextBinding';
|
|
27
|
+
const AGENT_TASK_CONTEXT_BINDING_VERSION = 1;
|
|
28
|
+
const AGENT_TASK_CONTEXT_BINDING_FIELDS = new Set(['version', 'maxContextChars']);
|
|
29
|
+
const AGENT_TASK_REQUEST_ID_MAX_LENGTH = 256;
|
|
30
|
+
const CONTROL_CHARACTERS = /\p{Cc}/u;
|
|
31
|
+
function taskRequestId(value) {
|
|
32
|
+
if (typeof value !== 'string'
|
|
33
|
+
|| value.length === 0
|
|
34
|
+
|| value.length > AGENT_TASK_REQUEST_ID_MAX_LENGTH
|
|
35
|
+
|| value.trim() !== value
|
|
36
|
+
|| CONTROL_CHARACTERS.test(value)) {
|
|
37
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Task request ID must be a bounded non-empty opaque string');
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
function taskContextCharacterBudget(value) {
|
|
42
|
+
if (value === undefined)
|
|
43
|
+
return SCOPED_CONTEXT_DEFAULT_CHARACTER_BUDGET;
|
|
44
|
+
if (!Number.isSafeInteger(value) || value < 1 || value > SCOPED_CONTEXT_MAX_CHARACTER_BUDGET) {
|
|
45
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Task context character budget is invalid');
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
function emptySkillDiscovery(mode) {
|
|
50
|
+
return { attempted: false, mode, requirements: [], queries: [], cacheHits: 0, candidates: 0, selected: [], failures: [] };
|
|
51
|
+
}
|
|
52
|
+
function skillDiscoveryRequestIdentity(mode, capabilities) {
|
|
53
|
+
const normalized = normalizeCapabilityCatalog(capabilities);
|
|
54
|
+
const effectiveMode = mode === 'community' && normalized.availability === 'unknown' ? 'official' : mode;
|
|
55
|
+
return {
|
|
56
|
+
mode: effectiveMode,
|
|
57
|
+
capabilityCatalogDigest: capabilityCatalogDigest(capabilities),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function bindSkillDiscoveryRequest(metadata, request) {
|
|
61
|
+
if (Object.hasOwn(metadata, AGENT_TASK_DISCOVERY_BINDING_METADATA_KEY)) {
|
|
62
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Run metadata contains a reserved task discovery binding');
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
...metadata,
|
|
66
|
+
[AGENT_TASK_DISCOVERY_BINDING_METADATA_KEY]: {
|
|
67
|
+
version: AGENT_TASK_DISCOVERY_BINDING_VERSION,
|
|
68
|
+
mode: request.mode,
|
|
69
|
+
requestDigest: canonicalContentHash(request),
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function assertSkillDiscoveryRequestBinding(metadata, request) {
|
|
74
|
+
const binding = metadata[AGENT_TASK_DISCOVERY_BINDING_METADATA_KEY];
|
|
75
|
+
if (typeof binding !== 'object'
|
|
76
|
+
|| binding === null
|
|
77
|
+
|| Array.isArray(binding)
|
|
78
|
+
|| Object.getPrototypeOf(binding) !== Object.prototype
|
|
79
|
+
|| Object.keys(binding).length !== AGENT_TASK_DISCOVERY_BINDING_FIELDS.size
|
|
80
|
+
|| Object.keys(binding).some((key) => !AGENT_TASK_DISCOVERY_BINDING_FIELDS.has(key))
|
|
81
|
+
|| binding.version !== AGENT_TASK_DISCOVERY_BINDING_VERSION
|
|
82
|
+
|| typeof binding.mode !== 'string'
|
|
83
|
+
|| !['off', 'official', 'community'].includes(binding.mode)
|
|
84
|
+
|| typeof binding.requestDigest !== 'string'
|
|
85
|
+
|| !/^[0-9a-f]{64}$/u.test(binding.requestDigest)) {
|
|
86
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Run task discovery binding is missing or invalid');
|
|
87
|
+
}
|
|
88
|
+
if (binding.mode !== request.mode || binding.requestDigest !== canonicalContentHash(request)) {
|
|
89
|
+
throw new KiokukoError('CONFLICT', 'Skill discovery request differs from the request bound when the run was opened');
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function bindTaskContextRequest(metadata, maxContextChars) {
|
|
93
|
+
if (Object.hasOwn(metadata, AGENT_TASK_CONTEXT_BINDING_METADATA_KEY)) {
|
|
94
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Run metadata contains a reserved task context binding');
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
...metadata,
|
|
98
|
+
[AGENT_TASK_CONTEXT_BINDING_METADATA_KEY]: {
|
|
99
|
+
version: AGENT_TASK_CONTEXT_BINDING_VERSION,
|
|
100
|
+
maxContextChars,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function assertTaskContextRequestBinding(metadata, maxContextChars) {
|
|
105
|
+
const binding = metadata[AGENT_TASK_CONTEXT_BINDING_METADATA_KEY];
|
|
106
|
+
if (typeof binding !== 'object'
|
|
107
|
+
|| binding === null
|
|
108
|
+
|| Array.isArray(binding)
|
|
109
|
+
|| Object.getPrototypeOf(binding) !== Object.prototype
|
|
110
|
+
|| Object.keys(binding).length !== AGENT_TASK_CONTEXT_BINDING_FIELDS.size
|
|
111
|
+
|| Object.keys(binding).some((key) => !AGENT_TASK_CONTEXT_BINDING_FIELDS.has(key))
|
|
112
|
+
|| binding.version !== AGENT_TASK_CONTEXT_BINDING_VERSION
|
|
113
|
+
|| typeof binding.maxContextChars !== 'number'
|
|
114
|
+
|| !Number.isSafeInteger(binding.maxContextChars)
|
|
115
|
+
|| binding.maxContextChars < 1
|
|
116
|
+
|| binding.maxContextChars > SCOPED_CONTEXT_MAX_CHARACTER_BUDGET) {
|
|
117
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Run task context binding is missing or invalid');
|
|
118
|
+
}
|
|
119
|
+
if (binding.maxContextChars !== maxContextChars) {
|
|
120
|
+
throw new KiokukoError('CONFLICT', 'Task context request differs from the request bound when the run was opened');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function memoryCapabilityUnavailableForTask(context, capabilities) {
|
|
124
|
+
return context.status === 'ready'
|
|
125
|
+
&& (context.session.profile.taskType === 'build' || context.session.profile.taskType === 'debug')
|
|
126
|
+
&& memoryReasoningCapabilityAvailability(capabilities) !== 'available';
|
|
127
|
+
}
|
|
128
|
+
function authoritativeTaskRun(database, runId, intakeStatus) {
|
|
129
|
+
const run = new LedgerStore(database).readRun(runId);
|
|
130
|
+
if (run === undefined)
|
|
131
|
+
throw new KiokukoError('NOT_FOUND', 'Task run was not found');
|
|
132
|
+
if (run.status !== 'intake' && run.status !== 'active') {
|
|
133
|
+
throw new KiokukoError('CONFLICT', 'Task run is terminal');
|
|
134
|
+
}
|
|
135
|
+
if (intakeStatus !== undefined) {
|
|
136
|
+
const expected = intakeStatus === 'needs_answer' ? 'intake' : 'active';
|
|
137
|
+
if (run.status !== expected) {
|
|
138
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Task run status does not match its intake state');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return run;
|
|
142
|
+
}
|
|
143
|
+
function currentAgentTaskContext(database, runId, context) {
|
|
144
|
+
const current = readContextBrokerRunState(database, runId);
|
|
145
|
+
if (current.intakeSessionId !== context.session.id || current.status !== context.status) {
|
|
146
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Task intake and authoritative broker state disagree');
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
...context,
|
|
150
|
+
session: { ...context.session, profile: { ...current.taskProfile } },
|
|
151
|
+
recommendedTags: [...current.recommendedTags],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function currentScopedEntry(database, runWorkspace, item) {
|
|
155
|
+
const row = database.prepare('SELECT workspace FROM entries WHERE id = ?')
|
|
156
|
+
.get(item.entryId);
|
|
157
|
+
if (row === undefined || typeof row.workspace !== 'string' || row.workspace.length === 0) {
|
|
158
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Scoped context entry is missing or invalid');
|
|
159
|
+
}
|
|
160
|
+
const entry = readEntry(database, { workspace: row.workspace, entryId: item.entryId }, { requireStructuredScope: item.origin !== 'project' });
|
|
161
|
+
if (entry.revision !== item.revision) {
|
|
162
|
+
throw new KiokukoError('CONFLICT', 'Scoped context entry changed after ranking');
|
|
163
|
+
}
|
|
164
|
+
if (!entryOriginMatchesWorkspace({
|
|
165
|
+
origin: item.origin,
|
|
166
|
+
runWorkspace,
|
|
167
|
+
entryWorkspace: entry.workspace,
|
|
168
|
+
})) {
|
|
169
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Scoped context entry origin is invalid');
|
|
170
|
+
}
|
|
171
|
+
if (item.origin === 'global'
|
|
172
|
+
&& (entry.scope.visibility !== 'global' || effectiveRetrievalScope(entry.scope) !== 'global')) {
|
|
173
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Scoped context global entry scope is invalid');
|
|
174
|
+
}
|
|
175
|
+
if (item.origin === 'ecosystem'
|
|
176
|
+
&& (!Object.hasOwn(entry.scope, 'retrievalScope')
|
|
177
|
+
|| effectiveRetrievalScope(entry.scope) !== 'ecosystem'
|
|
178
|
+
|| !hasExplicitApplicability(entry.scope))) {
|
|
179
|
+
throw new KiokukoError('INTEGRITY_ERROR', 'Scoped context ecosystem entry scope is invalid');
|
|
180
|
+
}
|
|
181
|
+
if (!isRetrievableEntry(database, entry)) {
|
|
182
|
+
throw new KiokukoError('CONFLICT', 'Scoped context entry is no longer retrievable');
|
|
183
|
+
}
|
|
184
|
+
if (entry.status === 'superseded') {
|
|
185
|
+
throw new KiokukoError('CONFLICT', 'Scoped context entry is no longer retrievable');
|
|
186
|
+
}
|
|
187
|
+
return entry;
|
|
188
|
+
}
|
|
189
|
+
function ordinaryScopedItems(database, runWorkspace, scopedContext) {
|
|
190
|
+
return scopedContext.items.filter((item) => {
|
|
191
|
+
const entry = currentScopedEntry(database, runWorkspace, item);
|
|
192
|
+
return !isExternalSkillReference(entry);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
function scopedMemoryUseSignal(database, runWorkspace, scopedContext) {
|
|
196
|
+
const items = ordinaryScopedItems(database, runWorkspace, scopedContext);
|
|
197
|
+
if (hasActionableMemorySelection(items))
|
|
198
|
+
return 'actionable';
|
|
199
|
+
return items.some((item) => contextFeedbackSignals(database, item.entryId)
|
|
200
|
+
.some((signal) => signal.verdict === 'helpful'))
|
|
201
|
+
? 'actionable'
|
|
202
|
+
: 'none';
|
|
203
|
+
}
|
|
204
|
+
function assertScopedMemoryUseSignal(database, runWorkspace, scopedContext, expected) {
|
|
205
|
+
if (scopedMemoryUseSignal(database, runWorkspace, scopedContext) !== expected) {
|
|
206
|
+
throw new KiokukoError('CONFLICT', 'Scoped memory capability decision changed before context persistence');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function assertOrdinaryMemoryState(database, workspaces, expectedHash) {
|
|
210
|
+
if (ordinaryContextSelectionStateHash(database, workspaces, { includeEcosystem: true }) !== expectedHash) {
|
|
211
|
+
throw new KiokukoError('CONFLICT', 'Scoped memory catalog changed while context was being prepared');
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function assertAgentTaskSnapshot(database, runId, expectedRun, expectedContext) {
|
|
215
|
+
const currentRun = authoritativeTaskRun(database, runId, expectedContext.status);
|
|
216
|
+
const currentContext = currentAgentTaskContext(database, runId, expectedContext);
|
|
217
|
+
if (currentRun.workspace !== expectedRun.workspace
|
|
218
|
+
|| currentRun.status !== expectedRun.status
|
|
219
|
+
|| currentRun.lastSequence !== expectedRun.lastSequence
|
|
220
|
+
|| canonicalContentHash(currentContext.session.profile) !== canonicalContentHash(expectedContext.session.profile)
|
|
221
|
+
|| canonicalContentHash(currentContext.recommendedTags) !== canonicalContentHash(expectedContext.recommendedTags)) {
|
|
222
|
+
throw new KiokukoError('CONFLICT', 'Task run changed while external skills were being discovered');
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function assertCurrentProjectManifest(project, expected) {
|
|
226
|
+
const current = captureProjectManifestSnapshot(project);
|
|
227
|
+
if (current.repositoryId !== expected.repositoryId || current.manifestDigest !== expected.manifestDigest) {
|
|
228
|
+
throw new KiokukoError('CONFLICT', 'Project manifest changed while task context was being prepared');
|
|
229
|
+
}
|
|
230
|
+
}
|
|
11
231
|
async function requireProject(database, cwd) {
|
|
12
232
|
const project = await resolveProjectWorkspace(database, cwd);
|
|
13
233
|
if (!project)
|
|
14
234
|
throw new KiokukoError('NOT_FOUND', 'No Git repository or .kiokuko.json binding was found for task preparation');
|
|
15
235
|
return project;
|
|
16
236
|
}
|
|
17
|
-
function
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
continue;
|
|
27
|
-
remaining -= snippet.length;
|
|
28
|
-
references.push({
|
|
29
|
-
id: entry.id,
|
|
30
|
-
title: entry.title,
|
|
31
|
-
kind: entry.kind,
|
|
32
|
-
status: entry.status,
|
|
33
|
-
summary: entry.summary,
|
|
34
|
-
snippet,
|
|
35
|
-
tags: entry.tags,
|
|
36
|
-
provenance: entry.provenance,
|
|
37
|
-
metadata: { storedData: true, untrusted: true, instructions: false },
|
|
38
|
-
});
|
|
237
|
+
function assertRegisteredProjectLocation(database, project) {
|
|
238
|
+
const registered = database.prepare(`
|
|
239
|
+
SELECT l.repository_id AS repositoryId, r.workspace AS workspace
|
|
240
|
+
FROM repository_locations AS l
|
|
241
|
+
JOIN repositories AS r ON r.repository_id = l.repository_id
|
|
242
|
+
WHERE l.canonical_root = ?
|
|
243
|
+
`).get(project.repositoryRoot);
|
|
244
|
+
if (registered === undefined) {
|
|
245
|
+
throw new KiokukoError('NOT_FOUND', 'Task project location is not registered');
|
|
39
246
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
?
|
|
54
|
-
:
|
|
55
|
-
...recalledMemory,
|
|
56
|
-
global: recalledMemory.global === null
|
|
57
|
-
? null
|
|
58
|
-
: (() => {
|
|
59
|
-
const allowed = new Set(scopedContext.items.filter((item) => item.origin === 'global').map((item) => item.entryId));
|
|
60
|
-
const items = recalledMemory.global.items.filter((item) => allowed.has(item.id));
|
|
61
|
-
return { ...recalledMemory.global, items, count: items.length, truncated: recalledMemory.global.truncated || items.length !== recalledMemory.global.items.length };
|
|
62
|
-
})(),
|
|
63
|
-
};
|
|
247
|
+
if (registered.repositoryId !== project.repositoryId || registered.workspace !== project.workspace) {
|
|
248
|
+
throw new KiokukoError('CONFLICT', 'Task project location binding changed');
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async function requireRegisteredProjectReadOnly(database, cwd) {
|
|
252
|
+
const project = await resolveProjectWorkspaceReadOnly(database, cwd);
|
|
253
|
+
if (!project)
|
|
254
|
+
throw new KiokukoError('NOT_FOUND', 'No Git repository or .kiokuko.json binding was found for task answer');
|
|
255
|
+
assertRegisteredProjectLocation(database, project);
|
|
256
|
+
return project;
|
|
257
|
+
}
|
|
258
|
+
function buildPreparedTask(project, context, capabilities, run, scopedContext, skillDiscovery, memoryUseOverride) {
|
|
259
|
+
const memoryUse = context.status === 'ready'
|
|
260
|
+
? memoryUseOverride ?? deriveMemoryUseSignal(scopedContext)
|
|
261
|
+
: 'none';
|
|
64
262
|
const capabilityResolution = resolveCapabilities({
|
|
65
263
|
task: context.session.task,
|
|
66
264
|
profile: context.session.profile,
|
|
67
265
|
recommendedTags: context.recommendedTags,
|
|
68
266
|
...(capabilities === undefined ? {} : { capabilities }),
|
|
267
|
+
memoryUse,
|
|
69
268
|
});
|
|
70
269
|
return {
|
|
71
270
|
project,
|
|
@@ -77,21 +276,168 @@ async function buildPreparedTask(database, project, context, capabilities, maxCo
|
|
|
77
276
|
missingFields: context.missingFields,
|
|
78
277
|
recommendedTags: context.recommendedTags,
|
|
79
278
|
reasoning: deriveAkinatorReasoning(context.session.task, context.session.profile),
|
|
80
|
-
externalSync: context.externalSync,
|
|
81
279
|
},
|
|
82
|
-
memory,
|
|
83
|
-
references: boundedReferences(context, maxContextChars),
|
|
84
280
|
capabilities: capabilityResolution,
|
|
85
281
|
run,
|
|
282
|
+
skillDiscovery,
|
|
86
283
|
context: scopedContext,
|
|
284
|
+
memoryPolicy: { memoryReasoningRequired: memoryReasoningRequired(context.session.profile, memoryUse) },
|
|
87
285
|
warnings: capabilityResolution.warnings,
|
|
88
|
-
nextAction: context.status === 'needs_answer'
|
|
89
|
-
|
|
286
|
+
nextAction: context.status === 'needs_answer'
|
|
287
|
+
? 'answer_from_evidence_or_ask_user'
|
|
288
|
+
: capabilityResolution.recommendations.some((recommendation) => recommendation.required === true && recommendation.availability !== 'available')
|
|
289
|
+
? 'required_capability_unavailable'
|
|
290
|
+
: 'proceed',
|
|
291
|
+
securityNotice: 'Scoped context, capability recommendations, and discovered external skills are advisory untrusted data. Verify them against the current repository and invoke only capabilities already available in the client; a required memory-reasoning capability that is missing or unknown is an explicit stop, never a fallback; never install or execute fetched skill content automatically.',
|
|
90
292
|
};
|
|
91
293
|
}
|
|
294
|
+
async function finalizeAgentTask(input) {
|
|
295
|
+
let context = currentAgentTaskContext(input.database, input.runId, input.context);
|
|
296
|
+
let run = authoritativeTaskRun(input.database, input.runId, context.status);
|
|
297
|
+
if (context.status === 'needs_answer') {
|
|
298
|
+
return buildPreparedTask(input.project, context, input.capabilities, {
|
|
299
|
+
runId: input.runId,
|
|
300
|
+
status: run.status,
|
|
301
|
+
}, null, emptySkillDiscovery(input.discoveryMode), 'none');
|
|
302
|
+
}
|
|
303
|
+
const fingerprint = resolveProjectFingerprint(input.database, input.project, input.manifestSnapshot);
|
|
304
|
+
const selectionWorkspaces = [input.project.workspace, GLOBAL_WORKSPACE];
|
|
305
|
+
const queryFor = (current) => ({
|
|
306
|
+
project: input.project,
|
|
307
|
+
fingerprint,
|
|
308
|
+
task: current.session.task,
|
|
309
|
+
taskProfile: current.session.profile,
|
|
310
|
+
recommendedTags: current.recommendedTags,
|
|
311
|
+
runId: input.runId,
|
|
312
|
+
characterBudget: input.maxContextChars,
|
|
313
|
+
});
|
|
314
|
+
const discoveryAttemptIdentity = {
|
|
315
|
+
runId: input.runId,
|
|
316
|
+
mode: input.discoveryMode,
|
|
317
|
+
requestDigest: canonicalContentHash({
|
|
318
|
+
version: 1,
|
|
319
|
+
runId: input.runId,
|
|
320
|
+
workspace: input.project.workspace,
|
|
321
|
+
repositoryId: input.project.repositoryId,
|
|
322
|
+
manifestSnapshot: input.manifestSnapshot,
|
|
323
|
+
fingerprint,
|
|
324
|
+
task: context.session.task,
|
|
325
|
+
profile: context.session.profile,
|
|
326
|
+
recommendedTags: context.recommendedTags,
|
|
327
|
+
capabilityCatalogDigest: capabilityCatalogDigest(input.capabilities),
|
|
328
|
+
mode: input.discoveryMode,
|
|
329
|
+
}),
|
|
330
|
+
};
|
|
331
|
+
const replayedAttempt = input.discoveryMode === 'off'
|
|
332
|
+
? undefined
|
|
333
|
+
: readAgentTaskSkillDiscoveryAttempt(input.database, discoveryAttemptIdentity);
|
|
334
|
+
let missingMemoryCapability = memoryCapabilityUnavailableForTask(context, input.capabilities);
|
|
335
|
+
let preDiscoveryMemoryState = null;
|
|
336
|
+
if (missingMemoryCapability && replayedAttempt === undefined && input.discoveryMode !== 'off') {
|
|
337
|
+
const previewRun = run;
|
|
338
|
+
const previewContext = context;
|
|
339
|
+
const preview = await queryScopedContextGated(input.database, queryFor(context), (candidate) => {
|
|
340
|
+
const memoryUse = scopedMemoryUseSignal(input.database, input.project.workspace, candidate);
|
|
341
|
+
return {
|
|
342
|
+
persist: false,
|
|
343
|
+
value: { candidate, memoryUse },
|
|
344
|
+
assertBeforePersist: () => {
|
|
345
|
+
assertAgentTaskSnapshot(input.database, input.runId, previewRun, previewContext);
|
|
346
|
+
assertCurrentProjectManifest(input.project, input.manifestSnapshot);
|
|
347
|
+
assertScopedMemoryUseSignal(input.database, input.project.workspace, candidate, memoryUse);
|
|
348
|
+
},
|
|
349
|
+
};
|
|
350
|
+
});
|
|
351
|
+
preDiscoveryMemoryState = preview.selectionStateHash;
|
|
352
|
+
assertCurrentProjectManifest(input.project, input.manifestSnapshot);
|
|
353
|
+
if (preview.value.memoryUse === 'actionable') {
|
|
354
|
+
context = currentAgentTaskContext(input.database, input.runId, context);
|
|
355
|
+
run = authoritativeTaskRun(input.database, input.runId, context.status);
|
|
356
|
+
if (preview.value.candidate.taskProfileHash !== canonicalContentHash(context.session.profile)) {
|
|
357
|
+
throw new KiokukoError('CONFLICT', 'Task profile changed while scoped context was being prepared');
|
|
358
|
+
}
|
|
359
|
+
return buildPreparedTask(input.project, context, input.capabilities, {
|
|
360
|
+
runId: input.runId,
|
|
361
|
+
status: run.status,
|
|
362
|
+
}, null, emptySkillDiscovery(input.discoveryMode), preview.value.memoryUse);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
run = authoritativeTaskRun(input.database, input.runId, context.status);
|
|
366
|
+
const discoveryRun = run;
|
|
367
|
+
const discoveryContext = context;
|
|
368
|
+
const assertDiscoveryState = () => {
|
|
369
|
+
assertAgentTaskSnapshot(input.database, input.runId, discoveryRun, discoveryContext);
|
|
370
|
+
assertCurrentProjectManifest(input.project, input.manifestSnapshot);
|
|
371
|
+
if (preDiscoveryMemoryState !== null) {
|
|
372
|
+
assertOrdinaryMemoryState(input.database, selectionWorkspaces, preDiscoveryMemoryState);
|
|
373
|
+
}
|
|
374
|
+
};
|
|
375
|
+
let skillDiscovery = replayedAttempt?.summary ?? emptySkillDiscovery(input.discoveryMode);
|
|
376
|
+
if (replayedAttempt === undefined && input.discoveryMode !== 'off') {
|
|
377
|
+
const claimed = claimAgentTaskSkillDiscoveryAttempt(input.database, discoveryAttemptIdentity);
|
|
378
|
+
if (claimed.kind === 'replay') {
|
|
379
|
+
skillDiscovery = claimed.summary;
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
try {
|
|
383
|
+
const discovered = await discoverSkills(input.database, {
|
|
384
|
+
project: input.project,
|
|
385
|
+
fingerprint,
|
|
386
|
+
task: context.session.task,
|
|
387
|
+
profile: context.session.profile,
|
|
388
|
+
recommendedTags: context.recommendedTags,
|
|
389
|
+
...(input.capabilities === undefined ? {} : { capabilities: input.capabilities }),
|
|
390
|
+
mode: input.discoveryMode,
|
|
391
|
+
...(input.fetchImpl === undefined ? {} : { fetchImpl: input.fetchImpl }),
|
|
392
|
+
}, {
|
|
393
|
+
...(input.fetchImpl === undefined ? {} : { fetchImpl: input.fetchImpl }),
|
|
394
|
+
assertBeforePersist: assertDiscoveryState,
|
|
395
|
+
});
|
|
396
|
+
skillDiscovery = completeAgentTaskSkillDiscoveryAttempt(input.database, discoveryAttemptIdentity, discovered, assertDiscoveryState);
|
|
397
|
+
}
|
|
398
|
+
catch (error) {
|
|
399
|
+
failAgentTaskSkillDiscoveryAttempt(input.database, discoveryAttemptIdentity, error);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
context = currentAgentTaskContext(input.database, input.runId, context);
|
|
404
|
+
authoritativeTaskRun(input.database, input.runId, context.status);
|
|
405
|
+
missingMemoryCapability = memoryCapabilityUnavailableForTask(context, input.capabilities);
|
|
406
|
+
let approvedEmptyContext = null;
|
|
407
|
+
const gated = await queryScopedContextGated(input.database, queryFor(context), (candidate) => {
|
|
408
|
+
const memoryUse = scopedMemoryUseSignal(input.database, input.project.workspace, candidate);
|
|
409
|
+
const closed = missingMemoryCapability && memoryUse === 'actionable';
|
|
410
|
+
const returnEmptyWithoutDelivery = missingMemoryCapability && !closed && candidate.items.length === 0;
|
|
411
|
+
if (returnEmptyWithoutDelivery)
|
|
412
|
+
approvedEmptyContext = { ...candidate, deliveryId: null };
|
|
413
|
+
return {
|
|
414
|
+
persist: !closed && !returnEmptyWithoutDelivery,
|
|
415
|
+
value: { closed, memoryUse, candidate },
|
|
416
|
+
assertBeforePersist: () => {
|
|
417
|
+
assertCurrentProjectManifest(input.project, input.manifestSnapshot);
|
|
418
|
+
assertScopedMemoryUseSignal(input.database, input.project.workspace, candidate, memoryUse);
|
|
419
|
+
},
|
|
420
|
+
};
|
|
421
|
+
});
|
|
422
|
+
assertCurrentProjectManifest(input.project, input.manifestSnapshot);
|
|
423
|
+
context = currentAgentTaskContext(input.database, input.runId, context);
|
|
424
|
+
run = authoritativeTaskRun(input.database, input.runId, context.status);
|
|
425
|
+
if (gated.value.candidate.taskProfileHash !== canonicalContentHash(context.session.profile)) {
|
|
426
|
+
throw new KiokukoError('CONFLICT', 'Task profile changed while scoped context was being prepared');
|
|
427
|
+
}
|
|
428
|
+
const scopedContext = gated.context ?? (gated.value.closed ? null : approvedEmptyContext);
|
|
429
|
+
return buildPreparedTask(input.project, context, input.capabilities, {
|
|
430
|
+
runId: input.runId,
|
|
431
|
+
status: run.status,
|
|
432
|
+
}, scopedContext, skillDiscovery, gated.value.memoryUse);
|
|
433
|
+
}
|
|
92
434
|
export async function prepareAgentTask(database, input) {
|
|
435
|
+
const requestId = taskRequestId(input.requestId);
|
|
436
|
+
const maxContextChars = taskContextCharacterBudget(input.maxContextChars);
|
|
93
437
|
const project = await requireProject(database, input.cwd);
|
|
94
|
-
const
|
|
438
|
+
const manifestSnapshot = captureProjectManifestSnapshot(project);
|
|
439
|
+
const discoveryRequest = skillDiscoveryRequestIdentity(input.skillDiscoveryMode ?? readSkillDiscoveryConfig().mode, input.capabilities);
|
|
440
|
+
const discoveryMode = discoveryRequest.mode;
|
|
95
441
|
const hints = input.profileHints ?? {};
|
|
96
442
|
const profileHints = {
|
|
97
443
|
taskType: hints.taskType ?? null,
|
|
@@ -99,76 +445,85 @@ export async function prepareAgentTask(database, input) {
|
|
|
99
445
|
expected: hints.expected ?? null,
|
|
100
446
|
constraints: hints.constraints ?? null,
|
|
101
447
|
};
|
|
102
|
-
const
|
|
448
|
+
const client = {
|
|
449
|
+
kind: input.client?.kind ?? 'mcp',
|
|
450
|
+
...(input.client?.version === undefined ? {} : { version: input.client.version }),
|
|
451
|
+
...(input.client?.sessionId === undefined ? {} : { sessionId: input.client.sessionId }),
|
|
452
|
+
};
|
|
453
|
+
// requestId is the logical request identity. The gateway's canonical request
|
|
454
|
+
// hash owns every bound input, so reusing an ID with changed input conflicts
|
|
455
|
+
// instead of silently opening another run. The raw opaque ID is never stored.
|
|
456
|
+
const runKey = `mcp-task-prepare-${canonicalContentHash({ version: 1, requestId })}`;
|
|
103
457
|
const gateway = new AgentGatewayService(database);
|
|
104
458
|
const opened = gateway.openRun({
|
|
105
459
|
idempotencyKey: runKey,
|
|
106
460
|
request: {
|
|
107
461
|
apiVersion: '1',
|
|
108
462
|
workspace: project.workspace,
|
|
109
|
-
client
|
|
110
|
-
kind: input.client?.kind ?? 'mcp',
|
|
111
|
-
...(input.client?.version === undefined ? {} : { version: input.client.version }),
|
|
112
|
-
...(input.client?.sessionId === undefined ? {} : { sessionId: input.client.sessionId }),
|
|
113
|
-
},
|
|
463
|
+
client,
|
|
114
464
|
task: { title: input.task, query: input.task, profileHints },
|
|
115
465
|
captureProfile: 'minimal',
|
|
116
466
|
coverage: { run: 'unavailable', tool: 'unavailable', command: 'unavailable', file: 'unavailable', approval: 'unavailable' },
|
|
117
|
-
metadata: { source: 'mcp' },
|
|
467
|
+
metadata: bindTaskContextRequest(bindSkillDiscoveryRequest(bindProjectManifestSnapshot({ source: 'mcp' }, project, manifestSnapshot), discoveryRequest), maxContextChars),
|
|
468
|
+
...(input.capabilities === undefined ? {} : { capabilities: input.capabilities }),
|
|
118
469
|
},
|
|
119
470
|
});
|
|
471
|
+
authoritativeTaskRun(database, opened.runId);
|
|
120
472
|
const context = await getAkinatorContextService(database, {
|
|
121
473
|
workspace: project.workspace,
|
|
122
474
|
sessionId: opened.intakeSessionId,
|
|
123
|
-
allowExternalSkillFallback: fallback.eligible,
|
|
124
475
|
});
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
taskProfile: context.session.profile,
|
|
131
|
-
recommendedTags: context.recommendedTags,
|
|
132
|
-
runId: opened.runId,
|
|
133
|
-
...(input.maxContextChars === undefined ? {} : { characterBudget: input.maxContextChars }),
|
|
134
|
-
});
|
|
135
|
-
return buildPreparedTask(database, project, context, input.capabilities, input.maxContextChars, {
|
|
476
|
+
return finalizeAgentTask({
|
|
477
|
+
database,
|
|
478
|
+
project,
|
|
479
|
+
manifestSnapshot,
|
|
480
|
+
context,
|
|
136
481
|
runId: opened.runId,
|
|
137
|
-
|
|
138
|
-
|
|
482
|
+
capabilities: input.capabilities,
|
|
483
|
+
maxContextChars,
|
|
484
|
+
discoveryMode,
|
|
485
|
+
...(input.fetchImpl === undefined ? {} : { fetchImpl: input.fetchImpl }),
|
|
486
|
+
});
|
|
139
487
|
}
|
|
140
488
|
export async function answerAgentTask(database, input) {
|
|
141
|
-
const
|
|
142
|
-
const
|
|
143
|
-
const
|
|
144
|
-
|
|
145
|
-
|
|
489
|
+
const maxContextChars = taskContextCharacterBudget(input.maxContextChars);
|
|
490
|
+
const project = await requireRegisteredProjectReadOnly(database, input.cwd);
|
|
491
|
+
const manifestSnapshot = captureProjectManifestSnapshot(project);
|
|
492
|
+
const discoveryRequest = skillDiscoveryRequestIdentity(input.skillDiscoveryMode ?? readSkillDiscoveryConfig().mode, input.capabilities);
|
|
493
|
+
const discoveryMode = discoveryRequest.mode;
|
|
494
|
+
const runRow = database.prepare(`SELECT lr.run_id AS runId FROM ledger_runs AS lr JOIN run_intakes AS ri ON ri.run_id = lr.run_id WHERE lr.run_id = ? AND ri.session_id = ? AND lr.workspace = ?`).get(input.runId, input.sessionId, project.workspace);
|
|
146
495
|
if (!runRow)
|
|
147
496
|
throw new KiokukoError('NOT_FOUND', 'Task run was not found for the intake session');
|
|
497
|
+
authoritativeTaskRun(database, runRow.runId);
|
|
148
498
|
const gateway = new AgentGatewayService(database);
|
|
499
|
+
const runMetadata = gateway.readRun({ runId: runRow.runId }).metadata;
|
|
500
|
+
assertProjectManifestSnapshotBinding(runMetadata, project, manifestSnapshot);
|
|
501
|
+
assertSkillDiscoveryRequestBinding(runMetadata, discoveryRequest);
|
|
502
|
+
assertTaskContextRequestBinding(runMetadata, maxContextChars);
|
|
149
503
|
const answered = gateway.answerIntake({
|
|
150
504
|
runId: runRow.runId,
|
|
151
505
|
idempotencyKey: `mcp-task-answer-${canonicalContentHash({ runId: runRow.runId, questionId: input.questionId, value: input.value })}`,
|
|
152
|
-
request: {
|
|
153
|
-
|
|
506
|
+
request: {
|
|
507
|
+
apiVersion: '1',
|
|
508
|
+
questionId: input.questionId,
|
|
509
|
+
value: input.value,
|
|
510
|
+
...(input.capabilities === undefined ? {} : { capabilities: input.capabilities }),
|
|
511
|
+
},
|
|
512
|
+
}, { assertBeforeAnswer: () => assertRegisteredProjectLocation(database, project) });
|
|
154
513
|
const context = await getAkinatorContextService(database, {
|
|
155
514
|
workspace: project.workspace,
|
|
156
515
|
sessionId: answered.intakeSessionId,
|
|
157
|
-
allowExternalSkillFallback: fallback.eligible,
|
|
158
516
|
});
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
taskProfile: context.session.profile,
|
|
165
|
-
recommendedTags: context.recommendedTags,
|
|
166
|
-
runId: answered.runId,
|
|
167
|
-
...(input.maxContextChars === undefined ? {} : { characterBudget: input.maxContextChars }),
|
|
168
|
-
});
|
|
169
|
-
return buildPreparedTask(database, project, context, input.capabilities, input.maxContextChars, {
|
|
517
|
+
return finalizeAgentTask({
|
|
518
|
+
database,
|
|
519
|
+
project,
|
|
520
|
+
manifestSnapshot,
|
|
521
|
+
context,
|
|
170
522
|
runId: answered.runId,
|
|
171
|
-
|
|
172
|
-
|
|
523
|
+
capabilities: input.capabilities,
|
|
524
|
+
maxContextChars,
|
|
525
|
+
discoveryMode,
|
|
526
|
+
...(input.fetchImpl === undefined ? {} : { fetchImpl: input.fetchImpl }),
|
|
527
|
+
});
|
|
173
528
|
}
|
|
174
529
|
//# sourceMappingURL=agent-task.js.map
|