feique 1.1.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/LICENSE +21 -0
- package/README.en.md +220 -0
- package/README.md +265 -0
- package/dist/backend/claude.d.ts +36 -0
- package/dist/backend/claude.js +358 -0
- package/dist/backend/claude.js.map +1 -0
- package/dist/backend/codex.d.ts +31 -0
- package/dist/backend/codex.js +100 -0
- package/dist/backend/codex.js.map +1 -0
- package/dist/backend/factory.d.ts +9 -0
- package/dist/backend/factory.js +56 -0
- package/dist/backend/factory.js.map +1 -0
- package/dist/backend/types.d.ts +54 -0
- package/dist/backend/types.js +2 -0
- package/dist/backend/types.js.map +1 -0
- package/dist/bridge/commands.d.ts +135 -0
- package/dist/bridge/commands.js +860 -0
- package/dist/bridge/commands.js.map +1 -0
- package/dist/bridge/service.d.ts +160 -0
- package/dist/bridge/service.js +3785 -0
- package/dist/bridge/service.js.map +1 -0
- package/dist/bridge/task-queue.d.ts +14 -0
- package/dist/bridge/task-queue.js +81 -0
- package/dist/bridge/task-queue.js.map +1 -0
- package/dist/bridge/types.d.ts +39 -0
- package/dist/bridge/types.js +2 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +1199 -0
- package/dist/cli.js.map +1 -0
- package/dist/codex/capabilities.d.ts +20 -0
- package/dist/codex/capabilities.js +41 -0
- package/dist/codex/capabilities.js.map +1 -0
- package/dist/codex/runner.d.ts +47 -0
- package/dist/codex/runner.js +294 -0
- package/dist/codex/runner.js.map +1 -0
- package/dist/codex/session-index.d.ts +22 -0
- package/dist/codex/session-index.js +205 -0
- package/dist/codex/session-index.js.map +1 -0
- package/dist/collaboration/awareness.d.ts +36 -0
- package/dist/collaboration/awareness.js +107 -0
- package/dist/collaboration/awareness.js.map +1 -0
- package/dist/collaboration/digest.d.ts +65 -0
- package/dist/collaboration/digest.js +178 -0
- package/dist/collaboration/digest.js.map +1 -0
- package/dist/collaboration/handoff.d.ts +66 -0
- package/dist/collaboration/handoff.js +94 -0
- package/dist/collaboration/handoff.js.map +1 -0
- package/dist/collaboration/insights.d.ts +24 -0
- package/dist/collaboration/insights.js +243 -0
- package/dist/collaboration/insights.js.map +1 -0
- package/dist/collaboration/knowledge.d.ts +26 -0
- package/dist/collaboration/knowledge.js +105 -0
- package/dist/collaboration/knowledge.js.map +1 -0
- package/dist/collaboration/timeline.d.ts +31 -0
- package/dist/collaboration/timeline.js +150 -0
- package/dist/collaboration/timeline.js.map +1 -0
- package/dist/collaboration/trust.d.ts +49 -0
- package/dist/collaboration/trust.js +176 -0
- package/dist/collaboration/trust.js.map +1 -0
- package/dist/config/codex-skill.d.ts +7 -0
- package/dist/config/codex-skill.js +44 -0
- package/dist/config/codex-skill.js.map +1 -0
- package/dist/config/doctor.d.ts +12 -0
- package/dist/config/doctor.js +314 -0
- package/dist/config/doctor.js.map +1 -0
- package/dist/config/init.d.ts +3 -0
- package/dist/config/init.js +123 -0
- package/dist/config/init.js.map +1 -0
- package/dist/config/load.d.ts +33 -0
- package/dist/config/load.js +252 -0
- package/dist/config/load.js.map +1 -0
- package/dist/config/mutate.d.ts +21 -0
- package/dist/config/mutate.js +86 -0
- package/dist/config/mutate.js.map +1 -0
- package/dist/config/paths.d.ts +3 -0
- package/dist/config/paths.js +33 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +308 -0
- package/dist/config/schema.js +250 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/control-plane/project-session.d.ts +67 -0
- package/dist/control-plane/project-session.js +234 -0
- package/dist/control-plane/project-session.js.map +1 -0
- package/dist/feishu/base.d.ts +19 -0
- package/dist/feishu/base.js +93 -0
- package/dist/feishu/base.js.map +1 -0
- package/dist/feishu/cards.d.ts +22 -0
- package/dist/feishu/cards.js +144 -0
- package/dist/feishu/cards.js.map +1 -0
- package/dist/feishu/client.d.ts +61 -0
- package/dist/feishu/client.js +315 -0
- package/dist/feishu/client.js.map +1 -0
- package/dist/feishu/diagnostics.d.ts +42 -0
- package/dist/feishu/diagnostics.js +194 -0
- package/dist/feishu/diagnostics.js.map +1 -0
- package/dist/feishu/doc.d.ts +13 -0
- package/dist/feishu/doc.js +59 -0
- package/dist/feishu/doc.js.map +1 -0
- package/dist/feishu/extractors.d.ts +7 -0
- package/dist/feishu/extractors.js +215 -0
- package/dist/feishu/extractors.js.map +1 -0
- package/dist/feishu/long-connection.d.ts +12 -0
- package/dist/feishu/long-connection.js +41 -0
- package/dist/feishu/long-connection.js.map +1 -0
- package/dist/feishu/message-resource.d.ts +14 -0
- package/dist/feishu/message-resource.js +309 -0
- package/dist/feishu/message-resource.js.map +1 -0
- package/dist/feishu/replay.d.ts +37 -0
- package/dist/feishu/replay.js +114 -0
- package/dist/feishu/replay.js.map +1 -0
- package/dist/feishu/task.d.ts +18 -0
- package/dist/feishu/task.js +86 -0
- package/dist/feishu/task.js.map +1 -0
- package/dist/feishu/text.d.ts +23 -0
- package/dist/feishu/text.js +155 -0
- package/dist/feishu/text.js.map +1 -0
- package/dist/feishu/webhook.d.ts +23 -0
- package/dist/feishu/webhook.js +130 -0
- package/dist/feishu/webhook.js.map +1 -0
- package/dist/feishu/wiki.d.ts +52 -0
- package/dist/feishu/wiki.js +300 -0
- package/dist/feishu/wiki.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/search.d.ts +11 -0
- package/dist/knowledge/search.js +83 -0
- package/dist/knowledge/search.js.map +1 -0
- package/dist/logging.d.ts +3 -0
- package/dist/logging.js +40 -0
- package/dist/logging.js.map +1 -0
- package/dist/mcp/server.d.ts +34 -0
- package/dist/mcp/server.js +1196 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/memory/embedding-factory.d.ts +6 -0
- package/dist/memory/embedding-factory.js +20 -0
- package/dist/memory/embedding-factory.js.map +1 -0
- package/dist/memory/embeddings.d.ts +40 -0
- package/dist/memory/embeddings.js +150 -0
- package/dist/memory/embeddings.js.map +1 -0
- package/dist/memory/ollama-embeddings.d.ts +63 -0
- package/dist/memory/ollama-embeddings.js +215 -0
- package/dist/memory/ollama-embeddings.js.map +1 -0
- package/dist/memory/retrieve.d.ts +17 -0
- package/dist/memory/retrieve.js +29 -0
- package/dist/memory/retrieve.js.map +1 -0
- package/dist/memory/summarize.d.ts +13 -0
- package/dist/memory/summarize.js +58 -0
- package/dist/memory/summarize.js.map +1 -0
- package/dist/observability/cost.d.ts +12 -0
- package/dist/observability/cost.js +22 -0
- package/dist/observability/cost.js.map +1 -0
- package/dist/observability/dashboard-html.d.ts +5 -0
- package/dist/observability/dashboard-html.js +304 -0
- package/dist/observability/dashboard-html.js.map +1 -0
- package/dist/observability/metrics.d.ts +36 -0
- package/dist/observability/metrics.js +230 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/readiness.d.ts +31 -0
- package/dist/observability/readiness.js +57 -0
- package/dist/observability/readiness.js.map +1 -0
- package/dist/observability/server.d.ts +84 -0
- package/dist/observability/server.js +181 -0
- package/dist/observability/server.js.map +1 -0
- package/dist/projects/paths.d.ts +9 -0
- package/dist/projects/paths.js +30 -0
- package/dist/projects/paths.js.map +1 -0
- package/dist/runtime/instance-lock.d.ts +12 -0
- package/dist/runtime/instance-lock.js +99 -0
- package/dist/runtime/instance-lock.js.map +1 -0
- package/dist/runtime/process.d.ts +2 -0
- package/dist/runtime/process.js +43 -0
- package/dist/runtime/process.js.map +1 -0
- package/dist/runtime/shutdown.d.ts +11 -0
- package/dist/runtime/shutdown.js +38 -0
- package/dist/runtime/shutdown.js.map +1 -0
- package/dist/security/access.d.ts +13 -0
- package/dist/security/access.js +160 -0
- package/dist/security/access.js.map +1 -0
- package/dist/service/install.d.ts +19 -0
- package/dist/service/install.js +35 -0
- package/dist/service/install.js.map +1 -0
- package/dist/service/templates.d.ts +22 -0
- package/dist/service/templates.js +118 -0
- package/dist/service/templates.js.map +1 -0
- package/dist/state/audit-log.d.ts +33 -0
- package/dist/state/audit-log.js +116 -0
- package/dist/state/audit-log.js.map +1 -0
- package/dist/state/config-history-store.d.ts +27 -0
- package/dist/state/config-history-store.js +65 -0
- package/dist/state/config-history-store.js.map +1 -0
- package/dist/state/handoff-store.d.ts +20 -0
- package/dist/state/handoff-store.js +97 -0
- package/dist/state/handoff-store.js.map +1 -0
- package/dist/state/idempotency-store.d.ts +19 -0
- package/dist/state/idempotency-store.js +84 -0
- package/dist/state/idempotency-store.js.map +1 -0
- package/dist/state/memory-store.d.ts +137 -0
- package/dist/state/memory-store.js +713 -0
- package/dist/state/memory-store.js.map +1 -0
- package/dist/state/pending-command-store.d.ts +30 -0
- package/dist/state/pending-command-store.js +108 -0
- package/dist/state/pending-command-store.js.map +1 -0
- package/dist/state/run-state-store.d.ts +58 -0
- package/dist/state/run-state-store.js +269 -0
- package/dist/state/run-state-store.js.map +1 -0
- package/dist/state/session-store.d.ts +56 -0
- package/dist/state/session-store.js +275 -0
- package/dist/state/session-store.js.map +1 -0
- package/dist/state/trust-store.d.ts +15 -0
- package/dist/state/trust-store.js +53 -0
- package/dist/state/trust-store.js.map +1 -0
- package/dist/utils/fs.d.ts +4 -0
- package/dist/utils/fs.js +26 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/json.d.ts +1 -0
- package/dist/utils/json.js +9 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/path.d.ts +3 -0
- package/dist/utils/path.js +22 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/serial-executor.d.ts +5 -0
- package/dist/utils/serial-executor.js +12 -0
- package/dist/utils/serial-executor.js.map +1 -0
- package/package.json +71 -0
- package/skills/feique-session/SKILL.md +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/state/memory-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { BridgeCommand } from '../bridge/commands.js';
|
|
2
|
+
export interface PendingCommandRecord {
|
|
3
|
+
key: string;
|
|
4
|
+
chat_id: string;
|
|
5
|
+
actor_id?: string;
|
|
6
|
+
source_text: string;
|
|
7
|
+
summary: string;
|
|
8
|
+
command: BridgeCommand;
|
|
9
|
+
created_at: string;
|
|
10
|
+
expires_at: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class PendingCommandStore {
|
|
13
|
+
private readonly filePath;
|
|
14
|
+
private readonly serial;
|
|
15
|
+
constructor(stateDir: string);
|
|
16
|
+
save(input: {
|
|
17
|
+
chatId: string;
|
|
18
|
+
actorId?: string;
|
|
19
|
+
sourceText: string;
|
|
20
|
+
summary: string;
|
|
21
|
+
command: BridgeCommand;
|
|
22
|
+
ttlSeconds: number;
|
|
23
|
+
}): Promise<PendingCommandRecord>;
|
|
24
|
+
get(chatId: string, actorId?: string): Promise<PendingCommandRecord | null>;
|
|
25
|
+
consume(chatId: string, actorId?: string): Promise<PendingCommandRecord | null>;
|
|
26
|
+
clear(chatId: string, actorId?: string): Promise<void>;
|
|
27
|
+
private readState;
|
|
28
|
+
private writeState;
|
|
29
|
+
}
|
|
30
|
+
export declare function buildPendingCommandKey(chatId: string, actorId?: string): string;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { SerialExecutor } from '../utils/serial-executor.js';
|
|
3
|
+
import { ensureDir, fileExists, readUtf8, writeUtf8Atomic } from '../utils/fs.js';
|
|
4
|
+
const DEFAULT_STATE = {
|
|
5
|
+
version: 1,
|
|
6
|
+
records: {},
|
|
7
|
+
};
|
|
8
|
+
export class PendingCommandStore {
|
|
9
|
+
filePath;
|
|
10
|
+
serial = new SerialExecutor();
|
|
11
|
+
constructor(stateDir) {
|
|
12
|
+
this.filePath = path.join(stateDir, 'pending-commands.json');
|
|
13
|
+
}
|
|
14
|
+
async save(input) {
|
|
15
|
+
return this.serial.run(async () => {
|
|
16
|
+
const state = await this.readState();
|
|
17
|
+
const now = new Date();
|
|
18
|
+
const key = buildPendingCommandKey(input.chatId, input.actorId);
|
|
19
|
+
const record = {
|
|
20
|
+
key,
|
|
21
|
+
chat_id: input.chatId,
|
|
22
|
+
...(input.actorId ? { actor_id: input.actorId } : {}),
|
|
23
|
+
source_text: input.sourceText,
|
|
24
|
+
summary: input.summary,
|
|
25
|
+
command: input.command,
|
|
26
|
+
created_at: now.toISOString(),
|
|
27
|
+
expires_at: new Date(now.getTime() + input.ttlSeconds * 1000).toISOString(),
|
|
28
|
+
};
|
|
29
|
+
state.records[key] = record;
|
|
30
|
+
pruneExpiredRecords(state, now.toISOString());
|
|
31
|
+
await this.writeState(state);
|
|
32
|
+
return record;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async get(chatId, actorId) {
|
|
36
|
+
return this.serial.run(async () => {
|
|
37
|
+
const state = await this.readState();
|
|
38
|
+
const now = new Date().toISOString();
|
|
39
|
+
const key = buildPendingCommandKey(chatId, actorId);
|
|
40
|
+
const record = state.records[key];
|
|
41
|
+
if (!record) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
if (Date.parse(record.expires_at) <= Date.parse(now)) {
|
|
45
|
+
delete state.records[key];
|
|
46
|
+
await this.writeState(state);
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return record;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async consume(chatId, actorId) {
|
|
53
|
+
return this.serial.run(async () => {
|
|
54
|
+
const state = await this.readState();
|
|
55
|
+
const now = new Date().toISOString();
|
|
56
|
+
const key = buildPendingCommandKey(chatId, actorId);
|
|
57
|
+
const record = state.records[key];
|
|
58
|
+
if (!record) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
delete state.records[key];
|
|
62
|
+
pruneExpiredRecords(state, now);
|
|
63
|
+
await this.writeState(state);
|
|
64
|
+
if (Date.parse(record.expires_at) <= Date.parse(now)) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return record;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
async clear(chatId, actorId) {
|
|
71
|
+
await this.serial.run(async () => {
|
|
72
|
+
const state = await this.readState();
|
|
73
|
+
delete state.records[buildPendingCommandKey(chatId, actorId)];
|
|
74
|
+
await this.writeState(state);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async readState() {
|
|
78
|
+
if (!(await fileExists(this.filePath))) {
|
|
79
|
+
return structuredClone(DEFAULT_STATE);
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const content = await readUtf8(this.filePath);
|
|
83
|
+
const parsed = JSON.parse(content);
|
|
84
|
+
return {
|
|
85
|
+
version: 1,
|
|
86
|
+
records: parsed.records ?? {},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return structuredClone(DEFAULT_STATE);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async writeState(state) {
|
|
94
|
+
await ensureDir(path.dirname(this.filePath));
|
|
95
|
+
await writeUtf8Atomic(this.filePath, `${JSON.stringify(state, null, 2)}\n`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export function buildPendingCommandKey(chatId, actorId) {
|
|
99
|
+
return `${chatId}::${actorId ?? 'actor'}`;
|
|
100
|
+
}
|
|
101
|
+
function pruneExpiredRecords(state, nowIso) {
|
|
102
|
+
for (const [key, record] of Object.entries(state.records)) {
|
|
103
|
+
if (Date.parse(record.expires_at) <= Date.parse(nowIso)) {
|
|
104
|
+
delete state.records[key];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=pending-command-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-command-store.js","sourceRoot":"","sources":["../../src/state/pending-command-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export type RunStatus = 'queued' | 'running' | 'success' | 'failure' | 'cancelled' | 'stale' | 'orphaned';
|
|
2
|
+
export interface RunState {
|
|
3
|
+
run_id: string;
|
|
4
|
+
queue_key: string;
|
|
5
|
+
conversation_key: string;
|
|
6
|
+
project_alias: string;
|
|
7
|
+
chat_id: string;
|
|
8
|
+
actor_id?: string;
|
|
9
|
+
session_id?: string;
|
|
10
|
+
project_root?: string;
|
|
11
|
+
pid?: number;
|
|
12
|
+
prompt_excerpt: string;
|
|
13
|
+
status: RunStatus;
|
|
14
|
+
status_detail?: string;
|
|
15
|
+
started_at: string;
|
|
16
|
+
updated_at: string;
|
|
17
|
+
finished_at?: string;
|
|
18
|
+
error?: string;
|
|
19
|
+
input_tokens?: number;
|
|
20
|
+
output_tokens?: number;
|
|
21
|
+
estimated_cost_usd?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class RunStateStore {
|
|
24
|
+
private readonly db;
|
|
25
|
+
private readonly serial;
|
|
26
|
+
constructor(stateDir: string);
|
|
27
|
+
close(): void;
|
|
28
|
+
upsertRun(runId: string, patch: Partial<RunState> & Pick<RunState, 'queue_key' | 'conversation_key' | 'project_alias' | 'chat_id' | 'prompt_excerpt' | 'status'>): Promise<RunState>;
|
|
29
|
+
getRun(runId: string): Promise<RunState | null>;
|
|
30
|
+
listRuns(): Promise<RunState[]>;
|
|
31
|
+
getActiveRun(queueKey: string): Promise<RunState | null>;
|
|
32
|
+
getLatestVisibleRun(queueKey: string): Promise<RunState | null>;
|
|
33
|
+
listActiveRuns(): Promise<RunState[]>;
|
|
34
|
+
getExecutionRunByProjectRoot(projectRoot: string): Promise<RunState | null>;
|
|
35
|
+
recoverOrphanedRuns(): Promise<RunState[]>;
|
|
36
|
+
getCostSummary(hours?: number): Promise<{
|
|
37
|
+
total_runs: number;
|
|
38
|
+
total_input_tokens: number;
|
|
39
|
+
total_output_tokens: number;
|
|
40
|
+
total_cost_usd: number;
|
|
41
|
+
by_project: Record<string, {
|
|
42
|
+
runs: number;
|
|
43
|
+
input_tokens: number;
|
|
44
|
+
output_tokens: number;
|
|
45
|
+
cost_usd: number;
|
|
46
|
+
}>;
|
|
47
|
+
by_actor: Record<string, {
|
|
48
|
+
runs: number;
|
|
49
|
+
input_tokens: number;
|
|
50
|
+
output_tokens: number;
|
|
51
|
+
cost_usd: number;
|
|
52
|
+
}>;
|
|
53
|
+
}>;
|
|
54
|
+
private getRunSync;
|
|
55
|
+
private updateRunInPlace;
|
|
56
|
+
private pruneOldRuns;
|
|
57
|
+
private nextMonotonicTimestamp;
|
|
58
|
+
}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
4
|
+
import { SerialExecutor } from '../utils/serial-executor.js';
|
|
5
|
+
import { isProcessAlive } from '../runtime/process.js';
|
|
6
|
+
/** Retention: auto-delete completed/failed/cancelled runs older than 30 days. */
|
|
7
|
+
const RETENTION_DAYS = 30;
|
|
8
|
+
export class RunStateStore {
|
|
9
|
+
db;
|
|
10
|
+
serial = new SerialExecutor();
|
|
11
|
+
constructor(stateDir) {
|
|
12
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
13
|
+
const dbPath = path.join(stateDir, 'runs.db');
|
|
14
|
+
this.db = new DatabaseSync(dbPath);
|
|
15
|
+
initializeSchema(this.db);
|
|
16
|
+
}
|
|
17
|
+
close() {
|
|
18
|
+
this.db.close();
|
|
19
|
+
}
|
|
20
|
+
async upsertRun(runId, patch) {
|
|
21
|
+
return this.serial.run(async () => {
|
|
22
|
+
const existing = this.getRunSync(runId);
|
|
23
|
+
const now = this.nextMonotonicTimestamp();
|
|
24
|
+
const next = {
|
|
25
|
+
run_id: runId,
|
|
26
|
+
queue_key: patch.queue_key,
|
|
27
|
+
conversation_key: patch.conversation_key,
|
|
28
|
+
project_alias: patch.project_alias,
|
|
29
|
+
chat_id: patch.chat_id,
|
|
30
|
+
prompt_excerpt: patch.prompt_excerpt,
|
|
31
|
+
status: patch.status,
|
|
32
|
+
started_at: existing?.started_at ?? now,
|
|
33
|
+
updated_at: now,
|
|
34
|
+
actor_id: pickPatchedValue(patch, 'actor_id', existing?.actor_id),
|
|
35
|
+
session_id: pickPatchedValue(patch, 'session_id', existing?.session_id),
|
|
36
|
+
project_root: pickPatchedValue(patch, 'project_root', existing?.project_root),
|
|
37
|
+
pid: pickPatchedValue(patch, 'pid', existing?.pid),
|
|
38
|
+
status_detail: pickPatchedValue(patch, 'status_detail', existing?.status_detail),
|
|
39
|
+
finished_at: pickPatchedValue(patch, 'finished_at', existing?.finished_at),
|
|
40
|
+
error: pickPatchedValue(patch, 'error', existing?.error),
|
|
41
|
+
input_tokens: pickPatchedValue(patch, 'input_tokens', existing?.input_tokens),
|
|
42
|
+
output_tokens: pickPatchedValue(patch, 'output_tokens', existing?.output_tokens),
|
|
43
|
+
estimated_cost_usd: pickPatchedValue(patch, 'estimated_cost_usd', existing?.estimated_cost_usd),
|
|
44
|
+
};
|
|
45
|
+
if (isTerminalRunStatus(next.status)) {
|
|
46
|
+
next.finished_at = patch.finished_at ?? now;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
next.finished_at = undefined;
|
|
50
|
+
}
|
|
51
|
+
this.db.prepare(`
|
|
52
|
+
INSERT OR REPLACE INTO runs (
|
|
53
|
+
run_id, queue_key, conversation_key, project_alias, chat_id,
|
|
54
|
+
actor_id, session_id, project_root, pid, prompt_excerpt,
|
|
55
|
+
status, status_detail, started_at, updated_at, finished_at, error,
|
|
56
|
+
input_tokens, output_tokens, estimated_cost_usd
|
|
57
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
58
|
+
`).run(next.run_id, next.queue_key, next.conversation_key, next.project_alias, next.chat_id, next.actor_id ?? null, next.session_id ?? null, next.project_root ?? null, next.pid ?? null, next.prompt_excerpt, next.status, next.status_detail ?? null, next.started_at, next.updated_at, next.finished_at ?? null, next.error ?? null, next.input_tokens ?? null, next.output_tokens ?? null, next.estimated_cost_usd ?? null);
|
|
59
|
+
this.pruneOldRuns();
|
|
60
|
+
return next;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async getRun(runId) {
|
|
64
|
+
await this.serial.wait();
|
|
65
|
+
return this.getRunSync(runId);
|
|
66
|
+
}
|
|
67
|
+
async listRuns() {
|
|
68
|
+
await this.serial.wait();
|
|
69
|
+
const rows = this.db.prepare('SELECT * FROM runs ORDER BY updated_at DESC').all();
|
|
70
|
+
return rows.map(mapRunRow);
|
|
71
|
+
}
|
|
72
|
+
async getActiveRun(queueKey) {
|
|
73
|
+
await this.serial.wait();
|
|
74
|
+
const row = this.db.prepare("SELECT * FROM runs WHERE queue_key = ? AND status IN ('running', 'orphaned') ORDER BY updated_at DESC LIMIT 1").get(queueKey);
|
|
75
|
+
return row ? mapRunRow(row) : null;
|
|
76
|
+
}
|
|
77
|
+
async getLatestVisibleRun(queueKey) {
|
|
78
|
+
await this.serial.wait();
|
|
79
|
+
const row = this.db.prepare("SELECT * FROM runs WHERE queue_key = ? AND status IN ('queued', 'running', 'orphaned') ORDER BY updated_at DESC LIMIT 1").get(queueKey);
|
|
80
|
+
return row ? mapRunRow(row) : null;
|
|
81
|
+
}
|
|
82
|
+
async listActiveRuns() {
|
|
83
|
+
await this.serial.wait();
|
|
84
|
+
const rows = this.db.prepare("SELECT * FROM runs WHERE status IN ('queued', 'running', 'orphaned') ORDER BY updated_at DESC").all();
|
|
85
|
+
return rows.map(mapRunRow);
|
|
86
|
+
}
|
|
87
|
+
async getExecutionRunByProjectRoot(projectRoot) {
|
|
88
|
+
await this.serial.wait();
|
|
89
|
+
const row = this.db.prepare("SELECT * FROM runs WHERE project_root = ? AND status IN ('running', 'orphaned') ORDER BY updated_at DESC LIMIT 1").get(projectRoot);
|
|
90
|
+
return row ? mapRunRow(row) : null;
|
|
91
|
+
}
|
|
92
|
+
async recoverOrphanedRuns() {
|
|
93
|
+
return this.serial.run(async () => {
|
|
94
|
+
const rows = this.db.prepare("SELECT * FROM runs WHERE status IN ('queued', 'running')").all();
|
|
95
|
+
const recovered = [];
|
|
96
|
+
const now = new Date().toISOString();
|
|
97
|
+
for (const row of rows) {
|
|
98
|
+
const run = mapRunRow(row);
|
|
99
|
+
if (run.status === 'queued') {
|
|
100
|
+
run.status = 'stale';
|
|
101
|
+
run.finished_at = now;
|
|
102
|
+
run.updated_at = now;
|
|
103
|
+
this.updateRunInPlace(run);
|
|
104
|
+
recovered.push({ ...run });
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (run.status !== 'running') {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (run.pid && isProcessAlive(run.pid)) {
|
|
111
|
+
run.status = 'orphaned';
|
|
112
|
+
run.updated_at = now;
|
|
113
|
+
this.updateRunInPlace(run);
|
|
114
|
+
recovered.push({ ...run });
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
run.status = 'stale';
|
|
118
|
+
run.finished_at = now;
|
|
119
|
+
run.updated_at = now;
|
|
120
|
+
this.updateRunInPlace(run);
|
|
121
|
+
recovered.push({ ...run });
|
|
122
|
+
}
|
|
123
|
+
return recovered;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async getCostSummary(hours = 24) {
|
|
127
|
+
await this.serial.wait();
|
|
128
|
+
const cutoff = new Date(Date.now() - hours * 3600_000).toISOString();
|
|
129
|
+
const rows = this.db.prepare('SELECT * FROM runs WHERE started_at >= ?').all(cutoff);
|
|
130
|
+
let totalInputTokens = 0;
|
|
131
|
+
let totalOutputTokens = 0;
|
|
132
|
+
let totalCostUsd = 0;
|
|
133
|
+
const byProject = new Map();
|
|
134
|
+
const byActor = new Map();
|
|
135
|
+
for (const row of rows) {
|
|
136
|
+
const input = row.input_tokens ?? 0;
|
|
137
|
+
const output = row.output_tokens ?? 0;
|
|
138
|
+
const cost = row.estimated_cost_usd ?? 0;
|
|
139
|
+
totalInputTokens += input;
|
|
140
|
+
totalOutputTokens += output;
|
|
141
|
+
totalCostUsd += cost;
|
|
142
|
+
// By project
|
|
143
|
+
const projEntry = byProject.get(row.project_alias) ?? { runs: 0, input_tokens: 0, output_tokens: 0, cost_usd: 0 };
|
|
144
|
+
projEntry.runs += 1;
|
|
145
|
+
projEntry.input_tokens += input;
|
|
146
|
+
projEntry.output_tokens += output;
|
|
147
|
+
projEntry.cost_usd += cost;
|
|
148
|
+
byProject.set(row.project_alias, projEntry);
|
|
149
|
+
// By actor
|
|
150
|
+
const actorKey = row.actor_id ?? 'unknown';
|
|
151
|
+
const actorEntry = byActor.get(actorKey) ?? { runs: 0, input_tokens: 0, output_tokens: 0, cost_usd: 0 };
|
|
152
|
+
actorEntry.runs += 1;
|
|
153
|
+
actorEntry.input_tokens += input;
|
|
154
|
+
actorEntry.output_tokens += output;
|
|
155
|
+
actorEntry.cost_usd += cost;
|
|
156
|
+
byActor.set(actorKey, actorEntry);
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
total_runs: rows.length,
|
|
160
|
+
total_input_tokens: totalInputTokens,
|
|
161
|
+
total_output_tokens: totalOutputTokens,
|
|
162
|
+
total_cost_usd: totalCostUsd,
|
|
163
|
+
by_project: Object.fromEntries(byProject),
|
|
164
|
+
by_actor: Object.fromEntries(byActor),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// ── private helpers ──
|
|
168
|
+
getRunSync(runId) {
|
|
169
|
+
const row = this.db.prepare('SELECT * FROM runs WHERE run_id = ?').get(runId);
|
|
170
|
+
return row ? mapRunRow(row) : null;
|
|
171
|
+
}
|
|
172
|
+
updateRunInPlace(run) {
|
|
173
|
+
this.db.prepare(`
|
|
174
|
+
UPDATE runs SET
|
|
175
|
+
queue_key = ?, conversation_key = ?, project_alias = ?, chat_id = ?,
|
|
176
|
+
actor_id = ?, session_id = ?, project_root = ?, pid = ?,
|
|
177
|
+
prompt_excerpt = ?, status = ?, status_detail = ?,
|
|
178
|
+
started_at = ?, updated_at = ?, finished_at = ?, error = ?,
|
|
179
|
+
input_tokens = ?, output_tokens = ?, estimated_cost_usd = ?
|
|
180
|
+
WHERE run_id = ?
|
|
181
|
+
`).run(run.queue_key, run.conversation_key, run.project_alias, run.chat_id, run.actor_id ?? null, run.session_id ?? null, run.project_root ?? null, run.pid ?? null, run.prompt_excerpt, run.status, run.status_detail ?? null, run.started_at, run.updated_at, run.finished_at ?? null, run.error ?? null, run.input_tokens ?? null, run.output_tokens ?? null, run.estimated_cost_usd ?? null, run.run_id);
|
|
182
|
+
}
|
|
183
|
+
pruneOldRuns() {
|
|
184
|
+
const cutoff = new Date(Date.now() - RETENTION_DAYS * 24 * 60 * 60 * 1000).toISOString();
|
|
185
|
+
this.db.prepare("DELETE FROM runs WHERE status IN ('success', 'failure', 'cancelled') AND finished_at IS NOT NULL AND finished_at < ?").run(cutoff);
|
|
186
|
+
}
|
|
187
|
+
nextMonotonicTimestamp() {
|
|
188
|
+
const row = this.db.prepare('SELECT MAX(updated_at) AS latest FROM runs').get();
|
|
189
|
+
const latestStr = row?.latest;
|
|
190
|
+
const latestMs = latestStr ? Date.parse(latestStr) : 0;
|
|
191
|
+
const now = Date.now();
|
|
192
|
+
return new Date(Math.max(now, (Number.isNaN(latestMs) ? 0 : latestMs) + 1)).toISOString();
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function mapRunRow(row) {
|
|
196
|
+
return {
|
|
197
|
+
run_id: row.run_id,
|
|
198
|
+
queue_key: row.queue_key,
|
|
199
|
+
conversation_key: row.conversation_key,
|
|
200
|
+
project_alias: row.project_alias,
|
|
201
|
+
chat_id: row.chat_id,
|
|
202
|
+
actor_id: row.actor_id ?? undefined,
|
|
203
|
+
session_id: row.session_id ?? undefined,
|
|
204
|
+
project_root: row.project_root ?? undefined,
|
|
205
|
+
pid: row.pid ?? undefined,
|
|
206
|
+
prompt_excerpt: row.prompt_excerpt,
|
|
207
|
+
status: row.status,
|
|
208
|
+
status_detail: row.status_detail ?? undefined,
|
|
209
|
+
started_at: row.started_at,
|
|
210
|
+
updated_at: row.updated_at,
|
|
211
|
+
finished_at: row.finished_at ?? undefined,
|
|
212
|
+
error: row.error ?? undefined,
|
|
213
|
+
input_tokens: row.input_tokens ?? undefined,
|
|
214
|
+
output_tokens: row.output_tokens ?? undefined,
|
|
215
|
+
estimated_cost_usd: row.estimated_cost_usd ?? undefined,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// ── Schema bootstrap ──
|
|
219
|
+
function initializeSchema(db) {
|
|
220
|
+
db.exec('PRAGMA journal_mode = WAL;');
|
|
221
|
+
db.exec(`
|
|
222
|
+
CREATE TABLE IF NOT EXISTS runs (
|
|
223
|
+
run_id TEXT PRIMARY KEY,
|
|
224
|
+
queue_key TEXT NOT NULL,
|
|
225
|
+
conversation_key TEXT NOT NULL,
|
|
226
|
+
project_alias TEXT NOT NULL,
|
|
227
|
+
chat_id TEXT NOT NULL,
|
|
228
|
+
actor_id TEXT,
|
|
229
|
+
session_id TEXT,
|
|
230
|
+
project_root TEXT,
|
|
231
|
+
pid INTEGER,
|
|
232
|
+
prompt_excerpt TEXT NOT NULL,
|
|
233
|
+
status TEXT NOT NULL,
|
|
234
|
+
status_detail TEXT,
|
|
235
|
+
started_at TEXT NOT NULL,
|
|
236
|
+
updated_at TEXT NOT NULL,
|
|
237
|
+
finished_at TEXT,
|
|
238
|
+
error TEXT,
|
|
239
|
+
input_tokens INTEGER,
|
|
240
|
+
output_tokens INTEGER,
|
|
241
|
+
estimated_cost_usd REAL
|
|
242
|
+
);
|
|
243
|
+
|
|
244
|
+
CREATE INDEX IF NOT EXISTS idx_runs_status_project ON runs(status, project_alias);
|
|
245
|
+
CREATE INDEX IF NOT EXISTS idx_runs_project_root_status ON runs(project_root, status);
|
|
246
|
+
CREATE INDEX IF NOT EXISTS idx_runs_queue_key_status ON runs(queue_key, status);
|
|
247
|
+
CREATE INDEX IF NOT EXISTS idx_runs_started_at ON runs(started_at);
|
|
248
|
+
`);
|
|
249
|
+
// Migrate existing databases that lack the token columns.
|
|
250
|
+
const cols = db.prepare("PRAGMA table_info('runs')").all();
|
|
251
|
+
const colNames = new Set(cols.map((c) => c.name));
|
|
252
|
+
if (!colNames.has('input_tokens')) {
|
|
253
|
+
db.exec('ALTER TABLE runs ADD COLUMN input_tokens INTEGER;');
|
|
254
|
+
}
|
|
255
|
+
if (!colNames.has('output_tokens')) {
|
|
256
|
+
db.exec('ALTER TABLE runs ADD COLUMN output_tokens INTEGER;');
|
|
257
|
+
}
|
|
258
|
+
if (!colNames.has('estimated_cost_usd')) {
|
|
259
|
+
db.exec('ALTER TABLE runs ADD COLUMN estimated_cost_usd REAL;');
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// ── Utility functions (unchanged public contract) ──
|
|
263
|
+
function isTerminalRunStatus(status) {
|
|
264
|
+
return status === 'success' || status === 'failure' || status === 'cancelled' || status === 'stale';
|
|
265
|
+
}
|
|
266
|
+
function pickPatchedValue(patch, key, fallback) {
|
|
267
|
+
return (Object.prototype.hasOwnProperty.call(patch, key) ? patch[key] : fallback);
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=run-state-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-state-store.js","sourceRoot":"","sources":["../../src/state/run-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AA0BvD,iFAAiF;AACjF,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,MAAM,OAAO,aAAa;IACP,EAAE,CAAe;IACjB,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;IAE/C,YAAmB,QAAgB;QACjC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QACnC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,SAAS,CACpB,KAAa,EACb,KAAuI;QAEvI,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAa;gBACrB,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;gBACxC,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,GAAG;gBACvC,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC;gBACjE,UAAU,EAAE,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC;gBACvE,YAAY,EAAE,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC;gBAC7E,GAAG,EAAE,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC;gBAClD,aAAa,EAAE,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,CAAC;gBAChF,WAAW,EAAE,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,CAAC;gBAC1E,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC;gBACxD,YAAY,EAAE,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,CAAC;gBAC7E,aAAa,EAAE,gBAAgB,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,CAAC;gBAChF,kBAAkB,EAAE,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,kBAAkB,CAAC;aAChG,CAAC;YACF,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC/B,CAAC;YAED,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;OAOf,CAAC,CAAC,GAAG,CACJ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,QAAQ,IAAI,IAAI,EACrB,IAAI,CAAC,UAAU,IAAI,IAAI,EACvB,IAAI,CAAC,YAAY,IAAI,IAAI,EACzB,IAAI,CAAC,GAAG,IAAI,IAAI,EAChB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,aAAa,IAAI,IAAI,EAC1B,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,IAAI,IAAI,EACxB,IAAI,CAAC,KAAK,IAAI,IAAI,EAClB,IAAI,CAAC,YAAY,IAAI,IAAI,EACzB,IAAI,CAAC,aAAa,IAAI,IAAI,EAC1B,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAChC,CAAC;YAEF,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAa;QAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EAAyB,CAAC;QACzG,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,QAAgB;QACxC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,+GAA+G,CAChH,CAAC,GAAG,CAAC,QAAQ,CAAkC,CAAC;QACjD,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,yHAAyH,CAC1H,CAAC,GAAG,CAAC,QAAQ,CAAkC,CAAC;QACjD,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,+FAA+F,CAChG,CAAC,GAAG,EAAyB,CAAC;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,4BAA4B,CAAC,WAAmB;QAC3D,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CACzB,kHAAkH,CACnH,CAAC,GAAG,CAAC,WAAW,CAAkC,CAAC;QACpD,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,0DAA0D,CAC3D,CAAC,GAAG,EAAyB,CAAC;YAE/B,MAAM,SAAS,GAAe,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAErC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC5B,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;oBACrB,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;oBACtB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAC3B,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;oBAC3B,SAAS;gBACX,CAAC;gBACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;oBAC7B,SAAS;gBACX,CAAC;gBACD,IAAI,GAAG,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC;oBACxB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;oBACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAC3B,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;oBAC3B,SAAS;gBACX,CAAC;gBACD,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;gBACrB,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;gBACtB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAC3B,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE;QAQ5C,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC1B,0CAA0C,CAC3C,CAAC,GAAG,CAAC,MAAM,CAAwB,CAAC;QAErC,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,GAAG,EAA2F,CAAC;QACrH,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2F,CAAC;QAEnH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,GAAG,CAAC,kBAAkB,IAAI,CAAC,CAAC;YACzC,gBAAgB,IAAI,KAAK,CAAC;YAC1B,iBAAiB,IAAI,MAAM,CAAC;YAC5B,YAAY,IAAI,IAAI,CAAC;YAErB,aAAa;YACb,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YAClH,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC;YACpB,SAAS,CAAC,YAAY,IAAI,KAAK,CAAC;YAChC,SAAS,CAAC,aAAa,IAAI,MAAM,CAAC;YAClC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC;YAC3B,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAE5C,WAAW;YACX,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,IAAI,SAAS,CAAC;YAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;YACxG,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC;YACrB,UAAU,CAAC,YAAY,IAAI,KAAK,CAAC;YACjC,UAAU,CAAC,aAAa,IAAI,MAAM,CAAC;YACnC,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC;QAED,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,MAAM;YACvB,kBAAkB,EAAE,gBAAgB;YACpC,mBAAmB,EAAE,iBAAiB;YACtC,cAAc,EAAE,YAAY;YAC5B,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;YACzC,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;SACtC,CAAC;IACJ,CAAC;IAED,wBAAwB;IAEhB,UAAU,CAAC,KAAa;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAkC,CAAC;QAC/G,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAEO,gBAAgB,CAAC,GAAa;QACpC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;KAQf,CAAC,CAAC,GAAG,CACJ,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,QAAQ,IAAI,IAAI,EACpB,GAAG,CAAC,UAAU,IAAI,IAAI,EACtB,GAAG,CAAC,YAAY,IAAI,IAAI,EACxB,GAAG,CAAC,GAAG,IAAI,IAAI,EACf,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,aAAa,IAAI,IAAI,EACzB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,WAAW,IAAI,IAAI,EACvB,GAAG,CAAC,KAAK,IAAI,IAAI,EACjB,GAAG,CAAC,YAAY,IAAI,IAAI,EACxB,GAAG,CAAC,aAAa,IAAI,IAAI,EACzB,GAAG,CAAC,kBAAkB,IAAI,IAAI,EAC9B,GAAG,CAAC,MAAM,CACX,CAAC;IACJ,CAAC;IAEO,YAAY;QAClB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACzF,IAAI,CAAC,EAAE,CAAC,OAAO,CACb,sHAAsH,CACvH,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAEO,sBAAsB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAA4C,CAAC;QAC1H,MAAM,SAAS,GAAG,GAAG,EAAE,MAAM,CAAC;QAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5F,CAAC;CACF;AA0BD,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;QACnC,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;QACvC,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC3C,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,SAAS;QACzB,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,MAAM,EAAE,GAAG,CAAC,MAAmB;QAC/B,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;QAC7C,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,SAAS;QAC3C,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;QAC7C,kBAAkB,EAAE,GAAG,CAAC,kBAAkB,IAAI,SAAS;KACxD,CAAC;AACJ,CAAC;AAED,yBAAyB;AAEzB,SAAS,gBAAgB,CAAC,EAAgB;IACxC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACtC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BP,CAAC,CAAC;IAEH,0DAA0D;IAC1D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,GAAG,EAA6B,CAAC;IACtF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAClC,EAAE,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,EAAE,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACxC,EAAE,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,sDAAsD;AAEtD,SAAS,mBAAmB,CAAC,MAAiB;IAC5C,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,OAAO,CAAC;AACtG,CAAC;AAED,SAAS,gBAAgB,CAA2B,KAAwB,EAAE,GAAM,EAAE,QAAqB;IACzG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAgB,CAAC;AACnG,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { BackendName, SessionScope } from '../config/schema.js';
|
|
2
|
+
export interface SessionHistoryEntry {
|
|
3
|
+
thread_id: string;
|
|
4
|
+
created_at: string;
|
|
5
|
+
updated_at: string;
|
|
6
|
+
last_prompt?: string;
|
|
7
|
+
last_response_excerpt?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface ProjectSessionState {
|
|
10
|
+
thread_id?: string;
|
|
11
|
+
active_thread_id?: string;
|
|
12
|
+
active_backend?: BackendName;
|
|
13
|
+
last_prompt?: string;
|
|
14
|
+
last_response_excerpt?: string;
|
|
15
|
+
updated_at: string;
|
|
16
|
+
sessions?: Record<string, SessionHistoryEntry>;
|
|
17
|
+
}
|
|
18
|
+
export interface ConversationState {
|
|
19
|
+
selected_project_alias?: string;
|
|
20
|
+
updated_at: string;
|
|
21
|
+
scope: SessionScope;
|
|
22
|
+
tenant_key?: string;
|
|
23
|
+
chat_id: string;
|
|
24
|
+
actor_id?: string;
|
|
25
|
+
projects: Record<string, ProjectSessionState>;
|
|
26
|
+
}
|
|
27
|
+
export interface SessionStateFile {
|
|
28
|
+
version: 1;
|
|
29
|
+
conversations: Record<string, ConversationState>;
|
|
30
|
+
}
|
|
31
|
+
export declare class SessionStore {
|
|
32
|
+
private readonly stateFilePath;
|
|
33
|
+
private readonly serial;
|
|
34
|
+
constructor(stateDir: string);
|
|
35
|
+
listConversations(): Promise<Array<[string, ConversationState]>>;
|
|
36
|
+
getConversation(conversationKey: string): Promise<ConversationState | null>;
|
|
37
|
+
ensureConversation(conversationKey: string, seed: Pick<ConversationState, 'chat_id' | 'scope' | 'tenant_key' | 'actor_id'>): Promise<ConversationState>;
|
|
38
|
+
selectProject(conversationKey: string, projectAlias: string): Promise<void>;
|
|
39
|
+
upsertProjectSession(conversationKey: string, projectAlias: string, patch: Partial<ProjectSessionState>): Promise<ProjectSessionState>;
|
|
40
|
+
listProjectSessions(conversationKey: string, projectAlias: string): Promise<SessionHistoryEntry[]>;
|
|
41
|
+
setActiveProjectSession(conversationKey: string, projectAlias: string, threadId: string): Promise<ProjectSessionState>;
|
|
42
|
+
clearActiveProjectSession(conversationKey: string, projectAlias: string): Promise<ProjectSessionState | null>;
|
|
43
|
+
setProjectBackend(conversationKey: string, projectAlias: string, backendName: BackendName): Promise<void>;
|
|
44
|
+
getProjectBackend(conversationKey: string, projectAlias: string): Promise<BackendName | undefined>;
|
|
45
|
+
dropProjectSession(conversationKey: string, projectAlias: string, threadId: string): Promise<ProjectSessionState | null>;
|
|
46
|
+
resetProjectSession(conversationKey: string, projectAlias: string): Promise<void>;
|
|
47
|
+
clearConversation(conversationKey: string): Promise<void>;
|
|
48
|
+
private readState;
|
|
49
|
+
private writeState;
|
|
50
|
+
}
|
|
51
|
+
export declare function buildConversationKey(input: {
|
|
52
|
+
tenantKey?: string;
|
|
53
|
+
chatId: string;
|
|
54
|
+
actorId?: string;
|
|
55
|
+
scope: SessionScope;
|
|
56
|
+
}): string;
|