nodal-agents 0.6.7 → 0.7.0

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 (153) hide show
  1. package/README.md +1 -1
  2. package/cli.js +24 -0
  3. package/migrations/0051_memory_search_fts.sql +2 -0
  4. package/migrations/0052_entities_memory_curation.sql +1 -0
  5. package/migrations/0053_memory_importance_locked.sql +1 -0
  6. package/migrations/meta/_journal.json +21 -0
  7. package/package.json +1 -1
  8. package/runner.js +275 -57
  9. package/web/.next/BUILD_ID +1 -1
  10. package/web/.next/app-path-routes-manifest.json +2 -2
  11. package/web/.next/build-manifest.json +2 -2
  12. package/web/.next/prerender-manifest.json +3 -3
  13. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page.js +3 -3
  14. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page_client-reference-manifest.js +1 -1
  15. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page.js +2 -2
  16. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page.js.nft.json +1 -1
  17. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page_client-reference-manifest.js +1 -1
  18. package/web/.next/server/app/(dashboard)/agents/page.js +2 -2
  19. package/web/.next/server/app/(dashboard)/agents/page.js.nft.json +1 -1
  20. package/web/.next/server/app/(dashboard)/agents/page_client-reference-manifest.js +1 -1
  21. package/web/.next/server/app/(dashboard)/approvals/page.js +2 -2
  22. package/web/.next/server/app/(dashboard)/approvals/page.js.nft.json +1 -1
  23. package/web/.next/server/app/(dashboard)/approvals/page_client-reference-manifest.js +1 -1
  24. package/web/.next/server/app/(dashboard)/automations/page.js +2 -2
  25. package/web/.next/server/app/(dashboard)/automations/page.js.nft.json +1 -1
  26. package/web/.next/server/app/(dashboard)/automations/page_client-reference-manifest.js +1 -1
  27. package/web/.next/server/app/(dashboard)/chat/page.js +2 -2
  28. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  29. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  30. package/web/.next/server/app/(dashboard)/connectors/page.js +1 -1
  31. package/web/.next/server/app/(dashboard)/connectors/page.js.nft.json +1 -1
  32. package/web/.next/server/app/(dashboard)/connectors/page_client-reference-manifest.js +1 -1
  33. package/web/.next/server/app/(dashboard)/credentials/page.js +1 -1
  34. package/web/.next/server/app/(dashboard)/credentials/page.js.nft.json +1 -1
  35. package/web/.next/server/app/(dashboard)/credentials/page_client-reference-manifest.js +1 -1
  36. package/web/.next/server/app/(dashboard)/jobs/[id]/page.js +2 -2
  37. package/web/.next/server/app/(dashboard)/jobs/[id]/page.js.nft.json +1 -1
  38. package/web/.next/server/app/(dashboard)/jobs/[id]/page_client-reference-manifest.js +1 -1
  39. package/web/.next/server/app/(dashboard)/jobs/page.js +2 -2
  40. package/web/.next/server/app/(dashboard)/jobs/page.js.nft.json +1 -1
  41. package/web/.next/server/app/(dashboard)/jobs/page_client-reference-manifest.js +1 -1
  42. package/web/.next/server/app/(dashboard)/learned-skills/page.js +2 -2
  43. package/web/.next/server/app/(dashboard)/learned-skills/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/(dashboard)/llm-providers/page.js +1 -1
  45. package/web/.next/server/app/(dashboard)/llm-providers/page.js.nft.json +1 -1
  46. package/web/.next/server/app/(dashboard)/llm-providers/page_client-reference-manifest.js +1 -1
  47. package/web/.next/server/app/(dashboard)/logs/page.js +1 -1
  48. package/web/.next/server/app/(dashboard)/logs/page.js.nft.json +1 -1
  49. package/web/.next/server/app/(dashboard)/logs/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/(dashboard)/mcp/page.js +2 -2
  51. package/web/.next/server/app/(dashboard)/mcp/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(dashboard)/memories/page.js +2 -2
  53. package/web/.next/server/app/(dashboard)/memories/page.js.nft.json +1 -1
  54. package/web/.next/server/app/(dashboard)/memories/page_client-reference-manifest.js +1 -1
  55. package/web/.next/server/app/(dashboard)/page.js +2 -2
  56. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  57. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  58. package/web/.next/server/app/(dashboard)/settings/page.js +2 -2
  59. package/web/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  60. package/web/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/(dashboard)/settings/root-context/page.js +2 -2
  62. package/web/.next/server/app/(dashboard)/settings/root-context/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/settings/root-context/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page.js +2 -2
  65. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page.js.nft.json +1 -1
  66. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/(dashboard)/skills/new/page.js +2 -2
  68. package/web/.next/server/app/(dashboard)/skills/new/page.js.nft.json +1 -1
  69. package/web/.next/server/app/(dashboard)/skills/new/page_client-reference-manifest.js +1 -1
  70. package/web/.next/server/app/(dashboard)/skills/page.js +2 -2
  71. package/web/.next/server/app/(dashboard)/skills/page_client-reference-manifest.js +1 -1
  72. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/_global-error.html +1 -1
  74. package/web/.next/server/app/_global-error.rsc +2 -2
  75. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  76. package/web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  77. package/web/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  78. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  79. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +2 -2
  80. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  81. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  82. package/web/.next/server/app/_not-found.html +1 -1
  83. package/web/.next/server/app/_not-found.rsc +3 -3
  84. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  85. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  86. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  87. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  88. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  89. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  90. package/web/.next/server/app/api/oauth/[provider]/callback/route.js +1 -1
  91. package/web/.next/server/app/login/page_client-reference-manifest.js +1 -1
  92. package/web/.next/server/app/onboarding/page.js +1319 -1315
  93. package/web/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  94. package/web/.next/server/app-paths-manifest.json +2 -2
  95. package/web/.next/server/chunks/2713.js +17 -13
  96. package/web/.next/server/chunks/3223.js +1 -1
  97. package/web/.next/server/chunks/4574.js +1 -1
  98. package/web/.next/server/chunks/4626.js +1 -0
  99. package/web/.next/server/chunks/8971.js +1 -0
  100. package/web/.next/server/chunks/9043.js +1 -0
  101. package/web/.next/server/middleware-build-manifest.js +1 -1
  102. package/web/.next/server/pages/404.html +1 -1
  103. package/web/.next/server/pages/500.html +1 -1
  104. package/web/.next/server/server-reference-manifest.js +1 -1
  105. package/web/.next/server/server-reference-manifest.json +1 -1
  106. package/web/.next/static/chunks/4964-08171c654e41b0a4.js +1 -0
  107. package/web/.next/static/chunks/{9836-14f7e30f77745e80.js → 9836-6830cb9d49ad261f.js} +1 -1
  108. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/edit/page-fa5717f0d0450659.js +6 -0
  109. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/telegram/page-73012222871598aa.js +1 -0
  110. package/web/.next/static/chunks/app/(dashboard)/agents/page-7e9616b28c098e9e.js +1 -0
  111. package/web/.next/static/chunks/app/(dashboard)/approvals/{page-64cdc8de03714da8.js → page-9a01cb723a6ccff0.js} +1 -1
  112. package/web/.next/static/chunks/app/(dashboard)/automations/page-85c985cd687406ed.js +1 -0
  113. package/web/.next/static/chunks/app/(dashboard)/chat/page-a6cc7a58986c0340.js +1 -0
  114. package/web/.next/static/chunks/app/(dashboard)/connectors/{page-c417cceb9b25870c.js → page-21d6c042800c8cd3.js} +1 -1
  115. package/web/.next/static/chunks/app/(dashboard)/jobs/[id]/{page-4a258111bca49454.js → page-f6b993a88c70a2fe.js} +1 -1
  116. package/web/.next/static/chunks/app/(dashboard)/jobs/{page-4ef0c0002fb31c13.js → page-d0d6b9db1b68451f.js} +1 -1
  117. package/web/.next/static/chunks/app/(dashboard)/layout-d2ac2646967496bb.js +1 -0
  118. package/web/.next/static/chunks/app/(dashboard)/learned-skills/page-ec6312f6dfd7ee23.js +1 -0
  119. package/web/.next/static/chunks/app/(dashboard)/llm-providers/page-1fb26463eddf509c.js +1 -0
  120. package/web/.next/static/chunks/app/(dashboard)/logs/{page-69a02d29acd3d812.js → page-0bca733315e8a208.js} +1 -1
  121. package/web/.next/static/chunks/app/(dashboard)/mcp/page-ff56ecf2f65f5466.js +1 -0
  122. package/web/.next/static/chunks/app/(dashboard)/memories/page-fe4d9438c93750d6.js +1 -0
  123. package/web/.next/static/chunks/app/(dashboard)/page-9402fe2931216f4b.js +1 -0
  124. package/web/.next/static/chunks/app/(dashboard)/settings/page-995662f10ebff365.js +1 -0
  125. package/web/.next/static/chunks/app/(dashboard)/settings/root-context/page-785b6ce3e4c5890b.js +1 -0
  126. package/web/.next/static/chunks/app/(dashboard)/skills/[id]/edit/page-2106201c4df8b5a4.js +1 -0
  127. package/web/.next/static/chunks/app/(dashboard)/skills/new/page-0135bcb86ab60dc2.js +1 -0
  128. package/web/.next/static/chunks/app/(dashboard)/skills/{page-c47e251b87d38cc7.js → page-54e939d40c8b5b6d.js} +1 -1
  129. package/web/.next/static/chunks/app/onboarding/page-a4116e2f430eaff8.js +26 -0
  130. package/web/.next/static/css/eff119dd24f92093.css +3 -0
  131. package/web/.next/server/chunks/4088.js +0 -1
  132. package/web/.next/server/chunks/4122.js +0 -1
  133. package/web/.next/server/chunks/7495.js +0 -1
  134. package/web/.next/static/chunks/4964-09a4dc14acc324f3.js +0 -1
  135. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/edit/page-499eb81b66c74dc5.js +0 -6
  136. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/telegram/page-e26c56155c37f38e.js +0 -1
  137. package/web/.next/static/chunks/app/(dashboard)/agents/page-f4c535f30d385857.js +0 -1
  138. package/web/.next/static/chunks/app/(dashboard)/automations/page-b654ebf59b7a0a76.js +0 -1
  139. package/web/.next/static/chunks/app/(dashboard)/chat/page-687c72476c5097c1.js +0 -1
  140. package/web/.next/static/chunks/app/(dashboard)/layout-04e80131398f1551.js +0 -1
  141. package/web/.next/static/chunks/app/(dashboard)/learned-skills/page-31b01dbe3baa44cc.js +0 -1
  142. package/web/.next/static/chunks/app/(dashboard)/llm-providers/page-96df36ea1bf14242.js +0 -1
  143. package/web/.next/static/chunks/app/(dashboard)/mcp/page-3ddd2e2c8973fb2f.js +0 -1
  144. package/web/.next/static/chunks/app/(dashboard)/memories/page-2e127cc802ee8e72.js +0 -1
  145. package/web/.next/static/chunks/app/(dashboard)/page-a25fd0011e21ba38.js +0 -1
  146. package/web/.next/static/chunks/app/(dashboard)/settings/page-06062fc5a2d536f6.js +0 -1
  147. package/web/.next/static/chunks/app/(dashboard)/settings/root-context/page-fd80a1645212a6d1.js +0 -1
  148. package/web/.next/static/chunks/app/(dashboard)/skills/[id]/edit/page-59bb2de0f81b5ed6.js +0 -1
  149. package/web/.next/static/chunks/app/(dashboard)/skills/new/page-0970daf889c085c9.js +0 -1
  150. package/web/.next/static/chunks/app/onboarding/page-995403cba38e26cc.js +0 -26
  151. package/web/.next/static/css/9fc24595c3687cfb.css +0 -3
  152. /package/web/.next/static/{vB-0ke6pDH6vYyme7Pz5G → KFac7DQ7gdp9XPQ2bnb-2}/_buildManifest.js +0 -0
  153. /package/web/.next/static/{vB-0ke6pDH6vYyme7Pz5G → KFac7DQ7gdp9XPQ2bnb-2}/_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.7-d4ff2e)](CHANGELOG.md)
13
+ [![Changelog](https://img.shields.io/badge/changelog-v0.6.8-d4ff2e)](CHANGELOG.md)
14
14
 
15
15
  | Home dashboard — light theme | Agent detail — dark theme |
16
16
  | :---: | :---: |
package/cli.js CHANGED
@@ -11511,6 +11511,10 @@ var init_memory = __esm({
11511
11511
  valid_to: z13.string().datetime().nullable(),
11512
11512
  fact_hash: z13.string().nullable(),
11513
11513
  archived: z13.boolean(),
11514
+ // User override lock (migration 0053) — when true, the curator refuses to
11515
+ // re-score importance for this fact. Defaulted so rows/objects predating
11516
+ // the column still parse.
11517
+ importance_locked: z13.boolean().default(false),
11514
11518
  last_accessed_at: z13.string().datetime().nullable(),
11515
11519
  access_count: z13.number().int().min(0),
11516
11520
  created_at: z13.string().datetime(),
@@ -11522,6 +11526,7 @@ var init_memory = __esm({
11522
11526
  updated_at: true,
11523
11527
  fact_hash: true,
11524
11528
  archived: true,
11529
+ importance_locked: true,
11525
11530
  last_accessed_at: true,
11526
11531
  access_count: true,
11527
11532
  valid_from: true,
@@ -12330,6 +12335,10 @@ var init_entities = __esm({
12330
12335
  updatedAt: timestamp("updated_at", { withTimezone: true }).defaultNow(),
12331
12336
  lastCuratorRunAt: timestamp("last_curator_run_at", { withTimezone: true }),
12332
12337
  reflectionEnabled: boolean("reflection_enabled").notNull().default(false),
12338
+ // Decoupled from reflection_enabled (which gates the skill-learning loop,
12339
+ // opt-in). Gates the memory curator (Phase 2 LLM pass) — ON by default so
12340
+ // memory curation runs even for entities that never opted into reflection.
12341
+ memoryCurationEnabled: boolean("memory_curation_enabled").notNull().default(true),
12333
12342
  // Controls whether agent-authored skills are auto-assigned to the authoring
12334
12343
  // agent ('auto') or queued for the entity owner to approve ('approval').
12335
12344
  skillAssignmentMode: text("skill_assignment_mode").notNull().default("approval").$type(),
@@ -12886,6 +12895,15 @@ var init_memory2 = __esm({
12886
12895
  id: uuid("id").primaryKey().defaultRandom(),
12887
12896
  entityId: uuid("entity_id").references(() => entities.id, { onDelete: "cascade" }),
12888
12897
  agentId: uuid("agent_id").references(() => agents.id, { onDelete: "cascade" }),
12898
+ /**
12899
+ * Full-text source. A generated `search_tsv tsvector` column + GIN index
12900
+ * (raw SQL, migration 0051 — not expressible in the Drizzle schema builder,
12901
+ * same pattern as agent_jobs.search_tsv / migration 0050) makes this fact
12902
+ * rankable by relevance. Powers memory injection (selectMemoriesForInjection)
12903
+ * and the `query_memory` builtin (keywordSearchMemories) via ts_rank.
12904
+ * Config is `'english'` (stemming — "tokens" matches a "token" query),
12905
+ * unlike agent_jobs.search_tsv which stays `'simple'`.
12906
+ */
12889
12907
  fact: text("fact").notNull(),
12890
12908
  category: text("category").default("context"),
12891
12909
  importance: integer("importance").default(3),
@@ -12897,6 +12915,12 @@ var init_memory2 = __esm({
12897
12915
  validTo: timestamp("valid_to", { withTimezone: true }),
12898
12916
  factHash: text("fact_hash"),
12899
12917
  archived: boolean("archived").default(false),
12918
+ /**
12919
+ * User override lock (migration 0053). When true, the curator's
12920
+ * usage-driven re-scoring MUST refuse to touch importance — a user-pinned
12921
+ * value wins over the agent's guess and the curator's correction.
12922
+ */
12923
+ importanceLocked: boolean("importance_locked").notNull().default(false),
12900
12924
  lastAccessedAt: timestamp("last_accessed_at", { withTimezone: true }).defaultNow(),
12901
12925
  accessCount: integer("access_count").default(0),
12902
12926
  createdAt: timestamp("created_at", { withTimezone: true }).defaultNow(),
@@ -0,0 +1,2 @@
1
+ ALTER TABLE "agent_memory" ADD COLUMN "search_tsv" tsvector GENERATED ALWAYS AS (to_tsvector('english', coalesce("fact", ''))) STORED;--> statement-breakpoint
2
+ CREATE INDEX "idx_agent_memory_search_tsv" ON "agent_memory" USING gin ("search_tsv");
@@ -0,0 +1 @@
1
+ ALTER TABLE "entities" ADD COLUMN "memory_curation_enabled" boolean NOT NULL DEFAULT true;
@@ -0,0 +1 @@
1
+ ALTER TABLE "agent_memory" ADD COLUMN "importance_locked" boolean NOT NULL DEFAULT false;
@@ -351,6 +351,27 @@
351
351
  "when": 1783000000000,
352
352
  "tag": "0050_jobs_search_fts",
353
353
  "breakpoints": true
354
+ },
355
+ {
356
+ "idx": 51,
357
+ "version": "7",
358
+ "when": 1783100000000,
359
+ "tag": "0051_memory_search_fts",
360
+ "breakpoints": true
361
+ },
362
+ {
363
+ "idx": 52,
364
+ "version": "7",
365
+ "when": 1783200000000,
366
+ "tag": "0052_entities_memory_curation",
367
+ "breakpoints": true
368
+ },
369
+ {
370
+ "idx": 53,
371
+ "version": "7",
372
+ "when": 1783300000000,
373
+ "tag": "0053_memory_importance_locked",
374
+ "breakpoints": true
354
375
  }
355
376
  ]
356
377
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nodal-agents",
3
- "version": "0.6.7",
3
+ "version": "0.7.0",
4
4
  "description": "Local-first AI agent platform with a web dashboard — install in one command.",
5
5
  "license": "MIT",
6
6
  "repository": {