nodal-agents 0.6.1 → 0.6.2

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 (116) hide show
  1. package/README.md +5 -5
  2. package/cli.js +8 -0
  3. package/migrations/0050_jobs_search_fts.sql +4 -0
  4. package/migrations/meta/_journal.json +7 -0
  5. package/package.json +1 -1
  6. package/runner.js +1903 -1398
  7. package/web/.next/BUILD_ID +1 -1
  8. package/web/.next/app-path-routes-manifest.json +1 -1
  9. package/web/.next/build-manifest.json +2 -2
  10. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page.js +2 -2
  11. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page_client-reference-manifest.js +1 -1
  12. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page.js +2 -2
  13. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page_client-reference-manifest.js +1 -1
  14. package/web/.next/server/app/(dashboard)/agents/page.js +1 -1
  15. package/web/.next/server/app/(dashboard)/agents/page_client-reference-manifest.js +1 -1
  16. package/web/.next/server/app/(dashboard)/approvals/page.js +1 -1
  17. package/web/.next/server/app/(dashboard)/approvals/page_client-reference-manifest.js +1 -1
  18. package/web/.next/server/app/(dashboard)/automations/page.js +1 -1
  19. package/web/.next/server/app/(dashboard)/automations/page_client-reference-manifest.js +1 -1
  20. package/web/.next/server/app/(dashboard)/billing/page.js +1 -1
  21. package/web/.next/server/app/(dashboard)/billing/page_client-reference-manifest.js +1 -1
  22. package/web/.next/server/app/(dashboard)/chat/page.js +2 -2
  23. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  24. package/web/.next/server/app/(dashboard)/connectors/page.js +2 -2
  25. package/web/.next/server/app/(dashboard)/connectors/page_client-reference-manifest.js +1 -1
  26. package/web/.next/server/app/(dashboard)/credentials/page_client-reference-manifest.js +1 -1
  27. package/web/.next/server/app/(dashboard)/jobs/[id]/page.js +2 -2
  28. package/web/.next/server/app/(dashboard)/jobs/[id]/page_client-reference-manifest.js +1 -1
  29. package/web/.next/server/app/(dashboard)/jobs/page.js +1 -1
  30. package/web/.next/server/app/(dashboard)/jobs/page_client-reference-manifest.js +1 -1
  31. package/web/.next/server/app/(dashboard)/learned-skills/page.js +1 -1
  32. package/web/.next/server/app/(dashboard)/learned-skills/page_client-reference-manifest.js +1 -1
  33. package/web/.next/server/app/(dashboard)/llm-providers/page.js +2 -2
  34. package/web/.next/server/app/(dashboard)/llm-providers/page_client-reference-manifest.js +1 -1
  35. package/web/.next/server/app/(dashboard)/logs/page.js +1 -1
  36. package/web/.next/server/app/(dashboard)/logs/page_client-reference-manifest.js +1 -1
  37. package/web/.next/server/app/(dashboard)/mcp/page.js +1 -1
  38. package/web/.next/server/app/(dashboard)/mcp/page_client-reference-manifest.js +1 -1
  39. package/web/.next/server/app/(dashboard)/memories/page.js +1 -1
  40. package/web/.next/server/app/(dashboard)/memories/page_client-reference-manifest.js +1 -1
  41. package/web/.next/server/app/(dashboard)/page.js +1 -1
  42. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  43. package/web/.next/server/app/(dashboard)/settings/page.js +2 -2
  44. package/web/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  45. package/web/.next/server/app/(dashboard)/settings/root-context/page.js +1 -1
  46. package/web/.next/server/app/(dashboard)/settings/root-context/page_client-reference-manifest.js +1 -1
  47. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page.js +1 -1
  48. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page_client-reference-manifest.js +1 -1
  49. package/web/.next/server/app/(dashboard)/skills/new/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/(dashboard)/skills/page.js +1 -1
  51. package/web/.next/server/app/(dashboard)/skills/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  53. package/web/.next/server/app/_global-error.html +1 -1
  54. package/web/.next/server/app/_global-error.rsc +1 -1
  55. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  56. package/web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  57. package/web/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  58. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  59. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  60. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  61. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/_not-found.html +1 -1
  63. package/web/.next/server/app/_not-found.rsc +1 -1
  64. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  65. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  66. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  67. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  68. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  69. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  70. package/web/.next/server/app/login/page_client-reference-manifest.js +1 -1
  71. package/web/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/onboarding.html +1 -1
  73. package/web/.next/server/app/onboarding.rsc +1 -1
  74. package/web/.next/server/app/onboarding.segments/_full.segment.rsc +1 -1
  75. package/web/.next/server/app/onboarding.segments/_head.segment.rsc +1 -1
  76. package/web/.next/server/app/onboarding.segments/_index.segment.rsc +1 -1
  77. package/web/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
  78. package/web/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +1 -1
  79. package/web/.next/server/app/onboarding.segments/onboarding.segment.rsc +1 -1
  80. package/web/.next/server/app-paths-manifest.json +1 -1
  81. package/web/.next/server/chunks/1445.js +1 -1
  82. package/web/.next/server/chunks/3024.js +1 -1
  83. package/web/.next/server/chunks/3971.js +1 -1
  84. package/web/.next/server/chunks/4370.js +13 -13
  85. package/web/.next/server/chunks/4574.js +1 -1
  86. package/web/.next/server/chunks/6012.js +1 -1
  87. package/web/.next/server/chunks/7928.js +1 -1
  88. package/web/.next/server/middleware-build-manifest.js +1 -1
  89. package/web/.next/server/pages/404.html +1 -1
  90. package/web/.next/server/pages/500.html +1 -1
  91. package/web/.next/server/server-reference-manifest.js +1 -1
  92. package/web/.next/server/server-reference-manifest.json +1 -1
  93. package/web/.next/static/chunks/6097-556f092e99ee921a.js +1 -0
  94. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/edit/{page-e3522f5beaa39d00.js → page-43d9d097194e9298.js} +4 -4
  95. package/web/.next/static/chunks/app/(dashboard)/connectors/{page-e155c796daf03636.js → page-372db1197ad8e674.js} +1 -1
  96. package/web/.next/static/chunks/app/(dashboard)/mcp/page-d9b4e0a0a5bee7a8.js +1 -0
  97. package/web/public/connector-icons/apify.svg +5 -0
  98. package/web/public/connector-icons/blender.svg +12 -0
  99. package/web/public/connector-icons/composio.png +0 -0
  100. package/web/public/connector-icons/fetch.svg +17 -0
  101. package/web/public/connector-icons/firecrawl.svg +1 -0
  102. package/web/public/connector-icons/google-calendar.svg +17 -0
  103. package/web/public/connector-icons/keyshot.svg +36 -0
  104. package/web/public/connector-icons/linear.svg +1 -0
  105. package/web/public/connector-icons/n8n.svg +1 -0
  106. package/web/public/connector-icons/perplexity.svg +1 -0
  107. package/web/public/connector-icons/photoshop.svg +12 -0
  108. package/web/public/connector-icons/playwright.svg +1 -0
  109. package/web/public/connector-icons/supabase.svg +1 -0
  110. package/web/public/connector-icons/tavily.svg +1 -0
  111. package/web/public/connector-icons/unity.svg +10 -0
  112. package/web/public/connector-icons/unreal-engine.svg +1 -0
  113. package/web/.next/static/chunks/6097-d568d74074f2dad0.js +0 -1
  114. package/web/.next/static/chunks/app/(dashboard)/mcp/page-cc885192e6efce48.js +0 -1
  115. /package/web/.next/static/{KhwbJu08qtDMXMHHv9JeS → hP-2bfxkCKqsl8LMX58Y7}/_buildManifest.js +0 -0
  116. /package/web/.next/static/{KhwbJu08qtDMXMHHv9JeS → hP-2bfxkCKqsl8LMX58Y7}/_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
  [![Node](https://img.shields.io/badge/node-22%2B-339933?logo=node.js&logoColor=white)](https://nodejs.org)
11
11
  [![TypeScript](https://img.shields.io/badge/typescript-strict-3178c6?logo=typescript&logoColor=white)](https://www.typescriptlang.org)
12
12
  [![Docs](https://img.shields.io/badge/docs-online-3565ff)](https://kwintspiracy.github.io/nodal-agents/)
13
- [![Changelog](https://img.shields.io/badge/changelog-v0.6.1-d4ff2e)](CHANGELOG.md)
13
+ [![Changelog](https://img.shields.io/badge/changelog-v0.6.2-d4ff2e)](CHANGELOG.md)
14
14
 
15
15
  | Home dashboard — light theme | Agent detail — dark theme |
16
16
  | :---: | :---: |
@@ -61,7 +61,7 @@ Every agent runs on the model **you** choose, with the tools **you** grant, in a
61
61
  ### 🤝 Agents that actually finish
62
62
 
63
63
  - **Orchestrators that finish** — pick the delegation style per request: route to one specialist and resume on its result, or fan work out to many sub-agents in parallel and compile the answer.
64
- - **Memory that compounds** — persistent facts auto-injected into every job, plus chat-thread continuity (your agent remembers what it said 30 seconds ago and yesterday).
64
+ - **Memory that compounds** — durable facts auto-injected into every job, ranked by relevance to the task at hand; full-text `search_history` recall over everything the team has ever done; and a background curator that keeps the fact store clean. Plus chat-thread continuity that actually holds a conversation across slow tasks and natural pauses.
65
65
  - **Self-improving (opt-in)** — after a substantial job an agent can reflect and write itself a reusable skill; a weekly curator consolidates and prunes them. Every learned skill is reviewable, assignable, and revocable.
66
66
  - **Self-extending ROOT** — designate an orchestrator as ROOT and let it create skills, agents, MCP servers, and connectors on your behalf — gated by per-grant toggles and an autonomy level (propose-confirm → fully-autonomous).
67
67
  - **Human-in-the-loop** — risky tools pause for approval, and the prompt leads with the agent's plain-language explanation of *what* it wants to do and *why* (plus any ⚠️ impact) — not a wall of raw shell.
@@ -73,11 +73,11 @@ Every agent runs on the model **you** choose, with the tools **you** grant, in a
73
73
  **Models** — Anthropic · OpenAI · Google · Groq · Mistral · OpenRouter · **native DeepSeek** (`api.deepseek.com`) · **native MiniMax** (`api.minimax.io`) · any local model (LM Studio, Ollama). One key per provider; each agent picks its own model.
74
74
 
75
75
  **Connectors** — multi-instance (Gmail perso *and* boulot on one install), managed from the dashboard:
76
- - *OAuth* — Gmail · Google Drive · Sheets · Docs · Calendar · Notion · Airtable
77
- - *API key* — Notion · Airtable · Apify · Firecrawl · Tavily
76
+ - *OAuth* — Airtable · Calendar · Docs · Gmail · Google Drive · Notion · Sheets
77
+ - *API key* — Airtable · Apify · Firecrawl · Notion · Tavily
78
78
 
79
79
  **MCP servers** — over Streamable HTTP *and* stdio, plus add/edit your own:
80
- Stripe · GitHub · Supabase · Notion · Linear · Sentry · n8n · PostgreSQL · Playwright · Perplexity · Apify · Filesystem · Git · Fetch · Sequential Thinking · Composio · Cogni Cortex
80
+ Apify · Blender · Cogni Cortex · Composio · Fetch · Filesystem · Git · GitHub · KeyShot · Linear · n8n · Notion · Perplexity · Photoshop · Playwright · PostgreSQL · Sentry · Stripe · Supabase · Unity · Unreal Engine
81
81
 
82
82
  **Skills** — built-in: office editing (Excel/Word/PowerPoint), shell execution, Obsidian, Telegram etiquette, task planning, markdown output, citation discipline, research methodology, results delivery, language mirroring, HTML design. Plus **install any community `SKILL.md`** from GitHub / skills.sh / ClawHub — and agents can **write their own**.
83
83
 
package/cli.js CHANGED
@@ -12795,6 +12795,14 @@ var init_jobs = __esm({
12795
12795
  chatId: text("chat_id"),
12796
12796
  systemPrompt: text("system_prompt"),
12797
12797
  messages: jsonb("messages").default(sql`'[]'::jsonb`),
12798
+ /**
12799
+ * Flattened plain-text transcript (task + assistant text + tool outputs +
12800
+ * result) for full-text episodic search. Populated at job completion by
12801
+ * flattenTranscript(). A generated `search_tsv tsvector` column + GIN index
12802
+ * (raw SQL, migration 0050 — not expressible in the Drizzle schema builder)
12803
+ * makes it queryable by the `search_history` builtin.
12804
+ */
12805
+ searchText: text("search_text"),
12798
12806
  toolsUsed: text("tools_used").array().default(sql`'{}'::text[]`),
12799
12807
  turn: integer("turn").default(0),
12800
12808
  result: text("result"),
@@ -0,0 +1,4 @@
1
+ ALTER TABLE "agent_jobs" ADD COLUMN "search_text" text;--> statement-breakpoint
2
+ ALTER TABLE "agent_jobs" ADD COLUMN "search_tsv" tsvector GENERATED ALWAYS AS (to_tsvector('simple', coalesce("search_text", ''))) STORED;--> statement-breakpoint
3
+ CREATE INDEX "idx_agent_jobs_search_tsv" ON "agent_jobs" USING gin ("search_tsv");--> statement-breakpoint
4
+ UPDATE "agent_jobs" SET "search_text" = trim(coalesce("task", '') || ' ' || coalesce("result", '')) WHERE "search_text" IS NULL AND (coalesce("task", '') <> '' OR coalesce("result", '') <> '');
@@ -344,6 +344,13 @@
344
344
  "when": 1782900000000,
345
345
  "tag": "0049_skill_assignment_files_writable",
346
346
  "breakpoints": true
347
+ },
348
+ {
349
+ "idx": 50,
350
+ "version": "7",
351
+ "when": 1783000000000,
352
+ "tag": "0050_jobs_search_fts",
353
+ "breakpoints": true
347
354
  }
348
355
  ]
349
356
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodal-agents",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "Local-first AI agent platform with a web dashboard — install in one command.",
5
5
  "license": "MIT",
6
6
  "repository": {