@lumenflow/packs-sidekick 5.3.2 → 5.5.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lumenflow/packs-sidekick",
3
- "version": "5.3.2",
3
+ "version": "5.5.0",
4
4
  "description": "Sidekick personal assistant pack for LumenFlow — 16 tools for task management, typed memory, channels, routines, and audit",
5
5
  "keywords": [
6
6
  "lumenflow",
@@ -47,8 +47,8 @@
47
47
  "README.md"
48
48
  ],
49
49
  "dependencies": {
50
- "@lumenflow/conductor-sdk": "^5.3.2",
51
- "@lumenflow/kernel": "^5.3.2"
50
+ "@lumenflow/conductor-sdk": "^5.5.0",
51
+ "@lumenflow/kernel": "^5.5.0"
52
52
  },
53
53
  "devDependencies": {
54
54
  "typescript": "^5.9.3",
@@ -1,46 +0,0 @@
1
- declare const ENVELOPE_FROM_SOURCE_TOKEN: "token";
2
- export interface PhoneChannelIngressInput {
3
- /**
4
- * Raw request body as parsed from JSON. Opaque record; the sanitizer does
5
- * not inspect `body`, only the `from` attribution fields.
6
- */
7
- body: Readonly<Record<string, unknown>>;
8
- /**
9
- * Authoritative identity claim resolved from the bearer token. Required:
10
- * without a token subject, cloud cannot attribute the message, and the
11
- * ingress path rejects the request.
12
- */
13
- authoritativeFrom: string;
14
- }
15
- export interface PhoneChannelIngressEnvelope {
16
- /**
17
- * Sanitised request body with any body-level `from` stripped. Everything
18
- * else the caller supplied is preserved so downstream code (channel.send,
19
- * routing) can consume arbitrary payload fields.
20
- */
21
- body: Record<string, unknown>;
22
- /** Authoritative attribution string (`{workspace_id}:phone:{device_id}`). */
23
- from: string;
24
- /** Always `'token'` — cloud-safe invariant per ADR-013 §5. */
25
- from_source: typeof ENVELOPE_FROM_SOURCE_TOKEN;
26
- }
27
- export declare class PhoneChannelIngressError extends Error {
28
- readonly statusCode: number;
29
- constructor(message: string, statusCode: number);
30
- }
31
- /**
32
- * Sanitize an inbound phone-channel request. Returns a cleaned envelope with
33
- * the authoritative `from` baked in. Throws `PhoneChannelIngressError` (HTTP
34
- * 400) when the authoritative `from` is missing — the surface translates the
35
- * error to a 400/403 response.
36
- */
37
- export declare function sanitizePhoneChannelIngress(input: PhoneChannelIngressInput): PhoneChannelIngressEnvelope;
38
- /**
39
- * Convenience: reports whether the given `from` subject matches the
40
- * phone-device grammar (`{workspace_id}:phone:{device_id}`). Useful to
41
- * tell workspace-scoped actors from phone-device actors in the audit log
42
- * without reaching for the enrollment parser.
43
- */
44
- export declare function isPhoneSubject(subject: string): boolean;
45
- export {};
46
- //# sourceMappingURL=channel-ingress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel-ingress.d.ts","sourceRoot":"","sources":["../../src/channel-ingress.ts"],"names":[],"mappings":"AAyBA,QAAA,MAAM,0BAA0B,EAAG,OAAgB,CAAC;AAEpD,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA2B;IAC1C;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,WAAW,EAAE,OAAO,0BAA0B,CAAC;CAChD;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKhD;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,wBAAwB,GAC9B,2BAA2B,CA2B7B;AAkBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAavD"}
@@ -1,90 +0,0 @@
1
- // Copyright (c) 2026 Hellmai Ltd
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * WU-2731 (INIT-060 phase 3, ADR-013 §5 Identity):
5
- * Pure inbound-channel ingress sanitizer.
6
- *
7
- * ADR-013 §5 rules, enforced here:
8
- *
9
- * - The authoritative `from` value for an inbound phone POST comes from the
10
- * authenticated token subject (`{workspace_id}:phone:{device_id}`). Cloud
11
- * MUST NOT trust a `from` field supplied in the request body.
12
- *
13
- * - Body-supplied `from` (and any alias under `metadata.from`) is stripped
14
- * before the envelope reaches domain code. The surface that calls this
15
- * module is expected to pass the resolved `from` separately; attempting to
16
- * ingest a body-only envelope (no authoritative from) fails closed.
17
- *
18
- * The module is HTTP-independent: both the kernel tool-api surface and the
19
- * future control-plane adapter (WU-2737) call the same sanitizer so the
20
- * ignore-body-from rule is enforced in one place.
21
- */
22
- const ENVELOPE_BODY_FIELD_FROM = 'from';
23
- const ENVELOPE_METADATA_KEY = 'metadata';
24
- const ENVELOPE_FROM_SOURCE_TOKEN = 'token';
25
- export class PhoneChannelIngressError extends Error {
26
- statusCode;
27
- constructor(message, statusCode) {
28
- super(message);
29
- this.name = 'PhoneChannelIngressError';
30
- this.statusCode = statusCode;
31
- }
32
- }
33
- /**
34
- * Sanitize an inbound phone-channel request. Returns a cleaned envelope with
35
- * the authoritative `from` baked in. Throws `PhoneChannelIngressError` (HTTP
36
- * 400) when the authoritative `from` is missing — the surface translates the
37
- * error to a 400/403 response.
38
- */
39
- export function sanitizePhoneChannelIngress(input) {
40
- if (typeof input.authoritativeFrom !== 'string' || input.authoritativeFrom.length === 0) {
41
- throw new PhoneChannelIngressError('Inbound phone channel requires authoritative from (token subject); body-only attribution is rejected.', 400);
42
- }
43
- const sanitizedBody = stripKey(input.body, ENVELOPE_BODY_FIELD_FROM);
44
- const rawMetadata = sanitizedBody[ENVELOPE_METADATA_KEY];
45
- if (rawMetadata !== null &&
46
- typeof rawMetadata === 'object' &&
47
- !Array.isArray(rawMetadata) &&
48
- ENVELOPE_BODY_FIELD_FROM in rawMetadata) {
49
- sanitizedBody[ENVELOPE_METADATA_KEY] = stripKey(rawMetadata, ENVELOPE_BODY_FIELD_FROM);
50
- }
51
- return {
52
- body: sanitizedBody,
53
- from: input.authoritativeFrom,
54
- from_source: ENVELOPE_FROM_SOURCE_TOKEN,
55
- };
56
- }
57
- /**
58
- * Copy `record` omitting the given key. Implemented with a filtered
59
- * `Object.entries` rather than `delete` to satisfy the linter's ban on
60
- * dynamic-delete (which would otherwise be a no-op for literal keys but
61
- * fails the rule uniformly).
62
- */
63
- function stripKey(record, key) {
64
- const result = {};
65
- for (const [entryKey, entryValue] of Object.entries(record)) {
66
- if (entryKey !== key) {
67
- result[entryKey] = entryValue;
68
- }
69
- }
70
- return result;
71
- }
72
- /**
73
- * Convenience: reports whether the given `from` subject matches the
74
- * phone-device grammar (`{workspace_id}:phone:{device_id}`). Useful to
75
- * tell workspace-scoped actors from phone-device actors in the audit log
76
- * without reaching for the enrollment parser.
77
- */
78
- export function isPhoneSubject(subject) {
79
- const parts = subject.split(':');
80
- if (parts.length !== 3) {
81
- return false;
82
- }
83
- const [workspace, kind, device] = parts;
84
- return (kind === 'phone' &&
85
- typeof workspace === 'string' &&
86
- workspace.length > 0 &&
87
- typeof device === 'string' &&
88
- device.length > 0);
89
- }
90
- //# sourceMappingURL=channel-ingress.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel-ingress.js","sourceRoot":"","sources":["../../src/channel-ingress.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,wBAAwB,GAAG,MAAe,CAAC;AACjD,MAAM,qBAAqB,GAAG,UAAmB,CAAC;AAClD,MAAM,0BAA0B,GAAG,OAAgB,CAAC;AA6BpD,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,UAAU,CAAS;IAE5B,YAAY,OAAe,EAAE,UAAkB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAA+B;IAE/B,IAAI,OAAO,KAAK,CAAC,iBAAiB,KAAK,QAAQ,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxF,MAAM,IAAI,wBAAwB,CAChC,uGAAuG,EACvG,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACzD,IACE,WAAW,KAAK,IAAI;QACpB,OAAO,WAAW,KAAK,QAAQ;QAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC3B,wBAAwB,IAAK,WAAuC,EACpE,CAAC;QACD,aAAa,CAAC,qBAAqB,CAAC,GAAG,QAAQ,CAC7C,WAAsC,EACtC,wBAAwB,CACzB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,KAAK,CAAC,iBAAiB;QAC7B,WAAW,EAAE,0BAA0B;KACxC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,MAAyC,EAAE,GAAW;IACtE,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IACxC,OAAO,CACL,IAAI,KAAK,OAAO;QAChB,OAAO,SAAS,KAAK,QAAQ;QAC7B,SAAS,CAAC,MAAM,GAAG,CAAC;QACpB,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,CAAC,MAAM,GAAG,CAAC,CAClB,CAAC;AACJ,CAAC"}
@@ -1,166 +0,0 @@
1
- import { type ChannelMessageRecord, type ChannelRecord, type MemoryRecord, type RoutineRecord, type SidekickStores, type TaskRecord } from '../tool-impl/storage.js';
2
- declare const SCHEMA_VERSION_V2: 2;
3
- export declare const SIDEKICK_CHANNEL_ID: "sidekick";
4
- export declare const SIDEKICK_EVENT_KINDS: {
5
- readonly TASK_CREATED: "sidekick:task_created";
6
- readonly TASK_COMPLETED: "sidekick:task_completed";
7
- readonly TASK_SCHEDULED: "sidekick:task_scheduled";
8
- readonly TASK_SNOOZED: "sidekick:task_snoozed";
9
- readonly MEMORY_STORED: "sidekick:memory_stored";
10
- readonly MEMORY_RECALLED: "sidekick:memory_recalled";
11
- readonly MEMORY_FORGOTTEN: "sidekick:memory_forgotten";
12
- readonly CHANNEL_MESSAGE_SENT: "sidekick:channel_message_sent";
13
- readonly CHANNEL_MESSAGE_RECEIVED: "sidekick:channel_message_received";
14
- readonly CHANNEL_BRIDGE_CONNECTED: "sidekick:channel_bridge_connected";
15
- readonly CHANNEL_BRIDGE_DISCONNECTED: "sidekick:channel_bridge_disconnected";
16
- readonly ROUTINE_PLANNED: "sidekick:routine_planned";
17
- readonly ROUTINE_COMMITTED: "sidekick:routine_committed";
18
- readonly ROUTINE_EXECUTED: "sidekick:routine_executed";
19
- readonly ROUTINE_STEP_FAILED: "sidekick:routine_step_failed";
20
- readonly STATE_REHYDRATED: "sidekick:state_rehydrated";
21
- };
22
- export declare const SIDEKICK_EVENT_KIND_VALUES: readonly ["sidekick:task_created", "sidekick:task_completed", "sidekick:task_scheduled", "sidekick:task_snoozed", "sidekick:memory_stored", "sidekick:memory_recalled", "sidekick:memory_forgotten", "sidekick:channel_message_sent", "sidekick:channel_message_received", "sidekick:channel_bridge_connected", "sidekick:channel_bridge_disconnected", "sidekick:routine_planned", "sidekick:routine_committed", "sidekick:routine_executed", "sidekick:routine_step_failed", "sidekick:state_rehydrated"];
23
- export type SidekickEventKind = (typeof SIDEKICK_EVENT_KIND_VALUES)[number];
24
- export type SidekickBackpressurePolicy = 'queue-with-replay' | 'ephemeral';
25
- export declare const SIDEKICK_EVENT_BACKPRESSURE_POLICY: Record<SidekickEventKind, SidekickBackpressurePolicy>;
26
- interface SidekickEventEnvelope {
27
- schema_version: typeof SCHEMA_VERSION_V2;
28
- timestamp: string;
29
- event_id: string;
30
- channel_id: typeof SIDEKICK_CHANNEL_ID;
31
- seq: number;
32
- }
33
- export interface TaskCreatedEvent extends SidekickEventEnvelope {
34
- kind: typeof SIDEKICK_EVENT_KINDS.TASK_CREATED;
35
- task: TaskRecord;
36
- }
37
- export interface TaskCompletedEvent extends SidekickEventEnvelope {
38
- kind: typeof SIDEKICK_EVENT_KINDS.TASK_COMPLETED;
39
- task: TaskRecord;
40
- }
41
- export interface TaskScheduledEvent extends SidekickEventEnvelope {
42
- kind: typeof SIDEKICK_EVENT_KINDS.TASK_SCHEDULED;
43
- task: TaskRecord;
44
- }
45
- export interface TaskSnoozedEvent extends SidekickEventEnvelope {
46
- kind: typeof SIDEKICK_EVENT_KINDS.TASK_SNOOZED;
47
- task_id: string;
48
- previous_due_at: string | null;
49
- due_at: string;
50
- }
51
- export interface MemoryStoredEvent extends SidekickEventEnvelope {
52
- kind: typeof SIDEKICK_EVENT_KINDS.MEMORY_STORED;
53
- memory: MemoryRecord;
54
- }
55
- export interface MemoryRecalledEvent extends SidekickEventEnvelope {
56
- kind: typeof SIDEKICK_EVENT_KINDS.MEMORY_RECALLED;
57
- query: string | null;
58
- count: number;
59
- memory_ids: string[];
60
- }
61
- export interface MemoryForgottenEvent extends SidekickEventEnvelope {
62
- kind: typeof SIDEKICK_EVENT_KINDS.MEMORY_FORGOTTEN;
63
- memory_id: string;
64
- }
65
- export interface ChannelMessageSentEvent extends SidekickEventEnvelope {
66
- kind: typeof SIDEKICK_EVENT_KINDS.CHANNEL_MESSAGE_SENT;
67
- message: Record<string, unknown>;
68
- }
69
- export interface ChannelMessageReceivedEvent extends SidekickEventEnvelope {
70
- kind: typeof SIDEKICK_EVENT_KINDS.CHANNEL_MESSAGE_RECEIVED;
71
- channel: string;
72
- count: number;
73
- provider?: string;
74
- }
75
- export interface ChannelBridgeConnectedEvent extends SidekickEventEnvelope {
76
- kind: typeof SIDEKICK_EVENT_KINDS.CHANNEL_BRIDGE_CONNECTED;
77
- channel: ChannelRecord;
78
- }
79
- export interface ChannelBridgeDisconnectedEvent extends SidekickEventEnvelope {
80
- kind: typeof SIDEKICK_EVENT_KINDS.CHANNEL_BRIDGE_DISCONNECTED;
81
- bridge_id: string;
82
- deleted_message_count: number;
83
- }
84
- export interface RoutinePlannedEvent extends SidekickEventEnvelope {
85
- kind: typeof SIDEKICK_EVENT_KINDS.ROUTINE_PLANNED;
86
- routine: RoutineRecord;
87
- }
88
- export interface RoutineCommittedEvent extends SidekickEventEnvelope {
89
- kind: typeof SIDEKICK_EVENT_KINDS.ROUTINE_COMMITTED;
90
- routine: RoutineRecord;
91
- /**
92
- * WU-2738 (INIT-060, ADR-013 §6 governance): content-hash of the commit
93
- * envelope carried when the event is emitted by the governed
94
- * `sidekick:routine:commit_plan` tool. PII stays inside the local
95
- * envelope; cloud correlates on the hash. Optional so the existing
96
- * update-triggered emission (routine:update) stays PII-free.
97
- */
98
- envelope_content_hash?: string;
99
- }
100
- export interface RoutineExecutedEvent extends SidekickEventEnvelope {
101
- kind: typeof SIDEKICK_EVENT_KINDS.ROUTINE_EXECUTED;
102
- routine_id: string;
103
- name: string;
104
- step_count: number;
105
- plan_only: true;
106
- }
107
- export interface RoutineStepFailedEvent extends SidekickEventEnvelope {
108
- kind: typeof SIDEKICK_EVENT_KINDS.ROUTINE_STEP_FAILED;
109
- step_index: number;
110
- reason: string;
111
- routine_id?: string;
112
- routine_name?: string;
113
- }
114
- export interface StateRehydratedEvent extends SidekickEventEnvelope {
115
- kind: typeof SIDEKICK_EVENT_KINDS.STATE_REHYDRATED;
116
- snapshot: SidekickStores;
117
- }
118
- export type SidekickEvent = TaskCreatedEvent | TaskCompletedEvent | TaskScheduledEvent | TaskSnoozedEvent | MemoryStoredEvent | MemoryRecalledEvent | MemoryForgottenEvent | ChannelMessageSentEvent | ChannelMessageReceivedEvent | ChannelBridgeConnectedEvent | ChannelBridgeDisconnectedEvent | RoutinePlannedEvent | RoutineCommittedEvent | RoutineExecutedEvent | RoutineStepFailedEvent | StateRehydratedEvent;
119
- export declare function resetSidekickSeqCounter(): void;
120
- export declare function readSidekickOrgId(config: unknown): string | undefined;
121
- export declare function emitSidekickEvent<TEvent extends SidekickEvent>(event: TEvent): Promise<TEvent>;
122
- export declare function snapshotSidekickState(): Promise<SidekickStores>;
123
- export declare function buildTaskCreatedEvent(task: TaskRecord): TaskCreatedEvent;
124
- export declare function buildTaskCompletedEvent(task: TaskRecord): TaskCompletedEvent;
125
- export declare function buildTaskScheduledEvent(task: TaskRecord): TaskScheduledEvent;
126
- export declare function buildTaskSnoozedEvent(input: {
127
- task_id: string;
128
- previous_due_at: string | null;
129
- due_at: string;
130
- }): TaskSnoozedEvent;
131
- export declare function buildMemoryStoredEvent(memory: MemoryRecord): MemoryStoredEvent;
132
- export declare function buildMemoryRecalledEvent(input: {
133
- query: string | null;
134
- memories: MemoryRecord[];
135
- }): MemoryRecalledEvent;
136
- export declare function buildMemoryForgottenEvent(memory_id: string): MemoryForgottenEvent;
137
- export declare function buildChannelMessageSentEvent(message: Record<string, unknown>): ChannelMessageSentEvent;
138
- export declare function buildChannelMessageReceivedEvent(input: {
139
- channel: string;
140
- count: number;
141
- provider?: string;
142
- }): ChannelMessageReceivedEvent;
143
- export declare function buildChannelBridgeConnectedEvent(channel: ChannelRecord): ChannelBridgeConnectedEvent;
144
- export declare function buildChannelBridgeDisconnectedEvent(input: {
145
- bridge_id: string;
146
- deleted_message_count: number;
147
- }): ChannelBridgeDisconnectedEvent;
148
- export declare function buildRoutinePlannedEvent(routine: RoutineRecord): RoutinePlannedEvent;
149
- export declare function buildRoutineCommittedEvent(routine: RoutineRecord, options?: {
150
- envelope_content_hash?: string;
151
- }): RoutineCommittedEvent;
152
- export declare function buildRoutineExecutedEvent(input: {
153
- routine_id: string;
154
- name: string;
155
- step_count: number;
156
- }): RoutineExecutedEvent;
157
- export declare function buildRoutineStepFailedEvent(input: {
158
- step_index: number;
159
- reason: string;
160
- routine_id?: string;
161
- routine_name?: string;
162
- }): RoutineStepFailedEvent;
163
- export declare function buildStateRehydratedEvent(snapshot: SidekickStores): StateRehydratedEvent;
164
- export declare function serializeLocalChannelMessage(message: ChannelMessageRecord, channelName?: string): Record<string, unknown>;
165
- export {};
166
- //# sourceMappingURL=sidekick-events.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidekick-events.d.ts","sourceRoot":"","sources":["../../src/sidekick-events.ts"],"names":[],"mappings":"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"}
@@ -1,288 +0,0 @@
1
- // Copyright (c) 2026 Hellmai Ltd
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- import { createHash, randomUUID } from 'node:crypto';
4
- import { appendFile, mkdir } from 'node:fs/promises';
5
- import path from 'node:path';
6
- import { getSidekickRuntimeContext } from '../tool-impl/runtime-context.js';
7
- import { getStoragePort, } from '../tool-impl/storage.js';
8
- const SCHEMA_VERSION_V2 = 2;
9
- const CONTENT_HASH_ALGORITHM = 'sha256';
10
- const CONTENT_HASH_ENCODING = 'hex';
11
- const CONTENT_HASH_PREFIX_LENGTH = 32;
12
- const OUTBOX_RELATIVE_PATH = path.join('.lumenflow', 'state', 'conductor', 'outbox', 'sidekick-events.jsonl');
13
- export const SIDEKICK_CHANNEL_ID = 'sidekick';
14
- export const SIDEKICK_EVENT_KINDS = {
15
- TASK_CREATED: 'sidekick:task_created',
16
- TASK_COMPLETED: 'sidekick:task_completed',
17
- TASK_SCHEDULED: 'sidekick:task_scheduled',
18
- TASK_SNOOZED: 'sidekick:task_snoozed',
19
- MEMORY_STORED: 'sidekick:memory_stored',
20
- MEMORY_RECALLED: 'sidekick:memory_recalled',
21
- MEMORY_FORGOTTEN: 'sidekick:memory_forgotten',
22
- CHANNEL_MESSAGE_SENT: 'sidekick:channel_message_sent',
23
- CHANNEL_MESSAGE_RECEIVED: 'sidekick:channel_message_received',
24
- CHANNEL_BRIDGE_CONNECTED: 'sidekick:channel_bridge_connected',
25
- CHANNEL_BRIDGE_DISCONNECTED: 'sidekick:channel_bridge_disconnected',
26
- ROUTINE_PLANNED: 'sidekick:routine_planned',
27
- ROUTINE_COMMITTED: 'sidekick:routine_committed',
28
- ROUTINE_EXECUTED: 'sidekick:routine_executed',
29
- ROUTINE_STEP_FAILED: 'sidekick:routine_step_failed',
30
- STATE_REHYDRATED: 'sidekick:state_rehydrated',
31
- };
32
- export const SIDEKICK_EVENT_KIND_VALUES = [
33
- SIDEKICK_EVENT_KINDS.TASK_CREATED,
34
- SIDEKICK_EVENT_KINDS.TASK_COMPLETED,
35
- SIDEKICK_EVENT_KINDS.TASK_SCHEDULED,
36
- SIDEKICK_EVENT_KINDS.TASK_SNOOZED,
37
- SIDEKICK_EVENT_KINDS.MEMORY_STORED,
38
- SIDEKICK_EVENT_KINDS.MEMORY_RECALLED,
39
- SIDEKICK_EVENT_KINDS.MEMORY_FORGOTTEN,
40
- SIDEKICK_EVENT_KINDS.CHANNEL_MESSAGE_SENT,
41
- SIDEKICK_EVENT_KINDS.CHANNEL_MESSAGE_RECEIVED,
42
- SIDEKICK_EVENT_KINDS.CHANNEL_BRIDGE_CONNECTED,
43
- SIDEKICK_EVENT_KINDS.CHANNEL_BRIDGE_DISCONNECTED,
44
- SIDEKICK_EVENT_KINDS.ROUTINE_PLANNED,
45
- SIDEKICK_EVENT_KINDS.ROUTINE_COMMITTED,
46
- SIDEKICK_EVENT_KINDS.ROUTINE_EXECUTED,
47
- SIDEKICK_EVENT_KINDS.ROUTINE_STEP_FAILED,
48
- SIDEKICK_EVENT_KINDS.STATE_REHYDRATED,
49
- ];
50
- const QUEUE_WITH_REPLAY = 'queue-with-replay';
51
- const EPHEMERAL = 'ephemeral';
52
- export const SIDEKICK_EVENT_BACKPRESSURE_POLICY = {
53
- [SIDEKICK_EVENT_KINDS.TASK_CREATED]: QUEUE_WITH_REPLAY,
54
- [SIDEKICK_EVENT_KINDS.TASK_COMPLETED]: QUEUE_WITH_REPLAY,
55
- [SIDEKICK_EVENT_KINDS.TASK_SCHEDULED]: QUEUE_WITH_REPLAY,
56
- [SIDEKICK_EVENT_KINDS.TASK_SNOOZED]: QUEUE_WITH_REPLAY,
57
- [SIDEKICK_EVENT_KINDS.MEMORY_STORED]: EPHEMERAL,
58
- [SIDEKICK_EVENT_KINDS.MEMORY_RECALLED]: EPHEMERAL,
59
- [SIDEKICK_EVENT_KINDS.MEMORY_FORGOTTEN]: EPHEMERAL,
60
- [SIDEKICK_EVENT_KINDS.CHANNEL_MESSAGE_SENT]: EPHEMERAL,
61
- [SIDEKICK_EVENT_KINDS.CHANNEL_MESSAGE_RECEIVED]: EPHEMERAL,
62
- [SIDEKICK_EVENT_KINDS.CHANNEL_BRIDGE_CONNECTED]: EPHEMERAL,
63
- [SIDEKICK_EVENT_KINDS.CHANNEL_BRIDGE_DISCONNECTED]: EPHEMERAL,
64
- [SIDEKICK_EVENT_KINDS.ROUTINE_PLANNED]: QUEUE_WITH_REPLAY,
65
- [SIDEKICK_EVENT_KINDS.ROUTINE_COMMITTED]: QUEUE_WITH_REPLAY,
66
- [SIDEKICK_EVENT_KINDS.ROUTINE_EXECUTED]: QUEUE_WITH_REPLAY,
67
- [SIDEKICK_EVENT_KINDS.ROUTINE_STEP_FAILED]: QUEUE_WITH_REPLAY,
68
- [SIDEKICK_EVENT_KINDS.STATE_REHYDRATED]: QUEUE_WITH_REPLAY,
69
- };
70
- const channelSeqCounters = new Map();
71
- function nextSeq(channelId) {
72
- const current = channelSeqCounters.get(channelId) ?? 0;
73
- const next = current + 1;
74
- channelSeqCounters.set(channelId, next);
75
- return next;
76
- }
77
- function resolveTimestamp(timestamp) {
78
- return timestamp ?? new Date().toISOString();
79
- }
80
- function resolveEventId(kind, payload, timestamp, idempotencyKey) {
81
- if (!idempotencyKey) {
82
- return randomUUID();
83
- }
84
- return createHash(CONTENT_HASH_ALGORITHM)
85
- .update(JSON.stringify({
86
- kind,
87
- payload,
88
- timestamp,
89
- idempotencyKey,
90
- }))
91
- .digest(CONTENT_HASH_ENCODING)
92
- .slice(0, CONTENT_HASH_PREFIX_LENGTH);
93
- }
94
- function stampSidekickEvent(payload, options) {
95
- const timestamp = resolveTimestamp(options?.timestamp);
96
- const event_id = resolveEventId(payload.kind, payload, timestamp, options?.idempotencyKey);
97
- return {
98
- ...payload,
99
- schema_version: SCHEMA_VERSION_V2,
100
- timestamp,
101
- event_id,
102
- channel_id: SIDEKICK_CHANNEL_ID,
103
- seq: nextSeq(SIDEKICK_CHANNEL_ID),
104
- };
105
- }
106
- async function queueEvent(event, workspaceRoot) {
107
- const outboxPath = path.join(workspaceRoot, OUTBOX_RELATIVE_PATH);
108
- await mkdir(path.dirname(outboxPath), { recursive: true });
109
- await appendFile(outboxPath, `${JSON.stringify(event)}\n`, 'utf8');
110
- }
111
- export function resetSidekickSeqCounter() {
112
- channelSeqCounters.clear();
113
- }
114
- export function readSidekickOrgId(config) {
115
- if (!config || typeof config !== 'object') {
116
- return undefined;
117
- }
118
- const controlPlane = config.control_plane;
119
- if (!controlPlane || typeof controlPlane !== 'object') {
120
- return undefined;
121
- }
122
- const raw = controlPlane.org_id;
123
- if (typeof raw !== 'string') {
124
- return undefined;
125
- }
126
- const trimmed = raw.trim();
127
- return trimmed.length > 0 ? trimmed : undefined;
128
- }
129
- export async function emitSidekickEvent(event) {
130
- const runtimeContext = getSidekickRuntimeContext();
131
- const policy = SIDEKICK_EVENT_BACKPRESSURE_POLICY[event.kind];
132
- const orgId = readSidekickOrgId(runtimeContext?.workspaceConfig);
133
- const sink = runtimeContext?.eventSink;
134
- if (policy === 'ephemeral') {
135
- if (!orgId || !sink) {
136
- return event;
137
- }
138
- try {
139
- await sink(event);
140
- }
141
- catch {
142
- // Ephemeral events fail silent when the control plane is unavailable.
143
- }
144
- return event;
145
- }
146
- if (orgId && sink) {
147
- try {
148
- await sink(event);
149
- return event;
150
- }
151
- catch {
152
- // Fall through to queued replay on transport failure.
153
- }
154
- }
155
- await queueEvent(event, runtimeContext?.workspaceRoot ?? process.cwd());
156
- return event;
157
- }
158
- export async function snapshotSidekickState() {
159
- const storage = getStoragePort();
160
- const [tasks, memories, channels, messages, routines] = await Promise.all([
161
- storage.readStore('tasks'),
162
- storage.readStore('memories'),
163
- storage.readStore('channels'),
164
- storage.readStore('messages'),
165
- storage.readStore('routines'),
166
- ]);
167
- return { tasks, memories, channels, messages, routines };
168
- }
169
- export function buildTaskCreatedEvent(task) {
170
- return stampSidekickEvent({
171
- kind: SIDEKICK_EVENT_KINDS.TASK_CREATED,
172
- task,
173
- });
174
- }
175
- export function buildTaskCompletedEvent(task) {
176
- return stampSidekickEvent({
177
- kind: SIDEKICK_EVENT_KINDS.TASK_COMPLETED,
178
- task,
179
- });
180
- }
181
- export function buildTaskScheduledEvent(task) {
182
- return stampSidekickEvent({
183
- kind: SIDEKICK_EVENT_KINDS.TASK_SCHEDULED,
184
- task,
185
- });
186
- }
187
- export function buildTaskSnoozedEvent(input) {
188
- return stampSidekickEvent({
189
- kind: SIDEKICK_EVENT_KINDS.TASK_SNOOZED,
190
- ...input,
191
- });
192
- }
193
- export function buildMemoryStoredEvent(memory) {
194
- return stampSidekickEvent({
195
- kind: SIDEKICK_EVENT_KINDS.MEMORY_STORED,
196
- memory,
197
- });
198
- }
199
- export function buildMemoryRecalledEvent(input) {
200
- return stampSidekickEvent({
201
- kind: SIDEKICK_EVENT_KINDS.MEMORY_RECALLED,
202
- query: input.query,
203
- count: input.memories.length,
204
- memory_ids: input.memories.map((memory) => memory.id),
205
- });
206
- }
207
- export function buildMemoryForgottenEvent(memory_id) {
208
- return stampSidekickEvent({
209
- kind: SIDEKICK_EVENT_KINDS.MEMORY_FORGOTTEN,
210
- memory_id,
211
- });
212
- }
213
- export function buildChannelMessageSentEvent(message) {
214
- return stampSidekickEvent({
215
- kind: SIDEKICK_EVENT_KINDS.CHANNEL_MESSAGE_SENT,
216
- message,
217
- });
218
- }
219
- export function buildChannelMessageReceivedEvent(input) {
220
- return stampSidekickEvent({
221
- kind: SIDEKICK_EVENT_KINDS.CHANNEL_MESSAGE_RECEIVED,
222
- channel: input.channel,
223
- count: input.count,
224
- ...(input.provider ? { provider: input.provider } : {}),
225
- });
226
- }
227
- export function buildChannelBridgeConnectedEvent(channel) {
228
- return stampSidekickEvent({
229
- kind: SIDEKICK_EVENT_KINDS.CHANNEL_BRIDGE_CONNECTED,
230
- channel,
231
- });
232
- }
233
- export function buildChannelBridgeDisconnectedEvent(input) {
234
- return stampSidekickEvent({
235
- kind: SIDEKICK_EVENT_KINDS.CHANNEL_BRIDGE_DISCONNECTED,
236
- ...input,
237
- });
238
- }
239
- export function buildRoutinePlannedEvent(routine) {
240
- return stampSidekickEvent({
241
- kind: SIDEKICK_EVENT_KINDS.ROUTINE_PLANNED,
242
- routine,
243
- });
244
- }
245
- export function buildRoutineCommittedEvent(routine, options) {
246
- return stampSidekickEvent({
247
- kind: SIDEKICK_EVENT_KINDS.ROUTINE_COMMITTED,
248
- routine,
249
- ...(options?.envelope_content_hash
250
- ? { envelope_content_hash: options.envelope_content_hash }
251
- : {}),
252
- });
253
- }
254
- export function buildRoutineExecutedEvent(input) {
255
- return stampSidekickEvent({
256
- kind: SIDEKICK_EVENT_KINDS.ROUTINE_EXECUTED,
257
- routine_id: input.routine_id,
258
- name: input.name,
259
- step_count: input.step_count,
260
- plan_only: true,
261
- });
262
- }
263
- export function buildRoutineStepFailedEvent(input) {
264
- return stampSidekickEvent({
265
- kind: SIDEKICK_EVENT_KINDS.ROUTINE_STEP_FAILED,
266
- step_index: input.step_index,
267
- reason: input.reason,
268
- ...(input.routine_id ? { routine_id: input.routine_id } : {}),
269
- ...(input.routine_name ? { routine_name: input.routine_name } : {}),
270
- });
271
- }
272
- export function buildStateRehydratedEvent(snapshot) {
273
- return stampSidekickEvent({
274
- kind: SIDEKICK_EVENT_KINDS.STATE_REHYDRATED,
275
- snapshot,
276
- });
277
- }
278
- export function serializeLocalChannelMessage(message, channelName) {
279
- return {
280
- id: message.id,
281
- channel_id: message.channel_id,
282
- ...(channelName ? { channel: channelName } : {}),
283
- sender: message.sender,
284
- content: message.content,
285
- created_at: message.created_at,
286
- };
287
- }
288
- //# sourceMappingURL=sidekick-events.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sidekick-events.js","sourceRoot":"","sources":["../../src/sidekick-events.ts"],"names":[],"mappings":"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"}