@paradigma-inc/flywheel 0.1.53 → 0.1.60
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 +121 -10
- package/package.json +1 -1
- package/skills/flywheel/references/flywheel-cli-tool-map.md +8 -0
- package/skills/flywheel/references/flywheel-mcp-tool-map.md +8 -0
- package/src/agents.mjs +114 -48
- package/src/cli.mjs +267 -35
- package/src/mcp-writer.mjs +190 -17
- package/src/runtime/required-runtime-commands.json +17 -4
- package/src/runtime/vendor/flywheel-cli-dist/auth/login.d.ts +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/auth/login.js +3 -6
- package/src/runtime/vendor/flywheel-cli-dist/auth/login.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/auth/profiles.d.ts +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/auth/profiles.js +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/auth/profiles.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/_admin-auth.d.ts +25 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/_admin-auth.js +35 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/_admin-auth.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/_stream-file-out.d.ts +39 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/_stream-file-out.js +72 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/_stream-file-out.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-get.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-get.js +10 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-get.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-set.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/{compute-policy-set.js → admin-compute-policy-set.js} +8 -3
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-set.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export-stream.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export-stream.js +114 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export-stream.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export.js +11 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-list.d.ts +4 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-list.js +38 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-list.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-nodes-audit-list.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-nodes-audit-list.js +14 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/admin-nodes-audit-list.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/enums.d.ts +6 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/enums.js +3 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/enums.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/env.d.ts +0 -4
- package/src/runtime/vendor/flywheel-cli-dist/commands/env.js +7 -12
- package/src/runtime/vendor/flywheel-cli-dist/commands/env.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/export-history.js +40 -30
- package/src/runtime/vendor/flywheel-cli-dist/commands/export-history.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/help.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/help.js +60 -10
- package/src/runtime/vendor/flywheel-cli-dist/commands/help.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-create.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-create.js +25 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-create.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-delete.d.ts +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-delete.js +6 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-delete.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-list.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-list.js +10 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-list.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-runs-list.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-runs-list.js +15 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-runs-list.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-create.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-create.js +8 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-create.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-delete.d.ts +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-delete.js +6 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-delete.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-list.d.ts +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-list.js +6 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-list.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-update.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-update.js +8 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-update.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-set-enabled.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-set-enabled.js +8 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-set-enabled.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-update.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-update.js +29 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-update.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/index.js +32 -6
- package/src/runtime/vendor/flywheel-cli-dist/commands/index.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/profile-set.js +4 -2
- package/src/runtime/vendor/flywheel-cli-dist/commands/profile-set.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.d.ts +8 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js +118 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/auth.js +2 -2
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/auth.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/env.js +7 -5
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/env.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/hooks.d.ts +2 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/hooks.js +244 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/hooks.js.map +1 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/lifecycle.js +1 -16
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/lifecycle.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/profile.js +2 -2
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/profile.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/resources.js +1 -31
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry/resources.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry.d.ts +2 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry.js +4 -0
- package/src/runtime/vendor/flywheel-cli-dist/commands/registry.js.map +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/main.js +1 -1
- package/src/runtime/vendor/flywheel-cli-dist/main.js.map +1 -1
- package/src/runtime/vendor/manifest.json +61 -10
- package/src/setup/io/patchers/json.mjs +2 -0
- package/src/setup/io/patchers/toml.mjs +7 -1
- package/src/setup/io/patchers/yaml.mjs +2 -0
- package/src/setup/modes/cli.mjs +41 -16
- package/src/setup/modes/mcp-command.mjs +98 -19
- package/src/setup/modes/mcp.mjs +26 -1
- package/src/setup/shared/prior-mode-detect.mjs +133 -14
- package/src/skill-installer.mjs +179 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-get.d.ts +0 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-get.js +0 -6
- package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-get.js.map +0 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-set.d.ts +0 -2
- package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-set.js.map +0 -1
- package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-audit-list.d.ts +0 -2
- package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-audit-list.js +0 -7
- package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-audit-list.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { adminAuthRequestOptions } from './_admin-auth.js';
|
|
1
2
|
import { requiredString } from './utils.js';
|
|
2
|
-
export const
|
|
3
|
+
export const adminComputePolicySetCommand = async (context) => {
|
|
3
4
|
const nodeId = requiredString(context.params, 'node_id');
|
|
4
5
|
const body = {};
|
|
5
6
|
for (const [key, value] of Object.entries(context.params)) {
|
|
@@ -14,6 +15,10 @@ export const computePolicySetCommand = async (context) => {
|
|
|
14
15
|
body[key] = !Number.isNaN(asInt) && String(asInt) === value ? asInt : value;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
+
const options = {
|
|
19
|
+
body,
|
|
20
|
+
...adminAuthRequestOptions(context.apiKey),
|
|
21
|
+
};
|
|
22
|
+
return context.requestJson('PATCH', `/admin/nodes/${encodeURIComponent(nodeId)}/compute/policy`, options);
|
|
18
23
|
};
|
|
19
|
-
//# sourceMappingURL=compute-policy-set.js.map
|
|
24
|
+
//# sourceMappingURL=admin-compute-policy-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-compute-policy-set.js","sourceRoot":"","sources":["../../src/commands/admin-compute-policy-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,4BAA4B,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC5E,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAChC,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAClB,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAmB;QAC9B,IAAI;QACJ,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,OAAO,OAAO,CAAC,WAAW,CACxB,OAAO,EACP,gBAAgB,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,EAC3D,OAAO,CACR,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { CliUsageError } from '../errors.js';
|
|
2
|
+
import { adminAuthRequestOptions } from './_admin-auth.js';
|
|
3
|
+
import { openWriteStreamOrFail } from './_stream-file-out.js';
|
|
4
|
+
import { makeSafeStreamWriter } from './_stream-writer.js';
|
|
5
|
+
import { optionalInt, optionalString } from './utils.js';
|
|
6
|
+
export const adminGraphsExportStreamCommand = async (context) => {
|
|
7
|
+
if (!context.requestRaw) {
|
|
8
|
+
throw new CliUsageError('binary transport unavailable in this context');
|
|
9
|
+
}
|
|
10
|
+
const query = {};
|
|
11
|
+
const tagId = optionalString(context.params, 'tag-id');
|
|
12
|
+
if (tagId !== undefined)
|
|
13
|
+
query['tag_id'] = tagId;
|
|
14
|
+
const kind = optionalString(context.params, 'kind');
|
|
15
|
+
if (kind !== undefined)
|
|
16
|
+
query['kind'] = kind;
|
|
17
|
+
const ownerUserId = optionalString(context.params, 'owner-user-id');
|
|
18
|
+
if (ownerUserId !== undefined)
|
|
19
|
+
query['owner_user_id'] = ownerUserId;
|
|
20
|
+
const createdAfter = optionalString(context.params, 'created-after');
|
|
21
|
+
if (createdAfter !== undefined)
|
|
22
|
+
query['created_after'] = createdAfter;
|
|
23
|
+
const createdBefore = optionalString(context.params, 'created-before');
|
|
24
|
+
if (createdBefore !== undefined)
|
|
25
|
+
query['created_before'] = createdBefore;
|
|
26
|
+
const cursor = optionalString(context.params, 'cursor');
|
|
27
|
+
if (cursor !== undefined)
|
|
28
|
+
query['cursor'] = cursor;
|
|
29
|
+
const pageSize = optionalInt(context.params, 'page-size');
|
|
30
|
+
if (pageSize !== undefined)
|
|
31
|
+
query['page_size'] = pageSize;
|
|
32
|
+
const options = {
|
|
33
|
+
query,
|
|
34
|
+
...adminAuthRequestOptions(context.apiKey),
|
|
35
|
+
};
|
|
36
|
+
// Open and validate ``--out`` BEFORE dispatching the HTTP request.
|
|
37
|
+
// ``/admin/graphs/export.jsonl`` is expensive server-side (per-graph
|
|
38
|
+
// subgraph loads); starting it and then failing locally on a bad output
|
|
39
|
+
// path would burn backend work we cannot cancel cleanly from userland
|
|
40
|
+
// once the response body is in flight. The helper writes to a
|
|
41
|
+
// ``.partial`` temp file next to the destination so a later request
|
|
42
|
+
// failure leaves the caller's prior ``--out`` contents untouched.
|
|
43
|
+
const outPath = context.globals?.outPath ?? optionalString(context.params, 'out');
|
|
44
|
+
const fileHandle = await openWriteStreamOrFail(outPath);
|
|
45
|
+
let response;
|
|
46
|
+
try {
|
|
47
|
+
response = await context.requestRaw('GET', '/admin/graphs/export.jsonl', options);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (fileHandle) {
|
|
51
|
+
fileHandle.stream.destroy();
|
|
52
|
+
await fileHandle.abort();
|
|
53
|
+
}
|
|
54
|
+
throw err;
|
|
55
|
+
}
|
|
56
|
+
// Wrap the opened stream so in-loop write failures (ENOSPC, EIO,
|
|
57
|
+
// EPIPE, destination destroyed mid-stream) surface deterministically,
|
|
58
|
+
// and backpressure is awaited instead of over-buffering memory during
|
|
59
|
+
// bulk exports. This is the canonical pattern across streaming
|
|
60
|
+
// commands in this package.
|
|
61
|
+
const safeWriter = fileHandle
|
|
62
|
+
? makeSafeStreamWriter(fileHandle.stream)
|
|
63
|
+
: null;
|
|
64
|
+
const writeStdout = context.stdout ??
|
|
65
|
+
((chunk) => {
|
|
66
|
+
process.stdout.write(chunk);
|
|
67
|
+
});
|
|
68
|
+
const write = safeWriter
|
|
69
|
+
? async (chunk) => {
|
|
70
|
+
await safeWriter.write(chunk);
|
|
71
|
+
}
|
|
72
|
+
: async (chunk) => {
|
|
73
|
+
writeStdout(chunk);
|
|
74
|
+
};
|
|
75
|
+
if (!response.body) {
|
|
76
|
+
if (safeWriter)
|
|
77
|
+
await safeWriter.close();
|
|
78
|
+
if (fileHandle)
|
|
79
|
+
await fileHandle.finalize();
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const decoder = new TextDecoder();
|
|
83
|
+
const reader = response.body.getReader();
|
|
84
|
+
let succeeded = false;
|
|
85
|
+
try {
|
|
86
|
+
while (true) {
|
|
87
|
+
const { value, done } = await reader.read();
|
|
88
|
+
if (done)
|
|
89
|
+
break;
|
|
90
|
+
const text = decoder.decode(value, { stream: true });
|
|
91
|
+
if (text)
|
|
92
|
+
await write(text);
|
|
93
|
+
}
|
|
94
|
+
const tail = decoder.decode();
|
|
95
|
+
if (tail)
|
|
96
|
+
await write(tail);
|
|
97
|
+
succeeded = true;
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
reader.releaseLock();
|
|
101
|
+
if (safeWriter)
|
|
102
|
+
await safeWriter.close();
|
|
103
|
+
if (fileHandle) {
|
|
104
|
+
if (succeeded) {
|
|
105
|
+
await fileHandle.finalize();
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
await fileHandle.abort();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=admin-graphs-export-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-graphs-export-stream.js","sourceRoot":"","sources":["../../src/commands/admin-graphs-export-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { adminAuthRequestOptions } from './_admin-auth.js';
|
|
2
|
+
import { requiredString } from './utils.js';
|
|
3
|
+
export const adminGraphsExportCommand = async (context) => {
|
|
4
|
+
const rootNodeId = requiredString(context.params, 'root-node-id');
|
|
5
|
+
const options = {
|
|
6
|
+
...adminAuthRequestOptions(context.apiKey),
|
|
7
|
+
};
|
|
8
|
+
const path = `/admin/graphs/${encodeURIComponent(rootNodeId)}/export`;
|
|
9
|
+
return context.requestJson('GET', path, options);
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=admin-graphs-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-graphs-export.js","sourceRoot":"","sources":["../../src/commands/admin-graphs-export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,CAAC,MAAM,wBAAwB,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IACxE,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClE,MAAM,OAAO,GAAmB;QAC9B,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,MAAM,IAAI,GAAG,iBAAiB,kBAAkB,CAAC,UAAU,CAAC,SAAS,CAAC;IACtE,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { adminAuthRequestOptions } from './_admin-auth.js';
|
|
2
|
+
import { optionalInt, optionalString } from './utils.js';
|
|
3
|
+
// ``adminAuthRequestOptions`` now lives in ``./_admin-auth.ts`` so it
|
|
4
|
+
// can be shared by every admin CLI command (graphs + node-scoped
|
|
5
|
+
// compute-policy / audit) without cross-file coupling. Re-exporting
|
|
6
|
+
// here keeps already-landed imports working without forcing a churn
|
|
7
|
+
// pass.
|
|
8
|
+
export { adminAuthRequestOptions };
|
|
9
|
+
export const adminGraphsListCommand = async (context) => {
|
|
10
|
+
const query = {};
|
|
11
|
+
const tagId = optionalString(context.params, 'tag-id');
|
|
12
|
+
if (tagId !== undefined)
|
|
13
|
+
query['tag_id'] = tagId;
|
|
14
|
+
const kind = optionalString(context.params, 'kind');
|
|
15
|
+
if (kind !== undefined)
|
|
16
|
+
query['kind'] = kind;
|
|
17
|
+
const ownerUserId = optionalString(context.params, 'owner-user-id');
|
|
18
|
+
if (ownerUserId !== undefined)
|
|
19
|
+
query['owner_user_id'] = ownerUserId;
|
|
20
|
+
const createdAfter = optionalString(context.params, 'created-after');
|
|
21
|
+
if (createdAfter !== undefined)
|
|
22
|
+
query['created_after'] = createdAfter;
|
|
23
|
+
const createdBefore = optionalString(context.params, 'created-before');
|
|
24
|
+
if (createdBefore !== undefined)
|
|
25
|
+
query['created_before'] = createdBefore;
|
|
26
|
+
const cursor = optionalString(context.params, 'cursor');
|
|
27
|
+
if (cursor !== undefined)
|
|
28
|
+
query['cursor'] = cursor;
|
|
29
|
+
const pageSize = optionalInt(context.params, 'page-size');
|
|
30
|
+
if (pageSize !== undefined)
|
|
31
|
+
query['page_size'] = pageSize;
|
|
32
|
+
const options = {
|
|
33
|
+
query,
|
|
34
|
+
...adminAuthRequestOptions(context.apiKey),
|
|
35
|
+
};
|
|
36
|
+
return context.requestJson('GET', '/admin/graphs', options);
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=admin-graphs-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-graphs-list.js","sourceRoot":"","sources":["../../src/commands/admin-graphs-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzD,sEAAsE;AACtE,iEAAiE;AACjE,oEAAoE;AACpE,oEAAoE;AACpE,QAAQ;AACR,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC,MAAM,CAAC,MAAM,sBAAsB,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IACtE,MAAM,KAAK,GAA8C,EAAE,CAAC;IAC5D,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IACjD,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,IAAI,KAAK,SAAS;QAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC7C,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpE,IAAI,WAAW,KAAK,SAAS;QAAE,KAAK,CAAC,eAAe,CAAC,GAAG,WAAW,CAAC;IACpE,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACrE,IAAI,YAAY,KAAK,SAAS;QAAE,KAAK,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC;IACtE,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACvE,IAAI,aAAa,KAAK,SAAS;QAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC;IACzE,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACxD,IAAI,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;IACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1D,IAAI,QAAQ,KAAK,SAAS;QAAE,KAAK,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;IAE1D,MAAM,OAAO,GAAmB;QAC9B,KAAK;QACL,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { adminAuthRequestOptions } from './_admin-auth.js';
|
|
2
|
+
import { optionalInt, requiredString } from './utils.js';
|
|
3
|
+
export const adminNodesAuditListCommand = async (context) => {
|
|
4
|
+
const nodeId = requiredString(context.params, 'node_id');
|
|
5
|
+
const limit = optionalInt(context.params, 'limit');
|
|
6
|
+
const options = {
|
|
7
|
+
...adminAuthRequestOptions(context.apiKey),
|
|
8
|
+
};
|
|
9
|
+
if (limit !== undefined) {
|
|
10
|
+
options.query = { limit };
|
|
11
|
+
}
|
|
12
|
+
return context.requestJson('GET', `/admin/nodes/${encodeURIComponent(nodeId)}/audit`, options);
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=admin-nodes-audit-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-nodes-audit-list.js","sourceRoot":"","sources":["../../src/commands/admin-nodes-audit-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,CAAC,MAAM,0BAA0B,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC1E,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,OAAO,GAAmB;QAC9B,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,CACxB,KAAK,EACL,gBAAgB,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAClD,OAAO,CACR,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export declare const DELETE_MODES: readonly ["cascade", "detach_shared"];
|
|
2
2
|
export declare const SHARING_MODES: readonly ["private", "public", "unlisted"];
|
|
3
|
+
export declare const HOOK_TRIGGER_EVENTS: readonly ["artifact.finalized"];
|
|
4
|
+
export declare const HOOK_SCOPES: readonly ["self", "subtree", "graph"];
|
|
5
|
+
export declare const HOOK_RERUN_POLICIES: readonly ["if_inputs_changed"];
|
|
3
6
|
export declare const STATUS_FILTERS: readonly ["active", "archived", "deleted", "all"];
|
|
4
7
|
export declare const BUDGET_SOURCES: readonly ["prepaid", "postpaid", "promotional", "grant"];
|
|
5
8
|
export declare const GRANT_BUDGET_SOURCES: readonly ["user", "root"];
|
|
@@ -9,6 +12,9 @@ export declare const NODE_PROJECTION: readonly ["core", "topology", "compact", "
|
|
|
9
12
|
export declare const APPROVAL_STATUS: readonly ["active", "expired"];
|
|
10
13
|
export type DeleteMode = (typeof DELETE_MODES)[number];
|
|
11
14
|
export type SharingMode = (typeof SHARING_MODES)[number];
|
|
15
|
+
export type HookTriggerEvent = (typeof HOOK_TRIGGER_EVENTS)[number];
|
|
16
|
+
export type HookScope = (typeof HOOK_SCOPES)[number];
|
|
17
|
+
export type HookRerunPolicy = (typeof HOOK_RERUN_POLICIES)[number];
|
|
12
18
|
export type StatusFilter = (typeof STATUS_FILTERS)[number];
|
|
13
19
|
export type BudgetSource = (typeof BUDGET_SOURCES)[number];
|
|
14
20
|
export type GrantBudgetSource = (typeof GRANT_BUDGET_SOURCES)[number];
|
|
@@ -2,6 +2,9 @@ export const DELETE_MODES = ['cascade', 'detach_shared'];
|
|
|
2
2
|
// Mirrors the server's NodeSharingMode literal and parse_node_sharing_mode in
|
|
3
3
|
// server/node_sharing_service.py. The server rejects any other value with 422.
|
|
4
4
|
export const SHARING_MODES = ['private', 'public', 'unlisted'];
|
|
5
|
+
export const HOOK_TRIGGER_EVENTS = ['artifact.finalized'];
|
|
6
|
+
export const HOOK_SCOPES = ['self', 'subtree', 'graph'];
|
|
7
|
+
export const HOOK_RERUN_POLICIES = ['if_inputs_changed'];
|
|
5
8
|
export const STATUS_FILTERS = ['active', 'archived', 'deleted', 'all'];
|
|
6
9
|
export const BUDGET_SOURCES = ['prepaid', 'postpaid', 'promotional', 'grant'];
|
|
7
10
|
export const GRANT_BUDGET_SOURCES = ['user', 'root'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/commands/enums.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,eAAe,CAAU,CAAC;AAClE,8EAA8E;AAC9E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;AACxE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAU,CAAC;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,CAAU,CAAC;AACvF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,CAAU,CAAC;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/commands/enums.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,eAAe,CAAU,CAAC;AAClE,8EAA8E;AAC9E,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,oBAAoB,CAAU,CAAC;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AACjE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,mBAAmB,CAAU,CAAC;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAU,CAAC;AAChF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,CAAU,CAAC;AACvF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AACzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,MAAM,CAAU,CAAC;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AAChF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAU,CAAC"}
|
|
@@ -4,9 +4,5 @@ export interface EnvSwitchArgs {
|
|
|
4
4
|
name: string;
|
|
5
5
|
}
|
|
6
6
|
export declare function runEnvSwitch(args: EnvSwitchArgs): Promise<void>;
|
|
7
|
-
export interface EnvListArgs {
|
|
8
|
-
configPath: string;
|
|
9
|
-
}
|
|
10
|
-
export declare function runEnvList(args: EnvListArgs): Promise<string>;
|
|
11
7
|
export declare const envSwitchCommand: CommandHandler;
|
|
12
8
|
export declare const envListCommand: CommandHandler;
|
|
@@ -3,6 +3,7 @@ import path from 'node:path';
|
|
|
3
3
|
import { CliUsageError } from '../errors.js';
|
|
4
4
|
import { EXIT_USAGE } from '../exit-codes.js';
|
|
5
5
|
import { BUILTIN_PROFILES, BUILTIN_PROFILE_NAMES, isBuiltinProfileName, } from '../auth/profiles.js';
|
|
6
|
+
import { isInternalMode } from './help.js';
|
|
6
7
|
async function readConfigFile(configPath) {
|
|
7
8
|
try {
|
|
8
9
|
const raw = await readFile(configPath, 'utf8');
|
|
@@ -19,7 +20,9 @@ async function writeConfigFile(configPath, config) {
|
|
|
19
20
|
}
|
|
20
21
|
export async function runEnvSwitch(args) {
|
|
21
22
|
if (!isBuiltinProfileName(args.name)) {
|
|
22
|
-
const
|
|
23
|
+
const internal = isInternalMode();
|
|
24
|
+
const visibleNames = BUILTIN_PROFILE_NAMES.filter((name) => internal || !BUILTIN_PROFILES[name].hidden);
|
|
25
|
+
const available = visibleNames.join(', ');
|
|
23
26
|
// Bad --name is an argument-validation error, not a transport failure.
|
|
24
27
|
// Scripts that retry on EXIT_TRANSPORT (2) must not retry this;
|
|
25
28
|
// EXIT_USAGE (1) is the right signal.
|
|
@@ -29,16 +32,6 @@ export async function runEnvSwitch(args) {
|
|
|
29
32
|
config.activeProfile = args.name;
|
|
30
33
|
await writeConfigFile(args.configPath, config);
|
|
31
34
|
}
|
|
32
|
-
export async function runEnvList(args) {
|
|
33
|
-
const config = await readConfigFile(args.configPath);
|
|
34
|
-
const active = typeof config.activeProfile === 'string' ? config.activeProfile : null;
|
|
35
|
-
const lines = BUILTIN_PROFILE_NAMES.map((name) => {
|
|
36
|
-
const baseUrl = BUILTIN_PROFILES[name].baseUrl;
|
|
37
|
-
const marker = name === active ? ' (active)' : '';
|
|
38
|
-
return ` ${name.padEnd(10)}${baseUrl}${marker}`;
|
|
39
|
-
});
|
|
40
|
-
return lines.join('\n') + '\n';
|
|
41
|
-
}
|
|
42
35
|
export const envSwitchCommand = async (context) => {
|
|
43
36
|
const rawName = context.params.name;
|
|
44
37
|
if (typeof rawName !== 'string' || !rawName.trim()) {
|
|
@@ -54,8 +47,10 @@ export const envListCommand = async (context) => {
|
|
|
54
47
|
// rendered payload and break scripts that parse `flywheel env:list`.
|
|
55
48
|
const config = await readConfigFile(context.configPath);
|
|
56
49
|
const active = typeof config.activeProfile === 'string' ? config.activeProfile : null;
|
|
50
|
+
const internal = isInternalMode();
|
|
51
|
+
const visibleNames = BUILTIN_PROFILE_NAMES.filter((name) => internal || !BUILTIN_PROFILES[name].hidden);
|
|
57
52
|
return {
|
|
58
|
-
profiles:
|
|
53
|
+
profiles: visibleNames.map((name) => ({
|
|
59
54
|
name,
|
|
60
55
|
baseUrl: BUILTIN_PROFILES[name].baseUrl,
|
|
61
56
|
active: name === active,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/commands/env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAW3C,KAAK,UAAU,cAAc,CAAC,UAAkB;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;QAC9C,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,UAAkB,EAClB,MAAmB;IAEnB,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,MAAM,SAAS,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9E,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAmB;IACpD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAC/C,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,CACrD,CAAC;QACF,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,uEAAuE;QACvE,gEAAgE;QAChE,sCAAsC;QACtC,MAAM,IAAI,aAAa,CACrB,oBAAoB,IAAI,CAAC,IAAI,yBAAyB,SAAS,EAAE,EACjE,EAAE,QAAQ,EAAE,UAAU,EAAE,CACzB,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;IACjC,MAAM,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IACpC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,aAAa,CAAC,kCAAkC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,YAAY,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9D,sEAAsE;IACtE,oEAAoE;IACpE,sEAAsE;IACtE,qEAAqE;IACrE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IACtF,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,MAAM,YAAY,GAAG,qBAAqB,CAAC,MAAM,CAC/C,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,CACrD,CAAC;IACF,OAAO;QACL,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI;YACJ,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO;YACvC,MAAM,EAAE,IAAI,KAAK,MAAM;SACxB,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,42 +1,38 @@
|
|
|
1
|
-
import { createWriteStream } from 'node:fs';
|
|
2
1
|
import { CliUsageError } from '../errors.js';
|
|
2
|
+
import { openWriteStreamOrFail } from './_stream-file-out.js';
|
|
3
3
|
import { makeSafeStreamWriter } from './_stream-writer.js';
|
|
4
4
|
export const exportHistoryCommand = async (context) => {
|
|
5
5
|
if (!context.requestRaw) {
|
|
6
6
|
throw new CliUsageError('binary transport unavailable in this context');
|
|
7
7
|
}
|
|
8
|
+
// Open and validate ``--out`` BEFORE dispatching the HTTP request;
|
|
9
|
+
// ``/legacy/history/export.jsonl`` is a history-sized feed and we
|
|
10
|
+
// should not start that server-side work just to fail locally on a
|
|
11
|
+
// bad output path. The helper writes to a ``.partial`` temp file
|
|
12
|
+
// next to the destination so a later request failure leaves the
|
|
13
|
+
// caller's prior ``--out`` contents untouched.
|
|
8
14
|
const outPath = context.globals?.outPath;
|
|
9
|
-
const
|
|
15
|
+
const fileHandle = await openWriteStreamOrFail(outPath);
|
|
10
16
|
// Stream the response body chunk-by-chunk to avoid buffering the full
|
|
11
|
-
// JSONL payload in memory.
|
|
12
|
-
//
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
resolve();
|
|
22
|
-
};
|
|
23
|
-
const onError = (err) => {
|
|
24
|
-
candidate.off('open', onOpen);
|
|
25
|
-
reject(err);
|
|
26
|
-
};
|
|
27
|
-
candidate.once('open', onOpen);
|
|
28
|
-
candidate.once('error', onError);
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
catch (err) {
|
|
32
|
-
candidate.destroy();
|
|
33
|
-
throw new CliUsageError(`cannot open --out=${outPath}: ${err.message}`);
|
|
17
|
+
// JSONL payload in memory. ``response.text()`` here would materialize
|
|
18
|
+
// the whole body before a single byte reached the writer.
|
|
19
|
+
let response;
|
|
20
|
+
try {
|
|
21
|
+
response = await context.requestRaw('GET', '/legacy/history/export.jsonl');
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
if (fileHandle) {
|
|
25
|
+
fileHandle.stream.destroy();
|
|
26
|
+
await fileHandle.abort();
|
|
34
27
|
}
|
|
35
|
-
|
|
36
|
-
// destination destroyed mid-stream) surface deterministically
|
|
37
|
-
// instead of being swallowed into a truncated file + exit 0.
|
|
38
|
-
safeWriter = makeSafeStreamWriter(candidate);
|
|
28
|
+
throw err;
|
|
39
29
|
}
|
|
30
|
+
// Wrap the opened stream so in-loop write failures (ENOSPC, EIO,
|
|
31
|
+
// EPIPE, destination destroyed mid-stream) surface deterministically
|
|
32
|
+
// instead of being swallowed into a truncated file + exit 0.
|
|
33
|
+
const safeWriter = fileHandle
|
|
34
|
+
? makeSafeStreamWriter(fileHandle.stream)
|
|
35
|
+
: null;
|
|
40
36
|
// Prefer the injected stdout writer so programmatic runCli callers
|
|
41
37
|
// capture streamed output; fall back to process.stdout for direct
|
|
42
38
|
// handler invocations (e.g. unit tests that build a bare context).
|
|
@@ -52,13 +48,18 @@ export const exportHistoryCommand = async (context) => {
|
|
|
52
48
|
writeStdout(chunk);
|
|
53
49
|
};
|
|
54
50
|
if (!response.body) {
|
|
55
|
-
// No body — nothing to stream. Close
|
|
51
|
+
// No body — nothing to stream. Close + finalize (renames the empty
|
|
52
|
+
// temp over the destination so callers observing ``outPath`` always
|
|
53
|
+
// see a fully-formed result, never a stale prior version).
|
|
56
54
|
if (safeWriter)
|
|
57
55
|
await safeWriter.close();
|
|
56
|
+
if (fileHandle)
|
|
57
|
+
await fileHandle.finalize();
|
|
58
58
|
return null;
|
|
59
59
|
}
|
|
60
60
|
const decoder = new TextDecoder();
|
|
61
61
|
const reader = response.body.getReader();
|
|
62
|
+
let succeeded = false;
|
|
62
63
|
try {
|
|
63
64
|
while (true) {
|
|
64
65
|
const { value, done } = await reader.read();
|
|
@@ -71,11 +72,20 @@ export const exportHistoryCommand = async (context) => {
|
|
|
71
72
|
const tail = decoder.decode();
|
|
72
73
|
if (tail)
|
|
73
74
|
await write(tail);
|
|
75
|
+
succeeded = true;
|
|
74
76
|
}
|
|
75
77
|
finally {
|
|
76
78
|
reader.releaseLock();
|
|
77
79
|
if (safeWriter)
|
|
78
80
|
await safeWriter.close();
|
|
81
|
+
if (fileHandle) {
|
|
82
|
+
if (succeeded) {
|
|
83
|
+
await fileHandle.finalize();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
await fileHandle.abort();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
79
89
|
}
|
|
80
90
|
return null;
|
|
81
91
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-history.js","sourceRoot":"","sources":["../../src/commands/export-history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"export-history.js","sourceRoot":"","sources":["../../src/commands/export-history.ts"],"names":[],"mappings":"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"}
|