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.
- package/config/hooks/agent-status/report.sh +11 -7
- package/config/roles/orchestrator/fragments/recovery.md +3 -0
- package/config/roles/orchestrator/prompt.md +3 -3
- package/config/roles/team-leader/tl-addon.md +6 -0
- package/config/skills/orchestrator/find-owner-for/SKILL.md +43 -0
- package/config/skills/orchestrator/find-owner-for/execute.sh +37 -0
- package/config/skills/orchestrator/team-roster/SKILL.md +44 -0
- package/config/skills/orchestrator/team-roster/execute.sh +27 -0
- package/config/skills/team-leader/update-charter/SKILL.md +48 -0
- package/config/skills/team-leader/update-charter/execute.sh +21 -0
- package/dist/backend/backend/src/constants.d.ts +75 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +60 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts +2 -0
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +18 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team-charter.controller.d.ts +20 -0
- package/dist/backend/backend/src/controllers/team/team-charter.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team/team-charter.controller.js +81 -0
- package/dist/backend/backend/src/controllers/team/team-charter.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/team/team.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.routes.js +3 -0
- package/dist/backend/backend/src/controllers/team/team.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/team-roster/team-roster.controller.d.ts +31 -0
- package/dist/backend/backend/src/controllers/team-roster/team-roster.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/team-roster/team-roster.controller.js +68 -0
- package/dist/backend/backend/src/controllers/team-roster/team-roster.controller.js.map +1 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +35 -0
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/models/Team.d.ts +3 -0
- package/dist/backend/backend/src/models/Team.d.ts.map +1 -1
- package/dist/backend/backend/src/models/Team.js +3 -0
- package/dist/backend/backend/src/models/Team.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +3 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/index.js +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/index.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 +4 -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/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -2
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/team-roster.module.d.ts +44 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/team-roster.module.d.ts.map +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/team-roster.module.js +61 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/team-roster.module.js.map +1 -0
- package/dist/backend/backend/src/services/briefing/briefing-review.d.ts +98 -0
- package/dist/backend/backend/src/services/briefing/briefing-review.d.ts.map +1 -0
- package/dist/backend/backend/src/services/briefing/briefing-review.js +138 -0
- package/dist/backend/backend/src/services/briefing/briefing-review.js.map +1 -0
- package/dist/backend/backend/src/services/briefing/briefing.service.d.ts +21 -0
- package/dist/backend/backend/src/services/briefing/briefing.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/briefing/briefing.service.js +37 -5
- package/dist/backend/backend/src/services/briefing/briefing.service.js.map +1 -1
- package/dist/backend/backend/src/services/briefing/briefing.types.d.ts +5 -0
- package/dist/backend/backend/src/services/briefing/briefing.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/briefing/briefing.types.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts +10 -0
- package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-agent.service.js +6 -0
- package/dist/backend/backend/src/services/drive/drive-agent.service.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.d.ts +2 -0
- package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.d.ts.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.js +3 -1
- package/dist/backend/backend/src/services/drive/drive-briefing-snapshot.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts +1 -1
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.js +2 -2
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-status-check.d.ts +77 -0
- package/dist/backend/backend/src/services/drive/drive-status-check.d.ts.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-status-check.js +96 -0
- package/dist/backend/backend/src/services/drive/drive-status-check.js.map +1 -0
- package/dist/backend/backend/src/services/team-roster/team-roster.builder.d.ts +147 -0
- package/dist/backend/backend/src/services/team-roster/team-roster.builder.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-roster/team-roster.builder.js +492 -0
- package/dist/backend/backend/src/services/team-roster/team-roster.builder.js.map +1 -0
- package/dist/backend/backend/src/services/team-roster/team-roster.service.d.ts +79 -0
- package/dist/backend/backend/src/services/team-roster/team-roster.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/team-roster/team-roster.service.js +145 -0
- package/dist/backend/backend/src/services/team-roster/team-roster.service.js.map +1 -0
- package/dist/backend/backend/src/types/index.d.ts +12 -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/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +75 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +60 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/models/Team.d.ts +3 -0
- package/dist/cli/backend/src/models/Team.d.ts.map +1 -1
- package/dist/cli/backend/src/models/Team.js +3 -0
- package/dist/cli/backend/src/models/Team.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js +4 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/prompt-assembly.service.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +2 -2
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/team-roster.module.d.ts +44 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-roster.module.d.ts.map +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-roster.module.js +61 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/team-roster.module.js.map +1 -0
- package/dist/cli/backend/src/services/team-roster/team-roster.builder.d.ts +147 -0
- package/dist/cli/backend/src/services/team-roster/team-roster.builder.d.ts.map +1 -0
- package/dist/cli/backend/src/services/team-roster/team-roster.builder.js +492 -0
- package/dist/cli/backend/src/services/team-roster/team-roster.builder.js.map +1 -0
- package/dist/cli/backend/src/services/team-roster/team-roster.service.d.ts +79 -0
- package/dist/cli/backend/src/services/team-roster/team-roster.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/team-roster/team-roster.service.js +145 -0
- package/dist/cli/backend/src/services/team-roster/team-roster.service.js.map +1 -0
- package/dist/cli/backend/src/types/index.d.ts +12 -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/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":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;
|
|
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;
|
|
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":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,qBAAqB,IAAI,CAAC,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mDAAmD,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,mDAAmD,CAAC;AAEjF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAY,EAAE,GAAa;IAC9D,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,iBAAiB,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC;QACxG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACjC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACzC,OAAO;QACR,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC1G,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAY,EAAE,GAAa;IAC9D,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,IAAI,CAAC,CAAC,EAAE,CAAC;QACR,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC,CAAC;QAC7F,OAAO;IACR,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACpH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACrC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":";AA4CA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA+TjD,qBAAa,YAAY;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,EAAE,CAAiB;IAC3B,iFAAiF;IACjF,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAqE;IACnF,gFAAgF;IAChF,OAAO,CAAC,iBAAiB,CAAC,CAAyD;IAEnF,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,4BAA4B,CAAgC;IACpE,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,wBAAwB,CAA4B;IAC5D,OAAO,CAAC,eAAe,CAAmB;IAC1C,qEAAqE;IACrE,OAAO,CAAC,qBAAqB,CAAsC;IACnE,OAAO,CAAC,sBAAsB,CAAuC;IACrE,OAAO,CAAC,sBAAsB,CAAiD;IAC/E,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,kGAAkG;IAClG,OAAO,CAAC,sBAAsB,CAAuC;IAGrE,OAAO,CAAC,+BAA+B,CAAgD;IACvF,+FAA+F;IAC/F,OAAO,CAAC,oBAAoB,CAAqC;IACjE,8HAA8H;IAC9H,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,OAAO,CAAC,6BAA6B,CAA8C;IACnF,OAAO,CAAC,wBAAwB,CAAyC;IACzE,OAAO,CAAC,2BAA2B,CAA+B;IAClE,OAAO,CAAC,0BAA0B,CAA8B;IAChE,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,kBAAkB,CAA0C;IACpE,8DAA8D;IAC9D,OAAO,CAAC,iBAAiB,CAAmG;IAK5H,OAAO,CAAC,aAAa,CAAuE;IAC5F,OAAO,CAAC,gBAAgB,CAET;IAGf,OAAO,CAAC,cAAc,CAAS;IAC/B,oEAAoE;IACpE,OAAO,CAAC,qBAAqB,CAA6C;IAC1E,OAAO,CAAC,qBAAqB,CAA2G;IACxI,0EAA0E;IAC1E,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,gBAAgB,CAAiG;IACzH,oFAAoF;IACpF,OAAO,CAAC,oBAAoB,CAAK;IACjC,2EAA2E;IAC3E,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,yGAAyG;IACzG,OAAO,CAAC,sBAAsB,CAAuB;IACrD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAMhC;IACH,oGAAoG;IACpG,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,wBAAwB,CAA+B;gBAEnD,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAsE3C,OAAO,CAAC,kBAAkB;IAuuC1B,OAAO,CAAC,mBAAmB;IAuE3B,OAAO,CAAC,eAAe;IA4MvB,OAAO,CAAC,kBAAkB;IA0BpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
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', {
|