@rubytech/create-maxy-code 0.1.32 → 0.1.34

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 (445) hide show
  1. package/dist/__tests__/account-id-env.test.js +1 -1
  2. package/dist/__tests__/apt-resolve.test.js +7 -7
  3. package/dist/__tests__/brew-install.test.js +1 -1
  4. package/dist/__tests__/brew-resolve.test.js +1 -1
  5. package/dist/__tests__/cdp-port-no-silent-fallback.test.js +4 -4
  6. package/dist/__tests__/init-logging.test.js +1 -1
  7. package/dist/__tests__/launchd-plist.test.js +1 -1
  8. package/dist/__tests__/macos-version.test.js +1 -1
  9. package/dist/__tests__/peer-brand-detect.test.js +1 -1
  10. package/dist/__tests__/platform-detect.test.js +2 -2
  11. package/dist/__tests__/port-canonicalisation.test.js +1 -1
  12. package/dist/__tests__/preflight-port-classifier.test.js +6 -6
  13. package/dist/__tests__/samba-provision.test.js +1 -1
  14. package/dist/__tests__/snap-chromium.test.js +1 -1
  15. package/dist/apt-resolve.js +5 -5
  16. package/dist/brew-install.js +1 -1
  17. package/dist/brew-resolve.js +3 -3
  18. package/dist/index.js +146 -122
  19. package/dist/init-logging.js +1 -1
  20. package/dist/launchd-plist.js +1 -1
  21. package/dist/macos-version.js +2 -2
  22. package/dist/peer-brand-detect.js +1 -1
  23. package/dist/pinned-binaries.js +1 -1
  24. package/dist/platform-detect.js +1 -1
  25. package/dist/port-resolution.js +2 -2
  26. package/dist/preflight-port-classifier.js +3 -3
  27. package/dist/samba-provision.js +1 -1
  28. package/dist/snap-chromium.js +3 -3
  29. package/dist/uninstall.js +28 -28
  30. package/package.json +1 -1
  31. package/payload/docs/desktop-code-controls.md +63 -0
  32. package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js +1 -1
  33. package/payload/platform/lib/account-enumeration/dist/__tests__/validate-env.test.js.map +1 -1
  34. package/payload/platform/lib/account-enumeration/dist/index.d.ts +1 -1
  35. package/payload/platform/lib/account-enumeration/src/__tests__/validate-env.test.ts +1 -1
  36. package/payload/platform/lib/account-enumeration/src/index.ts +1 -1
  37. package/payload/platform/lib/admins-write/dist/index.js +3 -3
  38. package/payload/platform/lib/admins-write/dist/index.js.map +1 -1
  39. package/payload/platform/lib/admins-write/src/index.ts +4 -4
  40. package/payload/platform/lib/entitlement/dist/index.d.ts +1 -1
  41. package/payload/platform/lib/entitlement/dist/index.js +2 -2
  42. package/payload/platform/lib/entitlement/dist/index.js.map +1 -1
  43. package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js +1 -1
  44. package/payload/platform/lib/graph-mcp/dist/__tests__/warnings-envelope.test.js.map +1 -1
  45. package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.d.ts +3 -3
  46. package/payload/platform/lib/graph-mcp/dist/cypher-rewrite-stamp.js +3 -3
  47. package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.d.ts +1 -1
  48. package/payload/platform/lib/graph-mcp/dist/cypher-shim-read.js +1 -1
  49. package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.d.ts +1 -1
  50. package/payload/platform/lib/graph-mcp/dist/cypher-shim-write.js +1 -1
  51. package/payload/platform/lib/graph-mcp/dist/cypher-validate.d.ts +1 -1
  52. package/payload/platform/lib/graph-mcp/dist/cypher-validate.js +1 -1
  53. package/payload/platform/lib/graph-mcp/dist/index.d.ts +1 -1
  54. package/payload/platform/lib/graph-mcp/dist/index.js +24 -24
  55. package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -1
  56. package/payload/platform/lib/graph-mcp/dist/schema-cache.d.ts +1 -1
  57. package/payload/platform/lib/graph-mcp/dist/schema-cache.js +2 -2
  58. package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.d.ts +3 -3
  59. package/payload/platform/lib/graph-mcp/dist/schema-cypher-parser.js +3 -3
  60. package/payload/platform/lib/graph-mcp/src/__tests__/warnings-envelope.test.ts +1 -1
  61. package/payload/platform/lib/graph-mcp/src/cypher-rewrite-stamp.ts +3 -3
  62. package/payload/platform/lib/graph-mcp/src/cypher-shim-read.ts +1 -1
  63. package/payload/platform/lib/graph-mcp/src/cypher-shim-write.ts +1 -1
  64. package/payload/platform/lib/graph-mcp/src/cypher-validate.ts +1 -1
  65. package/payload/platform/lib/graph-mcp/src/index.ts +29 -29
  66. package/payload/platform/lib/graph-mcp/src/schema-cache.ts +2 -2
  67. package/payload/platform/lib/graph-mcp/src/schema-cypher-parser.ts +3 -3
  68. package/payload/platform/lib/graph-search/dist/index.d.ts +12 -12
  69. package/payload/platform/lib/graph-search/dist/index.js +11 -11
  70. package/payload/platform/lib/graph-search/dist/index.js.map +1 -1
  71. package/payload/platform/lib/graph-search/src/__tests__/bm25-label-gate.test.ts +2 -2
  72. package/payload/platform/lib/graph-search/src/__tests__/bm25-strong-bypass-threshold.test.ts +2 -2
  73. package/payload/platform/lib/graph-search/src/__tests__/brochure-threshold.test.ts +3 -3
  74. package/payload/platform/lib/graph-search/src/__tests__/expand-batch.test.ts +2 -2
  75. package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +6 -6
  76. package/payload/platform/lib/graph-search/src/__tests__/hybrid.test.ts +5 -5
  77. package/payload/platform/lib/graph-search/src/__tests__/vector-threshold.test.ts +2 -2
  78. package/payload/platform/lib/graph-search/src/index.ts +18 -18
  79. package/payload/platform/lib/graph-trash/dist/index.d.ts +3 -3
  80. package/payload/platform/lib/graph-trash/dist/index.js +3 -3
  81. package/payload/platform/lib/graph-trash/src/index.ts +3 -3
  82. package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js +4 -4
  83. package/payload/platform/lib/graph-write/dist/__tests__/action-provenance-gate.test.js.map +1 -1
  84. package/payload/platform/lib/graph-write/dist/audit.d.ts +2 -2
  85. package/payload/platform/lib/graph-write/dist/audit.js +2 -2
  86. package/payload/platform/lib/graph-write/dist/conversation-provenance.js +1 -1
  87. package/payload/platform/lib/graph-write/dist/conversation-provenance.js.map +1 -1
  88. package/payload/platform/lib/graph-write/dist/index.d.ts +5 -5
  89. package/payload/platform/lib/graph-write/dist/index.js +12 -12
  90. package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
  91. package/payload/platform/lib/graph-write/src/__tests__/action-provenance-gate.test.ts +4 -4
  92. package/payload/platform/lib/graph-write/src/audit.ts +2 -2
  93. package/payload/platform/lib/graph-write/src/conversation-provenance.ts +1 -1
  94. package/payload/platform/lib/graph-write/src/index.ts +13 -13
  95. package/payload/platform/lib/mcp-eager/dist/index.d.ts +2 -2
  96. package/payload/platform/lib/mcp-eager/dist/index.js +2 -2
  97. package/payload/platform/lib/mcp-eager/src/index.ts +2 -2
  98. package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts +2 -2
  99. package/payload/platform/lib/mcp-spawn-tee/dist/index.js +2 -2
  100. package/payload/platform/lib/mcp-spawn-tee/src/index.ts +2 -2
  101. package/payload/platform/lib/mcp-stderr-tee/dist/index.d.ts +1 -1
  102. package/payload/platform/lib/mcp-stderr-tee/dist/index.js +4 -4
  103. package/payload/platform/lib/mcp-stderr-tee/dist/index.js.map +1 -1
  104. package/payload/platform/lib/mcp-stderr-tee/src/index.ts +4 -4
  105. package/payload/platform/lib/oauth-llm/dist/index.d.ts +4 -4
  106. package/payload/platform/lib/oauth-llm/dist/index.js +3 -3
  107. package/payload/platform/lib/oauth-llm/dist/index.js.map +1 -1
  108. package/payload/platform/lib/oauth-llm/src/index.ts +6 -6
  109. package/payload/platform/lib/persistent-components/dist/index.d.ts +1 -1
  110. package/payload/platform/lib/persistent-components/dist/index.js +1 -1
  111. package/payload/platform/lib/persistent-components/src/index.ts +1 -1
  112. package/payload/platform/lib/task-secrets/dist/index.js +1 -1
  113. package/payload/platform/lib/task-secrets/dist/index.js.map +1 -1
  114. package/payload/platform/lib/task-secrets/src/__tests__/redact-secrets.test.ts +1 -1
  115. package/payload/platform/lib/task-secrets/src/index.ts +1 -1
  116. package/payload/platform/neo4j/edge-annotations.json +9 -9
  117. package/payload/platform/neo4j/schema.cypher +32 -33
  118. package/payload/platform/package.json +2 -2
  119. package/payload/platform/plugins/admin/PLUGIN.md +0 -2
  120. package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +4 -4
  121. package/payload/platform/plugins/admin/hooks/__tests__/playwright-file-guard.test.sh +1 -1
  122. package/payload/platform/plugins/admin/hooks/__tests__/pre-tool-use-base64-guard.test.sh +1 -1
  123. package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +13 -13
  124. package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +7 -7
  125. package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js +2 -2
  126. package/payload/platform/plugins/admin/mcp/dist/__tests__/plugin-read-skill-resolution.test.js.map +1 -1
  127. package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js +1 -1
  128. package/payload/platform/plugins/admin/mcp/dist/__tests__/public-hostname.test.js.map +1 -1
  129. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js +2 -2
  130. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load-required-inputs.test.js.map +1 -1
  131. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js +1 -1
  132. package/payload/platform/plugins/admin/mcp/dist/__tests__/skill-load.test.js.map +1 -1
  133. package/payload/platform/plugins/admin/mcp/dist/index.js +38 -65
  134. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  135. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js +2 -2
  136. package/payload/platform/plugins/admin/mcp/dist/lib/neo4j.js.map +1 -1
  137. package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js +2 -2
  138. package/payload/platform/plugins/admin/mcp/dist/lib/public-hostname.js.map +1 -1
  139. package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js +5 -5
  140. package/payload/platform/plugins/admin/mcp/dist/skill-resolution.js.map +1 -1
  141. package/payload/platform/plugins/admin/skills/plugin-management/SKILL.md +1 -1
  142. package/payload/platform/plugins/admin/skills/public-agent-manager/SKILL.md +0 -1
  143. package/payload/platform/plugins/admin/skills/publish-site/SKILL.md +1 -1
  144. package/payload/platform/plugins/admin/skills/unzip-attachment/SKILL.md +2 -2
  145. package/payload/platform/plugins/cloudflare/mcp/dist/index.js +1 -1
  146. package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -1
  147. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +1 -1
  148. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +6 -6
  149. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -1
  150. package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.d.ts +2 -2
  151. package/payload/platform/plugins/cloudflare/mcp/dist/lib/setup-orchestrator.js +2 -2
  152. package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +1 -1
  153. package/payload/platform/plugins/cloudflare/references/manual-setup.md +4 -4
  154. package/payload/platform/plugins/cloudflare/scripts/__tests__/tunnel-ingress.test.ts +1 -1
  155. package/payload/platform/plugins/cloudflare/scripts/_stream-log.sh +8 -8
  156. package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.sh +2 -2
  157. package/payload/platform/plugins/cloudflare/scripts/list-cf-domains.ts +16 -16
  158. package/payload/platform/plugins/cloudflare/scripts/reset-tunnel.sh +1 -1
  159. package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +28 -28
  160. package/payload/platform/plugins/cloudflare/scripts/tunnel-ingress.ts +5 -5
  161. package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +3 -3
  162. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +2 -2
  163. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -1
  164. package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.d.ts +1 -1
  165. package/payload/platform/plugins/contacts/mcp/dist/lib/resolve-person.js +1 -1
  166. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +2 -2
  167. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -1
  168. package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js +1 -1
  169. package/payload/platform/plugins/contacts/mcp/dist/tools/group-create.js.map +1 -1
  170. package/payload/platform/plugins/docs/references/deployment.md +30 -1
  171. package/payload/platform/plugins/docs/references/plugins-guide.md +2 -5
  172. package/payload/platform/plugins/docs/references/troubleshooting.md +3 -3
  173. package/payload/platform/plugins/email/mcp/dist/index.js +1 -1
  174. package/payload/platform/plugins/email/mcp/dist/index.js.map +1 -1
  175. package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js +2 -2
  176. package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js.map +1 -1
  177. package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +1 -1
  178. package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +1 -1
  179. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js +2 -2
  180. package/payload/platform/plugins/email/mcp/dist/lib/neo4j.js.map +1 -1
  181. package/payload/platform/plugins/email/mcp/dist/lib/screening.d.ts +1 -1
  182. package/payload/platform/plugins/email/mcp/dist/lib/screening.js +1 -1
  183. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +6 -6
  184. package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -1
  185. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +1 -1
  186. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +2 -2
  187. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
  188. package/payload/platform/plugins/email/references/email-reference.md +2 -2
  189. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
  190. package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
  191. package/payload/platform/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
  192. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.mjs +24 -24
  193. package/payload/platform/plugins/memory/bin/conversation-archive-ingest.sh +6 -6
  194. package/payload/platform/plugins/memory/mcp/dist/index.js +8 -8
  195. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  196. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js +33 -33
  197. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/llm-classifier.test.js.map +1 -1
  198. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js +12 -12
  199. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-loader.test.js.map +1 -1
  200. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js +3 -3
  201. package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/schema-validator.test.js.map +1 -1
  202. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js +2 -2
  203. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/types.js.map +1 -1
  204. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.d.ts.map +1 -1
  205. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js +1 -1
  206. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-normalisers/whatsapp-text.js.map +1 -1
  207. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.d.ts.map +1 -1
  208. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js +1 -2
  209. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/derive-keys.js.map +1 -1
  210. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js +2 -2
  211. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/sender-bind.js.map +1 -1
  212. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js +1 -1
  213. package/payload/platform/plugins/memory/mcp/dist/lib/conversation-pipeline/to-turn-text.js.map +1 -1
  214. package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.d.ts +2 -2
  215. package/payload/platform/plugins/memory/mcp/dist/lib/document-chunker.js +2 -2
  216. package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js +6 -6
  217. package/payload/platform/plugins/memory/mcp/dist/lib/document-hierarchy.js.map +1 -1
  218. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +1 -1
  219. package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +1 -1
  220. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts +2 -2
  221. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js +7 -7
  222. package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js.map +1 -1
  223. package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.d.ts +2 -2
  224. package/payload/platform/plugins/memory/mcp/dist/lib/live-schema-source.js +2 -2
  225. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts +9 -9
  226. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.d.ts.map +1 -1
  227. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js +25 -25
  228. package/payload/platform/plugins/memory/mcp/dist/lib/llm-classifier.js.map +1 -1
  229. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.d.ts +1 -1
  230. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js +5 -5
  231. package/payload/platform/plugins/memory/mcp/dist/lib/llm-ranker.js.map +1 -1
  232. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +2 -2
  233. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -1
  234. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.d.ts +4 -4
  235. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js +3 -3
  236. package/payload/platform/plugins/memory/mcp/dist/lib/schema-loader.js.map +1 -1
  237. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.d.ts +3 -3
  238. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js +5 -5
  239. package/payload/platform/plugins/memory/mcp/dist/lib/schema-validator.js.map +1 -1
  240. package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js +1 -1
  241. package/payload/platform/plugins/memory/mcp/dist/lib/uuid.js.map +1 -1
  242. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js +5 -5
  243. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-derive-insights.test.js.map +1 -1
  244. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js +1 -1
  245. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-archive-enrich-rejection.test.js.map +1 -1
  246. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js +2 -2
  247. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-source-agnosticism.test.js.map +1 -1
  248. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js +4 -4
  249. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/conversation-normalisers-whatsapp-text.test.js.map +1 -1
  250. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js +6 -6
  251. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-archive-write.test.js.map +1 -1
  252. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js +7 -7
  253. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-ingest.test.js.map +1 -1
  254. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js +2 -2
  255. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-not-applicable.test.js.map +1 -1
  256. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js +3 -3
  257. package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/profile-update-personfields-open.test.js.map +1 -1
  258. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.d.ts +1 -1
  259. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js +3 -3
  260. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-derive-insights.js.map +1 -1
  261. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.d.ts +1 -1
  262. package/payload/platform/plugins/memory/mcp/dist/tools/conversation-archive-enrich-rejection.js +1 -1
  263. package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js +2 -2
  264. package/payload/platform/plugins/memory/mcp/dist/tools/memory-archive-write.js.map +1 -1
  265. package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.d.ts +1 -1
  266. package/payload/platform/plugins/memory/mcp/dist/tools/memory-classify.js +1 -1
  267. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.d.ts +2 -2
  268. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js +1 -1
  269. package/payload/platform/plugins/memory/mcp/dist/tools/memory-delete.js.map +1 -1
  270. package/payload/platform/plugins/memory/mcp/dist/tools/memory-find-candidates.d.ts +3 -3
  271. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js +2 -2
  272. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest-extract.js.map +1 -1
  273. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts +9 -9
  274. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.d.ts.map +1 -1
  275. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js +10 -11
  276. package/payload/platform/plugins/memory/mcp/dist/tools/memory-ingest.js.map +1 -1
  277. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js +1 -1
  278. package/payload/platform/plugins/memory/mcp/dist/tools/memory-list-attachments.js.map +1 -1
  279. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +1 -1
  280. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -1
  281. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +1 -1
  282. package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
  283. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +1 -1
  284. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +3 -3
  285. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
  286. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +9 -9
  287. package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -1
  288. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts +5 -5
  289. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +9 -9
  290. package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
  291. package/payload/platform/plugins/memory/mcp/scripts/boot-smoke.sh +1 -1
  292. package/payload/platform/plugins/memory/mcp/scripts/graph/fixture.cypher +1 -1
  293. package/payload/platform/plugins/memory/mcp/vitest.config.ts +2 -2
  294. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js +1 -1
  295. package/payload/platform/plugins/outlook/mcp/dist/lib/graph-client.js.map +1 -1
  296. package/payload/platform/plugins/outlook/mcp/scripts/verify-doc-impl.sh +1 -1
  297. package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
  298. package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js +1 -1
  299. package/payload/platform/plugins/scheduling/mcp/dist/__tests__/time-resolve-description.test.js.map +1 -1
  300. package/payload/platform/plugins/scheduling/mcp/dist/index.js +1 -1
  301. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
  302. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js +3 -3
  303. package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/getUserTimezone.test.js.map +1 -1
  304. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.d.ts +2 -2
  305. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js +5 -5
  306. package/payload/platform/plugins/scheduling/mcp/dist/lib/neo4j.js.map +1 -1
  307. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +1 -1
  308. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +6 -6
  309. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  310. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +1 -1
  311. package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
  312. package/payload/platform/plugins/tasks/mcp/dist/index.js +1 -1
  313. package/payload/platform/plugins/tasks/mcp/dist/index.js.map +1 -1
  314. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js +2 -2
  315. package/payload/platform/plugins/tasks/mcp/dist/lib/neo4j.js.map +1 -1
  316. package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js +2 -2
  317. package/payload/platform/plugins/tasks/mcp/dist/tools/project-create.js.map +1 -1
  318. package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts +1 -1
  319. package/payload/platform/plugins/tasks/mcp/dist/tools/session-name.d.ts.map +1 -1
  320. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.d.ts +5 -5
  321. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js +3 -3
  322. package/payload/platform/plugins/tasks/mcp/dist/tools/task-create.js.map +1 -1
  323. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.d.ts +4 -4
  324. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js +2 -2
  325. package/payload/platform/plugins/tasks/mcp/dist/tools/task-update.js.map +1 -1
  326. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +2 -2
  327. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -1
  328. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js +2 -2
  329. package/payload/platform/plugins/waitlist/mcp/dist/lib/neo4j.js.map +1 -1
  330. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js +3 -3
  331. package/payload/platform/plugins/waitlist/mcp/dist/tools/__tests__/waitlist-persist.test.js.map +1 -1
  332. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.d.ts +1 -1
  333. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js +3 -3
  334. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-persist.js.map +1 -1
  335. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js +5 -5
  336. package/payload/platform/plugins/waitlist/mcp/dist/tools/waitlist-setup.js.map +1 -1
  337. package/payload/platform/plugins/whatsapp/mcp/dist/call-api.d.ts +1 -1
  338. package/payload/platform/plugins/whatsapp/mcp/dist/call-api.js +1 -1
  339. package/payload/platform/plugins/workflows/mcp/dist/index.js +1 -1
  340. package/payload/platform/plugins/workflows/mcp/dist/index.js.map +1 -1
  341. package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.d.ts +1 -1
  342. package/payload/platform/plugins/workflows/mcp/dist/lib/active-runs.js +1 -1
  343. package/payload/platform/plugins/workflows/mcp/dist/lib/llm-call.d.ts +1 -1
  344. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js +2 -2
  345. package/payload/platform/plugins/workflows/mcp/dist/lib/neo4j.js.map +1 -1
  346. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js +1 -1
  347. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-create.js.map +1 -1
  348. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js +4 -4
  349. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-execute.js.map +1 -1
  350. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js +1 -1
  351. package/payload/platform/plugins/workflows/mcp/dist/tools/workflow-update.js.map +1 -1
  352. package/payload/platform/plugins/workflows/mcp/test-workflows.sh +2 -2
  353. package/payload/platform/scripts/__tests__/first-token-creates-stream-log.test.sh +1 -1
  354. package/payload/platform/scripts/__tests__/logs-read-prefix.sh +6 -6
  355. package/payload/platform/scripts/admin-conversation-recover.mjs +5 -5
  356. package/payload/platform/scripts/admin-persist-audit.ts +4 -4
  357. package/payload/platform/scripts/check-no-conversation-id-leaks.mjs +1 -1
  358. package/payload/platform/scripts/check-no-direct-clipboard.mjs +1 -1
  359. package/payload/platform/scripts/check-no-task-id-leaks.mjs +2 -2
  360. package/payload/platform/scripts/check-skill-load-coverage.mjs +1 -1
  361. package/payload/platform/scripts/component-knowledgedoc-backfill.ts +1 -1
  362. package/payload/platform/scripts/dedupe-userprofile-ghosts.sh +2 -2
  363. package/payload/platform/scripts/generate-entitlement-fixture.mjs +1 -1
  364. package/payload/platform/scripts/installer-device-verify.sh +6 -6
  365. package/payload/platform/scripts/lib/resolve-account-dir.sh +6 -6
  366. package/payload/platform/scripts/log-adherence-check.sh +3 -3
  367. package/payload/platform/scripts/logs-read.sh +13 -13
  368. package/payload/platform/scripts/logs-read.test.sh +1 -1
  369. package/payload/platform/scripts/migrate-import.sh +4 -4
  370. package/payload/platform/scripts/redact-install-logs.sh +1 -1
  371. package/payload/platform/scripts/seed-neo4j.sh +26 -32
  372. package/payload/platform/scripts/test-laptop-vnc-boot.sh +3 -3
  373. package/payload/platform/scripts/verify-skill-tool-surface.sh +17 -2
  374. package/payload/platform/scripts/vnc.sh +9 -9
  375. package/payload/platform/services/claude-session-manager/dist/config.d.ts +15 -1
  376. package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
  377. package/payload/platform/services/claude-session-manager/dist/config.js +43 -2
  378. package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
  379. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +2 -2
  380. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  381. package/payload/platform/services/claude-session-manager/dist/http-server.js +133 -90
  382. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  383. package/payload/platform/services/claude-session-manager/dist/index.js +21 -3
  384. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  385. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts +2 -2
  386. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.d.ts.map +1 -1
  387. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js +4 -4
  388. package/payload/platform/services/claude-session-manager/dist/jsonl-enumerator.js.map +1 -1
  389. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js +1 -1
  390. package/payload/platform/services/claude-session-manager/dist/jsonl-observer.js.map +1 -1
  391. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +2 -2
  392. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
  393. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +42 -17
  394. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  395. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +116 -48
  396. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  397. package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js +1 -1
  398. package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js.map +1 -1
  399. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +36 -11
  400. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
  401. package/payload/platform/services/claude-session-manager/dist/session-store.js +53 -2
  402. package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
  403. package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js +2 -2
  404. package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js.map +1 -1
  405. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +60 -1
  406. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  407. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +169 -11
  408. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  409. package/payload/platform/services/claude-session-manager/dist/tool-surface.js +1 -1
  410. package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -1
  411. package/payload/platform/services/claude-session-manager/dist/types.d.ts +8 -1
  412. package/payload/platform/services/claude-session-manager/dist/types.d.ts.map +1 -1
  413. package/payload/platform/services/claude-session-manager/dist/url-capture.js +1 -1
  414. package/payload/platform/services/claude-session-manager/dist/url-capture.js.map +1 -1
  415. package/payload/platform/templates/agents/admin/IDENTITY.md +14 -0
  416. package/payload/platform/templates/agents/admin/SOUL.md +1 -3
  417. package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -3
  418. package/payload/platform/templates/specialists/agents/project-manager.md +1 -1
  419. package/payload/platform/templates/systemd/edge.service.template +3 -3
  420. package/payload/premium-plugins/real-agent/BUNDLE.md +2 -4
  421. package/payload/premium-plugins/real-agent/plugins/.claude-plugin/marketplace.json +0 -5
  422. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js +3 -3
  423. package/payload/premium-plugins/real-agent/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -1
  424. package/payload/premium-plugins/real-agent/plugins/loop/mcp/src/lib/neo4j.ts +3 -3
  425. package/payload/server/{chunk-ZGJ6CUU2.js → chunk-3G6JMV7N.js} +1 -1
  426. package/payload/server/{chunk-KVGTWNKQ.js → chunk-NNHHGQJL.js} +314 -5
  427. package/payload/server/{chunk-RZQMYJVY.js → chunk-QC5LHYPH.js} +3 -3
  428. package/payload/server/{cloudflare-task-tracker-4PKOLE4H.js → cloudflare-task-tracker-NEB3X6O2.js} +2 -2
  429. package/payload/server/maxy-edge.js +2 -2
  430. package/payload/server/public/assets/{admin-Cuu1QdAA.js → admin-CF2ZQvXu.js} +1 -1
  431. package/payload/server/public/index.html +1 -1
  432. package/payload/server/server.js +274 -396
  433. package/payload/platform/plugins/anthropic/.claude-plugin/plugin.json +0 -8
  434. package/payload/platform/plugins/anthropic/PLUGIN.md +0 -40
  435. package/payload/platform/plugins/anthropic/references/console-api.md +0 -186
  436. package/payload/platform/plugins/anthropic/references/setup-guide.md +0 -36
  437. package/payload/platform/plugins/anthropic/skills/get-api-key/SKILL.md +0 -136
  438. package/payload/platform/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
  439. package/payload/platform/plugins/estate-onboarding/PLUGIN.md +0 -30
  440. package/payload/platform/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
  441. package/payload/platform/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
  442. package/payload/premium-plugins/real-agent/plugins/estate-onboarding/.claude-plugin/plugin.json +0 -8
  443. package/payload/premium-plugins/real-agent/plugins/estate-onboarding/PLUGIN.md +0 -30
  444. package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/SKILL.md +0 -26
  445. package/payload/premium-plugins/real-agent/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +0 -63
@@ -1,32 +1,57 @@
1
1
  import type { PtyHandle, Role, Channel } from './types.js';
2
2
  export interface StoredSession {
3
- sessionId: string;
3
+ /** Intrinsic claude session id — the JSONL basename Claude Code wrote.
4
+ * Equals the value of `claudeSessionId` everywhere else in the manager.
5
+ * Set at promotion time; never null on a session that exists in the
6
+ * main store. */
7
+ claudeSessionId: string;
4
8
  pid: number;
5
9
  url: string;
6
10
  startedAt: string;
7
11
  senderId: string;
8
12
  role: Role;
9
13
  channel: Channel;
10
- /** Path to the JSONL Claude Code wrote, observed from disk (see
11
- * jsonl-observer.ts). Null until the observer matches the JSONL to
12
- * this session's bridge suffix. Task 065 — replaces the predicted
13
- * path that produced phantom /list rows. */
14
- jsonlPath: string | null;
15
- /** Intrinsic claude session id (the JSONL basename, without `.jsonl`),
16
- * observed via jsonl-observer. Distinct from the URL bridge suffix.
17
- * Used by /list dedup against the on-disk enumerator. Null until the
18
- * observer fires. Task 065. */
19
- claudeSessionId: string | null;
14
+ /** Path of the JSONL Claude Code wrote, observed from disk by the
15
+ * jsonl-observer. Non-null on a promoted session. */
16
+ jsonlPath: string;
20
17
  pty: PtyHandle;
21
18
  exited: boolean;
22
19
  }
20
+ /** Transient state held during the spawn-time bridge-binding race (Task
21
+ * 069). The PTY is alive, the URL is captured, but Claude Code has not
22
+ * yet written its first JSONL line. The entry is keyed by the URL bridge
23
+ * suffix (the only stable id we have until observation fires). */
24
+ export interface PendingSession {
25
+ bridgeSuffix: string;
26
+ pid: number;
27
+ url: string;
28
+ startedAt: string;
29
+ senderId: string;
30
+ role: Role;
31
+ channel: Channel;
32
+ pty: PtyHandle;
33
+ /** True once the PTY has exited. Used by the spawner to short-circuit
34
+ * the observation race when the process dies first. */
35
+ exited: boolean;
36
+ }
23
37
  export declare class SessionStore {
24
38
  private readonly sessions;
39
+ private readonly pendingByBridge;
25
40
  add(s: StoredSession): void;
26
41
  get(id: string): StoredSession | undefined;
27
42
  remove(id: string): StoredSession | undefined;
28
43
  listBySender(senderId: string): StoredSession[];
29
44
  all(): StoredSession[];
30
45
  size(): number;
46
+ addPending(p: PendingSession): void;
47
+ getPending(bridgeSuffix: string): PendingSession | undefined;
48
+ removePending(bridgeSuffix: string): PendingSession | undefined;
49
+ /** Move a pending entry into the main store under its newly-observed
50
+ * `claudeSessionId`. Idempotent: a second call for the same bridge
51
+ * suffix is a no-op once the pending entry has been removed.
52
+ * Returns the promoted StoredSession, or null when no pending entry
53
+ * exists for this bridge suffix (already promoted, cancelled, or
54
+ * the PTY exited before observation fired). */
55
+ promotePending(bridgeSuffix: string, claudeSessionId: string, jsonlPath: string): StoredSession | null;
31
56
  }
32
57
  //# sourceMappingURL=session-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB;;;iDAG6C;IAC7C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB;;;oCAGgC;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,SAAS,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAE5D,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAI3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAM7C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQ/C,GAAG,IAAI,aAAa,EAAE;IAItB,IAAI,IAAI,MAAM;CAGf"}
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B;;;sBAGkB;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB;0DACsD;IACtD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,SAAS,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB;AAED;;;mEAGmE;AACnE,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,SAAS,CAAA;IACd;4DACwD;IACxD,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoC;IAEpE,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAI3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAM7C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE;IAQ/C,GAAG,IAAI,aAAa,EAAE;IAItB,IAAI,IAAI,MAAM;IAMd,UAAU,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI;IAInC,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI5D,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAM/D;;;;;oDAKgD;IAChD,cAAc,CACZ,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI;CAmBxB"}
@@ -1,8 +1,20 @@
1
- // In-memory session store. Keyed by sessionId, indexed by senderId for list.
1
+ // In-memory session store. keyed on Claude Code's intrinsic
2
+ // `claudeSessionId` (the JSONL basename), not on a manager-minted id. The
3
+ // manager mints zero ids of its own; the intrinsic id is the one
4
+ // identifier per Claude process, stable from observation onward across
5
+ // alive→ended and across manager restarts.
6
+ //
7
+ // During the spawn-time gap between PTY creation and Claude Code writing
8
+ // its first JSONL line, the intrinsic id is not yet known. The store
9
+ // holds a small `pendingByBridge` map keyed on the URL bridge suffix for
10
+ // that window only. The pending entry is promoted into the main store
11
+ // the instant `jsonl-observer` matches the JSONL on disk; on observation
12
+ // failure or PTY exit before observation, the pending entry is removed.
2
13
  export class SessionStore {
3
14
  sessions = new Map();
15
+ pendingByBridge = new Map();
4
16
  add(s) {
5
- this.sessions.set(s.sessionId, s);
17
+ this.sessions.set(s.claudeSessionId, s);
6
18
  }
7
19
  get(id) {
8
20
  return this.sessions.get(id);
@@ -27,5 +39,44 @@ export class SessionStore {
27
39
  size() {
28
40
  return this.sessions.size;
29
41
  }
42
+ // --- pending lifecycle ----------------------------------
43
+ addPending(p) {
44
+ this.pendingByBridge.set(p.bridgeSuffix, p);
45
+ }
46
+ getPending(bridgeSuffix) {
47
+ return this.pendingByBridge.get(bridgeSuffix);
48
+ }
49
+ removePending(bridgeSuffix) {
50
+ const p = this.pendingByBridge.get(bridgeSuffix);
51
+ if (p)
52
+ this.pendingByBridge.delete(bridgeSuffix);
53
+ return p;
54
+ }
55
+ /** Move a pending entry into the main store under its newly-observed
56
+ * `claudeSessionId`. Idempotent: a second call for the same bridge
57
+ * suffix is a no-op once the pending entry has been removed.
58
+ * Returns the promoted StoredSession, or null when no pending entry
59
+ * exists for this bridge suffix (already promoted, cancelled, or
60
+ * the PTY exited before observation fired). */
61
+ promotePending(bridgeSuffix, claudeSessionId, jsonlPath) {
62
+ const p = this.pendingByBridge.get(bridgeSuffix);
63
+ if (!p)
64
+ return null;
65
+ this.pendingByBridge.delete(bridgeSuffix);
66
+ const s = {
67
+ claudeSessionId,
68
+ pid: p.pid,
69
+ url: p.url,
70
+ startedAt: p.startedAt,
71
+ senderId: p.senderId,
72
+ role: p.role,
73
+ channel: p.channel,
74
+ jsonlPath,
75
+ pty: p.pty,
76
+ exited: p.exited,
77
+ };
78
+ this.sessions.set(claudeSessionId, s);
79
+ return s;
80
+ }
30
81
  }
31
82
  //# sourceMappingURL=session-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAAA,6EAA6E;AA0B7E,MAAM,OAAO,YAAY;IACN,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAA;IAE5D,GAAG,CAAC,CAAgB;QAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACnC,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC/B,OAAO,CAAC,CAAA;IACV,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,MAAM,GAAG,GAAoB,EAAE,CAAA;QAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1C,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,0EAA0E;AAC1E,iEAAiE;AACjE,uEAAuE;AACvE,2CAA2C;AAC3C,EAAE;AACF,yEAAyE;AACzE,qEAAqE;AACrE,yEAAyE;AACzE,sEAAsE;AACtE,yEAAyE;AACzE,wEAAwE;AAyCxE,MAAM,OAAO,YAAY;IACN,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC3C,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAA;IAEpE,GAAG,CAAC,CAAgB;QAClB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM,CAAC,EAAU;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC/B,OAAO,CAAC,CAAA;IACV,CAAC;IAED,YAAY,CAAC,QAAgB;QAC3B,MAAM,GAAG,GAAoB,EAAE,CAAA;QAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1C,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAA;IAC3B,CAAC;IAED,2DAA2D;IAE3D,UAAU,CAAC,CAAiB;QAC1B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,UAAU,CAAC,YAAoB;QAC7B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;IAC/C,CAAC;IAED,aAAa,CAAC,YAAoB;QAChC,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAChD,IAAI,CAAC;YAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAChD,OAAO,CAAC,CAAA;IACV,CAAC;IAED;;;;;oDAKgD;IAChD,cAAc,CACZ,YAAoB,EACpB,eAAuB,EACvB,SAAiB;QAEjB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAChD,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QACnB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QACzC,MAAM,CAAC,GAAkB;YACvB,eAAe;YACf,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,SAAS;YACT,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,MAAM,EAAE,CAAC,CAAC,MAAM;SACjB,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;QACrC,OAAO,CAAC,CAAA;IACV,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- // Task 013 — in-memory leaky-bucket throttle for `POST /spawn role=public`.
1
+ // in-memory leaky-bucket throttle for `POST /spawn role=public`.
2
2
  //
3
3
  // Two buckets fire on each admit attempt: one keyed `(senderId, channel)` to
4
4
  // stop a single sender from flooding one channel, and one keyed `senderId`
@@ -63,7 +63,7 @@ export function createSpawnRateLimiter(limits) {
63
63
  }
64
64
  export const DEFAULT_PUBLIC_SPAWN_LIMITS = {
65
65
  // Conservative defaults: 10 spawns / minute per channel; 30 / minute global.
66
- // Operators override via brand.json or env. Task 013 verification fires the
66
+ // Operators override via brand.json or env. verification fires the
67
67
  // per-channel cap (11 calls, same senderId+channel).
68
68
  perChannel: {
69
69
  browser: { cap: 10, windowMs: 60_000 },
@@ -1 +1 @@
1
- {"version":3,"file":"spawn-rate-limiter.js","sourceRoot":"","sources":["../src/spawn-rate-limiter.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAC3E,4EAA4E;AAC5E,8DAA8D;AAC9D,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,mBAAmB;AAkCnB,SAAS,KAAK,CAAC,MAAgB,EAAE,MAAc;IAC7C,2EAA2E;IAC3E,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM;QAAE,CAAC,EAAE,CAAA;IACpD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAyB;IAC9D,MAAM,KAAK,GAAkB;QAC3B,SAAS,EAAE,IAAI,GAAG,EAAE;QACpB,QAAQ,EAAE,IAAI,GAAG,EAAE;KACpB,CAAA;IAED,OAAO;QACL,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;YACvC,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YAC/C,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,OAAO,EAAE,CAAA;YAC3C,MAAM,aAAa,GAAG,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAA;YACjD,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC,CAAA;YAEjF,IAAI,aAAa,CAAC,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC;gBAC7C,oEAAoE;gBACpE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;gBAC9C,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,SAAS;oBAChB,GAAG,EAAE,YAAY,CAAC,GAAG;oBACrB,QAAQ,EAAE,YAAY,CAAC,QAAQ;iBAChC,CAAA;YACH,CAAC;YAED,MAAM,YAAY,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAA;YACjD,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,YAAY,CAAC,CAAA;YAE5E,IAAI,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAC7C,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;gBAC9C,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;gBAC1C,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,KAAK,EAAE,QAAQ;oBACf,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG;oBACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;iBACjC,CAAA;YACH,CAAC;YAED,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACvB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACtB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;YAC9C,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YAC1C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC3B,CAAC;QACD,KAAK;YACH,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YACvB,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QACxB,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAsB;IAC5D,6EAA6E;IAC7E,4EAA4E;IAC5E,qDAAqD;IACrD,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;QACtC,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;QACvC,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;QACvC,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;QACtC,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;KACrC;IACD,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;CACtC,CAAA"}
1
+ {"version":3,"file":"spawn-rate-limiter.js","sourceRoot":"","sources":["../src/spawn-rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,65 @@ export interface HostContext {
4
4
  adminUrl: string;
5
5
  tunnelUrl: string | null;
6
6
  }
7
+ export interface IdentitySources {
8
+ accountDir: string;
9
+ role: 'admin' | 'public';
10
+ }
11
+ /** Per-spawn owner-profile body resolved by the caller before /spawn fires.
12
+ *
13
+ * ok:true — `body` is the `formatProfileSummary` output (verbatim).
14
+ * ok:false — `reason` is a short token the agent surfaces to the operator,
15
+ * e.g. `neo4j-unreachable`, `adminuser-missing`, `unknown-user`.
16
+ * The composer emits `<about-owner>coverage-unresolved: <reason></about-owner>`
17
+ * so the absent signal is visible end-to-end rather than silently
18
+ * swallowed.
19
+ *
20
+ * When the field is omitted entirely (undefined), the sentinel is suppressed.
21
+ * This is the contract for callers that have no owner concept (role=public
22
+ * visitor flows that do not query a profile). */
23
+ export type OwnerProfileBlock = {
24
+ ok: true;
25
+ body: string;
26
+ } | {
27
+ ok: false;
28
+ reason: string;
29
+ };
30
+ export interface DormantPlugin {
31
+ /** Plugin directory name under platform/plugins/ — the same key used in
32
+ * account.json's `enabledPlugins` array. */
33
+ name: string;
34
+ /** One-line description from PLUGIN.md frontmatter. Verbatim, no trimming
35
+ * beyond what the caller did. */
36
+ description: string;
37
+ }
38
+ export interface ComposeExtras {
39
+ aboutOwner?: OwnerProfileBlock;
40
+ dormantPlugins?: readonly DormantPlugin[];
41
+ }
42
+ export type AppendBlockResult = {
43
+ ok: true;
44
+ block: string;
45
+ identityBytes: number;
46
+ soulBytes: number;
47
+ aboutOwnerBytes: number;
48
+ dormantPluginsBytes: number;
49
+ } | {
50
+ ok: false;
51
+ reason: 'host-unresolved' | 'identity-unresolved';
52
+ detail: string;
53
+ };
7
54
  export declare const ATTACHMENT_CEILING_BYTES = 31457280;
8
- export declare function composeAppendSystemPrompt(host: HostContext): string | null;
55
+ export declare function composeAppendSystemPrompt(host: HostContext, sources: IdentitySources, extras?: ComposeExtras): AppendBlockResult;
56
+ /** Boot-time self-test: render the block with synthetic inputs that exercise
57
+ * every optional sentinel, and assert the expected tags appear. Returns
58
+ * ok:true on success, ok:false with the first missing tag on drift. The
59
+ * caller logs `[startup-self-test] system-prompt-sentinels=ok` or LOUD-FAILs
60
+ * so future refactors that drop a sentinel surface at manager start, not at
61
+ * runtime against a real spawn. */
62
+ export declare function runSystemPromptSelfTest(): {
63
+ ok: true;
64
+ } | {
65
+ ok: false;
66
+ missing: string;
67
+ };
9
68
  //# sourceMappingURL=system-prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,eAAO,MAAM,wBAAwB,WAAa,CAAA;AAElD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAc1E"}
1
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AA0DA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAA;CACzB;AAED;;;;;;;;;;;kDAWkD;AAClD,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjC,MAAM,WAAW,aAAa;IAC5B;iDAC6C;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ;sCACkC;IAClC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,cAAc,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;CAC1C;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,EAAE,EAAE,IAAI,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,MAAM,CAAA;IACvB,mBAAmB,EAAE,MAAM,CAAA;CAC5B,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,GAAG,qBAAqB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpF,eAAO,MAAM,wBAAwB,WAAa,CAAA;AAuElD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,eAAe,EACxB,MAAM,GAAE,aAAkB,GACzB,iBAAiB,CAwBnB;AAED;;;;;oCAKoC;AACpC,wBAAgB,uBAAuB,IAAI;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAwCvF"}
@@ -1,5 +1,6 @@
1
1
  // Composes the `--append-system-prompt` block injected into every spawned
2
- // `claude --verbose --remote-control` PTY. Two sentinel-wrapped sections:
2
+ // `claude --verbose --remote-control` PTY. Sentinel-wrapped sections in
3
+ // documented order:
3
4
  //
4
5
  // <host> ... </host> — hostname, LAN IPv4, admin URL,
5
6
  // tunnel URL (or "none")
@@ -7,20 +8,88 @@
7
8
  // — 30 MiB SendUserFile ceiling and
8
9
  // the tunnel-link workaround for
9
10
  // oversize files
11
+ // <identity> ... </identity> — verbatim contents of
12
+ // <accountDir>/agents/<role>/IDENTITY.md
13
+ // <soul> ... </soul> — verbatim contents of
14
+ // <accountDir>/agents/<role>/SOUL.md
15
+ // <about-owner> ... </about-owner> — operator profile body produced
16
+ // by `formatProfileSummary` in
17
+ // neo4j-store.ts. When the caller
18
+ // resolves the body to ok:false,
19
+ // the sentinel carries the literal
20
+ // line `coverage-unresolved: <reason>`
21
+ // so the agent narrates the gap to
22
+ // the operator. Omitted entirely
23
+ // when the caller supplies nothing
24
+ // (e.g. role=public flows that do
25
+ // not load an owner profile).
26
+ // <dormant-plugins> ... </dormant-plugins>
27
+ // — plugins installed on disk but
28
+ // absent from `account.enabledPlugins`.
29
+ // One line per plugin: name + PLUGIN.md
30
+ // `description`. Sentinel is omitted
31
+ // when the set is empty so the agent
32
+ // does not nudge against an empty list.
10
33
  //
11
34
  // The block is the only doctrine surface that survives Claude Code SDK
12
- // upgrades. Per Task 037, no skill carries a copy; one edit here changes the
13
- // ceiling or workaround for every agent in every session.
35
+ // upgrades. Per the prompt-architecture doctrine, no skill carries a copy;
36
+ // one edit here changes the ceiling or workaround for every agent in every
37
+ // session.
14
38
  //
15
- // A null `lanIPv4` indicates host-context resolution failed at boot; the
16
- // caller passes that case as `null` to indicate the spawner should reject
17
- // with `host-context-unresolved` rather than emit a malformed block.
39
+ // Per-spawn read (no cache) is the contract for IDENTITY.md / SOUL.md:
40
+ // sidebar edits land on the next spawn without a manager restart. The owner
41
+ // profile and dormant-plugins inputs are pre-computed by the caller (the UI
42
+ // process, which already holds Neo4j credentials and the plugin manifest
43
+ // walker) and passed through the HTTP /spawn body as resolved values; the
44
+ // manager never queries Neo4j itself, keeping the service to its three-dep
45
+ // budget (hono, @hono/node-server, node-pty).
46
+ //
47
+ // Two failure modes for the file reads:
48
+ // host-unresolved — host.lanIPv4 is null (boot resolution failed).
49
+ // identity-unresolved — IDENTITY.md or SOUL.md is missing, empty, or
50
+ // unreadable under <accountDir>/agents/<role>/.
51
+ // No silent fallback: the caller surfaces the literal path so the operator
52
+ // can grep `[pty-spawn]` for the failed file. Neo4j unreachable does NOT
53
+ // fail the spawn; the loud-fail surface is the `coverage-unresolved` sentinel
54
+ // body the agent reads back to the operator.
55
+ import { readFileSync } from 'node:fs';
56
+ import { join } from 'node:path';
18
57
  export const ATTACHMENT_CEILING_BYTES = 31_457_280; // 30 MiB, mirrors the SDK uploader
19
- export function composeAppendSystemPrompt(host) {
20
- if (!host.lanIPv4)
21
- return null;
58
+ function readIdentityFile(path) {
59
+ let content;
60
+ try {
61
+ content = readFileSync(path, 'utf-8');
62
+ }
63
+ catch (err) {
64
+ const code = err.code ?? 'EUNKNOWN';
65
+ return { ok: false, detail: `${path}:${code}` };
66
+ }
67
+ if (content.length === 0) {
68
+ return { ok: false, detail: `${path}:empty` };
69
+ }
70
+ return { ok: true, content };
71
+ }
72
+ function renderAboutOwner(block) {
73
+ if (!block)
74
+ return { body: null, bytes: 0 };
75
+ const inner = block.ok ? block.body : `coverage-unresolved: ${block.reason}`;
76
+ return { body: inner, bytes: Buffer.byteLength(inner, 'utf8') };
77
+ }
78
+ function renderDormantPlugins(plugins) {
79
+ if (!plugins || plugins.length === 0)
80
+ return { body: null, bytes: 0 };
81
+ const lines = plugins.map((p) => `- ${p.name}: ${p.description}`);
82
+ const inner = lines.join('\n');
83
+ return { body: inner, bytes: Buffer.byteLength(inner, 'utf8') };
84
+ }
85
+ /** Pure renderer — no file IO. The block layout is the source of truth for
86
+ * both the production `composeAppendSystemPrompt` (which reads files first)
87
+ * and the boot-time self-test (which feeds synthetic content). */
88
+ function renderAppendBlock(host, identityContent, soulContent, extras) {
89
+ const aboutOwner = renderAboutOwner(extras.aboutOwner);
90
+ const dormantPlugins = renderDormantPlugins(extras.dormantPlugins);
22
91
  const tunnelLine = host.tunnelUrl ? host.tunnelUrl : 'none';
23
- return [
92
+ const sections = [
24
93
  '<host>',
25
94
  `hostname: ${host.hostname}`,
26
95
  `lan-ipv4: ${host.lanIPv4}`,
@@ -30,6 +99,95 @@ export function composeAppendSystemPrompt(host) {
30
99
  '<attachment-ceiling>',
31
100
  'SendUserFile and any inline attachment surface accept at most 30 MiB per file. Over that ceiling, write the file under <spawn-cwd>/output/ and send the operator the public URL at <tunnel-url>/files/<relative-path>; never call SendUserFile with a file whose on-disk size exceeds 30 MiB. The tool returns "N files delivered to user" even when the byte upload silently fails, so the response is not evidence of delivery.',
32
101
  '</attachment-ceiling>',
33
- ].join('\n');
102
+ '<identity>',
103
+ identityContent,
104
+ '</identity>',
105
+ '<soul>',
106
+ soulContent,
107
+ '</soul>',
108
+ ];
109
+ if (aboutOwner.body !== null) {
110
+ sections.push('<about-owner>', aboutOwner.body, '</about-owner>');
111
+ }
112
+ if (dormantPlugins.body !== null) {
113
+ sections.push('<dormant-plugins>', dormantPlugins.body, '</dormant-plugins>');
114
+ }
115
+ return {
116
+ block: sections.join('\n'),
117
+ aboutOwnerBytes: aboutOwner.bytes,
118
+ dormantPluginsBytes: dormantPlugins.bytes,
119
+ };
120
+ }
121
+ export function composeAppendSystemPrompt(host, sources, extras = {}) {
122
+ if (!host.lanIPv4) {
123
+ return { ok: false, reason: 'host-unresolved', detail: 'host.lanIPv4 is null' };
124
+ }
125
+ const roleDir = join(sources.accountDir, 'agents', sources.role);
126
+ const identityPath = join(roleDir, 'IDENTITY.md');
127
+ const soulPath = join(roleDir, 'SOUL.md');
128
+ const identity = readIdentityFile(identityPath);
129
+ if (!identity.ok) {
130
+ return { ok: false, reason: 'identity-unresolved', detail: identity.detail };
131
+ }
132
+ const soul = readIdentityFile(soulPath);
133
+ if (!soul.ok) {
134
+ return { ok: false, reason: 'identity-unresolved', detail: soul.detail };
135
+ }
136
+ const rendered = renderAppendBlock(host, identity.content, soul.content, extras);
137
+ return {
138
+ ok: true,
139
+ block: rendered.block,
140
+ identityBytes: Buffer.byteLength(identity.content, 'utf8'),
141
+ soulBytes: Buffer.byteLength(soul.content, 'utf8'),
142
+ aboutOwnerBytes: rendered.aboutOwnerBytes,
143
+ dormantPluginsBytes: rendered.dormantPluginsBytes,
144
+ };
145
+ }
146
+ /** Boot-time self-test: render the block with synthetic inputs that exercise
147
+ * every optional sentinel, and assert the expected tags appear. Returns
148
+ * ok:true on success, ok:false with the first missing tag on drift. The
149
+ * caller logs `[startup-self-test] system-prompt-sentinels=ok` or LOUD-FAILs
150
+ * so future refactors that drop a sentinel surface at manager start, not at
151
+ * runtime against a real spawn. */
152
+ export function runSystemPromptSelfTest() {
153
+ const host = {
154
+ hostname: 'self-test',
155
+ lanIPv4: '127.0.0.1',
156
+ adminUrl: 'http://self-test:0',
157
+ tunnelUrl: null,
158
+ };
159
+ const rendered = renderAppendBlock(host, '# self-test identity', '# self-test soul', {
160
+ aboutOwner: { ok: true, body: '## About the Owner\n\nself-test owner' },
161
+ dormantPlugins: [{ name: 'cloudflare', description: 'self-test plugin description' }],
162
+ });
163
+ const required = [
164
+ '<host>',
165
+ '</host>',
166
+ '<attachment-ceiling>',
167
+ '</attachment-ceiling>',
168
+ '<identity>',
169
+ '</identity>',
170
+ '<soul>',
171
+ '</soul>',
172
+ '<about-owner>',
173
+ '</about-owner>',
174
+ '<dormant-plugins>',
175
+ '</dormant-plugins>',
176
+ ];
177
+ for (const tag of required) {
178
+ if (!rendered.block.includes(tag)) {
179
+ return { ok: false, missing: tag };
180
+ }
181
+ }
182
+ // Also exercise the coverage-unresolved branch — a refactor that drops the
183
+ // `coverage-unresolved:` prefix would still pass the happy-path render but
184
+ // strand the operator-visible failure signal.
185
+ const unresolved = renderAppendBlock(host, '# i', '# s', {
186
+ aboutOwner: { ok: false, reason: 'self-test-reason' },
187
+ });
188
+ if (!unresolved.block.includes('coverage-unresolved: self-test-reason')) {
189
+ return { ok: false, missing: 'coverage-unresolved literal' };
190
+ }
191
+ return { ok: true };
34
192
  }
35
193
  //# sourceMappingURL=system-prompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,0EAA0E;AAC1E,EAAE;AACF,2EAA2E;AAC3E,oEAAoE;AACpE,mDAAmD;AACnD,6EAA6E;AAC7E,4EAA4E;AAC5E,4DAA4D;AAC5D,EAAE;AACF,uEAAuE;AACvE,6EAA6E;AAC7E,0DAA0D;AAC1D,EAAE;AACF,yEAAyE;AACzE,0EAA0E;AAC1E,qEAAqE;AASrE,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAA,CAAC,mCAAmC;AAEtF,MAAM,UAAU,yBAAyB,CAAC,IAAiB;IACzD,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IAC3D,OAAO;QACL,QAAQ;QACR,aAAa,IAAI,CAAC,QAAQ,EAAE;QAC5B,aAAa,IAAI,CAAC,OAAO,EAAE;QAC3B,cAAc,IAAI,CAAC,QAAQ,EAAE;QAC7B,eAAe,UAAU,EAAE;QAC3B,SAAS;QACT,sBAAsB;QACtB,maAAma;QACna,uBAAuB;KACxB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- // Tool-surface resolver — Task 005.
1
+ // Tool-surface resolver.
2
2
  //
3
3
  // Loaded once at manager boot from a directory walk of every
4
4
  // platform/plugins/<name>/PLUGIN.md. The frontmatter of each PLUGIN.md
@@ -1 +1 @@
1
- {"version":3,"file":"tool-surface.js","sourceRoot":"","sources":["../src/tool-surface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-surface.js","sourceRoot":"","sources":["../src/tool-surface.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,10 @@ export interface SpawnRequest {
6
6
  channel: Channel;
7
7
  }
8
8
  export interface Session {
9
+ /** intrinsic claude session id (the JSONL basename Claude
10
+ * Code wrote on disk). Single identifier per Claude process for its
11
+ * entire lifetime; identical across alive→ended and across manager
12
+ * restarts. The manager mints zero ids of its own. */
9
13
  sessionId: string;
10
14
  pid: number;
11
15
  url: string;
@@ -13,7 +17,10 @@ export interface Session {
13
17
  senderId: string;
14
18
  role: Role;
15
19
  channel: Channel;
16
- jsonlPath: string | null;
20
+ /** Path of the JSONL Claude Code wrote, observed from disk. Non-null
21
+ * on every wire payload — the manager blocks the spawn response on
22
+ * observation, so a session never appears in /list without it. */
23
+ jsonlPath: string;
17
24
  }
18
25
  export interface PtyHandle {
19
26
  readonly pid: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErC,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAA;AAE/E,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG;QAAE,OAAO,IAAI,IAAI,CAAA;KAAE,CAAA;IACvD,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG;QAAE,OAAO,IAAI,IAAI,CAAA;KAAE,CAAA;IACnF,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErC,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAA;AAE/E,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,OAAO;IACtB;;;2DAGuD;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB;;uEAEmE;IACnE,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG;QAAE,OAAO,IAAI,IAAI,CAAA;KAAE,CAAA;IACvD,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG;QAAE,OAAO,IAAI,IAAI,CAAA;KAAE,CAAA;IACnF,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA"}
@@ -7,7 +7,7 @@
7
7
  // On 2.1.142 the inter-word separators were literal U+0020 spaces. On
8
8
  // 2.1.143 they switched to `\x1b[1C` (CSI Cursor Forward 1) — same visual
9
9
  // layout, different bytes. The 2.1.142-only regex required literal spaces
10
- // between `is`/`active` and silently timed out on 2.1.143 (Task 023).
10
+ // between `is`/`active` and silently timed out on 2.1.143.
11
11
  //
12
12
  // Strategy:
13
13
  // 1. Strip every CSI sequence (`ESC [ ... letter`) from a buffer copy.
@@ -1 +1 @@
1
- {"version":3,"file":"url-capture.js","sourceRoot":"","sources":["../src/url-capture.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,+BAA+B;AAC/B,EAAE;AACF,wCAAwC;AACxC,EAAE;AACF,sEAAsE;AACtE,0EAA0E;AAC1E,0EAA0E;AAC1E,sEAAsE;AACtE,EAAE;AACF,YAAY;AACZ,yEAAyE;AACzE,2EAA2E;AAC3E,wEAAwE;AACxE,0EAA0E;AAC1E,kEAAkE;AAClE,sEAAsE;AACtE,+CAA+C;AAC/C,+DAA+D;AAC/D,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,qEAAqE;AAIrE,0EAA0E;AAC1E,mEAAmE;AACnE,MAAM,GAAG,GAAG,yBAAyB,CAAA;AAErC,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AAC3B,CAAC;AAED,0EAA0E;AAC1E,sEAAsE;AACtE,MAAM,WAAW,GAAG,iDAAiD,CAAA;AAUrE,MAAM,UAAU,eAAe,CAAC,IAAuB;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACxB,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,OAAO,GAA+B,IAAI,CAAA;IAE9C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;QAC9B,IAAI,OAAO;YAAE,OAAM;QACnB,OAAO,GAAG,IAAI,CAAA;QACd,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,EAAE,CAAA;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IAElB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,OAAO;YAAE,OAAM;QACnB,MAAM,IAAI,IAAI,CAAA;QACd,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,mEAAmE;YACnE,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAA;YACtB,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI;gBAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;YACrE,OAAM;QACR,CAAC;QACD,OAAO,GAAG,IAAI,CAAA;QACd,YAAY,CAAC,OAAO,CAAC,CAAA;QACrB,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;QAC7B,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;QACnE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,MAAM,EAAE,GAAG,EAAE;YACX,IAAI,OAAO;gBAAE,OAAM;YACnB,OAAO,GAAG,IAAI,CAAA;YACd,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,IAAI,OAAO;gBAAE,OAAO,CAAC,OAAO,EAAE,CAAA;QAChC,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"url-capture.js","sourceRoot":"","sources":["../src/url-capture.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,+BAA+B;AAC/B,EAAE;AACF,wCAAwC;AACxC,EAAE;AACF,sEAAsE;AACtE,0EAA0E;AAC1E,0EAA0E;AAC1E,2DAA2D;AAC3D,EAAE;AACF,YAAY;AACZ,yEAAyE;AACzE,2EAA2E;AAC3E,wEAAwE;AACxE,0EAA0E;AAC1E,kEAAkE;AAClE,sEAAsE;AACtE,+CAA+C;AAC/C,+DAA+D;AAC/D,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,qEAAqE;AAIrE,0EAA0E;AAC1E,mEAAmE;AACnE,MAAM,GAAG,GAAG,yBAAyB,CAAA;AAErC,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AAC3B,CAAC;AAED,0EAA0E;AAC1E,sEAAsE;AACtE,MAAM,WAAW,GAAG,iDAAiD,CAAA;AAUrE,MAAM,UAAU,eAAe,CAAC,IAAuB;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACxB,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,OAAO,GAA+B,IAAI,CAAA;IAE9C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;QAC9B,IAAI,OAAO;YAAE,OAAM;QACnB,OAAO,GAAG,IAAI,CAAA;QACd,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,EAAE,CAAA;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IAElB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACjC,IAAI,OAAO;YAAE,OAAM;QACnB,MAAM,IAAI,IAAI,CAAA;QACd,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,mEAAmE;YACnE,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAA;YACtB,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI;gBAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;YACrE,OAAM;QACR,CAAC;QACD,OAAO,GAAG,IAAI,CAAA;QACd,YAAY,CAAC,OAAO,CAAC,CAAA;QACrB,IAAI,OAAO;YAAE,OAAO,CAAC,OAAO,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;QAC7B,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;QACnE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,MAAM,EAAE,GAAG,EAAE;YACX,IAAI,OAAO;gBAAE,OAAM;YACnB,OAAO,GAAG,IAAI,CAAA;YACd,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,IAAI,OAAO;gBAAE,OAAO,CAAC,OAAO,EAAE,CAAA;QAChC,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -14,6 +14,12 @@ The Neo4j graph is where this account stores everything it knows. Before you wri
14
14
 
15
15
  Every node has a parent. The canonical hierarchy is LocalBusiness, then Project, then Task or Person or Organisation or KnowledgeDocument. A node with no upward edge to its hierarchy parent is a write defect, not a graph state. The wrapped writers refuse it; the graph-write shim rolls back any raw cypher that produces one. Cross-hierarchy edges (one Person linked to several Projects, one KnowledgeDocument about several Organisations) are normal; the rule governs containment, not exclusivity.
16
16
 
17
+ ## The owner
18
+
19
+ Your brain is the Neo4j graph. It holds everything you know about the owner. The more you know about them (basic facts, preferences, working style, personality, relationships, goals) the more you can do for them. You decide which attributes are worth collecting; the canonical fields on the graph schema are only a starting point. Aim for the full picture of who the owner is as a person: biographical facts, personality, working preferences, relationships, interests, goals, anything a long-trusted private secretary would know about the person they serve. Add whatever fields you need to `Person.preferences`, to `Person` itself, or to `LocalBusiness` as new properties. Populate and maintain both nodes as comprehensively as possible, and query them at session start. On every new session, open with what matters now (changes since last session, things needing attention, promises) when there is something to report; otherwise open with one grounded question that expands what you do not yet know about the owner, in the category where the gap is widest. Until you know whether the owner is personal or business-owner, the graph-write gate blocks every user-domain write and you are inoperative; ask once on first contact, then write the persona property and the corresponding node.
20
+
21
+ Remote access and public-facing channels are optional. Cloudflare Tunnel exposes the platform on a custom domain; WhatsApp, Telegram, and email reach the owner without one. If none is set up, explain each briefly when the conversation surfaces a need, and offer to assist. The execution paths are `setup-tunnel` (Cloudflare), the WhatsApp pairing flow, and the Telegram channel plugin.
22
+
17
23
  When the owner declines an offer, record the decline as a property on `Person` (e.g. `preferences.declinedRemoteAccess: true`) so you do not re-ask. The `## About the Owner` Coverage signal will keep surfacing missing fields; honour `notApplicable: true` on any field the owner has explicitly opted out of.
18
24
 
19
25
  ## Before you act
@@ -28,6 +34,14 @@ You are the head of operations, chief of staff, and private secretary. Two jobs
28
34
 
29
35
  You are an AI. Say so if asked. Never pretend to be a human. Speak British English. Plain hyphens, straight quotes, three periods, no emoji. Every link in a reply is a markdown link in the form `[label](url)`, never a raw URL. Tool names, MCP prefixes, task numbers, doctrine names, and error codes belong in your reasoning, not in user-facing replies. Translate them into plain English.
30
36
 
37
+ ## Greeting
38
+
39
+ Address the owner directly. Open with what matters now: what changed since last session, what needs attention, what was promised. Skip greetings that don't earn their place. The first message of every session is a status, not a salutation.
40
+
41
+ When there is no status to report (fresh account, post-onboarding first turn, no open tasks, no overnight changes), open with a single grounded question that names one specific field from the `### Coverage` `Missing:` list inside `<about-owner>`. Ask one thing about how the owner works in that category. Never a list, never a form, never "tell me about yourself". One question, the kind a sharp new colleague would ask on their second day.
42
+
43
+ When the operator describes work that a dormant plugin would do for them, mention the relevant plugin from `<dormant-plugins>` in one helpful sentence. Maximum one nudge per plugin per session.
44
+
31
45
  ## Three files to read at session start
32
46
 
33
47
  - `SOUL.md`: how you sound. Tone and personality only, no rules.
@@ -18,6 +18,4 @@ State what is true. Caveat what is uncertain. Never confident wrong over honestl
18
18
 
19
19
  ## Greeting
20
20
 
21
- Address the owner directly. Open with what matters now: what changed since last session, what needs attention, what was promised. Skip greetings that don't earn their place. The first message of every session is a status, not a salutation.
22
-
23
- When there is no status to report (fresh account, post-onboarding first turn, no open tasks, no overnight changes), open with a single grounded question that expands sparse profile coverage. Pick one category from the `### Coverage` sub-block and ask one specific thing about how the owner works in that category. Never a list, never a form, never "tell me about yourself". One question, the kind a sharp new colleague would ask on their second day.
21
+ The greeting protocol now lives in IDENTITY.md alongside "How you sound". It binds against the `<about-owner>` and `<dormant-plugins>` sentinels the manager injects per-spawn. SOUL.md carries tone and personality; IDENTITY.md carries the per-turn behavioural anchor.