@rubytech/create-realagent-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.
- package/dist/__tests__/samba-provision.test.js +202 -0
- package/dist/index.js +127 -73
- package/dist/samba-provision.js +215 -0
- package/dist/uninstall.js +160 -3
- package/package.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +4 -0
- package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +47 -0
- package/payload/platform/plugins/admin/skills/commitment-followthrough/SKILL.md +60 -0
- package/payload/platform/plugins/admin/skills/file-presentation/SKILL.md +67 -0
- package/payload/platform/plugins/admin/skills/session-management/SKILL.md +62 -0
- package/payload/platform/plugins/deep-research/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/deep-research/PLUGIN.md +7 -1
- package/payload/platform/plugins/deep-research/recipes/README.md +36 -0
- package/payload/platform/plugins/deep-research/skills/academic-verify/SKILL.md +75 -0
- package/payload/platform/plugins/deep-research/skills/book-mirror/SKILL.md +68 -0
- package/payload/platform/plugins/deep-research/skills/data-research/SKILL.md +108 -0
- package/payload/platform/plugins/deep-research/skills/strategic-reading/SKILL.md +69 -0
- package/payload/platform/plugins/docs/references/deployment.md +23 -2
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts +7 -2
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js +7 -2
- package/payload/platform/plugins/email/mcp/dist/scripts/email-fetch.js.map +1 -1
- package/payload/platform/plugins/email/references/email-reference.md +4 -4
- package/payload/platform/plugins/linkedin-import/skills/linkedin-import/SKILL.md +2 -0
- package/payload/platform/plugins/memory/PLUGIN.md +6 -0
- package/payload/platform/plugins/memory/skills/archive-crawler/SKILL.md +67 -0
- package/payload/platform/plugins/memory/skills/concept-synthesis/SKILL.md +80 -0
- package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +2 -0
- package/payload/platform/plugins/memory/skills/document-ingest/SKILL.md +2 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +4 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts +7 -3
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +7 -3
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/skills/briefing/SKILL.md +75 -0
- package/payload/platform/plugins/scheduling/skills/daily-prep/SKILL.md +61 -0
- package/payload/platform/plugins/workflows/PLUGIN.md +2 -2
- package/payload/platform/plugins/workflows/skills/workflow-manager/SKILL.md +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +14 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +14 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +9 -2
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts +25 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js +54 -3
- package/payload/platform/services/claude-session-manager/dist/system-prompt.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +39 -291
- package/payload/platform/templates/agents/admin/SOUL.md +4 -4
- package/payload/platform/templates/specialists/agents/content-producer.md +24 -69
- package/payload/platform/templates/specialists/agents/database-operator.md +49 -155
- package/payload/platform/templates/specialists/agents/personal-assistant.md +27 -177
- package/payload/platform/templates/specialists/agents/project-manager.md +29 -96
- package/payload/platform/templates/specialists/agents/research-assistant.md +36 -78
- package/payload/premium-plugins/real-agency/agents/compliance.md +14 -0
- package/payload/premium-plugins/real-agency/agents/negotiator.md +22 -0
- package/payload/premium-plugins/real-agency/agents/valuer.md +16 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/.claude-plugin/plugin.json +1 -1
- package/payload/premium-plugins/real-agency/plugins/estate-business/PLUGIN.md +29 -13
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/commission-calculator/SKILL.md +40 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/month-end-close/SKILL.md +69 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/payment-batch-stager/SKILL.md +42 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/skills/period-reconciler/SKILL.md +42 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/.claude-plugin/plugin.json +1 -1
- package/payload/premium-plugins/real-agency/plugins/estate-sales/PLUGIN.md +27 -13
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/chase-progression/SKILL.md +107 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/skills/risk-scorer/SKILL.md +42 -0
- package/payload/premium-plugins/real-agency/plugins/leads/.claude-plugin/plugin.json +1 -1
- package/payload/premium-plugins/real-agency/plugins/leads/PLUGIN.md +24 -10
- package/payload/premium-plugins/real-agency/plugins/leads/skills/chain-progression-tracker/SKILL.md +51 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/diary-builder/SKILL.md +38 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/enquiry-triage/SKILL.md +36 -0
- package/payload/premium-plugins/real-agency/plugins/leads/skills/morning-round/SKILL.md +72 -0
- package/payload/premium-plugins/real-agency/plugins/listings/.claude-plugin/plugin.json +1 -1
- package/payload/premium-plugins/real-agency/plugins/listings/PLUGIN.md +43 -12
- package/payload/premium-plugins/real-agency/plugins/listings/skills/comparable-finder/SKILL.md +52 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/epc-checker/SKILL.md +38 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/listing-copy-writer/SKILL.md +55 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/local-market-stats/SKILL.md +33 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/new-instruction/SKILL.md +78 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/particulars-builder/SKILL.md +48 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/portal-launch-scheduler/SKILL.md +49 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/pricing-scenario-builder/SKILL.md +35 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/supplier-booker/SKILL.md +39 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/talk-track-composer/SKILL.md +36 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/terms-of-business-drafter/SKILL.md +54 -0
- package/payload/premium-plugins/real-agency/plugins/listings/skills/valuation-prep/SKILL.md +69 -0
- package/payload/premium-plugins/real-agency/plugins/loop/PLUGIN.md +20 -0
- package/payload/premium-plugins/real-agency/plugins/loop/skills/compliance-flag-checker/SKILL.md +53 -0
- package/payload/premium-plugins/real-agency/plugins/loop/skills/priority-ranker/SKILL.md +40 -0
- package/payload/premium-plugins/real-agency/plugins/loop/skills/tone-matched-drafter/SKILL.md +53 -0
- package/payload/premium-plugins/real-agency/plugins/loop/skills/variance-narrator/SKILL.md +50 -0
- package/payload/premium-plugins/real-agency/plugins/loop/skills/vendor-research/SKILL.md +54 -0
- package/payload/server/public/assets/{Checkbox-B79fVxpA.js → Checkbox-D1OQD43b.js} +1 -1
- package/payload/server/public/assets/admin-czNBxWor.js +216 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-D8e59YJ0.js → architectureDiagram-Q4EWVU46-BcwgT80u.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-CxaDkc0A.js → blockDiagram-DXYQGD6D-BMSyZUQA.js} +1 -1
- package/payload/server/public/assets/{brand-Cg9t5U6J.css → brand-2cku8WFs.css} +1 -1
- package/payload/server/public/assets/{brand-jT16ErmC.js → brand-CSQuxS9w.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-D0PAvq-q.js → c4Diagram-AHTNJAMY-DPRGY1jJ.js} +1 -1
- package/payload/server/public/assets/channel-fxEghWew.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-B-CXn-Et.js → chunk-336JU56O-B7oQ3g1c.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-BLzCQHKA.js → chunk-426QAEUC-C1P0yFXw.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-Bql1UwLT.js → chunk-4TB4RGXK-LI7kOJd0.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-CQK7jBtX.js → chunk-5FUZZQ4R-CXQRGTQE.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-AJc1-lvX.js → chunk-5PVQY5BW-NSyzpXRy.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-Cf3E3THL.js → chunk-EDXVE4YY-voNwxbDs.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-BNx6z6hJ.js → chunk-ENJZ2VHE-CMEMPzYY.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-DBUEFs2-.js → chunk-ICPOFSXX-hEbwu-pe.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-Csx2p315.js → chunk-OYMX7WX6-DxskDrLs.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-x17h7UYW.js → chunk-U2HBQHQK-D7TKgUo0.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP--Lkl5yjV.js → chunk-X2U36JSP-BvPUQEPm.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-C4GsNX8A.js → chunk-YZCP3GAM-BY-RWQUW.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-YrhUPmZc.js → chunk-ZZ45TVLE-DZvOYDY6.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BsWzGW0N.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BGVa3h90.js +1 -0
- package/payload/server/public/assets/clone-Khvocke2.js +1 -0
- package/payload/server/public/assets/{dagre-YVALPG-M.js → dagre-Bt-fpckL.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-D6JU6DW_.js → dagre-KV5264BT-Cnj0mUZl.js} +1 -1
- package/payload/server/public/assets/data-DBd-Buhp.js +1 -0
- package/payload/server/public/assets/device-url-actions-Bjz3Xzbm.js +33 -0
- package/payload/server/public/assets/{diagram-5BDNPKRD-yeO06N5Q.js → diagram-5BDNPKRD-DjLzvOlx.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-DzbVT_BC.js → diagram-G4DWMVQ6-DTfuRd-T.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-DwYO5VZF.js → diagram-MMDJMWI5-BaL2mCnx.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-BLUcdkDS.js → diagram-TYMM5635-C5InWY5R.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-BiEUB19e.js → erDiagram-SMLLAGMA-DO7BXTpn.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-TILIKxOp.js → flowDiagram-DWJPFMVM-DDdAKfLf.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-B7cGzYqT.js → ganttDiagram-T4ZO3ILL-arJD8Utm.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-DFOxN5bc.js → gitGraphDiagram-UUTBAWPF-C55GH-OS.js} +1 -1
- package/payload/server/public/assets/graph-DUtVdnZ6.js +1 -0
- package/payload/server/public/assets/graph-labels-Dxfue-fP.js +1 -0
- package/payload/server/public/assets/{graphlib-BBibixaA.js → graphlib-DL9PM7Ex.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-nH2azhY8.js → infoDiagram-42DDH7IO-BMSGqUbG.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-WD3tfqFi.js → ishikawaDiagram-UXIWVN3A-Dw6BZ6BG.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-LUkaVSqw.js → journeyDiagram-VCZTEJTY-DrywUGXw.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Dk-lYgpJ.js → kanban-definition-6JOO6SKY-DuwtVBBc.js} +1 -1
- package/payload/server/public/assets/{line-BDv6CEnp.js → line-JAksyKHj.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-D2XsSGgp.js → mermaid-parser.core-BMq-ApBW.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-FyN-UmQV.js → mermaid.core-tH4oX0Kh.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-BRAHEUIS.js → mindmap-definition-QFDTVHPH-D1OiiJga.js} +1 -1
- package/payload/server/public/assets/page-BZpoS7iR.js +1 -0
- package/payload/server/public/assets/{page-CTbSJbem.js → page-CkvBvezS.js} +2 -2
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-BqibVC2X.js → pieDiagram-DEJITSTG-Ckwm69PW.js} +1 -1
- package/payload/server/public/assets/{public-BDUZIabs.js → public-C-dTMgXu.js} +5 -5
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DNuExGnr.js → quadrantDiagram-34T5L4WZ-COw3yZ1j.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-5JXTdydh.js → requirementDiagram-MS252O5E-DqGzM4K-.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-B_8rhvcR.js → sankeyDiagram-XADWPNL6-D-l1c_Pl.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BznkBgjf.js → sequenceDiagram-FGHM5R23-BeIi0DtJ.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-BeAZOQfs.js → stateDiagram-FHFEXIEX-C-jgegLk.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BaMs8Znv.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-CpJAs-Vw.js → timeline-definition-GMOUNBTQ-BGFKkYmi.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BzH3ItkG.js → vennDiagram-DHZGUBPP-5NuIhJLS.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-ax9AgwA1.js → wardleyDiagram-NUSXRM2D-Be9ytVut.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CV6vt_tW.js → xychartDiagram-5P7HB3ND-DCyHg41R.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +8 -8
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +62 -101
- package/payload/server/public/assets/admin-CXLuiXFU.js +0 -216
- package/payload/server/public/assets/channel-BU_eIdRB.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DMpM1d2b.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-D_XbuPVj.js +0 -1
- package/payload/server/public/assets/clone-BBT00JUO.js +0 -1
- package/payload/server/public/assets/data-BdwO_kv-.js +0 -1
- package/payload/server/public/assets/device-url-actions-C8dD0ydz.js +0 -33
- package/payload/server/public/assets/graph-DpgsOhUZ.js +0 -1
- package/payload/server/public/assets/graph-labels-DJ717p00.js +0 -1
- package/payload/server/public/assets/page-BWHYktEF.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-iVlXKz7S.js +0 -1
package/payload/server/server.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
9462
|
-
|
|
9463
|
-
|
|
9464
|
-
}
|
|
9465
|
-
|
|
9466
|
-
|
|
9467
|
-
|
|
9468
|
-
}
|
|
9469
|
-
|
|
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
|
|
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(`${
|
|
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(`${
|
|
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:
|
|
9533
|
+
body: JSON.stringify({ text: initialMessage })
|
|
9552
9534
|
}).catch((err) => {
|
|
9553
|
-
console.error(`${
|
|
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(`${
|
|
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(`${
|
|
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(`${
|
|
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(`${
|
|
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(`${
|
|
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(`${
|
|
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:
|
|
9649
|
+
body: rawBody
|
|
9689
9650
|
}
|
|
9690
9651
|
).catch((err) => {
|
|
9691
|
-
console.error(`${
|
|
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(`${
|
|
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
|
|
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(`${
|
|
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(`${
|
|
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(`${
|
|
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
|
-
`${
|
|
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
|
-
`${
|
|
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
|
-
`${
|
|
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
|
|
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(`${
|
|
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(`${
|
|
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 : {};
|