@namzu/cli 28.1.1 → 29.0.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.
Files changed (90) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/integrations/subagents/runtime.d.ts +16 -0
  3. package/dist/integrations/subagents/runtime.d.ts.map +1 -1
  4. package/dist/integrations/subagents/runtime.js +34 -4
  5. package/dist/integrations/subagents/runtime.js.map +1 -1
  6. package/dist/tui/AgentExplorer.d.ts +28 -4
  7. package/dist/tui/AgentExplorer.d.ts.map +1 -1
  8. package/dist/tui/AgentExplorer.js +177 -35
  9. package/dist/tui/AgentExplorer.js.map +1 -1
  10. package/dist/tui/App.d.ts.map +1 -1
  11. package/dist/tui/App.js +231 -21
  12. package/dist/tui/App.js.map +1 -1
  13. package/dist/tui/Composer.d.ts.map +1 -1
  14. package/dist/tui/Composer.js +10 -4
  15. package/dist/tui/Composer.js.map +1 -1
  16. package/dist/tui/ComposerFrame.d.ts +10 -1
  17. package/dist/tui/ComposerFrame.d.ts.map +1 -1
  18. package/dist/tui/ComposerFrame.js +27 -4
  19. package/dist/tui/ComposerFrame.js.map +1 -1
  20. package/dist/tui/EffortSlider.d.ts +54 -0
  21. package/dist/tui/EffortSlider.d.ts.map +1 -0
  22. package/dist/tui/EffortSlider.js +131 -0
  23. package/dist/tui/EffortSlider.js.map +1 -0
  24. package/dist/tui/LiveActivity.d.ts +23 -3
  25. package/dist/tui/LiveActivity.d.ts.map +1 -1
  26. package/dist/tui/LiveActivity.js +23 -17
  27. package/dist/tui/LiveActivity.js.map +1 -1
  28. package/dist/tui/Markdown.d.ts +29 -2
  29. package/dist/tui/Markdown.d.ts.map +1 -1
  30. package/dist/tui/Markdown.js +74 -36
  31. package/dist/tui/Markdown.js.map +1 -1
  32. package/dist/tui/StatusBar.js +1 -1
  33. package/dist/tui/StatusBar.js.map +1 -1
  34. package/dist/tui/Transcript.d.ts +24 -1
  35. package/dist/tui/Transcript.d.ts.map +1 -1
  36. package/dist/tui/Transcript.js +35 -8
  37. package/dist/tui/Transcript.js.map +1 -1
  38. package/dist/tui/ViewportBound.d.ts +48 -0
  39. package/dist/tui/ViewportBound.d.ts.map +1 -0
  40. package/dist/tui/ViewportBound.js +55 -0
  41. package/dist/tui/ViewportBound.js.map +1 -0
  42. package/dist/tui/agent-transcript-rows.d.ts +59 -0
  43. package/dist/tui/agent-transcript-rows.d.ts.map +1 -0
  44. package/dist/tui/agent-transcript-rows.js +115 -0
  45. package/dist/tui/agent-transcript-rows.js.map +1 -0
  46. package/dist/tui/agent.d.ts +25 -0
  47. package/dist/tui/agent.d.ts.map +1 -1
  48. package/dist/tui/agent.js +49 -3
  49. package/dist/tui/agent.js.map +1 -1
  50. package/dist/tui/live-window.d.ts +16 -0
  51. package/dist/tui/live-window.d.ts.map +1 -1
  52. package/dist/tui/live-window.js +50 -3
  53. package/dist/tui/live-window.js.map +1 -1
  54. package/dist/tui/markdown-block-cache.d.ts +9 -7
  55. package/dist/tui/markdown-block-cache.d.ts.map +1 -1
  56. package/dist/tui/markdown-block-cache.js +9 -7
  57. package/dist/tui/markdown-block-cache.js.map +1 -1
  58. package/dist/tui/markdown-table.d.ts +55 -0
  59. package/dist/tui/markdown-table.d.ts.map +1 -0
  60. package/dist/tui/markdown-table.js +175 -0
  61. package/dist/tui/markdown-table.js.map +1 -0
  62. package/dist/tui/markdown-wrap.d.ts +53 -0
  63. package/dist/tui/markdown-wrap.d.ts.map +1 -0
  64. package/dist/tui/markdown-wrap.js +189 -0
  65. package/dist/tui/markdown-wrap.js.map +1 -0
  66. package/dist/tui/markdownParser.d.ts +6 -0
  67. package/dist/tui/markdownParser.d.ts.map +1 -1
  68. package/dist/tui/markdownParser.js +49 -10
  69. package/dist/tui/markdownParser.js.map +1 -1
  70. package/dist/tui/slashCommands.d.ts.map +1 -1
  71. package/dist/tui/slashCommands.js +3 -0
  72. package/dist/tui/slashCommands.js.map +1 -1
  73. package/dist/tui/stream-blocks.d.ts.map +1 -1
  74. package/dist/tui/stream-blocks.js +32 -3
  75. package/dist/tui/stream-blocks.js.map +1 -1
  76. package/dist/tui/theme.d.ts +13 -0
  77. package/dist/tui/theme.d.ts.map +1 -1
  78. package/dist/tui/theme.js +16 -0
  79. package/dist/tui/theme.js.map +1 -1
  80. package/dist/tui/types.d.ts +7 -2
  81. package/dist/tui/types.d.ts.map +1 -1
  82. package/dist/tui/units.d.ts +6 -0
  83. package/dist/tui/units.d.ts.map +1 -0
  84. package/dist/tui/units.js +20 -0
  85. package/dist/tui/units.js.map +1 -0
  86. package/dist/tui/web-activity.d.ts +58 -0
  87. package/dist/tui/web-activity.d.ts.map +1 -0
  88. package/dist/tui/web-activity.js +105 -0
  89. package/dist/tui/web-activity.js.map +1 -0
  90. package/package.json +7 -7
@@ -132,8 +132,9 @@ export function splitSafeCut(buffer) {
132
132
  if (lineEnd < buffer.length)
133
133
  cut = lineEnd + 1;
134
134
  // Or the last sentence end inside this line, when the line is still
135
- // growing and nothing after it has arrived.
136
- else {
135
+ // growing and nothing after it has arrived — never inside a table
136
+ // row, whose half would draw as a row with half its cells.
137
+ else if (!line.trimStart().startsWith('|')) {
137
138
  for (const match of line.matchAll(SAFE_CUT)) {
138
139
  const at = offset + match.index + match[0].length;
139
140
  if (backticksBalanced(buffer.slice(0, at)))
@@ -145,7 +146,35 @@ export function splitSafeCut(buffer) {
145
146
  }
146
147
  if (cut < 0)
147
148
  return { ready: '', rest: buffer };
148
- return { ready: buffer.slice(0, cut), rest: buffer.slice(cut) };
149
+ return holdTableHeader(buffer, cut);
150
+ }
151
+ const PIPE_ROW = /^\s*\|/;
152
+ /**
153
+ * Keep a lone `| a | b |` line back until the line after it has arrived.
154
+ *
155
+ * A pipe row is a table's header only once the `|---|` separator follows it;
156
+ * until then the renderer can only draw it as a paragraph, and released early
157
+ * it flashes on screen as raw `| a | b |` source and then jumps into a box
158
+ * when the separator lands. Held one line, it appears as the table it is.
159
+ * Rows after a recognised header are released as they complete: each is a
160
+ * whole row of a table already drawn.
161
+ */
162
+ function holdTableHeader(buffer, cut) {
163
+ const ready = buffer.slice(0, cut);
164
+ const lines = ready.split('\n');
165
+ // `ready` ends at a line end, so its last element is the empty tail.
166
+ const last = ready.endsWith('\n') ? lines.length - 2 : lines.length - 1;
167
+ let first = last;
168
+ while (first >= 0 && PIPE_ROW.test(lines[first] ?? ''))
169
+ first -= 1;
170
+ first += 1;
171
+ // Two or more pipe rows are a table (when the second is a separator) or a
172
+ // paragraph that happens to hold pipes; either way the renderer draws them
173
+ // as what they will stay.
174
+ if (last - first + 1 !== 1)
175
+ return { ready, rest: buffer.slice(cut) };
176
+ const at = first === 0 ? 0 : lines.slice(0, first).join('\n').length + 1;
177
+ return { ready: buffer.slice(0, at), rest: buffer.slice(at) };
149
178
  }
150
179
  /** An even number of backticks: every inline span that opened has closed. */
151
180
  function backticksBalanced(text) {
@@ -1 +1 @@
1
- {"version":3,"file":"stream-blocks.js","sourceRoot":"","sources":["../../src/tui/stream-blocks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream-blocks.js","sourceRoot":"","sources":["../../src/tui/stream-blocks.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,12 @@ export interface SemanticColors {
19
19
  readonly assistant: string;
20
20
  readonly system: string;
21
21
  readonly tool: string;
22
+ /**
23
+ * The orchestrate session mode's own colour (violet), used wherever the
24
+ * mode is named: the effort slider's last stop, the message box's top
25
+ * border tag and the footer segment. Never a status colour.
26
+ */
27
+ readonly orchestrate: string;
22
28
  };
23
29
  readonly status: {
24
30
  readonly ok: string;
@@ -31,4 +37,11 @@ export interface SemanticColors {
31
37
  };
32
38
  }
33
39
  export declare const theme: SemanticColors;
40
+ /**
41
+ * The still colour run drawn across the message box's top rule while
42
+ * orchestrate mode is on, applied one cell at a time and repeated. Static by
43
+ * design: it is never animated, and a renderer without colour draws the plain
44
+ * rule instead.
45
+ */
46
+ export declare const ORCHESTRATE_RULE_COLORS: readonly string[];
34
47
  //# sourceMappingURL=theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,cAAc;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE;QACd,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KACrB,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACtB,CAAA;CACD;AAED,eAAO,MAAM,KAAK,EAAE,cAsBnB,CAAA"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,cAAc;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE;QACd,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB;;;;WAIG;QACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAC5B,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QAChB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;QACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACtB,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACtB,CAAA;CACD;AAED,eAAO,MAAM,KAAK,EAAE,cAuBnB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAQpD,CAAA"}
package/dist/tui/theme.js CHANGED
@@ -18,6 +18,7 @@ export const theme = {
18
18
  assistant: 'ansi256(83)',
19
19
  system: 'ansi256(109)',
20
20
  tool: 'ansi256(248)',
21
+ orchestrate: 'ansi256(141)',
21
22
  },
22
23
  status: {
23
24
  ok: 'ansi256(77)',
@@ -29,4 +30,19 @@ export const theme = {
29
30
  focus: 'ansi256(83)',
30
31
  },
31
32
  };
33
+ /**
34
+ * The still colour run drawn across the message box's top rule while
35
+ * orchestrate mode is on, applied one cell at a time and repeated. Static by
36
+ * design: it is never animated, and a renderer without colour draws the plain
37
+ * rule instead.
38
+ */
39
+ export const ORCHESTRATE_RULE_COLORS = [
40
+ 'ansi256(110)',
41
+ 'ansi256(140)',
42
+ 'ansi256(175)',
43
+ 'ansi256(203)',
44
+ 'ansi256(209)',
45
+ 'ansi256(221)',
46
+ 'ansi256(114)',
47
+ ];
32
48
  //# sourceMappingURL=theme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA2BH,MAAM,CAAC,MAAM,KAAK,GAAmB;IACpC,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE;QACL,OAAO,EAAE,cAAc;QACvB,SAAS,EAAE,cAAc;QACzB,KAAK,EAAE,cAAc;KACrB;IACD,MAAM,EAAE;QACP,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,cAAc;KACpB;IACD,MAAM,EAAE;QACP,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,cAAc;KACrB;IACD,MAAM,EAAE;QACP,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,aAAa;KACpB;CACD,CAAA"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/tui/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiCH,MAAM,CAAC,MAAM,KAAK,GAAmB;IACpC,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE;QACL,OAAO,EAAE,cAAc;QACvB,SAAS,EAAE,cAAc;QACzB,KAAK,EAAE,cAAc;KACrB;IACD,MAAM,EAAE;QACP,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,cAAc;QACtB,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,cAAc;KAC3B;IACD,MAAM,EAAE;QACP,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,cAAc;KACrB;IACD,MAAM,EAAE;QACP,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,aAAa;KACpB;CACD,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACzD,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;CACd,CAAA"}
@@ -19,8 +19,13 @@ export interface TranscriptMessage {
19
19
  /** Structured operator status snapshot; plain content remains available for raw/export. */
20
20
  readonly statusRows?: readonly (readonly [string, string])[];
21
21
  readonly pending?: boolean;
22
- /** Compact successful observation, with full output available on expansion. */
23
- readonly activity?: 'exploration' | 'catalogue' | 'evidence';
22
+ /**
23
+ * Compact successful observation, with full output available on expansion.
24
+ * `web` rows (a search or fetch and its `⎿` line) also sit together without
25
+ * a blank line between consecutive calls, and never wrap: they are cut at
26
+ * the terminal's width with an ellipsis.
27
+ */
28
+ readonly activity?: 'exploration' | 'catalogue' | 'evidence' | 'agent-result' | 'web';
24
29
  /** Overrides the role's default gutter glyph (e.g. a per-tool icon). */
25
30
  readonly glyph?: string;
26
31
  /** Overrides the glyph color (e.g. red for a failed tool). */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** Small unit formatters shared by the live region and the transcript. Pure; no Ink. */
2
+ /** `420ms` → `0.4s`, `3210ms` → `3.2s`, `12000ms` → `12s`, `83000ms` → `1m23s`. */
3
+ export declare function formatElapsed(ms: number): string;
4
+ /** `950` → `950`, `1100` → `1.1k`, `2_500_000` → `2.50M`. */
5
+ export declare function formatCompactCount(value: number): string;
6
+ //# sourceMappingURL=units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/tui/units.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAExF,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMhD;AAED,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxD"}
@@ -0,0 +1,20 @@
1
+ /** Small unit formatters shared by the live region and the transcript. Pure; no Ink. */
2
+ /** `420ms` → `0.4s`, `3210ms` → `3.2s`, `12000ms` → `12s`, `83000ms` → `1m23s`. */
3
+ export function formatElapsed(ms) {
4
+ const s = ms / 1000;
5
+ if (s < 10)
6
+ return `${s.toFixed(1)}s`;
7
+ if (s < 60)
8
+ return `${Math.round(s)}s`;
9
+ const m = Math.floor(s / 60);
10
+ return `${m}m${Math.round(s - m * 60)}s`;
11
+ }
12
+ /** `950` → `950`, `1100` → `1.1k`, `2_500_000` → `2.50M`. */
13
+ export function formatCompactCount(value) {
14
+ if (value < 1_000)
15
+ return String(value);
16
+ if (value < 1_000_000)
17
+ return `${(value / 1_000).toFixed(1)}k`;
18
+ return `${(value / 1_000_000).toFixed(2)}M`;
19
+ }
20
+ //# sourceMappingURL=units.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/tui/units.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAExF,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,EAAU;IACvC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;IACnB,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IACrC,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5B,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAA;AACzC,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC/C,IAAI,KAAK,GAAG,KAAK;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,KAAK,GAAG,SAAS;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IAC9D,OAAO,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;AAC5C,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * How a web search or a page fetch reads in the conversation.
3
+ *
4
+ * A search is one row naming what was searched for, `Web search("query")`,
5
+ * and one `⎿` line under it that says how it is going while it runs
6
+ * (`Searching: query`) and what it came to once it settled
7
+ * (`Found 5 results in 3.2s`, `Did 1 search in 9.0s`). A fetch is the same
8
+ * shape with the address: `Web fetch(https://…)`, `Fetching docs.example.com…`,
9
+ * `Received 7.5KB in 1.2s`. Consecutive web rows sit together without a blank
10
+ * line between them (`Transcript.tsx`), so three searches read as one burst of
11
+ * work rather than three separate events.
12
+ *
13
+ * The query is shown whole on the row and the terminal cuts it at its own
14
+ * width with an ellipsis; nothing here shortens it to a guessed width.
15
+ *
16
+ * Pure, and here rather than in `App.tsx`, so every sentence is testable.
17
+ */
18
+ export type WebActivityKind = 'search' | 'fetch';
19
+ /** What the host knows about one web call. Everything but `kind` may be unknown. */
20
+ export interface WebActivity {
21
+ readonly kind: WebActivityKind;
22
+ /** The query searched for, or the address fetched. */
23
+ readonly target?: string;
24
+ /** Results the provider or tool reported. Absent means unknown, not zero. */
25
+ readonly results?: number;
26
+ /** Run inside the provider's own request: there is no local output to show. */
27
+ readonly hosted?: boolean;
28
+ }
29
+ /** The web kind of a registry tool name, or `undefined` for every other tool. */
30
+ export declare function webActivityKind(toolName: string): WebActivityKind | undefined;
31
+ /**
32
+ * The web activity a local tool call describes, read from its input.
33
+ *
34
+ * `query` for a search and `url` for a fetch, which is what both the SDK's own
35
+ * tools and the Exa-backed search take. Anything else is left unnamed rather
36
+ * than guessed at.
37
+ */
38
+ export declare function webActivityFromInput(toolName: string, input: unknown): WebActivity | undefined;
39
+ /** `Web search("query")`, `Web fetch(https://…)`, or the bare name when nothing is known yet. */
40
+ export declare function webCallTitle(activity: WebActivity): string;
41
+ /** The `⎿` line while the call runs. */
42
+ export declare function webLiveStatus(activity: WebActivity): string;
43
+ /** The `⎿` line once the call settled successfully. */
44
+ export declare function webSettledLine(activity: WebActivity, outcome: {
45
+ readonly durationMs?: number;
46
+ readonly bytes?: number;
47
+ }): string;
48
+ /**
49
+ * How many results a local search listed.
50
+ *
51
+ * The SDK's search prints one `N. title` line per hit and Exa one `URL: …`
52
+ * line per hit; whichever shape the output has is counted. Output with neither
53
+ * — an error, or a service that answered in prose — counts as unknown.
54
+ */
55
+ export declare function countListedResults(output: string | undefined): number | undefined;
56
+ /** `512B`, `7.5KB`, `1.2MB`. */
57
+ export declare function formatBytes(bytes: number): string;
58
+ //# sourceMappingURL=web-activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-activity.d.ts","sourceRoot":"","sources":["../../src/tui/web-activity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEhD,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;IAC9B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAI7E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAU9F;AAED,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAI1D;AAED,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,CAI3D;AAED,uDAAuD;AACvD,wBAAgB,cAAc,CAC7B,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChE,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOjF;AAED,gCAAgC;AAChC,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * How a web search or a page fetch reads in the conversation.
3
+ *
4
+ * A search is one row naming what was searched for, `Web search("query")`,
5
+ * and one `⎿` line under it that says how it is going while it runs
6
+ * (`Searching: query`) and what it came to once it settled
7
+ * (`Found 5 results in 3.2s`, `Did 1 search in 9.0s`). A fetch is the same
8
+ * shape with the address: `Web fetch(https://…)`, `Fetching docs.example.com…`,
9
+ * `Received 7.5KB in 1.2s`. Consecutive web rows sit together without a blank
10
+ * line between them (`Transcript.tsx`), so three searches read as one burst of
11
+ * work rather than three separate events.
12
+ *
13
+ * The query is shown whole on the row and the terminal cuts it at its own
14
+ * width with an ellipsis; nothing here shortens it to a guessed width.
15
+ *
16
+ * Pure, and here rather than in `App.tsx`, so every sentence is testable.
17
+ */
18
+ import { formatElapsed } from './units.js';
19
+ /** The web kind of a registry tool name, or `undefined` for every other tool. */
20
+ export function webActivityKind(toolName) {
21
+ if (toolName === 'web_search')
22
+ return 'search';
23
+ if (toolName === 'web_fetch')
24
+ return 'fetch';
25
+ return undefined;
26
+ }
27
+ /**
28
+ * The web activity a local tool call describes, read from its input.
29
+ *
30
+ * `query` for a search and `url` for a fetch, which is what both the SDK's own
31
+ * tools and the Exa-backed search take. Anything else is left unnamed rather
32
+ * than guessed at.
33
+ */
34
+ export function webActivityFromInput(toolName, input) {
35
+ const kind = webActivityKind(toolName);
36
+ if (!kind)
37
+ return undefined;
38
+ const field = kind === 'search' ? 'query' : 'url';
39
+ const value = input !== null && typeof input === 'object'
40
+ ? input[field]
41
+ : undefined;
42
+ const target = typeof value === 'string' ? oneLine(value) : '';
43
+ return target.length > 0 ? { kind, target } : { kind };
44
+ }
45
+ /** `Web search("query")`, `Web fetch(https://…)`, or the bare name when nothing is known yet. */
46
+ export function webCallTitle(activity) {
47
+ const target = activity.target ? oneLine(activity.target) : '';
48
+ if (activity.kind === 'search')
49
+ return target ? `Web search("${target}")` : 'Web search';
50
+ return target ? `Web fetch(${target})` : 'Web fetch';
51
+ }
52
+ /** The `⎿` line while the call runs. */
53
+ export function webLiveStatus(activity) {
54
+ const target = activity.target ? oneLine(activity.target) : '';
55
+ if (activity.kind === 'search')
56
+ return target ? `Searching: ${target}` : 'Searching…';
57
+ return target ? `Fetching ${hostOf(target)}…` : 'Fetching…';
58
+ }
59
+ /** The `⎿` line once the call settled successfully. */
60
+ export function webSettledLine(activity, outcome) {
61
+ const took = outcome.durationMs !== undefined ? ` in ${formatElapsed(outcome.durationMs)}` : '';
62
+ if (activity.kind === 'search') {
63
+ const n = activity.results;
64
+ return n !== undefined ? `Found ${n} result${n === 1 ? '' : 's'}${took}` : `Did 1 search${took}`;
65
+ }
66
+ return outcome.bytes !== undefined
67
+ ? `Received ${formatBytes(outcome.bytes)}${took}`
68
+ : `Fetched${took}`;
69
+ }
70
+ /**
71
+ * How many results a local search listed.
72
+ *
73
+ * The SDK's search prints one `N. title` line per hit and Exa one `URL: …`
74
+ * line per hit; whichever shape the output has is counted. Output with neither
75
+ * — an error, or a service that answered in prose — counts as unknown.
76
+ */
77
+ export function countListedResults(output) {
78
+ if (!output)
79
+ return undefined;
80
+ const lines = output.split('\n');
81
+ const numbered = lines.filter((line) => /^\s{0,3}\d+\.\s+\S/.test(line)).length;
82
+ const addressed = lines.filter((line) => /^\s*URL:\s*\S/.test(line)).length;
83
+ const count = Math.max(numbered, addressed);
84
+ return count > 0 ? count : undefined;
85
+ }
86
+ /** `512B`, `7.5KB`, `1.2MB`. */
87
+ export function formatBytes(bytes) {
88
+ if (bytes < 1024)
89
+ return `${bytes}B`;
90
+ if (bytes < 1024 * 1024)
91
+ return `${(bytes / 1024).toFixed(1)}KB`;
92
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
93
+ }
94
+ function hostOf(target) {
95
+ try {
96
+ return new URL(target).host || target;
97
+ }
98
+ catch {
99
+ return target;
100
+ }
101
+ }
102
+ function oneLine(text) {
103
+ return text.replace(/\s+/g, ' ').trim();
104
+ }
105
+ //# sourceMappingURL=web-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-activity.js","sourceRoot":"","sources":["../../src/tui/web-activity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namzu/cli",
3
- "version": "28.1.1",
3
+ "version": "29.0.0",
4
4
  "description": "Interactive and headless terminal agent for Namzu, with provider discovery, durable sessions, tools and diagnostics.",
5
5
  "keywords": [
6
6
  "namzu",
@@ -46,16 +46,16 @@
46
46
  "react": "19.2.6",
47
47
  "string-width": "8.2.1",
48
48
  "yaml": "^2.9.0",
49
- "@namzu/deepseek": "^2.0.0",
49
+ "@namzu/anthropic": "6.1.0",
50
50
  "@namzu/computer-use": "1.4.3",
51
+ "@namzu/deepseek": "^2.0.0",
51
52
  "@namzu/files": "1.1.1",
52
53
  "@namzu/ollama": "2.2.4",
53
- "@namzu/anthropic": "6.0.1",
54
- "@namzu/openai": "4.0.0",
54
+ "@namzu/openai": "4.1.0",
55
55
  "@namzu/openrouter": "3.0.1",
56
- "@namzu/sdk": "^44.2.0",
57
- "@namzu/zen": "^2.5.0",
58
- "@namzu/google": "^1.0.0"
56
+ "@namzu/sdk": "^44.3.0",
57
+ "@namzu/google": "^1.1.0",
58
+ "@namzu/zen": "^2.5.0"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@biomejs/biome": "^1.9.4",