@datalayer/agent-runtimes 1.5.86 → 1.5.88

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 (105) hide show
  1. package/dist-embed/chunks/{DeckComponent-D4X-rpbh.js → DeckComponent-etBrFG87.js} +1 -1
  2. package/dist-embed/chunks/{DocumentView-Aird-zRf.js → DocumentView-LE7AJ2BO.js} +1 -1
  3. package/dist-embed/chunks/{EphemeralDocument-qnhIdhNh.js → EphemeralDocument-YiGgJGkL.js} +1 -1
  4. package/dist-embed/chunks/{ExcalidrawComponent-C33gsDzG.js → ExcalidrawComponent-C5J8Uqqj.js} +1 -1
  5. package/dist-embed/chunks/{ExcalidrawModal-DHCo94OE.js → ExcalidrawModal-D3cbhMgF.js} +1 -1
  6. package/dist-embed/chunks/{JupyterLexicalExtension-Cb2zt9Ki.js → JupyterLexicalExtension-BipHQ8U3.js} +7 -7
  7. package/dist-embed/chunks/{YouTubePlugin-C0a_9VKl.js → YouTubePlugin-BewlFg9c.js} +1 -1
  8. package/dist-embed/chunks/{ar-SA-G6X2FPQ2-DS3Xmdel.js → ar-SA-G6X2FPQ2-BgdfqrVp.js} +1 -1
  9. package/dist-embed/chunks/{az-AZ-76LH7QW2-DIApsK5M.js → az-AZ-76LH7QW2-xUMz4Jqu.js} +1 -1
  10. package/dist-embed/chunks/{bg-BG-XCXSNQG7-X-aS4Onm.js → bg-BG-XCXSNQG7-UR5Ld32v.js} +1 -1
  11. package/dist-embed/chunks/{bn-BD-2XOGV67Q-1YCe_Jnl.js → bn-BD-2XOGV67Q-CCNH7olK.js} +1 -1
  12. package/dist-embed/chunks/{ca-ES-6MX7JW3Y-D26sHSba.js → ca-ES-6MX7JW3Y-DaZb-gMN.js} +1 -1
  13. package/dist-embed/chunks/{cs-CZ-2BRQDIVT-B5pRYPPF.js → cs-CZ-2BRQDIVT-OaROtN46.js} +1 -1
  14. package/dist-embed/chunks/{da-DK-5WZEPLOC-BfajxBtH.js → da-DK-5WZEPLOC-DrcoMVce.js} +1 -1
  15. package/dist-embed/chunks/{de-DE-XR44H4JA-BovBXD5H.js → de-DE-XR44H4JA-b2_lYxS1.js} +1 -1
  16. package/dist-embed/chunks/{el-GR-BZB4AONW-rLXnfS2l.js → el-GR-BZB4AONW-BOT3RaFd.js} +1 -1
  17. package/dist-embed/chunks/{es-ES-U4NZUMDT-Do4MvuPW.js → es-ES-U4NZUMDT-BVlxd_yM.js} +1 -1
  18. package/dist-embed/chunks/{eu-ES-A7QVB2H4-CldbgpdZ.js → eu-ES-A7QVB2H4-BScAWOoO.js} +1 -1
  19. package/dist-embed/chunks/{fa-IR-HGAKTJCU-C988cp8F.js → fa-IR-HGAKTJCU-Kxnh8bHZ.js} +1 -1
  20. package/dist-embed/chunks/{fi-FI-Z5N7JZ37-BYmFVIh7.js → fi-FI-Z5N7JZ37-BOmDZi5v.js} +1 -1
  21. package/dist-embed/chunks/{fr-FR-RHASNOE6-D2Tarz3u.js → fr-FR-RHASNOE6-GOPhqKT4.js} +1 -1
  22. package/dist-embed/chunks/{gl-ES-HMX3MZ6V-BLuuMSHB.js → gl-ES-HMX3MZ6V-BRZS4fho.js} +1 -1
  23. package/dist-embed/chunks/{he-IL-6SHJWFNN-CyDIOeVd.js → he-IL-6SHJWFNN-MQEVUj2T.js} +1 -1
  24. package/dist-embed/chunks/{hi-IN-IWLTKZ5I-DKCduSTz.js → hi-IN-IWLTKZ5I-D_puNbt2.js} +1 -1
  25. package/dist-embed/chunks/{hu-HU-A5ZG7DT2-CFEUsNFV.js → hu-HU-A5ZG7DT2-VTn7BLHk.js} +1 -1
  26. package/dist-embed/chunks/{id-ID-SAP4L64H-DJgKxRp8.js → id-ID-SAP4L64H-DDpkcMxl.js} +1 -1
  27. package/dist-embed/chunks/{index-CaAB7eph.js → index-BnyTIBRs.js} +1 -1
  28. package/dist-embed/chunks/{index-BvYhxJ42.js → index-D4E_ai6G.js} +1 -1
  29. package/dist-embed/chunks/{it-IT-JPQ66NNP-CB1iVsAn.js → it-IT-JPQ66NNP-Dmm1oVBi.js} +1 -1
  30. package/dist-embed/chunks/{ja-JP-DBVTYXUO-BMEokiIe.js → ja-JP-DBVTYXUO-c8yMMjUO.js} +1 -1
  31. package/dist-embed/chunks/{kaa-6HZHGXH3-NDSx8vED.js → kaa-6HZHGXH3-Cr7KlyI3.js} +1 -1
  32. package/dist-embed/chunks/{kab-KAB-ZGHBKWFO-CDD0AUe8.js → kab-KAB-ZGHBKWFO-C5lvSze2.js} +1 -1
  33. package/dist-embed/chunks/{kk-KZ-P5N5QNE5-DiW940Xv.js → kk-KZ-P5N5QNE5-BWzl0srY.js} +1 -1
  34. package/dist-embed/chunks/{km-KH-HSX4SM5Z-D1yNJSuC.js → km-KH-HSX4SM5Z-D0hsReza.js} +1 -1
  35. package/dist-embed/chunks/{ko-KR-MTYHY66A-gxN7WKqI.js → ko-KR-MTYHY66A-BG6oRC2d.js} +1 -1
  36. package/dist-embed/chunks/{ku-TR-6OUDTVRD-AGx6lASh.js → ku-TR-6OUDTVRD-BcZeKYN4.js} +1 -1
  37. package/dist-embed/chunks/{lt-LT-XHIRWOB4-7aG3WRZ7.js → lt-LT-XHIRWOB4-CDMAwSRa.js} +1 -1
  38. package/dist-embed/chunks/{lv-LV-5QDEKY6T-kYU1Z9N2.js → lv-LV-5QDEKY6T-D2MZFbM-.js} +1 -1
  39. package/dist-embed/chunks/{mr-IN-CRQNXWMA-E1I_f_B2.js → mr-IN-CRQNXWMA-C4tnFlhM.js} +1 -1
  40. package/dist-embed/chunks/{my-MM-5M5IBNSE-BLvme-se.js → my-MM-5M5IBNSE-BeA-YSi-.js} +1 -1
  41. package/dist-embed/chunks/{nb-NO-T6EIAALU-CQe3vLx-.js → nb-NO-T6EIAALU-PoKJfg4d.js} +1 -1
  42. package/dist-embed/chunks/{nl-NL-IS3SIHDZ-DQ5lObK-.js → nl-NL-IS3SIHDZ-Cf4_wadm.js} +1 -1
  43. package/dist-embed/chunks/{nn-NO-6E72VCQL-JwOO_c6b.js → nn-NO-6E72VCQL-xgmyjeCA.js} +1 -1
  44. package/dist-embed/chunks/{oc-FR-POXYY2M6-OYZJk3Hj.js → oc-FR-POXYY2M6-CdWNnVCw.js} +1 -1
  45. package/dist-embed/chunks/{pa-IN-N4M65BXN-B7p6nOzS.js → pa-IN-N4M65BXN-QYWCqzud.js} +1 -1
  46. package/dist-embed/chunks/{percentages-BXMCSKIN-Cz9igCrb.js → percentages-BXMCSKIN-azlLrVPY.js} +3 -3
  47. package/dist-embed/chunks/{pl-PL-T2D74RX3-DiIfEp3O.js → pl-PL-T2D74RX3-CR9S6Ibc.js} +1 -1
  48. package/dist-embed/chunks/{pt-BR-5N22H2LF-7rqxomNz.js → pt-BR-5N22H2LF-BdXbK3ya.js} +1 -1
  49. package/dist-embed/chunks/{pt-PT-UZXXM6DQ-DE-uZxHk.js → pt-PT-UZXXM6DQ-2XA1j-L3.js} +1 -1
  50. package/dist-embed/chunks/{ro-RO-JPDTUUEW-BlMk-egr.js → ro-RO-JPDTUUEW-BtXn8ZEx.js} +1 -1
  51. package/dist-embed/chunks/{ru-RU-B4JR7IUQ-caVTslk_.js → ru-RU-B4JR7IUQ-CQX4iIyB.js} +1 -1
  52. package/dist-embed/chunks/{si-LK-N5RQ5JYF-DT4Sk0wC.js → si-LK-N5RQ5JYF-HKjZkrpb.js} +1 -1
  53. package/dist-embed/chunks/{sk-SK-C5VTKIMK-DS8_VUwQ.js → sk-SK-C5VTKIMK-D0qjylR3.js} +1 -1
  54. package/dist-embed/chunks/{sl-SI-NN7IZMDC-Dm37QL2T.js → sl-SI-NN7IZMDC-vxztaOUj.js} +1 -1
  55. package/dist-embed/chunks/{subset-shared.chunk-ByorZVMF.js → subset-shared.chunk-DEWjD_XG.js} +1 -1
  56. package/dist-embed/chunks/{subset-worker.chunk-CDbohCL0.js → subset-worker.chunk-DWTibNnY.js} +1 -1
  57. package/dist-embed/chunks/{sv-SE-XGPEYMSR-Ds2_OJfr.js → sv-SE-XGPEYMSR-N-SacX3h.js} +1 -1
  58. package/dist-embed/chunks/{ta-IN-2NMHFXQM-DalALtL3.js → ta-IN-2NMHFXQM-9GMEN3M3.js} +1 -1
  59. package/dist-embed/chunks/{th-TH-HPSO5L25-Db3wq-Mt.js → th-TH-HPSO5L25-CeESdLid.js} +1 -1
  60. package/dist-embed/chunks/{tr-TR-DEFEU3FU-BwZ2BWFh.js → tr-TR-DEFEU3FU-BjBigRhJ.js} +1 -1
  61. package/dist-embed/chunks/transformers.web-Br6X7w0a.js +42 -0
  62. package/dist-embed/chunks/{uk-UA-QMV73CPH-CvvKxEh4.js → uk-UA-QMV73CPH-v4nMobEN.js} +1 -1
  63. package/dist-embed/chunks/{vi-VN-M7AON7JQ-CWecJG5X.js → vi-VN-M7AON7JQ-D5thvMrO.js} +1 -1
  64. package/dist-embed/chunks/{zh-CN-LNUGB5OW-Bt8FQMA4.js → zh-CN-LNUGB5OW-Cn3ae1JT.js} +1 -1
  65. package/dist-embed/chunks/{zh-HK-E62DVLB3-D-aO7Cxy.js → zh-HK-E62DVLB3-OlNuka00.js} +1 -1
  66. package/dist-embed/chunks/{zh-TW-RAJ6MFWO-DhGr0I8R.js → zh-TW-RAJ6MFWO-DAwaB-Vu.js} +1 -1
  67. package/dist-embed/datalayer-app-main.js +8 -8
  68. package/lib/apps/apps/checks.d.ts +1 -1
  69. package/lib/apps/apps/checks.js +1 -1
  70. package/lib/apps/apps/computer.d.ts +1 -1
  71. package/lib/apps/apps/computer.js +1 -1
  72. package/lib/apps/apps/pluginPair.d.ts +1 -1
  73. package/lib/apps/apps/rules.d.ts +1 -1
  74. package/lib/apps/apps/rules.js +2 -2
  75. package/lib/apps/apps/visitorToken.d.ts +1 -1
  76. package/lib/apps/apps/visitorToken.js +1 -1
  77. package/lib/apps/core/appFiles.js +1 -1
  78. package/lib/apps/plugins/a2ui-surface/toolResult.d.ts +1 -1
  79. package/lib/apps/plugins/a2ui-surface/toolResult.js +1 -1
  80. package/lib/apps/plugins/app-page/appPageModel.d.ts +1 -1
  81. package/lib/apps/plugins/app-page/appPageModel.js +1 -1
  82. package/lib/components/cards/ToolApprovalCard.js +5 -2
  83. package/lib/portable/hosts/client.d.ts +11 -1
  84. package/lib/portable/hosts/client.js +12 -6
  85. package/lib/portable/hosts/contracts.json +9 -3
  86. package/lib/portable/hosts/index.d.ts +1 -1
  87. package/lib/portable/records.d.ts +1 -1
  88. package/lib/portable/records.js +1 -1
  89. package/lib/portable/semantic-events.json +3 -3
  90. package/lib/portable/semanticOfAgUi.d.ts +1 -1
  91. package/lib/runtimes/variants.d.ts +10 -8
  92. package/lib/runtimes/variants.js +14 -9
  93. package/lib/specs/agents/agents.d.ts +1 -0
  94. package/lib/specs/agents/agents.js +49 -0
  95. package/lib/specs/apps.js +32 -32
  96. package/lib/specs/harnesses.d.ts +1 -0
  97. package/lib/specs/harnesses.js +69 -18
  98. package/lib/specs/index.d.ts +1 -1
  99. package/lib/specs/index.js +1 -1
  100. package/lib/types/agentspecs.d.ts +2 -0
  101. package/package.json +1 -1
  102. package/scripts/codegen/generate_apps.py +1 -1
  103. package/scripts/codegen/generate_harnesses.py +2 -0
  104. package/scripts/validate_pap_examples.py +1 -1
  105. package/dist-embed/chunks/transformers.web-CLaqP_Vm.js +0 -42
@@ -15,6 +15,7 @@ export declare const GEMINI_CLI_HARNESS_0_0_1: HarnessSpec;
15
15
  export declare const GOOSE_HARNESS_0_0_1: HarnessSpec;
16
16
  export declare const OPENCODE_HARNESS_0_0_1: HarnessSpec;
17
17
  export declare const OPENHANDS_HARNESS_0_0_1: HarnessSpec;
18
+ export declare const PI_HARNESS_0_0_1: HarnessSpec;
18
19
  export declare const HARNESS_CATALOGUE: Record<string, HarnessSpec>;
19
20
  /** A harness by id. */
20
21
  export declare function getHarness(harnessId: string): HarnessSpec | undefined;
@@ -8,6 +8,7 @@ export const CLAUDE_CODE_HARNESS_0_0_1 = {
8
8
  name: 'Claude Code',
9
9
  description: "Anthropic's coding agent, driven over ACP through the Agent Client Protocol project's adapter on the Claude Agent SDK.",
10
10
  enabled: true,
11
+ unavailable_because: '',
11
12
  tags: ['harness'],
12
13
  docs: 'https://github.com/agentclientprotocol/claude-agent-acp',
13
14
  acp: {
@@ -72,6 +73,7 @@ export const CODEX_HARNESS_0_0_1 = {
72
73
  name: 'Codex',
73
74
  description: "OpenAI's coding agent, driven over ACP through the Agent Client Protocol project's adapter, which ships the Codex binary it drives.",
74
75
  enabled: true,
76
+ unavailable_because: '',
75
77
  tags: ['harness'],
76
78
  docs: 'https://github.com/agentclientprotocol/codex-acp',
77
79
  acp: {
@@ -127,6 +129,7 @@ export const CUSTOM_HARNESS_0_0_1 = {
127
129
  name: 'Custom harness',
128
130
  description: "An organization's own ACP agent, its command named by the organization's own harness spec and never typed into a form.",
129
131
  enabled: false,
132
+ unavailable_because: '',
130
133
  tags: ['harness'],
131
134
  docs: '',
132
135
  requires: {
@@ -171,7 +174,8 @@ export const FAST_AGENT_HARNESS_0_0_1 = {
171
174
  version: '0.0.1',
172
175
  name: 'fast-agent',
173
176
  description: "llmindset's agent framework served over ACP; each agent it defines is a session mode, with any model provider it is configured with.",
174
- enabled: true,
177
+ enabled: false,
178
+ unavailable_because: 'the catalogue offers four harnesses today — Claude Code, Codex, OpenCode and pi (28 October 2026); fast-agent is a framework served over ACP, not a coding agent, its adapter is a Python tool the runtime image does not carry, and it has not been drilled on Datalayer.',
175
179
  tags: ['harness', 'framework'],
176
180
  docs: 'https://github.com/evalstate/fast-agent/blob/main/docs/docs/acp/index.md',
177
181
  acp: {
@@ -226,7 +230,8 @@ export const GEMINI_CLI_HARNESS_0_0_1 = {
226
230
  version: '0.0.1',
227
231
  name: 'Gemini CLI',
228
232
  description: "Google's coding agent, which speaks ACP itself when started with --experimental-acp.",
229
- enabled: true,
233
+ enabled: false,
234
+ unavailable_because: "the catalogue offers four harnesses today — Claude Code, Codex, OpenCode and pi (28 October 2026); Gemini CLI's API host (generativelanguage.googleapis.com) is outside a Datalayer runtime's egress boundary and is not routed through ai-inference, so it stays unfunded and unoffered there (the user's decision, 28 October 2026).",
230
235
  tags: ['harness'],
231
236
  docs: 'https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/cli-reference.md',
232
237
  acp: {
@@ -282,7 +287,8 @@ export const GOOSE_HARNESS_0_0_1 = {
282
287
  version: '0.0.1',
283
288
  name: 'goose',
284
289
  description: "Block's open agent (now the Agentic AI Foundation's), which speaks ACP itself with goose acp; any model provider it is configured with.",
285
- enabled: true,
290
+ enabled: false,
291
+ unavailable_because: 'the catalogue offers four harnesses today — Claude Code, Codex, OpenCode and pi (28 October 2026); goose is a binary of its own release, not an npm adapter, the runtime image does not carry it, and it has not been drilled on Datalayer.',
286
292
  tags: ['harness'],
287
293
  docs: 'https://block.github.io/goose/docs/gdk/acp/',
288
294
  acp: {
@@ -338,6 +344,7 @@ export const OPENCODE_HARNESS_0_0_1 = {
338
344
  name: 'OpenCode',
339
345
  description: "Anomaly's open coding agent, which speaks ACP itself with opencode acp; any model provider it is configured with.",
340
346
  enabled: true,
347
+ unavailable_because: '',
341
348
  tags: ['harness'],
342
349
  docs: 'https://opencode.ai/docs/acp/',
343
350
  acp: {
@@ -392,7 +399,8 @@ export const OPENHANDS_HARNESS_0_0_1 = {
392
399
  version: '0.0.1',
393
400
  name: 'OpenHands',
394
401
  description: 'The OpenHands CLI, which speaks ACP itself with openhands acp; any model provider it is configured with.',
395
- enabled: true,
402
+ enabled: false,
403
+ unavailable_because: "the catalogue offers four harnesses today — Claude Code, Codex, OpenCode and pi (28 October 2026); OpenHands' adapter is a Python tool the runtime image does not carry, and it has not been drilled on Datalayer.",
396
404
  tags: ['harness'],
397
405
  docs: 'https://docs.openhands.dev/openhands/usage/run-openhands/acp',
398
406
  acp: {
@@ -448,6 +456,62 @@ export const OPENHANDS_HARNESS_0_0_1 = {
448
456
  note: "Open source under MIT, no vendor terms of its own; the model provider's terms apply to the key. Launched as openhands acp (OpenHands-CLI README; docs.openhands.dev's ACP page); resumes with --resume; reads skills from .agents/skills (.openhands/skills is legacy).",
449
457
  },
450
458
  };
459
+ export const PI_HARNESS_0_0_1 = {
460
+ id: 'pi',
461
+ version: '0.0.1',
462
+ name: 'pi',
463
+ description: "Earendil's pi coding agent, driven over ACP through the pi-acp adapter, which spawns the published pi executable; any model provider pi is configured with.",
464
+ enabled: true,
465
+ unavailable_because: '',
466
+ tags: ['harness'],
467
+ docs: 'https://github.com/svkozak/pi-acp',
468
+ acp: {
469
+ command: 'npx',
470
+ args: ['-y', 'pi-acp@0.0.34'],
471
+ protocolVersion: 1,
472
+ loadSession: true,
473
+ mcp: 'lend',
474
+ modes: [],
475
+ env: {},
476
+ nativeSession: 'none',
477
+ },
478
+ requires: {
479
+ secrets: ['ANTHROPIC_API_KEY'],
480
+ binaries: ['node', 'git'],
481
+ },
482
+ terms: {
483
+ servedToThirdParties: 'permitted',
484
+ licence: 'MIT (adapter); MIT (the agent, @earendil-works/pi-coding-agent 1.4.0)',
485
+ },
486
+ skills: {
487
+ format: 'skill-md',
488
+ dir: '.pi/skills',
489
+ },
490
+ honours: {
491
+ model: true,
492
+ subagents: false,
493
+ },
494
+ capabilities: {
495
+ resume: 'load',
496
+ forkHistory: 'replay',
497
+ interrupt: true,
498
+ steering: false,
499
+ images: false,
500
+ compaction: 'own',
501
+ modes: [],
502
+ autoRun: [],
503
+ },
504
+ instructionsFile: 'AGENTS.md',
505
+ registered: {
506
+ adapter: 'pi-acp',
507
+ version: '0.0.34',
508
+ licenceSource: 'https://www.npmjs.com/package/pi-acp',
509
+ termsSource: 'https://github.com/earendil-works/pi/blob/main/LICENSE',
510
+ credential: "The provider's key pi is configured with; ANTHROPIC_API_KEY declared, the person's own",
511
+ binaries: 'Node 22 (pi-coding-agent engines.node >=22.19.0; pi-acp >=20), the pi executable 1.4.0 on the PATH (@earendil-works/pi-coding-agent), git',
512
+ note: "Read 2026-10-28. pi speaks no ACP itself; pi-acp 0.0.34 (MIT, an individual's, github.com/svkozak/pi-acp) speaks ACP JSON-RPC over stdio and spawns the published `pi` executable with `pi --mode rpc`, so pi 1.4.0 runs as published — chosen over @automatalabs/pi-acp 0.9.4 (Apache-2.0, in-process, which embeds pi 0.87.1 through its SDK on a fork's package). Open source under MIT on both sides, no vendor terms of their own; the model provider's terms apply to the key. Session persistence through pi's own session files (session/load).",
513
+ },
514
+ };
451
515
  export const HARNESS_CATALOGUE = {
452
516
  'claude-code': CLAUDE_CODE_HARNESS_0_0_1,
453
517
  codex: CODEX_HARNESS_0_0_1,
@@ -457,6 +521,7 @@ export const HARNESS_CATALOGUE = {
457
521
  goose: GOOSE_HARNESS_0_0_1,
458
522
  opencode: OPENCODE_HARNESS_0_0_1,
459
523
  openhands: OPENHANDS_HARNESS_0_0_1,
524
+ pi: PI_HARNESS_0_0_1,
460
525
  };
461
526
  /** A harness by id. */
462
527
  export function getHarness(harnessId) {
@@ -836,20 +901,6 @@ export const LISTED_HARNESSES = [
836
901
  servedToThirdParties: 'permitted',
837
902
  note: 'Bridges ACP to an OpenClaw Gateway, whose providers keep their own terms.',
838
903
  },
839
- {
840
- id: 'pi',
841
- name: 'pi (through pi-acp)',
842
- docs: 'https://github.com/svkozak/pi-acp',
843
- adapter: 'pi-acp',
844
- version: '0.0.34',
845
- command: 'npx -y pi-acp',
846
- licence: 'MIT',
847
- licenceSource: 'https://github.com/svkozak/pi-acp/blob/main/LICENSE',
848
- termsSource: 'https://github.com/svkozak/pi-acp/blob/main/LICENSE',
849
- credential: "pi's configured provider's API key (a subscription login carries its provider's terms)",
850
- servedToThirdParties: 'permitted',
851
- note: 'Spawns pi --mode rpc from @earendil-works/pi-coding-agent (MIT).',
852
- },
853
904
  {
854
905
  id: 'poolside',
855
906
  name: 'Poolside (pool)',
@@ -26,7 +26,7 @@ export * from './frames';
26
26
  export * from './cogs';
27
27
  export * from './harnesses';
28
28
  export * from './sessionFiles';
29
- export * from './standards';
29
+ export * from './policies';
30
30
  export * from './guards';
31
31
  export * from './gates';
32
32
  export * from './tracks';
@@ -30,7 +30,7 @@ export * from './frames.js';
30
30
  export * from './cogs.js';
31
31
  export * from './harnesses.js';
32
32
  export * from './sessionFiles.js';
33
- export * from './standards.js';
33
+ export * from './policies.js';
34
34
  export * from './guards.js';
35
35
  export * from './gates.js';
36
36
  export * from './tracks.js';
@@ -409,6 +409,8 @@ export interface HarnessSpec {
409
409
  description: string;
410
410
  /** Whether the shared catalogue offers it: `custom` is not. */
411
411
  enabled: boolean;
412
+ /** Why it is not offered today, in a sentence said wherever it is named; set when `enabled` is false, and only then. */
413
+ unavailable_because: string;
412
414
  tags: string[];
413
415
  /** Where its ACP use is documented. */
414
416
  docs: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/agent-runtimes",
3
- "version": "1.5.86",
3
+ "version": "1.5.88",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  ".",
@@ -94,7 +94,7 @@ def python_of(specs_dir: Path, identity: str) -> str:
94
94
  Its own ``app.py`` when it was built in Python; otherwise the file `loop
95
95
  apps eject` writes from its spec, so every example can be read in Python.
96
96
  """
97
- from agent_runtimes.loop.apps.scaffold import eject_text # noqa: PLC0415
97
+ from agent_runtimes.apps.scaffold import eject_text # noqa: PLC0415
98
98
 
99
99
  code = specs_dir / identity / "app.py"
100
100
  if code.is_file():
@@ -184,6 +184,7 @@ def generate_python_code(specs: list[dict[str, Any]]) -> str:
184
184
  f" name={_s(spec['name'])},",
185
185
  f" description={_s(spec.get('description'))},",
186
186
  f" enabled={bool(spec.get('enabled', True))},",
187
+ f" unavailable_because={_s(spec.get('unavailable_because'))},",
187
188
  f" tags={json.dumps(list(spec.get('tags') or []))},",
188
189
  f" docs={_s(spec.get('docs'))},",
189
190
  ]
@@ -316,6 +317,7 @@ def generate_typescript_code(
316
317
  f" name: {_t(spec['name'])},",
317
318
  f" description: {_t(spec.get('description'))},",
318
319
  f" enabled: {json.dumps(bool(spec.get('enabled', True)))},",
320
+ f" unavailable_because: {_t(spec.get('unavailable_because'))},",
319
321
  f" tags: {json.dumps(list(spec.get('tags') or []))},",
320
322
  f" docs: {_t(spec.get('docs'))},",
321
323
  ]
@@ -15,7 +15,7 @@ import json
15
15
  import sys
16
16
  from pathlib import Path
17
17
 
18
- from agent_runtimes.loop.apps.build import build
18
+ from agent_runtimes.apps.build import build
19
19
 
20
20
  ROOT = Path(__file__).parents[1]
21
21
  EXAMPLES = ROOT / "examples" / "personal-agent-protocol"