@chances-ai/tools 4.0.0 → 5.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/builtins/_shared.d.ts +16 -1
- package/dist/builtins/_shared.d.ts.map +1 -1
- package/dist/builtins/_shared.js +93 -5
- package/dist/builtins/_shared.js.map +1 -1
- package/dist/builtins/bash.d.ts.map +1 -1
- package/dist/builtins/bash.js +8 -1
- package/dist/builtins/bash.js.map +1 -1
- package/dist/builtins/lsp.d.ts +3 -0
- package/dist/builtins/lsp.d.ts.map +1 -0
- package/dist/builtins/lsp.js +102 -0
- package/dist/builtins/lsp.js.map +1 -0
- package/dist/builtins.d.ts.map +1 -1
- package/dist/builtins.js +2 -0
- package/dist/builtins.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +42 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -8,7 +8,22 @@ export declare function str(args: JSONValue, key: string): string;
|
|
|
8
8
|
export declare function optStr(args: JSONValue, key: string): string | undefined;
|
|
9
9
|
export declare function optNum(args: JSONValue, key: string): number | undefined;
|
|
10
10
|
export declare function optBool(args: JSONValue, key: string): boolean | undefined;
|
|
11
|
-
/** Resolves a path and refuses to escape the workspace root.
|
|
11
|
+
/** Resolves a path and refuses to escape the workspace root.
|
|
12
|
+
*
|
|
13
|
+
* Inside an **isolated context** (`runWithCwd` active — i.e. an
|
|
14
|
+
* `isolation: 'worktree'` subagent), symlinks are resolved through
|
|
15
|
+
* `realpathSync` before the containment check, so a tracked symlink
|
|
16
|
+
* inside the worktree that points outside it is rejected
|
|
17
|
+
* (4.1 codex Round-1 MUST-FIX #5). For non-existent leaves (the
|
|
18
|
+
* standard `write` case where the target file doesn't exist yet),
|
|
19
|
+
* we walk up to the nearest existing ancestor, realpath that, then
|
|
20
|
+
* re-join the missing tail. Both `workspaceRoot` and `abs` are
|
|
21
|
+
* realpath'd so the comparison is between fully-resolved trees.
|
|
22
|
+
*
|
|
23
|
+
* In the **non-isolated** (parent) context, behaviour is unchanged
|
|
24
|
+
* from 1.x for backward compatibility with parent-side tools that
|
|
25
|
+
* rely on lexical containment of symlinks.
|
|
26
|
+
*/
|
|
12
27
|
export declare function safePath(ctx: ToolContext, p: string): string;
|
|
13
28
|
/** Render a string as a short JSON-quoted preview for permission prompts. */
|
|
14
29
|
export declare function preview(s: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../src/builtins/_shared.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../src/builtins/_shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;sDAEsD;AACtD,eAAO,MAAM,gBAAgB,QAAa,CAAC;AAE3C,wBAAgB,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKvE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOvE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAKzE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoB5D;AA4DD,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzC"}
|
package/dist/builtins/_shared.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { lstatSync, readlinkSync, realpathSync } from "node:fs";
|
|
2
|
+
import { dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
3
|
+
import { AppError, ErrorCode, currentCwdOverride } from "@chances-ai/runtime";
|
|
3
4
|
/** Diff/write-preview cap: refuses to read either side of a comparison when it
|
|
4
5
|
* exceeds this many bytes, so a `write` against a generated 50 MB file doesn't
|
|
5
6
|
* stall the approval prompt on a synchronous read. */
|
|
@@ -35,14 +36,101 @@ export function optBool(args, key) {
|
|
|
35
36
|
throw new AppError(ErrorCode.Tool, `Expected boolean arg "${key}"`);
|
|
36
37
|
return v;
|
|
37
38
|
}
|
|
38
|
-
/** Resolves a path and refuses to escape the workspace root.
|
|
39
|
+
/** Resolves a path and refuses to escape the workspace root.
|
|
40
|
+
*
|
|
41
|
+
* Inside an **isolated context** (`runWithCwd` active — i.e. an
|
|
42
|
+
* `isolation: 'worktree'` subagent), symlinks are resolved through
|
|
43
|
+
* `realpathSync` before the containment check, so a tracked symlink
|
|
44
|
+
* inside the worktree that points outside it is rejected
|
|
45
|
+
* (4.1 codex Round-1 MUST-FIX #5). For non-existent leaves (the
|
|
46
|
+
* standard `write` case where the target file doesn't exist yet),
|
|
47
|
+
* we walk up to the nearest existing ancestor, realpath that, then
|
|
48
|
+
* re-join the missing tail. Both `workspaceRoot` and `abs` are
|
|
49
|
+
* realpath'd so the comparison is between fully-resolved trees.
|
|
50
|
+
*
|
|
51
|
+
* In the **non-isolated** (parent) context, behaviour is unchanged
|
|
52
|
+
* from 1.x for backward compatibility with parent-side tools that
|
|
53
|
+
* rely on lexical containment of symlinks.
|
|
54
|
+
*/
|
|
39
55
|
export function safePath(ctx, p) {
|
|
40
56
|
const abs = isAbsolute(p) ? p : resolve(ctx.cwd, p);
|
|
41
|
-
const
|
|
57
|
+
const isolated = currentCwdOverride() !== undefined;
|
|
58
|
+
if (!isolated) {
|
|
59
|
+
const rel = relative(ctx.workspaceRoot, abs);
|
|
60
|
+
if (rel.startsWith("..") || isAbsolute(rel)) {
|
|
61
|
+
throw new AppError(ErrorCode.Permission, `Path escapes workspace: ${p}`);
|
|
62
|
+
}
|
|
63
|
+
return abs;
|
|
64
|
+
}
|
|
65
|
+
// Isolated path: realpath both sides, then re-check.
|
|
66
|
+
const rootReal = realpathSafe(ctx.workspaceRoot);
|
|
67
|
+
const absReal = realpathExtant(abs);
|
|
68
|
+
const rel = relative(rootReal, absReal);
|
|
42
69
|
if (rel.startsWith("..") || isAbsolute(rel)) {
|
|
43
70
|
throw new AppError(ErrorCode.Permission, `Path escapes workspace: ${p}`);
|
|
44
71
|
}
|
|
45
|
-
return
|
|
72
|
+
return absReal;
|
|
73
|
+
}
|
|
74
|
+
/** Realpath an existing path. We always expect `workspaceRoot` to exist
|
|
75
|
+
* when invoked through the engine; if it doesn't we fall back to the
|
|
76
|
+
* original (lexical containment is then a no-op safety net). */
|
|
77
|
+
function realpathSafe(p) {
|
|
78
|
+
try {
|
|
79
|
+
return realpathSync(p);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return p;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** Realpath a path that may or may not exist, resolving any symlinks
|
|
86
|
+
* at the leaf — including DANGLING symlinks (Round-2 MUST-FIX #3). A
|
|
87
|
+
* symlink whose target doesn't exist would otherwise be accepted by the
|
|
88
|
+
* lexical containment check; a subsequent `write` would then follow the
|
|
89
|
+
* symlink and create the target OUTSIDE the worktree. We catch this by
|
|
90
|
+
* `lstat`-ing the leaf first; if it's a symlink, we resolve the link
|
|
91
|
+
* target manually (relative-to-link-dir if not absolute) and recurse.
|
|
92
|
+
* Bounded by `SYMLINK_RESOLVE_MAX_DEPTH` to defeat link cycles. */
|
|
93
|
+
const SYMLINK_RESOLVE_MAX_DEPTH = 8;
|
|
94
|
+
function realpathExtant(p, depth = 0) {
|
|
95
|
+
// Detect symlinks (live OR dangling) at the leaf BEFORE the
|
|
96
|
+
// `realpathSync` happy path — dangling symlinks make `realpathSync`
|
|
97
|
+
// throw ENOENT, which we previously swallowed and rejoined the leaf
|
|
98
|
+
// verbatim (the bug).
|
|
99
|
+
try {
|
|
100
|
+
const lst = lstatSync(p);
|
|
101
|
+
if (lst.isSymbolicLink()) {
|
|
102
|
+
if (depth >= SYMLINK_RESOLVE_MAX_DEPTH)
|
|
103
|
+
return p;
|
|
104
|
+
const target = readlinkSync(p);
|
|
105
|
+
const resolved = isAbsolute(target) ? target : resolve(dirname(p), target);
|
|
106
|
+
return realpathExtant(resolved, depth + 1);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// lstat ENOENT — leaf doesn't exist; fall through to ancestor walk.
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
return realpathSync(p);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
/* fall through */
|
|
117
|
+
}
|
|
118
|
+
let current = dirname(p);
|
|
119
|
+
let tail = p.slice(current.length);
|
|
120
|
+
while (current !== dirname(current)) {
|
|
121
|
+
try {
|
|
122
|
+
const real = realpathSync(current);
|
|
123
|
+
return join(real, tail);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
tail = current.slice(dirname(current).length) + tail;
|
|
127
|
+
current = dirname(current);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Reached the root without finding an existing ancestor; return the
|
|
131
|
+
// path lexically resolved (this is the standard cwd-relative form, so
|
|
132
|
+
// containment falls through to the lexical check above).
|
|
133
|
+
return p;
|
|
46
134
|
}
|
|
47
135
|
/** Render a string as a short JSON-quoted preview for permission prompts. */
|
|
48
136
|
export function preview(s) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../src/builtins/_shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../src/builtins/_shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/builtins/bash.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,aAAa,CAAC;AAoLpD,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/builtins/bash.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,aAAa,CAAC;AAoLpD,eAAO,MAAM,QAAQ,EAAE,IA2DtB,CAAC"}
|
package/dist/builtins/bash.js
CHANGED
|
@@ -190,7 +190,14 @@ export const bashTool = {
|
|
|
190
190
|
timeoutMs,
|
|
191
191
|
});
|
|
192
192
|
const cleaned = cleanOutput(result.output);
|
|
193
|
-
|
|
193
|
+
// (4.1 Round-2 SHOULD-FIX #4) Persist oversized output to the
|
|
194
|
+
// PARENT workspace's `.chances/tool-results/...` when we're inside
|
|
195
|
+
// an isolated subagent — the worktree may be removed after the
|
|
196
|
+
// task finishes (clean exit), which would invalidate any path
|
|
197
|
+
// surfaced to the model. Outside isolation, `parentWorkspaceRoot`
|
|
198
|
+
// equals `workspaceRoot`, so this is a no-op.
|
|
199
|
+
const persistRoot = ctx.parentWorkspaceRoot ?? ctx.workspaceRoot;
|
|
200
|
+
const { body } = formatBody(cleaned, persistRoot, result.outputTruncatedBytes);
|
|
194
201
|
// Status prefix is what the model reads first — must be unambiguous.
|
|
195
202
|
// Order matters: cancel beats timeout beats non-zero exit, because a
|
|
196
203
|
// user-initiated cancel might race with a timeout and the user
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/builtins/bash.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/builtins/bash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../../src/builtins/lsp.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,aAAa,CAAC;AAepD,eAAO,MAAM,OAAO,EAAE,IA4ErB,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* (4.2) `lsp` built-in tool — read-only LSP queries.
|
|
3
|
+
*
|
|
4
|
+
* One tool, nine ops, claude-code-shape. The actual host
|
|
5
|
+
* (`@chances-ai/lsp`) is wired in at boot via `ToolContext.lsp`;
|
|
6
|
+
* when absent, the tool fails fast so the model sees the install hint.
|
|
7
|
+
*
|
|
8
|
+
* Category is `integration` (codex Round-1 MUST-FIX #4) — NOT `search`.
|
|
9
|
+
* LSP spawns a long-lived user-space binary; that's materially
|
|
10
|
+
* different from the in-process grep/glob.
|
|
11
|
+
*/
|
|
12
|
+
import { AppError, ErrorCode } from "@chances-ai/runtime";
|
|
13
|
+
import { optNum, optStr, safePath, str } from "./_shared.js";
|
|
14
|
+
const VALID_OPS = new Set([
|
|
15
|
+
"goToDefinition",
|
|
16
|
+
"findReferences",
|
|
17
|
+
"hover",
|
|
18
|
+
"documentSymbol",
|
|
19
|
+
"workspaceSymbol",
|
|
20
|
+
"goToImplementation",
|
|
21
|
+
"prepareCallHierarchy",
|
|
22
|
+
"incomingCalls",
|
|
23
|
+
"outgoingCalls",
|
|
24
|
+
]);
|
|
25
|
+
export const lspTool = {
|
|
26
|
+
name: "lsp",
|
|
27
|
+
description: "Language-server-protocol queries (read-only). Ops: goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol, goToImplementation, prepareCallHierarchy, incomingCalls, outgoingCalls. Uses whichever language server you have installed (typescript-language-server, rust-analyzer, pyright, gopls). Coordinates are 1-based.",
|
|
28
|
+
category: "integration",
|
|
29
|
+
parameters: {
|
|
30
|
+
type: "object",
|
|
31
|
+
properties: {
|
|
32
|
+
op: {
|
|
33
|
+
type: "string",
|
|
34
|
+
enum: [
|
|
35
|
+
"goToDefinition",
|
|
36
|
+
"findReferences",
|
|
37
|
+
"hover",
|
|
38
|
+
"documentSymbol",
|
|
39
|
+
"workspaceSymbol",
|
|
40
|
+
"goToImplementation",
|
|
41
|
+
"prepareCallHierarchy",
|
|
42
|
+
"incomingCalls",
|
|
43
|
+
"outgoingCalls",
|
|
44
|
+
],
|
|
45
|
+
description: "LSP operation to perform.",
|
|
46
|
+
},
|
|
47
|
+
filePath: {
|
|
48
|
+
type: "string",
|
|
49
|
+
description: "Workspace-relative or absolute path. Required for every op except `workspaceSymbol`.",
|
|
50
|
+
},
|
|
51
|
+
line: { type: "number", description: "1-based line number. Required for position-based ops." },
|
|
52
|
+
character: { type: "number", description: "1-based character offset. Required for position-based ops." },
|
|
53
|
+
query: {
|
|
54
|
+
type: "string",
|
|
55
|
+
description: "Symbol name fragment. Required for `workspaceSymbol`. Must be non-empty.",
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
required: ["op"],
|
|
59
|
+
},
|
|
60
|
+
summarize(args) {
|
|
61
|
+
const op = optStr(args, "op") ?? "lsp";
|
|
62
|
+
const where = optStr(args, "filePath") ?? optStr(args, "query") ?? "";
|
|
63
|
+
return `lsp ${op}${where ? " " + where : ""}`;
|
|
64
|
+
},
|
|
65
|
+
async execute(args, ctx) {
|
|
66
|
+
const op = str(args, "op");
|
|
67
|
+
if (!VALID_OPS.has(op)) {
|
|
68
|
+
return { ok: false, output: `Unknown lsp op: ${op}` };
|
|
69
|
+
}
|
|
70
|
+
if (!ctx.lsp) {
|
|
71
|
+
return {
|
|
72
|
+
ok: false,
|
|
73
|
+
output: "LSP not available: install `vscode-jsonrpc` as a peer dep (and a language server like typescript-language-server / rust-analyzer / pyright / gopls), then restart.",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const filePath = optStr(args, "filePath");
|
|
77
|
+
const abs = filePath ? safePath(ctx, filePath) : undefined;
|
|
78
|
+
const line = optNum(args, "line");
|
|
79
|
+
const character = optNum(args, "character");
|
|
80
|
+
const query = optStr(args, "query");
|
|
81
|
+
try {
|
|
82
|
+
return await ctx.lsp.execute({
|
|
83
|
+
op,
|
|
84
|
+
filePath: abs,
|
|
85
|
+
line,
|
|
86
|
+
character,
|
|
87
|
+
query,
|
|
88
|
+
cwd: ctx.cwd,
|
|
89
|
+
signal: ctx.signal,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
// codex Round-1 MUST-FIX #5 — cancellation must propagate as
|
|
94
|
+
// engine-level AppError(Cancelled), not be swallowed into ok:false.
|
|
95
|
+
if (e instanceof AppError && e.code === ErrorCode.Cancelled)
|
|
96
|
+
throw e;
|
|
97
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
98
|
+
return { ok: false, output: `LSP ${op} failed: ${msg}` };
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=lsp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp.js","sourceRoot":"","sources":["../../src/builtins/lsp.ts"],"names":[],"mappings":"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"}
|
package/dist/builtins.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../src/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAWvC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,IAAI,EAU9B,CAAC"}
|
package/dist/builtins.js
CHANGED
|
@@ -6,6 +6,7 @@ import { grepTool } from "./builtins/grep.js";
|
|
|
6
6
|
import { globTool } from "./builtins/glob.js";
|
|
7
7
|
import { diffTool } from "./builtins/diff.js";
|
|
8
8
|
import { webFetchTool } from "./builtins/web-fetch.js";
|
|
9
|
+
import { lspTool } from "./builtins/lsp.js";
|
|
9
10
|
/**
|
|
10
11
|
* Registry of first-party tools the engine ships with. New tools live in their
|
|
11
12
|
* own module under `./builtins/<name>.ts`; this file is a pure barrel so the
|
|
@@ -21,5 +22,6 @@ export const builtinTools = [
|
|
|
21
22
|
globTool,
|
|
22
23
|
diffTool,
|
|
23
24
|
webFetchTool,
|
|
25
|
+
lspTool,
|
|
24
26
|
];
|
|
25
27
|
//# sourceMappingURL=builtins.js.map
|
package/dist/builtins.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../src/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;
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../src/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;AAE5C;;;;;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;CACR,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { Tool, ToolContext, ToolResult, ToolCategory, PermissionRequest, PermissionResolver, } from "./types.js";
|
|
1
|
+
export type { Tool, ToolContext, ToolLspHost, ToolResult, ToolCategory, PermissionRequest, PermissionResolver, } from "./types.js";
|
|
2
2
|
export { ToolRegistry } from "./registry.js";
|
|
3
3
|
export { type PermissionCacheScope, PermissionGate } from "./permission.js";
|
|
4
4
|
export { builtinTools } from "./builtins.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAA6B,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,10 +1,52 @@
|
|
|
1
1
|
import type { JSONValue } from "@chances-ai/runtime";
|
|
2
2
|
import type { ToolCategory } from "@chances-ai/config";
|
|
3
3
|
export type { ToolCategory };
|
|
4
|
+
/** Minimum LSP host shape consumed by the `lsp` built-in tool. Kept
|
|
5
|
+
* narrow so this package doesn't depend on `@chances-ai/lsp` for
|
|
6
|
+
* types — the engine wires the real instance in at boot time and
|
|
7
|
+
* downcasts. (codex Round-1 MUST-FIX #1.) */
|
|
8
|
+
export interface ToolLspHost {
|
|
9
|
+
execute(req: {
|
|
10
|
+
op: string;
|
|
11
|
+
filePath?: string;
|
|
12
|
+
line?: number;
|
|
13
|
+
character?: number;
|
|
14
|
+
query?: string;
|
|
15
|
+
cwd: string;
|
|
16
|
+
signal: AbortSignal;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
ok: boolean;
|
|
19
|
+
output: string;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
4
22
|
export interface ToolContext {
|
|
5
23
|
workspaceRoot: string;
|
|
6
24
|
cwd: string;
|
|
7
25
|
signal: AbortSignal;
|
|
26
|
+
/**
|
|
27
|
+
* (4.1) The parent (non-isolated) workspace root. Inside an isolated
|
|
28
|
+
* subagent, `workspaceRoot` and `cwd` flip to the worktree path, but
|
|
29
|
+
* **artifact persistence paths** (e.g. `bash`'s oversized-output dump
|
|
30
|
+
* under `.chances/tool-results/`) should land in the PARENT workspace
|
|
31
|
+
* so the parent's `.chances/` directory accumulates the durable
|
|
32
|
+
* record. Otherwise a clean-removed worktree could swallow the
|
|
33
|
+
* persisted file just as the tool returns its path.
|
|
34
|
+
*
|
|
35
|
+
* Outside isolation, this equals `workspaceRoot`. Tools that emit
|
|
36
|
+
* artifacts should prefer `parentWorkspaceRoot ?? workspaceRoot` so
|
|
37
|
+
* the contract is uniform across both branches. Round-2 SHOULD-FIX
|
|
38
|
+
* #4.
|
|
39
|
+
*/
|
|
40
|
+
parentWorkspaceRoot?: string;
|
|
41
|
+
/**
|
|
42
|
+
* (4.2) Optional LSP host wired in at boot when the user has
|
|
43
|
+
* `vscode-jsonrpc` installed AND `config.lsp.enabled !== false`.
|
|
44
|
+
* Undefined when the peer is absent or LSP is disabled — the `lsp`
|
|
45
|
+
* tool fails fast with a labelled `ok:false` in that case.
|
|
46
|
+
* codex Round-1 MUST-FIX #1 — wrapper cannot reach a CLI-boot-time
|
|
47
|
+
* host without this engine plumbing.
|
|
48
|
+
*/
|
|
49
|
+
lsp?: ToolLspHost;
|
|
8
50
|
}
|
|
9
51
|
export interface ToolResult {
|
|
10
52
|
ok: boolean;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;6CAG6C;AAC7C,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,GAAG,EAAE;QACX,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,WAAW,CAAC;KACrB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,WAAW,CAAC;IACpB;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wEAAwE;AACxE,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,2EAA2E;IAC3E,UAAU,EAAE,SAAS,CAAC;IACtB;;;qCAGiC;IACjC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,MAAM,CAAC;IACrD,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,gFAAgF;AAChF,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chances-ai/tools",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"dist"
|
|
15
15
|
],
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@chances-ai/runtime": "
|
|
18
|
-
"@chances-ai/config": "
|
|
19
|
-
"@chances-ai/native": "
|
|
17
|
+
"@chances-ai/runtime": "5.0.0",
|
|
18
|
+
"@chances-ai/config": "5.0.0",
|
|
19
|
+
"@chances-ai/native": "5.0.0"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
22
|
"build": "tsc -b",
|