@baique/pi-web-sky 0.1.35 → 0.1.36
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +16 -16
- package/.next/build-manifest.json +3 -3
- package/.next/react-loadable-manifest.json +1 -1
- package/.next/required-server-files.js +1 -1
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +3 -3
- package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
- package/.next/server/app/api/agent/[id]/events/route.js +1 -1
- package/.next/server/app/api/agent/[id]/route.js +1 -1
- package/.next/server/app/api/app-update/route.js +1 -1
- package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
- package/.next/server/app/api/cwd/validate/route.js +1 -1
- package/.next/server/app/api/default-cwd/route.js +1 -1
- package/.next/server/app/api/file-index/route.js +1 -1
- package/.next/server/app/api/files/[...path]/route.js +1 -1
- package/.next/server/app/api/mcp/route.js +1 -1
- package/.next/server/app/api/models/route.js +1 -1
- package/.next/server/app/api/plugins/route.js +1 -1
- package/.next/server/app/api/project-trust/route.js +1 -1
- package/.next/server/app/api/search/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
- package/.next/server/app/api/sessions/[id]/todos/route.js +1 -1
- package/.next/server/app/api/sessions/route.js +1 -1
- package/.next/server/app/api/skills/check/route.js +1 -1
- package/.next/server/app/api/skills/check/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/install/route.js +1 -1
- package/.next/server/app/api/skills/route.js +2 -31
- package/.next/server/app/api/skills/route.js.nft.json +1 -1
- package/.next/server/app/api/skills/update/route.js +1 -1
- package/.next/server/app/api/skills/update/route.js.nft.json +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/index.html +1 -1
- package/.next/server/app/index.rsc +5 -5
- package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
- package/.next/server/app/index.segments/_full.segment.rsc +5 -5
- package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/.next/server/app/page.js +2 -2
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +16 -16
- package/.next/server/chunks/2404.js +1 -1
- package/.next/server/chunks/3500.js +30 -0
- package/.next/server/chunks/4226.js +2 -2
- package/.next/server/chunks/542.js +10 -5
- package/.next/server/chunks/5794.js +1 -1
- package/.next/server/chunks/6429.js +1 -1
- package/.next/server/chunks/898.js +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/static/chunks/5315.7e72d26a3ad3bd9a.js +4 -0
- package/.next/static/chunks/app/{layout-1d9a7a44fbc92d2e.js → layout-ebbc0d287267b07b.js} +1 -1
- package/.next/static/chunks/app/{page-6d6779a81a0a7639.js → page-e568623a44c67606.js} +2 -2
- package/.next/static/chunks/{webpack-fa4f40085b1ec1ac.js → webpack-2e4e348867a555cd.js} +1 -1
- package/.next/static/css/422c7dc0faa04d89.css +1 -0
- package/.next/trace +8 -9
- package/.next/trace-build +1 -1
- package/bin/pi-web-sky.js +15 -20
- package/lib/agent-client.test.mjs +64 -0
- package/lib/agent-client.ts +53 -0
- package/lib/agent-event-connection.test.mjs +193 -0
- package/lib/agent-event-connection.ts +202 -0
- package/lib/agent-event-stream.test.mjs +155 -0
- package/lib/agent-event-stream.ts +132 -0
- package/lib/agent-event-wire.test.mjs +278 -0
- package/lib/agent-event-wire.ts +107 -0
- package/lib/agent-phase.ts +24 -0
- package/lib/allowed-roots.ts +31 -0
- package/lib/ansi.test.mjs +52 -0
- package/lib/ansi.ts +211 -0
- package/lib/api-types.ts +139 -0
- package/lib/app-update.test.mjs +27 -0
- package/lib/app-update.ts +28 -0
- package/lib/atomic-file.test.mjs +37 -0
- package/lib/atomic-file.ts +34 -0
- package/lib/audit-session.ts +235 -0
- package/lib/bash-output.test.mjs +63 -0
- package/lib/bash-output.ts +53 -0
- package/lib/bg-image.ts +129 -0
- package/lib/board-events.ts +83 -0
- package/lib/board-purge.test.mjs +66 -0
- package/lib/board-purge.ts +65 -0
- package/lib/board-search.test.mjs +110 -0
- package/lib/board-search.ts +63 -0
- package/lib/board-store.test.mjs +542 -0
- package/lib/board-store.ts +794 -0
- package/lib/board-types.ts +96 -0
- package/lib/board-utils.ts +17 -0
- package/lib/bounded-form-data.test.mjs +54 -0
- package/lib/bounded-form-data.ts +49 -0
- package/lib/browser-notifications.test.mjs +167 -0
- package/lib/browser-notifications.ts +104 -0
- package/lib/chat-lazy-load.test.mjs +140 -0
- package/lib/chat-lazy-load.ts +64 -0
- package/lib/clipboard-paths.test.mjs +140 -0
- package/lib/clipboard-paths.ts +192 -0
- package/lib/clipboard.ts +18 -0
- package/lib/compaction-summary.test.mjs +44 -0
- package/lib/compaction-summary.ts +34 -0
- package/lib/custom-ui-terminal.test.mjs +32 -0
- package/lib/custom-ui-terminal.ts +27 -0
- package/lib/deepseek-pricing.test.mjs +120 -0
- package/lib/deepseek-pricing.ts +71 -0
- package/lib/directory-browser.test.mjs +60 -0
- package/lib/directory-browser.ts +83 -0
- package/lib/draft-stash.test.mjs +91 -0
- package/lib/draft-stash.ts +102 -0
- package/lib/draft-store.ts +105 -0
- package/lib/dropdown-direction.ts +27 -0
- package/lib/extension-command.test.mjs +63 -0
- package/lib/extension-command.ts +81 -0
- package/lib/file-access.test.mjs +31 -0
- package/lib/file-access.ts +59 -0
- package/lib/file-dirent.test.mjs +56 -0
- package/lib/file-dirent.ts +17 -0
- package/lib/file-explorer-state.test.mjs +63 -0
- package/lib/file-explorer-state.ts +36 -0
- package/lib/file-fuzzy.test.mjs +29 -0
- package/lib/file-fuzzy.ts +189 -0
- package/lib/file-links.test.mjs +92 -0
- package/lib/file-links.ts +148 -0
- package/lib/file-paths.ts +43 -0
- package/lib/file-types.test.mjs +34 -0
- package/lib/file-types.ts +73 -0
- package/lib/file-upload.test.mjs +70 -0
- package/lib/file-upload.ts +59 -0
- package/lib/file-viewer-state.test.mjs +20 -0
- package/lib/file-viewer-state.ts +15 -0
- package/lib/frontmatter.test.mjs +55 -0
- package/lib/frontmatter.ts +87 -0
- package/lib/git-changes.test.mjs +52 -0
- package/lib/git-changes.ts +232 -0
- package/lib/git-status.ts +47 -0
- package/lib/git-types.ts +29 -0
- package/lib/http-dispatcher.test.mjs +83 -0
- package/lib/http-dispatcher.ts +86 -0
- package/lib/i18n/format.test.mjs +19 -0
- package/lib/i18n/format.ts +60 -0
- package/lib/i18n/messages/en.ts +662 -0
- package/lib/i18n/messages/zh-CN.ts +661 -0
- package/lib/i18n/registry.test.mjs +32 -0
- package/lib/i18n/registry.ts +43 -0
- package/lib/i18n/types.ts +15 -0
- package/lib/image-attachments.test.mjs +27 -0
- package/lib/image-attachments.ts +56 -0
- package/lib/initial-navigation.test.mjs +65 -0
- package/lib/initial-navigation.ts +15 -0
- package/lib/markdown.test.mjs +104 -0
- package/lib/markdown.ts +347 -0
- package/lib/message-display.test.mjs +130 -0
- package/lib/message-display.ts +47 -0
- package/lib/model-catalog.test.mjs +327 -0
- package/lib/model-catalog.ts +414 -0
- package/lib/model-discovery-auth.ts +58 -0
- package/lib/model-discovery.test.mjs +50 -0
- package/lib/model-discovery.ts +75 -0
- package/lib/model-id-preference.ts +46 -0
- package/lib/model-scope.test.mjs +193 -0
- package/lib/model-scope.ts +198 -0
- package/lib/models-cache.test.mjs +122 -0
- package/lib/models-cache.ts +90 -0
- package/lib/models-config-store.test.mjs +200 -0
- package/lib/models-config-store.ts +84 -0
- package/lib/next-config-esm.test.mjs +14 -0
- package/lib/next-config.test.mjs +13 -0
- package/lib/node-version.test.mjs +33 -0
- package/lib/normalize.test.mjs +54 -0
- package/lib/normalize.ts +63 -0
- package/lib/npx.ts +62 -0
- package/lib/panel-layout.test.mjs +56 -0
- package/lib/panel-layout.ts +52 -0
- package/lib/patch.test.mjs +110 -0
- package/lib/patch.ts +134 -0
- package/lib/path-security.ts +42 -0
- package/lib/paths.test.mjs +58 -0
- package/lib/paths.ts +71 -0
- package/lib/pi-types.ts +183 -0
- package/lib/pi-web-options.test.mjs +63 -0
- package/lib/process-lifecycle.test.mjs +83 -0
- package/lib/project-command-env.test.mjs +298 -0
- package/lib/project-command-env.ts +129 -0
- package/lib/project-groups.test.mjs +60 -0
- package/lib/project-groups.ts +53 -0
- package/lib/project-identity.test.mjs +37 -0
- package/lib/project-identity.ts +26 -0
- package/lib/project-tree.test.mjs +115 -0
- package/lib/project-tree.ts +176 -0
- package/lib/project-trust.test.mjs +117 -0
- package/lib/project-trust.ts +48 -0
- package/lib/prompt-recovery.test.mjs +33 -0
- package/lib/prompt-recovery.ts +47 -0
- package/lib/provider-api-key-route.test.mjs +12 -0
- package/lib/provider-credential-store.test.mjs +126 -0
- package/lib/provider-credential-store.ts +114 -0
- package/lib/provider-listing-runtime.ts +37 -0
- package/lib/provider-listing.test.mjs +114 -0
- package/lib/provider-listing.ts +118 -0
- package/lib/provider-services.ts +64 -0
- package/lib/request-security.test.mjs +256 -0
- package/lib/request-security.ts +136 -0
- package/lib/rpc-manager-shutdown.test.mjs +372 -0
- package/lib/rpc-manager-widgets.test.mjs +342 -0
- package/lib/rpc-manager.test.mjs +139 -0
- package/lib/rpc-manager.ts +1703 -0
- package/lib/rpc-session-info.test.mjs +93 -0
- package/lib/session-delete.test.mjs +53 -0
- package/lib/session-delete.ts +86 -0
- package/lib/session-file-references-core.ts +82 -0
- package/lib/session-file-references.test.mjs +91 -0
- package/lib/session-file-references.ts +29 -0
- package/lib/session-path.test.mjs +24 -0
- package/lib/session-path.ts +11 -0
- package/lib/session-reader.pagination.test.mjs +115 -0
- package/lib/session-reader.test.mjs +446 -0
- package/lib/session-reader.ts +548 -0
- package/lib/session-resolve.test.mjs +65 -0
- package/lib/session-row-context-menu.test.mjs +46 -0
- package/lib/session-row-context-menu.ts +29 -0
- package/lib/session-scanner.test.mjs +151 -0
- package/lib/session-scanner.ts +238 -0
- package/lib/session-search.test.mjs +173 -0
- package/lib/session-search.ts +284 -0
- package/lib/session-stats.ts +26 -0
- package/lib/session-timing.test.mjs +107 -0
- package/lib/session-timing.ts +45 -0
- package/lib/session-title.test.mjs +284 -0
- package/lib/session-title.ts +255 -0
- package/lib/skill-frontmatter.test.mjs +75 -0
- package/lib/skill-frontmatter.ts +40 -0
- package/lib/skill-lock.test.mjs +182 -0
- package/lib/skill-lock.ts +146 -0
- package/lib/skill-updates.test.mjs +182 -0
- package/lib/skill-updates.ts +263 -0
- package/lib/skills-service.ts +16 -0
- package/lib/slash-display.test.mjs +122 -0
- package/lib/slash-display.ts +30 -0
- package/lib/sqlite-db.test.mjs +140 -0
- package/lib/sqlite-db.ts +205 -0
- package/lib/startup-preferences.test.mjs +130 -0
- package/lib/startup-preferences.ts +65 -0
- package/lib/streaming-message.test.mjs +212 -0
- package/lib/streaming-message.ts +151 -0
- package/lib/subagent-widget.test.mjs +87 -0
- package/lib/subagent-widget.ts +109 -0
- package/lib/sync-room-server.mjs +137 -0
- package/lib/task-card-store.test.mjs +309 -0
- package/lib/task-card-store.ts +559 -0
- package/lib/task-scheduler.ts +498 -0
- package/lib/task-store.test.mjs +216 -0
- package/lib/task-store.ts +271 -0
- package/lib/terminal-input.test.mjs +46 -0
- package/lib/terminal-input.ts +63 -0
- package/lib/terminal-manager.test.mjs +71 -0
- package/lib/terminal-manager.ts +245 -0
- package/lib/tool-execution-progress.test.mjs +32 -0
- package/lib/tool-execution-progress.ts +29 -0
- package/lib/tool-names.ts +25 -0
- package/lib/tool-preset-preference.test.mjs +72 -0
- package/lib/tool-preset-preference.ts +41 -0
- package/lib/tool-presets.test.mjs +56 -0
- package/lib/tool-presets.ts +42 -0
- package/lib/turn-written-files.test.mjs +137 -0
- package/lib/turn-written-files.ts +60 -0
- package/lib/types.ts +349 -0
- package/lib/wallpaper-settings.ts +191 -0
- package/lib/web-auth.test.mjs +50 -0
- package/lib/web-auth.ts +45 -0
- package/lib/workspace-memory.test.mjs +129 -0
- package/lib/workspace-memory.ts +98 -0
- package/lib/worktree.test.mjs +50 -0
- package/lib/worktree.ts +250 -0
- package/package.json +3 -1
- package/server.mjs +34 -0
- package/.next/server/chunks/7513.js +0 -30
- package/.next/static/chunks/5315.03de3c6abd8b283e.js +0 -4
- package/.next/static/css/cf25164cb7c04d95.css +0 -1
- /package/.next/static/{Ud6Y2ONkGuPVFbo1xZQvk → EoBw3VYlygpr1EqlVOa5b}/_buildManifest.js +0 -0
- /package/.next/static/{Ud6Y2ONkGuPVFbo1xZQvk → EoBw3VYlygpr1EqlVOa5b}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import test from "node:test";
|
|
4
|
+
|
|
5
|
+
test("RPC session startup preloads extension-registered providers before restoring models", async () => {
|
|
6
|
+
const source = await readFile(new URL("./rpc-manager.ts", import.meta.url), "utf8");
|
|
7
|
+
const startupSource = source.slice(source.indexOf("export async function startRpcSession"));
|
|
8
|
+
|
|
9
|
+
assert.match(startupSource, /createAgentSessionServices\(/);
|
|
10
|
+
assert.match(startupSource, /createAgentSessionFromServices\(/);
|
|
11
|
+
assert.doesNotMatch(startupSource, /await createAgentSession\(/);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
test("RPC session startup resolves and passes the SDK-native enabled model scope", async () => {
|
|
15
|
+
const source = await readFile(new URL("./rpc-manager.ts", import.meta.url), "utf8");
|
|
16
|
+
const startupSource = source.slice(source.indexOf("export async function startRpcSession"));
|
|
17
|
+
const resolveIndex = startupSource.indexOf("resolveVisibleModels(");
|
|
18
|
+
const createIndex = startupSource.indexOf("createAgentSessionFromServices(");
|
|
19
|
+
|
|
20
|
+
assert.ok(resolveIndex >= 0);
|
|
21
|
+
assert.ok(createIndex > resolveIndex);
|
|
22
|
+
assert.match(startupSource, /selectInitialModelScope\(/);
|
|
23
|
+
assert.match(startupSource, /scopedModels: initial\.scopedModels/);
|
|
24
|
+
assert.match(startupSource, /model: initial\.model/);
|
|
25
|
+
assert.match(startupSource, /thinkingLevel: initial\.thinkingLevel/);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test("RPC session startup treats only sessions with messages as continuing", async () => {
|
|
29
|
+
const source = await readFile(new URL("./rpc-manager.ts", import.meta.url), "utf8");
|
|
30
|
+
const startupSource = source.slice(source.indexOf("export async function startRpcSession"));
|
|
31
|
+
|
|
32
|
+
assert.match(
|
|
33
|
+
startupSource,
|
|
34
|
+
/const hasExistingMessages = sessionManager\.getBranch\(\)\.some\(\(entry\) => entry\.type === "message"\)/,
|
|
35
|
+
);
|
|
36
|
+
assert.match(startupSource, /const initial = hasExistingMessages/);
|
|
37
|
+
assert.doesNotMatch(startupSource, /const initial = sessionFile/);
|
|
38
|
+
assert.doesNotMatch(startupSource, /sessionManager\.buildSessionContext\(\)/);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("RPC session startup opens an existing session file only once and trusts its cwd", async () => {
|
|
42
|
+
const source = await readFile(new URL("./rpc-manager.ts", import.meta.url), "utf8");
|
|
43
|
+
const startupSource = source.slice(source.indexOf("export async function startRpcSession"));
|
|
44
|
+
const routeSource = await readFile(new URL("../app/api/agent/[id]/route.ts", import.meta.url), "utf8");
|
|
45
|
+
const eventRouteSource = await readFile(new URL("../app/api/agent/[id]/events/route.ts", import.meta.url), "utf8");
|
|
46
|
+
const autoNameRouteSource = await readFile(new URL("../app/api/sessions/[id]/auto-name/route.ts", import.meta.url), "utf8");
|
|
47
|
+
|
|
48
|
+
assert.equal((startupSource.match(/SessionManager\.open\(/g) ?? []).length, 1);
|
|
49
|
+
assert.match(startupSource, /const sessionCwd = sessionManager\.getCwd\(\)/);
|
|
50
|
+
assert.match(startupSource, /projectTrustReloadOptions\(sessionCwd, agentDir\)/);
|
|
51
|
+
assert.match(startupSource, /cwd: sessionCwd/);
|
|
52
|
+
for (const route of [routeSource, eventRouteSource, autoNameRouteSource]) {
|
|
53
|
+
assert.doesNotMatch(route, /SessionManager\.open\(/);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("RPC wrapper avoids per-chunk idle and running-state maintenance", async () => {
|
|
58
|
+
const source = await readFile(new URL("./rpc-manager.ts", import.meta.url), "utf8");
|
|
59
|
+
const startSource = source.slice(
|
|
60
|
+
source.indexOf(" start(): void"),
|
|
61
|
+
source.indexOf(" setForceEmptySystemPrompt"),
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
assert.match(startSource, /IDLE_RESET_EVENT_TYPES\.has\(event\.type\)/);
|
|
65
|
+
assert.doesNotMatch(startSource, /subscribe\(\(event: AgentEvent\) => \{\s*this\.resetIdleTimer\(\)/);
|
|
66
|
+
assert.doesNotMatch(source, /notifyRunningChange/);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test("normal session teardown paths use graceful extension shutdown", async () => {
|
|
70
|
+
const source = await readFile(new URL("./rpc-manager.ts", import.meta.url), "utf8");
|
|
71
|
+
const deleteRouteSource = await readFile(new URL("../app/api/sessions/[id]/route.ts", import.meta.url), "utf8");
|
|
72
|
+
const trustRouteSource = await readFile(new URL("../app/api/project-trust/route.ts", import.meta.url), "utf8");
|
|
73
|
+
const idleSource = source.slice(
|
|
74
|
+
source.indexOf(" private resetIdleTimer"),
|
|
75
|
+
source.indexOf(" private persistBashOnlySession"),
|
|
76
|
+
);
|
|
77
|
+
const forkSource = source.slice(
|
|
78
|
+
source.indexOf('case "fork"'),
|
|
79
|
+
source.indexOf('case "navigate_tree"'),
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
assert.match(idleSource, /this\.shutdown\(\)/);
|
|
83
|
+
assert.match(forkSource, /await this\.shutdown\(\)/);
|
|
84
|
+
assert.match(deleteRouteSource, /await getRpcSession\(id\)\?\.shutdown\(\)/);
|
|
85
|
+
assert.match(trustRouteSource, /await destroyRpcSessionsForCwd\(result\.cwd\)/);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test("new-session route applies model scope during construction instead of follow-up commands", async () => {
|
|
89
|
+
const source = await readFile(new URL("../app/api/agent/new/route.ts", import.meta.url), "utf8");
|
|
90
|
+
|
|
91
|
+
assert.match(source, /initialModel: \{ provider, modelId \}/);
|
|
92
|
+
assert.match(source, /thinkingLevel: explicitThinkingLevel/);
|
|
93
|
+
assert.doesNotMatch(source, /session\.send\(\{ type: "set_model"/);
|
|
94
|
+
assert.doesNotMatch(source, /session\.send\(\{ type: "set_thinking_level"/);
|
|
95
|
+
assert.match(source, /model: state\.model/);
|
|
96
|
+
assert.match(source, /thinkingLevel: state\.thinkingLevel/);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test("prompt routes mark only preflight failures as rejected", async () => {
|
|
100
|
+
const existingRoute = await readFile(new URL("../app/api/agent/[id]/route.ts", import.meta.url), "utf8");
|
|
101
|
+
const newRoute = await readFile(new URL("../app/api/agent/new/route.ts", import.meta.url), "utf8");
|
|
102
|
+
|
|
103
|
+
for (const source of [existingRoute, newRoute]) {
|
|
104
|
+
assert.match(source, /let promptAccepted = false/);
|
|
105
|
+
assert.match(source, /await .*\.send\(/);
|
|
106
|
+
assert.match(source, /promptAccepted = .*\.type === "prompt"/);
|
|
107
|
+
assert.match(source, /commandType === "prompt" && !promptAccepted/);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test("RPC session startup persists explicit preferences without replaying setters", async () => {
|
|
112
|
+
const source = await readFile(new URL("./rpc-manager.ts", import.meta.url), "utf8");
|
|
113
|
+
const startupSource = source.slice(source.indexOf("export async function startRpcSession"));
|
|
114
|
+
|
|
115
|
+
assert.match(startupSource, /persistExplicitStartupPreferences\(/);
|
|
116
|
+
assert.match(startupSource, /modelDefaultChanged\) invalidateModelsCache\(\)/);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test("custom extension UI receives the fixed headless terminal facade", async () => {
|
|
120
|
+
const source = await readFile(new URL("./rpc-manager.ts", import.meta.url), "utf8");
|
|
121
|
+
const customUiSource = source.slice(
|
|
122
|
+
source.indexOf("private requestExtensionCustomUi"),
|
|
123
|
+
source.indexOf("private requestExtensionUi"),
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
assert.match(customUiSource, /createHeadlessCustomUiTui\(/);
|
|
127
|
+
assert.match(customUiSource, /width,/);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
test("reloading a session invalidates the models cache", async () => {
|
|
131
|
+
const source = await readFile(new URL("./rpc-manager.ts", import.meta.url), "utf8");
|
|
132
|
+
const reloadSource = source.slice(
|
|
133
|
+
source.indexOf('case "reload"'),
|
|
134
|
+
source.indexOf('case "abort_compaction"'),
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
assert.match(reloadSource, /await this\.inner\.reload\(\)/);
|
|
138
|
+
assert.match(reloadSource, /this\.applyForcedEmptySystemPrompt\(\);\s*invalidateModelsCache\(\)/);
|
|
139
|
+
});
|