@desplega.ai/agent-swarm 2.4.1 → 2.4.2

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 (109) hide show
  1. package/dist/{acp-adapter-zvzr538d.js → acp-adapter-dv7hmx4r.js} +1 -1
  2. package/dist/{actions-jhtqdw69.js → actions-51nc1gny.js} +16 -16
  3. package/dist/{amp-adapter-bd84rhs2.js → amp-adapter-abp5tdx8.js} +1 -1
  4. package/dist/{app-kreq1gwg.js → app-9h14qvr6.js} +3 -3
  5. package/dist/{assistant-3k22sbsq.js → assistant-wv1gz3mt.js} +17 -17
  6. package/dist/{boot-reembed-e53x6b9v.js → boot-reembed-6yn53ms9.js} +1 -1
  7. package/dist/{boot-reembed-f6z923ny.js → boot-reembed-7fcka4z5.js} +1 -1
  8. package/dist/{boot-scrub-sweep-0538vsb7.js → boot-scrub-sweep-pm1580ax.js} +2 -2
  9. package/dist/{boot-seeds-6wxqkfk2.js → boot-seeds-g5hfc1x8.js} +4 -4
  10. package/dist/{claude-adapter-gfts5044.js → claude-adapter-gf3kxhf0.js} +2 -2
  11. package/dist/{claude-sdk-session-56besmfz.js → claude-sdk-session-s2k1qd8y.js} +2 -2
  12. package/dist/{cli-tbhwrxpt.js → cli-02qm7src.js} +3 -3
  13. package/dist/{cli-3kh4kpqy.js → cli-0qvtffe9.js} +5 -5
  14. package/dist/{cli-p6argxh9.js → cli-10hhg0km.js} +6 -6
  15. package/dist/{cli-gf0kfg81.js → cli-239yjk27.js} +2 -2
  16. package/dist/{cli-kr2pmfqx.js → cli-5rk36sjf.js} +72 -59
  17. package/dist/{cli-nx462e4v.js → cli-7awf1fp8.js} +1 -1
  18. package/dist/{cli-jh0qcrga.js → cli-8sxqsbbq.js} +1 -1
  19. package/dist/{cli-axh29tyr.js → cli-8zwe9mpk.js} +5 -5
  20. package/dist/{cli-z1ew8vbq.js → cli-ahtpy9kf.js} +1 -1
  21. package/dist/{cli-3r448dqn.js → cli-bcj753sq.js} +3 -3
  22. package/dist/{cli-rqqsfz30.js → cli-d3qqdy4c.js} +82 -12
  23. package/dist/{cli-z071fb95.js → cli-efaqv1c7.js} +4 -4
  24. package/dist/{cli-s48yvzb8.js → cli-faypxz7q.js} +3 -3
  25. package/dist/{cli-m2qgh5sv.js → cli-ftyypbg5.js} +1 -1
  26. package/dist/{cli-6ncjvx55.js → cli-fyzjmseb.js} +1 -1
  27. package/dist/{cli-0bh477zn.js → cli-h38rjv87.js} +117 -9
  28. package/dist/{cli-3p8fqcnh.js → cli-h93c9vb3.js} +1 -1
  29. package/dist/{cli-rdq7tzwm.js → cli-hyfw2j1e.js} +8 -8
  30. package/dist/{cli-bn5kevnf.js → cli-n85dqg6d.js} +2 -2
  31. package/dist/{cli-fz9kewbh.js → cli-nmqdc2t3.js} +1 -1
  32. package/dist/{cli-vy0fay6k.js → cli-nn47d7e8.js} +10 -10
  33. package/dist/{cli-mfe7f7b5.js → cli-pkht5hap.js} +1 -1
  34. package/dist/{cli-xftrvxag.js → cli-r99kc9yq.js} +1 -1
  35. package/dist/{cli-p0rakbrk.js → cli-rdyw3mct.js} +1 -1
  36. package/dist/{cli-sjyetj21.js → cli-s6vr7r2d.js} +1 -1
  37. package/dist/{cli-k9z4zd4p.js → cli-saw9a6f6.js} +2 -2
  38. package/dist/{cli-ash6xxk7.js → cli-shvfedvm.js} +2 -2
  39. package/dist/{cli-syhq378v.js → cli-t30yj95q.js} +1 -1
  40. package/dist/{cli-kmqgmcnb.js → cli-y2x52gs2.js} +4 -4
  41. package/dist/{cli-471qk6s2.js → cli-y8n5k515.js} +14 -14
  42. package/dist/{cli-3tnpj2bh.js → cli-z4wd2ftv.js} +1 -1
  43. package/dist/cli.js +12 -12
  44. package/dist/{codex-adapter-p6rmm7vv.js → codex-adapter-ttygw382.js} +1 -1
  45. package/dist/{codex-session-runner-8vd5t9t0.js → codex-session-runner-60b58vv3.js} +1 -1
  46. package/dist/{commands-7ems2p13.js → commands-edmdwa4x.js} +2 -2
  47. package/dist/{controllers-connect-bg33ae53.js → controllers-connect-5fym8sw1.js} +16 -16
  48. package/dist/{db-ys2rbdft.js → db-2y0mgstc.js} +3 -3
  49. package/dist/{db-w505dwa8.js → db-nn0hcmx5.js} +5 -1
  50. package/dist/{dispatcher-0s0mckqr.js → dispatcher-0a9wwjcx.js} +15 -15
  51. package/dist/{external-channel-5b23fv8z.js → external-channel-zhvt95n3.js} +2 -2
  52. package/dist/{grok-adapter-q9fghe5q.js → grok-adapter-qnr1hp2y.js} +2 -2
  53. package/dist/{handlers-mqrym347.js → handlers-dkcarkd0.js} +18 -18
  54. package/dist/{heartbeat-tww6yx1w.js → heartbeat-gz97r7ac.js} +17 -17
  55. package/dist/{hook-dx0pkvar.js → hook-1mmdgjqs.js} +1 -1
  56. package/dist/{hook-pvmh9b6m.js → hook-x8rthca4.js} +1 -1
  57. package/dist/{http-k2ejbt05.js → http-r8f85xr9.js} +111 -65
  58. package/dist/{index-pqfwh9nn.js → index-5jecgp3n.js} +17 -17
  59. package/dist/{index-h2ek08d6.js → index-aex0eba9.js} +15 -15
  60. package/dist/{index-x5aktmp8.js → index-smxyk04s.js} +1 -1
  61. package/dist/{index-dgz61nff.js → index-vzvfqzfj.js} +15 -15
  62. package/dist/{index-2z710v4x.js → index-y7rbcrc1.js} +8 -8
  63. package/dist/{keepalive-nhvpw10z.js → keepalive-64c0f34c.js} +3 -3
  64. package/dist/{lead-jb6sf69z.js → lead-b1da0f97.js} +23 -23
  65. package/dist/{maintenance-agakc519.js → maintenance-mnxpar12.js} +1 -1
  66. package/dist/{oauth-refresh-sweep-4dcbhtn0.js → oauth-refresh-sweep-36hs2v4h.js} +2 -2
  67. package/dist/{onboard-4n2kwa4v.js → onboard-xes8de61.js} +2 -2
  68. package/dist/{otel-impl-tfa12080.js → otel-impl-fzc57kcq.js} +1 -1
  69. package/dist/{pricing-refresh-3cqx3f3x.js → pricing-refresh-1nek2w7b.js} +3 -3
  70. package/dist/{rbac-roles-y6zbfzve.js → rbac-roles-sqefb5hw.js} +2 -2
  71. package/dist/{rbac-roles-9fae5rnv.js → rbac-roles-ttyfaep2.js} +1 -1
  72. package/dist/{render-v2-emawjvc4.js → render-v2-vb527jwn.js} +3 -3
  73. package/dist/{resume-zhgts7h7.js → resume-jcdzg1bn.js} +5 -5
  74. package/dist/{session-access-cm823e06.js → session-access-zsp4wsp0.js} +4 -4
  75. package/dist/{setup-tkp99w1e.js → setup-1nb2zqd3.js} +1 -1
  76. package/dist/{work-objects-f722h263.js → work-objects-61w08fwr.js} +18 -18
  77. package/dist/{worker-p7f336rq.js → worker-c1e68hpa.js} +23 -23
  78. package/openapi.json +393 -1
  79. package/package.json +2 -2
  80. package/src/apps/catalog.generated.json +3 -2
  81. package/src/apps/definition.ts +152 -4
  82. package/src/apps/row-store.ts +19 -7
  83. package/src/apps/schema-migrate.ts +14 -6
  84. package/src/apps/script-types.ts +1 -0
  85. package/src/apps/sync.ts +20 -19
  86. package/src/be/db/tasks/read.ts +112 -0
  87. package/src/be/db.ts +2 -0
  88. package/src/be/swarm-config-guard.ts +15 -0
  89. package/src/http/apps.ts +15 -2
  90. package/src/http/status.ts +49 -43
  91. package/src/http/tasks.ts +47 -0
  92. package/src/providers/acp-targets.ts +1 -1
  93. package/src/providers/amp-adapter.ts +1 -1
  94. package/src/telemetry.ts +15 -3
  95. package/src/tests/app-row-tools.test.ts +25 -0
  96. package/src/tests/apps-json-column.test.ts +611 -0
  97. package/src/tests/apps-script-types.test.ts +2 -0
  98. package/src/tests/apps-sync-engine.test.ts +42 -0
  99. package/src/tests/db-task-read-contract.test.ts +4 -0
  100. package/src/tests/db-task-write-contract.test.ts +2 -0
  101. package/src/tests/docs-index-footprint.test.js +2 -2
  102. package/src/tests/runner-harness-telemetry-env.test.ts +6 -0
  103. package/src/tests/status.test.ts +158 -9
  104. package/src/tests/task-lineage.test.ts +180 -0
  105. package/src/tests/telemetry-init.test.ts +62 -5
  106. package/src/tests/user-token-rest-auth.test.ts +38 -0
  107. package/src/tools/app-rows.ts +5 -0
  108. package/templates/skills/apps/SKILL.md +3 -2
  109. package/templates/skills/apps/content.md +3 -2
@@ -225,6 +225,7 @@ Each column is `{ "kind": ..., "required"?: boolean, "default"?: ..., "index"?:
225
225
  | `boolean` | Boolean; set `index: true` only when equality lookups need it. |
226
226
  | `date` | ISO-8601 string; never indexed. |
227
227
  | `enum` | String from the non-empty unique `enum` list; always indexed, without `index: true`. |
228
+ | `json` | Any JSON value (object, array, nested) up to 256 KB serialized by default (`APPS_JSON_COLUMN_MAX_BYTES`); never indexed, and a named query cannot `filter` or `sort` on it. Not allowed for `userConfig` fields or element props. |
228
229
 
229
230
  `default` must match the column kind (and be one of the enum values). `required: true` rejects missing/null values unless a default supplies the value. `id`, `createdAt`, `updatedAt`, `createdBy`, `updatedBy` — and the sync envelope `source`, `syncedAt`, `stale` — are system columns and reserved names. An app created before the sync envelope that declared ordinary columns with these names surfaces `definitionError` after upgrade until they are renamed: patch in a fresh column with a `{from}` migration directive, then purge the old one. Rows always expose `id`/`createdAt`/`updatedAt`; `createdBy`/`updatedBy` record the acting principal (`user:<id>`, `agent:<id>`, `operator`, or `sync:<source>` for engine writes) and are system-managed on every row write.
230
231
 
@@ -321,7 +322,7 @@ A named query is:
321
322
  }
322
323
  ```
323
324
 
324
- `filter` is a strict AND of equality checks. A filter may target a declared model column or a system column (`id`, `createdAt`, `updatedAt`, `createdBy`, `updatedBy`, and on synced models `source`, `syncedAt`, `stale`) — filtering on `id` is the universal way to select one row for a detail view, and `{ "stale": true }` selects rows a complete pull stopped confirming. A literal value must match the column's kind; date filters compare the stored raw ISO string, not parsed instants. Omit `limit` for the default 200 rows, or set an integer from 1 through 1000. `sort.column` is a model column, `createdAt`, `updatedAt`, or `syncedAt`; `dir` is `asc` or `desc`. Query runtime state is `{ data, loading, error }` under `/queries/<queryName>`.
325
+ `filter` is a strict AND of equality checks. A filter may target a declared model column or a system column (`id`, `createdAt`, `updatedAt`, `createdBy`, `updatedBy`, and on synced models `source`, `syncedAt`, `stale`) — filtering on `id` is the universal way to select one row for a detail view, and `{ "stale": true }` selects rows a complete pull stopped confirming. A literal value must match the column's kind; date filters compare the stored raw ISO string, not parsed instants. Omit `limit` for the default 200 rows, or set an integer from 1 through 1000. `sort.column` is a non-`json` model column, `createdAt`, `updatedAt`, or `syncedAt`; `dir` is `asc` or `desc`. Query runtime state is `{ data, loading, error }` under `/queries/<queryName>`.
325
326
 
326
327
  A filter value may instead be exactly `{ "$param": "<name>" }`. At execution, the caller supplies that name and the server coerces its value to the filtered column's kind before equality matching:
327
328
 
@@ -520,7 +521,7 @@ Tones: Badge, Metric and Progress `tone` take `neutral`, `success`, `active`, `e
520
521
 
521
522
  Table details:
522
523
 
523
- - `columns[]`: `{ key, label?, kind?, tones?: {value: badgeTone}, width?: number, pinned?: "left" or "right", align?: "start" or "end", truncate?: "end" or "middle", icon?, tooltip?: "<row field>", max?: number, onChange?: chain }`. `kind` is `text`, `string`, `enum`, `number`, `boolean`, `date`, `badge`, `status`, `user`, `agent`, `relative`, `duration`, `progress`, `copy`, `switch`, or `link`; `string` and `enum` render as text. Pin id/actions columns so they survive horizontal scroll on narrow viewports.
524
+ - `columns[]`: `{ key, label?, kind?, tones?: {value: badgeTone}, width?: number, pinned?: "left" or "right", align?: "start" or "end", truncate?: "end" or "middle", icon?, tooltip?: "<row field>", max?: number, onChange?: chain }`. `kind` is `text`, `string`, `enum`, `number`, `boolean`, `date`, `badge`, `status`, `user`, `agent`, `relative`, `duration`, `progress`, `copy`, `switch`, `link`, or `json`; `string` and `enum` render as text, and `json` renders a truncated single-line `JSON.stringify` preview. Pin id/actions columns so they survive horizontal scroll on narrow viewports.
524
525
  - `status`: lifecycle values (`pending`, `in_progress`, `running`, `completed`, `failed`, `cancelled`, `paused`, `reviewing`, ...) render the dashboard status chip with its icon; other values use `tones` like `badge`.
525
526
  - `user` / `agent`: avatar plus name. `relative` (and `date`): smart time, exact time on hover. `duration`: milliseconds as `1m 23s`. `progress`: a bar against `max` (default 100). `copy`: the value plus a copy button. `link`: an http(s) URL opening in a new tab (other values render as text).
526
527
  - `switch`: a toggle. `onChange` runs with `$row` = the row with this column already set to the new value, e.g. `[{ "action": "app.mutate", "params": { "model": "m", "op": "update", "rowId": { "$row": "id" }, "values": { "enabled": { "$row": "enabled" } } } }]`. Without `onChange` the switch is read-only.
@@ -220,6 +220,7 @@ Each column is `{ "kind": ..., "required"?: boolean, "default"?: ..., "index"?:
220
220
  | `boolean` | Boolean; set `index: true` only when equality lookups need it. |
221
221
  | `date` | ISO-8601 string; never indexed. |
222
222
  | `enum` | String from the non-empty unique `enum` list; always indexed, without `index: true`. |
223
+ | `json` | Any JSON value (object, array, nested) up to 256 KB serialized by default (`APPS_JSON_COLUMN_MAX_BYTES`); never indexed, and a named query cannot `filter` or `sort` on it. Not allowed for `userConfig` fields or element props. |
223
224
 
224
225
  `default` must match the column kind (and be one of the enum values). `required: true` rejects missing/null values unless a default supplies the value. `id`, `createdAt`, `updatedAt`, `createdBy`, `updatedBy` — and the sync envelope `source`, `syncedAt`, `stale` — are system columns and reserved names. An app created before the sync envelope that declared ordinary columns with these names surfaces `definitionError` after upgrade until they are renamed: patch in a fresh column with a `{from}` migration directive, then purge the old one. Rows always expose `id`/`createdAt`/`updatedAt`; `createdBy`/`updatedBy` record the acting principal (`user:<id>`, `agent:<id>`, `operator`, or `sync:<source>` for engine writes) and are system-managed on every row write.
225
226
 
@@ -316,7 +317,7 @@ A named query is:
316
317
  }
317
318
  ```
318
319
 
319
- `filter` is a strict AND of equality checks. A filter may target a declared model column or a system column (`id`, `createdAt`, `updatedAt`, `createdBy`, `updatedBy`, and on synced models `source`, `syncedAt`, `stale`) — filtering on `id` is the universal way to select one row for a detail view, and `{ "stale": true }` selects rows a complete pull stopped confirming. A literal value must match the column's kind; date filters compare the stored raw ISO string, not parsed instants. Omit `limit` for the default 200 rows, or set an integer from 1 through 1000. `sort.column` is a model column, `createdAt`, `updatedAt`, or `syncedAt`; `dir` is `asc` or `desc`. Query runtime state is `{ data, loading, error }` under `/queries/<queryName>`.
320
+ `filter` is a strict AND of equality checks. A filter may target a declared model column or a system column (`id`, `createdAt`, `updatedAt`, `createdBy`, `updatedBy`, and on synced models `source`, `syncedAt`, `stale`) — filtering on `id` is the universal way to select one row for a detail view, and `{ "stale": true }` selects rows a complete pull stopped confirming. A literal value must match the column's kind; date filters compare the stored raw ISO string, not parsed instants. Omit `limit` for the default 200 rows, or set an integer from 1 through 1000. `sort.column` is a non-`json` model column, `createdAt`, `updatedAt`, or `syncedAt`; `dir` is `asc` or `desc`. Query runtime state is `{ data, loading, error }` under `/queries/<queryName>`.
320
321
 
321
322
  A filter value may instead be exactly `{ "$param": "<name>" }`. At execution, the caller supplies that name and the server coerces its value to the filtered column's kind before equality matching:
322
323
 
@@ -515,7 +516,7 @@ Tones: Badge, Metric and Progress `tone` take `neutral`, `success`, `active`, `e
515
516
 
516
517
  Table details:
517
518
 
518
- - `columns[]`: `{ key, label?, kind?, tones?: {value: badgeTone}, width?: number, pinned?: "left" or "right", align?: "start" or "end", truncate?: "end" or "middle", icon?, tooltip?: "<row field>", max?: number, onChange?: chain }`. `kind` is `text`, `string`, `enum`, `number`, `boolean`, `date`, `badge`, `status`, `user`, `agent`, `relative`, `duration`, `progress`, `copy`, `switch`, or `link`; `string` and `enum` render as text. Pin id/actions columns so they survive horizontal scroll on narrow viewports.
519
+ - `columns[]`: `{ key, label?, kind?, tones?: {value: badgeTone}, width?: number, pinned?: "left" or "right", align?: "start" or "end", truncate?: "end" or "middle", icon?, tooltip?: "<row field>", max?: number, onChange?: chain }`. `kind` is `text`, `string`, `enum`, `number`, `boolean`, `date`, `badge`, `status`, `user`, `agent`, `relative`, `duration`, `progress`, `copy`, `switch`, `link`, or `json`; `string` and `enum` render as text, and `json` renders a truncated single-line `JSON.stringify` preview. Pin id/actions columns so they survive horizontal scroll on narrow viewports.
519
520
  - `status`: lifecycle values (`pending`, `in_progress`, `running`, `completed`, `failed`, `cancelled`, `paused`, `reviewing`, ...) render the dashboard status chip with its icon; other values use `tones` like `badge`.
520
521
  - `user` / `agent`: avatar plus name. `relative` (and `date`): smart time, exact time on hover. `duration`: milliseconds as `1m 23s`. `progress`: a bar against `max` (default 100). `copy`: the value plus a copy button. `link`: an http(s) URL opening in a new tab (other values render as text).
521
522
  - `switch`: a toggle. `onChange` runs with `$row` = the row with this column already set to the new value, e.g. `[{ "action": "app.mutate", "params": { "model": "m", "op": "update", "rowId": { "$row": "id" }, "values": { "enabled": { "$row": "enabled" } } } }]`. Without `onChange` the switch is read-only.