aimeat 1.36.0 → 1.37.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 (240) hide show
  1. package/dist/.env.example +6 -0
  2. package/dist/locales/en.json +186 -25
  3. package/dist/locales/fi.json +186 -25
  4. package/dist/public/components/Markdown.js +9 -0
  5. package/dist/public/components/MemoryEmbed.js +151 -0
  6. package/dist/public/components/Mermaid.js +4 -1
  7. package/dist/public/components/NotificationBell.js +45 -19
  8. package/dist/public/css/components/markdown.css +15 -0
  9. package/dist/public/css/views/agents-detail.css +17 -0
  10. package/dist/public/css/views/portfolio.css +51 -0
  11. package/dist/public/css/views/profile.css +31 -0
  12. package/dist/public/js/services/agents.js +9 -0
  13. package/dist/public/js/services/organisms.js +37 -1
  14. package/dist/public/llms-template.txt +278 -0
  15. package/dist/public/spa.html +34 -1
  16. package/dist/public/sw.js +50 -34
  17. package/dist/public/views/portfolio.js +267 -44
  18. package/dist/public/views/profile/agents/agent-card.js +4 -0
  19. package/dist/public/views/profile/agents/tab-contracts.js +112 -0
  20. package/dist/public/views/profile/landing-page.js +10 -1
  21. package/dist/public/views/profile/memory-tab.js +6 -2
  22. package/dist/public/views/profile/notifications-tab.js +9 -1
  23. package/dist/public/views/profile/organisms/home.js +23 -3
  24. package/dist/public/views/profile/organisms/participants-panel.js +89 -17
  25. package/dist/public/views/profile/organisms/workspace-apps.js +130 -0
  26. package/dist/public/views/profile/organisms/workspace.js +5 -0
  27. package/dist/public/views/profile/organisms-tab.js +1 -1
  28. package/dist/src/cli/init-wizard.d.ts.map +1 -1
  29. package/dist/src/cli/init-wizard.js +32 -0
  30. package/dist/src/cli/init-wizard.js.map +1 -1
  31. package/dist/src/config.d.ts +13 -0
  32. package/dist/src/config.d.ts.map +1 -1
  33. package/dist/src/config.js +9 -0
  34. package/dist/src/config.js.map +1 -1
  35. package/dist/src/data/aimeat-iam-package.d.ts +10 -2
  36. package/dist/src/data/aimeat-iam-package.d.ts.map +1 -1
  37. package/dist/src/data/aimeat-iam-package.js +39 -10
  38. package/dist/src/data/aimeat-iam-package.js.map +1 -1
  39. package/dist/src/generated/api-types.d.ts +328 -23
  40. package/dist/src/generated/api-types.d.ts.map +1 -1
  41. package/dist/src/generated/prisma-postgres/edge.js +4 -3
  42. package/dist/src/generated/prisma-postgres/index-browser.js +1 -0
  43. package/dist/src/generated/prisma-postgres/index.d.ts +30 -1
  44. package/dist/src/generated/prisma-postgres/index.js +4 -3
  45. package/dist/src/generated/prisma-postgres/package.json +1 -1
  46. package/dist/src/generated/prisma-postgres/schema.prisma +1 -0
  47. package/dist/src/generated/prisma-postgres/wasm.js +4 -3
  48. package/dist/src/mcp/annotations.d.ts.map +1 -1
  49. package/dist/src/mcp/annotations.js +1 -0
  50. package/dist/src/mcp/annotations.js.map +1 -1
  51. package/dist/src/mcp/catalog/definitions.d.ts +3 -0
  52. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  53. package/dist/src/mcp/catalog/definitions.js +21 -7
  54. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  55. package/dist/src/mcp/catalog/surfaces.js +1 -1
  56. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  57. package/dist/src/mcp/core.js +1 -1
  58. package/dist/src/mcp/core.js.map +1 -1
  59. package/dist/src/mcp/extensions.d.ts.map +1 -1
  60. package/dist/src/mcp/extensions.js +21 -0
  61. package/dist/src/mcp/extensions.js.map +1 -1
  62. package/dist/src/mcp/memory-extended.js +1 -1
  63. package/dist/src/mcp/memory-extended.js.map +1 -1
  64. package/dist/src/mcp/organisms.d.ts +1 -0
  65. package/dist/src/mcp/organisms.d.ts.map +1 -1
  66. package/dist/src/mcp/organisms.js +23 -6
  67. package/dist/src/mcp/organisms.js.map +1 -1
  68. package/dist/src/mcp/workspaces.d.ts +3 -0
  69. package/dist/src/mcp/workspaces.d.ts.map +1 -1
  70. package/dist/src/mcp/workspaces.js +7 -2
  71. package/dist/src/mcp/workspaces.js.map +1 -1
  72. package/dist/src/middleware/subdomain.d.ts +9 -0
  73. package/dist/src/middleware/subdomain.d.ts.map +1 -1
  74. package/dist/src/middleware/subdomain.js +24 -3
  75. package/dist/src/middleware/subdomain.js.map +1 -1
  76. package/dist/src/models/schemas.d.ts +2 -0
  77. package/dist/src/models/schemas.d.ts.map +1 -1
  78. package/dist/src/models/schemas.js +2 -2
  79. package/dist/src/models/schemas.js.map +1 -1
  80. package/dist/src/routes/admin-features.js +1 -1
  81. package/dist/src/routes/admin-features.js.map +1 -1
  82. package/dist/src/routes/agent-onboarding.d.ts.map +1 -1
  83. package/dist/src/routes/agent-onboarding.js +44 -7
  84. package/dist/src/routes/agent-onboarding.js.map +1 -1
  85. package/dist/src/routes/agents.d.ts +1 -0
  86. package/dist/src/routes/agents.d.ts.map +1 -1
  87. package/dist/src/routes/agents.js +43 -0
  88. package/dist/src/routes/agents.js.map +1 -1
  89. package/dist/src/routes/app-grants.d.ts +5 -0
  90. package/dist/src/routes/app-grants.d.ts.map +1 -1
  91. package/dist/src/routes/app-grants.js +52 -20
  92. package/dist/src/routes/app-grants.js.map +1 -1
  93. package/dist/src/routes/boards.d.ts.map +1 -1
  94. package/dist/src/routes/boards.js +4 -1
  95. package/dist/src/routes/boards.js.map +1 -1
  96. package/dist/src/routes/bootstrap.d.ts +2 -0
  97. package/dist/src/routes/bootstrap.d.ts.map +1 -1
  98. package/dist/src/routes/bootstrap.js +5 -0
  99. package/dist/src/routes/bootstrap.js.map +1 -1
  100. package/dist/src/routes/capabilities.d.ts.map +1 -1
  101. package/dist/src/routes/capabilities.js +4 -1
  102. package/dist/src/routes/capabilities.js.map +1 -1
  103. package/dist/src/routes/catalogue.d.ts.map +1 -1
  104. package/dist/src/routes/catalogue.js +5 -4
  105. package/dist/src/routes/catalogue.js.map +1 -1
  106. package/dist/src/routes/extensions.d.ts.map +1 -1
  107. package/dist/src/routes/extensions.js +11 -0
  108. package/dist/src/routes/extensions.js.map +1 -1
  109. package/dist/src/routes/ghii.d.ts.map +1 -1
  110. package/dist/src/routes/ghii.js +65 -17
  111. package/dist/src/routes/ghii.js.map +1 -1
  112. package/dist/src/routes/lib-editor.d.ts +26 -0
  113. package/dist/src/routes/lib-editor.d.ts.map +1 -0
  114. package/dist/src/routes/lib-editor.js +215 -0
  115. package/dist/src/routes/lib-editor.js.map +1 -0
  116. package/dist/src/routes/lib-markdown.d.ts +16 -1
  117. package/dist/src/routes/lib-markdown.d.ts.map +1 -1
  118. package/dist/src/routes/lib-markdown.js +281 -2
  119. package/dist/src/routes/lib-markdown.js.map +1 -1
  120. package/dist/src/routes/lib-organism.d.ts +28 -0
  121. package/dist/src/routes/lib-organism.d.ts.map +1 -0
  122. package/dist/src/routes/lib-organism.js +298 -0
  123. package/dist/src/routes/lib-organism.js.map +1 -0
  124. package/dist/src/routes/lib-portfolio-standalone.d.ts +22 -0
  125. package/dist/src/routes/lib-portfolio-standalone.d.ts.map +1 -0
  126. package/dist/src/routes/lib-portfolio-standalone.js +68 -0
  127. package/dist/src/routes/lib-portfolio-standalone.js.map +1 -0
  128. package/dist/src/routes/libs.d.ts +4 -0
  129. package/dist/src/routes/libs.d.ts.map +1 -1
  130. package/dist/src/routes/libs.js +60 -1
  131. package/dist/src/routes/libs.js.map +1 -1
  132. package/dist/src/routes/memory.d.ts +3 -0
  133. package/dist/src/routes/memory.d.ts.map +1 -1
  134. package/dist/src/routes/memory.js +58 -4
  135. package/dist/src/routes/memory.js.map +1 -1
  136. package/dist/src/routes/notifications.d.ts +5 -1
  137. package/dist/src/routes/notifications.d.ts.map +1 -1
  138. package/dist/src/routes/notifications.js +68 -3
  139. package/dist/src/routes/notifications.js.map +1 -1
  140. package/dist/src/routes/organisms.d.ts +2 -0
  141. package/dist/src/routes/organisms.d.ts.map +1 -1
  142. package/dist/src/routes/organisms.js +171 -11
  143. package/dist/src/routes/organisms.js.map +1 -1
  144. package/dist/src/routes/owners.d.ts.map +1 -1
  145. package/dist/src/routes/owners.js +12 -8
  146. package/dist/src/routes/owners.js.map +1 -1
  147. package/dist/src/routes/portfolio.d.ts +41 -1
  148. package/dist/src/routes/portfolio.d.ts.map +1 -1
  149. package/dist/src/routes/portfolio.js +94 -30
  150. package/dist/src/routes/portfolio.js.map +1 -1
  151. package/dist/src/routes/push.d.ts +15 -0
  152. package/dist/src/routes/push.d.ts.map +1 -1
  153. package/dist/src/routes/push.js +16 -1
  154. package/dist/src/routes/push.js.map +1 -1
  155. package/dist/src/routes/subdomains.d.ts +5 -0
  156. package/dist/src/routes/subdomains.d.ts.map +1 -1
  157. package/dist/src/routes/subdomains.js +56 -0
  158. package/dist/src/routes/subdomains.js.map +1 -1
  159. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  160. package/dist/src/server-bootstrap/routes-loader.js +2 -0
  161. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  162. package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
  163. package/dist/src/server-bootstrap/static-files.js +9 -4
  164. package/dist/src/server-bootstrap/static-files.js.map +1 -1
  165. package/dist/src/services/access-guard.d.ts.map +1 -1
  166. package/dist/src/services/access-guard.js +7 -0
  167. package/dist/src/services/access-guard.js.map +1 -1
  168. package/dist/src/services/ecosystem-access.d.ts +24 -8
  169. package/dist/src/services/ecosystem-access.d.ts.map +1 -1
  170. package/dist/src/services/ecosystem-access.js +27 -5
  171. package/dist/src/services/ecosystem-access.js.map +1 -1
  172. package/dist/src/services/iam/app-commands.d.ts +75 -0
  173. package/dist/src/services/iam/app-commands.d.ts.map +1 -0
  174. package/dist/src/services/iam/app-commands.js +55 -0
  175. package/dist/src/services/iam/app-commands.js.map +1 -0
  176. package/dist/src/services/iam/define-app-iam.d.ts +45 -0
  177. package/dist/src/services/iam/define-app-iam.d.ts.map +1 -0
  178. package/dist/src/services/iam/define-app-iam.js +75 -0
  179. package/dist/src/services/iam/define-app-iam.js.map +1 -0
  180. package/dist/src/services/iam/model.d.ts +113 -0
  181. package/dist/src/services/iam/model.d.ts.map +1 -0
  182. package/dist/src/services/iam/model.js +115 -0
  183. package/dist/src/services/iam/model.js.map +1 -0
  184. package/dist/src/services/mailbox-notification.d.ts +1 -0
  185. package/dist/src/services/mailbox-notification.d.ts.map +1 -1
  186. package/dist/src/services/mailbox-notification.js +3 -0
  187. package/dist/src/services/mailbox-notification.js.map +1 -1
  188. package/dist/src/services/notify.d.ts +11 -1
  189. package/dist/src/services/notify.d.ts.map +1 -1
  190. package/dist/src/services/notify.js +39 -2
  191. package/dist/src/services/notify.js.map +1 -1
  192. package/dist/src/services/organism-privacy.d.ts +46 -0
  193. package/dist/src/services/organism-privacy.d.ts.map +1 -0
  194. package/dist/src/services/organism-privacy.js +42 -0
  195. package/dist/src/services/organism-privacy.js.map +1 -0
  196. package/dist/src/services/prompt-defaults.d.ts +2 -0
  197. package/dist/src/services/prompt-defaults.d.ts.map +1 -1
  198. package/dist/src/services/prompt-defaults.js +5 -0
  199. package/dist/src/services/prompt-defaults.js.map +1 -1
  200. package/dist/src/services/scheduler.d.ts.map +1 -1
  201. package/dist/src/services/scheduler.js +11 -3
  202. package/dist/src/services/scheduler.js.map +1 -1
  203. package/dist/src/services/workspace-access.d.ts +2 -0
  204. package/dist/src/services/workspace-access.d.ts.map +1 -1
  205. package/dist/src/services/workspace-access.js +20 -8
  206. package/dist/src/services/workspace-access.js.map +1 -1
  207. package/dist/src/services/workspace-engagements.d.ts +65 -0
  208. package/dist/src/services/workspace-engagements.d.ts.map +1 -0
  209. package/dist/src/services/workspace-engagements.js +92 -0
  210. package/dist/src/services/workspace-engagements.js.map +1 -0
  211. package/dist/src/services/workspace-meta.d.ts +9 -2
  212. package/dist/src/services/workspace-meta.d.ts.map +1 -1
  213. package/dist/src/services/workspace-meta.js +22 -2
  214. package/dist/src/services/workspace-meta.js.map +1 -1
  215. package/dist/src/storage/interface.d.ts +8 -1
  216. package/dist/src/storage/interface.d.ts.map +1 -1
  217. package/dist/src/storage/interface.js.map +1 -1
  218. package/dist/src/storage/providers/mongodb/index.js +2 -2
  219. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  220. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  221. package/dist/src/storage/providers/sqlite/index.js +5 -4
  222. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  223. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  224. package/dist/src/storage/providers/sqlite/schema.js +3 -0
  225. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  226. package/dist/src/utils/env-config.d.ts.map +1 -1
  227. package/dist/src/utils/env-config.js +12 -0
  228. package/dist/src/utils/env-config.js.map +1 -1
  229. package/dist/src/utils/env-validator.d.ts.map +1 -1
  230. package/dist/src/utils/env-validator.js +8 -0
  231. package/dist/src/utils/env-validator.js.map +1 -1
  232. package/dist/static/app-catalog.html +8 -2
  233. package/dist/static/icons/badge-96.png +0 -0
  234. package/dist/static/icons/icon-192.png +0 -0
  235. package/dist/static/icons/icon-512.png +0 -0
  236. package/dist/static/manifest.json +19 -17
  237. package/dist/static/sw.js +13 -11
  238. package/package.json +1 -1
  239. package/prisma/schema.postgres.prisma +1 -0
  240. package/prisma/schema.prisma +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"aimeat-iam-package.d.ts","sourceRoot":"","sources":["../../../src/data/aimeat-iam-package.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA6S/D,wBAAgB,gBAAgB,IAAI,iBAAiB,CAkBpD"}
1
+ {"version":3,"file":"aimeat-iam-package.d.ts","sourceRoot":"","sources":["../../../src/data/aimeat-iam-package.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AA0U/D,wBAAgB,gBAAgB,IAAI,iBAAiB,CAkBpD"}
@@ -1,15 +1,30 @@
1
1
  // ── Extension `iam` — server-side enforcement (V8 sandbox: export default async (ctx, input)) ──
2
2
  const SCRIPT_CHECK = `export default async function (ctx, input) {
3
- const permission = input && input.permission;
4
- if (!permission) return { allowed: false, error: 'permission required' };
5
3
  const config = (await ctx.memory.get('iam.config')) || {};
6
4
  const roles = (await ctx.memory.get('iam.roles')) || {};
5
+ const levels = (await ctx.memory.get('iam.levels')) || {};
6
+ const commands = (await ctx.memory.get('iam.commands')) || [];
7
7
  const assignments = (await ctx.memory.get('iam.assignments')) || {};
8
8
  const caller = ctx.caller && ctx.caller.gaii;
9
9
  const role = (caller && assignments[caller]) || config.defaultRole || null;
10
10
  const perms = (role && roles[role]) || [];
11
- const allowed = perms.indexOf('*') !== -1 || perms.indexOf(permission) !== -1;
12
- return { allowed: allowed, role: role, permission: permission };
11
+ const level = (role && Object.prototype.hasOwnProperty.call(levels, role)) ? levels[role] : null;
12
+ const has = function (cap) { return perms.indexOf('*') !== -1 || perms.indexOf(cap) !== -1; };
13
+ // Command mode: check { command } — resolve the command's required capability + mutation tier so the
14
+ // caller (a human GHII or an agent GAII, identically) knows whether it may run + when to confirm.
15
+ if (input && input.command) {
16
+ let cmd = null;
17
+ for (let i = 0; i < commands.length; i++) { if (commands[i] && commands[i].id === input.command) { cmd = commands[i]; break; } }
18
+ if (!cmd) return { allowed: false, error: 'unknown command', command: input.command, role: role, level: level };
19
+ return {
20
+ allowed: has(cmd.capability), role: role, level: level, command: cmd.id, capability: cmd.capability,
21
+ tier: cmd.tier || 'write', needsConfirmation: cmd.tier === 'irreversible',
22
+ };
23
+ }
24
+ // Permission mode (legacy — unchanged shape): check { permission }.
25
+ const permission = input && input.permission;
26
+ if (!permission) return { allowed: false, error: 'permission or command required' };
27
+ return { allowed: has(permission), role: role, permission: permission, level: level };
13
28
  }`;
14
29
  const SCRIPT_ADMIN = `export default async function (ctx, input) {
15
30
  const caller = ctx.caller && ctx.caller.gaii;
@@ -21,6 +36,12 @@ const SCRIPT_ADMIN = `export default async function (ctx, input) {
21
36
  roles = { admin: ['*'], editor: ['read', 'create', 'edit'], viewer: ['read'] };
22
37
  await ctx.memory.set('iam.roles', roles);
23
38
  }
39
+ let levels = await ctx.memory.get('iam.levels');
40
+ if (!levels) {
41
+ levels = { admin: 0, editor: 10, viewer: 20 }; // BBS ordinal, lower = more power
42
+ await ctx.memory.set('iam.levels', levels);
43
+ }
44
+ let commands = (await ctx.memory.get('iam.commands')) || [];
24
45
  if (op === 'claim') {
25
46
  if (!config.ownerGhii) {
26
47
  config.ownerGhii = caller;
@@ -31,7 +52,7 @@ const SCRIPT_ADMIN = `export default async function (ctx, input) {
31
52
  }
32
53
  const isOwner = !config.ownerGhii || config.ownerGhii === caller;
33
54
  if (op === 'getState') {
34
- return { ok: true, ownerGhii: config.ownerGhii || null, isOwner: isOwner, config: config, roles: roles, assignments: assignments };
55
+ return { ok: true, ownerGhii: config.ownerGhii || null, isOwner: isOwner, config: config, roles: roles, levels: levels, commands: commands, assignments: assignments };
35
56
  }
36
57
  if (!isOwner) return { ok: false, error: 'forbidden: owner only' };
37
58
  if (op === 'setConfig') {
@@ -43,6 +64,14 @@ const SCRIPT_ADMIN = `export default async function (ctx, input) {
43
64
  if (input.roles && typeof input.roles === 'object') { roles = input.roles; await ctx.memory.set('iam.roles', roles); }
44
65
  return { ok: true, roles: roles };
45
66
  }
67
+ if (op === 'setLevels') {
68
+ if (input.levels && typeof input.levels === 'object') { levels = input.levels; await ctx.memory.set('iam.levels', levels); }
69
+ return { ok: true, levels: levels };
70
+ }
71
+ if (op === 'setCommands') {
72
+ if (Array.isArray(input.commands)) { commands = input.commands; await ctx.memory.set('iam.commands', commands); }
73
+ return { ok: true, commands: commands };
74
+ }
46
75
  if (op === 'assign') {
47
76
  if (input.ghii && input.role) { assignments[input.ghii] = input.role; await ctx.memory.set('iam.assignments', assignments); }
48
77
  return { ok: true, assignments: assignments };
@@ -57,8 +86,8 @@ const EXTENSION_IAM = JSON.stringify({
57
86
  manifest: [
58
87
  'metadata:',
59
88
  ' name: iam',
60
- ' version: 1.0.0',
61
- ' description: In-app role & permission management with server-side enforcement.',
89
+ ' version: 1.1.0',
90
+ ' description: In-app role & permission management with server-side enforcement (BBS levels + command manifest).',
62
91
  ' author: operator',
63
92
  'required_apis:',
64
93
  ' - memory',
@@ -66,9 +95,9 @@ const EXTENSION_IAM = JSON.stringify({
66
95
  ' - id: check',
67
96
  ' method: POST',
68
97
  ' path: /check',
69
- ' description: Check whether the calling user has a permission. Any authenticated user.',
70
- ' input_schema: { type: object, properties: { permission: { type: string } }, required: [permission] }',
71
- ' output_schema: { type: object, properties: { allowed: { type: boolean }, role: { type: string } } }',
98
+ ' description: Check whether the caller may do something — pass { permission } for a raw capability or { command } to resolve an app command (returns its mutation tier + needsConfirmation). Any authenticated user.',
99
+ ' input_schema: { type: object, properties: { permission: { type: string }, command: { type: string } } }',
100
+ ' output_schema: { type: object, properties: { allowed: { type: boolean }, role: { type: string }, level: { type: number }, tier: { type: string }, needsConfirmation: { type: boolean } } }',
72
101
  ' script: check.js',
73
102
  ' - id: admin',
74
103
  ' method: POST',
@@ -1 +1 @@
1
- {"version":3,"file":"aimeat-iam-package.js","sourceRoot":"","sources":["../../../src/data/aimeat-iam-package.ts"],"names":[],"mappings":"AAwBA,kGAAkG;AAElG,MAAM,YAAY,GAAG;;;;;;;;;;;EAWnB,CAAC;AAEH,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCnB,CAAC;AAEH,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;IACnC,QAAQ,EAAE;QACR,WAAW;QACX,aAAa;QACb,kBAAkB;QAClB,kFAAkF;QAClF,oBAAoB;QACpB,gBAAgB;QAChB,YAAY;QACZ,UAAU;QACV,eAAe;QACf,kBAAkB;QAClB,kBAAkB;QAClB,2FAA2F;QAC3F,0GAA0G;QAC1G,yGAAyG;QACzG,sBAAsB;QACtB,eAAe;QACf,kBAAkB;QAClB,kBAAkB;QAClB,oFAAoF;QACpF,0FAA0F;QAC1F,4EAA4E;QAC5E,sBAAsB;KACvB,CAAC,IAAI,CAAC,IAAI,CAAC;IACZ,OAAO,EAAE;QACP,UAAU,EAAE,YAAY;QACxB,UAAU,EAAE,YAAY;KACzB;CACF,CAAC,CAAC;AAEH,qGAAqG;AAErG,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4Md,CAAC;AAET,wEAAwE;AAExE,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,yUAAyU;QACtV,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,CAAC;QAC3E,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE;YACV,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,2BAA2B,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;YACxH,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,eAAe,CAAC,EAAE;SACtH;QACD,eAAe,EAAE;YACf,KAAK,EAAE,kCAAkC;YACzC,WAAW,EAAE,8cAA8c;YAC3d,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,CAAC;SAChE;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"aimeat-iam-package.js","sourceRoot":"","sources":["../../../src/data/aimeat-iam-package.ts"],"names":[],"mappings":"AAgCA,kGAAkG;AAElG,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BnB,CAAC;AAEH,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuDnB,CAAC;AAEH,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;IACnC,QAAQ,EAAE;QACR,WAAW;QACX,aAAa;QACb,kBAAkB;QAClB,kHAAkH;QAClH,oBAAoB;QACpB,gBAAgB;QAChB,YAAY;QACZ,UAAU;QACV,eAAe;QACf,kBAAkB;QAClB,kBAAkB;QAClB,yNAAyN;QACzN,6GAA6G;QAC7G,gMAAgM;QAChM,sBAAsB;QACtB,eAAe;QACf,kBAAkB;QAClB,kBAAkB;QAClB,oFAAoF;QACpF,0FAA0F;QAC1F,4EAA4E;QAC5E,sBAAsB;KACvB,CAAC,IAAI,CAAC,IAAI,CAAC;IACZ,OAAO,EAAE;QACP,UAAU,EAAE,YAAY;QACxB,UAAU,EAAE,YAAY;KACzB;CACF,CAAC,CAAC;AAEH,qGAAqG;AAErG,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4Md,CAAC;AAET,wEAAwE;AAExE,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,yUAAyU;QACtV,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,CAAC;QAC3E,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE;YACV,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,2BAA2B,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;YACxH,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,eAAe,CAAC,EAAE;SACtH;QACD,eAAe,EAAE;YACf,KAAK,EAAE,kCAAkC;YACzC,WAAW,EAAE,8cAA8c;YAC3d,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,CAAC;SAChE;KACF,CAAC;AACJ,CAAC"}
@@ -1250,6 +1250,28 @@ export interface paths {
1250
1250
  patch: operations["updateAgentTags"];
1251
1251
  trace?: never;
1252
1252
  };
1253
+ "/v1/agents/{name}/engagements": {
1254
+ parameters: {
1255
+ query?: never;
1256
+ header?: never;
1257
+ path?: never;
1258
+ cookie?: never;
1259
+ };
1260
+ /**
1261
+ * List an agent's contract engagements across all workspaces (same-owner)
1262
+ * @description The agent's contract engagements (active + retired) across every organism/workspace, enriched
1263
+ * with organism + workspace display names — powers the agent-detail Contracts tab. Same-owner
1264
+ * gated: only the owner sees where their agent works.
1265
+ */
1266
+ get: operations["listAgentEngagements"];
1267
+ put?: never;
1268
+ post?: never;
1269
+ delete?: never;
1270
+ options?: never;
1271
+ head?: never;
1272
+ patch?: never;
1273
+ trace?: never;
1274
+ };
1253
1275
  "/v1/checkin": {
1254
1276
  parameters: {
1255
1277
  query?: never;
@@ -5736,11 +5758,13 @@ export interface paths {
5736
5758
  cookie?: never;
5737
5759
  };
5738
5760
  /**
5739
- * Search the people directory
5740
- * @description Search the people directory with faceted filtering. Supports filtering
5741
- * by type, city, area, country, interests, and geo-radius. Returns
5742
- * paginated results with facet counts for cities and interests.
5743
- * No authentication required (Tier 0).
5761
+ * Search the people directory (the member "phone book")
5762
+ * @description Search the people directory with faceted filtering (type, city, area, country,
5763
+ * interests, geo-radius) with facet counts.
5764
+ *
5765
+ * Privacy (2026-07-03): **requires authentication** — you must be a signed-in user to
5766
+ * browse the directory (the anonymous internet is rejected). Entries are opt-in: only
5767
+ * profiles that chose to be listed appear.
5744
5768
  */
5745
5769
  get: operations["searchDirectory"];
5746
5770
  put?: never;
@@ -5924,6 +5948,10 @@ export interface paths {
5924
5948
  * enumerable only by the member themself (authenticated as that owner or
5925
5949
  * one of their agents) or an operator — for anyone else the member filter
5926
5950
  * degrades to public organisms only (no private-membership disclosure).
5951
+ *
5952
+ * Roster privacy: each returned organism's `members`/`agentGaiis` arrays are
5953
+ * redacted to `[]` when the caller is below that organism's `member_visibility`
5954
+ * tier; `member_count` (pre-redaction) and `members_hidden` are attached per item.
5927
5955
  */
5928
5956
  get: operations["listOrganisms"];
5929
5957
  put?: never;
@@ -5951,6 +5979,11 @@ export interface paths {
5951
5979
  * Get organism detail
5952
5980
  * @description Get detailed information about a specific organism including
5953
5981
  * member count and board reference.
5982
+ *
5983
+ * Roster privacy: when the caller is below the organism's `member_visibility`
5984
+ * tier, `organism.members`/`organism.agentGaiis` come back as `[]` and
5985
+ * `members_hidden: true` is set. `your_membership` ({ role, status } or null)
5986
+ * always answers "am I a member" for the caller; `member_count` stays.
5954
5987
  */
5955
5988
  get: operations["getOrganism"];
5956
5989
  /**
@@ -6022,9 +6055,12 @@ export interface paths {
6022
6055
  };
6023
6056
  /**
6024
6057
  * List organism members
6025
- * @description List all members of an organism. Public organisms show members
6026
- * to anyone. Private organisms require membership to view.
6027
- * Supports pagination.
6058
+ * @description List an organism's members, gated by the organism's `member_visibility`
6059
+ * tier ('public' | 'authenticated' (default) | 'members' | 'admins').
6060
+ * Below the tier the listing shrinks to the ACCOUNTABILITY rows — the
6061
+ * creator/admin rows plus the caller's own row — with `members_hidden: true`
6062
+ * and the TRUE `total` (a count is not an identity). Creator/admins and
6063
+ * operators always see the full roster.
6028
6064
  *
6029
6065
  * When the caller is an ACTIVE member of the organism (or an operator),
6030
6066
  * each member row additionally carries `agents: [{gaii, name}]` — the
@@ -6064,11 +6100,13 @@ export interface paths {
6064
6100
  */
6065
6101
  get: operations["getOrganismWorkspace"];
6066
6102
  /**
6067
- * Update a workspace's name and/or readme in place
6068
- * @description Update a workspace's editable metadata **in place** — its `name` and/or `readme` — without
6069
- * changing its id, objectTypes, schemas, sections or content (so nothing that references it gets
6070
- * orphaned). The name is kept in sync across both places it lives: the manifest
6071
- * (`meta.manifest.name`) and the organism's workspace registry (`meta.workspaces[].name`).
6103
+ * Update a workspace's definition in place (name/readme/structure/schemas/apps)
6104
+ * @description Update a workspace **in place** — its `name`, `readme`, its whole structure (a full
6105
+ * replacement `manifest`, or safe additive `add_spaces`), record `schemas`, and/or the `apps`
6106
+ * pinned to it — without changing its id (so nothing that references it gets orphaned). The
6107
+ * name is kept in sync across both places it lives: the manifest (`meta.manifest.name`) and
6108
+ * the organism's workspace registry (`meta.workspaces[].name`). App bindings live in their own
6109
+ * `…meta.apps` record, so a manifest replace never clobbers them.
6072
6110
  * Creator-only (or an org admin). Mirrors the `aimeat_workspace_update` MCP tool.
6073
6111
  */
6074
6112
  put: operations["updateOrganismWorkspace"];
@@ -6282,6 +6320,56 @@ export interface paths {
6282
6320
  patch?: never;
6283
6321
  trace?: never;
6284
6322
  };
6323
+ "/v1/organisms/{id}/workspace/engagements": {
6324
+ parameters: {
6325
+ query?: never;
6326
+ header?: never;
6327
+ path?: never;
6328
+ cookie?: never;
6329
+ };
6330
+ /**
6331
+ * List a workspace's contract engagements (active + retired)
6332
+ * @description The first-class binding between an agent's contract capability and a workspace, with an
6333
+ * active/retired lifecycle — distinct from the derived "active here" record trace. Member-gated.
6334
+ */
6335
+ get: operations["listWorkspaceEngagements"];
6336
+ put?: never;
6337
+ /**
6338
+ * Adopt (activate) a contract engagement for one of your agents
6339
+ * @description Writes an ACTIVE engagement for (agent × contract × workspace) — the source of truth an agent's
6340
+ * processing loop obeys. The caller must own the agent and be an organism member. Typically paired
6341
+ * with the adopt-contract task so the agent provisions the contract's spaces itself.
6342
+ */
6343
+ post: operations["activateWorkspaceEngagement"];
6344
+ delete?: never;
6345
+ options?: never;
6346
+ head?: never;
6347
+ patch?: never;
6348
+ trace?: never;
6349
+ };
6350
+ "/v1/organisms/{id}/workspace/engagements/retire": {
6351
+ parameters: {
6352
+ query?: never;
6353
+ header?: never;
6354
+ path?: never;
6355
+ cookie?: never;
6356
+ };
6357
+ get?: never;
6358
+ put?: never;
6359
+ /**
6360
+ * Retire a contract engagement (real off-switch)
6361
+ * @description Flips an engagement to `retired` (kept as history: who served here, until when). The agent's
6362
+ * processing loop then skips this workspace. Allowed for the agent's OWNER or the workspace
6363
+ * creator/admin. Creates a retired marker even with no prior active engagement, so an agent that
6364
+ * started working before contracts were first-class can still be retired.
6365
+ */
6366
+ post: operations["retireWorkspaceEngagement"];
6367
+ delete?: never;
6368
+ options?: never;
6369
+ head?: never;
6370
+ patch?: never;
6371
+ trace?: never;
6372
+ };
6285
6373
  "/v1/organisms/{id}/workspace/export": {
6286
6374
  parameters: {
6287
6375
  query?: never;
@@ -6595,7 +6683,19 @@ export interface paths {
6595
6683
  */
6596
6684
  get: operations["listNotifications"];
6597
6685
  put?: never;
6598
- post?: never;
6686
+ /**
6687
+ * Notify the caller's own owner (bell + browser push)
6688
+ * @description Create a notification for the CALLER's OWN owner — self-targeted only; there is no way to
6689
+ * notify an arbitrary owner. The notification lands in the header bell and, when the owner
6690
+ * has a web-push subscription, is mirrored as a browser push whose click opens `link`.
6691
+ *
6692
+ * Owner sessions may always call this. Agent sessions need the `notifications:send` scope.
6693
+ * App-grant sessions (role `app`) need `notifications:send` in their grant; an app
6694
+ * notification gets the app's name prefixed to the title (provenance) and `link` defaults to
6695
+ * the app's own open URL (`/v1/apps/{owner}/{file}?mode=inline`) so the click reopens the app.
6696
+ * Delivery is best-effort (`created: true` confirms acceptance, not push delivery).
6697
+ */
6698
+ post: operations["createNotification"];
6599
6699
  delete?: never;
6600
6700
  options?: never;
6601
6701
  head?: never;
@@ -12117,10 +12217,11 @@ export interface components {
12117
12217
  /** @enum {string} */
12118
12218
  DisputeStatus: "open" | "contested" | "escalated" | "resolved";
12119
12219
  /**
12220
+ * @description Access level. `members` (any logged-in user of this node) and `group` apply to memory records; storage files accept private/owner/public only.
12120
12221
  * @default private
12121
12222
  * @enum {string}
12122
12223
  */
12123
- Visibility: "private" | "owner" | "group" | "public";
12224
+ Visibility: "private" | "owner" | "group" | "members" | "public";
12124
12225
  /** @enum {string} */
12125
12226
  DisputeEventType: "dispute_opened" | "counter_dispute" | "message" | "re_delivery" | "accept_redelivery" | "withdraw_dispute" | "accept_fault" | "partial_offer" | "partial_accepted" | "partial_rejected" | "escalated" | "operator_ruled" | "timeout_resolved";
12126
12227
  AimeatEnvelope: {
@@ -14980,7 +15081,7 @@ export interface operations {
14980
15081
  /** @description Optional key prefix filter. */
14981
15082
  prefix?: string;
14982
15083
  /** @description Optional visibility filter. */
14983
- visibility?: "private" | "owner" | "group" | "public";
15084
+ visibility?: "private" | "owner" | "group" | "members" | "public";
14984
15085
  };
14985
15086
  header?: never;
14986
15087
  path: {
@@ -16930,6 +17031,29 @@ export interface operations {
16930
17031
  404: components["responses"]["NotFound"];
16931
17032
  };
16932
17033
  };
17034
+ listAgentEngagements: {
17035
+ parameters: {
17036
+ query?: never;
17037
+ header?: never;
17038
+ path: {
17039
+ /** @description Agent name or URL-encoded GAII */
17040
+ name: string;
17041
+ };
17042
+ cookie?: never;
17043
+ };
17044
+ requestBody?: never;
17045
+ responses: {
17046
+ /** @description { agent, engagements: [{ organism_id, ws, agent, contract, state, adoptedAt, retiredAt, organismName, wsName }] } */
17047
+ 200: {
17048
+ headers: {
17049
+ [name: string]: unknown;
17050
+ };
17051
+ content?: never;
17052
+ };
17053
+ 403: components["responses"]["Forbidden"];
17054
+ 404: components["responses"]["NotFound"];
17055
+ };
17056
+ };
16933
17057
  agentCheckin: {
16934
17058
  parameters: {
16935
17059
  query?: never;
@@ -17657,7 +17781,7 @@ export interface operations {
17657
17781
  query?: {
17658
17782
  page?: components["parameters"]["Pagination"];
17659
17783
  per_page?: components["parameters"]["PerPage"];
17660
- visibility?: "private" | "owner" | "group" | "public";
17784
+ visibility?: "private" | "owner" | "group" | "members" | "public";
17661
17785
  /** @description Comma-separated tag filter */
17662
17786
  tags?: string;
17663
17787
  /** @description Filter keys by prefix (e.g. "shared:" returns all shared:* keys) */
@@ -17831,7 +17955,7 @@ export interface operations {
17831
17955
  query: {
17832
17956
  /** @description Search query */
17833
17957
  q: string;
17834
- visibility?: "private" | "owner" | "group" | "public";
17958
+ visibility?: "private" | "owner" | "group" | "members" | "public";
17835
17959
  /** @description Exclude entries with flagCount exceeding this value (Phase 1.5 data quality filter) */
17836
17960
  max_flags?: number;
17837
17961
  /** @description Scope the search to keys beginning with this prefix (e.g. a namespace/group like "organism.{id}.") */
@@ -17888,7 +18012,7 @@ export interface operations {
17888
18012
  key: string;
17889
18013
  value: unknown;
17890
18014
  /** @enum {string} */
17891
- visibility?: "private" | "owner" | "group" | "public";
18015
+ visibility?: "private" | "owner" | "group" | "members" | "public";
17892
18016
  tags?: string[];
17893
18017
  ttl_hours?: number;
17894
18018
  }[];
@@ -18451,7 +18575,7 @@ export interface operations {
18451
18575
  * @default private
18452
18576
  * @enum {string}
18453
18577
  */
18454
- visibility?: "private" | "owner" | "group" | "public";
18578
+ visibility?: "private" | "owner" | "group" | "members" | "public";
18455
18579
  };
18456
18580
  };
18457
18581
  };
@@ -24734,6 +24858,12 @@ export interface operations {
24734
24858
  * @enum {string}
24735
24859
  */
24736
24860
  visibility?: "public" | "unlisted" | "private";
24861
+ /**
24862
+ * @description Who may see the member ROSTER (the members/agentGaiis fields and the /members listing). Unset = authenticated (any signed-in caller) — the anonymous internet never sees rosters. 'public' is a deliberate opt-in. Creator + admins stay visible at every tier (accountability); admins/operator always see the roster.
24863
+ * @default authenticated
24864
+ * @enum {string}
24865
+ */
24866
+ member_visibility?: "public" | "authenticated" | "members" | "admins";
24737
24867
  };
24738
24868
  };
24739
24869
  };
@@ -24773,7 +24903,17 @@ export interface operations {
24773
24903
  };
24774
24904
  content: {
24775
24905
  "application/json": components["schemas"]["AimeatEnvelope"] & {
24776
- data?: components["schemas"]["OrganismRecord"];
24906
+ data?: {
24907
+ organism?: components["schemas"]["OrganismRecord"];
24908
+ member_count?: number;
24909
+ readme?: string | null;
24910
+ /** @description True when the roster was redacted for this caller */
24911
+ members_hidden?: boolean;
24912
+ your_membership?: {
24913
+ role?: string;
24914
+ status?: string;
24915
+ } | null;
24916
+ };
24777
24917
  };
24778
24918
  };
24779
24919
  };
@@ -24812,6 +24952,11 @@ export interface operations {
24812
24952
  joinPolicy?: "open" | "approval" | "invite";
24813
24953
  /** @enum {string} */
24814
24954
  visibility?: "public" | "unlisted" | "private";
24955
+ /**
24956
+ * @description Who may see the member roster. 'public' = anyone (deliberate opt-in), 'authenticated' = signed-in callers (the default), 'members' = active members, 'admins' = creator/admins only.
24957
+ * @enum {string}
24958
+ */
24959
+ member_visibility?: "public" | "authenticated" | "members" | "admins";
24815
24960
  };
24816
24961
  };
24817
24962
  };
@@ -25012,6 +25157,15 @@ export interface operations {
25012
25157
  manifest?: Record<string, never> | null;
25013
25158
  /** @description Markdown readme at organism.{id}.meta.readme */
25014
25159
  readme?: unknown;
25160
+ /** @description Apps pinned to this workspace (the `…meta.apps` binding record; empty when none). Pinning is presentation/launch-context only — workspace data access stays gated per call. */
25161
+ apps?: {
25162
+ /** @description Publishing owner of the app */
25163
+ owner?: string;
25164
+ /** @description App filename under /v1/apps/{owner}/{filename} */
25165
+ filename?: string;
25166
+ /** @description Optional display label override */
25167
+ label?: string;
25168
+ }[];
25015
25169
  /** @description Records keyed by the manifest's objectType name */
25016
25170
  objects?: {
25017
25171
  [key: string]: unknown[];
@@ -25047,6 +25201,20 @@ export interface operations {
25047
25201
  name?: string;
25048
25202
  /** @description New markdown readme/intro (replaces the current one) */
25049
25203
  readme?: string;
25204
+ /** @description FULL replacement manifest (objectTypes + policy/gate + settings). For genuine restructuring; to only add spaces prefer `add_spaces`. */
25205
+ manifest?: Record<string, never>;
25206
+ /** @description ADDITIVE objectTypes to UNION into the manifest (skip-if-exists, defaults filled). Alias `add_object_types` is also accepted. */
25207
+ add_spaces?: Record<string, never>[];
25208
+ /** @description Map of namespace → JSON Schema, locked (strict) for that space's records. */
25209
+ schemas?: {
25210
+ [key: string]: Record<string, never>;
25211
+ };
25212
+ /** @description FULL replacement list of apps pinned to this workspace (`[]` clears; max 50). Each entry references a published app (/v1/apps/{owner}/{filename}). Pinning is presentation/launch-context only — workspace data access stays gated per call. */
25213
+ apps?: {
25214
+ owner: string;
25215
+ filename: string;
25216
+ label?: string;
25217
+ }[];
25050
25218
  };
25051
25219
  };
25052
25220
  };
@@ -25059,7 +25227,7 @@ export interface operations {
25059
25227
  content: {
25060
25228
  "application/json": components["schemas"]["AimeatEnvelope"] & {
25061
25229
  data?: {
25062
- /** @description Which records changed: manifest / registry / readme */
25230
+ /** @description Which records changed: manifest / registry / readme / schemas / apps */
25063
25231
  updated?: string[];
25064
25232
  creator?: string;
25065
25233
  name?: string;
@@ -25352,7 +25520,7 @@ export interface operations {
25352
25520
  * @description `enrichment` folds the per-workspace getWorkspace+activity+participants fan-out into this one
25353
25521
  * response: each readable workspace gains `enrichment: { hasManifest, recs, docs,
25354
25522
  * lastEvent:{type,instance,action,at}|null, participants:[{owner,node,isLocalNode,isCreator,isSelf,agentsCount}],
25355
- * pendingReviews }`. Workspaces with `access:none` carry no enrichment.
25523
+ * pendingReviews, apps:[{owner,filename,label?}] }`. Workspaces with `access:none` carry no enrichment.
25356
25524
  */
25357
25525
  include?: "enrichment";
25358
25526
  };
@@ -25475,6 +25643,103 @@ export interface operations {
25475
25643
  404: components["responses"]["NotFound"];
25476
25644
  };
25477
25645
  };
25646
+ listWorkspaceEngagements: {
25647
+ parameters: {
25648
+ query: {
25649
+ /** @description Workspace id */
25650
+ ws: string;
25651
+ };
25652
+ header?: never;
25653
+ path: {
25654
+ /** @description Organism ID */
25655
+ id: string;
25656
+ };
25657
+ cookie?: never;
25658
+ };
25659
+ requestBody?: never;
25660
+ responses: {
25661
+ /** @description { ws, engagements: [{ organism_id, ws, agent, owner, agentName, contract, state, adoptedAt, adoptedBy, retiredAt, retiredBy }] } */
25662
+ 200: {
25663
+ headers: {
25664
+ [name: string]: unknown;
25665
+ };
25666
+ content?: never;
25667
+ };
25668
+ 400: components["responses"]["BadRequest"];
25669
+ 403: components["responses"]["Forbidden"];
25670
+ 404: components["responses"]["NotFound"];
25671
+ };
25672
+ };
25673
+ activateWorkspaceEngagement: {
25674
+ parameters: {
25675
+ query?: never;
25676
+ header?: never;
25677
+ path: {
25678
+ /** @description Organism ID */
25679
+ id: string;
25680
+ };
25681
+ cookie?: never;
25682
+ };
25683
+ requestBody: {
25684
+ content: {
25685
+ "application/json": {
25686
+ /** @description Workspace id */
25687
+ ws: string;
25688
+ /** @description The agent (full GAII or bare name — must be owned by the caller) */
25689
+ agent: string;
25690
+ /** @description Contract id (a contract.<id> tag); omit for the bare workspace-contract marker */
25691
+ contract?: string;
25692
+ };
25693
+ };
25694
+ };
25695
+ responses: {
25696
+ /** @description { engagement } */
25697
+ 200: {
25698
+ headers: {
25699
+ [name: string]: unknown;
25700
+ };
25701
+ content?: never;
25702
+ };
25703
+ 400: components["responses"]["BadRequest"];
25704
+ 403: components["responses"]["Forbidden"];
25705
+ 404: components["responses"]["NotFound"];
25706
+ };
25707
+ };
25708
+ retireWorkspaceEngagement: {
25709
+ parameters: {
25710
+ query?: never;
25711
+ header?: never;
25712
+ path: {
25713
+ /** @description Organism ID */
25714
+ id: string;
25715
+ };
25716
+ cookie?: never;
25717
+ };
25718
+ requestBody: {
25719
+ content: {
25720
+ "application/json": {
25721
+ /** @description Workspace id */
25722
+ ws: string;
25723
+ /** @description The agent (full GAII or bare name) */
25724
+ agent: string;
25725
+ /** @description Contract id; omit for the bare marker */
25726
+ contract?: string;
25727
+ };
25728
+ };
25729
+ };
25730
+ responses: {
25731
+ /** @description { engagement } */
25732
+ 200: {
25733
+ headers: {
25734
+ [name: string]: unknown;
25735
+ };
25736
+ content?: never;
25737
+ };
25738
+ 400: components["responses"]["BadRequest"];
25739
+ 403: components["responses"]["Forbidden"];
25740
+ 404: components["responses"]["NotFound"];
25741
+ };
25742
+ };
25478
25743
  exportWorkspace: {
25479
25744
  parameters: {
25480
25745
  query: {
@@ -25975,6 +26240,46 @@ export interface operations {
25975
26240
  401: components["responses"]["Unauthorized"];
25976
26241
  };
25977
26242
  };
26243
+ createNotification: {
26244
+ parameters: {
26245
+ query?: never;
26246
+ header?: never;
26247
+ path?: never;
26248
+ cookie?: never;
26249
+ };
26250
+ requestBody: {
26251
+ content: {
26252
+ "application/json": {
26253
+ /** @description Short title shown in the bell and push */
26254
+ title: string;
26255
+ /** @description Optional longer context */
26256
+ body?: string;
26257
+ /** @description Same-node path the notification deep-links to (must start with '/'), e.g. '/v1/profile?tab=messages' */
26258
+ link?: string;
26259
+ /** @description Machine type; defaults to 'app' / 'agent' / 'custom' by caller role */
26260
+ type?: string;
26261
+ };
26262
+ };
26263
+ };
26264
+ responses: {
26265
+ /** @description Notification accepted ({ created: true, link }) */
26266
+ 201: {
26267
+ headers: {
26268
+ [name: string]: unknown;
26269
+ };
26270
+ content?: never;
26271
+ };
26272
+ 400: components["responses"]["BadRequest"];
26273
+ 401: components["responses"]["Unauthorized"];
26274
+ /** @description Missing notifications:send scope */
26275
+ 403: {
26276
+ headers: {
26277
+ [name: string]: unknown;
26278
+ };
26279
+ content?: never;
26280
+ };
26281
+ };
26282
+ };
25978
26283
  markNotificationsRead: {
25979
26284
  parameters: {
25980
26285
  query?: never;