nodal-agents 0.7.8 → 0.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/cli.js +35 -15
- package/package.json +1 -1
- package/runner.js +130 -24
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/app-path-routes-manifest.json +8 -8
- package/web/.next/build-manifest.json +2 -2
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/server/app/(dashboard)/agents/[id]/channels/page.js +2 -2
- package/web/.next/server/app/(dashboard)/agents/[id]/channels/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/agents/[id]/channels/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/agents/[id]/edit/page.js +5 -5
- package/web/.next/server/app/(dashboard)/agents/[id]/edit/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/agents/[id]/edit/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page.js +1 -1
- package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/agents/page.js +2 -2
- package/web/.next/server/app/(dashboard)/agents/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/agents/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/approvals/page.js +2 -2
- package/web/.next/server/app/(dashboard)/approvals/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/approvals/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/automations/page.js +2 -2
- package/web/.next/server/app/(dashboard)/automations/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/automations/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/chat/page.js +2 -2
- package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/connectors/page.js +2 -2
- package/web/.next/server/app/(dashboard)/connectors/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/connectors/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/credentials/page.js +2 -2
- package/web/.next/server/app/(dashboard)/credentials/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/credentials/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/jobs/[id]/page.js +2 -2
- package/web/.next/server/app/(dashboard)/jobs/[id]/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/jobs/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/jobs/page.js +2 -2
- package/web/.next/server/app/(dashboard)/jobs/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/jobs/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/learned-skills/page.js +2 -2
- package/web/.next/server/app/(dashboard)/learned-skills/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/learned-skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/llm-providers/page.js +2 -2
- package/web/.next/server/app/(dashboard)/llm-providers/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/llm-providers/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/logs/page.js +2 -2
- package/web/.next/server/app/(dashboard)/logs/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/logs/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/mcp/page.js +2 -2
- package/web/.next/server/app/(dashboard)/mcp/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/mcp/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/memories/page.js +2 -2
- package/web/.next/server/app/(dashboard)/memories/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/memories/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/page.js +4 -4
- package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/settings/page.js +2 -2
- package/web/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/settings/root-context/page.js +2 -2
- package/web/.next/server/app/(dashboard)/settings/root-context/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/settings/root-context/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/skills/[id]/edit/page.js +2 -2
- package/web/.next/server/app/(dashboard)/skills/[id]/edit/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/skills/[id]/edit/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/skills/new/page.js +1 -1
- package/web/.next/server/app/(dashboard)/skills/new/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/skills/new/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(dashboard)/skills/page.js +2 -2
- package/web/.next/server/app/(dashboard)/skills/page.js.nft.json +1 -1
- package/web/.next/server/app/(dashboard)/skills/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error/page.js +2 -2
- package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_index.segment.rsc +3 -3
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page.js +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/server/app/_not-found.rsc +4 -4
- package/web/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
- package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/web/.next/server/app/login/page.js +2 -2
- package/web/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/onboarding/page.js +53 -53
- package/web/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app-paths-manifest.json +8 -8
- package/web/.next/server/chunks/1957.js +1 -0
- package/web/.next/server/chunks/2313.js +1 -0
- package/web/.next/server/chunks/2314.js +1 -0
- package/web/.next/server/chunks/2747.js +1 -0
- package/web/.next/server/chunks/3422.js +1 -0
- package/web/.next/server/chunks/3847.js +3 -3
- package/web/.next/server/chunks/4162.js +1 -1
- package/web/.next/server/chunks/4574.js +1 -1
- package/web/.next/server/chunks/4761.js +1 -0
- package/web/.next/server/chunks/5128.js +1 -0
- package/web/.next/server/chunks/6128.js +1 -0
- package/web/.next/server/chunks/7124.js +2 -2
- package/web/.next/server/chunks/9000.js +1 -0
- package/web/.next/server/chunks/9857.js +1 -0
- package/web/.next/server/middleware-build-manifest.js +1 -1
- package/web/.next/server/pages/404.html +1 -1
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +1 -1
- package/web/.next/static/chunks/2281-928529ce483ceb72.js +1 -0
- package/web/.next/static/chunks/2406-66d8aa55b97d75c3.js +1 -0
- package/web/.next/static/chunks/3966-679a4c07d6db8ee6.js +1 -0
- package/web/.next/static/chunks/4766-0433c4d93110e059.js +1 -0
- package/web/.next/static/chunks/7357-df6d26fbdbae296b.js +1 -0
- package/web/.next/static/chunks/{2491-cc8dee1fc55e1e38.js → 7536-169aab9ed2feeab6.js} +1 -1
- package/web/.next/static/chunks/7831-b5f0e41f306942cc.js +1 -0
- package/web/.next/static/chunks/8719-8ab59c5faa49c9ab.js +1 -0
- package/web/.next/static/chunks/8943-8619f44ee3282119.js +1 -0
- package/web/.next/static/chunks/8992-1b711ff6a77d023a.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/agents/[id]/channels/page-5c6067025edafbc0.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/agents/[id]/edit/page-fc4002bde145810b.js +6 -0
- package/web/.next/static/chunks/app/(dashboard)/agents/page-be616beb457238ca.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/approvals/page-ca87808aaa42a079.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/automations/page-88c5b2061235936a.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/chat/page-197ee8afc4ef48b2.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/connectors/page-7bee350e3c9d4682.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/credentials/page-567d0e2e3c255976.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/jobs/[id]/page-2a5d3e0fd5248864.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/jobs/page-0d50850f43cb7ccb.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/layout-7f9bdb14405ef107.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/learned-skills/page-17878b5d662400b2.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/llm-providers/page-e38d2642e44278b1.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/logs/page-7ac6dbdcd9cf7042.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/mcp/page-a5b036571bb575b8.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/memories/page-1d7007962535c0db.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/page-55efec02eb59c413.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/settings/page-db76b2ad9934ead0.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/settings/root-context/page-5ffdba723e59a369.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/skills/[id]/edit/page-eaa016de6c6d8b02.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/skills/new/page-07669c2c3c9e3b0e.js +1 -0
- package/web/.next/static/chunks/app/(dashboard)/skills/page-393ec6f04d00e50f.js +1 -0
- package/web/.next/static/chunks/app/error-5e6b38c936ae1a78.js +1 -0
- package/web/.next/static/chunks/app/login/page-1063bbdf158045cf.js +1 -0
- package/web/.next/static/chunks/app/onboarding/page-799f8658aea94b41.js +26 -0
- package/web/.next/static/css/110d6e5ec0dc635f.css +3 -0
- package/web/.next/server/chunks/6823.js +0 -1
- package/web/.next/server/chunks/715.js +0 -1
- package/web/.next/server/chunks/8308.js +0 -1
- package/web/.next/server/chunks/8430.js +0 -1
- package/web/.next/static/chunks/1361-5bc59efe9312f6ad.js +0 -1
- package/web/.next/static/chunks/2716-55970bc6e3910ccf.js +0 -1
- package/web/.next/static/chunks/370-554f47928c2648ee.js +0 -1
- package/web/.next/static/chunks/3865-9aa6dedee678d08f.js +0 -1
- package/web/.next/static/chunks/9775-dad785c12d658539.js +0 -1
- package/web/.next/static/chunks/9836-5beba80ab70ed698.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/agents/[id]/channels/page-f2413d131f4e0bdf.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/agents/[id]/edit/page-5ab1dcbc58720645.js +0 -6
- package/web/.next/static/chunks/app/(dashboard)/agents/page-6ac1ebd6598d7da7.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/approvals/page-76247d88c06bf203.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/automations/page-901227b6d047b2b7.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/chat/page-72f0688180411e7e.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/connectors/page-59b11d68fd1107c3.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/credentials/page-445228b74058e9c2.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/jobs/[id]/page-d7153b1b30dc6b78.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/jobs/page-65cb4b9970d04210.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/layout-16531dffd6974eb5.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/learned-skills/page-0211eb7caae5531d.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/llm-providers/page-c06f48cf0fbe5d63.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/logs/page-5080105f905f2d05.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/mcp/page-1aed0a1ab4459e69.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/memories/page-addb7eb81a34188b.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/page-5e99a1628397f82c.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/settings/page-ffff6582f6a33a65.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/settings/root-context/page-f42cc0aff627bd35.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/skills/[id]/edit/page-6022f41d61c64f4f.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/skills/new/page-a421b5020aa53715.js +0 -1
- package/web/.next/static/chunks/app/(dashboard)/skills/page-e8f83c423960e91d.js +0 -1
- package/web/.next/static/chunks/app/error-dc3b2db3bdb5b34e.js +0 -1
- package/web/.next/static/chunks/app/login/page-a6993d175f94d322.js +0 -1
- package/web/.next/static/chunks/app/onboarding/page-9619ad033b220394.js +0 -26
- package/web/.next/static/css/637b48680bc0d57a.css +0 -3
- /package/web/.next/static/{29LavAHsyomtNE9YjHNlk → xZ_yeD2bqK-_EOEqMMFYk}/_buildManifest.js +0 -0
- /package/web/.next/static/{29LavAHsyomtNE9YjHNlk → xZ_yeD2bqK-_EOEqMMFYk}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ A self-hosted platform for building and orchestrating a **team of AI agents** on
|
|
|
10
10
|
[](https://nodejs.org)
|
|
11
11
|
[](https://www.typescriptlang.org)
|
|
12
12
|
[](https://kwintspiracy.github.io/nodal-agents/)
|
|
13
|
-
[](CHANGELOG.md)
|
|
14
14
|
|
|
15
15
|
| Home dashboard — light theme | Agent detail — dark theme |
|
|
16
16
|
| :---: | :---: |
|
package/cli.js
CHANGED
|
@@ -12216,17 +12216,30 @@ var init_model_catalog = __esm({
|
|
|
12216
12216
|
contextWindow: 4e5
|
|
12217
12217
|
}
|
|
12218
12218
|
],
|
|
12219
|
+
// ─── Native Google (generativelanguage.googleapis.com) ──────────────────────
|
|
12220
|
+
// gemini-2.0-flash and gemini-2.5-pro were verified live (2026-07-12, real
|
|
12221
|
+
// key) to 404 / be shut down — dropped per product decision (family 3.x
|
|
12222
|
+
// only in the native catalog; gemini-2.5-flash deliberately NOT added).
|
|
12223
|
+
// Both entries below confirmed alive via ai.google.dev/gemini-api/docs/models
|
|
12224
|
+
// and openrouter.ai/google/… (2026-07-12): 1M-token context window, native
|
|
12225
|
+
// reasoning ("thinking") models, multimodal (text/image/video/audio/PDF).
|
|
12226
|
+
// forcedToolChoice:false — matches this file's reasoning-model convention
|
|
12227
|
+
// (MiniMax M3, Moonshot, GLM 5.2): don't force tool_choice on a thinking
|
|
12228
|
+
// model, let the runtime completion floor relax it to 'auto'. google.ts's
|
|
12229
|
+
// fetch shim injects generationConfig.thinkingConfig for these two entries
|
|
12230
|
+
// (reasoning:true gates it) so the API returns the chain-of-thought the
|
|
12231
|
+
// execute.ts round-trip needs across tool-call turns.
|
|
12219
12232
|
google: [
|
|
12220
12233
|
{
|
|
12221
|
-
modelId: "gemini-
|
|
12222
|
-
label: "Gemini
|
|
12223
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
12234
|
+
modelId: "gemini-3.5-flash",
|
|
12235
|
+
label: "Gemini 3.5 Flash",
|
|
12236
|
+
capabilities: { tools: true, forcedToolChoice: false, reasoning: true },
|
|
12224
12237
|
contextWindow: 1048576
|
|
12225
12238
|
},
|
|
12226
12239
|
{
|
|
12227
|
-
modelId: "gemini-
|
|
12228
|
-
label: "Gemini
|
|
12229
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
12240
|
+
modelId: "gemini-3.1-pro-preview",
|
|
12241
|
+
label: "Gemini 3.1 Pro (preview)",
|
|
12242
|
+
capabilities: { tools: true, forcedToolChoice: false, reasoning: true },
|
|
12230
12243
|
contextWindow: 1048576
|
|
12231
12244
|
}
|
|
12232
12245
|
],
|
|
@@ -12314,23 +12327,30 @@ var init_model_catalog = __esm({
|
|
|
12314
12327
|
contextWindow: 1048576,
|
|
12315
12328
|
providerOrder: ["deepseek"]
|
|
12316
12329
|
},
|
|
12317
|
-
// Google
|
|
12330
|
+
// Google — all three are thinking models on OpenRouter (supported_parameters
|
|
12331
|
+
// includes "reasoning", verified via openrouter.ai/google/… 2026-07-12).
|
|
12332
|
+
// reasoning:true makes the OpenRouter provider enable reasoning + round-trip
|
|
12333
|
+
// reasoning_details across tool-call turns. Unlike the M-series/Kimi/GLM
|
|
12334
|
+
// reasoning entries above, forcedToolChoice stays true here — no evidence
|
|
12335
|
+
// (live or documented) that OpenRouter's Gemini routes reject a forced
|
|
12336
|
+
// tool_choice, matching how deepseek/deepseek-v4-flash (also reasoning:true)
|
|
12337
|
+
// keeps forcedToolChoice:true in this file.
|
|
12318
12338
|
{
|
|
12319
12339
|
modelId: "google/gemini-3.1-flash-lite-preview",
|
|
12320
12340
|
label: "Gemini 3.1 Flash Lite (preview)",
|
|
12321
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
12341
|
+
capabilities: { tools: true, forcedToolChoice: true, reasoning: true },
|
|
12322
12342
|
contextWindow: 1048576
|
|
12323
12343
|
},
|
|
12324
12344
|
{
|
|
12325
12345
|
modelId: "google/gemini-3.1-pro-preview",
|
|
12326
12346
|
label: "Gemini 3.1 Pro (preview)",
|
|
12327
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
12347
|
+
capabilities: { tools: true, forcedToolChoice: true, reasoning: true },
|
|
12328
12348
|
contextWindow: 1048576
|
|
12329
12349
|
},
|
|
12330
12350
|
{
|
|
12331
12351
|
modelId: "google/gemini-3.5-flash",
|
|
12332
12352
|
label: "Gemini 3.5 Flash",
|
|
12333
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
12353
|
+
capabilities: { tools: true, forcedToolChoice: true, reasoning: true },
|
|
12334
12354
|
contextWindow: 1048576
|
|
12335
12355
|
},
|
|
12336
12356
|
{
|
|
@@ -12408,8 +12428,8 @@ var init_model_catalog = __esm({
|
|
|
12408
12428
|
"claude-haiku-4-5-20251001",
|
|
12409
12429
|
"gpt-5",
|
|
12410
12430
|
"gpt-5-mini",
|
|
12411
|
-
"gemini-
|
|
12412
|
-
"gemini-
|
|
12431
|
+
"gemini-3.5-flash",
|
|
12432
|
+
"gemini-3.1-pro-preview",
|
|
12413
12433
|
"mistral-large-latest",
|
|
12414
12434
|
"MiniMax-M3",
|
|
12415
12435
|
"kimi-k2.6",
|
|
@@ -14753,13 +14773,13 @@ async function waitForHealth(url, timeoutMs = 3e4) {
|
|
|
14753
14773
|
}
|
|
14754
14774
|
throw new Error(`Service at ${url} did not become healthy within ${timeoutMs}ms`);
|
|
14755
14775
|
}
|
|
14756
|
-
async function assertWebRenders(url, timeoutMs =
|
|
14776
|
+
async function assertWebRenders(url, timeoutMs = 3e5) {
|
|
14757
14777
|
const deadline = Date.now() + timeoutMs;
|
|
14758
14778
|
let lastStatus = 0;
|
|
14759
14779
|
while (Date.now() < deadline) {
|
|
14760
14780
|
try {
|
|
14761
14781
|
const controller = new AbortController();
|
|
14762
|
-
const t = setTimeout(() => controller.abort(),
|
|
14782
|
+
const t = setTimeout(() => controller.abort(), 6e4);
|
|
14763
14783
|
const res = await fetch(`${url}/`, { signal: controller.signal });
|
|
14764
14784
|
clearTimeout(t);
|
|
14765
14785
|
lastStatus = res.status;
|
|
@@ -14984,7 +15004,7 @@ async function runUp(opts = {}) {
|
|
|
14984
15004
|
waitForHealth(runnerUrl, runnerHealthMs),
|
|
14985
15005
|
waitForHealth(webUrl, webHealthMs)
|
|
14986
15006
|
]);
|
|
14987
|
-
await assertWebRenders(webUrl);
|
|
15007
|
+
await assertWebRenders(webUrl, webHealthMs);
|
|
14988
15008
|
healthSpinner.succeed(chalk.green("All services healthy"));
|
|
14989
15009
|
} catch (err) {
|
|
14990
15010
|
healthSpinner.fail("Health check timed out");
|
package/package.json
CHANGED
package/runner.js
CHANGED
|
@@ -1438,17 +1438,30 @@ var init_model_catalog = __esm({
|
|
|
1438
1438
|
contextWindow: 4e5
|
|
1439
1439
|
}
|
|
1440
1440
|
],
|
|
1441
|
+
// ─── Native Google (generativelanguage.googleapis.com) ──────────────────────
|
|
1442
|
+
// gemini-2.0-flash and gemini-2.5-pro were verified live (2026-07-12, real
|
|
1443
|
+
// key) to 404 / be shut down — dropped per product decision (family 3.x
|
|
1444
|
+
// only in the native catalog; gemini-2.5-flash deliberately NOT added).
|
|
1445
|
+
// Both entries below confirmed alive via ai.google.dev/gemini-api/docs/models
|
|
1446
|
+
// and openrouter.ai/google/… (2026-07-12): 1M-token context window, native
|
|
1447
|
+
// reasoning ("thinking") models, multimodal (text/image/video/audio/PDF).
|
|
1448
|
+
// forcedToolChoice:false — matches this file's reasoning-model convention
|
|
1449
|
+
// (MiniMax M3, Moonshot, GLM 5.2): don't force tool_choice on a thinking
|
|
1450
|
+
// model, let the runtime completion floor relax it to 'auto'. google.ts's
|
|
1451
|
+
// fetch shim injects generationConfig.thinkingConfig for these two entries
|
|
1452
|
+
// (reasoning:true gates it) so the API returns the chain-of-thought the
|
|
1453
|
+
// execute.ts round-trip needs across tool-call turns.
|
|
1441
1454
|
google: [
|
|
1442
1455
|
{
|
|
1443
|
-
modelId: "gemini-
|
|
1444
|
-
label: "Gemini
|
|
1445
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
1456
|
+
modelId: "gemini-3.5-flash",
|
|
1457
|
+
label: "Gemini 3.5 Flash",
|
|
1458
|
+
capabilities: { tools: true, forcedToolChoice: false, reasoning: true },
|
|
1446
1459
|
contextWindow: 1048576
|
|
1447
1460
|
},
|
|
1448
1461
|
{
|
|
1449
|
-
modelId: "gemini-
|
|
1450
|
-
label: "Gemini
|
|
1451
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
1462
|
+
modelId: "gemini-3.1-pro-preview",
|
|
1463
|
+
label: "Gemini 3.1 Pro (preview)",
|
|
1464
|
+
capabilities: { tools: true, forcedToolChoice: false, reasoning: true },
|
|
1452
1465
|
contextWindow: 1048576
|
|
1453
1466
|
}
|
|
1454
1467
|
],
|
|
@@ -1536,23 +1549,30 @@ var init_model_catalog = __esm({
|
|
|
1536
1549
|
contextWindow: 1048576,
|
|
1537
1550
|
providerOrder: ["deepseek"]
|
|
1538
1551
|
},
|
|
1539
|
-
// Google
|
|
1552
|
+
// Google — all three are thinking models on OpenRouter (supported_parameters
|
|
1553
|
+
// includes "reasoning", verified via openrouter.ai/google/… 2026-07-12).
|
|
1554
|
+
// reasoning:true makes the OpenRouter provider enable reasoning + round-trip
|
|
1555
|
+
// reasoning_details across tool-call turns. Unlike the M-series/Kimi/GLM
|
|
1556
|
+
// reasoning entries above, forcedToolChoice stays true here — no evidence
|
|
1557
|
+
// (live or documented) that OpenRouter's Gemini routes reject a forced
|
|
1558
|
+
// tool_choice, matching how deepseek/deepseek-v4-flash (also reasoning:true)
|
|
1559
|
+
// keeps forcedToolChoice:true in this file.
|
|
1540
1560
|
{
|
|
1541
1561
|
modelId: "google/gemini-3.1-flash-lite-preview",
|
|
1542
1562
|
label: "Gemini 3.1 Flash Lite (preview)",
|
|
1543
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
1563
|
+
capabilities: { tools: true, forcedToolChoice: true, reasoning: true },
|
|
1544
1564
|
contextWindow: 1048576
|
|
1545
1565
|
},
|
|
1546
1566
|
{
|
|
1547
1567
|
modelId: "google/gemini-3.1-pro-preview",
|
|
1548
1568
|
label: "Gemini 3.1 Pro (preview)",
|
|
1549
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
1569
|
+
capabilities: { tools: true, forcedToolChoice: true, reasoning: true },
|
|
1550
1570
|
contextWindow: 1048576
|
|
1551
1571
|
},
|
|
1552
1572
|
{
|
|
1553
1573
|
modelId: "google/gemini-3.5-flash",
|
|
1554
1574
|
label: "Gemini 3.5 Flash",
|
|
1555
|
-
capabilities: { tools: true, forcedToolChoice: true },
|
|
1575
|
+
capabilities: { tools: true, forcedToolChoice: true, reasoning: true },
|
|
1556
1576
|
contextWindow: 1048576
|
|
1557
1577
|
},
|
|
1558
1578
|
{
|
|
@@ -1630,8 +1650,8 @@ var init_model_catalog = __esm({
|
|
|
1630
1650
|
"claude-haiku-4-5-20251001",
|
|
1631
1651
|
"gpt-5",
|
|
1632
1652
|
"gpt-5-mini",
|
|
1633
|
-
"gemini-
|
|
1634
|
-
"gemini-
|
|
1653
|
+
"gemini-3.5-flash",
|
|
1654
|
+
"gemini-3.1-pro-preview",
|
|
1635
1655
|
"mistral-large-latest",
|
|
1636
1656
|
"MiniMax-M3",
|
|
1637
1657
|
"kimi-k2.6",
|
|
@@ -206109,11 +206129,51 @@ function buildOpenAICompatibleModel(config) {
|
|
|
206109
206129
|
}
|
|
206110
206130
|
|
|
206111
206131
|
// ../../packages/llm/src/providers/google.ts
|
|
206132
|
+
init_src();
|
|
206112
206133
|
import { createGoogleGenerativeAI } from "@ai-sdk/google";
|
|
206134
|
+
var GOOGLE_HOSTS = /* @__PURE__ */ new Set(["generativelanguage.googleapis.com"]);
|
|
206135
|
+
function requestHost(input) {
|
|
206136
|
+
try {
|
|
206137
|
+
if (typeof input === "string") return new URL(input).host;
|
|
206138
|
+
if (input instanceof URL) return input.host;
|
|
206139
|
+
return new URL(input.url).host;
|
|
206140
|
+
} catch {
|
|
206141
|
+
return void 0;
|
|
206142
|
+
}
|
|
206143
|
+
}
|
|
206144
|
+
function injectGoogleThinking(body) {
|
|
206145
|
+
if (typeof body !== "object" || body === null) return body;
|
|
206146
|
+
const b = body;
|
|
206147
|
+
const generationConfig = typeof b["generationConfig"] === "object" && b["generationConfig"] !== null ? b["generationConfig"] : {};
|
|
206148
|
+
if (generationConfig["thinkingConfig"] === void 0) {
|
|
206149
|
+
generationConfig["thinkingConfig"] = { includeThoughts: true };
|
|
206150
|
+
}
|
|
206151
|
+
b["generationConfig"] = generationConfig;
|
|
206152
|
+
return body;
|
|
206153
|
+
}
|
|
206154
|
+
function createGoogleFetch(opts, baseFetch = globalThis.fetch) {
|
|
206155
|
+
return async (input, init2) => {
|
|
206156
|
+
const host = requestHost(input);
|
|
206157
|
+
if (!opts.injectThinking || !host || !GOOGLE_HOSTS.has(host) || !init2?.body) {
|
|
206158
|
+
return baseFetch(input, init2);
|
|
206159
|
+
}
|
|
206160
|
+
let patchedInit = init2;
|
|
206161
|
+
try {
|
|
206162
|
+
const rawBody = typeof init2.body === "string" ? init2.body : await new Response(init2.body).text();
|
|
206163
|
+
const patched = injectGoogleThinking(JSON.parse(rawBody));
|
|
206164
|
+
patchedInit = { ...init2, body: JSON.stringify(patched) };
|
|
206165
|
+
} catch {
|
|
206166
|
+
}
|
|
206167
|
+
return baseFetch(input, patchedInit);
|
|
206168
|
+
};
|
|
206169
|
+
}
|
|
206113
206170
|
function buildGoogleModel(config) {
|
|
206171
|
+
const entry = findModelCatalogEntry("google", config.model);
|
|
206172
|
+
const isReasoning = entry?.capabilities.reasoning === true;
|
|
206114
206173
|
const provider = createGoogleGenerativeAI({
|
|
206115
206174
|
apiKey: config.apiKey,
|
|
206116
|
-
...config.baseURL ? { baseURL: config.baseURL } : {}
|
|
206175
|
+
...config.baseURL ? { baseURL: config.baseURL } : {},
|
|
206176
|
+
fetch: createGoogleFetch({ injectThinking: isReasoning })
|
|
206117
206177
|
});
|
|
206118
206178
|
return provider(config.model);
|
|
206119
206179
|
}
|
|
@@ -206346,7 +206406,13 @@ var nodalToolCallMiddleware = createNativeToolCallMiddleware(nodalNativeParser);
|
|
|
206346
206406
|
// ../../packages/llm/src/providers/moonshot-schema.ts
|
|
206347
206407
|
var SCHEMA_MAP_KEYS = /* @__PURE__ */ new Set(["properties", "patternProperties", "$defs", "definitions"]);
|
|
206348
206408
|
var SCHEMA_LIST_KEYS = /* @__PURE__ */ new Set(["anyOf", "oneOf", "allOf", "prefixItems"]);
|
|
206349
|
-
var SCHEMA_NODE_KEYS = /* @__PURE__ */ new Set([
|
|
206409
|
+
var SCHEMA_NODE_KEYS = /* @__PURE__ */ new Set([
|
|
206410
|
+
"items",
|
|
206411
|
+
"contains",
|
|
206412
|
+
"not",
|
|
206413
|
+
"additionalProperties",
|
|
206414
|
+
"propertyNames"
|
|
206415
|
+
]);
|
|
206350
206416
|
function isPlainObject(value) {
|
|
206351
206417
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
206352
206418
|
}
|
|
@@ -206712,7 +206778,7 @@ function buildMiniMaxModel(config) {
|
|
|
206712
206778
|
init_src();
|
|
206713
206779
|
import { createOpenAICompatible as createOpenAICompatible2 } from "@ai-sdk/openai-compatible";
|
|
206714
206780
|
var MOONSHOT_HOSTS = /* @__PURE__ */ new Set(["api.moonshot.ai", "api.moonshot.cn"]);
|
|
206715
|
-
function
|
|
206781
|
+
function requestHost2(input) {
|
|
206716
206782
|
try {
|
|
206717
206783
|
if (typeof input === "string") return new URL(input).host;
|
|
206718
206784
|
if (input instanceof URL) return input.host;
|
|
@@ -206737,7 +206803,7 @@ function patchMoonshotRequestBody(body, opts) {
|
|
|
206737
206803
|
function createMoonshotFetch(opts, baseFetch = globalThis.fetch) {
|
|
206738
206804
|
const tolerant = createTolerantFetch(baseFetch);
|
|
206739
206805
|
return async (input, init2) => {
|
|
206740
|
-
const host =
|
|
206806
|
+
const host = requestHost2(input);
|
|
206741
206807
|
if (!host || !MOONSHOT_HOSTS.has(host) || !init2?.body) {
|
|
206742
206808
|
return tolerant(input, init2);
|
|
206743
206809
|
}
|
|
@@ -335522,7 +335588,32 @@ async function resolveRecipientChatId(explicitChatId, ctx, noRecipientErrorName,
|
|
|
335522
335588
|
return chatId;
|
|
335523
335589
|
}
|
|
335524
335590
|
async function assertLocalSourceAllowed(source, ctx) {
|
|
335525
|
-
|
|
335591
|
+
let candidate = source;
|
|
335592
|
+
if (!path.isAbsolute(source)) {
|
|
335593
|
+
try {
|
|
335594
|
+
candidate = await resolveAndCheckPath(ctx, source);
|
|
335595
|
+
} catch (err) {
|
|
335596
|
+
if (err instanceof WorkspaceError) {
|
|
335597
|
+
const wrapped = new Error(`source_path_not_allowed: ${err.message}`);
|
|
335598
|
+
wrapped.name = "source_path_not_allowed";
|
|
335599
|
+
throw wrapped;
|
|
335600
|
+
}
|
|
335601
|
+
throw err;
|
|
335602
|
+
}
|
|
335603
|
+
}
|
|
335604
|
+
let real3;
|
|
335605
|
+
try {
|
|
335606
|
+
real3 = await realpath3(candidate);
|
|
335607
|
+
} catch (err) {
|
|
335608
|
+
if (err.code === "ENOENT") {
|
|
335609
|
+
const wrapped = new Error(
|
|
335610
|
+
path.isAbsolute(source) ? `source_path_not_allowed: no file found at "${source}".` : `source_path_not_allowed: no file found at workspace-relative path "${source}" (resolved to "${candidate}").`
|
|
335611
|
+
);
|
|
335612
|
+
wrapped.name = "source_path_not_allowed";
|
|
335613
|
+
throw wrapped;
|
|
335614
|
+
}
|
|
335615
|
+
throw err;
|
|
335616
|
+
}
|
|
335526
335617
|
const roots = [
|
|
335527
335618
|
...(ctx.workspaces ?? []).map((w) => w.path),
|
|
335528
335619
|
...ctx.skillStoreDir ? [ctx.skillStoreDir] : [],
|
|
@@ -354179,17 +354270,21 @@ ${notice}` : notice;
|
|
|
354179
354270
|
return part.providerMetadata != null && part.providerOptions == null ? { ...p, providerOptions: part.providerMetadata } : p;
|
|
354180
354271
|
});
|
|
354181
354272
|
const hasText = (response.text ?? "").trim().length > 0;
|
|
354273
|
+
const toolCallParts = rawToolCalls.map((tc) => {
|
|
354274
|
+
const base = {
|
|
354275
|
+
type: "tool-call",
|
|
354276
|
+
toolCallId: tc.toolCallId,
|
|
354277
|
+
toolName: tc.toolName,
|
|
354278
|
+
input: tc.input
|
|
354279
|
+
};
|
|
354280
|
+
return tc.providerMetadata != null ? { ...base, providerOptions: tc.providerMetadata } : base;
|
|
354281
|
+
});
|
|
354182
354282
|
const assistantMsg = {
|
|
354183
354283
|
role: "assistant",
|
|
354184
354284
|
content: rawToolCalls.length > 0 ? [
|
|
354185
354285
|
...reasoningParts,
|
|
354186
354286
|
...hasText ? [{ type: "text", text: response.text || "" }] : [],
|
|
354187
|
-
...
|
|
354188
|
-
type: "tool-call",
|
|
354189
|
-
toolCallId: tc.toolCallId,
|
|
354190
|
-
toolName: tc.toolName,
|
|
354191
|
-
input: tc.input
|
|
354192
|
-
}))
|
|
354287
|
+
...toolCallParts
|
|
354193
354288
|
] : reasoningParts.length > 0 ? [...reasoningParts, { type: "text", text: response.text || "" }] : response.text || ""
|
|
354194
354289
|
};
|
|
354195
354290
|
messages = [...messages, assistantMsg];
|
|
@@ -359351,7 +359446,18 @@ function startSlackSocket(opts) {
|
|
|
359351
359446
|
);
|
|
359352
359447
|
});
|
|
359353
359448
|
});
|
|
359354
|
-
void app.start().
|
|
359449
|
+
void app.start().then(async () => {
|
|
359450
|
+
try {
|
|
359451
|
+
const identity = await app.client.auth.test();
|
|
359452
|
+
console.warn(
|
|
359453
|
+
`[slack-socket agent=${agentId}] connected (socket mode) as ${identity.user ?? "unknown"} (team=${identity.team ?? "unknown"})`
|
|
359454
|
+
);
|
|
359455
|
+
} catch (err) {
|
|
359456
|
+
console.warn(
|
|
359457
|
+
`[slack-socket agent=${agentId}] connected (socket mode), but auth.test failed: ${err instanceof Error ? err.message : String(err)}`
|
|
359458
|
+
);
|
|
359459
|
+
}
|
|
359460
|
+
}).catch((err) => {
|
|
359355
359461
|
console.warn(
|
|
359356
359462
|
`[slack-socket agent=${agentId}] start failed (invalid token(s)?): ${err instanceof Error ? err.message : String(err)}; will retry on the manager's next refresh`
|
|
359357
359463
|
);
|
package/web/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
xZ_yeD2bqK-_EOEqMMFYk
|
|
@@ -9,25 +9,25 @@
|
|
|
9
9
|
"/login/page": "/login",
|
|
10
10
|
"/onboarding/page": "/onboarding",
|
|
11
11
|
"/(dashboard)/skills/new/page": "/skills/new",
|
|
12
|
-
"/(dashboard)/agents/[id]/channels/page": "/agents/[id]/channels",
|
|
13
|
-
"/(dashboard)/agents/[id]/edit/page": "/agents/[id]/edit",
|
|
14
12
|
"/(dashboard)/agents/[id]/telegram/page": "/agents/[id]/telegram",
|
|
13
|
+
"/(dashboard)/agents/[id]/edit/page": "/agents/[id]/edit",
|
|
15
14
|
"/(dashboard)/agents/page": "/agents",
|
|
16
15
|
"/(dashboard)/automations/page": "/automations",
|
|
17
|
-
"/(dashboard)/approvals/page": "/approvals",
|
|
18
|
-
"/(dashboard)/chat/page": "/chat",
|
|
19
16
|
"/(dashboard)/connectors/page": "/connectors",
|
|
20
17
|
"/(dashboard)/credentials/page": "/credentials",
|
|
21
|
-
"/(dashboard)/
|
|
18
|
+
"/(dashboard)/chat/page": "/chat",
|
|
19
|
+
"/(dashboard)/agents/[id]/channels/page": "/agents/[id]/channels",
|
|
22
20
|
"/(dashboard)/jobs/page": "/jobs",
|
|
23
|
-
"/(dashboard)/learned-skills/page": "/learned-skills",
|
|
24
21
|
"/(dashboard)/llm-providers/page": "/llm-providers",
|
|
25
|
-
"/(dashboard)/
|
|
22
|
+
"/(dashboard)/learned-skills/page": "/learned-skills",
|
|
26
23
|
"/(dashboard)/mcp/page": "/mcp",
|
|
27
24
|
"/(dashboard)/memories/page": "/memories",
|
|
28
25
|
"/(dashboard)/page": "/",
|
|
29
26
|
"/(dashboard)/settings/page": "/settings",
|
|
30
27
|
"/(dashboard)/settings/root-context/page": "/settings/root-context",
|
|
28
|
+
"/(dashboard)/jobs/[id]/page": "/jobs/[id]",
|
|
31
29
|
"/(dashboard)/skills/[id]/edit/page": "/skills/[id]/edit",
|
|
32
|
-
"/(dashboard)/skills/page": "/skills"
|
|
30
|
+
"/(dashboard)/skills/page": "/skills",
|
|
31
|
+
"/(dashboard)/approvals/page": "/approvals",
|
|
32
|
+
"/(dashboard)/logs/page": "/logs"
|
|
33
33
|
}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
],
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"lowPriorityFiles": [
|
|
7
|
-
"static/
|
|
8
|
-
"static/
|
|
7
|
+
"static/xZ_yeD2bqK-_EOEqMMFYk/_buildManifest.js",
|
|
8
|
+
"static/xZ_yeD2bqK-_EOEqMMFYk/_ssgManifest.js"
|
|
9
9
|
],
|
|
10
10
|
"rootMainFiles": [
|
|
11
11
|
"static/chunks/webpack-3741bf0a7636d65e.js",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"dynamicRoutes": {},
|
|
55
55
|
"notFoundRoutes": [],
|
|
56
56
|
"preview": {
|
|
57
|
-
"previewModeId": "
|
|
58
|
-
"previewModeSigningKey": "
|
|
59
|
-
"previewModeEncryptionKey": "
|
|
57
|
+
"previewModeId": "5019c6d540777f4d1c95599b49498fca",
|
|
58
|
+
"previewModeSigningKey": "56d9a49144ccde66362e8d5617974a1056034f38c160f8e00ac3adf53bbc75e7",
|
|
59
|
+
"previewModeEncryptionKey": "ad6d75e1f6d2bdb08f7fbac18b98a025b31404408128b59b9f81b5bc5c699845"
|
|
60
60
|
}
|
|
61
61
|
}
|