workos 0.7.2 → 0.8.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/README.md +353 -8
- package/dist/bin.js +939 -129
- package/dist/bin.js.map +1 -1
- package/dist/commands/api-key-mgmt.d.ts +16 -0
- package/dist/commands/api-key-mgmt.js +96 -0
- package/dist/commands/api-key-mgmt.js.map +1 -0
- package/dist/commands/audit-log.d.ts +26 -0
- package/dist/commands/audit-log.js +155 -0
- package/dist/commands/audit-log.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.js +54 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/connection.d.ts +13 -0
- package/dist/commands/connection.js +94 -0
- package/dist/commands/connection.js.map +1 -0
- package/dist/commands/debug-sso.d.ts +1 -0
- package/dist/commands/debug-sso.js +78 -0
- package/dist/commands/debug-sso.js.map +1 -0
- package/dist/commands/debug-sync.d.ts +1 -0
- package/dist/commands/debug-sync.js +102 -0
- package/dist/commands/debug-sync.js.map +1 -0
- package/dist/commands/directory.d.ts +27 -0
- package/dist/commands/directory.js +174 -0
- package/dist/commands/directory.js.map +1 -0
- package/dist/commands/env.js +41 -28
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/event.d.ts +9 -0
- package/dist/commands/event.js +43 -0
- package/dist/commands/event.js.map +1 -0
- package/dist/commands/feature-flag.d.ts +12 -0
- package/dist/commands/feature-flag.js +96 -0
- package/dist/commands/feature-flag.js.map +1 -0
- package/dist/commands/install.d.ts +2 -18
- package/dist/commands/install.js +13 -20
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/invitation.d.ts +19 -0
- package/dist/commands/invitation.js +94 -0
- package/dist/commands/invitation.js.map +1 -0
- package/dist/commands/membership.d.ts +20 -0
- package/dist/commands/membership.js +129 -0
- package/dist/commands/membership.js.map +1 -0
- package/dist/commands/onboard-user.d.ts +7 -0
- package/dist/commands/onboard-user.js +61 -0
- package/dist/commands/onboard-user.js.map +1 -0
- package/dist/commands/org-domain.d.ts +4 -0
- package/dist/commands/org-domain.js +45 -0
- package/dist/commands/org-domain.js.map +1 -0
- package/dist/commands/organization.d.ts +1 -5
- package/dist/commands/organization.js +34 -73
- package/dist/commands/organization.js.map +1 -1
- package/dist/commands/permission.d.ts +20 -0
- package/dist/commands/permission.js +93 -0
- package/dist/commands/permission.js.map +1 -0
- package/dist/commands/portal.d.ts +7 -0
- package/dist/commands/portal.js +26 -0
- package/dist/commands/portal.js.map +1 -0
- package/dist/commands/role.d.ts +17 -0
- package/dist/commands/role.js +122 -0
- package/dist/commands/role.js.map +1 -0
- package/dist/commands/seed.d.ts +4 -0
- package/dist/commands/seed.js +238 -0
- package/dist/commands/seed.js.map +1 -0
- package/dist/commands/session.d.ts +8 -0
- package/dist/commands/session.js +63 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup-org.d.ts +6 -0
- package/dist/commands/setup-org.js +99 -0
- package/dist/commands/setup-org.js.map +1 -0
- package/dist/commands/user.js +35 -71
- package/dist/commands/user.js.map +1 -1
- package/dist/commands/vault.d.ts +24 -0
- package/dist/commands/vault.js +120 -0
- package/dist/commands/vault.js.map +1 -0
- package/dist/commands/webhook.d.ts +3 -0
- package/dist/commands/webhook.js +73 -0
- package/dist/commands/webhook.js.map +1 -0
- package/dist/dashboard/components/DiffPanel.js.map +1 -1
- package/dist/dashboard/lib/logo-frames.js +1 -1
- package/dist/dashboard/lib/logo-frames.js.map +1 -1
- package/dist/doctor/checks/auth-patterns.js +23 -0
- package/dist/doctor/checks/auth-patterns.js.map +1 -1
- package/dist/doctor/checks/dashboard.js.map +1 -1
- package/dist/doctor/checks/environment.js.map +1 -1
- package/dist/doctor/checks/sdk.js +3 -13
- package/dist/doctor/checks/sdk.js.map +1 -1
- package/dist/integrations/go/index.js +1 -3
- package/dist/integrations/go/index.js.map +1 -1
- package/dist/lib/adapters/headless-adapter.d.ts +67 -0
- package/dist/lib/adapters/headless-adapter.js +263 -0
- package/dist/lib/adapters/headless-adapter.js.map +1 -0
- package/dist/lib/adapters/index.d.ts +1 -0
- package/dist/lib/adapters/index.js +1 -0
- package/dist/lib/adapters/index.js.map +1 -1
- package/dist/lib/agent-interface.d.ts +3 -11
- package/dist/lib/agent-interface.js +1 -13
- package/dist/lib/agent-interface.js.map +1 -1
- package/dist/lib/api-error-handler.d.ts +6 -0
- package/dist/lib/api-error-handler.js +58 -0
- package/dist/lib/api-error-handler.js.map +1 -0
- package/dist/lib/api-key.js +5 -1
- package/dist/lib/api-key.js.map +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/credential-proxy.js +0 -6
- package/dist/lib/credential-proxy.js.map +1 -1
- package/dist/lib/device-auth.js +1 -1
- package/dist/lib/device-auth.js.map +1 -1
- package/dist/lib/ensure-auth.js +25 -4
- package/dist/lib/ensure-auth.js.map +1 -1
- package/dist/lib/env-writer.js +21 -0
- package/dist/lib/env-writer.js.map +1 -1
- package/dist/lib/installer-core.d.ts +12 -12
- package/dist/lib/run-with-core.js +25 -4
- package/dist/lib/run-with-core.js.map +1 -1
- package/dist/lib/validation/validator.js +0 -1
- package/dist/lib/validation/validator.js.map +1 -1
- package/dist/lib/workos-client.d.ts +58 -0
- package/dist/lib/workos-client.js +137 -0
- package/dist/lib/workos-client.js.map +1 -0
- package/dist/run.d.ts +9 -3
- package/dist/run.js +5 -2
- package/dist/run.js.map +1 -1
- package/dist/smoke-test.ts +881 -0
- package/dist/steps/run-prettier.js +1 -1
- package/dist/steps/run-prettier.js.map +1 -1
- package/dist/utils/analytics.d.ts +1 -1
- package/dist/utils/analytics.js.map +1 -1
- package/dist/utils/clack-utils.d.ts +4 -0
- package/dist/utils/clack-utils.js +10 -3
- package/dist/utils/clack-utils.js.map +1 -1
- package/dist/utils/environment.js +8 -0
- package/dist/utils/environment.js.map +1 -1
- package/dist/utils/exit-codes.d.ts +22 -0
- package/dist/utils/exit-codes.js +30 -0
- package/dist/utils/exit-codes.js.map +1 -0
- package/dist/utils/help-json.d.ts +45 -0
- package/dist/utils/help-json.js +1161 -0
- package/dist/utils/help-json.js.map +1 -0
- package/dist/utils/ndjson.d.ts +16 -0
- package/dist/utils/ndjson.js +18 -0
- package/dist/utils/ndjson.js.map +1 -0
- package/dist/utils/output.d.ts +40 -0
- package/dist/utils/output.js +95 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/package-manager.js +2 -3
- package/dist/utils/package-manager.js.map +1 -1
- package/dist/utils/register-subcommand.d.ts +7 -0
- package/dist/utils/register-subcommand.js +36 -0
- package/dist/utils/register-subcommand.js.map +1 -0
- package/dist/utils/telemetry-types.d.ts +1 -1
- package/dist/utils/telemetry-types.js.map +1 -1
- package/dist/utils/types.d.ts +12 -0
- package/dist/utils/types.js.map +1 -1
- package/package.json +20 -16
- package/skills/workos-management/SKILL.md +250 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { writeNDJSON } from '../../utils/ndjson.js';
|
|
2
|
+
import { ExitCode } from '../../utils/exit-codes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Non-interactive adapter for CI/CD and agent consumption.
|
|
5
|
+
*
|
|
6
|
+
* Subscribes to the same installer events as CLIAdapter but never prompts.
|
|
7
|
+
* All decisions are auto-resolved with sensible defaults (overridable via flags).
|
|
8
|
+
* Progress is streamed as NDJSON to stdout.
|
|
9
|
+
*/
|
|
10
|
+
export class HeadlessAdapter {
|
|
11
|
+
emitter;
|
|
12
|
+
sendEvent;
|
|
13
|
+
debug;
|
|
14
|
+
options;
|
|
15
|
+
isStarted = false;
|
|
16
|
+
handlers = new Map();
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.emitter = config.emitter;
|
|
19
|
+
this.sendEvent = config.sendEvent;
|
|
20
|
+
this.debug = config.debug ?? false;
|
|
21
|
+
this.options = config.options;
|
|
22
|
+
}
|
|
23
|
+
async start() {
|
|
24
|
+
if (this.isStarted)
|
|
25
|
+
return;
|
|
26
|
+
this.isStarted = true;
|
|
27
|
+
// Auth events
|
|
28
|
+
this.subscribe('auth:success', this.handleAuthSuccess);
|
|
29
|
+
this.subscribe('auth:failure', this.handleAuthFailure);
|
|
30
|
+
// Detection events
|
|
31
|
+
this.subscribe('detection:complete', this.handleDetectionComplete);
|
|
32
|
+
this.subscribe('detection:none', this.handleDetectionNone);
|
|
33
|
+
// Git events — auto-resolve
|
|
34
|
+
this.subscribe('git:dirty', this.handleGitDirty);
|
|
35
|
+
// Credential events — auto-resolve
|
|
36
|
+
this.subscribe('credentials:found', this.handleCredentialsFound);
|
|
37
|
+
this.subscribe('credentials:request', this.handleCredentialsRequest);
|
|
38
|
+
this.subscribe('credentials:env:prompt', this.handleEnvScanPrompt);
|
|
39
|
+
this.subscribe('credentials:env:found', this.handleEnvCredentialsFound);
|
|
40
|
+
// Device auth (should not happen in headless, but log if it does)
|
|
41
|
+
this.subscribe('device:started', this.handleDeviceStarted);
|
|
42
|
+
// Staging
|
|
43
|
+
this.subscribe('staging:fetching', this.handleStagingFetching);
|
|
44
|
+
this.subscribe('staging:success', this.handleStagingSuccess);
|
|
45
|
+
// Config
|
|
46
|
+
this.subscribe('config:complete', this.handleConfigComplete);
|
|
47
|
+
// Agent progress
|
|
48
|
+
this.subscribe('agent:start', this.handleAgentStart);
|
|
49
|
+
this.subscribe('agent:progress', this.handleAgentProgress);
|
|
50
|
+
// Validation
|
|
51
|
+
this.subscribe('validation:start', this.handleValidationStart);
|
|
52
|
+
this.subscribe('validation:issues', this.handleValidationIssues);
|
|
53
|
+
this.subscribe('validation:complete', this.handleValidationComplete);
|
|
54
|
+
// Branch — auto-resolve
|
|
55
|
+
this.subscribe('branch:prompt', this.handleBranchPrompt);
|
|
56
|
+
this.subscribe('branch:created', this.handleBranchCreated);
|
|
57
|
+
// Post-install — auto-resolve
|
|
58
|
+
this.subscribe('postinstall:changes', this.handlePostInstallChanges);
|
|
59
|
+
this.subscribe('postinstall:commit:prompt', this.handleCommitPrompt);
|
|
60
|
+
this.subscribe('postinstall:commit:success', this.handleCommitSuccess);
|
|
61
|
+
this.subscribe('postinstall:commit:failed', this.handleCommitFailed);
|
|
62
|
+
this.subscribe('postinstall:pr:prompt', this.handlePrPrompt);
|
|
63
|
+
this.subscribe('postinstall:pr:success', this.handlePrSuccess);
|
|
64
|
+
this.subscribe('postinstall:pr:failed', this.handlePrFailed);
|
|
65
|
+
this.subscribe('postinstall:push:failed', this.handlePushFailed);
|
|
66
|
+
this.subscribe('postinstall:manual', this.handleManualInstructions);
|
|
67
|
+
// Terminal events
|
|
68
|
+
this.subscribe('complete', this.handleComplete);
|
|
69
|
+
this.subscribe('error', this.handleError);
|
|
70
|
+
}
|
|
71
|
+
async stop() {
|
|
72
|
+
if (!this.isStarted)
|
|
73
|
+
return;
|
|
74
|
+
for (const [event, handler] of this.handlers) {
|
|
75
|
+
this.emitter.off(event, handler);
|
|
76
|
+
}
|
|
77
|
+
this.handlers.clear();
|
|
78
|
+
this.isStarted = false;
|
|
79
|
+
}
|
|
80
|
+
subscribe(event, handler) {
|
|
81
|
+
const boundHandler = handler.bind(this);
|
|
82
|
+
this.handlers.set(event, boundHandler);
|
|
83
|
+
this.emitter.on(event, boundHandler);
|
|
84
|
+
}
|
|
85
|
+
debugLog(message) {
|
|
86
|
+
if (this.debug) {
|
|
87
|
+
writeNDJSON({ type: 'debug', message });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ===== Auth Handlers =====
|
|
91
|
+
handleAuthSuccess = () => {
|
|
92
|
+
writeNDJSON({ type: 'auth:success' });
|
|
93
|
+
};
|
|
94
|
+
handleAuthFailure = ({ message }) => {
|
|
95
|
+
writeNDJSON({ type: 'auth:required', message });
|
|
96
|
+
process.exit(ExitCode.AUTH_REQUIRED);
|
|
97
|
+
};
|
|
98
|
+
// ===== Detection Handlers =====
|
|
99
|
+
handleDetectionComplete = ({ integration }) => {
|
|
100
|
+
writeNDJSON({ type: 'detection:complete', integration });
|
|
101
|
+
};
|
|
102
|
+
handleDetectionNone = () => {
|
|
103
|
+
writeNDJSON({ type: 'detection:none' });
|
|
104
|
+
};
|
|
105
|
+
// ===== Git Handlers (auto-resolve) =====
|
|
106
|
+
handleGitDirty = ({ files }) => {
|
|
107
|
+
writeNDJSON({ type: 'git:status', dirty: true, files });
|
|
108
|
+
if (this.options.noGitCheck) {
|
|
109
|
+
writeNDJSON({ type: 'git:decision', action: 'continue' });
|
|
110
|
+
this.sendEvent({ type: 'GIT_CONFIRMED' });
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
writeNDJSON({
|
|
114
|
+
type: 'error',
|
|
115
|
+
code: 'git_dirty',
|
|
116
|
+
message: 'Git working tree is dirty in non-interactive mode. ' +
|
|
117
|
+
'Commit or stash your changes, or rerun with --no-git-check to proceed.',
|
|
118
|
+
});
|
|
119
|
+
writeNDJSON({ type: 'git:decision', action: 'cancel' });
|
|
120
|
+
this.sendEvent({ type: 'GIT_CANCELLED' });
|
|
121
|
+
process.exit(ExitCode.GENERAL_ERROR);
|
|
122
|
+
};
|
|
123
|
+
// ===== Credential Handlers (auto-resolve) =====
|
|
124
|
+
handleCredentialsFound = () => {
|
|
125
|
+
writeNDJSON({ type: 'credentials:found', source: 'env' });
|
|
126
|
+
};
|
|
127
|
+
handleCredentialsRequest = ({ requiresApiKey }) => {
|
|
128
|
+
if (!this.options.clientId) {
|
|
129
|
+
writeNDJSON({
|
|
130
|
+
type: 'error',
|
|
131
|
+
code: 'missing_credentials',
|
|
132
|
+
message: 'Client ID required in non-interactive mode. Pass --client-id flag.',
|
|
133
|
+
});
|
|
134
|
+
process.exit(ExitCode.GENERAL_ERROR);
|
|
135
|
+
}
|
|
136
|
+
if (requiresApiKey && !this.options.apiKey) {
|
|
137
|
+
writeNDJSON({
|
|
138
|
+
type: 'error',
|
|
139
|
+
code: 'missing_credentials',
|
|
140
|
+
message: 'API key required for this framework. Pass --api-key flag.',
|
|
141
|
+
});
|
|
142
|
+
process.exit(ExitCode.GENERAL_ERROR);
|
|
143
|
+
}
|
|
144
|
+
writeNDJSON({ type: 'credentials:provided', source: 'flag' });
|
|
145
|
+
this.sendEvent({
|
|
146
|
+
type: 'CREDENTIALS_SUBMITTED',
|
|
147
|
+
apiKey: this.options.apiKey ?? '',
|
|
148
|
+
clientId: this.options.clientId,
|
|
149
|
+
});
|
|
150
|
+
};
|
|
151
|
+
handleEnvScanPrompt = () => {
|
|
152
|
+
writeNDJSON({ type: 'credentials:env:scanning' });
|
|
153
|
+
this.sendEvent({ type: 'ENV_SCAN_APPROVED' });
|
|
154
|
+
};
|
|
155
|
+
handleEnvCredentialsFound = ({ sourcePath }) => {
|
|
156
|
+
writeNDJSON({ type: 'credentials:found', source: 'env', sourcePath });
|
|
157
|
+
};
|
|
158
|
+
// ===== Device Auth (should not occur in headless) =====
|
|
159
|
+
handleDeviceStarted = ({ verificationUri, userCode }) => {
|
|
160
|
+
writeNDJSON({
|
|
161
|
+
type: 'auth:device_required',
|
|
162
|
+
verificationUri,
|
|
163
|
+
userCode,
|
|
164
|
+
message: 'Device auth cannot proceed in non-interactive mode',
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
// ===== Staging =====
|
|
168
|
+
handleStagingFetching = () => {
|
|
169
|
+
writeNDJSON({ type: 'staging:fetching' });
|
|
170
|
+
};
|
|
171
|
+
handleStagingSuccess = () => {
|
|
172
|
+
writeNDJSON({ type: 'staging:success' });
|
|
173
|
+
};
|
|
174
|
+
// ===== Config =====
|
|
175
|
+
handleConfigComplete = () => {
|
|
176
|
+
writeNDJSON({ type: 'config:complete' });
|
|
177
|
+
};
|
|
178
|
+
// ===== Agent Progress =====
|
|
179
|
+
handleAgentStart = () => {
|
|
180
|
+
writeNDJSON({ type: 'agent:start' });
|
|
181
|
+
};
|
|
182
|
+
handleAgentProgress = ({ step, detail }) => {
|
|
183
|
+
const message = detail ? `${step}: ${detail}` : step;
|
|
184
|
+
writeNDJSON({ type: 'agent:progress', message });
|
|
185
|
+
};
|
|
186
|
+
// ===== Validation =====
|
|
187
|
+
handleValidationStart = ({ framework }) => {
|
|
188
|
+
writeNDJSON({ type: 'validation:start', framework });
|
|
189
|
+
};
|
|
190
|
+
handleValidationIssues = ({ issues }) => {
|
|
191
|
+
for (const issue of issues) {
|
|
192
|
+
writeNDJSON({ type: 'validation:issue', severity: issue.severity, message: issue.message });
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
handleValidationComplete = ({ passed, issueCount }) => {
|
|
196
|
+
writeNDJSON({ type: 'validation:complete', passed, issues: issueCount });
|
|
197
|
+
};
|
|
198
|
+
// ===== Branch (auto-resolve) =====
|
|
199
|
+
handleBranchPrompt = () => {
|
|
200
|
+
if (this.options.noBranch) {
|
|
201
|
+
writeNDJSON({ type: 'branch:skipped', reason: '--no-branch flag' });
|
|
202
|
+
this.sendEvent({ type: 'BRANCH_CONTINUE' });
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
writeNDJSON({ type: 'branch:creating' });
|
|
206
|
+
this.sendEvent({ type: 'BRANCH_CREATE' });
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
handleBranchCreated = ({ branch }) => {
|
|
210
|
+
writeNDJSON({ type: 'branch:created', name: branch });
|
|
211
|
+
};
|
|
212
|
+
// ===== Post-install (auto-resolve) =====
|
|
213
|
+
handlePostInstallChanges = ({ files }) => {
|
|
214
|
+
writeNDJSON({ type: 'postinstall:changes', files, count: files.length });
|
|
215
|
+
};
|
|
216
|
+
handleCommitPrompt = () => {
|
|
217
|
+
if (this.options.noCommit) {
|
|
218
|
+
writeNDJSON({ type: 'commit:skipped', reason: '--no-commit flag' });
|
|
219
|
+
this.sendEvent({ type: 'COMMIT_DECLINED' });
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
writeNDJSON({ type: 'commit:auto' });
|
|
223
|
+
this.sendEvent({ type: 'COMMIT_APPROVED' });
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
handleCommitSuccess = ({ message }) => {
|
|
227
|
+
writeNDJSON({ type: 'commit:created', message });
|
|
228
|
+
};
|
|
229
|
+
handleCommitFailed = ({ error }) => {
|
|
230
|
+
writeNDJSON({ type: 'commit:failed', error });
|
|
231
|
+
};
|
|
232
|
+
handlePrPrompt = () => {
|
|
233
|
+
if (this.options.createPr) {
|
|
234
|
+
writeNDJSON({ type: 'pr:creating' });
|
|
235
|
+
this.sendEvent({ type: 'PR_APPROVED' });
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
writeNDJSON({ type: 'pr:skipped', reason: '--create-pr not set' });
|
|
239
|
+
this.sendEvent({ type: 'PR_DECLINED' });
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
handlePrSuccess = ({ url }) => {
|
|
243
|
+
writeNDJSON({ type: 'pr:created', url });
|
|
244
|
+
};
|
|
245
|
+
handlePrFailed = ({ error }) => {
|
|
246
|
+
writeNDJSON({ type: 'pr:failed', error });
|
|
247
|
+
};
|
|
248
|
+
handlePushFailed = ({ error }) => {
|
|
249
|
+
writeNDJSON({ type: 'push:failed', error });
|
|
250
|
+
};
|
|
251
|
+
handleManualInstructions = ({ instructions }) => {
|
|
252
|
+
writeNDJSON({ type: 'postinstall:manual', instructions });
|
|
253
|
+
};
|
|
254
|
+
// ===== Terminal Events =====
|
|
255
|
+
handleComplete = ({ success, summary }) => {
|
|
256
|
+
writeNDJSON({ type: 'complete', success, summary });
|
|
257
|
+
};
|
|
258
|
+
handleError = ({ message, stack }) => {
|
|
259
|
+
writeNDJSON({ type: 'error', code: 'installer_error', message });
|
|
260
|
+
this.debugLog(stack ?? '');
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=headless-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless-adapter.js","sourceRoot":"","sources":["../../../src/lib/adapters/headless-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InstallerAdapter, AdapterConfig } from './types.js';\nimport type { InstallerEventEmitter, InstallerEvents } from '../events.js';\nimport { writeNDJSON } from '../../utils/ndjson.js';\nimport { ExitCode } from '../../utils/exit-codes.js';\n\n/**\n * Options controlling headless adapter behavior.\n * Corresponds to CLI flags passed in non-interactive mode.\n */\nexport interface HeadlessOptions {\n apiKey?: string;\n clientId?: string;\n noBranch?: boolean;\n noCommit?: boolean;\n createPr?: boolean;\n noGitCheck?: boolean;\n}\n\n/**\n * Non-interactive adapter for CI/CD and agent consumption.\n *\n * Subscribes to the same installer events as CLIAdapter but never prompts.\n * All decisions are auto-resolved with sensible defaults (overridable via flags).\n * Progress is streamed as NDJSON to stdout.\n */\nexport class HeadlessAdapter implements InstallerAdapter {\n readonly emitter: InstallerEventEmitter;\n private sendEvent: AdapterConfig['sendEvent'];\n private debug: boolean;\n private options: HeadlessOptions;\n private isStarted = false;\n private handlers = new Map<string, (...args: unknown[]) => void>();\n\n constructor(config: AdapterConfig & { options: HeadlessOptions }) {\n this.emitter = config.emitter;\n this.sendEvent = config.sendEvent;\n this.debug = config.debug ?? false;\n this.options = config.options;\n }\n\n async start(): Promise<void> {\n if (this.isStarted) return;\n this.isStarted = true;\n\n // Auth events\n this.subscribe('auth:success', this.handleAuthSuccess);\n this.subscribe('auth:failure', this.handleAuthFailure);\n\n // Detection events\n this.subscribe('detection:complete', this.handleDetectionComplete);\n this.subscribe('detection:none', this.handleDetectionNone);\n\n // Git events — auto-resolve\n this.subscribe('git:dirty', this.handleGitDirty);\n\n // Credential events — auto-resolve\n this.subscribe('credentials:found', this.handleCredentialsFound);\n this.subscribe('credentials:request', this.handleCredentialsRequest);\n this.subscribe('credentials:env:prompt', this.handleEnvScanPrompt);\n this.subscribe('credentials:env:found', this.handleEnvCredentialsFound);\n\n // Device auth (should not happen in headless, but log if it does)\n this.subscribe('device:started', this.handleDeviceStarted);\n\n // Staging\n this.subscribe('staging:fetching', this.handleStagingFetching);\n this.subscribe('staging:success', this.handleStagingSuccess);\n\n // Config\n this.subscribe('config:complete', this.handleConfigComplete);\n\n // Agent progress\n this.subscribe('agent:start', this.handleAgentStart);\n this.subscribe('agent:progress', this.handleAgentProgress);\n\n // Validation\n this.subscribe('validation:start', this.handleValidationStart);\n this.subscribe('validation:issues', this.handleValidationIssues);\n this.subscribe('validation:complete', this.handleValidationComplete);\n\n // Branch — auto-resolve\n this.subscribe('branch:prompt', this.handleBranchPrompt);\n this.subscribe('branch:created', this.handleBranchCreated);\n\n // Post-install — auto-resolve\n this.subscribe('postinstall:changes', this.handlePostInstallChanges);\n this.subscribe('postinstall:commit:prompt', this.handleCommitPrompt);\n this.subscribe('postinstall:commit:success', this.handleCommitSuccess);\n this.subscribe('postinstall:commit:failed', this.handleCommitFailed);\n this.subscribe('postinstall:pr:prompt', this.handlePrPrompt);\n this.subscribe('postinstall:pr:success', this.handlePrSuccess);\n this.subscribe('postinstall:pr:failed', this.handlePrFailed);\n this.subscribe('postinstall:push:failed', this.handlePushFailed);\n this.subscribe('postinstall:manual', this.handleManualInstructions);\n\n // Terminal events\n this.subscribe('complete', this.handleComplete);\n this.subscribe('error', this.handleError);\n }\n\n async stop(): Promise<void> {\n if (!this.isStarted) return;\n\n for (const [event, handler] of this.handlers) {\n this.emitter.off(event as keyof InstallerEvents, handler as never);\n }\n this.handlers.clear();\n this.isStarted = false;\n }\n\n private subscribe<K extends keyof InstallerEvents>(\n event: K,\n handler: (payload: InstallerEvents[K]) => void | Promise<void>,\n ): void {\n const boundHandler = handler.bind(this);\n this.handlers.set(event, boundHandler as (...args: unknown[]) => void);\n this.emitter.on(event, boundHandler);\n }\n\n private debugLog(message: string): void {\n if (this.debug) {\n writeNDJSON({ type: 'debug', message });\n }\n }\n\n // ===== Auth Handlers =====\n\n private handleAuthSuccess = (): void => {\n writeNDJSON({ type: 'auth:success' });\n };\n\n private handleAuthFailure = ({ message }: InstallerEvents['auth:failure']): void => {\n writeNDJSON({ type: 'auth:required', message });\n process.exit(ExitCode.AUTH_REQUIRED);\n };\n\n // ===== Detection Handlers =====\n\n private handleDetectionComplete = ({ integration }: InstallerEvents['detection:complete']): void => {\n writeNDJSON({ type: 'detection:complete', integration });\n };\n\n private handleDetectionNone = (): void => {\n writeNDJSON({ type: 'detection:none' });\n };\n\n // ===== Git Handlers (auto-resolve) =====\n\n private handleGitDirty = ({ files }: InstallerEvents['git:dirty']): void => {\n writeNDJSON({ type: 'git:status', dirty: true, files });\n\n if (this.options.noGitCheck) {\n writeNDJSON({ type: 'git:decision', action: 'continue' });\n this.sendEvent({ type: 'GIT_CONFIRMED' });\n return;\n }\n\n writeNDJSON({\n type: 'error',\n code: 'git_dirty',\n message:\n 'Git working tree is dirty in non-interactive mode. ' +\n 'Commit or stash your changes, or rerun with --no-git-check to proceed.',\n });\n writeNDJSON({ type: 'git:decision', action: 'cancel' });\n this.sendEvent({ type: 'GIT_CANCELLED' });\n process.exit(ExitCode.GENERAL_ERROR);\n };\n\n // ===== Credential Handlers (auto-resolve) =====\n\n private handleCredentialsFound = (): void => {\n writeNDJSON({ type: 'credentials:found', source: 'env' });\n };\n\n private handleCredentialsRequest = ({ requiresApiKey }: InstallerEvents['credentials:request']): void => {\n if (!this.options.clientId) {\n writeNDJSON({\n type: 'error',\n code: 'missing_credentials',\n message: 'Client ID required in non-interactive mode. Pass --client-id flag.',\n });\n process.exit(ExitCode.GENERAL_ERROR);\n }\n\n if (requiresApiKey && !this.options.apiKey) {\n writeNDJSON({\n type: 'error',\n code: 'missing_credentials',\n message: 'API key required for this framework. Pass --api-key flag.',\n });\n process.exit(ExitCode.GENERAL_ERROR);\n }\n\n writeNDJSON({ type: 'credentials:provided', source: 'flag' });\n this.sendEvent({\n type: 'CREDENTIALS_SUBMITTED',\n apiKey: this.options.apiKey ?? '',\n clientId: this.options.clientId,\n });\n };\n\n private handleEnvScanPrompt = (): void => {\n writeNDJSON({ type: 'credentials:env:scanning' });\n this.sendEvent({ type: 'ENV_SCAN_APPROVED' });\n };\n\n private handleEnvCredentialsFound = ({ sourcePath }: InstallerEvents['credentials:env:found']): void => {\n writeNDJSON({ type: 'credentials:found', source: 'env', sourcePath });\n };\n\n // ===== Device Auth (should not occur in headless) =====\n\n private handleDeviceStarted = ({ verificationUri, userCode }: InstallerEvents['device:started']): void => {\n writeNDJSON({\n type: 'auth:device_required',\n verificationUri,\n userCode,\n message: 'Device auth cannot proceed in non-interactive mode',\n });\n };\n\n // ===== Staging =====\n\n private handleStagingFetching = (): void => {\n writeNDJSON({ type: 'staging:fetching' });\n };\n\n private handleStagingSuccess = (): void => {\n writeNDJSON({ type: 'staging:success' });\n };\n\n // ===== Config =====\n\n private handleConfigComplete = (): void => {\n writeNDJSON({ type: 'config:complete' });\n };\n\n // ===== Agent Progress =====\n\n private handleAgentStart = (): void => {\n writeNDJSON({ type: 'agent:start' });\n };\n\n private handleAgentProgress = ({ step, detail }: InstallerEvents['agent:progress']): void => {\n const message = detail ? `${step}: ${detail}` : step;\n writeNDJSON({ type: 'agent:progress', message });\n };\n\n // ===== Validation =====\n\n private handleValidationStart = ({ framework }: InstallerEvents['validation:start']): void => {\n writeNDJSON({ type: 'validation:start', framework });\n };\n\n private handleValidationIssues = ({ issues }: InstallerEvents['validation:issues']): void => {\n for (const issue of issues) {\n writeNDJSON({ type: 'validation:issue', severity: issue.severity, message: issue.message });\n }\n };\n\n private handleValidationComplete = ({ passed, issueCount }: InstallerEvents['validation:complete']): void => {\n writeNDJSON({ type: 'validation:complete', passed, issues: issueCount });\n };\n\n // ===== Branch (auto-resolve) =====\n\n private handleBranchPrompt = (): void => {\n if (this.options.noBranch) {\n writeNDJSON({ type: 'branch:skipped', reason: '--no-branch flag' });\n this.sendEvent({ type: 'BRANCH_CONTINUE' });\n } else {\n writeNDJSON({ type: 'branch:creating' });\n this.sendEvent({ type: 'BRANCH_CREATE' });\n }\n };\n\n private handleBranchCreated = ({ branch }: InstallerEvents['branch:created']): void => {\n writeNDJSON({ type: 'branch:created', name: branch });\n };\n\n // ===== Post-install (auto-resolve) =====\n\n private handlePostInstallChanges = ({ files }: InstallerEvents['postinstall:changes']): void => {\n writeNDJSON({ type: 'postinstall:changes', files, count: files.length });\n };\n\n private handleCommitPrompt = (): void => {\n if (this.options.noCommit) {\n writeNDJSON({ type: 'commit:skipped', reason: '--no-commit flag' });\n this.sendEvent({ type: 'COMMIT_DECLINED' });\n } else {\n writeNDJSON({ type: 'commit:auto' });\n this.sendEvent({ type: 'COMMIT_APPROVED' });\n }\n };\n\n private handleCommitSuccess = ({ message }: InstallerEvents['postinstall:commit:success']): void => {\n writeNDJSON({ type: 'commit:created', message });\n };\n\n private handleCommitFailed = ({ error }: InstallerEvents['postinstall:commit:failed']): void => {\n writeNDJSON({ type: 'commit:failed', error });\n };\n\n private handlePrPrompt = (): void => {\n if (this.options.createPr) {\n writeNDJSON({ type: 'pr:creating' });\n this.sendEvent({ type: 'PR_APPROVED' });\n } else {\n writeNDJSON({ type: 'pr:skipped', reason: '--create-pr not set' });\n this.sendEvent({ type: 'PR_DECLINED' });\n }\n };\n\n private handlePrSuccess = ({ url }: InstallerEvents['postinstall:pr:success']): void => {\n writeNDJSON({ type: 'pr:created', url });\n };\n\n private handlePrFailed = ({ error }: InstallerEvents['postinstall:pr:failed']): void => {\n writeNDJSON({ type: 'pr:failed', error });\n };\n\n private handlePushFailed = ({ error }: InstallerEvents['postinstall:push:failed']): void => {\n writeNDJSON({ type: 'push:failed', error });\n };\n\n private handleManualInstructions = ({ instructions }: InstallerEvents['postinstall:manual']): void => {\n writeNDJSON({ type: 'postinstall:manual', instructions });\n };\n\n // ===== Terminal Events =====\n\n private handleComplete = ({ success, summary }: InstallerEvents['complete']): void => {\n writeNDJSON({ type: 'complete', success, summary });\n };\n\n private handleError = ({ message, stack }: InstallerEvents['error']): void => {\n writeNDJSON({ type: 'error', code: 'installer_error', message });\n this.debugLog(stack ?? '');\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC","sourcesContent":["export { CLIAdapter } from './cli-adapter.js';\nexport { DashboardAdapter } from './dashboard-adapter.js';\nexport type { InstallerAdapter, AdapterConfig } from './types.js';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export { CLIAdapter } from './cli-adapter.js';\nexport { DashboardAdapter } from './dashboard-adapter.js';\nexport { HeadlessAdapter } from './headless-adapter.js';\nexport type { InstallerAdapter, AdapterConfig } from './types.js';\n"]}
|
|
@@ -5,8 +5,7 @@
|
|
|
5
5
|
import type { InstallerOptions } from '../utils/types.js';
|
|
6
6
|
import type { InstallerEventEmitter } from './events.js';
|
|
7
7
|
import { type CredentialProxyHandle } from './credential-proxy.js';
|
|
8
|
-
type SDKMessage
|
|
9
|
-
type McpServersConfig = any;
|
|
8
|
+
import type { SDKMessage, Options as AgentSDKOptions, PermissionResult } from '@anthropic-ai/claude-agent-sdk';
|
|
10
9
|
export declare const AgentSignals: {
|
|
11
10
|
/** Signal emitted when the agent reports progress to the user */
|
|
12
11
|
readonly STATUS: "[STATUS]";
|
|
@@ -45,7 +44,7 @@ export interface RetryConfig {
|
|
|
45
44
|
*/
|
|
46
45
|
export type AgentRunConfig = {
|
|
47
46
|
workingDirectory: string;
|
|
48
|
-
mcpServers:
|
|
47
|
+
mcpServers: AgentSDKOptions['mcpServers'];
|
|
49
48
|
model: string;
|
|
50
49
|
allowedTools: string[];
|
|
51
50
|
sdkEnv: Record<string, string | undefined>;
|
|
@@ -57,13 +56,7 @@ export type AgentRunConfig = {
|
|
|
57
56
|
* - Piping to tail/head for output limiting is allowed
|
|
58
57
|
* - Stderr redirection (2>&1) is allowed
|
|
59
58
|
*/
|
|
60
|
-
export declare function installerCanUseTool(toolName: string, input: Record<string, unknown>):
|
|
61
|
-
behavior: 'allow';
|
|
62
|
-
updatedInput: Record<string, unknown>;
|
|
63
|
-
} | {
|
|
64
|
-
behavior: 'deny';
|
|
65
|
-
message: string;
|
|
66
|
-
};
|
|
59
|
+
export declare function installerCanUseTool(toolName: string, input: Record<string, unknown>): PermissionResult;
|
|
67
60
|
/**
|
|
68
61
|
* Initialize agent configuration for the LLM gateway
|
|
69
62
|
*/
|
|
@@ -87,4 +80,3 @@ export declare function runAgent(agentConfig: AgentRunConfig, prompt: string, op
|
|
|
87
80
|
* Get the active proxy handle (for testing/debugging).
|
|
88
81
|
*/
|
|
89
82
|
export declare function getActiveProxyHandle(): CredentialProxyHandle | null;
|
|
90
|
-
export {};
|
|
@@ -410,7 +410,7 @@ export async function initializeAgent(config, options) {
|
|
|
410
410
|
* @returns An object containing any error detected in the agent's output
|
|
411
411
|
*/
|
|
412
412
|
export async function runAgent(agentConfig, prompt, options, config, emitter, retryConfig, onMessage) {
|
|
413
|
-
const { spinnerMessage = 'Setting up WorkOS AuthKit...'
|
|
413
|
+
const { spinnerMessage = 'Setting up WorkOS AuthKit...' } = config ?? {};
|
|
414
414
|
const { query } = await getSDKModule();
|
|
415
415
|
// Emit progress for adapters to handle (e.g., CLI adapter starts spinner)
|
|
416
416
|
emitter?.emit('agent:progress', { step: 'Starting', detail: 'This may take a few minutes. Grab some coffee!' });
|
|
@@ -690,18 +690,6 @@ function handleSDKMessage(message, options, collectedText, emitter) {
|
|
|
690
690
|
}
|
|
691
691
|
break;
|
|
692
692
|
}
|
|
693
|
-
case 'tool': {
|
|
694
|
-
// This case may not be used by the current SDK, keeping for compatibility
|
|
695
|
-
const toolName = message.tool;
|
|
696
|
-
const input = message.input;
|
|
697
|
-
if (toolName === 'Read' && message.content) {
|
|
698
|
-
const filePath = input?.file_path;
|
|
699
|
-
if (filePath && typeof message.content === 'string') {
|
|
700
|
-
fileContentCache.set(filePath, message.content);
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
break;
|
|
704
|
-
}
|
|
705
693
|
case 'result': {
|
|
706
694
|
if (message.subtype === 'success') {
|
|
707
695
|
logInfo('Agent completed successfully');
|