@tutorflow/cli 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +261 -659
- package/dist/client.d.ts +16 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +76 -16
- package/dist/client.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +38 -23
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +20 -12
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/classroom.d.ts +3 -0
- package/dist/commands/classroom.d.ts.map +1 -0
- package/dist/commands/classroom.js +27 -0
- package/dist/commands/classroom.js.map +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +4 -4
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/course.d.ts.map +1 -1
- package/dist/commands/course.js +27 -96
- package/dist/commands/course.js.map +1 -1
- package/dist/commands/credits.d.ts +3 -0
- package/dist/commands/credits.d.ts.map +1 -0
- package/dist/commands/credits.js +39 -0
- package/dist/commands/credits.js.map +1 -0
- package/dist/commands/evaluate.d.ts +3 -0
- package/dist/commands/evaluate.d.ts.map +1 -1
- package/dist/commands/evaluate.js +98 -57
- package/dist/commands/evaluate.js.map +1 -1
- package/dist/commands/interactive.d.ts +13 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +105 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/commands/learner.d.ts +4 -0
- package/dist/commands/learner.d.ts.map +1 -0
- package/dist/commands/learner.js +76 -0
- package/dist/commands/learner.js.map +1 -0
- package/dist/commands/module.d.ts.map +1 -1
- package/dist/commands/module.js +20 -98
- package/dist/commands/module.js.map +1 -1
- package/dist/commands/platform.d.ts.map +1 -1
- package/dist/commands/platform.js +10 -2
- package/dist/commands/platform.js.map +1 -1
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +69 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/slide.d.ts.map +1 -1
- package/dist/commands/slide.js +27 -97
- package/dist/commands/slide.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +40 -106
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/video.d.ts.map +1 -1
- package/dist/commands/video.js +143 -86
- package/dist/commands/video.js.map +1 -1
- package/dist/commands/webhook.d.ts +3 -0
- package/dist/commands/webhook.d.ts.map +1 -0
- package/dist/commands/webhook.js +75 -0
- package/dist/commands/webhook.js.map +1 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +17 -16
- package/dist/config.js.map +1 -1
- package/dist/content/context.d.ts +26 -0
- package/dist/content/context.d.ts.map +1 -0
- package/dist/content/context.js +74 -0
- package/dist/content/context.js.map +1 -0
- package/dist/content/resource.d.ts +66 -0
- package/dist/content/resource.d.ts.map +1 -0
- package/dist/content/resource.js +181 -0
- package/dist/content/resource.js.map +1 -0
- package/dist/content/runs.d.ts +51 -0
- package/dist/content/runs.d.ts.map +1 -0
- package/dist/content/runs.js +171 -0
- package/dist/content/runs.js.map +1 -0
- package/dist/content/sharing.d.ts +24 -0
- package/dist/content/sharing.d.ts.map +1 -0
- package/dist/content/sharing.js +88 -0
- package/dist/content/sharing.js.map +1 -0
- package/dist/index.js +71 -21
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +15 -65
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -4
- package/dist/utils/args.d.ts +15 -0
- package/dist/utils/args.d.ts.map +1 -0
- package/dist/utils/args.js +91 -0
- package/dist/utils/args.js.map +1 -0
- package/dist/utils/keys.d.ts +11 -0
- package/dist/utils/keys.d.ts.map +1 -0
- package/dist/utils/keys.js +29 -0
- package/dist/utils/keys.js.map +1 -0
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/output.js +21 -6
- package/dist/utils/output.js.map +1 -1
- package/dist/utils/runtime.d.ts +14 -4
- package/dist/utils/runtime.d.ts.map +1 -1
- package/dist/utils/runtime.js +42 -7
- package/dist/utils/runtime.js.map +1 -1
- package/package.json +4 -3
- package/dist/utils/spinner.d.ts +0 -8
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js +0 -26
- package/dist/utils/spinner.js.map +0 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RUN_KIND_PATHS = exports.DEFAULT_RENDER_TIMEOUT_SECONDS = exports.DEFAULT_WAIT_TIMEOUT_SECONDS = void 0;
|
|
4
|
+
exports.waitForRun = waitForRun;
|
|
5
|
+
exports.fetchRunResource = fetchRunResource;
|
|
6
|
+
exports.waitForResourceRun = waitForResourceRun;
|
|
7
|
+
exports.waitForRender = waitForRender;
|
|
8
|
+
const client_1 = require("../client");
|
|
9
|
+
const runtime_1 = require("../utils/runtime");
|
|
10
|
+
const context_1 = require("./context");
|
|
11
|
+
/**
|
|
12
|
+
* Waiting on asynchronous Content API work: generation runs, game and
|
|
13
|
+
* simulation builds, and video renders. Each poll is a plain GET, so an agent
|
|
14
|
+
* that times out can pick up again with `tutorflow run wait <runId>`.
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_POLL_INTERVAL_MS = 3000;
|
|
17
|
+
/** Consecutive transient failures (5xx, 429, network) a wait rides out. */
|
|
18
|
+
const MAX_TRANSIENT_POLL_FAILURES = 5;
|
|
19
|
+
exports.DEFAULT_WAIT_TIMEOUT_SECONDS = 900;
|
|
20
|
+
exports.DEFAULT_RENDER_TIMEOUT_SECONDS = 1800;
|
|
21
|
+
/** Path segment of the resource a generation run of each kind produces. */
|
|
22
|
+
exports.RUN_KIND_PATHS = {
|
|
23
|
+
course: 'courses',
|
|
24
|
+
slide: 'slides',
|
|
25
|
+
test: 'tests',
|
|
26
|
+
module: 'modules',
|
|
27
|
+
};
|
|
28
|
+
function pollIntervalMs() {
|
|
29
|
+
const fromEnv = Number((0, client_1.envValue)('TUTORFLOW_POLL_INTERVAL_MS'));
|
|
30
|
+
return Number.isFinite(fromEnv) && fromEnv > 0 ? fromEnv : DEFAULT_POLL_INTERVAL_MS;
|
|
31
|
+
}
|
|
32
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
33
|
+
function isTransient(error) {
|
|
34
|
+
if (!(error instanceof runtime_1.CliError))
|
|
35
|
+
return false;
|
|
36
|
+
return error.code === 'ENETWORK' || error.code === 'EHTTP_429' || /^EHTTP_5\d\d$/.test(error.code);
|
|
37
|
+
}
|
|
38
|
+
async function pollUntilSettled(opts) {
|
|
39
|
+
const deadline = Date.now() + opts.timeoutSeconds * 1000;
|
|
40
|
+
let lastLine = '';
|
|
41
|
+
let failures = 0;
|
|
42
|
+
for (;;) {
|
|
43
|
+
let state;
|
|
44
|
+
try {
|
|
45
|
+
state = await opts.fetch();
|
|
46
|
+
failures = 0;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
failures += 1;
|
|
50
|
+
if (!isTransient(error) || failures > MAX_TRANSIENT_POLL_FAILURES || Date.now() >= deadline) {
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
(0, runtime_1.printProgress)(`poll failed (${error.code}), retrying`);
|
|
54
|
+
await sleep(pollIntervalMs() * failures);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (opts.isSettled(state))
|
|
58
|
+
return state;
|
|
59
|
+
const line = opts.describe(state);
|
|
60
|
+
if (line !== lastLine)
|
|
61
|
+
(0, runtime_1.printProgress)(line);
|
|
62
|
+
lastLine = line;
|
|
63
|
+
if (Date.now() >= deadline)
|
|
64
|
+
throw opts.timeoutError(state);
|
|
65
|
+
await sleep(Math.min(pollIntervalMs(), Math.max(deadline - Date.now(), 0)));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function timeoutError(message, details) {
|
|
69
|
+
return new runtime_1.CliError(message, { code: 'ETIMEOUT', exitCode: 1, details });
|
|
70
|
+
}
|
|
71
|
+
async function waitForRun(ctx, runId, timeoutSeconds) {
|
|
72
|
+
const run = await pollUntilSettled({
|
|
73
|
+
fetch: () => ctx.client.request('GET', (0, context_1.classroomPath)(ctx, `/runs/${(0, context_1.segment)(runId)}`)),
|
|
74
|
+
isSettled: (r) => r.status === 'completed' || r.status === 'failed',
|
|
75
|
+
describe: (r) => {
|
|
76
|
+
const stage = r.stage ? ` · ${r.stage}` : '';
|
|
77
|
+
const progress = r.progress?.total
|
|
78
|
+
? ` · ${r.progress.completed}/${r.progress.total} ${r.progress.unit}s`
|
|
79
|
+
: '';
|
|
80
|
+
return `run ${runId}: ${r.status}${stage}${progress}`;
|
|
81
|
+
},
|
|
82
|
+
timeoutSeconds,
|
|
83
|
+
timeoutError: (r) => timeoutError(`Run ${runId} is still ${r.status} after ${timeoutSeconds}s. Keep waiting with: tutorflow run wait ${runId}`, { runId, status: r.status }),
|
|
84
|
+
});
|
|
85
|
+
if (run.status === 'failed') {
|
|
86
|
+
throw new runtime_1.CliError(`Run ${runId} failed: ${run.error ?? 'no reason given'}`, {
|
|
87
|
+
code: 'ERUNFAILED',
|
|
88
|
+
exitCode: 1,
|
|
89
|
+
details: { runId, run, hint: resumeHint(run) },
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return run;
|
|
93
|
+
}
|
|
94
|
+
const CREDIT_ERROR_PATTERN = /credit/i;
|
|
95
|
+
function resumeHint(run) {
|
|
96
|
+
const creditHint = CREDIT_ERROR_PATTERN.test(run.error ?? '')
|
|
97
|
+
? 'The organization ran out of AI Credits: `tutorflow credits balance`, then `tutorflow agent billing session`.'
|
|
98
|
+
: undefined;
|
|
99
|
+
const resume = run.kind === 'course' ? `Resume the unfinished lessons with: tutorflow run resume ${run.runId}` : undefined;
|
|
100
|
+
return [creditHint, resume].filter(Boolean).join(' ') || undefined;
|
|
101
|
+
}
|
|
102
|
+
/** Fetch what a completed run produced, or undefined when it names nothing. */
|
|
103
|
+
async function fetchRunResource(ctx, run) {
|
|
104
|
+
if (!run.resourceId || !run.kind || !exports.RUN_KIND_PATHS[run.kind])
|
|
105
|
+
return undefined;
|
|
106
|
+
return ctx.client.request('GET', (0, context_1.classroomPath)(ctx, `/${exports.RUN_KIND_PATHS[run.kind]}/${(0, context_1.segment)(run.resourceId)}`));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Wait for a game or simulation brief/build/revise. The resource run route
|
|
110
|
+
* reports an `active` step while one runs and the `last` finished one after.
|
|
111
|
+
*/
|
|
112
|
+
async function waitForResourceRun(ctx, resourcePath, id, runId, timeoutSeconds) {
|
|
113
|
+
// Without a run id the only proof the new step ended is seeing it run first;
|
|
114
|
+
// otherwise `last` could be the previous step's result.
|
|
115
|
+
let sawActive = false;
|
|
116
|
+
const status = await pollUntilSettled({
|
|
117
|
+
fetch: async () => {
|
|
118
|
+
const s = await ctx.client.request('GET', (0, context_1.classroomPath)(ctx, `/${resourcePath}/${(0, context_1.segment)(id)}/run`));
|
|
119
|
+
if (s.active)
|
|
120
|
+
sawActive = true;
|
|
121
|
+
return s;
|
|
122
|
+
},
|
|
123
|
+
isSettled: (s) => !s.active && Boolean(s.last) && (runId ? s.last?.runId === runId : sawActive),
|
|
124
|
+
describe: (s) => s.active
|
|
125
|
+
? `${resourcePath} ${id}: ${s.active.phase} running${s.active.stage ? ` · ${s.active.stage}` : ''}`
|
|
126
|
+
: `${resourcePath} ${id}: waiting for the run to report`,
|
|
127
|
+
timeoutSeconds,
|
|
128
|
+
timeoutError: () => timeoutError(`${resourcePath} ${id} is still running after ${timeoutSeconds}s. Check with: tutorflow ${resourceCommand(resourcePath)} status ${id}`, { id, runId }),
|
|
129
|
+
});
|
|
130
|
+
if (status.last?.status === 'failed') {
|
|
131
|
+
throw new runtime_1.CliError(`${status.last.phase} of ${id} failed: ${status.last.message ?? 'no reason given'}`, { code: 'ERUNFAILED', exitCode: 1, details: { id, runId: status.last.runId, run: status } });
|
|
132
|
+
}
|
|
133
|
+
return status;
|
|
134
|
+
}
|
|
135
|
+
function resourceCommand(resourcePath) {
|
|
136
|
+
return resourcePath === 'games' ? 'game' : 'simulation';
|
|
137
|
+
}
|
|
138
|
+
async function waitForRender(ctx, videoId, timeoutSeconds) {
|
|
139
|
+
// A render cancelled meanwhile goes back to IDLE; only trust IDLE after RENDERING.
|
|
140
|
+
let sawRendering = false;
|
|
141
|
+
const status = await pollUntilSettled({
|
|
142
|
+
fetch: async () => {
|
|
143
|
+
const s = await ctx.client.request('GET', (0, context_1.classroomPath)(ctx, `/videos/${(0, context_1.segment)(videoId)}/render`));
|
|
144
|
+
if (s.renderStatus === 'RENDERING')
|
|
145
|
+
sawRendering = true;
|
|
146
|
+
return s;
|
|
147
|
+
},
|
|
148
|
+
isSettled: (s) => s.renderStatus === 'COMPLETED' ||
|
|
149
|
+
s.renderStatus === 'FAILED' ||
|
|
150
|
+
(sawRendering && s.renderStatus === 'IDLE'),
|
|
151
|
+
describe: (s) => `video ${videoId}: ${s.renderStatus}${typeof s.progress === 'number' ? ` · ${Math.round(s.progress)}%` : ''}`,
|
|
152
|
+
timeoutSeconds,
|
|
153
|
+
timeoutError: (s) => timeoutError(`Render of ${videoId} is still ${s.renderStatus} after ${timeoutSeconds}s. Check with: tutorflow video render-status ${videoId}`, { id: videoId, renderStatus: s.renderStatus }),
|
|
154
|
+
});
|
|
155
|
+
if (status.renderStatus === 'IDLE') {
|
|
156
|
+
throw new runtime_1.CliError(`Render of ${videoId} stopped without finishing (cancelled?)`, {
|
|
157
|
+
code: 'ERUNFAILED',
|
|
158
|
+
exitCode: 1,
|
|
159
|
+
details: { id: videoId, render: status },
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (status.renderStatus === 'FAILED') {
|
|
163
|
+
throw new runtime_1.CliError(`Render of ${videoId} failed: ${status.renderError ?? 'no reason given'}`, {
|
|
164
|
+
code: 'ERUNFAILED',
|
|
165
|
+
exitCode: 1,
|
|
166
|
+
details: { id: videoId, render: status },
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return status;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/content/runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { type ResourceSpec } from './resource';
|
|
3
|
+
/**
|
|
4
|
+
* `<resource> share <id>` and `<resource> visibility <id> <value>`: a PATCH of
|
|
5
|
+
* the resource's visibility. The PATCH answer carries the new publicUrl.
|
|
6
|
+
*/
|
|
7
|
+
export interface Sharing {
|
|
8
|
+
/** Values `visibility` accepts, as the Content API spells them. */
|
|
9
|
+
values: readonly string[];
|
|
10
|
+
/** What `share` sets: the least open value that still opens by link. */
|
|
11
|
+
shareValue: string;
|
|
12
|
+
/** What `share --listed` sets, for resources that can open by link unlisted. */
|
|
13
|
+
listedValue?: string;
|
|
14
|
+
/** Modules have `isPublic` instead of `visibility`; PUBLIC/PRIVATE map onto it. */
|
|
15
|
+
booleanField?: 'isPublic';
|
|
16
|
+
/** Why publicUrl can still be null after sharing, beyond the sandbox classroom. */
|
|
17
|
+
publicUrlNote?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const PUBLIC_PRIVATE: Sharing;
|
|
20
|
+
export declare const WITH_UNLISTED: Sharing;
|
|
21
|
+
export declare const COURSE_SHARING: Sharing;
|
|
22
|
+
export declare const MODULE_SHARING: Sharing;
|
|
23
|
+
export declare function addShareCommands(parent: Command, spec: ResourceSpec, sharing: Sharing): void;
|
|
24
|
+
//# sourceMappingURL=sharing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharing.d.ts","sourceRoot":"","sources":["../../src/content/sharing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF;;;GAGG;AAEH,MAAM,WAAW,OAAO;IACtB,mEAAmE;IACnE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,mFAAmF;IACnF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,EAAE,OAG5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,OAI5B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,OAG5B,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B5F"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MODULE_SHARING = exports.COURSE_SHARING = exports.WITH_UNLISTED = exports.PUBLIC_PRIVATE = void 0;
|
|
4
|
+
exports.addShareCommands = addShareCommands;
|
|
5
|
+
const output_1 = require("../utils/output");
|
|
6
|
+
const runtime_1 = require("../utils/runtime");
|
|
7
|
+
const keys_1 = require("../utils/keys");
|
|
8
|
+
const context_1 = require("./context");
|
|
9
|
+
const resource_1 = require("./resource");
|
|
10
|
+
exports.PUBLIC_PRIVATE = {
|
|
11
|
+
values: ['PUBLIC', 'PRIVATE'],
|
|
12
|
+
shareValue: 'PUBLIC',
|
|
13
|
+
};
|
|
14
|
+
exports.WITH_UNLISTED = {
|
|
15
|
+
values: ['PUBLIC', 'UNLISTED', 'PRIVATE'],
|
|
16
|
+
shareValue: 'UNLISTED',
|
|
17
|
+
listedValue: 'PUBLIC',
|
|
18
|
+
};
|
|
19
|
+
exports.COURSE_SHARING = {
|
|
20
|
+
values: ['PUBLIC', 'PRIVATE', 'ORGANIZATION', 'CLASSROOM', 'COURSE'],
|
|
21
|
+
shareValue: 'PUBLIC',
|
|
22
|
+
publicUrlNote: 'A course page opens once the course is published.',
|
|
23
|
+
};
|
|
24
|
+
exports.MODULE_SHARING = {
|
|
25
|
+
...exports.PUBLIC_PRIVATE,
|
|
26
|
+
booleanField: 'isPublic',
|
|
27
|
+
};
|
|
28
|
+
const SANDBOX_NOTE = 'The sandbox classroom of tf_content_test_ keys has no public pages.';
|
|
29
|
+
function addShareCommands(parent, spec, sharing) {
|
|
30
|
+
const share = parent
|
|
31
|
+
.command('share <id>')
|
|
32
|
+
.description(shareDescription(spec, sharing));
|
|
33
|
+
if (sharing.listedValue) {
|
|
34
|
+
share.option('--listed', `Set ${sharing.listedValue} so it is also listed and searchable`);
|
|
35
|
+
}
|
|
36
|
+
share.action((0, runtime_1.command)(async (id, options) => {
|
|
37
|
+
const value = options.listed && sharing.listedValue ? sharing.listedValue : sharing.shareValue;
|
|
38
|
+
await setVisibility(spec, sharing, id, value);
|
|
39
|
+
}));
|
|
40
|
+
parent
|
|
41
|
+
.command('visibility <id> <value>')
|
|
42
|
+
.description(`Set the ${spec.noun}'s visibility: ${sharing.values.join(', ')}${sharing.booleanField ? ` (sets ${sharing.booleanField})` : ''}`)
|
|
43
|
+
.action((0, runtime_1.command)(async (id, value) => {
|
|
44
|
+
await setVisibility(spec, sharing, id, parseVisibility(value, sharing));
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
function parseVisibility(value, sharing) {
|
|
48
|
+
const choice = value.toUpperCase();
|
|
49
|
+
if (!sharing.values.includes(choice)) {
|
|
50
|
+
throw new runtime_1.CliError(`visibility must be one of: ${sharing.values.join(', ')} (got "${value}")`, {
|
|
51
|
+
code: 'EINVAL',
|
|
52
|
+
exitCode: 2,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return choice;
|
|
56
|
+
}
|
|
57
|
+
function shareDescription(spec, sharing) {
|
|
58
|
+
const listed = sharing.listedValue
|
|
59
|
+
? ` (${sharing.shareValue}: opens by link but stays out of lists; --listed for ${sharing.listedValue})`
|
|
60
|
+
: ` (${sharing.shareValue})`;
|
|
61
|
+
return `Make the ${spec.noun} open by link and print its publicUrl${listed}`;
|
|
62
|
+
}
|
|
63
|
+
async function setVisibility(spec, sharing, id, value) {
|
|
64
|
+
const body = sharing.booleanField
|
|
65
|
+
? { [sharing.booleanField]: value === 'PUBLIC' }
|
|
66
|
+
: { visibility: value };
|
|
67
|
+
const ctx = await (0, context_1.resolveContentContext)();
|
|
68
|
+
const updated = await ctx.client.request('PATCH', (0, resource_1.resourcePath)(ctx, spec, id), body);
|
|
69
|
+
if ((0, runtime_1.isJsonMode)()) {
|
|
70
|
+
(0, output_1.printResult)(updated);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const field = sharing.booleanField ?? 'visibility';
|
|
74
|
+
(0, output_1.printResult)({
|
|
75
|
+
id: updated.id ?? id,
|
|
76
|
+
[field]: updated[field] ?? body[field],
|
|
77
|
+
publicUrl: updated.publicUrl ?? null,
|
|
78
|
+
editorUrl: updated.editorUrl ?? null,
|
|
79
|
+
});
|
|
80
|
+
const opensByLink = value === sharing.shareValue || value === sharing.listedValue;
|
|
81
|
+
if (!updated.publicUrl && opensByLink) {
|
|
82
|
+
const isSandbox = (0, keys_1.getApiKeyKind)(ctx.client.apiKey) === 'content_test';
|
|
83
|
+
(0, output_1.printStatus)(['No publicUrl yet.', sharing.publicUrlNote, isSandbox ? SANDBOX_NOTE : undefined]
|
|
84
|
+
.filter(Boolean)
|
|
85
|
+
.join(' '));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=sharing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharing.js","sourceRoot":"","sources":["../../src/content/sharing.ts"],"names":[],"mappings":";;;AAiDA,4CA0BC;AA1ED,4CAA2D;AAC3D,8CAAiE;AACjE,wCAA8C;AAC9C,uCAAkD;AAClD,yCAAmF;AAoBtE,QAAA,cAAc,GAAY;IACrC,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,UAAU,EAAE,QAAQ;CACrB,CAAC;AAEW,QAAA,aAAa,GAAY;IACpC,MAAM,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC;IACzC,UAAU,EAAE,UAAU;IACtB,WAAW,EAAE,QAAQ;CACtB,CAAC;AAEW,QAAA,cAAc,GAAY;IACrC,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC;IACpE,UAAU,EAAE,QAAQ;IACpB,aAAa,EAAE,mDAAmD;CACnE,CAAC;AAEW,QAAA,cAAc,GAAY;IACrC,GAAG,sBAAc;IACjB,YAAY,EAAE,UAAU;CACzB,CAAC;AAEF,MAAM,YAAY,GAAG,qEAAqE,CAAC;AAE3F,SAAgB,gBAAgB,CAAC,MAAe,EAAE,IAAkB,EAAE,OAAgB;IACpF,MAAM,KAAK,GAAG,MAAM;SACjB,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,OAAO,CAAC,WAAW,sCAAsC,CAAC,CAAC;IAC7F,CAAC;IACD,KAAK,CAAC,MAAM,CACV,IAAA,iBAAO,EAAC,KAAK,EAAE,EAAU,EAAE,OAA6B,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC/F,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CACH,CAAC;IAEF,MAAM;SACH,OAAO,CAAC,yBAAyB,CAAC;SAClC,WAAW,CACV,WAAW,IAAI,CAAC,IAAI,kBAAkB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAC7D,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAC7D,EAAE,CACH;SACA,MAAM,CACL,IAAA,iBAAO,EAAC,KAAK,EAAE,EAAU,EAAE,KAAa,EAAE,EAAE;QAC1C,MAAM,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CACH,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,OAAgB;IACtD,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,kBAAQ,CAAC,8BAA8B,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC7F,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAkB,EAAE,OAAgB;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW;QAChC,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,wDAAwD,OAAO,CAAC,WAAW,GAAG;QACvG,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,GAAG,CAAC;IAC/B,OAAO,YAAY,IAAI,CAAC,IAAI,wCAAwC,MAAM,EAAE,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,IAAkB,EAClB,OAAgB,EAChB,EAAU,EACV,KAAa;IAEb,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY;QAC/B,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,KAAK,QAAQ,EAAE;QAChD,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,IAAA,+BAAqB,GAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAkB,OAAO,EAAE,IAAA,uBAAY,EAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACtG,IAAI,IAAA,oBAAU,GAAE,EAAE,CAAC;QACjB,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,IAAI,YAAY,CAAC;IACnD,IAAA,oBAAW,EAAC;QACV,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE;QACpB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;QACpC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;KACrC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,KAAK,KAAK,OAAO,CAAC,UAAU,IAAI,KAAK,KAAK,OAAO,CAAC,WAAW,CAAC;IAClF,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,WAAW,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,IAAA,oBAAa,EAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC;QACtE,IAAA,oBAAW,EACT,CAAC,mBAAmB,EAAE,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;aAC/E,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,46 +3,96 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
const commander_1 = require("commander");
|
|
5
5
|
const auth_1 = require("./commands/auth");
|
|
6
|
-
const slide_1 = require("./commands/slide");
|
|
7
|
-
const video_1 = require("./commands/video");
|
|
8
|
-
const course_1 = require("./commands/course");
|
|
9
|
-
const evaluate_1 = require("./commands/evaluate");
|
|
10
6
|
const config_1 = require("./commands/config");
|
|
11
7
|
const agent_1 = require("./commands/agent");
|
|
12
|
-
const module_1 = require("./commands/module");
|
|
13
|
-
const test_1 = require("./commands/test");
|
|
14
8
|
const platform_1 = require("./commands/platform");
|
|
9
|
+
const classroom_1 = require("./commands/classroom");
|
|
10
|
+
const course_1 = require("./commands/course");
|
|
11
|
+
const slide_1 = require("./commands/slide");
|
|
12
|
+
const test_1 = require("./commands/test");
|
|
13
|
+
const module_1 = require("./commands/module");
|
|
14
|
+
const video_1 = require("./commands/video");
|
|
15
|
+
const interactive_1 = require("./commands/interactive");
|
|
16
|
+
const run_1 = require("./commands/run");
|
|
17
|
+
const evaluate_1 = require("./commands/evaluate");
|
|
18
|
+
const learner_1 = require("./commands/learner");
|
|
19
|
+
const webhook_1 = require("./commands/webhook");
|
|
20
|
+
const credits_1 = require("./commands/credits");
|
|
15
21
|
const runtime_1 = require("./utils/runtime");
|
|
16
22
|
const package_json_1 = require("../package.json");
|
|
17
23
|
commander_1.program
|
|
18
24
|
.name('tutorflow')
|
|
19
|
-
.description('TutorFlow CLI -
|
|
25
|
+
.description('TutorFlow CLI - create courses, slides, tests, modules, videos, games and evaluations through the TutorFlow Content API')
|
|
20
26
|
.version(package_json_1.version)
|
|
21
27
|
.option('--json', 'Output machine-readable JSON to stdout (errors to stderr)')
|
|
22
28
|
.option('--debug', 'Print stack traces on errors (also via DEBUG=1)')
|
|
29
|
+
.option('--classroom <id>', 'Classroom for content commands (default: the account default classroom, or the sandbox for a test key)')
|
|
23
30
|
.hook('preAction', (cmd) => {
|
|
24
31
|
const opts = cmd.opts();
|
|
25
32
|
if (opts.json)
|
|
26
33
|
(0, runtime_1.setJsonMode)(true);
|
|
27
34
|
if (opts.debug)
|
|
28
35
|
(0, runtime_1.setDebugMode)(true);
|
|
36
|
+
(0, runtime_1.setClassroomOverride)(opts.classroom);
|
|
29
37
|
});
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
const commands = [
|
|
39
|
+
auth_1.authCommand,
|
|
40
|
+
config_1.configCommand,
|
|
41
|
+
agent_1.agentCommand,
|
|
42
|
+
platform_1.platformCommand,
|
|
43
|
+
classroom_1.classroomCommand,
|
|
44
|
+
course_1.courseCommand,
|
|
45
|
+
slide_1.slideCommand,
|
|
46
|
+
test_1.testCommand,
|
|
47
|
+
module_1.moduleCommand,
|
|
48
|
+
video_1.videoCommand,
|
|
49
|
+
interactive_1.gameCommand,
|
|
50
|
+
interactive_1.simulationCommand,
|
|
51
|
+
run_1.runCommand,
|
|
52
|
+
evaluate_1.evaluateCommand,
|
|
53
|
+
evaluate_1.evaluationCommand,
|
|
54
|
+
learner_1.learnerCommand,
|
|
55
|
+
webhook_1.webhookCommand,
|
|
56
|
+
credits_1.creditsCommand,
|
|
57
|
+
];
|
|
58
|
+
for (const create of commands)
|
|
59
|
+
commander_1.program.addCommand(create());
|
|
60
|
+
// Usage errors (unknown option, missing argument) happen before preAction, so
|
|
61
|
+
// JSON mode is read from argv here. They follow the same contract as every
|
|
62
|
+
// other bad input: EINVAL, exit 2, JSON on stderr in JSON mode.
|
|
63
|
+
const jsonRequested = process.argv.includes('--json') || process.env.TUTORFLOW_JSON === '1';
|
|
64
|
+
if (jsonRequested)
|
|
65
|
+
(0, runtime_1.setJsonMode)(true);
|
|
66
|
+
function applyErrorHandling(cmd) {
|
|
67
|
+
cmd.exitOverride();
|
|
68
|
+
cmd.configureOutput({
|
|
69
|
+
writeErr: (text) => {
|
|
70
|
+
if (!jsonRequested)
|
|
71
|
+
process.stderr.write(text);
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
cmd.commands.forEach(applyErrorHandling);
|
|
75
|
+
}
|
|
76
|
+
applyErrorHandling(commander_1.program);
|
|
77
|
+
const CLEAN_EXITS = new Set(['commander.helpDisplayed', 'commander.version', 'commander.help']);
|
|
44
78
|
if (!process.argv.slice(2).length) {
|
|
45
79
|
commander_1.program.outputHelp();
|
|
46
80
|
process.exit(1);
|
|
47
81
|
}
|
|
82
|
+
commander_1.program.parseAsync(process.argv).catch((error) => {
|
|
83
|
+
if (error instanceof commander_1.CommanderError) {
|
|
84
|
+
if (CLEAN_EXITS.has(error.code))
|
|
85
|
+
process.exit(error.exitCode);
|
|
86
|
+
// A bare parent command (e.g. `tutorflow course`) shows its help: keep exit 1.
|
|
87
|
+
if (error.code === 'commander.executeSubCommandAsync' || error.exitCode === 0) {
|
|
88
|
+
process.exit(error.exitCode);
|
|
89
|
+
}
|
|
90
|
+
if (jsonRequested) {
|
|
91
|
+
(0, runtime_1.printError)(new runtime_1.CliError(error.message.replace(/^error: /, ''), { code: 'EINVAL', exitCode: 2 }));
|
|
92
|
+
}
|
|
93
|
+
process.exit(2);
|
|
94
|
+
}
|
|
95
|
+
(0, runtime_1.printError)(error);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
});
|
|
48
98
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,32 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Response types
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Response types the CLI reads from the Agent Platform account routes
|
|
3
|
+
* (`/v1/platform/agent/*`) and the Content API evaluation route. Content
|
|
4
|
+
* resources are typed loosely in src/content/resource.ts. The API may return
|
|
5
|
+
* additional fields, tolerated via `[key: string]: unknown`.
|
|
6
6
|
*/
|
|
7
|
-
export interface ResourceBase {
|
|
8
|
-
id: string;
|
|
9
|
-
title?: string;
|
|
10
|
-
status: string;
|
|
11
|
-
createdAt: string;
|
|
12
|
-
previewUrl?: string;
|
|
13
|
-
}
|
|
14
|
-
export interface SlideResource extends ResourceBase {
|
|
15
|
-
[key: string]: unknown;
|
|
16
|
-
}
|
|
17
|
-
export interface VideoResource extends ResourceBase {
|
|
18
|
-
sceneCount?: number;
|
|
19
|
-
[key: string]: unknown;
|
|
20
|
-
}
|
|
21
|
-
export interface CourseResource extends ResourceBase {
|
|
22
|
-
[key: string]: unknown;
|
|
23
|
-
}
|
|
24
|
-
export interface LegacyListResponse<T> {
|
|
25
|
-
data?: T[];
|
|
26
|
-
items?: T[];
|
|
27
|
-
total?: number;
|
|
28
|
-
[key: string]: unknown;
|
|
29
|
-
}
|
|
30
7
|
export interface EvaluationResponse {
|
|
31
8
|
score: number | string;
|
|
32
9
|
feedback: string;
|
|
@@ -36,18 +13,20 @@ export type EvaluationType = 'exact' | 'rubric_short_answer' | 'open_ended';
|
|
|
36
13
|
export type EvaluationTypeInput = EvaluationType | 'rubric' | 'open-ended';
|
|
37
14
|
export interface AgentRegisterResponse {
|
|
38
15
|
organizationId: string;
|
|
16
|
+
/** Deprecated tf_platform_ key. */
|
|
39
17
|
apiKey: string;
|
|
40
18
|
keyPrefix: string;
|
|
19
|
+
/** tf_content_ key for every content command. */
|
|
20
|
+
contentApiKey?: string;
|
|
21
|
+
contentApiKeyPrefix?: string;
|
|
22
|
+
defaultClassroomId?: string;
|
|
23
|
+
contentApiBaseUrl?: string;
|
|
24
|
+
trialContentCredits?: number;
|
|
41
25
|
trialCredits: number;
|
|
42
26
|
message: string;
|
|
43
27
|
requiresEmailVerification: boolean;
|
|
44
28
|
verifyEmailResendEndpoint: string;
|
|
45
|
-
nextSteps:
|
|
46
|
-
createSlide: string;
|
|
47
|
-
createVideo: string;
|
|
48
|
-
accountInfo: string;
|
|
49
|
-
[key: string]: unknown;
|
|
50
|
-
};
|
|
29
|
+
nextSteps: Record<string, unknown>;
|
|
51
30
|
[key: string]: unknown;
|
|
52
31
|
}
|
|
53
32
|
export interface AgentAccountResponse {
|
|
@@ -60,6 +39,9 @@ export interface AgentAccountResponse {
|
|
|
60
39
|
isEmailVerified: boolean;
|
|
61
40
|
restrictedActions: string[];
|
|
62
41
|
createdAt: string;
|
|
42
|
+
defaultClassroomId?: string | null;
|
|
43
|
+
sandboxClassroomId?: string | null;
|
|
44
|
+
contentApiBaseUrl?: string;
|
|
63
45
|
[key: string]: unknown;
|
|
64
46
|
}
|
|
65
47
|
export interface AgentBillingSessionResponse {
|
|
@@ -77,36 +59,4 @@ export interface AgentBillingStatusResponse {
|
|
|
77
59
|
restrictedActions: string[];
|
|
78
60
|
[key: string]: unknown;
|
|
79
61
|
}
|
|
80
|
-
export interface ModuleResource {
|
|
81
|
-
id: string;
|
|
82
|
-
title?: string | null;
|
|
83
|
-
description?: string | null;
|
|
84
|
-
type?: string;
|
|
85
|
-
status?: string | null;
|
|
86
|
-
publicUrl?: string | null;
|
|
87
|
-
shareToken?: string;
|
|
88
|
-
createdAt?: string;
|
|
89
|
-
[key: string]: unknown;
|
|
90
|
-
}
|
|
91
|
-
export interface ModuleListResponse {
|
|
92
|
-
items: ModuleResource[];
|
|
93
|
-
total: number;
|
|
94
|
-
[key: string]: unknown;
|
|
95
|
-
}
|
|
96
|
-
export interface TestResource {
|
|
97
|
-
id: string;
|
|
98
|
-
status: string;
|
|
99
|
-
title?: string | null;
|
|
100
|
-
description?: string | null;
|
|
101
|
-
itemCount?: number | null;
|
|
102
|
-
previewUrl?: string | null;
|
|
103
|
-
publicUrl?: string | null;
|
|
104
|
-
createdAt?: string;
|
|
105
|
-
[key: string]: unknown;
|
|
106
|
-
}
|
|
107
|
-
export interface TestListResponse {
|
|
108
|
-
items: TestResource[];
|
|
109
|
-
total: number;
|
|
110
|
-
[key: string]: unknown;
|
|
111
|
-
}
|
|
112
62
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,qBAAqB,GAAG,YAAY,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE3E,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB,EAAE,OAAO,CAAC;IACnC,yBAAyB,EAAE,MAAM,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
package/dist/types.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Response types
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* Response types the CLI reads from the Agent Platform account routes
|
|
4
|
+
* (`/v1/platform/agent/*`) and the Content API evaluation route. Content
|
|
5
|
+
* resources are typed loosely in src/content/resource.ts. The API may return
|
|
6
|
+
* additional fields, tolerated via `[key: string]: unknown`.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function parsePositiveInt(value: string | undefined, flag: string): number | undefined;
|
|
2
|
+
export declare function parseNonNegativeNumber(value: string | undefined, flag: string): number | undefined;
|
|
3
|
+
export declare function parseChoice<T extends string>(value: string | undefined, flag: string, choices: readonly T[]): T | undefined;
|
|
4
|
+
/** "a, b,c" → ["a", "b", "c"]; undefined stays undefined. */
|
|
5
|
+
export declare function splitList(value: string | undefined): string[] | undefined;
|
|
6
|
+
/** Commander collector for repeatable flags (`--event a --event b`). */
|
|
7
|
+
export declare function collect(value: string, previous?: string[]): string[];
|
|
8
|
+
/** Drop undefined / empty-string fields so the API sees only what was set. */
|
|
9
|
+
export declare function compact(input: Record<string, unknown>): Record<string, unknown>;
|
|
10
|
+
export declare function idempotencyHeaders(key: string | undefined): Record<string, string> | undefined;
|
|
11
|
+
/** Use the given value, or prompt for it on a TTY, or fail with ENOINTERACTIVE. */
|
|
12
|
+
export declare function valueOrPrompt(value: string | undefined, message: string, hint: string): Promise<string>;
|
|
13
|
+
/** Destructive actions need --yes, or a confirmation on a TTY. */
|
|
14
|
+
export declare function confirmOrRequireYes(yes: boolean | undefined, message: string): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/utils/args.ts"],"names":[],"mappings":"AASA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAO5F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOlG;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAC1C,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,CAAC,EAAE,GACpB,CAAC,GAAG,SAAS,CAMf;AAED,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,GAAG,SAAS,CAOzE;AAED,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAExE;AAED,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI/E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAE9F;AAED,mFAAmF;AACnF,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAQjB;AAED,kEAAkE;AAClE,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYlG"}
|