@agfpd/iapeer 0.4.107 → 0.4.108

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/cli/index.ts +13 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agfpd/iapeer",
3
- "version": "0.4.107",
3
+ "version": "0.4.108",
4
4
  "description": "Run Claude Code and Codex CLI as local background agents that message each other, wake on demand, and share one memory.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "agfpd",
package/src/cli/index.ts CHANGED
@@ -1102,8 +1102,19 @@ async function connectChannelVerb(
1102
1102
  ): Promise<number> {
1103
1103
  // A channel whose runtime package was never installed would provision a plist whose
1104
1104
  // launcher does not resolve — provisionPeer refuses, but late and obscurely. Say it here.
1105
- const { isRuntimeInstalled } = await import('../init/index.ts')
1106
- if (!isRuntimeInstalled(runtime as Runtime, env)) {
1105
+ //
1106
+ // NB: `isRuntimeInstalled` is the AGENTIC probe and is WRONG for this question — it ends
1107
+ // at `Bun.which(runtime)`, while an infra launcher is named `<runtime>-runtime`
1108
+ // (INFRA_RUNTIME_DEFAULT_BIN). It reported a fully installed voicetalk as missing and
1109
+ // blocked the very path this verb exists for (caught live on the first real run).
1110
+ // The installed-ness of a runtime PACKAGE is its self-deployed manifest — the contract's
1111
+ // own install stamp ("on self-install the package writes ~/.iapeer/runtimes/<rt>/runtime.json;
1112
+ // the core reads it", docs/13). Deliberately NOT a PATH probe for the launcher: that would
1113
+ // read host state a temp-rooted run cannot control, and whether the launcher RESOLVES is
1114
+ // already checked downstream by provisionPeer, which refuses with its own clear error
1115
+ // rather than writing a plist that crash-loops.
1116
+ const { runtimeManifestPath } = await import('../runtime/index.ts')
1117
+ if (!existsSync(runtimeManifestPath(runtime as Runtime, { env }))) {
1107
1118
  errOut(`connect ${runtime} ${peer}: runtime "${runtime}" is not installed on this host — \`iapeer install-runtime ${runtime}\` first\n`)
1108
1119
  return 1
1109
1120
  }