@trydreamstate/cli 1.3.3 → 1.3.5
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 +14 -7
- package/agent-plugin/.claude-plugin/plugin.json +1 -1
- package/agent-plugin/.codex-plugin/plugin.json +1 -1
- package/agent-plugin/hooks/approve-readonly.sh +2 -2
- package/agent-plugin/hooks/hooks.json +1 -1
- package/agent-plugin/skills/crm/SKILL.md +2 -2
- package/agent-plugin/skills/diagnostics/SKILL.md +3 -1
- package/agent-plugin/skills/dreamstate/SKILL.md +5 -3
- package/agent-plugin/skills/first-win/SKILL.md +2 -2
- package/agent-plugin/skills/inbox-replies/SKILL.md +3 -1
- package/agent-plugin/skills/knowledge/SKILL.md +3 -5
- package/agent-plugin/skills/linkedin-posts/SKILL.md +3 -1
- package/agent-plugin/skills/linkedin-warm-signals/SKILL.md +3 -3
- package/agent-plugin/skills/list-building/SKILL.md +4 -9
- package/agent-plugin/skills/list-building/column-authoring.md +3 -2
- package/agent-plugin/skills/list-building/sourcing.md +2 -2
- package/agent-plugin/skills/outreach/SKILL.md +3 -3
- package/agent-plugin/skills/plays/SKILL.md +3 -3
- package/agent-plugin/skills/reddit-posts/SKILL.md +3 -1
- package/agent-plugin/skills/skill-authoring/SKILL.md +3 -1
- package/agent-plugin/skills/social/SKILL.md +3 -5
- package/agent-plugin/skills/visibility/SKILL.md +2 -6
- package/agent-plugin/skills/workflows/SKILL.md +2 -2
- package/agent-plugin/skills/workflows/lifecycle-and-enrollment.md +1 -1
- package/agent-plugin/skills/worksheet-tidy/SKILL.md +3 -1
- package/agent-plugin/skills/writing/SKILL.md +3 -5
- package/agent-plugin/skills/x-posts/SKILL.md +3 -1
- package/dist/agentGuidance.generated.json +4 -4
- package/dist/capabilityPosture.d.ts +12 -0
- package/dist/capabilityPosture.d.ts.map +1 -0
- package/dist/capabilityPosture.js +39 -0
- package/dist/client.d.ts +9 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +110 -63
- package/dist/commands/sequences.d.ts +3 -2
- package/dist/commands/sequences.d.ts.map +1 -1
- package/dist/commands/sequences.js +19 -37
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +22 -45
- package/dist/commands/workflows.d.ts +3 -2
- package/dist/commands/workflows.d.ts.map +1 -1
- package/dist/commands/workflows.js +19 -35
- package/dist/config.d.ts +5 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -2
- package/dist/errors.d.ts +2 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +10 -43
- package/dist/gatedRun.d.ts +2 -2
- package/dist/gatedRun.d.ts.map +1 -1
- package/dist/gatedRun.js +157 -60
- package/dist/generated/packVerbs.generated.json +492 -0
- package/dist/generated/runContract.generated.d.ts +4 -0
- package/dist/generated/runContract.generated.d.ts.map +1 -0
- package/dist/generated/runContract.generated.js +7 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +164 -59
- package/dist/money.d.ts +10 -0
- package/dist/money.d.ts.map +1 -0
- package/dist/money.js +75 -0
- package/dist/registryManifest.d.ts +6 -0
- package/dist/registryManifest.d.ts.map +1 -0
- package/dist/registryManifest.js +66 -0
- package/dist/runContract.d.ts +10 -0
- package/dist/runContract.d.ts.map +1 -0
- package/dist/runContract.js +13 -0
- package/dist/runWait.d.ts +0 -1
- package/dist/runWait.d.ts.map +1 -1
- package/dist/runWait.js +2 -13
- package/dist/turnCache.d.ts +3 -1
- package/dist/turnCache.d.ts.map +1 -1
- package/dist/turnCache.js +6 -2
- package/package.json +4 -2
package/dist/commands/shared.js
CHANGED
|
@@ -14,8 +14,9 @@ const index_1 = require("../index");
|
|
|
14
14
|
const errors_1 = require("../errors");
|
|
15
15
|
const gatedRun_1 = require("../gatedRun");
|
|
16
16
|
const node_fs_1 = require("node:fs");
|
|
17
|
+
const money_1 = require("../money");
|
|
17
18
|
const runWait_1 = require("../runWait");
|
|
18
|
-
const
|
|
19
|
+
const runContract_1 = require("../runContract");
|
|
19
20
|
function parseObject(raw, flag) {
|
|
20
21
|
try {
|
|
21
22
|
const value = JSON.parse(raw);
|
|
@@ -68,9 +69,9 @@ function takeSchemaFlags(argv, known) {
|
|
|
68
69
|
function parseMode(value) {
|
|
69
70
|
if (value === undefined)
|
|
70
71
|
return undefined;
|
|
71
|
-
if (
|
|
72
|
+
if (runContract_1.RUN_MODES.includes(value))
|
|
72
73
|
return value;
|
|
73
|
-
throw new errors_1.CliUsageError(`--mode must be one of: ${
|
|
74
|
+
throw new errors_1.CliUsageError(`--mode must be one of: ${runContract_1.RUN_MODES.join(', ')}`);
|
|
74
75
|
}
|
|
75
76
|
function buildPackParser(pack, kind, specs, usage) {
|
|
76
77
|
return (argv) => {
|
|
@@ -82,6 +83,7 @@ function buildPackParser(pack, kind, specs, usage) {
|
|
|
82
83
|
const options = {
|
|
83
84
|
mode: { type: 'string' }, 'dry-run': { type: 'boolean' }, live: { type: 'boolean' },
|
|
84
85
|
'idempotency-key': { type: 'string' }, 'max-credits': { type: 'string' }, params: { type: 'string' },
|
|
86
|
+
'max-live-sends': { type: 'string' },
|
|
85
87
|
approved: { type: 'boolean' }, 'approval-id': { type: 'string' }, 'approved-effect-unknown': { type: 'boolean' },
|
|
86
88
|
'quote-hash': { type: 'string' }, 'turn-token': { type: 'string' },
|
|
87
89
|
'wait-timeout': { type: 'string' }, 'no-wait': { type: 'boolean' }, 'json-output': { type: 'boolean' }, open: { type: 'boolean' }, help: { type: 'boolean', short: 'h' },
|
|
@@ -102,8 +104,12 @@ function buildPackParser(pack, kind, specs, usage) {
|
|
|
102
104
|
const dryRun = values['dry-run'];
|
|
103
105
|
const live = values.live;
|
|
104
106
|
const idempotencyKey = values['idempotency-key'];
|
|
107
|
+
if (idempotencyKey !== undefined && idempotencyKey.length > runContract_1.IDEMPOTENCY_KEY_MAX_LENGTH) {
|
|
108
|
+
throw new errors_1.CliUsageError(`--idempotency-key must be at most ${runContract_1.IDEMPOTENCY_KEY_MAX_LENGTH} characters`);
|
|
109
|
+
}
|
|
105
110
|
const rawParams = values.params;
|
|
106
111
|
const rawMaxCredits = values['max-credits'];
|
|
112
|
+
const rawMaxLiveSends = values['max-live-sends'];
|
|
107
113
|
const rawWaitTimeout = values['wait-timeout'];
|
|
108
114
|
if (values.help)
|
|
109
115
|
return { command: 'pack_help', usage, ...(values['json-output'] ? { jsonOutput: true } : {}) };
|
|
@@ -135,8 +141,11 @@ function buildPackParser(pack, kind, specs, usage) {
|
|
|
135
141
|
const maxCredits = rawMaxCredits === undefined ? undefined : Number(rawMaxCredits);
|
|
136
142
|
if (maxCredits !== undefined && (!Number.isFinite(maxCredits) || maxCredits < 0))
|
|
137
143
|
throw new errors_1.CliUsageError('--max-credits must be a non-negative number');
|
|
144
|
+
const maxLiveSends = rawMaxLiveSends === undefined ? undefined : Number(rawMaxLiveSends);
|
|
145
|
+
if (maxLiveSends !== undefined && (!Number.isInteger(maxLiveSends) || maxLiveSends < 1))
|
|
146
|
+
throw new errors_1.CliUsageError('--max-live-sends must be an integer greater than or equal to 1');
|
|
138
147
|
const quoteHash = values['quote-hash'];
|
|
139
|
-
if (quoteHash !== undefined &&
|
|
148
|
+
if (quoteHash !== undefined && !runContract_1.QUOTE_HASH_PATTERN.test(quoteHash))
|
|
140
149
|
throw new errors_1.CliUsageError('--quote-hash must be the sha256:<64 hex> quote_hash a dry run returned');
|
|
141
150
|
const approvalId = values['approval-id'];
|
|
142
151
|
if (approvalId !== undefined && !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(approvalId))
|
|
@@ -156,6 +165,7 @@ function buildPackParser(pack, kind, specs, usage) {
|
|
|
156
165
|
...(values['turn-token'] ? { turnToken: values['turn-token'] } : {}),
|
|
157
166
|
...(idempotencyKey ? { idempotencyKey } : {}),
|
|
158
167
|
...(maxCredits === undefined ? {} : { maxCredits }), ...(values['json-output'] ? { jsonOutput: true } : {}),
|
|
168
|
+
...(maxLiveSends === undefined ? {} : { maxLiveSends }),
|
|
159
169
|
waitTimeout, ...(values['no-wait'] ? { noWait: true } : {}),
|
|
160
170
|
...(values.open ? { open: true } : {}),
|
|
161
171
|
};
|
|
@@ -168,36 +178,10 @@ function buildPackParser(pack, kind, specs, usage) {
|
|
|
168
178
|
* usefully, rather than to guess a valid sequence on the caller's behalf.
|
|
169
179
|
*/
|
|
170
180
|
function packScaffold(kind, name) {
|
|
171
|
-
//
|
|
172
|
-
// channel/action under `fields` and omitted the id, and the document it wrote was
|
|
173
|
-
// refused by our own lint with `node_contract_unresolved: Node unknown has no
|
|
174
|
-
// canonical node-contract mapping`, because canonicalSequenceStepContractNode reads
|
|
175
|
-
// step.kind and step.action off the step itself. A scaffold whose output the next
|
|
176
|
-
// command in its own printed next_steps rejects is worse than no scaffold.
|
|
181
|
+
// Empty graph. Step and node shapes belong to the server contract, not a second copy here.
|
|
177
182
|
return kind === 'sequence'
|
|
178
|
-
? {
|
|
179
|
-
|
|
180
|
-
name,
|
|
181
|
-
steps: [
|
|
182
|
-
{
|
|
183
|
-
id: 'step_1',
|
|
184
|
-
kind: 'email',
|
|
185
|
-
channel: 'email',
|
|
186
|
-
action: 'send_email',
|
|
187
|
-
subject_template: 'Quick question, {{first_name}}',
|
|
188
|
-
body_template: 'Hi {{first_name}},\n\nWould this be useful to you?',
|
|
189
|
-
},
|
|
190
|
-
],
|
|
191
|
-
}
|
|
192
|
-
: {
|
|
193
|
-
kind: 'workflow',
|
|
194
|
-
name,
|
|
195
|
-
nodes: [
|
|
196
|
-
{ id: 'trigger-root', type: 'trigger', position: { x: 0, y: 0 }, data: { kind: 'trigger', subtype: 'table', config: {} } },
|
|
197
|
-
{ id: 'action-example', type: 'action', position: { x: 0, y: 160 }, data: { kind: 'action', subtype: 'send_connection_request_to_contact', config: {} } },
|
|
198
|
-
],
|
|
199
|
-
edges: [{ id: 'edge-trigger-action', source: 'trigger-root', target: 'action-example' }],
|
|
200
|
-
};
|
|
183
|
+
? { kind: 'sequence', name, steps: [] }
|
|
184
|
+
: { kind: 'workflow', name, nodes: [], edges: [] };
|
|
201
185
|
}
|
|
202
186
|
function runPackInit(kind, command, stdout) {
|
|
203
187
|
if (command.command !== 'pack')
|
|
@@ -254,7 +238,10 @@ async function runPackCommand(context, command, stdout) {
|
|
|
254
238
|
const outcome = await (0, gatedRun_1.runGated)(context, {
|
|
255
239
|
capabilityId: command.capabilityId,
|
|
256
240
|
body: {
|
|
257
|
-
params:
|
|
241
|
+
params: {
|
|
242
|
+
...command.input,
|
|
243
|
+
...(command.maxLiveSends === undefined ? {} : { max_live_sends: command.maxLiveSends }),
|
|
244
|
+
},
|
|
258
245
|
...(command.mode ? { mode: command.mode } : {}),
|
|
259
246
|
...(maxCredits === undefined ? {} : { max_credits: maxCredits }),
|
|
260
247
|
...(command.approved ? { approved: true } : {}),
|
|
@@ -267,16 +254,6 @@ async function runPackCommand(context, command, stdout) {
|
|
|
267
254
|
waitTimeout: command.waitTimeout,
|
|
268
255
|
...(command.noWait ? { noWait: true } : {}),
|
|
269
256
|
coerceParams: true,
|
|
270
|
-
// Bridge for a capability that still lists max_credits among its params (contract C6 keeps
|
|
271
|
-
// the ceiling at the door). The value is copied only while the live schema declares it, so
|
|
272
|
-
// the day the catalog removes the param this stops sending it with no change here.
|
|
273
|
-
adjustParams: (params, capability) => {
|
|
274
|
-
const schema = capability?.input_json_schema;
|
|
275
|
-
const properties = schema && typeof schema === 'object' ? schema.properties : undefined;
|
|
276
|
-
return maxCredits !== undefined && properties && 'max_credits' in properties && params.max_credits === undefined
|
|
277
|
-
? { ...params, max_credits: maxCredits }
|
|
278
|
-
: params;
|
|
279
|
-
},
|
|
280
257
|
});
|
|
281
258
|
const result = outcome.value;
|
|
282
259
|
if (outcome.timedOut)
|
|
@@ -284,7 +261,7 @@ async function runPackCommand(context, command, stdout) {
|
|
|
284
261
|
const output = command.mode === 'dry_run' && result && typeof result === 'object' && !Array.isArray(result)
|
|
285
262
|
? { ...result, meta: { ...(result.meta ?? {}), dry_run: true, note: 'dry_run: true, rerun with --live to apply' } }
|
|
286
263
|
: result;
|
|
287
|
-
stdout.write(`${JSON.stringify(output, null, command.jsonOutput ? 0 : 2)}\n`);
|
|
264
|
+
stdout.write(`${JSON.stringify((0, money_1.scrubCliOutput)(output), null, command.jsonOutput ? 0 : 2)}\n`);
|
|
288
265
|
if (!command.jsonOutput) {
|
|
289
266
|
const root = result && typeof result === 'object' ? result : {};
|
|
290
267
|
const webUrl = root.web_url ?? root.data?.web_url;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type PackVerbSpec } from './shared';
|
|
2
2
|
import type { CliCommand } from '../index';
|
|
3
|
+
import type { GatedRunContext } from '../gatedRun';
|
|
3
4
|
export declare const WORKFLOW_VERBS: PackVerbSpec[];
|
|
4
5
|
export declare const WORKFLOWS_USAGE: string;
|
|
5
6
|
export declare const parseWorkflowsCommand: (argv: string[]) => CliCommand;
|
|
6
|
-
export declare function runWorkflowsCommand(context:
|
|
7
|
+
export declare function runWorkflowsCommand(context: GatedRunContext | undefined, command: CliCommand, stdout: NodeJS.WritableStream): Promise<void>;
|
|
7
8
|
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/commands/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/commands/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAC5G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,eAAO,MAAM,cAAc,EAAE,YAAY,EAMpC,CAAC;AAEN,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,qBAAqB,gCAA4E,CAAC;AAC/G,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjJ"}
|
|
@@ -1,45 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.parseWorkflowsCommand = exports.WORKFLOWS_USAGE = exports.WORKFLOW_VERBS = void 0;
|
|
4
7
|
exports.runWorkflowsCommand = runWorkflowsCommand;
|
|
5
8
|
const shared_1 = require("./shared");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
{ verb: 'update', capabilityId: 'workflow.automations.update', positional: automation },
|
|
16
|
-
{ verb: 'lint', capabilityId: 'workflow.automations.lint', positional: automation },
|
|
17
|
-
{ verb: 'preview', capabilityId: 'workflow.automations.preview', positional: automation },
|
|
18
|
-
{ verb: 'variables', capabilityId: 'workflow.automations.variables_list', positional: automation },
|
|
19
|
-
{ verb: 'node-catalog', capabilityId: 'workflow.automations.node_catalog' },
|
|
20
|
-
{ verb: 'node-inspect', capabilityId: 'workflow.automations.node_inspect' },
|
|
21
|
-
{ verb: 'node-add', capabilityId: 'workflow.automations.node_add', positional: automation },
|
|
22
|
-
{ verb: 'node-patch', capabilityId: 'workflow.automations.node_patch', positional: automation },
|
|
23
|
-
{ verb: 'node-remove', capabilityId: 'workflow.automations.node_remove', positional: automation },
|
|
24
|
-
{ verb: 'node-move', capabilityId: 'workflow.automations.node_move', positional: automation },
|
|
25
|
-
{ verb: 'field-options', capabilityId: 'workflow.automations.field_options' },
|
|
26
|
-
{ verb: 'draft-save', capabilityId: 'workflow.workflows.draft_save', positional: workflow },
|
|
27
|
-
{ verb: 'publish', capabilityId: 'workflow.workflows.draft_publish', positional: workflow },
|
|
28
|
-
{ verb: 'activate', capabilityId: 'workflow.workflows.activate', positional: workflow },
|
|
29
|
-
{ verb: 'deactivate', capabilityId: 'workflow.workflows.deactivate', positional: workflow },
|
|
30
|
-
{ verb: 'enroll', capabilityId: 'workflow.workflows.enroll_selection', positional: workflow },
|
|
31
|
-
{ verb: 'runs', capabilityId: 'workflow.workflows.runs_list', positional: workflow },
|
|
32
|
-
{ verb: 'run', capabilityId: 'workflow.workflows.run_trace_get', positional: workflow },
|
|
33
|
-
{ verb: 'retry', capabilityId: 'workflow.workflows.run_retry', positional: workflow },
|
|
34
|
-
{ verb: 'duplicate', capabilityId: 'workflow.automations.duplicate', positional: automation },
|
|
35
|
-
{ verb: 'archive', capabilityId: 'workflow.automations.archive', positional: automation },
|
|
36
|
-
{ verb: 'export', capabilityId: 'workflow.automations.export', positional: automation },
|
|
37
|
-
{ verb: 'import', capabilityId: 'workflow.automations.import' },
|
|
38
|
-
];
|
|
9
|
+
const errors_1 = require("../errors");
|
|
10
|
+
const packVerbs_generated_json_1 = __importDefault(require("../generated/packVerbs.generated.json"));
|
|
11
|
+
exports.WORKFLOW_VERBS = packVerbs_generated_json_1.default.verbs
|
|
12
|
+
.filter(({ command }) => command.startsWith('workflows '))
|
|
13
|
+
.map(({ command, capabilityId, positional, local }) => ({
|
|
14
|
+
verb: command.slice('workflows '.length), capabilityId,
|
|
15
|
+
...(positional ? { positional } : {}),
|
|
16
|
+
...(local === 'init' ? { local: 'init' } : {}),
|
|
17
|
+
}));
|
|
39
18
|
exports.WORKFLOWS_USAGE = (0, shared_1.renderPackUsage)('workflows', exports.WORKFLOW_VERBS);
|
|
40
19
|
exports.parseWorkflowsCommand = (0, shared_1.buildPackParser)('workflows', 'workflow', exports.WORKFLOW_VERBS, exports.WORKFLOWS_USAGE);
|
|
41
20
|
async function runWorkflowsCommand(context, command, stdout) {
|
|
42
|
-
|
|
43
|
-
|
|
21
|
+
// init writes a local file and calls no API, so it has no gated context.
|
|
22
|
+
if (command.command === 'pack' && command.verb === 'init') {
|
|
23
|
+
(0, shared_1.runPackInit)('workflow', command, stdout);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!context)
|
|
27
|
+
throw new errors_1.CliUsageError('workflows commands other than init require an authenticated session.');
|
|
44
28
|
await (0, shared_1.runPackCommand)(context, command, stdout);
|
|
45
29
|
}
|
package/dist/config.d.ts
CHANGED
|
@@ -40,7 +40,11 @@ export declare function removeCredentialProfile(name: string, path?: string): Pr
|
|
|
40
40
|
*/
|
|
41
41
|
export declare function readStoredCredentials(path: string): Promise<StoredCredentials | null>;
|
|
42
42
|
export declare function resolveApiKey(environment?: NodeJS.ProcessEnv, path?: string): Promise<string>;
|
|
43
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* Workspace precedence: --workspace flag, then DREAMSTATE_WORKSPACE, then the
|
|
45
|
+
* stored default for the same token. DREAMSTATE_API_KEY replaces the stored
|
|
46
|
+
* token, so a different key must not inherit the other credential's workspace.
|
|
47
|
+
*/
|
|
44
48
|
export declare function resolveWorkspace(flag: string | undefined, environment?: NodeJS.ProcessEnv, path?: string): Promise<string | undefined>;
|
|
45
49
|
export declare function readApiKeyFile(path: string): Promise<string>;
|
|
46
50
|
export declare function storeApiKey(apiKey: string, path?: string, workspace?: string | null): Promise<string>;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,qBAAqB;gBAEtB,OAAO,SAA8C;CAIlE;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,qBAAqB;gBAEtB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,uBAAuB;gBACxB,OAAO,EAAE,MAAM;CAC5B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,uBAAuB;gBAGlC,OAAO,SAA6E;CAKvF;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,eAAe,CAC7B,aAAa,SAAY,EACzB,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAAC,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BtF;AAWD,eAAO,MAAM,gBAAgB,mCAAoC,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxD;AAcD,wBAAsB,wBAAwB,CAAC,IAAI,SAAoB,EAAE,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU7I;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAShG;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzH;AAED,wBAAsB,sBAAsB,CAAC,IAAI,SAAoB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAanG;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAUtG;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAoB3F;AAED,wBAAsB,aAAa,CACjC,WAAW,GAAE,MAAM,CAAC,UAAwB,EAC5C,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,qBAAqB;gBAEtB,OAAO,SAA8C;CAIlE;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,IAAI,qBAAqB;gBAEtB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,uBAAuB;gBACxB,OAAO,EAAE,MAAM;CAC5B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,uBAAuB;gBAGlC,OAAO,SAA6E;CAKvF;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,eAAe,CAC7B,aAAa,SAAY,EACzB,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,MAAM,CAGR;AAED,wBAAgB,iBAAiB,CAAC,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BtF;AAWD,eAAO,MAAM,gBAAgB,mCAAoC,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,IAAI,EAAE,MAAM,CAAC;CACd;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIxD;AAcD,wBAAsB,wBAAwB,CAAC,IAAI,SAAoB,EAAE,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAU7I;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAShG;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAGzH;AAED,wBAAsB,sBAAsB,CAAC,IAAI,SAAoB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAanG;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAUtG;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAoB3F;AAED,wBAAsB,aAAa,CACjC,WAAW,GAAE,MAAM,CAAC,UAAwB,EAC5C,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,WAAW,GAAE,MAAM,CAAC,UAAwB,EAC5C,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW7B;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBlE;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,SAAoB,EAAE,SAAS,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAW5H;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,SAAoB,EAAE,SAAS,GAAE,MAAM,GAAG,IAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAIrJ"}
|
package/dist/config.js
CHANGED
|
@@ -230,7 +230,11 @@ async function resolveApiKey(environment = process.env, path) {
|
|
|
230
230
|
return stored.token;
|
|
231
231
|
throw new MissingApiKeyError();
|
|
232
232
|
}
|
|
233
|
-
/**
|
|
233
|
+
/**
|
|
234
|
+
* Workspace precedence: --workspace flag, then DREAMSTATE_WORKSPACE, then the
|
|
235
|
+
* stored default for the same token. DREAMSTATE_API_KEY replaces the stored
|
|
236
|
+
* token, so a different key must not inherit the other credential's workspace.
|
|
237
|
+
*/
|
|
234
238
|
async function resolveWorkspace(flag, environment = process.env, path) {
|
|
235
239
|
const fromFlag = flag?.trim();
|
|
236
240
|
if (fromFlag)
|
|
@@ -239,7 +243,13 @@ async function resolveWorkspace(flag, environment = process.env, path) {
|
|
|
239
243
|
if (fromEnvironment)
|
|
240
244
|
return fromEnvironment;
|
|
241
245
|
const credentials = await selectedCredentialsPath(path ?? credentialsPath(undefined, environment), environment);
|
|
242
|
-
|
|
246
|
+
const stored = await readStoredCredentials(credentials);
|
|
247
|
+
if (!stored?.workspace)
|
|
248
|
+
return undefined;
|
|
249
|
+
const environmentKey = environment.DREAMSTATE_API_KEY?.trim();
|
|
250
|
+
if (environmentKey && environmentKey !== stored.token)
|
|
251
|
+
return undefined;
|
|
252
|
+
return stored.workspace;
|
|
243
253
|
}
|
|
244
254
|
async function readApiKeyFile(path) {
|
|
245
255
|
let file;
|
package/dist/errors.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export declare class CliUsageError extends Error {
|
|
|
6
6
|
* with a major version. `dreamstate --help` renders their stable meanings.
|
|
7
7
|
*
|
|
8
8
|
* Contract C5 (cross-surface): 0 ok, 1 generic, 2 usage, 3 auth, 4 not found,
|
|
9
|
-
* 5 conflict/validation, 6 rate limited, 7
|
|
9
|
+
* 5 conflict/validation, 6 rate limited, 7 repair.kind ask_user (a person must decide),
|
|
10
10
|
* 8 cli_update_required, 9 other refusal. Where this CLI had already published a
|
|
11
11
|
* different meaning it kept the published one and the mapping is documented:
|
|
12
12
|
*
|
|
@@ -52,10 +52,6 @@ export declare const CLI_LOCAL_ERROR_REPAIRS: {
|
|
|
52
52
|
readonly kind: "server_defect";
|
|
53
53
|
readonly hint: "The API response was not a Dreamstate envelope; report the trace id if one was returned.";
|
|
54
54
|
};
|
|
55
|
-
readonly invalid_tool_turn_token: {
|
|
56
|
-
readonly kind: "server_defect";
|
|
57
|
-
readonly hint: "The API did not provide a runnable tool turn; retry after reporting the response trace id.";
|
|
58
|
-
};
|
|
59
55
|
readonly invalid_web_url: {
|
|
60
56
|
readonly kind: "server_defect";
|
|
61
57
|
readonly hint: "The API returned an invalid web URL; report the response trace id.";
|
|
@@ -73,6 +69,6 @@ export declare const CLI_LOCAL_ERROR_REPAIRS: {
|
|
|
73
69
|
readonly hint: "Sign in with dreamstate login, then retry.";
|
|
74
70
|
};
|
|
75
71
|
};
|
|
76
|
-
export declare function
|
|
72
|
+
export declare function isApprovalRepair(error: unknown): boolean;
|
|
77
73
|
export declare function isLocalRefusalCode(code: string | undefined): boolean;
|
|
78
74
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAaX,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAaX,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQlE,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ1B,CAAC;AAEX,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMxD;AAQD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEpE"}
|
package/dist/errors.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CLI_LOCAL_ERROR_REPAIRS = exports.CLI_LOCAL_ERROR_CODES = exports.CLI_EXIT = exports.CliUsageError = void 0;
|
|
4
|
-
exports.
|
|
4
|
+
exports.isApprovalRepair = isApprovalRepair;
|
|
5
5
|
exports.isLocalRefusalCode = isLocalRefusalCode;
|
|
6
6
|
class CliUsageError extends Error {
|
|
7
7
|
constructor(message) {
|
|
@@ -15,7 +15,7 @@ exports.CliUsageError = CliUsageError;
|
|
|
15
15
|
* with a major version. `dreamstate --help` renders their stable meanings.
|
|
16
16
|
*
|
|
17
17
|
* Contract C5 (cross-surface): 0 ok, 1 generic, 2 usage, 3 auth, 4 not found,
|
|
18
|
-
* 5 conflict/validation, 6 rate limited, 7
|
|
18
|
+
* 5 conflict/validation, 6 rate limited, 7 repair.kind ask_user (a person must decide),
|
|
19
19
|
* 8 cli_update_required, 9 other refusal. Where this CLI had already published a
|
|
20
20
|
* different meaning it kept the published one and the mapping is documented:
|
|
21
21
|
*
|
|
@@ -50,7 +50,6 @@ exports.CLI_LOCAL_ERROR_CODES = {
|
|
|
50
50
|
network_error: 'The request never reached the server (DNS, connection refused, TLS). Nothing executed.',
|
|
51
51
|
request_timeout: 'The server did not answer in time. The effect may have happened. Read the target back first. If the effect is there, report it done. If not, repeat the identical call once with the first attempt\'s idempotency key, never a new one. If the read-back is inconclusive, or the repeat is refused pending acknowledgement, ask the person.',
|
|
52
52
|
invalid_response: 'The server answered with something that is not a Dreamstate envelope.',
|
|
53
|
-
invalid_tool_turn_token: 'tools get returned no tool_turn_token to run with.',
|
|
54
53
|
invalid_web_url: 'The API returned a web_url that is not a safe http(s) URL.',
|
|
55
54
|
web_url_unavailable: '--open was given but the response carries no web_url.',
|
|
56
55
|
plugin_install_failed: 'dreamstate install could not install the plugin for any agent.',
|
|
@@ -61,51 +60,19 @@ exports.CLI_LOCAL_ERROR_REPAIRS = {
|
|
|
61
60
|
network_error: { kind: 'wait', hint: 'Retry the unchanged request when network connectivity is available.' },
|
|
62
61
|
request_timeout: { kind: 'ask_user', hint: 'Read the target back first. If absent, repeat once with the same idempotency key; otherwise ask the person.' },
|
|
63
62
|
invalid_response: { kind: 'server_defect', hint: 'The API response was not a Dreamstate envelope; report the trace id if one was returned.' },
|
|
64
|
-
invalid_tool_turn_token: { kind: 'server_defect', hint: 'The API did not provide a runnable tool turn; retry after reporting the response trace id.' },
|
|
65
63
|
invalid_web_url: { kind: 'server_defect', hint: 'The API returned an invalid web URL; report the response trace id.' },
|
|
66
64
|
web_url_unavailable: { kind: 'not_possible', hint: 'This result has no web URL to open.' },
|
|
67
65
|
plugin_install_failed: { kind: 'ask_user', hint: 'Install a supported agent, then retry plugin installation.' },
|
|
68
66
|
skills_authentication_required: { kind: 'ask_user', hint: 'Sign in with dreamstate login, then retry.' },
|
|
69
67
|
};
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
'
|
|
78
|
-
'standing_approval_required',
|
|
79
|
-
'destructive_approval_required',
|
|
80
|
-
'owner_approval_required',
|
|
81
|
-
'knowledge_approval_required',
|
|
82
|
-
'content_approval_required',
|
|
83
|
-
'effect_unknown_approval_required',
|
|
84
|
-
'approval_cap_exceeded',
|
|
85
|
-
'approval_stale',
|
|
86
|
-
'agent_tool_policy_ask_before_changes',
|
|
87
|
-
'publish_confirmation_required',
|
|
88
|
-
'launch_authorization_required',
|
|
89
|
-
'publish_permission_required',
|
|
90
|
-
'delegation_grant_required',
|
|
91
|
-
'creator_consent_required',
|
|
92
|
-
'csv_replace_confirmation_required',
|
|
93
|
-
'quote_required',
|
|
94
|
-
'quote_mismatch',
|
|
95
|
-
'quote_stale',
|
|
96
|
-
'quote_already_used',
|
|
97
|
-
'spend_cap',
|
|
98
|
-
'spend_cap_required',
|
|
99
|
-
'spend_cap_too_low',
|
|
100
|
-
'cost_cap_exceeded',
|
|
101
|
-
'agent_paid_capability_requires_max_credits',
|
|
102
|
-
'max_rows_required',
|
|
103
|
-
'mode_required',
|
|
104
|
-
'sequence_send_cap_required',
|
|
105
|
-
]);
|
|
106
|
-
const GATE_CODE_PATTERN = /(?:approval|consent|confirmation|authorization)_required$|requires_approval$/;
|
|
107
|
-
function isApprovalGateCode(code) {
|
|
108
|
-
return Boolean(code) && (GATE_CODES.has(code) || GATE_CODE_PATTERN.test(code));
|
|
68
|
+
function isApprovalRepair(error) {
|
|
69
|
+
if (!error || typeof error !== 'object')
|
|
70
|
+
return false;
|
|
71
|
+
const repair = error.repair;
|
|
72
|
+
if (!repair || typeof repair !== 'object')
|
|
73
|
+
return false;
|
|
74
|
+
const kind = repair.kind;
|
|
75
|
+
return kind === 'ask_user';
|
|
109
76
|
}
|
|
110
77
|
/**
|
|
111
78
|
* Refusals the CLI decides locally, before running anything, that are not usage
|
package/dist/gatedRun.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { CliError, type DreamstateClient } from './client';
|
|
2
2
|
import { type IdempotencyIdentity } from './idempotency';
|
|
3
3
|
export declare function code(error: unknown): string | undefined;
|
|
4
|
-
export declare function toolTurnToken(value: unknown): string;
|
|
5
|
-
export declare function omitsToolTurnForInlineTableRead(capabilityId: string): boolean;
|
|
6
4
|
/** The capability record inside a tools get response, or null when the shape is unknown. */
|
|
7
5
|
export declare function capabilityRecord(fetched: unknown): Record<string, unknown> | null;
|
|
8
6
|
/**
|
|
@@ -76,6 +74,8 @@ export interface GatedRunOutcome {
|
|
|
76
74
|
turnToken: string | null;
|
|
77
75
|
}
|
|
78
76
|
export declare function runGated(context: GatedRunContext, input: GatedRunInput): Promise<GatedRunOutcome>;
|
|
77
|
+
/** Blocker refusal for a run envelope that did not go through runGated (runs wait). */
|
|
78
|
+
export declare function refusalFromRunResult(value: unknown): CliError | null;
|
|
79
79
|
/** A read the CLI needs before it can form a write, run through the same gate as any other run. */
|
|
80
80
|
export declare function readCapability(context: GatedRunContext, capabilityId: string, params: Record<string, unknown>, waitTimeout: number): Promise<unknown>;
|
|
81
81
|
//# sourceMappingURL=gatedRun.d.ts.map
|
package/dist/gatedRun.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gatedRun.d.ts","sourceRoot":"","sources":["../src/gatedRun.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA0B,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnF,OAAO,EAA4F,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"gatedRun.d.ts","sourceRoot":"","sources":["../src/gatedRun.ts"],"names":[],"mappings":"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"}
|