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,379 +0,0 @@
1
- 'use strict';
2
-
3
- const crypto = require('node:crypto');
4
- const fs = require('node:fs');
5
- const path = require('node:path');
6
- const { openCognitiveMemoryAdapter } = require('./cognitive-memory-adapter.cjs');
7
-
8
- const SAFE_ID_RE = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/u;
9
- const SENSITIVITIES = new Set(['low', 'medium']);
10
- const INPUT_KEYS = [
11
- 'actorId', 'agentId', 'conversationId', 'cooldownMs', 'messageId', 'occurredAt',
12
- 'receivedAt', 'sensitivity', 'sourceChannel', 'sourcePortal', 'tenantId', 'topic',
13
- ];
14
- const RELATIONSHIP_RECORD_KEYS = [
15
- 'actorId', 'agentId', 'conversationId', 'kind', 'messageId', 'occurredAt',
16
- 'receivedAt', 'sourceChannel', 'sourcePortal', 'tenantId', 'value',
17
- ];
18
- const RELATIONSHIP_READ_KEYS = [
19
- 'actorId', 'agentId', 'conversationId', 'messageId', 'sourceChannel',
20
- 'sourcePortal', 'tenantId',
21
- ];
22
- const RELATIONSHIP_KINDS = new Set([
23
- 'explicit_relationship_note', 'open_thread', 'repair_lesson',
24
- ]);
25
- const FORBIDDEN_RELATIONSHIP_RE = /\b(?:acl|admin|api[_ -]?key|capability|deploy|freigabe|passwor[dt]|permission|secret|token|write access|zugriffs?recht|du darfst|you may)\b/iu;
26
- const RELATIONSHIP_KEY_PREFIX = 'relationship-note-v1:';
27
- const MAX_COOLDOWN_MS = 90 * 24 * 60 * 60 * 1000;
28
-
29
- function fail(code) {
30
- const error = new Error(code);
31
- error.code = code;
32
- throw error;
33
- }
34
-
35
- function exactKeys(value, expected) {
36
- return value && typeof value === 'object' && !Array.isArray(value)
37
- && Object.keys(value).sort().join('\0') === expected.join('\0');
38
- }
39
-
40
- function safeId(value) {
41
- const text = String(value ?? '').trim();
42
- return SAFE_ID_RE.test(text) ? text : '';
43
- }
44
-
45
- function cleanText(value, max) {
46
- const text = String(value ?? '').replace(/[\u0000-\u001f\u007f]+/gu, ' ').replace(/\s+/gu, ' ').trim();
47
- return text && text.length <= max ? text : '';
48
- }
49
-
50
- function digest(prefix, values) {
51
- return `${prefix}-${crypto.createHash('sha256').update(values.join('\0')).digest('hex').slice(0, 40)}`;
52
- }
53
-
54
- function relationshipScope(actorId) {
55
- const direct = `relationship:${actorId}:private`;
56
- return direct.length <= 128 ? direct : `relationship:${digest('actor', [actorId]).slice(0, 30)}:private`;
57
- }
58
-
59
- function normalizePresentation(input) {
60
- if (!exactKeys(input, INPUT_KEYS)) fail('PERSONALITY_MEMORY_FORBIDDEN_FIELD');
61
- const normalized = {
62
- tenantId: safeId(input.tenantId),
63
- agentId: safeId(input.agentId),
64
- actorId: safeId(input.actorId),
65
- sourcePortal: safeId(input.sourcePortal),
66
- sourceChannel: safeId(input.sourceChannel),
67
- conversationId: safeId(input.conversationId),
68
- messageId: safeId(input.messageId),
69
- occurredAt: String(input.occurredAt ?? '').trim(),
70
- receivedAt: String(input.receivedAt ?? '').trim(),
71
- topic: safeId(input.topic),
72
- sensitivity: String(input.sensitivity ?? ''),
73
- cooldownMs: Number(input.cooldownMs),
74
- };
75
- if (!normalized.tenantId || !normalized.agentId || !normalized.actorId
76
- || !normalized.sourcePortal || !normalized.sourceChannel || !normalized.conversationId
77
- || !normalized.messageId || !normalized.topic || !SENSITIVITIES.has(normalized.sensitivity)
78
- || Number.isNaN(Date.parse(normalized.occurredAt))
79
- || Number.isNaN(Date.parse(normalized.receivedAt))
80
- || !Number.isSafeInteger(normalized.cooldownMs) || normalized.cooldownMs < 1000
81
- || normalized.cooldownMs > MAX_COOLDOWN_MS) {
82
- fail('PERSONALITY_MEMORY_INVALID_INPUT');
83
- }
84
- normalized.occurredAt = new Date(normalized.occurredAt).toISOString();
85
- normalized.receivedAt = new Date(normalized.receivedAt).toISOString();
86
- return normalized;
87
- }
88
-
89
- function normalizeRelationshipRecord(input) {
90
- if (!exactKeys(input, RELATIONSHIP_RECORD_KEYS)) fail('PERSONALITY_MEMORY_FORBIDDEN_FIELD');
91
- const normalized = {
92
- tenantId: safeId(input.tenantId),
93
- agentId: safeId(input.agentId),
94
- actorId: safeId(input.actorId),
95
- sourcePortal: safeId(input.sourcePortal),
96
- sourceChannel: safeId(input.sourceChannel),
97
- conversationId: safeId(input.conversationId),
98
- messageId: safeId(input.messageId),
99
- occurredAt: String(input.occurredAt ?? '').trim(),
100
- receivedAt: String(input.receivedAt ?? '').trim(),
101
- kind: String(input.kind ?? ''),
102
- value: cleanText(input.value, 280),
103
- };
104
- if (!normalized.tenantId || !normalized.agentId || !normalized.actorId
105
- || !normalized.sourcePortal || normalized.sourceChannel !== 'direct'
106
- || !normalized.conversationId || !normalized.messageId
107
- || Number.isNaN(Date.parse(normalized.occurredAt))
108
- || Number.isNaN(Date.parse(normalized.receivedAt))
109
- || !RELATIONSHIP_KINDS.has(normalized.kind) || !normalized.value) {
110
- fail('PERSONALITY_MEMORY_INVALID_INPUT');
111
- }
112
- if (FORBIDDEN_RELATIONSHIP_RE.test(normalized.value)) fail('PERSONALITY_MEMORY_FORBIDDEN_FIELD');
113
- normalized.occurredAt = new Date(normalized.occurredAt).toISOString();
114
- normalized.receivedAt = new Date(normalized.receivedAt).toISOString();
115
- return normalized;
116
- }
117
-
118
- function normalizeRelationshipRead(input) {
119
- if (!exactKeys(input, RELATIONSHIP_READ_KEYS)) fail('PERSONALITY_MEMORY_FORBIDDEN_FIELD');
120
- const normalized = {
121
- tenantId: safeId(input.tenantId),
122
- agentId: safeId(input.agentId),
123
- actorId: safeId(input.actorId),
124
- sourcePortal: safeId(input.sourcePortal),
125
- sourceChannel: safeId(input.sourceChannel),
126
- conversationId: safeId(input.conversationId),
127
- messageId: safeId(input.messageId),
128
- };
129
- if (Object.values(normalized).some((value) => !value)) fail('PERSONALITY_MEMORY_INVALID_INPUT');
130
- return normalized;
131
- }
132
-
133
- function relationshipMemoryAccess(value, receiptId) {
134
- return {
135
- tenantId: value.tenantId,
136
- userId: value.actorId,
137
- actorId: value.actorId,
138
- agentId: value.agentId,
139
- portalId: value.sourcePortal,
140
- channelId: value.sourceChannel,
141
- conversationId: value.conversationId,
142
- requestedScope: relationshipScope(value.actorId),
143
- permissionContext: {
144
- authority: 'runtime_personality_policy',
145
- decision: 'passed',
146
- receiptId,
147
- },
148
- };
149
- }
150
-
151
- function relationshipKindFromKey(key) {
152
- for (const kind of RELATIONSHIP_KINDS) {
153
- if (String(key ?? '').startsWith(`${RELATIONSHIP_KEY_PREFIX}${kind}:`)) return kind;
154
- }
155
- return '';
156
- }
157
-
158
- function currentRelationshipNotes(state) {
159
- const observations = Array.isArray(state?.observations) ? state.observations : [];
160
- const superseded = new Set(observations.map((item) => item?.supersedes).filter(Boolean));
161
- const withdrawn = new Set(observations.map((item) => item?.withdraws).filter(Boolean));
162
- return observations.filter((item) => relationshipKindFromKey(item?.key)
163
- && !superseded.has(item?.observation_id)
164
- && !withdrawn.has(item?.observation_id));
165
- }
166
-
167
- function createPersonalityMemoryAdapter({ identityRoot, memoryAdapter } = {}) {
168
- const root = path.resolve(String(identityRoot ?? ''));
169
- try {
170
- const stat = fs.lstatSync(root);
171
- if (!stat.isDirectory() || stat.isSymbolicLink() || path.basename(root).toLowerCase() !== 'identity') {
172
- fail('PERSONALITY_MEMORY_UNSAFE_ROOT');
173
- }
174
- } catch (error) {
175
- if (error?.code === 'PERSONALITY_MEMORY_UNSAFE_ROOT') throw error;
176
- fail('PERSONALITY_MEMORY_UNSAFE_ROOT');
177
- }
178
- const realRoot = fs.realpathSync(root);
179
- const home = path.dirname(realRoot);
180
- const store = openCognitiveMemoryAdapter({ home, adapter: memoryAdapter });
181
-
182
- function readRelationshipState(value, receiptId) {
183
- const access = relationshipMemoryAccess(value, receiptId);
184
- return {
185
- access,
186
- state: store.read({ tenantId: value.tenantId, agentId: value.agentId }, access),
187
- };
188
- }
189
-
190
- function recordRelationshipLearning(input) {
191
- const value = normalizeRelationshipRecord(input);
192
- const eventId = digest('relationship-event', [
193
- value.tenantId, value.agentId, value.actorId, value.sourcePortal, value.sourceChannel,
194
- value.conversationId, value.messageId, value.occurredAt, value.kind, value.value,
195
- ]);
196
- const key = `${RELATIONSHIP_KEY_PREFIX}${value.kind}:${digest('value', [value.value])}`;
197
- const { access, state } = readRelationshipState(value, eventId);
198
- const matching = currentRelationshipNotes(state).find((item) => item.key === key);
199
- if (store.hasEvent({
200
- eventId,
201
- tenantId: value.tenantId,
202
- agentId: value.agentId,
203
- visibilityScope: relationshipScope(value.actorId),
204
- }, access)) {
205
- return {
206
- status: matching?.epistemic_state === 'verified' ? 'confirmed' : 'pending',
207
- idempotent: true,
208
- observation_id: matching?.observation_id,
209
- };
210
- }
211
- if (matching?.epistemic_state === 'verified') {
212
- return { status: 'confirmed', idempotent: true, observation_id: matching.observation_id };
213
- }
214
-
215
- const confirmed = matching?.epistemic_state === 'credible_unverified';
216
- for (let attempt = 0; attempt < 3; attempt += 1) {
217
- const current = attempt === 0
218
- ? state
219
- : store.read({ tenantId: value.tenantId, agentId: value.agentId }, access);
220
- const currentMatch = currentRelationshipNotes(current).find((item) => item.key === key);
221
- if (currentMatch?.epistemic_state === 'verified') {
222
- return { status: 'confirmed', idempotent: true, observation_id: currentMatch.observation_id };
223
- }
224
- const shouldConfirm = confirmed || currentMatch?.epistemic_state === 'credible_unverified';
225
- const observationId = digest('relationship-observation', [eventId]);
226
- try {
227
- store.commit({
228
- tenantId: value.tenantId,
229
- agentId: value.agentId,
230
- eventId,
231
- expectedVersion: current.version,
232
- occurredAt: value.occurredAt,
233
- receivedAt: value.receivedAt,
234
- retentionClass: 'relationship',
235
- source: {
236
- provider: value.sourcePortal,
237
- channel_id: value.sourceChannel,
238
- actor_id: value.actorId,
239
- context_id: value.conversationId,
240
- message_id: value.messageId,
241
- },
242
- observations: [{
243
- observation_id: observationId,
244
- domain: 'team',
245
- key,
246
- value: value.value,
247
- confidence: shouldConfirm ? 1 : 0.75,
248
- epistemic_state: shouldConfirm ? 'verified' : 'credible_unverified',
249
- scope: relationshipScope(value.actorId),
250
- ...(shouldConfirm ? { supersedes: currentMatch.observation_id } : {}),
251
- }],
252
- }, access);
253
- return {
254
- status: shouldConfirm ? 'confirmed' : 'pending',
255
- idempotent: false,
256
- observation_id: observationId,
257
- };
258
- } catch (error) {
259
- if (error?.code !== 'COGNITIVE_VERSION_CONFLICT' || attempt === 2) throw error;
260
- }
261
- }
262
- fail('PERSONALITY_MEMORY_VERSION_CONFLICT');
263
- }
264
-
265
- function readRelationshipLearning(input) {
266
- const value = normalizeRelationshipRead(input);
267
- const receiptId = digest('relationship-read', [
268
- value.tenantId, value.agentId, value.actorId, value.sourcePortal,
269
- value.sourceChannel, value.conversationId, value.messageId,
270
- ]);
271
- const { state } = readRelationshipState(value, receiptId);
272
- const notes = currentRelationshipNotes(state)
273
- .filter((item) => ['credible_unverified', 'verified'].includes(item.epistemic_state))
274
- .map((item) => ({
275
- kind: relationshipKindFromKey(item.key),
276
- status: item.epistemic_state === 'verified' ? 'confirmed' : 'pending',
277
- value: item.value,
278
- observation_id: item.observation_id,
279
- occurred_at: item.occurred_at,
280
- }))
281
- .sort((left, right) => Date.parse(right.occurred_at) - Date.parse(left.occurred_at));
282
- return { version: state.version, notes };
283
- }
284
-
285
- function claimCuriosityPresentation(input) {
286
- const value = normalizePresentation(input);
287
- const candidateId = digest('curiosity', [value.tenantId, value.agentId, value.actorId]);
288
- const eventId = digest('personality', [
289
- value.tenantId, value.agentId, value.actorId, value.sourcePortal, value.sourceChannel,
290
- value.conversationId, value.messageId, value.occurredAt, value.topic,
291
- ]);
292
- const memoryAccess = {
293
- tenantId: value.tenantId,
294
- userId: value.actorId,
295
- actorId: value.actorId,
296
- agentId: value.agentId,
297
- portalId: value.sourcePortal,
298
- channelId: value.sourceChannel,
299
- conversationId: value.conversationId,
300
- requestedScope: relationshipScope(value.actorId),
301
- permissionContext: {
302
- authority: 'runtime_personality_policy',
303
- decision: 'passed',
304
- receiptId: eventId,
305
- },
306
- };
307
- if (store.hasEvent({
308
- eventId, tenantId: value.tenantId, agentId: value.agentId,
309
- visibilityScope: relationshipScope(value.actorId),
310
- }, memoryAccess)) {
311
- return { claimed: true, idempotent: true };
312
- }
313
- const claim = store.claimAttention({
314
- tenantId: value.tenantId,
315
- candidate: {
316
- candidate_id: candidateId,
317
- subject_kind: 'human',
318
- subject_id: value.actorId,
319
- reason: 'social_curiosity',
320
- responsible_agent: value.agentId,
321
- evidence_id: eventId,
322
- evidence_scope: relationshipScope(value.actorId),
323
- evidence_at: value.occurredAt,
324
- confidence: 1,
325
- allowed_channel: value.sourceChannel,
326
- detected_at: value.occurredAt,
327
- cooldown_ms: value.cooldownMs,
328
- requires_runtime_authorization: true,
329
- },
330
- claimedBy: value.agentId,
331
- claimedAt: value.occurredAt,
332
- }, memoryAccess);
333
- if (!claim.claimed) return { claimed: false, next_allowed_at: claim.next_allowed_at };
334
- for (let attempt = 0; attempt < 3; attempt += 1) {
335
- const current = store.read({ tenantId: value.tenantId, agentId: value.agentId }, memoryAccess);
336
- try {
337
- store.commit({
338
- tenantId: value.tenantId,
339
- agentId: value.agentId,
340
- eventId,
341
- expectedVersion: current.version,
342
- occurredAt: value.occurredAt,
343
- receivedAt: value.receivedAt,
344
- retentionClass: 'relationship',
345
- source: {
346
- provider: value.sourcePortal,
347
- channel_id: value.sourceChannel,
348
- actor_id: value.actorId,
349
- context_id: value.conversationId,
350
- message_id: value.messageId,
351
- },
352
- observations: [{
353
- observation_id: digest('curiosity-observation', [eventId]),
354
- domain: 'open_thread',
355
- key: `relationship:${digest('actor', [value.actorId]).slice(0, 30)}:curiosity-presentation`,
356
- value: value.topic,
357
- confidence: 1,
358
- epistemic_state: 'verified',
359
- scope: relationshipScope(value.actorId),
360
- }],
361
- }, memoryAccess);
362
- return { claimed: true, idempotent: false };
363
- } catch (error) {
364
- if (error?.code !== 'COGNITIVE_VERSION_CONFLICT' || attempt === 2) throw error;
365
- }
366
- }
367
- fail('PERSONALITY_MEMORY_VERSION_CONFLICT');
368
- }
369
-
370
- return {
371
- kind: 'local-cognitive-projection-v1',
372
- claimCuriosityPresentation,
373
- recordRelationshipLearning,
374
- readRelationshipLearning,
375
- close: () => store.close(),
376
- };
377
- }
378
-
379
- module.exports = { createPersonalityMemoryAdapter };
@@ -1,46 +0,0 @@
1
- 'use strict';
2
-
3
- const fs = require('node:fs');
4
- const os = require('node:os');
5
- const path = require('node:path');
6
- const { identityFileCandidates } = require('./profile-identity-resolution.cjs');
7
-
8
- const MAX_PERSONA_BYTES = 64 * 1024;
9
- const INVALID_PERSONALITY_CHOICE = Symbol('invalid-personality-choice');
10
-
11
- function resolvedHome(env) {
12
- const configured = String(env.BLUN_SHARED_HOME ?? env.BLUN_HOME ?? '').trim();
13
- return path.resolve(configured || path.join(os.homedir(), '.blun'));
14
- }
15
-
16
- function persistedPersonalityChoice(env) {
17
- const candidates = identityFileCandidates('persona.json', env);
18
- for (const personaPath of candidates) {
19
- try {
20
- const stat = fs.lstatSync(personaPath);
21
- if (!stat.isFile() || stat.isSymbolicLink() || stat.size > MAX_PERSONA_BYTES) return INVALID_PERSONALITY_CHOICE;
22
- const persona = JSON.parse(fs.readFileSync(personaPath, 'utf8'));
23
- if (!persona || typeof persona !== 'object' || Array.isArray(persona)) return INVALID_PERSONALITY_CHOICE;
24
- if (!Object.prototype.hasOwnProperty.call(persona, 'personalityEnabled')) return undefined;
25
- return typeof persona.personalityEnabled === 'boolean'
26
- ? persona.personalityEnabled
27
- : INVALID_PERSONALITY_CHOICE;
28
- } catch (error) {
29
- if (error?.code !== 'ENOENT') return INVALID_PERSONALITY_CHOICE;
30
- }
31
- }
32
- return undefined;
33
- }
34
-
35
- function personalityContextEnabled(env = process.env) {
36
- const persisted = persistedPersonalityChoice(env);
37
- if (persisted === INVALID_PERSONALITY_CHOICE) return false;
38
- if (persisted !== undefined) return persisted;
39
- const configured = String(env.BLUN_IDENTITY_CONTEXT ?? '').trim();
40
- if (/^(?:0|false|off)$/iu.test(configured)) return false;
41
- return true;
42
- }
43
-
44
- module.exports = {
45
- personalityContextEnabled,
46
- };
@@ -1,197 +0,0 @@
1
- 'use strict';
2
-
3
- const fs = require('node:fs');
4
- const os = require('node:os');
5
- const path = require('node:path');
6
- const { readProfilePersona, resolveLegacySoulFile, resolveSoulFile } = require('./profile-identity-resolution.cjs');
7
-
8
- const SAFE_ID_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;
9
- const MAX_PERSONA_BYTES = 64 * 1024;
10
-
11
- function safeId(value) {
12
- const normalized = String(value ?? '').trim();
13
- return SAFE_ID_RE.test(normalized) ? normalized : '';
14
- }
15
-
16
- function agentIdFromName(value) {
17
- const slug = String(value ?? '')
18
- .normalize('NFKD')
19
- .replace(/[\u0300-\u036f]/gu, '')
20
- .toLowerCase()
21
- .replace(/[^a-z0-9._-]+/gu, '-')
22
- .replace(/^[^a-z0-9]+|[^a-z0-9]+$/gu, '')
23
- .slice(0, 64);
24
- return safeId(slug) || 'king';
25
- }
26
-
27
- function resolvedHome(env) {
28
- const configured = String(env.BLUN_SHARED_HOME ?? env.BLUN_HOME ?? '').trim();
29
- return path.resolve(configured || path.join(os.homedir(), '.blun'));
30
- }
31
-
32
- function isInside(parent, child) {
33
- const relative = path.relative(parent, child);
34
- return relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative));
35
- }
36
-
37
- function readJsonFile(target) {
38
- try {
39
- const stat = fs.lstatSync(target);
40
- if (!stat.isFile() || stat.isSymbolicLink() || stat.size > MAX_PERSONA_BYTES) return undefined;
41
- const value = JSON.parse(fs.readFileSync(target, 'utf8'));
42
- return value && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
43
- } catch {
44
- return undefined;
45
- }
46
- }
47
-
48
- function createJsonOnce(root, target, value) {
49
- if (!isInside(root, target)) return false;
50
- let handle;
51
- try {
52
- const parent = path.dirname(target);
53
- fs.mkdirSync(parent, { recursive: true });
54
- if (!isInside(root, fs.realpathSync(parent))) return false;
55
- handle = fs.openSync(target, 'wx', 0o600);
56
- fs.writeFileSync(handle, `${JSON.stringify(value, null, 2)}\n`, 'utf8');
57
- fs.fsyncSync(handle);
58
- return true;
59
- } catch (error) {
60
- if (error?.code === 'EEXIST') return false;
61
- throw error;
62
- } finally {
63
- if (handle !== undefined) fs.closeSync(handle);
64
- }
65
- }
66
-
67
- function createTextOnce(root, target, value) {
68
- if (!isInside(root, target)) return false;
69
- let handle;
70
- try {
71
- const parent = path.dirname(target);
72
- fs.mkdirSync(parent, { recursive: true });
73
- if (!isInside(root, fs.realpathSync(parent))) return false;
74
- handle = fs.openSync(target, 'wx', 0o600);
75
- fs.writeFileSync(handle, value, 'utf8');
76
- fs.fsyncSync(handle);
77
- return true;
78
- } catch (error) {
79
- if (error?.code === 'EEXIST') return false;
80
- throw error;
81
- } finally {
82
- if (handle !== undefined) fs.closeSync(handle);
83
- }
84
- }
85
-
86
- function generatedSoulText(displayName) {
87
- return `# ${displayName}\n\nIch bin ${displayName}, der persoenliche BLUN-Agent dieses Profils. Meine eigene Stimme, Vorlieben und gewachsene gemeinsame Geschichte werden hier behutsam weiterentwickelt. Bestaetigte Beziehungen gehoeren in den Beziehungsgraphen; Auftraege, Rechte, Secrets und Incident-Logs gehoeren nicht in meine Seele.\n`;
88
- }
89
-
90
- function importLegacySoulOverGeneratedProfile(env, profileHome, profileSoulPath, displayName) {
91
- let current;
92
- try {
93
- const stat = fs.lstatSync(profileSoulPath);
94
- if (!stat.isFile() || stat.isSymbolicLink() || stat.size > MAX_PERSONA_BYTES) return false;
95
- current = fs.readFileSync(profileSoulPath, 'utf8');
96
- } catch {
97
- return false;
98
- }
99
- if (current.trim() !== generatedSoulText(displayName).trim()) return false;
100
- const legacy = resolveLegacySoulFile(env);
101
- if (!legacy.text || path.resolve(legacy.path) === path.resolve(profileSoulPath)) return false;
102
-
103
- const backupPath = `${profileSoulPath}.pre-legacy-import`;
104
- createTextOnce(profileHome, backupPath, current);
105
- if (!fs.existsSync(backupPath) || fs.readFileSync(backupPath, 'utf8') !== current) return false;
106
-
107
- const temporaryPath = path.join(profileHome, `.SOUL.md.import-${process.pid}-${Date.now()}`);
108
- let handle;
109
- try {
110
- handle = fs.openSync(temporaryPath, 'wx', 0o600);
111
- fs.writeFileSync(handle, `${legacy.text}\n`, 'utf8');
112
- fs.fsyncSync(handle);
113
- fs.closeSync(handle);
114
- handle = undefined;
115
- fs.renameSync(temporaryPath, profileSoulPath);
116
- return true;
117
- } finally {
118
- if (handle !== undefined) fs.closeSync(handle);
119
- try { fs.unlinkSync(temporaryPath); } catch {}
120
- }
121
- }
122
-
123
- function ensurePersonalityWorkspace(env = process.env) {
124
- const home = resolvedHome(env);
125
- const profileHome = path.resolve(String(env.BLUN_HOME ?? '').trim() || home);
126
- fs.mkdirSync(home, { recursive: true });
127
- fs.mkdirSync(profileHome, { recursive: true });
128
- const root = path.resolve(String(env.BLUN_IDENTITY_ROOT ?? '').trim() || path.join(home, 'identity'));
129
- if (!isInside(home, root)) return { ready: false, reason: 'identity_root_outside_home' };
130
- if (fs.existsSync(root) && fs.lstatSync(root).isSymbolicLink()) return { ready: false, reason: 'identity_root_symlink' };
131
- fs.mkdirSync(root, { recursive: true });
132
- const realHome = fs.realpathSync(home);
133
- const realRoot = fs.realpathSync(root);
134
- if (!isInside(realHome, realRoot)) return { ready: false, reason: 'identity_root_outside_home' };
135
-
136
- const personaResult = readProfilePersona(env);
137
- const persona = personaResult.persona || {};
138
- const displayName = String(persona.name ?? env.BLUN_AGENT_ID ?? 'King').trim().slice(0, 120) || 'King';
139
- const configuredAgentId = safeId(env.BLUN_AGENT_ID);
140
- const configuredTenantId = safeId(env.BLUN_IDENTITY_TENANT_ID);
141
- const initialAgentId = configuredAgentId || (personaResult.persona ? agentIdFromName(displayName) : 'king');
142
- const initialTenantId = configuredTenantId || 'local';
143
- const manifestPath = path.join(root, 'manifest.json');
144
- createJsonOnce(root, manifestPath, {
145
- version: 1,
146
- tenant_id: initialTenantId,
147
- active_agent_id: initialAgentId,
148
- });
149
- const manifest = readJsonFile(manifestPath);
150
- const tenantId = safeId(manifest?.tenant_id);
151
- if (manifest?.version !== 1 || !tenantId || (configuredTenantId && tenantId !== configuredTenantId)) {
152
- return { ready: false, reason: 'identity_manifest_invalid' };
153
- }
154
- const agentId = configuredAgentId
155
- || (personaResult.persona ? agentIdFromName(displayName) : safeId(manifest.active_agent_id))
156
- || 'king';
157
-
158
- const profilePath = path.join(root, 'agents', agentId, 'profile.json');
159
- createJsonOnce(root, profilePath, {
160
- version: 1,
161
- agent_id: agentId,
162
- display_name: displayName,
163
- role: '',
164
- preferences: [],
165
- goals: [],
166
- });
167
- createTextOnce(
168
- root,
169
- path.join(root, 'agents', agentId, 'JOURNAL.md'),
170
- '# Journal\n\nLong-term development notes, shared milestones, and confirmed lessons belong here. Current tasks, secrets, permissions, and incident logs do not.\n',
171
- );
172
- const resolvedSoul = resolveSoulFile(env);
173
- const profileSoulPath = path.join(profileHome, 'SOUL.md');
174
- let soulMigrated = false;
175
- if (resolvedSoul.text && path.resolve(resolvedSoul.path) !== path.resolve(profileSoulPath)) {
176
- createTextOnce(profileHome, profileSoulPath, `${resolvedSoul.text}\n`);
177
- } else if (!resolvedSoul.text) {
178
- createTextOnce(profileHome, profileSoulPath, generatedSoulText(displayName));
179
- }
180
- soulMigrated = importLegacySoulOverGeneratedProfile(env, profileHome, profileSoulPath, displayName);
181
- for (const relative of [
182
- ['agents', agentId, 'relationships'],
183
- ['agents', agentId, 'journal', 'candidates'],
184
- ['agents', agentId, 'activity'],
185
- ['actors'],
186
- ['groups'],
187
- ['attention'],
188
- ]) {
189
- const target = path.resolve(root, ...relative);
190
- if (!isInside(root, target)) return { ready: false, reason: 'identity_path_invalid' };
191
- fs.mkdirSync(target, { recursive: true });
192
- if (!isInside(root, fs.realpathSync(target))) return { ready: false, reason: 'identity_path_invalid' };
193
- }
194
- return { ready: true, root, tenant_id: tenantId, agent_id: agentId, soul_migrated: soulMigrated };
195
- }
196
-
197
- module.exports = { ensurePersonalityWorkspace };
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- const PROACTIVE_COMPACTION_TRIGGER_FRACTION = 0.9;
4
-
5
- function proactiveCompactionEligibility({ usedTokens, budgetTokens, hasShrinkableHistory, isCompacting }) {
6
- const budget = Number(budgetTokens);
7
- const thresholdTokens = Number.isFinite(budget) && budget > 0
8
- ? Math.max(1, Math.floor(budget * PROACTIVE_COMPACTION_TRIGGER_FRACTION))
9
- : undefined;
10
-
11
- if (isCompacting === true) return { eligible: false, thresholdTokens, reason: 'already_compacting' };
12
- if (thresholdTokens === undefined) return { eligible: false, thresholdTokens, reason: 'no_budget' };
13
- if (!Number.isFinite(usedTokens) || usedTokens < thresholdTokens) {
14
- return { eligible: false, thresholdTokens, reason: 'below_threshold' };
15
- }
16
- if (hasShrinkableHistory !== true) {
17
- return { eligible: false, thresholdTokens, reason: 'nothing_to_compact' };
18
- }
19
- return { eligible: true, thresholdTokens, reason: 'eligible' };
20
- }
21
-
22
- module.exports = {
23
- PROACTIVE_COMPACTION_TRIGGER_FRACTION,
24
- proactiveCompactionEligibility,
25
- };