agent-nuvira 3.3.0 → 3.3.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 (231) hide show
  1. package/.agents/skills/code-assessment/SKILL.md +10 -1
  2. package/.agents/skills/index.json +1 -1
  3. package/README.md +47 -9
  4. package/dist/agents/agents/runner.d.ts +9 -0
  5. package/dist/agents/agents/runner.d.ts.map +1 -1
  6. package/dist/agents/agents/runner.js +34 -12
  7. package/dist/agents/agents/runner.js.map +1 -1
  8. package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
  9. package/dist/agents/agents/writer-tool-calling.js +7 -2
  10. package/dist/agents/agents/writer-tool-calling.js.map +1 -1
  11. package/dist/agents/agents/writer.d.ts.map +1 -1
  12. package/dist/agents/agents/writer.js +7 -1
  13. package/dist/agents/agents/writer.js.map +1 -1
  14. package/dist/agents/artifact-verification.d.ts +102 -0
  15. package/dist/agents/artifact-verification.d.ts.map +1 -0
  16. package/dist/agents/artifact-verification.js +216 -0
  17. package/dist/agents/artifact-verification.js.map +1 -0
  18. package/dist/agents/checkpoint-store.d.ts +73 -0
  19. package/dist/agents/checkpoint-store.d.ts.map +1 -1
  20. package/dist/agents/checkpoint-store.js +161 -0
  21. package/dist/agents/checkpoint-store.js.map +1 -1
  22. package/dist/agents/credential-store.d.ts +120 -0
  23. package/dist/agents/credential-store.d.ts.map +1 -1
  24. package/dist/agents/credential-store.js +358 -19
  25. package/dist/agents/credential-store.js.map +1 -1
  26. package/dist/agents/orchestrator.d.ts +10 -1
  27. package/dist/agents/orchestrator.d.ts.map +1 -1
  28. package/dist/agents/orchestrator.js +234 -75
  29. package/dist/agents/orchestrator.js.map +1 -1
  30. package/dist/agents/phase-engine.d.ts +61 -0
  31. package/dist/agents/phase-engine.d.ts.map +1 -1
  32. package/dist/agents/phase-engine.js +68 -2
  33. package/dist/agents/phase-engine.js.map +1 -1
  34. package/dist/agents/prompt-assembly.d.ts +11 -0
  35. package/dist/agents/prompt-assembly.d.ts.map +1 -1
  36. package/dist/agents/prompt-assembly.js +17 -0
  37. package/dist/agents/prompt-assembly.js.map +1 -1
  38. package/dist/agents/release-preflight.d.ts +121 -0
  39. package/dist/agents/release-preflight.d.ts.map +1 -0
  40. package/dist/agents/release-preflight.js +259 -0
  41. package/dist/agents/release-preflight.js.map +1 -0
  42. package/dist/agents/release-runner.d.ts +157 -0
  43. package/dist/agents/release-runner.d.ts.map +1 -0
  44. package/dist/agents/release-runner.js +719 -0
  45. package/dist/agents/release-runner.js.map +1 -0
  46. package/dist/agents/step-handoff.d.ts +190 -0
  47. package/dist/agents/step-handoff.d.ts.map +1 -0
  48. package/dist/agents/step-handoff.js +443 -0
  49. package/dist/agents/step-handoff.js.map +1 -0
  50. package/dist/cli/benchmark.d.ts.map +1 -1
  51. package/dist/cli/benchmark.js +11 -4
  52. package/dist/cli/benchmark.js.map +1 -1
  53. package/dist/cli/chat.d.ts.map +1 -1
  54. package/dist/cli/chat.js +25 -4
  55. package/dist/cli/chat.js.map +1 -1
  56. package/dist/cli/cli-program.d.ts.map +1 -1
  57. package/dist/cli/cli-program.js +9 -2
  58. package/dist/cli/cli-program.js.map +1 -1
  59. package/dist/cli/commands.d.ts +2 -1
  60. package/dist/cli/commands.d.ts.map +1 -1
  61. package/dist/cli/commands.js +3 -2
  62. package/dist/cli/commands.js.map +1 -1
  63. package/dist/cli/config.js +2 -2
  64. package/dist/cli/config.js.map +1 -1
  65. package/dist/cli/credentials.d.ts +28 -0
  66. package/dist/cli/credentials.d.ts.map +1 -0
  67. package/dist/cli/credentials.js +213 -0
  68. package/dist/cli/credentials.js.map +1 -0
  69. package/dist/cli/dashboard.d.ts +26 -0
  70. package/dist/cli/dashboard.d.ts.map +1 -1
  71. package/dist/cli/dashboard.js +123 -3
  72. package/dist/cli/dashboard.js.map +1 -1
  73. package/dist/cli/failover-runner.d.ts.map +1 -1
  74. package/dist/cli/failover-runner.js +9 -3
  75. package/dist/cli/failover-runner.js.map +1 -1
  76. package/dist/cli/intent.d.ts +1 -1
  77. package/dist/cli/intent.js +2 -2
  78. package/dist/cli/intent.js.map +1 -1
  79. package/dist/cli/loop-executor.d.ts +7 -0
  80. package/dist/cli/loop-executor.d.ts.map +1 -1
  81. package/dist/cli/loop-executor.js +75 -7
  82. package/dist/cli/loop-executor.js.map +1 -1
  83. package/dist/cli/nlu.d.ts.map +1 -1
  84. package/dist/cli/nlu.js +8 -2
  85. package/dist/cli/nlu.js.map +1 -1
  86. package/dist/cli/process-control.d.ts +15 -0
  87. package/dist/cli/process-control.d.ts.map +1 -1
  88. package/dist/cli/process-control.js +38 -14
  89. package/dist/cli/process-control.js.map +1 -1
  90. package/dist/cli/publish.d.ts +22 -0
  91. package/dist/cli/publish.d.ts.map +1 -1
  92. package/dist/cli/publish.js +109 -13
  93. package/dist/cli/publish.js.map +1 -1
  94. package/dist/config/live-credentials.d.ts +57 -0
  95. package/dist/config/live-credentials.d.ts.map +1 -0
  96. package/dist/config/live-credentials.js +126 -0
  97. package/dist/config/live-credentials.js.map +1 -0
  98. package/dist/config/paths.d.ts +18 -0
  99. package/dist/config/paths.d.ts.map +1 -1
  100. package/dist/config/paths.js +25 -0
  101. package/dist/config/paths.js.map +1 -1
  102. package/dist/federation/a2a-types.js +1 -1
  103. package/dist/federation/a2a-types.js.map +1 -1
  104. package/dist/forwarded.d.ts +2 -0
  105. package/dist/forwarded.d.ts.map +1 -0
  106. package/dist/forwarded.js +2 -0
  107. package/dist/forwarded.js.map +1 -0
  108. package/dist/inference/model-validator.d.ts +6 -1
  109. package/dist/inference/model-validator.d.ts.map +1 -1
  110. package/dist/inference/model-validator.js +7 -2
  111. package/dist/inference/model-validator.js.map +1 -1
  112. package/dist/inference/route-resolver.d.ts +116 -0
  113. package/dist/inference/route-resolver.d.ts.map +1 -0
  114. package/dist/inference/route-resolver.js +159 -0
  115. package/dist/inference/route-resolver.js.map +1 -0
  116. package/dist/inference/tool-call-utils.d.ts +44 -0
  117. package/dist/inference/tool-call-utils.d.ts.map +1 -1
  118. package/dist/inference/tool-call-utils.js +126 -4
  119. package/dist/inference/tool-call-utils.js.map +1 -1
  120. package/dist/learning/autonomy-policy.d.ts +24 -0
  121. package/dist/learning/autonomy-policy.d.ts.map +1 -1
  122. package/dist/learning/autonomy-policy.js +110 -23
  123. package/dist/learning/autonomy-policy.js.map +1 -1
  124. package/dist/learning/eval-framework.d.ts +24 -0
  125. package/dist/learning/eval-framework.d.ts.map +1 -1
  126. package/dist/learning/eval-framework.js +291 -0
  127. package/dist/learning/eval-framework.js.map +1 -1
  128. package/dist/learning/intent-envelope.d.ts +162 -0
  129. package/dist/learning/intent-envelope.d.ts.map +1 -0
  130. package/dist/learning/intent-envelope.js +235 -0
  131. package/dist/learning/intent-envelope.js.map +1 -0
  132. package/dist/learning/reasoning-trace.d.ts +2 -2
  133. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  134. package/dist/learning/reasoning-trace.js +25 -1
  135. package/dist/learning/reasoning-trace.js.map +1 -1
  136. package/dist/learning/resilient-call.d.ts.map +1 -1
  137. package/dist/learning/resilient-call.js +29 -17
  138. package/dist/learning/resilient-call.js.map +1 -1
  139. package/dist/learning/run-trace.d.ts +164 -0
  140. package/dist/learning/run-trace.d.ts.map +1 -0
  141. package/dist/learning/run-trace.js +342 -0
  142. package/dist/learning/run-trace.js.map +1 -0
  143. package/dist/learning/skill-store.d.ts.map +1 -1
  144. package/dist/learning/skill-store.js +35 -10
  145. package/dist/learning/skill-store.js.map +1 -1
  146. package/dist/learning/skill-types.d.ts +14 -0
  147. package/dist/learning/skill-types.d.ts.map +1 -1
  148. package/dist/learning/skill-types.js +19 -0
  149. package/dist/learning/skill-types.js.map +1 -1
  150. package/dist/mcp/catalog.js +2 -3
  151. package/dist/mcp/catalog.js.map +1 -1
  152. package/dist/mcp/manager.d.ts.map +1 -1
  153. package/dist/mcp/manager.js +5 -3
  154. package/dist/mcp/manager.js.map +1 -1
  155. package/dist/resources/command-manifest.json +10 -10
  156. package/dist/skills/bundled-skills.d.ts.map +1 -1
  157. package/dist/skills/bundled-skills.js +13 -2
  158. package/dist/skills/bundled-skills.js.map +1 -1
  159. package/dist/skills/secret-capture.d.ts.map +1 -1
  160. package/dist/skills/secret-capture.js +9 -4
  161. package/dist/skills/secret-capture.js.map +1 -1
  162. package/dist/tools/coding-tools.d.ts.map +1 -1
  163. package/dist/tools/coding-tools.js +33 -8
  164. package/dist/tools/coding-tools.js.map +1 -1
  165. package/dist/tools/credentials-tool.d.ts +24 -0
  166. package/dist/tools/credentials-tool.d.ts.map +1 -0
  167. package/dist/tools/credentials-tool.js +125 -0
  168. package/dist/tools/credentials-tool.js.map +1 -0
  169. package/dist/tools/edit-verification.d.ts +78 -0
  170. package/dist/tools/edit-verification.d.ts.map +1 -1
  171. package/dist/tools/edit-verification.js +213 -16
  172. package/dist/tools/edit-verification.js.map +1 -1
  173. package/dist/tools/git-tool.d.ts +25 -7
  174. package/dist/tools/git-tool.d.ts.map +1 -1
  175. package/dist/tools/git-tool.js +155 -15
  176. package/dist/tools/git-tool.js.map +1 -1
  177. package/dist/tools/loop-project-context.d.ts.map +1 -1
  178. package/dist/tools/loop-project-context.js +16 -0
  179. package/dist/tools/loop-project-context.js.map +1 -1
  180. package/dist/tools/loop-route-feed.d.ts +57 -0
  181. package/dist/tools/loop-route-feed.d.ts.map +1 -0
  182. package/dist/tools/loop-route-feed.js +101 -0
  183. package/dist/tools/loop-route-feed.js.map +1 -0
  184. package/dist/tools/pipeline-tool.d.ts.map +1 -1
  185. package/dist/tools/pipeline-tool.js +8 -2
  186. package/dist/tools/pipeline-tool.js.map +1 -1
  187. package/dist/tools/publish-tool.d.ts.map +1 -1
  188. package/dist/tools/publish-tool.js +76 -10
  189. package/dist/tools/publish-tool.js.map +1 -1
  190. package/dist/tools/registry.d.ts +52 -3
  191. package/dist/tools/registry.d.ts.map +1 -1
  192. package/dist/tools/registry.js +88 -11
  193. package/dist/tools/registry.js.map +1 -1
  194. package/dist/tools/run-cli.d.ts.map +1 -1
  195. package/dist/tools/run-cli.js +15 -2
  196. package/dist/tools/run-cli.js.map +1 -1
  197. package/dist/tools/run-terminal.d.ts +9 -0
  198. package/dist/tools/run-terminal.d.ts.map +1 -1
  199. package/dist/tools/run-terminal.js +103 -6
  200. package/dist/tools/run-terminal.js.map +1 -1
  201. package/dist/tools/skill-tool.d.ts.map +1 -1
  202. package/dist/tools/skill-tool.js +5 -0
  203. package/dist/tools/skill-tool.js.map +1 -1
  204. package/dist/tools/tool-loop.d.ts +40 -6
  205. package/dist/tools/tool-loop.d.ts.map +1 -1
  206. package/dist/tools/tool-loop.js +409 -14
  207. package/dist/tools/tool-loop.js.map +1 -1
  208. package/dist/tools/toolsets.js +2 -2
  209. package/dist/tools/toolsets.js.map +1 -1
  210. package/dist/web-dashboard/chat-console.d.ts +5 -0
  211. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  212. package/dist/web-dashboard/chat-console.js +32 -3
  213. package/dist/web-dashboard/chat-console.js.map +1 -1
  214. package/dist/web-dashboard/server.d.ts +46 -0
  215. package/dist/web-dashboard/server.d.ts.map +1 -1
  216. package/dist/web-dashboard/server.js +115 -1
  217. package/dist/web-dashboard/server.js.map +1 -1
  218. package/dist/web-dashboard/src/admin-auth.d.ts +49 -2
  219. package/dist/web-dashboard/src/admin-auth.d.ts.map +1 -1
  220. package/dist/web-dashboard/src/admin-auth.js +64 -3
  221. package/dist/web-dashboard/src/admin-auth.js.map +1 -1
  222. package/dist/web-dashboard/src/types.d.ts +41 -0
  223. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  224. package/dist/workflow/registry.js +1 -1
  225. package/dist/workflow/registry.js.map +1 -1
  226. package/package.json +9 -5
  227. package/src/web-dashboard/public/assets/index-CxDj7p6i.js +207 -0
  228. package/src/web-dashboard/public/assets/index-CxDj7p6i.js.map +1 -0
  229. package/src/web-dashboard/public/index.html +1 -1
  230. package/src/web-dashboard/public/assets/index-kCUkORm7.js +0 -207
  231. package/src/web-dashboard/public/assets/index-kCUkORm7.js.map +0 -1
@@ -27,7 +27,8 @@ import { getRouterPromotion } from '../learning/router-promotion.js';
27
27
  import { AUTH_CLEAR_THRESHOLD } from '../learning/key-hygiene.js';
28
28
  import { ACTION_LOG_FILENAME, aggregateActionTelemetry, readActionTelemetryFile, getModelRegistry, } from '../learning/model-registry.js';
29
29
  import { classifyModelEntitlement } from '../inference/model-entitlement.js';
30
- import { AdminSessions, countAdminRoleUsers, isAdminConfigured, listAdminUsers, removeAdminUser, roleForUser, verifyAdmin, writeAdminUser, MIN_ADMIN_PASSWORD_LENGTH, } from './src/admin-auth.js';
30
+ import { listUnattendedJobs } from '../learning/unattended-job.js';
31
+ import { AdminSessions, countAdminRoleUsers, isAdminConfigured, listAdminUsers, mustChangePasswordFor, removeAdminUser, roleForUser, verifyAdmin, writeAdminUser, MIN_ADMIN_PASSWORD_LENGTH, } from './src/admin-auth.js';
31
32
  import { TaskRunner } from './task-runner.js';
32
33
  import { WhatsAppPairingManager } from './whatsapp-pairing.js';
33
34
  import { ChatConsole, newChatSessionId } from './chat-console.js';
@@ -739,6 +740,44 @@ export function readPipelineRuns() {
739
740
  }
740
741
  return { total: data.runs.length, runs: data.runs };
741
742
  }
743
+ /**
744
+ * Read unattended jobs for the dashboard, most recently updated first.
745
+ *
746
+ * Never throws: a corrupt/absent store must leave the Run Timeline rendering,
747
+ * exactly like every other dashboard reader.
748
+ */
749
+ export function readUnattendedJobs() {
750
+ try {
751
+ const jobs = listUnattendedJobs()
752
+ .map((job) => ({
753
+ id: job.id,
754
+ kind: job.kind,
755
+ status: job.status,
756
+ goal: job.goal,
757
+ progress: Math.max(0, Math.min(100, Math.round(job.progress))),
758
+ ...(job.progressLine ? { progressLine: job.progressLine } : {}),
759
+ batches: job.batches,
760
+ ...(job.costUsd === undefined ? {} : { costUsd: job.costUsd }),
761
+ ...(job.tokens === undefined ? {} : { tokens: job.tokens }),
762
+ ...(job.stopReason ? { stopReason: job.stopReason } : {}),
763
+ updatedAt: job.updatedAt,
764
+ batchStats: (job.batchStats ?? []).map((s) => ({
765
+ index: s.index,
766
+ progress: s.progress,
767
+ ...(s.progressLine ? { progressLine: s.progressLine } : {}),
768
+ ...(s.costUsd === undefined ? {} : { costUsd: s.costUsd }),
769
+ ...(s.tokens === undefined ? {} : { tokens: s.tokens }),
770
+ ...(s.durationMs === undefined ? {} : { durationMs: s.durationMs }),
771
+ ...(s.error ? { error: s.error } : {}),
772
+ })),
773
+ }))
774
+ .sort((a, b) => b.updatedAt - a.updatedAt);
775
+ return { total: jobs.length, jobs };
776
+ }
777
+ catch {
778
+ return { total: 0, jobs: [] };
779
+ }
780
+ }
742
781
  /**
743
782
  * Best-effort append of a finalized run to pipeline-runs.json. Never throws —
744
783
  * a failed write must not break the dashboard or the DAG broadcast path.
@@ -2764,6 +2803,70 @@ function handleRequest(req, res) {
2764
2803
  authenticated: session !== null,
2765
2804
  user: session?.user ?? null,
2766
2805
  role: session?.role ?? null,
2806
+ // Drives the forced-change banner: the account exists and is still on the
2807
+ // published first-run default, so the GUI must take the user straight to
2808
+ // setting a real password instead of letting them wander the dashboard.
2809
+ mustChangePassword: session ? mustChangePasswordFor(session.user) : false,
2810
+ });
2811
+ return;
2812
+ }
2813
+ // ── Forced first-run password change ──────────────────────────────────────
2814
+ // A fresh install bootstraps admin/admin so a non-technical user has zero
2815
+ // setup, which means the credential is PUBLIC. This is the single gate that
2816
+ // makes that safe: while the flag is set, EVERY mutating admin route is
2817
+ // refused — provider config, API keys, users, shutdown — so a stranger who
2818
+ // typed the default password cannot do anything but change it.
2819
+ //
2820
+ // Deliberately ONE check rather than per-route: the admin write surface is
2821
+ // ~50 hand-written routes, and the route that forgets is exactly how a known
2822
+ // credential quietly becomes a real one. GET reads stay allowed (they expose
2823
+ // no secrets), and change-password/logout must remain reachable or the user
2824
+ // could never escape.
2825
+ const PASSWORD_CHANGE_EXEMPT = new Set(['/api/admin/change-password', '/api/admin/logout']);
2826
+ if (pathname.startsWith('/api/admin/') &&
2827
+ req.method !== 'GET' &&
2828
+ !PASSWORD_CHANGE_EXEMPT.has(pathname)) {
2829
+ const session = adminSessions.validate(bearerToken(req));
2830
+ if (session && mustChangePasswordFor(session.user)) {
2831
+ writeJson(res, 403, {
2832
+ ok: false,
2833
+ code: 'password_change_required',
2834
+ error: 'This dashboard is still using the default admin password. Change it to continue.',
2835
+ });
2836
+ return;
2837
+ }
2838
+ }
2839
+ if (pathname === '/api/admin/change-password' && req.method === 'POST') {
2840
+ void (async () => {
2841
+ const session = adminSessions.validate(bearerToken(req));
2842
+ if (!session) {
2843
+ writeJson(res, 401, { ok: false, error: 'Sign in first.' });
2844
+ return;
2845
+ }
2846
+ const body = await readJsonBody(req);
2847
+ const current = typeof body?.currentPassword === 'string' ? body.currentPassword : '';
2848
+ const next = typeof body?.newPassword === 'string' ? body.newPassword : '';
2849
+ if (next.length < MIN_ADMIN_PASSWORD_LENGTH) {
2850
+ writeJson(res, 400, {
2851
+ ok: false,
2852
+ error: `Choose a password of at least ${MIN_ADMIN_PASSWORD_LENGTH} characters.`,
2853
+ });
2854
+ return;
2855
+ }
2856
+ if (next === current) {
2857
+ writeJson(res, 400, { ok: false, error: 'The new password must differ from the current one.' });
2858
+ return;
2859
+ }
2860
+ if (!verifyAdmin(session.user, current)) {
2861
+ writeJson(res, 401, { ok: false, error: 'Current password is incorrect.' });
2862
+ return;
2863
+ }
2864
+ // A normal write CLEARS the forced-change flag — this is the one action
2865
+ // the gate exists to force, so it must be able to satisfy it.
2866
+ writeAdminUser(session.user, next, roleForUser(session.user));
2867
+ writeJson(res, 200, { ok: true, user: session.user });
2868
+ })().catch((err) => {
2869
+ writeJson(res, 500, { ok: false, error: err instanceof Error ? err.message : String(err) });
2767
2870
  });
2768
2871
  return;
2769
2872
  }
@@ -4190,6 +4293,14 @@ function handleRequest(req, res) {
4190
4293
  res.end(JSON.stringify(readPipelineRuns()));
4191
4294
  return;
4192
4295
  }
4296
+ // Per-batch cost/latency of unattended runs (G27) — the same measured rows
4297
+ // the CLI prints, so the Run Timeline stops showing a percentage without the
4298
+ // money and the wall clock.
4299
+ if (pathname === '/api/unattended-jobs') {
4300
+ res.writeHead(200, { 'Content-Type': 'application/json' });
4301
+ res.end(JSON.stringify(readUnattendedJobs()));
4302
+ return;
4303
+ }
4193
4304
  // P0 reasoning traces: list (summarized) + single-trace detail. The list
4194
4305
  // omits prompt/response previews so the dashboard index stays small; the
4195
4306
  // detail endpoint returns the full steps for the replay view.
@@ -4229,6 +4340,7 @@ function handleRequest(req, res) {
4229
4340
  requests: readRequestsData(),
4230
4341
  dag: readDAGData(),
4231
4342
  pipelineRuns: readPipelineRuns(),
4343
+ unattendedJobs: readUnattendedJobs(),
4232
4344
  traces: readTracesData(),
4233
4345
  serverTime: Date.now(),
4234
4346
  }));
@@ -4254,6 +4366,7 @@ function handleRequest(req, res) {
4254
4366
  modelRegistry: readModelRegistryData(),
4255
4367
  dag: readDAGData(),
4256
4368
  pipelineRuns: readPipelineRuns(),
4369
+ unattendedJobs: readUnattendedJobs(),
4257
4370
  serverTime: Date.now(),
4258
4371
  };
4259
4372
  res.write(`event: init\ndata: ${JSON.stringify(allData)}\n\n`);
@@ -4289,6 +4402,7 @@ function handleRequest(req, res) {
4289
4402
  requests: readRequestsData(),
4290
4403
  dag: readDAGData(),
4291
4404
  pipelineRuns: readPipelineRuns(),
4405
+ unattendedJobs: readUnattendedJobs(),
4292
4406
  serverTime: Date.now(),
4293
4407
  };
4294
4408
  res.write(`event: refresh\ndata: ${JSON.stringify(data)}\n\n`);