@patze/code-cli 0.17.2 → 0.18.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 +16 -0
- package/VERSION +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 +37 -14
- 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 +10 -2
- package/dist/cli/interactive/agent-turn-context.js.map +1 -1
- package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
- package/dist/cli/interactive/agent-turn.js +6 -2
- 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/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/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
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,22 @@ All notable changes to `@patze/code-cli` are documented here.
|
|
|
4
4
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
6
|
|
|
7
|
+
## [0.18.0] - 2026-05-29
|
|
8
|
+
|
|
9
|
+
### Changed (cookbook parity)
|
|
10
|
+
|
|
11
|
+
- **Auth-ready routing** — logged-in prompts go to the real server agent (preview + SSE), like Cursor cookbook; only pure greetings/meta stay local.
|
|
12
|
+
- **TTY live feed** — Node interactive shell upserts `tool`/`run` rows and streams `agent` text deltas in-place during execute.
|
|
13
|
+
- **Session bootstrap** — `prepareInteractiveController()` resolves `userId` on shell/OpenTUI start (shared with `/login` session resolve).
|
|
14
|
+
|
|
15
|
+
## [0.17.3] - 2026-05-29
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- **Thai task routing** — prompts like “สร้างไฟล์ html … ได้ไหม” now hit the real server agent path (preview + SSE), not the local conversation mock.
|
|
20
|
+
- **Contextual reply false positive** — file-creation requests that mention “folder” no longer answer with cwd-only text.
|
|
21
|
+
- **Auto user id** — on shell start and before agent turns, resolve `userId` from `/internal/patze-code/session` when token is bound (same as `/login`).
|
|
22
|
+
|
|
7
23
|
## [0.17.2] - 2026-05-29
|
|
8
24
|
|
|
9
25
|
### Fixed
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.18.0
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
export type TurnKind = "conversation" | "task";
|
|
2
|
+
export type ClassifyTurnOptions = {
|
|
3
|
+
/** When true (logged-in), route prompts to the real agent like Cursor cookbook. */
|
|
4
|
+
authReady?: boolean;
|
|
5
|
+
};
|
|
2
6
|
/**
|
|
3
|
-
* Decide whether free-text input is
|
|
4
|
-
*
|
|
7
|
+
* Decide whether free-text input is meta/chat or a coding task.
|
|
8
|
+
* When authReady (cookbook posture), only pure meta/greeting stays local.
|
|
5
9
|
*/
|
|
6
|
-
export declare function classifyTurnInput(text: string): TurnKind;
|
|
10
|
+
export declare function classifyTurnInput(text: string, options?: ClassifyTurnOptions): TurnKind;
|
|
7
11
|
export declare function inputLooksThai(text: string): boolean;
|
|
8
12
|
//# sourceMappingURL=agent-turn-classify.d.ts.map
|
|
@@ -1 +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,
|
|
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,MAAM,MAAM,mBAAmB,GAAG;IAChC,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAuCD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB,GAAG,QAAQ,CAmC3F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -1,27 +1,50 @@
|
|
|
1
|
+
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;
|
|
2
|
+
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;
|
|
3
|
+
const THAI_TASK_VERB = /(สร้าง|แก้ไข|แก้|เขียน|ลบ|อ่าน|เพิ่ม|ทำ|แปล|รัน|ทดสอบ|ดีบั๊ก|รีแฟคเตอร์|ย้าย|implement|generate)/i;
|
|
4
|
+
const THAI_CODE_NOUN = /(ไฟล์|โค้ด|ฟังก์ชัน|คลาส|โมดูล|แอป|หน้าเว็บ|html|css|javascript|typescript|api|เทส|บั๊ก|สคริปต์|demo)/i;
|
|
5
|
+
const PURE_META = /^(hi|hello|hey|thanks|thank you|ok|okay|yes|no|help|\/?help|สวัสดี|ขอบคุณ)\b/i;
|
|
6
|
+
const SEE_HEAR_META = /^(do you see|can you see|hear me|เห็นข้อความ|ได้ยิน|เห็น.*(ข้อความ|message))/i;
|
|
7
|
+
function hasCodeIntent(text) {
|
|
8
|
+
return EN_CODE_INTENT.test(text) || THAI_CODE_NOUN.test(text) || /[{}();=`]/.test(text);
|
|
9
|
+
}
|
|
10
|
+
function hasTaskLead(text) {
|
|
11
|
+
return (EN_TASK_LEAD.test(text) ||
|
|
12
|
+
/^(สร้าง|แก้|เขียน|เพิ่ม|ลบ|ทำ|รัน|ทดสอบ)/i.test(text) ||
|
|
13
|
+
THAI_TASK_VERB.test(text));
|
|
14
|
+
}
|
|
15
|
+
function isPureMetaChat(text) {
|
|
16
|
+
if (PURE_META.test(text) || SEE_HEAR_META.test(text)) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
return /^(สวัสดี|ขอบคุณ)/.test(text.trim());
|
|
20
|
+
}
|
|
1
21
|
/**
|
|
2
|
-
* Decide whether free-text input is
|
|
3
|
-
*
|
|
22
|
+
* Decide whether free-text input is meta/chat or a coding task.
|
|
23
|
+
* When authReady (cookbook posture), only pure meta/greeting stays local.
|
|
4
24
|
*/
|
|
5
|
-
export function classifyTurnInput(text) {
|
|
25
|
+
export function classifyTurnInput(text, options = {}) {
|
|
6
26
|
const trimmed = text.trim();
|
|
7
27
|
if (!trimmed) {
|
|
8
28
|
return "conversation";
|
|
9
29
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
30
|
+
if (options.authReady) {
|
|
31
|
+
return isPureMetaChat(trimmed) ? "conversation" : "task";
|
|
32
|
+
}
|
|
33
|
+
const codeIntent = hasCodeIntent(trimmed);
|
|
34
|
+
const taskLead = hasTaskLead(trimmed);
|
|
35
|
+
if (taskLead || (codeIntent && trimmed.length > 12)) {
|
|
13
36
|
return "task";
|
|
14
37
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (
|
|
38
|
+
if (isPureMetaChat(trimmed) && !codeIntent) {
|
|
39
|
+
return "conversation";
|
|
40
|
+
}
|
|
41
|
+
const genericQuestion = (/[\??]/.test(trimmed) || /(ไหม|มั้ย|หรือเปล่า|ได้ไหม)/.test(trimmed)) &&
|
|
42
|
+
!codeIntent &&
|
|
43
|
+
!taskLead;
|
|
44
|
+
if (genericQuestion && trimmed.length <= 64) {
|
|
22
45
|
return "conversation";
|
|
23
46
|
}
|
|
24
|
-
if (trimmed.length <=
|
|
47
|
+
if (trimmed.length <= 32 && !codeIntent && !taskLead) {
|
|
25
48
|
return "conversation";
|
|
26
49
|
}
|
|
27
50
|
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":"AAOA,MAAM,cAAc,GAClB,mNAAmN,CAAA;AAErN,MAAM,YAAY,GAChB,2IAA2I,CAAA;AAE7I,MAAM,cAAc,GAClB,mGAAmG,CAAA;AAErG,MAAM,cAAc,GAClB,wGAAwG,CAAA;AAE1G,MAAM,SAAS,GACb,+EAA+E,CAAA;AAEjF,MAAM,aAAa,GACjB,+EAA+E,CAAA;AAEjF,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzF,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,CACL,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC;QACtD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1B,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,UAA+B,EAAE;IAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAA;IAC1D,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;IAErC,IAAI,QAAQ,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC;QACpD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3C,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,MAAM,eAAe,GACnB,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC,UAAU;QACX,CAAC,QAAQ,CAAA;IAEX,IAAI,eAAe,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAC5C,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrD,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"}
|
|
@@ -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,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);
|
|
@@ -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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"}
|
|
@@ -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;AActD,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;CAC9C,CAAA;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,kBAAkB,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAmM1B"}
|
|
@@ -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";
|
|
@@ -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,6 +51,9 @@ 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();
|
|
@@ -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,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACpH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GACf,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAc7D,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA2B,EAC3B,SAAiB,EACjB,UAA4B,EAAE;IAE9B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAA;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,KAAK,EAAE,CAAC,iDAAiD,CAAC;YAC1D,QAAQ,EAAE,CAAC;SACZ,CAAA;IACH,CAAC;IAED,
|
|
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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"}
|
|
@@ -21,5 +21,6 @@ export type InteractiveController = {
|
|
|
21
21
|
persistSession: () => void;
|
|
22
22
|
processLine: (rawLine: string, output: TextWriter, context?: ProcessLineContext) => Promise<ProcessLineResult>;
|
|
23
23
|
};
|
|
24
|
+
export declare function prepareInteractiveController(options: InteractiveControllerOptions): Promise<InteractiveController>;
|
|
24
25
|
export declare function createInteractiveController(options: InteractiveControllerOptions): InteractiveController;
|
|
25
26
|
//# sourceMappingURL=session-controller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-controller.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/session-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"session-controller.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/session-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAYjD,MAAM,MAAM,4BAA4B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,kBAAkB,CAAA;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,iBAAiB,EAAE,MAAM,MAAM,EAAE,CAAA;IACjC,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,WAAW,EAAE,CACX,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE,kBAAkB,KACzB,OAAO,CAAC,iBAAiB,CAAC,CAAA;CAChC,CAAA;AA+CD,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,qBAAqB,CAAC,CAGhC;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CA+GvB"}
|
|
@@ -6,6 +6,44 @@ import { dispatchAgentPrompt, dispatchSlashCommand, } from "./slash-dispatch.js"
|
|
|
6
6
|
import { formatTranscriptEntry } from "./transcript-format.js";
|
|
7
7
|
import { runApplyConfirmationLine } from "../commands/apply.js";
|
|
8
8
|
import { loadPersistedSession, savePersistedSession } from "./session-store.js";
|
|
9
|
+
import { ensureExecuteAuthConfig } from "./ensure-execute-auth.js";
|
|
10
|
+
import { createTtyLiveFeedWriter, shouldUseTtyLiveFeed } from "./tty-live-feed.js";
|
|
11
|
+
function buildStreamSink(output, options, canStreamPartials) {
|
|
12
|
+
if (!canStreamPartials || !shouldUseTtyLiveFeed(options.interactive)) {
|
|
13
|
+
return {
|
|
14
|
+
onLine: (entry) => {
|
|
15
|
+
output.line(entry);
|
|
16
|
+
},
|
|
17
|
+
onPartial: canStreamPartials
|
|
18
|
+
? (chunk) => {
|
|
19
|
+
options.onPartial?.(chunk);
|
|
20
|
+
}
|
|
21
|
+
: undefined,
|
|
22
|
+
finalize: () => { },
|
|
23
|
+
reset: () => { },
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const feed = createTtyLiveFeedWriter(output);
|
|
27
|
+
return {
|
|
28
|
+
onLine: (entry) => {
|
|
29
|
+
feed.line(entry);
|
|
30
|
+
},
|
|
31
|
+
onPartial: (chunk) => {
|
|
32
|
+
feed.emitPartial(chunk);
|
|
33
|
+
options.onPartial?.(chunk);
|
|
34
|
+
},
|
|
35
|
+
finalize: () => {
|
|
36
|
+
feed.flushPartials();
|
|
37
|
+
},
|
|
38
|
+
reset: () => {
|
|
39
|
+
feed.resetStream();
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export async function prepareInteractiveController(options) {
|
|
44
|
+
await ensureExecuteAuthConfig(options.cwd);
|
|
45
|
+
return createInteractiveController(options);
|
|
46
|
+
}
|
|
9
47
|
export function createInteractiveController(options) {
|
|
10
48
|
const cwd = options.cwd;
|
|
11
49
|
const session = new InteractiveSession(cwd);
|
|
@@ -44,19 +82,20 @@ export function createInteractiveController(options) {
|
|
|
44
82
|
for (const entry of formatTranscriptEntry("you", line)) {
|
|
45
83
|
output.line(entry);
|
|
46
84
|
}
|
|
85
|
+
const stream = buildStreamSink(output, options, canStreamPartials);
|
|
86
|
+
stream.reset();
|
|
47
87
|
let partialActive = false;
|
|
48
88
|
const result = await dispatchAgentPrompt(session, line, {
|
|
49
89
|
signal: context.signal,
|
|
50
|
-
onTranscriptLine:
|
|
51
|
-
|
|
52
|
-
},
|
|
53
|
-
onTranscriptPartial: canStreamPartials
|
|
90
|
+
onTranscriptLine: stream.onLine,
|
|
91
|
+
onTranscriptPartial: stream.onPartial
|
|
54
92
|
? (chunk) => {
|
|
55
93
|
partialActive = true;
|
|
56
|
-
|
|
94
|
+
stream.onPartial?.(chunk);
|
|
57
95
|
}
|
|
58
96
|
: undefined,
|
|
59
97
|
});
|
|
98
|
+
stream.finalize();
|
|
60
99
|
session.append({ input: line, lines: result.lines });
|
|
61
100
|
if (!result.streamed) {
|
|
62
101
|
for (const entry of result.lines) {
|
|
@@ -70,19 +109,14 @@ export function createInteractiveController(options) {
|
|
|
70
109
|
persistSession();
|
|
71
110
|
return { exitShell: result.exitShell, exitCode: result.exitCode, streamed: result.streamed };
|
|
72
111
|
}
|
|
112
|
+
const stream = buildStreamSink(output, options, canStreamPartials);
|
|
113
|
+
stream.reset();
|
|
73
114
|
const result = await dispatchSlashCommand(session, parsed, {
|
|
74
115
|
permissionsInteractive: options.interactive === true,
|
|
75
|
-
onTranscriptLine:
|
|
76
|
-
|
|
77
|
-
output.line(entry);
|
|
78
|
-
}
|
|
79
|
-
: undefined,
|
|
80
|
-
onTranscriptPartial: canStreamPartials
|
|
81
|
-
? (chunk) => {
|
|
82
|
-
options.onPartial?.(chunk);
|
|
83
|
-
}
|
|
84
|
-
: undefined,
|
|
116
|
+
onTranscriptLine: stream.onLine,
|
|
117
|
+
onTranscriptPartial: stream.onPartial,
|
|
85
118
|
});
|
|
119
|
+
stream.finalize();
|
|
86
120
|
session.append({ input: redactSensitiveInput(line), lines: result.lines });
|
|
87
121
|
if (!result.streamed) {
|
|
88
122
|
for (const entry of result.lines) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-controller.js","sourceRoot":"","sources":["../../../src/cli/interactive/session-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"session-controller.js","sourceRoot":"","sources":["../../../src/cli/interactive/session-controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { createInterface } from "node:readline";
|
|
|
2
2
|
import { createBufferWriter, createStdoutWriter } from "../ui/text-writer.js";
|
|
3
3
|
import { INTERACTIVE_PROMPT } from "./header.js";
|
|
4
4
|
import { SlashLineEditor } from "./line-editor.js";
|
|
5
|
-
import {
|
|
5
|
+
import { prepareInteractiveController } from "./session-controller.js";
|
|
6
6
|
export async function runInteractiveShell(options = {}) {
|
|
7
7
|
const cwd = options.cwd ?? process.cwd();
|
|
8
8
|
const buffer = createBufferWriter();
|
|
@@ -15,7 +15,7 @@ export async function runInteractiveShell(options = {}) {
|
|
|
15
15
|
};
|
|
16
16
|
const prompt = options.prompt ?? INTERACTIVE_PROMPT;
|
|
17
17
|
const interactive = !options.input && Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
18
|
-
const controller =
|
|
18
|
+
const controller = await prepareInteractiveController({
|
|
19
19
|
cwd,
|
|
20
20
|
interactive,
|
|
21
21
|
streamPartials: interactive,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ParsedTranscriptLine = {
|
|
2
|
+
kind: "user" | "assistant" | "tool" | "status" | "info";
|
|
3
|
+
label: string;
|
|
4
|
+
text: string;
|
|
5
|
+
continuation: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function parseTranscriptLine(raw: string): ParsedTranscriptLine | null;
|
|
8
|
+
//# sourceMappingURL=transcript-line-parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-line-parse.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/transcript-line-parse.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;IACvD,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAyC5E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
const LABEL_WIDTH = 7;
|
|
2
|
+
export function parseTranscriptLine(raw) {
|
|
3
|
+
const line = raw.replace(/\x1b\[[0-9;]*m/g, "");
|
|
4
|
+
if (!line.trim()) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
if (line.startsWith(" ".repeat(LABEL_WIDTH))) {
|
|
8
|
+
return {
|
|
9
|
+
kind: "assistant",
|
|
10
|
+
label: "",
|
|
11
|
+
text: line.slice(LABEL_WIDTH),
|
|
12
|
+
continuation: true,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const match = line.match(/^(you|agent|tool|run)\s*(.*)$/i);
|
|
16
|
+
if (!match) {
|
|
17
|
+
return {
|
|
18
|
+
kind: "info",
|
|
19
|
+
label: "info",
|
|
20
|
+
text: line,
|
|
21
|
+
continuation: false,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const role = match[1].toLowerCase();
|
|
25
|
+
const kind = role === "you"
|
|
26
|
+
? "user"
|
|
27
|
+
: role === "tool"
|
|
28
|
+
? "tool"
|
|
29
|
+
: role === "run"
|
|
30
|
+
? "status"
|
|
31
|
+
: "assistant";
|
|
32
|
+
return {
|
|
33
|
+
kind,
|
|
34
|
+
label: role,
|
|
35
|
+
text: match[2] ?? "",
|
|
36
|
+
continuation: false,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=transcript-line-parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transcript-line-parse.js","sourceRoot":"","sources":["../../../src/cli/interactive/transcript-line-parse.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,CAAC,CAAA;AASrB,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;YAC7B,YAAY,EAAE,IAAI;SACnB,CAAA;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,KAAK;SACpB,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IACnC,MAAM,IAAI,GACR,IAAI,KAAK,KAAK;QACZ,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI,KAAK,MAAM;YACf,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI,KAAK,KAAK;gBACd,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,WAAW,CAAA;IAErB,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QACpB,YAAY,EAAE,KAAK;KACpB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TextWriter } from "../ui/text-writer.js";
|
|
2
|
+
export type TtyLiveFeedWriter = TextWriter & {
|
|
3
|
+
emitPartial: (chunk: string) => void;
|
|
4
|
+
flushPartials: () => void;
|
|
5
|
+
resetStream: () => void;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Cookbook-style live transcript on Node TTY: tool/run upserts + agent text deltas.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createTtyLiveFeedWriter(base: TextWriter, stdout?: NodeJS.WriteStream): TtyLiveFeedWriter;
|
|
11
|
+
export declare function shouldUseTtyLiveFeed(interactive: boolean | undefined): boolean;
|
|
12
|
+
//# sourceMappingURL=tty-live-feed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tty-live-feed.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/tty-live-feed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMtD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG;IAC3C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB,CAAA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,MAAM,CAAC,WAA4B,GAC1C,iBAAiB,CA8DnB;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAE9E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { deriveTranscriptUpsertKey } from "./transcript-upsert.js";
|
|
2
|
+
import { parseTranscriptLine } from "./transcript-line-parse.js";
|
|
3
|
+
const LABEL_WIDTH = 7;
|
|
4
|
+
/**
|
|
5
|
+
* Cookbook-style live transcript on Node TTY: tool/run upserts + agent text deltas.
|
|
6
|
+
*/
|
|
7
|
+
export function createTtyLiveFeedWriter(base, stdout = process.stdout) {
|
|
8
|
+
const upsertRows = new Map();
|
|
9
|
+
let agentStreaming = false;
|
|
10
|
+
const flushPartials = () => {
|
|
11
|
+
if (agentStreaming) {
|
|
12
|
+
stdout.write("\n");
|
|
13
|
+
agentStreaming = false;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const resetStream = () => {
|
|
17
|
+
flushPartials();
|
|
18
|
+
upsertRows.clear();
|
|
19
|
+
};
|
|
20
|
+
const emitPartial = (chunk) => {
|
|
21
|
+
if (!stdout.isTTY || !chunk) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
if (!agentStreaming) {
|
|
25
|
+
stdout.write(`${"agent".padEnd(LABEL_WIDTH)}`);
|
|
26
|
+
agentStreaming = true;
|
|
27
|
+
}
|
|
28
|
+
stdout.write(chunk);
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
line(text = "") {
|
|
32
|
+
const parsed = parseTranscriptLine(text);
|
|
33
|
+
if (!parsed) {
|
|
34
|
+
flushPartials();
|
|
35
|
+
base.line(text);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (parsed.continuation) {
|
|
39
|
+
flushPartials();
|
|
40
|
+
base.line(text);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const upsertKey = deriveTranscriptUpsertKey(parsed.kind, parsed.label, parsed.text);
|
|
44
|
+
flushPartials();
|
|
45
|
+
if (upsertKey && stdout.isTTY && upsertRows.has(upsertKey)) {
|
|
46
|
+
const rows = upsertRows.get(upsertKey) ?? 1;
|
|
47
|
+
for (let i = 0; i < rows; i += 1) {
|
|
48
|
+
stdout.write("\x1b[1A\x1b[2K");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
base.line(text);
|
|
52
|
+
if (upsertKey) {
|
|
53
|
+
upsertRows.set(upsertKey, 1);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
emitPartial,
|
|
57
|
+
flushPartials,
|
|
58
|
+
resetStream,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function shouldUseTtyLiveFeed(interactive) {
|
|
62
|
+
return interactive === true && Boolean(process.stdout.isTTY) && !process.env.NO_COLOR;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=tty-live-feed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tty-live-feed.js","sourceRoot":"","sources":["../../../src/cli/interactive/tty-live-feed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,MAAM,WAAW,GAAG,CAAC,CAAA;AAQrB;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAgB,EAChB,SAA6B,OAAO,CAAC,MAAM;IAE3C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC5C,IAAI,cAAc,GAAG,KAAK,CAAA;IAE1B,MAAM,aAAa,GAAG,GAAS,EAAE;QAC/B,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAClB,cAAc,GAAG,KAAK,CAAA;QACxB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,aAAa,EAAE,CAAA;QACf,UAAU,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAAC,KAAa,EAAQ,EAAE;QAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAM;QACR,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YAC9C,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC,CAAA;IAED,OAAO;QACL,IAAI,CAAC,IAAI,GAAG,EAAE;YACZ,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACxC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,aAAa,EAAE,CAAA;gBACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,OAAM;YACR,CAAC;YAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,aAAa,EAAE,CAAA;gBACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,OAAM;YACR,CAAC;YAED,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YACnF,aAAa,EAAE,CAAA;YAEf,IAAI,SAAS,IAAI,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;gBAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;gBAChC,CAAC;YACH,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEf,IAAI,SAAS,EAAE,CAAC;gBACd,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QACD,WAAW;QACX,aAAa;QACb,WAAW;KACZ,CAAA;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,WAAgC;IACnE,OAAO,WAAW,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;AACvF,CAAC"}
|
|
@@ -39,7 +39,7 @@ These are **intentional** for the current slice. Do not treat them as bugs unles
|
|
|
39
39
|
| One-shot argv / stdin | **Implemented (0.13+)** — `patze "task"`, `patze agent`, piped stdin |
|
|
40
40
|
| `/model` picker | **Implemented (0.13+)** — session override + `PATZE_CODE_MODEL` / config |
|
|
41
41
|
| `/run` replay | **Implemented (0.13+)** — SSE replay or stored trace fallback |
|
|
42
|
-
| Live text deltas in-place | **
|
|
42
|
+
| Live text deltas in-place | **Implemented (0.18+)** — Node TTY live feed + OpenTUI upsert stream |
|
|
43
43
|
|
|
44
44
|
## Session and persistence
|
|
45
45
|
|
package/opentui/src/App.tsx
CHANGED
|
@@ -227,17 +227,17 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
|
|
|
227
227
|
slashMenuModule = await importPatzeDist("cli/interactive/slash-menu.js")
|
|
228
228
|
setSlashMenuReady(true)
|
|
229
229
|
|
|
230
|
-
const
|
|
231
|
-
"cli/interactive/session-controller.js"
|
|
232
|
-
)
|
|
233
|
-
const controller =
|
|
230
|
+
const sessionMod = await importPatzeDist<
|
|
231
|
+
typeof import("../../dist/cli/interactive/session-controller.js")
|
|
232
|
+
>("cli/interactive/session-controller.js")
|
|
233
|
+
const controller = (await sessionMod.prepareInteractiveController({
|
|
234
234
|
cwd,
|
|
235
235
|
interactive: true,
|
|
236
236
|
streamPartials: true,
|
|
237
237
|
onPartial: (chunk: string) => {
|
|
238
238
|
upsertStreaming(chunk)
|
|
239
239
|
},
|
|
240
|
-
}) as InteractiveController
|
|
240
|
+
})) as InteractiveController
|
|
241
241
|
|
|
242
242
|
if (cancelled) {
|
|
243
243
|
return
|