adhdev 0.6.51 → 0.6.53

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/dist/cli/index.js CHANGED
@@ -5242,6 +5242,76 @@ var init_provider_loader = __esm({
5242
5242
  }
5243
5243
  // ─── Public API ────────────────────────────────
5244
5244
  /**
5245
+ * Ordered builtin roots used for local fallback/reference data.
5246
+ */
5247
+ getBuiltinDirs() {
5248
+ return [...this.builtinDirs];
5249
+ }
5250
+ /**
5251
+ * Primary builtin root used for local scaffolding/reference flows.
5252
+ */
5253
+ getPrimaryBuiltinDir() {
5254
+ return this.builtinDirs[0];
5255
+ }
5256
+ /**
5257
+ * User override root (~/.adhdev/providers by default).
5258
+ */
5259
+ getUserDir() {
5260
+ return this.userDir;
5261
+ }
5262
+ /**
5263
+ * Auto-updated upstream root (~/.adhdev/providers/.upstream by default).
5264
+ */
5265
+ getUpstreamDir() {
5266
+ return this.upstreamDir;
5267
+ }
5268
+ /**
5269
+ * Provider search order for on-disk lookups.
5270
+ * Highest-priority editable overrides come first.
5271
+ */
5272
+ getProviderRoots() {
5273
+ return [this.userDir, this.upstreamDir, ...this.builtinDirs];
5274
+ }
5275
+ /**
5276
+ * Canonical provider directory shape for a given root.
5277
+ */
5278
+ getProviderDir(root, category, type) {
5279
+ return path6.join(root, category, type);
5280
+ }
5281
+ /**
5282
+ * Canonical user override directory for a provider.
5283
+ */
5284
+ getUserProviderDir(category, type) {
5285
+ return this.getProviderDir(this.userDir, category, type);
5286
+ }
5287
+ /**
5288
+ * Canonical upstream directory for a provider.
5289
+ */
5290
+ getUpstreamProviderDir(category, type) {
5291
+ return this.getProviderDir(this.upstreamDir, category, type);
5292
+ }
5293
+ /**
5294
+ * Canonical builtin directory for a provider.
5295
+ */
5296
+ getBuiltinProviderDir(category, type) {
5297
+ return this.getProviderDir(this.getPrimaryBuiltinDir(), category, type);
5298
+ }
5299
+ /**
5300
+ * Find the on-disk directory for a provider by type.
5301
+ * Search order: user override → upstream → builtin fallback.
5302
+ */
5303
+ findProviderDir(type) {
5304
+ return this.findProviderDirInternal(type);
5305
+ }
5306
+ /**
5307
+ * Resolve a file within a provider directory.
5308
+ */
5309
+ resolveProviderFile(type, ...segments) {
5310
+ const dir = this.findProviderDirInternal(type);
5311
+ if (!dir) return null;
5312
+ return path6.join(dir, ...segments);
5313
+ }
5314
+ /**
5245
5315
  * Load all providers (3-tier priority)
5246
5316
  * 1. .upstream/ (GitHub auto-download — primary source)
5247
5317
  * 2. User custom (~/.adhdev/providers/ excluding .upstream)
@@ -5567,7 +5637,7 @@ var init_provider_loader = __esm({
5567
5637
  * Tries scripts.js first, then individual .js files.
5568
5638
  */
5569
5639
  loadScriptsFromDir(type, scriptDir) {
5570
- const providerDir = this.findProviderDir(type);
5640
+ const providerDir = this.findProviderDirInternal(type);
5571
5641
  if (!providerDir) {
5572
5642
  this.log(` [loadScriptsFromDir] ${type}: providerDir not found`);
5573
5643
  return null;
@@ -5928,18 +5998,17 @@ var init_provider_loader = __esm({
5928
5998
  // ─── Private ───────────────────────────────────
5929
5999
  /**
5930
6000
  * Find the on-disk directory for a provider by type.
5931
- * Checks builtinDir, upstreamDir, userDir in order.
6001
+ * Canonical shape: root/category/type.
5932
6002
  */
5933
- findProviderDir(type) {
6003
+ findProviderDirInternal(type) {
5934
6004
  const provider = this.providers.get(type);
5935
6005
  if (!provider) return null;
5936
6006
  const cat = provider.category;
5937
- const searchRoots = [this.userDir, this.upstreamDir, ...this.builtinDirs];
6007
+ const searchRoots = this.getProviderRoots();
5938
6008
  for (const root of searchRoots) {
5939
6009
  if (!fs5.existsSync(root)) continue;
5940
- for (const candidate of [path6.join(root, type), path6.join(root, cat, type)]) {
5941
- if (fs5.existsSync(path6.join(candidate, "provider.json"))) return candidate;
5942
- }
6010
+ const candidate = this.getProviderDir(root, cat, type);
6011
+ if (fs5.existsSync(path6.join(candidate, "provider.json"))) return candidate;
5943
6012
  const catDir = path6.join(root, cat);
5944
6013
  if (fs5.existsSync(catDir)) {
5945
6014
  try {
@@ -27497,37 +27566,7 @@ var init_dev_server = __esm({
27497
27566
  // ─── Provider File Explorer ───
27498
27567
  /** Find the provider directory on disk */
27499
27568
  findProviderDir(type) {
27500
- const provider = this.providerLoader.getMeta(type);
27501
- if (!provider) return null;
27502
- const cat = provider.category;
27503
- const builtinDir = this.providerLoader.builtinDirs?.[0] || path12.resolve(__dirname, "../providers/_builtin");
27504
- const userDir = path12.join(os14.homedir(), ".adhdev", "providers");
27505
- const directCandidates = [
27506
- path12.join(userDir, type),
27507
- path12.join(builtinDir, cat, type),
27508
- path12.join(builtinDir, type)
27509
- ];
27510
- for (const d of directCandidates) {
27511
- if (fs9.existsSync(path12.join(d, "provider.json"))) return d;
27512
- }
27513
- const catDir = path12.join(builtinDir, cat);
27514
- if (fs9.existsSync(catDir)) {
27515
- try {
27516
- for (const entry of fs9.readdirSync(catDir, { withFileTypes: true })) {
27517
- if (!entry.isDirectory()) continue;
27518
- const jsonPath = path12.join(catDir, entry.name, "provider.json");
27519
- if (fs9.existsSync(jsonPath)) {
27520
- try {
27521
- const data = JSON.parse(fs9.readFileSync(jsonPath, "utf-8"));
27522
- if (data.type === type) return path12.join(catDir, entry.name);
27523
- } catch {
27524
- }
27525
- }
27526
- }
27527
- } catch {
27528
- }
27529
- }
27530
- return null;
27569
+ return this.providerLoader.findProviderDir(type);
27531
27570
  }
27532
27571
  /** GET /api/providers/:type/files — list all files in provider directory */
27533
27572
  async handleListFiles(type, _req, res) {
@@ -27922,10 +27961,9 @@ var init_dev_server = __esm({
27922
27961
  }
27923
27962
  let targetDir;
27924
27963
  if (location === "user") {
27925
- targetDir = path12.join(os14.homedir(), ".adhdev", "providers", type);
27964
+ targetDir = this.providerLoader.getUserProviderDir(category, type);
27926
27965
  } else {
27927
- const builtinDir = this.providerLoader.builtinDirs?.[0] || path12.resolve(__dirname, "../providers/_builtin");
27928
- targetDir = path12.join(builtinDir, category, type);
27966
+ targetDir = this.providerLoader.getBuiltinProviderDir(category, type);
27929
27967
  }
27930
27968
  const jsonPath = path12.join(targetDir, "provider.json");
27931
27969
  if (fs9.existsSync(jsonPath)) {
@@ -28734,7 +28772,7 @@ var init_dev_server = __esm({
28734
28772
  const domContext = null;
28735
28773
  this.sendAutoImplSSE({ event: "progress", data: { function: "_init", status: "loading_reference", message: `\uB808\uD37C\uB7F0\uC2A4 \uC2A4\uD06C\uB9BD\uD2B8 \uB85C\uB4DC \uC911 (${reference})...` } });
28736
28774
  let referenceScripts = {};
28737
- const builtinDir = this.providerLoader.builtinDirs?.[0] || path12.resolve(__dirname, "../providers/_builtin");
28775
+ const builtinDir = this.providerLoader.getPrimaryBuiltinDir();
28738
28776
  const refDir = path12.join(builtinDir, "ide", reference);
28739
28777
  if (fs9.existsSync(refDir)) {
28740
28778
  const scriptsDir = path12.join(refDir, "scripts");
@@ -31384,7 +31422,7 @@ var init_adhdev_daemon = __esm({
31384
31422
  fs11 = __toESM(require("fs"));
31385
31423
  path14 = __toESM(require("path"));
31386
31424
  import_chalk2 = __toESM(require("chalk"));
31387
- pkgVersion = "0.6.51";
31425
+ pkgVersion = "0.6.53";
31388
31426
  if (pkgVersion === "unknown") {
31389
31427
  try {
31390
31428
  const possiblePaths = [
@@ -33009,11 +33047,9 @@ function registerProviderCommands(program2) {
33009
33047
  }).catch(async () => {
33010
33048
  const pathMod = await import("path");
33011
33049
  const fsMod = await import("fs");
33012
- const osMod = await import("os");
33013
33050
  const { ProviderLoader: ProviderLoader2 } = await Promise.resolve().then(() => (init_src(), src_exports));
33014
33051
  const loader = new ProviderLoader2();
33015
- const bDir = loader.builtinDirs[0];
33016
- let targetDir = location === "builtin" ? pathMod.join(bDir, category, type) : pathMod.join(osMod.homedir(), ".adhdev", "providers", type);
33052
+ let targetDir = location === "builtin" ? loader.getBuiltinProviderDir(category, type) : loader.getUserProviderDir(category, type);
33017
33053
  if (fsMod.existsSync(targetDir)) return { error: `Provider already exists at ${targetDir}` };
33018
33054
  const isExt = category === "extension";
33019
33055
  const isIde = category === "ide";
@@ -33069,12 +33105,9 @@ function registerProviderCommands(program2) {
33069
33105
  const loader = new ProviderLoader2();
33070
33106
  loader.loadAll();
33071
33107
  const allProviders = loader.getAll();
33072
- const osMod = await import("os");
33073
- const pathMod = await import("path");
33074
33108
  const fsMod = await import("fs");
33075
- const userProviderDir = pathMod.join(osMod.homedir(), ".adhdev", "providers");
33076
33109
  const isUserProvider = (p) => {
33077
- const dir = pathMod.join(userProviderDir, p.type);
33110
+ const dir = loader.getUserProviderDir(p.category, p.type);
33078
33111
  return fsMod.existsSync(dir) && !dir.includes(".upstream");
33079
33112
  };
33080
33113
  let type = typeArg;
@@ -33119,23 +33152,21 @@ function registerProviderCommands(program2) {
33119
33152
  console.log(import_chalk6.default.red("\n\u2717 Fix aborted.\n"));
33120
33153
  process.exit(1);
33121
33154
  }
33122
- const pathMod2 = await import("path");
33155
+ const pathMod = await import("path");
33123
33156
  const fsMod2 = await import("fs");
33124
- const osMod2 = await import("os");
33125
- const bDir = loader.builtinDirs[0];
33126
- const builtinSrc = pathMod2.join(bDir, providerToFix.category, type);
33127
- const downloadedSrc = pathMod2.join(osMod2.homedir(), ".adhdev", "providers", ".upstream", providerToFix.category, type);
33157
+ const builtinSrc = loader.getBuiltinProviderDir(providerToFix.category, type);
33158
+ const downloadedSrc = loader.getUpstreamProviderDir(providerToFix.category, type);
33128
33159
  const sourceDir = fsMod2.existsSync(builtinSrc) ? builtinSrc : downloadedSrc;
33129
33160
  if (actionAnswer.action === "clone") {
33130
33161
  const newType = `my-${type}`;
33131
- const targetDir = pathMod2.join(osMod2.homedir(), ".adhdev", "providers", newType);
33162
+ const targetDir = loader.getUserProviderDir(providerToFix.category, newType);
33132
33163
  if (fsMod2.existsSync(targetDir)) {
33133
33164
  console.log(import_chalk6.default.red(`
33134
33165
  \u2717 Target directory already exists: ${targetDir}. Please delete it or fix it directly.`));
33135
33166
  process.exit(1);
33136
33167
  }
33137
33168
  fsMod2.cpSync(sourceDir, targetDir, { recursive: true });
33138
- const pJsonPath = pathMod2.join(targetDir, "provider.json");
33169
+ const pJsonPath = pathMod.join(targetDir, "provider.json");
33139
33170
  if (fsMod2.existsSync(pJsonPath)) {
33140
33171
  const pJson = JSON.parse(fsMod2.readFileSync(pJsonPath, "utf8"));
33141
33172
  pJson.type = newType;
@@ -33146,11 +33177,11 @@ function registerProviderCommands(program2) {
33146
33177
  \u2713 Successfully cloned to [${newType}]`));
33147
33178
  type = newType;
33148
33179
  } else if (actionAnswer.action === "inplace") {
33149
- const targetDir = pathMod2.join(osMod2.homedir(), ".adhdev", "providers", type);
33180
+ const targetDir = loader.getUserProviderDir(providerToFix.category, type);
33150
33181
  if (!fsMod2.existsSync(targetDir)) {
33151
33182
  fsMod2.cpSync(sourceDir, targetDir, { recursive: true });
33152
33183
  }
33153
- const pJsonPath = pathMod2.join(targetDir, "provider.json");
33184
+ const pJsonPath = pathMod.join(targetDir, "provider.json");
33154
33185
  if (fsMod2.existsSync(pJsonPath)) {
33155
33186
  const pJson = JSON.parse(fsMod2.readFileSync(pJsonPath, "utf8"));
33156
33187
  pJson.disableUpstream = true;
@@ -33265,11 +33296,15 @@ function registerProviderCommands(program2) {
33265
33296
  if (!startResult.started || !startResult.sseUrl) {
33266
33297
  throw new Error(`Unexpected response: ${JSON.stringify(startResult)}`);
33267
33298
  }
33268
- const pathMod2 = await import("path");
33269
- const osPaths = await import("os");
33270
- const targetDir = pathMod2.join(osPaths.homedir(), ".adhdev", "providers", type);
33299
+ const pathMod = await import("path");
33300
+ const { ProviderLoader: ProviderLoader3 } = await Promise.resolve().then(() => (init_src(), src_exports));
33301
+ const loader2 = new ProviderLoader3();
33302
+ loader2.loadAll();
33303
+ const providerMeta = loader2.getMeta(type);
33304
+ if (!providerMeta) throw new Error(`Unknown provider: ${type}`);
33305
+ const targetDir = loader2.getUserProviderDir(providerMeta.category, type);
33271
33306
  const fsMock = await import("fs");
33272
- const logFile2 = pathMod2.join(targetDir, `auto-impl.log`);
33307
+ const logFile2 = pathMod.join(targetDir, `auto-impl.log`);
33273
33308
  fsMock.writeFileSync(logFile2, `=== Auto-Impl Started ===
33274
33309
  `);
33275
33310
  console.log(import_chalk6.default.gray(` Agent logs: ${logFile2}`));
@@ -33447,11 +33482,17 @@ function registerProviderCommands(program2) {
33447
33482
  }).catch(async () => {
33448
33483
  const pathMod = await import("path");
33449
33484
  const fsMod = await import("fs");
33450
- const osMod = await import("os");
33485
+ const { ProviderLoader: ProviderLoader2 } = await Promise.resolve().then(() => (init_src(), src_exports));
33486
+ const loader = new ProviderLoader2();
33487
+ loader.loadAll();
33488
+ const providerMeta = loader.getMeta(type);
33489
+ if (!providerMeta) {
33490
+ return { error: `Provider '${type}' not found` };
33491
+ }
33451
33492
  const possiblePaths = [
33452
- pathMod.join(osMod.homedir(), ".adhdev", "providers", type, "provider.js"),
33453
- pathMod.join(new (await Promise.resolve().then(() => (init_src(), src_exports))).ProviderLoader().builtinDirs[0], "ide", type, "provider.js"),
33454
- pathMod.join(new (await Promise.resolve().then(() => (init_src(), src_exports))).ProviderLoader().builtinDirs[0], "extension", type, "provider.js")
33493
+ pathMod.join(loader.getUserProviderDir(providerMeta.category, type), "provider.js"),
33494
+ pathMod.join(loader.getUpstreamProviderDir(providerMeta.category, type), "provider.js"),
33495
+ pathMod.join(loader.getBuiltinProviderDir(providerMeta.category, type), "provider.js")
33455
33496
  ];
33456
33497
  for (const p of possiblePaths) {
33457
33498
  if (fsMod.existsSync(p)) {