@axhub/genie 0.2.10 → 0.2.12
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/dist/api-docs.html +2 -2
- package/dist/assets/App-Clb2COtW.js +274 -0
- package/dist/assets/ImagePlaygroundPage-DqhMSbM8.js +106 -0
- package/dist/assets/ImagePlaygroundPage-MEn3NN80.css +1 -0
- package/dist/assets/ReviewApp-CDcLYe-u.js +1 -0
- package/dist/assets/{_basePickBy-DVVb07UV.js → _basePickBy-jUZsM51q.js} +1 -1
- package/dist/assets/{_baseUniq-BtbziL5G.js → _baseUniq-BXglE6_v.js} +1 -1
- package/dist/assets/{arc-BsCC8yBD.js → arc-D-oFCFBv.js} +1 -1
- package/dist/assets/{architectureDiagram-2XIMDMQ5-woFp6eNI.js → architectureDiagram-2XIMDMQ5-DC8bAnQt.js} +1 -1
- package/dist/assets/{blockDiagram-WCTKOSBZ-ya8VAc2k.js → blockDiagram-WCTKOSBZ-C4semIRc.js} +1 -1
- package/dist/assets/{c4Diagram-IC4MRINW-CY1dZmIZ.js → c4Diagram-IC4MRINW-FHj1QO3y.js} +1 -1
- package/dist/assets/channel-BF4woPXX.js +1 -0
- package/dist/assets/{chunk-4BX2VUAB-CR1lAd74.js → chunk-4BX2VUAB-D-LjsQ_s.js} +1 -1
- package/dist/assets/{chunk-55IACEB6-CP98WcFC.js → chunk-55IACEB6-DI3j_d7A.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-D9c7ijAB.js → chunk-FMBD7UC4-BEVnaLFN.js} +1 -1
- package/dist/assets/{chunk-JSJVCQXG-DQAGYOn-.js → chunk-JSJVCQXG-CSxpcErk.js} +1 -1
- package/dist/assets/{chunk-KX2RTZJC-BbTXiDq7.js → chunk-KX2RTZJC-BbuhDN4h.js} +1 -1
- package/dist/assets/{chunk-NQ4KR5QH-BI6AX0dr.js → chunk-NQ4KR5QH-C3x61XQa.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-DB3V2Ifo.js → chunk-QZHKN3VN-DxWOFtPh.js} +1 -1
- package/dist/assets/{chunk-WL4C6EOR-DhzTthv6.js → chunk-WL4C6EOR-Bt2OauD2.js} +1 -1
- package/dist/assets/classDiagram-VBA2DB6C-D2kHlnQ7.js +1 -0
- package/dist/assets/classDiagram-v2-RAHNMMFH-D2kHlnQ7.js +1 -0
- package/dist/assets/clone-CqBvwCJW.js +1 -0
- package/dist/assets/{cose-bilkent-S5V4N54A-BQ09ZE2j.js → cose-bilkent-S5V4N54A-Dexadrue.js} +1 -1
- package/dist/assets/{dagre-KLK3FWXG-Dc2ueD_R.js → dagre-KLK3FWXG-F9U4X2xC.js} +1 -1
- package/dist/assets/{diagram-E7M64L7V-DP-LsQoL.js → diagram-E7M64L7V-B3V17aH3.js} +1 -1
- package/dist/assets/{diagram-IFDJBPK2-Cg6r42cB.js → diagram-IFDJBPK2-CdHAmLL1.js} +1 -1
- package/dist/assets/{diagram-P4PSJMXO-aHsfoUZE.js → diagram-P4PSJMXO-CrTNfk8K.js} +1 -1
- package/dist/assets/{erDiagram-INFDFZHY-qBXJ4aAz.js → erDiagram-INFDFZHY-vDh9SWK9.js} +1 -1
- package/dist/assets/{flowDiagram-PKNHOUZH-D_13emJM.js → flowDiagram-PKNHOUZH-DpltMg7L.js} +1 -1
- package/dist/assets/{ganttDiagram-A5KZAMGK-BvIcOLwz.js → ganttDiagram-A5KZAMGK-COTk2xur.js} +1 -1
- package/dist/assets/{gitGraphDiagram-K3NZZRJ6-ad0vvNcU.js → gitGraphDiagram-K3NZZRJ6-BNV7bvvj.js} +1 -1
- package/dist/assets/{graph-CeJCMjan.js → graph-Dkeg9oys.js} +1 -1
- package/dist/assets/{highlighted-body-TPN3WLV5-B_novwSz.js → highlighted-body-TPN3WLV5-DaiQEBwR.js} +1 -1
- package/dist/assets/index-DgGmiqsP.css +1 -0
- package/dist/assets/index-DvA901Vs.js +2 -0
- package/dist/assets/{infoDiagram-LFFYTUFH-lOxAqb3m.js → infoDiagram-LFFYTUFH-CZioW3Gt.js} +1 -1
- package/dist/assets/{ishikawaDiagram-PHBUUO56-DIr-51gj.js → ishikawaDiagram-PHBUUO56-BbqR3i1B.js} +1 -1
- package/dist/assets/{journeyDiagram-4ABVD52K-CYcIW0ZU.js → journeyDiagram-4ABVD52K-wfb-WHzl.js} +1 -1
- package/dist/assets/{kanban-definition-K7BYSVSG-C1ZK616a.js → kanban-definition-K7BYSVSG-B3c4y3VN.js} +1 -1
- package/dist/assets/{layout-CI2RM-v6.js → layout-Xr9Z2VGF.js} +1 -1
- package/dist/assets/{linear-DE7bISck.js → linear-JBmzAJtl.js} +1 -1
- package/dist/assets/{mermaid-O7DHMXV3-XxAJo8EK.js → mermaid-O7DHMXV3-fDuyNLKe.js} +238 -220
- package/dist/assets/{mindmap-definition-YRQLILUH-Dz6EFjmn.js → mindmap-definition-YRQLILUH-B5NTN_jD.js} +1 -1
- package/dist/assets/{pieDiagram-SKSYHLDU-DPpEzUed.js → pieDiagram-SKSYHLDU-CuO98GVu.js} +1 -1
- package/dist/assets/{quadrantDiagram-337W2JSQ-xdoXNet7.js → quadrantDiagram-337W2JSQ-LL3f4vLf.js} +1 -1
- package/dist/assets/{requirementDiagram-Z7DCOOCP-DUq8H3CL.js → requirementDiagram-Z7DCOOCP-Di-2O6LH.js} +1 -1
- package/dist/assets/{sankeyDiagram-WA2Y5GQK-CmqEUxRu.js → sankeyDiagram-WA2Y5GQK-9lHqrXqR.js} +1 -1
- package/dist/assets/{sequenceDiagram-2WXFIKYE-DhtXRNiH.js → sequenceDiagram-2WXFIKYE-BQu-SoGr.js} +1 -1
- package/dist/assets/{stateDiagram-RAJIS63D-Dj0HOlbN.js → stateDiagram-RAJIS63D-BUxvd2BC.js} +1 -1
- package/dist/assets/stateDiagram-v2-FVOUBMTO-CDVexTiR.js +1 -0
- package/dist/assets/{timeline-definition-YZTLITO2-DUuJzZB5.js → timeline-definition-YZTLITO2-oP47UEU6.js} +1 -1
- package/dist/assets/{treemap-KZPCXAKY-DpYBQ0qr.js → treemap-KZPCXAKY-BRjDo2aE.js} +1 -1
- package/dist/assets/{vendor-codemirror-CMHSJ_9p.js → vendor-codemirror-BiCeS-y4.js} +1 -1
- package/dist/assets/{vendor-react-xmA_f8ig.js → vendor-react-DVlYPmi3.js} +1 -1
- package/dist/assets/{vennDiagram-LZ73GAT5-DpePUyOd.js → vennDiagram-LZ73GAT5-DrRqcDqo.js} +1 -1
- package/dist/assets/{xychartDiagram-JWTSCODW-Cfp1I4_U.js → xychartDiagram-JWTSCODW-DUXrymAi.js} +1 -1
- package/dist/index.html +4 -4
- package/package.json +25 -6
- package/scripts/refresh-acp-default-capabilities.mjs +160 -0
- package/server/acp-runtime/client.js +1137 -181
- package/server/acp-runtime/command-overrides.js +48 -0
- package/server/acp-runtime/index.js +576 -16
- package/server/acp-runtime/registry.js +6 -4
- package/server/acp-runtime/session-store.js +235 -92
- package/server/database/db.js +12 -3
- package/server/external-agent/ws.js +212 -11
- package/server/index.js +156 -53
- package/server/projects-watcher-config.js +4 -0
- package/server/projects.js +485 -125
- package/server/routes/cc-connect.js +5 -4
- package/server/routes/codex.js +24 -0
- package/server/routes/commands.js +166 -10
- package/server/routes/runs.js +641 -0
- package/server/routes/session-core.js +357 -109
- package/server/session-core/eventStore.js +0 -121
- package/server/session-core/providerAdapters.js +644 -163
- package/server/session-core/providerDiscovery.js +66 -38
- package/server/session-core/runRegistry.js +244 -0
- package/server/session-core/runtimeState.js +75 -3
- package/server/session-core/runtimeWriter.js +132 -10
- package/server/utils/codexImagePlayground.js +479 -0
- package/server/utils/localTerminal.js +56 -0
- package/server/utils/shellCommand.js +70 -0
- package/shared/acpCapabilities.js +393 -0
- package/shared/acpDefaultCapabilities.generated.json +141 -0
- package/shared/conversationEvents.js +425 -121
- package/dist/assets/App-CYCCsgwf.js +0 -264
- package/dist/assets/ReviewApp-0srHIXwb.js +0 -1
- package/dist/assets/channel-BMhScXFe.js +0 -1
- package/dist/assets/classDiagram-VBA2DB6C-CMIxlWcT.js +0 -1
- package/dist/assets/classDiagram-v2-RAHNMMFH-CMIxlWcT.js +0 -1
- package/dist/assets/clone-BPqOt4r3.js +0 -1
- package/dist/assets/index-C514cLyb.js +0 -2
- package/dist/assets/index-h1DBl_g3.css +0 -1
- package/dist/assets/stateDiagram-v2-FVOUBMTO-C9utf5gv.js +0 -1
|
@@ -1,61 +1,7 @@
|
|
|
1
|
-
import fsSync from 'fs';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
import os from 'os';
|
|
4
|
-
import path from 'path';
|
|
5
|
-
import readline from 'readline';
|
|
6
|
-
|
|
7
1
|
import {
|
|
8
|
-
CONVERSATION_EVENT_KINDS,
|
|
9
2
|
isConversationEvent
|
|
10
3
|
} from '../../shared/conversationEvents.js';
|
|
11
4
|
|
|
12
|
-
function getMirroredEventStoreRoot() {
|
|
13
|
-
if (process.env.AXHUB_GENIE_SESSION_EVENTS_ROOT) {
|
|
14
|
-
return path.resolve(process.env.AXHUB_GENIE_SESSION_EVENTS_ROOT);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
return path.join(os.homedir(), '.axhub-genie', 'session-events');
|
|
18
|
-
}
|
|
19
|
-
const PERSISTED_EVENT_KINDS = new Set([
|
|
20
|
-
CONVERSATION_EVENT_KINDS.USER_MESSAGE,
|
|
21
|
-
CONVERSATION_EVENT_KINDS.ASSISTANT_TEXT_START,
|
|
22
|
-
CONVERSATION_EVENT_KINDS.ASSISTANT_TEXT_DELTA,
|
|
23
|
-
CONVERSATION_EVENT_KINDS.ASSISTANT_TEXT_END,
|
|
24
|
-
CONVERSATION_EVENT_KINDS.SESSION_STATE_CHANGED,
|
|
25
|
-
CONVERSATION_EVENT_KINDS.ERROR,
|
|
26
|
-
CONVERSATION_EVENT_KINDS.APPROVAL_REQUEST,
|
|
27
|
-
CONVERSATION_EVENT_KINDS.APPROVAL_RESOLVED,
|
|
28
|
-
CONVERSATION_EVENT_KINDS.SYSTEM_NOTICE,
|
|
29
|
-
CONVERSATION_EVENT_KINDS.MODE_UPDATE,
|
|
30
|
-
CONVERSATION_EVENT_KINDS.AVAILABLE_COMMANDS_UPDATE,
|
|
31
|
-
CONVERSATION_EVENT_KINDS.CONFIG_OPTION_UPDATE,
|
|
32
|
-
CONVERSATION_EVENT_KINDS.SESSION_INFO_UPDATE,
|
|
33
|
-
CONVERSATION_EVENT_KINDS.USAGE_UPDATE,
|
|
34
|
-
CONVERSATION_EVENT_KINDS.PLAN_UPDATE,
|
|
35
|
-
CONVERSATION_EVENT_KINDS.ARTIFACT_CREATED
|
|
36
|
-
]);
|
|
37
|
-
|
|
38
|
-
function getSessionEventFilePath(provider, sessionId) {
|
|
39
|
-
return path.join(getMirroredEventStoreRoot(), String(provider || 'claude'), `${sessionId}.jsonl`);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function normalizePersistedEvents(events = []) {
|
|
43
|
-
return events.filter((event) => (
|
|
44
|
-
isConversationEvent(event) &&
|
|
45
|
-
event.sessionId &&
|
|
46
|
-
PERSISTED_EVENT_KINDS.has(event.kind)
|
|
47
|
-
));
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function extractSerializedEventKind(line) {
|
|
51
|
-
if (typeof line !== 'string' || !line) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const match = line.match(/"kind"\s*:\s*"([^"]+)"/);
|
|
56
|
-
return match?.[1] || null;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
5
|
function sortObjectKeys(value) {
|
|
60
6
|
if (Array.isArray(value)) {
|
|
61
7
|
return value.map(sortObjectKeys);
|
|
@@ -85,73 +31,6 @@ function createEventSignature(event) {
|
|
|
85
31
|
}));
|
|
86
32
|
}
|
|
87
33
|
|
|
88
|
-
export async function appendMirroredConversationEvents(events = []) {
|
|
89
|
-
const normalizedEvents = normalizePersistedEvents(events);
|
|
90
|
-
if (normalizedEvents.length === 0) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const eventsByFile = new Map();
|
|
95
|
-
normalizedEvents.forEach((event) => {
|
|
96
|
-
const filePath = getSessionEventFilePath(event.provider, event.sessionId);
|
|
97
|
-
if (!eventsByFile.has(filePath)) {
|
|
98
|
-
eventsByFile.set(filePath, []);
|
|
99
|
-
}
|
|
100
|
-
eventsByFile.get(filePath).push(event);
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
await Promise.all(Array.from(eventsByFile.entries()).map(async ([filePath, fileEvents]) => {
|
|
104
|
-
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
105
|
-
const serialized = fileEvents.map((event) => JSON.stringify(event)).join('\n');
|
|
106
|
-
await fs.appendFile(filePath, `${serialized}\n`, 'utf8');
|
|
107
|
-
}));
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export async function readMirroredConversationEvents(provider, sessionId) {
|
|
111
|
-
if (!provider || !sessionId) {
|
|
112
|
-
return [];
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const filePath = getSessionEventFilePath(provider, sessionId);
|
|
116
|
-
|
|
117
|
-
try {
|
|
118
|
-
const fileStream = fsSync.createReadStream(filePath, { encoding: 'utf8' });
|
|
119
|
-
const rl = readline.createInterface({
|
|
120
|
-
input: fileStream,
|
|
121
|
-
crlfDelay: Infinity
|
|
122
|
-
});
|
|
123
|
-
const events = [];
|
|
124
|
-
|
|
125
|
-
for await (const rawLine of rl) {
|
|
126
|
-
const line = rawLine.trim();
|
|
127
|
-
if (!line) {
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const kind = extractSerializedEventKind(line);
|
|
132
|
-
if (!kind || !PERSISTED_EVENT_KINDS.has(kind)) {
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
const event = JSON.parse(line);
|
|
138
|
-
if (isConversationEvent(event) && PERSISTED_EVENT_KINDS.has(event.kind)) {
|
|
139
|
-
events.push(event);
|
|
140
|
-
}
|
|
141
|
-
} catch {
|
|
142
|
-
// Skip malformed lines and oversized legacy transcript events.
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return events;
|
|
147
|
-
} catch (error) {
|
|
148
|
-
if (error?.code === 'ENOENT') {
|
|
149
|
-
return [];
|
|
150
|
-
}
|
|
151
|
-
throw error;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
34
|
export function mergeConversationEventHistories(primaryEvents = [], mirroredEvents = []) {
|
|
156
35
|
const merged = [];
|
|
157
36
|
const seenSignatures = new Set();
|