@coralai/sps-cli 0.33.0 → 0.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -5
- package/dist/commands/acpCommand.d.ts.map +1 -1
- package/dist/commands/acpCommand.js +21 -1
- package/dist/commands/acpCommand.js.map +1 -1
- package/dist/commands/agentCommand.d.ts.map +1 -1
- package/dist/commands/agentCommand.js +25 -15
- package/dist/commands/agentCommand.js.map +1 -1
- package/dist/commands/agentDaemon.d.ts.map +1 -1
- package/dist/commands/agentDaemon.js +19 -2
- package/dist/commands/agentDaemon.js.map +1 -1
- package/dist/commands/agentRenderer.d.ts.map +1 -1
- package/dist/commands/agentRenderer.js +18 -3
- package/dist/commands/agentRenderer.js.map +1 -1
- package/dist/commands/cardAdd.d.ts.map +1 -1
- package/dist/commands/cardAdd.js +22 -2
- package/dist/commands/cardAdd.js.map +1 -1
- package/dist/commands/cardDashboard.d.ts.map +1 -1
- package/dist/commands/cardDashboard.js +30 -5
- package/dist/commands/cardDashboard.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +35 -69
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +18 -8
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/monitorTick.d.ts.map +1 -1
- package/dist/commands/monitorTick.js +23 -3
- package/dist/commands/monitorTick.js.map +1 -1
- package/dist/commands/pipelineRunner.d.ts.map +1 -1
- package/dist/commands/pipelineRunner.js +21 -7
- package/dist/commands/pipelineRunner.js.map +1 -1
- package/dist/commands/pipelineTick.d.ts.map +1 -1
- package/dist/commands/pipelineTick.js +18 -12
- package/dist/commands/pipelineTick.js.map +1 -1
- package/dist/commands/pmCommand.d.ts.map +1 -1
- package/dist/commands/pmCommand.js +21 -1
- package/dist/commands/pmCommand.js.map +1 -1
- package/dist/commands/projectInit.d.ts.map +1 -1
- package/dist/commands/projectInit.js +22 -2
- package/dist/commands/projectInit.js.map +1 -1
- package/dist/commands/qaTick.d.ts.map +1 -1
- package/dist/commands/qaTick.js +19 -12
- package/dist/commands/qaTick.js.map +1 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +21 -25
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/schedulerTick.d.ts.map +1 -1
- package/dist/commands/schedulerTick.js +23 -3
- package/dist/commands/schedulerTick.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +68 -30
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +20 -7
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +19 -14
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +34 -26
- package/dist/commands/tick.js.map +1 -1
- package/dist/commands/workerDashboard.d.ts.map +1 -1
- package/dist/commands/workerDashboard.js +25 -5
- package/dist/commands/workerDashboard.js.map +1 -1
- package/dist/commands/workerLaunch.d.ts.map +1 -1
- package/dist/commands/workerLaunch.js +17 -12
- package/dist/commands/workerLaunch.js.map +1 -1
- package/dist/commands/workerPs.d.ts +0 -4
- package/dist/commands/workerPs.d.ts.map +1 -1
- package/dist/commands/workerPs.js +22 -6
- package/dist/commands/workerPs.js.map +1 -1
- package/dist/core/config.d.ts +4 -9
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +20 -19
- package/dist/core/config.js.map +1 -1
- package/dist/core/config.test.js +21 -23
- package/dist/core/config.test.js.map +1 -1
- package/dist/core/context.d.ts +15 -0
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +15 -0
- package/dist/core/context.js.map +1 -1
- package/dist/core/lock.d.ts.map +1 -1
- package/dist/core/lock.js +17 -10
- package/dist/core/lock.js.map +1 -1
- package/dist/core/lock.test.js +18 -3
- package/dist/core/lock.test.js.map +1 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +16 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/memory.d.ts +85 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +414 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/paths.d.ts +0 -1
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +16 -4
- package/dist/core/paths.js.map +1 -1
- package/dist/core/pipelineConfig.d.ts +6 -4
- package/dist/core/pipelineConfig.d.ts.map +1 -1
- package/dist/core/pipelineConfig.js +67 -30
- package/dist/core/pipelineConfig.js.map +1 -1
- package/dist/core/projectPipelineAdapter.d.ts +15 -9
- package/dist/core/projectPipelineAdapter.d.ts.map +1 -1
- package/dist/core/projectPipelineAdapter.js +96 -52
- package/dist/core/projectPipelineAdapter.js.map +1 -1
- package/dist/core/queue.d.ts.map +1 -1
- package/dist/core/queue.js +16 -1
- package/dist/core/queue.js.map +1 -1
- package/dist/core/queue.test.js +19 -4
- package/dist/core/queue.test.js.map +1 -1
- package/dist/core/runtimeSnapshot.d.ts +1 -1
- package/dist/core/runtimeSnapshot.d.ts.map +1 -1
- package/dist/core/runtimeSnapshot.js +18 -3
- package/dist/core/runtimeSnapshot.js.map +1 -1
- package/dist/core/runtimeStore.d.ts +1 -1
- package/dist/core/runtimeStore.d.ts.map +1 -1
- package/dist/core/runtimeStore.js +15 -0
- package/dist/core/runtimeStore.js.map +1 -1
- package/dist/core/sessionContext.d.ts +1 -1
- package/dist/core/sessionContext.d.ts.map +1 -1
- package/dist/core/sessionContext.js +12 -3
- package/dist/core/sessionContext.js.map +1 -1
- package/dist/core/sessionLiveness.d.ts +17 -1
- package/dist/core/sessionLiveness.d.ts.map +1 -1
- package/dist/core/sessionLiveness.js +3 -13
- package/dist/core/sessionLiveness.js.map +1 -1
- package/dist/core/shellEnv.d.ts +15 -0
- package/dist/core/shellEnv.d.ts.map +1 -1
- package/dist/core/shellEnv.js +13 -3
- package/dist/core/shellEnv.js.map +1 -1
- package/dist/core/shellEnv.test.js +19 -4
- package/dist/core/shellEnv.test.js.map +1 -1
- package/dist/core/state.d.ts +3 -3
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +16 -1
- package/dist/core/state.js.map +1 -1
- package/dist/core/state.test.js +19 -4
- package/dist/core/state.test.js.map +1 -1
- package/dist/core/taskPrompts.d.ts +15 -8
- package/dist/core/taskPrompts.d.ts.map +1 -1
- package/dist/core/taskPrompts.js +0 -37
- package/dist/core/taskPrompts.js.map +1 -1
- package/dist/core/workerRuntimeSummary.d.ts.map +1 -1
- package/dist/core/workerRuntimeSummary.js +15 -0
- package/dist/core/workerRuntimeSummary.js.map +1 -1
- package/dist/daemon/daemonClient.d.ts +16 -1
- package/dist/daemon/daemonClient.d.ts.map +1 -1
- package/dist/daemon/daemonClient.js +13 -4
- package/dist/daemon/daemonClient.js.map +1 -1
- package/dist/daemon/sessionDaemon.d.ts +15 -0
- package/dist/daemon/sessionDaemon.d.ts.map +1 -1
- package/dist/daemon/sessionDaemon.js +12 -8
- package/dist/daemon/sessionDaemon.js.map +1 -1
- package/dist/engines/CloseoutEngine.js +1 -1
- package/dist/engines/CloseoutEngine.js.map +1 -1
- package/dist/engines/EventHandler.d.ts +18 -9
- package/dist/engines/EventHandler.d.ts.map +1 -1
- package/dist/engines/EventHandler.js +24 -9
- package/dist/engines/EventHandler.js.map +1 -1
- package/dist/engines/ExecutionEngine.d.ts.map +1 -1
- package/dist/engines/ExecutionEngine.js +6 -18
- package/dist/engines/ExecutionEngine.js.map +1 -1
- package/dist/engines/MonitorEngine.d.ts +21 -4
- package/dist/engines/MonitorEngine.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.js +29 -9
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/engines/SchedulerEngine.d.ts +20 -2
- package/dist/engines/SchedulerEngine.d.ts.map +1 -1
- package/dist/engines/SchedulerEngine.js +21 -3
- package/dist/engines/SchedulerEngine.js.map +1 -1
- package/dist/engines/StageEngine.d.ts +98 -0
- package/dist/engines/StageEngine.d.ts.map +1 -0
- package/dist/engines/StageEngine.js +1111 -0
- package/dist/engines/StageEngine.js.map +1 -0
- package/dist/engines/engine-pipeline-adapter.test.d.ts +15 -0
- package/dist/engines/engine-pipeline-adapter.test.d.ts.map +1 -1
- package/dist/engines/engine-pipeline-adapter.test.js +44 -31
- package/dist/engines/engine-pipeline-adapter.test.js.map +1 -1
- package/dist/interfaces/ACPClient.d.ts +16 -1
- package/dist/interfaces/ACPClient.d.ts.map +1 -1
- package/dist/interfaces/ACPClient.js +15 -0
- package/dist/interfaces/ACPClient.js.map +1 -1
- package/dist/interfaces/AgentRuntime.d.ts +16 -1
- package/dist/interfaces/AgentRuntime.d.ts.map +1 -1
- package/dist/interfaces/AgentRuntime.js +15 -0
- package/dist/interfaces/AgentRuntime.js.map +1 -1
- package/dist/interfaces/Notifier.d.ts +15 -0
- package/dist/interfaces/Notifier.d.ts.map +1 -1
- package/dist/interfaces/Notifier.js +15 -0
- package/dist/interfaces/Notifier.js.map +1 -1
- package/dist/interfaces/RepoBackend.d.ts +15 -0
- package/dist/interfaces/RepoBackend.d.ts.map +1 -1
- package/dist/interfaces/RepoBackend.js +15 -0
- package/dist/interfaces/RepoBackend.js.map +1 -1
- package/dist/interfaces/TaskBackend.d.ts +15 -0
- package/dist/interfaces/TaskBackend.d.ts.map +1 -1
- package/dist/interfaces/TaskBackend.js +15 -0
- package/dist/interfaces/TaskBackend.js.map +1 -1
- package/dist/main.d.ts +15 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +140 -31
- package/dist/main.js.map +1 -1
- package/dist/manager/completion-judge.d.ts +15 -0
- package/dist/manager/completion-judge.d.ts.map +1 -1
- package/dist/manager/completion-judge.js +14 -5
- package/dist/manager/completion-judge.js.map +1 -1
- package/dist/manager/completion-judge.test.d.ts +15 -0
- package/dist/manager/completion-judge.test.d.ts.map +1 -1
- package/dist/manager/completion-judge.test.js +19 -4
- package/dist/manager/completion-judge.test.js.map +1 -1
- package/dist/manager/integration-queue.d.ts +12 -6
- package/dist/manager/integration-queue.d.ts.map +1 -1
- package/dist/manager/integration-queue.js +11 -5
- package/dist/manager/integration-queue.js.map +1 -1
- package/dist/manager/integration-queue.test.d.ts +15 -0
- package/dist/manager/integration-queue.test.d.ts.map +1 -1
- package/dist/manager/integration-queue.test.js +19 -4
- package/dist/manager/integration-queue.test.js.map +1 -1
- package/dist/manager/pm-client.d.ts.map +1 -1
- package/dist/manager/pm-client.js +12 -5
- package/dist/manager/pm-client.js.map +1 -1
- package/dist/manager/resource-limiter.d.ts.map +1 -1
- package/dist/manager/resource-limiter.js +12 -3
- package/dist/manager/resource-limiter.js.map +1 -1
- package/dist/manager/resource-limiter.test.d.ts +15 -0
- package/dist/manager/resource-limiter.test.d.ts.map +1 -1
- package/dist/manager/resource-limiter.test.js +16 -1
- package/dist/manager/resource-limiter.test.js.map +1 -1
- package/dist/manager/runtime-coordinator.d.ts +15 -0
- package/dist/manager/runtime-coordinator.d.ts.map +1 -1
- package/dist/manager/runtime-coordinator.js +19 -4
- package/dist/manager/runtime-coordinator.js.map +1 -1
- package/dist/manager/supervisor.d.ts +15 -11
- package/dist/manager/supervisor.d.ts.map +1 -1
- package/dist/manager/supervisor.js +7 -103
- package/dist/manager/supervisor.js.map +1 -1
- package/dist/manager/supervisor.test.d.ts +15 -0
- package/dist/manager/supervisor.test.d.ts.map +1 -1
- package/dist/manager/supervisor.test.js +23 -52
- package/dist/manager/supervisor.test.js.map +1 -1
- package/dist/manager/worker-manager-impl.d.ts +4 -4
- package/dist/manager/worker-manager-impl.d.ts.map +1 -1
- package/dist/manager/worker-manager-impl.js +31 -40
- package/dist/manager/worker-manager-impl.js.map +1 -1
- package/dist/manager/worker-manager-impl.test.d.ts +15 -0
- package/dist/manager/worker-manager-impl.test.d.ts.map +1 -1
- package/dist/manager/worker-manager-impl.test.js +40 -144
- package/dist/manager/worker-manager-impl.test.js.map +1 -1
- package/dist/manager/worker-manager.d.ts +13 -8
- package/dist/manager/worker-manager.d.ts.map +1 -1
- package/dist/manager/worker-manager.js +11 -6
- package/dist/manager/worker-manager.js.map +1 -1
- package/dist/models/acp.d.ts +15 -0
- package/dist/models/acp.d.ts.map +1 -1
- package/dist/models/acp.js +15 -0
- package/dist/models/acp.js.map +1 -1
- package/dist/models/types.d.ts +15 -0
- package/dist/models/types.d.ts.map +1 -1
- package/dist/models/types.js +15 -0
- package/dist/models/types.js.map +1 -1
- package/dist/providers/ACPWorkerRuntime.d.ts +2 -2
- package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.js.map +1 -1
- package/dist/providers/GitLabRepoBackend.d.ts +0 -4
- package/dist/providers/GitLabRepoBackend.d.ts.map +1 -1
- package/dist/providers/GitLabRepoBackend.js +15 -4
- package/dist/providers/GitLabRepoBackend.js.map +1 -1
- package/dist/providers/LocalACPClient.d.ts +15 -0
- package/dist/providers/LocalACPClient.d.ts.map +1 -1
- package/dist/providers/LocalACPClient.js.map +1 -1
- package/dist/providers/MarkdownTaskBackend.d.ts +6 -1
- package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
- package/dist/providers/MarkdownTaskBackend.js +67 -26
- package/dist/providers/MarkdownTaskBackend.js.map +1 -1
- package/dist/providers/MatrixNotifier.d.ts +15 -0
- package/dist/providers/MatrixNotifier.d.ts.map +1 -1
- package/dist/providers/MatrixNotifier.js.map +1 -1
- package/dist/providers/PlaneTaskBackend.d.ts +0 -6
- package/dist/providers/PlaneTaskBackend.d.ts.map +1 -1
- package/dist/providers/PlaneTaskBackend.js +15 -6
- package/dist/providers/PlaneTaskBackend.js.map +1 -1
- package/dist/providers/TrelloTaskBackend.d.ts +15 -7
- package/dist/providers/TrelloTaskBackend.d.ts.map +1 -1
- package/dist/providers/TrelloTaskBackend.js +0 -8
- package/dist/providers/TrelloTaskBackend.js.map +1 -1
- package/dist/providers/adapters/AcpSdkAdapter.d.ts +1 -1
- package/dist/providers/adapters/AcpSdkAdapter.d.ts.map +1 -1
- package/dist/providers/adapters/AcpSdkAdapter.js +32 -32
- package/dist/providers/adapters/AcpSdkAdapter.js.map +1 -1
- package/dist/providers/adapters/acp-fs-handlers.d.ts.map +1 -1
- package/dist/providers/adapters/acp-fs-handlers.js +13 -4
- package/dist/providers/adapters/acp-fs-handlers.js.map +1 -1
- package/dist/providers/adapters/acp-fs-handlers.test.js +17 -2
- package/dist/providers/adapters/acp-fs-handlers.test.js.map +1 -1
- package/dist/providers/adapters/acp-permissions.d.ts +12 -5
- package/dist/providers/adapters/acp-permissions.d.ts.map +1 -1
- package/dist/providers/adapters/acp-permissions.js +12 -5
- package/dist/providers/adapters/acp-permissions.js.map +1 -1
- package/dist/providers/adapters/acp-permissions.test.js +17 -2
- package/dist/providers/adapters/acp-permissions.test.js.map +1 -1
- package/dist/providers/adapters/acp-session-accumulator.d.ts.map +1 -1
- package/dist/providers/adapters/acp-session-accumulator.js +12 -4
- package/dist/providers/adapters/acp-session-accumulator.js.map +1 -1
- package/dist/providers/adapters/acp-session-accumulator.test.js +16 -1
- package/dist/providers/adapters/acp-session-accumulator.test.js.map +1 -1
- package/dist/providers/adapters/acp-terminal-manager.d.ts.map +1 -1
- package/dist/providers/adapters/acp-terminal-manager.js +12 -3
- package/dist/providers/adapters/acp-terminal-manager.js.map +1 -1
- package/dist/providers/adapters/acp-terminal-manager.test.js +16 -1
- package/dist/providers/adapters/acp-terminal-manager.test.js.map +1 -1
- package/dist/providers/outputParser.d.ts +16 -1
- package/dist/providers/outputParser.d.ts.map +1 -1
- package/dist/providers/outputParser.js +14 -3
- package/dist/providers/outputParser.js.map +1 -1
- package/dist/providers/outputParser.test.js +19 -4
- package/dist/providers/outputParser.test.js.map +1 -1
- package/dist/providers/registry.d.ts +20 -5
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +6 -6
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/streamRenderer.d.ts +13 -1
- package/dist/providers/streamRenderer.d.ts.map +1 -1
- package/dist/providers/streamRenderer.js +13 -1
- package/dist/providers/streamRenderer.js.map +1 -1
- package/dist/test-setup.js +12 -3
- package/dist/test-setup.js.map +1 -1
- package/package.json +4 -3
- package/skills/dev-worker/SKILL.md +40 -0
- package/skills/sps-pipeline/SKILL.md +273 -0
- package/profiles/_template.md +0 -48
- package/profiles/critic.md +0 -35
- /package/{profiles → skills/dev-worker/references}/architect.md +0 -0
- /package/{profiles → skills/dev-worker/references}/backend.md +0 -0
- /package/{profiles → skills/dev-worker/references}/frontend.md +0 -0
- /package/{profiles → skills/dev-worker/references}/fullstack.md +0 -0
- /package/{profiles → skills/dev-worker/references}/optimizer.md +0 -0
- /package/{profiles → skills/dev-worker/references}/phaser.md +0 -0
- /package/{profiles → skills/dev-worker/references}/prototyper.md +0 -0
- /package/{profiles → skills/dev-worker/references}/reviewer.md +0 -0
- /package/{profiles → skills/dev-worker/references}/security.md +0 -0
- /package/{profiles → skills/dev-worker/references}/senior.md +0 -0
- /package/{profiles → skills/dev-worker/references}/typescript.md +0 -0
- /package/{profiles → skills/dev-worker/references}/writer.md +0 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module memory
|
|
3
|
+
* @description 项目级持久化知识记忆系统
|
|
4
|
+
*
|
|
5
|
+
* @author eddy
|
|
6
|
+
* @organization wykj
|
|
7
|
+
* @ownership wykj/eddy
|
|
8
|
+
*
|
|
9
|
+
* @created 2026-04-03
|
|
10
|
+
* @updated 2026-04-03
|
|
11
|
+
*
|
|
12
|
+
* @role util
|
|
13
|
+
* @layer core
|
|
14
|
+
* @boundedContext memory
|
|
15
|
+
*
|
|
16
|
+
* Types: convention (no decay), decision (slow decay), lesson (normal decay), reference (no decay)
|
|
17
|
+
*/
|
|
18
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
19
|
+
import { homedir } from 'node:os';
|
|
20
|
+
import { basename, resolve } from 'node:path';
|
|
21
|
+
// ─── Types ──────────────────────────────────────────────────────
|
|
22
|
+
export const MEMORY_TYPES = ['convention', 'decision', 'lesson', 'reference'];
|
|
23
|
+
export const MEMORY_INDEX = 'MEMORY.md';
|
|
24
|
+
const MAX_INDEX_LINES = 200;
|
|
25
|
+
const MAX_MEMORY_FILES = 200;
|
|
26
|
+
const MAX_FILE_LINES = 200;
|
|
27
|
+
const MAX_CONTEXT_ENTRIES = 10;
|
|
28
|
+
const FRONTMATTER_MAX_LINES = 30;
|
|
29
|
+
// Types that don't decay — always relevant
|
|
30
|
+
const NO_DECAY_TYPES = ['convention', 'reference'];
|
|
31
|
+
// ─── Paths ──────────────────────────────────────────────────────
|
|
32
|
+
/** Get the user-level memory directory (cross-project preferences) */
|
|
33
|
+
export function getUserMemoryDir() {
|
|
34
|
+
return resolve(homedir(), '.coral', 'memory', 'user');
|
|
35
|
+
}
|
|
36
|
+
/** Get the agent-level memory directory (per daemon instance) */
|
|
37
|
+
export function getAgentMemoryDir(agentId) {
|
|
38
|
+
return resolve(homedir(), '.coral', 'memory', 'agents', agentId);
|
|
39
|
+
}
|
|
40
|
+
/** Get the memory directory for a project */
|
|
41
|
+
export function getProjectMemoryDir(project) {
|
|
42
|
+
return resolve(homedir(), '.coral', 'memory', 'projects', project);
|
|
43
|
+
}
|
|
44
|
+
/** Ensure project memory directory exists */
|
|
45
|
+
export function ensureMemoryDir(project) {
|
|
46
|
+
const dir = getProjectMemoryDir(project);
|
|
47
|
+
if (!existsSync(dir))
|
|
48
|
+
mkdirSync(dir, { recursive: true });
|
|
49
|
+
return dir;
|
|
50
|
+
}
|
|
51
|
+
/** Ensure user memory directory exists */
|
|
52
|
+
export function ensureUserMemoryDir() {
|
|
53
|
+
return ensureDir(getUserMemoryDir());
|
|
54
|
+
}
|
|
55
|
+
/** Ensure agent memory directory exists */
|
|
56
|
+
export function ensureAgentMemoryDir(agentId) {
|
|
57
|
+
return ensureDir(getAgentMemoryDir(agentId));
|
|
58
|
+
}
|
|
59
|
+
/** Ensure any memory directory exists (generic) */
|
|
60
|
+
function ensureDir(dir) {
|
|
61
|
+
if (!existsSync(dir))
|
|
62
|
+
mkdirSync(dir, { recursive: true });
|
|
63
|
+
return dir;
|
|
64
|
+
}
|
|
65
|
+
// ─── Scanning ───────────────────────────────────────────────────
|
|
66
|
+
/** Parse simple YAML frontmatter from file content (first N lines) */
|
|
67
|
+
function parseFrontmatter(content) {
|
|
68
|
+
const lines = content.split('\n');
|
|
69
|
+
if (lines[0]?.trim() !== '---')
|
|
70
|
+
return {};
|
|
71
|
+
const result = {};
|
|
72
|
+
for (let i = 1; i < lines.length; i++) {
|
|
73
|
+
if (lines[i].trim() === '---')
|
|
74
|
+
break;
|
|
75
|
+
const match = lines[i].match(/^(\w+):\s*(.+)$/);
|
|
76
|
+
if (match) {
|
|
77
|
+
result[match[1]] = match[2].trim();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/** Scan memory directory for .md files, return headers sorted newest-first */
|
|
83
|
+
export function scanMemoryFiles(memoryDir) {
|
|
84
|
+
if (!existsSync(memoryDir))
|
|
85
|
+
return [];
|
|
86
|
+
try {
|
|
87
|
+
const files = readdirSync(memoryDir, { recursive: true })
|
|
88
|
+
.map(f => typeof f === 'string' ? f : f.toString())
|
|
89
|
+
.filter(f => f.endsWith('.md') && basename(f) !== MEMORY_INDEX);
|
|
90
|
+
const headers = [];
|
|
91
|
+
for (const relativePath of files) {
|
|
92
|
+
try {
|
|
93
|
+
const filePath = resolve(memoryDir, relativePath);
|
|
94
|
+
const stat = statSync(filePath);
|
|
95
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
96
|
+
// Only read first N lines for frontmatter
|
|
97
|
+
const head = content.split('\n').slice(0, FRONTMATTER_MAX_LINES).join('\n');
|
|
98
|
+
const fm = parseFrontmatter(head);
|
|
99
|
+
headers.push({
|
|
100
|
+
filename: relativePath,
|
|
101
|
+
filePath,
|
|
102
|
+
mtimeMs: stat.mtimeMs,
|
|
103
|
+
name: fm.name || null,
|
|
104
|
+
description: fm.description || null,
|
|
105
|
+
type: MEMORY_TYPES.find(t => t === fm.type),
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
catch { /* skip unreadable files */ }
|
|
109
|
+
}
|
|
110
|
+
return headers
|
|
111
|
+
.sort((a, b) => b.mtimeMs - a.mtimeMs)
|
|
112
|
+
.slice(0, MAX_MEMORY_FILES);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return [];
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// ─── Reading ────────────────────────────────────────────────────
|
|
119
|
+
/** Read MEMORY.md index content, truncated to max lines */
|
|
120
|
+
export function readMemoryIndex(memoryDir) {
|
|
121
|
+
const indexPath = resolve(memoryDir, MEMORY_INDEX);
|
|
122
|
+
if (!existsSync(indexPath))
|
|
123
|
+
return '';
|
|
124
|
+
const content = readFileSync(indexPath, 'utf-8').trim();
|
|
125
|
+
const lines = content.split('\n');
|
|
126
|
+
if (lines.length > MAX_INDEX_LINES) {
|
|
127
|
+
return lines.slice(0, MAX_INDEX_LINES).join('\n')
|
|
128
|
+
+ `\n\n> WARNING: ${MEMORY_INDEX} has ${lines.length} lines (limit: ${MAX_INDEX_LINES}). Truncated.`;
|
|
129
|
+
}
|
|
130
|
+
return content;
|
|
131
|
+
}
|
|
132
|
+
/** Read a memory file, truncated to max lines */
|
|
133
|
+
export function readMemoryFile(filePath) {
|
|
134
|
+
if (!existsSync(filePath))
|
|
135
|
+
return '';
|
|
136
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
137
|
+
const lines = content.split('\n');
|
|
138
|
+
if (lines.length > MAX_FILE_LINES) {
|
|
139
|
+
return lines.slice(0, MAX_FILE_LINES).join('\n')
|
|
140
|
+
+ `\n\n> [Truncated — ${lines.length} lines total. Use file read for full content.]`;
|
|
141
|
+
}
|
|
142
|
+
return content;
|
|
143
|
+
}
|
|
144
|
+
/** Memory age in days */
|
|
145
|
+
function memoryAgeDays(mtimeMs) {
|
|
146
|
+
return Math.floor((Date.now() - mtimeMs) / (1000 * 60 * 60 * 24));
|
|
147
|
+
}
|
|
148
|
+
/** Staleness caveat for old memories */
|
|
149
|
+
function stalenessCaveat(mtimeMs) {
|
|
150
|
+
const days = memoryAgeDays(mtimeMs);
|
|
151
|
+
if (days <= 1)
|
|
152
|
+
return null;
|
|
153
|
+
return `> This memory is ${days} days old. Verify against current code before acting on it.`;
|
|
154
|
+
}
|
|
155
|
+
// ─── Context Generation ─────────────────────────────────────────
|
|
156
|
+
/**
|
|
157
|
+
* Select relevant memories for a worker prompt.
|
|
158
|
+
* Priority: convention (always) > card-related > decision > lesson > reference
|
|
159
|
+
* No decay types are always included. Lessons decay by age.
|
|
160
|
+
*/
|
|
161
|
+
function selectRelevantMemories(headers, _cardSeq) {
|
|
162
|
+
const selected = [];
|
|
163
|
+
// 1. All conventions and references (no decay, always relevant)
|
|
164
|
+
for (const h of headers) {
|
|
165
|
+
if (h.type && NO_DECAY_TYPES.includes(h.type)) {
|
|
166
|
+
selected.push(h);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// 2. Decisions (sorted newest-first, already in that order)
|
|
170
|
+
for (const h of headers) {
|
|
171
|
+
if (h.type === 'decision' && !selected.includes(h)) {
|
|
172
|
+
selected.push(h);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// 3. Lessons (normal decay — skip if older than 30 days)
|
|
176
|
+
for (const h of headers) {
|
|
177
|
+
if (h.type === 'lesson' && !selected.includes(h)) {
|
|
178
|
+
if (memoryAgeDays(h.mtimeMs) <= 30) {
|
|
179
|
+
selected.push(h);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// 4. Untyped memories (legacy)
|
|
184
|
+
for (const h of headers) {
|
|
185
|
+
if (!h.type && !selected.includes(h)) {
|
|
186
|
+
selected.push(h);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return selected.slice(0, MAX_CONTEXT_ENTRIES);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Build the memory context string for prompt injection.
|
|
193
|
+
* Includes: MEMORY.md index + selected file contents.
|
|
194
|
+
*/
|
|
195
|
+
export function buildMemoryContext(project, cardSeq) {
|
|
196
|
+
const memoryDir = getProjectMemoryDir(project);
|
|
197
|
+
if (!existsSync(memoryDir))
|
|
198
|
+
return '';
|
|
199
|
+
const sections = [];
|
|
200
|
+
// 1. Read index
|
|
201
|
+
const index = readMemoryIndex(memoryDir);
|
|
202
|
+
// 2. Scan and select relevant memories
|
|
203
|
+
const headers = scanMemoryFiles(memoryDir);
|
|
204
|
+
if (headers.length === 0 && !index)
|
|
205
|
+
return '';
|
|
206
|
+
const selected = selectRelevantMemories(headers, cardSeq);
|
|
207
|
+
sections.push('# Project Memory');
|
|
208
|
+
sections.push('');
|
|
209
|
+
if (index) {
|
|
210
|
+
sections.push('## Index');
|
|
211
|
+
sections.push(index);
|
|
212
|
+
sections.push('');
|
|
213
|
+
}
|
|
214
|
+
// 3. Include selected memory file contents
|
|
215
|
+
if (selected.length > 0) {
|
|
216
|
+
sections.push('## Relevant Memories');
|
|
217
|
+
sections.push('');
|
|
218
|
+
for (const h of selected) {
|
|
219
|
+
const content = readMemoryFile(h.filePath);
|
|
220
|
+
const caveat = stalenessCaveat(h.mtimeMs);
|
|
221
|
+
const age = memoryAgeDays(h.mtimeMs);
|
|
222
|
+
const ageLabel = age === 0 ? 'today' : age === 1 ? 'yesterday' : `${age} days ago`;
|
|
223
|
+
sections.push(`### ${h.name || h.filename} (saved ${ageLabel})`);
|
|
224
|
+
if (caveat)
|
|
225
|
+
sections.push(caveat);
|
|
226
|
+
sections.push(content);
|
|
227
|
+
sections.push('');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return sections.join('\n').trim();
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Build user-level memory context (cross-project preferences).
|
|
234
|
+
* Injected into every agent/worker prompt.
|
|
235
|
+
*/
|
|
236
|
+
export function buildUserMemoryContext() {
|
|
237
|
+
const memoryDir = getUserMemoryDir();
|
|
238
|
+
if (!existsSync(memoryDir))
|
|
239
|
+
return '';
|
|
240
|
+
const headers = scanMemoryFiles(memoryDir);
|
|
241
|
+
const index = readMemoryIndex(memoryDir);
|
|
242
|
+
if (headers.length === 0 && !index)
|
|
243
|
+
return '';
|
|
244
|
+
const sections = ['# User Preferences', ''];
|
|
245
|
+
if (index) {
|
|
246
|
+
sections.push(index);
|
|
247
|
+
sections.push('');
|
|
248
|
+
}
|
|
249
|
+
// Include all user memories (small set, no filtering needed)
|
|
250
|
+
for (const h of headers.slice(0, MAX_CONTEXT_ENTRIES)) {
|
|
251
|
+
const content = readMemoryFile(h.filePath);
|
|
252
|
+
sections.push(`### ${h.name || h.filename}`);
|
|
253
|
+
sections.push(content);
|
|
254
|
+
sections.push('');
|
|
255
|
+
}
|
|
256
|
+
return sections.join('\n').trim();
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Build agent-level memory context (daemon instance experience).
|
|
260
|
+
* Injected when attaching to a daemon session.
|
|
261
|
+
*/
|
|
262
|
+
export function buildAgentMemoryContext(agentId) {
|
|
263
|
+
const memoryDir = getAgentMemoryDir(agentId);
|
|
264
|
+
if (!existsSync(memoryDir))
|
|
265
|
+
return '';
|
|
266
|
+
const headers = scanMemoryFiles(memoryDir);
|
|
267
|
+
const index = readMemoryIndex(memoryDir);
|
|
268
|
+
if (headers.length === 0 && !index)
|
|
269
|
+
return '';
|
|
270
|
+
const sections = ['# Agent Memory', ''];
|
|
271
|
+
if (index) {
|
|
272
|
+
sections.push(index);
|
|
273
|
+
sections.push('');
|
|
274
|
+
}
|
|
275
|
+
for (const h of headers.slice(0, MAX_CONTEXT_ENTRIES)) {
|
|
276
|
+
const content = readMemoryFile(h.filePath);
|
|
277
|
+
const caveat = stalenessCaveat(h.mtimeMs);
|
|
278
|
+
const age = memoryAgeDays(h.mtimeMs);
|
|
279
|
+
const ageLabel = age === 0 ? 'today' : age === 1 ? 'yesterday' : `${age} days ago`;
|
|
280
|
+
sections.push(`### ${h.name || h.filename} (saved ${ageLabel})`);
|
|
281
|
+
if (caveat)
|
|
282
|
+
sections.push(caveat);
|
|
283
|
+
sections.push(content);
|
|
284
|
+
sections.push('');
|
|
285
|
+
}
|
|
286
|
+
return sections.join('\n').trim();
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Build combined memory context for all applicable layers.
|
|
290
|
+
* Used by StageEngine (user + project) and agent commands (user + agent).
|
|
291
|
+
*/
|
|
292
|
+
export function buildFullMemoryContext(opts) {
|
|
293
|
+
const parts = [];
|
|
294
|
+
// Layer 1: User preferences (always)
|
|
295
|
+
const userCtx = buildUserMemoryContext();
|
|
296
|
+
if (userCtx)
|
|
297
|
+
parts.push(userCtx);
|
|
298
|
+
// Layer 2: Agent memory (if daemon)
|
|
299
|
+
if (opts.agentId) {
|
|
300
|
+
const agentCtx = buildAgentMemoryContext(opts.agentId);
|
|
301
|
+
if (agentCtx)
|
|
302
|
+
parts.push(agentCtx);
|
|
303
|
+
}
|
|
304
|
+
// Layer 3: Project memory (if project context)
|
|
305
|
+
if (opts.project) {
|
|
306
|
+
const projectCtx = buildMemoryContext(opts.project, opts.cardSeq);
|
|
307
|
+
if (projectCtx)
|
|
308
|
+
parts.push(projectCtx);
|
|
309
|
+
}
|
|
310
|
+
return parts.join('\n\n---\n\n');
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Build memory write instructions for prompt injection.
|
|
314
|
+
* Tells the agent how and where to write memories across all three layers.
|
|
315
|
+
*/
|
|
316
|
+
export function buildMemoryWriteInstructions(project, agentId) {
|
|
317
|
+
const userDir = getUserMemoryDir();
|
|
318
|
+
const projectDir = getProjectMemoryDir(project);
|
|
319
|
+
const agentDir = agentId ? getAgentMemoryDir(agentId) : null;
|
|
320
|
+
const agentSection = agentDir ? `
|
|
321
|
+
- **Agent memory** (\`${agentDir}/\`): Your personal experience — interaction patterns, user communication preferences observed by you, pitfalls you encountered. Only you read this.` : '';
|
|
322
|
+
return `# Memory System
|
|
323
|
+
|
|
324
|
+
You have a three-layer persistent memory system. Write directly to these directories (they exist, do not mkdir).
|
|
325
|
+
|
|
326
|
+
- **User memory** (\`${userDir}/\`): Cross-project user preferences — coding style, language, workflow habits. Shared across all projects and agents.${agentSection}
|
|
327
|
+
- **Project memory** (\`${projectDir}/\`): Project-specific knowledge — conventions, decisions, lessons, references. Shared across all workers on this project.
|
|
328
|
+
|
|
329
|
+
## Memory Types
|
|
330
|
+
|
|
331
|
+
- **convention**: Project rules and standards (e.g., "API uses camelCase"). Never expires.
|
|
332
|
+
- **decision**: Architecture/tech choices (e.g., "chose Phaser over PixiJS"). Slow decay.
|
|
333
|
+
- **lesson**: Lessons learned, pitfalls (e.g., "migration must be schema-first"). Decays after 30 days.
|
|
334
|
+
- **reference**: Pointers to external resources (e.g., "design docs in Figma"). Never expires.
|
|
335
|
+
|
|
336
|
+
## How to Write
|
|
337
|
+
|
|
338
|
+
Write each memory as a markdown file with this frontmatter:
|
|
339
|
+
|
|
340
|
+
\`\`\`markdown
|
|
341
|
+
---
|
|
342
|
+
name: Short title
|
|
343
|
+
description: One-line summary for index search
|
|
344
|
+
type: convention | decision | lesson | reference
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
Content here. For decision/lesson types, include:
|
|
348
|
+
**Why:** reason
|
|
349
|
+
**Scope:** where this applies
|
|
350
|
+
\`\`\`
|
|
351
|
+
|
|
352
|
+
Then add one line to the \`${MEMORY_INDEX}\` in the same directory:
|
|
353
|
+
\`- [Title](filename.md) — one-line hook\`
|
|
354
|
+
|
|
355
|
+
## When to Write
|
|
356
|
+
|
|
357
|
+
- User states a project rule or preference → convention
|
|
358
|
+
- A technical choice is made → decision
|
|
359
|
+
- Something unexpected happened or a pitfall was found → lesson
|
|
360
|
+
- An external resource location is mentioned → reference
|
|
361
|
+
|
|
362
|
+
Most conversations do NOT need memory. Only save what is non-obvious and useful for future tasks.
|
|
363
|
+
|
|
364
|
+
## What NOT to Save
|
|
365
|
+
|
|
366
|
+
- Code structure, file paths (derivable from code)
|
|
367
|
+
- Git history (use git log)
|
|
368
|
+
- Temporary task state
|
|
369
|
+
- Anything in CLAUDE.md or AGENTS.md`;
|
|
370
|
+
}
|
|
371
|
+
// ─── Writing (for CLI use) ──────────────────────────────────────
|
|
372
|
+
/**
|
|
373
|
+
* Add a memory entry via CLI. Creates the file and updates MEMORY.md.
|
|
374
|
+
*/
|
|
375
|
+
export function addMemory(project, opts) {
|
|
376
|
+
const memoryDir = ensureMemoryDir(project);
|
|
377
|
+
// Generate filename from name
|
|
378
|
+
const slug = opts.name
|
|
379
|
+
.toLowerCase()
|
|
380
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
381
|
+
.replace(/^-|-$/g, '')
|
|
382
|
+
.slice(0, 50);
|
|
383
|
+
const filename = `${slug}.md`;
|
|
384
|
+
const filePath = resolve(memoryDir, filename);
|
|
385
|
+
// Write memory file
|
|
386
|
+
const content = `---
|
|
387
|
+
name: ${opts.name}
|
|
388
|
+
description: ${opts.description}
|
|
389
|
+
type: ${opts.type}
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
${opts.body}
|
|
393
|
+
`;
|
|
394
|
+
writeFileSync(filePath, content);
|
|
395
|
+
// Update MEMORY.md index
|
|
396
|
+
const indexPath = resolve(memoryDir, MEMORY_INDEX);
|
|
397
|
+
let indexContent = '';
|
|
398
|
+
if (existsSync(indexPath)) {
|
|
399
|
+
indexContent = readFileSync(indexPath, 'utf-8').trim();
|
|
400
|
+
}
|
|
401
|
+
// Check for duplicate entry (same filename)
|
|
402
|
+
const lines = indexContent ? indexContent.split('\n') : [];
|
|
403
|
+
const existingIdx = lines.findIndex(l => l.includes(`(${filename})`));
|
|
404
|
+
const newLine = `- [${opts.name}](${filename}) — ${opts.description}`;
|
|
405
|
+
if (existingIdx >= 0) {
|
|
406
|
+
lines[existingIdx] = newLine;
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
lines.push(newLine);
|
|
410
|
+
}
|
|
411
|
+
writeFileSync(indexPath, lines.join('\n') + '\n');
|
|
412
|
+
return filePath;
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/core/paths.d.ts
CHANGED
|
@@ -30,7 +30,6 @@ export interface PathOverrides {
|
|
|
30
30
|
}
|
|
31
31
|
export declare function resolveProjectPaths(projectName: string, overrides?: PathOverrides): ProjectPaths;
|
|
32
32
|
export declare function resolveWorktreePath(projectName: string, seq: string | number, worktreeDir?: string): string;
|
|
33
|
-
export declare function resolveWorkerCardFile(projectName: string, slot: number): string;
|
|
34
33
|
export interface SessionPaths {
|
|
35
34
|
/** ~/.coral/sessions/ */
|
|
36
35
|
stateDir: string;
|
package/dist/core/paths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,YAAY,CAyBhG;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAK3G;AAED,MAAM,WAAW,YAAY;IAC3B,yBAAyB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,mBAAmB,IAAI,YAAY,CAOlD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
package/dist/core/paths.js
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @module paths
|
|
3
|
+
* @description 项目与会话的文件路径解析
|
|
4
|
+
*
|
|
5
|
+
* @author eddy
|
|
6
|
+
* @organization wykj
|
|
7
|
+
* @ownership wykj/eddy
|
|
8
|
+
*
|
|
9
|
+
* @created 2026-03-19
|
|
10
|
+
* @updated 2026-04-03
|
|
11
|
+
*
|
|
12
|
+
* @role config
|
|
13
|
+
* @layer core
|
|
14
|
+
* @boundedContext project
|
|
15
|
+
*/
|
|
2
16
|
import { existsSync } from 'node:fs';
|
|
17
|
+
import { resolve } from 'node:path';
|
|
3
18
|
const HOME = process.env.HOME || '/home/coral';
|
|
4
19
|
export function resolveProjectPaths(projectName, overrides) {
|
|
5
20
|
const instanceDir = resolve(HOME, '.coral', 'projects', projectName);
|
|
@@ -30,9 +45,6 @@ export function resolveWorktreePath(projectName, seq, worktreeDir) {
|
|
|
30
45
|
: resolve(HOME, '.coral', 'worktrees', projectName);
|
|
31
46
|
return resolve(root, String(seq));
|
|
32
47
|
}
|
|
33
|
-
export function resolveWorkerCardFile(projectName, slot) {
|
|
34
|
-
return resolve(HOME, '.coral', 'projects', projectName, `worker-${slot}.card`);
|
|
35
|
-
}
|
|
36
48
|
export function resolveSessionPaths() {
|
|
37
49
|
const stateDir = resolve(HOME, '.coral', 'sessions');
|
|
38
50
|
return {
|
package/dist/core/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa,CAAC;AAkC/C,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,SAAyB;IAChF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAEnD,MAAM,OAAO,GAAG,SAAS,EAAE,UAAU;QACnC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;QAC/B,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAE3C,MAAM,YAAY,GAAG,SAAS,EAAE,WAAW;QACzC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC;QAC7C,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAEtD,OAAO;QACL,WAAW;QACX,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;QACtC,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;QACrC,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC;QAC5C,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC;QACnD,YAAY,EAAE,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC;QAC9C,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC;QAC1C,iBAAiB,EAAE,OAAO,CAAC,WAAW,EAAE,qBAAqB,CAAC;QAC9D,OAAO;QACP,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,GAAoB,EAAE,WAAoB;IACjG,MAAM,IAAI,GAAG,WAAW;QACtB,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC;QACnC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAWD,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IACrD,OAAO;QACL,QAAQ;QACR,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;QAClC,SAAS,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -82,13 +82,15 @@ export declare function parseOnFail(raw?: string): OnFail;
|
|
|
82
82
|
*/
|
|
83
83
|
export declare function parseTimeout(raw?: string): number | undefined;
|
|
84
84
|
/**
|
|
85
|
-
* Get the pipelines directory path for
|
|
85
|
+
* Get the pipelines directory path for a project.
|
|
86
|
+
* Pipeline YAML files live in ~/.coral/projects/<name>/pipelines/.
|
|
87
|
+
* Falls back to <cwd>/.sps/pipelines/ for legacy compatibility.
|
|
86
88
|
*/
|
|
87
|
-
export declare function getPipelinesDir(
|
|
89
|
+
export declare function getPipelinesDir(projectOrCwd?: string): string;
|
|
88
90
|
/**
|
|
89
|
-
* List all available pipelines.
|
|
91
|
+
* List all available pipelines across all projects (or for a specific project).
|
|
90
92
|
*/
|
|
91
|
-
export declare function listPipelines(
|
|
93
|
+
export declare function listPipelines(projectName?: string): PipelineInfo[];
|
|
92
94
|
/**
|
|
93
95
|
* Load and validate a pipeline by name.
|
|
94
96
|
* Searches .sps/pipelines/ for a matching YAML file.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelineConfig.d.ts","sourceRoot":"","sources":["../../src/core/pipelineConfig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pipelineConfig.d.ts","sourceRoot":"","sources":["../../src/core/pipelineConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* @module pipelineConfig
|
|
3
|
+
* @description 流水线 YAML 配置加载与校验
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* @author eddy
|
|
6
|
+
* @organization wykj
|
|
7
|
+
* @ownership wykj/eddy
|
|
8
|
+
*
|
|
9
|
+
* @created 2026-04-02
|
|
10
|
+
* @updated 2026-04-03
|
|
11
|
+
*
|
|
12
|
+
* @role config
|
|
13
|
+
* @layer core
|
|
14
|
+
* @boundedContext pipeline
|
|
8
15
|
*/
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
16
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { basename, resolve } from 'node:path';
|
|
11
19
|
import { parse as parseYaml } from 'yaml';
|
|
12
20
|
// ─── Parsing ────────────────────────────────────────────────────
|
|
13
21
|
/**
|
|
@@ -87,34 +95,63 @@ function validateStepsPipeline(config, filePath) {
|
|
|
87
95
|
}
|
|
88
96
|
// ─── Loading ────────────────────────────────────────────────────
|
|
89
97
|
/**
|
|
90
|
-
* Get the pipelines directory path for
|
|
98
|
+
* Get the pipelines directory path for a project.
|
|
99
|
+
* Pipeline YAML files live in ~/.coral/projects/<name>/pipelines/.
|
|
100
|
+
* Falls back to <cwd>/.sps/pipelines/ for legacy compatibility.
|
|
91
101
|
*/
|
|
92
|
-
export function getPipelinesDir(
|
|
93
|
-
|
|
102
|
+
export function getPipelinesDir(projectOrCwd) {
|
|
103
|
+
if (projectOrCwd) {
|
|
104
|
+
// Try ~/.coral/projects/<name>/pipelines/ first
|
|
105
|
+
const coralDir = resolve(homedir(), '.coral', 'projects', projectOrCwd, 'pipelines');
|
|
106
|
+
if (existsSync(coralDir))
|
|
107
|
+
return coralDir;
|
|
108
|
+
// Legacy fallback: <cwd>/.sps/pipelines/
|
|
109
|
+
const legacyDir = resolve(projectOrCwd, '.sps', 'pipelines');
|
|
110
|
+
if (existsSync(legacyDir))
|
|
111
|
+
return legacyDir;
|
|
112
|
+
// Default to new location (will be created)
|
|
113
|
+
return coralDir;
|
|
114
|
+
}
|
|
115
|
+
return resolve(homedir(), '.coral', 'projects');
|
|
94
116
|
}
|
|
95
117
|
/**
|
|
96
|
-
* List all available pipelines.
|
|
118
|
+
* List all available pipelines across all projects (or for a specific project).
|
|
97
119
|
*/
|
|
98
|
-
export function listPipelines(
|
|
99
|
-
const dir = getPipelinesDir(cwd);
|
|
100
|
-
if (!existsSync(dir))
|
|
101
|
-
return [];
|
|
102
|
-
const files = readdirSync(dir).filter(f => f.endsWith('.yaml') || f.endsWith('.yml'));
|
|
120
|
+
export function listPipelines(projectName) {
|
|
103
121
|
const pipelines = [];
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
122
|
+
const projectsDir = resolve(homedir(), '.coral', 'projects');
|
|
123
|
+
// Collect pipeline dirs to scan
|
|
124
|
+
const pipelineDirs = [];
|
|
125
|
+
if (projectName) {
|
|
126
|
+
const dir = getPipelinesDir(projectName);
|
|
127
|
+
if (existsSync(dir))
|
|
128
|
+
pipelineDirs.push(dir);
|
|
129
|
+
}
|
|
130
|
+
else if (existsSync(projectsDir)) {
|
|
131
|
+
// Scan all projects
|
|
132
|
+
for (const entry of readdirSync(projectsDir, { withFileTypes: true })) {
|
|
133
|
+
if (!entry.isDirectory())
|
|
134
|
+
continue;
|
|
135
|
+
const dir = resolve(projectsDir, entry.name, 'pipelines');
|
|
136
|
+
if (existsSync(dir))
|
|
137
|
+
pipelineDirs.push(dir);
|
|
115
138
|
}
|
|
116
|
-
|
|
117
|
-
|
|
139
|
+
}
|
|
140
|
+
for (const dir of pipelineDirs) {
|
|
141
|
+
const files = readdirSync(dir).filter(f => f.endsWith('.yaml') || f.endsWith('.yml'));
|
|
142
|
+
for (const file of files) {
|
|
143
|
+
const filePath = resolve(dir, file);
|
|
144
|
+
try {
|
|
145
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
146
|
+
const parsed = parseYaml(raw);
|
|
147
|
+
pipelines.push({
|
|
148
|
+
name: parsed.name || basename(file, file.endsWith('.yaml') ? '.yaml' : '.yml'),
|
|
149
|
+
description: parsed.description || '',
|
|
150
|
+
mode: parsed.mode || 'steps',
|
|
151
|
+
filePath,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
catch { /* skip */ }
|
|
118
155
|
}
|
|
119
156
|
}
|
|
120
157
|
return pipelines;
|
|
@@ -140,7 +177,7 @@ export function loadPipelineConfig(name, cwd) {
|
|
|
140
177
|
const available = listPipelines(cwd);
|
|
141
178
|
const names = available.map(p => p.name).join(', ');
|
|
142
179
|
throw new Error(`Pipeline "${name}" not found in ${dir}\n` +
|
|
143
|
-
(names ? `Available pipelines: ${names}` : 'No pipelines found. Create
|
|
180
|
+
(names ? `Available pipelines: ${names}` : 'No pipelines found. Create ~/.coral/projects/<project>/pipelines/<name>.yaml'));
|
|
144
181
|
}
|
|
145
182
|
const raw = readFileSync(filePath, 'utf-8');
|
|
146
183
|
let parsed;
|