crewly 1.20.292 → 1.20.294

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/config/hooks/agent-status/report.sh +11 -7
  2. package/config/roles/orchestrator/fragments/recovery.md +3 -0
  3. package/config/roles/orchestrator/prompt.md +3 -3
  4. package/config/roles/team-leader/tl-addon.md +6 -0
  5. package/config/skills/orchestrator/find-owner-for/SKILL.md +43 -0
  6. package/config/skills/orchestrator/find-owner-for/execute.sh +37 -0
  7. package/config/skills/orchestrator/team-roster/SKILL.md +44 -0
  8. package/config/skills/orchestrator/team-roster/execute.sh +27 -0
  9. package/config/skills/team-leader/update-charter/SKILL.md +48 -0
  10. package/config/skills/team-leader/update-charter/execute.sh +21 -0
  11. package/dist/backend/backend/src/constants.d.ts +75 -0
  12. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  13. package/dist/backend/backend/src/constants.js +60 -0
  14. package/dist/backend/backend/src/constants.js.map +1 -1
  15. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +2 -0
  16. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +18 -1
  18. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/team/team-charter.controller.d.ts +20 -0
  20. package/dist/backend/backend/src/controllers/team/team-charter.controller.d.ts.map +1 -0
  21. package/dist/backend/backend/src/controllers/team/team-charter.controller.js +81 -0
  22. package/dist/backend/backend/src/controllers/team/team-charter.controller.js.map +1 -0
  23. package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -1
  24. package/dist/backend/backend/src/controllers/team/team.routes.js +3 -0
  25. package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -1
  26. package/dist/backend/backend/src/controllers/team-roster/team-roster.controller.d.ts +31 -0
  27. package/dist/backend/backend/src/controllers/team-roster/team-roster.controller.d.ts.map +1 -0
  28. package/dist/backend/backend/src/controllers/team-roster/team-roster.controller.js +68 -0
  29. package/dist/backend/backend/src/controllers/team-roster/team-roster.controller.js.map +1 -0
  30. package/dist/backend/backend/src/index.d.ts.map +1 -1
  31. package/dist/backend/backend/src/index.js +35 -0
  32. package/dist/backend/backend/src/index.js.map +1 -1
  33. package/dist/backend/backend/src/models/Team.d.ts +3 -0
  34. package/dist/backend/backend/src/models/Team.d.ts.map +1 -1
  35. package/dist/backend/backend/src/models/Team.js +3 -0
  36. package/dist/backend/backend/src/models/Team.js.map +1 -1
  37. package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
  38. package/dist/backend/backend/src/routes/api.routes.js +3 -0
  39. package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
  40. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -0
  41. package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -0
  43. package/dist/backend/backend/src/services/ai/prompt-modules/index.js.map +1 -1
  44. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  45. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +4 -0
  46. package/dist/backend/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  47. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  48. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -2
  49. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  50. package/dist/backend/backend/src/services/ai/prompt-modules/team-roster.module.d.ts +44 -0
  51. package/dist/backend/backend/src/services/ai/prompt-modules/team-roster.module.d.ts.map +1 -0
  52. package/dist/backend/backend/src/services/ai/prompt-modules/team-roster.module.js +61 -0
  53. package/dist/backend/backend/src/services/ai/prompt-modules/team-roster.module.js.map +1 -0
  54. package/dist/backend/backend/src/services/briefing/briefing-review.d.ts +98 -0
  55. package/dist/backend/backend/src/services/briefing/briefing-review.d.ts.map +1 -0
  56. package/dist/backend/backend/src/services/briefing/briefing-review.js +138 -0
  57. package/dist/backend/backend/src/services/briefing/briefing-review.js.map +1 -0
  58. package/dist/backend/backend/src/services/briefing/briefing.service.d.ts +21 -0
  59. package/dist/backend/backend/src/services/briefing/briefing.service.d.ts.map +1 -1
  60. package/dist/backend/backend/src/services/briefing/briefing.service.js +37 -5
  61. package/dist/backend/backend/src/services/briefing/briefing.service.js.map +1 -1
  62. package/dist/backend/backend/src/services/briefing/briefing.types.d.ts +5 -0
  63. package/dist/backend/backend/src/services/briefing/briefing.types.d.ts.map +1 -1
  64. package/dist/backend/backend/src/services/briefing/briefing.types.js.map +1 -1
  65. package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts +10 -0
  66. package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts.map +1 -1
  67. package/dist/backend/backend/src/services/drive/drive-agent.service.js +6 -0
  68. package/dist/backend/backend/src/services/drive/drive-agent.service.js.map +1 -1
  69. package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.d.ts +2 -0
  70. package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.js +3 -1
  72. package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.js.map +1 -1
  73. package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts +1 -1
  74. package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/drive/drive-cloud.contract.js +2 -2
  76. package/dist/backend/backend/src/services/drive/drive-cloud.contract.js.map +1 -1
  77. package/dist/backend/backend/src/services/drive/drive-status-check.d.ts +77 -0
  78. package/dist/backend/backend/src/services/drive/drive-status-check.d.ts.map +1 -0
  79. package/dist/backend/backend/src/services/drive/drive-status-check.js +96 -0
  80. package/dist/backend/backend/src/services/drive/drive-status-check.js.map +1 -0
  81. package/dist/backend/backend/src/services/team-roster/team-roster.builder.d.ts +147 -0
  82. package/dist/backend/backend/src/services/team-roster/team-roster.builder.d.ts.map +1 -0
  83. package/dist/backend/backend/src/services/team-roster/team-roster.builder.js +492 -0
  84. package/dist/backend/backend/src/services/team-roster/team-roster.builder.js.map +1 -0
  85. package/dist/backend/backend/src/services/team-roster/team-roster.service.d.ts +79 -0
  86. package/dist/backend/backend/src/services/team-roster/team-roster.service.d.ts.map +1 -0
  87. package/dist/backend/backend/src/services/team-roster/team-roster.service.js +145 -0
  88. package/dist/backend/backend/src/services/team-roster/team-roster.service.js.map +1 -0
  89. package/dist/backend/backend/src/types/index.d.ts +12 -0
  90. package/dist/backend/backend/src/types/index.d.ts.map +1 -1
  91. package/dist/backend/backend/src/types/index.js.map +1 -1
  92. package/dist/backend/build-info.json +2 -2
  93. package/dist/cli/backend/src/constants.d.ts +75 -0
  94. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  95. package/dist/cli/backend/src/constants.js +60 -0
  96. package/dist/cli/backend/src/constants.js.map +1 -1
  97. package/dist/cli/backend/src/models/Team.d.ts +3 -0
  98. package/dist/cli/backend/src/models/Team.d.ts.map +1 -1
  99. package/dist/cli/backend/src/models/Team.js +3 -0
  100. package/dist/cli/backend/src/models/Team.js.map +1 -1
  101. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
  102. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +4 -0
  103. package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
  104. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  105. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -2
  106. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  107. package/dist/cli/backend/src/services/ai/prompt-modules/team-roster.module.d.ts +44 -0
  108. package/dist/cli/backend/src/services/ai/prompt-modules/team-roster.module.d.ts.map +1 -0
  109. package/dist/cli/backend/src/services/ai/prompt-modules/team-roster.module.js +61 -0
  110. package/dist/cli/backend/src/services/ai/prompt-modules/team-roster.module.js.map +1 -0
  111. package/dist/cli/backend/src/services/team-roster/team-roster.builder.d.ts +147 -0
  112. package/dist/cli/backend/src/services/team-roster/team-roster.builder.d.ts.map +1 -0
  113. package/dist/cli/backend/src/services/team-roster/team-roster.builder.js +492 -0
  114. package/dist/cli/backend/src/services/team-roster/team-roster.builder.js.map +1 -0
  115. package/dist/cli/backend/src/services/team-roster/team-roster.service.d.ts +79 -0
  116. package/dist/cli/backend/src/services/team-roster/team-roster.service.d.ts.map +1 -0
  117. package/dist/cli/backend/src/services/team-roster/team-roster.service.js +145 -0
  118. package/dist/cli/backend/src/services/team-roster/team-roster.service.js.map +1 -0
  119. package/dist/cli/backend/src/types/index.d.ts +12 -0
  120. package/dist/cli/backend/src/types/index.d.ts.map +1 -1
  121. package/dist/cli/backend/src/types/index.js.map +1 -1
  122. package/package.json +1 -1
@@ -10,7 +10,8 @@
10
10
  *
11
11
  * @module controllers/agent-hooks/agent-hooks.controller
12
12
  */
13
- import { AGENT_STATUS_HOOK_CONSTANTS, CREDENTIAL_GUARD_CONSTANTS, TL_DELEGATION_CONSTANTS, TRACE_CONSTANTS, TURN_STATE_CONSTANTS } from '../../constants.js';
13
+ import { AGENT_STATUS_HOOK_CONSTANTS, CREDENTIAL_GUARD_CONSTANTS, ORCHESTRATOR_SESSION_NAME, TEAM_ROSTER_CONSTANTS, TL_DELEGATION_CONSTANTS, TRACE_CONSTANTS, TURN_STATE_CONSTANTS } from '../../constants.js';
14
+ import { TeamRosterService } from '../../services/team-roster/team-roster.service.js';
14
15
  import { TlDelegationService } from '../../services/tl-delegation/tl-delegation.service.js';
15
16
  import { CredentialGuardAlertService } from '../../services/monitoring/credential-guard-alerts.js';
16
17
  import { recordHookEvent } from '../../services/monitoring/agent-hook-state.js';
@@ -32,6 +33,8 @@ const SESSION_HEADER = 'x-agent-session';
32
33
  * about waiting or turns, e.g. an idle prompt)
33
34
  * - `toolUseId` / `agentId` are optional; anything but a plain identifier is a 400
34
35
  * - `source` (SessionStart) must be startup / resume / clear / compact
36
+ * - A `SessionStart` of the orchestrator after a `compact` or `clear` answers the team roster as
37
+ * `additionalContext` (the context just lost the prompt that carried it; specs/2026-10-10-team-roster.md)
35
38
  * - `SubagentSendBack` (from the subagent guard) is recorded in the session's
36
39
  * run trace only; 202 with `recorded` = whether the session had a trace
37
40
  *
@@ -115,6 +118,20 @@ export function receiveAgentHook(req, res) {
115
118
  const signal = recordHookEvent(sessionName, event, notificationType);
116
119
  const turnChanged = AgentTurnStateService.getInstance().recordHook(sessionName, event, ids);
117
120
  const recorded = signal !== null || turnChanged;
121
+ // The orchestrator's context was just compacted or cleared: the roster in
122
+ // its start prompt is gone, so hand it back (never blocks: no note on failure).
123
+ if (event === 'SessionStart' &&
124
+ sessionName === ORCHESTRATOR_SESSION_NAME &&
125
+ ids.source !== undefined &&
126
+ TEAM_ROSTER_CONSTANTS.REINJECT_SOURCES.includes(ids.source)) {
127
+ void TeamRosterService.getInstance()
128
+ .renderForPrompt()
129
+ .catch(() => '')
130
+ .then((roster) => {
131
+ res.status(202).json({ success: true, recorded, ...(roster ? { additionalContext: roster } : {}) });
132
+ });
133
+ return;
134
+ }
118
135
  // A PostToolUse with a tool name may come back with notes the hook hands
119
136
  // to Claude Code as additionalContext: an owner message waiting in the
120
137
  // queue (handed over at this tool boundary instead of at the end of the
@@ -1 +1 @@
1
- {"version":3,"file":"agent-hooks.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/agent-hooks/agent-hooks.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-hooks.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/agent-hooks/agent-hooks.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Team charter endpoint (specs/2026-10-10-team-roster.md):
3
+ * `PUT /api/teams/:id/charter` with `{ charter }`.
4
+ *
5
+ * A charter is the few sentences that say what a team is responsible for.
6
+ * The orchestrator routes owner requests with it, so the team's own lead keeps
7
+ * it current. Allowed: the owner, the orchestrator, and a lead of that team.
8
+ * An empty charter clears it (the roster falls back to the description).
9
+ *
10
+ * @module controllers/team/team-charter.controller
11
+ */
12
+ import type { Request, Response } from 'express';
13
+ /**
14
+ * PUT /api/teams/:id/charter
15
+ *
16
+ * @param req - `:id` = team id; body `{ charter: string }`
17
+ * @param res - 200 `{ success, data: { teamId, charter } }`; 400 invalid text; 401/403 caller may not write it; 404 unknown team
18
+ */
19
+ export declare function setTeamCharter(req: Request, res: Response): Promise<void>;
20
+ //# sourceMappingURL=team-charter.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-charter.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team/team-charter.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQjD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD/E"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Team charter endpoint (specs/2026-10-10-team-roster.md):
3
+ * `PUT /api/teams/:id/charter` with `{ charter }`.
4
+ *
5
+ * A charter is the few sentences that say what a team is responsible for.
6
+ * The orchestrator routes owner requests with it, so the team's own lead keeps
7
+ * it current. Allowed: the owner, the orchestrator, and a lead of that team.
8
+ * An empty charter clears it (the roster falls back to the description).
9
+ *
10
+ * @module controllers/team/team-charter.controller
11
+ */
12
+ import { TEAM_ROSTER_CONSTANTS as C } from '../../constants.js';
13
+ import { StorageService } from '../../services/core/storage.service.js';
14
+ import { TeamRosterService } from '../../services/team-roster/team-roster.service.js';
15
+ import { resolveAgentCaller } from '../../utils/agent-caller.utils.js';
16
+ import { getTeamLeads } from '../../utils/team.utils.js';
17
+ import { memberSessionKeys } from '../../services/team/team-pause.registry.js';
18
+ /**
19
+ * PUT /api/teams/:id/charter
20
+ *
21
+ * @param req - `:id` = team id; body `{ charter: string }`
22
+ * @param res - 200 `{ success, data: { teamId, charter } }`; 400 invalid text; 401/403 caller may not write it; 404 unknown team
23
+ */
24
+ export async function setTeamCharter(req, res) {
25
+ try {
26
+ const body = (req.body ?? {});
27
+ if (typeof body.charter !== 'string') {
28
+ res.status(400).json({ success: false, error: 'charter must be a string (empty clears it)' });
29
+ return;
30
+ }
31
+ const charter = body.charter.replace(/\s+/g, ' ').trim();
32
+ if (charter.length > C.CHARTER_MAX_CHARS) {
33
+ res.status(400).json({ success: false, error: `charter is ${charter.length} chars; keep it to ${C.CHARTER_MAX_CHARS} (what the team owns, what it takes, what it avoids)` });
34
+ return;
35
+ }
36
+ const storage = StorageService.getInstance();
37
+ const team = (await storage.getTeams()).find((t) => t.id === req.params.id);
38
+ if (!team) {
39
+ res.status(404).json({ success: false, error: 'Team not found' });
40
+ return;
41
+ }
42
+ const caller = await resolveAgentCaller(req);
43
+ let by;
44
+ if (caller.anonymous) {
45
+ res.status(401).json({ success: false, error: 'Owner or agent credentials required' });
46
+ return;
47
+ }
48
+ else if (!caller.session) {
49
+ by = 'owner';
50
+ }
51
+ else if (caller.role === 'orchestrator') {
52
+ by = 'orchestrator';
53
+ }
54
+ else {
55
+ const lead = getTeamLeads(team).find((m) => memberSessionKeys(team.name, m).includes(caller.session));
56
+ if (!lead) {
57
+ res.status(403).json({ success: false, error: 'Only the lead of this team (or the orchestrator, or the owner) can write its charter' });
58
+ return;
59
+ }
60
+ by = caller.session;
61
+ }
62
+ team.updatedAt = new Date().toISOString();
63
+ if (charter) {
64
+ team.charter = charter;
65
+ team.charterUpdatedAt = team.updatedAt;
66
+ team.charterUpdatedBy = by;
67
+ }
68
+ else {
69
+ delete team.charter;
70
+ delete team.charterUpdatedAt;
71
+ delete team.charterUpdatedBy;
72
+ }
73
+ await storage.saveTeam(team);
74
+ TeamRosterService.getInstance().invalidate();
75
+ res.json({ success: true, data: { teamId: team.id, charter: charter || null } });
76
+ }
77
+ catch (err) {
78
+ res.status(500).json({ success: false, error: err instanceof Error ? err.message : String(err) });
79
+ }
80
+ }
81
+ //# sourceMappingURL=team-charter.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-charter.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team/team-charter.controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"team.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team/team.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkC9C;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAqE5D"}
1
+ {"version":3,"file":"team.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team/team.routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAmC9C;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAuE5D"}
@@ -3,6 +3,7 @@ import { listTeamCronTasks } from '../system/cron-task.controller.js';
3
3
  import { cacheResponse, invalidateCache } from '../../middleware/cache.middleware.js';
4
4
  import { REDIS_CONSTANTS } from '../../../../config/constants.js';
5
5
  import { createTeam, getTeams, getTeam, updateTeam, startTeam, stopTeam, getTeamWorkload, deleteTeam, getTeamMemberSession, addTeamMember, updateTeamMember, deleteTeamMember, startTeamMember, stopTeamMember, reportMemberReady, registerMemberStatus, generateMemberContext, injectContextIntoSession, refreshMemberContext, getTeamActivityStatus, updateTeamMemberRuntime, archiveTeam, setTeamLeadHandler } from './team.controller.js';
6
+ import { setTeamCharter } from './team-charter.controller.js';
6
7
  import { exportTeam, importTeam } from './team-export.controller.js';
7
8
  import { getTeamLeadShare, recordLeadSelfWork } from './team-lead-share.controller.js';
8
9
  import { getTeamModelTiers, proposeTierChange, startTeamModelTierReview, updateTeamModelTiers } from './team-model-tiers.controller.js';
@@ -34,6 +35,8 @@ export function createTeamRouter(context) {
34
35
  router.post('/:id/resume', invalidateCache(teamsCacheKeys), resumeTeamHandler.bind(context));
35
36
  // Who leads the team (owner / orchestrator) — specs/2026-09-30-team-lead-rule.md
36
37
  router.post('/:id/lead', invalidateCache(teamsCacheKeys), setTeamLeadHandler.bind(context));
38
+ // What the team is responsible for, written by its lead (specs/2026-10-10-team-roster.md)
39
+ router.put('/:id/charter', invalidateCache(teamsCacheKeys), setTeamCharter);
37
40
  router.get('/:id/workload', getTeamWorkload.bind(context));
38
41
  // Lead share of team tokens + "no member fits" records (crewly#1083)
39
42
  router.get('/:id/lead-share', getTeamLeadShare);
@@ -1 +1 @@
1
- {"version":3,"file":"team.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team/team.routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"team.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team/team.routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Team roster endpoints (specs/2026-10-10-team-roster.md), mounted at
3
+ * `/api/team-roster`:
4
+ *
5
+ * - `GET /` — the roster (`?format=json` for structured data, default markdown; `?fresh=1` rebuilds)
6
+ * - `GET /find?q=` — ranked owner candidates for a request (`&limit=`)
7
+ *
8
+ * @module controllers/team-roster/team-roster.controller
9
+ */
10
+ import { Router, type Request, type Response } from 'express';
11
+ /**
12
+ * GET /api/team-roster
13
+ *
14
+ * @param req - Query `format` (`md` | `json`), `fresh`, `maxTokens`
15
+ * @param res - 200 `{ success, data }` where `data` is markdown or the roster; 500 on failure
16
+ */
17
+ export declare function getTeamRoster(req: Request, res: Response): Promise<void>;
18
+ /**
19
+ * GET /api/team-roster/find?q=<request>
20
+ *
21
+ * @param req - Query `q` (required), `limit`
22
+ * @param res - 200 `{ success, data: OwnerCandidate[] }`; 400 without `q`
23
+ */
24
+ export declare function findTeamOwner(req: Request, res: Response): Promise<void>;
25
+ /**
26
+ * Create the team roster router.
27
+ *
28
+ * @returns Router for `/api/team-roster`
29
+ */
30
+ export declare function createTeamRosterRouter(): Router;
31
+ //# sourceMappingURL=team-roster.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-roster.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team-roster/team-roster.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAC;AAK9D;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAc9E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAa9E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAK/C"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Team roster endpoints (specs/2026-10-10-team-roster.md), mounted at
3
+ * `/api/team-roster`:
4
+ *
5
+ * - `GET /` — the roster (`?format=json` for structured data, default markdown; `?fresh=1` rebuilds)
6
+ * - `GET /find?q=` — ranked owner candidates for a request (`&limit=`)
7
+ *
8
+ * @module controllers/team-roster/team-roster.controller
9
+ */
10
+ import { Router } from 'express';
11
+ import { TEAM_ROSTER_CONSTANTS as C } from '../../constants.js';
12
+ import { TeamRosterService } from '../../services/team-roster/team-roster.service.js';
13
+ import { renderRoster } from '../../services/team-roster/team-roster.builder.js';
14
+ /**
15
+ * GET /api/team-roster
16
+ *
17
+ * @param req - Query `format` (`md` | `json`), `fresh`, `maxTokens`
18
+ * @param res - 200 `{ success, data }` where `data` is markdown or the roster; 500 on failure
19
+ */
20
+ export async function getTeamRoster(req, res) {
21
+ try {
22
+ const service = TeamRosterService.getInstance();
23
+ const teams = await service.getRoster({ fresh: req.query.fresh === '1' || req.query.fresh === 'true' });
24
+ if (req.query.format === 'json') {
25
+ res.json({ success: true, data: teams });
26
+ return;
27
+ }
28
+ const asked = Number(req.query.maxTokens);
29
+ const budget = Number.isFinite(asked) && asked >= 200 ? Math.min(asked, 20_000) : C.PROMPT_MAX_TOKENS * 2;
30
+ res.json({ success: true, data: renderRoster(teams, budget) });
31
+ }
32
+ catch (err) {
33
+ res.status(500).json({ success: false, error: err instanceof Error ? err.message : String(err) });
34
+ }
35
+ }
36
+ /**
37
+ * GET /api/team-roster/find?q=<request>
38
+ *
39
+ * @param req - Query `q` (required), `limit`
40
+ * @param res - 200 `{ success, data: OwnerCandidate[] }`; 400 without `q`
41
+ */
42
+ export async function findTeamOwner(req, res) {
43
+ const q = typeof req.query.q === 'string' ? req.query.q.trim() : '';
44
+ if (!q) {
45
+ res.status(400).json({ success: false, error: 'q is required: the owner request to route' });
46
+ return;
47
+ }
48
+ try {
49
+ const limit = Number(req.query.limit);
50
+ const data = await TeamRosterService.getInstance().find(q, Number.isFinite(limit) && limit > 0 ? limit : undefined);
51
+ res.json({ success: true, data });
52
+ }
53
+ catch (err) {
54
+ res.status(500).json({ success: false, error: err instanceof Error ? err.message : String(err) });
55
+ }
56
+ }
57
+ /**
58
+ * Create the team roster router.
59
+ *
60
+ * @returns Router for `/api/team-roster`
61
+ */
62
+ export function createTeamRosterRouter() {
63
+ const router = Router();
64
+ router.get('/', getTeamRoster);
65
+ router.get('/find', findTeamOwner);
66
+ return router;
67
+ }
68
+ //# sourceMappingURL=team-roster.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-roster.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team-roster/team-roster.controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":"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"}
@@ -2519,6 +2519,12 @@ export class CrewlyServer {
2519
2519
  .sort((a, b) => a.createdAt - b.createdAt)[0];
2520
2520
  return reply ? { text: reply.content, at: new Date(reply.createdAt).toISOString() } : null;
2521
2521
  },
2522
+ // A card whose project ticket is already done / cancelled waits on nothing.
2523
+ isCardTicketClosed: async (ticket) => {
2524
+ const { ProjectTicketService } = await import('./services/project-tickets/project-ticket.service.js');
2525
+ const found = await ProjectTicketService.getInstance().get(ticket.projectPath, ticket.id);
2526
+ return found?.status === 'done' || found?.status === 'cancelled';
2527
+ },
2522
2528
  store: new BriefingStateStore(),
2523
2529
  }));
2524
2530
  }
@@ -2601,6 +2607,9 @@ export class CrewlyServer {
2601
2607
  error: talkErr instanceof Error ? talkErr.message : String(talkErr),
2602
2608
  });
2603
2609
  }
2610
+ // "Let me check with the teams" (Drive kickoff): set below, once the
2611
+ // status snapshot sync exists, and read by the Drive handler at run time.
2612
+ let driveStatusCheck = null;
2604
2613
  // Drive mode (specs/2026-10-08-drive-mode.md §7): Crewly Cloud hosts
2605
2614
  // the voice session; this machine delivers the owner's words to its
2606
2615
  // agents (tagged drive-mode, kept off Slack), carries their
@@ -2703,6 +2712,9 @@ export class CrewlyServer {
2703
2712
  },
2704
2713
  agentExists: async (agentSession) => buildAgentRoster(await this.storageService.getTeams()).some((a) => a.agentSession === agentSession),
2705
2714
  store: new DriveConversationStore(),
2715
+ refreshStatus: async () => {
2716
+ await driveStatusCheck?.run();
2717
+ },
2706
2718
  // Keep-warm (specs/2026-10-09-drive-mode-v3.md §5): an agent the owner
2707
2719
  // names is started now if stopped; while warm its start goes ahead of
2708
2720
  // ordinary starts and nothing stops it for being idle.
@@ -2796,6 +2808,29 @@ export class CrewlyServer {
2796
2808
  ],
2797
2809
  });
2798
2810
  briefingSync.start();
2811
+ // Drive opened: ask the agents holding the owner's open items to
2812
+ // bring them up to date, then rebuild and upload (no caches).
2813
+ {
2814
+ const { DriveStatusCheck } = await import('./services/drive/drive-status-check.js');
2815
+ const checkAgents = this.apiController.agentRegistrationService;
2816
+ driveStatusCheck = new DriveStatusCheck({
2817
+ targets: async () => (await getBriefingService()?.statusCheckTargets()) ?? [],
2818
+ isRunning: (session) => {
2819
+ try {
2820
+ return getSessionBackendSync()?.sessionExists(session) ?? false;
2821
+ }
2822
+ catch {
2823
+ return false;
2824
+ }
2825
+ },
2826
+ nudge: async (session, text) => (await checkAgents.sendMessageToAgent(session, text)).success,
2827
+ rebuild: async () => {
2828
+ sourceCache.invalidatePool();
2829
+ sourceCache.invalidateTickets();
2830
+ await briefingSync.syncNow(true);
2831
+ },
2832
+ });
2833
+ }
2799
2834
  }
2800
2835
  catch (briefingSyncErr) {
2801
2836
  this.logger.warn('Drive mode status briefing wiring skipped', {