@av-pi-studio/server 0.0.1
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 +411 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/agent/agent-manager.d.ts +107 -0
- package/dist/agent/agent-manager.d.ts.map +1 -0
- package/dist/agent/agent-manager.js +218 -0
- package/dist/agent/agent-manager.js.map +1 -0
- package/dist/agent/agent-service.d.ts +36 -0
- package/dist/agent/agent-service.d.ts.map +1 -0
- package/dist/agent/agent-service.js +195 -0
- package/dist/agent/agent-service.js.map +1 -0
- package/dist/agent/index.d.ts +17 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +18 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/manifest.d.ts +7 -0
- package/dist/agent/manifest.d.ts.map +1 -0
- package/dist/agent/manifest.js +27 -0
- package/dist/agent/manifest.js.map +1 -0
- package/dist/agent/mcp-server.d.ts +100 -0
- package/dist/agent/mcp-server.d.ts.map +1 -0
- package/dist/agent/mcp-server.js +163 -0
- package/dist/agent/mcp-server.js.map +1 -0
- package/dist/agent/permissions.d.ts +71 -0
- package/dist/agent/permissions.d.ts.map +1 -0
- package/dist/agent/permissions.js +132 -0
- package/dist/agent/permissions.js.map +1 -0
- package/dist/agent/provider-contract.d.ts +134 -0
- package/dist/agent/provider-contract.d.ts.map +1 -0
- package/dist/agent/provider-contract.js +2 -0
- package/dist/agent/provider-contract.js.map +1 -0
- package/dist/agent/provider-registry.d.ts +37 -0
- package/dist/agent/provider-registry.d.ts.map +1 -0
- package/dist/agent/provider-registry.js +92 -0
- package/dist/agent/provider-registry.js.map +1 -0
- package/dist/agent/provider-snapshot.d.ts +52 -0
- package/dist/agent/provider-snapshot.d.ts.map +1 -0
- package/dist/agent/provider-snapshot.js +73 -0
- package/dist/agent/provider-snapshot.js.map +1 -0
- package/dist/agent/providers/mock/mock-provider.d.ts +44 -0
- package/dist/agent/providers/mock/mock-provider.d.ts.map +1 -0
- package/dist/agent/providers/mock/mock-provider.js +162 -0
- package/dist/agent/providers/mock/mock-provider.js.map +1 -0
- package/dist/agent/providers/pi/agent.d.ts +80 -0
- package/dist/agent/providers/pi/agent.d.ts.map +1 -0
- package/dist/agent/providers/pi/agent.js +322 -0
- package/dist/agent/providers/pi/agent.js.map +1 -0
- package/dist/agent/providers/pi/event-mapper.d.ts +17 -0
- package/dist/agent/providers/pi/event-mapper.d.ts.map +1 -0
- package/dist/agent/providers/pi/event-mapper.js +150 -0
- package/dist/agent/providers/pi/event-mapper.js.map +1 -0
- package/dist/agent/providers/pi/rpc-transport.d.ts +53 -0
- package/dist/agent/providers/pi/rpc-transport.d.ts.map +1 -0
- package/dist/agent/providers/pi/rpc-transport.js +190 -0
- package/dist/agent/providers/pi/rpc-transport.js.map +1 -0
- package/dist/agent/providers/pi/session-hydration.d.ts +11 -0
- package/dist/agent/providers/pi/session-hydration.d.ts.map +1 -0
- package/dist/agent/providers/pi/session-hydration.js +167 -0
- package/dist/agent/providers/pi/session-hydration.js.map +1 -0
- package/dist/agent/rewind-rpc.d.ts +15 -0
- package/dist/agent/rewind-rpc.d.ts.map +1 -0
- package/dist/agent/rewind-rpc.js +30 -0
- package/dist/agent/rewind-rpc.js.map +1 -0
- package/dist/agent/session-operations.d.ts +32 -0
- package/dist/agent/session-operations.d.ts.map +1 -0
- package/dist/agent/session-operations.js +130 -0
- package/dist/agent/session-operations.js.map +1 -0
- package/dist/agent/structured-generation.d.ts +39 -0
- package/dist/agent/structured-generation.d.ts.map +1 -0
- package/dist/agent/structured-generation.js +78 -0
- package/dist/agent/structured-generation.js.map +1 -0
- package/dist/agent/timeline-rpc.d.ts +21 -0
- package/dist/agent/timeline-rpc.d.ts.map +1 -0
- package/dist/agent/timeline-rpc.js +59 -0
- package/dist/agent/timeline-rpc.js.map +1 -0
- package/dist/agent/timeline-store.d.ts +100 -0
- package/dist/agent/timeline-store.d.ts.map +1 -0
- package/dist/agent/timeline-store.js +255 -0
- package/dist/agent/timeline-store.js.map +1 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +3 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/password-auth.d.ts +44 -0
- package/dist/auth/password-auth.d.ts.map +1 -0
- package/dist/auth/password-auth.js +78 -0
- package/dist/auth/password-auth.js.map +1 -0
- package/dist/config/daemon-config.d.ts +634 -0
- package/dist/config/daemon-config.d.ts.map +1 -0
- package/dist/config/daemon-config.js +258 -0
- package/dist/config/daemon-config.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +4 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/project-config.d.ts +104 -0
- package/dist/config/project-config.d.ts.map +1 -0
- package/dist/config/project-config.js +106 -0
- package/dist/config/project-config.js.map +1 -0
- package/dist/daemon/bootstrap.d.ts +37 -0
- package/dist/daemon/bootstrap.d.ts.map +1 -0
- package/dist/daemon/bootstrap.js +448 -0
- package/dist/daemon/bootstrap.js.map +1 -0
- package/dist/daemon/dev-bootstrap.d.ts +14 -0
- package/dist/daemon/dev-bootstrap.d.ts.map +1 -0
- package/dist/daemon/dev-bootstrap.js +231 -0
- package/dist/daemon/dev-bootstrap.js.map +1 -0
- package/dist/daemon/dev-main.d.ts +3 -0
- package/dist/daemon/dev-main.d.ts.map +1 -0
- package/dist/daemon/dev-main.js +36 -0
- package/dist/daemon/dev-main.js.map +1 -0
- package/dist/daemon/index.d.ts +15 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +21 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/main.d.ts +3 -0
- package/dist/daemon/main.d.ts.map +1 -0
- package/dist/daemon/main.js +29 -0
- package/dist/daemon/main.js.map +1 -0
- package/dist/daemon/orchestration-rpc.d.ts +19 -0
- package/dist/daemon/orchestration-rpc.d.ts.map +1 -0
- package/dist/daemon/orchestration-rpc.js +136 -0
- package/dist/daemon/orchestration-rpc.js.map +1 -0
- package/dist/files/download-token-store.d.ts +14 -0
- package/dist/files/download-token-store.d.ts.map +1 -0
- package/dist/files/download-token-store.js +33 -0
- package/dist/files/download-token-store.js.map +1 -0
- package/dist/files/file-explorer.d.ts +54 -0
- package/dist/files/file-explorer.d.ts.map +1 -0
- package/dist/files/file-explorer.js +182 -0
- package/dist/files/file-explorer.js.map +1 -0
- package/dist/files/file-transfer.d.ts +30 -0
- package/dist/files/file-transfer.d.ts.map +1 -0
- package/dist/files/file-transfer.js +132 -0
- package/dist/files/file-transfer.js.map +1 -0
- package/dist/files/index.d.ts +4 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +5 -0
- package/dist/files/index.js.map +1 -0
- package/dist/http/host-allowlist.d.ts +15 -0
- package/dist/http/host-allowlist.d.ts.map +1 -0
- package/dist/http/host-allowlist.js +52 -0
- package/dist/http/host-allowlist.js.map +1 -0
- package/dist/http/http-server.d.ts +27 -0
- package/dist/http/http-server.d.ts.map +1 -0
- package/dist/http/http-server.js +76 -0
- package/dist/http/http-server.js.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +4 -0
- package/dist/http/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +2 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.d.ts +48 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +53 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/orchestration/chat-service.d.ts +61 -0
- package/dist/orchestration/chat-service.d.ts.map +1 -0
- package/dist/orchestration/chat-service.js +156 -0
- package/dist/orchestration/chat-service.js.map +1 -0
- package/dist/orchestration/cron.d.ts +30 -0
- package/dist/orchestration/cron.d.ts.map +1 -0
- package/dist/orchestration/cron.js +136 -0
- package/dist/orchestration/cron.js.map +1 -0
- package/dist/orchestration/index.d.ts +5 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +6 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/loop-service.d.ts +129 -0
- package/dist/orchestration/loop-service.d.ts.map +1 -0
- package/dist/orchestration/loop-service.js +234 -0
- package/dist/orchestration/loop-service.js.map +1 -0
- package/dist/orchestration/schedule-service.d.ts +65 -0
- package/dist/orchestration/schedule-service.d.ts.map +1 -0
- package/dist/orchestration/schedule-service.js +201 -0
- package/dist/orchestration/schedule-service.js.map +1 -0
- package/dist/persistence/atomic-store.d.ts +45 -0
- package/dist/persistence/atomic-store.d.ts.map +1 -0
- package/dist/persistence/atomic-store.js +92 -0
- package/dist/persistence/atomic-store.js.map +1 -0
- package/dist/persistence/entity-schemas.d.ts +1707 -0
- package/dist/persistence/entity-schemas.d.ts.map +1 -0
- package/dist/persistence/entity-schemas.js +250 -0
- package/dist/persistence/entity-schemas.js.map +1 -0
- package/dist/persistence/entity-stores.d.ts +46 -0
- package/dist/persistence/entity-stores.d.ts.map +1 -0
- package/dist/persistence/entity-stores.js +167 -0
- package/dist/persistence/entity-stores.js.map +1 -0
- package/dist/persistence/index.d.ts +4 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +5 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/projects/checkout-diff-manager.d.ts +44 -0
- package/dist/projects/checkout-diff-manager.d.ts.map +1 -0
- package/dist/projects/checkout-diff-manager.js +82 -0
- package/dist/projects/checkout-diff-manager.js.map +1 -0
- package/dist/projects/git-checkout-rpc.d.ts +18 -0
- package/dist/projects/git-checkout-rpc.d.ts.map +1 -0
- package/dist/projects/git-checkout-rpc.js +57 -0
- package/dist/projects/git-checkout-rpc.js.map +1 -0
- package/dist/projects/git-detect.d.ts +21 -0
- package/dist/projects/git-detect.d.ts.map +1 -0
- package/dist/projects/git-detect.js +34 -0
- package/dist/projects/git-detect.js.map +1 -0
- package/dist/projects/git-operations.d.ts +67 -0
- package/dist/projects/git-operations.d.ts.map +1 -0
- package/dist/projects/git-operations.js +200 -0
- package/dist/projects/git-operations.js.map +1 -0
- package/dist/projects/github-service.d.ts +80 -0
- package/dist/projects/github-service.d.ts.map +1 -0
- package/dist/projects/github-service.js +172 -0
- package/dist/projects/github-service.js.map +1 -0
- package/dist/projects/index.d.ts +13 -0
- package/dist/projects/index.d.ts.map +1 -0
- package/dist/projects/index.js +19 -0
- package/dist/projects/index.js.map +1 -0
- package/dist/projects/open-project.d.ts +35 -0
- package/dist/projects/open-project.d.ts.map +1 -0
- package/dist/projects/open-project.js +106 -0
- package/dist/projects/open-project.js.map +1 -0
- package/dist/projects/reconciliation.d.ts +15 -0
- package/dist/projects/reconciliation.d.ts.map +1 -0
- package/dist/projects/reconciliation.js +63 -0
- package/dist/projects/reconciliation.js.map +1 -0
- package/dist/projects/status-projection.d.ts +33 -0
- package/dist/projects/status-projection.d.ts.map +1 -0
- package/dist/projects/status-projection.js +98 -0
- package/dist/projects/status-projection.js.map +1 -0
- package/dist/projects/workspace-activity.d.ts +28 -0
- package/dist/projects/workspace-activity.d.ts.map +1 -0
- package/dist/projects/workspace-activity.js +74 -0
- package/dist/projects/workspace-activity.js.map +1 -0
- package/dist/projects/workspace-git-service.d.ts +27 -0
- package/dist/projects/workspace-git-service.d.ts.map +1 -0
- package/dist/projects/workspace-git-service.js +60 -0
- package/dist/projects/workspace-git-service.js.map +1 -0
- package/dist/projects/workspace-registry.d.ts +59 -0
- package/dist/projects/workspace-registry.d.ts.map +1 -0
- package/dist/projects/workspace-registry.js +149 -0
- package/dist/projects/workspace-registry.js.map +1 -0
- package/dist/projects/worktree-service.d.ts +100 -0
- package/dist/projects/worktree-service.d.ts.map +1 -0
- package/dist/projects/worktree-service.js +216 -0
- package/dist/projects/worktree-service.js.map +1 -0
- package/dist/proxy/index.d.ts +4 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +5 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/service-hostname.d.ts +21 -0
- package/dist/proxy/service-hostname.d.ts.map +1 -0
- package/dist/proxy/service-hostname.js +44 -0
- package/dist/proxy/service-hostname.js.map +1 -0
- package/dist/proxy/service-port-registry.d.ts +36 -0
- package/dist/proxy/service-port-registry.d.ts.map +1 -0
- package/dist/proxy/service-port-registry.js +55 -0
- package/dist/proxy/service-port-registry.js.map +1 -0
- package/dist/proxy/service-proxy.d.ts +34 -0
- package/dist/proxy/service-proxy.d.ts.map +1 -0
- package/dist/proxy/service-proxy.js +54 -0
- package/dist/proxy/service-proxy.js.map +1 -0
- package/dist/terminal/index.d.ts +4 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +5 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/pty-backend.d.ts +44 -0
- package/dist/terminal/pty-backend.d.ts.map +1 -0
- package/dist/terminal/pty-backend.js +119 -0
- package/dist/terminal/pty-backend.js.map +1 -0
- package/dist/terminal/screen-buffer.d.ts +21 -0
- package/dist/terminal/screen-buffer.d.ts.map +1 -0
- package/dist/terminal/screen-buffer.js +55 -0
- package/dist/terminal/screen-buffer.js.map +1 -0
- package/dist/terminal/terminal-manager.d.ts +79 -0
- package/dist/terminal/terminal-manager.d.ts.map +1 -0
- package/dist/terminal/terminal-manager.js +174 -0
- package/dist/terminal/terminal-manager.js.map +1 -0
- package/dist/terminal/terminal-rpc.d.ts +20 -0
- package/dist/terminal/terminal-rpc.d.ts.map +1 -0
- package/dist/terminal/terminal-rpc.js +122 -0
- package/dist/terminal/terminal-rpc.js.map +1 -0
- package/dist/util/concurrency.d.ts +16 -0
- package/dist/util/concurrency.d.ts.map +1 -0
- package/dist/util/concurrency.js +23 -0
- package/dist/util/concurrency.js.map +1 -0
- package/dist/util/index.d.ts +2 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +2 -0
- package/dist/util/index.js.map +1 -0
- package/dist/ws/capability-store.d.ts +11 -0
- package/dist/ws/capability-store.d.ts.map +1 -0
- package/dist/ws/capability-store.js +10 -0
- package/dist/ws/capability-store.js.map +1 -0
- package/dist/ws/index.d.ts +5 -0
- package/dist/ws/index.d.ts.map +1 -0
- package/dist/ws/index.js +6 -0
- package/dist/ws/index.js.map +1 -0
- package/dist/ws/router.d.ts +34 -0
- package/dist/ws/router.d.ts.map +1 -0
- package/dist/ws/router.js +97 -0
- package/dist/ws/router.js.map +1 -0
- package/dist/ws/session.d.ts +28 -0
- package/dist/ws/session.d.ts.map +1 -0
- package/dist/ws/session.js +36 -0
- package/dist/ws/session.js.map +1 -0
- package/dist/ws/ws-server.d.ts +41 -0
- package/dist/ws/ws-server.d.ts.map +1 -0
- package/dist/ws/ws-server.js +104 -0
- package/dist/ws/ws-server.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { AgentCapabilityFlags, AgentSessionConfig, AgentStreamEvent, ImageAttachment } from "@av-pi-studio/protocol";
|
|
2
|
+
import type { AgentFeature } from "../persistence/entity-schemas.js";
|
|
3
|
+
import type { TimelineRow } from "./timeline-store.js";
|
|
4
|
+
/**
|
|
5
|
+
* Provider-neutral agent contracts (features/agent-providers.md § AgentClient / § AgentSession /
|
|
6
|
+
* § Capability flags). The rest of the daemon depends only on these interfaces, never on a concrete
|
|
7
|
+
* provider (`pi`, `mock`), so providers stay swappable.
|
|
8
|
+
*/
|
|
9
|
+
export type Unsubscribe = () => void;
|
|
10
|
+
/** Resume / persistence handle for a provider-native session. */
|
|
11
|
+
export interface PersistenceHandle {
|
|
12
|
+
provider: string;
|
|
13
|
+
sessionId?: string;
|
|
14
|
+
/** Provider-opaque resume token (e.g. the Pi JSONL session file path). */
|
|
15
|
+
nativeHandle?: unknown;
|
|
16
|
+
metadata?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface AgentModelDefinition {
|
|
19
|
+
id: string;
|
|
20
|
+
label?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface AgentModeDefinition {
|
|
24
|
+
id: string;
|
|
25
|
+
label?: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface AgentCommandDefinition {
|
|
29
|
+
id: string;
|
|
30
|
+
label?: string;
|
|
31
|
+
description?: string;
|
|
32
|
+
}
|
|
33
|
+
/** Runtime info echoed from a live session. */
|
|
34
|
+
export interface ProviderRuntimeInfo {
|
|
35
|
+
provider: string;
|
|
36
|
+
sessionId?: string;
|
|
37
|
+
model?: string;
|
|
38
|
+
thinkingOptionId?: string;
|
|
39
|
+
modeId?: string;
|
|
40
|
+
extra?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
export interface PendingPermission {
|
|
43
|
+
requestId: string;
|
|
44
|
+
toolName?: string;
|
|
45
|
+
detail?: unknown;
|
|
46
|
+
}
|
|
47
|
+
/** Context passed when launching/resuming a session (cwd, env, logger, …). */
|
|
48
|
+
export interface LaunchContext {
|
|
49
|
+
cwd?: string;
|
|
50
|
+
env?: Record<string, string>;
|
|
51
|
+
logger?: Pick<Console, "info" | "warn" | "error">;
|
|
52
|
+
}
|
|
53
|
+
export interface RunOptions {
|
|
54
|
+
images?: ImageAttachment[];
|
|
55
|
+
attachments?: unknown;
|
|
56
|
+
clientMessageId?: string;
|
|
57
|
+
outputSchema?: Record<string, unknown>;
|
|
58
|
+
}
|
|
59
|
+
export type StartTurnOptions = RunOptions;
|
|
60
|
+
export interface CreateSessionOptions {
|
|
61
|
+
env?: Record<string, string>;
|
|
62
|
+
}
|
|
63
|
+
/** A row in the importable-session picker (no full transcript). */
|
|
64
|
+
export interface ImportableSessionRow {
|
|
65
|
+
providerHandleId: string;
|
|
66
|
+
cwd: string;
|
|
67
|
+
title?: string;
|
|
68
|
+
promptPreview?: string;
|
|
69
|
+
lastActivityAt?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface ImportSessionArgs {
|
|
72
|
+
providerHandleId: string;
|
|
73
|
+
cwd: string;
|
|
74
|
+
}
|
|
75
|
+
export interface ImportSessionResult {
|
|
76
|
+
session: AgentSession;
|
|
77
|
+
persistence: PersistenceHandle;
|
|
78
|
+
timeline: AgentStreamEvent[];
|
|
79
|
+
}
|
|
80
|
+
/** One running instance of an agent: one provider, one model, one cwd, one timeline. */
|
|
81
|
+
export interface AgentSession {
|
|
82
|
+
readonly provider: string;
|
|
83
|
+
readonly id: string;
|
|
84
|
+
readonly capabilities: AgentCapabilityFlags;
|
|
85
|
+
readonly features?: AgentFeature[];
|
|
86
|
+
run(prompt: string, opts?: RunOptions): Promise<void>;
|
|
87
|
+
startTurn(prompt: string, opts?: StartTurnOptions): Promise<{
|
|
88
|
+
turnId: string;
|
|
89
|
+
}>;
|
|
90
|
+
subscribe(cb: (event: AgentStreamEvent) => void): Unsubscribe;
|
|
91
|
+
streamHistory(): AsyncGenerator<AgentStreamEvent>;
|
|
92
|
+
getRuntimeInfo(): ProviderRuntimeInfo;
|
|
93
|
+
getAvailableModes(): AgentModeDefinition[];
|
|
94
|
+
getCurrentMode(): string | null;
|
|
95
|
+
setMode(id: string): Promise<void>;
|
|
96
|
+
getPendingPermissions(): PendingPermission[];
|
|
97
|
+
respondToPermission(requestId: string, response: unknown): Promise<void>;
|
|
98
|
+
describePersistence(): PersistenceHandle | null;
|
|
99
|
+
interrupt(): Promise<void>;
|
|
100
|
+
close(): Promise<void>;
|
|
101
|
+
listCommands?(): Promise<AgentCommandDefinition[]>;
|
|
102
|
+
setModel?(id: string): Promise<void>;
|
|
103
|
+
setThinkingOption?(id: string): Promise<void>;
|
|
104
|
+
setFeature?(id: string, value: unknown): Promise<void>;
|
|
105
|
+
tryHandleOutOfBand?(message: unknown): boolean;
|
|
106
|
+
}
|
|
107
|
+
/** A provider client: creates/resumes sessions and exposes discovery. */
|
|
108
|
+
export interface AgentClient {
|
|
109
|
+
readonly provider: string;
|
|
110
|
+
readonly capabilities: AgentCapabilityFlags;
|
|
111
|
+
createSession(config: AgentSessionConfig, launchContext?: LaunchContext, options?: CreateSessionOptions): Promise<AgentSession>;
|
|
112
|
+
resumeSession(handle: PersistenceHandle, overrides?: Partial<AgentSessionConfig>, launchContext?: LaunchContext): Promise<AgentSession>;
|
|
113
|
+
listModels(opts?: {
|
|
114
|
+
cwd?: string;
|
|
115
|
+
}): Promise<AgentModelDefinition[]>;
|
|
116
|
+
isAvailable(): Promise<boolean> | boolean;
|
|
117
|
+
listModes?(opts?: {
|
|
118
|
+
cwd?: string;
|
|
119
|
+
}): Promise<AgentModeDefinition[]>;
|
|
120
|
+
listImportableSessions?(opts?: {
|
|
121
|
+
cwd?: string;
|
|
122
|
+
}): Promise<ImportableSessionRow[]>;
|
|
123
|
+
importSession?(args: ImportSessionArgs): Promise<ImportSessionResult>;
|
|
124
|
+
getDiagnostic?(): Promise<unknown>;
|
|
125
|
+
/**
|
|
126
|
+
* Rebuild a full timeline from a provider-native resume handle, without spawning a live
|
|
127
|
+
* session. Used when the daemon's in-memory `AgentTimelineStore` is empty (e.g. after a
|
|
128
|
+
* restart) but the agent record still carries a `persistence` handle — the `pi` provider
|
|
129
|
+
* implements this by reading its own on-disk JSONL session file
|
|
130
|
+
* (`session-hydration.ts`). Providers without durable native history omit this.
|
|
131
|
+
*/
|
|
132
|
+
hydrateTimeline?(handle: PersistenceHandle): TimelineRow[];
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=provider-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-contract.d.ts","sourceRoot":"","sources":["../../src/agent/provider-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-contract.js","sourceRoot":"","sources":["../../src/agent/provider-contract.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ProviderDefinition } from "@av-pi-studio/protocol";
|
|
2
|
+
import type { PersistedConfig } from "../config/daemon-config.js";
|
|
3
|
+
import type { AgentClient } from "./provider-contract.js";
|
|
4
|
+
import type { PiTransportFactory } from "./providers/pi/rpc-transport.js";
|
|
5
|
+
/**
|
|
6
|
+
* Provider client-factory registry + custom Pi-compatible profile resolution
|
|
7
|
+
* (features/agent-providers.md § Registration surface / § Custom Pi-compatible profiles;
|
|
8
|
+
* config.md § Provider override).
|
|
9
|
+
*/
|
|
10
|
+
export interface ProviderClientDeps {
|
|
11
|
+
logger?: Pick<Console, "info" | "warn" | "error">;
|
|
12
|
+
/** Injected for tests. */
|
|
13
|
+
transportFactory?: PiTransportFactory;
|
|
14
|
+
binaryResolver?: (bin: string, env?: Record<string, string | undefined>) => boolean;
|
|
15
|
+
}
|
|
16
|
+
export type ProviderClientFactory = (deps?: ProviderClientDeps) => AgentClient;
|
|
17
|
+
/** Built-in provider factories, invoked with `(logger, runtimeSettings, options)`-style deps. */
|
|
18
|
+
export declare const PROVIDER_CLIENT_FACTORIES: Record<string, ProviderClientFactory>;
|
|
19
|
+
/**
|
|
20
|
+
* Resolve a usable `AgentClient` for `providerId`. Built-ins use their factory; an override of `pi`
|
|
21
|
+
* applies its settings; a custom `extends:"pi"` profile launches via its own `command` and locates
|
|
22
|
+
* imports via `params.sessionDir`. Building a client does **not** spawn Pi.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveProviderClient(providerId: string, config: PersistedConfig, deps?: ProviderClientDeps): AgentClient;
|
|
25
|
+
/**
|
|
26
|
+
* Holds visible provider metadata (manifest + config overrides). Replacing metadata updates
|
|
27
|
+
* label/description/enabled/default-mode only — it must **never** spawn the Pi process.
|
|
28
|
+
*/
|
|
29
|
+
export declare class ProviderRegistry {
|
|
30
|
+
private metadata;
|
|
31
|
+
constructor(manifest?: Record<string, ProviderDefinition>);
|
|
32
|
+
getMetadata(providerId: string): ProviderDefinition | undefined;
|
|
33
|
+
listMetadata(): ProviderDefinition[];
|
|
34
|
+
/** Merge config provider overrides into visible metadata. Does not construct/launch any client. */
|
|
35
|
+
replaceMetadata(config: PersistedConfig): void;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=provider-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../src/agent/provider-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,4BAA4B,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,wBAAwB,CAAC;AAIhF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAE1E;;;;GAIG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAClD,0BAA0B;IAC1B,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;IACtC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC;CACrF;AAED,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,CAAC,EAAE,kBAAkB,KAAK,WAAW,CAAC;AAE/E,iGAAiG;AACjG,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAO3E,CAAC;AAqCF;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,eAAe,EACvB,IAAI,CAAC,EAAE,kBAAkB,GACxB,WAAW,CAWb;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAqC;gBAEzC,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAqB;IAI5E,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI/D,YAAY,IAAI,kBAAkB,EAAE;IAIpC,mGAAmG;IACnG,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;CAe/C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { PROVIDER_MANIFEST } from "./manifest.js";
|
|
2
|
+
import { MockAgentClient } from "./providers/mock/mock-provider.js";
|
|
3
|
+
import { PiAgentClient } from "./providers/pi/agent.js";
|
|
4
|
+
/** Built-in provider factories, invoked with `(logger, runtimeSettings, options)`-style deps. */
|
|
5
|
+
export const PROVIDER_CLIENT_FACTORIES = {
|
|
6
|
+
pi: (deps) => new PiAgentClient({
|
|
7
|
+
transportFactory: deps?.transportFactory,
|
|
8
|
+
binaryResolver: deps?.binaryResolver,
|
|
9
|
+
}),
|
|
10
|
+
mock: () => new MockAgentClient(),
|
|
11
|
+
};
|
|
12
|
+
/** Wrap `listModels` so a custom profile's `models` replaces and `additionalModels` merge/relabel. */
|
|
13
|
+
function applyModelOverrides(client, override) {
|
|
14
|
+
if (!override.models && !override.additionalModels)
|
|
15
|
+
return client;
|
|
16
|
+
const baseList = override.models;
|
|
17
|
+
const additional = override.additionalModels ?? [];
|
|
18
|
+
const original = client.listModels.bind(client);
|
|
19
|
+
client.listModels = async (opts) => {
|
|
20
|
+
const base = baseList ?? (await original(opts));
|
|
21
|
+
const byId = new Map(base.map((m) => [m.id, m]));
|
|
22
|
+
for (const model of additional)
|
|
23
|
+
byId.set(model.id, { ...byId.get(model.id), ...model });
|
|
24
|
+
return [...byId.values()];
|
|
25
|
+
};
|
|
26
|
+
return client;
|
|
27
|
+
}
|
|
28
|
+
function buildPiClient(providerId, override, deps) {
|
|
29
|
+
const client = new PiAgentClient({
|
|
30
|
+
provider: providerId,
|
|
31
|
+
command: override?.command,
|
|
32
|
+
env: override?.env,
|
|
33
|
+
sessionDir: override?.params && typeof override.params.sessionDir === "string"
|
|
34
|
+
? override.params.sessionDir
|
|
35
|
+
: undefined,
|
|
36
|
+
transportFactory: deps?.transportFactory,
|
|
37
|
+
binaryResolver: deps?.binaryResolver,
|
|
38
|
+
});
|
|
39
|
+
return override ? applyModelOverrides(client, override) : client;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Resolve a usable `AgentClient` for `providerId`. Built-ins use their factory; an override of `pi`
|
|
43
|
+
* applies its settings; a custom `extends:"pi"` profile launches via its own `command` and locates
|
|
44
|
+
* imports via `params.sessionDir`. Building a client does **not** spawn Pi.
|
|
45
|
+
*/
|
|
46
|
+
export function resolveProviderClient(providerId, config, deps) {
|
|
47
|
+
const override = config.agents.providers[providerId];
|
|
48
|
+
if (providerId === "pi")
|
|
49
|
+
return buildPiClient("pi", override, deps);
|
|
50
|
+
if (providerId === "mock")
|
|
51
|
+
return new MockAgentClient();
|
|
52
|
+
if (override?.extends === "pi")
|
|
53
|
+
return buildPiClient(providerId, override, deps);
|
|
54
|
+
const factory = PROVIDER_CLIENT_FACTORIES[providerId];
|
|
55
|
+
if (factory)
|
|
56
|
+
return factory(deps);
|
|
57
|
+
throw new Error(`unknown provider: ${providerId}`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Holds visible provider metadata (manifest + config overrides). Replacing metadata updates
|
|
61
|
+
* label/description/enabled/default-mode only — it must **never** spawn the Pi process.
|
|
62
|
+
*/
|
|
63
|
+
export class ProviderRegistry {
|
|
64
|
+
metadata;
|
|
65
|
+
constructor(manifest = PROVIDER_MANIFEST) {
|
|
66
|
+
this.metadata = { ...manifest };
|
|
67
|
+
}
|
|
68
|
+
getMetadata(providerId) {
|
|
69
|
+
return this.metadata[providerId];
|
|
70
|
+
}
|
|
71
|
+
listMetadata() {
|
|
72
|
+
return Object.values(this.metadata);
|
|
73
|
+
}
|
|
74
|
+
/** Merge config provider overrides into visible metadata. Does not construct/launch any client. */
|
|
75
|
+
replaceMetadata(config) {
|
|
76
|
+
for (const [id, override] of Object.entries(config.agents.providers)) {
|
|
77
|
+
const base = this.metadata[id] ?? this.metadata.pi;
|
|
78
|
+
const capabilities = base?.capabilities ?? this.metadata.pi?.capabilities;
|
|
79
|
+
if (!capabilities)
|
|
80
|
+
continue;
|
|
81
|
+
this.metadata[id] = {
|
|
82
|
+
...base,
|
|
83
|
+
id,
|
|
84
|
+
label: override.label ?? base?.label ?? id,
|
|
85
|
+
description: override.description ?? base?.description,
|
|
86
|
+
capabilities,
|
|
87
|
+
modes: base?.modes ?? [],
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=provider-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/agent/provider-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { AgentModeDefinition, AgentModelDefinition } from "./provider-contract.js";
|
|
2
|
+
/**
|
|
3
|
+
* Per-cwd provider snapshot cache (features/agent-providers.md § Provider snapshot refresh contract).
|
|
4
|
+
*
|
|
5
|
+
* Hard correctness/perf contract: a snapshot probes only while **cold**; once warm
|
|
6
|
+
* (`ready`/`error`/`unavailable`) it stays cached until an **explicit refresh** — no TTL, focus,
|
|
7
|
+
* selector-open, or config-reload revalidation. **Settings refresh** clears all cwd-scope caches +
|
|
8
|
+
* in-flight loads, then refreshes only the home snapshot with `force:true`; workspace snapshots
|
|
9
|
+
* re-probe lazily.
|
|
10
|
+
*/
|
|
11
|
+
export type SnapshotStatus = "cold" | "loading" | "ready" | "error" | "unavailable";
|
|
12
|
+
export interface ProviderSnapshotData {
|
|
13
|
+
available: boolean;
|
|
14
|
+
models: AgentModelDefinition[];
|
|
15
|
+
modes: AgentModeDefinition[];
|
|
16
|
+
}
|
|
17
|
+
export interface ProviderSnapshot {
|
|
18
|
+
cwd: string;
|
|
19
|
+
status: SnapshotStatus;
|
|
20
|
+
data?: ProviderSnapshotData;
|
|
21
|
+
error?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface SnapshotManagerDeps {
|
|
24
|
+
/** Resolved home directory; blank cwd resolves here. */
|
|
25
|
+
homeDir: string;
|
|
26
|
+
/** Probe a cwd (this is where Pi would be spawned). Throws → `error`; `available:false` → `unavailable`. */
|
|
27
|
+
probe: (cwd: string) => Promise<ProviderSnapshotData>;
|
|
28
|
+
}
|
|
29
|
+
export declare class ProviderSnapshotManager {
|
|
30
|
+
private readonly deps;
|
|
31
|
+
private readonly cache;
|
|
32
|
+
private readonly inflight;
|
|
33
|
+
constructor(deps: SnapshotManagerDeps);
|
|
34
|
+
/** Resolve a cwd; blank/empty → home. */
|
|
35
|
+
resolveCwd(cwd?: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Get the snapshot for `cwd`. Returns the cached warm snapshot without re-probing; probes only
|
|
38
|
+
* when cold (or `force:true`). Concurrent cold reads share one probe.
|
|
39
|
+
*/
|
|
40
|
+
get(cwd?: string, opts?: {
|
|
41
|
+
force?: boolean;
|
|
42
|
+
}): Promise<ProviderSnapshot>;
|
|
43
|
+
/** The current cached snapshot (if any) without triggering a probe. */
|
|
44
|
+
peek(cwd?: string): ProviderSnapshot | undefined;
|
|
45
|
+
private probeInto;
|
|
46
|
+
/**
|
|
47
|
+
* Settings refresh: clear every cwd-scope cache + in-flight load, then immediately re-probe only
|
|
48
|
+
* the home snapshot with `force:true`. Workspace snapshots re-probe lazily on next `get`.
|
|
49
|
+
*/
|
|
50
|
+
refreshSettings(): Promise<ProviderSnapshot>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=provider-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-snapshot.d.ts","sourceRoot":"","sources":["../../src/agent/provider-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAExF;;;;;;;;GAQG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,aAAa,CAAC;AAEpF,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,4GAA4G;IAC5G,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACvD;AAED,qBAAa,uBAAuB;IAItB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgD;gBAE5C,IAAI,EAAE,mBAAmB;IAEtD,yCAAyC;IACzC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM;IAIhC;;;OAGG;IACH,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkBxE,uEAAuE;IACvE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;YAIlC,SAAS;IAuBvB;;;OAGG;IACH,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC;CAK7C"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const WARM = new Set(["ready", "error", "unavailable"]);
|
|
2
|
+
export class ProviderSnapshotManager {
|
|
3
|
+
deps;
|
|
4
|
+
cache = new Map();
|
|
5
|
+
inflight = new Map();
|
|
6
|
+
constructor(deps) {
|
|
7
|
+
this.deps = deps;
|
|
8
|
+
}
|
|
9
|
+
/** Resolve a cwd; blank/empty → home. */
|
|
10
|
+
resolveCwd(cwd) {
|
|
11
|
+
return cwd && cwd.trim().length > 0 ? cwd : this.deps.homeDir;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get the snapshot for `cwd`. Returns the cached warm snapshot without re-probing; probes only
|
|
15
|
+
* when cold (or `force:true`). Concurrent cold reads share one probe.
|
|
16
|
+
*/
|
|
17
|
+
get(cwd, opts) {
|
|
18
|
+
const key = this.resolveCwd(cwd);
|
|
19
|
+
if (opts?.force) {
|
|
20
|
+
this.cache.delete(key);
|
|
21
|
+
this.inflight.delete(key);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
const cached = this.cache.get(key);
|
|
25
|
+
if (cached && WARM.has(cached.status))
|
|
26
|
+
return Promise.resolve(cached);
|
|
27
|
+
const loading = this.inflight.get(key);
|
|
28
|
+
if (loading)
|
|
29
|
+
return loading;
|
|
30
|
+
}
|
|
31
|
+
const probe = this.probeInto(key);
|
|
32
|
+
this.inflight.set(key, probe);
|
|
33
|
+
return probe;
|
|
34
|
+
}
|
|
35
|
+
/** The current cached snapshot (if any) without triggering a probe. */
|
|
36
|
+
peek(cwd) {
|
|
37
|
+
return this.cache.get(this.resolveCwd(cwd));
|
|
38
|
+
}
|
|
39
|
+
async probeInto(key) {
|
|
40
|
+
try {
|
|
41
|
+
const data = await this.deps.probe(key);
|
|
42
|
+
const snapshot = {
|
|
43
|
+
cwd: key,
|
|
44
|
+
status: data.available ? "ready" : "unavailable",
|
|
45
|
+
data,
|
|
46
|
+
};
|
|
47
|
+
this.cache.set(key, snapshot);
|
|
48
|
+
return snapshot;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const snapshot = {
|
|
52
|
+
cwd: key,
|
|
53
|
+
status: "error",
|
|
54
|
+
error: error?.message ?? String(error),
|
|
55
|
+
};
|
|
56
|
+
this.cache.set(key, snapshot);
|
|
57
|
+
return snapshot;
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
this.inflight.delete(key);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Settings refresh: clear every cwd-scope cache + in-flight load, then immediately re-probe only
|
|
65
|
+
* the home snapshot with `force:true`. Workspace snapshots re-probe lazily on next `get`.
|
|
66
|
+
*/
|
|
67
|
+
refreshSettings() {
|
|
68
|
+
this.cache.clear();
|
|
69
|
+
this.inflight.clear();
|
|
70
|
+
return this.get(this.deps.homeDir, { force: true });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=provider-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-snapshot.js","sourceRoot":"","sources":["../../src/agent/provider-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { AgentCapabilityFlags, AgentSessionConfig } from "@av-pi-studio/protocol";
|
|
2
|
+
import type { AgentClient, AgentModeDefinition, AgentModelDefinition, AgentSession, CreateSessionOptions, LaunchContext, PersistenceHandle } from "../../provider-contract.js";
|
|
3
|
+
/**
|
|
4
|
+
* In-process `mock` provider (features/agent-providers.md § Provider entry — dev/test only). It
|
|
5
|
+
* implements the `AgentClient`/`AgentSession` contracts in memory and emits a scripted turn. Never
|
|
6
|
+
* user-selectable in production paths.
|
|
7
|
+
*/
|
|
8
|
+
export declare const MOCK_CAPABILITIES: AgentCapabilityFlags;
|
|
9
|
+
export interface MockSessionOptions {
|
|
10
|
+
/** Delay before a started turn completes (ms). Small but non-zero so `interrupt` can win. */
|
|
11
|
+
turnDelayMs?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class MockAgentClient implements AgentClient {
|
|
14
|
+
private readonly options;
|
|
15
|
+
readonly provider = "mock";
|
|
16
|
+
readonly capabilities: import("zod").objectOutputType<{
|
|
17
|
+
supportsStreaming: import("zod").ZodBoolean;
|
|
18
|
+
supportsSessionPersistence: import("zod").ZodBoolean;
|
|
19
|
+
supportsDynamicModes: import("zod").ZodBoolean;
|
|
20
|
+
supportsMcpServers: import("zod").ZodBoolean;
|
|
21
|
+
supportsReasoningStream: import("zod").ZodBoolean;
|
|
22
|
+
supportsToolInvocations: import("zod").ZodBoolean;
|
|
23
|
+
supportsRewindConversation: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
24
|
+
supportsRewindFiles: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
25
|
+
supportsRewindBoth: import("zod").ZodOptional<import("zod").ZodBoolean>;
|
|
26
|
+
}, import("zod").ZodTypeAny, "passthrough">;
|
|
27
|
+
constructor(options?: MockSessionOptions);
|
|
28
|
+
createSession(config: AgentSessionConfig, _launchContext?: LaunchContext, _options?: CreateSessionOptions): Promise<AgentSession>;
|
|
29
|
+
resumeSession(_handle: PersistenceHandle): Promise<AgentSession>;
|
|
30
|
+
listModels(): Promise<AgentModelDefinition[]>;
|
|
31
|
+
listModes(): Promise<AgentModeDefinition[]>;
|
|
32
|
+
isAvailable(): boolean;
|
|
33
|
+
importSession(args: {
|
|
34
|
+
providerHandleId: string;
|
|
35
|
+
cwd: string;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
session: import("../../provider-contract.js").AgentSession;
|
|
38
|
+
persistence: import("../../provider-contract.js").PersistenceHandle;
|
|
39
|
+
timeline: import("@av-pi-studio/protocol").AgentStreamEvent[];
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
/** Factory matching the provider-registry signature `(logger, runtimeSettings, options)`. */
|
|
43
|
+
export declare function createMockClient(): MockAgentClient;
|
|
44
|
+
//# sourceMappingURL=mock-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-provider.d.ts","sourceRoot":"","sources":["../../../../src/agent/providers/mock/mock-provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAEnB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,aAAa,EAEb,iBAAiB,EAGlB,MAAM,4BAA4B,CAAC;AAEpC;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB,EAAE,oBAO/B,CAAC;AAOF,MAAM,WAAW,kBAAkB;IACjC,6FAA6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAgID,qBAAa,eAAgB,YAAW,WAAW;IAIrC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,QAAQ,CAAC,QAAQ,UAAU;IAC3B,QAAQ,CAAC,YAAY;;;;;;;;;;gDAAqB;gBAEb,OAAO,GAAE,kBAAuB;IAE7D,aAAa,CACX,MAAM,EAAE,kBAAkB,EAC1B,cAAc,CAAC,EAAE,aAAa,EAC9B,QAAQ,CAAC,EAAE,oBAAoB,GAC9B,OAAO,CAAC,YAAY,CAAC;IAIxB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAMhE,UAAU,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAI7C,SAAS,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAI3C,WAAW,IAAI,OAAO;IAIhB,aAAa,CAAC,IAAI,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAC5E,OAAO,EAAE,OAAO,4BAA4B,EAAE,YAAY,CAAC;QAC3D,WAAW,EAAE,OAAO,4BAA4B,EAAE,iBAAiB,CAAC;QACpE,QAAQ,EAAE,OAAO,wBAAwB,EAAE,gBAAgB,EAAE,CAAC;KAC/D,CAAC;CAQH;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,IAAI,eAAe,CAElD"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
/**
|
|
3
|
+
* In-process `mock` provider (features/agent-providers.md § Provider entry — dev/test only). It
|
|
4
|
+
* implements the `AgentClient`/`AgentSession` contracts in memory and emits a scripted turn. Never
|
|
5
|
+
* user-selectable in production paths.
|
|
6
|
+
*/
|
|
7
|
+
export const MOCK_CAPABILITIES = {
|
|
8
|
+
supportsStreaming: true,
|
|
9
|
+
supportsSessionPersistence: true,
|
|
10
|
+
supportsDynamicModes: true,
|
|
11
|
+
supportsMcpServers: false,
|
|
12
|
+
supportsReasoningStream: true,
|
|
13
|
+
supportsToolInvocations: true,
|
|
14
|
+
};
|
|
15
|
+
const MOCK_MODES = [
|
|
16
|
+
{ id: "default", label: "Default" },
|
|
17
|
+
{ id: "plan", label: "Plan" },
|
|
18
|
+
];
|
|
19
|
+
class MockAgentSession {
|
|
20
|
+
config;
|
|
21
|
+
provider = "mock";
|
|
22
|
+
id = randomUUID();
|
|
23
|
+
capabilities = MOCK_CAPABILITIES;
|
|
24
|
+
subscribers = new Set();
|
|
25
|
+
history = [];
|
|
26
|
+
turnDelayMs;
|
|
27
|
+
activeTurn = null;
|
|
28
|
+
completionTimer = null;
|
|
29
|
+
mode = "default";
|
|
30
|
+
closed = false;
|
|
31
|
+
constructor(config, options = {}) {
|
|
32
|
+
this.config = config;
|
|
33
|
+
this.turnDelayMs = options.turnDelayMs ?? 5;
|
|
34
|
+
}
|
|
35
|
+
emit(event) {
|
|
36
|
+
this.history.push(event);
|
|
37
|
+
for (const cb of this.subscribers)
|
|
38
|
+
cb(event);
|
|
39
|
+
}
|
|
40
|
+
subscribe(cb) {
|
|
41
|
+
this.subscribers.add(cb);
|
|
42
|
+
return () => this.subscribers.delete(cb);
|
|
43
|
+
}
|
|
44
|
+
async *streamHistory() {
|
|
45
|
+
for (const event of this.history)
|
|
46
|
+
yield event;
|
|
47
|
+
}
|
|
48
|
+
startTurn(prompt) {
|
|
49
|
+
const turnId = randomUUID();
|
|
50
|
+
this.activeTurn = turnId;
|
|
51
|
+
this.emit({ kind: "turn_started", turnId });
|
|
52
|
+
this.completionTimer = setTimeout(() => {
|
|
53
|
+
if (this.activeTurn !== turnId)
|
|
54
|
+
return;
|
|
55
|
+
this.emit({ kind: "assistant_message", messageId: randomUUID(), text: `echo: ${prompt}` });
|
|
56
|
+
this.emit({ kind: "turn_completed", turnId });
|
|
57
|
+
this.activeTurn = null;
|
|
58
|
+
this.completionTimer = null;
|
|
59
|
+
}, this.turnDelayMs);
|
|
60
|
+
return Promise.resolve({ turnId });
|
|
61
|
+
}
|
|
62
|
+
/** Convenience: start a turn and resolve when it reaches a terminal event. */
|
|
63
|
+
run(prompt) {
|
|
64
|
+
return new Promise((resolve) => {
|
|
65
|
+
const unsub = this.subscribe((event) => {
|
|
66
|
+
if (event.kind === "turn_completed" ||
|
|
67
|
+
event.kind === "turn_failed" ||
|
|
68
|
+
event.kind === "turn_canceled") {
|
|
69
|
+
unsub();
|
|
70
|
+
resolve();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
void this.startTurn(prompt);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
interrupt() {
|
|
77
|
+
if (this.activeTurn) {
|
|
78
|
+
if (this.completionTimer)
|
|
79
|
+
clearTimeout(this.completionTimer);
|
|
80
|
+
const turnId = this.activeTurn;
|
|
81
|
+
this.activeTurn = null;
|
|
82
|
+
this.completionTimer = null;
|
|
83
|
+
this.emit({ kind: "turn_canceled", turnId });
|
|
84
|
+
}
|
|
85
|
+
return Promise.resolve();
|
|
86
|
+
}
|
|
87
|
+
getRuntimeInfo() {
|
|
88
|
+
return {
|
|
89
|
+
provider: this.provider,
|
|
90
|
+
sessionId: this.id,
|
|
91
|
+
model: this.config.model ?? "mock-model",
|
|
92
|
+
modeId: this.mode,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
getAvailableModes() {
|
|
96
|
+
return MOCK_MODES;
|
|
97
|
+
}
|
|
98
|
+
getCurrentMode() {
|
|
99
|
+
return this.mode;
|
|
100
|
+
}
|
|
101
|
+
setMode(id) {
|
|
102
|
+
this.mode = id;
|
|
103
|
+
return Promise.resolve();
|
|
104
|
+
}
|
|
105
|
+
getPendingPermissions() {
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
respondToPermission() {
|
|
109
|
+
return Promise.resolve();
|
|
110
|
+
}
|
|
111
|
+
describePersistence() {
|
|
112
|
+
return { provider: this.provider, sessionId: this.id, nativeHandle: `mock:${this.id}` };
|
|
113
|
+
}
|
|
114
|
+
close() {
|
|
115
|
+
this.closed = true;
|
|
116
|
+
if (this.completionTimer)
|
|
117
|
+
clearTimeout(this.completionTimer);
|
|
118
|
+
this.completionTimer = null;
|
|
119
|
+
this.activeTurn = null;
|
|
120
|
+
this.subscribers.clear();
|
|
121
|
+
return Promise.resolve();
|
|
122
|
+
}
|
|
123
|
+
isClosed() {
|
|
124
|
+
return this.closed;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export class MockAgentClient {
|
|
128
|
+
options;
|
|
129
|
+
provider = "mock";
|
|
130
|
+
capabilities = MOCK_CAPABILITIES;
|
|
131
|
+
constructor(options = {}) {
|
|
132
|
+
this.options = options;
|
|
133
|
+
}
|
|
134
|
+
createSession(config, _launchContext, _options) {
|
|
135
|
+
return Promise.resolve(new MockAgentSession(config, this.options));
|
|
136
|
+
}
|
|
137
|
+
resumeSession(_handle) {
|
|
138
|
+
return Promise.resolve(new MockAgentSession({ provider: "mock", cwd: ".", model: "mock-model" }, this.options));
|
|
139
|
+
}
|
|
140
|
+
listModels() {
|
|
141
|
+
return Promise.resolve([{ id: "mock-model", label: "Mock Model" }]);
|
|
142
|
+
}
|
|
143
|
+
listModes() {
|
|
144
|
+
return Promise.resolve(MOCK_MODES);
|
|
145
|
+
}
|
|
146
|
+
isAvailable() {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
async importSession(args) {
|
|
150
|
+
const session = new MockAgentSession({ provider: "mock", cwd: args.cwd }, this.options);
|
|
151
|
+
return {
|
|
152
|
+
session,
|
|
153
|
+
persistence: { provider: "mock", sessionId: session.id, nativeHandle: `mock:${session.id}` },
|
|
154
|
+
timeline: [],
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/** Factory matching the provider-registry signature `(logger, runtimeSettings, options)`. */
|
|
159
|
+
export function createMockClient() {
|
|
160
|
+
return new MockAgentClient();
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=mock-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-provider.js","sourceRoot":"","sources":["../../../../src/agent/providers/mock/mock-provider.ts"],"names":[],"mappings":"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"}
|