agent-nuvira 2.7.0 → 2.7.1

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 (110) hide show
  1. package/README.md +5 -2453
  2. package/dist/agents/orchestrator.d.ts.map +1 -1
  3. package/dist/agents/orchestrator.js +17 -3
  4. package/dist/agents/orchestrator.js.map +1 -1
  5. package/dist/app.js +26 -0
  6. package/dist/cli/chat.d.ts.map +1 -1
  7. package/dist/cli/chat.js +101 -2
  8. package/dist/cli/chat.js.map +1 -1
  9. package/dist/config/auth.js +18 -0
  10. package/dist/config/jwt.js +24 -0
  11. package/dist/config/keys.js +14 -0
  12. package/dist/gateway/chat-store.d.ts +32 -5
  13. package/dist/gateway/chat-store.d.ts.map +1 -1
  14. package/dist/gateway/chat-store.js +52 -6
  15. package/dist/gateway/chat-store.js.map +1 -1
  16. package/dist/gateway/registry.d.ts.map +1 -1
  17. package/dist/gateway/registry.js +42 -5
  18. package/dist/gateway/registry.js.map +1 -1
  19. package/dist/inference/model-validator.d.ts.map +1 -1
  20. package/dist/inference/model-validator.js +11 -1
  21. package/dist/inference/model-validator.js.map +1 -1
  22. package/dist/inference/tool-call-utils.d.ts +31 -0
  23. package/dist/inference/tool-call-utils.d.ts.map +1 -1
  24. package/dist/inference/tool-call-utils.js +41 -0
  25. package/dist/inference/tool-call-utils.js.map +1 -1
  26. package/dist/learning/reasoning-trace.d.ts +5 -3
  27. package/dist/learning/reasoning-trace.d.ts.map +1 -1
  28. package/dist/learning/reasoning-trace.js +2 -2
  29. package/dist/learning/reasoning-trace.js.map +1 -1
  30. package/dist/middleware/auth.js +30 -0
  31. package/dist/nlu/intent.d.ts.map +1 -1
  32. package/dist/nlu/intent.js +20 -3
  33. package/dist/nlu/intent.js.map +1 -1
  34. package/dist/passport.js +34 -0
  35. package/dist/routes/auth.js +42 -0
  36. package/dist/routes/user.js +31 -0
  37. package/dist/server.js +17 -0
  38. package/dist/tools/pipeline-tool.d.ts.map +1 -1
  39. package/dist/tools/pipeline-tool.js +14 -0
  40. package/dist/tools/pipeline-tool.js.map +1 -1
  41. package/dist/tools/release-sync.d.ts +52 -16
  42. package/dist/tools/release-sync.d.ts.map +1 -1
  43. package/dist/tools/release-sync.js +143 -79
  44. package/dist/tools/release-sync.js.map +1 -1
  45. package/dist/web-dashboard/src/App.js +85 -0
  46. package/dist/web-dashboard/src/admin-auth.test.js +186 -0
  47. package/dist/web-dashboard/src/ansi.js +23 -0
  48. package/dist/web-dashboard/src/ansi.test.js +31 -0
  49. package/dist/web-dashboard/src/api-admin-auth.test.js +172 -0
  50. package/dist/web-dashboard/src/api-admin.test.js +65 -0
  51. package/dist/web-dashboard/src/api-hub.test.js +117 -0
  52. package/dist/web-dashboard/src/api.js +1421 -0
  53. package/dist/web-dashboard/src/api.test.js +51 -0
  54. package/dist/web-dashboard/src/artifacts.js +128 -0
  55. package/dist/web-dashboard/src/artifacts.test.js +139 -0
  56. package/dist/web-dashboard/src/components/AdminPanel.js +567 -0
  57. package/dist/web-dashboard/src/components/AdminPanel.test.js +288 -0
  58. package/dist/web-dashboard/src/components/AgentHub.js +1580 -0
  59. package/dist/web-dashboard/src/components/AgentHub.test.js +343 -0
  60. package/dist/web-dashboard/src/components/BedrockOnboarding.js +320 -0
  61. package/dist/web-dashboard/src/components/BenchmarkCharts.js +228 -0
  62. package/dist/web-dashboard/src/components/ChatPage.js +1586 -0
  63. package/dist/web-dashboard/src/components/ChatPage.test.js +899 -0
  64. package/dist/web-dashboard/src/components/ContactsPage.js +141 -0
  65. package/dist/web-dashboard/src/components/CostDashboard.js +105 -0
  66. package/dist/web-dashboard/src/components/DAGView.js +477 -0
  67. package/dist/web-dashboard/src/components/DAGView.test.js +147 -0
  68. package/dist/web-dashboard/src/components/EnvVarEditor.js +138 -0
  69. package/dist/web-dashboard/src/components/EvalsPage.js +73 -0
  70. package/dist/web-dashboard/src/components/EvalsPage.test.js +120 -0
  71. package/dist/web-dashboard/src/components/ExecutionHistory.js +201 -0
  72. package/dist/web-dashboard/src/components/GatewayPage.js +40 -0
  73. package/dist/web-dashboard/src/components/GatewayPage.test.js +74 -0
  74. package/dist/web-dashboard/src/components/HealthPanel.js +68 -0
  75. package/dist/web-dashboard/src/components/HistoryBrowser.js +34 -0
  76. package/dist/web-dashboard/src/components/Layout.js +50 -0
  77. package/dist/web-dashboard/src/components/Markdown.js +152 -0
  78. package/dist/web-dashboard/src/components/Markdown.test.js +126 -0
  79. package/dist/web-dashboard/src/components/MarkdownZeroDep.js +237 -0
  80. package/dist/web-dashboard/src/components/MemoryPanel.js +81 -0
  81. package/dist/web-dashboard/src/components/ModelTimeline.js +298 -0
  82. package/dist/web-dashboard/src/components/ModelsPanel.js +1484 -0
  83. package/dist/web-dashboard/src/components/ModelsPanel.test.js +460 -0
  84. package/dist/web-dashboard/src/components/Overview.js +123 -0
  85. package/dist/web-dashboard/src/components/PhaseTimeline.js +359 -0
  86. package/dist/web-dashboard/src/components/PhaseTimeline.test.js +234 -0
  87. package/dist/web-dashboard/src/components/PlatformConfigSection.js +384 -0
  88. package/dist/web-dashboard/src/components/PlatformConfigSection.test.js +106 -0
  89. package/dist/web-dashboard/src/components/PlatformsPage.js +250 -0
  90. package/dist/web-dashboard/src/components/QuotaPanel.js +159 -0
  91. package/dist/web-dashboard/src/components/QuotaPanel.test.js +85 -0
  92. package/dist/web-dashboard/src/components/RequestsPanel.js +229 -0
  93. package/dist/web-dashboard/src/components/RequestsPanel.test.js +103 -0
  94. package/dist/web-dashboard/src/components/RoutingInsightsPanel.js +938 -0
  95. package/dist/web-dashboard/src/components/RoutingInsightsPanel.test.js +339 -0
  96. package/dist/web-dashboard/src/components/RoutingWalkthrough.js +408 -0
  97. package/dist/web-dashboard/src/components/RoutingWalkthrough.test.js +209 -0
  98. package/dist/web-dashboard/src/components/TaskConsole.js +119 -0
  99. package/dist/web-dashboard/src/components/TaskConsole.test.js +123 -0
  100. package/dist/web-dashboard/src/components/TasksPage.js +256 -0
  101. package/dist/web-dashboard/src/components/TasksPage.test.js +103 -0
  102. package/dist/web-dashboard/src/components/TracePanel.js +306 -0
  103. package/dist/web-dashboard/src/components/WhatsAppPanel.js +195 -0
  104. package/dist/web-dashboard/src/components/WhatsAppPanel.test.js +122 -0
  105. package/dist/web-dashboard/src/jsonOrNull.js +37 -0
  106. package/dist/web-dashboard/src/main.js +15 -0
  107. package/dist/web-dashboard/src/mask.js +11 -0
  108. package/dist/web-dashboard/vite.config.js +23 -0
  109. package/dist/web-dashboard/vitest.config.js +15 -0
  110. package/package.json +5 -3
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * Agent Hub API client tests (I4 + I5).
4
+ *
5
+ * fetchHub() — the aggregated read the 4-tab panel polls. setToolsetEnabled()
6
+ * — the admin-gated write (PUT /api/admin/hub/toolsets/<name>) that persists
7
+ * the toggle to buffconfig. Both follow the same stale-server contract as the
8
+ * other dashboard fetches: HTML-200 / malformed / network failure degrade to
9
+ * null or { ok:false }, never a crash.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const vitest_1 = require("vitest");
13
+ const api_1 = require("./api");
14
+ const jsonResponse = (data, status = 200) => new Response(JSON.stringify(data), {
15
+ status,
16
+ headers: { 'Content-Type': 'application/json' },
17
+ });
18
+ const htmlResponse = () => new Response('<!DOCTYPE html><html><body>SPA fallback</body></html>', {
19
+ status: 200,
20
+ headers: { 'Content-Type': 'text/html' },
21
+ });
22
+ const HUB_PAYLOAD = {
23
+ toolsets: {
24
+ toolsets: [
25
+ { name: 'core', label: 'Core', description: 'Pipeline actions', enabled: true, tools: ['build'], toolCount: 1 },
26
+ { name: 'web', label: 'Web research', description: 'Search + read', enabled: true, tools: ['web_search'], toolCount: 1 },
27
+ ],
28
+ enabled: 2,
29
+ disabled: 0,
30
+ totalTools: 2,
31
+ },
32
+ channels: {
33
+ delivery: { total: 1, pending: 1, sent: 0, failed: 0, recent: [] },
34
+ aliases: [],
35
+ reachable: [],
36
+ platforms: [
37
+ { platform: 'email', label: 'Email (SMTP)', configured: false, envVars: ['BUFF_SMTP_HOST', 'BUFF_SMTP_USER'] },
38
+ { platform: 'signal', label: 'Signal (signal-cli-rest-api)', configured: true, envVars: ['BUFF_SIGNAL_ACCOUNT'] },
39
+ ],
40
+ policies: {},
41
+ contacts: [],
42
+ statusRecipients: [],
43
+ statusRecipientDisplay: {},
44
+ inbox: { total: 0, pipeline: 0, chat: 0, help: 0, refused: 0, recent: [] },
45
+ },
46
+ artifacts: { totalSessions: 0, totalArtifacts: 0, sessions: [] },
47
+ skills: { compiled: [], hub: [], total: 0 },
48
+ adminConfigured: false,
49
+ serverTime: 123,
50
+ };
51
+ (0, vitest_1.describe)('DashboardAPI.fetchHub', () => {
52
+ (0, vitest_1.afterEach)(() => {
53
+ vitest_1.vi.restoreAllMocks();
54
+ });
55
+ (0, vitest_1.it)('parses a real /api/hub response', async () => {
56
+ vitest_1.vi.spyOn(globalThis, 'fetch').mockResolvedValue(jsonResponse(HUB_PAYLOAD));
57
+ const api = new api_1.DashboardAPI('http://test');
58
+ const data = await api.fetchHub();
59
+ (0, vitest_1.expect)(data).not.toBeNull();
60
+ (0, vitest_1.expect)(data.toolsets.toolsets).toHaveLength(2);
61
+ (0, vitest_1.expect)(data.adminConfigured).toBe(false);
62
+ });
63
+ (0, vitest_1.it)('returns null when the payload lacks the toolsets array (stale server shape)', async () => {
64
+ vitest_1.vi.spyOn(globalThis, 'fetch').mockResolvedValue(jsonResponse({ serverTime: 1 }));
65
+ const api = new api_1.DashboardAPI('http://test');
66
+ (0, vitest_1.expect)(await api.fetchHub()).toBeNull();
67
+ });
68
+ (0, vitest_1.it)('returns null on an HTML answer (stale server) — no crash', async () => {
69
+ vitest_1.vi.spyOn(globalThis, 'fetch').mockResolvedValue(htmlResponse());
70
+ const api = new api_1.DashboardAPI('http://test');
71
+ (0, vitest_1.expect)(await api.fetchHub()).toBeNull();
72
+ });
73
+ (0, vitest_1.it)('returns null on network failure', async () => {
74
+ vitest_1.vi.spyOn(globalThis, 'fetch').mockRejectedValue(new Error('down'));
75
+ const api = new api_1.DashboardAPI('http://test');
76
+ (0, vitest_1.expect)(await api.fetchHub()).toBeNull();
77
+ });
78
+ });
79
+ (0, vitest_1.describe)('DashboardAPI.setToolsetEnabled', () => {
80
+ (0, vitest_1.afterEach)(() => {
81
+ vitest_1.vi.restoreAllMocks();
82
+ (0, api_1.setAdminToken)(null);
83
+ });
84
+ (0, vitest_1.it)('PUTs { enabled } to the admin route with the bearer token', async () => {
85
+ (0, api_1.setAdminToken)('tok-123');
86
+ const fetchMock = vitest_1.vi.spyOn(globalThis, 'fetch').mockResolvedValue(jsonResponse({ ok: true, toolset: 'web', enabled: false }));
87
+ const api = new api_1.DashboardAPI('http://test');
88
+ const r = await api.setToolsetEnabled('web', false);
89
+ (0, vitest_1.expect)(r.ok).toBe(true);
90
+ const [url, init] = fetchMock.mock.calls[0];
91
+ (0, vitest_1.expect)(String(url)).toBe('http://test/api/admin/hub/toolsets/web');
92
+ (0, vitest_1.expect)(init?.method).toBe('PUT');
93
+ (0, vitest_1.expect)(JSON.parse(String(init?.body))).toEqual({ enabled: false });
94
+ (0, vitest_1.expect)((init?.headers).Authorization).toBe('Bearer tok-123');
95
+ });
96
+ (0, vitest_1.it)('surfaces 401 as unauthorized (session expired)', async () => {
97
+ vitest_1.vi.spyOn(globalThis, 'fetch').mockResolvedValue(jsonResponse({ ok: false, error: 'Not authenticated' }, 401));
98
+ const api = new api_1.DashboardAPI('http://test');
99
+ const r = await api.setToolsetEnabled('web', true);
100
+ (0, vitest_1.expect)(r.ok).toBe(false);
101
+ (0, vitest_1.expect)(r.unauthorized).toBe(true);
102
+ });
103
+ (0, vitest_1.it)('surfaces 403 as forbidden (role cannot change capabilities)', async () => {
104
+ vitest_1.vi.spyOn(globalThis, 'fetch').mockResolvedValue(jsonResponse({ ok: false, error: 'Access denied' }, 403));
105
+ const api = new api_1.DashboardAPI('http://test');
106
+ const r = await api.setToolsetEnabled('web', true);
107
+ (0, vitest_1.expect)(r.ok).toBe(false);
108
+ (0, vitest_1.expect)(r.forbidden).toBe(true);
109
+ });
110
+ (0, vitest_1.it)('returns a friendly error on network failure', async () => {
111
+ vitest_1.vi.spyOn(globalThis, 'fetch').mockRejectedValue(new Error('down'));
112
+ const api = new api_1.DashboardAPI('http://test');
113
+ const r = await api.setToolsetEnabled('web', true);
114
+ (0, vitest_1.expect)(r.ok).toBe(false);
115
+ (0, vitest_1.expect)(r.error).toContain('Could not reach');
116
+ });
117
+ });