@theihtisham/agent-shadow-brain 7.2.0 → 7.22.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 (438) hide show
  1. package/CHANGELOG.md +478 -429
  2. package/README.md +198 -68
  3. package/dist/activity-cli.d.ts +3 -0
  4. package/dist/activity-cli.d.ts.map +1 -0
  5. package/dist/activity-cli.js +78 -0
  6. package/dist/activity-cli.js.map +1 -0
  7. package/dist/adapters/index.d.ts +2 -1
  8. package/dist/adapters/index.d.ts.map +1 -1
  9. package/dist/adapters/index.js +3 -2
  10. package/dist/adapters/index.js.map +1 -1
  11. package/dist/brain/activity-journal.d.ts +82 -0
  12. package/dist/brain/activity-journal.d.ts.map +1 -0
  13. package/dist/brain/activity-journal.js +315 -0
  14. package/dist/brain/activity-journal.js.map +1 -0
  15. package/dist/brain/activity-reporting.d.ts +14 -0
  16. package/dist/brain/activity-reporting.d.ts.map +1 -0
  17. package/dist/brain/activity-reporting.js +17 -0
  18. package/dist/brain/activity-reporting.js.map +1 -0
  19. package/dist/brain/auto-update.js +1 -1
  20. package/dist/brain/auto-update.js.map +1 -1
  21. package/dist/brain/brain-portability.js +1 -1
  22. package/dist/brain/brain-portability.js.map +1 -1
  23. package/dist/brain/client-config.d.ts +19 -0
  24. package/dist/brain/client-config.d.ts.map +1 -0
  25. package/dist/brain/client-config.js +40 -0
  26. package/dist/brain/client-config.js.map +1 -0
  27. package/dist/brain/client-integrations.d.ts +63 -0
  28. package/dist/brain/client-integrations.d.ts.map +1 -0
  29. package/dist/brain/client-integrations.js +79 -0
  30. package/dist/brain/client-integrations.js.map +1 -0
  31. package/dist/brain/context-assembly.d.ts +41 -5
  32. package/dist/brain/context-assembly.d.ts.map +1 -1
  33. package/dist/brain/context-assembly.js +366 -35
  34. package/dist/brain/context-assembly.js.map +1 -1
  35. package/dist/brain/context-efficiency.d.ts +48 -0
  36. package/dist/brain/context-efficiency.d.ts.map +1 -0
  37. package/dist/brain/context-efficiency.js +34 -0
  38. package/dist/brain/context-efficiency.js.map +1 -0
  39. package/dist/brain/context-request.d.ts +4 -0
  40. package/dist/brain/context-request.d.ts.map +1 -0
  41. package/dist/brain/context-request.js +24 -0
  42. package/dist/brain/context-request.js.map +1 -0
  43. package/dist/brain/context-retrieval.d.ts +88 -0
  44. package/dist/brain/context-retrieval.d.ts.map +1 -0
  45. package/dist/brain/context-retrieval.js +301 -0
  46. package/dist/brain/context-retrieval.js.map +1 -0
  47. package/dist/brain/feature-settings.d.ts +10 -0
  48. package/dist/brain/feature-settings.d.ts.map +1 -1
  49. package/dist/brain/feature-settings.js +18 -2
  50. package/dist/brain/feature-settings.js.map +1 -1
  51. package/dist/brain/file-identity.d.ts +4 -0
  52. package/dist/brain/file-identity.d.ts.map +1 -0
  53. package/dist/brain/file-identity.js +27 -0
  54. package/dist/brain/file-identity.js.map +1 -0
  55. package/dist/brain/global-brain.d.ts +18 -2
  56. package/dist/brain/global-brain.d.ts.map +1 -1
  57. package/dist/brain/global-brain.js +75 -7
  58. package/dist/brain/global-brain.js.map +1 -1
  59. package/dist/brain/managed-project-skills.d.ts +48 -0
  60. package/dist/brain/managed-project-skills.d.ts.map +1 -0
  61. package/dist/brain/managed-project-skills.js +230 -0
  62. package/dist/brain/managed-project-skills.js.map +1 -0
  63. package/dist/brain/mcp-presence.d.ts +50 -0
  64. package/dist/brain/mcp-presence.d.ts.map +1 -0
  65. package/dist/brain/mcp-presence.js +214 -0
  66. package/dist/brain/mcp-presence.js.map +1 -0
  67. package/dist/brain/mcp-server.d.ts +40 -1
  68. package/dist/brain/mcp-server.d.ts.map +1 -1
  69. package/dist/brain/mcp-server.js +506 -52
  70. package/dist/brain/mcp-server.js.map +1 -1
  71. package/dist/brain/mcp-stdio.d.ts +12 -0
  72. package/dist/brain/mcp-stdio.d.ts.map +1 -0
  73. package/dist/brain/mcp-stdio.js +158 -0
  74. package/dist/brain/mcp-stdio.js.map +1 -0
  75. package/dist/brain/memory-annotations.d.ts +99 -0
  76. package/dist/brain/memory-annotations.d.ts.map +1 -0
  77. package/dist/brain/memory-annotations.js +402 -0
  78. package/dist/brain/memory-annotations.js.map +1 -0
  79. package/dist/brain/memory-graph.d.ts.map +1 -1
  80. package/dist/brain/memory-graph.js +12 -23
  81. package/dist/brain/memory-graph.js.map +1 -1
  82. package/dist/brain/memory-inspection.d.ts +73 -0
  83. package/dist/brain/memory-inspection.d.ts.map +1 -0
  84. package/dist/brain/memory-inspection.js +131 -0
  85. package/dist/brain/memory-inspection.js.map +1 -0
  86. package/dist/brain/memory-mcp-content.d.ts +46 -0
  87. package/dist/brain/memory-mcp-content.d.ts.map +1 -0
  88. package/dist/brain/memory-mcp-content.js +95 -0
  89. package/dist/brain/memory-mcp-content.js.map +1 -0
  90. package/dist/brain/memory-sources.d.ts +8 -0
  91. package/dist/brain/memory-sources.d.ts.map +1 -0
  92. package/dist/brain/memory-sources.js +27 -0
  93. package/dist/brain/memory-sources.js.map +1 -0
  94. package/dist/brain/model-registry.d.ts +4 -5
  95. package/dist/brain/model-registry.d.ts.map +1 -1
  96. package/dist/brain/model-registry.js +22 -207
  97. package/dist/brain/model-registry.js.map +1 -1
  98. package/dist/brain/model-usage.d.ts +66 -0
  99. package/dist/brain/model-usage.d.ts.map +1 -0
  100. package/dist/brain/model-usage.js +246 -0
  101. package/dist/brain/model-usage.js.map +1 -0
  102. package/dist/brain/native-codex.d.ts +105 -0
  103. package/dist/brain/native-codex.d.ts.map +1 -0
  104. package/dist/brain/native-codex.js +292 -0
  105. package/dist/brain/native-codex.js.map +1 -0
  106. package/dist/brain/native-session-import.d.ts +56 -0
  107. package/dist/brain/native-session-import.d.ts.map +1 -0
  108. package/dist/brain/native-session-import.js +307 -0
  109. package/dist/brain/native-session-import.js.map +1 -0
  110. package/dist/brain/orchestrator.js +1 -1
  111. package/dist/brain/orchestrator.js.map +1 -1
  112. package/dist/brain/project-feedback.d.ts +63 -0
  113. package/dist/brain/project-feedback.d.ts.map +1 -0
  114. package/dist/brain/project-feedback.js +300 -0
  115. package/dist/brain/project-feedback.js.map +1 -0
  116. package/dist/brain/project-hub-contract.d.ts +332 -0
  117. package/dist/brain/project-hub-contract.d.ts.map +1 -0
  118. package/dist/brain/project-hub-contract.js +57 -0
  119. package/dist/brain/project-hub-contract.js.map +1 -0
  120. package/dist/brain/project-hub-mcp.d.ts +182 -0
  121. package/dist/brain/project-hub-mcp.d.ts.map +1 -0
  122. package/dist/brain/project-hub-mcp.js +46 -0
  123. package/dist/brain/project-hub-mcp.js.map +1 -0
  124. package/dist/brain/project-hub-pdf-worker.d.ts +13 -0
  125. package/dist/brain/project-hub-pdf-worker.d.ts.map +1 -0
  126. package/dist/brain/project-hub-pdf-worker.js +84 -0
  127. package/dist/brain/project-hub-pdf-worker.js.map +1 -0
  128. package/dist/brain/project-hub-store.d.ts +50 -0
  129. package/dist/brain/project-hub-store.d.ts.map +1 -0
  130. package/dist/brain/project-hub-store.js +257 -0
  131. package/dist/brain/project-hub-store.js.map +1 -0
  132. package/dist/brain/project-hub.d.ts +132 -0
  133. package/dist/brain/project-hub.d.ts.map +1 -0
  134. package/dist/brain/project-hub.js +403 -0
  135. package/dist/brain/project-hub.js.map +1 -0
  136. package/dist/brain/project-kit-inspection.d.ts +28 -0
  137. package/dist/brain/project-kit-inspection.d.ts.map +1 -0
  138. package/dist/brain/project-kit-inspection.js +200 -0
  139. package/dist/brain/project-kit-inspection.js.map +1 -0
  140. package/dist/brain/project-kit-paths.d.ts +13 -0
  141. package/dist/brain/project-kit-paths.d.ts.map +1 -0
  142. package/dist/brain/project-kit-paths.js +141 -0
  143. package/dist/brain/project-kit-paths.js.map +1 -0
  144. package/dist/brain/project-kit.d.ts +51 -0
  145. package/dist/brain/project-kit.d.ts.map +1 -0
  146. package/dist/brain/project-kit.js +319 -0
  147. package/dist/brain/project-kit.js.map +1 -0
  148. package/dist/brain/project-memory.d.ts +38 -0
  149. package/dist/brain/project-memory.d.ts.map +1 -0
  150. package/dist/brain/project-memory.js +76 -0
  151. package/dist/brain/project-memory.js.map +1 -0
  152. package/dist/brain/project-policy-delivery.d.ts +8 -0
  153. package/dist/brain/project-policy-delivery.d.ts.map +1 -0
  154. package/dist/brain/project-policy-delivery.js +38 -0
  155. package/dist/brain/project-policy-delivery.js.map +1 -0
  156. package/dist/brain/project-policy.d.ts +88 -0
  157. package/dist/brain/project-policy.d.ts.map +1 -0
  158. package/dist/brain/project-policy.js +267 -0
  159. package/dist/brain/project-policy.js.map +1 -0
  160. package/dist/brain/project-session-contract.d.ts +180 -0
  161. package/dist/brain/project-session-contract.d.ts.map +1 -0
  162. package/dist/brain/project-session-contract.js +50 -0
  163. package/dist/brain/project-session-contract.js.map +1 -0
  164. package/dist/brain/project-session-mcp.d.ts +145 -0
  165. package/dist/brain/project-session-mcp.d.ts.map +1 -0
  166. package/dist/brain/project-session-mcp.js +58 -0
  167. package/dist/brain/project-session-mcp.js.map +1 -0
  168. package/dist/brain/project-sessions.d.ts +97 -0
  169. package/dist/brain/project-sessions.d.ts.map +1 -0
  170. package/dist/brain/project-sessions.js +223 -0
  171. package/dist/brain/project-sessions.js.map +1 -0
  172. package/dist/brain/project-source-contract.d.ts +109 -0
  173. package/dist/brain/project-source-contract.d.ts.map +1 -0
  174. package/dist/brain/project-source-contract.js +2 -0
  175. package/dist/brain/project-source-contract.js.map +1 -0
  176. package/dist/brain/project-source-intake.d.ts +26 -0
  177. package/dist/brain/project-source-intake.d.ts.map +1 -0
  178. package/dist/brain/project-source-intake.js +457 -0
  179. package/dist/brain/project-source-intake.js.map +1 -0
  180. package/dist/brain/subconscious.d.ts +3 -1
  181. package/dist/brain/subconscious.d.ts.map +1 -1
  182. package/dist/brain/subconscious.js +8 -3
  183. package/dist/brain/subconscious.js.map +1 -1
  184. package/dist/brain/workflow-skills.d.ts +5 -5
  185. package/dist/brain/workflow-skills.d.ts.map +1 -1
  186. package/dist/brain/workflow-skills.js +3 -2
  187. package/dist/brain/workflow-skills.js.map +1 -1
  188. package/dist/cli.js +37 -3
  189. package/dist/cli.js.map +1 -1
  190. package/dist/context-cli.d.ts.map +1 -1
  191. package/dist/context-cli.js +49 -7
  192. package/dist/context-cli.js.map +1 -1
  193. package/dist/curation-cli.d.ts +4 -0
  194. package/dist/curation-cli.d.ts.map +1 -0
  195. package/dist/curation-cli.js +118 -0
  196. package/dist/curation-cli.js.map +1 -0
  197. package/dist/dashboard/brain-hub-actions.d.ts +2 -0
  198. package/dist/dashboard/brain-hub-actions.d.ts.map +1 -0
  199. package/dist/dashboard/brain-hub-actions.js +234 -0
  200. package/dist/dashboard/brain-hub-actions.js.map +1 -0
  201. package/dist/dashboard/brain-hub-agent-dock.d.ts +2 -0
  202. package/dist/dashboard/brain-hub-agent-dock.d.ts.map +1 -0
  203. package/dist/dashboard/brain-hub-agent-dock.js +255 -0
  204. package/dist/dashboard/brain-hub-agent-dock.js.map +1 -0
  205. package/dist/dashboard/brain-hub-brand-icons.d.ts +2 -0
  206. package/dist/dashboard/brain-hub-brand-icons.d.ts.map +1 -0
  207. package/dist/dashboard/brain-hub-brand-icons.js +9 -0
  208. package/dist/dashboard/brain-hub-brand-icons.js.map +1 -0
  209. package/dist/dashboard/brain-hub-client.d.ts +2 -0
  210. package/dist/dashboard/brain-hub-client.d.ts.map +1 -0
  211. package/dist/dashboard/brain-hub-client.js +435 -0
  212. package/dist/dashboard/brain-hub-client.js.map +1 -0
  213. package/dist/dashboard/brain-hub-context.d.ts +2 -0
  214. package/dist/dashboard/brain-hub-context.d.ts.map +1 -0
  215. package/dist/dashboard/brain-hub-context.js +37 -0
  216. package/dist/dashboard/brain-hub-context.js.map +1 -0
  217. package/dist/dashboard/brain-hub-controls.d.ts +2 -0
  218. package/dist/dashboard/brain-hub-controls.d.ts.map +1 -0
  219. package/dist/dashboard/brain-hub-controls.js +63 -0
  220. package/dist/dashboard/brain-hub-controls.js.map +1 -0
  221. package/dist/dashboard/brain-hub-exchanges.d.ts +2 -0
  222. package/dist/dashboard/brain-hub-exchanges.d.ts.map +1 -0
  223. package/dist/dashboard/brain-hub-exchanges.js +82 -0
  224. package/dist/dashboard/brain-hub-exchanges.js.map +1 -0
  225. package/dist/dashboard/brain-hub-graph.d.ts +2 -0
  226. package/dist/dashboard/brain-hub-graph.d.ts.map +1 -0
  227. package/dist/dashboard/brain-hub-graph.js +338 -0
  228. package/dist/dashboard/brain-hub-graph.js.map +1 -0
  229. package/dist/dashboard/brain-hub-html.d.ts +2 -0
  230. package/dist/dashboard/brain-hub-html.d.ts.map +1 -0
  231. package/dist/dashboard/brain-hub-html.js +85 -0
  232. package/dist/dashboard/brain-hub-html.js.map +1 -0
  233. package/dist/dashboard/brain-hub-knowledge.d.ts +2 -0
  234. package/dist/dashboard/brain-hub-knowledge.d.ts.map +1 -0
  235. package/dist/dashboard/brain-hub-knowledge.js +33 -0
  236. package/dist/dashboard/brain-hub-knowledge.js.map +1 -0
  237. package/dist/dashboard/brain-hub-live.d.ts +2 -0
  238. package/dist/dashboard/brain-hub-live.d.ts.map +1 -0
  239. package/dist/dashboard/brain-hub-live.js +151 -0
  240. package/dist/dashboard/brain-hub-live.js.map +1 -0
  241. package/dist/dashboard/brain-hub-managed-skills.d.ts +2 -0
  242. package/dist/dashboard/brain-hub-managed-skills.d.ts.map +1 -0
  243. package/dist/dashboard/brain-hub-managed-skills.js +20 -0
  244. package/dist/dashboard/brain-hub-managed-skills.js.map +1 -0
  245. package/dist/dashboard/brain-hub-native.d.ts +2 -0
  246. package/dist/dashboard/brain-hub-native.d.ts.map +1 -0
  247. package/dist/dashboard/brain-hub-native.js +44 -0
  248. package/dist/dashboard/brain-hub-native.js.map +1 -0
  249. package/dist/dashboard/brain-hub-project-views.d.ts +2 -0
  250. package/dist/dashboard/brain-hub-project-views.d.ts.map +1 -0
  251. package/dist/dashboard/brain-hub-project-views.js +80 -0
  252. package/dist/dashboard/brain-hub-project-views.js.map +1 -0
  253. package/dist/dashboard/brain-hub-sessions.d.ts +2 -0
  254. package/dist/dashboard/brain-hub-sessions.d.ts.map +1 -0
  255. package/dist/dashboard/brain-hub-sessions.js +40 -0
  256. package/dist/dashboard/brain-hub-sessions.js.map +1 -0
  257. package/dist/dashboard/brain-hub-usage.d.ts +2 -0
  258. package/dist/dashboard/brain-hub-usage.d.ts.map +1 -0
  259. package/dist/dashboard/brain-hub-usage.js +28 -0
  260. package/dist/dashboard/brain-hub-usage.js.map +1 -0
  261. package/dist/dashboard/brain-hub-views.d.ts +2 -0
  262. package/dist/dashboard/brain-hub-views.d.ts.map +1 -0
  263. package/dist/dashboard/brain-hub-views.js +155 -0
  264. package/dist/dashboard/brain-hub-views.js.map +1 -0
  265. package/dist/dashboard/demo-workspace.d.ts +11 -0
  266. package/dist/dashboard/demo-workspace.d.ts.map +1 -0
  267. package/dist/dashboard/demo-workspace.js +178 -0
  268. package/dist/dashboard/demo-workspace.js.map +1 -0
  269. package/dist/dashboard/live-workspace-html.d.ts +2 -0
  270. package/dist/dashboard/live-workspace-html.d.ts.map +1 -0
  271. package/dist/dashboard/live-workspace-html.js +1042 -0
  272. package/dist/dashboard/live-workspace-html.js.map +1 -0
  273. package/dist/dashboard/managed-project-skills-api.d.ts +29 -0
  274. package/dist/dashboard/managed-project-skills-api.d.ts.map +1 -0
  275. package/dist/dashboard/managed-project-skills-api.js +28 -0
  276. package/dist/dashboard/managed-project-skills-api.js.map +1 -0
  277. package/dist/dashboard/native-codex-api.d.ts +83 -0
  278. package/dist/dashboard/native-codex-api.d.ts.map +1 -0
  279. package/dist/dashboard/native-codex-api.js +91 -0
  280. package/dist/dashboard/native-codex-api.js.map +1 -0
  281. package/dist/dashboard/project-feedback-html.d.ts +5 -0
  282. package/dist/dashboard/project-feedback-html.d.ts.map +1 -0
  283. package/dist/dashboard/project-feedback-html.js +216 -0
  284. package/dist/dashboard/project-feedback-html.js.map +1 -0
  285. package/dist/dashboard/project-file-watch.d.ts +46 -0
  286. package/dist/dashboard/project-file-watch.d.ts.map +1 -0
  287. package/dist/dashboard/project-file-watch.js +221 -0
  288. package/dist/dashboard/project-file-watch.js.map +1 -0
  289. package/dist/dashboard/project-hub-api.d.ts +5 -0
  290. package/dist/dashboard/project-hub-api.d.ts.map +1 -0
  291. package/dist/dashboard/project-hub-api.js +121 -0
  292. package/dist/dashboard/project-hub-api.js.map +1 -0
  293. package/dist/dashboard/project-kit-html.d.ts +4 -0
  294. package/dist/dashboard/project-kit-html.d.ts.map +1 -0
  295. package/dist/dashboard/project-kit-html.js +359 -0
  296. package/dist/dashboard/project-kit-html.js.map +1 -0
  297. package/dist/dashboard/project-live-stream.d.ts +33 -0
  298. package/dist/dashboard/project-live-stream.d.ts.map +1 -0
  299. package/dist/dashboard/project-live-stream.js +233 -0
  300. package/dist/dashboard/project-live-stream.js.map +1 -0
  301. package/dist/dashboard/project-policy-api.d.ts +37 -0
  302. package/dist/dashboard/project-policy-api.d.ts.map +1 -0
  303. package/dist/dashboard/project-policy-api.js +31 -0
  304. package/dist/dashboard/project-policy-api.js.map +1 -0
  305. package/dist/dashboard/project-session-api.d.ts +28 -0
  306. package/dist/dashboard/project-session-api.d.ts.map +1 -0
  307. package/dist/dashboard/project-session-api.js +84 -0
  308. package/dist/dashboard/project-session-api.js.map +1 -0
  309. package/dist/dashboard/project-source-api.d.ts +11 -0
  310. package/dist/dashboard/project-source-api.d.ts.map +1 -0
  311. package/dist/dashboard/project-source-api.js +67 -0
  312. package/dist/dashboard/project-source-api.js.map +1 -0
  313. package/dist/dashboard/project-workspace.d.ts +16 -0
  314. package/dist/dashboard/project-workspace.d.ts.map +1 -0
  315. package/dist/dashboard/project-workspace.js +124 -0
  316. package/dist/dashboard/project-workspace.js.map +1 -0
  317. package/dist/dashboard/server.d.ts +1 -0
  318. package/dist/dashboard/server.d.ts.map +1 -1
  319. package/dist/dashboard/server.js +99 -42
  320. package/dist/dashboard/server.js.map +1 -1
  321. package/dist/dashboard/v6-dashboard-html.d.ts +1 -1
  322. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -1
  323. package/dist/dashboard/v6-dashboard-html.js +4261 -4309
  324. package/dist/dashboard/v6-dashboard-html.js.map +1 -1
  325. package/dist/dashboard/workspace-api.d.ts +12 -0
  326. package/dist/dashboard/workspace-api.d.ts.map +1 -1
  327. package/dist/dashboard/workspace-api.js +359 -41
  328. package/dist/dashboard/workspace-api.js.map +1 -1
  329. package/dist/dashboard/workspace-html.d.ts.map +1 -1
  330. package/dist/dashboard/workspace-html.js +1118 -135
  331. package/dist/dashboard/workspace-html.js.map +1 -1
  332. package/dist/dashboard/workspace-status.d.ts +53 -0
  333. package/dist/dashboard/workspace-status.d.ts.map +1 -0
  334. package/dist/dashboard/workspace-status.js +23 -0
  335. package/dist/dashboard/workspace-status.js.map +1 -0
  336. package/dist/index.d.ts +16 -0
  337. package/dist/index.d.ts.map +1 -1
  338. package/dist/index.js +13 -0
  339. package/dist/index.js.map +1 -1
  340. package/dist/integration-cli.d.ts +3 -0
  341. package/dist/integration-cli.d.ts.map +1 -0
  342. package/dist/integration-cli.js +16 -0
  343. package/dist/integration-cli.js.map +1 -0
  344. package/dist/project-cli.d.ts +3 -0
  345. package/dist/project-cli.d.ts.map +1 -0
  346. package/dist/project-cli.js +100 -0
  347. package/dist/project-cli.js.map +1 -0
  348. package/dist/types.d.ts +8 -1
  349. package/dist/types.d.ts.map +1 -1
  350. package/docs/BRAND_ASSETS.md +36 -0
  351. package/docs/COMPARISON.md +22 -0
  352. package/docs/COMPONENTS.md +66 -0
  353. package/docs/CONTEXT_LAB.md +79 -0
  354. package/docs/FEATURES_AND_LIMITS.md +29 -0
  355. package/docs/INTEGRATIONS.md +70 -0
  356. package/docs/LEARNING.md +46 -0
  357. package/docs/PROJECT_KIT.md +98 -0
  358. package/docs/QUICKSTART.md +62 -0
  359. package/docs/README.md +36 -0
  360. package/docs/ROADMAP-v7.md +147 -0
  361. package/docs/SESSIONS.md +77 -0
  362. package/docs/SHARING.md +13 -0
  363. package/docs/SHOWCASE.md +87 -0
  364. package/docs/SOURCE_INTAKE.md +33 -0
  365. package/docs/STATS.md +21 -0
  366. package/docs/TROUBLESHOOTING.md +42 -0
  367. package/docs/UPGRADE_PLAN_v7.0.0.md +203 -0
  368. package/docs/VIRAL-PLAYBOOK.md +259 -0
  369. package/docs/VISUAL_GUIDE_v7.1.4.md +70 -0
  370. package/docs/VISUAL_GUIDE_v7.22.0.md +73 -0
  371. package/docs/WORKFLOW_INTEGRATION.md +21 -1
  372. package/docs/WORKSPACE.md +63 -70
  373. package/docs/assets/7.1.4-collaboration-design-preview.png +0 -0
  374. package/docs/assets/7.1.4-comparison.png +0 -0
  375. package/docs/assets/7.1.4-context-lab.png +0 -0
  376. package/docs/assets/7.1.4-control-room-dense-preview.png +0 -0
  377. package/docs/assets/7.1.4-control-room-focus-preview.png +0 -0
  378. package/docs/assets/7.1.4-features.png +0 -0
  379. package/docs/assets/7.1.4-graph.png +0 -0
  380. package/docs/assets/7.1.4-hub-control-room.png +0 -0
  381. package/docs/assets/7.1.4-hub-empty.png +0 -0
  382. package/docs/assets/7.1.4-hub-knowledge.png +0 -0
  383. package/docs/assets/7.1.4-hub-learning.png +0 -0
  384. package/docs/assets/7.1.4-hub-mobile.png +0 -0
  385. package/docs/assets/7.1.4-hub-public-docs-source.png +0 -0
  386. package/docs/assets/7.1.4-hub-public-docs.gif +0 -0
  387. package/docs/assets/7.1.4-hub-public-docs.png +0 -0
  388. package/docs/assets/7.1.4-hub-setup.png +0 -0
  389. package/docs/assets/7.1.4-hub-walkthrough.gif +0 -0
  390. package/docs/assets/7.1.4-integrations.png +0 -0
  391. package/docs/assets/7.1.4-knowledge-design-preview.png +0 -0
  392. package/docs/assets/7.1.4-learning-design-preview.png +0 -0
  393. package/docs/assets/7.1.4-learning.png +0 -0
  394. package/docs/assets/7.1.4-live.png +0 -0
  395. package/docs/assets/7.1.4-memory-review.png +0 -0
  396. package/docs/assets/7.1.4-mobile.png +0 -0
  397. package/docs/assets/7.1.4-models-design-preview.png +0 -0
  398. package/docs/assets/7.1.4-outcome-ranking.png +0 -0
  399. package/docs/assets/7.1.4-overview.png +0 -0
  400. package/docs/assets/7.1.4-project-kit.png +0 -0
  401. package/docs/assets/7.1.4-project-skill-preview.png +0 -0
  402. package/docs/assets/7.1.4-replay.png +0 -0
  403. package/docs/assets/7.1.4-setup-design-preview.png +0 -0
  404. package/docs/assets/7.1.4-usage-design-preview.png +0 -0
  405. package/docs/assets/7.22.0-agent-dock-mobile.png +0 -0
  406. package/docs/assets/7.22.0-agent-dock.gif +0 -0
  407. package/docs/assets/7.22.0-agent-dock.png +0 -0
  408. package/docs/assets/7.22.0-hub-exchange.png +0 -0
  409. package/docs/assets/7.22.0-hub-exchanges.gif +0 -0
  410. package/docs/assets/7.22.0-hub-graph.png +0 -0
  411. package/docs/assets/7.22.0-hub-mobile-empty.png +0 -0
  412. package/docs/assets/7.22.0-managed-skills.png +0 -0
  413. package/docs/assets/7.22.0-plain-evidence.png +0 -0
  414. package/docs/assets/7.22.0-project-controls.png +0 -0
  415. package/docs/assets/7.22.0-sessions.png +0 -0
  416. package/docs/assets/7.22.0-teach-brain.png +0 -0
  417. package/docs/assets/context-v7.1.3.png +0 -0
  418. package/docs/assets/features-v7.1.3.png +0 -0
  419. package/docs/assets/graph-v7.1.3.png +0 -0
  420. package/docs/assets/integrations-v7.1.3.png +0 -0
  421. package/docs/assets/live-v7.1.3.png +0 -0
  422. package/docs/assets/live-v7.1.4.gif +0 -0
  423. package/docs/assets/memory-detail-v7.1.3.png +0 -0
  424. package/docs/assets/overview-v7.1.3.png +0 -0
  425. package/docs/evaluation/CONTEXT_EVALUATION_v7.1.4.json +1818 -0
  426. package/docs/evaluation/CONTEXT_EVALUATION_v7.1.4.md +36 -0
  427. package/docs/launch/COMPONENT_MAP_v7.1.4.md +307 -0
  428. package/docs/launch/PROJECT_KIT_PLAN_v7.1.4.md +110 -0
  429. package/docs/launch/PROJECT_LEARNING_PLAN_v7.1.4.md +63 -0
  430. package/docs/launch/RELEASE_ACCEPTANCE_v7.22.0.md +48 -0
  431. package/docs/launch/RELEASE_NOTES_v7.1.3.md +40 -0
  432. package/docs/launch/RELEASE_NOTES_v7.1.4.md +30 -0
  433. package/docs/launch/RELEASE_NOTES_v7.22.0.md +53 -0
  434. package/docs/launch/RESEARCH_AND_PLAN_v7.1.4.md +255 -0
  435. package/docs/launch/RESEARCH_AND_PLAN_v7.22.0.md +672 -0
  436. package/package.json +135 -111
  437. package/skills/shadow-research/SKILL.md +2 -0
  438. package/skills/shadow-workflow/SKILL.md +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-workspace-html.js","sourceRoot":"","sources":["../../src/dashboard/live-workspace-html.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+gCrC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { IncomingMessage } from 'node:http';
2
+ export declare function isManagedSkillsRoute(route: string): boolean;
3
+ export declare function managedSkillsRequest(req: IncomingMessage, route: string, root: string, body: () => Promise<Record<string, unknown>>): Promise<{
4
+ projectId: string;
5
+ skills: import("../brain/managed-project-skills.js").ManagedSkill[];
6
+ invalidReceipts: number;
7
+ } | {
8
+ projectId: string;
9
+ skill: import("../brain/managed-project-skills.js").ManagedSkill;
10
+ action: import("../brain/managed-project-skills.js").ManagedSkillAction;
11
+ planHash: string;
12
+ exactPaths: string[];
13
+ expectedHashes: {
14
+ receipt: string;
15
+ installed: string | null;
16
+ disabled: string | null;
17
+ };
18
+ conflicts: string[];
19
+ effects: string[];
20
+ hostRefreshNote: string;
21
+ } | {
22
+ projectId: string;
23
+ id: string;
24
+ finalState: string;
25
+ changedPaths: string[];
26
+ preservedPaths: string[];
27
+ hostRefreshNote: string;
28
+ }>;
29
+ //# sourceMappingURL=managed-project-skills-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-project-skills-api.d.ts","sourceRoot":"","sources":["../../src/dashboard/managed-project-skills-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAIjD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAA8E;AAE1I,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;GAmBzI"}
@@ -0,0 +1,28 @@
1
+ import { applyManagedProjectSkill, listManagedProjectSkills, ManagedSkillError, previewManagedProjectSkill } from '../brain/managed-project-skills.js';
2
+ import { ProjectKitError } from '../brain/project-kit-paths.js';
3
+ export function isManagedSkillsRoute(route) { return route === 'managed-skills' || route.startsWith('managed-skills/'); }
4
+ export async function managedSkillsRequest(req, route, root, body) {
5
+ try {
6
+ if (req.method === 'GET' && route === 'managed-skills')
7
+ return listManagedProjectSkills(root);
8
+ if (req.method !== 'POST' || (route !== 'managed-skills/preview' && route !== 'managed-skills/apply')) {
9
+ throw new ManagedSkillError('MANAGED_SKILL_ROUTE', 'Use GET for inventory and POST for preview or apply.', 405);
10
+ }
11
+ const origin = req.headers.origin;
12
+ if ((origin && origin !== 'http://' + req.headers.host && origin !== 'https://' + req.headers.host) || req.headers['sec-fetch-site'] === 'cross-site') {
13
+ throw new ManagedSkillError('MANAGED_SKILL_ORIGIN', 'Cross-origin changes are not accepted.', 403);
14
+ }
15
+ const input = await body();
16
+ return route.endsWith('/preview') ? previewManagedProjectSkill(root, input) : applyManagedProjectSkill(root, input);
17
+ }
18
+ catch (error) {
19
+ if (error instanceof ManagedSkillError || error instanceof TypeError || error instanceof RangeError)
20
+ throw error;
21
+ if (error instanceof ProjectKitError)
22
+ throw new ManagedSkillError(error.code, error.message, error.code === 'PROJECT_KIT_WRITE_FAILED' ? 503 : 409);
23
+ if (error.code === 'EEXIST')
24
+ throw new ManagedSkillError('MANAGED_SKILL_CONFLICT', 'A managed destination appeared during application. Refresh and review it.', 409);
25
+ throw new ManagedSkillError('MANAGED_SKILL_STORAGE', 'Managed skill storage could not be opened. Review the current paths and try again.', 503);
26
+ }
27
+ }
28
+ //# sourceMappingURL=managed-project-skills-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-project-skills-api.js","sourceRoot":"","sources":["../../src/dashboard/managed-project-skills-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AACvJ,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,UAAU,oBAAoB,CAAC,KAAa,IAAa,OAAO,KAAK,KAAK,gBAAgB,IAAI,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAE1I,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAoB,EAAE,KAAa,EAAE,IAAY,EAAE,IAA4C;IACxI,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,KAAK,gBAAgB;YAAE,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC9F,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,wBAAwB,IAAI,KAAK,KAAK,sBAAsB,CAAC,EAAE,CAAC;YACtG,MAAM,IAAI,iBAAiB,CAAC,qBAAqB,EAAE,sDAAsD,EAAE,GAAG,CAAC,CAAC;QAClH,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,KAAK,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,YAAY,EAAE,CAAC;YACtJ,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,EAAE,wCAAwC,EAAE,GAAG,CAAC,CAAC;QACrG,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACtH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,iBAAiB,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,YAAY,UAAU;YAAE,MAAM,KAAK,CAAC;QACjH,IAAI,KAAK,YAAY,eAAe;YAAE,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EACzF,KAAK,CAAC,IAAI,KAAK,0BAA0B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzD,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,iBAAiB,CAAC,wBAAwB,EAAE,2EAA2E,EAAE,GAAG,CAAC,CAAC;QAChM,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,EAAE,oFAAoF,EAAE,GAAG,CAAC,CAAC;IAClJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,83 @@
1
+ import type { IncomingMessage } from 'node:http';
2
+ import type { GlobalBrain } from '../brain/global-brain.js';
3
+ import { type NativeCodexFactory } from '../brain/native-codex.js';
4
+ export declare function isNativeCodexRoute(route: string): boolean;
5
+ export declare function createNativeCodexApi(factory?: NativeCodexFactory): {
6
+ request: (req: IncomingMessage, route: string, url: URL, directory: string, brain: GlobalBrain, readBody: () => Promise<Record<string, unknown>>) => Promise<{
7
+ connected: boolean;
8
+ connectedAt: string | null;
9
+ expiresAt: string | null;
10
+ scope: string;
11
+ note: string;
12
+ } | {
13
+ connected: boolean;
14
+ observedAt: string;
15
+ threads: import("../brain/native-codex.js").NativeCodexThread[];
16
+ nextCursor: string | null;
17
+ } | {
18
+ thread: import("../brain/native-codex.js").NativeCodexThread;
19
+ messages: import("../brain/native-codex.js").NativeCodexMessage[];
20
+ omitted: number;
21
+ nextCursor: string | null;
22
+ pageCoverage: {
23
+ kind: "page";
24
+ direction: "newest-first";
25
+ hasEarlier: boolean;
26
+ hasLater: boolean;
27
+ cursorSha256: string | null;
28
+ omittedInPage: number;
29
+ };
30
+ sha256: string;
31
+ observedAt: string;
32
+ } | {
33
+ nextCursor: string | null;
34
+ partial: boolean;
35
+ projectId: string;
36
+ session: import("../brain/project-session-contract.js").SessionSummary;
37
+ messages: import("../brain/project-session-contract.js").SessionMessage[];
38
+ messageCount: number;
39
+ nextBefore: string | null;
40
+ checkpoints: any[];
41
+ handoff: import("../brain/project-session-contract.js").SessionCheckpoint | null;
42
+ }>;
43
+ close(directory: string): void;
44
+ };
45
+ export declare const nativeCodexRequest: (req: IncomingMessage, route: string, url: URL, directory: string, brain: GlobalBrain, readBody: () => Promise<Record<string, unknown>>) => Promise<{
46
+ connected: boolean;
47
+ connectedAt: string | null;
48
+ expiresAt: string | null;
49
+ scope: string;
50
+ note: string;
51
+ } | {
52
+ connected: boolean;
53
+ observedAt: string;
54
+ threads: import("../brain/native-codex.js").NativeCodexThread[];
55
+ nextCursor: string | null;
56
+ } | {
57
+ thread: import("../brain/native-codex.js").NativeCodexThread;
58
+ messages: import("../brain/native-codex.js").NativeCodexMessage[];
59
+ omitted: number;
60
+ nextCursor: string | null;
61
+ pageCoverage: {
62
+ kind: "page";
63
+ direction: "newest-first";
64
+ hasEarlier: boolean;
65
+ hasLater: boolean;
66
+ cursorSha256: string | null;
67
+ omittedInPage: number;
68
+ };
69
+ sha256: string;
70
+ observedAt: string;
71
+ } | {
72
+ nextCursor: string | null;
73
+ partial: boolean;
74
+ projectId: string;
75
+ session: import("../brain/project-session-contract.js").SessionSummary;
76
+ messages: import("../brain/project-session-contract.js").SessionMessage[];
77
+ messageCount: number;
78
+ nextBefore: string | null;
79
+ checkpoints: any[];
80
+ handoff: import("../brain/project-session-contract.js").SessionCheckpoint | null;
81
+ }>;
82
+ export declare const closeNativeCodex: (directory: string) => void;
83
+ //# sourceMappingURL=native-codex-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-codex-api.d.ts","sourceRoot":"","sources":["../../src/dashboard/native-codex-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAA2C,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG5G,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAA8E;AACxI,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,kBAAkB;mBAkBnC,eAAe,SAAS,MAAM,OAAO,GAAG,aAAa,MAAM,SAAS,WAAW,YAAY,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA2B1H,MAAM;EAU1C;AAED,eAAO,MAAM,kBAAkB,QAvCD,eAAe,SAAS,MAAM,OAAO,GAAG,aAAa,MAAM,SAAS,WAAW,YAAY,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuClH,CAAC;AAC9C,eAAO,MAAM,gBAAgB,cAbQ,MAAM,SAaF,CAAC"}
@@ -0,0 +1,91 @@
1
+ import * as path from 'node:path';
2
+ import { requireProjectStore } from '../brain/project-memory.js';
3
+ import { projectRoot } from '../brain/project-kit-paths.js';
4
+ import { NativeCodexConnection, NativeCodexError } from '../brain/native-codex.js';
5
+ import { ProjectSessions } from '../brain/project-sessions.js';
6
+ export function isNativeCodexRoute(route) { return route === 'sessions/codex' || route.startsWith('sessions/codex/'); }
7
+ export function createNativeCodexApi(factory) {
8
+ const connections = new Map();
9
+ // Remember only spellings already validated for this project. This also permits
10
+ // shutdown after a project directory has been removed, without guessing paths.
11
+ const aliases = new Map();
12
+ const pathKey = (value) => {
13
+ const resolved = path.resolve(value);
14
+ return process.platform === 'win32' ? resolved.toLowerCase() : resolved;
15
+ };
16
+ function service(directory, brain) {
17
+ const local = requireProjectStore(directory, brain);
18
+ const key = pathKey(local.root);
19
+ let connection = connections.get(key);
20
+ if (!connection) {
21
+ connection = new NativeCodexConnection(local.root, factory);
22
+ connections.set(key, connection);
23
+ }
24
+ aliases.set(key, key);
25
+ aliases.set(pathKey(directory), key);
26
+ return { local, connection };
27
+ }
28
+ async function request(req, route, url, directory, brain, readBody) {
29
+ if ((req.headers.origin && req.headers.origin !== 'http://' + req.headers.host && req.headers.origin !== 'https://' + req.headers.host) || req.headers['sec-fetch-site'] === 'cross-site')
30
+ throw new NativeCodexError('CODEX_ORIGIN', 'Cross-origin connector requests are not accepted.', 403);
31
+ const { local, connection } = service(directory, brain);
32
+ const fail = () => { throw new NativeCodexError('CODEX_ROUTE', 'Unsupported Codex connector request.', 404); };
33
+ const match = /^sessions\/codex\/threads\/([A-Za-z0-9_-]{1,128})(?:\/(import))?$/u.exec(route);
34
+ if (req.method === 'GET') {
35
+ if (route === 'sessions/codex/status')
36
+ return connection.status();
37
+ if (route === 'sessions/codex/threads') {
38
+ const archived = url.searchParams.get('archived') ?? 'false';
39
+ if (!['true', 'false'].includes(archived))
40
+ throw new NativeCodexError('CODEX_INVALID', 'Choose current or archived threads.');
41
+ return connection.list(archived === 'true', url.searchParams.get('cursor'));
42
+ }
43
+ if (match && !match[2])
44
+ return connection.read(match[1], url.searchParams.get('cursor'));
45
+ return fail();
46
+ }
47
+ if (req.method !== 'POST')
48
+ return fail();
49
+ const body = await readBody();
50
+ if (route === 'sessions/codex/connect') {
51
+ if (Object.keys(body).length)
52
+ throw new NativeCodexError('CODEX_INVALID', 'Connect accepts no arguments.');
53
+ return connection.connect();
54
+ }
55
+ if (route === 'sessions/codex/disconnect') {
56
+ if (Object.keys(body).length)
57
+ throw new NativeCodexError('CODEX_INVALID', 'Disconnect accepts no arguments.');
58
+ connection.close();
59
+ return connection.status();
60
+ }
61
+ if (match?.[2] === 'import') {
62
+ if (Object.keys(body).some(key => !['key', 'cursor', 'sha256'].includes(key)) || typeof body.key !== 'string' || !/^[A-Za-z0-9_-]{12,100}$/u.test(body.key) || typeof body.sha256 !== 'string' || !/^[0-9a-f]{64}$/u.test(body.sha256) || (body.cursor !== undefined && typeof body.cursor !== 'string'))
63
+ throw new NativeCodexError('CODEX_INVALID', 'Use the reviewed page fingerprint, an operation key and an optional page cursor.');
64
+ const { snapshot, nextCursor } = await connection.snapshot(match[1], body.cursor ?? null);
65
+ if (snapshot.sha256 !== body.sha256)
66
+ throw new NativeCodexError('CODEX_PAGE_CHANGED', 'This conversation page changed. Review it again before importing.', 409);
67
+ return { ...new ProjectSessions(local.root, brain).importNative(snapshot, body.key), nextCursor, partial: !!nextCursor || !!body.cursor || snapshot.omitted > 0 };
68
+ }
69
+ return fail();
70
+ }
71
+ return { request, close(directory) {
72
+ let key = aliases.get(pathKey(directory));
73
+ if (!key) {
74
+ try {
75
+ key = aliases.get(pathKey(projectRoot(directory)));
76
+ }
77
+ catch { /* An unknown or removed path cannot be resolved safely. */ }
78
+ }
79
+ if (!key)
80
+ return;
81
+ connections.get(key)?.close();
82
+ connections.delete(key);
83
+ for (const [alias, target] of aliases)
84
+ if (target === key)
85
+ aliases.delete(alias);
86
+ } };
87
+ }
88
+ const api = createNativeCodexApi();
89
+ export const nativeCodexRequest = api.request;
90
+ export const closeNativeCodex = api.close;
91
+ //# sourceMappingURL=native-codex-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-codex-api.js","sourceRoot":"","sources":["../../src/dashboard/native-codex-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Project-local task outcomes share the workspace memory browser and API helpers. */
2
+ export declare const PROJECT_FEEDBACK_STYLE: string;
3
+ export declare const PROJECT_FEEDBACK_MARKUP: string;
4
+ export declare const PROJECT_FEEDBACK_SCRIPT: string;
5
+ //# sourceMappingURL=project-feedback-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-feedback-html.d.ts","sourceRoot":"","sources":["../../src/dashboard/project-feedback-html.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,eAAO,MAAM,sBAAsB,QAkBlC,CAAC;AAEF,eAAO,MAAM,uBAAuB,QA6BnC,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAoKnC,CAAC"}
@@ -0,0 +1,216 @@
1
+ /** Project-local task outcomes share the workspace memory browser and API helpers. */
2
+ export const PROJECT_FEEDBACK_STYLE = String.raw `
3
+ .kit-outcomes { scroll-margin-top: 56px; }
4
+ .outcomes-layout { display: grid; grid-template-columns: minmax(280px,.9fr) minmax(0,1.1fr); align-items: start; }
5
+ .outcome-editor { display: grid; gap: 10px; }
6
+ .outcome-history { border-left: 1px solid var(--line); min-width: 0; }
7
+ .outcome-history .panel-head { background: var(--inset); }
8
+ .outcome-list { max-height: 560px; overflow: auto; }
9
+ .outcome-row { display: grid; gap: 7px; padding: 11px 15px; }
10
+ .outcome-row h4 { margin: 0; font-size: .93rem; overflow-wrap: anywhere; }
11
+ .outcome-row .button { min-height: 32px; }
12
+ .outcome-search { display: grid; grid-template-columns: minmax(0,1fr) auto; align-items: end; gap: 6px; }
13
+ .outcome-reason { white-space: pre-wrap; }
14
+ .kit-identity .kit-outcomes-jump { margin-top: 8px; color: var(--signal); }
15
+ .kit-identity .kit-outcomes-jump:hover { background: #254350; }
16
+ @media (max-width: 985px) {
17
+ .outcomes-layout { grid-template-columns: minmax(0,1fr); }
18
+ .outcome-history { border-left: 0; border-top: 1px solid var(--line); }
19
+ }
20
+ `;
21
+ export const PROJECT_FEEDBACK_MARKUP = String.raw `
22
+ <section class="panel kit-outcomes" aria-labelledby="kit-outcomes-heading" id="kit-outcomes">
23
+ <div class="panel-head">
24
+ <div><h2 id="kit-outcomes-heading" tabindex="-1">Memory outcomes</h2><p class="small muted" id="kit-outcomes-policy">Adaptive retrieval can use reported outcomes when a future task matches.</p></div>
25
+ <button class="button switch" type="button" role="switch" id="kit-feedback-enable" aria-checked="false" aria-label="Use task outcomes in Adaptive retrieval" aria-describedby="kit-outcomes-policy" disabled><span id="kit-feedback-enabled-label" aria-hidden="true">Loading</span><span class="switch-track" aria-hidden="true"></span></button>
26
+ </div>
27
+ <div class="outcomes-layout">
28
+ <div class="panel-body outcome-editor">
29
+ <form id="kit-outcome-search-form" class="outcome-search" role="search" aria-label="Find a memory to rate">
30
+ <label class="label" for="kit-outcome-query">Find project memory<input type="search" maxlength="500" id="kit-outcome-query" placeholder="Search by title or keyword"></label>
31
+ <button class="button" id="kit-outcome-search" type="submit"><span data-icon="search"></span>Find</button>
32
+ </form>
33
+ <p class="small muted" id="kit-outcome-memory-status" role="status"></p>
34
+ <form id="kit-outcome-form" class="kit-form">
35
+ <label class="label" for="kit-outcome-memory">Memory<select id="kit-outcome-memory" required><option value="">Choose a memory</option></select></label>
36
+ <label class="label" for="kit-outcome-task">Task<textarea id="kit-outcome-task" rows="2" maxlength="1000" required placeholder="What were you working on?"></textarea></label>
37
+ <label class="label" for="kit-outcome-rating">Outcome<select id="kit-outcome-rating" required><option value="">Choose an outcome</option><option value="useful">Useful</option><option value="not-useful">Not useful</option><option value="incorrect">Incorrect</option></select></label>
38
+ <label class="label" for="kit-outcome-reason">Reason<textarea id="kit-outcome-reason" rows="3" maxlength="600" required placeholder="How did this memory affect the task?"></textarea></label>
39
+ <label class="label" for="kit-outcome-evidence">Recorded references <span class="small muted">Optional. Up to 3, one per line.</span><textarea id="kit-outcome-evidence" rows="2" maxlength="542" placeholder="tests/checkout-retry.test.ts"></textarea></label>
40
+ <button class="button primary" id="kit-outcome-save" type="submit" disabled>Save reported outcome</button>
41
+ <div id="kit-outcome-status" class="kit-form-status" role="status"></div>
42
+ </form>
43
+ </div>
44
+ <div class="outcome-history">
45
+ <div class="panel-head"><h3>Reported outcomes</h3><span class="small muted" id="kit-outcome-count"></span></div>
46
+ <div id="kit-outcome-records" aria-busy="true"></div>
47
+ </div>
48
+ </div>
49
+ </section>
50
+ `;
51
+ export const PROJECT_FEEDBACK_SCRIPT = String.raw `
52
+ const outcomes = { snapshot: null, saving: false, loading: false, memories: [], memoryRequest: 0, project: '' };
53
+ const outcomeRatings = { useful: ['ok', 'Useful'], 'not-useful': ['warn', 'Not useful'], incorrect: ['error', 'Incorrect'] };
54
+
55
+ function syncOutcomeControls() {
56
+ const current = outcomes.snapshot;
57
+ const toggle = $('kit-feedback-enable');
58
+ toggle.disabled = !current || outcomes.saving;
59
+ toggle.setAttribute('aria-checked', String(current?.enabled === true));
60
+ $('kit-feedback-enabled-label').textContent = !current ? 'Unavailable' : current.enabled ? 'On' : 'Off';
61
+ $('kit-outcome-save').disabled = !current || outcomes.saving || !$('kit-outcome-memory').value;
62
+ $('kit-outcomes-policy').textContent = current?.enabled === false ?
63
+ 'Learning is off. Reports remain available for review.' : 'Adaptive retrieval can use reported outcomes when a future task matches.';
64
+ $('kit-outcome-records').querySelectorAll('[data-outcome-remove]').forEach((button) => { button.disabled = outcomes.saving || !current; });
65
+ }
66
+
67
+ function renderOutcomeHistory() {
68
+ const current = outcomes.snapshot;
69
+ const target = $('kit-outcome-records');
70
+ if (!current) return;
71
+ const records = [...list(current.records)].sort((a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt));
72
+ $('kit-outcome-count').textContent = countLabel(records.length, 'report');
73
+ const titles = new Map(outcomes.memories.map((memory) => [memory.id, memory.title]));
74
+ target.innerHTML = records.length ? '<ul class="list outcome-list" aria-label="Task outcomes">' + records.map((record) => {
75
+ const [tone, label] = Object.hasOwn(outcomeRatings, record.rating) ? outcomeRatings[record.rating] : ['', 'Reported'];
76
+ return '<li class="outcome-row"><h4>' + esc(record.task) + '</h4><div class="form-actions">' +
77
+ tags([['check-' + tone, label], ['memory', record.reporter === 'agent' ? 'Agent report' : 'User report']]) + dateMarkup(record.updatedAt, true) + '</div>' +
78
+ '<p class="small outcome-reason">' + esc(record.reason) + '</p>' + sourceMarkup(record.evidence) + '<div class="form-actions">' +
79
+ memoryLink(record.memoryId, record.projectId, titles.get(record.memoryId) || 'Open rated memory') +
80
+ '<button type="button" class="button quiet" data-outcome-remove="' + esc(record.id) + '">Remove report</button></div></li>';
81
+ }).join('') + '</ul>' : blank('activity', 'No task outcomes yet', 'Record whether a project memory helped with a specific task.');
82
+ syncOutcomeControls();
83
+ }
84
+
85
+ async function loadProjectFeedback() {
86
+ if (outcomes.loading || outcomes.saving || state.projectKit?.available !== true) return;
87
+ const target = $('kit-outcome-records');
88
+ outcomes.loading = true;
89
+ setBusy(target, true);
90
+ if (!outcomes.snapshot) target.innerHTML = skeleton('Reading reported outcomes…');
91
+ try {
92
+ const snapshot = await api('project-feedback');
93
+ if (!Number.isSafeInteger(snapshot.revision) || typeof snapshot.enabled !== 'boolean' || !Array.isArray(snapshot.records)) {
94
+ throw new Error('The server returned unreadable task outcomes.');
95
+ }
96
+ if (!outcomes.snapshot || snapshot.revision >= outcomes.snapshot.revision) outcomes.snapshot = snapshot;
97
+ renderOutcomeHistory();
98
+ } catch (error) {
99
+ outcomes.snapshot = null;
100
+ target.innerHTML = errorMarkup(error.message, 'kit-feedback');
101
+ $('kit-outcome-count').textContent = '';
102
+ } finally {
103
+ outcomes.loading = false;
104
+ setBusy(target, false);
105
+ syncOutcomeControls();
106
+ }
107
+ }
108
+
109
+ async function loadFeedbackMemories(focusMemory = '') {
110
+ const info = state.projectKit;
111
+ if (info?.available !== true) return;
112
+ const request = ++outcomes.memoryRequest;
113
+ const select = $('kit-outcome-memory');
114
+ const status = $('kit-outcome-memory-status');
115
+ const search = $('kit-outcome-search');
116
+ const q = $('kit-outcome-query').value.trim();
117
+ const selected = focusMemory || select.value;
118
+ status.textContent = 'Finding project memories…';
119
+ search.disabled = true;
120
+ try {
121
+ const result = await api(queryPath('memories', { project: info.projectId, q, limit: 25 }));
122
+ if (request !== outcomes.memoryRequest) return;
123
+ const memories = list(result.items).filter((item) => item.project === info.projectId);
124
+ if (focusMemory && !memories.some((item) => item.id === focusMemory)) {
125
+ try {
126
+ const detail = await api(queryPath('memory', { project: info.projectId, id: focusMemory }));
127
+ if (detail.memory?.project === info.projectId) memories.unshift(detail.memory);
128
+ } catch { /* The selected memory may no longer be available. */ }
129
+ }
130
+ if (request !== outcomes.memoryRequest) return;
131
+ outcomes.memories = memories;
132
+ outcomes.project = info.projectId;
133
+ optionSet('kit-outcome-memory', 'Choose a memory', memories.map((item) => ({ id: item.id, name: item.title || item.id })), selected);
134
+ status.textContent = memories.length ? countLabel(memories.length, 'memory', 'memories') + ' shown. Search to narrow the list.' :
135
+ q ? 'No memories matched this search.' : 'Save project knowledge to record a task outcome.';
136
+ if (focusMemory && !select.value) status.textContent = 'The requested memory is unavailable in this project.';
137
+ renderOutcomeHistory();
138
+ } catch (error) {
139
+ if (request === outcomes.memoryRequest) status.textContent = error.message;
140
+ } finally {
141
+ if (request === outcomes.memoryRequest) {
142
+ search.disabled = false;
143
+ syncOutcomeControls();
144
+ }
145
+ }
146
+ }
147
+
148
+ function openOutcomeEditor() {
149
+ $('kit-outcomes-heading').focus();
150
+ }
151
+
152
+ async function updateProjectFeedback(command) {
153
+ if (!outcomes.snapshot || outcomes.saving) return false;
154
+ const status = $('kit-outcome-status');
155
+ const before = outcomes.snapshot;
156
+ outcomes.saving = true;
157
+ syncOutcomeControls();
158
+ status.textContent = 'Saving task outcomes…';
159
+ let conflict = false;
160
+ try {
161
+ const result = await api('project-feedback', { body: { ...command, expectedRevision: before.revision } });
162
+ const snapshot = result.snapshot || result;
163
+ if (!Number.isSafeInteger(snapshot.revision) || typeof snapshot.enabled !== 'boolean' || !Array.isArray(snapshot.records)) {
164
+ throw new Error('The server returned unreadable task outcomes.');
165
+ }
166
+ outcomes.snapshot = snapshot;
167
+ state.context.dirty = !!state.context.pack || state.context.pending;
168
+ if (state.context.pack && !state.context.pending) renderContext();
169
+ renderOutcomeHistory();
170
+ status.textContent = command.kind === 'record' ? 'Reported outcome saved.' : command.kind === 'remove' ? 'Report removed.' :
171
+ command.enabled ? 'Outcome influence enabled.' : 'Outcome influence paused.';
172
+ return true;
173
+ } catch (error) {
174
+ conflict = error.status === 409;
175
+ status.innerHTML = errorMarkup(error.message);
176
+ return false;
177
+ } finally {
178
+ outcomes.saving = false;
179
+ syncOutcomeControls();
180
+ if (conflict) void loadProjectFeedback();
181
+ }
182
+ }
183
+
184
+ async function saveOutcome() {
185
+ const memoryId = $('kit-outcome-memory').value;
186
+ const task = $('kit-outcome-task').value.trim();
187
+ const rating = $('kit-outcome-rating').value;
188
+ const reason = $('kit-outcome-reason').value.trim();
189
+ const referenceInput = $('kit-outcome-evidence').value;
190
+ const evidence = referenceInput.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
191
+ if (!memoryId || !task || !reason || !Object.hasOwn(outcomeRatings, rating)) {
192
+ $('kit-outcome-status').innerHTML = errorMarkup('Choose a memory and provide the task, outcome, and reason.');
193
+ return;
194
+ }
195
+ if (evidence.length > 3 || evidence.some((line) => line.length > 180)) {
196
+ $('kit-outcome-status').innerHTML = errorMarkup('Enter up to three references with at most 180 characters each.');
197
+ return;
198
+ }
199
+ if (await updateProjectFeedback({ kind: 'record', memoryId, task, rating, reason, ...(evidence.length ? { evidence } : {}) })) {
200
+ if ($('kit-outcome-reason').value.trim() === reason) $('kit-outcome-reason').value = '';
201
+ if ($('kit-outcome-evidence').value === referenceInput) $('kit-outcome-evidence').value = '';
202
+ }
203
+ }
204
+
205
+ $('kit-feedback-enable').addEventListener('click', () => {
206
+ if (outcomes.snapshot) void updateProjectFeedback({ kind: 'enable', enabled: !outcomes.snapshot.enabled });
207
+ });
208
+ $('kit-outcome-search-form').addEventListener('submit', (event) => { event.preventDefault(); void loadFeedbackMemories(); });
209
+ $('kit-outcome-form').addEventListener('submit', (event) => { event.preventDefault(); void saveOutcome(); });
210
+ $('kit-outcome-memory').addEventListener('change', syncOutcomeControls);
211
+ $('kit-outcome-records').addEventListener('click', (event) => {
212
+ const button = event.target.closest('[data-outcome-remove]');
213
+ if (button) void updateProjectFeedback({ kind: 'remove', id: button.dataset.outcomeRemove });
214
+ });
215
+ `;
216
+ //# sourceMappingURL=project-feedback-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-feedback-html.js","sourceRoot":"","sources":["../../src/dashboard/project-feedback-html.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;CAkB/C,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BhD,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoKhD,CAAC"}
@@ -0,0 +1,46 @@
1
+ export interface ObservedProjectFile {
2
+ path: string;
3
+ operation: 'changed' | 'entry';
4
+ count: number;
5
+ exists: boolean;
6
+ entry: 'file' | 'directory' | 'unknown';
7
+ }
8
+ export interface ProjectWatchSummary {
9
+ status: 'off' | 'scanning' | 'watching' | 'limited';
10
+ directories: number;
11
+ inventoryCount: number;
12
+ inventoryLimited: boolean;
13
+ }
14
+ export declare class ProjectFileWatch {
15
+ private readonly root;
16
+ private readonly report;
17
+ private readonly changed;
18
+ private readonly watchers;
19
+ private readonly known;
20
+ private readonly pending;
21
+ private timer?;
22
+ private active;
23
+ private scanning;
24
+ private limited;
25
+ private inventoryLimited;
26
+ private generation;
27
+ private scanned;
28
+ private processing;
29
+ constructor(root: string, report: (event: ObservedProjectFile) => void, changed: () => void);
30
+ summary(): ProjectWatchSummary;
31
+ inventory(): {
32
+ path: string;
33
+ entry: "file" | "directory";
34
+ }[];
35
+ start(): void;
36
+ stop(): void;
37
+ private limit;
38
+ private validPath;
39
+ private actual;
40
+ private discover;
41
+ private remember;
42
+ private schedule;
43
+ private flush;
44
+ private forget;
45
+ }
46
+ //# sourceMappingURL=project-file-watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-file-watch.d.ts","sourceRoot":"","sources":["../../src/dashboard/project-file-watch.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;CACzC;AACD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,gBAAgB;IAaf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO;IAb1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgC;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2C;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqF;IAC7G,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,UAAU,CAAS;gBAEE,IAAI,EAAE,MAAM,EAAmB,MAAM,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,EACrF,OAAO,EAAE,MAAM,IAAI;IAEtC,OAAO,IAAI,mBAAmB;IAK9B,SAAS;;;;IAIT,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI;IAaZ,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,SAAS;YAIH,MAAM;YAYN,QAAQ;IAwCtB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,QAAQ;YAaF,KAAK;IA2BnB,OAAO,CAAC,MAAM;CAMf"}