@patze/code-cli 0.17.2 → 0.20.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 +46 -0
- package/VERSION +1 -1
- package/dist/backend/preview-payload.d.ts +2 -0
- package/dist/backend/preview-payload.d.ts.map +1 -1
- package/dist/backend/preview-payload.js +27 -1
- package/dist/backend/preview-payload.js.map +1 -1
- package/dist/cli/commands/agent.d.ts.map +1 -1
- package/dist/cli/commands/agent.js +34 -11
- package/dist/cli/commands/agent.js.map +1 -1
- package/dist/cli/interactive/agent-events.d.ts +38 -0
- package/dist/cli/interactive/agent-events.d.ts.map +1 -0
- package/dist/cli/interactive/agent-events.js +65 -0
- package/dist/cli/interactive/agent-events.js.map +1 -0
- package/dist/cli/interactive/agent-execute-turn.d.ts +2 -0
- package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -1
- package/dist/cli/interactive/agent-execute-turn.js +2 -1
- package/dist/cli/interactive/agent-execute-turn.js.map +1 -1
- package/dist/cli/interactive/agent-stream-format.d.ts +5 -1
- package/dist/cli/interactive/agent-stream-format.d.ts.map +1 -1
- package/dist/cli/interactive/agent-stream-format.js +30 -1
- package/dist/cli/interactive/agent-stream-format.js.map +1 -1
- package/dist/cli/interactive/agent-turn-classify.d.ts +7 -3
- package/dist/cli/interactive/agent-turn-classify.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn-classify.js +53 -14
- package/dist/cli/interactive/agent-turn-classify.js.map +1 -1
- package/dist/cli/interactive/agent-turn-context.d.ts +2 -0
- package/dist/cli/interactive/agent-turn-context.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn-context.js +18 -4
- package/dist/cli/interactive/agent-turn-context.js.map +1 -1
- package/dist/cli/interactive/agent-turn-format.d.ts +2 -0
- package/dist/cli/interactive/agent-turn-format.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn-format.js +38 -7
- package/dist/cli/interactive/agent-turn-format.js.map +1 -1
- package/dist/cli/interactive/agent-turn.d.ts +2 -0
- package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn.js +45 -47
- package/dist/cli/interactive/agent-turn.js.map +1 -1
- package/dist/cli/interactive/ensure-execute-auth.d.ts +10 -0
- package/dist/cli/interactive/ensure-execute-auth.d.ts.map +1 -0
- package/dist/cli/interactive/ensure-execute-auth.js +28 -0
- package/dist/cli/interactive/ensure-execute-auth.js.map +1 -0
- package/dist/cli/interactive/header.js +1 -1
- package/dist/cli/interactive/header.js.map +1 -1
- package/dist/cli/interactive/plain-agent-render.d.ts +16 -0
- package/dist/cli/interactive/plain-agent-render.d.ts.map +1 -0
- package/dist/cli/interactive/plain-agent-render.js +67 -0
- package/dist/cli/interactive/plain-agent-render.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 +49 -15
- package/dist/cli/interactive/session-controller.js.map +1 -1
- package/dist/cli/interactive/shell.js +2 -2
- package/dist/cli/interactive/shell.js.map +1 -1
- package/dist/cli/interactive/tool-arg-summary.d.ts +7 -0
- package/dist/cli/interactive/tool-arg-summary.d.ts.map +1 -0
- package/dist/cli/interactive/tool-arg-summary.js +86 -0
- package/dist/cli/interactive/tool-arg-summary.js.map +1 -0
- package/dist/cli/interactive/transcript-line-parse.d.ts +8 -0
- package/dist/cli/interactive/transcript-line-parse.d.ts.map +1 -0
- package/dist/cli/interactive/transcript-line-parse.js +39 -0
- package/dist/cli/interactive/transcript-line-parse.js.map +1 -0
- package/dist/cli/interactive/tty-live-feed.d.ts +12 -0
- package/dist/cli/interactive/tty-live-feed.d.ts.map +1 -0
- package/dist/cli/interactive/tty-live-feed.js +64 -0
- package/dist/cli/interactive/tty-live-feed.js.map +1 -0
- package/docs/known-limitations.md +1 -1
- package/opentui/src/App.tsx +5 -5
- package/package.json +1 -1
|
@@ -1,27 +1,66 @@
|
|
|
1
|
+
import { isWorkspaceContextQuestion } from "./agent-turn-context.js";
|
|
2
|
+
const EN_CODE_INTENT = /\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|html|demo|page|app|script|component)\b/i;
|
|
3
|
+
const EN_TASK_LEAD = /^(fix|add|refactor|implement|update|create|build|write|remove|migrate|test|debug|improve|review|rename|extract|optimize|generate|make)\b/i;
|
|
4
|
+
const THAI_TASK_VERB = /(สร้าง|แก้ไข|แก้|เขียน|ลบ|อ่าน|เพิ่ม|ทำ|แปล|รัน|ทดสอบ|ดีบั๊ก|รีแฟคเตอร์|ย้าย|implement|generate)/i;
|
|
5
|
+
const THAI_CODE_NOUN = /(ไฟล์|โค้ด|ฟังก์ชัน|คลาส|โมดูล|แอป|หน้าเว็บ|html|css|javascript|typescript|api|เทส|บั๊ก|สคริปต์|demo)/i;
|
|
6
|
+
const PURE_META = /^(hi|hello|hey|thanks|thank you|ok|okay|yes|no|help|\/?help|สวัสดี|ขอบคุณ)/i;
|
|
7
|
+
const SEE_HEAR_META = /^(do you see|can you see|hear me|เห็นข้อความ|ได้ยิน|เห็น.*(ข้อความ|message))/i;
|
|
8
|
+
const CAPABILITY_META = /(ทำงานได้จริง|ใช้ได้จริง|ทำงานไหม|ใช้ได้ไหม|works?\s*(for real|actually)|actually work|are you (working|online|there)|can you help)/i;
|
|
9
|
+
function hasCodeIntent(text) {
|
|
10
|
+
return EN_CODE_INTENT.test(text) || THAI_CODE_NOUN.test(text) || /[{}();=`]/.test(text);
|
|
11
|
+
}
|
|
12
|
+
function hasTaskLead(text) {
|
|
13
|
+
return (EN_TASK_LEAD.test(text) ||
|
|
14
|
+
/^(สร้าง|แก้|เขียน|เพิ่ม|ลบ|ทำ|รัน|ทดสอบ)/i.test(text) ||
|
|
15
|
+
THAI_TASK_VERB.test(text));
|
|
16
|
+
}
|
|
17
|
+
function isPureMetaChat(text) {
|
|
18
|
+
const trimmed = text.trim();
|
|
19
|
+
if (PURE_META.test(trimmed) || SEE_HEAR_META.test(trimmed)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
if (/^(สวัสดี|ขอบคุณ)/.test(trimmed)) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (/(เห็น|ได้ยิน).*(ข้อความ|message)/i.test(trimmed)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return CAPABILITY_META.test(trimmed);
|
|
29
|
+
}
|
|
30
|
+
function isGenericQuestionWithoutCodeIntent(text) {
|
|
31
|
+
return ((/[\??]/.test(text) || /(ไหม|มั้ย|หรือเปล่า|ได้ไหม)/.test(text)) &&
|
|
32
|
+
!hasCodeIntent(text) &&
|
|
33
|
+
!hasTaskLead(text));
|
|
34
|
+
}
|
|
1
35
|
/**
|
|
2
|
-
* Decide whether free-text input is
|
|
3
|
-
*
|
|
36
|
+
* Decide whether free-text input is meta/chat or a coding task.
|
|
37
|
+
* Logged-in: cookbook sends coding work to the agent; meta/capability stays conversational.
|
|
4
38
|
*/
|
|
5
|
-
export function classifyTurnInput(text) {
|
|
39
|
+
export function classifyTurnInput(text, options = {}) {
|
|
6
40
|
const trimmed = text.trim();
|
|
7
41
|
if (!trimmed) {
|
|
8
42
|
return "conversation";
|
|
9
43
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
44
|
+
if (options.authReady) {
|
|
45
|
+
if (isPureMetaChat(trimmed) ||
|
|
46
|
+
isGenericQuestionWithoutCodeIntent(trimmed) ||
|
|
47
|
+
isWorkspaceContextQuestion(trimmed)) {
|
|
48
|
+
return "conversation";
|
|
49
|
+
}
|
|
50
|
+
return "task";
|
|
51
|
+
}
|
|
52
|
+
const codeIntent = hasCodeIntent(trimmed);
|
|
53
|
+
const taskLead = hasTaskLead(trimmed);
|
|
54
|
+
if (taskLead || (codeIntent && trimmed.length > 12)) {
|
|
13
55
|
return "task";
|
|
14
56
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/(เห็น|ได้ยิน|ข้อความ|สวัสดี|ช่วย.*ไหม|พิมพ์)/.test(trimmed) ||
|
|
20
|
-
/(do you see|can you see|hear me)/i.test(trimmed);
|
|
21
|
-
if (conversational && !hasCodeIntent) {
|
|
57
|
+
if (isPureMetaChat(trimmed) && !codeIntent) {
|
|
58
|
+
return "conversation";
|
|
59
|
+
}
|
|
60
|
+
if (isGenericQuestionWithoutCodeIntent(trimmed)) {
|
|
22
61
|
return "conversation";
|
|
23
62
|
}
|
|
24
|
-
if (trimmed.length <=
|
|
63
|
+
if (trimmed.length <= 32 && !codeIntent && !taskLead) {
|
|
25
64
|
return "conversation";
|
|
26
65
|
}
|
|
27
66
|
return "task";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-turn-classify.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-classify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-turn-classify.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export type ContextTurnInput = {
|
|
|
6
6
|
inspect: WorkspaceInspectResult;
|
|
7
7
|
authReady: boolean;
|
|
8
8
|
};
|
|
9
|
+
/** Meta prompts answered from local inspect — must not hit server preview. */
|
|
10
|
+
export declare function isWorkspaceContextQuestion(text: string): boolean;
|
|
9
11
|
/** Local, read-only answers from workspace inspect — no canned deflection. */
|
|
10
12
|
export declare function buildContextualReply(input: ContextTurnInput): string | null;
|
|
11
13
|
//# sourceMappingURL=agent-turn-context.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAuCD,8EAA8E;AAC9E,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMhE;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CA0C3E"}
|
|
@@ -2,9 +2,17 @@ import { inputLooksThai } from "./agent-turn-classify.js";
|
|
|
2
2
|
function thai(text) {
|
|
3
3
|
return inputLooksThai(text);
|
|
4
4
|
}
|
|
5
|
+
function mentionsFolderIncidentally(text) {
|
|
6
|
+
return (/(สร้าง|create|write|build|make|generate|เพิ่ม|เขียน|ทำ).*(folder|โฟลเดอ|directory)/i.test(text) ||
|
|
7
|
+
/(ใน|in)\s*(folder|โฟลเดอ|directory)\s*(นี้|this)/i.test(text));
|
|
8
|
+
}
|
|
5
9
|
function asksWorkspaceLocation(text) {
|
|
6
|
-
|
|
7
|
-
|
|
10
|
+
if (mentionsFolderIncidentally(text)) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
return (/(where am i|which folder|what folder|current (dir|directory|workspace|folder)|pwd\b|cwd\b)/i.test(text) ||
|
|
14
|
+
/((เรา|ตอนนี้|we).*(อยู่|where).*(folder|โฟลเดอ|ที่ไหน|directory))/i.test(text) ||
|
|
15
|
+
/(folder|โฟลเดอ|directory)\s*(อะไร|ไหน|what|which)/i.test(text));
|
|
8
16
|
}
|
|
9
17
|
function asksWorkspaceContents(text) {
|
|
10
18
|
const hasFileCue = /(ไฟล์|files?|empty|blank|ว่าง)/i.test(text);
|
|
@@ -14,6 +22,12 @@ function asksWorkspaceContents(text) {
|
|
|
14
22
|
function asksAuthStatus(text) {
|
|
15
23
|
return /(auth|login|logged in|เชื่อม|ล็อกอิน|token)/i.test(text);
|
|
16
24
|
}
|
|
25
|
+
/** Meta prompts answered from local inspect — must not hit server preview. */
|
|
26
|
+
export function isWorkspaceContextQuestion(text) {
|
|
27
|
+
return (asksWorkspaceLocation(text) ||
|
|
28
|
+
asksWorkspaceContents(text) ||
|
|
29
|
+
asksAuthStatus(text));
|
|
30
|
+
}
|
|
17
31
|
/** Local, read-only answers from workspace inspect — no canned deflection. */
|
|
18
32
|
export function buildContextualReply(input) {
|
|
19
33
|
const { text, cwd, workspaceRoot, inspect, authReady } = input;
|
|
@@ -46,10 +60,10 @@ export function buildContextualReply(input) {
|
|
|
46
60
|
if (asksAuthStatus(text)) {
|
|
47
61
|
return isThai
|
|
48
62
|
? authReady
|
|
49
|
-
? "auth พร้อมแล้ว —
|
|
63
|
+
? "auth พร้อมแล้ว — สั่งงาน coding แล้ว agent stream ทำงานทันที (read-only · ไม่ auto-apply)"
|
|
50
64
|
: "auth ยังไม่ครบ — ใช้ /login หรือ PATZE_CODE_* แล้ว /status --check"
|
|
51
65
|
: authReady
|
|
52
|
-
? "Auth is ready —
|
|
66
|
+
? "Auth is ready — coding tasks start the live agent stream (read-only · no auto-apply)."
|
|
53
67
|
: "Auth incomplete — run /login or set PATZE_CODE_* then /status --check.";
|
|
54
68
|
}
|
|
55
69
|
return null;
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"agent-turn-context.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,8 @@ export type ConversationTurnContext = {
|
|
|
19
19
|
/** Short reply for meta/chat prompts — uses local context when available. */
|
|
20
20
|
export declare function formatConversationTurnLines(objective: string, reply: string): string[];
|
|
21
21
|
export declare function resolveConversationReply(objective: string, context: ConversationTurnContext, contextualReply: string | null): string;
|
|
22
|
+
/** User-facing hint when execute returns blocked (server inline policy). */
|
|
23
|
+
export declare function formatRunBlockedHint(errorCode: string, findingCodes: string[], thai: boolean): string;
|
|
22
24
|
/** Compact task turn — agent voice, one screen. Details live in /context. */
|
|
23
25
|
export declare function formatAgentTurnLines(model: AgentTurnModel): string[];
|
|
24
26
|
/** Verbose formatter kept for /context and tests that need full preview fields. */
|
|
@@ -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;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;
|
|
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;AA0CD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,EAChC,eAAe,EAAE,MAAM,GAAG,IAAI,GAC7B,MAAM,CAKR;AAuBD,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,IAAI,EAAE,OAAO,GACZ,MAAM,CAER;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CA4CpE;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CAY3E"}
|
|
@@ -7,10 +7,23 @@ export function formatConversationTurnLines(objective, reply) {
|
|
|
7
7
|
return formatAgentReply(reply);
|
|
8
8
|
}
|
|
9
9
|
function pickConversationReply(text, thai, authReady) {
|
|
10
|
-
if (/(
|
|
10
|
+
if (/(เห็น|ได้ยิน).*(ข้อความ|message)|do you see|can you see|hear me/i.test(text)) {
|
|
11
11
|
return thai
|
|
12
|
-
?
|
|
13
|
-
|
|
12
|
+
? authReady
|
|
13
|
+
? "เห็นครับ auth พร้อมแล้ว — สั่งงาน coding ได้เลย (เช่น “สร้างไฟล์ demo.html”)"
|
|
14
|
+
: "เห็นครับ พิมพ์งานที่อยากให้ช่วยได้เลย"
|
|
15
|
+
: authReady
|
|
16
|
+
? "I see your message. Auth is ready — describe a coding task to start the agent."
|
|
17
|
+
: "I see your message. Describe a coding task when you're ready.";
|
|
18
|
+
}
|
|
19
|
+
if (/(ทำงานได้จริง|ใช้ได้จริง|ทำงานไหม|actually work|works?\s*for real)/i.test(text)) {
|
|
20
|
+
return thai
|
|
21
|
+
? authReady
|
|
22
|
+
? "ทำงานจริงครับ — พิมพ์งาน coding แล้วจะเห็น run/tool/agent stream ทันที\nread-only: ไฟล์ยังไม่ถูกเขียนอัตโนมัติ · /diff → /approve → /apply"
|
|
23
|
+
: "ยังไม่ครบ — ใช้ /login หรือ PATZE_CODE_* ก่อน"
|
|
24
|
+
: authReady
|
|
25
|
+
? "Yes — describe a coding task to start the live agent stream.\nRead-only: no auto-apply until /diff → /approve → /apply."
|
|
26
|
+
: "Not yet — run /login or set PATZE_CODE_* first.";
|
|
14
27
|
}
|
|
15
28
|
if (/^(hi|hello|hey|สวัสดี)/i.test(text.trim())) {
|
|
16
29
|
return thai
|
|
@@ -26,7 +39,7 @@ function pickConversationReply(text, thai, authReady) {
|
|
|
26
39
|
return thai ? "ครับ" : "You're welcome.";
|
|
27
40
|
}
|
|
28
41
|
if (!authReady && thai) {
|
|
29
|
-
return "รับทราบครับ ตั้ง auth ด้วย /login หรือ env
|
|
42
|
+
return "รับทราบครับ ตั้ง auth ด้วย /login หรือ env ก่อนเรียก agent";
|
|
30
43
|
}
|
|
31
44
|
return thai
|
|
32
45
|
? "รับทราบครับ บอกงาน coding ที่ต้องการได้เลย"
|
|
@@ -38,6 +51,26 @@ export function resolveConversationReply(objective, context, contextualReply) {
|
|
|
38
51
|
}
|
|
39
52
|
return pickConversationReply(objective, inputLooksThai(objective), context.authReady);
|
|
40
53
|
}
|
|
54
|
+
function formatPreviewBlockedHint(errorCode, findingCodes, thai) {
|
|
55
|
+
const code = errorCode || findingCodes[0] || "blocked";
|
|
56
|
+
if (code === "PATZE_CODE_USER_TASK_CLI_WORKSPACE_CWD_INVALID") {
|
|
57
|
+
return thai
|
|
58
|
+
? `agent blocked (${code}) — server หา workspace ไม่เจอ\nใช้ path ที่ API มองเห็นได้ (WSL: /mnt/d/... ไม่ใช่ D:\\...) · /status --check`
|
|
59
|
+
: `Agent blocked (${code}) — server cannot see workspace_cwd.\nUse a path the API host resolves (WSL: /mnt/d/... not D:\\...).`;
|
|
60
|
+
}
|
|
61
|
+
if (code === "PATZE_CODE_USER_TASK_ROUTE_FEATURE_DISABLED") {
|
|
62
|
+
return thai
|
|
63
|
+
? `agent blocked — เปิด FEATURE_PATZE_CODE บน server`
|
|
64
|
+
: "Agent blocked — enable FEATURE_PATZE_CODE on the server.";
|
|
65
|
+
}
|
|
66
|
+
return thai
|
|
67
|
+
? `agent blocked (${code}) — /context · /status --check`
|
|
68
|
+
: `Agent blocked (${code}) — see /context or /status --check`;
|
|
69
|
+
}
|
|
70
|
+
/** User-facing hint when execute returns blocked (server inline policy). */
|
|
71
|
+
export function formatRunBlockedHint(errorCode, findingCodes, thai) {
|
|
72
|
+
return formatPreviewBlockedHint(errorCode, findingCodes, thai);
|
|
73
|
+
}
|
|
41
74
|
/** Compact task turn — agent voice, one screen. Details live in /context. */
|
|
42
75
|
export function formatAgentTurnLines(model) {
|
|
43
76
|
const ws = model.inspectSummary;
|
|
@@ -57,9 +90,7 @@ export function formatAgentTurnLines(model) {
|
|
|
57
90
|
}
|
|
58
91
|
}
|
|
59
92
|
else {
|
|
60
|
-
parts.push(thai
|
|
61
|
-
? `preview ไม่ผ่าน (${server.status}) — ดู /context`
|
|
62
|
-
: `Preview did not pass (${server.status}) — see /context`);
|
|
93
|
+
parts.push(formatPreviewBlockedHint(server.error_code ?? "", server.finding_codes ?? [], thai));
|
|
63
94
|
}
|
|
64
95
|
}
|
|
65
96
|
else if (model.previewResult.localSteps?.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-turn-format.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAoBzD,6EAA6E;AAC7E,MAAM,UAAU,2BAA2B,CACzC,SAAiB,EACjB,KAAa;IAEb,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,IAAa,EAAE,SAAkB;IAC5E,IAAI,
|
|
1
|
+
{"version":3,"file":"agent-turn-format.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-format.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type PlanPreviewOptions } from "../commands/plan.js";
|
|
2
2
|
import type { InteractiveSession } from "./session.js";
|
|
3
|
+
import type { AgentEvent } from "./agent-events.js";
|
|
3
4
|
export type AgentTurnResult = {
|
|
4
5
|
lines: string[];
|
|
5
6
|
exitCode: number;
|
|
@@ -9,6 +10,7 @@ export type AgentTurnOptions = PlanPreviewOptions & {
|
|
|
9
10
|
signal?: AbortSignal;
|
|
10
11
|
onTranscriptLine?: (line: string) => void;
|
|
11
12
|
onTranscriptPartial?: (chunk: string) => void;
|
|
13
|
+
onAgentEvent?: (event: AgentEvent) => void;
|
|
12
14
|
};
|
|
13
15
|
export declare function runAgentTurn(session: InteractiveSession, objective: string, options?: AgentTurnOptions): Promise<AgentTurnResult>;
|
|
14
16
|
//# sourceMappingURL=agent-turn.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-turn.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-turn.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAM7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAgBtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG;IAClD,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;CAC3C,CAAA;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CA2L1B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { isAuthConfigured } from "../../backend/auth.js";
|
|
2
2
|
import { loadConfig } from "../../config/config.js";
|
|
3
|
+
import { ensureExecuteAuthConfig } from "./ensure-execute-auth.js";
|
|
3
4
|
import { buildGoalDryRunPlan } from "../commands/goal.js";
|
|
4
5
|
import { toInspectSummary } from "../commands/inspect-format.js";
|
|
5
6
|
import { runPlanPreview } from "../commands/plan.js";
|
|
@@ -8,7 +9,7 @@ import { getPermissionModeDef } from "../../runtime/permissions.js";
|
|
|
8
9
|
import { guessWorkspaceRoot } from "../../runtime/workspace.js";
|
|
9
10
|
import { normalizePatchProposalInput } from "../../runtime/patch-proposal.js";
|
|
10
11
|
import { hasPatchBody } from "../../runtime/patch-proposal.js";
|
|
11
|
-
import { formatAgentTurnLines, formatConversationTurnLines, resolveConversationReply } from "./agent-turn-format.js";
|
|
12
|
+
import { formatAgentTurnLines, formatConversationTurnLines, resolveConversationReply, } from "./agent-turn-format.js";
|
|
12
13
|
import { formatAgentReply } from "./transcript-format.js";
|
|
13
14
|
import { classifyTurnInput } from "./agent-turn-classify.js";
|
|
14
15
|
import { buildContextualReply } from "./agent-turn-context.js";
|
|
@@ -23,14 +24,14 @@ export async function runAgentTurn(session, objective, options = {}) {
|
|
|
23
24
|
exitCode: 2,
|
|
24
25
|
};
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
+
let config = loadConfig(session.cwd);
|
|
27
28
|
const permission = getPermissionModeDef(session.getPermissionMode());
|
|
28
29
|
const authReady = isAuthConfigured(config);
|
|
29
30
|
const modelHint = resolveEffectiveModel({
|
|
30
31
|
sessionOverride: session.getModelOverride(),
|
|
31
32
|
configModel: config.model,
|
|
32
33
|
});
|
|
33
|
-
if (classifyTurnInput(trimmed) === "conversation") {
|
|
34
|
+
if (classifyTurnInput(trimmed, { authReady }) === "conversation") {
|
|
34
35
|
const inspectResult = inspectWorkspace(session.cwd, config.defaultAllow, config.defaultDeny);
|
|
35
36
|
const workspaceRoot = guessWorkspaceRoot(session.cwd);
|
|
36
37
|
const contextual = buildContextualReply({
|
|
@@ -50,12 +51,40 @@ export async function runAgentTurn(session, objective, options = {}) {
|
|
|
50
51
|
exitCode: 0,
|
|
51
52
|
};
|
|
52
53
|
}
|
|
54
|
+
if (authReady) {
|
|
55
|
+
config = await ensureExecuteAuthConfig(session.cwd, { fetchImpl: options.fetchImpl });
|
|
56
|
+
}
|
|
53
57
|
const conversationContext = buildConversationContext(session.getActiveTranscript());
|
|
54
58
|
session.setCurrentGoal(trimmed);
|
|
55
59
|
session.clearReviewAndApprovalState();
|
|
56
60
|
const inspectResult = inspectWorkspace(session.cwd, config.defaultAllow, config.defaultDeny);
|
|
57
61
|
const inspectSummary = toInspectSummary(inspectResult);
|
|
58
62
|
session.setLastInspectSummary(inspectSummary);
|
|
63
|
+
const canDirectExecute = authReady && isCliExecuteEnabled() && isExecuteAuthReady(config);
|
|
64
|
+
if (canDirectExecute) {
|
|
65
|
+
const execute = await runExecuteTurn({
|
|
66
|
+
cwd: session.cwd,
|
|
67
|
+
config,
|
|
68
|
+
objective: trimmed,
|
|
69
|
+
previewArtifactDigest: "",
|
|
70
|
+
modelHint,
|
|
71
|
+
conversationContext,
|
|
72
|
+
executionMode: session.getExecutionMode(),
|
|
73
|
+
fetchImpl: options.fetchImpl,
|
|
74
|
+
signal: options.signal,
|
|
75
|
+
onTranscriptLine: options.onTranscriptLine,
|
|
76
|
+
onTranscriptPartial: options.onTranscriptPartial,
|
|
77
|
+
onAgentEvent: options.onAgentEvent,
|
|
78
|
+
});
|
|
79
|
+
if (execute.run?.run_id) {
|
|
80
|
+
session.setLastRunId(execute.run.run_id);
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
lines: execute.lines,
|
|
84
|
+
exitCode: execute.exitCode,
|
|
85
|
+
streamed: execute.streamed,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
59
88
|
const toolSteps = ["accept_task", "inspect_workspace"];
|
|
60
89
|
let planSource = "local";
|
|
61
90
|
let previewResult;
|
|
@@ -122,37 +151,7 @@ export async function runAgentTurn(session, objective, options = {}) {
|
|
|
122
151
|
if (pendingAction) {
|
|
123
152
|
session.setPendingAction(pendingAction);
|
|
124
153
|
}
|
|
125
|
-
|
|
126
|
-
const previewOk = previewResult.source === "server" &&
|
|
127
|
-
previewResult.server?.status === "ok" &&
|
|
128
|
-
Boolean(artifactDigest);
|
|
129
|
-
if (previewOk &&
|
|
130
|
-
isCliExecuteEnabled() &&
|
|
131
|
-
isExecuteAuthReady(config)) {
|
|
132
|
-
toolSteps.push("execute_stream");
|
|
133
|
-
const execute = await runExecuteTurn({
|
|
134
|
-
cwd: session.cwd,
|
|
135
|
-
config,
|
|
136
|
-
objective: trimmed,
|
|
137
|
-
previewArtifactDigest: artifactDigest,
|
|
138
|
-
modelHint,
|
|
139
|
-
conversationContext,
|
|
140
|
-
executionMode: session.getExecutionMode(),
|
|
141
|
-
fetchImpl: options.fetchImpl,
|
|
142
|
-
signal: options.signal,
|
|
143
|
-
onTranscriptLine: options.onTranscriptLine,
|
|
144
|
-
onTranscriptPartial: options.onTranscriptPartial,
|
|
145
|
-
});
|
|
146
|
-
if (execute.run?.run_id) {
|
|
147
|
-
session.setLastRunId(execute.run.run_id);
|
|
148
|
-
}
|
|
149
|
-
return {
|
|
150
|
-
lines: execute.lines,
|
|
151
|
-
exitCode: execute.exitCode,
|
|
152
|
-
streamed: execute.streamed,
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
if (previewOk && isCliExecuteEnabled() && !isExecuteAuthReady(config)) {
|
|
154
|
+
if (authReady && isCliExecuteEnabled() && !isExecuteAuthReady(config)) {
|
|
156
155
|
return {
|
|
157
156
|
lines: [
|
|
158
157
|
...formatAgentTurnLines({
|
|
@@ -166,25 +165,24 @@ export async function runAgentTurn(session, objective, options = {}) {
|
|
|
166
165
|
authReady,
|
|
167
166
|
mutationsEnabled: false,
|
|
168
167
|
}),
|
|
169
|
-
...formatAgentReply("
|
|
168
|
+
...formatAgentReply("Set user id via /login (session resolve) before agent execute."),
|
|
170
169
|
],
|
|
171
170
|
exitCode: 0,
|
|
172
171
|
streamed: false,
|
|
173
172
|
};
|
|
174
173
|
}
|
|
175
|
-
const model = {
|
|
176
|
-
objective: trimmed,
|
|
177
|
-
inspectSummary,
|
|
178
|
-
planSource,
|
|
179
|
-
previewResult,
|
|
180
|
-
permissionMode: permission.mode,
|
|
181
|
-
permissionLabel: permission.label,
|
|
182
|
-
toolSteps,
|
|
183
|
-
authReady,
|
|
184
|
-
mutationsEnabled: false,
|
|
185
|
-
};
|
|
186
174
|
return {
|
|
187
|
-
lines: formatAgentTurnLines(
|
|
175
|
+
lines: formatAgentTurnLines({
|
|
176
|
+
objective: trimmed,
|
|
177
|
+
inspectSummary,
|
|
178
|
+
planSource,
|
|
179
|
+
previewResult,
|
|
180
|
+
permissionMode: permission.mode,
|
|
181
|
+
permissionLabel: permission.label,
|
|
182
|
+
toolSteps,
|
|
183
|
+
authReady,
|
|
184
|
+
mutationsEnabled: false,
|
|
185
|
+
}),
|
|
188
186
|
exitCode,
|
|
189
187
|
streamed: false,
|
|
190
188
|
};
|
|
@@ -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,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,
|
|
1
|
+
{"version":3,"file":"agent-turn.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FetchLike } from "../../backend/preview-client.js";
|
|
2
|
+
import { type ResolvedConfig } from "../../config/config.js";
|
|
3
|
+
/**
|
|
4
|
+
* When api+token exist but userId is missing, resolve from server key binding
|
|
5
|
+
* (same as /login without explicit user id) and persist to global config.
|
|
6
|
+
*/
|
|
7
|
+
export declare function ensureExecuteAuthConfig(cwd: string, options?: {
|
|
8
|
+
fetchImpl?: FetchLike;
|
|
9
|
+
}): Promise<ResolvedConfig>;
|
|
10
|
+
//# sourceMappingURL=ensure-execute-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-execute-auth.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/ensure-execute-auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAChE,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGxE;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,SAAS,CAAA;CAAO,GACtC,OAAO,CAAC,cAAc,CAAC,CAqBzB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { resolvePatzeCodeSessionUser } from "../../backend/session-client.js";
|
|
2
|
+
import { loadConfig } from "../../config/config.js";
|
|
3
|
+
import { saveCredentials } from "../commands/login.js";
|
|
4
|
+
/**
|
|
5
|
+
* When api+token exist but userId is missing, resolve from server key binding
|
|
6
|
+
* (same as /login without explicit user id) and persist to global config.
|
|
7
|
+
*/
|
|
8
|
+
export async function ensureExecuteAuthConfig(cwd, options = {}) {
|
|
9
|
+
let config = loadConfig(cwd);
|
|
10
|
+
if (config.userId || !config.api || !config.token) {
|
|
11
|
+
return config;
|
|
12
|
+
}
|
|
13
|
+
const resolved = await resolvePatzeCodeSessionUser({
|
|
14
|
+
config,
|
|
15
|
+
fetchImpl: options.fetchImpl,
|
|
16
|
+
});
|
|
17
|
+
if (!resolved.ok) {
|
|
18
|
+
return config;
|
|
19
|
+
}
|
|
20
|
+
saveCredentials({
|
|
21
|
+
api: config.api,
|
|
22
|
+
token: config.token,
|
|
23
|
+
userId: resolved.userId,
|
|
24
|
+
});
|
|
25
|
+
config = loadConfig(cwd);
|
|
26
|
+
return config;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ensure-execute-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure-execute-auth.js","sourceRoot":"","sources":["../../../src/cli/interactive/ensure-execute-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAA;AAE7E,OAAO,EAAE,UAAU,EAAuB,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAW,EACX,UAAqC,EAAE;IAEvC,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC;QACjD,MAAM;QACN,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAA;IACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,eAAe,CAAC;QACd,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC,CAAA;IACF,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IACxB,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -61,7 +61,7 @@ export function renderInteractiveHeader(cwd, permissionMode, modelOverride, exec
|
|
|
61
61
|
const STAGE_NOTICE = "Beta · Dev demo — for internal testing only";
|
|
62
62
|
const HEADER_TIPS = [
|
|
63
63
|
"One-shot: patze \"<task>\" · pipe stdin · /model to switch",
|
|
64
|
-
"
|
|
64
|
+
"Cookbook feed: run · tool · agent stream (SSE) when logged in",
|
|
65
65
|
"/login <api> <token> · /status --check to verify",
|
|
66
66
|
];
|
|
67
67
|
export const INTERACTIVE_PROMPT = "› ";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plain (non-TUI) agent output — adapted from Cursor cookbook coding-agent-cli (index.ts).
|
|
3
|
+
* @see https://github.com/cursor/cookbook/tree/main/sdk/coding-agent-cli
|
|
4
|
+
*/
|
|
5
|
+
import { type AgentEvent } from "./agent-events.js";
|
|
6
|
+
export type PlainAnnotate = (message: string) => void;
|
|
7
|
+
export type PlainWriteAssistant = (text: string) => void;
|
|
8
|
+
export type PlainAgentHandlers = {
|
|
9
|
+
annotate: PlainAnnotate;
|
|
10
|
+
writeAssistant: PlainWriteAssistant;
|
|
11
|
+
assistantEndedWithNewline: () => boolean;
|
|
12
|
+
};
|
|
13
|
+
/** Cookbook-style stderr annotations + stdout assistant stream. */
|
|
14
|
+
export declare function createPlainAgentHandlers(stdout?: NodeJS.WriteStream, stderr?: NodeJS.WriteStream): PlainAgentHandlers;
|
|
15
|
+
export declare function renderPlainAgentEvent(event: AgentEvent, handlers: PlainAgentHandlers): void;
|
|
16
|
+
//# sourceMappingURL=plain-agent-render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plain-agent-render.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/plain-agent-render.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AACrD,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAExD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,aAAa,CAAA;IACvB,cAAc,EAAE,mBAAmB,CAAA;IACnC,yBAAyB,EAAE,MAAM,OAAO,CAAA;CACzC,CAAA;AAED,mEAAmE;AACnE,wBAAgB,wBAAwB,CACtC,MAAM,GAAE,MAAM,CAAC,WAA4B,EAC3C,MAAM,GAAE,MAAM,CAAC,WAA4B,GAC1C,kBAAkB,CAqBpB;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,kBAAkB,GAC3B,IAAI,CA2CN"}
|