crewly 1.20.406 → 1.20.408

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 (70) hide show
  1. package/dist/backend/backend/src/constants.d.ts +34 -0
  2. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  3. package/dist/backend/backend/src/constants.js +34 -0
  4. package/dist/backend/backend/src/constants.js.map +1 -1
  5. package/dist/backend/backend/src/controllers/activity/activity.controller.d.ts +29 -0
  6. package/dist/backend/backend/src/controllers/activity/activity.controller.d.ts.map +1 -0
  7. package/dist/backend/backend/src/controllers/activity/activity.controller.js +77 -0
  8. package/dist/backend/backend/src/controllers/activity/activity.controller.js.map +1 -0
  9. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/team/team.controller.js +49 -0
  11. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  12. package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -1
  13. package/dist/backend/backend/src/routes/modules/system.routes.js +3 -0
  14. package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
  15. package/dist/backend/backend/src/services/activity/activity-log.service.d.ts +192 -0
  16. package/dist/backend/backend/src/services/activity/activity-log.service.d.ts.map +1 -0
  17. package/dist/backend/backend/src/services/activity/activity-log.service.js +343 -0
  18. package/dist/backend/backend/src/services/activity/activity-log.service.js.map +1 -0
  19. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.d.ts.map +1 -1
  20. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js +7 -0
  21. package/dist/backend/backend/src/services/agent/agent-heartbeat-monitor.service.js.map +1 -1
  22. package/dist/backend/backend/src/services/decisions/decision.service.d.ts +13 -0
  23. package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  24. package/dist/backend/backend/src/services/decisions/decision.service.js +39 -0
  25. package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
  26. package/dist/backend/backend/src/services/decisions/decision.wiring.d.ts.map +1 -1
  27. package/dist/backend/backend/src/services/decisions/decision.wiring.js +2 -0
  28. package/dist/backend/backend/src/services/decisions/decision.wiring.js.map +1 -1
  29. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +8 -0
  30. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  31. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +24 -5
  32. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  33. package/dist/backend/build-info.json +2 -2
  34. package/dist/cli/backend/src/constants.d.ts +34 -0
  35. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  36. package/dist/cli/backend/src/constants.js +34 -0
  37. package/dist/cli/backend/src/constants.js.map +1 -1
  38. package/dist/cli/backend/src/middleware/agent-origin-correction.d.ts +31 -0
  39. package/dist/cli/backend/src/middleware/agent-origin-correction.d.ts.map +1 -0
  40. package/dist/cli/backend/src/middleware/agent-origin-correction.js +31 -0
  41. package/dist/cli/backend/src/middleware/agent-origin-correction.js.map +1 -0
  42. package/dist/cli/backend/src/middleware/api-token.middleware.d.ts +171 -0
  43. package/dist/cli/backend/src/middleware/api-token.middleware.d.ts.map +1 -0
  44. package/dist/cli/backend/src/middleware/api-token.middleware.js +329 -0
  45. package/dist/cli/backend/src/middleware/api-token.middleware.js.map +1 -0
  46. package/dist/cli/backend/src/middleware/caller-identity.middleware.d.ts +290 -0
  47. package/dist/cli/backend/src/middleware/caller-identity.middleware.d.ts.map +1 -0
  48. package/dist/cli/backend/src/middleware/caller-identity.middleware.js +658 -0
  49. package/dist/cli/backend/src/middleware/caller-identity.middleware.js.map +1 -0
  50. package/dist/cli/backend/src/middleware/require-auth.middleware.d.ts +60 -0
  51. package/dist/cli/backend/src/middleware/require-auth.middleware.d.ts.map +1 -0
  52. package/dist/cli/backend/src/middleware/require-auth.middleware.js +127 -0
  53. package/dist/cli/backend/src/middleware/require-auth.middleware.js.map +1 -0
  54. package/dist/cli/backend/src/services/activity/activity-log.service.d.ts +192 -0
  55. package/dist/cli/backend/src/services/activity/activity-log.service.d.ts.map +1 -0
  56. package/dist/cli/backend/src/services/activity/activity-log.service.js +343 -0
  57. package/dist/cli/backend/src/services/activity/activity-log.service.js.map +1 -0
  58. package/dist/cli/backend/src/services/core/peer-process.service.d.ts +168 -0
  59. package/dist/cli/backend/src/services/core/peer-process.service.d.ts.map +1 -0
  60. package/dist/cli/backend/src/services/core/peer-process.service.js +352 -0
  61. package/dist/cli/backend/src/services/core/peer-process.service.js.map +1 -0
  62. package/dist/cli/backend/src/services/decisions/decision.service.d.ts +13 -0
  63. package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
  64. package/dist/cli/backend/src/services/decisions/decision.service.js +39 -0
  65. package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
  66. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +8 -0
  67. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  68. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +24 -5
  69. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  70. package/package.json +1 -1
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Activity log API (crewly#881).
3
+ *
4
+ * - `GET /api/activity?actorType=&actorId=&action=&targetType=&targetId=&since=&until=&limit=`
5
+ * — owner only, read-only: entries of the append-only activity log, newest
6
+ * first. `action` is exact or a dotted prefix (`team.`); `since` / `until`
7
+ * are ISO timestamps or `YYYY-MM-DD` (until a bare date = end of that day).
8
+ *
9
+ * @module controllers/activity/activity.controller
10
+ */
11
+ import type { Router } from 'express';
12
+ import { type ActivityLogService, type ActivityQuery } from '../../services/activity/activity-log.service.js';
13
+ /**
14
+ * Parse the query string of GET /api/activity.
15
+ *
16
+ * @param q - `req.query`
17
+ * @returns The query, or an error message for a bad value
18
+ */
19
+ export declare function parseActivityQuery(q: Record<string, unknown>): ActivityQuery | {
20
+ error: string;
21
+ };
22
+ /**
23
+ * Register the route.
24
+ *
25
+ * @param router - API router (mounted at `/api`)
26
+ * @param log - The log to read (tests inject one)
27
+ */
28
+ export declare function registerActivityRoutes(router: Router, log?: () => ActivityLogService): void;
29
+ //# sourceMappingURL=activity.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/activity/activity.controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EAAuC,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAKnJ;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAoChG;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,kBAAmC,GAAG,IAAI,CAc3G"}
@@ -0,0 +1,77 @@
1
+ import { ACTIVITY_LOG_CONSTANTS } from '../../constants.js';
2
+ import { requireOwner } from '../../middleware/caller-identity.middleware.js';
3
+ import { getActivityLog, isActivityActorType } from '../../services/activity/activity-log.service.js';
4
+ const DAY_MS = 24 * 60 * 60 * 1000;
5
+ const BARE_DATE = /^\d{4}-\d{2}-\d{2}$/;
6
+ /**
7
+ * Parse the query string of GET /api/activity.
8
+ *
9
+ * @param q - `req.query`
10
+ * @returns The query, or an error message for a bad value
11
+ */
12
+ export function parseActivityQuery(q) {
13
+ const Q = ACTIVITY_LOG_CONSTANTS.QUERY;
14
+ const str = (key) => {
15
+ const v = q[key];
16
+ return typeof v === 'string' && v.trim() ? v.trim() : undefined;
17
+ };
18
+ const date = (key, endOfDay) => {
19
+ const v = str(key);
20
+ if (!v)
21
+ return undefined;
22
+ const ms = Date.parse(v);
23
+ if (Number.isNaN(ms))
24
+ return { error: `${key} must be an ISO timestamp or YYYY-MM-DD` };
25
+ return new Date(BARE_DATE.test(v) && endOfDay ? ms + DAY_MS - 1 : ms).toISOString();
26
+ };
27
+ const actorType = str(Q.ACTOR_TYPE);
28
+ if (actorType !== undefined && !isActivityActorType(actorType))
29
+ return { error: `${Q.ACTOR_TYPE} must be owner, agent or system` };
30
+ const since = date(Q.SINCE, false);
31
+ if (since && typeof since === 'object')
32
+ return since;
33
+ const until = date(Q.UNTIL, true);
34
+ if (until && typeof until === 'object')
35
+ return until;
36
+ let limit;
37
+ const rawLimit = str(Q.LIMIT);
38
+ if (rawLimit !== undefined) {
39
+ limit = Number(rawLimit);
40
+ if (!Number.isInteger(limit) || limit < 1)
41
+ return { error: `${Q.LIMIT} must be a positive integer` };
42
+ limit = Math.min(limit, ACTIVITY_LOG_CONSTANTS.MAX_LIMIT);
43
+ }
44
+ return {
45
+ ...(actorType ? { actorType } : {}),
46
+ ...(str(Q.ACTOR_ID) ? { actorId: str(Q.ACTOR_ID) } : {}),
47
+ ...(str(Q.ACTION) ? { action: str(Q.ACTION) } : {}),
48
+ ...(str(Q.TARGET_TYPE) ? { targetType: str(Q.TARGET_TYPE) } : {}),
49
+ ...(str(Q.TARGET_ID) ? { targetId: str(Q.TARGET_ID) } : {}),
50
+ ...(since ? { since } : {}),
51
+ ...(until ? { until } : {}),
52
+ ...(limit !== undefined ? { limit } : {}),
53
+ };
54
+ }
55
+ /**
56
+ * Register the route.
57
+ *
58
+ * @param router - API router (mounted at `/api`)
59
+ * @param log - The log to read (tests inject one)
60
+ */
61
+ export function registerActivityRoutes(router, log = getActivityLog) {
62
+ router.get('/activity', requireOwner, async (req, res) => {
63
+ const query = parseActivityQuery(req.query);
64
+ if ('error' in query) {
65
+ res.status(400).json({ success: false, error: query.error });
66
+ return;
67
+ }
68
+ try {
69
+ const entries = await log().list(query);
70
+ res.json({ success: true, data: { count: entries.length, limit: query.limit ?? ACTIVITY_LOG_CONSTANTS.DEFAULT_LIMIT, entries } });
71
+ }
72
+ catch (err) {
73
+ res.status(500).json({ success: false, error: err instanceof Error ? err.message : String(err) });
74
+ }
75
+ });
76
+ }
77
+ //# sourceMappingURL=activity.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.controller.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/activity/activity.controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"team.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team/team.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"team.controller.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/team/team.controller.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,7 @@ import { usageLimitedView } from '../../services/runtime-fallback/usage-limit-st
32
32
  import { clearOwnerStopped, markOwnerStopped } from '../../services/agent/owner-stopped.registry.js';
33
33
  import { isTeamPausedNow, pausedRefusalMessage } from '../../services/team/team-pause.registry.js';
34
34
  import { reportOwnerThreadBlocking } from '../../services/messaging/owner-thread-sentinel.service.js';
35
+ import { actorFromRequest, recordActivity, summarizeChange } from '../../services/activity/activity-log.service.js';
35
36
  const logger = LoggerService.getInstance().createComponentLogger('TeamController');
36
37
  /**
37
38
  * Module-level EventBusService instance, injected at startup.
@@ -1127,6 +1128,12 @@ export async function createTeam(req, res) {
1127
1128
  ...(qualityGate ? { qualityGate } : {}),
1128
1129
  };
1129
1130
  await this.storageService.saveTeam(team);
1131
+ recordActivity({
1132
+ actor: actorFromRequest(req),
1133
+ action: 'team.created',
1134
+ target: { type: 'team', id: team.id, name: team.name },
1135
+ after: { members: teamMembers.map((m) => m.name), projectIds: team.projectIds, ...(parentTeamId ? { parentTeamId } : {}), ...(templateId ? { templateId } : {}) },
1136
+ });
1130
1137
  for (const member of teamMembers) {
1131
1138
  if (member.role === 'tpm') {
1132
1139
  // TPM uses file-based workflow (no duplicate messages)
@@ -1621,6 +1628,12 @@ export async function deleteTeam(req, res) {
1621
1628
  await this.storageService.saveTeam(child);
1622
1629
  }
1623
1630
  await this.storageService.deleteTeam(id);
1631
+ recordActivity({
1632
+ actor: actorFromRequest(req),
1633
+ action: 'team.deleted',
1634
+ target: { type: 'team', id, name: team.name },
1635
+ before: { members: (team.members ?? []).map((m) => m.name), projectIds: team.projectIds ?? [] },
1636
+ });
1624
1637
  res.json({ success: true, message: 'Team terminated successfully' });
1625
1638
  }
1626
1639
  catch (error) {
@@ -1685,6 +1698,12 @@ export async function addTeamMember(req, res) {
1685
1698
  team.members.push(newMember);
1686
1699
  team.updatedAt = new Date().toISOString();
1687
1700
  await this.storageService.saveTeam(team);
1701
+ recordActivity({
1702
+ actor: actorFromRequest(req),
1703
+ action: 'team.member.added',
1704
+ target: { type: 'member', id: newMember.id, name: newMember.name },
1705
+ after: { teamId: team.id, team: team.name, role: newMember.role, runtimeType: newMember.runtimeType },
1706
+ });
1688
1707
  res.json({ success: true, data: newMember, message: 'Team member added successfully' });
1689
1708
  }
1690
1709
  catch (error) {
@@ -1741,9 +1760,16 @@ export async function updateTeamMember(req, res) {
1741
1760
  delete updatedMember.dedicatedTo;
1742
1761
  if ('tier' in updates && !updates.tier)
1743
1762
  delete updatedMember.tier;
1763
+ const memberBefore = team.members[memberIndex];
1744
1764
  team.members[memberIndex] = updatedMember;
1745
1765
  team.updatedAt = new Date().toISOString();
1746
1766
  await this.storageService.saveTeam(team);
1767
+ recordActivity({
1768
+ actor: actorFromRequest(req),
1769
+ action: 'team.member.updated',
1770
+ target: { type: 'member', id: updatedMember.id, name: updatedMember.name },
1771
+ ...summarizeChange({ ...memberBefore, updatedAt: undefined }, { ...updatedMember, updatedAt: undefined }),
1772
+ });
1747
1773
  res.json({ success: true, data: updatedMember, message: 'Team member updated successfully' });
1748
1774
  }
1749
1775
  catch (error) {
@@ -1777,6 +1803,12 @@ export async function deleteTeamMember(req, res) {
1777
1803
  team.members.splice(memberIndex, 1);
1778
1804
  team.updatedAt = new Date().toISOString();
1779
1805
  await this.storageService.saveTeam(team);
1806
+ recordActivity({
1807
+ actor: actorFromRequest(req),
1808
+ action: 'team.member.removed',
1809
+ target: { type: 'member', id: member.id, name: member.name },
1810
+ before: { teamId: team.id, team: team.name, role: member.role },
1811
+ });
1780
1812
  res.json({ success: true, message: 'Team member removed successfully' });
1781
1813
  }
1782
1814
  catch (error) {
@@ -2894,6 +2926,13 @@ export async function updateTeamMemberRuntime(req, res) {
2894
2926
  runtimeType: runtimeType,
2895
2927
  updatedAt: new Date().toISOString()
2896
2928
  };
2929
+ recordActivity({
2930
+ actor: actorFromRequest(req),
2931
+ action: 'team.member.updated',
2932
+ target: { type: 'member', id: updatedMember.id, name: updatedMember.name },
2933
+ before: { runtimeType: team.members[memberIndex].runtimeType },
2934
+ after: { runtimeType },
2935
+ });
2897
2936
  team.members[memberIndex] = updatedMember;
2898
2937
  team.updatedAt = new Date().toISOString();
2899
2938
  await this.storageService.saveTeam(team);
@@ -2971,6 +3010,8 @@ export async function updateTeam(req, res) {
2971
3010
  return;
2972
3011
  }
2973
3012
  const team = teams[teamIndex];
3013
+ // Activity log (crewly#881): the shallow team fields before this edit; members are logged by their own handlers.
3014
+ const teamBefore = { ...team, members: undefined, updatedAt: undefined };
2974
3015
  // Update allowed fields
2975
3016
  if (updates.projectIds !== undefined) {
2976
3017
  team.projectIds = updates.projectIds;
@@ -3177,6 +3218,12 @@ export async function updateTeam(req, res) {
3177
3218
  // Update timestamp
3178
3219
  team.updatedAt = new Date().toISOString();
3179
3220
  await this.storageService.saveTeam(team);
3221
+ recordActivity({
3222
+ actor: actorFromRequest(req),
3223
+ action: 'team.updated',
3224
+ target: { type: 'team', id: team.id, name: team.name },
3225
+ ...summarizeChange(teamBefore, { ...team, members: undefined, updatedAt: undefined }),
3226
+ });
3180
3227
  res.json({
3181
3228
  success: true,
3182
3229
  data: team,
@@ -3258,6 +3305,7 @@ export async function setTeamLeadHandler(req, res) {
3258
3305
  const result = setTeamLead(team, member.id, mode);
3259
3306
  team.updatedAt = new Date().toISOString();
3260
3307
  await this.storageService.saveTeam(team);
3308
+ recordActivity({ actor: actorFromRequest(req), action: 'team.lead.changed', target: { type: 'team', id: team.id, name: team.name }, after: { lead: member.name, memberId: member.id, mode } });
3261
3309
  logger.info('Team lead changed', {
3262
3310
  teamId: team.id,
3263
3311
  teamName: team.name,
@@ -3323,6 +3371,7 @@ export async function archiveTeam(req, res) {
3323
3371
  team.updatedAt = new Date().toISOString();
3324
3372
  await this.storageService.saveTeam(team);
3325
3373
  logger.info(`Team ${archived ? 'archived' : 'unarchived'}`, { teamId: id, teamName: team.name });
3374
+ recordActivity({ actor: actorFromRequest(req), action: archived ? 'team.archived' : 'team.unarchived', target: { type: 'team', id, name: team.name } });
3326
3375
  res.json({
3327
3376
  success: true,
3328
3377
  data: team,