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.
Files changed (35) hide show
  1. package/README.md +12 -2
  2. package/dist/chunk-3ILXPKSJ.js +86 -0
  3. package/dist/chunk-3ILXPKSJ.js.map +1 -0
  4. package/dist/{chunk-4KVXCXV3.js → chunk-OGE5KJ4X.js} +10 -6
  5. package/dist/{chunk-4KVXCXV3.js.map → chunk-OGE5KJ4X.js.map} +1 -1
  6. package/dist/chunk-QVWOPIZJ.js +612 -0
  7. package/dist/chunk-QVWOPIZJ.js.map +1 -0
  8. package/dist/{chunk-3VA6XR25.js → chunk-STGGGVYT.js} +23 -100
  9. package/dist/chunk-STGGGVYT.js.map +1 -0
  10. package/dist/cli/commands/uninstall.d.ts +1 -0
  11. package/dist/cli/commands/uninstall.d.ts.map +1 -1
  12. package/dist/cli/index.js +249 -614
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/cli/installers/postinstall-skill-sync.d.ts +15 -0
  15. package/dist/cli/installers/postinstall-skill-sync.d.ts.map +1 -0
  16. package/dist/cli/installers/postinstall-skill-sync.js +48 -0
  17. package/dist/cli/installers/postinstall-skill-sync.js.map +1 -0
  18. package/dist/cli/installers/skills.d.ts +9 -14
  19. package/dist/cli/installers/skills.d.ts.map +1 -1
  20. package/dist/cli/skill-lifecycle.d.ts +26 -0
  21. package/dist/cli/skill-lifecycle.d.ts.map +1 -0
  22. package/dist/cli/update-skill-modes.d.ts +3 -0
  23. package/dist/cli/update-skill-modes.d.ts.map +1 -0
  24. package/dist/index.js +3 -2
  25. package/dist/index.js.map +1 -1
  26. package/dist/opendevbrowser.js +3 -2
  27. package/dist/opendevbrowser.js.map +1 -1
  28. package/dist/public-surface/generated-manifest.d.ts +3 -3
  29. package/dist/public-surface/generated-manifest.d.ts.map +1 -1
  30. package/dist/public-surface/source.d.ts +4 -4
  31. package/dist/skills/skill-loader.js +2 -1
  32. package/extension/manifest.json +1 -1
  33. package/package.json +6 -4
  34. package/scripts/postinstall-sync-skills.mjs +33 -0
  35. 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. Use `--skills-global` for user-wide installs or `--skills-local` for project-local installs; see [docs/CLI.md](docs/CLI.md) for exact target paths.
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 and only prunes legacy `research` or `shopping` leftovers when those directories are empty and clearly obsolete.
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-3VA6XR25.js";
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-17T01:10:55.127Z",
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-4KVXCXV3.js.map
35022
+ //# sourceMappingURL=chunk-OGE5KJ4X.js.map