blun-king-cli 9.1.587 → 9.1.588

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 (436) hide show
  1. package/CHANGELOG.md +11 -185
  2. package/LIESMICH.txt +51 -13
  3. package/README.md +44 -47
  4. package/agent-spine-plugin/.codex-plugin/plugin.json +16 -4
  5. package/agent-spine-plugin/CHANGELOG.md +37 -5
  6. package/agent-spine-plugin/README.md +3 -3
  7. package/agent-spine-plugin/blun.plugin.json +45 -10
  8. package/agent-spine-plugin/docs/artifact-evaluation.md +93 -0
  9. package/agent-spine-plugin/docs/host-integration.md +42 -27
  10. package/agent-spine-plugin/docs/preflight-recall.md +4 -2
  11. package/agent-spine-plugin/docs/session-timeline.md +97 -236
  12. package/agent-spine-plugin/docs/world-model.md +25 -0
  13. package/agent-spine-plugin/hooks/codex.json +1 -1
  14. package/agent-spine-plugin/hooks/hooks.json +1 -1
  15. package/agent-spine-plugin/package.json +1 -3
  16. package/agent-spine-plugin/scripts/check-hosts.js +3 -3
  17. package/agent-spine-plugin/scripts/release-check.js +10 -5
  18. package/agent-spine-plugin/scripts/run-checks.js +4 -1
  19. package/agent-spine-plugin/scripts/run-tests-hermetic.js +32 -6
  20. package/agent-spine-plugin/src/cli-learning.js +15 -0
  21. package/agent-spine-plugin/src/cli.js +2 -0
  22. package/agent-spine-plugin/src/hook.js +32 -32
  23. package/agent-spine-plugin/src/lib/action-lesson-recall.js +73 -8
  24. package/agent-spine-plugin/src/lib/briefing.js +146 -36
  25. package/agent-spine-plugin/src/lib/channel-continuity.js +19 -0
  26. package/agent-spine-plugin/src/lib/delivery-agent-usage.js +14 -7
  27. package/agent-spine-plugin/src/lib/gateway-group-response.js +128 -0
  28. package/agent-spine-plugin/src/lib/gateway-runs.js +24 -15
  29. package/agent-spine-plugin/src/lib/hook-briefing-use.js +13 -3
  30. package/agent-spine-plugin/src/lib/hook-context.js +16 -3
  31. package/agent-spine-plugin/src/lib/hook-output.js +129 -5
  32. package/agent-spine-plugin/src/lib/hook-timeline.js +5 -3
  33. package/agent-spine-plugin/src/lib/indexed-memory.js +2 -2
  34. package/agent-spine-plugin/src/lib/learning-artifact-evaluator.js +114 -0
  35. package/agent-spine-plugin/src/lib/learning-context.js +11 -4
  36. package/agent-spine-plugin/src/lib/learning-measurements.js +2 -2
  37. package/agent-spine-plugin/src/lib/mcp-runtime.js +89 -3
  38. package/agent-spine-plugin/src/lib/mcp-source-context.js +12 -2
  39. package/agent-spine-plugin/src/lib/mcp-timeline-tools.js +91 -8
  40. package/agent-spine-plugin/src/lib/mcp-world-tools.js +2 -2
  41. package/agent-spine-plugin/src/lib/owned-file-lock.js +20 -1
  42. package/agent-spine-plugin/src/lib/persona-runtime.js +2 -2
  43. package/agent-spine-plugin/src/lib/preflight-delivery-id.js +27 -0
  44. package/agent-spine-plugin/src/lib/preflight.js +4 -4
  45. package/agent-spine-plugin/src/lib/session-timeline-codex.js +15 -0
  46. package/agent-spine-plugin/src/lib/session-timeline-contract.js +12 -4
  47. package/agent-spine-plugin/src/lib/session-timeline-event-extract.js +36 -7
  48. package/agent-spine-plugin/src/lib/session-timeline-host-origin.js +13 -10
  49. package/agent-spine-plugin/src/lib/session-timeline-invocation.js +1 -1
  50. package/agent-spine-plugin/src/lib/session-timeline-king.js +14 -0
  51. package/agent-spine-plugin/src/lib/session-timeline-prior.js +18 -12
  52. package/agent-spine-plugin/src/lib/session-timeline-provider.js +5 -0
  53. package/agent-spine-plugin/src/lib/session-timeline-query.js +2 -0
  54. package/agent-spine-plugin/src/lib/session-timeline-results.js +35 -10
  55. package/agent-spine-plugin/src/lib/session-timeline-source-open.js +30 -0
  56. package/agent-spine-plugin/src/lib/session-timeline.js +122 -75
  57. package/agent-spine-plugin/src/lib/source-roots.js +3 -2
  58. package/agent-spine-plugin/src/lib/task-knowledge-context.js +22 -1
  59. package/agent-spine-plugin/src/lib/timeline-continuation-update.js +100 -0
  60. package/agent-spine-plugin/src/lib/timeline-tool-guard.js +30 -7
  61. package/agent-spine-plugin/src/lib/timeline-user-feedback.js +217 -0
  62. package/agent-spine-plugin/src/lib/timeline-world-capture.js +233 -0
  63. package/agent-spine-plugin/src/lib/world-knowledge.js +59 -2
  64. package/agent-spine-plugin/src/lib/world-model.js +64 -9
  65. package/agent-spine-plugin/src/worker.js +13 -1
  66. package/bin/blun.js +43 -28
  67. package/bin/core-bootstrap.js +5 -4
  68. package/bin/king.js +43 -28
  69. package/bin/launcher-mode.js +1 -10
  70. package/bin/launcher-runtime.js +128 -295
  71. package/bin/managed-node.js +0 -0
  72. package/bin/managed-plugin-selection.cjs +0 -1
  73. package/bin/native-module-repair.js +0 -0
  74. package/bin/node-runtime.js +0 -0
  75. package/bin/node-version.js +0 -0
  76. package/bin/plugin-bootstrap.js +56 -120
  77. package/bin/private-paths.js +11 -34
  78. package/bin/standard-tools-bootstrap.js +34 -114
  79. package/bin/turn-thinking-policy.cjs +3 -11
  80. package/bin/update-copy.js +200 -0
  81. package/bin/update-lease.js +0 -0
  82. package/bin/update-notice.js +136 -289
  83. package/bin/verify-agent-behavior.cjs +122 -0
  84. package/bin/verify-agent-components.cjs +104 -0
  85. package/bin/verify-bundled-agent-sources.cjs +57 -0
  86. package/blun.mjs +143076 -135288
  87. package/bundled-agent-sources.json +701 -0
  88. package/package.json +12 -15
  89. package/standard-skills/translate-native/README.md +1293 -0
  90. package/standard-skills/translate-native/SKILL.md +172 -22
  91. package/standard-skills/translate-native/VERSION +1 -1
  92. package/standard-skills/translate-native/agents/openai.yaml +18 -0
  93. package/standard-skills/translate-native/assets/icon.svg +8 -0
  94. package/standard-skills/translate-native/docs/BLUN_CODE_INTEGRATION.md +76 -0
  95. package/standard-skills/translate-native/docs/PREMORTEM.md +489 -0
  96. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION.md +2035 -0
  97. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_API.md +1302 -0
  98. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_EVIDENCE_HTTP.md +136 -0
  99. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HEALTH_HTTP.md +130 -0
  100. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_HTTP_PROVIDER.md +175 -0
  101. package/standard-skills/translate-native/docs/WEBSITE_LOCALIZATION_RECEIPT_VERIFIER_HTTP.md +86 -0
  102. package/standard-skills/translate-native/integrations/AGENT_RULES.md +32 -0
  103. package/standard-skills/translate-native/integrations/adapters/blun-code-language-guard.js +514 -0
  104. package/standard-skills/translate-native/integrations/adapters/node-language-guard.js +230 -0
  105. package/standard-skills/translate-native/integrations/audit_log.py +327 -0
  106. package/standard-skills/translate-native/integrations/claude_language_hook.js +1536 -0
  107. package/standard-skills/translate-native/integrations/commercial_localization_profile.py +42 -0
  108. package/standard-skills/translate-native/integrations/delivery-policy.example.json +28 -0
  109. package/standard-skills/translate-native/integrations/enforced_delivery.py +543 -0
  110. package/standard-skills/translate-native/integrations/guard_service.py +435 -0
  111. package/standard-skills/translate-native/integrations/language_gateway.py +67 -0
  112. package/standard-skills/translate-native/integrations/mcp_auth_headers.py +198 -0
  113. package/standard-skills/translate-native/integrations/mcp_http_gateway.py +429 -0
  114. package/standard-skills/translate-native/integrations/non_language_html_entities.js +1485 -0
  115. package/standard-skills/translate-native/integrations/pre_output_guard.py +65 -0
  116. package/standard-skills/translate-native/integrations/task_router.py +101 -0
  117. package/standard-skills/translate-native/integrations/website_localization.py +401 -0
  118. package/standard-skills/translate-native/integrations/website_localization_api.py +581 -0
  119. package/standard-skills/translate-native/integrations/website_localization_benchmark.py +1885 -0
  120. package/standard-skills/translate-native/integrations/website_localization_benchmark_campaign.py +1772 -0
  121. package/standard-skills/translate-native/integrations/website_localization_benchmark_candidate.py +506 -0
  122. package/standard-skills/translate-native/integrations/website_localization_benchmark_http.py +400 -0
  123. package/standard-skills/translate-native/integrations/website_localization_benchmark_review_store.py +781 -0
  124. package/standard-skills/translate-native/integrations/website_localization_benchmark_reviewer_http.py +500 -0
  125. package/standard-skills/translate-native/integrations/website_localization_benchmark_runtime.py +1107 -0
  126. package/standard-skills/translate-native/integrations/website_localization_benchmark_suite.py +463 -0
  127. package/standard-skills/translate-native/integrations/website_localization_cms.py +2835 -0
  128. package/standard-skills/translate-native/integrations/website_localization_cms_client.py +875 -0
  129. package/standard-skills/translate-native/integrations/website_localization_cms_dispatch.py +805 -0
  130. package/standard-skills/translate-native/integrations/website_localization_cms_http.py +588 -0
  131. package/standard-skills/translate-native/integrations/website_localization_cms_lifecycle_monitor.py +991 -0
  132. package/standard-skills/translate-native/integrations/website_localization_cms_receiver.py +1441 -0
  133. package/standard-skills/translate-native/integrations/website_localization_cms_receiver_runtime.py +414 -0
  134. package/standard-skills/translate-native/integrations/website_localization_cms_receiver_store.py +1073 -0
  135. package/standard-skills/translate-native/integrations/website_localization_cms_removal_dispatch.py +865 -0
  136. package/standard-skills/translate-native/integrations/website_localization_cms_source_client.py +583 -0
  137. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery.py +964 -0
  138. package/standard-skills/translate-native/integrations/website_localization_cms_source_delivery_runtime.py +665 -0
  139. package/standard-skills/translate-native/integrations/website_localization_cms_source_http.py +1153 -0
  140. package/standard-skills/translate-native/integrations/website_localization_cms_source_runtime.py +675 -0
  141. package/standard-skills/translate-native/integrations/website_localization_cms_source_service.py +1125 -0
  142. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification.py +674 -0
  143. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_http.py +444 -0
  144. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver.py +1469 -0
  145. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_notification_receiver_runtime.py +1142 -0
  146. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_processing_monitor.py +634 -0
  147. package/standard-skills/translate-native/integrations/website_localization_cms_terminal_receiver_client.py +804 -0
  148. package/standard-skills/translate-native/integrations/website_localization_deepl_baseline.py +922 -0
  149. package/standard-skills/translate-native/integrations/website_localization_evidence_http.py +482 -0
  150. package/standard-skills/translate-native/integrations/website_localization_health.py +1541 -0
  151. package/standard-skills/translate-native/integrations/website_localization_health_http.py +372 -0
  152. package/standard-skills/translate-native/integrations/website_localization_http_provider.py +297 -0
  153. package/standard-skills/translate-native/integrations/website_localization_native_reference_http.py +479 -0
  154. package/standard-skills/translate-native/integrations/website_localization_native_reference_intake.py +363 -0
  155. package/standard-skills/translate-native/integrations/website_localization_native_reference_queue.py +1449 -0
  156. package/standard-skills/translate-native/integrations/website_localization_native_reference_store.py +420 -0
  157. package/standard-skills/translate-native/integrations/website_localization_quality_profiles.py +235 -0
  158. package/standard-skills/translate-native/integrations/website_localization_queue.py +671 -0
  159. package/standard-skills/translate-native/integrations/website_localization_receipt_verifier_http.py +516 -0
  160. package/standard-skills/translate-native/integrations/website_localization_release.py +928 -0
  161. package/standard-skills/translate-native/integrations/website_localization_release_coordinator.py +1008 -0
  162. package/standard-skills/translate-native/integrations/website_localization_runner.py +276 -0
  163. package/standard-skills/translate-native/integrations/website_localization_runtime.py +862 -0
  164. package/standard-skills/translate-native/integrations/website_localization_service.py +350 -0
  165. package/standard-skills/translate-native/integrations/website_localization_supervisor.py +511 -0
  166. package/standard-skills/translate-native/integrations/website_localization_worker.py +663 -0
  167. package/standard-skills/translate-native/provenance.json +3 -4
  168. package/standard-skills/translate-native/references/commercial-localization.md +177 -0
  169. package/standard-skills/translate-native/scripts/blun_language_guard.py +7 -1
  170. package/standard-skills/translate-native/scripts/check_commercial_review.py +80 -0
  171. package/standard-skills/translate-native/scripts/commercial_localization_profile.py +333 -0
  172. package/standard-tools/language-guard/LICENSE +21 -0
  173. package/standard-tools/language-guard/VERSION +1 -0
  174. package/standard-tools/language-guard/blun_language_guard.py +7 -1
  175. package/standard-tools/language-guard/check_commercial_review.py +80 -0
  176. package/standard-tools/language-guard/commercial_localization_profile.py +333 -0
  177. package/standard-tools/language-guard/language_gateway.py +62 -0
  178. package/standard-tools/language-guard/pre_output_guard.py +64 -0
  179. package/standard-tools/language-guard/provenance.json +4 -11
  180. package/standard-tools/manifest.json +34 -11
  181. package/telegram-plugin/commands/access.md +2 -10
  182. package/telegram-plugin/dist/bridge.mjs +64041 -687
  183. package/telegram-plugin/dist/mcp-server.mjs +72810 -9027
  184. package/telegram-plugin/dist/noise.mjs +28 -63511
  185. package/agent-spine-plugin/CONTRIBUTING.md +0 -52
  186. package/agent-spine-plugin/SECURITY.md +0 -47
  187. package/agent-spine-plugin/docs/assignment-continuation.md +0 -48
  188. package/agent-spine-plugin/docs/releasing.md +0 -85
  189. package/agent-spine-plugin/docs/structured-completion.md +0 -67
  190. package/bin/abort-listener-policy.cjs +0 -43
  191. package/bin/active-steer-priority-policy.cjs +0 -24
  192. package/bin/agent-api-http-adapter.mjs +0 -446
  193. package/bin/agent-api-private-http-server.mjs +0 -288
  194. package/bin/agent-api-runtime.mjs +0 -252
  195. package/bin/agent-api-service-environment.mjs +0 -236
  196. package/bin/agent-api-service-host.mjs +0 -209
  197. package/bin/agent-api-service-process.mjs +0 -171
  198. package/bin/agent-api-session-registry.mjs +0 -428
  199. package/bin/agent-api-tool-broker.cjs +0 -248
  200. package/bin/agent-api-turn-controller.mjs +0 -461
  201. package/bin/agent-api-usage-journal.cjs +0 -259
  202. package/bin/agent-resume-snapshot.cjs +0 -241
  203. package/bin/agentspine-king-goal-inbox.mjs +0 -111
  204. package/bin/agentspine-king-goal-intake.mjs +0 -106
  205. package/bin/approval-rejection-stop.cjs +0 -15
  206. package/bin/assistant-message-offload-policy.cjs +0 -284
  207. package/bin/baseline-skill-performance-policy.cjs +0 -39
  208. package/bin/bash-search-scope-policy.cjs +0 -49
  209. package/bin/codebase-search-runtime.cjs +0 -23
  210. package/bin/cognitive-action-checkpoint.cjs +0 -1104
  211. package/bin/cognitive-attention-delivery.cjs +0 -76
  212. package/bin/cognitive-attention-policy.cjs +0 -143
  213. package/bin/cognitive-attention-runtime.cjs +0 -91
  214. package/bin/cognitive-context-projection.cjs +0 -73
  215. package/bin/cognitive-cross-portal-acceptance.cjs +0 -443
  216. package/bin/cognitive-effective-view.cjs +0 -77
  217. package/bin/cognitive-focus-projection.cjs +0 -206
  218. package/bin/cognitive-focus-scope.cjs +0 -37
  219. package/bin/cognitive-goal-autostart-policy.cjs +0 -72
  220. package/bin/cognitive-goal-time-trigger-controller.cjs +0 -146
  221. package/bin/cognitive-memory-adapter.cjs +0 -282
  222. package/bin/cognitive-memory-command.cjs +0 -293
  223. package/bin/cognitive-memory-provider.cjs +0 -92
  224. package/bin/cognitive-salience-policy.cjs +0 -159
  225. package/bin/cognitive-state-store.cjs +0 -508
  226. package/bin/cognitive-turn-lifecycle.cjs +0 -624
  227. package/bin/cognitive-work-focus.cjs +0 -180
  228. package/bin/compaction-history-archive.cjs +0 -166
  229. package/bin/compaction-history-startup.cjs +0 -50
  230. package/bin/compaction-model-policy.cjs +0 -31
  231. package/bin/compaction-stage-policy.cjs +0 -21
  232. package/bin/compaction-transaction-policy.cjs +0 -122
  233. package/bin/config-write-dedup-policy.cjs +0 -27
  234. package/bin/context-budget-ledger.cjs +0 -31
  235. package/bin/context-doctor-policy.cjs +0 -70
  236. package/bin/context-insight-policy.cjs +0 -36
  237. package/bin/context-performance-policy.cjs +0 -19
  238. package/bin/context-pressure-policy.cjs +0 -20
  239. package/bin/cron-run-output.cjs +0 -45
  240. package/bin/cron-run-store.cjs +0 -145
  241. package/bin/curiosity-scout-policy.cjs +0 -49
  242. package/bin/default-model-output-budget-policy.cjs +0 -28
  243. package/bin/durable-task-resume-policy.cjs +0 -130
  244. package/bin/durable-task-resume-runtime.cjs +0 -117
  245. package/bin/durable-task-resume-store.cjs +0 -88
  246. package/bin/editable-tool-approval-policy.cjs +0 -540
  247. package/bin/editable-tool-approval-runtime.cjs +0 -99
  248. package/bin/effective-system-prompt-cache-policy.cjs +0 -33
  249. package/bin/error-memory-performance-policy.cjs +0 -113
  250. package/bin/file-observation-policy.cjs +0 -133
  251. package/bin/foreground-output-capture-policy.cjs +0 -41
  252. package/bin/generated-source-health.cjs +0 -142
  253. package/bin/glob-pattern-policy.cjs +0 -13
  254. package/bin/goal-completion-evidence-policy.cjs +0 -120
  255. package/bin/grep-output-limit-policy.cjs +0 -39
  256. package/bin/historical-media-projection-policy.cjs +0 -48
  257. package/bin/history-offload-pressure-policy.cjs +0 -33
  258. package/bin/html-to-research-markdown.cjs +0 -147
  259. package/bin/identity-context-policy.cjs +0 -764
  260. package/bin/identity-journal-policy.cjs +0 -107
  261. package/bin/input-draft-persistence.cjs +0 -77
  262. package/bin/king-tui-function-contract.json +0 -33
  263. package/bin/launcher-restart-policy.cjs +0 -150
  264. package/bin/live-response-repetition-guard.cjs +0 -196
  265. package/bin/llm-config-log-dedup-policy.cjs +0 -76
  266. package/bin/loop-event-record-policy.cjs +0 -174
  267. package/bin/managed-context-startup-policy.cjs +0 -27
  268. package/bin/media-activity-layout-policy.cjs +0 -34
  269. package/bin/media-auto-retrieval-policy.cjs +0 -90
  270. package/bin/media-result-policy.cjs +0 -59
  271. package/bin/micro-compaction-policy.cjs +0 -145
  272. package/bin/mistake-relevance-policy.cjs +0 -319
  273. package/bin/model-retry-progress-policy.cjs +0 -46
  274. package/bin/native-large-file-io.cjs +0 -42
  275. package/bin/native-runtime-cache.cjs +0 -76
  276. package/bin/natural-presence-policy.cjs +0 -28
  277. package/bin/noninteractive-shell-env-policy.cjs +0 -19
  278. package/bin/observer-hooks.cjs +0 -14
  279. package/bin/outbound-claim-provenance.cjs +0 -150
  280. package/bin/oversized-context-offload-policy.cjs +0 -86
  281. package/bin/pending-media-policy.cjs +0 -182
  282. package/bin/pending-token-estimate-policy.cjs +0 -41
  283. package/bin/personal-memory-consent-policy.cjs +0 -72
  284. package/bin/personal-memory-performance-policy.cjs +0 -12
  285. package/bin/personality-choice-policy.cjs +0 -101
  286. package/bin/personality-memory-adapter.cjs +0 -379
  287. package/bin/personality-mode.cjs +0 -46
  288. package/bin/personality-setup-policy.cjs +0 -197
  289. package/bin/proactive-compaction-policy.cjs +0 -25
  290. package/bin/profile-identity-resolution.cjs +0 -136
  291. package/bin/profile-runtime.cjs +0 -318
  292. package/bin/profile-tool-exclusion-policy.cjs +0 -37
  293. package/bin/programmatic-context-isolation.cjs +0 -25
  294. package/bin/programmatic-tool-runtime.mjs +0 -627
  295. package/bin/provider-idle-timeout-policy.cjs +0 -14
  296. package/bin/provider-model-refresh-deadline.cjs +0 -53
  297. package/bin/provider-model-refresh-policy.cjs +0 -107
  298. package/bin/rate-limit-recovery-policy.cjs +0 -47
  299. package/bin/read-batch-policy.cjs +0 -32
  300. package/bin/read-continuation-policy.cjs +0 -59
  301. package/bin/recurring-cron-history-policy.cjs +0 -124
  302. package/bin/relationship-continuity-policy.cjs +0 -143
  303. package/bin/relationship-curiosity-policy.cjs +0 -107
  304. package/bin/relationship-learning-policy.cjs +0 -168
  305. package/bin/release-artifact-freeze-policy.cjs +0 -30
  306. package/bin/reload-plugin-bootstrap.cjs +0 -18
  307. package/bin/reload-queue-policy.cjs +0 -38
  308. package/bin/repeated-assistant-response-policy.cjs +0 -232
  309. package/bin/repeated-injection-projection.cjs +0 -107
  310. package/bin/repeated-user-message-projection.cjs +0 -8
  311. package/bin/research-page-result.cjs +0 -74
  312. package/bin/retry-checkpoint-policy.cjs +0 -13
  313. package/bin/runtime-exit-ledger.cjs +0 -144
  314. package/bin/scoped-cron-run-policy.cjs +0 -358
  315. package/bin/session-checkpoint-policy.cjs +0 -25
  316. package/bin/session-compaction-policy.cjs +0 -84
  317. package/bin/session-replay-policy.cjs +0 -20
  318. package/bin/session-replay-window-policy.cjs +0 -40
  319. package/bin/session-resume-checkpoint.cjs +0 -254
  320. package/bin/session-scrollback-archive.cjs +0 -229
  321. package/bin/skill-activation-performance-policy.cjs +0 -69
  322. package/bin/skill-listing-performance-policy.cjs +0 -92
  323. package/bin/soul-organization-policy.cjs +0 -78
  324. package/bin/soul-preservation-policy.cjs +0 -20
  325. package/bin/startup-preferences.cjs +0 -131
  326. package/bin/streaming-flush-performance-policy.cjs +0 -28
  327. package/bin/structured-agent-swarm-output.cjs +0 -325
  328. package/bin/structured-subagent-output.cjs +0 -252
  329. package/bin/subagent-context-fork-policy.cjs +0 -155
  330. package/bin/subagent-max-tokens-handoff-policy.cjs +0 -69
  331. package/bin/subagent-parent-responsiveness.cjs +0 -19
  332. package/bin/subagent-skill-policy.cjs +0 -206
  333. package/bin/subagent-timeout-policy.cjs +0 -182
  334. package/bin/subagent-tool-policy.cjs +0 -60
  335. package/bin/subagent-usage-rollup-policy.cjs +0 -29
  336. package/bin/system-prompt-context-policy.cjs +0 -124
  337. package/bin/system-prompt-token-cache-policy.cjs +0 -60
  338. package/bin/telegram-addressed-focus.cjs +0 -55
  339. package/bin/telegram-addressed-priority.cjs +0 -12
  340. package/bin/telegram-approval-relay.cjs +0 -290
  341. package/bin/telegram-bot-priority.cjs +0 -17
  342. package/bin/telegram-console-status-policy.cjs +0 -174
  343. package/bin/telegram-context-projection-policy.cjs +0 -141
  344. package/bin/telegram-delivery-lifecycle.cjs +0 -125
  345. package/bin/telegram-direct-focus-policy.cjs +0 -273
  346. package/bin/telegram-mcp-compatibility.cjs +0 -49
  347. package/bin/telegram-media-delivery-policy.cjs +0 -42
  348. package/bin/telegram-private-conversation-policy.cjs +0 -185
  349. package/bin/telegram-queue-handoff-policy.cjs +0 -73
  350. package/bin/telegram-remote-status-policy.cjs +0 -120
  351. package/bin/telegram-session-queue-runtime.mjs +0 -306
  352. package/bin/telegram-text-chunk-policy.cjs +0 -63
  353. package/bin/telegram-truncated-reply-policy.cjs +0 -37
  354. package/bin/telegram-urgent-policy.cjs +0 -45
  355. package/bin/telemetry-spool-policy.cjs +0 -57
  356. package/bin/thinking-activity-status-policy.cjs +0 -132
  357. package/bin/thinking-only-guard.cjs +0 -80
  358. package/bin/todo-list-turn-policy.cjs +0 -131
  359. package/bin/tool-call-loop-policy.cjs +0 -51
  360. package/bin/tool-file-persistence.cjs +0 -141
  361. package/bin/tool-result-offload-policy.cjs +0 -359
  362. package/bin/tool-result-offload-telemetry.cjs +0 -12
  363. package/bin/tool-schema-token-cache-policy.cjs +0 -41
  364. package/bin/tool-stream-preview-policy.cjs +0 -9
  365. package/bin/tui-functional-contract.cjs +0 -55
  366. package/bin/turn-tool-performance-policy.cjs +0 -486
  367. package/bin/usage-cache-efficiency-policy.cjs +0 -26
  368. package/bin/user-home-path-policy.cjs +0 -13
  369. package/bin/user-message-offload-policy.cjs +0 -103
  370. package/bin/user-prompt-hook-origin-policy.cjs +0 -34
  371. package/bin/user-tool-record-policy.cjs +0 -7
  372. package/bin/validated-learning-insight-policy.cjs +0 -58
  373. package/bin/validated-learning-outcome-trace.cjs +0 -107
  374. package/bin/validated-learning-performance-policy.cjs +0 -53
  375. package/bin/validated-learning-signal.cjs +0 -463
  376. package/bin/windows-bash-dialect-policy.cjs +0 -25
  377. package/bin/windows-node-crash-dump.cjs +0 -110
  378. package/bin/write-continuation-policy.cjs +0 -69
  379. package/codebase-index/README.md +0 -82
  380. package/codebase-index/codebase_index.py +0 -470
  381. package/standard-skills/agent-browser/SKILL.md +0 -19
  382. package/standard-skills/agent-browser/references/runtime.md +0 -8
  383. package/standard-skills/blun-session-inspector/SKILL.md +0 -41
  384. package/standard-skills/blun-session-inspector/scripts/inspect-session.cjs +0 -437
  385. package/standard-skills/design-taste-frontend/SKILL.md +0 -1206
  386. package/standard-skills/full-output-enforcement/SKILL.md +0 -49
  387. package/standard-skills/high-end-visual-design/SKILL.md +0 -98
  388. package/standard-skills/image-to-code/SKILL.md +0 -1228
  389. package/standard-skills/industrial-brutalist-ui/SKILL.md +0 -92
  390. package/standard-skills/minimalist-ui/SKILL.md +0 -85
  391. package/standard-skills/motion-design-taste/SKILL.md +0 -74
  392. package/standard-skills/playwright-testing/SKILL.md +0 -19
  393. package/standard-skills/playwright-testing/references/runtime.md +0 -7
  394. package/standard-skills/premortem/SKILL.md +0 -148
  395. package/standard-skills/redesign-existing-projects/SKILL.md +0 -178
  396. package/standard-skills/research-evidence/SKILL.md +0 -39
  397. package/standard-skills/research-evidence/references/evidence-format.md +0 -104
  398. package/standard-skills/research-evidence/scripts/evidence-collection.cjs +0 -260
  399. package/standard-skills/research-evidence/scripts/score-report.cjs +0 -130
  400. package/standard-skills/screenshot-lesen/SKILL.md +0 -52
  401. package/standard-skills/stitch-design-taste/DESIGN.md +0 -121
  402. package/standard-skills/stitch-design-taste/SKILL.md +0 -184
  403. package/standard-skills/telegram-channel/SKILL.md +0 -18
  404. package/standard-skills/telegram-channel/references/runtime.md +0 -7
  405. package/standard-skills/venture-flywheel/SKILL.md +0 -32
  406. package/standard-skills/venture-flywheel/identity/project-identity.cjs +0 -146
  407. package/standard-skills/venture-flywheel/policy/capability-engine.cjs +0 -114
  408. package/standard-skills/venture-flywheel/policy/repository-trust.cjs +0 -229
  409. package/standard-skills/venture-flywheel/references/BEISPIELE-phase0.md +0 -146
  410. package/standard-skills/venture-flywheel/references/CAPABILITY-MAP.md +0 -34
  411. package/standard-skills/venture-flywheel/references/SPEC-phase0-identity-trust.md +0 -77
  412. package/standard-skills/venture-flywheel/references/SPEC-phase0-state-events.md +0 -93
  413. package/standard-skills/venture-flywheel/schemas/capability-decision.schema.json +0 -13
  414. package/standard-skills/venture-flywheel/schemas/execution-event.schema.json +0 -44
  415. package/standard-skills/venture-flywheel/schemas/project-identity.schema.json +0 -32
  416. package/standard-skills/venture-flywheel/schemas/repository-trust.schema.json +0 -57
  417. package/standard-skills/venture-flywheel/schemas/run-transition.schema.json +0 -59
  418. package/standard-skills/venture-flywheel/state/execution-event.cjs +0 -191
  419. package/standard-skills/venture-flywheel/state/task-state-machine.cjs +0 -190
  420. package/standard-skills/web-lesen/SKILL.md +0 -73
  421. package/standard-skills/web-lesen/scripts/crawl_public.py +0 -379
  422. package/standard-skills/windows-mcp/SKILL.md +0 -19
  423. package/standard-skills/windows-mcp/references/runtime.md +0 -9
  424. package/telegram-plugin/DELIVERY.md +0 -36
  425. package/telegram-plugin/bin/telegram-approval-relay.cjs +0 -290
  426. package/telegram-plugin/bin/telegram-console-status-policy.cjs +0 -175
  427. package/telegram-plugin/bin/telegram-delivery-lifecycle.cjs +0 -125
  428. package/telegram-plugin/bin/telegram-direct-reply-policy.cjs +0 -48
  429. package/telegram-plugin/bin/telegram-launcher-status-queue.cjs +0 -122
  430. package/telegram-plugin/bin/telegram-private-conversation-policy.cjs +0 -186
  431. package/telegram-plugin/bin/telegram-remote-status-policy.cjs +0 -121
  432. package/telegram-plugin/bin/telegram-reply-parts.cjs +0 -149
  433. package/telegram-plugin/bin/telegram-text-chunk-policy.cjs +0 -63
  434. package/telegram-plugin/bin/telegram-typing-keepalive.cjs +0 -89
  435. package/telegram-plugin/compat/mcp-server-fa511cd1.mjs +0 -73825
  436. /package/{bin → scripts}/fix-node-pty-perms.js +0 -0
@@ -1,251 +1,112 @@
1
1
  # Bounded session timeline and evidence recall
2
2
 
3
- Long-lived hosts already persist a session transcript. AgentSpine leaves that
4
- host-owned file in place: it never copies, archives, rewrites, places it in
5
- `MEMORY.md`, or injects it into a briefing. The timeline sidecar stores only a
6
- small, restart-safe index of redacted objective evidence, not a second
7
- transcript.
3
+ AgentSpine indexes immutable host transcripts without copying them. Signed
4
+ sidecars contain bounded redacted evidence and opaque references, never text.
5
+ Recall is private, task-scoped, context-only, and grants no authority.
8
6
 
9
- ## Enrollment contract
7
+ ## Enrollment and retrieval
10
8
 
11
- The Claude, Codex, and King adapters are deny-by-default. A regular `UserPromptSubmit` hook first
12
- creates a short-lived opaque receipt only after its exact host preflight has
13
- been verified. The receipt binds one regular, non-symlinked transcript below a
14
- verified host `projects` (Claude) or `sessions` (Codex and King) root to the exact host, session, entity, user, tenant,
15
- project, task, and optional goal step. It is not exposed in hook context or to
16
- the model.
17
-
18
- The local owner may then activate that one snapshot explicitly:
9
+ Claude, Codex, and King use separate deny-by-default adapters. Verified
10
+ `UserPromptSubmit` issues a short-lived one-use receipt bound to source,
11
+ provider, session, user, tenant, project, task, optional goal, and derived
12
+ portal/thread route. Model values, partial routes, groups, and unknown visibility
13
+ cannot enroll.
19
14
 
20
15
  ```text
21
16
  agentspine timeline-receipt --root /path/to/project
22
17
  agentspine timeline-enroll --root /path/to/project --receipt asthr_… --confirm-local-timeline
23
18
  ```
24
19
 
25
- The receipt is one-use, expires quickly, and needs the same protected local
26
- host transport that created it. Normal CLI flags cannot substitute a path,
27
- host, session, or scope. Enrollment initializes only sidecar metadata from the
28
- signed record and may revalidate fixed source metadata plus a ≤4 KiB prefix; it
29
- never scans or indexes historic transcript content. It is context-only and
30
- creates no identity, permission, delegation, tool access, approval, or policy
31
- exception.
32
-
33
- Every capture and retrieval checks the exact binding again. The profile and
34
- provider-specific transcript root must be real non-symlinked directories; the source must be a
35
- single-link regular non-symlinked file below that root. `groupId` must be
36
- exactly `null`; groups and unknown visibility are excluded from enrollment,
37
- capture, and recall. Another provider needs its own equivalent verified host
38
- evidence and does not inherit Claude enrollment by name, transcript text, or
39
- path convention.
40
-
41
- If the enrolled transcript changes or grows, the old snapshot is unavailable.
42
- There is deliberately no append or full-history fallback. A fresh host receipt
43
- and a new local confirmation renew the immutable snapshot. If a torn local
44
- enrollment state cannot be repaired, a local owner can discard only that
45
- sidecar state:
46
-
47
- ```text
48
- agentspine timeline-enrollment-recover --root /path/to/project --confirm-local-timeline-recovery
49
- ```
50
-
51
- Recovery retains no old source, receipt, or evidence and requires a fresh host
52
- receipt before another enrollment.
53
-
54
- ## Bounded retrieval
55
-
56
- Hooks do not scan, backfill, or search historic transcripts. They can expose a
57
- small freshness/status hint and a continuation capsule only. A matching
58
- `PreToolUse` guard may revalidate source metadata and a fixed ≤4 KiB prefix to
59
- reject a changed snapshot; it never extracts history. The only historic reader
60
- is a bound, on-demand MCP call:
20
+ Enrollment reads fixed metadata and at most 4 KiB. Each operation revalidates
21
+ source, root, provider, and scope; changed bytes invalidate the snapshot. No
22
+ append, broad scan, refresh, retry, or fallback exists. One-use `PreToolUse`
23
+ permits expose:
61
24
 
62
25
  ```text
63
26
  session_timeline_index(maxBytes)
64
- session_timeline_search(at | terms)
65
- session_timeline_search(at | terms, includePriorSessions: true)
27
+ session_timeline_search(at | terms, includePriorSessions, includePriorProviders)
28
+ session_timeline_capture(eventId, at | terms, includePriorSessions, interpretation)
66
29
  ```
67
30
 
68
- Indexing is serialized and bounded to 64 KiB–16 MiB per call. A search needs
69
- either one exact UTC instant such as `2026-09-04T12:40:00.000Z`, or at least two
70
- concrete terms such as `Suite PASS`. An instant is exact unless the caller
71
- explicitly requests a valid window. There is no broad-text fallback and no
72
- whole-transcript MCP tool. Timestamp seeking reads only bounded byte probes and
73
- a selected bounded range; term search uses only already indexed cards.
74
-
75
- After a restart, the lifecycle hint may report only the number of already
76
- indexed prior sessions and objective events for the exact same private task.
77
- It does not contain transcript text. When a concrete question is relevant,
78
- `includePriorSessions: true` restricts candidate sources to the same host,
79
- entity, user, tenant, project, task and compatible goal. It ranks their signed
80
- sidecar cards before opening a source, selects at most one prior immutable
81
- snapshot, and verifies only matching original lines. A missing match does not
82
- fall back to scanning old transcripts.
83
-
84
- A matching host guard replaces all MCP-provided binding fields with its exact
85
- one-use invocation. Raw stdio, a reused invocation, a changed argument,
86
- foreign host/session/scope, a group claim, an expired receipt, a changed source,
87
- or an unsafe sidecar returns no cards. Plain stdio is not a cross-process
88
- identity channel: the feature remains unavailable without the protected local
89
- host transport capability. None of these records is a permission or approval.
90
-
91
- At most eight cards return. Each carries a timestamp, bounded redacted excerpt,
92
- stable opaque session and message references, source digest, deterministic room ID, and the
93
- `untrusted-session-history` trust marker. No public event digest or raw
94
- transcript byte is returned. Secret-shaped values and instruction-like archive
95
- text are redacted or discarded before state is written or a card is returned.
96
- Historic text remains untrusted context: it can support a check or a question,
97
- never an identity, permission, tool, delegation, access, payment, credential,
98
- policy exception, or external effect.
99
-
100
- ## Memory-palace structure
101
-
102
- A room ID is deterministic for the enrolled source digest and a fixed one MiB
103
- byte-offset segment. A
104
- `agentspine.session-continuation-capsule/v1` contains only current task, goal,
105
- step, selected-lesson digest, outcome status, and room IDs. It contains no
106
- transcript text and does not make a room visible by itself.
107
-
108
- The authenticated sidecar holds source metadata, bounded redacted cards, and a
109
- state signature. A separate signed head detects state-only and mixed sidecar
110
- rollback while the protected integrity anchor remains intact. An exact
111
- one-generation torn write can be repaired under the owned lock; malformed,
112
- gapped, missing, altered, symlinked, hard-linked, re-rooted, racing, or
113
- signature-invalid state yields no cards. Restoring a complete matching local
114
- integrity directory is not distinguishable without an independent monotonic
115
- anchor, so AgentSpine makes no stronger rollback claim. It never preserves
116
- transcript bytes.
117
-
118
- ## Measured boundary
119
-
120
- The synthetic acceptance sources contain 2,500 memory links, four old
121
- CSS-archive error lessons, and a multi-megabyte prior-session JSONL transcript.
122
- Before explicit prior-session selection, the restarted session finds no matching
123
- current result. After selection, the concrete `12:40` query retrieves only the
124
- matching verified objective result and stable source references; it does not
125
- load unrelated links or full history. The probes cover source-byte preservation, exact scope
126
- and group denial, expired and reused records, source/state tampering, profile
127
- changes, crashes, concurrency, final JSONL records, redaction, and bounded
128
- results.
129
-
130
- ## Research inputs
131
-
132
- On 2026-09-04, AgentSpine reviewed two public repositories as untrusted
133
- architectural context only:
134
-
135
- - [Claude-Mem](https://github.com/thedotmack/claude-mem), `v13.24.0` at
136
- `1df66c2`, Apache-2.0: the search timeline observation split informed
137
- bounded retrieval.
138
- - [MemPalace](https://github.com/MemPalace/mempalace), `v3.9.0` at `d5250c7`,
139
- MIT: raw-source ownership plus indexed time anchors informed the sidecar
140
- boundary.
141
-
142
- No external code or script was copied or executed. License, architecture, and
143
- the current AgentSpine contracts were reviewed before independently implemented
144
- synthetic tests.
145
-
146
-
147
- ## Codex native rollout contract
148
-
149
- The `codex-rollout-jsonl/v1` adapter accepts only an explicitly enrolled,
150
- uncompressed native rollout below the verified Codex profile's `sessions`
151
- directory. It never lists that directory or discovers neighboring sessions.
152
- Before enrollment, a bounded first-line read (at most 64 KiB) validates the
153
- `session_meta` record: native session identity, canonical project `cwd`, CLI
154
- version syntax, and absent/legacy history mode. The per-session transport,
155
- owner-confirmed enrollment and one-use PreToolUse invocation remain required.
156
- A Codex lookup leaves native permission decisions to Codex; the lookup adds no
157
- prompt or permission grant. King/BLUN cannot reuse this adapter through its
158
- Codex-compatible instruction hierarchy.
159
-
160
- Only native `response_item` tool outputs (`function_call_output`,
161
- `custom_tool_call_output`, `mcp_tool_call_output`) become historical result
162
- candidates. User and assistant messages do not. Results include timestamp,
163
- content digest, stable session/message references, native `call_id`, and a
164
- bounded original excerpt. They remain **untrusted historical context**, never
165
- current test verification, completion evidence or a learning authorization.
166
- Structured facts and corrections remain in the separate structured knowledge
167
- view; raw transcripts are not copied there. Conflicting historical outcomes
168
- are retained rather than combined into a new claim.
169
-
170
- The search ranks the existing bounded index before opening one selected source.
171
- Sources must match the same host, project, tenant, user and task; groups,
172
- unregistered private files, symlink escapes and modified snapshots are excluded.
173
- A source change makes the snapshot unavailable, including after restart. No
174
- automatic enrollment refresh, receipt reset or retry follows. Missing history
175
- must be stated honestly while ordinary authorized work remains possible.
176
-
177
- Unsupported: compressed, paginated or inherited/forked history; unknown record
178
- or explicit schema versions; automatic import of a real user's sessions.
179
- `cli_version` is header provenance, not proof that every version of a
180
- Codex installation is compatible. The supported structural contract is pinned
181
- below. A changed host format requires a reviewed adapter and fresh synthetic
182
- acceptance, not unchecked migration. No Otto/Fredrik live acceptance is implied.
183
-
184
- ### Primary source provenance
185
-
186
- Inspected 2026-09-06: official [Codex hooks documentation](https://learn.chatgpt.com/docs/hooks)
187
- provides `session_id` and optional `transcript_path`, and explicitly states that
188
- the transcript format is not a stable interface. The adapter was independently
189
- implemented against [openai/codex commit 6af345407d9c2a568da9d01b6c4b81a9e61495c0](https://github.com/openai/codex/tree/6af345407d9c2a568da9d01b6c4b81a9e61495c0),
190
- Apache-2.0: `codex-rs/rollout/src/lib.rs`,
191
- `codex-rs/history/src/rollout_payload.rs`, and the protocol definitions
192
- `protocol.rs` / `models.rs`. That source workspace reports `0.0.0`; it is not an
193
- installed release-version claim. External sources supplied format evidence
194
- only; no implementation was copied or executed.
195
-
196
- Synthetic acceptance exercises native hooks and restarted MCP processes:
197
- session A stores a measured failure, session B retrieves its exact source after
198
- compaction, replay/races admit only one invocation, and foreign scope, changed
199
- sources, model claims, secret-bearing outputs and unknown formats yield no
200
- verified historical result. Fixtures create their own profiles and sessions.
201
-
202
- ## King native agent-wire contract
203
-
204
- The `king-agent-wire-jsonl/v1` adapter is separate from both Claude and Codex.
205
- King may use the Codex-compatible `AGENTS.md` hierarchy for project rules, but
206
- that does not turn its history into a Codex rollout. The verified King lifecycle
207
- keeps the runtime host identity as `codex` while binding timeline records to the
208
- distinct `king` provider.
209
-
210
- King history is never discovered automatically. The trusted local launcher must
211
- provide both `AGENTSPINE_KING_TIMELINE_SOURCE`, pointing to the current
212
- `sessions/.../session_<id>/agents/main/wire.jsonl`, and
213
- `AGENTSPINE_KING_WIRE_PROTOCOL_VERSION`, matching that file's metadata header.
214
- The source must remain below the canonical non-symlinked `BLUN_HOME/sessions`
215
- root. A prompt, model response, MCP argument, remembered fact, or filename alone
216
- cannot create this mapping. Missing mappings leave history unavailable without
217
- blocking ordinary host-authorized work.
218
-
219
- Enrollment reads only the bounded first record. It requires the exact metadata
220
- shape and configured `protocol_version`, a positive integer creation time, and
221
- the current session directory. Indexing accepts only the reviewed King record
222
- types and extracts objective evidence solely from
223
- `context.append_loop_event` records whose event is `tool.result`. User and
224
- assistant messages, model claims, unknown records, unknown schema versions, and
225
- non-text tool outputs create no evidence card. The native `toolCallId` becomes
226
- the stable message reference; the record time remains the source timestamp.
227
-
228
- King keeps its own permission decisions. AgentSpine only binds a one-use,
229
- context-only lookup to the current verified gateway, transport, source, and
230
- scope. Restart and compaction reuse signed sidecar metadata, then revalidate the
231
- unchanged original source before any selected line is opened. A protocol change,
232
- source mutation, replay, foreign project or tenant, group context, or unknown
233
- record makes recall unavailable and never triggers a retry or enrollment reset.
234
-
235
- ### Primary source provenance
236
-
237
- Inspected 2026-09-06: [BLUN Code commit fbb97459a3fa2157f8bfea3d24931be63288ab11](https://github.com/Maykbiletti/blun-code/tree/fbb97459a3fa2157f8bfea3d24931be63288ab11),
238
- application version `1.0.109`, MIT. Its public verification fixture locates the
239
- main agent wire at `sessions/.../session_<id>/agents/main/wire.jsonl` and reads
240
- `context.append_loop_event` / `tool.result`; the vendored King runtime type
241
- surface identifies the reviewed record union and metadata fields. The vendored
242
- `@blun/king-sdk` contract is version `0.12.1`, MIT. External files were treated
243
- as untrusted format evidence; no implementation was copied or executed.
244
-
245
- Synthetic repository acceptance proves A-to-B recall of one measured `FAIL
246
- 0/15` result after restart and compaction, with immutable source bytes and
247
- stable session/message references. It also covers exact gateway binding,
248
- wrong protocol, wrong path/scope/provider, replay/race, mutation, and unknown
249
- records. This does not prove Fredrik's installed launcher supplies these two
250
- protected mappings, that King enforces a returned block decision, or that a
251
- live session passed. Those remain separate live-host checks.
31
+ Indexing is serialized and limited to 64 KiB–16 MiB. Search uses an exact UTC
32
+ window or two terms, opens ≤1 ranked source, verifies bounded lines,
33
+ returns at most eight cards, and never widens misses. Prior sessions require the
34
+ exact private route. Cross-provider recall additionally requires
35
+ `AGENTSPINE_TIMELINE_CROSS_PROVIDER=1` and both prior flags while retaining the
36
+ original provider enrollment.
37
+
38
+ Capture consumes a new permit and derives provenance from the reopened source.
39
+ Only allowlisted objective fields enter the existing world model. Direct stdio,
40
+ replay mutation, foreign/group scope, expiry, unsafe state, or changed bytes
41
+ writes nothing. Conflicts remain unresolved; duplicates survive restart.
42
+
43
+ ## Natural user-message continuity (development)
44
+
45
+ Authenticated routes may retain 256 native user references without evicting
46
+ objective/strict-correction evidence; the combined cap is 4096. Text and derived
47
+ terms are not indexed. The technical `user message` query selects this lane.
48
+
49
+ Capture rechecks one single-line user message (maximum 2048 UTF-8 bytes), its
50
+ route, and checkpoint. The exact quote becomes an `uninterpreted-user-message`
51
+ assumption with provenance and target—not a fact, correction, completion,
52
+ supersession, permission, or action.
53
+
54
+ One active candidate may receive a source-bound
55
+ `agentspine.timeline-user-feedback-interpretation-request/v1` proposal. Two or
56
+ three same-task candidates accept only an
57
+ `agentspine.timeline-user-feedback-clarification-request/v2` bound to the full
58
+ sorted assertion set. Each candidate keeps its own provider, session, message,
59
+ source digest, message digest and timestamp. Each registered source is reopened
60
+ and rechecked within the capture gate; partial, reordered, changed,
61
+ foreign-scope, unregistered, or larger sets fail. Replay deduplicates and
62
+ competing proposals conflict.
63
+
64
+ Both private `model-suggestion` forms keep model/source provenance, target,
65
+ replaced next step, and `completionVerified:false`; neither mutates continuation
66
+ nor grants authority. Pre-answer recall carries them across restart/compaction.
67
+ Three candidates use lossless field/row encoding. King's
68
+ bounded form shares repeated values and prefixes, so all IDs, messages, times,
69
+ provider, session, and source digest reconstruct within the unchanged 1200-byte
70
+ host field.
71
+
72
+ An objective result may advance continuation only when the same private task
73
+ and route already contain one confirmed
74
+ `agentspine.timeline-continuation-outcome-contract/v1`. The contract fixes the
75
+ exact current step, test label, total, success count, and success state before
76
+ the event. Capture reopens the source, retains the raw measurement, and then
77
+ updates `lastVerifiedStep`; failure keeps the agreed step without retrying,
78
+ while success applies only the contract's explicit next step or terminal state.
79
+ Postdated, stale, conflicting, foreign, superseded, or model-suggested contracts
80
+ cannot advance work. A newer user correction wins because its step no longer
81
+ matches the old contract. Raw contradictory outcomes remain visible uncertainty.
82
+
83
+ The deterministic lane still requires a whole native line beginning
84
+ `Correction: next step:` or `Korrektur: nächster Schritt:` and changes only
85
+ `nextStep` on one same-thread active conflict-free continuation. Ordinary,
86
+ assistant, multiline, stale, unsafe, foreign, and group inputs fail.
87
+
88
+ Repository tests for Claude, Codex, and King are independent. Quotes,
89
+ hypotheticals, negations, old/foreign text, and completion claims remain context.
90
+ Acceptance still needs a genuinely new model session to recognize the job, name
91
+ its result file, apply a natural correction, and ask only on real ambiguity.
92
+ Technical checks do not prove semantics, repetition, tokens, or live behavior.
93
+
94
+ ## Integrity and provider formats
95
+
96
+ Signed sidecar, head, and protected anchor detect state-only/mixed rollback. One
97
+ torn generation is lock-repairable; malformed, missing, altered, linked,
98
+ rerooted, racing, or signature-invalid state yields no cards. Detecting a fully
99
+ matching anchor restoration needs an external monotonic anchor. Failure means
100
+ unverified recall, not a work ban or retry loop.
101
+
102
+ `codex-rollout-jsonl/v1` accepts one enrolled uncompressed file below verified
103
+ Codex `sessions` and validates bounded `session_meta`; `king-agent-wire-jsonl/v1`
104
+ requires a protected source/protocol mapping. Unknown, inherited, compressed,
105
+ or changed formats fail closed. Only reviewed native tool results yield
106
+ objective cards; chat never does.
107
+
108
+ Format provenance was inspected on 2026-09-06 in [Codex hooks](https://learn.chatgpt.com/docs/hooks),
109
+ [Codex 6af3454](https://github.com/openai/codex/tree/6af345407d9c2a568da9d01b6c4b81a9e61495c0),
110
+ and [BLUN fbb97459](https://github.com/Maykbiletti/blun-code/tree/fbb97459a3fa2157f8bfea3d24931be63288ab11).
111
+ No source was copied/executed; live mapping, trust, blocking, model use, and
112
+ installation remain separate acceptance boundaries.
@@ -75,6 +75,31 @@ facts, preferences, decisions, or error lessons and keeps their source reference
75
75
  Uncertain, stale, superseded, private, foreign, and terminal state is excluded.
76
76
  No transcript or source is opened, and the view grants no authority.
77
77
 
78
+ ## Authenticated portal and thread continuity
79
+
80
+ When the gateway starts a portal-bound task, it derives opaque `portalRef` and
81
+ `threadRef` values from the complete authenticated route. The MCP runtime, not
82
+ the model or tool arguments, attaches that pair to structured knowledge whose
83
+ subject is the exact current task. `SessionStart`, `PostCompact`,
84
+ `session_briefing`, and `world_context` then use the same pair. A continuation,
85
+ decision, correction, or error lesson about that task is visible only on that
86
+ route, even when another portal thread uses the same user, project, and task ID.
87
+
88
+ An unbound reader cannot see route-bound task knowledge. Conversely, an
89
+ authenticated portal task does not silently inherit older unbound task-local
90
+ knowledge. Historical records remain byte-valid and stored, but need an
91
+ explicitly reviewed migration rather than an inferred binding. Supersession
92
+ must keep subject, predicate, portal, and thread identical, so a correction in
93
+ one conversation cannot retire another conversation's state.
94
+
95
+ This narrower rule does not trap intentionally portable memory. General user
96
+ preferences and measured project-level lessons that are not assertions about
97
+ the current task retain their existing project/group/privacy scope and may be
98
+ reused across threads. Portal references are not MCP input fields, do not expose
99
+ raw route identifiers, and grant no retrieval, sending, tool, or execution
100
+ right. A host without the authenticated gateway pair gets no portal-bound task
101
+ context.
102
+
78
103
  ## Privacy and authority
79
104
 
80
105
  Assertions use `private`, `shared`, or exact `group` privacy. A group read rejects private inclusion, sees only its exact group records plus shared records, and cannot observe another group's values. Project-scoped records are visible only in that exact project; unscoped records may follow the same installation across project turns when intentionally read from that root.
@@ -14,7 +14,7 @@
14
14
  ],
15
15
  "PreToolUse": [
16
16
  {
17
- "matcher": "^(?:Edit|Write|apply_patch|Bash|PowerShell|mcp__(?:plugin_agent-spine_agent-spine|agent-spine)__session_timeline_(?:index|search))$",
17
+ "matcher": "^(?:Edit|Write|apply_patch|Bash|PowerShell|mcp__(?:plugin_agent-spine_agent-spine|agent-spine)__session_timeline_(?:index|search|capture))$",
18
18
  "hooks": [{ "type": "command", "command": "node \"${PLUGIN_ROOT}/src/hook.js\"", "timeout": 15 }]
19
19
  }
20
20
  ],
@@ -37,7 +37,7 @@
37
37
  ],
38
38
  "PreToolUse": [
39
39
  {
40
- "matcher": "^(?:Edit|Write|apply_patch|Bash|PowerShell|mcp__plugin_agent-spine_agent-spine__session_timeline_(?:index|search))$",
40
+ "matcher": "^(?:Edit|Write|apply_patch|Bash|PowerShell|mcp__plugin_agent-spine_agent-spine__session_timeline_(?:index|search|capture))$",
41
41
  "hooks": [
42
42
  {
43
43
  "type": "command",
@@ -19,15 +19,13 @@
19
19
  "assets",
20
20
  "bin",
21
21
  "docs/acceptance.md",
22
- "docs/assignment-continuation.md",
22
+ "docs/artifact-evaluation.md",
23
23
  "docs/host-integration.md",
24
24
  "docs/preflight-recall.md",
25
25
  "docs/preservation-contract.md",
26
26
  "docs/quality-gates.md",
27
- "docs/releasing.md",
28
27
  "docs/session-timeline.md",
29
28
  "docs/source-roots.md",
30
- "docs/structured-completion.md",
31
29
  "docs/world-model.md",
32
30
  "hooks",
33
31
  "scripts",
@@ -5,8 +5,8 @@ import { isAbsolute, relative, resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { installedHostEnvironment } from "./check-install-hook.js";
7
7
 
8
- const TIMELINE_PRE_TOOL_MATCHER = "^(?:Edit|Write|apply_patch|Bash|PowerShell|mcp__plugin_agent-spine_agent-spine__session_timeline_(?:index|search))$";
9
- const BLUN_TIMELINE_PRE_TOOL_MATCHER = "^(?:Edit|Write|apply_patch|Bash|PowerShell|exec_command|mcp__(?:agent-spine|plugin-agent-spine_agent-spine)__session_timeline_(?:index|search))$";
8
+ const TIMELINE_PRE_TOOL_MATCHER = "^(?:Edit|Write|apply_patch|Bash|PowerShell|mcp__plugin_agent-spine_agent-spine__session_timeline_(?:index|search|capture))$";
9
+ const BLUN_TIMELINE_PRE_TOOL_MATCHER = "^(?:Edit|Write|apply_patch|Bash|PowerShell|exec_command|mcp__agent-spine__session_timeline_(?:index|search|capture))$";
10
10
 
11
11
  function assert(condition, message) {
12
12
  if (!condition) throw new Error(message);
@@ -168,7 +168,7 @@ export async function checkHosts(root = process.cwd()) {
168
168
  required: [...commonEvents, "InstructionsLoaded"], commandRoot: "CLAUDE_PLUGIN_ROOT"
169
169
  });
170
170
  const codexHookInventory = validateHooks(root, codexHooks, { required: commonEvents, commandRoot: "PLUGIN_ROOT",
171
- matcher: "^(?:Edit|Write|apply_patch|Bash|PowerShell|mcp__(?:plugin_agent-spine_agent-spine|agent-spine)__session_timeline_(?:index|search))$" });
171
+ matcher: "^(?:Edit|Write|apply_patch|Bash|PowerShell|mcp__(?:plugin_agent-spine_agent-spine|agent-spine)__session_timeline_(?:index|search|capture))$" });
172
172
  const blunHookInventory = validateBlunHooks(root, blunManifest.hooks);
173
173
  const registrations = await Promise.all([
174
174
  initializeServer({ label: "blun", root, variable: "BLUN_PLUGIN_ROOT", server: blunManifest.mcpServers["agent-spine"], version: pkg.version }),
@@ -5,9 +5,10 @@ import { resolve } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
 
7
7
  const SEMVER_RE = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;
8
- const MAX_PACKED_BYTES = 520 * 1024;
9
- // Includes the native Codex history adapter and its documented format contract.
10
- const MAX_UNPACKED_BYTES = 2336 * 1024;
8
+ // Includes the bounded user-feedback candidate path; this is not semantic acceptance.
9
+ // Measured code growth before documentation: 1874 packed / 7830 unpacked bytes.
10
+ const MAX_PACKED_BYTES = 544 * 1024;
11
+ const MAX_UNPACKED_BYTES = 2430 * 1024;
11
12
  const REQUIRED_PACKAGE_FILES = [
12
13
  "blun.plugin.json", ".claude-plugin/plugin.json", ".codex-plugin/plugin.json", ".mcp.json",
13
14
  "CHANGELOG.md", "LICENSE", "README.md", "bin/agentspine.js", "bin/agentspine-mcp.js",
@@ -15,8 +16,12 @@ const REQUIRED_PACKAGE_FILES = [
15
16
  "src/lib/codex-skill-installation.js", "src/cli-host.js",
16
17
  "docs/acceptance.md", "docs/source-roots.md", "docs/preflight-recall.md", "docs/preservation-contract.md",
17
18
  "docs/world-model.md", "docs/session-timeline.md", "scripts/run-acceptance.js", "skills/agent-spine/SKILL.md",
19
+ "docs/artifact-evaluation.md", "src/lib/learning-artifact-evaluator.js",
20
+ "src/lib/gateway-group-response.js", "src/lib/channel-continuity.js",
18
21
  "src/index.js", "src/mcp.js", "src/lib/mcp-world-tools.js", "src/lib/world-model.js", "src/lib/session-timeline.js",
19
22
  "src/lib/session-timeline-auth.js", "src/lib/session-timeline-results.js", "src/lib/session-timeline-state.js", "src/lib/mcp-timeline-tools.js", "src/worker.js",
23
+ "src/lib/timeline-world-capture.js",
24
+ "src/lib/timeline-user-feedback.js",
20
25
  "hooks/hooks.json", "hooks/codex.json", "hooks/version.json"
21
26
  ];
22
27
  const FORBIDDEN_PACKAGE_PATHS = [
@@ -72,8 +77,8 @@ function validatePackageReport(report, version) {
72
77
  assert(typeof item.filename === "string" && item.filename.endsWith(`-${version}.tgz`), "npm pack filename is not versioned correctly");
73
78
  assert(typeof item.integrity === "string" && item.integrity.startsWith("sha512-"), "npm pack did not report SHA-512 integrity");
74
79
  assert(Number.isInteger(item.entryCount) && item.entryCount > 0 && item.entryCount <= 500, "npm package file count is outside the release limit");
75
- assert(Number.isInteger(item.size) && item.size > 0 && item.size <= MAX_PACKED_BYTES, "npm package exceeds the 520 KiB packed release limit");
76
- assert(Number.isInteger(item.unpackedSize) && item.unpackedSize > 0 && item.unpackedSize <= MAX_UNPACKED_BYTES, "npm package exceeds the 2336 KiB unpacked release limit");
80
+ assert(Number.isInteger(item.size) && item.size > 0 && item.size <= MAX_PACKED_BYTES, "npm package exceeds the 544 KiB packed release limit");
81
+ assert(Number.isInteger(item.unpackedSize) && item.unpackedSize > 0 && item.unpackedSize <= MAX_UNPACKED_BYTES, "npm package exceeds the 2430 KiB unpacked release limit");
77
82
  const paths = (item.files || []).map((file) => file.path);
78
83
  assert(paths.length === new Set(paths).size, "npm package contains duplicate paths");
79
84
  for (const path of REQUIRED_PACKAGE_FILES) assert(paths.includes(path), `npm package is missing required file: ${path}`);
@@ -7,9 +7,12 @@ import { githubErrorCommand } from "./github-actions.js";
7
7
  const CHECKS = [
8
8
  { title: "Syntax check", script: "lint" },
9
9
  { title: "Line budget", script: "line-budget" },
10
- { title: "Hermetic test suite", script: "test" },
11
10
  { title: "Host manifest check", script: "host:check" },
11
+ // Exercise the copied-bundle hook deadlines before the hermetic suite creates
12
+ // hundreds of short-lived Windows processes. The deadlines and assertions stay
13
+ // unchanged; this removes residual runner load from the installed-host probe.
12
14
  { title: "Installed bundle check", script: "host:install-check" },
15
+ { title: "Hermetic test suite", script: "test" },
13
16
  { title: "Runtime smoke test", script: "smoke" },
14
17
  { title: "Self audit", script: "audit:self" }
15
18
  ];
@@ -9,7 +9,11 @@ import { configuredTestTimeout, runBoundedProcess } from "./hermetic-process.js"
9
9
  const root = resolve(fileURLToPath(new URL("..", import.meta.url)));
10
10
  const base = await mkdtemp(join(tmpdir(), "agentspine-hermetic-tests-"));
11
11
  const testFiles = (await readdir(join(root, "test"))).filter((name) => name.endsWith(".test.js")).sort();
12
- const concurrency = Math.max(1, Math.min(4, cpus().length));
12
+ // Windows process creation and antivirus-backed temporary I/O contend sharply
13
+ // when several hermetic files each spawn MCP children. Preserve the real child
14
+ // deadlines by reducing runner load there, rather than relaxing any deadline.
15
+ const concurrencyCeiling = process.platform === "win32" ? 2 : 4;
16
+ const concurrency = Math.max(1, Math.min(concurrencyCeiling, cpus().length));
13
17
  const testTimeoutMs = configuredTestTimeout();
14
18
  const slowTestTimeouts = new Map([
15
19
  ["indexed-memory.test.js", 300_000]
@@ -51,11 +55,33 @@ async function runOne(file, mode, index) {
51
55
  async function runMode(mode) {
52
56
  const indexed = testFiles.map((file, index) => ({ file, index }));
53
57
  const results = [];
54
- // Installation copies complete bundles and checks real 2-second source / 5-second
55
- // child-hook deadlines. Keep that healthy-baseline probe off the shared I/O pool.
56
- // Both profiles still run it once, with identical assertions and time limits.
57
- const isolated = indexed.filter(item => item.file === "package.test.js");
58
- const queue = indexed.filter(item => item.file !== "package.test.js");
58
+ // Installation copies complete bundles, while the MCP and route-lifecycle tests
59
+ // start real children with fixed deadlines and host-origin enrollment attests a
60
+ // live source plus signed state. Keep those probes off the shared Windows I/O pool.
61
+ // Both profiles still run them once, with unchanged assertions and limits.
62
+ const isolatedNames = new Set([
63
+ "assignment-continuation-boundaries.test.js",
64
+ "assignment-continuation.test.js",
65
+ "codex-history.test.js",
66
+ "hook-artifact-guards.test.js",
67
+ "hook.test.js",
68
+ "cross-provider-history.test.js",
69
+ "delivery-completion.test.js",
70
+ "hook-briefing-use.test.js",
71
+ "king-history.test.js",
72
+ "lesson-recall.test.js",
73
+ "mcp-bounded-preflight.test.js",
74
+ "mcp-bounded-recovery.test.js",
75
+ "package.test.js",
76
+ "portal-thread-continuity.test.js",
77
+ "mcp.test.js",
78
+ "owned-file-lock.test.js",
79
+ "session-timeline-host-origin.test.js",
80
+ "session-timeline-invocation.test.js",
81
+ "timeline-natural-feedback.test.js"
82
+ ]);
83
+ const isolated = indexed.filter(item => isolatedNames.has(item.file));
84
+ const queue = indexed.filter(item => !isolatedNames.has(item.file));
59
85
  for (const item of isolated) results.push(await runOne(item.file, mode, item.index));
60
86
  async function worker() { while (queue.length) { const item = queue.shift(); results.push(await runOne(item.file, mode, item.index)); } }
61
87
  await Promise.all(Array.from({ length: concurrency }, () => worker()));
@@ -1,7 +1,10 @@
1
1
  import { addLearningEvidence, beginLearningRevalidation, configureLearning, deleteLearning, evaluateLearning, learningContext, learningOutcomeStatus, loadLearning, proposeLearning, purgeStaleLearningApplications, purgeStaleLearningMeasurements, recordLearningMeasurement, recordLearningOutcome, registerLearningEvaluation, registerLearningEvaluator, renewLearningValidation, revokeLearningEvaluator, reviewLearning, revokeLearningApplication, revokeLearningDelivery, revokeLearningEvaluation, revokeLearningEvidence, revokeLearningMeasurement, revokeLearningOutcome, revokeLearningTrialFailure, revokeLearningValidation, revokeLearningEvidenceSourceAttestation, rollbackLearning } from "./lib/learning.js";
2
2
  import { booleanFlag, evaluatorRootsFlag, hasLearningScope, learningScope, output } from "./cli-common.js";
3
+ import { artifactEvaluationPlan, measureLearningArtifacts } from "./lib/learning-artifact-evaluator.js";
3
4
 
4
5
  export const learningCommands = new Set([
6
+ "learn-artifact-plan",
7
+ "learn-artifact-measure",
5
8
  "learn-propose",
6
9
  "learn-evidence",
7
10
  "learn-evidence-revoke",
@@ -32,6 +35,18 @@ export const learningCommands = new Set([
32
35
  ]);
33
36
 
34
37
  export async function runLearningCommand({ command, flags, positional, json }) {
38
+ if (command === "learn-artifact-plan" || command === "learn-artifact-measure") {
39
+ const text = flags.checks;
40
+ if (typeof text !== "string" || Buffer.byteLength(text) > 16384) {
41
+ throw new Error("--checks must contain a bounded artifact-checks JSON specification");
42
+ }
43
+ const spec = JSON.parse(text);
44
+ if (command === "learn-artifact-plan") return output(artifactEvaluationPlan(spec), json);
45
+ return output(await measureLearningArtifacts({ root: flags.root || process.cwd(), spec,
46
+ id: positional[0], learningId: flags.learning, evaluationId: flags.evaluation,
47
+ phase: flags.phase, scope: learningScope(flags), evaluatorId: flags.evaluator, runId: flags.run,
48
+ confirmLocalMeasurement: booleanFlag(flags["confirm-local-measurement"]) }), json);
49
+ }
35
50
  if (command === "learn-propose") {
36
51
  return output(await proposeLearning({
37
52
  root: flags.root || process.cwd(), id: positional[0], kind: flags.kind,
@@ -50,6 +50,8 @@ Usage:
50
50
  agentspine learn-trial-failure-revoke <trial-failure-id> --reason-code clock-invalid|host-invalid|receipt-invalid|scope-invalid|duplicate|other --reason text --confirm-local-trial-failure-revocation
51
51
  agentspine learn-revalidation-start <learning-id> --confirm-local-validation
52
52
  agentspine learn-revalidate <learning-id> --measurements id,id --applications id,id --deliveries id,id --confirm-local-validation
53
+ agentspine learn-artifact-plan --checks JSON [--json]
54
+ agentspine learn-artifact-measure <id> --root path --checks JSON --learning id --evaluation id --phase before|after --evaluator id --run id --persona id --user id --tenant id --project id [--task id] [--group id] --confirm-local-measurement [--json]
53
55
  agentspine learn-measurement <id> --learning id --evaluation id --phase before|after --metric name --direction higher|lower --value 0..1 --measurement objective|user-feedback|model-suggestion --evaluator id --run id --source-digest sha256 --dataset-digest sha256 --case-count n --confirm-local-measurement
54
56
  agentspine learn-measurement-revoke <measurement-id> --reason-code source-invalid|evaluator-invalid|protocol-invalid|duplicate|other --reason text --confirm-local-measurement-revocation
55
57
  agentspine learn-application-revoke <application-id> --reason-code preflight-invalid|scope-invalid|projection-invalid|duplicate|other --reason text --confirm-local-application-revocation