zcode-acp-server 0.1.0 → 0.3.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 +192 -9
- package/README.zh-CN.md +143 -8
- package/dist/backend/client.d.ts +12 -4
- package/dist/backend/client.d.ts.map +1 -1
- package/dist/backend/client.js +72 -7
- package/dist/backend/client.js.map +1 -1
- package/dist/backend/credentials.d.ts.map +1 -1
- package/dist/backend/credentials.js +2 -1
- package/dist/backend/credentials.js.map +1 -1
- package/dist/backend/listener.d.ts +12 -4
- package/dist/backend/listener.d.ts.map +1 -1
- package/dist/backend/listener.js +68 -12
- package/dist/backend/listener.js.map +1 -1
- package/dist/backend/types.d.ts +1 -1
- package/dist/backend/types.d.ts.map +1 -1
- package/dist/bin/hub.d.ts +16 -0
- package/dist/bin/hub.d.ts.map +1 -0
- package/dist/bin/hub.js +41 -0
- package/dist/bin/hub.js.map +1 -0
- package/dist/bin/quota.d.ts +54 -0
- package/dist/bin/quota.d.ts.map +1 -0
- package/dist/bin/quota.js +333 -0
- package/dist/bin/quota.js.map +1 -0
- package/dist/config/auto-compact.d.ts +23 -0
- package/dist/config/auto-compact.d.ts.map +1 -0
- package/dist/config/auto-compact.js +67 -0
- package/dist/config/auto-compact.js.map +1 -0
- package/dist/config/mcp-discovery.d.ts +34 -0
- package/dist/config/mcp-discovery.d.ts.map +1 -0
- package/dist/config/mcp-discovery.js +153 -0
- package/dist/config/mcp-discovery.js.map +1 -0
- package/dist/config/model-cache.d.ts +12 -1
- package/dist/config/model-cache.d.ts.map +1 -1
- package/dist/config/model-cache.js +30 -8
- package/dist/config/model-cache.js.map +1 -1
- package/dist/config/options.d.ts +87 -9
- package/dist/config/options.d.ts.map +1 -1
- package/dist/config/options.js +248 -45
- package/dist/config/options.js.map +1 -1
- package/dist/config/plugin-commands.d.ts +24 -0
- package/dist/config/plugin-commands.d.ts.map +1 -0
- package/dist/config/plugin-commands.js +107 -0
- package/dist/config/plugin-commands.js.map +1 -0
- package/dist/config/provider-registry.d.ts +60 -0
- package/dist/config/provider-registry.d.ts.map +1 -0
- package/dist/config/provider-registry.js +128 -0
- package/dist/config/provider-registry.js.map +1 -0
- package/dist/config/runtime-model.d.ts +54 -18
- package/dist/config/runtime-model.d.ts.map +1 -1
- package/dist/config/runtime-model.js +105 -61
- package/dist/config/runtime-model.js.map +1 -1
- package/dist/config/skill-discovery.d.ts +35 -0
- package/dist/config/skill-discovery.d.ts.map +1 -0
- package/dist/config/skill-discovery.js +188 -0
- package/dist/config/skill-discovery.js.map +1 -0
- package/dist/handlers/account.d.ts +43 -0
- package/dist/handlers/account.d.ts.map +1 -0
- package/dist/handlers/account.js +59 -0
- package/dist/handlers/account.js.map +1 -0
- package/dist/handlers/background-tasks.d.ts +72 -0
- package/dist/handlers/background-tasks.d.ts.map +1 -0
- package/dist/handlers/background-tasks.js +330 -0
- package/dist/handlers/background-tasks.js.map +1 -0
- package/dist/handlers/dispatch.d.ts.map +1 -1
- package/dist/handlers/dispatch.js +134 -22
- package/dist/handlers/dispatch.js.map +1 -1
- package/dist/handlers/extensions.d.ts +15 -0
- package/dist/handlers/extensions.d.ts.map +1 -1
- package/dist/handlers/extensions.js +43 -27
- package/dist/handlers/extensions.js.map +1 -1
- package/dist/handlers/io.d.ts +31 -3
- package/dist/handlers/io.d.ts.map +1 -1
- package/dist/handlers/io.js +108 -9
- package/dist/handlers/io.js.map +1 -1
- package/dist/handlers/replay.d.ts +79 -0
- package/dist/handlers/replay.d.ts.map +1 -0
- package/dist/handlers/replay.js +252 -0
- package/dist/handlers/replay.js.map +1 -0
- package/dist/handlers/server-requests.d.ts +20 -4
- package/dist/handlers/server-requests.d.ts.map +1 -1
- package/dist/handlers/server-requests.js +293 -63
- package/dist/handlers/server-requests.js.map +1 -1
- package/dist/handlers/session.d.ts +113 -10
- package/dist/handlers/session.d.ts.map +1 -1
- package/dist/handlers/session.js +932 -277
- package/dist/handlers/session.js.map +1 -1
- package/dist/handlers/slash.d.ts +37 -1
- package/dist/handlers/slash.d.ts.map +1 -1
- package/dist/handlers/slash.js +143 -8
- package/dist/handlers/slash.js.map +1 -1
- package/dist/index.js +76 -12
- package/dist/index.js.map +1 -1
- package/dist/interaction/adapter.d.ts +19 -33
- package/dist/interaction/adapter.d.ts.map +1 -1
- package/dist/interaction/adapter.js +80 -79
- package/dist/interaction/adapter.js.map +1 -1
- package/dist/lazy-sessions.d.ts +35 -0
- package/dist/lazy-sessions.d.ts.map +1 -0
- package/dist/lazy-sessions.js +98 -0
- package/dist/lazy-sessions.js.map +1 -0
- package/dist/quota/cache.d.ts +18 -0
- package/dist/quota/cache.d.ts.map +1 -0
- package/dist/quota/cache.js +32 -0
- package/dist/quota/cache.js.map +1 -0
- package/dist/quota/client.d.ts +30 -0
- package/dist/quota/client.d.ts.map +1 -0
- package/dist/quota/client.js +57 -0
- package/dist/quota/client.js.map +1 -0
- package/dist/quota/color.d.ts +58 -0
- package/dist/quota/color.d.ts.map +1 -0
- package/dist/quota/color.js +95 -0
- package/dist/quota/color.js.map +1 -0
- package/dist/quota/combined.d.ts +66 -0
- package/dist/quota/combined.d.ts.map +1 -0
- package/dist/quota/combined.js +179 -0
- package/dist/quota/combined.js.map +1 -0
- package/dist/quota/format.d.ts +105 -0
- package/dist/quota/format.d.ts.map +1 -0
- package/dist/quota/format.js +219 -0
- package/dist/quota/format.js.map +1 -0
- package/dist/quota/index.d.ts +23 -0
- package/dist/quota/index.d.ts.map +1 -0
- package/dist/quota/index.js +42 -0
- package/dist/quota/index.js.map +1 -0
- package/dist/quota/opencode-go/cache.d.ts +17 -0
- package/dist/quota/opencode-go/cache.d.ts.map +1 -0
- package/dist/quota/opencode-go/cache.js +31 -0
- package/dist/quota/opencode-go/cache.js.map +1 -0
- package/dist/quota/opencode-go/client.d.ts +28 -0
- package/dist/quota/opencode-go/client.d.ts.map +1 -0
- package/dist/quota/opencode-go/client.js +48 -0
- package/dist/quota/opencode-go/client.js.map +1 -0
- package/dist/quota/opencode-go/config.d.ts +37 -0
- package/dist/quota/opencode-go/config.d.ts.map +1 -0
- package/dist/quota/opencode-go/config.js +58 -0
- package/dist/quota/opencode-go/config.js.map +1 -0
- package/dist/quota/opencode-go/format.d.ts +36 -0
- package/dist/quota/opencode-go/format.d.ts.map +1 -0
- package/dist/quota/opencode-go/format.js +87 -0
- package/dist/quota/opencode-go/format.js.map +1 -0
- package/dist/quota/opencode-go/index.d.ts +30 -0
- package/dist/quota/opencode-go/index.d.ts.map +1 -0
- package/dist/quota/opencode-go/index.js +108 -0
- package/dist/quota/opencode-go/index.js.map +1 -0
- package/dist/quota/opencode-go/parse.d.ts +41 -0
- package/dist/quota/opencode-go/parse.d.ts.map +1 -0
- package/dist/quota/opencode-go/parse.js +75 -0
- package/dist/quota/opencode-go/parse.js.map +1 -0
- package/dist/quota/opencode-go/types.d.ts +48 -0
- package/dist/quota/opencode-go/types.d.ts.map +1 -0
- package/dist/quota/opencode-go/types.js +11 -0
- package/dist/quota/opencode-go/types.js.map +1 -0
- package/dist/quota/parse.d.ts +33 -0
- package/dist/quota/parse.d.ts.map +1 -0
- package/dist/quota/parse.js +200 -0
- package/dist/quota/parse.js.map +1 -0
- package/dist/quota/types.d.ts +72 -0
- package/dist/quota/types.d.ts.map +1 -0
- package/dist/quota/types.js +10 -0
- package/dist/quota/types.js.map +1 -0
- package/dist/remote/broadcast.d.ts +47 -0
- package/dist/remote/broadcast.d.ts.map +1 -0
- package/dist/remote/broadcast.js +121 -0
- package/dist/remote/broadcast.js.map +1 -0
- package/dist/remote/config.d.ts +32 -0
- package/dist/remote/config.d.ts.map +1 -0
- package/dist/remote/config.js +65 -0
- package/dist/remote/config.js.map +1 -0
- package/dist/remote/endpoint.d.ts +30 -0
- package/dist/remote/endpoint.d.ts.map +1 -0
- package/dist/remote/endpoint.js +213 -0
- package/dist/remote/endpoint.js.map +1 -0
- package/dist/remote/hub-server.d.ts +41 -0
- package/dist/remote/hub-server.d.ts.map +1 -0
- package/dist/remote/hub-server.js +346 -0
- package/dist/remote/hub-server.js.map +1 -0
- package/dist/server.d.ts +139 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +179 -4
- package/dist/server.js.map +1 -1
- package/dist/tasks-index.d.ts +14 -4
- package/dist/tasks-index.d.ts.map +1 -1
- package/dist/tasks-index.js +145 -46
- package/dist/tasks-index.js.map +1 -1
- package/dist/translators/event-translator.d.ts +33 -0
- package/dist/translators/event-translator.d.ts.map +1 -1
- package/dist/translators/event-translator.js +101 -0
- package/dist/translators/event-translator.js.map +1 -1
- package/dist/translators/index.d.ts +1 -1
- package/dist/translators/index.d.ts.map +1 -1
- package/dist/translators/index.js +1 -1
- package/dist/translators/index.js.map +1 -1
- package/dist/translators/projection-differ.d.ts +8 -0
- package/dist/translators/projection-differ.d.ts.map +1 -1
- package/dist/translators/projection-differ.js +19 -9
- package/dist/translators/projection-differ.js.map +1 -1
- package/dist/translators/tool-helpers.d.ts +28 -0
- package/dist/translators/tool-helpers.d.ts.map +1 -1
- package/dist/translators/tool-helpers.js +104 -0
- package/dist/translators/tool-helpers.js.map +1 -1
- package/dist/translators/types.d.ts +38 -1
- package/dist/translators/types.d.ts.map +1 -1
- package/dist/translators/types.js.map +1 -1
- package/dist/utils.d.ts +36 -7
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +69 -5
- package/dist/utils.js.map +1 -1
- package/docs/ARCHITECTURE.md +130 -40
- package/docs/BACKLOG.md +59 -0
- package/docs/DEVELOPMENT.md +31 -0
- package/docs/PROTOCOL.md +328 -23
- package/docs/REMOTE-CLIENTS.md +260 -0
- package/docs/REPLAY-GUIDE.md +131 -0
- package/docs/TROUBLESHOOTING.md +131 -14
- package/docs/adr/0001-bridge-lifetime-follows-primary-client.md +14 -0
- package/docs/adr/0002-stateless-hub-over-per-bridge-acp-endpoints.md +23 -0
- package/docs/adr/0003-tail-replay-meta-and-cursor-pagination.md +40 -0
- package/docs/agents/domain.md +51 -0
- package/docs/agents/issue-tracker.md +22 -0
- package/docs/agents/triage-labels.md +15 -0
- package/docs/proposals/0001-tail-session-replay.md +136 -0
- package/docs/proposals/0002-plan-quota-usage.md +81 -0
- package/package.json +10 -6
|
@@ -9,12 +9,23 @@
|
|
|
9
9
|
import type * as acp from "@agentclientprotocol/sdk";
|
|
10
10
|
import type { ZcodeAcpServer } from "../server.js";
|
|
11
11
|
import type { ProjectionDiffer } from "../translators/projection-differ.js";
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Read the session's current model as an encoded `"providerId\modelId"` string,
|
|
14
|
+
* with a per-session cache. Returns the encoded form so callers can resolve the
|
|
15
|
+
* provider (for context-window lookup / model switching) without a second read.
|
|
16
|
+
*/
|
|
13
17
|
export declare function currentModelCached(server: ZcodeAcpServer, zcodeSid: string): Promise<string>;
|
|
14
18
|
/**
|
|
15
19
|
* Emit an initial usage_update after resume/load so the editor shows the
|
|
16
20
|
* context bar. Skips when there's no token data (resume before any turn → 0).
|
|
17
21
|
* Also syncs the differ's usage baseline so the first turn won't re-emit it.
|
|
22
|
+
*
|
|
23
|
+
* Note: the backend's `projection.contextUsed` is 0 after resume — it only
|
|
24
|
+
* updates after a new turn completes. So a resumed session with history won't
|
|
25
|
+
* show a context bar until the first post-resume message. That's acceptable:
|
|
26
|
+
* we don't have a reliable way to estimate the pre-resume context size, and
|
|
27
|
+
* guessing wrong (e.g. from per-turn token totals that include re-sent history)
|
|
28
|
+
* is worse than showing nothing.
|
|
18
29
|
*/
|
|
19
30
|
export declare function emitInitialUsage(server: ZcodeAcpServer, cx: acp.AgentContext, acpSid: string, zcodeSid: string, differ: ProjectionDiffer | undefined): Promise<void>;
|
|
20
31
|
//# sourceMappingURL=model-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-cache.d.ts","sourceRoot":"","sources":["../../src/config/model-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"model-cache.d.ts","sourceRoot":"","sources":["../../src/config/model-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAYrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,GAAG,CAAC,YAAY,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
|
@@ -6,32 +6,52 @@
|
|
|
6
6
|
* after resume/load so the editor shows the context bar immediately (only when
|
|
7
7
|
* there's actual token data — resume before any turn has 0, which we skip).
|
|
8
8
|
*/
|
|
9
|
-
import { modelContextWindow } from "./options.js";
|
|
9
|
+
import { DEFAULT_MODEL_ID, DEFAULT_PROVIDER_ID, formatModelValue, loadAllModels, modelContextWindow, parseModelValue, } from "./options.js";
|
|
10
10
|
import { log } from "../utils.js";
|
|
11
11
|
import { dispatchEvent } from "../handlers/dispatch.js";
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Read the session's current model as an encoded `"providerId\modelId"` string,
|
|
14
|
+
* with a per-session cache. Returns the encoded form so callers can resolve the
|
|
15
|
+
* provider (for context-window lookup / model switching) without a second read.
|
|
16
|
+
*/
|
|
13
17
|
export async function currentModelCached(server, zcodeSid) {
|
|
14
18
|
const cached = server.modelCache.get(zcodeSid);
|
|
15
19
|
if (cached)
|
|
16
20
|
return cached;
|
|
17
|
-
let
|
|
21
|
+
let providerId = "";
|
|
22
|
+
let modelId = DEFAULT_MODEL_ID;
|
|
18
23
|
try {
|
|
19
24
|
const read = await sessionRead(server, zcodeSid);
|
|
20
25
|
const settings = (read.settings ?? {});
|
|
21
|
-
const cur = settings.model
|
|
26
|
+
const cur = settings.model
|
|
27
|
+
?.current;
|
|
28
|
+
if (cur?.providerId)
|
|
29
|
+
providerId = cur.providerId;
|
|
22
30
|
if (cur?.modelId)
|
|
23
31
|
modelId = cur.modelId;
|
|
24
32
|
}
|
|
25
33
|
catch (e) {
|
|
26
34
|
log(`model-cache: session/read failed (${e instanceof Error ? e.message : String(e)})`);
|
|
27
35
|
}
|
|
28
|
-
|
|
29
|
-
|
|
36
|
+
if (!providerId) {
|
|
37
|
+
// Legacy session without a providerId — resolve to the first enabled provider.
|
|
38
|
+
providerId = loadAllModels()[0]?.providerId ?? DEFAULT_PROVIDER_ID;
|
|
39
|
+
}
|
|
40
|
+
const encoded = formatModelValue(providerId, modelId);
|
|
41
|
+
server.modelCache.set(zcodeSid, encoded);
|
|
42
|
+
return encoded;
|
|
30
43
|
}
|
|
31
44
|
/**
|
|
32
45
|
* Emit an initial usage_update after resume/load so the editor shows the
|
|
33
46
|
* context bar. Skips when there's no token data (resume before any turn → 0).
|
|
34
47
|
* Also syncs the differ's usage baseline so the first turn won't re-emit it.
|
|
48
|
+
*
|
|
49
|
+
* Note: the backend's `projection.contextUsed` is 0 after resume — it only
|
|
50
|
+
* updates after a new turn completes. So a resumed session with history won't
|
|
51
|
+
* show a context bar until the first post-resume message. That's acceptable:
|
|
52
|
+
* we don't have a reliable way to estimate the pre-resume context size, and
|
|
53
|
+
* guessing wrong (e.g. from per-turn token totals that include re-sent history)
|
|
54
|
+
* is worse than showing nothing.
|
|
35
55
|
*/
|
|
36
56
|
export async function emitInitialUsage(server, cx, acpSid, zcodeSid, differ) {
|
|
37
57
|
try {
|
|
@@ -43,8 +63,10 @@ export async function emitInitialUsage(server, cx, acpSid, zcodeSid, differ) {
|
|
|
43
63
|
if (!used)
|
|
44
64
|
return; // resume before any turn: skip to avoid showing 0.
|
|
45
65
|
let size = proj.contextWindow ?? 0;
|
|
46
|
-
if (!size)
|
|
47
|
-
|
|
66
|
+
if (!size) {
|
|
67
|
+
const { providerId, modelId } = parseModelValue(await currentModelCached(server, zcodeSid));
|
|
68
|
+
size = modelContextWindow(providerId, modelId);
|
|
69
|
+
}
|
|
48
70
|
await dispatchEvent(server, cx, acpSid, { kind: "UsageDelta", used, size }, `init_${zcodeSid.slice(0, 8)}`);
|
|
49
71
|
differ?.setLastUsage(used);
|
|
50
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-cache.js","sourceRoot":"","sources":["../../src/config/model-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,
|
|
1
|
+
{"version":3,"file":"model-cache.js","sourceRoot":"","sources":["../../src/config/model-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/config/options.d.ts
CHANGED
|
@@ -11,14 +11,87 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import type * as acp from "@agentclientprotocol/sdk";
|
|
13
13
|
import type { ZcodeAcpServer } from "../server.js";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
interface ProviderModelsJson {
|
|
15
|
+
[modelId: string]: {
|
|
16
|
+
limit?: {
|
|
17
|
+
context?: number;
|
|
18
|
+
};
|
|
19
|
+
} | undefined;
|
|
20
|
+
}
|
|
21
|
+
/** A single provider's entry in config.json (`provider.<providerId>`). */
|
|
22
|
+
interface ProviderEntry {
|
|
23
|
+
name?: string;
|
|
24
|
+
kind?: string;
|
|
25
|
+
enabled?: boolean;
|
|
26
|
+
options?: {
|
|
27
|
+
baseURL?: string;
|
|
28
|
+
apiKey?: string;
|
|
29
|
+
};
|
|
30
|
+
models?: ProviderModelsJson;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Fallback defaults for when config.json is unreadable or has no enabled
|
|
34
|
+
* provider — keeps a freshly-installed editor functional. Must stay in sync
|
|
35
|
+
* with the model the app ships first in its provider list.
|
|
36
|
+
*/
|
|
37
|
+
export declare const DEFAULT_PROVIDER_ID = "builtin:bigmodel-coding-plan";
|
|
38
|
+
export declare const DEFAULT_PROVIDER_NAME = "BigModel";
|
|
39
|
+
export declare const DEFAULT_MODEL_ID = "GLM-5.3";
|
|
40
|
+
/** A model selectable in the dropdown, with its owning provider. */
|
|
41
|
+
export interface ModelRef {
|
|
42
|
+
providerId: string;
|
|
43
|
+
providerName: string;
|
|
44
|
+
modelId: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Collect models from config.json for the dropdown.
|
|
48
|
+
*
|
|
49
|
+
* Builtin providers (id prefix `builtin:`) must be `enabled: true` — they
|
|
50
|
+
* reflect the plans the user activated in the ZCode desktop app. Custom
|
|
51
|
+
* (third-party) providers are included UNLESS explicitly `enabled: false`:
|
|
52
|
+
* the newer CLI leaves the flag unset on active third-party providers, so
|
|
53
|
+
* treating "absent" as enabled keeps them in the dropdown while still
|
|
54
|
+
* honoring an explicit disable.
|
|
55
|
+
*/
|
|
56
|
+
export declare function loadAllModels(): ModelRef[];
|
|
57
|
+
/** Look up a provider entry by id (any provider, not just enabled). */
|
|
58
|
+
export declare function findProviderConfig(providerId: string): ProviderEntry | null;
|
|
59
|
+
/** Read the context-window size for a provider+model from config.json. */
|
|
60
|
+
export declare function modelContextWindow(providerId: string, modelId: string): number;
|
|
61
|
+
/** Builtin providerIds are prefixed with `builtin:` (e.g. `builtin:bigmodel`). */
|
|
62
|
+
export declare function isBuiltinProvider(providerId: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Encode a provider+model pair into a configOption `value` string.
|
|
65
|
+
*
|
|
66
|
+
* Builtin providers encode as the bare modelId (legacy form, keeps the dropdown
|
|
67
|
+
* clean for the common case). Third-party providers encode as
|
|
68
|
+
* `providerId\modelId` — `\` is unambiguous because providerIds (UUIDs) and
|
|
69
|
+
* modelIds (`/`-separated) never contain it.
|
|
70
|
+
*/
|
|
71
|
+
export declare function formatModelValue(providerId: string, modelId: string): string;
|
|
72
|
+
/**
|
|
73
|
+
* Parse a configOption `value` back into { providerId, modelId }.
|
|
74
|
+
*
|
|
75
|
+
* A value without `\` is a builtin modelId (legacy form) → resolve to the first
|
|
76
|
+
* enabled builtin provider. A value with `\` is a third-party provider+model.
|
|
77
|
+
*/
|
|
78
|
+
export declare function parseModelValue(value: string): {
|
|
79
|
+
providerId: string;
|
|
80
|
+
modelId: string;
|
|
81
|
+
};
|
|
82
|
+
/** Build the ACP SessionModeState ({currentModeId, availableModes}).
|
|
83
|
+
* zcodeSid null = pending session (session/new not yet materialized) — skip
|
|
84
|
+
* the backend read and return defaults. */
|
|
85
|
+
export declare function buildModes(server: ZcodeAcpServer, zcodeSid: string | null): Promise<acp.SessionModeState>;
|
|
86
|
+
export declare function orderThoughtVariants(variants: string[]): Array<{
|
|
87
|
+
value: string;
|
|
88
|
+
name: string;
|
|
89
|
+
}>;
|
|
90
|
+
/** Build the ACP configOptions array (3 items: model/mode/thought).
|
|
91
|
+
* zcodeSid null = pending session — skip the backend read and use defaults;
|
|
92
|
+
* mode defaults to "yolo" (the mode session/create hardcodes) so the dropdown
|
|
93
|
+
* matches the mode indicator for a fresh session. */
|
|
94
|
+
export declare function buildConfigOptions(server: ZcodeAcpServer, zcodeSid: string | null): Promise<acp.SessionConfigOption[]>;
|
|
22
95
|
/**
|
|
23
96
|
* Dispatch session/set_config_option. mode/thought forward to setMode/
|
|
24
97
|
* setThoughtLevel; model routes through applyModelSwitch (runtime-model.ts).
|
|
@@ -31,6 +104,11 @@ export declare function setConfigOption(server: ZcodeAcpServer, zcodeSid: string
|
|
|
31
104
|
currentValue: string;
|
|
32
105
|
} | null>;
|
|
33
106
|
/** Emit a config_option_update (+ current_mode_update for mode) after a change.
|
|
34
|
-
* Returns the rebuilt options so the caller can include them in the response.
|
|
107
|
+
* Returns the rebuilt options so the caller can include them in the response.
|
|
108
|
+
*
|
|
109
|
+
* For model switches, also emit a usage_update with the NEW model's context
|
|
110
|
+
* window (from config.json) so the editor's context bar refreshes immediately
|
|
111
|
+
* instead of waiting for the next turn's UsageDelta. */
|
|
35
112
|
export declare function emitConfigOptionUpdate(server: ZcodeAcpServer, cx: acp.AgentContext, acpSid: string, zcodeSid: string, kind: "model" | "mode" | "thought"): Promise<acp.SessionConfigOption[]>;
|
|
113
|
+
export {};
|
|
36
114
|
//# sourceMappingURL=options.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/config/options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,KAAK,GAAG,MAAM,0BAA0B,CAAC;AAIrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/config/options.ts"],"names":[],"mappings":"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"}
|
package/dist/config/options.js
CHANGED
|
@@ -10,29 +10,85 @@
|
|
|
10
10
|
* reflects the new state.
|
|
11
11
|
*/
|
|
12
12
|
import { readFileSync } from "node:fs";
|
|
13
|
-
import { CONFIG_DISPATCH, CONFIG_META, ZCODE_CREDS_PATH } from "../utils.js";
|
|
13
|
+
import { CONFIG_DISPATCH, CONFIG_META, log, ZCODE_CREDS_PATH } from "../utils.js";
|
|
14
14
|
import { sendSessionUpdate } from "../handlers/io.js";
|
|
15
15
|
/** Read the config.json contents (UTF-8). Throws on read/parse failure. */
|
|
16
16
|
function readConfig() {
|
|
17
17
|
return JSON.parse(readFileSync(ZCODE_CREDS_PATH, "utf8"));
|
|
18
18
|
}
|
|
19
|
-
/**
|
|
20
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Fallback defaults for when config.json is unreadable or has no enabled
|
|
21
|
+
* provider — keeps a freshly-installed editor functional. Must stay in sync
|
|
22
|
+
* with the model the app ships first in its provider list.
|
|
23
|
+
*/
|
|
24
|
+
export const DEFAULT_PROVIDER_ID = "builtin:bigmodel-coding-plan";
|
|
25
|
+
export const DEFAULT_PROVIDER_NAME = "BigModel";
|
|
26
|
+
export const DEFAULT_MODEL_ID = "GLM-5.3";
|
|
27
|
+
/**
|
|
28
|
+
* Collect models from config.json for the dropdown.
|
|
29
|
+
*
|
|
30
|
+
* Builtin providers (id prefix `builtin:`) must be `enabled: true` — they
|
|
31
|
+
* reflect the plans the user activated in the ZCode desktop app. Custom
|
|
32
|
+
* (third-party) providers are included UNLESS explicitly `enabled: false`:
|
|
33
|
+
* the newer CLI leaves the flag unset on active third-party providers, so
|
|
34
|
+
* treating "absent" as enabled keeps them in the dropdown while still
|
|
35
|
+
* honoring an explicit disable.
|
|
36
|
+
*/
|
|
37
|
+
export function loadAllModels() {
|
|
38
|
+
try {
|
|
39
|
+
const cfg = readConfig();
|
|
40
|
+
const out = [];
|
|
41
|
+
for (const [pid, p] of Object.entries(cfg.provider ?? {})) {
|
|
42
|
+
if (isBuiltinProvider(pid)) {
|
|
43
|
+
if (p?.enabled !== true)
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
else if (p?.enabled === false) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const providerName = p.name ?? pid;
|
|
50
|
+
for (const modelId of Object.keys(p.models ?? {})) {
|
|
51
|
+
out.push({ providerId: pid, providerName, modelId });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (out.length === 0) {
|
|
55
|
+
// Fallback: config unreadable or no enabled provider — keep the legacy
|
|
56
|
+
// default so a freshly-installed editor still shows something.
|
|
57
|
+
return [
|
|
58
|
+
{
|
|
59
|
+
providerId: DEFAULT_PROVIDER_ID,
|
|
60
|
+
providerName: DEFAULT_PROVIDER_NAME,
|
|
61
|
+
modelId: DEFAULT_MODEL_ID,
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return [
|
|
69
|
+
{
|
|
70
|
+
providerId: DEFAULT_PROVIDER_ID,
|
|
71
|
+
providerName: DEFAULT_PROVIDER_NAME,
|
|
72
|
+
modelId: DEFAULT_MODEL_ID,
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Look up a provider entry by id (any provider, not just enabled). */
|
|
78
|
+
export function findProviderConfig(providerId) {
|
|
21
79
|
try {
|
|
22
80
|
const cfg = readConfig();
|
|
23
|
-
|
|
24
|
-
const keys = Object.keys(models);
|
|
25
|
-
return keys.length > 0 ? keys : ["GLM-5.2"];
|
|
81
|
+
return cfg.provider?.[providerId] ?? null;
|
|
26
82
|
}
|
|
27
83
|
catch {
|
|
28
|
-
return
|
|
84
|
+
return null;
|
|
29
85
|
}
|
|
30
86
|
}
|
|
31
|
-
/** Read the context-window size for a model from config.json
|
|
32
|
-
export function modelContextWindow(modelId) {
|
|
87
|
+
/** Read the context-window size for a provider+model from config.json. */
|
|
88
|
+
export function modelContextWindow(providerId, modelId) {
|
|
33
89
|
try {
|
|
34
90
|
const cfg = readConfig();
|
|
35
|
-
const models = cfg.provider?.[
|
|
91
|
+
const models = cfg.provider?.[providerId]?.models ?? {};
|
|
36
92
|
const entry = models[modelId];
|
|
37
93
|
return entry?.limit?.context ?? 0;
|
|
38
94
|
}
|
|
@@ -40,52 +96,169 @@ export function modelContextWindow(modelId) {
|
|
|
40
96
|
return 0;
|
|
41
97
|
}
|
|
42
98
|
}
|
|
43
|
-
/**
|
|
99
|
+
/** Builtin providerIds are prefixed with `builtin:` (e.g. `builtin:bigmodel`). */
|
|
100
|
+
export function isBuiltinProvider(providerId) {
|
|
101
|
+
return providerId.startsWith("builtin:");
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Encode a provider+model pair into a configOption `value` string.
|
|
105
|
+
*
|
|
106
|
+
* Builtin providers encode as the bare modelId (legacy form, keeps the dropdown
|
|
107
|
+
* clean for the common case). Third-party providers encode as
|
|
108
|
+
* `providerId\modelId` — `\` is unambiguous because providerIds (UUIDs) and
|
|
109
|
+
* modelIds (`/`-separated) never contain it.
|
|
110
|
+
*/
|
|
111
|
+
export function formatModelValue(providerId, modelId) {
|
|
112
|
+
if (isBuiltinProvider(providerId))
|
|
113
|
+
return modelId;
|
|
114
|
+
return `${providerId}\\${modelId}`;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Parse a configOption `value` back into { providerId, modelId }.
|
|
118
|
+
*
|
|
119
|
+
* A value without `\` is a builtin modelId (legacy form) → resolve to the first
|
|
120
|
+
* enabled builtin provider. A value with `\` is a third-party provider+model.
|
|
121
|
+
*/
|
|
122
|
+
export function parseModelValue(value) {
|
|
123
|
+
const idx = value.indexOf("\\");
|
|
124
|
+
if (idx < 0) {
|
|
125
|
+
// Builtin plain modelId — resolve to the first enabled builtin provider
|
|
126
|
+
// (falling back to the legacy default if none configured).
|
|
127
|
+
const firstBuiltin = loadAllModels().find((m) => isBuiltinProvider(m.providerId));
|
|
128
|
+
return {
|
|
129
|
+
providerId: firstBuiltin?.providerId ?? DEFAULT_PROVIDER_ID,
|
|
130
|
+
modelId: value,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return { providerId: value.slice(0, idx), modelId: value.slice(idx + 1) };
|
|
134
|
+
}
|
|
135
|
+
/** Build the ACP SessionModeState ({currentModeId, availableModes}).
|
|
136
|
+
* zcodeSid null = pending session (session/new not yet materialized) — skip
|
|
137
|
+
* the backend read and return defaults. */
|
|
44
138
|
export async function buildModes(server, zcodeSid) {
|
|
45
139
|
let currentMode = "yolo";
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
140
|
+
if (zcodeSid !== null) {
|
|
141
|
+
try {
|
|
142
|
+
const read = await sessionRead(server, zcodeSid);
|
|
143
|
+
const settings = (read.settings ?? {});
|
|
144
|
+
const modeSet = settings.mode ?? {};
|
|
145
|
+
currentMode = modeSet.current ?? currentMode;
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// keep default
|
|
149
|
+
}
|
|
54
150
|
}
|
|
55
151
|
return {
|
|
56
152
|
currentModeId: currentMode,
|
|
57
|
-
|
|
153
|
+
// ZCode 3.3.0 mode enum: plan/build/edit/yolo/auto. settings.mode only
|
|
154
|
+
// carries `current` (no `available` list, unlike thoughtLevel), so the full
|
|
155
|
+
// enum is advertised here.
|
|
156
|
+
availableModes: ["plan", "build", "edit", "yolo", "auto"].map((m) => ({
|
|
157
|
+
id: m,
|
|
158
|
+
name: capitalize(m),
|
|
159
|
+
})),
|
|
58
160
|
};
|
|
59
161
|
}
|
|
60
|
-
/**
|
|
162
|
+
/**
|
|
163
|
+
* Canonical display order for thought-level tokens across models
|
|
164
|
+
* (GLM-5.3: low/high/max; GLM-5-Turbo: enabled/off; others may differ).
|
|
165
|
+
* Unknown tokens keep their config order after the known ones.
|
|
166
|
+
*/
|
|
167
|
+
const THOUGHT_ORDER = ["low", "medium", "high", "xhigh", "max", "ultra", "enabled", "disabled", "off"];
|
|
168
|
+
export function orderThoughtVariants(variants) {
|
|
169
|
+
const known = THOUGHT_ORDER.filter((t) => variants.includes(t));
|
|
170
|
+
const extra = variants.filter((t) => !THOUGHT_ORDER.includes(t));
|
|
171
|
+
return [...known, ...extra].map((t) => ({ value: t, name: t }));
|
|
172
|
+
}
|
|
173
|
+
/** Build the ACP configOptions array (3 items: model/mode/thought).
|
|
174
|
+
* zcodeSid null = pending session — skip the backend read and use defaults;
|
|
175
|
+
* mode defaults to "yolo" (the mode session/create hardcodes) so the dropdown
|
|
176
|
+
* matches the mode indicator for a fresh session. */
|
|
61
177
|
export async function buildConfigOptions(server, zcodeSid) {
|
|
62
|
-
let
|
|
63
|
-
let
|
|
64
|
-
let
|
|
178
|
+
let currentProviderId = "";
|
|
179
|
+
let currentModelId = DEFAULT_MODEL_ID;
|
|
180
|
+
let currentMode = zcodeSid === null ? "yolo" : "build";
|
|
181
|
+
// Matches the enabled provider's default reasoning variants (GLM-5.3:
|
|
182
|
+
// max/high/low, default max). Pending sessions show this until the real
|
|
183
|
+
// session/read thoughtLevel arrives.
|
|
184
|
+
let currentThought = "max";
|
|
65
185
|
let thoughtOptions = null;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
186
|
+
if (zcodeSid === null) {
|
|
187
|
+
// Pending session — no backend to read yet, but the thought vocabulary
|
|
188
|
+
// is per model and the runtime's own source of truth is the enabled
|
|
189
|
+
// provider's models[].reasoning.variants in the local config. Advertise
|
|
190
|
+
// THAT for the default model instead of a hardcoded list: a client that
|
|
191
|
+
// relays the options into a picker (Multica's effort selector) would
|
|
192
|
+
// otherwise offer tokens the runtime rejects ("nothink" was fiction,
|
|
193
|
+
// "low" was missing).
|
|
194
|
+
const cur = loadAllModels()[0];
|
|
195
|
+
if (cur) {
|
|
196
|
+
// The advertised current model follows the dropdown's leading entry
|
|
197
|
+
// (the enabled provider's first model — what the runtime actually
|
|
198
|
+
// starts sessions with) rather than the legacy hardcoded "GLM-5.2".
|
|
199
|
+
// ACP clients skip a requested model switch when it equals the
|
|
200
|
+
// advertised current value, so a stale fiction silently pinned the
|
|
201
|
+
// wrong model whenever the requested id happened to match it.
|
|
202
|
+
currentProviderId = cur.providerId;
|
|
203
|
+
currentModelId = cur.modelId;
|
|
204
|
+
try {
|
|
205
|
+
const cfg = readConfig();
|
|
206
|
+
const m = cfg.provider?.[cur.providerId]?.models?.[cur.modelId];
|
|
207
|
+
const reasoning = m?.reasoning;
|
|
208
|
+
const variants = reasoning?.variants;
|
|
209
|
+
if (reasoning?.enabled !== false && variants && variants.length > 0) {
|
|
210
|
+
thoughtOptions = orderThoughtVariants(variants);
|
|
211
|
+
currentThought = reasoning.defaultVariant ?? variants[0];
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// unreadable config — the static fallback below applies
|
|
216
|
+
}
|
|
80
217
|
}
|
|
81
218
|
}
|
|
82
|
-
|
|
83
|
-
|
|
219
|
+
if (zcodeSid !== null) {
|
|
220
|
+
try {
|
|
221
|
+
const read = await sessionRead(server, zcodeSid);
|
|
222
|
+
const settings = (read.settings ?? {});
|
|
223
|
+
const modeSet = settings.mode ?? {};
|
|
224
|
+
currentMode = modeSet.current ?? currentMode;
|
|
225
|
+
const modelSet = settings.model ?? {};
|
|
226
|
+
// settings.model.current is { providerId, modelId, variant? } — read BOTH so
|
|
227
|
+
// we can disambiguate same-named models across providers.
|
|
228
|
+
const cur = modelSet.current ?? {};
|
|
229
|
+
if (cur.providerId)
|
|
230
|
+
currentProviderId = cur.providerId;
|
|
231
|
+
if (cur.modelId)
|
|
232
|
+
currentModelId = cur.modelId;
|
|
233
|
+
const tlSet = settings.thoughtLevel ?? {};
|
|
234
|
+
// `current` is absent right after session/create — fall back to the
|
|
235
|
+
// backend's defaultLevel (the level the session actually runs at).
|
|
236
|
+
currentThought = tlSet.current ?? tlSet.defaultLevel ?? currentThought;
|
|
237
|
+
const tlAvail = tlSet.available ?? [];
|
|
238
|
+
if (tlAvail.length > 0) {
|
|
239
|
+
thoughtOptions = tlAvail.map((a) => ({ value: a.value, name: a.label ?? a.value }));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
// keep defaults
|
|
244
|
+
}
|
|
84
245
|
}
|
|
85
|
-
//
|
|
86
|
-
|
|
246
|
+
// currentValue encodes provider+model so the switch handler can locate the
|
|
247
|
+
// right provider (and its apiKey). Fall back to the first enabled provider
|
|
248
|
+
// when settings omits providerId (legacy sessions).
|
|
249
|
+
const currentModel = formatModelValue(currentProviderId || loadAllModels()[0]?.providerId || DEFAULT_PROVIDER_ID, currentModelId);
|
|
250
|
+
// Model options: config.json enabled providers are authoritative. Builtin
|
|
251
|
+
// models show as the bare modelId (clean dropdown for the common case);
|
|
252
|
+
// third-party models prefix the provider name so they're distinguishable.
|
|
253
|
+
let modelOptions = loadAllModels().map((m) => ({
|
|
254
|
+
value: formatModelValue(m.providerId, m.modelId),
|
|
255
|
+
name: isBuiltinProvider(m.providerId) ? m.modelId : `${m.providerName} › ${m.modelId}`,
|
|
256
|
+
}));
|
|
87
257
|
if (!modelOptions.some((o) => o.value === currentModel)) {
|
|
88
|
-
|
|
258
|
+
// The current model isn't from an enabled provider (e.g. the session was
|
|
259
|
+
// created with a now-disabled provider). Append it so the dropdown still
|
|
260
|
+
// shows the active selection.
|
|
261
|
+
modelOptions = [{ value: currentModel, name: currentModelId }, ...modelOptions];
|
|
89
262
|
}
|
|
90
263
|
if (!thoughtOptions)
|
|
91
264
|
thoughtOptions = [...CONFIG_META.thought.options];
|
|
@@ -109,7 +282,12 @@ export async function buildConfigOptions(server, zcodeSid) {
|
|
|
109
282
|
{
|
|
110
283
|
id: "thought",
|
|
111
284
|
name: CONFIG_META.thought.name,
|
|
112
|
-
|
|
285
|
+
// Category thought_level (not "thought") so ACP clients recognise the
|
|
286
|
+
// option as the reasoning-effort selector: the shared matchers in
|
|
287
|
+
// editors and orchestrators (e.g. Multica's acpEffortOptionIDs) key on
|
|
288
|
+
// id/category "effort"/"thought_level". The id stays "thought" — it is
|
|
289
|
+
// what session/set_config_option addresses.
|
|
290
|
+
category: "thought_level",
|
|
113
291
|
type: "select",
|
|
114
292
|
currentValue: currentThought,
|
|
115
293
|
options: thoughtOptions,
|
|
@@ -141,7 +319,11 @@ export async function setConfigOption(server, zcodeSid, configId, value) {
|
|
|
141
319
|
return { kind: configId, currentValue: value };
|
|
142
320
|
}
|
|
143
321
|
/** Emit a config_option_update (+ current_mode_update for mode) after a change.
|
|
144
|
-
* Returns the rebuilt options so the caller can include them in the response.
|
|
322
|
+
* Returns the rebuilt options so the caller can include them in the response.
|
|
323
|
+
*
|
|
324
|
+
* For model switches, also emit a usage_update with the NEW model's context
|
|
325
|
+
* window (from config.json) so the editor's context bar refreshes immediately
|
|
326
|
+
* instead of waiting for the next turn's UsageDelta. */
|
|
145
327
|
export async function emitConfigOptionUpdate(server, cx, acpSid, zcodeSid, kind) {
|
|
146
328
|
const options = await buildConfigOptions(server, zcodeSid);
|
|
147
329
|
await sendSessionUpdate(cx, acpSid, {
|
|
@@ -155,6 +337,27 @@ export async function emitConfigOptionUpdate(server, cx, acpSid, zcodeSid, kind)
|
|
|
155
337
|
currentModeId: modes.currentModeId,
|
|
156
338
|
});
|
|
157
339
|
}
|
|
340
|
+
if (kind === "model") {
|
|
341
|
+
// Refresh the context bar: the backend's projection.contextWindow lags
|
|
342
|
+
// behind a model switch, so read the new model's limit from config.json.
|
|
343
|
+
try {
|
|
344
|
+
const read = await sessionRead(server, zcodeSid);
|
|
345
|
+
const proj = (read.projection ?? {});
|
|
346
|
+
const used = proj.contextUsed || proj.totalTokenCount || 0;
|
|
347
|
+
// The rebuilt options[0] (model) currentValue is the just-switched value.
|
|
348
|
+
const modelOpt = options.find((o) => o.id === "model");
|
|
349
|
+
const { providerId, modelId } = parseModelValue(String(modelOpt?.currentValue ?? ""));
|
|
350
|
+
const size = modelContextWindow(providerId, modelId);
|
|
351
|
+
await sendSessionUpdate(cx, acpSid, {
|
|
352
|
+
sessionUpdate: "usage_update",
|
|
353
|
+
used,
|
|
354
|
+
size,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
catch (e) {
|
|
358
|
+
log(`options: usage_update after model switch failed (${e instanceof Error ? e.message : String(e)})`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
158
361
|
return options;
|
|
159
362
|
}
|
|
160
363
|
// ---------- helpers ----------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/config/options.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/config/options.ts"],"names":[],"mappings":"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"}
|