@coralai/sps-cli 0.77.0 → 0.78.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/assembly/base.yml +5 -0
- package/dist/seams/compat-dsh/index.d.ts.map +1 -1
- package/dist/seams/compat-dsh/index.js +4 -0
- package/dist/seams/compat-dsh/index.js.map +1 -1
- package/dist/seams/compat-dsh/projects.d.ts +48 -0
- package/dist/seams/compat-dsh/projects.d.ts.map +1 -0
- package/dist/seams/compat-dsh/projects.js +59 -0
- package/dist/seams/compat-dsh/projects.js.map +1 -0
- package/dist/seams/events/index.d.ts +14 -0
- package/dist/seams/events/index.d.ts.map +1 -1
- package/dist/seams/events/index.js +14 -0
- package/dist/seams/events/index.js.map +1 -1
- package/dist/seams/projects/index.d.ts +59 -0
- package/dist/seams/projects/index.d.ts.map +1 -0
- package/dist/seams/projects/index.js +35 -0
- package/dist/seams/projects/index.js.map +1 -0
- package/dist/seams/projects-local/index.d.ts +31 -0
- package/dist/seams/projects-local/index.d.ts.map +1 -0
- package/dist/seams/projects-local/index.js +43 -0
- package/dist/seams/projects-local/index.js.map +1 -0
- package/dist/services/container.js +1 -1
- package/dist/services/container.js.map +1 -1
- package/dist/services/defaults.d.ts +11 -0
- package/dist/services/defaults.d.ts.map +1 -1
- package/dist/services/defaults.js +13 -1
- package/dist/services/defaults.js.map +1 -1
- package/package.json +1 -1
package/assembly/base.yml
CHANGED
|
@@ -99,6 +99,11 @@
|
|
|
99
99
|
# 🔴 真源是装配档那一行的 config,**不另起一份** —— 两个真源最难查。
|
|
100
100
|
name: '@coralai/sps-cli/seams/settings'
|
|
101
101
|
|
|
102
|
+
- id: projects
|
|
103
|
+
# 项目注册表(只读):插件能问"有哪些项目、这个项目在哪"。
|
|
104
|
+
# 🔴 v1 不开"建项目" —— 那牵着注册边界那一摊(建项目会改写被认领的树)。
|
|
105
|
+
name: '@coralai/sps-cli/seams/projects-local'
|
|
106
|
+
|
|
102
107
|
- id: events
|
|
103
108
|
# 事件总线:插件订阅"执行侧真的发生了什么"(卡片状态变更等)。
|
|
104
109
|
# 🔴 它不破坏"sps 不主动向上层发消息" —— 事件发给**进程内的插件**,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/compat-dsh/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/compat-dsh/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAiBnD,eAAO,MAAM,IAAI,mBAAmB,CAAC;AACrC,eAAO,MAAM,MAAM,UASlB,CAAC;AAEF,eAAO,MAAM,QAAQ,iBAAO,CAAC;AAC7B,eAAO,MAAM,WAAW,kMAC6B,CAAC;AAEtD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CASxC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ATTACHMENTS } from '../attachments/index.js';
|
|
2
2
|
import { CREDENTIALS } from '../credentials/index.js';
|
|
3
|
+
import { PROJECTS } from '../projects/index.js';
|
|
3
4
|
import { SETTINGS } from '../settings/index.js';
|
|
4
5
|
import { SUBPROCESS } from '../subprocess/index.js';
|
|
5
6
|
import { SYSTEM_PROMPT } from '../system-prompt/index.js';
|
|
@@ -7,6 +8,7 @@ import { TOOLS } from '../tools/index.js';
|
|
|
7
8
|
import { WEBSERVER } from '../webserver/index.js';
|
|
8
9
|
import { DshCredentialsCompat } from './credentials.js';
|
|
9
10
|
import { DshAttachmentsCompat, DshSubprocessCompat } from './misc.js';
|
|
11
|
+
import { DshWorkspaceRegistryCompat } from './projects.js';
|
|
10
12
|
import { DshSettingsCompat } from './settings.js';
|
|
11
13
|
import { DshSystemPromptCompat } from './systemPrompt.js';
|
|
12
14
|
import { DshToolsCompat } from './tools.js';
|
|
@@ -20,6 +22,7 @@ export const inject = [
|
|
|
20
22
|
ATTACHMENTS,
|
|
21
23
|
SETTINGS,
|
|
22
24
|
SYSTEM_PROMPT,
|
|
25
|
+
PROJECTS,
|
|
23
26
|
];
|
|
24
27
|
export const category = '兼容';
|
|
25
28
|
export const description = '让 dsh 插件能在 sps 里跑:把 dsh 的服务名映射到 sps 的实现。只挂对得上的那些。';
|
|
@@ -31,5 +34,6 @@ export function apply(ctx) {
|
|
|
31
34
|
ctx.plugin(DshAttachmentsCompat);
|
|
32
35
|
ctx.plugin(DshSettingsCompat);
|
|
33
36
|
ctx.plugin(DshSystemPromptCompat);
|
|
37
|
+
ctx.plugin(DshWorkspaceRegistryCompat);
|
|
34
38
|
}
|
|
35
39
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/compat-dsh/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,gBAAgB,CAAC;AACrC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK;IACL,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,QAAQ;IACR,aAAa;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/compat-dsh/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,gBAAgB,CAAC;AACrC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK;IACL,WAAW;IACX,SAAS;IACT,UAAU;IACV,WAAW;IACX,QAAQ;IACR,aAAa;IACb,QAAQ;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GACtB,mDAAmD,CAAC;AAEtD,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC3B,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACjC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC/B,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAChC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACjC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC9B,GAAG,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAClC,GAAG,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module seams/compat-dsh/projects
|
|
3
|
+
* @description dsh 的 `ctx.workspaceRegistry` → sps 的 `sps.projects`。
|
|
4
|
+
*
|
|
5
|
+
* @layer seam
|
|
6
|
+
*
|
|
7
|
+
* 🔴 **这一道敢挂,是因为量过调用点、不是照名字猜。**
|
|
8
|
+
* dsh 的 `WorkspaceRegistry` 完整面是
|
|
9
|
+
* `create / get / list / delete / insertBefore / archiveSession / resolveByPath`,
|
|
10
|
+
* 其中 `archiveSession` 是它的 **session 内核**,我们没有那个概念。
|
|
11
|
+
* 但抽样里真正用到它的两个插件**只调了两个方法**:
|
|
12
|
+
* ```
|
|
13
|
+
* dsh-sticky-notes workspaceRegistry.get ×3
|
|
14
|
+
* dsh-session-manager workspaceRegistry.list ×1
|
|
15
|
+
* ```
|
|
16
|
+
* 这两个和我们的项目概念完全对得上 ⇒ 挂。
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ **只挂 get / list。** 插件调 `create` / `archiveSession` 会**当场抛**并说清
|
|
19
|
+
* "这个方法在 sps 里没有对应物" —— 而不是静默返回 undefined。
|
|
20
|
+
* 静默的话表现是"它以为建好了,其实什么也没发生",那种错查不动。
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ 字段名对不齐:dsh 的 workspace 是 `{ id, path, title }`,
|
|
23
|
+
* 我们是 `{ name, repoDir, label }`。这里做**映射**,不是改我们的形状。
|
|
24
|
+
*/
|
|
25
|
+
import { type Context, Service } from '@deepseek-ai/cordis';
|
|
26
|
+
/** dsh 侧看到的形状。 */
|
|
27
|
+
interface DshWorkspace {
|
|
28
|
+
id: string;
|
|
29
|
+
path: string | null;
|
|
30
|
+
title: string | null;
|
|
31
|
+
}
|
|
32
|
+
export declare class DshWorkspaceRegistryCompat extends Service {
|
|
33
|
+
static inject: string[];
|
|
34
|
+
constructor(ctx: Context);
|
|
35
|
+
get(id: string): Promise<DshWorkspace | undefined>;
|
|
36
|
+
list(): Promise<DshWorkspace[]>;
|
|
37
|
+
create(): never;
|
|
38
|
+
delete(): never;
|
|
39
|
+
archiveSession(): never;
|
|
40
|
+
insertBefore(): never;
|
|
41
|
+
}
|
|
42
|
+
declare module '@deepseek-ai/cordis' {
|
|
43
|
+
interface Context {
|
|
44
|
+
workspaceRegistry: DshWorkspaceRegistryCompat;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=projects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/seams/compat-dsh/projects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG5D,kBAAkB;AAClB,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAaD,qBAAa,0BAA2B,SAAQ,OAAO;IACrD,MAAM,CAAC,MAAM,WAAc;gBAEf,GAAG,EAAE,OAAO;IAIlB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAKlD,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIrC,MAAM,IAAI,KAAK;IAGf,MAAM,IAAI,KAAK;IAGf,cAAc,IAAI,KAAK;IAGvB,YAAY,IAAI,KAAK;CAGtB;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,iBAAiB,EAAE,0BAA0B,CAAC;KAC/C;CACF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module seams/compat-dsh/projects
|
|
3
|
+
* @description dsh 的 `ctx.workspaceRegistry` → sps 的 `sps.projects`。
|
|
4
|
+
*
|
|
5
|
+
* @layer seam
|
|
6
|
+
*
|
|
7
|
+
* 🔴 **这一道敢挂,是因为量过调用点、不是照名字猜。**
|
|
8
|
+
* dsh 的 `WorkspaceRegistry` 完整面是
|
|
9
|
+
* `create / get / list / delete / insertBefore / archiveSession / resolveByPath`,
|
|
10
|
+
* 其中 `archiveSession` 是它的 **session 内核**,我们没有那个概念。
|
|
11
|
+
* 但抽样里真正用到它的两个插件**只调了两个方法**:
|
|
12
|
+
* ```
|
|
13
|
+
* dsh-sticky-notes workspaceRegistry.get ×3
|
|
14
|
+
* dsh-session-manager workspaceRegistry.list ×1
|
|
15
|
+
* ```
|
|
16
|
+
* 这两个和我们的项目概念完全对得上 ⇒ 挂。
|
|
17
|
+
*
|
|
18
|
+
* ⚠️ **只挂 get / list。** 插件调 `create` / `archiveSession` 会**当场抛**并说清
|
|
19
|
+
* "这个方法在 sps 里没有对应物" —— 而不是静默返回 undefined。
|
|
20
|
+
* 静默的话表现是"它以为建好了,其实什么也没发生",那种错查不动。
|
|
21
|
+
*
|
|
22
|
+
* ⚠️ 字段名对不齐:dsh 的 workspace 是 `{ id, path, title }`,
|
|
23
|
+
* 我们是 `{ name, repoDir, label }`。这里做**映射**,不是改我们的形状。
|
|
24
|
+
*/
|
|
25
|
+
import { Service } from '@deepseek-ai/cordis';
|
|
26
|
+
import { PROJECTS } from '../projects/index.js';
|
|
27
|
+
function toDsh(p) {
|
|
28
|
+
return { id: p.name, path: p.repoDir, title: p.label };
|
|
29
|
+
}
|
|
30
|
+
function unsupported(method) {
|
|
31
|
+
throw new Error(`workspaceRegistry.${method} 在 sps 里没有对应物(只挂了 get / list)—— ` +
|
|
32
|
+
'要建/删项目请走 sps 的 HTTP API,那条路有注册边界的护栏。');
|
|
33
|
+
}
|
|
34
|
+
export class DshWorkspaceRegistryCompat extends Service {
|
|
35
|
+
static inject = [PROJECTS];
|
|
36
|
+
constructor(ctx) {
|
|
37
|
+
super(ctx, 'workspaceRegistry');
|
|
38
|
+
}
|
|
39
|
+
async get(id) {
|
|
40
|
+
const p = await this.ctx[PROJECTS].get(id);
|
|
41
|
+
return p ? toDsh(p) : undefined;
|
|
42
|
+
}
|
|
43
|
+
async list() {
|
|
44
|
+
return (await this.ctx[PROJECTS].list()).map(toDsh);
|
|
45
|
+
}
|
|
46
|
+
create() {
|
|
47
|
+
return unsupported('create');
|
|
48
|
+
}
|
|
49
|
+
delete() {
|
|
50
|
+
return unsupported('delete');
|
|
51
|
+
}
|
|
52
|
+
archiveSession() {
|
|
53
|
+
return unsupported('archiveSession');
|
|
54
|
+
}
|
|
55
|
+
insertBefore() {
|
|
56
|
+
return unsupported('insertBefore');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/seams/compat-dsh/projects.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AASjE,SAAS,KAAK,CAAC,CAAa;IAC1B,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,kCAAkC;QAC3D,sCAAsC,CACzC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,0BAA2B,SAAQ,OAAO;IACrD,MAAM,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE3B,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,MAAM;QACJ,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM;QACJ,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IACD,cAAc;QACZ,OAAO,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACvC,CAAC;IACD,YAAY;QACV,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC"}
|
|
@@ -20,6 +20,20 @@
|
|
|
20
20
|
* 不为订阅方新增"租户"之类的字段 —— 那等于让多租户从后门进内核。
|
|
21
21
|
* 租户的映射由平台自己做,它本来就知道 project 归谁。判据锁着这一条。
|
|
22
22
|
*
|
|
23
|
+
* ⚠️ **和 `DomainEventBus`(`shared/domainEvents.ts`)是两回事,别混。**
|
|
24
|
+
* 量出来的分工:
|
|
25
|
+
* ```
|
|
26
|
+
* DomainEventBus 只在 **console 进程**里是真的(SseEventBus → /stream/projects),
|
|
27
|
+
* 别处默认 NoopEventBus 直接吞掉;流水线引擎根本不 emit 它 ——
|
|
28
|
+
* console 是靠 chokidar 监听文件补上流水线的变更。
|
|
29
|
+
* sps.events **装配级**,每个进程都有;发在卡片写入漏斗上,
|
|
30
|
+
* 流水线和服务层的变更都收得到。
|
|
31
|
+
* ```
|
|
32
|
+
* ⇒ 它俩作用域不同,不是重复。但**词汇重了**(两边都有 `card.moved`),
|
|
33
|
+
* 而形状不一致:DomainEvent 是 `{project, seq: number, from, to, ts}`,
|
|
34
|
+
* 这里是 `{project, payload:{seq: string, to}}`(没有 `from`,seq 跟着
|
|
35
|
+
* `TaskBackend` 用字符串)。**别假设两边可以互换。**
|
|
36
|
+
*
|
|
23
37
|
* ⚠️ **没有重放、没有缓冲。** 进程没在跑的时候发生的事,订阅者拿不到;
|
|
24
38
|
* 订阅者掉线期间的事也补不回来。**对账走 API**,不是靠事件流 ——
|
|
25
39
|
* 这与「平台 DB 是台账+投影、sps 是执行唯一真源、对账修投影」那条契约一致。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/events/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/events/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE5D,eAAO,MAAM,MAAM,eAAe,CAAC;AAEnC,eAAO,MAAM,QAAQ,iBAAO,CAAC;AAC7B,eAAO,MAAM,WAAW,8NACoB,CAAC;AAE7C,MAAM,WAAW,QAAQ;IACvB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAQlF,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,GAAG,CAAK;gBAEJ,GAAG,EAAE,OAAO;IAIxB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAc7B;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI;IASjE,2BAA2B;IAC3B,IAAI,IAAI;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE;CAG7B;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,YAAY,EAAE,UAAU,CAAC;KAC1B;CACF"}
|
|
@@ -20,6 +20,20 @@
|
|
|
20
20
|
* 不为订阅方新增"租户"之类的字段 —— 那等于让多租户从后门进内核。
|
|
21
21
|
* 租户的映射由平台自己做,它本来就知道 project 归谁。判据锁着这一条。
|
|
22
22
|
*
|
|
23
|
+
* ⚠️ **和 `DomainEventBus`(`shared/domainEvents.ts`)是两回事,别混。**
|
|
24
|
+
* 量出来的分工:
|
|
25
|
+
* ```
|
|
26
|
+
* DomainEventBus 只在 **console 进程**里是真的(SseEventBus → /stream/projects),
|
|
27
|
+
* 别处默认 NoopEventBus 直接吞掉;流水线引擎根本不 emit 它 ——
|
|
28
|
+
* console 是靠 chokidar 监听文件补上流水线的变更。
|
|
29
|
+
* sps.events **装配级**,每个进程都有;发在卡片写入漏斗上,
|
|
30
|
+
* 流水线和服务层的变更都收得到。
|
|
31
|
+
* ```
|
|
32
|
+
* ⇒ 它俩作用域不同,不是重复。但**词汇重了**(两边都有 `card.moved`),
|
|
33
|
+
* 而形状不一致:DomainEvent 是 `{project, seq: number, from, to, ts}`,
|
|
34
|
+
* 这里是 `{project, payload:{seq: string, to}}`(没有 `from`,seq 跟着
|
|
35
|
+
* `TaskBackend` 用字符串)。**别假设两边可以互换。**
|
|
36
|
+
*
|
|
23
37
|
* ⚠️ **没有重放、没有缓冲。** 进程没在跑的时候发生的事,订阅者拿不到;
|
|
24
38
|
* 订阅者掉线期间的事也补不回来。**对账走 API**,不是靠事件流 ——
|
|
25
39
|
* 这与「平台 DB 是台账+投影、sps 是执行唯一真源、对账修投影」那条契约一致。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/events/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/events/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC;AAEnC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GACtB,0CAA0C,CAAC;AAuB7C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC5B,IAAI,GAAU,EAAE,CAAC;IAC1B,GAAG,GAAG,CAAC,CAAC;IAEhB,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACrB,CAAC;IAED;;;;;;OAMG;IACH,IAAI,CAAC,EAAiB;QACpB,MAAM,IAAI,GAAa,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QAC7E,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC9C,IAAI,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACb,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACX,yBAAyB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,MAAc,EAAE,EAA0B;QAClD,MAAM,GAAG,GAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;CACF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module seams/projects
|
|
3
|
+
* @description **项目注册表 seam** —— 插件能问"现在有哪些项目、这个是哪一个"。
|
|
4
|
+
*
|
|
5
|
+
* @layer seam
|
|
6
|
+
*
|
|
7
|
+
* 类型:**甲 · 工厂型**(进程里一个实现)。
|
|
8
|
+
*
|
|
9
|
+
* 🔴 **为什么开这一道**:实测 dsh 那 1725 个插件里,`workspaceRegistry` 是
|
|
10
|
+
* 真实需求(抽样里 2 次),而**它们实际只调 `get` 和 `list`** ——
|
|
11
|
+
* 我去看了调用点,不是照名字猜:
|
|
12
|
+
* `dsh-sticky-notes` 调 `.get` ×3,`dsh-session-manager` 调 `.list` ×1。
|
|
13
|
+
* 这两个恰好和我们的项目概念**完全对得上**,不碰 dsh 的 `archiveSession`
|
|
14
|
+
* (那才是它的 session 内核)。所以这一道跟 `sessions` / `agents` 不是一类:
|
|
15
|
+
* 那两个是"名字对上、东西不同",这个是**同一个东西的一个子集**。
|
|
16
|
+
*
|
|
17
|
+
* 🔴 **v1 只读。** 建项目不开 —— 它牵着注册边界那一摊
|
|
18
|
+
* (`POST /api/projects` 是**建项目**、会改写被认领的树),
|
|
19
|
+
* 让插件顺手建项目是拿一个大得多的口子换一个小得多的便利。
|
|
20
|
+
*
|
|
21
|
+
* ⚠️ **`namespace` 是路径分段,不是权限主体。** 量过:sps 里它的唯一作用是
|
|
22
|
+
* 决定工作区目录布局(`workspaceDir(namespace, id)`),**不参与任何决策**。
|
|
23
|
+
* 所以把它读出来不等于"多租户进内核"。要按租户过滤是平台自己的事 ——
|
|
24
|
+
* 它本来就知道 project 归谁。
|
|
25
|
+
* (这和 `sps.events` 那条"payload 里不许有租户"不冲突:那条禁的是
|
|
26
|
+
* **sps 主动往事件里塞租户**,这里是插件**问** conf 里存着什么。)
|
|
27
|
+
*/
|
|
28
|
+
import { type Context, Service } from '@deepseek-ai/cordis';
|
|
29
|
+
export declare const PROJECTS = "sps.projects";
|
|
30
|
+
/**
|
|
31
|
+
* 项目的**身份**信息 —— 只有 conf 里存着的那些。
|
|
32
|
+
*
|
|
33
|
+
* ⚠️ 刻意**不带卡片/worker 统计**:那些每次都要扫盘算一遍,
|
|
34
|
+
* 而插件多半只是想知道"有哪些、在哪"。要统计走 HTTP API。
|
|
35
|
+
*/
|
|
36
|
+
export interface ProjectRef {
|
|
37
|
+
name: string;
|
|
38
|
+
/** 显示名(conf PROJECT_LABEL)。无则 null。 */
|
|
39
|
+
label: string | null;
|
|
40
|
+
/** 目录布局用的分段(conf NAMESPACE)。见模块头注释:**不是权限主体**。 */
|
|
41
|
+
namespace: string | null;
|
|
42
|
+
/** 创建方标记(conf ORIGIN),如 `sps` / 平台名。 */
|
|
43
|
+
origin: string;
|
|
44
|
+
/** 代码仓目录。没有则 null。 */
|
|
45
|
+
repoDir: string | null;
|
|
46
|
+
}
|
|
47
|
+
export default abstract class ProjectsSeam extends Service {
|
|
48
|
+
constructor(ctx: Context);
|
|
49
|
+
/** 全部项目,按名字排序。 */
|
|
50
|
+
abstract list(): Promise<ProjectRef[]>;
|
|
51
|
+
/** 取一个。**不存在返回 undefined,不抛** —— 插件问"有没有"是正常操作。 */
|
|
52
|
+
abstract get(name: string): Promise<ProjectRef | undefined>;
|
|
53
|
+
}
|
|
54
|
+
declare module '@deepseek-ai/cordis' {
|
|
55
|
+
interface Context {
|
|
56
|
+
'sps.projects': ProjectsSeam;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/projects/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE5D,eAAO,MAAM,QAAQ,iBAAiB,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kDAAkD;IAClD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,YAAa,SAAQ,OAAO;gBAC5C,GAAG,EAAE,OAAO;IAIxB,kBAAkB;IAClB,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAEtC,mDAAmD;IACnD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;CAC5D;AAED,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,OAAO;QACf,cAAc,EAAE,YAAY,CAAC;KAC9B;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module seams/projects
|
|
3
|
+
* @description **项目注册表 seam** —— 插件能问"现在有哪些项目、这个是哪一个"。
|
|
4
|
+
*
|
|
5
|
+
* @layer seam
|
|
6
|
+
*
|
|
7
|
+
* 类型:**甲 · 工厂型**(进程里一个实现)。
|
|
8
|
+
*
|
|
9
|
+
* 🔴 **为什么开这一道**:实测 dsh 那 1725 个插件里,`workspaceRegistry` 是
|
|
10
|
+
* 真实需求(抽样里 2 次),而**它们实际只调 `get` 和 `list`** ——
|
|
11
|
+
* 我去看了调用点,不是照名字猜:
|
|
12
|
+
* `dsh-sticky-notes` 调 `.get` ×3,`dsh-session-manager` 调 `.list` ×1。
|
|
13
|
+
* 这两个恰好和我们的项目概念**完全对得上**,不碰 dsh 的 `archiveSession`
|
|
14
|
+
* (那才是它的 session 内核)。所以这一道跟 `sessions` / `agents` 不是一类:
|
|
15
|
+
* 那两个是"名字对上、东西不同",这个是**同一个东西的一个子集**。
|
|
16
|
+
*
|
|
17
|
+
* 🔴 **v1 只读。** 建项目不开 —— 它牵着注册边界那一摊
|
|
18
|
+
* (`POST /api/projects` 是**建项目**、会改写被认领的树),
|
|
19
|
+
* 让插件顺手建项目是拿一个大得多的口子换一个小得多的便利。
|
|
20
|
+
*
|
|
21
|
+
* ⚠️ **`namespace` 是路径分段,不是权限主体。** 量过:sps 里它的唯一作用是
|
|
22
|
+
* 决定工作区目录布局(`workspaceDir(namespace, id)`),**不参与任何决策**。
|
|
23
|
+
* 所以把它读出来不等于"多租户进内核"。要按租户过滤是平台自己的事 ——
|
|
24
|
+
* 它本来就知道 project 归谁。
|
|
25
|
+
* (这和 `sps.events` 那条"payload 里不许有租户"不冲突:那条禁的是
|
|
26
|
+
* **sps 主动往事件里塞租户**,这里是插件**问** conf 里存着什么。)
|
|
27
|
+
*/
|
|
28
|
+
import { Service } from '@deepseek-ai/cordis';
|
|
29
|
+
export const PROJECTS = 'sps.projects';
|
|
30
|
+
export default class ProjectsSeam extends Service {
|
|
31
|
+
constructor(ctx) {
|
|
32
|
+
super(ctx, PROJECTS);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/projects/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAgB,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAC;AAoBvC,MAAM,CAAC,OAAO,OAAgB,YAAa,SAAQ,OAAO;IACxD,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACvB,CAAC;CAOF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module seams/projects-local
|
|
3
|
+
* @description `sps.projects` 的内建实现:读 `~/.coral/projects/` 下的 conf。
|
|
4
|
+
*
|
|
5
|
+
* @layer seam
|
|
6
|
+
*
|
|
7
|
+
* 🔴 **复用 `ProjectService`,不另写一份读 conf 的代码。**
|
|
8
|
+
* "项目是什么形状"已经有真源了(conf 解析、ORIGIN 的兜底派生、
|
|
9
|
+
* 目录名带后缀时的原始名),再抄一份必漂 —— 而漂了的表现是
|
|
10
|
+
* "插件看到的项目和界面上看到的不一样"。
|
|
11
|
+
*
|
|
12
|
+
* ⚠️ 只取 `ProjectSummary` 里的**身份字段**,丢掉卡片/worker 统计:
|
|
13
|
+
* 那些每次都扫盘,而这道 seam 的用途是"有哪些、在哪"。
|
|
14
|
+
*/
|
|
15
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
16
|
+
import ProjectsSeam, { type ProjectRef } from '../projects/index.js';
|
|
17
|
+
/**
|
|
18
|
+
* 插件页展示用。
|
|
19
|
+
* ⚠️ 写在**实现**里,不是写在契约文件里 —— 元信息读的是**装配档那一行指向的模块**,
|
|
20
|
+
* 而那一行指的是 `projects-local`。放错地方的表现是插件卡上分类空着,
|
|
21
|
+
* 构建和测试都不会说什么。
|
|
22
|
+
*/
|
|
23
|
+
export declare const category = "\u9879\u76EE";
|
|
24
|
+
export declare const description = "\u9879\u76EE\u6CE8\u518C\u8868(\u53EA\u8BFB):\u63D2\u4EF6\u80FD\u95EE\"\u6709\u54EA\u4E9B\u9879\u76EE\u3001\u8FD9\u4E2A\u9879\u76EE\u5728\u54EA\"\u3002";
|
|
25
|
+
export default class LocalProjects extends ProjectsSeam {
|
|
26
|
+
private readonly svc;
|
|
27
|
+
constructor(ctx: Context);
|
|
28
|
+
list(): Promise<ProjectRef[]>;
|
|
29
|
+
get(name: string): Promise<ProjectRef | undefined>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/seams/projects-local/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAKnD,OAAO,YAAY,EAAE,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,iBAAO,CAAC;AAC7B,eAAO,MAAM,WAAW,4JAAkC,CAAC;AAkB3D,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAiB;gBAEzB,GAAG,EAAE,OAAO;IAUT,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAK7B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;CAIlE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SystemClock } from '../../infra/clock.js';
|
|
2
|
+
import { NodeFileSystem } from '../../infra/filesystem.js';
|
|
3
|
+
import { ProjectService } from '../../services/ProjectService.js';
|
|
4
|
+
import { NoopEventBus } from '../../shared/domainEvents.js';
|
|
5
|
+
import ProjectsSeam from '../projects/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* 插件页展示用。
|
|
8
|
+
* ⚠️ 写在**实现**里,不是写在契约文件里 —— 元信息读的是**装配档那一行指向的模块**,
|
|
9
|
+
* 而那一行指的是 `projects-local`。放错地方的表现是插件卡上分类空着,
|
|
10
|
+
* 构建和测试都不会说什么。
|
|
11
|
+
*/
|
|
12
|
+
export const category = '项目';
|
|
13
|
+
export const description = '项目注册表(只读):插件能问"有哪些项目、这个项目在哪"。';
|
|
14
|
+
function toRef(s) {
|
|
15
|
+
return {
|
|
16
|
+
name: s.name,
|
|
17
|
+
label: s.label,
|
|
18
|
+
namespace: s.namespace,
|
|
19
|
+
origin: s.origin,
|
|
20
|
+
repoDir: s.repoDir,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export default class LocalProjects extends ProjectsSeam {
|
|
24
|
+
svc;
|
|
25
|
+
constructor(ctx) {
|
|
26
|
+
super(ctx);
|
|
27
|
+
// 只读用途:事件总线给个 Noop —— 读项目不该产生领域事件。
|
|
28
|
+
this.svc = new ProjectService({
|
|
29
|
+
fs: new NodeFileSystem(),
|
|
30
|
+
clock: new SystemClock(),
|
|
31
|
+
events: new NoopEventBus(),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async list() {
|
|
35
|
+
const r = await this.svc.list();
|
|
36
|
+
return r.ok ? r.value.map(toRef) : [];
|
|
37
|
+
}
|
|
38
|
+
async get(name) {
|
|
39
|
+
const r = await this.svc.get(name);
|
|
40
|
+
return r.ok ? toRef(r.value) : undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/seams/projects-local/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,YAAiC,MAAM,sBAAsB,CAAC;AAErE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC;AAC7B,MAAM,CAAC,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAE3D,SAAS,KAAK,CAAC,CAMd;IACC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,OAAO,EAAE,CAAC,CAAC,OAAO;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,YAAY;IACpC,GAAG,CAAiB;IAErC,YAAY,GAAY;QACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,mCAAmC;QACnC,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC;YAC5B,EAAE,EAAE,IAAI,cAAc,EAAE;YACxB,KAAK,EAAE,IAAI,WAAW,EAAE;YACxB,MAAM,EAAE,IAAI,YAAY,EAAE;SAC3B,CAAC,CAAC;IACL,CAAC;IAEQ,KAAK,CAAC,IAAI;QACjB,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,CAAC;IAEQ,KAAK,CAAC,GAAG,CAAC,IAAY;QAC7B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -42,7 +42,7 @@ export function createContainer(app, opts = {}) {
|
|
|
42
42
|
const clock = opts.clock ?? new SystemClock();
|
|
43
43
|
const events = opts.events ?? new NoopEventBus();
|
|
44
44
|
const spawner = opts.spawner ?? new NodeProcessSpawner();
|
|
45
|
-
const taskBackendFactory = opts.taskBackendFactory ?? new DefaultTaskBackendFactory();
|
|
45
|
+
const taskBackendFactory = opts.taskBackendFactory ?? new DefaultTaskBackendFactory(app['sps.events']);
|
|
46
46
|
const workerExecutor = opts.workerExecutor ?? new DefaultWorkerExecutor(app);
|
|
47
47
|
const pipelineExecutor = opts.pipelineExecutor ?? new DefaultPipelineExecutor(spawner, app);
|
|
48
48
|
const chatExecutor = opts.chatExecutor ?? new DefaultChatExecutor();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/services/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAc,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAmB,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAuB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAuB,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAqB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAyB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAA4B,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAuB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAsCxE;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,GAAkB,EAAE,OAAyB,EAAE;IAC7E,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,cAAc,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,WAAW,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,kBAAkB,EAAE,CAAC;IACzD,MAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,yBAAyB,
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/services/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,19 @@
|
|
|
8
8
|
* ProjectContext.load 集中在这,其它 service 文件禁止直接 import 具体实现。
|
|
9
9
|
*/
|
|
10
10
|
import type { TaskBackend } from '../interfaces/TaskBackend.js';
|
|
11
|
+
import type { EventSink } from '../providers/taskBackendEvents.js';
|
|
11
12
|
import type { TaskBackendFactory } from './ports.js';
|
|
12
13
|
export declare class DefaultTaskBackendFactory implements TaskBackendFactory {
|
|
14
|
+
private readonly events?;
|
|
15
|
+
/**
|
|
16
|
+
* `events` 是为了让**服务层**改卡也能到插件面前。
|
|
17
|
+
*
|
|
18
|
+
* 🔴 踩过:第一版只在流水线那条路(`tick` / `executors` / …)传了 events,
|
|
19
|
+
* 而 console 改卡、chat 工具建卡、IM 路由都走**这个工厂** ——
|
|
20
|
+
* 于是"从界面上拖一张卡"这种最常见的变更,订阅事件的插件收不到。
|
|
21
|
+
* 平台桥那边的表现会是"有些变更莫名其妙地漏了",而那种漏最难查。
|
|
22
|
+
*/
|
|
23
|
+
constructor(events?: EventSink | undefined);
|
|
13
24
|
for(project: string): Promise<TaskBackend>;
|
|
14
25
|
}
|
|
15
26
|
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/services/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,yBAA0B,YAAW,kBAAkB;
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/services/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,yBAA0B,YAAW,kBAAkB;IAStD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IARpC;;;;;;;OAOG;gBAC0B,MAAM,CAAC,EAAE,SAAS,YAAA;IAEzC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAQjD"}
|
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
export class DefaultTaskBackendFactory {
|
|
2
|
+
events;
|
|
3
|
+
/**
|
|
4
|
+
* `events` 是为了让**服务层**改卡也能到插件面前。
|
|
5
|
+
*
|
|
6
|
+
* 🔴 踩过:第一版只在流水线那条路(`tick` / `executors` / …)传了 events,
|
|
7
|
+
* 而 console 改卡、chat 工具建卡、IM 路由都走**这个工厂** ——
|
|
8
|
+
* 于是"从界面上拖一张卡"这种最常见的变更,订阅事件的插件收不到。
|
|
9
|
+
* 平台桥那边的表现会是"有些变更莫名其妙地漏了",而那种漏最难查。
|
|
10
|
+
*/
|
|
11
|
+
constructor(events) {
|
|
12
|
+
this.events = events;
|
|
13
|
+
}
|
|
2
14
|
async for(project) {
|
|
3
15
|
const { ProjectContext } = await import('../core/context.js');
|
|
4
16
|
const { createTaskBackend } = await import('../providers/registry.js');
|
|
5
17
|
const ctx = ProjectContext.load(project);
|
|
6
|
-
const backend = createTaskBackend(ctx.config);
|
|
18
|
+
const backend = createTaskBackend(ctx.config, undefined, this.events);
|
|
7
19
|
await backend.bootstrap();
|
|
8
20
|
return backend;
|
|
9
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/services/defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/services/defaults.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,yBAAyB;IASP;IAR7B;;;;;;;OAOG;IACH,YAA6B,MAAkB;QAAlB,WAAM,GAAN,MAAM,CAAY;IAAG,CAAC;IAEnD,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC9D,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACtE,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|