@coralai/sps-cli 0.65.31 → 0.65.33
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-CN.md +3 -3
- package/README.md +3 -3
- package/dist/commands/modelCommand.d.ts.map +1 -1
- package/dist/commands/modelCommand.js +5 -92
- package/dist/commands/modelCommand.js.map +1 -1
- package/dist/commands/pipelineTick.d.ts.map +1 -1
- package/dist/commands/pipelineTick.js +0 -9
- package/dist/commands/pipelineTick.js.map +1 -1
- package/dist/commands/projectInit.d.ts +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +0 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +0 -12
- package/dist/commands/tick.js.map +1 -1
- package/dist/console/index.d.ts.map +1 -1
- package/dist/console/index.js +27 -4
- package/dist/console/index.js.map +1 -1
- package/dist/console/routes/audit.d.ts.map +1 -1
- package/dist/console/routes/audit.js +4 -1
- package/dist/console/routes/audit.js.map +1 -1
- package/dist/console/routes/chat.d.ts.map +1 -1
- package/dist/console/routes/chat.js +14 -21
- package/dist/console/routes/chat.js.map +1 -1
- package/dist/console/routes/health.d.ts +14 -0
- package/dist/console/routes/health.d.ts.map +1 -0
- package/dist/console/routes/health.js +60 -0
- package/dist/console/routes/health.js.map +1 -0
- package/dist/console/routes/projects.js +1 -1
- package/dist/console/routes/projects.js.map +1 -1
- package/dist/console/routes/providers.d.ts.map +1 -1
- package/dist/console/routes/providers.js +2 -6
- package/dist/console/routes/providers.js.map +1 -1
- package/dist/console/routes/workers.d.ts.map +1 -1
- package/dist/console/routes/workers.js +19 -0
- package/dist/console/routes/workers.js.map +1 -1
- package/dist/console-assets/assets/{ShowcasePage-GF_0kvZG.js → ShowcasePage-NmXybDqC.js} +1 -1
- package/dist/console-assets/assets/{index-lgFYFfCi.js → index-DCAnGMiQ.js} +207 -217
- package/dist/console-assets/index.html +1 -1
- package/dist/core/activityStream.d.ts +42 -0
- package/dist/core/activityStream.d.ts.map +1 -0
- package/dist/core/activityStream.js +208 -0
- package/dist/core/activityStream.js.map +1 -0
- package/dist/core/agents/workerModelEnv.d.ts +2 -3
- package/dist/core/agents/workerModelEnv.d.ts.map +1 -1
- package/dist/core/agents/workerModelEnv.js +4 -17
- package/dist/core/agents/workerModelEnv.js.map +1 -1
- package/dist/core/markerFile.d.ts.map +1 -1
- package/dist/core/markerFile.js +3 -2
- package/dist/core/markerFile.js.map +1 -1
- package/dist/core/memory2/config.d.ts +11 -2
- package/dist/core/memory2/config.d.ts.map +1 -1
- package/dist/core/memory2/config.js +28 -4
- package/dist/core/memory2/config.js.map +1 -1
- package/dist/core/memory2/distill.d.ts.map +1 -1
- package/dist/core/memory2/distill.js +7 -5
- package/dist/core/memory2/distill.js.map +1 -1
- package/dist/core/queue.d.ts.map +1 -1
- package/dist/core/queue.js +2 -1
- package/dist/core/queue.js.map +1 -1
- package/dist/core/reclaimConfig.d.ts.map +1 -1
- package/dist/core/reclaimConfig.js +14 -2
- package/dist/core/reclaimConfig.js.map +1 -1
- package/dist/core/skills/SkillsManager.d.ts +5 -1
- package/dist/core/skills/SkillsManager.d.ts.map +1 -1
- package/dist/core/skills/SkillsManager.js +41 -2
- package/dist/core/skills/SkillsManager.js.map +1 -1
- package/dist/daemon/daemonClient.d.ts.map +1 -1
- package/dist/daemon/daemonClient.js +15 -1
- package/dist/daemon/daemonClient.js.map +1 -1
- package/dist/daemon/orphanReclaim.d.ts +34 -0
- package/dist/daemon/orphanReclaim.d.ts.map +1 -0
- package/dist/daemon/orphanReclaim.js +64 -0
- package/dist/daemon/orphanReclaim.js.map +1 -0
- package/dist/daemon/runGovernor.d.ts +11 -0
- package/dist/daemon/runGovernor.d.ts.map +1 -1
- package/dist/daemon/runGovernor.js +28 -0
- package/dist/daemon/runGovernor.js.map +1 -1
- package/dist/daemon/sessionDaemon.d.ts +8 -0
- package/dist/daemon/sessionDaemon.d.ts.map +1 -1
- package/dist/daemon/sessionDaemon.js +129 -6
- package/dist/daemon/sessionDaemon.js.map +1 -1
- package/dist/engines/MonitorEngine.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.js +27 -7
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/infra/filesystem.d.ts +5 -0
- package/dist/infra/filesystem.d.ts.map +1 -1
- package/dist/infra/filesystem.js +13 -1
- package/dist/infra/filesystem.js.map +1 -1
- package/dist/main.js +1 -6
- package/dist/main.js.map +1 -1
- package/dist/openai-agent/runWorker.d.ts.map +1 -1
- package/dist/openai-agent/runWorker.js +10 -6
- package/dist/openai-agent/runWorker.js.map +1 -1
- package/dist/openai-agent/storage/toolLedger.d.ts +9 -1
- package/dist/openai-agent/storage/toolLedger.d.ts.map +1 -1
- package/dist/openai-agent/storage/toolLedger.js +11 -2
- package/dist/openai-agent/storage/toolLedger.js.map +1 -1
- package/dist/providers/RuntimeSessionRuntime.d.ts.map +1 -1
- package/dist/providers/RuntimeSessionRuntime.js +14 -1
- package/dist/providers/RuntimeSessionRuntime.js.map +1 -1
- package/dist/providers/llm/workerTools.d.ts.map +1 -1
- package/dist/providers/llm/workerTools.js +9 -3
- package/dist/providers/llm/workerTools.js.map +1 -1
- package/dist/providers/mcp/spsMcpServer.d.ts +4 -0
- package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -1
- package/dist/providers/mcp/spsMcpServer.js +7 -1
- package/dist/providers/mcp/spsMcpServer.js.map +1 -1
- package/dist/runtime/backends/process/ExternalProcessBackend.d.ts +4 -0
- package/dist/runtime/backends/process/ExternalProcessBackend.d.ts.map +1 -1
- package/dist/runtime/backends/process/ExternalProcessBackend.js +49 -5
- package/dist/runtime/backends/process/ExternalProcessBackend.js.map +1 -1
- package/dist/runtime/service/AgentRuntime.d.ts.map +1 -1
- package/dist/runtime/service/AgentRuntime.js +8 -4
- package/dist/runtime/service/AgentRuntime.js.map +1 -1
- package/dist/runtime/service/FileRecordStore.d.ts +13 -0
- package/dist/runtime/service/FileRecordStore.d.ts.map +1 -1
- package/dist/runtime/service/FileRecordStore.js +90 -3
- package/dist/runtime/service/FileRecordStore.js.map +1 -1
- package/dist/services/ChatService.d.ts +1 -1
- package/dist/services/ChatService.d.ts.map +1 -1
- package/dist/services/ProjectService.d.ts +1 -1
- package/dist/services/ProjectService.d.ts.map +1 -1
- package/dist/services/WorkerService.d.ts +21 -0
- package/dist/services/WorkerService.d.ts.map +1 -1
- package/dist/services/WorkerService.js +35 -0
- package/dist/services/WorkerService.js.map +1 -1
- package/package.json +1 -1
- package/dist/commands/codexProxyCommand.d.ts +0 -2
- package/dist/commands/codexProxyCommand.d.ts.map +0 -1
- package/dist/commands/codexProxyCommand.js +0 -81
- package/dist/commands/codexProxyCommand.js.map +0 -1
- package/dist/console/routes/codexProxy.d.ts +0 -11
- package/dist/console/routes/codexProxy.d.ts.map +0 -1
- package/dist/console/routes/codexProxy.js +0 -68
- package/dist/console/routes/codexProxy.js.map +0 -1
- package/dist/core/agents/sidecar/CodexProxyManager.d.ts +0 -79
- package/dist/core/agents/sidecar/CodexProxyManager.d.ts.map +0 -1
- package/dist/core/agents/sidecar/CodexProxyManager.js +0 -359
- package/dist/core/agents/sidecar/CodexProxyManager.js.map +0 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
9
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
10
|
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
11
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
+
<script type="module" crossorigin src="/assets/index-DCAnGMiQ.js"></script>
|
|
12
12
|
<link rel="stylesheet" crossorigin href="/assets/index-cxN7rD-p.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** 归一后的原始活动事件。字段稳定;不含任何展示语义。 */
|
|
2
|
+
export type ActivityEvent = {
|
|
3
|
+
seq: number;
|
|
4
|
+
ts: string | null;
|
|
5
|
+
type: 'text';
|
|
6
|
+
text: string;
|
|
7
|
+
} | {
|
|
8
|
+
seq: number;
|
|
9
|
+
ts: string | null;
|
|
10
|
+
type: 'thinking';
|
|
11
|
+
text: string;
|
|
12
|
+
} | {
|
|
13
|
+
seq: number;
|
|
14
|
+
ts: string | null;
|
|
15
|
+
type: 'tool_call';
|
|
16
|
+
/** 配对用;与后续 tool_result 的 toolId 相同。 */
|
|
17
|
+
toolId: string;
|
|
18
|
+
/** **后端原生**工具名(Read / Edit / Bash / exec_command / apply_patch …),不翻译。 */
|
|
19
|
+
name: string;
|
|
20
|
+
/** 原始入参(已脱敏/截断超大值),不美化。 */
|
|
21
|
+
input: unknown;
|
|
22
|
+
} | {
|
|
23
|
+
seq: number;
|
|
24
|
+
ts: string | null;
|
|
25
|
+
type: 'tool_result';
|
|
26
|
+
toolId: string;
|
|
27
|
+
ok: boolean;
|
|
28
|
+
/** 结果摘要文本(可能为空);产品自行决定展示与否。 */
|
|
29
|
+
text?: string;
|
|
30
|
+
};
|
|
31
|
+
export type ActivityBackend = 'claude' | 'openai';
|
|
32
|
+
export interface ReadActivityInput {
|
|
33
|
+
backend: ActivityBackend;
|
|
34
|
+
/** claude 需要(用于定位 transcript);openai 不需要。 */
|
|
35
|
+
cwd?: string | null;
|
|
36
|
+
sessionId: string;
|
|
37
|
+
/** 只取最后 N 条(默认 500;0 = 不限)。 */
|
|
38
|
+
limit?: number;
|
|
39
|
+
}
|
|
40
|
+
/** 按后端读取归一活动流。未知/缺数据一律返回空数组,不抛。 */
|
|
41
|
+
export declare function readActivity(input: ReadActivityInput): ActivityEvent[];
|
|
42
|
+
//# sourceMappingURL=activityStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activityStream.d.ts","sourceRoot":"","sources":["../../src/core/activityStream.ts"],"names":[],"mappings":"AA4BA,gCAAgC;AAChC,MAAM,MAAM,aAAa,GACrB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9D;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClE;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,OAAO,CAAC;IACZ,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsMD,mCAAmC;AACnC,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,aAAa,EAAE,CAStE"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module core/activityStream
|
|
3
|
+
* @description **后端无关的 worker 活动流**——把 claude / openai 各自的产出归一成同一套
|
|
4
|
+
* 原始事件,供上层产品(gameforge 的「制作过程」、console 等)消费。
|
|
5
|
+
*
|
|
6
|
+
* 🔴 为什么要有这层:此前 gameforge 只拿到 `currentTranscriptPath`,然后**自己去解析 Claude Code
|
|
7
|
+
* 的原生 jsonl**(按 claude 的 schema 拆 assistant/tool_use/tool_result)。这既让产品侧耦合了
|
|
8
|
+
* 某个后端的内部格式,也让 openai worker 的产出**完全看不见**(格式和位置都不同)。
|
|
9
|
+
* CLAUDE.md 的红线写着:"读 worker 产出要走 service API,别新写扫 jsonl;现存直读是历史遗留,
|
|
10
|
+
* 只减不增" —— 本模块就是那个 service 侧的归一层。
|
|
11
|
+
*
|
|
12
|
+
* 🔴 契约只定在「原始事件层」,不定在「展示层」:
|
|
13
|
+
* - 归一化(懂各后端 schema)= 引擎的事 → 本模块
|
|
14
|
+
* - 中文标签 / 标题截断 / 取 basename / 图标 = 产品的展示逻辑 → **不进契约,引擎不碰**
|
|
15
|
+
* 因此这里的工具名是**后端原生名**(`Read`/`Edit`/`exec_command`/`apply_patch`…),入参是**原始入参**,
|
|
16
|
+
* 不翻译、不美化。产品各自维护自己的展示映射,引擎改归一不会动到任何产品的 UI。
|
|
17
|
+
*
|
|
18
|
+
* 已知限制(如实标注,不伪造):**openai 侧没有 thinking 事件** —— 其进程协议
|
|
19
|
+
* (AgentProcessEventPayloadsV1)只有 assistant.delta / assistant.message / tool.call /
|
|
20
|
+
* tool.result,不含思考过程。claude 侧有。产品端需按"可能缺失"处理,而不是假定两边对称。
|
|
21
|
+
* @layer core
|
|
22
|
+
* @boundedContext agents
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
25
|
+
import { resolve } from 'node:path';
|
|
26
|
+
import { claudeJsonlFile, sessionsDir } from '../shared/runtimePaths.js';
|
|
27
|
+
import { sanitizeToolInput } from './claudeJsonl.js';
|
|
28
|
+
const DEFAULT_LIMIT = 500;
|
|
29
|
+
const MAX_TEXT = 20_000;
|
|
30
|
+
function clip(text) {
|
|
31
|
+
return text.length > MAX_TEXT ? `${text.slice(0, MAX_TEXT)}…` : text;
|
|
32
|
+
}
|
|
33
|
+
/** 把 JsonValue 结果压成一段可读摘要(产品要不要展示由它自己定)。 */
|
|
34
|
+
function summarize(output) {
|
|
35
|
+
if (output == null)
|
|
36
|
+
return undefined;
|
|
37
|
+
if (typeof output === 'string')
|
|
38
|
+
return clip(output);
|
|
39
|
+
try {
|
|
40
|
+
return clip(JSON.stringify(output));
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function readClaudeActivity(cwd, sessionId) {
|
|
47
|
+
const path = claudeJsonlFile(cwd, sessionId);
|
|
48
|
+
if (!existsSync(path))
|
|
49
|
+
return [];
|
|
50
|
+
let raw;
|
|
51
|
+
try {
|
|
52
|
+
raw = readFileSync(path, 'utf-8');
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const out = [];
|
|
58
|
+
let seq = 0;
|
|
59
|
+
for (const line of raw.split('\n')) {
|
|
60
|
+
if (!line.trim())
|
|
61
|
+
continue;
|
|
62
|
+
let rec;
|
|
63
|
+
try {
|
|
64
|
+
rec = JSON.parse(line);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
continue; // 半截行(正在写)跳过
|
|
68
|
+
}
|
|
69
|
+
const ts = rec.timestamp ?? null;
|
|
70
|
+
for (const block of rec.message?.content ?? []) {
|
|
71
|
+
if (rec.type === 'assistant' && block.type === 'text' && block.text) {
|
|
72
|
+
out.push({ seq: seq++, ts, type: 'text', text: clip(block.text) });
|
|
73
|
+
}
|
|
74
|
+
else if (rec.type === 'assistant' && block.type === 'thinking' && block.thinking) {
|
|
75
|
+
out.push({ seq: seq++, ts, type: 'thinking', text: clip(block.thinking) });
|
|
76
|
+
}
|
|
77
|
+
else if (rec.type === 'assistant' && block.type === 'tool_use' && block.id && block.name) {
|
|
78
|
+
out.push({
|
|
79
|
+
seq: seq++,
|
|
80
|
+
ts,
|
|
81
|
+
type: 'tool_call',
|
|
82
|
+
toolId: block.id,
|
|
83
|
+
name: block.name,
|
|
84
|
+
input: sanitizeToolInput(block.input),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else if (rec.type === 'user' && block.type === 'tool_result' && block.tool_use_id) {
|
|
88
|
+
out.push({
|
|
89
|
+
seq: seq++,
|
|
90
|
+
ts,
|
|
91
|
+
type: 'tool_result',
|
|
92
|
+
toolId: block.tool_use_id,
|
|
93
|
+
ok: block.is_error !== true,
|
|
94
|
+
...(summarize(block.content) ? { text: summarize(block.content) } : {}),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
function readOpenAiActivity(sessionId) {
|
|
102
|
+
if (!/^[A-Za-z0-9_-]+$/.test(sessionId))
|
|
103
|
+
return [];
|
|
104
|
+
const runsDir = resolve(sessionsDir(), 'openai', sessionId, 'runs');
|
|
105
|
+
if (!existsSync(runsDir))
|
|
106
|
+
return [];
|
|
107
|
+
let runDirs;
|
|
108
|
+
try {
|
|
109
|
+
runDirs = readdirSync(runsDir, { withFileTypes: true })
|
|
110
|
+
.filter((d) => d.isDirectory())
|
|
111
|
+
.map((d) => resolve(runsDir, d.name))
|
|
112
|
+
.sort((a, b) => statSync(a).mtimeMs - statSync(b).mtimeMs);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
const out = [];
|
|
118
|
+
let seq = 0;
|
|
119
|
+
// assistant.delta 是逐段的:合并连续的 delta 成一条 text,避免产品端拿到几百个碎片。
|
|
120
|
+
let pendingText = '';
|
|
121
|
+
let pendingTs = null;
|
|
122
|
+
const flushText = () => {
|
|
123
|
+
if (!pendingText)
|
|
124
|
+
return;
|
|
125
|
+
out.push({ seq: seq++, ts: pendingTs, type: 'text', text: clip(pendingText) });
|
|
126
|
+
pendingText = '';
|
|
127
|
+
pendingTs = null;
|
|
128
|
+
};
|
|
129
|
+
for (const dir of runDirs) {
|
|
130
|
+
const file = resolve(dir, 'events.jsonl');
|
|
131
|
+
if (!existsSync(file))
|
|
132
|
+
continue;
|
|
133
|
+
let raw;
|
|
134
|
+
try {
|
|
135
|
+
raw = readFileSync(file, 'utf-8');
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
for (const line of raw.split('\n')) {
|
|
141
|
+
if (!line.trim())
|
|
142
|
+
continue;
|
|
143
|
+
let ev;
|
|
144
|
+
try {
|
|
145
|
+
ev = JSON.parse(line);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const ts = ev.timestamp ?? null;
|
|
151
|
+
switch (ev.type) {
|
|
152
|
+
case 'assistant.delta':
|
|
153
|
+
if (ev.payload?.delta) {
|
|
154
|
+
pendingTs ??= ts;
|
|
155
|
+
pendingText += ev.payload.delta;
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
case 'assistant.message':
|
|
159
|
+
flushText();
|
|
160
|
+
if (ev.payload?.text) {
|
|
161
|
+
out.push({ seq: seq++, ts, type: 'text', text: clip(ev.payload.text) });
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
case 'tool.call':
|
|
165
|
+
flushText();
|
|
166
|
+
if (ev.payload?.toolCallId && ev.payload.toolName) {
|
|
167
|
+
out.push({
|
|
168
|
+
seq: seq++,
|
|
169
|
+
ts,
|
|
170
|
+
type: 'tool_call',
|
|
171
|
+
toolId: ev.payload.toolCallId,
|
|
172
|
+
name: ev.payload.toolName,
|
|
173
|
+
input: sanitizeToolInput(ev.payload.input),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
case 'tool.result':
|
|
178
|
+
flushText();
|
|
179
|
+
if (ev.payload?.toolCallId) {
|
|
180
|
+
out.push({
|
|
181
|
+
seq: seq++,
|
|
182
|
+
ts,
|
|
183
|
+
type: 'tool_result',
|
|
184
|
+
toolId: ev.payload.toolCallId,
|
|
185
|
+
ok: ev.payload.status !== 'failed',
|
|
186
|
+
...(summarize(ev.payload.output) ? { text: summarize(ev.payload.output) } : {}),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
break;
|
|
190
|
+
default:
|
|
191
|
+
break; // session.started / capabilities / usage / run.* 不属于活动流
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
flushText();
|
|
196
|
+
return out;
|
|
197
|
+
}
|
|
198
|
+
/** 按后端读取归一活动流。未知/缺数据一律返回空数组,不抛。 */
|
|
199
|
+
export function readActivity(input) {
|
|
200
|
+
const all = input.backend === 'openai'
|
|
201
|
+
? readOpenAiActivity(input.sessionId)
|
|
202
|
+
: input.cwd
|
|
203
|
+
? readClaudeActivity(input.cwd, input.sessionId)
|
|
204
|
+
: [];
|
|
205
|
+
const limit = input.limit ?? DEFAULT_LIMIT;
|
|
206
|
+
return limit > 0 && all.length > limit ? all.slice(-limit) : all;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=activityStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activityStream.js","sourceRoot":"","sources":["../../src/core/activityStream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 由 model + providerId 解析出 worker 该带的 env:
|
|
3
3
|
* - `ANTHROPIC_MODEL = model`(有 model 才设)
|
|
4
|
-
* -
|
|
5
|
-
* - 第三方 anthropic 端点(既非 codex-proxy 也非 official/空)→ 从 providers.json 取 baseUrl/apiKey
|
|
4
|
+
* - 第三方 anthropic 端点(非 official/空)→ 从 providers.json 取 baseUrl/apiKey
|
|
6
5
|
* - `providerId === 'official'` 或空 → 只设 ANTHROPIC_MODEL(用官方订阅端点)
|
|
7
|
-
* -
|
|
6
|
+
* - 第三方端点额外设 `CLAUDE_CODE_ATTRIBUTION_HEADER=0`(改善第三方缓存命中)
|
|
8
7
|
*
|
|
9
8
|
* 空对象 = 无需注入(既没 model 也没自定义端点)。
|
|
10
9
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerModelEnv.d.ts","sourceRoot":"","sources":["../../../src/core/agents/workerModelEnv.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workerModelEnv.d.ts","sourceRoot":"","sources":["../../../src/core/agents/workerModelEnv.ts"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,CAAC,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwCxB"}
|
|
@@ -6,17 +6,14 @@
|
|
|
6
6
|
* @layer core
|
|
7
7
|
* @boundedContext worker-lifecycle
|
|
8
8
|
*
|
|
9
|
-
* 与已删的 workerAnthropicEnv 的区别:那个读全局 agents.worker、只认 codex-proxy;这个纯入参驱动。
|
|
10
9
|
*/
|
|
11
|
-
import { CODEX_PROXY_ID, codexProxyBaseUrl } from './sidecar/CodexProxyManager.js';
|
|
12
10
|
import { getProvider } from '../../providers/llm/providers.js';
|
|
13
11
|
/**
|
|
14
12
|
* 由 model + providerId 解析出 worker 该带的 env:
|
|
15
13
|
* - `ANTHROPIC_MODEL = model`(有 model 才设)
|
|
16
|
-
* -
|
|
17
|
-
* - 第三方 anthropic 端点(既非 codex-proxy 也非 official/空)→ 从 providers.json 取 baseUrl/apiKey
|
|
14
|
+
* - 第三方 anthropic 端点(非 official/空)→ 从 providers.json 取 baseUrl/apiKey
|
|
18
15
|
* - `providerId === 'official'` 或空 → 只设 ANTHROPIC_MODEL(用官方订阅端点)
|
|
19
|
-
* -
|
|
16
|
+
* - 第三方端点额外设 `CLAUDE_CODE_ATTRIBUTION_HEADER=0`(改善第三方缓存命中)
|
|
20
17
|
*
|
|
21
18
|
* 空对象 = 无需注入(既没 model 也没自定义端点)。
|
|
22
19
|
*/
|
|
@@ -26,17 +23,7 @@ export function resolveWorkerModelEnv(model, providerId) {
|
|
|
26
23
|
if (m)
|
|
27
24
|
env.ANTHROPIC_MODEL = m;
|
|
28
25
|
const pid = providerId?.trim();
|
|
29
|
-
if (pid
|
|
30
|
-
env.ANTHROPIC_BASE_URL = codexProxyBaseUrl();
|
|
31
|
-
env.ANTHROPIC_AUTH_TOKEN = 'sps-local';
|
|
32
|
-
// claude-code-proxy 要求(否则 Claude Code 启动/后台任务打空 proxy 未实现的端点 → worker 挂):
|
|
33
|
-
// 小/快模型也走 proxy;禁非必要流量(warmup/telemetry 等)。
|
|
34
|
-
// 🔴 SMALL_FAST 必须落在与主模型同一后端(proxy 按 model 路由):gpt-* → codex 的 mini;
|
|
35
|
-
// kimi/cursor 等非 gpt 主模型 → 用主模型自身兜底(保证可路由、不误触发 codex 登录)。
|
|
36
|
-
env.ANTHROPIC_SMALL_FAST_MODEL = m && !/^gpt-/i.test(m) ? m : 'gpt-5.4-mini';
|
|
37
|
-
env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC = '1';
|
|
38
|
-
}
|
|
39
|
-
else if (pid && pid !== 'official') {
|
|
26
|
+
if (pid && pid !== 'official') {
|
|
40
27
|
const provider = getProvider(pid);
|
|
41
28
|
if (provider?.baseUrl)
|
|
42
29
|
env.ANTHROPIC_BASE_URL = provider.baseUrl;
|
|
@@ -62,7 +49,7 @@ export function resolveWorkerModelEnv(model, providerId) {
|
|
|
62
49
|
}
|
|
63
50
|
}
|
|
64
51
|
}
|
|
65
|
-
//
|
|
52
|
+
// 第三方 anthropic 兼容端点 → 关掉逐请求变化的归因头。
|
|
66
53
|
// Claude Code 2.1.x 把 `x-anthropic-billing-header`(含每请求都变的 cc_prev_req)作为一段
|
|
67
54
|
// 系统提示词注入;第三方 API 会把它算进 prompt-cache key → 每次 key 不同 → 缓存命中率归零、
|
|
68
55
|
// token 暴涨、变慢。设 CLAUDE_CODE_ATTRIBUTION_HEADER=0 让 Claude Code 不注入该段。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerModelEnv.js","sourceRoot":"","sources":["../../../src/core/agents/workerModelEnv.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workerModelEnv.js","sourceRoot":"","sources":["../../../src/core/agents/workerModelEnv.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,UAAmB;IAEnB,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,MAAM,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,IAAI,CAAC;QAAE,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC;IAE/B,MAAM,GAAG,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/B,IAAI,GAAG,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ,EAAE,OAAO;YAAE,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjE,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;YACtB,wDAAwD;YACxD,wDAAwD;YACxD,GAAG,CAAC,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,WAAW,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,EAAE,CAAC;YACN,4DAA4D;YAC5D,GAAG,CAAC,6BAA6B,GAAG,CAAC,CAAC;YACtC,GAAG,CAAC,8BAA8B,GAAG,CAAC,CAAC;YACvC,GAAG,CAAC,4BAA4B,GAAG,CAAC,CAAC;YACrC,GAAG,CAAC,0BAA0B,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,kEAAkE;QAClE,kEAAkE;QAClE,MAAM,KAAK,GAAI,QAA+C,EAAE,QAAQ,CAAC;QACzE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;gBACtE,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,4EAA4E;IAC5E,gEAAgE;IAChE,sEAAsE;IACtE,mDAAmD;IACnD,IAAI,GAAG,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,GAAG,CAAC,8BAA8B,GAAG,GAAG,CAAC;IAC3C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markerFile.d.ts","sourceRoot":"","sources":["../../src/core/markerFile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"markerFile.d.ts","sourceRoot":"","sources":["../../src/core/markerFile.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGlF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,EAChC,KAAK,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,IAAI,CAeN;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAC/B,IAAI,CAeN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAiB7F"}
|
package/dist/core/markerFile.js
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* - 原因:claude 子进程 env 在 spawn 时冻结;多卡复用时 env 会 stale。hook
|
|
18
18
|
* 脚本必须通过文件反查当前卡,不能信 env。
|
|
19
19
|
*/
|
|
20
|
+
import { uniqueTmpPath } from '../infra/filesystem.js';
|
|
20
21
|
import { existsSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
21
22
|
import { dirname, resolve } from 'node:path';
|
|
22
23
|
import { workerMarkerFile } from '../shared/runtimePaths.js';
|
|
@@ -44,7 +45,7 @@ export function getMarkerPathFromStateFile(stateFile, slot) {
|
|
|
44
45
|
*/
|
|
45
46
|
export function writeCurrentCardFile(finalPath, cardId, stage, onError, extra) {
|
|
46
47
|
try {
|
|
47
|
-
const tmpPath =
|
|
48
|
+
const tmpPath = uniqueTmpPath(finalPath); // 唯一名:见 filesystem.uniqueTmpPath
|
|
48
49
|
const payload = {
|
|
49
50
|
cardId,
|
|
50
51
|
stage,
|
|
@@ -74,7 +75,7 @@ export function patchCurrentCardFile(finalPath, patch, onError) {
|
|
|
74
75
|
...(patch.sessionId ? { sessionId: patch.sessionId } : {}),
|
|
75
76
|
...(patch.pid !== undefined ? { pid: patch.pid } : {}),
|
|
76
77
|
};
|
|
77
|
-
const tmpPath =
|
|
78
|
+
const tmpPath = uniqueTmpPath(finalPath); // 唯一名:见 filesystem.uniqueTmpPath
|
|
78
79
|
writeFileSync(tmpPath, JSON.stringify(merged));
|
|
79
80
|
renameSync(tmpPath, finalPath);
|
|
80
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markerFile.js","sourceRoot":"","sources":["../../src/core/markerFile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAY7D;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,IAAY;IACzD,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,SAAiB,EAAE,IAAY;IACxE,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC,UAAU,EAAE,UAAU,IAAI,eAAe,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiB,EACjB,MAAc,EACd,KAAa,EACb,OAAgC,EAChC,KAA4C;IAE5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"markerFile.js","sourceRoot":"","sources":["../../src/core/markerFile.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,8 +23,17 @@ export declare function memoryMode(): MemoryMode;
|
|
|
23
23
|
export declare function isMemoryOff(): boolean;
|
|
24
24
|
/** 是否启用 LLM 蒸馏捕获(SPS_MEMORY_DISTILL=on)。关则走规则版(取末尾结论段)。 */
|
|
25
25
|
export declare function distillEnabled(): boolean;
|
|
26
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* 蒸馏用的 LLM 端点(Anthropic 兼容)。**无缺省**——必须显式配 SPS_MEMORY_DISTILL_URL,
|
|
28
|
+
* 未配则蒸馏不生效(回落规则版)。历史上缺省指向 claude-code-proxy,该 sidecar 已移除;
|
|
29
|
+
* 蒸馏是后台高频杂活,配一个便宜的第三方 key 端点即可,别占订阅配额。
|
|
30
|
+
*/
|
|
27
31
|
export declare function distillUrl(): string;
|
|
28
|
-
/**
|
|
32
|
+
/** 蒸馏模型名(随端点定,无缺省)。 */
|
|
29
33
|
export declare function distillModel(): string;
|
|
34
|
+
/**
|
|
35
|
+
* 蒸馏端点的 API key:优先 SPS_MEMORY_DISTILL_KEY,否则从 LLM provider 注册表按 baseUrl
|
|
36
|
+
* 匹配取(密钥单一真源在注册表,不用手抄一份到 env)。取不到返空串。
|
|
37
|
+
*/
|
|
38
|
+
export declare function distillApiKey(): string;
|
|
30
39
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,gBAAgB,GAAG,UAAU,GAAG,MAAM,CAAC;AAW1E,wDAAwD;AACxD,wBAAgB,mBAAmB,IAAI,IAAI,CAAqB;AAEhE,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzD;AAED,+BAA+B;AAC/B,wBAAgB,UAAU,IAAI,UAAU,CAIvC;AAED,wCAAwC;AACxC,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAID,2DAA2D;AAC3D,wBAAgB,cAAc,IAAI,OAAO,CAExC;AACD;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AACD,uBAAuB;AACvB,wBAAgB,YAAY,IAAI,MAAM,CAErC;AACD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAWtC"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* @boundedContext memory
|
|
14
14
|
*/
|
|
15
15
|
import { loadGlobalEnv } from '../config.js';
|
|
16
|
+
import { listProviders } from '../../providers/llm/providers.js';
|
|
16
17
|
// ~/.coral/env 的缓存:console/daemon/CLI 启动不会把它注入 process.env,故 memory 配置需自己回落读它。
|
|
17
18
|
// 但显式设了 SPS_MEMORY_ROOT(测试/隔离场景)则不回落全局 env,避免读到真实配置污染隔离环境。
|
|
18
19
|
let _fileEnv = null;
|
|
@@ -51,12 +52,35 @@ export function isMemoryOff() {
|
|
|
51
52
|
export function distillEnabled() {
|
|
52
53
|
return (memoryEnv('SPS_MEMORY_DISTILL') ?? '').toLowerCase() === 'on';
|
|
53
54
|
}
|
|
54
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* 蒸馏用的 LLM 端点(Anthropic 兼容)。**无缺省**——必须显式配 SPS_MEMORY_DISTILL_URL,
|
|
57
|
+
* 未配则蒸馏不生效(回落规则版)。历史上缺省指向 claude-code-proxy,该 sidecar 已移除;
|
|
58
|
+
* 蒸馏是后台高频杂活,配一个便宜的第三方 key 端点即可,别占订阅配额。
|
|
59
|
+
*/
|
|
55
60
|
export function distillUrl() {
|
|
56
|
-
return (memoryEnv('SPS_MEMORY_DISTILL_URL') ?? '
|
|
61
|
+
return (memoryEnv('SPS_MEMORY_DISTILL_URL') ?? '').replace(/\/+$/, '');
|
|
57
62
|
}
|
|
58
|
-
/**
|
|
63
|
+
/** 蒸馏模型名(随端点定,无缺省)。 */
|
|
59
64
|
export function distillModel() {
|
|
60
|
-
return memoryEnv('SPS_MEMORY_DISTILL_MODEL') ?? '
|
|
65
|
+
return memoryEnv('SPS_MEMORY_DISTILL_MODEL') ?? '';
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 蒸馏端点的 API key:优先 SPS_MEMORY_DISTILL_KEY,否则从 LLM provider 注册表按 baseUrl
|
|
69
|
+
* 匹配取(密钥单一真源在注册表,不用手抄一份到 env)。取不到返空串。
|
|
70
|
+
*/
|
|
71
|
+
export function distillApiKey() {
|
|
72
|
+
const explicit = memoryEnv('SPS_MEMORY_DISTILL_KEY');
|
|
73
|
+
if (explicit)
|
|
74
|
+
return explicit;
|
|
75
|
+
const url = distillUrl();
|
|
76
|
+
if (!url)
|
|
77
|
+
return '';
|
|
78
|
+
try {
|
|
79
|
+
const hit = listProviders('anthropic').find((p) => (p.baseUrl ?? '').replace(/\/+$/, '') === url);
|
|
80
|
+
return hit?.apiKey ?? '';
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return '';
|
|
84
|
+
}
|
|
61
85
|
}
|
|
62
86
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/memory2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/memory2/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAIjE,+EAA+E;AAC/E,2DAA2D;AAC3D,IAAI,QAAQ,GAAkC,IAAI,CAAC;AACnD,SAAS,OAAO;IACd,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAC3C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC;QAAC,QAAQ,GAAG,aAAa,EAA4B,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,QAAQ,GAAG,EAAE,CAAC;IAAC,CAAC;IACtF,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD,wDAAwD;AACxD,MAAM,UAAU,mBAAmB,KAAW,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;AAEhE,4DAA4D;AAC5D,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/D,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,gBAAgB;QAAE,OAAO,GAAG,CAAC;IACjF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,WAAW;IACzB,OAAO,UAAU,EAAE,KAAK,MAAM,CAAC;AACjC,CAAC;AAED,iDAAiD;AAEjD,2DAA2D;AAC3D,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;AACxE,CAAC;AACD;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AACD,uBAAuB;AACvB,MAAM,UAAU,YAAY;IAC1B,OAAO,SAAS,CAAC,0BAA0B,CAAC,IAAI,EAAE,CAAC;AACrD,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACrD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;QAClG,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"distill.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/distill.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"distill.d.ts","sourceRoot":"","sources":["../../../src/core/memory2/distill.ts"],"names":[],"mappings":"AAWA,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAyCD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,CAwB3F"}
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* @module core/memory2/distill
|
|
3
3
|
* @description LLM 蒸馏(设计 §5,SPS_MEMORY_DISTILL=on):把一张卡/会话的**完整归一化叙述**交给便宜 LLM,
|
|
4
4
|
* 提炼成 0–N 条**可复用、耐用**的原子记忆(决策/约定/坑/模式/架构),而非规则版只取末尾一段。
|
|
5
|
-
* 走 Anthropic 兼容端点(
|
|
5
|
+
* 走 **显式配置**的 Anthropic 兼容端点(SPS_MEMORY_DISTILL_URL/_MODEL,key 从 provider
|
|
6
|
+
* 注册表按 baseUrl 取)。未配端点 = 蒸馏不生效,调用方回落规则版。
|
|
6
7
|
* 红线:输入来自 subscribe 的归一化文本,不碰 jsonl。任何失败 → 返 null,调用方回退规则版。
|
|
7
8
|
* @layer core
|
|
8
9
|
* @boundedContext memory
|
|
9
10
|
*/
|
|
10
|
-
import { distillModel, distillUrl } from './config.js';
|
|
11
|
+
import { distillApiKey, distillModel, distillUrl } from './config.js';
|
|
11
12
|
import { MEMORY_CATEGORIES } from './types.js';
|
|
12
13
|
const MAX_INPUT_CHARS = 20000; // 太长取末尾(结论/近期决策在后)
|
|
13
14
|
const REQUEST_TIMEOUT_MS = 30000;
|
|
@@ -60,7 +61,8 @@ function parseMemories(text) {
|
|
|
60
61
|
*/
|
|
61
62
|
export async function distillNarrative(narrative) {
|
|
62
63
|
const url = distillUrl();
|
|
63
|
-
|
|
64
|
+
const model = distillModel();
|
|
65
|
+
if (!url || !model || !narrative.trim())
|
|
64
66
|
return null;
|
|
65
67
|
const input = narrative.length > MAX_INPUT_CHARS ? narrative.slice(-MAX_INPUT_CHARS) : narrative;
|
|
66
68
|
const ac = new AbortController();
|
|
@@ -68,8 +70,8 @@ export async function distillNarrative(narrative) {
|
|
|
68
70
|
try {
|
|
69
71
|
const r = await fetch(`${url}/v1/messages`, {
|
|
70
72
|
method: 'POST',
|
|
71
|
-
headers: { 'content-type': 'application/json', 'x-api-key':
|
|
72
|
-
body: JSON.stringify({ model
|
|
73
|
+
headers: { 'content-type': 'application/json', 'x-api-key': distillApiKey(), 'anthropic-version': '2023-06-01' },
|
|
74
|
+
body: JSON.stringify({ model, max_tokens: 1500, messages: [{ role: 'user', content: PROMPT(input) }] }),
|
|
73
75
|
signal: ac.signal,
|
|
74
76
|
});
|
|
75
77
|
if (!r.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"distill.js","sourceRoot":"","sources":["../../../src/core/memory2/distill.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"distill.js","sourceRoot":"","sources":["../../../src/core/memory2/distill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAuB,MAAM,YAAY,CAAC;AAUpE,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,mBAAmB;AAClD,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,MAAM,MAAM,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC;;;;;;;;EAQpC,SAAS,EAAE,CAAC;AAEd,gDAAgD;AAChD,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACtD,IAAI,KAAK;QAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK;QAAE,OAAO,EAAE,CAAC;IACxC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,CAAC,GAAG,GAA8B,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;YAAE,SAAS;QAC9B,MAAM,QAAQ,GAAI,iBAAuC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAkB,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,QAA2B,CAAC,CAAC,CAAC,MAAM,CAAC;QACnI,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/E,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IACtD,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjG,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,cAAc,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE;YAChH,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACvG,MAAM,EAAE,EAAE,CAAC,MAAM;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,EAA4C,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACnE,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
package/dist/core/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/core/queue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/core/queue.ts"],"names":[],"mappings":"AAkBA;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAIlE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMnE"}
|
package/dist/core/queue.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* @layer core
|
|
14
14
|
* @boundedContext pipeline
|
|
15
15
|
*/
|
|
16
|
+
import { uniqueTmpPath } from '../infra/filesystem.js';
|
|
16
17
|
import { existsSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
17
18
|
/**
|
|
18
19
|
* Read pipeline_order.json — a pure array of seq numbers.
|
|
@@ -36,7 +37,7 @@ export function readQueue(filePath) {
|
|
|
36
37
|
* Atomic write of pipeline_order.json.
|
|
37
38
|
*/
|
|
38
39
|
export function writeQueue(filePath, queue) {
|
|
39
|
-
const tmpFile = filePath
|
|
40
|
+
const tmpFile = uniqueTmpPath(filePath); // 唯一名:固定 .tmp 在并发写下会撕裂
|
|
40
41
|
writeFileSync(tmpFile, JSON.stringify(queue, null, 2) + '\n');
|
|
41
42
|
renameSync(tmpFile, filePath);
|
|
42
43
|
}
|
package/dist/core/queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/core/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE9E;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,KAAe;IAC1D,MAAM,OAAO,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/core/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE9E;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,KAAe;IAC1D,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,uBAAuB;IAChE,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9D,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,GAAW;IAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reclaimConfig.d.ts","sourceRoot":"","sources":["../../src/core/reclaimConfig.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,uBAAuB,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"reclaimConfig.d.ts","sourceRoot":"","sources":["../../src/core/reclaimConfig.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAQ1C,oBAAoB;AACpB,wBAAgB,iBAAiB,IAAI,MAAM,CAgB1C;AAED,4BAA4B;AAC5B,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIvD"}
|