crewly 1.20.278 → 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.
- package/config/skills/agent/core/reply/SKILL.md +2 -0
- package/config/skills/agent/core/reply/execute.sh +15 -1
- package/config/skills/agent/core/reply/execute.test.sh +7 -0
- package/dist/backend/backend/src/constants.d.ts +64 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +64 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts +9 -0
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js +23 -0
- package/dist/backend/backend/src/controllers/chat/agent-reply.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +121 -3
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/briefing/briefing-cards.d.ts +99 -0
- package/dist/backend/backend/src/services/briefing/briefing-cards.d.ts.map +1 -0
- package/dist/backend/backend/src/services/briefing/briefing-cards.js +156 -0
- package/dist/backend/backend/src/services/briefing/briefing-cards.js.map +1 -0
- package/dist/backend/backend/src/services/briefing/briefing.service.d.ts +8 -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 +31 -9
- package/dist/backend/backend/src/services/briefing/briefing.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +33 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +33 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +37 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-talk-inbound.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-talk-inbound.service.js +4 -0
- package/dist/backend/backend/src/services/cloud/cloud-talk-inbound.service.js.map +1 -1
- package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts +228 -0
- package/dist/backend/backend/src/services/drive/drive-agent.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-agent.service.js +412 -0
- package/dist/backend/backend/src/services/drive/drive-agent.service.js.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts +92 -0
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.d.ts.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.js +113 -0
- package/dist/backend/backend/src/services/drive/drive-cloud.contract.js.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-conversation.store.d.ts +86 -0
- package/dist/backend/backend/src/services/drive/drive-conversation.store.d.ts.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-conversation.store.js +102 -0
- package/dist/backend/backend/src/services/drive/drive-conversation.store.js.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-recall.d.ts +65 -0
- package/dist/backend/backend/src/services/drive/drive-recall.d.ts.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-recall.js +91 -0
- package/dist/backend/backend/src/services/drive/drive-recall.js.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-row.utils.d.ts +19 -0
- package/dist/backend/backend/src/services/drive/drive-row.utils.d.ts.map +1 -0
- package/dist/backend/backend/src/services/drive/drive-row.utils.js +20 -0
- package/dist/backend/backend/src/services/drive/drive-row.utils.js.map +1 -0
- package/dist/backend/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/open-items/open-items.service.js +14 -2
- package/dist/backend/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +4 -0
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js +2 -1
- package/dist/backend/backend/src/services/slack/slack-initializer.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +7 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/talk/talk-live-token.service.d.ts +23 -7
- package/dist/backend/backend/src/services/talk/talk-live-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/talk/talk-live-token.service.js +78 -40
- package/dist/backend/backend/src/services/talk/talk-live-token.service.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +64 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +64 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts +33 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js +33 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js +37 -0
- package/dist/cli/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/cli/backend/src/services/drive/drive-row.utils.d.ts +19 -0
- package/dist/cli/backend/src/services/drive/drive-row.utils.d.ts.map +1 -0
- package/dist/cli/backend/src/services/drive/drive-row.utils.js +20 -0
- package/dist/cli/backend/src/services/drive/drive-row.utils.js.map +1 -0
- package/dist/cli/backend/src/services/open-items/open-items.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/open-items/open-items.service.js +14 -2
- package/dist/cli/backend/src/services/open-items/open-items.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +4 -0
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +7 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- 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":"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"}
|
|
@@ -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
|