crewly 1.20.295 → 1.20.297
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/_common/lib.sh +6 -0
- package/config/skills/agent/core/app-data/SKILL.md +13 -1
- package/config/skills/agent/core/app-data/execute.sh +60 -6
- package/config/skills/agent/core/app-data/execute.test.sh +42 -0
- package/config/skills/agent/core/complete-task/SKILL.md +4 -2
- package/config/skills/agent/core/complete-task/execute.sh +7 -0
- package/config/skills/agent/core/complete-task/explicit-id.test.sh +56 -0
- package/config/skills/agent/core/docs-comment/SKILL.md +49 -4
- package/config/skills/agent/core/docs-comment/execute.sh +38 -2
- package/config/skills/agent/core/docs-comment/execute.test.sh +28 -0
- package/config/skills/agent/core/poll-tasks/execute.sh +13 -1
- package/config/skills/agent/core/poll-tasks/execute.test.sh +37 -0
- package/config/skills/team-leader/delegate-task/execute.sh +13 -2
- package/config/skills/team-leader/verify-output/SKILL.md +9 -0
- package/dist/backend/backend/src/constants.d.ts +39 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +39 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/apps/apps.controller.d.ts +2 -0
- package/dist/backend/backend/src/controllers/apps/apps.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/apps/apps.controller.js +2 -0
- package/dist/backend/backend/src/controllers/apps/apps.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/apps/apps.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/apps/apps.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/apps/apps.routes.js +3 -1
- package/dist/backend/backend/src/controllers/apps/apps.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +20 -0
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.js +52 -9
- package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts +31 -0
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.js +198 -5
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.d.ts +4 -0
- package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js +9 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +28 -8
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +28 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +35 -5
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +4 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/apps/app-wake-message.d.ts +33 -0
- package/dist/backend/backend/src/services/apps/app-wake-message.d.ts.map +1 -1
- package/dist/backend/backend/src/services/apps/app-wake-message.js +48 -0
- package/dist/backend/backend/src/services/apps/app-wake-message.js.map +1 -1
- package/dist/backend/backend/src/services/apps/apps.service.d.ts +23 -0
- package/dist/backend/backend/src/services/apps/apps.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/apps/apps.service.js +57 -6
- package/dist/backend/backend/src/services/apps/apps.service.js.map +1 -1
- package/dist/backend/backend/src/services/google/docs-comment-gate.d.ts +166 -0
- package/dist/backend/backend/src/services/google/docs-comment-gate.d.ts.map +1 -0
- package/dist/backend/backend/src/services/google/docs-comment-gate.js +176 -0
- package/dist/backend/backend/src/services/google/docs-comment-gate.js.map +1 -0
- package/dist/backend/backend/src/services/google/docs-comments.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/docs-comments.service.js +2 -2
- package/dist/backend/backend/src/services/google/docs-comments.service.js.map +1 -1
- package/dist/backend/backend/src/services/google/google-api.client.d.ts +15 -0
- package/dist/backend/backend/src/services/google/google-api.client.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/google-api.client.js +16 -2
- package/dist/backend/backend/src/services/google/google-api.client.js.map +1 -1
- package/dist/backend/backend/src/services/google/google-reauth.wiring.js +1 -1
- package/dist/backend/backend/src/services/google/google-reauth.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +12 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js +18 -0
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +18 -4
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +36 -8
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination-resolver.d.ts +6 -0
- package/dist/backend/backend/src/services/orc/reply-destination-resolver.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination-resolver.js +18 -0
- package/dist/backend/backend/src/services/orc/reply-destination-resolver.js.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts +2 -0
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js +81 -8
- package/dist/backend/backend/src/services/orc/reply-destination.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts +8 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js +22 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket-workflow.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +17 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js +32 -0
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/backend/backend/src/services/slack/orc-owner-dm-target.d.ts +27 -0
- package/dist/backend/backend/src/services/slack/orc-owner-dm-target.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/orc-owner-dm-target.js +48 -0
- package/dist/backend/backend/src/services/slack/orc-owner-dm-target.js.map +1 -0
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.d.ts +18 -0
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.js +9 -3
- package/dist/backend/backend/src/services/task-pool/pool-archive-migration.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-prune.d.ts +76 -0
- package/dist/backend/backend/src/services/task-pool/pool-prune.d.ts.map +1 -0
- package/dist/backend/backend/src/services/task-pool/pool-prune.js +129 -0
- package/dist/backend/backend/src/services/task-pool/pool-prune.js.map +1 -0
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts +9 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/pool-storage.js +34 -3
- package/dist/backend/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/backend/backend/src/services/worktree/runaway-file-watcher.d.ts +131 -0
- package/dist/backend/backend/src/services/worktree/runaway-file-watcher.d.ts.map +1 -0
- package/dist/backend/backend/src/services/worktree/runaway-file-watcher.js +251 -0
- package/dist/backend/backend/src/services/worktree/runaway-file-watcher.js.map +1 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +30 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +82 -0
- package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
- package/dist/backend/backend/src/utils/screen-excerpt.d.ts +34 -0
- package/dist/backend/backend/src/utils/screen-excerpt.d.ts.map +1 -0
- package/dist/backend/backend/src/utils/screen-excerpt.js +56 -0
- package/dist/backend/backend/src/utils/screen-excerpt.js.map +1 -0
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +39 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +39 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +4 -2
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +18 -4
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +36 -8
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts +17 -0
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.js +32 -0
- package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts +9 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/pool-storage.js +34 -3
- package/dist/cli/backend/src/services/task-pool/pool-storage.js.map +1 -1
- package/dist/cli/backend/src/utils/screen-excerpt.d.ts +34 -0
- package/dist/cli/backend/src/utils/screen-excerpt.d.ts.map +1 -0
- package/dist/cli/backend/src/utils/screen-excerpt.js +56 -0
- package/dist/cli/backend/src/utils/screen-excerpt.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The orchestrator's primary owner DM as a file target (#1142).
|
|
3
|
+
*
|
|
4
|
+
* The orchestrator answers the owner in a plain Slack DM (`D…`), mirrored
|
|
5
|
+
* into chat-v2 as `slack-<D…>-<ts>` conversations. That DM belongs to neither
|
|
6
|
+
* the team-channel nor the per-agent-DM service, so `attach-file` found no
|
|
7
|
+
* Slack place for it. Only the orchestrator gets this target, and only a DM.
|
|
8
|
+
*
|
|
9
|
+
* @module services/slack/orc-owner-dm-target
|
|
10
|
+
*/
|
|
11
|
+
import { ORCHESTRATOR_SESSION_NAME } from '../../constants.js';
|
|
12
|
+
import { parseSlackConversationId } from '../orc/orc-delivery-enforcer.service.js';
|
|
13
|
+
import { isSlackDm } from '../orc/orc-reply-route.service.js';
|
|
14
|
+
import { parseSlackThreadKey } from './slack-thread-key.js';
|
|
15
|
+
/**
|
|
16
|
+
* Work out the owner DM (and thread) an attach names.
|
|
17
|
+
*
|
|
18
|
+
* @param agentSession - The calling agent
|
|
19
|
+
* @param named - `--channel` (a Slack DM id or a `slack-D…-<ts>` conversation id) and `--thread` (Slack thread key)
|
|
20
|
+
* @returns The target, or null when the caller is not the orchestrator or nothing names a Slack DM
|
|
21
|
+
*/
|
|
22
|
+
export function orcOwnerDmTarget(agentSession, named) {
|
|
23
|
+
if (agentSession !== ORCHESTRATOR_SESSION_NAME)
|
|
24
|
+
return null;
|
|
25
|
+
const channel = typeof named.channelId === 'string' ? named.channelId.trim() : '';
|
|
26
|
+
const thread = typeof named.threadId === 'string' ? named.threadId.trim() : '';
|
|
27
|
+
const key = parseSlackThreadKey(thread);
|
|
28
|
+
let slackChannelId;
|
|
29
|
+
let threadTs;
|
|
30
|
+
const conv = parseSlackConversationId(channel);
|
|
31
|
+
if (conv) {
|
|
32
|
+
slackChannelId = conv.channelId;
|
|
33
|
+
threadTs = conv.threadTs;
|
|
34
|
+
}
|
|
35
|
+
else if (/^[A-Z0-9]+$/.test(channel) && isSlackDm(channel)) {
|
|
36
|
+
slackChannelId = channel;
|
|
37
|
+
}
|
|
38
|
+
else if (!channel && key) {
|
|
39
|
+
slackChannelId = key.slackChannelId;
|
|
40
|
+
}
|
|
41
|
+
if (!slackChannelId || !isSlackDm(slackChannelId))
|
|
42
|
+
return null;
|
|
43
|
+
// A thread key of the same DM wins over the thread the conversation id carries.
|
|
44
|
+
if (key && key.slackChannelId === slackChannelId)
|
|
45
|
+
threadTs = key.threadTs;
|
|
46
|
+
return { slackChannelId, ...(threadTs ? { threadTs } : {}) };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=orc-owner-dm-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orc-owner-dm-target.js","sourceRoot":"","sources":["../../../../../../backend/src/services/slack/orc-owner-dm-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAQ5D;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAoB,EACpB,KAAkD;IAElD,IAAI,YAAY,KAAK,yBAAyB;QAAE,OAAO,IAAI,CAAC;IAC5D,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/E,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,cAAkC,CAAC;IACvC,IAAI,QAA4B,CAAC;IACjC,MAAM,IAAI,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,IAAI,EAAE,CAAC;QACT,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC3B,CAAC;SAAM,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,cAAc,GAAG,OAAO,CAAC;IAC3B,CAAC;SAAM,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;QAC3B,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IACtC,CAAC;IACD,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,gFAAgF;IAChF,IAAI,GAAG,IAAI,GAAG,CAAC,cAAc,KAAK,cAAc;QAAE,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC1E,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
* @module services/task-pool/pool-archive-migration
|
|
23
23
|
*/
|
|
24
24
|
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
25
|
+
import type { TaskClaim } from '../../types/v2/claim.types.js';
|
|
25
26
|
import type { ComponentLogger } from '../core/logger.service.js';
|
|
26
27
|
/** Why an item was archived. */
|
|
27
28
|
export type ArchiveReason = 'terminal' | 'stale_review';
|
|
@@ -40,10 +41,13 @@ export interface PoolArchiveFile {
|
|
|
40
41
|
archivedAt: string;
|
|
41
42
|
migration: string;
|
|
42
43
|
added: number;
|
|
44
|
+
addedClaims?: number;
|
|
43
45
|
}>;
|
|
44
46
|
workItems: Array<WorkItem & {
|
|
45
47
|
archiveReason?: ArchiveReason;
|
|
46
48
|
}>;
|
|
49
|
+
/** Ended claims moved out by the ongoing prune (absent in older files) */
|
|
50
|
+
claims?: TaskClaim[];
|
|
47
51
|
}
|
|
48
52
|
/** Counts reported (and logged) by a run. */
|
|
49
53
|
export interface PoolArchiveResult {
|
|
@@ -91,6 +95,20 @@ export declare function selectItemsToArchive(items: readonly WorkItem[], now: nu
|
|
|
91
95
|
* @returns `pool-archive-YYYY-MM-DD.json` (UTC date)
|
|
92
96
|
*/
|
|
93
97
|
export declare function archiveFileName(now: Date): string;
|
|
98
|
+
/**
|
|
99
|
+
* Whether a file exists.
|
|
100
|
+
*
|
|
101
|
+
* @param p - Path
|
|
102
|
+
* @returns True when it does
|
|
103
|
+
*/
|
|
104
|
+
export declare function exists(p: string): Promise<boolean>;
|
|
105
|
+
/**
|
|
106
|
+
* Read an existing archive file.
|
|
107
|
+
*
|
|
108
|
+
* @param file - Archive path
|
|
109
|
+
* @returns The parsed archive, or null when it cannot be read as one
|
|
110
|
+
*/
|
|
111
|
+
export declare function readArchive(file: string): Promise<PoolArchiveFile | null>;
|
|
94
112
|
/**
|
|
95
113
|
* Run the one-time archive. Idempotent: returns `skipped` when the marker
|
|
96
114
|
* file is present.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool-archive-migration.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-archive-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,cAAc,CAAC;AAExD,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,UAAU,IAAI,MAAM,CAAC;CACtB;AAED,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,yCAAyC;IACzC,IAAI,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pool-archive-migration.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-archive-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,cAAc,CAAC;AAExD,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,UAAU,IAAI,MAAM,CAAC;CACtB;AAED,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,yCAAyC;IACzC,IAAI,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,SAAS,EAAE,KAAK,CAAC,QAAQ,GAAG;QAAE,aAAa,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IAC/D,0EAA0E;IAC1E,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAcD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAShF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,GAAG,EAAE,MAAM,GACV,KAAK,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC,CAOtD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAEjD;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAa/E;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;CAAO,GAC5E,OAAO,CAAC,iBAAiB,CAAC,CAiE5B"}
|
|
@@ -90,7 +90,7 @@ export function archiveFileName(now) {
|
|
|
90
90
|
* @param p - Path
|
|
91
91
|
* @returns True when it does
|
|
92
92
|
*/
|
|
93
|
-
async function exists(p) {
|
|
93
|
+
export async function exists(p) {
|
|
94
94
|
try {
|
|
95
95
|
await fs.access(p);
|
|
96
96
|
return true;
|
|
@@ -105,12 +105,17 @@ async function exists(p) {
|
|
|
105
105
|
* @param file - Archive path
|
|
106
106
|
* @returns The parsed archive, or null when it cannot be read as one
|
|
107
107
|
*/
|
|
108
|
-
async function readArchive(file) {
|
|
108
|
+
export async function readArchive(file) {
|
|
109
109
|
try {
|
|
110
110
|
const parsed = JSON.parse(await fs.readFile(file, 'utf-8'));
|
|
111
111
|
if (!parsed || !Array.isArray(parsed.workItems))
|
|
112
112
|
return null;
|
|
113
|
-
return {
|
|
113
|
+
return {
|
|
114
|
+
version: 1,
|
|
115
|
+
runs: Array.isArray(parsed.runs) ? parsed.runs : [],
|
|
116
|
+
workItems: parsed.workItems,
|
|
117
|
+
...(Array.isArray(parsed.claims) ? { claims: parsed.claims } : {}),
|
|
118
|
+
};
|
|
114
119
|
}
|
|
115
120
|
catch {
|
|
116
121
|
return null;
|
|
@@ -171,6 +176,7 @@ export async function runPoolArchiveMigration(pool, options = {}) {
|
|
|
171
176
|
{ archivedAt: now.toISOString(), migration: POOL_ARCHIVE_CONSTANTS.MARKER_FILENAME, added: added.length },
|
|
172
177
|
],
|
|
173
178
|
workItems: [...archived, ...added.map(({ workItem, reason }) => ({ ...workItem, archiveReason: reason }))],
|
|
179
|
+
...(existing.claims ? { claims: existing.claims } : {}),
|
|
174
180
|
};
|
|
175
181
|
// Archive first: only once it is on disk do the items leave the pool.
|
|
176
182
|
await atomicWriteJson(archiveFile, next);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool-archive-migration.js","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-archive-migration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"pool-archive-migration.js","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-archive-migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ongoing task-pool pruning (crewly#1108).
|
|
3
|
+
*
|
|
4
|
+
* `pool.json` is rewritten whole on every write, so its size is the cost of
|
|
5
|
+
* every claim, heartbeat and completion. Finished WorkItems and ended claims
|
|
6
|
+
* were never removed (13 MB, 5,600 claims, 1,100 verified items). This moves
|
|
7
|
+
* them out of the live pool into the dated archive file
|
|
8
|
+
* (`task-pool/archive/pool-archive-YYYY-MM-DD.json`, the same file the
|
|
9
|
+
* one-time ticket-loop archive writes):
|
|
10
|
+
*
|
|
11
|
+
* - a WorkItem in a terminal status (`verified`, `done`, `failed`,
|
|
12
|
+
* `cancelled`) finished more than the retention ago;
|
|
13
|
+
* - an ended claim (`released` / `revoked`) whose WorkItem is terminal and
|
|
14
|
+
* finished more than the retention ago, or whose WorkItem is no longer in
|
|
15
|
+
* the pool at all (an orphan).
|
|
16
|
+
*
|
|
17
|
+
* Never moved: active or expiring claims, claims on a live WorkItem (the
|
|
18
|
+
* attempt history of an unfinished item is still read), non-terminal items.
|
|
19
|
+
* Nothing is deleted: the archive is written (append-only, merged by id)
|
|
20
|
+
* BEFORE the live pool shrinks, so a crash in between only means the next
|
|
21
|
+
* run moves the same entries again without duplicating them.
|
|
22
|
+
*
|
|
23
|
+
* @module services/task-pool/pool-prune
|
|
24
|
+
*/
|
|
25
|
+
import type { WorkItem } from '../../types/v2/work-item.types.js';
|
|
26
|
+
import type { TaskClaim } from '../../types/v2/claim.types.js';
|
|
27
|
+
import type { ComponentLogger } from '../core/logger.service.js';
|
|
28
|
+
/** The pool surface the prune needs (PoolStorage). */
|
|
29
|
+
export interface PrunablePool {
|
|
30
|
+
getWorkItems(): Promise<WorkItem[]>;
|
|
31
|
+
getClaims(): Promise<TaskClaim[]>;
|
|
32
|
+
removeWorkItems(ids: ReadonlySet<string>): Promise<number>;
|
|
33
|
+
removeClaims(ids: ReadonlySet<string>): Promise<number>;
|
|
34
|
+
flush(): Promise<void>;
|
|
35
|
+
getDataDir(): string;
|
|
36
|
+
}
|
|
37
|
+
/** What a prune run did. */
|
|
38
|
+
export interface PoolPruneResult {
|
|
39
|
+
/** WorkItems moved to the archive */
|
|
40
|
+
items: number;
|
|
41
|
+
/** Claims moved to the archive */
|
|
42
|
+
claims: number;
|
|
43
|
+
/** WorkItems left in the live pool */
|
|
44
|
+
itemsKept: number;
|
|
45
|
+
/** Claims left in the live pool */
|
|
46
|
+
claimsKept: number;
|
|
47
|
+
/** Archive file written, when anything moved */
|
|
48
|
+
archiveFile?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Select what leaves the live pool (pure).
|
|
52
|
+
*
|
|
53
|
+
* @param items - Every WorkItem in the pool
|
|
54
|
+
* @param claims - Every claim in the pool
|
|
55
|
+
* @param now - Current time (ms)
|
|
56
|
+
* @param retentionMs - How long finished entries stay
|
|
57
|
+
* @returns The WorkItems and claims to archive
|
|
58
|
+
*/
|
|
59
|
+
export declare function selectPrunable(items: readonly WorkItem[], claims: readonly TaskClaim[], now: number, retentionMs?: number): {
|
|
60
|
+
workItems: WorkItem[];
|
|
61
|
+
claims: TaskClaim[];
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Archive-then-remove what {@link selectPrunable} selects.
|
|
65
|
+
*
|
|
66
|
+
* @param pool - The live pool (PoolStorage)
|
|
67
|
+
* @param options - Clock, retention and logger
|
|
68
|
+
* @returns Counts
|
|
69
|
+
* @throws When the archive cannot be written — the live pool is untouched then
|
|
70
|
+
*/
|
|
71
|
+
export declare function runPoolPrune(pool: PrunablePool, options?: {
|
|
72
|
+
now?: Date;
|
|
73
|
+
retentionMs?: number;
|
|
74
|
+
logger?: Pick<ComponentLogger, 'info' | 'warn'>;
|
|
75
|
+
}): Promise<PoolPruneResult>;
|
|
76
|
+
//# sourceMappingURL=pool-prune.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-prune.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-prune.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGjE,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpC,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAClC,eAAe,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,UAAU,IAAI,MAAM,CAAC;CACtB;AAED,4BAA4B;AAC5B,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAA0C,GACtD;IAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAA;CAAE,CAiBhD;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;CAAO,GAClG,OAAO,CAAC,eAAe,CAAC,CAmD1B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ongoing task-pool pruning (crewly#1108).
|
|
3
|
+
*
|
|
4
|
+
* `pool.json` is rewritten whole on every write, so its size is the cost of
|
|
5
|
+
* every claim, heartbeat and completion. Finished WorkItems and ended claims
|
|
6
|
+
* were never removed (13 MB, 5,600 claims, 1,100 verified items). This moves
|
|
7
|
+
* them out of the live pool into the dated archive file
|
|
8
|
+
* (`task-pool/archive/pool-archive-YYYY-MM-DD.json`, the same file the
|
|
9
|
+
* one-time ticket-loop archive writes):
|
|
10
|
+
*
|
|
11
|
+
* - a WorkItem in a terminal status (`verified`, `done`, `failed`,
|
|
12
|
+
* `cancelled`) finished more than the retention ago;
|
|
13
|
+
* - an ended claim (`released` / `revoked`) whose WorkItem is terminal and
|
|
14
|
+
* finished more than the retention ago, or whose WorkItem is no longer in
|
|
15
|
+
* the pool at all (an orphan).
|
|
16
|
+
*
|
|
17
|
+
* Never moved: active or expiring claims, claims on a live WorkItem (the
|
|
18
|
+
* attempt history of an unfinished item is still read), non-terminal items.
|
|
19
|
+
* Nothing is deleted: the archive is written (append-only, merged by id)
|
|
20
|
+
* BEFORE the live pool shrinks, so a crash in between only means the next
|
|
21
|
+
* run moves the same entries again without duplicating them.
|
|
22
|
+
*
|
|
23
|
+
* @module services/task-pool/pool-prune
|
|
24
|
+
*/
|
|
25
|
+
import * as path from 'path';
|
|
26
|
+
import { atomicWriteJson, ensureDir } from '../../utils/file-io.utils.js';
|
|
27
|
+
import { POOL_ARCHIVE_CONSTANTS, POOL_PRUNE_CONSTANTS } from '../../constants.js';
|
|
28
|
+
import { archiveFileName, exists, readArchive } from './pool-archive-migration.js';
|
|
29
|
+
const TERMINAL = new Set(POOL_ARCHIVE_CONSTANTS.TERMINAL_STATUSES);
|
|
30
|
+
/**
|
|
31
|
+
* When a finished WorkItem finished: the latest of its completion and last
|
|
32
|
+
* status change, else its creation.
|
|
33
|
+
*
|
|
34
|
+
* @param wi - WorkItem
|
|
35
|
+
* @returns Epoch ms, NaN when no usable date
|
|
36
|
+
*/
|
|
37
|
+
function finishedAt(wi) {
|
|
38
|
+
const times = [wi.completedAt, wi.statusChangedAt]
|
|
39
|
+
.map((iso) => (iso ? Date.parse(iso) : NaN))
|
|
40
|
+
.filter((t) => Number.isFinite(t));
|
|
41
|
+
if (times.length > 0)
|
|
42
|
+
return Math.max(...times);
|
|
43
|
+
return Date.parse(wi.createdAt);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Select what leaves the live pool (pure).
|
|
47
|
+
*
|
|
48
|
+
* @param items - Every WorkItem in the pool
|
|
49
|
+
* @param claims - Every claim in the pool
|
|
50
|
+
* @param now - Current time (ms)
|
|
51
|
+
* @param retentionMs - How long finished entries stay
|
|
52
|
+
* @returns The WorkItems and claims to archive
|
|
53
|
+
*/
|
|
54
|
+
export function selectPrunable(items, claims, now, retentionMs = POOL_PRUNE_CONSTANTS.RETENTION_MS) {
|
|
55
|
+
const oldTerminal = new Set();
|
|
56
|
+
const live = new Set();
|
|
57
|
+
const workItems = [];
|
|
58
|
+
for (const wi of items) {
|
|
59
|
+
live.add(wi.id);
|
|
60
|
+
const t = finishedAt(wi);
|
|
61
|
+
// Unparseable dates: kept. Only what can be proven old moves.
|
|
62
|
+
if (TERMINAL.has(wi.status) && Number.isFinite(t) && now - t >= retentionMs) {
|
|
63
|
+
oldTerminal.add(wi.id);
|
|
64
|
+
workItems.push(wi);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const prunedClaims = claims.filter((c) => (c.status === 'released' || c.status === 'revoked') && (oldTerminal.has(c.workItemId) || !live.has(c.workItemId)));
|
|
68
|
+
return { workItems, claims: prunedClaims };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Archive-then-remove what {@link selectPrunable} selects.
|
|
72
|
+
*
|
|
73
|
+
* @param pool - The live pool (PoolStorage)
|
|
74
|
+
* @param options - Clock, retention and logger
|
|
75
|
+
* @returns Counts
|
|
76
|
+
* @throws When the archive cannot be written — the live pool is untouched then
|
|
77
|
+
*/
|
|
78
|
+
export async function runPoolPrune(pool, options = {}) {
|
|
79
|
+
const now = options.now ?? new Date();
|
|
80
|
+
const items = [...(await pool.getWorkItems())];
|
|
81
|
+
const claims = [...(await pool.getClaims())];
|
|
82
|
+
const selected = selectPrunable(items, claims, now.getTime(), options.retentionMs);
|
|
83
|
+
if (selected.workItems.length === 0 && selected.claims.length === 0) {
|
|
84
|
+
return { items: 0, claims: 0, itemsKept: items.length, claimsKept: claims.length };
|
|
85
|
+
}
|
|
86
|
+
const archiveDir = path.join(pool.getDataDir(), POOL_ARCHIVE_CONSTANTS.ARCHIVE_DIRNAME);
|
|
87
|
+
await ensureDir(archiveDir);
|
|
88
|
+
let archiveFile = path.join(archiveDir, archiveFileName(now));
|
|
89
|
+
let existing = { version: 1, runs: [], workItems: [] };
|
|
90
|
+
if (await exists(archiveFile)) {
|
|
91
|
+
const read = await readArchive(archiveFile);
|
|
92
|
+
if (read) {
|
|
93
|
+
existing = read;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// Unreadable archive: never overwrite it, write beside it instead.
|
|
97
|
+
archiveFile = archiveFile.replace(/\.json$/, `-${now.getTime()}.json`);
|
|
98
|
+
options.logger?.warn('Existing pool archive is unreadable — writing a new file beside it', { archiveFile });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const knownItems = new Set(existing.workItems.map((w) => w.id));
|
|
102
|
+
const knownClaims = new Set((existing.claims ?? []).map((c) => c.id));
|
|
103
|
+
const newItems = selected.workItems.filter((w) => !knownItems.has(w.id));
|
|
104
|
+
const newClaims = selected.claims.filter((c) => !knownClaims.has(c.id));
|
|
105
|
+
const next = {
|
|
106
|
+
version: 1,
|
|
107
|
+
runs: [
|
|
108
|
+
...existing.runs,
|
|
109
|
+
{ archivedAt: now.toISOString(), migration: 'pool-prune', added: newItems.length, addedClaims: newClaims.length },
|
|
110
|
+
],
|
|
111
|
+
workItems: [...existing.workItems, ...newItems.map((w) => ({ ...w, archiveReason: 'terminal' }))],
|
|
112
|
+
claims: [...(existing.claims ?? []), ...newClaims],
|
|
113
|
+
};
|
|
114
|
+
// Archive first: only once it is on disk do the entries leave the pool.
|
|
115
|
+
await atomicWriteJson(archiveFile, next);
|
|
116
|
+
const removedItems = await pool.removeWorkItems(new Set(selected.workItems.map((w) => w.id)));
|
|
117
|
+
const removedClaims = await pool.removeClaims(new Set(selected.claims.map((c) => c.id)));
|
|
118
|
+
await pool.flush();
|
|
119
|
+
const result = {
|
|
120
|
+
items: removedItems,
|
|
121
|
+
claims: removedClaims,
|
|
122
|
+
itemsKept: items.length - removedItems,
|
|
123
|
+
claimsKept: claims.length - removedClaims,
|
|
124
|
+
archiveFile,
|
|
125
|
+
};
|
|
126
|
+
options.logger?.info('Task pool pruned: finished items and ended claims moved to the archive', { ...result });
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=pool-prune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-prune.js","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-prune.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ export interface PoolStorageOptions {
|
|
|
31
31
|
* Persists task pool state to a JSON file with atomic writes.
|
|
32
32
|
*
|
|
33
33
|
* Uses the same patterns as the rest of the Crewly backend:
|
|
34
|
-
* - {@link
|
|
34
|
+
* - {@link atomicWriteFile} for crash-safe writes
|
|
35
35
|
* - {@link modifyJsonFile} for locked read-modify-write cycles
|
|
36
36
|
* - Debounced flushing to reduce disk I/O under burst writes
|
|
37
37
|
*/
|
|
@@ -128,6 +128,14 @@ export declare class PoolStorage {
|
|
|
128
128
|
* @returns How many were removed
|
|
129
129
|
*/
|
|
130
130
|
removeWorkItems(workItemIds: ReadonlySet<string>): Promise<number>;
|
|
131
|
+
/**
|
|
132
|
+
* Removes several claims at once (in place, one flush scheduled). Used by
|
|
133
|
+
* the pool prune, which writes them to the archive first.
|
|
134
|
+
*
|
|
135
|
+
* @param claimIds - IDs to remove
|
|
136
|
+
* @returns How many were removed
|
|
137
|
+
*/
|
|
138
|
+
removeClaims(claimIds: ReadonlySet<string>): Promise<number>;
|
|
131
139
|
/**
|
|
132
140
|
* Directory the pool file lives in (`~/.crewly/task-pool` by default).
|
|
133
141
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool-storage.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAS/D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,uCAAuC;IACvC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmBD;;;;;;;GAOG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,wDAAwD;IACxD,OAAO,CAAC,KAAK,CAAyB;IAEtC,iDAAiD;IACjD,OAAO,CAAC,UAAU,CAA+B;IAEjD,kCAAkC;IAClC,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,CAAC,EAAE,kBAAkB;IAYxC;;;;;;;;;;;;OAYG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;IAsB/B;;;;;;;OAOG;IACG,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKzC;;;;;;;OAOG;IACG,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAKvC;;;;;OAKG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAKrE;;;;;OAKG;IACG,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAOnF;;;;;OAKG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAO7E;;;;OAIG;IACG,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpD;;;;;;OAMG;IACG,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,GAC9B,OAAO,CAAC,OAAO,CAAC;IAWnB;;;;;OAKG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1D;;;;;;;OAOG;IACG,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAcxE;;;;OAIG;IACH,UAAU,IAAI,MAAM;IAIpB;;;;OAIG;IACG,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C;;;;;;OAMG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAClC,OAAO,CAAC,OAAO,CAAC;IASnB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"pool-storage.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAS/D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,uCAAuC;IACvC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAmBD;;;;;;;GAOG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,wDAAwD;IACxD,OAAO,CAAC,KAAK,CAAyB;IAEtC,iDAAiD;IACjD,OAAO,CAAC,UAAU,CAA+B;IAEjD,kCAAkC;IAClC,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,CAAC,EAAE,kBAAkB;IAYxC;;;;;;;;;;;;OAYG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;IAsB/B;;;;;;;OAOG;IACG,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAKzC;;;;;;;OAOG;IACG,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAKvC;;;;;OAKG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAKrE;;;;;OAKG;IACG,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAOnF;;;;;OAKG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAO7E;;;;OAIG;IACG,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpD;;;;;;OAMG;IACG,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,GAC9B,OAAO,CAAC,OAAO,CAAC;IAWnB;;;;;OAKG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1D;;;;;;;OAOG;IACG,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAcxE;;;;;;OAMG;IACG,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAalE;;;;OAIG;IACH,UAAU,IAAI,MAAM;IAIpB;;;;OAIG;IACG,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C;;;;;;OAMG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAClC,OAAO,CAAC,OAAO,CAAC;IASnB;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;OAEG;IACH,OAAO,CAAC,SAAS;CAUlB;AAMD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,QAAQ,CAM9C"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @module services/task-pool/pool-storage
|
|
9
9
|
*/
|
|
10
10
|
import * as path from 'path';
|
|
11
|
-
import { ensureDir, safeReadJson,
|
|
11
|
+
import { ensureDir, safeReadJson, atomicWriteFile, } from '../../utils/file-io.utils.js';
|
|
12
12
|
import { LoggerService } from '../core/logger.service.js';
|
|
13
13
|
import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
|
|
14
14
|
import { traceWorkItemCreated, traceWorkItemStatus } from '../trace/trace-recorder.js';
|
|
@@ -28,7 +28,7 @@ const WRITE_DEBOUNCE_MS = 500;
|
|
|
28
28
|
* Persists task pool state to a JSON file with atomic writes.
|
|
29
29
|
*
|
|
30
30
|
* Uses the same patterns as the rest of the Crewly backend:
|
|
31
|
-
* - {@link
|
|
31
|
+
* - {@link atomicWriteFile} for crash-safe writes
|
|
32
32
|
* - {@link modifyJsonFile} for locked read-modify-write cycles
|
|
33
33
|
* - Debounced flushing to reduce disk I/O under burst writes
|
|
34
34
|
*/
|
|
@@ -200,6 +200,26 @@ export class PoolStorage {
|
|
|
200
200
|
this.markDirty();
|
|
201
201
|
return removed;
|
|
202
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Removes several claims at once (in place, one flush scheduled). Used by
|
|
205
|
+
* the pool prune, which writes them to the archive first.
|
|
206
|
+
*
|
|
207
|
+
* @param claimIds - IDs to remove
|
|
208
|
+
* @returns How many were removed
|
|
209
|
+
*/
|
|
210
|
+
async removeClaims(claimIds) {
|
|
211
|
+
const data = await this.load();
|
|
212
|
+
let removed = 0;
|
|
213
|
+
for (let i = data.claims.length - 1; i >= 0; i--) {
|
|
214
|
+
if (claimIds.has(data.claims[i].id)) {
|
|
215
|
+
data.claims.splice(i, 1);
|
|
216
|
+
removed += 1;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (removed > 0)
|
|
220
|
+
this.markDirty();
|
|
221
|
+
return removed;
|
|
222
|
+
}
|
|
203
223
|
/**
|
|
204
224
|
* Directory the pool file lives in (`~/.crewly/task-pool` by default).
|
|
205
225
|
*
|
|
@@ -246,8 +266,19 @@ export class PoolStorage {
|
|
|
246
266
|
if (!this.dirty || !this.cache)
|
|
247
267
|
return;
|
|
248
268
|
this.cache.lastUpdatedAt = new Date().toISOString();
|
|
249
|
-
|
|
269
|
+
// Cleared BEFORE the write: a change made while it runs sets the flag
|
|
270
|
+
// again and gets its own flush. Clearing it after would swallow that
|
|
271
|
+
// change until the next unrelated write.
|
|
250
272
|
this.dirty = false;
|
|
273
|
+
try {
|
|
274
|
+
// Compact JSON: the pretty-printed file was twice the size and the
|
|
275
|
+
// whole-file rewrite is the cost of every pool write (crewly#1108).
|
|
276
|
+
await atomicWriteFile(this.filePath, JSON.stringify(this.cache));
|
|
277
|
+
}
|
|
278
|
+
catch (err) {
|
|
279
|
+
this.dirty = true;
|
|
280
|
+
throw err;
|
|
281
|
+
}
|
|
251
282
|
this.logger.debug?.('Pool data flushed to disk', { path: this.filePath });
|
|
252
283
|
}
|
|
253
284
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool-storage.js","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-storage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pool-storage.js","sourceRoot":"","sources":["../../../../../../backend/src/services/task-pool/pool-storage.ts"],"names":[],"mappings":"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"}
|