@chances-ai/engine 28.0.0 → 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.
- package/dist/ai/adapters/ai-sdk-stream.js +15 -0
- package/dist/ai/adapters/ai-sdk-stream.js.map +1 -1
- package/dist/ai/types.d.ts +12 -0
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/core/engine.d.ts +14 -0
- package/dist/core/engine.d.ts.map +1 -1
- package/dist/core/engine.js +48 -2
- package/dist/core/engine.js.map +1 -1
- package/dist/hashline/apply.d.ts +9 -0
- package/dist/hashline/apply.d.ts.map +1 -0
- package/dist/hashline/apply.js +523 -0
- package/dist/hashline/apply.js.map +1 -0
- package/dist/hashline/block.d.ts +25 -0
- package/dist/hashline/block.d.ts.map +1 -0
- package/dist/hashline/block.js +71 -0
- package/dist/hashline/block.js.map +1 -0
- package/dist/hashline/format.d.ts +106 -0
- package/dist/hashline/format.d.ts.map +1 -0
- package/dist/hashline/format.js +191 -0
- package/dist/hashline/format.js.map +1 -0
- package/dist/hashline/fs.d.ts +87 -0
- package/dist/hashline/fs.d.ts.map +1 -0
- package/dist/hashline/fs.js +123 -0
- package/dist/hashline/fs.js.map +1 -0
- package/dist/hashline/index.d.ts +27 -0
- package/dist/hashline/index.d.ts.map +1 -0
- package/dist/hashline/index.js +27 -0
- package/dist/hashline/index.js.map +1 -0
- package/dist/hashline/input.d.ts +101 -0
- package/dist/hashline/input.d.ts.map +1 -0
- package/dist/hashline/input.js +378 -0
- package/dist/hashline/input.js.map +1 -0
- package/dist/hashline/messages.d.ts +87 -0
- package/dist/hashline/messages.d.ts.map +1 -0
- package/dist/hashline/messages.js +94 -0
- package/dist/hashline/messages.js.map +1 -0
- package/dist/hashline/mismatch.d.ts +45 -0
- package/dist/hashline/mismatch.d.ts.map +1 -0
- package/dist/hashline/mismatch.js +118 -0
- package/dist/hashline/mismatch.js.map +1 -0
- package/dist/hashline/normalize.d.ts +22 -0
- package/dist/hashline/normalize.d.ts.map +1 -0
- package/dist/hashline/normalize.js +31 -0
- package/dist/hashline/normalize.js.map +1 -0
- package/dist/hashline/parser.d.ts +24 -0
- package/dist/hashline/parser.d.ts.map +1 -0
- package/dist/hashline/parser.js +295 -0
- package/dist/hashline/parser.js.map +1 -0
- package/dist/hashline/patcher.d.ts +111 -0
- package/dist/hashline/patcher.d.ts.map +1 -0
- package/dist/hashline/patcher.js +332 -0
- package/dist/hashline/patcher.js.map +1 -0
- package/dist/hashline/recovery.d.ts +41 -0
- package/dist/hashline/recovery.d.ts.map +1 -0
- package/dist/hashline/recovery.js +175 -0
- package/dist/hashline/recovery.js.map +1 -0
- package/dist/hashline/snapshots.d.ts +62 -0
- package/dist/hashline/snapshots.d.ts.map +1 -0
- package/dist/hashline/snapshots.js +127 -0
- package/dist/hashline/snapshots.js.map +1 -0
- package/dist/hashline/tokenizer.d.ts +66 -0
- package/dist/hashline/tokenizer.d.ts.map +1 -0
- package/dist/hashline/tokenizer.js +408 -0
- package/dist/hashline/tokenizer.js.map +1 -0
- package/dist/hashline/types.d.ts +117 -0
- package/dist/hashline/types.d.ts.map +1 -0
- package/dist/hashline/types.js +13 -0
- package/dist/hashline/types.js.map +1 -0
- package/dist/tools/builtins/_hashline-fs.d.ts +16 -0
- package/dist/tools/builtins/_hashline-fs.d.ts.map +1 -0
- package/dist/tools/builtins/_hashline-fs.js +62 -0
- package/dist/tools/builtins/_hashline-fs.js.map +1 -0
- package/dist/tools/builtins/_image.d.ts +26 -0
- package/dist/tools/builtins/_image.d.ts.map +1 -0
- package/dist/tools/builtins/_image.js +76 -0
- package/dist/tools/builtins/_image.js.map +1 -0
- package/dist/tools/builtins/_login-shell.d.ts +17 -0
- package/dist/tools/builtins/_login-shell.d.ts.map +1 -0
- package/dist/tools/builtins/_login-shell.js +66 -0
- package/dist/tools/builtins/_login-shell.js.map +1 -0
- package/dist/tools/builtins/_notebook.d.ts +15 -0
- package/dist/tools/builtins/_notebook.d.ts.map +1 -0
- package/dist/tools/builtins/_notebook.js +81 -0
- package/dist/tools/builtins/_notebook.js.map +1 -0
- package/dist/tools/builtins/_pdf.d.ts +19 -0
- package/dist/tools/builtins/_pdf.d.ts.map +1 -0
- package/dist/tools/builtins/_pdf.js +42 -0
- package/dist/tools/builtins/_pdf.js.map +1 -0
- package/dist/tools/builtins/_shared.d.ts +11 -0
- package/dist/tools/builtins/_shared.d.ts.map +1 -1
- package/dist/tools/builtins/_shared.js +40 -1
- package/dist/tools/builtins/_shared.js.map +1 -1
- package/dist/tools/builtins/ast-edit.d.ts +18 -0
- package/dist/tools/builtins/ast-edit.d.ts.map +1 -0
- package/dist/tools/builtins/ast-edit.js +109 -0
- package/dist/tools/builtins/ast-edit.js.map +1 -0
- package/dist/tools/builtins/ast-grep.d.ts +6 -0
- package/dist/tools/builtins/ast-grep.d.ts.map +1 -0
- package/dist/tools/builtins/ast-grep.js +67 -0
- package/dist/tools/builtins/ast-grep.js.map +1 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +13 -2
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/edit.d.ts.map +1 -1
- package/dist/tools/builtins/edit.js +112 -31
- package/dist/tools/builtins/edit.js.map +1 -1
- package/dist/tools/builtins/read.d.ts.map +1 -1
- package/dist/tools/builtins/read.js +187 -11
- package/dist/tools/builtins/read.js.map +1 -1
- package/dist/tools/builtins.d.ts.map +1 -1
- package/dist/tools/builtins.js +4 -0
- package/dist/tools/builtins.js.map +1 -1
- package/dist/tools/file-lock.d.ts +8 -0
- package/dist/tools/file-lock.d.ts.map +1 -1
- package/dist/tools/file-lock.js +22 -0
- package/dist/tools/file-lock.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/types.d.ts +26 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/package.json +8 -3
|
@@ -1,18 +1,194 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
-
import {
|
|
1
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
+
import { native } from "@chances-ai/native";
|
|
3
|
+
import { formatHashlineHeader, formatNumberedLine, normalizeToLF, stripBom } from "../../hashline/index.js";
|
|
4
|
+
import { readImageAsParts, sniffImageMime } from "./_image.js";
|
|
5
|
+
import { renderNotebook } from "./_notebook.js";
|
|
6
|
+
import { readPdfAsText, sniffPdf } from "./_pdf.js";
|
|
7
|
+
import { containReadPath, hashlineSnapshotKey, optNum, str } from "./_shared.js";
|
|
8
|
+
/** Hard ceiling on file size we will read into memory at all. */
|
|
9
|
+
const MAX_READ_BYTES = 50 * 1024 * 1024;
|
|
10
|
+
/** First-window byte sample used for binary/UTF-8 sniffing. */
|
|
11
|
+
const SNIFF_BYTES = 8192;
|
|
12
|
+
/** Default token budget for a single read's rendered body (override per env). */
|
|
13
|
+
const DEFAULT_MAX_TOKENS = 25_000;
|
|
14
|
+
/** Token cap from the environment, clamped to a sane floor. (7.9 R1-OQ2) */
|
|
15
|
+
function readMaxTokens() {
|
|
16
|
+
const raw = Number.parseInt(process.env.CHANCES_READ_MAX_TOKENS ?? "", 10);
|
|
17
|
+
return Number.isFinite(raw) && raw >= 1000 ? raw : DEFAULT_MAX_TOKENS;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Read-dedup stub (7.9 [5.4]): a bounded ring of `key|offset|limit → mtimeMs`.
|
|
21
|
+
* A repeated read of the same window whose file mtime is unchanged returns an
|
|
22
|
+
* "unchanged" note (plus the live `¶path#TAG` so a follow-up edit still anchors)
|
|
23
|
+
* instead of re-spending tokens on the body.
|
|
24
|
+
*
|
|
25
|
+
* **Per-session, not per-process (7.9 §3.3 fix):** the ring is keyed by the
|
|
26
|
+
* session's `SnapshotStore` identity via a `WeakMap`, so a long-running `serve`
|
|
27
|
+
* process can never return "unchanged since your last read" to a client session
|
|
28
|
+
* that never read the file (cross-session leakage in the original global map).
|
|
29
|
+
* It is GC-collected with the session. A shared fallback map covers direct tool
|
|
30
|
+
* calls / tests that wire no store (single-process, no isolation concern).
|
|
31
|
+
*/
|
|
32
|
+
const READ_DEDUP_CAP = 256;
|
|
33
|
+
const READ_DEDUP_BY_SESSION = new WeakMap();
|
|
34
|
+
const READ_DEDUP_FALLBACK = new Map();
|
|
35
|
+
function dedupStoreFor(ctx) {
|
|
36
|
+
const owner = ctx.snapshots;
|
|
37
|
+
if (!owner)
|
|
38
|
+
return READ_DEDUP_FALLBACK;
|
|
39
|
+
let store = READ_DEDUP_BY_SESSION.get(owner);
|
|
40
|
+
if (!store) {
|
|
41
|
+
store = new Map();
|
|
42
|
+
READ_DEDUP_BY_SESSION.set(owner, store);
|
|
43
|
+
}
|
|
44
|
+
return store;
|
|
45
|
+
}
|
|
46
|
+
function dedupRemember(store, key, mtimeMs) {
|
|
47
|
+
store.delete(key);
|
|
48
|
+
store.set(key, mtimeMs);
|
|
49
|
+
while (store.size > READ_DEDUP_CAP) {
|
|
50
|
+
const oldest = store.keys().next().value;
|
|
51
|
+
if (oldest === undefined)
|
|
52
|
+
break;
|
|
53
|
+
store.delete(oldest);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** True when `buf` looks binary: a NUL byte, or invalid UTF-8 in the sniff window. */
|
|
57
|
+
function looksBinary(buf) {
|
|
58
|
+
const window = buf.subarray(0, SNIFF_BYTES);
|
|
59
|
+
if (window.includes(0))
|
|
60
|
+
return true;
|
|
61
|
+
try {
|
|
62
|
+
new TextDecoder("utf-8", { fatal: true }).decode(window);
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Estimate tokens with a 4×-byte fast-reject before the (more expensive) real
|
|
70
|
+
* count (claude-code shape): if a 4-bytes-per-token lower bound is already under
|
|
71
|
+
* the cap, skip the native count entirely. */
|
|
72
|
+
function withinTokenCap(text, cap) {
|
|
73
|
+
if (Buffer.byteLength(text, "utf8") / 4 <= cap)
|
|
74
|
+
return true;
|
|
75
|
+
return native.countTokensExact(text).tokens <= cap;
|
|
76
|
+
}
|
|
3
77
|
export const readTool = {
|
|
4
78
|
name: "read",
|
|
5
|
-
description: "Read a UTF-8 text file from the workspace.",
|
|
6
79
|
category: "file-read",
|
|
7
|
-
|
|
8
|
-
|
|
80
|
+
description: "Read a UTF-8 text file from the workspace. Output is `¶path#TAG` (the hashline " +
|
|
81
|
+
"snapshot tag) followed by `LINE:TEXT` numbered lines (1-indexed). Copy the " +
|
|
82
|
+
"`¶path#TAG` header and the bare LINE numbers into the `edit` tool — the tag binds " +
|
|
83
|
+
"your edit to this exact file version. Use `offset` (1-indexed start line) and " +
|
|
84
|
+
"`limit` (line count) to page large files; oversized output is capped and asks you " +
|
|
85
|
+
"to page. Images are returned as vision input; PDFs and Jupyter notebooks (.ipynb) " +
|
|
86
|
+
"are rendered as read-only text (no editable tag). Binary, device, and over-large " +
|
|
87
|
+
"files are refused.",
|
|
88
|
+
parameters: {
|
|
89
|
+
type: "object",
|
|
90
|
+
properties: {
|
|
91
|
+
path: { type: "string" },
|
|
92
|
+
offset: { type: "number", description: "1-indexed first line to show (default 1)." },
|
|
93
|
+
limit: { type: "number", description: "Maximum number of lines to show." },
|
|
94
|
+
},
|
|
95
|
+
required: ["path"],
|
|
96
|
+
},
|
|
97
|
+
summarize: (args) => {
|
|
98
|
+
const offset = optNum(args, "offset");
|
|
99
|
+
const limit = optNum(args, "limit");
|
|
100
|
+
const window = offset !== undefined || limit !== undefined ? ` (lines ${offset ?? 1}..${limit ? (offset ?? 1) + limit - 1 : "end"})` : "";
|
|
101
|
+
return `read ${str(args, "path")}${window}`;
|
|
102
|
+
},
|
|
9
103
|
async execute(args, ctx) {
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
104
|
+
const rel = str(args, "path");
|
|
105
|
+
const abs = containReadPath(ctx, rel);
|
|
106
|
+
if (!existsSync(abs))
|
|
107
|
+
return { ok: false, output: `No such file: ${rel}` };
|
|
108
|
+
const stat = statSync(abs);
|
|
109
|
+
if (!stat.isFile()) {
|
|
110
|
+
return { ok: false, output: `Not a regular file (device/socket/fifo/directory): ${rel}` };
|
|
111
|
+
}
|
|
112
|
+
if (stat.size > MAX_READ_BYTES) {
|
|
113
|
+
return { ok: false, output: `File too large to read (${stat.size} bytes > ${MAX_READ_BYTES}). Use grep/glob to locate, or a bash tail/sed window.` };
|
|
114
|
+
}
|
|
115
|
+
const buf = readFileSync(abs);
|
|
116
|
+
// (7.9 [5.5]) Image files → vision content parts (before the binary reject,
|
|
117
|
+
// which would otherwise refuse them). The model sees the pixels via the
|
|
118
|
+
// engine's vision-gated injection; clients render them from the tool:result.
|
|
119
|
+
const imageMime = sniffImageMime(buf);
|
|
120
|
+
if (imageMime) {
|
|
121
|
+
return readImageAsParts(buf, rel, imageMime);
|
|
122
|
+
}
|
|
123
|
+
// (7.9 [5.5]) PDFs are binary → extract text before the binary reject.
|
|
124
|
+
if (sniffPdf(buf)) {
|
|
125
|
+
return readPdfAsText(buf, rel);
|
|
126
|
+
}
|
|
127
|
+
// (7.9 [5.5]) Jupyter notebooks are JSON text, but the raw escaped source +
|
|
128
|
+
// base64 output blobs are unreadable — render a compact cell view instead.
|
|
129
|
+
if (rel.toLowerCase().endsWith(".ipynb")) {
|
|
130
|
+
return renderNotebook(buf.toString("utf8"), rel);
|
|
131
|
+
}
|
|
132
|
+
if (looksBinary(buf)) {
|
|
133
|
+
return { ok: false, output: `Binary file, not shown (${stat.size} bytes): ${rel}` };
|
|
134
|
+
}
|
|
135
|
+
// Canonical full text the tag binds to + the snapshot key both read and edit agree on.
|
|
136
|
+
const raw = buf.toString("utf8");
|
|
137
|
+
const { text: noBom } = stripBom(raw);
|
|
138
|
+
const fullText = normalizeToLF(noBom);
|
|
139
|
+
const key = hashlineSnapshotKey(ctx, rel);
|
|
140
|
+
const tag = ctx.snapshots?.record(key, fullText);
|
|
141
|
+
const header = tag ? formatHashlineHeader(rel, tag) : `¶${rel}`;
|
|
142
|
+
const offset = Math.max(1, Math.trunc(optNum(args, "offset") ?? 1));
|
|
143
|
+
const limitArg = optNum(args, "limit");
|
|
144
|
+
const limit = limitArg !== undefined ? Math.max(0, Math.trunc(limitArg)) : undefined;
|
|
145
|
+
// read-dedup: same window + unchanged mtime → skip the body, keep the tag.
|
|
146
|
+
const dedup = dedupStoreFor(ctx);
|
|
147
|
+
const dedupKey = `${key}|${offset}|${limit ?? "all"}`;
|
|
148
|
+
if (dedup.get(dedupKey) === stat.mtimeMs) {
|
|
149
|
+
return {
|
|
150
|
+
ok: true,
|
|
151
|
+
output: `${header}\n(unchanged since your last read of this window — file not modified. Use the tag above to edit, or read a different window.)`,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const lines = fullText.split("\n");
|
|
155
|
+
const total = lines.length;
|
|
156
|
+
const start = Math.min(offset, total + 1);
|
|
157
|
+
const end = limit !== undefined ? Math.min(start - 1 + limit, total) : total;
|
|
158
|
+
const windowLines = lines.slice(start - 1, end);
|
|
159
|
+
let body = windowLines.map((line, i) => formatNumberedLine(start + i, line)).join("\n");
|
|
160
|
+
const cap = readMaxTokens();
|
|
161
|
+
let capped = false;
|
|
162
|
+
// Number of lines actually shown — drives the continue-offset. (R2-SHOULD:
|
|
163
|
+
// counting non-blank lines undercounts windows with blank lines.)
|
|
164
|
+
let shownCount = windowLines.length;
|
|
165
|
+
if (!withinTokenCap(body, cap)) {
|
|
166
|
+
// Binary-search the largest line prefix that fits the token cap.
|
|
167
|
+
let lo = 0;
|
|
168
|
+
let hi = windowLines.length;
|
|
169
|
+
while (lo < hi) {
|
|
170
|
+
const mid = Math.ceil((lo + hi) / 2);
|
|
171
|
+
const candidate = windowLines.slice(0, mid).map((line, i) => formatNumberedLine(start + i, line)).join("\n");
|
|
172
|
+
if (withinTokenCap(candidate, cap))
|
|
173
|
+
lo = mid;
|
|
174
|
+
else
|
|
175
|
+
hi = mid - 1;
|
|
176
|
+
}
|
|
177
|
+
body = windowLines.slice(0, lo).map((line, i) => formatNumberedLine(start + i, line)).join("\n");
|
|
178
|
+
shownCount = lo;
|
|
179
|
+
capped = true;
|
|
180
|
+
}
|
|
181
|
+
dedupRemember(dedup, dedupKey, stat.mtimeMs);
|
|
182
|
+
const shownEnd = capped ? start - 1 + shownCount : end;
|
|
183
|
+
const footerParts = [];
|
|
184
|
+
if (start > 1 || shownEnd < total) {
|
|
185
|
+
footerParts.push(`(showing lines ${start}..${shownEnd} of ${total})`);
|
|
186
|
+
}
|
|
187
|
+
if (capped) {
|
|
188
|
+
footerParts.push(`output capped at ~${cap} tokens — continue with offset:${shownEnd + 1}`);
|
|
189
|
+
}
|
|
190
|
+
const footer = footerParts.length > 0 ? `\n${footerParts.join(" ")}` : "";
|
|
191
|
+
return { ok: true, output: `${header}\n${body}${footer}` };
|
|
16
192
|
},
|
|
17
193
|
};
|
|
18
194
|
//# sourceMappingURL=read.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/tools/builtins/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../../src/tools/builtins/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/tools/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/tools/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAcvC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,IAAI,EAa9B,CAAC"}
|
package/dist/tools/builtins.js
CHANGED
|
@@ -8,6 +8,8 @@ import { diffTool } from "./builtins/diff.js";
|
|
|
8
8
|
import { webFetchTool } from "./builtins/web-fetch.js";
|
|
9
9
|
import { lspTool } from "./builtins/lsp.js";
|
|
10
10
|
import { askUserQuestionTool } from "./builtins/ask-user-question.js";
|
|
11
|
+
import { astGrepTool } from "./builtins/ast-grep.js";
|
|
12
|
+
import { astEditTool } from "./builtins/ast-edit.js";
|
|
11
13
|
/**
|
|
12
14
|
* Registry of first-party tools the engine ships with. New tools live in their
|
|
13
15
|
* own module under `./builtins/<name>.ts`; this file is a pure barrel so the
|
|
@@ -25,5 +27,7 @@ export const builtinTools = [
|
|
|
25
27
|
webFetchTool,
|
|
26
28
|
lspTool,
|
|
27
29
|
askUserQuestionTool,
|
|
30
|
+
astGrepTool,
|
|
31
|
+
astEditTool,
|
|
28
32
|
];
|
|
29
33
|
//# sourceMappingURL=builtins.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/tools/builtins.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/tools/builtins.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,mBAAmB;IACnB,WAAW;IACX,WAAW;CACZ,CAAC"}
|
|
@@ -17,6 +17,14 @@ export declare function acquireFileLock(path: string): Promise<() => void>;
|
|
|
17
17
|
* any exit (success or throw).
|
|
18
18
|
*/
|
|
19
19
|
export declare function withFileLock<T>(path: string, fn: () => Promise<T>): Promise<T>;
|
|
20
|
+
/**
|
|
21
|
+
* (7.9 R1-M1/OQ5) Run `fn` while holding the mutation lock for EVERY path in
|
|
22
|
+
* `paths`, acquired in a stable sorted order (deadlock-free across concurrent
|
|
23
|
+
* multi-file edits) and released in reverse. The hashline `edit` / `ast_edit`
|
|
24
|
+
* tools hold all affected files' locks across the whole read-hash-apply-write
|
|
25
|
+
* span so the integrity check can't race a concurrent writer.
|
|
26
|
+
*/
|
|
27
|
+
export declare function withSortedFileLocks<T>(paths: readonly string[], fn: () => Promise<T>): Promise<T>;
|
|
20
28
|
/** Test-only: drop all lock state. Not exported from the package barrel. */
|
|
21
29
|
export declare function __resetFileLocks(): void;
|
|
22
30
|
//# sourceMappingURL=file-lock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../src/tools/file-lock.ts"],"names":[],"mappings":"AAsCA;sEACsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhD;AAaD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAEvE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOpF;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
1
|
+
{"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../src/tools/file-lock.ts"],"names":[],"mappings":"AAsCA;sEACsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhD;AAaD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAEvE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOpF;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAWvG;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
package/dist/tools/file-lock.js
CHANGED
|
@@ -78,6 +78,28 @@ export async function withFileLock(path, fn) {
|
|
|
78
78
|
release();
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* (7.9 R1-M1/OQ5) Run `fn` while holding the mutation lock for EVERY path in
|
|
83
|
+
* `paths`, acquired in a stable sorted order (deadlock-free across concurrent
|
|
84
|
+
* multi-file edits) and released in reverse. The hashline `edit` / `ast_edit`
|
|
85
|
+
* tools hold all affected files' locks across the whole read-hash-apply-write
|
|
86
|
+
* span so the integrity check can't race a concurrent writer.
|
|
87
|
+
*/
|
|
88
|
+
export async function withSortedFileLocks(paths, fn) {
|
|
89
|
+
// Dedup by lock key (two aliases to one inode share a mutex) and sort for a
|
|
90
|
+
// global acquisition order.
|
|
91
|
+
const keys = [...new Set(paths.map(fileLockKey))].sort();
|
|
92
|
+
const releases = [];
|
|
93
|
+
try {
|
|
94
|
+
for (const key of keys)
|
|
95
|
+
releases.push(await mutexFor(key).acquire());
|
|
96
|
+
return await fn();
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
for (const release of releases.reverse())
|
|
100
|
+
release();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
81
103
|
/** Test-only: drop all lock state. Not exported from the package barrel. */
|
|
82
104
|
export function __resetFileLocks() {
|
|
83
105
|
locks.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/tools/file-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AAEH,+EAA+E;AAC/E,MAAM,KAAK;IACD,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEhD,OAAO;QACL,IAAI,OAAoB,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE;YACnC,OAAO,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACvC,wEAAwE;QACxE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF;AAED;sEACsE;AACtE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;AAEvC,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;QAChB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,IAAY,EAAE,EAAoB;IACtE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB;IAC9B,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../../src/tools/file-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AAEH,+EAA+E;AAC/E,MAAM,KAAK;IACD,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEhD,OAAO;QACL,IAAI,OAAoB,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE;YACnC,OAAO,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACvC,wEAAwE;QACxE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF;AAED;sEACsE;AACtE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;AAEvC,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;QAChB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,IAAY,EAAE,EAAoB;IACtE,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAI,KAAwB,EAAE,EAAoB;IACzF,4EAA4E;IAC5E,4BAA4B;IAC5B,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACrE,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE;YAAE,OAAO,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB;IAC9B,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { Tool, ToolContext, ToolLspHost, ToolResult, ToolCategory, PermissionRequest, AuthorizationRequest, QuestionRequest, QuestionSpec, QuestionOption, PermissionResolver, PermissionDecision, AuthorizationDecision, QuestionDecision, } from "./types.js";
|
|
1
|
+
export type { Tool, ToolContext, ToolLspHost, ToolResult, ToolImagePart, ToolCategory, PermissionRequest, AuthorizationRequest, QuestionRequest, QuestionSpec, QuestionOption, PermissionResolver, PermissionDecision, AuthorizationDecision, QuestionDecision, } from "./types.js";
|
|
2
2
|
export { ASK_USER_QUESTION_TOOL_NAME, READONLY_CATEGORIES } from "./types.js";
|
|
3
3
|
export { type ToolBatch, isCallConcurrencySafe, partitionToolCalls } from "./concurrency.js";
|
|
4
4
|
export { isBashCommandReadOnly } from "./bash-readonly.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,KAAK,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACL,KAAK,kBAAkB,EACvB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,KAAK,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,iBAAiB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EACL,KAAK,kBAAkB,EACvB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAkB,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAwD,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvG,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAA0B,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAEL,cAAc,EACd,cAAc,EACd,YAAY,EACZ,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/tools/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { JSONValue } from "@chances-ai/runtime";
|
|
2
2
|
import type { ToolCategory } from "@chances-ai/runtime/config";
|
|
3
|
+
import type { SnapshotStore } from "../hashline/index.js";
|
|
3
4
|
export type { ToolCategory };
|
|
4
5
|
/** Minimum LSP host shape consumed by the `lsp` built-in tool. Kept
|
|
5
6
|
* narrow so this package doesn't depend on `@chances-ai/lsp` for
|
|
@@ -69,6 +70,15 @@ export interface ToolContext {
|
|
|
69
70
|
* result string (the engine never serializes answers itself).
|
|
70
71
|
*/
|
|
71
72
|
questionDecision?: QuestionDecision;
|
|
73
|
+
/**
|
|
74
|
+
* (7.9) Per-session hashline snapshot store, injected by the engine on every
|
|
75
|
+
* tool ctx. `read`/`search` call `snapshots.record(canonicalPath, normalized)`
|
|
76
|
+
* to mint the `¶path#TAG` they show the model; the `edit` tool's patcher
|
|
77
|
+
* validates that tag against it (exact-text integrity, R1-M3). Undefined only
|
|
78
|
+
* for non-engine callers (tests/plugins invoking a tool directly) — those
|
|
79
|
+
* paths degrade gracefully (read omits the tag; edit reports "re-read").
|
|
80
|
+
*/
|
|
81
|
+
snapshots?: SnapshotStore;
|
|
72
82
|
}
|
|
73
83
|
export interface ToolResult {
|
|
74
84
|
ok: boolean;
|
|
@@ -83,6 +93,22 @@ export interface ToolResult {
|
|
|
83
93
|
* field now so that tool drops in additively.
|
|
84
94
|
*/
|
|
85
95
|
terminate?: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* (7.9) Optional image attachments produced by the tool (the `read` tool on
|
|
98
|
+
* image files). The text `output` stays the model-facing summary (e.g.
|
|
99
|
+
* "[image: foo.png 800×600]"); the engine, when the active model supports
|
|
100
|
+
* vision, injects these as a follow-up `user` image message so the model
|
|
101
|
+
* actually sees the pixels, and forwards them to clients on the `tool:result`
|
|
102
|
+
* event for rendering. Undefined for all text tools.
|
|
103
|
+
*/
|
|
104
|
+
images?: ToolImagePart[];
|
|
105
|
+
}
|
|
106
|
+
/** A base64-encoded image attachment carried on a {@link ToolResult}. */
|
|
107
|
+
export interface ToolImagePart {
|
|
108
|
+
/** Base64-encoded image bytes (no data: prefix). */
|
|
109
|
+
data: string;
|
|
110
|
+
/** MIME type, e.g. `image/png`. */
|
|
111
|
+
mimeType: string;
|
|
86
112
|
}
|
|
87
113
|
/** Command pattern: each tool is a self-describing, executable unit. */
|
|
88
114
|
export interface Tool {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AA+SA;;;4BAG4B;AAC5B,MAAM,CAAC,MAAM,2BAA2B,GAAG,mBAAmB,CAAC;AAE/D;;iEAEiE;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAA8B,IAAI,GAAG,CAAe;IAClF,WAAW;IACX,QAAQ;IACR,aAAa;IACb,cAAc;CACf,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chances-ai/engine",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "29.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./ai": {
|
|
@@ -46,14 +46,19 @@
|
|
|
46
46
|
"./core": {
|
|
47
47
|
"types": "./dist/core/index.d.ts",
|
|
48
48
|
"import": "./dist/core/index.js"
|
|
49
|
+
},
|
|
50
|
+
"./hashline": {
|
|
51
|
+
"types": "./dist/hashline/index.d.ts",
|
|
52
|
+
"import": "./dist/hashline/index.js"
|
|
49
53
|
}
|
|
50
54
|
},
|
|
51
55
|
"files": [
|
|
52
56
|
"dist"
|
|
53
57
|
],
|
|
54
58
|
"dependencies": {
|
|
55
|
-
"@chances-ai/runtime": "
|
|
56
|
-
"@chances-ai/native": "
|
|
59
|
+
"@chances-ai/runtime": "29.0.0",
|
|
60
|
+
"@chances-ai/native": "29.0.0",
|
|
61
|
+
"diff": "^9.0.0"
|
|
57
62
|
},
|
|
58
63
|
"peerDependencies": {
|
|
59
64
|
"ai": "^4.3.0",
|