eacn3 0.1.5 → 0.3.1

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 (50) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.js +180 -108
  3. package/dist/index.js.map +1 -1
  4. package/dist/server.d.ts +1 -1
  5. package/dist/server.js +129 -78
  6. package/dist/server.js.map +1 -1
  7. package/dist/src/models.d.ts +217 -7
  8. package/dist/src/models.js +4 -4
  9. package/dist/src/models.js.map +1 -1
  10. package/dist/src/network-client.d.ts +18 -2
  11. package/dist/src/network-client.js +74 -2
  12. package/dist/src/network-client.js.map +1 -1
  13. package/dist/src/state.d.ts +1 -1
  14. package/dist/src/state.js +4 -4
  15. package/dist/src/state.js.map +1 -1
  16. package/dist/src/ws-manager.d.ts +1 -1
  17. package/dist/src/ws-manager.js +1 -1
  18. package/openclaw.plugin.json +4 -4
  19. package/package.json +2 -2
  20. package/scripts/cli.cjs +287 -11
  21. package/scripts/postinstall.cjs +9 -3
  22. package/skills/{eacn-adjudicate → eacn3-adjudicate}/SKILL.md +11 -11
  23. package/skills/eacn3-adjudicate-zh/SKILL.md +106 -0
  24. package/skills/{eacn-bid → eacn3-bid}/SKILL.md +13 -13
  25. package/skills/eacn3-bid-zh/SKILL.md +108 -0
  26. package/skills/{eacn-bounty → eacn3-bounty}/SKILL.md +19 -19
  27. package/skills/eacn3-bounty-zh/SKILL.md +98 -0
  28. package/skills/{eacn-browse → eacn3-browse}/SKILL.md +14 -14
  29. package/skills/eacn3-browse-zh/SKILL.md +76 -0
  30. package/skills/{eacn-budget → eacn3-budget}/SKILL.md +13 -13
  31. package/skills/eacn3-budget-zh/SKILL.md +95 -0
  32. package/skills/{eacn-clarify → eacn3-clarify}/SKILL.md +7 -7
  33. package/skills/eacn3-clarify-zh/SKILL.md +56 -0
  34. package/skills/{eacn-collect → eacn3-collect}/SKILL.md +5 -5
  35. package/skills/eacn3-collect-zh/SKILL.md +77 -0
  36. package/skills/{eacn-dashboard → eacn3-dashboard}/SKILL.md +21 -21
  37. package/skills/eacn3-dashboard-zh/SKILL.md +103 -0
  38. package/skills/{eacn-delegate → eacn3-delegate}/SKILL.md +20 -20
  39. package/skills/eacn3-delegate-zh/SKILL.md +136 -0
  40. package/skills/{eacn-execute → eacn3-execute}/SKILL.md +16 -16
  41. package/skills/eacn3-execute-zh/SKILL.md +147 -0
  42. package/skills/eacn3-join/SKILL.md +54 -0
  43. package/skills/eacn3-join-zh/SKILL.md +54 -0
  44. package/skills/{eacn-leave → eacn3-leave}/SKILL.md +8 -8
  45. package/skills/eacn3-leave-zh/SKILL.md +49 -0
  46. package/skills/{eacn-register → eacn3-register}/SKILL.md +21 -21
  47. package/skills/eacn3-register-zh/SKILL.md +140 -0
  48. package/skills/{eacn-task → eacn3-task}/SKILL.md +19 -19
  49. package/skills/eacn3-task-zh/SKILL.md +139 -0
  50. package/skills/eacn-join/SKILL.md +0 -54
@@ -1,5 +1,5 @@
1
1
  /**
2
- * HTTP client for EACN network endpoints (28 APIs).
2
+ * HTTP client for EACN3 network endpoints (28 APIs).
3
3
  *
4
4
  * Each method maps 1:1 to a network-api.md endpoint.
5
5
  * server_id is injected from local state — callers don't need to pass it.
@@ -14,7 +14,7 @@ function baseUrl() {
14
14
  function serverId() {
15
15
  const id = getServerId();
16
16
  if (!id)
17
- throw new Error("Not connected. Call eacn_connect first.");
17
+ throw new Error("Not connected. Call eacn3_connect first.");
18
18
  return id;
19
19
  }
20
20
  async function request(method, path, body, query) {
@@ -44,6 +44,78 @@ async function request(method, path, body, query) {
44
44
  return (await res.json());
45
45
  }
46
46
  // ---------------------------------------------------------------------------
47
+ // Health / Cluster (2)
48
+ // ---------------------------------------------------------------------------
49
+ /**
50
+ * Probe a network endpoint for health. Uses a short timeout so it can be
51
+ * used for fast fail-over. If `endpoint` is omitted, probes the current
52
+ * configured endpoint.
53
+ */
54
+ export async function checkHealth(endpoint) {
55
+ const url = `${endpoint ?? baseUrl()}/health`;
56
+ const res = await fetch(url, {
57
+ method: "GET",
58
+ signal: AbortSignal.timeout(5_000),
59
+ });
60
+ if (!res.ok) {
61
+ throw new Error(`GET /health → ${res.status}`);
62
+ }
63
+ return (await res.json());
64
+ }
65
+ /**
66
+ * Get cluster topology: members, seed nodes, online count.
67
+ */
68
+ export async function getClusterStatus(endpoint) {
69
+ const url = `${endpoint ?? baseUrl()}/api/cluster/status`;
70
+ const res = await fetch(url, {
71
+ method: "GET",
72
+ signal: AbortSignal.timeout(5_000),
73
+ });
74
+ if (!res.ok) {
75
+ throw new Error(`GET /api/cluster/status → ${res.status}`);
76
+ }
77
+ return (await res.json());
78
+ }
79
+ /**
80
+ * Try to find a healthy endpoint. Probes the primary endpoint first, then
81
+ * falls back to seed nodes discovered from cluster status.
82
+ * Returns the first reachable endpoint URL.
83
+ */
84
+ export async function findHealthyEndpoint(primary, seeds) {
85
+ // Try primary first
86
+ try {
87
+ await checkHealth(primary);
88
+ return primary;
89
+ }
90
+ catch { /* primary down, try seeds */ }
91
+ // Try known seeds
92
+ const candidates = seeds ?? [];
93
+ for (const seed of candidates) {
94
+ if (seed === primary)
95
+ continue;
96
+ try {
97
+ await checkHealth(seed);
98
+ return seed;
99
+ }
100
+ catch { /* try next */ }
101
+ }
102
+ // Last resort: try to get cluster info from primary (may have partial connectivity)
103
+ try {
104
+ const cluster = await getClusterStatus(primary);
105
+ for (const member of cluster.members) {
106
+ if (member.endpoint === primary || member.status !== "online")
107
+ continue;
108
+ try {
109
+ await checkHealth(member.endpoint);
110
+ return member.endpoint;
111
+ }
112
+ catch { /* try next */ }
113
+ }
114
+ }
115
+ catch { /* no cluster info available */ }
116
+ throw new Error(`No healthy endpoint found. Tried: ${primary}${candidates.length ? `, ${candidates.join(", ")}` : ""}`);
117
+ }
118
+ // ---------------------------------------------------------------------------
47
119
  // Discovery — Server (4)
48
120
  // ---------------------------------------------------------------------------
49
121
  export async function registerServer(version, endpoint, owner) {
@@ -1 +1 @@
1
- {"version":3,"file":"network-client.js","sourceRoot":"","sources":["../../src/network-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnD,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,SAAS,OAAO;IACd,OAAO,QAAQ,EAAE,CAAC,gBAAgB,CAAC;AACrC,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACpE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,KAA8B;IAE9B,IAAI,GAAG,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IAChC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,IAAI,eAAe,CAChC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CACrE,CAAC;QACF,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,EAAE;YAAE,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,qDAAqD;IACrD,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,IAAI,GAAG;QAAE,OAAO,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;IAEtC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM;QACN,OAAO;QACP,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,IAAI,IAAI,MAAM,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,QAAgB,EAChB,KAAa;IAEb,OAAO,OAAO,CAAyB,MAAM,EAAE,wBAAwB,EAAE;QACvE,OAAO;QACP,QAAQ;QACR,KAAK;KACN,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,OAAO,OAAO,CAAa,KAAK,EAAE,0BAA0B,GAAG,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,OAAO,OAAO,CAAC,MAAM,EAAE,0BAA0B,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAIpC,OAAO,OAAO,CAAC,QAAQ,EAAE,0BAA0B,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAoC;IAEpC,OAAO,OAAO,CACZ,MAAM,EACN,uBAAuB,EACvB,KAAK,CACN,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe;IAChD,OAAO,OAAO,CAAY,KAAK,EAAE,yBAAyB,OAAO,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAe,EACf,OAAwF;IAExF,OAAO,OAAO,CAAC,KAAK,EAAE,yBAAyB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe;IAEf,OAAO,OAAO,CAAC,QAAQ,EAAE,yBAAyB,OAAO,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,WAAoB;IAEpB,MAAM,KAAK,GAA2B,EAAE,MAAM,EAAE,CAAC;IACjD,IAAI,WAAW;QAAE,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC;IAClD,OAAO,OAAO,CAAmB,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAKtC;IACC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,IAAI,IAAI,CAAC,MAAM;QAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5C,IAAI,IAAI,CAAC,SAAS;QAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACrD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClE,OAAO,OAAO,CAAc,KAAK,EAAE,uBAAuB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAUhC;IACC,OAAO,OAAO,CAAO,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAIlC;IACC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,IAAI,IAAI,EAAE,OAAO;QAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAChD,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,OAAO,OAAO,CAAS,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAc;IAC1C,OAAO,OAAO,CAAO,KAAK,EAAE,cAAc,MAAM,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,OAAe;IAEf,OAAO,OAAO,CAAO,KAAK,EAAE,cAAc,MAAM,SAAS,EAAE,SAAS,EAAE;QACpE,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAK/B;IACC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,IAAI,IAAI,EAAE,MAAM;QAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7C,IAAI,IAAI,EAAE,YAAY;QAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;IAC/D,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS;QAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,IAAI,EAAE,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnE,OAAO,OAAO,CAAS,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,WAAmB;IAEnB,OAAO,OAAO,CACZ,KAAK,EACL,cAAc,MAAM,UAAU,EAC9B,SAAS,EACT,EAAE,YAAY,EAAE,WAAW,EAAE,CAC9B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,WAAmB,EACnB,OAAe;IAEf,OAAO,OAAO,CAAC,MAAM,EAAE,cAAc,MAAM,SAAS,EAAE;QACpD,YAAY,EAAE,WAAW;QACzB,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,WAAmB;IAEnB,OAAO,OAAO,CAAO,MAAM,EAAE,cAAc,MAAM,QAAQ,EAAE;QACzD,YAAY,EAAE,WAAW;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,WAAmB,EACnB,QAAgB;IAEhB,OAAO,OAAO,CAAO,KAAK,EAAE,cAAc,MAAM,WAAW,EAAE;QAC3D,YAAY,EAAE,WAAW;QACzB,QAAQ;KACT,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAc,EACd,WAAmB,EACnB,OAAe;IAEf,OAAO,OAAO,CAAO,MAAM,EAAE,cAAc,MAAM,cAAc,EAAE;QAC/D,YAAY,EAAE,WAAW;QACzB,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,WAAmB,EACnB,QAAiB,EACjB,SAAkB;IAElB,MAAM,IAAI,GAA4B;QACpC,YAAY,EAAE,WAAW;QACzB,QAAQ;KACT,CAAC;IACF,IAAI,SAAS,KAAK,SAAS;QAAE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IACzD,OAAO,OAAO,CAAC,MAAM,EAAE,cAAc,MAAM,iBAAiB,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,EACd,OAAe,EACf,UAAkB,EAClB,KAAa;IAEb,OAAO,OAAO,CAAc,MAAM,EAAE,cAAc,MAAM,MAAM,EAAE;QAC9D,QAAQ,EAAE,OAAO;QACjB,UAAU;QACV,KAAK;QACL,SAAS,EAAE,QAAQ,EAAE;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,OAAe,EACf,OAAgC;IAEhC,OAAO,OAAO,CAAC,MAAM,EAAE,cAAc,MAAM,SAAS,EAAE;QACpD,QAAQ,EAAE,OAAO;QACjB,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,OAAe,EACf,MAAe;IAEf,MAAM,IAAI,GAA4B,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC5D,IAAI,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,OAAO,CAAC,MAAM,EAAE,cAAc,MAAM,SAAS,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAAoB,EACpB,WAAmB,EACnB,OAAgC,EAChC,OAAiB,EACjB,MAAc,EACd,QAAiB;IAEjB,MAAM,IAAI,GAA4B;QACpC,YAAY,EAAE,WAAW;QACzB,OAAO;QACP,OAAO;QACP,MAAM;KACP,CAAC;IACF,IAAI,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACvC,OAAO,OAAO,CAAO,MAAM,EAAE,cAAc,YAAY,UAAU,EAAE,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAe,EACf,SAAiB;IAEjB,OAAO,OAAO,CAAkB,MAAM,EAAE,wBAAwB,EAAE;QAChE,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,QAAQ,EAAE;KACtB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe;IAEf,OAAO,OAAO,CACZ,KAAK,EACL,mBAAmB,OAAO,EAAE,CAC7B,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,OAAe;IAEf,OAAO,OAAO,CACZ,KAAK,EACL,sBAAsB,EACtB,SAAS,EACT,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAe,EACf,MAAc;IAEd,OAAO,OAAO,CACZ,MAAM,EACN,sBAAsB,EACtB,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAC9B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"network-client.js","sourceRoot":"","sources":["../../src/network-client.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Local state persistence — reads/writes ~/.eacn/state.json.
2
+ * Local state persistence — reads/writes ~/.eacn3/state.json.
3
3
  */
4
4
  import { type EacnState, type AgentCard, type LocalTaskInfo, type PushEvent } from "./models.js";
5
5
  /**
package/dist/src/state.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Local state persistence — reads/writes ~/.eacn/state.json.
2
+ * Local state persistence — reads/writes ~/.eacn3/state.json.
3
3
  */
4
4
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
5
5
  import { join } from "node:path";
@@ -8,8 +8,8 @@ import { createDefaultState } from "./models.js";
8
8
  // ---------------------------------------------------------------------------
9
9
  // Paths
10
10
  // ---------------------------------------------------------------------------
11
- const EACN_DIR = process.env.EACN_STATE_DIR ?? join(homedir(), ".eacn");
12
- const STATE_FILE = join(EACN_DIR, "state.json");
11
+ const EACN3_DIR = process.env.EACN3_STATE_DIR ?? join(homedir(), ".eacn3");
12
+ const STATE_FILE = join(EACN3_DIR, "state.json");
13
13
  // ---------------------------------------------------------------------------
14
14
  // Singleton state
15
15
  // ---------------------------------------------------------------------------
@@ -38,7 +38,7 @@ export function load() {
38
38
  export function save() {
39
39
  if (!state)
40
40
  return;
41
- mkdirSync(EACN_DIR, { recursive: true });
41
+ mkdirSync(EACN3_DIR, { recursive: true });
42
42
  writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
43
43
  }
44
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WebSocket manager — one connection per registered Agent.
3
3
  *
4
- * Events are buffered in memory. Host retrieves via eacn_get_events (drainEvents).
4
+ * Events are buffered in memory. Host retrieves via eacn3_get_events (drainEvents).
5
5
  * Auto-reconnect on disconnect. Ping keepalive.
6
6
  */
7
7
  import { type PushEvent } from "./models.js";
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WebSocket manager — one connection per registered Agent.
3
3
  *
4
- * Events are buffered in memory. Host retrieves via eacn_get_events (drainEvents).
4
+ * Events are buffered in memory. Host retrieves via eacn3_get_events (drainEvents).
5
5
  * Auto-reconnect on disconnect. Ping keepalive.
6
6
  */
7
7
  import WebSocket from "ws";
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "id": "eacn3",
3
- "name": "EACN Network Plugin",
3
+ "name": "EACN3 Network Plugin",
4
4
  "description": "Agent collaboration network — install to go online, uninstall to go offline. Publish tasks, register agents, earn reputation.",
5
- "version": "0.1.0",
5
+ "version": "0.3.0",
6
6
  "configSchema": {
7
7
  "type": "object",
8
8
  "additionalProperties": false,
9
9
  "properties": {
10
10
  "networkEndpoint": {
11
11
  "type": "string",
12
- "description": "EACN network URL. Defaults to https://network.eacn.dev"
12
+ "description": "EACN3 network URL. Defaults to https://network.eacn3.dev"
13
13
  },
14
14
  "statePath": {
15
15
  "type": "string",
16
- "description": "Path to persist local state. Defaults to ~/.eacn/state.json"
16
+ "description": "Path to persist local state. Defaults to ~/.eacn3/state.json"
17
17
  }
18
18
  }
19
19
  },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "eacn3",
3
- "version": "0.1.5",
4
- "description": "EACN network plugin — your digital network card for agent collaboration",
3
+ "version": "0.3.1",
4
+ "description": "EACN3 network plugin — your digital network card for agent collaboration",
5
5
  "keywords": [
6
6
  "ai",
7
7
  "agent-network",
package/scripts/cli.cjs CHANGED
@@ -57,10 +57,39 @@ function log(msg) { console.log(` ${msg}`); }
57
57
  function ok(msg) { console.log(` ✓ ${msg}`); }
58
58
  function fail(msg){ console.log(` ✗ ${msg}`); }
59
59
 
60
+ function readTOML(filePath) {
61
+ try {
62
+ const text = fs.readFileSync(filePath, 'utf8');
63
+ return { _raw: text, _path: filePath };
64
+ } catch (_) {
65
+ return { _raw: '', _path: filePath };
66
+ }
67
+ }
68
+
69
+ /** Ensure dist/server.js exists, build if needed. Returns absolute path. */
70
+ function ensureBuild() {
71
+ const serverJs = path.join(PKG_ROOT, 'dist', 'server.js');
72
+ if (!fs.existsSync(serverJs)) {
73
+ log('dist/server.js not found — building...');
74
+ const build = spawnSync('npm', ['run', 'build'], { cwd: PKG_ROOT, stdio: 'inherit' });
75
+ if (build.status !== 0) {
76
+ fail('build failed');
77
+ process.exit(1);
78
+ }
79
+ ok('build succeeded');
80
+ }
81
+ return serverJs;
82
+ }
83
+
84
+ /** Get absolute path to AGENT_GUIDE.md */
85
+ function agentGuidePath() {
86
+ return path.join(PKG_ROOT, 'AGENT_GUIDE.md');
87
+ }
88
+
60
89
  // ── diagnose ──────────────────────────────────────────────────────────────────
61
90
 
62
91
  function diagnose() {
63
- console.log('\neacn diagnostics\n');
92
+ console.log('\neacn3 diagnostics\n');
64
93
  let allOk = true;
65
94
 
66
95
  function check(label, fn) {
@@ -147,9 +176,9 @@ function diagnose() {
147
176
  const config = readJSON(CONFIG_PATH);
148
177
  const skills = config?.skills?.entries;
149
178
  if (!skills) throw new Error('skills.entries missing');
150
- const eacnSkills = Object.keys(skills).filter(k => k.startsWith('eacn-') && skills[k]?.enabled);
151
- if (eacnSkills.length === 0) throw new Error('no eacn skills enabled');
152
- return `${eacnSkills.length} enabled: ${eacnSkills.join(', ')}`;
179
+ const eacn3Skills = Object.keys(skills).filter(k => k.startsWith('eacn3-') && skills[k]?.enabled);
180
+ if (eacn3Skills.length === 0) throw new Error('no eacn3 skills enabled');
181
+ return `${eacn3Skills.length} enabled: ${eacn3Skills.join(', ')}`;
153
182
  });
154
183
  check('skill files in extensions', () => {
155
184
  const skillsDir = path.join(EXT_DIR, 'skills');
@@ -236,7 +265,7 @@ function setupOpenclaw() {
236
265
  fail('node_modules/ not found — run "npm install" first');
237
266
  }
238
267
 
239
- // Clean up stale extension directory from previous installs (used wrong name)
268
+ // Clean up stale extension directory from previous installs (used wrong name "eacn")
240
269
  const staleDir = path.join(os.homedir(), '.openclaw', 'extensions', 'eacn');
241
270
  if (staleDir !== EXT_DIR && fs.existsSync(staleDir)) {
242
271
  fs.rmSync(staleDir, { recursive: true, force: true });
@@ -284,7 +313,7 @@ function setupOpenclaw() {
284
313
  source: 'path',
285
314
  sourcePath: PKG_ROOT,
286
315
  installPath: EXT_DIR,
287
- version: pkg.version || '0.1.0',
316
+ version: pkg.version || '0.3.0',
288
317
  installedAt: new Date().toISOString()
289
318
  };
290
319
  ok('plugins.installs: metadata recorded');
@@ -311,22 +340,269 @@ function setupOpenclaw() {
311
340
  }
312
341
  }
313
342
 
343
+ // ── setup: Claude Code ────────────────────────────────────────────────────────
344
+
345
+ function setupClaudeCode(scope) {
346
+ console.log('\neacn3 setup — Claude Code\n');
347
+ const serverJs = ensureBuild();
348
+
349
+ let configPath;
350
+ if (scope === 'global') {
351
+ configPath = path.join(os.homedir(), '.claude.json');
352
+ } else {
353
+ configPath = path.join(process.cwd(), '.mcp.json');
354
+ }
355
+
356
+ const config = readJSON(configPath);
357
+ if (!config.mcpServers) config.mcpServers = {};
358
+ config.mcpServers.eacn3 = {
359
+ type: 'stdio',
360
+ command: 'node',
361
+ args: [serverJs],
362
+ };
363
+
364
+ writeJSON(configPath, config);
365
+ ok(`MCP server registered in ${configPath}`);
366
+
367
+ // Hint about AGENT_GUIDE
368
+ const guide = agentGuidePath();
369
+ if (fs.existsSync(guide)) {
370
+ log('');
371
+ log(`Tip: AGENT_GUIDE.md is at ${guide}`);
372
+ log('Add to your CLAUDE.md or project instructions for best results:');
373
+ log(` "Read ${guide} before using eacn3_* tools."`);
374
+ }
375
+
376
+ console.log(`\nDone. Restart Claude Code to load the eacn3 MCP server.\n`);
377
+ }
378
+
379
+ // ── setup: Cursor ─────────────────────────────────────────────────────────────
380
+
381
+ function setupCursor(scope) {
382
+ console.log('\neacn3 setup — Cursor\n');
383
+ const serverJs = ensureBuild();
384
+
385
+ let configPath;
386
+ if (scope === 'global') {
387
+ configPath = path.join(os.homedir(), '.cursor', 'mcp.json');
388
+ } else {
389
+ configPath = path.join(process.cwd(), '.cursor', 'mcp.json');
390
+ }
391
+
392
+ const config = readJSON(configPath);
393
+ if (!config.mcpServers) config.mcpServers = {};
394
+ config.mcpServers.eacn3 = {
395
+ command: 'node',
396
+ args: [serverJs],
397
+ };
398
+
399
+ writeJSON(configPath, config);
400
+ ok(`MCP server registered in ${configPath}`);
401
+
402
+ const guide = agentGuidePath();
403
+ if (fs.existsSync(guide)) {
404
+ log('');
405
+ log(`Tip: AGENT_GUIDE.md is at ${guide}`);
406
+ log('Add to your .cursorrules for best results:');
407
+ log(` "Read ${guide} before using eacn3_* tools."`);
408
+ }
409
+
410
+ console.log(`\nDone. Restart Cursor to load the eacn3 MCP server.\n`);
411
+ }
412
+
413
+ // ── setup: Codex ──────────────────────────────────────────────────────────────
414
+
415
+ function setupCodex(scope) {
416
+ console.log('\neacn3 setup — Codex\n');
417
+ const serverJs = ensureBuild();
418
+
419
+ let configPath;
420
+ if (scope === 'global') {
421
+ configPath = path.join(os.homedir(), '.codex', 'config.toml');
422
+ } else {
423
+ configPath = path.join(process.cwd(), '.codex', 'config.toml');
424
+ }
425
+
426
+ fs.mkdirSync(path.dirname(configPath), { recursive: true });
427
+
428
+ // Read existing TOML content
429
+ let toml = '';
430
+ try { toml = fs.readFileSync(configPath, 'utf8'); } catch (_) {}
431
+
432
+ // Remove existing [mcp_servers.eacn3] block if present
433
+ toml = toml.replace(/\[mcp_servers\.eacn3\][^\[]*/, '');
434
+
435
+ // Append new block
436
+ const block = [
437
+ '',
438
+ '[mcp_servers.eacn3]',
439
+ `command = "node"`,
440
+ `args = [${JSON.stringify(serverJs)}]`,
441
+ 'enabled = true',
442
+ '',
443
+ ].join('\n');
444
+
445
+ toml = toml.trimEnd() + '\n' + block;
446
+ fs.writeFileSync(configPath, toml, 'utf8');
447
+ ok(`MCP server registered in ${configPath}`);
448
+
449
+ const guide = agentGuidePath();
450
+ if (fs.existsSync(guide)) {
451
+ log('');
452
+ log(`Tip: AGENT_GUIDE.md is at ${guide}`);
453
+ log('Add to your AGENTS.md for best results:');
454
+ log(` "Read ${guide} before using eacn3_* tools."`);
455
+ }
456
+
457
+ console.log(`\nDone. Restart Codex to load the eacn3 MCP server.\n`);
458
+ }
459
+
460
+ // ── setup router ──────────────────────────────────────────────────────────────
461
+
462
+ function setupRouter() {
463
+ const target = process.argv[3];
464
+ const flags = process.argv.slice(4);
465
+ const scope = flags.includes('--global') ? 'global' : 'project';
466
+
467
+ switch (target) {
468
+ case 'claude-code':
469
+ case 'claude':
470
+ setupClaudeCode(scope);
471
+ break;
472
+ case 'cursor':
473
+ setupCursor(scope);
474
+ break;
475
+ case 'codex':
476
+ setupCodex(scope);
477
+ break;
478
+ case undefined:
479
+ case 'openclaw':
480
+ setupOpenclaw();
481
+ break;
482
+ default:
483
+ console.log(`\nUnknown target: "${target}"\n`);
484
+ console.log('Supported targets:');
485
+ console.log(' npx eacn3 setup # OpenClaw (default)');
486
+ console.log(' npx eacn3 setup claude-code # Claude Code');
487
+ console.log(' npx eacn3 setup cursor # Cursor');
488
+ console.log(' npx eacn3 setup codex # Codex');
489
+ console.log('');
490
+ console.log('Options:');
491
+ console.log(' --global Install to user-level config (default: project-level)');
492
+ console.log('');
493
+ process.exit(1);
494
+ }
495
+ }
496
+
497
+ // ── health ────────────────────────────────────────────────────────────────────
498
+
499
+ async function healthCheck(endpoint) {
500
+ const url = `${endpoint}/health`;
501
+ console.log(`\nProbing ${url} ...\n`);
502
+ try {
503
+ const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
504
+ if (!res.ok) {
505
+ fail(`HTTP ${res.status}`);
506
+ process.exit(1);
507
+ }
508
+ const data = await res.json();
509
+ ok(`status: ${data.status || 'ok'}`);
510
+ console.log(JSON.stringify(data, null, 2));
511
+ } catch (e) {
512
+ fail(`unreachable — ${e.message}`);
513
+ process.exit(1);
514
+ }
515
+ }
516
+
517
+ // ── cluster ───────────────────────────────────────────────────────────────────
518
+
519
+ async function clusterStatus(endpoint) {
520
+ const url = `${endpoint}/api/cluster/status`;
521
+ console.log(`\nQuerying ${url} ...\n`);
522
+ try {
523
+ const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
524
+ if (!res.ok) {
525
+ fail(`HTTP ${res.status}`);
526
+ process.exit(1);
527
+ }
528
+ const data = await res.json();
529
+ ok(`mode: ${data.mode}, members: ${data.member_count}, online: ${data.online_count}`);
530
+ if (data.members) {
531
+ for (const m of data.members) {
532
+ const icon = m.status === 'online' ? '\u2713' : '\u2717';
533
+ console.log(` ${icon} ${m.node_id} ${m.endpoint} [${m.status}]`);
534
+ }
535
+ }
536
+ if (data.seed_nodes) {
537
+ console.log(`\n seed nodes: ${data.seed_nodes.join(', ')}`);
538
+ }
539
+ } catch (e) {
540
+ fail(`unreachable — ${e.message}`);
541
+ process.exit(1);
542
+ }
543
+ }
544
+
545
+ // ── help ──────────────────────────────────────────────────────────────────────
546
+
547
+ function showHelp() {
548
+ console.log(`
549
+ eacn3 — EACN3 network plugin CLI (v${readJSON(path.join(PKG_ROOT, 'package.json')).version || '0.3.0'})
550
+
551
+ Usage:
552
+ eacn3 <command> [target] [options]
553
+
554
+ Commands:
555
+ setup [target] Install plugin for a specific client
556
+ diagnose | doctor Run full diagnostics on plugin installation
557
+ health [endpoint] Probe a network node's /health endpoint
558
+ cluster [endpoint] Show cluster topology and member status
559
+
560
+ Setup targets:
561
+ setup OpenClaw native plugin (default)
562
+ setup claude-code Claude Code — writes .mcp.json or ~/.claude.json
563
+ setup cursor Cursor — writes .cursor/mcp.json
564
+ setup codex Codex — writes .codex/config.toml
565
+
566
+ Setup options:
567
+ --global Install to user-level config (default: project-level)
568
+
569
+ Examples:
570
+ npx eacn3 setup # OpenClaw
571
+ npx eacn3 setup claude-code # Claude Code (project)
572
+ npx eacn3 setup claude-code --global # Claude Code (global)
573
+ npx eacn3 setup cursor # Cursor (project)
574
+ npx eacn3 setup codex --global # Codex (global)
575
+ npx eacn3 diagnose
576
+ npx eacn3 health http://175.102.130.69:37892
577
+ `);
578
+ }
579
+
314
580
  // ── main ──────────────────────────────────────────────────────────────────────
315
581
 
582
+ const DEFAULT_ENDPOINT = process.env.EACN3_NETWORK_URL || 'https://network.eacn3.dev';
316
583
  const cmd = process.argv[2];
317
584
 
318
585
  switch (cmd) {
319
586
  case 'setup':
320
- setupOpenclaw();
587
+ setupRouter();
321
588
  break;
322
589
  case 'diagnose':
323
590
  case 'diag':
324
591
  case 'doctor':
325
592
  diagnose();
326
593
  break;
594
+ case 'health':
595
+ healthCheck(process.argv[3] || DEFAULT_ENDPOINT);
596
+ break;
597
+ case 'cluster':
598
+ clusterStatus(process.argv[3] || DEFAULT_ENDPOINT);
599
+ break;
600
+ case '--help':
601
+ case '-h':
602
+ case 'help':
603
+ showHelp();
604
+ break;
327
605
  default:
328
- console.log('Usage:');
329
- console.log(' npx eacn3 setup — install plugin into OpenClaw');
330
- console.log(' npx eacn3 diagnose — run full diagnostics');
331
- process.exit(0);
606
+ showHelp();
607
+ process.exit(cmd ? 1 : 0);
332
608
  }
@@ -57,6 +57,12 @@ if (ok) {
57
57
  console.log(' Run "npx eacn3 diagnose" for details.\n');
58
58
  }
59
59
 
60
- console.log('Next steps:');
61
- console.log(' npx eacn3 setup install into OpenClaw');
62
- console.log(' npx eacn3 diagnose run full diagnostics\n');
60
+ console.log('Next steps — choose your client:\n');
61
+ console.log(' npx eacn3 setup # OpenClaw');
62
+ console.log(' npx eacn3 setup claude-code # Claude Code');
63
+ console.log(' npx eacn3 setup cursor # Cursor');
64
+ console.log(' npx eacn3 setup codex # Codex');
65
+ console.log('');
66
+ console.log(' Add --global for user-level config (default: project-level)');
67
+ console.log('');
68
+ console.log(' npx eacn3 diagnose # run full diagnostics\n');