@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
@@ -0,0 +1,388 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Core — Folder Ingestion Demo</title>
7
+ <style>
8
+ * { margin: 0; padding: 0; box-sizing: border-box; }
9
+ :root {
10
+ --bg: #0a0a0a; --surface: #141414; --border: #2a2a2a;
11
+ --text: #e0e0e0; --text-dim: #888; --accent: #7c6fef;
12
+ --green: #22c55e; --amber: #f59e0b; --red: #ef4444;
13
+ --mono: "SF Mono", "Cascadia Code", "Consolas", monospace;
14
+ --font: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
15
+ }
16
+ body { font-family: var(--font); background: var(--bg); color: var(--text); min-height: 100vh; }
17
+
18
+ .demo-header {
19
+ padding: 16px 24px;
20
+ border-bottom: 1px solid var(--border);
21
+ display: flex; align-items: center; gap: 12px;
22
+ }
23
+ .demo-header h1 { font-size: 16px; font-weight: 600; }
24
+ .demo-header h1 span { color: var(--accent); }
25
+ .demo-header .badge {
26
+ font-family: var(--mono); font-size: 10px; text-transform: uppercase;
27
+ letter-spacing: 0.08em; color: var(--accent); border: 1px solid var(--accent);
28
+ border-radius: 4px; padding: 2px 8px;
29
+ }
30
+
31
+ .demo-layout {
32
+ display: grid;
33
+ grid-template-columns: 1fr 80px 1fr;
34
+ gap: 0;
35
+ height: calc(100vh - 53px);
36
+ }
37
+
38
+ .panel { display: flex; flex-direction: column; overflow: hidden; }
39
+ .panel-title {
40
+ font-family: var(--mono); font-size: 11px; text-transform: uppercase;
41
+ letter-spacing: 0.08em; color: var(--text-dim); padding: 12px 16px;
42
+ border-bottom: 1px solid var(--border); flex-shrink: 0;
43
+ }
44
+
45
+ /* Left panel — source tree */
46
+ .source-panel { border-right: 1px solid var(--border); }
47
+ .source-tree { flex: 1; overflow-y: auto; padding: 8px 0; font-size: 13px; }
48
+
49
+ /* Tree styling — old school */
50
+ .tree-item { display: flex; align-items: center; padding: 2px 0 2px 0; cursor: default; white-space: nowrap; }
51
+ .tree-item:hover { background: rgba(255,255,255,0.03); }
52
+ .tree-item.processing { background: rgba(124,111,239,0.08); }
53
+ .tree-item.done { opacity: 0.5; }
54
+ .tree-item.redacted { background: rgba(245,158,11,0.08); }
55
+ .tree-indent { display: inline-block; width: 20px; flex-shrink: 0; text-align: center; }
56
+ .tree-guide { color: var(--border); font-family: var(--mono); font-size: 13px; }
57
+ .tree-icon { margin-right: 6px; font-size: 12px; flex-shrink: 0; }
58
+ .tree-icon.folder { color: var(--amber); }
59
+ .tree-icon.file { color: var(--text-dim); }
60
+ .tree-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
61
+ .tree-size { font-family: var(--mono); font-size: 10px; color: var(--text-dim); margin-left: 8px; padding-right: 12px; }
62
+ .tree-status { font-size: 10px; margin-left: 8px; padding-right: 12px; }
63
+ .tree-status.ok { color: var(--green); }
64
+ .tree-status.redact { color: var(--amber); }
65
+ .tree-status.skip { color: var(--red); }
66
+
67
+ /* Middle — pipeline animation */
68
+ .pipeline {
69
+ display: flex; flex-direction: column; align-items: center;
70
+ justify-content: center; gap: 16px;
71
+ border-right: 1px solid var(--border);
72
+ background: var(--surface); padding: 16px 8px;
73
+ }
74
+ .pipe-stage {
75
+ width: 48px; height: 48px; border-radius: 8px;
76
+ border: 1px solid var(--border); display: flex;
77
+ align-items: center; justify-content: center;
78
+ font-size: 18px; position: relative;
79
+ transition: border-color 0.3s, background 0.3s;
80
+ }
81
+ .pipe-stage.active { border-color: var(--accent); background: rgba(124,111,239,0.1); }
82
+ .pipe-stage .pipe-label {
83
+ position: absolute; top: 100%; margin-top: 4px;
84
+ font-size: 8px; font-family: var(--mono); text-transform: uppercase;
85
+ letter-spacing: 0.05em; color: var(--text-dim); white-space: nowrap;
86
+ }
87
+ .pipe-arrow { color: var(--border); font-size: 14px; }
88
+
89
+ /* Right panel — brain tree (result) */
90
+ .brain-panel { background: var(--bg); }
91
+ .brain-tree { flex: 1; overflow-y: auto; padding: 8px 0; font-size: 13px; }
92
+
93
+ /* Stats bar */
94
+ .stats-bar {
95
+ display: flex; gap: 16px; padding: 8px 16px;
96
+ border-top: 1px solid var(--border);
97
+ font-family: var(--mono); font-size: 11px; color: var(--text-dim);
98
+ flex-shrink: 0;
99
+ }
100
+ .stat-val { color: var(--text); font-weight: 600; }
101
+ .stat-val.green { color: var(--green); }
102
+ .stat-val.amber { color: var(--amber); }
103
+
104
+ /* Controls */
105
+ .controls {
106
+ display: flex; gap: 8px; padding: 12px 16px;
107
+ border-top: 1px solid var(--border); flex-shrink: 0;
108
+ }
109
+ .btn {
110
+ background: var(--accent); color: #fff; border: none; border-radius: 6px;
111
+ padding: 8px 16px; font-size: 13px; font-family: inherit;
112
+ cursor: pointer; font-weight: 500;
113
+ }
114
+ .btn:hover { opacity: 0.9; }
115
+ .btn.secondary { background: var(--surface); color: var(--text); border: 1px solid var(--border); }
116
+ .btn.secondary:hover { border-color: var(--text-dim); }
117
+ .btn:disabled { opacity: 0.4; cursor: not-allowed; }
118
+
119
+ /* Redaction highlight */
120
+ .redact-hl { background: rgba(245,158,11,0.15); color: var(--amber); padding: 0 2px; border-radius: 2px; font-family: var(--mono); font-size: 11px; }
121
+
122
+ @media (max-width: 768px) {
123
+ .demo-layout { grid-template-columns: 1fr; grid-template-rows: 1fr auto 1fr; }
124
+ .pipeline { flex-direction: row; border-right: none; border-bottom: 1px solid var(--border); padding: 8px 16px; }
125
+ .source-panel { border-right: none; border-bottom: 1px solid var(--border); }
126
+ }
127
+ </style>
128
+ </head>
129
+ <body>
130
+
131
+ <div class="demo-header">
132
+ <h1>Run <span>Core</span></h1>
133
+ <span class="badge">Ingestion Demo</span>
134
+ <span style="flex:1;"></span>
135
+ <a href="/" style="font-size:12px;color:var(--text-dim);text-decoration:none;">Back to Core</a>
136
+ </div>
137
+
138
+ <div class="demo-layout">
139
+ <!-- Source folder -->
140
+ <div class="panel source-panel">
141
+ <div class="panel-title">Source folder</div>
142
+ <div class="source-tree" id="source-tree"></div>
143
+ <div class="controls">
144
+ <button class="btn" id="run-btn" onclick="runDemo()">Run Demo</button>
145
+ <button class="btn secondary" id="reset-btn" onclick="resetDemo()">Reset</button>
146
+ <button class="btn secondary" onclick="document.getElementById('real-folder').click()">Select Real Folder</button>
147
+ <input type="file" id="real-folder" webkitdirectory directory multiple style="display:none;">
148
+ </div>
149
+ </div>
150
+
151
+ <!-- Pipeline -->
152
+ <div class="pipeline">
153
+ <div class="pipe-stage" id="pipe-scan" title="Scan">&#128269;<span class="pipe-label">Scan</span></div>
154
+ <div class="pipe-arrow">&#9660;</div>
155
+ <div class="pipe-stage" id="pipe-validate" title="Validate">&#9989;<span class="pipe-label">Check</span></div>
156
+ <div class="pipe-arrow">&#9660;</div>
157
+ <div class="pipe-stage" id="pipe-redact" title="Redact">&#128737;<span class="pipe-label">Redact</span></div>
158
+ <div class="pipe-arrow">&#9660;</div>
159
+ <div class="pipe-stage" id="pipe-store" title="Store">&#128190;<span class="pipe-label">Store</span></div>
160
+ <div class="pipe-arrow">&#9660;</div>
161
+ <div class="pipe-stage" id="pipe-index" title="Index">&#128270;<span class="pipe-label">Index</span></div>
162
+ </div>
163
+
164
+ <!-- Brain result -->
165
+ <div class="panel brain-panel">
166
+ <div class="panel-title">Brain — Virtual Folders</div>
167
+ <div class="brain-tree" id="brain-tree"></div>
168
+ <div class="stats-bar">
169
+ <span>Files: <span class="stat-val green" id="stat-files">0</span></span>
170
+ <span>Redactions: <span class="stat-val amber" id="stat-redactions">0</span></span>
171
+ <span>PII found: <span class="stat-val amber" id="stat-pii">0</span></span>
172
+ </div>
173
+ </div>
174
+ </div>
175
+
176
+ <script>
177
+ // Demo data — simulates the folder from demo-data/
178
+ var DEMO_FILES = [
179
+ { path: "Family Docs/Health Records/lab-results-2026.txt", size: 847, pii: ["SSN", "DOB", "MRN", "NPI", "ADDRESS", "PHONE"] },
180
+ { path: "Family Docs/Health Records/prescription-list.txt", size: 1024, pii: ["PHONE", "ADDRESS", "INSURANCE_ID", "EMAIL"] },
181
+ { path: "Family Docs/Health Records/vaccination-record.csv", size: 612, pii: ["ADDRESS"] },
182
+ { path: "Family Docs/Financial/Taxes/w2-2025.txt", size: 743, pii: ["SSN", "ADDRESS", "CARD"] },
183
+ { path: "Family Docs/Financial/Taxes/property-tax-2025.txt", size: 658, pii: ["ADDRESS", "ACCOUNT_NUMBER"] },
184
+ { path: "Family Docs/Financial/Insurance/auto-policy.txt", size: 891, pii: ["ADDRESS", "PHONE", "DRIVERS_LICENSE"] },
185
+ { path: "Family Docs/Financial/Insurance/homeowners-policy.txt", size: 702, pii: ["ADDRESS", "ACCOUNT_NUMBER"] },
186
+ { path: "Family Docs/Legal/Estate/will-summary.txt", size: 824, pii: ["ADDRESS", "PHONE"] },
187
+ { path: "Family Docs/Legal/Estate/beneficiary-contacts.csv", size: 418, pii: ["SSN", "PHONE", "EMAIL", "ADDRESS"] },
188
+ { path: "Family Docs/Recipes/grandmas-chili.md", size: 1200, pii: [] },
189
+ { path: "Family Docs/Recipes/christmas-cookies.md", size: 980, pii: [] },
190
+ { path: "Family Docs/Work/Projects/project-status.md", size: 645, pii: ["PHONE", "ACCOUNT_NUMBER"] },
191
+ { path: "Family Docs/Work/Contracts/lawn-service-2026.txt", size: 712, pii: ["ADDRESS", "PHONE", "EMAIL", "CARD"] },
192
+ { path: "Family Docs/Family Photos/2024/christmas-dinner.txt", size: 534, pii: ["ADDRESS"] },
193
+ { path: "Family Docs/Family Photos/2025/summer-cookout.txt", size: 621, pii: [] },
194
+ { path: "Family Docs/passwords.txt", size: 489, pii: ["EMAIL", "PHONE"], rejected: "Contains plaintext passwords — flagged for review" },
195
+ ];
196
+
197
+ var demoFiles = DEMO_FILES;
198
+ var running = false;
199
+
200
+ function buildTree(files, containerId) {
201
+ var container = document.getElementById(containerId);
202
+ container.innerHTML = "";
203
+
204
+ // Build folder structure
205
+ var root = { children: {}, files: [] };
206
+ files.forEach(function(f) {
207
+ var parts = f.path.split("/");
208
+ var node = root;
209
+ for (var i = 0; i < parts.length - 1; i++) {
210
+ if (!node.children[parts[i]]) node.children[parts[i]] = { children: {}, files: [] };
211
+ node = node.children[parts[i]];
212
+ }
213
+ node.files.push({ name: parts[parts.length - 1], ...f });
214
+ });
215
+
216
+ function renderNode(node, depth, isLast, parentPrefix) {
217
+ var keys = Object.keys(node.children).sort();
218
+ var allItems = [];
219
+ keys.forEach(function(k) { allItems.push({ type: "folder", name: k, node: node.children[k] }); });
220
+ node.files.sort(function(a, b) { return a.name.localeCompare(b.name); });
221
+ node.files.forEach(function(f) { allItems.push({ type: "file", ...f }); });
222
+
223
+ allItems.forEach(function(item, idx) {
224
+ var last = idx === allItems.length - 1;
225
+ var connector = last ? "\u2514\u2500" : "\u251C\u2500";
226
+ var guide = parentPrefix + connector + " ";
227
+ var childPrefix = parentPrefix + (last ? " " : "\u2502 ");
228
+
229
+ var div = document.createElement("div");
230
+ div.className = "tree-item";
231
+ div.setAttribute("data-path", item.path || "");
232
+
233
+ var html = '<span class="tree-guide" style="white-space:pre;font-family:var(--mono);">' + guide + '</span>';
234
+
235
+ if (item.type === "folder") {
236
+ html += '<span class="tree-icon folder">&#128193;</span>';
237
+ html += '<span class="tree-name" style="font-weight:500;">' + item.name + '</span>';
238
+ } else {
239
+ var ext = item.name.split(".").pop();
240
+ var icon = ext === "csv" ? "&#128202;" : ext === "md" ? "&#128196;" : ext === "txt" ? "&#128196;" : "&#128196;";
241
+ html += '<span class="tree-icon file">' + icon + '</span>';
242
+ html += '<span class="tree-name">' + item.name + '</span>';
243
+ html += '<span class="tree-size">' + formatSize(item.size) + '</span>';
244
+ }
245
+
246
+ div.innerHTML = html;
247
+ container.appendChild(div);
248
+
249
+ if (item.type === "folder") {
250
+ renderNode(item.node, depth + 1, last, childPrefix);
251
+ }
252
+ });
253
+ }
254
+
255
+ // Render root name
256
+ var rootName = files.length > 0 ? files[0].path.split("/")[0] : "Folder";
257
+ var rootDiv = document.createElement("div");
258
+ rootDiv.className = "tree-item";
259
+ rootDiv.innerHTML = '<span class="tree-icon folder">&#128193;</span><span class="tree-name" style="font-weight:600;">' + rootName + '</span>';
260
+ container.appendChild(rootDiv);
261
+
262
+ renderNode(root.children[rootName] || root, 0, false, "");
263
+ }
264
+
265
+ function formatSize(bytes) {
266
+ if (bytes < 1024) return bytes + " B";
267
+ return (bytes / 1024).toFixed(1) + " KB";
268
+ }
269
+
270
+ function resetDemo() {
271
+ running = false;
272
+ demoFiles = DEMO_FILES;
273
+ buildTree(demoFiles, "source-tree");
274
+ document.getElementById("brain-tree").innerHTML = '<div style="padding:16px;color:var(--text-dim);font-size:12px;font-style:italic;">Run the demo to see files organized here.</div>';
275
+ document.getElementById("stat-files").textContent = "0";
276
+ document.getElementById("stat-redactions").textContent = "0";
277
+ document.getElementById("stat-pii").textContent = "0";
278
+ document.querySelectorAll(".pipe-stage").forEach(function(s) { s.classList.remove("active"); });
279
+ document.getElementById("run-btn").disabled = false;
280
+ }
281
+
282
+ async function runDemo() {
283
+ if (running) return;
284
+ running = true;
285
+ document.getElementById("run-btn").disabled = true;
286
+
287
+ var sourceItems = document.querySelectorAll("#source-tree .tree-item[data-path]");
288
+ var brainFiles = [];
289
+ var totalRedactions = 0;
290
+ var totalPii = 0;
291
+ var stages = ["pipe-scan", "pipe-validate", "pipe-redact", "pipe-store", "pipe-index"];
292
+
293
+ for (var fi = 0; fi < demoFiles.length; fi++) {
294
+ var file = demoFiles[fi];
295
+ if (!running) break;
296
+
297
+ // Find source tree item
298
+ var srcItem = document.querySelector('#source-tree .tree-item[data-path="' + file.path + '"]');
299
+
300
+ // Stage 1: Scan
301
+ setStage(0); if (srcItem) srcItem.classList.add("processing");
302
+ await wait(200);
303
+
304
+ // Stage 2: Validate
305
+ setStage(1);
306
+ await wait(150);
307
+
308
+ if (file.rejected) {
309
+ // Rejected file
310
+ if (srcItem) {
311
+ srcItem.classList.remove("processing");
312
+ srcItem.classList.add("redacted");
313
+ srcItem.innerHTML += '<span class="tree-status skip">FLAGGED</span>';
314
+ }
315
+ await wait(300);
316
+ continue;
317
+ }
318
+
319
+ // Stage 3: Redact
320
+ setStage(2);
321
+ var piiCount = file.pii ? file.pii.length : 0;
322
+ totalPii += piiCount;
323
+ if (piiCount > 0) {
324
+ totalRedactions += piiCount;
325
+ if (srcItem) {
326
+ srcItem.classList.add("redacted");
327
+ srcItem.innerHTML += '<span class="tree-status redact">' + piiCount + ' redacted</span>';
328
+ }
329
+ }
330
+ await wait(piiCount > 0 ? 300 : 100);
331
+
332
+ // Stage 4: Store
333
+ setStage(3);
334
+ await wait(150);
335
+
336
+ // Stage 5: Index
337
+ setStage(4);
338
+ brainFiles.push(file);
339
+ if (srcItem) { srcItem.classList.remove("processing"); srcItem.classList.add("done"); }
340
+ await wait(100);
341
+
342
+ // Update stats
343
+ document.getElementById("stat-files").textContent = brainFiles.length;
344
+ document.getElementById("stat-redactions").textContent = totalRedactions;
345
+ document.getElementById("stat-pii").textContent = totalPii;
346
+
347
+ // Rebuild brain tree
348
+ buildTree(brainFiles, "brain-tree");
349
+ }
350
+
351
+ // Clear pipeline
352
+ document.querySelectorAll(".pipe-stage").forEach(function(s) { s.classList.remove("active"); });
353
+ running = false;
354
+ document.getElementById("run-btn").disabled = false;
355
+
356
+ function setStage(idx) {
357
+ stages.forEach(function(id, i) {
358
+ document.getElementById(id).classList.toggle("active", i === idx);
359
+ });
360
+ }
361
+ }
362
+
363
+ function wait(ms) { return new Promise(function(r) { setTimeout(r, ms); }); }
364
+
365
+ // Real folder selection — read actual files and build tree
366
+ document.getElementById("real-folder").addEventListener("change", function() {
367
+ var files = this.files;
368
+ if (!files || !files.length) return;
369
+ this.value = "";
370
+
371
+ demoFiles = [];
372
+ for (var i = 0; i < files.length; i++) {
373
+ var f = files[i];
374
+ demoFiles.push({
375
+ path: f.webkitRelativePath || f.name,
376
+ size: f.size,
377
+ pii: [], // Can't scan client-side in demo, but structure shows
378
+ });
379
+ }
380
+ buildTree(demoFiles, "source-tree");
381
+ document.getElementById("brain-tree").innerHTML = '<div style="padding:16px;color:var(--text-dim);font-size:12px;font-style:italic;">Run the demo to see files organized here.</div>';
382
+ });
383
+
384
+ // Init
385
+ resetDemo();
386
+ </script>
387
+ </body>
388
+ </html>
package/public/help.html CHANGED
@@ -498,9 +498,12 @@
498
498
  </main>
499
499
 
500
500
  <script>
501
+ var sessionId = sessionStorage.getItem("dash_sid");
502
+ function authHeaders() { return sessionId ? { "x-session-id": sessionId } : {}; }
501
503
  (async function() {
502
504
  try {
503
- const res = await fetch('/api/help/context');
505
+ const res = await fetch('/api/help/context', { headers: authHeaders() });
506
+ if (res.status === 401) { window.location.href = '/'; return; }
504
507
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
505
508
  const data = await res.json();
506
509
  renderState(data);
Binary file
Binary file