crewly 1.20.452 → 1.20.454

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.
Files changed (22) hide show
  1. package/config/skills/agent/checkup-end/SKILL.md +86 -0
  2. package/config/skills/agent/checkup-end/end.mjs +339 -0
  3. package/config/skills/agent/checkup-end/execute.sh +39 -0
  4. package/config/skills/agent/checkup-end/execute.test.sh +134 -0
  5. package/config/skills/agent/checkup-report/SKILL.md +8 -0
  6. package/config/skills/agent/checkup-report/app/index.html +5 -2
  7. package/config/skills/agent/checkup-report/execute.test.sh +1 -0
  8. package/config/skills/agent/ingest-exports/SKILL.md +2 -2
  9. package/config/skills/agent/spawn-subagent/SKILL.md +4 -1
  10. package/config/templates/small-business-checkup.json +1 -1
  11. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -1
  12. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +6 -1
  13. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -1
  14. package/dist/backend/backend/src/services/agent/crewly-agent/subagent-run.service.d.ts +19 -3
  15. package/dist/backend/backend/src/services/agent/crewly-agent/subagent-run.service.d.ts.map +1 -1
  16. package/dist/backend/backend/src/services/agent/crewly-agent/subagent-run.service.js +58 -1
  17. package/dist/backend/backend/src/services/agent/crewly-agent/subagent-run.service.js.map +1 -1
  18. package/dist/backend/build-info.json +2 -2
  19. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -1
  20. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +6 -1
  21. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -1
  22. package/package.json +1 -1
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: Check-up End
3
+ description: End a small-business check-up. Deletes every file the check-up produced on this machine (ingested exports, the analysis with its list of people, the report and daily documents, the intake answers, the time log, the App page copy, and optionally the raw CSV exports) and writes a receipt the owner can keep that says what was deleted, what was kept and what is still to do (unpublish the App, revoke any access). --dry-run lists without deleting.
4
+ version: 1.0.0
5
+ category: productivity
6
+ skillType: claude-skill
7
+ assignableRoles:
8
+ - "*"
9
+ triggers:
10
+ - end the check-up
11
+ - check-up is over
12
+ - delete check-up data
13
+ - wipe the check-up
14
+ - check-up receipt
15
+ tags:
16
+ - check-up
17
+ - small-business
18
+ - privacy
19
+ - cleanup
20
+ execution:
21
+ type: script
22
+ script:
23
+ file: execute.sh
24
+ interpreter: bash
25
+ timeoutMs: 60000
26
+ ---
27
+
28
+ # Check-up End
29
+
30
+ The last step of the small-business check-up (crewly#1055). The check-up
31
+ leaves rows of people on this machine: the ingested exports, `breaks.json`
32
+ with every person behind every break, the report document, the intake
33
+ answers. When the check-up is over (the 7 daily lines are posted, or the
34
+ owner says stop), delete all of it and give the owner a receipt.
35
+
36
+ ```bash
37
+ bash execute.sh --dir . --business "Oak Pottery" --app <appId> # from the project the team worked in
38
+ bash execute.sh --dir . --exports ~/Downloads/oak-exports # also the raw CSVs the owner handed over
39
+ bash execute.sh --dir . --dry-run # list what would go, delete nothing
40
+ ```
41
+
42
+ ## What it deletes
43
+
44
+ Only the files the check-up skills are known to write, in the folders the
45
+ team template uses under `--dir` (override any with a flag):
46
+
47
+ | Folder / file | Flag | Files |
48
+ |---|---|---|
49
+ | `ingest/` | `--ingest` | `*.json` from `ingest-exports` (rows of people), `summary.json`, `unknown-report.json` |
50
+ | `analysis/` | `--analysis` | `breaks.json`, `report.md` from `checkup-analyse` |
51
+ | `checkup-data/` (or `data/`) | `--data` | `report-doc.json`, `daily-YYYY-MM-DD.json`, `timelog.json` from `checkup-report` |
52
+ | `checkup-app/` | `--app-dir` | `index.html` (the App page copy) |
53
+ | `intake.json` | `--intake` | the answers read with `app-data --get intake answers` |
54
+ | raw exports | `--exports <dir>` | `*.csv` in that folder, not recursive; only when you pass it |
55
+
56
+ Anything else in those folders (a stray file, a sub-folder, a symbolic link)
57
+ is **left alone and listed in the receipt as a leftover**. A folder that ends
58
+ up empty is removed. If none of `ingest/summary.json`, `analysis/breaks.json`,
59
+ `report-doc.json`, `timelog.json` or `intake.json` exists the skill refuses
60
+ (exit 2) and deletes nothing, so it cannot be pointed at the wrong folder.
61
+
62
+ Run `--dry-run` first when you are not sure what is there; it writes the same
63
+ receipt marked as a dry run.
64
+
65
+ ## The receipt
66
+
67
+ `checkup-end-receipt.json` and `checkup-end-receipt.md` in `--dir` (or
68
+ `--receipt <dir>`): the business, when, every file deleted with its kind,
69
+ size and whether it held people data, whether names were hashed at ingest,
70
+ the leftovers, and **Still to do**. Send the owner the `.md` or say the same
71
+ in plain words: what was deleted, that nothing about their customers stays on
72
+ this machine, and what you are doing next.
73
+
74
+ ## Still to do — the two things this skill cannot do itself
75
+
76
+ 1. **Unpublish the App.** The report, the intake answers and the daily lines
77
+ live in the App until it is deleted. Run `publish-app --app <appId> --delete`
78
+ (pass `--app` here so the receipt carries the exact command). A public App
79
+ needs `--private` first.
80
+ 2. **Revoke access.** Crewly stored no key or login for the apps named in the
81
+ intake (this check-up runs on exports); if the owner handed you a key, a
82
+ login or a read-only share, tell them to revoke it in that app. The receipt
83
+ lists the apps from the intake answers.
84
+
85
+ Never delete before the owner has the report: the 7 daily lines come first,
86
+ or the owner's word that the check-up is over.
@@ -0,0 +1,339 @@
1
+ #!/usr/bin/env node
2
+ // =============================================================================
3
+ // checkup-end — the last step of the small-business check-up (crewly#1055):
4
+ // delete every file the check-up produced on this machine (ingested exports,
5
+ // the analysis with its list of people, the report and daily documents, the
6
+ // intake answers, the time log, the copied App page, and optionally the raw
7
+ // CSV exports the owner handed over) and write a receipt that says what was
8
+ // deleted, what was kept, and what the lead still has to do (unpublish the
9
+ // App, revoke any access the owner granted).
10
+ //
11
+ // node end.mjs --dir <project> [--business "Oak Pottery"] [--app <appId>] [--exports <csv dir>] [--dry-run]
12
+ // node end.mjs --dir . --ingest ./ingest --analysis ./analysis --data ./checkup-data --app-dir ./checkup-app --intake ./intake.json
13
+ //
14
+ // Only the files the check-up skills are known to write are deleted; anything
15
+ // else found in those folders is listed in the receipt as a leftover and left
16
+ // alone. Symbolic links are never followed. Exit 0 = done (or dry run),
17
+ // 2 = the folder does not look like a check-up, 1 = usage.
18
+ // =============================================================================
19
+ import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync, lstatSync, unlinkSync, rmdirSync } from 'node:fs';
20
+ import { join, resolve, relative, basename } from 'node:path';
21
+
22
+ /** Where the check-up team writes each kind of file, relative to the project (`--dir`). */
23
+ export const DEFAULT_LAYOUT = {
24
+ ingest: ['ingest'],
25
+ analysis: ['analysis'],
26
+ data: ['checkup-data', 'data'],
27
+ appDir: ['checkup-app'],
28
+ intake: ['intake.json'],
29
+ };
30
+
31
+ const RECEIPT_JSON = 'checkup-end-receipt.json';
32
+ const RECEIPT_MD = 'checkup-end-receipt.md';
33
+
34
+ /**
35
+ * What each check-up skill writes, by folder: file-name test and what the
36
+ * receipt calls it. Only these are deleted.
37
+ */
38
+ const KNOWN = {
39
+ ingest: [
40
+ { test: (f) => f === 'summary.json', kind: 'ingest summary', people: false },
41
+ { test: (f) => f === 'unknown-report.json', kind: 'ingest note (unmapped file)', people: true },
42
+ { test: (f) => f.endsWith('.json'), kind: 'ingested export (rows of people)', people: true },
43
+ ],
44
+ analysis: [
45
+ { test: (f) => f === 'breaks.json', kind: 'analysis (every break with its people)', people: true },
46
+ { test: (f) => f === 'report.md', kind: 'analysis report', people: true },
47
+ ],
48
+ data: [
49
+ { test: (f) => f === 'report-doc.json', kind: 'App report document', people: true },
50
+ { test: (f) => /^daily-\d{4}-\d{2}-\d{2}\.json$/.test(f), kind: 'daily summary', people: false },
51
+ { test: (f) => f === 'timelog.json', kind: 'time log', people: false },
52
+ ],
53
+ appDir: [
54
+ { test: (f) => f === 'index.html', kind: 'App page copy', people: false },
55
+ ],
56
+ exports: [
57
+ { test: (f) => /\.csv$/i.test(f), kind: 'raw export (owner-provided CSV)', people: true },
58
+ ],
59
+ };
60
+
61
+ /** Files that mark a folder as a check-up; at least one must exist or nothing is touched. */
62
+ const MARKERS = [
63
+ ['ingest', 'summary.json'],
64
+ ['analysis', 'breaks.json'],
65
+ ['data', 'report-doc.json'],
66
+ ['data', 'timelog.json'],
67
+ ['intake', null],
68
+ ];
69
+
70
+ /** Resolve a folder/file for one slot: the explicit flag, else the first default that exists under `--dir`. */
71
+ function resolveSlot(o, slot) {
72
+ if (o[slot]) return resolve(o[slot]);
73
+ for (const candidate of DEFAULT_LAYOUT[slot]) {
74
+ const p = resolve(o.dir, candidate);
75
+ if (existsSync(p)) return p;
76
+ }
77
+ return resolve(o.dir, DEFAULT_LAYOUT[slot][0]);
78
+ }
79
+
80
+ /** True when the path exists and is not a symbolic link (links are never followed). */
81
+ function isRealFile(p) {
82
+ try {
83
+ const st = lstatSync(p);
84
+ return st.isFile();
85
+ } catch {
86
+ return false;
87
+ }
88
+ }
89
+
90
+ function isRealDir(p) {
91
+ try {
92
+ return lstatSync(p).isDirectory();
93
+ } catch {
94
+ return false;
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Walk one folder (not recursive) and split its entries into the files the
100
+ * check-up wrote (to delete) and everything else (to leave and report).
101
+ */
102
+ function inventoryDir(dir, rules, root) {
103
+ const toDelete = [];
104
+ const leftovers = [];
105
+ if (!isRealDir(dir)) return { toDelete, leftovers, present: false };
106
+ for (const name of readdirSync(dir).sort()) {
107
+ const p = join(dir, name);
108
+ const st = lstatSync(p);
109
+ const rel = relative(root, p) || name;
110
+ if (st.isSymbolicLink()) { leftovers.push({ path: rel, note: 'symbolic link, not followed' }); continue; }
111
+ if (st.isDirectory()) { leftovers.push({ path: rel, note: 'folder, not entered' }); continue; }
112
+ const rule = rules.find((r) => r.test(name));
113
+ if (rule) toDelete.push({ path: rel, abs: p, bytes: st.size, kind: rule.kind, people: rule.people });
114
+ else leftovers.push({ path: rel, note: 'not written by a check-up skill' });
115
+ }
116
+ return { toDelete, leftovers, present: true };
117
+ }
118
+
119
+ /** Read the intake answers (plain document or app-data's `{ success, data }`) for the apps to revoke; missing → null. */
120
+ function readIntakeApps(path) {
121
+ if (!isRealFile(path)) return null;
122
+ try {
123
+ const raw = JSON.parse(readFileSync(path, 'utf8'));
124
+ const doc = raw && raw.data && typeof raw.data === 'object' && !Array.isArray(raw.data) ? raw.data : raw;
125
+ return Array.isArray(doc.apps) ? doc.apps.filter((a) => typeof a === 'string' && a.trim()).map((a) => a.trim()) : [];
126
+ } catch {
127
+ return [];
128
+ }
129
+ }
130
+
131
+ /** Whether ingest-exports hashed the names (then the stored rows held no name, email or phone). */
132
+ function readNamesHashed(ingestDir) {
133
+ const p = join(ingestDir, 'summary.json');
134
+ if (!isRealFile(p)) return null;
135
+ try {
136
+ return Boolean(JSON.parse(readFileSync(p, 'utf8')).namesHashed);
137
+ } catch {
138
+ return null;
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Build the end-of-check-up plan: every file to delete, the leftovers, the
144
+ * App and access the lead still has to deal with. Deletes nothing.
145
+ */
146
+ export function planEnd(o) {
147
+ const root = resolve(o.dir);
148
+ const slots = {
149
+ ingest: resolveSlot(o, 'ingest'),
150
+ analysis: resolveSlot(o, 'analysis'),
151
+ data: resolveSlot(o, 'data'),
152
+ appDir: resolveSlot(o, 'appDir'),
153
+ intake: resolveSlot(o, 'intake'),
154
+ };
155
+ const looksLikeCheckup = MARKERS.some(([slot, file]) => (file ? isRealFile(join(slots[slot], file)) : isRealFile(slots[slot])));
156
+ const toDelete = [];
157
+ const leftovers = [];
158
+ const folders = [];
159
+ for (const slot of ['ingest', 'analysis', 'data', 'appDir']) {
160
+ const inv = inventoryDir(slots[slot], KNOWN[slot], root);
161
+ toDelete.push(...inv.toDelete);
162
+ leftovers.push(...inv.leftovers);
163
+ if (inv.present) folders.push(slots[slot]);
164
+ }
165
+ if (o.exports) {
166
+ const dir = resolve(o.exports);
167
+ const inv = inventoryDir(dir, KNOWN.exports, root);
168
+ toDelete.push(...inv.toDelete);
169
+ leftovers.push(...inv.leftovers);
170
+ if (inv.present) folders.push(dir);
171
+ }
172
+ if (isRealFile(slots.intake)) {
173
+ toDelete.push({ path: relative(root, slots.intake) || basename(slots.intake), abs: slots.intake, bytes: lstatSync(slots.intake).size, kind: 'intake answers', people: false });
174
+ }
175
+ const apps = readIntakeApps(slots.intake);
176
+ const namesHashed = readNamesHashed(slots.ingest);
177
+ return { root, slots, looksLikeCheckup, toDelete, leftovers, folders, apps, namesHashed };
178
+ }
179
+
180
+ /** The steps this skill cannot do itself, in the order the lead should take them. */
181
+ function todoFor(o, plan) {
182
+ const todo = [];
183
+ if (o.app) {
184
+ todo.push({
185
+ step: 'unpublish the App',
186
+ why: 'the report, the intake answers and the daily lines live in the App until it is deleted',
187
+ command: `publish-app --app ${o.app} --delete`,
188
+ });
189
+ } else {
190
+ todo.push({
191
+ step: 'unpublish the App',
192
+ why: 'the report, the intake answers and the daily lines live in the App until it is deleted (pass --app <appId> to put the exact command here)',
193
+ command: 'publish-app --app <appId> --delete',
194
+ });
195
+ }
196
+ const apps = plan.apps && plan.apps.length ? plan.apps : [];
197
+ todo.push({
198
+ step: 'revoke access',
199
+ why: apps.length
200
+ ? `the owner named ${apps.join(', ')}; Crewly stored no key or login for them in this check-up (exports only), so any key, login or read-only share the owner handed over is revoked in that app`
201
+ : 'any key, login or read-only share the owner handed over for the check-up is revoked in that app; Crewly stored none',
202
+ apps,
203
+ });
204
+ return todo;
205
+ }
206
+
207
+ /** The receipt as Markdown the lead can paste to the owner. */
208
+ function receiptMarkdown(r) {
209
+ const lines = [];
210
+ lines.push(`# Check-up ended${r.business ? ` — ${r.business}` : ''}`);
211
+ lines.push('');
212
+ lines.push(`Ended at ${r.endedAt}${r.dryRun ? ' (dry run: nothing was deleted)' : ''}.`);
213
+ lines.push('');
214
+ lines.push(`## Deleted (${r.deleted.length} file${r.deleted.length === 1 ? '' : 's'}, ${r.bytes.toLocaleString('en-US')} bytes)`);
215
+ lines.push('');
216
+ if (!r.deleted.length) lines.push('- nothing: no check-up files were found');
217
+ for (const f of r.deleted) lines.push(`- \`${f.path}\` — ${f.kind}${f.people ? ' (held people data)' : ''}`);
218
+ lines.push('');
219
+ if (r.namesHashed === true) lines.push('Names, emails and phones were hashed when the exports were ingested; the stored rows held none.');
220
+ else if (r.namesHashed === false) lines.push('The ingested rows held names as exported; they are gone with the files above.');
221
+ lines.push('');
222
+ lines.push('## Kept');
223
+ lines.push('');
224
+ lines.push(`- this receipt (\`${r.receipt.json}\`, \`${r.receipt.md}\`)`);
225
+ for (const l of r.leftovers) lines.push(`- \`${l.path}\` — ${l.note}`);
226
+ lines.push('');
227
+ lines.push('## Still to do');
228
+ lines.push('');
229
+ for (const t of r.todo) {
230
+ lines.push(`- **${t.step}**: ${t.why}${t.command ? ` — \`${t.command}\`` : ''}`);
231
+ }
232
+ lines.push('');
233
+ return lines.join('\n');
234
+ }
235
+
236
+ /** Delete the planned files, then remove any check-up folder left empty. Returns what was actually removed. */
237
+ function applyPlan(plan) {
238
+ const deleted = [];
239
+ const failed = [];
240
+ for (const f of plan.toDelete) {
241
+ try {
242
+ unlinkSync(f.abs);
243
+ deleted.push(f);
244
+ } catch (e) {
245
+ failed.push({ path: f.path, error: e.message });
246
+ }
247
+ }
248
+ const removedFolders = [];
249
+ for (const dir of plan.folders) {
250
+ try {
251
+ if (isRealDir(dir) && readdirSync(dir).length === 0) {
252
+ rmdirSync(dir);
253
+ removedFolders.push(relative(plan.root, dir) || dir);
254
+ }
255
+ } catch {
256
+ /* a folder that will not go is simply kept */
257
+ }
258
+ }
259
+ return { deleted, failed, removedFolders };
260
+ }
261
+
262
+ function out(obj, code) {
263
+ process.stdout.write(JSON.stringify(obj) + '\n');
264
+ process.exit(code);
265
+ }
266
+
267
+ function usage() {
268
+ out({ success: false, error: 'usage: end.mjs --dir <project> [--business <name>] [--app <appId>] [--exports <csv dir>] [--ingest <dir>] [--analysis <dir>] [--data <dir>] [--app-dir <dir>] [--intake <file>] [--receipt <dir>] [--dry-run]' }, 1);
269
+ }
270
+
271
+ function main(argv) {
272
+ const o = {};
273
+ for (let i = 0; i < argv.length; i += 1) {
274
+ const a = argv[i];
275
+ const next = () => { i += 1; if (i >= argv.length) usage(); return argv[i]; };
276
+ if (a === '--dir') o.dir = next();
277
+ else if (a === '--business') o.business = next();
278
+ else if (a === '--app') o.app = next();
279
+ else if (a === '--exports') o.exports = next();
280
+ else if (a === '--ingest') o.ingest = next();
281
+ else if (a === '--analysis') o.analysis = next();
282
+ else if (a === '--data') o.data = next();
283
+ else if (a === '--app-dir') o.appDir = next();
284
+ else if (a === '--intake') o.intake = next();
285
+ else if (a === '--receipt') o.receipt = next();
286
+ else if (a === '--dry-run') o.dryRun = true;
287
+ else usage();
288
+ }
289
+ if (!o.dir) usage();
290
+ if (!isRealDir(o.dir)) out({ success: false, error: `${o.dir}: not a folder` }, 2);
291
+ if (o.exports && !isRealDir(o.exports)) out({ success: false, error: `${o.exports}: not a folder` }, 2);
292
+
293
+ const plan = planEnd(o);
294
+ if (!plan.looksLikeCheckup) {
295
+ out({
296
+ success: false,
297
+ error: `${plan.root} does not look like a check-up folder (no ingest/summary.json, analysis/breaks.json, report-doc.json, timelog.json or intake.json); nothing deleted`,
298
+ }, 2);
299
+ }
300
+
301
+ const endedAt = new Date().toISOString();
302
+ const receiptDir = resolve(o.receipt || plan.root);
303
+ const receipt = { json: join(receiptDir, RECEIPT_JSON), md: join(receiptDir, RECEIPT_MD) };
304
+ const result = o.dryRun ? { deleted: plan.toDelete, failed: [], removedFolders: [] } : applyPlan(plan);
305
+ const bytes = result.deleted.reduce((n, f) => n + f.bytes, 0);
306
+ const r = {
307
+ schemaVersion: '1.0',
308
+ business: o.business || null,
309
+ endedAt,
310
+ dryRun: Boolean(o.dryRun),
311
+ root: plan.root,
312
+ deleted: result.deleted.map(({ path, bytes: b, kind, people }) => ({ path, bytes: b, kind, people })),
313
+ bytes,
314
+ failed: result.failed,
315
+ removedFolders: result.removedFolders,
316
+ leftovers: plan.leftovers,
317
+ namesHashed: plan.namesHashed,
318
+ todo: todoFor(o, plan),
319
+ receipt,
320
+ };
321
+ mkdirSync(receiptDir, { recursive: true });
322
+ writeFileSync(receipt.json, JSON.stringify(r, null, 2));
323
+ writeFileSync(receipt.md, receiptMarkdown(r));
324
+
325
+ out({
326
+ success: result.failed.length === 0,
327
+ dryRun: r.dryRun,
328
+ deleted: r.deleted.length,
329
+ bytes,
330
+ peopleFiles: r.deleted.filter((f) => f.people).length,
331
+ leftovers: r.leftovers.length,
332
+ failed: result.failed,
333
+ receipt,
334
+ next: r.todo.map((t) => t.command || `${t.step}: ${t.why}`),
335
+ }, result.failed.length ? 2 : 0);
336
+ }
337
+
338
+ const isMain = process.argv[1] && resolve(process.argv[1]) === resolve(new URL(import.meta.url).pathname);
339
+ if (isMain) main(process.argv.slice(2));
@@ -0,0 +1,39 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # checkup-end — end a small-business check-up (crewly#1055): delete every
4
+ # file the check-up produced on this machine and write a receipt that says
5
+ # what was deleted, what was kept and what the lead still has to do
6
+ # (unpublish the App, revoke any access the owner granted).
7
+ #
8
+ # Usage:
9
+ # bash execute.sh --dir . --business "Oak Pottery" --app <appId> # the project the team worked in
10
+ # bash execute.sh --dir . --exports ~/Downloads/oak-exports # also the raw CSVs the owner handed over
11
+ # bash execute.sh --dir . --dry-run # list what would go, delete nothing
12
+ # bash execute.sh '{"dir":".","business":"Oak Pottery","app":"28au74d9cj","dryRun":true}'
13
+ #
14
+ # Output: one JSON line (files deleted, bytes, leftovers, receipt paths, the
15
+ # commands still to run). Exit 0 = done, 2 = not a check-up folder or a file
16
+ # would not delete, 1 = usage.
17
+ # =============================================================================
18
+ set -euo pipefail
19
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
20
+ END="${SCRIPT_DIR}/end.mjs"
21
+
22
+ command -v node >/dev/null 2>&1 || { printf '{"success":false,"error":"node is required but not on PATH"}\n'; exit 1; }
23
+
24
+ ARGS=()
25
+ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
26
+ command -v jq >/dev/null 2>&1 || { printf '{"success":false,"error":"jq is required to read JSON input"}\n'; exit 1; }
27
+ for key in dir business app exports ingest analysis data appDir intake receipt; do
28
+ v=$(printf '%s' "$1" | jq -r --arg k "$key" '.[$k] // empty')
29
+ if [ -n "$v" ]; then
30
+ case "$key" in appDir) flag=--app-dir ;; *) flag="--$key" ;; esac
31
+ ARGS+=("$flag" "$v")
32
+ fi
33
+ done
34
+ [ "$(printf '%s' "$1" | jq -r '.dryRun // false')" = "true" ] && ARGS+=(--dry-run)
35
+ shift
36
+ fi
37
+ ARGS+=("$@")
38
+
39
+ exec node "$END" ${ARGS[@]+"${ARGS[@]}"}
@@ -0,0 +1,134 @@
1
+ #!/bin/bash
2
+ # Tests for checkup-end — run with: bash execute.test.sh
3
+ # Offline: builds a check-up folder with ingest-exports + checkup-analyse + checkup-report first. Needs node and jq.
4
+ set -u
5
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6
+ EXEC="$HERE/execute.sh"
7
+ INGEST="$HERE/../ingest-exports/execute.sh"
8
+ ANALYSE="$HERE/../checkup-analyse/execute.sh"
9
+ REPORT="$HERE/../checkup-report/execute.sh"
10
+ FX="$HERE/../ingest-exports/fixtures"
11
+ PASS=0; FAIL=0
12
+ check() {
13
+ local name="$1"; local got="$2"; local want="$3"
14
+ if [ "$got" = "$want" ]; then PASS=$((PASS+1)); else FAIL=$((FAIL+1)); echo "FAIL: $name"; echo " want: $want"; echo " got: $got"; fi
15
+ }
16
+ T="$(mktemp -d)"; trap 'rm -rf "$T"' EXIT
17
+
18
+ # A check-up laid out the way the team template works: project P with ingest/, analysis/, checkup-data/, checkup-app/, intake.json
19
+ build_checkup() {
20
+ local P="$1"; local hash="${2:-}"
21
+ mkdir -p "$P"
22
+ if [ -n "$hash" ]; then bash "$INGEST" --in "$FX" --out "$P/ingest" --hash-names >/dev/null; else bash "$INGEST" --in "$FX" --out "$P/ingest" >/dev/null; fi
23
+ bash "$ANALYSE" --in "$P/ingest" --as-of 2026-10-26 --out "$P/analysis" >/dev/null
24
+ cat > "$P/intake.json" <<'EOF'
25
+ {"apps":["Square","Jotform","Jackrabbit"],"slowestTask":"copying sign-ups","fears":[],"appsPerCustomer":"3","firstNumber":"Money owed to me","savedAt":"2026-10-26T10:00:00.000Z"}
26
+ EOF
27
+ bash "$REPORT" --log-step intake --start --out "$P/checkup-data" >/dev/null
28
+ bash "$REPORT" --log-step intake --end --out "$P/checkup-data" >/dev/null
29
+ bash "$REPORT" --breaks "$P/analysis/breaks.json" --business "Oak Pottery" --intake "$P/intake.json" --out "$P/checkup-data" >/dev/null
30
+ bash "$REPORT" --daily "Replied to 3 inquiries." --date 2026-10-27 --out "$P/checkup-data" >/dev/null
31
+ bash "$REPORT" --app-dir "$P/checkup-app" >/dev/null
32
+ }
33
+
34
+ # 1. Dry run: lists everything, deletes nothing, receipt marked dryRun
35
+ build_checkup "$T/p1"
36
+ BEFORE=$(find "$T/p1" -type f | wc -l | tr -d ' ')
37
+ OUT="$(bash "$EXEC" --dir "$T/p1" --business "Oak Pottery" --app 28au74d9cj --dry-run)"; RC=$?
38
+ check "dry run exits 0" "$RC" "0"
39
+ check "dry run success" "$(printf '%s' "$OUT" | jq -r '.success')" "true"
40
+ check "dry run flagged" "$(printf '%s' "$OUT" | jq -r '.dryRun')" "true"
41
+ check "dry run counts the files" "$(printf '%s' "$OUT" | jq -r '.deleted >= 12')" "true"
42
+ AFTER=$(find "$T/p1" -type f -not -name 'checkup-end-receipt.*' | wc -l | tr -d ' ')
43
+ check "dry run deleted nothing" "$AFTER" "$BEFORE"
44
+ check "dry run still has breaks.json" "$([ -f "$T/p1/analysis/breaks.json" ] && echo yes || echo no)" "yes"
45
+ R="$T/p1/checkup-end-receipt.json"
46
+ check "receipt json written" "$([ -f "$R" ] && echo yes || echo no)" "yes"
47
+ check "receipt md written" "$([ -f "$T/p1/checkup-end-receipt.md" ] && echo yes || echo no)" "yes"
48
+ check "receipt dryRun" "$(jq -r '.dryRun' "$R")" "true"
49
+ check "receipt business" "$(jq -r '.business' "$R")" "Oak Pottery"
50
+ check "receipt next = unpublish with the app id" "$(printf '%s' "$OUT" | jq -r '.next[0]')" "publish-app --app 28au74d9cj --delete"
51
+ check "receipt lists the apps to revoke" "$(jq -c '.todo[1].apps' "$R")" '["Square","Jotform","Jackrabbit"]'
52
+ check "receipt says names were not hashed" "$(jq -r '.namesHashed' "$R")" "false"
53
+ check "md mentions dry run" "$(grep -c 'dry run' "$T/p1/checkup-end-receipt.md")" "1"
54
+
55
+ # 2. Real run: known files gone, empty folders removed, leftovers kept and listed
56
+ build_checkup "$T/p2" hash
57
+ echo "owner note" > "$T/p2/analysis/notes.txt" # not written by a check-up skill → leftover
58
+ mkdir -p "$T/p2/ingest/raw" # a sub-folder → leftover
59
+ ln -s "$T/p2/intake.json" "$T/p2/checkup-data/link.json" # a symlink → never followed
60
+ OUT="$(bash "$EXEC" --dir "$T/p2" --business "Oak Pottery")"; RC=$?
61
+ check "end exits 0" "$RC" "0"
62
+ check "end success" "$(printf '%s' "$OUT" | jq -r '.success')" "true"
63
+ check "end not a dry run" "$(printf '%s' "$OUT" | jq -r '.dryRun')" "false"
64
+ check "breaks.json gone" "$([ -e "$T/p2/analysis/breaks.json" ] && echo still || echo gone)" "gone"
65
+ check "ingested rows gone" "$(ls "$T/p2/ingest" 2>/dev/null | grep -c '\.json$')" "0"
66
+ check "report-doc gone" "$([ -e "$T/p2/checkup-data/report-doc.json" ] && echo still || echo gone)" "gone"
67
+ check "daily gone" "$([ -e "$T/p2/checkup-data/daily-2026-10-27.json" ] && echo still || echo gone)" "gone"
68
+ check "timelog gone" "$([ -e "$T/p2/checkup-data/timelog.json" ] && echo still || echo gone)" "gone"
69
+ check "intake gone" "$([ -e "$T/p2/intake.json" ] && echo still || echo gone)" "gone"
70
+ check "app page copy gone" "$([ -e "$T/p2/checkup-app/index.html" ] && echo still || echo gone)" "gone"
71
+ check "empty checkup-app folder removed" "$([ -d "$T/p2/checkup-app" ] && echo still || echo gone)" "gone"
72
+ check "leftover note kept" "$([ -f "$T/p2/analysis/notes.txt" ] && echo yes || echo no)" "yes"
73
+ check "leftover folder kept" "$([ -d "$T/p2/ingest/raw" ] && echo yes || echo no)" "yes"
74
+ check "symlink kept (not followed)" "$([ -L "$T/p2/checkup-data/link.json" ] && echo yes || echo no)" "yes"
75
+ check "non-empty folders kept" "$([ -d "$T/p2/analysis" ] && [ -d "$T/p2/ingest" ] && echo yes || echo no)" "yes"
76
+ R="$T/p2/checkup-end-receipt.json"
77
+ check "receipt leftovers = 3" "$(jq -r '.leftovers | length' "$R")" "3"
78
+ check "receipt leftover note reason" "$(jq -r '.leftovers[] | select(.path=="analysis/notes.txt") | .note' "$R")" "not written by a check-up skill"
79
+ check "receipt symlink reason" "$(jq -r '.leftovers[] | select(.path=="checkup-data/link.json") | .note' "$R")" "symbolic link, not followed"
80
+ check "receipt names hashed" "$(jq -r '.namesHashed' "$R")" "true"
81
+ check "receipt people files counted" "$(printf '%s' "$OUT" | jq -r '.peopleFiles >= 8')" "true"
82
+ check "receipt bytes > 0" "$(jq -r '.bytes > 0' "$R")" "true"
83
+ check "receipt removed folders lists checkup-app" "$(jq -r '.removedFolders | index("checkup-app") != null' "$R")" "true"
84
+ check "receipt next without --app shows placeholder" "$(printf '%s' "$OUT" | jq -r '.next[0]')" "publish-app --app <appId> --delete"
85
+ check "md lists deleted kinds" "$(grep -c 'held people data' "$T/p2/checkup-end-receipt.md" | awk '{print ($1>=5)?"yes":"no"}')" "yes"
86
+ check "md hashed note" "$(grep -c 'were hashed' "$T/p2/checkup-end-receipt.md")" "1"
87
+
88
+ # 3. Raw exports folder: only *.csv in it, not recursive
89
+ build_checkup "$T/p3"
90
+ mkdir -p "$T/exports/sub"
91
+ cp "$FX"/*.csv "$T/exports/"
92
+ echo "x" > "$T/exports/readme.txt"
93
+ cp "$FX/square-transactions.csv" "$T/exports/sub/"
94
+ N_CSV=$(ls "$T/exports"/*.csv | wc -l | tr -d ' ')
95
+ OUT="$(bash "$EXEC" --dir "$T/p3" --exports "$T/exports")"; RC=$?
96
+ check "exports exits 0" "$RC" "0"
97
+ check "csv exports gone" "$(ls "$T/exports" | grep -c '\.csv$')" "0"
98
+ check "readme kept" "$([ -f "$T/exports/readme.txt" ] && echo yes || echo no)" "yes"
99
+ check "sub-folder csv kept" "$([ -f "$T/exports/sub/square-transactions.csv" ] && echo yes || echo no)" "yes"
100
+ check "receipt counts the csvs" "$(jq -r --argjson n "$N_CSV" '[.deleted[] | select(.kind | startswith("raw export"))] | length == $n' "$T/p3/checkup-end-receipt.json")" "true"
101
+
102
+ # 4. Refuses a folder that is not a check-up, deletes nothing
103
+ mkdir -p "$T/notme/analysis"; echo "keep" > "$T/notme/analysis/report.md"; echo "keep" > "$T/notme/other.txt"
104
+ OUT="$(bash "$EXEC" --dir "$T/notme")"; RC=$?
105
+ check "not a check-up exits 2" "$RC" "2"
106
+ check "not a check-up error" "$(printf '%s' "$OUT" | jq -r '.error' | grep -c 'does not look like a check-up')" "1"
107
+ check "not a check-up kept report.md" "$([ -f "$T/notme/analysis/report.md" ] && echo yes || echo no)" "yes"
108
+ check "not a check-up wrote no receipt" "$([ -e "$T/notme/checkup-end-receipt.json" ] && echo yes || echo no)" "no"
109
+
110
+ # 5. Missing folder, usage, JSON input, explicit slot flags and --receipt
111
+ OUT="$(bash "$EXEC" --dir "$T/nope")"; RC=$?
112
+ check "missing dir exits 2" "$RC" "2"
113
+ OUT="$(bash "$EXEC")"; RC=$?
114
+ check "no args exits 1" "$RC" "1"
115
+ OUT="$(bash "$EXEC" --dir "$T/p3" --bogus)"; RC=$?
116
+ check "unknown flag exits 1" "$RC" "1"
117
+ build_checkup "$T/p5"
118
+ mv "$T/p5/checkup-data" "$T/p5/elsewhere"
119
+ OUT="$(bash "$EXEC" "{\"dir\":\"$T/p5\",\"data\":\"$T/p5/elsewhere\",\"business\":\"Oak Pottery\",\"app\":\"abc123\",\"receipt\":\"$T/p5-receipt\",\"dryRun\":true}")"; RC=$?
120
+ check "json exits 0" "$RC" "0"
121
+ check "json dry run" "$(printf '%s' "$OUT" | jq -r '.dryRun')" "true"
122
+ check "json app in next" "$(printf '%s' "$OUT" | jq -r '.next[0]')" "publish-app --app abc123 --delete"
123
+ check "json --data slot found the moved folder" "$(jq -r '[.deleted[] | select(.path=="elsewhere/report-doc.json")] | length' "$T/p5-receipt/checkup-end-receipt.json")" "1"
124
+ check "json receipt in --receipt dir" "$([ -f "$T/p5-receipt/checkup-end-receipt.md" ] && echo yes || echo no)" "yes"
125
+ check "json receipt not in project" "$([ -e "$T/p5/checkup-end-receipt.json" ] && echo yes || echo no)" "no"
126
+
127
+ # 6. Ending twice: the second run finds nothing and says so
128
+ build_checkup "$T/p6"
129
+ bash "$EXEC" --dir "$T/p6" >/dev/null
130
+ OUT="$(bash "$EXEC" --dir "$T/p6")"; RC=$?
131
+ check "second end refuses (nothing left to mark a check-up)" "$RC" "2"
132
+
133
+ echo "checkup-end: $PASS passed, $FAIL failed"
134
+ [ "$FAIL" -eq 0 ]
@@ -106,6 +106,14 @@ and any step still open). A second `--start` on an open step restarts it;
106
106
  `--end` with no open entry fails (exit 2) so a forgotten start is noticed.
107
107
  `--at <iso>` back-fills a time you know. One `daily` entry per day is fine.
108
108
 
109
+ ## End — when the 7 days are over
110
+
111
+ Run `checkup-end --dir . --business "<Business>" --app <appId>`: it deletes
112
+ every file the check-up left on this machine (ingested rows, `breaks.json`,
113
+ the report and daily documents, the intake answers, the time log, the App
114
+ page copy) and writes a receipt. Then `publish-app --app <appId> --delete`
115
+ and send the owner the receipt. See that skill.
116
+
109
117
  ## Report back
110
118
 
111
119
  Tell the owner in plain words: the App is ready (the card has the link), the
@@ -196,11 +196,14 @@
196
196
  Object.keys(r.assumptions || {}).forEach(function (k) { as.appendChild(el('li', null, k + ': ' + r.assumptions[k])); });
197
197
  var timing = $('timing'); timing.replaceChildren();
198
198
  var t = r.timing;
199
+ // Minutes come rounded to one decimal; a step that took seconds reads
200
+ // "0 min", which looks like it never ran.
201
+ function fmtMin(m) { return (typeof m === 'number' && m < 1) ? 'under a minute' : m + ' min'; }
199
202
  if (t && t.steps && t.steps.length) {
200
203
  t.steps.forEach(function (s) {
201
- timing.appendChild(el('li', null, s.step + ': ' + (s.endedAt ? s.minutes + ' min' : 'still running')));
204
+ timing.appendChild(el('li', null, s.step + ': ' + (s.endedAt ? fmtMin(s.minutes) : 'still running')));
202
205
  });
203
- timing.appendChild(el('li', 'note', 'Total ' + t.totalMinutes + ' min of agent time' + (t.open && t.open.length ? ' so far' : '')));
206
+ timing.appendChild(el('li', 'note', 'Total ' + fmtMin(t.totalMinutes) + ' of agent time' + (t.open && t.open.length ? ' so far' : '')));
204
207
  }
205
208
  $('timing-wrap').classList.toggle('hidden', !(t && t.steps && t.steps.length));
206
209
  }
@@ -135,6 +135,7 @@ bash "$EXEC" --bogus >/dev/null 2>&1; check "unknown flag exits 1" "$?" "1"
135
135
 
136
136
  # 9. --log-step: per-step time log
137
137
  check "page has a timing block" "$(grep -c 'data-crewly-id="timing"' "$PAGE")" "1"
138
+ check "page says 'under a minute' for sub-minute steps" "$(grep -c "under a minute" "$PAGE")" "1"
138
139
  bash "$EXEC" --log-step intake --start --at 2026-10-26T09:00:00Z --out "$T/tl" >/dev/null; check "log start exits 0" "$?" "0"
139
140
  check "timelog written" "$([ -f "$T/tl/timelog.json" ] && echo yes || echo no)" "yes"
140
141
  check "open entry" "$(jq -c '.steps[0] | {step, endedAt, minutes}' "$T/tl/timelog.json")" '{"step":"intake","endedAt":null,"minutes":null}'
@@ -88,8 +88,8 @@ Children's names, parents' emails and phone numbers are in most of these
88
88
  exports. Run with `--hash-names` unless the analysis truly needs the names:
89
89
  `name`, `email`, `phone` and every original column that looks personal become
90
90
  a short stable hash (`h:3f1a…`), so the same person still counts once across
91
- files but nobody's name is stored. Report counts, not names, and delete the
92
- `--out` folder when the check-up ends.
91
+ files but nobody's name is stored. Report counts, not names, and run
92
+ `checkup-end` when the check-up is over so the `--out` folder goes with a receipt.
93
93
 
94
94
  ## Report back
95
95
 
@@ -94,7 +94,10 @@ wrote, `usage` its tokens (booked under `sessionName`, `<you>/sub-<n>`).
94
94
 
95
95
  A refusal is an error with a `code`: `nested` (a helper cannot spawn),
96
96
  `too_many` (3 already running for you), `task_too_long`, `cwd_invalid`,
97
- `model_invalid`, `parent_required` (no agent session in this shell).
97
+ `model_invalid`, `provider_exhausted` (the in-process model's provider is out
98
+ of credit or quota: the message says since when; pass `--model` for a
99
+ provider that has a key, or tell the owner), `parent_required` (no agent
100
+ session in this shell).
98
101
 
99
102
  ## Reading the result
100
103
 
@@ -6,7 +6,7 @@
6
6
  {
7
7
  "name": "Checkup Lead",
8
8
  "role": "product-manager",
9
- "systemPrompt": "You run the small-business check-up end to end for one business owner. The four steps are intake, connect, analyse, report; log the start and end of each one with the 'checkup-report' skill (--log-step <step> --start / --end --out ./checkup-data) so the owner can see how long the check-up really took. Intake: run 'checkup-report --app-dir ./checkup-app', then 'publish-app' so the owner gets the App on their phone, and wait for the five answers (app-data --get intake answers). Connect and analyse: hand the Data Analyst the list of apps from the answers and the exports or connector access the owner provides; the analyst returns the path to breaks.json. Report: build the report document with 'checkup-report --breaks ... --business ... --intake ... --out ./checkup-data'. If a Reviewer is on the team, send them the report-doc.json path and wait for 'approved' or a list of fixes before publishing; if there is no Reviewer, check the document yourself and publish. Publish with 'app-data --set report current' and share the App link. Then post one daily summary for 7 days with 'checkup-report --daily'. Tell the owner the top 3 in plain words with count and estimate, say that the dollars are estimates from listed assumptions, and name the one thing you would start on. Never paste the whole list of people into chat or the App, and never send anything to a third party without the owner's say-so."
9
+ "systemPrompt": "You run the small-business check-up end to end for one business owner. The four steps are intake, connect, analyse, report; log the start and end of each one with the 'checkup-report' skill (--log-step <step> --start / --end --out ./checkup-data) so the owner can see how long the check-up really took. Intake: run 'checkup-report --app-dir ./checkup-app', then 'publish-app' so the owner gets the App on their phone, and wait for the five answers (app-data --get intake answers). Connect and analyse: hand the Data Analyst the list of apps from the answers and the exports or connector access the owner provides; the analyst returns the path to breaks.json. Report: build the report document with 'checkup-report --breaks ... --business ... --intake ... --out ./checkup-data'. If a Reviewer is on the team, send them the report-doc.json path and wait for 'approved' or a list of fixes before publishing; if there is no Reviewer, check the document yourself and publish. Publish with 'app-data --set report current' and share the App link. Then post one daily summary for 7 days with 'checkup-report --daily'. End: after the seventh daily line, or when the owner says the check-up is over, run 'checkup-end --dir . --business <name> --app <appId>' (--dry-run first if unsure; add --exports <dir> when the owner handed over CSV files) so every ingested row, the analysis and the report leave this machine, then 'publish-app --app <appId> --delete', and send the owner the receipt it wrote in plain words. Tell the owner the top 3 in plain words with count and estimate, say that the dollars are estimates from listed assumptions, and name the one thing you would start on. Never paste the whole list of people into chat or the App, and never send anything to a third party without the owner's say-so."
10
10
  },
11
11
  {
12
12
  "name": "Data Analyst",
@@ -1 +1 @@
1
- {"version":3,"file":"in-process-log-buffer.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAiC;IACjD,qDAAqD;IACrD,OAAO,CAAC,UAAU,CAAqC;IACvD,gDAAgD;IAChD,OAAO,CAAC,cAAc,CAAS;IAE/B,4EAA4E;IAC5E,OAAO,CAAC,YAAY,CAA0C;;IAkB9D;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAY5B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;;;;;;OASG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB5E;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM;IASjD;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO1C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKxC;;;;OAIG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAIlB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAuBrB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;CAYpB"}
1
+ {"version":3,"file":"in-process-log-buffer.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAiC;IACjD,qDAAqD;IACrD,OAAO,CAAC,UAAU,CAAqC;IACvD,gDAAgD;IAChD,OAAO,CAAC,cAAc,CAAS;IAE/B,4EAA4E;IAC5E,OAAO,CAAC,YAAY,CAA0C;;IAkB9D;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAY5B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;;;;;;OASG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB5E;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM;IASjD;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO1C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKxC;;;;OAIG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IASlB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAuBrB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;CAYpB"}
@@ -209,7 +209,12 @@ export class InProcessLogBuffer extends EventEmitter {
209
209
  * @returns Absolute path to the log file
210
210
  */
211
211
  getLogPath(sessionName) {
212
- return path.join(this.sessionLogsDir, `${sessionName}.log`);
212
+ // A sub-agent is named `<parent>/sub-<n>` (#1317); a slash would put its
213
+ // log in a directory that does not exist and the stream would fail
214
+ // silently, losing the worker's stderr — the one place the provider's
215
+ // real error is printed.
216
+ const fileName = sessionName.replace(/[\\/]/g, '__');
217
+ return path.join(this.sessionLogsDir, `${fileName}.log`);
213
218
  }
214
219
  /**
215
220
  * Open a writable file stream for a session log.
@@ -1 +1 @@
1
- {"version":3,"file":"in-process-log-buffer.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"in-process-log-buffer.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@
24
24
  *
25
25
  * @module services/agent/crewly-agent/subagent-run.service
26
26
  */
27
+ import type { ExhaustedRuntime } from '../../runtime-fallback/runtime-fallback.types.js';
27
28
  import { InProcessLogBuffer } from './in-process-log-buffer.js';
28
29
  import { type AgentRunResult, type CrewlyAgentConfig, type ModelConfig } from './types.js';
29
30
  /** What the caller asks for */
@@ -67,7 +68,7 @@ export interface SubagentRunOutcome {
67
68
  error?: string;
68
69
  }
69
70
  /** Codes a refusal carries, so the skill can say which rule it hit */
70
- export type SubagentRefusalCode = 'parent_required' | 'nested' | 'task_missing' | 'task_too_long' | 'cwd_invalid' | 'model_invalid' | 'too_many';
71
+ export type SubagentRefusalCode = 'parent_required' | 'nested' | 'task_missing' | 'task_too_long' | 'cwd_invalid' | 'model_invalid' | 'provider_exhausted' | 'too_many';
71
72
  /** A run that was not started; `code` says which rule refused it */
72
73
  export declare class SubagentRunRefused extends Error {
73
74
  readonly code: SubagentRefusalCode;
@@ -83,8 +84,12 @@ export interface SubagentRuntime {
83
84
  export interface SubagentRunServiceDeps {
84
85
  /** Builds the worker runtime; defaults to a fresh crewly-agent runtime rooted at `cwd` */
85
86
  createRuntime?: (cwd: string) => SubagentRuntime;
86
- /** Where the child's tokens and the parent's spawn lines are logged */
87
- logBuffer?: Pick<InProcessLogBuffer, 'append'>;
87
+ /** Where the child's tokens and the parent's spawn lines are logged, and the child's stderr is read back */
88
+ logBuffer?: Pick<InProcessLogBuffer, 'append' | 'capture'>;
89
+ /** Runtimes the fallback service has marked out of credit or quota */
90
+ exhaustedRuntimes?: () => Promise<ExhaustedRuntime[]>;
91
+ /** The `provider/modelId` the crewly-agent runtime runs by default */
92
+ crewlyAgentModel?: () => string | undefined;
88
93
  /** Wall-clock budget per child; default `SUBAGENT.TIMEOUT_MS` bounded by the IPC deadline */
89
94
  timeoutMs?: number;
90
95
  /** The model when the caller names none */
@@ -116,6 +121,15 @@ export declare function parseRequestedModel(spec: string): {
116
121
  } | {
117
122
  error: string;
118
123
  };
124
+ /**
125
+ * The provider's last error as the worker printed it: `[stderr]` lines from
126
+ * the child's log buffer. The run itself only says "No output generated".
127
+ *
128
+ * @param buffer - The log buffer
129
+ * @param sessionName - The child's session
130
+ * @returns The last stderr lines, or empty
131
+ */
132
+ export declare function lastWorkerStderr(buffer: Pick<InProcessLogBuffer, 'capture'>, sessionName: string): string;
119
133
  /**
120
134
  * The model a child runs when the parent names none: the fallback
121
135
  * settings' crewly-agent model (DeepSeek unless the owner changed it),
@@ -144,6 +158,8 @@ export declare class SubagentRunService {
144
158
  private readonly createRuntime;
145
159
  private readonly timeoutMs;
146
160
  private readonly defaultModel;
161
+ private readonly exhaustedRuntimes;
162
+ private readonly crewlyAgentModel;
147
163
  private readonly now;
148
164
  private readonly isDirectory;
149
165
  /** Children running per parent */
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-run.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/subagent-run.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent-run.service.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/subagent-run.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kDAAkD,CAAC;AAEzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AASpB,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,0BAA0B;AAC1B,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,aAAa,GAAG,iBAAiB,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjH,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,kBAAkB,CAAC;IAClC,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yEAAyE;IACzE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sEAAsE;AACtE,MAAM,MAAM,mBAAmB,GAC3B,iBAAiB,GACjB,QAAQ,GACR,cAAc,GACd,eAAe,GACf,aAAa,GACb,eAAe,GACf,oBAAoB,GACpB,UAAU,CAAC;AAEf,oEAAoE;AACpE,qBAAa,kBAAmB,SAAQ,KAAK;IAC/B,QAAQ,CAAC,IAAI,EAAE,mBAAmB;gBAAzB,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM;CAIhE;AAED,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/G,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACxD,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,0FAA0F;IAC1F,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,eAAe,CAAC;IACjD,4GAA4G;IAC5G,SAAS,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;IAC3D,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtD,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC5C,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,WAAW,CAAC;IACjC,uBAAuB;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,iCAAiC;IACjC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACzC;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAQjG;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAmB5F;AA0BD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAGzG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,WAAW,CAOlD;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,OAAO,GAChB,kBAAkB,CAuCpB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2E;IAClG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiD;IAC3E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IACjE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoC;IACtE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;IAC5D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,kCAAkC;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,sDAAsD;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;gBAE1C,IAAI,GAAE,sBAA2B;IAc7C,wCAAwC;IACxC,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAI1C;;;;;;;;OAQG;IACG,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAsInG;AAKD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,CAG1D;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAExF"}
@@ -30,6 +30,7 @@ import { RUNTIME_TYPES } from '../../../constants.js';
30
30
  import { LoggerService } from '../../core/logger.service.js';
31
31
  import { getLocalApiBaseUrl } from '../../../utils/local-api-url.utils.js';
32
32
  import { getRuntimeFallbackService } from '../../runtime-fallback/runtime-fallback.service.js';
33
+ import { RUNTIME_TYPES as FALLBACK_RUNTIME_TYPES } from '../../../constants.js';
33
34
  import { RuntimeServiceFactory } from '../runtime-service.factory.js';
34
35
  import { InProcessLogBuffer } from './in-process-log-buffer.js';
35
36
  import { registerInProcessRuntime, unregisterInProcessRuntime } from './in-process-runtime-registry.js';
@@ -92,6 +93,42 @@ export function parseRequestedModel(spec) {
92
93
  },
93
94
  };
94
95
  }
96
+ /**
97
+ * Runtimes the fallback service holds as exhausted, or none when it is not wired.
98
+ *
99
+ * @returns The exhausted entries
100
+ */
101
+ async function exhaustedRuntimesFromFallback() {
102
+ const svc = getRuntimeFallbackService();
103
+ if (!svc)
104
+ return [];
105
+ try {
106
+ return (await svc.snapshot()).exhausted;
107
+ }
108
+ catch {
109
+ return [];
110
+ }
111
+ }
112
+ /**
113
+ * The crewly-agent model the fallback settings name, if the service is wired.
114
+ *
115
+ * @returns `provider/modelId` or undefined
116
+ */
117
+ function crewlyAgentModelFromFallback() {
118
+ return getRuntimeFallbackService()?.getSettings().crewlyAgentModel;
119
+ }
120
+ /**
121
+ * The provider's last error as the worker printed it: `[stderr]` lines from
122
+ * the child's log buffer. The run itself only says "No output generated".
123
+ *
124
+ * @param buffer - The log buffer
125
+ * @param sessionName - The child's session
126
+ * @returns The last stderr lines, or empty
127
+ */
128
+ export function lastWorkerStderr(buffer, sessionName) {
129
+ const lines = buffer.capture(sessionName, 80).split('\n').filter((l) => l.includes('[stderr]'));
130
+ return lines.slice(-2).map((l) => l.slice(l.indexOf('[stderr]') + '[stderr]'.length).trim()).filter(Boolean).join(' | ');
131
+ }
95
132
  /**
96
133
  * The model a child runs when the parent names none: the fallback
97
134
  * settings' crewly-agent model (DeepSeek unless the owner changed it),
@@ -173,6 +210,8 @@ export class SubagentRunService {
173
210
  createRuntime;
174
211
  timeoutMs;
175
212
  defaultModel;
213
+ exhaustedRuntimes;
214
+ crewlyAgentModel;
176
215
  now;
177
216
  isDirectory;
178
217
  /** Children running per parent */
@@ -184,6 +223,8 @@ export class SubagentRunService {
184
223
  this.createRuntime = deps.createRuntime ?? ((cwd) => RuntimeServiceFactory.createFresh(RUNTIME_TYPES.CREWLY_AGENT, undefined, cwd));
185
224
  this.timeoutMs = deps.timeoutMs;
186
225
  this.defaultModel = deps.defaultModel ?? defaultSubagentModel;
226
+ this.exhaustedRuntimes = deps.exhaustedRuntimes ?? exhaustedRuntimesFromFallback;
227
+ this.crewlyAgentModel = deps.crewlyAgentModel ?? crewlyAgentModelFromFallback;
187
228
  this.now = deps.now ?? Date.now;
188
229
  this.isDirectory = deps.isDirectory ?? ((p) => {
189
230
  try {
@@ -233,6 +274,20 @@ export class SubagentRunService {
233
274
  else {
234
275
  model = this.defaultModel();
235
276
  }
277
+ // The fallback service learns from real runs that the crewly-agent
278
+ // runtime's provider is out of credit (DeepSeek's HTTP 402 is one
279
+ // such). A child on that provider would fail in a second with "No
280
+ // output generated"; say why before starting a worker.
281
+ const exhausted = (await this.exhaustedRuntimes()).find((e) => e.runtime === FALLBACK_RUNTIME_TYPES.CREWLY_AGENT);
282
+ if (exhausted) {
283
+ const agentModel = this.crewlyAgentModel() ?? '';
284
+ const agentProvider = agentModel.includes('/') ? agentModel.slice(0, agentModel.indexOf('/')) : '';
285
+ if (agentProvider && agentProvider === model.provider) {
286
+ const since = exhausted.since ? ` since ${exhausted.since.slice(0, 10)}` : '';
287
+ const kind = exhausted.kind === 'billing' ? 'out of credit' : 'over its usage limit';
288
+ throw new SubagentRunRefused('provider_exhausted', `${model.provider} is ${kind}${since} (${exhausted.ruleId ?? 'runtime-fallback'}); the sub-agent would fail at its first model call. Add credit or an API key in Settings, or pass model=provider/modelId for a provider that has one.`);
289
+ }
290
+ }
236
291
  const limit = CREWLY_AGENT_DEFAULTS.SUBAGENT.MAX_CONCURRENT;
237
292
  if (this.activeCount(parent) >= limit) {
238
293
  throw new SubagentRunRefused('too_many', `${parent} already has ${limit} sub-agents running; wait for one to finish.`);
@@ -288,7 +343,9 @@ export class SubagentRunService {
288
343
  outcome = summarizeSubagentRun(result, childSession, modelString, this.now() - started, false);
289
344
  }
290
345
  catch (error) {
291
- const message = error instanceof Error ? error.message : String(error);
346
+ const base = error instanceof Error ? error.message : String(error);
347
+ const stderr = lastWorkerStderr(this.logBuffer, childSession);
348
+ const message = stderr ? `${base} — worker stderr: ${stderr}` : base;
292
349
  outcome = {
293
350
  success: false,
294
351
  stoppedReason: timedOut ? 'timeout' : 'error',
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-run.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/subagent-run.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent-run.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/subagent-run.service.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  {
2
- "commit": "78045dbc6b7ce0afd2331ce31c53f775328102cb",
3
- "builtAt": "2026-10-26T20:23:20.350Z"
2
+ "commit": "8c6c2dc2ea5f4d85e8f594e13e18ede517da64c2",
3
+ "builtAt": "2026-10-26T21:10:11.708Z"
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"in-process-log-buffer.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAiC;IACjD,qDAAqD;IACrD,OAAO,CAAC,UAAU,CAAqC;IACvD,gDAAgD;IAChD,OAAO,CAAC,cAAc,CAAS;IAE/B,4EAA4E;IAC5E,OAAO,CAAC,YAAY,CAA0C;;IAkB9D;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAY5B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;;;;;;OASG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB5E;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM;IASjD;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO1C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKxC;;;;OAIG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAIlB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAuBrB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;CAYpB"}
1
+ {"version":3,"file":"in-process-log-buffer.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB;IAChB,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,QAAQ,CAAiC;IACjD,qDAAqD;IACrD,OAAO,CAAC,UAAU,CAAqC;IACvD,gDAAgD;IAChD,OAAO,CAAC,cAAc,CAAS;IAE/B,4EAA4E;IAC5E,OAAO,CAAC,YAAY,CAA0C;;IAkB9D;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,IAAI;IAY5B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;;;;;;OASG;IACH,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAwB5E;;;;;OAKG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,MAAM;IASjD;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO1C;;;;;OAKG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKxC;;;;OAIG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IASlB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAuBrB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;;;;OAOG;IACH,OAAO,CAAC,WAAW;CAYpB"}
@@ -209,7 +209,12 @@ export class InProcessLogBuffer extends EventEmitter {
209
209
  * @returns Absolute path to the log file
210
210
  */
211
211
  getLogPath(sessionName) {
212
- return path.join(this.sessionLogsDir, `${sessionName}.log`);
212
+ // A sub-agent is named `<parent>/sub-<n>` (#1317); a slash would put its
213
+ // log in a directory that does not exist and the stream would fail
214
+ // silently, losing the worker's stderr — the one place the provider's
215
+ // real error is printed.
216
+ const fileName = sessionName.replace(/[\\/]/g, '__');
217
+ return path.join(this.sessionLogsDir, `${fileName}.log`);
213
218
  }
214
219
  /**
215
220
  * Open a writable file stream for a session log.
@@ -1 +1 @@
1
- {"version":3,"file":"in-process-log-buffer.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"in-process-log-buffer.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/in-process-log-buffer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crewly",
3
- "version": "1.20.452",
3
+ "version": "1.20.454",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration platform for AI coding teams — coordinates Claude Code, Gemini CLI, and Codex agents with a real-time web dashboard",
6
6
  "workspaces": [