@log0u7/opencode-mesh 0.4.0 → 0.4.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.
- package/CHANGELOG.md +19 -0
- package/README.md +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/worktree.d.ts +0 -1
- package/dist/lib/worktree.d.ts.map +1 -1
- package/dist/lib/worktree.js +0 -6
- package/dist/lib/worktree.js.map +1 -1
- package/dist/options.d.ts +13 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +64 -0
- package/dist/options.js.map +1 -0
- package/dist/plugin-v2.js +1 -1
- package/dist/plugin-v2.js.map +1 -1
- package/dist/plugin.d.ts +4 -12
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +14 -62
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.1] - 2026-10-24
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- The package loads under OpenCode 2 again. The v1 implementation imports
|
|
15
|
+
`@opencode-ai/plugin`, which only v1 hosts resolve, and it sat in the static
|
|
16
|
+
import graph, so v2 hosts rejected the whole plugin at load time
|
|
17
|
+
(`Cannot find package '@opencode-ai/plugin'`). The v1 entry is now loaded
|
|
18
|
+
lazily from `server()`: a v2 host never calls `server()` and therefore never
|
|
19
|
+
resolves the v1-only packages. The named `MeshPlugin` export is type-only.
|
|
20
|
+
- The v1 worktree REST factory moved from `lib/worktree.ts` into `plugin.ts`
|
|
21
|
+
for the same reason: it imports `@opencode-ai/sdk/v2`, which must stay out
|
|
22
|
+
of the static import graph too. Shared option plumbing moved to
|
|
23
|
+
`options.ts`, imported by both adapters.
|
|
24
|
+
- `smoke:dist` now audits the static import graph of `dist/`: no
|
|
25
|
+
`@opencode-ai/*` import may be reachable statically, `plugin.js` must only
|
|
26
|
+
be reached through a dynamic `import()`, and every other bare import must
|
|
27
|
+
be `@opencode/plugin`, a Node builtin, or a declared runtime dependency.
|
|
28
|
+
|
|
10
29
|
## [0.4.0] - 2026-10-14
|
|
11
30
|
|
|
12
31
|
### Added
|
package/README.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -5,16 +5,22 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
|
+
type V1Plugin = typeof import("./plugin.js").MeshPlugin;
|
|
8
9
|
/**
|
|
9
10
|
* Dual entrypoint: v1 hosts call `server()`, v2 hosts call `setup()`
|
|
10
11
|
* (see https://opencode.ai/v2/docs/build/plugins/migrate-v1).
|
|
12
|
+
*
|
|
13
|
+
* The v1 implementation imports `@opencode-ai/plugin` and `@opencode-ai/sdk`,
|
|
14
|
+
* which only v1 hosts resolve. It must stay out of the static import graph or
|
|
15
|
+
* v2 hosts reject the whole package at load time, so `server()` loads it
|
|
16
|
+
* lazily; a v2 host never calls `server()` and therefore never resolves it.
|
|
11
17
|
*/
|
|
12
18
|
export declare const pluginModule: {
|
|
13
19
|
id: string;
|
|
14
20
|
setup: (context: import("@opencode/plugin/promise/plugin").Context) => Promise<import("@opencode/plugin/promise/plugin").Cleanup | void> | import("@opencode/plugin/promise/plugin").Cleanup | void;
|
|
15
|
-
server: import("@opencode-ai/plugin").
|
|
21
|
+
server(input: import("@opencode-ai/plugin").PluginInput, options?: import("@opencode-ai/plugin").PluginOptions | undefined): Promise<Awaited<ReturnType<V1Plugin>>>;
|
|
16
22
|
};
|
|
17
23
|
export default pluginModule;
|
|
18
24
|
export type { Lock, MailMessage, Peer } from "./types/peer.js";
|
|
19
|
-
export { MeshPlugin } from "./plugin.js";
|
|
25
|
+
export type { MeshPlugin } from "./plugin.js";
|
|
20
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,KAAK,QAAQ,GAAG,cAAc,aAAa,EAAE,UAAU,CAAC;AAExD;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY;;;iIAEsB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;CAIR,CAAC;eAE/D,YAAY;AAE3B,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE/D,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -6,15 +6,21 @@
|
|
|
6
6
|
* @packageDocumentation
|
|
7
7
|
*/
|
|
8
8
|
import { MeshV2 } from "./plugin-v2.js";
|
|
9
|
-
import { MeshPlugin } from "./plugin.js";
|
|
10
9
|
/**
|
|
11
10
|
* Dual entrypoint: v1 hosts call `server()`, v2 hosts call `setup()`
|
|
12
11
|
* (see https://opencode.ai/v2/docs/build/plugins/migrate-v1).
|
|
12
|
+
*
|
|
13
|
+
* The v1 implementation imports `@opencode-ai/plugin` and `@opencode-ai/sdk`,
|
|
14
|
+
* which only v1 hosts resolve. It must stay out of the static import graph or
|
|
15
|
+
* v2 hosts reject the whole package at load time, so `server()` loads it
|
|
16
|
+
* lazily; a v2 host never calls `server()` and therefore never resolves it.
|
|
13
17
|
*/
|
|
14
18
|
export const pluginModule = {
|
|
15
19
|
...MeshV2,
|
|
16
|
-
server
|
|
20
|
+
async server(...args) {
|
|
21
|
+
const { MeshPlugin } = await import("./plugin.js");
|
|
22
|
+
return MeshPlugin(...args);
|
|
23
|
+
},
|
|
17
24
|
};
|
|
18
25
|
export default pluginModule;
|
|
19
|
-
export { MeshPlugin } from "./plugin.js";
|
|
20
26
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAIxC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,GAAG,MAAM;IACT,KAAK,CAAC,MAAM,CAAC,GAAG,IAA0B;QACxC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACnD,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,CAAC;CAC0E,CAAC;AAE9E,eAAe,YAAY,CAAC"}
|
package/dist/lib/worktree.d.ts
CHANGED
|
@@ -36,7 +36,6 @@ export type WorktreeDomain = {
|
|
|
36
36
|
};
|
|
37
37
|
export declare const WORKTREE_TIMEOUT_MS = 15000;
|
|
38
38
|
export type WorktreeFactory = (baseUrl: string, directory: string, fetchOverride?: typeof fetch) => WorktreeClient;
|
|
39
|
-
export declare const defaultWorktreeFactory: WorktreeFactory;
|
|
40
39
|
export declare function extractClientFetch(pluginClient: unknown): typeof fetch | undefined;
|
|
41
40
|
export declare function createWorkerWorktree(client: WorktreeClient, input: {
|
|
42
41
|
name?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,KAAK,mBAAmB,GAAG;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAIpD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE;QACR,MAAM,CACJ,UAAU,EAAE;YAAE,mBAAmB,CAAC,EAAE;gBAAE,IAAI,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,EACvD,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;QACpB,MAAM,CACJ,UAAU,EAAE;YAAE,mBAAmB,EAAE;gBAAE,SAAS,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,EAC1D,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;KACrB,CAAC;CACH,CAAC;AAKF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,MAAM,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxF,CAAC;AAKF,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAW1C,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,OAAO,KAAK,KACzB,cAAc,CAAC;AAMpB,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,KAAK,GAAG,SAAS,CAUlF;AAcD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvB,OAAO,CAAC,YAAY,CAAC,CAiBvB;AAED,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,OAAO,CAAC,CAUlB;AAOD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAuBhG"}
|
package/dist/lib/worktree.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createOpencodeClient } from "@opencode-ai/sdk/v2";
|
|
2
1
|
// Worktree setup/teardown shells out to git; a hung git process must not pin a
|
|
3
2
|
// tool call forever. The timeout only reaches the 1.x REST client, which
|
|
4
3
|
// forwards the signal to fetch; the 2.x in-process domain ignores it.
|
|
@@ -6,11 +5,6 @@ export const WORKTREE_TIMEOUT_MS = 15_000;
|
|
|
6
5
|
function callOptions() {
|
|
7
6
|
return { signal: AbortSignal.timeout(WORKTREE_TIMEOUT_MS) };
|
|
8
7
|
}
|
|
9
|
-
export const defaultWorktreeFactory = (baseUrl, directory, fetchOverride) => createOpencodeClient({
|
|
10
|
-
baseUrl,
|
|
11
|
-
directory,
|
|
12
|
-
...(fetchOverride ? { fetch: fetchOverride } : {}),
|
|
13
|
-
});
|
|
14
8
|
// In `opencode run` (in-process server) the plugin's own v1 client carries the
|
|
15
9
|
// custom fetch that routes to the embedded server; reuse it so our v2 client
|
|
16
10
|
// reaches /experimental/worktree without a real TCP listener. The v1 client
|
package/dist/lib/worktree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { SpawnFn } from "./lib/spawn.js";
|
|
2
|
+
import type { WorktreeClient } from "./lib/worktree.js";
|
|
3
|
+
export type PluginOptions = {
|
|
4
|
+
dataDir?: string;
|
|
5
|
+
port?: number;
|
|
6
|
+
bind?: "loopback" | "lan";
|
|
7
|
+
advertise?: boolean;
|
|
8
|
+
worktreeClient?: WorktreeClient;
|
|
9
|
+
spawnFn?: SpawnFn;
|
|
10
|
+
};
|
|
11
|
+
export declare function parseOptions(raw: PluginOptions | undefined): PluginOptions;
|
|
12
|
+
export declare function defaultDataDir(): string;
|
|
13
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAKF,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAiD1E;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC"}
|
package/dist/options.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { homedir, tmpdir } from "node:os";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
// Validate the host-supplied options once, at the boundary. A typo'd port or
|
|
4
|
+
// bind used to surface as a late, cryptic failure (EADDRINUSE, a bind on the
|
|
5
|
+
// wrong interface, or a data dir at the filesystem root); fail clearly here.
|
|
6
|
+
export function parseOptions(raw) {
|
|
7
|
+
const options = {};
|
|
8
|
+
// `null` is treated as "no options" (the old code tolerated it); a non-object
|
|
9
|
+
// is a programming error. Unknown keys are ignored on purpose: a host may pass
|
|
10
|
+
// its own option bag, and forward-compat beats rejecting a typo'd `datadir`.
|
|
11
|
+
if (raw === undefined || raw === null) {
|
|
12
|
+
return options;
|
|
13
|
+
}
|
|
14
|
+
if (typeof raw !== "object") {
|
|
15
|
+
throw new Error("opencode-mesh: options must be an object");
|
|
16
|
+
}
|
|
17
|
+
if (raw.dataDir !== undefined) {
|
|
18
|
+
if (typeof raw.dataDir !== "string" || raw.dataDir.length === 0) {
|
|
19
|
+
throw new Error("opencode-mesh: options.dataDir must be a non-empty string");
|
|
20
|
+
}
|
|
21
|
+
options.dataDir = raw.dataDir;
|
|
22
|
+
}
|
|
23
|
+
if (raw.port !== undefined) {
|
|
24
|
+
if (typeof raw.port !== "number" ||
|
|
25
|
+
!Number.isInteger(raw.port) ||
|
|
26
|
+
raw.port < 0 ||
|
|
27
|
+
raw.port > 65535) {
|
|
28
|
+
throw new Error("opencode-mesh: options.port must be an integer between 0 and 65535");
|
|
29
|
+
}
|
|
30
|
+
options.port = raw.port;
|
|
31
|
+
}
|
|
32
|
+
if (raw.bind !== undefined) {
|
|
33
|
+
if (raw.bind !== "loopback" && raw.bind !== "lan") {
|
|
34
|
+
throw new Error('opencode-mesh: options.bind must be "loopback" or "lan"');
|
|
35
|
+
}
|
|
36
|
+
options.bind = raw.bind;
|
|
37
|
+
}
|
|
38
|
+
if (raw.advertise !== undefined) {
|
|
39
|
+
if (typeof raw.advertise !== "boolean") {
|
|
40
|
+
throw new Error("opencode-mesh: options.advertise must be a boolean");
|
|
41
|
+
}
|
|
42
|
+
options.advertise = raw.advertise;
|
|
43
|
+
}
|
|
44
|
+
// Opaque collaborators are passed through untouched: the plugin cannot
|
|
45
|
+
// validate a client or spawn function beyond its nominal type.
|
|
46
|
+
if (raw.worktreeClient !== undefined) {
|
|
47
|
+
options.worktreeClient = raw.worktreeClient;
|
|
48
|
+
}
|
|
49
|
+
if (raw.spawnFn !== undefined) {
|
|
50
|
+
options.spawnFn = raw.spawnFn;
|
|
51
|
+
}
|
|
52
|
+
return options;
|
|
53
|
+
}
|
|
54
|
+
export function defaultDataDir() {
|
|
55
|
+
const dataHome = process.env.XDG_DATA_HOME || join(homeDir(), ".local", "share");
|
|
56
|
+
return join(dataHome, "opencode-mesh");
|
|
57
|
+
}
|
|
58
|
+
// `os.homedir()` / `os.tmpdir()` replace the old empty-string fallback, which
|
|
59
|
+
// produced a path at the filesystem root (`/.local/share/...`) when HOME was
|
|
60
|
+
// unset or blank.
|
|
61
|
+
function homeDir() {
|
|
62
|
+
return process.env.HOME || homedir() || tmpdir();
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAkBjC,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,GAA8B;IACzD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,IACE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAC5B,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAC3B,GAAG,CAAC,IAAI,GAAG,CAAC;YACZ,GAAG,CAAC,IAAI,GAAG,KAAK,EAChB,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IACpC,CAAC;IACD,uEAAuE;IACvE,+DAA+D;IAC/D,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IAC9C,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAChC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjF,OAAO,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AACzC,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,kBAAkB;AAClB,SAAS,OAAO;IACd,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,MAAM,EAAE,CAAC;AACnD,CAAC"}
|
package/dist/plugin-v2.js
CHANGED
|
@@ -9,7 +9,7 @@ import { v2WorktreeDomainClient } from "./lib/worktree.js";
|
|
|
9
9
|
import { reconcileWorkers } from "./lib/workers.js";
|
|
10
10
|
import { startMeshServer } from "./lib/serve.js";
|
|
11
11
|
import { buildToolSpecs } from "./tools.js";
|
|
12
|
-
import { defaultDataDir, parseOptions } from "./
|
|
12
|
+
import { defaultDataDir, parseOptions } from "./options.js";
|
|
13
13
|
const DEFAULT_PORT = 4399;
|
|
14
14
|
// A worker spawned by mesh_spawn inherits this marker: it must not boot its own
|
|
15
15
|
// mesh server, advertise over mDNS or register mesh tools. A pool of N workers
|
package/dist/plugin-v2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-v2.js","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAwB,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAqB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAgB,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAsB,MAAM,
|
|
1
|
+
{"version":3,"file":"plugin-v2.js","sourceRoot":"","sources":["../src/plugin-v2.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { Plugin } from "@opencode-ai/plugin";
|
|
2
|
-
import { type
|
|
3
|
-
|
|
4
|
-
export type PluginOptions
|
|
5
|
-
|
|
6
|
-
port?: number;
|
|
7
|
-
bind?: "loopback" | "lan";
|
|
8
|
-
advertise?: boolean;
|
|
9
|
-
worktreeClient?: WorktreeClient;
|
|
10
|
-
spawnFn?: SpawnFn;
|
|
11
|
-
};
|
|
12
|
-
export declare function parseOptions(raw: PluginOptions | undefined): PluginOptions;
|
|
2
|
+
import { type WorktreeFactory } from "./lib/worktree.js";
|
|
3
|
+
export { defaultDataDir, parseOptions } from "./options.js";
|
|
4
|
+
export type { PluginOptions } from "./options.js";
|
|
5
|
+
export declare const defaultWorktreeFactory: WorktreeFactory;
|
|
13
6
|
export declare const MeshPlugin: Plugin;
|
|
14
|
-
export declare function defaultDataDir(): string;
|
|
15
7
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAWzD,OAAO,EAA2C,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKlG,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAOlD,eAAO,MAAM,sBAAsB,EAAE,eAKJ,CAAC;AAclC,eAAO,MAAM,UAAU,EAAE,MA8ExB,CAAC"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,68 +1,30 @@
|
|
|
1
1
|
import { homedir, tmpdir } from "node:os";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { tool } from "@opencode-ai/plugin";
|
|
4
|
+
import { createOpencodeClient } from "@opencode-ai/sdk/v2";
|
|
4
5
|
import { Bonjour } from "bonjour-service";
|
|
5
6
|
import { openMeshDb } from "./lib/db.js";
|
|
6
7
|
import { advertiseMesh, browseMesh } from "./lib/discovery.js";
|
|
7
8
|
import { upsertDiscoveredPeer } from "./lib/peers.js";
|
|
8
9
|
import { loadOrCreateIdentity } from "./lib/identity.js";
|
|
9
10
|
import { nodeSpawn, stopAllWorkers } from "./lib/spawn.js";
|
|
10
|
-
import {
|
|
11
|
+
import { defaultDataDir, parseOptions } from "./options.js";
|
|
12
|
+
import { extractClientFetch } from "./lib/worktree.js";
|
|
11
13
|
import { reconcileWorkers } from "./lib/workers.js";
|
|
12
14
|
import { startMeshServer } from "./lib/serve.js";
|
|
13
15
|
import { buildToolSpecs } from "./tools.js";
|
|
16
|
+
export { defaultDataDir, parseOptions } from "./options.js";
|
|
17
|
+
// The v1 worktree REST factory lives HERE, not in lib/worktree.ts: it is only
|
|
18
|
+
// reachable from v1 hosts, and it imports `@opencode-ai/sdk/v2`, which only
|
|
19
|
+
// hosts that bundle the v1-era SDK resolve. Keeping it in the lazily loaded v1
|
|
20
|
+
// adapter keeps the SDK out of the package's static import graph, which v2
|
|
21
|
+
// hosts reject at load time (see scripts/smoke-dist.mjs).
|
|
22
|
+
export const defaultWorktreeFactory = (baseUrl, directory, fetchOverride) => createOpencodeClient({
|
|
23
|
+
baseUrl,
|
|
24
|
+
directory,
|
|
25
|
+
...(fetchOverride ? { fetch: fetchOverride } : {}),
|
|
26
|
+
});
|
|
14
27
|
const DEFAULT_PORT = 4399;
|
|
15
|
-
// Validate the host-supplied options once, at the boundary. A typo'd port or
|
|
16
|
-
// bind used to surface as a late, cryptic failure (EADDRINUSE, a bind on the
|
|
17
|
-
// wrong interface, or a data dir at the filesystem root); fail clearly here.
|
|
18
|
-
export function parseOptions(raw) {
|
|
19
|
-
const options = {};
|
|
20
|
-
// `null` is treated as "no options" (the old code tolerated it); a non-object
|
|
21
|
-
// is a programming error. Unknown keys are ignored on purpose: a host may pass
|
|
22
|
-
// its own option bag, and forward-compat beats rejecting a typo'd `datadir`.
|
|
23
|
-
if (raw === undefined || raw === null) {
|
|
24
|
-
return options;
|
|
25
|
-
}
|
|
26
|
-
if (typeof raw !== "object") {
|
|
27
|
-
throw new Error("opencode-mesh: options must be an object");
|
|
28
|
-
}
|
|
29
|
-
if (raw.dataDir !== undefined) {
|
|
30
|
-
if (typeof raw.dataDir !== "string" || raw.dataDir.length === 0) {
|
|
31
|
-
throw new Error("opencode-mesh: options.dataDir must be a non-empty string");
|
|
32
|
-
}
|
|
33
|
-
options.dataDir = raw.dataDir;
|
|
34
|
-
}
|
|
35
|
-
if (raw.port !== undefined) {
|
|
36
|
-
if (typeof raw.port !== "number" ||
|
|
37
|
-
!Number.isInteger(raw.port) ||
|
|
38
|
-
raw.port < 0 ||
|
|
39
|
-
raw.port > 65535) {
|
|
40
|
-
throw new Error("opencode-mesh: options.port must be an integer between 0 and 65535");
|
|
41
|
-
}
|
|
42
|
-
options.port = raw.port;
|
|
43
|
-
}
|
|
44
|
-
if (raw.bind !== undefined) {
|
|
45
|
-
if (raw.bind !== "loopback" && raw.bind !== "lan") {
|
|
46
|
-
throw new Error('opencode-mesh: options.bind must be "loopback" or "lan"');
|
|
47
|
-
}
|
|
48
|
-
options.bind = raw.bind;
|
|
49
|
-
}
|
|
50
|
-
if (raw.advertise !== undefined) {
|
|
51
|
-
if (typeof raw.advertise !== "boolean") {
|
|
52
|
-
throw new Error("opencode-mesh: options.advertise must be a boolean");
|
|
53
|
-
}
|
|
54
|
-
options.advertise = raw.advertise;
|
|
55
|
-
}
|
|
56
|
-
// Opaque collaborators are passed through untouched: the plugin cannot
|
|
57
|
-
// validate a client or spawn function beyond its nominal type.
|
|
58
|
-
if (raw.worktreeClient !== undefined) {
|
|
59
|
-
options.worktreeClient = raw.worktreeClient;
|
|
60
|
-
}
|
|
61
|
-
if (raw.spawnFn !== undefined) {
|
|
62
|
-
options.spawnFn = raw.spawnFn;
|
|
63
|
-
}
|
|
64
|
-
return options;
|
|
65
|
-
}
|
|
66
28
|
// A worker spawned by mesh_spawn inherits this marker: it must not boot its own
|
|
67
29
|
// mesh server, advertise over mDNS or register mesh tools. A pool of N workers
|
|
68
30
|
// then costs N worktrees, not N mesh nodes.
|
|
@@ -152,14 +114,4 @@ function zodShape(spec) {
|
|
|
152
114
|
return [field.name, field.required ? described : described.optional()];
|
|
153
115
|
}));
|
|
154
116
|
}
|
|
155
|
-
export function defaultDataDir() {
|
|
156
|
-
const dataHome = process.env.XDG_DATA_HOME || join(homeDir(), ".local", "share");
|
|
157
|
-
return join(dataHome, "opencode-mesh");
|
|
158
|
-
}
|
|
159
|
-
// `os.homedir()` / `os.tmpdir()` replace the old empty-string fallback, which
|
|
160
|
-
// produced a path at the filesystem root (`/.local/share/...`) when HOME was
|
|
161
|
-
// unset or blank.
|
|
162
|
-
function homeDir() {
|
|
163
|
-
return process.env.HOME || homedir() || tmpdir();
|
|
164
|
-
}
|
|
165
117
|
//# sourceMappingURL=plugin.js.map
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAwB,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAqB,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAgB,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@log0u7/opencode-mesh",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Multi-session coordination for OpenCode: session coordination on one machine and a peer pool across LAN or Tailscale, with pairing, mailbox, and worktree locks.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|