crewly 1.20.277 → 1.20.279

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 (96) hide show
  1. package/config/skills/agent/core/reply/SKILL.md +2 -0
  2. package/config/skills/agent/core/reply/execute.sh +15 -1
  3. package/config/skills/agent/core/reply/execute.test.sh +7 -0
  4. package/dist/backend/backend/src/constants.d.ts +64 -0
  5. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  6. package/dist/backend/backend/src/constants.js +64 -0
  7. package/dist/backend/backend/src/constants.js.map +1 -1
  8. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts +9 -0
  9. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +23 -0
  11. package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
  12. package/dist/backend/backend/src/index.d.ts.map +1 -1
  13. package/dist/backend/backend/src/index.js +121 -3
  14. package/dist/backend/backend/src/index.js.map +1 -1
  15. package/dist/backend/backend/src/services/briefing/briefing-cards.d.ts +99 -0
  16. package/dist/backend/backend/src/services/briefing/briefing-cards.d.ts.map +1 -0
  17. package/dist/backend/backend/src/services/briefing/briefing-cards.js +156 -0
  18. package/dist/backend/backend/src/services/briefing/briefing-cards.js.map +1 -0
  19. package/dist/backend/backend/src/services/briefing/briefing.service.d.ts +8 -0
  20. package/dist/backend/backend/src/services/briefing/briefing.service.d.ts.map +1 -1
  21. package/dist/backend/backend/src/services/briefing/briefing.service.js +31 -9
  22. package/dist/backend/backend/src/services/briefing/briefing.service.js.map +1 -1
  23. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +33 -1
  24. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  25. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +33 -0
  26. package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  27. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  28. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  29. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +37 -0
  30. package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  31. package/dist/backend/backend/src/services/cloud/cloud-talk-inbound.service.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/cloud/cloud-talk-inbound.service.js +4 -0
  33. package/dist/backend/backend/src/services/cloud/cloud-talk-inbound.service.js.map +1 -1
  34. package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts +228 -0
  35. package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts.map +1 -0
  36. package/dist/backend/backend/src/services/drive/drive-agent.service.js +412 -0
  37. package/dist/backend/backend/src/services/drive/drive-agent.service.js.map +1 -0
  38. package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts +92 -0
  39. package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts.map +1 -0
  40. package/dist/backend/backend/src/services/drive/drive-cloud.contract.js +113 -0
  41. package/dist/backend/backend/src/services/drive/drive-cloud.contract.js.map +1 -0
  42. package/dist/backend/backend/src/services/drive/drive-conversation.store.d.ts +86 -0
  43. package/dist/backend/backend/src/services/drive/drive-conversation.store.d.ts.map +1 -0
  44. package/dist/backend/backend/src/services/drive/drive-conversation.store.js +102 -0
  45. package/dist/backend/backend/src/services/drive/drive-conversation.store.js.map +1 -0
  46. package/dist/backend/backend/src/services/drive/drive-recall.d.ts +65 -0
  47. package/dist/backend/backend/src/services/drive/drive-recall.d.ts.map +1 -0
  48. package/dist/backend/backend/src/services/drive/drive-recall.js +91 -0
  49. package/dist/backend/backend/src/services/drive/drive-recall.js.map +1 -0
  50. package/dist/backend/backend/src/services/drive/drive-row.utils.d.ts +19 -0
  51. package/dist/backend/backend/src/services/drive/drive-row.utils.d.ts.map +1 -0
  52. package/dist/backend/backend/src/services/drive/drive-row.utils.js +20 -0
  53. package/dist/backend/backend/src/services/drive/drive-row.utils.js.map +1 -0
  54. package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/open-items/open-items.service.js +14 -2
  56. package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
  57. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +4 -0
  59. package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  60. package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/slack/slack-initializer.js +2 -1
  62. package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
  63. package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  64. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +7 -1
  65. package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  66. package/dist/backend/backend/src/services/talk/talk-live-token.service.d.ts +23 -7
  67. package/dist/backend/backend/src/services/talk/talk-live-token.service.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/talk/talk-live-token.service.js +80 -40
  69. package/dist/backend/backend/src/services/talk/talk-live-token.service.js.map +1 -1
  70. package/dist/backend/build-info.json +2 -2
  71. package/dist/cli/backend/src/constants.d.ts +64 -0
  72. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  73. package/dist/cli/backend/src/constants.js +64 -0
  74. package/dist/cli/backend/src/constants.js.map +1 -1
  75. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +33 -1
  76. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
  77. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +33 -0
  78. package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
  79. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
  80. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
  81. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +37 -0
  82. package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
  83. package/dist/cli/backend/src/services/drive/drive-row.utils.d.ts +19 -0
  84. package/dist/cli/backend/src/services/drive/drive-row.utils.d.ts.map +1 -0
  85. package/dist/cli/backend/src/services/drive/drive-row.utils.js +20 -0
  86. package/dist/cli/backend/src/services/drive/drive-row.utils.js.map +1 -0
  87. package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
  88. package/dist/cli/backend/src/services/open-items/open-items.service.js +14 -2
  89. package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
  90. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
  91. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +4 -0
  92. package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
  93. package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
  94. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +7 -1
  95. package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
  96. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-agent.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-agent.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Drive mode wire shapes, machine half (mirrors crewly-services
3
+ * `auth/src/drive/drive.contract.ts`). Pure.
4
+ *
5
+ * Cloud → machine: relay `talk_message` with `{v:1, kind:'drive', op,
6
+ * sessionId, id?, instanceId}` — ids only. The machine then fetches, with its
7
+ * own Cloud token:
8
+ * GET /api/cloud/talk/session/:sid/machine/deliveries/:id?instanceId= → the owner's words
9
+ * GET /api/cloud/talk/session/:sid/machine/state?instanceId= → its conversations (after `end`)
10
+ * GET /api/cloud/talk/session/:sid/machine/recalls/:id?instanceId= → what to recall
11
+ * POST /api/cloud/talk/session/:sid/machine/recalls/:id {instanceId, messages}
12
+ * Machine → Cloud (an agent's `reply --drive`):
13
+ * POST /api/cloud/talk/session/:sid/replies {instanceId, conversationId, agentSession, text, interim?, recap?, nextStep?}
14
+ *
15
+ * @module services/drive/drive-cloud.contract
16
+ */
17
+ /** What the owner can talk to. */
18
+ export type DriveTargetKind = 'agent' | 'team' | 'channel';
19
+ /** A Drive mode push. */
20
+ export interface DriveRelayData {
21
+ v: 1;
22
+ kind: 'drive';
23
+ op: 'deliver' | 'end' | 'recall';
24
+ sessionId: string;
25
+ id?: string;
26
+ instanceId: string;
27
+ }
28
+ /** The owner's words, as Cloud hands them to the machine. */
29
+ export interface DriveDeliveryFetch {
30
+ id: string;
31
+ sessionId: string;
32
+ conversationId: string;
33
+ target: {
34
+ kind: DriveTargetKind;
35
+ name: string;
36
+ agentSession: string;
37
+ team?: string;
38
+ slackChannelId?: string;
39
+ members?: string[];
40
+ };
41
+ text: string;
42
+ }
43
+ /** A recall request. */
44
+ export interface DriveRecallFetch {
45
+ agentSessions: string[];
46
+ hint?: string;
47
+ slackChannelId?: string;
48
+ }
49
+ /** The machine's part of a session. */
50
+ export interface DriveStateFetch {
51
+ ended: boolean;
52
+ conversations: Array<{
53
+ conversationId: string;
54
+ agentSession: string;
55
+ }>;
56
+ }
57
+ /**
58
+ * A Drive mode relay payload, or null (any other `talk_message`).
59
+ *
60
+ * @param payload - Relay payload
61
+ * @returns Data or null
62
+ */
63
+ export declare function parseDriveRelayData(payload: unknown): DriveRelayData | null;
64
+ /**
65
+ * Whether a relay payload is Drive mode's (so the Talk handler leaves it alone).
66
+ *
67
+ * @param payload - Relay payload
68
+ * @returns True for `kind: 'drive'`
69
+ */
70
+ export declare function isDrivePayload(payload: unknown): boolean;
71
+ /**
72
+ * Cloud's delivery answer, or null.
73
+ *
74
+ * @param data - `data` of the response
75
+ * @returns Delivery or null
76
+ */
77
+ export declare function parseDeliveryFetch(data: unknown): DriveDeliveryFetch | null;
78
+ /**
79
+ * Cloud's recall request, or null.
80
+ *
81
+ * @param data - `data` of the response
82
+ * @returns Request or null
83
+ */
84
+ export declare function parseRecallFetch(data: unknown): DriveRecallFetch | null;
85
+ /**
86
+ * Cloud's session state for this machine, or null.
87
+ *
88
+ * @param data - `data` of the response
89
+ * @returns State or null
90
+ */
91
+ export declare function parseStateFetch(data: unknown): DriveStateFetch | null;
92
+ //# sourceMappingURL=drive-cloud.contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-cloud.contract.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-cloud.contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,kCAAkC;AAClC,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAE3D,yBAAyB;AACzB,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE;QAAE,IAAI,EAAE,eAAe,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAClI,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAwB;AACxB,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,uCAAuC;AACvC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAKD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,IAAI,CAU3E;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CA0B3E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,GAAG,IAAI,CAKvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAQrE"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Drive mode wire shapes, machine half (mirrors crewly-services
3
+ * `auth/src/drive/drive.contract.ts`). Pure.
4
+ *
5
+ * Cloud → machine: relay `talk_message` with `{v:1, kind:'drive', op,
6
+ * sessionId, id?, instanceId}` — ids only. The machine then fetches, with its
7
+ * own Cloud token:
8
+ * GET /api/cloud/talk/session/:sid/machine/deliveries/:id?instanceId= → the owner's words
9
+ * GET /api/cloud/talk/session/:sid/machine/state?instanceId= → its conversations (after `end`)
10
+ * GET /api/cloud/talk/session/:sid/machine/recalls/:id?instanceId= → what to recall
11
+ * POST /api/cloud/talk/session/:sid/machine/recalls/:id {instanceId, messages}
12
+ * Machine → Cloud (an agent's `reply --drive`):
13
+ * POST /api/cloud/talk/session/:sid/replies {instanceId, conversationId, agentSession, text, interim?, recap?, nextStep?}
14
+ *
15
+ * @module services/drive/drive-cloud.contract
16
+ */
17
+ import { DRIVE_CONSTANTS } from '../../constants.js';
18
+ const obj = (v) => (v && typeof v === 'object' && !Array.isArray(v) ? v : null);
19
+ const str = (v) => (typeof v === 'string' && v.trim() ? v : null);
20
+ /**
21
+ * A Drive mode relay payload, or null (any other `talk_message`).
22
+ *
23
+ * @param payload - Relay payload
24
+ * @returns Data or null
25
+ */
26
+ export function parseDriveRelayData(payload) {
27
+ const p = obj(payload);
28
+ if (!p || p['kind'] !== DRIVE_CONSTANTS.RELAY_KIND || p['v'] !== 1)
29
+ return null;
30
+ const op = p['op'];
31
+ const sessionId = str(p['sessionId']);
32
+ const instanceId = str(p['instanceId']);
33
+ if ((op !== 'deliver' && op !== 'end' && op !== 'recall') || !sessionId || !DRIVE_CONSTANTS.SESSION_ID_PATTERN.test(sessionId) || !instanceId)
34
+ return null;
35
+ const id = str(p['id']);
36
+ if (op !== 'end' && !id)
37
+ return null;
38
+ return { v: 1, kind: 'drive', op, sessionId, instanceId, ...(id ? { id } : {}) };
39
+ }
40
+ /**
41
+ * Whether a relay payload is Drive mode's (so the Talk handler leaves it alone).
42
+ *
43
+ * @param payload - Relay payload
44
+ * @returns True for `kind: 'drive'`
45
+ */
46
+ export function isDrivePayload(payload) {
47
+ return obj(payload)?.['kind'] === DRIVE_CONSTANTS.RELAY_KIND;
48
+ }
49
+ /**
50
+ * Cloud's delivery answer, or null.
51
+ *
52
+ * @param data - `data` of the response
53
+ * @returns Delivery or null
54
+ */
55
+ export function parseDeliveryFetch(data) {
56
+ const d = obj(data);
57
+ const t = obj(d?.['target']);
58
+ if (!d || !t)
59
+ return null;
60
+ const kind = t['kind'];
61
+ const id = str(d['id']);
62
+ const sessionId = str(d['sessionId']);
63
+ const conversationId = str(d['conversationId']);
64
+ const text = str(d['text']);
65
+ const agentSession = str(t['agentSession']);
66
+ if ((kind !== 'agent' && kind !== 'team' && kind !== 'channel') || !id || !sessionId || !conversationId || !text || !agentSession)
67
+ return null;
68
+ const members = Array.isArray(t['members']) ? t['members'].filter((m) => typeof m === 'string') : undefined;
69
+ return {
70
+ id,
71
+ sessionId,
72
+ conversationId,
73
+ text,
74
+ target: {
75
+ kind,
76
+ name: str(t['name']) ?? agentSession,
77
+ agentSession,
78
+ ...(str(t['team']) ? { team: t['team'] } : {}),
79
+ ...(str(t['slackChannelId']) ? { slackChannelId: t['slackChannelId'] } : {}),
80
+ ...(members ? { members } : {}),
81
+ },
82
+ };
83
+ }
84
+ /**
85
+ * Cloud's recall request, or null.
86
+ *
87
+ * @param data - `data` of the response
88
+ * @returns Request or null
89
+ */
90
+ export function parseRecallFetch(data) {
91
+ const d = obj(data);
92
+ const sessions = Array.isArray(d?.['agentSessions']) ? (d?.['agentSessions']).filter((s) => typeof s === 'string' && !!s) : [];
93
+ if (!d || sessions.length === 0)
94
+ return null;
95
+ return { agentSessions: sessions, ...(str(d['hint']) ? { hint: d['hint'] } : {}), ...(str(d['slackChannelId']) ? { slackChannelId: d['slackChannelId'] } : {}) };
96
+ }
97
+ /**
98
+ * Cloud's session state for this machine, or null.
99
+ *
100
+ * @param data - `data` of the response
101
+ * @returns State or null
102
+ */
103
+ export function parseStateFetch(data) {
104
+ const d = obj(data);
105
+ if (!d || !Array.isArray(d['conversations']))
106
+ return null;
107
+ const conversations = d['conversations']
108
+ .map(obj)
109
+ .filter((c) => !!c && !!str(c['conversationId']) && !!str(c['agentSession']))
110
+ .map((c) => ({ conversationId: c['conversationId'], agentSession: c['agentSession'] }));
111
+ return { ended: d['ended'] === true, conversations };
112
+ }
113
+ //# sourceMappingURL=drive-cloud.contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-cloud.contract.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-cloud.contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAqCrD,MAAM,GAAG,GAAG,CAAC,CAAU,EAAkC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAA6B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACtJ,MAAM,GAAG,GAAG,CAAC,CAAU,EAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAE1F;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC3J,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxB,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACnF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,UAAU,CAAC;AAC/D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACvB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5B,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/I,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,SAAS,CAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxI,OAAO;QACL,EAAE;QACF,SAAS;QACT,cAAc;QACd,IAAI;QACJ,MAAM,EAAE;YACN,IAAI;YACJ,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,YAAY;YACpC,YAAY;YACZ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,gBAAgB,CAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,CAAe,CAAA,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzJ,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,gBAAgB,CAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACvL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,MAAM,aAAa,GAAI,CAAC,CAAC,eAAe,CAAe;SACpD,GAAG,CAAC,GAAG,CAAC;SACR,MAAM,CAAC,CAAC,CAAC,EAAgC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;SAC1G,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,gBAAgB,CAAW,EAAE,YAAY,EAAE,CAAC,CAAC,cAAc,CAAW,EAAE,CAAC,CAAC,CAAC;IAC9G,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,aAAa,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * This machine's Drive mode conversations (specs/2026-10-08-drive-mode.md
3
+ * §7): where each one is recorded (the agent's DM, or the room's thread), who
4
+ * answers it, its turns (for the recap) and whether it is closed — in
5
+ * `<crewlyHome>/drive-conversations.json`, so a restart mid-drive still
6
+ * routes the agents' answers and recaps. Cloud keeps the session itself.
7
+ *
8
+ * @module services/drive/drive-conversation.store
9
+ */
10
+ import type { DriveTargetKind } from './drive-cloud.contract.js';
11
+ /** One turn. */
12
+ export interface DriveLocalTurn {
13
+ from: 'owner' | 'agent';
14
+ name: string;
15
+ text: string;
16
+ /** ISO */
17
+ at: string;
18
+ interim?: boolean;
19
+ }
20
+ /** One Drive mode conversation on this machine. */
21
+ export interface DriveLocalConversation {
22
+ sessionId: string;
23
+ conversationId: string;
24
+ kind: DriveTargetKind;
25
+ /** "Ella", "CE", "#ce" */
26
+ targetName: string;
27
+ /** Who answers (the agent, the lead) */
28
+ agentSession: string;
29
+ /** Others who may answer (team / room members) */
30
+ members?: string[];
31
+ /** chat-v2 channel it is recorded in */
32
+ channelId: string;
33
+ /** Thread root (room conversations) */
34
+ threadId?: string;
35
+ /** ISO */
36
+ startedAt: string;
37
+ turns: DriveLocalTurn[];
38
+ /** ISO — the recap was asked for */
39
+ recapAskedAt?: string;
40
+ /** ISO — the recap was posted; closed */
41
+ closedAt?: string;
42
+ }
43
+ /**
44
+ * The key of a conversation.
45
+ *
46
+ * @param sessionId - Session
47
+ * @param conversationId - Conversation
48
+ * @returns `<sessionId>:<conversationId>`
49
+ */
50
+ export declare function localKey(sessionId: string, conversationId: string): string;
51
+ /** Read / change local Drive mode conversations. Writes are serialised. */
52
+ export declare class DriveConversationStore {
53
+ private readonly filePath?;
54
+ private chain;
55
+ /**
56
+ * @param filePath - File; default `<crewlyHome>/drive-conversations.json` (resolved per call)
57
+ */
58
+ constructor(filePath?: string | undefined);
59
+ /** @returns Absolute path */
60
+ getFilePath(): string;
61
+ /** @returns Every conversation (empty when missing or unreadable) */
62
+ list(): Promise<DriveLocalConversation[]>;
63
+ /**
64
+ * One conversation.
65
+ *
66
+ * @param sessionId - Session
67
+ * @param conversationId - Conversation
68
+ * @returns It, or null
69
+ */
70
+ get(sessionId: string, conversationId: string): Promise<DriveLocalConversation | null>;
71
+ /**
72
+ * Change one conversation; `fn` gets it (or null) and returns the new one,
73
+ * or null to leave it. Conversations older than
74
+ * {@link DRIVE_CONSTANTS.KEEP_MS} are dropped on the way.
75
+ *
76
+ * @param sessionId - Session
77
+ * @param conversationId - Conversation
78
+ * @param fn - Updater
79
+ * @param nowMs - Clock
80
+ * @returns The new conversation (or null)
81
+ */
82
+ update(sessionId: string, conversationId: string, fn: (cur: DriveLocalConversation | null) => DriveLocalConversation | null, nowMs?: number): Promise<DriveLocalConversation | null>;
83
+ private read;
84
+ private write;
85
+ }
86
+ //# sourceMappingURL=drive-conversation.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-conversation.store.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-conversation.store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,mDAAmD;AACnD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,eAAe,CAAC;IACtB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,2EAA2E;AAC3E,qBAAa,sBAAsB;IAMrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IALtC,OAAO,CAAC,KAAK,CAAuC;IAEpD;;OAEG;gBAC0B,QAAQ,CAAC,EAAE,MAAM,YAAA;IAE9C,6BAA6B;IAC7B,WAAW,IAAI,MAAM;IAIrB,qEAAqE;IAC/D,IAAI,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAK/C;;;;;;OAMG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAK5F;;;;;;;;;;OAUG;IACH,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,EAAE,EAAE,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI,KAAK,sBAAsB,GAAG,IAAI,EACzE,KAAK,GAAE,MAAmB,GACzB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;YAiB3B,IAAI;YAUJ,KAAK;CAOpB"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * This machine's Drive mode conversations (specs/2026-10-08-drive-mode.md
3
+ * §7): where each one is recorded (the agent's DM, or the room's thread), who
4
+ * answers it, its turns (for the recap) and whether it is closed — in
5
+ * `<crewlyHome>/drive-conversations.json`, so a restart mid-drive still
6
+ * routes the agents' answers and recaps. Cloud keeps the session itself.
7
+ *
8
+ * @module services/drive/drive-conversation.store
9
+ */
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import { DRIVE_CONSTANTS } from '../../constants.js';
13
+ import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
14
+ /**
15
+ * The key of a conversation.
16
+ *
17
+ * @param sessionId - Session
18
+ * @param conversationId - Conversation
19
+ * @returns `<sessionId>:<conversationId>`
20
+ */
21
+ export function localKey(sessionId, conversationId) {
22
+ return `${sessionId}:${conversationId}`;
23
+ }
24
+ /** Read / change local Drive mode conversations. Writes are serialised. */
25
+ export class DriveConversationStore {
26
+ filePath;
27
+ chain = Promise.resolve();
28
+ /**
29
+ * @param filePath - File; default `<crewlyHome>/drive-conversations.json` (resolved per call)
30
+ */
31
+ constructor(filePath) {
32
+ this.filePath = filePath;
33
+ }
34
+ /** @returns Absolute path */
35
+ getFilePath() {
36
+ return this.filePath ?? path.join(getCrewlyHomePath(), DRIVE_CONSTANTS.STATE_FILENAME);
37
+ }
38
+ /** @returns Every conversation (empty when missing or unreadable) */
39
+ async list() {
40
+ await this.chain;
41
+ return Object.values((await this.read()).conversations);
42
+ }
43
+ /**
44
+ * One conversation.
45
+ *
46
+ * @param sessionId - Session
47
+ * @param conversationId - Conversation
48
+ * @returns It, or null
49
+ */
50
+ async get(sessionId, conversationId) {
51
+ await this.chain;
52
+ return (await this.read()).conversations[localKey(sessionId, conversationId)] ?? null;
53
+ }
54
+ /**
55
+ * Change one conversation; `fn` gets it (or null) and returns the new one,
56
+ * or null to leave it. Conversations older than
57
+ * {@link DRIVE_CONSTANTS.KEEP_MS} are dropped on the way.
58
+ *
59
+ * @param sessionId - Session
60
+ * @param conversationId - Conversation
61
+ * @param fn - Updater
62
+ * @param nowMs - Clock
63
+ * @returns The new conversation (or null)
64
+ */
65
+ update(sessionId, conversationId, fn, nowMs = Date.now()) {
66
+ const run = this.chain.then(async () => {
67
+ const state = await this.read();
68
+ const key = localKey(sessionId, conversationId);
69
+ const cur = state.conversations[key] ? structuredClone(state.conversations[key]) : null;
70
+ const next = fn(cur);
71
+ for (const [k, c] of Object.entries(state.conversations)) {
72
+ if (nowMs - Date.parse(c.startedAt) > DRIVE_CONSTANTS.KEEP_MS)
73
+ delete state.conversations[k];
74
+ }
75
+ if (next)
76
+ state.conversations[key] = next;
77
+ await this.write(state);
78
+ return next;
79
+ });
80
+ this.chain = run.catch(() => undefined);
81
+ return run;
82
+ }
83
+ async read() {
84
+ try {
85
+ const raw = JSON.parse(await fs.promises.readFile(this.getFilePath(), 'utf8'));
86
+ if (raw && raw.version === 1 && raw.conversations && typeof raw.conversations === 'object')
87
+ return { version: 1, conversations: raw.conversations };
88
+ }
89
+ catch {
90
+ // missing or unreadable: start empty
91
+ }
92
+ return { version: 1, conversations: {} };
93
+ }
94
+ async write(state) {
95
+ const file = this.getFilePath();
96
+ await fs.promises.mkdir(path.dirname(file), { recursive: true });
97
+ const tmp = `${file}.${process.pid}.tmp`;
98
+ await fs.promises.writeFile(tmp, JSON.stringify(state, null, 2), { mode: 0o600 });
99
+ await fs.promises.rename(tmp, file);
100
+ }
101
+ }
102
+ //# sourceMappingURL=drive-conversation.store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-conversation.store.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-conversation.store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Drive mode recall (specs/2026-10-08-drive-mode.md §7): "what did Ella
3
+ * just send me about the newsletter? say it again". Picks an agent's recent
4
+ * messages to the owner out of chat-v2 — its DMs with the owner, and the
5
+ * threads the owner is in — and ranks them by the owner's hint. Pure.
6
+ *
7
+ * @module services/drive/drive-recall
8
+ */
9
+ import { type OwnerTurnMark } from '../briefing/briefing-cards.js';
10
+ /** A chat-v2 message as recall reads it (a subset of ChatTimelineItemDTO). */
11
+ export interface RecallFeedMessage {
12
+ id: string;
13
+ channelId: string;
14
+ channelType: 'dm' | 'channel' | 'huddle';
15
+ channelName: string;
16
+ threadId?: string;
17
+ senderType: 'user' | 'agent' | 'system';
18
+ senderId: string;
19
+ /** `owner`, `agent`, `human`, `system` */
20
+ senderKind: string;
21
+ agentSession: string | null;
22
+ content: string;
23
+ createdAt: number;
24
+ metadata?: Record<string, unknown>;
25
+ }
26
+ /** One message recalled for the owner. */
27
+ export interface RecalledMessage {
28
+ agentSession: string;
29
+ /** "your DM", "#content-team" */
30
+ where: string;
31
+ /** ISO */
32
+ at: string;
33
+ /** Speakable text (no URLs / markup), clipped */
34
+ text: string;
35
+ }
36
+ /**
37
+ * The agent messages to the owner among chat-v2 rows: by one of `sessions`,
38
+ * in a DM, or in a channel thread the owner wrote in. System lines and
39
+ * Drive mode's own relays are left out.
40
+ *
41
+ * @param rows - Messages (any order)
42
+ * @param ownerTurns - When the owner last wrote in each conversation
43
+ * @param sessions - Agent sessions to recall
44
+ * @returns Matching messages, newest first
45
+ */
46
+ export declare function messagesToOwner(rows: readonly RecallFeedMessage[], ownerTurns: readonly OwnerTurnMark[], sessions: readonly string[]): RecallFeedMessage[];
47
+ /**
48
+ * How well a text covers the owner's hint (share of the hint's character
49
+ * bigrams found in it), 0–1.
50
+ *
51
+ * @param hint - What the owner said it was about
52
+ * @param text - A message
53
+ * @returns Score
54
+ */
55
+ export declare function hintScore(hint: string, text: string): number;
56
+ /**
57
+ * The messages to read back: best match to the hint first (then newest), at
58
+ * most {@link DRIVE_CONSTANTS.RECALL_MAX}; without a hint, the newest.
59
+ *
60
+ * @param messages - Candidates, newest first
61
+ * @param hint - What it was about (optional)
62
+ * @returns Recalled messages
63
+ */
64
+ export declare function pickRecall(messages: readonly RecallFeedMessage[], hint?: string | null): RecalledMessage[];
65
+ //# sourceMappingURL=drive-recall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-recall.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-recall.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAKpG,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,EAAE,EAAE,MAAM,CAAC;IACX,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,EAAE,UAAU,EAAE,SAAS,aAAa,EAAE,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAY1J;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,eAAe,EAAE,CAe1G"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Drive mode recall (specs/2026-10-08-drive-mode.md §7): "what did Ella
3
+ * just send me about the newsletter? say it again". Picks an agent's recent
4
+ * messages to the owner out of chat-v2 — its DMs with the owner, and the
5
+ * threads the owner is in — and ranks them by the owner's hint. Pure.
6
+ *
7
+ * @module services/drive/drive-recall
8
+ */
9
+ import { DRIVE_CONSTANTS } from '../../constants.js';
10
+ import { conversationKey, ownerLastIndex } from '../briefing/briefing-cards.js';
11
+ import { clip, speakable } from '../briefing/briefing.utils.js';
12
+ const C = DRIVE_CONSTANTS;
13
+ /**
14
+ * The agent messages to the owner among chat-v2 rows: by one of `sessions`,
15
+ * in a DM, or in a channel thread the owner wrote in. System lines and
16
+ * Drive mode's own relays are left out.
17
+ *
18
+ * @param rows - Messages (any order)
19
+ * @param ownerTurns - When the owner last wrote in each conversation
20
+ * @param sessions - Agent sessions to recall
21
+ * @returns Matching messages, newest first
22
+ */
23
+ export function messagesToOwner(rows, ownerTurns, sessions) {
24
+ const want = new Set(sessions);
25
+ const owner = ownerLastIndex(ownerTurns);
26
+ return rows
27
+ .filter((m) => {
28
+ if (m.senderType === 'system' || m.senderKind === 'system' || (m.senderKind !== 'agent' && m.senderType !== 'agent'))
29
+ return false;
30
+ if (!want.has(m.agentSession ?? m.senderId) && !want.has(m.senderId))
31
+ return false;
32
+ if (!m.content.trim() || m.content.startsWith('[Drive mode'))
33
+ return false;
34
+ if (m.channelType === 'dm')
35
+ return true;
36
+ return owner.has(conversationKey(m.channelId, m.threadId ?? m.id));
37
+ })
38
+ .sort((a, b) => b.createdAt - a.createdAt);
39
+ }
40
+ /**
41
+ * How well a text covers the owner's hint (share of the hint's character
42
+ * bigrams found in it), 0–1.
43
+ *
44
+ * @param hint - What the owner said it was about
45
+ * @param text - A message
46
+ * @returns Score
47
+ */
48
+ export function hintScore(hint, text) {
49
+ const norm = (s) => speakable(s).toLowerCase().replace(/[\s\p{P}\p{S}]+/gu, '');
50
+ const h = norm(hint);
51
+ const t = norm(text);
52
+ if (!h || !t)
53
+ return 0;
54
+ if (t.includes(h))
55
+ return 1;
56
+ if (h.length < 2)
57
+ return 0;
58
+ const grams = new Set();
59
+ for (let i = 0; i < h.length - 1; i++)
60
+ grams.add(h.slice(i, i + 2));
61
+ let found = 0;
62
+ for (const g of grams)
63
+ if (t.includes(g))
64
+ found += 1;
65
+ return found / grams.size;
66
+ }
67
+ /**
68
+ * The messages to read back: best match to the hint first (then newest), at
69
+ * most {@link DRIVE_CONSTANTS.RECALL_MAX}; without a hint, the newest.
70
+ *
71
+ * @param messages - Candidates, newest first
72
+ * @param hint - What it was about (optional)
73
+ * @returns Recalled messages
74
+ */
75
+ export function pickRecall(messages, hint) {
76
+ const h = (hint ?? '').trim();
77
+ const ranked = h
78
+ ? messages
79
+ .map((m, i) => ({ m, i, s: hintScore(h, m.content) }))
80
+ .filter((x) => x.s >= 0.34)
81
+ .sort((a, b) => b.s - a.s || a.i - b.i)
82
+ .map((x) => x.m)
83
+ : [...messages];
84
+ return ranked.slice(0, C.RECALL_MAX).map((m) => ({
85
+ agentSession: m.agentSession ?? m.senderId,
86
+ where: m.channelType === 'dm' ? 'your DM' : m.channelName,
87
+ at: new Date(m.createdAt).toISOString(),
88
+ text: clip(speakable(m.content), C.RECALL_MESSAGE_MAX_CHARS),
89
+ }));
90
+ }
91
+ //# sourceMappingURL=drive-recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drive-recall.js","sourceRoot":"","sources":["../../../../../../backend/src/services/drive/drive-recall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Drive mode's mark on chat rows (specs/2026-10-08-drive-mode.md §7). Every
3
+ * chat-v2 row Drive mode writes — the owner's voice turn, an agent's spoken
4
+ * reply, a recap — carries `metadata.via = 'drive-mode'`. The Slack room and
5
+ * DM mirrors skip those rows: a Drive mode conversation is spoken on the
6
+ * phone, and its one recap is posted to Slack by Drive mode itself.
7
+ *
8
+ * @module services/drive/drive-row.utils
9
+ */
10
+ /**
11
+ * Whether a chat row was written by Drive mode.
12
+ *
13
+ * @param row - A chat row (or anything with metadata), or null
14
+ * @returns True for a Drive mode row
15
+ */
16
+ export declare function isDriveModeRow(row: {
17
+ metadata?: Record<string, unknown>;
18
+ } | null | undefined): boolean;
19
+ //# sourceMappingURL=drive-row.utils.d.ts.map