@amodalai/runtime 0.3.49 → 0.3.50

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 (161) hide show
  1. package/dist/src/agent/completion-tools.integration.test.d.ts +6 -0
  2. package/dist/src/agent/completion-tools.integration.test.js +263 -0
  3. package/dist/src/agent/completion-tools.integration.test.js.map +1 -0
  4. package/dist/src/agent/load-template-plan.integration.test.d.ts +6 -0
  5. package/dist/src/agent/load-template-plan.integration.test.js +152 -0
  6. package/dist/src/agent/load-template-plan.integration.test.js.map +1 -0
  7. package/dist/src/agent/local-server.js +64 -9
  8. package/dist/src/agent/local-server.js.map +1 -1
  9. package/dist/src/agent/loop-types.d.ts +12 -2
  10. package/dist/src/agent/loop.test.js +5 -2
  11. package/dist/src/agent/loop.test.js.map +1 -1
  12. package/dist/src/agent/propose-plan.integration.test.d.ts +6 -0
  13. package/dist/src/agent/propose-plan.integration.test.js +186 -0
  14. package/dist/src/agent/propose-plan.integration.test.js.map +1 -0
  15. package/dist/src/agent/routes/package-updates.d.ts +42 -0
  16. package/dist/src/agent/routes/package-updates.js +207 -0
  17. package/dist/src/agent/routes/package-updates.js.map +1 -0
  18. package/dist/src/agent/routes/package-updates.test.d.ts +6 -0
  19. package/dist/src/agent/routes/package-updates.test.js +25 -0
  20. package/dist/src/agent/routes/package-updates.test.js.map +1 -0
  21. package/dist/src/agent/setup-state.integration.test.d.ts +6 -0
  22. package/dist/src/agent/setup-state.integration.test.js +182 -0
  23. package/dist/src/agent/setup-state.integration.test.js.map +1 -0
  24. package/dist/src/agent/snapshot-server.js +1 -0
  25. package/dist/src/agent/snapshot-server.js.map +1 -1
  26. package/dist/src/agent/states/executing.d.ts +6 -0
  27. package/dist/src/agent/states/executing.js +63 -27
  28. package/dist/src/agent/states/executing.js.map +1 -1
  29. package/dist/src/agent/states/streaming.js +18 -2
  30. package/dist/src/agent/states/streaming.js.map +1 -1
  31. package/dist/src/agent/tool-executor-local.js +11 -2
  32. package/dist/src/agent/tool-executor-local.js.map +1 -1
  33. package/dist/src/agent/validate-connection.integration.test.d.ts +6 -0
  34. package/dist/src/agent/validate-connection.integration.test.js +160 -0
  35. package/dist/src/agent/validate-connection.integration.test.js.map +1 -0
  36. package/dist/src/api/create-agent.js +1 -0
  37. package/dist/src/api/create-agent.js.map +1 -1
  38. package/dist/src/index.d.ts +2 -0
  39. package/dist/src/index.js +9 -0
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/intent/executor.d.ts +48 -0
  42. package/dist/src/intent/executor.js +420 -0
  43. package/dist/src/intent/executor.js.map +1 -0
  44. package/dist/src/intent/executor.test.d.ts +6 -0
  45. package/dist/src/intent/executor.test.js +543 -0
  46. package/dist/src/intent/executor.test.js.map +1 -0
  47. package/dist/src/intent/index.d.ts +10 -0
  48. package/dist/src/intent/index.js +9 -0
  49. package/dist/src/intent/index.js.map +1 -0
  50. package/dist/src/intent/loader.d.ts +16 -0
  51. package/dist/src/intent/loader.js +112 -0
  52. package/dist/src/intent/loader.js.map +1 -0
  53. package/dist/src/intent/loader.test.d.ts +6 -0
  54. package/dist/src/intent/loader.test.js +86 -0
  55. package/dist/src/intent/loader.test.js.map +1 -0
  56. package/dist/src/intent/matcher.d.ts +26 -0
  57. package/dist/src/intent/matcher.js +29 -0
  58. package/dist/src/intent/matcher.js.map +1 -0
  59. package/dist/src/intent/matcher.test.d.ts +6 -0
  60. package/dist/src/intent/matcher.test.js +53 -0
  61. package/dist/src/intent/matcher.test.js.map +1 -0
  62. package/dist/src/intent/onboarding.e2e.test.d.ts +6 -0
  63. package/dist/src/intent/onboarding.e2e.test.js +394 -0
  64. package/dist/src/intent/onboarding.e2e.test.js.map +1 -0
  65. package/dist/src/routes/ai-stream.js +96 -3
  66. package/dist/src/routes/ai-stream.js.map +1 -1
  67. package/dist/src/routes/session-resolver.js +16 -0
  68. package/dist/src/routes/session-resolver.js.map +1 -1
  69. package/dist/src/session/credential-scrubber.d.ts +35 -0
  70. package/dist/src/session/credential-scrubber.js +150 -0
  71. package/dist/src/session/credential-scrubber.js.map +1 -0
  72. package/dist/src/session/credential-scrubber.test.d.ts +6 -0
  73. package/dist/src/session/credential-scrubber.test.js +192 -0
  74. package/dist/src/session/credential-scrubber.test.js.map +1 -0
  75. package/dist/src/session/manager.intent.test.d.ts +6 -0
  76. package/dist/src/session/manager.intent.test.js +197 -0
  77. package/dist/src/session/manager.intent.test.js.map +1 -0
  78. package/dist/src/session/manager.js +114 -0
  79. package/dist/src/session/manager.js.map +1 -1
  80. package/dist/src/session/session-builder.d.ts +16 -1
  81. package/dist/src/session/session-builder.js +209 -41
  82. package/dist/src/session/session-builder.js.map +1 -1
  83. package/dist/src/session/store.js +48 -2
  84. package/dist/src/session/store.js.map +1 -1
  85. package/dist/src/session/tool-context-factory.js +12 -0
  86. package/dist/src/session/tool-context-factory.js.map +1 -1
  87. package/dist/src/session/types.d.ts +12 -1
  88. package/dist/src/setup/commit-setup.d.ts +94 -0
  89. package/dist/src/setup/commit-setup.js +154 -0
  90. package/dist/src/setup/commit-setup.js.map +1 -0
  91. package/dist/src/setup/commit-setup.test.d.ts +6 -0
  92. package/dist/src/setup/commit-setup.test.js +310 -0
  93. package/dist/src/setup/commit-setup.test.js.map +1 -0
  94. package/dist/src/tools/README.md +270 -0
  95. package/dist/src/tools/admin-tools.d.ts +27 -0
  96. package/dist/src/tools/admin-tools.js +734 -0
  97. package/dist/src/tools/admin-tools.js.map +1 -0
  98. package/dist/src/tools/agent-package-discovery.test.d.ts +6 -0
  99. package/dist/src/tools/agent-package-discovery.test.js +90 -0
  100. package/dist/src/tools/agent-package-discovery.test.js.map +1 -0
  101. package/dist/src/tools/builtin/ask-choice.d.ts +8 -0
  102. package/dist/src/tools/builtin/ask-choice.js +54 -0
  103. package/dist/src/tools/builtin/ask-choice.js.map +1 -0
  104. package/dist/src/tools/context.d.ts +154 -0
  105. package/dist/src/tools/context.js +30 -0
  106. package/dist/src/tools/context.js.map +1 -0
  107. package/dist/src/tools/custom-tool-adapter.d.ts +33 -2
  108. package/dist/src/tools/custom-tool-adapter.js +38 -1
  109. package/dist/src/tools/custom-tool-adapter.js.map +1 -1
  110. package/dist/src/tools/custom-tool-adapter.test.js +48 -0
  111. package/dist/src/tools/custom-tool-adapter.test.js.map +1 -1
  112. package/dist/src/tools/fetch-url-tool.js +2 -0
  113. package/dist/src/tools/fetch-url-tool.js.map +1 -1
  114. package/dist/src/tools/file-tools.js +16 -0
  115. package/dist/src/tools/file-tools.js.map +1 -1
  116. package/dist/src/tools/fs/local.test.d.ts +6 -0
  117. package/dist/src/tools/fs/local.test.js +126 -0
  118. package/dist/src/tools/fs/local.test.js.map +1 -0
  119. package/dist/src/tools/index.d.ts +35 -0
  120. package/dist/src/tools/index.js +11 -0
  121. package/dist/src/tools/index.js.map +1 -0
  122. package/dist/src/tools/mcp-tool-adapter.js +2 -0
  123. package/dist/src/tools/mcp-tool-adapter.js.map +1 -1
  124. package/dist/src/tools/memory-tool.js +23 -1
  125. package/dist/src/tools/memory-tool.js.map +1 -1
  126. package/dist/src/tools/permissions.d.ts +36 -0
  127. package/dist/src/tools/permissions.js +97 -0
  128. package/dist/src/tools/permissions.js.map +1 -0
  129. package/dist/src/tools/permissions.test.d.ts +6 -0
  130. package/dist/src/tools/permissions.test.js +62 -0
  131. package/dist/src/tools/permissions.test.js.map +1 -0
  132. package/dist/src/tools/request-tool.js +2 -0
  133. package/dist/src/tools/request-tool.js.map +1 -1
  134. package/dist/src/tools/sdk-context.d.ts +43 -0
  135. package/dist/src/tools/sdk-context.js +94 -0
  136. package/dist/src/tools/sdk-context.js.map +1 -0
  137. package/dist/src/tools/sdk-context.test.d.ts +6 -0
  138. package/dist/src/tools/sdk-context.test.js +134 -0
  139. package/dist/src/tools/sdk-context.test.js.map +1 -0
  140. package/dist/src/tools/store-tools.js +6 -0
  141. package/dist/src/tools/store-tools.js.map +1 -1
  142. package/dist/src/tools/types.d.ts +53 -14
  143. package/dist/src/tools/web-search-tool.js +2 -0
  144. package/dist/src/tools/web-search-tool.js.map +1 -1
  145. package/dist/src/types.d.ts +164 -28
  146. package/dist/src/types.js +9 -3
  147. package/dist/src/types.js.map +1 -1
  148. package/dist/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +16 -4
  150. package/dist/src/tools/agent-config-tool.d.ts +0 -7
  151. package/dist/src/tools/agent-config-tool.js +0 -78
  152. package/dist/src/tools/agent-config-tool.js.map +0 -1
  153. package/dist/src/tools/collect-secret-tool.d.ts +0 -7
  154. package/dist/src/tools/collect-secret-tool.js +0 -47
  155. package/dist/src/tools/collect-secret-tool.js.map +0 -1
  156. package/dist/src/tools/fs/http.d.ts +0 -37
  157. package/dist/src/tools/fs/http.js +0 -88
  158. package/dist/src/tools/fs/http.js.map +0 -1
  159. package/dist/src/tools/http-file-tools.d.ts +0 -13
  160. package/dist/src/tools/http-file-tools.js +0 -146
  161. package/dist/src/tools/http-file-tools.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amodalai/runtime",
3
- "version": "0.3.49",
3
+ "version": "0.3.50",
4
4
  "description": "Agent Runtime Platform — HTTP server for repo and platform modes",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -14,6 +14,18 @@
14
14
  },
15
15
  "type": "module",
16
16
  "main": "dist/src/index.js",
17
+ "types": "dist/src/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/src/index.d.ts",
21
+ "default": "./dist/src/index.js"
22
+ },
23
+ "./tools": {
24
+ "types": "./dist/src/tools/index.d.ts",
25
+ "default": "./dist/src/tools/index.js"
26
+ },
27
+ "./package.json": "./package.json"
28
+ },
17
29
  "files": [
18
30
  "dist"
19
31
  ],
@@ -30,9 +42,9 @@
30
42
  "linkedom": "^0.18.12",
31
43
  "pg": "^8.13.1",
32
44
  "zod": "^3.25.0",
33
- "@amodalai/core": "0.3.49",
34
- "@amodalai/db": "0.3.49",
35
- "@amodalai/types": "0.3.49"
45
+ "@amodalai/core": "0.3.50",
46
+ "@amodalai/db": "0.3.50",
47
+ "@amodalai/types": "0.3.50"
36
48
  },
37
49
  "devDependencies": {
38
50
  "@types/express": "^4.17.21",
@@ -1,7 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Amodal Labs, Inc.
4
- * SPDX-License-Identifier: MIT
5
- */
6
- import type { ToolRegistry } from './types.js';
7
- export declare function registerAgentConfigTool(registry: ToolRegistry, repoRoot: string): void;
@@ -1,78 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Amodal Labs, Inc.
4
- * SPDX-License-Identifier: MIT
5
- */
6
- /**
7
- * read_agent_config tool — lets the admin agent see what's configured
8
- * in the user's agent (packages, models, etc.) without accessing the
9
- * raw amodal.json file which is in the blocked files list.
10
- */
11
- import { readFileSync, existsSync, readdirSync } from 'node:fs';
12
- import * as path from 'node:path';
13
- import { z } from 'zod';
14
- export function registerAgentConfigTool(registry, repoRoot) {
15
- registry.register('read_agent_config', {
16
- description: 'Read the current agent configuration: installed packages, connections, ' +
17
- 'skills, knowledge, automations, and model settings. Use this to ' +
18
- 'understand what the agent has before making changes.',
19
- parameters: z.object({}),
20
- readOnly: true,
21
- metadata: { category: 'admin' },
22
- async execute(_params, _ctx) {
23
- const configPath = path.join(repoRoot, 'amodal.json');
24
- if (!existsSync(configPath)) {
25
- return { error: 'No amodal.json found' };
26
- }
27
- try {
28
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- parsing local JSON
29
- const config = JSON.parse(readFileSync(configPath, 'utf-8'));
30
- // List directory contents for each config dir
31
- const dirs = ['skills', 'knowledge', 'connections', 'automations', 'stores', 'pages', 'evals', 'tools'];
32
- const contents = {};
33
- for (const dir of dirs) {
34
- const dirPath = path.join(repoRoot, dir);
35
- if (existsSync(dirPath)) {
36
- contents[dir] = readdirSync(dirPath).filter((f) => !f.startsWith('.'));
37
- }
38
- }
39
- // Read package metadata for installed connections
40
- const packages = [];
41
- const pkgList = Array.isArray(config['packages'])
42
- ? config['packages'].filter((p) => typeof p === 'string')
43
- : [];
44
- for (const pkg of pkgList) {
45
- try {
46
- const pkgJsonPath = path.join(repoRoot, 'node_modules', pkg, 'package.json');
47
- if (!existsSync(pkgJsonPath))
48
- continue;
49
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- parsing package.json
50
- const pkgJson = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
51
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- amodal block
52
- const amodal = pkgJson['amodal'];
53
- packages.push({
54
- name: pkg,
55
- displayName: typeof amodal?.['displayName'] === 'string' ? amodal['displayName']
56
- : typeof amodal?.['name'] === 'string' ? amodal['name']
57
- : pkg,
58
- description: typeof amodal?.['description'] === 'string' ? amodal['description'] : undefined,
59
- });
60
- }
61
- catch { /* non-fatal — package may be missing or malformed */ }
62
- }
63
- return {
64
- name: config['name'],
65
- version: config['version'],
66
- packages,
67
- contents,
68
- models: config['models'],
69
- memory: config['memory'],
70
- };
71
- }
72
- catch (err) {
73
- return { error: err instanceof Error ? err.message : String(err) };
74
- }
75
- },
76
- });
77
- }
78
- //# sourceMappingURL=agent-config-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-config-tool.js","sourceRoot":"","sources":["../../../src/tools/agent-config-tool.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Amodal Labs, Inc.
4
- * SPDX-License-Identifier: MIT
5
- */
6
- import type { ToolRegistry } from './types.js';
7
- export declare function registerCollectSecretTool(registry: ToolRegistry): void;
@@ -1,47 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Amodal Labs, Inc.
4
- * SPDX-License-Identifier: MIT
5
- */
6
- /**
7
- * collect_secret tool — renders an inline API key input form in the chat.
8
- * The secret value goes directly from the widget to /api/secrets via
9
- * browser fetch, never touching the LLM.
10
- *
11
- * Used by the admin agent when the user asks to connect a service
12
- * that requires an API key.
13
- */
14
- import { z } from 'zod';
15
- import { SSEEventType } from '../types.js';
16
- export function registerCollectSecretTool(registry) {
17
- registry.register('collect_secret', {
18
- description: 'Show an inline form for the user to enter an API key or secret. ' +
19
- 'The value is saved securely and never sent to the chat. ' +
20
- 'Use this for connections that need API keys (not OAuth).',
21
- parameters: z.object({
22
- name: z.string().describe('Environment variable name (e.g. SENDGRID_API_KEY)'),
23
- label: z.string().describe('Human-readable label for the input'),
24
- description: z.string().optional().describe('Help text about where to find the key'),
25
- link: z.string().optional().describe('URL to the provider dashboard where the key is found'),
26
- required: z.boolean().default(true),
27
- }),
28
- readOnly: true,
29
- metadata: { category: 'admin' },
30
- async execute(params, ctx) {
31
- const secretId = `secret_${ctx.sessionId}_${Date.now().toString(36)}`;
32
- const event = {
33
- type: SSEEventType.CollectSecret,
34
- secret_id: secretId,
35
- name: params.name,
36
- label: params.label,
37
- description: params.description,
38
- link: params.link,
39
- required: params.required,
40
- timestamp: new Date().toISOString(),
41
- };
42
- ctx.emit?.(event);
43
- return { ok: true, secret_id: secretId, name: params.name };
44
- },
45
- });
46
- }
47
- //# sourceMappingURL=collect-secret-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collect-secret-tool.js","sourceRoot":"","sources":["../../../src/tools/collect-secret-tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAGzC,MAAM,UAAU,yBAAyB,CAAC,QAAsB;IAC9D,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE;QAClC,WAAW,EACT,kEAAkE;YAClE,0DAA0D;YAC1D,0DAA0D;QAC5D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;YAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAChE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;YACpF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;YAC5F,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;SACpC,CAAC;QACF,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAC;QAE7B,KAAK,CAAC,OAAO,CACX,MAA6F,EAC7F,GAAgB;YAEhB,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAEtE,MAAM,KAAK,GAA0B;gBACnC,IAAI,EAAE,YAAY,CAAC,aAAa;gBAChC,SAAS,EAAE,QAAQ;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YAEF,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;YAElB,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC;QAC5D,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1,37 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Amodal Labs, Inc.
4
- * SPDX-License-Identifier: MIT
5
- */
6
- /**
7
- * `HttpFsBackend` — implements `FsBackend` by calling a remote runtime's
8
- * workspace API over HTTP. Used when the admin agent needs to read/write
9
- * files on a different agent's Fly machine.
10
- *
11
- * Endpoints:
12
- * GET /api/files → file tree
13
- * GET /api/files/{path} → { path, content }
14
- * PUT /api/files/{path} → write file
15
- * DELETE /api/files/{path} → delete file
16
- */
17
- import type { FsBackend, RepoFileEntry, RepoDirListing } from '@amodalai/types';
18
- export interface HttpFsBackendOptions {
19
- /** Base URL of the target runtime (e.g., https://tesseric-agent.amodalapp.com) */
20
- runtimeUrl: string;
21
- /** Auth token to include in requests */
22
- authToken?: string;
23
- /** Timeout per request in ms (default: 10_000) */
24
- timeoutMs?: number;
25
- }
26
- export declare class HttpFsBackend implements FsBackend {
27
- private readonly baseUrl;
28
- private readonly authToken?;
29
- private readonly timeoutMs;
30
- constructor(opts: HttpFsBackendOptions);
31
- private headers;
32
- readRepoFile(repoPath: string): Promise<string>;
33
- writeRepoFile(repoPath: string, content: string): Promise<void>;
34
- readManyRepoFiles(repoPaths: string[]): Promise<RepoFileEntry[]>;
35
- listRepoFiles(repoPath: string): Promise<RepoDirListing>;
36
- deleteRepoFile(repoPath: string): Promise<void>;
37
- }
@@ -1,88 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Amodal Labs, Inc.
4
- * SPDX-License-Identifier: MIT
5
- */
6
- export class HttpFsBackend {
7
- baseUrl;
8
- authToken;
9
- timeoutMs;
10
- constructor(opts) {
11
- this.baseUrl = opts.runtimeUrl.replace(/\/+$/, '');
12
- this.authToken = opts.authToken;
13
- this.timeoutMs = opts.timeoutMs ?? 10_000;
14
- }
15
- headers() {
16
- const h = { 'Content-Type': 'application/json' };
17
- if (this.authToken)
18
- h['Authorization'] = `Bearer ${this.authToken}`;
19
- return h;
20
- }
21
- async readRepoFile(repoPath) {
22
- const res = await fetch(`${this.baseUrl}/api/files/${encodeURIComponent(repoPath)}`, {
23
- headers: this.headers(),
24
- signal: AbortSignal.timeout(this.timeoutMs),
25
- });
26
- if (!res.ok)
27
- throw new Error(`Failed to read ${repoPath}: ${res.status}`);
28
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- system boundary: parsing workspace API JSON
29
- const data = await res.json();
30
- return data.content;
31
- }
32
- async writeRepoFile(repoPath, content) {
33
- const res = await fetch(`${this.baseUrl}/api/files/${encodeURIComponent(repoPath)}`, {
34
- method: 'PUT',
35
- headers: this.headers(),
36
- body: JSON.stringify({ content }),
37
- signal: AbortSignal.timeout(this.timeoutMs),
38
- });
39
- if (!res.ok)
40
- throw new Error(`Failed to write ${repoPath}: ${res.status}`);
41
- }
42
- async readManyRepoFiles(repoPaths) {
43
- const results = [];
44
- for (const p of repoPaths) {
45
- try {
46
- const content = await this.readRepoFile(p);
47
- results.push({ path: p, content });
48
- }
49
- catch {
50
- // Skip missing files (matches LocalFsBackend behavior)
51
- }
52
- }
53
- return results;
54
- }
55
- async listRepoFiles(repoPath) {
56
- const res = await fetch(`${this.baseUrl}/api/files`, {
57
- headers: this.headers(),
58
- signal: AbortSignal.timeout(this.timeoutMs),
59
- });
60
- if (!res.ok)
61
- return { directories: [], files: [] };
62
- // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- system boundary: parsing workspace API JSON
63
- const data = await res.json();
64
- // Find the requested directory in the tree
65
- const parts = repoPath.split('/').filter((p) => p && p !== '.');
66
- let nodes = data.tree;
67
- for (const part of parts) {
68
- const dir = nodes.find((n) => n.name === part && n.type === 'directory');
69
- if (!dir?.children)
70
- return { directories: [], files: [] };
71
- nodes = dir.children;
72
- }
73
- return {
74
- directories: nodes.filter((n) => n.type === 'directory').map((n) => n.name),
75
- files: nodes.filter((n) => n.type === 'file').map((n) => n.name),
76
- };
77
- }
78
- async deleteRepoFile(repoPath) {
79
- const res = await fetch(`${this.baseUrl}/api/files/${encodeURIComponent(repoPath)}`, {
80
- method: 'DELETE',
81
- headers: this.headers(),
82
- signal: AbortSignal.timeout(this.timeoutMs),
83
- });
84
- if (!res.ok)
85
- throw new Error(`Failed to delete ${repoPath}: ${res.status}`);
86
- }
87
- }
88
- //# sourceMappingURL=http.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../../src/tools/fs/http.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Amodal Labs, Inc.
4
- * SPDX-License-Identifier: MIT
5
- */
6
- import type { ToolRegistry } from './types.js';
7
- import type { FsBackend } from '@amodalai/types';
8
- import type { Logger } from '../logger.js';
9
- export interface HttpFileToolsOptions {
10
- fs: FsBackend;
11
- logger: Logger;
12
- }
13
- export declare function registerHttpFileTools(registry: ToolRegistry, opts: HttpFileToolsOptions): void;
@@ -1,146 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2026 Amodal Labs, Inc.
4
- * SPDX-License-Identifier: MIT
5
- */
6
- /**
7
- * HTTP-backed file tools — same tool names and schemas as the local file-tools,
8
- * but reads/writes go through a remote runtime's workspace API via HttpFsBackend.
9
- *
10
- * Used when the admin agent runs on a different machine than the main agent
11
- * (Cloud mode). Set WORKSPACE_API_URL to activate.
12
- */
13
- import { z } from 'zod';
14
- export function registerHttpFileTools(registry, opts) {
15
- const { fs, logger } = opts;
16
- registry.register('read_repo_file', {
17
- description: 'Read a file from the agent repository.',
18
- parameters: z.object({
19
- path: z.string().describe('Relative path to the file within the repo'),
20
- offset: z.number().optional().describe('Line offset to start reading from'),
21
- limit: z.number().optional().describe('Max number of lines to return'),
22
- }),
23
- readOnly: true,
24
- metadata: { category: 'system' },
25
- async execute(params) {
26
- try {
27
- logger.debug('file_tool_call', { tool: 'read_repo_file', path: params.path });
28
- let content = await fs.readRepoFile(params.path);
29
- if (params.offset !== undefined || params.limit !== undefined) {
30
- const lines = content.split('\n');
31
- const start = params.offset ?? 0;
32
- const end = params.limit !== undefined ? start + params.limit : lines.length;
33
- content = lines.slice(start, end).join('\n');
34
- }
35
- return content;
36
- }
37
- catch (err) {
38
- return { error: err instanceof Error ? err.message : String(err) };
39
- }
40
- },
41
- });
42
- registry.register('write_repo_file', {
43
- description: 'Write content to a file in the agent repository. Creates parent directories as needed.',
44
- parameters: z.object({
45
- path: z.string().describe('Relative path to the file within the repo'),
46
- content: z.string().describe('The content to write to the file'),
47
- }),
48
- readOnly: false,
49
- metadata: { category: 'system' },
50
- async execute(params) {
51
- try {
52
- logger.debug('file_tool_call', { tool: 'write_repo_file', path: params.path });
53
- await fs.writeRepoFile(params.path, params.content);
54
- return { ok: true, path: params.path };
55
- }
56
- catch (err) {
57
- return { error: err instanceof Error ? err.message : String(err) };
58
- }
59
- },
60
- });
61
- registry.register('edit_repo_file', {
62
- description: 'Edit a file by replacing a specific string. Use for targeted changes.',
63
- parameters: z.object({
64
- path: z.string().describe('Relative path to the file'),
65
- old_string: z.string().describe('The exact text to find'),
66
- new_string: z.string().describe('The replacement text'),
67
- }),
68
- readOnly: false,
69
- metadata: { category: 'system' },
70
- async execute(params) {
71
- try {
72
- logger.debug('file_tool_call', { tool: 'edit_repo_file', path: params.path });
73
- const content = await fs.readRepoFile(params.path);
74
- if (!content.includes(params.old_string)) {
75
- return { error: `String not found in ${params.path}` };
76
- }
77
- const updated = content.replace(params.old_string, params.new_string);
78
- await fs.writeRepoFile(params.path, updated);
79
- return { ok: true, path: params.path };
80
- }
81
- catch (err) {
82
- return { error: err instanceof Error ? err.message : String(err) };
83
- }
84
- },
85
- });
86
- registry.register('delete_repo_file', {
87
- description: 'Delete a file from the agent repository.',
88
- parameters: z.object({
89
- path: z.string().describe('Relative path to the file'),
90
- }),
91
- readOnly: false,
92
- metadata: { category: 'system' },
93
- async execute(params) {
94
- try {
95
- logger.debug('file_tool_call', { tool: 'delete_repo_file', path: params.path });
96
- await fs.deleteRepoFile(params.path);
97
- return { ok: true, path: params.path };
98
- }
99
- catch (err) {
100
- return { error: err instanceof Error ? err.message : String(err) };
101
- }
102
- },
103
- });
104
- registry.register('list_repo_files', {
105
- description: 'List files and directories at a path in the agent repository.',
106
- parameters: z.object({
107
- dir: z.string().optional().describe('Directory to list (default: repo root)'),
108
- }),
109
- readOnly: true,
110
- metadata: { category: 'system' },
111
- async execute(params) {
112
- try {
113
- logger.debug('file_tool_call', { tool: 'list_repo_files', dir: params.dir });
114
- const listing = await fs.listRepoFiles(params.dir ?? '.');
115
- const entries = [
116
- ...listing.directories.map((d) => `${d}/`),
117
- ...listing.files,
118
- ];
119
- return entries.join('\n') || '(empty directory)';
120
- }
121
- catch (err) {
122
- return { error: err instanceof Error ? err.message : String(err) };
123
- }
124
- },
125
- });
126
- registry.register('read_many_repo_files', {
127
- description: 'Read multiple files at once. Missing files are silently skipped.',
128
- parameters: z.object({
129
- paths: z.array(z.string()).describe('Array of relative file paths'),
130
- }),
131
- readOnly: true,
132
- metadata: { category: 'system' },
133
- async execute(params) {
134
- try {
135
- logger.debug('file_tool_call', { tool: 'read_many_repo_files', count: params.paths.length });
136
- const files = await fs.readManyRepoFiles(params.paths);
137
- return files.map((f) => `--- ${f.path} ---\n${f.content}`).join('\n\n');
138
- }
139
- catch (err) {
140
- return { error: err instanceof Error ? err.message : String(err) };
141
- }
142
- },
143
- });
144
- logger.debug('http_file_tools_registered', { tools: 6 });
145
- }
146
- //# sourceMappingURL=http-file-tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-file-tools.js","sourceRoot":"","sources":["../../../src/tools/http-file-tools.ts"],"names":[],"mappings":"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"}