@aiden-ade/sandbox-agent 0.1.59 → 0.1.60
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/dist/__tests__/binding-switch-git.test.d.ts +2 -0
- package/dist/__tests__/binding-switch-git.test.d.ts.map +1 -0
- package/dist/__tests__/binding-switch-git.test.js +610 -0
- package/dist/__tests__/binding-switch-git.test.js.map +1 -0
- package/dist/__tests__/cli-ensure-install.test.d.ts +2 -0
- package/dist/__tests__/cli-ensure-install.test.d.ts.map +1 -0
- package/dist/__tests__/cli-ensure-install.test.js +109 -0
- package/dist/__tests__/cli-ensure-install.test.js.map +1 -0
- package/dist/__tests__/cli-executable.test.d.ts +2 -0
- package/dist/__tests__/cli-executable.test.d.ts.map +1 -0
- package/dist/__tests__/cli-executable.test.js +129 -0
- package/dist/__tests__/cli-executable.test.js.map +1 -0
- package/dist/__tests__/cli-help.test.d.ts +2 -0
- package/dist/__tests__/cli-help.test.d.ts.map +1 -0
- package/dist/__tests__/cli-help.test.js +34 -0
- package/dist/__tests__/cli-help.test.js.map +1 -0
- package/dist/__tests__/computer-readiness.test.d.ts +2 -0
- package/dist/__tests__/computer-readiness.test.d.ts.map +1 -0
- package/dist/__tests__/computer-readiness.test.js +63 -0
- package/dist/__tests__/computer-readiness.test.js.map +1 -0
- package/dist/__tests__/core-agent-workflow-context.test.d.ts +2 -0
- package/dist/__tests__/core-agent-workflow-context.test.d.ts.map +1 -0
- package/dist/__tests__/core-agent-workflow-context.test.js +139 -0
- package/dist/__tests__/core-agent-workflow-context.test.js.map +1 -0
- package/dist/__tests__/daemon-reconcile-ask.test.d.ts +2 -0
- package/dist/__tests__/daemon-reconcile-ask.test.d.ts.map +1 -0
- package/dist/__tests__/daemon-reconcile-ask.test.js +86 -0
- package/dist/__tests__/daemon-reconcile-ask.test.js.map +1 -0
- package/dist/__tests__/daemon-socket.integration.test.d.ts +2 -0
- package/dist/__tests__/daemon-socket.integration.test.d.ts.map +1 -0
- package/dist/__tests__/daemon-socket.integration.test.js +450 -0
- package/dist/__tests__/daemon-socket.integration.test.js.map +1 -0
- package/dist/__tests__/daemon.test.d.ts +2 -0
- package/dist/__tests__/daemon.test.d.ts.map +1 -0
- package/dist/__tests__/daemon.test.js +3975 -0
- package/dist/__tests__/daemon.test.js.map +1 -0
- package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts +2 -0
- package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts.map +1 -0
- package/dist/__tests__/ensure-shared-checkout-branch.test.js +129 -0
- package/dist/__tests__/ensure-shared-checkout-branch.test.js.map +1 -0
- package/dist/__tests__/event-outbox-persist-failure.test.d.ts +2 -0
- package/dist/__tests__/event-outbox-persist-failure.test.d.ts.map +1 -0
- package/dist/__tests__/event-outbox-persist-failure.test.js +84 -0
- package/dist/__tests__/event-outbox-persist-failure.test.js.map +1 -0
- package/dist/__tests__/event-outbox.test.d.ts +2 -0
- package/dist/__tests__/event-outbox.test.d.ts.map +1 -0
- package/dist/__tests__/event-outbox.test.js +256 -0
- package/dist/__tests__/event-outbox.test.js.map +1 -0
- package/dist/__tests__/fake-provider-cli.test.d.ts +2 -0
- package/dist/__tests__/fake-provider-cli.test.d.ts.map +1 -0
- package/dist/__tests__/fake-provider-cli.test.js +46 -0
- package/dist/__tests__/fake-provider-cli.test.js.map +1 -0
- package/dist/__tests__/generated-images.test.d.ts +2 -0
- package/dist/__tests__/generated-images.test.d.ts.map +1 -0
- package/dist/__tests__/generated-images.test.js +132 -0
- package/dist/__tests__/generated-images.test.js.map +1 -0
- package/dist/__tests__/lifecycle-logger.test.d.ts +2 -0
- package/dist/__tests__/lifecycle-logger.test.d.ts.map +1 -0
- package/dist/__tests__/lifecycle-logger.test.js +49 -0
- package/dist/__tests__/lifecycle-logger.test.js.map +1 -0
- package/dist/__tests__/local-skill-scan.test.d.ts +2 -0
- package/dist/__tests__/local-skill-scan.test.d.ts.map +1 -0
- package/dist/__tests__/local-skill-scan.test.js +91 -0
- package/dist/__tests__/local-skill-scan.test.js.map +1 -0
- package/dist/__tests__/local-workspace-migration.test.d.ts +2 -0
- package/dist/__tests__/local-workspace-migration.test.d.ts.map +1 -0
- package/dist/__tests__/local-workspace-migration.test.js +195 -0
- package/dist/__tests__/local-workspace-migration.test.js.map +1 -0
- package/dist/__tests__/mcp-inspect-timeout.test.d.ts +2 -0
- package/dist/__tests__/mcp-inspect-timeout.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-inspect-timeout.test.js +97 -0
- package/dist/__tests__/mcp-inspect-timeout.test.js.map +1 -0
- package/dist/__tests__/mcp-readiness.test.d.ts +2 -0
- package/dist/__tests__/mcp-readiness.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-readiness.test.js +267 -0
- package/dist/__tests__/mcp-readiness.test.js.map +1 -0
- package/dist/__tests__/mcp-registration-cli.test.d.ts +2 -0
- package/dist/__tests__/mcp-registration-cli.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-registration-cli.test.js +71 -0
- package/dist/__tests__/mcp-registration-cli.test.js.map +1 -0
- package/dist/__tests__/mcp-registration.test.d.ts +2 -0
- package/dist/__tests__/mcp-registration.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-registration.test.js +426 -0
- package/dist/__tests__/mcp-registration.test.js.map +1 -0
- package/dist/__tests__/model-scan-runner.test.d.ts +2 -0
- package/dist/__tests__/model-scan-runner.test.d.ts.map +1 -0
- package/dist/__tests__/model-scan-runner.test.js +67 -0
- package/dist/__tests__/model-scan-runner.test.js.map +1 -0
- package/dist/__tests__/network-diagnostics.test.d.ts +2 -0
- package/dist/__tests__/network-diagnostics.test.d.ts.map +1 -0
- package/dist/__tests__/network-diagnostics.test.js +26 -0
- package/dist/__tests__/network-diagnostics.test.js.map +1 -0
- package/dist/__tests__/observable-map.test.d.ts +2 -0
- package/dist/__tests__/observable-map.test.d.ts.map +1 -0
- package/dist/__tests__/observable-map.test.js +54 -0
- package/dist/__tests__/observable-map.test.js.map +1 -0
- package/dist/__tests__/provider-auth-preflight.test.d.ts +2 -0
- package/dist/__tests__/provider-auth-preflight.test.d.ts.map +1 -0
- package/dist/__tests__/provider-auth-preflight.test.js +123 -0
- package/dist/__tests__/provider-auth-preflight.test.js.map +1 -0
- package/dist/__tests__/provider-model-discovery.test.d.ts +2 -0
- package/dist/__tests__/provider-model-discovery.test.d.ts.map +1 -0
- package/dist/__tests__/provider-model-discovery.test.js +472 -0
- package/dist/__tests__/provider-model-discovery.test.js.map +1 -0
- package/dist/__tests__/remove-worktrees-if-clean.test.d.ts +2 -0
- package/dist/__tests__/remove-worktrees-if-clean.test.d.ts.map +1 -0
- package/dist/__tests__/remove-worktrees-if-clean.test.js +221 -0
- package/dist/__tests__/remove-worktrees-if-clean.test.js.map +1 -0
- package/dist/__tests__/resume-fallback-env.test.d.ts +2 -0
- package/dist/__tests__/resume-fallback-env.test.d.ts.map +1 -0
- package/dist/__tests__/resume-fallback-env.test.js +28 -0
- package/dist/__tests__/resume-fallback-env.test.js.map +1 -0
- package/dist/__tests__/run-journal.test.d.ts +2 -0
- package/dist/__tests__/run-journal.test.d.ts.map +1 -0
- package/dist/__tests__/run-journal.test.js +121 -0
- package/dist/__tests__/run-journal.test.js.map +1 -0
- package/dist/__tests__/run-start-gate.test.d.ts +2 -0
- package/dist/__tests__/run-start-gate.test.d.ts.map +1 -0
- package/dist/__tests__/run-start-gate.test.js +29 -0
- package/dist/__tests__/run-start-gate.test.js.map +1 -0
- package/dist/__tests__/runtime-capabilities-sync.test.d.ts +2 -0
- package/dist/__tests__/runtime-capabilities-sync.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-capabilities-sync.test.js +66 -0
- package/dist/__tests__/runtime-capabilities-sync.test.js.map +1 -0
- package/dist/__tests__/runtime-config.test.d.ts +2 -0
- package/dist/__tests__/runtime-config.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-config.test.js +102 -0
- package/dist/__tests__/runtime-config.test.js.map +1 -0
- package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts +2 -0
- package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-presenter-heartbeat.test.js +159 -0
- package/dist/__tests__/runtime-presenter-heartbeat.test.js.map +1 -0
- package/dist/__tests__/sandbox-outbox.test.d.ts +2 -0
- package/dist/__tests__/sandbox-outbox.test.d.ts.map +1 -0
- package/dist/__tests__/sandbox-outbox.test.js +214 -0
- package/dist/__tests__/sandbox-outbox.test.js.map +1 -0
- package/dist/__tests__/sandbox-workflow-context.test.d.ts +2 -0
- package/dist/__tests__/sandbox-workflow-context.test.d.ts.map +1 -0
- package/dist/__tests__/sandbox-workflow-context.test.js +396 -0
- package/dist/__tests__/sandbox-workflow-context.test.js.map +1 -0
- package/dist/__tests__/service-manager.test.d.ts +2 -0
- package/dist/__tests__/service-manager.test.d.ts.map +1 -0
- package/dist/__tests__/service-manager.test.js +50 -0
- package/dist/__tests__/service-manager.test.js.map +1 -0
- package/dist/__tests__/sleep-inhibitor.test.d.ts +2 -0
- package/dist/__tests__/sleep-inhibitor.test.d.ts.map +1 -0
- package/dist/__tests__/sleep-inhibitor.test.js +236 -0
- package/dist/__tests__/sleep-inhibitor.test.js.map +1 -0
- package/dist/__tests__/status-local-workspace.test.d.ts +2 -0
- package/dist/__tests__/status-local-workspace.test.d.ts.map +1 -0
- package/dist/__tests__/status-local-workspace.test.js +121 -0
- package/dist/__tests__/status-local-workspace.test.js.map +1 -0
- package/dist/__tests__/suspension-detector.test.d.ts +2 -0
- package/dist/__tests__/suspension-detector.test.d.ts.map +1 -0
- package/dist/__tests__/suspension-detector.test.js +112 -0
- package/dist/__tests__/suspension-detector.test.js.map +1 -0
- package/dist/__tests__/web-presenter-parent-events.test.d.ts +2 -0
- package/dist/__tests__/web-presenter-parent-events.test.d.ts.map +1 -0
- package/dist/__tests__/web-presenter-parent-events.test.js +130 -0
- package/dist/__tests__/web-presenter-parent-events.test.js.map +1 -0
- package/dist/__tests__/workspace-relocation.test.d.ts +2 -0
- package/dist/__tests__/workspace-relocation.test.d.ts.map +1 -0
- package/dist/__tests__/workspace-relocation.test.js +66 -0
- package/dist/__tests__/workspace-relocation.test.js.map +1 -0
- package/dist/__tests__/workspace-run-lease.test.d.ts +2 -0
- package/dist/__tests__/workspace-run-lease.test.d.ts.map +1 -0
- package/dist/__tests__/workspace-run-lease.test.js +230 -0
- package/dist/__tests__/workspace-run-lease.test.js.map +1 -0
- package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts +2 -0
- package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts.map +1 -0
- package/dist/__tests__/ws-client-heartbeat-volatile.test.js +61 -0
- package/dist/__tests__/ws-client-heartbeat-volatile.test.js.map +1 -0
- package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts +2 -0
- package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts.map +1 -0
- package/dist/__tests__/ws-client-heartbeat.integration.test.js +109 -0
- package/dist/__tests__/ws-client-heartbeat.integration.test.js.map +1 -0
- package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts +2 -0
- package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts.map +1 -0
- package/dist/__tests__/ws-client-user-message-ack.integration.test.js +167 -0
- package/dist/__tests__/ws-client-user-message-ack.integration.test.js.map +1 -0
- package/dist/aiden-system-prompt.d.ts +6 -0
- package/dist/aiden-system-prompt.d.ts.map +1 -0
- package/dist/aiden-system-prompt.js +6 -0
- package/dist/aiden-system-prompt.js.map +1 -0
- package/dist/binding-switch-git.d.ts +26 -0
- package/dist/binding-switch-git.d.ts.map +1 -0
- package/dist/binding-switch-git.js +973 -0
- package/dist/binding-switch-git.js.map +1 -0
- package/dist/cli-ensure-install.d.ts +39 -0
- package/dist/cli-ensure-install.d.ts.map +1 -0
- package/dist/cli-ensure-install.js +133 -0
- package/dist/cli-ensure-install.js.map +1 -0
- package/dist/cli-executable.d.ts +97 -0
- package/dist/cli-executable.d.ts.map +1 -0
- package/dist/cli-executable.js +432 -0
- package/dist/cli-executable.js.map +1 -0
- package/dist/cli-help.d.ts +7 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +49 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/computer-readiness.d.ts +42 -0
- package/dist/computer-readiness.d.ts.map +1 -0
- package/dist/computer-readiness.js +191 -0
- package/dist/computer-readiness.js.map +1 -0
- package/dist/core-agent.d.ts +47 -0
- package/dist/core-agent.d.ts.map +1 -0
- package/dist/core-agent.js +364 -0
- package/dist/core-agent.js.map +1 -0
- package/dist/daemon.d.ts +392 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +4711 -0
- package/dist/daemon.js.map +1 -0
- package/dist/event-outbox.d.ts +83 -0
- package/dist/event-outbox.d.ts.map +1 -0
- package/dist/event-outbox.js +440 -0
- package/dist/event-outbox.js.map +1 -0
- package/dist/fake-provider-cli.d.ts +13 -0
- package/dist/fake-provider-cli.d.ts.map +1 -0
- package/dist/fake-provider-cli.js +53 -0
- package/dist/fake-provider-cli.js.map +1 -0
- package/dist/generated-images.d.ts +2 -0
- package/dist/generated-images.d.ts.map +1 -0
- package/dist/generated-images.js +2 -0
- package/dist/generated-images.js.map +1 -0
- package/dist/index.cjs +129 -29
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +209 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle-logger.d.ts +25 -0
- package/dist/lifecycle-logger.d.ts.map +1 -0
- package/dist/lifecycle-logger.js +73 -0
- package/dist/lifecycle-logger.js.map +1 -0
- package/dist/local-skill-scan.d.ts +21 -0
- package/dist/local-skill-scan.d.ts.map +1 -0
- package/dist/local-skill-scan.js +109 -0
- package/dist/local-skill-scan.js.map +1 -0
- package/dist/local-workspace-migration.d.ts +68 -0
- package/dist/local-workspace-migration.d.ts.map +1 -0
- package/dist/local-workspace-migration.js +157 -0
- package/dist/local-workspace-migration.js.map +1 -0
- package/dist/mcp-readiness.d.ts +59 -0
- package/dist/mcp-readiness.d.ts.map +1 -0
- package/dist/mcp-readiness.js +202 -0
- package/dist/mcp-readiness.js.map +1 -0
- package/dist/mcp-registration.d.ts +75 -0
- package/dist/mcp-registration.d.ts.map +1 -0
- package/dist/mcp-registration.js +563 -0
- package/dist/mcp-registration.js.map +1 -0
- package/dist/model-scan-runner.d.ts +15 -0
- package/dist/model-scan-runner.d.ts.map +1 -0
- package/dist/model-scan-runner.js +51 -0
- package/dist/model-scan-runner.js.map +1 -0
- package/dist/network-diagnostics.d.ts +8 -0
- package/dist/network-diagnostics.d.ts.map +1 -0
- package/dist/network-diagnostics.js +56 -0
- package/dist/network-diagnostics.js.map +1 -0
- package/dist/observable-map.d.ts +25 -0
- package/dist/observable-map.d.ts.map +1 -0
- package/dist/observable-map.js +42 -0
- package/dist/observable-map.js.map +1 -0
- package/dist/provider-auth-preflight.d.ts +22 -0
- package/dist/provider-auth-preflight.d.ts.map +1 -0
- package/dist/provider-auth-preflight.js +110 -0
- package/dist/provider-auth-preflight.js.map +1 -0
- package/dist/provider-model-discovery.d.ts +38 -0
- package/dist/provider-model-discovery.d.ts.map +1 -0
- package/dist/provider-model-discovery.js +519 -0
- package/dist/provider-model-discovery.js.map +1 -0
- package/dist/resume-fallback-env.d.ts +20 -0
- package/dist/resume-fallback-env.d.ts.map +1 -0
- package/dist/resume-fallback-env.js +30 -0
- package/dist/resume-fallback-env.js.map +1 -0
- package/dist/run-journal.d.ts +53 -0
- package/dist/run-journal.d.ts.map +1 -0
- package/dist/run-journal.js +193 -0
- package/dist/run-journal.js.map +1 -0
- package/dist/run-start-gate.d.ts +9 -0
- package/dist/run-start-gate.d.ts.map +1 -0
- package/dist/run-start-gate.js +24 -0
- package/dist/run-start-gate.js.map +1 -0
- package/dist/runtime-backends.d.ts +2 -0
- package/dist/runtime-backends.d.ts.map +1 -0
- package/dist/runtime-backends.js +2 -0
- package/dist/runtime-backends.js.map +1 -0
- package/dist/runtime-capabilities-sync.d.ts +33 -0
- package/dist/runtime-capabilities-sync.d.ts.map +1 -0
- package/dist/runtime-capabilities-sync.js +56 -0
- package/dist/runtime-capabilities-sync.js.map +1 -0
- package/dist/runtime-config.d.ts +24 -0
- package/dist/runtime-config.d.ts.map +1 -0
- package/dist/runtime-config.js +124 -0
- package/dist/runtime-config.js.map +1 -0
- package/dist/sandbox-outbox.d.ts +122 -0
- package/dist/sandbox-outbox.d.ts.map +1 -0
- package/dist/sandbox-outbox.js +180 -0
- package/dist/sandbox-outbox.js.map +1 -0
- package/dist/sandbox.d.ts +44 -0
- package/dist/sandbox.d.ts.map +1 -0
- package/dist/sandbox.js +438 -0
- package/dist/sandbox.js.map +1 -0
- package/dist/service-manager.d.ts +28 -0
- package/dist/service-manager.d.ts.map +1 -0
- package/dist/service-manager.js +259 -0
- package/dist/service-manager.js.map +1 -0
- package/dist/sleep-inhibitor.d.ts +111 -0
- package/dist/sleep-inhibitor.d.ts.map +1 -0
- package/dist/sleep-inhibitor.js +412 -0
- package/dist/sleep-inhibitor.js.map +1 -0
- package/dist/suspension-detector.d.ts +48 -0
- package/dist/suspension-detector.d.ts.map +1 -0
- package/dist/suspension-detector.js +89 -0
- package/dist/suspension-detector.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/updater.d.ts +15 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +50 -0
- package/dist/updater.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/web-presenter.d.ts +55 -0
- package/dist/web-presenter.d.ts.map +1 -0
- package/dist/web-presenter.js +265 -0
- package/dist/web-presenter.js.map +1 -0
- package/dist/workspace-relocation.d.ts +22 -0
- package/dist/workspace-relocation.d.ts.map +1 -0
- package/dist/workspace-relocation.js +90 -0
- package/dist/workspace-relocation.js.map +1 -0
- package/dist/workspace-run-lease.d.ts +97 -0
- package/dist/workspace-run-lease.d.ts.map +1 -0
- package/dist/workspace-run-lease.js +241 -0
- package/dist/workspace-run-lease.js.map +1 -0
- package/dist/ws-client.d.ts +194 -0
- package/dist/ws-client.d.ts.map +1 -0
- package/dist/ws-client.js +282 -0
- package/dist/ws-client.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { ObservableMap } from "../observable-map.js";
|
|
3
|
+
function trackedMap() {
|
|
4
|
+
const map = new ObservableMap();
|
|
5
|
+
const sizes = [];
|
|
6
|
+
map.onChange = () => sizes.push(map.size);
|
|
7
|
+
return { map, sizes };
|
|
8
|
+
}
|
|
9
|
+
describe("ObservableMap", () => {
|
|
10
|
+
it("reports adds, deletes and clears with the post-change size", () => {
|
|
11
|
+
const { map, sizes } = trackedMap();
|
|
12
|
+
map.set("a", 1);
|
|
13
|
+
map.set("b", 2);
|
|
14
|
+
map.delete("a");
|
|
15
|
+
map.clear();
|
|
16
|
+
expect(sizes).toEqual([1, 2, 1, 0]);
|
|
17
|
+
});
|
|
18
|
+
it("does not fire when replacing the value of an existing key", () => {
|
|
19
|
+
const { map, sizes } = trackedMap();
|
|
20
|
+
map.set("a", 1);
|
|
21
|
+
map.set("a", 2);
|
|
22
|
+
// Membership is unchanged, so derived state must not churn.
|
|
23
|
+
expect(sizes).toEqual([1]);
|
|
24
|
+
expect(map.get("a")).toBe(2);
|
|
25
|
+
});
|
|
26
|
+
it("does not fire when deleting an absent key or clearing an empty map", () => {
|
|
27
|
+
const { map, sizes } = trackedMap();
|
|
28
|
+
expect(map.delete("missing")).toBe(false);
|
|
29
|
+
map.clear();
|
|
30
|
+
expect(sizes).toEqual([]);
|
|
31
|
+
});
|
|
32
|
+
it("behaves like a Map for reads and iteration", () => {
|
|
33
|
+
const { map } = trackedMap();
|
|
34
|
+
map.set("a", 1);
|
|
35
|
+
map.set("b", 2);
|
|
36
|
+
expect(map).toBeInstanceOf(Map);
|
|
37
|
+
expect(map.size).toBe(2);
|
|
38
|
+
expect(map.has("a")).toBe(true);
|
|
39
|
+
expect([...map.entries()]).toEqual([
|
|
40
|
+
["a", 1],
|
|
41
|
+
["b", 2],
|
|
42
|
+
]);
|
|
43
|
+
expect([...map.values()]).toEqual([1, 2]);
|
|
44
|
+
});
|
|
45
|
+
it("is safe to mutate before onChange is assigned", () => {
|
|
46
|
+
const map = new ObservableMap();
|
|
47
|
+
expect(() => {
|
|
48
|
+
map.set("a", 1);
|
|
49
|
+
map.delete("a");
|
|
50
|
+
map.clear();
|
|
51
|
+
}).not.toThrow();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=observable-map.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable-map.test.js","sourceRoot":"","sources":["../../src/__tests__/observable-map.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-auth-preflight.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/provider-auth-preflight.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
const cliMocks = vi.hoisted(() => ({
|
|
3
|
+
runCliProbeAsync: vi.fn(),
|
|
4
|
+
}));
|
|
5
|
+
vi.mock("../cli-executable.js", async (importOriginal) => {
|
|
6
|
+
const actual = await importOriginal();
|
|
7
|
+
return {
|
|
8
|
+
...actual,
|
|
9
|
+
runCliProbeAsync: cliMocks.runCliProbeAsync,
|
|
10
|
+
};
|
|
11
|
+
});
|
|
12
|
+
import { __resetProviderAuthPreflightCache, invalidateProviderAuthPreflight, looksLikeProviderAuthFailure, preflightProviderAuth, } from "../provider-auth-preflight.js";
|
|
13
|
+
describe("preflightProviderAuth", () => {
|
|
14
|
+
beforeEach(() => {
|
|
15
|
+
__resetProviderAuthPreflightCache();
|
|
16
|
+
vi.clearAllMocks();
|
|
17
|
+
});
|
|
18
|
+
it.each([
|
|
19
|
+
["claude_cli", '{"loggedIn":false}', "Claude Code", "claude auth login"],
|
|
20
|
+
["codex_app_server", "Not logged in", "Codex", "codex login"],
|
|
21
|
+
["cursor_agent_cli", '{"authenticated":false}', "Cursor Agent", "cursor-agent login"],
|
|
22
|
+
])("detects a definitively signed-out %s CLI", async (backendKind, stdout, label, command) => {
|
|
23
|
+
const result = await preflightProviderAuth({
|
|
24
|
+
backendKind,
|
|
25
|
+
executable: "/bin/provider",
|
|
26
|
+
env: {},
|
|
27
|
+
probe: vi.fn().mockResolvedValue({ status: 1, stdout, stderr: "" }),
|
|
28
|
+
});
|
|
29
|
+
expect(result).toEqual({
|
|
30
|
+
status: "auth_required",
|
|
31
|
+
message: expect.stringContaining(`${label} is installed but not signed in`),
|
|
32
|
+
});
|
|
33
|
+
expect(result.message).toContain(command);
|
|
34
|
+
});
|
|
35
|
+
it("passes a successful authenticated status", async () => {
|
|
36
|
+
await expect(preflightProviderAuth({
|
|
37
|
+
backendKind: "claude_cli",
|
|
38
|
+
executable: "/bin/claude",
|
|
39
|
+
env: {},
|
|
40
|
+
probe: vi.fn().mockResolvedValue({
|
|
41
|
+
status: 0,
|
|
42
|
+
stdout: '{"loggedIn":true}',
|
|
43
|
+
stderr: "",
|
|
44
|
+
}),
|
|
45
|
+
})).resolves.toEqual({ status: "ready" });
|
|
46
|
+
});
|
|
47
|
+
it("allows unsupported or inconclusive probes instead of false-blocking a run", async () => {
|
|
48
|
+
await expect(preflightProviderAuth({
|
|
49
|
+
backendKind: "codex_app_server",
|
|
50
|
+
executable: "/bin/codex",
|
|
51
|
+
env: {},
|
|
52
|
+
probe: vi.fn().mockResolvedValue({
|
|
53
|
+
status: 2,
|
|
54
|
+
stdout: "",
|
|
55
|
+
stderr: "unknown command 'status'",
|
|
56
|
+
}),
|
|
57
|
+
})).resolves.toEqual({ status: "unknown" });
|
|
58
|
+
await expect(preflightProviderAuth({
|
|
59
|
+
backendKind: "opencode_cli",
|
|
60
|
+
executable: "/bin/opencode",
|
|
61
|
+
env: {},
|
|
62
|
+
})).resolves.toEqual({ status: "unknown" });
|
|
63
|
+
});
|
|
64
|
+
it("keeps a ready result sticky until invalidated (no TTL)", async () => {
|
|
65
|
+
cliMocks.runCliProbeAsync.mockResolvedValue({
|
|
66
|
+
status: 0,
|
|
67
|
+
stdout: '{"authenticated":true}',
|
|
68
|
+
stderr: "",
|
|
69
|
+
});
|
|
70
|
+
const first = await preflightProviderAuth({
|
|
71
|
+
backendKind: "cursor_agent_cli",
|
|
72
|
+
executable: "/bin/cursor-agent",
|
|
73
|
+
env: {},
|
|
74
|
+
});
|
|
75
|
+
const second = await preflightProviderAuth({
|
|
76
|
+
backendKind: "cursor_agent_cli",
|
|
77
|
+
executable: "/bin/cursor-agent",
|
|
78
|
+
env: {},
|
|
79
|
+
});
|
|
80
|
+
expect(first).toEqual({ status: "ready" });
|
|
81
|
+
expect(second).toEqual(first);
|
|
82
|
+
expect(cliMocks.runCliProbeAsync).toHaveBeenCalledTimes(1);
|
|
83
|
+
invalidateProviderAuthPreflight("cursor_agent_cli", "/bin/cursor-agent");
|
|
84
|
+
await preflightProviderAuth({
|
|
85
|
+
backendKind: "cursor_agent_cli",
|
|
86
|
+
executable: "/bin/cursor-agent",
|
|
87
|
+
env: {},
|
|
88
|
+
});
|
|
89
|
+
expect(cliMocks.runCliProbeAsync).toHaveBeenCalledTimes(2);
|
|
90
|
+
});
|
|
91
|
+
it("does not sticky-cache auth_required so login then retry can succeed", async () => {
|
|
92
|
+
cliMocks.runCliProbeAsync
|
|
93
|
+
.mockResolvedValueOnce({
|
|
94
|
+
status: 1,
|
|
95
|
+
stdout: '{"authenticated":false}',
|
|
96
|
+
stderr: "",
|
|
97
|
+
})
|
|
98
|
+
.mockResolvedValueOnce({
|
|
99
|
+
status: 0,
|
|
100
|
+
stdout: '{"authenticated":true}',
|
|
101
|
+
stderr: "",
|
|
102
|
+
});
|
|
103
|
+
const signedOut = await preflightProviderAuth({
|
|
104
|
+
backendKind: "cursor_agent_cli",
|
|
105
|
+
executable: "/bin/cursor-agent",
|
|
106
|
+
env: {},
|
|
107
|
+
});
|
|
108
|
+
const afterLogin = await preflightProviderAuth({
|
|
109
|
+
backendKind: "cursor_agent_cli",
|
|
110
|
+
executable: "/bin/cursor-agent",
|
|
111
|
+
env: {},
|
|
112
|
+
});
|
|
113
|
+
expect(signedOut.status).toBe("auth_required");
|
|
114
|
+
expect(afterLogin).toEqual({ status: "ready" });
|
|
115
|
+
expect(cliMocks.runCliProbeAsync).toHaveBeenCalledTimes(2);
|
|
116
|
+
});
|
|
117
|
+
it("recognizes mid-run auth failure text for cache invalidation", () => {
|
|
118
|
+
expect(looksLikeProviderAuthFailure("Error: not logged in")).toBe(true);
|
|
119
|
+
expect(looksLikeProviderAuthFailure("authentication required")).toBe(true);
|
|
120
|
+
expect(looksLikeProviderAuthFailure("MCP server timed out")).toBe(false);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
//# sourceMappingURL=provider-auth-preflight.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-auth-preflight.test.js","sourceRoot":"","sources":["../../src/__tests__/provider-auth-preflight.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-model-discovery.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/provider-model-discovery.test.ts"],"names":[],"mappings":""}
|