recess-cli 2.0.0 → 2.1.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 +13 -2
- package/dist/api.js +80 -0
- package/dist/cli.js +175 -659
- package/dist/command-schema.js +4 -0
- package/dist/commands/applications.js +336 -0
- package/dist/commands/onboarding.js +623 -0
- package/dist/commands/shared.js +100 -0
- package/dist/help.js +376 -0
- package/package.json +3 -3
- package/skill/recess-cli/SKILL.md +2 -0
- package/skill/recess-cli/agents/version.json +2 -2
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { flagNumber, flagString } from "../args.js";
|
|
4
|
+
import { CliError } from "../errors.js";
|
|
5
|
+
export function positional(parsed, index, label) {
|
|
6
|
+
const value = parsed.positionals[index];
|
|
7
|
+
if (!value) {
|
|
8
|
+
throw new CliError("invalid_arguments", `Missing ${label}.`);
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
export function assertChoice(value, choices, label) {
|
|
13
|
+
if (!choices.includes(value)) {
|
|
14
|
+
throw new CliError("invalid_arguments", `${label} must be one of: ${choices.join(", ")}.`);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
export function flagIdList(parsed, name) {
|
|
19
|
+
const raw = flagString(parsed, name);
|
|
20
|
+
if (raw === undefined)
|
|
21
|
+
return [];
|
|
22
|
+
const ids = raw
|
|
23
|
+
.split(",")
|
|
24
|
+
.map((value) => value.trim())
|
|
25
|
+
.filter(Boolean);
|
|
26
|
+
if (ids.length === 0) {
|
|
27
|
+
throw new CliError("invalid_arguments", `--${name} requires a value.`);
|
|
28
|
+
}
|
|
29
|
+
return ids;
|
|
30
|
+
}
|
|
31
|
+
export function flagBooleanValue(parsed, name) {
|
|
32
|
+
const raw = flagString(parsed, name);
|
|
33
|
+
if (raw === undefined)
|
|
34
|
+
return undefined;
|
|
35
|
+
if (raw === "true")
|
|
36
|
+
return true;
|
|
37
|
+
if (raw === "false")
|
|
38
|
+
return false;
|
|
39
|
+
throw new CliError("invalid_arguments", `--${name} must be true or false.`);
|
|
40
|
+
}
|
|
41
|
+
export function flagInteger(parsed, name, options = {}) {
|
|
42
|
+
const value = flagNumber(parsed, name);
|
|
43
|
+
if (value === undefined) {
|
|
44
|
+
if (options.required) {
|
|
45
|
+
throw new CliError("invalid_arguments", `Missing required --${name}.`);
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
if (!Number.isInteger(value) ||
|
|
50
|
+
(options.min !== undefined && value < options.min) ||
|
|
51
|
+
(options.max !== undefined && value > options.max)) {
|
|
52
|
+
const bounds = options.min !== undefined && options.max !== undefined
|
|
53
|
+
? ` from ${options.min} through ${options.max}`
|
|
54
|
+
: options.min !== undefined
|
|
55
|
+
? ` of at least ${options.min}`
|
|
56
|
+
: options.max !== undefined
|
|
57
|
+
? ` no greater than ${options.max}`
|
|
58
|
+
: "";
|
|
59
|
+
throw new CliError("invalid_arguments", `--${name} must be an integer${bounds}.`);
|
|
60
|
+
}
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
export function flagIsoInstant(parsed, name, options = {}) {
|
|
64
|
+
const raw = flagString(parsed, name, options);
|
|
65
|
+
if (raw === undefined)
|
|
66
|
+
return undefined;
|
|
67
|
+
if (!/^\d{4}-\d{2}-\d{2}T/.test(raw) || Number.isNaN(Date.parse(raw))) {
|
|
68
|
+
throw new CliError("invalid_arguments", `--${name} must be a full ISO-8601 datetime with a timezone.`);
|
|
69
|
+
}
|
|
70
|
+
return raw;
|
|
71
|
+
}
|
|
72
|
+
export async function readJsonValue(filePath, label) {
|
|
73
|
+
const absolutePath = path.resolve(filePath);
|
|
74
|
+
let raw;
|
|
75
|
+
try {
|
|
76
|
+
raw = await fs.readFile(absolutePath, "utf8");
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (error.code === "ENOENT") {
|
|
80
|
+
throw new CliError("invalid_arguments", `${label} does not exist: ${absolutePath}`);
|
|
81
|
+
}
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
let parsed;
|
|
85
|
+
try {
|
|
86
|
+
parsed = JSON.parse(raw);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
throw new CliError("invalid_arguments", `${label} is not valid JSON (${absolutePath}): ${error instanceof Error ? error.message : String(error)}`);
|
|
90
|
+
}
|
|
91
|
+
return { absolutePath, raw, parsed };
|
|
92
|
+
}
|
|
93
|
+
export async function readJsonFile(filePath, label) {
|
|
94
|
+
const { absolutePath, parsed } = await readJsonValue(filePath, label);
|
|
95
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
96
|
+
throw new CliError("invalid_arguments", `${label} must be a JSON object (${absolutePath}).`);
|
|
97
|
+
}
|
|
98
|
+
return parsed;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=shared.js.map
|
package/dist/help.js
ADDED
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
export const HELP = `recess — safe Recess administration and family AI tools
|
|
2
|
+
|
|
3
|
+
Usage:
|
|
4
|
+
recess [--json] --version
|
|
5
|
+
recess [--json] agent-context
|
|
6
|
+
recess [--json] setup [--skill-only]
|
|
7
|
+
recess [--json] doctor
|
|
8
|
+
recess [--json] profile list
|
|
9
|
+
recess [--json] profile show <name>
|
|
10
|
+
recess [--json] profile save <name> [--api-origin URL] [--web-origin URL]
|
|
11
|
+
[--oauth-client-id ID]
|
|
12
|
+
recess [--json] profile use <name>
|
|
13
|
+
recess [--json] profile delete <name>
|
|
14
|
+
recess [--json] jobs list [--limit 20]
|
|
15
|
+
recess [--json] jobs get <operation-key>
|
|
16
|
+
recess [--json] jobs prune [--older-than-days 30]
|
|
17
|
+
recess [--json] feedback list [--limit 20]
|
|
18
|
+
recess [--json] feedback submit <text> [--confirm]
|
|
19
|
+
recess [--json] auth login [--client-id ID] [--callback-port 8765]
|
|
20
|
+
recess [--json] auth request [--label TEXT]
|
|
21
|
+
recess [--json] auth poll [--timeout 300]
|
|
22
|
+
recess [--json] auth status|logout
|
|
23
|
+
recess [--json] users search <name-or-id> [--limit 10]
|
|
24
|
+
recess [--json] users get <user-id>
|
|
25
|
+
recess [--json] users tier list-tiers
|
|
26
|
+
recess [--json] users tier get <kid-id>
|
|
27
|
+
recess [--json] users tier preview <kid-id> --tier social|academics|lite|complete|platform
|
|
28
|
+
[--slots N]
|
|
29
|
+
recess [--json] users tier set <kid-id> --tier social|academics|lite|complete|platform
|
|
30
|
+
[--slots N] --expected-updated-at <iso> [--allow-strand] [--confirm]
|
|
31
|
+
recess [--json] guides create --email <email> --first-name TEXT
|
|
32
|
+
[--last-name TEXT] [--no-invite] [--confirm]
|
|
33
|
+
recess [--json] guides invite --user <user-id> [--confirm]
|
|
34
|
+
recess [--json] guardians invite --family <family-id> --email <email>
|
|
35
|
+
--first-name TEXT [--last-name TEXT] [--no-invite] [--confirm]
|
|
36
|
+
recess [--json] students upload-map-scores --student <kid-id>
|
|
37
|
+
--file </path/to/map-report.pdf> [--confirm]
|
|
38
|
+
recess [--json] students list
|
|
39
|
+
recess [--json] students today --student <kid-id> [--date YYYY-MM-DD]
|
|
40
|
+
recess [--json] students schedule --student <kid-id> [--days 14]
|
|
41
|
+
recess [--json] students xp-history --student <kid-id>
|
|
42
|
+
[--range week|month|quarter|year]
|
|
43
|
+
recess [--json] enrollments list --user <user-id>
|
|
44
|
+
recess [--json] subscriptions list --family <family-id> [--kid <kid-id>]
|
|
45
|
+
recess [--json] invoices list --subscription <subscription-id>
|
|
46
|
+
recess [--json] billing pause --subscription <id> [--until ISO_DATE] [--confirm]
|
|
47
|
+
recess [--json] billing resume --subscription <id> [--confirm]
|
|
48
|
+
recess [--json] invoices refund --invoice <id> --line-item <id>
|
|
49
|
+
--method refund|credit|tokens [--full | --amount-cents N]
|
|
50
|
+
[--who-pays guide|recess] [--reason TEXT] [--confirm]
|
|
51
|
+
recess [--json] applications list [--status SUBMITTED|CLAIMED|ENROLLED|CLOSED]
|
|
52
|
+
[--status-scope active|closed] [--disposition READY_TO_ENROLL|TRIAL|PENDING_FUNDING|NO]
|
|
53
|
+
[--dispositioned true|false] [--quality QUALIFIED|NEEDS_NURTURE|UNKNOWN]
|
|
54
|
+
[--source PUBLIC|STAFF] [--limit 100] [--cursor <id>]
|
|
55
|
+
recess [--json] applications get <application-id>
|
|
56
|
+
recess [--json] applications quotes <application-id>
|
|
57
|
+
recess [--json] applications meetings <application-id>
|
|
58
|
+
recess [--json] applications call-notes <application-id>
|
|
59
|
+
recess [--json] applications create --data-file <application.json> [--confirm]
|
|
60
|
+
recess [--json] applications disposition <application-id>
|
|
61
|
+
--data-file <disposition.json> [--confirm]
|
|
62
|
+
recess [--json] applications qualify <application-id>
|
|
63
|
+
--quality QUALIFIED|NEEDS_NURTURE|UNKNOWN --reason TEXT [--confirm]
|
|
64
|
+
recess [--json] applications update-contact <application-id>
|
|
65
|
+
--data-file <contact.json> [--confirm]
|
|
66
|
+
recess [--json] applications claim-email|claim-link <application-id>
|
|
67
|
+
--intent-key <uuid> [--supersede] [--confirm]
|
|
68
|
+
recess [--json] applications revoke-claim <application-id> [--confirm]
|
|
69
|
+
recess [--json] applications link-family <application-id> --family <family-id> [--confirm]
|
|
70
|
+
recess [--json] applications close <application-id> --reason TEXT [--confirm]
|
|
71
|
+
recess [--json] applications add-call-note <application-id>
|
|
72
|
+
--data-file <call-note.json> [--confirm]
|
|
73
|
+
recess [--json] applications edit-call-note <application-id>
|
|
74
|
+
--note-id <note-id> --data-file <comment.json> [--confirm]
|
|
75
|
+
recess [--json] applications enroll <application-id> --quote <quote-id>
|
|
76
|
+
--school <institution-slug> --kid "<quoteLineId>:<firstName>[:<age>]" (repeat per line)
|
|
77
|
+
[--family <family-id>] [--unassign <kid-id>] (repeat) [--note TEXT] [--confirm]
|
|
78
|
+
recess [--json] quotes get <quote-id>
|
|
79
|
+
recess [--json] quotes preview --data-file <quote.json>
|
|
80
|
+
recess [--json] quotes create --data-file <quote.json> [--confirm]
|
|
81
|
+
recess [--json] quotes update <quote-id> --data-file <quote.json> [--confirm]
|
|
82
|
+
recess [--json] quotes send <quote-id> [--expected-revision <sha>] [--confirm]
|
|
83
|
+
recess [--json] quotes accept <quote-id> [--confirm]
|
|
84
|
+
recess [--json] quotes decline <quote-id> [--note TEXT] [--confirm]
|
|
85
|
+
recess [--json] cohorts search <query>
|
|
86
|
+
recess [--json] enrollments create --user <kid-id> --cohort <id>
|
|
87
|
+
[--first-charge-at ISO_DATETIME] [--send-email] [--force]
|
|
88
|
+
[--confirm --approval-token TOKEN]
|
|
89
|
+
recess [--json] enrollments register-cohort --enrollment <id>
|
|
90
|
+
--user <id> --cohort <id> [--confirm]
|
|
91
|
+
recess [--json] enrollments unregister-cohort --user <id>
|
|
92
|
+
--cohort <id> [--confirm]
|
|
93
|
+
recess [--json] enrollments get-for-subscription --subscription <id>
|
|
94
|
+
recess [--json] billing extend-trial --subscription <id>
|
|
95
|
+
--trial-end ISO_DATE [--confirm]
|
|
96
|
+
recess [--json] billing cancel-subscription --subscription <id>
|
|
97
|
+
[--immediate] [--reason TEXT] [--restore] [--confirm]
|
|
98
|
+
recess [--json] payout payruns list [--status A,B] [--schedule <id>]
|
|
99
|
+
recess [--json] payout recipients list [--search <name>] [--user <id>] [--id <id>]
|
|
100
|
+
[--limit 20] [--cursor <id>]
|
|
101
|
+
recess [--json] payout invoices list [--payrun <id>] [--recipient <account-id>]
|
|
102
|
+
[--user <id>] [--status A,B] (at least one filter)
|
|
103
|
+
recess [--json] payout invoices get <invoice-id>
|
|
104
|
+
recess [--json] payout invoices set-status <invoice-id>
|
|
105
|
+
--status IN_REVIEW|OPEN|PAID|CANCELED [--send-email] [--confirm]
|
|
106
|
+
recess [--json] payout items add --invoice <id> --amount-cents N
|
|
107
|
+
--description TEXT [--date YYYY-MM-DD] [--confirm]
|
|
108
|
+
recess [--json] payout items edit <item-id> [--amount-cents N]
|
|
109
|
+
[--description TEXT] [--date YYYY-MM-DD] [--confirm]
|
|
110
|
+
recess [--json] payout items delete <item-id> [--confirm]
|
|
111
|
+
recess [--json] cohorts get <cohort-id> [--events-tab ACTIVE|ENDED|CANCELED|ARCHIVED]
|
|
112
|
+
recess [--json] cohorts parent-emails <cohort-id>
|
|
113
|
+
recess [--json] cohorts end <cohort-id> [--cancel-subscriptions] [--confirm]
|
|
114
|
+
recess [--json] cohorts pause-billing <cohort-id> --weeks 1..6 [--confirm]
|
|
115
|
+
recess [--json] cohorts resume-billing <cohort-id> [--confirm]
|
|
116
|
+
recess [--json] cohorts email <cohort-id> --target ALL_PARENTS|ALL_PARENTS_GUIDES
|
|
117
|
+
--content TEXT [--confirm]
|
|
118
|
+
recess [--json] events get <event-id>
|
|
119
|
+
recess [--json] events take-attendance <event-id> --attended <id,id,...>
|
|
120
|
+
[--absent <id,id,...>] [--excused <id,id,...>] [--confirm]
|
|
121
|
+
recess [--json] events cancel <event-id> --reason TEXT [--confirm]
|
|
122
|
+
recess [--json] events set-status <event-id> --status ACTIVE|ENDED|CANCELED [--confirm]
|
|
123
|
+
recess [--json] events reschedule --cohort <id> --event <event-id>
|
|
124
|
+
--starts-at "YYYY-MM-DDTHH:MM" [--timezone <iana>] [--length-mins N] [--confirm]
|
|
125
|
+
recess [--json] events add --cohort <id> --starts-at "YYYY-MM-DDTHH:MM"
|
|
126
|
+
[--timezone <iana>] [--length-mins N] [--confirm]
|
|
127
|
+
recess [--json] registrations approve --registration <id> [--confirm]
|
|
128
|
+
recess [--json] registrations deny --cohort <id> --user <id> [--confirm]
|
|
129
|
+
recess [--json] request get </path?query=value>
|
|
130
|
+
recess [--json] onboarding status <family-id>
|
|
131
|
+
recess [--json] onboarding queue [--school <institution-slug>]
|
|
132
|
+
recess [--json] onboarding kids [--time-period-days N] [--cohort <id>]
|
|
133
|
+
[--limit N] [--stage-filter all|scheduled|oriented|course|converted|lost]
|
|
134
|
+
recess [--json] onboarding timeline <family-id>
|
|
135
|
+
recess [--json] onboarding readiness <family-id>
|
|
136
|
+
recess [--json] onboarding active-tutors <family-id>
|
|
137
|
+
recess [--json] onboarding meetings <family-id>
|
|
138
|
+
recess [--json] onboarding cohort-options <family-id> [--kid <kid-id>]
|
|
139
|
+
recess [--json] onboarding comms [--school <institution-slug>]
|
|
140
|
+
[--status RESERVED|SENT|FAILED] [--kind <kind>] [--limit 50] [--cursor <cursor>]
|
|
141
|
+
recess [--json] onboarding lifecycle-prompts
|
|
142
|
+
recess [--json] onboarding orientation-sessions
|
|
143
|
+
recess [--json] onboarding ixl-preview <family-id> --kid <kid-id>
|
|
144
|
+
recess [--json] onboarding intake-session <family-id>
|
|
145
|
+
recess [--json] onboarding intake-session-create <family-id> [--confirm]
|
|
146
|
+
recess [--json] onboarding set-stage <family-id>
|
|
147
|
+
--stage LEGACY|PROVISIONED|PARENT_CONFIRMED|CLEARED_FOR_COHORT|COMPLETE [--confirm]
|
|
148
|
+
recess [--json] onboarding set-account-state <family-id>
|
|
149
|
+
--state ACTIVE|PENDING_PAYMENT|PAUSED|BOOTED [--note TEXT] [--confirm]
|
|
150
|
+
recess [--json] onboarding set-primary-tutor <family-id>
|
|
151
|
+
[--tutor <user-id> | --clear] [--confirm]
|
|
152
|
+
recess [--json] onboarding attest <family-id>
|
|
153
|
+
--condition app_downloaded|tutor_met|goals_loaded|ma_diagnostic [--revoke]
|
|
154
|
+
[--note TEXT] [--confirm]
|
|
155
|
+
recess [--json] onboarding clear-for-cohort <family-id> [--confirm]
|
|
156
|
+
recess [--json] onboarding register-cohort <family-id>
|
|
157
|
+
--kid <kid-id> --cohort <event-series-id> [--confirm]
|
|
158
|
+
recess [--json] onboarding set-kid-grade <family-id>
|
|
159
|
+
--kid <kid-id> [--grade 1..12 | --clear] [--confirm]
|
|
160
|
+
recess [--json] onboarding seed-feed <family-id> --kid <kid-id> [--confirm]
|
|
161
|
+
recess [--json] onboarding generate-summaries <family-id> [--confirm]
|
|
162
|
+
recess [--json] onboarding provision-math-academy <family-id>
|
|
163
|
+
--kid <kid-id> [--grade 1..12] [--confirm]
|
|
164
|
+
recess [--json] onboarding provision-ixl <family-id>
|
|
165
|
+
--kid <kid-id> [--credentials-file <credentials.json>] [--confirm]
|
|
166
|
+
recess [--json] onboarding remove-ixl <family-id> --kid <kid-id> [--confirm]
|
|
167
|
+
recess [--json] onboarding ixl-sync [--apply] [--confirm]
|
|
168
|
+
recess [--json] onboarding send-comms --subject <family:id|invite:id>
|
|
169
|
+
--kind <kind> [--confirm]
|
|
170
|
+
recess [--json] onboarding send-welcome <family-id> [--resend] [--confirm]
|
|
171
|
+
recess [--json] onboarding send-payment-email <family-id> [--resend] [--confirm]
|
|
172
|
+
recess [--json] onboarding send-recommendations <family-id>
|
|
173
|
+
--courses <course-id,course-id> [--resend] [--confirm]
|
|
174
|
+
recess [--json] onboarding set-lifecycle-prompt <kind>
|
|
175
|
+
[--enabled true|false] [--delay-days N] [--window-days N]
|
|
176
|
+
[--snooze-days N] [--max-prompts N] [--confirm]
|
|
177
|
+
recess [--json] onboarding override-lifecycle-prompt <kind> <family-id>
|
|
178
|
+
--action delay|skip|clear [--days N] [--confirm]
|
|
179
|
+
recess [--json] onboarding orientation-create --starts-at <iso>
|
|
180
|
+
[--ends-at <iso>] [--capacity N] [--confirm]
|
|
181
|
+
recess [--json] onboarding orientation-set-status <session-id>
|
|
182
|
+
--status CANCELED|COMPLETED [--confirm]
|
|
183
|
+
recess [--json] onboarding orientation-attendance <session-id>
|
|
184
|
+
--family <family-id> --attended true|false [--confirm]
|
|
185
|
+
recess [--json] onboarding meeting-reschedule <meeting-id>
|
|
186
|
+
--starts-at <iso> [--note TEXT] [--confirm]
|
|
187
|
+
recess [--json] onboarding meeting-cancel <meeting-id> --reason TEXT [--confirm]
|
|
188
|
+
recess [--json] onboarding set-intake <family-id> --session <id>
|
|
189
|
+
--data <json> [--expected-updated-at <iso>] [--confirm]
|
|
190
|
+
recess [--json] onboarding extract <family-id> --session <id>
|
|
191
|
+
(--transcript-file <path> | --granola <ref>) [--confirm]
|
|
192
|
+
recess [--json] village models list [--world village-1] [--query TEXT] [--archived]
|
|
193
|
+
recess [--json] village models upload --file </path/model.glb>
|
|
194
|
+
[--world village-1] [--name TEXT] [--id ID] [--description TEXT] [--tags A,B]
|
|
195
|
+
[--visual-only] [--confirm]
|
|
196
|
+
recess [--json] village models publish|archive <model-id> [--world village-1] [--confirm]
|
|
197
|
+
recess [--json] village models place <model-id> --x N --z N
|
|
198
|
+
[--y N] [--rotation 0..3] [--mirrored] [--no-collision] [--batch ID]
|
|
199
|
+
[--world village-1] [--confirm]
|
|
200
|
+
recess [--json] village models move <placement-id> --x N --z N
|
|
201
|
+
[--y N] [--rotation 0..3] [--mirrored] [--world village-1] [--confirm]
|
|
202
|
+
recess [--json] village models remove <placement-id> [--world village-1] [--confirm]
|
|
203
|
+
recess [--json] village render --min-x N --min-z N --max-x N --max-z N
|
|
204
|
+
[--world village-1]
|
|
205
|
+
recess [--json] village library search [query] [--query TEXT] [--limit 20]
|
|
206
|
+
[--world home-USER_ID]
|
|
207
|
+
recess [--json] village library get <model-id> [--world home-USER_ID]
|
|
208
|
+
recess [--json] village objects list [--min-x -20] [--min-z -20]
|
|
209
|
+
[--max-x 20] [--max-z 20] [--world home-USER_ID]
|
|
210
|
+
recess [--json] village objects get <object-id> [--world home-USER_ID]
|
|
211
|
+
recess [--json] village build cmd '<command-json>' [--world home-USER_ID] [--confirm]
|
|
212
|
+
recess [--json] village build cmd --file <command.json> [--world home-USER_ID] [--confirm]
|
|
213
|
+
recess [--json] village worlds export <world-id> [--out <bundle.json>] [--confirm]
|
|
214
|
+
recess [--json] village worlds import <world-id> --file <bundle.json> [--confirm]
|
|
215
|
+
recess [--json] village worlds promote <mirror-or-archive-id> [--confirm]
|
|
216
|
+
recess [--json] store-items list [--search TEXT]
|
|
217
|
+
[--status ACTIVE|INACTIVE|COMING_SOON] [--item-type TYPE]
|
|
218
|
+
[--page 0] [--limit 20] [--sort-by name|price|createdAt|updatedAt|order]
|
|
219
|
+
[--sort-order asc|desc]
|
|
220
|
+
recess [--json] store-items set-status <village-store-item-id>
|
|
221
|
+
--status ACTIVE|INACTIVE|COMING_SOON [--confirm]
|
|
222
|
+
recess [--json] content-library search <query> [--limit 8]
|
|
223
|
+
recess [--json] content-library status <gem-id-or-url>
|
|
224
|
+
recess [--json] content-library set-stage <gem-id-or-url...> [--file <path>]
|
|
225
|
+
--stage review|polishing|live|archived [--wait] [--timeout 900] [--confirm]
|
|
226
|
+
recess [--json] content-library submit <url...> [--file <path>]
|
|
227
|
+
[--stage review|polish] [--title TEXT] [--summary TEXT]
|
|
228
|
+
[--lane web-toys|mechanics|explorables|data-stories|sims|maps-scale|sound-art|puzzles|wonder|idea-games]
|
|
229
|
+
[--wait] [--timeout 900] [--confirm]
|
|
230
|
+
recess [--json] skills guardian list [--query TEXT] [--category TEXT]
|
|
231
|
+
recess [--json] skills guardian get <skill-name>
|
|
232
|
+
[--reference NAME | --all-references] [--refresh]
|
|
233
|
+
recess [--json] skills admin list [--query TEXT] [--category TEXT]
|
|
234
|
+
recess [--json] skills admin get <skill-name>
|
|
235
|
+
[--reference NAME | --all-references]
|
|
236
|
+
[--refresh]
|
|
237
|
+
recess [--json] goal-templates list [--query TEXT] [--category TEXT]
|
|
238
|
+
[--kind SIMPLE|BLUEPRINT] [--starter-only] [--include-deleted]
|
|
239
|
+
[--limit 20] [--cursor <id>]
|
|
240
|
+
recess [--json] goal-templates get <template-id|slug> [--spec-only]
|
|
241
|
+
recess [--json] goal-templates versions <template-id> [--version N]
|
|
242
|
+
recess [--json] goal-templates validate-spec --file <path/template.json>
|
|
243
|
+
recess [--json] goal-templates create --file <path/template.json> [--confirm]
|
|
244
|
+
recess [--json] goal-templates patch-spec <template-id|slug> --expected-version N
|
|
245
|
+
--patches-file <path/patches.json> [--confirm --approval-token TOKEN]
|
|
246
|
+
[--confirm-destructive-changes --destructive-change-token TOKEN]
|
|
247
|
+
recess [--json] goal-templates set-metadata <template-id> --expected-version N
|
|
248
|
+
[--title TEXT] [--description TEXT] [--emoji X] [--category TEXT] [--tags A,B]
|
|
249
|
+
[--sort-order N] [--is-starter true|false]
|
|
250
|
+
[--setup-audience KID_FRIENDLY|PARENT_SETUP] [--kind SIMPLE|BLUEPRINT]
|
|
251
|
+
[--agent-instructions-file <path>]
|
|
252
|
+
[--output-template-file <path>] [--confirm]
|
|
253
|
+
recess [--json] goal-templates delete <template-id> --expected-version N [--confirm]
|
|
254
|
+
recess [--json] goal-templates snapshot-files <template-id> [--path P]
|
|
255
|
+
recess [--json] goal-templates capture-snapshot <template-id|slug>
|
|
256
|
+
(--source-goal <goal-id> | --source-draft <draft-slug> --student <goal-owner-id>
|
|
257
|
+
| --source-dir <local-checkout>)
|
|
258
|
+
[--dry-run] [--confirm --approval-token TOKEN]
|
|
259
|
+
recess [--json] goal-templates apply <template-id> --answers-file <path>
|
|
260
|
+
[--dry-run] [--confirm --approval-token TOKEN]
|
|
261
|
+
recess [--json] goal-templates apply-starter <template-id> --student <kid-id>
|
|
262
|
+
[--answers-file <path>] [--confirm]
|
|
263
|
+
recess [--json] goals list --student <kid-id>
|
|
264
|
+
recess [--json] goals create [--student <kid-id>] --title TEXT
|
|
265
|
+
(--description TEXT | --description-file <path>) [--target-date <iso>]
|
|
266
|
+
[--schedule TEXT] [(--draft <draft-slug> | --source-dir <local-checkout>)
|
|
267
|
+
(--enable-applet-follow-ups | --disable-applet-follow-ups)]
|
|
268
|
+
[--confirm --approval-token TOKEN]
|
|
269
|
+
recess [--json] goals edit <goal-id> --student <kid-id> --patch-file <path/patch.json>
|
|
270
|
+
--delta TEXT [--confirm --approval-token TOKEN]
|
|
271
|
+
recess [--json] goals delete <goal-id> --student <kid-id>
|
|
272
|
+
[--confirm --approval-token TOKEN]
|
|
273
|
+
recess [--json] goals queue get <goal-id> --student <kid-id>
|
|
274
|
+
recess [--json] goals queue set <goal-id> --student <kid-id>
|
|
275
|
+
--entries-file <path.json> --delta TEXT [--replace-description-pointer]
|
|
276
|
+
[--confirm --approval-token TOKEN]
|
|
277
|
+
recess [--json] todos create --student <kid-id> --title TEXT
|
|
278
|
+
[--due-date YYYY-MM-DD] [--estimated-minutes N] [--url URL] [--confirm]
|
|
279
|
+
recess [--json] todos edit <todo-id> --patch-file <path/patch.json>
|
|
280
|
+
[--confirm --approval-token TOKEN]
|
|
281
|
+
recess [--json] todos delete <todo-id>
|
|
282
|
+
[--confirm --approval-token TOKEN]
|
|
283
|
+
recess [--json] todos generate-applet <todo-id> --student <kid-id>
|
|
284
|
+
[--due-date YYYY-MM-DD] [--confirm --approval-token TOKEN]
|
|
285
|
+
recess [--json] memories context --student <kid-id>
|
|
286
|
+
recess [--json] memories log --student <kid-id> --date YYYY-MM-DD
|
|
287
|
+
recess [--json] rocky get --student <kid-id>
|
|
288
|
+
recess [--json] rocky set --student <kid-id> --patch-file <path/patch.json>
|
|
289
|
+
--expected-updated-at ISO|none [--confirm]
|
|
290
|
+
recess [--json] goals files list --student <goal-owner-id> --goal <goal-id>
|
|
291
|
+
recess [--json] goals files read --student <goal-owner-id> --goal <goal-id> --path P
|
|
292
|
+
recess [--json] goals files init --student <goal-owner-id> --draft <draft-slug>
|
|
293
|
+
--output-dir <local-dir>
|
|
294
|
+
recess [--json] goals files checkout --student <goal-owner-id>
|
|
295
|
+
(--goal <goal-id> | --draft <draft-slug>)
|
|
296
|
+
--output-dir <local-dir>
|
|
297
|
+
recess [--json] goals files push --source-dir <local-checkout>
|
|
298
|
+
[--message TEXT] [--confirm --approval-token TOKEN]
|
|
299
|
+
recess [--json] goals files write --student <goal-owner-id>
|
|
300
|
+
(--goal <goal-id> | --draft <draft-slug>)
|
|
301
|
+
(--source-dir <local-dir> | --source-file <local-file> --path P)
|
|
302
|
+
[--message TEXT] [--confirm --approval-token TOKEN]
|
|
303
|
+
recess [--json] goals pdf upload --student <goal-owner-id>
|
|
304
|
+
(--goal <goal-id> | --draft <draft-slug>) --source-file <local.pdf>
|
|
305
|
+
[--path uploads/name.pdf] [--message TEXT]
|
|
306
|
+
[--confirm --approval-token TOKEN]
|
|
307
|
+
|
|
308
|
+
Authoring notes: "skills" serves the in-product tutor skills (the private
|
|
309
|
+
packages/skills workspace package) read-only over your admin session — they are never
|
|
310
|
+
bundled into this npm package. Load os-v2-goal-template-builder and its
|
|
311
|
+
references/deterministic-workflow-setup.md BEFORE authoring a template; that is
|
|
312
|
+
the same guidance the recess.gg/ai agent follows, so there is exactly one
|
|
313
|
+
standard. Responses cache under ~/.recess-cli/skills-cache/ (--refresh re-fetches).
|
|
314
|
+
For goal workspace and PDF commands, --student names the goal owner. A
|
|
315
|
+
full_admin session may use a KID or ADMIN user id, including its own ADMIN id;
|
|
316
|
+
family_ai sessions remain limited to managed KID profiles.
|
|
317
|
+
"goals create --source-dir" materializes a clean, fully pushed draft checkout as
|
|
318
|
+
a personal module-backed goal and retargets that checkout to the resulting live
|
|
319
|
+
goal. It does not create or apply a reusable template. Its preview is bound to
|
|
320
|
+
the exact workspace revision, hash, module inventory, and applet follow-up choice.
|
|
321
|
+
Every template created here is setupMode DETERMINISTIC_WORKFLOW and CANNOT be
|
|
322
|
+
converted back, so "validate-spec" against the same file until it passes, then
|
|
323
|
+
"create". "create" runs a real server-side validation before its gate, so the
|
|
324
|
+
preview shows the handler/goalShape/step keys the SERVER resolved. "apply" runs
|
|
325
|
+
the backend's own dryRun before the gate and previews the per-student outcome.
|
|
326
|
+
"set-metadata" and "delete" require --expected-version (from "get"); a stale one
|
|
327
|
+
409s STALE_WRITE and writes nothing. The spec is unreachable from "set-metadata"
|
|
328
|
+
by design — an existing spec is edited only through the guarded /ai patch path.
|
|
329
|
+
|
|
330
|
+
Onboarding notes: "status" and "intake-session" are reads — "intake-session"
|
|
331
|
+
looks up the current IN_PROGRESS session without creating one (prints a "none
|
|
332
|
+
yet" result when absent). "intake-session-create" is the explicit write that
|
|
333
|
+
mints a blank session, so it is gated behind --confirm. "set-stage" reads the
|
|
334
|
+
current stage first and warns when a move re-locks progress; CLEARED_FOR_COHORT
|
|
335
|
+
unlocks cohort registration. "set-account-state" PAUSED/BOOTED lock the family out of paid
|
|
336
|
+
capabilities (--note is analytics-only). "set-intake --data" takes JSON (agents
|
|
337
|
+
drive it with --json; humans rarely will); the preview is offline. Its
|
|
338
|
+
optimistic-concurrency token resolves only on --confirm: pass
|
|
339
|
+
--expected-updated-at <iso> (from an intake-session read's updatedAt) for strict
|
|
340
|
+
CAS that 409s if a parent autosaved since; omit it and the CLI fetches the
|
|
341
|
+
current token at confirm time and warns that post-preview edits are unprotected.
|
|
342
|
+
"extract" is LLM-bound and can take ~30s; a 503 means Granola is not configured
|
|
343
|
+
server-side.
|
|
344
|
+
|
|
345
|
+
Class-ops notes: "events cancel" notifies families (chat + parent email blast +
|
|
346
|
+
credit notes + Slack); "events set-status --status CANCELED" is a silent status
|
|
347
|
+
change. Reschedule times are cohort-local wall-clock (zoneless).
|
|
348
|
+
|
|
349
|
+
Payout notes: amounts are integer cents. "payout items add" without --date
|
|
350
|
+
defaults the item date to the penultimate day of the invoice's cycle (its
|
|
351
|
+
endDate minus one day) and shows the computed date in the preview.
|
|
352
|
+
|
|
353
|
+
Auth notes: "auth login" runs the browser loopback flow for ADMIN, GUIDE, a GUARDIAN with
|
|
354
|
+
access:ai, or a KID using only Village home building. Guardian sessions are family-scoped and
|
|
355
|
+
cannot call /admin; KID sessions cannot call any non-Village API command. For a headless
|
|
356
|
+
cloud agent, the ADMIN-only "auth request" prints an approval URL to hand a Recess admin; after they
|
|
357
|
+
approve it in a browser, "auth poll" collects the 12h session. When it lapses, run
|
|
358
|
+
"auth request" again for a fresh link. Both paths yield the same session.
|
|
359
|
+
|
|
360
|
+
Skill notes: this CLI's own agent skill ships inside the npm package AND is served
|
|
361
|
+
by the server, so wording/Gotcha updates arrive without an npm release. "setup"
|
|
362
|
+
(or "setup --skill-only") installs the bundled copy, then upgrades it from the
|
|
363
|
+
server when the served bundle's minCliVersion allows — an older binary keeps the
|
|
364
|
+
bundled copy, and an unreachable server is not an error. "doctor" reports whether
|
|
365
|
+
a newer skill exists and names the command; it never writes.
|
|
366
|
+
|
|
367
|
+
Writes preview and exit 2 unless --confirm is supplied after explicit human approval.
|
|
368
|
+
Every preview includes an operationKey; confirmed writes must echo it with
|
|
369
|
+
--operation-key so an interrupted invocation can be retried without duplicating the write.
|
|
370
|
+
Environment overrides: RECESS_CLI_API_ORIGIN, RECESS_CLI_WEB_ORIGIN,
|
|
371
|
+
RECESS_CLI_OAUTH_CLIENT_ID, RECESS_CLI_COOKIE, RECESS_CLI_CONFIG,
|
|
372
|
+
RECESS_CLI_PROFILE, RECESS_CLI_FEEDBACK_ENDPOINT.
|
|
373
|
+
|
|
374
|
+
Every command that calls the Recess API, except auth commands, requires
|
|
375
|
+
--reason TEXT: a non-empty human-readable purpose of at most 1024 characters.`;
|
|
376
|
+
//# sourceMappingURL=help.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "recess-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Safe Recess administration and family AI tools from the command line.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"repository": {
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
"typecheck": "tsgo --noEmit",
|
|
49
49
|
"format": "oxfmt --ignore-path .oxfmtignore --check",
|
|
50
50
|
"format:fix": "oxfmt --ignore-path .oxfmtignore",
|
|
51
|
-
"lint": "oxlint --type-aware src/*.ts",
|
|
52
|
-
"lint:fix": "oxlint --type-aware --fix src/*.ts",
|
|
51
|
+
"lint": "oxlint --type-aware src/*.ts src/commands/*.ts",
|
|
52
|
+
"lint:fix": "oxlint --type-aware --fix src/*.ts src/commands/*.ts",
|
|
53
53
|
"test": "vitest run",
|
|
54
54
|
"install-local": "pnpm run build && make install-local",
|
|
55
55
|
"install-persistent": "pnpm run build && make install-persistent",
|
|
@@ -16,6 +16,8 @@ recess --json doctor --reason "Verify CLI connectivity, identity, and scope"
|
|
|
16
16
|
|
|
17
17
|
`doctor` reports the active API origin, authenticated user, and CLI scope. Do not assume a role from the request. Use the scope returned by the server.
|
|
18
18
|
|
|
19
|
+
If the reported scope is `village_home`, use only `recess village build`, `village library`, `village objects`, and `village render`. That session is intentionally unable to fetch the guardian or admin skill catalogs or call ordinary Recess API routes; Village applies the user's own-home and object-ownership checks to every build or read.
|
|
20
|
+
|
|
19
21
|
Then load the guidance for the purpose of the work:
|
|
20
22
|
|
|
21
23
|
```bash
|