@coralai/sps-cli 0.62.1 → 0.63.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/dist/commands/cardAdd.d.ts.map +1 -1
- package/dist/commands/cardAdd.js +14 -2
- package/dist/commands/cardAdd.js.map +1 -1
- package/dist/commands/projectInit.d.ts +1 -10
- package/dist/commands/projectInit.d.ts.map +1 -1
- package/dist/commands/projectInit.js +0 -26
- package/dist/commands/projectInit.js.map +1 -1
- package/dist/commands/skillCommand.d.ts.map +1 -1
- package/dist/commands/skillCommand.js +76 -4
- package/dist/commands/skillCommand.js.map +1 -1
- package/dist/commands/tick.d.ts +0 -2
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +2 -61
- package/dist/commands/tick.js.map +1 -1
- package/dist/console/index.d.ts.map +1 -1
- package/dist/console/index.js +0 -2
- package/dist/console/index.js.map +1 -1
- package/dist/console/routes/cards.d.ts.map +1 -1
- package/dist/console/routes/cards.js +1 -0
- package/dist/console/routes/cards.js.map +1 -1
- package/dist/console/routes/chat.d.ts.map +1 -1
- package/dist/console/routes/chat.js +3 -4
- package/dist/console/routes/chat.js.map +1 -1
- package/dist/console/routes/fs.js +8 -0
- package/dist/console/routes/fs.js.map +1 -1
- package/dist/console/routes/projects.d.ts.map +1 -1
- package/dist/console/routes/projects.js +0 -3
- package/dist/console/routes/projects.js.map +1 -1
- package/dist/console/routes/workers.d.ts.map +1 -1
- package/dist/console/routes/workers.js +4 -36
- package/dist/console/routes/workers.js.map +1 -1
- package/dist/console-assets/assets/index-DdWQnwf0.js +849 -0
- package/dist/console-assets/assets/index-kvQdjMeT.css +1 -0
- package/dist/console-assets/fonts/saiba-45.woff2 +0 -0
- package/dist/console-assets/index.html +2 -2
- package/dist/core/config.d.ts +2 -4
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +0 -2
- package/dist/core/config.js.map +1 -1
- package/dist/core/intel/types.d.ts +2 -51
- package/dist/core/intel/types.d.ts.map +1 -1
- package/dist/core/intel/types.js +2 -2
- package/dist/core/skills/SkillsManager.d.ts +7 -1
- package/dist/core/skills/SkillsManager.d.ts.map +1 -1
- package/dist/core/skills/SkillsManager.js +60 -15
- package/dist/core/skills/SkillsManager.js.map +1 -1
- package/dist/core/skills/match/embeddingRecall.d.ts +4 -0
- package/dist/core/skills/match/embeddingRecall.d.ts.map +1 -0
- package/dist/core/skills/match/embeddingRecall.js +101 -0
- package/dist/core/skills/match/embeddingRecall.js.map +1 -0
- package/dist/core/skills/match/skillEnrich.d.ts +36 -0
- package/dist/core/skills/match/skillEnrich.d.ts.map +1 -0
- package/dist/core/skills/match/skillEnrich.js +90 -0
- package/dist/core/skills/match/skillEnrich.js.map +1 -0
- package/dist/core/skills/match/skillMatcher.d.ts +26 -0
- package/dist/core/skills/match/skillMatcher.d.ts.map +1 -0
- package/dist/core/skills/match/skillMatcher.js +69 -0
- package/dist/core/skills/match/skillMatcher.js.map +1 -0
- package/dist/core/skills/match/skillSelect.d.ts +20 -0
- package/dist/core/skills/match/skillSelect.d.ts.map +1 -0
- package/dist/core/skills/match/skillSelect.js +55 -0
- package/dist/core/skills/match/skillSelect.js.map +1 -0
- package/dist/core/skills/registration.d.ts +32 -0
- package/dist/core/skills/registration.d.ts.map +1 -0
- package/dist/core/skills/registration.js +141 -0
- package/dist/core/skills/registration.js.map +1 -0
- package/dist/core/skills/types.d.ts +10 -0
- package/dist/core/skills/types.d.ts.map +1 -1
- package/dist/engines/StageEngine.d.ts +13 -2
- package/dist/engines/StageEngine.d.ts.map +1 -1
- package/dist/engines/StageEngine.js +42 -23
- package/dist/engines/StageEngine.js.map +1 -1
- package/dist/im/router.d.ts +1 -1
- package/dist/im/router.d.ts.map +1 -1
- package/dist/im/router.js +3 -10
- package/dist/im/router.js.map +1 -1
- package/dist/interfaces/TaskBackend.d.ts +2 -0
- package/dist/interfaces/TaskBackend.d.ts.map +1 -1
- package/dist/main.js +2 -46
- package/dist/main.js.map +1 -1
- package/dist/providers/LLMClient.d.ts +1 -22
- package/dist/providers/LLMClient.d.ts.map +1 -1
- package/dist/providers/LLMClient.js +5 -90
- package/dist/providers/LLMClient.js.map +1 -1
- package/dist/providers/MarkdownTaskBackend.d.ts +1 -0
- package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
- package/dist/providers/MarkdownTaskBackend.js +8 -0
- package/dist/providers/MarkdownTaskBackend.js.map +1 -1
- package/dist/providers/llm/chatTools.d.ts +0 -5
- package/dist/providers/llm/chatTools.d.ts.map +1 -1
- package/dist/providers/llm/chatTools.js +4 -9
- package/dist/providers/llm/chatTools.js.map +1 -1
- package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -1
- package/dist/providers/mcp/spsMcpServer.js +42 -11
- package/dist/providers/mcp/spsMcpServer.js.map +1 -1
- package/dist/providers/media/mediaProviders.d.ts +1 -1
- package/dist/providers/media/mediaProviders.d.ts.map +1 -1
- package/dist/providers/media/mediaProviders.js +1 -1
- package/dist/providers/media/mediaProviders.js.map +1 -1
- package/dist/providers/models/utilityModels.d.ts +26 -0
- package/dist/providers/models/utilityModels.d.ts.map +1 -0
- package/dist/providers/models/utilityModels.js +75 -0
- package/dist/providers/models/utilityModels.js.map +1 -0
- package/dist/services/CardService.d.ts +6 -0
- package/dist/services/CardService.d.ts.map +1 -1
- package/dist/services/CardService.js +17 -0
- package/dist/services/CardService.js.map +1 -1
- package/dist/services/ProjectService.d.ts +1 -9
- package/dist/services/ProjectService.d.ts.map +1 -1
- package/dist/services/ProjectService.js +0 -1
- package/dist/services/ProjectService.js.map +1 -1
- package/dist/services/WorkerService.d.ts +0 -8
- package/dist/services/WorkerService.d.ts.map +1 -1
- package/dist/services/WorkerService.js +2 -72
- package/dist/services/WorkerService.js.map +1 -1
- package/dist/services/container.d.ts +0 -2
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/container.js +0 -2
- package/dist/services/container.js.map +1 -1
- package/dist/shared/types.d.ts +6 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/checklist-review/SKILL.md +2 -0
- package/skills/probe-playbook/SKILL.md +10 -1
- package/skills/registry.yaml +8 -1
- package/skills/skill-creator/SKILL.md +14 -1
- package/skills/sps-chat/SKILL.md +33 -11
- package/skills/sps-pipeline/SKILL.md +26 -4
- package/skills/sps-subagent/SKILL.md +13 -4
- package/skills/visual-rubric/SKILL.md +2 -0
- package/skills/writer/SKILL.md +2 -0
- package/dist/console/routes/smartarrange.d.ts +0 -4
- package/dist/console/routes/smartarrange.d.ts.map +0 -1
- package/dist/console/routes/smartarrange.js +0 -107
- package/dist/console/routes/smartarrange.js.map +0 -1
- package/dist/console-assets/assets/index-B5aqtaR6.js +0 -859
- package/dist/console-assets/assets/index-IdqQLk1r.css +0 -10
- package/dist/core/intel/planStore.d.ts +0 -23
- package/dist/core/intel/planStore.d.ts.map +0 -1
- package/dist/core/intel/planStore.js +0 -67
- package/dist/core/intel/planStore.js.map +0 -1
- package/dist/engines/SmartArrangeEngine.d.ts +0 -75
- package/dist/engines/SmartArrangeEngine.d.ts.map +0 -1
- package/dist/engines/SmartArrangeEngine.js +0 -112
- package/dist/engines/SmartArrangeEngine.js.map +0 -1
- package/dist/engines/smartarrange/PipelineWorkerExec.d.ts +0 -37
- package/dist/engines/smartarrange/PipelineWorkerExec.d.ts.map +0 -1
- package/dist/engines/smartarrange/PipelineWorkerExec.js +0 -43
- package/dist/engines/smartarrange/PipelineWorkerExec.js.map +0 -1
- package/dist/engines/smartarrange/cardSink.d.ts +0 -29
- package/dist/engines/smartarrange/cardSink.d.ts.map +0 -1
- package/dist/engines/smartarrange/cardSink.js +0 -43
- package/dist/engines/smartarrange/cardSink.js.map +0 -1
- package/dist/engines/smartarrange/runner.d.ts +0 -24
- package/dist/engines/smartarrange/runner.d.ts.map +0 -1
- package/dist/engines/smartarrange/runner.js +0 -72
- package/dist/engines/smartarrange/runner.js.map +0 -1
- package/dist/engines/smartarrange/screenshot.d.ts +0 -5
- package/dist/engines/smartarrange/screenshot.d.ts.map +0 -1
- package/dist/engines/smartarrange/screenshot.js +0 -117
- package/dist/engines/smartarrange/screenshot.js.map +0 -1
- package/dist/services/SmartArrangeService.d.ts +0 -22
- package/dist/services/SmartArrangeService.d.ts.map +0 -1
- package/dist/services/SmartArrangeService.js +0 -58
- package/dist/services/SmartArrangeService.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SmartArrangeEngine.js","sourceRoot":"","sources":["../../src/engines/SmartArrangeEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module engines/smartarrange/PipelineWorkerExec
|
|
3
|
-
* @description WorkerExec 实现(归一路线):把 smartArrange 的执行交给 pipeline(StageEngine/worker-manager),
|
|
4
|
-
* 自己只读看板状态、不 spawn worker、不保活会话(执行由 pipeline 独立完成)。
|
|
5
|
-
* - dispatch: no-op —— 卡已由 CardSink 落进 Backlog,pipeline 的 scheduler/StageEngine 自取、派 worker
|
|
6
|
-
* (含 skills 白名单 / durable resume / 重试 / 监控,全白拿)。
|
|
7
|
-
* - sync: 每 tick 读看板,缓存 busy(有卡在 Backlog 或在途)+ 新完成卡(Done 里未消费的)。
|
|
8
|
-
* - isBusy / takeLastResult: 返回 sync 缓存。单轨:一次 ≤1 张。
|
|
9
|
-
* - stop: no-op —— worker 生命周期由 pipeline 管,tick 完成判定收尾。
|
|
10
|
-
* 见 docs/design/smartarrange-on-pipeline.md。
|
|
11
|
-
* @layer engine
|
|
12
|
-
* @boundedContext smartarrange
|
|
13
|
-
*/
|
|
14
|
-
import type { TaskBackend } from '../../interfaces/TaskBackend.js';
|
|
15
|
-
import type { ProjectPipelineAdapter } from '../../core/projectPipelineAdapter.js';
|
|
16
|
-
import type { WorkerExec } from '../SmartArrangeEngine.js';
|
|
17
|
-
type Result = {
|
|
18
|
-
seq: number;
|
|
19
|
-
title: string;
|
|
20
|
-
execStatus: 'completed' | 'failed';
|
|
21
|
-
};
|
|
22
|
-
export declare class PipelineWorkerExec implements WorkerExec {
|
|
23
|
-
private readonly backend;
|
|
24
|
-
private readonly adapter;
|
|
25
|
-
private busy;
|
|
26
|
-
private pending;
|
|
27
|
-
private readonly reviewed;
|
|
28
|
-
constructor(backend: TaskBackend, adapter: ProjectPipelineAdapter);
|
|
29
|
-
/** 读看板:busy = 有卡不在 Done/Planning(Backlog 排队 或 在途);新完成 = Done 里未评审过的(单轨取一张)。 */
|
|
30
|
-
sync(): Promise<void>;
|
|
31
|
-
isBusy(): boolean;
|
|
32
|
-
takeLastResult(): Result | null;
|
|
33
|
-
dispatch(): void;
|
|
34
|
-
stop(): Promise<void>;
|
|
35
|
-
}
|
|
36
|
-
export {};
|
|
37
|
-
//# sourceMappingURL=PipelineWorkerExec.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineWorkerExec.d.ts","sourceRoot":"","sources":["../../../src/engines/smartarrange/PipelineWorkerExec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,KAAK,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,WAAW,GAAG,QAAQ,CAAA;CAAE,CAAC;AAEjF,qBAAa,kBAAmB,YAAW,UAAU;IAMjD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAG3B,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,sBAAsB;IAGlD,+EAA+E;IACzE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B,MAAM,IAAI,OAAO;IAIjB,cAAc,IAAI,MAAM,GAAG,IAAI;IAM/B,QAAQ,IAAI,IAAI;IAIV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export class PipelineWorkerExec {
|
|
2
|
-
backend;
|
|
3
|
-
adapter;
|
|
4
|
-
busy = false;
|
|
5
|
-
pending = null;
|
|
6
|
-
reviewed = new Set();
|
|
7
|
-
constructor(backend, adapter) {
|
|
8
|
-
this.backend = backend;
|
|
9
|
-
this.adapter = adapter;
|
|
10
|
-
}
|
|
11
|
-
/** 读看板:busy = 有卡不在 Done/Planning(Backlog 排队 或 在途);新完成 = Done 里未评审过的(单轨取一张)。 */
|
|
12
|
-
async sync() {
|
|
13
|
-
const all = await this.backend.listAll();
|
|
14
|
-
const done = this.adapter.states.done;
|
|
15
|
-
const planning = this.adapter.states.planning;
|
|
16
|
-
this.busy = all.some((c) => c.state !== done && c.state !== planning);
|
|
17
|
-
if (!this.pending) {
|
|
18
|
-
const doneCard = all.find((c) => c.state === done && !this.reviewed.has(Number(c.seq)));
|
|
19
|
-
if (doneCard) {
|
|
20
|
-
const seq = Number(doneCard.seq);
|
|
21
|
-
this.reviewed.add(seq);
|
|
22
|
-
// pipeline 把 worker 跑完 = 卡进 Done;质量好坏由 orchestrator 的 LLM 评审另判。
|
|
23
|
-
// NEEDS-FIX(pipeline 自己判失败时打)映射成 failed,否则 completed。
|
|
24
|
-
this.pending = { seq, title: doneCard.title, execStatus: doneCard.labels?.includes('NEEDS-FIX') ? 'failed' : 'completed' };
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
isBusy() {
|
|
29
|
-
return this.busy;
|
|
30
|
-
}
|
|
31
|
-
takeLastResult() {
|
|
32
|
-
const r = this.pending;
|
|
33
|
-
this.pending = null;
|
|
34
|
-
return r;
|
|
35
|
-
}
|
|
36
|
-
dispatch() {
|
|
37
|
-
// no-op:卡已由 CardSink 落进 Backlog,pipeline 自取。
|
|
38
|
-
}
|
|
39
|
-
async stop() {
|
|
40
|
-
// no-op:worker 由 pipeline 管理生命周期。
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=PipelineWorkerExec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PipelineWorkerExec.js","sourceRoot":"","sources":["../../../src/engines/smartarrange/PipelineWorkerExec.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,kBAAkB;IAMV;IACA;IANX,IAAI,GAAG,KAAK,CAAC;IACb,OAAO,GAAkB,IAAI,CAAC;IACrB,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9C,YACmB,OAAoB,EACpB,OAA+B;QAD/B,YAAO,GAAP,OAAO,CAAa;QACpB,YAAO,GAAP,OAAO,CAAwB;IAC/C,CAAC;IAEJ,+EAA+E;IAC/E,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvB,gEAAgE;gBAChE,sDAAsD;gBACtD,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7H,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,cAAc;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,QAAQ;QACN,6CAA6C;IAC/C,CAAC;IAED,KAAK,CAAC,IAAI;QACR,kCAAkC;IACpC,CAAC;CACF"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module engines/smartarrange/cardSink
|
|
3
|
-
* @description CardSink 实现:smartArrange 的动态卡**统一为 markdown 卡**(cards/<state>/*.md),
|
|
4
|
-
* 与看板同一份数据 —— 监工动态产的卡也是 markdown 文件,看板/编排页都读它。
|
|
5
|
-
* create=生在 Inprogress(已派发);markResult=worker 跑完移 Done(失败则 Done+NEEDS-FIX)。
|
|
6
|
-
* prompt 写进「## 描述」,派发/结果时间写进「## 日志」(服务器本地时间)。
|
|
7
|
-
* @layer engine
|
|
8
|
-
* @boundedContext smartarrange
|
|
9
|
-
*/
|
|
10
|
-
import type { TaskBackend } from '../../interfaces/TaskBackend.js';
|
|
11
|
-
import type { CardSink } from '../SmartArrangeEngine.js';
|
|
12
|
-
export declare class IntelCardSink implements CardSink {
|
|
13
|
-
private readonly backend;
|
|
14
|
-
private readonly activeState;
|
|
15
|
-
private readonly doneState;
|
|
16
|
-
constructor(backend: TaskBackend, activeState?: string, doneState?: string);
|
|
17
|
-
/** 动态落一张 markdown 卡(生在 Inprogress = 已派发),返回 seq。 */
|
|
18
|
-
create(card: {
|
|
19
|
-
title: string;
|
|
20
|
-
prompt: string;
|
|
21
|
-
skills: string[];
|
|
22
|
-
taskId: string;
|
|
23
|
-
}): Promise<{
|
|
24
|
-
seq: number;
|
|
25
|
-
}>;
|
|
26
|
-
/** worker 跑完上一卡:completed → 移 Done;failed → Done + NEEDS-FIX 标记。 */
|
|
27
|
-
markResult(seq: number, execStatus: 'completed' | 'failed'): Promise<void>;
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=cardSink.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cardSink.d.ts","sourceRoot":"","sources":["../../../src/engines/smartarrange/cardSink.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,qBAAa,aAAc,YAAW,QAAQ;IAE1C,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,OAAO,EAAE,WAAW,EACpB,WAAW,SAAe,EAC1B,SAAS,SAAS;IAGrC,oDAAoD;IAC9C,MAAM,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAYjH,oEAAoE;IAC9D,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAejF"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export class IntelCardSink {
|
|
2
|
-
backend;
|
|
3
|
-
activeState;
|
|
4
|
-
doneState;
|
|
5
|
-
constructor(backend, activeState = 'Inprogress', doneState = 'Done') {
|
|
6
|
-
this.backend = backend;
|
|
7
|
-
this.activeState = activeState;
|
|
8
|
-
this.doneState = doneState;
|
|
9
|
-
}
|
|
10
|
-
/** 动态落一张 markdown 卡(生在 Inprogress = 已派发),返回 seq。 */
|
|
11
|
-
async create(card) {
|
|
12
|
-
const created = await this.backend.create(card.title, card.prompt, this.activeState);
|
|
13
|
-
const seq = Number(created.seq);
|
|
14
|
-
try {
|
|
15
|
-
if (card.skills?.length)
|
|
16
|
-
await this.backend.setSkills(created.seq, card.skills);
|
|
17
|
-
await this.backend.comment(created.seq, `[smartArrange] 派发卡片(task ${card.taskId})`);
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
/* 元数据写入失败不阻塞派卡 */
|
|
21
|
-
}
|
|
22
|
-
return { seq };
|
|
23
|
-
}
|
|
24
|
-
/** worker 跑完上一卡:completed → 移 Done;failed → Done + NEEDS-FIX 标记。 */
|
|
25
|
-
async markResult(seq, execStatus) {
|
|
26
|
-
const s = String(seq);
|
|
27
|
-
try {
|
|
28
|
-
if (execStatus === 'completed') {
|
|
29
|
-
await this.backend.comment(s, '[smartArrange] worker 完成');
|
|
30
|
-
await this.backend.move(s, this.doneState);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
await this.backend.addLabel(s, 'NEEDS-FIX');
|
|
34
|
-
await this.backend.comment(s, '[smartArrange] worker 失败');
|
|
35
|
-
await this.backend.move(s, this.doneState);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
/* 状态流转失败不阻塞编排 */
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=cardSink.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cardSink.js","sourceRoot":"","sources":["../../../src/engines/smartarrange/cardSink.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,aAAa;IAEL;IACA;IACA;IAHnB,YACmB,OAAoB,EACpB,cAAc,YAAY,EAC1B,YAAY,MAAM;QAFlB,YAAO,GAAP,OAAO,CAAa;QACpB,gBAAW,GAAX,WAAW,CAAe;QAC1B,cAAS,GAAT,SAAS,CAAS;IAClC,CAAC;IAEJ,oDAAoD;IACpD,KAAK,CAAC,MAAM,CAAC,IAAyE;QACpF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM;gBAAE,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAChF,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,4BAA4B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACtF,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,oEAAoE;IACpE,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,UAAkC;QAC9D,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;gBAC1D,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;gBAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;gBAC1D,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { type ProjectConfig } from '../../core/config.js';
|
|
2
|
-
export interface SmartArrangeRunnerCtx {
|
|
3
|
-
project: string;
|
|
4
|
-
cwd: string;
|
|
5
|
-
runtimeDir: string;
|
|
6
|
-
logsDir: string;
|
|
7
|
-
maxRounds: number;
|
|
8
|
-
config: ProjectConfig;
|
|
9
|
-
log?: (m: string) => void;
|
|
10
|
-
emit?: (ev: {
|
|
11
|
-
type: string;
|
|
12
|
-
[k: string]: unknown;
|
|
13
|
-
}) => void;
|
|
14
|
-
}
|
|
15
|
-
export declare class SmartArrangeRunner {
|
|
16
|
-
private readonly exec;
|
|
17
|
-
private readonly engine;
|
|
18
|
-
constructor(ctx: SmartArrangeRunnerCtx);
|
|
19
|
-
tick(): Promise<void>;
|
|
20
|
-
approve(): void;
|
|
21
|
-
/** 收尾杀 worker 进程(done/halted 时引擎已调;这里供外部超时收尾)。 */
|
|
22
|
-
stop(): Promise<void>;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/engines/smartarrange/runner.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAS1D,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CAC7D;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;gBAEhC,GAAG,EAAE,qBAAqB;IAgChC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,OAAO,IAAI,IAAI;IAIf,kDAAkD;IAC5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module engines/smartarrange/runner
|
|
3
|
-
* @description SmartArrange 组装层:把 LLMClient / CardSink / PipelineWorkerExec 装进 SmartArrangeEngine,
|
|
4
|
-
* 暴露 tick()/approve() 给 tick 命令调。执行统一交给 pipeline(归一路线,见 docs/design/smartarrange-on-pipeline.md)。
|
|
5
|
-
* @layer engine
|
|
6
|
-
* @boundedContext smartarrange
|
|
7
|
-
*/
|
|
8
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
9
|
-
import { join } from 'node:path';
|
|
10
|
-
import { loadAgentsConfig } from '../../core/intel/agentsConfig.js';
|
|
11
|
-
import { LLMClient } from '../../providers/LLMClient.js';
|
|
12
|
-
import { createTaskBackend } from '../../providers/registry.js';
|
|
13
|
-
import { SmartArrangeEngine } from '../SmartArrangeEngine.js';
|
|
14
|
-
import { PipelineWorkerExec } from './PipelineWorkerExec.js';
|
|
15
|
-
import { IntelCardSink } from './cardSink.js';
|
|
16
|
-
import { ProjectPipelineAdapter } from '../../core/projectPipelineAdapter.js';
|
|
17
|
-
import { captureScreenshot } from './screenshot.js';
|
|
18
|
-
export class SmartArrangeRunner {
|
|
19
|
-
exec;
|
|
20
|
-
engine;
|
|
21
|
-
constructor(ctx) {
|
|
22
|
-
const agents = loadAgentsConfig();
|
|
23
|
-
// 项目级模型覆盖(只覆盖 model 串,agent/mode/provider 沿用全局默认);空=用全局。
|
|
24
|
-
if (ctx.config.WORKER_MODEL)
|
|
25
|
-
agents.worker = { ...agents.worker, model: ctx.config.WORKER_MODEL };
|
|
26
|
-
if (ctx.config.SA_REVIEWER_MODEL)
|
|
27
|
-
agents.reviewer = { ...agents.reviewer, model: ctx.config.SA_REVIEWER_MODEL };
|
|
28
|
-
const llm = new LLMClient(agents, ctx.cwd); // 传 cwd → orchestrate 挂只读探查工具
|
|
29
|
-
const taskBackend = createTaskBackend(ctx.config); // 卡 = markdown 文件,与看板同源
|
|
30
|
-
// 归一:卡落 Backlog → pipeline 的 scheduler/StageEngine 自取、派 worker(skills/durable resume/重试/监控全白拿);
|
|
31
|
-
// exec 只读看板(busy/新完成),不 spawn、不保活。worker 的 memory/prompt 由 StageEngine 侧负责。
|
|
32
|
-
const adapter = new ProjectPipelineAdapter(ctx.config, ctx.cwd);
|
|
33
|
-
// 图谱增量同步不在此挂:卡片完成走共享的 StageEngine.releaseAndDone,那里同步阻塞 await syncGraph
|
|
34
|
-
// (pipeline 与 smartArrange 都跑在同一 StageEngine 上),两模式一处覆盖、不重复。
|
|
35
|
-
const cards = new IntelCardSink(taskBackend, adapter.states.backlog);
|
|
36
|
-
this.exec = new PipelineWorkerExec(taskBackend, adapter);
|
|
37
|
-
ctx.log?.('[smartArrange] 执行交给 pipeline,orchestrator 只产卡+评审');
|
|
38
|
-
this.engine = new SmartArrangeEngine({
|
|
39
|
-
llm,
|
|
40
|
-
cards,
|
|
41
|
-
exec: this.exec,
|
|
42
|
-
planFile: join(ctx.runtimeDir, 'plan.json'),
|
|
43
|
-
sessionFile: join(ctx.runtimeDir, 'session.json'),
|
|
44
|
-
readGoal: () => readGoal(ctx.cwd),
|
|
45
|
-
maxRounds: ctx.maxRounds,
|
|
46
|
-
// 自门控:非游戏/无 html 入口 → 返 null 不启 browser;有入口才截图预喂(见 screenshot.ts)
|
|
47
|
-
captureScreenshot: () => captureScreenshot(ctx.cwd),
|
|
48
|
-
log: ctx.log,
|
|
49
|
-
emit: ctx.emit,
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
async tick() {
|
|
53
|
-
await this.engine.tick(); // worker session 由 exec.dispatch lazy spawn(planning/待确认阶段不 spawn)
|
|
54
|
-
}
|
|
55
|
-
approve() {
|
|
56
|
-
this.engine.approvePlan();
|
|
57
|
-
}
|
|
58
|
-
/** 收尾杀 worker 进程(done/halted 时引擎已调;这里供外部超时收尾)。 */
|
|
59
|
-
async stop() {
|
|
60
|
-
await this.exec.stop();
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function readGoal(cwd) {
|
|
64
|
-
const f = join(cwd, 'docs', 'GOAL.md');
|
|
65
|
-
try {
|
|
66
|
-
return existsSync(f) ? readFileSync(f, 'utf-8').trim() : '';
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
return '';
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/engines/smartarrange/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/** 找游戏 html 入口(常见位置);无 → 非游戏项目,返 null。 */
|
|
2
|
-
export declare function findGameEntry(cwd: string): string | null;
|
|
3
|
-
/** 截一张(尽量进实战态的)游玩截图 → data URL;任何失败返 null。 */
|
|
4
|
-
export declare function captureScreenshot(cwd: string): Promise<string | null>;
|
|
5
|
-
//# sourceMappingURL=screenshot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/engines/smartarrange/screenshot.ts"],"names":[],"mappings":"AAcA,0CAA0C;AAC1C,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMxD;AAuDD,8CAA8C;AAC9C,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAkC3E"}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module engines/smartarrange/screenshot
|
|
3
|
-
* @description 截图证据源(游戏类):起一个本地静态 HTTP server serve 游戏入口所在目录,playwright
|
|
4
|
-
* 经 http:// 打开、尝试驱动进实战、截图 → data URL,预喂给 orchestrator(vision)。
|
|
5
|
-
* **必须 serve-root(非 file://)**:Vite/Phaser 等 ESM/绝对路径/fetch 游戏在 file:// 下跑不起来。
|
|
6
|
-
* 优雅降级:无 html 入口 / 无 browser / 启动失败 → 返回 null,绝不阻塞编排。
|
|
7
|
-
* @layer engine
|
|
8
|
-
* @boundedContext smartarrange
|
|
9
|
-
*/
|
|
10
|
-
import { createServer } from 'node:http';
|
|
11
|
-
import { existsSync } from 'node:fs';
|
|
12
|
-
import { readFile } from 'node:fs/promises';
|
|
13
|
-
import { basename, dirname, extname, join, normalize, resolve } from 'node:path';
|
|
14
|
-
/** 找游戏 html 入口(常见位置);无 → 非游戏项目,返 null。 */
|
|
15
|
-
export function findGameEntry(cwd) {
|
|
16
|
-
for (const rel of ['dist/index.html', 'index.html', 'public/index.html', 'build/index.html']) {
|
|
17
|
-
const f = join(cwd, rel);
|
|
18
|
-
if (existsSync(f))
|
|
19
|
-
return f;
|
|
20
|
-
}
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
const MIME = {
|
|
24
|
-
'.html': 'text/html; charset=utf-8',
|
|
25
|
-
'.js': 'text/javascript; charset=utf-8',
|
|
26
|
-
'.mjs': 'text/javascript; charset=utf-8',
|
|
27
|
-
'.css': 'text/css; charset=utf-8',
|
|
28
|
-
'.json': 'application/json; charset=utf-8',
|
|
29
|
-
'.png': 'image/png',
|
|
30
|
-
'.jpg': 'image/jpeg',
|
|
31
|
-
'.jpeg': 'image/jpeg',
|
|
32
|
-
'.gif': 'image/gif',
|
|
33
|
-
'.webp': 'image/webp',
|
|
34
|
-
'.svg': 'image/svg+xml',
|
|
35
|
-
'.ico': 'image/x-icon',
|
|
36
|
-
'.wasm': 'application/wasm',
|
|
37
|
-
'.mp3': 'audio/mpeg',
|
|
38
|
-
'.ogg': 'audio/ogg',
|
|
39
|
-
'.wav': 'audio/wav',
|
|
40
|
-
'.woff2': 'font/woff2',
|
|
41
|
-
};
|
|
42
|
-
/** 起一个只读静态 server serve `root`,返回 { baseUrl, close }。端口 0 = 系统分配。 */
|
|
43
|
-
function serveDir(root) {
|
|
44
|
-
const safeRoot = resolve(root);
|
|
45
|
-
const server = createServer(async (req, res) => {
|
|
46
|
-
try {
|
|
47
|
-
let p = decodeURIComponent((req.url ?? '/').split('?')[0]);
|
|
48
|
-
if (p.endsWith('/'))
|
|
49
|
-
p += 'index.html';
|
|
50
|
-
const abs = normalize(join(safeRoot, p));
|
|
51
|
-
if (abs !== safeRoot && !abs.startsWith(safeRoot + '/')) {
|
|
52
|
-
res.statusCode = 403;
|
|
53
|
-
res.end('forbidden');
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
const data = await readFile(abs);
|
|
57
|
-
res.setHeader('Content-Type', MIME[extname(abs).toLowerCase()] ?? 'application/octet-stream');
|
|
58
|
-
res.end(data);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
res.statusCode = 404;
|
|
62
|
-
res.end('not found');
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
return new Promise((res) => {
|
|
66
|
-
server.listen(0, '127.0.0.1', () => {
|
|
67
|
-
const addr = server.address();
|
|
68
|
-
const port = typeof addr === 'object' && addr ? addr.port : 0;
|
|
69
|
-
res({
|
|
70
|
-
baseUrl: `http://127.0.0.1:${port}/`,
|
|
71
|
-
close: () => new Promise((r) => server.close(() => r())),
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
/** 截一张(尽量进实战态的)游玩截图 → data URL;任何失败返 null。 */
|
|
77
|
-
export async function captureScreenshot(cwd) {
|
|
78
|
-
const entry = findGameEntry(cwd);
|
|
79
|
-
if (!entry)
|
|
80
|
-
return null;
|
|
81
|
-
let browser;
|
|
82
|
-
let srv;
|
|
83
|
-
try {
|
|
84
|
-
srv = await serveDir(dirname(entry)); // serve 入口所在目录(如 dist/),让绝对路径/模块/fetch 正常
|
|
85
|
-
const url = srv.baseUrl + basename(entry);
|
|
86
|
-
const { chromium } = (await import('playwright-core'));
|
|
87
|
-
browser = await chromium.launch();
|
|
88
|
-
const page = await browser.newPage({ viewport: { width: 480, height: 800 } });
|
|
89
|
-
await page.goto(url, { waitUntil: 'load', timeout: 15_000 });
|
|
90
|
-
await page.waitForTimeout(2000);
|
|
91
|
-
// 通用启发式:点中心 + 喂几个键,尝试从菜单进入实战
|
|
92
|
-
await page.mouse.click(240, 400).catch(() => { });
|
|
93
|
-
for (const k of ['Space', 'Enter', 'ArrowUp'])
|
|
94
|
-
await page.keyboard.press(k).catch(() => { });
|
|
95
|
-
await page.waitForTimeout(2500);
|
|
96
|
-
const buf = await page.screenshot();
|
|
97
|
-
return `data:image/png;base64,${buf.toString('base64')}`;
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
return null; // browser 未装 / 启动失败 → 优雅降级
|
|
101
|
-
}
|
|
102
|
-
finally {
|
|
103
|
-
try {
|
|
104
|
-
await browser?.close();
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
/* noop */
|
|
108
|
-
}
|
|
109
|
-
try {
|
|
110
|
-
await srv?.close();
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
/* noop */
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
//# sourceMappingURL=screenshot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/engines/smartarrange/screenshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { PlanState } from '../core/intel/types.js';
|
|
2
|
-
import { type DomainError } from '../shared/errors.js';
|
|
3
|
-
import { type Result } from '../shared/result.js';
|
|
4
|
-
export declare class SmartArrangeService {
|
|
5
|
-
/** 读当前编排计划(null = 尚无 smartArrange run);供轮询「待批准 / 运行中 / 完成」。 */
|
|
6
|
-
getPlan(project: string): PlanState | null;
|
|
7
|
-
/** 批准首轮任务清单(awaiting-approval → running),让 worker 开跑。幂等:非待批准态直接回当前状态。 */
|
|
8
|
-
approve(project: string): Result<{
|
|
9
|
-
status: string;
|
|
10
|
-
}, DomainError>;
|
|
11
|
-
/**
|
|
12
|
-
* 停掉当前编排运行:planning / awaiting-approval / running → halted。
|
|
13
|
-
* 幂等:已 halted/done 或无 run 时不改,直接回当前状态。
|
|
14
|
-
* 语义保证:SmartArrangeEngine.tick 的 `case 'halted': return` 使下一 tick 直接停、不推进、不复活;
|
|
15
|
-
* tick 的完成判定(status===done||halted)也据此结束循环。故置 halted 后轮询 getPlan 稳定显示 halted,
|
|
16
|
-
* 状态同步不会把停掉的局复活。(worker 进程的收尾由调用方另配 pipelines.stop。)
|
|
17
|
-
*/
|
|
18
|
-
halt(project: string): Result<{
|
|
19
|
-
status: string;
|
|
20
|
-
}, DomainError>;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=SmartArrangeService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SmartArrangeService.d.ts","sourceRoot":"","sources":["../../src/services/SmartArrangeService.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAM3D,qBAAa,mBAAmB;IAC9B,+DAA+D;IAC/D,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI1C,yEAAyE;IACzE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,WAAW,CAAC;IAiBjE;;;;;;OAMG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,WAAW,CAAC;CAgB/D"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module services/SmartArrangeService
|
|
3
|
-
* @description SmartArrange 编排运行的读取 + 人工确认(approve)。把原 console 路由里的 plan 读写
|
|
4
|
-
* 抽成容器方法,供**进程内**调用方(如 gameforge 嵌入 sps-cli)直接调,不经 HTTP。
|
|
5
|
-
* 典型流程:projects.create → pipelines.start →(轮询 getPlan 到 awaiting-approval)→ approve。
|
|
6
|
-
* @layer services
|
|
7
|
-
*/
|
|
8
|
-
import { join } from 'node:path';
|
|
9
|
-
import { loadPlan, savePlan } from '../core/intel/planStore.js';
|
|
10
|
-
import { resolveProjectPaths } from '../core/paths.js';
|
|
11
|
-
import { domainError } from '../shared/errors.js';
|
|
12
|
-
import { err, ok } from '../shared/result.js';
|
|
13
|
-
function planPath(project) {
|
|
14
|
-
return join(resolveProjectPaths(project).runtimeDir, 'intel', 'current', 'plan.json');
|
|
15
|
-
}
|
|
16
|
-
export class SmartArrangeService {
|
|
17
|
-
/** 读当前编排计划(null = 尚无 smartArrange run);供轮询「待批准 / 运行中 / 完成」。 */
|
|
18
|
-
getPlan(project) {
|
|
19
|
-
return loadPlan(planPath(project));
|
|
20
|
-
}
|
|
21
|
-
/** 批准首轮任务清单(awaiting-approval → running),让 worker 开跑。幂等:非待批准态直接回当前状态。 */
|
|
22
|
-
approve(project) {
|
|
23
|
-
const file = planPath(project);
|
|
24
|
-
const plan = loadPlan(file);
|
|
25
|
-
if (!plan) {
|
|
26
|
-
return err(domainError('not-found', 'NO_SMARTARRANGE_RUN', 'no smartArrange run', {
|
|
27
|
-
details: { project },
|
|
28
|
-
}));
|
|
29
|
-
}
|
|
30
|
-
if (plan.status === 'awaiting-approval') {
|
|
31
|
-
plan.status = 'running';
|
|
32
|
-
savePlan(file, plan);
|
|
33
|
-
}
|
|
34
|
-
return ok({ status: plan.status });
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* 停掉当前编排运行:planning / awaiting-approval / running → halted。
|
|
38
|
-
* 幂等:已 halted/done 或无 run 时不改,直接回当前状态。
|
|
39
|
-
* 语义保证:SmartArrangeEngine.tick 的 `case 'halted': return` 使下一 tick 直接停、不推进、不复活;
|
|
40
|
-
* tick 的完成判定(status===done||halted)也据此结束循环。故置 halted 后轮询 getPlan 稳定显示 halted,
|
|
41
|
-
* 状态同步不会把停掉的局复活。(worker 进程的收尾由调用方另配 pipelines.stop。)
|
|
42
|
-
*/
|
|
43
|
-
halt(project) {
|
|
44
|
-
const file = planPath(project);
|
|
45
|
-
const plan = loadPlan(file);
|
|
46
|
-
if (!plan) {
|
|
47
|
-
return err(domainError('not-found', 'NO_SMARTARRANGE_RUN', 'no smartArrange run', {
|
|
48
|
-
details: { project },
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
if (plan.status !== 'halted' && plan.status !== 'done') {
|
|
52
|
-
plan.status = 'halted';
|
|
53
|
-
savePlan(file, plan);
|
|
54
|
-
}
|
|
55
|
-
return ok({ status: plan.status });
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=SmartArrangeService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SmartArrangeService.js","sourceRoot":"","sources":["../../src/services/SmartArrangeService.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAoB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAE3D,SAAS,QAAQ,CAAC,OAAe;IAC/B,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,OAAO,mBAAmB;IAC9B,+DAA+D;IAC/D,OAAO,CAAC,OAAe;QACrB,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,yEAAyE;IACzE,OAAO,CAAC,OAAe;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CACR,WAAW,CAAC,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,EAAE;gBACrE,OAAO,EAAE,EAAE,OAAO,EAAE;aACrB,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,OAAe;QAClB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CACR,WAAW,CAAC,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,EAAE;gBACrE,OAAO,EAAE,EAAE,OAAO,EAAE;aACrB,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACvD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;YACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;CACF"}
|