dsh-connect 0.9.0 → 0.9.2
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.i18n.yaml +2 -2
- package/README.md +119 -18
- package/README.zh.md +87 -13
- package/client/client.js +18 -15
- package/client/client.js.map +2 -2
- package/client/settings-client.mjs +22 -13
- package/lib/channels/dingtalk/index.d.ts +49 -49
- package/lib/channels/dingtalk/index.d.ts.map +1 -1
- package/lib/channels/feishu/adapter.d.ts +8 -1
- package/lib/channels/feishu/adapter.d.ts.map +1 -1
- package/lib/channels/feishu/adapter.js +120 -39
- package/lib/channels/feishu/adapter.js.map +1 -1
- package/lib/channels/feishu/index.d.ts +27 -27
- package/lib/channels/feishu/index.d.ts.map +1 -1
- package/lib/channels/telegram/index.d.ts +13 -13
- package/lib/channels/telegram/index.d.ts.map +1 -1
- package/lib/channels/web/adapter.d.ts +3 -1
- package/lib/channels/web/adapter.d.ts.map +1 -1
- package/lib/channels/web/adapter.js +3 -1
- package/lib/channels/web/adapter.js.map +1 -1
- package/lib/channels/web/index.d.ts +5 -5
- package/lib/channels/web/index.d.ts.map +1 -1
- package/lib/index.d.ts +42 -58
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +162 -57
- package/lib/index.js.map +1 -1
- package/lib/interaction.d.ts +90 -50
- package/lib/interaction.d.ts.map +1 -1
- package/lib/interaction.js +233 -272
- package/lib/interaction.js.map +1 -1
- package/lib/retry.d.ts.map +1 -1
- package/lib/retry.js +7 -1
- package/lib/retry.js.map +1 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +0 -2
- package/lib/service.js.map +1 -1
- package/lib/settings/legacy-import.d.ts +190 -0
- package/lib/settings/legacy-import.d.ts.map +1 -0
- package/lib/settings/legacy-import.js +373 -0
- package/lib/settings/legacy-import.js.map +1 -0
- package/lib/settings/namespace.d.ts +204 -116
- package/lib/settings/namespace.d.ts.map +1 -1
- package/lib/settings/namespace.js +235 -148
- package/lib/settings/namespace.js.map +1 -1
- package/lib/settings/settings-model.d.ts.map +1 -1
- package/lib/settings/settings-model.js +10 -1
- package/lib/settings/settings-model.js.map +1 -1
- package/lib/settings/settings-service.d.ts +13 -0
- package/lib/settings/settings-service.d.ts.map +1 -1
- package/lib/settings/settings-service.js +73 -4
- package/lib/settings/settings-service.js.map +1 -1
- package/lib/types.d.ts +14 -1
- package/lib/types.d.ts.map +1 -1
- package/package.json +12 -11
package/lib/index.js
CHANGED
|
@@ -16,10 +16,10 @@ import { ConnectService } from "./service.js";
|
|
|
16
16
|
import { resolveStateDir } from "./state-dir.js";
|
|
17
17
|
import { CHANNELS, extractConfigSecrets, injectSecrets, } from "./settings/channels.js";
|
|
18
18
|
import { ChannelRuntime } from "./settings/channel-runtime.js";
|
|
19
|
-
import { installConnectSection } from "./settings/namespace.js";
|
|
19
|
+
import { CONNECT_PRESENTATION, installConnectSection, materializeConfig, paneConfigFields, sectionOf, } from "./settings/namespace.js";
|
|
20
|
+
import { importLegacySection } from "./settings/legacy-import.js";
|
|
20
21
|
import { installSettingsRpc } from "./settings/settings-rpc.js";
|
|
21
22
|
import { createSettingsService } from "./settings/settings-service.js";
|
|
22
|
-
import { CHANNEL_CONFIG_FIELDS } from "./settings/settings-model.js";
|
|
23
23
|
import { CHANNEL_SECRET_KEYS, createCredentialStore, } from "./settings/credential-store.js";
|
|
24
24
|
import { register as feishuRegister, loadCredentials } from "./channels/feishu/index.js";
|
|
25
25
|
import { register as telegramRegister } from "./channels/telegram/index.js";
|
|
@@ -119,6 +119,53 @@ async function migrateConfigSecrets(provider, cfg, enabled) {
|
|
|
119
119
|
}
|
|
120
120
|
await migrateOnboardedSecrets(provider, enabled);
|
|
121
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* The profile entry id this instance was loaded from (`connect`).
|
|
124
|
+
*
|
|
125
|
+
* This — not the package name — is what `SettingsForms.replace()` addresses:
|
|
126
|
+
* its own jsdoc calls the first argument "Profile entry id". It comes from the
|
|
127
|
+
* loader entry, which is attached to the fiber at runtime but *typed* only in
|
|
128
|
+
* `cordis-plugin-loader`'s `declare module` augmentation; that package is the
|
|
129
|
+
* host's loader, not a dependency of this plugin, so importing the type is not
|
|
130
|
+
* an option and the narrow cast below is the whole of the compromise. Returns
|
|
131
|
+
* `undefined` outside a loader (`new Context().plugin(...)` in a test), which
|
|
132
|
+
* `installConnectSection` reports and degrades on rather than failing.
|
|
133
|
+
*/
|
|
134
|
+
function entryId(ctx) {
|
|
135
|
+
const fiber = ctx.fiber;
|
|
136
|
+
const id = fiber?.entry?.options?.id;
|
|
137
|
+
return typeof id === "string" && id.length > 0 ? id : undefined;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The Harness home as the host resolved it, when it told us.
|
|
141
|
+
*
|
|
142
|
+
* `profileContext.home` is the authoritative answer (it also covers a home
|
|
143
|
+
* configured outside the environment); `undefined` hands the question to
|
|
144
|
+
* `resolveHarnessHome()`, which repeats the `$DSH_HOME` → `~/.dsh` precedence on
|
|
145
|
+
* its own. The pre-0.2 settings document lived in the *home*, not in the
|
|
146
|
+
* profile directory, which is why this is not derived from the state dir.
|
|
147
|
+
*/
|
|
148
|
+
function harnessHome(ctx) {
|
|
149
|
+
const profile = ctx.get?.("profileContext");
|
|
150
|
+
return typeof profile?.home === "string" ? profile.home : undefined;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* The active profile's patch file — `~/.dsh/profiles/<profile>/cordis.patch.yml`.
|
|
154
|
+
*
|
|
155
|
+
* Same `profileContext` service as above (`profileContext.patchPath`), and the
|
|
156
|
+
* same reason for going through `ctx.get`: the field is the host's, not ours.
|
|
157
|
+
* The one-shot legacy import anchors its marker on this path, because the
|
|
158
|
+
* marker means "this profile entry has already consumed the legacy document" and
|
|
159
|
+
* a profile is the only unit that can move without that staying true.
|
|
160
|
+
*/
|
|
161
|
+
function profilePatchPath(ctx) {
|
|
162
|
+
const profile = ctx.get?.("profileContext");
|
|
163
|
+
return typeof profile?.patchPath === "string" ? profile.patchPath : undefined;
|
|
164
|
+
}
|
|
165
|
+
/** One-line error text for a warning line; `String()` for a thrown non-Error. */
|
|
166
|
+
function errorText(error) {
|
|
167
|
+
return error instanceof Error ? error.message : String(error);
|
|
168
|
+
}
|
|
122
169
|
/** Cordis plugin name used by loader diagnostics. */
|
|
123
170
|
export const name = "connect";
|
|
124
171
|
/**
|
|
@@ -170,14 +217,16 @@ export const Config = z.object({
|
|
|
170
217
|
notifyLevel: z.union([z.const("full"), z.const("important"), z.const("result")]),
|
|
171
218
|
/** Proactive progress-notice interval ms when a turn stays silent (default: 300000 = 5 min; 0 disables). */
|
|
172
219
|
progressTimeoutMs: z.number(),
|
|
173
|
-
/**
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
220
|
+
/**
|
|
221
|
+
* Channels to activate, shared `channelDefaults`, and the per-channel options
|
|
222
|
+
* the settings pane edits. Spread from `paneConfigFields()` rather than
|
|
223
|
+
* restated: those are exactly the fields a profile entry is allowed to
|
|
224
|
+
* hot-commit, so declaring them here as `volatile` leaves is what turns a pane
|
|
225
|
+
* save into a live change instead of a remount (see `settings/namespace.ts`).
|
|
226
|
+
* Each channel's `appSecret`/`appId`/`botToken` stays *outside* this set on
|
|
227
|
+
* purpose — a volatile container would copy the secret into the profile.
|
|
228
|
+
*/
|
|
229
|
+
...paneConfigFields(),
|
|
181
230
|
/** Optional path to persist web-settings edits (non-secret). */
|
|
182
231
|
settingsStatePath: z.string(),
|
|
183
232
|
});
|
|
@@ -189,9 +238,16 @@ export const Config = z.object({
|
|
|
189
238
|
* `apply` (the fiber is still LOADING until this function resolves).
|
|
190
239
|
*/
|
|
191
240
|
export async function apply(ctx, config = {}) {
|
|
192
|
-
//
|
|
193
|
-
//
|
|
194
|
-
|
|
241
|
+
// `config` as the loader resolved it. The pane-editable field set is declared
|
|
242
|
+
// `volatile` (see `Config` above), so those fields arrive here as *references*
|
|
243
|
+
// (`{ get() }`) whose value the loader replaces in place, while ordinary
|
|
244
|
+
// fields arrive as plain data. Both are kept: every consumer below works on a
|
|
245
|
+
// materialized plain-data copy (`cfg`, and nothing mutates the caller's
|
|
246
|
+
// object — `materializeConfig` copies as it walks), and the references stay
|
|
247
|
+
// behind in `rawConfig` so a pane save can be read back without re-running
|
|
248
|
+
// `apply`.
|
|
249
|
+
const rawConfig = (config ?? {});
|
|
250
|
+
const cfg = materializeConfig(rawConfig);
|
|
195
251
|
const connect = new ConnectService(ctx, cfg);
|
|
196
252
|
// DSH credentials store: report presence + inject secrets into each channel
|
|
197
253
|
// config so store-backed secrets reach the adapter without the config file
|
|
@@ -245,13 +301,35 @@ export async function apply(ctx, config = {}) {
|
|
|
245
301
|
getSecrets: credentialStore ? (name) => credentialStore.get(name) : undefined,
|
|
246
302
|
});
|
|
247
303
|
await runtime.apply(finalCfg);
|
|
248
|
-
//
|
|
249
|
-
//
|
|
250
|
-
//
|
|
251
|
-
//
|
|
252
|
-
//
|
|
253
|
-
//
|
|
254
|
-
//
|
|
304
|
+
// Web-settings pane state. The pane's store is the profile entry itself (see
|
|
305
|
+
// the namespace block below); this path backs only the *fallback* store, used
|
|
306
|
+
// by a host that has no settings service. (The one-shot legacy import used to
|
|
307
|
+
// record itself here too; it is anchored on the profile entry now, see
|
|
308
|
+
// `profilePatchPath` — this path is user-relocatable and deletable, which made
|
|
309
|
+
// it the wrong place to remember that a migration had run.) Resolved through
|
|
310
|
+
// the shared helper and off the *merged* config, so the state file lands beside
|
|
311
|
+
// `bindings.json` and can't disagree with the stores. This used to read the raw `cfg.stateDir`,
|
|
312
|
+
// which made the path `undefined` for every profile that never set
|
|
313
|
+
// `stateDir` — and an undefined path made the settings service degrade to
|
|
314
|
+
// in-memory, so a pane save silently vanished.
|
|
315
|
+
const settingsStatePath = finalCfg.settingsStatePath
|
|
316
|
+
?? join(resolveStateDir(finalCfg), "dsh-connect-settings.json");
|
|
317
|
+
// One projection, two triggers. A change reaches the adapters either through
|
|
318
|
+
// a write (the settings pane, or the legacy import) or through the loader
|
|
319
|
+
// committing new values into the volatile references behind `rawConfig`, and
|
|
320
|
+
// both must hand the runtime the *same* shape: `ChannelRuntime` restarts an
|
|
321
|
+
// adapter whose config it reads as different, so a mismatch here would bounce
|
|
322
|
+
// a live channel on every commit.
|
|
323
|
+
const reconcile = () => {
|
|
324
|
+
void runtime.apply(sectionOf(materializeConfig(rawConfig)));
|
|
325
|
+
};
|
|
326
|
+
// Register the `connect` profile entry's pane fields with the host, so the
|
|
327
|
+
// channel selection and the per-channel non-secret options become
|
|
328
|
+
// user-editable and *effective*: the pane writes them onto the entry, the
|
|
329
|
+
// loader commits them into the volatile references `rawConfig` carries, and
|
|
330
|
+
// every change re-reconciles the running adapters through `reconcile`. The
|
|
331
|
+
// panel's own RPC (`settings/settings-rpc.ts`) is a separate transport onto
|
|
332
|
+
// the same service and is kept for the pane's compatibility path.
|
|
255
333
|
//
|
|
256
334
|
// Deferred through `inject` for the same reason as the RPC below: `settings`
|
|
257
335
|
// is a `dsh-base` row loaded after a user plugin's `apply` runs, so a plain
|
|
@@ -259,19 +337,53 @@ export async function apply(ctx, config = {}) {
|
|
|
259
337
|
// host never provides it the callback never runs and the plugin config
|
|
260
338
|
// stands on its own — which is exactly what `installConnectSection` falls
|
|
261
339
|
// back to.
|
|
262
|
-
//
|
|
263
|
-
//
|
|
340
|
+
//
|
|
341
|
+
// Set once the seam is live; read lazily by the settings service below, which
|
|
342
|
+
// is built before the deferred callback runs.
|
|
264
343
|
let liveSection;
|
|
265
344
|
const installNamespace = (scopeCtx) => {
|
|
345
|
+
const settings = scopeCtx.get?.("settings");
|
|
346
|
+
// Suppress the host's automatic Plugins-page form for this entry: this
|
|
347
|
+
// plugin ships its own client pane, and two generated editors of the same
|
|
348
|
+
// fields is how a save silently reverts. `owner` must be *our* fiber — the
|
|
349
|
+
// method's default is the settings service's own fiber, which would attach
|
|
350
|
+
// the policy to the service and leave this entry's page alone.
|
|
351
|
+
if (typeof settings?.configure === "function") {
|
|
352
|
+
try {
|
|
353
|
+
const release = settings.configure(CONNECT_PRESENTATION, ctx.fiber);
|
|
354
|
+
if (typeof release === "function")
|
|
355
|
+
ctx.effect(() => release);
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
scopeCtx.logger?.warn?.(`connect: could not suppress the automatic settings page (${errorText(error)})`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
266
361
|
const installed = installConnectSection({
|
|
267
362
|
owner: scopeCtx,
|
|
268
|
-
settings
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
},
|
|
363
|
+
settings,
|
|
364
|
+
config: rawConfig,
|
|
365
|
+
ns: entryId(ctx),
|
|
366
|
+
onChange: () => reconcile(),
|
|
273
367
|
});
|
|
274
368
|
liveSection = installed.handle;
|
|
369
|
+
// One-shot: fold a pre-0.2 `$DSH_HOME/settings.yaml` `dsh-connect:` section
|
|
370
|
+
// into the entry. The host's own legacy import renames that document and
|
|
371
|
+
// then drops this section — it has no entry by that name — so on an
|
|
372
|
+
// upgraded install this is the only remaining copy of the user's pane
|
|
373
|
+
// choices. Nothing happens when there is no such document, and `current` is
|
|
374
|
+
// the section in force, so the write cannot clear a field the legacy
|
|
375
|
+
// document does not mention.
|
|
376
|
+
const handle = installed.handle;
|
|
377
|
+
if (handle !== undefined) {
|
|
378
|
+
void importLegacySection({
|
|
379
|
+
home: harnessHome(scopeCtx),
|
|
380
|
+
write: (section) => handle.write(section),
|
|
381
|
+
current: installed.section,
|
|
382
|
+
statePath: settingsStatePath,
|
|
383
|
+
entryPath: profilePatchPath(scopeCtx),
|
|
384
|
+
logger: scopeCtx.logger,
|
|
385
|
+
});
|
|
386
|
+
}
|
|
275
387
|
};
|
|
276
388
|
if (typeof ctx.inject === "function") {
|
|
277
389
|
ctx.inject(["settings"], installNamespace);
|
|
@@ -280,6 +392,11 @@ export async function apply(ctx, config = {}) {
|
|
|
280
392
|
// Bare context (unit tests): no inject-scope API, install directly.
|
|
281
393
|
installNamespace(ctx);
|
|
282
394
|
}
|
|
395
|
+
// A pane save is not the only writer: editing a running profile's patch (or
|
|
396
|
+
// reloading the plugin entry) commits volatile paths without re-running
|
|
397
|
+
// `apply`. The host announces that here, so the adapters follow the config
|
|
398
|
+
// they were started from.
|
|
399
|
+
ctx.on("loader/volatile-update", () => reconcile());
|
|
283
400
|
// Expose the web-settings RPC. The host `connection`/`webServer` services are
|
|
284
401
|
// loaded as base plugins AFTER this user plugin's apply runs, so a plain
|
|
285
402
|
// optional inject would see `ctx.connection === undefined` and mount nothing
|
|
@@ -296,42 +413,30 @@ export async function apply(ctx, config = {}) {
|
|
|
296
413
|
// fence.
|
|
297
414
|
//
|
|
298
415
|
// Web settings pane state. When the namespace above is live, that registration
|
|
299
|
-
// *is* the store: the pane reads and writes
|
|
300
|
-
// `liveSection`, a save reconciles
|
|
301
|
-
// `onChange`) and survives a restart.
|
|
302
|
-
// fallback for a host with no settings
|
|
303
|
-
// the handle as a getter
|
|
416
|
+
// *is* the store: the pane reads and writes this plugin's entry in the active
|
|
417
|
+
// profile patch (`cordis.patch.yml`) through `liveSection`, a save reconciles
|
|
418
|
+
// the adapters immediately (via the same `onChange`) and survives a restart.
|
|
419
|
+
// The JSON file below is then only a fallback for a host with no settings
|
|
420
|
+
// service, which is why the service takes the handle as a getter, not a value.
|
|
421
|
+
// Credentials are a second call, and a secret is not config: `onCredentialsSaved`
|
|
422
|
+
// is the reconcile trigger for that plane, since no config write happens.
|
|
304
423
|
//
|
|
305
|
-
// Seeded from the live plugin config so the pane reflects the channels
|
|
306
|
-
// enabled; only NON-SECRET
|
|
307
|
-
// credential store, never in either store this file touches)
|
|
308
|
-
//
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
...(finalCfg.channelDefaults ? { channelDefaults: finalCfg.channelDefaults } : {}),
|
|
312
|
-
};
|
|
313
|
-
for (const ch of CHANNELS) {
|
|
314
|
-
const raw = finalCfg[ch] ?? {};
|
|
315
|
-
const nonSecret = {};
|
|
316
|
-
for (const field of CHANNEL_CONFIG_FIELDS[ch] ?? []) {
|
|
317
|
-
if (raw[field.key] !== undefined)
|
|
318
|
-
nonSecret[field.key] = raw[field.key];
|
|
319
|
-
}
|
|
320
|
-
if (Object.keys(nonSecret).length)
|
|
321
|
-
settingsSeed[ch] = nonSecret;
|
|
322
|
-
}
|
|
323
|
-
// Resolve through the shared helper and off the *merged* config, so the state
|
|
324
|
-
// file lands beside `bindings.json` and can't disagree with the stores. This
|
|
325
|
-
// used to read the raw `cfg.stateDir`, which made the path `undefined` for
|
|
326
|
-
// every profile that never set `stateDir` — and an undefined path made the
|
|
327
|
-
// settings service degrade to in-memory, so a pane save silently vanished.
|
|
328
|
-
const settingsStatePath = finalCfg.settingsStatePath
|
|
329
|
-
?? join(resolveStateDir(finalCfg), "dsh-connect-settings.json");
|
|
424
|
+
// Seeded from the live plugin config so the pane reflects the channels
|
|
425
|
+
// actually enabled; only NON-SECRET *declared* fields (secrets live in the
|
|
426
|
+
// credential store, never in either store this file touches), which is
|
|
427
|
+
// exactly the projection `sectionOf` performs — the same one the write path
|
|
428
|
+
// applies, so the fallback store cannot drift from the entry.
|
|
429
|
+
const settingsSeed = { ...sectionOf(finalCfg) };
|
|
330
430
|
const settingsService = createSettingsService({
|
|
331
431
|
statePath: settingsStatePath,
|
|
332
432
|
credentialStore,
|
|
333
433
|
initialConfig: settingsSeed,
|
|
334
434
|
live: () => liveSection,
|
|
435
|
+
// A rotated secret is inert until the adapters are re-applied, and the
|
|
436
|
+
// namespace's `onChange` only fires for a config write — the pane saves
|
|
437
|
+
// credentials as a second, separate call. Without this the user pastes a
|
|
438
|
+
// new appSecret, is told 「已保存」, and the bot stays broken until restart.
|
|
439
|
+
onCredentialsSaved: () => reconcile(),
|
|
335
440
|
});
|
|
336
441
|
if (typeof ctx.inject === "function") {
|
|
337
442
|
ctx.inject(["connection", "webServer"], (scopeCtx) => {
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/interaction.d.ts
CHANGED
|
@@ -2,26 +2,41 @@
|
|
|
2
2
|
* Interactive user-choices and permission approvals bridged into the chat
|
|
3
3
|
* channel (Feishu first).
|
|
4
4
|
*
|
|
5
|
-
* DSH
|
|
6
|
-
* `approval/request` waterfall, so a channel plugin cannot register a second
|
|
7
|
-
* answerer. Instead this bridge acts as an in-process client of the host's
|
|
8
|
-
* `ctx.apiProxy`: it subscribes to the same mux stream the Web GUI uses,
|
|
9
|
-
* watches for `question/requested` and `approval/requested` frames on
|
|
10
|
-
* connect-bound sessions, renders them as chat cards with buttons, and feeds
|
|
11
|
-
* the user's answer back through `apiProxy.respond` — the exact same path a
|
|
12
|
-
* Web client uses. The Web GUI stays fully functional; whoever answers first
|
|
13
|
-
* wins.
|
|
5
|
+
* DSH exposes both as cordis **waterfall** events on the calling agent's scope:
|
|
14
6
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
7
|
+
* `user-questions/request` — request `{ questions, agent?, signal? }`,
|
|
8
|
+
* result `{ answers: [{ id, selected, custom? }] }`
|
|
9
|
+
* `approval/request` — request `{ agent, toolName, callId?, reason?, signal? }`,
|
|
10
|
+
* result `'allowed-once' | 'rejected' | 'cancelled' | 'unavailable'`
|
|
11
|
+
*
|
|
12
|
+
* A listener that *returns a value* answers the request; calling `next()` hands
|
|
13
|
+
* it to the following listener (the host's Web-GUI forwarder, and ultimately
|
|
14
|
+
* the fail-closed default). So this bridge is a genuine answerer, not a client
|
|
15
|
+
* of something else: it used to subscribe to the host's `apiProxy` mux stream,
|
|
16
|
+
* but no such host service exists, and every question silently fell through —
|
|
17
|
+
* which is why a chat user saw no options at all.
|
|
18
|
+
*
|
|
19
|
+
* Two properties of the dispatch shape the registration:
|
|
20
|
+
*
|
|
21
|
+
* - Listeners are registered with `prepend: true`. The host's api-remotes
|
|
22
|
+
* plugin registers its own forwarder on these events and *parks* the
|
|
23
|
+
* waterfall on it while it waits for a Web client to answer; with no browser
|
|
24
|
+
* tab connected that promise never settles, so a listener registered after it
|
|
25
|
+
* would never run at all. Going first is the only placement that always runs.
|
|
26
|
+
* - The listener is registered on the plugin's own unscoped context, which
|
|
27
|
+
* `scopeTarget` admits to every scoped dispatch. `request.agent.id` is what
|
|
28
|
+
* decides whether one of *our* chats owns the session.
|
|
29
|
+
*
|
|
30
|
+
* Everything stays best-effort: whenever no binding matches, the prompt cannot
|
|
31
|
+
* be delivered, or the request is cancelled, the listener calls `next()` and
|
|
32
|
+
* the host's normal path (Web GUI, then fail-closed) takes over.
|
|
18
33
|
* @module dsh-connect/interaction
|
|
19
34
|
*/
|
|
20
35
|
import type { Context } from "@deepseek-ai/cordis";
|
|
21
36
|
import type { ChannelAdapter } from "./types.js";
|
|
22
37
|
import type { BindingStore } from "./binding.js";
|
|
23
38
|
import type { ResolvedConnectConfig } from "./runner.js";
|
|
24
|
-
/** One question from a `
|
|
39
|
+
/** One question from a `user-questions/request` dispatch. */
|
|
25
40
|
export interface AskQuestionLike {
|
|
26
41
|
id: string;
|
|
27
42
|
question: string;
|
|
@@ -33,19 +48,47 @@ export interface AskQuestionLike {
|
|
|
33
48
|
}[];
|
|
34
49
|
multiSelect?: boolean;
|
|
35
50
|
}
|
|
51
|
+
/** One answer as the host expects it. */
|
|
52
|
+
interface AskAnswerItem {
|
|
53
|
+
id: string;
|
|
54
|
+
selected: string[];
|
|
55
|
+
custom?: string;
|
|
56
|
+
}
|
|
57
|
+
/** An answer for one question, before it is tagged with that question's id. */
|
|
58
|
+
type AskAnswerValue = Omit<AskAnswerItem, "id">;
|
|
59
|
+
/** Result of a `user-questions/request` waterfall. */
|
|
60
|
+
export interface AskAnswer {
|
|
61
|
+
answers: AskAnswerItem[];
|
|
62
|
+
}
|
|
63
|
+
/** Payload of a `user-questions/request` waterfall. */
|
|
64
|
+
export interface AskRequestEvent {
|
|
65
|
+
questions: AskQuestionLike[];
|
|
66
|
+
agent?: {
|
|
67
|
+
id?: string;
|
|
68
|
+
};
|
|
69
|
+
signal?: AbortSignal;
|
|
70
|
+
}
|
|
71
|
+
/** Result of an `approval/request` waterfall. */
|
|
72
|
+
export type ApprovalOutcome = "allowed-once" | "rejected" | "cancelled" | "unavailable";
|
|
73
|
+
/** Payload of an `approval/request` waterfall. */
|
|
74
|
+
export interface ApprovalRequestEvent {
|
|
75
|
+
readonly agent?: {
|
|
76
|
+
id?: string;
|
|
77
|
+
};
|
|
78
|
+
readonly toolName: string;
|
|
79
|
+
readonly callId?: string;
|
|
80
|
+
readonly reason?: string;
|
|
81
|
+
readonly signal?: AbortSignal;
|
|
82
|
+
}
|
|
36
83
|
/**
|
|
37
84
|
* Decode a free-text chat reply into the answer for one question. Exact label
|
|
38
85
|
* match wins; otherwise space/comma separated numbers are mapped onto the
|
|
39
86
|
* options (multi-select accumulates them); anything else becomes free text.
|
|
40
87
|
*/
|
|
41
|
-
export declare function decodeTextAnswer(q: AskQuestionLike, text: string):
|
|
42
|
-
selected: string[];
|
|
43
|
-
custom?: string;
|
|
44
|
-
};
|
|
88
|
+
export declare function decodeTextAnswer(q: AskQuestionLike, text: string): AskAnswerValue;
|
|
45
89
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* rendered as interactive cards and answered via `apiProxy.respond`.
|
|
90
|
+
* Answer the host's user-question and approval waterfalls from the chat
|
|
91
|
+
* channel. Registered once, eagerly, at construction time.
|
|
49
92
|
*/
|
|
50
93
|
export declare class InteractionBridge {
|
|
51
94
|
private readonly ctx;
|
|
@@ -53,47 +96,44 @@ export declare class InteractionBridge {
|
|
|
53
96
|
private readonly bindings;
|
|
54
97
|
private readonly config;
|
|
55
98
|
private readonly pending;
|
|
56
|
-
private started;
|
|
57
|
-
private apiProxy?;
|
|
58
|
-
private controller?;
|
|
59
99
|
constructor(ctx: Context, adapters: ReadonlyMap<string, ChannelAdapter>, bindings: BindingStore, config: ResolvedConnectConfig);
|
|
60
|
-
/**
|
|
61
|
-
|
|
100
|
+
/** Register one waterfall listener, tolerating a host without the event API. */
|
|
101
|
+
private register;
|
|
62
102
|
/** Whether a question/approval is waiting on an answer in this chat. */
|
|
63
103
|
pendingFor(chatKey: string): boolean;
|
|
64
104
|
/** Deliver a plain-text chat reply as the answer to the pending question. */
|
|
65
105
|
answerText(chatKey: string, text: string): boolean;
|
|
66
|
-
private
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
private
|
|
70
|
-
|
|
71
|
-
private
|
|
72
|
-
/** Advance to the next unanswered question, or settle once all are answered. */
|
|
73
|
-
private stepQuestion;
|
|
74
|
-
private presentQuestionButtons;
|
|
75
|
-
private presentQuestionText;
|
|
76
|
-
private presentApprovalLoop;
|
|
106
|
+
private answerQuestion;
|
|
107
|
+
/** Ask every question in turn. `undefined` = the flow was interrupted. */
|
|
108
|
+
private runQuestions;
|
|
109
|
+
private askOne;
|
|
110
|
+
/** Options-free question: the user answers by sending an ordinary message. */
|
|
111
|
+
private askByText;
|
|
77
112
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* timeout; on expiry the same card is re-presented in place so the choice
|
|
81
|
-
* stays clickable for as long as the agent waits. Resolves `"answered"`
|
|
82
|
-
* when `onChoice` accepted a choice, `"stopped"` otherwise.
|
|
83
|
-
*
|
|
84
|
-
* `onChoice` may be async and receives the card's message id (for feedback
|
|
85
|
-
* such as updating the card once the decision is delivered). A thrown
|
|
86
|
-
* `onChoice` error resolves the loop as `"stopped"` (best-effort channel).
|
|
113
|
+
* Wait until an answer is recorded, the flow stops, or `timeoutMs` elapses.
|
|
114
|
+
* Resolves (never rejects) and always removes its own listener and timer.
|
|
87
115
|
*/
|
|
88
|
-
private
|
|
116
|
+
private waitForAnswer;
|
|
89
117
|
private questionPromptText;
|
|
90
118
|
private recordAnswer;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
119
|
+
private answerApproval;
|
|
120
|
+
/**
|
|
121
|
+
* Pick the one chat that owns `sessionId` and can actually present a prompt.
|
|
122
|
+
*
|
|
123
|
+
* Only the first match is claimed: two cards for one question would leave the
|
|
124
|
+
* second one unanswerable (the answer is delivered to the agent, not to a
|
|
125
|
+
* specific card), and the Web GUI would render a duplicate.
|
|
126
|
+
*
|
|
127
|
+
* The `web` channel is a GUI mirror whose outbound face is a no-op by design
|
|
128
|
+
* — it can neither show a card nor report a tap, so claiming it would spin
|
|
129
|
+
* the re-present loop forever. Declining it leaves the request to the host's
|
|
130
|
+
* own forwarder, which is precisely the Web GUI.
|
|
131
|
+
*/
|
|
132
|
+
private claimTarget;
|
|
133
|
+
/** Stop presenting and drop the interaction (answered, cancelled, or torn down). */
|
|
95
134
|
private settle;
|
|
96
135
|
private outbound;
|
|
97
136
|
private log;
|
|
98
137
|
}
|
|
138
|
+
export {};
|
|
99
139
|
//# sourceMappingURL=interaction.d.ts.map
|
package/lib/interaction.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../src/interaction.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../src/interaction.ts"],"names":[],"mappings":"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"}
|