@marifold/core 0.60.0 → 0.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/agent/AgentEvents.d.ts +7 -0
  2. package/dist/agent/AgentEvents.d.ts.map +1 -1
  3. package/dist/agent/AgentRunner.d.ts +4 -1
  4. package/dist/agent/AgentRunner.d.ts.map +1 -1
  5. package/dist/agent/AgentRunner.js +108 -20
  6. package/dist/agent/AgentRunner.js.map +1 -1
  7. package/dist/agent/AttachmentResources.d.ts +40 -0
  8. package/dist/agent/AttachmentResources.d.ts.map +1 -0
  9. package/dist/agent/AttachmentResources.js +192 -0
  10. package/dist/agent/AttachmentResources.js.map +1 -0
  11. package/dist/agent/RunArtifacts.d.ts +18 -0
  12. package/dist/agent/RunArtifacts.d.ts.map +1 -0
  13. package/dist/agent/RunArtifacts.js +137 -0
  14. package/dist/agent/RunArtifacts.js.map +1 -0
  15. package/dist/agent/tools/InspectAttachmentTool.d.ts.map +1 -1
  16. package/dist/agent/tools/InspectAttachmentTool.js +4 -69
  17. package/dist/agent/tools/InspectAttachmentTool.js.map +1 -1
  18. package/dist/agent/tools/ReadAttachmentTool.d.ts +34 -0
  19. package/dist/agent/tools/ReadAttachmentTool.d.ts.map +1 -0
  20. package/dist/agent/tools/ReadAttachmentTool.js +84 -0
  21. package/dist/agent/tools/ReadAttachmentTool.js.map +1 -0
  22. package/dist/agent/tools/SearchAttachmentTool.d.ts +33 -0
  23. package/dist/agent/tools/SearchAttachmentTool.d.ts.map +1 -0
  24. package/dist/agent/tools/SearchAttachmentTool.js +76 -0
  25. package/dist/agent/tools/SearchAttachmentTool.js.map +1 -0
  26. package/dist/agent/tools/SkillManagementTool.d.ts +75 -0
  27. package/dist/agent/tools/SkillManagementTool.d.ts.map +1 -0
  28. package/dist/agent/tools/SkillManagementTool.js +312 -0
  29. package/dist/agent/tools/SkillManagementTool.js.map +1 -0
  30. package/dist/config/ConfigManager.d.ts +9 -0
  31. package/dist/config/ConfigManager.d.ts.map +1 -1
  32. package/dist/config/ConfigManager.js +43 -0
  33. package/dist/config/ConfigManager.js.map +1 -1
  34. package/dist/config/ConfigSchema.d.ts +4 -4
  35. package/dist/config/ConfigSchema.d.ts.map +1 -1
  36. package/dist/config/MarifoldOpenAICompatProvider.d.ts +3 -0
  37. package/dist/config/MarifoldOpenAICompatProvider.d.ts.map +1 -1
  38. package/dist/config/MarifoldOpenAICompatProvider.js +35 -3
  39. package/dist/config/MarifoldOpenAICompatProvider.js.map +1 -1
  40. package/dist/config/ProviderFactory.d.ts +4 -0
  41. package/dist/config/ProviderFactory.d.ts.map +1 -1
  42. package/dist/config/ProviderFactory.js +7 -0
  43. package/dist/config/ProviderFactory.js.map +1 -1
  44. package/dist/errors/MarifoldError.d.ts +2 -1
  45. package/dist/errors/MarifoldError.d.ts.map +1 -1
  46. package/dist/errors/MarifoldError.js +3 -0
  47. package/dist/errors/MarifoldError.js.map +1 -1
  48. package/dist/index.d.ts +10 -2
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +26 -3
  51. package/dist/index.js.map +1 -1
  52. package/dist/runs/RunRegistry.d.ts +4 -0
  53. package/dist/runs/RunRegistry.d.ts.map +1 -1
  54. package/dist/runs/RunRegistry.js +22 -1
  55. package/dist/runs/RunRegistry.js.map +1 -1
  56. package/dist/runtime/MarifoldRuntime.d.ts +9 -5
  57. package/dist/runtime/MarifoldRuntime.d.ts.map +1 -1
  58. package/dist/runtime/MarifoldRuntime.js +140 -35
  59. package/dist/runtime/MarifoldRuntime.js.map +1 -1
  60. package/dist/runtime/MarifoldTypes.d.ts +8 -1
  61. package/dist/runtime/MarifoldTypes.d.ts.map +1 -1
  62. package/dist/skill/BuiltInSkillManager.d.ts.map +1 -1
  63. package/dist/skill/BuiltInSkillManager.js +2 -1
  64. package/dist/skill/BuiltInSkillManager.js.map +1 -1
  65. package/dist/skill/BuiltInSkills.d.ts +6 -0
  66. package/dist/skill/BuiltInSkills.d.ts.map +1 -0
  67. package/dist/skill/BuiltInSkills.js +91 -0
  68. package/dist/skill/BuiltInSkills.js.map +1 -0
  69. package/dist/skill/SkillSchema.d.ts +2 -2
  70. package/dist/skill/SkillSchema.d.ts.map +1 -1
  71. package/dist/skill/SkillStore.d.ts +9 -0
  72. package/dist/skill/SkillStore.d.ts.map +1 -1
  73. package/dist/skill/SkillStore.js +87 -14
  74. package/dist/skill/SkillStore.js.map +1 -1
  75. package/dist/skill/index.d.ts +1 -0
  76. package/dist/skill/index.d.ts.map +1 -1
  77. package/dist/skill/index.js +5 -1
  78. package/dist/skill/index.js.map +1 -1
  79. package/package.json +1 -1
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.AttachmentResource = exports.MAX_ATTACHMENT_SEARCH_RESULTS = exports.DEFAULT_ATTACHMENT_SEARCH_RESULTS = exports.MAX_ATTACHMENT_READ_CHARS = exports.DEFAULT_ATTACHMENT_READ_CHARS = exports.ATTACHMENT_PREVIEW_CHARS = void 0;
37
+ exports.isTextAttachment = isTextAttachment;
38
+ exports.formatAttachmentSearch = formatAttachmentSearch;
39
+ const fs = __importStar(require("fs"));
40
+ const path = __importStar(require("path"));
41
+ exports.ATTACHMENT_PREVIEW_CHARS = 8_000;
42
+ exports.DEFAULT_ATTACHMENT_READ_CHARS = 8_000;
43
+ exports.MAX_ATTACHMENT_READ_CHARS = 20_000;
44
+ exports.DEFAULT_ATTACHMENT_SEARCH_RESULTS = 8;
45
+ exports.MAX_ATTACHMENT_SEARCH_RESULTS = 20;
46
+ const TEXT_EXTENSIONS = new Set([
47
+ '.txt', '.md', '.markdown', '.json', '.jsonl', '.yaml', '.yml', '.toml', '.ini',
48
+ '.csv', '.tsv', '.xml', '.html', '.css', '.js', '.mjs', '.cjs', '.ts', '.tsx',
49
+ '.jsx', '.py', '.rb', '.go', '.rs', '.java', '.kt', '.swift', '.c', '.h', '.cpp',
50
+ '.hpp', '.cs', '.sh', '.zsh', '.bash', '.fish', '.sql', '.log', '.diff', '.patch',
51
+ ]);
52
+ const FORMAT_LABELS = new Map([
53
+ ['.xlsx', 'Excel workbook'],
54
+ ['.xlsm', 'macro-enabled Excel workbook'],
55
+ ['.xls', 'legacy Excel workbook'],
56
+ ['.docx', 'Word document'],
57
+ ['.doc', 'legacy Word document'],
58
+ ['.odt', 'OpenDocument text'],
59
+ ['.pptx', 'PowerPoint presentation'],
60
+ ['.ppt', 'legacy PowerPoint presentation'],
61
+ ['.odp', 'OpenDocument presentation'],
62
+ ['.pdf', 'PDF document'],
63
+ ['.epub', 'EPUB ebook'],
64
+ ['.mobi', 'Mobipocket ebook'],
65
+ ['.azw', 'Kindle ebook'],
66
+ ['.azw3', 'Kindle ebook'],
67
+ ['.zip', 'ZIP archive'],
68
+ ['.tar', 'TAR archive'],
69
+ ['.gz', 'gzip archive'],
70
+ ['.7z', '7-Zip archive'],
71
+ ]);
72
+ /**
73
+ * Format-neutral attachment facade. Original files remain authoritative and
74
+ * local; model-visible content is always a bounded derived view.
75
+ */
76
+ class AttachmentResource {
77
+ attachment;
78
+ constructor(attachment) {
79
+ this.attachment = attachment;
80
+ }
81
+ inspect(maxPreviewChars = exports.ATTACHMENT_PREVIEW_CHARS) {
82
+ const source = this.readableText();
83
+ const pathLine = this.attachment.path
84
+ ? `Read-only run path: ${this.attachment.path}`
85
+ : 'Read-only run path: unavailable';
86
+ const header = [
87
+ `Attachment: ${this.attachment.name}`,
88
+ `Format: ${formatLabel(this.attachment)}`,
89
+ `Media type: ${this.attachment.mediaType}`,
90
+ `Size: ${formatBytes(this.attachment.size)}`,
91
+ pathLine,
92
+ ];
93
+ if (source === undefined) {
94
+ return {
95
+ hasReadableText: false,
96
+ content: [
97
+ ...header,
98
+ 'Readable view: unavailable for this format.',
99
+ 'For a complete-file task, use a format-specific local tool against the read-only run path and write deliverables to $MARIFOLD_OUTPUT_DIR.',
100
+ ].join('\n'),
101
+ };
102
+ }
103
+ const previewLimit = Math.max(1, Math.min(maxPreviewChars, exports.ATTACHMENT_PREVIEW_CHARS));
104
+ const preview = source.slice(0, previewLimit);
105
+ const remainder = source.length - preview.length;
106
+ return {
107
+ hasReadableText: true,
108
+ content: [
109
+ ...header,
110
+ `Readable view: ${source.length.toLocaleString('en-US')} characters.`,
111
+ 'Use read_attachment for bounded ranges and search_attachment to find relevant passages.',
112
+ 'For joins, conversions, edits, or other complete-file operations, process the read-only path locally instead of reading the whole document into model context.',
113
+ '',
114
+ 'Preview:',
115
+ preview || '(empty)',
116
+ ...(remainder > 0 ? [`[preview bounded — ${remainder.toLocaleString('en-US')} characters not shown]`] : []),
117
+ ].join('\n'),
118
+ };
119
+ }
120
+ read(start, maxChars) {
121
+ const source = this.readableText();
122
+ if (source === undefined)
123
+ return undefined;
124
+ const safeStart = Math.min(Math.max(0, start), source.length);
125
+ const safeLimit = Math.max(1, Math.min(maxChars, exports.MAX_ATTACHMENT_READ_CHARS));
126
+ const content = source.slice(safeStart, safeStart + safeLimit);
127
+ return {
128
+ content,
129
+ start: safeStart,
130
+ end: safeStart + content.length,
131
+ total: source.length,
132
+ unit: 'characters',
133
+ };
134
+ }
135
+ search(query, maxResults) {
136
+ const source = this.readableText();
137
+ if (source === undefined)
138
+ return undefined;
139
+ const needle = query.toLocaleLowerCase();
140
+ const limit = Math.max(1, Math.min(maxResults, exports.MAX_ATTACHMENT_SEARCH_RESULTS));
141
+ const matches = [];
142
+ let totalMatches = 0;
143
+ for (const [index, line] of source.split(/\r?\n/).entries()) {
144
+ if (!line.toLocaleLowerCase().includes(needle))
145
+ continue;
146
+ totalMatches += 1;
147
+ if (matches.length < limit) {
148
+ matches.push({ line: index + 1, text: line.slice(0, 1_000) });
149
+ }
150
+ }
151
+ return { matches, truncated: totalMatches > matches.length };
152
+ }
153
+ readableText() {
154
+ if (this.attachment.inspectionText !== undefined)
155
+ return this.attachment.inspectionText;
156
+ if (!this.attachment.path || !isTextAttachment(this.attachment))
157
+ return undefined;
158
+ try {
159
+ return fs.readFileSync(this.attachment.path, 'utf8');
160
+ }
161
+ catch {
162
+ return undefined;
163
+ }
164
+ }
165
+ }
166
+ exports.AttachmentResource = AttachmentResource;
167
+ function isTextAttachment(attachment) {
168
+ return attachment.mediaType.startsWith('text/')
169
+ || TEXT_EXTENSIONS.has(path.extname(attachment.name).toLowerCase());
170
+ }
171
+ function formatAttachmentSearch(result, query) {
172
+ if (result.matches.length === 0)
173
+ return `No matches for ${JSON.stringify(query)}.`;
174
+ return [
175
+ ...result.matches.map(match => `Line ${match.line}: ${match.text}`),
176
+ ...(result.truncated ? ['[additional matches omitted; narrow the query to inspect them]'] : []),
177
+ ].join('\n');
178
+ }
179
+ function formatLabel(attachment) {
180
+ if (attachment.image)
181
+ return 'image';
182
+ const extension = path.extname(attachment.name).toLowerCase();
183
+ return FORMAT_LABELS.get(extension) ?? (isTextAttachment(attachment) ? 'text document' : 'binary file');
184
+ }
185
+ function formatBytes(bytes) {
186
+ if (bytes < 1024)
187
+ return `${bytes} B`;
188
+ if (bytes < 1024 * 1024)
189
+ return `${(bytes / 1024).toFixed(1)} KiB`;
190
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MiB`;
191
+ }
192
+ //# sourceMappingURL=AttachmentResources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttachmentResources.js","sourceRoot":"","sources":["../../src/agent/AttachmentResources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { RunWorkspace } from './RunWorkspace';
2
+ export declare const MAX_RUN_ARTIFACTS = 50;
3
+ export declare const MAX_RUN_ARTIFACT_BYTES: number;
4
+ export interface RunArtifact {
5
+ id: string;
6
+ name: string;
7
+ mediaType: string;
8
+ size: number;
9
+ }
10
+ export interface ResolvedRunArtifact extends RunArtifact {
11
+ path: string;
12
+ }
13
+ /** List regular output files without following symlinks. The model can write
14
+ * only inside the run capability set, but download resolution independently
15
+ * revalidates containment so an output symlink cannot expose another file. */
16
+ export declare function listRunArtifacts(workspace: Pick<RunWorkspace, 'outputDir'>): RunArtifact[];
17
+ export declare function resolveRunArtifact(runId: string, artifactId: string): ResolvedRunArtifact | undefined;
18
+ //# sourceMappingURL=RunArtifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunArtifacts.d.ts","sourceRoot":"","sources":["../../src/agent/RunArtifacts.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,sBAAsB,QAAoB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;8EAE8E;AAC9E,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,GACzC,WAAW,EAAE,CAEf;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAIrG"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MAX_RUN_ARTIFACT_BYTES = exports.MAX_RUN_ARTIFACTS = void 0;
37
+ exports.listRunArtifacts = listRunArtifacts;
38
+ exports.resolveRunArtifact = resolveRunArtifact;
39
+ const crypto = __importStar(require("crypto"));
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const WorkspacePaths_1 = require("../workspace/WorkspacePaths");
43
+ exports.MAX_RUN_ARTIFACTS = 50;
44
+ exports.MAX_RUN_ARTIFACT_BYTES = 512 * 1024 * 1024;
45
+ /** List regular output files without following symlinks. The model can write
46
+ * only inside the run capability set, but download resolution independently
47
+ * revalidates containment so an output symlink cannot expose another file. */
48
+ function listRunArtifacts(workspace) {
49
+ return listResolvedArtifacts(workspace.outputDir).map(({ path: _path, ...artifact }) => artifact);
50
+ }
51
+ function resolveRunArtifact(runId, artifactId) {
52
+ if (!/^[A-Za-z0-9_-]{1,160}$/.test(runId) || !/^[a-f0-9]{24}$/.test(artifactId))
53
+ return undefined;
54
+ const outputDir = path.join((0, WorkspacePaths_1.marifoldHome)(), 'runs', runId, 'output');
55
+ return listResolvedArtifacts(outputDir).find(artifact => artifact.id === artifactId);
56
+ }
57
+ function listResolvedArtifacts(outputDir) {
58
+ let root;
59
+ try {
60
+ root = fs.realpathSync(outputDir);
61
+ }
62
+ catch {
63
+ return [];
64
+ }
65
+ const artifacts = [];
66
+ const pending = [root];
67
+ while (pending.length > 0 && artifacts.length < exports.MAX_RUN_ARTIFACTS) {
68
+ const directory = pending.shift();
69
+ let entries;
70
+ try {
71
+ entries = fs.readdirSync(directory, { withFileTypes: true })
72
+ .sort((left, right) => left.name.localeCompare(right.name));
73
+ }
74
+ catch {
75
+ continue;
76
+ }
77
+ for (const entry of entries) {
78
+ if (artifacts.length >= exports.MAX_RUN_ARTIFACTS)
79
+ break;
80
+ const candidate = path.join(directory, entry.name);
81
+ if (entry.isSymbolicLink())
82
+ continue;
83
+ if (entry.isDirectory()) {
84
+ pending.push(candidate);
85
+ continue;
86
+ }
87
+ if (!entry.isFile())
88
+ continue;
89
+ try {
90
+ const real = fs.realpathSync(candidate);
91
+ if (!isInside(real, root))
92
+ continue;
93
+ const stat = fs.statSync(real);
94
+ if (!stat.isFile() || stat.size > exports.MAX_RUN_ARTIFACT_BYTES)
95
+ continue;
96
+ const relative = path.relative(root, real).split(path.sep).join('/');
97
+ artifacts.push({
98
+ id: crypto.createHash('sha256').update(relative).digest('hex').slice(0, 24),
99
+ name: relative,
100
+ mediaType: mediaTypeFor(relative),
101
+ size: stat.size,
102
+ path: real,
103
+ });
104
+ }
105
+ catch {
106
+ // An output may disappear while a process is finishing; omit it.
107
+ }
108
+ }
109
+ }
110
+ return artifacts;
111
+ }
112
+ function isInside(candidate, root) {
113
+ const relative = path.relative(root, candidate);
114
+ return relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative));
115
+ }
116
+ function mediaTypeFor(name) {
117
+ switch (path.extname(name).toLowerCase()) {
118
+ case '.xlsx': return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
119
+ case '.xls': return 'application/vnd.ms-excel';
120
+ case '.docx': return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
121
+ case '.doc': return 'application/msword';
122
+ case '.pptx': return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
123
+ case '.ppt': return 'application/vnd.ms-powerpoint';
124
+ case '.pdf': return 'application/pdf';
125
+ case '.epub': return 'application/epub+zip';
126
+ case '.csv': return 'text/csv; charset=utf-8';
127
+ case '.txt': return 'text/plain; charset=utf-8';
128
+ case '.json': return 'application/json';
129
+ case '.zip': return 'application/zip';
130
+ case '.png': return 'image/png';
131
+ case '.jpg':
132
+ case '.jpeg': return 'image/jpeg';
133
+ case '.webp': return 'image/webp';
134
+ default: return 'application/octet-stream';
135
+ }
136
+ }
137
+ //# sourceMappingURL=RunArtifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RunArtifacts.js","sourceRoot":"","sources":["../../src/agent/RunArtifacts.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"InspectAttachmentTool.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/InspectAttachmentTool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,SAAS,EAGT,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAUzB;gFACgF;AAChF,qBAAa,qBAAsB,YAAW,SAAS;IACrD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,QAAQ,CAAC,UAAU;QACjB,IAAI;QACJ,WAAW;QAMX,UAAU;YACR,IAAI;YACJ,UAAU;gBACR,aAAa;oBACX,IAAI;oBACJ,WAAW;;;YAGf,QAAQ;;MAEV;IAEF,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAEtD;IAED,UAAU,IAAI,kBAAkB,CAK/B;IAEK,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuCvG;CACF"}
1
+ {"version":3,"file":"InspectAttachmentTool.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/InspectAttachmentTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,SAAS,EAET,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAGzB;gFACgF;AAChF,qBAAa,qBAAsB,YAAW,SAAS;IACrD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,QAAQ,CAAC,UAAU;QACjB,IAAI;QACJ,WAAW;QAMX,UAAU;YACR,IAAI;YACJ,UAAU;gBACR,aAAa;oBACX,IAAI;oBACJ,WAAW;;;YAGf,QAAQ;;MAEV;IAEF,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAEtD;IAED,UAAU,IAAI,kBAAkB,CAK/B;IAEK,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAyBvG;CACF"}
@@ -1,49 +1,8 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.InspectAttachmentTool = void 0;
37
- const fs = __importStar(require("fs"));
38
- const path = __importStar(require("path"));
39
4
  const ToolRegistry_1 = require("../ToolRegistry");
40
- const ReadFileTool_1 = require("./ReadFileTool");
41
- const TEXT_EXTENSIONS = new Set([
42
- '.txt', '.md', '.markdown', '.json', '.jsonl', '.yaml', '.yml', '.toml', '.ini',
43
- '.csv', '.tsv', '.xml', '.html', '.css', '.js', '.mjs', '.cjs', '.ts', '.tsx',
44
- '.jsx', '.py', '.rb', '.go', '.rs', '.java', '.kt', '.swift', '.c', '.h', '.cpp',
45
- '.hpp', '.cs', '.sh', '.zsh', '.bash', '.fish', '.sql', '.log', '.diff', '.patch',
46
- ]);
5
+ const AttachmentResources_1 = require("../AttachmentResources");
47
6
  /** Attachment-scoped, read-only inspection. The model supplies an opaque ID,
48
7
  * never a host path; the run workspace resolves that ID to the exact upload. */
49
8
  class InspectAttachmentTool {
@@ -52,7 +11,7 @@ class InspectAttachmentTool {
52
11
  name: 'inspect_attachment',
53
12
  description: [
54
13
  'Inspect one attachment uploaded for the current run by its attachment ID.',
55
- 'Images become visible to the model; text and pre-extracted documents return bounded readable text; other binaries return safe metadata and their read-only run path.',
14
+ 'Images become visible to the model; documents return metadata, their read-only run path, capabilities, and a small bounded preview when available.',
56
15
  'When to use: the objective or skill depends on an attached image, document, spreadsheet, audio file, or other upload.',
57
16
  'When NOT to use: arbitrary filesystem paths, bundled skill files, or information already present in the prompt.',
58
17
  ].join(' '),
@@ -94,36 +53,12 @@ class InspectAttachmentTool {
94
53
  summary: `opened image ${attachment.name}`,
95
54
  };
96
55
  }
97
- const text = attachment.inspectionText ?? readTextAttachment(attachment.path, attachment.name, attachment.mediaType);
98
- if (text !== undefined) {
99
- return {
100
- content: (0, ToolRegistry_1.capToolOutput)(text, ctx.outputLimit),
101
- summary: `inspected ${attachment.name}`,
102
- };
103
- }
104
- const location = attachment.path ? `\nRead-only run path: ${attachment.path}` : '';
56
+ const inspection = new AttachmentResources_1.AttachmentResource(attachment).inspect(ctx.outputLimit);
105
57
  return {
106
- content: [
107
- `Attachment: ${attachment.name}`,
108
- `Media type: ${attachment.mediaType}`,
109
- `Size: ${(0, ReadFileTool_1.formatBytes)(attachment.size)}`,
110
- location,
111
- 'No built-in readable preview is available for this format. Use a format-specific local tool against the run path if the task requires deeper inspection.',
112
- ].filter(Boolean).join('\n'),
58
+ content: inspection.content,
113
59
  summary: `inspected metadata for ${attachment.name}`,
114
60
  };
115
61
  }
116
62
  }
117
63
  exports.InspectAttachmentTool = InspectAttachmentTool;
118
- function readTextAttachment(filePath, name, mediaType) {
119
- if (!filePath || (!mediaType.startsWith('text/') && !TEXT_EXTENSIONS.has(path.extname(name).toLowerCase()))) {
120
- return undefined;
121
- }
122
- try {
123
- return fs.readFileSync(filePath, 'utf8');
124
- }
125
- catch (error) {
126
- return `Could not read ${name}: ${error instanceof Error ? error.message : String(error)}`;
127
- }
128
- }
129
64
  //# sourceMappingURL=InspectAttachmentTool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InspectAttachmentTool.js","sourceRoot":"","sources":["../../../src/agent/tools/InspectAttachmentTool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InspectAttachmentTool.js","sourceRoot":"","sources":["../../../src/agent/tools/InspectAttachmentTool.ts"],"names":[],"mappings":";;;AACA,kDAMyB;AACzB,gEAA4D;AAE5D;gFACgF;AAChF;IACW,IAAI,GAAG,MAAe,CAAC;IACvB,UAAU,GAAG;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE;YACX,2EAA2E;YAC3E,oJAAoJ;YACpJ,uHAAuH;YACvH,iHAAiH;SAClH,CAAC,IAAI,CAAC,GAAG,CAAC;QACX,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,aAAa,EAAE;oBACb,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2EAA2E;iBACzF;aACF;YACD,QAAQ,EAAE,CAAC,eAAe,CAAC;SAC5B;KACF,CAAC;IAEF,aAAa,CAAC,KAAgC;QAC5C,OAAO,WAAW,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC;IAC7G,CAAC;IAED,UAAU;QACR,yEAAyE;QACzE,0EAA0E;QAC1E,iCAAiC;QACjC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAgC,EAAE,GAAyB;QACvE,MAAM,EAAE,GAAG,IAAA,iCAAkB,EAAC,KAAK,EAAE,eAAe,EAAE,oBAAoB,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACrF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;YACnG,OAAO;gBACL,OAAO,EAAE,eAAe,EAAE,6DAA6D,SAAS,GAAG;gBACnG,OAAO,EAAE,cAAc,EAAE,YAAY;gBACrC,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE,cAAc,UAAU,CAAC,EAAE,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,SAAS,6EAA6E;gBAC9J,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC1B,OAAO,EAAE,gBAAgB,UAAU,CAAC,IAAI,EAAE;aAC3C,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,wCAAkB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC/E,OAAO;YACL,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,OAAO,EAAE,0BAA0B,UAAU,CAAC,IAAI,EAAE;SACrD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,34 @@
1
+ import type { JSONValue } from '@priest-ai/core';
2
+ import { AgentTool, ToolExecutionContext, ToolExecutionResult, ToolRiskAssessment } from '../ToolRegistry';
3
+ export declare class ReadAttachmentTool implements AgentTool {
4
+ readonly kind: 'read';
5
+ readonly definition: {
6
+ name: string;
7
+ description: string;
8
+ parameters: {
9
+ type: string;
10
+ properties: {
11
+ attachment_id: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ start: {
16
+ type: string;
17
+ minimum: number;
18
+ description: string;
19
+ };
20
+ max_chars: {
21
+ type: string;
22
+ minimum: number;
23
+ maximum: number;
24
+ description: string;
25
+ };
26
+ };
27
+ required: string[];
28
+ };
29
+ };
30
+ summarizeCall(input: Record<string, JSONValue>): string;
31
+ assessRisk(): ToolRiskAssessment;
32
+ execute(input: Record<string, JSONValue>, ctx: ToolExecutionContext): Promise<ToolExecutionResult>;
33
+ }
34
+ //# sourceMappingURL=ReadAttachmentTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadAttachmentTool.d.ts","sourceRoot":"","sources":["../../../src/agent/tools/ReadAttachmentTool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMjD,OAAO,EACL,SAAS,EAET,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,iBAAiB,CAAC;AAEzB,qBAAa,kBAAmB,YAAW,SAAS;IAClD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,QAAQ,CAAC,UAAU;;;;;;;oBAUI,IAAI;oBAAY,WAAW;;;oBACnC,IAAI;oBAAa,OAAO;oBAAK,WAAW;;;;;;;;;;;MAUrD;IAEF,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAItD;IAED,UAAU,IAAI,kBAAkB,CAE/B;IAEK,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+BvG;CACF"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReadAttachmentTool = void 0;
4
+ const AttachmentResources_1 = require("../AttachmentResources");
5
+ const ToolRegistry_1 = require("../ToolRegistry");
6
+ class ReadAttachmentTool {
7
+ kind = 'read';
8
+ definition = {
9
+ name: 'read_attachment',
10
+ description: [
11
+ 'Read one bounded range from the derived readable view of an uploaded attachment.',
12
+ 'When to use: inspect a relevant section after inspect_attachment identified the document structure or search_attachment found a location.',
13
+ 'When NOT to use: load an entire large document, transform a complete file, or access an arbitrary filesystem path. Complete-file operations should use local tools against the read-only run path.',
14
+ ].join(' '),
15
+ parameters: {
16
+ type: 'object',
17
+ properties: {
18
+ attachment_id: { type: 'string', description: 'Opaque attachment ID from the current run manifest.' },
19
+ start: { type: 'integer', minimum: 0, description: 'Zero-based character offset in the readable view. Defaults to 0.' },
20
+ max_chars: {
21
+ type: 'integer',
22
+ minimum: 1,
23
+ maximum: AttachmentResources_1.MAX_ATTACHMENT_READ_CHARS,
24
+ description: `Maximum characters to return. Defaults to ${AttachmentResources_1.DEFAULT_ATTACHMENT_READ_CHARS}.`,
25
+ },
26
+ },
27
+ required: ['attachment_id'],
28
+ },
29
+ };
30
+ summarizeCall(input) {
31
+ const id = typeof input.attachment_id === 'string' ? input.attachment_id : '<missing attachment>';
32
+ const start = integerInput(input.start, 0);
33
+ return `read ${id} from character ${start}`;
34
+ }
35
+ assessRisk() {
36
+ return { escalate: false, trusted: true };
37
+ }
38
+ async execute(input, ctx) {
39
+ const id = (0, ToolRegistry_1.requireStringInput)(input, 'attachment_id', 'read_attachment');
40
+ const attachment = ctx.workspace?.attachments.find(candidate => candidate.id === id);
41
+ if (!attachment)
42
+ return missingAttachment(id, ctx);
43
+ const start = integerInput(input.start, 0);
44
+ const maxChars = integerInput(input.max_chars, AttachmentResources_1.DEFAULT_ATTACHMENT_READ_CHARS);
45
+ if (start < 0 || maxChars < 1 || maxChars > AttachmentResources_1.MAX_ATTACHMENT_READ_CHARS) {
46
+ return {
47
+ content: `read_attachment requires start >= 0 and max_chars between 1 and ${AttachmentResources_1.MAX_ATTACHMENT_READ_CHARS}.`,
48
+ summary: `invalid read range for ${attachment.name}`,
49
+ isError: true,
50
+ };
51
+ }
52
+ const result = new AttachmentResources_1.AttachmentResource(attachment).read(start, maxChars);
53
+ if (!result) {
54
+ return {
55
+ content: `No built-in readable view is available for ${attachment.name}. Use a format-specific local tool against ${attachment.path ?? 'its staged run path'}.`,
56
+ summary: `no readable view for ${attachment.name}`,
57
+ isError: true,
58
+ };
59
+ }
60
+ return {
61
+ content: [
62
+ `Attachment: ${attachment.name}`,
63
+ `Characters ${result.start}-${result.end} of ${result.total}`,
64
+ '',
65
+ result.content || '(empty range)',
66
+ ...(result.end < result.total ? [`[more available; continue with start=${result.end}]`] : []),
67
+ ].join('\n'),
68
+ summary: `read characters ${result.start}-${result.end} from ${attachment.name}`,
69
+ };
70
+ }
71
+ }
72
+ exports.ReadAttachmentTool = ReadAttachmentTool;
73
+ function integerInput(value, fallback) {
74
+ return typeof value === 'number' && Number.isInteger(value) ? value : fallback;
75
+ }
76
+ function missingAttachment(id, ctx) {
77
+ const available = ctx.workspace?.attachments.map(candidate => candidate.id).join(', ') || '(none)';
78
+ return {
79
+ content: `Attachment '${id}' is not available in this run. Available attachment IDs: ${available}.`,
80
+ summary: `attachment ${id} not found`,
81
+ isError: true,
82
+ };
83
+ }
84
+ //# sourceMappingURL=ReadAttachmentTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReadAttachmentTool.js","sourceRoot":"","sources":["../../../src/agent/tools/ReadAttachmentTool.ts"],"names":[],"mappings":"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"}