@datalayer/agent-runtimes 1.5.87 → 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 (35) hide show
  1. package/dist-embed/datalayer-app-main.js +4 -4
  2. package/lib/apps/apps/checks.d.ts +1 -1
  3. package/lib/apps/apps/checks.js +1 -1
  4. package/lib/apps/apps/computer.d.ts +1 -1
  5. package/lib/apps/apps/computer.js +1 -1
  6. package/lib/apps/apps/pluginPair.d.ts +1 -1
  7. package/lib/apps/apps/rules.d.ts +1 -1
  8. package/lib/apps/apps/rules.js +2 -2
  9. package/lib/apps/apps/visitorToken.d.ts +1 -1
  10. package/lib/apps/apps/visitorToken.js +1 -1
  11. package/lib/apps/core/appFiles.js +1 -1
  12. package/lib/apps/plugins/a2ui-surface/toolResult.d.ts +1 -1
  13. package/lib/apps/plugins/a2ui-surface/toolResult.js +1 -1
  14. package/lib/apps/plugins/app-page/appPageModel.d.ts +1 -1
  15. package/lib/apps/plugins/app-page/appPageModel.js +1 -1
  16. package/lib/portable/hosts/client.d.ts +11 -1
  17. package/lib/portable/hosts/client.js +12 -6
  18. package/lib/portable/hosts/contracts.json +9 -3
  19. package/lib/portable/hosts/index.d.ts +1 -1
  20. package/lib/portable/records.d.ts +1 -1
  21. package/lib/portable/records.js +1 -1
  22. package/lib/portable/semantic-events.json +3 -3
  23. package/lib/portable/semanticOfAgUi.d.ts +1 -1
  24. package/lib/runtimes/variants.d.ts +1 -1
  25. package/lib/runtimes/variants.js +1 -1
  26. package/lib/specs/agents/agents.d.ts +1 -0
  27. package/lib/specs/agents/agents.js +49 -0
  28. package/lib/specs/apps.js +32 -32
  29. package/lib/specs/harnesses.d.ts +1 -0
  30. package/lib/specs/harnesses.js +62 -19
  31. package/lib/specs/index.d.ts +1 -1
  32. package/lib/specs/index.js +1 -1
  33. package/package.json +1 -1
  34. package/scripts/codegen/generate_apps.py +1 -1
  35. package/scripts/validate_pap_examples.py +1 -1
@@ -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;
@@ -175,7 +175,7 @@ export const FAST_AGENT_HARNESS_0_0_1 = {
175
175
  name: 'fast-agent',
176
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.",
177
177
  enabled: false,
178
- unavailable_because: 'the catalogue offers four harnesses today — Claude Code, Codex, OpenCode and Gemini CLI (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.',
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.',
179
179
  tags: ['harness', 'framework'],
180
180
  docs: 'https://github.com/evalstate/fast-agent/blob/main/docs/docs/acp/index.md',
181
181
  acp: {
@@ -230,8 +230,8 @@ export const GEMINI_CLI_HARNESS_0_0_1 = {
230
230
  version: '0.0.1',
231
231
  name: 'Gemini CLI',
232
232
  description: "Google's coding agent, which speaks ACP itself when started with --experimental-acp.",
233
- enabled: true,
234
- unavailable_because: '',
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).",
235
235
  tags: ['harness'],
236
236
  docs: 'https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/cli-reference.md',
237
237
  acp: {
@@ -288,7 +288,7 @@ export const GOOSE_HARNESS_0_0_1 = {
288
288
  name: 'goose',
289
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.",
290
290
  enabled: false,
291
- unavailable_because: 'the catalogue offers four harnesses today — Claude Code, Codex, OpenCode and Gemini CLI (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.',
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.',
292
292
  tags: ['harness'],
293
293
  docs: 'https://block.github.io/goose/docs/gdk/acp/',
294
294
  acp: {
@@ -400,7 +400,7 @@ export const OPENHANDS_HARNESS_0_0_1 = {
400
400
  name: 'OpenHands',
401
401
  description: 'The OpenHands CLI, which speaks ACP itself with openhands acp; any model provider it is configured with.',
402
402
  enabled: false,
403
- unavailable_because: "the catalogue offers four harnesses today — Claude Code, Codex, OpenCode and Gemini CLI (28 October 2026); OpenHands' adapter is a Python tool the runtime image does not carry, and it has not been drilled on Datalayer.",
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.",
404
404
  tags: ['harness'],
405
405
  docs: 'https://docs.openhands.dev/openhands/usage/run-openhands/acp',
406
406
  acp: {
@@ -456,6 +456,62 @@ export const OPENHANDS_HARNESS_0_0_1 = {
456
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).",
457
457
  },
458
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
+ };
459
515
  export const HARNESS_CATALOGUE = {
460
516
  'claude-code': CLAUDE_CODE_HARNESS_0_0_1,
461
517
  codex: CODEX_HARNESS_0_0_1,
@@ -465,6 +521,7 @@ export const HARNESS_CATALOGUE = {
465
521
  goose: GOOSE_HARNESS_0_0_1,
466
522
  opencode: OPENCODE_HARNESS_0_0_1,
467
523
  openhands: OPENHANDS_HARNESS_0_0_1,
524
+ pi: PI_HARNESS_0_0_1,
468
525
  };
469
526
  /** A harness by id. */
470
527
  export function getHarness(harnessId) {
@@ -844,20 +901,6 @@ export const LISTED_HARNESSES = [
844
901
  servedToThirdParties: 'permitted',
845
902
  note: 'Bridges ACP to an OpenClaw Gateway, whose providers keep their own terms.',
846
903
  },
847
- {
848
- id: 'pi',
849
- name: 'pi (through pi-acp)',
850
- docs: 'https://github.com/svkozak/pi-acp',
851
- adapter: 'pi-acp',
852
- version: '0.0.34',
853
- command: 'npx -y pi-acp',
854
- licence: 'MIT',
855
- licenceSource: 'https://github.com/svkozak/pi-acp/blob/main/LICENSE',
856
- termsSource: 'https://github.com/svkozak/pi-acp/blob/main/LICENSE',
857
- credential: "pi's configured provider's API key (a subscription login carries its provider's terms)",
858
- servedToThirdParties: 'permitted',
859
- note: 'Spawns pi --mode rpc from @earendil-works/pi-coding-agent (MIT).',
860
- },
861
904
  {
862
905
  id: 'poolside',
863
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';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datalayer/agent-runtimes",
3
- "version": "1.5.87",
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():
@@ -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"