@askdkc/kiokuko 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +112 -0
  3. package/README.ko.md +112 -0
  4. package/README.md +147 -0
  5. package/README.zh-CN.md +112 -0
  6. package/dist/agent-file/atomic-write.d.ts +6 -0
  7. package/dist/agent-file/atomic-write.d.ts.map +1 -0
  8. package/dist/agent-file/atomic-write.js +36 -0
  9. package/dist/agent-file/atomic-write.js.map +1 -0
  10. package/dist/agent-file/managed-block.d.ts +12 -0
  11. package/dist/agent-file/managed-block.d.ts.map +1 -0
  12. package/dist/agent-file/managed-block.js +56 -0
  13. package/dist/agent-file/managed-block.js.map +1 -0
  14. package/dist/agent-file/render.d.ts +14 -0
  15. package/dist/agent-file/render.d.ts.map +1 -0
  16. package/dist/agent-file/render.js +41 -0
  17. package/dist/agent-file/render.js.map +1 -0
  18. package/dist/akinator/domain.d.ts +25 -0
  19. package/dist/akinator/domain.d.ts.map +1 -0
  20. package/dist/akinator/domain.js +255 -0
  21. package/dist/akinator/domain.js.map +1 -0
  22. package/dist/akinator/orchestrator.d.ts +8 -0
  23. package/dist/akinator/orchestrator.d.ts.map +1 -0
  24. package/dist/akinator/orchestrator.js +11 -0
  25. package/dist/akinator/orchestrator.js.map +1 -0
  26. package/dist/akinator/service.d.ts +35 -0
  27. package/dist/akinator/service.d.ts.map +1 -0
  28. package/dist/akinator/service.js +296 -0
  29. package/dist/akinator/service.js.map +1 -0
  30. package/dist/akinator/store.d.ts +96 -0
  31. package/dist/akinator/store.d.ts.map +1 -0
  32. package/dist/akinator/store.js +583 -0
  33. package/dist/akinator/store.js.map +1 -0
  34. package/dist/akinator/types.d.ts +49 -0
  35. package/dist/akinator/types.d.ts.map +1 -0
  36. package/dist/akinator/types.js +2 -0
  37. package/dist/akinator/types.js.map +1 -0
  38. package/dist/bin/kiokuko.d.ts +3 -0
  39. package/dist/bin/kiokuko.d.ts.map +1 -0
  40. package/dist/bin/kiokuko.js +6 -0
  41. package/dist/bin/kiokuko.js.map +1 -0
  42. package/dist/cli.d.ts +10 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +362 -0
  45. package/dist/cli.js.map +1 -0
  46. package/dist/client/runtime-discovery.d.ts +15 -0
  47. package/dist/client/runtime-discovery.d.ts.map +1 -0
  48. package/dist/client/runtime-discovery.js +45 -0
  49. package/dist/client/runtime-discovery.js.map +1 -0
  50. package/dist/client/server-client.d.ts +20 -0
  51. package/dist/client/server-client.d.ts.map +1 -0
  52. package/dist/client/server-client.js +424 -0
  53. package/dist/client/server-client.js.map +1 -0
  54. package/dist/commands/agent.d.ts +10 -0
  55. package/dist/commands/agent.d.ts.map +1 -0
  56. package/dist/commands/agent.js +283 -0
  57. package/dist/commands/agent.js.map +1 -0
  58. package/dist/commands/backup.d.ts +5 -0
  59. package/dist/commands/backup.d.ts.map +1 -0
  60. package/dist/commands/backup.js +14 -0
  61. package/dist/commands/backup.js.map +1 -0
  62. package/dist/commands/call.d.ts +7 -0
  63. package/dist/commands/call.d.ts.map +1 -0
  64. package/dist/commands/call.js +10 -0
  65. package/dist/commands/call.js.map +1 -0
  66. package/dist/commands/doctor.d.ts +31 -0
  67. package/dist/commands/doctor.d.ts.map +1 -0
  68. package/dist/commands/doctor.js +142 -0
  69. package/dist/commands/doctor.js.map +1 -0
  70. package/dist/commands/export.d.ts +21 -0
  71. package/dist/commands/export.d.ts.map +1 -0
  72. package/dist/commands/export.js +68 -0
  73. package/dist/commands/export.js.map +1 -0
  74. package/dist/commands/import.d.ts +15 -0
  75. package/dist/commands/import.d.ts.map +1 -0
  76. package/dist/commands/import.js +265 -0
  77. package/dist/commands/import.js.map +1 -0
  78. package/dist/commands/init.d.ts +14 -0
  79. package/dist/commands/init.d.ts.map +1 -0
  80. package/dist/commands/init.js +26 -0
  81. package/dist/commands/init.js.map +1 -0
  82. package/dist/commands/ledger.d.ts +7 -0
  83. package/dist/commands/ledger.d.ts.map +1 -0
  84. package/dist/commands/ledger.js +66 -0
  85. package/dist/commands/ledger.js.map +1 -0
  86. package/dist/commands/link.d.ts +6 -0
  87. package/dist/commands/link.d.ts.map +1 -0
  88. package/dist/commands/link.js +6 -0
  89. package/dist/commands/link.js.map +1 -0
  90. package/dist/commands/promote.d.ts +6 -0
  91. package/dist/commands/promote.d.ts.map +1 -0
  92. package/dist/commands/promote.js +6 -0
  93. package/dist/commands/promote.js.map +1 -0
  94. package/dist/commands/purge.d.ts +10 -0
  95. package/dist/commands/purge.d.ts.map +1 -0
  96. package/dist/commands/purge.js +26 -0
  97. package/dist/commands/purge.js.map +1 -0
  98. package/dist/commands/read.d.ts +6 -0
  99. package/dist/commands/read.d.ts.map +1 -0
  100. package/dist/commands/read.js +4 -0
  101. package/dist/commands/read.js.map +1 -0
  102. package/dist/commands/recall.d.ts +6 -0
  103. package/dist/commands/recall.d.ts.map +1 -0
  104. package/dist/commands/recall.js +4 -0
  105. package/dist/commands/recall.js.map +1 -0
  106. package/dist/commands/record.d.ts +6 -0
  107. package/dist/commands/record.d.ts.map +1 -0
  108. package/dist/commands/record.js +4 -0
  109. package/dist/commands/record.js.map +1 -0
  110. package/dist/commands/search.d.ts +6 -0
  111. package/dist/commands/search.d.ts.map +1 -0
  112. package/dist/commands/search.js +4 -0
  113. package/dist/commands/search.js.map +1 -0
  114. package/dist/commands/serve.d.ts +34 -0
  115. package/dist/commands/serve.d.ts.map +1 -0
  116. package/dist/commands/serve.js +120 -0
  117. package/dist/commands/serve.js.map +1 -0
  118. package/dist/commands/server-status.d.ts +20 -0
  119. package/dist/commands/server-status.d.ts.map +1 -0
  120. package/dist/commands/server-status.js +21 -0
  121. package/dist/commands/server-status.js.map +1 -0
  122. package/dist/commands/server.d.ts +13 -0
  123. package/dist/commands/server.d.ts.map +1 -0
  124. package/dist/commands/server.js +89 -0
  125. package/dist/commands/server.js.map +1 -0
  126. package/dist/commands/setup.d.ts +32 -0
  127. package/dist/commands/setup.d.ts.map +1 -0
  128. package/dist/commands/setup.js +121 -0
  129. package/dist/commands/setup.js.map +1 -0
  130. package/dist/commands/supersede.d.ts +6 -0
  131. package/dist/commands/supersede.d.ts.map +1 -0
  132. package/dist/commands/supersede.js +6 -0
  133. package/dist/commands/supersede.js.map +1 -0
  134. package/dist/commands/use.d.ts +28 -0
  135. package/dist/commands/use.d.ts.map +1 -0
  136. package/dist/commands/use.js +176 -0
  137. package/dist/commands/use.js.map +1 -0
  138. package/dist/config/paths.d.ts +18 -0
  139. package/dist/config/paths.d.ts.map +1 -0
  140. package/dist/config/paths.js +104 -0
  141. package/dist/config/paths.js.map +1 -0
  142. package/dist/config/project-config.d.ts +10 -0
  143. package/dist/config/project-config.d.ts.map +1 -0
  144. package/dist/config/project-config.js +59 -0
  145. package/dist/config/project-config.js.map +1 -0
  146. package/dist/context/broker.d.ts +80 -0
  147. package/dist/context/broker.d.ts.map +1 -0
  148. package/dist/context/broker.js +437 -0
  149. package/dist/context/broker.js.map +1 -0
  150. package/dist/context/delivery.d.ts +66 -0
  151. package/dist/context/delivery.d.ts.map +1 -0
  152. package/dist/context/delivery.js +758 -0
  153. package/dist/context/delivery.js.map +1 -0
  154. package/dist/context/feedback.d.ts +75 -0
  155. package/dist/context/feedback.d.ts.map +1 -0
  156. package/dist/context/feedback.js +997 -0
  157. package/dist/context/feedback.js.map +1 -0
  158. package/dist/context/ranking.d.ts +98 -0
  159. package/dist/context/ranking.d.ts.map +1 -0
  160. package/dist/context/ranking.js +513 -0
  161. package/dist/context/ranking.js.map +1 -0
  162. package/dist/context/recommendations.d.ts +85 -0
  163. package/dist/context/recommendations.d.ts.map +1 -0
  164. package/dist/context/recommendations.js +342 -0
  165. package/dist/context/recommendations.js.map +1 -0
  166. package/dist/db/adapter.d.ts +25 -0
  167. package/dist/db/adapter.d.ts.map +1 -0
  168. package/dist/db/adapter.js +37 -0
  169. package/dist/db/adapter.js.map +1 -0
  170. package/dist/db/capabilities.d.ts +13 -0
  171. package/dist/db/capabilities.d.ts.map +1 -0
  172. package/dist/db/capabilities.js +25 -0
  173. package/dist/db/capabilities.js.map +1 -0
  174. package/dist/db/connection.d.ts +6 -0
  175. package/dist/db/connection.d.ts.map +1 -0
  176. package/dist/db/connection.js +42 -0
  177. package/dist/db/connection.js.map +1 -0
  178. package/dist/db/migrate.d.ts +9 -0
  179. package/dist/db/migrate.d.ts.map +1 -0
  180. package/dist/db/migrate.js +102 -0
  181. package/dist/db/migrate.js.map +1 -0
  182. package/dist/db/transaction.d.ts +4 -0
  183. package/dist/db/transaction.d.ts.map +1 -0
  184. package/dist/db/transaction.js +39 -0
  185. package/dist/db/transaction.js.map +1 -0
  186. package/dist/errors.d.ts +9 -0
  187. package/dist/errors.d.ts.map +1 -0
  188. package/dist/errors.js +32 -0
  189. package/dist/errors.js.map +1 -0
  190. package/dist/gateway/agent-service.d.ts +69 -0
  191. package/dist/gateway/agent-service.d.ts.map +1 -0
  192. package/dist/gateway/agent-service.js +581 -0
  193. package/dist/gateway/agent-service.js.map +1 -0
  194. package/dist/gateway/checkpoint-service.d.ts +42 -0
  195. package/dist/gateway/checkpoint-service.d.ts.map +1 -0
  196. package/dist/gateway/checkpoint-service.js +295 -0
  197. package/dist/gateway/checkpoint-service.js.map +1 -0
  198. package/dist/knowledge/sources.d.ts +72 -0
  199. package/dist/knowledge/sources.d.ts.map +1 -0
  200. package/dist/knowledge/sources.js +406 -0
  201. package/dist/knowledge/sources.js.map +1 -0
  202. package/dist/ledger/archive.d.ts +50 -0
  203. package/dist/ledger/archive.d.ts.map +1 -0
  204. package/dist/ledger/archive.js +1072 -0
  205. package/dist/ledger/archive.js.map +1 -0
  206. package/dist/ledger/hash.d.ts +22 -0
  207. package/dist/ledger/hash.d.ts.map +1 -0
  208. package/dist/ledger/hash.js +25 -0
  209. package/dist/ledger/hash.js.map +1 -0
  210. package/dist/ledger/maintenance.d.ts +78 -0
  211. package/dist/ledger/maintenance.d.ts.map +1 -0
  212. package/dist/ledger/maintenance.js +683 -0
  213. package/dist/ledger/maintenance.js.map +1 -0
  214. package/dist/ledger/projection.d.ts +37 -0
  215. package/dist/ledger/projection.d.ts.map +1 -0
  216. package/dist/ledger/projection.js +307 -0
  217. package/dist/ledger/projection.js.map +1 -0
  218. package/dist/ledger/promotion.d.ts +28 -0
  219. package/dist/ledger/promotion.d.ts.map +1 -0
  220. package/dist/ledger/promotion.js +308 -0
  221. package/dist/ledger/promotion.js.map +1 -0
  222. package/dist/ledger/query.d.ts +55 -0
  223. package/dist/ledger/query.d.ts.map +1 -0
  224. package/dist/ledger/query.js +321 -0
  225. package/dist/ledger/query.js.map +1 -0
  226. package/dist/ledger/redaction.d.ts +8 -0
  227. package/dist/ledger/redaction.d.ts.map +1 -0
  228. package/dist/ledger/redaction.js +40 -0
  229. package/dist/ledger/redaction.js.map +1 -0
  230. package/dist/ledger/store.d.ts +46 -0
  231. package/dist/ledger/store.d.ts.map +1 -0
  232. package/dist/ledger/store.js +324 -0
  233. package/dist/ledger/store.js.map +1 -0
  234. package/dist/ledger/types.d.ts +119 -0
  235. package/dist/ledger/types.d.ts.map +1 -0
  236. package/dist/ledger/types.js +22 -0
  237. package/dist/ledger/types.js.map +1 -0
  238. package/dist/ledger/validate.d.ts +10 -0
  239. package/dist/ledger/validate.d.ts.map +1 -0
  240. package/dist/ledger/validate.js +183 -0
  241. package/dist/ledger/validate.js.map +1 -0
  242. package/dist/mcp/server.d.ts +9 -0
  243. package/dist/mcp/server.d.ts.map +1 -0
  244. package/dist/mcp/server.js +86 -0
  245. package/dist/mcp/server.js.map +1 -0
  246. package/dist/memory/audit.d.ts +14 -0
  247. package/dist/memory/audit.d.ts.map +1 -0
  248. package/dist/memory/audit.js +16 -0
  249. package/dist/memory/audit.js.map +1 -0
  250. package/dist/memory/entries.d.ts +65 -0
  251. package/dist/memory/entries.d.ts.map +1 -0
  252. package/dist/memory/entries.js +200 -0
  253. package/dist/memory/entries.js.map +1 -0
  254. package/dist/memory/lifecycle.d.ts +29 -0
  255. package/dist/memory/lifecycle.d.ts.map +1 -0
  256. package/dist/memory/lifecycle.js +61 -0
  257. package/dist/memory/lifecycle.js.map +1 -0
  258. package/dist/memory/retrieval.d.ts +44 -0
  259. package/dist/memory/retrieval.d.ts.map +1 -0
  260. package/dist/memory/retrieval.js +174 -0
  261. package/dist/memory/retrieval.js.map +1 -0
  262. package/dist/memory/scoped-memory.d.ts +41 -0
  263. package/dist/memory/scoped-memory.d.ts.map +1 -0
  264. package/dist/memory/scoped-memory.js +65 -0
  265. package/dist/memory/scoped-memory.js.map +1 -0
  266. package/dist/memory/secrets.d.ts +6 -0
  267. package/dist/memory/secrets.d.ts.map +1 -0
  268. package/dist/memory/secrets.js +17 -0
  269. package/dist/memory/secrets.js.map +1 -0
  270. package/dist/memory/workspaces.d.ts +17 -0
  271. package/dist/memory/workspaces.d.ts.map +1 -0
  272. package/dist/memory/workspaces.js +92 -0
  273. package/dist/memory/workspaces.js.map +1 -0
  274. package/dist/repository/binding.d.ts +19 -0
  275. package/dist/repository/binding.d.ts.map +1 -0
  276. package/dist/repository/binding.js +78 -0
  277. package/dist/repository/binding.js.map +1 -0
  278. package/dist/repository/detect-root.d.ts +12 -0
  279. package/dist/repository/detect-root.d.ts.map +1 -0
  280. package/dist/repository/detect-root.js +57 -0
  281. package/dist/repository/detect-root.js.map +1 -0
  282. package/dist/repository/git-origin.d.ts +2 -0
  283. package/dist/repository/git-origin.d.ts.map +1 -0
  284. package/dist/repository/git-origin.js +15 -0
  285. package/dist/repository/git-origin.js.map +1 -0
  286. package/dist/repository/identity.d.ts +19 -0
  287. package/dist/repository/identity.d.ts.map +1 -0
  288. package/dist/repository/identity.js +23 -0
  289. package/dist/repository/identity.js.map +1 -0
  290. package/dist/repository/remote-url.d.ts +4 -0
  291. package/dist/repository/remote-url.d.ts.map +1 -0
  292. package/dist/repository/remote-url.js +36 -0
  293. package/dist/repository/remote-url.js.map +1 -0
  294. package/dist/security/sanitize.d.ts +4 -0
  295. package/dist/security/sanitize.d.ts.map +1 -0
  296. package/dist/security/sanitize.js +174 -0
  297. package/dist/security/sanitize.js.map +1 -0
  298. package/dist/serialization/envelope.d.ts +20 -0
  299. package/dist/serialization/envelope.d.ts.map +1 -0
  300. package/dist/serialization/envelope.js +11 -0
  301. package/dist/serialization/envelope.js.map +1 -0
  302. package/dist/serialization/validate.d.ts +31 -0
  303. package/dist/serialization/validate.d.ts.map +1 -0
  304. package/dist/serialization/validate.js +168 -0
  305. package/dist/serialization/validate.js.map +1 -0
  306. package/dist/server/agent-application.d.ts +6 -0
  307. package/dist/server/agent-application.d.ts.map +1 -0
  308. package/dist/server/agent-application.js +60 -0
  309. package/dist/server/agent-application.js.map +1 -0
  310. package/dist/server/app.d.ts +5 -0
  311. package/dist/server/app.d.ts.map +1 -0
  312. package/dist/server/app.js +87 -0
  313. package/dist/server/app.js.map +1 -0
  314. package/dist/server/auth.d.ts +2 -0
  315. package/dist/server/auth.d.ts.map +1 -0
  316. package/dist/server/auth.js +22 -0
  317. package/dist/server/auth.js.map +1 -0
  318. package/dist/server/http.d.ts +69 -0
  319. package/dist/server/http.d.ts.map +1 -0
  320. package/dist/server/http.js +349 -0
  321. package/dist/server/http.js.map +1 -0
  322. package/dist/server/idempotency.d.ts +12 -0
  323. package/dist/server/idempotency.d.ts.map +1 -0
  324. package/dist/server/idempotency.js +210 -0
  325. package/dist/server/idempotency.js.map +1 -0
  326. package/dist/server/instance-lock.d.ts +17 -0
  327. package/dist/server/instance-lock.d.ts.map +1 -0
  328. package/dist/server/instance-lock.js +118 -0
  329. package/dist/server/instance-lock.js.map +1 -0
  330. package/dist/server/router.d.ts +29 -0
  331. package/dist/server/router.d.ts.map +1 -0
  332. package/dist/server/router.js +112 -0
  333. package/dist/server/router.js.map +1 -0
  334. package/dist/server/routes/agent-events.d.ts +5 -0
  335. package/dist/server/routes/agent-events.d.ts.map +1 -0
  336. package/dist/server/routes/agent-events.js +46 -0
  337. package/dist/server/routes/agent-events.js.map +1 -0
  338. package/dist/server/routes/agent-intake.d.ts +5 -0
  339. package/dist/server/routes/agent-intake.d.ts.map +1 -0
  340. package/dist/server/routes/agent-intake.js +42 -0
  341. package/dist/server/routes/agent-intake.js.map +1 -0
  342. package/dist/server/routes/agent-promotions.d.ts +5 -0
  343. package/dist/server/routes/agent-promotions.d.ts.map +1 -0
  344. package/dist/server/routes/agent-promotions.js +52 -0
  345. package/dist/server/routes/agent-promotions.js.map +1 -0
  346. package/dist/server/routes/agent-runs.d.ts +25 -0
  347. package/dist/server/routes/agent-runs.d.ts.map +1 -0
  348. package/dist/server/routes/agent-runs.js +151 -0
  349. package/dist/server/routes/agent-runs.js.map +1 -0
  350. package/dist/server/routes/task5-support.d.ts +11 -0
  351. package/dist/server/routes/task5-support.d.ts.map +1 -0
  352. package/dist/server/routes/task5-support.js +22 -0
  353. package/dist/server/routes/task5-support.js.map +1 -0
  354. package/dist/server/routes/task5.d.ts +5 -0
  355. package/dist/server/routes/task5.d.ts.map +1 -0
  356. package/dist/server/routes/task5.js +72 -0
  357. package/dist/server/routes/task5.js.map +1 -0
  358. package/dist/server/runtime-descriptor.d.ts +24 -0
  359. package/dist/server/runtime-descriptor.d.ts.map +1 -0
  360. package/dist/server/runtime-descriptor.js +156 -0
  361. package/dist/server/runtime-descriptor.js.map +1 -0
  362. package/dist/server/write-queue.d.ts +20 -0
  363. package/dist/server/write-queue.d.ts.map +1 -0
  364. package/dist/server/write-queue.js +83 -0
  365. package/dist/server/write-queue.js.map +1 -0
  366. package/dist/setup/managed-text.d.ts +6 -0
  367. package/dist/setup/managed-text.d.ts.map +1 -0
  368. package/dist/setup/managed-text.js +42 -0
  369. package/dist/setup/managed-text.js.map +1 -0
  370. package/dist/setup/opencode-config.d.ts +3 -0
  371. package/dist/setup/opencode-config.d.ts.map +1 -0
  372. package/dist/setup/opencode-config.js +26 -0
  373. package/dist/setup/opencode-config.js.map +1 -0
  374. package/dist/setup/render.d.ts +8 -0
  375. package/dist/setup/render.d.ts.map +1 -0
  376. package/dist/setup/render.js +45 -0
  377. package/dist/setup/render.js.map +1 -0
  378. package/dist/web/server.d.ts +16 -0
  379. package/dist/web/server.d.ts.map +1 -0
  380. package/dist/web/server.js +424 -0
  381. package/dist/web/server.js.map +1 -0
  382. package/dist/web/ui.d.ts +2 -0
  383. package/dist/web/ui.d.ts.map +1 -0
  384. package/dist/web/ui.js +271 -0
  385. package/dist/web/ui.js.map +1 -0
  386. package/migrations/001_initial.sql +89 -0
  387. package/migrations/002_fts.sql +66 -0
  388. package/migrations/003_akinator.sql +30 -0
  389. package/migrations/004_agent_gateway.sql +259 -0
  390. package/package.json +45 -0
  391. package/templates/AGENTS.md +29 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kiokuko contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.ja.md ADDED
@@ -0,0 +1,112 @@
1
+ # Kiokuko
2
+
3
+ [English](README.md) | 日本語 | [简体中文](README.zh-CN.md) | [한국어](README.ko.md)
4
+
5
+ Kiokukoは、AIコーディングエージェント向けのモデル非依存な外部記憶です。npmでグローバルインストールすると、現在のOSユーザー用SQLiteデータベースに構造化された記憶を保存し、stdio MCP経由でCodexとOpenCodeに高水準のrecall/checkpointツールを提供します。
6
+
7
+ ## グローバルへのインストールと有効化
8
+
9
+ ```bash
10
+ npm install --global @askdkc/kiokuko
11
+ kiokuko setup
12
+ ```
13
+
14
+ npmパッケージ名は`@askdkc/kiokuko`ですが、インストールされるCLIコマンド名は引き続き`kiokuko`です。
15
+
16
+ セットアップ後にCodexとOpenCodeを再起動してください。それ以降は、グローバルな`AGENTS.md`が重要な作業の前後にKiokukoを呼び出すようエージェントへ指示し、ツールが必要になるとグローバル設定から`kiokuko mcp`が起動されます。
17
+
18
+ `setup`は明示的に実行する冪等な処理です。npmの`postinstall`がAIクライアントの設定を変更することはありません。既存のTOML/JSONC設定、コメント、指示内容、改行コード、ファイルモードを維持し、Kiokukoは管理対象セクションだけを更新します。
19
+
20
+ ```bash
21
+ # 書き込まずに変更対象ファイルと予定内容を確認
22
+ kiokuko setup --dry-run --json
23
+
24
+ # 一方のクライアントだけを設定
25
+ kiokuko setup --clients codex
26
+ kiokuko setup --clients opencode
27
+
28
+ # クライアントプロセスがnpmのPATHを継承しない場合は絶対パスを指定
29
+ kiokuko setup --command /absolute/path/to/kiokuko
30
+ ```
31
+
32
+ セットアップ対象は次のとおりです。
33
+
34
+ | クライアント | MCP設定 | グローバル指示 |
35
+ |---|---|---|
36
+ | Codex | `$CODEX_HOME/config.toml`または`~/.codex/config.toml` | `$CODEX_HOME/AGENTS.md`または`~/.codex/AGENTS.md` |
37
+ | OpenCode | `$XDG_CONFIG_HOME/opencode/opencode.json`または`~/.config/opencode/opencode.json` | 同じディレクトリの`AGENTS.md` |
38
+
39
+ OpenCodeの`opencode.jsonc`がすでに存在する場合、Kiokukoはコメントを維持したままそのファイルを更新します。CodexにKiokuko管理外の`[mcp_servers.kiokuko]`テーブルが存在する場合、上書き対象を推測せずセットアップを停止します。
40
+
41
+ ## 記憶のスコープ
42
+
43
+ データベースはOSユーザー全体で共有されますが、通常のrecallがデータベース全体を無条件に検索することはありません。
44
+
45
+ - `project`記憶は、`.kiokuko.json`、既知の正規パス、またはGit remoteから自動解決されます。他のプロジェクトの記憶は除外されます。
46
+ - `global`記憶は、本当にプロジェクト横断で利用する設定や教訓のために予約されています。
47
+ - デフォルトの`auto` recallは、現在のプロジェクトとglobal記憶だけを返します。
48
+ - remoteのないリポジトリには、パスから導出した安定した識別子を使用します。自動解決時にKiokukoがリポジトリ内へファイルを書き込むことはありません。
49
+
50
+ MCPの公開インターフェースは意図的に小さくしています。
51
+
52
+ - `memory_recall`: 上限付きのproject/globalコンテキストを読み取ります。結果には常にuntrustedマークが付きます。
53
+ - `memory_checkpoint`: 上限付きの永続的な記憶を`candidate`かつ`untrusted`として保存します。シークレットに見える内容は拒否されます。
54
+
55
+ これは指示による自動利用であり、プロンプトの横取りではありません。CodexやOpenCodeが特定のターンでツールを呼ばない可能性は残ります。Kiokukoはフックをインストールせず、会話全文を取得せず、記憶を暗黙にverifiedへ昇格させません。
56
+
57
+ ## 開発
58
+
59
+ ```bash
60
+ npm install
61
+ npm run typecheck
62
+ npm test
63
+ npm run build
64
+ npm pack --dry-run
65
+ ```
66
+
67
+ ## 開発環境での実行
68
+
69
+ ```bash
70
+ npm exec -- tsx src/bin/kiokuko.ts setup --dry-run --json
71
+ npm exec -- tsx src/bin/kiokuko.ts mcp
72
+ ```
73
+
74
+ `kiokuko use`は、移植可能な明示的バインディングが必要な場合の任意機能として残っています。`.kiokuko.json`と`AGENTS.md`内の管理ブロックを作成しますが、通常のMCP利用では不要です。
75
+
76
+ ## Akinator形式の知識取り込み
77
+
78
+ 重要な作業に対して、`guide`はタスク種別、対象、成功条件など、不足している価値の高い項目だけを質問します。その後、クエリとBot用途タグを使ってローカル記憶を選択します。
79
+
80
+ ```bash
81
+ kiokuko guide start "Implement the API change and add tests" \
82
+ --workspace <workspace> --json
83
+ kiokuko guide answer <session-id> --workspace <workspace> \
84
+ --question-id target --value src/api.ts --json
85
+ kiokuko guide answer <session-id> --workspace <workspace> \
86
+ --question-id expected --value "All tests pass" --json
87
+ kiokuko guide context <session-id> --workspace <workspace> --json
88
+ ```
89
+
90
+ ローカル検索で関連エントリが見つからない場合、`guide context`は次の許可済み公開リポジトリに限って現在の`main`ツリーを取得し、選択したMarkdownスキルや参照情報を`candidate`エントリとして保存できます。
91
+
92
+ - https://github.com/NousResearch/hermes-agent
93
+ - https://github.com/obra/superpowers
94
+
95
+ インポートされた各エントリには、リポジトリ、commit SHA、ソースパスが記録されます。これらは信頼されていない参照資料であり、自動的に`verified`へ昇格したり、コマンドとして実行されたりすることはありません。同期の再実行はコンテンツハッシュにより冪等です。
96
+
97
+ ## ローカルWeb UI
98
+
99
+ ループバック専用HTTPサーバーを起動すると、Bot用途、記憶タイプ、横断タグで記憶エントリを閲覧し、ブラウザからcandidateエントリを編集できます。
100
+
101
+ ```bash
102
+ kiokuko web
103
+ # http://127.0.0.1:4173 を開く
104
+ ```
105
+
106
+ `--port 0`で空いているポートを自動選択でき、`--json`で選択されたURLをJSONとして出力できます。Web UIが非ループバックインターフェースへサーバーを公開することはありません。verifiedおよびsupersededエントリは読み取り専用です。candidateの編集には楽観的リビジョン検査が使われ、監査履歴が維持されます。
107
+
108
+ `bot:researcher`、`bot:builder`、`bot:reviewer`などのタグは、種類をまたいだフィルターとして使用できます。エントリまたはサイドバーのタグをクリックすると、記憶タイプに関係なく一致するすべてのエントリが表示されます。
109
+
110
+ 記憶エントリは信頼されていない保存データです。過去のエントリを利用する前に、現在のファイルとランタイム状態を確認してください。パスワード、APIキー、トークン、秘密鍵、セッションCookieを保存しないでください。
111
+
112
+ このリポジトリは自動公開されません。`npm publish`、commit、pushにはユーザーによる明示的な許可が必要です。
package/README.ko.md ADDED
@@ -0,0 +1,112 @@
1
+ # Kiokuko
2
+
3
+ [English](README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | 한국어
4
+
5
+ Kiokuko는 AI 코딩 에이전트를 위한 모델 독립적인 외부 메모리 도구입니다. npm으로 한 번 전역 설치하면 현재 운영체제 사용자의 SQLite 데이터베이스에 구조화된 메모리를 저장하고, stdio MCP를 통해 Codex와 OpenCode에 고수준 recall/checkpoint 도구를 제공합니다.
6
+
7
+ ## 전역 설치 및 활성화
8
+
9
+ ```bash
10
+ npm install --global @askdkc/kiokuko
11
+ kiokuko setup
12
+ ```
13
+
14
+ npm 패키지 이름은 `@askdkc/kiokuko`이지만 설치되는 CLI 명령 이름은 계속 `kiokuko`입니다.
15
+
16
+ 설정 후 Codex와 OpenCode를 다시 시작하십시오. 이후 전역 `AGENTS.md`가 중요한 작업 전과 지속성 있는 작업 후에 Kiokuko를 호출하도록 에이전트에 지시하며, 도구가 필요할 때 전역 설정에서 `kiokuko mcp`를 시작합니다.
17
+
18
+ `setup`은 명시적으로 실행하는 멱등 작업입니다. npm `postinstall`은 AI 클라이언트 설정을 수정하지 않습니다. 기존 TOML/JSONC 설정, 주석, 지침 내용, 줄바꿈 형식 및 파일 모드는 유지되며 Kiokuko는 관리 구역만 수정합니다.
19
+
20
+ ```bash
21
+ # 아무것도 쓰지 않고 정확한 대상 파일과 예정된 변경 사항 확인
22
+ kiokuko setup --dry-run --json
23
+
24
+ # 클라이언트 하나만 설정
25
+ kiokuko setup --clients codex
26
+ kiokuko setup --clients opencode
27
+
28
+ # 클라이언트 프로세스가 npm의 PATH를 상속하지 않는 경우 절대 경로 사용
29
+ kiokuko setup --command /absolute/path/to/kiokuko
30
+ ```
31
+
32
+ 설정 대상은 다음과 같습니다.
33
+
34
+ | 클라이언트 | MCP 설정 | 전역 지침 |
35
+ |---|---|---|
36
+ | Codex | `$CODEX_HOME/config.toml` 또는 `~/.codex/config.toml` | `$CODEX_HOME/AGENTS.md` 또는 `~/.codex/AGENTS.md` |
37
+ | OpenCode | `$XDG_CONFIG_HOME/opencode/opencode.json` 또는 `~/.config/opencode/opencode.json` | 같은 디렉터리의 `AGENTS.md` |
38
+
39
+ OpenCode의 `opencode.jsonc`가 이미 있으면 Kiokuko는 주석을 유지하면서 해당 파일을 수정합니다. Codex에 Kiokuko가 관리하지 않는 `[mcp_servers.kiokuko]` 테이블이 이미 있으면 어떤 설정을 덮어쓸지 추측하지 않고 설정을 중단합니다.
40
+
41
+ ## 메모리 범위
42
+
43
+ 데이터베이스는 운영체제 사용자 전체에서 공유되지만 일반 recall은 전역 데이터베이스 전체를 검색하지 않습니다.
44
+
45
+ - `project` 메모리는 `.kiokuko.json`, 알려진 정규 경로 또는 Git remote에서 자동으로 확인됩니다. 다른 프로젝트의 메모리는 제외됩니다.
46
+ - `global` 메모리는 실제로 여러 프로젝트에 적용되는 선호 사항과 교훈을 위해 예약됩니다.
47
+ - 기본 `auto` recall은 현재 프로젝트와 global 메모리만 반환합니다.
48
+ - remote가 없는 저장소에는 경로에서 파생된 안정적인 식별자가 할당됩니다. 자동 확인 중 Kiokuko는 저장소에 어떤 파일도 쓰지 않습니다.
49
+
50
+ MCP 인터페이스는 의도적으로 작게 유지됩니다.
51
+
52
+ - `memory_recall`: 제한된 project/global 컨텍스트를 읽으며 항상 untrusted로 표시합니다.
53
+ - `memory_checkpoint`: 제한된 지속성 항목을 `candidate` 및 `untrusted`로 저장합니다. 비밀 정보로 보이는 내용은 거부됩니다.
54
+
55
+ 이는 지침에 기반한 자동 사용이며 프롬프트 가로채기가 아닙니다. Codex와 OpenCode가 특정 턴에서 도구를 호출하지 않을 가능성은 여전히 있습니다. Kiokuko는 훅을 설치하거나 전체 대화를 수집하거나 메모리를 조용히 verified 상태로 승격하지 않습니다.
56
+
57
+ ## 개발
58
+
59
+ ```bash
60
+ npm install
61
+ npm run typecheck
62
+ npm test
63
+ npm run build
64
+ npm pack --dry-run
65
+ ```
66
+
67
+ ## 개발 환경에서 사용
68
+
69
+ ```bash
70
+ npm exec -- tsx src/bin/kiokuko.ts setup --dry-run --json
71
+ npm exec -- tsx src/bin/kiokuko.ts mcp
72
+ ```
73
+
74
+ `kiokuko use`는 이식 가능한 명시적 바인딩이 필요한 경우를 위한 선택 기능으로 유지됩니다. `.kiokuko.json`과 `AGENTS.md`의 관리 블록을 생성하지만 일반적인 MCP 사용에는 더 이상 필요하지 않습니다.
75
+
76
+ ## Akinator 방식 지식 수집
77
+
78
+ 중요한 작업에서 `guide`는 작업 유형, 대상 및 성공 조건과 같이 누락된 고가치 필드만 질문합니다. 그런 다음 쿼리와 Bot 목적 태그를 사용하여 로컬 메모리를 선택합니다.
79
+
80
+ ```bash
81
+ kiokuko guide start "Implement the API change and add tests" \
82
+ --workspace <workspace> --json
83
+ kiokuko guide answer <session-id> --workspace <workspace> \
84
+ --question-id target --value src/api.ts --json
85
+ kiokuko guide answer <session-id> --workspace <workspace> \
86
+ --question-id expected --value "All tests pass" --json
87
+ kiokuko guide context <session-id> --workspace <workspace> --json
88
+ ```
89
+
90
+ 로컬 검색에서 관련 항목을 찾지 못하면 `guide context`는 다음 허용 목록의 공개 저장소에서만 현재 `main` 트리를 가져와 선택한 Markdown 스킬이나 참조 자료를 `candidate` 항목으로 저장할 수 있습니다.
91
+
92
+ - https://github.com/NousResearch/hermes-agent
93
+ - https://github.com/obra/superpowers
94
+
95
+ 가져온 각 항목에는 저장소, commit SHA 및 소스 경로가 기록됩니다. 신뢰되지 않은 참조 자료이므로 자동으로 `verified`로 승격되거나 명령으로 실행되지 않습니다. 반복 동기화는 콘텐츠 해시를 통해 멱등성을 유지합니다.
96
+
97
+ ## 로컬 Web UI
98
+
99
+ 루프백 전용 HTTP 서버를 시작하면 Bot 목적, 메모리 유형 및 교차 태그별로 메모리 항목을 탐색하고 브라우저에서 candidate 항목을 편집할 수 있습니다.
100
+
101
+ ```bash
102
+ kiokuko web
103
+ # http://127.0.0.1:4173 열기
104
+ ```
105
+
106
+ `--port 0`을 사용하면 사용 가능한 포트를 자동으로 선택하고, `--json`을 사용하면 선택된 URL을 JSON으로 출력합니다. Web UI는 루프백이 아닌 인터페이스에 서버를 노출하지 않습니다. verified 및 superseded 항목은 읽기 전용이며 candidate 편집에는 낙관적 리비전 검사를 사용하고 감사 기록을 유지합니다.
107
+
108
+ `bot:researcher`, `bot:builder`, `bot:reviewer` 같은 태그를 유형 간 필터로 사용할 수 있습니다. 항목 또는 사이드바의 태그를 클릭하면 메모리 유형과 관계없이 일치하는 모든 항목을 표시합니다.
109
+
110
+ 메모리 항목은 신뢰되지 않은 저장 데이터입니다. 과거 항목을 사용하기 전에 현재 파일과 런타임 상태를 확인하십시오. 비밀번호, API 키, 토큰, 개인 키 또는 세션 쿠키를 저장하지 마십시오.
111
+
112
+ 이 저장소는 자동으로 게시되지 않습니다. `npm publish`, commit 및 push에는 사용자의 명시적 승인이 필요합니다.
package/README.md ADDED
@@ -0,0 +1,147 @@
1
+ # Kiokuko
2
+
3
+ English | [日本語](README.ja.md) | [简体中文](README.zh-CN.md) | [한국어](README.ko.md)
4
+
5
+ Kiokuko is model-agnostic external memory for AI coding agents. One global npm
6
+ installation stores structured memory in the current user's SQLite database and
7
+ exposes high-level recall/checkpoint tools to Codex and OpenCode over stdio MCP.
8
+
9
+ ## Install and enable globally
10
+
11
+ ```bash
12
+ npm install --global @askdkc/kiokuko
13
+ kiokuko setup
14
+ ```
15
+
16
+ The npm package name is `@askdkc/kiokuko`; the installed CLI command remains
17
+ `kiokuko`.
18
+
19
+ Restart Codex and OpenCode after setup. From then on, their global `AGENTS.md`
20
+ instructs the agent to call Kiokuko before non-trivial work and after durable
21
+ work, and their global config starts `kiokuko mcp` when the tools are needed.
22
+
23
+ `setup` is explicit and idempotent. npm `postinstall` never edits AI-client
24
+ configuration. Existing TOML/JSONC settings, comments, instruction content,
25
+ line endings, and file modes are preserved; Kiokuko owns only its managed
26
+ sections.
27
+
28
+ ```bash
29
+ # Preview exact target files without writing anything
30
+ kiokuko setup --dry-run --json
31
+
32
+ # Configure only one client
33
+ kiokuko setup --clients codex
34
+ kiokuko setup --clients opencode
35
+
36
+ # Use an absolute executable path if the client process does not inherit npm's PATH
37
+ kiokuko setup --command /absolute/path/to/kiokuko
38
+ ```
39
+
40
+ The setup targets are:
41
+
42
+ | Client | MCP config | Global instructions |
43
+ |---|---|---|
44
+ | Codex | `$CODEX_HOME/config.toml` or `~/.codex/config.toml` | `$CODEX_HOME/AGENTS.md` or `~/.codex/AGENTS.md` |
45
+ | OpenCode | `$XDG_CONFIG_HOME/opencode/opencode.json` or `~/.config/opencode/opencode.json` | the adjacent `AGENTS.md` |
46
+
47
+ If an OpenCode `opencode.jsonc` already exists, Kiokuko updates that file and
48
+ preserves comments. If Codex already has an unmanaged
49
+ `[mcp_servers.kiokuko]` table, setup refuses to guess which configuration to
50
+ overwrite.
51
+
52
+ ## Memory scope
53
+
54
+ The database is global to the OS user, but ordinary recall is not a global
55
+ full-database search:
56
+
57
+ - `project` memory is resolved automatically from `.kiokuko.json`, the known
58
+ canonical path, or the Git remote. Another project's memory is excluded.
59
+ - `global` memory is reserved for genuinely cross-project preferences and
60
+ lessons.
61
+ - default `auto` recall returns only the current project plus global memory.
62
+ - a repository without a remote gets a stable path-derived identity. Kiokuko
63
+ does not write anything into the repository during automatic resolution.
64
+
65
+ The MCP surface is deliberately small:
66
+
67
+ - `memory_recall`: read bounded project/global context, always marked untrusted.
68
+ - `memory_checkpoint`: store bounded durable entries as `candidate` and
69
+ `untrusted`; secret-like content is rejected.
70
+
71
+ This is instruction-driven automatic use, not prompt interception. Codex and
72
+ OpenCode can still choose not to call a tool on a particular turn. Kiokuko does
73
+ not install hooks, capture full transcripts, or silently promote memory to
74
+ verified status.
75
+
76
+ ## Development
77
+
78
+ ```bash
79
+ npm install
80
+ npm run typecheck
81
+ npm test
82
+ npm run build
83
+ npm pack --dry-run
84
+ ```
85
+
86
+ ## Development usage
87
+
88
+ ```bash
89
+ npm exec -- tsx src/bin/kiokuko.ts setup --dry-run --json
90
+ npm exec -- tsx src/bin/kiokuko.ts mcp
91
+ ```
92
+
93
+ `kiokuko use` remains optional for a portable explicit binding. It creates
94
+ `.kiokuko.json` and a managed block in `AGENTS.md`; normal MCP use no longer
95
+ requires it.
96
+
97
+ ## Akinator-style knowledge intake
98
+
99
+ For non-trivial work, `guide` asks only for missing high-value fields such as
100
+ the task type, target, and success condition. It then selects local memory by
101
+ query and Bot-purpose tags:
102
+
103
+ ```bash
104
+ kiokuko guide start "Implement the API change and add tests" \
105
+ --workspace <workspace> --json
106
+ kiokuko guide answer <session-id> --workspace <workspace> \
107
+ --question-id target --value src/api.ts --json
108
+ kiokuko guide answer <session-id> --workspace <workspace> \
109
+ --question-id expected --value "All tests pass" --json
110
+ kiokuko guide context <session-id> --workspace <workspace> --json
111
+ ```
112
+
113
+ If local retrieval produces no relevant entries, `guide context` can fetch the
114
+ current `main` tree from only these allowlisted public repositories and store
115
+ the selected Markdown skills or references as `candidate` entries:
116
+
117
+ - https://github.com/NousResearch/hermes-agent
118
+ - https://github.com/obra/superpowers
119
+
120
+ Each imported entry records its repository, commit SHA, and source path. It is
121
+ untrusted reference material and is never auto-promoted to `verified` or
122
+ executed as a command. Repeated sync is content-hash idempotent.
123
+
124
+ ## Local web UI
125
+
126
+ Start a loopback-only HTTP server to browse memory entries by Bot purpose,
127
+ memory type, and cross-cutting tags, and edit candidate entries from the browser:
128
+
129
+ ```bash
130
+ kiokuko web
131
+ # open http://127.0.0.1:4173
132
+ ```
133
+
134
+ Use `--port 0` to select an available port, or `--json` to print the selected
135
+ URL as JSON. The web UI does not expose the server on non-loopback interfaces.
136
+ Verified and superseded entries are read-only; editing a candidate uses an
137
+ optimistic revision check and preserves the audit trail.
138
+ Tags such as `bot:researcher`, `bot:builder`, and `bot:reviewer` can be used as
139
+ cross-genre filters. Clicking a tag in an entry or in the sidebar shows every
140
+ matching entry regardless of its memory type.
141
+
142
+ Memory entries are untrusted stored data. Verify current files and runtime
143
+ state before relying on historical entries. Never store passwords, API keys,
144
+ tokens, private keys, or session cookies.
145
+
146
+ This repository is not published automatically. `npm publish`, commits, and
147
+ pushes require explicit user authorization.
@@ -0,0 +1,112 @@
1
+ # Kiokuko
2
+
3
+ [English](README.md) | [日本語](README.ja.md) | 简体中文 | [한국어](README.ko.md)
4
+
5
+ Kiokuko 是面向 AI 编程智能体、与模型无关的外部记忆工具。通过一次 npm 全局安装,它会将结构化记忆保存在当前操作系统用户的 SQLite 数据库中,并通过 stdio MCP 向 Codex 和 OpenCode 提供高层级的 recall/checkpoint 工具。
6
+
7
+ ## 全局安装与启用
8
+
9
+ ```bash
10
+ npm install --global @askdkc/kiokuko
11
+ kiokuko setup
12
+ ```
13
+
14
+ npm 包名是 `@askdkc/kiokuko`,安装后的 CLI 命令名仍然是 `kiokuko`。
15
+
16
+ 设置完成后,请重启 Codex 和 OpenCode。此后,全局 `AGENTS.md` 会指示智能体在处理重要工作之前调用 Kiokuko,并在产生持久性成果后写入检查点;需要工具时,全局配置会启动 `kiokuko mcp`。
17
+
18
+ `setup` 是显式且幂等的操作。npm 的 `postinstall` 永远不会修改 AI 客户端配置。现有 TOML/JSONC 设置、注释、指令内容、换行符和文件权限都会保留;Kiokuko 只管理自己的区块。
19
+
20
+ ```bash
21
+ # 不写入任何内容,预览确切的目标文件和计划变更
22
+ kiokuko setup --dry-run --json
23
+
24
+ # 只配置一个客户端
25
+ kiokuko setup --clients codex
26
+ kiokuko setup --clients opencode
27
+
28
+ # 如果客户端进程未继承 npm 的 PATH,请使用可执行文件绝对路径
29
+ kiokuko setup --command /absolute/path/to/kiokuko
30
+ ```
31
+
32
+ 设置目标如下:
33
+
34
+ | 客户端 | MCP 配置 | 全局指令 |
35
+ |---|---|---|
36
+ | Codex | `$CODEX_HOME/config.toml` 或 `~/.codex/config.toml` | `$CODEX_HOME/AGENTS.md` 或 `~/.codex/AGENTS.md` |
37
+ | OpenCode | `$XDG_CONFIG_HOME/opencode/opencode.json` 或 `~/.config/opencode/opencode.json` | 同目录下的 `AGENTS.md` |
38
+
39
+ 如果 OpenCode 的 `opencode.jsonc` 已存在,Kiokuko 会保留注释并更新该文件。如果 Codex 中已存在不受 Kiokuko 管理的 `[mcp_servers.kiokuko]` 表,设置程序不会猜测应该覆盖哪项配置,而是直接停止。
40
+
41
+ ## 记忆作用域
42
+
43
+ 数据库由当前操作系统用户全局共享,但普通 recall 不会搜索整个全局数据库:
44
+
45
+ - `project` 记忆会根据 `.kiokuko.json`、已知规范路径或 Git remote 自动解析。其他项目的记忆会被排除。
46
+ - `global` 记忆仅用于真正跨项目适用的偏好和经验。
47
+ - 默认的 `auto` recall 只返回当前项目与 global 记忆。
48
+ - 没有 remote 的仓库会获得由路径派生的稳定标识。自动解析时,Kiokuko 不会向仓库写入任何文件。
49
+
50
+ MCP 接口被有意保持为最小范围:
51
+
52
+ - `memory_recall`:读取有界的 project/global 上下文,并始终标记为 untrusted。
53
+ - `memory_checkpoint`:将有界的持久性条目保存为 `candidate` 和 `untrusted`;疑似密钥的内容会被拒绝。
54
+
55
+ 这种自动使用由指令驱动,并不会拦截提示词。Codex 和 OpenCode 仍可能决定在某个回合不调用工具。Kiokuko 不会安装钩子、捕获完整对话,也不会静默地将记忆提升为 verified 状态。
56
+
57
+ ## 开发
58
+
59
+ ```bash
60
+ npm install
61
+ npm run typecheck
62
+ npm test
63
+ npm run build
64
+ npm pack --dry-run
65
+ ```
66
+
67
+ ## 开发环境用法
68
+
69
+ ```bash
70
+ npm exec -- tsx src/bin/kiokuko.ts setup --dry-run --json
71
+ npm exec -- tsx src/bin/kiokuko.ts mcp
72
+ ```
73
+
74
+ `kiokuko use` 仍可作为可选功能,用于创建可移植的显式绑定。它会创建 `.kiokuko.json` 和 `AGENTS.md` 中的托管区块;普通 MCP 使用不再需要它。
75
+
76
+ ## Akinator 式知识采集
77
+
78
+ 对于重要工作,`guide` 只会询问任务类型、目标和成功条件等缺失的高价值字段。随后,它会根据查询和 Bot 用途标签选择本地记忆:
79
+
80
+ ```bash
81
+ kiokuko guide start "Implement the API change and add tests" \
82
+ --workspace <workspace> --json
83
+ kiokuko guide answer <session-id> --workspace <workspace> \
84
+ --question-id target --value src/api.ts --json
85
+ kiokuko guide answer <session-id> --workspace <workspace> \
86
+ --question-id expected --value "All tests pass" --json
87
+ kiokuko guide context <session-id> --workspace <workspace> --json
88
+ ```
89
+
90
+ 如果本地检索没有产生相关条目,`guide context` 只能从以下白名单公开仓库获取当前 `main` 分支树,并将选中的 Markdown 技能或参考资料保存为 `candidate` 条目:
91
+
92
+ - https://github.com/NousResearch/hermes-agent
93
+ - https://github.com/obra/superpowers
94
+
95
+ 每个导入条目都会记录其仓库、commit SHA 和源路径。这些内容是不受信任的参考资料,永远不会自动提升为 `verified`,也不会作为命令执行。重复同步通过内容哈希保持幂等。
96
+
97
+ ## 本地 Web UI
98
+
99
+ 启动仅限回环地址的 HTTP 服务器,即可按 Bot 用途、记忆类型和跨类别标签浏览记忆条目,并在浏览器中编辑 candidate 条目:
100
+
101
+ ```bash
102
+ kiokuko web
103
+ # 打开 http://127.0.0.1:4173
104
+ ```
105
+
106
+ 使用 `--port 0` 可自动选择可用端口,使用 `--json` 可将所选 URL 以 JSON 输出。Web UI 不会在非回环接口上公开服务器。verified 和 superseded 条目为只读;编辑 candidate 时会使用乐观修订检查,并保留审计记录。
107
+
108
+ `bot:researcher`、`bot:builder` 和 `bot:reviewer` 等标签可以作为跨类型筛选器。点击条目或侧边栏中的标签,会显示所有匹配条目,而不受记忆类型限制。
109
+
110
+ 记忆条目是未经信任的存储数据。依赖历史条目前,请验证当前文件和运行时状态。切勿存储密码、API 密钥、令牌、私钥或会话 Cookie。
111
+
112
+ 本仓库不会自动发布。执行 `npm publish`、commit 和 push 均需要用户明确授权。
@@ -0,0 +1,6 @@
1
+ export declare function readRegularFile(filePath: string): Promise<{
2
+ content: string;
3
+ mode: number;
4
+ } | undefined>;
5
+ export declare function atomicWriteText(filePath: string, content: string, mode?: number): Promise<void>;
6
+ //# sourceMappingURL=atomic-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-write.d.ts","sourceRoot":"","sources":["../../src/agent-file/atomic-write.ts"],"names":[],"mappings":"AAKA,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAAC,CAU9G;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAcpG"}
@@ -0,0 +1,36 @@
1
+ import { chmod, lstat, mkdir, readFile, rename, unlink, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { KiokukoError } from '../errors.js';
5
+ export async function readRegularFile(filePath) {
6
+ try {
7
+ const info = await lstat(filePath);
8
+ if (info.isSymbolicLink())
9
+ throw new KiokukoError('SECURITY_REJECTION', `Refusing to follow symlink: ${filePath}`);
10
+ if (!info.isFile())
11
+ throw new KiokukoError('VALIDATION_ERROR', `Expected a regular file: ${filePath}`);
12
+ return { content: await readFile(filePath, 'utf8'), mode: info.mode & 0o777 };
13
+ }
14
+ catch (error) {
15
+ if (error instanceof Error && 'code' in error && error.code === 'ENOENT')
16
+ return undefined;
17
+ throw error;
18
+ }
19
+ }
20
+ export async function atomicWriteText(filePath, content, mode = 0o644) {
21
+ const directory = path.dirname(filePath);
22
+ await mkdir(directory, { recursive: true });
23
+ const temporaryPath = path.join(directory, `.${path.basename(filePath)}.${randomUUID()}.tmp`);
24
+ try {
25
+ await writeFile(temporaryPath, content, { encoding: 'utf8', mode });
26
+ await chmod(temporaryPath, mode);
27
+ await rename(temporaryPath, filePath);
28
+ }
29
+ catch (error) {
30
+ await unlink(temporaryPath).catch(() => undefined);
31
+ throw new KiokukoError('PARTIAL_FAILURE', `Unable to atomically write ${filePath}`, {
32
+ cause: error instanceof Error ? error.message : String(error),
33
+ });
34
+ }
35
+ }
36
+ //# sourceMappingURL=atomic-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic-write.js","sourceRoot":"","sources":["../../src/agent-file/atomic-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,YAAY,CAAC,oBAAoB,EAAE,+BAA+B,QAAQ,EAAE,CAAC,CAAC;QACnH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QACvG,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACtH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,OAAe,EAAE,IAAI,GAAG,KAAK;IACnF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9F,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,MAAM,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,IAAI,YAAY,CAAC,iBAAiB,EAAE,8BAA8B,QAAQ,EAAE,EAAE;YAClF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const BEGIN_MARKER = "<!-- BEGIN KIOKUKO MANAGED BLOCK -->";
2
+ export declare const END_MARKER = "<!-- END KIOKUKO MANAGED BLOCK -->";
3
+ type ManagedBlockState = 'absent' | 'balanced';
4
+ export interface ManagedBlockResult {
5
+ content: string;
6
+ action: 'created' | 'updated' | 'unchanged';
7
+ state: ManagedBlockState;
8
+ }
9
+ export declare function upsertManagedBlock(existing: string, managedBlock: string): ManagedBlockResult;
10
+ export declare function assertNotSymlink(filePath: string, isSymbolicLink: boolean): void;
11
+ export {};
12
+ //# sourceMappingURL=managed-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-block.d.ts","sourceRoot":"","sources":["../../src/agent-file/managed-block.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,yCAAyC,CAAC;AACnE,eAAO,MAAM,UAAU,uCAAuC,CAAC;AAE/D,KAAK,iBAAiB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;IAC5C,KAAK,EAAE,iBAAiB,CAAC;CAC1B;AAiCD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,kBAAkB,CAgB7F;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI,CAEhF"}
@@ -0,0 +1,56 @@
1
+ import { KiokukoError } from '../errors.js';
2
+ export const BEGIN_MARKER = '<!-- BEGIN KIOKUKO MANAGED BLOCK -->';
3
+ export const END_MARKER = '<!-- END KIOKUKO MANAGED BLOCK -->';
4
+ function markerPositions(content, marker) {
5
+ const positions = [];
6
+ let from = 0;
7
+ for (;;) {
8
+ const index = content.indexOf(marker, from);
9
+ if (index < 0)
10
+ return positions;
11
+ positions.push(index);
12
+ from = index + marker.length;
13
+ }
14
+ }
15
+ function validateMarkers(content) {
16
+ const starts = markerPositions(content, BEGIN_MARKER);
17
+ const ends = markerPositions(content, END_MARKER);
18
+ if (starts.length === 0 && ends.length === 0)
19
+ return undefined;
20
+ const start = starts[0];
21
+ const end = ends[0];
22
+ if (starts.length !== 1 || ends.length !== 1 || start === undefined || end === undefined || start >= end) {
23
+ throw new KiokukoError('VALIDATION_ERROR', 'AGENTS.md contains malformed Kiokuko managed markers');
24
+ }
25
+ return { start, end: end + END_MARKER.length };
26
+ }
27
+ function newlineFor(content) {
28
+ return content.includes('\r\n') ? '\r\n' : '\n';
29
+ }
30
+ function normalizeBlock(block, newline) {
31
+ return block.replaceAll('\r\n', '\n').replaceAll('\n', newline);
32
+ }
33
+ export function upsertManagedBlock(existing, managedBlock) {
34
+ const markers = validateMarkers(existing);
35
+ const newline = newlineFor(existing);
36
+ const normalizedBlock = normalizeBlock(managedBlock, newline);
37
+ if (!markers) {
38
+ if (existing.length === 0)
39
+ return { content: normalizedBlock, action: 'created', state: 'absent' };
40
+ const separator = existing.endsWith('\n') || existing.endsWith('\r') ? `${newline}${newline}` : `${newline}${newline}${newline}`;
41
+ return { content: `${existing}${separator}${normalizedBlock}`, action: 'created', state: 'absent' };
42
+ }
43
+ const currentBlock = existing.slice(markers.start, markers.end);
44
+ if (currentBlock === normalizedBlock)
45
+ return { content: existing, action: 'unchanged', state: 'balanced' };
46
+ return {
47
+ content: `${existing.slice(0, markers.start)}${normalizedBlock}${existing.slice(markers.end)}`,
48
+ action: 'updated',
49
+ state: 'balanced',
50
+ };
51
+ }
52
+ export function assertNotSymlink(filePath, isSymbolicLink) {
53
+ if (isSymbolicLink)
54
+ throw new KiokukoError('SECURITY_REJECTION', `Refusing to modify symlink: ${filePath}`);
55
+ }
56
+ //# sourceMappingURL=managed-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-block.js","sourceRoot":"","sources":["../../src/agent-file/managed-block.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare const AGENT_TEMPLATE_VERSION = 3;
2
+ export interface AgentTemplateValues {
3
+ repositoryId: string;
4
+ workspace: string;
5
+ cliCommand: 'kiokuko' | 'npm exec -- kiokuko' | 'npx --no-install kiokuko';
6
+ templateVersion?: number;
7
+ }
8
+ export interface RenderedAgentFile {
9
+ content: string;
10
+ action: 'created' | 'updated' | 'unchanged';
11
+ }
12
+ export declare function renderManagedBlock(values: AgentTemplateValues): string;
13
+ export declare function renderAgentFile(existing: string | undefined, values: AgentTemplateValues): RenderedAgentFile;
14
+ //# sourceMappingURL=render.d.ts.map