@markusylisiurunen/tau 0.3.35 → 0.3.37

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/README.md +62 -15
  2. package/dist/core/auth/cli.js +10 -0
  3. package/dist/core/auth/cli.js.map +1 -1
  4. package/dist/core/auth/providers/openai_codex.js +36 -16
  5. package/dist/core/auth/providers/openai_codex.js.map +1 -1
  6. package/dist/core/cli.js +7 -0
  7. package/dist/core/cli.js.map +1 -1
  8. package/dist/core/config/builtin_themes.js +0 -93
  9. package/dist/core/config/builtin_themes.js.map +1 -1
  10. package/dist/core/config/client_tools.js +109 -0
  11. package/dist/core/config/client_tools.js.map +1 -0
  12. package/dist/core/config/index.js.map +1 -1
  13. package/dist/core/config/schema.js +33 -1
  14. package/dist/core/config/schema.js.map +1 -1
  15. package/dist/core/debug.js +16 -30
  16. package/dist/core/debug.js.map +1 -1
  17. package/dist/core/runtime/runtime_bootstrap.js +68 -25
  18. package/dist/core/runtime/runtime_bootstrap.js.map +1 -1
  19. package/dist/core/telegram/adapter.js +319 -67
  20. package/dist/core/telegram/adapter.js.map +1 -1
  21. package/dist/core/telegram/config.js +1 -1
  22. package/dist/core/telegram/runtime.js +20 -1
  23. package/dist/core/telegram/runtime.js.map +1 -1
  24. package/dist/core/telegram/session_manager.js +12 -0
  25. package/dist/core/telegram/session_manager.js.map +1 -1
  26. package/dist/core/tools/tool_names.js +1 -0
  27. package/dist/core/tools/tool_names.js.map +1 -1
  28. package/dist/core/tools/view_image.js +8 -5
  29. package/dist/core/tools/view_image.js.map +1 -1
  30. package/dist/core/utils/context.js +0 -1
  31. package/dist/core/utils/context.js.map +1 -1
  32. package/dist/core/utils/context_builder.js +2 -3
  33. package/dist/core/utils/context_builder.js.map +1 -1
  34. package/dist/core/utils/spawn_capture.js +58 -22
  35. package/dist/core/utils/spawn_capture.js.map +1 -1
  36. package/dist/core/utils/user_metadata.js +14 -0
  37. package/dist/core/utils/user_metadata.js.map +1 -1
  38. package/dist/core/version.js +1 -1
  39. package/dist/main.js +91 -31
  40. package/dist/main.js.map +1 -1
  41. package/dist/protocol/session_protocol.d.ts +1 -1
  42. package/dist/protocol/session_protocol.js +1 -1
  43. package/dist/sdk/client.js +7 -108
  44. package/dist/sdk/client.js.map +1 -1
  45. package/dist/sdk/index.d.ts +1 -1
  46. package/dist/sdk/index.js.map +1 -1
  47. package/dist/sdk/local_client.d.ts +3 -0
  48. package/dist/sdk/local_client.js +106 -0
  49. package/dist/sdk/local_client.js.map +1 -0
  50. package/dist/sdk/session.js +22 -3
  51. package/dist/sdk/session.js.map +1 -1
  52. package/dist/store/session_snapshot_migrations.js +5 -1
  53. package/dist/store/session_snapshot_migrations.js.map +1 -1
  54. package/dist/transport/in_process_session_transport.js +3 -0
  55. package/dist/transport/in_process_session_transport.js.map +1 -1
  56. package/dist/transport/index.d.ts +1 -1
  57. package/dist/transport/index.js.map +1 -1
  58. package/dist/transport/session_protocol_transport_helpers.js +10 -0
  59. package/dist/transport/session_protocol_transport_helpers.js.map +1 -1
  60. package/dist/transport/session_transport.d.ts +2 -0
  61. package/dist/transport/stdio_session_transport.d.ts +3 -1
  62. package/dist/transport/stdio_session_transport.js +13 -6
  63. package/dist/transport/stdio_session_transport.js.map +1 -1
  64. package/dist/transport/websocket_session_transport.d.ts +3 -1
  65. package/dist/transport/websocket_session_transport.js +11 -2
  66. package/dist/transport/websocket_session_transport.js.map +1 -1
  67. package/dist/tui/chat_controller/diff_review_service.js +12 -11
  68. package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
  69. package/dist/tui/chat_controller/diff_review_user_message.js +1 -0
  70. package/dist/tui/chat_controller/diff_review_user_message.js.map +1 -1
  71. package/dist/tui/chat_controller/history_message_model.js +4 -1
  72. package/dist/tui/chat_controller/history_message_model.js.map +1 -1
  73. package/dist/tui/chat_view.js +0 -11
  74. package/dist/tui/chat_view.js.map +1 -1
  75. package/dist/tui/command_client_tools.js +80 -0
  76. package/dist/tui/command_client_tools.js.map +1 -0
  77. package/dist/tui/session_chat_app.js +72 -5
  78. package/dist/tui/session_chat_app.js.map +1 -1
  79. package/dist/tui/session_chat_controller.js +30 -56
  80. package/dist/tui/session_chat_controller.js.map +1 -1
  81. package/dist/tui/ui/theme/palette.js +0 -3
  82. package/dist/tui/ui/theme/palette.js.map +1 -1
  83. package/dist/tui/ui/theme/theme.js.map +1 -1
  84. package/dist/tui/ui/user_message.js +4 -10
  85. package/dist/tui/ui/user_message.js.map +1 -1
  86. package/package.json +1 -1
  87. package/dist/core/utils/agents_files.js +0 -282
  88. package/dist/core/utils/agents_files.js.map +0 -1
  89. package/dist/tui/memory_mode.js +0 -24
  90. package/dist/tui/memory_mode.js.map +0 -1
@@ -1,16 +1,32 @@
1
1
  import { spawn as spawnProcess } from "node:child_process";
2
2
  import { createInterface } from "node:readline/promises";
3
+ import { Type } from "typebox";
4
+ import { z } from "zod";
3
5
  import { createCommandRegistry } from "../core/commands/index.js";
4
6
  import { DIFF_REVIEW_TOOL } from "../core/diff_review/index.js";
7
+ import { TOOL_NAME_PREFILL_INPUT } from "../core/tools/tool_names.js";
8
+ import { formatZodError } from "../core/utils/zod.js";
5
9
  import { createTauSdkClientFromTransport } from "../sdk/session.js";
6
10
  import { StdioSessionProtocolTransport } from "../transport/stdio_session_transport.js";
7
11
  import { WebSocketSessionProtocolTransport } from "../transport/websocket_session_transport.js";
8
12
  import { TuiChatView } from "./chat_view.js";
13
+ import { createCommandClientTools } from "./command_client_tools.js";
9
14
  import { EXIT_DOUBLE_PRESS_WINDOW_MS, EXIT_TOAST_DURATION_MS } from "./constants.js";
10
15
  import { SessionChatController } from "./session_chat_controller.js";
11
16
  import { SlashAutocompleteProvider } from "./ui/slash_autocomplete.js";
17
+ const prefillInputArgsSchema = z
18
+ .object({
19
+ text: z
20
+ .string()
21
+ .min(1)
22
+ .refine((value) => value.trim().length > 0, "must contain non-whitespace text"),
23
+ })
24
+ .strict();
12
25
  export function createTuiClientTools(options) {
13
- return [
26
+ if (!options.enabled) {
27
+ return [];
28
+ }
29
+ const tools = [
14
30
  {
15
31
  schema: {
16
32
  ...DIFF_REVIEW_TOOL,
@@ -24,7 +40,45 @@ export function createTuiClientTools(options) {
24
40
  return await controller.runClientDiffReview(args, context.signal);
25
41
  },
26
42
  },
43
+ {
44
+ schema: {
45
+ name: TOOL_NAME_PREFILL_INPUT,
46
+ description: [
47
+ "Prefill the user's TUI input editor with a draft for them to review, edit, and submit.",
48
+ "Use this sparingly, only when an editable structured draft would save the user meaningful effort; respond normally for routine content.",
49
+ "Use short, obvious placeholders such as [name] or [details] for information only the user can provide.",
50
+ "This tool does not submit the input and fails without changing the editor when it already contains text.",
51
+ ].join(" "),
52
+ parameters: Type.Object({
53
+ text: Type.String({
54
+ minLength: 1,
55
+ pattern: "\\S",
56
+ description: "Complete non-blank draft text to place in the empty input editor.",
57
+ }),
58
+ }, { additionalProperties: false }),
59
+ },
60
+ execute: (args) => {
61
+ const parsed = prefillInputArgsSchema.safeParse(args);
62
+ if (!parsed.success) {
63
+ throw new Error(`Invalid prefill_input arguments: ${formatZodError(parsed.error)}`);
64
+ }
65
+ const controller = options.getController();
66
+ if (!controller) {
67
+ throw new Error("prefill_input is unavailable because the TUI is not ready");
68
+ }
69
+ return controller.prefillInput(parsed.data.text);
70
+ },
71
+ },
27
72
  ];
73
+ tools.push(...createCommandClientTools(options.commandTools ?? [], options.deps));
74
+ const names = new Set();
75
+ for (const tool of tools) {
76
+ if (names.has(tool.schema.name)) {
77
+ throw new Error(`duplicate TUI client tool '${tool.schema.name}'`);
78
+ }
79
+ names.add(tool.schema.name);
80
+ }
81
+ return tools;
28
82
  }
29
83
  export class SessionChatApp {
30
84
  view;
@@ -39,6 +93,13 @@ export class SessionChatApp {
39
93
  this.initialUserMessage = options.initialUserMessage;
40
94
  }
41
95
  static async connect(options) {
96
+ let controller;
97
+ const clientTools = createTuiClientTools({
98
+ enabled: options.clientToolsEnabled,
99
+ getController: () => controller,
100
+ commandTools: options.config?.clientTools,
101
+ deps: options.deps,
102
+ });
42
103
  const transport = options.transport === "stdio"
43
104
  ? new StdioSessionProtocolTransport(spawnProcess(options.command, options.args, {
44
105
  stdio: "pipe",
@@ -47,14 +108,16 @@ export class SessionChatApp {
47
108
  url: options.url,
48
109
  authToken: options.authToken,
49
110
  });
50
- let controller;
51
111
  const client = await createTauSdkClientFromTransport(transport, {
52
112
  initialize: { client: { name: "tau-tui", version: "1" } },
53
- clientTools: createTuiClientTools({ getController: () => controller }),
113
+ clientTools,
54
114
  });
55
115
  const app = await SessionChatApp.open({
56
116
  ...options,
57
117
  client,
118
+ configuredClientToolNames: options.clientToolsEnabled
119
+ ? (options.config?.clientTools ?? []).map((tool) => tool.name)
120
+ : [],
58
121
  targetLabel: options.transport === "stdio" ? [options.command, ...options.args].join(" ") : options.url,
59
122
  });
60
123
  controller = app.controller;
@@ -62,12 +125,15 @@ export class SessionChatApp {
62
125
  }
63
126
  static async open(options) {
64
127
  try {
65
- const session = await resolveSession(options.client, options.sessionSelection);
128
+ const [session, terminalAppearance] = await Promise.all([
129
+ resolveSession(options.client, options.sessionSelection),
130
+ options.terminalAppearance,
131
+ ]);
66
132
  const snapshot = await session.snapshot();
67
133
  const view = new TuiChatView({
68
134
  compactToolUi: true,
69
135
  showThinking: false,
70
- terminalAppearance: options.terminalAppearance,
136
+ terminalAppearance,
71
137
  themeId: options.themeId,
72
138
  themes: options.themes ?? [],
73
139
  });
@@ -78,6 +144,7 @@ export class SessionChatApp {
78
144
  snapshot,
79
145
  createSession: (input) => options.client.sessions.create(input),
80
146
  targetLabel: options.targetLabel,
147
+ configuredClientToolNames: options.configuredClientToolNames,
81
148
  config: options.config,
82
149
  defaultDiffTool: options.defaultDiffTool,
83
150
  deps: options.deps,
@@ -1 +1 @@
1
- {"version":3,"file":"session_chat_app.js","sourceRoot":"","sources":["../../src/tui/session_chat_app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session_chat_app.js","sourceRoot":"","sources":["../../src/tui/session_chat_app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAQlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yCAAyC,CAAC;AACxF,OAAO,EAAE,iCAAiC,EAAE,MAAM,6CAA6C,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAmCvE,MAAM,sBAAsB,GAAG,CAAC;KAC7B,MAAM,CAAC;IACN,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,kCAAkC,CAAC;CAClF,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,UAAU,oBAAoB,CAAC,OAKpC;IACC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAuB;QAChC;YACE,MAAM,EAAE;gBACN,GAAG,gBAAgB;gBACnB,kBAAkB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;aACnC;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;gBAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBAC7E,CAAC;gBACD,OAAO,MAAM,UAAU,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACpE,CAAC;SACF;QACD;YACE,MAAM,EAAE;gBACN,IAAI,EAAE,uBAAuB;gBAC7B,WAAW,EAAE;oBACX,wFAAwF;oBACxF,yIAAyI;oBACzI,wGAAwG;oBACxG,0GAA0G;iBAC3G,CAAC,IAAI,CAAC,GAAG,CAAC;gBACX,UAAU,EAAE,IAAI,CAAC,MAAM,CACrB;oBACE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;wBAChB,SAAS,EAAE,CAAC;wBACZ,OAAO,EAAE,KAAK;wBACd,WAAW,EAAE,mEAAmE;qBACjF,CAAC;iBACH,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;aACF;YACD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAChB,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,oCAAoC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACtF,CAAC;gBACD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;gBAC/E,CAAC;gBACD,OAAO,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC;SACF;KACF,CAAC;IAEF,KAAK,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAElF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAeD,MAAM,OAAO,cAAc;IACR,IAAI,CAAc;IAClB,UAAU,CAAwB;IAClC,MAAM,CAAe;IACrB,kBAAkB,CAAU;IACrC,WAAW,CAAU;IAE7B,YAAoB,OAKnB;QACC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAoC;QACvD,IAAI,UAA6C,CAAC;QAClD,MAAM,WAAW,GAAG,oBAAoB,CAAC;YACvC,OAAO,EAAE,OAAO,CAAC,kBAAkB;YACnC,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU;YAC/B,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW;YACzC,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,MAAM,SAAS,GACb,OAAO,CAAC,SAAS,KAAK,OAAO;YAC3B,CAAC,CAAC,IAAI,6BAA6B,CAC/B,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;gBAC1C,KAAK,EAAE,MAAM;aACd,CAAC,CACH;YACH,CAAC,CAAC,IAAI,iCAAiC,CAAC;gBACpC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B,CAAC,CAAC;QACT,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC,SAAS,EAAE;YAC9D,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;YACzD,WAAW;SACZ,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC;YACpC,GAAG,OAAO;YACV,MAAM;YACN,yBAAyB,EAAE,OAAO,CAAC,kBAAkB;gBACnD,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC9D,CAAC,CAAC,EAAE;YACN,WAAW,EACT,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;SAC7F,CAAC,CAAC;QACH,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAA8B;QAC9C,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACtD,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC;gBACxD,OAAO,CAAC,kBAAkB;aAC3B,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC;gBAC3B,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAE,KAAK;gBACnB,kBAAkB;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;aAC7B,CAAC,CAAC;YACH,IAAI,GAAmB,CAAC;YACxB,MAAM,UAAU,GAAG,IAAI,qBAAqB,CAAC;gBAC3C,IAAI;gBACJ,OAAO;gBACP,QAAQ;gBACR,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC/D,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,yBAAyB,EAAE,OAAO,CAAC,yBAAyB;gBAC5D,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE;aACzB,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,EAAE,CAAC;YACpD,IAAI,CAAC,uBAAuB,CAC1B,IAAI,yBAAyB,CAC3B,qBAAqB,EAAE,EACvB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,MAAM,EACd,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC7B,IAAI,MAAM,CAAC,OAAO;oBAAE,OAAO,EAAE,CAAC;gBAC9B,OAAO,MAAM,OAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACvD,CAAC,EACD,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,SAAS,CAClB,CACF,CAAC;YACF,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAC/C,GAAG,GAAG,IAAI,cAAc,CAAC;gBACvB,IAAI;gBACJ,UAAU;gBACV,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;aAC/C,CAAC,CAAC;YACH,QAAQ,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YAC3C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACjC,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,WAAW;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,2BAA2B,EAAE,CAAC;YAC5F,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,4BAA4B,EAAE,MAAM,EAAE;YAC/D,eAAe,EAAE,sBAAsB;SACxC,CAAC,CAAC;IACL,CAAC;IAEO,IAAI;QACV,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;CACF;AAED,KAAK,UAAU,cAAc,CAC3B,MAAoB,EACpB,SAA+B;IAE/B,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;QACvB,KAAK,QAAQ;YACX,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC5D,KAAK,QAAQ;YACX,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvD,KAAK,QAAQ;YACX,OAAO,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAoB;IAC/C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC,CAAC;iBACzF,IAAI,EAAE;iBACN,WAAW,EAAE,CAAC;YACjB,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;gBACvC,OAAO,MAAM,uBAAuB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEvC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtF,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACvC,OAAO,MAAM,uBAAuB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACtE,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,MAAoB,EACpB,EAAsC;IAEtC,MAAM,OAAO,GAAG,CACd,MAAM,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC,CAC3F;SACE,IAAI,EAAE;SACN,WAAW,EAAE,CAAC;IACjB,MAAM,IAAI,GACR,OAAO,KAAK,EAAE;QACZ,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,oBAAoB,IAAI,OAAO,KAAK,YAAY;YACnF,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,SAAS,CAAC;IAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAClC,oBAAoB,EAAE;gBACpB,IAAI;gBACJ,GAAG;aACJ;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAClC,oBAAoB,EAAE;gBACpB,IAAI;gBACJ,QAAQ;gBACR,SAAS;gBACT,GAAG;aACJ;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,oBAAoB,EAAE;YACpB,IAAI;YACJ,KAAK;YACL,UAAU;YACV,GAAG;SACJ;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1,4 +1,3 @@
1
- import { randomUUID } from "node:crypto";
2
1
  import { dirname } from "node:path/posix";
3
2
  import { createCommandRegistry, } from "../core/commands/index.js";
4
3
  import { getGoogleApiKey } from "../core/config/index.js";
@@ -26,7 +25,6 @@ import { formatDurationMs, formatSessionCost } from "./chat_controller/status_fo
26
25
  import { copyTextToClipboard } from "./clipboard.js";
27
26
  import { DOUBLE_PRESS_WINDOW_MS } from "./constants.js";
28
27
  import { cleanupListenTempFile, createListenTempFilePath, getSpeechToTextApiKey, getSpeechToTextApiKeyErrorMessage, LISTEN_RECORDING_MAX_DURATION_MS, LISTEN_RECORDING_MIN_BYTES, readListenAudio, startListenAudioCapture, transcribeListenAudio, } from "./listen_capture.js";
29
- import { formatDefaultMemoryModeFilePath, formatMemoryModeUserMessage } from "./memory_mode.js";
30
28
  import { createSdkDiffSnapshotDeps, createSdkToolExecutionBackend, } from "./session_tool_execution_backend.js";
31
29
  import { runSpeechPlaybackTask } from "./speech_playback.js";
32
30
  const CAFFEINATE_COMMAND = "/usr/bin/caffeinate";
@@ -35,6 +33,7 @@ export class SessionChatController {
35
33
  session;
36
34
  createSession;
37
35
  targetLabel;
36
+ configuredClientToolNames;
38
37
  config;
39
38
  defaultDiffTool;
40
39
  diffToolLauncher;
@@ -47,7 +46,6 @@ export class SessionChatController {
47
46
  snapshot;
48
47
  renderedMessageIds = [];
49
48
  hiddenHistoryEntryIds = new Set();
50
- clientRenderedUserMessages = new Map();
51
49
  observedSessionRevision;
52
50
  eventUnsubscribe;
53
51
  pendingUserMessagesUnsubscribe;
@@ -62,7 +60,6 @@ export class SessionChatController {
62
60
  sessionReplacementInProgress = false;
63
61
  isBashMode = false;
64
62
  isBashIncognito = false;
65
- isMemoryMode = false;
66
63
  showThinking = false;
67
64
  compactToolUi = true;
68
65
  commandHint;
@@ -85,6 +82,7 @@ export class SessionChatController {
85
82
  this.createSession = options.createSession;
86
83
  this.snapshot = options.snapshot;
87
84
  this.targetLabel = options.targetLabel;
85
+ this.configuredClientToolNames = options.configuredClientToolNames ?? [];
88
86
  this.config = options.config ?? {};
89
87
  this.defaultDiffTool = options.defaultDiffTool;
90
88
  this.diffToolLauncher = options.diffToolLauncher;
@@ -269,20 +267,7 @@ export class SessionChatController {
269
267
  }
270
268
  return;
271
269
  }
272
- if (this.isSingleLineInput(text) && trimmed.startsWith("#")) {
273
- const request = trimmed.slice(1).trim();
274
- if (!request) {
275
- this.view.addSystemMessage("memory mode request was empty.", "warn");
276
- return;
277
- }
278
- const agentsFilePath = formatDefaultMemoryModeFilePath(this.snapshot.executionEnvironment.cwd);
279
- await this.submitUserText(request, {
280
- textForModel: formatMemoryModeUserMessage(agentsFilePath, request),
281
- kind: "memory",
282
- });
283
- return;
284
- }
285
- await this.submitUserText(trimmed);
270
+ await this.runSessionTurn(() => this.session.submit(trimmed));
286
271
  }
287
272
  async onUserInput(text) {
288
273
  await this.handleSubmit(text);
@@ -302,21 +287,17 @@ export class SessionChatController {
302
287
  handleEditorChange(text) {
303
288
  const wasBash = this.isBashMode;
304
289
  const wasBashIncognito = this.isBashIncognito;
305
- const wasMemory = this.isMemoryMode;
306
290
  const previousCommandHint = this.commandHint;
307
291
  if (text.trim().length > 0) {
308
292
  this.lastEmptySubmitAt = undefined;
309
293
  }
310
294
  const trimmed = text.trimStart();
311
- const isSingleLine = this.isSingleLineInput(text);
312
295
  const isIncognito = trimmed.startsWith("!!");
313
296
  this.isBashIncognito = isIncognito;
314
297
  this.isBashMode = trimmed.startsWith("!") && !isIncognito;
315
- this.isMemoryMode = isSingleLine && trimmed.startsWith("#");
316
298
  this.commandHint = this.getCommandHintForInput(text);
317
299
  if (wasBash !== this.isBashMode ||
318
300
  wasBashIncognito !== this.isBashIncognito ||
319
- wasMemory !== this.isMemoryMode ||
320
301
  previousCommandHint !== this.commandHint) {
321
302
  this.refreshStatus();
322
303
  }
@@ -357,6 +338,10 @@ export class SessionChatController {
357
338
  if (this.snapshot.catalog.skills.length > 0) {
358
339
  parts.push(`${this.snapshot.catalog.skills.length} skills`);
359
340
  }
341
+ if (this.configuredClientToolNames.length > 0) {
342
+ const count = this.configuredClientToolNames.length;
343
+ parts.push(`${count} client tool${count === 1 ? "" : "s"}`);
344
+ }
360
345
  return parts.join(" · ");
361
346
  }
362
347
  buildStartupIntroBody() {
@@ -364,7 +349,6 @@ export class SessionChatController {
364
349
  "type `/help` for commands and keybindings",
365
350
  "mention files with `@`, agents and skills with `@@`",
366
351
  "run bash commands with `!` or `!!`",
367
- "use `#` to update AGENTS.md",
368
352
  ];
369
353
  if (this.snapshot.catalog.skills.length > 0) {
370
354
  lines.push("", "skills:");
@@ -380,21 +364,15 @@ export class SessionChatController {
380
364
  lines.push(` ${agentsFile}`);
381
365
  }
382
366
  }
367
+ if (this.configuredClientToolNames.length > 0) {
368
+ lines.push("", "client tools:");
369
+ for (const clientToolName of this.configuredClientToolNames) {
370
+ lines.push(` ${clientToolName}`);
371
+ }
372
+ }
383
373
  lines.push("", this.formatSessionIdentityText());
384
374
  return lines;
385
375
  }
386
- async submitUserText(text, options = {}) {
387
- const historyEntryId = `session-user-${randomUUID()}`;
388
- const model = {
389
- type: "user",
390
- text,
391
- ...(options.kind ? { kind: options.kind } : {}),
392
- };
393
- this.clientRenderedUserMessages.set(historyEntryId, model);
394
- this.view.addMessage(model, historyEntryId);
395
- this.renderedMessageIds.push(historyEntryId);
396
- await this.runSessionTurn(() => this.session.submit(options.textForModel ?? text, { historyEntryId }));
397
- }
398
376
  async retryTurn() {
399
377
  await this.runSessionTurn(() => this.session.retry());
400
378
  }
@@ -492,7 +470,7 @@ export class SessionChatController {
492
470
  return;
493
471
  }
494
472
  if (!this.isSessionOperationActive()) {
495
- await this.submitUserText(trimmed);
473
+ await this.runSessionTurn(() => this.session.submit(trimmed));
496
474
  return;
497
475
  }
498
476
  if (this.isBlockingSessionOperationActive()) {
@@ -502,9 +480,7 @@ export class SessionChatController {
502
480
  this.submitSteeringText(trimmed);
503
481
  }
504
482
  submitQueuedText(text) {
505
- void this.session
506
- .queue(text, { historyEntryId: `session-queue-${randomUUID()}` })
507
- .catch((error) => {
483
+ void this.session.queue(text).catch((error) => {
508
484
  if (!this.isPendingMessageCancellation(error)) {
509
485
  this.view.addSystemMessage(`queueing failed: ${formatSessionError(error)}`, "error");
510
486
  }
@@ -1084,9 +1060,6 @@ export class SessionChatController {
1084
1060
  const staleIds = this.renderedMessageIds.filter((id) => !snapshotIds.has(id));
1085
1061
  if (staleIds.length > 0) {
1086
1062
  this.view.removeMessages(staleIds);
1087
- for (const id of staleIds) {
1088
- this.clientRenderedUserMessages.delete(id);
1089
- }
1090
1063
  }
1091
1064
  const renderedIds = new Set(this.renderedMessageIds);
1092
1065
  this.renderedMessageIds.splice(0, this.renderedMessageIds.length, ...this.renderedMessageIds.filter((id) => snapshotIds.has(id)));
@@ -1097,7 +1070,7 @@ export class SessionChatController {
1097
1070
  }
1098
1071
  continue;
1099
1072
  }
1100
- const model = this.clientRenderedUserMessages.get(entry.id) ?? this.buildProtocolMessageModel(entry);
1073
+ const model = this.buildProtocolMessageModel(entry);
1101
1074
  if (!model) {
1102
1075
  continue;
1103
1076
  }
@@ -1250,7 +1223,6 @@ export class SessionChatController {
1250
1223
  }
1251
1224
  startLocalUiSession() {
1252
1225
  this.hiddenHistoryEntryIds.clear();
1253
- this.clientRenderedUserMessages.clear();
1254
1226
  this.renderedMessageIds.splice(0);
1255
1227
  this.view.addMessage({ type: "session_divider", label: "new session" });
1256
1228
  }
@@ -1548,8 +1520,6 @@ export class SessionChatController {
1548
1520
  return "bash_incognito";
1549
1521
  if (this.isBashMode)
1550
1522
  return "bash";
1551
- if (this.isMemoryMode)
1552
- return "memory";
1553
1523
  return "normal";
1554
1524
  }
1555
1525
  getSessionOperationStatusHint() {
@@ -1694,6 +1664,13 @@ export class SessionChatController {
1694
1664
  async runClientDiffReview(rawArgs, signal) {
1695
1665
  return await this.diffReviewService.runModelTool(rawArgs, signal);
1696
1666
  }
1667
+ prefillInput(text) {
1668
+ if (this.view.getEditorText().length > 0) {
1669
+ throw new Error("Cannot prefill input because the editor already contains text.");
1670
+ }
1671
+ this.view.setEditorText(text);
1672
+ return "Prefilled the input editor. The user can review, edit, and submit it.";
1673
+ }
1697
1674
  async startDiffReview(argsText) {
1698
1675
  if (this.diffReviewService.isActive()) {
1699
1676
  this.view.addSystemMessage("diff review is already active.", "warn");
@@ -1788,15 +1765,6 @@ export class SessionChatController {
1788
1765
  return { bridge, result };
1789
1766
  }
1790
1767
  async handleReturnedDiffReview(review, session) {
1791
- const model = {
1792
- type: "user",
1793
- text: review.review,
1794
- kind: "review",
1795
- };
1796
- this.clientRenderedUserMessages.set(review.historyEntryId, model);
1797
- if (!this.renderedMessageIds.includes(review.historyEntryId)) {
1798
- this.renderedMessageIds.push(review.historyEntryId);
1799
- }
1800
1768
  try {
1801
1769
  const result = await session.record(formatDiffReviewUserMessage(review), {
1802
1770
  historyEntryId: review.historyEntryId,
@@ -1806,7 +1774,13 @@ export class SessionChatController {
1806
1774
  }
1807
1775
  }
1808
1776
  catch (error) {
1809
- this.view.addSystemMessage(`failed to add diff review to session: ${error.message}`, "error");
1777
+ const reviewWasCommitted = this.session === session &&
1778
+ this.snapshot.messages.some((entry) => entry.id === review.historyEntryId &&
1779
+ entry.state === "committed" &&
1780
+ entry.message.role === "user");
1781
+ if (!reviewWasCommitted) {
1782
+ throw error;
1783
+ }
1810
1784
  }
1811
1785
  }
1812
1786
  startRewindFlow() {