jishushell 0.4.24 → 0.5.15
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/INSTALL-NOTICE +11 -0
- package/apps/anythingllm-container.yaml +287 -0
- package/apps/browserless-chromium-container.yaml +90 -0
- package/apps/filebrowser-container.yaml +163 -0
- package/apps/hermes-container.yaml +36 -2
- package/apps/ollama-binary.yaml +91 -90
- package/apps/ollama-cpu-container.yaml +8 -1
- package/apps/ollama-with-hollama-binary.yaml +91 -90
- package/apps/openclaw-binary.yaml +38 -1
- package/apps/openclaw-container.yaml +45 -2
- package/apps/openclaw-with-ollama-container.yaml +11 -2
- package/apps/openclaw-with-searxng-container.yaml +26 -2
- package/apps/openwebui-container.yaml +45 -1
- package/apps/playwright-container.yaml +7 -1
- package/apps/searxng-container.yaml +58 -7
- package/apps/weknora-container.yaml +471 -0
- package/dist/cli/app.js +79 -9
- package/dist/cli/app.js.map +1 -1
- package/dist/cli/doctor.d.ts +12 -12
- package/dist/cli/doctor.js +242 -55
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/llm.d.ts +4 -3
- package/dist/cli/llm.js +4 -3
- package/dist/cli/llm.js.map +1 -1
- package/dist/cli/panel.d.ts +6 -5
- package/dist/cli/panel.js +10 -9
- package/dist/cli/panel.js.map +1 -1
- package/dist/config.d.ts +19 -0
- package/dist/config.js +99 -1
- package/dist/config.js.map +1 -1
- package/dist/control.d.ts +7 -6
- package/dist/control.js +7 -6
- package/dist/control.js.map +1 -1
- package/dist/install.js +3 -3
- package/dist/install.js.map +1 -1
- package/dist/routes/agent-apps.d.ts +1 -1
- package/dist/routes/agent-apps.js +1 -1
- package/dist/routes/apps.js +44 -11
- package/dist/routes/apps.js.map +1 -1
- package/dist/routes/auth.js +5 -2
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/backup.js +64 -11
- package/dist/routes/backup.js.map +1 -1
- package/dist/routes/external-mounts.d.ts +17 -0
- package/dist/routes/external-mounts.js +73 -0
- package/dist/routes/external-mounts.js.map +1 -0
- package/dist/routes/file-mounts.d.ts +13 -0
- package/dist/routes/file-mounts.js +90 -0
- package/dist/routes/file-mounts.js.map +1 -0
- package/dist/routes/files-organize.d.ts +28 -0
- package/dist/routes/files-organize.js +167 -0
- package/dist/routes/files-organize.js.map +1 -0
- package/dist/routes/files.d.ts +31 -0
- package/dist/routes/files.js +321 -0
- package/dist/routes/files.js.map +1 -0
- package/dist/routes/instances.js +826 -17
- package/dist/routes/instances.js.map +1 -1
- package/dist/routes/internal.d.ts +2 -0
- package/dist/routes/internal.js +59 -0
- package/dist/routes/internal.js.map +1 -0
- package/dist/routes/llm.js +24 -35
- package/dist/routes/llm.js.map +1 -1
- package/dist/routes/setup.js +10 -10
- package/dist/routes/setup.js.map +1 -1
- package/dist/routes/system.js +1 -1
- package/dist/routes/system.js.map +1 -1
- package/dist/routes/webdav.d.ts +17 -0
- package/dist/routes/webdav.js +114 -0
- package/dist/routes/webdav.js.map +1 -0
- package/dist/server.d.ts +9 -0
- package/dist/server.js +751 -20
- package/dist/server.js.map +1 -1
- package/dist/services/agent-apps/catalog.js +4 -3
- package/dist/services/agent-apps/catalog.js.map +1 -1
- package/dist/services/agent-apps/index.d.ts +1 -1
- package/dist/services/agent-apps/index.js +1 -1
- package/dist/services/agent-apps/installers/adapter.d.ts +1 -1
- package/dist/services/agent-apps/installers/adapter.js +1 -1
- package/dist/services/agent-apps/installers/shell-script.d.ts +1 -1
- package/dist/services/agent-apps/installers/shell-script.js +3 -3
- package/dist/services/agent-apps/installers/shell-script.js.map +1 -1
- package/dist/services/agent-apps/types.d.ts +2 -2
- package/dist/services/agent-apps/types.js +1 -1
- package/dist/services/app/app-compiler.d.ts +1 -1
- package/dist/services/app/app-compiler.js +5 -5
- package/dist/services/app/app-compiler.js.map +1 -1
- package/dist/services/app/app-manager.d.ts +25 -1
- package/dist/services/app/app-manager.js +829 -150
- package/dist/services/app/app-manager.js.map +1 -1
- package/dist/services/app/custom-manager.js.map +1 -1
- package/dist/services/app/hermes-agent-manager.js +7 -4
- package/dist/services/app/hermes-agent-manager.js.map +1 -1
- package/dist/services/app/ollama-manager.js +1 -1
- package/dist/services/app/ollama-manager.js.map +1 -1
- package/dist/services/app/openclaw-manager.js +20 -3
- package/dist/services/app/openclaw-manager.js.map +1 -1
- package/dist/services/app/platform-transform.d.ts +32 -0
- package/dist/services/app/platform-transform.js +65 -0
- package/dist/services/app/platform-transform.js.map +1 -0
- package/dist/services/app/provide-resolver.d.ts +29 -0
- package/dist/services/app/provide-resolver.js +112 -0
- package/dist/services/app/provide-resolver.js.map +1 -0
- package/dist/services/app-passwords.d.ts +61 -0
- package/dist/services/app-passwords.js +173 -0
- package/dist/services/app-passwords.js.map +1 -0
- package/dist/services/backup-manager.d.ts +11 -0
- package/dist/services/backup-manager.js +177 -4
- package/dist/services/backup-manager.js.map +1 -1
- package/dist/services/capability-endpoint-validator.d.ts +41 -0
- package/dist/services/capability-endpoint-validator.js +104 -0
- package/dist/services/capability-endpoint-validator.js.map +1 -0
- package/dist/services/capability-health.d.ts +16 -0
- package/dist/services/capability-health.js +121 -0
- package/dist/services/capability-health.js.map +1 -0
- package/dist/services/capability-registry.d.ts +106 -0
- package/dist/services/capability-registry.js +313 -0
- package/dist/services/capability-registry.js.map +1 -0
- package/dist/services/connection-apply.d.ts +91 -0
- package/dist/services/connection-apply.js +475 -0
- package/dist/services/connection-apply.js.map +1 -0
- package/dist/services/connection-resolver.d.ts +65 -0
- package/dist/services/connection-resolver.js +281 -0
- package/dist/services/connection-resolver.js.map +1 -0
- package/dist/services/connection-transactor.d.ts +39 -0
- package/dist/services/connection-transactor.js +351 -0
- package/dist/services/connection-transactor.js.map +1 -0
- package/dist/services/external-mounts.d.ts +40 -0
- package/dist/services/external-mounts.js +187 -0
- package/dist/services/external-mounts.js.map +1 -0
- package/dist/services/files-manager.d.ts +252 -0
- package/dist/services/files-manager.js +1075 -0
- package/dist/services/files-manager.js.map +1 -0
- package/dist/services/files-mounts.d.ts +42 -0
- package/dist/services/files-mounts.js +207 -0
- package/dist/services/files-mounts.js.map +1 -0
- package/dist/services/instance-manager.d.ts +13 -0
- package/dist/services/instance-manager.js +138 -46
- package/dist/services/instance-manager.js.map +1 -1
- package/dist/services/llm-proxy/index.d.ts +16 -2
- package/dist/services/llm-proxy/index.js +48 -44
- package/dist/services/llm-proxy/index.js.map +1 -1
- package/dist/services/llm-proxy/probe.d.ts +6 -0
- package/dist/services/llm-proxy/probe.js +85 -0
- package/dist/services/llm-proxy/probe.js.map +1 -0
- package/dist/services/llm-proxy/ssrf.d.ts +1 -0
- package/dist/services/llm-proxy/ssrf.js +24 -9
- package/dist/services/llm-proxy/ssrf.js.map +1 -1
- package/dist/services/nomad-manager.d.ts +4 -0
- package/dist/services/nomad-manager.js +428 -35
- package/dist/services/nomad-manager.js.map +1 -1
- package/dist/services/organize/applier.d.ts +46 -0
- package/dist/services/organize/applier.js +218 -0
- package/dist/services/organize/applier.js.map +1 -0
- package/dist/services/organize/rules.d.ts +57 -0
- package/dist/services/organize/rules.js +286 -0
- package/dist/services/organize/rules.js.map +1 -0
- package/dist/services/organize/scanner.d.ts +50 -0
- package/dist/services/organize/scanner.js +366 -0
- package/dist/services/organize/scanner.js.map +1 -0
- package/dist/services/organize/store.d.ts +14 -0
- package/dist/services/organize/store.js +82 -0
- package/dist/services/organize/store.js.map +1 -0
- package/dist/services/panel-manager.js +20 -1
- package/dist/services/panel-manager.js.map +1 -1
- package/dist/services/process-manager.js +4 -3
- package/dist/services/process-manager.js.map +1 -1
- package/dist/services/runtime/adapters/hermes.d.ts +30 -1
- package/dist/services/runtime/adapters/hermes.js +219 -6
- package/dist/services/runtime/adapters/hermes.js.map +1 -1
- package/dist/services/runtime/adapters/openclaw-mcporter.d.ts +45 -0
- package/dist/services/runtime/adapters/openclaw-mcporter.js +108 -0
- package/dist/services/runtime/adapters/openclaw-mcporter.js.map +1 -0
- package/dist/services/runtime/adapters/openclaw-routes.d.ts +8 -2
- package/dist/services/runtime/adapters/openclaw-routes.js +68 -0
- package/dist/services/runtime/adapters/openclaw-routes.js.map +1 -1
- package/dist/services/runtime/adapters/openclaw.d.ts +177 -0
- package/dist/services/runtime/adapters/openclaw.js +1171 -11
- package/dist/services/runtime/adapters/openclaw.js.map +1 -1
- package/dist/services/runtime/instance.d.ts +1 -1
- package/dist/services/runtime/instance.js +1 -1
- package/dist/services/runtime/instance.js.map +1 -1
- package/dist/services/runtime/mcp-shims/anythingllm-shim.d.ts +46 -0
- package/dist/services/runtime/mcp-shims/anythingllm-shim.js +281 -0
- package/dist/services/runtime/mcp-shims/anythingllm-shim.js.map +1 -0
- package/dist/services/runtime/mcp-shims/drive-shim.d.ts +54 -0
- package/dist/services/runtime/mcp-shims/drive-shim.js +489 -0
- package/dist/services/runtime/mcp-shims/drive-shim.js.map +1 -0
- package/dist/services/runtime/mcp-shims/firewall.d.ts +26 -0
- package/dist/services/runtime/mcp-shims/firewall.js +129 -0
- package/dist/services/runtime/mcp-shims/firewall.js.map +1 -0
- package/dist/services/runtime/mcp-shims/searxng-shim.d.ts +27 -0
- package/dist/services/runtime/mcp-shims/searxng-shim.js +125 -0
- package/dist/services/runtime/mcp-shims/searxng-shim.js.map +1 -0
- package/dist/services/runtime/mcp-shims/write-mcp-entry.d.ts +83 -0
- package/dist/services/runtime/mcp-shims/write-mcp-entry.js +127 -0
- package/dist/services/runtime/mcp-shims/write-mcp-entry.js.map +1 -0
- package/dist/services/runtime/migrations.d.ts +8 -0
- package/dist/services/runtime/migrations.js +100 -0
- package/dist/services/runtime/migrations.js.map +1 -1
- package/dist/services/runtime/types.d.ts +46 -0
- package/dist/services/setup-manager.js +99 -24
- package/dist/services/setup-manager.js.map +1 -1
- package/dist/services/suggestions.d.ts +27 -0
- package/dist/services/suggestions.js +133 -0
- package/dist/services/suggestions.js.map +1 -0
- package/dist/services/task-registry.js +4 -2
- package/dist/services/task-registry.js.map +1 -1
- package/dist/services/telemetry/device-fingerprint.d.ts +1 -1
- package/dist/services/telemetry/device-fingerprint.js +1 -1
- package/dist/services/types-shim.d.ts +16 -0
- package/dist/services/types-shim.js +2 -0
- package/dist/services/types-shim.js.map +1 -0
- package/dist/services/webdav/server.d.ts +24 -0
- package/dist/services/webdav/server.js +420 -0
- package/dist/services/webdav/server.js.map +1 -0
- package/dist/services/webdav/xml-builder.d.ts +73 -0
- package/dist/services/webdav/xml-builder.js +156 -0
- package/dist/services/webdav/xml-builder.js.map +1 -0
- package/dist/services/workspace-builder.d.ts +29 -0
- package/dist/services/workspace-builder.js +188 -0
- package/dist/services/workspace-builder.js.map +1 -0
- package/dist/types.d.ts +231 -1
- package/dist/utils/instance-lock.d.ts +22 -0
- package/dist/utils/instance-lock.js +48 -0
- package/dist/utils/instance-lock.js.map +1 -0
- package/dist/utils/path-locks.d.ts +30 -0
- package/dist/utils/path-locks.js +63 -0
- package/dist/utils/path-locks.js.map +1 -0
- package/dist/utils/path-safety.d.ts +41 -0
- package/dist/utils/path-safety.js +119 -0
- package/dist/utils/path-safety.js.map +1 -0
- package/dist/utils/safe-json.js +55 -22
- package/dist/utils/safe-json.js.map +1 -1
- package/dist/utils/safe-write.d.ts +24 -0
- package/dist/utils/safe-write.js +82 -0
- package/dist/utils/safe-write.js.map +1 -0
- package/install/jishu-install.sh +323 -27
- package/install/jishu-uninstall.sh +353 -20
- package/package.json +18 -1
- package/public/assets/Dashboard-BdWPtroF.js +1 -0
- package/public/assets/{HermesChatPanel-mFSureyc.js → HermesChatPanel-B_2HlVBQ.js} +1 -1
- package/public/assets/HermesConfigForm-DVlhg3WV.js +4 -0
- package/public/assets/{InitPassword-CVA8wQA6.js → InitPassword-D7glTExX.js} +1 -1
- package/public/assets/InstanceDetail-CxSy2cpe.js +92 -0
- package/public/assets/{Login-BWsZH2mu.js → Login-Cfr5c2sv.js} +1 -1
- package/public/assets/NewInstance-BIYDmJis.js +1 -0
- package/public/assets/ProviderRecommendations-BuRnvRcI.js +1 -0
- package/public/assets/Settings-Cc-tYBil.js +1 -0
- package/public/assets/Setup-lGZEk5jq.js +1 -0
- package/public/assets/{WeixinLoginPanel-CnjR8xMu.js → WeixinLoginPanel-CoGqzxeV.js} +2 -2
- package/public/assets/index-87IJXG-w.css +1 -0
- package/public/assets/index-BZc5zH7u.js +19 -0
- package/public/assets/providers-DtNXh9JD.js +1 -0
- package/public/assets/registry-BWnkJgZ1.js +2 -0
- package/public/assets/{usePolling-Do5Erqm_.js → usePolling-CwwT9KrC.js} +1 -1
- package/public/assets/{vendor-i18n-ucpM0OR0.js → vendor-i18n-y9V7Sfuu.js} +1 -1
- package/public/assets/{vendor-react-Bk1hRGiY.js → vendor-react-BWrEVJVb.js} +6 -6
- package/public/index.html +4 -4
- package/scripts/check-app-spec.mjs +457 -0
- package/scripts/check-i18n.mjs +154 -0
- package/scripts/check-new-file-tests.mjs +230 -0
- package/scripts/check-quarantine-expiry.mjs +105 -0
- package/scripts/perf/README.md +49 -0
- package/scripts/perf/auth.js +99 -0
- package/scripts/perf/config.js +63 -0
- package/scripts/perf/instances.js +143 -0
- package/scripts/perf/proxy.js +96 -0
- package/scripts/run.sh +4 -4
- package/scripts/smoke/files-w1.sh +142 -0
- package/scripts/smoke-backend.mjs +122 -0
- package/scripts/smoke-post-publish.mjs +346 -0
- package/public/assets/Dashboard-B-JoOjBQ.js +0 -1
- package/public/assets/HermesConfigForm-DvR05LK1.js +0 -4
- package/public/assets/InstanceDetail-DcZW2QGO.js +0 -91
- package/public/assets/NewInstance-BCIrAd86.js +0 -1
- package/public/assets/Settings-xkDcduFz.js +0 -1
- package/public/assets/Setup-Cfuwj4gV.js +0 -1
- package/public/assets/index-CPhVFEsx.css +0 -1
- package/public/assets/index-DQsM6Joa.js +0 -19
- package/public/assets/providers-V-vwrExZ.js +0 -1
- package/public/assets/registry-B4UFJdpA.js +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-health.js","sourceRoot":"","sources":["../../src/services/capability-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
export type CapabilityStatus = "running" | "stopped" | "unknown";
|
|
2
|
+
/**
|
|
3
|
+
* Single provider entry in the registry. v3.4.x extends the legacy 5-field
|
|
4
|
+
* shape (instanceId / hostPort / address / path / registered_at) to ~10
|
|
5
|
+
* fields so the Connections UI can render rich metadata without re-querying
|
|
6
|
+
* each provider's spec.
|
|
7
|
+
*/
|
|
8
|
+
export interface CapabilityEntry {
|
|
9
|
+
instanceId: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
capability: string;
|
|
12
|
+
host: string;
|
|
13
|
+
hostPort: number;
|
|
14
|
+
path?: string;
|
|
15
|
+
address: string;
|
|
16
|
+
protocol: string;
|
|
17
|
+
visibility?: "external" | "internal" | string;
|
|
18
|
+
status: CapabilityStatus;
|
|
19
|
+
lastSeenRunningAt?: string;
|
|
20
|
+
registeredAt: string;
|
|
21
|
+
/**
|
|
22
|
+
* §17 (PR 8) — when present, MCP-binding adapters expose this
|
|
23
|
+
* capability through the jishushell MCP firewall using the schema
|
|
24
|
+
* here, instead of letting the upstream MCP package's `tools/list`
|
|
25
|
+
* descriptions reach the LLM. Copied verbatim from the producing
|
|
26
|
+
* spec's `provides[].tool_schema` at registerProvider time.
|
|
27
|
+
*/
|
|
28
|
+
toolSchema?: import("../types.js").ToolSchema;
|
|
29
|
+
/**
|
|
30
|
+
* §6 (PR B) — auth config for consumers of this capability. Copied
|
|
31
|
+
* verbatim from the producing spec's `provides[].auth` at registerProvider
|
|
32
|
+
* time. Absent = no auth required.
|
|
33
|
+
*/
|
|
34
|
+
auth?: import("../types.js").AppProvideAuth;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Legacy shape kept side-by-side during PR 1-3 transition.
|
|
38
|
+
*/
|
|
39
|
+
interface LegacyCapabilityEntry {
|
|
40
|
+
instanceId: string;
|
|
41
|
+
hostPort: number;
|
|
42
|
+
address: string;
|
|
43
|
+
path?: string;
|
|
44
|
+
registered_at: string;
|
|
45
|
+
}
|
|
46
|
+
interface CapabilityRegistryFile {
|
|
47
|
+
/**
|
|
48
|
+
* v3.4.x new shape: a capability may have multiple providers (e.g. two
|
|
49
|
+
* Ollama instances). UI lets users pick among candidates.
|
|
50
|
+
*/
|
|
51
|
+
providersByCapability?: Record<string, CapabilityEntry[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Legacy shape: single entry per capability, last-writer-wins. PR 1 keeps
|
|
54
|
+
* it dual-written; PR 3 removes it.
|
|
55
|
+
*/
|
|
56
|
+
capabilities?: Record<string, LegacyCapabilityEntry>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Read the registry, migrating any legacy-only entries on the fly. Always
|
|
60
|
+
* returns both shapes populated — the compat layer relies on this.
|
|
61
|
+
*/
|
|
62
|
+
export declare function readRegistry(): CapabilityRegistryFile;
|
|
63
|
+
/**
|
|
64
|
+
* Compat-view accessor: returns the **first** provider for a capability in
|
|
65
|
+
* legacy 5-field shape. PR 3 sub-step 3f deletes this function once all
|
|
66
|
+
* call sites are switched to `getProviderEntry` / `listProviders`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function getCapabilityEntry(capability: string): LegacyCapabilityEntry | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* List all providers for a capability. Used by Connections UI candidate
|
|
71
|
+
* dropdown and PR 3 multi-candidate resolution.
|
|
72
|
+
*/
|
|
73
|
+
export declare function listProviders(capability: string): CapabilityEntry[];
|
|
74
|
+
/**
|
|
75
|
+
* Locate a specific provider by composite key. The `(instanceId, capability)`
|
|
76
|
+
* pair is required (v3.1 §5.3) because one instance may publish multiple
|
|
77
|
+
* capabilities (`ollama-binary` provides both `ollama-api` and
|
|
78
|
+
* `ollama-terminal`); `instanceId` alone is not unique.
|
|
79
|
+
*/
|
|
80
|
+
export declare function getProviderEntry(instanceId: string, capability: string): CapabilityEntry | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* Register or update a single provider entry. Writes to both the new
|
|
83
|
+
* `providersByCapability` list and the legacy `capabilities` map (compat
|
|
84
|
+
* layer; PR 3 sub-step 3f drops the legacy write).
|
|
85
|
+
*/
|
|
86
|
+
export declare function registerProvider(entry: CapabilityEntry): void;
|
|
87
|
+
/**
|
|
88
|
+
* Mark all providers from a given instance as `stopped` instead of deleting
|
|
89
|
+
* them, so the Connections UI can still show them as candidates (greyed out).
|
|
90
|
+
* Replaces the previous `unregisterCapabilities` semantics on stop (§5.4).
|
|
91
|
+
*/
|
|
92
|
+
export declare function setProviderStatus(instanceId: string, status: CapabilityStatus): void;
|
|
93
|
+
/**
|
|
94
|
+
* Remove all providers for an instance permanently — used for uninstall /
|
|
95
|
+
* delete, NOT for stop (§5.4). After PR 3 sub-step 3c this is the only
|
|
96
|
+
* path that strips entries from the registry.
|
|
97
|
+
*/
|
|
98
|
+
export declare function unregisterProviders(instanceId: string): void;
|
|
99
|
+
/**
|
|
100
|
+
* Snapshot of the full registry (read-only). UI / suggestion engine consumes.
|
|
101
|
+
* Same dedup semantics as `listProviders` so callers iterating the snapshot
|
|
102
|
+
* (e.g. category-prefix candidate matching in `routes/instances.ts`) don't
|
|
103
|
+
* leak duplicates.
|
|
104
|
+
*/
|
|
105
|
+
export declare function snapshot(): CapabilityRegistryFile;
|
|
106
|
+
export {};
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capability registry — Layer 1 of the app interconnection design (§5).
|
|
3
|
+
*
|
|
4
|
+
* Stores `~/.jishushell/apps/capability-registry.json` mapping capability
|
|
5
|
+
* names to a list of provider entries. PR 1 introduces a schema migration
|
|
6
|
+
* from the legacy `capabilities: Record<cap, Entry>` (single entry per
|
|
7
|
+
* capability, last-writer-wins) to `providersByCapability: Record<cap, Entry[]>`
|
|
8
|
+
* supporting multi-candidate providers.
|
|
9
|
+
*
|
|
10
|
+
* **Compat layer (v3.4.x §10.1)**: dual read/write keeps the legacy
|
|
11
|
+
* `capabilities` field in sync with the new `providersByCapability` so the
|
|
12
|
+
* legacy `resolveRequires` / `listProvidedCapabilities` paths in app-manager.ts
|
|
13
|
+
* continue working until PR 3 finishes the call-site migration. PR 3 sub-step
|
|
14
|
+
* 3f deletes both the compat layer and the legacy `capabilities` field.
|
|
15
|
+
*/
|
|
16
|
+
import { join } from "path";
|
|
17
|
+
import { homedir } from "os";
|
|
18
|
+
import * as config from "../config.js";
|
|
19
|
+
import { safeReadJson, safeWriteJson } from "../utils/safe-json.js";
|
|
20
|
+
/**
|
|
21
|
+
* Resolve APPS_DIR lazily so partial test mocks of `../config` (which
|
|
22
|
+
* commonly stub only some exports) don't trip module-load time. Mirrors
|
|
23
|
+
* the pattern used in `app-manager.ts:44-46` — guard with `name in config`
|
|
24
|
+
* so vitest's strict mock proxy doesn't throw on undefined property access.
|
|
25
|
+
*/
|
|
26
|
+
function getAppsDir() {
|
|
27
|
+
const value = "APPS_DIR" in config
|
|
28
|
+
? config.APPS_DIR
|
|
29
|
+
: undefined;
|
|
30
|
+
if (typeof value === "string" && value.trim())
|
|
31
|
+
return value;
|
|
32
|
+
const home = "JISHUSHELL_HOME" in config
|
|
33
|
+
? config.JISHUSHELL_HOME
|
|
34
|
+
: undefined;
|
|
35
|
+
if (typeof home === "string" && home.trim())
|
|
36
|
+
return join(home, "apps");
|
|
37
|
+
return join(process.env.HOME ?? homedir(), ".jishushell", "apps");
|
|
38
|
+
}
|
|
39
|
+
function getRegistryPath() {
|
|
40
|
+
return join(getAppsDir(), "capability-registry.json");
|
|
41
|
+
}
|
|
42
|
+
function readRegistryFile() {
|
|
43
|
+
const raw = safeReadJson(getRegistryPath(), "capability-registry");
|
|
44
|
+
if (!raw)
|
|
45
|
+
return { providersByCapability: {}, capabilities: {} };
|
|
46
|
+
// Ensure both fields exist so call sites don't have to null-check.
|
|
47
|
+
return {
|
|
48
|
+
providersByCapability: raw.providersByCapability ?? {},
|
|
49
|
+
capabilities: raw.capabilities ?? {},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function writeRegistryFile(reg) {
|
|
53
|
+
safeWriteJson(getRegistryPath(), reg, true);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Project a v3.4.x entry down to the legacy 5-field shape so the legacy
|
|
57
|
+
* `capabilities` map stays consistent with `providersByCapability` during
|
|
58
|
+
* the PR 1-3 transition.
|
|
59
|
+
*/
|
|
60
|
+
function toLegacyEntry(entry) {
|
|
61
|
+
const legacy = {
|
|
62
|
+
instanceId: entry.instanceId,
|
|
63
|
+
hostPort: entry.hostPort,
|
|
64
|
+
address: entry.address,
|
|
65
|
+
registered_at: entry.registeredAt,
|
|
66
|
+
};
|
|
67
|
+
if (entry.path)
|
|
68
|
+
legacy.path = entry.path;
|
|
69
|
+
return legacy;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Promote a legacy entry read from disk into the v3.4.x shape so call sites
|
|
73
|
+
* never have to handle two formats. Called during migration on first read.
|
|
74
|
+
*/
|
|
75
|
+
function fromLegacyEntry(legacy, capability) {
|
|
76
|
+
// Best-effort host extraction — legacy address is `host:port[/path]`.
|
|
77
|
+
// Strip the path tail first, then split on the last colon to handle IPv6.
|
|
78
|
+
let host = "127.0.0.1";
|
|
79
|
+
const base = legacy.address.split("/")[0];
|
|
80
|
+
const colonIdx = base.lastIndexOf(":");
|
|
81
|
+
if (colonIdx > 0)
|
|
82
|
+
host = base.slice(0, colonIdx);
|
|
83
|
+
return {
|
|
84
|
+
instanceId: legacy.instanceId,
|
|
85
|
+
capability,
|
|
86
|
+
host,
|
|
87
|
+
hostPort: legacy.hostPort,
|
|
88
|
+
path: legacy.path,
|
|
89
|
+
address: legacy.address,
|
|
90
|
+
protocol: "http",
|
|
91
|
+
status: "unknown",
|
|
92
|
+
registeredAt: legacy.registered_at,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Migrate any legacy-only entries on read so subsequent operations see a
|
|
97
|
+
* uniform `providersByCapability` view. Idempotent.
|
|
98
|
+
*/
|
|
99
|
+
function migrate(reg) {
|
|
100
|
+
const providers = reg.providersByCapability ?? {};
|
|
101
|
+
const legacy = reg.capabilities ?? {};
|
|
102
|
+
let changed = false;
|
|
103
|
+
for (const [cap, legacyEntry] of Object.entries(legacy)) {
|
|
104
|
+
const list = providers[cap] ?? [];
|
|
105
|
+
const alreadyMigrated = list.some((e) => e.instanceId === legacyEntry.instanceId && e.hostPort === legacyEntry.hostPort);
|
|
106
|
+
if (!alreadyMigrated) {
|
|
107
|
+
providers[cap] = [...list, fromLegacyEntry(legacyEntry, cap)];
|
|
108
|
+
changed = true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (changed) {
|
|
112
|
+
return { providersByCapability: providers, capabilities: legacy };
|
|
113
|
+
}
|
|
114
|
+
return { providersByCapability: providers, capabilities: legacy };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Set the `path` property only when truthy so equality comparisons (used by
|
|
118
|
+
* `removeProvider` to dedupe) don't see a spurious `path: undefined` mismatch.
|
|
119
|
+
*/
|
|
120
|
+
function ensureProvidersField(reg) {
|
|
121
|
+
if (!reg.providersByCapability)
|
|
122
|
+
reg.providersByCapability = {};
|
|
123
|
+
return reg.providersByCapability;
|
|
124
|
+
}
|
|
125
|
+
function ensureLegacyField(reg) {
|
|
126
|
+
if (!reg.capabilities)
|
|
127
|
+
reg.capabilities = {};
|
|
128
|
+
return reg.capabilities;
|
|
129
|
+
}
|
|
130
|
+
// ── Public API ───────────────────────────────────────────────────────────
|
|
131
|
+
/**
|
|
132
|
+
* Read the registry, migrating any legacy-only entries on the fly. Always
|
|
133
|
+
* returns both shapes populated — the compat layer relies on this.
|
|
134
|
+
*/
|
|
135
|
+
export function readRegistry() {
|
|
136
|
+
return migrate(readRegistryFile());
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Compat-view accessor: returns the **first** provider for a capability in
|
|
140
|
+
* legacy 5-field shape. PR 3 sub-step 3f deletes this function once all
|
|
141
|
+
* call sites are switched to `getProviderEntry` / `listProviders`.
|
|
142
|
+
*/
|
|
143
|
+
export function getCapabilityEntry(capability) {
|
|
144
|
+
const reg = readRegistry();
|
|
145
|
+
// Prefer running providers when more than one candidate exists, so
|
|
146
|
+
// `resolveRequires` (single-candidate fallback) hands consumers the
|
|
147
|
+
// currently usable provider rather than a stale stopped entry.
|
|
148
|
+
const list = reg.providersByCapability?.[capability] ?? [];
|
|
149
|
+
const running = list.find((e) => e.status === "running");
|
|
150
|
+
if (running)
|
|
151
|
+
return toLegacyEntry(running);
|
|
152
|
+
// No running candidate. Don't hand back a `stopped` entry — that would
|
|
153
|
+
// mask `markCapabilitiesStopped`'s intent (see setProviderStatus's
|
|
154
|
+
// legacy-delete branch) and let resolveRequires return a stale URL. An
|
|
155
|
+
// `unknown`-status entry is acceptable as a degraded fallback (e.g.
|
|
156
|
+
// pre-PR 1 registry rows that never carried explicit status).
|
|
157
|
+
const unknown = list.find((e) => e.status !== "stopped");
|
|
158
|
+
if (unknown)
|
|
159
|
+
return toLegacyEntry(unknown);
|
|
160
|
+
// Fall through to the legacy field in case migration missed something.
|
|
161
|
+
return reg.capabilities?.[capability];
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Defensive dedup for stored provider lists. Older registry files may
|
|
165
|
+
* contain duplicate `(instanceId, capability)` rows from earlier
|
|
166
|
+
* registration paths that wrote without the current upsert logic — they
|
|
167
|
+
* surface in the UI as ghost candidates with stale `name: null` /
|
|
168
|
+
* mismatched ports. Collapse to the most-recently-registered row, and
|
|
169
|
+
* drop entries that have never been observed running (status="unknown"
|
|
170
|
+
* with no `lastSeenRunningAt`) since those are unambiguous bug residue.
|
|
171
|
+
*/
|
|
172
|
+
function dedupeProviderList(list) {
|
|
173
|
+
const cleaned = list.filter((e) => !(e.status === "stopped" && !e.lastSeenRunningAt));
|
|
174
|
+
const byInstance = new Map();
|
|
175
|
+
for (const entry of cleaned) {
|
|
176
|
+
const prev = byInstance.get(entry.instanceId);
|
|
177
|
+
if (!prev) {
|
|
178
|
+
byInstance.set(entry.instanceId, entry);
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
const prevTs = prev.registeredAt ?? "";
|
|
182
|
+
const curTs = entry.registeredAt ?? "";
|
|
183
|
+
if (curTs >= prevTs)
|
|
184
|
+
byInstance.set(entry.instanceId, entry);
|
|
185
|
+
}
|
|
186
|
+
return Array.from(byInstance.values());
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* List all providers for a capability. Used by Connections UI candidate
|
|
190
|
+
* dropdown and PR 3 multi-candidate resolution.
|
|
191
|
+
*/
|
|
192
|
+
export function listProviders(capability) {
|
|
193
|
+
const reg = readRegistry();
|
|
194
|
+
return dedupeProviderList(reg.providersByCapability?.[capability] ?? []);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Locate a specific provider by composite key. The `(instanceId, capability)`
|
|
198
|
+
* pair is required (v3.1 §5.3) because one instance may publish multiple
|
|
199
|
+
* capabilities (`ollama-binary` provides both `ollama-api` and
|
|
200
|
+
* `ollama-terminal`); `instanceId` alone is not unique.
|
|
201
|
+
*/
|
|
202
|
+
export function getProviderEntry(instanceId, capability) {
|
|
203
|
+
return listProviders(capability).find((e) => e.instanceId === instanceId);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Register or update a single provider entry. Writes to both the new
|
|
207
|
+
* `providersByCapability` list and the legacy `capabilities` map (compat
|
|
208
|
+
* layer; PR 3 sub-step 3f drops the legacy write).
|
|
209
|
+
*/
|
|
210
|
+
export function registerProvider(entry) {
|
|
211
|
+
const reg = readRegistry();
|
|
212
|
+
const providers = ensureProvidersField(reg);
|
|
213
|
+
const legacy = ensureLegacyField(reg);
|
|
214
|
+
const list = providers[entry.capability] ?? [];
|
|
215
|
+
const existingIdx = list.findIndex((e) => e.instanceId === entry.instanceId);
|
|
216
|
+
if (existingIdx >= 0) {
|
|
217
|
+
list[existingIdx] = entry;
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
list.push(entry);
|
|
221
|
+
}
|
|
222
|
+
providers[entry.capability] = list;
|
|
223
|
+
// Compat write: keep the legacy single-entry view consistent. When more
|
|
224
|
+
// than one provider exists, the legacy field reflects the most recently
|
|
225
|
+
// registered one (matching the previous last-writer-wins behavior).
|
|
226
|
+
legacy[entry.capability] = toLegacyEntry(entry);
|
|
227
|
+
writeRegistryFile(reg);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Mark all providers from a given instance as `stopped` instead of deleting
|
|
231
|
+
* them, so the Connections UI can still show them as candidates (greyed out).
|
|
232
|
+
* Replaces the previous `unregisterCapabilities` semantics on stop (§5.4).
|
|
233
|
+
*/
|
|
234
|
+
export function setProviderStatus(instanceId, status) {
|
|
235
|
+
const reg = readRegistry();
|
|
236
|
+
const providers = ensureProvidersField(reg);
|
|
237
|
+
const legacy = ensureLegacyField(reg);
|
|
238
|
+
const now = new Date().toISOString();
|
|
239
|
+
let changed = false;
|
|
240
|
+
for (const [cap, list] of Object.entries(providers)) {
|
|
241
|
+
for (const entry of list) {
|
|
242
|
+
if (entry.instanceId !== instanceId)
|
|
243
|
+
continue;
|
|
244
|
+
if (entry.status === status)
|
|
245
|
+
continue;
|
|
246
|
+
entry.status = status;
|
|
247
|
+
if (status === "running")
|
|
248
|
+
entry.lastSeenRunningAt = now;
|
|
249
|
+
changed = true;
|
|
250
|
+
}
|
|
251
|
+
// Re-sync legacy field: stopped instances lose their legacy entry only
|
|
252
|
+
// if no other running provider remains for that capability, so older
|
|
253
|
+
// resolveRequires call sites keep finding *something* until PR 3.
|
|
254
|
+
const stillRunning = list.find((e) => e.status === "running");
|
|
255
|
+
if (stillRunning) {
|
|
256
|
+
legacy[cap] = toLegacyEntry(stillRunning);
|
|
257
|
+
}
|
|
258
|
+
else if (list.length > 0 && status === "stopped") {
|
|
259
|
+
// No running provider for this capability — drop the legacy entry so
|
|
260
|
+
// resolveRequires throws cleanly instead of handing back a stale URL.
|
|
261
|
+
delete legacy[cap];
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (changed)
|
|
265
|
+
writeRegistryFile(reg);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Remove all providers for an instance permanently — used for uninstall /
|
|
269
|
+
* delete, NOT for stop (§5.4). After PR 3 sub-step 3c this is the only
|
|
270
|
+
* path that strips entries from the registry.
|
|
271
|
+
*/
|
|
272
|
+
export function unregisterProviders(instanceId) {
|
|
273
|
+
const reg = readRegistry();
|
|
274
|
+
const providers = ensureProvidersField(reg);
|
|
275
|
+
const legacy = ensureLegacyField(reg);
|
|
276
|
+
let changed = false;
|
|
277
|
+
for (const cap of Object.keys(providers)) {
|
|
278
|
+
const list = providers[cap];
|
|
279
|
+
const filtered = list.filter((e) => e.instanceId !== instanceId);
|
|
280
|
+
if (filtered.length !== list.length) {
|
|
281
|
+
changed = true;
|
|
282
|
+
if (filtered.length === 0) {
|
|
283
|
+
delete providers[cap];
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
providers[cap] = filtered;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
for (const cap of Object.keys(legacy)) {
|
|
291
|
+
if (legacy[cap].instanceId === instanceId) {
|
|
292
|
+
delete legacy[cap];
|
|
293
|
+
changed = true;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if (changed)
|
|
297
|
+
writeRegistryFile(reg);
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Snapshot of the full registry (read-only). UI / suggestion engine consumes.
|
|
301
|
+
* Same dedup semantics as `listProviders` so callers iterating the snapshot
|
|
302
|
+
* (e.g. category-prefix candidate matching in `routes/instances.ts`) don't
|
|
303
|
+
* leak duplicates.
|
|
304
|
+
*/
|
|
305
|
+
export function snapshot() {
|
|
306
|
+
const reg = readRegistry();
|
|
307
|
+
const cleanProviders = {};
|
|
308
|
+
for (const [cap, list] of Object.entries(reg.providersByCapability ?? {})) {
|
|
309
|
+
cleanProviders[cap] = dedupeProviderList(list);
|
|
310
|
+
}
|
|
311
|
+
return { ...reg, providersByCapability: cleanProviders };
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=capability-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-registry.js","sourceRoot":"","sources":["../../src/services/capability-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layer 3 — connection apply hooks (§7 of the design).
|
|
3
|
+
*
|
|
4
|
+
* Two parallel tables:
|
|
5
|
+
*
|
|
6
|
+
* - PERSIST_HOOKS: invoked by `PUT /api/instances/:id/connections`.
|
|
7
|
+
* Writes durable state. LLM/proxy-upstream goes through saveInstanceConfig;
|
|
8
|
+
* LLM/openai-env, search, browser, default ENV all go through
|
|
9
|
+
* `ctx.writeConnectionEnv()` — that abstraction routes the env to
|
|
10
|
+
* `instance.runtime.env` for OpenClaw, the Hermes adapter `.env` for
|
|
11
|
+
* Hermes, and `instance.json["connections-env"]` for generic apps.
|
|
12
|
+
* MCP merges into mcporter.json.
|
|
13
|
+
*
|
|
14
|
+
* - RUNTIME_HOOKS: invoked at every start. Returns an env map only;
|
|
15
|
+
* never writes files. nomad-manager merges the result into the task
|
|
16
|
+
* env so the new bindings take effect on restart.
|
|
17
|
+
*
|
|
18
|
+
* Sub-step status: PR 4 implements LLM (both modes), Search, default-ENV.
|
|
19
|
+
* PR 5 lands MCP + Browser.
|
|
20
|
+
*/
|
|
21
|
+
import * as capabilityRegistry from "./capability-registry.js";
|
|
22
|
+
import type { CapabilityEntry } from "./capability-registry.js";
|
|
23
|
+
import type { ResolvedConnection } from "./connection-resolver.js";
|
|
24
|
+
import type { AppInstance } from "./types-shim.js";
|
|
25
|
+
export declare function buildHttpBaseUrl(entry: CapabilityEntry, opts?: {
|
|
26
|
+
suffix?: string;
|
|
27
|
+
}): string;
|
|
28
|
+
export declare function buildWsUrl(entry: CapabilityEntry, opts?: {
|
|
29
|
+
suffix?: string;
|
|
30
|
+
}): string;
|
|
31
|
+
export interface ApplyContext {
|
|
32
|
+
registry: typeof capabilityRegistry;
|
|
33
|
+
/**
|
|
34
|
+
* RuntimeAdapter handle for adapter-managed consumers (OpenClaw / Hermes).
|
|
35
|
+
* `null` for generic container apps without an adapter — `writeConnectionEnv`
|
|
36
|
+
* then routes to `instance.json["connections-env"]`.
|
|
37
|
+
*/
|
|
38
|
+
adapter: {
|
|
39
|
+
applyConnectionEnv?(instanceId: string, env: Record<string, string>): Promise<void>;
|
|
40
|
+
getConnectionRuntimeEnv?(instanceId: string): Record<string, string>;
|
|
41
|
+
} | null;
|
|
42
|
+
/** Persist env into whichever durable location matches the consumer type. */
|
|
43
|
+
writeConnectionEnv(instance: AppInstance, env: Record<string, string>): Promise<void>;
|
|
44
|
+
}
|
|
45
|
+
export type PersistApplyHook = (instance: AppInstance, binding: ResolvedConnection, ctx: ApplyContext) => Promise<void>;
|
|
46
|
+
export type RuntimeApplyHook = (instance: AppInstance, binding: ResolvedConnection) => Record<string, string> | Promise<Record<string, string>>;
|
|
47
|
+
/**
|
|
48
|
+
* §7 — resolve the auth token for a provider instance at apply time.
|
|
49
|
+
*
|
|
50
|
+
* Returns the bare token string (no "Bearer " prefix — that's the consumer's
|
|
51
|
+
* call to format). Returns `null` when:
|
|
52
|
+
* - entry.auth is absent or kind === "none"
|
|
53
|
+
* - tokenSource refers to data that doesn't exist on disk
|
|
54
|
+
*
|
|
55
|
+
* Supported tokenSource patterns:
|
|
56
|
+
* instance.env.<NAME> → read from `~/.jishushell/instances/<provider-id>/{model.env,provider.env,.env}`
|
|
57
|
+
* instance.config.<path> → read from openclaw.json via dotted path (e.g. "x-jishushell.proxy.token")
|
|
58
|
+
* proxy.token → read llmProxy.getInstanceToken(provider-id)
|
|
59
|
+
*/
|
|
60
|
+
export declare function resolveProviderToken(entry: CapabilityEntry): Promise<string | null>;
|
|
61
|
+
export declare const persistLlmConnection: PersistApplyHook;
|
|
62
|
+
export declare const runtimeLlmConnection: RuntimeApplyHook;
|
|
63
|
+
export declare const persistSearchConnection: PersistApplyHook;
|
|
64
|
+
export declare const runtimeSearchConnection: RuntimeApplyHook;
|
|
65
|
+
export declare const persistBrowserConnection: PersistApplyHook;
|
|
66
|
+
export declare const runtimeBrowserConnection: RuntimeApplyHook;
|
|
67
|
+
export declare const persistFilesConnection: PersistApplyHook;
|
|
68
|
+
export declare const runtimeFilesConnection: RuntimeApplyHook;
|
|
69
|
+
export declare const persistDefaultConnection: PersistApplyHook;
|
|
70
|
+
export declare const runtimeDefaultConnection: RuntimeApplyHook;
|
|
71
|
+
export declare const persistMcpConnection: PersistApplyHook;
|
|
72
|
+
export declare const runtimeMcpConnection: RuntimeApplyHook;
|
|
73
|
+
export type UnpersistApplyHook = (instance: AppInstance, slot: string, ctx: ApplyContext) => Promise<void>;
|
|
74
|
+
export declare const PERSIST_HOOKS: Record<string, PersistApplyHook>;
|
|
75
|
+
export declare const UNPERSIST_HOOKS: Record<string, UnpersistApplyHook>;
|
|
76
|
+
export declare const RUNTIME_HOOKS: Record<string, RuntimeApplyHook>;
|
|
77
|
+
/**
|
|
78
|
+
* Re-resolve `connections` for a consumer instance against the live capability
|
|
79
|
+
* registry and render every binding through RUNTIME_HOOKS into a flat env map.
|
|
80
|
+
*
|
|
81
|
+
* Use this at every start (not at PUT time) so that provider port / address
|
|
82
|
+
* changes propagate without requiring the user to re-bind. preCreate mode is
|
|
83
|
+
* used to stay tolerant: a missing required binding is surfaced via the
|
|
84
|
+
* Connections badge, not by failing start with a stale provider URL.
|
|
85
|
+
*
|
|
86
|
+
* Failures are caught and logged — start should never block on env merging.
|
|
87
|
+
*/
|
|
88
|
+
export declare function renderRuntimeConnectionsEnv(spec: import("../types.js").AppSpec, instance: {
|
|
89
|
+
id: string;
|
|
90
|
+
connections?: import("../types.js").InstanceConnections;
|
|
91
|
+
}): Promise<Record<string, string>>;
|