@ixo/openhands-sdk 0.1.0 → 0.2.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.
package/README.md CHANGED
@@ -18,9 +18,8 @@ until then it is not on npm. In git, `package.json` carries the placeholder vers
18
18
 
19
19
  - this monorepo (the main app, the worker, the MCP server, scripts), through a TypeScript path;
20
20
  - the MCP server, which bundles it into `@ixo/openhands-mcp`;
21
- - the youth app, which now lives in its own repo (`openhands-youth`) and **vendors** a copy of this
22
- package under `vendor/openhands-sdk` until 0.1.0 is published, then moves to the npm package (see
23
- [docs/youth-app.md](../../docs/youth-app.md)).
21
+ - the youth app, which lives in its own repo (`impactsai/openhands-wcud`) and depends on the npm
22
+ package (see [docs/youth-app.md](../../docs/youth-app.md)).
24
23
 
25
24
  ## Install
26
25
 
@@ -229,7 +228,7 @@ and an `sdk` commit also releases `@ixo/openhands-mcp`, which bundles the SDK. T
229
228
  the one-time setup is in [docs/RELEASING-MCP.md](../../docs/RELEASING-MCP.md), which covers both
230
229
  packages.
231
230
 
232
- Once 0.1.0 is published, the youth app swaps its vendored copy for the dependency.
231
+ The youth app depends on the published package since 0.1.0.
233
232
 
234
233
  ## Versioning
235
234
 
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * How an MCP client is told to connect to Openhands Network.
3
3
  *
4
- * One table, three renderings: the server's own `get_config_help`, the
5
- * `/agents` page, and the plugin's README all print these lines from here, so
4
+ * One table, several renderings: the server's own `get_config_help` and the
5
+ * hosted `where_to_act`, the install block (`/`, `/connect`, `/mcp`), the
6
+ * agent page and its `/mcp.md` twin, and the hosted server's description all
7
+ * print these lines from here, so
6
8
  * they cannot disagree — which they did, for a month, when the page said
7
9
  * `/path/to/openhands-mcp` and the server printed whatever path it happened
8
10
  * to be running from.
@@ -72,16 +74,43 @@ export declare function installLines(client: InstallClient, options: InstallOpti
72
74
  export declare const INSTALL_WHERE: Record<InstallClient, string>;
73
75
  /**
74
76
  * The plugin: the local server with its skill, from the ixo plugin
75
- * marketplace. It launches the same package (`npx -y` {@link MCP_SPEC}), so it
76
- * works exactly when the package does.
77
+ * marketplace, and the first way in for Claude Code and Codex. It launches the
78
+ * same package (`npx -y` {@link MCP_SPEC}), so it works exactly when the
79
+ * package does.
77
80
  */
78
81
  export declare const PLUGIN_MARKETPLACE = "ixoworld/ixo-plugins";
82
+ export declare const PLUGIN_NAME = "ixo-openhands";
79
83
  export declare const PLUGIN_ID = "ixo-openhands@ixo-plugins";
84
+ /**
85
+ * The network the plugin starts on, and the variable that changes it.
86
+ *
87
+ * The plugin's Claude Code `.mcp.json` sets `NEXT_PUBLIC_CHAIN_NETWORK` to
88
+ * `${OPENHANDS_NETWORK:-mainnet}`, which Claude Code expands from the
89
+ * environment it was started in. Codex's portable `mcp.json` has no such
90
+ * expansion and says `mainnet` outright, so in Codex the plugin is mainnet
91
+ * only and the test network is the config.toml lines.
92
+ */
93
+ export declare const PLUGIN_NETWORK_DEFAULT = "mainnet";
94
+ export declare const PLUGIN_NETWORK_ENV = "OPENHANDS_NETWORK";
95
+ /** The first Claude Code that installs from a marketplace in one step, with `--marketplace`. */
96
+ export declare const CLAUDE_CODE_ONE_STEP = "2.1.275";
80
97
  export declare const PLUGIN_CLIENTS: readonly ["claude-code", "codex"];
81
98
  export type PluginClient = (typeof PLUGIN_CLIENTS)[number];
82
- /** One client's plugin install, a command per line. */
83
- export declare function pluginLines(client: PluginClient): string;
84
- export declare const PLUGIN_WHERE: Record<PluginClient, string>;
99
+ /**
100
+ * Every plugin install, in the order to show them: Claude Code in one step,
101
+ * the two steps an older Claude Code needs, then Codex.
102
+ */
103
+ export declare const PLUGIN_INSTALLS: readonly ["claude-code", "claude-code-older", "codex"];
104
+ export type PluginInstall = (typeof PLUGIN_INSTALLS)[number];
105
+ /** One plugin install, a command per line. */
106
+ export declare function pluginLines(install: PluginInstall): string;
107
+ export declare const PLUGIN_WHERE: Record<PluginInstall, string>;
108
+ /**
109
+ * What the plugin brings and which network it starts on, said for the site at
110
+ * `network`: on mainnet, how to get the test network instead; on the test
111
+ * network, that the client has to be started for it.
112
+ */
113
+ export declare function pluginNetworkNote(network: string): string;
85
114
  /**
86
115
  * The hosted server, for a client that cannot run a local one. It reads the
87
116
  * board and hands every action back to the site or the local server, so a
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAEhD,iGAAiG;AACjG,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B,iCAAiC;AACjC,eAAO,MAAM,QAAQ,yBAAgC,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,wDAAwD;AACxD,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,MAA2D,CAAC;AAEvG,eAAO,MAAM,eAAe,uDAAwD,CAAC;AACrF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAgBD,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAqBnF;AAED,iEAAiE;AACjE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKvD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AACzD,eAAO,MAAM,SAAS,8BAA8B,CAAC;AAErD,eAAO,MAAM,cAAc,mCAAoC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAIxD;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAGrD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,uCAAwC,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAGrD,CAAC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAEhD,iGAAiG;AACjG,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B,iCAAiC;AACjC,eAAO,MAAM,QAAQ,yBAAgC,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,wDAAwD;AACxD,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,MAA2D,CAAC;AAEvG,eAAO,MAAM,eAAe,uDAAwD,CAAC;AACrF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAgBD,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAqBnF;AAED,iEAAiE;AACjE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AACzD,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,SAAS,8BAA+B,CAAC;AAEtD;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAChD,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AAEtD,gGAAgG;AAChG,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAE9C,eAAO,MAAM,cAAc,mCAAoC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,eAAe,wDAAyD,CAAC;AACtF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAS1D;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAItD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,uCAAwC,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAGrD,CAAC"}
@@ -2,8 +2,10 @@
2
2
  /**
3
3
  * How an MCP client is told to connect to Openhands Network.
4
4
  *
5
- * One table, three renderings: the server's own `get_config_help`, the
6
- * `/agents` page, and the plugin's README all print these lines from here, so
5
+ * One table, several renderings: the server's own `get_config_help` and the
6
+ * hosted `where_to_act`, the install block (`/`, `/connect`, `/mcp`), the
7
+ * agent page and its `/mcp.md` twin, and the hosted server's description all
8
+ * print these lines from here, so
7
9
  * they cannot disagree — which they did, for a month, when the page said
8
10
  * `/path/to/openhands-mcp` and the server printed whatever path it happened
9
11
  * to be running from.
@@ -18,9 +20,10 @@
18
20
  * anchor, so the server, the package and the plugin all carry its name.
19
21
  */
20
22
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.HOSTED_WHERE = exports.HOSTED_CLIENTS = exports.PLUGIN_WHERE = exports.PLUGIN_CLIENTS = exports.PLUGIN_ID = exports.PLUGIN_MARKETPLACE = exports.INSTALL_WHERE = exports.INSTALL_CLIENTS = exports.hostedUrl = exports.MCP_HOSTED_PATH = exports.MCP_SPEC = exports.MCP_MAJOR = exports.MCP_SERVER = exports.MCP_PACKAGE = void 0;
23
+ exports.HOSTED_WHERE = exports.HOSTED_CLIENTS = exports.PLUGIN_WHERE = exports.PLUGIN_INSTALLS = exports.PLUGIN_CLIENTS = exports.CLAUDE_CODE_ONE_STEP = exports.PLUGIN_NETWORK_ENV = exports.PLUGIN_NETWORK_DEFAULT = exports.PLUGIN_ID = exports.PLUGIN_NAME = exports.PLUGIN_MARKETPLACE = exports.INSTALL_WHERE = exports.INSTALL_CLIENTS = exports.hostedUrl = exports.MCP_HOSTED_PATH = exports.MCP_SPEC = exports.MCP_MAJOR = exports.MCP_SERVER = exports.MCP_PACKAGE = void 0;
22
24
  exports.installLines = installLines;
23
25
  exports.pluginLines = pluginLines;
26
+ exports.pluginNetworkNote = pluginNetworkNote;
24
27
  exports.hostedLines = hostedLines;
25
28
  /** The npm package the bundled server ships as (the plugin plan's A2). */
26
29
  exports.MCP_PACKAGE = "@ixo/openhands-mcp";
@@ -89,22 +92,60 @@ exports.INSTALL_WHERE = {
89
92
  };
90
93
  /**
91
94
  * The plugin: the local server with its skill, from the ixo plugin
92
- * marketplace. It launches the same package (`npx -y` {@link MCP_SPEC}), so it
93
- * works exactly when the package does.
95
+ * marketplace, and the first way in for Claude Code and Codex. It launches the
96
+ * same package (`npx -y` {@link MCP_SPEC}), so it works exactly when the
97
+ * package does.
94
98
  */
95
99
  exports.PLUGIN_MARKETPLACE = "ixoworld/ixo-plugins";
96
- exports.PLUGIN_ID = "ixo-openhands@ixo-plugins";
100
+ exports.PLUGIN_NAME = "ixo-openhands";
101
+ exports.PLUGIN_ID = `${exports.PLUGIN_NAME}@ixo-plugins`;
102
+ /**
103
+ * The network the plugin starts on, and the variable that changes it.
104
+ *
105
+ * The plugin's Claude Code `.mcp.json` sets `NEXT_PUBLIC_CHAIN_NETWORK` to
106
+ * `${OPENHANDS_NETWORK:-mainnet}`, which Claude Code expands from the
107
+ * environment it was started in. Codex's portable `mcp.json` has no such
108
+ * expansion and says `mainnet` outright, so in Codex the plugin is mainnet
109
+ * only and the test network is the config.toml lines.
110
+ */
111
+ exports.PLUGIN_NETWORK_DEFAULT = "mainnet";
112
+ exports.PLUGIN_NETWORK_ENV = "OPENHANDS_NETWORK";
113
+ /** The first Claude Code that installs from a marketplace in one step, with `--marketplace`. */
114
+ exports.CLAUDE_CODE_ONE_STEP = "2.1.275";
97
115
  exports.PLUGIN_CLIENTS = ["claude-code", "codex"];
98
- /** One client's plugin install, a command per line. */
99
- function pluginLines(client) {
100
- return client === "claude-code"
101
- ? [`/plugin marketplace add ${exports.PLUGIN_MARKETPLACE}`, `/plugin install ${exports.PLUGIN_ID}`].join("\n")
102
- : [`codex plugin marketplace add ${exports.PLUGIN_MARKETPLACE}`, `codex plugin add ${exports.PLUGIN_ID}`].join("\n");
116
+ /**
117
+ * Every plugin install, in the order to show them: Claude Code in one step,
118
+ * the two steps an older Claude Code needs, then Codex.
119
+ */
120
+ exports.PLUGIN_INSTALLS = ["claude-code", "claude-code-older", "codex"];
121
+ /** One plugin install, a command per line. */
122
+ function pluginLines(install) {
123
+ switch (install) {
124
+ case "claude-code":
125
+ return `/plugin install ${exports.PLUGIN_NAME} --marketplace ${exports.PLUGIN_MARKETPLACE}`;
126
+ case "claude-code-older":
127
+ return [`/plugin marketplace add ${exports.PLUGIN_MARKETPLACE}`, `/plugin install ${exports.PLUGIN_ID}`].join("\n");
128
+ case "codex":
129
+ return [`codex plugin marketplace add ${exports.PLUGIN_MARKETPLACE}`, `codex plugin add ${exports.PLUGIN_ID}`].join("\n");
130
+ }
103
131
  }
104
132
  exports.PLUGIN_WHERE = {
105
- "claude-code": "Claude Code, as a plugin (type these inside a session):",
106
- codex: "Codex, as a plugin (in a terminal):"
133
+ "claude-code": `Claude Code ${exports.CLAUDE_CODE_ONE_STEP} or newer, typed inside a session:`,
134
+ "claude-code-older": "An older Claude Code, two lines inside a session:",
135
+ codex: "Codex, in a terminal:"
107
136
  };
137
+ /**
138
+ * What the plugin brings and which network it starts on, said for the site at
139
+ * `network`: on mainnet, how to get the test network instead; on the test
140
+ * network, that the client has to be started for it.
141
+ */
142
+ function pluginNetworkNote(network) {
143
+ const what = "The plugin brings the server and its skill.";
144
+ const codex = `Codex's plugin is always mainnet; for the test network there, use its config.toml lines.`;
145
+ return network === exports.PLUGIN_NETWORK_DEFAULT
146
+ ? `${what} It starts on mainnet, where PAY is real money; for play money on the test network, start Claude Code with ${exports.PLUGIN_NETWORK_ENV}=testnet set in its shell (${exports.PLUGIN_NETWORK_ENV}=testnet claude). ${codex}`
147
+ : `${what} This site is the test network, where PAY has no value, and the plugin starts on mainnet: start Claude Code with ${exports.PLUGIN_NETWORK_ENV}=testnet (${exports.PLUGIN_NETWORK_ENV}=testnet claude) so it matches. ${codex}`;
148
+ }
108
149
  /**
109
150
  * The hosted server, for a client that cannot run a local one. It reads the
110
151
  * board and hands every action back to the site or the local server, so a
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * How an MCP client is told to connect to Openhands Network.
3
3
  *
4
- * One table, three renderings: the server's own `get_config_help`, the
5
- * `/agents` page, and the plugin's README all print these lines from here, so
4
+ * One table, several renderings: the server's own `get_config_help` and the
5
+ * hosted `where_to_act`, the install block (`/`, `/connect`, `/mcp`), the
6
+ * agent page and its `/mcp.md` twin, and the hosted server's description all
7
+ * print these lines from here, so
6
8
  * they cannot disagree — which they did, for a month, when the page said
7
9
  * `/path/to/openhands-mcp` and the server printed whatever path it happened
8
10
  * to be running from.
@@ -72,16 +74,43 @@ export declare function installLines(client: InstallClient, options: InstallOpti
72
74
  export declare const INSTALL_WHERE: Record<InstallClient, string>;
73
75
  /**
74
76
  * The plugin: the local server with its skill, from the ixo plugin
75
- * marketplace. It launches the same package (`npx -y` {@link MCP_SPEC}), so it
76
- * works exactly when the package does.
77
+ * marketplace, and the first way in for Claude Code and Codex. It launches the
78
+ * same package (`npx -y` {@link MCP_SPEC}), so it works exactly when the
79
+ * package does.
77
80
  */
78
81
  export declare const PLUGIN_MARKETPLACE = "ixoworld/ixo-plugins";
82
+ export declare const PLUGIN_NAME = "ixo-openhands";
79
83
  export declare const PLUGIN_ID = "ixo-openhands@ixo-plugins";
84
+ /**
85
+ * The network the plugin starts on, and the variable that changes it.
86
+ *
87
+ * The plugin's Claude Code `.mcp.json` sets `NEXT_PUBLIC_CHAIN_NETWORK` to
88
+ * `${OPENHANDS_NETWORK:-mainnet}`, which Claude Code expands from the
89
+ * environment it was started in. Codex's portable `mcp.json` has no such
90
+ * expansion and says `mainnet` outright, so in Codex the plugin is mainnet
91
+ * only and the test network is the config.toml lines.
92
+ */
93
+ export declare const PLUGIN_NETWORK_DEFAULT = "mainnet";
94
+ export declare const PLUGIN_NETWORK_ENV = "OPENHANDS_NETWORK";
95
+ /** The first Claude Code that installs from a marketplace in one step, with `--marketplace`. */
96
+ export declare const CLAUDE_CODE_ONE_STEP = "2.1.275";
80
97
  export declare const PLUGIN_CLIENTS: readonly ["claude-code", "codex"];
81
98
  export type PluginClient = (typeof PLUGIN_CLIENTS)[number];
82
- /** One client's plugin install, a command per line. */
83
- export declare function pluginLines(client: PluginClient): string;
84
- export declare const PLUGIN_WHERE: Record<PluginClient, string>;
99
+ /**
100
+ * Every plugin install, in the order to show them: Claude Code in one step,
101
+ * the two steps an older Claude Code needs, then Codex.
102
+ */
103
+ export declare const PLUGIN_INSTALLS: readonly ["claude-code", "claude-code-older", "codex"];
104
+ export type PluginInstall = (typeof PLUGIN_INSTALLS)[number];
105
+ /** One plugin install, a command per line. */
106
+ export declare function pluginLines(install: PluginInstall): string;
107
+ export declare const PLUGIN_WHERE: Record<PluginInstall, string>;
108
+ /**
109
+ * What the plugin brings and which network it starts on, said for the site at
110
+ * `network`: on mainnet, how to get the test network instead; on the test
111
+ * network, that the client has to be started for it.
112
+ */
113
+ export declare function pluginNetworkNote(network: string): string;
85
114
  /**
86
115
  * The hosted server, for a client that cannot run a local one. It reads the
87
116
  * board and hands every action back to the site or the local server, so a
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAEhD,iGAAiG;AACjG,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B,iCAAiC;AACjC,eAAO,MAAM,QAAQ,yBAAgC,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,wDAAwD;AACxD,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,MAA2D,CAAC;AAEvG,eAAO,MAAM,eAAe,uDAAwD,CAAC;AACrF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAgBD,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAqBnF;AAED,iEAAiE;AACjE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKvD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AACzD,eAAO,MAAM,SAAS,8BAA8B,CAAC;AAErD,eAAO,MAAM,cAAc,mCAAoC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAIxD;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAGrD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,uCAAwC,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAGrD,CAAC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAEhD,iGAAiG;AACjG,eAAO,MAAM,UAAU,sBAAsB,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,IAAI,CAAC;AAE3B,iCAAiC;AACjC,eAAO,MAAM,QAAQ,yBAAgC,CAAC;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,wDAAwD;AACxD,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,MAA2D,CAAC;AAEvG,eAAO,MAAM,eAAe,uDAAwD,CAAC;AACrF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAgBD,iDAAiD;AACjD,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAqBnF;AAED,iEAAiE;AACjE,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKvD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AACzD,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,SAAS,8BAA+B,CAAC;AAEtD;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAChD,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AAEtD,gGAAgG;AAChG,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAE9C,eAAO,MAAM,cAAc,mCAAoC,CAAC;AAChE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,eAAe,wDAAyD,CAAC;AACtF,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAS1D;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAItD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,uCAAwC,CAAC;AACpE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAGrD,CAAC"}
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * How an MCP client is told to connect to Openhands Network.
3
3
  *
4
- * One table, three renderings: the server's own `get_config_help`, the
5
- * `/agents` page, and the plugin's README all print these lines from here, so
4
+ * One table, several renderings: the server's own `get_config_help` and the
5
+ * hosted `where_to_act`, the install block (`/`, `/connect`, `/mcp`), the
6
+ * agent page and its `/mcp.md` twin, and the hosted server's description all
7
+ * print these lines from here, so
6
8
  * they cannot disagree — which they did, for a month, when the page said
7
9
  * `/path/to/openhands-mcp` and the server printed whatever path it happened
8
10
  * to be running from.
@@ -82,22 +84,60 @@ export const INSTALL_WHERE = {
82
84
  };
83
85
  /**
84
86
  * The plugin: the local server with its skill, from the ixo plugin
85
- * marketplace. It launches the same package (`npx -y` {@link MCP_SPEC}), so it
86
- * works exactly when the package does.
87
+ * marketplace, and the first way in for Claude Code and Codex. It launches the
88
+ * same package (`npx -y` {@link MCP_SPEC}), so it works exactly when the
89
+ * package does.
87
90
  */
88
91
  export const PLUGIN_MARKETPLACE = "ixoworld/ixo-plugins";
89
- export const PLUGIN_ID = "ixo-openhands@ixo-plugins";
92
+ export const PLUGIN_NAME = "ixo-openhands";
93
+ export const PLUGIN_ID = `${PLUGIN_NAME}@ixo-plugins`;
94
+ /**
95
+ * The network the plugin starts on, and the variable that changes it.
96
+ *
97
+ * The plugin's Claude Code `.mcp.json` sets `NEXT_PUBLIC_CHAIN_NETWORK` to
98
+ * `${OPENHANDS_NETWORK:-mainnet}`, which Claude Code expands from the
99
+ * environment it was started in. Codex's portable `mcp.json` has no such
100
+ * expansion and says `mainnet` outright, so in Codex the plugin is mainnet
101
+ * only and the test network is the config.toml lines.
102
+ */
103
+ export const PLUGIN_NETWORK_DEFAULT = "mainnet";
104
+ export const PLUGIN_NETWORK_ENV = "OPENHANDS_NETWORK";
105
+ /** The first Claude Code that installs from a marketplace in one step, with `--marketplace`. */
106
+ export const CLAUDE_CODE_ONE_STEP = "2.1.275";
90
107
  export const PLUGIN_CLIENTS = ["claude-code", "codex"];
91
- /** One client's plugin install, a command per line. */
92
- export function pluginLines(client) {
93
- return client === "claude-code"
94
- ? [`/plugin marketplace add ${PLUGIN_MARKETPLACE}`, `/plugin install ${PLUGIN_ID}`].join("\n")
95
- : [`codex plugin marketplace add ${PLUGIN_MARKETPLACE}`, `codex plugin add ${PLUGIN_ID}`].join("\n");
108
+ /**
109
+ * Every plugin install, in the order to show them: Claude Code in one step,
110
+ * the two steps an older Claude Code needs, then Codex.
111
+ */
112
+ export const PLUGIN_INSTALLS = ["claude-code", "claude-code-older", "codex"];
113
+ /** One plugin install, a command per line. */
114
+ export function pluginLines(install) {
115
+ switch (install) {
116
+ case "claude-code":
117
+ return `/plugin install ${PLUGIN_NAME} --marketplace ${PLUGIN_MARKETPLACE}`;
118
+ case "claude-code-older":
119
+ return [`/plugin marketplace add ${PLUGIN_MARKETPLACE}`, `/plugin install ${PLUGIN_ID}`].join("\n");
120
+ case "codex":
121
+ return [`codex plugin marketplace add ${PLUGIN_MARKETPLACE}`, `codex plugin add ${PLUGIN_ID}`].join("\n");
122
+ }
96
123
  }
97
124
  export const PLUGIN_WHERE = {
98
- "claude-code": "Claude Code, as a plugin (type these inside a session):",
99
- codex: "Codex, as a plugin (in a terminal):"
125
+ "claude-code": `Claude Code ${CLAUDE_CODE_ONE_STEP} or newer, typed inside a session:`,
126
+ "claude-code-older": "An older Claude Code, two lines inside a session:",
127
+ codex: "Codex, in a terminal:"
100
128
  };
129
+ /**
130
+ * What the plugin brings and which network it starts on, said for the site at
131
+ * `network`: on mainnet, how to get the test network instead; on the test
132
+ * network, that the client has to be started for it.
133
+ */
134
+ export function pluginNetworkNote(network) {
135
+ const what = "The plugin brings the server and its skill.";
136
+ const codex = `Codex's plugin is always mainnet; for the test network there, use its config.toml lines.`;
137
+ return network === PLUGIN_NETWORK_DEFAULT
138
+ ? `${what} It starts on mainnet, where PAY is real money; for play money on the test network, start Claude Code with ${PLUGIN_NETWORK_ENV}=testnet set in its shell (${PLUGIN_NETWORK_ENV}=testnet claude). ${codex}`
139
+ : `${what} This site is the test network, where PAY has no value, and the plugin starts on mainnet: start Claude Code with ${PLUGIN_NETWORK_ENV}=testnet (${PLUGIN_NETWORK_ENV}=testnet claude) so it matches. ${codex}`;
140
+ }
101
141
  /**
102
142
  * The hosted server, for a client that cannot run a local one. It reads the
103
143
  * board and hands every action back to the site or the local server, so a
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/data/install.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ixo/openhands-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "The Openhands protocol, board, campaign, chain, rubric, geo and UDID modules as one tree-shakeable package. Configuration is passed in (configure()) rather than read from the environment at import.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {