@g3nomaly/mods 0.1.4 → 0.1.6
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 +7 -5
- 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 +7 -3
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/viewer.d.ts.map +1 -1
- package/dist/cli/viewer.js +23 -7
- package/dist/cli/viewer.js.map +1 -1
- package/dist/registry/readModDir.d.ts +2 -1
- package/dist/registry/readModDir.d.ts.map +1 -1
- package/dist/registry/readModDir.js +4 -1
- package/dist/registry/readModDir.js.map +1 -1
- package/dist/viewer/viewerExtension.d.ts +7 -2
- package/dist/viewer/viewerExtension.d.ts.map +1 -1
- package/dist/viewer/viewerExtension.js +25 -2
- package/dist/viewer/viewerExtension.js.map +1 -1
- package/dist/vscode/g3n-mods-viewer.vsix +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,16 +30,16 @@ To install into one project instead, leave out `--user` and run the commands fro
|
|
|
30
30
|
|---|---|---|
|
|
31
31
|
| `context-bar` | One bar of context-window use split by source, with the total and where compaction starts | `/context-bar` |
|
|
32
32
|
| `tool-timeline` | Each tool call with its duration. A denied call is struck through, next to the call that replaced it | `/tool-timeline` |
|
|
33
|
-
| `delete-guard` |
|
|
33
|
+
| `delete-guard` | Off by default; switched on, it holds `rm -rf` and other permanent deletes on a card until you press Delete or Cancel | `/delete-guard on \| off` |
|
|
34
34
|
| `agents-panel` | The agents in `.claude/agents` with their model and a run button | `/agents-panel` |
|
|
35
|
-
| `focus-mode` | A timed focus block
|
|
35
|
+
| `focus-mode` | A timed focus block in which Claude asks you nothing: no questions, no permission prompts | `/focus-mode [minutes] \| end` |
|
|
36
36
|
| `hide-personal-data` | Masks names, emails and other personal data in replies. Hover to show them | `/hide-personal-data on \| off` |
|
|
37
37
|
| `mini-game` | Minesweeper, to play while Claude works | `/mini-game` |
|
|
38
|
-
| `custom-crab-agents` |
|
|
38
|
+
| `custom-crab-agents` | Adds each subagent to the agents panel as a crab with a hat; installs `agents-panel` with it | `/agents-panel` |
|
|
39
39
|
| `handoff` | Writes a handoff, clears the session, and gives the handoff to your next prompt | `/handoff-new [what the next session is for]` |
|
|
40
40
|
| `you-should-know` | A card under long replies with their key point. It makes one small Haiku call per long reply | none |
|
|
41
41
|
|
|
42
|
-
Each pane opens with its command. For `context-bar`, `tool-timeline
|
|
42
|
+
Each pane opens with its command. For `context-bar`, `tool-timeline` and `agents-panel`, running the command again closes the pane.
|
|
43
43
|
|
|
44
44
|
## The viewer
|
|
45
45
|
|
|
@@ -49,7 +49,9 @@ Each pane opens with its command. For `context-bar`, `tool-timeline`, `agents-pa
|
|
|
49
49
|
2. **The viewer extension.** It installs *g3n Mods Viewer* with `code --install-extension`. Its button sits next to Split Editor and opens the viewer as an editor tab. To open it in a window of its own instead, turn on `g3nMods.viewer.openInNewWindow`.
|
|
50
50
|
3. **The chat view.** In `.vscode/settings.json` it sets `claudeCode.preferredLocation` to `panel` (pass `--location sidebar` to keep the side bar) and `claudeCode.useTerminal` to `false`.
|
|
51
51
|
|
|
52
|
-
The viewer shows every pane that is open in the session it is showing. Pick another session from the list at the top. Turn a mod's pane on or off with its command in the Claude Code chat, or close it with **×** in the viewer.
|
|
52
|
+
The viewer shows every pane that is open in the session it is showing. Pick another session from the list at the top. Turn a mod's pane on or off with its command in the Claude Code chat, or close it with **×** in the viewer. **⧉** opens a pane in an editor tab of its own. A mod can ask for that itself by giving the pane an id that starts with `tab-`, as `custom-crab-agents` does for a subagent's chat; closing that tab closes the pane.
|
|
53
|
+
|
|
54
|
+
`add` and `update` bring the relay and the viewer up to the installed `@g3nomaly/mods` version when they changed. After the viewer is updated, run **Developer: Reload Window** in VS Code.
|
|
53
55
|
|
|
54
56
|
If another tool already set a process wrapper, `init` leaves it and says so. Run `init --replace-wrapper` to use the relay instead. If the `code` command is not found, `init` prints the path of the `.vsix` to install by hand.
|
|
55
57
|
|
|
@@ -12,7 +12,8 @@ export interface UpdateOptions extends InstallOptions {
|
|
|
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
14
|
* Files the user changed since install are kept unless overwritten. The
|
|
15
|
-
*
|
|
15
|
+
* relay and the viewer extension are brought up to this package's version,
|
|
16
|
+
* and the running sessions that load the scope then reload their plugins.
|
|
16
17
|
*
|
|
17
18
|
* @param names - Mods to update; empty for everything installed.
|
|
18
19
|
* @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;AAIrD;;;;GAIG;AACH,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvH"}
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
import { updateFromSources } from "@g3nomaly/core/cli";
|
|
3
3
|
import { MOD_CONTEXT, openModProject, openModRegistry } from "../project";
|
|
4
4
|
import { reloadRunningSessions } from "../reload";
|
|
5
|
+
import { setUpViewer } from "../viewer";
|
|
5
6
|
/**
|
|
6
7
|
* @brief Re-installs installed mods from the source each one was installed from,
|
|
7
8
|
* at that source's current revision; with no names, everything installed.
|
|
8
9
|
* Files the user changed since install are kept unless overwritten. The
|
|
9
|
-
*
|
|
10
|
+
* relay and the viewer extension are brought up to this package's version,
|
|
11
|
+
* and the running sessions that load the scope then reload their plugins.
|
|
10
12
|
*
|
|
11
13
|
* @param names - Mods to update; empty for everything installed.
|
|
12
14
|
* @param options - Scope and install options.
|
|
@@ -15,7 +17,9 @@ import { reloadRunningSessions } from "../reload";
|
|
|
15
17
|
export async function updateCommand(names, options = {}, deps = {}) {
|
|
16
18
|
const project = openModProject(options.scope ?? "project", deps);
|
|
17
19
|
await updateFromSources([project.target], names, () => openModRegistry(project), options, MOD_CONTEXT);
|
|
18
|
-
if (options.dryRun
|
|
19
|
-
|
|
20
|
+
if (options.dryRun === true)
|
|
21
|
+
return;
|
|
22
|
+
await setUpViewer(project);
|
|
23
|
+
await reloadRunningSessions(project);
|
|
20
24
|
}
|
|
21
25
|
//# 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;AAE1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,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;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAWxC;;;;;;;;;;GAUG;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,OAAO;IACpC,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
|
package/dist/cli/viewer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../../src/cli/viewer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,EAAQ,cAAc,CAAC;IAChC,gIAAgI;IAChI,OAAO,CAAC,EAAS,OAAO,CAAC;IACzB,oDAAoD;IACpD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../../src/cli/viewer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,QAAQ,CAAC,EAAQ,cAAc,CAAC;IAChC,gIAAgI;IAChI,OAAO,CAAC,EAAS,OAAO,CAAC;IACzB,oDAAoD;IACpD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAgED;;;;;;;;;GASG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B7F"}
|
package/dist/cli/viewer.js
CHANGED
|
@@ -36,12 +36,20 @@ async function setUpRelay(replaceWrapper) {
|
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
/**
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Installs the viewer extension that draws the mods in an editor tab.
|
|
41
|
+
*
|
|
42
|
+
* @param onlyWhenChanged - Install only when this package's viewer differs from the one last installed, as `add` and `update` do.
|
|
43
|
+
*/
|
|
44
|
+
function setUpViewerExtension(onlyWhenChanged = false) {
|
|
45
|
+
const viewer = installViewer(undefined, onlyWhenChanged);
|
|
42
46
|
switch (viewer.kind) {
|
|
43
47
|
case "installed":
|
|
44
|
-
console.log(lineSuccess(
|
|
48
|
+
console.log(lineSuccess(onlyWhenChanged
|
|
49
|
+
? `Updated the mods viewer. Run ${c.cmd("Developer: Reload Window")} in VS Code to use it.`
|
|
50
|
+
: `Installed the mods viewer. Click its button in the editor title bar, or run ${c.cmd("g3n Mods: Open Mods Viewer")}.`));
|
|
51
|
+
break;
|
|
52
|
+
case "current":
|
|
45
53
|
break;
|
|
46
54
|
case "no-cli":
|
|
47
55
|
console.log(lineWarn(`VS Code's ${c.cmd("code")} command was not found. Install the viewer by hand: Extensions → … → Install from VSIX → ${c.file(viewer.vsix)}`));
|
|
@@ -83,9 +91,17 @@ export async function setUpViewer(project, setup = {}) {
|
|
|
83
91
|
}
|
|
84
92
|
const settings = machineSettingsPath();
|
|
85
93
|
const isSetUp = fs.existsSync(relayBinaryPath()) && fs.existsSync(settings) && fs.readFileSync(settings, "utf8").includes(relayBinaryPath());
|
|
86
|
-
if (!isSetUp)
|
|
94
|
+
if (!isSetUp) {
|
|
87
95
|
console.log(lineInfo(`Run ${c.cmd("g3n-mods init")} once to set up the viewer the mods are drawn in.`));
|
|
88
|
-
|
|
89
|
-
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// Set up once already: bring the relay and the viewer up to this package's version.
|
|
99
|
+
const relay = await installRelay();
|
|
100
|
+
if (relay.kind === "built")
|
|
101
|
+
console.log(lineSuccess(`Rebuilt the relay ${c.dim(`(${c.file(relay.binary)})`)}; new sessions use it.`));
|
|
102
|
+
else if (relay.kind === "failed")
|
|
103
|
+
console.log(lineError(`Could not rebuild the relay at ${c.file(relay.binary)}: ${relay.reason}`));
|
|
104
|
+
setUpViewerExtension(true);
|
|
105
|
+
console.log(lineInfo("Mods show in the viewer of every session that runs through the relay."));
|
|
90
106
|
}
|
|
91
107
|
//# 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":"AAAA,kCAAkC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EACL,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EACzE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,iBAAiB,GACrF,MAAM,WAAW,CAAC;AAcnB,oFAAoF;AACpF,SAAS,oBAAoB;IAC3B,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,sGAAsG,kBAAkB,YAAY,CAAC,CAAC,CAAC;IAC9J,CAAC;SAAM,IAAI,eAAe,CAAC,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,8BAA8B,SAAS,CAAC,OAAO,eAAe,kBAAkB,kCAAkC,CAAC,CAAC,CAAC;IAC5I,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,KAAK,UAAU,UAAU,CAAC,cAAuB;IAC/C,MAAM,KAAK,GAAG,MAAM,YAAY,EAAE,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChG,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9G,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IAC3E,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,gDAAgD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/G,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,8CAA8C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,iCAAiC,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACjL,MAAM;QACR,KAAK,YAAY;YACf,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yEAAyE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvI,MAAM;QACR,KAAK,WAAW;YACd,MAAM;IACV,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../src/cli/viewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,8 @@ export declare function isModDir(dir: string): boolean;
|
|
|
8
8
|
* @brief Reads one mod folder into its registry entry. The key is the folder name,
|
|
9
9
|
* which must equal the `name` in its `plugin.json`, the name Claude Code
|
|
10
10
|
* loads it under; every installable file becomes a `files[]` entry at
|
|
11
|
-
* `<key>/<file>`.
|
|
11
|
+
* `<key>/<file>`. The mods its `plugin.json` lists under `dependencies`
|
|
12
|
+
* become `registryDependencies`, so installing it installs them too.
|
|
12
13
|
*
|
|
13
14
|
* @param modDir - Absolute mod folder inside a source checkout
|
|
14
15
|
* @param context - Origin to record, the source as group, and the version to fall back on
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readModDir.d.ts","sourceRoot":"","sources":["../../src/registry/readModDir.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAwB,OAAO,EAAE,MAAM,SAAS,CAAC;AAE7D,eAAO,MAAM,eAAe,QAA6C,CAAC;AAC1E,eAAO,MAAM,cAAc,QAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"readModDir.d.ts","sourceRoot":"","sources":["../../src/registry/readModDir.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAwB,OAAO,EAAE,MAAM,SAAS,CAAC;AAE7D,eAAO,MAAM,eAAe,QAA6C,CAAC;AAC1E,eAAO,MAAM,cAAc,QAAoC,CAAC;AAuBhE,0GAA0G;AAC1G,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE7C;AAgBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA+BjG"}
|
|
@@ -13,6 +13,7 @@ const PluginManifestSchema = z.object({
|
|
|
13
13
|
name: z.string().regex(/^[a-z0-9][a-z0-9-]*$/, "use lowercase letters, digits and `-`"),
|
|
14
14
|
version: z.string().min(1).optional(),
|
|
15
15
|
description: z.string().optional(),
|
|
16
|
+
dependencies: z.array(z.string().min(1)).optional(),
|
|
16
17
|
});
|
|
17
18
|
/** JavaScript in any form; a mod holding one is refused. */
|
|
18
19
|
const JAVASCRIPT_FILE = /\.(?:js|mjs|cjs|jsx)$/i;
|
|
@@ -45,7 +46,8 @@ function fileType(relativeToMod) {
|
|
|
45
46
|
* @brief Reads one mod folder into its registry entry. The key is the folder name,
|
|
46
47
|
* which must equal the `name` in its `plugin.json`, the name Claude Code
|
|
47
48
|
* loads it under; every installable file becomes a `files[]` entry at
|
|
48
|
-
* `<key>/<file>`.
|
|
49
|
+
* `<key>/<file>`. The mods its `plugin.json` lists under `dependencies`
|
|
50
|
+
* become `registryDependencies`, so installing it installs them too.
|
|
49
51
|
*
|
|
50
52
|
* @param modDir - Absolute mod folder inside a source checkout
|
|
51
53
|
* @param context - Origin to record, the source as group, and the version to fall back on
|
|
@@ -79,6 +81,7 @@ export async function readModDir(modDir, context) {
|
|
|
79
81
|
group: context.group,
|
|
80
82
|
origin: context.origin,
|
|
81
83
|
files,
|
|
84
|
+
...(manifest.dependencies === undefined ? {} : { registryDependencies: manifest.dependencies }),
|
|
82
85
|
}];
|
|
83
86
|
}
|
|
84
87
|
//# sourceMappingURL=readModDir.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readModDir.js","sourceRoot":"","sources":["../../src/registry/readModDir.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAIrD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAEhE,sHAAsH;AACtH,MAAM,YAAY,GAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;AACtE,MAAM,aAAa,GAAG,mDAAmD,CAAC;AAE1E,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAS,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,uCAAuC,CAAC;IAC9F,OAAO,EAAM,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"readModDir.js","sourceRoot":"","sources":["../../src/registry/readModDir.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export declare function viewerPackagePath(): string;
|
|
|
6
6
|
export type ViewerInstallResult = {
|
|
7
7
|
kind: "installed";
|
|
8
8
|
cli: string;
|
|
9
|
+
} | {
|
|
10
|
+
kind: "current";
|
|
9
11
|
} | {
|
|
10
12
|
kind: "no-package";
|
|
11
13
|
vsix: string;
|
|
@@ -19,9 +21,12 @@ export type ViewerInstallResult = {
|
|
|
19
21
|
};
|
|
20
22
|
/**
|
|
21
23
|
* Installs the viewer extension into VS Code with `code --install-extension`,
|
|
22
|
-
* replacing an older copy.
|
|
24
|
+
* replacing an older copy. A stamp file holds the hash of the package last
|
|
25
|
+
* installed, so a newer `@g3nomaly/mods` brings its viewer along on `add` and
|
|
26
|
+
* `update`, not only on `init`.
|
|
23
27
|
*
|
|
24
28
|
* @param home - Home directory to look for a VS Code server under; the current user's by default
|
|
29
|
+
* @param onlyWhenChanged - Skip the install when this package was installed already and the extension is still there
|
|
25
30
|
*/
|
|
26
|
-
export declare function installViewer(home?: string): ViewerInstallResult;
|
|
31
|
+
export declare function installViewer(home?: string, onlyWhenChanged?: boolean): ViewerInstallResult;
|
|
27
32
|
//# sourceMappingURL=viewerExtension.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewerExtension.d.ts","sourceRoot":"","sources":["../../src/viewer/viewerExtension.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"viewerExtension.d.ts","sourceRoot":"","sources":["../../src/viewer/viewerExtension.ts"],"names":[],"mappings":"AAOA,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAE9D,wFAAwF;AACxF,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAkBD,gCAAgC;AAChC,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBrD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,MAAqB,EAAE,eAAe,UAAQ,GAAG,mBAAmB,CAcvG"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// packages/mods/src/viewer/viewerExtension.ts
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
2
3
|
import fs from "node:fs";
|
|
3
4
|
import os from "node:os";
|
|
4
5
|
import path from "node:path";
|
|
@@ -9,6 +10,19 @@ export const VIEWER_EXTENSION_ID = "g3nomaly.g3n-mods-viewer";
|
|
|
9
10
|
export function viewerPackagePath() {
|
|
10
11
|
return path.join(findPackageRoot(import.meta.dir), "dist", "vscode", "g3n-mods-viewer.vsix");
|
|
11
12
|
}
|
|
13
|
+
/** Extension folders of the VS Code family, relative to the home directory: local, WSL/SSH server, Insiders, Cursor. */
|
|
14
|
+
const EXTENSION_ROOTS = [".vscode/extensions", ".vscode-server/extensions", ".vscode-insiders/extensions", ".cursor/extensions"];
|
|
15
|
+
/** Where the hash of the last viewer package installed is kept, beside the relay. */
|
|
16
|
+
function stampPath(home) {
|
|
17
|
+
return path.join(home, ".claude", "g3n-mods", "viewer.vsix.sha256");
|
|
18
|
+
}
|
|
19
|
+
/** Whether any editor of the VS Code family has the viewer extension installed. */
|
|
20
|
+
function isInstalled(home) {
|
|
21
|
+
return EXTENSION_ROOTS.some((root) => {
|
|
22
|
+
const dir = path.join(home, root);
|
|
23
|
+
return fs.existsSync(dir) && fs.readdirSync(dir).some((name) => name.startsWith(`${VIEWER_EXTENSION_ID}-`));
|
|
24
|
+
});
|
|
25
|
+
}
|
|
12
26
|
/** VS Code's `code` command: on the PATH, else the one a VS Code server ships for its own terminals. */
|
|
13
27
|
function findCodeCli(home) {
|
|
14
28
|
for (const dir of (process.env.PATH ?? "").split(path.delimiter)) {
|
|
@@ -29,20 +43,29 @@ function findCodeCli(home) {
|
|
|
29
43
|
}
|
|
30
44
|
/**
|
|
31
45
|
* Installs the viewer extension into VS Code with `code --install-extension`,
|
|
32
|
-
* replacing an older copy.
|
|
46
|
+
* replacing an older copy. A stamp file holds the hash of the package last
|
|
47
|
+
* installed, so a newer `@g3nomaly/mods` brings its viewer along on `add` and
|
|
48
|
+
* `update`, not only on `init`.
|
|
33
49
|
*
|
|
34
50
|
* @param home - Home directory to look for a VS Code server under; the current user's by default
|
|
51
|
+
* @param onlyWhenChanged - Skip the install when this package was installed already and the extension is still there
|
|
35
52
|
*/
|
|
36
|
-
export function installViewer(home = os.homedir()) {
|
|
53
|
+
export function installViewer(home = os.homedir(), onlyWhenChanged = false) {
|
|
37
54
|
const vsix = viewerPackagePath();
|
|
38
55
|
if (!fs.existsSync(vsix))
|
|
39
56
|
return { kind: "no-package", vsix };
|
|
57
|
+
const hash = createHash("sha256").update(fs.readFileSync(vsix)).digest("hex");
|
|
58
|
+
const stamp = stampPath(home);
|
|
59
|
+
if (onlyWhenChanged && isInstalled(home) && fs.existsSync(stamp) && fs.readFileSync(stamp, "utf8") === hash)
|
|
60
|
+
return { kind: "current" };
|
|
40
61
|
const cli = findCodeCli(home);
|
|
41
62
|
if (cli === null)
|
|
42
63
|
return { kind: "no-cli", vsix };
|
|
43
64
|
const run = Bun.spawnSync([cli, "--install-extension", vsix, "--force"], { stdout: "pipe", stderr: "pipe" });
|
|
44
65
|
if (run.exitCode !== 0)
|
|
45
66
|
return { kind: "failed", vsix, reason: (run.stderr.toString() || run.stdout.toString()).trim() };
|
|
67
|
+
fs.mkdirSync(path.dirname(stamp), { recursive: true });
|
|
68
|
+
fs.writeFileSync(stamp, hash);
|
|
46
69
|
return { kind: "installed", cli };
|
|
47
70
|
}
|
|
48
71
|
//# sourceMappingURL=viewerExtension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewerExtension.js","sourceRoot":"","sources":["../../src/viewer/viewerExtension.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,6FAA6F;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC;AAE9D,wFAAwF;AACxF,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,CAAC,CAAC;AAC/F,CAAC;
|
|
1
|
+
{"version":3,"file":"viewerExtension.js","sourceRoot":"","sources":["../../src/viewer/viewerExtension.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|