crewly 1.20.298 → 1.20.300
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/config/skills/orchestrator/drive-logs/SKILL.md +42 -0
- package/config/skills/orchestrator/drive-logs/execute.sh +37 -0
- package/dist/backend/backend/src/constants.d.ts +9 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +9 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/drive-logs/drive-logs.controller.d.ts +31 -0
- package/dist/backend/backend/src/controllers/drive-logs/drive-logs.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/drive-logs/drive-logs.controller.js +58 -0
- package/dist/backend/backend/src/controllers/drive-logs/drive-logs.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.js +2 -1
- package/dist/backend/backend/src/controllers/messaging/messenger.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +7 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +3 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/briefing/briefing.service.d.ts +15 -0
- package/dist/backend/backend/src/services/briefing/briefing.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/briefing/briefing.service.js +6 -0
- package/dist/backend/backend/src/services/briefing/briefing.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts +2 -19
- package/dist/backend/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js +14 -10
- package/dist/backend/backend/src/services/cloud/cloud-client.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-config-file.d.ts +84 -0
- package/dist/backend/backend/src/services/cloud/cloud-config-file.d.ts.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-config-file.js +86 -0
- package/dist/backend/backend/src/services/cloud/cloud-config-file.js.map +1 -0
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts +5 -0
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js +9 -3
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts +5 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js +17 -3
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +2 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/device-identity.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/device-identity.service.js +3 -2
- package/dist/backend/backend/src/services/cloud/device-identity.service.js.map +1 -1
- package/dist/backend/backend/src/services/core/api-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/api-token.service.js +2 -3
- package/dist/backend/backend/src/services/core/api-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts +10 -1
- package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-agent.service.js +25 -3
- package/dist/backend/backend/src/services/drive/drive-agent.service.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.d.ts +5 -1
- package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.d.ts.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.js +8 -2
- package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-briefing.contract.d.ts +32 -0
- package/dist/backend/backend/src/services/drive/drive-briefing.contract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-briefing.wiring.d.ts +3 -0
- package/dist/backend/backend/src/services/drive/drive-briefing.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-briefing.wiring.js +2 -1
- package/dist/backend/backend/src/services/drive/drive-briefing.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts +1 -1
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.js +1 -1
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-log.store.d.ts +81 -0
- package/dist/backend/backend/src/services/drive/drive-log.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-log.store.js +140 -0
- package/dist/backend/backend/src/services/drive/drive-log.store.js.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-org-overview.d.ts +45 -0
- package/dist/backend/backend/src/services/drive/drive-org-overview.d.ts.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-org-overview.js +102 -0
- package/dist/backend/backend/src/services/drive/drive-org-overview.js.map +1 -0
- package/dist/backend/backend/src/utils/file-io.utils.d.ts +66 -5
- package/dist/backend/backend/src/utils/file-io.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/utils/file-io.utils.js +169 -15
- package/dist/backend/backend/src/utils/file-io.utils.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +9 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +9 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts +2 -19
- package/dist/cli/backend/src/services/cloud/cloud-client.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-client.service.js +14 -10
- package/dist/cli/backend/src/services/cloud/cloud-client.service.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-config-file.d.ts +84 -0
- package/dist/cli/backend/src/services/cloud/cloud-config-file.d.ts.map +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-config-file.js +86 -0
- package/dist/cli/backend/src/services/cloud/cloud-config-file.js.map +1 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.js +2 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/device-identity.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/device-identity.service.js +3 -2
- package/dist/cli/backend/src/services/cloud/device-identity.service.js.map +1 -1
- package/dist/cli/backend/src/services/core/api-token.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/api-token.service.js +2 -3
- package/dist/cli/backend/src/services/core/api-token.service.js.map +1 -1
- package/dist/cli/backend/src/utils/file-io.utils.d.ts +66 -5
- package/dist/cli/backend/src/utils/file-io.utils.d.ts.map +1 -1
- package/dist/cli/backend/src/utils/file-io.utils.js +169 -15
- package/dist/cli/backend/src/utils/file-io.utils.js.map +1 -1
- package/dist/cli/cli/src/commands/cloud.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/cloud.js +10 -28
- package/dist/cli/cli/src/commands/cloud.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drive-briefing.wiring.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-briefing.wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"drive-briefing.wiring.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-briefing.wiring.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export type DriveTargetKind = 'agent' | 'team' | 'channel';
|
|
|
23
23
|
export interface DriveRelayData {
|
|
24
24
|
v: 1;
|
|
25
25
|
kind: 'drive';
|
|
26
|
-
op: 'deliver' | 'end' | 'recall' | 'warm' | 'refresh';
|
|
26
|
+
op: 'deliver' | 'end' | 'recall' | 'warm' | 'refresh' | 'log';
|
|
27
27
|
sessionId: string;
|
|
28
28
|
id?: string;
|
|
29
29
|
instanceId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drive-cloud.contract.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-cloud.contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,kCAAkC;AAClC,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAE3D,yBAAyB;AACzB,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"drive-cloud.contract.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-cloud.contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,kCAAkC;AAClC,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAE3D,yBAAyB;AACzB,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE;QAAE,IAAI,EAAE,eAAe,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAClI,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAwB;AACxB,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,sDAAsD;IACtD,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAU3E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CA0B3E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAUrE"}
|
|
@@ -33,7 +33,7 @@ export function parseDriveRelayData(payload) {
|
|
|
33
33
|
const op = p['op'];
|
|
34
34
|
const sessionId = str(p['sessionId']);
|
|
35
35
|
const instanceId = str(p['instanceId']);
|
|
36
|
-
if ((op !== 'deliver' && op !== 'end' && op !== 'recall' && op !== 'warm' && op !== 'refresh') || !sessionId || !DRIVE_CONSTANTS.SESSION_ID_PATTERN.test(sessionId) || !instanceId)
|
|
36
|
+
if ((op !== 'deliver' && op !== 'end' && op !== 'recall' && op !== 'warm' && op !== 'refresh' && op !== 'log') || !sessionId || !DRIVE_CONSTANTS.SESSION_ID_PATTERN.test(sessionId) || !instanceId)
|
|
37
37
|
return null;
|
|
38
38
|
const id = str(p['id']);
|
|
39
39
|
if ((op === 'deliver' || op === 'recall' || op === 'refresh') && !id)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drive-cloud.contract.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-cloud.contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAyCrD,MAAM,GAAG,GAAG,CAAC,CAAU,EAAkC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtJ,MAAM,GAAG,GAAG,CAAC,CAAU,EAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE1F;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,SAAS,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"drive-cloud.contract.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-cloud.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drive mode session logs on this machine (specs/2026-10-09-drive-mode-v3.md §10).
|
|
3
|
+
*
|
|
4
|
+
* Crewly Cloud keeps every Drive session's log for 30 days and pushes a copy
|
|
5
|
+
* here (`op:'log'`), so a local Claude Code session can read what was said,
|
|
6
|
+
* what was presented, what the owner decided and what went wrong:
|
|
7
|
+
*
|
|
8
|
+
* ~/.crewly/drive-logs/<YYYY-MM-DD>-<sessionId>.md for people and agents
|
|
9
|
+
* ~/.crewly/drive-logs/<YYYY-MM-DD>-<sessionId>.jsonl one JSON object per event
|
|
10
|
+
*
|
|
11
|
+
* Files older than {@link DRIVE_CONSTANTS.LOG_KEEP_MS} are deleted when a new
|
|
12
|
+
* one is saved. Names are validated: nothing outside the directory is ever
|
|
13
|
+
* read or written.
|
|
14
|
+
*
|
|
15
|
+
* @module services/drive/drive-log.store
|
|
16
|
+
*/
|
|
17
|
+
/** `2026-10-11-drv_abc123` */
|
|
18
|
+
export declare const DRIVE_LOG_BASE_PATTERN: RegExp;
|
|
19
|
+
/** One log in the list. */
|
|
20
|
+
export interface DriveLogEntry {
|
|
21
|
+
/** File base name: `<date>-<sessionId>` */
|
|
22
|
+
id: string;
|
|
23
|
+
date: string;
|
|
24
|
+
sessionId: string;
|
|
25
|
+
/** ISO time the file was written */
|
|
26
|
+
savedAt: string;
|
|
27
|
+
bytes: number;
|
|
28
|
+
/** First lines of the markdown: decisions and hiccups counts */
|
|
29
|
+
summary?: string;
|
|
30
|
+
}
|
|
31
|
+
/** Reads and writes the log files. */
|
|
32
|
+
export declare class DriveLogStore {
|
|
33
|
+
private readonly dir;
|
|
34
|
+
private readonly now;
|
|
35
|
+
/**
|
|
36
|
+
* @param dir - Directory (default `~/.crewly/drive-logs`)
|
|
37
|
+
* @param now - Clock (ms; tests)
|
|
38
|
+
*/
|
|
39
|
+
constructor(dir?: string, now?: () => number);
|
|
40
|
+
/**
|
|
41
|
+
* Save a log (both renderings), replacing an earlier copy, and prune old ones.
|
|
42
|
+
*
|
|
43
|
+
* @param base - `<date>-<sessionId>`
|
|
44
|
+
* @param markdown - Markdown rendering
|
|
45
|
+
* @param jsonl - JSON lines rendering
|
|
46
|
+
* @returns Where the markdown file is
|
|
47
|
+
* @throws Error for a bad name or an oversized log
|
|
48
|
+
*/
|
|
49
|
+
save(base: string, markdown: string, jsonl: string): Promise<string>;
|
|
50
|
+
/**
|
|
51
|
+
* Recent logs, newest first.
|
|
52
|
+
*
|
|
53
|
+
* @param limit - How many (default {@link DRIVE_CONSTANTS.LOG_LIST_DEFAULT})
|
|
54
|
+
* @returns Entries
|
|
55
|
+
*/
|
|
56
|
+
list(limit?: number): Promise<DriveLogEntry[]>;
|
|
57
|
+
/**
|
|
58
|
+
* One log.
|
|
59
|
+
*
|
|
60
|
+
* @param id - File base name (or just the session id)
|
|
61
|
+
* @param format - `md` (default) or `jsonl`
|
|
62
|
+
* @returns File content, or null when there is none
|
|
63
|
+
*/
|
|
64
|
+
read(id: string, format?: 'md' | 'jsonl'): Promise<string | null>;
|
|
65
|
+
/** The file base for an id or a bare session id; null when unknown or malformed. */
|
|
66
|
+
private resolve;
|
|
67
|
+
private prune;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The process-wide store.
|
|
71
|
+
*
|
|
72
|
+
* @returns Store
|
|
73
|
+
*/
|
|
74
|
+
export declare function getDriveLogStore(): DriveLogStore;
|
|
75
|
+
/**
|
|
76
|
+
* Replace the store (tests).
|
|
77
|
+
*
|
|
78
|
+
* @param store - Store or null
|
|
79
|
+
*/
|
|
80
|
+
export declare function setDriveLogStore(store: DriveLogStore | null): void;
|
|
81
|
+
//# sourceMappingURL=drive-log.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-log.store.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-log.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,8BAA8B;AAC9B,eAAO,MAAM,sBAAsB,QAAgD,CAAC;AAEpF,2BAA2B;AAC3B,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sCAAsC;AACtC,qBAAa,aAAa;IAMtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IANtB;;;OAGG;gBAEgB,GAAG,GAAE,MAAsD,EAC3D,GAAG,GAAE,MAAM,MAAiB;IAG/C;;;;;;;;OAQG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1E;;;;;OAKG;IACG,IAAI,CAAC,KAAK,GAAE,MAA2B,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA4BxE;;;;;;OAMG;IACG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,GAAG,OAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAM7E,oFAAoF;YACtE,OAAO;YAMP,KAAK;CAQpB;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAElE"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drive mode session logs on this machine (specs/2026-10-09-drive-mode-v3.md §10).
|
|
3
|
+
*
|
|
4
|
+
* Crewly Cloud keeps every Drive session's log for 30 days and pushes a copy
|
|
5
|
+
* here (`op:'log'`), so a local Claude Code session can read what was said,
|
|
6
|
+
* what was presented, what the owner decided and what went wrong:
|
|
7
|
+
*
|
|
8
|
+
* ~/.crewly/drive-logs/<YYYY-MM-DD>-<sessionId>.md for people and agents
|
|
9
|
+
* ~/.crewly/drive-logs/<YYYY-MM-DD>-<sessionId>.jsonl one JSON object per event
|
|
10
|
+
*
|
|
11
|
+
* Files older than {@link DRIVE_CONSTANTS.LOG_KEEP_MS} are deleted when a new
|
|
12
|
+
* one is saved. Names are validated: nothing outside the directory is ever
|
|
13
|
+
* read or written.
|
|
14
|
+
*
|
|
15
|
+
* @module services/drive/drive-log.store
|
|
16
|
+
*/
|
|
17
|
+
import { mkdir, readdir, readFile, stat, unlink, writeFile } from 'fs/promises';
|
|
18
|
+
import * as path from 'path';
|
|
19
|
+
import { DRIVE_CONSTANTS as C } from '../../constants.js';
|
|
20
|
+
import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
|
|
21
|
+
/** `2026-10-11-drv_abc123` */
|
|
22
|
+
export const DRIVE_LOG_BASE_PATTERN = /^\d{4}-\d{2}-\d{2}-drv_[A-Za-z0-9_-]{8,64}$/;
|
|
23
|
+
/** Reads and writes the log files. */
|
|
24
|
+
export class DriveLogStore {
|
|
25
|
+
dir;
|
|
26
|
+
now;
|
|
27
|
+
/**
|
|
28
|
+
* @param dir - Directory (default `~/.crewly/drive-logs`)
|
|
29
|
+
* @param now - Clock (ms; tests)
|
|
30
|
+
*/
|
|
31
|
+
constructor(dir = path.join(getCrewlyHomePath(), C.LOG_DIRNAME), now = Date.now) {
|
|
32
|
+
this.dir = dir;
|
|
33
|
+
this.now = now;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Save a log (both renderings), replacing an earlier copy, and prune old ones.
|
|
37
|
+
*
|
|
38
|
+
* @param base - `<date>-<sessionId>`
|
|
39
|
+
* @param markdown - Markdown rendering
|
|
40
|
+
* @param jsonl - JSON lines rendering
|
|
41
|
+
* @returns Where the markdown file is
|
|
42
|
+
* @throws Error for a bad name or an oversized log
|
|
43
|
+
*/
|
|
44
|
+
async save(base, markdown, jsonl) {
|
|
45
|
+
if (!DRIVE_LOG_BASE_PATTERN.test(base))
|
|
46
|
+
throw new Error('Bad Drive log name.');
|
|
47
|
+
if (Buffer.byteLength(markdown) > C.LOG_MAX_BYTES || Buffer.byteLength(jsonl) > C.LOG_MAX_BYTES)
|
|
48
|
+
throw new Error('Drive log too large.');
|
|
49
|
+
await mkdir(this.dir, { recursive: true, mode: 0o700 });
|
|
50
|
+
const md = path.join(this.dir, `${base}.md`);
|
|
51
|
+
await writeFile(md, markdown, { mode: 0o600 });
|
|
52
|
+
await writeFile(path.join(this.dir, `${base}.jsonl`), jsonl, { mode: 0o600 });
|
|
53
|
+
await this.prune().catch(() => undefined);
|
|
54
|
+
return md;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Recent logs, newest first.
|
|
58
|
+
*
|
|
59
|
+
* @param limit - How many (default {@link DRIVE_CONSTANTS.LOG_LIST_DEFAULT})
|
|
60
|
+
* @returns Entries
|
|
61
|
+
*/
|
|
62
|
+
async list(limit = C.LOG_LIST_DEFAULT) {
|
|
63
|
+
let names;
|
|
64
|
+
try {
|
|
65
|
+
names = await readdir(this.dir);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
const bases = names.filter((n) => n.endsWith('.md') && DRIVE_LOG_BASE_PATTERN.test(n.slice(0, -3))).map((n) => n.slice(0, -3)).sort().reverse();
|
|
71
|
+
const out = [];
|
|
72
|
+
for (const id of bases.slice(0, Math.min(Math.max(1, limit), C.LOG_LIST_MAX))) {
|
|
73
|
+
const file = path.join(this.dir, `${id}.md`);
|
|
74
|
+
const st = await stat(file).catch(() => null);
|
|
75
|
+
if (!st)
|
|
76
|
+
continue;
|
|
77
|
+
const head = (await readFile(file, 'utf8').catch(() => '')).slice(0, 4000);
|
|
78
|
+
const decisions = (/## Decisions\n\n([\s\S]*?)\n\n/.exec(head)?.[1] ?? '').split('\n').filter(Boolean).length;
|
|
79
|
+
const hiccups = /^## Hiccups/m.test(head);
|
|
80
|
+
out.push({
|
|
81
|
+
id,
|
|
82
|
+
date: id.slice(0, 10),
|
|
83
|
+
sessionId: id.slice(11),
|
|
84
|
+
savedAt: new Date(st.mtimeMs).toISOString(),
|
|
85
|
+
bytes: st.size,
|
|
86
|
+
...(decisions || hiccups ? { summary: `${decisions} decision(s)${hiccups ? ', has hiccups' : ''}` } : {}),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* One log.
|
|
93
|
+
*
|
|
94
|
+
* @param id - File base name (or just the session id)
|
|
95
|
+
* @param format - `md` (default) or `jsonl`
|
|
96
|
+
* @returns File content, or null when there is none
|
|
97
|
+
*/
|
|
98
|
+
async read(id, format = 'md') {
|
|
99
|
+
const base = await this.resolve(id);
|
|
100
|
+
if (!base)
|
|
101
|
+
return null;
|
|
102
|
+
return readFile(path.join(this.dir, `${base}.${format}`), 'utf8').catch(() => null);
|
|
103
|
+
}
|
|
104
|
+
/** The file base for an id or a bare session id; null when unknown or malformed. */
|
|
105
|
+
async resolve(id) {
|
|
106
|
+
if (DRIVE_LOG_BASE_PATTERN.test(id))
|
|
107
|
+
return id;
|
|
108
|
+
if (!/^drv_[A-Za-z0-9_-]{8,64}$/.test(id))
|
|
109
|
+
return null;
|
|
110
|
+
return (await this.list(C.LOG_LIST_MAX)).find((e) => e.sessionId === id)?.id ?? null;
|
|
111
|
+
}
|
|
112
|
+
async prune() {
|
|
113
|
+
for (const name of await readdir(this.dir)) {
|
|
114
|
+
if (!/\.(md|jsonl)$/.test(name))
|
|
115
|
+
continue;
|
|
116
|
+
const file = path.join(this.dir, name);
|
|
117
|
+
const st = await stat(file).catch(() => null);
|
|
118
|
+
if (st && this.now() - st.mtimeMs > C.LOG_KEEP_MS)
|
|
119
|
+
await unlink(file).catch(() => undefined);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
let instance = null;
|
|
124
|
+
/**
|
|
125
|
+
* The process-wide store.
|
|
126
|
+
*
|
|
127
|
+
* @returns Store
|
|
128
|
+
*/
|
|
129
|
+
export function getDriveLogStore() {
|
|
130
|
+
return (instance ??= new DriveLogStore());
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Replace the store (tests).
|
|
134
|
+
*
|
|
135
|
+
* @param store - Store or null
|
|
136
|
+
*/
|
|
137
|
+
export function setDriveLogStore(store) {
|
|
138
|
+
instance = store;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=drive-log.store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-log.store.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-log.store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The high-level overview of the organisation for Drive mode
|
|
3
|
+
* (specs/2026-10-09-drive-mode-v3.md §9): for an owner who keeps every team
|
|
4
|
+
* in his head and forgets which ones are working.
|
|
5
|
+
*
|
|
6
|
+
* Built from the harness's own records, no LLM: the team roster (charter,
|
|
7
|
+
* paused, work finished and open with harness chores filtered out; #1221),
|
|
8
|
+
* the snapshot's team counts, items and the owner's waiting items
|
|
9
|
+
* (decisions, questions, reviews). Per team: what it is for, whether it was
|
|
10
|
+
* active in the last 24 hours, what it finished and is on, what is blocked,
|
|
11
|
+
* and what waits on the owner. Cloud turns it into a 25-second spoken
|
|
12
|
+
* overview ("and 5 more teams were quiet").
|
|
13
|
+
*
|
|
14
|
+
* Pure.
|
|
15
|
+
*
|
|
16
|
+
* @module services/drive/drive-org-overview
|
|
17
|
+
*/
|
|
18
|
+
import type { RosterTeam } from '../team-roster/team-roster.builder.js';
|
|
19
|
+
import type { BriefingAgent, BriefingItem, BriefingOrg, BriefingTeam, BriefingWaiting } from './drive-briefing.contract.js';
|
|
20
|
+
/** What the overview is built from. */
|
|
21
|
+
export interface OrgOverviewInput {
|
|
22
|
+
teams: readonly BriefingTeam[];
|
|
23
|
+
agents: readonly BriefingAgent[];
|
|
24
|
+
items: readonly BriefingItem[];
|
|
25
|
+
waiting: readonly BriefingWaiting[];
|
|
26
|
+
/** The team roster, when it could be read (otherwise the snapshot's own items stand in) */
|
|
27
|
+
roster?: readonly RosterTeam[] | null;
|
|
28
|
+
now: Date;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build the overview.
|
|
32
|
+
*
|
|
33
|
+
* @param input - Snapshot parts, roster, clock
|
|
34
|
+
* @returns Teams (busiest first) and agent counts
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildOrgOverview(input: OrgOverviewInput): BriefingOrg;
|
|
37
|
+
/**
|
|
38
|
+
* Make the overview smaller (the snapshot is over its size cap): first the
|
|
39
|
+
* titles of what finished and what is in progress, then the purposes.
|
|
40
|
+
*
|
|
41
|
+
* @param org - Overview (mutated)
|
|
42
|
+
* @returns Whether something was dropped
|
|
43
|
+
*/
|
|
44
|
+
export declare function trimOrg(org: BriefingOrg): boolean;
|
|
45
|
+
//# sourceMappingURL=drive-org-overview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-org-overview.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-org-overview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAExE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAmB,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAS7I,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IACjC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAC/B,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,2FAA2F;IAC3F,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAAC;IACtC,GAAG,EAAE,IAAI,CAAC;CACX;AASD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW,CA2CrE;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAajD"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The high-level overview of the organisation for Drive mode
|
|
3
|
+
* (specs/2026-10-09-drive-mode-v3.md §9): for an owner who keeps every team
|
|
4
|
+
* in his head and forgets which ones are working.
|
|
5
|
+
*
|
|
6
|
+
* Built from the harness's own records, no LLM: the team roster (charter,
|
|
7
|
+
* paused, work finished and open with harness chores filtered out; #1221),
|
|
8
|
+
* the snapshot's team counts, items and the owner's waiting items
|
|
9
|
+
* (decisions, questions, reviews). Per team: what it is for, whether it was
|
|
10
|
+
* active in the last 24 hours, what it finished and is on, what is blocked,
|
|
11
|
+
* and what waits on the owner. Cloud turns it into a 25-second spoken
|
|
12
|
+
* overview ("and 5 more teams were quiet").
|
|
13
|
+
*
|
|
14
|
+
* Pure.
|
|
15
|
+
*
|
|
16
|
+
* @module services/drive/drive-org-overview
|
|
17
|
+
*/
|
|
18
|
+
import { DRIVE_BRIEFING_CONSTANTS } from '../../constants.js';
|
|
19
|
+
import { safeText } from './drive-briefing-snapshot.js';
|
|
20
|
+
const C = DRIVE_BRIEFING_CONSTANTS;
|
|
21
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
22
|
+
/** Longest purpose (characters) */
|
|
23
|
+
const PURPOSE_MAX = 100;
|
|
24
|
+
const DOING = new Set(['in_progress', 'running', 'accepted']);
|
|
25
|
+
const BLOCKED = new Set(['blocked', 'escalated']);
|
|
26
|
+
/** First sentence of a charter, safe to speak. */
|
|
27
|
+
function purposeOf(r) {
|
|
28
|
+
if (!r || r.charterSource === 'derived')
|
|
29
|
+
return undefined;
|
|
30
|
+
const first = r.charter.split(/(?<=[.!?。!?])\s+/)[0] ?? '';
|
|
31
|
+
return safeText(first, PURPOSE_MAX) || undefined;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build the overview.
|
|
35
|
+
*
|
|
36
|
+
* @param input - Snapshot parts, roster, clock
|
|
37
|
+
* @returns Teams (busiest first) and agent counts
|
|
38
|
+
*/
|
|
39
|
+
export function buildOrgOverview(input) {
|
|
40
|
+
const nowMs = input.now.getTime();
|
|
41
|
+
const recent = (iso) => !!iso && nowMs - Date.parse(iso) < DAY_MS;
|
|
42
|
+
const rosterOf = new Map((input.roster ?? []).map((r) => [r.name.toLowerCase(), r]));
|
|
43
|
+
const teams = input.teams.slice(0, C.MAX_TEAMS).map((t) => {
|
|
44
|
+
const r = rosterOf.get(t.name.toLowerCase());
|
|
45
|
+
const mine = input.items.filter((i) => i.team === t.name);
|
|
46
|
+
// With a roster the harness chores (verify, retries, watchers) are already out of the lists.
|
|
47
|
+
const done = r ? r.recentDone.filter((w) => recent(w.at)).map((w) => w.title) : mine.filter((i) => i.status === 'done' && recent(i.updatedAt)).map((i) => i.title);
|
|
48
|
+
const doing = r ? r.open.filter((w) => DOING.has(w.status)).map((w) => w.title) : mine.filter((i) => i.status === 'in_progress').map((i) => i.title);
|
|
49
|
+
const blocked = Math.max(t.blocked, r ? r.open.filter((w) => BLOCKED.has(w.status)).length : 0);
|
|
50
|
+
const needsYou = input.waiting.filter((w) => w.team === t.name).length;
|
|
51
|
+
const doneRecent = r ? done.length : Math.max(t.doneToday, done.length);
|
|
52
|
+
const lastMs = [...mine.map((i) => Date.parse(i.updatedAt)), ...(r ? [...r.recentDone, ...r.open].map((w) => Date.parse(w.at)) : [])].filter(Number.isFinite).sort((a, b) => b - a)[0];
|
|
53
|
+
const active = doneRecent > 0 || doing.length > 0 || recent(lastMs ? new Date(lastMs).toISOString() : undefined);
|
|
54
|
+
const state = r?.paused ? 'paused' : needsYou > 0 ? 'needs_you' : blocked > 0 ? 'blocked' : active ? 'active' : 'quiet';
|
|
55
|
+
const purpose = purposeOf(r);
|
|
56
|
+
const titles = (xs) => xs.slice(0, 2).map((x) => safeText(x, C.TITLE_MAX)).filter(Boolean);
|
|
57
|
+
return {
|
|
58
|
+
name: safeText(t.name, C.NAME_MAX),
|
|
59
|
+
...(purpose ? { purpose } : {}),
|
|
60
|
+
members: t.agents.length,
|
|
61
|
+
state,
|
|
62
|
+
doneRecent,
|
|
63
|
+
...(done.length ? { done: titles(done) } : {}),
|
|
64
|
+
...(doing.length ? { doing: titles(doing) } : {}),
|
|
65
|
+
blocked,
|
|
66
|
+
needsYou,
|
|
67
|
+
...(lastMs ? { lastActivityAt: new Date(lastMs).toISOString() } : {}),
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
const members = input.agents.filter((a) => a.team);
|
|
71
|
+
return {
|
|
72
|
+
teams,
|
|
73
|
+
agents: {
|
|
74
|
+
total: members.length,
|
|
75
|
+
working: members.filter((a) => a.state === 'working').length,
|
|
76
|
+
idle: members.filter((a) => a.state === 'idle' || a.state === 'starting').length,
|
|
77
|
+
stopped: members.filter((a) => a.state === 'stopped').length,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Make the overview smaller (the snapshot is over its size cap): first the
|
|
83
|
+
* titles of what finished and what is in progress, then the purposes.
|
|
84
|
+
*
|
|
85
|
+
* @param org - Overview (mutated)
|
|
86
|
+
* @returns Whether something was dropped
|
|
87
|
+
*/
|
|
88
|
+
export function trimOrg(org) {
|
|
89
|
+
const withTitles = org.teams.find((t) => t.done || t.doing);
|
|
90
|
+
if (withTitles) {
|
|
91
|
+
delete withTitles.done;
|
|
92
|
+
delete withTitles.doing;
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
const withPurpose = org.teams.find((t) => t.purpose);
|
|
96
|
+
if (withPurpose) {
|
|
97
|
+
delete withPurpose.purpose;
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=drive-org-overview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-org-overview.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-org-overview.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,11 +70,19 @@ export declare function withFileLock<T>(lockKey: string, operation: () => Promis
|
|
|
70
70
|
* @returns The result of the operation
|
|
71
71
|
*/
|
|
72
72
|
export declare function withOperationLock<T>(lockKey: string, operation: () => Promise<T>): Promise<T>;
|
|
73
|
+
/** Options for the atomic writers. */
|
|
74
|
+
export interface AtomicWriteOptions {
|
|
75
|
+
/** File mode for the new file (e.g. `0o600` for credentials). Default: the process umask. */
|
|
76
|
+
mode?: number;
|
|
77
|
+
}
|
|
73
78
|
/**
|
|
74
|
-
* Write a string to a file atomically (temp file
|
|
79
|
+
* Write a string to a file atomically (temp file in the same directory →
|
|
80
|
+
* fsync → rename).
|
|
75
81
|
*
|
|
76
82
|
* Acquires a per-path file lock so concurrent callers targeting the
|
|
77
|
-
* same path are serialized.
|
|
83
|
+
* same path are serialized. Readers (and a crash at any point) see either
|
|
84
|
+
* the old file or the new one, never a mix; a shorter write can never leave
|
|
85
|
+
* the tail of a longer one behind.
|
|
78
86
|
*
|
|
79
87
|
* **Precondition:** The parent directory must already exist. This function
|
|
80
88
|
* does not create intermediate directories — use {@link ensureDir} first
|
|
@@ -82,15 +90,17 @@ export declare function withOperationLock<T>(lockKey: string, operation: () => P
|
|
|
82
90
|
*
|
|
83
91
|
* @param filePath - Destination file path
|
|
84
92
|
* @param content - String content to write
|
|
93
|
+
* @param options - Optional file mode
|
|
85
94
|
*/
|
|
86
|
-
export declare function atomicWriteFile(filePath: string, content: string): Promise<void>;
|
|
95
|
+
export declare function atomicWriteFile(filePath: string, content: string, options?: AtomicWriteOptions): Promise<void>;
|
|
87
96
|
/**
|
|
88
97
|
* Serialize a JavaScript value to JSON and write it atomically.
|
|
89
98
|
*
|
|
90
99
|
* @param filePath - Destination file path
|
|
91
100
|
* @param data - Value to serialize (via `JSON.stringify`)
|
|
101
|
+
* @param options - Optional file mode
|
|
92
102
|
*/
|
|
93
|
-
export declare function atomicWriteJson<T>(filePath: string, data: T): Promise<void>;
|
|
103
|
+
export declare function atomicWriteJson<T>(filePath: string, data: T, options?: AtomicWriteOptions): Promise<void>;
|
|
94
104
|
/**
|
|
95
105
|
* Synchronous {@link atomicWriteFile} for stores that persist synchronously
|
|
96
106
|
* (temp file in the same directory → fsync → rename).
|
|
@@ -103,8 +113,9 @@ export declare function atomicWriteJson<T>(filePath: string, data: T): Promise<v
|
|
|
103
113
|
*
|
|
104
114
|
* @param filePath - Destination file path
|
|
105
115
|
* @param content - String content to write
|
|
116
|
+
* @param options - Optional file mode
|
|
106
117
|
*/
|
|
107
|
-
export declare function atomicWriteFileSync(filePath: string, content: string): void;
|
|
118
|
+
export declare function atomicWriteFileSync(filePath: string, content: string, options?: AtomicWriteOptions): void;
|
|
108
119
|
/**
|
|
109
120
|
* Where a bad store file is copied: `<file>.corrupt-<ISO timestamp>`
|
|
110
121
|
* (colons and dots replaced so the name is valid everywhere).
|
|
@@ -172,6 +183,56 @@ export declare function readJsonStoreSync<T>(filePath: string, options?: {
|
|
|
172
183
|
validate?: (data: unknown) => string | null;
|
|
173
184
|
logger?: FileIOLogger;
|
|
174
185
|
}): JsonStoreRead<T>;
|
|
186
|
+
/**
|
|
187
|
+
* Decode the first JSON object at the start of `raw` and ignore whatever
|
|
188
|
+
* follows (Python's `json.JSONDecoder.raw_decode`). Recovers a file that holds
|
|
189
|
+
* a valid object followed by the tail of an older, longer write.
|
|
190
|
+
*
|
|
191
|
+
* @param raw - File text
|
|
192
|
+
* @returns The first object and the number of trailing non-whitespace bytes, or null when `raw` does not start with a complete JSON object
|
|
193
|
+
*/
|
|
194
|
+
export declare function decodeFirstJsonObject(raw: string): {
|
|
195
|
+
value: Record<string, unknown>;
|
|
196
|
+
trailingChars: number;
|
|
197
|
+
} | null;
|
|
198
|
+
/** Result of {@link readJsonObjectWithRepairSync}. */
|
|
199
|
+
export type JsonRepairRead<T> = {
|
|
200
|
+
status: 'missing';
|
|
201
|
+
} | {
|
|
202
|
+
status: 'ok';
|
|
203
|
+
data: T;
|
|
204
|
+
repaired: boolean;
|
|
205
|
+
} | {
|
|
206
|
+
status: 'damaged';
|
|
207
|
+
reason: string;
|
|
208
|
+
quarantinedTo: string | null;
|
|
209
|
+
};
|
|
210
|
+
/**
|
|
211
|
+
* Read a JSON object file that holds credentials or other state that must not
|
|
212
|
+
* be silently dropped.
|
|
213
|
+
*
|
|
214
|
+
* - missing → `missing`;
|
|
215
|
+
* - parses and passes `validate` → `ok`;
|
|
216
|
+
* - does not parse, but starts with a complete object that passes `validate`
|
|
217
|
+
* (stale trailing bytes) → the file is rewritten atomically with just that
|
|
218
|
+
* object, a WARN is logged, `ok` with `repaired: true`;
|
|
219
|
+
* - anything else → a copy is kept at `<file>.corrupt-<ts>` and `damaged` is
|
|
220
|
+
* returned (the original is left in place; the next atomic write replaces it).
|
|
221
|
+
* The copy is made once per distinct damaged file content, not on every read.
|
|
222
|
+
*
|
|
223
|
+
* Other read errors (EACCES, EIO…) are rethrown: the file may be fine.
|
|
224
|
+
*
|
|
225
|
+
* @param filePath - File to read
|
|
226
|
+
* @param options.validate - Shape check; return an error text to reject
|
|
227
|
+
* @param options.logger - Optional logger
|
|
228
|
+
* @param options.mode - Mode for the repaired file
|
|
229
|
+
* @returns What was found
|
|
230
|
+
*/
|
|
231
|
+
export declare function readJsonObjectWithRepairSync<T>(filePath: string, options: {
|
|
232
|
+
validate: (data: unknown) => string | null;
|
|
233
|
+
logger?: FileIOLogger;
|
|
234
|
+
mode?: number;
|
|
235
|
+
}): JsonRepairRead<T>;
|
|
175
236
|
/**
|
|
176
237
|
* Read and parse a JSON file safely.
|
|
177
238
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-io.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/file-io.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"file-io.utils.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/file-io.utils.ts"],"names":[],"mappings":"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"}
|