@amodalai/runtime 0.3.49 → 0.3.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/agent/completion-tools.integration.test.d.ts +6 -0
- package/dist/src/agent/completion-tools.integration.test.js +263 -0
- package/dist/src/agent/completion-tools.integration.test.js.map +1 -0
- package/dist/src/agent/load-template-plan.integration.test.d.ts +6 -0
- package/dist/src/agent/load-template-plan.integration.test.js +152 -0
- package/dist/src/agent/load-template-plan.integration.test.js.map +1 -0
- package/dist/src/agent/local-server.js +64 -9
- package/dist/src/agent/local-server.js.map +1 -1
- package/dist/src/agent/loop-types.d.ts +12 -2
- package/dist/src/agent/loop.test.js +5 -2
- package/dist/src/agent/loop.test.js.map +1 -1
- package/dist/src/agent/propose-plan.integration.test.d.ts +6 -0
- package/dist/src/agent/propose-plan.integration.test.js +186 -0
- package/dist/src/agent/propose-plan.integration.test.js.map +1 -0
- package/dist/src/agent/routes/package-updates.d.ts +42 -0
- package/dist/src/agent/routes/package-updates.js +207 -0
- package/dist/src/agent/routes/package-updates.js.map +1 -0
- package/dist/src/agent/routes/package-updates.test.d.ts +6 -0
- package/dist/src/agent/routes/package-updates.test.js +25 -0
- package/dist/src/agent/routes/package-updates.test.js.map +1 -0
- package/dist/src/agent/setup-state.integration.test.d.ts +6 -0
- package/dist/src/agent/setup-state.integration.test.js +182 -0
- package/dist/src/agent/setup-state.integration.test.js.map +1 -0
- package/dist/src/agent/snapshot-server.js +1 -0
- package/dist/src/agent/snapshot-server.js.map +1 -1
- package/dist/src/agent/states/executing.d.ts +6 -0
- package/dist/src/agent/states/executing.js +63 -27
- package/dist/src/agent/states/executing.js.map +1 -1
- package/dist/src/agent/states/streaming.js +18 -2
- package/dist/src/agent/states/streaming.js.map +1 -1
- package/dist/src/agent/tool-executor-local.js +11 -2
- package/dist/src/agent/tool-executor-local.js.map +1 -1
- package/dist/src/agent/validate-connection.integration.test.d.ts +6 -0
- package/dist/src/agent/validate-connection.integration.test.js +160 -0
- package/dist/src/agent/validate-connection.integration.test.js.map +1 -0
- package/dist/src/api/create-agent.js +1 -0
- package/dist/src/api/create-agent.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/intent/executor.d.ts +48 -0
- package/dist/src/intent/executor.js +420 -0
- package/dist/src/intent/executor.js.map +1 -0
- package/dist/src/intent/executor.test.d.ts +6 -0
- package/dist/src/intent/executor.test.js +543 -0
- package/dist/src/intent/executor.test.js.map +1 -0
- package/dist/src/intent/index.d.ts +10 -0
- package/dist/src/intent/index.js +9 -0
- package/dist/src/intent/index.js.map +1 -0
- package/dist/src/intent/loader.d.ts +16 -0
- package/dist/src/intent/loader.js +112 -0
- package/dist/src/intent/loader.js.map +1 -0
- package/dist/src/intent/loader.test.d.ts +6 -0
- package/dist/src/intent/loader.test.js +86 -0
- package/dist/src/intent/loader.test.js.map +1 -0
- package/dist/src/intent/matcher.d.ts +26 -0
- package/dist/src/intent/matcher.js +29 -0
- package/dist/src/intent/matcher.js.map +1 -0
- package/dist/src/intent/matcher.test.d.ts +6 -0
- package/dist/src/intent/matcher.test.js +53 -0
- package/dist/src/intent/matcher.test.js.map +1 -0
- package/dist/src/intent/onboarding.e2e.test.d.ts +6 -0
- package/dist/src/intent/onboarding.e2e.test.js +394 -0
- package/dist/src/intent/onboarding.e2e.test.js.map +1 -0
- package/dist/src/routes/ai-stream.js +96 -3
- package/dist/src/routes/ai-stream.js.map +1 -1
- package/dist/src/routes/session-resolver.js +16 -0
- package/dist/src/routes/session-resolver.js.map +1 -1
- package/dist/src/session/credential-scrubber.d.ts +35 -0
- package/dist/src/session/credential-scrubber.js +150 -0
- package/dist/src/session/credential-scrubber.js.map +1 -0
- package/dist/src/session/credential-scrubber.test.d.ts +6 -0
- package/dist/src/session/credential-scrubber.test.js +192 -0
- package/dist/src/session/credential-scrubber.test.js.map +1 -0
- package/dist/src/session/manager.intent.test.d.ts +6 -0
- package/dist/src/session/manager.intent.test.js +197 -0
- package/dist/src/session/manager.intent.test.js.map +1 -0
- package/dist/src/session/manager.js +114 -0
- package/dist/src/session/manager.js.map +1 -1
- package/dist/src/session/session-builder.d.ts +16 -1
- package/dist/src/session/session-builder.js +209 -41
- package/dist/src/session/session-builder.js.map +1 -1
- package/dist/src/session/store.js +48 -2
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/tool-context-factory.js +12 -0
- package/dist/src/session/tool-context-factory.js.map +1 -1
- package/dist/src/session/types.d.ts +12 -1
- package/dist/src/setup/commit-setup.d.ts +94 -0
- package/dist/src/setup/commit-setup.js +154 -0
- package/dist/src/setup/commit-setup.js.map +1 -0
- package/dist/src/setup/commit-setup.test.d.ts +6 -0
- package/dist/src/setup/commit-setup.test.js +310 -0
- package/dist/src/setup/commit-setup.test.js.map +1 -0
- package/dist/src/tools/README.md +270 -0
- package/dist/src/tools/admin-tools.d.ts +27 -0
- package/dist/src/tools/admin-tools.js +734 -0
- package/dist/src/tools/admin-tools.js.map +1 -0
- package/dist/src/tools/agent-package-discovery.test.d.ts +6 -0
- package/dist/src/tools/agent-package-discovery.test.js +90 -0
- package/dist/src/tools/agent-package-discovery.test.js.map +1 -0
- package/dist/src/tools/builtin/ask-choice.d.ts +8 -0
- package/dist/src/tools/builtin/ask-choice.js +54 -0
- package/dist/src/tools/builtin/ask-choice.js.map +1 -0
- package/dist/src/tools/context.d.ts +154 -0
- package/dist/src/tools/context.js +30 -0
- package/dist/src/tools/context.js.map +1 -0
- package/dist/src/tools/custom-tool-adapter.d.ts +33 -2
- package/dist/src/tools/custom-tool-adapter.js +38 -1
- package/dist/src/tools/custom-tool-adapter.js.map +1 -1
- package/dist/src/tools/custom-tool-adapter.test.js +48 -0
- package/dist/src/tools/custom-tool-adapter.test.js.map +1 -1
- package/dist/src/tools/fetch-url-tool.js +2 -0
- package/dist/src/tools/fetch-url-tool.js.map +1 -1
- package/dist/src/tools/file-tools.js +16 -0
- package/dist/src/tools/file-tools.js.map +1 -1
- package/dist/src/tools/fs/local.test.d.ts +6 -0
- package/dist/src/tools/fs/local.test.js +126 -0
- package/dist/src/tools/fs/local.test.js.map +1 -0
- package/dist/src/tools/index.d.ts +35 -0
- package/dist/src/tools/index.js +11 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/mcp-tool-adapter.js +2 -0
- package/dist/src/tools/mcp-tool-adapter.js.map +1 -1
- package/dist/src/tools/memory-tool.js +23 -1
- package/dist/src/tools/memory-tool.js.map +1 -1
- package/dist/src/tools/permissions.d.ts +36 -0
- package/dist/src/tools/permissions.js +97 -0
- package/dist/src/tools/permissions.js.map +1 -0
- package/dist/src/tools/permissions.test.d.ts +6 -0
- package/dist/src/tools/permissions.test.js +62 -0
- package/dist/src/tools/permissions.test.js.map +1 -0
- package/dist/src/tools/request-tool.js +2 -0
- package/dist/src/tools/request-tool.js.map +1 -1
- package/dist/src/tools/sdk-context.d.ts +43 -0
- package/dist/src/tools/sdk-context.js +94 -0
- package/dist/src/tools/sdk-context.js.map +1 -0
- package/dist/src/tools/sdk-context.test.d.ts +6 -0
- package/dist/src/tools/sdk-context.test.js +134 -0
- package/dist/src/tools/sdk-context.test.js.map +1 -0
- package/dist/src/tools/store-tools.js +6 -0
- package/dist/src/tools/store-tools.js.map +1 -1
- package/dist/src/tools/types.d.ts +53 -14
- package/dist/src/tools/web-search-tool.js +2 -0
- package/dist/src/tools/web-search-tool.js.map +1 -1
- package/dist/src/types.d.ts +164 -28
- package/dist/src/types.js +9 -3
- package/dist/src/types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -4
- package/dist/src/tools/agent-config-tool.d.ts +0 -7
- package/dist/src/tools/agent-config-tool.js +0 -78
- package/dist/src/tools/agent-config-tool.js.map +0 -1
- package/dist/src/tools/collect-secret-tool.d.ts +0 -7
- package/dist/src/tools/collect-secret-tool.js +0 -47
- package/dist/src/tools/collect-secret-tool.js.map +0 -1
- package/dist/src/tools/fs/http.d.ts +0 -37
- package/dist/src/tools/fs/http.js +0 -88
- package/dist/src/tools/fs/http.js.map +0 -1
- package/dist/src/tools/http-file-tools.d.ts +0 -13
- package/dist/src/tools/http-file-tools.js +0 -146
- package/dist/src/tools/http-file-tools.js.map +0 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolPermission } from './context.js';
|
|
7
|
+
/**
|
|
8
|
+
* Result of reading a package's permission declaration. Carries the
|
|
9
|
+
* package name alongside the permissions so `PermissionError` can name
|
|
10
|
+
* the offending package without a separate lookup.
|
|
11
|
+
*/
|
|
12
|
+
export interface PackagePermissions {
|
|
13
|
+
packageName: string;
|
|
14
|
+
permissions: ToolPermission[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Load the permission declaration for an installed package.
|
|
18
|
+
*
|
|
19
|
+
* Reads `${pkgDir}/package.json` and returns the `amodal.permissions`
|
|
20
|
+
* array (filtered to known permission tiers). Missing or malformed
|
|
21
|
+
* fields collapse to an empty permissions array so the package gets
|
|
22
|
+
* default-deny behavior — the runtime never crashes because someone
|
|
23
|
+
* forgot to declare permissions, it just refuses the privileged calls.
|
|
24
|
+
*
|
|
25
|
+
* Unknown permission strings are silently dropped (logged once at load
|
|
26
|
+
* time by the caller) rather than throwing — adding a new permission
|
|
27
|
+
* tier to the SDK shouldn't require simultaneous updates to every
|
|
28
|
+
* pinned package version.
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadPackagePermissions(pkgDir: string): Promise<PackagePermissions>;
|
|
31
|
+
/**
|
|
32
|
+
* Symbolic constant for tools authored inside the user's own agent
|
|
33
|
+
* repo. These tools are trusted with the full SDK surface — sandboxing
|
|
34
|
+
* the user against their own code is not a useful threat model.
|
|
35
|
+
*/
|
|
36
|
+
export declare const LOCAL_REPO_PACKAGE: PackagePermissions;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Read `package.json#amodal.permissions` for an agent package and
|
|
8
|
+
* normalize it into a `ToolPermission[]` ready for runtime gating.
|
|
9
|
+
*
|
|
10
|
+
* Default-deny: a package that does not declare any permissions gets an
|
|
11
|
+
* empty array, and any tool inside it that reaches for a privileged
|
|
12
|
+
* `ctx.*` capability throws `PermissionError` at the boundary.
|
|
13
|
+
*
|
|
14
|
+
* Tools authored inside the user's own agent repo (i.e. not under any
|
|
15
|
+
* package) bypass the loader and run with full local-trust permissions
|
|
16
|
+
* — the user wrote the handler, sandboxing them against their own repo
|
|
17
|
+
* is not the threat model.
|
|
18
|
+
*/
|
|
19
|
+
import { readFile } from 'node:fs/promises';
|
|
20
|
+
import * as path from 'node:path';
|
|
21
|
+
const VALID_PERMISSIONS = new Set([
|
|
22
|
+
'fs.read',
|
|
23
|
+
'fs.write',
|
|
24
|
+
'db.read',
|
|
25
|
+
'db.write',
|
|
26
|
+
'net.fetch',
|
|
27
|
+
]);
|
|
28
|
+
function isToolPermission(value) {
|
|
29
|
+
return VALID_PERMISSIONS.has(value);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Load the permission declaration for an installed package.
|
|
33
|
+
*
|
|
34
|
+
* Reads `${pkgDir}/package.json` and returns the `amodal.permissions`
|
|
35
|
+
* array (filtered to known permission tiers). Missing or malformed
|
|
36
|
+
* fields collapse to an empty permissions array so the package gets
|
|
37
|
+
* default-deny behavior — the runtime never crashes because someone
|
|
38
|
+
* forgot to declare permissions, it just refuses the privileged calls.
|
|
39
|
+
*
|
|
40
|
+
* Unknown permission strings are silently dropped (logged once at load
|
|
41
|
+
* time by the caller) rather than throwing — adding a new permission
|
|
42
|
+
* tier to the SDK shouldn't require simultaneous updates to every
|
|
43
|
+
* pinned package version.
|
|
44
|
+
*/
|
|
45
|
+
export async function loadPackagePermissions(pkgDir) {
|
|
46
|
+
const pkgJsonPath = path.join(pkgDir, 'package.json');
|
|
47
|
+
let raw;
|
|
48
|
+
try {
|
|
49
|
+
raw = await readFile(pkgJsonPath, 'utf-8');
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return { packageName: path.basename(pkgDir), permissions: [] };
|
|
53
|
+
}
|
|
54
|
+
let parsed;
|
|
55
|
+
try {
|
|
56
|
+
parsed = JSON.parse(raw);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return { packageName: path.basename(pkgDir), permissions: [] };
|
|
60
|
+
}
|
|
61
|
+
if (typeof parsed !== 'object' || parsed === null) {
|
|
62
|
+
return { packageName: path.basename(pkgDir), permissions: [] };
|
|
63
|
+
}
|
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- parsing external JSON
|
|
65
|
+
const pkg = parsed;
|
|
66
|
+
const nameRaw = pkg['name'];
|
|
67
|
+
const packageName = typeof nameRaw === 'string' ? nameRaw : path.basename(pkgDir);
|
|
68
|
+
const amodalRaw = pkg['amodal'];
|
|
69
|
+
if (typeof amodalRaw !== 'object' || amodalRaw === null) {
|
|
70
|
+
return { packageName, permissions: [] };
|
|
71
|
+
}
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion -- parsing external JSON
|
|
73
|
+
const amodal = amodalRaw;
|
|
74
|
+
const declaredRaw = amodal['permissions'];
|
|
75
|
+
if (!Array.isArray(declaredRaw)) {
|
|
76
|
+
return { packageName, permissions: [] };
|
|
77
|
+
}
|
|
78
|
+
const permissions = [];
|
|
79
|
+
for (const entry of declaredRaw) {
|
|
80
|
+
if (typeof entry !== 'string')
|
|
81
|
+
continue;
|
|
82
|
+
const candidate = isToolPermission(entry) ? entry : undefined;
|
|
83
|
+
if (candidate)
|
|
84
|
+
permissions.push(candidate);
|
|
85
|
+
}
|
|
86
|
+
return { packageName, permissions };
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Symbolic constant for tools authored inside the user's own agent
|
|
90
|
+
* repo. These tools are trusted with the full SDK surface — sandboxing
|
|
91
|
+
* the user against their own code is not a useful threat model.
|
|
92
|
+
*/
|
|
93
|
+
export const LOCAL_REPO_PACKAGE = {
|
|
94
|
+
packageName: '<local-repo>',
|
|
95
|
+
permissions: ['fs.read', 'fs.write', 'db.read', 'db.write', 'net.fetch'],
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../src/tools/permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
7
|
+
import { tmpdir } from 'node:os';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
10
|
+
import { loadPackagePermissions } from './permissions.js';
|
|
11
|
+
describe('loadPackagePermissions', () => {
|
|
12
|
+
let pkgDir;
|
|
13
|
+
beforeEach(async () => {
|
|
14
|
+
pkgDir = await mkdtemp(path.join(tmpdir(), 'pkg-perms-'));
|
|
15
|
+
});
|
|
16
|
+
afterEach(async () => {
|
|
17
|
+
await rm(pkgDir, { recursive: true, force: true });
|
|
18
|
+
});
|
|
19
|
+
async function writePkg(content) {
|
|
20
|
+
await writeFile(path.join(pkgDir, 'package.json'), JSON.stringify(content), 'utf-8');
|
|
21
|
+
}
|
|
22
|
+
it('returns an empty permission list when package.json is missing', async () => {
|
|
23
|
+
const result = await loadPackagePermissions(pkgDir);
|
|
24
|
+
expect(result.permissions).toEqual([]);
|
|
25
|
+
});
|
|
26
|
+
it('returns an empty permission list when amodal block is missing', async () => {
|
|
27
|
+
await writePkg({ name: '@amodalai/test' });
|
|
28
|
+
const result = await loadPackagePermissions(pkgDir);
|
|
29
|
+
expect(result).toEqual({ packageName: '@amodalai/test', permissions: [] });
|
|
30
|
+
});
|
|
31
|
+
it('parses declared permissions', async () => {
|
|
32
|
+
await writePkg({
|
|
33
|
+
name: '@amodalai/agent-admin',
|
|
34
|
+
amodal: { permissions: ['fs.read', 'fs.write', 'db.read', 'db.write'] },
|
|
35
|
+
});
|
|
36
|
+
const result = await loadPackagePermissions(pkgDir);
|
|
37
|
+
expect(result).toEqual({
|
|
38
|
+
packageName: '@amodalai/agent-admin',
|
|
39
|
+
permissions: ['fs.read', 'fs.write', 'db.read', 'db.write'],
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
it('drops unknown permission strings', async () => {
|
|
43
|
+
await writePkg({
|
|
44
|
+
name: '@amodalai/sketchy',
|
|
45
|
+
amodal: { permissions: ['fs.read', 'secrets.write', 'unknown'] },
|
|
46
|
+
});
|
|
47
|
+
const result = await loadPackagePermissions(pkgDir);
|
|
48
|
+
expect(result.permissions).toEqual(['fs.read']);
|
|
49
|
+
});
|
|
50
|
+
it('falls back to dirname when name is missing', async () => {
|
|
51
|
+
await writePkg({ amodal: { permissions: ['net.fetch'] } });
|
|
52
|
+
const result = await loadPackagePermissions(pkgDir);
|
|
53
|
+
expect(result.packageName).toBe(path.basename(pkgDir));
|
|
54
|
+
expect(result.permissions).toEqual(['net.fetch']);
|
|
55
|
+
});
|
|
56
|
+
it('returns empty on malformed JSON', async () => {
|
|
57
|
+
await writeFile(path.join(pkgDir, 'package.json'), 'not json', 'utf-8');
|
|
58
|
+
const result = await loadPackagePermissions(pkgDir);
|
|
59
|
+
expect(result.permissions).toEqual([]);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=permissions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.test.js","sourceRoot":"","sources":["../../../src/tools/permissions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,6 +87,8 @@ export function createRequestTool(options) {
|
|
|
87
87
|
parameters: RequestParamsSchema,
|
|
88
88
|
readOnly: false,
|
|
89
89
|
metadata: { category: 'connection' },
|
|
90
|
+
runningLabel: 'Calling {{connection}}',
|
|
91
|
+
completedLabel: 'Called {{connection}}',
|
|
90
92
|
async execute(params, ctx) {
|
|
91
93
|
const { connection, method, endpoint, data, headers: extraHeaders, intent } = params;
|
|
92
94
|
// Resolve connection config
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-tool.js","sourceRoot":"","sources":["../../../src/tools/request-tool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"request-tool.js","sourceRoot":"","sources":["../../../src/tools/request-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Factory that assembles a permission-gated `ToolContext` for a custom
|
|
8
|
+
* tool handler. Subsequent phases (validation probes, setup_state,
|
|
9
|
+
* proposal card, etc.) call this to bridge the runtime's session state
|
|
10
|
+
* to the SDK shape handlers consume.
|
|
11
|
+
*
|
|
12
|
+
* Permission enforcement happens here at the `ctx.*` boundary —
|
|
13
|
+
* `ctx.fs.writeRepoFile` checks `fs.write`, `ctx.db.execute` checks
|
|
14
|
+
* `db.write`, etc. The check throws `PermissionError` synchronously
|
|
15
|
+
* before invoking the underlying backend, so the offending package
|
|
16
|
+
* cannot side-effect anything just by being called.
|
|
17
|
+
*/
|
|
18
|
+
import { type EmitEvent, type ToolContext, type ToolDbHandle } from './context.js';
|
|
19
|
+
import type { FsBackend } from './fs/index.js';
|
|
20
|
+
import type { PackagePermissions } from './permissions.js';
|
|
21
|
+
export interface CreateSdkToolContextOptions {
|
|
22
|
+
agentId: string;
|
|
23
|
+
scopeId: string;
|
|
24
|
+
scopeContext?: Record<string, string>;
|
|
25
|
+
sessionId: string;
|
|
26
|
+
signal: AbortSignal;
|
|
27
|
+
toolName: string;
|
|
28
|
+
packagePermissions: PackagePermissions;
|
|
29
|
+
fs: FsBackend;
|
|
30
|
+
db: ToolDbHandle;
|
|
31
|
+
fetch: typeof globalThis.fetch;
|
|
32
|
+
emit: (event: EmitEvent) => void;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Build the SDK `ToolContext` a handler receives.
|
|
36
|
+
*
|
|
37
|
+
* The returned `ctx.fs`, `ctx.db`, and `ctx.fetch` are wrappers that
|
|
38
|
+
* enforce permissions before delegating to the underlying backend.
|
|
39
|
+
* `ctx.emit`, `ctx.log`, and the identity fields are unconditional —
|
|
40
|
+
* every handler can produce log lines and inline blocks regardless of
|
|
41
|
+
* declared permissions.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createSdkToolContext(opts: CreateSdkToolContextOptions): ToolContext;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Factory that assembles a permission-gated `ToolContext` for a custom
|
|
8
|
+
* tool handler. Subsequent phases (validation probes, setup_state,
|
|
9
|
+
* proposal card, etc.) call this to bridge the runtime's session state
|
|
10
|
+
* to the SDK shape handlers consume.
|
|
11
|
+
*
|
|
12
|
+
* Permission enforcement happens here at the `ctx.*` boundary —
|
|
13
|
+
* `ctx.fs.writeRepoFile` checks `fs.write`, `ctx.db.execute` checks
|
|
14
|
+
* `db.write`, etc. The check throws `PermissionError` synchronously
|
|
15
|
+
* before invoking the underlying backend, so the offending package
|
|
16
|
+
* cannot side-effect anything just by being called.
|
|
17
|
+
*/
|
|
18
|
+
import { PermissionError, } from './context.js';
|
|
19
|
+
/**
|
|
20
|
+
* Build the SDK `ToolContext` a handler receives.
|
|
21
|
+
*
|
|
22
|
+
* The returned `ctx.fs`, `ctx.db`, and `ctx.fetch` are wrappers that
|
|
23
|
+
* enforce permissions before delegating to the underlying backend.
|
|
24
|
+
* `ctx.emit`, `ctx.log`, and the identity fields are unconditional —
|
|
25
|
+
* every handler can produce log lines and inline blocks regardless of
|
|
26
|
+
* declared permissions.
|
|
27
|
+
*/
|
|
28
|
+
export function createSdkToolContext(opts) {
|
|
29
|
+
const declared = new Set(opts.packagePermissions.permissions);
|
|
30
|
+
function checkPermission(permission) {
|
|
31
|
+
if (declared.has(permission))
|
|
32
|
+
return;
|
|
33
|
+
throw new PermissionError(opts.toolName, permission, opts.packagePermissions.packageName);
|
|
34
|
+
}
|
|
35
|
+
const gatedFs = {
|
|
36
|
+
async readRepoFile(repoPath) {
|
|
37
|
+
checkPermission('fs.read');
|
|
38
|
+
return opts.fs.readRepoFile(repoPath);
|
|
39
|
+
},
|
|
40
|
+
async writeRepoFile(repoPath, content) {
|
|
41
|
+
checkPermission('fs.write');
|
|
42
|
+
return opts.fs.writeRepoFile(repoPath, content);
|
|
43
|
+
},
|
|
44
|
+
async readManyRepoFiles(repoPaths) {
|
|
45
|
+
checkPermission('fs.read');
|
|
46
|
+
return opts.fs.readManyRepoFiles(repoPaths);
|
|
47
|
+
},
|
|
48
|
+
async listRepoFiles(repoPath) {
|
|
49
|
+
checkPermission('fs.read');
|
|
50
|
+
return opts.fs.listRepoFiles(repoPath);
|
|
51
|
+
},
|
|
52
|
+
async deleteRepoFile(repoPath) {
|
|
53
|
+
checkPermission('fs.write');
|
|
54
|
+
return opts.fs.deleteRepoFile(repoPath);
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
const gatedDb = {
|
|
58
|
+
async execute(query) {
|
|
59
|
+
// Require both tiers — `execute` accepts arbitrary SQL and we
|
|
60
|
+
// can't reliably distinguish read from write without parsing.
|
|
61
|
+
// Phase B can split into `query()` / `mutate()` if SDK consumers
|
|
62
|
+
// need finer grain.
|
|
63
|
+
checkPermission('db.read');
|
|
64
|
+
checkPermission('db.write');
|
|
65
|
+
return opts.db.execute(query);
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
const gatedFetch = async (input, init) => {
|
|
69
|
+
checkPermission('net.fetch');
|
|
70
|
+
const merged = init ? { ...init } : {};
|
|
71
|
+
// Inject the tool's abort signal when the caller didn't pass one,
|
|
72
|
+
// so outbound requests cancel with the tool invocation.
|
|
73
|
+
if (!merged.signal)
|
|
74
|
+
merged.signal = opts.signal;
|
|
75
|
+
return opts.fetch(input, merged);
|
|
76
|
+
};
|
|
77
|
+
const ctx = {
|
|
78
|
+
agentId: opts.agentId,
|
|
79
|
+
scopeId: opts.scopeId,
|
|
80
|
+
sessionId: opts.sessionId,
|
|
81
|
+
signal: opts.signal,
|
|
82
|
+
emit: opts.emit,
|
|
83
|
+
log(message) {
|
|
84
|
+
opts.emit({ type: 'text', text: message });
|
|
85
|
+
},
|
|
86
|
+
fs: gatedFs,
|
|
87
|
+
db: gatedDb,
|
|
88
|
+
fetch: gatedFetch,
|
|
89
|
+
};
|
|
90
|
+
if (opts.scopeContext)
|
|
91
|
+
ctx.scopeContext = opts.scopeContext;
|
|
92
|
+
return ctx;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=sdk-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-context.js","sourceRoot":"","sources":["../../../src/tools/sdk-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
7
|
+
import { PermissionError } from './context.js';
|
|
8
|
+
import { createSdkToolContext } from './sdk-context.js';
|
|
9
|
+
function makeFsBackend() {
|
|
10
|
+
return {
|
|
11
|
+
readRepoFile: vi.fn().mockResolvedValue('content'),
|
|
12
|
+
writeRepoFile: vi.fn().mockResolvedValue(undefined),
|
|
13
|
+
readManyRepoFiles: vi.fn().mockResolvedValue([]),
|
|
14
|
+
listRepoFiles: vi.fn().mockResolvedValue({ directories: [], files: [] }),
|
|
15
|
+
deleteRepoFile: vi.fn().mockResolvedValue(undefined),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function makeDb() {
|
|
19
|
+
return { execute: vi.fn().mockResolvedValue([]) };
|
|
20
|
+
}
|
|
21
|
+
function buildCtx(opts) {
|
|
22
|
+
const fs = makeFsBackend();
|
|
23
|
+
const db = makeDb();
|
|
24
|
+
const fetch = vi.fn().mockResolvedValue(new Response(null));
|
|
25
|
+
const emit = vi.fn();
|
|
26
|
+
const ctx = createSdkToolContext({
|
|
27
|
+
agentId: 'agent_1',
|
|
28
|
+
scopeId: '',
|
|
29
|
+
sessionId: 'sess_1',
|
|
30
|
+
signal: new AbortController().signal,
|
|
31
|
+
toolName: 'test_tool',
|
|
32
|
+
packagePermissions: { packageName: '@amodalai/agent-admin', permissions: opts.permissions },
|
|
33
|
+
fs,
|
|
34
|
+
db,
|
|
35
|
+
fetch: fetch,
|
|
36
|
+
emit,
|
|
37
|
+
});
|
|
38
|
+
return { ctx, emit, fs, db, fetch };
|
|
39
|
+
}
|
|
40
|
+
describe('createSdkToolContext', () => {
|
|
41
|
+
describe('identity fields', () => {
|
|
42
|
+
it('exposes agentId / scopeId / sessionId verbatim', () => {
|
|
43
|
+
const { ctx } = buildCtx({ permissions: [] });
|
|
44
|
+
expect(ctx.agentId).toBe('agent_1');
|
|
45
|
+
expect(ctx.scopeId).toBe('');
|
|
46
|
+
expect(ctx.sessionId).toBe('sess_1');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('emit + log', () => {
|
|
50
|
+
it('forwards emit calls', () => {
|
|
51
|
+
const { ctx, emit } = buildCtx({ permissions: [] });
|
|
52
|
+
const event = { type: 'text', text: 'hi' };
|
|
53
|
+
ctx.emit(event);
|
|
54
|
+
expect(emit).toHaveBeenCalledWith(event);
|
|
55
|
+
});
|
|
56
|
+
it('log() emits a text event', () => {
|
|
57
|
+
const { ctx, emit } = buildCtx({ permissions: [] });
|
|
58
|
+
ctx.log('hello');
|
|
59
|
+
expect(emit).toHaveBeenCalledWith({ type: 'text', text: 'hello' });
|
|
60
|
+
});
|
|
61
|
+
it('emit and log work without any permissions declared', () => {
|
|
62
|
+
const { ctx } = buildCtx({ permissions: [] });
|
|
63
|
+
expect(() => ctx.log('no perms needed')).not.toThrow();
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('fs gating', () => {
|
|
67
|
+
it('readRepoFile throws PermissionError without fs.read', async () => {
|
|
68
|
+
const { ctx } = buildCtx({ permissions: [] });
|
|
69
|
+
await expect(ctx.fs.readRepoFile('a.txt')).rejects.toBeInstanceOf(PermissionError);
|
|
70
|
+
});
|
|
71
|
+
it('readRepoFile passes with fs.read', async () => {
|
|
72
|
+
const { ctx, fs } = buildCtx({ permissions: ['fs.read'] });
|
|
73
|
+
const content = await ctx.fs.readRepoFile('a.txt');
|
|
74
|
+
expect(content).toBe('content');
|
|
75
|
+
expect(fs.readRepoFile).toHaveBeenCalledWith('a.txt');
|
|
76
|
+
});
|
|
77
|
+
it('writeRepoFile throws without fs.write even if fs.read is granted', async () => {
|
|
78
|
+
const { ctx } = buildCtx({ permissions: ['fs.read'] });
|
|
79
|
+
await expect(ctx.fs.writeRepoFile('a.txt', 'x')).rejects.toBeInstanceOf(PermissionError);
|
|
80
|
+
});
|
|
81
|
+
it('listRepoFiles requires fs.read', async () => {
|
|
82
|
+
const { ctx } = buildCtx({ permissions: [] });
|
|
83
|
+
await expect(ctx.fs.listRepoFiles('.')).rejects.toBeInstanceOf(PermissionError);
|
|
84
|
+
});
|
|
85
|
+
it('deleteRepoFile requires fs.write', async () => {
|
|
86
|
+
const { ctx } = buildCtx({ permissions: ['fs.read'] });
|
|
87
|
+
await expect(ctx.fs.deleteRepoFile('a.txt')).rejects.toBeInstanceOf(PermissionError);
|
|
88
|
+
});
|
|
89
|
+
it('PermissionError names the tool, package, and missing permission', async () => {
|
|
90
|
+
const { ctx } = buildCtx({ permissions: [] });
|
|
91
|
+
await expect(ctx.fs.readRepoFile('a.txt')).rejects.toMatchObject({
|
|
92
|
+
toolName: 'test_tool',
|
|
93
|
+
packageName: '@amodalai/agent-admin',
|
|
94
|
+
permission: 'fs.read',
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
describe('db gating', () => {
|
|
99
|
+
it('execute throws without db.write', async () => {
|
|
100
|
+
const { ctx } = buildCtx({ permissions: ['db.read'] });
|
|
101
|
+
await expect(ctx.db.execute({ sql: 'SELECT 1' })).rejects.toBeInstanceOf(PermissionError);
|
|
102
|
+
});
|
|
103
|
+
it('execute passes with db.read + db.write', async () => {
|
|
104
|
+
const { ctx, db } = buildCtx({ permissions: ['db.read', 'db.write'] });
|
|
105
|
+
await ctx.db.execute({ sql: 'SELECT 1' });
|
|
106
|
+
expect(db.execute).toHaveBeenCalled();
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
describe('fetch gating', () => {
|
|
110
|
+
it('throws without net.fetch', async () => {
|
|
111
|
+
const { ctx } = buildCtx({ permissions: [] });
|
|
112
|
+
await expect(ctx.fetch('https://example.com')).rejects.toBeInstanceOf(PermissionError);
|
|
113
|
+
});
|
|
114
|
+
it('forwards through underlying fetch when granted', async () => {
|
|
115
|
+
const { ctx, fetch } = buildCtx({ permissions: ['net.fetch'] });
|
|
116
|
+
await ctx.fetch('https://example.com');
|
|
117
|
+
expect(fetch).toHaveBeenCalled();
|
|
118
|
+
});
|
|
119
|
+
it('injects ctx.signal when caller did not pass one', async () => {
|
|
120
|
+
const { ctx, fetch } = buildCtx({ permissions: ['net.fetch'] });
|
|
121
|
+
await ctx.fetch('https://example.com');
|
|
122
|
+
const init = fetch.mock.calls[0][1];
|
|
123
|
+
expect(init.signal).toBe(ctx.signal);
|
|
124
|
+
});
|
|
125
|
+
it('respects an explicit signal when caller passes one', async () => {
|
|
126
|
+
const { ctx, fetch } = buildCtx({ permissions: ['net.fetch'] });
|
|
127
|
+
const explicit = new AbortController().signal;
|
|
128
|
+
await ctx.fetch('https://example.com', { signal: explicit });
|
|
129
|
+
const init = fetch.mock.calls[0][1];
|
|
130
|
+
expect(init.signal).toBe(explicit);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=sdk-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-context.test.js","sourceRoot":"","sources":["../../../src/tools/sdk-context.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,6 +120,8 @@ export function createStoreWriteTool(store, backend, appId) {
|
|
|
120
120
|
parameters: entitySchema,
|
|
121
121
|
readOnly: false,
|
|
122
122
|
metadata: { category: 'store' },
|
|
123
|
+
runningLabel: `Saving to ${store.name}`,
|
|
124
|
+
completedLabel: `Saved to ${store.name}`,
|
|
123
125
|
async execute(params, ctx) {
|
|
124
126
|
const key = resolveKey(store.entity.key, params);
|
|
125
127
|
const result = await backend.put(appId, ctx.scopeId, store.name, key, params, {});
|
|
@@ -142,6 +144,8 @@ export function createStoreBatchTool(store, backend, appId) {
|
|
|
142
144
|
}),
|
|
143
145
|
readOnly: false,
|
|
144
146
|
metadata: { category: 'store' },
|
|
147
|
+
runningLabel: `Saving to ${store.name}`,
|
|
148
|
+
completedLabel: `Saved to ${store.name}`,
|
|
145
149
|
async execute(params, ctx) {
|
|
146
150
|
let stored = 0;
|
|
147
151
|
let failed = 0;
|
|
@@ -189,6 +193,8 @@ export function createStoreQueryTool(stores, backend, appId) {
|
|
|
189
193
|
}),
|
|
190
194
|
readOnly: true,
|
|
191
195
|
metadata: { category: 'store' },
|
|
196
|
+
runningLabel: 'Looking up {{store}}',
|
|
197
|
+
completedLabel: 'Looked up {{store}}',
|
|
192
198
|
async execute(params, ctx) {
|
|
193
199
|
if (params.key) {
|
|
194
200
|
const doc = await backend.get(appId, ctx.scopeId, params.store, params.key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-tools.js","sourceRoot":"","sources":["../../../src/tools/store-tools.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"store-tools.js","sourceRoot":"","sources":["../../../src/tools/store-tools.ts"],"names":[],"mappings":"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"}
|