pi-fabric 0.92.34 → 0.92.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.
Files changed (84) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/completion-inbox.d.ts +15 -0
  3. package/dist/agents/completion-inbox.d.ts.map +1 -0
  4. package/dist/agents/manager.d.ts +1 -0
  5. package/dist/agents/manager.d.ts.map +1 -1
  6. package/dist/agents.js +1 -1
  7. package/dist/chunks/chunk-B54Z662X.js +127 -0
  8. package/dist/chunks/chunk-B54Z662X.js.map +7 -0
  9. package/dist/chunks/{chunk-U5PRQ6NL.js → chunk-BJGZESBD.js} +21 -4
  10. package/dist/chunks/chunk-BJGZESBD.js.map +7 -0
  11. package/dist/chunks/{chunk-IOE5RWJ4.js → chunk-F5SWLHBF.js} +6 -6
  12. package/dist/chunks/{chunk-K3PMKWYO.js → chunk-GTLOT23W.js} +8 -6
  13. package/dist/chunks/chunk-GTLOT23W.js.map +7 -0
  14. package/dist/chunks/{chunk-YQLJMJ7L.js → chunk-IK46M2WL.js} +2 -2
  15. package/dist/chunks/{chunk-KQUZV4NA.js → chunk-MDOBLRPL.js} +3 -3
  16. package/dist/chunks/{chunk-U5IEAHUY.js → chunk-MW5VI7IW.js} +124 -25
  17. package/dist/chunks/chunk-MW5VI7IW.js.map +7 -0
  18. package/dist/chunks/{chunk-RWDKJ24D.js → chunk-NHMICIEU.js} +2 -2
  19. package/dist/chunks/{chunk-Z7ZAT43C.js → chunk-PXXRY3TN.js} +7 -4
  20. package/dist/chunks/chunk-PXXRY3TN.js.map +7 -0
  21. package/dist/chunks/{chunk-YZDC2WTU.js → chunk-TGAVMUOS.js} +3 -3
  22. package/dist/chunks/{chunk-JNMTTJMQ.js → chunk-TX6E5W7H.js} +1 -1
  23. package/dist/chunks/{chunk-JNMTTJMQ.js.map → chunk-TX6E5W7H.js.map} +1 -1
  24. package/dist/chunks/{chunk-QXP2OK5O.js → chunk-UR2K6WK6.js} +2 -2
  25. package/dist/chunks/{chunk-T3RMRIF4.js → chunk-WHBJDTCR.js} +2 -2
  26. package/dist/chunks/{chunk-F4J7KGX4.js → chunk-Y65V2MAP.js} +2 -2
  27. package/dist/components/configuration.js +4 -4
  28. package/dist/core/approval-controller.d.ts +5 -1
  29. package/dist/core/approval-controller.d.ts.map +1 -1
  30. package/dist/core/auto-approval-classifier.d.ts +11 -0
  31. package/dist/core/auto-approval-classifier.d.ts.map +1 -1
  32. package/dist/fabric-runtime-state.d.ts.map +1 -1
  33. package/dist/fabric-runtime-state.js +203 -46
  34. package/dist/fabric-runtime-state.js.map +4 -4
  35. package/dist/index.js +4 -4
  36. package/dist/jev/client.js +3 -3
  37. package/dist/jev/model-key.d.ts +3 -2
  38. package/dist/jev/model-key.d.ts.map +1 -1
  39. package/dist/jev/observation.js +3 -3
  40. package/dist/jev/routes.d.ts +21 -5
  41. package/dist/jev/routes.d.ts.map +1 -1
  42. package/dist/jev.d.ts +1 -1
  43. package/dist/jev.d.ts.map +1 -1
  44. package/dist/jev.js +15 -7
  45. package/dist/providers/agents-actions.d.ts.map +1 -1
  46. package/dist/providers/agents-provider.d.ts.map +1 -1
  47. package/dist/providers/jev-provider.js +7 -7
  48. package/dist/residency/actor-client.js +2 -2
  49. package/dist/residency/client.d.ts +3 -0
  50. package/dist/residency/client.d.ts.map +1 -1
  51. package/dist/residency/host.d.ts.map +1 -1
  52. package/dist/residency/host.js +6 -6
  53. package/dist/residency/pi-entry.js +6 -6
  54. package/dist/residency/protocol.d.ts +4 -0
  55. package/dist/residency/protocol.d.ts.map +1 -1
  56. package/dist/runtime/monty-runtime.js +3 -3
  57. package/dist/ui/settings.js +8 -8
  58. package/dist/ui/settings.js.map +2 -2
  59. package/docs/agents.md +8 -0
  60. package/docs/configuration.md +8 -8
  61. package/docs/jev.md +5 -3
  62. package/package.json +1 -1
  63. package/skillsets/python/fabric-exec/SKILL.md +1 -1
  64. package/skillsets/python/fabric-exec/references/agents.md +1 -1
  65. package/skillsets/python/fabric-foreman/SKILL.md +1 -1
  66. package/skillsets/python/fabric-jev/SKILL.md +2 -2
  67. package/skillsets/typescript/fabric-exec/SKILL.md +1 -1
  68. package/skillsets/typescript/fabric-exec/references/agents.md +1 -1
  69. package/skillsets/typescript/fabric-foreman/SKILL.md +1 -1
  70. package/skillsets/typescript/fabric-jev/SKILL.md +2 -2
  71. package/dist/chunks/chunk-CHR7QKWE.js +0 -102
  72. package/dist/chunks/chunk-CHR7QKWE.js.map +0 -7
  73. package/dist/chunks/chunk-K3PMKWYO.js.map +0 -7
  74. package/dist/chunks/chunk-U5IEAHUY.js.map +0 -7
  75. package/dist/chunks/chunk-U5PRQ6NL.js.map +0 -7
  76. package/dist/chunks/chunk-Z7ZAT43C.js.map +0 -7
  77. /package/dist/chunks/{chunk-IOE5RWJ4.js.map → chunk-F5SWLHBF.js.map} +0 -0
  78. /package/dist/chunks/{chunk-YQLJMJ7L.js.map → chunk-IK46M2WL.js.map} +0 -0
  79. /package/dist/chunks/{chunk-KQUZV4NA.js.map → chunk-MDOBLRPL.js.map} +0 -0
  80. /package/dist/chunks/{chunk-RWDKJ24D.js.map → chunk-NHMICIEU.js.map} +0 -0
  81. /package/dist/chunks/{chunk-YZDC2WTU.js.map → chunk-TGAVMUOS.js.map} +0 -0
  82. /package/dist/chunks/{chunk-QXP2OK5O.js.map → chunk-UR2K6WK6.js.map} +0 -0
  83. /package/dist/chunks/{chunk-T3RMRIF4.js.map → chunk-WHBJDTCR.js.map} +0 -0
  84. /package/dist/chunks/{chunk-F4J7KGX4.js.map → chunk-Y65V2MAP.js.map} +0 -0
package/README.md CHANGED
@@ -145,7 +145,7 @@ See the [interface & commands reference](docs/interface.md) for every view, keyb
145
145
  - [Interface & commands](docs/interface.md): dashboard, settings, keybindings, slash commands, and headless runs.
146
146
  - [Agents, actors & mesh](docs/agents.md): model handoff, `/fabric prewalk`, runners, transports, actors, councils, recursive queries, and durable coordination.
147
147
  - [Durable residency through Pi](docs/residency-runtime.md): background host lifecycle and the Pi-runtime launcher boundary.
148
- - [Jev System One programs](docs/jev.md): typed judgments, `/login jev` or the existing `openrouter` credential, foreground/background loops, budgets, and optional Browser Harness CDP integration.
148
+ - [Jev System One programs](docs/jev.md): typed judgments, `/login jev`, `openrouter`, or `vercel-ai-gateway` credentials, foreground/background loops, budgets, and optional Browser Harness CDP integration.
149
149
  - [Components & committed capabilities](docs/components.md): supervised effects, exact requirements, external per-model guidance and execution-profile replacement, rolling provider generations, actor commitments, and both formal calculi.
150
150
  - [External providers](docs/providers.md): the versioned provider protocol for extensions.
151
151
  - [Architecture & security](docs/architecture.md): the host bridge, sandboxing, tool-call robustness, and limits.
@@ -0,0 +1,15 @@
1
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
2
+ import type { AgentRunResult } from "./types.js";
3
+ export declare const AGENT_COMPLETION_MESSAGE_TYPE = "pi-fabric-agent-complete";
4
+ type Completion = Pick<AgentRunResult, "id" | "name" | "status" | "text" | "error" | "startedAt" | "finishedAt">;
5
+ /** Own notifications until the tool batch ends, so a late wait can still retract them. */
6
+ export declare class AgentCompletionInbox {
7
+ #private;
8
+ readonly pi: ExtensionAPI;
9
+ constructor(pi: ExtensionAPI, context: ExtensionContext);
10
+ enqueue(result: Completion, delivered?: () => void): void;
11
+ acknowledge(id: string): void;
12
+ close(): void;
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=completion-inbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion-inbox.d.ts","sourceRoot":"","sources":["../../src/agents/completion-inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,eAAO,MAAM,6BAA6B,6BAA6B,CAAC;AAKxE,KAAK,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,CAAC,CAAC;AAQjH,0FAA0F;AAC1F,qBAAa,oBAAoB;;IASnB,QAAQ,CAAC,EAAE,EAAE,YAAY;gBAAhB,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB;IAwChE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAwBzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAK7B,KAAK,IAAI,IAAI;CAkDd"}
@@ -34,6 +34,7 @@ export declare class AgentManager {
34
34
  identityId?: string;
35
35
  retention?: FabricRetentionConfig;
36
36
  onBackgroundComplete?: (result: AgentRunResult) => void;
37
+ onResultConsumed?: (id: string) => void;
37
38
  onLifecycle?: (event: FabricLifecyclePublishRequest) => void;
38
39
  preparePiModel?: (model: string | undefined) => Promise<string | void>;
39
40
  resolveParticipantGuidance?: AgentParticipantGuidanceResolver;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/agents/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/agents/manager.ts"],"names":[],"mappings":"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"}
package/dist/agents.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  AGENTS_ACTION_DESCRIPTORS,
3
3
  normalizeAgentRunRequest
4
- } from "./chunks/chunk-Z7ZAT43C.js";
4
+ } from "./chunks/chunk-PXXRY3TN.js";
5
5
  import {
6
6
  validateAgentResult
7
7
  } from "./chunks/chunk-3QECYQGA.js";
@@ -0,0 +1,127 @@
1
+ // src/jev/model-key.ts
2
+ var JEV_TYPESAFE_MODEL_PREFIX = "pi-fabric/typesafe/";
3
+ var JEV_OPENROUTER_MODEL_PREFIX = "pi-fabric/openrouter/";
4
+ var JEV_VERCEL_MODEL_PREFIX = "pi-fabric/vercel-ai-gateway/";
5
+ var ROUTE_PREFIXES = [
6
+ ["typesafe", JEV_TYPESAFE_MODEL_PREFIX],
7
+ ["openrouter", JEV_OPENROUTER_MODEL_PREFIX],
8
+ ["vercel-ai-gateway", JEV_VERCEL_MODEL_PREFIX]
9
+ ];
10
+ var normalizeJevApprovalModel = (key) => key?.startsWith("jev/") ? `${JEV_TYPESAFE_MODEL_PREFIX}${key.slice(4)}` : key;
11
+ var parseJevApprovalModel = (key) => {
12
+ const normalized = normalizeJevApprovalModel(key);
13
+ if (!normalized) return void 0;
14
+ for (const [route, prefix] of ROUTE_PREFIXES) {
15
+ if (normalized.startsWith(prefix)) return { route, model: normalized.slice(prefix.length) };
16
+ }
17
+ return void 0;
18
+ };
19
+ var isJevApprovalModel = (key) => parseJevApprovalModel(key) !== void 0;
20
+
21
+ // src/jev/routes.ts
22
+ var JEV_TYPESAFE_MODELS = ["jev-latest", "jev-1.13", "jev-1.13.0", "jev-preview"];
23
+ var JEV_TYPESAFE_ROUTE = {
24
+ id: "typesafe",
25
+ label: "TypeSafe",
26
+ endpoint: "https://api.typesafe.ai/v1/systemone",
27
+ providerId: "jev",
28
+ envKeys: ["TYPESAFE_API_KEY"],
29
+ modelPrefix: JEV_TYPESAFE_MODEL_PREFIX,
30
+ aliases: JEV_TYPESAFE_MODELS
31
+ };
32
+ var JEV_OPENROUTER_MODELS = {
33
+ "jev-latest": "~typesafe/jev-latest",
34
+ "jev-1.13": "typesafe/jev-1.13"
35
+ };
36
+ var JEV_OPENROUTER_ROUTE = {
37
+ id: "openrouter",
38
+ label: "OpenRouter",
39
+ endpoint: "https://openrouter.ai/api/alpha/decisions",
40
+ providerId: "openrouter",
41
+ envKeys: ["OPENROUTER_API_KEY", "TYPESAFE_OPENROUTER_API_KEY"],
42
+ modelPrefix: JEV_OPENROUTER_MODEL_PREFIX,
43
+ aliases: Object.keys(JEV_OPENROUTER_MODELS)
44
+ };
45
+ var JEV_VERCEL_MODELS = {
46
+ "jev-latest": "typesafe-ai/jev"
47
+ };
48
+ var JEV_VERCEL_ROUTE = {
49
+ id: "vercel-ai-gateway",
50
+ label: "Vercel AI Gateway",
51
+ endpoint: "https://ai-gateway.vercel.sh/typesafe/v1/systemone",
52
+ providerId: "vercel-ai-gateway",
53
+ envKeys: ["AI_GATEWAY_API_KEY"],
54
+ modelPrefix: JEV_VERCEL_MODEL_PREFIX,
55
+ aliases: Object.keys(JEV_VERCEL_MODELS)
56
+ };
57
+ var JEV_ROUTES = {
58
+ "typesafe": JEV_TYPESAFE_ROUTE,
59
+ "openrouter": JEV_OPENROUTER_ROUTE,
60
+ "vercel-ai-gateway": JEV_VERCEL_ROUTE
61
+ };
62
+ var JEV_ROUTE_ORDER = [JEV_TYPESAFE_ROUTE, JEV_OPENROUTER_ROUTE, JEV_VERCEL_ROUTE];
63
+ var JEV_PROVIDER_PREFIX = "pi-fabric/";
64
+ var jevClassifierKey = (route, model) => `${route.modelPrefix}${model}`;
65
+ var TYPESAFE_MODEL = /^[a-zA-Z0-9._-]{1,128}$/;
66
+ var isJevOpenRouterModelId = (model) => /^~?typesafe\/[a-zA-Z0-9._-]{1,120}$/.test(model);
67
+ var isJevVercelModelId = (model) => /^typesafe-ai\/[a-zA-Z0-9._-]{1,120}$/.test(model);
68
+ var isJevModelId = (model) => TYPESAFE_MODEL.test(model) || isJevOpenRouterModelId(model) || isJevVercelModelId(model);
69
+ var resolveJevModelRoute = (model) => {
70
+ if (isJevOpenRouterModelId(model)) return { route: JEV_OPENROUTER_ROUTE, model };
71
+ if (isJevVercelModelId(model)) return { route: JEV_VERCEL_ROUTE, model };
72
+ return { route: JEV_TYPESAFE_ROUTE, model };
73
+ };
74
+ var resolveJevUpstreamModel = (route, model) => {
75
+ if (route.id === "openrouter") return JEV_OPENROUTER_MODELS[model] ?? (isJevOpenRouterModelId(model) ? model : void 0);
76
+ if (route.id === "vercel-ai-gateway") return JEV_VERCEL_MODELS[model] ?? (isJevVercelModelId(model) ? model : void 0);
77
+ return TYPESAFE_MODEL.test(model) ? model : void 0;
78
+ };
79
+ var unavailableModelMessage = (route, model) => {
80
+ if (route.id === "openrouter") return `OpenRouter serves ${Object.keys(JEV_OPENROUTER_MODELS).join(", ")}; "${model}" is not available`;
81
+ if (route.id === "vercel-ai-gateway") return `Vercel AI Gateway serves ${Object.keys(JEV_VERCEL_MODELS).join(", ")}; "${model}" is not available`;
82
+ return `Invalid Jev auto-approval model; use ${JEV_TYPESAFE_MODEL_PREFIX}<model-id>`;
83
+ };
84
+ var resolveJevClassifierTarget = (key) => {
85
+ const parsed = parseJevApprovalModel(key);
86
+ if (!parsed) {
87
+ return {
88
+ ok: false,
89
+ message: `Invalid Jev auto-approval model; use ${JEV_TYPESAFE_MODEL_PREFIX}<model-id>, ${JEV_OPENROUTER_MODEL_PREFIX}<model-id>, or ${JEV_VERCEL_MODEL_PREFIX}<model-id>`
90
+ };
91
+ }
92
+ const route = JEV_ROUTES[parsed.route];
93
+ const model = resolveJevUpstreamModel(route, parsed.model);
94
+ return model ? { ok: true, route, model } : { ok: false, message: unavailableModelMessage(route, parsed.model) };
95
+ };
96
+ var jevClassifierModels = (configuredModel) => {
97
+ const configured = configuredModel ? resolveJevModelRoute(configuredModel) : void 0;
98
+ return JEV_ROUTE_ORDER.flatMap((route) => {
99
+ const models = new Set(route.aliases);
100
+ if (configured?.route.id === route.id && configuredModel) models.add(configuredModel);
101
+ return [...models].map((model) => ({
102
+ provider: "pi-fabric",
103
+ id: jevClassifierKey(route, model).slice(JEV_PROVIDER_PREFIX.length),
104
+ name: `Jev (${route.label} safety classifier \xB7 ${model})`
105
+ }));
106
+ });
107
+ };
108
+
109
+ export {
110
+ normalizeJevApprovalModel,
111
+ isJevApprovalModel,
112
+ JEV_TYPESAFE_MODELS,
113
+ JEV_TYPESAFE_ROUTE,
114
+ JEV_OPENROUTER_MODELS,
115
+ JEV_OPENROUTER_ROUTE,
116
+ JEV_VERCEL_MODELS,
117
+ JEV_VERCEL_ROUTE,
118
+ jevClassifierKey,
119
+ isJevOpenRouterModelId,
120
+ isJevVercelModelId,
121
+ isJevModelId,
122
+ resolveJevModelRoute,
123
+ resolveJevUpstreamModel,
124
+ resolveJevClassifierTarget,
125
+ jevClassifierModels
126
+ };
127
+ //# sourceMappingURL=chunk-B54Z662X.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/jev/model-key.ts", "../../src/jev/routes.ts"],
4
+ "sourcesContent": ["/** Fabric classifier keys, not Pi chat-provider or upstream TypeSafe/OpenRouter/Vercel model IDs. */\nexport const JEV_TYPESAFE_MODEL_PREFIX = \"pi-fabric/typesafe/\";\nexport const JEV_OPENROUTER_MODEL_PREFIX = \"pi-fabric/openrouter/\";\nexport const JEV_VERCEL_MODEL_PREFIX = \"pi-fabric/vercel-ai-gateway/\";\n\nexport type JevClassifierRoute = \"typesafe\" | \"openrouter\" | \"vercel-ai-gateway\";\n\nconst ROUTE_PREFIXES: ReadonlyArray<readonly [route: JevClassifierRoute, prefix: string]> = [\n [\"typesafe\", JEV_TYPESAFE_MODEL_PREFIX],\n [\"openrouter\", JEV_OPENROUTER_MODEL_PREFIX],\n [\"vercel-ai-gateway\", JEV_VERCEL_MODEL_PREFIX],\n];\n\n/** Keep saved pre-namespace overrides usable without moving /login jev credentials. */\nexport const normalizeJevApprovalModel = (key: string | undefined): string | undefined =>\n key?.startsWith(\"jev/\") ? `${JEV_TYPESAFE_MODEL_PREFIX}${key.slice(4)}` : key;\n\nexport const parseJevApprovalModel = (\n key: string | undefined,\n): { route: JevClassifierRoute; model: string } | undefined => {\n const normalized = normalizeJevApprovalModel(key);\n if (!normalized) return undefined;\n for (const [route, prefix] of ROUTE_PREFIXES) {\n if (normalized.startsWith(prefix)) return { route, model: normalized.slice(prefix.length) };\n }\n return undefined;\n};\n\nexport const isJevApprovalModel = (key: string | undefined): boolean =>\n parseJevApprovalModel(key) !== undefined;\n", "import {\n JEV_OPENROUTER_MODEL_PREFIX,\n JEV_TYPESAFE_MODEL_PREFIX,\n JEV_VERCEL_MODEL_PREFIX,\n parseJevApprovalModel,\n type JevClassifierRoute,\n} from \"./model-key.js\";\n\nexport interface JevRoute {\n readonly id: JevClassifierRoute;\n /** Human label used in host-visible errors and status. */\n readonly label: string;\n /** Fixed HTTPS endpoint receiving the typed System One request. */\n readonly endpoint: string;\n /** Pi auth provider whose auth.json login and environment keys authenticate this route. */\n readonly providerId: string;\n /** Environment fallbacks, checked when Pi provider auth is not configured. */\n readonly envKeys: readonly string[];\n /** Classifier key prefix stored in `approvals.model` for this route. */\n readonly modelPrefix: string;\n /** Aliases offered in host pickers and accepted as upstream overrides. */\n readonly aliases: readonly string[];\n}\n\n/** Direct TypeSafe aliases. All of them resolve to `jev-1.13.0` today. */\nexport const JEV_TYPESAFE_MODELS: readonly string[] = [\"jev-latest\", \"jev-1.13\", \"jev-1.13.0\", \"jev-preview\"];\n\nexport const JEV_TYPESAFE_ROUTE: JevRoute = {\n id: \"typesafe\",\n label: \"TypeSafe\",\n endpoint: \"https://api.typesafe.ai/v1/systemone\",\n providerId: \"jev\",\n envKeys: [\"TYPESAFE_API_KEY\"],\n modelPrefix: JEV_TYPESAFE_MODEL_PREFIX,\n aliases: JEV_TYPESAFE_MODELS,\n};\n\n/** OpenRouter decisions model IDs by alias. OpenRouter has no `jev-preview` alias. */\nexport const JEV_OPENROUTER_MODELS: Readonly<Record<string, string>> = {\n \"jev-latest\": \"~typesafe/jev-latest\",\n \"jev-1.13\": \"typesafe/jev-1.13\",\n};\n\n/**\n * OpenRouter serves decisions models on its Decisions API, not chat completions.\n * The user's existing openrouter auth (`/login openrouter`, `OPENROUTER_API_KEY`)\n * is the primary credential; `TYPESAFE_OPENROUTER_API_KEY` is an explicit fallback.\n */\nexport const JEV_OPENROUTER_ROUTE: JevRoute = {\n id: \"openrouter\",\n label: \"OpenRouter\",\n endpoint: \"https://openrouter.ai/api/alpha/decisions\",\n providerId: \"openrouter\",\n envKeys: [\"OPENROUTER_API_KEY\", \"TYPESAFE_OPENROUTER_API_KEY\"],\n modelPrefix: JEV_OPENROUTER_MODEL_PREFIX,\n aliases: Object.keys(JEV_OPENROUTER_MODELS),\n};\n\n/** Vercel AI Gateway evaluation model IDs by alias. The gateway serves one Jev build today. */\nexport const JEV_VERCEL_MODELS: Readonly<Record<string, string>> = {\n \"jev-latest\": \"typesafe-ai/jev\",\n};\n\n/**\n * Vercel AI Gateway exposes a TypeSafe-compatible endpoint, so request and\n * response shapes stay TypeSafe's own and only the base URL and credential\n * change. The existing Pi `vercel-ai-gateway` login authenticates it.\n */\nexport const JEV_VERCEL_ROUTE: JevRoute = {\n id: \"vercel-ai-gateway\",\n label: \"Vercel AI Gateway\",\n endpoint: \"https://ai-gateway.vercel.sh/typesafe/v1/systemone\",\n providerId: \"vercel-ai-gateway\",\n envKeys: [\"AI_GATEWAY_API_KEY\"],\n modelPrefix: JEV_VERCEL_MODEL_PREFIX,\n aliases: Object.keys(JEV_VERCEL_MODELS),\n};\n\nconst JEV_ROUTES: Readonly<Record<JevClassifierRoute, JevRoute>> = {\n \"typesafe\": JEV_TYPESAFE_ROUTE,\n \"openrouter\": JEV_OPENROUTER_ROUTE,\n \"vercel-ai-gateway\": JEV_VERCEL_ROUTE,\n};\n\n/** Picker order: direct TypeSafe aliases, then OpenRouter, then Vercel AI Gateway. */\nconst JEV_ROUTE_ORDER: readonly JevRoute[] = [JEV_TYPESAFE_ROUTE, JEV_OPENROUTER_ROUTE, JEV_VERCEL_ROUTE];\n\nconst JEV_PROVIDER_PREFIX = \"pi-fabric/\";\n\n/** Classifier key stored in `approvals.model` for one route and upstream model. */\nexport const jevClassifierKey = (route: JevRoute, model: string): string => `${route.modelPrefix}${model}`;\n\nconst TYPESAFE_MODEL = /^[a-zA-Z0-9._-]{1,128}$/;\n/** OpenRouter decisions IDs are `~typesafe/<family>` or `typesafe/<build>`. */\nexport const isJevOpenRouterModelId = (model: string): boolean =>\n /^~?typesafe\\/[a-zA-Z0-9._-]{1,120}$/.test(model);\n/** Vercel AI Gateway model IDs are `typesafe-ai/<family>`. */\nexport const isJevVercelModelId = (model: string): boolean =>\n /^typesafe-ai\\/[a-zA-Z0-9._-]{1,120}$/.test(model);\n/** A bare TypeSafe alias or a routable OpenRouter/Vercel AI Gateway model ID. */\nexport const isJevModelId = (model: string): boolean =>\n TYPESAFE_MODEL.test(model) || isJevOpenRouterModelId(model) || isJevVercelModelId(model);\n\nexport interface JevRouteTarget {\n readonly route: JevRoute;\n readonly model: string;\n}\n\n/** Route and upstream model ID for a raw `jev.model` value. */\nexport const resolveJevModelRoute = (model: string): JevRouteTarget => {\n if (isJevOpenRouterModelId(model)) return { route: JEV_OPENROUTER_ROUTE, model };\n if (isJevVercelModelId(model)) return { route: JEV_VERCEL_ROUTE, model };\n return { route: JEV_TYPESAFE_ROUTE, model };\n};\n\n/** Upstream model ID for an alias or override on an already-selected route. */\nexport const resolveJevUpstreamModel = (route: JevRoute, model: string): string | undefined => {\n if (route.id === \"openrouter\") return JEV_OPENROUTER_MODELS[model] ?? (isJevOpenRouterModelId(model) ? model : undefined);\n if (route.id === \"vercel-ai-gateway\") return JEV_VERCEL_MODELS[model] ?? (isJevVercelModelId(model) ? model : undefined);\n return TYPESAFE_MODEL.test(model) ? model : undefined;\n};\n\nexport type JevClassifierTarget =\n | { readonly ok: true; readonly route: JevRoute; readonly model: string }\n | { readonly ok: false; readonly message: string };\n\nconst unavailableModelMessage = (route: JevRoute, model: string): string => {\n if (route.id === \"openrouter\") return `OpenRouter serves ${Object.keys(JEV_OPENROUTER_MODELS).join(\", \")}; \"${model}\" is not available`;\n if (route.id === \"vercel-ai-gateway\") return `Vercel AI Gateway serves ${Object.keys(JEV_VERCEL_MODELS).join(\", \")}; \"${model}\" is not available`;\n return `Invalid Jev auto-approval model; use ${JEV_TYPESAFE_MODEL_PREFIX}<model-id>`;\n};\n\n/** Route and upstream model ID for a stored `pi-fabric/<route>/<model>` approvals key. */\nexport const resolveJevClassifierTarget = (key: string): JevClassifierTarget => {\n const parsed = parseJevApprovalModel(key);\n if (!parsed) {\n return {\n ok: false,\n message: `Invalid Jev auto-approval model; use ${JEV_TYPESAFE_MODEL_PREFIX}<model-id>, ${JEV_OPENROUTER_MODEL_PREFIX}<model-id>, or ${JEV_VERCEL_MODEL_PREFIX}<model-id>`,\n };\n }\n const route = JEV_ROUTES[parsed.route];\n const model = resolveJevUpstreamModel(route, parsed.model);\n return model ? { ok: true, route, model } : { ok: false, message: unavailableModelMessage(route, parsed.model) };\n};\n\nexport interface JevClassifierPickerModel {\n readonly provider: \"pi-fabric\";\n readonly id: string;\n readonly name: string;\n}\n\n/** Approvals picker entries: every supported classifier key plus the configured model. */\nexport const jevClassifierModels = (configuredModel?: string): JevClassifierPickerModel[] => {\n const configured = configuredModel ? resolveJevModelRoute(configuredModel) : undefined;\n return JEV_ROUTE_ORDER.flatMap((route) => {\n const models = new Set(route.aliases);\n if (configured?.route.id === route.id && configuredModel) models.add(configuredModel);\n return [...models].map((model): JevClassifierPickerModel => ({\n provider: \"pi-fabric\", id: jevClassifierKey(route, model).slice(JEV_PROVIDER_PREFIX.length),\n name: `Jev (${route.label} safety classifier \u00B7 ${model})`,\n }));\n });\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -30,7 +30,7 @@ import {
30
30
  MAX_AGENT_TIMEOUT_MS,
31
31
  MIN_AGENT_TIMEOUT_MS,
32
32
  quarantineDamagedFile
33
- } from "./chunk-KQUZV4NA.js";
33
+ } from "./chunk-MDOBLRPL.js";
34
34
  import {
35
35
  ownedStat,
36
36
  processAlive
@@ -1880,6 +1880,7 @@ var AgentManager = class {
1880
1880
  this.#claudeBinary = options.claudeBinary ?? process.env.PI_FABRIC_CLAUDE_BINARY ?? config.claude.binary;
1881
1881
  this.#vedaBinary = options.vedaBinary ?? process.env.PI_FABRIC_VEDA_BINARY ?? config.veda.binary;
1882
1882
  this.#onBackgroundComplete = options.onBackgroundComplete;
1883
+ this.#onResultConsumed = options.onResultConsumed;
1883
1884
  this.#onLifecycle = options.onLifecycle;
1884
1885
  this.#preparePiModel = options.preparePiModel;
1885
1886
  this.#resolveParticipantGuidance = options.resolveParticipantGuidance;
@@ -1932,6 +1933,7 @@ var AgentManager = class {
1932
1933
  #identityId;
1933
1934
  #transports;
1934
1935
  #onBackgroundComplete;
1936
+ #onResultConsumed;
1935
1937
  #onLifecycle;
1936
1938
  #preparePiModel;
1937
1939
  #resolveParticipantGuidance;
@@ -2319,16 +2321,20 @@ var AgentManager = class {
2319
2321
  managed.background = false;
2320
2322
  if (!managed.settled) {
2321
2323
  if (!managed.result) throw new Error(`Agent ${id} has no pending result`);
2322
- return managed.result;
2324
+ const result = await managed.result;
2325
+ this.#onResultConsumed?.(id);
2326
+ return result;
2323
2327
  }
2324
2328
  const record = readRecord(managed.statusFile) ?? managed.latestRecord;
2325
2329
  if (!record || !terminalStatuses.has(record.status)) {
2326
2330
  throw new Error(`Agent ${id} settled without a result`);
2327
2331
  }
2332
+ this.#onResultConsumed?.(id);
2328
2333
  return this.#withTransportMetadata(record, managed);
2329
2334
  }
2330
2335
  markForeground(id) {
2331
2336
  this.#requireRun(id).background = false;
2337
+ this.#onResultConsumed?.(id);
2332
2338
  }
2333
2339
  detachSignal(id) {
2334
2340
  this.#detach(this.#requireRun(id), "caller detached; the run continues");
@@ -2358,6 +2364,12 @@ var AgentManager = class {
2358
2364
  managed.abortHandler = void 0;
2359
2365
  if (managed.background) return;
2360
2366
  managed.background = true;
2367
+ if (managed.settled) {
2368
+ const record = readRecord(managed.statusFile) ?? managed.latestRecord;
2369
+ if (record && terminalStatuses.has(record.status)) {
2370
+ this.#notifyBackgroundComplete(managed, this.#withTransportMetadata(record, managed));
2371
+ }
2372
+ }
2361
2373
  if (attached) {
2362
2374
  this.#emitLifecycle(managed, "run.detached", Date.now(), { data: { reason } });
2363
2375
  }
@@ -2460,6 +2472,7 @@ var AgentManager = class {
2460
2472
  async cleanup(id, deleteBranch = false) {
2461
2473
  const managed = this.#requireRun(id);
2462
2474
  if (!managed.settled) throw new Error("Cannot clean up a running agent");
2475
+ this.markForeground(id);
2463
2476
  const cleaned = await this.#worktrees.cleanup(id, deleteBranch);
2464
2477
  if (!this.config.retainRuns) {
2465
2478
  await removeTree(managed.runDirectory);
@@ -2851,7 +2864,11 @@ var AgentManager = class {
2851
2864
  this.#invalidateUiList();
2852
2865
  finishAgentSettlement(managed, result);
2853
2866
  managed.task = "";
2854
- if (managed.background && !this.#closing && this.config.notifyOnComplete && this.#onBackgroundComplete) {
2867
+ this.#notifyBackgroundComplete(managed, result);
2868
+ }
2869
+ #notifyBackgroundComplete(managed, result) {
2870
+ if (managed.background && !managed.completionNotified && !this.#closing && this.config.notifyOnComplete && this.#onBackgroundComplete) {
2871
+ managed.completionNotified = true;
2855
2872
  try {
2856
2873
  this.#onBackgroundComplete(result);
2857
2874
  } catch {
@@ -6962,4 +6979,4 @@ export {
6962
6979
  agentParticipantRecords,
6963
6980
  actorParticipantRecord
6964
6981
  };
6965
- //# sourceMappingURL=chunk-U5PRQ6NL.js.map
6982
+ //# sourceMappingURL=chunk-BJGZESBD.js.map