crewly 1.5.19 → 1.5.21
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/orchestrator_tasks/prompts/orchestrator-prompt.md +46 -0
- package/config/risk-policies/no-local-browser.policy.md +43 -0
- package/config/sops/xhs-requirement-log.v1.md +238 -0
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js +152 -19
- package/dist/backend/backend/src/controllers/mission/mission-policy.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +23 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +89 -0
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +37 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/scripts/backfill-mission-priority.d.ts +43 -0
- package/dist/backend/backend/src/scripts/backfill-mission-priority.d.ts.map +1 -0
- package/dist/backend/backend/src/scripts/backfill-mission-priority.js +90 -0
- package/dist/backend/backend/src/scripts/backfill-mission-priority.js.map +1 -0
- 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 +3 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +2 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/team-norms.module.d.ts +16 -3
- package/dist/backend/backend/src/services/ai/prompt-modules/team-norms.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/team-norms.module.js +116 -19
- package/dist/backend/backend/src/services/ai/prompt-modules/team-norms.module.js.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.d.ts +33 -0
- package/dist/backend/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/core/storage.service.js +54 -0
- package/dist/backend/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts +28 -3
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +139 -79
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/template/template.service.js +1 -0
- package/dist/backend/backend/src/services/template/template.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/service-contract-gate.service.d.ts +88 -0
- package/dist/backend/backend/src/services/v3/service-contract-gate.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/service-contract-gate.service.js +138 -0
- package/dist/backend/backend/src/services/v3/service-contract-gate.service.js.map +1 -0
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.d.ts +77 -0
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js +177 -0
- package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js.map +1 -0
- package/dist/backend/backend/src/types/index.d.ts +28 -0
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.d.ts +2 -0
- package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/team-template.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.d.ts +51 -0
- package/dist/backend/backend/src/types/v2/mission.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/mission.types.js +66 -0
- package/dist/backend/backend/src/types/v2/mission.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/trigger.types.d.ts +16 -0
- package/dist/backend/backend/src/types/v2/trigger.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/trigger.types.js +2 -0
- package/dist/backend/backend/src/types/v2/trigger.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +10 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js +11 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.d.ts +33 -0
- package/dist/cli/backend/src/services/core/storage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/core/storage.service.js +54 -0
- package/dist/cli/backend/src/services/core/storage.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +28 -0
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.d.ts +2 -0
- package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/team-template.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/trigger.types.d.ts +201 -0
- package/dist/cli/backend/src/types/v2/trigger.types.d.ts.map +1 -0
- package/dist/cli/backend/src/types/v2/trigger.types.js +174 -0
- package/dist/cli/backend/src/types/v2/trigger.types.js.map +1 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +11 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js +14 -11
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/frontend/dist/assets/index-76d76633.js +5220 -0
- package/frontend/dist/assets/{index-e3de7a8c.css → index-dc92ab64.css} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-f6bc685f.js +0 -4924
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-assembly.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-assembly.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAmB,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAMN,cAAc,GACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-assembly.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/prompt-assembly.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,10 +38,23 @@ export declare class TeamNormsModule implements PromptModule {
|
|
|
38
38
|
*/
|
|
39
39
|
shouldInclude(config: ModuleConfig): boolean;
|
|
40
40
|
/**
|
|
41
|
-
* Build the team norms prompt section by loading
|
|
41
|
+
* Build the team norms prompt section by loading relevant .md files from
|
|
42
|
+
* the norms directory.
|
|
42
43
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
44
|
+
* Selection is a two-stage pipeline designed to keep the marketing team's
|
|
45
|
+
* 50+ SOP files from blowing the prompt budget:
|
|
46
|
+
*
|
|
47
|
+
* 1. **Filter**: parse each file's YAML frontmatter, skip `deprecated: true`
|
|
48
|
+
* and skip files whose `appliesTo` does not include the agent's role.
|
|
49
|
+
* 2. **Rank + cap**: sort survivors by descending `priority` (default 0),
|
|
50
|
+
* then alphabetically for stable ordering, then keep at most
|
|
51
|
+
* `MAX_NORM_FILES`.
|
|
52
|
+
*
|
|
53
|
+
* Frontmatter is stripped from the emitted content — agents see the SOP
|
|
54
|
+
* body, not the routing metadata.
|
|
55
|
+
*
|
|
56
|
+
* @param config - Module configuration with teamNormsPath and role
|
|
57
|
+
* @returns Formatted markdown section with the applicable norms
|
|
45
58
|
*/
|
|
46
59
|
build(config: ModuleConfig): Promise<string>;
|
|
47
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-norms.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/team-norms.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"team-norms.module.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/team-norms.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AA2F/E;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAClD,IAAI,SAAgB;IACpB,QAAQ,SAAO;IACf,SAAS,SAAQ;IACjB,WAAW,UAAQ;IAEnB;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO;IAU5C;;;;;;;;;;;;;;;;;;OAkBG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;CA+DnD"}
|
|
@@ -14,8 +14,76 @@ import * as fs from 'fs';
|
|
|
14
14
|
import * as path from 'path';
|
|
15
15
|
/**
|
|
16
16
|
* Maximum number of norm files to load per team to prevent prompt bloat.
|
|
17
|
+
* Applied AFTER frontmatter filtering, so deprecated/off-role norms do not
|
|
18
|
+
* consume a slot.
|
|
17
19
|
*/
|
|
18
20
|
const MAX_NORM_FILES = 5;
|
|
21
|
+
/**
|
|
22
|
+
* Parse a `---`-delimited YAML frontmatter block at the start of the file.
|
|
23
|
+
* Returns the parsed fields plus the remaining content. Only supports the
|
|
24
|
+
* handful of simple scalar/sequence forms we care about — intentionally
|
|
25
|
+
* avoids adding a YAML dependency to this hot path.
|
|
26
|
+
*/
|
|
27
|
+
function parseFrontmatter(raw) {
|
|
28
|
+
if (!raw.startsWith('---')) {
|
|
29
|
+
return { meta: {}, content: raw };
|
|
30
|
+
}
|
|
31
|
+
const lines = raw.split('\n');
|
|
32
|
+
// Find the closing --- (first delimiter is line 0)
|
|
33
|
+
let end = -1;
|
|
34
|
+
for (let i = 1; i < lines.length; i++) {
|
|
35
|
+
if (lines[i].trim() === '---') {
|
|
36
|
+
end = i;
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (end === -1) {
|
|
41
|
+
return { meta: {}, content: raw };
|
|
42
|
+
}
|
|
43
|
+
const meta = {};
|
|
44
|
+
for (const line of lines.slice(1, end)) {
|
|
45
|
+
const m = /^([A-Za-z_][\w-]*)\s*:\s*(.*)$/.exec(line);
|
|
46
|
+
if (!m)
|
|
47
|
+
continue;
|
|
48
|
+
const key = m[1];
|
|
49
|
+
let value = m[2].trim();
|
|
50
|
+
// Strip inline comment
|
|
51
|
+
const hashIdx = value.indexOf(' #');
|
|
52
|
+
if (hashIdx >= 0)
|
|
53
|
+
value = value.slice(0, hashIdx).trim();
|
|
54
|
+
if (key === 'deprecated') {
|
|
55
|
+
meta.deprecated = /^(true|yes|1)$/i.test(value);
|
|
56
|
+
}
|
|
57
|
+
else if (key === 'appliesTo') {
|
|
58
|
+
// Accept: `appliesTo: [a, b]` | `appliesTo: a` | `appliesTo: a, b`
|
|
59
|
+
const stripped = value.replace(/^\[|\]$/g, '');
|
|
60
|
+
meta.appliesTo = stripped
|
|
61
|
+
.split(',')
|
|
62
|
+
.map((s) => s.trim().replace(/^["']|["']$/g, ''))
|
|
63
|
+
.filter(Boolean);
|
|
64
|
+
}
|
|
65
|
+
else if (key === 'priority') {
|
|
66
|
+
const n = Number(value);
|
|
67
|
+
if (!Number.isNaN(n))
|
|
68
|
+
meta.priority = n;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return { meta, content: lines.slice(end + 1).join('\n') };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Decides whether a norm applies to the current agent given parsed frontmatter.
|
|
75
|
+
* Universal (no `appliesTo`) norms always apply. Role-scoped norms apply when
|
|
76
|
+
* the agent's role is listed.
|
|
77
|
+
*/
|
|
78
|
+
function normApplies(meta, role) {
|
|
79
|
+
if (meta.deprecated)
|
|
80
|
+
return false;
|
|
81
|
+
if (!meta.appliesTo || meta.appliesTo.length === 0)
|
|
82
|
+
return true;
|
|
83
|
+
if (!role)
|
|
84
|
+
return false;
|
|
85
|
+
return meta.appliesTo.includes(role);
|
|
86
|
+
}
|
|
19
87
|
/**
|
|
20
88
|
* TeamNormsModule loads all markdown norm files from the team's norms directory
|
|
21
89
|
* and injects them as team-level SOPs into the agent prompt.
|
|
@@ -53,43 +121,72 @@ export class TeamNormsModule {
|
|
|
53
121
|
}
|
|
54
122
|
}
|
|
55
123
|
/**
|
|
56
|
-
* Build the team norms prompt section by loading
|
|
124
|
+
* Build the team norms prompt section by loading relevant .md files from
|
|
125
|
+
* the norms directory.
|
|
126
|
+
*
|
|
127
|
+
* Selection is a two-stage pipeline designed to keep the marketing team's
|
|
128
|
+
* 50+ SOP files from blowing the prompt budget:
|
|
57
129
|
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
130
|
+
* 1. **Filter**: parse each file's YAML frontmatter, skip `deprecated: true`
|
|
131
|
+
* and skip files whose `appliesTo` does not include the agent's role.
|
|
132
|
+
* 2. **Rank + cap**: sort survivors by descending `priority` (default 0),
|
|
133
|
+
* then alphabetically for stable ordering, then keep at most
|
|
134
|
+
* `MAX_NORM_FILES`.
|
|
135
|
+
*
|
|
136
|
+
* Frontmatter is stripped from the emitted content — agents see the SOP
|
|
137
|
+
* body, not the routing metadata.
|
|
138
|
+
*
|
|
139
|
+
* @param config - Module configuration with teamNormsPath and role
|
|
140
|
+
* @returns Formatted markdown section with the applicable norms
|
|
60
141
|
*/
|
|
61
142
|
async build(config) {
|
|
62
143
|
const normsPath = config.teamNormsPath;
|
|
63
144
|
const sections = ['## Team Norms & SOPs\n'];
|
|
64
145
|
try {
|
|
65
|
-
const dirExists = await fs.promises
|
|
146
|
+
const dirExists = await fs.promises
|
|
147
|
+
.access(normsPath)
|
|
148
|
+
.then(() => true)
|
|
149
|
+
.catch(() => false);
|
|
66
150
|
if (!dirExists) {
|
|
67
151
|
return '';
|
|
68
152
|
}
|
|
69
153
|
const allEntries = await fs.promises.readdir(normsPath);
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
.slice(0, MAX_NORM_FILES);
|
|
74
|
-
if (entries.length === 0) {
|
|
75
|
-
return '';
|
|
76
|
-
}
|
|
77
|
-
for (const entry of entries) {
|
|
154
|
+
const mdFiles = allEntries.filter((f) => f.endsWith('.md')).sort();
|
|
155
|
+
const candidates = [];
|
|
156
|
+
for (const entry of mdFiles) {
|
|
78
157
|
const filePath = path.join(normsPath, entry);
|
|
79
158
|
try {
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
159
|
+
const raw = await fs.promises.readFile(filePath, 'utf-8');
|
|
160
|
+
const { meta, content } = parseFrontmatter(raw);
|
|
161
|
+
if (!normApplies(meta, config.role))
|
|
162
|
+
continue;
|
|
163
|
+
const trimmed = content.trim();
|
|
164
|
+
if (!trimmed)
|
|
165
|
+
continue;
|
|
166
|
+
candidates.push({
|
|
167
|
+
fileName: entry,
|
|
168
|
+
content: trimmed,
|
|
169
|
+
priority: meta.priority ?? 0,
|
|
170
|
+
});
|
|
85
171
|
}
|
|
86
172
|
catch {
|
|
87
|
-
// Skip unreadable files
|
|
173
|
+
// Skip unreadable files silently — one bad file shouldn't kill the module.
|
|
88
174
|
}
|
|
89
175
|
}
|
|
90
|
-
if (
|
|
176
|
+
if (candidates.length === 0) {
|
|
91
177
|
return '';
|
|
92
178
|
}
|
|
179
|
+
// Stage 2: rank by priority desc, then filename asc, then cap.
|
|
180
|
+
candidates.sort((a, b) => {
|
|
181
|
+
if (a.priority !== b.priority)
|
|
182
|
+
return b.priority - a.priority;
|
|
183
|
+
return a.fileName.localeCompare(b.fileName);
|
|
184
|
+
});
|
|
185
|
+
const chosen = candidates.slice(0, MAX_NORM_FILES);
|
|
186
|
+
for (const item of chosen) {
|
|
187
|
+
sections.push(item.content);
|
|
188
|
+
sections.push(''); // blank line separator
|
|
189
|
+
}
|
|
93
190
|
return sections.join('\n');
|
|
94
191
|
}
|
|
95
192
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team-norms.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/team-norms.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B
|
|
1
|
+
{"version":3,"file":"team-norms.module.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/ai/prompt-modules/team-norms.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { FSWatcher } from 'fs';
|
|
2
2
|
import { Team, TeamMember, Project, Ticket, TicketFilter, ScheduledCheck, ScheduledMessage, MessageDeliveryLog } from '../../types/index.js';
|
|
3
3
|
import { type AgentStatus, type WorkingStatus, type RuntimeType } from '../../constants.js';
|
|
4
|
+
/**
|
|
5
|
+
* Storage-level events emitted after a team is persisted or removed.
|
|
6
|
+
* Subscribers (e.g. {@link TeamTriggerReconciler}) use these to converge
|
|
7
|
+
* side systems without pulling StorageService into a cross-cutting tangle.
|
|
8
|
+
*/
|
|
9
|
+
export type StorageEvent = {
|
|
10
|
+
kind: 'team-saved';
|
|
11
|
+
team: Team;
|
|
12
|
+
} | {
|
|
13
|
+
kind: 'team-deleted';
|
|
14
|
+
teamId: string;
|
|
15
|
+
};
|
|
16
|
+
export type StorageListener = (event: StorageEvent) => Promise<void> | void;
|
|
4
17
|
export declare class StorageService {
|
|
5
18
|
private static instance;
|
|
6
19
|
private static instanceHome;
|
|
@@ -23,6 +36,12 @@ export declare class StorageService {
|
|
|
23
36
|
/** Debounce timer for teams backup to avoid I/O storms */
|
|
24
37
|
private backupDebounceTimer;
|
|
25
38
|
private readonly BACKUP_DEBOUNCE_MS;
|
|
39
|
+
/**
|
|
40
|
+
* Listeners registered via {@link onStorageEvent}. Empty by default so
|
|
41
|
+
* existing call-sites pay zero cost; listeners are fired-and-forgotten
|
|
42
|
+
* to keep save/delete latency unchanged.
|
|
43
|
+
*/
|
|
44
|
+
private listeners;
|
|
26
45
|
constructor(crewlyHome?: string);
|
|
27
46
|
/**
|
|
28
47
|
* Get singleton instance of StorageService to prevent multiple instances
|
|
@@ -158,6 +177,20 @@ export declare class StorageService {
|
|
|
158
177
|
* @param id - The team ID to delete
|
|
159
178
|
*/
|
|
160
179
|
deleteTeam(id: string): Promise<void>;
|
|
180
|
+
/**
|
|
181
|
+
* Register a listener for storage lifecycle events. Returns an unsubscribe
|
|
182
|
+
* function. Listeners are invoked fire-and-forget; errors are logged and
|
|
183
|
+
* never propagated to the save/delete caller.
|
|
184
|
+
*
|
|
185
|
+
* @param listener - Callback invoked for every saved/deleted team
|
|
186
|
+
* @returns Unsubscribe function
|
|
187
|
+
*/
|
|
188
|
+
onStorageEvent(listener: StorageListener): () => void;
|
|
189
|
+
/**
|
|
190
|
+
* Fire all registered listeners without awaiting their completion. Any
|
|
191
|
+
* error inside a listener is isolated to that listener.
|
|
192
|
+
*/
|
|
193
|
+
private emit;
|
|
161
194
|
getProjects(): Promise<Project[]>;
|
|
162
195
|
addProject(projectPath: string): Promise<Project>;
|
|
163
196
|
saveProject(project: Project): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/core/storage.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgC,SAAS,EAAE,MAAM,IAAI,CAAC;AAI7D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI7I,OAAO,EAAmC,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAM7H,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA+B;IACtD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAElD,OAAO,CAAC,UAAU,CAAS;IAC3B,4DAA4D;IAC5D,OAAO,CAAC,SAAS,CAAS;IAC1B,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,+BAA+B;IAC/B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,MAAM,CAAkB;IAChC,oDAAoD;IACpD,OAAO,CAAC,aAAa,CAAkB;IACvC,0DAA0D;IAC1D,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;
|
|
1
|
+
{"version":3,"file":"storage.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/core/storage.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,12 @@ export class StorageService {
|
|
|
32
32
|
/** Debounce timer for teams backup to avoid I/O storms */
|
|
33
33
|
backupDebounceTimer = null;
|
|
34
34
|
BACKUP_DEBOUNCE_MS = 2000;
|
|
35
|
+
/**
|
|
36
|
+
* Listeners registered via {@link onStorageEvent}. Empty by default so
|
|
37
|
+
* existing call-sites pay zero cost; listeners are fired-and-forgotten
|
|
38
|
+
* to keep save/delete latency unchanged.
|
|
39
|
+
*/
|
|
40
|
+
listeners = [];
|
|
35
41
|
constructor(crewlyHome) {
|
|
36
42
|
this.logger = LoggerService.getInstance().createComponentLogger('StorageService');
|
|
37
43
|
this.crewlyHome = crewlyHome || path.join(os.homedir(), '.crewly');
|
|
@@ -433,6 +439,9 @@ export class StorageService {
|
|
|
433
439
|
});
|
|
434
440
|
// Update teams backup (fire-and-forget, non-blocking)
|
|
435
441
|
this.updateTeamsBackup();
|
|
442
|
+
// Notify listeners (e.g. TeamTriggerReconciler). Fire-and-forget so
|
|
443
|
+
// slow subscribers never block the save path.
|
|
444
|
+
this.emit({ kind: 'team-saved', team });
|
|
436
445
|
}
|
|
437
446
|
catch (error) {
|
|
438
447
|
this.logger.error('Error saving team', {
|
|
@@ -563,6 +572,9 @@ export class StorageService {
|
|
|
563
572
|
else {
|
|
564
573
|
this.logger.warn('Team directory not found for deletion', { teamId: id, teamDir });
|
|
565
574
|
}
|
|
575
|
+
// Always fire the event so listeners can clean up even if the directory
|
|
576
|
+
// had already been removed out-of-band.
|
|
577
|
+
this.emit({ kind: 'team-deleted', teamId: id });
|
|
566
578
|
}
|
|
567
579
|
catch (error) {
|
|
568
580
|
this.logger.error('Error deleting team', {
|
|
@@ -572,6 +584,48 @@ export class StorageService {
|
|
|
572
584
|
throw error;
|
|
573
585
|
}
|
|
574
586
|
}
|
|
587
|
+
// ---------------------------------------------------------------------------
|
|
588
|
+
// Storage event subscriptions
|
|
589
|
+
// ---------------------------------------------------------------------------
|
|
590
|
+
/**
|
|
591
|
+
* Register a listener for storage lifecycle events. Returns an unsubscribe
|
|
592
|
+
* function. Listeners are invoked fire-and-forget; errors are logged and
|
|
593
|
+
* never propagated to the save/delete caller.
|
|
594
|
+
*
|
|
595
|
+
* @param listener - Callback invoked for every saved/deleted team
|
|
596
|
+
* @returns Unsubscribe function
|
|
597
|
+
*/
|
|
598
|
+
onStorageEvent(listener) {
|
|
599
|
+
this.listeners.push(listener);
|
|
600
|
+
return () => {
|
|
601
|
+
this.listeners = this.listeners.filter((l) => l !== listener);
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* Fire all registered listeners without awaiting their completion. Any
|
|
606
|
+
* error inside a listener is isolated to that listener.
|
|
607
|
+
*/
|
|
608
|
+
emit(event) {
|
|
609
|
+
for (const listener of this.listeners) {
|
|
610
|
+
try {
|
|
611
|
+
const result = listener(event);
|
|
612
|
+
if (result && typeof result.catch === 'function') {
|
|
613
|
+
result.catch((err) => {
|
|
614
|
+
this.logger.warn('Storage listener failed (async)', {
|
|
615
|
+
event: event.kind,
|
|
616
|
+
error: err instanceof Error ? err.message : String(err),
|
|
617
|
+
});
|
|
618
|
+
});
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
catch (err) {
|
|
622
|
+
this.logger.warn('Storage listener failed (sync)', {
|
|
623
|
+
event: event.kind,
|
|
624
|
+
error: err instanceof Error ? err.message : String(err),
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
}
|
|
575
629
|
// Project management
|
|
576
630
|
async getProjects() {
|
|
577
631
|
try {
|