zcode-acp-server 0.11.8 → 0.14.1

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.
Files changed (120) hide show
  1. package/README.md +144 -32
  2. package/dist/backend/client.d.ts.map +1 -1
  3. package/dist/backend/client.js +10 -0
  4. package/dist/backend/client.js.map +1 -1
  5. package/dist/backend/listener.d.ts.map +1 -1
  6. package/dist/backend/listener.js +6 -5
  7. package/dist/backend/listener.js.map +1 -1
  8. package/dist/backend/resolve.d.ts.map +1 -1
  9. package/dist/backend/resolve.js +35 -1
  10. package/dist/backend/resolve.js.map +1 -1
  11. package/dist/bin/hub.d.ts +3 -3
  12. package/dist/bin/hub.d.ts.map +1 -1
  13. package/dist/bin/hub.js +22 -12
  14. package/dist/bin/hub.js.map +1 -1
  15. package/dist/bin/quota.d.ts +14 -6
  16. package/dist/bin/quota.d.ts.map +1 -1
  17. package/dist/bin/quota.js +27 -19
  18. package/dist/bin/quota.js.map +1 -1
  19. package/dist/cli.d.ts +38 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +129 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config/runtime-model.d.ts +10 -10
  24. package/dist/config/runtime-model.js +10 -10
  25. package/dist/handlers/account.d.ts +1 -1
  26. package/dist/handlers/account.js +1 -1
  27. package/dist/handlers/dispatch.d.ts.map +1 -1
  28. package/dist/handlers/dispatch.js +42 -36
  29. package/dist/handlers/dispatch.js.map +1 -1
  30. package/dist/handlers/io.d.ts.map +1 -1
  31. package/dist/handlers/io.js +19 -13
  32. package/dist/handlers/io.js.map +1 -1
  33. package/dist/handlers/session.d.ts +58 -4
  34. package/dist/handlers/session.d.ts.map +1 -1
  35. package/dist/handlers/session.js +317 -87
  36. package/dist/handlers/session.js.map +1 -1
  37. package/dist/index.d.ts +4 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +27 -8
  40. package/dist/index.js.map +1 -1
  41. package/dist/interaction/adapter.d.ts +1 -0
  42. package/dist/interaction/adapter.d.ts.map +1 -1
  43. package/dist/interaction/adapter.js +5 -1
  44. package/dist/interaction/adapter.js.map +1 -1
  45. package/dist/quota/color.d.ts +4 -4
  46. package/dist/quota/color.d.ts.map +1 -1
  47. package/dist/quota/color.js +7 -5
  48. package/dist/quota/color.js.map +1 -1
  49. package/dist/quota/combined.d.ts +1 -1
  50. package/dist/quota/combined.js +4 -4
  51. package/dist/quota/combined.js.map +1 -1
  52. package/dist/quota/format.d.ts +1 -1
  53. package/dist/quota/opencode-go/format.d.ts.map +1 -1
  54. package/dist/quota/opencode-go/format.js +5 -1
  55. package/dist/quota/opencode-go/format.js.map +1 -1
  56. package/dist/quota/opencode-go/index.d.ts +1 -1
  57. package/dist/quota/opencode-go/index.js +1 -1
  58. package/dist/quota/opencode-go/types.d.ts +1 -1
  59. package/dist/quota/opencode-go/types.js +1 -1
  60. package/dist/quota/rounding.d.ts +8 -0
  61. package/dist/quota/rounding.d.ts.map +1 -0
  62. package/dist/quota/rounding.js +10 -0
  63. package/dist/quota/rounding.js.map +1 -0
  64. package/dist/remote/config.d.ts +1 -1
  65. package/dist/remote/config.d.ts.map +1 -1
  66. package/dist/remote/config.js +1 -1
  67. package/dist/remote/config.js.map +1 -1
  68. package/dist/remote/endpoint.d.ts +1 -1
  69. package/dist/remote/endpoint.d.ts.map +1 -1
  70. package/dist/remote/endpoint.js +6 -1
  71. package/dist/remote/endpoint.js.map +1 -1
  72. package/dist/remote/hub-server.d.ts +1 -1
  73. package/dist/remote/hub-server.d.ts.map +1 -1
  74. package/dist/remote/hub-server.js +13 -10
  75. package/dist/remote/hub-server.js.map +1 -1
  76. package/dist/remote/session-rename-endpoint.d.ts +20 -0
  77. package/dist/remote/session-rename-endpoint.d.ts.map +1 -0
  78. package/dist/remote/session-rename-endpoint.js +108 -0
  79. package/dist/remote/session-rename-endpoint.js.map +1 -0
  80. package/dist/repl/App.d.ts +108 -0
  81. package/dist/repl/App.d.ts.map +1 -0
  82. package/dist/repl/App.js +706 -0
  83. package/dist/repl/App.js.map +1 -0
  84. package/dist/repl/history.d.ts +25 -0
  85. package/dist/repl/history.d.ts.map +1 -0
  86. package/dist/repl/history.js +73 -0
  87. package/dist/repl/history.js.map +1 -0
  88. package/dist/repl/input-buffer.d.ts +77 -0
  89. package/dist/repl/input-buffer.d.ts.map +1 -0
  90. package/dist/repl/input-buffer.js +174 -0
  91. package/dist/repl/input-buffer.js.map +1 -0
  92. package/dist/repl/model.d.ts +275 -0
  93. package/dist/repl/model.d.ts.map +1 -0
  94. package/dist/repl/model.js +596 -0
  95. package/dist/repl/model.js.map +1 -0
  96. package/dist/repl/mouse.d.ts +49 -0
  97. package/dist/repl/mouse.d.ts.map +1 -0
  98. package/dist/repl/mouse.js +165 -0
  99. package/dist/repl/mouse.js.map +1 -0
  100. package/dist/repl/run.d.ts +12 -0
  101. package/dist/repl/run.d.ts.map +1 -0
  102. package/dist/repl/run.js +902 -0
  103. package/dist/repl/run.js.map +1 -0
  104. package/dist/server.d.ts +19 -1
  105. package/dist/server.d.ts.map +1 -1
  106. package/dist/server.js +32 -4
  107. package/dist/server.js.map +1 -1
  108. package/dist/tasks-index.d.ts +7 -0
  109. package/dist/tasks-index.d.ts.map +1 -1
  110. package/dist/tasks-index.js +50 -9
  111. package/dist/tasks-index.js.map +1 -1
  112. package/dist/translators/tool-helpers.d.ts.map +1 -1
  113. package/dist/translators/tool-helpers.js +3 -0
  114. package/dist/translators/tool-helpers.js.map +1 -1
  115. package/docs/ARCHITECTURE.md +1 -1
  116. package/docs/BACKLOG.md +40 -21
  117. package/docs/REMOTE-CLIENTS.md +37 -8
  118. package/docs/TROUBLESHOOTING.md +1 -1
  119. package/docs/adr/0007-unified-cli-entry-and-bin-pruning.md +40 -0
  120. package/package.json +9 -4
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Pure REPL turn state machine: folds ACP SessionUpdate notifications for one
3
+ * prompt turn into renderable entries. No React, no I/O — exported for unit
4
+ * tests.
5
+ *
6
+ * Chunk ordering follows what the bridge emits per turn: thought chunks and
7
+ * message chunks arrive interleaved as streams (buffered until the stream
8
+ * switches), tool calls arrive as discrete events keyed by toolCallId, and a
9
+ * tool_call_update may later change only the status of an existing row.
10
+ */
11
+ import type { SessionConfigOption, SessionUpdate } from "@agentclientprotocol/sdk";
12
+ import type { QuotaResult } from "../quota/types.js";
13
+ /** Alias so tests can build fixtures without importing SDK types directly. */
14
+ export type SessionUpdateLike = SessionUpdate;
15
+ /**
16
+ * Compact plan-quota summary for the prompt line's status row, e.g.
17
+ * `"5h 34% · wk 8%"`. Token windows only (5h / weekly — all GLM exposes);
18
+ * MCP detail lives in the full `/quota` card, not a one-line indicator, and
19
+ * unknown future windows are skipped rather than mislabeled. Returns null
20
+ * when there is nothing worth showing (fetch failed / auth expired /
21
+ * transient busy) so the row degrades to its previous form instead of
22
+ * nagging.
23
+ */
24
+ export declare function formatQuotaLine(result: QuotaResult | null): string | null;
25
+ /**
26
+ * Estimated rendered line count of `text` when wrapped at `width` display
27
+ * columns (CJK-aware via string-width). Word-wrap vs hard-cut can differ by a
28
+ * line on pathological words — close enough for viewport slicing.
29
+ */
30
+ export declare function estimateLines(text: string, width: number): number;
31
+ /**
32
+ * One visual row of the wrapped input line: the code-point slice [start, next)
33
+ * of the editor text, hard-cut at `width` display columns (terminal-style soft
34
+ * wrap — same convention estimateLines assumes) with "\n" forcing a break.
35
+ */
36
+ export interface EditorRow {
37
+ text: string;
38
+ /** Code-point offset of this row's first character within the editor text. */
39
+ start: number;
40
+ }
41
+ export interface CaretPosition {
42
+ row: number;
43
+ /** Display column of the caret within its row. */
44
+ col: number;
45
+ /** Code-point offset of the caret relative to its row's start. */
46
+ rowOffset: number;
47
+ totalRows: number;
48
+ }
49
+ /**
50
+ * Hard-wrap the (logically single-line, "\n"-tolerant) editor text into visual
51
+ * rows of at most `width` display columns. CJK-aware via string-width; a
52
+ * character wider than a whole row still occupies its own row.
53
+ */
54
+ export declare function wrapEditorLine(text: string, width: number): EditorRow[];
55
+ /** Locate the caret within wrapEditorLine's layout. O(caret), fine for prompts. */
56
+ export declare function locateCaret(text: string, caret: number, width: number): CaretPosition;
57
+ /** Visual text rows of the input editor at terminal width `cols`. */
58
+ export declare function editorTextRows(text: string, cols: number): number;
59
+ /**
60
+ * Rows the whole bordered input box occupies: 2 border + status row + text.
61
+ * Used by both the layout fold (App) and as InputLine's own height — keep in
62
+ * one place so they can never drift apart.
63
+ */
64
+ export declare function inputBoxRows(editorText: string, cols: number): number;
65
+ /**
66
+ * Sliding viewport over a picker's full item list: pinned to the head while
67
+ * the selection fits in the first window, then the selection rides the
68
+ * window's bottom edge one row per step until the list tail clamps it.
69
+ * Pickers stay short no matter how many sessions/options exist — rendering
70
+ * the full list would blow up the dynamic footer and jolt the scrollback.
71
+ */
72
+ export declare function pickerWindow<T>(items: T[], index: number, max?: number): {
73
+ slice: T[];
74
+ start: number;
75
+ };
76
+ export interface WelcomeInfo {
77
+ version: string;
78
+ cwd: string;
79
+ /** Display labels of the seeded config selects ("" when not advertised). */
80
+ model: string;
81
+ mode: string;
82
+ thought: string;
83
+ }
84
+ /** One rendered line (or block) in the transcript. */
85
+ export type ReplEntry = {
86
+ kind: "user";
87
+ text: string;
88
+ } | {
89
+ kind: "thinking";
90
+ text: string;
91
+ } | {
92
+ kind: "assistant";
93
+ text: string;
94
+ } | {
95
+ kind: "tool";
96
+ id?: string;
97
+ title: string;
98
+ status: string;
99
+ } | {
100
+ kind: "note";
101
+ text: string;
102
+ } | {
103
+ kind: "welcome";
104
+ info: WelcomeInfo;
105
+ };
106
+ /** Live snapshot of a turn in progress (null textBuf/thinkBuf = not streaming). */
107
+ export interface TurnState {
108
+ entries: ReplEntry[];
109
+ textBuf: string;
110
+ thinkBuf: string;
111
+ }
112
+ export declare function createTurnState(): TurnState;
113
+ /**
114
+ * Apply one update to the live turn state. Returns a NEW state object (safe
115
+ * for React-style always-replace updates). Unknown update kinds are ignored.
116
+ */
117
+ export declare function applyUpdate(state: TurnState, update: SessionUpdate): TurnState;
118
+ /**
119
+ * Close out a turn: flush any pending thought/text buffers as final entries
120
+ * and append the stop-reason note. Returns only the finished entries — the
121
+ * turn state is discarded afterwards.
122
+ */
123
+ export declare function finishTurn(state: TurnState, stopReason?: string): ReplEntry[];
124
+ /** REPL meta-commands. Everything else is a prompt. */
125
+ export type ReplCommand = "exit" | "sessions" | "new" | null;
126
+ export declare function parseCommand(text: string): ReplCommand;
127
+ /**
128
+ * One resumable session as shown by the interactive `/sessions` picker.
129
+ * Mirrors the ACP `session/list` entry shape without importing SDK types.
130
+ */
131
+ export interface SessionSummary {
132
+ sessionId: string;
133
+ cwd: string;
134
+ title?: string | null;
135
+ updatedAt?: string | null;
136
+ }
137
+ /**
138
+ * Compact relative age for a session's `updatedAt` ("just now", "5m ago",
139
+ * "2h ago", "3d ago", else the ISO date). Empty for absent/unparsable input.
140
+ */
141
+ export declare function relativeTime(iso: string | null | undefined): string;
142
+ /**
143
+ * A slash command advertised by the bridge (`available_commands_update`).
144
+ */
145
+ export interface CommandInfo {
146
+ name: string;
147
+ description: string;
148
+ }
149
+ /** One select config (model / mode / thought) with its current value. */
150
+ export interface ConfigSelect {
151
+ current: string;
152
+ options: Array<{
153
+ value: string;
154
+ name: string;
155
+ }>;
156
+ }
157
+ /**
158
+ * Session-level status surface: the command menu plus the three config
159
+ * selects, all pushed by the bridge outside the turn stream.
160
+ */
161
+ export interface ReplStatus {
162
+ commands: CommandInfo[];
163
+ model: ConfigSelect | null;
164
+ mode: ConfigSelect | null;
165
+ thought: ConfigSelect | null;
166
+ }
167
+ export declare function createReplStatus(): ReplStatus;
168
+ /** Commands shown before the bridge's first `available_commands_update`. */
169
+ export declare const FALLBACK_COMMANDS: CommandInfo[];
170
+ /**
171
+ * The command menu: bridge-advertised commands (or the fallback list before
172
+ * the first push) with the REPL-local entries merged in front — without the
173
+ * merge, /help and /exit vanish from completion and /help output as soon as
174
+ * the bridge's own list lands (the bridge only advertises ITS commands).
175
+ */
176
+ export declare function commandMenu(status: ReplStatus): CommandInfo[];
177
+ /**
178
+ * Fold a status-relevant session update into the status. Called for EVERY
179
+ * update (idle and in-turn): the config/command pushes that follow a switch
180
+ * slash-command arrive while that turn is still active. Unknown kinds return
181
+ * the SAME object reference so callers can skip the rerender.
182
+ */
183
+ export declare function applyStatusUpdate(status: ReplStatus, update: SessionUpdate): ReplStatus;
184
+ /** Display label for a select's current value (name over raw value). */
185
+ export declare function selectLabel(select: ConfigSelect | null): string;
186
+ /**
187
+ * Seed the status from the session/new RESPONSE: the bridge ships the initial
188
+ * model/mode/thought selects in the response body, not as a follow-up
189
+ * notification (later changes do push config_option_update notifications).
190
+ */
191
+ export declare function seedStatusFromNewSession(status: ReplStatus, response: {
192
+ configOptions?: SessionConfigOption[] | null;
193
+ }): ReplStatus;
194
+ /**
195
+ * Render a config select as note lines: one per option, current marked with a
196
+ * bullet. The raw `value` is what the user types after /model etc., so it is
197
+ * shown whenever it differs from the display name (third-party models).
198
+ */
199
+ export declare function formatConfigList(title: string, select: ConfigSelect | null): string[];
200
+ /**
201
+ * REPL-local commands that never reach the bridge: `/help`, and the arg-less
202
+ * listing form of `/model` `/mode` `/thought` (the bridge rejects those with
203
+ * -32602). Everything else — including the switch forms with an argument —
204
+ * returns null and is sent as a prompt (the bridge's slash interception is
205
+ * the battle-tested path editors use).
206
+ */
207
+ export declare function handleLocalCommand(text: string, status: ReplStatus): ReplEntry[] | null;
208
+ /** One entry of the completion menu below/above the input line. */
209
+ export interface CompletionItem {
210
+ /** Text inserted into the line when chosen (command with "/", or option value). */
211
+ value: string;
212
+ /** Display label shown in the menu. */
213
+ label: string;
214
+ /** Secondary text (command description, or the raw value when it differs). */
215
+ description?: string;
216
+ /** True when this option is the select's current value (● marker). */
217
+ current?: boolean;
218
+ }
219
+ /**
220
+ * Max rows the menu renders — longer lists narrow with the typed prefix.
221
+ * Also the FIXED slot count of the rendered menu block (blanks beyond the
222
+ * candidate count): constant height keeps ink's frame updates equal-size,
223
+ * which is what keeps the top highlight visible (see App.tsx menu block).
224
+ */
225
+ export declare const COMPLETION_LIMIT = 8;
226
+ /** Whether `cmd` (bare name, no slash) takes a completable config argument. */
227
+ export declare function isConfigCommand(cmd: string): boolean;
228
+ /**
229
+ * True when the line sits in a config command's argument menu ("/model v…").
230
+ * There the highlighted option IS the decision — enter executes the switch
231
+ * directly. Every other completion context (command names, skill commands,
232
+ * plugins) only FILLS the line; sending stays the user's explicit choice.
233
+ * Only meaningful when a completion menu is open (line starts with "/").
234
+ */
235
+ export declare function isConfigArgumentMenu(value: string): boolean;
236
+ /** Whether the "/"-prefixed single-token line executes immediately when picked. */
237
+ export declare function isOneShotCommandValue(value: string): boolean;
238
+ /**
239
+ * Completion candidates for the current line, or null outside a completion
240
+ * context:
241
+ * - "/par" → advertised commands matching the prefix ("/" alone = all)
242
+ * - "/model v" → model option values/names matching the argument prefix
243
+ * - other text, a second space, or a select not yet advertised → null/[]
244
+ */
245
+ export declare function completionCandidates(value: string, status: ReplStatus): CompletionItem[] | null;
246
+ /**
247
+ * Insert a chosen candidate into the line. Command completions keep a
248
+ * trailing space so the argument menu opens immediately; option completions
249
+ * replace the argument in place (`/model <value>`).
250
+ */
251
+ export declare function applyCompletion(value: string, item: CompletionItem): string;
252
+ /** One question parsed from the bridge's AskUserQuestion elicitation form. */
253
+ export interface QuestionForm {
254
+ /** Content key the answer must ride under (`q_<i>`). */
255
+ key: string;
256
+ /** The question text. */
257
+ title: string;
258
+ multiSelect: boolean;
259
+ options: Array<{
260
+ value: string;
261
+ label: string;
262
+ }>;
263
+ }
264
+ /**
265
+ * Parse an `elicitation/create` form payload (the bridge's AskUserQuestion
266
+ * mapping — see `buildAskUserElicitationForm`) into renderable questions:
267
+ * `q_<i>` string fields with `oneOf` const/title options (single-select) or
268
+ * array fields with `items.anyOf` (multi-select).
269
+ *
270
+ * The `q_<i>_other` free-text companions are skipped (the picker has a
271
+ * built-in custom-answer row) and the skip sentinel option is dropped (esc
272
+ * covers skip). Returns null when the payload has no renderable question.
273
+ */
274
+ export declare function parseQuestionForm(params: unknown): QuestionForm[] | null;
275
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/repl/model.ts"],"names":[],"mappings":"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"}