@code-yeongyu/senpi 2026.9.2-4 → 2026.9.3

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 (114) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/core/dynamic-prompt/build.d.ts.map +1 -1
  3. package/dist/core/dynamic-prompt/build.js +2 -5
  4. package/dist/core/dynamic-prompt/build.js.map +1 -1
  5. package/dist/core/dynamic-prompt/index.d.ts +1 -2
  6. package/dist/core/dynamic-prompt/index.d.ts.map +1 -1
  7. package/dist/core/dynamic-prompt/index.js +1 -2
  8. package/dist/core/dynamic-prompt/index.js.map +1 -1
  9. package/dist/core/dynamic-prompt/intent-gate.d.ts.map +1 -1
  10. package/dist/core/dynamic-prompt/intent-gate.js +9 -24
  11. package/dist/core/dynamic-prompt/intent-gate.js.map +1 -1
  12. package/dist/core/dynamic-prompt/policies.d.ts.map +1 -1
  13. package/dist/core/dynamic-prompt/policies.js +3 -7
  14. package/dist/core/dynamic-prompt/policies.js.map +1 -1
  15. package/dist/core/dynamic-prompt/style.d.ts.map +1 -1
  16. package/dist/core/dynamic-prompt/style.js +6 -8
  17. package/dist/core/dynamic-prompt/style.js.map +1 -1
  18. package/dist/core/dynamic-prompt/verification.js +1 -1
  19. package/dist/core/dynamic-prompt/verification.js.map +1 -1
  20. package/dist/core/dynamic-prompt/working-task.d.ts +2 -0
  21. package/dist/core/dynamic-prompt/working-task.d.ts.map +1 -0
  22. package/dist/core/dynamic-prompt/working-task.js +10 -0
  23. package/dist/core/dynamic-prompt/working-task.js.map +1 -0
  24. package/dist/core/extensions/builtin/config-reload/watch-event-source.d.ts +1 -1
  25. package/dist/core/extensions/builtin/config-reload/watch-event-source.d.ts.map +1 -1
  26. package/dist/core/extensions/builtin/config-reload/watch-event-source.js +27 -9
  27. package/dist/core/extensions/builtin/config-reload/watch-event-source.js.map +1 -1
  28. package/dist/core/extensions/builtin/terminal/extension.d.ts.map +1 -1
  29. package/dist/core/extensions/builtin/terminal/extension.js +8 -3
  30. package/dist/core/extensions/builtin/terminal/extension.js.map +1 -1
  31. package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts +4 -3
  32. package/dist/core/extensions/builtin/terminal/monitor-notify.d.ts.map +1 -1
  33. package/dist/core/extensions/builtin/terminal/monitor-notify.js +18 -18
  34. package/dist/core/extensions/builtin/terminal/monitor-notify.js.map +1 -1
  35. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts +7 -0
  36. package/dist/core/extensions/builtin/terminal/monitor-registry.d.ts.map +1 -1
  37. package/dist/core/extensions/builtin/terminal/monitor-registry.js +37 -8
  38. package/dist/core/extensions/builtin/terminal/monitor-registry.js.map +1 -1
  39. package/dist/core/extensions/builtin/terminal/monitor-status.js +1 -1
  40. package/dist/core/extensions/builtin/terminal/monitor-status.js.map +1 -1
  41. package/dist/core/extensions/builtin/terminal/prompt.d.ts +1 -1
  42. package/dist/core/extensions/builtin/terminal/prompt.d.ts.map +1 -1
  43. package/dist/core/extensions/builtin/terminal/prompt.js +17 -13
  44. package/dist/core/extensions/builtin/terminal/prompt.js.map +1 -1
  45. package/dist/core/extensions/builtin/terminal/tools/bash-output.d.ts.map +1 -1
  46. package/dist/core/extensions/builtin/terminal/tools/bash-output.js +14 -2
  47. package/dist/core/extensions/builtin/terminal/tools/bash-output.js.map +1 -1
  48. package/dist/core/extensions/builtin/terminal/tools/context.d.ts +2 -0
  49. package/dist/core/extensions/builtin/terminal/tools/context.d.ts.map +1 -1
  50. package/dist/core/extensions/builtin/terminal/tools/context.js.map +1 -1
  51. package/dist/core/extensions/builtin/terminal/tools/monitor.d.ts.map +1 -1
  52. package/dist/core/extensions/builtin/terminal/tools/monitor.js +27 -10
  53. package/dist/core/extensions/builtin/terminal/tools/monitor.js.map +1 -1
  54. package/dist/modes/rpc/host-ensure.d.ts +6 -0
  55. package/dist/modes/rpc/host-ensure.d.ts.map +1 -1
  56. package/dist/modes/rpc/host-ensure.js +15 -4
  57. package/dist/modes/rpc/host-ensure.js.map +1 -1
  58. package/dist/modes/rpc/host-lifecycle.d.ts.map +1 -1
  59. package/dist/modes/rpc/host-lifecycle.js +16 -4
  60. package/dist/modes/rpc/host-lifecycle.js.map +1 -1
  61. package/dist/modes/rpc/multi-session-host.d.ts +3 -0
  62. package/dist/modes/rpc/multi-session-host.d.ts.map +1 -1
  63. package/dist/modes/rpc/multi-session-host.js +3 -0
  64. package/dist/modes/rpc/multi-session-host.js.map +1 -1
  65. package/dist/modes/rpc/rpc-mode.d.ts +1 -1
  66. package/dist/modes/rpc/rpc-mode.js +1 -1
  67. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  68. package/dist/modes/rpc/session-command-router.d.ts +22 -0
  69. package/dist/modes/rpc/session-command-router.d.ts.map +1 -1
  70. package/dist/modes/rpc/session-command-router.js +132 -94
  71. package/dist/modes/rpc/session-command-router.js.map +1 -1
  72. package/dist/modes/rpc/session-event-fanout.d.ts +3 -1
  73. package/dist/modes/rpc/session-event-fanout.d.ts.map +1 -1
  74. package/dist/modes/rpc/session-event-fanout.js +14 -1
  75. package/dist/modes/rpc/session-event-fanout.js.map +1 -1
  76. package/dist/modes/rpc/session-event-writer.d.ts +2 -0
  77. package/dist/modes/rpc/session-event-writer.d.ts.map +1 -1
  78. package/dist/modes/rpc/session-event-writer.js +16 -2
  79. package/dist/modes/rpc/session-event-writer.js.map +1 -1
  80. package/dist/modes/rpc/session-registry.d.ts +9 -8
  81. package/dist/modes/rpc/session-registry.d.ts.map +1 -1
  82. package/dist/modes/rpc/session-registry.js +14 -42
  83. package/dist/modes/rpc/session-registry.js.map +1 -1
  84. package/dist/modes/rpc/session-teardown.d.ts +12 -0
  85. package/dist/modes/rpc/session-teardown.d.ts.map +1 -0
  86. package/dist/modes/rpc/session-teardown.js +117 -0
  87. package/dist/modes/rpc/session-teardown.js.map +1 -0
  88. package/docs/rpc.md +7 -5
  89. package/docs/terminal-tools.md +26 -6
  90. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +12 -0
  91. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  92. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  93. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  94. package/node_modules/@earendil-works/pi-ai/dist/providers/data/fireworks.json +1 -1
  95. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google-vertex.json +1 -1
  96. package/node_modules/@earendil-works/pi-ai/dist/providers/data/google.json +1 -1
  97. package/node_modules/@earendil-works/pi-ai/dist/providers/data/huggingface.json +1 -1
  98. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode-go.json +1 -1
  99. package/node_modules/@earendil-works/pi-ai/dist/providers/data/opencode.json +1 -1
  100. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  101. package/node_modules/@earendil-works/pi-ai/dist/providers/data/vercel-ai-gateway.json +1 -1
  102. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  103. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  104. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  105. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  106. package/package.json +7 -7
  107. package/dist/core/dynamic-prompt/exploration.d.ts +0 -2
  108. package/dist/core/dynamic-prompt/exploration.d.ts.map +0 -1
  109. package/dist/core/dynamic-prompt/exploration.js +0 -6
  110. package/dist/core/dynamic-prompt/exploration.js.map +0 -1
  111. package/dist/core/dynamic-prompt/parallel-tools.d.ts +0 -2
  112. package/dist/core/dynamic-prompt/parallel-tools.d.ts.map +0 -1
  113. package/dist/core/dynamic-prompt/parallel-tools.js +0 -8
  114. package/dist/core/dynamic-prompt/parallel-tools.js.map +0 -1
@@ -0,0 +1,117 @@
1
+ import { RpcSessionRegistryError } from "./session-registry.js";
2
+ function reportDetachedFailure(handle, cause) {
3
+ process.stderr.write(`senpi rpc session ${handle} teardown failed: ${String(cause)}\n`);
4
+ }
5
+ export function beginSessionClose(host, handle, onRole) {
6
+ const entry = host.get(handle);
7
+ if (!entry)
8
+ throw new RpcSessionRegistryError("unknown_session");
9
+ if (entry.state === "closing") {
10
+ onRole?.(false);
11
+ return entry;
12
+ }
13
+ if (entry.state !== "open")
14
+ throw new RpcSessionRegistryError("unknown_session");
15
+ entry.attachments -= 1;
16
+ if (entry.attachments > 0)
17
+ return entry;
18
+ entry.state = "closing";
19
+ onRole?.(true);
20
+ entry.closeCompletion = new Promise((resolve) => {
21
+ entry.closeResolve = resolve;
22
+ });
23
+ return entry;
24
+ }
25
+ export function closeSession(host, handle) {
26
+ const entry = beginSessionClose(host, handle);
27
+ if (entry.state !== "closing")
28
+ return Promise.resolve();
29
+ return closeMarkedSession(host, handle);
30
+ }
31
+ export function closeMarkedSession(host, handle) {
32
+ host.sync();
33
+ const entry = host.get(handle);
34
+ if (entry?.state !== "closing")
35
+ throw new RpcSessionRegistryError("unknown_session");
36
+ const completion = entry.closeCompletion;
37
+ if (!completion)
38
+ return Promise.resolve();
39
+ if (entry.closeStarted)
40
+ return completion;
41
+ entry.closeStarted = true;
42
+ const previousLifecycle = entry.lifecycleMutex;
43
+ let releaseTimer;
44
+ let released = false;
45
+ let disposePromise;
46
+ let scopeClosed = false;
47
+ const disposeOnce = () => {
48
+ if (disposePromise)
49
+ return disposePromise;
50
+ disposePromise = Promise.resolve(entry.runtime?.dispose());
51
+ return disposePromise;
52
+ };
53
+ const closeScopeOnce = async () => {
54
+ if (scopeClosed)
55
+ return;
56
+ scopeClosed = true;
57
+ await entry.scope.close?.();
58
+ };
59
+ const release = () => {
60
+ if (released)
61
+ return;
62
+ released = true;
63
+ if (releaseTimer)
64
+ clearTimeout(releaseTimer);
65
+ entry.state = "closed";
66
+ host.delete(handle);
67
+ if (entry.reservationKey)
68
+ host.releaseReservation(entry.reservationKey);
69
+ };
70
+ const graceful = (async () => {
71
+ await previousLifecycle;
72
+ try {
73
+ await entry.runtime?.session.abort();
74
+ }
75
+ catch (cause) {
76
+ reportDetachedFailure(handle, cause);
77
+ }
78
+ try {
79
+ await entry.runtime?.session.waitForIdle();
80
+ }
81
+ catch (cause) {
82
+ reportDetachedFailure(handle, cause);
83
+ }
84
+ try {
85
+ await disposeOnce();
86
+ }
87
+ catch (cause) {
88
+ reportDetachedFailure(handle, cause);
89
+ }
90
+ try {
91
+ await closeScopeOnce();
92
+ }
93
+ catch (cause) {
94
+ reportDetachedFailure(handle, cause);
95
+ }
96
+ })();
97
+ let settled = false;
98
+ const finish = () => {
99
+ if (settled)
100
+ return;
101
+ settled = true;
102
+ release();
103
+ entry.closeResolve?.();
104
+ };
105
+ releaseTimer = setTimeout(() => {
106
+ void disposeOnce().catch((cause) => reportDetachedFailure(handle, cause));
107
+ void closeScopeOnce().catch((cause) => reportDetachedFailure(handle, cause));
108
+ void graceful.catch((cause) => reportDetachedFailure(handle, cause));
109
+ finish();
110
+ }, host.closeGraceMs);
111
+ void graceful.then(finish, (cause) => {
112
+ reportDetachedFailure(handle, cause);
113
+ finish();
114
+ });
115
+ return completion;
116
+ }
117
+ //# sourceMappingURL=session-teardown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-teardown.js","sourceRoot":"","sources":["../../../src/modes/rpc/session-teardown.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RpcSessionEntry } from \"./session-registry.ts\";\nimport { RpcSessionRegistryError } from \"./session-registry.ts\";\n\nexport interface SessionTeardownHost {\n\treadonly closeGraceMs: number;\n\tget(handle: string): RpcSessionEntry | undefined;\n\tdelete(handle: string): void;\n\treleaseReservation(key: string): void;\n\tsync(): void;\n}\n\nfunction reportDetachedFailure(handle: string, cause: unknown): void {\n\tprocess.stderr.write(`senpi rpc session ${handle} teardown failed: ${String(cause)}\\n`);\n}\n\nexport function beginSessionClose(\n\thost: SessionTeardownHost,\n\thandle: string,\n\tonRole?: (finalizer: boolean) => void,\n): RpcSessionEntry {\n\tconst entry = host.get(handle);\n\tif (!entry) throw new RpcSessionRegistryError(\"unknown_session\");\n\tif (entry.state === \"closing\") {\n\t\tonRole?.(false);\n\t\treturn entry;\n\t}\n\tif (entry.state !== \"open\") throw new RpcSessionRegistryError(\"unknown_session\");\n\tentry.attachments -= 1;\n\tif (entry.attachments > 0) return entry;\n\tentry.state = \"closing\";\n\tonRole?.(true);\n\tentry.closeCompletion = new Promise<void>((resolve) => {\n\t\tentry.closeResolve = resolve;\n\t});\n\treturn entry;\n}\n\nexport function closeSession(host: SessionTeardownHost, handle: string): Promise<void> {\n\tconst entry = beginSessionClose(host, handle);\n\tif (entry.state !== \"closing\") return Promise.resolve();\n\treturn closeMarkedSession(host, handle);\n}\n\nexport function closeMarkedSession(host: SessionTeardownHost, handle: string): Promise<void> {\n\thost.sync();\n\tconst entry = host.get(handle);\n\tif (entry?.state !== \"closing\") throw new RpcSessionRegistryError(\"unknown_session\");\n\tconst completion = entry.closeCompletion;\n\tif (!completion) return Promise.resolve();\n\tif (entry.closeStarted) return completion;\n\tentry.closeStarted = true;\n\n\tconst previousLifecycle = entry.lifecycleMutex;\n\tlet releaseTimer: ReturnType<typeof setTimeout> | undefined;\n\tlet released = false;\n\tlet disposePromise: Promise<void> | undefined;\n\tlet scopeClosed = false;\n\tconst disposeOnce = (): Promise<void> => {\n\t\tif (disposePromise) return disposePromise;\n\t\tdisposePromise = Promise.resolve(entry.runtime?.dispose());\n\t\treturn disposePromise;\n\t};\n\tconst closeScopeOnce = async (): Promise<void> => {\n\t\tif (scopeClosed) return;\n\t\tscopeClosed = true;\n\t\tawait entry.scope.close?.();\n\t};\n\tconst release = (): void => {\n\t\tif (released) return;\n\t\treleased = true;\n\t\tif (releaseTimer) clearTimeout(releaseTimer);\n\t\tentry.state = \"closed\";\n\t\thost.delete(handle);\n\t\tif (entry.reservationKey) host.releaseReservation(entry.reservationKey);\n\t};\n\tconst graceful = (async (): Promise<void> => {\n\t\tawait previousLifecycle;\n\t\ttry {\n\t\t\tawait entry.runtime?.session.abort();\n\t\t} catch (cause) {\n\t\t\treportDetachedFailure(handle, cause);\n\t\t}\n\t\ttry {\n\t\t\tawait entry.runtime?.session.waitForIdle();\n\t\t} catch (cause) {\n\t\t\treportDetachedFailure(handle, cause);\n\t\t}\n\t\ttry {\n\t\t\tawait disposeOnce();\n\t\t} catch (cause) {\n\t\t\treportDetachedFailure(handle, cause);\n\t\t}\n\t\ttry {\n\t\t\tawait closeScopeOnce();\n\t\t} catch (cause) {\n\t\t\treportDetachedFailure(handle, cause);\n\t\t}\n\t})();\n\tlet settled = false;\n\tconst finish = (): void => {\n\t\tif (settled) return;\n\t\tsettled = true;\n\t\trelease();\n\t\tentry.closeResolve?.();\n\t};\n\treleaseTimer = setTimeout(() => {\n\t\tvoid disposeOnce().catch((cause) => reportDetachedFailure(handle, cause));\n\t\tvoid closeScopeOnce().catch((cause) => reportDetachedFailure(handle, cause));\n\t\tvoid graceful.catch((cause) => reportDetachedFailure(handle, cause));\n\t\tfinish();\n\t}, host.closeGraceMs);\n\n\tvoid graceful.then(finish, (cause) => {\n\t\treportDetachedFailure(handle, cause);\n\t\tfinish();\n\t});\n\treturn completion;\n}\n"]}
package/docs/rpc.md CHANGED
@@ -62,9 +62,11 @@ On Windows, listeners and clients deterministically map the logical socket path
62
62
  `\\.\pipe\senpi-rpc-<sha256[:32]>`. Callers keep using the same `unix://` CLI value; the logical path remains the
63
63
  ownership and settings identity, and callers never construct the pipe name themselves.
64
64
 
65
- Socket event visibility is attachment-scoped: each connection receives agent events only from sessions attached to that
66
- connection, with every record tagged by its routing `sessionId`. Content-free `session_closed` lifecycle records remain
67
- broadcast to all connections so observers can track the session roster. Correlated responses and dialog extension UI
65
+ Socket event visibility is attachment-scoped for session content: each connection receives agent output only from sessions
66
+ attached to that connection, with every record tagged by its routing `sessionId`. Content-free lifecycle records
67
+ (`agent_start`, `agent_settled`, `agent_idle`, `session_opened`, and `session_closed`) are broadcast to all registered
68
+ connections, including the supervisor's unattached observer, so host lifecycle accounting remains accurate without exposing
69
+ session content. Correlated responses and dialog extension UI
68
70
  requests (select, confirm, input, and editor) are requester-only; other extension UI state records go to the session's
69
71
  attached connections. To observe a foreign session, open it by its existing
70
72
  `sessionPath`; the host attaches that connection during `open_session`.
@@ -177,7 +179,7 @@ so they hold even for embedders and hand-started hosts that have no supervisor.
177
179
  | --- | --- | --- | --- |
178
180
  | `get_protocol_info` | - | `{ protocolVersion: 1, serverVersion: string, capabilities: string[], mode: "classic"\|"multi" }` | Answered in BOTH modes; side-effect-free; the capability probe. Multi-session hosts include `multi_session` plus the negotiated launch capabilities. |
179
181
  | `open_session` | `sessionPath?`, `cwd?`, `provider?`, `modelId?`, `thinkingLevel?`, `permissionPreset?` (all optional; paths MUST be absolute) | `{ sessionId, state: RpcSessionState, attached?: true }` | `sessionPath` = today's `--session` semantics (open-if-exists else create persisting there, `session-manager.ts:926-940`); `provider`/`modelId` applied only on create (resume restores the session's model — mirrors `SenpiSessionRuntime.ts:198-200`); params form the immutable launch profile (D8). When the path is already held by a fully-open session, the open ATTACHES to it: same routing handle, `attached: true`, one more attachment counted; the runtime is torn down only when the last attachment closes. Fails with `too_many_sessions` at the occupancy cap (see [Shared host occupancy](#shared-host-occupancy-idle-eviction-session-cap-empty-host-exit)); idle sessions past the eviction window are closed by the host itself. |
180
- | `close_session` | `sessionId` | `{}` | Aborts active work, awaits agent idle + settled persistence, flushes queued events, detaches subscriptions; its response is the LAST record tagged with that handle — no events after (test-pinned). |
182
+ | `close_session` | `sessionId` | `{}` | Aborts active work, awaits agent idle + settled persistence for up to the host grace window (default 10s), then force-releases the session; its response is the LAST record tagged with that handle for the first closer — no events after (test-pinned). A concurrent close joins the same teardown and receives its own successful response. |
181
183
  | `list_sessions` | - | `{ sessions: [{ sessionId, durableSessionId, sessionPath, cwd, name, status }] }` | Includes `opening`/`closing` entries with their status. |
182
184
  | every existing command | + `sessionId` (REQUIRED in multi mode) | unchanged | Routed to that session. |
183
185
 
@@ -208,7 +210,7 @@ Strict FIFO per session; one total stdout order; cross-session order unspecified
208
210
 
209
211
  ### Duplicate/idempotency
210
212
 
211
- Duplicate `open_session` while a path reservation is held by a fully-open session → ATTACH (`attached: true`, same handle); while held by an `opening`/`closing` entry → `session_path_in_use`. `close_session` releases one attachment; the runtime is disposed only when the last attachment closes. `close_session` on unknown/already-closed → `unknown_session` error. Request `id`s are client-owned; the server echoes them without dedup.
213
+ Duplicate `open_session` while a path reservation is held by a fully-open session → ATTACH (`attached: true`, same handle); while held by an `opening`/`closing` entry → `session_path_in_use`. `close_session` releases one attachment; the runtime is disposed only when the last attachment closes. A close for an entry already `closing` joins its in-flight teardown. `close_session` on unknown/already-closed → `unknown_session` error. The grace window is configurable by the host through `SENPI_RPC_CLOSE_GRACE_MS`. Request `id`s are client-owned; the server echoes them without dedup.
212
214
 
213
215
  ## Protocol Overview
214
216
 
@@ -12,7 +12,7 @@ platform/runtime).
12
12
  |------|---------|
13
13
  | `bash` | Run a command in a PTY. `run_in_background: true` starts a persistent session and returns a `bash_id` immediately. Foreground `timeout` (seconds) is a kill deadline. |
14
14
  | `bash_output` | Peek at a session without blocking: new output since the last read, or the status line. `filter` regex-filters lines; `view: "screen"` returns the rendered xterm grid. |
15
- | `monitor` | Watch a long-running command (`description`, `command`, `filter?`, `timeout_ms?`, `persistent?`) and inject matching PTY output lines as coalesced events. While watches are live, the interactive footer shows a brief `watching …` status (descriptions, count, paused markers). |
15
+ | `monitor` | Watch a change and inject it as coalesced events, passing `command` XOR `path`: a long-running command (`description`, `command`, `filter?`, `timeout_ms?`, `persistent?`) injects matching PTY output lines, while a file (`description`, `path`, `event?`) fires once natively. While watches are live, the interactive footer shows a brief `watching …` status (descriptions, count, paused markers). |
16
16
  | `bash_input` | Send stdin (`input`) or named keys (`keys: ["ctrl+c"]`, `["enter"]`, `["up"]`) to steer a REPL or interrupt a process. |
17
17
  | `bash_resize` | Resize a session's PTY (`cols`, `rows`) so full-screen TUIs reflow. |
18
18
  | `kill_bash` | Tree-kill one session (`bash_id`) or all (`all: true`), leaving no orphans. |
@@ -80,17 +80,33 @@ monitor({ description: "PR checks",
80
80
  Expected event: the verdict line when checks settle, then the summary. Merge on
81
81
  pass, pull the failing job's log on fail. The command exits by itself.
82
82
 
83
- ### File or port transition
83
+ ### File transition (native file branch)
84
84
 
85
85
  ```js
86
86
  monitor({ description: "artifact written",
87
- command: "until test -f dist/app.tar.gz; do sleep 2; done; printf 'READY\n'",
87
+ path: "dist/app.tar.gz",
88
+ event: "create" })
89
+ ```
90
+
91
+ One file, watched natively — no shell, no poll loop. `create` (the default)
92
+ fires only when the file appears after registration; to watch a file that
93
+ already exists, pass `event: "modify"`. Registration needs the parent directory
94
+ (`dist/` here) to exist already, and the target must be a regular file, not a
95
+ symlink — when the build creates the directory too, keep a command poll loop
96
+ like the port recipe below. This branch is XOR with `command` and takes no
97
+ `filter` and no `persistent`. Expected event: one hit when the file lands, then
98
+ the watch is done. Consume the artifact.
99
+
100
+ ### Port transition
101
+
102
+ ```js
103
+ monitor({ description: "postgres up",
104
+ command: "until nc -z localhost 5432; do sleep 1; done; printf 'READY\n'",
88
105
  filter: "^READY$" })
89
106
  ```
90
107
 
91
- Same shape works for ports: `until nc -z localhost 5432; do sleep 1; done;
92
- printf 'READY\n'`. Expected event: `READY`, then exit. Consume the artifact
93
- or connect.
108
+ A port has no native watch, so the sleep loop belongs inside the command.
109
+ Expected event: `READY`, then exit. Connect.
94
110
 
95
111
  ### Child-agent sentinel watch
96
112
 
@@ -113,6 +129,10 @@ results and integrate. Exits on its own; no cleanup.
113
129
  | Expecting `filter` to stop the command | `filter` gates events only; make the command exit on the condition |
114
130
  | `persistent: true` with `timeout_ms` | The timeout is ignored when persistent; pick one |
115
131
  | Sentinel printed without a trailing newline | Sentinels must be newline-terminated: `printf 'READY\n'` |
132
+ | Polling `test -f` in a command to await one file | Use the file branch: `monitor({ description, path, event? })` |
133
+ | `event: "create"` on a file that already exists | `create` fires only on appearance; use `event: "modify"` |
134
+ | `path` whose parent directory the build has yet to create | Registration fails; poll for it with a `command` watch instead |
135
+ | Passing `command` and `path` in one call | They are XOR; pick the branch that matches what you await |
116
136
  | Monitoring sub-minute deterministic work | Run it directly in the foreground |
117
137
  | Rearming a monitor that was never paused | Rearm only a `bash_id` named in a pause notice |
118
138
 
@@ -12,6 +12,18 @@
12
12
 
13
13
  ### Removed
14
14
 
15
+ ## [2026.9.3] - 2026-09-03
16
+
17
+ ### Breaking Changes
18
+
19
+ ### Added
20
+
21
+ ### Changed
22
+
23
+ ### Fixed
24
+
25
+ ### Removed
26
+
15
27
  ## [2026.9.2-4] - 2026-09-02
16
28
 
17
29
  ### Breaking Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-yeongyu/senpi-codemode",
3
- "version": "2026.9.2-4",
3
+ "version": "2026.9.3",
4
4
  "private": true,
5
5
  "description": "Source-only senpi extension package for codemode evaluation tools",
6
6
  "type": "module",
@@ -31,14 +31,14 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@babel/parser": "8.0.4",
34
- "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.2-4",
34
+ "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.3",
35
35
  "typebox": "1.3.18"
36
36
  },
37
37
  "peerDependencies": {
38
- "@code-yeongyu/senpi": "2026.9.2-4"
38
+ "@code-yeongyu/senpi": "2026.9.3"
39
39
  },
40
40
  "devDependencies": {
41
- "@code-yeongyu/senpi": "2026.9.2-4"
41
+ "@code-yeongyu/senpi": "2026.9.3"
42
42
  },
43
43
  "keywords": [
44
44
  "senpi",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@earendil-works/pi-agent-core",
3
- "version": "2026.9.2-4",
3
+ "version": "2026.9.3",
4
4
  "description": "General-purpose agent with transport abstraction, state management, and attachment support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -35,8 +35,8 @@
35
35
  "prepublishOnly": "npm run build"
36
36
  },
37
37
  "dependencies": {
38
- "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.2-4",
39
- "@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.9.2-4",
38
+ "@earendil-works/pi-ai": "npm:@code-yeongyu/senpi-ai@2026.9.3",
39
+ "@earendil-works/pi-telemetry": "npm:@code-yeongyu/senpi-telemetry@2026.9.3",
40
40
  "diff": "9.0.0",
41
41
  "ignore": "7.0.6",
42
42
  "typebox": "1.3.18",
@@ -1 +1 @@
1
- {"schemaVersion":3,"generatedAt":"2026-09-02T10:02:00.284Z","structureHash":"4884a2108b68284155a414091065586da8a950223bf17bc1117ffda8ad938e44","files":{"alibaba-token-plan.json":"9f9e8f88b1faa2e4134a0d8bcda600531d4d044d64b7ec3d2373f1db46dcf452","amazon-bedrock.json":"c86cdf3eb28122f8682415543012feee0a84dd4a30f03b784dfffde92b0d69f4","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"c5c043d7daef4e179d0c1288683b63e52a88efa581edc9201f327ddefd27265c","azure-openai-responses.json":"37d12c5cbfc29bfd9a802a0516f5d3209320bd4aa8ef9cd7c219af208244afa3","baseten.json":"e4d1ec84e8180a53e21c1511b8d78e497784515c33ba8397382ac3450c8b126e","cerebras.json":"38272a7525d6680c71bb4bb3c4085e871768b400832e2013b0e7fd92f8fd4f05","cloudflare-ai-gateway.json":"eea26bf03ac54766119422ebfe05306b1878ae1cd36dac6a60fe35fe81505139","cloudflare-workers-ai.json":"07ef63208ff7517fd1a80962f18143e21de399640423329490b157f459ccf995","deepseek.json":"e3106724723fd82d48a3ff685da9908a3a7b7b4fd84cc3cfe97a6a23067b6029","fireworks.json":"9f5e2459853520d1892a2d262a51448f12f12fb8a45286b2db52e6228ba29699","github-copilot.json":"61dec9e46df61a9b0bf6c7618651f97bfa9ae609d4c216b5725f014942ca3001","google-vertex.json":"fb7586fc955da7b7d7d11d641954f496fbbb42cf3e4cbba66d7116ea3b37d5ed","google.json":"229ae10bd6964cb3dc567270117c8bbd0bfa28075a516041fb5d78836a6ecfbf","groq.json":"e4728fd72e358cd8f25e9a518e9b49a521ef44523d3debe38a7db9e0663c4077","huggingface.json":"7616a851e53d254e375b760abe2b6148e8961a102bd5c7af31829a0f2dc8e5c5","kimi-coding.json":"88150f8970f83e17968b02f3b33fac803b96ebf1474e76437689b7d0f1b69363","minimax-cn.json":"65d37e55a6d9585855f94b3fb7739308d107fe248ebd9e1001d1c5d4606ad2c4","minimax.json":"c7dc5765995ae77242916430929c7cc9a782589f7e483e13f7e01663190d028e","mistral.json":"e3a109306644bf2f2fa38fece50b2d3ce1dbe3b87b1f1b9e2d70cce7eb5c0ea1","moonshotai-cn.json":"dbf1b71ee36812fe64b014177ff455809a8dd852bbbd584422645beb85635127","moonshotai.json":"2d7518b4769e97ac900366175c8b60ff86a02675bb6f6cc2fffcc6761fda6faa","nvidia.json":"ebb630b4a43d4a30d4163a23d6d49bd60c661c2b8f8c1d5b4862ad5b77ece28f","openai-codex.json":"4e4afe2929b2b20a751f2453b219deae4e5b9fd85e147bd0403601f183cfc15f","openai.json":"b014fb0676fec97264eb13b367b0ed73b99915f45410a3dd9a7397a0360c2a4b","opencode-go.json":"a8dc563e15a0b6b5e18b0461d5fe11493d6c6a30f49ea7d156bf20fbe70063d2","opencode.json":"57fe341e223ee523100d0c32b537c0a2d99eacb7fb4639aff9c84acf324e1c09","opengateway.json":"ea7baf1096fe1488ee080ece109743fe69a8ccc111908a991ca09532efc60e15","openrouter.json":"55a684bc048ba881fedc3d2cdecf8d3b270c64239b6dbd07a4fa9b70912a375c","qwen-token-plan-cn.json":"e62dde34edb603376a1dc60b2a74a9c2605b9e81d81df55cc259796c45aa4793","qwen-token-plan-individual.json":"5649fd4075ada766ec65a7a162cd65f096a7ecc29960ace04b2e6a6a4a995a41","qwen-token-plan.json":"fe914313157ff41ab2f71977f0fdcfedb3a8a205d1092e3180f6799e5d7942fd","together.json":"6010980c9b0af72c60965ae325dbdb21e67c91844a7f7f6f7d71d363f1325f56","vercel-ai-gateway.json":"83e16e659701a76db7d955d57a56c20a8b25d6aa39b169af93cc5d4beb54208e","xai.json":"9973aae022723732b8a7ea12107e6fb8b3f1d0e087ec6bbc2ee18f0820595e19","xiaomi-token-plan-ams.json":"568b9992cf320536a65826e26a414afa5c0d17f083a01af4bd96658d9dd3e705","xiaomi-token-plan-cn.json":"c423857d0bbb0b126394eaf1ebb2a91bf2d1193cc5a4fe77843ff0f4536a0a80","xiaomi-token-plan-sgp.json":"008f1eb41037e93c5ae478f12815cd67bac1978f131ffefa602775bb60b63fea","xiaomi.json":"37acf451bb4364bdca2ecea6b7d962590d9974a87e80cfe34bb800be6a95c13b","zai-coding-cn.json":"d3c969020a7ab978497837a3301c7bca364d704082832221cfe61e6596333e56","zai.json":"f42790c77fb4681a656897a9d860b939916c0ddf979a5f16856bce9573cdf64e"}}
1
+ {"schemaVersion":3,"generatedAt":"2026-09-03T00:41:52.667Z","structureHash":"e1a05e78e77d669b10c32fdccfb5966004ae8cf66182ad8a17cf194ad0d3d084","files":{"alibaba-token-plan.json":"9f9e8f88b1faa2e4134a0d8bcda600531d4d044d64b7ec3d2373f1db46dcf452","amazon-bedrock.json":"c86cdf3eb28122f8682415543012feee0a84dd4a30f03b784dfffde92b0d69f4","ant-ling.json":"4979fe79d99ed97382d7ce40170c6132e932e77906de1eb54464c042e7d63633","anthropic.json":"c5c043d7daef4e179d0c1288683b63e52a88efa581edc9201f327ddefd27265c","azure-openai-responses.json":"37d12c5cbfc29bfd9a802a0516f5d3209320bd4aa8ef9cd7c219af208244afa3","baseten.json":"e4d1ec84e8180a53e21c1511b8d78e497784515c33ba8397382ac3450c8b126e","cerebras.json":"38272a7525d6680c71bb4bb3c4085e871768b400832e2013b0e7fd92f8fd4f05","cloudflare-ai-gateway.json":"eea26bf03ac54766119422ebfe05306b1878ae1cd36dac6a60fe35fe81505139","cloudflare-workers-ai.json":"07ef63208ff7517fd1a80962f18143e21de399640423329490b157f459ccf995","deepseek.json":"e3106724723fd82d48a3ff685da9908a3a7b7b4fd84cc3cfe97a6a23067b6029","fireworks.json":"b3bbc10a86e94accd1d79aaf7c6b753caa346a5d0a7f9690c92acbfd27179ade","github-copilot.json":"61dec9e46df61a9b0bf6c7618651f97bfa9ae609d4c216b5725f014942ca3001","google-vertex.json":"e1631109172dc1f7d7977570420a5bb86258bdd1088427e244a2c51545c4f24d","google.json":"7619bf03edd2a7acb06a2274a14b13c3a61354288abe029a758401d4de36a8fd","groq.json":"e4728fd72e358cd8f25e9a518e9b49a521ef44523d3debe38a7db9e0663c4077","huggingface.json":"4df842498d6e823fc1ad0cd1f06b52c7087d5a340dd38ad4352498d6b3dae1d8","kimi-coding.json":"88150f8970f83e17968b02f3b33fac803b96ebf1474e76437689b7d0f1b69363","minimax-cn.json":"65d37e55a6d9585855f94b3fb7739308d107fe248ebd9e1001d1c5d4606ad2c4","minimax.json":"c7dc5765995ae77242916430929c7cc9a782589f7e483e13f7e01663190d028e","mistral.json":"e3a109306644bf2f2fa38fece50b2d3ce1dbe3b87b1f1b9e2d70cce7eb5c0ea1","moonshotai-cn.json":"dbf1b71ee36812fe64b014177ff455809a8dd852bbbd584422645beb85635127","moonshotai.json":"2d7518b4769e97ac900366175c8b60ff86a02675bb6f6cc2fffcc6761fda6faa","nvidia.json":"ebb630b4a43d4a30d4163a23d6d49bd60c661c2b8f8c1d5b4862ad5b77ece28f","openai-codex.json":"4e4afe2929b2b20a751f2453b219deae4e5b9fd85e147bd0403601f183cfc15f","openai.json":"b014fb0676fec97264eb13b367b0ed73b99915f45410a3dd9a7397a0360c2a4b","opencode-go.json":"2d38500b561528e826b313ab16f1a3fc27999d6cd205fc9fdbef3c82ec98d274","opencode.json":"1a8ccb928714bbee3a75814da7108aa2a9ee05dfb94973f630f11ebb12b40412","opengateway.json":"ea7baf1096fe1488ee080ece109743fe69a8ccc111908a991ca09532efc60e15","openrouter.json":"f59793d123d811708644594d42e729813bbe964dd24bace4eaa789a7851756b4","qwen-token-plan-cn.json":"e62dde34edb603376a1dc60b2a74a9c2605b9e81d81df55cc259796c45aa4793","qwen-token-plan-individual.json":"5649fd4075ada766ec65a7a162cd65f096a7ecc29960ace04b2e6a6a4a995a41","qwen-token-plan.json":"fe914313157ff41ab2f71977f0fdcfedb3a8a205d1092e3180f6799e5d7942fd","together.json":"6010980c9b0af72c60965ae325dbdb21e67c91844a7f7f6f7d71d363f1325f56","vercel-ai-gateway.json":"11ca07d34fa2de782a62f4e1e285de185bff6172e8738a269bd2d3d5a30b08cc","xai.json":"9973aae022723732b8a7ea12107e6fb8b3f1d0e087ec6bbc2ee18f0820595e19","xiaomi-token-plan-ams.json":"568b9992cf320536a65826e26a414afa5c0d17f083a01af4bd96658d9dd3e705","xiaomi-token-plan-cn.json":"c423857d0bbb0b126394eaf1ebb2a91bf2d1193cc5a4fe77843ff0f4536a0a80","xiaomi-token-plan-sgp.json":"008f1eb41037e93c5ae478f12815cd67bac1978f131ffefa602775bb60b63fea","xiaomi.json":"37acf451bb4364bdca2ecea6b7d962590d9974a87e80cfe34bb800be6a95c13b","zai-coding-cn.json":"d3c969020a7ab978497837a3301c7bca364d704082832221cfe61e6596333e56","zai.json":"f42790c77fb4681a656897a9d860b939916c0ddf979a5f16856bce9573cdf64e"}}
@@ -1 +1 @@
1
- {"anthropic-messages":{"accounts/fireworks/models/deepseek-v4-flash-0731":{"id":"accounts/fireworks/models/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":0.22,"output":0.66,"cacheRead":0.007,"cacheWrite":0},"contextWindow":1000000,"maxTokens":384000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/deepseek-v4-pro-0813":{"id":"accounts/fireworks/models/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":1.32,"output":3.96,"cacheRead":0.044,"cacheWrite":0},"contextWindow":1000000,"maxTokens":384000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/glm-5p3":{"id":"accounts/fireworks/models/glm-5p3","name":"GLM 5.3","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false},"thinkingLevelMap":{"off":"none","minimal":null,"low":"high","medium":"high","max":"max"}},"accounts/fireworks/models/glm-5p3-flash":{"id":"accounts/fireworks/models/glm-5p3-flash","name":"GLM 5.3 Flash","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.5,"cacheRead":0.029,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false},"thinkingLevelMap":{"off":"none","minimal":null,"low":"high","medium":"high","max":"max"}},"accounts/fireworks/models/gpt-oss-120b":{"id":"accounts/fireworks/models/gpt-oss-120b","name":"GPT OSS 120B","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.015,"cacheWrite":0},"contextWindow":131072,"maxTokens":32768,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/inkling":{"id":"accounts/fireworks/models/inkling","name":"Inkling","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":1,"output":4.05,"cacheRead":0.17,"cacheWrite":0},"contextWindow":1048576,"maxTokens":1048576,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/kimi-k2p6":{"id":"accounts/fireworks/models/kimi-k2p6","name":"Kimi K2.6","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.95,"output":4,"cacheRead":0.16,"cacheWrite":0},"contextWindow":262000,"maxTokens":262000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/kimi-k2p7-code":{"id":"accounts/fireworks/models/kimi-k2p7-code","name":"Kimi K2.7 Code","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.95,"output":4,"cacheRead":0.19,"cacheWrite":0},"contextWindow":262000,"maxTokens":262000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/minimax-m3":{"id":"accounts/fireworks/models/minimax-m3","name":"MiniMax-M3","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"contextWindow":512000,"maxTokens":512000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/muse-glimmer-30b":{"id":"accounts/fireworks/models/muse-glimmer-30b","name":"Muse Glimmer 30B","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.35,"output":1.5,"cacheRead":0.04,"cacheWrite":0},"contextWindow":131072,"maxTokens":131072,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/nemotron-3-ultra-nvfp4":{"id":"accounts/fireworks/models/nemotron-3-ultra-nvfp4","name":"Nemotron 3 Ultra 550B A55B","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":0.6,"output":2.4,"cacheRead":0.119,"cacheWrite":0},"contextWindow":262144,"maxTokens":128000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b":{"id":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","name":"Nemotron 3.5 Lightning 30B A3B","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":0.05,"output":0.2,"cacheRead":0.01,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/qwen3p7-plus":{"id":"accounts/fireworks/models/qwen3p7-plus","name":"Qwen 3.7 Plus","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.4,"output":1.6,"cacheRead":0.08,"cacheWrite":0},"contextWindow":262144,"maxTokens":65536,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/qwen3p8-max":{"id":"accounts/fireworks/models/qwen3p8-max","name":"Qwen3.8 Max","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":2,"output":6,"cacheRead":0.25,"cacheWrite":0},"contextWindow":262144,"maxTokens":131072,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}}},"openai-completions":{"accounts/fireworks/models/glm-5p2":{"id":"accounts/fireworks/models/glm-5p2","name":"GLM 5.2","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.14,"cacheWrite":0},"contextWindow":1048575,"maxTokens":131072,"api":"openai-completions","baseUrl":"https://api.fireworks.ai/inference/v1","compat":{"supportsStore":false,"supportsDeveloperRole":false,"sendSessionAffinityHeaders":true,"supportsLongCacheRetention":false},"thinkingLevelMap":{"off":"none","minimal":null,"low":"high","medium":"high","high":"high","xhigh":null,"max":"max"}},"accounts/fireworks/models/kimi-k3":{"id":"accounts/fireworks/models/kimi-k3","name":"Kimi K3","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0.3,"cacheWrite":0},"contextWindow":1048576,"maxTokens":131072,"api":"openai-completions","baseUrl":"https://api.fireworks.ai/inference/v1","compat":{"supportsStore":false,"supportsDeveloperRole":false,"sendSessionAffinityHeaders":true,"supportsLongCacheRetention":false,"requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"openai","deferredToolsMode":"kimi"},"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":"max"}},"accounts/fireworks/routers/glm-5p2-fast":{"id":"accounts/fireworks/routers/glm-5p2-fast","name":"GLM 5.2 Fast","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":2.1,"output":6.6,"cacheRead":0.21,"cacheWrite":0},"contextWindow":1048575,"maxTokens":131072,"api":"openai-completions","baseUrl":"https://api.fireworks.ai/inference/v1","compat":{"supportsStore":false,"supportsDeveloperRole":false,"sendSessionAffinityHeaders":true,"supportsLongCacheRetention":false},"thinkingLevelMap":{"off":"none","minimal":null,"low":"high","medium":"high","high":"high","xhigh":null,"max":"max"}},"accounts/fireworks/routers/kimi-k3-fast":{"id":"accounts/fireworks/routers/kimi-k3-fast","name":"Kimi K3 Fast","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":4.5,"output":22.5,"cacheRead":0.45,"cacheWrite":0},"contextWindow":1048576,"maxTokens":131072,"api":"openai-completions","baseUrl":"https://api.fireworks.ai/inference/v1","compat":{"supportsStore":false,"supportsDeveloperRole":false,"sendSessionAffinityHeaders":true,"supportsLongCacheRetention":false,"requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"openai","deferredToolsMode":"kimi"},"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":"max"}}}}
1
+ {"anthropic-messages":{"accounts/fireworks/models/deepseek-v4-flash-0731":{"id":"accounts/fireworks/models/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":0.22,"output":0.66,"cacheRead":0.007,"cacheWrite":0},"contextWindow":1000000,"maxTokens":384000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/deepseek-v4-flash-vision-exp":{"id":"accounts/fireworks/models/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.22,"output":0.66,"cacheRead":0.007,"cacheWrite":0},"contextWindow":1000000,"maxTokens":384000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/deepseek-v4-pro-0813":{"id":"accounts/fireworks/models/deepseek-v4-pro-0813","name":"DeepSeek V4 Pro 0813","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":1.32,"output":3.96,"cacheRead":0.044,"cacheWrite":0},"contextWindow":1000000,"maxTokens":384000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/glm-5p3":{"id":"accounts/fireworks/models/glm-5p3","name":"GLM 5.3","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.26,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false},"thinkingLevelMap":{"off":"none","minimal":null,"low":"high","medium":"high","max":"max"}},"accounts/fireworks/models/glm-5p3-flash":{"id":"accounts/fireworks/models/glm-5p3-flash","name":"GLM 5.3 Flash","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.15,"output":0.5,"cacheRead":0.03,"cacheWrite":0},"contextWindow":1000000,"maxTokens":131072,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false},"thinkingLevelMap":{"off":"none","minimal":null,"low":"high","medium":"high","max":"max"}},"accounts/fireworks/models/gpt-oss-120b":{"id":"accounts/fireworks/models/gpt-oss-120b","name":"GPT OSS 120B","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":0.15,"output":0.6,"cacheRead":0.015,"cacheWrite":0},"contextWindow":131072,"maxTokens":32768,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/inkling":{"id":"accounts/fireworks/models/inkling","name":"Inkling","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":1,"output":4.05,"cacheRead":0.17,"cacheWrite":0},"contextWindow":1048576,"maxTokens":1048576,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/kimi-k2p6":{"id":"accounts/fireworks/models/kimi-k2p6","name":"Kimi K2.6","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.95,"output":4,"cacheRead":0.16,"cacheWrite":0},"contextWindow":262000,"maxTokens":262000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/kimi-k2p7-code":{"id":"accounts/fireworks/models/kimi-k2p7-code","name":"Kimi K2.7 Code","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.95,"output":4,"cacheRead":0.19,"cacheWrite":0},"contextWindow":262000,"maxTokens":262000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/minimax-m3":{"id":"accounts/fireworks/models/minimax-m3","name":"MiniMax-M3","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":1.2,"cacheRead":0.06,"cacheWrite":0},"contextWindow":512000,"maxTokens":512000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/muse-glimmer-30b":{"id":"accounts/fireworks/models/muse-glimmer-30b","name":"Muse Glimmer 30B","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.35,"output":1.5,"cacheRead":0.04,"cacheWrite":0},"contextWindow":131072,"maxTokens":131072,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/nemotron-3-ultra-nvfp4":{"id":"accounts/fireworks/models/nemotron-3-ultra-nvfp4","name":"Nemotron 3 Ultra 550B A55B","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":0.6,"output":2.4,"cacheRead":0.119,"cacheWrite":0},"contextWindow":262144,"maxTokens":128000,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b":{"id":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","name":"Nemotron 3.5 Lightning 30B A3B","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":0.05,"output":0.2,"cacheRead":0.01,"cacheWrite":0},"contextWindow":262144,"maxTokens":262144,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/qwen3p7-plus":{"id":"accounts/fireworks/models/qwen3p7-plus","name":"Qwen 3.7 Plus","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":0.4,"output":1.6,"cacheRead":0.08,"cacheWrite":0},"contextWindow":262144,"maxTokens":65536,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}},"accounts/fireworks/models/qwen3p8-max":{"id":"accounts/fireworks/models/qwen3p8-max","name":"Qwen3.8 Max","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":2,"output":6,"cacheRead":0.25,"cacheWrite":0},"contextWindow":262144,"maxTokens":131072,"api":"anthropic-messages","baseUrl":"https://api.fireworks.ai/inference","compat":{"sendSessionAffinityHeaders":true,"supportsEagerToolInputStreaming":false,"supportsCacheControlOnTools":false,"supportsLongCacheRetention":false}}},"openai-completions":{"accounts/fireworks/models/glm-5p2":{"id":"accounts/fireworks/models/glm-5p2","name":"GLM 5.2","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":1.4,"output":4.4,"cacheRead":0.14,"cacheWrite":0},"contextWindow":1048575,"maxTokens":131072,"api":"openai-completions","baseUrl":"https://api.fireworks.ai/inference/v1","compat":{"supportsStore":false,"supportsDeveloperRole":false,"sendSessionAffinityHeaders":true,"supportsLongCacheRetention":false},"thinkingLevelMap":{"off":"none","minimal":null,"low":"high","medium":"high","high":"high","xhigh":null,"max":"max"}},"accounts/fireworks/models/kimi-k3":{"id":"accounts/fireworks/models/kimi-k3","name":"Kimi K3","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":3,"output":15,"cacheRead":0.3,"cacheWrite":0},"contextWindow":1048576,"maxTokens":131072,"api":"openai-completions","baseUrl":"https://api.fireworks.ai/inference/v1","compat":{"supportsStore":false,"supportsDeveloperRole":false,"sendSessionAffinityHeaders":true,"supportsLongCacheRetention":false,"requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"openai","deferredToolsMode":"kimi"},"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":"max"}},"accounts/fireworks/routers/glm-5p2-fast":{"id":"accounts/fireworks/routers/glm-5p2-fast","name":"GLM 5.2 Fast","provider":"fireworks","reasoning":true,"input":["text"],"cost":{"input":2.1,"output":6.6,"cacheRead":0.21,"cacheWrite":0},"contextWindow":1048575,"maxTokens":131072,"api":"openai-completions","baseUrl":"https://api.fireworks.ai/inference/v1","compat":{"supportsStore":false,"supportsDeveloperRole":false,"sendSessionAffinityHeaders":true,"supportsLongCacheRetention":false},"thinkingLevelMap":{"off":"none","minimal":null,"low":"high","medium":"high","high":"high","xhigh":null,"max":"max"}},"accounts/fireworks/routers/kimi-k3-fast":{"id":"accounts/fireworks/routers/kimi-k3-fast","name":"Kimi K3 Fast","provider":"fireworks","reasoning":true,"input":["text","image"],"cost":{"input":4.5,"output":22.5,"cacheRead":0.45,"cacheWrite":0},"contextWindow":1048576,"maxTokens":131072,"api":"openai-completions","baseUrl":"https://api.fireworks.ai/inference/v1","compat":{"supportsStore":false,"supportsDeveloperRole":false,"sendSessionAffinityHeaders":true,"supportsLongCacheRetention":false,"requiresReasoningContentOnAssistantMessages":true,"thinkingFormat":"openai","deferredToolsMode":"kimi"},"thinkingLevelMap":{"off":null,"minimal":null,"low":"low","medium":"medium","high":"high","xhigh":null,"max":"max"}}}}
@@ -1 +1 @@
1
- {"google-vertex":{"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0.03,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.4,"cacheRead":0.01,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0.05,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"LOW","medium":null,"high":"HIGH"}},"gemini-3.1-pro-preview-customtools":{"id":"gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"LOW","medium":null,"high":"HIGH"}},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":9,"cacheRead":0.15,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0.03,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-flash-latest":{"id":"gemini-flash-latest","name":"Gemini Flash Latest","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":9,"cacheRead":0.15,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-flash-lite-latest":{"id":"gemini-flash-lite-latest","name":"Gemini Flash-Lite Latest","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}}}}
1
+ {"google-vertex":{"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0.03,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.4,"cacheRead":0.01,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0.05,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"LOW","medium":null,"high":"HIGH"}},"gemini-3.1-pro-preview-customtools":{"id":"gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"LOW","medium":null,"high":"HIGH"}},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":9,"cacheRead":0.15,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0.03,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-flash-latest":{"id":"gemini-flash-latest","name":"Gemini Flash Latest","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":9,"cacheRead":0.15,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-flash-lite-latest":{"id":"gemini-flash-lite-latest","name":"Gemini Flash-Lite Latest","api":"google-vertex","provider":"google-vertex","baseUrl":"https://{location}-aiplatform.googleapis.com","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}}}}
@@ -1 +1 @@
1
- {"google-generative-ai":{"deep-research-max-preview-04-2026":{"id":"deep-research-max-preview-04-2026","name":"Deep Research Max Preview (Apr-21-2026)","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536},"deep-research-preview-04-2026":{"id":"deep-research-preview-04-2026","name":"Deep Research Preview (Apr-21-2026)","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536},"gemini-2.5-computer-use-preview-10-2025":{"id":"gemini-2.5-computer-use-preview-10-2025","name":"Gemini 2.5 Computer Use Preview 10-2025","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0.03,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.4,"cacheRead":0.01,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0.05,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-lite-image":{"id":"gemini-3.1-flash-lite-image","name":"Nano Banana 2 Lite","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":30,"cacheRead":0,"cacheWrite":0},"contextWindow":65536,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-lite-preview":{"id":"gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-live-preview":{"id":"gemini-3.1-flash-live-preview","name":"Gemini 3.1 Flash Live Preview","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":4.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"LOW","medium":null,"high":"HIGH"}},"gemini-3.1-pro-preview-customtools":{"id":"gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"LOW","medium":null,"high":"HIGH"}},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":9,"cacheRead":0.15,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0.03,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-flash-latest":{"id":"gemini-flash-latest","name":"Gemini Flash Latest","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":9,"cacheRead":0.15,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-flash-lite-latest":{"id":"gemini-flash-lite-latest","name":"Gemini Flash-Lite Latest","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemma-4-26b-a4b-it":{"id":"gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":32768,"thinkingLevelMap":{"off":null,"minimal":"MINIMAL","low":null,"medium":null,"high":"HIGH"}},"gemma-4-31b-it":{"id":"gemma-4-31b-it","name":"Gemma 4 31B IT","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":32768,"thinkingLevelMap":{"off":null,"minimal":"MINIMAL","low":null,"medium":null,"high":"HIGH"}}}}
1
+ {"google-generative-ai":{"deep-research-max-preview-04-2026":{"id":"deep-research-max-preview-04-2026","name":"Deep Research Max Preview (Apr-21-2026)","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536},"deep-research-preview-04-2026":{"id":"deep-research-preview-04-2026","name":"Deep Research Preview (Apr-21-2026)","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536},"gemini-2.5-computer-use-preview-10-2025":{"id":"gemini-2.5-computer-use-preview-10-2025","name":"Gemini 2.5 Computer Use Preview 10-2025","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536},"gemini-2.5-flash":{"id":"gemini-2.5-flash","name":"Gemini 2.5 Flash","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0.03,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-2.5-flash-lite":{"id":"gemini-2.5-flash-lite","name":"Gemini 2.5 Flash-Lite","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.1,"output":0.4,"cacheRead":0.01,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-2.5-pro":{"id":"gemini-2.5-pro","name":"Gemini 2.5 Pro","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":1.25,"output":10,"cacheRead":0.125,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536},"gemini-3-flash-preview":{"id":"gemini-3-flash-preview","name":"Gemini 3 Flash Preview","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.5,"output":3,"cacheRead":0.05,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-lite":{"id":"gemini-3.1-flash-lite","name":"Gemini 3.1 Flash Lite","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-lite-image":{"id":"gemini-3.1-flash-lite-image","name":"Nano Banana 2 Lite","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":30,"cacheRead":0,"cacheWrite":0},"contextWindow":65536,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-lite-preview":{"id":"gemini-3.1-flash-lite-preview","name":"Gemini 3.1 Flash Lite Preview","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-flash-live-preview":{"id":"gemini-3.1-flash-live-preview","name":"Gemini 3.1 Flash Live Preview","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":4.5,"cacheRead":0,"cacheWrite":0},"contextWindow":131072,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.1-pro-preview":{"id":"gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"LOW","medium":null,"high":"HIGH"}},"gemini-3.1-pro-preview-customtools":{"id":"gemini-3.1-pro-preview-customtools","name":"Gemini 3.1 Pro Preview Custom Tools","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":2,"output":12,"cacheRead":0.2,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null,"minimal":null,"low":"LOW","medium":null,"high":"HIGH"}},"gemini-3.5-flash":{"id":"gemini-3.5-flash","name":"Gemini 3.5 Flash","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":9,"cacheRead":0.15,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.5-flash-lite":{"id":"gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.3,"output":2.5,"cacheRead":0.03,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.6-flash":{"id":"gemini-3.6-flash","name":"Gemini 3.6 Flash","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.7-flash":{"id":"gemini-3.7-flash","name":"Gemini 3.7 Flash","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-3.8-flash":{"id":"gemini-3.8-flash","name":"Gemini 3.8 Flash","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.75,"output":3.75,"cacheRead":0.075,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-flash-latest":{"id":"gemini-flash-latest","name":"Gemini Flash Latest","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":1.5,"output":9,"cacheRead":0.15,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemini-flash-lite-latest":{"id":"gemini-flash-lite-latest","name":"Gemini Flash-Lite Latest","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0.25,"output":1.5,"cacheRead":0.025,"cacheWrite":0},"contextWindow":1048576,"maxTokens":65536,"thinkingLevelMap":{"off":null}},"gemma-4-26b-a4b-it":{"id":"gemma-4-26b-a4b-it","name":"Gemma 4 26B A4B IT","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":32768,"thinkingLevelMap":{"off":null,"minimal":"MINIMAL","low":null,"medium":null,"high":"HIGH"}},"gemma-4-31b-it":{"id":"gemma-4-31b-it","name":"Gemma 4 31B IT","api":"google-generative-ai","provider":"google","baseUrl":"https://generativelanguage.googleapis.com/v1beta","reasoning":true,"input":["text","image"],"cost":{"input":0,"output":0,"cacheRead":0,"cacheWrite":0},"contextWindow":262144,"maxTokens":32768,"thinkingLevelMap":{"off":null,"minimal":"MINIMAL","low":null,"medium":null,"high":"HIGH"}}}}