@rubytech/create-maxy-code 0.1.22 → 0.1.24

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 (173) hide show
  1. package/dist/__tests__/samba-provision.test.js +202 -0
  2. package/dist/index.js +127 -73
  3. package/dist/samba-provision.js +215 -0
  4. package/dist/uninstall.js +160 -3
  5. package/package.json +1 -1
  6. package/payload/platform/plugins/admin/PLUGIN.md +4 -0
  7. package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +47 -0
  8. package/payload/platform/plugins/admin/skills/commitment-followthrough/SKILL.md +60 -0
  9. package/payload/platform/plugins/admin/skills/file-presentation/SKILL.md +67 -0
  10. package/payload/platform/plugins/admin/skills/session-management/SKILL.md +62 -0
  11. package/payload/platform/plugins/deep-research/.claude-plugin/plugin.json +1 -1
  12. package/payload/platform/plugins/deep-research/PLUGIN.md +7 -1
  13. package/payload/platform/plugins/deep-research/recipes/README.md +36 -0
  14. package/payload/platform/plugins/deep-research/skills/academic-verify/SKILL.md +75 -0
  15. package/payload/platform/plugins/deep-research/skills/book-mirror/SKILL.md +68 -0
  16. package/payload/platform/plugins/deep-research/skills/data-research/SKILL.md +108 -0
  17. package/payload/platform/plugins/deep-research/skills/strategic-reading/SKILL.md +69 -0
  18. package/payload/platform/plugins/docs/references/deployment.md +23 -2
  19. package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +1 -1
  20. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +7 -2
  21. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts.map +1 -1
  22. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +7 -2
  23. package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
  24. package/payload/platform/plugins/email/references/email-reference.md +4 -4
  25. package/payload/platform/plugins/linkedin-import/skills/linkedin-import/SKILL.md +2 -0
  26. package/payload/platform/plugins/memory/PLUGIN.md +6 -0
  27. package/payload/platform/plugins/memory/skills/archive-crawler/SKILL.md +67 -0
  28. package/payload/platform/plugins/memory/skills/concept-synthesis/SKILL.md +80 -0
  29. package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +2 -0
  30. package/payload/platform/plugins/memory/skills/document-ingest/SKILL.md +2 -0
  31. package/payload/platform/plugins/scheduling/PLUGIN.md +4 -1
  32. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +7 -3
  33. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts.map +1 -1
  34. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +7 -3
  35. package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
  36. package/payload/platform/plugins/scheduling/skills/briefing/SKILL.md +75 -0
  37. package/payload/platform/plugins/scheduling/skills/daily-prep/SKILL.md +61 -0
  38. package/payload/platform/plugins/workflows/PLUGIN.md +2 -2
  39. package/payload/platform/plugins/workflows/skills/workflow-manager/SKILL.md +1 -1
  40. package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
  41. package/payload/platform/services/claude-session-manager/dist/http-server.js +14 -1
  42. package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
  43. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +14 -0
  44. package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
  45. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +9 -2
  46. package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
  47. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +25 -1
  48. package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
  49. package/payload/platform/services/claude-session-manager/dist/system-prompt.js +54 -3
  50. package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
  51. package/payload/platform/templates/agents/admin/IDENTITY.md +39 -291
  52. package/payload/platform/templates/agents/admin/SOUL.md +4 -4
  53. package/payload/platform/templates/specialists/agents/content-producer.md +24 -69
  54. package/payload/platform/templates/specialists/agents/database-operator.md +49 -155
  55. package/payload/platform/templates/specialists/agents/personal-assistant.md +27 -177
  56. package/payload/platform/templates/specialists/agents/project-manager.md +29 -96
  57. package/payload/platform/templates/specialists/agents/research-assistant.md +36 -78
  58. package/payload/premium-plugins/real-agency/agents/compliance.md +14 -0
  59. package/payload/premium-plugins/real-agency/agents/negotiator.md +22 -0
  60. package/payload/premium-plugins/real-agency/agents/valuer.md +16 -0
  61. package/payload/premium-plugins/real-agency/plugins/estate-business/.claude-plugin/plugin.json +1 -1
  62. package/payload/premium-plugins/real-agency/plugins/estate-business/PLUGIN.md +29 -13
  63. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/commission-calculator/SKILL.md +40 -0
  64. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/month-end-close/SKILL.md +69 -0
  65. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/payment-batch-stager/SKILL.md +42 -0
  66. package/payload/premium-plugins/real-agency/plugins/estate-business/skills/period-reconciler/SKILL.md +42 -0
  67. package/payload/premium-plugins/real-agency/plugins/estate-sales/.claude-plugin/plugin.json +1 -1
  68. package/payload/premium-plugins/real-agency/plugins/estate-sales/PLUGIN.md +27 -13
  69. package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/chase-progression/SKILL.md +107 -0
  70. package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/risk-scorer/SKILL.md +42 -0
  71. package/payload/premium-plugins/real-agency/plugins/leads/.claude-plugin/plugin.json +1 -1
  72. package/payload/premium-plugins/real-agency/plugins/leads/PLUGIN.md +24 -10
  73. package/payload/premium-plugins/real-agency/plugins/leads/skills/chain-progression-tracker/SKILL.md +51 -0
  74. package/payload/premium-plugins/real-agency/plugins/leads/skills/diary-builder/SKILL.md +38 -0
  75. package/payload/premium-plugins/real-agency/plugins/leads/skills/enquiry-triage/SKILL.md +36 -0
  76. package/payload/premium-plugins/real-agency/plugins/leads/skills/morning-round/SKILL.md +72 -0
  77. package/payload/premium-plugins/real-agency/plugins/listings/.claude-plugin/plugin.json +1 -1
  78. package/payload/premium-plugins/real-agency/plugins/listings/PLUGIN.md +43 -12
  79. package/payload/premium-plugins/real-agency/plugins/listings/skills/comparable-finder/SKILL.md +52 -0
  80. package/payload/premium-plugins/real-agency/plugins/listings/skills/epc-checker/SKILL.md +38 -0
  81. package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-copy-writer/SKILL.md +55 -0
  82. package/payload/premium-plugins/real-agency/plugins/listings/skills/local-market-stats/SKILL.md +33 -0
  83. package/payload/premium-plugins/real-agency/plugins/listings/skills/new-instruction/SKILL.md +78 -0
  84. package/payload/premium-plugins/real-agency/plugins/listings/skills/particulars-builder/SKILL.md +48 -0
  85. package/payload/premium-plugins/real-agency/plugins/listings/skills/portal-launch-scheduler/SKILL.md +49 -0
  86. package/payload/premium-plugins/real-agency/plugins/listings/skills/pricing-scenario-builder/SKILL.md +35 -0
  87. package/payload/premium-plugins/real-agency/plugins/listings/skills/supplier-booker/SKILL.md +39 -0
  88. package/payload/premium-plugins/real-agency/plugins/listings/skills/talk-track-composer/SKILL.md +36 -0
  89. package/payload/premium-plugins/real-agency/plugins/listings/skills/terms-of-business-drafter/SKILL.md +54 -0
  90. package/payload/premium-plugins/real-agency/plugins/listings/skills/valuation-prep/SKILL.md +69 -0
  91. package/payload/premium-plugins/real-agency/plugins/loop/PLUGIN.md +20 -0
  92. package/payload/premium-plugins/real-agency/plugins/loop/skills/compliance-flag-checker/SKILL.md +53 -0
  93. package/payload/premium-plugins/real-agency/plugins/loop/skills/priority-ranker/SKILL.md +40 -0
  94. package/payload/premium-plugins/real-agency/plugins/loop/skills/tone-matched-drafter/SKILL.md +53 -0
  95. package/payload/premium-plugins/real-agency/plugins/loop/skills/variance-narrator/SKILL.md +50 -0
  96. package/payload/premium-plugins/real-agency/plugins/loop/skills/vendor-research/SKILL.md +54 -0
  97. package/payload/server/public/assets/{Checkbox-B79fVxpA.js → Checkbox-D1OQD43b.js} +1 -1
  98. package/payload/server/public/assets/admin-czNBxWor.js +216 -0
  99. package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-D8e59YJ0.js → architectureDiagram-Q4EWVU46-BcwgT80u.js} +1 -1
  100. package/payload/server/public/assets/{blockDiagram-DXYQGD6D-CxaDkc0A.js → blockDiagram-DXYQGD6D-BMSyZUQA.js} +1 -1
  101. package/payload/server/public/assets/{brand-Cg9t5U6J.css → brand-2cku8WFs.css} +1 -1
  102. package/payload/server/public/assets/{brand-jT16ErmC.js → brand-CSQuxS9w.js} +1 -1
  103. package/payload/server/public/assets/{c4Diagram-AHTNJAMY-D0PAvq-q.js → c4Diagram-AHTNJAMY-DPRGY1jJ.js} +1 -1
  104. package/payload/server/public/assets/channel-fxEghWew.js +1 -0
  105. package/payload/server/public/assets/{chunk-336JU56O-B-CXn-Et.js → chunk-336JU56O-B7oQ3g1c.js} +2 -2
  106. package/payload/server/public/assets/{chunk-426QAEUC-BLzCQHKA.js → chunk-426QAEUC-C1P0yFXw.js} +1 -1
  107. package/payload/server/public/assets/{chunk-4TB4RGXK-Bql1UwLT.js → chunk-4TB4RGXK-LI7kOJd0.js} +1 -1
  108. package/payload/server/public/assets/{chunk-5FUZZQ4R-CQK7jBtX.js → chunk-5FUZZQ4R-CXQRGTQE.js} +1 -1
  109. package/payload/server/public/assets/{chunk-5PVQY5BW-AJc1-lvX.js → chunk-5PVQY5BW-NSyzpXRy.js} +1 -1
  110. package/payload/server/public/assets/{chunk-EDXVE4YY-Cf3E3THL.js → chunk-EDXVE4YY-voNwxbDs.js} +1 -1
  111. package/payload/server/public/assets/{chunk-ENJZ2VHE-BNx6z6hJ.js → chunk-ENJZ2VHE-CMEMPzYY.js} +1 -1
  112. package/payload/server/public/assets/{chunk-ICPOFSXX-DBUEFs2-.js → chunk-ICPOFSXX-hEbwu-pe.js} +1 -1
  113. package/payload/server/public/assets/{chunk-OYMX7WX6-Csx2p315.js → chunk-OYMX7WX6-DxskDrLs.js} +1 -1
  114. package/payload/server/public/assets/{chunk-U2HBQHQK-x17h7UYW.js → chunk-U2HBQHQK-D7TKgUo0.js} +1 -1
  115. package/payload/server/public/assets/{chunk-X2U36JSP--Lkl5yjV.js → chunk-X2U36JSP-BvPUQEPm.js} +1 -1
  116. package/payload/server/public/assets/{chunk-YZCP3GAM-C4GsNX8A.js → chunk-YZCP3GAM-BY-RWQUW.js} +1 -1
  117. package/payload/server/public/assets/{chunk-ZZ45TVLE-YrhUPmZc.js → chunk-ZZ45TVLE-DZvOYDY6.js} +1 -1
  118. package/payload/server/public/assets/classDiagram-6PBFFD2Q-BsWzGW0N.js +1 -0
  119. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BGVa3h90.js +1 -0
  120. package/payload/server/public/assets/clone-Khvocke2.js +1 -0
  121. package/payload/server/public/assets/{dagre-YVALPG-M.js → dagre-Bt-fpckL.js} +1 -1
  122. package/payload/server/public/assets/{dagre-KV5264BT-D6JU6DW_.js → dagre-KV5264BT-Cnj0mUZl.js} +1 -1
  123. package/payload/server/public/assets/data-DBd-Buhp.js +1 -0
  124. package/payload/server/public/assets/device-url-actions-Bjz3Xzbm.js +33 -0
  125. package/payload/server/public/assets/{diagram-5BDNPKRD-yeO06N5Q.js → diagram-5BDNPKRD-DjLzvOlx.js} +1 -1
  126. package/payload/server/public/assets/{diagram-G4DWMVQ6-DzbVT_BC.js → diagram-G4DWMVQ6-DTfuRd-T.js} +1 -1
  127. package/payload/server/public/assets/{diagram-MMDJMWI5-DwYO5VZF.js → diagram-MMDJMWI5-BaL2mCnx.js} +1 -1
  128. package/payload/server/public/assets/{diagram-TYMM5635-BLUcdkDS.js → diagram-TYMM5635-C5InWY5R.js} +1 -1
  129. package/payload/server/public/assets/{erDiagram-SMLLAGMA-BiEUB19e.js → erDiagram-SMLLAGMA-DO7BXTpn.js} +1 -1
  130. package/payload/server/public/assets/{flowDiagram-DWJPFMVM-TILIKxOp.js → flowDiagram-DWJPFMVM-DDdAKfLf.js} +1 -1
  131. package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-B7cGzYqT.js → ganttDiagram-T4ZO3ILL-arJD8Utm.js} +1 -1
  132. package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DFOxN5bc.js → gitGraphDiagram-UUTBAWPF-C55GH-OS.js} +1 -1
  133. package/payload/server/public/assets/graph-DUtVdnZ6.js +1 -0
  134. package/payload/server/public/assets/graph-labels-Dxfue-fP.js +1 -0
  135. package/payload/server/public/assets/{graphlib-BBibixaA.js → graphlib-DL9PM7Ex.js} +1 -1
  136. package/payload/server/public/assets/{infoDiagram-42DDH7IO-nH2azhY8.js → infoDiagram-42DDH7IO-BMSGqUbG.js} +1 -1
  137. package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-WD3tfqFi.js → ishikawaDiagram-UXIWVN3A-Dw6BZ6BG.js} +1 -1
  138. package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-LUkaVSqw.js → journeyDiagram-VCZTEJTY-DrywUGXw.js} +1 -1
  139. package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Dk-lYgpJ.js → kanban-definition-6JOO6SKY-DuwtVBBc.js} +1 -1
  140. package/payload/server/public/assets/{line-BDv6CEnp.js → line-JAksyKHj.js} +1 -1
  141. package/payload/server/public/assets/{mermaid-parser.core-D2XsSGgp.js → mermaid-parser.core-BMq-ApBW.js} +1 -1
  142. package/payload/server/public/assets/{mermaid.core-FyN-UmQV.js → mermaid.core-tH4oX0Kh.js} +3 -3
  143. package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BRAHEUIS.js → mindmap-definition-QFDTVHPH-D1OiiJga.js} +1 -1
  144. package/payload/server/public/assets/page-BZpoS7iR.js +1 -0
  145. package/payload/server/public/assets/{page-CTbSJbem.js → page-CkvBvezS.js} +2 -2
  146. package/payload/server/public/assets/{pieDiagram-DEJITSTG-BqibVC2X.js → pieDiagram-DEJITSTG-Ckwm69PW.js} +1 -1
  147. package/payload/server/public/assets/{public-BDUZIabs.js → public-C-dTMgXu.js} +5 -5
  148. package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DNuExGnr.js → quadrantDiagram-34T5L4WZ-COw3yZ1j.js} +1 -1
  149. package/payload/server/public/assets/{requirementDiagram-MS252O5E-5JXTdydh.js → requirementDiagram-MS252O5E-DqGzM4K-.js} +1 -1
  150. package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-B_8rhvcR.js → sankeyDiagram-XADWPNL6-D-l1c_Pl.js} +1 -1
  151. package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BznkBgjf.js → sequenceDiagram-FGHM5R23-BeIi0DtJ.js} +1 -1
  152. package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BeAZOQfs.js → stateDiagram-FHFEXIEX-C-jgegLk.js} +1 -1
  153. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BaMs8Znv.js +1 -0
  154. package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CpJAs-Vw.js → timeline-definition-GMOUNBTQ-BGFKkYmi.js} +1 -1
  155. package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BzH3ItkG.js → vennDiagram-DHZGUBPP-5NuIhJLS.js} +1 -1
  156. package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-ax9AgwA1.js → wardleyDiagram-NUSXRM2D-Be9ytVut.js} +1 -1
  157. package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CV6vt_tW.js → xychartDiagram-5P7HB3ND-DCyHg41R.js} +1 -1
  158. package/payload/server/public/data.html +5 -5
  159. package/payload/server/public/graph.html +6 -6
  160. package/payload/server/public/index.html +8 -8
  161. package/payload/server/public/public.html +5 -5
  162. package/payload/server/server.js +62 -101
  163. package/payload/server/public/assets/admin-CXLuiXFU.js +0 -216
  164. package/payload/server/public/assets/channel-BU_eIdRB.js +0 -1
  165. package/payload/server/public/assets/classDiagram-6PBFFD2Q-DMpM1d2b.js +0 -1
  166. package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D_XbuPVj.js +0 -1
  167. package/payload/server/public/assets/clone-BBT00JUO.js +0 -1
  168. package/payload/server/public/assets/data-BdwO_kv-.js +0 -1
  169. package/payload/server/public/assets/device-url-actions-C8dD0ydz.js +0 -33
  170. package/payload/server/public/assets/graph-DpgsOhUZ.js +0 -1
  171. package/payload/server/public/assets/graph-labels-DJ717p00.js +0 -1
  172. package/payload/server/public/assets/page-BWHYktEF.js +0 -1
  173. package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-iVlXKz7S.js +0 -1
@@ -7410,7 +7410,7 @@ app7.get("/group-info", async (c) => {
7410
7410
  var whatsapp_default = app7;
7411
7411
 
7412
7412
  // server/routes/onboarding.ts
7413
- import { spawn, execFileSync as execFileSync2 } from "child_process";
7413
+ import { spawn, spawnSync as spawnSync2, execFileSync as execFileSync2 } from "child_process";
7414
7414
  import { openSync, closeSync, writeFileSync as writeFileSync9, writeSync, existsSync as existsSync10, mkdirSync as mkdirSync6, readFileSync as readFileSync13, unlinkSync as unlinkSync2 } from "fs";
7415
7415
  import { resolve as resolve11, dirname as dirname4 } from "path";
7416
7416
  import { createHash, randomUUID as randomUUID6 } from "crypto";
@@ -7705,6 +7705,24 @@ app8.post("/set-pin", async (c) => {
7705
7705
  return c.json({ error: "PIN saved but admin role could not be recorded. See server log." }, 500);
7706
7706
  }
7707
7707
  console.log(`[set-pin] wrote users.json + account.json admins: userId=${userId.slice(0, 8)}\u2026 role=owner`);
7708
+ if (process.platform === "linux") {
7709
+ const smbProc = spawnSync2("sudo", ["-n", "smbpasswd", "-a", "-s", "admin"], {
7710
+ input: `${body.pin}
7711
+ ${body.pin}
7712
+ `,
7713
+ stdio: ["pipe", "pipe", "pipe"],
7714
+ encoding: "utf-8",
7715
+ timeout: 1e4
7716
+ });
7717
+ if (smbProc.status === 0) {
7718
+ console.log(`[set-pin] smb-password-synced userId=${userId.slice(0, 8)}\u2026`);
7719
+ } else {
7720
+ const stderr = (smbProc.stderr ?? "").trim().slice(0, 200);
7721
+ console.error(`[set-pin] smb-password-sync-failed exit=${smbProc.status} stderr=${JSON.stringify(stderr)}`);
7722
+ }
7723
+ } else {
7724
+ console.log(`[set-pin] smb-password-sync-skipped reason=non-linux platform=${process.platform}`);
7725
+ }
7708
7726
  try {
7709
7727
  const adminBind = await writeAdminUserAndPerson({
7710
7728
  userId,
@@ -9447,55 +9465,24 @@ app21.put("/:id/label", requireAdminSession, async (c) => {
9447
9465
  var sessions_default = app21;
9448
9466
 
9449
9467
  // app/lib/claude-agent/onboarding-prompt.ts
9450
- var eligibleForInjection = /* @__PURE__ */ new Set();
9451
- function markEligibleForInjection(managerSessionId) {
9452
- eligibleForInjection.add(managerSessionId);
9453
- }
9454
- function consumeInjectionSlot(managerSessionId) {
9455
- return eligibleForInjection.delete(managerSessionId);
9456
- }
9468
+ var TAG19 = "[onboarding-prompt]";
9457
9469
  async function buildOnboardingPromptBlock(accountId) {
9458
9470
  const step = await loadOnboardingStep(accountId);
9459
9471
  const accountIdShort = accountId.slice(0, 8);
9460
9472
  if (step === null) {
9461
- const block2 = renderUnreachableBlock();
9462
- console.log(`[onboarding-inject] graph-unreachable accountId=${accountIdShort}`);
9463
- return { injected: true, block: block2, step: "graph-unreachable" };
9464
- }
9465
- if (step === 9) {
9466
- console.log(`[onboarding-inject] agent=admin accountId=${accountIdShort} step=9 injected=false`);
9467
- return { injected: false, reason: "complete" };
9468
- }
9469
- if (step === -1) {
9470
- const block2 = renderIncompleteBlock(-1);
9471
- console.log(`[onboarding-inject] agent=admin accountId=${accountIdShort} step=missing injected=true`);
9472
- return { injected: true, block: block2, step: "missing" };
9473
- }
9474
- const block = renderIncompleteBlock(step);
9475
- console.log(`[onboarding-inject] agent=admin accountId=${accountIdShort} step=${step} injected=true`);
9476
- return { injected: true, block, step };
9477
- }
9478
- function renderIncompleteBlock(currentStep) {
9479
- const stepAttr = currentStep < 0 ? "missing" : String(currentStep);
9480
- const resumeStep = currentStep < 0 ? 0 : currentStep + 1;
9481
- return [
9482
- `<onboarding-state currentStep="${stepAttr}" resumeStep="${resumeStep}">`,
9483
- `Onboarding is incomplete. Your first tool call this turn is \`skill-load\` with \`skillName=onboarding\`. Your second tool call is \`render-component\` for step ${resumeStep}, exactly as the skill body directs. Do not greet, do not summarise, do not write a preamble (\`let me check\`, \`let me figure out\`, \`let me list\` and similar phrasings are forbidden). The skill body is the only authority for what the operator sees next.`,
9484
- `</onboarding-state>`,
9485
- ""
9486
- ].join("\n");
9487
- }
9488
- function renderUnreachableBlock() {
9489
- return [
9490
- `<onboarding-state currentStep="unknown" graphUnreachable="true">`,
9491
- `Neo4j is unreachable, so onboarding state cannot be read. Do not assume onboarding is complete. Tell the operator the graph is unreachable, name the symptom in one line, and stop \u2014 do not improvise an onboarding flow without state, and do not silently skip the step the operator was on.`,
9492
- `</onboarding-state>`,
9493
- ""
9494
- ].join("\n");
9473
+ console.log(`${TAG19} graph-unreachable accountId=${accountIdShort}`);
9474
+ } else if (step === 9) {
9475
+ console.log(`${TAG19} agent=admin accountId=${accountIdShort} step=9 complete`);
9476
+ } else if (step === -1) {
9477
+ console.log(`${TAG19} agent=admin accountId=${accountIdShort} step=missing`);
9478
+ } else {
9479
+ console.log(`${TAG19} agent=admin accountId=${accountIdShort} step=${step}`);
9480
+ }
9481
+ return { step };
9495
9482
  }
9496
9483
 
9497
9484
  // server/routes/admin/claude-sessions.ts
9498
- var TAG19 = "[claude-session-manager:wrapper]";
9485
+ var TAG20 = "[claude-session-manager:wrapper]";
9499
9486
  function managerBase() {
9500
9487
  const port2 = Number(process.env.CLAUDE_SESSION_MANAGER_PORT ?? "19400");
9501
9488
  return `http://127.0.0.1:${port2}`;
@@ -9506,7 +9493,7 @@ app22.post("/", async (c) => {
9506
9493
  const cacheKey = c.get("cacheKey") ?? "";
9507
9494
  const senderId = getAccountIdForSession(cacheKey) ?? "";
9508
9495
  if (!senderId) {
9509
- console.error(`${TAG19} reject reason=no-account-id`);
9496
+ console.error(`${TAG20} reject reason=no-account-id`);
9510
9497
  return c.json({ error: "admin-account-not-resolved" }, 500);
9511
9498
  }
9512
9499
  let body = {};
@@ -9516,41 +9503,36 @@ app22.post("/", async (c) => {
9516
9503
  }
9517
9504
  const channel = typeof body.channel === "string" ? body.channel : "browser";
9518
9505
  const initialMessage = typeof body.initialMessage === "string" && body.initialMessage.trim() ? body.initialMessage : null;
9506
+ let onboarding;
9507
+ try {
9508
+ const outcome = await buildOnboardingPromptBlock(senderId);
9509
+ onboarding = { step: outcome.step };
9510
+ } catch (err) {
9511
+ console.error(`${TAG20} onboarding-resolve failed: ${err instanceof Error ? err.message : String(err)}`);
9512
+ }
9519
9513
  const upstream = await fetch(`${managerBase()}/spawn`, {
9520
9514
  method: "POST",
9521
9515
  headers: { "content-type": "application/json" },
9522
- body: JSON.stringify({ senderId, role: "admin", channel })
9516
+ body: JSON.stringify({ senderId, role: "admin", channel, accountId: senderId, onboarding })
9523
9517
  }).catch((err) => {
9524
- console.error(`${TAG19} fetch-failed op=spawn message=${err instanceof Error ? err.message : String(err)}`);
9518
+ console.error(`${TAG20} fetch-failed op=spawn message=${err instanceof Error ? err.message : String(err)}`);
9525
9519
  return null;
9526
9520
  });
9527
9521
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
9528
9522
  let spawnedSessionId = null;
9529
- if (upstream.ok) {
9523
+ if (upstream.ok && initialMessage) {
9530
9524
  const buffered = await upstream.clone().json().catch(() => null);
9531
9525
  if (buffered && typeof buffered.sessionId === "string" && buffered.sessionId) {
9532
9526
  spawnedSessionId = buffered.sessionId;
9533
- markEligibleForInjection(spawnedSessionId);
9534
9527
  }
9535
9528
  }
9536
9529
  if (initialMessage && spawnedSessionId) {
9537
- const accountId = senderId;
9538
- let outboundBody = JSON.stringify({ text: initialMessage });
9539
- try {
9540
- const outcome = await buildOnboardingPromptBlock(accountId);
9541
- if (outcome.injected) {
9542
- outboundBody = JSON.stringify({ text: outcome.block + initialMessage });
9543
- consumeInjectionSlot(spawnedSessionId);
9544
- }
9545
- } catch (err) {
9546
- console.error(`${TAG19} initial-message-inject failed: ${err instanceof Error ? err.message : String(err)}`);
9547
- }
9548
9530
  fetch(`${managerBase()}/${encodeURIComponent(spawnedSessionId)}/input`, {
9549
9531
  method: "POST",
9550
9532
  headers: { "content-type": "application/json" },
9551
- body: outboundBody
9533
+ body: JSON.stringify({ text: initialMessage })
9552
9534
  }).catch((err) => {
9553
- console.error(`${TAG19} fetch-failed op=initial-input message=${err instanceof Error ? err.message : String(err)}`);
9535
+ console.error(`${TAG20} fetch-failed op=initial-input message=${err instanceof Error ? err.message : String(err)}`);
9554
9536
  });
9555
9537
  }
9556
9538
  return new Response(upstream.body, { status: upstream.status, headers: upstream.headers });
@@ -9562,7 +9544,7 @@ app22.get("/", async (c) => {
9562
9544
  const upstream = await fetch(
9563
9545
  `${managerBase()}/list?senderId=${encodeURIComponent(senderId)}`
9564
9546
  ).catch((err) => {
9565
- console.error(`${TAG19} fetch-failed op=list message=${err instanceof Error ? err.message : String(err)}`);
9547
+ console.error(`${TAG20} fetch-failed op=list message=${err instanceof Error ? err.message : String(err)}`);
9566
9548
  return null;
9567
9549
  });
9568
9550
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -9592,7 +9574,7 @@ app22.post("/resume", async (c) => {
9592
9574
  claudeSessionId: body.claudeSessionId
9593
9575
  })
9594
9576
  }).catch((err) => {
9595
- console.error(`${TAG19} fetch-failed op=resume message=${err instanceof Error ? err.message : String(err)}`);
9577
+ console.error(`${TAG20} fetch-failed op=resume message=${err instanceof Error ? err.message : String(err)}`);
9596
9578
  return null;
9597
9579
  });
9598
9580
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -9605,7 +9587,7 @@ app22.delete("/:sessionId", async (c) => {
9605
9587
  `${managerBase()}/${encodeURIComponent(sessionId)}${purge}`,
9606
9588
  { method: "DELETE" }
9607
9589
  ).catch((err) => {
9608
- console.error(`${TAG19} fetch-failed op=delete message=${err instanceof Error ? err.message : String(err)}`);
9590
+ console.error(`${TAG20} fetch-failed op=delete message=${err instanceof Error ? err.message : String(err)}`);
9609
9591
  return null;
9610
9592
  });
9611
9593
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -9622,7 +9604,7 @@ app22.post("/:sessionId/archive", async (c) => {
9622
9604
  body
9623
9605
  }
9624
9606
  ).catch((err) => {
9625
- console.error(`${TAG19} fetch-failed op=archive message=${err instanceof Error ? err.message : String(err)}`);
9607
+ console.error(`${TAG20} fetch-failed op=archive message=${err instanceof Error ? err.message : String(err)}`);
9626
9608
  return null;
9627
9609
  });
9628
9610
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -9633,7 +9615,7 @@ app22.get("/:sessionId/meta", async (c) => {
9633
9615
  const upstream = await fetch(
9634
9616
  `${managerBase()}/${encodeURIComponent(sessionId)}/meta`
9635
9617
  ).catch((err) => {
9636
- console.error(`${TAG19} fetch-failed op=meta message=${err instanceof Error ? err.message : String(err)}`);
9618
+ console.error(`${TAG20} fetch-failed op=meta message=${err instanceof Error ? err.message : String(err)}`);
9637
9619
  return null;
9638
9620
  });
9639
9621
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -9650,7 +9632,7 @@ app22.patch("/:sessionId", async (c) => {
9650
9632
  body
9651
9633
  }
9652
9634
  ).catch((err) => {
9653
- console.error(`${TAG19} fetch-failed op=patch message=${err instanceof Error ? err.message : String(err)}`);
9635
+ console.error(`${TAG20} fetch-failed op=patch message=${err instanceof Error ? err.message : String(err)}`);
9654
9636
  return null;
9655
9637
  });
9656
9638
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -9659,36 +9641,15 @@ app22.patch("/:sessionId", async (c) => {
9659
9641
  app22.post("/:sessionId/input", async (c) => {
9660
9642
  const sessionId = c.req.param("sessionId");
9661
9643
  const rawBody = await c.req.text();
9662
- let outboundBody = rawBody;
9663
- const cacheKey = c.get("cacheKey") ?? "";
9664
- const accountId = getAccountIdForSession(cacheKey);
9665
- if (accountId && consumeInjectionSlot(sessionId)) {
9666
- let parsed = null;
9667
- try {
9668
- parsed = JSON.parse(rawBody);
9669
- } catch {
9670
- parsed = null;
9671
- }
9672
- if (parsed && typeof parsed.text === "string") {
9673
- try {
9674
- const outcome = await buildOnboardingPromptBlock(accountId);
9675
- if (outcome.injected) {
9676
- outboundBody = JSON.stringify({ ...parsed, text: outcome.block + parsed.text });
9677
- }
9678
- } catch (err) {
9679
- console.error(`${TAG19} onboarding-inject failed: ${err instanceof Error ? err.message : String(err)}`);
9680
- }
9681
- }
9682
- }
9683
9644
  const upstream = await fetch(
9684
9645
  `${managerBase()}/${encodeURIComponent(sessionId)}/input`,
9685
9646
  {
9686
9647
  method: "POST",
9687
9648
  headers: { "content-type": "application/json" },
9688
- body: outboundBody
9649
+ body: rawBody
9689
9650
  }
9690
9651
  ).catch((err) => {
9691
- console.error(`${TAG19} fetch-failed op=input message=${err instanceof Error ? err.message : String(err)}`);
9652
+ console.error(`${TAG20} fetch-failed op=input message=${err instanceof Error ? err.message : String(err)}`);
9692
9653
  return null;
9693
9654
  });
9694
9655
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -9700,7 +9661,7 @@ app22.get("/:sessionId/log", async (c) => {
9700
9661
  const upstream = await fetch(
9701
9662
  `${managerBase()}/${encodeURIComponent(sessionId)}/log${follow}`
9702
9663
  ).catch((err) => {
9703
- console.error(`${TAG19} fetch-failed op=log message=${err instanceof Error ? err.message : String(err)}`);
9664
+ console.error(`${TAG20} fetch-failed op=log message=${err instanceof Error ? err.message : String(err)}`);
9704
9665
  return null;
9705
9666
  });
9706
9667
  if (!upstream) return c.json({ error: "manager-unreachable" }, 503);
@@ -9816,13 +9777,13 @@ async function cdpNavigateNewTab(url, opts = {}) {
9816
9777
  // server/routes/admin/device-browser.ts
9817
9778
  var app25 = new Hono();
9818
9779
  app25.post("/navigate", async (c) => {
9819
- const TAG20 = "[device-url:click]";
9780
+ const TAG21 = "[device-url:click]";
9820
9781
  let body;
9821
9782
  try {
9822
9783
  body = await c.req.json();
9823
9784
  } catch (err) {
9824
9785
  const detail = err instanceof Error ? err.message : String(err);
9825
- console.error(`${TAG20} reject reason=body-not-json detail=${detail} browser=fallback navigateResult=error`);
9786
+ console.error(`${TAG21} reject reason=body-not-json detail=${detail} browser=fallback navigateResult=error`);
9826
9787
  return c.json(
9827
9788
  { ok: false, navigateResult: "error", browser: "fallback", detail: "Request body was not valid JSON" },
9828
9789
  400
@@ -9832,7 +9793,7 @@ app25.post("/navigate", async (c) => {
9832
9793
  const intent = typeof body.intent === "string" ? body.intent : "";
9833
9794
  const hostname2 = typeof body.hostname === "string" ? body.hostname : "";
9834
9795
  if (!url) {
9835
- console.error(`${TAG20} reject reason=missing-url intent=${JSON.stringify(intent)} browser=fallback navigateResult=error`);
9796
+ console.error(`${TAG21} reject reason=missing-url intent=${JSON.stringify(intent)} browser=fallback navigateResult=error`);
9836
9797
  return c.json(
9837
9798
  { ok: false, navigateResult: "error", browser: "fallback", detail: "url field is required" },
9838
9799
  400
@@ -9842,7 +9803,7 @@ app25.post("/navigate", async (c) => {
9842
9803
  try {
9843
9804
  parsed = new URL(url);
9844
9805
  } catch {
9845
- console.error(`${TAG20} reject reason=url-malformed intent=${JSON.stringify(intent)} url=${url} browser=fallback navigateResult=error`);
9806
+ console.error(`${TAG21} reject reason=url-malformed intent=${JSON.stringify(intent)} url=${url} browser=fallback navigateResult=error`);
9846
9807
  return c.json(
9847
9808
  { ok: false, navigateResult: "error", browser: "fallback", detail: "url is not a valid URL" },
9848
9809
  400
@@ -9850,7 +9811,7 @@ app25.post("/navigate", async (c) => {
9850
9811
  }
9851
9812
  if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
9852
9813
  console.error(
9853
- `${TAG20} reject reason=scheme-not-allowed scheme=${parsed.protocol} intent=${JSON.stringify(intent)} browser=fallback navigateResult=error`
9814
+ `${TAG21} reject reason=scheme-not-allowed scheme=${parsed.protocol} intent=${JSON.stringify(intent)} browser=fallback navigateResult=error`
9854
9815
  );
9855
9816
  return c.json(
9856
9817
  {
@@ -9866,7 +9827,7 @@ app25.post("/navigate", async (c) => {
9866
9827
  const cdpOk = await ensureCdp(transport);
9867
9828
  if (!cdpOk) {
9868
9829
  console.error(
9869
- `${TAG20} intent=${JSON.stringify(intent)} browser=fallback navigateResult=cdp-unreachable hostname=${JSON.stringify(hostname2)}`
9830
+ `${TAG21} intent=${JSON.stringify(intent)} browser=fallback navigateResult=cdp-unreachable hostname=${JSON.stringify(hostname2)}`
9870
9831
  );
9871
9832
  return c.json(
9872
9833
  {
@@ -9882,7 +9843,7 @@ app25.post("/navigate", async (c) => {
9882
9843
  const browser = outcome.result === "ok" ? "vnc" : "fallback";
9883
9844
  const detailStr = outcome.detail ? ` detail=${JSON.stringify(outcome.detail.length > 230 ? outcome.detail.slice(0, 227) + "..." : outcome.detail)}` : "";
9884
9845
  console.error(
9885
- `${TAG20} intent=${JSON.stringify(intent)} browser=${browser} navigateResult=${outcome.result} hostname=${JSON.stringify(hostname2)} targetId=${outcome.targetId ?? "none"}${detailStr}`
9846
+ `${TAG21} intent=${JSON.stringify(intent)} browser=${browser} navigateResult=${outcome.result} hostname=${JSON.stringify(hostname2)} targetId=${outcome.targetId ?? "none"}${detailStr}`
9886
9847
  );
9887
9848
  if (outcome.result !== "ok") {
9888
9849
  return c.json(
@@ -9913,18 +9874,18 @@ var ALLOWED_EVENTS2 = /* @__PURE__ */ new Set([
9913
9874
  ]);
9914
9875
  var app26 = new Hono();
9915
9876
  app26.post("/", async (c) => {
9916
- const TAG20 = "[admin:events]";
9877
+ const TAG21 = "[admin:events]";
9917
9878
  let body;
9918
9879
  try {
9919
9880
  body = await c.req.json();
9920
9881
  } catch (err) {
9921
9882
  const detail = err instanceof Error ? err.message : String(err);
9922
- console.error(`${TAG20} reject reason=body-not-json detail=${detail}`);
9883
+ console.error(`${TAG21} reject reason=body-not-json detail=${detail}`);
9923
9884
  return c.json({ ok: false, detail: "Request body was not valid JSON" }, 400);
9924
9885
  }
9925
9886
  const event = typeof body.event === "string" ? body.event : "";
9926
9887
  if (!ALLOWED_EVENTS2.has(event)) {
9927
- console.error(`${TAG20} reject reason=event-not-allowed event=${JSON.stringify(event)}`);
9888
+ console.error(`${TAG21} reject reason=event-not-allowed event=${JSON.stringify(event)}`);
9928
9889
  return c.json({ ok: false, detail: `Event "${event}" is not allowed` }, 400);
9929
9890
  }
9930
9891
  const rawFields = body.fields && typeof body.fields === "object" ? body.fields : {};