@trydreamstate/cli 1.3.13 → 1.3.14
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/agent-plugin/.claude-plugin/plugin.json +1 -1
- package/agent-plugin/.codex-plugin/plugin.json +1 -1
- package/agent-plugin/skills/diagnostics/SKILL.md +2 -0
- package/agent-plugin/skills/list-building/SKILL.md +4 -0
- package/dist/client.d.ts +2 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +19 -5
- package/dist/commands/engage.d.ts +2 -0
- package/dist/commands/engage.d.ts.map +1 -0
- package/dist/commands/engage.js +6 -0
- package/dist/commands/genericPack.d.ts +1 -1
- package/dist/commands/genericPack.d.ts.map +1 -1
- package/dist/commands/shared.d.ts +1 -1
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +14 -4
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -0
- package/dist/errors.d.ts +4 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -0
- package/dist/gatedRun.js +2 -2
- package/dist/generated/packVerbs.generated.json +1 -5
- package/dist/idempotency.d.ts.map +1 -1
- package/dist/idempotency.js +47 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -5
- package/dist/skillInstaller.d.ts.map +1 -1
- package/dist/skillInstaller.js +10 -0
- package/dist/tableFilePreview.d.ts.map +1 -1
- package/dist/tableFilePreview.js +21 -3
- package/dist/tablesImport.d.ts.map +1 -1
- package/dist/tablesImport.js +13 -3
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dreamstate",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.14",
|
|
4
4
|
"description": "Dreamstate for AI agents: build workbooks of companies and people, run LinkedIn and email sequences, answer replies, post to LinkedIn and X, and manage your CRM from your coding agent.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Dreamstate",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dreamstate",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.14",
|
|
4
4
|
"description": "Dreamstate for AI agents: build workbooks of companies and people, run LinkedIn and email sequences, answer replies, post to LinkedIn and X, and manage your CRM from your coding agent.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Dreamstate",
|
|
@@ -22,6 +22,8 @@ Good diagnosis answers one question with the least evidence that settles it. Pic
|
|
|
22
22
|
|
|
23
23
|
Generic run controls and run records use `runs_get`, `runs_events`, and `runs_cancel`, without a pack. The workspace pack explains credits, limits and action costs. The object itself belongs to its own pack: tables for cells and columns, sequence for sends, workflow for graph runs, unibox for conversations.
|
|
24
24
|
|
|
25
|
+
For questions about where credits went, call `workspace.usage.spend_breakdown` with the requested time window. Report unattributed spend and distinguish the overall total from the returned top groups.
|
|
26
|
+
|
|
25
27
|
## The invariant
|
|
26
28
|
|
|
27
29
|
Read first, change second. Pending, queued, paced, capped and unknown are not failures, and none is zero. Never retry an external send (DM, email, post) whose outcome is unknown before checking whether it went out.
|
|
@@ -112,6 +112,10 @@ Establish whether the LinkedIn match is Required or Nice to have from the reques
|
|
|
112
112
|
|
|
113
113
|
Read the sample's actual cells, citations, failures and credits before growing the source demand. Increasing demand resumes its saved pagination and paid page tail. Monitoring new posts and continuing older pages are different operations; use the source's declared controls. A fulfilled demand should not trigger another provider read. Do not promise that refreshing mutable engager lists is free or that a source is exhausted merely because one page contains duplicates.
|
|
114
114
|
|
|
115
|
+
For problem-mention searches, derive the problem and intended audience from the request and Company Context. Do not silently narrow a general complaint request to acquisition, cold email, or another use case. Inspect a small source sample before expanding. If it produces no qualified authors or mostly unrelated meanings, review the query and qualification rubric before buying more pages. Check uncertain decisions against the complete post; a truncated post is incomplete evidence. Do not exclude replies or choose recency versus relevance without considering where the requested signal occurs.
|
|
116
|
+
|
|
117
|
+
Report source rows, qualified authors, authors actually researched, candidate profiles and confirmed matches separately, alongside the credits for each stage. A candidate in a summary is not a confirmed match. Declare candidate URL, confirmed URL, confidence and supporting evidence as configurable research outputs when review is useful; a different company can be a past role or side project, so investigate rather than treating it alone as a contradiction. Select the model from the shared AI model selector and set research limits separately. A cached replay is a reused result, not a new verification. Stop and explain a research failure using the returned error and stop reason instead of treating an empty output as not found.
|
|
118
|
+
|
|
115
119
|
- Filters are exact when the source owns the fact, approximate when they rest on labels or keywords. Verify approximate ones per row; never re-check exact ones.
|
|
116
120
|
- A Required role from a search index can be stale: confirm it before a paid step. A dated requirement needs a dated field.
|
|
117
121
|
- Judge by meaning: a plain equivalent of a role passes. Fail a row only on evidence that contradicts a criterion.
|
package/dist/client.d.ts
CHANGED
|
@@ -116,8 +116,8 @@ export declare function requestDeviceAuthorization(baseUrl: string, body: {
|
|
|
116
116
|
hostname: string;
|
|
117
117
|
cli_version: string;
|
|
118
118
|
};
|
|
119
|
-
}): Promise<DeviceAuthorization>;
|
|
120
|
-
export declare function claimDeviceAuthorization(baseUrl: string, state: string): Promise<DeviceAuthorizationClaim>;
|
|
119
|
+
}, timeoutMs?: number): Promise<DeviceAuthorization>;
|
|
120
|
+
export declare function claimDeviceAuthorization(baseUrl: string, state: string, timeoutMs?: number): Promise<DeviceAuthorizationClaim>;
|
|
121
121
|
export declare class DreamstateClient {
|
|
122
122
|
private readonly apiKey;
|
|
123
123
|
private readonly baseUrl;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,EAAE,MAA2C,CAAC;AAEtE,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,6CAA6C,CAAC;AAE7E;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,+FAA+F;IAC/F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,+BAA+B,QAAS,CAAC;AAKtD,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,cAAc,GAAG,eAAe,CAAC;IAC7C,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAiBD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAahF,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,oGAAoG;IACpG,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,2HAA2H;IAC3H,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGtC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3B;CAeT;AAcD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAU5F;AAED,6DAA6D;AAC7D,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAE/F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,EAAE,UAAU,GAAE,MAAoB,GAAG,WAAW,CAI1G;AAsBD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAoB1E;AA4GD,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,EACtF,SAAS,SAA6B,GACrC,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,SAAS,SAA6B,GACrC,OAAO,CAAC,wBAAwB,CAAC,CAKnC;AA4DD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAA4B;IAC9D,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,WAAW,CAAkH;IAErI,wEAAwE;IACxE,IAAI,UAAU,IAAI,iBAAiB,CAElC;gBAEW,OAAO,EAAE,uBAAuB;IAQ5C,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAG7B,4FAA4F;IAC5F,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAGnC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAG7B,SAAS,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAGhE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAG9E,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAGzC,UAAU,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAGjE,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAGtE;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAgCvC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAGhF,SAAS,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAGhE,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOpF,aAAa,CACX,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,iBAAiB,EACvB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAC7B,OAAO,CAAC,OAAO,CAAC;IAYnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU9E,QAAQ,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAG/D,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAG/E,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/F,OAAO,CAAC,cAAc;YAUR,OAAO;CA0HtB"}
|
package/dist/client.js
CHANGED
|
@@ -227,23 +227,27 @@ function cliErrorFromEnvelope(payload, status, extras = {}) {
|
|
|
227
227
|
}
|
|
228
228
|
return null;
|
|
229
229
|
}
|
|
230
|
-
async function requestDeviceAuthorization(baseUrl, body) {
|
|
230
|
+
async function requestDeviceAuthorization(baseUrl, body, timeoutMs = exports.DEFAULT_REQUEST_TIMEOUT_MS) {
|
|
231
231
|
return requestPublic(baseUrl, '/cli/login-requests', {
|
|
232
232
|
method: 'POST',
|
|
233
233
|
body: JSON.stringify(body),
|
|
234
|
-
});
|
|
234
|
+
}, timeoutMs);
|
|
235
235
|
}
|
|
236
|
-
async function claimDeviceAuthorization(baseUrl, state) {
|
|
236
|
+
async function claimDeviceAuthorization(baseUrl, state, timeoutMs = exports.DEFAULT_REQUEST_TIMEOUT_MS) {
|
|
237
237
|
return requestPublic(baseUrl, '/cli/login-requests/claim', {
|
|
238
238
|
method: 'POST',
|
|
239
239
|
body: JSON.stringify({ state }),
|
|
240
|
-
});
|
|
240
|
+
}, timeoutMs);
|
|
241
241
|
}
|
|
242
|
-
async function requestPublic(baseUrl, path, init) {
|
|
242
|
+
async function requestPublic(baseUrl, path, init, timeoutMs) {
|
|
243
|
+
const controller = new AbortController();
|
|
244
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
245
|
+
const timeoutError = () => new CliError(errors_1.CLI_LOCAL_ERROR_CODES.request_timeout, 'request_timeout', 0, { repair: errors_1.CLI_LOCAL_ERROR_REPAIRS.request_timeout });
|
|
243
246
|
let response;
|
|
244
247
|
try {
|
|
245
248
|
response = await fetch(`${baseUrl.replace(/\/+$/, '')}${path}`, {
|
|
246
249
|
...init,
|
|
250
|
+
signal: controller.signal,
|
|
247
251
|
headers: {
|
|
248
252
|
Accept: 'application/json',
|
|
249
253
|
'Content-Type': 'application/json',
|
|
@@ -253,6 +257,9 @@ async function requestPublic(baseUrl, path, init) {
|
|
|
253
257
|
});
|
|
254
258
|
}
|
|
255
259
|
catch (error) {
|
|
260
|
+
clearTimeout(timeout);
|
|
261
|
+
if (controller.signal.aborted)
|
|
262
|
+
throw timeoutError();
|
|
256
263
|
throw new CliError(`Request failed: ${error instanceof Error ? error.message : String(error)}`, 'network_error', 0);
|
|
257
264
|
}
|
|
258
265
|
let payload;
|
|
@@ -260,8 +267,15 @@ async function requestPublic(baseUrl, path, init) {
|
|
|
260
267
|
payload = await response.json();
|
|
261
268
|
}
|
|
262
269
|
catch {
|
|
270
|
+
if (controller.signal.aborted)
|
|
271
|
+
throw timeoutError();
|
|
263
272
|
throw new CliError(`Dreamstate API returned invalid JSON (HTTP ${response.status})`, 'invalid_response', response.status);
|
|
264
273
|
}
|
|
274
|
+
finally {
|
|
275
|
+
clearTimeout(timeout);
|
|
276
|
+
}
|
|
277
|
+
if (controller.signal.aborted)
|
|
278
|
+
throw timeoutError();
|
|
265
279
|
const apiError = cliErrorFromEnvelope(payload, response.status, { response });
|
|
266
280
|
if (apiError)
|
|
267
281
|
throw apiError;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const parseEngageCommand: (argv: string[]) => import("..").CliCommand, runEngageCommand: (context: import("../gatedRun").GatedRunContext | undefined, command: import("..").CliCommand, stdout: NodeJS.WritableStream) => Promise<void>;
|
|
2
|
+
//# sourceMappingURL=engage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engage.d.ts","sourceRoot":"","sources":["../../src/commands/engage.ts"],"names":[],"mappings":"AAEA,eAAO,MACE,kBAAkB,+CACpB,gBAAgB,gJACE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.runEngageCommand = exports.parseEngageCommand = void 0;
|
|
5
|
+
const genericPack_1 = require("./genericPack");
|
|
6
|
+
_a = (0, genericPack_1.packSurface)('engage'), exports.parseEngageCommand = _a.parse, exports.runEngageCommand = _a.run;
|
|
@@ -2,7 +2,7 @@ import { type PackVerbSpec } from './shared';
|
|
|
2
2
|
import type { CliCommand } from '../index';
|
|
3
3
|
import type { GatedRunContext } from '../gatedRun';
|
|
4
4
|
/** Pack groups that have no shared authoring kind and no local init scaffold. */
|
|
5
|
-
export type SimplePackName = 'knowledge' | 'unibox' | 'tables';
|
|
5
|
+
export type SimplePackName = 'knowledge' | 'unibox' | 'tables' | 'engage';
|
|
6
6
|
export interface PackSurface {
|
|
7
7
|
verbs: PackVerbSpec[];
|
|
8
8
|
usage: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genericPack.d.ts","sourceRoot":"","sources":["../../src/commands/genericPack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoD,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAC/F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,iFAAiF;AACjF,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"genericPack.d.ts","sourceRoot":"","sources":["../../src/commands/genericPack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoD,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAC/F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAInD,iFAAiF;AACjF,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAU,CAAC;IACtC,GAAG,EAAE,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClH;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,CAoB7D"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type CliCommand } from '../index';
|
|
2
2
|
import { type GatedRunContext } from '../gatedRun';
|
|
3
3
|
/** First-class CLI pack groups. sequences and workflows also carry the shared authoring kind. */
|
|
4
|
-
export type PackName = 'sequences' | 'workflows' | 'knowledge' | 'unibox' | 'tables';
|
|
4
|
+
export type PackName = 'sequences' | 'workflows' | 'knowledge' | 'unibox' | 'tables' | 'engage';
|
|
5
5
|
export interface PackVerbSpec {
|
|
6
6
|
verb: string;
|
|
7
7
|
capabilityId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,UAAU,EAAiC,MAAM,UAAU,CAAC;AAEtF,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAS7E,iGAAiG;AACjG,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,UAAU,EAAiC,MAAM,UAAU,CAAC;AAEtF,OAAO,EAA4B,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAS7E,iGAAiG;AACjG,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IACnC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAClE,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA4CD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,GAAC,UAAU,GAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,GAC1F,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,UAAU,CA2FhC;AAGD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKjG;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,GAAG,UAAU,EAC7B,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,IAAI,CAuBN;AAYD,wBAAsB,cAAc,CAClC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,OAAO,CAAC,IAAI,CAAC,CA6Df;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAK3E"}
|
package/dist/commands/shared.js
CHANGED
|
@@ -75,7 +75,7 @@ function parseMode(value) {
|
|
|
75
75
|
}
|
|
76
76
|
function buildPackParser(pack, kind, specs, usage) {
|
|
77
77
|
return (argv) => {
|
|
78
|
-
const spec = specs.
|
|
78
|
+
const spec = specs.filter((c) => c.verb.split(' ').every((w, i) => argv[i] === w)).sort((a, b) => b.verb.split(' ').length - a.verb.split(' ').length)[0];
|
|
79
79
|
if (!spec)
|
|
80
80
|
throw new errors_1.CliUsageError(`Unknown ${pack} verb: ${argv[0] ?? '(missing)'}\n${usage}`);
|
|
81
81
|
// The door inputs here are the same ones `tools run` takes (parseTools in index.ts),
|
|
@@ -88,7 +88,9 @@ function buildPackParser(pack, kind, specs, usage) {
|
|
|
88
88
|
'quote-hash': { type: 'string' }, 'turn-token': { type: 'string' },
|
|
89
89
|
'wait-timeout': { type: 'string' }, 'no-wait': { type: 'boolean' }, 'json-output': { type: 'boolean' }, open: { type: 'boolean' }, help: { type: 'boolean', short: 'h' },
|
|
90
90
|
};
|
|
91
|
-
|
|
91
|
+
if (spec.verb === 'lint' || spec.verb === 'import')
|
|
92
|
+
options.file = { type: 'string' };
|
|
93
|
+
const schemaFlags = takeSchemaFlags(argv.slice(spec.verb.split(' ').length), new Set(Object.keys(options)));
|
|
92
94
|
let values;
|
|
93
95
|
let positionals;
|
|
94
96
|
try {
|
|
@@ -114,7 +116,7 @@ function buildPackParser(pack, kind, specs, usage) {
|
|
|
114
116
|
if (values.help)
|
|
115
117
|
return { command: 'pack_help', usage, ...(values['json-output'] ? { jsonOutput: true } : {}) };
|
|
116
118
|
const positional = spec.positional ?? [];
|
|
117
|
-
const requiredPositionals = positional.filter((definition) => definition.optional !== true).length;
|
|
119
|
+
const requiredPositionals = positional.filter((definition) => definition.optional !== true && !(spec.verb === 'lint' && values.file && definition.name === 'id')).length;
|
|
118
120
|
const positionalsAcceptable = positionals.length <= positional.length
|
|
119
121
|
&& positionals.length >= requiredPositionals;
|
|
120
122
|
if (!positionalsAcceptable)
|
|
@@ -123,6 +125,14 @@ function buildPackParser(pack, kind, specs, usage) {
|
|
|
123
125
|
throw new errors_1.CliUsageError('Use exactly one of --mode, --dry-run, or --live.');
|
|
124
126
|
}
|
|
125
127
|
const input = { ...(rawParams ? parseObject(rawParams, '--params') : {}), ...schemaFlags.params };
|
|
128
|
+
if (typeof values.file === 'string') {
|
|
129
|
+
try {
|
|
130
|
+
input.document = JSON.parse((0, node_fs_1.readFileSync)(values.file, 'utf8'));
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
throw new errors_1.CliUsageError(`Cannot read document from ${values.file}: ${error instanceof Error ? error.message : String(error)}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
126
136
|
positional.forEach((definition, index) => {
|
|
127
137
|
const value = positionals[index];
|
|
128
138
|
if (value !== undefined)
|
|
@@ -203,7 +213,7 @@ function runPackInit(kind, command, stdout) {
|
|
|
203
213
|
kind,
|
|
204
214
|
next_steps: [
|
|
205
215
|
`dreamstate ${kind}s lint --file ${target} --json-output`,
|
|
206
|
-
`dreamstate
|
|
216
|
+
...(kind === 'workflow' ? [`dreamstate workflows import --file ${target} --json-output`] : []),
|
|
207
217
|
],
|
|
208
218
|
},
|
|
209
219
|
}, null, command.jsonOutput ? 0 : 2)}\n`);
|
package/dist/config.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export interface CredentialProfile extends StoredCredentials {
|
|
|
29
29
|
name: string;
|
|
30
30
|
}
|
|
31
31
|
export declare function validateProfileName(name: string): string;
|
|
32
|
+
export declare function clearCurrentCredentialProfile(path: string, profile: string): Promise<void>;
|
|
32
33
|
export declare function currentCredentialProfile(path?: string, environment?: NodeJS.ProcessEnv): Promise<string | null>;
|
|
33
34
|
export declare function useCredentialProfile(name: string, path?: string): Promise<void>;
|
|
34
35
|
export declare function selectedCredentialsPath(path: string, environment?: NodeJS.ProcessEnv): 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;;;;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"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.credentialsPath = credentialsPath;
|
|
|
5
5
|
exports.resolveApiBaseUrl = resolveApiBaseUrl;
|
|
6
6
|
exports.isDreamstateToken = isDreamstateToken;
|
|
7
7
|
exports.validateProfileName = validateProfileName;
|
|
8
|
+
exports.clearCurrentCredentialProfile = clearCurrentCredentialProfile;
|
|
8
9
|
exports.currentCredentialProfile = currentCredentialProfile;
|
|
9
10
|
exports.useCredentialProfile = useCredentialProfile;
|
|
10
11
|
exports.selectedCredentialsPath = selectedCredentialsPath;
|
|
@@ -126,6 +127,14 @@ function profilePath(path, name) {
|
|
|
126
127
|
function currentProfilePath(path) {
|
|
127
128
|
return (0, node_path_1.join)(path, '..', 'current-profile');
|
|
128
129
|
}
|
|
130
|
+
async function clearCurrentCredentialProfile(path, profile) {
|
|
131
|
+
if (await currentCredentialProfile(path, {}) === profile) {
|
|
132
|
+
await (0, promises_1.unlink)(currentProfilePath(path)).catch((error) => {
|
|
133
|
+
if (error.code !== 'ENOENT')
|
|
134
|
+
throw error;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
129
138
|
async function currentCredentialProfile(path = credentialsPath(), environment = process.env) {
|
|
130
139
|
const fromEnvironment = environment.DREAMSTATE_PROFILE?.trim();
|
|
131
140
|
if (fromEnvironment)
|
package/dist/errors.d.ts
CHANGED
|
@@ -68,6 +68,10 @@ export declare const CLI_LOCAL_ERROR_REPAIRS: {
|
|
|
68
68
|
readonly kind: "ask_user";
|
|
69
69
|
readonly hint: "Sign in with dreamstate login, then retry.";
|
|
70
70
|
};
|
|
71
|
+
readonly device_authorization_expired: {
|
|
72
|
+
readonly kind: "ask_user";
|
|
73
|
+
readonly hint: "Run dreamstate login again and approve it in the browser before the code expires.";
|
|
74
|
+
};
|
|
71
75
|
};
|
|
72
76
|
export declare function isApprovalRepair(error: unknown): boolean;
|
|
73
77
|
export declare function isLocalRefusalCode(code: string | undefined): boolean;
|
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,CASlE,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS1B,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
|
@@ -54,6 +54,7 @@ exports.CLI_LOCAL_ERROR_CODES = {
|
|
|
54
54
|
web_url_unavailable: '--open was given but the response carries no web_url.',
|
|
55
55
|
plugin_install_failed: 'dreamstate install could not install the plugin for any agent.',
|
|
56
56
|
skills_authentication_required: 'skills install needs a stored login.',
|
|
57
|
+
device_authorization_expired: 'dreamstate login waited past the device code expiry before the browser approval arrived.',
|
|
57
58
|
};
|
|
58
59
|
/** Recovery metadata for failures raised by this CLI, rather than the API. */
|
|
59
60
|
exports.CLI_LOCAL_ERROR_REPAIRS = {
|
|
@@ -64,6 +65,7 @@ exports.CLI_LOCAL_ERROR_REPAIRS = {
|
|
|
64
65
|
web_url_unavailable: { kind: 'not_possible', hint: 'This result has no web URL to open.' },
|
|
65
66
|
plugin_install_failed: { kind: 'ask_user', hint: 'Install a supported agent, then retry plugin installation.' },
|
|
66
67
|
skills_authentication_required: { kind: 'ask_user', hint: 'Sign in with dreamstate login, then retry.' },
|
|
68
|
+
device_authorization_expired: { kind: 'ask_user', hint: 'Run dreamstate login again and approve it in the browser before the code expires.' },
|
|
67
69
|
};
|
|
68
70
|
function isApprovalRepair(error) {
|
|
69
71
|
if (!error || typeof error !== 'object')
|
package/dist/gatedRun.js
CHANGED
|
@@ -263,7 +263,7 @@ function readinessRefusal(value) {
|
|
|
263
263
|
const code = credentials ? 'credentials_required' : codes[0] ?? 'not_ready';
|
|
264
264
|
return new client_1.CliError(sentence, code, 409, { retryable: false });
|
|
265
265
|
}
|
|
266
|
-
const UNSUCCESSFUL_TERMINAL_RUN_STATUSES = new Set(['failed', 'completed_with_errors', 'partially_completed']);
|
|
266
|
+
const UNSUCCESSFUL_TERMINAL_RUN_STATUSES = new Set(['failed', 'completed_with_errors', 'partially_completed', 'timed_out', 'rejected', 'cancelled', 'canceled']);
|
|
267
267
|
/**
|
|
268
268
|
* A runs.get HTTP 200 says read succeeded, not that durable work succeeded.
|
|
269
269
|
* Keep the terminal receipt in error details so callers can inspect or resume
|
|
@@ -292,7 +292,7 @@ function terminalRunOutcomeRefusal(value) {
|
|
|
292
292
|
...(runId ? { run_id: runId } : {}),
|
|
293
293
|
status,
|
|
294
294
|
};
|
|
295
|
-
return new client_1.CliError(typeof typedError?.message === 'string' ? typedError.message : `Run${runId ? ` ${runId}` : ''} ended with status ${status}.`, typeof typedError?.code === 'string' ? typedError.code : 'run_failed', typeof typedError?.http_status === 'number' ? typedError.http_status : 409, {
|
|
295
|
+
return new client_1.CliError(typeof typedError?.message === 'string' ? typedError.message : `Run${runId ? ` ${runId}` : ''} ended with status ${status}.`, typeof typedError?.code === 'string' ? typedError.code : ['cancelled', 'canceled'].includes(status) ? 'run_cancelled' : 'run_failed', typeof typedError?.http_status === 'number' ? typedError.http_status : 409, {
|
|
296
296
|
details,
|
|
297
297
|
retryable: typeof typedError?.retryable === 'boolean' ? typedError.retryable : false,
|
|
298
298
|
...(typedError?.repair !== undefined ? { repair: typedError.repair } : {}),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"generated_by": "packages/cli/scripts/generate-pack-verbs.mjs from apps/backend/src/services/v1/capabilityRegistry/catalog.snapshot.json; do not edit by hand",
|
|
3
|
-
"registry_hash": "
|
|
3
|
+
"registry_hash": "de1418c1b3dd486fc581f9f1d863be83cf00aee7aba0bf04a2933cbfcf057cdc",
|
|
4
4
|
"verbs": [
|
|
5
5
|
{
|
|
6
6
|
"command": "engage accounts list",
|
|
@@ -581,10 +581,6 @@
|
|
|
581
581
|
],
|
|
582
582
|
"capabilityId": "workflow.automations.get"
|
|
583
583
|
},
|
|
584
|
-
{
|
|
585
|
-
"command": "sequences import",
|
|
586
|
-
"capabilityId": "workflow.automations.import"
|
|
587
|
-
},
|
|
588
584
|
{
|
|
589
585
|
"command": "workflows import",
|
|
590
586
|
"capabilityId": "workflow.automations.import"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"AAIA,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOjD;AASD,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gGAAgG;IAChG,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAavE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAEjF;
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"AAIA,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOjD;AASD,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gGAAgG;IAChG,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAavE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAEjF;AAgBD,mFAAmF;AACnF,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BxG;AAED,mGAAmG;AACnG,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAWzG"}
|
package/dist/idempotency.js
CHANGED
|
@@ -79,28 +79,58 @@ async function loadPending(path) {
|
|
|
79
79
|
throw error;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
-
async function savePending(path, attempts) {
|
|
83
|
-
await (0, promises_1.mkdir)((0, node_path_1.dirname)(path), { recursive: true, mode: 0o700 });
|
|
84
|
-
await (0, promises_1.writeFile)(path, JSON.stringify(attempts), { mode: 0o600 });
|
|
85
|
-
}
|
|
86
82
|
/** Gets a fresh attempt key, or resumes only a pending attempt for this digest. */
|
|
87
83
|
async function pendingIdempotencyKey(path, identity) {
|
|
88
|
-
const attempts = await loadPending(path);
|
|
89
84
|
const digest = idempotencyDigest(identity);
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
85
|
+
const directory = `${path}.d`;
|
|
86
|
+
await (0, promises_1.mkdir)(directory, { recursive: true, mode: 0o700 });
|
|
87
|
+
const target = (0, node_path_1.join)(directory, digest);
|
|
88
|
+
try {
|
|
89
|
+
return await (0, promises_1.readFile)(target, 'utf8');
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
if (error.code !== 'ENOENT')
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
let retired = false;
|
|
96
|
+
try {
|
|
97
|
+
await (0, promises_1.readFile)(`${target}.retired`);
|
|
98
|
+
retired = true;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
if (error.code !== 'ENOENT')
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
const key = (!retired && (await loadPending(path))[digest]) || `dscli-${(0, node_crypto_1.randomBytes)(20).toString('hex')}`;
|
|
105
|
+
const temporary = (0, node_path_1.join)(directory, `.${digest}.${(0, node_crypto_1.randomBytes)(16).toString('hex')}`);
|
|
106
|
+
await (0, promises_1.writeFile)(temporary, key, { mode: 0o600, flag: 'wx' });
|
|
107
|
+
try {
|
|
108
|
+
try {
|
|
109
|
+
await (0, promises_1.link)(temporary, target);
|
|
110
|
+
return key;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (error.code !== 'EEXIST')
|
|
114
|
+
throw error;
|
|
115
|
+
return await (0, promises_1.readFile)(target, 'utf8');
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
await (0, promises_1.unlink)(temporary);
|
|
120
|
+
}
|
|
97
121
|
}
|
|
98
122
|
/** A success or definitive refusal finishes an attempt; a transient outcome keeps it resumable. */
|
|
99
123
|
async function finishIdempotencyAttempt(path, identity) {
|
|
100
|
-
const attempts = await loadPending(path);
|
|
101
124
|
const digest = idempotencyDigest(identity);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
await
|
|
125
|
+
const directory = `${path}.d`;
|
|
126
|
+
await (0, promises_1.mkdir)(directory, { recursive: true, mode: 0o700 });
|
|
127
|
+
const target = (0, node_path_1.join)(directory, digest);
|
|
128
|
+
await (0, promises_1.writeFile)(`${target}.retired`, '', { mode: 0o600 });
|
|
129
|
+
try {
|
|
130
|
+
await (0, promises_1.unlink)(target);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
if (error.code !== 'ENOENT')
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
106
136
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -499,6 +499,9 @@ function workflowsCommands() {
|
|
|
499
499
|
function knowledgeCommands() {
|
|
500
500
|
return require('./commands/knowledge');
|
|
501
501
|
}
|
|
502
|
+
function engageCommands() {
|
|
503
|
+
return require('./commands/engage');
|
|
504
|
+
}
|
|
502
505
|
function uniboxCommands() {
|
|
503
506
|
return require('./commands/unibox');
|
|
504
507
|
}
|
|
@@ -621,6 +624,8 @@ function parseCliArgs(argv) {
|
|
|
621
624
|
return workflowsCommands().parseWorkflowsCommand(rest);
|
|
622
625
|
if (group === 'knowledge')
|
|
623
626
|
return knowledgeCommands().parseKnowledgeCommand(rest);
|
|
627
|
+
if (group === 'engage')
|
|
628
|
+
return engageCommands().parseEngageCommand(rest);
|
|
624
629
|
if (group === 'unibox')
|
|
625
630
|
return uniboxCommands().parseUniboxCommand(rest);
|
|
626
631
|
throw new errors_1.CliUsageError(`Unknown command: ${group}`);
|
|
@@ -1022,12 +1027,31 @@ async function loginWithDeviceAuthorization(runtime, stdout, stderr, profile, no
|
|
|
1022
1027
|
const authorization = await (0, client_1.requestDeviceAuthorization)(baseUrl, {
|
|
1023
1028
|
state,
|
|
1024
1029
|
client: { os: process.platform, hostname: (0, node_os_1.hostname)(), cli_version: client_1.CLI_VERSION },
|
|
1025
|
-
});
|
|
1030
|
+
}, runtime.requestTimeoutMs);
|
|
1026
1031
|
stderr.write(`Open: ${authorization.verification_uri_complete}\nConfirmation code: ${authorization.user_code}\n`);
|
|
1027
1032
|
(runtime.openWebUrl ?? openWebUrl)(authorization.verification_uri_complete);
|
|
1033
|
+
const expiresAt = Date.parse(authorization.expires_at);
|
|
1034
|
+
if (!Number.isFinite(expiresAt))
|
|
1035
|
+
throw new client_1.CliError('Invalid device authorization expiry.', 'invalid_response', 0);
|
|
1028
1036
|
for (;;) {
|
|
1029
|
-
const
|
|
1030
|
-
if (
|
|
1037
|
+
const remaining = expiresAt - Date.now();
|
|
1038
|
+
if (remaining <= 0)
|
|
1039
|
+
throw new client_1.CliError('Device authorization expired. Run dreamstate login again.', 'device_authorization_expired', 0);
|
|
1040
|
+
let claim = null;
|
|
1041
|
+
try {
|
|
1042
|
+
claim = await (0, client_1.claimDeviceAuthorization)(baseUrl, authorization.device_code, Math.min(runtime.requestTimeoutMs ?? client_1.DEFAULT_REQUEST_TIMEOUT_MS, remaining));
|
|
1043
|
+
}
|
|
1044
|
+
catch (error) {
|
|
1045
|
+
// A dropped or failed poll is not a refused login: the server keeps a claimed
|
|
1046
|
+
// request redeliverable for a short window, so keep polling until the request expires.
|
|
1047
|
+
const transient = error instanceof client_1.CliError
|
|
1048
|
+
&& (error.code === 'network_error' || error.status === 429 || error.status >= 500);
|
|
1049
|
+
if (!transient || !(Date.now() < expiresAt))
|
|
1050
|
+
throw error;
|
|
1051
|
+
}
|
|
1052
|
+
if (Date.now() >= expiresAt)
|
|
1053
|
+
throw new client_1.CliError('Device authorization expired. Run dreamstate login again.', 'device_authorization_expired', 0);
|
|
1054
|
+
if (claim?.status === 'ready') {
|
|
1031
1055
|
const client = new client_1.DreamstateClient({
|
|
1032
1056
|
baseUrl,
|
|
1033
1057
|
apiKey: claim.token,
|
|
@@ -1047,7 +1071,7 @@ async function loginWithDeviceAuthorization(runtime, stdout, stderr, profile, no
|
|
|
1047
1071
|
print(loginResult(whoami, skills), stdout, jsonOutput);
|
|
1048
1072
|
return;
|
|
1049
1073
|
}
|
|
1050
|
-
await (runtime.sleep ?? wait)(authorization.interval_seconds * 1_000);
|
|
1074
|
+
await (runtime.sleep ?? wait)(Math.min(authorization.interval_seconds * 1_000, Math.max(0, expiresAt - Date.now())));
|
|
1051
1075
|
}
|
|
1052
1076
|
}
|
|
1053
1077
|
function ignoreBrokenPipe(stdout) {
|
|
@@ -1095,7 +1119,10 @@ async function runCli(argv = process.argv.slice(2), runtime = {}) {
|
|
|
1095
1119
|
return;
|
|
1096
1120
|
}
|
|
1097
1121
|
if (command.command === 'logout') {
|
|
1098
|
-
const
|
|
1122
|
+
const basePath = runtimeCredentialsPath(runtime);
|
|
1123
|
+
const environment = runtime.env ?? process.env;
|
|
1124
|
+
const profile = await (0, config_1.currentCredentialProfile)(basePath, environment);
|
|
1125
|
+
const path = await (0, config_1.selectedCredentialsPath)(basePath, environment);
|
|
1099
1126
|
let removed = true;
|
|
1100
1127
|
try {
|
|
1101
1128
|
await (0, promises_1.access)(path);
|
|
@@ -1107,6 +1134,10 @@ async function runCli(argv = process.argv.slice(2), runtime = {}) {
|
|
|
1107
1134
|
}
|
|
1108
1135
|
if (removed)
|
|
1109
1136
|
await (0, promises_1.rm)(path, { force: true });
|
|
1137
|
+
if (profile)
|
|
1138
|
+
await (0, config_1.clearCurrentCredentialProfile)(basePath, profile);
|
|
1139
|
+
if (environment.DREAMSTATE_API_KEY?.trim())
|
|
1140
|
+
stderr.write('DREAMSTATE_API_KEY remains active in the environment.\n');
|
|
1110
1141
|
const message = removed ? `Removed ${path}` : `Already logged out: no credentials at ${path}`;
|
|
1111
1142
|
stderr.write(`${message}\n`);
|
|
1112
1143
|
print({ ok: true, data: { credentials_path: path, removed }, meta: {} }, stdout, Boolean(command.jsonOutput));
|
|
@@ -1525,6 +1556,9 @@ async function runCli(argv = process.argv.slice(2), runtime = {}) {
|
|
|
1525
1556
|
else if (command.pack === 'knowledge') {
|
|
1526
1557
|
await knowledgeCommands().runKnowledgeCommand(gatedContext(), command, stdout);
|
|
1527
1558
|
}
|
|
1559
|
+
else if (command.pack === 'engage') {
|
|
1560
|
+
await engageCommands().runEngageCommand(gatedContext(), command, stdout);
|
|
1561
|
+
}
|
|
1528
1562
|
else if (command.pack === 'unibox') {
|
|
1529
1563
|
await uniboxCommands().runUniboxCommand(gatedContext(), command, stdout);
|
|
1530
1564
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skillInstaller.d.ts","sourceRoot":"","sources":["../src/skillInstaller.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,oBAAoB,+EAAgF,CAAC;AAClH,MAAM,MAAM,iBAAiB,GAAG,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,wBAAgB,wBAAwB,CAAC,aAAa,SAAY,EAAE,OAAO,UAAQ,EAAE,GAAG,SAAgB,GAAG,MAAM,CAEhH;AAiBD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,EAAE,aAAa,SAAY,EAAE,OAAO,UAAQ,EAAE,GAAG,SAAgB,GAAG,MAAM,CAIvI;AAQD,wBAAsB,0BAA0B,CAAC,aAAa,SAAY,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,aAAa,GAAG,QAAQ,CAAC,CAAC,CAM9H;AAeD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAS3D;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAIxE;AAwBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,SAAa,GAAG,MAAM,CAc5I;
|
|
1
|
+
{"version":3,"file":"skillInstaller.d.ts","sourceRoot":"","sources":["../src/skillInstaller.ts"],"names":[],"mappings":"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"}
|
package/dist/skillInstaller.js
CHANGED
|
@@ -175,6 +175,16 @@ async function writeHostedSkill(root, skill, provenance) {
|
|
|
175
175
|
async function linkAgentSkill(agentRoot, canonicalDirectory, name, copy) {
|
|
176
176
|
const targetDirectory = (0, node_path_1.join)(agentRoot, name);
|
|
177
177
|
await (0, promises_1.mkdir)(agentRoot, { recursive: true, mode: 0o700 });
|
|
178
|
+
const existing = await (0, promises_1.lstat)(targetDirectory).catch((error) => {
|
|
179
|
+
if (error.code === 'ENOENT')
|
|
180
|
+
return null;
|
|
181
|
+
throw error;
|
|
182
|
+
});
|
|
183
|
+
if (existing && !existing.isSymbolicLink()) {
|
|
184
|
+
const owned = existing.isDirectory() && (await (0, promises_1.readFile)((0, node_path_1.join)(targetDirectory, 'SKILL.md'), 'utf8').catch(() => '')).includes(PROVENANCE_MARKER);
|
|
185
|
+
if (!owned)
|
|
186
|
+
throw new errors_1.CliUsageError(`Cannot replace a skill directory not owned by Dreamstate: ${targetDirectory}`);
|
|
187
|
+
}
|
|
178
188
|
await (0, promises_1.rm)(targetDirectory, { recursive: true, force: true });
|
|
179
189
|
if (copy) {
|
|
180
190
|
// The whole skill directory, not only SKILL.md: the supporting pages the skill body
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tableFilePreview.d.ts","sourceRoot":"","sources":["../src/tableFilePreview.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;CACf;AAgBD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAK7F;AAyBD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAA;CAAE,CAwC5G;AA0HD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"tableFilePreview.d.ts","sourceRoot":"","sources":["../src/tableFilePreview.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;CACf;AAgBD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAK7F;AAyBD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,OAAO,CAAA;CAAE,CAwC5G;AA0HD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmD7G;AAQD,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAgB7G"}
|
package/dist/tableFilePreview.js
CHANGED
|
@@ -203,7 +203,7 @@ function unzipEntries(buffer) {
|
|
|
203
203
|
const localOffset = buffer.readUInt32LE(offset + 42);
|
|
204
204
|
const name = buffer.toString('utf8', offset + 46, offset + 46 + nameLength);
|
|
205
205
|
offset += 46 + nameLength + extraLength + commentLength;
|
|
206
|
-
if (!/xl\/(sharedStrings\.xml|worksheets\/sheet\d+\.xml)$/.test(name))
|
|
206
|
+
if (!/xl\/(sharedStrings\.xml|workbook\.xml|_rels\/workbook\.xml\.rels|worksheets\/sheet\d+\.xml)$/.test(name))
|
|
207
207
|
continue;
|
|
208
208
|
if (localOffset + 30 > buffer.length)
|
|
209
209
|
throw new Error('xlsx local header is outside the file');
|
|
@@ -243,9 +243,23 @@ function sharedStringTable(xml) {
|
|
|
243
243
|
*/
|
|
244
244
|
function readXlsxRows(buffer, rowLimit) {
|
|
245
245
|
const entries = unzipEntries(buffer);
|
|
246
|
-
|
|
246
|
+
let sheetName = [...entries.keys()]
|
|
247
247
|
.filter((name) => /xl\/worksheets\/sheet\d+\.xml$/.test(name))
|
|
248
248
|
.sort()[0];
|
|
249
|
+
const workbook = entries.get('xl/workbook.xml');
|
|
250
|
+
const relationships = entries.get('xl/_rels/workbook.xml.rels');
|
|
251
|
+
if (workbook && relationships) {
|
|
252
|
+
const sheet = /<(?:[\w-]+:)?sheet\b([^>]*)\/?\s*>/.exec(workbook.toString('utf8'));
|
|
253
|
+
const id = /\br:id=["']([^"']+)["']/.exec(sheet?.[1] ?? '')?.[1];
|
|
254
|
+
const relationship = [...relationships.toString('utf8').matchAll(/<(?:[\w-]+:)?Relationship\b([^>]*)\/?\s*>/g)]
|
|
255
|
+
.find((match) => /\bId=["']([^"']+)["']/.exec(match[1])?.[1] === id);
|
|
256
|
+
const target = /\bTarget=["']([^"']+)["']/.exec(relationship?.[1] ?? '')?.[1];
|
|
257
|
+
if (!id || !target)
|
|
258
|
+
throw new Error('xlsx file has an invalid first worksheet relationship');
|
|
259
|
+
sheetName = target.startsWith('/') ? target.slice(1) : `xl/${target.replace(/^\.\//, '')}`;
|
|
260
|
+
if (!entries.has(sheetName))
|
|
261
|
+
throw new Error('xlsx file has a missing first worksheet');
|
|
262
|
+
}
|
|
249
263
|
if (!sheetName)
|
|
250
264
|
throw new Error('xlsx file has no worksheet');
|
|
251
265
|
const sheet = entries.get(sheetName).toString('utf8');
|
|
@@ -282,7 +296,11 @@ function readXlsxRows(buffer, rowLimit) {
|
|
|
282
296
|
const rowNumbers = [...grid.keys()].sort((left, right) => left - right);
|
|
283
297
|
if (rowNumbers.length === 0)
|
|
284
298
|
throw new Error('File has no header row');
|
|
285
|
-
|
|
299
|
+
let width = 0;
|
|
300
|
+
for (const cells of grid.values())
|
|
301
|
+
for (const k of cells.keys())
|
|
302
|
+
if (k + 1 > width)
|
|
303
|
+
width = k + 1;
|
|
286
304
|
const toRow = (cells) => Array.from({ length: width }, (_, index) => cells?.get(index) ?? '');
|
|
287
305
|
const totalRows = [...sheet.matchAll(/<(?:[\w-]+:)?row\b/g)].length;
|
|
288
306
|
return { rows: rowNumbers.map((number) => toRow(grid.get(number))), totalRows };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tablesImport.d.ts","sourceRoot":"","sources":["../src/tablesImport.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlE;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AACtC,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,UAAY,CAAC;AAC3C,wEAAwE;AACxE,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,SAAU,CAAC;AAY3C,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAuBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoB1E;AAMD,6HAA6H;AAC7H,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACzC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAC5B,MAAM,GAAG,IAAI,CAMf;AAkCD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"tablesImport.d.ts","sourceRoot":"","sources":["../src/tablesImport.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlE;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AACtC,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,UAAY,CAAC;AAC3C,wEAAwE;AACxE,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,SAAU,CAAC;AAY3C,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAuBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoB1E;AAMD,6HAA6H;AAC7H,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACzC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAC5B,MAAM,GAAG,IAAI,CAMf;AAkCD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0J1H"}
|
package/dist/tablesImport.js
CHANGED
|
@@ -209,18 +209,28 @@ async function importLocalTable(context, options) {
|
|
|
209
209
|
if (!uploadId)
|
|
210
210
|
throw new client_1.CliError('csv_upload_create returned no upload_id.', 'invalid_response', 0, { details: { import_step: 'create' } });
|
|
211
211
|
const mapping = { ...(record(created.suggested_mapping) ?? {}) };
|
|
212
|
+
const definitions = Array.isArray(created.column_definitions) ? created.column_definitions.map(record) : [];
|
|
213
|
+
if (definitions.length !== file.headers.length || definitions.some((definition) => typeof definition?.source_header !== 'string')) {
|
|
214
|
+
throw new client_1.CliError('csv_upload_create returned invalid column definitions.', 'invalid_response', 0);
|
|
215
|
+
}
|
|
216
|
+
const sourceHeaders = definitions.map((definition) => definition.source_header);
|
|
217
|
+
let upsertHeader;
|
|
212
218
|
if (options.upsertKey) {
|
|
213
219
|
if (!file.headers.includes(options.upsertKey)) {
|
|
214
220
|
throw new errors_1.CliUsageError(`--upsert-key "${options.upsertKey}" is not a column of ${fileName}. Columns: ${file.headers.join(', ')}.`);
|
|
215
221
|
}
|
|
216
|
-
|
|
222
|
+
const matches = file.headers.flatMap((header, index) => header === options.upsertKey ? [index] : []);
|
|
223
|
+
if (matches.length > 1)
|
|
224
|
+
throw new errors_1.CliUsageError(`--upsert-key "${options.upsertKey}" matches multiple columns: ${matches.map((index) => index + 1).join(', ')}. Rename the columns.`);
|
|
225
|
+
upsertHeader = sourceHeaders[matches[0]];
|
|
226
|
+
if (!mapping[upsertHeader]) {
|
|
217
227
|
if (Object.values(mapping).includes('external_id')) {
|
|
218
228
|
throw new errors_1.CliUsageError(`--upsert-key "${options.upsertKey}" is not mapped to a field and external_id is already used by another column. Rename the key column to a mappable name (email, linkedin_url, external_id).`);
|
|
219
229
|
}
|
|
220
|
-
mapping[
|
|
230
|
+
mapping[upsertHeader] = 'external_id';
|
|
221
231
|
}
|
|
222
232
|
}
|
|
223
|
-
const identityColumn =
|
|
233
|
+
const identityColumn = upsertHeader ?? chooseIdentityColumn(sourceHeaders, mapping, rowKind);
|
|
224
234
|
if (!identityColumn || Object.keys(mapping).length === 0) {
|
|
225
235
|
throw new errors_1.CliUsageError(`No column of ${fileName} could be matched to an identity field (email, linkedin_url, external_id${rowKind === 'company' ? ', domain' : ''}). The upload ${uploadId} was opened and stays unattached. Pass --upsert-key <column> to choose the identity column.`);
|
|
226
236
|
}
|