@cerbur/clutch-dsh-worktree 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -0
- package/cordis.patch.yml +5 -0
- package/lib/client/WorktreeModeAction.d.ts +11 -0
- package/lib/client/WorktreeModeAction.d.ts.map +1 -0
- package/lib/client/WorktreeModeAction.js +14 -0
- package/lib/client/WorktreeModeAction.js.map +1 -0
- package/lib/client/WorktreeSurface.d.ts +33 -0
- package/lib/client/WorktreeSurface.d.ts.map +1 -0
- package/lib/client/WorktreeSurface.js +834 -0
- package/lib/client/WorktreeSurface.js.map +1 -0
- package/lib/client/entry.d.ts +18 -0
- package/lib/client/entry.d.ts.map +1 -0
- package/lib/client/entry.js +100 -0
- package/lib/client/entry.js.map +1 -0
- package/lib/client/index.d.ts +7 -0
- package/lib/client/index.d.ts.map +1 -0
- package/lib/client/index.js +6 -0
- package/lib/client/index.js.map +1 -0
- package/lib/client/navigation.d.ts +7 -0
- package/lib/client/navigation.d.ts.map +1 -0
- package/lib/client/navigation.js +5 -0
- package/lib/client/navigation.js.map +1 -0
- package/lib/client/overlay-bounds.d.ts +11 -0
- package/lib/client/overlay-bounds.d.ts.map +1 -0
- package/lib/client/overlay-bounds.js +9 -0
- package/lib/client/overlay-bounds.js.map +1 -0
- package/lib/client/sidebar-overlay-geometry.d.ts +10 -0
- package/lib/client/sidebar-overlay-geometry.d.ts.map +1 -0
- package/lib/client/sidebar-overlay-geometry.js +96 -0
- package/lib/client/sidebar-overlay-geometry.js.map +1 -0
- package/lib/client/view-mode-store.d.ts +5 -0
- package/lib/client/view-mode-store.d.ts.map +1 -0
- package/lib/client/view-mode-store.js +15 -0
- package/lib/client/view-mode-store.js.map +1 -0
- package/lib/client/view-mode.d.ts +52 -0
- package/lib/client/view-mode.d.ts.map +1 -0
- package/lib/client/view-mode.js +76 -0
- package/lib/client/view-mode.js.map +1 -0
- package/lib/client/virtual-workspace-membership.d.ts +27 -0
- package/lib/client/virtual-workspace-membership.d.ts.map +1 -0
- package/lib/client/virtual-workspace-membership.js +95 -0
- package/lib/client/virtual-workspace-membership.js.map +1 -0
- package/lib/client/worktree-connection.d.ts +42 -0
- package/lib/client/worktree-connection.d.ts.map +1 -0
- package/lib/client/worktree-connection.js +139 -0
- package/lib/client/worktree-connection.js.map +1 -0
- package/lib/client/worktree-view.d.ts +63 -0
- package/lib/client/worktree-view.d.ts.map +1 -0
- package/lib/client/worktree-view.js +116 -0
- package/lib/client/worktree-view.js.map +1 -0
- package/lib/client.js +1952 -0
- package/lib/client.js.map +1 -0
- package/lib/contract/index.contract.d.ts +2 -0
- package/lib/contract/index.contract.d.ts.map +1 -0
- package/lib/contract/index.contract.js +51 -0
- package/lib/contract/index.contract.js.map +1 -0
- package/lib/contract/index.d.ts +181 -0
- package/lib/contract/index.d.ts.map +1 -0
- package/lib/contract/index.js +45 -0
- package/lib/contract/index.js.map +1 -0
- package/lib/host/dsh-read-adapter.d.ts +58 -0
- package/lib/host/dsh-read-adapter.d.ts.map +1 -0
- package/lib/host/dsh-read-adapter.js +59 -0
- package/lib/host/dsh-read-adapter.js.map +1 -0
- package/lib/host/index.d.ts +16 -0
- package/lib/host/index.d.ts.map +1 -0
- package/lib/host/index.js +14 -0
- package/lib/host/index.js.map +1 -0
- package/lib/host/remote.d.ts +16 -0
- package/lib/host/remote.d.ts.map +1 -0
- package/lib/host/remote.js +61 -0
- package/lib/host/remote.js.map +1 -0
- package/lib/host/service.d.ts +58 -0
- package/lib/host/service.d.ts.map +1 -0
- package/lib/host/service.js +121 -0
- package/lib/host/service.js.map +1 -0
- package/lib/index.d.ts +23 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +22 -0
- package/lib/index.js.map +1 -0
- package/lib/manage/index.d.ts +9 -0
- package/lib/manage/index.d.ts.map +1 -0
- package/lib/manage/index.js +8 -0
- package/lib/manage/index.js.map +1 -0
- package/lib/manage/manager.d.ts +86 -0
- package/lib/manage/manager.d.ts.map +1 -0
- package/lib/manage/manager.js +584 -0
- package/lib/manage/manager.js.map +1 -0
- package/lib/manage/types.d.ts +41 -0
- package/lib/manage/types.d.ts.map +1 -0
- package/lib/manage/types.js +2 -0
- package/lib/manage/types.js.map +1 -0
- package/lib/provider/git.d.ts +42 -0
- package/lib/provider/git.d.ts.map +1 -0
- package/lib/provider/git.js +222 -0
- package/lib/provider/git.js.map +1 -0
- package/lib/provider/index.d.ts +13 -0
- package/lib/provider/index.d.ts.map +1 -0
- package/lib/provider/index.js +12 -0
- package/lib/provider/index.js.map +1 -0
- package/lib/provider/sidecar.d.ts +85 -0
- package/lib/provider/sidecar.d.ts.map +1 -0
- package/lib/provider/sidecar.js +410 -0
- package/lib/provider/sidecar.js.map +1 -0
- package/lib/provider/types.d.ts +126 -0
- package/lib/provider/types.d.ts.map +1 -0
- package/lib/provider/types.js +46 -0
- package/lib/provider/types.js.map +1 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +290 -0
- package/lib/typert.remote-client.d.ts +32 -0
- package/lib/typert.remote-client.d.ts.map +1 -0
- package/lib/typert.remote-client.js +284 -0
- package/package.json +118 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { SessionHeader, SessionId } from '@deepseek-ai/dsh-session/types';
|
|
2
|
+
import type { DshReadAdapter, DshSessionSummary, DshWorkspaceSummary } from '../provider/types.js';
|
|
3
|
+
interface DshWorkspaceView {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly path: string;
|
|
6
|
+
readonly sessionIds: readonly SessionId[];
|
|
7
|
+
}
|
|
8
|
+
type DshSessionHeaderView = Pick<SessionHeader, 'id' | 'cwd'>;
|
|
9
|
+
interface DshSessionView {
|
|
10
|
+
readonly id: SessionId;
|
|
11
|
+
readonly header: DshSessionHeaderView;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* plugin 从 DSH Host 消费的最小只读 service slice。
|
|
15
|
+
*
|
|
16
|
+
* 接口刻意只包含 Workspace 身份/路径/成员关系和 Session header 查询;没有
|
|
17
|
+
* Project/Session mutation、transcript、消息或事件内容加载能力。
|
|
18
|
+
*
|
|
19
|
+
* Minimal read-only service slice consumed from the DSH Host. It intentionally contains
|
|
20
|
+
* only Workspace identity/path/membership and Session header queries, with no
|
|
21
|
+
* Project/Session mutation or transcript, message, or event-content loading capability.
|
|
22
|
+
*/
|
|
23
|
+
export interface DshHostReadContext {
|
|
24
|
+
/** Workspace 身份、根路径与 Session 成员关系。 / Workspace identity, root, and membership. */
|
|
25
|
+
readonly workspaceRegistry: {
|
|
26
|
+
get(id: string): DshWorkspaceView | undefined;
|
|
27
|
+
list(): readonly DshWorkspaceView[];
|
|
28
|
+
};
|
|
29
|
+
/** 当前内存中的 Session header 视图。 / Live in-memory Session header views. */
|
|
30
|
+
readonly sessions: {
|
|
31
|
+
get(id: SessionId): DshSessionView | undefined;
|
|
32
|
+
list(): readonly DshSessionView[];
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* 仅列出持久化 header;不提供 inspect/load/mutation。
|
|
36
|
+
* Lists persisted headers only; inspect, load, and mutation are deliberately absent.
|
|
37
|
+
*/
|
|
38
|
+
readonly sessionPersistence: {
|
|
39
|
+
list(): Promise<readonly DshSessionHeaderView[]>;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 把真实 DSH Host 读取服务适配到 Provider port,同时保持 DSH 是 Workspace 和
|
|
44
|
+
* Session facts 的唯一来源。
|
|
45
|
+
*
|
|
46
|
+
* Adapts real DSH Host reads to the Provider port while preserving DSH as the sole source
|
|
47
|
+
* of Workspace and Session facts.
|
|
48
|
+
*/
|
|
49
|
+
export declare class DshHostReadAdapter implements DshReadAdapter {
|
|
50
|
+
private readonly ctx;
|
|
51
|
+
constructor(ctx: DshHostReadContext);
|
|
52
|
+
getWorkspace(workspaceId: string): Promise<DshWorkspaceSummary | undefined>;
|
|
53
|
+
getSession(sessionId: string): Promise<DshSessionSummary | undefined>;
|
|
54
|
+
listSessions(): Promise<readonly DshSessionSummary[]>;
|
|
55
|
+
private sessionSummary;
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=dsh-read-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsh-read-adapter.d.ts","sourceRoot":"","sources":["../../src/host/dsh-read-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE/E,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAE9B,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;CAC3C;AACD,KAAK,oBAAoB,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;AAC9D,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;CACvC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,QAAQ,CAAC,iBAAiB,EAAE;QAC1B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;QAC9C,IAAI,IAAI,SAAS,gBAAgB,EAAE,CAAC;KACrC,CAAC;IACF,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE;QACjB,GAAG,CAAC,EAAE,EAAE,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC;QAC/C,IAAI,IAAI,SAAS,cAAc,EAAE,CAAC;KACnC,CAAC;IACF;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,EAAE;QAC3B,IAAI,IAAI,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAAC;KAClD,CAAC;CACH;AAED;;;;;;GAMG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IAE9C,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAM3E,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAYrE,YAAY,IAAI,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC;IAe3D,OAAO,CAAC,cAAc;CAcvB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 把真实 DSH Host 读取服务适配到 Provider port,同时保持 DSH 是 Workspace 和
|
|
3
|
+
* Session facts 的唯一来源。
|
|
4
|
+
*
|
|
5
|
+
* Adapts real DSH Host reads to the Provider port while preserving DSH as the sole source
|
|
6
|
+
* of Workspace and Session facts.
|
|
7
|
+
*/
|
|
8
|
+
export class DshHostReadAdapter {
|
|
9
|
+
ctx;
|
|
10
|
+
constructor(ctx) {
|
|
11
|
+
this.ctx = ctx;
|
|
12
|
+
}
|
|
13
|
+
async getWorkspace(workspaceId) {
|
|
14
|
+
const workspace = this.ctx.workspaceRegistry.get(workspaceId);
|
|
15
|
+
if (workspace === undefined)
|
|
16
|
+
return undefined;
|
|
17
|
+
return { workspaceId: workspace.id, rootPath: workspace.path };
|
|
18
|
+
}
|
|
19
|
+
async getSession(sessionId) {
|
|
20
|
+
// live header 优先,持久化列表只补齐未加载的 Session;两条路径都不读取 transcript。
|
|
21
|
+
// Live headers win; the persistence list only fills unloaded Sessions, and neither
|
|
22
|
+
// path reads transcripts.
|
|
23
|
+
const live = this.ctx.sessions.get(sessionId);
|
|
24
|
+
if (live !== undefined)
|
|
25
|
+
return this.sessionSummary(live.header);
|
|
26
|
+
const header = (await this.ctx.sessionPersistence.list()).find((candidate) => candidate.id === sessionId);
|
|
27
|
+
return header === undefined ? undefined : this.sessionSummary(header);
|
|
28
|
+
}
|
|
29
|
+
async listSessions() {
|
|
30
|
+
// 以 Session ID 合并两种 header 来源,既覆盖活跃 Session,也覆盖尚未载入内存的历史
|
|
31
|
+
// Session,并让最新的 live 视图保留优先级。
|
|
32
|
+
// Merge both header sources by Session ID to cover active and unloaded historical
|
|
33
|
+
// Sessions while preserving the live view's precedence.
|
|
34
|
+
const summaries = new Map();
|
|
35
|
+
for (const session of this.ctx.sessions.list()) {
|
|
36
|
+
summaries.set(session.id, this.sessionSummary(session.header));
|
|
37
|
+
}
|
|
38
|
+
for (const header of await this.ctx.sessionPersistence.list()) {
|
|
39
|
+
if (!summaries.has(header.id))
|
|
40
|
+
summaries.set(header.id, this.sessionSummary(header));
|
|
41
|
+
}
|
|
42
|
+
return [...summaries.values()];
|
|
43
|
+
}
|
|
44
|
+
sessionSummary(header) {
|
|
45
|
+
// Workspace 归属从 DSH registry 的成员关系派生,而不是从 cwd 猜测或写入 plugin
|
|
46
|
+
// sidecar;cwd 也只是读取现有 header fact。
|
|
47
|
+
// Workspace ownership is derived from DSH registry membership rather than inferred
|
|
48
|
+
// from cwd or written to the plugin sidecar; cwd is likewise read only as a header fact.
|
|
49
|
+
const workspaceId = this.ctx.workspaceRegistry
|
|
50
|
+
.list()
|
|
51
|
+
.find((workspace) => workspace.sessionIds.includes(header.id))?.id;
|
|
52
|
+
return {
|
|
53
|
+
sessionId: header.id,
|
|
54
|
+
...(workspaceId === undefined ? {} : { workspaceId }),
|
|
55
|
+
cwd: header.cwd ?? '',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=dsh-read-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsh-read-adapter.js","sourceRoot":"","sources":["../../src/host/dsh-read-adapter.ts"],"names":[],"mappings":"AAiDA;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,GAAuB;QAAvB,QAAG,GAAH,GAAG,CAAoB;IAAG,CAAC;IAExD,KAAK,CAAC,YAAY,CAAC,WAAmB;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,2DAA2D;QAC3D,mFAAmF;QACnF,0BAA0B;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAsB,CAAC,CAAC;QAC3D,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAC5D,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAC1C,CAAC;QACF,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,yDAAyD;QACzD,8BAA8B;QAC9B,kFAAkF;QAClF,wDAAwD;QACxD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;QACvD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;IAEO,cAAc,CAAC,MAA4B;QACjD,2DAA2D;QAC3D,mCAAmC;QACnC,mFAAmF;QACnF,yFAAyF;QACzF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB;aAC3C,IAAI,EAAE;aACN,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACrE,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;YACrD,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-only 组合面:连接真实 DSH 服务、Manage 用例与 Typert Remote 投影。
|
|
3
|
+
* 浏览器 Consumer 必须经 `../client/index.js` 的 facade 访问,不能导入这里的运行时。
|
|
4
|
+
*
|
|
5
|
+
* Host-only composition surface connecting real DSH services, Manage use cases, and
|
|
6
|
+
* the Typert Remote projection. Browser consumers must go through the facade in
|
|
7
|
+
* `../client/index.js` rather than importing this runtime surface.
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
export { DshHostReadAdapter } from './dsh-read-adapter.js';
|
|
12
|
+
export type { DshHostReadContext } from './dsh-read-adapter.js';
|
|
13
|
+
export { createWorktreeRemoteProjection } from './remote.js';
|
|
14
|
+
export { WorktreeRemoteService } from './service.js';
|
|
15
|
+
export type { WorktreeHostConfig } from './service.js';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,YAAY,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-only 组合面:连接真实 DSH 服务、Manage 用例与 Typert Remote 投影。
|
|
3
|
+
* 浏览器 Consumer 必须经 `../client/index.js` 的 facade 访问,不能导入这里的运行时。
|
|
4
|
+
*
|
|
5
|
+
* Host-only composition surface connecting real DSH services, Manage use cases, and
|
|
6
|
+
* the Typert Remote projection. Browser consumers must go through the facade in
|
|
7
|
+
* `../client/index.js` rather than importing this runtime surface.
|
|
8
|
+
*
|
|
9
|
+
* @packageDocumentation
|
|
10
|
+
*/
|
|
11
|
+
export { DshHostReadAdapter } from './dsh-read-adapter.js';
|
|
12
|
+
export { createWorktreeRemoteProjection } from './remote.js';
|
|
13
|
+
export { WorktreeRemoteService } from './service.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type WorktreeManager, type WorktreeRemoteManager } from '../contract/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* 将 Host 内的 Manage 能力投影为 DSH Remote 可传输的 plain-JSON contract。
|
|
4
|
+
*
|
|
5
|
+
* 该边界只暴露稳定结果和错误值,不泄漏 Manager 实例、Provider class、Git、sidecar
|
|
6
|
+
* 或其他 Node-only 对象。
|
|
7
|
+
*
|
|
8
|
+
* Projects Host-side Manage capabilities into the plain-JSON contract carried by DSH
|
|
9
|
+
* Remote. The boundary exposes only stable result and error values, never Manager
|
|
10
|
+
* instances, Provider classes, Git, sidecar, or other Node-only objects.
|
|
11
|
+
*
|
|
12
|
+
* @param manager - Host 内已组合完成的用例接口。 / Fully composed Host use-case port.
|
|
13
|
+
* @returns 可供生成 Remote 暴露的安全投影。 / Safe projection for generated Remote export.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createWorktreeRemoteProjection(manager: WorktreeManager): WorktreeRemoteManager;
|
|
16
|
+
//# sourceMappingURL=remote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/host/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAE3B,MAAM,sBAAsB,CAAC;AAkC9B;;;;;;;;;;;;GAYG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,eAAe,GAAG,qBAAqB,CAgB9F"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { WORKTREE_ERROR_CODES, createWorktreeError, } from '../contract/index.js';
|
|
2
|
+
const worktreeErrorCodes = new Set(WORKTREE_ERROR_CODES);
|
|
3
|
+
function isWorktreeError(error) {
|
|
4
|
+
if (typeof error !== 'object' || error === null || Array.isArray(error))
|
|
5
|
+
return false;
|
|
6
|
+
const candidate = error;
|
|
7
|
+
return (typeof candidate.code === 'string' &&
|
|
8
|
+
worktreeErrorCodes.has(candidate.code) &&
|
|
9
|
+
typeof candidate.message === 'string' &&
|
|
10
|
+
typeof candidate.details === 'object' &&
|
|
11
|
+
candidate.details !== null &&
|
|
12
|
+
!Array.isArray(candidate.details));
|
|
13
|
+
}
|
|
14
|
+
async function project(operation) {
|
|
15
|
+
try {
|
|
16
|
+
return { ok: true, value: await operation() };
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
// 只有稳定、可识别的领域错误进入 browser-safe Result;未知异常继续交给 DSH
|
|
20
|
+
// Gateway 作为 transport/Host failure 处理,避免把基础设施故障伪装成业务拒绝。
|
|
21
|
+
// Only stable, recognized domain errors enter the browser-safe Result. Unknown
|
|
22
|
+
// exceptions continue to the DSH Gateway as transport/Host failures instead of being
|
|
23
|
+
// disguised as business rejections.
|
|
24
|
+
if (!isWorktreeError(error))
|
|
25
|
+
throw error;
|
|
26
|
+
return {
|
|
27
|
+
ok: false,
|
|
28
|
+
error: createWorktreeError(error.code, error.message, error.details),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 将 Host 内的 Manage 能力投影为 DSH Remote 可传输的 plain-JSON contract。
|
|
34
|
+
*
|
|
35
|
+
* 该边界只暴露稳定结果和错误值,不泄漏 Manager 实例、Provider class、Git、sidecar
|
|
36
|
+
* 或其他 Node-only 对象。
|
|
37
|
+
*
|
|
38
|
+
* Projects Host-side Manage capabilities into the plain-JSON contract carried by DSH
|
|
39
|
+
* Remote. The boundary exposes only stable result and error values, never Manager
|
|
40
|
+
* instances, Provider classes, Git, sidecar, or other Node-only objects.
|
|
41
|
+
*
|
|
42
|
+
* @param manager - Host 内已组合完成的用例接口。 / Fully composed Host use-case port.
|
|
43
|
+
* @returns 可供生成 Remote 暴露的安全投影。 / Safe projection for generated Remote export.
|
|
44
|
+
*/
|
|
45
|
+
export function createWorktreeRemoteProjection(manager) {
|
|
46
|
+
return {
|
|
47
|
+
listWorktrees: (input) => project(() => manager.listWorktrees(input)),
|
|
48
|
+
listBranches: (input) => project(() => manager.listBranches(input)),
|
|
49
|
+
createWorktree: (input) => project(() => manager.createWorktree(input)),
|
|
50
|
+
removeWorktree: (input) => project(async () => {
|
|
51
|
+
await manager.removeWorktree(input);
|
|
52
|
+
// `void` 没有 JSON 表示,因此成功删除在 wire contract 中显式投影为 null。
|
|
53
|
+
// `void` has no JSON representation, so successful removal is explicitly projected
|
|
54
|
+
// to null in the wire contract.
|
|
55
|
+
return null;
|
|
56
|
+
}),
|
|
57
|
+
listBindings: (input) => project(() => manager.listBindings(input)),
|
|
58
|
+
bindSession: (input) => project(() => manager.bindSession(input)),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/host/remote.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,GAKpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AAEjE,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,MAAM,SAAS,GAAG,KAA+B,CAAC;IAClD,OAAO,CACL,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;QAClC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;QACtC,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ;QACrC,SAAS,CAAC,OAAO,KAAK,IAAI;QAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAClC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAQ,SAA+B;IAC3D,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,SAAS,EAAE,EAAE,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mDAAmD;QACnD,yDAAyD;QACzD,+EAA+E;QAC/E,qFAAqF;QACrF,oCAAoC;QACpC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QACzC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;SACrE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,8BAA8B,CAAC,OAAwB;IACrE,OAAO;QACL,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrE,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACvE,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CACxB,OAAO,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACpC,uDAAuD;YACvD,mFAAmF;YACnF,gCAAgC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACJ,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnE,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
3
|
+
import type { BranchRecord, SessionBinding, WorktreeRecord, WorktreeRemoteResult } from '../contract/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Host composition 所需且由 DSH bundle 注入的配置。
|
|
6
|
+
* Configuration supplied by the DSH bundle to the Host composition.
|
|
7
|
+
*/
|
|
8
|
+
export interface WorktreeHostConfig {
|
|
9
|
+
/** DSH 解析后的绝对数据根目录。 / Absolute DSH data root resolved by the Host. */
|
|
10
|
+
readonly dshHome: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Worktree plugin 的真实 composition root。
|
|
14
|
+
*
|
|
15
|
+
* Cordis 构造该服务时,以 `worktreeManager` 注册 Typert namespace,并把只读 DSH
|
|
16
|
+
* adapter、Manage 实现和 browser-safe projection 组合成一个同生命周期对象;所属
|
|
17
|
+
* Cordis fiber 卸载时,服务注册也随之移除。
|
|
18
|
+
*
|
|
19
|
+
* The real composition root for the Worktree plugin. When Cordis constructs it, the
|
|
20
|
+
* service registers the `worktreeManager` Typert namespace and composes the read-only
|
|
21
|
+
* DSH adapter, Manage implementation, and browser-safe projection into one
|
|
22
|
+
* lifecycle-bound object. Its service registration is removed with the owning fiber.
|
|
23
|
+
*/
|
|
24
|
+
export declare class WorktreeRemoteService extends TypertRemoteService {
|
|
25
|
+
static inject: string[];
|
|
26
|
+
private readonly remote;
|
|
27
|
+
/**
|
|
28
|
+
* 为当前 Cordis fiber 建立一次 Host 组合,并复用同一个 Remote projection 处理调用。
|
|
29
|
+
* Builds the Host composition once for the current Cordis fiber and reuses one Remote
|
|
30
|
+
* projection for all calls.
|
|
31
|
+
*/
|
|
32
|
+
constructor(ctx: Context, config: WorktreeHostConfig);
|
|
33
|
+
listWorktrees(input: {
|
|
34
|
+
readonly workspaceId: string;
|
|
35
|
+
}): Promise<WorktreeRemoteResult<readonly WorktreeRecord[]>>;
|
|
36
|
+
listBranches(input: {
|
|
37
|
+
readonly workspaceId: string;
|
|
38
|
+
}): Promise<WorktreeRemoteResult<readonly BranchRecord[]>>;
|
|
39
|
+
createWorktree(input: {
|
|
40
|
+
readonly workspaceId: string;
|
|
41
|
+
readonly branch: string;
|
|
42
|
+
readonly newBranch?: string;
|
|
43
|
+
}): Promise<WorktreeRemoteResult<WorktreeRecord>>;
|
|
44
|
+
removeWorktree(input: {
|
|
45
|
+
readonly workspaceId: string;
|
|
46
|
+
readonly worktreeId: string;
|
|
47
|
+
}): Promise<WorktreeRemoteResult<null>>;
|
|
48
|
+
listBindings(input: {
|
|
49
|
+
readonly workspaceId: string;
|
|
50
|
+
}): Promise<WorktreeRemoteResult<readonly SessionBinding[]>>;
|
|
51
|
+
bindSession(input: {
|
|
52
|
+
readonly workspaceId: string;
|
|
53
|
+
readonly worktreeId: string;
|
|
54
|
+
readonly sessionId: string;
|
|
55
|
+
}): Promise<WorktreeRemoteResult<SessionBinding>>;
|
|
56
|
+
}
|
|
57
|
+
export default WorktreeRemoteService;
|
|
58
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/host/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAU,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE/E,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EAEd,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAQ9B;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,qBAAsB,SAAQ,mBAAmB;IAI5D,MAAM,CAAC,MAAM,WAA2D;IAExE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAE/C;;;;OAIG;gBACS,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB;IAgBpD,aAAa,CAAC,KAAK,EAAE;QACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAK5D,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAK1D,cAAc,CAAC,KAAK,EAAE;QACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;IAKjD,cAAc,CAAC,KAAK,EAAE;QACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAKvC,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;KAC9B,GAAG,OAAO,CAAC,oBAAoB,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAK5D,WAAW,CAAC,KAAK,EAAE;QACjB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;CAGlD;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
2
|
+
var useValue = arguments.length > 2;
|
|
3
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
4
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
5
|
+
}
|
|
6
|
+
return useValue ? value : void 0;
|
|
7
|
+
};
|
|
8
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
9
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
10
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
11
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
12
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
13
|
+
var _, done = false;
|
|
14
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
15
|
+
var context = {};
|
|
16
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
17
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
18
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
19
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
20
|
+
if (kind === "accessor") {
|
|
21
|
+
if (result === void 0) continue;
|
|
22
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
23
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
24
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
25
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
26
|
+
}
|
|
27
|
+
else if (_ = accept(result)) {
|
|
28
|
+
if (kind === "field") initializers.unshift(_);
|
|
29
|
+
else descriptor[key] = _;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
33
|
+
done = true;
|
|
34
|
+
};
|
|
35
|
+
import { Remote, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
|
|
36
|
+
import { createWorktreeManager } from '../manage/index.js';
|
|
37
|
+
import { DshHostReadAdapter, } from './dsh-read-adapter.js';
|
|
38
|
+
import { createWorktreeRemoteProjection } from './remote.js';
|
|
39
|
+
/**
|
|
40
|
+
* Worktree plugin 的真实 composition root。
|
|
41
|
+
*
|
|
42
|
+
* Cordis 构造该服务时,以 `worktreeManager` 注册 Typert namespace,并把只读 DSH
|
|
43
|
+
* adapter、Manage 实现和 browser-safe projection 组合成一个同生命周期对象;所属
|
|
44
|
+
* Cordis fiber 卸载时,服务注册也随之移除。
|
|
45
|
+
*
|
|
46
|
+
* The real composition root for the Worktree plugin. When Cordis constructs it, the
|
|
47
|
+
* service registers the `worktreeManager` Typert namespace and composes the read-only
|
|
48
|
+
* DSH adapter, Manage implementation, and browser-safe projection into one
|
|
49
|
+
* lifecycle-bound object. Its service registration is removed with the owning fiber.
|
|
50
|
+
*/
|
|
51
|
+
let WorktreeRemoteService = (() => {
|
|
52
|
+
let _classSuper = TypertRemoteService;
|
|
53
|
+
let _instanceExtraInitializers = [];
|
|
54
|
+
let _listWorktrees_decorators;
|
|
55
|
+
let _listBranches_decorators;
|
|
56
|
+
let _createWorktree_decorators;
|
|
57
|
+
let _removeWorktree_decorators;
|
|
58
|
+
let _listBindings_decorators;
|
|
59
|
+
let _bindSession_decorators;
|
|
60
|
+
return class WorktreeRemoteService extends _classSuper {
|
|
61
|
+
static {
|
|
62
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
63
|
+
_listWorktrees_decorators = [Remote];
|
|
64
|
+
_listBranches_decorators = [Remote];
|
|
65
|
+
_createWorktree_decorators = [Remote];
|
|
66
|
+
_removeWorktree_decorators = [Remote];
|
|
67
|
+
_listBindings_decorators = [Remote];
|
|
68
|
+
_bindSession_decorators = [Remote];
|
|
69
|
+
__esDecorate(this, null, _listWorktrees_decorators, { kind: "method", name: "listWorktrees", static: false, private: false, access: { has: obj => "listWorktrees" in obj, get: obj => obj.listWorktrees }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
70
|
+
__esDecorate(this, null, _listBranches_decorators, { kind: "method", name: "listBranches", static: false, private: false, access: { has: obj => "listBranches" in obj, get: obj => obj.listBranches }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
71
|
+
__esDecorate(this, null, _createWorktree_decorators, { kind: "method", name: "createWorktree", static: false, private: false, access: { has: obj => "createWorktree" in obj, get: obj => obj.createWorktree }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
72
|
+
__esDecorate(this, null, _removeWorktree_decorators, { kind: "method", name: "removeWorktree", static: false, private: false, access: { has: obj => "removeWorktree" in obj, get: obj => obj.removeWorktree }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
73
|
+
__esDecorate(this, null, _listBindings_decorators, { kind: "method", name: "listBindings", static: false, private: false, access: { has: obj => "listBindings" in obj, get: obj => obj.listBindings }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
74
|
+
__esDecorate(this, null, _bindSession_decorators, { kind: "method", name: "bindSession", static: false, private: false, access: { has: obj => "bindSession" in obj, get: obj => obj.bindSession }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
75
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
76
|
+
}
|
|
77
|
+
// Cordis 在实例化前保证这三个只读 Host 服务可用;这里不注入任何 DSH mutation API。
|
|
78
|
+
// Cordis ensures these three read-only Host services exist before instantiation; no
|
|
79
|
+
// DSH mutation API is injected here.
|
|
80
|
+
static inject = ['workspaceRegistry', 'sessions', 'sessionPersistence'];
|
|
81
|
+
remote = __runInitializers(this, _instanceExtraInitializers);
|
|
82
|
+
/**
|
|
83
|
+
* 为当前 Cordis fiber 建立一次 Host 组合,并复用同一个 Remote projection 处理调用。
|
|
84
|
+
* Builds the Host composition once for the current Cordis fiber and reuses one Remote
|
|
85
|
+
* projection for all calls.
|
|
86
|
+
*/
|
|
87
|
+
constructor(ctx, config) {
|
|
88
|
+
super(ctx, 'worktreeManager');
|
|
89
|
+
this.remote = createWorktreeRemoteProjection(createWorktreeManager({
|
|
90
|
+
dsh: new DshHostReadAdapter(ctx),
|
|
91
|
+
dshHome: config.dshHome,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
// 这些方法保持为薄边界,生成的 Typert 描述符只看到 contract-safe 签名;错误归一化
|
|
95
|
+
// 和 JSON 投影集中由 `createWorktreeRemoteProjection` 负责。
|
|
96
|
+
// These methods stay deliberately thin so generated Typert descriptors see only
|
|
97
|
+
// contract-safe signatures; error normalization and JSON projection remain centralized
|
|
98
|
+
// in `createWorktreeRemoteProjection`.
|
|
99
|
+
listWorktrees(input) {
|
|
100
|
+
return this.remote.listWorktrees(input);
|
|
101
|
+
}
|
|
102
|
+
listBranches(input) {
|
|
103
|
+
return this.remote.listBranches(input);
|
|
104
|
+
}
|
|
105
|
+
createWorktree(input) {
|
|
106
|
+
return this.remote.createWorktree(input);
|
|
107
|
+
}
|
|
108
|
+
removeWorktree(input) {
|
|
109
|
+
return this.remote.removeWorktree(input);
|
|
110
|
+
}
|
|
111
|
+
listBindings(input) {
|
|
112
|
+
return this.remote.listBindings(input);
|
|
113
|
+
}
|
|
114
|
+
bindSession(input) {
|
|
115
|
+
return this.remote.bindSession(input);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
})();
|
|
119
|
+
export { WorktreeRemoteService };
|
|
120
|
+
export default WorktreeRemoteService;
|
|
121
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/host/service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAS/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,kBAAkB,GAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAW7D;;;;;;;;;;;GAWG;IACU,qBAAqB;sBAAS,mBAAmB;;;;;;;;iBAAjD,qBAAsB,SAAQ,WAAmB;;;yCA4B3D,MAAM;wCAON,MAAM;0CAON,MAAM;0CASN,MAAM;wCAQN,MAAM;uCAON,MAAM;YArCP,0LAAA,aAAa,6DAIZ;YAGD,uLAAA,YAAY,6DAIX;YAGD,6LAAA,cAAc,6DAMb;YAGD,6LAAA,cAAc,6DAKb;YAGD,uLAAA,YAAY,6DAIX;YAGD,oLAAA,WAAW,6DAMV;;;QAxED,0DAA0D;QAC1D,oFAAoF;QACpF,qCAAqC;QACrC,MAAM,CAAC,MAAM,GAAG,CAAC,mBAAmB,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;QAEvD,MAAM,GANZ,mDAAqB,CAMe;QAE/C;;;;WAIG;QACH,YAAY,GAAY,EAAE,MAA0B;YAClD,KAAK,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,8BAA8B,CAC1C,qBAAqB,CAAC;gBACpB,GAAG,EAAE,IAAI,kBAAkB,CAAC,GAAmC,CAAC;gBAChE,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CACH,CAAC;QACJ,CAAC;QAED,sDAAsD;QACtD,oDAAoD;QACpD,gFAAgF;QAChF,uFAAuF;QACvF,uCAAuC;QAEvC,aAAa,CAAC,KAEb;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QAGD,YAAY,CAAC,KAEZ;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAGD,cAAc,CAAC,KAId;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAGD,cAAc,CAAC,KAGd;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAGD,YAAY,CAAC,KAEZ;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QAGD,WAAW,CAAC,KAIX;YACC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;;;SAzEU,qBAAqB;AA4ElC,eAAe,qBAAqB,CAAC"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* package 的 Host 入口:汇总稳定 contract、Node 侧 Provider/Manage 实现与真实 DSH
|
|
3
|
+
* composition root。浏览器代码应改用 `./client`,避免把 Git、sidecar 或 Host 运行时
|
|
4
|
+
* 带入 browser bundle。
|
|
5
|
+
*
|
|
6
|
+
* Package Host entry: it gathers the stable contract, Node-side Provider/Manage
|
|
7
|
+
* implementations, and the real DSH composition root. Browser code should import
|
|
8
|
+
* `./client` instead so Git, sidecar, and Host runtime code stay out of browser bundles.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
export { WORKTREE_ERROR_CODES, WORKTREE_REMOTE_METHODS, createWorktreeError, } from './contract/index.js';
|
|
13
|
+
export type { BranchRecord, BindingStatus, JsonPrimitive, JsonValue, SessionBinding, WorktreeError, WorktreeErrorCode, WorktreeErrorDetails, WorktreeManager, WorktreeRemoteManager, WorktreeRemoteMethod, WorktreeRemoteResult, WorktreeRecord, WorktreeStatus, WorktreeId, WorkspaceId, SessionId, } from './contract/index.js';
|
|
14
|
+
export { LocalGitAdapter } from './provider/git.js';
|
|
15
|
+
export { WorkspaceShardedSidecarRepository, validateSidecarSnapshot, } from './provider/sidecar.js';
|
|
16
|
+
export { SIDECAR_SCHEMA_VERSION, WorktreeProviderError, isWorktreeProviderError, providerError, } from './provider/types.js';
|
|
17
|
+
export type { DshReadAdapter, DshSessionSummary, DshWorkspaceSummary, GitWorktreeAdapter, GitWorktreeInfo, SidecarMutation, SidecarSnapshot, SidecarStore, } from './provider/types.js';
|
|
18
|
+
export { WorktreeManagerImpl, createWorktreeManager } from './manage/index.js';
|
|
19
|
+
export type { RuntimeCwdInput, WorktreeManagerOptions, WorktreeManagerService, } from './manage/index.js';
|
|
20
|
+
export { DshHostReadAdapter, WorktreeRemoteService, createWorktreeRemoteProjection, } from './host/index.js';
|
|
21
|
+
export type { DshHostReadContext, WorktreeHostConfig } from './host/index.js';
|
|
22
|
+
export { WorktreeRemoteService as default } from './host/index.js';
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAK9E,OAAO,EAAE,qBAAqB,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* package 的 Host 入口:汇总稳定 contract、Node 侧 Provider/Manage 实现与真实 DSH
|
|
3
|
+
* composition root。浏览器代码应改用 `./client`,避免把 Git、sidecar 或 Host 运行时
|
|
4
|
+
* 带入 browser bundle。
|
|
5
|
+
*
|
|
6
|
+
* Package Host entry: it gathers the stable contract, Node-side Provider/Manage
|
|
7
|
+
* implementations, and the real DSH composition root. Browser code should import
|
|
8
|
+
* `./client` instead so Git, sidecar, and Host runtime code stay out of browser bundles.
|
|
9
|
+
*
|
|
10
|
+
* @packageDocumentation
|
|
11
|
+
*/
|
|
12
|
+
export { WORKTREE_ERROR_CODES, WORKTREE_REMOTE_METHODS, createWorktreeError, } from './contract/index.js';
|
|
13
|
+
export { LocalGitAdapter } from './provider/git.js';
|
|
14
|
+
export { WorkspaceShardedSidecarRepository, validateSidecarSnapshot, } from './provider/sidecar.js';
|
|
15
|
+
export { SIDECAR_SCHEMA_VERSION, WorktreeProviderError, isWorktreeProviderError, providerError, } from './provider/types.js';
|
|
16
|
+
export { WorktreeManagerImpl, createWorktreeManager } from './manage/index.js';
|
|
17
|
+
export { DshHostReadAdapter, WorktreeRemoteService, createWorktreeRemoteProjection, } from './host/index.js';
|
|
18
|
+
// bundle patch 以默认导出装载同一个 Cordis 服务;命名导出保留给显式 Host 组合。
|
|
19
|
+
// The bundle patch loads the same Cordis service through the default export; the named
|
|
20
|
+
// export remains available to explicit Host compositions.
|
|
21
|
+
export { WorktreeRemoteService as default } from './host/index.js';
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAoB7B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EACL,iCAAiC,EACjC,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM/E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AAGzB,uDAAuD;AACvD,uFAAuF;AACvF,0DAA0D;AAC1D,OAAO,EAAE,qBAAqB,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manage 模块的公开入口:暴露用例编排与 runtime cwd 服务,并通过注入隐藏底层 Git/sidecar 实现。
|
|
3
|
+
* Public Manage entrypoint: exposes use-case orchestration and runtime cwd services while keeping Git/sidecar implementations behind injection.
|
|
4
|
+
*
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
7
|
+
export { WorktreeManagerImpl, createWorktreeManager } from './manager.js';
|
|
8
|
+
export type { RuntimeCwdInput, WorktreeManagerOptions, WorktreeManagerService, } from './types.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manage 模块的公开入口:暴露用例编排与 runtime cwd 服务,并通过注入隐藏底层 Git/sidecar 实现。
|
|
3
|
+
* Public Manage entrypoint: exposes use-case orchestration and runtime cwd services while keeping Git/sidecar implementations behind injection.
|
|
4
|
+
*
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
7
|
+
export { WorktreeManagerImpl, createWorktreeManager } from './manager.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { BranchRecord, SessionBinding, WorktreeRecord, WorkspaceId } from '../contract/index.js';
|
|
2
|
+
import type { WorktreeManagerOptions, WorktreeManagerService } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Worktree/Session 用例编排器:DSH 只提供权威只读事实,Git 承担 worktree 副作用,sidecar 只保存外部关系。
|
|
5
|
+
* Worktree/Session use-case orchestrator: DSH supplies authoritative read-only facts, Git owns worktree side effects, and the sidecar stores only external relations.
|
|
6
|
+
*/
|
|
7
|
+
export declare class WorktreeManagerImpl implements WorktreeManagerService {
|
|
8
|
+
private readonly dsh;
|
|
9
|
+
private readonly dshHome;
|
|
10
|
+
private readonly git;
|
|
11
|
+
private readonly sidecar;
|
|
12
|
+
private readonly idFactory;
|
|
13
|
+
/**
|
|
14
|
+
* 使用可注入端口组合 Manager;未注入的 Git 与 sidecar 端口会绑定到本地 Provider 实现。
|
|
15
|
+
* Composes the Manager from injectable ports; omitted Git and sidecar ports bind to local Provider implementations.
|
|
16
|
+
*/
|
|
17
|
+
constructor(options: WorktreeManagerOptions);
|
|
18
|
+
/**
|
|
19
|
+
* 返回含 active/removed 状态的 sidecar Worktree 投影。
|
|
20
|
+
* Returns the sidecar Worktree projection, including active/removed state.
|
|
21
|
+
*/
|
|
22
|
+
listWorktrees(input: {
|
|
23
|
+
workspaceId: WorkspaceId;
|
|
24
|
+
}): Promise<readonly WorktreeRecord[]>;
|
|
25
|
+
/**
|
|
26
|
+
* 将本地分支与所有 Git worktree 联合投影,以便调用方禁用已 checkout 的分支。
|
|
27
|
+
* Projects local branches against every Git worktree so callers can disable branches that are already checked out.
|
|
28
|
+
*/
|
|
29
|
+
listBranches(input: {
|
|
30
|
+
workspaceId: WorkspaceId;
|
|
31
|
+
}): Promise<readonly BranchRecord[]>;
|
|
32
|
+
/**
|
|
33
|
+
* 创建受 DSH Home 边界管理的 Git Worktree,并仅在 sidecar 提交成功后返回;已 checkout 的
|
|
34
|
+
* base branch 可以通过 newBranch 创建新的本地 branch。持久化失败会补偿删除 Git Worktree。
|
|
35
|
+
* Creates a Git Worktree inside the managed DSH Home boundary and returns only after sidecar
|
|
36
|
+
* commit. An already checked-out base branch can create a new local branch through newBranch.
|
|
37
|
+
* Persistence failure compensates by removing the Git Worktree.
|
|
38
|
+
*/
|
|
39
|
+
createWorktree(input: {
|
|
40
|
+
workspaceId: WorkspaceId;
|
|
41
|
+
branch: string;
|
|
42
|
+
newBranch?: string;
|
|
43
|
+
}): Promise<WorktreeRecord>;
|
|
44
|
+
/**
|
|
45
|
+
* 先删除 Git Worktree,再原子标记 record 为 removed 并保留 detached bindings;失败阶段决定该操作是否可直接重试或需要同步修复。
|
|
46
|
+
* Removes the Git Worktree first, then atomically marks its record removed and preserves detached bindings; the failure phase determines whether retry or synchronization repair is required.
|
|
47
|
+
*/
|
|
48
|
+
removeWorktree(input: {
|
|
49
|
+
workspaceId: WorkspaceId;
|
|
50
|
+
worktreeId: string;
|
|
51
|
+
}): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* 返回 Workspace 的 active/detached Session 关系。
|
|
54
|
+
* Returns active/detached Session relations for the Workspace.
|
|
55
|
+
*/
|
|
56
|
+
listBindings(input: {
|
|
57
|
+
workspaceId: WorkspaceId;
|
|
58
|
+
}): Promise<readonly SessionBinding[]>;
|
|
59
|
+
/**
|
|
60
|
+
* 将已由 DSH 创建且 cwd 指向目标 Worktree 的 Session 绑定到 sidecar;相同 active 请求幂等,其他既有关系一律冲突。
|
|
61
|
+
* Binds a DSH-created Session whose cwd already targets the Worktree; the same active request is idempotent and every other existing relation conflicts.
|
|
62
|
+
*/
|
|
63
|
+
bindSession(input: {
|
|
64
|
+
workspaceId: WorkspaceId;
|
|
65
|
+
worktreeId: string;
|
|
66
|
+
sessionId: string;
|
|
67
|
+
}): Promise<SessionBinding>;
|
|
68
|
+
/**
|
|
69
|
+
* 派生一次执行的 cwd:无 binding 或 detached 时使用 Workspace root,active 时要求对应 Worktree 记录和目录均有效。
|
|
70
|
+
* Derives cwd for one execution: no binding or detached uses the Workspace root, while active requires both a valid Worktree record and directory.
|
|
71
|
+
*/
|
|
72
|
+
resolveRuntimeCwd(input: {
|
|
73
|
+
workspaceId: WorkspaceId;
|
|
74
|
+
sessionId: string;
|
|
75
|
+
}): Promise<string>;
|
|
76
|
+
private requireWorkspace;
|
|
77
|
+
private validateGeneratedPath;
|
|
78
|
+
private validatePhysicalGeneratedPath;
|
|
79
|
+
private assertSessionMatchesWorkspace;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 创建实现 `WorktreeManagerService` 的默认编排器,同时保留所有底层端口的注入能力。
|
|
83
|
+
* Creates the default `WorktreeManagerService` orchestrator while preserving injection for every low-level port.
|
|
84
|
+
*/
|
|
85
|
+
export declare function createWorktreeManager(options: WorktreeManagerOptions): WorktreeManagerService;
|
|
86
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manage/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAc9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AA2FjF;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,sBAAsB;IAChE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgC;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC;;;OAGG;gBACS,OAAO,EAAE,sBAAsB;IAa3C;;;OAGG;IACG,aAAa,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IAsC5F;;;OAGG;IACG,YAAY,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;IAyBzF;;;;;;OAMG;IACG,cAAc,CAAC,KAAK,EAAE;QAC1B,WAAW,EAAE,WAAW,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,cAAc,CAAC;IA0I3B;;;OAGG;IACG,cAAc,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,WAAW,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgF5F;;;OAGG;IACG,YAAY,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;IAK3F;;;OAGG;IACG,WAAW,CAAC,KAAK,EAAE;QACvB,WAAW,EAAE,WAAW,CAAC;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,cAAc,CAAC;IAwD3B;;;OAGG;IACG,iBAAiB,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,WAAW,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAqClF,gBAAgB;IA6B9B,OAAO,CAAC,qBAAqB;YAaf,6BAA6B;IA4B3C,OAAO,CAAC,6BAA6B;CAuBtC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,sBAAsB,CAE7F"}
|