@g3nomaly/mods 0.1.3 → 0.1.4
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 +8 -0
- package/dist/cli/commands/add.d.ts +9 -4
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +13 -5
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/remove.d.ts +3 -2
- package/dist/cli/commands/remove.d.ts.map +1 -1
- package/dist/cli/commands/remove.js +6 -2
- package/dist/cli/commands/remove.js.map +1 -1
- package/dist/cli/commands/update.d.ts +2 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +5 -1
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.js +7 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/reload.d.ts +11 -0
- package/dist/cli/reload.d.ts.map +1 -0
- package/dist/cli/reload.js +40 -0
- package/dist/cli/reload.js.map +1 -0
- package/dist/cli/viewer.js +1 -1
- package/dist/cli/viewer.js.map +1 -1
- package/dist/relay/protocol.d.ts +11 -1
- package/dist/relay/protocol.d.ts.map +1 -1
- package/dist/relay/protocol.js +12 -1
- package/dist/relay/protocol.js.map +1 -1
- package/dist/relay/relay.d.ts +6 -4
- package/dist/relay/relay.d.ts.map +1 -1
- package/dist/relay/relay.js +18 -9
- package/dist/relay/relay.js.map +1 -1
- package/dist/relay/reload.d.ts +30 -0
- package/dist/relay/reload.d.ts.map +1 -0
- package/dist/relay/reload.js +57 -0
- package/dist/relay/reload.js.map +1 -0
- package/dist/vscode/g3n-mods-viewer.vsix +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,8 +15,11 @@ bunx @g3nomaly/mods init --user # creates ~/.claude/mods.json and
|
|
|
15
15
|
bunx @g3nomaly/mods ls --user # lists the mods you can install
|
|
16
16
|
bunx @g3nomaly/mods add context-bar --user # installs one mod
|
|
17
17
|
bunx @g3nomaly/mods add g3n-mods --user # or every mod from the g3n-mods source
|
|
18
|
+
bunx @g3nomaly/mods add --all --user # or every mod of every source; add -s <source> for one
|
|
18
19
|
```
|
|
19
20
|
|
|
21
|
+
`add --all` also brings installed mods up to date: it writes a mod again only when its source changed.
|
|
22
|
+
|
|
20
23
|
Mods are copied to `~/.claude/skills/<mod>/`, where Claude Code finds them in every project, and recorded in `~/.claude/mods.json`. Start a new Claude Code session, then click the **Mods** button in the editor title bar. Sessions that were already open before `init` do not show in the viewer until you start them again.
|
|
21
24
|
|
|
22
25
|
To install into one project instead, leave out `--user` and run the commands from the project's git root. Mods then go to `.claude/skills/<mod>/` and `.claude/mods.json`. Claude Code skips them until the workspace is trusted, and the VS Code extension does not ask: run `claude` once in a terminal in the project, accept the trust dialog, then run `/reload-plugins`.
|
|
@@ -56,12 +59,15 @@ If another tool already set a process wrapper, `init` leaves it and says so. Run
|
|
|
56
59
|
|
|
57
60
|
```sh
|
|
58
61
|
bunx @g3nomaly/mods update # every installed mod
|
|
62
|
+
bunx @g3nomaly/mods add --all # every installed mod, and every mod the sources added since
|
|
59
63
|
bunx @g3nomaly/mods update focus-mode # one mod
|
|
60
64
|
bunx @g3nomaly/mods update --dry-run # shows what would change
|
|
61
65
|
bunx @g3nomaly/mods remove mini-game
|
|
62
66
|
bunx @g3nomaly/mods ls --installed
|
|
63
67
|
```
|
|
64
68
|
|
|
69
|
+
`add`, `update` and `remove` reload the mods in every running session that loads them, so a change takes effect without reloading the VS Code window. After editing an installed mod by hand, run `/reload-plugins` in the chat.
|
|
70
|
+
|
|
65
71
|
When you have changed an installed file, `update` asks whether to restore the source version, fork the mod under a new name that updates leave alone, or skip it and ask again next time. Pass `-f` to restore without asking, for example in a script.
|
|
66
72
|
|
|
67
73
|
## Other sources
|
|
@@ -89,3 +95,5 @@ bun run mods -- ls # the CLI from source
|
|
|
89
95
|
bun run typecheck
|
|
90
96
|
bun run build
|
|
91
97
|
```
|
|
98
|
+
|
|
99
|
+
Inside this repository the `g3n-mods` source is read from `packages/g3n-mods` through the workspace link, so `bunx @g3nomaly/mods add --all -s g3n-mods --user` installs or updates every mod from your working copy and reloads the running sessions.
|
|
@@ -5,18 +5,23 @@ import type { ProjectDeps, Scope } from "../project";
|
|
|
5
5
|
*
|
|
6
6
|
* @property scope - Scope to install into; `project` when absent.
|
|
7
7
|
* @property source - Read only this registered source.
|
|
8
|
+
* @property all - Install every mod the sources offer, or `source` alone offers; installed ones are updated when their source changed.
|
|
8
9
|
*/
|
|
9
10
|
export interface AddOptions extends InstallOptions {
|
|
10
11
|
scope?: Scope;
|
|
11
12
|
source?: string;
|
|
13
|
+
all?: boolean;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* @brief Installs mods, or every mod of a source, from the registered sources into
|
|
15
|
-
* the scope's `.claude/skills/`, records them in `mods.json
|
|
16
|
-
* viewer
|
|
17
|
-
*
|
|
17
|
+
* the scope's `.claude/skills/`, records them in `mods.json`, sets up the
|
|
18
|
+
* viewer and has the running sessions that load the scope reload their
|
|
19
|
+
* plugins. A name more than one source offers is picked as `<name>@<source>`;
|
|
20
|
+
* with no names the user picks from what the sources provide, unless `all`
|
|
21
|
+
* takes every mod. A mod already installed is written again only when its
|
|
22
|
+
* source changed.
|
|
18
23
|
*
|
|
19
|
-
* @param names - Mods to install, e.g. `auth-guard` or `auth-guard@my-source`; empty to pick interactively
|
|
24
|
+
* @param names - Mods to install, e.g. `auth-guard` or `auth-guard@my-source`; empty to pick interactively, or with `all`.
|
|
20
25
|
* @param options - Scope, source filter and install options.
|
|
21
26
|
* @param deps - Overrides for the project lookup, used by tests.
|
|
22
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIrD;;;;;;GAMG;AACH,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,KAAK,CAAC,EAAG,KAAK,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAK,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,UAAe,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcjH"}
|
package/dist/cli/commands/add.js
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
// packages/mods/src/cli/commands/add.ts
|
|
2
2
|
import { addFromSources } from "@g3nomaly/core/cli";
|
|
3
|
+
import { offers } from "@g3nomaly/core/installer";
|
|
3
4
|
import { MOD_CONTEXT, installedMods, openModProject, openModRegistry } from "../project";
|
|
5
|
+
import { reloadRunningSessions } from "../reload";
|
|
4
6
|
import { setUpViewer } from "../viewer";
|
|
5
7
|
/**
|
|
6
8
|
* @brief Installs mods, or every mod of a source, from the registered sources into
|
|
7
|
-
* the scope's `.claude/skills/`, records them in `mods.json
|
|
8
|
-
* viewer
|
|
9
|
-
*
|
|
9
|
+
* the scope's `.claude/skills/`, records them in `mods.json`, sets up the
|
|
10
|
+
* viewer and has the running sessions that load the scope reload their
|
|
11
|
+
* plugins. A name more than one source offers is picked as `<name>@<source>`;
|
|
12
|
+
* with no names the user picks from what the sources provide, unless `all`
|
|
13
|
+
* takes every mod. A mod already installed is written again only when its
|
|
14
|
+
* source changed.
|
|
10
15
|
*
|
|
11
|
-
* @param names - Mods to install, e.g. `auth-guard` or `auth-guard@my-source`; empty to pick interactively
|
|
16
|
+
* @param names - Mods to install, e.g. `auth-guard` or `auth-guard@my-source`; empty to pick interactively, or with `all`.
|
|
12
17
|
* @param options - Scope, source filter and install options.
|
|
13
18
|
* @param deps - Overrides for the project lookup, used by tests.
|
|
14
19
|
*/
|
|
@@ -16,7 +21,8 @@ export async function addCommand(names, options = {}, deps = {}) {
|
|
|
16
21
|
const project = openModProject(options.scope ?? "project", deps);
|
|
17
22
|
const registry = await openModRegistry(project, options.source);
|
|
18
23
|
try {
|
|
19
|
-
|
|
24
|
+
const wanted = options.all === true ? offers(registry).map((offer) => `${offer.key}@${offer.entry.origin.source}`) : names;
|
|
25
|
+
await addFromSources([project.target], wanted, registry, options, MOD_CONTEXT);
|
|
20
26
|
}
|
|
21
27
|
finally {
|
|
22
28
|
registry.dispose();
|
|
@@ -24,5 +30,7 @@ export async function addCommand(names, options = {}, deps = {}) {
|
|
|
24
30
|
if (Object.keys(installedMods(project)).length > 0) {
|
|
25
31
|
await setUpViewer(project);
|
|
26
32
|
}
|
|
33
|
+
if (options.dryRun !== true)
|
|
34
|
+
await reloadRunningSessions(project);
|
|
27
35
|
}
|
|
28
36
|
//# sourceMappingURL=add.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEzF,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../src/cli/commands/add.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAexC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAe,EAAE,OAAO,GAAe,EAAE,EAAE,IAAI,GAAgB,EAAE;IAChG,MAAM,OAAO,GAAI,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC3H,MAAM,cAAc,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACjF,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;QAAE,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -10,8 +10,9 @@ export interface RemoveOptions extends InstallOptions {
|
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* @brief Removes installed mods, or every mod of a source, with the type
|
|
13
|
-
* declarations Claude Code wrote beside them,
|
|
14
|
-
*
|
|
13
|
+
* declarations Claude Code wrote beside them, drops them from `mods.json`
|
|
14
|
+
* and has the running sessions that load the scope reload their plugins,
|
|
15
|
+
* which unloads the mods. With no names the user picks from what is installed.
|
|
15
16
|
*
|
|
16
17
|
* @param names - Mods to remove; empty to pick from what is installed.
|
|
17
18
|
* @param options - Scope and install options.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,oBAAoB,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,oBAAoB,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;GAIG;AACH,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAoBD;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvH"}
|
|
@@ -4,6 +4,7 @@ import path from "node:path";
|
|
|
4
4
|
import { removeFromTargets } from "@g3nomaly/core/cli";
|
|
5
5
|
import { createInstallerIO, pruneEmptyDirs } from "@g3nomaly/core/installer";
|
|
6
6
|
import { MOD_CONTEXT, openModProject } from "../project";
|
|
7
|
+
import { reloadRunningSessions } from "../reload";
|
|
7
8
|
/** Folder Claude Code writes the mod API's declarations into when it loads a mod; never recorded in `mods.json`. */
|
|
8
9
|
const ENGINE_TYPES_DIR = path.join(".claude-plugin", "types");
|
|
9
10
|
/**
|
|
@@ -23,8 +24,9 @@ function removeEngineTypes(target, removed) {
|
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
26
|
* @brief Removes installed mods, or every mod of a source, with the type
|
|
26
|
-
* declarations Claude Code wrote beside them,
|
|
27
|
-
*
|
|
27
|
+
* declarations Claude Code wrote beside them, drops them from `mods.json`
|
|
28
|
+
* and has the running sessions that load the scope reload their plugins,
|
|
29
|
+
* which unloads the mods. With no names the user picks from what is installed.
|
|
28
30
|
*
|
|
29
31
|
* @param names - Mods to remove; empty to pick from what is installed.
|
|
30
32
|
* @param options - Scope and install options.
|
|
@@ -33,5 +35,7 @@ function removeEngineTypes(target, removed) {
|
|
|
33
35
|
export async function removeCommand(names, options = {}, deps = {}) {
|
|
34
36
|
const project = openModProject(options.scope ?? "project", deps);
|
|
35
37
|
await removeFromTargets([project.target], names, options, MOD_CONTEXT, removeEngineTypes);
|
|
38
|
+
if (options.dryRun !== true)
|
|
39
|
+
await reloadRunningSessions(project);
|
|
36
40
|
}
|
|
37
41
|
//# sourceMappingURL=remove.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../../src/cli/commands/remove.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAWlD,oHAAoH;AACpH,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,MAAsB,EAAE,OAAiB;IAClE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QACrE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAe,EAAE,OAAO,GAAkB,EAAE,EAAE,IAAI,GAAgB,EAAE;IACtG,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,iBAAiB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAC1F,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;QAAE,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -11,7 +11,8 @@ export interface UpdateOptions extends InstallOptions {
|
|
|
11
11
|
/**
|
|
12
12
|
* @brief Re-installs installed mods from the source each one was installed from,
|
|
13
13
|
* at that source's current revision; with no names, everything installed.
|
|
14
|
-
* Files the user changed since install are kept unless overwritten.
|
|
14
|
+
* Files the user changed since install are kept unless overwritten. The
|
|
15
|
+
* running sessions that load the scope then reload their plugins.
|
|
15
16
|
*
|
|
16
17
|
* @param names - Mods to update; empty for everything installed.
|
|
17
18
|
* @param options - Scope and install options.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGrD;;;;GAIG;AACH,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvH"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
// packages/mods/src/cli/commands/update.ts
|
|
2
2
|
import { updateFromSources } from "@g3nomaly/core/cli";
|
|
3
3
|
import { MOD_CONTEXT, openModProject, openModRegistry } from "../project";
|
|
4
|
+
import { reloadRunningSessions } from "../reload";
|
|
4
5
|
/**
|
|
5
6
|
* @brief Re-installs installed mods from the source each one was installed from,
|
|
6
7
|
* at that source's current revision; with no names, everything installed.
|
|
7
|
-
* Files the user changed since install are kept unless overwritten.
|
|
8
|
+
* Files the user changed since install are kept unless overwritten. The
|
|
9
|
+
* running sessions that load the scope then reload their plugins.
|
|
8
10
|
*
|
|
9
11
|
* @param names - Mods to update; empty for everything installed.
|
|
10
12
|
* @param options - Scope and install options.
|
|
@@ -13,5 +15,7 @@ import { MOD_CONTEXT, openModProject, openModRegistry } from "../project";
|
|
|
13
15
|
export async function updateCommand(names, options = {}, deps = {}) {
|
|
14
16
|
const project = openModProject(options.scope ?? "project", deps);
|
|
15
17
|
await updateFromSources([project.target], names, () => openModRegistry(project), options, MOD_CONTEXT);
|
|
18
|
+
if (options.dryRun !== true)
|
|
19
|
+
await reloadRunningSessions(project);
|
|
16
20
|
}
|
|
17
21
|
//# sourceMappingURL=update.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAWlD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAe,EAAE,OAAO,GAAkB,EAAE,EAAE,IAAI,GAAgB,EAAE;IACtG,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,iBAAiB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACvG,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;QAAE,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// packages/mods/src/cli/index.ts
|
|
3
3
|
import { Command } from "commander";
|
|
4
|
+
import { lineError } from "@g3nomaly/core/cli";
|
|
4
5
|
import { readPackageMeta, warnIfOutdated } from "@g3nomaly/core/utils";
|
|
5
6
|
import { ViewerLocationSchema } from "../viewer";
|
|
6
7
|
import { addCommand } from "./commands/add";
|
|
@@ -46,9 +47,14 @@ program
|
|
|
46
47
|
.description("Install mods, or every mod of a source")
|
|
47
48
|
.option("-u, --user", "Work on ~/.claude/ for every project")
|
|
48
49
|
.option("-s, --source <name>", "Only read this source")
|
|
50
|
+
.option("-a, --all", "Install or update every mod of the sources, or of --source")
|
|
49
51
|
.option("-f, --force", "Overwrite locally modified files")
|
|
50
52
|
.action(async (mods, opts) => {
|
|
51
|
-
|
|
53
|
+
if (opts.all === true && mods.length > 0) {
|
|
54
|
+
console.error(lineError("Pass mod names or --all, not both."));
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
await addCommand(mods, { scope: scopeOf(opts), source: opts.source, all: opts.all, force: opts.force });
|
|
52
58
|
});
|
|
53
59
|
program
|
|
54
60
|
.command("update [mods...]")
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,iCAAiC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD;;;;;GAKG;AACH,SAAS,OAAO,CAAC,IAAwB;IACvC,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,kDAAkD,CAAC,CAAC;AAEnE,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4EAA4E,CAAC;KACzF,MAAM,CAAC,YAAY,EAAE,sCAAsC,CAAC;KAC5D,MAAM,CAAC,oBAAoB,EAAE,iEAAiE,CAAC;KAC/F,MAAM,CAAC,mBAAmB,EAAE,wDAAwD,CAAC;KACrF,MAAM,CAAC,KAAK,EAAE,IAAqE,EAAE,EAAE;IACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC7F,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,IAAI,CAAC;KACb,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,YAAY,EAAE,sCAAsC,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;KACxD,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,IAA8E,EAAE,EAAE;IAC/F,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7G,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,YAAY,EAAE,sCAAsC,CAAC;KAC5D,MAAM,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;KACtD,MAAM,CAAC,aAAa,EAAE,kCAAkC,CAAC;KACzD,MAAM,CAAC,KAAK,EAAE,IAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ModProject } from "./project";
|
|
2
|
+
/**
|
|
3
|
+
* @brief Asks the running Claude Code sessions that load the scope's mods to
|
|
4
|
+
* reload their plugins, so an add, remove or update takes effect without
|
|
5
|
+
* reloading the VS Code window. Prints what each session said; a session that
|
|
6
|
+
* fails is a warning, never an error.
|
|
7
|
+
*
|
|
8
|
+
* @param project - Scope whose mods changed.
|
|
9
|
+
*/
|
|
10
|
+
export declare function reloadRunningSessions(project: ModProject): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=reload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload.d.ts","sourceRoot":"","sources":["../../src/cli/reload.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAc5C;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAW9E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// packages/mods/src/cli/reload.ts
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { c, lineSuccess, lineWarn } from "@g3nomaly/core/cli";
|
|
4
|
+
import { reloadSessions } from "../relay/reload";
|
|
5
|
+
import { listSessions } from "../relay/sessions";
|
|
6
|
+
/**
|
|
7
|
+
* @brief Whether a session loads the mods of a scope: every session for `user`,
|
|
8
|
+
* those running in the project's folder or below it for `project`.
|
|
9
|
+
*
|
|
10
|
+
* @param session - A running session.
|
|
11
|
+
* @param project - Scope whose mods changed.
|
|
12
|
+
*/
|
|
13
|
+
function usesScope(session, project) {
|
|
14
|
+
if (project.scope === "user")
|
|
15
|
+
return true;
|
|
16
|
+
return session.cwd === project.projectRoot || session.cwd.startsWith(project.projectRoot + path.sep);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @brief Asks the running Claude Code sessions that load the scope's mods to
|
|
20
|
+
* reload their plugins, so an add, remove or update takes effect without
|
|
21
|
+
* reloading the VS Code window. Prints what each session said; a session that
|
|
22
|
+
* fails is a warning, never an error.
|
|
23
|
+
*
|
|
24
|
+
* @param project - Scope whose mods changed.
|
|
25
|
+
*/
|
|
26
|
+
export async function reloadRunningSessions(project) {
|
|
27
|
+
const sessions = listSessions().filter((session) => usesScope(session, project));
|
|
28
|
+
if (sessions.length === 0)
|
|
29
|
+
return;
|
|
30
|
+
for (const outcome of await reloadSessions(sessions)) {
|
|
31
|
+
const name = path.basename(outcome.session.cwd);
|
|
32
|
+
if (outcome.error === undefined) {
|
|
33
|
+
console.log(lineSuccess(`Reloaded mods in the running session in ${c.file(name)}${outcome.plugins === undefined ? "" : ` (${outcome.plugins} plugins)`}`));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log(lineWarn(`Could not reload the session in ${name}: ${outcome.error}. Run /reload-plugins there.`));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=reload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload.js","sourceRoot":"","sources":["../../src/cli/reload.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIjD;;;;;;GAMG;AACH,SAAS,SAAS,CAAC,OAAoB,EAAE,OAAmB;IAC1D,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACvG,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAmB;IAC7D,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACjF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,KAAK,MAAM,OAAO,IAAI,MAAM,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,2CAA2C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC;QAC7J,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,mCAAmC,IAAI,KAAK,OAAO,CAAC,KAAK,8BAA8B,CAAC,CAAC,CAAC;QACjH,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/cli/viewer.js
CHANGED
|
@@ -86,6 +86,6 @@ export async function setUpViewer(project, setup = {}) {
|
|
|
86
86
|
if (!isSetUp)
|
|
87
87
|
console.log(lineInfo(`Run ${c.cmd("g3n-mods init")} once to set up the viewer the mods are drawn in.`));
|
|
88
88
|
else
|
|
89
|
-
console.log(lineInfo("Mods show in the viewer of
|
|
89
|
+
console.log(lineInfo("Mods show in the viewer of every session that runs through the relay."));
|
|
90
90
|
}
|
|
91
91
|
//# sourceMappingURL=viewer.js.map
|
package/dist/cli/viewer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../src/cli/viewer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../src/cli/viewer.ts"],"names":[],"mappings":"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"}
|
package/dist/relay/protocol.d.ts
CHANGED
|
@@ -5,7 +5,11 @@ export declare const VIEWER_SURFACE = "vscode";
|
|
|
5
5
|
export declare const VIEWER_CLIENT_ID = "g3n-viewer";
|
|
6
6
|
/** Prefix of the request ids the relay gives the control requests it sends for a viewer. */
|
|
7
7
|
export declare const RELAY_REQUEST_PREFIX = "g3nv:";
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* The requests a relay client may send: the engine's UI requests a viewer
|
|
10
|
+
* draws with, and `reload_plugins`, which the CLI sends after it changed the
|
|
11
|
+
* installed mods. The relay refuses every other subtype.
|
|
12
|
+
*/
|
|
9
13
|
export declare const ViewerRequestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
10
14
|
subtype: z.ZodLiteral<"ui_render">;
|
|
11
15
|
component: z.ZodString;
|
|
@@ -46,8 +50,12 @@ export declare const ViewerRequestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
46
50
|
}, z.core.$strip>, z.ZodObject<{
|
|
47
51
|
subtype: z.ZodLiteral<"ui_close">;
|
|
48
52
|
id: z.ZodString;
|
|
53
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
54
|
+
subtype: z.ZodLiteral<"reload_plugins">;
|
|
49
55
|
}, z.core.$strip>], "subtype">;
|
|
50
56
|
export type ViewerRequest = z.infer<typeof ViewerRequestSchema>;
|
|
57
|
+
/** Whether a request draws on the session, so the client making it must be attached as the viewer's surface. */
|
|
58
|
+
export declare function isUiRequest(request: ViewerRequest): boolean;
|
|
51
59
|
/** One line a viewer sends the relay: a UI request it numbers itself. */
|
|
52
60
|
export declare const ViewerMessageSchema: z.ZodObject<{
|
|
53
61
|
id: z.ZodString;
|
|
@@ -91,6 +99,8 @@ export declare const ViewerMessageSchema: z.ZodObject<{
|
|
|
91
99
|
}, z.core.$strip>, z.ZodObject<{
|
|
92
100
|
subtype: z.ZodLiteral<"ui_close">;
|
|
93
101
|
id: z.ZodString;
|
|
102
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
103
|
+
subtype: z.ZodLiteral<"reload_plugins">;
|
|
94
104
|
}, z.core.$strip>], "subtype">;
|
|
95
105
|
}, z.core.$strip>;
|
|
96
106
|
export type ViewerMessage = z.infer<typeof ViewerMessageSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/relay/protocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,4EAA4E;AAC5E,eAAO,MAAM,cAAc,WAAa,CAAC;AACzC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAE7C,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/relay/protocol.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,4EAA4E;AAC5E,eAAO,MAAM,cAAc,WAAa,CAAC;AACzC,eAAO,MAAM,gBAAgB,eAAe,CAAC;AAE7C,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAqC9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,gHAAgH;AAChH,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAE3D;AAED,yEAAyE;AACzE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,yCAAyC;AACzC,MAAM,MAAM,YAAY;AACtB,yEAAyE;AACvE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE;AAC3C,gEAAgE;GAC9D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AACtE,gGAAgG;GAC9F;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAEpD,mFAAmF;AACnF,eAAO,MAAM,cAAc,aAAyC,CAAC;AAErE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAchF"}
|
package/dist/relay/protocol.js
CHANGED
|
@@ -5,7 +5,11 @@ export const VIEWER_SURFACE = "vscode";
|
|
|
5
5
|
export const VIEWER_CLIENT_ID = "g3n-viewer";
|
|
6
6
|
/** Prefix of the request ids the relay gives the control requests it sends for a viewer. */
|
|
7
7
|
export const RELAY_REQUEST_PREFIX = "g3nv:";
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* The requests a relay client may send: the engine's UI requests a viewer
|
|
10
|
+
* draws with, and `reload_plugins`, which the CLI sends after it changed the
|
|
11
|
+
* installed mods. The relay refuses every other subtype.
|
|
12
|
+
*/
|
|
9
13
|
export const ViewerRequestSchema = z.discriminatedUnion("subtype", [
|
|
10
14
|
z.object({
|
|
11
15
|
subtype: z.literal("ui_render"),
|
|
@@ -42,7 +46,12 @@ export const ViewerRequestSchema = z.discriminatedUnion("subtype", [
|
|
|
42
46
|
}),
|
|
43
47
|
z.object({ subtype: z.literal("ui_panes") }),
|
|
44
48
|
z.object({ subtype: z.literal("ui_close"), id: z.string().min(1) }),
|
|
49
|
+
z.object({ subtype: z.literal("reload_plugins") }),
|
|
45
50
|
]);
|
|
51
|
+
/** Whether a request draws on the session, so the client making it must be attached as the viewer's surface. */
|
|
52
|
+
export function isUiRequest(request) {
|
|
53
|
+
return request.subtype !== "reload_plugins";
|
|
54
|
+
}
|
|
46
55
|
/** One line a viewer sends the relay: a UI request it numbers itself. */
|
|
47
56
|
export const ViewerMessageSchema = z.object({
|
|
48
57
|
id: z.string().min(1).max(64),
|
|
@@ -65,6 +74,8 @@ export function toControlRequest(request) {
|
|
|
65
74
|
case "ui_panes":
|
|
66
75
|
case "ui_close":
|
|
67
76
|
return { ...request, client_id: VIEWER_CLIENT_ID };
|
|
77
|
+
case "reload_plugins":
|
|
78
|
+
return { ...request };
|
|
68
79
|
}
|
|
69
80
|
}
|
|
70
81
|
//# sourceMappingURL=protocol.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/relay/protocol.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAK,QAAQ,CAAC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAE7C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/relay/protocol.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAK,QAAQ,CAAC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAE7C,4FAA4F;AAC5F,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAE5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,EAAE;IACjE,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QACnC,SAAS,EAAI,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,KAAK,EAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9C,QAAQ,EAAK,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC9G,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC9B,MAAM,EAAG,CAAC,CAAC,MAAM,EAAE;QACnB,MAAM,EAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACzB,GAAG,EAAM,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,IAAI,EAAK,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;KACzC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAClC,MAAM,EAAO,CAAC,CAAC,MAAM,EAAE;QACvB,MAAM,EAAO,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QAC7B,IAAI,EAAS,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,KAAK,EAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;QAClC,GAAG,EAAU,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,SAAS,EAAI,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QACnC,MAAM,EAAO,CAAC,CAAC,MAAM,EAAE;QACvB,MAAM,EAAO,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QAC7B,KAAK,EAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;QAClC,GAAG,EAAU,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,SAAS,EAAI,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5C,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;CACnD,CAAC,CAAC;AAIH,gHAAgH;AAChH,MAAM,UAAU,WAAW,CAAC,OAAsB;IAChD,OAAO,OAAO,CAAC,OAAO,KAAK,gBAAgB,CAAC;AAC9C,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAO,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,OAAO,EAAE,mBAAmB;CAC7B,CAAC,CAAC;AAaH,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACrD,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,WAAW;YACd,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAC9E,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;QACjD,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;QACrD,KAAK,gBAAgB;YACnB,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
package/dist/relay/relay.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Runs Claude Code as a child and stands on its stdio pipe: everything the
|
|
3
3
|
* extension writes reaches Claude and everything Claude writes reaches the
|
|
4
|
-
* extension, line for line and unchanged. Beside that it serves
|
|
5
|
-
* local socket, attaches to the session as the `vscode`
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* extension, line for line and unchanged. Beside that it serves clients on a
|
|
5
|
+
* local socket: viewers, which it attaches to the session as the `vscode`
|
|
6
|
+
* surface from their first UI request on, and the CLI, which asks for a
|
|
7
|
+
* plugin reload after it changed the installed mods. It sends their requests
|
|
8
|
+
* as control requests of its own, and keeps the answers and the pane pushes
|
|
9
|
+
* they need away from the extension.
|
|
8
10
|
* A launch that is no stream-json session (`--version`, a subcommand) runs
|
|
9
11
|
* straight through, with no socket.
|
|
10
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay/relay.ts"],"names":[],"mappings":"AAsDA
|
|
1
|
+
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay/relay.ts"],"names":[],"mappings":"AAsDA;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAmJ3F"}
|
package/dist/relay/relay.js
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
import fs from "node:fs";
|
|
3
3
|
import net from "node:net";
|
|
4
4
|
import { LineSplitter } from "./lines";
|
|
5
|
-
import { RELAYED_PUSHES, RELAY_REQUEST_PREFIX, VIEWER_CLIENT_ID, VIEWER_SURFACE, ViewerMessageSchema, toControlRequest, } from "./protocol";
|
|
6
|
-
import { removeSession, socketPath, writeSessionInfo } from "./sessions";
|
|
5
|
+
import { RELAYED_PUSHES, RELAY_REQUEST_PREFIX, VIEWER_CLIENT_ID, VIEWER_SURFACE, ViewerMessageSchema, isUiRequest, toControlRequest, } from "./protocol";
|
|
6
|
+
import { removeSession, sessionsDir, socketPath, writeSessionInfo } from "./sessions";
|
|
7
7
|
/** Writes one relay message to a viewer as a JSON line; a closed socket is skipped. */
|
|
8
8
|
function send(socket, message) {
|
|
9
9
|
if (!socket.destroyed)
|
|
@@ -43,10 +43,12 @@ async function passThrough(claudePath, args) {
|
|
|
43
43
|
/**
|
|
44
44
|
* Runs Claude Code as a child and stands on its stdio pipe: everything the
|
|
45
45
|
* extension writes reaches Claude and everything Claude writes reaches the
|
|
46
|
-
* extension, line for line and unchanged. Beside that it serves
|
|
47
|
-
* local socket, attaches to the session as the `vscode`
|
|
48
|
-
*
|
|
49
|
-
*
|
|
46
|
+
* extension, line for line and unchanged. Beside that it serves clients on a
|
|
47
|
+
* local socket: viewers, which it attaches to the session as the `vscode`
|
|
48
|
+
* surface from their first UI request on, and the CLI, which asks for a
|
|
49
|
+
* plugin reload after it changed the installed mods. It sends their requests
|
|
50
|
+
* as control requests of its own, and keeps the answers and the pane pushes
|
|
51
|
+
* they need away from the extension.
|
|
50
52
|
* A launch that is no stream-json session (`--version`, a subcommand) runs
|
|
51
53
|
* straight through, with no socket.
|
|
52
54
|
*
|
|
@@ -60,6 +62,8 @@ export async function runRelay(claudePath, args) {
|
|
|
60
62
|
const child = Bun.spawn([claudePath, ...args], { stdin: "pipe", stdout: "pipe", stderr: "inherit", env: process.env });
|
|
61
63
|
const info = { pid: process.pid, socket: socketPath(process.pid), cwd: process.cwd(), startedAt: Date.now() };
|
|
62
64
|
const viewers = new Set();
|
|
65
|
+
/** The clients that made a UI request, for which the session keeps the `vscode` surface attached. */
|
|
66
|
+
const attached = new Set();
|
|
63
67
|
const pending = new Map();
|
|
64
68
|
const queued = [];
|
|
65
69
|
let isReady = false;
|
|
@@ -93,13 +97,13 @@ export async function runRelay(claudePath, args) {
|
|
|
93
97
|
for (const viewer of viewers)
|
|
94
98
|
send(viewer, { type: "session", session: info });
|
|
95
99
|
};
|
|
100
|
+
// The socket's folder may not exist yet: no viewer has opened and no relay has run on this machine.
|
|
101
|
+
fs.mkdirSync(sessionsDir(), { recursive: true, mode: 0o700 });
|
|
96
102
|
fs.rmSync(info.socket, { force: true });
|
|
97
103
|
const server = net.createServer((socket) => {
|
|
98
104
|
const connection = ++nextConnection;
|
|
99
105
|
const lines = new LineSplitter();
|
|
100
106
|
viewers.add(socket);
|
|
101
|
-
if (viewers.size === 1)
|
|
102
|
-
inject(`${RELAY_REQUEST_PREFIX}attach`, { subtype: "ui_attach", surface: VIEWER_SURFACE, client_id: VIEWER_CLIENT_ID });
|
|
103
107
|
send(socket, { type: "session", session: info });
|
|
104
108
|
socket.on("data", (chunk) => {
|
|
105
109
|
for (const line of lines.push(chunk)) {
|
|
@@ -111,6 +115,11 @@ export async function runRelay(claudePath, args) {
|
|
|
111
115
|
send(socket, { type: "response", id, error: `not a viewer request: ${parsed.error.issues[0]?.message ?? "invalid"}` });
|
|
112
116
|
continue;
|
|
113
117
|
}
|
|
118
|
+
if (isUiRequest(parsed.data.request) && !attached.has(socket)) {
|
|
119
|
+
attached.add(socket);
|
|
120
|
+
if (attached.size === 1)
|
|
121
|
+
inject(`${RELAY_REQUEST_PREFIX}attach`, { subtype: "ui_attach", surface: VIEWER_SURFACE, client_id: VIEWER_CLIENT_ID });
|
|
122
|
+
}
|
|
114
123
|
const requestId = `${RELAY_REQUEST_PREFIX}${connection}:${parsed.data.id}`;
|
|
115
124
|
pending.set(requestId, { socket, id: parsed.data.id });
|
|
116
125
|
inject(requestId, toControlRequest(parsed.data.request));
|
|
@@ -122,7 +131,7 @@ export async function runRelay(claudePath, args) {
|
|
|
122
131
|
for (const [requestId, request] of pending)
|
|
123
132
|
if (request.socket === socket)
|
|
124
133
|
pending.delete(requestId);
|
|
125
|
-
if (
|
|
134
|
+
if (attached.delete(socket) && attached.size === 0)
|
|
126
135
|
inject(`${RELAY_REQUEST_PREFIX}detach`, { subtype: "ui_detach", client_id: VIEWER_CLIENT_ID });
|
|
127
136
|
};
|
|
128
137
|
socket.on("close", drop);
|
package/dist/relay/relay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/relay/relay.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,cAAc,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EACtE,mBAAmB,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../../src/relay/relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SessionInfo } from "./sessions";
|
|
2
|
+
/**
|
|
3
|
+
* How one session took a reload.
|
|
4
|
+
*
|
|
5
|
+
* @property session - The session asked.
|
|
6
|
+
* @property plugins - How many plugins the session runs after the reload; absent when it failed.
|
|
7
|
+
* @property error - Why the reload failed; absent when it worked.
|
|
8
|
+
*/
|
|
9
|
+
export interface ReloadOutcome {
|
|
10
|
+
session: SessionInfo;
|
|
11
|
+
plugins?: number;
|
|
12
|
+
error?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* @brief Asks one session's relay to reload its plugins from disk and waits for the answer.
|
|
16
|
+
*
|
|
17
|
+
* @param session - Session whose relay to ask.
|
|
18
|
+
* @param timeoutMs - How long to wait for the answer.
|
|
19
|
+
* @returns How the session took it.
|
|
20
|
+
*/
|
|
21
|
+
export declare function reloadSession(session: SessionInfo, timeoutMs?: number): Promise<ReloadOutcome>;
|
|
22
|
+
/**
|
|
23
|
+
* @brief Asks every given session to reload its plugins, all at once, so mods
|
|
24
|
+
* added, removed or updated on disk take effect without a restart.
|
|
25
|
+
*
|
|
26
|
+
* @param sessions - Sessions to ask, from `listSessions`.
|
|
27
|
+
* @returns One outcome per session, in the order given.
|
|
28
|
+
*/
|
|
29
|
+
export declare function reloadSessions(sessions: readonly SessionInfo[]): Promise<ReloadOutcome[]>;
|
|
30
|
+
//# sourceMappingURL=reload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload.d.ts","sourceRoot":"","sources":["../../src/relay/reload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAG,WAAW,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAI,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,SAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAgCzG;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAEzF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// packages/mods/src/relay/reload.ts
|
|
2
|
+
import net from "node:net";
|
|
3
|
+
import { LineSplitter } from "./lines";
|
|
4
|
+
/** How long a session gets to answer a reload, in milliseconds. */
|
|
5
|
+
const RELOAD_TIMEOUT_MS = 15_000;
|
|
6
|
+
/**
|
|
7
|
+
* @brief Asks one session's relay to reload its plugins from disk and waits for the answer.
|
|
8
|
+
*
|
|
9
|
+
* @param session - Session whose relay to ask.
|
|
10
|
+
* @param timeoutMs - How long to wait for the answer.
|
|
11
|
+
* @returns How the session took it.
|
|
12
|
+
*/
|
|
13
|
+
export function reloadSession(session, timeoutMs = RELOAD_TIMEOUT_MS) {
|
|
14
|
+
return new Promise((resolve) => {
|
|
15
|
+
const socket = net.createConnection(session.socket);
|
|
16
|
+
const lines = new LineSplitter();
|
|
17
|
+
let isSent = false;
|
|
18
|
+
const finish = (outcome) => {
|
|
19
|
+
clearTimeout(timer);
|
|
20
|
+
socket.destroy();
|
|
21
|
+
resolve({ session, ...outcome });
|
|
22
|
+
};
|
|
23
|
+
const timer = setTimeout(() => finish({ error: "the session did not answer in time" }), timeoutMs);
|
|
24
|
+
socket.on("error", (error) => finish({ error: error.message }));
|
|
25
|
+
socket.on("data", (chunk) => {
|
|
26
|
+
for (const line of lines.push(chunk)) {
|
|
27
|
+
let message;
|
|
28
|
+
try {
|
|
29
|
+
message = JSON.parse(line);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (message.type === "session" && !isSent) {
|
|
35
|
+
isSent = true;
|
|
36
|
+
const request = { id: "reload", request: { subtype: "reload_plugins" } };
|
|
37
|
+
socket.write(JSON.stringify(request) + "\n");
|
|
38
|
+
}
|
|
39
|
+
else if (message.type === "response" && message.id === "reload") {
|
|
40
|
+
const plugins = message.response?.plugins;
|
|
41
|
+
finish(message.error !== undefined ? { error: message.error } : { plugins: plugins?.length });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @brief Asks every given session to reload its plugins, all at once, so mods
|
|
49
|
+
* added, removed or updated on disk take effect without a restart.
|
|
50
|
+
*
|
|
51
|
+
* @param sessions - Sessions to ask, from `listSessions`.
|
|
52
|
+
* @returns One outcome per session, in the order given.
|
|
53
|
+
*/
|
|
54
|
+
export function reloadSessions(sessions) {
|
|
55
|
+
return Promise.all(sessions.map((session) => reloadSession(session)));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=reload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reload.js","sourceRoot":"","sources":["../../src/relay/reload.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAIvC,mEAAmE;AACnE,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAejC;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,OAAoB,EAAE,SAAS,GAAG,iBAAiB;IAC/E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,MAAM,GAAG,CAAC,OAAuC,EAAQ,EAAE;YAC/D,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QAEnG,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,OAAqB,CAAC;gBAC1B,IAAI,CAAC;oBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC;oBAC1C,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM,OAAO,GAAkB,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC;oBACxF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC/C,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;oBAClE,MAAM,OAAO,GAAI,OAAO,CAAC,QAAgD,EAAE,OAAO,CAAC;oBACnF,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;gBAChG,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgC;IAC7D,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC"}
|
|
Binary file
|