@agent-relay/sdk 4.0.2 → 4.0.4

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 (94) hide show
  1. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  2. package/bin/agent-relay-broker-darwin-x64 +0 -0
  3. package/bin/agent-relay-broker-linux-arm64 +0 -0
  4. package/bin/agent-relay-broker-linux-x64 +0 -0
  5. package/dist/client.d.ts +3 -10
  6. package/dist/client.d.ts.map +1 -1
  7. package/dist/client.js +2 -0
  8. package/dist/client.js.map +1 -1
  9. package/dist/provisioner/__tests__/audit.test.d.ts +2 -0
  10. package/dist/provisioner/__tests__/audit.test.d.ts.map +1 -0
  11. package/dist/provisioner/__tests__/audit.test.js +45 -0
  12. package/dist/provisioner/__tests__/audit.test.js.map +1 -0
  13. package/dist/provisioner/__tests__/compiler.test.d.ts +2 -0
  14. package/dist/provisioner/__tests__/compiler.test.d.ts.map +1 -0
  15. package/dist/provisioner/__tests__/compiler.test.js +345 -0
  16. package/dist/provisioner/__tests__/compiler.test.js.map +1 -0
  17. package/dist/provisioner/__tests__/presets.test.d.ts +2 -0
  18. package/dist/provisioner/__tests__/presets.test.d.ts.map +1 -0
  19. package/dist/provisioner/__tests__/presets.test.js +23 -0
  20. package/dist/provisioner/__tests__/presets.test.js.map +1 -0
  21. package/dist/provisioner/__tests__/seeder.test.d.ts +2 -0
  22. package/dist/provisioner/__tests__/seeder.test.d.ts.map +1 -0
  23. package/dist/provisioner/__tests__/seeder.test.js +224 -0
  24. package/dist/provisioner/__tests__/seeder.test.js.map +1 -0
  25. package/dist/provisioner/__tests__/tar-seeder.test.d.ts +2 -0
  26. package/dist/provisioner/__tests__/tar-seeder.test.d.ts.map +1 -0
  27. package/dist/provisioner/__tests__/tar-seeder.test.js +191 -0
  28. package/dist/provisioner/__tests__/tar-seeder.test.js.map +1 -0
  29. package/dist/provisioner/__tests__/token-factory.test.d.ts +2 -0
  30. package/dist/provisioner/__tests__/token-factory.test.d.ts.map +1 -0
  31. package/dist/provisioner/__tests__/token-factory.test.js +127 -0
  32. package/dist/provisioner/__tests__/token-factory.test.js.map +1 -0
  33. package/dist/provisioner/__tests__/token.test.d.ts +2 -0
  34. package/dist/provisioner/__tests__/token.test.d.ts.map +1 -0
  35. package/dist/provisioner/__tests__/token.test.js +44 -0
  36. package/dist/provisioner/__tests__/token.test.js.map +1 -0
  37. package/dist/provisioner/audit.d.ts +19 -0
  38. package/dist/provisioner/audit.d.ts.map +1 -0
  39. package/dist/provisioner/audit.js +74 -0
  40. package/dist/provisioner/audit.js.map +1 -0
  41. package/dist/provisioner/compiler.d.ts +23 -0
  42. package/dist/provisioner/compiler.d.ts.map +1 -0
  43. package/dist/provisioner/compiler.js +355 -0
  44. package/dist/provisioner/compiler.js.map +1 -0
  45. package/dist/provisioner/index.d.ts +9 -0
  46. package/dist/provisioner/index.d.ts.map +1 -0
  47. package/dist/provisioner/index.js +266 -0
  48. package/dist/provisioner/index.js.map +1 -0
  49. package/dist/provisioner/mount.d.ts +14 -0
  50. package/dist/provisioner/mount.d.ts.map +1 -0
  51. package/dist/provisioner/mount.js +329 -0
  52. package/dist/provisioner/mount.js.map +1 -0
  53. package/dist/provisioner/seeder.d.ts +17 -0
  54. package/dist/provisioner/seeder.d.ts.map +1 -0
  55. package/dist/provisioner/seeder.js +419 -0
  56. package/dist/provisioner/seeder.js.map +1 -0
  57. package/dist/provisioner/token.d.ts +38 -0
  58. package/dist/provisioner/token.d.ts.map +1 -0
  59. package/dist/provisioner/token.js +74 -0
  60. package/dist/provisioner/token.js.map +1 -0
  61. package/dist/provisioner/types.d.ts +133 -0
  62. package/dist/provisioner/types.d.ts.map +1 -0
  63. package/dist/provisioner/types.js +2 -0
  64. package/dist/provisioner/types.js.map +1 -0
  65. package/dist/relay.d.ts +6 -0
  66. package/dist/relay.d.ts.map +1 -1
  67. package/dist/relay.js +17 -5
  68. package/dist/relay.js.map +1 -1
  69. package/dist/types.d.ts +9 -0
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/workflows/__tests__/e2e-permissions.test.d.ts +2 -0
  72. package/dist/workflows/__tests__/e2e-permissions.test.d.ts.map +1 -0
  73. package/dist/workflows/__tests__/e2e-permissions.test.js +331 -0
  74. package/dist/workflows/__tests__/e2e-permissions.test.js.map +1 -0
  75. package/dist/workflows/__tests__/permission-types.test.d.ts +2 -0
  76. package/dist/workflows/__tests__/permission-types.test.d.ts.map +1 -0
  77. package/dist/workflows/__tests__/permission-types.test.js +124 -0
  78. package/dist/workflows/__tests__/permission-types.test.js.map +1 -0
  79. package/dist/workflows/__tests__/permissions-integration.test.d.ts +2 -0
  80. package/dist/workflows/__tests__/permissions-integration.test.d.ts.map +1 -0
  81. package/dist/workflows/__tests__/permissions-integration.test.js +526 -0
  82. package/dist/workflows/__tests__/permissions-integration.test.js.map +1 -0
  83. package/dist/workflows/dry-run-format.d.ts.map +1 -1
  84. package/dist/workflows/dry-run-format.js +8 -0
  85. package/dist/workflows/dry-run-format.js.map +1 -1
  86. package/dist/workflows/runner.d.ts +14 -0
  87. package/dist/workflows/runner.d.ts.map +1 -1
  88. package/dist/workflows/runner.js +455 -6
  89. package/dist/workflows/runner.js.map +1 -1
  90. package/dist/workflows/types.d.ts +190 -0
  91. package/dist/workflows/types.d.ts.map +1 -1
  92. package/dist/workflows/types.js +29 -0
  93. package/dist/workflows/types.js.map +1 -1
  94. package/package.json +6 -2
@@ -0,0 +1,17 @@
1
+ interface WorkflowAclAgent {
2
+ name: string;
3
+ acl: Record<string, string[]>;
4
+ }
5
+ interface SeedWorkflowAclsOptions {
6
+ relayfileUrl: string;
7
+ adminToken: string;
8
+ workspace: string;
9
+ agents: WorkflowAclAgent[];
10
+ }
11
+ export declare function createWorkspaceIfNeeded(baseUrl: string, token: string, workspaceId: string): Promise<void>;
12
+ export declare function seedAclRules(baseUrl: string, token: string, workspaceId: string, aclRules: Record<string, string[]>): Promise<void>;
13
+ export declare function seedWorkspace(baseUrl: string, token: string, workspaceId: string, projectDir: string, excludeDirs: string[]): Promise<number>;
14
+ export declare function seedWorkflowAcls({ relayfileUrl, adminToken, workspace, agents, }: SeedWorkflowAclsOptions): Promise<void>;
15
+ export declare function seedWorkspaceTar(baseUrl: string, token: string, workspaceId: string, projectDir: string, excludeDirs: string[]): Promise<number>;
16
+ export {};
17
+ //# sourceMappingURL=seeder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeder.d.ts","sourceRoot":"","sources":["../../src/provisioner/seeder.ts"],"names":[],"mappings":"AA6BA,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC/B;AAED,UAAU,uBAAuB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B;AA0MD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CA6Df;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,CAAC,CAyBjB;AA4DD,wBAAsB,gBAAgB,CAAC,EACrC,YAAY,EACZ,UAAU,EACV,SAAS,EACT,MAAM,GACP,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzC;AA8DD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,MAAM,CAAC,CAqDjB"}
@@ -0,0 +1,419 @@
1
+ import { RelayFileClient } from '@relayfile/sdk';
2
+ import { execSync } from 'node:child_process';
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import * as tar from 'tar';
6
+ const DEFAULT_EXCLUDED_DIRS = ['.relay', '.git', 'node_modules'];
7
+ const DEFAULT_EXCLUDED_FILES = new Set(['.relayfile-mount-state.json']);
8
+ const BATCH_SIZE = 50;
9
+ const utf8Decoder = new TextDecoder('utf-8', { fatal: true });
10
+ function normalizeBaseUrl(baseUrl) {
11
+ const url = String(baseUrl ?? '').trim();
12
+ let end = url.length;
13
+ while (end > 0 && url.charCodeAt(end - 1) === 0x2f) {
14
+ end--;
15
+ }
16
+ return end === url.length ? url : url.slice(0, end);
17
+ }
18
+ function normalizeWorkspaceId(workspaceId) {
19
+ const value = String(workspaceId ?? '').trim();
20
+ if (!value) {
21
+ throw new Error('workspaceId is required');
22
+ }
23
+ return value;
24
+ }
25
+ function normalizeExcludeDirs(excludeDirs) {
26
+ const result = new Set();
27
+ for (const dir of excludeDirs) {
28
+ const normalized = String(dir ?? '')
29
+ .trim()
30
+ .replace(/^[/\\]+|[/\\]+$/g, '');
31
+ if (!normalized) {
32
+ continue;
33
+ }
34
+ result.add(normalized);
35
+ }
36
+ return result;
37
+ }
38
+ function normalizeAclDirectory(dirPath) {
39
+ const normalized = String(dirPath ?? '')
40
+ .trim()
41
+ .replace(/\\/gu, '/')
42
+ .replace(/\/+$/u, '');
43
+ if (!normalized || normalized === '/') {
44
+ return '/';
45
+ }
46
+ return normalized.startsWith('/') ? normalized : `/${normalized}`;
47
+ }
48
+ function isReviewerAgent(agentName) {
49
+ return /reviewer/iu.test(String(agentName ?? '').trim());
50
+ }
51
+ function createClient(baseUrl, token) {
52
+ return new RelayFileClient({
53
+ baseUrl: normalizeBaseUrl(baseUrl),
54
+ token,
55
+ retry: { maxRetries: 0 },
56
+ });
57
+ }
58
+ function isUtf8(raw) {
59
+ try {
60
+ utf8Decoder.decode(raw);
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ function buildSeedFilePayload(filePath, rootDir) {
68
+ const relative = path.relative(rootDir, filePath).split(path.sep).join('/');
69
+ const raw = fs.readFileSync(filePath);
70
+ if (isUtf8(raw)) {
71
+ return { path: `/${relative}`, content: raw.toString('utf8'), encoding: 'utf-8' };
72
+ }
73
+ return { path: `/${relative}`, content: raw.toString('base64'), encoding: 'base64' };
74
+ }
75
+ function collectSeedPaths(rootDir, currentRelative, excludeDirs, output) {
76
+ const absoluteDir = path.join(rootDir, currentRelative);
77
+ const entries = fs.readdirSync(absoluteDir, { withFileTypes: true });
78
+ for (const entry of entries) {
79
+ if (excludeDirs.has(entry.name)) {
80
+ continue;
81
+ }
82
+ if (DEFAULT_EXCLUDED_FILES.has(entry.name)) {
83
+ continue;
84
+ }
85
+ const nextRelative = currentRelative ? `${currentRelative}/${entry.name}` : entry.name;
86
+ const absolutePath = path.join(rootDir, nextRelative);
87
+ if (excludeDirs.has(nextRelative)) {
88
+ continue;
89
+ }
90
+ if (entry.isDirectory()) {
91
+ collectSeedPaths(rootDir, nextRelative, excludeDirs, output);
92
+ continue;
93
+ }
94
+ if (entry.isFile()) {
95
+ output.push(absolutePath);
96
+ continue;
97
+ }
98
+ if (entry.isSymbolicLink()) {
99
+ try {
100
+ const resolved = fs.realpathSync(absolutePath);
101
+ if (!resolved.startsWith(rootDir + path.sep) && resolved !== rootDir) {
102
+ continue;
103
+ }
104
+ const stat = fs.statSync(resolved);
105
+ if (stat.isDirectory()) {
106
+ collectSeedPaths(rootDir, nextRelative, excludeDirs, output);
107
+ continue;
108
+ }
109
+ if (stat.isFile()) {
110
+ output.push(absolutePath);
111
+ }
112
+ }
113
+ catch {
114
+ // Ignore symlinks that cannot be resolved.
115
+ }
116
+ }
117
+ }
118
+ }
119
+ function parseBulkWriteResponse(payload) {
120
+ if (!payload || typeof payload !== 'object') {
121
+ return { written: 0, errorCount: 0, errors: [] };
122
+ }
123
+ const parsed = payload;
124
+ return {
125
+ written: typeof parsed.written === 'number' ? parsed.written : 0,
126
+ errorCount: typeof parsed.errorCount === 'number' ? parsed.errorCount : 0,
127
+ errors: parsed.errors ?? [],
128
+ };
129
+ }
130
+ async function postBulkWrite(baseUrl, token, workspaceId, files, correlationId) {
131
+ const response = await fetch(`${normalizeBaseUrl(baseUrl)}/v1/workspaces/${encodeURIComponent(workspaceId)}/fs/bulk`, {
132
+ method: 'POST',
133
+ headers: {
134
+ Authorization: `Bearer ${token}`,
135
+ 'Content-Type': 'application/json',
136
+ 'X-Correlation-Id': correlationId,
137
+ },
138
+ body: JSON.stringify({ files }),
139
+ });
140
+ const body = await response.text();
141
+ if (!response.ok) {
142
+ throw new Error(`failed to seed workspace ${workspaceId}: HTTP ${response.status} ${body}`.trim());
143
+ }
144
+ if (!body) {
145
+ return { written: files.length, errorCount: 0, errors: [] };
146
+ }
147
+ try {
148
+ return parseBulkWriteResponse(JSON.parse(body));
149
+ }
150
+ catch {
151
+ return { written: files.length, errorCount: 0, errors: [] };
152
+ }
153
+ }
154
+ async function writeBulkWrite(baseUrl, token, workspaceId, files, correlationId) {
155
+ const client = createClient(baseUrl, token);
156
+ try {
157
+ const response = await client.bulkWrite({
158
+ workspaceId,
159
+ files,
160
+ correlationId,
161
+ });
162
+ return parseBulkWriteResponse(response);
163
+ }
164
+ catch (error) {
165
+ if (typeof error.status === 'number') {
166
+ throw error;
167
+ }
168
+ }
169
+ return postBulkWrite(baseUrl, token, workspaceId, files, correlationId);
170
+ }
171
+ export async function createWorkspaceIfNeeded(baseUrl, token, workspaceId) {
172
+ const workspace = normalizeWorkspaceId(workspaceId);
173
+ const client = createClient(baseUrl, token);
174
+ const maybeCreateWorkspace = client;
175
+ if (typeof maybeCreateWorkspace.createWorkspace === 'function') {
176
+ for (const arg of [workspace, { id: workspace }, { workspaceId: workspace }, { name: workspace }]) {
177
+ try {
178
+ await maybeCreateWorkspace.createWorkspace(arg);
179
+ return;
180
+ }
181
+ catch {
182
+ // Continue to the next overload candidate, then fallback to HTTP.
183
+ }
184
+ }
185
+ }
186
+ const endpoint = `${normalizeBaseUrl(baseUrl)}/v1/workspaces`;
187
+ const bodyCandidates = [
188
+ { name: workspace },
189
+ { workspace: workspace },
190
+ { workspaceId: workspace },
191
+ { id: workspace },
192
+ ];
193
+ let lastFailure = null;
194
+ for (const body of bodyCandidates) {
195
+ try {
196
+ const response = await fetch(endpoint, {
197
+ method: 'POST',
198
+ headers: {
199
+ Authorization: `Bearer ${token}`,
200
+ 'Content-Type': 'application/json',
201
+ 'X-Correlation-Id': `create-workspace-${Date.now()}`,
202
+ },
203
+ body: JSON.stringify(body),
204
+ });
205
+ if (response.status === 200 ||
206
+ response.status === 201 ||
207
+ response.status === 204 ||
208
+ response.status === 409) {
209
+ return;
210
+ }
211
+ const responseBody = await response.text().catch(() => '');
212
+ lastFailure = `HTTP ${response.status} ${responseBody}`.trim();
213
+ if (response.status < 500 && response.status !== 409) {
214
+ continue;
215
+ }
216
+ }
217
+ catch (error) {
218
+ lastFailure = String(error);
219
+ }
220
+ }
221
+ if (lastFailure) {
222
+ throw new Error(`Failed to create workspace ${workspace}: ${lastFailure}`);
223
+ }
224
+ }
225
+ export async function seedAclRules(baseUrl, token, workspaceId, aclRules) {
226
+ const workspace = normalizeWorkspaceId(workspaceId);
227
+ const files = Object.entries(aclRules).map(([dirPath, rules]) => {
228
+ const normalizedDir = String(dirPath ?? '')
229
+ .trim()
230
+ .replace(/\/+$/, '');
231
+ const aclPath = normalizedDir === '' || normalizedDir === '/' ? '/.relayfile.acl' : `${normalizedDir}/.relayfile.acl`;
232
+ return {
233
+ path: aclPath,
234
+ content: JSON.stringify({ semantics: { permissions: rules } }),
235
+ encoding: 'utf-8',
236
+ };
237
+ });
238
+ if (files.length === 0) {
239
+ return;
240
+ }
241
+ const result = await writeBulkWrite(baseUrl, token, workspace, files, `seed-acl-${workspace}-${Date.now()}`);
242
+ if (result.errorCount > 0) {
243
+ const details = result.errors ? JSON.stringify(result.errors) : '[]';
244
+ throw new Error(`ACL seeding had ${result.errorCount} error(s) for workspace ${workspace}: ${details}`);
245
+ }
246
+ }
247
+ export async function seedWorkspace(baseUrl, token, workspaceId, projectDir, excludeDirs) {
248
+ const workspace = normalizeWorkspaceId(workspaceId);
249
+ const rootDir = path.resolve(projectDir);
250
+ const excludes = normalizeExcludeDirs([...DEFAULT_EXCLUDED_DIRS, ...excludeDirs]);
251
+ const seedPaths = [];
252
+ collectSeedPaths(rootDir, '', excludes, seedPaths);
253
+ const allFiles = seedPaths
254
+ .sort((left, right) => left.localeCompare(right))
255
+ .map((filePath) => buildSeedFilePayload(filePath, rootDir));
256
+ let seededCount = 0;
257
+ for (let index = 0; index < allFiles.length; index += BATCH_SIZE) {
258
+ const batch = allFiles.slice(index, index + BATCH_SIZE);
259
+ const batchIndex = Math.floor(index / BATCH_SIZE);
260
+ const result = await writeBulkWrite(baseUrl, token, workspace, batch, `seed-workspace-${workspace}-${Date.now()}-${batchIndex}`);
261
+ seededCount += result.written;
262
+ }
263
+ return seededCount;
264
+ }
265
+ function buildWorkflowAclRules(agents) {
266
+ const directories = new Set();
267
+ const normalizedAgents = agents.map((agent) => ({
268
+ name: String(agent.name ?? '').trim(),
269
+ acl: Object.fromEntries(Object.entries(agent.acl ?? {}).map(([dirPath, rules]) => [
270
+ normalizeAclDirectory(dirPath),
271
+ Array.isArray(rules) ? rules : [],
272
+ ])),
273
+ }));
274
+ const reviewerNames = normalizedAgents
275
+ .map((agent) => agent.name)
276
+ .filter((name) => name !== '' && isReviewerAgent(name));
277
+ for (const agent of normalizedAgents) {
278
+ for (const dirPath of Object.keys(agent.acl)) {
279
+ directories.add(dirPath);
280
+ }
281
+ }
282
+ const merged = new Map();
283
+ for (const dirPath of [...directories].sort((left, right) => left.localeCompare(right))) {
284
+ const rules = new Set();
285
+ for (const reviewerName of reviewerNames) {
286
+ rules.add(`allow:agent:${reviewerName}:read`);
287
+ }
288
+ for (const agent of normalizedAgents) {
289
+ if (!agent.name) {
290
+ continue;
291
+ }
292
+ const agentRules = agent.acl[dirPath] ?? [];
293
+ const hasRead = agentRules.includes('read') || agentRules.includes('write');
294
+ const hasWrite = agentRules.includes('write');
295
+ if (hasRead) {
296
+ rules.add(`allow:agent:${agent.name}:read`);
297
+ }
298
+ else if (!isReviewerAgent(agent.name)) {
299
+ rules.add(`deny:agent:${agent.name}`);
300
+ }
301
+ if (hasWrite) {
302
+ rules.add(`allow:agent:${agent.name}:write`);
303
+ }
304
+ }
305
+ if (rules.size > 0) {
306
+ merged.set(dirPath, rules);
307
+ }
308
+ }
309
+ return Object.fromEntries([...merged.entries()].map(([dirPath, rules]) => [dirPath, [...rules].sort()]));
310
+ }
311
+ export async function seedWorkflowAcls({ relayfileUrl, adminToken, workspace, agents, }) {
312
+ const aclRules = buildWorkflowAclRules(agents);
313
+ if (Object.keys(aclRules).length === 0) {
314
+ return;
315
+ }
316
+ await seedAclRules(relayfileUrl, adminToken, workspace, aclRules);
317
+ }
318
+ function getGitTrackedFiles(rootDir) {
319
+ try {
320
+ const output = execSync('git ls-files -z --cached --others --exclude-standard', {
321
+ cwd: rootDir,
322
+ encoding: 'utf-8',
323
+ maxBuffer: 50 * 1024 * 1024,
324
+ });
325
+ const files = output.split('\0').filter(Boolean);
326
+ return files;
327
+ }
328
+ catch {
329
+ return null;
330
+ }
331
+ }
332
+ function collectAllFiles(rootDir, excludeDirs) {
333
+ const files = [];
334
+ const stack = [''];
335
+ while (stack.length > 0) {
336
+ const currentRelative = stack.pop();
337
+ const absoluteDir = path.join(rootDir, currentRelative);
338
+ let entries;
339
+ try {
340
+ entries = fs.readdirSync(absoluteDir, { withFileTypes: true });
341
+ }
342
+ catch {
343
+ continue;
344
+ }
345
+ for (const entry of entries) {
346
+ if (excludeDirs.has(entry.name))
347
+ continue;
348
+ if (DEFAULT_EXCLUDED_FILES.has(entry.name))
349
+ continue;
350
+ const nextRelative = currentRelative ? `${currentRelative}/${entry.name}` : entry.name;
351
+ if (excludeDirs.has(nextRelative))
352
+ continue;
353
+ if (entry.isDirectory()) {
354
+ stack.push(nextRelative);
355
+ }
356
+ else if (entry.isFile()) {
357
+ files.push(nextRelative);
358
+ }
359
+ }
360
+ }
361
+ return files;
362
+ }
363
+ async function createTarBuffer(rootDir, files) {
364
+ const tarStream = tar.create({ gzip: true, cwd: rootDir, portable: true, follow: true }, files);
365
+ const chunks = [];
366
+ for await (const chunk of tarStream) {
367
+ chunks.push(Buffer.from(chunk));
368
+ }
369
+ return Buffer.concat(chunks);
370
+ }
371
+ export async function seedWorkspaceTar(baseUrl, token, workspaceId, projectDir, excludeDirs) {
372
+ const workspace = normalizeWorkspaceId(workspaceId);
373
+ const rootDir = path.resolve(projectDir);
374
+ const excludes = normalizeExcludeDirs([...DEFAULT_EXCLUDED_DIRS, ...excludeDirs]);
375
+ const gitFiles = getGitTrackedFiles(rootDir);
376
+ const rawFiles = gitFiles ?? collectAllFiles(rootDir, excludes);
377
+ const files = gitFiles
378
+ ? rawFiles.filter((f) => {
379
+ const segments = f.split('/');
380
+ if (DEFAULT_EXCLUDED_FILES.has(segments[segments.length - 1]))
381
+ return false;
382
+ return !segments.some((seg) => excludes.has(seg));
383
+ })
384
+ : rawFiles;
385
+ if (files.length === 0) {
386
+ return 0;
387
+ }
388
+ const tarball = await createTarBuffer(rootDir, files);
389
+ const url = `${normalizeBaseUrl(baseUrl)}/v1/workspaces/${encodeURIComponent(workspace)}/fs/import`;
390
+ const response = await fetch(url, {
391
+ method: 'POST',
392
+ headers: {
393
+ Authorization: `Bearer ${token}`,
394
+ 'Content-Type': 'application/gzip',
395
+ 'X-Correlation-Id': `seed-tar-${workspace}-${Date.now()}`,
396
+ },
397
+ body: tarball.buffer.slice(tarball.byteOffset, tarball.byteOffset + tarball.byteLength),
398
+ });
399
+ if (response.status === 404) {
400
+ // Tar import not supported — fall back to batch upload
401
+ return seedWorkspace(baseUrl, token, workspaceId, projectDir, excludeDirs);
402
+ }
403
+ if (!response.ok) {
404
+ const body = await response.text().catch(() => '');
405
+ throw new Error(`tar import failed for workspace ${workspace}: HTTP ${response.status} ${body}`.trim());
406
+ }
407
+ const raw = await response.text();
408
+ if (!raw.trim()) {
409
+ return files.length;
410
+ }
411
+ try {
412
+ const parsed = JSON.parse(raw);
413
+ return typeof parsed.imported === 'number' ? parsed.imported : files.length;
414
+ }
415
+ catch {
416
+ return files.length;
417
+ }
418
+ }
419
+ //# sourceMappingURL=seeder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seeder.js","sourceRoot":"","sources":["../../src/provisioner/seeder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export declare const DEFAULT_WORKFLOW_TOKEN_TTL_SECONDS: number;
2
+ export declare const DEFAULT_ADMIN_AGENT_NAME = "relay-admin";
3
+ export declare const DEFAULT_ADMIN_SCOPES: string[];
4
+ export interface TokenClaims {
5
+ sub: string;
6
+ org: string;
7
+ wks: string;
8
+ workspace_id: string;
9
+ agent_name: string;
10
+ scopes: string[];
11
+ sponsorId: string;
12
+ sponsorChain: string[];
13
+ token_type: string;
14
+ iss: string;
15
+ aud: string[];
16
+ iat: number;
17
+ exp: number;
18
+ jti: string;
19
+ }
20
+ export interface MintAgentTokenOptions {
21
+ secret: string;
22
+ agentName: string;
23
+ workspace: string;
24
+ scopes: string[];
25
+ ttlSeconds?: number;
26
+ }
27
+ export declare function mintAgentToken(opts: MintAgentTokenOptions): string;
28
+ export declare class WorkflowTokenFactory {
29
+ private readonly secret;
30
+ private readonly workspace;
31
+ private readonly tokens;
32
+ private readonly ttlSeconds;
33
+ constructor(secret: string, workspace: string, ttlSeconds?: number);
34
+ mintForAgent(agentName: string, scopes: string[], ttlSeconds?: number): string;
35
+ mintAdmin(ttlSeconds?: number): string;
36
+ getToken(agentName: string): string | undefined;
37
+ }
38
+ //# sourceMappingURL=token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/provisioner/token.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kCAAkC,QAAc,CAAC;AAC9D,eAAO,MAAM,wBAAwB,gBAAgB,CAAC;AACtD,eAAO,MAAM,oBAAoB,UAShC,CAAC;AAIF,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD,wBAAgB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAuBlE;AAED,qBAAa,oBAAoB;IAK7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAGjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAClC,UAAU,SAAqC;IAKjD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,SAAkB,GAAG,MAAM;IAavF,SAAS,CAAC,UAAU,SAAkB,GAAG,MAAM;IAI/C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAGhD"}
@@ -0,0 +1,74 @@
1
+ import { createHmac, randomUUID } from 'node:crypto';
2
+ export const DEFAULT_WORKFLOW_TOKEN_TTL_SECONDS = 2 * 60 * 60;
3
+ export const DEFAULT_ADMIN_AGENT_NAME = 'relay-admin';
4
+ export const DEFAULT_ADMIN_SCOPES = [
5
+ 'relayauth:*:manage:*',
6
+ 'relayauth:*:read:*',
7
+ 'relayfile:*:*:*',
8
+ 'fs:read',
9
+ 'fs:write',
10
+ 'sync:trigger',
11
+ 'ops:read',
12
+ 'admin:read',
13
+ ];
14
+ const JWT_HEADER = { alg: 'HS256', typ: 'JWT' };
15
+ function base64urlEncode(value) {
16
+ return Buffer.from(JSON.stringify(value)).toString('base64url');
17
+ }
18
+ function normalizeTtlSeconds(ttlSeconds) {
19
+ if (ttlSeconds === undefined) {
20
+ return DEFAULT_WORKFLOW_TOKEN_TTL_SECONDS;
21
+ }
22
+ return Math.max(1, Math.floor(ttlSeconds));
23
+ }
24
+ export function mintAgentToken(opts) {
25
+ const now = Math.floor(Date.now() / 1000);
26
+ const payload = {
27
+ sub: `agent_${opts.agentName}`,
28
+ org: 'org_relay',
29
+ wks: opts.workspace,
30
+ workspace_id: opts.workspace,
31
+ agent_name: opts.agentName,
32
+ scopes: [...opts.scopes],
33
+ sponsorId: 'relay-local',
34
+ sponsorChain: ['relay-local'],
35
+ token_type: 'access',
36
+ iss: 'relayauth:local',
37
+ aud: ['relayauth', 'relayfile'],
38
+ iat: now,
39
+ exp: now + normalizeTtlSeconds(opts.ttlSeconds),
40
+ jti: `tok-${now}-${randomUUID()}`,
41
+ };
42
+ const unsigned = `${base64urlEncode(JWT_HEADER)}.${base64urlEncode(payload)}`;
43
+ const signature = createHmac('sha256', opts.secret).update(unsigned).digest('base64url');
44
+ return `${unsigned}.${signature}`;
45
+ }
46
+ export class WorkflowTokenFactory {
47
+ secret;
48
+ workspace;
49
+ tokens = new Map();
50
+ ttlSeconds;
51
+ constructor(secret, workspace, ttlSeconds = DEFAULT_WORKFLOW_TOKEN_TTL_SECONDS) {
52
+ this.secret = secret;
53
+ this.workspace = workspace;
54
+ this.ttlSeconds = normalizeTtlSeconds(ttlSeconds);
55
+ }
56
+ mintForAgent(agentName, scopes, ttlSeconds = this.ttlSeconds) {
57
+ const token = mintAgentToken({
58
+ secret: this.secret,
59
+ workspace: this.workspace,
60
+ agentName,
61
+ scopes,
62
+ ttlSeconds,
63
+ });
64
+ this.tokens.set(agentName, token);
65
+ return token;
66
+ }
67
+ mintAdmin(ttlSeconds = this.ttlSeconds) {
68
+ return this.mintForAgent(DEFAULT_ADMIN_AGENT_NAME, DEFAULT_ADMIN_SCOPES, ttlSeconds);
69
+ }
70
+ getToken(agentName) {
71
+ return this.tokens.get(agentName);
72
+ }
73
+ }
74
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/provisioner/token.ts"],"names":[],"mappings":"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"}