@patze/code-cli 0.10.5 → 0.11.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 +41 -0
- package/VERSION +1 -1
- package/bin/patze.mjs +0 -0
- package/dist/backend/agent-trace.d.ts +14 -0
- package/dist/backend/agent-trace.d.ts.map +1 -0
- package/dist/backend/agent-trace.js +52 -0
- package/dist/backend/agent-trace.js.map +1 -0
- package/dist/backend/execute-client.d.ts +51 -0
- package/dist/backend/execute-client.d.ts.map +1 -0
- package/dist/backend/execute-client.js +140 -0
- package/dist/backend/execute-client.js.map +1 -0
- package/dist/backend/run-record.d.ts +16 -0
- package/dist/backend/run-record.d.ts.map +1 -0
- package/dist/backend/run-record.js +43 -0
- package/dist/backend/run-record.js.map +1 -0
- package/dist/backend/run-stream-client.d.ts +36 -0
- package/dist/backend/run-stream-client.d.ts.map +1 -0
- package/dist/backend/run-stream-client.js +109 -0
- package/dist/backend/run-stream-client.js.map +1 -0
- package/dist/backend/session-client.d.ts +17 -0
- package/dist/backend/session-client.d.ts.map +1 -0
- package/dist/backend/session-client.js +54 -0
- package/dist/backend/session-client.js.map +1 -0
- package/dist/backend/sse-parse.d.ts +14 -0
- package/dist/backend/sse-parse.d.ts.map +1 -0
- package/dist/backend/sse-parse.js +63 -0
- package/dist/backend/sse-parse.js.map +1 -0
- package/dist/cli/commands/status-format.d.ts.map +1 -1
- package/dist/cli/commands/status-format.js +11 -0
- package/dist/cli/commands/status-format.js.map +1 -1
- package/dist/cli/interactive/agent-execute-turn.d.ts +22 -0
- package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -0
- package/dist/cli/interactive/agent-execute-turn.js +114 -0
- package/dist/cli/interactive/agent-execute-turn.js.map +1 -0
- package/dist/cli/interactive/agent-stream-format.d.ts +16 -0
- package/dist/cli/interactive/agent-stream-format.d.ts.map +1 -0
- package/dist/cli/interactive/agent-stream-format.js +87 -0
- package/dist/cli/interactive/agent-stream-format.js.map +1 -0
- package/dist/cli/interactive/agent-turn-classify.d.ts +8 -0
- package/dist/cli/interactive/agent-turn-classify.d.ts.map +1 -0
- package/dist/cli/interactive/agent-turn-classify.js +32 -0
- package/dist/cli/interactive/agent-turn-classify.js.map +1 -0
- package/dist/cli/interactive/agent-turn-context.d.ts +11 -0
- package/dist/cli/interactive/agent-turn-context.d.ts.map +1 -0
- package/dist/cli/interactive/agent-turn-context.js +57 -0
- package/dist/cli/interactive/agent-turn-context.js.map +1 -0
- package/dist/cli/interactive/agent-turn-format.d.ts +11 -0
- package/dist/cli/interactive/agent-turn-format.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn-format.js +78 -56
- package/dist/cli/interactive/agent-turn-format.js.map +1 -1
- package/dist/cli/interactive/agent-turn.d.ts +4 -1
- package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn.js +76 -5
- package/dist/cli/interactive/agent-turn.js.map +1 -1
- package/dist/cli/interactive/header.d.ts.map +1 -1
- package/dist/cli/interactive/header.js +4 -7
- package/dist/cli/interactive/header.js.map +1 -1
- package/dist/cli/interactive/line-editor.d.ts.map +1 -1
- package/dist/cli/interactive/line-editor.js +18 -9
- package/dist/cli/interactive/line-editor.js.map +1 -1
- package/dist/cli/interactive/session.d.ts +3 -0
- package/dist/cli/interactive/session.d.ts.map +1 -1
- package/dist/cli/interactive/session.js +8 -0
- 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 +13 -5
- package/dist/cli/interactive/shell.js.map +1 -1
- package/dist/cli/interactive/slash-dispatch.d.ts +4 -1
- package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -1
- package/dist/cli/interactive/slash-dispatch.js +22 -7
- package/dist/cli/interactive/slash-dispatch.js.map +1 -1
- package/dist/cli/interactive/transcript-format.d.ts +3 -0
- package/dist/cli/interactive/transcript-format.d.ts.map +1 -0
- package/dist/cli/interactive/transcript-format.js +29 -0
- package/dist/cli/interactive/transcript-format.js.map +1 -0
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +18 -4
- package/dist/config/config.js.map +1 -1
- package/docs/known-limitations.md +4 -3
- package/package.json +1 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export async function resolvePatzeCodeSessionUser(input) {
|
|
2
|
+
if (!input.config.api || !input.config.token) {
|
|
3
|
+
return { ok: false, message: "api or token missing", httpStatus: null };
|
|
4
|
+
}
|
|
5
|
+
const fetchImpl = input.fetchImpl ?? fetch;
|
|
6
|
+
const url = new URL("/internal/patze-code/session", input.config.api);
|
|
7
|
+
const controller = new AbortController();
|
|
8
|
+
const timer = setTimeout(() => controller.abort(), input.timeoutMs ?? 8_000);
|
|
9
|
+
try {
|
|
10
|
+
const response = await fetchImpl(url, {
|
|
11
|
+
method: "GET",
|
|
12
|
+
headers: {
|
|
13
|
+
Accept: "application/json",
|
|
14
|
+
"X-Internal-API-Key": input.config.token,
|
|
15
|
+
},
|
|
16
|
+
signal: controller.signal,
|
|
17
|
+
});
|
|
18
|
+
let body;
|
|
19
|
+
try {
|
|
20
|
+
body = await response.json();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return {
|
|
24
|
+
ok: false,
|
|
25
|
+
message: `session returned non-JSON (${response.status})`,
|
|
26
|
+
httpStatus: response.status,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
const detail = body && typeof body === "object" && typeof body.detail === "string"
|
|
31
|
+
? String(body.detail)
|
|
32
|
+
: `session failed (${response.status})`;
|
|
33
|
+
return { ok: false, message: detail, httpStatus: response.status };
|
|
34
|
+
}
|
|
35
|
+
const userId = body && typeof body === "object" && typeof body.user_id === "string"
|
|
36
|
+
? body.user_id.trim()
|
|
37
|
+
: "";
|
|
38
|
+
if (!userId) {
|
|
39
|
+
return { ok: false, message: "session response missing user_id", httpStatus: response.status };
|
|
40
|
+
}
|
|
41
|
+
const keyLabel = body && typeof body === "object" && typeof body.key_label === "string"
|
|
42
|
+
? body.key_label
|
|
43
|
+
: undefined;
|
|
44
|
+
return { ok: true, userId, keyLabel };
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const message = error instanceof Error ? error.message : "session request failed";
|
|
48
|
+
return { ok: false, message, httpStatus: null };
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
clearTimeout(timer);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=session-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-client.js","sourceRoot":"","sources":["../../src/backend/session-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type SseEvent = {
|
|
2
|
+
event: string;
|
|
3
|
+
data: string;
|
|
4
|
+
};
|
|
5
|
+
export type SseHandlers = {
|
|
6
|
+
onEvent: (event: SseEvent) => void;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Incrementally parse text/event-stream frames from a fetch Response body.
|
|
10
|
+
*/
|
|
11
|
+
export declare function consumeSseResponse(response: Response, handlers: SseHandlers, options?: {
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
}): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=sse-parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-parse.d.ts","sourceRoot":"","sources":["../../src/backend/sse-parse.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;CACnC,CAAA;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,WAAW,EACrB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Df"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incrementally parse text/event-stream frames from a fetch Response body.
|
|
3
|
+
*/
|
|
4
|
+
export async function consumeSseResponse(response, handlers, options = {}) {
|
|
5
|
+
if (!response.body) {
|
|
6
|
+
throw new Error("SSE response has no body");
|
|
7
|
+
}
|
|
8
|
+
const reader = response.body.getReader();
|
|
9
|
+
const decoder = new TextDecoder();
|
|
10
|
+
let buffer = "";
|
|
11
|
+
let eventName = "message";
|
|
12
|
+
let dataLines = [];
|
|
13
|
+
const flush = () => {
|
|
14
|
+
if (dataLines.length === 0) {
|
|
15
|
+
eventName = "message";
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
handlers.onEvent({
|
|
19
|
+
event: eventName,
|
|
20
|
+
data: dataLines.join("\n"),
|
|
21
|
+
});
|
|
22
|
+
eventName = "message";
|
|
23
|
+
dataLines = [];
|
|
24
|
+
};
|
|
25
|
+
try {
|
|
26
|
+
while (true) {
|
|
27
|
+
if (options.signal?.aborted) {
|
|
28
|
+
throw new DOMException("Aborted", "AbortError");
|
|
29
|
+
}
|
|
30
|
+
const { done, value } = await reader.read();
|
|
31
|
+
if (done) {
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
buffer += decoder.decode(value, { stream: true });
|
|
35
|
+
let newlineIndex = buffer.indexOf("\n");
|
|
36
|
+
while (newlineIndex >= 0) {
|
|
37
|
+
let line = buffer.slice(0, newlineIndex);
|
|
38
|
+
buffer = buffer.slice(newlineIndex + 1);
|
|
39
|
+
if (line.endsWith("\r")) {
|
|
40
|
+
line = line.slice(0, -1);
|
|
41
|
+
}
|
|
42
|
+
if (line === "") {
|
|
43
|
+
flush();
|
|
44
|
+
}
|
|
45
|
+
else if (line.startsWith(":")) {
|
|
46
|
+
// comment
|
|
47
|
+
}
|
|
48
|
+
else if (line.startsWith("event:")) {
|
|
49
|
+
eventName = line.slice(6).trim() || "message";
|
|
50
|
+
}
|
|
51
|
+
else if (line.startsWith("data:")) {
|
|
52
|
+
dataLines.push(line.slice(5).trimStart());
|
|
53
|
+
}
|
|
54
|
+
newlineIndex = buffer.indexOf("\n");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
flush();
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
reader.releaseLock();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=sse-parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-parse.js","sourceRoot":"","sources":["../../src/backend/sse-parse.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAkB,EAClB,QAAqB,EACrB,UAAoC,EAAE;IAEtC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,SAAS,GAAG,SAAS,CAAA;IACzB,IAAI,SAAS,GAAa,EAAE,CAAA;IAE5B,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,SAAS,GAAG,SAAS,CAAA;YACrB,OAAM;QACR,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC;YACf,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QACF,SAAS,GAAG,SAAS,CAAA;QACrB,SAAS,GAAG,EAAE,CAAA;IAChB,CAAC,CAAA;IAED,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC5B,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YACjD,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAK;YACP,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAEjD,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO,YAAY,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;gBACxC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;gBACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC1B,CAAC;gBAED,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;oBAChB,KAAK,EAAE,CAAA;gBACT,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,UAAU;gBACZ,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;gBAC/C,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;gBAC3C,CAAC;gBAED,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAA;IACT,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAA;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-format.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status-format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status-format.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status-format.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAMpF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,cAAgC,GAAG,cAAc,CAiC9G;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAAC,cAAc,CAAC,CAgCzB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PatzeBackendClient } from "../../backend/client.js";
|
|
2
|
+
import { resolvePatzeCodeSessionUser } from "../../backend/session-client.js";
|
|
2
3
|
import { isAuthConfigured } from "../../backend/auth.js";
|
|
3
4
|
import { loadConfig, maskSecret } from "../../config/config.js";
|
|
4
5
|
import { resolveApproval } from "../../runtime/approvals.js";
|
|
@@ -51,6 +52,16 @@ export async function buildStatusSnapshot(cwd, options = {}) {
|
|
|
51
52
|
snapshot.lines.push(`${"check".padEnd(14)} ${probe.ok ? "api reachable" : `failed (${probe.message})`}`);
|
|
52
53
|
if (!probe.ok) {
|
|
53
54
|
snapshot.exitCode = 1;
|
|
55
|
+
return snapshot;
|
|
56
|
+
}
|
|
57
|
+
if (!config.userId) {
|
|
58
|
+
const session = await resolvePatzeCodeSessionUser({ config });
|
|
59
|
+
if (session.ok) {
|
|
60
|
+
snapshot.lines.push(`${"user".padEnd(14)} ${session.userId} (from session)`);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
snapshot.lines.push(`${"session".padEnd(14)} ${session.message}`);
|
|
64
|
+
}
|
|
54
65
|
}
|
|
55
66
|
return snapshot;
|
|
56
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-format.js","sourceRoot":"","sources":["../../../src/cli/commands/status-format.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"status-format.js","sourceRoot":"","sources":["../../../src/cli/commands/status-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FetchLike } from "../../backend/preview-client.js";
|
|
2
|
+
import type { PatzeCodeRunRecord } from "../../backend/run-record.js";
|
|
3
|
+
import type { ResolvedConfig } from "../../config/config.js";
|
|
4
|
+
export type ExecuteTurnOptions = {
|
|
5
|
+
cwd: string;
|
|
6
|
+
config: ResolvedConfig;
|
|
7
|
+
objective: string;
|
|
8
|
+
previewArtifactDigest: string;
|
|
9
|
+
fetchImpl?: FetchLike;
|
|
10
|
+
onTranscriptLine?: (line: string) => void;
|
|
11
|
+
};
|
|
12
|
+
export type ExecuteTurnResult = {
|
|
13
|
+
ok: boolean;
|
|
14
|
+
streamed: boolean;
|
|
15
|
+
run: PatzeCodeRunRecord | null;
|
|
16
|
+
exitCode: number;
|
|
17
|
+
lines: string[];
|
|
18
|
+
};
|
|
19
|
+
export declare function isCliExecuteEnabled(): boolean;
|
|
20
|
+
export declare function isExecuteAuthReady(config: ResolvedConfig): boolean;
|
|
21
|
+
export declare function runExecuteTurn(options: ExecuteTurnOptions): Promise<ExecuteTurnResult>;
|
|
22
|
+
//# sourceMappingURL=agent-execute-turn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-execute-turn.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-execute-turn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAGhE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAI5D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,cAAc,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,OAAO,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAM7C;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAElE;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0G5F"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { PatzeBackendClient } from "../../backend/client.js";
|
|
2
|
+
import { postUserTaskExecute } from "../../backend/execute-client.js";
|
|
3
|
+
import { buildPreviewPayload } from "../../backend/preview-payload.js";
|
|
4
|
+
import { streamPatzeCodeRun } from "../../backend/run-stream-client.js";
|
|
5
|
+
import { AgentStreamTranscript } from "./agent-stream-format.js";
|
|
6
|
+
import { formatAgentReply } from "./transcript-format.js";
|
|
7
|
+
export function isCliExecuteEnabled() {
|
|
8
|
+
const raw = process.env.PATZE_CODE_CLI_EXECUTE;
|
|
9
|
+
if (raw === "0" || raw === "false" || raw === "off") {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
export function isExecuteAuthReady(config) {
|
|
15
|
+
return Boolean(config.api && config.token && config.userId);
|
|
16
|
+
}
|
|
17
|
+
export async function runExecuteTurn(options) {
|
|
18
|
+
const sink = {
|
|
19
|
+
lines: [],
|
|
20
|
+
emit(lines) {
|
|
21
|
+
for (const line of lines) {
|
|
22
|
+
this.lines.push(line);
|
|
23
|
+
options.onTranscriptLine?.(line);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
const client = new PatzeBackendClient(options.config);
|
|
28
|
+
const payload = buildPreviewPayload({
|
|
29
|
+
objective: options.objective,
|
|
30
|
+
cwd: options.cwd,
|
|
31
|
+
config: options.config,
|
|
32
|
+
});
|
|
33
|
+
const transcript = new AgentStreamTranscript(sink);
|
|
34
|
+
transcript.emitRunPhase("queued");
|
|
35
|
+
const execute = await postUserTaskExecute({
|
|
36
|
+
apiBase: client.baseUrl,
|
|
37
|
+
headers: client.buildHeaders(),
|
|
38
|
+
payload,
|
|
39
|
+
previewArtifactDigest: options.previewArtifactDigest,
|
|
40
|
+
fetchImpl: options.fetchImpl,
|
|
41
|
+
});
|
|
42
|
+
if (!execute.ok) {
|
|
43
|
+
const message = execute.kind === "auth"
|
|
44
|
+
? `${execute.message} — ensure user id is set (/login or /status --check).`
|
|
45
|
+
: execute.message;
|
|
46
|
+
sink.emit(formatAgentReply(`Execute failed: ${message}`));
|
|
47
|
+
return { ok: false, streamed: sink.lines.length > 0, run: null, exitCode: 1, lines: sink.lines };
|
|
48
|
+
}
|
|
49
|
+
if (execute.kind === "completed") {
|
|
50
|
+
transcript.emitRunPhase(execute.response.phase ?? execute.response.status);
|
|
51
|
+
const run = {
|
|
52
|
+
run_id: execute.response.run_id,
|
|
53
|
+
status: execute.response.status,
|
|
54
|
+
phase: execute.response.phase ?? execute.response.status,
|
|
55
|
+
error_code: execute.response.error_code,
|
|
56
|
+
agent_output_preview: execute.response.agent_output_preview ?? "",
|
|
57
|
+
outcome_summary: execute.response.outcome_summary ?? "",
|
|
58
|
+
agent_model: execute.response.agent_model ?? "",
|
|
59
|
+
finding_codes: execute.response.finding_codes,
|
|
60
|
+
deliverable_paths: execute.response.deliverable_paths ?? [],
|
|
61
|
+
agent_trace: execute.response.agent_trace ?? [],
|
|
62
|
+
};
|
|
63
|
+
for (const item of run.agent_trace) {
|
|
64
|
+
transcript.emitTraceItem(item);
|
|
65
|
+
}
|
|
66
|
+
transcript.emitFinalRun(run);
|
|
67
|
+
const ok = run.phase === "completed" || run.status === "completed";
|
|
68
|
+
return {
|
|
69
|
+
ok,
|
|
70
|
+
streamed: sink.lines.length > 0,
|
|
71
|
+
run,
|
|
72
|
+
exitCode: ok ? 0 : 1,
|
|
73
|
+
lines: sink.lines,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const runId = execute.response.run_id;
|
|
77
|
+
transcript.emitRunPhase(execute.response.phase, execute.response.status);
|
|
78
|
+
const holder = { run: null };
|
|
79
|
+
await new Promise((resolvePromise) => {
|
|
80
|
+
void streamPatzeCodeRun({
|
|
81
|
+
apiBase: client.baseUrl,
|
|
82
|
+
headers: client.buildHeaders(),
|
|
83
|
+
runId,
|
|
84
|
+
fetchImpl: options.fetchImpl,
|
|
85
|
+
handlers: {
|
|
86
|
+
onStatus: (event) => {
|
|
87
|
+
transcript.emitRunPhase(event.phase, event.status);
|
|
88
|
+
},
|
|
89
|
+
onTrace: (event) => {
|
|
90
|
+
transcript.emitTraceItem(event.item);
|
|
91
|
+
},
|
|
92
|
+
onComplete: (run) => {
|
|
93
|
+
holder.run = run;
|
|
94
|
+
transcript.emitFinalRun(run);
|
|
95
|
+
resolvePromise();
|
|
96
|
+
},
|
|
97
|
+
onError: () => {
|
|
98
|
+
resolvePromise();
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
const finalRun = holder.run;
|
|
104
|
+
const ok = finalRun !== null &&
|
|
105
|
+
(finalRun.phase === "completed" || finalRun.status === "completed");
|
|
106
|
+
return {
|
|
107
|
+
ok,
|
|
108
|
+
streamed: sink.lines.length > 0,
|
|
109
|
+
run: finalRun,
|
|
110
|
+
exitCode: ok ? 0 : 1,
|
|
111
|
+
lines: sink.lines,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=agent-execute-turn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-execute-turn.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-execute-turn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PatzeCodeRunRecord } from "../../backend/run-record.js";
|
|
2
|
+
import { formatTranscriptEntry } from "./transcript-format.js";
|
|
3
|
+
export type StreamTranscriptSink = {
|
|
4
|
+
emit: (lines: string[]) => void;
|
|
5
|
+
};
|
|
6
|
+
export declare class AgentStreamTranscript {
|
|
7
|
+
private readonly sink;
|
|
8
|
+
private readonly seenTraceIds;
|
|
9
|
+
private lastPhase;
|
|
10
|
+
constructor(sink: StreamTranscriptSink);
|
|
11
|
+
emitRunPhase(phase: string, status?: string): void;
|
|
12
|
+
emitTraceItem(item: unknown): void;
|
|
13
|
+
emitFinalRun(run: PatzeCodeRunRecord | null): void;
|
|
14
|
+
}
|
|
15
|
+
export { formatTranscriptEntry };
|
|
16
|
+
//# sourceMappingURL=agent-stream-format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-stream-format.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-stream-format.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,OAAO,EAAoB,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEhF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CAChC,CAAA;AAED,qBAAa,qBAAqB;IAIpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,SAAS,CAAK;gBAEO,IAAI,EAAE,oBAAoB;IAEvD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IASlD,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAkClC,YAAY,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI;CA2BnD;AAwBD,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { excerptTraceText, isIgnorableStatusTrace, parseAgentTraceItem, } from "../../backend/agent-trace.js";
|
|
2
|
+
import { isTerminalRunPhase, pickRunReplyText } from "../../backend/run-record.js";
|
|
3
|
+
import { formatAgentReply, formatTranscriptEntry } from "./transcript-format.js";
|
|
4
|
+
export class AgentStreamTranscript {
|
|
5
|
+
sink;
|
|
6
|
+
seenTraceIds = new Set();
|
|
7
|
+
lastPhase = "";
|
|
8
|
+
constructor(sink) {
|
|
9
|
+
this.sink = sink;
|
|
10
|
+
}
|
|
11
|
+
emitRunPhase(phase, status) {
|
|
12
|
+
const label = phase || status || "running";
|
|
13
|
+
if (label === this.lastPhase) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
this.lastPhase = label;
|
|
17
|
+
this.sink.emit(formatRoleLine("run", `${label}${status && status !== label ? ` · ${status}` : ""}`));
|
|
18
|
+
}
|
|
19
|
+
emitTraceItem(item) {
|
|
20
|
+
const event = parseAgentTraceItem(item);
|
|
21
|
+
if (!event) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (event.kind === "status" && isIgnorableStatusTrace(event)) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const shouldEmit = event.kind === "tool" ||
|
|
28
|
+
event.kind === "task" ||
|
|
29
|
+
(event.kind === "thinking" && !this.seenTraceIds.has(event.id)) ||
|
|
30
|
+
(event.kind === "text" && event.status === "done") ||
|
|
31
|
+
(event.kind === "status" && !isIgnorableStatusTrace(event));
|
|
32
|
+
if (!shouldEmit) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.seenTraceIds.add(event.id);
|
|
36
|
+
const role = event.kind === "tool" ? "tool" : event.kind === "status" || event.kind === "task" ? "run" : "agent";
|
|
37
|
+
const text = formatTraceLine(event);
|
|
38
|
+
if (!text) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (role === "agent") {
|
|
42
|
+
this.sink.emit(formatAgentReply(text));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.sink.emit(formatRoleLine(role, text));
|
|
46
|
+
}
|
|
47
|
+
emitFinalRun(run) {
|
|
48
|
+
if (!run) {
|
|
49
|
+
this.sink.emit(formatAgentReply("Run finished but no record was returned."));
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (isTerminalRunPhase(run.phase) && run.phase !== "completed") {
|
|
53
|
+
this.sink.emit(formatAgentReply(pickRunReplyText(run)));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const reply = pickRunReplyText(run);
|
|
57
|
+
if (reply) {
|
|
58
|
+
this.sink.emit(formatAgentReply(reply));
|
|
59
|
+
}
|
|
60
|
+
if (run.deliverable_paths.length > 0) {
|
|
61
|
+
this.sink.emit(formatRoleLine("run", `deliverables · ${run.deliverable_paths.slice(0, 3).join(", ")}${run.deliverable_paths.length > 3 ? "…" : ""}`));
|
|
62
|
+
}
|
|
63
|
+
this.sink.emit(formatRoleLine("run", "no auto-apply · review with /diff when a patch is ready"));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function formatRoleLine(role, text) {
|
|
67
|
+
const label = role.padEnd(7);
|
|
68
|
+
return [`${label}${text}`];
|
|
69
|
+
}
|
|
70
|
+
function formatTraceLine(event) {
|
|
71
|
+
const detail = event.detail?.trim() ?? "";
|
|
72
|
+
if (event.kind === "tool") {
|
|
73
|
+
return detail ? `${event.title} · ${excerptTraceText(detail, 120)}` : event.title;
|
|
74
|
+
}
|
|
75
|
+
if (event.kind === "thinking") {
|
|
76
|
+
return detail ? excerptTraceText(detail, 160) : event.title;
|
|
77
|
+
}
|
|
78
|
+
if (event.kind === "text") {
|
|
79
|
+
return detail ? excerptTraceText(detail, 800) : event.title;
|
|
80
|
+
}
|
|
81
|
+
if (event.kind === "task") {
|
|
82
|
+
return detail ? `${event.title} · ${excerptTraceText(detail, 120)}` : event.title;
|
|
83
|
+
}
|
|
84
|
+
return detail ? `${event.title} · ${excerptTraceText(detail, 120)}` : event.title;
|
|
85
|
+
}
|
|
86
|
+
export { formatTranscriptEntry };
|
|
87
|
+
//# sourceMappingURL=agent-stream-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-stream-format.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-stream-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type TurnKind = "conversation" | "task";
|
|
2
|
+
/**
|
|
3
|
+
* Decide whether free-text input is a casual/meta message or a coding task.
|
|
4
|
+
* Conversational turns skip server preview and return a short reply instead.
|
|
5
|
+
*/
|
|
6
|
+
export declare function classifyTurnInput(text: string): TurnKind;
|
|
7
|
+
export declare function inputLooksThai(text: string): boolean;
|
|
8
|
+
//# sourceMappingURL=agent-turn-classify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-turn-classify.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-classify.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,MAAM,CAAA;AAE9C;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAqCxD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decide whether free-text input is a casual/meta message or a coding task.
|
|
3
|
+
* Conversational turns skip server preview and return a short reply instead.
|
|
4
|
+
*/
|
|
5
|
+
export function classifyTurnInput(text) {
|
|
6
|
+
const trimmed = text.trim();
|
|
7
|
+
if (!trimmed) {
|
|
8
|
+
return "conversation";
|
|
9
|
+
}
|
|
10
|
+
const hasCodeIntent = /\b(file|files|code|function|class|module|bug|error|test|tests|api|refactor|implement|fix|add|create|build|write|remove|migrate|debug|patch|diff|lint|deploy|readme|config)\b/i.test(trimmed) || /[{}();=`]/.test(trimmed);
|
|
11
|
+
const taskLead = /^(fix|add|refactor|implement|update|create|build|write|remove|migrate|test|debug|improve|review|rename|extract|optimize)\b/i.test(trimmed);
|
|
12
|
+
if (taskLead || (hasCodeIntent && trimmed.length > 24)) {
|
|
13
|
+
return "task";
|
|
14
|
+
}
|
|
15
|
+
const conversational = /^(hi|hello|hey|thanks|thank you|ok|okay|yes|no|help)\b/i.test(trimmed) ||
|
|
16
|
+
/^(do you|can you|are you|what is|what's|how do)/i.test(trimmed) ||
|
|
17
|
+
/[\??]/.test(trimmed) ||
|
|
18
|
+
/(ไหม|มั้ย|หรือเปล่า|ได้ไหม)/.test(trimmed) ||
|
|
19
|
+
/(เห็น|ได้ยิน|ข้อความ|สวัสดี|ช่วย.*ไหม|พิมพ์)/.test(trimmed) ||
|
|
20
|
+
/(do you see|can you see|hear me)/i.test(trimmed);
|
|
21
|
+
if (conversational && !hasCodeIntent) {
|
|
22
|
+
return "conversation";
|
|
23
|
+
}
|
|
24
|
+
if (trimmed.length <= 48 && !hasCodeIntent && !taskLead) {
|
|
25
|
+
return "conversation";
|
|
26
|
+
}
|
|
27
|
+
return "task";
|
|
28
|
+
}
|
|
29
|
+
export function inputLooksThai(text) {
|
|
30
|
+
return /[\u0E00-\u0E7F]/.test(text);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=agent-turn-classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-turn-classify.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-classify.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,aAAa,GACjB,+KAA+K,CAAC,IAAI,CAClL,OAAO,CACR,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEhC,MAAM,QAAQ,GACZ,6HAA6H,CAAC,IAAI,CAChI,OAAO,CACR,CAAA;IAEH,IAAI,QAAQ,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC;QACvD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,cAAc,GAClB,yDAAyD,CAAC,IAAI,CAAC,OAAO,CAAC;QACvE,kDAAkD,CAAC,IAAI,CAAC,OAAO,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACrB,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3C,8CAA8C,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5D,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEnD,IAAI,cAAc,IAAI,CAAC,aAAa,EAAE,CAAC;QACrC,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxD,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACrC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { WorkspaceInspectResult } from "../../runtime/inspect.js";
|
|
2
|
+
export type ContextTurnInput = {
|
|
3
|
+
text: string;
|
|
4
|
+
cwd: string;
|
|
5
|
+
workspaceRoot: string;
|
|
6
|
+
inspect: WorkspaceInspectResult;
|
|
7
|
+
authReady: boolean;
|
|
8
|
+
};
|
|
9
|
+
/** Local, read-only answers from workspace inspect — no canned deflection. */
|
|
10
|
+
export declare function buildContextualReply(input: ContextTurnInput): string | null;
|
|
11
|
+
//# sourceMappingURL=agent-turn-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-turn-context.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAGtE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,sBAAsB,CAAA;IAC/B,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAyBD,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CA0C3E"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { inputLooksThai } from "./agent-turn-classify.js";
|
|
2
|
+
function thai(text) {
|
|
3
|
+
return inputLooksThai(text);
|
|
4
|
+
}
|
|
5
|
+
function asksWorkspaceLocation(text) {
|
|
6
|
+
return (/(folder|directory|cwd|pwd|working dir|current dir|where am i|which folder|what folder|current workspace)/i.test(text) ||
|
|
7
|
+
/(โฟลเดอ|ไดเรก|อยู่ใน|ที่ไหน|working directory)/i.test(text));
|
|
8
|
+
}
|
|
9
|
+
function asksWorkspaceContents(text) {
|
|
10
|
+
const hasFileCue = /(ไฟล์|files?|empty|blank|ว่าง)/i.test(text);
|
|
11
|
+
const hasCountCue = /(have|any|count|scan|inspect|มี|กี่|ว่าง|อะไร|บ้าง)/i.test(text);
|
|
12
|
+
return hasFileCue && hasCountCue;
|
|
13
|
+
}
|
|
14
|
+
function asksAuthStatus(text) {
|
|
15
|
+
return /(auth|login|logged in|เชื่อม|ล็อกอิน|token)/i.test(text);
|
|
16
|
+
}
|
|
17
|
+
/** Local, read-only answers from workspace inspect — no canned deflection. */
|
|
18
|
+
export function buildContextualReply(input) {
|
|
19
|
+
const { text, cwd, workspaceRoot, inspect, authReady } = input;
|
|
20
|
+
const isThai = thai(text);
|
|
21
|
+
if (asksWorkspaceContents(text)) {
|
|
22
|
+
const summary = isThai
|
|
23
|
+
? `workspace นี้มี ${inspect.fileCount} ไฟล์ · ${inspect.directoryCount} โฟลเดอร์`
|
|
24
|
+
: `This workspace has ${inspect.fileCount} files and ${inspect.directoryCount} directories.`;
|
|
25
|
+
if (inspect.fileCount === 0 && inspect.directoryCount === 0) {
|
|
26
|
+
return isThai
|
|
27
|
+
? `${summary} — โฟลเดอร์ว่างครับ พิมพ์งาน coding หรือ /inspect ได้`
|
|
28
|
+
: `${summary} — folder is empty. Describe a coding task or run /inspect.`;
|
|
29
|
+
}
|
|
30
|
+
if (inspect.samplePaths.length > 0) {
|
|
31
|
+
const sample = inspect.samplePaths.slice(0, 3).join(", ");
|
|
32
|
+
return `${summary}\n${isThai ? "ตัวอย่าง" : "sample"}: ${sample}`;
|
|
33
|
+
}
|
|
34
|
+
return summary;
|
|
35
|
+
}
|
|
36
|
+
if (asksWorkspaceLocation(text)) {
|
|
37
|
+
if (cwd === workspaceRoot) {
|
|
38
|
+
return isThai
|
|
39
|
+
? `ตอนนี้อยู่ที่ ${workspaceRoot} (workspace root · cwd เดียวกัน)`
|
|
40
|
+
: `You are in ${workspaceRoot} (workspace root and cwd).`;
|
|
41
|
+
}
|
|
42
|
+
return isThai
|
|
43
|
+
? `cwd: ${cwd}\nworkspace root: ${workspaceRoot}`
|
|
44
|
+
: `cwd: ${cwd}\nworkspace root: ${workspaceRoot}`;
|
|
45
|
+
}
|
|
46
|
+
if (asksAuthStatus(text)) {
|
|
47
|
+
return isThai
|
|
48
|
+
? authReady
|
|
49
|
+
? "auth พร้อมแล้ว — preview จาก server ใช้ได้ (ยัง read-only · ไม่ auto-apply)"
|
|
50
|
+
: "auth ยังไม่ครบ — ใช้ /login หรือ PATZE_CODE_* แล้ว /status --check"
|
|
51
|
+
: authReady
|
|
52
|
+
? "Auth is ready — server preview works (read-only · no auto-apply)."
|
|
53
|
+
: "Auth incomplete — run /login or set PATZE_CODE_* then /status --check.";
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=agent-turn-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-turn-context.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAUzD,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,CACL,2GAA2G,CAAC,IAAI,CAC9G,IAAI,CACL;QACD,iDAAiD,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7D,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,UAAU,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/D,MAAM,WAAW,GAAG,sDAAsD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrF,OAAO,UAAU,IAAI,WAAW,CAAA;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAClE,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;IAEzB,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,mBAAmB,OAAO,CAAC,SAAS,WAAW,OAAO,CAAC,cAAc,WAAW;YAClF,CAAC,CAAC,sBAAsB,OAAO,CAAC,SAAS,cAAc,OAAO,CAAC,cAAc,eAAe,CAAA;QAC9F,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,OAAO,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,MAAM;gBACX,CAAC,CAAC,GAAG,OAAO,uDAAuD;gBACnE,CAAC,CAAC,GAAG,OAAO,6DAA6D,CAAA;QAC7E,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzD,OAAO,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAA;QACnE,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC1B,OAAO,MAAM;gBACX,CAAC,CAAC,iBAAiB,aAAa,kCAAkC;gBAClE,CAAC,CAAC,cAAc,aAAa,4BAA4B,CAAA;QAC7D,CAAC;QACD,OAAO,MAAM;YACX,CAAC,CAAC,QAAQ,GAAG,qBAAqB,aAAa,EAAE;YACjD,CAAC,CAAC,QAAQ,GAAG,qBAAqB,aAAa,EAAE,CAAA;IACrD,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM;YACX,CAAC,CAAC,SAAS;gBACT,CAAC,CAAC,6EAA6E;gBAC/E,CAAC,CAAC,oEAAoE;YACxE,CAAC,CAAC,SAAS;gBACT,CAAC,CAAC,mEAAmE;gBACrE,CAAC,CAAC,wEAAwE,CAAA;IAChF,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -11,5 +11,16 @@ export type AgentTurnModel = {
|
|
|
11
11
|
authReady: boolean;
|
|
12
12
|
mutationsEnabled: false;
|
|
13
13
|
};
|
|
14
|
+
export type ConversationTurnContext = {
|
|
15
|
+
authReady: boolean;
|
|
16
|
+
permissionMode: string;
|
|
17
|
+
permissionLabel: string;
|
|
18
|
+
};
|
|
19
|
+
/** Short reply for meta/chat prompts — uses local context when available. */
|
|
20
|
+
export declare function formatConversationTurnLines(objective: string, reply: string): string[];
|
|
21
|
+
export declare function resolveConversationReply(objective: string, context: ConversationTurnContext, contextualReply: string | null): string;
|
|
22
|
+
/** Compact task turn — agent voice, one screen. Details live in /context. */
|
|
14
23
|
export declare function formatAgentTurnLines(model: AgentTurnModel): string[];
|
|
24
|
+
/** Verbose formatter kept for /context and tests that need full preview fields. */
|
|
25
|
+
export declare function formatAgentTurnVerboseLines(model: AgentTurnModel): string[];
|
|
15
26
|
//# sourceMappingURL=agent-turn-format.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-turn-format.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-format.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"agent-turn-format.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-format.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAI7D,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC9B,aAAa,EAAE,mBAAmB,CAAA;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE,KAAK,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,6EAA6E;AAC7E,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,CAEV;AA6BD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,EAChC,eAAe,EAAE,MAAM,GAAG,IAAI,GAC7B,MAAM,CAKR;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CA0CpE;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CAY3E"}
|