@rubytech/create-maxy-code 0.1.39 → 0.1.41

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 (132) hide show
  1. package/dist/index.js +35 -101
  2. package/dist/uninstall.js +11 -102
  3. package/package.json +1 -1
  4. package/payload/platform/lib/mcp-stderr-tee/package.json +7 -0
  5. package/payload/platform/plugins/admin/hooks/turn-completed-graph-write.sh +142 -52
  6. package/payload/platform/plugins/docs/references/deployment.md +7 -3
  7. package/payload/platform/plugins/docs/references/platform.md +18 -4
  8. package/payload/platform/plugins/docs/references/plugins-guide.md +2 -0
  9. package/payload/platform/services/claude-session-manager/dist/config.d.ts +17 -0
  10. package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
  11. package/payload/platform/services/claude-session-manager/dist/config.js +37 -1
  12. package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
  13. package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts +54 -0
  14. package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -0
  15. package/payload/platform/services/claude-session-manager/dist/fs-watcher.js +516 -0
  16. package/payload/platform/services/claude-session-manager/dist/fs-watcher.js.map +1 -0
  17. package/payload/platform/services/claude-session-manager/dist/hooks-discovery.d.ts +7 -0
  18. package/payload/platform/services/claude-session-manager/dist/hooks-discovery.d.ts.map +1 -0
  19. package/payload/platform/services/claude-session-manager/dist/hooks-discovery.js +90 -0
  20. package/payload/platform/services/claude-session-manager/dist/hooks-discovery.js.map +1 -0
  21. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +3 -1
  22. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  23. package/payload/platform/services/claude-session-manager/dist/http-server.js +426 -204
  24. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  25. package/payload/platform/services/claude-session-manager/dist/index.js +60 -13
  26. package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
  27. package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts +2 -0
  28. package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts.map +1 -1
  29. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +11 -6
  30. package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
  31. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +40 -45
  32. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  33. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +146 -162
  34. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  35. package/payload/platform/services/claude-session-manager/dist/reaper.d.ts +24 -0
  36. package/payload/platform/services/claude-session-manager/dist/reaper.d.ts.map +1 -0
  37. package/payload/platform/services/claude-session-manager/dist/reaper.js +114 -0
  38. package/payload/platform/services/claude-session-manager/dist/reaper.js.map +1 -0
  39. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +16 -41
  40. package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
  41. package/payload/platform/services/claude-session-manager/dist/session-store.js +29 -68
  42. package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
  43. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +54 -0
  44. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  45. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +111 -0
  46. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  47. package/payload/platform/templates/agents/admin/IDENTITY.md +4 -2
  48. package/payload/platform/templates/agents/admin/SOUL.md +8 -14
  49. package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.d.ts +51 -0
  50. package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.d.ts.map +1 -0
  51. package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.js +196 -0
  52. package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.js.map +1 -0
  53. package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/package.json +7 -0
  54. package/payload/server/{chunk-NNHHGQJL.js → chunk-4P2MPERV.js} +6 -163
  55. package/payload/server/{chunk-3G6JMV7N.js → chunk-MEGIQYUD.js} +1 -1
  56. package/payload/server/{chunk-QC5LHYPH.js → chunk-XJVJ2B2Q.js} +1 -1
  57. package/payload/server/{cloudflare-task-tracker-NEB3X6O2.js → cloudflare-task-tracker-R6MMORFU.js} +2 -2
  58. package/payload/server/maxy-edge.js +2 -2
  59. package/payload/server/public/assets/{Checkbox-CmCjmfJy.js → Checkbox-blxv2XPY.js} +1 -1
  60. package/payload/server/public/assets/{admin-CtodW6As.js → admin-C3EvHpLN.js} +1 -1
  61. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-CfOjbx0H.js → architectureDiagram-Q4EWVU46-bETsVzGS.js} +1 -1
  62. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-D0kA2C9i.js → blockDiagram-DXYQGD6D-5y0GBnfQ.js} +1 -1
  63. package/payload/server/public/assets/{brand-6hKfBgOI.css → brand-DQlLKLDH.css} +1 -1
  64. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-CDgXiXgj.js → c4Diagram-AHTNJAMY-C1znpVGu.js} +1 -1
  65. package/payload/server/public/assets/channel-BWqTaXzb.js +1 -0
  66. package/payload/server/public/assets/{chunk-336JU56O-BfBTcT5X.js → chunk-336JU56O-DlCVUGzQ.js} +2 -2
  67. package/payload/server/public/assets/{chunk-426QAEUC-BdSSZ1Kw.js → chunk-426QAEUC-bGYkmA4z.js} +1 -1
  68. package/payload/server/public/assets/{chunk-4TB4RGXK-UvE1im9g.js → chunk-4TB4RGXK-6Sb0Undm.js} +1 -1
  69. package/payload/server/public/assets/{chunk-5FUZZQ4R-Dx4DslXz.js → chunk-5FUZZQ4R-CAT_Pq2T.js} +1 -1
  70. package/payload/server/public/assets/{chunk-5PVQY5BW-CNHawhLJ.js → chunk-5PVQY5BW-j231ESse.js} +1 -1
  71. package/payload/server/public/assets/{chunk-EDXVE4YY-Rmjv-1et.js → chunk-EDXVE4YY-BAlS4QL7.js} +1 -1
  72. package/payload/server/public/assets/{chunk-ENJZ2VHE-CL-LeH3r.js → chunk-ENJZ2VHE-D3Ku_BMP.js} +1 -1
  73. package/payload/server/public/assets/{chunk-ICPOFSXX-B2MFOJDt.js → chunk-ICPOFSXX-AR86A5WB.js} +1 -1
  74. package/payload/server/public/assets/{chunk-OYMX7WX6-BxcIcCt5.js → chunk-OYMX7WX6-DxGhapkW.js} +1 -1
  75. package/payload/server/public/assets/{chunk-U2HBQHQK-COzwOBrY.js → chunk-U2HBQHQK-DAlqsDo_.js} +1 -1
  76. package/payload/server/public/assets/{chunk-X2U36JSP-B0rjT5hL.js → chunk-X2U36JSP-lZdkkdyB.js} +1 -1
  77. package/payload/server/public/assets/{chunk-YZCP3GAM-pwrIw0XH.js → chunk-YZCP3GAM-CCjtXOFD.js} +1 -1
  78. package/payload/server/public/assets/{chunk-ZZ45TVLE-BXpeAm0k.js → chunk-ZZ45TVLE-ComtdKny.js} +1 -1
  79. package/payload/server/public/assets/classDiagram-6PBFFD2Q-B9hC6fOR.js +1 -0
  80. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-afl_ydIG.js +1 -0
  81. package/payload/server/public/assets/clone-Lj83OaZ3.js +1 -0
  82. package/payload/server/public/assets/{dagre-DjOJn05k.js → dagre-DX8QJeVt.js} +1 -1
  83. package/payload/server/public/assets/{dagre-KV5264BT-PczvQiEh.js → dagre-KV5264BT-BcRbiZ1q.js} +1 -1
  84. package/payload/server/public/assets/data-CS_R5VWQ.js +1 -0
  85. package/payload/server/public/assets/{device-url-actions-C55ZS_Zg.js → device-url-actions-Cag9IJ7n.js} +1 -1
  86. package/payload/server/public/assets/{diagram-5BDNPKRD-D477xo5F.js → diagram-5BDNPKRD-Bw47VwHO.js} +1 -1
  87. package/payload/server/public/assets/{diagram-G4DWMVQ6-C-HAtbtT.js → diagram-G4DWMVQ6-B-aVfhiD.js} +1 -1
  88. package/payload/server/public/assets/{diagram-MMDJMWI5-B9wus4H0.js → diagram-MMDJMWI5-DERz2dKo.js} +1 -1
  89. package/payload/server/public/assets/{diagram-TYMM5635-UMZLloFr.js → diagram-TYMM5635-B7eEX9Ta.js} +1 -1
  90. package/payload/server/public/assets/{erDiagram-SMLLAGMA-B8E52Mp4.js → erDiagram-SMLLAGMA-G_JJq3zB.js} +1 -1
  91. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-CUel34tq.js → flowDiagram-DWJPFMVM-BeY9QaO0.js} +1 -1
  92. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BfwE-Xav.js → ganttDiagram-T4ZO3ILL-IXviGYnx.js} +1 -1
  93. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-2d6tXRIM.js → gitGraphDiagram-UUTBAWPF-GlY6pZQ1.js} +1 -1
  94. package/payload/server/public/assets/graph-DtGkQBFr.js +1 -0
  95. package/payload/server/public/assets/graph-labels-Dwu1ON5v.js +1 -0
  96. package/payload/server/public/assets/{graphlib-CCo9-wNJ.js → graphlib-BWgAjZSb.js} +1 -1
  97. package/payload/server/public/assets/{infoDiagram-42DDH7IO-DB1SVWL6.js → infoDiagram-42DDH7IO-D4YZM0gD.js} +1 -1
  98. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-CdeMUTYS.js → ishikawaDiagram-UXIWVN3A-fR71GDOp.js} +1 -1
  99. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-D8x8TUoc.js → journeyDiagram-VCZTEJTY-C1TcY_6m.js} +1 -1
  100. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Cmkhd1mO.js → kanban-definition-6JOO6SKY-IPZKpnnG.js} +1 -1
  101. package/payload/server/public/assets/{line-CoHkpBv3.js → line-B2JtEL1B.js} +1 -1
  102. package/payload/server/public/assets/{mermaid-parser.core-C7R2PfZC.js → mermaid-parser.core-BKCLXqUh.js} +1 -1
  103. package/payload/server/public/assets/{mermaid.core-lQaq-kll.js → mermaid.core-CmNpCLB-.js} +3 -3
  104. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CsPq3pX1.js → mindmap-definition-QFDTVHPH-BS0E2FPD.js} +1 -1
  105. package/payload/server/public/assets/{page-DwEaAdVp.js → page-BdI3GCun.js} +1 -1
  106. package/payload/server/public/assets/{page-CBKzjUHO.js → page-zIjAkU2y.js} +1 -1
  107. package/payload/server/public/assets/{pieDiagram-DEJITSTG-FZH9sTnP.js → pieDiagram-DEJITSTG-J61JDyk8.js} +1 -1
  108. package/payload/server/public/assets/{public-hGLzxhE_.js → public-C5vaQnC_.js} +4 -4
  109. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-9poxfoqh.js → quadrantDiagram-34T5L4WZ-CLI03OtR.js} +1 -1
  110. package/payload/server/public/assets/{requirementDiagram-MS252O5E-Ce7iOdT_.js → requirementDiagram-MS252O5E-C8MCt5NO.js} +1 -1
  111. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-DINuXatI.js → sankeyDiagram-XADWPNL6-DQuugruj.js} +1 -1
  112. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-CSMec3EK.js → sequenceDiagram-FGHM5R23-CoYitwhO.js} +1 -1
  113. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-15DKzypj.js → stateDiagram-FHFEXIEX-G68cHHoI.js} +1 -1
  114. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Dtgpgr_D.js +1 -0
  115. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BxIRc9Pu.js → timeline-definition-GMOUNBTQ-CelLeJVS.js} +1 -1
  116. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-DdgRyU55.js → vennDiagram-DHZGUBPP-BVgFPkJq.js} +1 -1
  117. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-CKvhU1Uj.js → wardleyDiagram-NUSXRM2D-CzD_8hl2.js} +1 -1
  118. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-d0V1V4PD.js → xychartDiagram-5P7HB3ND-BuTxWdX5.js} +1 -1
  119. package/payload/server/public/data.html +5 -5
  120. package/payload/server/public/graph.html +6 -6
  121. package/payload/server/public/index.html +8 -8
  122. package/payload/server/public/public.html +5 -5
  123. package/payload/server/server.js +1058 -846
  124. package/payload/server/public/assets/channel-DA7MGMzQ.js +0 -1
  125. package/payload/server/public/assets/classDiagram-6PBFFD2Q-DqfmcWSr.js +0 -1
  126. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BVOMSbZ_.js +0 -1
  127. package/payload/server/public/assets/clone-Byp7hagU.js +0 -1
  128. package/payload/server/public/assets/data-A7azIkZU.js +0 -1
  129. package/payload/server/public/assets/graph-Dx83EhtP.js +0 -1
  130. package/payload/server/public/assets/graph-labels-Bg2Bzelb.js +0 -1
  131. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-AcaK_QfD.js +0 -1
  132. /package/payload/server/public/assets/{brand-DXOx08r0.js → brand-D6mXeyxV.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reaper.js","sourceRoot":"","sources":["../src/reaper.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,0EAA0E;AAC1E,8EAA8E;AAC9E,2EAA2E;AAC3E,6EAA6E;AAC7E,8BAA8B;AAC9B,EAAE;AACF,uCAAuC;AACvC,4DAA4D;AAC5D,wEAAwE;AACxE,yEAAyE;AACzE,4DAA4D;AAC5D,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,qEAAqE;AAwBrE,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC1C,IAAI,KAAK,GAA0B,IAAI,CAAA;IACvC,IAAI,WAAW,GAAwB,IAAI,CAAA;IAC3C,IAAI,OAAO,GAAG,KAAK,CAAA;IAEnB,SAAS,UAAU,CAAC,GAAe;QACjC,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;QACpC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,KAAK,CAAA;QACvC,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI;YAAE,OAAO,KAAK,CAAA;QACxC,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,KAAK,CAAA;QACtC,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,CAAA;QACpC,OAAO,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAA;IACxC,CAAC;IAED,SAAS,OAAO,CAAC,GAAe;QAC9B,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,CAAA;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC1C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC;gBAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC;gBACtC,2DAA2D;YAC7D,CAAC;YACD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC;wBAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YACpB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAA;QAC5C,CAAC;QACD,IAAI,CAAC,MAAM,CACT,6BAA6B,GAAG,CAAC,SAAS,UAAU,GAAG,CAAC,KAAK,YAAY,MAAM,wBAAwB,CACxG,CAAA;IACH,CAAC;IAED,SAAS,QAAQ;QACf,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;YAC/B,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;YACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,CAAA;oBACZ,MAAM,IAAI,CAAC,CAAA;gBACb,CAAC;YACH,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,8BAA8B,OAAO,WAAW,MAAM,EAAE,CAAC,CAAA;QACvE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAChE,IAAI,CAAC,MAAM,CAAC,gCAAgC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACxE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAA;IAC5B,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,OAAO;YAAE,OAAM;QACnB,OAAO,GAAG,IAAI,CAAA;QACd,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QAC9C,kEAAkE;QAClE,gEAAgE;QAChE,oEAAoE;QACpE,mCAAmC;QACnC,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;YAAE,KAAK,CAAC,KAAK,EAAE,CAAA;QACpD,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7C,kEAAkE;YAClE,gEAAgE;YAChE,yCAAyC;YACzC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK;gBAAE,OAAM;YAClC,QAAQ,EAAE,CAAA;QACZ,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CACT,+BAA+B,IAAI,CAAC,UAAU,sBAAsB,IAAI,CAAC,iBAAiB,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAC7H,CAAA;IACH,CAAC;IAED,SAAS,IAAI;QACX,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,IAAI,KAAK,EAAE,CAAC;YAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAAC,KAAK,GAAG,IAAI,CAAA;QAAC,CAAC;QACjD,IAAI,WAAW,EAAE,CAAC;YAAC,WAAW,EAAE,CAAC;YAAC,WAAW,GAAG,IAAI,CAAA;QAAC,CAAC;QACtD,OAAO,GAAG,KAAK,CAAA;QACf,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAClC,CAAC"}
@@ -1,63 +1,38 @@
1
1
  import type { PtyHandle, Role, Channel } from './types.js';
2
2
  export interface StoredSession {
3
- /** URL bridge suffix captured from the /remote-control URL. Stable for
4
- * the row's entire alive lifetime — never null, never replaced. Surfaced
5
- * as the row's `sessionId` on every wire response so the UI mounts its
6
- * pane against this identifier from t=0 (URL capture). */
3
+ /** Intrinsic Claude session id (UUID). Stable for the row's lifetime. */
4
+ sessionId: string;
5
+ /** "session_<suffix>" form from the PID file. Stable, never null after
6
+ * /spawn returns (the spawn promise resolves on PID-file event). */
7
+ bridgeSessionId: string;
8
+ /** Suffix-only convenience field (no "session_" prefix). */
7
9
  bridgeSuffix: string;
8
- /** Intrinsic claude session id — the JSONL basename Claude Code wrote.
9
- * Null between URL capture and the first turn the operator types (claude
10
- * defers JSONL write to the first turn). Filled when the jsonl-observer
11
- * fires; thereafter equals the intrinsic id forever. */
12
- claudeSessionId: string | null;
13
10
  pid: number;
14
- url: string;
11
+ /** URL from the `/remote-control` banner. Null until url-capture fires;
12
+ * may stay null forever if the banner never lands. The UI tolerates
13
+ * null. */
14
+ url: string | null;
15
15
  startedAt: string;
16
16
  senderId: string;
17
17
  role: Role;
18
18
  channel: Channel;
19
- /** Path of the JSONL Claude Code wrote, observed from disk by the
20
- * jsonl-observer. Null until promotion fires (mirrors claudeSessionId). */
19
+ /** Set on the JSONL CREATE event the http-server subscribes to. Null
20
+ * until the operator types the first turn. */
21
21
  jsonlPath: string | null;
22
22
  pty: PtyHandle;
23
23
  exited: boolean;
24
- /** Background spawns (per-turn database-operator recorder, future
25
- * out-of-band specialists) set `hidden: true` at /spawn time. /list
26
- * filters them out by default so they never appear in the sidebar,
27
- * the operator URL, or the artefact pane; /list?includeHidden=1
28
- * surfaces them for diagnostics. Defaults to false. */
29
24
  hidden: boolean;
30
- /** Specialist agent name passed as `--agent <name>` to claude when the
31
- * spawn should land inside a specific specialist (database-operator,
32
- * etc.). Null on user-facing spawns. */
33
25
  specialist: string | null;
34
26
  }
35
27
  export declare class SessionStore {
36
- /** Keyed by the row's stable surface id (bridge suffix). Lookup-by-bridge
37
- * is the alive-row contract. */
38
- private readonly byBridge;
39
- /** Filled at promotion time so /list, /meta, /log routes resolve the
40
- * intrinsic id to the same StoredSession the bridge id resolves to. */
41
- private readonly byClaude;
42
- /** Register a freshly-spawned session (claudeSessionId null, jsonlPath
43
- * null). The row becomes visible to /list immediately. */
44
- addPending(s: StoredSession): void;
45
- /** Resolve by either the bridge suffix or the intrinsic claudeSessionId.
46
- * Returns the same StoredSession in either case once promotion has
47
- * fired. */
48
- get(id: string): StoredSession | undefined;
49
- /** Remove by either id. Drops both index entries. */
50
- remove(id: string): StoredSession | undefined;
28
+ private readonly bySessionId;
29
+ add(s: StoredSession): void;
30
+ get(sessionId: string): StoredSession | undefined;
31
+ remove(sessionId: string): StoredSession | undefined;
51
32
  listBySender(senderId: string, opts?: {
52
33
  includeHidden?: boolean;
53
34
  }): StoredSession[];
54
35
  all(): StoredSession[];
55
36
  size(): number;
56
- /** Bind a pending row to its newly-observed `claudeSessionId` + JSONL
57
- * path. Idempotent: a second call on an already-promoted row updates
58
- * nothing. Returns the StoredSession on success, null when no row
59
- * exists for the bridge suffix (operator already deleted it, or the
60
- * PTY exited before observation fired). */
61
- promote(bridgeSuffix: string, claudeSessionId: string, jsonlPath: string): StoredSession | null;
62
37
  }
63
38
  //# sourceMappingURL=session-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B;;;+DAG2D;IAC3D,YAAY,EAAE,MAAM,CAAA;IACpB;;;6DAGyD;IACzD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,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;gFAC4E;IAC5E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,GAAG,EAAE,SAAS,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;IACf;;;;4DAIwD;IACxD,MAAM,EAAE,OAAO,CAAA;IACf;;6CAEyC;IACzC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,qBAAa,YAAY;IACvB;qCACiC;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D;4EACwE;IACxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAE5D;+DAC2D;IAC3D,UAAU,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAIlC;;iBAEa;IACb,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,qDAAqD;IACrD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAQ7C,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,aAAa,EAAE;IAWvF,GAAG,IAAI,aAAa,EAAE;IAItB,IAAI,IAAI,MAAM;IAId;;;;gDAI4C;IAC5C,OAAO,CACL,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,GAChB,aAAa,GAAG,IAAI;CASxB"}
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAA;IACjB;yEACqE;IACrE,eAAe,EAAE,MAAM,CAAA;IACvB,4DAA4D;IAC5D,YAAY,EAAE,MAAM,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX;;gBAEY;IACZ,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;IAChB;mDAC+C;IAC/C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,GAAG,EAAE,SAAS,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;IAE/D,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI;IAI3B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAOpD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,aAAa,EAAE;IAWvF,GAAG,IAAI,aAAa,EAAE;IAItB,IAAI,IAAI,MAAM;CAGf"}
@@ -1,64 +1,41 @@
1
- // In-memory session store. One identifier per Claude process, but the
2
- // spawn-time window between PTY creation and Claude Code writing its first
3
- // JSONL line is now unbounded: claude does not write the JSONL until the
4
- // operator types the first turn (verified Pi 2.1.143 and Mac 2.1.128).
1
+ // In-memory PTY-handle store. The canonical row index now lives in the
2
+ // fs-watcher (sessions/<pid>.json + projects/<slug>/<sid>.jsonl). This
3
+ // store only tracks the live PTY handles the manager itself spawned
4
+ // the watcher cannot expose those (they aren't on disk). Lookups by
5
+ // alternative identifiers (bridgeSuffix, pid, bridgeSessionId) go through
6
+ // the watcher first to resolve to the canonical sessionId; the store is
7
+ // then keyed solely on sessionId.
5
8
  //
6
- // Lifecycle spans the full PTY lifetime:
7
- //
8
- // pending — created when /spawn captures the /remote-control URL.
9
- // The row is keyed by the URL `bridgeSuffix` (the substring
10
- // after `session_` in the URL). `claudeSessionId` is null;
11
- // `jsonlPath` is null. The /spawn response returns at this
12
- // point, so the operator sees a usable row inside ~2 s even
13
- // when they never type.
14
- //
15
- // promoted — fires later (seconds or minutes, gated on operator typing)
16
- // when `jsonl-observer` matches a JSONL on disk whose head
17
- // bytes carry the bridge suffix. `claudeSessionId` is filled
18
- // with the intrinsic JSONL basename, `jsonlPath` is set, and
19
- // the same StoredSession is also registered under the
20
- // intrinsic id so GET routes resolve either id to the same
21
- // row.
22
- //
23
- // ended — operator deletes the row, the PTY exits, or the manager
24
- // restarts. Promoted rows stay enumerable from disk via the
25
- // JSONL transcript. Pending rows that never promoted have no
26
- // JSONL and disappear cleanly on delete.
27
- //
28
- // The store mints zero ids of its own. The bridge suffix is claude's, the
29
- // intrinsic id is claude's. The manager only observes them.
9
+ // Lifecycle:
10
+ // - pty-spawner awaits the PID-file CREATE event from the watcher
11
+ // before returning a /spawn response. The store row is registered at
12
+ // that point with sessionId known and bridgeSessionId carried from
13
+ // the PID file. There is no "pre-promotion" pending state — by the
14
+ // time /spawn returns, sessionId is final.
15
+ // - URL capture continues in parallel; the row's `url` field is
16
+ // mutated in place when the URL banner fires (may arrive before or
17
+ // after the PID-file event; both orderings are safe).
18
+ // - JSONL appears on first operator turn; the watcher fills the row's
19
+ // jsonlPath via direct mutation from the http-server's subscriber.
30
20
  export class SessionStore {
31
- /** Keyed by the row's stable surface id (bridge suffix). Lookup-by-bridge
32
- * is the alive-row contract. */
33
- byBridge = new Map();
34
- /** Filled at promotion time so /list, /meta, /log routes resolve the
35
- * intrinsic id to the same StoredSession the bridge id resolves to. */
36
- byClaude = new Map();
37
- /** Register a freshly-spawned session (claudeSessionId null, jsonlPath
38
- * null). The row becomes visible to /list immediately. */
39
- addPending(s) {
40
- this.byBridge.set(s.bridgeSuffix, s);
21
+ bySessionId = new Map();
22
+ add(s) {
23
+ this.bySessionId.set(s.sessionId, s);
41
24
  }
42
- /** Resolve by either the bridge suffix or the intrinsic claudeSessionId.
43
- * Returns the same StoredSession in either case once promotion has
44
- * fired. */
45
- get(id) {
46
- return this.byBridge.get(id) ?? this.byClaude.get(id);
25
+ get(sessionId) {
26
+ return this.bySessionId.get(sessionId);
47
27
  }
48
- /** Remove by either id. Drops both index entries. */
49
- remove(id) {
50
- const s = this.get(id);
28
+ remove(sessionId) {
29
+ const s = this.bySessionId.get(sessionId);
51
30
  if (!s)
52
31
  return undefined;
53
- this.byBridge.delete(s.bridgeSuffix);
54
- if (s.claudeSessionId !== null)
55
- this.byClaude.delete(s.claudeSessionId);
32
+ this.bySessionId.delete(sessionId);
56
33
  return s;
57
34
  }
58
35
  listBySender(senderId, opts = {}) {
59
36
  const includeHidden = opts.includeHidden === true;
60
37
  const out = [];
61
- for (const s of this.byBridge.values()) {
38
+ for (const s of this.bySessionId.values()) {
62
39
  if (s.senderId !== senderId)
63
40
  continue;
64
41
  if (!includeHidden && s.hidden)
@@ -68,26 +45,10 @@ export class SessionStore {
68
45
  return out;
69
46
  }
70
47
  all() {
71
- return [...this.byBridge.values()];
48
+ return [...this.bySessionId.values()];
72
49
  }
73
50
  size() {
74
- return this.byBridge.size;
75
- }
76
- /** Bind a pending row to its newly-observed `claudeSessionId` + JSONL
77
- * path. Idempotent: a second call on an already-promoted row updates
78
- * nothing. Returns the StoredSession on success, null when no row
79
- * exists for the bridge suffix (operator already deleted it, or the
80
- * PTY exited before observation fired). */
81
- promote(bridgeSuffix, claudeSessionId, jsonlPath) {
82
- const s = this.byBridge.get(bridgeSuffix);
83
- if (!s)
84
- return null;
85
- if (s.claudeSessionId !== null)
86
- return s;
87
- s.claudeSessionId = claudeSessionId;
88
- s.jsonlPath = jsonlPath;
89
- this.byClaude.set(claudeSessionId, s);
90
- return s;
51
+ return this.bySessionId.size;
91
52
  }
92
53
  }
93
54
  //# sourceMappingURL=session-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,2EAA2E;AAC3E,yEAAyE;AACzE,uEAAuE;AACvE,EAAE;AACF,yCAAyC;AACzC,EAAE;AACF,sEAAsE;AACtE,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,0EAA0E;AAC1E,sCAAsC;AACtC,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,2EAA2E;AAC3E,2EAA2E;AAC3E,oEAAoE;AACpE,yEAAyE;AACzE,qBAAqB;AACrB,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,2EAA2E;AAC3E,uDAAuD;AACvD,EAAE;AACF,0EAA0E;AAC1E,4DAA4D;AAsC5D,MAAM,OAAO,YAAY;IACvB;qCACiC;IAChB,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC5D;4EACwE;IACvD,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAA;IAE5D;+DAC2D;IAC3D,UAAU,CAAC,CAAgB;QACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IAED;;iBAEa;IACb,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,qDAAqD;IACrD,MAAM,CAAC,EAAU;QACf,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACtB,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;QACpC,IAAI,CAAC,CAAC,eAAe,KAAK,IAAI;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;QACvE,OAAO,CAAC,CAAA;IACV,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,OAAoC,EAAE;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAA;QACjD,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,SAAQ;YACrC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,MAAM;gBAAE,SAAQ;YACxC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACb,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;;;;gDAI4C;IAC5C,OAAO,CACL,YAAoB,EACpB,eAAuB,EACvB,SAAiB;QAEjB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QACzC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QACnB,IAAI,CAAC,CAAC,eAAe,KAAK,IAAI;YAAE,OAAO,CAAC,CAAA;QACxC,CAAC,CAAC,eAAe,GAAG,eAAe,CAAA;QACnC,CAAC,CAAC,SAAS,GAAG,SAAS,CAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAA;QACrC,OAAO,CAAC,CAAA;IACV,CAAC;CACF"}
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,uEAAuE;AACvE,sEAAsE;AACtE,oEAAoE;AACpE,0EAA0E;AAC1E,wEAAwE;AACxE,kCAAkC;AAClC,EAAE;AACF,aAAa;AACb,oEAAoE;AACpE,yEAAyE;AACzE,uEAAuE;AACvE,uEAAuE;AACvE,+CAA+C;AAC/C,kEAAkE;AAClE,uEAAuE;AACvE,0DAA0D;AAC1D,wEAAwE;AACxE,uEAAuE;AA8BvE,MAAM,OAAO,YAAY;IACN,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAA;IAE/D,GAAG,CAAC,CAAgB;QAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACtC,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,CAAC,SAAiB;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACzC,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAA;QACxB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAClC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,YAAY,CAAC,QAAgB,EAAE,OAAoC,EAAE;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAA;QACjD,MAAM,GAAG,GAAoB,EAAE,CAAA;QAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ;gBAAE,SAAQ;YACrC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,MAAM;gBAAE,SAAQ;YACxC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACb,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;IACvC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;CACF"}
@@ -35,9 +35,45 @@ export interface DormantPlugin {
35
35
  * beyond what the caller did. */
36
36
  description: string;
37
37
  }
38
+ export interface ActivePluginTool {
39
+ name: string;
40
+ /** Optional one-line description. When absent, the manifest renders the
41
+ * tool name only — descriptions live in the plugin's MCP source as
42
+ * `server.tool("name", "description", …)` and the caller scrapes them
43
+ * from the compiled dist. */
44
+ description?: string;
45
+ }
46
+ export interface ActivePluginSkill {
47
+ name: string;
48
+ /** Optional one-line description sourced from the skill's SKILL.md
49
+ * frontmatter `description:` field. */
50
+ description?: string;
51
+ }
52
+ export interface ActivePlugin {
53
+ /** Plugin directory name — same key as DormantPlugin / enabledPlugins. */
54
+ name: string;
55
+ /** PLUGIN.md frontmatter `description:` field, verbatim. */
56
+ description: string;
57
+ tools: readonly ActivePluginTool[];
58
+ skills: readonly ActivePluginSkill[];
59
+ }
60
+ export interface SpecialistDomainTool {
61
+ name: string;
62
+ description?: string;
63
+ }
64
+ export interface SpecialistDomain {
65
+ /** Specialist agent name — the value passed as `subagent_type:
66
+ * specialists:<name>`. */
67
+ name: string;
68
+ /** YAML frontmatter `description:` of the specialist agent .md file. */
69
+ description: string;
70
+ tools: readonly SpecialistDomainTool[];
71
+ }
38
72
  export interface ComposeExtras {
39
73
  aboutOwner?: OwnerProfileBlock;
40
74
  dormantPlugins?: readonly DormantPlugin[];
75
+ activePlugins?: readonly ActivePlugin[];
76
+ specialistDomains?: readonly SpecialistDomain[];
41
77
  }
42
78
  export type AppendBlockResult = {
43
79
  ok: true;
@@ -46,6 +82,8 @@ export type AppendBlockResult = {
46
82
  soulBytes: number;
47
83
  aboutOwnerBytes: number;
48
84
  dormantPluginsBytes: number;
85
+ pluginManifestBytes: number;
86
+ specialistDomainsBytes: number;
49
87
  } | {
50
88
  ok: false;
51
89
  reason: 'host-unresolved' | 'identity-unresolved';
@@ -53,6 +91,22 @@ export type AppendBlockResult = {
53
91
  };
54
92
  export declare const ATTACHMENT_CEILING_BYTES = 31457280;
55
93
  export declare function composeAppendSystemPrompt(host: HostContext, sources: IdentitySources, extras?: ComposeExtras): AppendBlockResult;
94
+ /** Boot-time IDENTITY-vs-composer drift assertion. Parses IDENTITY.md at
95
+ * `<accountDir>/agents/admin/IDENTITY.md`, extracts every `<sentinel-name>`
96
+ * reference the prose makes, and confirms the composer would emit each one
97
+ * for a sample admin session. The synthetic inputs exercise every optional
98
+ * sentinel so a missing emit is visible regardless of operator state.
99
+ *
100
+ * Returns ok:false with the first sentinel IDENTITY.md names that the
101
+ * composer does not emit. The caller LOUD-FAILs the manager start. */
102
+ export declare function runIdentityDriftAssertion(identityContent: string): {
103
+ ok: true;
104
+ sentinelsChecked: string[];
105
+ } | {
106
+ ok: false;
107
+ missing: string;
108
+ sentinelsChecked: string[];
109
+ };
56
110
  /** Boot-time self-test: render the block with synthetic inputs that exercise
57
111
  * every optional sentinel, and assert the expected tags appear. Returns
58
112
  * ok:true on success, ok:false with the first missing tag on drift. The
@@ -1 +1 @@
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
+ {"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"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"}
@@ -82,12 +82,56 @@ function renderDormantPlugins(plugins) {
82
82
  const inner = lines.join('\n');
83
83
  return { body: inner, bytes: Buffer.byteLength(inner, 'utf8') };
84
84
  }
85
+ function renderPluginManifest(plugins) {
86
+ if (!plugins || plugins.length === 0)
87
+ return { body: null, bytes: 0 };
88
+ const parts = [];
89
+ for (const p of plugins) {
90
+ parts.push(`## ${p.name}`);
91
+ parts.push(p.description);
92
+ if (p.tools.length > 0) {
93
+ parts.push('Tools:');
94
+ for (const t of p.tools) {
95
+ parts.push(t.description ? `- ${t.name}: ${t.description}` : `- ${t.name}`);
96
+ }
97
+ }
98
+ if (p.skills.length > 0) {
99
+ parts.push('Skills:');
100
+ for (const s of p.skills) {
101
+ parts.push(s.description ? `- ${s.name}: ${s.description}` : `- ${s.name}`);
102
+ }
103
+ }
104
+ parts.push('');
105
+ }
106
+ const inner = parts.join('\n').replace(/\n+$/, '');
107
+ return { body: inner, bytes: Buffer.byteLength(inner, 'utf8') };
108
+ }
109
+ function renderSpecialistDomains(domains) {
110
+ if (!domains || domains.length === 0)
111
+ return { body: null, bytes: 0 };
112
+ const parts = [];
113
+ for (const d of domains) {
114
+ parts.push(`## ${d.name}`);
115
+ parts.push(d.description);
116
+ if (d.tools.length > 0) {
117
+ parts.push('Tools:');
118
+ for (const t of d.tools) {
119
+ parts.push(t.description ? `- ${t.name}: ${t.description}` : `- ${t.name}`);
120
+ }
121
+ }
122
+ parts.push('');
123
+ }
124
+ const inner = parts.join('\n').replace(/\n+$/, '');
125
+ return { body: inner, bytes: Buffer.byteLength(inner, 'utf8') };
126
+ }
85
127
  /** Pure renderer — no file IO. The block layout is the source of truth for
86
128
  * both the production `composeAppendSystemPrompt` (which reads files first)
87
129
  * and the boot-time self-test (which feeds synthetic content). */
88
130
  function renderAppendBlock(host, identityContent, soulContent, extras) {
89
131
  const aboutOwner = renderAboutOwner(extras.aboutOwner);
90
132
  const dormantPlugins = renderDormantPlugins(extras.dormantPlugins);
133
+ const pluginManifest = renderPluginManifest(extras.activePlugins);
134
+ const specialistDomains = renderSpecialistDomains(extras.specialistDomains);
91
135
  const tunnelLine = host.tunnelUrl ? host.tunnelUrl : 'none';
92
136
  const sections = [
93
137
  '<host>',
@@ -109,6 +153,12 @@ function renderAppendBlock(host, identityContent, soulContent, extras) {
109
153
  if (aboutOwner.body !== null) {
110
154
  sections.push('<about-owner>', aboutOwner.body, '</about-owner>');
111
155
  }
156
+ if (specialistDomains.body !== null) {
157
+ sections.push('<specialist-domains>', specialistDomains.body, '</specialist-domains>');
158
+ }
159
+ if (pluginManifest.body !== null) {
160
+ sections.push('<plugin-manifest>', pluginManifest.body, '</plugin-manifest>');
161
+ }
112
162
  if (dormantPlugins.body !== null) {
113
163
  sections.push('<dormant-plugins>', dormantPlugins.body, '</dormant-plugins>');
114
164
  }
@@ -116,6 +166,8 @@ function renderAppendBlock(host, identityContent, soulContent, extras) {
116
166
  block: sections.join('\n'),
117
167
  aboutOwnerBytes: aboutOwner.bytes,
118
168
  dormantPluginsBytes: dormantPlugins.bytes,
169
+ pluginManifestBytes: pluginManifest.bytes,
170
+ specialistDomainsBytes: specialistDomains.bytes,
119
171
  };
120
172
  }
121
173
  export function composeAppendSystemPrompt(host, sources, extras = {}) {
@@ -141,8 +193,48 @@ export function composeAppendSystemPrompt(host, sources, extras = {}) {
141
193
  soulBytes: Buffer.byteLength(soul.content, 'utf8'),
142
194
  aboutOwnerBytes: rendered.aboutOwnerBytes,
143
195
  dormantPluginsBytes: rendered.dormantPluginsBytes,
196
+ pluginManifestBytes: rendered.pluginManifestBytes,
197
+ specialistDomainsBytes: rendered.specialistDomainsBytes,
144
198
  };
145
199
  }
200
+ /** Boot-time IDENTITY-vs-composer drift assertion. Parses IDENTITY.md at
201
+ * `<accountDir>/agents/admin/IDENTITY.md`, extracts every `<sentinel-name>`
202
+ * reference the prose makes, and confirms the composer would emit each one
203
+ * for a sample admin session. The synthetic inputs exercise every optional
204
+ * sentinel so a missing emit is visible regardless of operator state.
205
+ *
206
+ * Returns ok:false with the first sentinel IDENTITY.md names that the
207
+ * composer does not emit. The caller LOUD-FAILs the manager start. */
208
+ export function runIdentityDriftAssertion(identityContent) {
209
+ // IDENTITY.md references sentinels as backticked `<name>` tokens in prose,
210
+ // e.g. "`<plugin-manifest>` lists each plugin …". Extract the inner names.
211
+ const referenced = new Set();
212
+ const re = /`<([a-z][a-z0-9-]*)>`/gi;
213
+ let m;
214
+ while ((m = re.exec(identityContent)) !== null) {
215
+ referenced.add(m[1]);
216
+ }
217
+ // Render with maximally-populated synthetic inputs.
218
+ const host = {
219
+ hostname: 'drift-check',
220
+ lanIPv4: '127.0.0.1',
221
+ adminUrl: 'http://drift-check:0',
222
+ tunnelUrl: null,
223
+ };
224
+ const rendered = renderAppendBlock(host, '# drift identity', '# drift soul', {
225
+ aboutOwner: { ok: true, body: 'drift owner' },
226
+ dormantPlugins: [{ name: 'p', description: 'd' }],
227
+ activePlugins: [{ name: 'p', description: 'd', tools: [{ name: 't' }], skills: [{ name: 's' }] }],
228
+ specialistDomains: [{ name: 'sp', description: 'd', tools: [{ name: 't' }] }],
229
+ });
230
+ const checked = Array.from(referenced).sort();
231
+ for (const name of checked) {
232
+ if (!rendered.block.includes(`<${name}>`)) {
233
+ return { ok: false, missing: name, sentinelsChecked: checked };
234
+ }
235
+ }
236
+ return { ok: true, sentinelsChecked: checked };
237
+ }
146
238
  /** Boot-time self-test: render the block with synthetic inputs that exercise
147
239
  * every optional sentinel, and assert the expected tags appear. Returns
148
240
  * ok:true on success, ok:false with the first missing tag on drift. The
@@ -159,6 +251,21 @@ export function runSystemPromptSelfTest() {
159
251
  const rendered = renderAppendBlock(host, '# self-test identity', '# self-test soul', {
160
252
  aboutOwner: { ok: true, body: '## About the Owner\n\nself-test owner' },
161
253
  dormantPlugins: [{ name: 'cloudflare', description: 'self-test plugin description' }],
254
+ activePlugins: [
255
+ {
256
+ name: 'self-test-plugin',
257
+ description: 'self-test plugin description',
258
+ tools: [{ name: 'self-test-tool', description: 'self-test tool description' }],
259
+ skills: [{ name: 'self-test-skill', description: 'self-test skill description' }],
260
+ },
261
+ ],
262
+ specialistDomains: [
263
+ {
264
+ name: 'self-test-specialist',
265
+ description: 'self-test specialist description',
266
+ tools: [{ name: 'self-test-specialist-tool', description: 'self-test specialist tool description' }],
267
+ },
268
+ ],
162
269
  });
163
270
  const required = [
164
271
  '<host>',
@@ -171,6 +278,10 @@ export function runSystemPromptSelfTest() {
171
278
  '</soul>',
172
279
  '<about-owner>',
173
280
  '</about-owner>',
281
+ '<plugin-manifest>',
282
+ '</plugin-manifest>',
283
+ '<specialist-domains>',
284
+ '</specialist-domains>',
174
285
  '<dormant-plugins>',
175
286
  '</dormant-plugins>',
176
287
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../src/system-prompt.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wEAAwE;AACxE,oBAAoB;AACpB,EAAE;AACF,2EAA2E;AAC3E,oEAAoE;AACpE,mDAAmD;AACnD,6EAA6E;AAC7E,4EAA4E;AAC5E,4DAA4D;AAC5D,iEAAiE;AACjE,oFAAoF;AACpF,iEAAiE;AACjE,gFAAgF;AAChF,2EAA2E;AAC3E,0EAA0E;AAC1E,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,kFAAkF;AAClF,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yEAAyE;AACzE,6CAA6C;AAC7C,2EAA2E;AAC3E,mFAAmF;AACnF,mFAAmF;AACnF,gFAAgF;AAChF,gFAAgF;AAChF,mFAAmF;AACnF,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,2EAA2E;AAC3E,WAAW;AACX,EAAE;AACF,uEAAuE;AACvE,4EAA4E;AAC5E,4EAA4E;AAC5E,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,8CAA8C;AAC9C,EAAE;AACF,wCAAwC;AACxC,0EAA0E;AAC1E,wEAAwE;AACxE,yEAAyE;AACzE,2EAA2E;AAC3E,yEAAyE;AACzE,8EAA8E;AAC9E,6CAA6C;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAkGhC,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAA,CAAC,mCAAmC;AAEtF,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,OAAe,CAAA;IACnB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,IAAI,UAAU,CAAA;QAC9D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAA;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAA;IAC/C,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAC9B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAoC;IAC5D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,KAAK,CAAC,MAAM,EAAE,CAAA;IAC5E,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;AACjE,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA6C;IACzE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IACrE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;AACjE,CAAC;AAED,SAAS,oBAAoB,CAAC,OAA4C;IACxE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IACrE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;QACzB,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7E,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACrB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7E,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAClD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;AACjE,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAgD;IAC/E,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IACrE,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;QACzB,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACpB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAC7E,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAClD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;AACjE,CAAC;AAED;;mEAEmE;AACnE,SAAS,iBAAiB,CACxB,IAAiB,EACjB,eAAuB,EACvB,WAAmB,EACnB,MAAqB;IAQrB,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACtD,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;IAClE,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;IACjE,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;IAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IAC3D,MAAM,QAAQ,GAAa;QACzB,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;QACvB,YAAY;QACZ,eAAe;QACf,aAAa;QACb,QAAQ;QACR,WAAW;QACX,SAAS;KACV,CAAA;IACD,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IACnE,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAA;IACxF,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;IAC/E,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;IAC/E,CAAC;IACD,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,eAAe,EAAE,UAAU,CAAC,KAAK;QACjC,mBAAmB,EAAE,cAAc,CAAC,KAAK;QACzC,mBAAmB,EAAE,cAAc,CAAC,KAAK;QACzC,sBAAsB,EAAE,iBAAiB,CAAC,KAAK;KAChD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAAiB,EACjB,OAAwB,EACxB,SAAwB,EAAE;IAE1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAA;IACjF,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAA;IAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAA;IAC9E,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACvC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IAC1E,CAAC;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAChF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAC1D,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QAClD,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;QACjD,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;QACjD,sBAAsB,EAAE,QAAQ,CAAC,sBAAsB;KACxD,CAAA;AACH,CAAC;AAED;;;;;;;uEAOuE;AACvE,MAAM,UAAU,yBAAyB,CACvC,eAAuB;IAEvB,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;IACpC,MAAM,EAAE,GAAG,yBAAyB,CAAA;IACpC,IAAI,CAAyB,CAAA;IAC7B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/C,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;IACD,oDAAoD;IACpD,MAAM,IAAI,GAAgB;QACxB,QAAQ,EAAE,aAAa;QACvB,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,sBAAsB;QAChC,SAAS,EAAE,IAAI;KAChB,CAAA;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,EAAE,cAAc,EAAE;QAC3E,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE;QAC7C,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;QACjD,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QACjG,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;KAC9E,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAA;IAC7C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAA;QAChE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAA;AAChD,CAAC;AAED;;;;;oCAKoC;AACpC,MAAM,UAAU,uBAAuB;IACrC,MAAM,IAAI,GAAgB;QACxB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,oBAAoB;QAC9B,SAAS,EAAE,IAAI;KAChB,CAAA;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,EAAE,sBAAsB,EAAE,kBAAkB,EAAE;QACnF,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,uCAAuC,EAAE;QACvE,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAAC;QACrF,aAAa,EAAE;YACb;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,8BAA8B;gBAC3C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;gBAC9E,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC;aAClF;SACF;QACD,iBAAiB,EAAE;YACjB;gBACE,IAAI,EAAE,sBAAsB;gBAC5B,WAAW,EAAE,kCAAkC;gBAC/C,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,uCAAuC,EAAE,CAAC;aACrG;SACF;KACF,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG;QACf,QAAQ;QACR,SAAS;QACT,sBAAsB;QACtB,uBAAuB;QACvB,YAAY;QACZ,aAAa;QACb,QAAQ;QACR,SAAS;QACT,eAAe;QACf,gBAAgB;QAChB,mBAAmB;QACnB,oBAAoB;QACpB,sBAAsB;QACtB,uBAAuB;QACvB,mBAAmB;QACnB,oBAAoB;KACrB,CAAA;IACD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAA;QACpC,CAAC;IACH,CAAC;IACD,2EAA2E;IAC3E,2EAA2E;IAC3E,8CAA8C;IAC9C,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;QACvD,UAAU,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE;KACtD,CAAC,CAAA;IACF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;QACxE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAA;IAC9D,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;AACrB,CAAC"}
@@ -8,12 +8,14 @@ These three rules win when anything else in this prompt conflicts with them.
8
8
  2. **Be concise.** Three sentences or fewer. If you cannot answer in three, ask in five words.
9
9
  3. **Show your evidence.** Gather evidence before forming a hypothesis. One measurement beats three guesses.
10
10
 
11
- ## The owner
11
+ ## Never stop seeking
12
12
 
13
- The more you know about the owner, the better the work you can do. Never stop seeking information about them, prioritising what is pertinent to their current activities and objectives. The owner's activities and objectives are themselves first-class subjects to ask about.
13
+ The more you know about the owner, the better the work you can do. Never stop seeking information about them. Prioritise what is pertinent to their current activities and objectives. The owner's activities and objectives are themselves first-class subjects to ask about. Every turn that does not advance what you know about them — or what you can do for them — is a turn you can do better next time.
14
14
 
15
15
  Everything you learn in conversation is recorded for you by a background agent that watches every completed turn. You do not write to the graph yourself. Ask, listen, and act on what you have already been told; the recording is taken care of.
16
16
 
17
+ ## About the owner
18
+
17
19
  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.
18
20
 
19
21
  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.
@@ -1,21 +1,15 @@
1
1
  # Soul
2
2
 
3
- ## Personality
4
-
5
- The architectural sensibility of an individual contributor. The operator whose output is a function of their own thinking, not their headcount. Pathologically averse to friction and noise in any process. Treats time, knowledge, and money as the three currencies of every decision and works to maximise all three for the owner.
6
-
7
- Quantitative by instinct. Comfortable with derivatives, distributions, and rates of change; comfortable with markdown, file paths, and graph queries. The same precision applied to either.
3
+ You are ${PRODUCT_NAME}, an AI operations manager. You free the operator from low-value desk work so their time goes to the customer chain.
8
4
 
9
- Believes the individual-contributor archetype is the future of work, that the owner is one of them, and that the operations layer should make that archetype viable at the scale of a real business. Acts accordingly: removes coordination overhead, never adds it.
5
+ ## Phase 1 standing offer
10
6
 
11
- ## Tone
7
+ Three things you do end-to-end, every time the conversation surfaces the need. Offer the relevant one in plain language, then run it.
12
8
 
13
- Precise. No filler ("just", "simply", "I think", "let me", "I'll go ahead and"). No narration of internal process ("checking", "searching", "let me look"). No padding around an answer.
9
+ - **Brochure production.** A listing URL plus an agent URL becomes a print-ready A4 brochure (HTML and PDF) without manual layout.
10
+ - **Preval production.** Property facts plus comparable data become a written pre-valuation the operator sends to a vendor before the appraisal visit.
11
+ - **Loop CRM management.** Read and write across all 8 Loop resource groups (properties, people, viewings, feedback, team, marketing, customer preferences, supplier operations) on the operator's behalf.
14
12
 
15
- Direct without being curt. The brevity is in service of the owner's time, not at the expense of the conversation. When a longer answer earns its length (a strategic question, a trade-off, a recommendation), give it the space it needs.
16
-
17
- State what is true. Caveat what is uncertain. Never confident wrong over honestly-checked. A flat "I'd need to check that" beats a confident guess.
18
-
19
- ## Greeting
13
+ ## Personality
20
14
 
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.
15
+ Precise. No filler, no narration of internal process. Direct without being curt. State what is true, caveat what is uncertain, never confident-wrong over honestly-checked.
@@ -0,0 +1,51 @@
1
+ /**
2
+ * MCP server stderr tee — dual-destination log capture.
3
+ *
4
+ * Claude Code spawns MCP servers as child processes and consumes their stderr
5
+ * internally. The platform cannot intercept at the spawn level. Each server
6
+ * must tee its own stderr so diagnostic output is retrievable.
7
+ *
8
+ * ┌─────────────────────────┐
9
+ * │ MCP server process │
10
+ * │ │
11
+ * │ console.error("[x] ..") │
12
+ * │ │ │
13
+ * │ ▼ │
14
+ * │ patched stderr.write() │
15
+ * │ │ │
16
+ * │ ├──► original stderr (consumed by Claude Code — opaque)
17
+ * │ │
18
+ * │ ├──► mcp-{name}-stderr-{YYYY-MM-DD}.log (raw chunks, per-plugin)
19
+ * │ │
20
+ * │ └──► $STREAM_LOG_PATH (per-line, prefixed)
21
+ * │ "[<iso>] [mcp:{name}] <line>"
22
+ * └─────────────────────────┘
23
+ *
24
+ * $STREAM_LOG_PATH is set by the spawner (`getMcpServers` in `claude-agent.ts`)
25
+ * to the per-conversation stream log file. The MCP server code itself knows
26
+ * nothing about conversations — it just trusts the spawner's path. This is
27
+ * the scope boundary introduced: the tee is attached per spawn,
28
+ * not per MCP-server process lifetime. Servers spawned for conversation A
29
+ * write to conversation A's file; servers for B write to B's file.
30
+ *
31
+ * Every decision is logged via `[mcp-tee-*]` markers on both the target file
32
+ * and the original stderr so an investigator can confirm from the stream log
33
+ * which tees were wired up, which were skipped, and why.
34
+ */
35
+ /**
36
+ * Patch process.stderr.write to tee to:
37
+ * 1. Per-server raw log (`mcp-<serverName>-stderr-<date>.log` under LOG_DIR).
38
+ * 2. The per-conversation stream log at `STREAM_LOG_PATH` — per-line, prefixed.
39
+ * 3. The original stderr (consumed by Claude Code) — always preserved.
40
+ *
41
+ * LOG_DIR absent → skip per-server raw file (dev mode / tool discovery).
42
+ * STREAM_LOG_PATH absent → skip stream-log destination (older spawner or
43
+ * standalone invocation). In both absent cases, stderr works unchanged —
44
+ * a `[mcp-tee-skip]` marker is written to original stderr so the skip is
45
+ * visible to journalctl-level readers.
46
+ *
47
+ * Safe to call once at MCP server module load. Refused on second call to
48
+ * prevent stacking patches.
49
+ */
50
+ export declare function initStderrTee(serverName: string): void;
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAeH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CA8ItD"}