hive-am 1.4.0 → 1.5.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 (124) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/README.md +1 -5
  3. package/bin/hive-am.mjs +242 -31
  4. package/bin/run.mjs +135 -0
  5. package/package.json +1 -1
  6. package/server/dist/connections/manager.js +15 -3
  7. package/server/dist/connections/router.js +2 -2
  8. package/server/dist/connections/secrets.js +8 -0
  9. package/server/dist/db/migrations.js +68 -0
  10. package/server/dist/db.js +11 -10
  11. package/server/dist/efforts.js +105 -0
  12. package/server/dist/http/routes/agents.js +4 -3
  13. package/server/dist/http/routes/meta.js +12 -0
  14. package/server/dist/http/routes/notebook.js +10 -2
  15. package/server/dist/http/routes/resources.js +3 -0
  16. package/server/dist/http/routes/types.js +18 -1
  17. package/server/dist/http/validate.js +5 -2
  18. package/server/dist/index.js +4 -1
  19. package/server/dist/instructions.js +10 -2
  20. package/server/dist/objects/agent-db.js +258 -0
  21. package/server/dist/objects/database.js +496 -34
  22. package/server/dist/objects/index.js +16 -8
  23. package/server/dist/providers/kiro.js +7 -1
  24. package/server/dist/providers/opencode-server.js +11 -1
  25. package/server/dist/providers/opencode.js +4 -3
  26. package/server/dist/providers/spawn.js +38 -4
  27. package/server/dist/retention.js +50 -0
  28. package/server/dist/runtime.js +52 -21
  29. package/server/dist/services/agents.js +53 -1
  30. package/server/dist/services/notebook.js +7 -3
  31. package/server/dist/skills/defaults.js +35 -1
  32. package/server/dist/skills/notebook.js +57 -13
  33. package/server/mcp/dispatch.mjs +68 -0
  34. package/web/.next/BUILD_ID +1 -1
  35. package/web/.next/app-build-manifest.json +60 -60
  36. package/web/.next/app-path-routes-manifest.json +7 -7
  37. package/web/.next/build-manifest.json +2 -2
  38. package/web/.next/prerender-manifest.json +58 -58
  39. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. package/web/.next/server/app/_not-found.html +1 -1
  41. package/web/.next/server/app/_not-found.rsc +3 -3
  42. package/web/.next/server/app/agents/[id]/page.js +4 -4
  43. package/web/.next/server/app/agents/[id]/page_client-reference-manifest.js +1 -1
  44. package/web/.next/server/app/agents/page.js +2 -2
  45. package/web/.next/server/app/agents/page_client-reference-manifest.js +1 -1
  46. package/web/.next/server/app/agents.html +1 -1
  47. package/web/.next/server/app/agents.rsc +4 -4
  48. package/web/.next/server/app/chat/page.js +1 -1
  49. package/web/.next/server/app/chat/page_client-reference-manifest.js +1 -1
  50. package/web/.next/server/app/chat.html +1 -1
  51. package/web/.next/server/app/chat.rsc +4 -4
  52. package/web/.next/server/app/connections/page.js +1 -1
  53. package/web/.next/server/app/connections/page_client-reference-manifest.js +1 -1
  54. package/web/.next/server/app/connections.html +1 -1
  55. package/web/.next/server/app/connections.rsc +4 -4
  56. package/web/.next/server/app/index.html +1 -1
  57. package/web/.next/server/app/index.rsc +4 -4
  58. package/web/.next/server/app/page.js +1 -1
  59. package/web/.next/server/app/page_client-reference-manifest.js +1 -1
  60. package/web/.next/server/app/relations/page.js +1 -1
  61. package/web/.next/server/app/relations/page_client-reference-manifest.js +1 -1
  62. package/web/.next/server/app/relations.html +1 -1
  63. package/web/.next/server/app/relations.rsc +4 -4
  64. package/web/.next/server/app/resources/[id]/page_client-reference-manifest.js +1 -1
  65. package/web/.next/server/app/resources/page_client-reference-manifest.js +1 -1
  66. package/web/.next/server/app/resources.html +1 -1
  67. package/web/.next/server/app/resources.rsc +4 -4
  68. package/web/.next/server/app/schedules/page_client-reference-manifest.js +1 -1
  69. package/web/.next/server/app/schedules.html +1 -1
  70. package/web/.next/server/app/schedules.rsc +4 -4
  71. package/web/.next/server/app/sessions/page.js +1 -1
  72. package/web/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
  73. package/web/.next/server/app/sessions.html +1 -1
  74. package/web/.next/server/app/sessions.rsc +4 -4
  75. package/web/.next/server/app/skills/page_client-reference-manifest.js +1 -1
  76. package/web/.next/server/app/skills.html +1 -1
  77. package/web/.next/server/app/skills.rsc +4 -4
  78. package/web/.next/server/app/types/page.js +1 -1
  79. package/web/.next/server/app/types/page_client-reference-manifest.js +1 -1
  80. package/web/.next/server/app/types.html +1 -1
  81. package/web/.next/server/app/types.rsc +4 -4
  82. package/web/.next/server/app-paths-manifest.json +7 -7
  83. package/web/.next/server/chunks/143.js +1 -1
  84. package/web/.next/server/chunks/213.js +1 -1
  85. package/web/.next/server/chunks/274.js +1 -1
  86. package/web/.next/server/chunks/368.js +1 -1
  87. package/web/.next/server/chunks/403.js +1 -1
  88. package/web/.next/server/chunks/612.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.json +1 -1
  92. package/web/.next/static/chunks/{316-26da9cc233ba7557.js → 107-77dd87cc2ca4f941.js} +1 -1
  93. package/web/.next/static/chunks/281-30e32d932b8b5a75.js +1 -0
  94. package/web/.next/static/chunks/517-b3b1c9044d2ef23c.js +1 -0
  95. package/web/.next/static/chunks/587-5b511f5f93910180.js +1 -0
  96. package/web/.next/static/chunks/606-14fb5aaa4d0ff22d.js +1 -0
  97. package/web/.next/static/chunks/656-f3cc78328603241a.js +1 -0
  98. package/web/.next/static/chunks/{705-f81face97b1bb1af.js → 705-ce86175dea00e6a9.js} +1 -1
  99. package/web/.next/static/chunks/757-03361e7a97a605a2.js +1 -0
  100. package/web/.next/static/chunks/app/agents/[id]/page-638e12ba3cb813c3.js +1 -0
  101. package/web/.next/static/chunks/app/agents/page-9da499db6d22731f.js +1 -0
  102. package/web/.next/static/chunks/app/chat/{page-5261b12b7d50f5d1.js → page-383bc24e72dab7fa.js} +1 -1
  103. package/web/.next/static/chunks/app/connections/{page-eb11cfb1ffeab3ca.js → page-06bd2d7d9495126a.js} +1 -1
  104. package/web/.next/static/chunks/app/page-0062ebc30322b1ae.js +1 -0
  105. package/web/.next/static/chunks/app/relations/page-02710fe1f8a670a9.js +1 -0
  106. package/web/.next/static/chunks/app/sessions/page-85638705fdc18174.js +1 -0
  107. package/web/.next/static/chunks/app/types/page-8e25f503bdcd72ad.js +1 -0
  108. package/web/.next/static/css/dfcaa19a8d46e60d.css +1 -0
  109. package/web/.next/trace +30 -30
  110. package/web/.next/static/chunks/281-113274e705940a55.js +0 -1
  111. package/web/.next/static/chunks/517-373a80c8ba432bdc.js +0 -1
  112. package/web/.next/static/chunks/562-7c2e33d838e869bf.js +0 -1
  113. package/web/.next/static/chunks/587-8e4d2be01ba7d48f.js +0 -1
  114. package/web/.next/static/chunks/606-c9a19918b02a98d0.js +0 -1
  115. package/web/.next/static/chunks/656-f537149fe28f79aa.js +0 -1
  116. package/web/.next/static/chunks/app/agents/[id]/page-6ed6edb3e74b0ebe.js +0 -1
  117. package/web/.next/static/chunks/app/agents/page-9bb8cba69776c719.js +0 -1
  118. package/web/.next/static/chunks/app/page-99e0351e6ccaa384.js +0 -1
  119. package/web/.next/static/chunks/app/relations/page-a44fd515a3b0525e.js +0 -1
  120. package/web/.next/static/chunks/app/sessions/page-a7534ebd90e982d6.js +0 -1
  121. package/web/.next/static/chunks/app/types/page-ebd37e220f77c1f3.js +0 -1
  122. package/web/.next/static/css/582723fcea1f9887.css +0 -1
  123. /package/web/.next/static/{YT6HM6qmegMJaBMX5QvuP → UDA414PFPu9ZROltNmjbX}/_buildManifest.js +0 -0
  124. /package/web/.next/static/{YT6HM6qmegMJaBMX5QvuP → UDA414PFPu9ZROltNmjbX}/_ssgManifest.js +0 -0
@@ -4,6 +4,7 @@
4
4
  // channel → channel_reply, channel_send_file, channel_react, channel_mute (agents linked to Telegram/Slack)
5
5
  // wake → wake_me, wake_when_done, schedule_create, schedule_list, schedule_cancel (agents with the Wake-ups skill: to be woken later in the same place)
6
6
  // objects → object_list, object_logs, object_action (agents with the Colony objects skill: the servers and containers of their colony)
7
+ // databases → object_db_* (agents with the Database management skill: the database resources of their colony)
7
8
  // It only talks to the hive-am HTTP API; all rules (assignments, queueing) live there.
8
9
  import { createInterface } from 'node:readline';
9
10
 
@@ -218,8 +219,68 @@ const allTools = [
218
219
  inputSchema: { type: 'object', properties: { id: { type: 'string', description: 'The schedule id.' } }, required: ['id'], additionalProperties: false },
219
220
  },
220
221
  ];
222
+
223
+ // ---- Database management (cap `databases`): one tool per operation, all answered by POST /api/agent-objects/db/<op> ----
224
+ const NAME = { type: 'string', description: 'The exact name of the database resource, as object_db_list shows it.' };
225
+ const DB = { type: 'string', description: 'Another database of the same server to use instead of the one the resource opens by default (see object_db_schema).' };
226
+ const SCHEMA = { type: 'string', description: 'The schema (PostgreSQL, SQL Server), the database (MySQL) or "main" (SQLite), as object_db_schema shows it.' };
227
+ const TABLE = { type: 'string', description: 'The table or view name.' };
228
+ const dbTool = (name, description, properties = {}, required = []) => ({ cap: 'databases', name: `object_db_${name}`, description, inputSchema: { type: 'object', properties, required, additionalProperties: false } });
229
+ const dbTools = [
230
+ dbTool('list', 'List the database resources you look after: name, engine, database and state. Use these exact names in the other object_db tools.'),
231
+ dbTool('schema', 'The structure of a database: the databases of the server, the current one and its tables and views (with a row estimate). Start here.', { name: NAME, database: DB }, ['name']),
232
+ dbTool('columns', 'The columns of a table or view: name, type, nullable, key and default.', { name: NAME, schema: SCHEMA, table: TABLE, database: DB }, ['name', 'schema', 'table']),
233
+ dbTool('describe', 'A table in full: columns, primary key, indexes, foreign keys and the number of rows.', { name: NAME, schema: SCHEMA, table: TABLE, database: DB }, ['name', 'schema', 'table']),
234
+ dbTool('search', 'Find tables, views and columns whose name contains some text, across everything the connection can see.', { name: NAME, query: { type: 'string', description: 'Part of a name.' }, database: DB }, ['name', 'query']),
235
+ dbTool('ddl', 'The CREATE statement of a table (with its indexes).', { name: NAME, schema: SCHEMA, table: TABLE, database: DB }, ['name', 'schema', 'table']),
236
+ dbTool('sample', 'The first rows of a table or view, without writing SQL.', { name: NAME, schema: SCHEMA, table: TABLE, limit: { type: 'number', description: 'How many rows (default 10).' }, database: DB }, ['name', 'schema', 'table']),
237
+ dbTool('query', 'Run ONE SQL statement: a read, or (not in read-only mode) a write or DDL. DROP and TRUNCATE need Full access. A result is cut at the resource\'s row limit and a query at its time limit. Writes are real and cannot be undone: say what you are about to change first. Results can contain secrets: never repeat them in a chat.', { name: NAME, sql: { type: 'string', description: 'One SQL statement.' }, database: DB }, ['name', 'sql']),
238
+ dbTool('exec', 'Run several SQL statements as ONE transaction: all are applied or none (a failure says which statement it was). Not in read-only mode; DROP and TRUNCATE need Full access and one of them refuses the whole script. MySQL commits by itself on CREATE, ALTER and DROP, so a DDL in the middle cannot be undone there.', { name: NAME, sql: { type: 'string', description: 'Statements separated by ;' }, database: DB }, ['name', 'sql']),
239
+ dbTool('explain', 'The execution plan of a statement, without running it.', { name: NAME, sql: { type: 'string', description: 'One SQL statement.' }, database: DB }, ['name', 'sql']),
240
+ dbTool('export', 'Write the result of a query to a CSV or JSON file inside your own working folder. It never writes outside it and never overwrites a file unless overwrite is true. Not in read-only mode.', { name: NAME, sql: { type: 'string', description: 'The query.' }, format: { type: 'string', enum: ['csv', 'json'] }, file: { type: 'string', description: 'The file, relative to your working folder.' }, overwrite: { type: 'boolean' }, database: DB }, ['name', 'sql', 'format', 'file']),
241
+ dbTool('saved', 'The named queries saved on a resource: list them, or add, update or remove one (not in read-only mode). A password in the text is replaced by ***.', { name: NAME, op: { type: 'string', enum: ['list', 'add', 'update', 'remove'] }, id: { type: 'string', description: 'The id of the saved query (update, remove).' }, query_name: { type: 'string', description: 'Its name (add, update).' }, sql: { type: 'string', description: 'Its text (add, update).' }, database: DB }, ['name', 'op']),
242
+ dbTool('history', 'The last 200 queries run on a resource (by people and by agents), or clear them (not in read-only mode).', { name: NAME, op: { type: 'string', enum: ['list', 'clear'] } }, ['name', 'op']),
243
+ dbTool('sessions', 'Who is connected to the server and what they are running (MySQL, PostgreSQL, SQL Server). Not in read-only mode.', { name: NAME }, ['name']),
244
+ dbTool('kill', 'Cancel what a session is running (MySQL, PostgreSQL) or end the session (SQL Server). Full access only. It can interrupt other people: look at object_db_sessions first and do it only when asked.', { name: NAME, id: { type: 'number', description: 'The session id from object_db_sessions.' } }, ['name', 'id']),
245
+ dbTool('config', 'How a resource connects: engine, host, port, user, database, SSL, driver properties and limits. The password is never shown: passwordSet says whether one exists.', { name: NAME }, ['name']),
246
+ dbTool('config_set', 'Change how a resource connects (Full access only). Give only the fields to change inside config; the engine cannot change. The new connection is tested first and nothing is saved if it fails. A password you give is stored and never shown again: do not repeat it anywhere. Can also rename it, move it to your colony or out of any, and choose the agent that looks after it.', { name: NAME, config: { type: 'object', description: 'Fields to change: host, port, user, password, database, file (SQLite), ssl, trustCert, props, readOnly, timeoutSec, maxRows.' }, new_name: { type: 'string' }, colony_id: { type: 'string', description: '"mine" (your colony) or "none".' }, manager_id: { type: 'string', description: 'An agent name or id, "me", or "none" to leave it to the colony.' } }, ['name']),
247
+ dbTool('test', 'Test a connection: a saved resource by name, or (Full access) a configuration that is not saved yet.', { name: { type: 'string', description: 'A saved resource to test.' }, config: { type: 'object', description: 'A draft configuration to test instead (Full access).' } }),
248
+ dbTool('create', 'Create a database resource (Full access only). The connection is tested first and nothing is created if it fails. It is created in your colony (or none) and you become the agent that looks after it. A password in config is stored and never shown again: do not repeat it anywhere.', { name: { type: 'string', description: 'The name of the new resource.' }, config: { type: 'object', description: 'engine (mysql, postgresql, sqlite, mssql) and host, port, user, password, database (or file for SQLite), ssl, trustCert, props, readOnly, timeoutSec, maxRows.' }, colony_id: { type: 'string', description: '"mine" (default) or "none".' } }, ['name', 'config']),
249
+ dbTool('delete', 'Delete a database resource (Full access only). The database itself is not touched: only hive-am forgets the connection, its saved queries and its history.', { name: NAME }, ['name']),
250
+ ];
251
+ allTools.push(...dbTools);
221
252
  const tools = allTools.filter((t) => CAPS.has(t.cap)).map(({ cap, ...t }) => t);
222
253
 
254
+ // ---- how a database answer is written for the model ----
255
+ const cellText = (v) => (v === null || v === undefined ? 'NULL' : String(v).replace(/\r?\n/g, '\\n'));
256
+ const table = (columns, rows) => [columns.map((c) => c.name ?? c).join('\t'), ...rows.map((r) => r.map(cellText).join('\t'))].join('\n');
257
+ const resultText = (r) => {
258
+ if (!r.columns?.length) return r.affected !== undefined ? `OK, ${r.affected} row${r.affected === 1 ? '' : 's'} affected (${r.ms ?? 0} ms).` : `OK (${r.ms ?? 0} ms).`;
259
+ return `${table(r.columns, r.rows)}\n${r.rows.length} row${r.rows.length === 1 ? '' : 's'}${r.truncated ? ' (cut at the resource\'s row limit: ask for fewer rows or columns)' : ''} in ${r.ms ?? 0} ms.`;
260
+ };
261
+ const dbAnswer = (op, j) => {
262
+ switch (op) {
263
+ case 'list': return j.databases.length ? j.databases.map((d) => `${d.name} · ${d.engine}${d.database ? ` · ${d.database}` : ''} · ${d.status}${d.detail ? ` (${d.detail})` : ''}`).join('\n') : 'You look after no database resources.';
264
+ case 'schema': return `${j.engine}, database ${j.database || '(none)'}${j.databases.length ? `. Databases on the server: ${j.databases.join(', ')}` : ''}.\n${j.tables.length ? j.tables.map((t) => `${t.schema}.${t.name} (${t.type}${t.rows !== undefined ? `, ~${t.rows} rows` : ''})`).join('\n') : 'No tables.'}`;
265
+ case 'columns': return j.columns.length ? j.columns.map((c) => `${c.name} ${c.type}${c.nullable ? '' : ' NOT NULL'}${c.key ? ` ${c.key}` : ''}${c.default !== undefined && c.default !== null ? ` DEFAULT ${c.default}` : ''}`).join('\n') : 'No columns: that table does not exist.';
266
+ case 'describe': return [`${j.schema}.${j.table}: ${j.rowCount ?? '?'} rows`, 'Columns:', ...j.columns.map((c) => ` ${c.name} ${c.type}${c.nullable ? '' : ' NOT NULL'}${c.key ? ` ${c.key}` : ''}`), `Primary key: ${j.primaryKey.join(', ') || '(none)'}`, 'Indexes:', ...(j.indexes.length ? j.indexes.map((i) => ` ${i.name}${i.unique ? ' UNIQUE' : ''} (${i.columns.join(', ')})`) : [' (none)']), 'Foreign keys:', ...(j.foreignKeys.length ? j.foreignKeys.map((f) => ` ${f.name}: (${f.columns.join(', ')}) -> ${f.refSchema ? `${f.refSchema}.` : ''}${f.refTable} (${f.refColumns.join(', ')})`) : [' (none)'])].join('\n');
267
+ case 'search': return j.matches.length ? j.matches.map((m) => (m.column ? `${m.schema}.${m.table}.${m.column} (column)` : `${m.schema}.${m.table} (${m.type})`)).join('\n') : 'Nothing matches.';
268
+ case 'ddl': return j.ddl;
269
+ case 'sample': case 'query': case 'explain': case 'sessions': return resultText(j);
270
+ case 'exec': return `${j.results.length} statement${j.results.length === 1 ? '' : 's'} applied in one transaction (${j.ms} ms).\n${j.results.map((r, n) => `${n + 1}. ${r.statement.replace(/\s+/g, ' ').slice(0, 80)}\n ${resultText(r).split('\n').join('\n ')}`).join('\n')}`;
271
+ case 'export': return `Wrote ${j.rows} row${j.rows === 1 ? '' : 's'} as ${j.format} to ${j.file} (${j.bytes} bytes)${j.truncated ? ', cut at the resource\'s row limit' : ''}.`;
272
+ case 'saved': return j.saved === undefined ? 'Done.' : Array.isArray(j.saved) ? (j.saved.length ? j.saved.map((q) => `${q.id} · ${q.name}${q.database ? ` (${q.database})` : ''}\n${q.sql}`).join('\n\n') : 'No saved queries.') : `Saved: ${j.saved.id} · ${j.saved.name}`;
273
+ case 'history': return j.cleared ? 'History cleared.' : j.history.length ? j.history.map((h) => `${new Date(h.at).toISOString().slice(0, 19)} ${h.ok ? 'ok' : 'FAILED'}${h.by ? ` (${h.by})` : ''} ${h.sql.replace(/\s+/g, ' ').slice(0, 160)}${h.error ? ` -> ${h.error}` : ''}`).join('\n') : 'No history.';
274
+ case 'kill': return j.text;
275
+ case 'config': return JSON.stringify({ name: j.name, ...j.config }, null, 2);
276
+ case 'test': return `Connection works: ${j.version} (${j.ms} ms).`;
277
+ case 'create': return `Created the database resource "${j.name}" (${j.engine}). You look after it now.`;
278
+ case 'config_set': return `Saved the connection of "${j.name}" after testing it.`;
279
+ case 'delete': return `Deleted the database resource "${j.deleted}".`;
280
+ default: return JSON.stringify(j);
281
+ }
282
+ };
283
+
223
284
  async function call(name, args) {
224
285
  if (!tools.some((t) => t.name === name)) throw new Error(`Unknown tool ${name}`);
225
286
  if (name === 'list_agents') {
@@ -293,6 +354,13 @@ async function call(name, args) {
293
354
  if (!r.ok) throw new Error(j.error ?? `channel_mute failed (${r.status})`);
294
355
  return j.muted ? `Muted in this thread (${j.place}). You will only be woken when someone mentions you or replies to you.` : `Unmuted in this thread (${j.place}).`;
295
356
  }
357
+ if (name.startsWith('object_db_')) {
358
+ const op = name.slice('object_db_'.length);
359
+ const r = await fetch(`${API}/api/agent-objects/db/${op}`, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ from: FROM, ...args }) });
360
+ const j = await r.json();
361
+ if (!r.ok) throw new Error(j.error ?? `${name} failed (${r.status})`);
362
+ return dbAnswer(op, j);
363
+ }
296
364
  if (name === 'object_list' || name === 'object_logs' || name === 'object_action') {
297
365
  const r = await fetch(`${API}/api/agent-objects/${name.slice('object_'.length)}`, {
298
366
  method: 'POST', headers: { 'content-type': 'application/json' },
@@ -1 +1 @@
1
- YT6HM6qmegMJaBMX5QvuP
1
+ UDA414PFPu9ZROltNmjbX
@@ -13,30 +13,30 @@
13
13
  "static/chunks/89-b194fcffe5120c44.js",
14
14
  "static/chunks/main-app-6086068e5fb5eacd.js",
15
15
  "static/css/945795da867f5250.css",
16
- "static/css/582723fcea1f9887.css",
16
+ "static/css/dfcaa19a8d46e60d.css",
17
17
  "static/chunks/586-f7017d585a84738d.js",
18
- "static/chunks/281-113274e705940a55.js",
18
+ "static/chunks/281-30e32d932b8b5a75.js",
19
19
  "static/chunks/app/layout-fad968a635f9a4b3.js"
20
20
  ],
21
- "/connections/page": [
21
+ "/chat/page": [
22
22
  "static/chunks/webpack-ef515e41a83a16ac.js",
23
23
  "static/chunks/0937d497-114a2a3de515565e.js",
24
24
  "static/chunks/89-b194fcffe5120c44.js",
25
25
  "static/chunks/main-app-6086068e5fb5eacd.js",
26
26
  "static/chunks/586-f7017d585a84738d.js",
27
- "static/chunks/281-113274e705940a55.js",
28
- "static/chunks/app/connections/page-eb11cfb1ffeab3ca.js"
27
+ "static/chunks/706-fa2be0f10ffebe6a.js",
28
+ "static/chunks/281-30e32d932b8b5a75.js",
29
+ "static/chunks/517-b3b1c9044d2ef23c.js",
30
+ "static/chunks/app/chat/page-383bc24e72dab7fa.js"
29
31
  ],
30
- "/chat/page": [
32
+ "/connections/page": [
31
33
  "static/chunks/webpack-ef515e41a83a16ac.js",
32
34
  "static/chunks/0937d497-114a2a3de515565e.js",
33
35
  "static/chunks/89-b194fcffe5120c44.js",
34
36
  "static/chunks/main-app-6086068e5fb5eacd.js",
35
37
  "static/chunks/586-f7017d585a84738d.js",
36
- "static/chunks/706-fa2be0f10ffebe6a.js",
37
- "static/chunks/281-113274e705940a55.js",
38
- "static/chunks/517-373a80c8ba432bdc.js",
39
- "static/chunks/app/chat/page-5261b12b7d50f5d1.js"
38
+ "static/chunks/281-30e32d932b8b5a75.js",
39
+ "static/chunks/app/connections/page-06bd2d7d9495126a.js"
40
40
  ],
41
41
  "/relations/page": [
42
42
  "static/chunks/webpack-ef515e41a83a16ac.js",
@@ -46,11 +46,11 @@
46
46
  "static/css/c4a545148b5320ec.css",
47
47
  "static/chunks/2b9ff8ee-969e65cc354b2150.js",
48
48
  "static/chunks/586-f7017d585a84738d.js",
49
- "static/chunks/562-7c2e33d838e869bf.js",
50
- "static/chunks/281-113274e705940a55.js",
51
- "static/chunks/app/relations/page-a44fd515a3b0525e.js"
49
+ "static/chunks/757-03361e7a97a605a2.js",
50
+ "static/chunks/281-30e32d932b8b5a75.js",
51
+ "static/chunks/app/relations/page-02710fe1f8a670a9.js"
52
52
  ],
53
- "/agents/[id]/page": [
53
+ "/resources/[id]/page": [
54
54
  "static/chunks/webpack-ef515e41a83a16ac.js",
55
55
  "static/chunks/0937d497-114a2a3de515565e.js",
56
56
  "static/chunks/89-b194fcffe5120c44.js",
@@ -59,27 +59,16 @@
59
59
  "static/chunks/706-fa2be0f10ffebe6a.js",
60
60
  "static/chunks/837-33c7480524f48577.js",
61
61
  "static/chunks/391-18768499e741112e.js",
62
- "static/chunks/316-26da9cc233ba7557.js",
63
- "static/chunks/281-113274e705940a55.js",
64
- "static/chunks/517-373a80c8ba432bdc.js",
62
+ "static/chunks/281-30e32d932b8b5a75.js",
63
+ "static/chunks/517-b3b1c9044d2ef23c.js",
65
64
  "static/chunks/350-0fe82e622e7a670f.js",
66
- "static/chunks/606-c9a19918b02a98d0.js",
65
+ "static/chunks/606-14fb5aaa4d0ff22d.js",
66
+ "static/chunks/587-5b511f5f93910180.js",
67
67
  "static/chunks/30-9adcbe92b15a6815.js",
68
- "static/chunks/705-f81face97b1bb1af.js",
69
- "static/chunks/app/agents/[id]/page-6ed6edb3e74b0ebe.js"
70
- ],
71
- "/agents/page": [
72
- "static/chunks/webpack-ef515e41a83a16ac.js",
73
- "static/chunks/0937d497-114a2a3de515565e.js",
74
- "static/chunks/89-b194fcffe5120c44.js",
75
- "static/chunks/main-app-6086068e5fb5eacd.js",
76
- "static/chunks/586-f7017d585a84738d.js",
77
- "static/chunks/706-fa2be0f10ffebe6a.js",
78
- "static/chunks/281-113274e705940a55.js",
79
- "static/chunks/517-373a80c8ba432bdc.js",
80
- "static/chunks/app/agents/page-9bb8cba69776c719.js"
68
+ "static/chunks/656-f3cc78328603241a.js",
69
+ "static/chunks/app/resources/[id]/page-fc494e85b01e8cb7.js"
81
70
  ],
82
- "/resources/[id]/page": [
71
+ "/agents/[id]/page": [
83
72
  "static/chunks/webpack-ef515e41a83a16ac.js",
84
73
  "static/chunks/0937d497-114a2a3de515565e.js",
85
74
  "static/chunks/89-b194fcffe5120c44.js",
@@ -88,14 +77,14 @@
88
77
  "static/chunks/706-fa2be0f10ffebe6a.js",
89
78
  "static/chunks/837-33c7480524f48577.js",
90
79
  "static/chunks/391-18768499e741112e.js",
91
- "static/chunks/281-113274e705940a55.js",
92
- "static/chunks/517-373a80c8ba432bdc.js",
80
+ "static/chunks/107-77dd87cc2ca4f941.js",
81
+ "static/chunks/281-30e32d932b8b5a75.js",
82
+ "static/chunks/517-b3b1c9044d2ef23c.js",
93
83
  "static/chunks/350-0fe82e622e7a670f.js",
94
- "static/chunks/606-c9a19918b02a98d0.js",
95
- "static/chunks/587-8e4d2be01ba7d48f.js",
84
+ "static/chunks/606-14fb5aaa4d0ff22d.js",
96
85
  "static/chunks/30-9adcbe92b15a6815.js",
97
- "static/chunks/656-f537149fe28f79aa.js",
98
- "static/chunks/app/resources/[id]/page-fc494e85b01e8cb7.js"
86
+ "static/chunks/705-ce86175dea00e6a9.js",
87
+ "static/chunks/app/agents/[id]/page-638e12ba3cb813c3.js"
99
88
  ],
100
89
  "/resources/page": [
101
90
  "static/chunks/webpack-ef515e41a83a16ac.js",
@@ -106,13 +95,13 @@
106
95
  "static/chunks/706-fa2be0f10ffebe6a.js",
107
96
  "static/chunks/837-33c7480524f48577.js",
108
97
  "static/chunks/391-18768499e741112e.js",
109
- "static/chunks/281-113274e705940a55.js",
110
- "static/chunks/517-373a80c8ba432bdc.js",
98
+ "static/chunks/281-30e32d932b8b5a75.js",
99
+ "static/chunks/517-b3b1c9044d2ef23c.js",
111
100
  "static/chunks/350-0fe82e622e7a670f.js",
112
- "static/chunks/606-c9a19918b02a98d0.js",
113
- "static/chunks/587-8e4d2be01ba7d48f.js",
101
+ "static/chunks/606-14fb5aaa4d0ff22d.js",
102
+ "static/chunks/587-5b511f5f93910180.js",
114
103
  "static/chunks/30-9adcbe92b15a6815.js",
115
- "static/chunks/656-f537149fe28f79aa.js",
104
+ "static/chunks/656-f3cc78328603241a.js",
116
105
  "static/chunks/app/resources/page-61cccd8fdcc2f6c8.js"
117
106
  ],
118
107
  "/page": [
@@ -123,21 +112,23 @@
123
112
  "static/chunks/586-f7017d585a84738d.js",
124
113
  "static/chunks/706-fa2be0f10ffebe6a.js",
125
114
  "static/chunks/391-18768499e741112e.js",
126
- "static/chunks/281-113274e705940a55.js",
127
- "static/chunks/517-373a80c8ba432bdc.js",
115
+ "static/chunks/281-30e32d932b8b5a75.js",
116
+ "static/chunks/517-b3b1c9044d2ef23c.js",
128
117
  "static/chunks/350-0fe82e622e7a670f.js",
129
- "static/chunks/606-c9a19918b02a98d0.js",
130
- "static/chunks/587-8e4d2be01ba7d48f.js",
131
- "static/chunks/app/page-99e0351e6ccaa384.js"
118
+ "static/chunks/606-14fb5aaa4d0ff22d.js",
119
+ "static/chunks/587-5b511f5f93910180.js",
120
+ "static/chunks/app/page-0062ebc30322b1ae.js"
132
121
  ],
133
- "/schedules/page": [
122
+ "/agents/page": [
134
123
  "static/chunks/webpack-ef515e41a83a16ac.js",
135
124
  "static/chunks/0937d497-114a2a3de515565e.js",
136
125
  "static/chunks/89-b194fcffe5120c44.js",
137
126
  "static/chunks/main-app-6086068e5fb5eacd.js",
138
127
  "static/chunks/586-f7017d585a84738d.js",
139
- "static/chunks/281-113274e705940a55.js",
140
- "static/chunks/app/schedules/page-96976fff4ee23538.js"
128
+ "static/chunks/706-fa2be0f10ffebe6a.js",
129
+ "static/chunks/281-30e32d932b8b5a75.js",
130
+ "static/chunks/517-b3b1c9044d2ef23c.js",
131
+ "static/chunks/app/agents/page-9da499db6d22731f.js"
141
132
  ],
142
133
  "/sessions/page": [
143
134
  "static/chunks/webpack-ef515e41a83a16ac.js",
@@ -147,21 +138,19 @@
147
138
  "static/chunks/586-f7017d585a84738d.js",
148
139
  "static/chunks/706-fa2be0f10ffebe6a.js",
149
140
  "static/chunks/654-92a63b3c4b412666.js",
150
- "static/chunks/281-113274e705940a55.js",
141
+ "static/chunks/281-30e32d932b8b5a75.js",
151
142
  "static/chunks/350-0fe82e622e7a670f.js",
152
- "static/chunks/705-f81face97b1bb1af.js",
153
- "static/chunks/app/sessions/page-a7534ebd90e982d6.js"
143
+ "static/chunks/705-ce86175dea00e6a9.js",
144
+ "static/chunks/app/sessions/page-85638705fdc18174.js"
154
145
  ],
155
- "/types/page": [
146
+ "/schedules/page": [
156
147
  "static/chunks/webpack-ef515e41a83a16ac.js",
157
148
  "static/chunks/0937d497-114a2a3de515565e.js",
158
149
  "static/chunks/89-b194fcffe5120c44.js",
159
150
  "static/chunks/main-app-6086068e5fb5eacd.js",
160
151
  "static/chunks/586-f7017d585a84738d.js",
161
- "static/chunks/706-fa2be0f10ffebe6a.js",
162
- "static/chunks/281-113274e705940a55.js",
163
- "static/chunks/517-373a80c8ba432bdc.js",
164
- "static/chunks/app/types/page-ebd37e220f77c1f3.js"
152
+ "static/chunks/281-30e32d932b8b5a75.js",
153
+ "static/chunks/app/schedules/page-96976fff4ee23538.js"
165
154
  ],
166
155
  "/skills/page": [
167
156
  "static/chunks/webpack-ef515e41a83a16ac.js",
@@ -170,8 +159,19 @@
170
159
  "static/chunks/main-app-6086068e5fb5eacd.js",
171
160
  "static/chunks/586-f7017d585a84738d.js",
172
161
  "static/chunks/706-fa2be0f10ffebe6a.js",
173
- "static/chunks/281-113274e705940a55.js",
162
+ "static/chunks/281-30e32d932b8b5a75.js",
174
163
  "static/chunks/app/skills/page-bc1acd0663f36129.js"
164
+ ],
165
+ "/types/page": [
166
+ "static/chunks/webpack-ef515e41a83a16ac.js",
167
+ "static/chunks/0937d497-114a2a3de515565e.js",
168
+ "static/chunks/89-b194fcffe5120c44.js",
169
+ "static/chunks/main-app-6086068e5fb5eacd.js",
170
+ "static/chunks/586-f7017d585a84738d.js",
171
+ "static/chunks/706-fa2be0f10ffebe6a.js",
172
+ "static/chunks/281-30e32d932b8b5a75.js",
173
+ "static/chunks/517-b3b1c9044d2ef23c.js",
174
+ "static/chunks/app/types/page-8e25f503bdcd72ad.js"
175
175
  ]
176
176
  }
177
177
  }
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "/_not-found/page": "/_not-found",
3
- "/apple-icon.png/route": "/apple-icon.png",
4
3
  "/favicon.ico/route": "/favicon.ico",
4
+ "/apple-icon.png/route": "/apple-icon.png",
5
5
  "/icon.png/route": "/icon.png",
6
- "/connections/page": "/connections",
7
6
  "/chat/page": "/chat",
7
+ "/connections/page": "/connections",
8
8
  "/relations/page": "/relations",
9
- "/agents/[id]/page": "/agents/[id]",
10
- "/agents/page": "/agents",
11
9
  "/resources/[id]/page": "/resources/[id]",
10
+ "/agents/[id]/page": "/agents/[id]",
12
11
  "/resources/page": "/resources",
13
12
  "/page": "/",
14
- "/schedules/page": "/schedules",
13
+ "/agents/page": "/agents",
15
14
  "/sessions/page": "/sessions",
16
- "/types/page": "/types",
17
- "/skills/page": "/skills"
15
+ "/schedules/page": "/schedules",
16
+ "/skills/page": "/skills",
17
+ "/types/page": "/types"
18
18
  }
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/YT6HM6qmegMJaBMX5QvuP/_buildManifest.js",
9
- "static/YT6HM6qmegMJaBMX5QvuP/_ssgManifest.js"
8
+ "static/UDA414PFPu9ZROltNmjbX/_buildManifest.js",
9
+ "static/UDA414PFPu9ZROltNmjbX/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [
12
12
  "static/chunks/webpack-ef515e41a83a16ac.js",