acpx 0.1.15 → 0.2.0

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.
@@ -0,0 +1,140 @@
1
+ import { t as __exportAll } from "./rolldown-runtime-CjeV3_4I.js";
2
+ import { n as probeQueueOwnerHealth } from "./queue-ipc-C8StWiZt.js";
3
+ import { n as normalizeRuntimeSessionId } from "./runtime-session-id-B03l5p1Q.js";
4
+ import path from "node:path";
5
+
6
+ //#region src/cli/output-render.ts
7
+ var output_render_exports = /* @__PURE__ */ __exportAll({
8
+ agentSessionIdPayload: () => agentSessionIdPayload,
9
+ emitJsonResult: () => emitJsonResult,
10
+ formatPromptSessionBannerLine: () => formatPromptSessionBannerLine,
11
+ printClosedSessionByFormat: () => printClosedSessionByFormat,
12
+ printCreatedSessionBanner: () => printCreatedSessionBanner,
13
+ printEnsuredSessionByFormat: () => printEnsuredSessionByFormat,
14
+ printNewSessionByFormat: () => printNewSessionByFormat,
15
+ printPromptSessionBanner: () => printPromptSessionBanner,
16
+ printQueuedPromptByFormat: () => printQueuedPromptByFormat,
17
+ printSessionsByFormat: () => printSessionsByFormat
18
+ });
19
+ function formatSessionLabel(record) {
20
+ return record.name ?? "cwd";
21
+ }
22
+ function formatRoutedFrom(sessionCwd, currentCwd) {
23
+ const relative = path.relative(sessionCwd, currentCwd);
24
+ if (!relative || relative === ".") return;
25
+ return relative.startsWith(".") ? relative : `.${path.sep}${relative}`;
26
+ }
27
+ async function resolveSessionConnectionStatus(record) {
28
+ return (await probeQueueOwnerHealth(record.acpxRecordId)).healthy ? "connected" : "needs reconnect";
29
+ }
30
+ function emitJsonResult(format, payload) {
31
+ if (format !== "json") return false;
32
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
33
+ return true;
34
+ }
35
+ function printSessionsByFormat(sessions, format) {
36
+ if (format === "json") {
37
+ process.stdout.write(`${JSON.stringify(sessions)}\n`);
38
+ return;
39
+ }
40
+ if (format === "quiet") {
41
+ for (const session of sessions) {
42
+ const closedMarker = session.closed ? " [closed]" : "";
43
+ process.stdout.write(`${session.acpxRecordId}${closedMarker}\n`);
44
+ }
45
+ return;
46
+ }
47
+ if (sessions.length === 0) {
48
+ process.stdout.write("No sessions\n");
49
+ return;
50
+ }
51
+ for (const session of sessions) {
52
+ const closedMarker = session.closed ? " [closed]" : "";
53
+ process.stdout.write(`${session.acpxRecordId}${closedMarker}\t${session.name ?? "-"}\t${session.cwd}\t${session.lastUsedAt}\n`);
54
+ }
55
+ }
56
+ function printClosedSessionByFormat(record, format) {
57
+ if (emitJsonResult(format, {
58
+ action: "session_closed",
59
+ acpxRecordId: record.acpxRecordId,
60
+ acpxSessionId: record.acpSessionId,
61
+ agentSessionId: record.agentSessionId
62
+ })) return;
63
+ if (format === "quiet") return;
64
+ process.stdout.write(`${record.acpxRecordId}\n`);
65
+ }
66
+ function printNewSessionByFormat(record, replaced, format) {
67
+ if (emitJsonResult(format, {
68
+ action: "session_ensured",
69
+ created: true,
70
+ acpxRecordId: record.acpxRecordId,
71
+ acpxSessionId: record.acpSessionId,
72
+ agentSessionId: record.agentSessionId,
73
+ name: record.name,
74
+ replacedSessionId: replaced?.acpxRecordId
75
+ })) return;
76
+ if (format === "quiet") {
77
+ process.stdout.write(`${record.acpxRecordId}\n`);
78
+ return;
79
+ }
80
+ if (replaced) {
81
+ process.stdout.write(`${record.acpxRecordId}\t(replaced ${replaced.acpxRecordId})\n`);
82
+ return;
83
+ }
84
+ process.stdout.write(`${record.acpxRecordId}\n`);
85
+ }
86
+ function printEnsuredSessionByFormat(record, created, format) {
87
+ if (emitJsonResult(format, {
88
+ action: "session_ensured",
89
+ created,
90
+ acpxRecordId: record.acpxRecordId,
91
+ acpxSessionId: record.acpSessionId,
92
+ agentSessionId: record.agentSessionId,
93
+ name: record.name
94
+ })) return;
95
+ if (format === "quiet") {
96
+ process.stdout.write(`${record.acpxRecordId}\n`);
97
+ return;
98
+ }
99
+ const action = created ? "created" : "existing";
100
+ process.stdout.write(`${record.acpxRecordId}\t(${action})\n`);
101
+ }
102
+ function printQueuedPromptByFormat(result, format) {
103
+ if (emitJsonResult(format, {
104
+ action: "prompt_queued",
105
+ acpxRecordId: result.sessionId,
106
+ requestId: result.requestId
107
+ })) return;
108
+ if (format === "quiet") return;
109
+ process.stdout.write(`[queued] ${result.requestId}\n`);
110
+ }
111
+ function formatPromptSessionBannerLine(record, currentCwd, connectionStatus = "needs reconnect") {
112
+ const label = formatSessionLabel(record);
113
+ const normalizedSessionCwd = path.resolve(record.cwd);
114
+ const normalizedCurrentCwd = path.resolve(currentCwd);
115
+ const routedFrom = normalizedSessionCwd === normalizedCurrentCwd ? void 0 : formatRoutedFrom(normalizedSessionCwd, normalizedCurrentCwd);
116
+ const status = connectionStatus;
117
+ if (routedFrom) return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} (routed from ${routedFrom}) · agent ${status}`;
118
+ return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} · agent ${status}`;
119
+ }
120
+ async function printPromptSessionBanner(record, currentCwd, format, jsonStrict = false) {
121
+ if (format === "quiet" || jsonStrict && format === "json") return;
122
+ const status = await resolveSessionConnectionStatus(record);
123
+ process.stderr.write(`${formatPromptSessionBannerLine(record, currentCwd, status)}\n`);
124
+ }
125
+ function printCreatedSessionBanner(record, agentName, format, jsonStrict = false) {
126
+ if (format === "quiet" || jsonStrict && format === "json") return;
127
+ const label = formatSessionLabel(record);
128
+ process.stderr.write(`[acpx] created session ${label} (${record.acpxRecordId})\n`);
129
+ process.stderr.write(`[acpx] agent: ${agentName}\n`);
130
+ process.stderr.write(`[acpx] cwd: ${record.cwd}\n`);
131
+ }
132
+ function agentSessionIdPayload(agentSessionId) {
133
+ const normalized = normalizeRuntimeSessionId(agentSessionId);
134
+ if (!normalized) return {};
135
+ return { agentSessionId: normalized };
136
+ }
137
+
138
+ //#endregion
139
+ export { output_render_exports as n, formatPromptSessionBannerLine as t };
140
+ //# sourceMappingURL=output-render-Cvz0eKSb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-render-Cvz0eKSb.js","names":[],"sources":["../src/cli/output-render.ts"],"sourcesContent":["import path from \"node:path\";\nimport { probeQueueOwnerHealth } from \"../queue-ipc.js\";\nimport { normalizeRuntimeSessionId } from \"../runtime-session-id.js\";\nimport type { OutputFormat, SessionRecord } from \"../types.js\";\n\nfunction formatSessionLabel(record: SessionRecord): string {\n return record.name ?? \"cwd\";\n}\n\nfunction formatRoutedFrom(sessionCwd: string, currentCwd: string): string | undefined {\n const relative = path.relative(sessionCwd, currentCwd);\n if (!relative || relative === \".\") {\n return undefined;\n }\n return relative.startsWith(\".\") ? relative : `.${path.sep}${relative}`;\n}\n\ntype SessionConnectionStatus = \"connected\" | \"needs reconnect\";\n\nasync function resolveSessionConnectionStatus(\n record: SessionRecord,\n): Promise<SessionConnectionStatus> {\n const health = await probeQueueOwnerHealth(record.acpxRecordId);\n return health.healthy ? \"connected\" : \"needs reconnect\";\n}\n\nexport function emitJsonResult(format: OutputFormat, payload: unknown): boolean {\n if (format !== \"json\") {\n return false;\n }\n process.stdout.write(`${JSON.stringify(payload)}\\n`);\n return true;\n}\n\nexport function printSessionsByFormat(sessions: SessionRecord[], format: OutputFormat): void {\n if (format === \"json\") {\n process.stdout.write(`${JSON.stringify(sessions)}\\n`);\n return;\n }\n\n if (format === \"quiet\") {\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(`${session.acpxRecordId}${closedMarker}\\n`);\n }\n return;\n }\n\n if (sessions.length === 0) {\n process.stdout.write(\"No sessions\\n\");\n return;\n }\n\n for (const session of sessions) {\n const closedMarker = session.closed ? \" [closed]\" : \"\";\n process.stdout.write(\n `${session.acpxRecordId}${closedMarker}\\t${session.name ?? \"-\"}\\t${session.cwd}\\t${session.lastUsedAt}\\n`,\n );\n }\n}\n\nexport function printClosedSessionByFormat(record: SessionRecord, format: OutputFormat): void {\n if (\n emitJsonResult(format, {\n action: \"session_closed\",\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printNewSessionByFormat(\n record: SessionRecord,\n replaced: SessionRecord | undefined,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created: true,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n replacedSessionId: replaced?.acpxRecordId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n if (replaced) {\n process.stdout.write(`${record.acpxRecordId}\\t(replaced ${replaced.acpxRecordId})\\n`);\n return;\n }\n\n process.stdout.write(`${record.acpxRecordId}\\n`);\n}\n\nexport function printEnsuredSessionByFormat(\n record: SessionRecord,\n created: boolean,\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"session_ensured\",\n created,\n acpxRecordId: record.acpxRecordId,\n acpxSessionId: record.acpSessionId,\n agentSessionId: record.agentSessionId,\n name: record.name,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n process.stdout.write(`${record.acpxRecordId}\\n`);\n return;\n }\n\n const action = created ? \"created\" : \"existing\";\n process.stdout.write(`${record.acpxRecordId}\\t(${action})\\n`);\n}\n\nexport function printQueuedPromptByFormat(\n result: {\n sessionId: string;\n requestId: string;\n },\n format: OutputFormat,\n): void {\n if (\n emitJsonResult(format, {\n action: \"prompt_queued\",\n acpxRecordId: result.sessionId,\n requestId: result.requestId,\n })\n ) {\n return;\n }\n\n if (format === \"quiet\") {\n return;\n }\n\n process.stdout.write(`[queued] ${result.requestId}\\n`);\n}\n\nexport function formatPromptSessionBannerLine(\n record: SessionRecord,\n currentCwd: string,\n connectionStatus: SessionConnectionStatus = \"needs reconnect\",\n): string {\n const label = formatSessionLabel(record);\n const normalizedSessionCwd = path.resolve(record.cwd);\n const normalizedCurrentCwd = path.resolve(currentCwd);\n const routedFrom =\n normalizedSessionCwd === normalizedCurrentCwd\n ? undefined\n : formatRoutedFrom(normalizedSessionCwd, normalizedCurrentCwd);\n const status = connectionStatus;\n\n if (routedFrom) {\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} (routed from ${routedFrom}) · agent ${status}`;\n }\n\n return `[acpx] session ${label} (${record.acpxRecordId}) · ${normalizedSessionCwd} · agent ${status}`;\n}\n\nexport async function printPromptSessionBanner(\n record: SessionRecord,\n currentCwd: string,\n format: OutputFormat,\n jsonStrict = false,\n): Promise<void> {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const status = await resolveSessionConnectionStatus(record);\n process.stderr.write(`${formatPromptSessionBannerLine(record, currentCwd, status)}\\n`);\n}\n\nexport function printCreatedSessionBanner(\n record: SessionRecord,\n agentName: string,\n format: OutputFormat,\n jsonStrict = false,\n): void {\n if (format === \"quiet\" || (jsonStrict && format === \"json\")) {\n return;\n }\n\n const label = formatSessionLabel(record);\n process.stderr.write(`[acpx] created session ${label} (${record.acpxRecordId})\\n`);\n process.stderr.write(`[acpx] agent: ${agentName}\\n`);\n process.stderr.write(`[acpx] cwd: ${record.cwd}\\n`);\n}\n\nexport function agentSessionIdPayload(agentSessionId: string | undefined): {\n agentSessionId?: string;\n} {\n const normalized = normalizeRuntimeSessionId(agentSessionId);\n if (!normalized) {\n return {};\n }\n\n return { agentSessionId: normalized };\n}\n"],"mappings":"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"}