@rubytech/create-realagent-code 0.1.255 → 0.1.256

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 (213) hide show
  1. package/dist/__tests__/plugin-install.test.js +58 -40
  2. package/dist/index.js +77 -26
  3. package/dist/lib/plugin-install.js +31 -29
  4. package/package.json +1 -1
  5. package/payload/platform/config/brand-registry.json +8 -0
  6. package/payload/platform/config/brand.json +2 -2
  7. package/payload/platform/lib/graph-search/src/__tests__/fulltext-coverage.test.ts +12 -0
  8. package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
  9. package/payload/platform/lib/graph-write/dist/index.js +2 -0
  10. package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
  11. package/payload/platform/lib/graph-write/src/index.ts +2 -0
  12. package/payload/platform/neo4j/schema.cypher +126 -0
  13. package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -0
  14. package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
  15. package/payload/platform/plugins/admin/PLUGIN.md +3 -6
  16. package/payload/platform/plugins/admin/mcp/dist/index.js +0 -60
  17. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
  18. package/payload/platform/plugins/admin/skills/insight/SKILL.md +24 -0
  19. package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +63 -10
  20. package/payload/platform/plugins/docs/PLUGIN.md +1 -0
  21. package/payload/platform/plugins/docs/references/admin-ui.md +1 -1
  22. package/payload/platform/plugins/docs/references/deployment.md +18 -5
  23. package/payload/platform/plugins/docs/references/memory-guide.md +4 -0
  24. package/payload/platform/plugins/docs/references/platform.md +1 -1
  25. package/payload/platform/plugins/docs/references/plugins-guide.md +1 -1
  26. package/payload/platform/plugins/docs/references/slides.md +31 -0
  27. package/payload/platform/plugins/docs/references/voice-mirror-guide.md +1 -1
  28. package/payload/platform/plugins/memory/PLUGIN.md +1 -1
  29. package/payload/platform/plugins/memory/mcp/dist/index.js +1 -1
  30. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
  31. package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.d.ts +1 -1
  32. package/payload/platform/plugins/memory/mcp/dist/tools/memory-typed-edge-pass.js +1 -1
  33. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
  34. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +10 -0
  35. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
  36. package/payload/platform/plugins/memory/references/schema-construction.md +72 -0
  37. package/payload/platform/plugins/slides/.claude-plugin/plugin.json +8 -0
  38. package/payload/platform/plugins/slides/LICENSE +21 -0
  39. package/payload/platform/plugins/slides/PLUGIN.md +18 -0
  40. package/payload/platform/plugins/slides/PROVENANCE.md +40 -0
  41. package/payload/platform/plugins/slides/commands/add-slide.md +29 -0
  42. package/payload/platform/plugins/slides/commands/slides-claus.md +39 -0
  43. package/payload/platform/plugins/slides/commands/slides-new-component.md +39 -0
  44. package/payload/platform/plugins/slides/commands/slides-outline.md +43 -0
  45. package/payload/platform/plugins/slides/commands/slides-review.md +52 -0
  46. package/payload/platform/plugins/slides/commands/slides-theme.md +64 -0
  47. package/payload/platform/plugins/slides/commands/slides.md +59 -0
  48. package/payload/platform/plugins/slides/skills/deck-system/REFERENCE.md +581 -0
  49. package/payload/platform/plugins/slides/skills/deck-system/SKILL.md +607 -0
  50. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-board.md +426 -0
  51. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-claus.md +185 -0
  52. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-mbb.md +450 -0
  53. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-product-launch.md +579 -0
  54. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-sales.md +464 -0
  55. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING-sequoia.md +489 -0
  56. package/payload/platform/plugins/slides/skills/deck-system/STORYTELLING.md +273 -0
  57. package/payload/platform/plugins/slides/skills/deck-system/deck-craft.html +1371 -0
  58. package/payload/platform/plugins/slides/skills/deck-system/deck-solid.html +1667 -0
  59. package/payload/platform/plugins/slides/skills/deck-system/deck.html +1359 -0
  60. package/payload/platform/plugins/url-get/.claude-plugin/plugin.json +1 -1
  61. package/payload/platform/plugins/url-get/PLUGIN.md +26 -21
  62. package/payload/platform/plugins/url-get/mcp/dist/index.js +3 -3
  63. package/payload/platform/plugins/url-get/mcp/dist/index.js.map +1 -1
  64. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.d.ts +1 -2
  65. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.d.ts.map +1 -1
  66. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.js +20 -40
  67. package/payload/platform/plugins/url-get/mcp/dist/tools/url-get.js.map +1 -1
  68. package/payload/platform/scripts/setup-account.sh +1 -10
  69. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
  70. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +0 -1
  71. package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
  72. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +5 -0
  73. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  74. package/payload/platform/services/claude-session-manager/dist/http-server.js +32 -2
  75. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  76. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +2 -2
  77. package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
  78. package/payload/platform/templates/specialists/agents/database-operator.md +1 -1
  79. package/payload/platform/templates/specialists/agents/typed-edge-classifier.md +1 -1
  80. package/payload/server/public/assets/AdminShell-T-YknnBn.js +1 -0
  81. package/payload/server/public/assets/Checkbox-DmDxpqVv.js +1 -0
  82. package/payload/server/public/assets/admin-COUV-jgt.js +1 -0
  83. package/payload/server/public/assets/{arc-aUiRP9AS.js → arc-B2CweJq3.js} +1 -1
  84. package/payload/server/public/assets/architecture-YZFGNWBL-Dnn6Hc65.js +1 -0
  85. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-c09loTER.js → architectureDiagram-Q4EWVU46-DP2o-MFV.js} +1 -1
  86. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-Cjdeyoq1.js → blockDiagram-DXYQGD6D-DO4mcYDJ.js} +1 -1
  87. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-NY6Wlzo2.js → c4Diagram-AHTNJAMY-Sy1giHbj.js} +1 -1
  88. package/payload/server/public/assets/channel-CEpR_0rE.js +1 -0
  89. package/payload/server/public/assets/{chunk-2KRD3SAO-BK3470lx.js → chunk-2KRD3SAO-CKsCYCsN.js} +1 -1
  90. package/payload/server/public/assets/chunk-336JU56O-C0-P-aUF.js +2 -0
  91. package/payload/server/public/assets/chunk-426QAEUC-DFjEt3Zb.js +1 -0
  92. package/payload/server/public/assets/{chunk-4BX2VUAB-BOvVdJLf.js → chunk-4BX2VUAB-B8bqAmBa.js} +1 -1
  93. package/payload/server/public/assets/{chunk-4TB4RGXK-BXpto3yW.js → chunk-4TB4RGXK-D1k0VSlW.js} +1 -1
  94. package/payload/server/public/assets/{chunk-55IACEB6-BwZyF7vR.js → chunk-55IACEB6-B-p_QNqz.js} +1 -1
  95. package/payload/server/public/assets/{chunk-5FUZZQ4R-C403gCUk.js → chunk-5FUZZQ4R-D6U6tV_j.js} +1 -1
  96. package/payload/server/public/assets/{chunk-5PVQY5BW-CjVzXQEp.js → chunk-5PVQY5BW-CYK76xfs.js} +1 -1
  97. package/payload/server/public/assets/{chunk-67CJDMHE-D5bhMrtY.js → chunk-67CJDMHE-BC9js-lf.js} +1 -1
  98. package/payload/server/public/assets/{chunk-7N4EOEYR-Si7Lgrwc.js → chunk-7N4EOEYR-4j2OqKkv.js} +1 -1
  99. package/payload/server/public/assets/{chunk-AA7GKIK3-DMuHtDqO.js → chunk-AA7GKIK3-Coen-fXN.js} +1 -1
  100. package/payload/server/public/assets/{chunk-BSJP7CBP-L79XKVcb.js → chunk-BSJP7CBP-CAiOBvec.js} +1 -1
  101. package/payload/server/public/assets/{chunk-CIAEETIT-C0O7Upmg.js → chunk-CIAEETIT-AJzzpZVb.js} +1 -1
  102. package/payload/server/public/assets/{chunk-EDXVE4YY-DJcJAsAg.js → chunk-EDXVE4YY-BL4BKozX.js} +1 -1
  103. package/payload/server/public/assets/{chunk-ENJZ2VHE-CFDNvYu1.js → chunk-ENJZ2VHE-mhAFG8UD.js} +1 -1
  104. package/payload/server/public/assets/{chunk-FMBD7UC4-C_E43NFJ.js → chunk-FMBD7UC4-H231gZA_.js} +1 -1
  105. package/payload/server/public/assets/{chunk-FOC6F5B3-D9lWWHAu.js → chunk-FOC6F5B3-Cl3ZZjYG.js} +1 -1
  106. package/payload/server/public/assets/{chunk-ICPOFSXX-ecLOxGhL.js → chunk-ICPOFSXX-DOEzvzJa.js} +2 -2
  107. package/payload/server/public/assets/{chunk-K5T4RW27-DuhsNH4c.js → chunk-K5T4RW27-C_ipbUDD.js} +1 -1
  108. package/payload/server/public/assets/{chunk-KGLVRYIC-B4-A1Abi.js → chunk-KGLVRYIC-CTsDNSCU.js} +1 -1
  109. package/payload/server/public/assets/{chunk-LIHQZDEY-BxqgHRgT.js → chunk-LIHQZDEY-DvSXhkGf.js} +1 -1
  110. package/payload/server/public/assets/{chunk-ORNJ4GCN-DEYQ5WaJ.js → chunk-ORNJ4GCN-p574NOI7.js} +1 -1
  111. package/payload/server/public/assets/{chunk-OYMX7WX6-B7MW66KB.js → chunk-OYMX7WX6-BlEgFM6U.js} +1 -1
  112. package/payload/server/public/assets/chunk-QZHKN3VN-DpF06ZZQ.js +1 -0
  113. package/payload/server/public/assets/{chunk-U2HBQHQK-BMawmsyk.js → chunk-U2HBQHQK-B2bDK0jv.js} +1 -1
  114. package/payload/server/public/assets/{chunk-X2U36JSP-CT6g7pno.js → chunk-X2U36JSP-D69BxKFw.js} +1 -1
  115. package/payload/server/public/assets/{chunk-XPW4576I-CBfZXZDB.js → chunk-XPW4576I-Dm-PcyUi.js} +1 -1
  116. package/payload/server/public/assets/{chunk-YZCP3GAM-xeAluiAH.js → chunk-YZCP3GAM-Be8RnXgx.js} +1 -1
  117. package/payload/server/public/assets/{chunk-ZZ45TVLE-BRN9qUC5.js → chunk-ZZ45TVLE-Ck8PCTa4.js} +1 -1
  118. package/payload/server/public/assets/classDiagram-6PBFFD2Q-CYbXvKLI.js +1 -0
  119. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-DEyHzRhq.js +1 -0
  120. package/payload/server/public/assets/clone-y8gexbBy.js +1 -0
  121. package/payload/server/public/assets/{cose-bilkent-S5V4N54A-Br2gjtEO.js → cose-bilkent-S5V4N54A-CmkW2Eaj.js} +1 -1
  122. package/payload/server/public/assets/{dagre-DTjePoco.js → dagre-Dqp-ns8F.js} +1 -1
  123. package/payload/server/public/assets/{dagre-KV5264BT-DHBkRke4.js → dagre-KV5264BT-ZgWWXPLc.js} +1 -1
  124. package/payload/server/public/assets/data-gy6QH9c1.js +1 -0
  125. package/payload/server/public/assets/{diagram-5BDNPKRD-BIq1-idL.js → diagram-5BDNPKRD-CTX5-ScM.js} +1 -1
  126. package/payload/server/public/assets/{diagram-G4DWMVQ6-BsIUDzV6.js → diagram-G4DWMVQ6-BovIsO6H.js} +1 -1
  127. package/payload/server/public/assets/{diagram-MMDJMWI5-CgHSri2i.js → diagram-MMDJMWI5-DcETsQy-.js} +1 -1
  128. package/payload/server/public/assets/{diagram-TYMM5635-Ce2Wh9ZX.js → diagram-TYMM5635-yyq6peoZ.js} +1 -1
  129. package/payload/server/public/assets/{erDiagram-SMLLAGMA-BU0Kh6OQ.js → erDiagram-SMLLAGMA-CiNToftB.js} +1 -1
  130. package/payload/server/public/assets/{flatten-Bo6YRmWl.js → flatten-BtFI066E.js} +1 -1
  131. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-B0N06MF7.js → flowDiagram-DWJPFMVM-Xnl3SpIM.js} +1 -1
  132. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-BVbx4ARZ.js → ganttDiagram-T4ZO3ILL-C1iyWe0f.js} +1 -1
  133. package/payload/server/public/assets/gitGraph-7Q5UKJZL-CNs-LD5i.js +1 -0
  134. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-C-xRJ94t.js → gitGraphDiagram-UUTBAWPF-D97pbMQb.js} +1 -1
  135. package/payload/server/public/assets/graph-labels-cZu4pK16.js +1 -0
  136. package/payload/server/public/assets/{graph-g48ZcA5M.js → graph-qz5tFKqU.js} +3 -3
  137. package/payload/server/public/assets/{graphlib-YmNcoMjY.js → graphlib-Lq8ijgON.js} +1 -1
  138. package/payload/server/public/assets/info-OMHHGYJF-DsTNigSS.js +1 -0
  139. package/payload/server/public/assets/infoDiagram-42DDH7IO-C_OarRTA.js +2 -0
  140. package/payload/server/public/assets/{isEmpty-D6Kr-M1M.js → isEmpty-D6QovjYR.js} +1 -1
  141. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-DTrq54yC.js → ishikawaDiagram-UXIWVN3A-B8XBdjJn.js} +1 -1
  142. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-OZZZMrFX.js → journeyDiagram-VCZTEJTY-CZYbiOaQ.js} +1 -1
  143. package/payload/server/public/assets/{kanban-definition-6JOO6SKY--w-IP9pN.js → kanban-definition-6JOO6SKY-B1PybFoh.js} +1 -1
  144. package/payload/server/public/assets/{line-Ckeulv5T.js → line-D-tw3hHp.js} +1 -1
  145. package/payload/server/public/assets/{linear-DOh_6k2k.js → linear-BHhXD3cd.js} +1 -1
  146. package/payload/server/public/assets/{mermaid-parser.core-CVRAxYRD.js → mermaid-parser.core-C9RAnysF.js} +2 -2
  147. package/payload/server/public/assets/{mermaid.core-B-mE18I1.js → mermaid.core-B532LT1r.js} +3 -3
  148. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-Bm8mDicL.js → mindmap-definition-QFDTVHPH-DGlgeeTV.js} +1 -1
  149. package/payload/server/public/assets/{ordinal-BDi6f4xk.js → ordinal-Bl-aM5b9.js} +1 -1
  150. package/payload/server/public/assets/packet-4T2RLAQJ-DGES22b-.js +1 -0
  151. package/payload/server/public/assets/pie-ZZUOXDRM-ChKeDbzt.js +1 -0
  152. package/payload/server/public/assets/{pieDiagram-DEJITSTG-BCmRLgGO.js → pieDiagram-DEJITSTG-DV9FIWko.js} +1 -1
  153. package/payload/server/public/assets/{public-DknO-g9S.js → public-Bu2_Xi0a.js} +5 -5
  154. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-CniTIUTm.js → quadrantDiagram-34T5L4WZ-Betwya4l.js} +1 -1
  155. package/payload/server/public/assets/radar-PYXPWWZC-FGG5Fs7N.js +1 -0
  156. package/payload/server/public/assets/{reduce-CGi9ik8i.js → reduce-BD4xUd2c.js} +1 -1
  157. package/payload/server/public/assets/{requirementDiagram-MS252O5E-CoxBSj9M.js → requirementDiagram-MS252O5E-Cq3vODdg.js} +1 -1
  158. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-BjS-4jzq.js → sankeyDiagram-XADWPNL6-x8krXWcS.js} +1 -1
  159. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-B9jVOnPR.js → sequenceDiagram-FGHM5R23-i-_uH-Yl.js} +1 -1
  160. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BvOQPzP8.js → stateDiagram-FHFEXIEX-il4KqSgI.js} +1 -1
  161. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-B6zNJ6Tv.js +1 -0
  162. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CdfgWLo1.js → timeline-definition-GMOUNBTQ-DATdZkA5.js} +1 -1
  163. package/payload/server/public/assets/treeView-SZITEDCU-VAQQdbtf.js +1 -0
  164. package/payload/server/public/assets/treemap-W4RFUUIX-DKchO3zI.js +1 -0
  165. package/payload/server/public/assets/useSelectionMode-A5KItZ2T.js +13 -0
  166. package/payload/server/public/assets/{brand-D0gNihp7.css → useSelectionMode-C-Ojh7W9.css} +1 -1
  167. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-JCgpIbj-.js → vennDiagram-DHZGUBPP-BJh9tJTt.js} +1 -1
  168. package/payload/server/public/assets/wardley-RL74JXVD-CBGtx0bS.js +1 -0
  169. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-Dei3VqHo.js → wardleyDiagram-NUSXRM2D-EMN1Hdfg.js} +1 -1
  170. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DUtIyoIb.js → xychartDiagram-5P7HB3ND-DbUWXa7T.js} +1 -1
  171. package/payload/server/public/data.html +5 -5
  172. package/payload/server/public/graph.html +6 -6
  173. package/payload/server/public/index.html +5 -6
  174. package/payload/server/public/public.html +4 -5
  175. package/payload/server/server.js +53 -12
  176. package/payload/platform/plugins/admin/hooks/__tests__/insight.test.sh +0 -395
  177. package/payload/platform/plugins/admin/hooks/insight.sh +0 -219
  178. package/payload/platform/plugins/admin/hooks/lib/admin-graph-pass-common.sh +0 -239
  179. package/payload/server/public/assets/AdminShell-892Jy_rs.js +0 -1
  180. package/payload/server/public/assets/Checkbox-Bc2QzX9b.js +0 -1
  181. package/payload/server/public/assets/admin-D3K13ndi.js +0 -1
  182. package/payload/server/public/assets/architecture-YZFGNWBL--v-pJPNp.js +0 -1
  183. package/payload/server/public/assets/brand-CcN3dELF.js +0 -9
  184. package/payload/server/public/assets/channel-B1IT7to2.js +0 -1
  185. package/payload/server/public/assets/chunk-336JU56O-CdKRCIeE.js +0 -2
  186. package/payload/server/public/assets/chunk-426QAEUC-BybuQ3Ve.js +0 -1
  187. package/payload/server/public/assets/chunk-QZHKN3VN-Bd-GrQM6.js +0 -1
  188. package/payload/server/public/assets/classDiagram-6PBFFD2Q-rjCize6i.js +0 -1
  189. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BORWOUt0.js +0 -1
  190. package/payload/server/public/assets/clone-Csqv5U6T.js +0 -1
  191. package/payload/server/public/assets/data-Br-pdljK.js +0 -1
  192. package/payload/server/public/assets/gitGraph-7Q5UKJZL-CI0s_tqn.js +0 -1
  193. package/payload/server/public/assets/graph-labels-BYH-IPCb.js +0 -1
  194. package/payload/server/public/assets/info-OMHHGYJF-g3gYW7Qm.js +0 -1
  195. package/payload/server/public/assets/infoDiagram-42DDH7IO-Di6oPQ_-.js +0 -2
  196. package/payload/server/public/assets/packet-4T2RLAQJ-CT0TB9HI.js +0 -1
  197. package/payload/server/public/assets/pie-ZZUOXDRM-CXLe7TFF.js +0 -1
  198. package/payload/server/public/assets/radar-PYXPWWZC-DnPLBl-D.js +0 -1
  199. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-v4ND10uR.js +0 -1
  200. package/payload/server/public/assets/treeView-SZITEDCU-C3cb7Xwe.js +0 -1
  201. package/payload/server/public/assets/treemap-W4RFUUIX-Dc7G3Bgm.js +0 -1
  202. package/payload/server/public/assets/useSelectionMode-DwsyptOw.js +0 -5
  203. package/payload/server/public/assets/wardley-RL74JXVD-DtgibWAt.js +0 -1
  204. /package/payload/server/public/assets/{_baseFor-Cam2PbSt.js → _baseFor-Cs8Y-rGh.js} +0 -0
  205. /package/payload/server/public/assets/{array-DYRGGQae.js → array-iHZP4KWJ.js} +0 -0
  206. /package/payload/server/public/assets/{cytoscape.esm-nWsJMTNI.js → cytoscape.esm-BR2GOQ8_.js} +0 -0
  207. /package/payload/server/public/assets/{defaultLocale-Du1XY3Dp.js → defaultLocale-B9aLeOTg.js} +0 -0
  208. /package/payload/server/public/assets/{dist-BzAsli7o.js → dist-DB-VPj_8.js} +0 -0
  209. /package/payload/server/public/assets/{init-B5BXBRcm.js → init-BNFRgqHM.js} +0 -0
  210. /package/payload/server/public/assets/{katex-HOUACuRw.js → katex-B-EfS3nw.js} +0 -0
  211. /package/payload/server/public/assets/{path-CNO468J-.js → path-DmWWdwp7.js} +0 -0
  212. /package/payload/server/public/assets/{rough.esm-DRO6hWPh.js → rough.esm-Ci7Kjt46.js} +0 -0
  213. /package/payload/server/public/assets/{src-CWiyyVfn.js → src-C1jfwBq0.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "url-get",
3
- "description": "Faithful page retrieval. Provides url-get — fetches a server-rendered web page over HTTP, cleans the HTML to markdown with no model in the path (so there is nothing to refuse on copyright), and writes that verbatim copy to an account-scoped reference file. Separately produces a transformative summary via a short Claude subprocess. Returns { summary, referencePath } only the verbatim markdown is never injected wholesale; the agent greps the reference file for passages and librarian reads it directly to ingest. This is the tool to use instead of native WebFetch when a faithful copy of a page is needed (e.g. ingesting the operator's own published writing): WebFetch refuses to reproduce copyrighted text and returns only a summary. Server-rendered HTML only — no JavaScript execution (JS-rendered pages use the browser MCP). A bot-challenge or empty page fails with an explicit error and writes no reference file.",
3
+ "description": "Faithful page retrieval. Provides url-get — fetches a server-rendered web page over HTTP, cleans the HTML to markdown with no model in the path (so there is nothing to refuse on copyright), and writes that verbatim copy to an account-scoped reference file. Returns { text, referencePath }: text is the cleaned markdown capped at 100k chars, referencePath is the full verbatim copy on disk. There is no subprocess inference and no summary — a caller that needs a summary invokes url-get from a delegated subagent that holds the full text in its own context and returns only the summary to the main agent. For a large page the agent greps the reference file for passages and librarian reads it directly to ingest. This is the tool to use instead of native WebFetch when a faithful copy of a page is needed (e.g. ingesting the operator's own published writing): WebFetch refuses to reproduce copyrighted text. Server-rendered HTML only — no JavaScript execution (an empty text with textLength=0 means a JS-rendered shell retry with the browser MCP). A bot-challenge or empty page fails with an explicit error and writes no reference file.",
4
4
  "version": "0.1.0",
5
5
  "author": {
6
6
  "name": "Rubytech LLC"
@@ -12,7 +12,7 @@ mcp:
12
12
  ACCOUNT_ID: ${ACCOUNT_ID}
13
13
  SESSION_ID: ${SESSION_ID}
14
14
  mcp-manifest: auto
15
- description: "Faithful page retrieval. Provides url-get — fetches a server-rendered web page over HTTP, cleans the HTML to markdown with no model in the path (so there is nothing to refuse on copyright), and writes that verbatim copy to an account-scoped reference file. Separately produces a transformative summary via a short Claude subprocess. Returns { summary, referencePath } only the verbatim markdown is never injected wholesale; the agent greps the reference file for passages and librarian reads it directly to ingest. This is the tool to use instead of native WebFetch when a faithful copy of a page is needed (e.g. ingesting the operator's own published writing): WebFetch refuses to reproduce copyrighted text and returns only a summary. Server-rendered HTML only — no JavaScript execution (JS-rendered pages use the browser MCP). A bot-challenge or empty page fails with an explicit error and writes no reference file."
15
+ description: "Faithful page retrieval. Provides url-get — fetches a server-rendered web page over HTTP, cleans the HTML to markdown with no model in the path (so there is nothing to refuse on copyright), and writes that verbatim copy to an account-scoped reference file. Returns { text, referencePath }: text is the cleaned markdown capped at 100k chars, referencePath is the full verbatim copy on disk. There is no subprocess inference and no summary — a caller that needs a summary invokes url-get from a delegated subagent that holds the full text in its own context and returns only the summary to the main agent. For a large page the agent greps the reference file for passages and librarian reads it directly to ingest. This is the tool to use instead of native WebFetch when a faithful copy of a page is needed (e.g. ingesting the operator's own published writing): WebFetch refuses to reproduce copyrighted text. Server-rendered HTML only — no JavaScript execution (an empty text with textLength=0 means a JS-rendered shell retry with the browser MCP). A bot-challenge or empty page fails with an explicit error and writes no reference file."
16
16
  tools:
17
17
  - name: url-get
18
18
  publicAllowlist: false
@@ -25,21 +25,25 @@ embed: false
25
25
 
26
26
  ## What it does
27
27
 
28
- A single MCP tool, `url-get`, takes a URL and returns two artefacts produced by
29
- two different mechanisms:
28
+ A single MCP tool, `url-get`, takes a URL and returns one cleaned artefact in
29
+ two surfaces, with no model anywhere in the path:
30
30
 
31
31
  - **Verbatim** — an HTTP GET followed by HTML→markdown cleanup, written to an
32
32
  account-scoped reference file at `$ACCOUNT_DIR/url-get/<url-hash>.md`. No model
33
33
  sits in this path, so there is nothing for a copyright refusal to act on. This
34
34
  file is the ground truth.
35
- - **Summary** — a transformative summary of the cleaned text, produced by a
36
- short `claude --print` subprocess. Being transformative, it does not trip the
37
- copyright refusal either.
35
+ - **Inline text** — the same cleaned markdown returned in `text`, capped at 100k
36
+ chars so a large page does not flood the caller's context. No inference runs:
37
+ url-get does not summarise.
38
38
 
39
- Only `{ summary, referencePath }` returns to the conversation. The verbatim
40
- markdown is never injected wholesale: the agent greps the reference file when it
41
- needs a specific passage, and `librarian` reads the file directly when the
42
- operator chooses to ingest it.
39
+ `{ text, referencePath }` returns to the conversation. The full verbatim copy is
40
+ never injected wholesale beyond the cap: the agent greps the reference file when
41
+ it needs a specific passage, and `librarian` reads the file directly when the
42
+ operator chooses to ingest it. When a summary is wanted, the caller invokes
43
+ url-get from a delegated subagent — the subagent holds the full `text` in its own
44
+ context, summarises there, and returns only the summary to the main agent. This
45
+ keeps both the verbatim text and the summarisation model out of the main
46
+ conversation, and keeps `claude --print` out of url-get entirely (Task 639).
43
47
 
44
48
  ## Why it exists
45
49
 
@@ -49,19 +53,20 @@ source site and not in the outer prompt, so reframing cannot move it. A knowledg
49
53
  worker ingesting their own published writing (e.g. a Substack post) hits the same
50
54
  wall, because WebFetch cannot verify authorship. WebFetch is also structurally
51
55
  wrong for ingestion even when it does not refuse: it returns only a summary, never
52
- the verbatim source. `url-get` keeps WebFetch's two useful behaviours (HTML
53
- cleanup and a summary), adds the verbatim artefact, and removes the model from the
54
- verbatim path entirely.
56
+ the verbatim source. `url-get` keeps WebFetch's useful behaviour (HTML cleanup),
57
+ adds the verbatim artefact, and removes the model from the path entirely —
58
+ summarisation, when needed, is the delegated subagent's job, not url-get's.
55
59
 
56
60
  ## Surface boundaries
57
61
 
58
62
  - **Server-rendered HTML only.** `url-get` does not execute JavaScript — the same
59
63
  coverage limit as a plain fetch. JS-rendered pages are handled by the
60
64
  pre-installed browser MCP (Task 492).
61
- - **No graph write.** `url-get` writes a reference file and returns a summary; it
62
- never touches Neo4j. Ingestion is `librarian`'s job, reading the reference file.
63
- - **Verbatim is not size-capped** — it never enters the conversation, so there is
64
- nothing to cap. The summary input is capped only to bound subprocess cost.
65
+ - **No graph write.** `url-get` writes a reference file and returns cleaned text;
66
+ it never touches Neo4j. Ingestion is `librarian`'s job, reading the reference file.
67
+ - **Verbatim on disk is not size-capped** — the reference file holds the full
68
+ cleaned page. The inline `text` is capped at 100k chars only to bound what
69
+ enters the caller's context; the reference file remains the uncapped source.
65
70
  - **No caching.** Every call fetches fresh.
66
71
  - A page that returns a bot-challenge interstitial or an empty body fails with an
67
72
  explicit error (`challenge` / `empty`) and writes no reference file — never a
@@ -72,10 +77,10 @@ verbatim path entirely.
72
77
  `url-get` returns an error envelope (never throws to the caller) for: `fetch`
73
78
  (network/DNS/TLS/timeout), `http` (non-2xx status), `non-html` (unsupported
74
79
  content-type), `challenge` (bot interstitial), `empty` (no readable text), and
75
- `no-account-dir` (storage unresolvable). The summary is best-effort: if the
76
- subprocess fails, the call still succeeds with `summarized: false` and the
77
- reference file intact the verbatim artefact is the contract, the summary is
78
- derived.
80
+ `no-account-dir` (storage unresolvable). There is no inference step to fail: once
81
+ the reference file is on disk the call succeeds and returns its cleaned `text`.
82
+ An HTTP-200 page with no extractable body returns `text: ""` with `textLength: 0`
83
+ — the JavaScript-rendered-shell signal — and the caller retries with the browser MCP.
79
84
 
80
85
  ## Enabling
81
86
 
@@ -16,7 +16,7 @@ const server = new McpServer({
16
16
  name: "url-get",
17
17
  version: "0.1.0",
18
18
  });
19
- eagerTool(server, "url-get", "Fetch a server-rendered web page and produce two artefacts. (1) VERBATIM: the page is fetched over HTTP and cleaned to markdown with no model in the path, then written to an account-scoped reference file — this is the faithful ground-truth copy, never returned inline. (2) SUMMARY: a transformative summary of that text. Returns { summary, referencePath } grep the reference file for specific passages rather than asking for the whole page; librarian reads it directly to ingest. Use this instead of WebFetch when you need a faithful copy of a page (e.g. ingesting the operator's own writing) — WebFetch refuses to reproduce copyrighted text and only ever returns a summary. Handles server-rendered HTML only (no JavaScript execution). A page that returns a bot-challenge or empty body fails with an explicit error and writes no file.", {
19
+ eagerTool(server, "url-get", "Fetch a server-rendered web page with no model in the path. The page is fetched over HTTP and cleaned to markdown, then written verbatim to an account-scoped reference file (the faithful ground-truth copy). Returns { text, referencePath }: `text` is that cleaned markdown capped at 100k chars, `referencePath` is the full verbatim copy on disk. There is no summary and no subprocess — if you need a summary, invoke url-get from a delegated subagent so the full text stays in the subagent's context and only the summary returns to the main agent. For a large page, grep the reference file for specific passages rather than reading the whole `text`. Use this instead of WebFetch when you need a faithful copy of a page (e.g. ingesting the operator's own writing) — WebFetch refuses to reproduce copyrighted text. Handles server-rendered HTML only (no JavaScript execution); an empty `text` with textLength=0 means a JavaScript-rendered shell, so retry with the browser MCP. A page that returns a bot-challenge or empty body fails with an explicit error and writes no file.", {
20
20
  url: z.string().url().describe("Absolute http(s) URL of the page to fetch."),
21
21
  }, async (args) => {
22
22
  const result = await urlGet(args);
@@ -31,12 +31,12 @@ eagerTool(server, "url-get", "Fetch a server-rendered web page and produce two a
31
31
  {
32
32
  type: "text",
33
33
  text: JSON.stringify({
34
- summary: result.summary,
34
+ text: result.text,
35
35
  referencePath: result.referencePath,
36
36
  url: result.url,
37
37
  httpStatus: result.httpStatus,
38
38
  bytes: result.bytes,
39
- summarized: result.summarized,
39
+ textLength: result.textLength,
40
40
  }, null, 2),
41
41
  },
42
42
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,aAAa,CAAC,SAAS,CAAC,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,SAAS,CACP,MAAM,EACN,SAAS,EACT,s0BAAs0B,EACt0B;IACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;CAC7E,EACD,KAAK,EAAE,IAAqB,EAAE,EAAE;IAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,aAAa,CAAC,SAAS,CAAC,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,SAAS,CACP,MAAM,EACN,SAAS,EACT,gjCAAgjC,EAChjC;IACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;CAC7E,EACD,KAAK,EAAE,IAAqB,EAAE,EAAE;IAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,aAAa,EAAE,MAAM,CAAC,aAAa;oBACnC,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,UAAU,EAAE,MAAM,CAAC,UAAU;iBAC9B,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -9,8 +9,7 @@ export type UrlGetResult = {
9
9
  bytes: number;
10
10
  textLength: number;
11
11
  referencePath: string;
12
- summary: string;
13
- summarized: boolean;
12
+ text: string;
14
13
  } | {
15
14
  ok: false;
16
15
  url: string;
@@ -1 +1 @@
1
- {"version":3,"file":"url-get.d.ts","sourceRoot":"","sources":["../../src/tools/url-get.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAEzF,MAAM,MAAM,YAAY,GACpB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAyCN,wBAAsB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA2GxE"}
1
+ {"version":3,"file":"url-get.d.ts","sourceRoot":"","sources":["../../src/tools/url-get.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAEzF,MAAM,MAAM,YAAY,GACpB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAyCN,wBAAsB,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA0FxE"}
@@ -1,25 +1,24 @@
1
- // url-get — faithful page retrieval with a transformative summary.
1
+ // url-get — faithful page retrieval, no model in the path.
2
2
  //
3
- // FETCH ─▶ HTTP STATUS ─▶ CONTENT-TYPE ─▶ CHALLENGE/EMPTY ─▶ HTML→MD ─▶ WRITE REF ─▶ SUMMARISE
3
+ // FETCH ─▶ HTTP STATUS ─▶ CONTENT-TYPE ─▶ CHALLENGE/EMPTY ─▶ HTML→MD ─▶ WRITE REF ─▶ RETURN TEXT
4
4
  // │ │ │ │ │ │ │
5
5
  // ▼ ▼ ▼ ▼ ▼ ▼ ▼
6
- // [network?] [non-2xx?] [non-html?] [challenge?empty?] (verbatim) (ground (derived;
7
- // error= error= error= error= truth on best-effort,
8
- // fetch http non-html challenge|empty disk first) never loses
9
- // the verbatim)
6
+ // [network?] [non-2xx?] [non-html?] [challenge?empty?] (verbatim) (ground (capped
7
+ // error= error= error= error= truth on cleaned md,
8
+ // fetch http non-html challenge|empty disk first) no inference)
10
9
  //
11
- // Two artefacts from two mechanisms: the VERBATIM markdown (no model in the
12
- // path — nothing to refuse on copyright) written to an account-scoped
13
- // reference file, and a SUMMARY (a Claude subprocess — transformative, also no
14
- // refusal) returned to the conversation. Only { summary, referencePath }
15
- // reaches the agent; the verbatim is never injected wholesale.
10
+ // One mechanism, two surfaces of one artefact: the VERBATIM markdown (no model
11
+ // in the path — nothing to refuse on copyright) written to an account-scoped
12
+ // reference file, and the same cleaned text returned inline, capped. Only
13
+ // { text, referencePath } reaches the caller. There is no subprocess inference:
14
+ // a caller that needs a summary delegates to a subagent which holds the full
15
+ // text in its own context and returns only the summary to the main agent.
16
16
  import { createHash } from "node:crypto";
17
17
  import { mkdir, writeFile } from "node:fs/promises";
18
18
  import { join } from "node:path";
19
19
  import { NodeHtmlMarkdown } from "node-html-markdown";
20
- import { summarise } from "../lib/summarise.js";
21
20
  const FETCH_TIMEOUT_MS = 30_000;
22
- const SUMMARY_INPUT_CAP = 100_000;
21
+ const TEXT_INPUT_CAP = 100_000;
23
22
  const USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 " +
24
23
  "(KHTML, like Gecko) Chrome/124.0 Safari/537.36";
25
24
  // Strong, low-false-positive markers of a bot-challenge interstitial. These
@@ -121,33 +120,14 @@ export async function urlGet(params) {
121
120
  const fileBody = `<!-- url-get source=${url} fetchedAt=${fetchedAt} httpStatus=${httpStatus} -->\n\n${markdown}\n`;
122
121
  await mkdir(dir, { recursive: true });
123
122
  await writeFile(referencePath, fileBody, "utf-8");
124
- // Summary is derived and best-effort. The verbatim file is the contract and
125
- // is already on disk; a summary failure degrades gracefully rather than
126
- // discarding the artefact. On empty extractable text we short-circuit with a
127
- // synthesised summary calling the LLM on zero input either fails or
128
- // hallucinates, neither of which serves the agent.
129
- let summary;
130
- let summarized;
131
- if (textLength === 0) {
132
- summary =
133
- `Page returned HTTP ${httpStatus} but had no extractable text content ` +
134
- `(textLength=0; bytes=${bytes}). The response is likely a JavaScript-` +
135
- `rendered shell; use browser-render to retrieve the rendered DOM.`;
136
- summarized = false;
137
- }
138
- else {
139
- try {
140
- summary = await summarise(url, markdown.slice(0, SUMMARY_INPUT_CAP));
141
- summarized = true;
142
- }
143
- catch (err) {
144
- const detail = err instanceof Error ? err.message : String(err);
145
- summary = `<summary unavailable: ${detail}> — read the reference file at ${referencePath} for the full text.`;
146
- summarized = false;
147
- }
148
- }
123
+ // The cleaned text is returned inline, capped no model in the path. The
124
+ // verbatim file on disk is the full ground truth; `text` is the same content
125
+ // bounded so a large page does not flood the caller's context. An empty
126
+ // `text` with textLength=0 is the JavaScript-rendered-shell signal; the
127
+ // caller reads the numerics and retries with the browser MCP.
128
+ const text = markdown.slice(0, TEXT_INPUT_CAP);
149
129
  console.error(`[url-get] url=${url} httpStatus=${httpStatus} bytes=${bytes} textLength=${textLength} ` +
150
- `refPath=${referencePath} summarized=${summarized} (${Date.now() - t0}ms)`);
151
- return { ok: true, url, httpStatus, bytes, textLength, referencePath, summary, summarized };
130
+ `refPath=${referencePath} mode=text (${Date.now() - t0}ms)`);
131
+ return { ok: true, url, httpStatus, bytes, textLength, referencePath, text };
152
132
  }
153
133
  //# sourceMappingURL=url-get.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-get.js","sourceRoot":"","sources":["../../src/tools/url-get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url-get.js","sourceRoot":"","sources":["../../src/tools/url-get.ts"],"names":[],"mappings":"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"}
@@ -65,7 +65,6 @@ mkdir -p "$ACCOUNT_DIR/agents/admin" "$ACCOUNT_DIR/.claude" "$ACCOUNT_DIR/specia
65
65
  # to locate scripts relative to the platform installation, not the account dir.
66
66
  ACCOUNT_SETTINGS="$ACCOUNT_DIR/.claude/settings.json"
67
67
  HOOKS_PATH="\$PLATFORM_ROOT/plugins/admin/hooks"
68
- WRITER_CRAFT_HOOKS_PATH="\$PLATFORM_ROOT/../premium-plugins/writer-craft/hooks"
69
68
  cat > "$ACCOUNT_SETTINGS" << SETTINGS_EOF
70
69
  {
71
70
  "permissions": {
@@ -158,15 +157,7 @@ cat > "$ACCOUNT_SETTINGS" << SETTINGS_EOF
158
157
  {
159
158
  "hooks": [
160
159
  { "type": "command", "command": "bash $HOOKS_PATH/archive-ingest-surface-gate.sh" },
161
- { "type": "command", "command": "bash $HOOKS_PATH/prompt-optimiser-directive.sh" },
162
- { "type": "command", "command": "bash $HOOKS_PATH/insight.sh" }
163
- ]
164
- }
165
- ],
166
- "SessionEnd": [
167
- {
168
- "hooks": [
169
- { "type": "command", "command": "bash $WRITER_CRAFT_HOOKS_PATH/voice-session-end-text.sh" }
160
+ { "type": "command", "command": "bash $HOOKS_PATH/prompt-optimiser-directive.sh" }
170
161
  ]
171
162
  }
172
163
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAiB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAiLtD,CAAA"}
1
+ {"version":3,"file":"canonical-tool-names.generated.d.ts","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAiB7C,CAAA;AAED,gEAAgE;AAChE,eAAO,MAAM,yBAAyB,EAAE,SAAS,MAAM,EAgLtD,CAAA"}
@@ -50,7 +50,6 @@ export const CANONICAL_MAXY_TOOL_NAMES = [
50
50
  "mcp__plugin_admin_admin__remote-auth-status",
51
51
  "mcp__plugin_admin_admin__session-reset",
52
52
  "mcp__plugin_admin_admin__session-resume",
53
- "mcp__plugin_admin_admin__session-retrospective-mark-complete",
54
53
  "mcp__plugin_admin_admin__skill-load",
55
54
  "mcp__plugin_admin_admin__store-skill",
56
55
  "mcp__plugin_admin_admin__system-status",
@@ -1 +1 @@
1
- {"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canonical-tool-names.generated.js","sourceRoot":"","sources":["../src/canonical-tool-names.generated.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import type { RateLimiter } from './spawn-rate-limiter.js';
5
5
  import type { AuditRegistry } from './public-tool-audit.js';
6
6
  import { type UserTitleStore } from './user-title-store.js';
7
7
  export declare const SESSION_ID_PATTERN: RegExp;
8
+ export declare const RC_SPAWN_URL_WAIT_DEFAULT_MS = 60000;
8
9
  export interface HttpDeps extends Omit<SpawnDeps, 'onSessionReady' | 'watcher'> {
9
10
  /** Admin operator's userId, sourced from users.json at boot (same as
10
11
  * RcDaemonDeps.userId). Passed to buildRcChildEnv so the scheduling MCP
@@ -18,6 +19,10 @@ export interface HttpDeps extends Omit<SpawnDeps, 'onSessionReady' | 'watcher'>
18
19
  /** Task 253 — operator-stamped title override store. Reads merge into
19
20
  * every displayName resolution site; the /:sessionId/rename route writes. */
20
21
  userTitleStore: UserTitleStore;
22
+ /** Task 648 — override the `/rc-spawn` pid/bind poll bound. Production
23
+ * omits this and gets RC_SPAWN_URL_WAIT_DEFAULT_MS (60s); tests inject a
24
+ * short value to exercise the bind-timeout response without a 60s wait. */
25
+ rcSpawnUrlWaitMs?: number;
21
26
  }
22
27
  /** Task 189 — Hono instance with the test-only fan-out trigger attached.
23
28
  * The vitest fixture for the `/events` url-capture re-emit drives this
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAM3B,OAAO,EAeL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AAezB,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAgF9E,eAAO,MAAM,kBAAkB,QAA2B,CAAA;AAI1D,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7E;;qEAEiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,WAAW,CAAA;IAC/B,eAAe,EAAE,aAAa,CAAA;IAC9B;kFAC8E;IAC9E,cAAc,EAAE,cAAc,CAAA;CAC/B;AAsMD;;;kEAGkE;AAClE,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG;IAC3B,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACpD;;;+CAG2C;IAC3C,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAChD,CAAA;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAggDpD"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAM3B,OAAO,EAeL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAA;AAezB,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3D,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAgF9E,eAAO,MAAM,kBAAkB,QAA2B,CAAA;AAS1D,eAAO,MAAM,4BAA4B,QAAS,CAAA;AAIlD,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7E;;qEAEiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,SAAS,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,WAAW,CAAA;IAC/B,eAAe,EAAE,aAAa,CAAA;IAC9B;kFAC8E;IAC9E,cAAc,EAAE,cAAc,CAAA;IAC9B;;gFAE4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAsMD;;;kEAGkE;AAClE,MAAM,MAAM,OAAO,GAAG,IAAI,GAAG;IAC3B,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACpD;;;+CAG2C;IAC3C,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAChD,CAAA;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CA0hDpD"}
@@ -123,6 +123,14 @@ function parseSpecialistDomains(raw) {
123
123
  // is narrowed so the downstream `jsonlPathForSessionId` composition
124
124
  // cannot be steered into a sibling extension or a path segment.
125
125
  export const SESSION_ID_PATTERN = /^[A-Za-z0-9_-]{1,128}$/;
126
+ // Task 648 — `/rc-spawn` polls the pid file for the late-written
127
+ // bridgeSessionId (the `claude.ai/code/session_<id>` slug) up to this bound.
128
+ // Device-measured RC bridge bind latency is 18–30s; the prior 12s bound
129
+ // expired first, so the slug was never captured before the response returned
130
+ // and the client opened a bare URL. 60s covers the observed worst case.
131
+ // Injectable via `HttpDeps.rcSpawnUrlWaitMs` so the timeout path is
132
+ // unit-testable without a real 60s wait.
133
+ export const RC_SPAWN_URL_WAIT_DEFAULT_MS = 60_000;
126
134
  const LIST_TAIL_BYTES = 64 * 1024;
127
135
  function timed(logger, method, path, status, ms) {
128
136
  logger(`api method=${method} path=${path} outcome=${status} ms=${ms}`);
@@ -1569,6 +1577,9 @@ export function buildHttpApp(deps) {
1569
1577
  if (reason === 'auth-refresh-failed') {
1570
1578
  deps.logger(`[rc-spawn] op=auth-refresh-failed authStatus=${authSnap} unitToken=${unitToken}`);
1571
1579
  }
1580
+ // Task 648 — tie the 500 to the same resume-response decision line the
1581
+ // success/timeout paths emit, so one grep covers every spawn outcome.
1582
+ deps.logger(`[rc-spawn] op=resume-response sessionId=${sessionId ?? 'none'} slug=none outcome=spawn-failed reason=${JSON.stringify(reason)}`);
1572
1583
  return c.json({ error: msg, reason, authStatus: authSnap }, 500);
1573
1584
  }
1574
1585
  // Step 3 — PTY spawned. fd baseline at this instant; the fd-release
@@ -1661,7 +1672,7 @@ export function buildHttpApp(deps) {
1661
1672
  //
1662
1673
  // Task 592 — capture the promise once so the fire-and-forget logging
1663
1674
  // and the bounded bridgeSessionId await share the same resolution.
1664
- const RC_SPAWN_URL_WAIT_MS = 12_000;
1675
+ const RC_SPAWN_URL_WAIT_MS = deps.rcSpawnUrlWaitMs ?? RC_SPAWN_URL_WAIT_DEFAULT_MS;
1665
1676
  const waitPidPromise = deps.watcher.waitForPid(pty.pid, deps.pidFileTimeoutMs);
1666
1677
  // Fire-and-forget: unchanged logging contract.
1667
1678
  void waitPidPromise
@@ -1719,12 +1730,31 @@ export function buildHttpApp(deps) {
1719
1730
  // file mid-write or transiently unreadable — retry until the deadline
1720
1731
  }
1721
1732
  }
1733
+ // Task 648 — the bind decision drives what the client renders: a slug
1734
+ // navigates the opened tab to the exact session URL; a null slug after
1735
+ // the full wait is a bind-timeout the client surfaces as an error modal
1736
+ // (never a bare claude.ai/code tab). `outcome` and `reason` are threaded
1737
+ // through the proxy unchanged so the client decides modal-vs-navigate
1738
+ // from one server-supplied value.
1739
+ const waitedMs = Date.now() - start;
1740
+ const outcome = bridgeSessionId ? 'bound' : 'timeout';
1741
+ const reason = outcome === 'bound' ? null : 'pid-bind-timeout';
1742
+ if (outcome === 'bound') {
1743
+ deps.logger(`[rc-spawn] op=resume-bound sessionId=${sessionId ?? 'none'} slug=${bridgeSessionId} ms=${waitedMs}`);
1744
+ }
1745
+ else {
1746
+ deps.logger(`[rc-spawn] op=resume-timeout sessionId=${sessionId ?? 'none'} waitedMs=${RC_SPAWN_URL_WAIT_MS} slug=none`);
1747
+ }
1748
+ deps.logger(`[rc-spawn] op=resume-response sessionId=${sessionId ?? 'none'} slug=${bridgeSessionId ?? 'none'} outcome=${outcome} reason=${reason ?? 'none'}`);
1722
1749
  // Every rc-spawn child runs inside a `systemd-run --user --scope`
1723
1750
  // unit driven by node-pty; the operator-visible spawnMethod marker
1724
1751
  // is kept stable so server.log greps survive the Task 573 cleanup.
1725
1752
  deps.logger(`[sessions-rc-resume] mode=${mode} sessionId=${sessionId ?? 'none'} jsonlPath=${existingJsonlPath ?? 'none'} name=${name ?? 'none'} spawnedPid=${pty.pid} bridgeId=${bridgeSessionId ?? 'pending'} spawnMethod=systemd-scope env.CLAUDE_CONFIG_DIR=${deps.claudeConfigDir}`);
1726
1753
  timed(deps.logger, 'POST', '/rc-spawn', 200, Date.now() - start);
1727
- return c.json({ spawnedPid: pty.pid, sessionId: sessionId ?? null, bridgeSessionId });
1754
+ // `slug` is the Task 648 canonical field the client navigates by;
1755
+ // `bridgeSessionId` is the same value, retained so pre-648 consumers and
1756
+ // tests keep resolving. They never diverge — `slug` IS `bridgeSessionId`.
1757
+ return c.json({ spawnedPid: pty.pid, sessionId: sessionId ?? null, bridgeSessionId, slug: bridgeSessionId, outcome, reason });
1728
1758
  });
1729
1759
  return app;
1730
1760
  }