@goondan/openharness-base 0.0.1-alpha4 → 2.0.0-alpha.1

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 (105) hide show
  1. package/dist/index.d.ts +72 -5
  2. package/dist/index.js +506 -5
  3. package/package.json +11 -33
  4. package/src/__tests__/compaction-summarize.test.ts +234 -0
  5. package/src/__tests__/context-message.test.ts +203 -0
  6. package/src/__tests__/logging.test.ts +200 -0
  7. package/src/__tests__/message-window.test.ts +193 -0
  8. package/src/__tests__/required-tools-guard.test.ts +206 -0
  9. package/src/__tests__/tool-search.test.ts +187 -0
  10. package/src/__tests__/tools.test.ts +332 -0
  11. package/src/extensions/compaction-summarize.ts +58 -0
  12. package/src/extensions/context-message.ts +37 -0
  13. package/src/extensions/logging.ts +42 -0
  14. package/src/extensions/message-window.ts +23 -0
  15. package/src/extensions/required-tools-guard.ts +24 -0
  16. package/src/extensions/tool-search.ts +38 -0
  17. package/src/index.ts +16 -0
  18. package/src/tools/bash.ts +38 -0
  19. package/src/tools/file-system.ts +83 -0
  20. package/src/tools/http-fetch.ts +64 -0
  21. package/src/tools/json-query.ts +71 -0
  22. package/src/tools/text-transform.ts +59 -0
  23. package/src/tools/wait.ts +46 -0
  24. package/tsconfig.json +8 -0
  25. package/vitest.config.ts +7 -0
  26. package/README.md +0 -11
  27. package/dist/extensions/compaction.d.ts +0 -12
  28. package/dist/extensions/compaction.d.ts.map +0 -1
  29. package/dist/extensions/compaction.js +0 -159
  30. package/dist/extensions/compaction.js.map +0 -1
  31. package/dist/extensions/context-message.d.ts +0 -9
  32. package/dist/extensions/context-message.d.ts.map +0 -1
  33. package/dist/extensions/context-message.js +0 -446
  34. package/dist/extensions/context-message.js.map +0 -1
  35. package/dist/extensions/index.d.ts +0 -13
  36. package/dist/extensions/index.d.ts.map +0 -1
  37. package/dist/extensions/index.js +0 -7
  38. package/dist/extensions/index.js.map +0 -1
  39. package/dist/extensions/logging.d.ts +0 -11
  40. package/dist/extensions/logging.d.ts.map +0 -1
  41. package/dist/extensions/logging.js +0 -140
  42. package/dist/extensions/logging.js.map +0 -1
  43. package/dist/extensions/message-integrity.d.ts +0 -8
  44. package/dist/extensions/message-integrity.d.ts.map +0 -1
  45. package/dist/extensions/message-integrity.js +0 -88
  46. package/dist/extensions/message-integrity.js.map +0 -1
  47. package/dist/extensions/message-window.d.ts +0 -7
  48. package/dist/extensions/message-window.d.ts.map +0 -1
  49. package/dist/extensions/message-window.js +0 -60
  50. package/dist/extensions/message-window.js.map +0 -1
  51. package/dist/extensions/required-tools-guard.d.ts +0 -9
  52. package/dist/extensions/required-tools-guard.d.ts.map +0 -1
  53. package/dist/extensions/required-tools-guard.js +0 -74
  54. package/dist/extensions/required-tools-guard.js.map +0 -1
  55. package/dist/extensions/tool-search.d.ts +0 -10
  56. package/dist/extensions/tool-search.d.ts.map +0 -1
  57. package/dist/extensions/tool-search.js +0 -198
  58. package/dist/extensions/tool-search.js.map +0 -1
  59. package/dist/harness.yaml +0 -503
  60. package/dist/index.d.ts.map +0 -1
  61. package/dist/index.js.map +0 -1
  62. package/dist/manifests/base.d.ts +0 -8
  63. package/dist/manifests/base.d.ts.map +0 -1
  64. package/dist/manifests/base.js +0 -352
  65. package/dist/manifests/base.js.map +0 -1
  66. package/dist/manifests/index.d.ts +0 -3
  67. package/dist/manifests/index.d.ts.map +0 -1
  68. package/dist/manifests/index.js +0 -2
  69. package/dist/manifests/index.js.map +0 -1
  70. package/dist/tools/bash.d.ts +0 -8
  71. package/dist/tools/bash.d.ts.map +0 -1
  72. package/dist/tools/bash.js +0 -119
  73. package/dist/tools/bash.js.map +0 -1
  74. package/dist/tools/file-system.d.ts +0 -12
  75. package/dist/tools/file-system.d.ts.map +0 -1
  76. package/dist/tools/file-system.js +0 -117
  77. package/dist/tools/file-system.js.map +0 -1
  78. package/dist/tools/http-fetch.d.ts +0 -8
  79. package/dist/tools/http-fetch.d.ts.map +0 -1
  80. package/dist/tools/http-fetch.js +0 -149
  81. package/dist/tools/http-fetch.js.map +0 -1
  82. package/dist/tools/index.d.ts +0 -7
  83. package/dist/tools/index.d.ts.map +0 -1
  84. package/dist/tools/index.js +0 -7
  85. package/dist/tools/index.js.map +0 -1
  86. package/dist/tools/json-query.d.ts +0 -12
  87. package/dist/tools/json-query.d.ts.map +0 -1
  88. package/dist/tools/json-query.js +0 -176
  89. package/dist/tools/json-query.js.map +0 -1
  90. package/dist/tools/text-transform.d.ts +0 -16
  91. package/dist/tools/text-transform.d.ts.map +0 -1
  92. package/dist/tools/text-transform.js +0 -127
  93. package/dist/tools/text-transform.js.map +0 -1
  94. package/dist/tools/wait.d.ts +0 -6
  95. package/dist/tools/wait.d.ts.map +0 -1
  96. package/dist/tools/wait.js +0 -32
  97. package/dist/tools/wait.js.map +0 -1
  98. package/dist/types.d.ts +0 -4
  99. package/dist/types.d.ts.map +0 -1
  100. package/dist/types.js +0 -6
  101. package/dist/types.js.map +0 -1
  102. package/dist/utils.d.ts +0 -17
  103. package/dist/utils.d.ts.map +0 -1
  104. package/dist/utils.js +0 -159
  105. package/dist/utils.js.map +0 -1
@@ -1,352 +0,0 @@
1
- function createToolManifest(name, spec) {
2
- return {
3
- apiVersion: 'goondan.ai/v1',
4
- kind: 'Tool',
5
- metadata: {
6
- name,
7
- labels: {
8
- tier: 'base',
9
- },
10
- },
11
- spec,
12
- };
13
- }
14
- function createExtensionManifest(name, entry, config) {
15
- const spec = {
16
- entry,
17
- };
18
- if (config) {
19
- spec.config = config;
20
- }
21
- return {
22
- apiVersion: 'goondan.ai/v1',
23
- kind: 'Extension',
24
- metadata: {
25
- name,
26
- labels: {
27
- tier: 'base',
28
- },
29
- },
30
- spec,
31
- };
32
- }
33
- function ensureUniqueManifestNames(kind, manifests) {
34
- const seen = new Set();
35
- for (const manifest of manifests) {
36
- const name = manifest.metadata.name;
37
- if (seen.has(name)) {
38
- throw new Error(`Duplicate ${kind} manifest name: ${name}`);
39
- }
40
- seen.add(name);
41
- }
42
- return manifests;
43
- }
44
- function ensureUniqueExtensionEntries(manifests) {
45
- const seen = new Set();
46
- for (const manifest of manifests) {
47
- const entry = manifest.spec.entry;
48
- if (seen.has(entry)) {
49
- throw new Error(`Duplicate Extension manifest entry: ${entry}`);
50
- }
51
- seen.add(entry);
52
- }
53
- return manifests;
54
- }
55
- function ensureUniqueManifestIdentities(manifests) {
56
- const seen = new Set();
57
- for (const manifest of manifests) {
58
- const identity = `${manifest.kind}/${manifest.metadata.name}`;
59
- if (seen.has(identity)) {
60
- throw new Error(`Duplicate manifest identity: ${identity}`);
61
- }
62
- seen.add(identity);
63
- }
64
- return manifests;
65
- }
66
- function createProperty(type, description, extra = {}) {
67
- return {
68
- type: Array.isArray(type) ? [...type] : type,
69
- description,
70
- ...extra,
71
- };
72
- }
73
- function stringProperty(description, extra = {}) {
74
- return createProperty('string', description, extra);
75
- }
76
- function numberProperty(description, extra = {}) {
77
- return createProperty('number', description, extra);
78
- }
79
- function booleanProperty(description, extra = {}) {
80
- return createProperty('boolean', description, extra);
81
- }
82
- function objectProperty(description, extra = {}) {
83
- return createProperty('object', description, extra);
84
- }
85
- function arrayProperty(description, items, extra = {}) {
86
- const payload = { ...extra };
87
- if (items) {
88
- payload.items = items;
89
- }
90
- return createProperty('array', description, payload);
91
- }
92
- function createParameters(properties, required = []) {
93
- const parameters = {
94
- type: 'object',
95
- properties,
96
- additionalProperties: false,
97
- };
98
- if (required.length > 0) {
99
- parameters.required = [...required];
100
- }
101
- return parameters;
102
- }
103
- export function createBaseToolManifests() {
104
- return [
105
- createToolManifest('bash', {
106
- entry: './src/tools/bash.ts',
107
- errorMessageLimit: 1200,
108
- exports: [
109
- {
110
- name: 'exec',
111
- description: 'Execute one shell command using /bin/sh -lc in the current instance workspace.',
112
- parameters: createParameters({
113
- command: stringProperty('Shell command string to execute.'),
114
- cwd: stringProperty('Optional working directory path relative to the instance workdir.'),
115
- timeoutMs: numberProperty('Maximum execution time in milliseconds (default: 30000).'),
116
- env: objectProperty('Optional environment variable overrides merged with process.env before execution.'),
117
- }, ['command']),
118
- },
119
- {
120
- name: 'script',
121
- description: 'Run a script file from workdir with optional arguments and custom shell.',
122
- parameters: createParameters({
123
- path: stringProperty('Script file path relative to the instance workdir.'),
124
- args: arrayProperty('Optional command-line arguments passed to the script in order.', stringProperty('Single script argument value.')),
125
- shell: stringProperty('Shell binary path used to execute the script (default: /bin/bash).'),
126
- timeoutMs: numberProperty('Maximum execution time in milliseconds (default: 30000).'),
127
- env: objectProperty('Optional environment variable overrides merged with process.env before execution.'),
128
- }, ['path']),
129
- },
130
- ],
131
- }),
132
- createToolManifest('wait', {
133
- entry: './src/tools/wait.ts',
134
- errorMessageLimit: 600,
135
- exports: [
136
- {
137
- name: 'seconds',
138
- description: 'Pause execution for the specified number of seconds',
139
- parameters: createParameters({
140
- seconds: numberProperty('Seconds to wait (range: 0 to 300).'),
141
- }, ['seconds']),
142
- },
143
- ],
144
- }),
145
- createToolManifest('file-system', {
146
- entry: './src/tools/file-system.ts',
147
- errorMessageLimit: 2000,
148
- exports: [
149
- {
150
- name: 'read',
151
- description: 'Read file content from workdir',
152
- parameters: createParameters({
153
- path: stringProperty('File path relative to workdir to read.'),
154
- maxBytes: numberProperty('Maximum bytes to return from file content (default: 100000).'),
155
- }, ['path']),
156
- },
157
- {
158
- name: 'write',
159
- description: 'Write file content in workdir',
160
- parameters: createParameters({
161
- path: stringProperty('File path relative to workdir to write. Parent directories are created automatically.'),
162
- content: stringProperty('UTF-8 text content to write.'),
163
- append: booleanProperty('When true, append content instead of overwriting the file (default: false).'),
164
- }, ['path', 'content']),
165
- },
166
- {
167
- name: 'list',
168
- description: 'List directory entries',
169
- parameters: createParameters({
170
- path: stringProperty('Directory path relative to workdir (default: ".").'),
171
- recursive: booleanProperty('When true, traverse subdirectories recursively (default: false).'),
172
- includeDirs: booleanProperty('Include directory entries in result (default: true).'),
173
- includeFiles: booleanProperty('Include file entries in result (default: true).'),
174
- }),
175
- },
176
- {
177
- name: 'mkdir',
178
- description: 'Create directory in workdir',
179
- parameters: createParameters({
180
- path: stringProperty('Directory path relative to workdir to create.'),
181
- recursive: booleanProperty('Create parent directories when missing (default: true).'),
182
- }, ['path']),
183
- },
184
- ],
185
- }),
186
- createToolManifest('http-fetch', {
187
- entry: './src/tools/http-fetch.ts',
188
- exports: [
189
- {
190
- name: 'get',
191
- description: 'Perform HTTP GET request',
192
- parameters: createParameters({
193
- url: stringProperty('HTTP/HTTPS URL to request.'),
194
- headers: objectProperty('Optional request headers object. Primitive values are stringified.'),
195
- timeoutMs: numberProperty('Request timeout in milliseconds (default: 30000).'),
196
- maxBytes: numberProperty('Maximum response body bytes returned (default: 500000).'),
197
- }, ['url']),
198
- },
199
- {
200
- name: 'post',
201
- description: 'Perform HTTP POST request',
202
- parameters: createParameters({
203
- url: stringProperty('HTTP/HTTPS URL to request.'),
204
- body: objectProperty('JSON body object. When provided, it is stringified and content-type defaults to application/json.'),
205
- bodyString: stringProperty('Raw string request body. Ignored when body is provided.'),
206
- headers: objectProperty('Optional request headers object. Primitive values are stringified.'),
207
- timeoutMs: numberProperty('Request timeout in milliseconds (default: 30000).'),
208
- maxBytes: numberProperty('Maximum response body bytes returned (default: 500000).'),
209
- }, ['url']),
210
- },
211
- ],
212
- }),
213
- createToolManifest('json-query', {
214
- entry: './src/tools/json-query.ts',
215
- exports: [
216
- {
217
- name: 'query',
218
- description: 'Query JSON data by dot-notation path',
219
- parameters: createParameters({
220
- data: stringProperty('Input JSON string to parse and query.'),
221
- path: stringProperty('Dot/bracket path expression. Defaults to "." for root.'),
222
- }, ['data']),
223
- },
224
- {
225
- name: 'pick',
226
- description: 'Pick specific keys from JSON object',
227
- parameters: createParameters({
228
- data: stringProperty('Input JSON string expected to be an object.'),
229
- keys: arrayProperty('Object keys to pick from parsed JSON object.', stringProperty('Key name to pick.')),
230
- }, ['data', 'keys']),
231
- },
232
- {
233
- name: 'count',
234
- description: 'Count elements at a JSON path',
235
- parameters: createParameters({
236
- data: stringProperty('Input JSON string to parse.'),
237
- path: stringProperty('Dot/bracket path expression to count at. Defaults to "." for root.'),
238
- }, ['data']),
239
- },
240
- {
241
- name: 'flatten',
242
- description: 'Flatten nested JSON arrays',
243
- parameters: createParameters({
244
- data: stringProperty('Input JSON string expected to be an array.'),
245
- depth: numberProperty('Flatten depth level (default: 1).'),
246
- }, ['data']),
247
- },
248
- ],
249
- }),
250
- createToolManifest('text-transform', {
251
- entry: './src/tools/text-transform.ts',
252
- exports: [
253
- {
254
- name: 'replace',
255
- description: 'Replace text occurrences',
256
- parameters: createParameters({
257
- text: stringProperty('Source text to transform.'),
258
- search: stringProperty('Search string to find in text.'),
259
- replacement: stringProperty('Replacement string (default: empty string).'),
260
- all: booleanProperty('Replace all occurrences instead of first occurrence only.'),
261
- }, ['text', 'search']),
262
- },
263
- {
264
- name: 'slice',
265
- description: 'Extract substring by start/end positions',
266
- parameters: createParameters({
267
- text: stringProperty('Source text to slice.'),
268
- start: numberProperty('Start index (default: 0).'),
269
- end: numberProperty('Optional end index (exclusive).'),
270
- }, ['text']),
271
- },
272
- {
273
- name: 'split',
274
- description: 'Split text by delimiter',
275
- parameters: createParameters({
276
- text: stringProperty('Source text to split.'),
277
- delimiter: stringProperty('Delimiter string (default: newline).'),
278
- maxParts: numberProperty('Optional maximum number of split parts to return.'),
279
- }, ['text']),
280
- },
281
- {
282
- name: 'join',
283
- description: 'Join array of strings with delimiter',
284
- parameters: createParameters({
285
- parts: arrayProperty('List of values to join into a single string.', createProperty(['string', 'number', 'boolean'], 'Part value. Numbers/booleans are stringified before join.')),
286
- delimiter: stringProperty('Delimiter string inserted between parts (default: newline).'),
287
- }, ['parts']),
288
- },
289
- {
290
- name: 'trim',
291
- description: 'Trim whitespace from text',
292
- parameters: createParameters({
293
- text: stringProperty('Source text to trim.'),
294
- mode: stringProperty('Trim mode (default: both).', {
295
- enum: ['start', 'end', 'both'],
296
- }),
297
- }, ['text']),
298
- },
299
- {
300
- name: 'case',
301
- description: 'Transform text case (upper/lower)',
302
- parameters: createParameters({
303
- text: stringProperty('Source text to transform.'),
304
- to: stringProperty('Target case transform mode.', {
305
- enum: ['upper', 'lower'],
306
- }),
307
- }, ['text', 'to']),
308
- },
309
- ],
310
- }),
311
- ];
312
- }
313
- export function createBaseExtensionManifests() {
314
- return ensureUniqueExtensionEntries(ensureUniqueManifestNames('Extension', [
315
- createExtensionManifest('logging', './src/extensions/logging.ts', {
316
- level: 'info',
317
- includeToolArgs: false,
318
- }),
319
- createExtensionManifest('message-compaction', './src/extensions/compaction.ts', {
320
- maxMessages: 40,
321
- maxCharacters: 12000,
322
- retainLastMessages: 8,
323
- mode: 'remove',
324
- appendSummary: true,
325
- }),
326
- createExtensionManifest('message-window', './src/extensions/message-window.ts', {
327
- maxMessages: 80,
328
- }),
329
- createExtensionManifest('tool-search', './src/extensions/tool-search.ts', {
330
- toolName: 'tool-search__search',
331
- maxResults: 10,
332
- minQueryLength: 1,
333
- persistSelection: true,
334
- }),
335
- createExtensionManifest('context-message', './src/extensions/context-message.ts', {
336
- includeAgentPrompt: true,
337
- includeRouteSummary: false,
338
- includeInboundInput: true,
339
- }),
340
- createExtensionManifest('required-tools-guard', './src/extensions/required-tools-guard.ts', {
341
- requiredTools: [],
342
- errorMessage: '',
343
- }),
344
- ]));
345
- }
346
- export function createBaseManifestSet() {
347
- return ensureUniqueManifestIdentities([
348
- ...createBaseToolManifests(),
349
- ...createBaseExtensionManifests(),
350
- ]);
351
- }
352
- //# sourceMappingURL=base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/manifests/base.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export type { BaseManifest, BaseToolManifest, BaseExtensionManifest, } from './base.js';
2
- export { createBaseToolManifests, createBaseExtensionManifests, createBaseManifestSet, } from './base.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manifests/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,WAAW,CAAC"}
@@ -1,2 +0,0 @@
1
- export { createBaseToolManifests, createBaseExtensionManifests, createBaseManifestSet, } from './base.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manifests/index.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,GACtB,MAAM,WAAW,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { ToolHandler } from '../types.js';
2
- export declare const exec: ToolHandler;
3
- export declare const script: ToolHandler;
4
- export declare const handlers: {
5
- exec: ToolHandler;
6
- script: ToolHandler;
7
- };
8
- //# sourceMappingURL=bash.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAsC,WAAW,EAAE,MAAM,aAAa,CAAC;AAuGnF,eAAO,MAAM,IAAI,EAAE,WAwBlB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,WA4BpB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;CAGkB,CAAC"}
@@ -1,119 +0,0 @@
1
- import { access, constants } from 'node:fs/promises';
2
- import { spawn } from 'node:child_process';
3
- import { optionalJsonObject, optionalNumber, optionalString, optionalStringArray, requireString, resolveFromWorkdir, } from '../utils.js';
4
- function createEnvironment(input) {
5
- const env = { ...process.env };
6
- if (!input) {
7
- return env;
8
- }
9
- for (const [key, value] of Object.entries(input)) {
10
- if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
11
- env[key] = String(value);
12
- continue;
13
- }
14
- throw new Error(`env.${key} must be a primitive string/number/boolean value`);
15
- }
16
- return env;
17
- }
18
- async function runProcess(command, args, options) {
19
- return new Promise((resolve, reject) => {
20
- const child = spawn(command, args, {
21
- cwd: options.cwd,
22
- env: options.env,
23
- stdio: ['ignore', 'pipe', 'pipe'],
24
- });
25
- let stdout = '';
26
- let stderr = '';
27
- let timedOut = false;
28
- child.stdout.on('data', (chunk) => {
29
- stdout += chunk.toString();
30
- });
31
- child.stderr.on('data', (chunk) => {
32
- stderr += chunk.toString();
33
- });
34
- let timeoutHandle;
35
- if (options.timeoutMs > 0) {
36
- timeoutHandle = setTimeout(() => {
37
- timedOut = true;
38
- child.kill('SIGTERM');
39
- setTimeout(() => {
40
- if (!child.killed) {
41
- child.kill('SIGKILL');
42
- }
43
- }, 100);
44
- }, options.timeoutMs);
45
- }
46
- child.once('error', (error) => {
47
- if (timeoutHandle) {
48
- clearTimeout(timeoutHandle);
49
- }
50
- reject(error);
51
- });
52
- child.once('close', (code, signal) => {
53
- if (timeoutHandle) {
54
- clearTimeout(timeoutHandle);
55
- }
56
- resolve({
57
- stdout,
58
- stderr,
59
- exitCode: code === null ? -1 : code,
60
- signal,
61
- timedOut,
62
- });
63
- });
64
- });
65
- }
66
- export const exec = async (_ctx, input) => {
67
- const command = requireString(input, 'command');
68
- const cwdInput = optionalString(input, 'cwd');
69
- const timeoutMs = optionalNumber(input, 'timeoutMs', 30_000) ?? 30_000;
70
- const env = createEnvironment(optionalJsonObject(input, 'env'));
71
- const workdir = cwdInput ? resolveFromWorkdir(_ctx.workdir, cwdInput) : _ctx.workdir;
72
- const startedAt = Date.now();
73
- const result = await runProcess('/bin/sh', ['-lc', command], {
74
- cwd: workdir,
75
- env,
76
- timeoutMs,
77
- });
78
- return {
79
- command,
80
- cwd: workdir,
81
- durationMs: Date.now() - startedAt,
82
- stdout: result.stdout,
83
- stderr: result.stderr,
84
- exitCode: result.exitCode,
85
- signal: result.signal,
86
- timedOut: result.timedOut,
87
- };
88
- };
89
- export const script = async (_ctx, input) => {
90
- const path = requireString(input, 'path');
91
- const scriptPath = resolveFromWorkdir(_ctx.workdir, path);
92
- const args = optionalStringArray(input, 'args') ?? [];
93
- const shell = optionalString(input, 'shell') ?? '/bin/bash';
94
- const timeoutMs = optionalNumber(input, 'timeoutMs', 30_000) ?? 30_000;
95
- const env = createEnvironment(optionalJsonObject(input, 'env'));
96
- await access(scriptPath, constants.F_OK);
97
- const startedAt = Date.now();
98
- const result = await runProcess(shell, [scriptPath, ...args], {
99
- cwd: _ctx.workdir,
100
- env,
101
- timeoutMs,
102
- });
103
- return {
104
- path: scriptPath,
105
- shell,
106
- args,
107
- durationMs: Date.now() - startedAt,
108
- stdout: result.stdout,
109
- stderr: result.stderr,
110
- exitCode: result.exitCode,
111
- signal: result.signal,
112
- timedOut: result.timedOut,
113
- };
114
- };
115
- export const handlers = {
116
- exec,
117
- script,
118
- };
119
- //# sourceMappingURL=bash.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bash.js","sourceRoot":"","sources":["../../src/tools/bash.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import type { ToolHandler } from '../types.js';
2
- export declare const read: ToolHandler;
3
- export declare const write: ToolHandler;
4
- export declare const list: ToolHandler;
5
- export declare const mkdir: ToolHandler;
6
- export declare const handlers: {
7
- read: ToolHandler;
8
- write: ToolHandler;
9
- list: ToolHandler;
10
- mkdir: ToolHandler;
11
- };
12
- //# sourceMappingURL=file-system.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/tools/file-system.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAsC,WAAW,EAAE,MAAM,aAAa,CAAC;AAsEnF,eAAO,MAAM,IAAI,EAAE,WAmBlB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,WAoBnB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,WAkBlB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,WAYnB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;CAKkB,CAAC"}
@@ -1,117 +0,0 @@
1
- import { appendFile, mkdir as mkdirAsync, readFile, readdir, stat, writeFile, } from 'node:fs/promises';
2
- import { dirname, join } from 'node:path';
3
- import { optionalBoolean, optionalNumber, optionalString, requireString, resolveFromWorkdir, } from '../utils.js';
4
- function toJsonEntries(entries) {
5
- const output = [];
6
- for (const entry of entries) {
7
- const row = {
8
- name: entry.name,
9
- path: entry.path,
10
- type: entry.type,
11
- };
12
- if (entry.size !== undefined) {
13
- row.size = entry.size;
14
- }
15
- output.push(row);
16
- }
17
- return output;
18
- }
19
- async function collectDirectoryEntries(targetDir, recursive, includeDirs, includeFiles, output) {
20
- const entries = await readdir(targetDir, { withFileTypes: true });
21
- for (const entry of entries) {
22
- const fullPath = join(targetDir, entry.name);
23
- if (entry.isDirectory()) {
24
- if (includeDirs) {
25
- output.push({
26
- name: entry.name,
27
- path: fullPath,
28
- type: 'dir',
29
- });
30
- }
31
- if (recursive) {
32
- await collectDirectoryEntries(fullPath, recursive, includeDirs, includeFiles, output);
33
- }
34
- continue;
35
- }
36
- if (includeFiles && entry.isFile()) {
37
- const detail = await stat(fullPath);
38
- output.push({
39
- name: entry.name,
40
- path: fullPath,
41
- type: 'file',
42
- size: detail.size,
43
- });
44
- }
45
- }
46
- }
47
- export const read = async (ctx, input) => {
48
- const path = requireString(input, 'path');
49
- const maxBytes = optionalNumber(input, 'maxBytes', 100_000) ?? 100_000;
50
- if (maxBytes < 1) {
51
- throw new Error(`'maxBytes' must be greater than 0`);
52
- }
53
- const targetPath = resolveFromWorkdir(ctx.workdir, path);
54
- const buffer = await readFile(targetPath);
55
- const size = buffer.byteLength;
56
- const truncated = size > maxBytes;
57
- return {
58
- path: targetPath,
59
- size,
60
- truncated,
61
- content: buffer.subarray(0, Math.min(size, maxBytes)).toString('utf8'),
62
- };
63
- };
64
- export const write = async (ctx, input) => {
65
- const path = requireString(input, 'path');
66
- const content = requireString(input, 'content');
67
- const append = optionalBoolean(input, 'append', false) ?? false;
68
- const targetPath = resolveFromWorkdir(ctx.workdir, path);
69
- await mkdirAsync(dirname(targetPath), { recursive: true });
70
- if (append) {
71
- await appendFile(targetPath, content, 'utf8');
72
- }
73
- else {
74
- await writeFile(targetPath, content, 'utf8');
75
- }
76
- const detail = await stat(targetPath);
77
- return {
78
- path: targetPath,
79
- size: detail.size,
80
- written: true,
81
- append,
82
- };
83
- };
84
- export const list = async (ctx, input) => {
85
- const path = optionalString(input, 'path') ?? '.';
86
- const recursive = optionalBoolean(input, 'recursive', false) ?? false;
87
- const includeDirs = optionalBoolean(input, 'includeDirs', true) ?? true;
88
- const includeFiles = optionalBoolean(input, 'includeFiles', true) ?? true;
89
- const targetPath = resolveFromWorkdir(ctx.workdir, path);
90
- const entries = [];
91
- await collectDirectoryEntries(targetPath, recursive, includeDirs, includeFiles, entries);
92
- entries.sort((a, b) => a.path.localeCompare(b.path));
93
- return {
94
- path: targetPath,
95
- recursive,
96
- count: entries.length,
97
- entries: toJsonEntries(entries),
98
- };
99
- };
100
- export const mkdir = async (ctx, input) => {
101
- const path = requireString(input, 'path');
102
- const recursive = optionalBoolean(input, 'recursive', true) ?? true;
103
- const targetPath = resolveFromWorkdir(ctx.workdir, path);
104
- await mkdirAsync(targetPath, { recursive });
105
- return {
106
- path: targetPath,
107
- created: true,
108
- recursive,
109
- };
110
- };
111
- export const handlers = {
112
- read,
113
- write,
114
- list,
115
- mkdir,
116
- };
117
- //# sourceMappingURL=file-system.js.map