botmux 2.86.0 → 2.87.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +26 -0
- package/README.md +26 -0
- package/dist/adapters/backend/herdr-backend.d.ts.map +1 -1
- package/dist/adapters/backend/herdr-backend.js +12 -1
- package/dist/adapters/backend/herdr-backend.js.map +1 -1
- package/dist/adapters/backend/pty-backend.d.ts.map +1 -1
- package/dist/adapters/backend/pty-backend.js +4 -1
- package/dist/adapters/backend/pty-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts +1 -1
- package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
- package/dist/adapters/backend/tmux-backend.js +22 -9
- package/dist/adapters/backend/tmux-backend.js.map +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js +1 -1
- package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
- package/dist/adapters/backend/types.d.ts +9 -0
- package/dist/adapters/backend/types.d.ts.map +1 -1
- package/dist/adapters/backend/types.js.map +1 -1
- package/dist/adapters/backend/zellij-backend.js +1 -1
- package/dist/adapters/backend/zellij-backend.js.map +1 -1
- package/dist/adapters/cli/codex.d.ts.map +1 -1
- package/dist/adapters/cli/codex.js +8 -5
- package/dist/adapters/cli/codex.js.map +1 -1
- package/dist/adapters/cli/shared-hints.d.ts +2 -1
- package/dist/adapters/cli/shared-hints.d.ts.map +1 -1
- package/dist/adapters/cli/shared-hints.js +25 -3
- package/dist/adapters/cli/shared-hints.js.map +1 -1
- package/dist/bot-registry.d.ts +10 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +6 -0
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +362 -16
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +6 -4
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
- package/dist/core/dashboard-ipc-server.js +45 -0
- package/dist/core/dashboard-ipc-server.js.map +1 -1
- package/dist/core/maintenance.d.ts +18 -0
- package/dist/core/maintenance.d.ts.map +1 -1
- package/dist/core/maintenance.js +58 -30
- package/dist/core/maintenance.js.map +1 -1
- package/dist/core/per-bot-env.d.ts +38 -0
- package/dist/core/per-bot-env.d.ts.map +1 -0
- package/dist/core/per-bot-env.js +79 -0
- package/dist/core/per-bot-env.js.map +1 -0
- package/dist/core/session-manager.d.ts +3 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +70 -6
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/skills/discovery.d.ts +7 -0
- package/dist/core/skills/discovery.d.ts.map +1 -1
- package/dist/core/skills/discovery.js +51 -0
- package/dist/core/skills/discovery.js.map +1 -1
- package/dist/core/trigger-session.d.ts.map +1 -1
- package/dist/core/trigger-session.js +5 -2
- package/dist/core/trigger-session.js.map +1 -1
- package/dist/core/update-check.d.ts +67 -0
- package/dist/core/update-check.d.ts.map +1 -0
- package/dist/core/update-check.js +159 -0
- package/dist/core/update-check.js.map +1 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +4 -0
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +29 -6
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +1 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +1 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/skill-install-request.d.ts +10 -0
- package/dist/dashboard/skill-install-request.d.ts.map +1 -1
- package/dist/dashboard/skill-install-request.js +17 -0
- package/dist/dashboard/skill-install-request.js.map +1 -1
- package/dist/dashboard/web/app.d.ts.map +1 -1
- package/dist/dashboard/web/app.js +29 -1
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js +62 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +128 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/settings.d.ts.map +1 -1
- package/dist/dashboard/web/settings.js +289 -0
- package/dist/dashboard/web/settings.js.map +1 -1
- package/dist/dashboard/web/skills.d.ts.map +1 -1
- package/dist/dashboard/web/skills.js +183 -10
- package/dist/dashboard/web/skills.js.map +1 -1
- package/dist/dashboard/web/whiteboards.d.ts +2 -0
- package/dist/dashboard/web/whiteboards.d.ts.map +1 -0
- package/dist/dashboard/web/whiteboards.js +267 -0
- package/dist/dashboard/web/whiteboards.js.map +1 -0
- package/dist/dashboard-web/app.js +774 -613
- package/dist/dashboard-web/index.html +1 -0
- package/dist/dashboard-web/style.css +271 -1
- package/dist/dashboard.js +259 -3
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +6 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +12 -0
- package/dist/global-config.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +7 -3
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/services/bot-config-store.d.ts.map +1 -1
- package/dist/services/bot-config-store.js +19 -0
- package/dist/services/bot-config-store.js.map +1 -1
- package/dist/services/resumable-session-discovery.d.ts.map +1 -1
- package/dist/services/resumable-session-discovery.js +21 -4
- package/dist/services/resumable-session-discovery.js.map +1 -1
- package/dist/services/skill-registry-store.d.ts +1 -0
- package/dist/services/skill-registry-store.d.ts.map +1 -1
- package/dist/services/skill-registry-store.js +32 -0
- package/dist/services/skill-registry-store.js.map +1 -1
- package/dist/services/whiteboard-store.d.ts +67 -0
- package/dist/services/whiteboard-store.d.ts.map +1 -0
- package/dist/services/whiteboard-store.js +450 -0
- package/dist/services/whiteboard-store.js.map +1 -0
- package/dist/setup/bot-config-editor.d.ts +8 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +9 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +118 -0
- package/dist/skills/definitions.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/install-diagnostics.d.ts +52 -0
- package/dist/utils/install-diagnostics.d.ts.map +1 -0
- package/dist/utils/install-diagnostics.js +155 -0
- package/dist/utils/install-diagnostics.js.map +1 -0
- package/dist/utils/install-info.d.ts +4 -0
- package/dist/utils/install-info.d.ts.map +1 -1
- package/dist/utils/install-info.js +6 -0
- package/dist/utils/install-info.js.map +1 -1
- package/dist/worker.js +12 -0
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
|
@@ -52,6 +52,38 @@ export function installLocalSkill(dir, opts) {
|
|
|
52
52
|
writeSkillRegistry(registry);
|
|
53
53
|
return registry.skills[pkg.name];
|
|
54
54
|
}
|
|
55
|
+
export function installLocalSkillLinks(dirs) {
|
|
56
|
+
const uniqueDirs = [...new Set(dirs.map((dir) => resolve(dir)))];
|
|
57
|
+
// Collapse by skill NAME (last-wins), not just by path: the registry is
|
|
58
|
+
// keyed by name, and the discovery dialog can surface the same skill name
|
|
59
|
+
// under multiple CLI roots (e.g. botmux's own builtin skills are installed
|
|
60
|
+
// into every CLI's skillsDir). Without this, two distinct dirs with the same
|
|
61
|
+
// name would write twice and the returned array would carry a duplicate.
|
|
62
|
+
const byName = new Map();
|
|
63
|
+
for (const sourceDir of uniqueDirs) {
|
|
64
|
+
let pkg;
|
|
65
|
+
try {
|
|
66
|
+
// id defaults to name for a local-link (rootDir === sourceDir), so a
|
|
67
|
+
// single load is sufficient — no provisional re-load needed.
|
|
68
|
+
pkg = loadSkillPackage(sourceDir, { source: { type: 'local-link', path: sourceDir } });
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
// Name the offending dir so an opaque missing_skill_md/invalid_skill_name
|
|
72
|
+
// (e.g. a SKILL.md removed between discovery and registration) is actionable.
|
|
73
|
+
throw new Error(`local_link_failed:${sourceDir}:${err?.message ?? String(err)}`);
|
|
74
|
+
}
|
|
75
|
+
byName.set(pkg.name, pkg);
|
|
76
|
+
}
|
|
77
|
+
const now = new Date().toISOString();
|
|
78
|
+
const registry = readSkillRegistry();
|
|
79
|
+
const installed = [];
|
|
80
|
+
for (const pkg of byName.values()) {
|
|
81
|
+
registry.skills[pkg.name] = { ...pkg, installedAt: now, updatedAt: now };
|
|
82
|
+
installed.push(registry.skills[pkg.name]);
|
|
83
|
+
}
|
|
84
|
+
writeSkillRegistry(registry);
|
|
85
|
+
return installed;
|
|
86
|
+
}
|
|
55
87
|
function sourceId(url) {
|
|
56
88
|
return createHash('sha256').update(url).digest('hex').slice(0, 16);
|
|
57
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-registry-store.js","sourceRoot":"","sources":["../../src/services/skill-registry-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skill-registry-store.js","sourceRoot":"","sources":["../../src/services/skill-registry-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export type WhiteboardScope = 'chat' | 'project' | 'custom';
|
|
2
|
+
export interface WhiteboardMeta {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
scope: WhiteboardScope;
|
|
6
|
+
larkAppId?: string;
|
|
7
|
+
chatId?: string;
|
|
8
|
+
workingDir?: string;
|
|
9
|
+
createdFromSessionId?: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
updatedAt: string;
|
|
12
|
+
archived?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface WhiteboardBindingInput {
|
|
15
|
+
larkAppId?: string;
|
|
16
|
+
chatId?: string;
|
|
17
|
+
workingDir?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface EnsureWhiteboardInput extends WhiteboardBindingInput {
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
title?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface WhiteboardSummary extends WhiteboardMeta {
|
|
24
|
+
path: string;
|
|
25
|
+
preview: string;
|
|
26
|
+
logCount: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function whiteboardEnabled(): boolean;
|
|
29
|
+
export declare function whiteboardsRoot(): string;
|
|
30
|
+
export declare function whiteboardBoardPath(id: string): string;
|
|
31
|
+
export declare function whiteboardLogPath(id: string): string;
|
|
32
|
+
export declare function normalizeWhiteboardWorkingDir(workingDir?: string): string | undefined;
|
|
33
|
+
export declare function whiteboardBindingKey(input: WhiteboardBindingInput): string;
|
|
34
|
+
export declare function getWhiteboard(id: string): WhiteboardMeta | undefined;
|
|
35
|
+
export declare function ensureDefaultWhiteboard(input: EnsureWhiteboardInput): WhiteboardMeta;
|
|
36
|
+
export declare function createWhiteboard(input: EnsureWhiteboardInput & {
|
|
37
|
+
id?: string;
|
|
38
|
+
scope?: WhiteboardScope;
|
|
39
|
+
}): WhiteboardMeta;
|
|
40
|
+
export declare function listWhiteboards(): WhiteboardSummary[];
|
|
41
|
+
export declare function readWhiteboard(id: string, opts?: {
|
|
42
|
+
allowDisabled?: boolean;
|
|
43
|
+
missingAsEmpty?: boolean;
|
|
44
|
+
}): string;
|
|
45
|
+
export declare function writeWhiteboard(id: string, content: string, opts?: {
|
|
46
|
+
actor?: string;
|
|
47
|
+
kind?: string;
|
|
48
|
+
expectedUpdatedAt?: string;
|
|
49
|
+
}): WhiteboardMeta;
|
|
50
|
+
export declare function appendLog(id: string, entry: {
|
|
51
|
+
kind: string;
|
|
52
|
+
actor?: string;
|
|
53
|
+
to?: string;
|
|
54
|
+
content?: string;
|
|
55
|
+
}): void;
|
|
56
|
+
export declare function deleteWhiteboard(id: string): {
|
|
57
|
+
ok: true;
|
|
58
|
+
id: string;
|
|
59
|
+
clearedSessions: number;
|
|
60
|
+
};
|
|
61
|
+
export declare function whiteboardPath(id: string): {
|
|
62
|
+
dir: string;
|
|
63
|
+
board: string;
|
|
64
|
+
log: string;
|
|
65
|
+
meta: string;
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=whiteboard-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whiteboard-store.d.ts","sourceRoot":"","sources":["../../src/services/whiteboard-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, resolve } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { randomUUID } from 'node:crypto';
|
|
5
|
+
import { config } from '../config.js';
|
|
6
|
+
import { readGlobalConfig } from '../global-config.js';
|
|
7
|
+
import { atomicWriteFileSync } from '../utils/atomic-write.js';
|
|
8
|
+
import { withFileLockSync } from '../utils/file-lock.js';
|
|
9
|
+
const INDEX_VERSION = 1;
|
|
10
|
+
const DEFAULT_LOG_MAX_BYTES = 5 * 1024 * 1024;
|
|
11
|
+
const LOG_ARCHIVE_COUNT = 3;
|
|
12
|
+
function positiveEnvInt(name, fallback) {
|
|
13
|
+
const n = Number(process.env[name]);
|
|
14
|
+
return Number.isInteger(n) && n > 0 ? n : fallback;
|
|
15
|
+
}
|
|
16
|
+
function whiteboardLogMaxBytes() {
|
|
17
|
+
return positiveEnvInt('BOTMUX_WHITEBOARD_LOG_MAX_BYTES', DEFAULT_LOG_MAX_BYTES);
|
|
18
|
+
}
|
|
19
|
+
export function whiteboardEnabled() {
|
|
20
|
+
return readGlobalConfig().whiteboard?.enabled === true;
|
|
21
|
+
}
|
|
22
|
+
export function whiteboardsRoot() {
|
|
23
|
+
return join(config.session.dataDir, 'whiteboards');
|
|
24
|
+
}
|
|
25
|
+
function indexPath() {
|
|
26
|
+
return join(whiteboardsRoot(), 'index.json');
|
|
27
|
+
}
|
|
28
|
+
function boardDir(id) {
|
|
29
|
+
return join(whiteboardsRoot(), id);
|
|
30
|
+
}
|
|
31
|
+
export function whiteboardBoardPath(id) {
|
|
32
|
+
return join(boardDir(id), 'board.md');
|
|
33
|
+
}
|
|
34
|
+
function metaPath(id) {
|
|
35
|
+
return join(boardDir(id), 'meta.json');
|
|
36
|
+
}
|
|
37
|
+
export function whiteboardLogPath(id) {
|
|
38
|
+
return join(boardDir(id), 'log.jsonl');
|
|
39
|
+
}
|
|
40
|
+
function ensureRoot() {
|
|
41
|
+
mkdirSync(whiteboardsRoot(), { recursive: true });
|
|
42
|
+
}
|
|
43
|
+
function emptyIndex() {
|
|
44
|
+
return { version: INDEX_VERSION, boards: {}, bindings: {} };
|
|
45
|
+
}
|
|
46
|
+
function readIndex() {
|
|
47
|
+
const fp = indexPath();
|
|
48
|
+
if (!existsSync(fp))
|
|
49
|
+
return emptyIndex();
|
|
50
|
+
try {
|
|
51
|
+
const parsed = JSON.parse(readFileSync(fp, 'utf-8'));
|
|
52
|
+
return {
|
|
53
|
+
version: INDEX_VERSION,
|
|
54
|
+
boards: parsed.boards && typeof parsed.boards === 'object' ? parsed.boards : {},
|
|
55
|
+
bindings: parsed.bindings && typeof parsed.bindings === 'object' ? parsed.bindings : {},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return emptyIndex();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function writeIndex(index) {
|
|
63
|
+
ensureRoot();
|
|
64
|
+
atomicWriteFileSync(indexPath(), JSON.stringify(index, null, 2) + '\n');
|
|
65
|
+
}
|
|
66
|
+
function sleepSync(ms) {
|
|
67
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
68
|
+
}
|
|
69
|
+
// Locks reuse the cross-process file-lock primitive (utils/file-lock.ts): it
|
|
70
|
+
// writes the holder PID + acquire time and stale-breaks a lock whose holder
|
|
71
|
+
// PID is dead (atomic rename — exactly one waiter wins). This is the recovery
|
|
72
|
+
// the previous mkdir-based `withDirLock` lacked: a daemon killed by OOM/SIGKILL
|
|
73
|
+
// mid-section used to leave a `.index.lock` dir behind that blocked every
|
|
74
|
+
// subsequent caller for the full timeout. Each lock targets a real file path
|
|
75
|
+
// so the `.lock` sibling sits beside it (index.json.lock / board.md.lock /
|
|
76
|
+
// log.jsonl.lock) and is cleaned up in the holder's `finally`.
|
|
77
|
+
const INDEX_LOCK_TIMEOUT_MS = 5_000;
|
|
78
|
+
const BOARD_LOCK_TIMEOUT_MS = 10_000;
|
|
79
|
+
const LOG_LOCK_TIMEOUT_MS = 5_000;
|
|
80
|
+
function withIndexLock(fn) {
|
|
81
|
+
ensureRoot();
|
|
82
|
+
return withFileLockSync(indexPath(), fn, { maxWaitMs: INDEX_LOCK_TIMEOUT_MS });
|
|
83
|
+
}
|
|
84
|
+
function withLogLock(id, fn) {
|
|
85
|
+
mkdirSync(boardDir(id), { recursive: true });
|
|
86
|
+
return withFileLockSync(whiteboardLogPath(id), fn, { maxWaitMs: LOG_LOCK_TIMEOUT_MS });
|
|
87
|
+
}
|
|
88
|
+
// Per-board content lock serializes the read-modify-write of board.md so two
|
|
89
|
+
// agents updating the same shared board can't blind-overwrite each other (the
|
|
90
|
+
// board is a single current-state snapshot shared across the whole chat). The
|
|
91
|
+
// log already had a lock; the board content did not — last writer won silently
|
|
92
|
+
// and the loser's update vanished with no error and no history.
|
|
93
|
+
function withBoardLock(id, fn) {
|
|
94
|
+
mkdirSync(boardDir(id), { recursive: true });
|
|
95
|
+
return withFileLockSync(whiteboardBoardPath(id), fn, { maxWaitMs: BOARD_LOCK_TIMEOUT_MS });
|
|
96
|
+
}
|
|
97
|
+
function safeId(id) {
|
|
98
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9_.-]{0,80}$/.test(id))
|
|
99
|
+
throw new Error('invalid_whiteboard_id');
|
|
100
|
+
return id;
|
|
101
|
+
}
|
|
102
|
+
function expandHome(p) {
|
|
103
|
+
if (p === '~')
|
|
104
|
+
return homedir();
|
|
105
|
+
if (p.startsWith('~/'))
|
|
106
|
+
return join(homedir(), p.slice(2));
|
|
107
|
+
return p;
|
|
108
|
+
}
|
|
109
|
+
export function normalizeWhiteboardWorkingDir(workingDir) {
|
|
110
|
+
const raw = workingDir?.trim();
|
|
111
|
+
if (!raw)
|
|
112
|
+
return undefined;
|
|
113
|
+
try {
|
|
114
|
+
return resolve(expandHome(raw));
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return raw;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function whiteboardBindingKey(input) {
|
|
121
|
+
const chat = input.chatId?.trim();
|
|
122
|
+
if (chat)
|
|
123
|
+
return `chat:${chat}:default`;
|
|
124
|
+
const wd = normalizeWhiteboardWorkingDir(input.workingDir) ?? '-';
|
|
125
|
+
return `local:${wd}`;
|
|
126
|
+
}
|
|
127
|
+
/** 初始 board.md 模板:固定中文结构,引导 agent 把白板当作「当前项目的全局上下文
|
|
128
|
+
* 快照」来维护(项目目标 / 组织方式 / 核心方案 / 关键进展 / 下一步),而不是过程
|
|
129
|
+
* 日志或零散备忘录。与 botmux-whiteboard skill 的结构示例保持一致。 */
|
|
130
|
+
const DEFAULT_WHITEBOARD_TEMPLATE = `# 当前状态
|
|
131
|
+
|
|
132
|
+
## 项目目标
|
|
133
|
+
|
|
134
|
+
- ...
|
|
135
|
+
|
|
136
|
+
## 组织方式
|
|
137
|
+
|
|
138
|
+
- ...
|
|
139
|
+
|
|
140
|
+
## 核心方案
|
|
141
|
+
|
|
142
|
+
- ...
|
|
143
|
+
|
|
144
|
+
## 关键进展
|
|
145
|
+
|
|
146
|
+
- ...
|
|
147
|
+
|
|
148
|
+
## 下一步
|
|
149
|
+
|
|
150
|
+
- ...
|
|
151
|
+
`;
|
|
152
|
+
function defaultTitle(input) {
|
|
153
|
+
const wd = normalizeWhiteboardWorkingDir(input.workingDir);
|
|
154
|
+
if (wd)
|
|
155
|
+
return `白板:${wd.split('/').filter(Boolean).pop() ?? wd}`;
|
|
156
|
+
if (input.chatId)
|
|
157
|
+
return `白板:${input.chatId.substring(0, 12)}`;
|
|
158
|
+
return '白板';
|
|
159
|
+
}
|
|
160
|
+
function writeMeta(meta) {
|
|
161
|
+
mkdirSync(dirname(metaPath(meta.id)), { recursive: true });
|
|
162
|
+
atomicWriteFileSync(metaPath(meta.id), JSON.stringify(meta, null, 2) + '\n');
|
|
163
|
+
}
|
|
164
|
+
function syncMetaFromDisk(id, fallback) {
|
|
165
|
+
const fp = metaPath(id);
|
|
166
|
+
if (!existsSync(fp))
|
|
167
|
+
return fallback;
|
|
168
|
+
try {
|
|
169
|
+
const parsed = JSON.parse(readFileSync(fp, 'utf-8'));
|
|
170
|
+
return parsed?.id ? parsed : fallback;
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return fallback;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
export function getWhiteboard(id) {
|
|
177
|
+
const clean = safeId(id);
|
|
178
|
+
const index = readIndex();
|
|
179
|
+
return syncMetaFromDisk(clean, index.boards[clean]);
|
|
180
|
+
}
|
|
181
|
+
export function ensureDefaultWhiteboard(input) {
|
|
182
|
+
if (!whiteboardEnabled())
|
|
183
|
+
throw new Error('whiteboard_disabled');
|
|
184
|
+
return withIndexLock(() => {
|
|
185
|
+
const index = readIndex();
|
|
186
|
+
const key = whiteboardBindingKey(input);
|
|
187
|
+
const existingId = index.bindings[key];
|
|
188
|
+
if (existingId) {
|
|
189
|
+
const existing = syncMetaFromDisk(existingId, index.boards[existingId]);
|
|
190
|
+
if (existing && !existing.archived)
|
|
191
|
+
return existing;
|
|
192
|
+
}
|
|
193
|
+
const now = new Date().toISOString();
|
|
194
|
+
const id = `wb_${randomUUID().replace(/-/g, '').slice(0, 16)}`;
|
|
195
|
+
const normalizedWorkingDir = normalizeWhiteboardWorkingDir(input.workingDir);
|
|
196
|
+
const meta = {
|
|
197
|
+
id,
|
|
198
|
+
title: input.title?.trim() || defaultTitle(input),
|
|
199
|
+
scope: normalizedWorkingDir ? 'project' : 'chat',
|
|
200
|
+
larkAppId: input.larkAppId,
|
|
201
|
+
chatId: input.chatId,
|
|
202
|
+
workingDir: normalizedWorkingDir,
|
|
203
|
+
createdFromSessionId: input.sessionId,
|
|
204
|
+
createdAt: now,
|
|
205
|
+
updatedAt: now,
|
|
206
|
+
};
|
|
207
|
+
mkdirSync(boardDir(id), { recursive: true });
|
|
208
|
+
atomicWriteFileSync(whiteboardBoardPath(id), DEFAULT_WHITEBOARD_TEMPLATE);
|
|
209
|
+
writeFileSync(whiteboardLogPath(id), '', { flag: 'a' });
|
|
210
|
+
writeMeta(meta);
|
|
211
|
+
index.boards[id] = meta;
|
|
212
|
+
index.bindings[key] = id;
|
|
213
|
+
writeIndex(index);
|
|
214
|
+
return meta;
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
export function createWhiteboard(input) {
|
|
218
|
+
if (!whiteboardEnabled())
|
|
219
|
+
throw new Error('whiteboard_disabled');
|
|
220
|
+
return withIndexLock(() => {
|
|
221
|
+
const index = readIndex();
|
|
222
|
+
const id = input.id ? safeId(input.id) : `wb_${randomUUID().replace(/-/g, '').slice(0, 16)}`;
|
|
223
|
+
if (index.boards[id] || existsSync(boardDir(id)))
|
|
224
|
+
throw new Error('whiteboard_exists');
|
|
225
|
+
const now = new Date().toISOString();
|
|
226
|
+
const normalizedWorkingDir = normalizeWhiteboardWorkingDir(input.workingDir);
|
|
227
|
+
const meta = {
|
|
228
|
+
id,
|
|
229
|
+
title: input.title?.trim() || defaultTitle(input),
|
|
230
|
+
scope: input.scope ?? (normalizedWorkingDir ? 'project' : input.chatId ? 'chat' : 'custom'),
|
|
231
|
+
larkAppId: input.larkAppId,
|
|
232
|
+
chatId: input.chatId,
|
|
233
|
+
workingDir: normalizedWorkingDir,
|
|
234
|
+
createdFromSessionId: input.sessionId,
|
|
235
|
+
createdAt: now,
|
|
236
|
+
updatedAt: now,
|
|
237
|
+
};
|
|
238
|
+
mkdirSync(boardDir(id), { recursive: true });
|
|
239
|
+
atomicWriteFileSync(whiteboardBoardPath(id), DEFAULT_WHITEBOARD_TEMPLATE);
|
|
240
|
+
writeFileSync(whiteboardLogPath(id), '', { flag: 'a' });
|
|
241
|
+
writeMeta(meta);
|
|
242
|
+
index.boards[id] = meta;
|
|
243
|
+
writeIndex(index);
|
|
244
|
+
return meta;
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
function touchWhiteboard(id) {
|
|
248
|
+
return withIndexLock(() => {
|
|
249
|
+
const index = readIndex();
|
|
250
|
+
const meta = syncMetaFromDisk(id, index.boards[id]);
|
|
251
|
+
if (!meta)
|
|
252
|
+
throw new Error('whiteboard_not_found');
|
|
253
|
+
meta.updatedAt = new Date().toISOString();
|
|
254
|
+
index.boards[id] = meta;
|
|
255
|
+
writeMeta(meta);
|
|
256
|
+
writeIndex(index);
|
|
257
|
+
return meta;
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
export function listWhiteboards() {
|
|
261
|
+
const index = readIndex();
|
|
262
|
+
const ids = new Set([...Object.keys(index.boards)]);
|
|
263
|
+
const root = whiteboardsRoot();
|
|
264
|
+
try {
|
|
265
|
+
for (const entry of readdirSync(root, { withFileTypes: true })) {
|
|
266
|
+
if (entry.isDirectory() && entry.name !== '.index.lock')
|
|
267
|
+
ids.add(entry.name);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
catch { /* ignore */ }
|
|
271
|
+
const out = [];
|
|
272
|
+
for (const id of ids) {
|
|
273
|
+
const meta = syncMetaFromDisk(id, index.boards[id]);
|
|
274
|
+
if (!meta)
|
|
275
|
+
continue;
|
|
276
|
+
const board = readWhiteboard(id, { allowDisabled: true, missingAsEmpty: true });
|
|
277
|
+
const logCount = readLogLines(id).length;
|
|
278
|
+
out.push({ ...meta, path: whiteboardBoardPath(id), preview: board.trim().slice(0, 500), logCount });
|
|
279
|
+
}
|
|
280
|
+
return out.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
|
|
281
|
+
}
|
|
282
|
+
export function readWhiteboard(id, opts) {
|
|
283
|
+
if (!opts?.allowDisabled && !whiteboardEnabled())
|
|
284
|
+
throw new Error('whiteboard_disabled');
|
|
285
|
+
const clean = safeId(id);
|
|
286
|
+
const fp = whiteboardBoardPath(clean);
|
|
287
|
+
if (!existsSync(fp)) {
|
|
288
|
+
if (opts?.missingAsEmpty)
|
|
289
|
+
return '';
|
|
290
|
+
throw new Error('whiteboard_not_found');
|
|
291
|
+
}
|
|
292
|
+
return readFileSync(fp, 'utf-8');
|
|
293
|
+
}
|
|
294
|
+
function readLogLines(id) {
|
|
295
|
+
const dir = boardDir(id);
|
|
296
|
+
const files = [];
|
|
297
|
+
try {
|
|
298
|
+
for (const entry of readdirSync(dir)) {
|
|
299
|
+
if (entry === 'log.jsonl' || /^log\.[1-3]\.jsonl$/.test(entry)) {
|
|
300
|
+
files.push(entry);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
return [];
|
|
306
|
+
}
|
|
307
|
+
// Read oldest → newest: log.3 (oldest archive) … log.1 (newest archive) …
|
|
308
|
+
// log.jsonl (current). The previous order fn mapped log.1→1, log.2→2, log.3→3
|
|
309
|
+
// which read the *newest* archive first and the *oldest* last — the rotated
|
|
310
|
+
// history came out in reverse chronological order. Invert the archive index.
|
|
311
|
+
const order = (name) => {
|
|
312
|
+
if (name === 'log.jsonl')
|
|
313
|
+
return LOG_ARCHIVE_COUNT + 1;
|
|
314
|
+
const n = Number(name.match(/^log\.(\d)\.jsonl$/)?.[1] ?? 0);
|
|
315
|
+
return LOG_ARCHIVE_COUNT - n + 1;
|
|
316
|
+
};
|
|
317
|
+
return files
|
|
318
|
+
.sort((a, b) => order(a) - order(b))
|
|
319
|
+
.flatMap(file => {
|
|
320
|
+
try {
|
|
321
|
+
return readFileSync(join(dir, file), 'utf-8').split('\n').filter(Boolean);
|
|
322
|
+
}
|
|
323
|
+
catch {
|
|
324
|
+
return [];
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
function rotateWhiteboardLogIfNeeded(id, incomingBytes = 0) {
|
|
329
|
+
const fp = whiteboardLogPath(id);
|
|
330
|
+
if (!existsSync(fp))
|
|
331
|
+
return;
|
|
332
|
+
const maxBytes = whiteboardLogMaxBytes();
|
|
333
|
+
let size = 0;
|
|
334
|
+
try {
|
|
335
|
+
size = statSync(fp).size;
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
if (size + incomingBytes <= maxBytes)
|
|
341
|
+
return;
|
|
342
|
+
const dir = boardDir(id);
|
|
343
|
+
try {
|
|
344
|
+
unlinkSync(join(dir, `log.${LOG_ARCHIVE_COUNT}.jsonl`));
|
|
345
|
+
}
|
|
346
|
+
catch { /* ignore */ }
|
|
347
|
+
for (let i = LOG_ARCHIVE_COUNT - 1; i >= 1; i--) {
|
|
348
|
+
const from = join(dir, `log.${i}.jsonl`);
|
|
349
|
+
if (!existsSync(from))
|
|
350
|
+
continue;
|
|
351
|
+
renameSync(from, join(dir, `log.${i + 1}.jsonl`));
|
|
352
|
+
}
|
|
353
|
+
renameSync(fp, join(dir, 'log.1.jsonl'));
|
|
354
|
+
}
|
|
355
|
+
export function writeWhiteboard(id, content, opts) {
|
|
356
|
+
if (!whiteboardEnabled())
|
|
357
|
+
throw new Error('whiteboard_disabled');
|
|
358
|
+
const clean = safeId(id);
|
|
359
|
+
// Reject empty/whitespace-only content at the store boundary so no caller
|
|
360
|
+
// (CLI flag misuse, future dashboard writes) can silently blank a shared
|
|
361
|
+
// board. The board is the chat-wide current-state snapshot — wiping it to
|
|
362
|
+
// "" loses everyone's context with no history trail.
|
|
363
|
+
if (!content.trim())
|
|
364
|
+
throw new Error('whiteboard_empty_content');
|
|
365
|
+
mkdirSync(boardDir(clean), { recursive: true });
|
|
366
|
+
return withBoardLock(clean, () => {
|
|
367
|
+
const existing = getWhiteboard(clean);
|
|
368
|
+
if (!existing)
|
|
369
|
+
throw new Error('whiteboard_not_found');
|
|
370
|
+
// Optional compare-and-set: if the caller read the board at updatedAt X
|
|
371
|
+
// and it has since changed, refuse the blind overwrite so the caller can
|
|
372
|
+
// re-read and merge. Wired as a store primitive; CLI opts in later.
|
|
373
|
+
if (opts?.expectedUpdatedAt && existing.updatedAt !== opts.expectedUpdatedAt) {
|
|
374
|
+
throw new Error('whiteboard_cas_mismatch');
|
|
375
|
+
}
|
|
376
|
+
const tmp = `${whiteboardBoardPath(clean)}.${process.pid}.${randomUUID()}.tmp`;
|
|
377
|
+
writeFileSync(tmp, content.endsWith('\n') ? content : content + '\n', 'utf-8');
|
|
378
|
+
renameSync(tmp, whiteboardBoardPath(clean));
|
|
379
|
+
appendLog(clean, { kind: opts?.kind ?? 'write', actor: opts?.actor, content: `[overwrite ${content.length} chars]` });
|
|
380
|
+
return touchWhiteboard(clean);
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
export function appendLog(id, entry) {
|
|
384
|
+
const clean = safeId(id);
|
|
385
|
+
const line = JSON.stringify({ ...entry, at: new Date().toISOString() }) + '\n';
|
|
386
|
+
withLogLock(clean, () => {
|
|
387
|
+
rotateWhiteboardLogIfNeeded(clean, Buffer.byteLength(line, 'utf-8'));
|
|
388
|
+
appendFileSync(whiteboardLogPath(clean), line, 'utf-8');
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
function clearSessionWhiteboardRefs(id) {
|
|
392
|
+
let cleared = 0;
|
|
393
|
+
let files = [];
|
|
394
|
+
try {
|
|
395
|
+
files = readdirSync(config.session.dataDir);
|
|
396
|
+
}
|
|
397
|
+
catch {
|
|
398
|
+
return 0;
|
|
399
|
+
}
|
|
400
|
+
for (const file of files) {
|
|
401
|
+
if (!file.startsWith('sessions') || !file.endsWith('.json'))
|
|
402
|
+
continue;
|
|
403
|
+
const fp = join(config.session.dataDir, file);
|
|
404
|
+
let data;
|
|
405
|
+
try {
|
|
406
|
+
data = JSON.parse(readFileSync(fp, 'utf-8'));
|
|
407
|
+
}
|
|
408
|
+
catch {
|
|
409
|
+
continue;
|
|
410
|
+
}
|
|
411
|
+
let dirty = false;
|
|
412
|
+
for (const session of Object.values(data)) {
|
|
413
|
+
if (session && typeof session === 'object' && session.whiteboardId === id) {
|
|
414
|
+
delete session.whiteboardId;
|
|
415
|
+
dirty = true;
|
|
416
|
+
cleared++;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
if (dirty)
|
|
420
|
+
atomicWriteFileSync(fp, JSON.stringify(data, null, 2) + '\n');
|
|
421
|
+
}
|
|
422
|
+
return cleared;
|
|
423
|
+
}
|
|
424
|
+
export function deleteWhiteboard(id) {
|
|
425
|
+
const clean = safeId(id);
|
|
426
|
+
return withIndexLock(() => {
|
|
427
|
+
const index = readIndex();
|
|
428
|
+
delete index.boards[clean];
|
|
429
|
+
for (const [key, boardId] of Object.entries(index.bindings)) {
|
|
430
|
+
if (boardId === clean)
|
|
431
|
+
delete index.bindings[key];
|
|
432
|
+
}
|
|
433
|
+
// Persist the index removal BEFORE touching files on disk. The old order
|
|
434
|
+
// (rmSync → clearSessionWhiteboardRefs → writeIndex) left a window where a
|
|
435
|
+
// crash between rmSync and writeIndex kept the on-disk index referencing a
|
|
436
|
+
// board whose dir was already gone — a "ghost" board that
|
|
437
|
+
// ensureDefaultWhiteboard would resurrect from the stale binding, pointing
|
|
438
|
+
// sessions at a missing board.md. Index-first means a crash can at worst
|
|
439
|
+
// leave an orphaned dir with no index entry (harmless), never a ghost.
|
|
440
|
+
writeIndex(index);
|
|
441
|
+
const clearedSessions = clearSessionWhiteboardRefs(clean);
|
|
442
|
+
rmSync(boardDir(clean), { recursive: true, force: true });
|
|
443
|
+
return { ok: true, id: clean, clearedSessions };
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
export function whiteboardPath(id) {
|
|
447
|
+
const clean = safeId(id);
|
|
448
|
+
return { dir: boardDir(clean), board: whiteboardBoardPath(clean), log: whiteboardLogPath(clean), meta: metaPath(clean) };
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=whiteboard-store.js.map
|