@glrs-dev/cli 0.0.1 → 0.1.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 +50 -0
- package/README.md +14 -15
- package/dist/chunk-3RG5ZIWI.js +10 -0
- package/dist/chunk-6RHN2EDH.js +93 -0
- package/dist/chunk-DEODG2LC.js +55 -0
- package/dist/chunk-FSAGM22T.js +17 -0
- package/dist/chunk-GQBZREK5.js +136 -0
- package/dist/chunk-HWMRY35D.js +139 -0
- package/dist/chunk-LMRDQ4GW.js +129 -0
- package/dist/chunk-NLPX2KOF.js +149 -0
- package/dist/chunk-P7PRH4I3.js +177 -0
- package/dist/chunk-VCN7RNLU.js +60 -0
- package/dist/chunk-VJFNIKQJ.js +120 -0
- package/dist/chunk-W37UX3U2.js +35 -0
- package/dist/chunk-YBCA3IP6.js +25 -0
- package/dist/chunk-YGNDPKIW.js +99 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +89 -36
- package/dist/commands/cleanup.d.ts +19 -0
- package/dist/commands/cleanup.js +11 -0
- package/dist/commands/create.d.ts +17 -0
- package/dist/commands/create.js +12 -0
- package/dist/commands/delete.d.ts +17 -0
- package/dist/commands/delete.js +12 -0
- package/dist/commands/go.d.ts +4 -0
- package/dist/commands/go.js +11 -0
- package/dist/commands/list.d.ts +15 -0
- package/dist/commands/list.js +12 -0
- package/dist/commands/switch.d.ts +11 -0
- package/dist/commands/switch.js +12 -0
- package/dist/commands/types.d.ts +10 -0
- package/dist/commands/types.js +0 -0
- package/dist/index.d.ts +16 -19
- package/dist/index.js +4 -1
- package/dist/lib/config.d.ts +14 -0
- package/dist/lib/config.js +14 -0
- package/dist/lib/fmt.d.ts +12 -0
- package/dist/lib/fmt.js +25 -0
- package/dist/lib/git.d.ts +26 -0
- package/dist/lib/git.js +25 -0
- package/dist/lib/registry.d.ts +14 -0
- package/dist/lib/registry.js +13 -0
- package/dist/lib/select.d.ts +21 -0
- package/dist/lib/select.js +10 -0
- package/dist/lib/worktree.d.ts +35 -0
- package/dist/lib/worktree.js +17 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/agents-md-writer.md +89 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/architecture-advisor.md +46 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/build.md +93 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/code-searcher.md +54 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/docs-maintainer.md +128 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/gap-analyzer.md +44 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/lib-reader.md +39 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/pilot-builder.md +107 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/pilot-planner.md +153 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/plan-reviewer.md +49 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/plan.md +144 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/prime.md +374 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/qa-reviewer.md +68 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/qa-thorough.md +63 -0
- package/dist/vendor/harness-opencode/dist/agents/prompts/research.md +138 -0
- package/dist/vendor/harness-opencode/dist/agents/shared/index.ts +26 -0
- package/dist/vendor/harness-opencode/dist/agents/shared/workflow-mechanics.md +32 -0
- package/dist/vendor/harness-opencode/dist/bin/memory-mcp-launcher.sh +145 -0
- package/dist/vendor/harness-opencode/dist/bin/plan-check.sh +255 -0
- package/dist/vendor/harness-opencode/dist/chunk-VJUETC6A.js +205 -0
- package/dist/vendor/harness-opencode/dist/chunk-VVMP6QWS.js +731 -0
- package/dist/vendor/harness-opencode/dist/chunk-XCZ3NOXR.js +703 -0
- package/dist/vendor/harness-opencode/dist/cli.d.ts +1 -0
- package/dist/vendor/harness-opencode/dist/cli.js +5096 -0
- package/dist/vendor/harness-opencode/dist/commands/prompts/autopilot.md +96 -0
- package/dist/vendor/harness-opencode/dist/commands/prompts/costs.md +94 -0
- package/dist/vendor/harness-opencode/dist/commands/prompts/fresh.md +382 -0
- package/dist/vendor/harness-opencode/dist/commands/prompts/init-deep.md +196 -0
- package/dist/vendor/harness-opencode/dist/commands/prompts/research.md +27 -0
- package/dist/vendor/harness-opencode/dist/commands/prompts/review.md +96 -0
- package/dist/vendor/harness-opencode/dist/commands/prompts/ship.md +104 -0
- package/dist/vendor/harness-opencode/dist/index.d.ts +21 -0
- package/dist/vendor/harness-opencode/dist/index.js +2092 -0
- package/dist/vendor/harness-opencode/dist/install-4EYR56OR.js +9 -0
- package/dist/vendor/harness-opencode/dist/skills/agent-estimation/SKILL.md +159 -0
- package/dist/vendor/harness-opencode/dist/skills/paths.ts +18 -0
- package/dist/vendor/harness-opencode/dist/skills/pilot-planning/SKILL.md +49 -0
- package/dist/vendor/harness-opencode/dist/skills/pilot-planning/rules/dag-shape.md +47 -0
- package/dist/vendor/harness-opencode/dist/skills/pilot-planning/rules/decomposition.md +36 -0
- package/dist/vendor/harness-opencode/dist/skills/pilot-planning/rules/first-principles.md +29 -0
- package/dist/vendor/harness-opencode/dist/skills/pilot-planning/rules/milestones.md +57 -0
- package/dist/vendor/harness-opencode/dist/skills/pilot-planning/rules/self-review.md +46 -0
- package/dist/vendor/harness-opencode/dist/skills/pilot-planning/rules/task-context.md +47 -0
- package/dist/vendor/harness-opencode/dist/skills/pilot-planning/rules/touches-scope.md +47 -0
- package/dist/vendor/harness-opencode/dist/skills/pilot-planning/rules/verify-design.md +53 -0
- package/dist/vendor/harness-opencode/dist/skills/research/SKILL.md +350 -0
- package/dist/vendor/harness-opencode/dist/skills/research-auto/SKILL.md +283 -0
- package/dist/vendor/harness-opencode/dist/skills/research-local/SKILL.md +268 -0
- package/dist/vendor/harness-opencode/dist/skills/research-web/SKILL.md +119 -0
- package/dist/vendor/harness-opencode/dist/skills/review-plan/SKILL.md +32 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/AGENTS.md +946 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/README.md +60 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/SKILL.md +89 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/rules/state-context-interface.md +191 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-composition-patterns/rules/state-lift-state.md +125 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/AGENTS.md +2975 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/README.md +123 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/SKILL.md +137 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +142 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/vendor/harness-opencode/dist/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/dist/vendor/harness-opencode/dist/skills/web-design-guidelines/SKILL.md +39 -0
- package/dist/vendor/harness-opencode/package.json +11 -0
- package/package.json +20 -15
- package/LICENSE +0 -21
- package/dist/chunk-TU23AE2F.js +0 -69
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// src/auto-update.ts
|
|
2
|
+
import * as fs from "fs/promises";
|
|
3
|
+
import * as fsSync from "fs";
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
import * as os from "os";
|
|
6
|
+
import { fileURLToPath } from "url";
|
|
7
|
+
import { execFile } from "child_process";
|
|
8
|
+
var PACKAGE_NAME = "@glrs-dev/harness-plugin-opencode";
|
|
9
|
+
function getOpenCodeCachePackageDir() {
|
|
10
|
+
const cacheHome = process.env["XDG_CACHE_HOME"] ?? path.join(os.homedir(), ".cache");
|
|
11
|
+
return path.join(
|
|
12
|
+
cacheHome,
|
|
13
|
+
"opencode",
|
|
14
|
+
"packages",
|
|
15
|
+
"@glrs-dev",
|
|
16
|
+
"harness-opencode@latest"
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
async function inspectCachePin(cacheDir) {
|
|
20
|
+
const pkgPath = path.join(cacheDir, "package.json");
|
|
21
|
+
let raw;
|
|
22
|
+
try {
|
|
23
|
+
raw = await fs.readFile(pkgPath, "utf8");
|
|
24
|
+
} catch {
|
|
25
|
+
return { kind: "missing" };
|
|
26
|
+
}
|
|
27
|
+
let parsed;
|
|
28
|
+
try {
|
|
29
|
+
parsed = JSON.parse(raw);
|
|
30
|
+
} catch {
|
|
31
|
+
return { kind: "missing" };
|
|
32
|
+
}
|
|
33
|
+
const deps = parsed.dependencies ?? {};
|
|
34
|
+
const spec = deps[PACKAGE_NAME];
|
|
35
|
+
if (typeof spec !== "string") {
|
|
36
|
+
return { kind: "not-our-package", name: parsed.name ?? "(unknown)" };
|
|
37
|
+
}
|
|
38
|
+
if (/^\d+\.\d+\.\d+(-[0-9a-zA-Z.-]+)?(\+[0-9a-zA-Z.-]+)?$/.test(spec)) {
|
|
39
|
+
return { kind: "exact", version: spec };
|
|
40
|
+
}
|
|
41
|
+
return { kind: "non-exact", spec };
|
|
42
|
+
}
|
|
43
|
+
async function atomicWriteJson(targetPath, value) {
|
|
44
|
+
const serialized = JSON.stringify(value, null, 2) + "\n";
|
|
45
|
+
const tmpPath = `${targetPath}.tmp-${process.pid}-${Date.now()}`;
|
|
46
|
+
await fs.writeFile(tmpPath, serialized, "utf8");
|
|
47
|
+
await fs.rename(tmpPath, targetPath);
|
|
48
|
+
}
|
|
49
|
+
async function refreshPluginCache(currentVersion, latestVersion, ctx = {}) {
|
|
50
|
+
if (process.env["HARNESS_OPENCODE_AUTO_UPDATE"] === "0") {
|
|
51
|
+
return {
|
|
52
|
+
outcome: "disabled",
|
|
53
|
+
message: "HARNESS_OPENCODE_AUTO_UPDATE=0 \u2014 cache rewrite skipped"
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const cacheDir = ctx.cacheDir ?? getOpenCodeCachePackageDir();
|
|
57
|
+
if (currentVersion === latestVersion) {
|
|
58
|
+
return {
|
|
59
|
+
outcome: "already-current",
|
|
60
|
+
message: `running ${currentVersion}, latest is ${latestVersion}`,
|
|
61
|
+
fromVersion: currentVersion,
|
|
62
|
+
toVersion: latestVersion
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const pin = await inspectCachePin(cacheDir);
|
|
66
|
+
switch (pin.kind) {
|
|
67
|
+
case "missing":
|
|
68
|
+
return {
|
|
69
|
+
outcome: "cache-missing",
|
|
70
|
+
message: `no cache pin at ${cacheDir} \u2014 nothing to rewrite`
|
|
71
|
+
};
|
|
72
|
+
case "not-our-package":
|
|
73
|
+
return {
|
|
74
|
+
outcome: "not-our-package",
|
|
75
|
+
message: `cache dir exists but doesn't pin ${PACKAGE_NAME} (name=${pin.name})`
|
|
76
|
+
};
|
|
77
|
+
case "non-exact":
|
|
78
|
+
return {
|
|
79
|
+
outcome: "non-exact-pin",
|
|
80
|
+
message: `cache pin is "${pin.spec}" (not exact) \u2014 user-managed, leaving alone`
|
|
81
|
+
};
|
|
82
|
+
case "exact": {
|
|
83
|
+
if (pin.version === latestVersion) {
|
|
84
|
+
return {
|
|
85
|
+
outcome: "already-current",
|
|
86
|
+
message: `cache already pinned to ${latestVersion}`,
|
|
87
|
+
fromVersion: pin.version,
|
|
88
|
+
toVersion: latestVersion
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const fromVersion = pin.version;
|
|
95
|
+
if (ctx.dryRun) {
|
|
96
|
+
return {
|
|
97
|
+
outcome: "refreshed",
|
|
98
|
+
message: `[dry-run] would rewrite ${cacheDir} from ${fromVersion} to ${latestVersion}`,
|
|
99
|
+
fromVersion,
|
|
100
|
+
toVersion: latestVersion
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
const pkgPath = path.join(cacheDir, "package.json");
|
|
105
|
+
const pkgRaw = await fs.readFile(pkgPath, "utf8");
|
|
106
|
+
const pkg = JSON.parse(pkgRaw);
|
|
107
|
+
const deps = { ...pkg.dependencies ?? {} };
|
|
108
|
+
deps[PACKAGE_NAME] = latestVersion;
|
|
109
|
+
const newPkg = { ...pkg, dependencies: deps };
|
|
110
|
+
await atomicWriteJson(pkgPath, newPkg);
|
|
111
|
+
const lockPath = path.join(cacheDir, "package-lock.json");
|
|
112
|
+
try {
|
|
113
|
+
const lockRaw = await fs.readFile(lockPath, "utf8");
|
|
114
|
+
const lock = JSON.parse(lockRaw);
|
|
115
|
+
const packages = { ...lock.packages ?? {} };
|
|
116
|
+
if (packages[""] && packages[""].dependencies) {
|
|
117
|
+
packages[""] = {
|
|
118
|
+
...packages[""],
|
|
119
|
+
dependencies: {
|
|
120
|
+
...packages[""].dependencies,
|
|
121
|
+
[PACKAGE_NAME]: latestVersion
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const nmKey = `node_modules/${PACKAGE_NAME}`;
|
|
126
|
+
if (packages[nmKey]) {
|
|
127
|
+
packages[nmKey] = {
|
|
128
|
+
...packages[nmKey],
|
|
129
|
+
version: latestVersion
|
|
130
|
+
};
|
|
131
|
+
delete packages[nmKey]["resolved"];
|
|
132
|
+
delete packages[nmKey]["integrity"];
|
|
133
|
+
}
|
|
134
|
+
const newLock = { ...lock, packages };
|
|
135
|
+
await atomicWriteJson(lockPath, newLock);
|
|
136
|
+
} catch {
|
|
137
|
+
try {
|
|
138
|
+
await fs.rm(lockPath, { force: true });
|
|
139
|
+
} catch {
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const nmPath = path.join(cacheDir, "node_modules");
|
|
143
|
+
try {
|
|
144
|
+
await fs.rm(nmPath, { recursive: true, force: true });
|
|
145
|
+
} catch {
|
|
146
|
+
}
|
|
147
|
+
if (!ctx.skipInstall) {
|
|
148
|
+
try {
|
|
149
|
+
await new Promise((resolve, reject) => {
|
|
150
|
+
const child = execFile(
|
|
151
|
+
"npm",
|
|
152
|
+
["install", "--no-audit", "--no-fund"],
|
|
153
|
+
{ cwd: cacheDir, timeout: 3e4 },
|
|
154
|
+
(err) => err ? reject(err) : resolve()
|
|
155
|
+
);
|
|
156
|
+
child.unref?.();
|
|
157
|
+
});
|
|
158
|
+
} catch {
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
outcome: "refreshed",
|
|
163
|
+
message: `rewrote cache pin ${fromVersion} \u2192 ${latestVersion}; next OpenCode restart will reinstall`,
|
|
164
|
+
fromVersion,
|
|
165
|
+
toVersion: latestVersion
|
|
166
|
+
};
|
|
167
|
+
} catch (err) {
|
|
168
|
+
return {
|
|
169
|
+
outcome: "error",
|
|
170
|
+
message: `cache rewrite failed: ${err.message}`,
|
|
171
|
+
fromVersion,
|
|
172
|
+
toVersion: latestVersion
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function readOurPackageVersion(fromFileUrl) {
|
|
177
|
+
const here = path.dirname(fileURLToPath(fromFileUrl));
|
|
178
|
+
const candidates = [
|
|
179
|
+
path.join(here, "..", "package.json"),
|
|
180
|
+
// dist/index.js → dist/../package.json
|
|
181
|
+
path.join(here, "..", "..", "package.json"),
|
|
182
|
+
// src/index.ts → src/../../package.json
|
|
183
|
+
path.join(here, "package.json")
|
|
184
|
+
// safety net
|
|
185
|
+
];
|
|
186
|
+
for (const candidate of candidates) {
|
|
187
|
+
try {
|
|
188
|
+
const raw = fsSync.readFileSync(candidate, "utf8");
|
|
189
|
+
const parsed = JSON.parse(raw);
|
|
190
|
+
if (parsed.name === PACKAGE_NAME && typeof parsed.version === "string") {
|
|
191
|
+
return parsed.version;
|
|
192
|
+
}
|
|
193
|
+
} catch {
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return "0.0.0";
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export {
|
|
200
|
+
PACKAGE_NAME,
|
|
201
|
+
getOpenCodeCachePackageDir,
|
|
202
|
+
inspectCachePin,
|
|
203
|
+
refreshPluginCache,
|
|
204
|
+
readOurPackageVersion
|
|
205
|
+
};
|