@krischoichoi/channel-harness 0.6.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 +110 -0
- package/lib/access/controller.d.ts +37 -0
- package/lib/access/controller.d.ts.map +1 -0
- package/lib/access/controller.js +51 -0
- package/lib/access/controller.js.map +1 -0
- package/lib/access/decision.d.ts +18 -0
- package/lib/access/decision.d.ts.map +1 -0
- package/lib/access/decision.js +2 -0
- package/lib/access/decision.js.map +1 -0
- package/lib/access/resolver.d.ts +41 -0
- package/lib/access/resolver.d.ts.map +1 -0
- package/lib/access/resolver.js +31 -0
- package/lib/access/resolver.js.map +1 -0
- package/lib/agent-manager.d.ts +314 -0
- package/lib/agent-manager.d.ts.map +1 -0
- package/lib/agent-manager.js +603 -0
- package/lib/agent-manager.js.map +1 -0
- package/lib/agent-router.d.ts +37 -0
- package/lib/agent-router.d.ts.map +1 -0
- package/lib/agent-router.js +33 -0
- package/lib/agent-router.js.map +1 -0
- package/lib/bind-support.d.ts +23 -0
- package/lib/bind-support.d.ts.map +1 -0
- package/lib/bind-support.js +63 -0
- package/lib/bind-support.js.map +1 -0
- package/lib/binding-store.d.ts +104 -0
- package/lib/binding-store.d.ts.map +1 -0
- package/lib/binding-store.js +354 -0
- package/lib/binding-store.js.map +1 -0
- package/lib/bridge.d.ts +248 -0
- package/lib/bridge.d.ts.map +1 -0
- package/lib/bridge.js +961 -0
- package/lib/bridge.js.map +1 -0
- package/lib/channel-label.d.ts +46 -0
- package/lib/channel-label.d.ts.map +1 -0
- package/lib/channel-label.js +89 -0
- package/lib/channel-label.js.map +1 -0
- package/lib/channel-session-factory.d.ts +76 -0
- package/lib/channel-session-factory.d.ts.map +1 -0
- package/lib/channel-session-factory.js +187 -0
- package/lib/channel-session-factory.js.map +1 -0
- package/lib/commands/bind.d.ts +21 -0
- package/lib/commands/bind.d.ts.map +1 -0
- package/lib/commands/bind.js +91 -0
- package/lib/commands/bind.js.map +1 -0
- package/lib/commands/help.d.ts +15 -0
- package/lib/commands/help.d.ts.map +1 -0
- package/lib/commands/help.js +89 -0
- package/lib/commands/help.js.map +1 -0
- package/lib/commands/index.d.ts +122 -0
- package/lib/commands/index.d.ts.map +1 -0
- package/lib/commands/index.js +63 -0
- package/lib/commands/index.js.map +1 -0
- package/lib/commands/locale.d.ts +9 -0
- package/lib/commands/locale.d.ts.map +1 -0
- package/lib/commands/locale.js +27 -0
- package/lib/commands/locale.js.map +1 -0
- package/lib/commands/mirror.d.ts +14 -0
- package/lib/commands/mirror.d.ts.map +1 -0
- package/lib/commands/mirror.js +44 -0
- package/lib/commands/mirror.js.map +1 -0
- package/lib/commands/model.d.ts +20 -0
- package/lib/commands/model.d.ts.map +1 -0
- package/lib/commands/model.js +106 -0
- package/lib/commands/model.js.map +1 -0
- package/lib/commands/models.d.ts +14 -0
- package/lib/commands/models.d.ts.map +1 -0
- package/lib/commands/models.js +67 -0
- package/lib/commands/models.js.map +1 -0
- package/lib/commands/new.d.ts +14 -0
- package/lib/commands/new.d.ts.map +1 -0
- package/lib/commands/new.js +37 -0
- package/lib/commands/new.js.map +1 -0
- package/lib/commands/status.d.ts +12 -0
- package/lib/commands/status.d.ts.map +1 -0
- package/lib/commands/status.js +30 -0
- package/lib/commands/status.js.map +1 -0
- package/lib/commands/stop.d.ts +16 -0
- package/lib/commands/stop.d.ts.map +1 -0
- package/lib/commands/stop.js +27 -0
- package/lib/commands/stop.js.map +1 -0
- package/lib/commands/version.d.ts +25 -0
- package/lib/commands/version.d.ts.map +1 -0
- package/lib/commands/version.js +57 -0
- package/lib/commands/version.js.map +1 -0
- package/lib/config.d.ts +119 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +60 -0
- package/lib/config.js.map +1 -0
- package/lib/debug-logger.d.ts +8 -0
- package/lib/debug-logger.d.ts.map +1 -0
- package/lib/debug-logger.js +32 -0
- package/lib/debug-logger.js.map +1 -0
- package/lib/dsh-home.d.ts +12 -0
- package/lib/dsh-home.d.ts.map +1 -0
- package/lib/dsh-home.js +31 -0
- package/lib/dsh-home.js.map +1 -0
- package/lib/failure-display.d.ts +10 -0
- package/lib/failure-display.d.ts.map +1 -0
- package/lib/failure-display.js +42 -0
- package/lib/failure-display.js.map +1 -0
- package/lib/file-provider.d.ts +96 -0
- package/lib/file-provider.d.ts.map +1 -0
- package/lib/file-provider.js +44 -0
- package/lib/file-provider.js.map +1 -0
- package/lib/index.d.ts +31 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +31 -0
- package/lib/index.js.map +1 -0
- package/lib/interactions/index.d.ts +13 -0
- package/lib/interactions/index.d.ts.map +1 -0
- package/lib/interactions/index.js +13 -0
- package/lib/interactions/index.js.map +1 -0
- package/lib/interactions/question-backend.d.ts +133 -0
- package/lib/interactions/question-backend.d.ts.map +1 -0
- package/lib/interactions/question-backend.js +37 -0
- package/lib/interactions/question-backend.js.map +1 -0
- package/lib/interactions/question-presenter.d.ts +68 -0
- package/lib/interactions/question-presenter.d.ts.map +1 -0
- package/lib/interactions/question-presenter.js +425 -0
- package/lib/interactions/question-presenter.js.map +1 -0
- package/lib/interactions/question-renderer.d.ts +37 -0
- package/lib/interactions/question-renderer.d.ts.map +1 -0
- package/lib/interactions/question-renderer.js +79 -0
- package/lib/interactions/question-renderer.js.map +1 -0
- package/lib/interactions/question-state.d.ts +106 -0
- package/lib/interactions/question-state.d.ts.map +1 -0
- package/lib/interactions/question-state.js +99 -0
- package/lib/interactions/question-state.js.map +1 -0
- package/lib/interactions/question-text-answer.d.ts +37 -0
- package/lib/interactions/question-text-answer.d.ts.map +1 -0
- package/lib/interactions/question-text-answer.js +70 -0
- package/lib/interactions/question-text-answer.js.map +1 -0
- package/lib/interactions/question-waterfall-backend.d.ts +42 -0
- package/lib/interactions/question-waterfall-backend.d.ts.map +1 -0
- package/lib/interactions/question-waterfall-backend.js +162 -0
- package/lib/interactions/question-waterfall-backend.js.map +1 -0
- package/lib/lifecycle.d.ts +36 -0
- package/lib/lifecycle.d.ts.map +1 -0
- package/lib/lifecycle.js +303 -0
- package/lib/lifecycle.js.map +1 -0
- package/lib/loggable-error.d.ts +10 -0
- package/lib/loggable-error.d.ts.map +1 -0
- package/lib/loggable-error.js +32 -0
- package/lib/loggable-error.js.map +1 -0
- package/lib/message-converter.d.ts +64 -0
- package/lib/message-converter.d.ts.map +1 -0
- package/lib/message-converter.js +191 -0
- package/lib/message-converter.js.map +1 -0
- package/lib/model-selection.d.ts +54 -0
- package/lib/model-selection.d.ts.map +1 -0
- package/lib/model-selection.js +116 -0
- package/lib/model-selection.js.map +1 -0
- package/lib/outbox/binding-resolver.d.ts +23 -0
- package/lib/outbox/binding-resolver.d.ts.map +1 -0
- package/lib/outbox/binding-resolver.js +38 -0
- package/lib/outbox/binding-resolver.js.map +1 -0
- package/lib/outbox/capabilities.d.ts +48 -0
- package/lib/outbox/capabilities.d.ts.map +1 -0
- package/lib/outbox/capabilities.js +35 -0
- package/lib/outbox/capabilities.js.map +1 -0
- package/lib/outbox/index.d.ts +14 -0
- package/lib/outbox/index.d.ts.map +1 -0
- package/lib/outbox/index.js +14 -0
- package/lib/outbox/index.js.map +1 -0
- package/lib/outbox/service.d.ts +48 -0
- package/lib/outbox/service.d.ts.map +1 -0
- package/lib/outbox/service.js +74 -0
- package/lib/outbox/service.js.map +1 -0
- package/lib/outbox/target.d.ts +17 -0
- package/lib/outbox/target.d.ts.map +1 -0
- package/lib/outbox/target.js +15 -0
- package/lib/outbox/target.js.map +1 -0
- package/lib/outbox/tool-send.d.ts +19 -0
- package/lib/outbox/tool-send.d.ts.map +1 -0
- package/lib/outbox/tool-send.js +77 -0
- package/lib/outbox/tool-send.js.map +1 -0
- package/lib/outbox/types.d.ts +42 -0
- package/lib/outbox/types.d.ts.map +1 -0
- package/lib/outbox/types.js +30 -0
- package/lib/outbox/types.js.map +1 -0
- package/lib/plugin.d.ts +27 -0
- package/lib/plugin.d.ts.map +1 -0
- package/lib/plugin.js +47 -0
- package/lib/plugin.js.map +1 -0
- package/lib/reply-context-store.d.ts +69 -0
- package/lib/reply-context-store.d.ts.map +1 -0
- package/lib/reply-context-store.js +75 -0
- package/lib/reply-context-store.js.map +1 -0
- package/lib/reply-router.d.ts +138 -0
- package/lib/reply-router.d.ts.map +1 -0
- package/lib/reply-router.js +674 -0
- package/lib/reply-router.js.map +1 -0
- package/lib/session-router.d.ts +49 -0
- package/lib/session-router.d.ts.map +1 -0
- package/lib/session-router.js +45 -0
- package/lib/session-router.js.map +1 -0
- package/lib/workspace-resolver.d.ts +67 -0
- package/lib/workspace-resolver.d.ts.map +1 -0
- package/lib/workspace-resolver.js +102 -0
- package/lib/workspace-resolver.js.map +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable display labels for known channels. Unknown channels fall back
|
|
3
|
+
* to their raw `channelId` (see {@link channelLabel}).
|
|
4
|
+
*/
|
|
5
|
+
export declare const CHANNEL_LABELS: Record<string, string>;
|
|
6
|
+
/** Display label for a channel, falling back to the raw id for unknown ones. */
|
|
7
|
+
export declare function channelLabel(channelId: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Workspace title for a channel/account pair:
|
|
10
|
+
* - single-account channels (id in the small default set): `Channels · 微信`
|
|
11
|
+
* - multi-account: `Channels · 微信 · <accountLabel>`, where
|
|
12
|
+
* `<accountLabel>` is the readable account label when {@link safeAccountLabel}
|
|
13
|
+
* deems it safe, else the stable 6-hex short hash.
|
|
14
|
+
*/
|
|
15
|
+
export declare function channelWorkspaceTitle(input: {
|
|
16
|
+
channelId: string;
|
|
17
|
+
accountId: string;
|
|
18
|
+
}): string;
|
|
19
|
+
/**
|
|
20
|
+
* Deterministic 6-hex-character key for an account id (sha256, first 6 hex
|
|
21
|
+
* chars). Used to build path-safe, non-sensitive account segments and the
|
|
22
|
+
* fallback account label in Workspace titles.
|
|
23
|
+
*/
|
|
24
|
+
export declare function stableSafeAccountKey(accountId: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Collapse a value into a single path-safe segment: lowercase, runs of
|
|
27
|
+
* characters outside `[a-z0-9._-]` replaced with `-`, leading/trailing `-`
|
|
28
|
+
* trimmed, and an empty result falls back to `'unknown'`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function safeSegment(value: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Whether an account id may be shown readably in a Workspace title. A value
|
|
33
|
+
* is *unsafe* (returns `undefined`, so the caller uses the stable short hash)
|
|
34
|
+
* when it is:
|
|
35
|
+
* - too long (> 24 chars),
|
|
36
|
+
* - not a conservative printable-ish pattern
|
|
37
|
+
* (`/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,23}$/`), or
|
|
38
|
+
* - "obviously sensitive": an all-digits value of length >= 11 (phone-like),
|
|
39
|
+
* or containing `token` / `openid` / `secret` / `appid` (case-insensitive).
|
|
40
|
+
*
|
|
41
|
+
* This is a conservative heuristic, not a security boundary: the stable hash
|
|
42
|
+
* fallback is always available and is what callers use when this returns
|
|
43
|
+
* `undefined`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function safeAccountLabel(accountId: string): string | undefined;
|
|
46
|
+
//# sourceMappingURL=channel-label.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-label.d.ts","sourceRoot":"","sources":["../src/channel-label.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQjD,CAAC;AAEF,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAK7F;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKtE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Channel display labels and safe path/title helpers.
|
|
3
|
+
*
|
|
4
|
+
* Workspace titles group channel sessions under a human-readable name using a
|
|
5
|
+
* registry of channel display labels, and account identity is reduced to a
|
|
6
|
+
* stable, non-sensitive short string so that tokens / openids / full phone
|
|
7
|
+
* numbers are never exposed in a Workspace title or directory path.
|
|
8
|
+
*/
|
|
9
|
+
import { createHash } from 'node:crypto';
|
|
10
|
+
/**
|
|
11
|
+
* Human-readable display labels for known channels. Unknown channels fall back
|
|
12
|
+
* to their raw `channelId` (see {@link channelLabel}).
|
|
13
|
+
*/
|
|
14
|
+
export const CHANNEL_LABELS = {
|
|
15
|
+
weixin: '微信',
|
|
16
|
+
qq: 'QQ',
|
|
17
|
+
dingtalk: 'DingTalk',
|
|
18
|
+
lark: 'Lark',
|
|
19
|
+
telegram: 'Telegram',
|
|
20
|
+
discord: 'Discord',
|
|
21
|
+
slack: 'Slack',
|
|
22
|
+
};
|
|
23
|
+
/** Display label for a channel, falling back to the raw id for unknown ones. */
|
|
24
|
+
export function channelLabel(channelId) {
|
|
25
|
+
return CHANNEL_LABELS[channelId] ?? channelId;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Workspace title for a channel/account pair:
|
|
29
|
+
* - single-account channels (id in the small default set): `Channels · 微信`
|
|
30
|
+
* - multi-account: `Channels · 微信 · <accountLabel>`, where
|
|
31
|
+
* `<accountLabel>` is the readable account label when {@link safeAccountLabel}
|
|
32
|
+
* deems it safe, else the stable 6-hex short hash.
|
|
33
|
+
*/
|
|
34
|
+
export function channelWorkspaceTitle(input) {
|
|
35
|
+
const base = `Channels · ${channelLabel(input.channelId)}`;
|
|
36
|
+
if (isDefaultAccount(input.accountId))
|
|
37
|
+
return base;
|
|
38
|
+
const accountLabel = safeAccountLabel(input.accountId) ?? stableSafeAccountKey(input.accountId);
|
|
39
|
+
return `${base} · ${accountLabel}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Deterministic 6-hex-character key for an account id (sha256, first 6 hex
|
|
43
|
+
* chars). Used to build path-safe, non-sensitive account segments and the
|
|
44
|
+
* fallback account label in Workspace titles.
|
|
45
|
+
*/
|
|
46
|
+
export function stableSafeAccountKey(accountId) {
|
|
47
|
+
return createHash('sha256').update(accountId).digest('hex').slice(0, 6);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Collapse a value into a single path-safe segment: lowercase, runs of
|
|
51
|
+
* characters outside `[a-z0-9._-]` replaced with `-`, leading/trailing `-`
|
|
52
|
+
* trimmed, and an empty result falls back to `'unknown'`.
|
|
53
|
+
*/
|
|
54
|
+
export function safeSegment(value) {
|
|
55
|
+
const segment = value
|
|
56
|
+
.toLowerCase()
|
|
57
|
+
.replace(/[^a-z0-9._-]+/g, '-')
|
|
58
|
+
.replace(/^-+|-+$/g, '');
|
|
59
|
+
return segment === '' ? 'unknown' : segment;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Whether an account id may be shown readably in a Workspace title. A value
|
|
63
|
+
* is *unsafe* (returns `undefined`, so the caller uses the stable short hash)
|
|
64
|
+
* when it is:
|
|
65
|
+
* - too long (> 24 chars),
|
|
66
|
+
* - not a conservative printable-ish pattern
|
|
67
|
+
* (`/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,23}$/`), or
|
|
68
|
+
* - "obviously sensitive": an all-digits value of length >= 11 (phone-like),
|
|
69
|
+
* or containing `token` / `openid` / `secret` / `appid` (case-insensitive).
|
|
70
|
+
*
|
|
71
|
+
* This is a conservative heuristic, not a security boundary: the stable hash
|
|
72
|
+
* fallback is always available and is what callers use when this returns
|
|
73
|
+
* `undefined`.
|
|
74
|
+
*/
|
|
75
|
+
export function safeAccountLabel(accountId) {
|
|
76
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,23}$/.test(accountId))
|
|
77
|
+
return undefined;
|
|
78
|
+
if (/^\d{11,}$/.test(accountId))
|
|
79
|
+
return undefined;
|
|
80
|
+
if (/token|openid|secret|appid/i.test(accountId))
|
|
81
|
+
return undefined;
|
|
82
|
+
return accountId;
|
|
83
|
+
}
|
|
84
|
+
/** Default single-account ids treated as "the one account" for title purposes. */
|
|
85
|
+
const DEFAULT_ACCOUNT_IDS = new Set(['default', 'main', '0', 'primary', '']);
|
|
86
|
+
function isDefaultAccount(accountId) {
|
|
87
|
+
return DEFAULT_ACCOUNT_IDS.has(accountId);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=channel-label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-label.js","sourceRoot":"","sources":["../src/channel-label.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,MAAM,EAAE,IAAI;IACZ,EAAE,EAAE,IAAI;IACR,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,OAAO,cAAc,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAA+C;IACnF,MAAM,IAAI,GAAG,cAAc,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IAC3D,IAAI,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,oBAAoB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAChG,OAAO,GAAG,IAAI,MAAM,YAAY,EAAE,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,OAAO,GAAG,KAAK;SAClB,WAAW,EAAE;SACb,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3B,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3E,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,IAAI,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACnE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kFAAkF;AAClF,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;AAElG,SAAS,gBAAgB,CAAC,SAAiB;IACzC,OAAO,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { AgentSetup } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import type { ChannelLogger } from '@krischoichoi/channel-core';
|
|
4
|
+
import type { AgentManager, AgentRef } from './agent-manager.js';
|
|
5
|
+
import type { AgentRouteSpec } from './agent-router.js';
|
|
6
|
+
import type { SessionBindingStore } from './binding-store.js';
|
|
7
|
+
import { type SessionBinding, type SessionKeyInput } from './session-router.js';
|
|
8
|
+
import type { ChannelWorkspaceResolver } from './workspace-resolver.js';
|
|
9
|
+
export interface FreshChannelSession {
|
|
10
|
+
binding: SessionBinding;
|
|
11
|
+
agentRef: AgentRef;
|
|
12
|
+
}
|
|
13
|
+
interface ChannelSessionFactoryOptions {
|
|
14
|
+
ctx: Context;
|
|
15
|
+
cwd?: string;
|
|
16
|
+
bindingStore: SessionBindingStore;
|
|
17
|
+
agentManager: AgentManager;
|
|
18
|
+
workspaceResolver: ChannelWorkspaceResolver;
|
|
19
|
+
commandSetup: AgentSetup;
|
|
20
|
+
logger: ChannelLogger;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Owns the Channel Session lifecycle as one rollback-aware transaction:
|
|
24
|
+
*
|
|
25
|
+
* - `create` mints a fresh session id for a conversation without a binding;
|
|
26
|
+
* - `recreate` brings an EXISTING binding's session back for explicitly
|
|
27
|
+
* EPHEMERAL bindings — the only caller is the bridge's ephemeral policy
|
|
28
|
+
* branch (re-running the workspaceResolver so the recreated session lands
|
|
29
|
+
* on the SAME channel Workspace cwd a first creation would have used, then
|
|
30
|
+
* re-attaching the workspace and keeping the durable binding). A live agent
|
|
31
|
+
* is borrowed as-is. A durable session that is MISSING behind a binding is
|
|
32
|
+
* NOT recreated here: the bridge fails loud with `SessionNotFoundError`
|
|
33
|
+
* (`/new` is the explicit repair path).
|
|
34
|
+
*
|
|
35
|
+
* cwd / workspace / binding are SESSION LIFECYCLE concerns, so both paths
|
|
36
|
+
* live here — never in the generic AgentManager.
|
|
37
|
+
*/
|
|
38
|
+
export declare class ChannelSessionFactory {
|
|
39
|
+
private readonly options;
|
|
40
|
+
constructor(options: ChannelSessionFactoryOptions);
|
|
41
|
+
create(conversation: SessionKeyInput, route: AgentRouteSpec): Promise<FreshChannelSession>;
|
|
42
|
+
/**
|
|
43
|
+
* Recreate the session behind an EXISTING explicitly EPHEMERAL binding —
|
|
44
|
+
* the "existing binding -> missing persistence -> recreate" case after a
|
|
45
|
+
* process restart.
|
|
46
|
+
*
|
|
47
|
+
* A live agent in this process is borrowed as-is (nothing to recreate). On a
|
|
48
|
+
* miss, the SAME session id is recreated exactly like a first creation:
|
|
49
|
+
* workspaceResolver re-run (so `header.cwd` lands back on the channel
|
|
50
|
+
* Workspace, never on the host cwd), workspace re-attached, and the durable
|
|
51
|
+
* binding kept (only `updatedAt` refreshed, route snapshot reconciled).
|
|
52
|
+
*
|
|
53
|
+
* This is NEVER called for a durable session that is missing behind a
|
|
54
|
+
* binding — that is a durability inconsistency the bridge fails loud on
|
|
55
|
+
* (`SessionNotFoundError`; `/new` is the explicit repair).
|
|
56
|
+
*/
|
|
57
|
+
recreate(binding: SessionBinding, route: AgentRouteSpec): Promise<FreshChannelSession>;
|
|
58
|
+
/** Rebuild the bindable conversation identity from a durable binding. */
|
|
59
|
+
private conversationOf;
|
|
60
|
+
/** Resolved cwd with the same fallback chain used by fresh creation. */
|
|
61
|
+
private effectiveCwd;
|
|
62
|
+
/**
|
|
63
|
+
* Publish transaction tail shared by create/recreate: verify the created
|
|
64
|
+
* agent reached `ctx.sessions` (dispose + throw when it did not), then
|
|
65
|
+
* soft-attach the session to the resolved channel workspace (attach failure
|
|
66
|
+
* is NON-FATAL — the session stays alive, grouped as ungrouped).
|
|
67
|
+
*/
|
|
68
|
+
private publishSession;
|
|
69
|
+
/**
|
|
70
|
+
* Persist the binding; on failure roll the transaction back (detach the
|
|
71
|
+
* workspace, dispose the freshly created/recreated agent) and rethrow.
|
|
72
|
+
*/
|
|
73
|
+
private commitBinding;
|
|
74
|
+
}
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=channel-session-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-session-factory.d.ts","sourceRoot":"","sources":["../src/channel-session-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAEV,wBAAwB,EAEzB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,UAAU,4BAA4B;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,mBAAmB,CAAC;IAClC,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,wBAAwB,CAAC;IAC5C,YAAY,EAAE,UAAU,CAAC;IACzB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,4BAA4B;IAE5D,MAAM,CACV,YAAY,EAAE,eAAe,EAC7B,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,mBAAmB,CAAC;IAqD/B;;;;;;;;;;;;;;OAcG;IACG,QAAQ,CACZ,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,mBAAmB,CAAC;IAoD/B,yEAAyE;IACzE,OAAO,CAAC,cAAc;IAWtB,wEAAwE;IACxE,OAAO,CAAC,YAAY;IAIpB;;;;;OAKG;YACW,cAAc;IAiD5B;;;OAGG;YACW,aAAa;CAY5B"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { SessionId } from '@deepseek-ai/dsh-session';
|
|
3
|
+
import { stableSafeAccountKey } from './channel-label.js';
|
|
4
|
+
import { toLoggableError } from './loggable-error.js';
|
|
5
|
+
import { bindingKey, SESSION_BINDING_SCHEMA_VERSION, } from './session-router.js';
|
|
6
|
+
/**
|
|
7
|
+
* Owns the Channel Session lifecycle as one rollback-aware transaction:
|
|
8
|
+
*
|
|
9
|
+
* - `create` mints a fresh session id for a conversation without a binding;
|
|
10
|
+
* - `recreate` brings an EXISTING binding's session back for explicitly
|
|
11
|
+
* EPHEMERAL bindings — the only caller is the bridge's ephemeral policy
|
|
12
|
+
* branch (re-running the workspaceResolver so the recreated session lands
|
|
13
|
+
* on the SAME channel Workspace cwd a first creation would have used, then
|
|
14
|
+
* re-attaching the workspace and keeping the durable binding). A live agent
|
|
15
|
+
* is borrowed as-is. A durable session that is MISSING behind a binding is
|
|
16
|
+
* NOT recreated here: the bridge fails loud with `SessionNotFoundError`
|
|
17
|
+
* (`/new` is the explicit repair path).
|
|
18
|
+
*
|
|
19
|
+
* cwd / workspace / binding are SESSION LIFECYCLE concerns, so both paths
|
|
20
|
+
* live here — never in the generic AgentManager.
|
|
21
|
+
*/
|
|
22
|
+
export class ChannelSessionFactory {
|
|
23
|
+
options;
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.options = options;
|
|
26
|
+
}
|
|
27
|
+
async create(conversation, route) {
|
|
28
|
+
const sessionId = `ch-${randomUUID()}`;
|
|
29
|
+
const resolved = await this.options.workspaceResolver.resolve(conversation);
|
|
30
|
+
const cwd = this.effectiveCwd(resolved);
|
|
31
|
+
this.options.logger.debug('[channel-harness] creating fresh session', {
|
|
32
|
+
sessionId,
|
|
33
|
+
channelId: conversation.channelId,
|
|
34
|
+
cwd,
|
|
35
|
+
workspaceId: resolved.workspace?.id,
|
|
36
|
+
});
|
|
37
|
+
const agentRef = await this.options.agentManager.create(sessionId, route, this.options.commandSetup, { cwd });
|
|
38
|
+
const attachedWorkspace = await this.publishSession(sessionId, resolved, cwd, 'fresh');
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const binding = {
|
|
41
|
+
channelId: conversation.channelId,
|
|
42
|
+
accountId: conversation.accountId,
|
|
43
|
+
conversationId: conversation.conversationId,
|
|
44
|
+
// v3: stable conversation identity. The bridge populates this from the
|
|
45
|
+
// event; when a caller omits it we fall back to the legacy dm default.
|
|
46
|
+
conversationType: conversation.conversationType ?? 'dm',
|
|
47
|
+
...(conversation.threadId ? { threadId: conversation.threadId } : {}),
|
|
48
|
+
...(conversation.senderId ? { senderId: conversation.senderId } : {}),
|
|
49
|
+
sessionId,
|
|
50
|
+
durability: this.options.agentManager.canResume() ? 'durable' : 'ephemeral',
|
|
51
|
+
route,
|
|
52
|
+
schemaVersion: SESSION_BINDING_SCHEMA_VERSION,
|
|
53
|
+
createdAt: now,
|
|
54
|
+
updatedAt: now,
|
|
55
|
+
};
|
|
56
|
+
await this.commitBinding(binding, attachedWorkspace);
|
|
57
|
+
this.options.agentManager.registerBinding(binding);
|
|
58
|
+
this.options.logger.info('[channel-harness] fresh channel session created', {
|
|
59
|
+
sessionId,
|
|
60
|
+
channelId: conversation.channelId,
|
|
61
|
+
accountIdHash: stableSafeAccountKey(conversation.accountId),
|
|
62
|
+
workspaceId: attachedWorkspace?.id,
|
|
63
|
+
cwd,
|
|
64
|
+
bindingKey: bindingKey(binding),
|
|
65
|
+
});
|
|
66
|
+
return { binding, agentRef };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Recreate the session behind an EXISTING explicitly EPHEMERAL binding —
|
|
70
|
+
* the "existing binding -> missing persistence -> recreate" case after a
|
|
71
|
+
* process restart.
|
|
72
|
+
*
|
|
73
|
+
* A live agent in this process is borrowed as-is (nothing to recreate). On a
|
|
74
|
+
* miss, the SAME session id is recreated exactly like a first creation:
|
|
75
|
+
* workspaceResolver re-run (so `header.cwd` lands back on the channel
|
|
76
|
+
* Workspace, never on the host cwd), workspace re-attached, and the durable
|
|
77
|
+
* binding kept (only `updatedAt` refreshed, route snapshot reconciled).
|
|
78
|
+
*
|
|
79
|
+
* This is NEVER called for a durable session that is missing behind a
|
|
80
|
+
* binding — that is a durability inconsistency the bridge fails loud on
|
|
81
|
+
* (`SessionNotFoundError`; `/new` is the explicit repair).
|
|
82
|
+
*/
|
|
83
|
+
async recreate(binding, route) {
|
|
84
|
+
const sessionId = binding.sessionId;
|
|
85
|
+
// Live agent loaded in this process -> borrow it, no state change.
|
|
86
|
+
const live = await this.options.agentManager.borrowIfLive(sessionId, route, this.options.commandSetup);
|
|
87
|
+
if (live) {
|
|
88
|
+
this.options.logger.debug('[channel-harness] reused live session for existing binding', { sessionId, bindingKey: bindingKey(binding) });
|
|
89
|
+
return { binding, agentRef: live };
|
|
90
|
+
}
|
|
91
|
+
const resolved = await this.options.workspaceResolver.resolve(this.conversationOf(binding));
|
|
92
|
+
const cwd = this.effectiveCwd(resolved);
|
|
93
|
+
this.options.logger.debug('[channel-harness] recreating session for existing binding', {
|
|
94
|
+
sessionId,
|
|
95
|
+
channelId: binding.channelId,
|
|
96
|
+
cwd,
|
|
97
|
+
workspaceId: resolved.workspace?.id,
|
|
98
|
+
});
|
|
99
|
+
const agentRef = await this.options.agentManager.create(sessionId, route, this.options.commandSetup, { cwd });
|
|
100
|
+
const attachedWorkspace = await this.publishSession(sessionId, resolved, cwd, 'recreated');
|
|
101
|
+
const now = Date.now();
|
|
102
|
+
const refreshed = { ...binding, route, updatedAt: now };
|
|
103
|
+
await this.commitBinding(refreshed, attachedWorkspace);
|
|
104
|
+
this.options.agentManager.registerBinding(refreshed);
|
|
105
|
+
this.options.logger.info('[channel-harness] channel session recreated (binding kept)', {
|
|
106
|
+
sessionId,
|
|
107
|
+
channelId: binding.channelId,
|
|
108
|
+
accountIdHash: stableSafeAccountKey(binding.accountId),
|
|
109
|
+
workspaceId: attachedWorkspace?.id,
|
|
110
|
+
cwd,
|
|
111
|
+
bindingKey: bindingKey(binding),
|
|
112
|
+
});
|
|
113
|
+
return { binding: refreshed, agentRef };
|
|
114
|
+
}
|
|
115
|
+
/** Rebuild the bindable conversation identity from a durable binding. */
|
|
116
|
+
conversationOf(binding) {
|
|
117
|
+
return {
|
|
118
|
+
channelId: binding.channelId,
|
|
119
|
+
accountId: binding.accountId,
|
|
120
|
+
conversationId: binding.conversationId,
|
|
121
|
+
conversationType: binding.conversationType,
|
|
122
|
+
...(binding.senderId ? { senderId: binding.senderId } : {}),
|
|
123
|
+
...(binding.threadId ? { threadId: binding.threadId } : {}),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** Resolved cwd with the same fallback chain used by fresh creation. */
|
|
127
|
+
effectiveCwd(resolved) {
|
|
128
|
+
return resolved.workspace?.path ?? resolved.cwd ?? this.options.cwd ?? process.cwd();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Publish transaction tail shared by create/recreate: verify the created
|
|
132
|
+
* agent reached `ctx.sessions` (dispose + throw when it did not), then
|
|
133
|
+
* soft-attach the session to the resolved channel workspace (attach failure
|
|
134
|
+
* is NON-FATAL — the session stays alive, grouped as ungrouped).
|
|
135
|
+
*/
|
|
136
|
+
async publishSession(sessionId, resolved, cwd, kind) {
|
|
137
|
+
const sessions = this.options.ctx.get('sessions');
|
|
138
|
+
const liveSession = sessions?.get(SessionId(sessionId));
|
|
139
|
+
if (sessions && !liveSession) {
|
|
140
|
+
await this.options.agentManager.disposeSession(sessionId);
|
|
141
|
+
throw new Error(`ctx.agents.create resolved but session '${sessionId}' is absent from ctx.sessions`);
|
|
142
|
+
}
|
|
143
|
+
this.options.logger.debug(`[channel-harness] ${kind} session published`, {
|
|
144
|
+
sessionId,
|
|
145
|
+
requestedCwd: cwd,
|
|
146
|
+
sessionCwd: liveSession?.header.cwd,
|
|
147
|
+
workspacePath: resolved.workspace?.path,
|
|
148
|
+
});
|
|
149
|
+
let attachedWorkspace;
|
|
150
|
+
if (resolved.workspace) {
|
|
151
|
+
try {
|
|
152
|
+
await resolved.workspace.attachSession(SessionId(sessionId));
|
|
153
|
+
attachedWorkspace = resolved.workspace;
|
|
154
|
+
this.options.logger.debug('[channel-harness] workspace attached', {
|
|
155
|
+
sessionId,
|
|
156
|
+
workspaceId: resolved.workspace.id,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
this.options.logger.error('[channel-harness] workspace attach failed; keeping session alive', {
|
|
161
|
+
sessionId,
|
|
162
|
+
requestedCwd: cwd,
|
|
163
|
+
sessionCwd: liveSession?.header.cwd,
|
|
164
|
+
workspaceId: resolved.workspace.id,
|
|
165
|
+
workspacePath: resolved.workspace.path,
|
|
166
|
+
error: toLoggableError(error),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return attachedWorkspace;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Persist the binding; on failure roll the transaction back (detach the
|
|
174
|
+
* workspace, dispose the freshly created/recreated agent) and rethrow.
|
|
175
|
+
*/
|
|
176
|
+
async commitBinding(binding, attachedWorkspace) {
|
|
177
|
+
try {
|
|
178
|
+
await this.options.bindingStore.put(binding);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
await attachedWorkspace?.detachSession(SessionId(binding.sessionId)).catch(() => { });
|
|
182
|
+
await this.options.agentManager.disposeSession(binding.sessionId);
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=channel-session-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-session-factory.js","sourceRoot":"","sources":["../src/channel-session-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/bind` command (issue #6): rebind/attach an existing session to the
|
|
3
|
+
* current conversation.
|
|
4
|
+
*
|
|
5
|
+
* Two-step, fail-closed:
|
|
6
|
+
*
|
|
7
|
+
* /bind <id> resolve the target (exact id, or a UNIQUE prefix) and
|
|
8
|
+
* surface what will happen — never mutates anything.
|
|
9
|
+
* /bind <id> confirm re-resolve (guarding against races), then re-point the
|
|
10
|
+
* current conversation's durable binding at the target.
|
|
11
|
+
*
|
|
12
|
+
* Guard rails: a unique-prefix match is required (ambiguous prefixes list the
|
|
13
|
+
* candidates and refuse), a target already bound to a DIFFERENT conversation
|
|
14
|
+
* is refused (one conversation ↔ one session), and a persisted Agent preset
|
|
15
|
+
* that conflicts with the conversation's route is refused — mirroring the
|
|
16
|
+
* official resume semantics instead of producing a binding that cannot resume.
|
|
17
|
+
*/
|
|
18
|
+
import { type CommandDefinition } from '@deepseek-ai/dsh-commands';
|
|
19
|
+
import type { ChannelCommandDependencies } from './index.js';
|
|
20
|
+
export declare function createBindCommand(deps: ChannelCommandDependencies): CommandDefinition;
|
|
21
|
+
//# sourceMappingURL=bind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bind.d.ts","sourceRoot":"","sources":["../../src/commands/bind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAyB,0BAA0B,EAAE,MAAM,YAAY,CAAC;AA0CpF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,0BAA0B,GAAG,iBAAiB,CAmCrF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/bind` command (issue #6): rebind/attach an existing session to the
|
|
3
|
+
* current conversation.
|
|
4
|
+
*
|
|
5
|
+
* Two-step, fail-closed:
|
|
6
|
+
*
|
|
7
|
+
* /bind <id> resolve the target (exact id, or a UNIQUE prefix) and
|
|
8
|
+
* surface what will happen — never mutates anything.
|
|
9
|
+
* /bind <id> confirm re-resolve (guarding against races), then re-point the
|
|
10
|
+
* current conversation's durable binding at the target.
|
|
11
|
+
*
|
|
12
|
+
* Guard rails: a unique-prefix match is required (ambiguous prefixes list the
|
|
13
|
+
* candidates and refuse), a target already bound to a DIFFERENT conversation
|
|
14
|
+
* is refused (one conversation ↔ one session), and a persisted Agent preset
|
|
15
|
+
* that conflicts with the conversation's route is refused — mirroring the
|
|
16
|
+
* official resume semantics instead of producing a binding that cannot resume.
|
|
17
|
+
*/
|
|
18
|
+
import {} from '@deepseek-ai/dsh-commands';
|
|
19
|
+
/** Minimum prefix length before a non-exact query is even considered. */
|
|
20
|
+
const MIN_PREFIX_LENGTH = 4;
|
|
21
|
+
function usage() {
|
|
22
|
+
return {
|
|
23
|
+
kind: 'error',
|
|
24
|
+
text: '用法:/bind <会话ID> [confirm] —— 先解析目标,确认后加 confirm 执行重绑。',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function describeResolution(resolution, query) {
|
|
28
|
+
switch (resolution.kind) {
|
|
29
|
+
case 'missing':
|
|
30
|
+
return `未找到匹配的会话:${query}。请从 Web UI 复制完整会话 ID。`;
|
|
31
|
+
case 'ambiguous':
|
|
32
|
+
return [
|
|
33
|
+
`会话 ID 前缀不唯一(${resolution.candidates?.length ?? 0} 个匹配),已拒绝执行:`,
|
|
34
|
+
...(resolution.candidates ?? []).map((id) => `- ${id}`),
|
|
35
|
+
'请使用完整 ID。',
|
|
36
|
+
].join('\n');
|
|
37
|
+
case 'resolved':
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
if (resolution.boundElsewhere) {
|
|
41
|
+
return `会话 ${resolution.sessionId} 已绑定到其他对话,拒绝重绑(一个对话只对应一个会话)。`;
|
|
42
|
+
}
|
|
43
|
+
if (resolution.conflict) {
|
|
44
|
+
return [
|
|
45
|
+
`会话 ${resolution.sessionId} 的 Agent 预设(${resolution.preset})与本对话的路由预设冲突,`,
|
|
46
|
+
'重绑后将无法恢复,已拒绝执行。',
|
|
47
|
+
].join(' ');
|
|
48
|
+
}
|
|
49
|
+
return [
|
|
50
|
+
`将把本对话绑定到会话 ${resolution.sessionId}:`,
|
|
51
|
+
resolution.preset ? `- Agent 预设:${resolution.preset}` : '- Agent 预设:无(沿用默认)',
|
|
52
|
+
'- 这会替换当前对话的既有会话关联。',
|
|
53
|
+
`确认无误请执行:/bind ${resolution.sessionId} confirm`,
|
|
54
|
+
].join('\n');
|
|
55
|
+
}
|
|
56
|
+
export function createBindCommand(deps) {
|
|
57
|
+
return {
|
|
58
|
+
name: 'bind',
|
|
59
|
+
description: 'Rebind this conversation to an existing session',
|
|
60
|
+
async handler(invocation) {
|
|
61
|
+
if (!deps.bind) {
|
|
62
|
+
return { kind: 'error', text: '当前部署不支持会话重绑。' };
|
|
63
|
+
}
|
|
64
|
+
const parts = invocation.rawInput.trim().split(/\s+/).filter((part) => part.length > 0);
|
|
65
|
+
if (parts.length === 0 || parts.length > 2)
|
|
66
|
+
return usage();
|
|
67
|
+
const [query, confirmFlag] = parts;
|
|
68
|
+
if (confirmFlag !== undefined && confirmFlag !== 'confirm')
|
|
69
|
+
return usage();
|
|
70
|
+
const resolution = await deps.bind.resolve(invocation.agent, query);
|
|
71
|
+
if (confirmFlag === undefined) {
|
|
72
|
+
if (resolution.kind === 'resolved' && resolution.sessionId === String(invocation.agent.id)) {
|
|
73
|
+
return { kind: 'error', text: '本对话已绑定该会话。' };
|
|
74
|
+
}
|
|
75
|
+
return { kind: 'success', text: describeResolution(resolution, query) };
|
|
76
|
+
}
|
|
77
|
+
if (resolution.kind !== 'resolved') {
|
|
78
|
+
return { kind: 'error', text: describeResolution(resolution, query) };
|
|
79
|
+
}
|
|
80
|
+
if (resolution.boundElsewhere || resolution.conflict) {
|
|
81
|
+
return { kind: 'error', text: describeResolution(resolution, query) };
|
|
82
|
+
}
|
|
83
|
+
await deps.bind.confirm(invocation.agent, resolution.sessionId);
|
|
84
|
+
return {
|
|
85
|
+
kind: 'success',
|
|
86
|
+
text: `已重绑:本对话现在使用会话 ${resolution.sessionId}。下一条消息将在该会话中继续。`,
|
|
87
|
+
};
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=bind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../../src/commands/bind.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/help` command (spec §13).
|
|
3
|
+
*
|
|
4
|
+
* Discovery is read LIVE from the official registry — never from a static
|
|
5
|
+
* list: `deps.listCommands(agent)` returns the effective view after global +
|
|
6
|
+
* agent-scope shadowing, so Harness plugins that register new commands
|
|
7
|
+
* (e.g. /compact, /goal, /plan) appear on the channel side without a channel
|
|
8
|
+
* upgrade. `/help <name>` resolves one command via `deps.findCommand`.
|
|
9
|
+
* The registry is reached through deps (bridged from the plugin ctx) — never
|
|
10
|
+
* through `invocation.agent.ctx`, which the agent-loop scope does not inject.
|
|
11
|
+
*/
|
|
12
|
+
import { type CommandDefinition } from '@deepseek-ai/dsh-commands';
|
|
13
|
+
import type { ChannelCommandDependencies } from './index.js';
|
|
14
|
+
export declare function createHelpCommand(deps: ChannelCommandDependencies): CommandDefinition;
|
|
15
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAiD7D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,0BAA0B,GAAG,iBAAiB,CAmCrF"}
|