opendevbrowser 0.0.21 → 0.0.22
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 +12 -2
- package/dist/chunk-3ILXPKSJ.js +86 -0
- package/dist/chunk-3ILXPKSJ.js.map +1 -0
- package/dist/{chunk-4KVXCXV3.js → chunk-OGE5KJ4X.js} +10 -6
- package/dist/{chunk-4KVXCXV3.js.map → chunk-OGE5KJ4X.js.map} +1 -1
- package/dist/chunk-QVWOPIZJ.js +612 -0
- package/dist/chunk-QVWOPIZJ.js.map +1 -0
- package/dist/{chunk-3VA6XR25.js → chunk-STGGGVYT.js} +23 -100
- package/dist/chunk-STGGGVYT.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +1 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -1
- package/dist/cli/index.js +249 -614
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installers/postinstall-skill-sync.d.ts +15 -0
- package/dist/cli/installers/postinstall-skill-sync.d.ts.map +1 -0
- package/dist/cli/installers/postinstall-skill-sync.js +48 -0
- package/dist/cli/installers/postinstall-skill-sync.js.map +1 -0
- package/dist/cli/installers/skills.d.ts +9 -14
- package/dist/cli/installers/skills.d.ts.map +1 -1
- package/dist/cli/skill-lifecycle.d.ts +26 -0
- package/dist/cli/skill-lifecycle.d.ts.map +1 -0
- package/dist/cli/update-skill-modes.d.ts +3 -0
- package/dist/cli/update-skill-modes.d.ts.map +1 -0
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/opendevbrowser.js +3 -2
- package/dist/opendevbrowser.js.map +1 -1
- package/dist/public-surface/generated-manifest.d.ts +3 -3
- package/dist/public-surface/generated-manifest.d.ts.map +1 -1
- package/dist/public-surface/source.d.ts +4 -4
- package/dist/skills/skill-loader.js +2 -1
- package/extension/manifest.json +1 -1
- package/package.json +6 -4
- package/scripts/postinstall-sync-skills.mjs +33 -0
- package/dist/chunk-3VA6XR25.js.map +0 -1
package/README.md
CHANGED
|
@@ -99,6 +99,13 @@ cd <public-repo-root>
|
|
|
99
99
|
npm pack
|
|
100
100
|
|
|
101
101
|
WORKDIR=$(mktemp -d /tmp/opendevbrowser-first-run-XXXXXX)
|
|
102
|
+
ISOLATED_ROOT=$(mktemp -d /tmp/opendevbrowser-first-run-isolated-XXXXXX)
|
|
103
|
+
export HOME="$ISOLATED_ROOT/home"
|
|
104
|
+
export OPENCODE_CONFIG_DIR="$ISOLATED_ROOT/opencode-config"
|
|
105
|
+
export OPENCODE_CACHE_DIR="$ISOLATED_ROOT/opencode-cache"
|
|
106
|
+
export CODEX_HOME="$ISOLATED_ROOT/codex-home"
|
|
107
|
+
export CLAUDECODE_HOME="$ISOLATED_ROOT/claudecode-home"
|
|
108
|
+
export AMP_CLI_HOME="$ISOLATED_ROOT/ampcli-home"
|
|
102
109
|
cd "$WORKDIR"
|
|
103
110
|
npm init -y
|
|
104
111
|
npm install <public-repo-root>/opendevbrowser-0.0.21.tgz
|
|
@@ -108,11 +115,13 @@ npx --no-install opendevbrowser help
|
|
|
108
115
|
|
|
109
116
|
Published npm consumer proof is tracked separately in [docs/RELEASE_RUNBOOK.md](docs/RELEASE_RUNBOOK.md) through `scripts/registry-consumer-smoke.mjs`.
|
|
110
117
|
|
|
118
|
+
Set `OPDEVBROWSER_SKIP_POSTINSTALL_SKILL_SYNC=1` before `npm install` only if you need a packaging smoke test that avoids the install-time managed-skill refresh entirely.
|
|
119
|
+
|
|
111
120
|
See [docs/FIRST_RUN_ONBOARDING.md](docs/FIRST_RUN_ONBOARDING.md) for the full onboarding checklist, [docs/DEPENDENCIES.md](docs/DEPENDENCIES.md) for runtime inventory, and [docs/SURFACE_REFERENCE.md](docs/SURFACE_REFERENCE.md) for the live CLI and tool surface.
|
|
112
121
|
|
|
113
122
|
Successful installs reconcile daemon auto-start on supported platforms so the relay is available on login. If the current CLI entrypoint lives under a transient temp-root path such as a first-run `/tmp` or `/private/tmp` workspace, OpenDevBrowser refuses to persist that path as auto-start. Rerun `opendevbrowser daemon install`, or `npx --no-install opendevbrowser daemon install` from a persistent local package install, from a stable install location if you want login auto-start; remove it later with `opendevbrowser daemon uninstall`.
|
|
114
123
|
|
|
115
|
-
Bundled skills sync to **OpenCode, Codex, ClaudeCode, and AmpCLI** targets during install.
|
|
124
|
+
Bundled skills sync to **OpenCode, Codex, ClaudeCode, and AmpCLI** targets during install. `npx opendevbrowser` manages global or project-local targets according to the selected skills mode, and package installation (`npm install -g`, local tarball install, or equivalent) best-effort syncs the canonical bundled packs into the managed global targets during package `postinstall`. See [docs/CLI.md](docs/CLI.md) for exact target paths.
|
|
116
125
|
|
|
117
126
|
### CLI + Extension (No OpenCode)
|
|
118
127
|
|
|
@@ -478,8 +487,9 @@ OpenDevBrowser includes **9 OpenDevBrowser-specific skill packs**. Install, upda
|
|
|
478
487
|
|
|
479
488
|
Installer note:
|
|
480
489
|
- `--skills-global` and `--skills-local` sync the 9 canonical `opendevbrowser-*` packs into managed global or project-local agent directories.
|
|
490
|
+
- Managed installs write a target-level ownership marker, so later update and uninstall only act on CLI-managed skill targets or older config installs that already contain canonical packs.
|
|
481
491
|
- Reinstall and update refresh drifted managed copies and leave matching packs unchanged.
|
|
482
|
-
- Uninstall removes managed canonical packs
|
|
492
|
+
- Uninstall removes managed canonical packs, retires repo-owned legacy alias directories that match shipped content, and leaves unrelated directories untouched.
|
|
483
493
|
|
|
484
494
|
Skills are discovered from (priority order):
|
|
485
495
|
1. `.opencode/skill/` (project)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// src/utils/package-assets.ts
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import { fileURLToPath } from "url";
|
|
5
|
+
var PACKAGE_NAME = "opendevbrowser";
|
|
6
|
+
var SKILLS_DIR_NAME = "skills";
|
|
7
|
+
var cachedPackageRoot = null;
|
|
8
|
+
function findPackageRoot(startDir) {
|
|
9
|
+
let current = startDir;
|
|
10
|
+
while (true) {
|
|
11
|
+
const pkgPath = path.join(current, "package.json");
|
|
12
|
+
if (fs.existsSync(pkgPath)) {
|
|
13
|
+
try {
|
|
14
|
+
const parsed = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
15
|
+
if (parsed.name === PACKAGE_NAME) {
|
|
16
|
+
return current;
|
|
17
|
+
}
|
|
18
|
+
} catch {
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const parent = path.dirname(current);
|
|
22
|
+
if (parent === current) {
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
current = parent;
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
function getPackageRoot() {
|
|
30
|
+
if (cachedPackageRoot) {
|
|
31
|
+
return cachedPackageRoot;
|
|
32
|
+
}
|
|
33
|
+
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
34
|
+
const packageRoot = findPackageRoot(moduleDir);
|
|
35
|
+
if (!packageRoot) {
|
|
36
|
+
throw new Error(`Unable to locate ${PACKAGE_NAME} package root.`);
|
|
37
|
+
}
|
|
38
|
+
cachedPackageRoot = packageRoot;
|
|
39
|
+
return cachedPackageRoot;
|
|
40
|
+
}
|
|
41
|
+
function findBundledSkillsDir() {
|
|
42
|
+
try {
|
|
43
|
+
const skillsDir = path.join(getPackageRoot(), SKILLS_DIR_NAME);
|
|
44
|
+
return fs.existsSync(skillsDir) ? skillsDir : null;
|
|
45
|
+
} catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function getBundledSkillsDir() {
|
|
50
|
+
const skillsDir = findBundledSkillsDir();
|
|
51
|
+
if (!skillsDir) {
|
|
52
|
+
throw new Error(`Bundled skills directory not found in ${PACKAGE_NAME} package.`);
|
|
53
|
+
}
|
|
54
|
+
return skillsDir;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// src/skills/bundled-skill-directories.ts
|
|
58
|
+
var bundledSkillDirectories = [
|
|
59
|
+
{ name: "opendevbrowser-best-practices" },
|
|
60
|
+
{ name: "opendevbrowser-continuity-ledger" },
|
|
61
|
+
{ name: "opendevbrowser-data-extraction" },
|
|
62
|
+
{ name: "opendevbrowser-design-agent" },
|
|
63
|
+
{ name: "opendevbrowser-form-testing" },
|
|
64
|
+
{ name: "opendevbrowser-login-automation" },
|
|
65
|
+
{ name: "opendevbrowser-product-presentation-asset" },
|
|
66
|
+
{ name: "opendevbrowser-research" },
|
|
67
|
+
{ name: "opendevbrowser-shopping" }
|
|
68
|
+
];
|
|
69
|
+
var bundledSkillDirectoryByName = new Map(
|
|
70
|
+
bundledSkillDirectories.map((entry) => [entry.name, entry])
|
|
71
|
+
);
|
|
72
|
+
function listBundledSkillDirectories() {
|
|
73
|
+
return [...bundledSkillDirectories];
|
|
74
|
+
}
|
|
75
|
+
function isBundledSkillName(name) {
|
|
76
|
+
return bundledSkillDirectoryByName.has(name);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
getPackageRoot,
|
|
81
|
+
findBundledSkillsDir,
|
|
82
|
+
getBundledSkillsDir,
|
|
83
|
+
listBundledSkillDirectories,
|
|
84
|
+
isBundledSkillName
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=chunk-3ILXPKSJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/package-assets.ts","../src/skills/bundled-skill-directories.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\n\nconst PACKAGE_NAME = \"opendevbrowser\";\nconst SKILLS_DIR_NAME = \"skills\";\n\nlet cachedPackageRoot: string | null = null;\n\nfunction findPackageRoot(startDir: string): string | null {\n let current = startDir;\n\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (fs.existsSync(pkgPath)) {\n try {\n const parsed = JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")) as { name?: string };\n if (parsed.name === PACKAGE_NAME) {\n return current;\n }\n } catch {\n void 0;\n }\n }\n\n const parent = path.dirname(current);\n if (parent === current) {\n break;\n }\n current = parent;\n }\n\n return null;\n}\n\nexport function getPackageRoot(): string {\n if (cachedPackageRoot) {\n return cachedPackageRoot;\n }\n const moduleDir = path.dirname(fileURLToPath(import.meta.url));\n const packageRoot = findPackageRoot(moduleDir);\n if (!packageRoot) {\n throw new Error(`Unable to locate ${PACKAGE_NAME} package root.`);\n }\n cachedPackageRoot = packageRoot;\n return cachedPackageRoot;\n}\n\nexport function findBundledSkillsDir(): string | null {\n try {\n const skillsDir = path.join(getPackageRoot(), SKILLS_DIR_NAME);\n return fs.existsSync(skillsDir) ? skillsDir : null;\n } catch {\n return null;\n }\n}\n\nexport function getBundledSkillsDir(): string {\n const skillsDir = findBundledSkillsDir();\n if (!skillsDir) {\n throw new Error(`Bundled skills directory not found in ${PACKAGE_NAME} package.`);\n }\n return skillsDir;\n}\n","export interface BundledSkillDirectory {\n name: string;\n}\n\nexport const bundledSkillDirectories: BundledSkillDirectory[] = [\n { name: \"opendevbrowser-best-practices\" },\n { name: \"opendevbrowser-continuity-ledger\" },\n { name: \"opendevbrowser-data-extraction\" },\n { name: \"opendevbrowser-design-agent\" },\n { name: \"opendevbrowser-form-testing\" },\n { name: \"opendevbrowser-login-automation\" },\n { name: \"opendevbrowser-product-presentation-asset\" },\n { name: \"opendevbrowser-research\" },\n { name: \"opendevbrowser-shopping\" }\n];\n\nconst bundledSkillDirectoryByName = new Map(\n bundledSkillDirectories.map((entry) => [entry.name, entry] as const)\n);\n\nexport function listBundledSkillDirectories(): BundledSkillDirectory[] {\n return [...bundledSkillDirectories];\n}\n\nexport function getBundledSkillDirectory(name: string): BundledSkillDirectory | null {\n return bundledSkillDirectoryByName.get(name) ?? null;\n}\n\nexport function isBundledSkillName(name: string): boolean {\n return bundledSkillDirectoryByName.has(name);\n}\n"],"mappings":";AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,qBAAqB;AAE9B,IAAM,eAAe;AACrB,IAAM,kBAAkB;AAExB,IAAI,oBAAmC;AAEvC,SAAS,gBAAgB,UAAiC;AACxD,MAAI,UAAU;AAEd,SAAO,MAAM;AACX,UAAM,UAAe,UAAK,SAAS,cAAc;AACjD,QAAO,cAAW,OAAO,GAAG;AAC1B,UAAI;AACF,cAAM,SAAS,KAAK,MAAS,gBAAa,SAAS,OAAO,CAAC;AAC3D,YAAI,OAAO,SAAS,cAAc;AAChC,iBAAO;AAAA,QACT;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,UAAM,SAAc,aAAQ,OAAO;AACnC,QAAI,WAAW,SAAS;AACtB;AAAA,IACF;AACA,cAAU;AAAA,EACZ;AAEA,SAAO;AACT;AAEO,SAAS,iBAAyB;AACvC,MAAI,mBAAmB;AACrB,WAAO;AAAA,EACT;AACA,QAAM,YAAiB,aAAQ,cAAc,YAAY,GAAG,CAAC;AAC7D,QAAM,cAAc,gBAAgB,SAAS;AAC7C,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,oBAAoB,YAAY,gBAAgB;AAAA,EAClE;AACA,sBAAoB;AACpB,SAAO;AACT;AAEO,SAAS,uBAAsC;AACpD,MAAI;AACF,UAAM,YAAiB,UAAK,eAAe,GAAG,eAAe;AAC7D,WAAU,cAAW,SAAS,IAAI,YAAY;AAAA,EAChD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,sBAA8B;AAC5C,QAAM,YAAY,qBAAqB;AACvC,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,yCAAyC,YAAY,WAAW;AAAA,EAClF;AACA,SAAO;AACT;;;AC3DO,IAAM,0BAAmD;AAAA,EAC9D,EAAE,MAAM,gCAAgC;AAAA,EACxC,EAAE,MAAM,mCAAmC;AAAA,EAC3C,EAAE,MAAM,iCAAiC;AAAA,EACzC,EAAE,MAAM,8BAA8B;AAAA,EACtC,EAAE,MAAM,8BAA8B;AAAA,EACtC,EAAE,MAAM,kCAAkC;AAAA,EAC1C,EAAE,MAAM,4CAA4C;AAAA,EACpD,EAAE,MAAM,0BAA0B;AAAA,EAClC,EAAE,MAAM,0BAA0B;AACpC;AAEA,IAAM,8BAA8B,IAAI;AAAA,EACtC,wBAAwB,IAAI,CAAC,UAAU,CAAC,MAAM,MAAM,KAAK,CAAU;AACrE;AAEO,SAAS,8BAAuD;AACrE,SAAO,CAAC,GAAG,uBAAuB;AACpC;AAMO,SAAS,mBAAmB,MAAuB;AACxD,SAAO,4BAA4B,IAAI,IAAI;AAC7C;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SkillLoader
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-STGGGVYT.js";
|
|
4
4
|
import {
|
|
5
5
|
writeFileAtomic
|
|
6
6
|
} from "./chunk-TBUCZX4A.js";
|
|
@@ -32442,7 +32442,7 @@ var buildAnnotateResult = async (payload) => {
|
|
|
32442
32442
|
// src/public-surface/generated-manifest.ts
|
|
32443
32443
|
var PUBLIC_SURFACE_MANIFEST = {
|
|
32444
32444
|
"schemaVersion": "2026-04-04",
|
|
32445
|
-
"generatedAt": "2026-04-
|
|
32445
|
+
"generatedAt": "2026-04-20T04:16:59.279Z",
|
|
32446
32446
|
"cli": {
|
|
32447
32447
|
"groups": [
|
|
32448
32448
|
{
|
|
@@ -32637,10 +32637,13 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
32637
32637
|
{
|
|
32638
32638
|
"name": "update",
|
|
32639
32639
|
"description": "Clear cached plugin and refresh managed skill packs",
|
|
32640
|
-
"usage": "npx opendevbrowser update [--global|--local]",
|
|
32640
|
+
"usage": "npx opendevbrowser update [--global|--local] [--skills-global|--skills-local|--no-skills]",
|
|
32641
32641
|
"flags": [
|
|
32642
32642
|
"--global",
|
|
32643
|
-
"--local"
|
|
32643
|
+
"--local",
|
|
32644
|
+
"--skills-global",
|
|
32645
|
+
"--skills-local",
|
|
32646
|
+
"--no-skills"
|
|
32644
32647
|
],
|
|
32645
32648
|
"groupId": "install_lifecycle",
|
|
32646
32649
|
"groupTitle": "Install & Lifecycle",
|
|
@@ -32649,10 +32652,11 @@ var PUBLIC_SURFACE_MANIFEST = {
|
|
|
32649
32652
|
{
|
|
32650
32653
|
"name": "uninstall",
|
|
32651
32654
|
"description": "Remove plugin from config and clean managed skill packs",
|
|
32652
|
-
"usage": "npx opendevbrowser uninstall [--global|--local] [--no-prompt] [--quiet]",
|
|
32655
|
+
"usage": "npx opendevbrowser uninstall [--global|--local] [--no-skills] [--no-prompt] [--quiet]",
|
|
32653
32656
|
"flags": [
|
|
32654
32657
|
"--global",
|
|
32655
32658
|
"--local",
|
|
32659
|
+
"--no-skills",
|
|
32656
32660
|
"--no-prompt",
|
|
32657
32661
|
"--quiet"
|
|
32658
32662
|
],
|
|
@@ -35015,4 +35019,4 @@ export {
|
|
|
35015
35019
|
TOOL_SURFACE_ENTRIES
|
|
35016
35020
|
};
|
|
35017
35021
|
/* v8 ignore next -- @preserve */
|
|
35018
|
-
//# sourceMappingURL=chunk-
|
|
35022
|
+
//# sourceMappingURL=chunk-OGE5KJ4X.js.map
|