@namzu/sdk 57.0.0 → 58.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/CHANGELOG.md +62 -0
- package/dist/agents/QueryAgent.d.ts.map +1 -1
- package/dist/agents/QueryAgent.js +3 -0
- package/dist/agents/QueryAgent.js.map +1 -1
- package/dist/agents/file-definitions.d.ts +35 -4
- package/dist/agents/file-definitions.d.ts.map +1 -1
- package/dist/agents/file-definitions.js +98 -8
- package/dist/agents/file-definitions.js.map +1 -1
- package/dist/authorization/protected-paths.d.ts +9 -0
- package/dist/authorization/protected-paths.d.ts.map +1 -1
- package/dist/authorization/protected-paths.js +29 -3
- package/dist/authorization/protected-paths.js.map +1 -1
- package/dist/compaction/index.d.ts +1 -0
- package/dist/compaction/index.d.ts.map +1 -1
- package/dist/compaction/index.js.map +1 -1
- package/dist/compaction/manual.d.ts +7 -0
- package/dist/compaction/manual.d.ts.map +1 -1
- package/dist/compaction/manual.js +31 -12
- package/dist/compaction/manual.js.map +1 -1
- package/dist/compaction/model-summary.d.ts +101 -0
- package/dist/compaction/model-summary.d.ts.map +1 -0
- package/dist/compaction/model-summary.js +333 -0
- package/dist/compaction/model-summary.js.map +1 -0
- package/dist/compaction/verifier.d.ts +6 -1
- package/dist/compaction/verifier.d.ts.map +1 -1
- package/dist/compaction/verifier.js +3 -3
- package/dist/compaction/verifier.js.map +1 -1
- package/dist/config/runtime.d.ts +62 -0
- package/dist/config/runtime.d.ts.map +1 -1
- package/dist/config/runtime.js +16 -0
- package/dist/config/runtime.js.map +1 -1
- package/dist/connector/mcp/client.d.ts +8 -0
- package/dist/connector/mcp/client.d.ts.map +1 -1
- package/dist/connector/mcp/client.js +75 -2
- package/dist/connector/mcp/client.js.map +1 -1
- package/dist/constants/mcp/index.d.ts +2 -0
- package/dist/constants/mcp/index.d.ts.map +1 -1
- package/dist/constants/mcp/index.js +2 -0
- package/dist/constants/mcp/index.js.map +1 -1
- package/dist/constants/plugin/index.d.ts +2 -0
- package/dist/constants/plugin/index.d.ts.map +1 -1
- package/dist/constants/plugin/index.js +2 -0
- package/dist/constants/plugin/index.js.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts +1 -1
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +25 -4
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/session/turn-recorder.d.ts.map +1 -1
- package/dist/manager/session/turn-recorder.js +2 -1
- package/dist/manager/session/turn-recorder.js.map +1 -1
- package/dist/persona/assembler.d.ts.map +1 -1
- package/dist/persona/assembler.js +2 -2
- package/dist/persona/assembler.js.map +1 -1
- package/dist/plugin/index.d.ts +1 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/lifecycle.d.ts +8 -1
- package/dist/plugin/lifecycle.d.ts.map +1 -1
- package/dist/plugin/lifecycle.js +9 -2
- package/dist/plugin/lifecycle.js.map +1 -1
- package/dist/plugin/shell-hook-http.d.ts +39 -0
- package/dist/plugin/shell-hook-http.d.ts.map +1 -0
- package/dist/plugin/shell-hook-http.js +163 -0
- package/dist/plugin/shell-hook-http.js.map +1 -0
- package/dist/plugin/shell-hook.d.ts +93 -11
- package/dist/plugin/shell-hook.d.ts.map +1 -1
- package/dist/plugin/shell-hook.js +223 -39
- package/dist/plugin/shell-hook.js.map +1 -1
- package/dist/prompt/coding-agent-doctrine.d.ts +1 -1
- package/dist/prompt/coding-agent-doctrine.d.ts.map +1 -1
- package/dist/prompt/coding-agent-doctrine.js +2 -1
- package/dist/prompt/coding-agent-doctrine.js.map +1 -1
- package/dist/public-runtime.d.ts +3 -2
- package/dist/public-runtime.d.ts.map +1 -1
- package/dist/public-runtime.js +2 -2
- package/dist/public-runtime.js.map +1 -1
- package/dist/public-tools.d.ts +1 -0
- package/dist/public-tools.d.ts.map +1 -1
- package/dist/public-tools.js +2 -0
- package/dist/public-tools.js.map +1 -1
- package/dist/public-types.d.ts +1 -1
- package/dist/public-types.d.ts.map +1 -1
- package/dist/runtime/query/executor.d.ts +4 -0
- package/dist/runtime/query/executor.d.ts.map +1 -1
- package/dist/runtime/query/executor.js +47 -9
- package/dist/runtime/query/executor.js.map +1 -1
- package/dist/runtime/query/index.d.ts +8 -0
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +29 -1
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/runtime/query/iteration/index.d.ts.map +1 -1
- package/dist/runtime/query/iteration/index.js +6 -2
- package/dist/runtime/query/iteration/index.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction-breaker.d.ts +18 -8
- package/dist/runtime/query/iteration/phases/compaction-breaker.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction-breaker.js +33 -9
- package/dist/runtime/query/iteration/phases/compaction-breaker.js.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/compaction.js +52 -5
- package/dist/runtime/query/iteration/phases/compaction.js.map +1 -1
- package/dist/runtime/query/iteration/phases/context.d.ts +5 -0
- package/dist/runtime/query/iteration/phases/context.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/context.js.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.d.ts.map +1 -1
- package/dist/runtime/query/iteration/phases/tool-review.js +70 -3
- package/dist/runtime/query/iteration/phases/tool-review.js.map +1 -1
- package/dist/runtime/query/path-escalation.d.ts +2 -0
- package/dist/runtime/query/path-escalation.d.ts.map +1 -1
- package/dist/runtime/query/path-escalation.js +7 -4
- package/dist/runtime/query/path-escalation.js.map +1 -1
- package/dist/runtime/query/plugin-hooks.js +2 -2
- package/dist/runtime/query/plugin-hooks.js.map +1 -1
- package/dist/runtime/query/prepare-turn.d.ts +2 -0
- package/dist/runtime/query/prepare-turn.d.ts.map +1 -1
- package/dist/runtime/query/prepare-turn.js +25 -0
- package/dist/runtime/query/prepare-turn.js.map +1 -1
- package/dist/runtime/query/review-policy.d.ts +3 -2
- package/dist/runtime/query/review-policy.d.ts.map +1 -1
- package/dist/runtime/query/review-policy.js +32 -13
- package/dist/runtime/query/review-policy.js.map +1 -1
- package/dist/scheduler/local.js +1 -1
- package/dist/scheduler/local.js.map +1 -1
- package/dist/session/retention/archive.js +1 -1
- package/dist/session/retention/archive.js.map +1 -1
- package/dist/session/workspace/driver.d.ts +6 -0
- package/dist/session/workspace/driver.d.ts.map +1 -1
- package/dist/session/workspace/git-worktree.d.ts.map +1 -1
- package/dist/session/workspace/git-worktree.js +28 -0
- package/dist/session/workspace/git-worktree.js.map +1 -1
- package/dist/skills/index.d.ts +1 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -1
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/loader.d.ts +7 -0
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +53 -0
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/registry.d.ts +1 -1
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +2 -1
- package/dist/skills/registry.js.map +1 -1
- package/dist/tools/builtins/bash-cwd.d.ts +52 -0
- package/dist/tools/builtins/bash-cwd.d.ts.map +1 -0
- package/dist/tools/builtins/bash-cwd.js +127 -0
- package/dist/tools/builtins/bash-cwd.js.map +1 -0
- package/dist/tools/builtins/bash.d.ts.map +1 -1
- package/dist/tools/builtins/bash.js +41 -6
- package/dist/tools/builtins/bash.js.map +1 -1
- package/dist/tools/builtins/bounded-file-read.d.ts +10 -0
- package/dist/tools/builtins/bounded-file-read.d.ts.map +1 -0
- package/dist/tools/builtins/bounded-file-read.js +67 -0
- package/dist/tools/builtins/bounded-file-read.js.map +1 -0
- package/dist/tools/builtins/grep.d.ts +6 -1
- package/dist/tools/builtins/grep.d.ts.map +1 -1
- package/dist/tools/builtins/grep.js +187 -24
- package/dist/tools/builtins/grep.js.map +1 -1
- package/dist/tools/builtins/read-file.d.ts +1 -0
- package/dist/tools/builtins/read-file.d.ts.map +1 -1
- package/dist/tools/builtins/read-file.js +113 -28
- package/dist/tools/builtins/read-file.js.map +1 -1
- package/dist/tools/builtins/read-media.d.ts +68 -0
- package/dist/tools/builtins/read-media.d.ts.map +1 -0
- package/dist/tools/builtins/read-media.js +397 -0
- package/dist/tools/builtins/read-media.js.map +1 -0
- package/dist/tools/builtins/search-tools.js +1 -1
- package/dist/tools/builtins/search-tools.js.map +1 -1
- package/dist/tools/builtins/skill.d.ts +4 -2
- package/dist/tools/builtins/skill.d.ts.map +1 -1
- package/dist/tools/builtins/skill.js +61 -2
- package/dist/tools/builtins/skill.js.map +1 -1
- package/dist/tools/builtins/sleep-guard.d.ts +15 -0
- package/dist/tools/builtins/sleep-guard.d.ts.map +1 -0
- package/dist/tools/builtins/sleep-guard.js +33 -0
- package/dist/tools/builtins/sleep-guard.js.map +1 -0
- package/dist/tools/builtins/view-image.d.ts +23 -1
- package/dist/tools/builtins/view-image.d.ts.map +1 -1
- package/dist/tools/builtins/view-image.js +66 -58
- package/dist/tools/builtins/view-image.js.map +1 -1
- package/dist/tools/file-read-tracker.d.ts.map +1 -1
- package/dist/tools/file-read-tracker.js +31 -0
- package/dist/tools/file-read-tracker.js.map +1 -1
- package/dist/toolsets/manager.js +3 -3
- package/dist/toolsets/manager.js.map +1 -1
- package/dist/types/agent/base.d.ts +8 -0
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/query.d.ts +2 -0
- package/dist/types/agent/query.d.ts.map +1 -1
- package/dist/types/agent/scheduler.d.ts +8 -0
- package/dist/types/agent/scheduler.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +6 -2
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/agent/task.js.map +1 -1
- package/dist/types/connector/mcp.d.ts +46 -0
- package/dist/types/connector/mcp.d.ts.map +1 -1
- package/dist/types/hitl/index.d.ts +1 -1
- package/dist/types/plugin/index.d.ts +74 -7
- package/dist/types/plugin/index.d.ts.map +1 -1
- package/dist/types/plugin/index.js +12 -1
- package/dist/types/plugin/index.js.map +1 -1
- package/dist/types/session/sub-session.d.ts +6 -2
- package/dist/types/session/sub-session.d.ts.map +1 -1
- package/dist/types/skills/index.d.ts +36 -0
- package/dist/types/skills/index.d.ts.map +1 -1
- package/dist/types/skills/index.js +9 -0
- package/dist/types/skills/index.js.map +1 -1
- package/dist/types/tool/index.d.ts +37 -0
- package/dist/types/tool/index.d.ts.map +1 -1
- package/dist/types/tool/index.js.map +1 -1
- package/dist/types/workspace/ref.d.ts +2 -0
- package/dist/types/workspace/ref.d.ts.map +1 -1
- package/dist/utils/frontmatter.d.ts +12 -0
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +6 -0
- package/dist/utils/frontmatter.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/QueryAgent.ts +3 -0
- package/src/agents/file-definitions.ts +126 -6
- package/src/authorization/protected-paths.ts +30 -2
- package/src/compaction/index.ts +1 -0
- package/src/compaction/manual.ts +68 -30
- package/src/compaction/model-summary.ts +412 -0
- package/src/compaction/verifier.ts +3 -3
- package/src/config/runtime.ts +16 -0
- package/src/connector/mcp/client.ts +87 -1
- package/src/constants/mcp/index.ts +3 -0
- package/src/constants/plugin/index.ts +2 -0
- package/src/manager/agent/lifecycle.ts +24 -5
- package/src/manager/session/turn-recorder.ts +2 -1
- package/src/persona/assembler.ts +2 -2
- package/src/plugin/index.ts +5 -0
- package/src/plugin/lifecycle.ts +16 -2
- package/src/plugin/shell-hook-http.ts +181 -0
- package/src/plugin/shell-hook.ts +386 -89
- package/src/prompt/coding-agent-doctrine.ts +2 -1
- package/src/public-runtime.ts +6 -0
- package/src/public-tools.ts +2 -0
- package/src/public-types.ts +5 -0
- package/src/runtime/query/executor.ts +54 -10
- package/src/runtime/query/index.ts +44 -0
- package/src/runtime/query/iteration/index.ts +11 -3
- package/src/runtime/query/iteration/phases/compaction-breaker.ts +38 -9
- package/src/runtime/query/iteration/phases/compaction.ts +67 -5
- package/src/runtime/query/iteration/phases/context.ts +6 -0
- package/src/runtime/query/iteration/phases/tool-review.ts +74 -3
- package/src/runtime/query/path-escalation.ts +11 -5
- package/src/runtime/query/plugin-hooks.ts +2 -2
- package/src/runtime/query/prepare-turn.ts +33 -0
- package/src/runtime/query/review-policy.ts +45 -16
- package/src/scheduler/local.ts +1 -1
- package/src/session/retention/archive.ts +1 -1
- package/src/session/workspace/driver.ts +6 -0
- package/src/session/workspace/git-worktree.ts +31 -0
- package/src/skills/index.ts +6 -1
- package/src/skills/loader.ts +54 -0
- package/src/skills/registry.ts +7 -6
- package/src/tools/builtins/bash-cwd.ts +156 -0
- package/src/tools/builtins/bash.ts +79 -34
- package/src/tools/builtins/bounded-file-read.ts +80 -0
- package/src/tools/builtins/grep.ts +198 -28
- package/src/tools/builtins/read-file.ts +151 -30
- package/src/tools/builtins/read-media.ts +483 -0
- package/src/tools/builtins/search-tools.ts +1 -1
- package/src/tools/builtins/skill.ts +91 -2
- package/src/tools/builtins/sleep-guard.ts +31 -0
- package/src/tools/builtins/view-image.ts +74 -62
- package/src/tools/file-read-tracker.ts +30 -0
- package/src/toolsets/manager.ts +3 -3
- package/src/types/agent/base.ts +9 -0
- package/src/types/agent/query.ts +2 -0
- package/src/types/agent/scheduler.ts +9 -0
- package/src/types/agent/task.ts +6 -2
- package/src/types/connector/mcp.ts +48 -0
- package/src/types/hitl/index.ts +1 -1
- package/src/types/plugin/index.ts +102 -16
- package/src/types/session/sub-session.ts +6 -2
- package/src/types/skills/index.ts +48 -0
- package/src/types/tool/index.ts +38 -0
- package/src/types/workspace/ref.ts +2 -0
- package/src/utils/frontmatter.ts +21 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
2
|
import { isAbsolute, join, relative, sep } from 'node:path';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { walkFilesLocally } from '../../sandbox/file-walk.js';
|
|
@@ -6,6 +6,7 @@ import { subscribeToAbort } from '../../utils/abort.js';
|
|
|
6
6
|
import { defineTool } from '../defineTool.js';
|
|
7
7
|
import { resolveWithin, resolveWithinAny, resolveWithinAnyReal, resolveWithinReal, toolRoots, } from '../paths.js';
|
|
8
8
|
import { relativePosix, resolveWithinPosix } from '../posix-path.js';
|
|
9
|
+
import { readBoundedChunks, readBoundedFile } from './bounded-file-read.js';
|
|
9
10
|
/** A remote read has no signal parameter; stop consuming it when the turn ends. */
|
|
10
11
|
async function readWithSignal(read, signal) {
|
|
11
12
|
signal?.throwIfAborted();
|
|
@@ -48,6 +49,45 @@ function relativeInclude(include, root, sandboxed) {
|
|
|
48
49
|
export const DEFAULT_HEAD_LIMIT = 250;
|
|
49
50
|
/** A matching or context line longer than this is replaced by a notice, not printed. */
|
|
50
51
|
export const MAX_LINE_COLUMNS = 500;
|
|
52
|
+
/** File kinds for the `type` argument: extensions (without the dot) and exact file names. */
|
|
53
|
+
const FILE_TYPES = {
|
|
54
|
+
js: { ext: ['js', 'jsx', 'mjs', 'cjs'] },
|
|
55
|
+
ts: { ext: ['ts', 'tsx', 'mts', 'cts'] },
|
|
56
|
+
py: { ext: ['py', 'pyi'] },
|
|
57
|
+
rust: { ext: ['rs'] },
|
|
58
|
+
go: { ext: ['go'] },
|
|
59
|
+
java: { ext: ['java'] },
|
|
60
|
+
kotlin: { ext: ['kt', 'kts'] },
|
|
61
|
+
swift: { ext: ['swift'] },
|
|
62
|
+
c: { ext: ['c', 'h'] },
|
|
63
|
+
cpp: { ext: ['cc', 'cpp', 'cxx', 'hpp', 'hh', 'hxx', 'h'] },
|
|
64
|
+
cs: { ext: ['cs'] },
|
|
65
|
+
rb: { ext: ['rb', 'rake', 'gemspec'] },
|
|
66
|
+
php: { ext: ['php'] },
|
|
67
|
+
sh: { ext: ['sh', 'bash', 'zsh'] },
|
|
68
|
+
md: { ext: ['md', 'markdown', 'mdx'] },
|
|
69
|
+
json: { ext: ['json', 'jsonc'] },
|
|
70
|
+
yaml: { ext: ['yml', 'yaml'] },
|
|
71
|
+
toml: { ext: ['toml'] },
|
|
72
|
+
html: { ext: ['html', 'htm'] },
|
|
73
|
+
css: { ext: ['css', 'scss', 'sass', 'less'] },
|
|
74
|
+
sql: { ext: ['sql'] },
|
|
75
|
+
xml: { ext: ['xml'] },
|
|
76
|
+
make: { ext: ['mk', 'mak'], names: ['Makefile', 'makefile', 'GNUmakefile'] },
|
|
77
|
+
docker: { ext: [], names: ['Dockerfile'] },
|
|
78
|
+
};
|
|
79
|
+
FILE_TYPES.javascript = FILE_TYPES.js;
|
|
80
|
+
FILE_TYPES.typescript = FILE_TYPES.ts;
|
|
81
|
+
FILE_TYPES.python = FILE_TYPES.py;
|
|
82
|
+
FILE_TYPES.rs = FILE_TYPES.rust;
|
|
83
|
+
FILE_TYPES.markdown = FILE_TYPES.md;
|
|
84
|
+
function matchesType(path, kind) {
|
|
85
|
+
const name = path.slice(path.lastIndexOf('/') + 1);
|
|
86
|
+
if (kind.names?.includes(name))
|
|
87
|
+
return true;
|
|
88
|
+
const dot = name.lastIndexOf('.');
|
|
89
|
+
return dot > 0 && kind.ext.includes(name.slice(dot + 1));
|
|
90
|
+
}
|
|
51
91
|
const inputSchema = z.object({
|
|
52
92
|
pattern: z.string().describe('Regular expression pattern to search for in file contents'),
|
|
53
93
|
path: z
|
|
@@ -65,6 +105,22 @@ const inputSchema = z.object({
|
|
|
65
105
|
.min(0)
|
|
66
106
|
.default(0)
|
|
67
107
|
.describe('Number of lines to show before and after each match'),
|
|
108
|
+
before_context: z.coerce
|
|
109
|
+
.number()
|
|
110
|
+
.int()
|
|
111
|
+
.min(0)
|
|
112
|
+
.optional()
|
|
113
|
+
.describe('Lines before each content match; overrides context_lines for this side.'),
|
|
114
|
+
after_context: z.coerce
|
|
115
|
+
.number()
|
|
116
|
+
.int()
|
|
117
|
+
.min(0)
|
|
118
|
+
.optional()
|
|
119
|
+
.describe('Lines after each content match; overrides context_lines for this side.'),
|
|
120
|
+
only_matching: z
|
|
121
|
+
.boolean()
|
|
122
|
+
.optional()
|
|
123
|
+
.describe('In content mode, print each matched substring instead of the whole line. Ignores context.'),
|
|
68
124
|
output_mode: z
|
|
69
125
|
.enum(['files_with_matches', 'content', 'count'])
|
|
70
126
|
.default('files_with_matches')
|
|
@@ -81,6 +137,14 @@ const inputSchema = z.object({
|
|
|
81
137
|
.min(0)
|
|
82
138
|
.default(0)
|
|
83
139
|
.describe('Skip this many entries before applying head_limit, to page through results.'),
|
|
140
|
+
multiline: z
|
|
141
|
+
.boolean()
|
|
142
|
+
.optional()
|
|
143
|
+
.describe('Let a pattern span lines: "." also matches a newline, and "^" and "$" match at line starts and ends. Content mode prints every line a match covers.'),
|
|
144
|
+
type: z
|
|
145
|
+
.string()
|
|
146
|
+
.optional()
|
|
147
|
+
.describe('Only search files of this kind, e.g. "js", "ts", "py", "rust", "go", "java", "md". Narrows what include selects.'),
|
|
84
148
|
max_results: z.coerce
|
|
85
149
|
.number()
|
|
86
150
|
.int()
|
|
@@ -101,7 +165,7 @@ function isBinaryContent(buffer) {
|
|
|
101
165
|
}
|
|
102
166
|
export const GrepTool = defineTool({
|
|
103
167
|
name: 'grep',
|
|
104
|
-
description: 'Searches file contents using a regular expression. By default returns the paths of matching files, newest first; output_mode "content" returns matching lines with file paths, line numbers and optional context lines, and "count" returns the number of matching lines per file. Results are paged: head_limit (default 250, 0 for none) and offset. A line over 500 characters is replaced by a notice. Searches with a bounded traversal and identifies incomplete searches. Skips binary files, files over 5 MB, and symlinks. Choose the narrowest relevant directory.',
|
|
168
|
+
description: 'Searches file contents using a regular expression. By default returns the paths of matching files, newest first; output_mode "content" returns matching lines with file paths, line numbers and optional context lines, and "count" returns the number of matching lines per file. Set multiline for a pattern that spans lines and type (js, py, rust, ...) to search one kind of file. In content mode, before_context and after_context override symmetric context_lines; only_matching returns matched substrings without context. Results are paged: head_limit (default 250, 0 for none) and offset. A line over 500 characters is replaced by a notice. Searches with a bounded traversal and identifies incomplete searches. Skips binary files, files over 5 MB, and symlinks. Choose the narrowest relevant directory.',
|
|
105
169
|
inputSchema,
|
|
106
170
|
category: 'analysis',
|
|
107
171
|
// Declared so a path outside the turn's roots can be reviewed before the
|
|
@@ -129,7 +193,18 @@ export const GrepTool = defineTool({
|
|
|
129
193
|
timeoutMs: 15_000,
|
|
130
194
|
async execute(input, context) {
|
|
131
195
|
context.abortSignal?.throwIfAborted();
|
|
132
|
-
const
|
|
196
|
+
const multiline = input.multiline === true;
|
|
197
|
+
const flags = `${(input.case_sensitive ?? true) ? 'g' : 'gi'}${multiline ? 'ms' : ''}`;
|
|
198
|
+
const fileType = input.type
|
|
199
|
+
? FILE_TYPES[input.type.toLowerCase().replace(/^\./, '')]
|
|
200
|
+
: undefined;
|
|
201
|
+
if (input.type && !fileType) {
|
|
202
|
+
return {
|
|
203
|
+
success: false,
|
|
204
|
+
output: '',
|
|
205
|
+
error: `Unknown file type "${input.type}". Known types: ${Object.keys(FILE_TYPES).sort().join(', ')}. Use include for another pattern.`,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
133
208
|
let regex;
|
|
134
209
|
try {
|
|
135
210
|
regex = new RegExp(input.pattern, flags);
|
|
@@ -170,6 +245,8 @@ export const GrepTool = defineTool({
|
|
|
170
245
|
// `max_results` predates `head_limit`; it keeps meaning "at most this many".
|
|
171
246
|
const headLimit = input.head_limit ?? input.max_results ?? DEFAULT_HEAD_LIMIT;
|
|
172
247
|
const offset = input.offset ?? 0;
|
|
248
|
+
const beforeContext = input.before_context ?? input.context_lines ?? 0;
|
|
249
|
+
const afterContext = input.after_context ?? input.context_lines ?? 0;
|
|
173
250
|
// Content lines in output order. Only content mode uses them as the
|
|
174
251
|
// result; the other modes build from `matchedFiles`.
|
|
175
252
|
const results = [];
|
|
@@ -191,16 +268,18 @@ export const GrepTool = defineTool({
|
|
|
191
268
|
throw new Error(`File search stopped after examining ${MAX_VISITED_ENTRIES} files; narrow its root or include pattern.`);
|
|
192
269
|
}
|
|
193
270
|
filesSearched++;
|
|
271
|
+
if (fileType && !matchesType(entry.path, fileType))
|
|
272
|
+
continue;
|
|
194
273
|
if (entry.size > MAX_FILE_SIZE)
|
|
195
274
|
continue;
|
|
196
275
|
let content;
|
|
197
276
|
let contained;
|
|
198
277
|
try {
|
|
199
278
|
const buffer = await readWithSignal(() => sandbox
|
|
200
|
-
? sandbox.readFile(filePath)
|
|
279
|
+
? readBoundedChunks((offset, length) => sandbox.readFile(filePath, { offset, length, signal: context.abortSignal }), MAX_FILE_SIZE, context.abortSignal)
|
|
201
280
|
: resolveWithinReal(root, filePath).then((path) => {
|
|
202
281
|
contained = path;
|
|
203
|
-
return
|
|
282
|
+
return readBoundedFile(path, MAX_FILE_SIZE, context.abortSignal);
|
|
204
283
|
}), context.abortSignal);
|
|
205
284
|
context.abortSignal?.throwIfAborted();
|
|
206
285
|
if (buffer.length > MAX_FILE_SIZE || isBinaryContent(buffer))
|
|
@@ -220,12 +299,28 @@ export const GrepTool = defineTool({
|
|
|
220
299
|
: `./${relative(context.workingDirectory, join(lexicalRoot, relative(root, filePath)))
|
|
221
300
|
.split(sep)
|
|
222
301
|
.join('/')}`;
|
|
223
|
-
|
|
302
|
+
if (mode === 'content' && input.only_matching) {
|
|
303
|
+
for (const fragment of matchingFragments(content, regex, multiline)) {
|
|
304
|
+
context.abortSignal?.throwIfAborted();
|
|
305
|
+
if (fileMatches++ === 0)
|
|
306
|
+
filesMatched++;
|
|
307
|
+
totalMatches++;
|
|
308
|
+
results.push(`${relPath}:${fragment.line}:${clipLine(fragment.text, 'matching')}`);
|
|
309
|
+
if (headLimit > 0 && results.length >= offset + headLimit) {
|
|
310
|
+
pageHasMore = true;
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
if (pageHasMore)
|
|
315
|
+
break;
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
// Each hit is the first and last line (0-based) a match covers.
|
|
319
|
+
const hits = multiline ? multilineHits(content, regex) : lineHits(lines, regex, context);
|
|
320
|
+
// Count mode reports matching lines, so a line covered twice counts once.
|
|
321
|
+
const countedLines = new Set();
|
|
322
|
+
for (const [first, last] of hits) {
|
|
224
323
|
context.abortSignal?.throwIfAborted();
|
|
225
|
-
const line = lines[i] ?? '';
|
|
226
|
-
regex.lastIndex = 0;
|
|
227
|
-
if (!regex.test(line))
|
|
228
|
-
continue;
|
|
229
324
|
if (fileMatches === 0)
|
|
230
325
|
filesMatched++;
|
|
231
326
|
fileMatches++;
|
|
@@ -233,22 +328,21 @@ export const GrepTool = defineTool({
|
|
|
233
328
|
// A file list only needs to know that the file matches.
|
|
234
329
|
if (mode === 'files_with_matches')
|
|
235
330
|
break;
|
|
236
|
-
if (mode === 'count')
|
|
331
|
+
if (mode === 'count') {
|
|
332
|
+
for (let j = first; j <= last; j++)
|
|
333
|
+
countedLines.add(j);
|
|
237
334
|
continue;
|
|
238
|
-
if (input.context_lines > 0) {
|
|
239
|
-
const start = Math.max(0, i - input.context_lines);
|
|
240
|
-
const end = Math.min(lines.length - 1, i + input.context_lines);
|
|
241
|
-
if (results.length > 0) {
|
|
242
|
-
results.push('--');
|
|
243
|
-
}
|
|
244
|
-
for (let j = start; j <= end; j++) {
|
|
245
|
-
const prefix = j === i ? ':' : '-';
|
|
246
|
-
const text = lines[j] ?? '';
|
|
247
|
-
results.push(`${relPath}${prefix}${j + 1}${prefix}${clipLine(text, j === i ? 'matching' : 'context')}`);
|
|
248
|
-
}
|
|
249
335
|
}
|
|
250
|
-
|
|
251
|
-
|
|
336
|
+
const before = Math.max(0, first - beforeContext);
|
|
337
|
+
const after = Math.min(lines.length - 1, last + afterContext);
|
|
338
|
+
if ((beforeContext > 0 || afterContext > 0) && results.length > 0)
|
|
339
|
+
results.push('--');
|
|
340
|
+
for (let j = before; j <= after; j++) {
|
|
341
|
+
if (headLimit > 0 && results.length >= offset + headLimit)
|
|
342
|
+
break;
|
|
343
|
+
const hit = j >= first && j <= last;
|
|
344
|
+
const prefix = hit ? ':' : '-';
|
|
345
|
+
results.push(`${relPath}${prefix}${j + 1}${prefix}${clipLine(lines[j] ?? '', hit ? 'matching' : 'context')}`);
|
|
252
346
|
}
|
|
253
347
|
// A full page ends the search: another file is not read just to
|
|
254
348
|
// prove there is more, so a page that is exactly full is reported
|
|
@@ -258,6 +352,8 @@ export const GrepTool = defineTool({
|
|
|
258
352
|
break;
|
|
259
353
|
}
|
|
260
354
|
}
|
|
355
|
+
if (mode === 'count' && fileMatches > 0)
|
|
356
|
+
fileMatches = countedLines.size;
|
|
261
357
|
if (fileMatches > 0 && mode !== 'content') {
|
|
262
358
|
matchedFiles.push({
|
|
263
359
|
relPath,
|
|
@@ -377,4 +473,71 @@ async function sortByNewest(files) {
|
|
|
377
473
|
.sort((a, b) => b.mtime - a.mtime || a.file.relPath.localeCompare(b.file.relPath))
|
|
378
474
|
.map((entry) => entry.file);
|
|
379
475
|
}
|
|
476
|
+
/** One hit per matching line. */
|
|
477
|
+
function lineHits(lines, regex, context) {
|
|
478
|
+
const hits = [];
|
|
479
|
+
for (let i = 0; i < lines.length; i++) {
|
|
480
|
+
context.abortSignal?.throwIfAborted();
|
|
481
|
+
regex.lastIndex = 0;
|
|
482
|
+
if (regex.test(lines[i] ?? ''))
|
|
483
|
+
hits.push([i, i]);
|
|
484
|
+
}
|
|
485
|
+
return hits;
|
|
486
|
+
}
|
|
487
|
+
/** One hit per match over the whole text, from the line it starts on to the line it ends on. */
|
|
488
|
+
function multilineHits(content, regex) {
|
|
489
|
+
const hits = [];
|
|
490
|
+
const starts = [0];
|
|
491
|
+
for (let i = content.indexOf('\n'); i !== -1; i = content.indexOf('\n', i + 1))
|
|
492
|
+
starts.push(i + 1);
|
|
493
|
+
const lineOf = (offset) => {
|
|
494
|
+
let lo = 0;
|
|
495
|
+
let hi = starts.length - 1;
|
|
496
|
+
while (lo < hi) {
|
|
497
|
+
const mid = (lo + hi + 1) >> 1;
|
|
498
|
+
if ((starts[mid] ?? 0) <= offset)
|
|
499
|
+
lo = mid;
|
|
500
|
+
else
|
|
501
|
+
hi = mid - 1;
|
|
502
|
+
}
|
|
503
|
+
return lo;
|
|
504
|
+
};
|
|
505
|
+
regex.lastIndex = 0;
|
|
506
|
+
for (let m = regex.exec(content); m !== null; m = regex.exec(content)) {
|
|
507
|
+
const text = m[0];
|
|
508
|
+
if (text.length === 0) {
|
|
509
|
+
regex.lastIndex++;
|
|
510
|
+
continue;
|
|
511
|
+
}
|
|
512
|
+
// A match that ends on a newline covers the lines before it, not the next one.
|
|
513
|
+
const end = m.index + text.length - (text.endsWith('\n') ? 1 : 0);
|
|
514
|
+
hits.push([lineOf(m.index), lineOf(Math.max(m.index, end))]);
|
|
515
|
+
}
|
|
516
|
+
return hits;
|
|
517
|
+
}
|
|
518
|
+
/** Lazy fragments: a dense file never allocates every match before paging. */
|
|
519
|
+
function* matchingFragments(content, regex, multiline) {
|
|
520
|
+
const subjects = multiline ? [content] : content.split('\n');
|
|
521
|
+
let line = 1;
|
|
522
|
+
for (const subject of subjects) {
|
|
523
|
+
regex.lastIndex = 0;
|
|
524
|
+
let previous = 0;
|
|
525
|
+
for (let match = regex.exec(subject); match !== null; match = regex.exec(subject)) {
|
|
526
|
+
if (multiline) {
|
|
527
|
+
for (let i = previous; i < match.index; i++)
|
|
528
|
+
if (subject[i] === '\n')
|
|
529
|
+
line++;
|
|
530
|
+
previous = match.index;
|
|
531
|
+
}
|
|
532
|
+
if (match[0].length === 0) {
|
|
533
|
+
regex.lastIndex++;
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
// Keep a multiline substring on one output row, never forge path rows.
|
|
537
|
+
yield { line, text: match[0].replace(/\n/g, '\\n') };
|
|
538
|
+
}
|
|
539
|
+
if (!multiline)
|
|
540
|
+
line++;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
380
543
|
//# sourceMappingURL=grep.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/tools/builtins/grep.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"grep.js","sourceRoot":"","sources":["../../../src/tools/builtins/grep.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../../src/tools/builtins/read-file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read-file.d.ts","sourceRoot":"","sources":["../../../src/tools/builtins/read-file.ts"],"names":[],"mappings":"AA4DA,eAAO,MAAM,YAAY;;;;;;;EA+IvB,CAAA"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
2
|
import { extname } from 'node:path';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { defineTool } from '../defineTool.js';
|
|
5
5
|
import { resolveWithinAnyReal, toolRoots } from '../paths.js';
|
|
6
6
|
import { resolveRetainedOutput } from '../retained-output.js';
|
|
7
7
|
import { looksBinary } from '../text-window.js';
|
|
8
|
+
import { TEXT_MAX_INPUT_BYTES, readBoundedChunks, readBoundedFile } from './bounded-file-read.js';
|
|
8
9
|
import { fingerprintContent } from './content-fingerprint.js';
|
|
10
|
+
import { NOTEBOOK_MAX_BYTES, PDF_MAX_BYTES, readNotebook, readPdfPages, } from './read-media.js';
|
|
9
11
|
import { humanBytes, renderCappedRead } from './read-render.js';
|
|
12
|
+
import { MAX_BYTES as IMAGE_MAX_BYTES, inspectImageBytes } from './view-image.js';
|
|
10
13
|
const inputSchema = z.object({
|
|
11
14
|
path: z.string().describe('Path to the file to read (absolute or relative)'),
|
|
12
15
|
// A two-element ARRAY, not a `z.tuple`, and the distinction is the whole
|
|
@@ -30,6 +33,10 @@ const inputSchema = z.object({
|
|
|
30
33
|
.optional()
|
|
31
34
|
.describe('Starting line number (0-indexed). Defaults to 0 (beginning of file).'),
|
|
32
35
|
limit: z.coerce.number().optional().describe('Maximum number of lines to read'),
|
|
36
|
+
pages: z
|
|
37
|
+
.string()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe('For a PDF: the pages to render as images, one page ("3") or one range ("1-5"), at most 20 pages per request. Required for a PDF of more than 10 pages.'),
|
|
33
40
|
allow_large: z
|
|
34
41
|
.boolean()
|
|
35
42
|
.optional()
|
|
@@ -37,7 +44,7 @@ const inputSchema = z.object({
|
|
|
37
44
|
});
|
|
38
45
|
export const ReadFileTool = defineTool({
|
|
39
46
|
name: 'read',
|
|
40
|
-
description: 'Reads a file and returns its contents with line numbers. Supports readRange ([start,end], 1-indexed inclusive) or offset/limit for large files. Without a window it returns the first 2000 lines and says so — pass offset/limit to continue. A file over 256 KiB is refused unless a window is named, and a result over about 25,000 tokens is cut to a first page that names the next call; pass allow_large only when you need all of it.',
|
|
47
|
+
description: 'Reads a file and returns its contents with line numbers. Also reads images (PNG, JPEG, WebP), which come back as pictures; PDFs, whose pages come back as images (pass pages, for example "1-5", at most 20 pages per request; a PDF of more than 10 pages needs it); and Jupyter notebooks (.ipynb), which come back as cells with their outputs. Supports readRange ([start,end], 1-indexed inclusive) or offset/limit for large files. Without a window it returns the first 2000 lines and says so — pass offset/limit to continue. A file over 256 KiB is refused unless a window is named, and a result over about 25,000 tokens is cut to a first page that names the next call; pass allow_large only when you need all of it.',
|
|
41
48
|
inputSchema,
|
|
42
49
|
category: 'filesystem',
|
|
43
50
|
// Declared so a path outside the turn's roots can be reviewed before the
|
|
@@ -68,8 +75,12 @@ export const ReadFileTool = defineTool({
|
|
|
68
75
|
const retained = await resolveRetainedOutput(context.retainedOutputDirectory, input.path);
|
|
69
76
|
// Sandbox-aware: route through sandbox.readFile() when available
|
|
70
77
|
if (context.sandbox && retained === undefined) {
|
|
71
|
-
const
|
|
72
|
-
const
|
|
78
|
+
const sandbox = context.sandbox;
|
|
79
|
+
const buffer = await readBoundedChunks((offset, length) => sandbox.readFile(input.path, { offset, length, signal: context.abortSignal }), PDF_MAX_BYTES, context.abortSignal, (prefix) => inputLimit(input.path, prefix));
|
|
80
|
+
const media = await readMediaFile(buffer, input.path, input, context, true);
|
|
81
|
+
if (media)
|
|
82
|
+
return media;
|
|
83
|
+
const binaryGuidance = describeStructuredBinaryRead(input.path);
|
|
73
84
|
if (binaryGuidance) {
|
|
74
85
|
return {
|
|
75
86
|
success: false,
|
|
@@ -112,16 +123,22 @@ export const ReadFileTool = defineTool({
|
|
|
112
123
|
};
|
|
113
124
|
}
|
|
114
125
|
const filePath = retained ?? (await resolveWithinAnyReal(toolRoots(context), input.path));
|
|
126
|
+
// Pictures, PDFs and notebooks are not text: they have their own size
|
|
127
|
+
// limits and are never numbered, so the text cap below does not apply.
|
|
128
|
+
const namesMediaFile = namesMedia(filePath);
|
|
115
129
|
// Refused on the size alone, before the file is in memory, when no window
|
|
116
130
|
// was named: the cap exists so a huge file is never loaded to be refused.
|
|
117
|
-
if (input.readRange === undefined && input.limit === undefined) {
|
|
131
|
+
if (!namesMediaFile && input.readRange === undefined && input.limit === undefined) {
|
|
118
132
|
const { size } = await stat(filePath);
|
|
119
133
|
const early = renderCappedRead('', size, input, capOptions(input, context));
|
|
120
134
|
if (!early.ok)
|
|
121
135
|
return refusedRead(filePath, size, early.message, false);
|
|
122
136
|
}
|
|
123
|
-
const buffer = await
|
|
124
|
-
const
|
|
137
|
+
const buffer = await readBoundedFile(filePath, PDF_MAX_BYTES, context.abortSignal, (prefix) => inputLimit(filePath, prefix));
|
|
138
|
+
const media = await readMediaFile(buffer, filePath, input, context, false);
|
|
139
|
+
if (media)
|
|
140
|
+
return media;
|
|
141
|
+
const binaryGuidance = describeStructuredBinaryRead(filePath);
|
|
125
142
|
if (binaryGuidance) {
|
|
126
143
|
return {
|
|
127
144
|
success: false,
|
|
@@ -164,6 +181,94 @@ export const ReadFileTool = defineTool({
|
|
|
164
181
|
};
|
|
165
182
|
},
|
|
166
183
|
});
|
|
184
|
+
/**
|
|
185
|
+
* What a file is by its bytes, never by its name: a text file called `.png` is
|
|
186
|
+
* still text. A notebook is JSON, so only its extension can name it.
|
|
187
|
+
*/
|
|
188
|
+
function mediaKindOf(path, buffer) {
|
|
189
|
+
if (buffer.subarray(0, 8).equals(Buffer.from('89504e470d0a1a0a', 'hex')))
|
|
190
|
+
return 'image';
|
|
191
|
+
if (buffer[0] === 0xff && buffer[1] === 0xd8)
|
|
192
|
+
return 'image';
|
|
193
|
+
if (buffer.toString('ascii', 0, 4) === 'RIFF' && buffer.toString('ascii', 8, 12) === 'WEBP')
|
|
194
|
+
return 'image';
|
|
195
|
+
if (buffer.subarray(0, 4).toString('utf8') === '%PDF')
|
|
196
|
+
return 'pdf';
|
|
197
|
+
if (extname(path).toLowerCase() === '.ipynb')
|
|
198
|
+
return 'notebook';
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
/** A name that suggests a file the text cap should not judge. */
|
|
202
|
+
function namesMedia(path) {
|
|
203
|
+
return ['.png', '.jpg', '.jpeg', '.webp', '.pdf', '.ipynb'].includes(extname(path).toLowerCase());
|
|
204
|
+
}
|
|
205
|
+
function inputLimit(path, prefix) {
|
|
206
|
+
const kind = mediaKindOf(path, prefix);
|
|
207
|
+
return kind ? mediaLimit(kind) : TEXT_MAX_INPUT_BYTES;
|
|
208
|
+
}
|
|
209
|
+
function mediaLimit(kind) {
|
|
210
|
+
return kind === 'image' ? IMAGE_MAX_BYTES : kind === 'pdf' ? PDF_MAX_BYTES : NOTEBOOK_MAX_BYTES;
|
|
211
|
+
}
|
|
212
|
+
function mediaFailure(path, bytes, message, sandboxed) {
|
|
213
|
+
return {
|
|
214
|
+
success: false,
|
|
215
|
+
output: message,
|
|
216
|
+
error: message,
|
|
217
|
+
data: { path, ...(sandboxed ? { sandboxed: true } : {}) },
|
|
218
|
+
facts: { kind: 'read', path, bytes },
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
function tooLargeMedia(path, bytes, kind) {
|
|
222
|
+
const what = kind === 'image' ? 'Image' : kind === 'pdf' ? 'PDF' : 'Notebook';
|
|
223
|
+
return mediaFailure(path, bytes, `${what} file (${humanBytes(bytes)}) exceeds the maximum size this tool can read (${humanBytes(mediaLimit(kind))}).`, false);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* An image, a PDF or a notebook, as what the model can use: the picture itself,
|
|
227
|
+
* the pages of the PDF as pictures, or the notebook's cells with their output.
|
|
228
|
+
* Undefined for any other file, which is read as text.
|
|
229
|
+
*/
|
|
230
|
+
async function readMediaFile(buffer, path, input, context, sandboxed) {
|
|
231
|
+
const kind = mediaKindOf(path, buffer);
|
|
232
|
+
if (!kind)
|
|
233
|
+
return undefined;
|
|
234
|
+
if (buffer.length > mediaLimit(kind))
|
|
235
|
+
return tooLargeMedia(path, buffer.length, kind);
|
|
236
|
+
if (kind === 'image') {
|
|
237
|
+
try {
|
|
238
|
+
const result = await inspectImageBytes({ path, bytes: buffer, sandboxed }, context.abortSignal);
|
|
239
|
+
return {
|
|
240
|
+
...result,
|
|
241
|
+
facts: { kind: 'read', path, bytes: buffer.length },
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
return mediaFailure(path, buffer.length, error instanceof Error ? error.message : String(error), sandboxed);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const media = kind === 'pdf'
|
|
249
|
+
? await readPdfPages(buffer, input.pages, path, context.abortSignal)
|
|
250
|
+
: readNotebook(buffer, path);
|
|
251
|
+
if (!media.ok)
|
|
252
|
+
return mediaFailure(path, buffer.length, media.message, sandboxed);
|
|
253
|
+
const text = media.parts
|
|
254
|
+
.filter((part) => part.type === 'text')
|
|
255
|
+
.map((part) => part.text)
|
|
256
|
+
.join('\n');
|
|
257
|
+
const hasImage = media.parts.some((part) => part.type === 'image');
|
|
258
|
+
return {
|
|
259
|
+
success: true,
|
|
260
|
+
output: text,
|
|
261
|
+
...(hasImage
|
|
262
|
+
? {
|
|
263
|
+
content: media.parts.map((part) => part.type === 'text'
|
|
264
|
+
? { type: 'text', text: part.text }
|
|
265
|
+
: { type: 'image', mediaType: part.mediaType, data: part.data }),
|
|
266
|
+
}
|
|
267
|
+
: {}),
|
|
268
|
+
data: { path, ...(sandboxed ? { sandboxed: true } : {}), ...media.facts },
|
|
269
|
+
facts: { kind: 'read', path, bytes: buffer.length },
|
|
270
|
+
};
|
|
271
|
+
}
|
|
167
272
|
function capOptions(input, context) {
|
|
168
273
|
const tokens = Number(context.env?.NAMZU_FILE_READ_MAX_OUTPUT_TOKENS);
|
|
169
274
|
return {
|
|
@@ -277,36 +382,16 @@ function unchangedRead(context, key, input, content, bytes) {
|
|
|
277
382
|
facts: { kind: 'read', path: key, bytes, unchanged: true },
|
|
278
383
|
};
|
|
279
384
|
}
|
|
280
|
-
function describeStructuredBinaryRead(path
|
|
385
|
+
function describeStructuredBinaryRead(path) {
|
|
281
386
|
const ext = extname(path).toLowerCase();
|
|
282
|
-
const image = buffer.subarray(0, 8).equals(Buffer.from('89504e470d0a1a0a', 'hex'))
|
|
283
|
-
? 'PNG'
|
|
284
|
-
: buffer[0] === 0xff && buffer[1] === 0xd8
|
|
285
|
-
? 'JPEG'
|
|
286
|
-
: buffer.toString('ascii', 0, 4) === 'RIFF' && buffer.toString('ascii', 8, 12) === 'WEBP'
|
|
287
|
-
? 'WebP'
|
|
288
|
-
: null;
|
|
289
|
-
if (image) {
|
|
290
|
-
return [
|
|
291
|
-
`The file "${path}" is a ${image} raster image, not UTF-8 text.`,
|
|
292
|
-
'Use an available view_image tool with this path to inspect the actual pixels. Reading binary bytes as text does not provide visual evidence.',
|
|
293
|
-
'If image inspection is unavailable, open the file in an application and use an available screenshot tool; report the limitation if neither can show the image.',
|
|
294
|
-
].join('\n');
|
|
295
|
-
}
|
|
296
387
|
if (ext === '.docx')
|
|
297
388
|
return buildStructuredBinaryGuidance(path, 'DOCX', 'python-docx');
|
|
298
389
|
if (ext === '.pptx')
|
|
299
390
|
return buildStructuredBinaryGuidance(path, 'PPTX', 'python-pptx');
|
|
300
391
|
if (ext === '.xlsx')
|
|
301
392
|
return buildStructuredBinaryGuidance(path, 'XLSX', 'openpyxl');
|
|
302
|
-
if (ext === '.pdf' || startsWithPdfHeader(buffer)) {
|
|
303
|
-
return buildStructuredBinaryGuidance(path, 'PDF', 'pdftotext or PyMuPDF');
|
|
304
|
-
}
|
|
305
393
|
return null;
|
|
306
394
|
}
|
|
307
|
-
function startsWithPdfHeader(buffer) {
|
|
308
|
-
return buffer.length >= 4 && buffer.subarray(0, 4).toString('utf8') === '%PDF';
|
|
309
|
-
}
|
|
310
395
|
function buildStructuredBinaryGuidance(path, format, extractor) {
|
|
311
396
|
return [
|
|
312
397
|
`The file "${path}" is a ${format} document package, not UTF-8 text.`,
|