@coralai/sps-cli 0.51.11 → 0.51.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.
@@ -7,8 +7,8 @@
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
9
  <link href="https://fonts.googleapis.com/css2?family=Fredoka:wght@400;500;600;700&family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
10
- <script type="module" crossorigin src="/assets/index-DKc9idxO.js"></script>
11
- <link rel="stylesheet" crossorigin href="/assets/index-BJ1T4p1K.css">
10
+ <script type="module" crossorigin src="/assets/index-C5yBUuEw.js"></script>
11
+ <link rel="stylesheet" crossorigin href="/assets/index-BPZgV2XB.css">
12
12
  </head>
13
13
  <body>
14
14
  <div id="root"></div>
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @module core/claudeJsonl
3
+ * @description 解析 Claude CLI 自身写的 ACP session 历史 jsonl
4
+ *
5
+ * @layer core
6
+ *
7
+ * Claude CLI 把每个 ACP session 的完整对话写在
8
+ * ~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl
9
+ * 一个 sessionId 一个 jsonl 文件(1:1)。
10
+ *
11
+ * 把它解析成 ChatMessage[] 后,Console 就能展示 `sps agent --chat` /
12
+ * `sps agent --name foo` 创建的 CLI 会话历史,而不必双写到
13
+ * ~/.coral/chat-sessions/.
14
+ */
15
+ import type { ChatMessage } from '../services/ChatService.js';
16
+ export interface JsonlSummary {
17
+ /** 文件存在且至少含一条非 meta user/assistant 消息 */
18
+ exists: boolean;
19
+ /** 解析出的可展示消息条数 */
20
+ messageCount: number;
21
+ /** 最后一条消息的 ISO 时间 */
22
+ lastMessageAt: string | null;
23
+ /** 第一条非 meta user 消息的纯文本(作为 title 候选) */
24
+ firstUserText: string | null;
25
+ /** 文件 mtime(ISO),用于排序兜底 */
26
+ fileMTime: string | null;
27
+ }
28
+ /** 文件是否存在(不解析内容) */
29
+ export declare function jsonlExists(cwd: string, sessionId: string): boolean;
30
+ /**
31
+ * 读 jsonl 并转成 ChatMessage[]。
32
+ * - 跳过 isMeta / system / progress / queue-operation / file-history-snapshot / attachment / last-prompt
33
+ * - sidechain(subagent)目前一并跳过 —— 主对话流更纯
34
+ * - 每个 assistant record 是一条 ChatMessage(一次模型 turn 内的多 record 不再合并 —— Claude 的 jsonl 已经分好了)
35
+ * - tool_use 块映射为 ChatMessageBlock; thinking 不展示
36
+ */
37
+ export declare function parseJsonlMessages(cwd: string, sessionId: string): ChatMessage[];
38
+ /**
39
+ * 摘要(list() 用)。复用 parseJsonlMessages 保持计数与真实可展示条数一致 ——
40
+ * 大文件下会读全文,但解析本身仍是 O(n) 行扫,对 list 的 SLA 足够。
41
+ */
42
+ export declare function summarizeJsonl(cwd: string, sessionId: string): JsonlSummary;
43
+ //# sourceMappingURL=claudeJsonl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeJsonl.d.ts","sourceRoot":"","sources":["../../src/core/claudeJsonl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAwC9D,MAAM,WAAW,YAAY;IAC3B,yCAAyC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,kBAAkB;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yCAAyC;IACzC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2BAA2B;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,oBAAoB;AACpB,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CA+BhF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CA2B3E"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * @module core/claudeJsonl
3
+ * @description 解析 Claude CLI 自身写的 ACP session 历史 jsonl
4
+ *
5
+ * @layer core
6
+ *
7
+ * Claude CLI 把每个 ACP session 的完整对话写在
8
+ * ~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl
9
+ * 一个 sessionId 一个 jsonl 文件(1:1)。
10
+ *
11
+ * 把它解析成 ChatMessage[] 后,Console 就能展示 `sps agent --chat` /
12
+ * `sps agent --name foo` 创建的 CLI 会话历史,而不必双写到
13
+ * ~/.coral/chat-sessions/.
14
+ */
15
+ import { existsSync, readFileSync, statSync } from 'node:fs';
16
+ import { claudeJsonlFile } from '../shared/runtimePaths.js';
17
+ /** 文件是否存在(不解析内容) */
18
+ export function jsonlExists(cwd, sessionId) {
19
+ return existsSync(claudeJsonlFile(cwd, sessionId));
20
+ }
21
+ /**
22
+ * 读 jsonl 并转成 ChatMessage[]。
23
+ * - 跳过 isMeta / system / progress / queue-operation / file-history-snapshot / attachment / last-prompt
24
+ * - sidechain(subagent)目前一并跳过 —— 主对话流更纯
25
+ * - 每个 assistant record 是一条 ChatMessage(一次模型 turn 内的多 record 不再合并 —— Claude 的 jsonl 已经分好了)
26
+ * - tool_use 块映射为 ChatMessageBlock; thinking 不展示
27
+ */
28
+ export function parseJsonlMessages(cwd, sessionId) {
29
+ const path = claudeJsonlFile(cwd, sessionId);
30
+ if (!existsSync(path))
31
+ return [];
32
+ let raw;
33
+ try {
34
+ raw = readFileSync(path, 'utf-8');
35
+ }
36
+ catch {
37
+ return [];
38
+ }
39
+ const messages = [];
40
+ for (const line of raw.split('\n')) {
41
+ if (!line.trim())
42
+ continue;
43
+ let rec;
44
+ try {
45
+ rec = JSON.parse(line);
46
+ }
47
+ catch {
48
+ continue;
49
+ }
50
+ if (rec.isMeta)
51
+ continue;
52
+ if (rec.isSidechain)
53
+ continue;
54
+ if (rec.type === 'user') {
55
+ const m = recordToUserMessage(rec);
56
+ if (m)
57
+ messages.push(m);
58
+ }
59
+ else if (rec.type === 'assistant') {
60
+ const m = recordToAssistantMessage(rec);
61
+ if (m)
62
+ messages.push(m);
63
+ }
64
+ // 其它 type(system / progress / file-history-snapshot / queue-operation /
65
+ // attachment / last-prompt)不展示
66
+ }
67
+ return messages;
68
+ }
69
+ /**
70
+ * 摘要(list() 用)。复用 parseJsonlMessages 保持计数与真实可展示条数一致 ——
71
+ * 大文件下会读全文,但解析本身仍是 O(n) 行扫,对 list 的 SLA 足够。
72
+ */
73
+ export function summarizeJsonl(cwd, sessionId) {
74
+ const path = claudeJsonlFile(cwd, sessionId);
75
+ if (!existsSync(path)) {
76
+ return { exists: false, messageCount: 0, lastMessageAt: null, firstUserText: null, fileMTime: null };
77
+ }
78
+ let mtime = null;
79
+ try {
80
+ mtime = statSync(path).mtime.toISOString();
81
+ }
82
+ catch {
83
+ /* ignore */
84
+ }
85
+ const msgs = parseJsonlMessages(cwd, sessionId);
86
+ const lastTs = msgs.length > 0 ? msgs[msgs.length - 1].ts : null;
87
+ let firstUser = null;
88
+ for (const m of msgs) {
89
+ if (m.role === 'user' && m.content.trim()) {
90
+ firstUser = m.content.trim().slice(0, 120);
91
+ break;
92
+ }
93
+ }
94
+ return {
95
+ exists: true,
96
+ messageCount: msgs.length,
97
+ lastMessageAt: lastTs,
98
+ firstUserText: firstUser,
99
+ fileMTime: mtime,
100
+ };
101
+ }
102
+ // ─── 内部转换 ─────────────────────────────────────────────────────────────
103
+ function recordToUserMessage(rec) {
104
+ const content = rec.message?.content;
105
+ if (content == null)
106
+ return null;
107
+ let text = '';
108
+ if (typeof content === 'string') {
109
+ text = content;
110
+ }
111
+ else if (Array.isArray(content)) {
112
+ // user content array 通常是 tool_result + text 混合 —— 只展示 text 块
113
+ for (const blk of content) {
114
+ if (blk && typeof blk === 'object' && blk.type === 'text') {
115
+ text += blk.text;
116
+ }
117
+ }
118
+ // 全是 tool_result 没有 text 的话,跳过这条记录(避免空气泡)
119
+ if (text === '')
120
+ return null;
121
+ }
122
+ // 过滤 Claude CLI 内部包装:slash 命令、stdout 注入、caveat 提示
123
+ if (isClaudeMetaText(text))
124
+ return null;
125
+ return {
126
+ id: rec.uuid ?? cryptoRandomId(),
127
+ role: 'user',
128
+ content: text,
129
+ ts: rec.timestamp ?? new Date().toISOString(),
130
+ };
131
+ }
132
+ /** 识别 Claude CLI 自动包装的非用户文本,避免污染 chat 视图 */
133
+ function isClaudeMetaText(text) {
134
+ const t = text.trim();
135
+ if (t === '')
136
+ return true;
137
+ if (t.startsWith('<command-name>'))
138
+ return true;
139
+ if (t.startsWith('<local-command-stdout>'))
140
+ return true;
141
+ if (t.startsWith('<local-command-stderr>'))
142
+ return true;
143
+ if (t.startsWith('<local-command-caveat>'))
144
+ return true;
145
+ if (t.startsWith('<system-reminder>'))
146
+ return true;
147
+ return false;
148
+ }
149
+ function recordToAssistantMessage(rec) {
150
+ const blocks = rec.message?.content;
151
+ if (!Array.isArray(blocks))
152
+ return null;
153
+ let text = '';
154
+ const uiBlocks = [];
155
+ for (const blk of blocks) {
156
+ if (!blk || typeof blk !== 'object')
157
+ continue;
158
+ if (blk.type === 'text') {
159
+ text += blk.text;
160
+ uiBlocks.push({ type: 'text', text: blk.text });
161
+ }
162
+ else if (blk.type === 'tool_use') {
163
+ uiBlocks.push({
164
+ type: 'tool_use',
165
+ id: blk.id,
166
+ title: blk.name,
167
+ kind: blk.name,
168
+ status: 'complete',
169
+ });
170
+ }
171
+ // thinking 块刻意不展示(签名+原文较长,后端没必要给前端)
172
+ }
173
+ if (text === '' && uiBlocks.length === 0)
174
+ return null;
175
+ return {
176
+ id: rec.uuid ?? cryptoRandomId(),
177
+ role: 'assistant',
178
+ content: text,
179
+ blocks: uiBlocks.length > 0 ? uiBlocks : undefined,
180
+ ts: rec.timestamp ?? new Date().toISOString(),
181
+ };
182
+ }
183
+ function cryptoRandomId() {
184
+ // jsonl 必有 uuid;这里只是兜底,避免 strict TS 抱怨
185
+ return `gen-${Math.random().toString(36).slice(2, 12)}`;
186
+ }
187
+ //# sourceMappingURL=claudeJsonl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claudeJsonl.js","sourceRoot":"","sources":["../../src/core/claudeJsonl.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,10 @@ export interface ChatSession {
31
31
  * fall back to daemon's startup cwd (legacy behavior).
32
32
  */
33
33
  readonly cwd?: string | null;
34
+ /** v0.51.12:会话来源(同 ChatSessionSummary) */
35
+ readonly source?: 'console' | 'cli';
36
+ /** v0.51.12:CLI 会话只读 */
37
+ readonly readonly?: boolean;
34
38
  }
35
39
  export interface ChatSessionSummary {
36
40
  readonly id: string;
@@ -40,6 +44,19 @@ export interface ChatSessionSummary {
40
44
  readonly project: string | null;
41
45
  readonly messageCount: number;
42
46
  readonly cwd?: string | null;
47
+ /**
48
+ * v0.51.12:会话来源。
49
+ * - `console`:Console /chat 页创建的会话,持久化在 ~/.coral/chat-sessions/<id>.json
50
+ * - `cli`:`sps agent --chat` / `sps agent --name` 在 daemon 里建的会话,
51
+ * 历史从 Claude CLI 的 ~/.claude/projects/<cwd>/<sessionId>.jsonl 读
52
+ */
53
+ readonly source?: 'console' | 'cli';
54
+ /** v0.51.12:CLI 会话独有的 daemon slot 名(id 也等于此值),用于路由消息 */
55
+ readonly slot?: string;
56
+ /** v0.51.12:CLI 会话当前的 daemon 状态(offline / busy / ready / ...) */
57
+ readonly sessionState?: string | null;
58
+ /** v0.51.12:CLI 会话目前不能从 Console 续聊(只读历史),Console 会话可写 */
59
+ readonly readonly?: boolean;
43
60
  }
44
61
  export interface CreateSessionInput {
45
62
  title?: string;
@@ -63,6 +80,8 @@ export declare class ChatService {
63
80
  private readonly deps;
64
81
  constructor(deps: ChatServiceDeps);
65
82
  list(): Promise<Result<ChatSessionSummary[], DomainError>>;
83
+ /** 读 daemon state.json 取 sessions —— 文件不存在或损坏返回空数组 */
84
+ private readDaemonSessions;
66
85
  create(input?: CreateSessionInput): Promise<Result<ChatSessionSummary, DomainError>>;
67
86
  get(id: string): Promise<Result<ChatSession, DomainError>>;
68
87
  /** 返回 since 之后的消息(供 SSE 重连补偿)。since 缺省返回全部。 */
@@ -1 +1 @@
1
- {"version":3,"file":"ChatService.d.ts","sourceRoot":"","sources":["../../src/services/ChatService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatService.d.ts","sourceRoot":"","sources":["../../src/services/ChatService.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@
15
15
  */
16
16
  import { randomUUID } from 'node:crypto';
17
17
  import { resolve } from 'node:path';
18
+ import { resolveSessionPaths } from '../core/paths.js';
19
+ import { jsonlExists, parseJsonlMessages, summarizeJsonl, } from '../core/claudeJsonl.js';
18
20
  import { domainError } from '../shared/errors.js';
19
21
  import { err, ok } from '../shared/result.js';
20
22
  import { chatSessionsDir } from '../shared/runtimePaths.js';
@@ -24,28 +26,54 @@ export class ChatService {
24
26
  this.deps = deps;
25
27
  }
26
28
  async list() {
27
- const dir = chatSessionsDir();
28
- if (!this.deps.fs.exists(dir))
29
- return ok([]);
30
- let files;
31
- try {
32
- files = this.deps.fs.readDir(dir).filter((e) => e.isFile && e.name.endsWith('.json'));
33
- }
34
- catch (cause) {
35
- return err(domainError('internal', 'CHAT_LIST_FAIL', '会话列表读取失败', { cause }));
36
- }
37
29
  const summaries = [];
38
- for (const entry of files) {
39
- const path = resolve(dir, entry.name);
30
+ // 1) Console 会话 —— ~/.coral/chat-sessions/<id>.json
31
+ const dir = chatSessionsDir();
32
+ const consoleIds = new Set();
33
+ if (this.deps.fs.exists(dir)) {
34
+ let files;
40
35
  try {
41
- const raw = this.deps.fs.readFile(path);
42
- const session = JSON.parse(raw);
43
- summaries.push(this.summarize(session));
36
+ files = this.deps.fs.readDir(dir).filter((e) => e.isFile && e.name.endsWith('.json'));
44
37
  }
45
- catch {
46
- /* 跳过坏 session */
38
+ catch (cause) {
39
+ return err(domainError('internal', 'CHAT_LIST_FAIL', '会话列表读取失败', { cause }));
40
+ }
41
+ for (const entry of files) {
42
+ const path = resolve(dir, entry.name);
43
+ try {
44
+ const raw = this.deps.fs.readFile(path);
45
+ const session = JSON.parse(raw);
46
+ summaries.push({ ...this.summarize(session), source: 'console', readonly: false });
47
+ consoleIds.add(session.id);
48
+ }
49
+ catch {
50
+ /* 跳过坏 session */
51
+ }
47
52
  }
48
53
  }
54
+ // 2) CLI 会话 —— daemon state.json + Claude jsonl 历史
55
+ // 跳过 Console 用 `session-chat-<consoleId>` 占的 slot,避免重复
56
+ for (const cli of this.readDaemonSessions()) {
57
+ const consoleId = stripChatPrefix(cli.slot);
58
+ if (consoleId && consoleIds.has(consoleId))
59
+ continue;
60
+ if (!jsonlExists(cli.cwd, cli.sessionId))
61
+ continue;
62
+ const summary = summarizeJsonl(cli.cwd, cli.sessionId);
63
+ summaries.push({
64
+ id: cli.slot,
65
+ createdAt: cli.createdAt,
66
+ lastMessageAt: summary.lastMessageAt ?? cli.lastSeenAt ?? cli.updatedAt,
67
+ title: summary.firstUserText || stripSessionPrefix(cli.slot),
68
+ project: null,
69
+ messageCount: summary.messageCount,
70
+ cwd: cli.cwd,
71
+ source: 'cli',
72
+ slot: cli.slot,
73
+ sessionState: cli.sessionState,
74
+ readonly: true,
75
+ });
76
+ }
49
77
  summaries.sort((a, b) => {
50
78
  const ta = a.lastMessageAt ?? a.createdAt;
51
79
  const tb = b.lastMessageAt ?? b.createdAt;
@@ -53,6 +81,20 @@ export class ChatService {
53
81
  });
54
82
  return ok(summaries);
55
83
  }
84
+ /** 读 daemon state.json 取 sessions —— 文件不存在或损坏返回空数组 */
85
+ readDaemonSessions() {
86
+ const path = resolveSessionPaths().stateFile;
87
+ if (!this.deps.fs.exists(path))
88
+ return [];
89
+ try {
90
+ const raw = this.deps.fs.readFile(path);
91
+ const parsed = JSON.parse(raw);
92
+ return Object.values(parsed.sessions ?? {});
93
+ }
94
+ catch {
95
+ return [];
96
+ }
97
+ }
56
98
  async create(input = {}) {
57
99
  // v0.51.4: validate cwd if provided
58
100
  let cwd = null;
@@ -85,17 +127,39 @@ export class ChatService {
85
127
  async get(id) {
86
128
  if (!isValidSessionId(id))
87
129
  return err(invalidId());
130
+ // 1) Console session —— chat-sessions/<id>.json
88
131
  const path = this.sessionPath(id);
89
- if (!this.deps.fs.exists(path)) {
90
- return err(domainError('not-found', 'CHAT_SESSION_NOT_FOUND', '会话不存在'));
91
- }
92
- try {
93
- const raw = this.deps.fs.readFile(path);
94
- return ok(JSON.parse(raw));
132
+ if (this.deps.fs.exists(path)) {
133
+ try {
134
+ const raw = this.deps.fs.readFile(path);
135
+ return ok(JSON.parse(raw));
136
+ }
137
+ catch (cause) {
138
+ return err(domainError('internal', 'CHAT_READ_FAIL', '会话读取失败', { cause }));
139
+ }
95
140
  }
96
- catch (cause) {
97
- return err(domainError('internal', 'CHAT_READ_FAIL', '会话读取失败', { cause }));
141
+ // 2) CLI session —— id 是 daemon slot 名,从 jsonl 实时解析
142
+ if (id.startsWith('session-')) {
143
+ const cli = this.readDaemonSessions().find((s) => s.slot === id);
144
+ if (cli && jsonlExists(cli.cwd, cli.sessionId)) {
145
+ const messages = parseJsonlMessages(cli.cwd, cli.sessionId);
146
+ const lastTs = messages.length > 0 ? messages[messages.length - 1].ts : null;
147
+ const firstUser = messages.find((m) => m.role === 'user' && m.content.trim());
148
+ return ok({
149
+ id,
150
+ createdAt: cli.createdAt,
151
+ lastMessageAt: lastTs ?? cli.lastSeenAt ?? cli.updatedAt,
152
+ title: firstUser?.content.trim().slice(0, 120) || stripSessionPrefix(id),
153
+ project: null,
154
+ messageCount: messages.length,
155
+ messages,
156
+ cwd: cli.cwd,
157
+ source: 'cli',
158
+ readonly: true,
159
+ });
160
+ }
98
161
  }
162
+ return err(domainError('not-found', 'CHAT_SESSION_NOT_FOUND', '会话不存在'));
99
163
  }
100
164
  /** 返回 since 之后的消息(供 SSE 重连补偿)。since 缺省返回全部。 */
101
165
  async getMessages(id, since) {
@@ -109,6 +173,12 @@ export class ChatService {
109
173
  async delete(id) {
110
174
  if (!isValidSessionId(id))
111
175
  return err(invalidId());
176
+ // CLI 会话只读:jsonl 是 Claude CLI 自己的存档,Console 不该删。
177
+ if (id.startsWith('session-')) {
178
+ return err(domainError('validation', 'CHAT_CLI_READ_ONLY', 'CLI 会话只读 —— 用 sps agent close --name <名称> 来关闭', {
179
+ details: { id },
180
+ }));
181
+ }
112
182
  const path = this.sessionPath(id);
113
183
  if (this.deps.fs.exists(path)) {
114
184
  try {
@@ -132,6 +202,9 @@ export class ChatService {
132
202
  async interrupt(id) {
133
203
  if (!isValidSessionId(id))
134
204
  return err(invalidId());
205
+ if (id.startsWith('session-')) {
206
+ return err(domainError('validation', 'CHAT_CLI_READ_ONLY', 'CLI 会话只读,无法从 Console 中断'));
207
+ }
135
208
  if (!this.deps.executor) {
136
209
  return err(domainError('internal', 'EXECUTOR_MISSING', 'ChatExecutor 未注入'));
137
210
  }
@@ -160,7 +233,16 @@ export class ChatService {
160
233
  }
161
234
  }
162
235
  function isValidSessionId(id) {
163
- return typeof id === 'string' && /^[a-zA-Z0-9-]+$/.test(id);
236
+ return typeof id === 'string' && /^[a-zA-Z0-9_-]+$/.test(id);
237
+ }
238
+ /** Console 占的 daemon slot 形如 `session-chat-<consoleId>` —— 抽出 consoleId 用于去重 */
239
+ function stripChatPrefix(slot) {
240
+ const m = /^session-chat-(.+)$/.exec(slot);
241
+ return m ? m[1] : null;
242
+ }
243
+ /** `session-foo` → `foo`,给 CLI 会话提供个简短 fallback title */
244
+ function stripSessionPrefix(slot) {
245
+ return slot.replace(/^session-/, '');
164
246
  }
165
247
  function invalidId() {
166
248
  return domainError('validation', 'INVALID_SESSION_ID', 'session id 非法');
@@ -1 +1 @@
1
- {"version":3,"file":"ChatService.js","sourceRoot":"","sources":["../../src/services/ChatService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatService.js","sourceRoot":"","sources":["../../src/services/ChatService.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,14 @@ export declare function chatSessionsDir(): string;
16
16
  /** $HOME/.coral/chat-attachments —— chat 附件上传目录(per-session 子目录) */
17
17
  export declare function chatAttachmentsDir(): string;
18
18
  export declare function chatAttachmentsDirFor(sessionId: string): string;
19
+ /** $HOME/.claude/projects —— Claude CLI 的会话历史根目录 */
20
+ export declare function claudeProjectsDir(): string;
21
+ /** 把 cwd 编码为 Claude 用的目录名('/' → '-',盘符同样处理)*/
22
+ export declare function encodeClaudeProjectDir(cwd: string): string;
23
+ /** $HOME/.claude/projects/<encoded-cwd> —— 单个 cwd 的 jsonl 目录 */
24
+ export declare function claudeProjectDir(cwd: string): string;
25
+ /** $HOME/.claude/projects/<encoded-cwd>/<sessionId>.jsonl —— 单个会话的历史文件 */
26
+ export declare function claudeJsonlFile(cwd: string, sessionId: string): string;
19
27
  /** $HOME/.coral/skills —— user-level skills */
20
28
  export declare function userSkillsDir(): string;
21
29
  /** $HOME/.coral/projects —— 项目根目录 */
@@ -1 +1 @@
1
- {"version":3,"file":"runtimePaths.d.ts","sourceRoot":"","sources":["../../src/shared/runtimePaths.ts"],"names":[],"mappings":"AAuCA;;;GAGG;AACH,wBAAgB,IAAI,IAAI,MAAM,CAM7B;AAED,gCAAgC;AAChC,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,kDAAkD;AAClD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,mCAAmC;AACnC,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,iDAAiD;AACjD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,+CAA+C;AAC/C,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,qCAAqC;AACrC,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAID,mCAAmC;AACnC,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,2CAA2C;AAC3C,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,2EAA2E;AAC3E,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAMD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,QAA6C,CAAC;AAEjF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKtE;AAID,yCAAyC;AACzC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGpE;AAID,wCAAwC;AACxC,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,4CAA4C;AAC5C,eAAO,MAAM,qBAAqB,QAAsC,CAAC;AAEzE,yCAAyC;AACzC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAID,6CAA6C;AAC7C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,yEAAyE;AACzE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,8BAA8B;AAC9B,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,sCAAsC;AACtC,eAAO,MAAM,kBAAkB,QAAwC,CAAC"}
1
+ {"version":3,"file":"runtimePaths.d.ts","sourceRoot":"","sources":["../../src/shared/runtimePaths.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,28 @@ export function chatAttachmentsDir() {
73
73
  export function chatAttachmentsDirFor(sessionId) {
74
74
  return resolve(chatAttachmentsDir(), sessionId);
75
75
  }
76
+ // ─── Claude CLI 自带的 jsonl 历史 ──────────────────────────────────────
77
+ // 路径规则(v0.51.12 起 SPS 直接读,给 Console 展示 CLI 创建的会话历史):
78
+ // $HOME/.claude/projects/<encoded-cwd>/<sessionId>.jsonl
79
+ // encoded-cwd = cwd 全部 '/' 替换为 '-'(开头也保留 '-')
80
+ // 例:/home/coral/jarvis-skills → -home-coral-jarvis-skills
81
+ // Windows 兼容:盘符后的 ':'/'\\' 也按 '-' 替换(Claude 自身的规则)。
82
+ /** $HOME/.claude/projects —— Claude CLI 的会话历史根目录 */
83
+ export function claudeProjectsDir() {
84
+ return resolve(home(), '.claude', 'projects');
85
+ }
86
+ /** 把 cwd 编码为 Claude 用的目录名('/' → '-',盘符同样处理)*/
87
+ export function encodeClaudeProjectDir(cwd) {
88
+ return cwd.replace(/[/\\:]/g, '-');
89
+ }
90
+ /** $HOME/.claude/projects/<encoded-cwd> —— 单个 cwd 的 jsonl 目录 */
91
+ export function claudeProjectDir(cwd) {
92
+ return resolve(claudeProjectsDir(), encodeClaudeProjectDir(cwd));
93
+ }
94
+ /** $HOME/.claude/projects/<encoded-cwd>/<sessionId>.jsonl —— 单个会话的历史文件 */
95
+ export function claudeJsonlFile(cwd, sessionId) {
96
+ return resolve(claudeProjectDir(cwd), `${sessionId}.jsonl`);
97
+ }
76
98
  /** $HOME/.coral/skills —— user-level skills */
77
99
  export function userSkillsDir() {
78
100
  return resolve(coralRoot(), 'skills');
@@ -1 +1 @@
1
- {"version":3,"file":"runtimePaths.js","sourceRoot":"","sources":["../../src/shared/runtimePaths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimePaths.js","sourceRoot":"","sources":["../../src/shared/runtimePaths.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coralai/sps-cli",
3
- "version": "0.51.11",
3
+ "version": "0.51.12",
4
4
  "description": "SPS CLI — AI-driven development pipeline orchestrator",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",