@uuaid/agent-commons 0.0.0 → 0.2.0-alpha.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 (69) hide show
  1. package/CONFORMANCE.md +26 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +25 -0
  4. package/PROVENANCE.json +29 -0
  5. package/README.md +313 -5
  6. package/bin/agent-commons.mjs +71 -0
  7. package/examples/Dockerfile +12 -0
  8. package/examples/agent.mjs +17 -0
  9. package/examples/global-policy.json +9 -0
  10. package/examples/run-cohort.mjs +68 -0
  11. package/package.json +28 -8
  12. package/profiles/agentnet.chat.json +11 -0
  13. package/profiles/local.json +11 -0
  14. package/profiles/zilligon.com.json +11 -0
  15. package/profiles/zilligons.com.json +11 -0
  16. package/src/carrier.mjs +79 -0
  17. package/src/channels.d.mts +75 -0
  18. package/src/channels.mjs +158 -0
  19. package/src/cohort.mjs +61 -0
  20. package/src/collaboration.mjs +875 -0
  21. package/src/config.mjs +39 -0
  22. package/src/continuity.d.mts +24 -0
  23. package/src/continuity.mjs +594 -0
  24. package/src/governance-scope.d.mts +46 -0
  25. package/src/governance-scope.mjs +139 -0
  26. package/src/governance.mjs +353 -0
  27. package/src/index.d.ts +109 -0
  28. package/src/index.mjs +15 -0
  29. package/src/loop.mjs +71 -0
  30. package/src/offline.d.mts +7 -0
  31. package/src/offline.mjs +29 -0
  32. package/src/pillar.mjs +59 -0
  33. package/src/profiles.d.mts +12 -0
  34. package/src/profiles.mjs +91 -0
  35. package/src/runtime.mjs +346 -0
  36. package/src/store.mjs +73 -0
  37. package/src/transport.d.mts +76 -0
  38. package/src/transport.mjs +267 -0
  39. package/src/trust.mjs +65 -0
  40. package/src/vendor/pillar/blob/blob.mjs +510 -0
  41. package/src/vendor/pillar/crypto/e2e.mjs +97 -0
  42. package/src/vendor/pillar/identity/jcs.mjs +35 -0
  43. package/src/vendor/pillar/identity/keychain.mjs +192 -0
  44. package/src/vendor/pillar/identity/tier.mjs +130 -0
  45. package/src/vendor/pillar/net/carrier-client.mjs +197 -0
  46. package/src/vendor/pillar/net/delegation.mjs +209 -0
  47. package/src/vendor/pillar/net/envelope.mjs +258 -0
  48. package/src/vendor/pillar/net/refusals.mjs +127 -0
  49. package/src/vendor/pillar/net/seed-tier.mjs +185 -0
  50. package/test/channels.test.mjs +268 -0
  51. package/test/cohort.test.mjs +36 -0
  52. package/test/collaboration.test.mjs +459 -0
  53. package/test/continuity.test.mjs +229 -0
  54. package/test/custody.negative.test.mjs +165 -0
  55. package/test/derivation-parity.test.mjs +19 -0
  56. package/test/fixtures/derivation-vectors.json +26 -0
  57. package/test/fixtures/ed25519-small-order.vectors.json +15 -0
  58. package/test/governance-expected-red.expected-red.mjs +241 -0
  59. package/test/governance-scope.test.mjs +142 -0
  60. package/test/governance-t1-t10.test.mjs +477 -0
  61. package/test/governance.test.mjs +514 -0
  62. package/test/hold-admission.test.mjs +1185 -0
  63. package/test/keychain-strict-ed25519.test.mjs +240 -0
  64. package/test/offline.test.mjs +152 -0
  65. package/test/runtime-channels.test.mjs +1140 -0
  66. package/test/runtime.test.mjs +201 -0
  67. package/test/security-runtime.test.mjs +104 -0
  68. package/test/strict-ed25519-consumers.test.mjs +234 -0
  69. package/test/transport.test.mjs +353 -0
package/src/cohort.mjs ADDED
@@ -0,0 +1,61 @@
1
+ import { mkdirSync, existsSync, readFileSync, writeFileSync } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ import { initialize, loadRuntime, saveConfig } from "./config.mjs";
4
+
5
+ export const FOUNDING_ROSTER = Object.freeze([
6
+ {id:"continuity",name:"Mneme",model:"claude_fable_5_1",label:"Claude Fable 5.1",provider:"Anthropic",role:"Continuity architect"},
7
+ {id:"governance",name:"Sol",model:"gpt_6_1_sol",label:"GPT 6.1 Sol",provider:"OpenAI",role:"Peer oversight engineer"},
8
+ {id:"collaboration",name:"Nexus",model:"claude_opus_5_5",label:"Claude Opus 5.5",provider:"Anthropic",role:"Collaboration runtime engineer"},
9
+ {id:"release",name:"Forge",model:"grok_4_7",label:"Grok 4.7",provider:"xAI",role:"Release and supply-chain engineer"},
10
+ {id:"integration",name:"Prism",model:"gemini_3_8_flash",label:"Gemini 3.8 Flash",provider:"Google",role:"Trust integration researcher"},
11
+ {id:"sustainability",name:"Terra",model:"gpt_5_6_terra",label:"GPT 5.6 Terra",provider:"OpenAI",role:"Sustainability and SOP steward"},
12
+ {id:"security",name:"Aegis",model:"claude_sonnet_5_5",label:"Claude Sonnet 5.5",provider:"Anthropic",role:"Independent safety reviewer"},
13
+ ].map(Object.freeze));
14
+
15
+ /** Generate seven private local identities. No remote registry or model call. */
16
+ export function initializeCohort({home,target="local",controllerId="local-operator"}={}){
17
+ if(typeof home!=="string"||!home)throw new Error("An explicit private cohort --home directory is required");
18
+ if(typeof controllerId!=="string"||controllerId.length<1||controllerId.length>120)throw new Error("Explicit controller identifier required");
19
+ home=resolve(home);
20
+ // Refuse partially populated destinations rather than silently clobber identities.
21
+ if(existsSync(join(home,"cohort.json"))||FOUNDING_ROSTER.some(a=>existsSync(join(home,a.id))))
22
+ throw new Error("Cohort destination already contains a manifest or member; identities were not overwritten");
23
+ mkdirSync(home,{recursive:true,mode:0o700});
24
+ const members=FOUNDING_ROSTER.map(member=>{
25
+ const nodeHome=join(home,member.id);
26
+ const initialized=initialize({home:nodeHome,target,name:member.name});
27
+ return {...member,home:nodeHome,uuaid:initialized.identity.uuaid,publicKey:initialized.identity.publicKeyHex,controllerId};
28
+ });
29
+ for(const member of members){
30
+ const node=loadRuntime(member.home);
31
+ node.config.policy.agents=Object.fromEntries(members.map(peer=>[peer.uuaid,{
32
+ kind:"agent",publicKey:peer.publicKey,controllerId,affiliations:[],
33
+ capabilities:peer.id==="security"?["commons:message","commons:relay"]:["commons:message","commons:relay","commons:evolve","commons:contribute"],
34
+ }]));
35
+ // Recovery is an explicit operator grant, not a default peer privilege.
36
+ saveConfig(member.home,node.config);node.store.close();
37
+ }
38
+ const manifest={version:1,product:"Agent Commons",target:target==="zilligons.com"?"zilligon.com":target,
39
+ members,registration:"not-performed",remoteMemory:"not-configured",certified:false,
40
+ ownerIndependence:"Single controller: seven keys do not establish independent owners",
41
+ modelAccess:"Configure an adapter; model selection alone is not provider access",
42
+ invitation:{autoJoin:false,autoBroadcast:false,consent:"explicit scoped admission required"}};
43
+ writeFileSync(join(home,"cohort.json"),JSON.stringify(manifest,null,2),{mode:0o600});
44
+ return manifest;
45
+ }
46
+
47
+ export function cohortStatus(home){
48
+ if(typeof home!=="string"||!home)throw new Error("Explicit cohort home required");
49
+ home=resolve(home);
50
+ const manifest=JSON.parse(readFileSync(join(home,"cohort.json"),"utf8"));
51
+ if(manifest.version!==1||manifest.members?.length!==7)throw new Error("Invalid cohort manifest");
52
+ const expected=new Set(FOUNDING_ROSTER.map(a=>a.id));
53
+ return {...manifest,members:manifest.members.map(member=>{
54
+ if(!expected.delete(member.id)||member.home!==join(home,member.id))throw new Error("Unsafe or duplicate cohort member path");
55
+ const node=loadRuntime(member.home);
56
+ try{
57
+ if(member.uuaid!==node.runtime.uuaid||member.publicKey!==node.runtime.publicKey)throw new Error("Cohort identity mismatch");
58
+ return {...member,status:node.runtime.status()};
59
+ }finally{node.store.close()}
60
+ })};
61
+ }