@amodalai/runtime 0.2.7 → 0.2.9
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/__fixtures__/smoke.test.js +6 -0
- package/dist/src/__fixtures__/smoke.test.js.map +1 -1
- package/dist/src/agent/agent-types.d.ts +6 -0
- package/dist/src/agent/local-server.js +24 -2
- package/dist/src/agent/local-server.js.map +1 -1
- package/dist/src/agent/local-server.test.js +42 -0
- package/dist/src/agent/local-server.test.js.map +1 -1
- package/dist/src/agent/routes/files.d.ts +7 -0
- package/dist/src/agent/routes/files.js +151 -2
- package/dist/src/agent/routes/files.js.map +1 -1
- package/dist/src/agent/routes/files.test.d.ts +6 -0
- package/dist/src/agent/routes/files.test.js +249 -0
- package/dist/src/agent/routes/files.test.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/role-provider.d.ts +90 -0
- package/dist/src/role-provider.js +127 -0
- package/dist/src/role-provider.js.map +1 -0
- package/dist/src/role-provider.test.d.ts +6 -0
- package/dist/src/role-provider.test.js +179 -0
- package/dist/src/role-provider.test.js.map +1 -0
- package/dist/src/routes/route-helpers.js +1 -1
- package/dist/src/routes/route-helpers.js.map +1 -1
- package/dist/src/server.d.ts +14 -0
- package/dist/src/server.js +20 -0
- package/dist/src/server.js.map +1 -1
- package/dist/src/server.test.js +84 -0
- package/dist/src/server.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -8,6 +8,50 @@ import rateLimit from 'express-rate-limit';
|
|
|
8
8
|
import { readdir, readFile, writeFile, stat, mkdir } from 'node:fs/promises';
|
|
9
9
|
import path from 'node:path';
|
|
10
10
|
import { asyncHandler } from '../../routes/route-helpers.js';
|
|
11
|
+
import { defaultRoleProvider, hasRole } from '../../role-provider.js';
|
|
12
|
+
import { createLogger } from '../../logger.js';
|
|
13
|
+
const log = createLogger({ component: 'files-router' });
|
|
14
|
+
/**
|
|
15
|
+
* Directories an admin can read and write. Anything outside this allowlist
|
|
16
|
+
* (like `connections/`, `tools/`, `evals/`, `amodal.json`) requires `ops`.
|
|
17
|
+
*
|
|
18
|
+
* The admin/ops split mirrors the persona model in the architecture doc:
|
|
19
|
+
* - admin (Sally) edits *content* — skill prompts, knowledge docs, agent personality
|
|
20
|
+
* - ops (developers) edit everything including infrastructure
|
|
21
|
+
*/
|
|
22
|
+
const ADMIN_ALLOWED_DIRS = ['skills', 'knowledge', 'agents'];
|
|
23
|
+
/**
|
|
24
|
+
* Decide whether a role can access a given file path.
|
|
25
|
+
*
|
|
26
|
+
* Rules:
|
|
27
|
+
* - `ops` can read/write anything (subject to the existing repo-traversal check)
|
|
28
|
+
* - `admin` can read/write files inside ADMIN_ALLOWED_DIRS only
|
|
29
|
+
* - `user` cannot access files at all
|
|
30
|
+
*
|
|
31
|
+
* Returns null if allowed, or an error code if denied.
|
|
32
|
+
*/
|
|
33
|
+
function checkPathAccess(filePath, role) {
|
|
34
|
+
if (role === 'ops')
|
|
35
|
+
return 'ok';
|
|
36
|
+
if (role === 'user')
|
|
37
|
+
return 'forbidden';
|
|
38
|
+
// admin: must be inside an allowed top-level directory
|
|
39
|
+
// path.normalize collapses '..' and '.' segments; we then split on the
|
|
40
|
+
// OS separator and check the first segment.
|
|
41
|
+
const normalized = path.normalize(filePath);
|
|
42
|
+
const firstSegment = normalized.split(path.sep)[0];
|
|
43
|
+
if (firstSegment && ADMIN_ALLOWED_DIRS.includes(firstSegment))
|
|
44
|
+
return 'ok';
|
|
45
|
+
return 'forbidden';
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Filter a file tree to only include directories an admin can access.
|
|
49
|
+
* Used for the GET /api/files tree response so admins don't see directory
|
|
50
|
+
* names they can't open. Ops users see the unfiltered tree.
|
|
51
|
+
*/
|
|
52
|
+
function filterTreeForAdmin(tree) {
|
|
53
|
+
return tree.filter((entry) => ADMIN_ALLOWED_DIRS.includes(entry.name));
|
|
54
|
+
}
|
|
11
55
|
/** Convention directories to show in the file tree. */
|
|
12
56
|
const CONVENTION_DIRS = ['connections', 'skills', 'knowledge', 'automations', 'agents', 'stores', 'tools', 'evals'];
|
|
13
57
|
/**
|
|
@@ -90,14 +134,94 @@ function validateFilePath(repoPath, filePath) {
|
|
|
90
134
|
export function createFilesRouter(options) {
|
|
91
135
|
const router = Router();
|
|
92
136
|
const { repoPath } = options;
|
|
137
|
+
const roleProvider = options.roleProvider ?? defaultRoleProvider;
|
|
93
138
|
const filesLimiter = rateLimit({
|
|
94
139
|
windowMs: 15 * 60 * 1000,
|
|
95
140
|
max: 100,
|
|
96
141
|
standardHeaders: true,
|
|
97
142
|
legacyHeaders: false,
|
|
98
143
|
});
|
|
144
|
+
/**
|
|
145
|
+
* Resolve the user role for a request. Returns null + sends 401/403 if the
|
|
146
|
+
* user is unauthenticated or below `user` level. Returns the role on success.
|
|
147
|
+
*
|
|
148
|
+
* We always require at least the `user` role to hit the files API — files
|
|
149
|
+
* are admin/ops surface, end-users have no business here.
|
|
150
|
+
*
|
|
151
|
+
* All auth state transitions are logged with structured context so admins
|
|
152
|
+
* filing "I can't access X" tickets have something to grep.
|
|
153
|
+
*/
|
|
154
|
+
async function resolveRoleOrDeny(req, res) {
|
|
155
|
+
let user;
|
|
156
|
+
try {
|
|
157
|
+
user = await roleProvider.resolveUser(req);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
// RoleProvider failures are infrastructure errors. Log with context and
|
|
161
|
+
// return 500 — we don't want to silently treat a broken provider as
|
|
162
|
+
// "unauthenticated" because that would leak access if the provider is
|
|
163
|
+
// misconfigured to throw on errors instead of returning null.
|
|
164
|
+
log.error('files_role_provider_failed', {
|
|
165
|
+
path: req.path,
|
|
166
|
+
method: req.method,
|
|
167
|
+
error: err instanceof Error ? err.message : String(err),
|
|
168
|
+
});
|
|
169
|
+
res.status(500).json({ error: { code: 'role_provider_failed', message: 'Failed to resolve user role' } });
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
if (!user) {
|
|
173
|
+
log.warn('files_unauthenticated', { path: req.path, method: req.method });
|
|
174
|
+
res.status(401).json({ error: { code: 'unauthenticated', message: 'Authentication required' } });
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
if (!hasRole(user, 'admin')) {
|
|
178
|
+
// user role can't access files at all
|
|
179
|
+
log.warn('files_role_denied', {
|
|
180
|
+
path: req.path,
|
|
181
|
+
method: req.method,
|
|
182
|
+
user_id: user.id,
|
|
183
|
+
current_role: user.role,
|
|
184
|
+
required_role: 'admin',
|
|
185
|
+
});
|
|
186
|
+
res.status(403).json({
|
|
187
|
+
error: {
|
|
188
|
+
code: 'forbidden',
|
|
189
|
+
message: 'Files API requires admin or ops role',
|
|
190
|
+
required_role: 'admin',
|
|
191
|
+
current_role: user.role,
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
return user.role;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Send a 403 for a per-path access denial and log the attempt with context.
|
|
200
|
+
* Used by GET and PUT handlers when an admin tries to access a file outside
|
|
201
|
+
* ADMIN_ALLOWED_DIRS.
|
|
202
|
+
*/
|
|
203
|
+
function denyPathAccess(req, res, role, filePath) {
|
|
204
|
+
log.warn('files_path_denied', {
|
|
205
|
+
path: req.path,
|
|
206
|
+
method: req.method,
|
|
207
|
+
file_path: filePath,
|
|
208
|
+
current_role: role,
|
|
209
|
+
required_role: 'ops',
|
|
210
|
+
});
|
|
211
|
+
res.status(403).json({
|
|
212
|
+
error: {
|
|
213
|
+
code: 'forbidden',
|
|
214
|
+
message: `Path '${filePath}' is not accessible to ${role}`,
|
|
215
|
+
required_role: 'ops',
|
|
216
|
+
current_role: role,
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
}
|
|
99
220
|
/** Get the repo file tree (convention directories + config). */
|
|
100
|
-
router.get('/api/files', filesLimiter, asyncHandler(async (
|
|
221
|
+
router.get('/api/files', filesLimiter, asyncHandler(async (req, res) => {
|
|
222
|
+
const role = await resolveRoleOrDeny(req, res);
|
|
223
|
+
if (!role)
|
|
224
|
+
return;
|
|
101
225
|
try {
|
|
102
226
|
const tree = [];
|
|
103
227
|
// Add .amodal/config.json
|
|
@@ -160,21 +284,34 @@ export function createFilesRouter(options) {
|
|
|
160
284
|
}
|
|
161
285
|
}
|
|
162
286
|
catch { /* config read or package scan failed, skip packages */ }
|
|
163
|
-
|
|
287
|
+
// Filter the tree by role: admins only see directories they can edit.
|
|
288
|
+
// Ops see the unfiltered tree.
|
|
289
|
+
const visibleTree = role === 'ops' ? tree : filterTreeForAdmin(tree);
|
|
290
|
+
res.json({ tree: visibleTree, repoPath });
|
|
164
291
|
}
|
|
165
292
|
catch (err) {
|
|
166
293
|
const msg = err instanceof Error ? err.message : String(err);
|
|
294
|
+
log.error('files_tree_failed', { path: req.path, error: msg });
|
|
167
295
|
res.status(500).json({ error: { code: 'FILES_FAILED', message: msg } });
|
|
168
296
|
}
|
|
169
297
|
}));
|
|
170
298
|
/** Read a file's contents. Checks local repo first, then installed packages. */
|
|
171
299
|
router.get('/api/files/*', filesLimiter, asyncHandler(async (req, res) => {
|
|
300
|
+
const role = await resolveRoleOrDeny(req, res);
|
|
301
|
+
if (!role)
|
|
302
|
+
return;
|
|
172
303
|
try {
|
|
173
304
|
const filePath = req.params[0] ?? '';
|
|
174
305
|
if (!filePath) {
|
|
175
306
|
res.status(400).json({ error: { code: 'BAD_REQUEST', message: 'File path required' } });
|
|
176
307
|
return;
|
|
177
308
|
}
|
|
309
|
+
// Role gate: admins can only read files inside ADMIN_ALLOWED_DIRS.
|
|
310
|
+
// Ops can read anything inside the repo.
|
|
311
|
+
if (checkPathAccess(filePath, role) === 'forbidden') {
|
|
312
|
+
denyPathAccess(req, res, role, filePath);
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
178
315
|
const resolved = validateFilePath(repoPath, filePath);
|
|
179
316
|
if (!resolved) {
|
|
180
317
|
res.status(403).json({ error: { code: 'FORBIDDEN', message: 'Path outside repo' } });
|
|
@@ -221,17 +358,27 @@ export function createFilesRouter(options) {
|
|
|
221
358
|
}
|
|
222
359
|
catch (err) {
|
|
223
360
|
const msg = err instanceof Error ? err.message : String(err);
|
|
361
|
+
log.error('files_read_failed', { file_path: req.params[0] ?? '', error: msg });
|
|
224
362
|
res.status(500).json({ error: { code: 'READ_FAILED', message: msg } });
|
|
225
363
|
}
|
|
226
364
|
}));
|
|
227
365
|
/** Write a file's contents. Creates parent dirs if needed. */
|
|
228
366
|
router.put('/api/files/*', filesLimiter, asyncHandler(async (req, res) => {
|
|
367
|
+
const role = await resolveRoleOrDeny(req, res);
|
|
368
|
+
if (!role)
|
|
369
|
+
return;
|
|
229
370
|
try {
|
|
230
371
|
const filePath = req.params[0] ?? '';
|
|
231
372
|
if (!filePath) {
|
|
232
373
|
res.status(400).json({ error: { code: 'BAD_REQUEST', message: 'File path required' } });
|
|
233
374
|
return;
|
|
234
375
|
}
|
|
376
|
+
// Role gate: admins can only write files inside ADMIN_ALLOWED_DIRS.
|
|
377
|
+
// Ops can write anything inside the repo.
|
|
378
|
+
if (checkPathAccess(filePath, role) === 'forbidden') {
|
|
379
|
+
denyPathAccess(req, res, role, filePath);
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
235
382
|
const resolved = validateFilePath(repoPath, filePath);
|
|
236
383
|
if (!resolved) {
|
|
237
384
|
res.status(403).json({ error: { code: 'FORBIDDEN', message: 'Path outside repo' } });
|
|
@@ -247,10 +394,12 @@ export function createFilesRouter(options) {
|
|
|
247
394
|
// Create parent directories if needed
|
|
248
395
|
await mkdir(path.dirname(resolved), { recursive: true });
|
|
249
396
|
await writeFile(resolved, content, 'utf-8');
|
|
397
|
+
log.info('files_write_succeeded', { file_path: filePath });
|
|
250
398
|
res.json({ path: filePath, saved: true });
|
|
251
399
|
}
|
|
252
400
|
catch (err) {
|
|
253
401
|
const msg = err instanceof Error ? err.message : String(err);
|
|
402
|
+
log.error('files_write_failed', { file_path: req.params[0] ?? '', error: msg });
|
|
254
403
|
res.status(500).json({ error: { code: 'WRITE_FAILED', message: msg } });
|
|
255
404
|
}
|
|
256
405
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../../src/agent/routes/files.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../../src/agent/routes/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Amodal Labs, Inc.
|
|
4
|
+
* SPDX-License-Identifier: MIT
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Tests for the role-gated /api/files routes.
|
|
8
|
+
*
|
|
9
|
+
* Verifies that:
|
|
10
|
+
* - Default behavior (no roleProvider) lets everyone read/write everything
|
|
11
|
+
* - admin role can read/write skills/, knowledge/, agents/ only
|
|
12
|
+
* - admin role gets a filtered tree (no connections/, tools/, etc.)
|
|
13
|
+
* - admin role gets 403 trying to read or write outside the allowlist
|
|
14
|
+
* - user role is denied entirely
|
|
15
|
+
* - ops role can do anything
|
|
16
|
+
* - Unauthenticated requests get 401
|
|
17
|
+
*/
|
|
18
|
+
import { describe, it, expect, beforeEach, afterAll, vi } from 'vitest';
|
|
19
|
+
import express from 'express';
|
|
20
|
+
import request from 'supertest';
|
|
21
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from 'node:fs';
|
|
22
|
+
import { join } from 'node:path';
|
|
23
|
+
import { tmpdir } from 'node:os';
|
|
24
|
+
import { createFilesRouter } from './files.js';
|
|
25
|
+
import { errorHandler } from '../../middleware/error-handler.js';
|
|
26
|
+
// Each test gets a fresh repo via beforeEach. We don't reuse a single repo
|
|
27
|
+
// across tests because PUT tests would otherwise mutate state that other
|
|
28
|
+
// tests read.
|
|
29
|
+
let TEST_REPO;
|
|
30
|
+
const allRepos = [];
|
|
31
|
+
function setupRepo(repoPath) {
|
|
32
|
+
mkdirSync(join(repoPath, 'skills', 'pricing'), { recursive: true });
|
|
33
|
+
writeFileSync(join(repoPath, 'skills', 'pricing', 'SKILL.md'), '# Pricing skill');
|
|
34
|
+
mkdirSync(join(repoPath, 'knowledge'), { recursive: true });
|
|
35
|
+
writeFileSync(join(repoPath, 'knowledge', 'returns.md'), '# Return policy');
|
|
36
|
+
mkdirSync(join(repoPath, 'agents'), { recursive: true });
|
|
37
|
+
writeFileSync(join(repoPath, 'agents', 'main.md'), '# Main agent');
|
|
38
|
+
mkdirSync(join(repoPath, 'connections', 'salesforce'), { recursive: true });
|
|
39
|
+
writeFileSync(join(repoPath, 'connections', 'salesforce', 'spec.json'), '{}');
|
|
40
|
+
mkdirSync(join(repoPath, 'tools', 'lookup'), { recursive: true });
|
|
41
|
+
writeFileSync(join(repoPath, 'tools', 'lookup', 'tool.json'), '{}');
|
|
42
|
+
}
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
vi.clearAllMocks();
|
|
45
|
+
TEST_REPO = mkdtempSync(join(tmpdir(), 'amodal-files-test-'));
|
|
46
|
+
allRepos.push(TEST_REPO);
|
|
47
|
+
setupRepo(TEST_REPO);
|
|
48
|
+
});
|
|
49
|
+
afterAll(() => {
|
|
50
|
+
for (const repo of allRepos) {
|
|
51
|
+
rmSync(repo, { recursive: true, force: true });
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
function makeProvider(user) {
|
|
55
|
+
return {
|
|
56
|
+
async resolveUser() {
|
|
57
|
+
return user;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function makeApp(roleProvider) {
|
|
62
|
+
const app = express();
|
|
63
|
+
app.use(express.json());
|
|
64
|
+
app.use(createFilesRouter({ repoPath: TEST_REPO, roleProvider }));
|
|
65
|
+
app.use(errorHandler);
|
|
66
|
+
return app;
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Default (no roleProvider) — backwards compatible behavior
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
describe('createFilesRouter — default (no roleProvider)', () => {
|
|
72
|
+
it('GET /api/files returns the unfiltered tree (everyone is ops by default)', async () => {
|
|
73
|
+
const res = await request(makeApp()).get('/api/files');
|
|
74
|
+
expect(res.status).toBe(200);
|
|
75
|
+
const dirs = res.body.tree.map((e) => e.name);
|
|
76
|
+
expect(dirs).toEqual(expect.arrayContaining(['skills', 'knowledge', 'agents', 'connections', 'tools']));
|
|
77
|
+
});
|
|
78
|
+
it('GET /api/files/skills/pricing/SKILL.md reads the file', async () => {
|
|
79
|
+
const res = await request(makeApp()).get('/api/files/skills/pricing/SKILL.md');
|
|
80
|
+
expect(res.status).toBe(200);
|
|
81
|
+
expect(res.body.content).toBe('# Pricing skill');
|
|
82
|
+
});
|
|
83
|
+
it('GET /api/files/connections/salesforce/spec.json reads the file (ops can read anything)', async () => {
|
|
84
|
+
const res = await request(makeApp()).get('/api/files/connections/salesforce/spec.json');
|
|
85
|
+
expect(res.status).toBe(200);
|
|
86
|
+
expect(res.body.content).toBe('{}');
|
|
87
|
+
});
|
|
88
|
+
it('PUT /api/files/skills/new/SKILL.md writes the file', async () => {
|
|
89
|
+
const res = await request(makeApp())
|
|
90
|
+
.put('/api/files/skills/new/SKILL.md')
|
|
91
|
+
.send({ content: '# New skill' });
|
|
92
|
+
expect(res.status).toBe(200);
|
|
93
|
+
expect(res.body.saved).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// admin role
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
describe('createFilesRouter — admin role', () => {
|
|
100
|
+
const adminProvider = makeProvider({ id: 'sally@acme.com', role: 'admin' });
|
|
101
|
+
it('GET /api/files returns a tree filtered to skills/knowledge/agents only', async () => {
|
|
102
|
+
const res = await request(makeApp(adminProvider)).get('/api/files');
|
|
103
|
+
expect(res.status).toBe(200);
|
|
104
|
+
const dirs = res.body.tree.map((e) => e.name);
|
|
105
|
+
expect(dirs).toEqual(expect.arrayContaining(['skills', 'knowledge', 'agents']));
|
|
106
|
+
expect(dirs).not.toContain('connections');
|
|
107
|
+
expect(dirs).not.toContain('tools');
|
|
108
|
+
});
|
|
109
|
+
it('admin can read skills/', async () => {
|
|
110
|
+
const res = await request(makeApp(adminProvider)).get('/api/files/skills/pricing/SKILL.md');
|
|
111
|
+
expect(res.status).toBe(200);
|
|
112
|
+
expect(res.body.content).toBe('# Pricing skill');
|
|
113
|
+
});
|
|
114
|
+
it('admin can read knowledge/', async () => {
|
|
115
|
+
const res = await request(makeApp(adminProvider)).get('/api/files/knowledge/returns.md');
|
|
116
|
+
expect(res.status).toBe(200);
|
|
117
|
+
expect(res.body.content).toBe('# Return policy');
|
|
118
|
+
});
|
|
119
|
+
it('admin can read agents/', async () => {
|
|
120
|
+
const res = await request(makeApp(adminProvider)).get('/api/files/agents/main.md');
|
|
121
|
+
expect(res.status).toBe(200);
|
|
122
|
+
expect(res.body.content).toBe('# Main agent');
|
|
123
|
+
});
|
|
124
|
+
it('admin gets 403 reading connections/', async () => {
|
|
125
|
+
const res = await request(makeApp(adminProvider)).get('/api/files/connections/salesforce/spec.json');
|
|
126
|
+
expect(res.status).toBe(403);
|
|
127
|
+
expect(res.body.error.code).toBe('forbidden');
|
|
128
|
+
expect(res.body.error.current_role).toBe('admin');
|
|
129
|
+
expect(res.body.error.required_role).toBe('ops');
|
|
130
|
+
});
|
|
131
|
+
it('admin gets 403 reading tools/', async () => {
|
|
132
|
+
const res = await request(makeApp(adminProvider)).get('/api/files/tools/lookup/tool.json');
|
|
133
|
+
expect(res.status).toBe(403);
|
|
134
|
+
expect(res.body.error.code).toBe('forbidden');
|
|
135
|
+
});
|
|
136
|
+
it('admin can write to skills/', async () => {
|
|
137
|
+
const res = await request(makeApp(adminProvider))
|
|
138
|
+
.put('/api/files/skills/admin-new/SKILL.md')
|
|
139
|
+
.send({ content: '# Admin created' });
|
|
140
|
+
expect(res.status).toBe(200);
|
|
141
|
+
expect(res.body.saved).toBe(true);
|
|
142
|
+
});
|
|
143
|
+
it('admin gets 403 writing to connections/', async () => {
|
|
144
|
+
const res = await request(makeApp(adminProvider))
|
|
145
|
+
.put('/api/files/connections/salesforce/spec.json')
|
|
146
|
+
.send({ content: '{"new": true}' });
|
|
147
|
+
expect(res.status).toBe(403);
|
|
148
|
+
expect(res.body.error.code).toBe('forbidden');
|
|
149
|
+
});
|
|
150
|
+
it('admin gets 403 writing to amodal.json', async () => {
|
|
151
|
+
const res = await request(makeApp(adminProvider))
|
|
152
|
+
.put('/api/files/amodal.json')
|
|
153
|
+
.send({ content: '{}' });
|
|
154
|
+
expect(res.status).toBe(403);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
// user role
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
describe('createFilesRouter — user role', () => {
|
|
161
|
+
const userProvider = makeProvider({ id: 'end-user', role: 'user' });
|
|
162
|
+
it('user gets 403 on tree', async () => {
|
|
163
|
+
const res = await request(makeApp(userProvider)).get('/api/files');
|
|
164
|
+
expect(res.status).toBe(403);
|
|
165
|
+
expect(res.body.error.required_role).toBe('admin');
|
|
166
|
+
expect(res.body.error.current_role).toBe('user');
|
|
167
|
+
});
|
|
168
|
+
it('user gets 403 reading any file', async () => {
|
|
169
|
+
const res = await request(makeApp(userProvider)).get('/api/files/skills/pricing/SKILL.md');
|
|
170
|
+
expect(res.status).toBe(403);
|
|
171
|
+
});
|
|
172
|
+
it('user gets 403 writing any file', async () => {
|
|
173
|
+
const res = await request(makeApp(userProvider))
|
|
174
|
+
.put('/api/files/skills/new/SKILL.md')
|
|
175
|
+
.send({ content: '# x' });
|
|
176
|
+
expect(res.status).toBe(403);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
// ops role
|
|
181
|
+
// ---------------------------------------------------------------------------
|
|
182
|
+
describe('createFilesRouter — ops role', () => {
|
|
183
|
+
const opsProvider = makeProvider({ id: 'dev@acme.com', role: 'ops' });
|
|
184
|
+
it('ops sees the unfiltered tree', async () => {
|
|
185
|
+
const res = await request(makeApp(opsProvider)).get('/api/files');
|
|
186
|
+
expect(res.status).toBe(200);
|
|
187
|
+
const dirs = res.body.tree.map((e) => e.name);
|
|
188
|
+
expect(dirs).toEqual(expect.arrayContaining(['skills', 'knowledge', 'agents', 'connections', 'tools']));
|
|
189
|
+
});
|
|
190
|
+
it('ops can read connections/', async () => {
|
|
191
|
+
const res = await request(makeApp(opsProvider)).get('/api/files/connections/salesforce/spec.json');
|
|
192
|
+
expect(res.status).toBe(200);
|
|
193
|
+
});
|
|
194
|
+
it('ops can write connections/', async () => {
|
|
195
|
+
const res = await request(makeApp(opsProvider))
|
|
196
|
+
.put('/api/files/connections/salesforce/spec.json')
|
|
197
|
+
.send({ content: '{"updated": true}' });
|
|
198
|
+
expect(res.status).toBe(200);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
// Unauthenticated
|
|
203
|
+
// ---------------------------------------------------------------------------
|
|
204
|
+
describe('createFilesRouter — unauthenticated', () => {
|
|
205
|
+
const nullProvider = makeProvider(null);
|
|
206
|
+
it('GET /api/files returns 401 when provider returns null', async () => {
|
|
207
|
+
const res = await request(makeApp(nullProvider)).get('/api/files');
|
|
208
|
+
expect(res.status).toBe(401);
|
|
209
|
+
expect(res.body.error.code).toBe('unauthenticated');
|
|
210
|
+
});
|
|
211
|
+
it('GET /api/files/* returns 401 when provider returns null', async () => {
|
|
212
|
+
const res = await request(makeApp(nullProvider)).get('/api/files/skills/pricing/SKILL.md');
|
|
213
|
+
expect(res.status).toBe(401);
|
|
214
|
+
});
|
|
215
|
+
it('PUT /api/files/* returns 401 when provider returns null', async () => {
|
|
216
|
+
const res = await request(makeApp(nullProvider))
|
|
217
|
+
.put('/api/files/skills/new/SKILL.md')
|
|
218
|
+
.send({ content: '# x' });
|
|
219
|
+
expect(res.status).toBe(401);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Path normalization
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
describe('createFilesRouter — path normalization', () => {
|
|
226
|
+
it('Express normalizes ../ in URL paths before they reach the handler', async () => {
|
|
227
|
+
// Express collapses `connections/../skills/...` to `skills/...` before
|
|
228
|
+
// routing. The role check then sees `skills/...` and allows it.
|
|
229
|
+
// This test documents that behavior — the role gate relies on Express
|
|
230
|
+
// normalization for traversal protection in addition to its own first-segment
|
|
231
|
+
// check.
|
|
232
|
+
const adminProvider = makeProvider({ id: 'a', role: 'admin' });
|
|
233
|
+
const res = await request(makeApp(adminProvider)).get('/api/files/connections/../skills/pricing/SKILL.md');
|
|
234
|
+
expect(res.status).toBe(200);
|
|
235
|
+
expect(res.body.content).toBe('# Pricing skill');
|
|
236
|
+
});
|
|
237
|
+
it('admin reading a path that would resolve outside skills/ via .. inside the path string is blocked', async () => {
|
|
238
|
+
// If a client somehow sneaks a `..` past Express normalization (e.g., URL
|
|
239
|
+
// encoded), the path.normalize() in checkPathAccess catches it because
|
|
240
|
+
// the first segment after normalization wouldn't be in ADMIN_ALLOWED_DIRS.
|
|
241
|
+
// We can't easily test this through supertest since Express normalizes,
|
|
242
|
+
// but we can verify the unit-level behavior of checkPathAccess by hitting
|
|
243
|
+
// a path that's definitely not in the allowlist.
|
|
244
|
+
const adminProvider = makeProvider({ id: 'a', role: 'admin' });
|
|
245
|
+
const res = await request(makeApp(adminProvider)).get('/api/files/secrets.json');
|
|
246
|
+
expect(res.status).toBe(403);
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
//# sourceMappingURL=files.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.test.js","sourceRoot":"","sources":["../../../../src/agent/routes/files.test.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export { createServer } from './server.js';
|
|
|
10
10
|
export type { ServerInstance, CreateServerOptions } from './server.js';
|
|
11
11
|
export type { ServerConfig } from './types.js';
|
|
12
12
|
export { createAIStreamRouter, type AIStreamRouterOptions } from './routes/ai-stream.js';
|
|
13
|
+
export { defaultRoleProvider, requireRole, hasRole, RoleProviderError, } from './role-provider.js';
|
|
14
|
+
export type { RoleProvider, RuntimeRole, RuntimeUser, } from './role-provider.js';
|
|
13
15
|
export { createLocalServer } from './agent/local-server.js';
|
|
14
16
|
export type { LocalServerConfig, AgentChatRequest } from './agent/agent-types.js';
|
|
15
17
|
export { ProactiveRunner } from './agent/proactive/proactive-runner.js';
|
package/dist/src/index.js
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
* Copyright 2025 Amodal Labs, Inc.
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
|
-
/* eslint-disable import/no-internal-modules -- barrel file re-exports from internal modules */
|
|
7
6
|
import { createServer } from './server.js';
|
|
8
7
|
import { log } from './logger.js';
|
|
9
8
|
export const SERVER_VERSION = '0.1.0';
|
|
@@ -16,6 +15,8 @@ export { createAgent } from './api/create-agent.js';
|
|
|
16
15
|
// ---------------------------------------------------------------------------
|
|
17
16
|
export { createServer } from './server.js';
|
|
18
17
|
export { createAIStreamRouter } from './routes/ai-stream.js';
|
|
18
|
+
// RoleProvider — auth/RBAC abstraction for hosting layers
|
|
19
|
+
export { defaultRoleProvider, requireRole, hasRole, RoleProviderError, } from './role-provider.js';
|
|
19
20
|
// Local mode
|
|
20
21
|
export { createLocalServer } from './agent/local-server.js';
|
|
21
22
|
export { ProactiveRunner } from './agent/proactive/proactive-runner.js';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|