primitive-admin 1.0.48 → 1.0.50
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 +102 -2
- package/assets/skill/skills/primitive-platform/SKILL.md +85 -30
- package/dist/bin/primitive.d.ts +2 -0
- package/dist/bin/primitive.js +66 -1
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.d.ts +2 -0
- package/dist/src/commands/analytics.d.ts +2 -0
- package/dist/src/commands/apps.d.ts +2 -0
- package/dist/src/commands/apps.js +20 -0
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth.d.ts +2 -0
- package/dist/src/commands/blob-buckets.d.ts +2 -0
- package/dist/src/commands/catalog.d.ts +2 -0
- package/dist/src/commands/collection-type-configs.d.ts +2 -0
- package/dist/src/commands/collections.d.ts +2 -0
- package/dist/src/commands/comparisons.d.ts +2 -0
- package/dist/src/commands/cron-triggers.d.ts +2 -0
- package/dist/src/commands/cron-triggers.js +8 -15
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-types.d.ts +2 -0
- package/dist/src/commands/databases.d.ts +2 -0
- package/dist/src/commands/databases.js +31 -0
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +2 -0
- package/dist/src/commands/email-templates.d.ts +2 -0
- package/dist/src/commands/env.d.ts +12 -0
- package/dist/src/commands/group-type-configs.d.ts +2 -0
- package/dist/src/commands/groups.d.ts +2 -0
- package/dist/src/commands/guides.d.ts +84 -0
- package/dist/src/commands/guides.js +201 -24
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +17 -0
- package/dist/src/commands/init.js +63 -25
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.d.ts +2 -0
- package/dist/src/commands/integrations.js +22 -5
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/llm.d.ts +2 -0
- package/dist/src/commands/prompts.d.ts +2 -0
- package/dist/src/commands/rule-sets.d.ts +2 -0
- package/dist/src/commands/secrets.d.ts +2 -0
- package/dist/src/commands/skill.d.ts +2 -0
- package/dist/src/commands/sync.d.ts +113 -0
- package/dist/src/commands/sync.js +366 -12
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.d.ts +2 -0
- package/dist/src/commands/tokens.js +104 -1
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.d.ts +2 -0
- package/dist/src/commands/waitlist.d.ts +2 -0
- package/dist/src/commands/waitlist.js +1 -1
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +2 -0
- package/dist/src/commands/workflows.d.ts +49 -0
- package/dist/src/commands/workflows.js +74 -21
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +1244 -0
- package/dist/src/lib/api-client.js +30 -0
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/auth-flow.d.ts +8 -0
- package/dist/src/lib/cli-manifest.d.ts +60 -0
- package/dist/src/lib/cli-manifest.js +70 -0
- package/dist/src/lib/cli-manifest.js.map +1 -0
- package/dist/src/lib/config.d.ts +37 -0
- package/dist/src/lib/confirm-prompt.d.ts +66 -0
- package/dist/src/lib/confirm-prompt.js +85 -0
- package/dist/src/lib/confirm-prompt.js.map +1 -0
- package/dist/src/lib/constants.d.ts +2 -0
- package/dist/src/lib/crash-handlers.d.ts +20 -0
- package/dist/src/lib/crash-handlers.js +49 -0
- package/dist/src/lib/crash-handlers.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +79 -0
- package/dist/src/lib/csv.d.ts +48 -0
- package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +111 -0
- package/dist/src/lib/db-codegen/dbNaming.d.ts +45 -0
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +97 -0
- package/dist/src/lib/db-codegen/dbTemplates.js +31 -10
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +78 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js +2 -2
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -1
- package/dist/src/lib/env-resolver.d.ts +62 -0
- package/dist/src/lib/fetch.d.ts +5 -0
- package/dist/src/lib/init-config.d.ts +46 -0
- package/dist/src/lib/init-config.js +7 -0
- package/dist/src/lib/init-config.js.map +1 -1
- package/dist/src/lib/migration-nag.d.ts +49 -0
- package/dist/src/lib/output.d.ts +49 -0
- package/dist/src/lib/output.js +25 -1
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/paginate.d.ts +33 -0
- package/dist/src/lib/project-config.d.ts +97 -0
- package/dist/src/lib/refresh-admin-credentials.d.ts +65 -0
- package/dist/src/lib/resolve-platform.d.ts +45 -0
- package/dist/src/lib/resolve-platform.js +43 -0
- package/dist/src/lib/resolve-platform.js.map +1 -0
- package/dist/src/lib/skill-installer.d.ts +23 -0
- package/dist/src/lib/snapshots.d.ts +99 -0
- package/dist/src/lib/snapshots.js +357 -0
- package/dist/src/lib/snapshots.js.map +1 -0
- package/dist/src/lib/sync-paths.d.ts +72 -0
- package/dist/src/lib/sync-paths.js +29 -1
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/template.d.ts +93 -0
- package/dist/src/lib/token-inject.d.ts +56 -0
- package/dist/src/lib/token-inject.js +204 -0
- package/dist/src/lib/token-inject.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +132 -0
- package/dist/src/lib/toml-params-validator.d.ts +95 -0
- package/dist/src/lib/version-check.d.ts +10 -0
- package/dist/src/lib/workflow-fragments.d.ts +41 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +86 -0
- package/dist/src/lib/workflow-toml-validator.js +31 -1
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +513 -0
- package/dist/src/validators.d.ts +64 -0
- package/dist/src/validators.js +63 -0
- package/dist/src/validators.js.map +1 -0
- package/package.json +8 -2
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ApiClient } from "../lib/api-client.js";
|
|
2
2
|
import { resolveAppId } from "../lib/config.js";
|
|
3
3
|
import { success, error, info, keyValue, result as printResult, formatTable, formatId, formatDate, json, divider, } from "../lib/output.js";
|
|
4
|
+
import { DEFAULT_INJECT_TTL, buildPrintOutput, buildSnippet, copyToClipboard, serveTokenOnce, } from "../lib/token-inject.js";
|
|
4
5
|
export function registerTokensCommands(program) {
|
|
5
6
|
const tokens = program
|
|
6
7
|
.command("tokens")
|
|
@@ -9,9 +10,14 @@ export function registerTokensCommands(program) {
|
|
|
9
10
|
Examples:
|
|
10
11
|
$ primitive tokens create --name "Production Server" --ttl 90d
|
|
11
12
|
$ primitive tokens create --name "CI/CD" --ttl 1y my-app-id
|
|
13
|
+
$ primitive tokens inject --user 01HXY... --clipboard
|
|
14
|
+
$ primitive tokens inject --user 01HXY... --serve
|
|
12
15
|
$ primitive tokens list
|
|
13
16
|
$ primitive tokens show 01HXY...
|
|
14
17
|
$ primitive tokens revoke 01HXY...
|
|
18
|
+
|
|
19
|
+
TTL units: m/min=minutes (<=1440), h=hours (<=24), d=days, w=weeks, mo=months, y=years.
|
|
20
|
+
Note: 'm' now means minutes; use 'mo' for months (changed in #420).
|
|
15
21
|
`);
|
|
16
22
|
// Create token
|
|
17
23
|
tokens
|
|
@@ -20,7 +26,7 @@ Examples:
|
|
|
20
26
|
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
21
27
|
.option("--app <app-id>", "App ID")
|
|
22
28
|
.option("--name <name>", "Token name (required)")
|
|
23
|
-
.option("--ttl <duration>", "Token lifetime (e.g.,
|
|
29
|
+
.option("--ttl <duration>", "Token lifetime (e.g., 30m, 2h, 7d, 3mo, 1y). Omit for never-expiring token")
|
|
24
30
|
.option("--user <user-id>", "User ID (admin/owner only, defaults to current user)")
|
|
25
31
|
.option("--json", "Output as JSON")
|
|
26
32
|
.action(async (appId, options) => {
|
|
@@ -68,6 +74,103 @@ Examples:
|
|
|
68
74
|
process.exit(1);
|
|
69
75
|
}
|
|
70
76
|
});
|
|
77
|
+
// Inject token — mint a short-lived token and make it easy to use in a browser
|
|
78
|
+
tokens
|
|
79
|
+
.command("inject")
|
|
80
|
+
.description("Mint a short-lived token and make it easy to inject into a browser (clipboard / JS snippet / one-shot local server)")
|
|
81
|
+
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
82
|
+
.option("--app <app-id>", "App ID")
|
|
83
|
+
.option("--user <user-id>", "Mint for this user (admin/owner only; defaults to the current user)")
|
|
84
|
+
.option("--ttl <duration>", `Token lifetime (default ${DEFAULT_INJECT_TTL}; e.g., 30m, 2h)`, DEFAULT_INJECT_TTL)
|
|
85
|
+
.option("--name <name>", "Token name (defaults to devtools-<timestamp>)")
|
|
86
|
+
.option("--print <mode>", "Output mode: snippet | env | token (default snippet)", "snippet")
|
|
87
|
+
.option("--clipboard", "Copy the JS snippet to the system clipboard")
|
|
88
|
+
.option("--serve", "Serve the token once over a 127.0.0.1-only HTTP endpoint with a shared-secret, then shut down")
|
|
89
|
+
.option("--json", "Output as JSON (mints and prints token metadata)")
|
|
90
|
+
.action(async (appId, options) => {
|
|
91
|
+
const resolvedAppId = resolveAppId(appId, options);
|
|
92
|
+
const client = new ApiClient();
|
|
93
|
+
const printMode = options.print;
|
|
94
|
+
if (!["snippet", "env", "token"].includes(printMode)) {
|
|
95
|
+
error(`Invalid --print mode: ${options.print}. Expected one of: snippet, env, token.`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
const name = options.name || `devtools-${Date.now()}`;
|
|
99
|
+
let minted;
|
|
100
|
+
try {
|
|
101
|
+
const created = await client.createToken(resolvedAppId, {
|
|
102
|
+
name,
|
|
103
|
+
ttl: options.ttl,
|
|
104
|
+
// Server requires a userId; omit to mint for the caller.
|
|
105
|
+
userId: options.user,
|
|
106
|
+
});
|
|
107
|
+
minted = {
|
|
108
|
+
token: created.token,
|
|
109
|
+
tokenId: created.tokenId,
|
|
110
|
+
expiresAt: created.expiresAt,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
error(err.message);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const { token, tokenId, expiresAt } = minted;
|
|
119
|
+
if (options.json) {
|
|
120
|
+
json({
|
|
121
|
+
token,
|
|
122
|
+
tokenId,
|
|
123
|
+
name,
|
|
124
|
+
expiresAt,
|
|
125
|
+
snippet: buildSnippet(token),
|
|
126
|
+
});
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// --serve: one-shot localhost endpoint with a shared secret.
|
|
130
|
+
if (options.serve) {
|
|
131
|
+
const handle = await serveTokenOnce(token);
|
|
132
|
+
info("Serving token once over a loopback-only HTTP endpoint.");
|
|
133
|
+
console.log();
|
|
134
|
+
console.log(` ${handle.url}`);
|
|
135
|
+
console.log();
|
|
136
|
+
info("In the browser console / automation, fetch it then apply via the DevTools hook:");
|
|
137
|
+
console.log(` fetch('${handle.url}').then(r => r.text()).then(t => window.__PRIMITIVE_SET_TOKEN__(t))`);
|
|
138
|
+
console.log();
|
|
139
|
+
info("The server shuts down after the first valid read. Ctrl-C to cancel.");
|
|
140
|
+
// Keep the process alive until the token is read (or interrupted).
|
|
141
|
+
const onSig = () => {
|
|
142
|
+
handle.stop();
|
|
143
|
+
process.exit(0);
|
|
144
|
+
};
|
|
145
|
+
process.on("SIGINT", onSig);
|
|
146
|
+
process.on("SIGTERM", onSig);
|
|
147
|
+
await handle.done;
|
|
148
|
+
success("Token served. Shutting down.");
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const output = buildPrintOutput(printMode, token);
|
|
152
|
+
// --clipboard: copy the snippet (always the snippet form, regardless of
|
|
153
|
+
// --print) and degrade gracefully if no clipboard tool is available.
|
|
154
|
+
if (options.clipboard) {
|
|
155
|
+
const snippet = buildSnippet(token);
|
|
156
|
+
const copied = copyToClipboard(snippet);
|
|
157
|
+
if (copied) {
|
|
158
|
+
success("Snippet copied to clipboard. Paste it into the browser console:");
|
|
159
|
+
console.log();
|
|
160
|
+
console.log(` ${snippet}`);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
error("Could not access a system clipboard (no pbcopy/xclip/xsel/wl-copy/clip found). Snippet below:");
|
|
164
|
+
console.log();
|
|
165
|
+
console.log(` ${snippet}`);
|
|
166
|
+
}
|
|
167
|
+
console.log();
|
|
168
|
+
keyValue("Expires", expiresAt ? formatDate(expiresAt) : "Never");
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
// Default: print the requested mode to stdout.
|
|
172
|
+
console.log(output);
|
|
173
|
+
});
|
|
71
174
|
// List tokens
|
|
72
175
|
tokens
|
|
73
176
|
.command("list")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/commands/tokens.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,OAAO,EACP,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,IAAI,WAAW,EACrB,WAAW,EACX,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,OAAO,GACR,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/commands/tokens.ts"],"names":[],"mappings":"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"}
|
|
@@ -92,7 +92,7 @@ Examples:
|
|
|
92
92
|
.description("Invite multiple waitlist entries")
|
|
93
93
|
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
94
94
|
.option("--app <app-id>", "App ID")
|
|
95
|
-
.option("--count <n>", "Number of entries to invite", "10")
|
|
95
|
+
.option("-n, --count <n>", "Number of entries to invite", "10")
|
|
96
96
|
.option("--send-email", "Send invitation emails")
|
|
97
97
|
.option("--signup-url <url>", "Custom signup URL")
|
|
98
98
|
.option("--json", "Output as JSON")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"waitlist.js","sourceRoot":"","sources":["../../../src/commands/waitlist.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"waitlist.js","sourceRoot":"","sources":["../../../src/commands/waitlist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* Render the `Step Results` section of `workflows runs status`. Pure
|
|
4
|
+
* formatting helper — returns lines as strings so it's unit-testable
|
|
5
|
+
* (the caller console.logs them). For each step, emits:
|
|
6
|
+
*
|
|
7
|
+
* ` <id>: <status-label> <duration>`
|
|
8
|
+
*
|
|
9
|
+
* and, when applicable, indented follow-up lines:
|
|
10
|
+
*
|
|
11
|
+
* - `error_captured` step with `error` → ` error: <truncated message>`
|
|
12
|
+
* - forEach output with `errors[]` non-empty →
|
|
13
|
+
* ` forEach errors: <N/M> - first: <truncated message>`
|
|
14
|
+
*
|
|
15
|
+
* The truncation length matches `runs steps` ERROR column (80 chars,
|
|
16
|
+
* trailing "..." when truncated). See #688.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Terminal-status predicate for the `workflows preview --wait` poll loop
|
|
20
|
+
* (issue #941). A status is terminal when the run has reached an end state and
|
|
21
|
+
* the wait should stop polling — as opposed to a still-in-flight status
|
|
22
|
+
* ("running"/"queued"/"waiting") that should keep the loop going until the cap.
|
|
23
|
+
*
|
|
24
|
+
* The admin preview-status endpoint emits these terminal values (see
|
|
25
|
+
* `mapWorkflowStatus` / the server-side `isEnded` set in admin-api.ts):
|
|
26
|
+
* - "completed" (Cloudflare "complete" normalized)
|
|
27
|
+
* - "failed" (Cloudflare "errored" normalized)
|
|
28
|
+
* - "terminated" (an aborted preview — Codex P2: previously NOT treated as
|
|
29
|
+
* terminal, so an aborted preview was misreported as a wait timeout)
|
|
30
|
+
*
|
|
31
|
+
* We accept the un-normalized Cloudflare spellings too ("complete"/"errored")
|
|
32
|
+
* defensively, in case a status slips through un-normalized.
|
|
33
|
+
*/
|
|
34
|
+
export declare function isPreviewWaitTerminalStatus(s: unknown): boolean;
|
|
35
|
+
export declare function renderRunStatusStepResults(stepResults: any[]): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Issue #687 (review feedback): render an unambiguous label for a workflow
|
|
38
|
+
* config slot ("active config", "draft config", etc.) when the slot may be
|
|
39
|
+
* unnamed. Falls back to a short ID prefix so users staging multiple unnamed
|
|
40
|
+
* configs can still tell them apart.
|
|
41
|
+
*
|
|
42
|
+
* formatConfigSlotLabel("active config", "v2", "01KRT...") → 'active config "v2"'
|
|
43
|
+
* formatConfigSlotLabel("active config", null, "01KRTABCDXYZ...") → 'active config (01KRTABCDXYZ…)'
|
|
44
|
+
* formatConfigSlotLabel("active config", null, null) → 'active config'
|
|
45
|
+
*
|
|
46
|
+
* Exported for testability.
|
|
47
|
+
*/
|
|
48
|
+
export declare function formatConfigSlotLabel(slot: string, configName: string | null | undefined, configId: string | null | undefined, prefixLength?: number): string;
|
|
49
|
+
export declare function registerWorkflowsCommands(program: Command): void;
|
|
@@ -6,6 +6,7 @@ import { ApiClient } from "../lib/api-client.js";
|
|
|
6
6
|
import { resolveAppId } from "../lib/config.js";
|
|
7
7
|
import { validateWorkflowToml, formatWorkflowTomlErrors, } from "../lib/workflow-toml-validator.js";
|
|
8
8
|
import { expandWorkflow } from "../lib/workflow-fragments.js";
|
|
9
|
+
import { confirmPrompt } from "../lib/confirm-prompt.js";
|
|
9
10
|
import chalk from "chalk";
|
|
10
11
|
import { success, error, info, warn, keyValue, result as printResult, formatTable, formatId, formatDate, formatStatus, formatDuration, json, divider, progress, progressEnd, } from "../lib/output.js";
|
|
11
12
|
/**
|
|
@@ -24,6 +25,29 @@ import { success, error, info, warn, keyValue, result as printResult, formatTabl
|
|
|
24
25
|
* The truncation length matches `runs steps` ERROR column (80 chars,
|
|
25
26
|
* trailing "..." when truncated). See #688.
|
|
26
27
|
*/
|
|
28
|
+
/**
|
|
29
|
+
* Terminal-status predicate for the `workflows preview --wait` poll loop
|
|
30
|
+
* (issue #941). A status is terminal when the run has reached an end state and
|
|
31
|
+
* the wait should stop polling — as opposed to a still-in-flight status
|
|
32
|
+
* ("running"/"queued"/"waiting") that should keep the loop going until the cap.
|
|
33
|
+
*
|
|
34
|
+
* The admin preview-status endpoint emits these terminal values (see
|
|
35
|
+
* `mapWorkflowStatus` / the server-side `isEnded` set in admin-api.ts):
|
|
36
|
+
* - "completed" (Cloudflare "complete" normalized)
|
|
37
|
+
* - "failed" (Cloudflare "errored" normalized)
|
|
38
|
+
* - "terminated" (an aborted preview — Codex P2: previously NOT treated as
|
|
39
|
+
* terminal, so an aborted preview was misreported as a wait timeout)
|
|
40
|
+
*
|
|
41
|
+
* We accept the un-normalized Cloudflare spellings too ("complete"/"errored")
|
|
42
|
+
* defensively, in case a status slips through un-normalized.
|
|
43
|
+
*/
|
|
44
|
+
export function isPreviewWaitTerminalStatus(s) {
|
|
45
|
+
return (s === "completed" ||
|
|
46
|
+
s === "complete" ||
|
|
47
|
+
s === "failed" ||
|
|
48
|
+
s === "errored" ||
|
|
49
|
+
s === "terminated");
|
|
50
|
+
}
|
|
27
51
|
export function renderRunStatusStepResults(stepResults) {
|
|
28
52
|
const lines = [];
|
|
29
53
|
for (const step of stepResults || []) {
|
|
@@ -375,24 +399,16 @@ Examples:
|
|
|
375
399
|
.option("-y, --yes", "Skip confirmation prompt")
|
|
376
400
|
.action(async (workflowId, options) => {
|
|
377
401
|
const resolvedAppId = resolveAppId(undefined, options);
|
|
378
|
-
if (!options.yes) {
|
|
379
|
-
const action = options.hard ? "permanently delete" : "archive";
|
|
380
|
-
const inquirer = await import("inquirer");
|
|
381
|
-
const { confirm } = await inquirer.default.prompt([
|
|
382
|
-
{
|
|
383
|
-
type: "confirm",
|
|
384
|
-
name: "confirm",
|
|
385
|
-
message: `Are you sure you want to ${action} workflow ${workflowId}?`,
|
|
386
|
-
default: false,
|
|
387
|
-
},
|
|
388
|
-
]);
|
|
389
|
-
if (!confirm) {
|
|
390
|
-
info("Cancelled.");
|
|
391
|
-
return;
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
402
|
const client = new ApiClient();
|
|
395
403
|
try {
|
|
404
|
+
if (!options.yes) {
|
|
405
|
+
const action = options.hard ? "permanently delete" : "archive";
|
|
406
|
+
const confirmed = await confirmPrompt(`Are you sure you want to ${action} workflow ${workflowId}?`);
|
|
407
|
+
if (!confirmed) {
|
|
408
|
+
info("Cancelled.");
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
396
412
|
if (options.hard) {
|
|
397
413
|
await client.deleteWorkflow(resolvedAppId, workflowId);
|
|
398
414
|
success("Workflow deleted.");
|
|
@@ -588,21 +604,49 @@ Examples:
|
|
|
588
604
|
info("Use 'workflows runs status' to check progress.");
|
|
589
605
|
return;
|
|
590
606
|
}
|
|
591
|
-
// Poll for completion
|
|
607
|
+
// Poll for completion. Issue #941: track whether the loop broke on a
|
|
608
|
+
// terminal state vs. ran to exhaustion, so a timed-out wait is
|
|
609
|
+
// distinguishable from a workflow that legitimately reported "running".
|
|
592
610
|
info("Waiting for completion...");
|
|
593
611
|
let status;
|
|
594
|
-
|
|
612
|
+
// Fixed ~60s cap (60 × 1s sleep + RTT). PRIMITIVE_PREVIEW_WAIT_ATTEMPTS
|
|
613
|
+
// overrides the iteration count for tests that exercise the
|
|
614
|
+
// poll-loop-exhaustion path without a full 60s wait; unset in normal use.
|
|
615
|
+
const maxAttempts = (() => {
|
|
616
|
+
const raw = process.env.PRIMITIVE_PREVIEW_WAIT_ATTEMPTS;
|
|
617
|
+
const parsed = raw ? parseInt(raw, 10) : NaN;
|
|
618
|
+
return Number.isInteger(parsed) && parsed > 0 ? parsed : 60;
|
|
619
|
+
})();
|
|
620
|
+
let reachedTerminal = false;
|
|
595
621
|
for (let i = 0; i < maxAttempts; i++) {
|
|
596
622
|
await new Promise((r) => setTimeout(r, 1000));
|
|
597
623
|
const statusResult = await client.getPreviewStatus(resolvedAppId, workflowId, result.instanceId);
|
|
598
624
|
status = statusResult.status;
|
|
599
625
|
const s = status?.status;
|
|
600
|
-
|
|
626
|
+
// Issue #941 (Codex P2): an aborted preview reports
|
|
627
|
+
// status:"terminated" from the admin preview-status endpoint, which
|
|
628
|
+
// is a real terminal state — the wait did NOT time out. The shared
|
|
629
|
+
// predicate includes it so the loop breaks and `waitTimedOut` stays
|
|
630
|
+
// false (vs. the prior check that omitted "terminated" and let the
|
|
631
|
+
// loop run to the cap, misreporting an abort as a timeout).
|
|
632
|
+
if (isPreviewWaitTerminalStatus(s)) {
|
|
633
|
+
reachedTerminal = true;
|
|
601
634
|
break;
|
|
602
635
|
}
|
|
603
636
|
}
|
|
637
|
+
// Issue #941: on poll-loop exhaustion with a still-non-terminal run,
|
|
638
|
+
// emit an explicit timeout signal and exit non-zero (124, the GNU
|
|
639
|
+
// `timeout` convention) instead of silently returning the bare
|
|
640
|
+
// non-terminal status as if the wait succeeded.
|
|
641
|
+
const waitTimedOut = !reachedTerminal;
|
|
604
642
|
if (options.json) {
|
|
605
|
-
|
|
643
|
+
// Additive field only — `status` is preserved so existing parsers
|
|
644
|
+
// don't break; `waitTimedOut` lets automation tell "still running,
|
|
645
|
+
// wait gave up" from "finished".
|
|
646
|
+
json({ instanceId: result.instanceId, status, waitTimedOut });
|
|
647
|
+
if (waitTimedOut) {
|
|
648
|
+
process.exit(124);
|
|
649
|
+
}
|
|
606
650
|
return;
|
|
607
651
|
}
|
|
608
652
|
if (status?.status === "completed" || status?.status === "complete") {
|
|
@@ -626,8 +670,17 @@ Examples:
|
|
|
626
670
|
console.log(JSON.stringify(status.error, null, 2));
|
|
627
671
|
}
|
|
628
672
|
}
|
|
673
|
+
else if (status?.status === "terminated") {
|
|
674
|
+
// Issue #941 (Codex P2): the preview was aborted (e.g. via
|
|
675
|
+
// `workflows preview ... abort`, or an external terminate). This is a
|
|
676
|
+
// real terminal state — NOT a timeout — so render it distinctly and
|
|
677
|
+
// exit 0 (the wait succeeded in observing a terminal result).
|
|
678
|
+
warn("Preview was terminated (aborted before completion).");
|
|
679
|
+
}
|
|
629
680
|
else {
|
|
630
|
-
|
|
681
|
+
// Timed out without ever reaching a terminal state (issue #941).
|
|
682
|
+
error(`Wait timed out after ${maxAttempts}s; preview still running. Check status with 'workflows runs status'.`);
|
|
683
|
+
process.exit(124);
|
|
631
684
|
}
|
|
632
685
|
}
|
|
633
686
|
catch (err) {
|