@rubytech/create-maxy-code 0.1.40 → 0.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/platform/lib/mcp-stderr-tee/package.json +7 -0
- package/payload/platform/plugins/admin/hooks/turn-completed-graph-write.sh +142 -52
- package/payload/platform/plugins/docs/references/platform.md +18 -4
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -0
- package/payload/platform/services/claude-session-manager/dist/config.d.ts +17 -0
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js +31 -0
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts +54 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js +516 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +3 -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 +364 -204
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +38 -11
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts +2 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +11 -6
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +37 -44
- 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 +136 -159
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/reaper.d.ts +24 -0
- package/payload/platform/services/claude-session-manager/dist/reaper.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/reaper.js +114 -0
- package/payload/platform/services/claude-session-manager/dist/reaper.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +16 -41
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.js +29 -68
- package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.d.ts +51 -0
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.d.ts.map +1 -0
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.js +196 -0
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.js.map +1 -0
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/package.json +7 -0
- package/payload/server/public/assets/{Checkbox-6lLDKzMP.js → Checkbox-blxv2XPY.js} +1 -1
- package/payload/server/public/assets/{admin-DO9W2D9g.js → admin-C3EvHpLN.js} +1 -1
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BbLtk_k6.js → architectureDiagram-Q4EWVU46-bETsVzGS.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-B9IgcgeJ.js → blockDiagram-DXYQGD6D-5y0GBnfQ.js} +1 -1
- package/payload/server/public/assets/{brand-DQrOw38P.css → brand-DQlLKLDH.css} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-BrvPS09f.js → c4Diagram-AHTNJAMY-C1znpVGu.js} +1 -1
- package/payload/server/public/assets/channel-BWqTaXzb.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-DXOr0ZnC.js → chunk-336JU56O-DlCVUGzQ.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-BFW4zwrV.js → chunk-426QAEUC-bGYkmA4z.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-D7_xc8xf.js → chunk-4TB4RGXK-6Sb0Undm.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-CdCSpb8j.js → chunk-5FUZZQ4R-CAT_Pq2T.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-BVgnD9QR.js → chunk-5PVQY5BW-j231ESse.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-CYrT1Tom.js → chunk-EDXVE4YY-BAlS4QL7.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-B70d0jN7.js → chunk-ENJZ2VHE-D3Ku_BMP.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-BcLouRbd.js → chunk-ICPOFSXX-AR86A5WB.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-C2ja2fPj.js → chunk-OYMX7WX6-DxGhapkW.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-CCjoTpL6.js → chunk-U2HBQHQK-DAlqsDo_.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-QIVkp-XR.js → chunk-X2U36JSP-lZdkkdyB.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-qD9rebhx.js → chunk-YZCP3GAM-CCjtXOFD.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-C0J_f05H.js → chunk-ZZ45TVLE-ComtdKny.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-B9hC6fOR.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-afl_ydIG.js +1 -0
- package/payload/server/public/assets/clone-Lj83OaZ3.js +1 -0
- package/payload/server/public/assets/{dagre-B3cA7jId.js → dagre-DX8QJeVt.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-C8lVFO5U.js → dagre-KV5264BT-BcRbiZ1q.js} +1 -1
- package/payload/server/public/assets/data-CS_R5VWQ.js +1 -0
- package/payload/server/public/assets/{device-url-actions-qu2-XiHc.js → device-url-actions-Cag9IJ7n.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-BYkcTelK.js → diagram-5BDNPKRD-Bw47VwHO.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-B6f_WR4j.js → diagram-G4DWMVQ6-B-aVfhiD.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-ALaKcN6w.js → diagram-MMDJMWI5-DERz2dKo.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-CkVg3crF.js → diagram-TYMM5635-B7eEX9Ta.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-DszlTGIQ.js → erDiagram-SMLLAGMA-G_JJq3zB.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-C9-FqSlk.js → flowDiagram-DWJPFMVM-BeY9QaO0.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-faJU-5Zy.js → ganttDiagram-T4ZO3ILL-IXviGYnx.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-Cck8_tiG.js → gitGraphDiagram-UUTBAWPF-GlY6pZQ1.js} +1 -1
- package/payload/server/public/assets/graph-DtGkQBFr.js +1 -0
- package/payload/server/public/assets/graph-labels-Dwu1ON5v.js +1 -0
- package/payload/server/public/assets/{graphlib-CYRxeBXj.js → graphlib-BWgAjZSb.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-CLjEjhJX.js → infoDiagram-42DDH7IO-D4YZM0gD.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-nSIaVXdw.js → ishikawaDiagram-UXIWVN3A-fR71GDOp.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DuKq7d3g.js → journeyDiagram-VCZTEJTY-C1TcY_6m.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Bt5xqHfY.js → kanban-definition-6JOO6SKY-IPZKpnnG.js} +1 -1
- package/payload/server/public/assets/{line-BgV8qCP_.js → line-B2JtEL1B.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-DQzl__pY.js → mermaid-parser.core-BKCLXqUh.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-BAPEOjwh.js → mermaid.core-CmNpCLB-.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CmMBrI79.js → mindmap-definition-QFDTVHPH-BS0E2FPD.js} +1 -1
- package/payload/server/public/assets/{page-BoDdtGsH.js → page-BdI3GCun.js} +1 -1
- package/payload/server/public/assets/{page-D_NCNi5j.js → page-zIjAkU2y.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-BhsR9k6j.js → pieDiagram-DEJITSTG-J61JDyk8.js} +1 -1
- package/payload/server/public/assets/{public-DCcGKIMW.js → public-C5vaQnC_.js} +3 -3
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DSKV6d_A.js → quadrantDiagram-34T5L4WZ-CLI03OtR.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-BccM48AI.js → requirementDiagram-MS252O5E-C8MCt5NO.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-C0pxiQfn.js → sankeyDiagram-XADWPNL6-DQuugruj.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BVsUIJsW.js → sequenceDiagram-FGHM5R23-CoYitwhO.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-lqYQZ-F1.js → stateDiagram-FHFEXIEX-G68cHHoI.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-Dtgpgr_D.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-D-LxYOHq.js → timeline-definition-GMOUNBTQ-CelLeJVS.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BNHzvNba.js → vennDiagram-DHZGUBPP-BVgFPkJq.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BfXR9l5s.js → wardleyDiagram-NUSXRM2D-CzD_8hl2.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CL7mVEbT.js → xychartDiagram-5P7HB3ND-BuTxWdX5.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 +94 -4
- package/payload/server/public/assets/channel-Bmc1qlCD.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-RVZorqSk.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BEZem5bl.js +0 -1
- package/payload/server/public/assets/clone-B6eXIhiR.js +0 -1
- package/payload/server/public/assets/data-BaSmBQ7U.js +0 -1
- package/payload/server/public/assets/graph-labels-COhLbJD0.js +0 -1
- package/payload/server/public/assets/graph-qg6fkRyC.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-D2eHThhC.js +0 -1
- /package/payload/server/public/assets/{brand-Bky-hMVw.js → brand-D6mXeyxV.js} +0 -0
|
@@ -1,37 +1,25 @@
|
|
|
1
|
-
// Spawn a `claude --verbose` PTY child
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
1
|
+
// Spawn a `claude --verbose` PTY child and resolve once the fs-watcher
|
|
2
|
+
// reports the PID file Claude Code writes at process init
|
|
3
|
+
// (`${CLAUDE_CONFIG_DIR}/sessions/<pid>.json` for entrypoint=cli). That
|
|
4
|
+
// file carries the intrinsic sessionId, bridgeSessionId, agent, status
|
|
5
|
+
// and cwd directly — earlier and more authoritatively than the
|
|
6
|
+
// `/remote-control` URL banner. URL capture still runs in parallel so
|
|
7
|
+
// the operator-facing iframe URL is populated, but it no longer gates
|
|
8
|
+
// /spawn's response.
|
|
8
9
|
//
|
|
9
|
-
// The manager mints zero session ids
|
|
10
|
-
//
|
|
11
|
-
// JSONL-bound routes once observation fires. /spawn no longer blocks on
|
|
12
|
-
// observation, so the `observe-timeout` failure mode (Task 065's loud-fail
|
|
13
|
-
// timer) is gone — an operator who clicks `+ New session` and then walks
|
|
14
|
-
// away does not get a killed PTY.
|
|
10
|
+
// The manager mints zero session ids. Both the intrinsic id and the
|
|
11
|
+
// bridgeSessionId come from Claude Code's own state files.
|
|
15
12
|
//
|
|
16
|
-
//
|
|
17
|
-
// which-claude-not-found, pty-spawn-failed,
|
|
18
|
-
//
|
|
13
|
+
// Spawn failure surfaces (return 500 with `stderrTail`):
|
|
14
|
+
// which-claude-not-found, pty-spawn-failed, pid-file-timeout,
|
|
15
|
+
// host-context-unresolved, identity-unresolved, mcp-config-write-failed.
|
|
19
16
|
import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
20
17
|
import { tmpdir } from 'node:os';
|
|
21
18
|
import { dirname, join } from 'node:path';
|
|
22
19
|
import { startUrlCapture } from './url-capture.js';
|
|
23
|
-
import { bridgeSuffixFromUrl } from './jsonl-path.js';
|
|
24
20
|
// CSI (Cursor / Style) escape sequence: ESC `[` <args> <final-letter>.
|
|
25
|
-
// Stripped from the PTY tail so failure logs are readable instead of an
|
|
26
|
-
// alphabet soup of `\x1b[1C`, `\x1b[38;5;246m`, etc.
|
|
27
21
|
const PTY_TAIL_CSI = /\x1b\[[0-9;?]*[A-Za-z]/g;
|
|
28
|
-
// 4 KiB rolling buffer is enough to show the welcome banner, the
|
|
29
|
-
// `/remote-control is active …` line, and any prompt or error message
|
|
30
|
-
// claude prints in the seconds between spawn and JSONL observation.
|
|
31
22
|
const PTY_TAIL_BYTES = 4 * 1024;
|
|
32
|
-
// Capped slice emitted into log lines (server.log) so a single failure
|
|
33
|
-
// line never balloons past ~2 KiB. The full tail still goes onto the wire
|
|
34
|
-
// (SpawnResult.stderrTail) so the UI can surface it.
|
|
35
23
|
const PTY_TAIL_LOG_BYTES = 1024;
|
|
36
24
|
function attachPtyTail(pty) {
|
|
37
25
|
let buf = '';
|
|
@@ -57,38 +45,20 @@ function formatTailForLog(tail) {
|
|
|
57
45
|
import { composeAppendSystemPrompt, } from './system-prompt.js';
|
|
58
46
|
import { discoverHooks } from './hooks-discovery.js';
|
|
59
47
|
export const PERMISSION_MODES = ['default', 'acceptEdits', 'plan', 'auto'];
|
|
60
|
-
/** Expand `${VAR}` placeholders that appear in PLUGIN.md mcp args/env. Only
|
|
61
|
-
* PLATFORM_ROOT, PREMIUM_PLUGINS_ROOT, ACCOUNT_ID, SESSION_ID, LOG_DIR are
|
|
62
|
-
* substituted — everything else is passed through literally so Claude Code's
|
|
63
|
-
* own var-expansion (if any) still applies.
|
|
64
|
-
*
|
|
65
|
-
* PREMIUM_PLUGINS_ROOT is derived as the sibling `premium-plugins/` directory
|
|
66
|
-
* of PLATFORM_ROOT — mirrors the boot-time resolution at
|
|
67
|
-
* index.ts:loadToolSurface so premium-plugin mcp: blocks can declare their
|
|
68
|
-
* dist path symmetrically to platform plugins. */
|
|
69
48
|
function expandPlaceholders(raw, vars) {
|
|
70
49
|
return raw.replace(/\$\{([A-Z_][A-Z0-9_]*)\}/g, (m, name) => {
|
|
71
50
|
return Object.prototype.hasOwnProperty.call(vars, name) ? vars[name] : m;
|
|
72
51
|
});
|
|
73
52
|
}
|
|
74
53
|
function writePerSpawnMcpConfig(p) {
|
|
75
|
-
// Public spawns currently expose zero MCP tools (no plugin sets
|
|
76
|
-
// publicAllowlist: true). Write a config with an empty `mcpServers` map so
|
|
77
|
-
// the --mcp-config flag still appears in argv — keeps the argv shape
|
|
78
|
-
// identical across roles and makes the observability emit unambiguous.
|
|
79
54
|
const serversForRole = [];
|
|
80
55
|
if (p.role === 'admin') {
|
|
81
|
-
// Admin sees every plugin's MCP server.
|
|
82
56
|
for (const [name, desc] of p.toolSurface.mcpServers)
|
|
83
57
|
serversForRole.push([name, desc]);
|
|
84
58
|
}
|
|
85
59
|
else {
|
|
86
|
-
// Public sees only plugins that contribute at least one public tool.
|
|
87
60
|
const publicPluginNames = new Set();
|
|
88
61
|
for (const t of p.toolSurface.public) {
|
|
89
|
-
// Qualified tools look like `mcp__<plugin>__<tool>`. Plugin and tool
|
|
90
|
-
// names use single hyphens/underscores; the delimiter is the literal
|
|
91
|
-
// `__` pair, so a non-greedy match terminates at the first one.
|
|
92
62
|
const m = t.match(/^mcp__(.+?)__/);
|
|
93
63
|
if (m)
|
|
94
64
|
publicPluginNames.add(m[1]);
|
|
@@ -133,7 +103,50 @@ function writePerSpawnMcpConfig(p) {
|
|
|
133
103
|
}
|
|
134
104
|
return { ok: true, path: target, bytes: Buffer.byteLength(payload, 'utf8'), serverCount: serversForRole.length };
|
|
135
105
|
}
|
|
106
|
+
/** Pre-spawn slot accounting. Returns either a rejection (caller should
|
|
107
|
+
* surface as 503) or undefined when the spawn may proceed. Eviction of an
|
|
108
|
+
* idle specialist row, when needed, happens here too. Operator
|
|
109
|
+
* (non-specialist) spawns are exempt from both guards. */
|
|
110
|
+
function checkSlotsAndMaybeEvict(deps, args) {
|
|
111
|
+
const isSpecialistSpawn = typeof args.specialist === 'string' && args.specialist.length > 0;
|
|
112
|
+
if (!isSpecialistSpawn)
|
|
113
|
+
return undefined;
|
|
114
|
+
const liveRows = deps.watcher.all().filter((r) => r.state === 'live');
|
|
115
|
+
const specialistRows = liveRows.filter((r) => r.agent !== null);
|
|
116
|
+
if (specialistRows.length >= deps.specialistCap) {
|
|
117
|
+
const idleOldest = specialistRows
|
|
118
|
+
.filter((r) => r.status === 'idle' && r.jsonlPath === null)
|
|
119
|
+
.sort((a, b) => a.updatedAt - b.updatedAt)[0];
|
|
120
|
+
if (!idleOldest) {
|
|
121
|
+
deps.logger(`[pty-cap] specialist-cap-reached account=${deps.accountId} current=${specialistRows.length} cap=${deps.specialistCap} evicted=none`);
|
|
122
|
+
return { kind: 'specialist-cap-reached', currentCount: specialistRows.length, cap: deps.specialistCap };
|
|
123
|
+
}
|
|
124
|
+
const victim = deps.store.get(idleOldest.sessionId);
|
|
125
|
+
if (victim && !victim.exited) {
|
|
126
|
+
try {
|
|
127
|
+
victim.pty.kill('SIGTERM');
|
|
128
|
+
}
|
|
129
|
+
catch { /* fire-and-forget */ }
|
|
130
|
+
}
|
|
131
|
+
deps.store.remove(idleOldest.sessionId);
|
|
132
|
+
deps.logger(`[pty-cap] specialist-cap-reached account=${deps.accountId} current=${specialistRows.length} cap=${deps.specialistCap} evicted=${idleOldest.sessionId}`);
|
|
133
|
+
}
|
|
134
|
+
if (liveRows.length >= deps.totalPtyCap - deps.operatorReserve) {
|
|
135
|
+
deps.logger(`[pty-cap] operator-slots-reserved total=${liveRows.length} reserve=${deps.operatorReserve} totalCap=${deps.totalPtyCap} rejected-specialist=${args.senderId}`);
|
|
136
|
+
return {
|
|
137
|
+
kind: 'operator-slots-reserved',
|
|
138
|
+
total: liveRows.length,
|
|
139
|
+
reserve: deps.operatorReserve,
|
|
140
|
+
totalCap: deps.totalPtyCap,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
136
145
|
export async function spawnClaudeSession(deps, args) {
|
|
146
|
+
const rejection = checkSlotsAndMaybeEvict(deps, args);
|
|
147
|
+
if (rejection) {
|
|
148
|
+
return { ok: false, rejected: rejection };
|
|
149
|
+
}
|
|
137
150
|
const startedAt = new Date().toISOString();
|
|
138
151
|
const start = Date.now();
|
|
139
152
|
const composedHost = deps.tunnelUrlOverride !== undefined
|
|
@@ -188,10 +201,6 @@ export async function spawnClaudeSession(deps, args) {
|
|
|
188
201
|
if (args.permissionMode && args.permissionMode !== 'default') {
|
|
189
202
|
argv.push('--permission-mode', args.permissionMode);
|
|
190
203
|
}
|
|
191
|
-
// Per-spawn mcp-config.json: role-gated descriptor union resolved from the
|
|
192
|
-
// tool-surface. Plugins that contribute zero public tools (every plugin
|
|
193
|
-
// today) are admin-only — public spawns get no MCP servers, which matches
|
|
194
|
-
// their empty allow-list.
|
|
195
204
|
const mcpConfigResult = writePerSpawnMcpConfig({
|
|
196
205
|
role: args.role,
|
|
197
206
|
toolSurface: deps.toolSurface,
|
|
@@ -206,10 +215,6 @@ export async function spawnClaudeSession(deps, args) {
|
|
|
206
215
|
return { ok: false, reason: 'mcp-config-write-failed', stderrTail: mcpConfigResult.detail };
|
|
207
216
|
}
|
|
208
217
|
argv.push('--mcp-config', mcpConfigResult.path);
|
|
209
|
-
// Bundled plugin agents (`platform/plugins/*/agents/`,
|
|
210
|
-
// `premium-plugins/*/agents/`) — both roles. Per-account specialists
|
|
211
|
-
// (`<accountDir>/specialists/agents/`) — admin only. `--add-dir` lets
|
|
212
|
-
// Claude Code's `subagent_type` dispatch reach the file on disk.
|
|
213
218
|
const dirsToAdd = [...deps.agentsDirs[args.role]];
|
|
214
219
|
if (args.role === 'admin' && existsSync(deps.perAccountSpecialistsDir)) {
|
|
215
220
|
dirsToAdd.push(deps.perAccountSpecialistsDir);
|
|
@@ -232,9 +237,6 @@ export async function spawnClaudeSession(deps, args) {
|
|
|
232
237
|
pty = deps.spawnPty(deps.claudeBin, argv, {
|
|
233
238
|
...process.env,
|
|
234
239
|
TERM: 'xterm-256color',
|
|
235
|
-
// Stop-hook gate reads these — admin foreground sessions fire the
|
|
236
|
-
// per-turn graph-write hook; everything else (public role, hidden
|
|
237
|
-
// background recorder PTYs) exits the hook 0 early.
|
|
238
240
|
MAXY_SESSION_ROLE: args.role,
|
|
239
241
|
MAXY_HIDDEN_SPAWN: args.hidden ? '1' : '0',
|
|
240
242
|
});
|
|
@@ -248,115 +250,90 @@ export async function spawnClaudeSession(deps, args) {
|
|
|
248
250
|
}
|
|
249
251
|
deps.logger(`pty-spawned pid=${pty.pid} ms=${Date.now() - ptySpawnStart}`);
|
|
250
252
|
const tail = attachPtyTail(pty);
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
logger
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
const waitMs = Date.now() - start;
|
|
319
|
-
deps.logger(`jsonl-observed pid=${pty.pid} sessionId=${observed.claudeSessionId} bridgeSuffix=${bridgeSuffix} path=${observed.jsonlPath} wait-ms=${waitMs}`);
|
|
320
|
-
deps.logger(`session-id-promoted bridgeSuffix=${bridgeSuffix} intrinsic=${observed.claudeSessionId} pid=${pty.pid}`);
|
|
321
|
-
deps.logger(`[pty-spawn] sessionId=${observed.claudeSessionId} appendSystemPromptBytes=${Buffer.byteLength(appendSystemPrompt, 'utf8')} identityBytes=${composed.identityBytes} soulBytes=${composed.soulBytes} aboutOwnerBytes=${composed.aboutOwnerBytes} dormantPluginsBytes=${composed.dormantPluginsBytes} accountDir=${deps.accountDir} role=${args.role} hostname=${deps.host.hostname} lanIPv4=${deps.host.lanIPv4} adminUrl=${deps.host.adminUrl} tunnelUrl=${composedHost.tunnelUrl ?? 'none'}`);
|
|
322
|
-
deps.onJsonlObserved?.(promoted);
|
|
323
|
-
});
|
|
324
|
-
// PTY exit: flip the exited flag and cancel the observation. No
|
|
325
|
-
// hard error here — by design the PTY may outlive any number of
|
|
326
|
-
// operator-idle periods; only after promotion is the JSONL useful.
|
|
327
|
-
pty.onExit((e) => {
|
|
328
|
-
session.exited = true;
|
|
329
|
-
const stderrTail = tail.getTail();
|
|
330
|
-
tail.dispose();
|
|
331
|
-
observation.cancel();
|
|
332
|
-
if (session.claudeSessionId === null) {
|
|
333
|
-
// never typed → drop the pending row silently
|
|
334
|
-
deps.store.remove(bridgeSuffix);
|
|
335
|
-
deps.logger(`session-closed-idle bridgeSuffix=${bridgeSuffix} pid=${pty.pid}`);
|
|
336
|
-
}
|
|
337
|
-
deps.logger(`kill pid=${pty.pid} reason=process-exited exit-code=${e.exitCode} signal=${e.signal ?? 'none'} stderr-tail=${formatTailForLog(stderrTail)}`);
|
|
338
|
-
});
|
|
339
|
-
const responseMs = Date.now() - start;
|
|
340
|
-
deps.logger(`spawn-response-returned bridgeSuffix=${bridgeSuffix} pid=${pty.pid} ms=${responseMs}`);
|
|
341
|
-
deps.logger(`spawn pid=${pty.pid} sessionUrl=${url} senderId=${args.senderId} role=${args.role} channel=${args.channel} permissionMode=${args.permissionMode ?? 'default'} latency-ms=${responseMs}`);
|
|
342
|
-
settle({ ok: true, session });
|
|
343
|
-
},
|
|
344
|
-
onTimeout: () => {
|
|
345
|
-
pty.kill('SIGKILL');
|
|
346
|
-
const stderrTail = tail.getTail();
|
|
347
|
-
deps.logger(`spawn-failed reason=url-capture-timeout stderr-tail=${formatTailForLog(stderrTail)}`);
|
|
348
|
-
settle({ ok: false, reason: 'url-capture-timeout', stderrTail });
|
|
349
|
-
},
|
|
350
|
-
});
|
|
253
|
+
// URL capture runs in parallel; its result is patched onto the
|
|
254
|
+
// session row when (if) it fires. The spawn promise does not block on
|
|
255
|
+
// it. A timeout here is logged but not a failure — the operator's
|
|
256
|
+
// iframe URL falls back to UI-side construction from bridgeSessionId.
|
|
257
|
+
let capturedUrl = null;
|
|
258
|
+
startUrlCapture({
|
|
259
|
+
pty,
|
|
260
|
+
timeoutMs: deps.urlCaptureTimeoutMs,
|
|
261
|
+
logger: deps.logger,
|
|
262
|
+
onUrl: (url) => {
|
|
263
|
+
capturedUrl = url;
|
|
264
|
+
deps.logger(`url-captured pid=${pty.pid} url=${url}`);
|
|
265
|
+
const live = deps.store.get(sessionIdRef.current ?? '');
|
|
266
|
+
if (live)
|
|
267
|
+
live.url = url;
|
|
268
|
+
},
|
|
269
|
+
onTimeout: () => {
|
|
270
|
+
deps.logger(`url-capture-timeout pid=${pty.pid} ms=${Date.now() - start}`);
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
// Mutable holder so the URL callback can find the row once sessionId
|
|
274
|
+
// is known. The PID-file event below sets sessionIdRef.current.
|
|
275
|
+
const sessionIdRef = { current: null };
|
|
276
|
+
// Wait for the watcher's PID-file event. The watcher resolves
|
|
277
|
+
// synchronously if the file already exists (race-safe boot scan).
|
|
278
|
+
let row;
|
|
279
|
+
try {
|
|
280
|
+
row = await deps.watcher.waitForPid(pty.pid, deps.pidFileTimeoutMs);
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
pty.kill('SIGKILL');
|
|
284
|
+
const stderrTail = tail.getTail();
|
|
285
|
+
tail.dispose();
|
|
286
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
287
|
+
deps.logger(`spawn-failed reason=pid-file-timeout pid=${pty.pid} detail=${JSON.stringify(detail)} stderr-tail=${formatTailForLog(stderrTail)}`);
|
|
288
|
+
return { ok: false, reason: 'pid-file-timeout', stderrTail };
|
|
289
|
+
}
|
|
290
|
+
sessionIdRef.current = row.sessionId;
|
|
291
|
+
const session = {
|
|
292
|
+
sessionId: row.sessionId,
|
|
293
|
+
bridgeSessionId: row.bridgeSessionId ?? `session_${row.sessionId}`,
|
|
294
|
+
bridgeSuffix: row.bridgeSuffix ?? row.sessionId,
|
|
295
|
+
pid: pty.pid,
|
|
296
|
+
url: capturedUrl,
|
|
297
|
+
startedAt,
|
|
298
|
+
senderId: args.senderId,
|
|
299
|
+
role: args.role,
|
|
300
|
+
channel: args.channel,
|
|
301
|
+
jsonlPath: row.jsonlPath,
|
|
302
|
+
pty,
|
|
303
|
+
exited: false,
|
|
304
|
+
hidden: args.hidden === true,
|
|
305
|
+
specialist: args.specialist ?? row.agent ?? null,
|
|
306
|
+
};
|
|
307
|
+
deps.store.add(session);
|
|
308
|
+
if (args.hidden === true) {
|
|
309
|
+
deps.logger(`hidden-spawn specialist=${session.specialist ?? 'none'} sessionId=${session.sessionId} pid=${pty.pid}`);
|
|
310
|
+
}
|
|
311
|
+
// PTY exit: mark exited; the watcher will fire a delete event when
|
|
312
|
+
// claude removes its PID file, which the http-server subscriber
|
|
313
|
+
// translates into an archived row (JSONL still on disk if any turn ran).
|
|
314
|
+
pty.onExit((e) => {
|
|
315
|
+
session.exited = true;
|
|
316
|
+
const stderrTail = tail.getTail();
|
|
317
|
+
tail.dispose();
|
|
318
|
+
deps.logger(`kill pid=${pty.pid} reason=process-exited exit-code=${e.exitCode} signal=${e.signal ?? 'none'} stderr-tail=${formatTailForLog(stderrTail)}`);
|
|
351
319
|
});
|
|
320
|
+
const responseMs = Date.now() - start;
|
|
321
|
+
deps.logger(`spawn-response-returned sessionId=${session.sessionId} bridgeSessionId=${session.bridgeSessionId} pid=${pty.pid} ms=${responseMs}`);
|
|
322
|
+
deps.logger(`spawn pid=${pty.pid} sessionId=${session.sessionId} bridgeSessionId=${session.bridgeSessionId} senderId=${args.senderId} role=${args.role} channel=${args.channel} permissionMode=${args.permissionMode ?? 'default'} latency-ms=${responseMs}`);
|
|
323
|
+
deps.logger(`[pty-spawn] sessionId=${session.sessionId} appendSystemPromptBytes=${Buffer.byteLength(appendSystemPrompt, 'utf8')} identityBytes=${composed.identityBytes} soulBytes=${composed.soulBytes} aboutOwnerBytes=${composed.aboutOwnerBytes} dormantPluginsBytes=${composed.dormantPluginsBytes} accountDir=${deps.accountDir} role=${args.role} hostname=${deps.host.hostname} lanIPv4=${deps.host.lanIPv4} adminUrl=${deps.host.adminUrl} tunnelUrl=${composedHost.tunnelUrl ?? 'none'}`);
|
|
324
|
+
deps.onSessionReady?.(session);
|
|
325
|
+
return { ok: true, session };
|
|
352
326
|
}
|
|
353
|
-
|
|
327
|
+
/** SIGTERM-only stop. Idempotent — already-exited rows resolve immediately.
|
|
328
|
+
* Does not touch the JSONL transcript. Returns whether a PTY existed. */
|
|
329
|
+
export async function stopSession(deps, sessionId) {
|
|
354
330
|
const s = deps.store.get(sessionId);
|
|
355
331
|
if (!s)
|
|
356
|
-
return {
|
|
332
|
+
return { existed: false };
|
|
357
333
|
if (s.exited) {
|
|
358
334
|
deps.store.remove(sessionId);
|
|
359
|
-
|
|
335
|
+
deps.logger(`kill sessionId=${sessionId} pid=${s.pid} reason=operator-request status=already-exited`);
|
|
336
|
+
return { existed: true };
|
|
360
337
|
}
|
|
361
338
|
s.pty.kill('SIGTERM');
|
|
362
339
|
await new Promise((resolve) => {
|
|
@@ -371,7 +348,7 @@ export async function deleteSession(deps, sessionId) {
|
|
|
371
348
|
});
|
|
372
349
|
});
|
|
373
350
|
deps.store.remove(sessionId);
|
|
374
|
-
deps.logger(`kill pid=${s.pid} reason=operator-request exit-code=0`);
|
|
375
|
-
return {
|
|
351
|
+
deps.logger(`kill sessionId=${sessionId} pid=${s.pid} reason=operator-request exit-code=0`);
|
|
352
|
+
return { existed: true };
|
|
376
353
|
}
|
|
377
354
|
//# sourceMappingURL=pty-spawner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty-spawner.js","sourceRoot":"","sources":["../src/pty-spawner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pty-spawner.js","sourceRoot":"","sources":["../src/pty-spawner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Logger } from './types.js';
|
|
2
|
+
import type { FsWatcher } from './fs-watcher.js';
|
|
3
|
+
import type { SessionStore } from './session-store.js';
|
|
4
|
+
export interface ReaperDeps {
|
|
5
|
+
watcher: FsWatcher;
|
|
6
|
+
store: SessionStore;
|
|
7
|
+
recorderIdleTtlMs: number;
|
|
8
|
+
killGraceMs: number;
|
|
9
|
+
intervalMs: number;
|
|
10
|
+
logger: Logger;
|
|
11
|
+
/** Injectable clock for tests. Defaults to Date.now. */
|
|
12
|
+
now?: () => number;
|
|
13
|
+
}
|
|
14
|
+
export interface Reaper {
|
|
15
|
+
start(): void;
|
|
16
|
+
stop(): void;
|
|
17
|
+
/** Run one reap pass synchronously. Exposed for tests. */
|
|
18
|
+
tickOnce(): {
|
|
19
|
+
scanned: number;
|
|
20
|
+
reaped: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare function createReaper(deps: ReaperDeps): Reaper;
|
|
24
|
+
//# sourceMappingURL=reaper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reaper.d.ts","sourceRoot":"","sources":["../src/reaper.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,SAAS,CAAA;IAClB,KAAK,EAAE,YAAY,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,0DAA0D;IAC1D,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAChD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAoFrD"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// Idle-recorder reaper. Walks the fs-watcher row index every `intervalMs`
|
|
2
|
+
// (and again on each watcher event) and SIGTERMs any specialist row that has
|
|
3
|
+
// been status:idle with no JSONL for longer than `recorderIdleTtlMs`. The
|
|
4
|
+
// Stop hook in the admin agent fires one recorder per turn; any recorder that
|
|
5
|
+
// errors-without-exit leaks a PTY. Without this loop, leaks compound until
|
|
6
|
+
// `/proc/sys/kernel/pty/max` or `nofile` is exhausted and the manager cannot
|
|
7
|
+
// spawn its own cleanup turn.
|
|
8
|
+
//
|
|
9
|
+
// Reap condition (all four must hold):
|
|
10
|
+
// row.agent !== null // it's a specialist
|
|
11
|
+
// row.status === 'idle' // not actively producing output
|
|
12
|
+
// row.jsonlPath === null // no transcript was ever written
|
|
13
|
+
// row.updatedAt older than TTL // not a fresh spawn
|
|
14
|
+
//
|
|
15
|
+
// The reaper holds no PTY itself — it sends SIGTERM via the StoredSession's
|
|
16
|
+
// pty handle from the SessionStore. The PID file removal happens naturally
|
|
17
|
+
// when claude exits; the fs-watcher observes that and drops the row.
|
|
18
|
+
export function createReaper(deps) {
|
|
19
|
+
const now = deps.now ?? (() => Date.now());
|
|
20
|
+
let timer = null;
|
|
21
|
+
let unsubscribe = null;
|
|
22
|
+
let started = false;
|
|
23
|
+
function shouldReap(row) {
|
|
24
|
+
if (row.agent === null)
|
|
25
|
+
return false;
|
|
26
|
+
if (row.status !== 'idle')
|
|
27
|
+
return false;
|
|
28
|
+
if (row.jsonlPath !== null)
|
|
29
|
+
return false;
|
|
30
|
+
if (row.state !== 'live')
|
|
31
|
+
return false;
|
|
32
|
+
const idleMs = now() - row.updatedAt;
|
|
33
|
+
return idleMs > deps.recorderIdleTtlMs;
|
|
34
|
+
}
|
|
35
|
+
function reapRow(row) {
|
|
36
|
+
const idleMs = now() - row.updatedAt;
|
|
37
|
+
const live = deps.store.get(row.sessionId);
|
|
38
|
+
if (live && !live.exited) {
|
|
39
|
+
try {
|
|
40
|
+
live.pty.kill('SIGTERM');
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Already gone — fall through to log + SIGKILL escalation.
|
|
44
|
+
}
|
|
45
|
+
const grace = setTimeout(() => {
|
|
46
|
+
if (!live.exited) {
|
|
47
|
+
try {
|
|
48
|
+
live.pty.kill('SIGKILL');
|
|
49
|
+
}
|
|
50
|
+
catch { /* gone */ }
|
|
51
|
+
}
|
|
52
|
+
}, deps.killGraceMs);
|
|
53
|
+
live.pty.onExit(() => clearTimeout(grace));
|
|
54
|
+
}
|
|
55
|
+
deps.logger(`[reaper] reaped sessionId=${row.sessionId} agent=${row.agent} idle-ms=${idleMs} reason=stale-recorder`);
|
|
56
|
+
}
|
|
57
|
+
function tickOnce() {
|
|
58
|
+
let scanned = 0;
|
|
59
|
+
let reaped = 0;
|
|
60
|
+
try {
|
|
61
|
+
const rows = deps.watcher.all();
|
|
62
|
+
scanned = rows.length;
|
|
63
|
+
for (const row of rows) {
|
|
64
|
+
if (shouldReap(row)) {
|
|
65
|
+
reapRow(row);
|
|
66
|
+
reaped += 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
deps.logger(`[reaper] tick rows-scanned=${scanned} reaped=${reaped}`);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
73
|
+
deps.logger(`[reaper] tick-failed message=${JSON.stringify(message)}`);
|
|
74
|
+
}
|
|
75
|
+
return { scanned, reaped };
|
|
76
|
+
}
|
|
77
|
+
function start() {
|
|
78
|
+
if (started)
|
|
79
|
+
return;
|
|
80
|
+
started = true;
|
|
81
|
+
timer = setInterval(tickOnce, deps.intervalMs);
|
|
82
|
+
// Don't keep the event loop alive for the reaper alone — the HTTP
|
|
83
|
+
// server's listener handles that. Without unref(), shutdown via
|
|
84
|
+
// process.exit is fine, but tests that close the watcher and expect
|
|
85
|
+
// the process to drain would hang.
|
|
86
|
+
if (typeof timer.unref === 'function')
|
|
87
|
+
timer.unref();
|
|
88
|
+
unsubscribe = deps.watcher.subscribe((event) => {
|
|
89
|
+
// Only pid-source events change the lifecycle of a specialist row
|
|
90
|
+
// in a way that could make it eligible. jsonl events disqualify
|
|
91
|
+
// (jsonlPath !== null), so we skip them.
|
|
92
|
+
if (event.source !== 'pid')
|
|
93
|
+
return;
|
|
94
|
+
tickOnce();
|
|
95
|
+
});
|
|
96
|
+
deps.logger(`[reaper] started intervalMs=${deps.intervalMs} recorderIdleTtlMs=${deps.recorderIdleTtlMs} killGraceMs=${deps.killGraceMs}`);
|
|
97
|
+
}
|
|
98
|
+
function stop() {
|
|
99
|
+
if (!started)
|
|
100
|
+
return;
|
|
101
|
+
if (timer) {
|
|
102
|
+
clearInterval(timer);
|
|
103
|
+
timer = null;
|
|
104
|
+
}
|
|
105
|
+
if (unsubscribe) {
|
|
106
|
+
unsubscribe();
|
|
107
|
+
unsubscribe = null;
|
|
108
|
+
}
|
|
109
|
+
started = false;
|
|
110
|
+
deps.logger(`[reaper] stopped`);
|
|
111
|
+
}
|
|
112
|
+
return { start, stop, tickOnce };
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=reaper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reaper.js","sourceRoot":"","sources":["../src/reaper.ts"],"names":[],"mappings":"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"}
|