@agentworkforce/deploy 0.0.0
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/bundle.d.ts +22 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +132 -0
- package/dist/bundle.js.map +1 -0
- package/dist/bundle.test.d.ts +2 -0
- package/dist/bundle.test.d.ts.map +1 -0
- package/dist/bundle.test.js +92 -0
- package/dist/bundle.test.js.map +1 -0
- package/dist/connect.d.ts +81 -0
- package/dist/connect.d.ts.map +1 -0
- package/dist/connect.js +127 -0
- package/dist/connect.js.map +1 -0
- package/dist/deploy.d.ts +50 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +172 -0
- package/dist/deploy.js.map +1 -0
- package/dist/deploy.test.d.ts +2 -0
- package/dist/deploy.test.d.ts.map +1 -0
- package/dist/deploy.test.js +293 -0
- package/dist/deploy.test.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/io.d.ts +22 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +76 -0
- package/dist/io.js.map +1 -0
- package/dist/login.d.ts +24 -0
- package/dist/login.d.ts.map +1 -0
- package/dist/login.js +27 -0
- package/dist/login.js.map +1 -0
- package/dist/modes/cloud.d.ts +18 -0
- package/dist/modes/cloud.d.ts.map +1 -0
- package/dist/modes/cloud.js +21 -0
- package/dist/modes/cloud.js.map +1 -0
- package/dist/modes/dev.d.ts +12 -0
- package/dist/modes/dev.d.ts.map +1 -0
- package/dist/modes/dev.js +153 -0
- package/dist/modes/dev.js.map +1 -0
- package/dist/modes/sandbox-client.d.ts +63 -0
- package/dist/modes/sandbox-client.d.ts.map +1 -0
- package/dist/modes/sandbox-client.js +177 -0
- package/dist/modes/sandbox-client.js.map +1 -0
- package/dist/modes/sandbox-client.test.d.ts +2 -0
- package/dist/modes/sandbox-client.test.d.ts.map +1 -0
- package/dist/modes/sandbox-client.test.js +177 -0
- package/dist/modes/sandbox-client.test.js.map +1 -0
- package/dist/modes/sandbox.d.ts +50 -0
- package/dist/modes/sandbox.d.ts.map +1 -0
- package/dist/modes/sandbox.js +131 -0
- package/dist/modes/sandbox.js.map +1 -0
- package/dist/modes/sandbox.test.d.ts +2 -0
- package/dist/modes/sandbox.test.d.ts.map +1 -0
- package/dist/modes/sandbox.test.js +95 -0
- package/dist/modes/sandbox.test.js.map +1 -0
- package/dist/preflight.d.ts +14 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +78 -0
- package/dist/preflight.js.map +1 -0
- package/dist/types.d.ts +140 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +40 -0
package/dist/deploy.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { mkdir } from 'node:fs/promises';
|
|
3
|
+
import { bundleStager } from './bundle.js';
|
|
4
|
+
import { connectIntegrations, envIntegrationResolver } from './connect.js';
|
|
5
|
+
import { createTerminalIO } from './io.js';
|
|
6
|
+
import { envWorkspaceAuth } from './login.js';
|
|
7
|
+
import { devLauncher } from './modes/dev.js';
|
|
8
|
+
import { sandboxLauncher } from './modes/sandbox.js';
|
|
9
|
+
import { cloudLauncher } from './modes/cloud.js';
|
|
10
|
+
import { preflightPersona } from './preflight.js';
|
|
11
|
+
/**
|
|
12
|
+
* Pick the run mode for this deploy. Per the deploy-v1 spec:
|
|
13
|
+
* - Explicit `--mode` always wins.
|
|
14
|
+
* - Otherwise `--mode sandbox` is the default when Daytona creds resolve
|
|
15
|
+
* (BYO env or workforce-managed both count as "resolved" here; the
|
|
16
|
+
* sandbox launcher itself decides which auth path to use).
|
|
17
|
+
* - Otherwise fall back to `--mode dev`.
|
|
18
|
+
*
|
|
19
|
+
* The orchestrator doesn't probe the cloud endpoint here — `--mode cloud`
|
|
20
|
+
* stays opt-in until the M4 endpoint is live.
|
|
21
|
+
*/
|
|
22
|
+
export function pickMode(opts) {
|
|
23
|
+
if (opts.mode)
|
|
24
|
+
return opts.mode;
|
|
25
|
+
// Daytona credential probe: BYO env var, or assume workforce-managed via
|
|
26
|
+
// the active workspace (the sandbox launcher gates on its own auth).
|
|
27
|
+
if (process.env.DAYTONA_API_KEY || process.env.WORKFORCE_WORKSPACE_TOKEN) {
|
|
28
|
+
return 'sandbox';
|
|
29
|
+
}
|
|
30
|
+
return 'dev';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Top-level entry. The CLI dispatch case calls this with parsed options
|
|
34
|
+
* and resolvers. Returns a `DeployResult` summarizing the deploy; on
|
|
35
|
+
* failure, throws with an actionable message (no half-deploys).
|
|
36
|
+
*
|
|
37
|
+
* Step ordering — see `docs/plans/deploy-v1.md` §5:
|
|
38
|
+
* 1. Preflight persona (parse, lint, onEvent on disk).
|
|
39
|
+
* 2. Resolve workspace + token.
|
|
40
|
+
* 3. Connect integrations (prompt per provider).
|
|
41
|
+
* 4. Stage bundle to `.workforce/build/<id>/`.
|
|
42
|
+
* 5. Launch in the resolved mode.
|
|
43
|
+
* 6. Return the handle + summary.
|
|
44
|
+
*
|
|
45
|
+
* `dryRun: true` exits cleanly after step 1, returning a minimal result
|
|
46
|
+
* with the warnings collected so far.
|
|
47
|
+
*
|
|
48
|
+
* `bundleOut: <dir>` runs steps 1-4 then exits, skipping launch.
|
|
49
|
+
*/
|
|
50
|
+
export async function deploy(opts, resolvers = {}) {
|
|
51
|
+
const io = opts.io ?? createTerminalIO();
|
|
52
|
+
const warnings = [];
|
|
53
|
+
io.info(`workforce deploy → ${opts.personaPath}`);
|
|
54
|
+
const preflight = await preflightPersona(opts.personaPath);
|
|
55
|
+
warnings.push(...preflight.warnings);
|
|
56
|
+
for (const w of preflight.warnings)
|
|
57
|
+
io.warn(w);
|
|
58
|
+
io.info(`persona ${preflight.persona.id}: ${preflight.integrations.length} integration(s), ${preflight.schedules.length} schedule(s)`);
|
|
59
|
+
if (opts.dryRun) {
|
|
60
|
+
io.info('--dry-run: persona validated; exiting before any side effects');
|
|
61
|
+
return {
|
|
62
|
+
deploymentId: preflight.persona.id,
|
|
63
|
+
mode: opts.mode ?? pickMode(opts),
|
|
64
|
+
workspace: opts.workspace ?? '(dry-run)',
|
|
65
|
+
bundleDir: '(dry-run)',
|
|
66
|
+
connectedIntegrations: [],
|
|
67
|
+
schedules: preflight.schedules,
|
|
68
|
+
warnings
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
// `--bundle-out` produces a workspace-agnostic artifact, so skip the
|
|
72
|
+
// workspace/integration handshakes entirely. Anyone bundling for CI
|
|
73
|
+
// or inspection shouldn't need credentials they don't yet have.
|
|
74
|
+
if (opts.bundleOut) {
|
|
75
|
+
const bundleDir = path.resolve(opts.bundleOut);
|
|
76
|
+
await mkdir(bundleDir, { recursive: true });
|
|
77
|
+
const stager = resolvers.bundle ?? bundleStager;
|
|
78
|
+
const bundle = await stager.stage({
|
|
79
|
+
personaPath: preflight.personaPath,
|
|
80
|
+
persona: preflight.persona,
|
|
81
|
+
outDir: bundleDir
|
|
82
|
+
});
|
|
83
|
+
io.info(`bundle: staged to ${bundle.runnerPath} (${formatBytes(bundle.sizeBytes)})`);
|
|
84
|
+
io.info(`--bundle-out: bundle ready at ${bundleDir}; skipping launch`);
|
|
85
|
+
return {
|
|
86
|
+
deploymentId: preflight.persona.id,
|
|
87
|
+
mode: opts.mode ?? pickMode(opts),
|
|
88
|
+
workspace: opts.workspace ?? '(bundle-only)',
|
|
89
|
+
bundleDir,
|
|
90
|
+
connectedIntegrations: [],
|
|
91
|
+
schedules: preflight.schedules,
|
|
92
|
+
warnings
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const workspaceAuth = resolvers.workspaceAuth ?? envWorkspaceAuth();
|
|
96
|
+
const { workspace } = await workspaceAuth.resolveWorkspace({
|
|
97
|
+
override: opts.workspace,
|
|
98
|
+
io
|
|
99
|
+
});
|
|
100
|
+
io.info(`workspace: ${workspace}`);
|
|
101
|
+
const connectResult = await connectIntegrations({
|
|
102
|
+
persona: preflight.persona,
|
|
103
|
+
workspace,
|
|
104
|
+
noConnect: opts.noConnect === true,
|
|
105
|
+
io,
|
|
106
|
+
integrations: resolvers.integrations ?? envIntegrationResolver(),
|
|
107
|
+
...(resolvers.subscription ? { subscription: resolvers.subscription } : {})
|
|
108
|
+
});
|
|
109
|
+
const failed = connectResult.outcomes.filter((o) => o.status === 'failed');
|
|
110
|
+
if (failed.length > 0) {
|
|
111
|
+
throw new Error(`deploy aborted: ${failed.length} integration(s) failed to connect: ${failed.map((f) => f.provider).join(', ')}`);
|
|
112
|
+
}
|
|
113
|
+
const skipped = connectResult.outcomes.filter((o) => o.status === 'skipped');
|
|
114
|
+
if (skipped.length > 0) {
|
|
115
|
+
throw new Error(`deploy aborted: ${skipped.length} integration(s) skipped: ${skipped.map((s) => s.provider).join(', ')}`);
|
|
116
|
+
}
|
|
117
|
+
const connectedIntegrations = connectResult.outcomes
|
|
118
|
+
.filter((o) => o.status === 'already-connected' || o.status === 'connected-now')
|
|
119
|
+
.map((o) => o.provider);
|
|
120
|
+
const bundleDir = path.resolve(path.join(preflight.personaDir, '.workforce', 'build', preflight.persona.id));
|
|
121
|
+
await mkdir(bundleDir, { recursive: true });
|
|
122
|
+
const stager = resolvers.bundle ?? bundleStager;
|
|
123
|
+
const bundle = await stager.stage({
|
|
124
|
+
personaPath: preflight.personaPath,
|
|
125
|
+
persona: preflight.persona,
|
|
126
|
+
outDir: bundleDir
|
|
127
|
+
});
|
|
128
|
+
io.info(`bundle: staged to ${bundle.runnerPath} (${formatBytes(bundle.sizeBytes)})`);
|
|
129
|
+
const mode = opts.mode ?? pickMode(opts);
|
|
130
|
+
io.info(`mode: ${mode}`);
|
|
131
|
+
const launcher = resolveLauncher(mode, resolvers);
|
|
132
|
+
const handle = await launcher.launch({
|
|
133
|
+
persona: preflight.persona,
|
|
134
|
+
bundle,
|
|
135
|
+
workspace,
|
|
136
|
+
io,
|
|
137
|
+
...(opts.detach ? { detach: true } : {}),
|
|
138
|
+
...(opts.byoSandbox ? { byoSandbox: true } : {})
|
|
139
|
+
});
|
|
140
|
+
io.info(`launched: ${mode}/${handle.id}`);
|
|
141
|
+
return {
|
|
142
|
+
deploymentId: preflight.persona.id,
|
|
143
|
+
mode,
|
|
144
|
+
workspace,
|
|
145
|
+
bundleDir,
|
|
146
|
+
connectedIntegrations,
|
|
147
|
+
schedules: preflight.schedules,
|
|
148
|
+
runHandle: handle,
|
|
149
|
+
warnings
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function resolveLauncher(mode, resolvers) {
|
|
153
|
+
const supplied = resolvers.modes?.[mode];
|
|
154
|
+
if (supplied)
|
|
155
|
+
return supplied;
|
|
156
|
+
switch (mode) {
|
|
157
|
+
case 'dev':
|
|
158
|
+
return devLauncher;
|
|
159
|
+
case 'sandbox':
|
|
160
|
+
return sandboxLauncher;
|
|
161
|
+
case 'cloud':
|
|
162
|
+
return cloudLauncher;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function formatBytes(bytes) {
|
|
166
|
+
if (bytes < 1024)
|
|
167
|
+
return `${bytes}B`;
|
|
168
|
+
if (bytes < 1024 * 1024)
|
|
169
|
+
return `${(bytes / 1024).toFixed(1)}KB`;
|
|
170
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.test.d.ts","sourceRoot":"","sources":["../src/deploy.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { mkdtemp, rm, writeFile, mkdir } from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
import { deploy } from './deploy.js';
|
|
7
|
+
import { createBufferedIO } from './io.js';
|
|
8
|
+
import { preflightPersona } from './preflight.js';
|
|
9
|
+
function basePersonaJson(overrides = {}) {
|
|
10
|
+
return {
|
|
11
|
+
id: 'demo',
|
|
12
|
+
intent: 'documentation',
|
|
13
|
+
tags: ['documentation'],
|
|
14
|
+
description: 'test persona',
|
|
15
|
+
harness: 'claude',
|
|
16
|
+
model: 'anthropic/claude-3-5-sonnet',
|
|
17
|
+
systemPrompt: 'be helpful',
|
|
18
|
+
harnessSettings: { reasoning: 'medium', timeoutSeconds: 300 },
|
|
19
|
+
cloud: true,
|
|
20
|
+
schedules: [{ name: 'weekly', cron: '0 9 * * 6' }],
|
|
21
|
+
onEvent: './agent.ts',
|
|
22
|
+
...overrides
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
async function withTempPersona(persona, agentSource = 'export default async () => {};') {
|
|
26
|
+
const dir = await mkdtemp(path.join(os.tmpdir(), 'wf-deploy-test-'));
|
|
27
|
+
const personaPath = path.join(dir, 'persona.json');
|
|
28
|
+
await writeFile(personaPath, JSON.stringify(persona, null, 2), 'utf8');
|
|
29
|
+
await writeFile(path.join(dir, 'agent.ts'), agentSource, 'utf8');
|
|
30
|
+
return {
|
|
31
|
+
dir,
|
|
32
|
+
personaPath,
|
|
33
|
+
cleanup: () => rm(dir, { recursive: true, force: true })
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
test('preflightPersona accepts a valid deploy-shaped persona', async () => {
|
|
37
|
+
const { personaPath, cleanup } = await withTempPersona(basePersonaJson());
|
|
38
|
+
try {
|
|
39
|
+
const pre = await preflightPersona(personaPath);
|
|
40
|
+
assert.equal(pre.persona.id, 'demo');
|
|
41
|
+
assert.deepEqual(pre.schedules, ['weekly']);
|
|
42
|
+
assert.deepEqual(pre.integrations, []);
|
|
43
|
+
assert.equal(pre.warnings.length, 0);
|
|
44
|
+
}
|
|
45
|
+
finally {
|
|
46
|
+
await cleanup();
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
test('preflightPersona refuses when cloud is not true', async () => {
|
|
50
|
+
const { personaPath, cleanup } = await withTempPersona(basePersonaJson({ cloud: false }));
|
|
51
|
+
try {
|
|
52
|
+
await assert.rejects(preflightPersona(personaPath), /not opted into deploy/);
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
await cleanup();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
test('preflightPersona refuses when no triggers are declared', async () => {
|
|
59
|
+
const { personaPath, cleanup } = await withTempPersona(basePersonaJson({ schedules: undefined, integrations: undefined }));
|
|
60
|
+
try {
|
|
61
|
+
await assert.rejects(preflightPersona(personaPath), /has no triggers/);
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
await cleanup();
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
test('preflightPersona refuses when onEvent file is missing', async () => {
|
|
68
|
+
const { personaPath, cleanup } = await withTempPersona(basePersonaJson({ onEvent: './does-not-exist.ts' }));
|
|
69
|
+
try {
|
|
70
|
+
await assert.rejects(preflightPersona(personaPath), /onEvent file not found/);
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
await cleanup();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
test('preflightPersona warns on unknown triggers but does not fail', async () => {
|
|
77
|
+
const { personaPath, cleanup } = await withTempPersona(basePersonaJson({
|
|
78
|
+
schedules: undefined,
|
|
79
|
+
integrations: {
|
|
80
|
+
github: { triggers: [{ on: 'pull_request.imagined_event' }] }
|
|
81
|
+
}
|
|
82
|
+
}));
|
|
83
|
+
try {
|
|
84
|
+
const pre = await preflightPersona(personaPath);
|
|
85
|
+
assert.equal(pre.warnings.length, 1);
|
|
86
|
+
assert.match(pre.warnings[0], /pull_request\.imagined_event/);
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
await cleanup();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
test('deploy --dry-run validates persona and exits before side effects', async () => {
|
|
93
|
+
const { personaPath, cleanup } = await withTempPersona(basePersonaJson());
|
|
94
|
+
const io = createBufferedIO();
|
|
95
|
+
try {
|
|
96
|
+
const result = await deploy({ personaPath, dryRun: true, io });
|
|
97
|
+
assert.equal(result.deploymentId, 'demo');
|
|
98
|
+
assert.deepEqual(result.schedules, ['weekly']);
|
|
99
|
+
assert.ok(io.messages.find((m) => m.message.includes('--dry-run')));
|
|
100
|
+
// No workspace resolution happened.
|
|
101
|
+
assert.ok(!io.messages.find((m) => m.message.startsWith('workspace:')));
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
await cleanup();
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
test('deploy fails clearly when integration is not connected and --no-connect is set', async () => {
|
|
108
|
+
const { personaPath, cleanup } = await withTempPersona(basePersonaJson({ integrations: { github: { triggers: [{ on: 'pull_request.opened' }] } } }));
|
|
109
|
+
const io = createBufferedIO();
|
|
110
|
+
const workspaceAuth = {
|
|
111
|
+
async resolveWorkspace() {
|
|
112
|
+
return { workspace: 'ws-test', token: 'tok' };
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
const integrations = {
|
|
116
|
+
async isConnected() {
|
|
117
|
+
return false;
|
|
118
|
+
},
|
|
119
|
+
async connect() {
|
|
120
|
+
throw new Error('should not be called when --no-connect is set');
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
try {
|
|
124
|
+
await assert.rejects(deploy({ personaPath, mode: 'dev', noConnect: true, io }, { workspaceAuth, integrations }), /failed to connect/);
|
|
125
|
+
assert.ok(io.messages.find((m) => m.level === 'error' && m.message.includes('--no-connect was passed')));
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
await cleanup();
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
test('deploy stages a bundle and hands off to the resolved launcher', async () => {
|
|
132
|
+
const { personaPath, dir, cleanup } = await withTempPersona(basePersonaJson());
|
|
133
|
+
const io = createBufferedIO();
|
|
134
|
+
let stagedTo = '';
|
|
135
|
+
const bundleStager = {
|
|
136
|
+
async stage(input) {
|
|
137
|
+
stagedTo = input.outDir;
|
|
138
|
+
await mkdir(input.outDir, { recursive: true });
|
|
139
|
+
const runner = path.join(input.outDir, 'runner.mjs');
|
|
140
|
+
const bundle = path.join(input.outDir, 'agent.bundle.mjs');
|
|
141
|
+
const personaCopy = path.join(input.outDir, 'persona.json');
|
|
142
|
+
const pkg = path.join(input.outDir, 'package.json');
|
|
143
|
+
await Promise.all([
|
|
144
|
+
writeFile(runner, '', 'utf8'),
|
|
145
|
+
writeFile(bundle, '', 'utf8'),
|
|
146
|
+
writeFile(personaCopy, '{}', 'utf8'),
|
|
147
|
+
writeFile(pkg, '{}', 'utf8')
|
|
148
|
+
]);
|
|
149
|
+
return {
|
|
150
|
+
runnerPath: runner,
|
|
151
|
+
bundlePath: bundle,
|
|
152
|
+
personaCopyPath: personaCopy,
|
|
153
|
+
packageJsonPath: pkg,
|
|
154
|
+
sizeBytes: 2
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
let launched = 0;
|
|
159
|
+
const devLauncher = {
|
|
160
|
+
async launch(input) {
|
|
161
|
+
launched += 1;
|
|
162
|
+
assert.equal(input.persona.id, 'demo');
|
|
163
|
+
return {
|
|
164
|
+
id: 'pid-1',
|
|
165
|
+
async stop() {
|
|
166
|
+
/* no-op */
|
|
167
|
+
},
|
|
168
|
+
done: Promise.resolve({ code: 0 })
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
const workspaceAuth = {
|
|
173
|
+
async resolveWorkspace() {
|
|
174
|
+
return { workspace: 'ws-test', token: 'tok' };
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
const integrations = {
|
|
178
|
+
async isConnected() {
|
|
179
|
+
return true;
|
|
180
|
+
},
|
|
181
|
+
async connect() {
|
|
182
|
+
throw new Error('connect should not be called when everything is already connected');
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
try {
|
|
186
|
+
const result = await deploy({ personaPath, mode: 'dev', io }, { workspaceAuth, integrations, bundle: bundleStager, modes: { dev: devLauncher } });
|
|
187
|
+
assert.equal(launched, 1);
|
|
188
|
+
assert.equal(result.mode, 'dev');
|
|
189
|
+
assert.equal(result.workspace, 'ws-test');
|
|
190
|
+
assert.ok(result.bundleDir.startsWith(dir));
|
|
191
|
+
assert.equal(stagedTo, result.bundleDir);
|
|
192
|
+
assert.ok(io.messages.find((m) => m.message.includes('launched: dev/pid-1')));
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
await cleanup();
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
test('deploy --bundle-out emits to the supplied dir and skips launch', async () => {
|
|
199
|
+
const { personaPath, cleanup } = await withTempPersona(basePersonaJson());
|
|
200
|
+
const outDir = await mkdtemp(path.join(os.tmpdir(), 'wf-deploy-out-'));
|
|
201
|
+
const io = createBufferedIO();
|
|
202
|
+
let launched = false;
|
|
203
|
+
const devLauncher = {
|
|
204
|
+
async launch() {
|
|
205
|
+
launched = true;
|
|
206
|
+
throw new Error('launch should not run with --bundle-out');
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
const bundleStager = {
|
|
210
|
+
async stage(input) {
|
|
211
|
+
await mkdir(input.outDir, { recursive: true });
|
|
212
|
+
const runner = path.join(input.outDir, 'runner.mjs');
|
|
213
|
+
const bundle = path.join(input.outDir, 'agent.bundle.mjs');
|
|
214
|
+
const personaCopy = path.join(input.outDir, 'persona.json');
|
|
215
|
+
const pkg = path.join(input.outDir, 'package.json');
|
|
216
|
+
await Promise.all([
|
|
217
|
+
writeFile(runner, '', 'utf8'),
|
|
218
|
+
writeFile(bundle, '', 'utf8'),
|
|
219
|
+
writeFile(personaCopy, '{}', 'utf8'),
|
|
220
|
+
writeFile(pkg, '{}', 'utf8')
|
|
221
|
+
]);
|
|
222
|
+
return {
|
|
223
|
+
runnerPath: runner,
|
|
224
|
+
bundlePath: bundle,
|
|
225
|
+
personaCopyPath: personaCopy,
|
|
226
|
+
packageJsonPath: pkg,
|
|
227
|
+
sizeBytes: 1
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
try {
|
|
232
|
+
const result = await deploy({ personaPath, mode: 'dev', io, bundleOut: outDir }, {
|
|
233
|
+
workspaceAuth: {
|
|
234
|
+
async resolveWorkspace() {
|
|
235
|
+
return { workspace: 'w', token: 't' };
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
integrations: {
|
|
239
|
+
async isConnected() {
|
|
240
|
+
return true;
|
|
241
|
+
},
|
|
242
|
+
async connect() {
|
|
243
|
+
throw new Error('unreachable');
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
bundle: bundleStager,
|
|
247
|
+
modes: { dev: devLauncher }
|
|
248
|
+
});
|
|
249
|
+
assert.equal(launched, false);
|
|
250
|
+
assert.equal(result.bundleDir, path.resolve(outDir));
|
|
251
|
+
assert.ok(io.messages.find((m) => m.message.includes('skipping launch')));
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
await cleanup();
|
|
255
|
+
await rm(outDir, { recursive: true, force: true });
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
test('--mode cloud throws a clear "not yet available" error', async () => {
|
|
259
|
+
const { personaPath, cleanup } = await withTempPersona(basePersonaJson());
|
|
260
|
+
const io = createBufferedIO();
|
|
261
|
+
try {
|
|
262
|
+
await assert.rejects(deploy({ personaPath, mode: 'cloud', io }, {
|
|
263
|
+
workspaceAuth: {
|
|
264
|
+
async resolveWorkspace() {
|
|
265
|
+
return { workspace: 'w', token: 't' };
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
integrations: {
|
|
269
|
+
async isConnected() {
|
|
270
|
+
return true;
|
|
271
|
+
},
|
|
272
|
+
async connect() {
|
|
273
|
+
throw new Error('unreachable');
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
bundle: {
|
|
277
|
+
async stage() {
|
|
278
|
+
return {
|
|
279
|
+
runnerPath: '/tmp/r',
|
|
280
|
+
bundlePath: '/tmp/b',
|
|
281
|
+
personaCopyPath: '/tmp/p',
|
|
282
|
+
packageJsonPath: '/tmp/k',
|
|
283
|
+
sizeBytes: 0
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}), /--mode cloud is not yet available/);
|
|
288
|
+
}
|
|
289
|
+
finally {
|
|
290
|
+
await cleanup();
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
//# sourceMappingURL=deploy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.test.js","sourceRoot":"","sources":["../src/deploy.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { deploy, pickMode, type DeployResolvers } from './deploy.js';
|
|
2
|
+
export { preflightPersona } from './preflight.js';
|
|
3
|
+
export { connectIntegrations, envIntegrationResolver, type ConnectAllInput, type ConnectAllResult, type IntegrationConnectResolver, type ProviderSubscriptionResolver } from './connect.js';
|
|
4
|
+
export { envWorkspaceAuth, type WorkspaceAuth } from './login.js';
|
|
5
|
+
export { createTerminalIO, createBufferedIO, type BufferedIO } from './io.js';
|
|
6
|
+
export { bundleStager } from './bundle.js';
|
|
7
|
+
export { devLauncher } from './modes/dev.js';
|
|
8
|
+
export { sandboxLauncher, resolveSandboxAuth, type SandboxAuth } from './modes/sandbox.js';
|
|
9
|
+
export { cloudLauncher } from './modes/cloud.js';
|
|
10
|
+
export type { BundleResult, BundleStageInput, BundleStager, DeployIO, DeployMode, DeployOptions, DeployPreflight, DeployResult, IntegrationConnectOutcome, ModeLaunchHandle, ModeLaunchInput, ModeLauncher } from './types.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EAClC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACb,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { deploy, pickMode } from './deploy.js';
|
|
2
|
+
export { preflightPersona } from './preflight.js';
|
|
3
|
+
export { connectIntegrations, envIntegrationResolver } from './connect.js';
|
|
4
|
+
export { envWorkspaceAuth } from './login.js';
|
|
5
|
+
export { createTerminalIO, createBufferedIO } from './io.js';
|
|
6
|
+
export { bundleStager } from './bundle.js';
|
|
7
|
+
export { devLauncher } from './modes/dev.js';
|
|
8
|
+
export { sandboxLauncher, resolveSandboxAuth } from './modes/sandbox.js';
|
|
9
|
+
export { cloudLauncher } from './modes/cloud.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAwB,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAKvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAsB,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAoB,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/io.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DeployIO } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Default IO implementation backed by the terminal. Writes status to
|
|
4
|
+
* stdout/stderr and uses node:readline for interactive prompts. Tests
|
|
5
|
+
* supply a deterministic in-memory IO via `DeployOptions.io`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createTerminalIO(): DeployIO;
|
|
8
|
+
/**
|
|
9
|
+
* Buffered IO collected for assertions. Used by tests to verify the
|
|
10
|
+
* orchestrator's message flow without touching the terminal.
|
|
11
|
+
*/
|
|
12
|
+
export interface BufferedIO extends DeployIO {
|
|
13
|
+
messages: Array<{
|
|
14
|
+
level: 'info' | 'warn' | 'error';
|
|
15
|
+
message: string;
|
|
16
|
+
}>;
|
|
17
|
+
/** Queue answers for upcoming prompts; FIFO. */
|
|
18
|
+
scriptAnswers(values: string[]): void;
|
|
19
|
+
scriptConfirmations(values: boolean[]): void;
|
|
20
|
+
}
|
|
21
|
+
export declare function createBufferedIO(): BufferedIO;
|
|
22
|
+
//# sourceMappingURL=io.d.ts.map
|
package/dist/io.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,QAAQ,CAqC3C;AAED;;;GAGG;AACH,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,gDAAgD;IAChD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtC,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC9C;AAED,wBAAgB,gBAAgB,IAAI,UAAU,CA6B7C"}
|
package/dist/io.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import readline from 'node:readline/promises';
|
|
2
|
+
/**
|
|
3
|
+
* Default IO implementation backed by the terminal. Writes status to
|
|
4
|
+
* stdout/stderr and uses node:readline for interactive prompts. Tests
|
|
5
|
+
* supply a deterministic in-memory IO via `DeployOptions.io`.
|
|
6
|
+
*/
|
|
7
|
+
export function createTerminalIO() {
|
|
8
|
+
// One short-lived readline interface per question. Holding a long-
|
|
9
|
+
// lived interface keeps stdin in raw mode and pins the event loop
|
|
10
|
+
// open, so non-interactive callers (`workforce deploy --no-connect`
|
|
11
|
+
// in CI) see `process.exit(0)` hang or get phantom keystrokes.
|
|
12
|
+
async function ask(question) {
|
|
13
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
14
|
+
try {
|
|
15
|
+
return await rl.question(question);
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
rl.close();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
info(message) {
|
|
23
|
+
process.stdout.write(`${message}\n`);
|
|
24
|
+
},
|
|
25
|
+
warn(message) {
|
|
26
|
+
process.stderr.write(`! ${message}\n`);
|
|
27
|
+
},
|
|
28
|
+
error(message) {
|
|
29
|
+
process.stderr.write(`x ${message}\n`);
|
|
30
|
+
},
|
|
31
|
+
async prompt(question, opts = {}) {
|
|
32
|
+
const suffix = opts.defaultValue !== undefined ? ` [${opts.defaultValue}]` : '';
|
|
33
|
+
const answer = (await ask(`${question}${suffix} `)).trim();
|
|
34
|
+
return answer.length > 0 ? answer : opts.defaultValue ?? '';
|
|
35
|
+
},
|
|
36
|
+
async confirm(question, opts = {}) {
|
|
37
|
+
const def = opts.defaultValue ?? false;
|
|
38
|
+
const suffix = def ? ' [Y/n]' : ' [y/N]';
|
|
39
|
+
const answer = (await ask(`${question}${suffix} `)).trim().toLowerCase();
|
|
40
|
+
if (answer === '')
|
|
41
|
+
return def;
|
|
42
|
+
return answer === 'y' || answer === 'yes';
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function createBufferedIO() {
|
|
47
|
+
const messages = [];
|
|
48
|
+
const answerQueue = [];
|
|
49
|
+
const confirmQueue = [];
|
|
50
|
+
return {
|
|
51
|
+
messages,
|
|
52
|
+
info(message) {
|
|
53
|
+
messages.push({ level: 'info', message });
|
|
54
|
+
},
|
|
55
|
+
warn(message) {
|
|
56
|
+
messages.push({ level: 'warn', message });
|
|
57
|
+
},
|
|
58
|
+
error(message) {
|
|
59
|
+
messages.push({ level: 'error', message });
|
|
60
|
+
},
|
|
61
|
+
async prompt(_question, opts) {
|
|
62
|
+
return answerQueue.shift() ?? opts?.defaultValue ?? '';
|
|
63
|
+
},
|
|
64
|
+
async confirm(_question, opts) {
|
|
65
|
+
const next = confirmQueue.shift();
|
|
66
|
+
return next ?? opts?.defaultValue ?? false;
|
|
67
|
+
},
|
|
68
|
+
scriptAnswers(values) {
|
|
69
|
+
answerQueue.push(...values);
|
|
70
|
+
},
|
|
71
|
+
scriptConfirmations(values) {
|
|
72
|
+
confirmQueue.push(...values);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=io.js.map
|
package/dist/io.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"}
|