@dorokuma/herdsman 0.13.6 → 0.14.1
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/README.md +2 -2
- package/dist/src/agent-history/discovery.d.ts +47 -11
- package/dist/src/agent-history/discovery.d.ts.map +1 -1
- package/dist/src/agent-history/discovery.js +242 -468
- package/dist/src/agent-history/discovery.js.map +1 -1
- package/dist/src/agent-history/service.d.ts +4 -7
- package/dist/src/agent-history/service.d.ts.map +1 -1
- package/dist/src/agent-history/service.js +46 -30
- package/dist/src/agent-history/service.js.map +1 -1
- package/dist/src/daemon/agent-event-reconciler.js +6 -10
- package/dist/src/daemon/agent-event-reconciler.js.map +1 -1
- package/dist/src/daemon/herdr-session-watch-manager.js +2 -2
- package/dist/src/daemon/herdr-session-watch-manager.js.map +1 -1
- package/dist/src/daemon/observability-server.js +6 -6
- package/dist/src/daemon/observability-server.js.map +1 -1
- package/dist/src/db/agent-events.d.ts +2 -0
- package/dist/src/db/agent-events.d.ts.map +1 -1
- package/dist/src/db/agent-events.js +20 -0
- package/dist/src/db/agent-events.js.map +1 -1
- package/dist/src/db/agents.d.ts +0 -2
- package/dist/src/db/agents.d.ts.map +1 -1
- package/dist/src/db/agents.js +14 -57
- package/dist/src/db/agents.js.map +1 -1
- package/dist/src/herdr/pane-identity-resolver.d.ts +11 -0
- package/dist/src/herdr/pane-identity-resolver.d.ts.map +1 -1
- package/dist/src/herdr/pane-identity-resolver.js +27 -15
- package/dist/src/herdr/pane-identity-resolver.js.map +1 -1
- package/dist/src/herdr/session-list.d.ts.map +1 -1
- package/dist/src/herdr/session-list.js +4 -2
- package/dist/src/herdr/session-list.js.map +1 -1
- package/dist/src/observability/agent-context-service.d.ts +4 -10
- package/dist/src/observability/agent-context-service.d.ts.map +1 -1
- package/dist/src/observability/agent-context-service.js +37 -58
- package/dist/src/observability/agent-context-service.js.map +1 -1
- package/dist/src/observability/agent-index-service.d.ts.map +1 -1
- package/dist/src/observability/agent-index-service.js +19 -22
- package/dist/src/observability/agent-index-service.js.map +1 -1
- package/dist/src/observability/contracts.d.ts +1 -2
- package/dist/src/observability/contracts.d.ts.map +1 -1
- package/dist/src/observability/contracts.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/agent-history/claude-reader.d.ts +0 -10
- package/dist/src/agent-history/claude-reader.d.ts.map +0 -1
- package/dist/src/agent-history/claude-reader.js +0 -90
- package/dist/src/agent-history/claude-reader.js.map +0 -1
- package/dist/src/agent-history/codex-reader.d.ts +0 -10
- package/dist/src/agent-history/codex-reader.d.ts.map +0 -1
- package/dist/src/agent-history/codex-reader.js +0 -119
- package/dist/src/agent-history/codex-reader.js.map +0 -1
- package/dist/src/agent-history/gemini-reader.d.ts +0 -10
- package/dist/src/agent-history/gemini-reader.d.ts.map +0 -1
- package/dist/src/agent-history/gemini-reader.js +0 -96
- package/dist/src/agent-history/gemini-reader.js.map +0 -1
- package/dist/src/agent-history/grok-reader.d.ts +0 -11
- package/dist/src/agent-history/grok-reader.d.ts.map +0 -1
- package/dist/src/agent-history/grok-reader.js +0 -54
- package/dist/src/agent-history/grok-reader.js.map +0 -1
- package/dist/src/agent-history/opencode-reader.d.ts +0 -10
- package/dist/src/agent-history/opencode-reader.d.ts.map +0 -1
- package/dist/src/agent-history/opencode-reader.js +0 -90
- package/dist/src/agent-history/opencode-reader.js.map +0 -1
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { compactFromMessages, limitMessages, readJsonl, } from "./readers.js";
|
|
2
|
-
import { messageRef, textFromContent, timestampFrom } from "./text.js";
|
|
3
|
-
import { compactToolResult } from "./tool-compaction.js";
|
|
4
|
-
export class CodexHistoryReader {
|
|
5
|
-
canRead(ref) {
|
|
6
|
-
return ref.source === "codex-jsonl" && Boolean(ref.path ?? ref.value);
|
|
7
|
-
}
|
|
8
|
-
async read(ref, options = {}) {
|
|
9
|
-
const path = ref.path ?? ref.value;
|
|
10
|
-
const messages = [];
|
|
11
|
-
const toolNamesByCallId = new Map();
|
|
12
|
-
for (const entry of await readJsonl(path)) {
|
|
13
|
-
const type = stringValue(entry.value.type);
|
|
14
|
-
const payload = record(entry.value.payload);
|
|
15
|
-
const payloadType = stringValue(payload.type);
|
|
16
|
-
const id = stringValue(payload.id) ?? stringValue(payload.call_id) ?? stringValue(entry.value.id);
|
|
17
|
-
const timestamp = timestampFrom(payload.timestamp) ??
|
|
18
|
-
timestampFrom(payload.started_at) ??
|
|
19
|
-
timestampFrom(entry.value.timestamp);
|
|
20
|
-
const refValue = messageRef(path, id ?? undefined, entry.line);
|
|
21
|
-
if (type === "event_msg") {
|
|
22
|
-
if (payloadType === "user_message") {
|
|
23
|
-
const text = stringValue(payload.message);
|
|
24
|
-
if (text && !isSystemCodexMessage(text)) {
|
|
25
|
-
messages.push({ ref: refValue, role: "user", text, timestamp });
|
|
26
|
-
}
|
|
27
|
-
continue;
|
|
28
|
-
}
|
|
29
|
-
if (payloadType === "agent_message") {
|
|
30
|
-
const text = stringValue(payload.message);
|
|
31
|
-
if (text)
|
|
32
|
-
messages.push({ ref: refValue, role: "assistant", text, timestamp });
|
|
33
|
-
continue;
|
|
34
|
-
}
|
|
35
|
-
if (payloadType === "task_complete") {
|
|
36
|
-
const text = stringValue(payload.last_agent_message);
|
|
37
|
-
if (text)
|
|
38
|
-
messages.push({ ref: refValue, role: "assistant", text, timestamp });
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
if (type !== "response_item")
|
|
43
|
-
continue;
|
|
44
|
-
if (payloadType === "function_call" || payloadType === "custom_tool_call") {
|
|
45
|
-
const callId = stringValue(payload.call_id);
|
|
46
|
-
const name = stringValue(payload.name);
|
|
47
|
-
if (callId && name)
|
|
48
|
-
toolNamesByCallId.set(callId, name);
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
if (payloadType === "function_call_output" || payloadType === "custom_tool_call_output") {
|
|
52
|
-
const callId = stringValue(payload.call_id);
|
|
53
|
-
const toolName = (callId ? toolNamesByCallId.get(callId) : null) ?? "unknown";
|
|
54
|
-
const text = textFromCodexOutput(payload.output);
|
|
55
|
-
const compact = compactToolResult({ isError: false, ref: refValue, text, toolName });
|
|
56
|
-
messages.push({
|
|
57
|
-
compact,
|
|
58
|
-
ref: refValue,
|
|
59
|
-
role: "tool_result",
|
|
60
|
-
text: compact.text,
|
|
61
|
-
timestamp,
|
|
62
|
-
toolName,
|
|
63
|
-
});
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
if (payloadType === "message") {
|
|
67
|
-
const role = stringValue(payload.role);
|
|
68
|
-
if (role === "developer")
|
|
69
|
-
continue;
|
|
70
|
-
if (role === "user") {
|
|
71
|
-
const text = textFromCodexContent(payload.content, "input_text");
|
|
72
|
-
if (text && !isSystemCodexMessage(text)) {
|
|
73
|
-
messages.push({ ref: refValue, role: "user", text, timestamp });
|
|
74
|
-
}
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (role === "assistant") {
|
|
78
|
-
const text = textFromCodexContent(payload.content, "output_text") ??
|
|
79
|
-
textFromContent(payload.content);
|
|
80
|
-
if (text)
|
|
81
|
-
messages.push({ ref: refValue, role: "assistant", text, timestamp });
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return limitMessages(messages, options.limit);
|
|
86
|
-
}
|
|
87
|
-
async readCompact(ref) {
|
|
88
|
-
return compactFromMessages(ref, await this.read(ref));
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
function textFromCodexContent(content, blockType) {
|
|
92
|
-
if (!Array.isArray(content))
|
|
93
|
-
return typeof content === "string" ? content : null;
|
|
94
|
-
const parts = content
|
|
95
|
-
.map((block) => {
|
|
96
|
-
const item = record(block);
|
|
97
|
-
if (item.type !== blockType)
|
|
98
|
-
return "";
|
|
99
|
-
return stringValue(item.text) ?? "";
|
|
100
|
-
})
|
|
101
|
-
.filter((part) => part.trim().length > 0);
|
|
102
|
-
return parts.length > 0 ? parts.join("\n") : null;
|
|
103
|
-
}
|
|
104
|
-
function textFromCodexOutput(value) {
|
|
105
|
-
if (typeof value === "string")
|
|
106
|
-
return value;
|
|
107
|
-
return JSON.stringify(value ?? "");
|
|
108
|
-
}
|
|
109
|
-
function isSystemCodexMessage(text) {
|
|
110
|
-
const trimmed = text.trim();
|
|
111
|
-
return trimmed.startsWith("<environment_context>") || trimmed.startsWith("<user_instructions>");
|
|
112
|
-
}
|
|
113
|
-
function record(value) {
|
|
114
|
-
return typeof value === "object" && value !== null ? value : {};
|
|
115
|
-
}
|
|
116
|
-
function stringValue(value) {
|
|
117
|
-
return typeof value === "string" && value.length > 0 ? value : null;
|
|
118
|
-
}
|
|
119
|
-
//# sourceMappingURL=codex-reader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codex-reader.js","sourceRoot":"","sources":["../../../src/agent-history/codex-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { AgentHistoryMessage, AgentHistoryRef } from "../observability/contracts.js";
|
|
2
|
-
import { type AgentHistoryReader } from "./readers.js";
|
|
3
|
-
export declare class GeminiHistoryReader implements AgentHistoryReader {
|
|
4
|
-
canRead(ref: AgentHistoryRef): boolean;
|
|
5
|
-
read(ref: AgentHistoryRef, options?: {
|
|
6
|
-
limit?: number;
|
|
7
|
-
}): Promise<AgentHistoryMessage[]>;
|
|
8
|
-
readCompact(ref: AgentHistoryRef): Promise<import("../observability/contracts.js").CompactAgentHistory>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=gemini-reader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-reader.d.ts","sourceRoot":"","sources":["../../../src/agent-history/gemini-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,KAAK,kBAAkB,EAAsC,MAAM,cAAc,CAAC;AAI3F,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,OAAO,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO;IAIhC,IAAI,CACR,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/B,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAuD3B,WAAW,CAAC,GAAG,EAAE,eAAe;CAGvC"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { readFile } from "node:fs/promises";
|
|
2
|
-
import { compactFromMessages, limitMessages } from "./readers.js";
|
|
3
|
-
import { messageRef, textFromContent, timestampFrom } from "./text.js";
|
|
4
|
-
import { compactToolResult } from "./tool-compaction.js";
|
|
5
|
-
export class GeminiHistoryReader {
|
|
6
|
-
canRead(ref) {
|
|
7
|
-
return ref.source === "gemini-json" && Boolean(ref.path ?? ref.value);
|
|
8
|
-
}
|
|
9
|
-
async read(ref, options = {}) {
|
|
10
|
-
const path = ref.path ?? ref.value;
|
|
11
|
-
let parsed;
|
|
12
|
-
try {
|
|
13
|
-
parsed = JSON.parse(await readFile(path, "utf8"));
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
return [];
|
|
17
|
-
}
|
|
18
|
-
const records = geminiMessages(parsed);
|
|
19
|
-
const messages = [];
|
|
20
|
-
for (let index = 0; index < records.length; index += 1) {
|
|
21
|
-
const record = records[index];
|
|
22
|
-
if (!record)
|
|
23
|
-
continue;
|
|
24
|
-
const type = stringValue(record.type);
|
|
25
|
-
const id = stringValue(record.id);
|
|
26
|
-
const timestamp = timestampFrom(record.timestamp) ??
|
|
27
|
-
timestampFrom(record.time) ??
|
|
28
|
-
timestampFrom(record.createdAt);
|
|
29
|
-
const refValue = messageRef(path, id ?? undefined, index + 1);
|
|
30
|
-
if (type === "user") {
|
|
31
|
-
const text = geminiText(record.content);
|
|
32
|
-
if (text)
|
|
33
|
-
messages.push({ ref: refValue, role: "user", text, timestamp });
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
if (type === "gemini" || type === "assistant" || type === "model") {
|
|
37
|
-
const text = geminiText(record.content);
|
|
38
|
-
if (text)
|
|
39
|
-
messages.push({ ref: refValue, role: "assistant", text, timestamp });
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
if (type === "tool" || type === "tool_result" || type === "tool_response") {
|
|
43
|
-
const toolName = stringValue(record.tool) ?? stringValue(record.name) ?? "unknown";
|
|
44
|
-
const output = record.output ?? record.response ?? record.content ?? record.result ?? record;
|
|
45
|
-
const text = typeof output === "string" ? output : JSON.stringify(output);
|
|
46
|
-
const isError = record.isError === true || record.error !== undefined;
|
|
47
|
-
const compact = compactToolResult({ isError, ref: refValue, text, toolName });
|
|
48
|
-
messages.push({
|
|
49
|
-
compact,
|
|
50
|
-
ref: refValue,
|
|
51
|
-
role: "tool_result",
|
|
52
|
-
text: compact.text,
|
|
53
|
-
timestamp,
|
|
54
|
-
toolName,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return limitMessages(messages, options.limit);
|
|
59
|
-
}
|
|
60
|
-
async readCompact(ref) {
|
|
61
|
-
return compactFromMessages(ref, await this.read(ref));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function geminiMessages(value) {
|
|
65
|
-
if (Array.isArray(value))
|
|
66
|
-
return value.map(record).filter((item) => Object.keys(item).length > 0);
|
|
67
|
-
const root = record(value);
|
|
68
|
-
const messages = root.messages;
|
|
69
|
-
return Array.isArray(messages)
|
|
70
|
-
? messages.map(record).filter((item) => Object.keys(item).length > 0)
|
|
71
|
-
: [];
|
|
72
|
-
}
|
|
73
|
-
function geminiText(value) {
|
|
74
|
-
if (typeof value === "string")
|
|
75
|
-
return value;
|
|
76
|
-
const text = textFromContent(value);
|
|
77
|
-
if (text)
|
|
78
|
-
return text;
|
|
79
|
-
if (Array.isArray(value)) {
|
|
80
|
-
const parts = value
|
|
81
|
-
.map((item) => {
|
|
82
|
-
const block = record(item);
|
|
83
|
-
return stringValue(block.text) ?? stringValue(block.content) ?? "";
|
|
84
|
-
})
|
|
85
|
-
.filter((part) => part.trim().length > 0);
|
|
86
|
-
return parts.length > 0 ? parts.join("\n") : null;
|
|
87
|
-
}
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
function record(value) {
|
|
91
|
-
return typeof value === "object" && value !== null ? value : {};
|
|
92
|
-
}
|
|
93
|
-
function stringValue(value) {
|
|
94
|
-
return typeof value === "string" && value.length > 0 ? value : null;
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=gemini-reader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gemini-reader.js","sourceRoot":"","sources":["../../../src/agent-history/gemini-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { AgentHistoryMessage, AgentHistoryRef } from "../observability/contracts.js";
|
|
2
|
-
import { type AgentHistoryReader } from "./readers.js";
|
|
3
|
-
/** Grok's pane-visible transcript is chat_history.jsonl; updates.jsonl is not selected here. */
|
|
4
|
-
export declare class GrokHistoryReader implements AgentHistoryReader {
|
|
5
|
-
canRead(ref: AgentHistoryRef): boolean;
|
|
6
|
-
read(ref: AgentHistoryRef, options?: {
|
|
7
|
-
limit?: number;
|
|
8
|
-
}): Promise<AgentHistoryMessage[]>;
|
|
9
|
-
readCompact(ref: AgentHistoryRef): Promise<import("../observability/contracts.js").CompactAgentHistory>;
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=grok-reader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"grok-reader.d.ts","sourceRoot":"","sources":["../../../src/agent-history/grok-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EACL,KAAK,kBAAkB,EAIxB,MAAM,cAAc,CAAC;AAGtB,gGAAgG;AAChG,qBAAa,iBAAkB,YAAW,kBAAkB;IAC1D,OAAO,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO;IAIhC,IAAI,CACR,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/B,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAyB3B,WAAW,CAAC,GAAG,EAAE,eAAe;CAGvC"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { compactFromMessages, limitMessages, readJsonl, } from "./readers.js";
|
|
2
|
-
import { messageRef, timestampFrom } from "./text.js";
|
|
3
|
-
/** Grok's pane-visible transcript is chat_history.jsonl; updates.jsonl is not selected here. */
|
|
4
|
-
export class GrokHistoryReader {
|
|
5
|
-
canRead(ref) {
|
|
6
|
-
return ref.source === "grok-jsonl" && Boolean(ref.path ?? ref.value);
|
|
7
|
-
}
|
|
8
|
-
async read(ref, options = {}) {
|
|
9
|
-
const path = ref.path ?? ref.value;
|
|
10
|
-
const messages = [];
|
|
11
|
-
for (const entry of await readJsonl(path)) {
|
|
12
|
-
const role = entry.value.type === "user" || entry.value.type === "assistant" ? entry.value.type : null;
|
|
13
|
-
if (!role)
|
|
14
|
-
continue;
|
|
15
|
-
// Deliberately inspect only the ordinary content field. In particular,
|
|
16
|
-
// reasoning.encrypted_content must never enter the observable history.
|
|
17
|
-
const text = grokText(entry.value.content);
|
|
18
|
-
if (!text)
|
|
19
|
-
continue;
|
|
20
|
-
messages.push({
|
|
21
|
-
ref: messageRef(path, typeof entry.value.id === "string" ? entry.value.id : undefined, entry.line),
|
|
22
|
-
role,
|
|
23
|
-
text,
|
|
24
|
-
timestamp: timestampFrom(entry.value.timestamp) ?? timestampFrom(entry.value.created_at),
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
return limitMessages(messages, options.limit);
|
|
28
|
-
}
|
|
29
|
-
async readCompact(ref) {
|
|
30
|
-
return compactFromMessages(ref, await this.read(ref));
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function grokText(value) {
|
|
34
|
-
if (typeof value === "string")
|
|
35
|
-
return value;
|
|
36
|
-
if (!Array.isArray(value))
|
|
37
|
-
return null;
|
|
38
|
-
const parts = value
|
|
39
|
-
.map((item) => {
|
|
40
|
-
if (typeof item === "string")
|
|
41
|
-
return item;
|
|
42
|
-
if (!item || typeof item !== "object")
|
|
43
|
-
return "";
|
|
44
|
-
const block = item;
|
|
45
|
-
return typeof block.text === "string"
|
|
46
|
-
? block.text
|
|
47
|
-
: typeof block.content === "string"
|
|
48
|
-
? block.content
|
|
49
|
-
: "";
|
|
50
|
-
})
|
|
51
|
-
.filter(Boolean);
|
|
52
|
-
return parts.length ? parts.join("\n") : null;
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=grok-reader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"grok-reader.js","sourceRoot":"","sources":["../../../src/agent-history/grok-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { AgentHistoryMessage, AgentHistoryRef } from "../observability/contracts.js";
|
|
2
|
-
import { type AgentHistoryReader } from "./readers.js";
|
|
3
|
-
export declare class OpenCodeHistoryReader implements AgentHistoryReader {
|
|
4
|
-
canRead(ref: AgentHistoryRef): boolean;
|
|
5
|
-
read(ref: AgentHistoryRef, options?: {
|
|
6
|
-
limit?: number;
|
|
7
|
-
}): Promise<AgentHistoryMessage[]>;
|
|
8
|
-
readCompact(ref: AgentHistoryRef): Promise<import("../observability/contracts.js").CompactAgentHistory>;
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=opencode-reader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-reader.d.ts","sourceRoot":"","sources":["../../../src/agent-history/opencode-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,KAAK,kBAAkB,EAAsC,MAAM,cAAc,CAAC;AAa3F,qBAAa,qBAAsB,YAAW,kBAAkB;IAC9D,OAAO,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO;IAIhC,IAAI,CACR,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/B,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA8D3B,WAAW,CAAC,GAAG,EAAE,eAAe;CAGvC"}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { DatabaseSync } from "node:sqlite";
|
|
2
|
-
import { compactFromMessages, limitMessages } from "./readers.js";
|
|
3
|
-
import { messageRef, textFromContent, timestampFrom } from "./text.js";
|
|
4
|
-
import { compactToolResult } from "./tool-compaction.js";
|
|
5
|
-
export class OpenCodeHistoryReader {
|
|
6
|
-
canRead(ref) {
|
|
7
|
-
return ref.source === "opencode-sqlite" && Boolean(ref.path) && Boolean(ref.value);
|
|
8
|
-
}
|
|
9
|
-
async read(ref, options = {}) {
|
|
10
|
-
const dbPath = ref.path;
|
|
11
|
-
if (!dbPath)
|
|
12
|
-
return [];
|
|
13
|
-
let sqlite = null;
|
|
14
|
-
try {
|
|
15
|
-
sqlite = new DatabaseSync(dbPath, { readOnly: true });
|
|
16
|
-
const rows = sqlite
|
|
17
|
-
.prepare(`
|
|
18
|
-
select
|
|
19
|
-
m.id as message_id,
|
|
20
|
-
m.time_created as message_time,
|
|
21
|
-
json_extract(m.data, '$.role') as role,
|
|
22
|
-
p.id as part_id,
|
|
23
|
-
p.time_created as part_time,
|
|
24
|
-
p.data as part_data
|
|
25
|
-
from message m
|
|
26
|
-
left join part p on p.message_id = m.id
|
|
27
|
-
where m.session_id = ?
|
|
28
|
-
order by m.time_created asc, p.time_created asc, p.id asc
|
|
29
|
-
`)
|
|
30
|
-
.all(ref.value);
|
|
31
|
-
const messages = [];
|
|
32
|
-
for (const row of rows) {
|
|
33
|
-
if (!row.part_data)
|
|
34
|
-
continue;
|
|
35
|
-
const part = parseJsonRecord(row.part_data);
|
|
36
|
-
const partType = stringValue(part.type);
|
|
37
|
-
const timestamp = timestampFrom(row.part_time ?? row.message_time);
|
|
38
|
-
const refValue = messageRef(dbPath, row.part_id ?? row.message_id, 0);
|
|
39
|
-
if (partType === "text") {
|
|
40
|
-
const role = row.role === "assistant" || row.role === "user" ? row.role : null;
|
|
41
|
-
const text = stringValue(part.text) ?? textFromContent(part.content);
|
|
42
|
-
if (role && text)
|
|
43
|
-
messages.push({ ref: refValue, role, text, timestamp });
|
|
44
|
-
continue;
|
|
45
|
-
}
|
|
46
|
-
if (partType === "tool") {
|
|
47
|
-
const toolName = stringValue(part.tool) ?? "unknown";
|
|
48
|
-
const state = record(part.state);
|
|
49
|
-
const output = state.output ?? state.error ?? part.output ?? part.content ?? part;
|
|
50
|
-
const text = typeof output === "string" ? output : JSON.stringify(output);
|
|
51
|
-
const isError = Boolean(state.error) || stringValue(state.status) === "error";
|
|
52
|
-
const compact = compactToolResult({ isError, ref: refValue, text, toolName });
|
|
53
|
-
messages.push({
|
|
54
|
-
compact,
|
|
55
|
-
ref: refValue,
|
|
56
|
-
role: "tool_result",
|
|
57
|
-
text: compact.text,
|
|
58
|
-
timestamp,
|
|
59
|
-
toolName,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return limitMessages(messages, options.limit);
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
return [];
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
sqlite?.close();
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
async readCompact(ref) {
|
|
73
|
-
return compactFromMessages(ref, await this.read(ref));
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function parseJsonRecord(value) {
|
|
77
|
-
try {
|
|
78
|
-
return record(JSON.parse(value));
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
return {};
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
function record(value) {
|
|
85
|
-
return typeof value === "object" && value !== null ? value : {};
|
|
86
|
-
}
|
|
87
|
-
function stringValue(value) {
|
|
88
|
-
return typeof value === "string" && value.length > 0 ? value : null;
|
|
89
|
-
}
|
|
90
|
-
//# sourceMappingURL=opencode-reader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-reader.js","sourceRoot":"","sources":["../../../src/agent-history/opencode-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAA2B,mBAAmB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAWzD,MAAM,OAAO,qBAAqB;IAChC,OAAO,CAAC,GAAoB;QAC1B,OAAO,GAAG,CAAC,MAAM,KAAK,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,IAAI,CACR,GAAoB,EACpB,UAA8B,EAAE;QAEhC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,IAAI,MAAM,GAAwB,IAAI,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,MAAM;iBAChB,OAAO,CAAC;;;;;;;;;;;;SAYR,CAAC;iBACD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAkB,CAAC;YAEnC,MAAM,QAAQ,GAA0B,EAAE,CAAC;YAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,SAAS;oBAAE,SAAS;gBAC7B,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;gBACnE,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAEtE,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACxB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC/E,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACrE,IAAI,IAAI,IAAI,IAAI;wBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC1E,SAAS;gBACX,CAAC;gBAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACxB,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;oBACrD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;oBAClF,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;oBAC9E,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC9E,QAAQ,CAAC,IAAI,CAAC;wBACZ,OAAO;wBACP,GAAG,EAAE,QAAQ;wBACb,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,SAAS;wBACT,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,OAAO,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,KAAK,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAoB;QACpC,OAAO,mBAAmB,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;CACF;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC"}
|