@tangle-network/cli-agent-registry 0.14.0 → 0.15.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 (35) hide show
  1. package/README.md +30 -0
  2. package/dist/{backend-types-CREj4iOY.mjs → backend-types-CNo_Zj_K.mjs} +3 -12
  3. package/dist/{backend-types-CJH-wHS3.d.mts → backend-types-DRmLR1e0.d.mts} +4 -13
  4. package/dist/backend-types.d.mts +1 -1
  5. package/dist/backend-types.mjs +1 -1
  6. package/dist/cli-auth-bundle-C6DtK7GX.mjs +95 -0
  7. package/dist/cli-auth-bundle-CwAaH0Ap.d.mts +51 -0
  8. package/dist/cli-auth-bundle.d.mts +2 -49
  9. package/dist/cli-auth-bundle.mjs +1 -91
  10. package/dist/cli-auth-placeholder.d.mts +1 -1
  11. package/dist/cli-auth-placeholder.mjs +2 -2
  12. package/dist/cli-backend-auth-env.mjs +3 -3
  13. package/dist/default-backend.d.mts +1 -1
  14. package/dist/default-backend.mjs +2 -2
  15. package/dist/{harness-DIdVNSwl.mjs → harness-D1fTxnDD.mjs} +66 -34
  16. package/dist/{native-session-contracts-DWFzgoye.mjs → harness-contracts-BZoECCMc.mjs} +87 -173
  17. package/dist/host-contracts.d.mts +30 -0
  18. package/dist/host-contracts.json +422 -0
  19. package/dist/host-contracts.mjs +63 -0
  20. package/dist/index.d.mts +117 -120
  21. package/dist/index.mjs +17 -12
  22. package/dist/local-cli-auth.d.mts +1 -1
  23. package/dist/local-cli-auth.mjs +1 -1
  24. package/dist/native-session-contracts.d.mts +57 -62
  25. package/dist/native-session-contracts.mjs +40 -2
  26. package/dist/servable-models.d.mts +5 -6
  27. package/dist/servable-models.mjs +6 -22
  28. package/dist/{session-contract-BC75JdnA.d.mts → session-contract-BhzcbPRW.d.mts} +10 -44
  29. package/dist/session-contract.d.mts +1 -1
  30. package/dist/session-contract.mjs +14 -62
  31. package/dist/{specs-BSELpX1h.d.mts → spec-CcvTM7-j.d.mts} +22 -91
  32. package/dist/{specs-Bbiay_8K.mjs → specs-BBF55TnM.mjs} +125 -94
  33. package/dist/specs.d.mts +72 -3
  34. package/dist/specs.mjs +2 -2
  35. package/package.json +15 -9
@@ -3,16 +3,18 @@
3
3
  const HARNESS_CLI_VERSIONS = {
4
4
  "claude-code": "2.1.311",
5
5
  codex: "0.164.0",
6
+ cursor: "2026.10.22-27dcf5f",
6
7
  opencode: "1.19.4",
7
8
  pi: "1.4.0",
8
9
  "kimi-code": "1.49.0",
9
- "factory-droids": "0.249.0",
10
- amp: "0.0.1793044831-ga1b1a0",
10
+ "factory-droids": "0.250.0",
11
+ amp: "0.0.1793104576-gc52692",
11
12
  prime: "0.10.1",
12
13
  hermes: "0.22.4",
13
- forge: "2.14.0",
14
- openclaw: "2026.10.7",
15
- acp: "claude-agent-acp 0.97.0; codex-acp 0.16.0; gemini-cli 0.65.0"
14
+ openclaw: "2026.10.8",
15
+ acp: "claude-agent-acp 0.97.0; codex-acp 0.16.0; gemini-cli 0.65.0",
16
+ grok: "0.1.220",
17
+ nanoclaw: "2.1.54"
16
18
  };
17
19
  //#endregion
18
20
  //#region src/harness-contracts/session-stores.ts
@@ -108,15 +110,12 @@ printf '\\n'`,
108
110
  storeEnv: {},
109
111
  evidence: {
110
112
  servedModel: "session-record",
111
- usage: "per-response",
113
+ usage: "session-total",
112
114
  endingError: "none"
113
115
  },
114
116
  cliVersion: HARNESS_CLI_VERSIONS.acp
115
117
  },
116
- defect: {
117
- issue: "#10096",
118
- reason: "contract is declared per sub-agent; gemini needs a mock dialect"
119
- }
118
+ defect: null
120
119
  },
121
120
  config: {
122
121
  kind: "model",
@@ -379,7 +378,7 @@ var codex_default = {
379
378
  }
380
379
  },
381
380
  lifecycle: {
382
- runtime: void 0,
381
+ runtime: { secretProfileIsolation: true },
383
382
  coldCreate: { kind: "required" },
384
383
  warmClaim: { kind: "required" },
385
384
  parkResume: { kind: "required" },
@@ -394,7 +393,7 @@ var cursor_default = {
394
393
  kind: "unsupported",
395
394
  defect: {
396
395
  issue: "#10096",
397
- reason: "runs the Cursor SDK in process; the cloud runtime stores the session remotely and model calls cannot be mocked"
396
+ reason: "local SDK store capture has no qualified harness reader"
398
397
  }
399
398
  },
400
399
  config: {
@@ -416,7 +415,7 @@ var cursor_default = {
416
415
  branchChild: { kind: "required" },
417
416
  killResume: {
418
417
  kind: "unsupported",
419
- reason: "The backend exposes no resumable native session"
418
+ reason: "Native Cursor capture contract remains unqualified"
420
419
  }
421
420
  }
422
421
  };
@@ -462,10 +461,7 @@ var factory_droids_default = {
462
461
  },
463
462
  cliVersion: HARNESS_CLI_VERSIONS["factory-droids"]
464
463
  },
465
- defect: {
466
- issue: "#10096",
467
- reason: "droid 0.232.0 resumes with --session-id only after it fetches the session from api.factory.ai, and the reader reads no usage, model or ending error from the session; the other checks pass (2026-10-05)"
468
- }
464
+ defect: null
469
465
  },
470
466
  config: {
471
467
  kind: "model",
@@ -492,71 +488,57 @@ var factory_droids_default = {
492
488
  }
493
489
  };
494
490
  //#endregion
495
- //#region src/harness-contracts/contracts/forge.ts
496
- var forge_default = {
491
+ //#region src/harness-contracts/contracts/grok.ts
492
+ var grok_default = {
497
493
  session: {
498
494
  kind: "native",
499
495
  processProbe: {
500
- versionCommand: "forgecode --version",
501
- kill: ["-x", "forgecode"]
496
+ versionCommand: "grok --version",
497
+ kill: ["-x", "grok"]
502
498
  },
503
499
  contract: {
504
500
  version: 1,
505
501
  stores: [{
506
- root: ".forge",
502
+ root: ".grok/sessions",
507
503
  files: [
508
- ".forge.db",
509
- ".forge.db-wal",
510
- ".forge.db-shm"
504
+ "*/{id}/updates.jsonl",
505
+ "*/{id}/chat_history.jsonl",
506
+ "*/{id}/summary.json",
507
+ "*/{id}/signals.json"
511
508
  ],
512
- write: "sqlite-wal",
513
- shared: true,
514
- format: "forge.sqlite"
509
+ write: "jsonl-append",
510
+ shared: false,
511
+ format: "grok.acp-session-dir"
515
512
  }],
516
513
  identity: {
517
514
  kind: "first-event",
518
- event: "conversation",
515
+ event: "sessionId",
519
516
  deadlineMs: 6e4
520
517
  },
521
518
  resume: {
522
519
  kind: "args",
523
- args: ["--conversation-id", "{id}"]
520
+ args: ["-r", "{id}"]
524
521
  },
525
522
  forbiddenArgs: [],
526
- storeEnv: {},
523
+ storeEnv: { GROK_HOME: ".grok" },
527
524
  evidence: {
528
525
  servedModel: "session-record",
529
- usage: "per-response",
526
+ usage: "none",
530
527
  endingError: "none"
531
528
  },
532
- cliVersion: HARNESS_CLI_VERSIONS.forge
529
+ cliVersion: HARNESS_CLI_VERSIONS.grok
533
530
  },
534
- defect: {
535
- issue: "#10096",
536
- reason: "needs a SQLite-consistent capture and a .forge.db reader"
537
- }
531
+ defect: null
538
532
  },
539
533
  config: {
540
534
  kind: "model",
541
535
  providerRequiresModel: true,
542
- keySources: [
543
- "managed",
544
- "api-key",
545
- "api-key-env",
546
- "cli-auth"
547
- ],
536
+ keySources: ["api-key", "api-key-env"],
548
537
  baseUrl: "caller-or-managed",
549
538
  modelWire: "openai-compat",
550
539
  envVars: {
551
- apiKey: "FORGE_API_KEY",
552
- model: "FORGE_MODEL_ID",
553
- authMode: "FORGE_AUTH_MODE",
554
- authFiles: "FORGE_AUTH_FILES_JSON",
555
- extras: {
556
- FORGE_SESSION__PROVIDER_ID: { parser: "string" },
557
- FORGE_SESSION__MODEL_ID: { parser: "string" },
558
- FORGE_AGENT_ID: { parser: "string" }
559
- }
540
+ apiKey: "XAI_API_KEY",
541
+ model: "GROK_MODEL"
560
542
  }
561
543
  },
562
544
  lifecycle: {
@@ -598,10 +580,7 @@ var hermes_default = {
598
580
  },
599
581
  cliVersion: HARNESS_CLI_VERSIONS.hermes
600
582
  },
601
- defect: {
602
- issue: "#10096",
603
- reason: "HERMES_HOME lives under the workspace, and the session id arrives on stderr after exit"
604
- }
583
+ defect: null
605
584
  },
606
585
  config: {
607
586
  kind: "model",
@@ -693,21 +672,17 @@ var kimi_code_default = {
693
672
  forbiddenArgs: [],
694
673
  storeEnv: {},
695
674
  evidence: {
696
- servedModel: "session-record",
675
+ servedModel: "none",
697
676
  usage: "per-response",
698
- endingError: "none"
677
+ endingError: "session-record"
699
678
  },
700
679
  cliVersion: HARNESS_CLI_VERSIONS["kimi-code"]
701
680
  },
702
- defect: {
703
- issue: "#10096",
704
- reason: "kimi-cli 1.49.0 records no model id, served or requested, in its session files, and the reader reads the ending HTTP 500 as aborted; the other checks pass (2026-10-05)"
705
- }
681
+ defect: null
706
682
  },
707
683
  config: {
708
684
  kind: "model",
709
685
  providerRequiresModel: true,
710
- assertions: ["moonshot-provider-lock"],
711
686
  keySources: [
712
687
  "managed",
713
688
  "api-key",
@@ -740,11 +715,36 @@ var kimi_code_default = {
740
715
  //#region src/harness-contracts/contracts/nanoclaw.ts
741
716
  var nanoclaw_default = {
742
717
  session: {
743
- kind: "unsupported",
744
- defect: {
745
- issue: "#10096",
746
- reason: "runs chat.ts against a NanoClaw daemon over a Unix socket: no session id, no resume, and the store belongs to the daemon"
747
- }
718
+ kind: "native",
719
+ processProbe: {
720
+ versionCommand: `node -p "require(require('child_process').execSync('nanoclaw-runtime-root',{encoding:'utf8'}).trim()+'/package.json').version"`,
721
+ kill: ["-f", "[n]anoclaw-chat"]
722
+ },
723
+ contract: {
724
+ version: 1,
725
+ stores: [{
726
+ root: ".nanoclaw/data/v2-sessions",
727
+ files: ["*/{id}/outbound.db", "*/{id}/inbound.db"],
728
+ write: "sqlite-wal",
729
+ shared: false,
730
+ format: "nanoclaw.session-sqlite"
731
+ }],
732
+ identity: {
733
+ kind: "first-event",
734
+ event: "sessionId",
735
+ deadlineMs: 6e4
736
+ },
737
+ resume: { kind: "api" },
738
+ forbiddenArgs: [],
739
+ storeEnv: { NANOCLAW_RUNTIME_ROOT: ".nanoclaw" },
740
+ evidence: {
741
+ servedModel: "none",
742
+ usage: "per-response",
743
+ endingError: "none"
744
+ },
745
+ cliVersion: HARNESS_CLI_VERSIONS.nanoclaw
746
+ },
747
+ defect: null
748
748
  },
749
749
  config: {
750
750
  kind: "model",
@@ -777,10 +777,7 @@ var nanoclaw_default = {
777
777
  warmClaim: { kind: "required" },
778
778
  parkResume: { kind: "required" },
779
779
  branchChild: { kind: "required" },
780
- killResume: {
781
- kind: "unsupported",
782
- reason: "The backend exposes no resumable native session"
783
- }
780
+ killResume: { kind: "required" }
784
781
  }
785
782
  };
786
783
  //#endregion
@@ -795,16 +792,19 @@ var openclaw_default = {
795
792
  contract: {
796
793
  version: 1,
797
794
  stores: [{
798
- root: ".openclaw/agents",
799
- files: ["**/{id}.jsonl"],
800
- write: "jsonl-append",
801
- shared: false,
795
+ root: ".openclaw",
796
+ files: [
797
+ "agents/main/agent/openclaw-agent.sqlite",
798
+ "agents/main/agent/openclaw-agent.sqlite-wal",
799
+ "agents/main/agent/openclaw-agent.sqlite-shm"
800
+ ],
801
+ write: "sqlite-wal",
802
+ shared: true,
802
803
  format: "openclaw.session-jsonl"
803
804
  }],
804
805
  identity: {
805
- kind: "first-event",
806
- event: "session",
807
- deadlineMs: 6e4
806
+ kind: "pre-minted",
807
+ args: ["--session-id", "{id}"]
808
808
  },
809
809
  resume: {
810
810
  kind: "args",
@@ -819,10 +819,7 @@ var openclaw_default = {
819
819
  },
820
820
  cliVersion: HARNESS_CLI_VERSIONS.openclaw
821
821
  },
822
- defect: {
823
- issue: "#10096",
824
- reason: "config is pinned outside the runtime HOME; store layout unverified"
825
- }
822
+ defect: null
826
823
  },
827
824
  config: {
828
825
  kind: "model",
@@ -925,6 +922,7 @@ const HARNESSES = {
925
922
  },
926
923
  lifecycle: {
927
924
  runtime: {
925
+ secretProfileIsolation: true,
928
926
  redactsHostEnv: true,
929
927
  supportsToolDisabledTurns: true
930
928
  },
@@ -1006,6 +1004,7 @@ const HARNESSES = {
1006
1004
  },
1007
1005
  "kimi-code": kimi_code_default,
1008
1006
  "factory-droids": factory_droids_default,
1007
+ grok: grok_default,
1009
1008
  amp: amp_default,
1010
1009
  prime: {
1011
1010
  session: {
@@ -1018,9 +1017,9 @@ const HARNESSES = {
1018
1017
  version: 1,
1019
1018
  stores: [{
1020
1019
  root: ".prime-provider/prime-agent-dirs",
1021
- files: ["**/*_{id}.jsonl"],
1020
+ files: ["**/sessions/*.jsonl"],
1022
1021
  write: "jsonl-append",
1023
- shared: false,
1022
+ shared: true,
1024
1023
  format: "prime.session-jsonl"
1025
1024
  }],
1026
1025
  identity: {
@@ -1037,10 +1036,7 @@ const HARNESSES = {
1037
1036
  },
1038
1037
  cliVersion: HARNESS_CLI_VERSIONS.prime
1039
1038
  },
1040
- defect: {
1041
- issue: "#10096",
1042
- reason: "no conformance receipt for the runtime-HOME agent dir yet"
1043
- }
1039
+ defect: null
1044
1040
  },
1045
1041
  config: {
1046
1042
  kind: "model",
@@ -1068,7 +1064,6 @@ const HARNESSES = {
1068
1064
  }
1069
1065
  },
1070
1066
  hermes: hermes_default,
1071
- forge: forge_default,
1072
1067
  openclaw: openclaw_default,
1073
1068
  nanoclaw: nanoclaw_default,
1074
1069
  acp: acp_default,
@@ -1076,87 +1071,6 @@ const HARNESSES = {
1076
1071
  "cli-base": cli_base_default
1077
1072
  };
1078
1073
  //#endregion
1079
- //#region src/native-session-contracts.ts
1080
- /**
1081
- * The native session projection of the per-harness declarations in harness-contracts/. Each entry is
1082
- * proven by a conformance receipt (tests/harness/receipts) for
1083
- * its pinned CLI version, or is listed in HARNESS_CONFORMANCE_PENDING.
1084
- *
1085
- * CLI versions are the pins in infra/nix (agent-clis.json and flake.nix),
1086
- * generated into harness-cli-versions.ts by the bump. The registry test
1087
- * tests/harness-session-contract.test.ts fails when a pin, a contract or an
1088
- * adapter's source moves without a new receipt.
1089
- */
1090
- const NATIVE_SESSION_CONTRACTS = {
1091
- "claude-code": HARNESSES["claude-code"].session.contract,
1092
- codex: HARNESSES["codex"].session.contract,
1093
- opencode: HARNESSES["opencode"].session.contract,
1094
- pi: HARNESSES["pi"].session.contract,
1095
- "kimi-code": HARNESSES["kimi-code"].session.contract,
1096
- "factory-droids": HARNESSES["factory-droids"].session.contract,
1097
- amp: HARNESSES["amp"].session.contract,
1098
- prime: HARNESSES["prime"].session.contract,
1099
- hermes: HARNESSES["hermes"].session.contract,
1100
- forge: HARNESSES["forge"].session.contract,
1101
- openclaw: HARNESSES["openclaw"].session.contract,
1102
- acp: HARNESSES["acp"].session.contract
1103
- };
1104
- const HOME_KEYED_RUNTIMES = new Set(["opencode"]);
1105
- /**
1106
- * The child environment of a harness whose contract can move every native
1107
- * store off HOME, or undefined when it cannot.
1108
- *
1109
- * HOME becomes the shared agent home, so toolchains and repos the agent puts
1110
- * under ~ persist across sessions and restarts. Each declared store env and
1111
- * the XDG roots stay in the private runtime home, so credentials, config and
1112
- * session records do not collide between sessions. A harness whose contract
1113
- * declares no store env (kimi-code, factory-droids, forge, openclaw, acp,
1114
- * prime) writes credentials straight under HOME and keeps the private HOME.
1115
- * So does OpenCode: its warm-server pool, spare adoption, plugin dependencies
1116
- * and correlation file all use HOME as the session's runtime identity, and a
1117
- * shared HOME would merge those identities across sessions.
1118
- */
1119
- function configDirHomeEnv(harness, runtimeHome, agentHome) {
1120
- const contract = NATIVE_SESSION_CONTRACTS[harness];
1121
- const stores = Object.entries(contract?.storeEnv ?? {}).filter(([name]) => !name.startsWith("--"));
1122
- if (stores.length === 0 || HOME_KEYED_RUNTIMES.has(harness)) return void 0;
1123
- const home = runtimeHome.replace(/\/+$/u, "");
1124
- return {
1125
- HOME: agentHome,
1126
- XDG_CONFIG_HOME: `${home}/.config`,
1127
- XDG_CACHE_HOME: `${home}/.cache`,
1128
- XDG_DATA_HOME: `${home}/.local/share`,
1129
- XDG_STATE_HOME: `${home}/.local/state`,
1130
- ...Object.fromEntries(stores.map(([name, relative]) => [name, `${home}/${relative}`]))
1131
- };
1132
- }
1133
- /**
1134
- * Harnesses whose declared contract has no conformance receipt yet, with
1135
- * the reason. They keep running with persistence-disabling flags refused,
1136
- * but the store-location and identity-deadline checks wait for their
1137
- * receipt. This list may only shrink: tests/harness-session-contract.test.ts
1138
- * fails on a new entry, and on an entry whose receipt now passes.
1139
- */
1140
- const HARNESS_CONFORMANCE_PENDING = {
1141
- "kimi-code": HARNESSES["kimi-code"].session.defect.reason,
1142
- "factory-droids": HARNESSES["factory-droids"].session.defect.reason,
1143
- amp: HARNESSES["amp"].session.defect.reason,
1144
- prime: HARNESSES["prime"].session.defect.reason,
1145
- hermes: HARNESSES["hermes"].session.defect.reason,
1146
- forge: HARNESSES["forge"].session.defect.reason,
1147
- openclaw: HARNESSES["openclaw"].session.defect.reason,
1148
- acp: HARNESSES["acp"].session.defect.reason
1149
- };
1150
- /**
1151
- * Harnesses that cannot meet the contract at all. They stay listed until
1152
- * their product surfaces (sandbox web launch list, CLI connect, SDK
1153
- * placement) drop them, and no capture claims their sessions.
1154
- */
1155
- const HARNESS_SESSION_UNSUPPORTED = {
1156
- nanoclaw: HARNESSES["nanoclaw"].session.defect.reason,
1157
- cursor: HARNESSES["cursor"].session.defect.reason
1158
- };
1159
- //#endregion
1160
- export { HARNESSES as a, configDirHomeEnv as i, HARNESS_SESSION_UNSUPPORTED as n, HARNESS_WARM_TRANSPORT_ENV as o, NATIVE_SESSION_CONTRACTS as r, HARNESS_CONFORMANCE_PENDING as t };
1074
+ export { HARNESS_WARM_TRANSPORT_ENV as n, HARNESSES as t };
1161
1075
 
1162
- //# sourceMappingURL=native-session-contracts-DWFzgoye.mjs.map
1076
+ //# sourceMappingURL=harness-contracts-BZoECCMc.mjs.map
@@ -0,0 +1,30 @@
1
+ import { o as CliAgentEnvVars } from "./spec-CcvTM7-j.mjs";
2
+ import { o as NativeSessionStore } from "./session-contract-BhzcbPRW.mjs";
3
+
4
+ //#region src/host-contracts.d.ts
5
+ type HostStore = Omit<NativeSessionStore, "format"> & {
6
+ format: string; /** Override for this store's base directory, before appending its root suffix. */
7
+ env?: string; /** Lower-priority XDG base, used only when env is unset. */
8
+ xdg?: {
9
+ env: string;
10
+ suffix: string;
11
+ };
12
+ };
13
+ type HostContract = {
14
+ envVars: CliAgentEnvVars & {
15
+ providers?: Record<string, string>;
16
+ };
17
+ session: {
18
+ stores: readonly HostStore[];
19
+ storeEnv: Readonly<Record<string, string>>;
20
+ cliVersion: string;
21
+ };
22
+ };
23
+ /** JSON-compatible projection of the owners' declarations, consumed without Node. */
24
+ declare const HOST_CONTRACTS: {
25
+ schema: 1;
26
+ harnesses: Record<string, HostContract>;
27
+ };
28
+ //#endregion
29
+ export { HOST_CONTRACTS };
30
+ //# sourceMappingURL=host-contracts.d.mts.map