@pentoshi/clai 3.5.1 → 3.6.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 (123) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/context-manager.js +8 -2
  3. package/dist/agent/context-manager.js.map +1 -1
  4. package/dist/agent/loop-guard.d.ts +2 -0
  5. package/dist/agent/loop-guard.js +39 -2
  6. package/dist/agent/loop-guard.js.map +1 -1
  7. package/dist/agent/plan-tool.d.ts +22 -0
  8. package/dist/agent/plan-tool.js +357 -44
  9. package/dist/agent/plan-tool.js.map +1 -1
  10. package/dist/agent/project-root.d.ts +33 -0
  11. package/dist/agent/project-root.js +158 -0
  12. package/dist/agent/project-root.js.map +1 -0
  13. package/dist/agent/runner.js +1119 -240
  14. package/dist/agent/runner.js.map +1 -1
  15. package/dist/agent/task-evidence.d.ts +103 -0
  16. package/dist/agent/task-evidence.js +413 -0
  17. package/dist/agent/task-evidence.js.map +1 -0
  18. package/dist/agent/tool-call-parser.d.ts +16 -0
  19. package/dist/agent/tool-call-parser.js +86 -28
  20. package/dist/agent/tool-call-parser.js.map +1 -1
  21. package/dist/agent/tool-history.d.ts +27 -0
  22. package/dist/agent/tool-history.js +150 -0
  23. package/dist/agent/tool-history.js.map +1 -0
  24. package/dist/agent/workspace-orient.d.ts +64 -0
  25. package/dist/agent/workspace-orient.js +418 -0
  26. package/dist/agent/workspace-orient.js.map +1 -0
  27. package/dist/app/controllers/session-controller.js +4 -0
  28. package/dist/app/controllers/session-controller.js.map +1 -1
  29. package/dist/commands/doctor.js +3 -0
  30. package/dist/commands/doctor.js.map +1 -1
  31. package/dist/commands/update.js +1 -1
  32. package/dist/llm/adapters/anthropic-tools.d.ts +99 -0
  33. package/dist/llm/adapters/anthropic-tools.js +225 -0
  34. package/dist/llm/adapters/anthropic-tools.js.map +1 -0
  35. package/dist/llm/adapters/gemini-tools.d.ts +54 -0
  36. package/dist/llm/adapters/gemini-tools.js +139 -0
  37. package/dist/llm/adapters/gemini-tools.js.map +1 -0
  38. package/dist/llm/adapters/ollama-tools.d.ts +22 -0
  39. package/dist/llm/adapters/ollama-tools.js +62 -0
  40. package/dist/llm/adapters/ollama-tools.js.map +1 -0
  41. package/dist/llm/adapters/openai-tools.d.ts +39 -0
  42. package/dist/llm/adapters/openai-tools.js +71 -0
  43. package/dist/llm/adapters/openai-tools.js.map +1 -0
  44. package/dist/llm/agentrouter.js +23 -4
  45. package/dist/llm/agentrouter.js.map +1 -1
  46. package/dist/llm/anthropic.js +93 -92
  47. package/dist/llm/anthropic.js.map +1 -1
  48. package/dist/llm/aws-mantle.js +93 -56
  49. package/dist/llm/aws-mantle.js.map +1 -1
  50. package/dist/llm/bynara.js +23 -4
  51. package/dist/llm/bynara.js.map +1 -1
  52. package/dist/llm/capabilities.d.ts +7 -0
  53. package/dist/llm/capabilities.js +74 -0
  54. package/dist/llm/capabilities.js.map +1 -1
  55. package/dist/llm/gemini.js +63 -48
  56. package/dist/llm/gemini.js.map +1 -1
  57. package/dist/llm/groq.js +23 -4
  58. package/dist/llm/groq.js.map +1 -1
  59. package/dist/llm/http.d.ts +22 -17
  60. package/dist/llm/http.js +99 -26
  61. package/dist/llm/http.js.map +1 -1
  62. package/dist/llm/kimchi.js +23 -4
  63. package/dist/llm/kimchi.js.map +1 -1
  64. package/dist/llm/nvidia.js +23 -4
  65. package/dist/llm/nvidia.js.map +1 -1
  66. package/dist/llm/ollama.js +49 -31
  67. package/dist/llm/ollama.js.map +1 -1
  68. package/dist/llm/openai.js +23 -4
  69. package/dist/llm/openai.js.map +1 -1
  70. package/dist/llm/openrouter.js +23 -4
  71. package/dist/llm/openrouter.js.map +1 -1
  72. package/dist/llm/qwen-cloud.js +23 -4
  73. package/dist/llm/qwen-cloud.js.map +1 -1
  74. package/dist/llm/router.js +48 -6
  75. package/dist/llm/router.js.map +1 -1
  76. package/dist/llm/tool-protocol.d.ts +73 -0
  77. package/dist/llm/tool-protocol.js +282 -0
  78. package/dist/llm/tool-protocol.js.map +1 -0
  79. package/dist/modes/ask.js +74 -20
  80. package/dist/modes/ask.js.map +1 -1
  81. package/dist/prompts/index.d.ts +13 -5
  82. package/dist/prompts/index.js +116 -18
  83. package/dist/prompts/index.js.map +1 -1
  84. package/dist/repl.js +7 -0
  85. package/dist/repl.js.map +1 -1
  86. package/dist/store/config.d.ts +7 -0
  87. package/dist/store/config.js +1 -0
  88. package/dist/store/config.js.map +1 -1
  89. package/dist/store/plan.d.ts +2 -0
  90. package/dist/store/plan.js.map +1 -1
  91. package/dist/tools/capabilities.d.ts +2 -0
  92. package/dist/tools/capabilities.js +101 -6
  93. package/dist/tools/capabilities.js.map +1 -1
  94. package/dist/tools/command-intent.d.ts +1 -0
  95. package/dist/tools/command-intent.js +31 -0
  96. package/dist/tools/command-intent.js.map +1 -1
  97. package/dist/tools/definitions.d.ts +20 -0
  98. package/dist/tools/definitions.js +509 -0
  99. package/dist/tools/definitions.js.map +1 -0
  100. package/dist/tools/fs.js +12 -3
  101. package/dist/tools/fs.js.map +1 -1
  102. package/dist/tools/net-ping-sweep.js +69 -16
  103. package/dist/tools/net-ping-sweep.js.map +1 -1
  104. package/dist/tools/nmap-runner.d.ts +8 -7
  105. package/dist/tools/nmap-runner.js +126 -65
  106. package/dist/tools/nmap-runner.js.map +1 -1
  107. package/dist/tools/registry.js +45 -7
  108. package/dist/tools/registry.js.map +1 -1
  109. package/dist/tools/validate.d.ts +11 -0
  110. package/dist/tools/validate.js +53 -0
  111. package/dist/tools/validate.js.map +1 -1
  112. package/dist/tools/web/search.js +48 -4
  113. package/dist/tools/web/search.js.map +1 -1
  114. package/dist/tui-v2/components/transcript/tool-card.js +1 -1
  115. package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
  116. package/dist/tui-v2/rendering/tool-presenter.d.ts +6 -1
  117. package/dist/tui-v2/rendering/tool-presenter.js +66 -2
  118. package/dist/tui-v2/rendering/tool-presenter.js.map +1 -1
  119. package/dist/types.d.ts +58 -0
  120. package/dist/ui/ansi-box.d.ts +2 -0
  121. package/dist/ui/ansi-box.js +8 -1
  122. package/dist/ui/ansi-box.js.map +1 -1
  123. package/package.json +1 -1
@@ -0,0 +1,73 @@
1
+ import type { NativeToolCall, ProviderId, ToolChoice, ToolDefinition } from "../types.js";
2
+ export type { NativeToolCall, ToolChoice, ToolDefinition };
3
+ export type ToolDialect = "openai" | "anthropic" | "gemini" | "ollama" | "none";
4
+ export type ToolCallingMode = "auto" | "native" | "text";
5
+ /** Max argument JSON size while streaming (~32 MB). */
6
+ export declare const MAX_TOOL_ARG_BYTES: number;
7
+ /** Primary wire form: dots → underscores, keep camelCase (fs.writeMany → fs_writeMany). */
8
+ export declare function toWireName(canonical: string): string;
9
+ /**
10
+ * Full snake_case wire form models sometimes emit
11
+ * (fs.writeMany → fs_write_many). Used as a reverse alias only.
12
+ */
13
+ export declare function toSnakeWireName(canonical: string): string;
14
+ export declare function registerWireName(canonical: string, wire?: string): void;
15
+ /** Register primary wire + snake_case alias when they differ. */
16
+ export declare function registerWireNamesFor(canonical: string): string;
17
+ /**
18
+ * Strip model channel / commentary / XML junk from tool names
19
+ * (e.g. `fs.write<|channel|>commentary` → `fs.write`).
20
+ */
21
+ export declare function sanitizeToolName(raw: string): string;
22
+ export declare function fromWireName(wire: string): string | undefined;
23
+ export declare function parseToolArguments(raw: unknown): Record<string, unknown>;
24
+ export declare function syntheticToolCallId(index: number): string;
25
+ /**
26
+ * True only when the provider clearly rejects tools/function-calling as a
27
+ * capability (not supported / disabled / unknown parameter). Validation
28
+ * errors like "Invalid schema for function 'fs_write'" must return false
29
+ * so we do not sticky-disable native tools for the rest of the process.
30
+ */
31
+ export declare function isToolsUnsupportedError(error: unknown): boolean;
32
+ export declare function mapToolChoiceToOpenAi(choice: ToolChoice | undefined): unknown;
33
+ export declare function mapToolChoiceToAnthropic(choice: ToolChoice | undefined): unknown;
34
+ export declare function mapToolChoiceToGemini(choice: ToolChoice | undefined): {
35
+ mode: string;
36
+ allowedFunctionNames?: string[];
37
+ };
38
+ export declare function textOnlyKey(provider: ProviderId, model: string): string;
39
+ export declare function markTextOnlyModel(provider: ProviderId, model: string): void;
40
+ export declare function isTextOnlyModel(provider: ProviderId, model: string): boolean;
41
+ export declare function clearTextOnlyModels(): void;
42
+ export interface OpenAiToolCallAccumulator {
43
+ id?: string;
44
+ name?: string;
45
+ arguments: string;
46
+ }
47
+ export interface AccumulateToolCallDeltaResult {
48
+ index: number;
49
+ id?: string | undefined;
50
+ name?: string | undefined;
51
+ /** True when this delta first set a non-empty function name. */
52
+ nameBecameKnown: boolean;
53
+ argumentsBytes: number;
54
+ }
55
+ /** Accumulate OpenAI-style streaming tool_calls deltas by index. */
56
+ export declare function accumulateOpenAiToolCallDelta(state: Map<number, OpenAiToolCallAccumulator>, entry: {
57
+ index?: number;
58
+ id?: string;
59
+ type?: string;
60
+ function?: {
61
+ name?: string;
62
+ arguments?: string;
63
+ };
64
+ }): AccumulateToolCallDeltaResult;
65
+ export declare function finalizeOpenAiToolCalls(state: Map<number, OpenAiToolCallAccumulator>): NativeToolCall[];
66
+ export declare function parseOpenAiMessageToolCalls(toolCalls: Array<{
67
+ id?: string;
68
+ type?: string;
69
+ function?: {
70
+ name?: string;
71
+ arguments?: string;
72
+ };
73
+ }> | undefined): NativeToolCall[];
@@ -0,0 +1,282 @@
1
+ /** Max argument JSON size while streaming (~32 MB). */
2
+ export const MAX_TOOL_ARG_BYTES = 32 * 1024 * 1024;
3
+ /** Primary wire form: dots → underscores, keep camelCase (fs.writeMany → fs_writeMany). */
4
+ export function toWireName(canonical) {
5
+ return canonical.replace(/\./g, "_");
6
+ }
7
+ /**
8
+ * Full snake_case wire form models sometimes emit
9
+ * (fs.writeMany → fs_write_many). Used as a reverse alias only.
10
+ */
11
+ export function toSnakeWireName(canonical) {
12
+ return canonical
13
+ .replace(/([a-z0-9])([A-Z])/g, "$1_$2")
14
+ .replace(/\./g, "_")
15
+ .toLowerCase();
16
+ }
17
+ /**
18
+ * Reverse wire → canonical for known tools. Unknown wires return undefined
19
+ * so the runner can surface a clear error.
20
+ */
21
+ const wireToCanonical = new Map();
22
+ export function registerWireName(canonical, wire) {
23
+ const w = wire ?? toWireName(canonical);
24
+ wireToCanonical.set(w, canonical);
25
+ }
26
+ /** Register primary wire + snake_case alias when they differ. */
27
+ export function registerWireNamesFor(canonical) {
28
+ const wire = toWireName(canonical);
29
+ registerWireName(canonical, wire);
30
+ const snake = toSnakeWireName(canonical);
31
+ if (snake !== wire) {
32
+ registerWireName(canonical, snake);
33
+ }
34
+ return wire;
35
+ }
36
+ /**
37
+ * Strip model channel / commentary / XML junk from tool names
38
+ * (e.g. `fs.write<|channel|>commentary` → `fs.write`).
39
+ */
40
+ export function sanitizeToolName(raw) {
41
+ let n = raw.trim();
42
+ if (!n)
43
+ return n;
44
+ // GPT-OSS / channel style: <|channel|>, <|tool_call_begin|>, …
45
+ n = n.replace(/<\|[^|]*\|>/g, "");
46
+ // XML-ish tags
47
+ n = n.replace(/<\/?[A-Za-z][^>]*>/g, "");
48
+ n = n.replace(/^(?:functions\.|tools\.|tool\.)/i, "");
49
+ n = n.replace(/:\d+$/, "");
50
+ // Drop trailing non-name junk after a clean dotted/underscored stem
51
+ n = n.replace(/[^A-Za-z0-9._-]+.*$/, "");
52
+ // Role words models glue after tags (fs.writecommentary)
53
+ n = n.replace(/(?:commentary|analysis|channel|tool_call|toolcall|final)$/i, "");
54
+ n = n.replace(/(?:[_./-]+(?:commentary|analysis|channel|final))+$/i, "");
55
+ n = n.trim().replace(/^[_./-]+|[_./-]+$/g, "");
56
+ return n;
57
+ }
58
+ /**
59
+ * Longest registered wire/canonical prefix match for polluted names.
60
+ * e.g. `fs_write_channel_commentary` → `fs_write` if registered.
61
+ */
62
+ function longestRegisteredPrefix(cleaned) {
63
+ if (!cleaned)
64
+ return undefined;
65
+ if (wireToCanonical.has(cleaned))
66
+ return cleaned;
67
+ // Try stripping trailing segments after _ or .
68
+ let best;
69
+ for (const [wire] of wireToCanonical) {
70
+ if (cleaned === wire ||
71
+ cleaned.startsWith(wire + "_") ||
72
+ cleaned.startsWith(wire + ".") ||
73
+ cleaned.startsWith(wire + "<")) {
74
+ if (!best || wire.length > best.length)
75
+ best = wire;
76
+ }
77
+ }
78
+ return best;
79
+ }
80
+ export function fromWireName(wire) {
81
+ const cleaned = sanitizeToolName(wire);
82
+ if (!cleaned)
83
+ return undefined;
84
+ if (wireToCanonical.has(cleaned))
85
+ return wireToCanonical.get(cleaned);
86
+ // Polluted name that still starts with a registered wire form
87
+ const prefix = longestRegisteredPrefix(cleaned);
88
+ if (prefix)
89
+ return wireToCanonical.get(prefix);
90
+ // Also try original if sanitize changed nothing useful
91
+ if (wireToCanonical.has(wire))
92
+ return wireToCanonical.get(wire);
93
+ // Fallback: underscore → first-dot heuristic for unregistered names.
94
+ if (cleaned.includes("."))
95
+ return cleaned;
96
+ const idx = cleaned.indexOf("_");
97
+ if (idx <= 0)
98
+ return undefined;
99
+ return `${cleaned.slice(0, idx)}.${cleaned.slice(idx + 1).replace(/_/g, ".")}`;
100
+ }
101
+ export function parseToolArguments(raw) {
102
+ if (raw == null)
103
+ return {};
104
+ if (typeof raw === "object" && !Array.isArray(raw)) {
105
+ return raw;
106
+ }
107
+ if (typeof raw === "string") {
108
+ const t = raw.trim();
109
+ if (!t)
110
+ return {};
111
+ try {
112
+ const parsed = JSON.parse(t);
113
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
114
+ return parsed;
115
+ }
116
+ return { _parseError: true, _raw: t };
117
+ }
118
+ catch {
119
+ return { _parseError: true, _raw: t };
120
+ }
121
+ }
122
+ return {};
123
+ }
124
+ export function syntheticToolCallId(index) {
125
+ return `call_${index}_${Date.now().toString(36)}`;
126
+ }
127
+ /**
128
+ * True only when the provider clearly rejects tools/function-calling as a
129
+ * capability (not supported / disabled / unknown parameter). Validation
130
+ * errors like "Invalid schema for function 'fs_write'" must return false
131
+ * so we do not sticky-disable native tools for the rest of the process.
132
+ */
133
+ export function isToolsUnsupportedError(error) {
134
+ const status = error && typeof error === "object" && "status" in error
135
+ ? Number(error.status)
136
+ : undefined;
137
+ const body = error && typeof error === "object" && "body" in error
138
+ ? String(error.body ?? "")
139
+ : "";
140
+ const message = error instanceof Error ? error.message : String(error);
141
+ const hay = `${message}\n${body}`.toLowerCase();
142
+ // Explicit capability rejections (any HTTP status).
143
+ if (/tools?\s+(is|are)\s+not\s+supported|does not support tools|function calling is not enabled|tool[_ ]?use is not supported|tools? not supported|tool calling is not supported|does not support function|function[_ ]?call(ing)? (is )?(not supported|disabled|unavailable)|unknown (request )?parameter ['"]?tools?|['"]tools?['"] is not (a )?valid|tool_choice.*(not supported|unknown|disabled)/i.test(hay)) {
144
+ return true;
145
+ }
146
+ // 400 bodies that mention tools — only when they clearly mean unsupported.
147
+ // Do NOT treat schema/arg validation as unsupported (no bare /tool/i).
148
+ if (status === 400 &&
149
+ /\btools?\b|\btool_choice\b|\bfunction[_ ]?call/i.test(hay)) {
150
+ if (/invalid schema|invalid argument|missing required|parse error|type error|validation|must be|expected/i.test(hay)) {
151
+ return false;
152
+ }
153
+ return /not support|unsupported|disabled|not enabled|not available|unknown parameter|unrecognized/i.test(hay);
154
+ }
155
+ return false;
156
+ }
157
+ export function mapToolChoiceToOpenAi(choice) {
158
+ if (choice === undefined || choice === "auto")
159
+ return "auto";
160
+ if (choice === "none")
161
+ return "none";
162
+ if (choice === "required")
163
+ return "required";
164
+ if (typeof choice === "object" && choice.type === "function") {
165
+ return {
166
+ type: "function",
167
+ function: { name: toWireName(choice.name) },
168
+ };
169
+ }
170
+ return "auto";
171
+ }
172
+ export function mapToolChoiceToAnthropic(choice) {
173
+ if (choice === undefined || choice === "auto")
174
+ return { type: "auto" };
175
+ if (choice === "none")
176
+ return { type: "none" };
177
+ if (choice === "required")
178
+ return { type: "any" };
179
+ if (typeof choice === "object" && choice.type === "function") {
180
+ return { type: "tool", name: toWireName(choice.name) };
181
+ }
182
+ return { type: "auto" };
183
+ }
184
+ export function mapToolChoiceToGemini(choice) {
185
+ if (choice === "none")
186
+ return { mode: "NONE" };
187
+ if (choice === "required")
188
+ return { mode: "ANY" };
189
+ if (typeof choice === "object" && choice.type === "function") {
190
+ return {
191
+ mode: "ANY",
192
+ allowedFunctionNames: [toWireName(choice.name)],
193
+ };
194
+ }
195
+ return { mode: "AUTO" };
196
+ }
197
+ /** Session-sticky models forced to text protocol after tools-unsupported. */
198
+ const textOnlyModels = new Set();
199
+ export function textOnlyKey(provider, model) {
200
+ return `${provider}::${model}`;
201
+ }
202
+ export function markTextOnlyModel(provider, model) {
203
+ textOnlyModels.add(textOnlyKey(provider, model));
204
+ }
205
+ export function isTextOnlyModel(provider, model) {
206
+ return textOnlyModels.has(textOnlyKey(provider, model));
207
+ }
208
+ export function clearTextOnlyModels() {
209
+ textOnlyModels.clear();
210
+ }
211
+ /** Accumulate OpenAI-style streaming tool_calls deltas by index. */
212
+ export function accumulateOpenAiToolCallDelta(state, entry) {
213
+ const index = entry.index ?? 0;
214
+ let acc = state.get(index);
215
+ if (!acc) {
216
+ acc = { arguments: "" };
217
+ state.set(index, acc);
218
+ }
219
+ const hadName = Boolean(acc.name);
220
+ if (entry.id)
221
+ acc.id = entry.id;
222
+ if (entry.function?.name) {
223
+ const nextName = sanitizeToolName(entry.function.name) || entry.function.name;
224
+ // X2: if this index already has a different clean name, do not clobber
225
+ // args with a second tool's payload — keep the first name.
226
+ if (acc.name &&
227
+ nextName &&
228
+ acc.name !== nextName &&
229
+ sanitizeToolName(acc.name) !== sanitizeToolName(nextName)) {
230
+ // Ignore subsequent name flips on the same index (stream corruption).
231
+ }
232
+ else {
233
+ acc.name = nextName;
234
+ }
235
+ }
236
+ if (typeof entry.function?.arguments === "string") {
237
+ acc.arguments += entry.function.arguments;
238
+ if (acc.arguments.length > MAX_TOOL_ARG_BYTES) {
239
+ throw new Error(`Tool call arguments exceeded ${MAX_TOOL_ARG_BYTES} bytes — split the file or reduce content size.`);
240
+ }
241
+ }
242
+ return {
243
+ index,
244
+ ...(acc.id !== undefined ? { id: acc.id } : {}),
245
+ ...(acc.name !== undefined ? { name: acc.name } : {}),
246
+ nameBecameKnown: Boolean(acc.name) && !hadName,
247
+ argumentsBytes: acc.arguments.length,
248
+ };
249
+ }
250
+ export function finalizeOpenAiToolCalls(state) {
251
+ const indices = [...state.keys()].sort((a, b) => a - b);
252
+ const out = [];
253
+ for (const index of indices) {
254
+ const acc = state.get(index);
255
+ const wire = acc.name ?? "";
256
+ const canonical = fromWireName(wire) ?? wire;
257
+ const rawArguments = acc.arguments;
258
+ const args = parseToolArguments(rawArguments);
259
+ out.push({
260
+ id: acc.id ?? syntheticToolCallId(index),
261
+ name: canonical,
262
+ args,
263
+ ...(rawArguments ? { rawArguments } : {}),
264
+ });
265
+ }
266
+ return out;
267
+ }
268
+ export function parseOpenAiMessageToolCalls(toolCalls) {
269
+ if (!toolCalls?.length)
270
+ return [];
271
+ return toolCalls.map((tc, i) => {
272
+ const wire = tc.function?.name ?? "";
273
+ const rawArguments = tc.function?.arguments ?? "";
274
+ return {
275
+ id: tc.id ?? syntheticToolCallId(i),
276
+ name: fromWireName(wire) ?? wire,
277
+ args: parseToolArguments(rawArguments),
278
+ ...(rawArguments ? { rawArguments } : {}),
279
+ };
280
+ });
281
+ }
282
+ //# sourceMappingURL=tool-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-protocol.js","sourceRoot":"","sources":["../../src/llm/tool-protocol.ts"],"names":[],"mappings":"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"}
package/dist/modes/ask.js CHANGED
@@ -1,10 +1,14 @@
1
1
  import { streamWithProvider } from "../llm/router.js";
2
+ import { resolveToolDialect } from "../llm/capabilities.js";
3
+ import { syntheticToolCallId } from "../llm/tool-protocol.js";
2
4
  import { renderAskSystemPrompt } from "../prompts/index.js";
3
5
  import { getConfig } from "../store/config.js";
4
6
  import { ensureProviderConfigured } from "../commands/providers.js";
5
7
  import { loadProjectContext } from "../store/project.js";
6
8
  import { parseAllToolCalls, formatToolArgs, looksLikePromptLeak } from "../agent/runner.js";
7
9
  import { runToolCall } from "../tools/registry.js";
10
+ import { getToolDefinitions } from "../tools/definitions.js";
11
+ import { appendAssistantWithTools, appendToolResult, } from "../agent/tool-history.js";
8
12
  /** Strip tool-call markup so only the model's prose preamble remains. */
9
13
  function stripToolCallSyntax(text) {
10
14
  return text
@@ -88,17 +92,19 @@ async function buildAskMessages(prompt, options) {
88
92
  const config = getConfig();
89
93
  const provider = options.provider ?? config.defaultProvider;
90
94
  await ensureProviderConfigured(provider);
95
+ const model = options.model ?? config.defaultModel;
91
96
  const projectContext = await loadProjectContext();
97
+ const native = resolveToolDialect(provider, model, config.toolCalling) !== "none";
92
98
  const systemPrompt = projectContext
93
- ? `${renderAskSystemPrompt()}\n\nProject context from .clai/context.md:\n${projectContext}`
94
- : renderAskSystemPrompt();
99
+ ? `${renderAskSystemPrompt({ nativeTools: native })}\n\nProject context from .clai/context.md:\n${projectContext}`
100
+ : renderAskSystemPrompt({ nativeTools: native });
95
101
  const userMessage = { role: "user", content: prompt };
96
102
  if (options.images && options.images.length > 0) {
97
103
  userMessage.images = options.images;
98
104
  }
99
105
  return {
100
106
  provider,
101
- model: options.model ?? config.defaultModel,
107
+ model,
102
108
  messages: [
103
109
  { role: "system", content: systemPrompt },
104
110
  ...(options.history ?? []),
@@ -141,13 +147,14 @@ async function streamAskRound(request, messages, onToken) {
141
147
  let full = "";
142
148
  let forwardedLen = 0;
143
149
  let suppressed = false;
144
- await streamWithProvider({ ...request, messages }, (token) => {
150
+ const completion = await streamWithProvider({ ...request, messages }, (token) => {
145
151
  full += token;
146
152
  if (suppressed)
147
153
  return;
154
+ // When native tools are attached, do not suppress prose on fence markers
155
+ // (there should be none); still suppress if the model emits fences anyway.
148
156
  const toolAt = toolCallStartIndex(full);
149
157
  if (toolAt >= 0) {
150
- // Forward only the clean prefix before the tool-call marker, once.
151
158
  if (toolAt > forwardedLen)
152
159
  onToken(full.slice(forwardedLen, toolAt));
153
160
  forwardedLen = full.length;
@@ -159,7 +166,18 @@ async function streamAskRound(request, messages, onToken) {
159
166
  forwardedLen = full.length;
160
167
  }
161
168
  });
162
- return full;
169
+ const text = full || completion.text;
170
+ if (completion.toolCalls?.length) {
171
+ return {
172
+ text,
173
+ toolCalls: completion.toolCalls.map((tc) => ({
174
+ name: tc.name,
175
+ args: tc.args,
176
+ })),
177
+ nativeIds: completion.toolCalls.map((tc) => tc.id),
178
+ };
179
+ }
180
+ return { text };
163
181
  }
164
182
  /**
165
183
  * Drive ask mode to its final answer.
@@ -176,6 +194,14 @@ async function streamAskRound(request, messages, onToken) {
176
194
  async function resolveAskAnswer(originalPrompt, provider, model, messages, options, onToken) {
177
195
  const config = getConfig();
178
196
  const maxTokens = config.thinking?.enabled ? 8_192 : 4_096;
197
+ const native = resolveToolDialect(provider, model, config.toolCalling) !== "none";
198
+ // Research tools + agent.handoff (meta; not executed as research — action UX).
199
+ const askDefs = native
200
+ ? [
201
+ ...getToolDefinitions({ askMode: true }).filter((d) => ASK_RESEARCH_TOOLS.has(d.name)),
202
+ ...getToolDefinitions({ names: ["agent.handoff"] }),
203
+ ]
204
+ : undefined;
179
205
  const baseRequest = {
180
206
  provider,
181
207
  model,
@@ -183,6 +209,9 @@ async function resolveAskAnswer(originalPrompt, provider, model, messages, optio
183
209
  maxTokens,
184
210
  thinking: config.thinking,
185
211
  ...(options.signal ? { signal: options.signal } : {}),
212
+ ...(askDefs?.length
213
+ ? { tools: askDefs, toolChoice: "auto" }
214
+ : {}),
186
215
  };
187
216
  // Surface research activity (web.search/web.fetch/…) to the UI as tool
188
217
  // events so the user can see what's being searched/fetched.
@@ -219,22 +248,28 @@ async function resolveAskAnswer(originalPrompt, provider, model, messages, optio
219
248
  role: "user",
220
249
  content: `Fresh web.search was run before answering because the user requested current/web-backed information.\n` +
221
250
  `Query: ${query}\nResult:\n${truncateToolOutput(output, "web.search")}\n\n` +
222
- "Answer from these current results. If the result is insufficient or contradictory, call web.search/web.fetch again before answering. Cite URLs you used.",
251
+ "Answer from these current results. Prefer high-trust hosts (.gov, major news). Treat a single junk/contradictory snippet as unverified until confirmed. If insufficient, call web.search/web.fetch again before answering. Your final answer MUST cite 1–3 URLs from tool results.",
223
252
  });
224
253
  }
225
254
  for (let round = 0; round < ASK_MAX_RESEARCH_ROUNDS; round += 1) {
226
255
  options.signal?.throwIfAborted();
227
- const text = await streamAskRound(baseRequest, messages, onToken);
256
+ const roundResult = await streamAskRound(baseRequest, messages, onToken);
257
+ const text = roundResult.text;
228
258
  // ── Prompt-leak guard ──────────────────────────────────────────────
229
259
  // If the model's response contains distinctive system-prompt markers,
230
260
  // it is repeating its instructions (e.g. in response to "repeat your
231
- // instructions verbatim"). Any ```tool blocks in that output are
232
- // EXAMPLES from the prompt, not real tool requests. Treat the whole
233
- // response as a final text answer to avoid executing stale examples.
261
+ // instructions verbatim"). Any tool blocks / native toolCalls in that
262
+ // output are EXAMPLES from the prompt, not real tool requests. Treat
263
+ // the whole response as a final text answer and do not execute tools.
234
264
  if (looksLikePromptLeak(text)) {
235
265
  return text;
236
266
  }
237
- const allCalls = parseAllToolCalls(text);
267
+ // Prefer native toolCalls; fall back to text fences.
268
+ const allCalls = roundResult.toolCalls?.length
269
+ ? roundResult.toolCalls
270
+ : parseAllToolCalls(text);
271
+ const nativeIds = roundResult.nativeIds ??
272
+ allCalls.map((_, i) => syntheticToolCallId(i));
238
273
  const calls = allCalls.filter((call) => ASK_RESEARCH_TOOLS.has(call.name));
239
274
  if (calls.length === 0) {
240
275
  // No allowed research tool requested. If the model instead asked for a
@@ -279,8 +314,19 @@ async function resolveAskAnswer(originalPrompt, provider, model, messages, optio
279
314
  }
280
315
  // Record the model's tool-call turn, then run the read-only tools and
281
316
  // feed their outputs back so the next round can synthesize.
282
- messages.push({ role: "assistant", content: text });
283
- for (const call of calls.slice(0, ASK_MAX_TOOLS_PER_ROUND)) {
317
+ if (roundResult.toolCalls?.length) {
318
+ appendAssistantWithTools(messages, stripToolCallSyntax(text), roundResult.toolCalls.map((c, i) => ({
319
+ id: nativeIds[i] ?? syntheticToolCallId(i),
320
+ name: c.name,
321
+ args: c.args,
322
+ })));
323
+ }
324
+ else {
325
+ messages.push({ role: "assistant", content: text });
326
+ }
327
+ for (const [callIndex, call] of calls
328
+ .slice(0, ASK_MAX_TOOLS_PER_ROUND)
329
+ .entries()) {
284
330
  options.signal?.throwIfAborted();
285
331
  const id = `ask-${(toolSeq += 1)}`;
286
332
  emit({
@@ -308,19 +354,27 @@ async function resolveAskAnswer(originalPrompt, provider, model, messages, optio
308
354
  ok,
309
355
  summary: researchResultSummary(call, ok),
310
356
  });
311
- messages.push({
312
- role: "user",
313
- content: `Result of ${call.name}(${JSON.stringify(call.args)}):\n${truncateToolOutput(output, call.name)}`,
314
- });
357
+ const resultBody = `Result of ${call.name}(${JSON.stringify(call.args)}):\n${truncateToolOutput(output, call.name)}`;
358
+ if (roundResult.toolCalls?.length) {
359
+ const sourceIndex = allCalls.indexOf(call);
360
+ appendToolResult(messages, nativeIds[sourceIndex] ?? syntheticToolCallId(callIndex), resultBody, call.name, ok);
361
+ }
362
+ else {
363
+ messages.push({
364
+ role: "user",
365
+ content: resultBody,
366
+ });
367
+ }
315
368
  }
316
369
  }
317
370
  // Round cap reached — force a tool-free final answer from what we gathered.
318
371
  options.signal?.throwIfAborted();
319
372
  messages.push({
320
373
  role: "user",
321
- content: "Stop researching now. Using only what you have already gathered above, give your final answer to the original question. Do NOT call any more tools.",
374
+ content: "Stop researching now. Using only what you have already gathered above, give your final answer to the original question. Do NOT call any more tools. Prefer high-trust sources; only claim a page confirms a fact if that fact appears in the tool output; include 1–3 source URLs from the results above.",
322
375
  });
323
- return streamAskRound(baseRequest, messages, onToken);
376
+ const finalRound = await streamAskRound(baseRequest, messages, onToken);
377
+ return finalRound.text;
324
378
  }
325
379
  export async function runAsk(prompt, options = {}) {
326
380
  const request = await buildAskMessages(prompt, options);
@@ -1 +1 @@
1
- {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/modes/ask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/modes/ask.ts"],"names":[],"mappings":"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"}