nodal-agents 0.5.2 → 0.5.4

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 (181) hide show
  1. package/cli.js +52 -0
  2. package/migrations/0045_app_settings.sql +5 -0
  3. package/migrations/0046_skill_assignment_scripts_authorized.sql +1 -0
  4. package/migrations/0047_agent_schedules_timezone.sql +1 -0
  5. package/migrations/0048_entities_timezone.sql +1 -0
  6. package/migrations/meta/_journal.json +342 -314
  7. package/package.json +1 -1
  8. package/runner.js +8699 -6632
  9. package/web/.next/BUILD_ID +1 -1
  10. package/web/.next/app-path-routes-manifest.json +11 -10
  11. package/web/.next/build-manifest.json +2 -2
  12. package/web/.next/routes-manifest.json +6 -0
  13. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page.js +5 -3
  14. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page.js.nft.json +1 -1
  15. package/web/.next/server/app/(dashboard)/agents/[id]/edit/page_client-reference-manifest.js +1 -1
  16. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page.js +2 -2
  17. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page.js.nft.json +1 -1
  18. package/web/.next/server/app/(dashboard)/agents/[id]/telegram/page_client-reference-manifest.js +1 -1
  19. package/web/.next/server/app/(dashboard)/agents/page.js +2 -2
  20. package/web/.next/server/app/(dashboard)/agents/page.js.nft.json +1 -1
  21. package/web/.next/server/app/(dashboard)/agents/page_client-reference-manifest.js +1 -1
  22. package/web/.next/server/app/(dashboard)/approvals/page.js +2 -2
  23. package/web/.next/server/app/(dashboard)/approvals/page.js.nft.json +1 -1
  24. package/web/.next/server/app/(dashboard)/approvals/page_client-reference-manifest.js +1 -1
  25. package/web/.next/server/app/(dashboard)/automations/page.js +2 -2
  26. package/web/.next/server/app/(dashboard)/automations/page.js.nft.json +1 -1
  27. package/web/.next/server/app/(dashboard)/automations/page_client-reference-manifest.js +1 -1
  28. package/web/.next/server/app/(dashboard)/billing/page.js +2 -2
  29. package/web/.next/server/app/(dashboard)/billing/page.js.nft.json +1 -1
  30. package/web/.next/server/app/(dashboard)/billing/page_client-reference-manifest.js +1 -1
  31. package/web/.next/server/app/(dashboard)/chat/page.js +2 -2
  32. package/web/.next/server/app/(dashboard)/chat/page.js.nft.json +1 -1
  33. package/web/.next/server/app/(dashboard)/chat/page_client-reference-manifest.js +1 -1
  34. package/web/.next/server/app/(dashboard)/connectors/page.js +2 -2
  35. package/web/.next/server/app/(dashboard)/connectors/page.js.nft.json +1 -1
  36. package/web/.next/server/app/(dashboard)/connectors/page_client-reference-manifest.js +1 -1
  37. package/web/.next/server/app/(dashboard)/credentials/page.js +2 -2
  38. package/web/.next/server/app/(dashboard)/credentials/page.js.nft.json +1 -1
  39. package/web/.next/server/app/(dashboard)/credentials/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/(dashboard)/jobs/[id]/page.js +2 -2
  41. package/web/.next/server/app/(dashboard)/jobs/[id]/page.js.nft.json +1 -1
  42. package/web/.next/server/app/(dashboard)/jobs/[id]/page_client-reference-manifest.js +1 -1
  43. package/web/.next/server/app/(dashboard)/jobs/page.js +2 -2
  44. package/web/.next/server/app/(dashboard)/jobs/page.js.nft.json +1 -1
  45. package/web/.next/server/app/(dashboard)/jobs/page_client-reference-manifest.js +1 -1
  46. package/web/.next/server/app/(dashboard)/learned-skills/page.js +2 -2
  47. package/web/.next/server/app/(dashboard)/learned-skills/page.js.nft.json +1 -1
  48. package/web/.next/server/app/(dashboard)/learned-skills/page_client-reference-manifest.js +1 -1
  49. package/web/.next/server/app/(dashboard)/llm-providers/page.js +2 -2
  50. package/web/.next/server/app/(dashboard)/llm-providers/page.js.nft.json +1 -1
  51. package/web/.next/server/app/(dashboard)/llm-providers/page_client-reference-manifest.js +1 -1
  52. package/web/.next/server/app/(dashboard)/logs/page.js +2 -2
  53. package/web/.next/server/app/(dashboard)/logs/page.js.nft.json +1 -1
  54. package/web/.next/server/app/(dashboard)/logs/page_client-reference-manifest.js +1 -1
  55. package/web/.next/server/app/(dashboard)/mcp/page.js +2 -2
  56. package/web/.next/server/app/(dashboard)/mcp/page.js.nft.json +1 -1
  57. package/web/.next/server/app/(dashboard)/mcp/page_client-reference-manifest.js +1 -1
  58. package/web/.next/server/app/(dashboard)/memories/page.js +2 -2
  59. package/web/.next/server/app/(dashboard)/memories/page.js.nft.json +1 -1
  60. package/web/.next/server/app/(dashboard)/memories/page_client-reference-manifest.js +1 -1
  61. package/web/.next/server/app/(dashboard)/page.js +4 -4
  62. package/web/.next/server/app/(dashboard)/page.js.nft.json +1 -1
  63. package/web/.next/server/app/(dashboard)/page_client-reference-manifest.js +1 -1
  64. package/web/.next/server/app/(dashboard)/settings/page.js +2 -2
  65. package/web/.next/server/app/(dashboard)/settings/page.js.nft.json +1 -1
  66. package/web/.next/server/app/(dashboard)/settings/page_client-reference-manifest.js +1 -1
  67. package/web/.next/server/app/(dashboard)/settings/root-context/page.js +2 -0
  68. package/web/.next/server/app/(dashboard)/settings/root-context/page.js.nft.json +1 -0
  69. package/web/.next/server/app/(dashboard)/settings/root-context/page_client-reference-manifest.js +1 -0
  70. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page.js +2 -2
  71. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page.js.nft.json +1 -1
  72. package/web/.next/server/app/(dashboard)/skills/[id]/edit/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/(dashboard)/skills/new/page.js +2 -2
  74. package/web/.next/server/app/(dashboard)/skills/new/page.js.nft.json +1 -1
  75. package/web/.next/server/app/(dashboard)/skills/new/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/(dashboard)/skills/page.js +2 -2
  77. package/web/.next/server/app/(dashboard)/skills/page.js.nft.json +1 -1
  78. package/web/.next/server/app/(dashboard)/skills/page_client-reference-manifest.js +1 -1
  79. package/web/.next/server/app/_global-error/page.js +2 -2
  80. package/web/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  81. package/web/.next/server/app/_global-error.html +1 -1
  82. package/web/.next/server/app/_global-error.rsc +1 -1
  83. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  84. package/web/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  85. package/web/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  86. package/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  87. package/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  88. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  89. package/web/.next/server/app/_not-found/page.js +2 -2
  90. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  91. package/web/.next/server/app/_not-found.html +1 -1
  92. package/web/.next/server/app/_not-found.rsc +2 -2
  93. package/web/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  94. package/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  95. package/web/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  96. package/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  97. package/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  98. package/web/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  99. package/web/.next/server/app/api/auth/[...all]/route.js +1 -1
  100. package/web/.next/server/app/api/auth/[...all]/route.js.nft.json +1 -1
  101. package/web/.next/server/app/api/health/route.js +1 -1
  102. package/web/.next/server/app/api/oauth/[provider]/callback/route.js +1 -1
  103. package/web/.next/server/app/api/oauth/[provider]/callback/route.js.nft.json +1 -1
  104. package/web/.next/server/app/api/oauth/[provider]/start/route.js +1 -1
  105. package/web/.next/server/app/api/oauth/[provider]/start/route.js.nft.json +1 -1
  106. package/web/.next/server/app/auth/callback/route.js +1 -1
  107. package/web/.next/server/app/login/page.js +2 -2
  108. package/web/.next/server/app/login/page_client-reference-manifest.js +1 -1
  109. package/web/.next/server/app/onboarding/page.js +2 -2
  110. package/web/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  111. package/web/.next/server/app/onboarding.html +1 -1
  112. package/web/.next/server/app/onboarding.rsc +2 -2
  113. package/web/.next/server/app/onboarding.segments/_full.segment.rsc +2 -2
  114. package/web/.next/server/app/onboarding.segments/_head.segment.rsc +1 -1
  115. package/web/.next/server/app/onboarding.segments/_index.segment.rsc +2 -2
  116. package/web/.next/server/app/onboarding.segments/_tree.segment.rsc +2 -2
  117. package/web/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +1 -1
  118. package/web/.next/server/app/onboarding.segments/onboarding.segment.rsc +1 -1
  119. package/web/.next/server/app-paths-manifest.json +11 -10
  120. package/web/.next/server/chunks/1544.js +1 -0
  121. package/web/.next/server/chunks/1827.js +1 -0
  122. package/web/.next/server/chunks/{8732.js → 3154.js} +6 -6
  123. package/web/.next/server/chunks/3188.js +1 -0
  124. package/web/.next/server/chunks/3636.js +1 -1
  125. package/web/.next/server/chunks/4370.js +1429 -0
  126. package/web/.next/server/chunks/4574.js +1 -1
  127. package/web/.next/server/chunks/473.js +1 -0
  128. package/web/.next/server/chunks/{2556.js → 6200.js} +1 -1
  129. package/web/.next/server/chunks/652.js +709 -0
  130. package/web/.next/server/chunks/6592.js +1 -0
  131. package/web/.next/server/chunks/6778.js +1 -0
  132. package/web/.next/server/chunks/7415.js +1 -0
  133. package/web/.next/server/middleware-build-manifest.js +1 -1
  134. package/web/.next/server/pages/404.html +1 -1
  135. package/web/.next/server/pages/500.html +1 -1
  136. package/web/.next/server/server-reference-manifest.js +1 -1
  137. package/web/.next/server/server-reference-manifest.json +1 -1
  138. package/web/.next/static/URd3wLbbONHdJcTWOsoRw/_buildManifest.js +1 -0
  139. package/web/.next/static/chunks/6097-12165ea99c077896.js +1 -0
  140. package/web/.next/static/chunks/{7164-a5cae6a1833041a7.js → 7164-080c206b663d64b2.js} +1 -1
  141. package/web/.next/static/chunks/{6908-e8114db85dca4371.js → 8666-90a1f5d99b79411e.js} +1 -1
  142. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/edit/page-72e5a7541de7e969.js +4 -0
  143. package/web/.next/static/chunks/app/(dashboard)/connectors/page-6c4c1c753858c7b8.js +1 -0
  144. package/web/.next/static/chunks/app/(dashboard)/credentials/page-ef2666c5ac3ede9b.js +1 -0
  145. package/web/.next/static/chunks/app/(dashboard)/mcp/page-d53d13942bd635a4.js +1 -0
  146. package/web/.next/static/chunks/app/(dashboard)/memories/page-ebcc28ea081ae566.js +1 -0
  147. package/web/.next/static/chunks/app/(dashboard)/settings/page-b3cc57c577895cac.js +1 -0
  148. package/web/.next/static/chunks/app/(dashboard)/settings/root-context/page-6830a271484d97d5.js +1 -0
  149. package/web/.next/static/chunks/app/(dashboard)/skills/[id]/edit/page-ddd8ebba5889c9a4.js +1 -0
  150. package/web/.next/static/chunks/app/(dashboard)/skills/new/page-6246f9236b209e76.js +1 -0
  151. package/web/.next/static/chunks/app/(dashboard)/skills/{page-e25db7f660751dfd.js → page-68d64faf1a7c49b2.js} +1 -1
  152. package/web/.next/static/css/f93e519b745ac2de.css +3 -0
  153. package/web/public/connector-icons/airtable.svg +13 -0
  154. package/web/public/connector-icons/git.svg +3 -0
  155. package/web/public/connector-icons/github.svg +10 -0
  156. package/web/public/connector-icons/gmail.svg +14 -0
  157. package/web/public/connector-icons/google-docs.svg +12 -0
  158. package/web/public/connector-icons/google-drive.svg +8 -0
  159. package/web/public/connector-icons/google-sheets.svg +25 -0
  160. package/web/public/connector-icons/notion.svg +3 -0
  161. package/web/public/connector-icons/postgresql.svg +14 -0
  162. package/web/public/connector-icons/sentry.svg +10 -0
  163. package/web/public/connector-icons/stripe.svg +4 -0
  164. package/web/.next/server/chunks/3279.js +0 -1
  165. package/web/.next/server/chunks/5869.js +0 -1
  166. package/web/.next/server/chunks/6606.js +0 -1
  167. package/web/.next/server/chunks/9267.js +0 -16
  168. package/web/.next/server/chunks/9656.js +0 -1
  169. package/web/.next/server/chunks/9942.js +0 -1223
  170. package/web/.next/static/FgBmSI8AhGeFcxmEUF1VS/_buildManifest.js +0 -1
  171. package/web/.next/static/chunks/3178-bde220b789f10130.js +0 -1
  172. package/web/.next/static/chunks/app/(dashboard)/agents/[id]/edit/page-9d2c7d640411e42d.js +0 -2
  173. package/web/.next/static/chunks/app/(dashboard)/connectors/page-6591a8753b6a19c1.js +0 -1
  174. package/web/.next/static/chunks/app/(dashboard)/credentials/page-19061f4a8bf1978f.js +0 -1
  175. package/web/.next/static/chunks/app/(dashboard)/mcp/page-f9337250ed07249e.js +0 -1
  176. package/web/.next/static/chunks/app/(dashboard)/memories/page-b935752c6cb36a04.js +0 -1
  177. package/web/.next/static/chunks/app/(dashboard)/settings/page-cc13aebbb8d33d19.js +0 -1
  178. package/web/.next/static/chunks/app/(dashboard)/skills/[id]/edit/page-85c75cc88ee1d6a8.js +0 -1
  179. package/web/.next/static/chunks/app/(dashboard)/skills/new/page-9b0777fccb89a00b.js +0 -1
  180. package/web/.next/static/css/de0fc0bc138be3b3.css +0 -3
  181. /package/web/.next/static/{FgBmSI8AhGeFcxmEUF1VS → URd3wLbbONHdJcTWOsoRw}/_ssgManifest.js +0 -0
package/cli.js CHANGED
@@ -12127,12 +12127,16 @@ var init_root_agent = __esm({
12127
12127
  AutonomyLevelSchema = z18.enum(["propose_confirm", "destructive_gate", "fully_autonomous"]);
12128
12128
  RootGrantsSchema = z18.object({
12129
12129
  createAgent: z18.boolean(),
12130
+ updateAgent: z18.boolean(),
12130
12131
  attachAgent: z18.boolean(),
12131
12132
  createSkill: z18.boolean(),
12132
12133
  updateSkill: z18.boolean(),
12133
12134
  assignSkill: z18.boolean(),
12134
12135
  createMcp: z18.boolean(),
12136
+ attachMcp: z18.boolean(),
12135
12137
  createConnector: z18.boolean(),
12138
+ attachConnector: z18.boolean(),
12139
+ manageSchedules: z18.boolean(),
12136
12140
  autonomy: AutonomyLevelSchema
12137
12141
  });
12138
12142
  }
@@ -12152,6 +12156,13 @@ var init_model_catalog = __esm({
12152
12156
  }
12153
12157
  });
12154
12158
 
12159
+ // ../../packages/shared/src/timezone.ts
12160
+ var init_timezone = __esm({
12161
+ "../../packages/shared/src/timezone.ts"() {
12162
+ "use strict";
12163
+ }
12164
+ });
12165
+
12155
12166
  // ../../packages/shared/src/index.ts
12156
12167
  var init_src2 = __esm({
12157
12168
  "../../packages/shared/src/index.ts"() {
@@ -12177,6 +12188,7 @@ var init_src2 = __esm({
12177
12188
  init_root_agent();
12178
12189
  init_connector_catalog();
12179
12190
  init_model_catalog();
12191
+ init_timezone();
12180
12192
  }
12181
12193
  });
12182
12194
 
@@ -12265,6 +12277,11 @@ var init_entities = __esm({
12265
12277
  icon: text("icon").default("\u{1F3E2}"),
12266
12278
  industry: text("industry"),
12267
12279
  goal: text("goal"),
12280
+ // IANA timezone for this workspace (e.g. 'Europe/Paris'). Captured from the
12281
+ // user's browser at onboarding, editable in Settings. Authoritative for the
12282
+ // agent: it reads the current local time and schedules crons in THIS zone.
12283
+ // null = fall back to the server's resolved timezone (legacy / pre-capture).
12284
+ timezone: text("timezone"),
12268
12285
  mcpToken: uuid("mcp_token").defaultRandom(),
12269
12286
  // ROOT agent designation (Wave 1 — V4 ROOT agent, 2026-05-29).
12270
12287
  // Points at the agent that receives meta-tools. Set null when no root
@@ -12996,6 +13013,12 @@ var init_skills = __esm({
12996
13013
  approvalOverrides: jsonb("approval_overrides").default(sql`'{}'::jsonb`),
12997
13014
  useCustomInstructions: boolean("use_custom_instructions").notNull().default(false),
12998
13015
  enabledOperations: text("enabled_operations").array(),
13016
+ // Per-skill × per-agent authorization to EXECUTE the skill's bundled scripts
13017
+ // (installed_scripts) via run_skill_script. Owner opt-in, default FALSE. A
13018
+ // community skill may ship .py/.sh scripts, but the runtime refuses to run
13019
+ // them unless the owner flips this for a specific agent × skill — the
13020
+ // case-by-case execution gate. Loaded by the runner into the ToolContext.
13021
+ scriptsAuthorized: boolean("scripts_authorized").notNull().default(false),
12999
13022
  createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow()
13000
13023
  },
13001
13024
  () => []
@@ -13021,6 +13044,10 @@ var init_schedules = __esm({
13021
13044
  type: text("type").notNull().default("cron"),
13022
13045
  name: text("name").notNull(),
13023
13046
  cronExpr: text("cron_expr").notNull(),
13047
+ // IANA timezone the cron is evaluated in (e.g. 'Asia/Singapore'). null = the
13048
+ // server's local timezone (legacy rows). New schedules capture an explicit tz
13049
+ // so "9am" stays 9am in the user's zone regardless of where the runner hosts.
13050
+ timezone: text("timezone"),
13024
13051
  task: text("task"),
13025
13052
  objectives: text("objectives"),
13026
13053
  active: boolean("active").default(true),
@@ -13352,6 +13379,20 @@ var init_chat_messages = __esm({
13352
13379
  }
13353
13380
  });
13354
13381
 
13382
+ // ../../packages/db/src/schema/app-settings.ts
13383
+ var appSettings;
13384
+ var init_app_settings = __esm({
13385
+ "../../packages/db/src/schema/app-settings.ts"() {
13386
+ "use strict";
13387
+ init_pg_core();
13388
+ appSettings = pgTable("app_settings", {
13389
+ key: text("key").primaryKey(),
13390
+ value: text("value").default("").notNull(),
13391
+ updatedAt: timestamp("updated_at", { withTimezone: true }).defaultNow().notNull()
13392
+ });
13393
+ }
13394
+ });
13395
+
13355
13396
  // ../../packages/db/src/schema/index.ts
13356
13397
  var schema_exports = {};
13357
13398
  __export(schema_exports, {
@@ -13389,6 +13430,7 @@ __export(schema_exports, {
13389
13430
  agentTasks: () => agentTasks,
13390
13431
  agentWorkspaces: () => agentWorkspaces,
13391
13432
  agents: () => agents,
13433
+ appSettings: () => appSettings,
13392
13434
  approvalRequests: () => approvalRequests,
13393
13435
  approvalRules: () => approvalRules,
13394
13436
  chatMessages: () => chatMessages,
@@ -13435,6 +13477,7 @@ var init_schema2 = __esm({
13435
13477
  init_agent_connector_assignments();
13436
13478
  init_agent_workspaces();
13437
13479
  init_chat_messages();
13480
+ init_app_settings();
13438
13481
  }
13439
13482
  });
13440
13483
 
@@ -13518,6 +13561,14 @@ var init_retention = __esm({
13518
13561
  }
13519
13562
  });
13520
13563
 
13564
+ // ../../packages/db/src/repos/app-settings.ts
13565
+ var init_app_settings2 = __esm({
13566
+ "../../packages/db/src/repos/app-settings.ts"() {
13567
+ "use strict";
13568
+ init_schema2();
13569
+ }
13570
+ });
13571
+
13521
13572
  // ../../packages/db/src/index.ts
13522
13573
  var init_src4 = __esm({
13523
13574
  "../../packages/db/src/index.ts"() {
@@ -13529,6 +13580,7 @@ var init_src4 = __esm({
13529
13580
  init_agents2();
13530
13581
  init_skills2();
13531
13582
  init_retention();
13583
+ init_app_settings2();
13532
13584
  init_drizzle_orm();
13533
13585
  }
13534
13586
  });
@@ -0,0 +1,5 @@
1
+ CREATE TABLE "app_settings" (
2
+ "key" text PRIMARY KEY NOT NULL,
3
+ "value" text DEFAULT '' NOT NULL,
4
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
5
+ );
@@ -0,0 +1 @@
1
+ ALTER TABLE "agent_skill_assignments" ADD COLUMN "scripts_authorized" boolean DEFAULT false NOT NULL;
@@ -0,0 +1 @@
1
+ ALTER TABLE "agent_schedules" ADD COLUMN "timezone" text;
@@ -0,0 +1 @@
1
+ ALTER TABLE "entities" ADD COLUMN "timezone" text;