@runcore-sh/runcore 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/README.md +19 -19
  2. package/brain-template/agents/README.md +20 -0
  3. package/brain-template/identity/README.md +20 -0
  4. package/brain-template/identity/brand.md +25 -0
  5. package/brain-template/identity/principles.md +21 -0
  6. package/brain-template/identity/tone-of-voice.md +23 -0
  7. package/brain-template/knowledge/notes/tier-gated-ui-spec.md +1 -1
  8. package/brain-template/metrics/README.md +13 -0
  9. package/brain-template/operations/goals.yaml +12 -0
  10. package/brain-template/operations/todos.md +17 -0
  11. package/brain-template/ops/README.md +13 -0
  12. package/brain-template/scheduling/README.md +2 -2
  13. package/brain-template/skills/README.md +23 -0
  14. package/brain-template/templates/README.md +9 -0
  15. package/brain-template/training/README.md +20 -0
  16. package/dictionary.json +2 -2
  17. package/dist/activity/log.d.ts +3 -0
  18. package/dist/activity/log.d.ts.map +1 -1
  19. package/dist/activity/log.js +12 -0
  20. package/dist/activity/log.js.map +1 -1
  21. package/dist/agents/autonomous.js +1 -0
  22. package/dist/agents/autonomous.js.map +1 -1
  23. package/dist/agents/commit.d.ts.map +1 -1
  24. package/dist/agents/commit.js +3 -10
  25. package/dist/agents/commit.js.map +1 -1
  26. package/dist/agents/dedup-guard.d.ts.map +1 -1
  27. package/dist/agents/dedup-guard.js +26 -23
  28. package/dist/agents/dedup-guard.js.map +1 -1
  29. package/dist/agents/feed.d.ts +69 -0
  30. package/dist/agents/feed.d.ts.map +1 -0
  31. package/dist/agents/feed.js +176 -0
  32. package/dist/agents/feed.js.map +1 -0
  33. package/dist/agents/governance.d.ts +14 -0
  34. package/dist/agents/governance.d.ts.map +1 -1
  35. package/dist/agents/governance.js +73 -1
  36. package/dist/agents/governance.js.map +1 -1
  37. package/dist/agents/governed-spawn.d.ts +12 -0
  38. package/dist/agents/governed-spawn.d.ts.map +1 -1
  39. package/dist/agents/governed-spawn.js +8 -2
  40. package/dist/agents/governed-spawn.js.map +1 -1
  41. package/dist/agents/index.d.ts +2 -0
  42. package/dist/agents/index.d.ts.map +1 -1
  43. package/dist/agents/index.js +1 -0
  44. package/dist/agents/index.js.map +1 -1
  45. package/dist/agents/issue-reporter.d.ts +15 -0
  46. package/dist/agents/issue-reporter.d.ts.map +1 -0
  47. package/dist/agents/issue-reporter.js +123 -0
  48. package/dist/agents/issue-reporter.js.map +1 -0
  49. package/dist/agents/issues.d.ts +33 -0
  50. package/dist/agents/issues.d.ts.map +1 -0
  51. package/dist/agents/issues.js +141 -0
  52. package/dist/agents/issues.js.map +1 -0
  53. package/dist/agents/reflection.js +3 -3
  54. package/dist/agents/reflection.js.map +1 -1
  55. package/dist/agents/runtime/driver.d.ts.map +1 -1
  56. package/dist/agents/runtime/driver.js +1 -2
  57. package/dist/agents/runtime/driver.js.map +1 -1
  58. package/dist/agents/runtime/manager.d.ts.map +1 -1
  59. package/dist/agents/runtime/manager.js +1 -0
  60. package/dist/agents/runtime/manager.js.map +1 -1
  61. package/dist/agents/runtime/types.d.ts +2 -0
  62. package/dist/agents/runtime/types.d.ts.map +1 -1
  63. package/dist/agents/spawn.d.ts.map +1 -1
  64. package/dist/agents/spawn.js +20 -26
  65. package/dist/agents/spawn.js.map +1 -1
  66. package/dist/agents/store.d.ts.map +1 -1
  67. package/dist/agents/store.js +34 -1
  68. package/dist/agents/store.js.map +1 -1
  69. package/dist/agents/types.d.ts +27 -0
  70. package/dist/agents/types.d.ts.map +1 -1
  71. package/dist/auth/identity.d.ts +3 -0
  72. package/dist/auth/identity.d.ts.map +1 -1
  73. package/dist/auth/identity.js +9 -1
  74. package/dist/auth/identity.js.map +1 -1
  75. package/dist/auth/middleware.d.ts.map +1 -1
  76. package/dist/auth/middleware.js +4 -0
  77. package/dist/auth/middleware.js.map +1 -1
  78. package/dist/calibration/conversation.d.ts +46 -0
  79. package/dist/calibration/conversation.d.ts.map +1 -0
  80. package/dist/calibration/conversation.js +295 -0
  81. package/dist/calibration/conversation.js.map +1 -0
  82. package/dist/calibration/index.d.ts +5 -0
  83. package/dist/calibration/index.d.ts.map +1 -0
  84. package/dist/calibration/index.js +5 -0
  85. package/dist/calibration/index.js.map +1 -0
  86. package/dist/calibration/runner.d.ts +127 -0
  87. package/dist/calibration/runner.d.ts.map +1 -0
  88. package/dist/calibration/runner.js +307 -0
  89. package/dist/calibration/runner.js.map +1 -0
  90. package/dist/calibration/store.d.ts +49 -0
  91. package/dist/calibration/store.d.ts.map +1 -0
  92. package/dist/calibration/store.js +140 -0
  93. package/dist/calibration/store.js.map +1 -0
  94. package/dist/calibration/types.d.ts +93 -0
  95. package/dist/calibration/types.d.ts.map +1 -0
  96. package/dist/calibration/types.js +53 -0
  97. package/dist/calibration/types.js.map +1 -0
  98. package/dist/cli.d.ts +1 -1
  99. package/dist/cli.js +17 -2
  100. package/dist/cli.js.map +1 -1
  101. package/dist/config/index.d.ts +5 -0
  102. package/dist/config/index.d.ts.map +1 -0
  103. package/dist/config/index.js +3 -0
  104. package/dist/config/index.js.map +1 -0
  105. package/dist/config/loader.d.ts +28 -0
  106. package/dist/config/loader.d.ts.map +1 -0
  107. package/dist/config/loader.js +181 -0
  108. package/dist/config/loader.js.map +1 -0
  109. package/dist/config/schema.d.ts +76 -0
  110. package/dist/config/schema.d.ts.map +1 -0
  111. package/dist/config/schema.js +93 -0
  112. package/dist/config/schema.js.map +1 -0
  113. package/dist/dictionary/challenge.d.ts +66 -0
  114. package/dist/dictionary/challenge.d.ts.map +1 -0
  115. package/dist/dictionary/challenge.js +145 -0
  116. package/dist/dictionary/challenge.js.map +1 -0
  117. package/dist/dictionary/client.d.ts +32 -0
  118. package/dist/dictionary/client.d.ts.map +1 -0
  119. package/dist/dictionary/client.js +139 -0
  120. package/dist/dictionary/client.js.map +1 -0
  121. package/dist/dictionary/compatibility.d.ts +8 -0
  122. package/dist/dictionary/compatibility.d.ts.map +1 -0
  123. package/dist/dictionary/compatibility.js +56 -0
  124. package/dist/dictionary/compatibility.js.map +1 -0
  125. package/dist/dictionary/index.d.ts +22 -0
  126. package/dist/dictionary/index.d.ts.map +1 -0
  127. package/dist/dictionary/index.js +15 -0
  128. package/dist/dictionary/index.js.map +1 -0
  129. package/dist/dictionary/matcher.d.ts +18 -0
  130. package/dist/dictionary/matcher.d.ts.map +1 -0
  131. package/dist/dictionary/matcher.js +98 -0
  132. package/dist/dictionary/matcher.js.map +1 -0
  133. package/dist/dictionary/publisher.d.ts +17 -0
  134. package/dist/dictionary/publisher.d.ts.map +1 -0
  135. package/dist/dictionary/publisher.js +156 -0
  136. package/dist/dictionary/publisher.js.map +1 -0
  137. package/dist/dictionary/sync.d.ts +28 -0
  138. package/dist/dictionary/sync.d.ts.map +1 -0
  139. package/dist/dictionary/sync.js +268 -0
  140. package/dist/dictionary/sync.js.map +1 -0
  141. package/dist/dictionary/types.d.ts +75 -0
  142. package/dist/dictionary/types.d.ts.map +1 -0
  143. package/dist/dictionary/types.js +8 -0
  144. package/dist/dictionary/types.js.map +1 -0
  145. package/dist/dictionary/updater.d.ts +23 -0
  146. package/dist/dictionary/updater.d.ts.map +1 -0
  147. package/dist/dictionary/updater.js +84 -0
  148. package/dist/dictionary/updater.js.map +1 -0
  149. package/dist/dictionary/versioning.d.ts +15 -0
  150. package/dist/dictionary/versioning.d.ts.map +1 -0
  151. package/dist/dictionary/versioning.js +52 -0
  152. package/dist/dictionary/versioning.js.map +1 -0
  153. package/dist/errors.d.ts +36 -0
  154. package/dist/errors.d.ts.map +1 -0
  155. package/dist/errors.js +66 -0
  156. package/dist/errors.js.map +1 -0
  157. package/dist/events/event-bus.d.ts +37 -0
  158. package/dist/events/event-bus.d.ts.map +1 -0
  159. package/dist/events/event-bus.js +261 -0
  160. package/dist/events/event-bus.js.map +1 -0
  161. package/dist/events/index.d.ts +3 -0
  162. package/dist/events/index.d.ts.map +1 -0
  163. package/dist/events/index.js +2 -0
  164. package/dist/events/index.js.map +1 -0
  165. package/dist/events/types.d.ts +71 -0
  166. package/dist/events/types.d.ts.map +1 -0
  167. package/dist/events/types.js +7 -0
  168. package/dist/events/types.js.map +1 -0
  169. package/dist/feed/client.d.ts +34 -0
  170. package/dist/feed/client.d.ts.map +1 -0
  171. package/dist/feed/client.js +206 -0
  172. package/dist/feed/client.js.map +1 -0
  173. package/dist/feed/index.d.ts +61 -0
  174. package/dist/feed/index.d.ts.map +1 -0
  175. package/dist/feed/index.js +115 -0
  176. package/dist/feed/index.js.map +1 -0
  177. package/dist/feed/metrics.d.ts +51 -0
  178. package/dist/feed/metrics.d.ts.map +1 -0
  179. package/dist/feed/metrics.js +84 -0
  180. package/dist/feed/metrics.js.map +1 -0
  181. package/dist/feed/mixer.d.ts +89 -0
  182. package/dist/feed/mixer.d.ts.map +1 -0
  183. package/dist/feed/mixer.js +230 -0
  184. package/dist/feed/mixer.js.map +1 -0
  185. package/dist/feed/tiers.d.ts +15 -0
  186. package/dist/feed/tiers.d.ts.map +1 -0
  187. package/dist/feed/tiers.js +75 -0
  188. package/dist/feed/tiers.js.map +1 -0
  189. package/dist/feed/types.d.ts +76 -0
  190. package/dist/feed/types.d.ts.map +1 -0
  191. package/dist/feed/types.js +6 -0
  192. package/dist/feed/types.js.map +1 -0
  193. package/dist/files/registry.d.ts +77 -0
  194. package/dist/files/registry.d.ts.map +1 -0
  195. package/dist/files/registry.js +222 -0
  196. package/dist/files/registry.js.map +1 -0
  197. package/dist/google/plugin.d.ts +17 -0
  198. package/dist/google/plugin.d.ts.map +1 -0
  199. package/dist/google/plugin.js +169 -0
  200. package/dist/google/plugin.js.map +1 -0
  201. package/dist/health/checker.d.ts.map +1 -1
  202. package/dist/health/checker.js +14 -4
  203. package/dist/health/checker.js.map +1 -1
  204. package/dist/health/checks/openrouter.js +1 -1
  205. package/dist/health/checks/openrouter.js.map +1 -1
  206. package/dist/health/checks.d.ts +1 -1
  207. package/dist/health/checks.d.ts.map +1 -1
  208. package/dist/health/checks.js +9 -3
  209. package/dist/health/checks.js.map +1 -1
  210. package/dist/ledger/distance.d.ts +19 -0
  211. package/dist/ledger/distance.d.ts.map +1 -0
  212. package/dist/ledger/distance.js +70 -0
  213. package/dist/ledger/distance.js.map +1 -0
  214. package/dist/ledger/index.d.ts +8 -0
  215. package/dist/ledger/index.d.ts.map +1 -0
  216. package/dist/ledger/index.js +7 -0
  217. package/dist/ledger/index.js.map +1 -0
  218. package/dist/ledger/store.d.ts +27 -0
  219. package/dist/ledger/store.d.ts.map +1 -0
  220. package/dist/ledger/store.js +123 -0
  221. package/dist/ledger/store.js.map +1 -0
  222. package/dist/ledger/types.d.ts +109 -0
  223. package/dist/ledger/types.d.ts.map +1 -0
  224. package/dist/ledger/types.js +57 -0
  225. package/dist/ledger/types.js.map +1 -0
  226. package/dist/literacy.d.ts +50 -0
  227. package/dist/literacy.d.ts.map +1 -0
  228. package/dist/literacy.js +141 -0
  229. package/dist/literacy.js.map +1 -0
  230. package/dist/llm/complete.d.ts.map +1 -1
  231. package/dist/llm/complete.js +36 -3
  232. package/dist/llm/complete.js.map +1 -1
  233. package/dist/llm/fetch-guard.d.ts.map +1 -1
  234. package/dist/llm/fetch-guard.js +2 -0
  235. package/dist/llm/fetch-guard.js.map +1 -1
  236. package/dist/llm/membrane.d.ts +5 -0
  237. package/dist/llm/membrane.d.ts.map +1 -1
  238. package/dist/llm/membrane.js +48 -8
  239. package/dist/llm/membrane.js.map +1 -1
  240. package/dist/llm/nlp-detect.d.ts +17 -0
  241. package/dist/llm/nlp-detect.d.ts.map +1 -0
  242. package/dist/llm/nlp-detect.js +45 -0
  243. package/dist/llm/nlp-detect.js.map +1 -0
  244. package/dist/llm/ollama.d.ts +5 -0
  245. package/dist/llm/ollama.d.ts.map +1 -1
  246. package/dist/llm/ollama.js +39 -1
  247. package/dist/llm/ollama.js.map +1 -1
  248. package/dist/llm/openrouter.d.ts.map +1 -1
  249. package/dist/llm/openrouter.js +17 -1
  250. package/dist/llm/openrouter.js.map +1 -1
  251. package/dist/llm/providers/ollama.d.ts +7 -2
  252. package/dist/llm/providers/ollama.d.ts.map +1 -1
  253. package/dist/llm/providers/ollama.js +109 -17
  254. package/dist/llm/providers/ollama.js.map +1 -1
  255. package/dist/llm/providers/openrouter.js +1 -1
  256. package/dist/llm/providers/openrouter.js.map +1 -1
  257. package/dist/llm/sensitive-registry.d.ts +6 -0
  258. package/dist/llm/sensitive-registry.d.ts.map +1 -1
  259. package/dist/llm/sensitive-registry.js +60 -1
  260. package/dist/llm/sensitive-registry.js.map +1 -1
  261. package/dist/mcp-server.js +25 -18
  262. package/dist/mcp-server.js.map +1 -1
  263. package/dist/metrics/collector.d.ts +6 -0
  264. package/dist/metrics/collector.d.ts.map +1 -1
  265. package/dist/metrics/collector.js +150 -0
  266. package/dist/metrics/collector.js.map +1 -1
  267. package/dist/metrics/types.d.ts +1 -1
  268. package/dist/metrics/types.d.ts.map +1 -1
  269. package/dist/middleware/error-handler.d.ts +13 -0
  270. package/dist/middleware/error-handler.d.ts.map +1 -0
  271. package/dist/middleware/error-handler.js +71 -0
  272. package/dist/middleware/error-handler.js.map +1 -0
  273. package/dist/notifications/channels/adapter.d.ts +28 -0
  274. package/dist/notifications/channels/adapter.d.ts.map +1 -0
  275. package/dist/notifications/channels/adapter.js +55 -0
  276. package/dist/notifications/channels/adapter.js.map +1 -0
  277. package/dist/notifications/channels/index.d.ts +6 -0
  278. package/dist/notifications/channels/index.d.ts.map +1 -0
  279. package/dist/notifications/channels/index.js +6 -0
  280. package/dist/notifications/channels/index.js.map +1 -0
  281. package/dist/notifications/channels/log.d.ts +15 -0
  282. package/dist/notifications/channels/log.d.ts.map +1 -0
  283. package/dist/notifications/channels/log.js +29 -0
  284. package/dist/notifications/channels/log.js.map +1 -0
  285. package/dist/notifications/engine.d.ts +37 -0
  286. package/dist/notifications/engine.d.ts.map +1 -0
  287. package/dist/notifications/engine.js +198 -0
  288. package/dist/notifications/engine.js.map +1 -0
  289. package/dist/notifications/index.d.ts +12 -3
  290. package/dist/notifications/index.d.ts.map +1 -1
  291. package/dist/notifications/index.js +15 -3
  292. package/dist/notifications/index.js.map +1 -1
  293. package/dist/notifications/types.d.ts +97 -0
  294. package/dist/notifications/types.d.ts.map +1 -0
  295. package/dist/notifications/types.js +14 -0
  296. package/dist/notifications/types.js.map +1 -0
  297. package/dist/onboarding/bootstrap.d.ts +51 -0
  298. package/dist/onboarding/bootstrap.d.ts.map +1 -0
  299. package/dist/onboarding/bootstrap.js +92 -0
  300. package/dist/onboarding/bootstrap.js.map +1 -0
  301. package/dist/onboarding/conversation.d.ts +131 -0
  302. package/dist/onboarding/conversation.d.ts.map +1 -0
  303. package/dist/onboarding/conversation.js +259 -0
  304. package/dist/onboarding/conversation.js.map +1 -0
  305. package/dist/onboarding/flow.d.ts +63 -0
  306. package/dist/onboarding/flow.d.ts.map +1 -0
  307. package/dist/onboarding/flow.js +287 -0
  308. package/dist/onboarding/flow.js.map +1 -0
  309. package/dist/onboarding/index.d.ts +17 -0
  310. package/dist/onboarding/index.d.ts.map +1 -0
  311. package/dist/onboarding/index.js +23 -0
  312. package/dist/onboarding/index.js.map +1 -0
  313. package/dist/onboarding/name-extraction.d.ts +42 -0
  314. package/dist/onboarding/name-extraction.d.ts.map +1 -0
  315. package/dist/onboarding/name-extraction.js +164 -0
  316. package/dist/onboarding/name-extraction.js.map +1 -0
  317. package/dist/onboarding/nerve-link.d.ts +23 -0
  318. package/dist/onboarding/nerve-link.d.ts.map +1 -0
  319. package/dist/onboarding/nerve-link.js +24 -0
  320. package/dist/onboarding/nerve-link.js.map +1 -0
  321. package/dist/onboarding/phases.d.ts +66 -0
  322. package/dist/onboarding/phases.d.ts.map +1 -0
  323. package/dist/onboarding/phases.js +167 -0
  324. package/dist/onboarding/phases.js.map +1 -0
  325. package/dist/onboarding/safe-word.d.ts +39 -0
  326. package/dist/onboarding/safe-word.d.ts.map +1 -0
  327. package/dist/onboarding/safe-word.js +90 -0
  328. package/dist/onboarding/safe-word.js.map +1 -0
  329. package/dist/onboarding/types.d.ts +124 -0
  330. package/dist/onboarding/types.d.ts.map +1 -0
  331. package/dist/onboarding/types.js +46 -0
  332. package/dist/onboarding/types.js.map +1 -0
  333. package/dist/openloop/resolution-scanner.d.ts +1 -1
  334. package/dist/openloop/resolution-scanner.d.ts.map +1 -1
  335. package/dist/openloop/resolution-scanner.js +4 -14
  336. package/dist/openloop/resolution-scanner.js.map +1 -1
  337. package/dist/plugins/index.d.ts +24 -0
  338. package/dist/plugins/index.d.ts.map +1 -0
  339. package/dist/plugins/index.js +91 -0
  340. package/dist/plugins/index.js.map +1 -0
  341. package/dist/plugins/status.d.ts +10 -0
  342. package/dist/plugins/status.d.ts.map +1 -0
  343. package/dist/plugins/status.js +12 -0
  344. package/dist/plugins/status.js.map +1 -0
  345. package/dist/posture/index.d.ts +2 -2
  346. package/dist/posture/index.d.ts.map +1 -1
  347. package/dist/posture/index.js +1 -1
  348. package/dist/posture/index.js.map +1 -1
  349. package/dist/posture/types.d.ts +34 -0
  350. package/dist/posture/types.d.ts.map +1 -1
  351. package/dist/posture/types.js +28 -0
  352. package/dist/posture/types.js.map +1 -1
  353. package/dist/pulse/activation-event.d.ts +5 -4
  354. package/dist/pulse/activation-event.d.ts.map +1 -1
  355. package/dist/pulse/activation-event.js +31 -8
  356. package/dist/pulse/activation-event.js.map +1 -1
  357. package/dist/pulse/activation-log.d.ts.map +1 -1
  358. package/dist/pulse/activation-log.js.map +1 -1
  359. package/dist/pulse/index.d.ts +3 -0
  360. package/dist/pulse/index.d.ts.map +1 -1
  361. package/dist/pulse/index.js +4 -0
  362. package/dist/pulse/index.js.map +1 -1
  363. package/dist/pulse/tier.d.ts +67 -0
  364. package/dist/pulse/tier.d.ts.map +1 -0
  365. package/dist/pulse/tier.js +104 -0
  366. package/dist/pulse/tier.js.map +1 -0
  367. package/dist/pulse/work.d.ts +66 -0
  368. package/dist/pulse/work.d.ts.map +1 -0
  369. package/dist/pulse/work.js +117 -0
  370. package/dist/pulse/work.js.map +1 -0
  371. package/dist/runtime-lock.d.ts +51 -0
  372. package/dist/runtime-lock.d.ts.map +1 -0
  373. package/dist/runtime-lock.js +147 -0
  374. package/dist/runtime-lock.js.map +1 -0
  375. package/dist/server.d.ts.map +1 -1
  376. package/dist/server.js +1244 -188
  377. package/dist/server.js.map +1 -1
  378. package/dist/services/whatsapp.js +1 -1
  379. package/dist/services/whatsapp.js.map +1 -1
  380. package/dist/settings.d.ts +15 -0
  381. package/dist/settings.d.ts.map +1 -1
  382. package/dist/settings.js +48 -1
  383. package/dist/settings.js.map +1 -1
  384. package/dist/skills/index.d.ts +2 -2
  385. package/dist/skills/index.d.ts.map +1 -1
  386. package/dist/skills/index.js +2 -2
  387. package/dist/skills/index.js.map +1 -1
  388. package/dist/skills/registry.d.ts +53 -142
  389. package/dist/skills/registry.d.ts.map +1 -1
  390. package/dist/skills/registry.js +249 -611
  391. package/dist/skills/registry.js.map +1 -1
  392. package/dist/stream/emitter.d.ts +36 -0
  393. package/dist/stream/emitter.d.ts.map +1 -0
  394. package/dist/stream/emitter.js +177 -0
  395. package/dist/stream/emitter.js.map +1 -0
  396. package/dist/stream/index.d.ts +4 -0
  397. package/dist/stream/index.d.ts.map +1 -0
  398. package/dist/stream/index.js +3 -0
  399. package/dist/stream/index.js.map +1 -0
  400. package/dist/stream/types.d.ts +100 -0
  401. package/dist/stream/types.d.ts.map +1 -0
  402. package/dist/stream/types.js +19 -0
  403. package/dist/stream/types.js.map +1 -0
  404. package/dist/threads/index.d.ts +3 -0
  405. package/dist/threads/index.d.ts.map +1 -0
  406. package/dist/threads/index.js +2 -0
  407. package/dist/threads/index.js.map +1 -0
  408. package/dist/threads/store.d.ts +36 -0
  409. package/dist/threads/store.d.ts.map +1 -0
  410. package/dist/threads/store.js +171 -0
  411. package/dist/threads/store.js.map +1 -0
  412. package/dist/threads/types.d.ts +16 -0
  413. package/dist/threads/types.d.ts.map +1 -0
  414. package/dist/threads/types.js +6 -0
  415. package/dist/threads/types.js.map +1 -0
  416. package/dist/tick/index.d.ts +10 -0
  417. package/dist/tick/index.d.ts.map +1 -0
  418. package/dist/tick/index.js +8 -0
  419. package/dist/tick/index.js.map +1 -0
  420. package/dist/tick/runner.d.ts +56 -0
  421. package/dist/tick/runner.d.ts.map +1 -0
  422. package/dist/tick/runner.js +235 -0
  423. package/dist/tick/runner.js.map +1 -0
  424. package/dist/tick/types.d.ts +73 -0
  425. package/dist/tick/types.d.ts.map +1 -0
  426. package/dist/tick/types.js +8 -0
  427. package/dist/tick/types.js.map +1 -0
  428. package/dist/tier/types.js +3 -3
  429. package/dist/tier/types.js.map +1 -1
  430. package/dist/ui-sync.d.ts +34 -0
  431. package/dist/ui-sync.d.ts.map +1 -0
  432. package/dist/ui-sync.js +108 -0
  433. package/dist/ui-sync.js.map +1 -0
  434. package/dist/utils/git.d.ts +12 -0
  435. package/dist/utils/git.d.ts.map +1 -0
  436. package/dist/utils/git.js +44 -0
  437. package/dist/utils/git.js.map +1 -0
  438. package/dist/volumes/index.d.ts +3 -0
  439. package/dist/volumes/index.d.ts.map +1 -0
  440. package/dist/volumes/index.js +2 -0
  441. package/dist/volumes/index.js.map +1 -0
  442. package/dist/volumes/manager.d.ts +83 -0
  443. package/dist/volumes/manager.d.ts.map +1 -0
  444. package/dist/volumes/manager.js +462 -0
  445. package/dist/volumes/manager.js.map +1 -0
  446. package/dist/volumes/types.d.ts +66 -0
  447. package/dist/volumes/types.d.ts.map +1 -0
  448. package/dist/volumes/types.js +8 -0
  449. package/dist/volumes/types.js.map +1 -0
  450. package/package.json +8 -5
  451. package/public/avatar/Hey-Dash_en_windows_v4_0_0.zip +0 -0
  452. package/public/avatar/README.md +43 -0
  453. package/public/avatar/cache/06fa55aececcc478.mp4 +0 -0
  454. package/public/avatar/cache/07a65738ba170827.mp4 +0 -0
  455. package/public/avatar/cache/08b6f4880f59a385.mp4 +0 -0
  456. package/public/avatar/cache/0ef9e0e78d715af4.mp4 +0 -0
  457. package/public/avatar/cache/0fa85e9e8f444a8b.mp4 +0 -0
  458. package/public/avatar/cache/1185fd491f413406.mp4 +0 -0
  459. package/public/avatar/cache/1b374d5390258fea.mp4 +0 -0
  460. package/public/avatar/cache/1e2367029b92f8aa.mp4 +0 -0
  461. package/public/avatar/cache/272c004a41087de5.mp4 +0 -0
  462. package/public/avatar/cache/2a0f3ff34d92521a.mp4 +0 -0
  463. package/public/avatar/cache/307a6f70859aeab8.mp4 +0 -0
  464. package/public/avatar/cache/332384e088ca214b.mp4 +0 -0
  465. package/public/avatar/cache/39fc4e81574d14ed.mp4 +0 -0
  466. package/public/avatar/cache/4a5c6051c1ef6a71.mp4 +0 -0
  467. package/public/avatar/cache/51f4aa76398c8c29.mp4 +0 -0
  468. package/public/avatar/cache/5d9a960bbf71732c.mp4 +0 -0
  469. package/public/avatar/cache/5e0954401e15af89.mp4 +0 -0
  470. package/public/avatar/cache/884ae6717fcacdd5.mp4 +0 -0
  471. package/public/avatar/cache/8ea0b7220d139615.mp4 +0 -0
  472. package/public/avatar/cache/9b9c4f7b8508eecc.mp4 +0 -0
  473. package/public/avatar/cache/9be1030ec2aa2b01.mp4 +0 -0
  474. package/public/avatar/cache/b35f7a3d558f22cb.mp4 +0 -0
  475. package/public/avatar/cache/be89f49970672374.mp4 +0 -0
  476. package/public/avatar/cache/c11fdc99479492b6.mp4 +0 -0
  477. package/public/avatar/cache/c900811e3382ac6d.mp4 +0 -0
  478. package/public/avatar/cache/d42a73667acf5716.mp4 +0 -0
  479. package/public/avatar/cache/e539f247a8908603.mp4 +0 -0
  480. package/public/avatar/cache/e78fceae2373b7c1.mp4 +0 -0
  481. package/public/avatar/cache/ec95af57d33b3f07.mp4 +0 -0
  482. package/public/avatar/cache/eeb8d775f40dbe2c.mp4 +0 -0
  483. package/public/avatar/dash_headhshot_v1.png +0 -0
  484. package/public/avatar/idle.mp4 +0 -0
  485. package/public/avatar/photo.png +0 -0
  486. package/public/board.html +6 -0
  487. package/public/browser.html +6 -2
  488. package/public/demo-data/Family Photos/2024/christmas-dinner.txt +13 -0
  489. package/public/demo-data/Family Photos/2025/summer-cookout.txt +13 -0
  490. package/public/demo-data/Financial/Insurance/auto-policy.txt +26 -0
  491. package/public/demo-data/Financial/Insurance/homeowners-policy.txt +20 -0
  492. package/public/demo-data/Financial/Taxes/property-tax-2025.txt +18 -0
  493. package/public/demo-data/Financial/Taxes/w2-2025.txt +18 -0
  494. package/public/demo-data/Health Records/lab-results-2026.txt +26 -0
  495. package/public/demo-data/Health Records/prescription-list.txt +24 -0
  496. package/public/demo-data/Health Records/vaccination-record.csv +8 -0
  497. package/public/demo-data/Legal/Estate/beneficiary-contacts.csv +4 -0
  498. package/public/demo-data/Legal/Estate/will-summary.txt +22 -0
  499. package/public/demo-data/Recipes/christmas-cookies.md +25 -0
  500. package/public/demo-data/Recipes/grandmas-chili.md +30 -0
  501. package/public/demo-data/Work/Contracts/lawn-service-2026.txt +23 -0
  502. package/public/demo-data/Work/Projects/project-status.md +19 -0
  503. package/public/demo-data/passwords.txt +13 -0
  504. package/public/demo-ingest.html +388 -0
  505. package/public/help.html +4 -1
  506. package/public/icon-192.png +0 -0
  507. package/public/icon-512.png +0 -0
  508. package/public/index.html +2641 -574
  509. package/public/library.html +51 -29
  510. package/public/manifest.json +21 -0
  511. package/public/nerve/icon-192.svg +6 -0
  512. package/public/nerve/icon-512.svg +6 -0
  513. package/public/nerve/index.html +698 -0
  514. package/public/nerve/manifest.json +24 -0
  515. package/public/nerve/sw.js +84 -0
  516. package/public/observatory.html +5 -1
  517. package/public/ops.html +33 -3
  518. package/public/pulse.html +3 -0
  519. package/public/registry.html +6 -2
  520. package/public/roadmap.html +7 -2
  521. package/public/sw.js +65 -0
  522. package/brain-template/registry.md +0 -566
  523. package/brain-template/rest_api-integration.md +0 -522
@@ -81,16 +81,33 @@ export function createCdtEvent(opts) {
81
81
  timestamp: new Date().toISOString(),
82
82
  };
83
83
  }
84
+ // ─── Aggregate CDT rate limiter ──────────────────────────────────────────────
85
+ // Prevents cascade storms where N different CDT sources pile on in the same
86
+ // tick, each adding 15mV. Per-source refractory (5 min) handles individual
87
+ // sources; this caps total CDT voltage contributions globally.
88
+ const CDT_AGGREGATE_WINDOW_MS = 60_000; // 1 minute
89
+ const CDT_AGGREGATE_MAX = 3; // max voltage-contributing CDTs per window
90
+ let cdtAggregateCount = 0;
91
+ let cdtAggregateWindowStart = Date.now();
92
+ function isCdtAggregateExhausted() {
93
+ const now = Date.now();
94
+ if (now - cdtAggregateWindowStart > CDT_AGGREGATE_WINDOW_MS) {
95
+ cdtAggregateCount = 0;
96
+ cdtAggregateWindowStart = now;
97
+ }
98
+ return cdtAggregateCount >= CDT_AGGREGATE_MAX;
99
+ }
84
100
  // ─── Emission API ───────────────────────────────────────────────────────────
85
101
  /**
86
102
  * Emit a CDT activation event.
87
103
  *
88
104
  * Handles the full pipeline:
89
105
  * 1. CDT refractory check (per-source 5 min window)
90
- * 2. Voltage snapshot
91
- * 3. Event creation and persistence
92
- * 4. Voltage contribution (via bridge)
93
- * 5. Subscriber notification
106
+ * 2. Aggregate CDT rate check (max 3 voltage contributions per 60s)
107
+ * 3. Voltage snapshot
108
+ * 4. Event creation and persistence
109
+ * 5. Voltage contribution (via bridge, if within aggregate limit)
110
+ * 6. Subscriber notification
94
111
  *
95
112
  * @returns true if emitted, false if suppressed by refractory
96
113
  */
@@ -108,13 +125,19 @@ export function emitCdt(opts) {
108
125
  ? Math.round(currentVoltage * 10) / 10
109
126
  : undefined,
110
127
  });
111
- // Persist + refractory bookkeeping
128
+ // Persist + refractory bookkeeping (always record, even if voltage is capped)
112
129
  recordActivation(event, opts.sourceKey).catch(() => { });
113
- // Contribute voltage to the pressure system
130
+ // Contribute voltage to the pressure system — capped by aggregate limiter
114
131
  const contribution = event.voltageContribution ?? 0;
115
132
  if (contribution > 0 && voltageContributor) {
116
- voltageContributor(contribution);
117
- log.debug(`CDT +${contribution}mV (${opts.sourceKey}): emitted trigger=${opts.triggerId}`);
133
+ if (isCdtAggregateExhausted()) {
134
+ log.debug(`CDT voltage suppressed (aggregate limit ${CDT_AGGREGATE_MAX}/${CDT_AGGREGATE_WINDOW_MS}ms): ${opts.sourceKey}`);
135
+ }
136
+ else {
137
+ cdtAggregateCount++;
138
+ voltageContributor(contribution);
139
+ log.debug(`CDT +${contribution}mV (${opts.sourceKey}): emitted trigger=${opts.triggerId} [${cdtAggregateCount}/${CDT_AGGREGATE_MAX}]`);
140
+ }
118
141
  }
119
142
  // Notify subscribers
120
143
  notifyListeners(event);
@@ -1 +1 @@
1
- {"version":3,"file":"activation-event.js","sourceRoot":"","sources":["../../src/pulse/activation-event.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activation-event.js","sourceRoot":"","sources":["../../src/pulse/activation-event.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"activation-log.d.ts","sourceRoot":"","sources":["../../src/pulse/activation-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAyClD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAI1D;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,eAAe,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CA+BlB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,eAAe,EAAE,CAEhE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD"}
1
+ {"version":3,"file":"activation-log.d.ts","sourceRoot":"","sources":["../../src/pulse/activation-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAwClD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAI1D;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,eAAe,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CA+BlB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,eAAe,EAAE,CAEhE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD"}
@@ -1 +1 @@
1
- {"version":3,"file":"activation-log.js","sourceRoot":"","sources":["../../src/pulse/activation-log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activation-log.js","sourceRoot":"","sources":["../../src/pulse/activation-log.ts"],"names":[],"mappings":"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"}
@@ -7,5 +7,8 @@
7
7
  export { emitCdt, emitVoltage, onActivation, bridgeVoltageSystem, unbridgeVoltageSystem, createCdtEvent, createVoltageEvent, } from "./activation-event.js";
8
8
  export { recordActivation, getActivationEvents, isCdtRefractory, getCdtVoltageContribution, } from "./activation-log.js";
9
9
  export { PressureIntegrator, getPressureIntegrator, initPressureIntegrator, } from "./pressure.js";
10
+ export { computeWorkSignal, computeFromTrend, getWorkSignalBreakdown, setInferenceMetricsProvider, type WorkSignalBreakdown, type TrendWindow, type InferenceMetricsProvider, } from "./work.js";
11
+ export { calculateFlywheelTier, dotStateToTier, DOT_PRODUCT_MAP, TIER_COLORS, } from "./tier.js";
12
+ export type { DotState, DotTier, DotName, DotStatus, FlywheelTier, FlywheelStatus, } from "./tier.js";
10
13
  export type { ActivationEvent, ActivationEventBase, VoltageActivation, CdtActivation, ActivationListener, EmitCdtOptions, EmitVoltageOptions, PulseConfig, PulseStatus, VoltageSnapshot, VoltageWeight, } from "./types.js";
11
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pulse/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pulse/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,wBAAwB,GAC9B,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,WAAW,EACX,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC"}
@@ -10,4 +10,8 @@ export { emitCdt, emitVoltage, onActivation, bridgeVoltageSystem, unbridgeVoltag
10
10
  export { recordActivation, getActivationEvents, isCdtRefractory, getCdtVoltageContribution, } from "./activation-log.js";
11
11
  // ─── PressureIntegrator (voltage system) ────────────────────────────────────
12
12
  export { PressureIntegrator, getPressureIntegrator, initPressureIntegrator, } from "./pressure.js";
13
+ // ─── Work signal (inference metrics → pulse) ─────────────────────────────────
14
+ export { computeWorkSignal, computeFromTrend, getWorkSignalBreakdown, setInferenceMetricsProvider, } from "./work.js";
15
+ // ─── Flywheel tier system ─────────────────────────────────────────────────────
16
+ export { calculateFlywheelTier, dotStateToTier, DOT_PRODUCT_MAP, TIER_COLORS, } from "./tier.js";
13
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pulse/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,OAAO,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,8EAA8E;AAC9E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,+EAA+E;AAC/E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pulse/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,+EAA+E;AAC/E,OAAO,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,8EAA8E;AAC9E,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAE7B,+EAA+E;AAC/E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAEvB,gFAAgF;AAChF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAI5B,MAAM,WAAW,CAAC;AAEnB,iFAAiF;AACjF,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,WAAW,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Flywheel Tier System.
3
+ *
4
+ * The flywheel is a three-body system: Sense (Core), Work (GMR), Joy (BragBin).
5
+ * All three dots must reach the same level for the flywheel to advance a tier.
6
+ * The weakest dot determines the overall tier — no dot can be left behind.
7
+ *
8
+ * Tiers represent trust maturity (ICI reduction), not gamification:
9
+ * Tier 0 — Dormant: no signal from one or more dots
10
+ * Tier 1 — Stirring: all dots have signal, high instinct cost
11
+ * Tier 2 — Spinning: all dots flowing, trust building, UI fading
12
+ * Tier 3 — Instinct: all dots deep green, system disappears
13
+ *
14
+ * Sundial principle: no numbers, no countdowns, no anxiety triggers.
15
+ * Tier changes are felt through color deepening and capability shifts.
16
+ */
17
+ /** The state of a single dot (sense, work, or joy). */
18
+ export type DotState = "green" | "blue" | "amber";
19
+ /** Dot-level tier: how mature this dot's signal is. */
20
+ export type DotTier = 0 | 1 | 2 | 3;
21
+ /** Flywheel tier — the system-wide tier (min of all three dots). */
22
+ export type FlywheelTier = 0 | 1 | 2 | 3;
23
+ /** Which product maps to which dot. */
24
+ export type DotName = "sense" | "work" | "joy";
25
+ /** Product → dot mapping. */
26
+ export declare const DOT_PRODUCT_MAP: Record<DotName, string>;
27
+ /** Color palette that deepens with tier. No sharp transitions. */
28
+ export declare const TIER_COLORS: Record<FlywheelTier, {
29
+ hue: string;
30
+ depth: string;
31
+ }>;
32
+ export interface DotStatus {
33
+ name: DotName;
34
+ state: DotState;
35
+ tier: DotTier;
36
+ why: string;
37
+ }
38
+ export interface FlywheelStatus {
39
+ tier: FlywheelTier;
40
+ dots: Record<DotName, DotStatus>;
41
+ color: {
42
+ hue: string;
43
+ depth: string;
44
+ };
45
+ /** Quiet narrative — no metrics, just a sentence about the flywheel's state. */
46
+ narrative: string;
47
+ }
48
+ /**
49
+ * Map a dot's instantaneous state to a tier level.
50
+ *
51
+ * green → 3 (flowing / aligned / active)
52
+ * blue → 2 (calm / present but not urgent)
53
+ * amber → 1 (attention needed / signal present but strained)
54
+ *
55
+ * A dot with no data at all gets state "amber" from the pulse endpoint,
56
+ * so tier 0 (dormant) only applies when explicitly passed.
57
+ */
58
+ export declare function dotStateToTier(state: DotState): DotTier;
59
+ /**
60
+ * Calculate the flywheel tier from three dot states.
61
+ *
62
+ * The flywheel tier is the MINIMUM of all three dot tiers.
63
+ * All three must be at the same level to advance — the weakest dot
64
+ * determines the overall tier. This prevents lopsided growth.
65
+ */
66
+ export declare function calculateFlywheelTier(sense: DotState, work: DotState, joy: DotState): FlywheelStatus;
67
+ //# sourceMappingURL=tier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier.d.ts","sourceRoot":"","sources":["../../src/pulse/tier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,uDAAuD;AACvD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAElD,uDAAuD;AACvD,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEpC,oEAAoE;AACpE,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzC,uCAAuC;AACvC,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE/C,6BAA6B;AAC7B,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAInD,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK5E,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjC,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;CACnB;AAID;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAOvD;AAID;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,QAAQ,GACZ,cAAc,CAmBhB"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Flywheel Tier System.
3
+ *
4
+ * The flywheel is a three-body system: Sense (Core), Work (GMR), Joy (BragBin).
5
+ * All three dots must reach the same level for the flywheel to advance a tier.
6
+ * The weakest dot determines the overall tier — no dot can be left behind.
7
+ *
8
+ * Tiers represent trust maturity (ICI reduction), not gamification:
9
+ * Tier 0 — Dormant: no signal from one or more dots
10
+ * Tier 1 — Stirring: all dots have signal, high instinct cost
11
+ * Tier 2 — Spinning: all dots flowing, trust building, UI fading
12
+ * Tier 3 — Instinct: all dots deep green, system disappears
13
+ *
14
+ * Sundial principle: no numbers, no countdowns, no anxiety triggers.
15
+ * Tier changes are felt through color deepening and capability shifts.
16
+ */
17
+ /** Product → dot mapping. */
18
+ export const DOT_PRODUCT_MAP = {
19
+ sense: "Core",
20
+ work: "GMReports",
21
+ joy: "BragBin",
22
+ };
23
+ /** Color palette that deepens with tier. No sharp transitions. */
24
+ export const TIER_COLORS = {
25
+ 0: { hue: "neutral", depth: "faint" },
26
+ 1: { hue: "warm", depth: "soft" },
27
+ 2: { hue: "warm", depth: "medium" },
28
+ 3: { hue: "warm", depth: "deep" },
29
+ };
30
+ // ─── Dot tier calculation ───────────────────────────────────────────────────
31
+ /**
32
+ * Map a dot's instantaneous state to a tier level.
33
+ *
34
+ * green → 3 (flowing / aligned / active)
35
+ * blue → 2 (calm / present but not urgent)
36
+ * amber → 1 (attention needed / signal present but strained)
37
+ *
38
+ * A dot with no data at all gets state "amber" from the pulse endpoint,
39
+ * so tier 0 (dormant) only applies when explicitly passed.
40
+ */
41
+ export function dotStateToTier(state) {
42
+ switch (state) {
43
+ case "green": return 3;
44
+ case "blue": return 2;
45
+ case "amber": return 1;
46
+ default: return 0;
47
+ }
48
+ }
49
+ // ─── Flywheel tier calculation ──────────────────────────────────────────────
50
+ /**
51
+ * Calculate the flywheel tier from three dot states.
52
+ *
53
+ * The flywheel tier is the MINIMUM of all three dot tiers.
54
+ * All three must be at the same level to advance — the weakest dot
55
+ * determines the overall tier. This prevents lopsided growth.
56
+ */
57
+ export function calculateFlywheelTier(sense, work, joy) {
58
+ const senseTier = dotStateToTier(sense);
59
+ const workTier = dotStateToTier(work);
60
+ const joyTier = dotStateToTier(joy);
61
+ const tier = Math.min(senseTier, workTier, joyTier);
62
+ const dots = {
63
+ sense: { name: "sense", state: sense, tier: senseTier, why: dotNarrative("sense", sense) },
64
+ work: { name: "work", state: work, tier: workTier, why: dotNarrative("work", work) },
65
+ joy: { name: "joy", state: joy, tier: joyTier, why: dotNarrative("joy", joy) },
66
+ };
67
+ return {
68
+ tier,
69
+ dots,
70
+ color: TIER_COLORS[tier],
71
+ narrative: flywheelNarrative(tier, senseTier, workTier, joyTier),
72
+ };
73
+ }
74
+ // ─── Narratives (sundial: no numbers, no anxiety) ───────────────────────────
75
+ function dotNarrative(dot, state) {
76
+ const label = DOT_PRODUCT_MAP[dot];
77
+ switch (state) {
78
+ case "green": return `${label} is flowing`;
79
+ case "blue": return `${label} is present`;
80
+ case "amber": return `${label} needs attention`;
81
+ default: return `${label} is quiet`;
82
+ }
83
+ }
84
+ function flywheelNarrative(tier, sense, work, joy) {
85
+ if (tier === 3)
86
+ return "The flywheel is spinning on instinct.";
87
+ if (tier === 2)
88
+ return "The flywheel is building momentum.";
89
+ if (tier === 1) {
90
+ // Identify which dot(s) are holding back progress
91
+ const lagging = [];
92
+ if (sense === 1)
93
+ lagging.push("Sense");
94
+ if (work === 1)
95
+ lagging.push("Work");
96
+ if (joy === 1)
97
+ lagging.push("Joy");
98
+ if (lagging.length === 3)
99
+ return "All three dots are stirring. The flywheel is waking up.";
100
+ return `The flywheel is stirring. ${lagging.join(" and ")} ${lagging.length === 1 ? "needs" : "need"} warmth.`;
101
+ }
102
+ return "The flywheel is still.";
103
+ }
104
+ //# sourceMappingURL=tier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier.js","sourceRoot":"","sources":["../../src/pulse/tier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Work signal — derives a 0-1 Work value from inference metrics.
3
+ *
4
+ * The Work dot in the Sense/Work/Joy flywheel represents how much
5
+ * productive inference activity is happening. This module reads
6
+ * trend data and normalizes it into a [0, 1] signal suitable for
7
+ * pulse emission and field participation.
8
+ *
9
+ * Factors:
10
+ * - Call volume (more calls = more work)
11
+ * - Error rate (high errors dampen work signal)
12
+ * - Escalation rate (escalations indicate harder work)
13
+ * - Token throughput (more tokens = more substance)
14
+ *
15
+ * Portability: InferenceMetricsProvider is injectable. The server
16
+ * injects the concrete implementation at runtime; the module itself
17
+ * has no direct dependency on any specific metrics backend.
18
+ */
19
+ /** Trend window data — a snapshot of inference metrics over a time window. */
20
+ export interface TrendWindow {
21
+ callCount: number;
22
+ errorRate: number;
23
+ escalationRate: number;
24
+ tokensByTarget: {
25
+ cloud: number;
26
+ local: number;
27
+ };
28
+ }
29
+ /** Provider for inference metrics. Injected by the server at runtime. */
30
+ export interface InferenceMetricsProvider {
31
+ trend(windowMs: number): TrendWindow;
32
+ }
33
+ /** Register the inference metrics provider. Called once at startup. */
34
+ export declare function setInferenceMetricsProvider(provider: InferenceMetricsProvider): void;
35
+ /**
36
+ * Compute the current Work signal (0-1) from inference metrics.
37
+ *
38
+ * Returns 0 when no inference activity has occurred or no provider is registered.
39
+ * Approaches 1.0 as call volume and token throughput increase,
40
+ * modulated by error rate and escalation intensity.
41
+ */
42
+ export declare function computeWorkSignal(): number;
43
+ /**
44
+ * Compute Work signal from a pre-fetched trend window.
45
+ * Useful when the caller already has trend data.
46
+ */
47
+ export declare function computeFromTrend(trend: TrendWindow): number;
48
+ /**
49
+ * Get a diagnostic breakdown of the Work signal components.
50
+ * Useful for debugging and HUD display.
51
+ */
52
+ export declare function getWorkSignalBreakdown(): WorkSignalBreakdown;
53
+ export interface WorkSignalBreakdown {
54
+ /** Composite Work signal (0-1). */
55
+ work: number;
56
+ /** Individual component values (0-1 each). */
57
+ components: {
58
+ calls: number;
59
+ tokens: number;
60
+ escalation: number;
61
+ success: number;
62
+ };
63
+ /** The trend window used for calculation. */
64
+ trend: TrendWindow;
65
+ }
66
+ //# sourceMappingURL=work.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../../src/pulse/work.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CACtC;AAMD,uEAAuE;AACvE,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAEpF;AAwBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA0B3D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CAgC5D;AAED,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,6CAA6C;IAC7C,KAAK,EAAE,WAAW,CAAC;CACpB"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Work signal — derives a 0-1 Work value from inference metrics.
3
+ *
4
+ * The Work dot in the Sense/Work/Joy flywheel represents how much
5
+ * productive inference activity is happening. This module reads
6
+ * trend data and normalizes it into a [0, 1] signal suitable for
7
+ * pulse emission and field participation.
8
+ *
9
+ * Factors:
10
+ * - Call volume (more calls = more work)
11
+ * - Error rate (high errors dampen work signal)
12
+ * - Escalation rate (escalations indicate harder work)
13
+ * - Token throughput (more tokens = more substance)
14
+ *
15
+ * Portability: InferenceMetricsProvider is injectable. The server
16
+ * injects the concrete implementation at runtime; the module itself
17
+ * has no direct dependency on any specific metrics backend.
18
+ */
19
+ // ─── Module state ───────────────────────────────────────────────────────────
20
+ let metricsProvider = null;
21
+ /** Register the inference metrics provider. Called once at startup. */
22
+ export function setInferenceMetricsProvider(provider) {
23
+ metricsProvider = provider;
24
+ }
25
+ // ─── Tuning knobs ───────────────────────────────────────────────────────────
26
+ /** Tuning knobs for Work signal normalization. */
27
+ const WORK_PARAMS = {
28
+ /** Calls per hour that maps to work=1.0 (saturation point). */
29
+ callSaturation: 100,
30
+ /** Tokens per hour that maps to full token contribution. */
31
+ tokenSaturation: 50_000,
32
+ /** Weight of call volume in the composite signal. */
33
+ callWeight: 0.4,
34
+ /** Weight of token throughput in the composite signal. */
35
+ tokenWeight: 0.3,
36
+ /** Weight of escalation intensity (harder work). */
37
+ escalationWeight: 0.15,
38
+ /** Weight of success rate (errors dampen). */
39
+ successWeight: 0.15,
40
+ /** Rolling window for trend calculation (ms). */
41
+ windowMs: 60 * 60 * 1000, // 1 hour
42
+ };
43
+ // ─── Signal computation ─────────────────────────────────────────────────────
44
+ /**
45
+ * Compute the current Work signal (0-1) from inference metrics.
46
+ *
47
+ * Returns 0 when no inference activity has occurred or no provider is registered.
48
+ * Approaches 1.0 as call volume and token throughput increase,
49
+ * modulated by error rate and escalation intensity.
50
+ */
51
+ export function computeWorkSignal() {
52
+ if (!metricsProvider)
53
+ return 0;
54
+ const trend = metricsProvider.trend(WORK_PARAMS.windowMs);
55
+ if (trend.callCount === 0)
56
+ return 0;
57
+ return computeFromTrend(trend);
58
+ }
59
+ /**
60
+ * Compute Work signal from a pre-fetched trend window.
61
+ * Useful when the caller already has trend data.
62
+ */
63
+ export function computeFromTrend(trend) {
64
+ if (trend.callCount === 0)
65
+ return 0;
66
+ // Call volume: saturates at callSaturation calls/window
67
+ const callSignal = Math.min(trend.callCount / WORK_PARAMS.callSaturation, 1);
68
+ // Token throughput: total tokens in window, saturates at tokenSaturation
69
+ const totalTokens = trend.tokensByTarget.cloud + trend.tokensByTarget.local;
70
+ const tokenSignal = Math.min(totalTokens / WORK_PARAMS.tokenSaturation, 1);
71
+ // Escalation intensity: escalations indicate harder, more complex work
72
+ // Cap at 0.5 escalation rate for full signal (beyond that is pathological)
73
+ const escalationSignal = Math.min(trend.escalationRate / 0.5, 1);
74
+ // Success rate: errors dampen the work signal (broken work isn't real work)
75
+ const successSignal = 1 - trend.errorRate;
76
+ // Weighted composite
77
+ const raw = callSignal * WORK_PARAMS.callWeight +
78
+ tokenSignal * WORK_PARAMS.tokenWeight +
79
+ escalationSignal * WORK_PARAMS.escalationWeight +
80
+ successSignal * WORK_PARAMS.successWeight;
81
+ // Clamp to [0, 1]
82
+ return Math.min(Math.max(raw, 0), 1);
83
+ }
84
+ /**
85
+ * Get a diagnostic breakdown of the Work signal components.
86
+ * Useful for debugging and HUD display.
87
+ */
88
+ export function getWorkSignalBreakdown() {
89
+ if (!metricsProvider) {
90
+ const emptyTrend = { callCount: 0, errorRate: 0, escalationRate: 0, tokensByTarget: { cloud: 0, local: 0 } };
91
+ return { work: 0, components: { calls: 0, tokens: 0, escalation: 0, success: 0 }, trend: emptyTrend };
92
+ }
93
+ const trend = metricsProvider.trend(WORK_PARAMS.windowMs);
94
+ if (trend.callCount === 0) {
95
+ return {
96
+ work: 0,
97
+ components: { calls: 0, tokens: 0, escalation: 0, success: 0 },
98
+ trend,
99
+ };
100
+ }
101
+ const callSignal = Math.min(trend.callCount / WORK_PARAMS.callSaturation, 1);
102
+ const totalTokens = trend.tokensByTarget.cloud + trend.tokensByTarget.local;
103
+ const tokenSignal = Math.min(totalTokens / WORK_PARAMS.tokenSaturation, 1);
104
+ const escalationSignal = Math.min(trend.escalationRate / 0.5, 1);
105
+ const successSignal = 1 - trend.errorRate;
106
+ return {
107
+ work: computeFromTrend(trend),
108
+ components: {
109
+ calls: Math.round(callSignal * 1000) / 1000,
110
+ tokens: Math.round(tokenSignal * 1000) / 1000,
111
+ escalation: Math.round(escalationSignal * 1000) / 1000,
112
+ success: Math.round(successSignal * 1000) / 1000,
113
+ },
114
+ trend,
115
+ };
116
+ }
117
+ //# sourceMappingURL=work.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work.js","sourceRoot":"","sources":["../../src/pulse/work.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Runtime Lock — PID file with port for instance discovery.
3
+ *
4
+ * On startup: writes brain/runtime/instance.json with pid, port, name, startedAt.
5
+ * On shutdown: deletes it.
6
+ * Discovery: other processes read the file to find running instances.
7
+ *
8
+ * Stale lock detection: if the PID in the file isn't running, the lock is stale
9
+ * and gets cleaned up automatically.
10
+ */
11
+ export interface RuntimeLock {
12
+ pid: number;
13
+ port: number;
14
+ name: string;
15
+ brainDir: string;
16
+ startedAt: string;
17
+ }
18
+ /**
19
+ * Write the runtime lock file. Call after the server starts
20
+ * and the actual port is known.
21
+ */
22
+ export declare function acquireLock(port: number, name: string): RuntimeLock;
23
+ /**
24
+ * Release the runtime lock file. Call during graceful shutdown.
25
+ * Only deletes if the lock belongs to this process (prevents
26
+ * a shutting-down instance from deleting a freshly-started one's lock).
27
+ */
28
+ export declare function releaseLock(): void;
29
+ /**
30
+ * Read the current lock file. Returns null if no lock exists
31
+ * or the file is malformed.
32
+ */
33
+ export declare function readLock(): RuntimeLock | null;
34
+ /**
35
+ * Discover a running instance from the lock file.
36
+ * Returns the lock if the process is alive, null otherwise.
37
+ * Cleans up stale locks automatically.
38
+ */
39
+ export declare function discoverRunning(): RuntimeLock | null;
40
+ /**
41
+ * Get the port from the last runtime lock, regardless of whether
42
+ * the process is still alive. Used for sticky port on restart.
43
+ * Returns 0 if no previous lock found.
44
+ */
45
+ export declare function getLastPort(): number;
46
+ /**
47
+ * Discover running instances across multiple brain directories.
48
+ * Useful for finding all Core instances on this machine.
49
+ */
50
+ export declare function discoverAll(brainDirs: string[]): RuntimeLock[];
51
+ //# sourceMappingURL=runtime-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-lock.d.ts","sourceRoot":"","sources":["../src/runtime-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CA0BnE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAUlC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,WAAW,GAAG,IAAI,CAQ7C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAepD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAGpC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE,CAsB9D"}