@patze/code-cli 0.31.0 → 0.41.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.
- package/CHANGELOG.md +97 -0
- package/VERSION +1 -1
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +11 -11
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/commands/exec.d.ts.map +1 -1
- package/dist/cli/commands/exec.js +8 -5
- package/dist/cli/commands/exec.js.map +1 -1
- package/dist/cli/commands/trust-loop-snapshot.d.ts.map +1 -1
- package/dist/cli/commands/trust-loop-snapshot.js +19 -0
- package/dist/cli/commands/trust-loop-snapshot.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +9 -8
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/interactive/agent-event-feed.d.ts +6 -3
- package/dist/cli/interactive/agent-event-feed.d.ts.map +1 -1
- package/dist/cli/interactive/agent-event-feed.js +110 -63
- package/dist/cli/interactive/agent-event-feed.js.map +1 -1
- package/dist/cli/interactive/agent-execute-turn.d.ts +3 -0
- package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -1
- package/dist/cli/interactive/agent-execute-turn.js +8 -0
- package/dist/cli/interactive/agent-execute-turn.js.map +1 -1
- package/dist/cli/interactive/agent-stream-format.js +4 -4
- package/dist/cli/interactive/agent-stream-format.js.map +1 -1
- package/dist/cli/interactive/agent-turn-classify.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn-classify.js +1 -3
- package/dist/cli/interactive/agent-turn-classify.js.map +1 -1
- package/dist/cli/interactive/agent-turn-context.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn-context.js +7 -1
- package/dist/cli/interactive/agent-turn-context.js.map +1 -1
- package/dist/cli/interactive/agent-turn-format.js +2 -2
- package/dist/cli/interactive/agent-turn-format.js.map +1 -1
- package/dist/cli/interactive/agent-turn.d.ts +1 -0
- package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn.js +40 -28
- package/dist/cli/interactive/agent-turn.js.map +1 -1
- package/dist/cli/interactive/auth-gate.d.ts +6 -0
- package/dist/cli/interactive/auth-gate.d.ts.map +1 -0
- package/dist/cli/interactive/auth-gate.js +29 -0
- package/dist/cli/interactive/auth-gate.js.map +1 -0
- package/dist/cli/interactive/codex-diff-feed.d.ts +14 -0
- package/dist/cli/interactive/codex-diff-feed.d.ts.map +1 -0
- package/dist/cli/interactive/codex-diff-feed.js +76 -0
- package/dist/cli/interactive/codex-diff-feed.js.map +1 -0
- package/dist/cli/interactive/codex-feed-demo.d.ts +9 -0
- package/dist/cli/interactive/codex-feed-demo.d.ts.map +1 -0
- package/dist/cli/interactive/codex-feed-demo.js +72 -0
- package/dist/cli/interactive/codex-feed-demo.js.map +1 -0
- package/dist/cli/interactive/codex-feed-format.d.ts +35 -0
- package/dist/cli/interactive/codex-feed-format.d.ts.map +1 -0
- package/dist/cli/interactive/codex-feed-format.js +142 -0
- package/dist/cli/interactive/codex-feed-format.js.map +1 -0
- package/dist/cli/interactive/codex-feed-writer.d.ts +18 -0
- package/dist/cli/interactive/codex-feed-writer.d.ts.map +1 -0
- package/dist/cli/interactive/codex-feed-writer.js +144 -0
- package/dist/cli/interactive/codex-feed-writer.js.map +1 -0
- package/dist/cli/interactive/codex-preview-feed.d.ts +13 -0
- package/dist/cli/interactive/codex-preview-feed.d.ts.map +1 -0
- package/dist/cli/interactive/codex-preview-feed.js +130 -0
- package/dist/cli/interactive/codex-preview-feed.js.map +1 -0
- package/dist/cli/interactive/cookbook-feed-writer.d.ts +2 -12
- package/dist/cli/interactive/cookbook-feed-writer.d.ts.map +1 -1
- package/dist/cli/interactive/cookbook-feed-writer.js +2 -86
- package/dist/cli/interactive/cookbook-feed-writer.js.map +1 -1
- package/dist/cli/interactive/header.d.ts.map +1 -1
- package/dist/cli/interactive/header.js +1 -7
- package/dist/cli/interactive/header.js.map +1 -1
- package/dist/cli/interactive/line-editor.d.ts +2 -0
- package/dist/cli/interactive/line-editor.d.ts.map +1 -1
- package/dist/cli/interactive/line-editor.js +7 -5
- package/dist/cli/interactive/line-editor.js.map +1 -1
- package/dist/cli/interactive/plain-agent-render.d.ts +5 -4
- package/dist/cli/interactive/plain-agent-render.d.ts.map +1 -1
- package/dist/cli/interactive/plain-agent-render.js +12 -44
- package/dist/cli/interactive/plain-agent-render.js.map +1 -1
- package/dist/cli/interactive/plain-codex-feed.d.ts +11 -0
- package/dist/cli/interactive/plain-codex-feed.d.ts.map +1 -0
- package/dist/cli/interactive/plain-codex-feed.js +37 -0
- package/dist/cli/interactive/plain-codex-feed.js.map +1 -0
- package/dist/cli/interactive/reset-agent.d.ts +8 -0
- package/dist/cli/interactive/reset-agent.d.ts.map +1 -0
- package/dist/cli/interactive/reset-agent.js +23 -0
- package/dist/cli/interactive/reset-agent.js.map +1 -0
- package/dist/cli/interactive/session-controller.d.ts +1 -0
- package/dist/cli/interactive/session-controller.d.ts.map +1 -1
- package/dist/cli/interactive/session-controller.js +21 -10
- package/dist/cli/interactive/session-controller.js.map +1 -1
- package/dist/cli/interactive/session-hints.d.ts +4 -0
- package/dist/cli/interactive/session-hints.d.ts.map +1 -0
- package/dist/cli/interactive/session-hints.js +28 -0
- package/dist/cli/interactive/session-hints.js.map +1 -0
- package/dist/cli/interactive/session.d.ts +3 -1
- package/dist/cli/interactive/session.d.ts.map +1 -1
- package/dist/cli/interactive/session.js +8 -2
- package/dist/cli/interactive/session.js.map +1 -1
- package/dist/cli/interactive/shell.d.ts.map +1 -1
- package/dist/cli/interactive/shell.js +59 -20
- package/dist/cli/interactive/shell.js.map +1 -1
- package/dist/cli/interactive/slash-dispatch.d.ts +6 -0
- package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -1
- package/dist/cli/interactive/slash-dispatch.js +29 -5
- package/dist/cli/interactive/slash-dispatch.js.map +1 -1
- package/dist/cli/interactive/slash-menu-core.d.ts +10 -0
- package/dist/cli/interactive/slash-menu-core.d.ts.map +1 -0
- package/dist/cli/interactive/slash-menu-core.js +34 -0
- package/dist/cli/interactive/slash-menu-core.js.map +1 -0
- package/dist/cli/interactive/slash-menu.d.ts +3 -0
- package/dist/cli/interactive/slash-menu.d.ts.map +1 -1
- package/dist/cli/interactive/slash-menu.js +16 -4
- package/dist/cli/interactive/slash-menu.js.map +1 -1
- package/dist/cli/interactive/slash-registry.d.ts.map +1 -1
- package/dist/cli/interactive/slash-registry.js +4 -1
- package/dist/cli/interactive/slash-registry.js.map +1 -1
- package/dist/cli/interactive/trace-glyphs.d.ts.map +1 -1
- package/dist/cli/interactive/trace-glyphs.js +2 -11
- package/dist/cli/interactive/trace-glyphs.js.map +1 -1
- package/dist/cli/interactive/transcript-upsert.d.ts.map +1 -1
- package/dist/cli/interactive/transcript-upsert.js +6 -6
- package/dist/cli/interactive/transcript-upsert.js.map +1 -1
- package/dist/cli/one-shot-args.d.ts +1 -0
- package/dist/cli/one-shot-args.d.ts.map +1 -1
- package/dist/cli/one-shot-args.js +3 -2
- package/dist/cli/one-shot-args.js.map +1 -1
- package/opentui/src/App.tsx +67 -6
- package/opentui/src/transcript-render.ts +144 -2
- package/package.json +1 -1
|
@@ -10,12 +10,13 @@ import { guessWorkspaceRoot } from "../../runtime/workspace.js";
|
|
|
10
10
|
import { normalizePatchProposalInput } from "../../runtime/patch-proposal.js";
|
|
11
11
|
import { hasPatchBody } from "../../runtime/patch-proposal.js";
|
|
12
12
|
import { formatAgentTurnLines, formatConversationTurnLines, resolveConversationReply, } from "./agent-turn-format.js";
|
|
13
|
-
import { formatAgentReply } from "./transcript-format.js";
|
|
14
13
|
import { classifyTurnInput } from "./agent-turn-classify.js";
|
|
15
14
|
import { buildContextualReply } from "./agent-turn-context.js";
|
|
16
15
|
import { isCliExecuteEnabled, isExecuteAuthReady, runExecuteTurn, } from "./agent-execute-turn.js";
|
|
17
16
|
import { resolveEffectiveModel } from "../../config/models.js";
|
|
17
|
+
import { formatAuthRequiredForAgentLines, shouldBlockUnauthenticatedAgentTask, } from "./auth-gate.js";
|
|
18
18
|
import { buildConversationContext } from "./session-store.js";
|
|
19
|
+
import { emitCodexPreviewFeedEvents } from "./codex-preview-feed.js";
|
|
19
20
|
export async function runAgentTurn(session, objective, options = {}) {
|
|
20
21
|
const trimmed = objective.trim();
|
|
21
22
|
if (!trimmed) {
|
|
@@ -54,6 +55,12 @@ export async function runAgentTurn(session, objective, options = {}) {
|
|
|
54
55
|
if (authReady) {
|
|
55
56
|
config = await ensureExecuteAuthConfig(session.cwd, { fetchImpl: options.fetchImpl });
|
|
56
57
|
}
|
|
58
|
+
if (shouldBlockUnauthenticatedAgentTask(trimmed, config)) {
|
|
59
|
+
return {
|
|
60
|
+
lines: formatAuthRequiredForAgentLines(),
|
|
61
|
+
exitCode: 1,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
57
64
|
const conversationContext = buildConversationContext(session.getActiveTranscript());
|
|
58
65
|
session.setCurrentGoal(trimmed);
|
|
59
66
|
session.clearReviewAndApprovalState();
|
|
@@ -75,6 +82,8 @@ export async function runAgentTurn(session, objective, options = {}) {
|
|
|
75
82
|
executionMode: session.getExecutionMode(),
|
|
76
83
|
fetchImpl: options.fetchImpl,
|
|
77
84
|
signal: options.signal,
|
|
85
|
+
force: options.force,
|
|
86
|
+
cancelRunId: options.force ? session.getLastRunId() : null,
|
|
78
87
|
onTranscriptLine: options.onTranscriptLine,
|
|
79
88
|
onTranscriptPartial: options.onTranscriptPartial,
|
|
80
89
|
onAgentEvent: options.onAgentEvent,
|
|
@@ -94,6 +103,13 @@ export async function runAgentTurn(session, objective, options = {}) {
|
|
|
94
103
|
run: execute.run,
|
|
95
104
|
};
|
|
96
105
|
}
|
|
106
|
+
// Phase B: logged-in tasks never fall back to client preview — execute or fail closed.
|
|
107
|
+
if (isCliExecuteEnabled() && authReady) {
|
|
108
|
+
return {
|
|
109
|
+
lines: formatAuthRequiredForAgentLines(),
|
|
110
|
+
exitCode: 1,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
97
113
|
const toolSteps = ["accept_task", "inspect_workspace"];
|
|
98
114
|
let planSource = "local";
|
|
99
115
|
let previewResult;
|
|
@@ -160,38 +176,34 @@ export async function runAgentTurn(session, objective, options = {}) {
|
|
|
160
176
|
if (pendingAction) {
|
|
161
177
|
session.setPendingAction(pendingAction);
|
|
162
178
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}),
|
|
177
|
-
...formatAgentReply("Set user id via /login (session resolve) before agent execute."),
|
|
178
|
-
],
|
|
179
|
-
exitCode: 0,
|
|
180
|
-
streamed: false,
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
return {
|
|
184
|
-
lines: formatAgentTurnLines({
|
|
179
|
+
const turnModel = {
|
|
180
|
+
objective: trimmed,
|
|
181
|
+
inspectSummary,
|
|
182
|
+
planSource,
|
|
183
|
+
previewResult,
|
|
184
|
+
permissionMode: permission.mode,
|
|
185
|
+
permissionLabel: permission.label,
|
|
186
|
+
toolSteps,
|
|
187
|
+
authReady,
|
|
188
|
+
mutationsEnabled: false,
|
|
189
|
+
};
|
|
190
|
+
if (options.onAgentEvent) {
|
|
191
|
+
emitCodexPreviewFeedEvents(options.onAgentEvent, {
|
|
185
192
|
objective: trimmed,
|
|
186
193
|
inspectSummary,
|
|
187
194
|
planSource,
|
|
188
195
|
previewResult,
|
|
189
|
-
permissionMode: permission.mode,
|
|
190
|
-
permissionLabel: permission.label,
|
|
191
|
-
toolSteps,
|
|
192
196
|
authReady,
|
|
193
|
-
|
|
194
|
-
})
|
|
197
|
+
permissionLabel: permission.label,
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
lines: [],
|
|
201
|
+
exitCode,
|
|
202
|
+
streamed: true,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
lines: formatAgentTurnLines(turnModel),
|
|
195
207
|
exitCode,
|
|
196
208
|
streamed: false,
|
|
197
209
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-turn.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAChE,OAAO,EAAE,cAAc,EAA2B,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAG9D,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"agent-turn.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ResolvedConfig } from "../../config/config.js";
|
|
2
|
+
export declare function formatAuthRequiredForAgentLines(): string[];
|
|
3
|
+
export declare function resolveComposerPlaceholder(cwd: string): string;
|
|
4
|
+
export declare function needsAuthBeforeAgent(config?: ResolvedConfig): boolean;
|
|
5
|
+
export declare function shouldBlockUnauthenticatedAgentTask(prompt: string, config?: ResolvedConfig): boolean;
|
|
6
|
+
//# sourceMappingURL=auth-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-gate.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/auth-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAMxE,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAM1D;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,cAA6B,GAAG,OAAO,CAEnF;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,cAA6B,GACpC,OAAO,CAST"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { loadConfig } from "../../config/config.js";
|
|
2
|
+
import { isAuthConfigured } from "../../backend/auth.js";
|
|
3
|
+
import { isCliExecuteEnabled, isExecuteAuthReady } from "./agent-execute-turn.js";
|
|
4
|
+
import { classifyTurnInput } from "./agent-turn-classify.js";
|
|
5
|
+
import { resolveComposerPlaceholder as resolveComposerPlaceholderText } from "./session-hints.js";
|
|
6
|
+
export function formatAuthRequiredForAgentLines() {
|
|
7
|
+
return [
|
|
8
|
+
"! Login required before agent runs.",
|
|
9
|
+
" patze login <api> <token> [userId]",
|
|
10
|
+
" or /login · then /status --check",
|
|
11
|
+
];
|
|
12
|
+
}
|
|
13
|
+
export function resolveComposerPlaceholder(cwd) {
|
|
14
|
+
return resolveComposerPlaceholderText(cwd);
|
|
15
|
+
}
|
|
16
|
+
export function needsAuthBeforeAgent(config = loadConfig()) {
|
|
17
|
+
return isCliExecuteEnabled() && !isExecuteAuthReady(config);
|
|
18
|
+
}
|
|
19
|
+
export function shouldBlockUnauthenticatedAgentTask(prompt, config = loadConfig()) {
|
|
20
|
+
if (!needsAuthBeforeAgent(config)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
const trimmed = prompt.trim();
|
|
24
|
+
if (!trimmed) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return classifyTurnInput(trimmed, { authReady: isAuthConfigured(config) }) === "task";
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=auth-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-gate.js","sourceRoot":"","sources":["../../../src/cli/interactive/auth-gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAuB,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,0BAA0B,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAA;AAEjG,MAAM,UAAU,+BAA+B;IAC7C,OAAO;QACL,qCAAqC;QACrC,sCAAsC;QACtC,oCAAoC;KACrC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAW;IACpD,OAAO,8BAA8B,CAAC,GAAG,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAyB,UAAU,EAAE;IACxE,OAAO,mBAAmB,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,MAAc,EACd,SAAyB,UAAU,EAAE;IAErC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,iBAAiB,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAA;AACvF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex feed diff snippets — compact inline preview + expandable full hunk.
|
|
3
|
+
*/
|
|
4
|
+
import { type NormalizedPatchProposal } from "../../runtime/patch-proposal.js";
|
|
5
|
+
export type DiffFeedParts = {
|
|
6
|
+
compact: string;
|
|
7
|
+
full?: string;
|
|
8
|
+
expandable: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function splitDiffFeedText(text: string): DiffFeedParts;
|
|
11
|
+
/** Convert unified diff text to Codex-style +/- feed lines. */
|
|
12
|
+
export declare function unifiedDiffToFeedText(unified: string): string;
|
|
13
|
+
export declare function buildDiffFeedPartsFromProposal(proposal: NormalizedPatchProposal | null | undefined): DiffFeedParts | null;
|
|
14
|
+
//# sourceMappingURL=codex-diff-feed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-diff-feed.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/codex-diff-feed.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,iCAAiC,CAAA;AAExC,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAMD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAkB7D;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsB7D;AAkBD,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,uBAAuB,GAAG,IAAI,GAAG,SAAS,GACnD,aAAa,GAAG,IAAI,CAetB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex feed diff snippets — compact inline preview + expandable full hunk.
|
|
3
|
+
*/
|
|
4
|
+
import { excerptTraceText } from "../../backend/agent-trace.js";
|
|
5
|
+
import { hasPatchBody, } from "../../runtime/patch-proposal.js";
|
|
6
|
+
const MAX_COMPACT_LINES = 4;
|
|
7
|
+
const MAX_FULL_CHARS = 12_000;
|
|
8
|
+
const MAX_LINE_CHARS = 96;
|
|
9
|
+
export function splitDiffFeedText(text) {
|
|
10
|
+
const normalized = text.trim();
|
|
11
|
+
if (!normalized) {
|
|
12
|
+
return { compact: "", expandable: false };
|
|
13
|
+
}
|
|
14
|
+
const lines = normalized.split("\n");
|
|
15
|
+
if (lines.length <= MAX_COMPACT_LINES) {
|
|
16
|
+
return { compact: normalized, expandable: false };
|
|
17
|
+
}
|
|
18
|
+
const compact = [...lines.slice(0, MAX_COMPACT_LINES), "…"].join("\n");
|
|
19
|
+
const full = normalized.length > MAX_FULL_CHARS
|
|
20
|
+
? `${normalized.slice(0, MAX_FULL_CHARS)}\n…`
|
|
21
|
+
: normalized;
|
|
22
|
+
return { compact, full, expandable: true };
|
|
23
|
+
}
|
|
24
|
+
/** Convert unified diff text to Codex-style +/- feed lines. */
|
|
25
|
+
export function unifiedDiffToFeedText(unified) {
|
|
26
|
+
const out = [];
|
|
27
|
+
for (const raw of unified.split("\n")) {
|
|
28
|
+
const line = raw.trimEnd();
|
|
29
|
+
if (!line || line.startsWith("+++") || line.startsWith("---") || line.startsWith("@@")) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (line.startsWith("+")) {
|
|
33
|
+
const body = line.startsWith("+ ") ? line.slice(2) : line.slice(1);
|
|
34
|
+
out.push(`+ ${excerptTraceText(body, MAX_LINE_CHARS)}`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (line.startsWith("-")) {
|
|
38
|
+
const body = line.startsWith("- ") ? line.slice(2) : line.slice(1);
|
|
39
|
+
out.push(`- ${excerptTraceText(body, MAX_LINE_CHARS)}`);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
if (line.startsWith(" ")) {
|
|
43
|
+
out.push(` ${excerptTraceText(line.slice(1), MAX_LINE_CHARS)}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return out.join("\n");
|
|
47
|
+
}
|
|
48
|
+
function buildUnifiedDiffText(proposal) {
|
|
49
|
+
if (proposal.unifiedDiff?.trim()) {
|
|
50
|
+
return proposal.unifiedDiff.trim();
|
|
51
|
+
}
|
|
52
|
+
const chunks = [];
|
|
53
|
+
for (const file of proposal.files) {
|
|
54
|
+
if (!file.unifiedDiff?.trim()) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
chunks.push(`--- ${file.path}`);
|
|
58
|
+
chunks.push(file.unifiedDiff.trim());
|
|
59
|
+
}
|
|
60
|
+
return chunks.length ? chunks.join("\n") : null;
|
|
61
|
+
}
|
|
62
|
+
export function buildDiffFeedPartsFromProposal(proposal) {
|
|
63
|
+
if (!proposal || !hasPatchBody(proposal)) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
const unified = buildUnifiedDiffText(proposal);
|
|
67
|
+
if (!unified) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const feedText = unifiedDiffToFeedText(unified);
|
|
71
|
+
if (!feedText.trim()) {
|
|
72
|
+
return splitDiffFeedText(unified);
|
|
73
|
+
}
|
|
74
|
+
return splitDiffFeedText(feedText);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=codex-diff-feed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-diff-feed.js","sourceRoot":"","sources":["../../../src/cli/interactive/codex-diff-feed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentEvent } from "./agent-events.js";
|
|
2
|
+
/** Codex-shaped demo sequence — no network; exercises the live feed renderer. */
|
|
3
|
+
export declare function buildCodexFeedDemoEvents(): AgentEvent[];
|
|
4
|
+
export declare function playCodexFeedDemo(onAgentEvent: (event: AgentEvent) => void, options?: {
|
|
5
|
+
delayMs?: number;
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function renderCodexFeedDemoLines(): string[];
|
|
9
|
+
//# sourceMappingURL=codex-feed-demo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-feed-demo.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/codex-feed-demo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAInD,iFAAiF;AACjF,wBAAgB,wBAAwB,IAAI,UAAU,EAAE,CAiDvD;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACzC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACvD,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAMnD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
2
|
+
/** Codex-shaped demo sequence — no network; exercises the live feed renderer. */
|
|
3
|
+
export function buildCodexFeedDemoEvents() {
|
|
4
|
+
return [
|
|
5
|
+
{ type: "thinking", text: "Plan: scan README and propose a one-line doc fix" },
|
|
6
|
+
{
|
|
7
|
+
type: "tool",
|
|
8
|
+
callId: "demo-read",
|
|
9
|
+
name: "read_file",
|
|
10
|
+
params: "README.md",
|
|
11
|
+
status: "running",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
type: "tool",
|
|
15
|
+
callId: "demo-read",
|
|
16
|
+
name: "read_file",
|
|
17
|
+
params: "README.md",
|
|
18
|
+
status: "completed",
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
type: "tool",
|
|
22
|
+
callId: "demo-grep",
|
|
23
|
+
name: "grep",
|
|
24
|
+
params: '"Patze"',
|
|
25
|
+
status: "running",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
type: "tool",
|
|
29
|
+
callId: "demo-grep",
|
|
30
|
+
name: "grep",
|
|
31
|
+
params: '"Patze"',
|
|
32
|
+
status: "completed",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
type: "tool",
|
|
36
|
+
callId: "demo-edit",
|
|
37
|
+
name: "edit_file",
|
|
38
|
+
params: "README.md",
|
|
39
|
+
status: "completed",
|
|
40
|
+
diffSnippet: "- stale intro line\n+ Patze Code CLI — Codex-style feed demo",
|
|
41
|
+
},
|
|
42
|
+
{ type: "assistant_delta", text: "Updated the intro copy. Review with /status if you want local apply options." },
|
|
43
|
+
{
|
|
44
|
+
type: "result",
|
|
45
|
+
status: "finished",
|
|
46
|
+
durationMs: 4200,
|
|
47
|
+
editSummary: "1 edit · +1/-1",
|
|
48
|
+
},
|
|
49
|
+
{ type: "meta", label: "run", text: "deliverables · workspace/patch.diff" },
|
|
50
|
+
{ type: "meta", label: "run", text: "local apply options · /status" },
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
export async function playCodexFeedDemo(onAgentEvent, options = {}) {
|
|
54
|
+
const delayMs = options.delayMs ?? 90;
|
|
55
|
+
for (const event of buildCodexFeedDemoEvents()) {
|
|
56
|
+
if (options.signal?.aborted) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
onAgentEvent(event);
|
|
60
|
+
if (delayMs > 0) {
|
|
61
|
+
await sleep(delayMs);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export function renderCodexFeedDemoLines() {
|
|
66
|
+
return [
|
|
67
|
+
"Codex feed demo (offline):",
|
|
68
|
+
" … thinking → tools upsert → assistant reply → ✓ completed",
|
|
69
|
+
" Use /demo in TTY or OpenTUI with the event feed for the live renderer.",
|
|
70
|
+
];
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=codex-feed-demo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-feed-demo.js","sourceRoot":"","sources":["../../../src/cli/interactive/codex-feed-demo.ts"],"names":[],"mappings":"AAEA,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAErF,iFAAiF;AACjF,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,kDAAkD,EAAE;QAC9E;YACE,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,SAAS;SAClB;QACD;YACE,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,WAAW;SACpB;QACD;YACE,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;SAClB;QACD;YACE,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,WAAW;SACpB;QACD;YACE,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,8DAA8D;SAC5E;QACD,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,8EAA8E,EAAE;QACjH;YACE,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,gBAAgB;SAC9B;QACD,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,qCAAqC,EAAE;QAC3E,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,+BAA+B,EAAE;KACtE,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,YAAyC,EACzC,UAAsD,EAAE;IAExD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;IACrC,KAAK,MAAM,KAAK,IAAI,wBAAwB,EAAE,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;QACD,YAAY,CAAC,KAAK,CAAC,CAAA;QACnB,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,KAAK,CAAC,OAAO,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,4BAA4B;QAC5B,6DAA6D;QAC7D,0EAA0E;KAC3E,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Codex-style feed lines (terminal + OpenTUI).
|
|
3
|
+
* @see https://github.com/openai/codex
|
|
4
|
+
*/
|
|
5
|
+
import type { AgentTraceEvent } from "../../backend/agent-trace.js";
|
|
6
|
+
import { type TokenUsage } from "./agent-events.js";
|
|
7
|
+
import { type ToolEditAction } from "./trace-glyphs.js";
|
|
8
|
+
export declare function formatCodexToolFeedLine(input: {
|
|
9
|
+
name: string;
|
|
10
|
+
status: string;
|
|
11
|
+
params?: string;
|
|
12
|
+
editAction?: ToolEditAction;
|
|
13
|
+
linesAdded?: number;
|
|
14
|
+
linesRemoved?: number;
|
|
15
|
+
}): string;
|
|
16
|
+
export declare function formatCodexToolFeedLineFromTrace(event: AgentTraceEvent): string;
|
|
17
|
+
export declare function formatCodexThinkingFeedLine(text: string): string;
|
|
18
|
+
/** Collapse in-flight thinking when assistant output or result arrives (Codex-style). */
|
|
19
|
+
export declare function formatCodexThinkingDoneLine(text: string): string;
|
|
20
|
+
export declare function formatCodexTaskFeedLine(text: string): string;
|
|
21
|
+
/** Codex-style queued/running phase rows (OpenTUI + TTY feed). */
|
|
22
|
+
export declare function formatCodexPhaseFeedLine(status: string, message?: string): string | null;
|
|
23
|
+
export declare function formatCodexRunFeedLine(status: string, message?: string): string;
|
|
24
|
+
export declare function formatCodexResultFeedLine(input: {
|
|
25
|
+
status: string;
|
|
26
|
+
durationMs?: number;
|
|
27
|
+
editSummary?: string;
|
|
28
|
+
errorCode?: string;
|
|
29
|
+
usage?: TokenUsage;
|
|
30
|
+
}): string;
|
|
31
|
+
export declare function formatCodexUsageSummary(usage?: TokenUsage): string | null;
|
|
32
|
+
export declare function formatCodexMetaFeedLine(label: string, text: string): string;
|
|
33
|
+
/** Strip leading Codex status glyph for stable tool upsert keys. */
|
|
34
|
+
export declare function codexToolUpsertStem(text: string): string;
|
|
35
|
+
//# sourceMappingURL=codex-feed-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-feed-format.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/codex-feed-format.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAEnE,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEhF,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAA;AAE1B,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,GAAG,MAAM,CAgBT;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAK/E;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYhE;AAED,yFAAyF;AACzF,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,kEAAkE;AAClE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAaxF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAc/E;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,UAAU,CAAA;CACnB,GAAG,MAAM,CAsBT;AAED,wBAAgB,uBAAuB,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAUzE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAS3E;AAED,oEAAoE;AACpE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYxD"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Codex-style feed lines (terminal + OpenTUI).
|
|
3
|
+
* @see https://github.com/openai/codex
|
|
4
|
+
*/
|
|
5
|
+
import { excerptTraceText } from "../../backend/agent-trace.js";
|
|
6
|
+
import { compactText, formatDuration } from "./agent-events.js";
|
|
7
|
+
import { normalizeCookbookToolStatus } from "./cookbook-tool-feed.js";
|
|
8
|
+
import { formatThinkingUpsertLine, formatToolStatusGlyph, formatToolTraceBody, } from "./trace-glyphs.js";
|
|
9
|
+
export function formatCodexToolFeedLine(input) {
|
|
10
|
+
const normalized = normalizeCookbookToolStatus(input.status);
|
|
11
|
+
const traceStatus = normalized === "completed" ? "done" : normalized === "error" ? "error" : "running";
|
|
12
|
+
return formatCodexToolFeedLineFromTrace({
|
|
13
|
+
id: "codex-feed",
|
|
14
|
+
kind: "tool",
|
|
15
|
+
title: input.name,
|
|
16
|
+
toolName: input.name,
|
|
17
|
+
status: traceStatus,
|
|
18
|
+
detail: input.params?.trim() ?? "",
|
|
19
|
+
edit_action: input.editAction,
|
|
20
|
+
lines_added: input.linesAdded,
|
|
21
|
+
lines_removed: input.linesRemoved,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function formatCodexToolFeedLineFromTrace(event) {
|
|
25
|
+
const status = event.sdkStatus === "completed" || event.status === "done" ? "done" : event.status;
|
|
26
|
+
const glyph = formatToolStatusGlyph(status);
|
|
27
|
+
return `${glyph} ${formatToolTraceBody(event)}`;
|
|
28
|
+
}
|
|
29
|
+
export function formatCodexThinkingFeedLine(text) {
|
|
30
|
+
const compact = compactText(text);
|
|
31
|
+
if (!compact) {
|
|
32
|
+
return "… thinking";
|
|
33
|
+
}
|
|
34
|
+
return formatThinkingUpsertLine({
|
|
35
|
+
id: "think",
|
|
36
|
+
kind: "thinking",
|
|
37
|
+
title: "thinking",
|
|
38
|
+
status: "running",
|
|
39
|
+
detail: compact,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/** Collapse in-flight thinking when assistant output or result arrives (Codex-style). */
|
|
43
|
+
export function formatCodexThinkingDoneLine(text) {
|
|
44
|
+
const raw = text.replace(/^…\s+/, "").replace(/^✓\s+/, "").replace(/^✗\s+/, "").trim();
|
|
45
|
+
if (!raw || raw === "thinking") {
|
|
46
|
+
return "✓ thought";
|
|
47
|
+
}
|
|
48
|
+
const compact = excerptTraceText(raw, 96);
|
|
49
|
+
return `✓ ${compact}`;
|
|
50
|
+
}
|
|
51
|
+
export function formatCodexTaskFeedLine(text) {
|
|
52
|
+
const compact = compactText(text);
|
|
53
|
+
return compact ? `→ ${compact}` : "→ task";
|
|
54
|
+
}
|
|
55
|
+
/** Codex-style queued/running phase rows (OpenTUI + TTY feed). */
|
|
56
|
+
export function formatCodexPhaseFeedLine(status, message) {
|
|
57
|
+
const upper = status.trim().toUpperCase();
|
|
58
|
+
const detail = message?.trim();
|
|
59
|
+
switch (upper) {
|
|
60
|
+
case "QUEUED":
|
|
61
|
+
case "CREATING":
|
|
62
|
+
case "PENDING":
|
|
63
|
+
return detail ? `○ queued · ${detail}` : "○ queued · waiting for worker";
|
|
64
|
+
case "RUNNING":
|
|
65
|
+
return detail ? `● running · ${detail}` : "● running";
|
|
66
|
+
default:
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function formatCodexRunFeedLine(status, message) {
|
|
71
|
+
const upper = status.trim().toUpperCase();
|
|
72
|
+
const detail = message?.trim();
|
|
73
|
+
switch (upper) {
|
|
74
|
+
case "ERROR":
|
|
75
|
+
case "FAILED":
|
|
76
|
+
return detail ? `✗ failed · ${detail}` : "✗ failed";
|
|
77
|
+
case "CANCELLED":
|
|
78
|
+
return "✗ cancelled";
|
|
79
|
+
case "BLOCKED":
|
|
80
|
+
return detail ? `○ blocked · ${detail}` : "○ blocked";
|
|
81
|
+
default:
|
|
82
|
+
return detail ? `${status.toLowerCase()} · ${detail}` : status.toLowerCase();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export function formatCodexResultFeedLine(input) {
|
|
86
|
+
const normalized = input.status.trim().toLowerCase();
|
|
87
|
+
if (normalized === "cancelled") {
|
|
88
|
+
return "✗ cancelled";
|
|
89
|
+
}
|
|
90
|
+
if (normalized === "failed" || normalized === "error" || normalized === "blocked") {
|
|
91
|
+
const code = input.errorCode?.trim();
|
|
92
|
+
return code ? `✗ ${normalized} · ${code}` : `✗ ${normalized}`;
|
|
93
|
+
}
|
|
94
|
+
const parts = [];
|
|
95
|
+
if (input.durationMs !== undefined) {
|
|
96
|
+
parts.push(formatDuration(input.durationMs));
|
|
97
|
+
}
|
|
98
|
+
const usage = formatCodexUsageSummary(input.usage);
|
|
99
|
+
if (usage) {
|
|
100
|
+
parts.push(usage);
|
|
101
|
+
}
|
|
102
|
+
if (input.editSummary?.trim()) {
|
|
103
|
+
parts.push(input.editSummary.trim());
|
|
104
|
+
}
|
|
105
|
+
return parts.length > 0 ? `✓ completed · ${parts.join(" · ")}` : "✓ completed";
|
|
106
|
+
}
|
|
107
|
+
export function formatCodexUsageSummary(usage) {
|
|
108
|
+
if (!usage) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
const inputTokens = usage.inputTokens ?? 0;
|
|
112
|
+
const outputTokens = usage.outputTokens ?? 0;
|
|
113
|
+
if (inputTokens <= 0 && outputTokens <= 0) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
return `in=${inputTokens} out=${outputTokens}`;
|
|
117
|
+
}
|
|
118
|
+
export function formatCodexMetaFeedLine(label, text) {
|
|
119
|
+
const compact = compactText(text);
|
|
120
|
+
if (label === "run" && compact.startsWith("deliverables")) {
|
|
121
|
+
return compact;
|
|
122
|
+
}
|
|
123
|
+
if (label === "run") {
|
|
124
|
+
return compact;
|
|
125
|
+
}
|
|
126
|
+
return compact;
|
|
127
|
+
}
|
|
128
|
+
/** Strip leading Codex status glyph for stable tool upsert keys. */
|
|
129
|
+
export function codexToolUpsertStem(text) {
|
|
130
|
+
const body = text.replace(/^[…✓✗]\s+/, "").trim();
|
|
131
|
+
const withoutStats = body.replace(/\s+\(\+\d+\s+-\d+\)$/, "").trim();
|
|
132
|
+
const readMatch = withoutStats.match(/^▸\s+Read\s+·\s+(.+)$/i);
|
|
133
|
+
if (readMatch?.[1]) {
|
|
134
|
+
return `read:${readMatch[1].trim()}`;
|
|
135
|
+
}
|
|
136
|
+
const searchMatch = withoutStats.match(/^▸\s+Search\s+·\s+(.+)$/i);
|
|
137
|
+
if (searchMatch?.[1]) {
|
|
138
|
+
return `search:${searchMatch[1].trim()}`;
|
|
139
|
+
}
|
|
140
|
+
return withoutStats;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=codex-feed-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-feed-format.js","sourceRoot":"","sources":["../../../src/cli/interactive/codex-feed-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex-style live feed for plain TTY: event-native upserts + inline assistant stream.
|
|
3
|
+
* @see https://github.com/openai/codex
|
|
4
|
+
*/
|
|
5
|
+
import type { TextWriter } from "../ui/text-writer.js";
|
|
6
|
+
import type { AgentEvent } from "./agent-events.js";
|
|
7
|
+
export type CodexFeedWriter = {
|
|
8
|
+
onAgentEvent: (event: AgentEvent, assistantTurnId: string) => void;
|
|
9
|
+
reset: () => void;
|
|
10
|
+
flush: () => void;
|
|
11
|
+
};
|
|
12
|
+
/** @deprecated Use createCodexFeedWriter */
|
|
13
|
+
export type CookbookFeedWriter = CodexFeedWriter;
|
|
14
|
+
export declare function createCodexFeedWriter(base: TextWriter, stdout?: NodeJS.WriteStream): CodexFeedWriter;
|
|
15
|
+
export declare function createCookbookFeedWriter(base: TextWriter, stdout?: NodeJS.WriteStream): CodexFeedWriter;
|
|
16
|
+
export declare function shouldUseCodexFeedWriter(interactive: boolean | undefined): boolean;
|
|
17
|
+
export declare function shouldUseCookbookFeedWriter(interactive: boolean | undefined): boolean;
|
|
18
|
+
//# sourceMappingURL=codex-feed-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-feed-writer.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/codex-feed-writer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAKtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAQnD,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,KAAK,IAAI,CAAA;IAClE,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,4CAA4C;AAC5C,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAA;AA+BhD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,MAAM,CAAC,WAA4B,GAC1C,eAAe,CA6GjB;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,UAAU,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,GAC1B,eAAe,CAEjB;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAElF;AAED,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAErF"}
|