@askdkc/kiokuko 0.2.6 → 0.2.8
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 +18 -0
- package/README.ko.md +17 -0
- package/README.md +23 -0
- package/README.zh-CN.md +16 -0
- package/dist/akinator/agent-task.d.ts +5 -0
- package/dist/akinator/agent-task.d.ts.map +1 -1
- package/dist/akinator/agent-task.js +98 -28
- package/dist/akinator/agent-task.js.map +1 -1
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +94 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +46 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/embeddings.d.ts +26 -0
- package/dist/commands/embeddings.d.ts.map +1 -0
- package/dist/commands/embeddings.js +190 -0
- package/dist/commands/embeddings.js.map +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +7 -0
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/use.d.ts.map +1 -1
- package/dist/commands/use.js +22 -8
- package/dist/commands/use.js.map +1 -1
- package/dist/config/paths.d.ts +5 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +34 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/context/broker.d.ts +3 -1
- package/dist/context/broker.d.ts.map +1 -1
- package/dist/context/broker.js +11 -7
- package/dist/context/broker.js.map +1 -1
- package/dist/context/delivery.d.ts.map +1 -1
- package/dist/context/delivery.js +5 -3
- package/dist/context/delivery.js.map +1 -1
- package/dist/context/ranking.d.ts +1 -1
- package/dist/context/ranking.d.ts.map +1 -1
- package/dist/context/ranking.js +1 -0
- package/dist/context/ranking.js.map +1 -1
- package/dist/context/scoped-broker.d.ts +4 -3
- package/dist/context/scoped-broker.d.ts.map +1 -1
- package/dist/context/scoped-broker.js +45 -7
- package/dist/context/scoped-broker.js.map +1 -1
- package/dist/context/selection-state.d.ts +12 -0
- package/dist/context/selection-state.d.ts.map +1 -1
- package/dist/context/selection-state.js +117 -7
- package/dist/context/selection-state.js.map +1 -1
- package/dist/db/capabilities.d.ts +8 -0
- package/dist/db/capabilities.d.ts.map +1 -1
- package/dist/db/capabilities.js +14 -0
- package/dist/db/capabilities.js.map +1 -1
- package/dist/db/connection.d.ts +7 -0
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +56 -0
- package/dist/db/connection.js.map +1 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +3 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/embedding/backend.d.ts +27 -0
- package/dist/embedding/backend.d.ts.map +1 -0
- package/dist/embedding/backend.js +67 -0
- package/dist/embedding/backend.js.map +1 -0
- package/dist/embedding/config.d.ts +10 -0
- package/dist/embedding/config.d.ts.map +1 -0
- package/dist/embedding/config.js +142 -0
- package/dist/embedding/config.js.map +1 -0
- package/dist/embedding/diagnostics.d.ts +34 -0
- package/dist/embedding/diagnostics.d.ts.map +1 -0
- package/dist/embedding/diagnostics.js +263 -0
- package/dist/embedding/diagnostics.js.map +1 -0
- package/dist/embedding/document.d.ts +20 -0
- package/dist/embedding/document.d.ts.map +1 -0
- package/dist/embedding/document.js +122 -0
- package/dist/embedding/document.js.map +1 -0
- package/dist/embedding/javascript-backend.d.ts +11 -0
- package/dist/embedding/javascript-backend.d.ts.map +1 -0
- package/dist/embedding/javascript-backend.js +164 -0
- package/dist/embedding/javascript-backend.js.map +1 -0
- package/dist/embedding/jobs.d.ts +67 -0
- package/dist/embedding/jobs.d.ts.map +1 -0
- package/dist/embedding/jobs.js +259 -0
- package/dist/embedding/jobs.js.map +1 -0
- package/dist/embedding/local-model-loader.d.ts +24 -0
- package/dist/embedding/local-model-loader.d.ts.map +1 -0
- package/dist/embedding/local-model-loader.js +64 -0
- package/dist/embedding/local-model-loader.js.map +1 -0
- package/dist/embedding/local-transformers-provider.d.ts +17 -0
- package/dist/embedding/local-transformers-provider.d.ts.map +1 -0
- package/dist/embedding/local-transformers-provider.js +54 -0
- package/dist/embedding/local-transformers-provider.js.map +1 -0
- package/dist/embedding/model-download.d.ts +32 -0
- package/dist/embedding/model-download.d.ts.map +1 -0
- package/dist/embedding/model-download.js +41 -0
- package/dist/embedding/model-download.js.map +1 -0
- package/dist/embedding/model-installation.d.ts +17 -0
- package/dist/embedding/model-installation.d.ts.map +1 -0
- package/dist/embedding/model-installation.js +71 -0
- package/dist/embedding/model-installation.js.map +1 -0
- package/dist/embedding/model-manifest.d.ts +18 -0
- package/dist/embedding/model-manifest.d.ts.map +1 -0
- package/dist/embedding/model-manifest.js +86 -0
- package/dist/embedding/model-manifest.js.map +1 -0
- package/dist/embedding/openai-compatible-provider.d.ts +24 -0
- package/dist/embedding/openai-compatible-provider.d.ts.map +1 -0
- package/dist/embedding/openai-compatible-provider.js +330 -0
- package/dist/embedding/openai-compatible-provider.js.map +1 -0
- package/dist/embedding/presets/local-small.d.ts +8 -0
- package/dist/embedding/presets/local-small.d.ts.map +1 -0
- package/dist/embedding/presets/local-small.js +67 -0
- package/dist/embedding/presets/local-small.js.map +1 -0
- package/dist/embedding/presets/manifest.d.ts +27 -0
- package/dist/embedding/presets/manifest.d.ts.map +1 -0
- package/dist/embedding/presets/manifest.js +5 -0
- package/dist/embedding/presets/manifest.js.map +1 -0
- package/dist/embedding/profile.d.ts +10 -0
- package/dist/embedding/profile.d.ts.map +1 -0
- package/dist/embedding/profile.js +67 -0
- package/dist/embedding/profile.js.map +1 -0
- package/dist/embedding/provider.d.ts +13 -0
- package/dist/embedding/provider.d.ts.map +1 -0
- package/dist/embedding/provider.js +17 -0
- package/dist/embedding/provider.js.map +1 -0
- package/dist/embedding/query-cache.d.ts +45 -0
- package/dist/embedding/query-cache.d.ts.map +1 -0
- package/dist/embedding/query-cache.js +181 -0
- package/dist/embedding/query-cache.js.map +1 -0
- package/dist/embedding/runtime.d.ts +14 -0
- package/dist/embedding/runtime.d.ts.map +1 -0
- package/dist/embedding/runtime.js +407 -0
- package/dist/embedding/runtime.js.map +1 -0
- package/dist/embedding/settings.d.ts +6 -0
- package/dist/embedding/settings.d.ts.map +1 -0
- package/dist/embedding/settings.js +69 -0
- package/dist/embedding/settings.js.map +1 -0
- package/dist/embedding/setup-lock.d.ts +7 -0
- package/dist/embedding/setup-lock.d.ts.map +1 -0
- package/dist/embedding/setup-lock.js +35 -0
- package/dist/embedding/setup-lock.js.map +1 -0
- package/dist/embedding/setup-service.d.ts +53 -0
- package/dist/embedding/setup-service.d.ts.map +1 -0
- package/dist/embedding/setup-service.js +184 -0
- package/dist/embedding/setup-service.js.map +1 -0
- package/dist/embedding/sqlite-vec-backend.d.ts +9 -0
- package/dist/embedding/sqlite-vec-backend.d.ts.map +1 -0
- package/dist/embedding/sqlite-vec-backend.js +106 -0
- package/dist/embedding/sqlite-vec-backend.js.map +1 -0
- package/dist/embedding/sqlite-vec-loader.d.ts +17 -0
- package/dist/embedding/sqlite-vec-loader.d.ts.map +1 -0
- package/dist/embedding/sqlite-vec-loader.js +51 -0
- package/dist/embedding/sqlite-vec-loader.js.map +1 -0
- package/dist/embedding/store.d.ts +66 -0
- package/dist/embedding/store.d.ts.map +1 -0
- package/dist/embedding/store.js +490 -0
- package/dist/embedding/store.js.map +1 -0
- package/dist/embedding/types.d.ts +126 -0
- package/dist/embedding/types.d.ts.map +1 -0
- package/dist/embedding/types.js +2 -0
- package/dist/embedding/types.js.map +1 -0
- package/dist/embedding/vector.d.ts +9 -0
- package/dist/embedding/vector.d.ts.map +1 -0
- package/dist/embedding/vector.js +90 -0
- package/dist/embedding/vector.js.map +1 -0
- package/dist/embedding/worker.d.ts +23 -0
- package/dist/embedding/worker.d.ts.map +1 -0
- package/dist/embedding/worker.js +84 -0
- package/dist/embedding/worker.js.map +1 -0
- package/dist/enno-oduno/schemas.d.ts +2 -2
- package/dist/ledger/checkpoint-contract.d.ts +2 -2
- package/dist/mcp/bounded-stdio-transport.d.ts +3 -0
- package/dist/mcp/bounded-stdio-transport.d.ts.map +1 -1
- package/dist/mcp/bounded-stdio-transport.js +15 -3
- package/dist/mcp/bounded-stdio-transport.js.map +1 -1
- package/dist/mcp/request-deadline.d.ts +51 -0
- package/dist/mcp/request-deadline.d.ts.map +1 -0
- package/dist/mcp/request-deadline.js +155 -0
- package/dist/mcp/request-deadline.js.map +1 -0
- package/dist/mcp/runtime-owner.d.ts +27 -0
- package/dist/mcp/runtime-owner.d.ts.map +1 -0
- package/dist/mcp/runtime-owner.js +129 -0
- package/dist/mcp/runtime-owner.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +83 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/memory/checkpoint-contract.d.ts +3 -3
- package/dist/memory/entries.d.ts.map +1 -1
- package/dist/memory/entries.js +13 -0
- package/dist/memory/entries.js.map +1 -1
- package/dist/memory/federated-retrieval.d.ts +3 -2
- package/dist/memory/federated-retrieval.d.ts.map +1 -1
- package/dist/memory/federated-retrieval.js +112 -31
- package/dist/memory/federated-retrieval.js.map +1 -1
- package/dist/memory/hybrid-retrieval.d.ts +9 -2
- package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
- package/dist/memory/hybrid-retrieval.js +60 -13
- package/dist/memory/hybrid-retrieval.js.map +1 -1
- package/dist/memory/retrieval.d.ts +4 -3
- package/dist/memory/retrieval.d.ts.map +1 -1
- package/dist/memory/retrieval.js +6 -6
- package/dist/memory/retrieval.js.map +1 -1
- package/dist/memory/scoped-memory.d.ts +3 -2
- package/dist/memory/scoped-memory.d.ts.map +1 -1
- package/dist/memory/scoped-memory.js +7 -3
- package/dist/memory/scoped-memory.js.map +1 -1
- package/dist/server/agent-application.js +1 -1
- package/dist/server/agent-application.js.map +1 -1
- package/dist/server/http.d.ts +17 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +79 -13
- package/dist/server/http.js.map +1 -1
- package/dist/skills/discovery-service.d.ts.map +1 -1
- package/dist/skills/discovery-service.js +10 -8
- package/dist/skills/discovery-service.js.map +1 -1
- package/dist/skills/find.d.ts +1 -0
- package/dist/skills/find.d.ts.map +1 -1
- package/dist/skills/find.js +1 -0
- package/dist/skills/find.js.map +1 -1
- package/dist/skills/materialization-authority.d.ts +1 -1
- package/dist/skills/materialization-authority.d.ts.map +1 -1
- package/dist/skills/materialization-authority.js +2 -2
- package/dist/skills/materialization-authority.js.map +1 -1
- package/dist/skills/providers/skills-sh-compat.d.ts.map +1 -1
- package/dist/skills/providers/skills-sh-compat.js +4 -2
- package/dist/skills/providers/skills-sh-compat.js.map +1 -1
- package/dist/skills/providers/skills-sh-v1.d.ts +2 -2
- package/dist/skills/providers/skills-sh-v1.d.ts.map +1 -1
- package/dist/skills/providers/skills-sh-v1.js +22 -4
- package/dist/skills/providers/skills-sh-v1.js.map +1 -1
- package/dist/skills/source/github-fetcher.d.ts.map +1 -1
- package/dist/skills/source/github-fetcher.js +8 -4
- package/dist/skills/source/github-fetcher.js.map +1 -1
- package/dist/skills/types.d.ts +3 -2
- package/dist/skills/types.d.ts.map +1 -1
- package/docs/agent-file.md +72 -0
- package/docs/agent-gateway.md +104 -0
- package/docs/architecture.md +12 -0
- package/docs/cli-contract.md +13 -0
- package/docs/client-compatibility.md +298 -0
- package/docs/database.md +11 -0
- package/docs/execution-ledger.md +89 -0
- package/docs/release-notes-0.1.18.md +103 -0
- package/docs/retrieval-evaluation.md +10 -0
- package/docs/security.md +11 -0
- package/docs/sqlite-driver-adr.md +8 -0
- package/migrations/021_semantic_embeddings.sql +122 -0
- package/migrations/022_embedding_setup_v2.sql +236 -0
- package/migrations/down/021_semantic_embeddings.sql +17 -0
- package/migrations/down/022_embedding_setup_v2.sql +133 -0
- package/package.json +10 -1
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
# Client compatibility policy
|
|
2
|
+
|
|
3
|
+
Status: global MCP integration for Codex, OpenCode, Claude Code, and profile-scoped Hermes Agent. Enno-Oduno continuation adapters are bounded and available for Codex, OpenCode, and Claude Code; Hermes has no Enno continuation adapter.
|
|
4
|
+
|
|
5
|
+
| Client | Global MCP registration | Global instructions | Managed standard skills | Hooks/plugins |
|
|
6
|
+
|---|---|---|---|---|
|
|
7
|
+
| Codex | managed table in `~/.codex/config.toml` (or `$CODEX_HOME`) | managed block in global `AGENTS.md` | `~/.agents/skills/{memory-reasoning,kiokuko-soul,kiokuko-enno-oduno,kiokuko-single-purpose-functions,kiokuko-ui-design-soul}` | bounded Stop hook when Enno-Oduno is enabled |
|
|
8
|
+
| OpenCode | managed `mcp.kiokuko` property in global `opencode.json`/`opencode.jsonc` | managed block in global `AGENTS.md` | global config `skills/{memory-reasoning,kiokuko-soul,kiokuko-enno-oduno,kiokuko-single-purpose-functions,kiokuko-ui-design-soul}` | bounded `session.idle` plugin when Enno-Oduno is enabled |
|
|
9
|
+
| Claude Code | managed `mcpServers.kiokuko` property in `~/.claude.json` (or `$CLAUDE_CONFIG_DIR/.claude.json`) | managed block in global `CLAUDE.md` | Claude config `skills/{memory-reasoning,kiokuko-soul,kiokuko-enno-oduno,kiokuko-single-purpose-functions,kiokuko-ui-design-soul}` | bounded Stop hook when Enno-Oduno is enabled |
|
|
10
|
+
| Hermes Agent | managed `mcp_servers.kiokuko` in the effective profile `config.yaml` | none | effective profile `skills/{memory-reasoning,kiokuko-soul,kiokuko-enno-oduno,kiokuko-single-purpose-functions,kiokuko-ui-design-soul}` | none |
|
|
11
|
+
| Other MCP clients | manual `kiokuko mcp` stdio registration | client-specific | not installed | none |
|
|
12
|
+
|
|
13
|
+
OpenCode global configuration follows XDG paths on every platform:
|
|
14
|
+
`$XDG_CONFIG_HOME/opencode`, or `~/.config/opencode` when unset. On Windows,
|
|
15
|
+
`~` resolves from `%USERPROFILE%`, falling back to `%HOME%`; `%APPDATA%` and
|
|
16
|
+
`%LOCALAPPDATA%` are not OpenCode global configuration roots.
|
|
17
|
+
|
|
18
|
+
Codex's current official documentation supports stdio MCP servers and global
|
|
19
|
+
configuration. OpenCode's current official documentation supports local MCP
|
|
20
|
+
commands and global rules. Claude Code supports user-scoped stdio MCP servers,
|
|
21
|
+
global `CLAUDE.md`, and auto-discovered skills. `kiokuko setup` uses the MCP and
|
|
22
|
+
instruction surfaces and installs the bundled `memory-reasoning`, `kiokuko-soul`, `kiokuko-enno-oduno`,
|
|
23
|
+
`kiokuko-single-purpose-functions`, and `kiokuko-ui-design-soul` skills in the selected supported clients by
|
|
24
|
+
default. The skills are copied from a fixed package manifest and never downloaded
|
|
25
|
+
during setup. `--no-standard-skills`
|
|
26
|
+
skips placement without deleting an existing copy.
|
|
27
|
+
|
|
28
|
+
Hermes Agent v0.20.4 uses a profile-scoped native stdio MCP client. Kiokuko writes
|
|
29
|
+
only the effective profile's `config.yaml` entry:
|
|
30
|
+
|
|
31
|
+
```yaml
|
|
32
|
+
mcp_servers:
|
|
33
|
+
# Managed by `kiokuko setup`.
|
|
34
|
+
kiokuko:
|
|
35
|
+
command: kiokuko
|
|
36
|
+
args: [mcp]
|
|
37
|
+
env:
|
|
38
|
+
KIOKUKO_SKILL_DISCOVERY: official
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
It does not create a global instruction file, Hermes plugin, or Hermes hook.
|
|
42
|
+
Hermes's built-in memory and Kiokuko's bundled skills remain separate capabilities.
|
|
43
|
+
Use `kiokuko setup --clients hermes`, then restart Hermes Agent or start a new
|
|
44
|
+
session; `/reload-mcp` only reloads MCP registration. Smoke-test with
|
|
45
|
+
`hermes mcp test kiokuko`.
|
|
46
|
+
|
|
47
|
+
- [Codex MCP configuration](https://learn.chatgpt.com/docs/extend/mcp)
|
|
48
|
+
- [Codex skills](https://developers.openai.com/codex/skills)
|
|
49
|
+
- [OpenCode MCP servers](https://opencode.ai/docs/mcp-servers/)
|
|
50
|
+
- [OpenCode rules](https://opencode.ai/docs/rules/)
|
|
51
|
+
- [OpenCode skills](https://opencode.ai/docs/skills)
|
|
52
|
+
- [Claude Code MCP servers](https://code.claude.com/docs/en/mcp)
|
|
53
|
+
- [Claude Code memory and CLAUDE.md](https://code.claude.com/docs/en/memory)
|
|
54
|
+
- [Claude Code skills](https://code.claude.com/docs/en/skills)
|
|
55
|
+
- [Hermes skills](https://github.com/NousResearch/hermes-agent/blob/main/website/docs/guides/work-with-skills.md)
|
|
56
|
+
|
|
57
|
+
## Guarantees and non-guarantees
|
|
58
|
+
|
|
59
|
+
Setup guarantees safe, repeatable configuration merging and makes the Kiokuko MCP
|
|
60
|
+
tools available in each configured client scope after that client reloads its
|
|
61
|
+
configuration and makes the bundled standard skills discoverable after a client
|
|
62
|
+
restart or new session. Global instructions request `task_prepare` before non-trivial work, grounded
|
|
63
|
+
`task_answer` calls when intake fields are missing, and checkpointing after
|
|
64
|
+
substantial verified work.
|
|
65
|
+
|
|
66
|
+
No supported client guarantees that a model will call an available tool for every
|
|
67
|
+
prompt. Therefore “automatic” means no per-repository install and no manual CLI
|
|
68
|
+
lifecycle after one-time setup; it does not mean Kiokuko intercepts every prompt
|
|
69
|
+
or response. For Hermes specifically, automatic/model use is best effort from
|
|
70
|
+
MCP tool descriptions.
|
|
71
|
+
|
|
72
|
+
The `kiokuko-soul` standard skill is the canonical first-read router. Managed
|
|
73
|
+
instruction surfaces require it before another bundled Kiokuko skill. Every
|
|
74
|
+
`task_prepare` call requires `soulRead: true` as an explicit claim that the
|
|
75
|
+
complete local Skill was read for that logical request, and the capability gate
|
|
76
|
+
requires an exact local `kiokuko-soul` descriptor for every task. Omission or
|
|
77
|
+
false attestation is invalid; missing or unknown capability availability returns
|
|
78
|
+
`required_capability_unavailable` even while intake needs an answer. A
|
|
79
|
+
namespaced, fetched, or reference-only skill does not satisfy the required
|
|
80
|
+
master SOUL. The boolean attestation is enforceable protocol evidence, not
|
|
81
|
+
remote proof that a model understood or followed the Skill.
|
|
82
|
+
|
|
83
|
+
The `memory-reasoning` standard skill is installed by default, but filesystem
|
|
84
|
+
placement is not proof that the current model loaded or followed it. For ready
|
|
85
|
+
build/debug tasks, clients advertise the exact local capability only when it is
|
|
86
|
+
actually available. If it is missing or availability is unknown, Kiokuko sets
|
|
87
|
+
`memoryPolicy.contextWithheld=true`, reports `memory_reasoning_missing` or
|
|
88
|
+
`memory_reasoning_unknown` in `memoryPolicy.withheldReason`, returns no actionable
|
|
89
|
+
ordinary memory, and leaves `nextAction=proceed`. An unmanaged same-name file
|
|
90
|
+
causes setup to fail closed; move or remove that file manually before rerunning
|
|
91
|
+
setup if Kiokuko should own the destination.
|
|
92
|
+
|
|
93
|
+
The UI standard skill is intended for explicit UI, UX, frontend, screen, SwiftUI,
|
|
94
|
+
accessibility, and equivalent Japanese-language tasks. `task_prepare` treats it
|
|
95
|
+
as a first-party recommendation only for such concrete terms; generic `design`,
|
|
96
|
+
backend-only work, and image-only generation do not trigger it.
|
|
97
|
+
|
|
98
|
+
The UI and function standard Skills use progressive disclosure. Their short
|
|
99
|
+
`SKILL.md` files are mandatory indexes, while versioned expert fragments are
|
|
100
|
+
selected for the concrete component, function, design decision, or WorkUnit.
|
|
101
|
+
Normal execution reads one to three fragments rather than every reference.
|
|
102
|
+
|
|
103
|
+
The single-purpose-functions standard skill applies to writing, modifying,
|
|
104
|
+
reviewing, debugging, and refactoring code across languages and repositories.
|
|
105
|
+
Its examples use typed TypeScript for concreteness, but the contracts explicitly
|
|
106
|
+
adapt to the target project's language, error model, persistence layer, and test
|
|
107
|
+
framework. `task_prepare` treats it as a first-party recommendation for concrete
|
|
108
|
+
coding terms in English or Japanese. Explicit no-code, documentation-only, and
|
|
109
|
+
image-only work do not trigger it. Kiokuko does not claim that availability alone
|
|
110
|
+
forces model use.
|
|
111
|
+
|
|
112
|
+
The Enno-Oduno standard skill is the role-level controller contract. Every
|
|
113
|
+
Enno-Oduno directive and WorkUnit retains `kiokuko-soul` first. Enno-Oduno
|
|
114
|
+
directives then require `kiokuko-enno-oduno` during intake, Oduno ideal
|
|
115
|
+
derivation, confirmation, final review, and Oduno meditation. A ready intake
|
|
116
|
+
enters `oduno_ideal`: `enno_ideal_submit` derives the optimal target from the
|
|
117
|
+
structured `task_prepare` handoff plus exactly one contribution per
|
|
118
|
+
Akinator-discovered Skill before Zenki can plan. After accepted final
|
|
119
|
+
verification, `oduno_meditation` inspects changed and approved paths for
|
|
120
|
+
evidence-backed obsolete test or function candidates without deleting them;
|
|
121
|
+
`enno_meditation_submit` persists that reflection and completes the run. The
|
|
122
|
+
controller skill itself is not inserted into Zenki's WorkUnit
|
|
123
|
+
Skill snapshot; Zenki continues to require the single-purpose-functions skill
|
|
124
|
+
for every code-changing plan. Every code-changing WorkUnit persists one to
|
|
125
|
+
three registered `expertRefs`; UI WorkUnits include at least one `code.*` and
|
|
126
|
+
one `ui.*` expert. Unknown, duplicate, missing, or oversized expert mixtures
|
|
127
|
+
are rejected before Skill discovery or repository mutation.
|
|
128
|
+
|
|
129
|
+
A `needs_confirmation` response carries
|
|
130
|
+
`ennoOduno.directive.userFacingConfirmation`, a deterministic display
|
|
131
|
+
projection of the decided contract. It presents scope paths, exclusions,
|
|
132
|
+
completion criteria, work items with display-number dependencies, skills with
|
|
133
|
+
their reference-only status, expertise with selection reasons, focused and
|
|
134
|
+
final checks (executable, arguments, directory, and timeout kept separate, never
|
|
135
|
+
joined into a shell command), and the attempt limit, each labeled with its
|
|
136
|
+
provenance basis (`user`, `repository`, or `proposal` for inferred fields). The
|
|
137
|
+
directive also carries a fixed confirmation report schema and objective, so the
|
|
138
|
+
client model presents every item in the user's language, translating headings
|
|
139
|
+
only, without raw directive JSON, internal field names, WorkUnit IDs, expert
|
|
140
|
+
IDs, or verifier IDs, and then waits for an explicit approve, revise, or cancel
|
|
141
|
+
through `enno_answer` at the confirmed contract revision. Projection content
|
|
142
|
+
that resembles a secret or exceeds the 64 KiB display bound rejects the plan
|
|
143
|
+
submit instead of being redacted or truncated. `needs_confirmation` stays
|
|
144
|
+
outside the Codex Stop hook, Claude Code Stop hook, and OpenCode
|
|
145
|
+
`session.idle` continuation candidates, so no client auto-continues through a
|
|
146
|
+
user confirmation.
|
|
147
|
+
|
|
148
|
+
Final Review is two-phase. `enno_verify_prepare` runs the approved final
|
|
149
|
+
verifiers outside database transactions with shell disabled and a
|
|
150
|
+
repository-relative cwd, stores evidence bound to contract/mutation revision,
|
|
151
|
+
verifier specification, and complete repository state, and only then permits
|
|
152
|
+
the final-review advisory fanout. `enno_finish` rechecks that state, decides
|
|
153
|
+
accept/replan/block from the complete stored context, never spawns a subprocess,
|
|
154
|
+
and rejects unready evidence as a conflict. Passing tests alone do not accept a
|
|
155
|
+
run; Enno-Oduno must accept the current contract.
|
|
156
|
+
|
|
157
|
+
All supported clients consume the same bounded `ENNO_INPUT_INVALID` validation
|
|
158
|
+
envelope and the same WorkUnit-local route contract. New verifier cwd values are
|
|
159
|
+
repository-relative. Continuation adapters transport opaque resume tokens and
|
|
160
|
+
route epochs; Goki transports the returned execution lease. Old tokens become
|
|
161
|
+
invalid after rerouting, and an active lease prevents another client from
|
|
162
|
+
rerouting or reporting the same WorkUnit.
|
|
163
|
+
|
|
164
|
+
If the environment information needed to start a plan is absent or no longer
|
|
165
|
+
matches the task-preparation binding, the MCP result instead contains a
|
|
166
|
+
non-mutating `userFacingRecovery` projection. Clients translate and present
|
|
167
|
+
only its what-happened, work-state, resolution, and choices. Every choice is
|
|
168
|
+
shown as its translated label and recommendation, followed by its translated
|
|
169
|
+
`whenToChoose` intent and exact `whatHappens` result. The machine `action`,
|
|
170
|
+
internal tool and field names, catalog, hashes, run identity, revisions,
|
|
171
|
+
presentation version, reason codes, and raw JSON remain hidden. The client must
|
|
172
|
+
not retry, cancel, or create a replacement automatically.
|
|
173
|
+
|
|
174
|
+
For missing information, continuing attaches the complete catalog retained by
|
|
175
|
+
the host and reuses the same attempt; reviewing asks the user for changes and
|
|
176
|
+
starts no implementation before the answer; cancelling ends the current attempt
|
|
177
|
+
without a replacement. For changed environment information, restarting first
|
|
178
|
+
cancels the active planning attempt and then opens a new task with the current
|
|
179
|
+
environment and agreed plan. Review-before-restart asks for changes first, then
|
|
180
|
+
cancels and replaces the active attempt only after the answer. If a legacy
|
|
181
|
+
attempt already ended because the catalog was provably lost during plan
|
|
182
|
+
submission, both restart choices leave that terminal attempt unchanged and open
|
|
183
|
+
a replacement only after the user chooses and, for review, answers. Cancelling
|
|
184
|
+
an already-ended attempt creates nothing.
|
|
185
|
+
|
|
186
|
+
For new Codex, OpenCode, and Claude Code setup, Enno-Oduno continuation is
|
|
187
|
+
enabled by default; existing managed installations remain unchanged until
|
|
188
|
+
`--enno-oduno on` is selected. Setup installs only the bounded native adapter
|
|
189
|
+
for each of those clients: a Codex or Claude Code Stop hook, or an OpenCode
|
|
190
|
+
`session.idle` plugin. Hermes receives no Enno continuation adapter. During an
|
|
191
|
+
adapter continuation, `client_session_id` is routing metadata rather than
|
|
192
|
+
authorization ownership. A valid short-lived resume token wins; otherwise the current
|
|
193
|
+
local Codex, Claude Code, or OpenCode session may atomically reroute the single
|
|
194
|
+
unambiguous active run in the canonical repository, including across client
|
|
195
|
+
kinds. Rerouting increments the route epoch and invalidates old tokens; an
|
|
196
|
+
active WorkUnit execution lease blocks it. Multiple active candidates remain
|
|
197
|
+
unchanged. A per-session continuation limit stops only that session and leaves
|
|
198
|
+
the run and ledger active for another local project client. Hermes has no
|
|
199
|
+
automatic hook but may continue the same run through MCP with its exact run
|
|
200
|
+
identity. The public `clientBinding` field reports this current route; its
|
|
201
|
+
`bound` state does not grant ownership.
|
|
202
|
+
upgrade, `--enno-oduno off` removes only the exact Enno-owned adapter, while
|
|
203
|
+
setup also removes only the byte-exact retired OpenCode guard and the one exact
|
|
204
|
+
retired Claude prompt handler. A modified, duplicate, relocated, or partial
|
|
205
|
+
legacy identity is `CONFLICT` and requires manual review; unrelated client
|
|
206
|
+
settings are preserved.
|
|
207
|
+
|
|
208
|
+
`task_prepare` can accept an ephemeral catalog of skill and MCP-tool names from
|
|
209
|
+
the calling client. Kiokuko matches Akinator policy recommendations and task
|
|
210
|
+
terms against that catalog, but cannot enumerate another MCP server or a
|
|
211
|
+
client's private skill registry by itself. A result therefore distinguishes
|
|
212
|
+
`available`, `missing`, and `unknown`; it never treats a fetched `SKILL.md` as
|
|
213
|
+
installed or executable. External skill discovery is controlled independently
|
|
214
|
+
by `KIOKUKO_SKILL_DISCOVERY=off|official|community` and defaults to `official`.
|
|
215
|
+
When enabled, Kiokuko compares the project fingerprint with relevant client
|
|
216
|
+
skills rather than checking whether the catalog is globally empty. An omitted
|
|
217
|
+
catalog is treated as unknown availability; official reference-only discovery
|
|
218
|
+
may still proceed, but fetched skills are never treated as installed or
|
|
219
|
+
executable. Akinator discovery and `kiokuko skills find` share the same
|
|
220
|
+
provider-backed `findSkills` operation. There is no legacy fixed-source sync or
|
|
221
|
+
guessed-source fallback; bounded exact verification of a reviewed,
|
|
222
|
+
catalog-pinned source remains.
|
|
223
|
+
|
|
224
|
+
`task_prepare` also requires a bounded opaque `requestId`. Clients create a new
|
|
225
|
+
ID for every logical user request, including a later request with identical task
|
|
226
|
+
text, and reuse an ID only for an exact transport retry. Reusing an ID with
|
|
227
|
+
changed bound intake input is `CONFLICT`; `client.sessionId` is not a turn or
|
|
228
|
+
request identity. The raw request ID is not stored.
|
|
229
|
+
The normalized context budget is part of the bound request and every
|
|
230
|
+
`task_answer` must repeat it; a changed budget conflicts before intake mutation.
|
|
231
|
+
|
|
232
|
+
The legacy ungated `guide context` path was removed. Task-aware context must use
|
|
233
|
+
`task_prepare` / `task_answer` or the generic Agent bridge so the same
|
|
234
|
+
`kiokuko-soul` hard gate applies. External Skill discovery belongs to
|
|
235
|
+
`task_prepare` or the explicit `skills find` / `skills import` commands.
|
|
236
|
+
|
|
237
|
+
Every `task_answer` request must include the exact `run.runId`, capability
|
|
238
|
+
catalog, and context budget supplied to `task_prepare`; clients must not fall
|
|
239
|
+
back to session-only run lookup or replace those bindings between answers. Inspect
|
|
240
|
+
`nextAction` and `memoryPolicy` after every `task_prepare` and `task_answer` response. Every task
|
|
241
|
+
requires the exact local `kiokuko-soul`; missing or unknown availability returns
|
|
242
|
+
`required_capability_unavailable`, even while intake needs an answer. For a ready
|
|
243
|
+
build/debug task with actionable ordinary memory, missing or unknown
|
|
244
|
+
`memory-reasoning` alone sets `memoryPolicy.contextWithheld=true`, reports
|
|
245
|
+
`memory_reasoning_missing` or `memory_reasoning_unknown` in
|
|
246
|
+
`memoryPolicy.withheldReason`, withholds that memory, and leaves `nextAction=proceed` so
|
|
247
|
+
the client can continue from repository evidence. When it is available, the
|
|
248
|
+
client must read the local `memory-reasoning` Skill before modifying code and
|
|
249
|
+
convert recalled claims that affect the task into verified premises, falsifiable
|
|
250
|
+
invariants, concrete counterexamples, and regression tests. Catalog availability
|
|
251
|
+
alone does not satisfy this execution contract.
|
|
252
|
+
`context: null` with `memoryPolicy.contextWithheld=true` is the explicit
|
|
253
|
+
withholding state and persists no delivery. A non-null empty context with a null
|
|
254
|
+
delivery ID means there was no actionable candidate; clients must not collapse
|
|
255
|
+
these states.
|
|
256
|
+
If the client cannot obtain the Kiokuko policy for a non-trivial build/debug
|
|
257
|
+
request, it must also stop and report that boundary. Repository-only
|
|
258
|
+
continuation for such a request is allowed only after the policy establishes
|
|
259
|
+
that no Kiokuko memory was delivered or used.
|
|
260
|
+
|
|
261
|
+
The latest returned `intake.question` is authoritative for every answer. If
|
|
262
|
+
`question.options` is non-null, submit exactly one returned option as `value`.
|
|
263
|
+
If `options` is null, submit grounded non-empty free text. Repeat the loop until
|
|
264
|
+
`intake.status` is `ready` or `exhausted`; `target` and `expected` require
|
|
265
|
+
grounded text and are not one-word enums.
|
|
266
|
+
|
|
267
|
+
Run-bound `memory_checkpoint` has the same intake precondition across MCP,
|
|
268
|
+
scoped memory, and the Agent Gateway: only `active` runs may be closed by a
|
|
269
|
+
successful checkpoint. If `task_prepare` or `task_answer` returns
|
|
270
|
+
`needs_answer` with `nextAction=answer_from_evidence_or_ask_user`, the client
|
|
271
|
+
must finish every required `task_answer` question before retrying. The MCP
|
|
272
|
+
tool returns `isError=true` with fixed text and structured fields
|
|
273
|
+
`code=CHECKPOINT_RUN_NOT_ACTIVE`, `reason`, `runStatus`, `nextAction`, and
|
|
274
|
+
`retryableAfterStateChange`; arbitrary internal messages and details are never
|
|
275
|
+
forwarded. A terminal run returns `reason=run_terminal` and `nextAction=stop`.
|
|
276
|
+
|
|
277
|
+
The MCP checkpoint payload is closed and has two forms. A standalone
|
|
278
|
+
checkpoint contains at least one memory and omits `runId`, `outcome`,
|
|
279
|
+
`deliveryId`, `feedback`, and `evidence`. A run-bound checkpoint requires an
|
|
280
|
+
active exact `runId`, an explicit terminal `outcome`, and at least one
|
|
281
|
+
non-empty `memories`, `feedback`, or `evidence` lane. Outcome-only, empty
|
|
282
|
+
evidence, empty feedback, and invented evidence fields such as `checks` are
|
|
283
|
+
invalid. Evidence fields are limited to `changedPaths`, `errorSignatures`,
|
|
284
|
+
`commands`, `tests`, and `verification`; feedback items are limited to
|
|
285
|
+
`entryId`, `entryRevision`, `verdict`, and `comment`.
|
|
286
|
+
|
|
287
|
+
## Scope boundary
|
|
288
|
+
|
|
289
|
+
The stdio MCP server calls Kiokuko's memory services only through
|
|
290
|
+
`task_prepare`, `task_answer`, and lifecycle tools. It never exposes the SQLite
|
|
291
|
+
file or a direct recall tool. Human/operator CLI and Web inspection remains
|
|
292
|
+
management-only. Task context is limited to the resolved current repository
|
|
293
|
+
and/or the reserved global workspace; it never searches unrelated project
|
|
294
|
+
workspaces. Writes are candidate-only, untrusted, bounded, content-hash
|
|
295
|
+
idempotent, audited, and passed through secret detection.
|
|
296
|
+
|
|
297
|
+
The generic Agent Gateway remains available for explicit execution-ledger
|
|
298
|
+
workflows and applies the same task capability gate.
|
package/docs/database.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Embedding database changes
|
|
2
|
+
|
|
3
|
+
Migration 022 rebuilds the released semantic projection tables to allow both
|
|
4
|
+
v1 OpenAI-compatible history and v2 local profiles. It adds singleton settings,
|
|
5
|
+
model installation metadata, and durable setup runs. Migration SQL performs no
|
|
6
|
+
network access, model loading, or vector generation.
|
|
7
|
+
|
|
8
|
+
Old v1 profiles, vectors, jobs, and query cache rows remain available. An old
|
|
9
|
+
active profile is represented as requiring setup while runtime mode remains
|
|
10
|
+
off. The manual down migration requires a backup and refuses to silently
|
|
11
|
+
convert a local v2 profile.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Execution ledger
|
|
2
|
+
|
|
3
|
+
The execution ledger is an append-oriented audit of agent runs. It is separate from curated memory (`entries`, `entry_revisions`, `entry_revision_tags`, `entry_links`) and from memory mutation audit (`audit_events`). A ledger event never becomes verified memory automatically.
|
|
4
|
+
|
|
5
|
+
## Storage model
|
|
6
|
+
|
|
7
|
+
Migration `004_agent_gateway.sql` adds:
|
|
8
|
+
|
|
9
|
+
- `ledger_runs`: immutable workspace/client/protocol/capture/coverage identity and mutable lifecycle cursor/status.
|
|
10
|
+
- `run_intakes`: one-to-one link from a run to an existing Akinator session, including policy/schema versions, field sources, initial profile hash, and recommended tags.
|
|
11
|
+
- `intake_feedback`: question/profile feedback with XOR target and actor/idempotency uniqueness.
|
|
12
|
+
- `ledger_events`: contiguous local sequence, source identity, canonical/source types, bounded sanitized payload, redaction metadata, and hash-chain fields.
|
|
13
|
+
- `ledger_evidence`: bounded command/test/file/diff/URL/artifact locators and digests; never binary or unlimited output.
|
|
14
|
+
- `context_deliveries` and `context_delivery_entries`: exact cursor/profile/query/policy/budget and selected immutable entry revision/rank/score/reason. The child row has a composite foreign key to `entry_revisions`, so a delivery cannot reference a missing or silently substituted revision.
|
|
15
|
+
- `context_feedback` and `run_feedback`: explicit weak ranking signals and outcome/recommendation feedback.
|
|
16
|
+
- `ledger_memory_links`: provenance from run/event/delivery to promoted candidate memory.
|
|
17
|
+
- `ledger_purge_audit`: content-free tombstones after privacy purge.
|
|
18
|
+
|
|
19
|
+
Migration `010_nudge_deliveries.sql` adds:
|
|
20
|
+
|
|
21
|
+
- `nudge_deliveries`: presentation history for selected advisory nudges. It stores the run, policy version, checkpoint identity, logical occurrence, code, sequence, priority, and bounded evidence/reference ID snapshots, but not rendered message text.
|
|
22
|
+
|
|
23
|
+
Migration `011_nudge_integrity.sql` adds database guards for the supported nudge policy, code/priority pairs, and bounded JSON snapshots.
|
|
24
|
+
|
|
25
|
+
Enno client routing writes `enno.client_bound` for the first session route and
|
|
26
|
+
`enno.client_rebound` for later route changes. The payload records the previous
|
|
27
|
+
and current client kind, session ID, and version projection; a rebound clears
|
|
28
|
+
the old version. These events audit routing changes and do not confer ownership
|
|
29
|
+
or advance the Enno contract state.
|
|
30
|
+
|
|
31
|
+
The Enno execution ledger also uses database-backed ownership rows rather than
|
|
32
|
+
process memory. Resume tokens are stored only as hashes and bind a route epoch;
|
|
33
|
+
rerouting invalidates old epochs. A WorkUnit execution lease prevents two local
|
|
34
|
+
clients from reporting the same unit and blocks rerouting while current.
|
|
35
|
+
Operation receipts and verifier runs have `started`, `completed`, `failed`, and
|
|
36
|
+
`abandoned` states with bounded leases and owner nonces. Recovery atomically
|
|
37
|
+
abandons an expired owner before one new owner claims the exact operation; a
|
|
38
|
+
losing or stale nonce cannot complete it.
|
|
39
|
+
|
|
40
|
+
Final evidence binds contract revision, mutation revision, verifier
|
|
41
|
+
specification digest, and complete repository-state digests captured before and
|
|
42
|
+
after verifier execution. A verifier-caused repository mutation marks the run
|
|
43
|
+
unacceptable, and any later HEAD/index/worktree/untracked/symlink change makes
|
|
44
|
+
the evidence stale before `enno_finish` can commit.
|
|
45
|
+
|
|
46
|
+
## Invariants
|
|
47
|
+
|
|
48
|
+
1. A run belongs to one workspace for its lifetime.
|
|
49
|
+
2. One run links to one intake session, and one intake session links to one run; their workspaces must match.
|
|
50
|
+
3. `intake → active` is valid only after the linked session is `ready` or `exhausted`.
|
|
51
|
+
4. A run's coverage declaration is preserved rather than inferred upward.
|
|
52
|
+
5. `event_id` is globally unique; events also have unique `(run_id, sequence)` and unique `(run_id, source_event_id)` when present. Exact replay may identify an event by its explicit `eventId` or its run-scoped source identity; a different sanitized body conflicts.
|
|
53
|
+
6. A batch receives contiguous local sequence numbers in one `BEGIN IMMEDIATE` transaction or writes nothing.
|
|
54
|
+
7. Corrections and task-profile revisions are new events; prior event rows and finalized intake profiles are not rewritten.
|
|
55
|
+
8. Terminal runs reject new events except exact replay of an acknowledged idempotency/source identity.
|
|
56
|
+
9. Delivery rows reference entry revisions instead of copying memory bodies.
|
|
57
|
+
10. Feedback cannot mutate entry status/trust or an existing policy/session/profile.
|
|
58
|
+
11. Promotion is explicit, creates `candidate` memory only, and records provenance.
|
|
59
|
+
|
|
60
|
+
## Canonical event types
|
|
61
|
+
|
|
62
|
+
V1 recognizes intake/run/request/constraint/decision/step/approval/tool/command/file/test/verification/error/retry/cancellation/context/memory/task-profile/correction/source event families. Unknown client event names are retained only as `sourceType` behind the canonical `source.event` type; they are not invented or silently mapped.
|
|
63
|
+
|
|
64
|
+
## Integrity chain
|
|
65
|
+
|
|
66
|
+
Before storage, Kiokuko performs strict validation, creates an owned JSON snapshot, recursively sanitizes keys/values/URLs/paths/environment data, enforces byte limits, and canonicalizes JSON. Optional hash fields are represented explicitly as `null`, so the write-time preimage is identical after a SQLite round trip. The event hash commits to run ID, local sequence, canonical event data, sanitized payload, and previous hash. The first event uses the deterministic genesis hash. `doctor` checks contiguous sequence, run cursor, hash links, and orphans.
|
|
67
|
+
|
|
68
|
+
One sanitized event payload, task snapshot, profile-hints snapshot, intake-answer snapshot, or run-metadata snapshot is limited to 64 KiB. The limit is applied after sanitization and before hashing or opening a write transaction.
|
|
69
|
+
|
|
70
|
+
The chain is tamper-evident, not a signature or remote attestation. SQLite and same-user host security still define the local trust boundary.
|
|
71
|
+
|
|
72
|
+
## Projection and evidence freshness
|
|
73
|
+
|
|
74
|
+
Projection is deterministic through a committed local sequence. It derives current task profile from the immutable intake profile plus ordered `task_profile.revised` events, unresolved failures, unknown side effects, latest mutation, and latest passing verification. Evidence state is:
|
|
75
|
+
|
|
76
|
+
- `none`: no verification evidence;
|
|
77
|
+
- `failed`: latest relevant verification failed;
|
|
78
|
+
- `fresh`: passing verification is at or after the latest mutation;
|
|
79
|
+
- `stale`: a later mutation exists.
|
|
80
|
+
|
|
81
|
+
Minimum recommendation codes are `INTAKE_INCOMPLETE`, `VERIFY_AFTER_MUTATION`, `SIDE_EFFECT_OUTCOME_UNKNOWN`, `UNRESOLVED_FAILURE`, `CONTEXT_STALE`, `CONTRADICTORY_MEMORY`, `COVERAGE_INCOMPLETE`, and `PROMOTION_CANDIDATE`. Recommendations are stored data with evidence IDs, not commands.
|
|
82
|
+
|
|
83
|
+
Recommendations describe every currently applicable deterministic condition. A nudge is a separate presentation decision: at most one eligible advisory item selected from the v1 nudge subset (`SIDE_EFFECT_OUTCOME_UNKNOWN`, `UNRESOLVED_FAILURE`, and `VERIFY_AFTER_MUTATION`). `CONTRADICTORY_MEMORY` remains a recommendation but is not a nudge because the HTTP checkpoint broker does not currently expose its complete contradiction-pair state. Nudge candidates are derived from the committed projection and final capability-gated recommendations only; fixed messages and bounded evidence/reference IDs are returned, and rate limiting never removes the corresponding recommendation.
|
|
84
|
+
|
|
85
|
+
Nudge policy version `nudges.v1` shows one logical occurrence at most once per run, permits at most three deliveries per run, and requires at least three committed ledger sequence positions between deliveries of the same code. Eligibility uses occurrence identity and ledger sequence, not wall-clock time. `nudge_deliveries` is presentation history outside `ledger_events`, so delivering a nudge cannot change the execution projection.
|
|
86
|
+
|
|
87
|
+
## Archive, backup, purge
|
|
88
|
+
|
|
89
|
+
Existing memory export remains memory-only. Ledger export/import uses a separate deterministic manifest/checksum and includes nudge delivery history. Full SQLite backup contains memory, ledger, nudge deliveries, and feedback. Purge removes bounded content under explicit confirmation while preserving only a content-free tombstone and any promoted memory that has its own lifecycle.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Kiokuko 0.1.18
|
|
2
|
+
|
|
3
|
+
## External Skills
|
|
4
|
+
|
|
5
|
+
- Added bounded provider search, commit-pinned source validation, chunk limits, snapshot idempotency, and shared discovery single-flight.
|
|
6
|
+
- Added `kiokuko skills find|import|list|show|refresh|disable|enable|prune-cache`.
|
|
7
|
+
- Manual Skill import is now create-only and accepts only an exact locally
|
|
8
|
+
reviewed catalog identity. Re-importing an existing identity is a conflict;
|
|
9
|
+
use `skills refresh` for an existing managed Skill.
|
|
10
|
+
- Akinator discovery and `kiokuko skills find` now use one shared provider-backed search operation; the temporary capability-fallback response was removed.
|
|
11
|
+
- Akinator task preparation now defaults to reference-only `official` discovery; `off` remains available and `community` remains explicit opt-in.
|
|
12
|
+
- Interactive setup now asks before enabling audited community discovery and persists the selected mode in each managed MCP client configuration; batch setup uses `--skill-discovery`.
|
|
13
|
+
- Added authenticated local Web UI/API visibility for imported external skills.
|
|
14
|
+
- Disabled, stale, blocked, and unmanaged external references are excluded from retrieval and Curator globalization.
|
|
15
|
+
- Community-mode candidates fail closed without a successful provider audit.
|
|
16
|
+
- Unknown capability catalogs now force official-only discovery; imported Skill
|
|
17
|
+
reuse requires explicit applicability and mode-compatible provenance.
|
|
18
|
+
- Multiple relevant Skills can be imported from one repository, and lifecycle
|
|
19
|
+
CLI commands resolve both internal IDs and `owner/repository/skill` paths.
|
|
20
|
+
- Task preparation replay identity now includes the effective discovery mode
|
|
21
|
+
and a bounded normalized capability-catalog hash, so changed discovery input
|
|
22
|
+
cannot reuse an older context delivery.
|
|
23
|
+
- `task_prepare` now requires a bounded client-generated `requestId`. The same
|
|
24
|
+
ID and bound input replay one run; a changed bound request under that ID
|
|
25
|
+
conflicts, while a new ID opens a distinct run even for identical task text.
|
|
26
|
+
The raw ID is not stored and `client.sessionId` is not used as a turn ID. The
|
|
27
|
+
normalized context budget is bound and must match on `task_answer`.
|
|
28
|
+
- Generated agent/setup/MCP contracts now require an available local
|
|
29
|
+
`memory-reasoning` Skill to be read before code modification and recalled
|
|
30
|
+
claims to be converted into verified premises, invariants, counterexamples,
|
|
31
|
+
and regression tests; availability alone is not compliance.
|
|
32
|
+
- A v1 provider response with exact HTTP 401 authentication failure falls back
|
|
33
|
+
once per query to the Compatibility Provider, with provider-separated
|
|
34
|
+
negative and result caches. Other authentication and protocol failures stop.
|
|
35
|
+
- Removed legacy fixed-source sync and guessed-source fallback. Bounded exact
|
|
36
|
+
verification of reviewed catalog-pinned sources remains. The ungated
|
|
37
|
+
`guide context` compatibility command was removed; task-aware ContextBroker
|
|
38
|
+
output is capability-gated.
|
|
39
|
+
|
|
40
|
+
External skills remain untrusted candidate references. Kiokuko does not install,
|
|
41
|
+
execute, verify, globalize, or register fetched skill content automatically.
|
|
42
|
+
|
|
43
|
+
## Fail-closed storage and setup
|
|
44
|
+
|
|
45
|
+
- Fixed Windows OpenCode setup writing MCP configuration, global instructions,
|
|
46
|
+
and bundled skills under `%APPDATA%\opencode`; setup now follows OpenCode's
|
|
47
|
+
XDG global directory resolution.
|
|
48
|
+
- Setup now rejects duplicate or semantically colliding JSON/TOML configuration,
|
|
49
|
+
malformed UTF-8, symlink escapes, and concurrent target changes before it can
|
|
50
|
+
silently merge or overwrite them. Exact concurrent `use` results converge once;
|
|
51
|
+
incompatible state remains an explicit conflict.
|
|
52
|
+
- Migration and repository transactions now surface rollback failures, and
|
|
53
|
+
verified pre-migration backups complete before any schema mutation.
|
|
54
|
+
- Node.js 24.16 is now the minimum runtime. Manual and pre-migration SQLite
|
|
55
|
+
backups serialize the exact already-open connection and install a verified,
|
|
56
|
+
create-only artifact; the retired pathname-reopening backup subprocess and
|
|
57
|
+
overwrite behavior were removed. `kiokuko backup` no longer initializes or
|
|
58
|
+
migrates its source.
|
|
59
|
+
- Project binding rejects the reserved global identity. Forced rebinding now
|
|
60
|
+
requires a distinct repository/workspace pair and performs an exact database
|
|
61
|
+
location compare-and-swap or fails; it never mutates a repository workspace
|
|
62
|
+
in place or silently retains the old identity. Moving `agentFile` removes
|
|
63
|
+
only the old marked block, preserves human bytes and mode, and conditionally
|
|
64
|
+
restores all owned file mutations if a later step fails. Skipping an agent
|
|
65
|
+
write rejects any stale managed block at the prospective target.
|
|
66
|
+
- Repository binding/template versions are downgrade-protected across files and
|
|
67
|
+
SQLite metadata. Missing, malformed, corrupt, or future version metadata fails
|
|
68
|
+
explicitly. An indeterminate SQLite commit is surfaced as such and retains
|
|
69
|
+
the matching installed files instead of risking split-brain compensation.
|
|
70
|
+
- Stored revision chains, hashes, structured scope, projections, and context
|
|
71
|
+
replay state are validated from their exact persisted identities. Corruption
|
|
72
|
+
fails explicitly instead of being skipped or normalized into a new identity.
|
|
73
|
+
- Migration 012 validates the persisted structural identity of released
|
|
74
|
+
`context-ranking-v2` and `context-ranking-v3` scoped deliveries during setup.
|
|
75
|
+
Original delivery IDs, policy versions, character metadata, delivery items,
|
|
76
|
+
and all historical references are preserved. Legacy preview text was not
|
|
77
|
+
persisted and is not reconstructed during upgrade. Legacy deliveries remain
|
|
78
|
+
available for audit and feedback references but are never replayed as current
|
|
79
|
+
`context-ranking-v4` context; invalid persisted legacy structure aborts the
|
|
80
|
+
migration transaction. New scoped deliveries continue to use
|
|
81
|
+
`context-ranking-v4`.
|
|
82
|
+
- Migration 009 transactionally rewrites the one exact released locale-ordered
|
|
83
|
+
revision preimage to the canonical hash and scope. Forged preimages and
|
|
84
|
+
canonical collisions abort the upgrade; runtime compatibility hashing was
|
|
85
|
+
removed completely.
|
|
86
|
+
- Workspace archive v2 is intentionally limited to revision-1 current state.
|
|
87
|
+
Import/export use one strict canonical format, bounded input, complete secret
|
|
88
|
+
scanning, snapshot-consistent reads, and create-only output. Use a full SQLite
|
|
89
|
+
backup when immutable revision history must be preserved.
|
|
90
|
+
|
|
91
|
+
## Model task boundary
|
|
92
|
+
|
|
93
|
+
- Removed the direct model-facing `memory_recall` and
|
|
94
|
+
`claude_prompt_context` MCP tools. Task memory now enters through
|
|
95
|
+
`task_prepare` / `task_answer`; checkpoint and Curator tools remain lifecycle
|
|
96
|
+
operations.
|
|
97
|
+
- Removed generic JSON `call` operations that returned memory through `read`,
|
|
98
|
+
`search`, or scoped/unscoped `recall`. Direct CLI/Web inspection remains a
|
|
99
|
+
human/operator management surface.
|
|
100
|
+
- Setup no longer installs Claude prompt hooks or the OpenCode loop guard and
|
|
101
|
+
no longer accepts their CLI options. During upgrade it removes only the exact
|
|
102
|
+
retired managed hook/guard; modified or ambiguous legacy identities fail
|
|
103
|
+
explicitly and unrelated settings are preserved.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Retrieval evaluation
|
|
2
|
+
|
|
3
|
+
The existing evaluation keeps lexical and exact-signal lanes as baselines and
|
|
4
|
+
preserves weighted reciprocal-rank fusion. Local semantic evaluation covers
|
|
5
|
+
Japanese, English, Simplified Chinese, Korean, technical identifiers, stale
|
|
6
|
+
vectors, scope boundaries, and query-cache privacy.
|
|
7
|
+
|
|
8
|
+
Run the deterministic suite with `npm run test:evaluation`. Run the installed
|
|
9
|
+
model probe with `node scripts/run-local-embedding-smoke.mjs --offline` when a
|
|
10
|
+
verified local model directory is available.
|
package/docs/security.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Embedding security
|
|
2
|
+
|
|
3
|
+
The local-small preset fixes the repository, full revision, required files,
|
|
4
|
+
sizes, and SHA-256 values. Arbitrary repositories, URLs, paths, extensions,
|
|
5
|
+
and remote code are not accepted. Files are verified before model loading;
|
|
6
|
+
staging is private and final installation is atomic.
|
|
7
|
+
|
|
8
|
+
Status, doctor, progress, and errors do not include memory text, query text,
|
|
9
|
+
credentials, redirect URLs, or absolute model paths. Legacy embedding
|
|
10
|
+
environment variables are detected by name only and are not used as runtime
|
|
11
|
+
configuration.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# SQLite driver ADR
|
|
2
|
+
|
|
3
|
+
Kiokuko keeps JavaScript exact-cosine search as the portable fallback and uses
|
|
4
|
+
the package-owned sqlite-vec extension only when the configured backend is
|
|
5
|
+
`auto` or `sqlite-vec` and the extension loads successfully. The setup model
|
|
6
|
+
and embedding profile are independent of that backend choice. Extension
|
|
7
|
+
loading is disabled immediately after a successful load, and user-provided
|
|
8
|
+
native extension paths are not accepted.
|