@atlasharness/atlascode 0.1.98 → 0.1.99

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 (2) hide show
  1. package/dist/cli.js +102 -86
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -613,14 +613,28 @@ var init_constants = __esm(() => {
613
613
  });
614
614
 
615
615
  // src/shared/configDir.ts
616
+ function setConfigDirNameProvider(provider) {
617
+ _provider = provider;
618
+ }
616
619
  function getConfigDirName() {
620
+ const fullDir = process.env.ATLAS_CONFIG_DIR;
621
+ if (fullDir) {
622
+ return fullDir;
623
+ }
624
+ return getConfigDirNameForProject();
625
+ }
626
+ function getConfigDirNameForProject() {
617
627
  const override = process.env.ATLAS_CONFIG_DIR_NAME;
618
628
  if (override) {
619
629
  return override;
620
630
  }
631
+ const productDefault = _provider ? _provider() : undefined;
632
+ if (productDefault) {
633
+ return productDefault;
634
+ }
621
635
  return NEW_CONFIG_DIR;
622
636
  }
623
- var NEW_CONFIG_DIR = ".atlas";
637
+ var NEW_CONFIG_DIR = ".atlas", _provider = null;
624
638
 
625
639
  // src/shared/fs-operations.ts
626
640
  import * as fs from "fs";
@@ -797,10 +811,10 @@ var init_platform = __esm(() => {
797
811
  // src/shared/tempDir.ts
798
812
  function getAtlasTempDirName() {
799
813
  if (getPlatform() === "windows") {
800
- return getConfigDirName();
814
+ return getConfigDirNameForProject();
801
815
  }
802
816
  const uid = process.getuid?.() ?? 0;
803
- return `${getConfigDirName()}-${uid}`;
817
+ return `${getConfigDirNameForProject()}-${uid}`;
804
818
  }
805
819
  var init_tempDir = __esm(() => {
806
820
  init_platform();
@@ -28884,14 +28898,14 @@ var init_queryWithRoleFallback = __esm(() => {
28884
28898
 
28885
28899
  // src/modelprovider/index.ts
28886
28900
  function getModelProvider() {
28887
- _provider ??= new OpenAIProvider(3, LLM_TIMEOUT_DEFAULT_MS, () => resolveLlmTimeoutMs(process.env.ATLAS_LLM_TIMEOUT, llmTimeoutSettingsSource?.()));
28901
+ _provider2 ??= new OpenAIProvider(3, LLM_TIMEOUT_DEFAULT_MS, () => resolveLlmTimeoutMs(process.env.ATLAS_LLM_TIMEOUT, llmTimeoutSettingsSource?.()));
28888
28902
  if (!_llmTimeoutUnitHintWarned) {
28889
28903
  _llmTimeoutUnitHintWarned = true;
28890
28904
  const hint = llmTimeoutUnitHint(resolveLlmTimeoutMs(process.env.ATLAS_LLM_TIMEOUT, llmTimeoutSettingsSource?.()));
28891
28905
  if (hint)
28892
28906
  logForDebugging(hint, { level: "warn" });
28893
28907
  }
28894
- return _provider;
28908
+ return _provider2;
28895
28909
  }
28896
28910
  function setLlmTimeoutSettingsSource(next) {
28897
28911
  llmTimeoutSettingsSource = next;
@@ -28929,7 +28943,7 @@ function lazyProxy(resolve) {
28929
28943
  }
28930
28944
  });
28931
28945
  }
28932
- var _provider, _llmTimeoutUnitHintWarned = false, llmTimeoutSettingsSource = null, modelProvider;
28946
+ var _provider2, _llmTimeoutUnitHintWarned = false, llmTimeoutSettingsSource = null, modelProvider;
28933
28947
  var init_modelprovider2 = __esm(() => {
28934
28948
  init_modelprovider();
28935
28949
  init_constants2();
@@ -29762,12 +29776,12 @@ var _env2 = null;
29762
29776
 
29763
29777
  // src/hooks/config-provider.ts
29764
29778
  function setHookConfigProvider(provider) {
29765
- _provider2 = provider;
29779
+ _provider3 = provider;
29766
29780
  }
29767
29781
  function getHookConfigProvider() {
29768
- return _provider2;
29782
+ return _provider3;
29769
29783
  }
29770
- var _provider2 = null;
29784
+ var _provider3 = null;
29771
29785
  // src/hooks/shell-port.ts
29772
29786
  function setHookShellPort(port) {
29773
29787
  _port = port;
@@ -30548,12 +30562,12 @@ var _env3 = null;
30548
30562
 
30549
30563
  // src/permissions/settingsPaths.ts
30550
30564
  function setSettingsPathsProvider(provider) {
30551
- _provider3 = provider;
30565
+ _provider4 = provider;
30552
30566
  }
30553
30567
  function getSettingsPaths() {
30554
- return _provider3 ? _provider3() : [];
30568
+ return _provider4 ? _provider4() : [];
30555
30569
  }
30556
- var _provider3 = null;
30570
+ var _provider4 = null;
30557
30571
 
30558
30572
  // src/permissions/filesystem.ts
30559
30573
  import { tmpdir } from "os";
@@ -30570,7 +30584,7 @@ function relativePath(from, to) {
30570
30584
  function isAtlasSettingsPath(filePath) {
30571
30585
  const expandedPath = expandPathLocal(filePath);
30572
30586
  const normalizedPath = normalizeCaseForComparison(expandedPath);
30573
- const configDir = getConfigDirName();
30587
+ const configDir = getConfigDirNameForProject();
30574
30588
  if (normalizedPath.endsWith(`${sep}${configDir}${sep}settings.json`) || normalizedPath.endsWith(`${sep}${configDir}${sep}settings.local.json`)) {
30575
30589
  return true;
30576
30590
  }
@@ -30580,7 +30594,7 @@ function isClaudeConfigFilePath(filePath) {
30580
30594
  if (isAtlasSettingsPath(filePath)) {
30581
30595
  return true;
30582
30596
  }
30583
- const configDir = getConfigDirName();
30597
+ const configDir = getConfigDirNameForProject();
30584
30598
  const originalCwd = getPermissionsBootstrapEnv().getOriginalCwd();
30585
30599
  const commandsDir = join8(originalCwd, configDir, "commands");
30586
30600
  const agentsDir = join8(originalCwd, configDir, "agents");
@@ -30616,7 +30630,7 @@ function isDangerousFilePathToAutoEdit(path) {
30616
30630
  if (normalizedSegment !== normalizeCaseForComparison(dir)) {
30617
30631
  continue;
30618
30632
  }
30619
- if (dir === getConfigDirName()) {
30633
+ if (dir === getConfigDirNameForProject()) {
30620
30634
  const nextSegment = pathSegments[i + 1];
30621
30635
  if (nextSegment && normalizeCaseForComparison(nextSegment) === "worktrees") {
30622
30636
  break;
@@ -30965,7 +30979,7 @@ var init_filesystem = __esm(() => {
30965
30979
  ".git",
30966
30980
  ".vscode",
30967
30981
  ".idea",
30968
- getConfigDirName()
30982
+ getConfigDirNameForProject()
30969
30983
  ];
30970
30984
  worktreeCwdProbeCache = new Map;
30971
30985
  _resolvedWorkingDirCache = new Map;
@@ -32916,9 +32930,9 @@ function getSettingsPaths2() {
32916
32930
  function getRelativeSettingsFilePathForSource(source) {
32917
32931
  switch (source) {
32918
32932
  case "projectSettings":
32919
- return join9(getConfigDirName(), "settings.json");
32933
+ return join9(getConfigDirNameForProject(), "settings.json");
32920
32934
  case "localSettings":
32921
- return join9(getConfigDirName(), "settings.local.json");
32935
+ return join9(getConfigDirNameForProject(), "settings.local.json");
32922
32936
  }
32923
32937
  }
32924
32938
  function getSettingsForSource(source) {
@@ -66909,8 +66923,8 @@ var init_readTool = __esm(() => {
66909
66923
  var ATLAS_FOLDER_PERMISSION_PATTERN, GLOBAL_ATLAS_FOLDER_PERMISSION_PATTERN, FILE_UNEXPECTEDLY_MODIFIED_ERROR = "File has been unexpectedly modified. Read it again before attempting to write it.";
66910
66924
  var init_fileEditConstants = __esm(() => {
66911
66925
  init_shared();
66912
- ATLAS_FOLDER_PERMISSION_PATTERN = `/${getConfigDirName()}/**`;
66913
- GLOBAL_ATLAS_FOLDER_PERMISSION_PATTERN = `~/${getConfigDirName()}/**`;
66926
+ ATLAS_FOLDER_PERMISSION_PATTERN = `/${getConfigDirNameForProject()}/**`;
66927
+ GLOBAL_ATLAS_FOLDER_PERMISSION_PATTERN = `~/${getConfigDirNameForProject()}/**`;
66914
66928
  });
66915
66929
 
66916
66930
  // src/engine/tools/files/fileEditUtils.ts
@@ -77315,7 +77329,7 @@ function hasCronTasksSync(dir) {
77315
77329
  }
77316
77330
  async function writeCronTasks(tasks, dir) {
77317
77331
  const root = dir ?? getSchedulerEnv().getProjectRoot();
77318
- await mkdir9(join31(root, getConfigDirName()), { recursive: true });
77332
+ await mkdir9(join31(root, getConfigDirNameForProject()), { recursive: true });
77319
77333
  const body = {
77320
77334
  tasks: tasks.map(({ durable: _durable, ...rest }) => rest)
77321
77335
  };
@@ -77409,7 +77423,7 @@ var init_cronTasks = __esm(() => {
77409
77423
  init_shared();
77410
77424
  init_cron();
77411
77425
  init_cronEnv();
77412
- CRON_FILE_REL = join31(getConfigDirName(), "scheduled_tasks.json");
77426
+ CRON_FILE_REL = join31(getConfigDirNameForProject(), "scheduled_tasks.json");
77413
77427
  DEFAULT_CRON_JITTER_CONFIG = {
77414
77428
  recurringFrac: 0.1,
77415
77429
  recurringCapMs: 15 * 60 * 1000,
@@ -77551,7 +77565,7 @@ var init_cronTasksLock = __esm(() => {
77551
77565
  init_shared();
77552
77566
  init_zod();
77553
77567
  init_cronEnv();
77554
- LOCK_FILE_REL = join32(getConfigDirName(), "scheduled_tasks.lock");
77568
+ LOCK_FILE_REL = join32(getConfigDirNameForProject(), "scheduled_tasks.lock");
77555
77569
  schedulerLockSchema = lazySchema(() => object({
77556
77570
  sessionId: string2(),
77557
77571
  pid: number2(),
@@ -80438,7 +80452,7 @@ function getWorktreeSettings() {
80438
80452
  return getInitialSettings().worktree ?? {};
80439
80453
  }
80440
80454
  function worktreesDir(repoRoot) {
80441
- return join34(repoRoot, getConfigDirName(), "worktrees");
80455
+ return join34(repoRoot, getConfigDirNameForProject(), "worktrees");
80442
80456
  }
80443
80457
  function flattenSlug(slug) {
80444
80458
  return slug.replaceAll("/", "+");
@@ -81047,7 +81061,7 @@ function getProjectDirsUpToHome(subdir, cwd) {
81047
81061
  if (normalizePathForComparison(current) === normalizePathForComparison(home)) {
81048
81062
  break;
81049
81063
  }
81050
- const configSubdir = join35(current, getConfigDirName(), subdir);
81064
+ const configSubdir = join35(current, getConfigDirNameForProject(), subdir);
81051
81065
  try {
81052
81066
  statSync5(configSubdir);
81053
81067
  dirs.push(configSubdir);
@@ -81163,15 +81177,15 @@ var init_markdownLoader = __esm(() => {
81163
81177
  init_files5();
81164
81178
  loadMarkdownFilesForSubdir = memoize2(async function(subdir, cwd) {
81165
81179
  const userDir = join35(getAtlasConfigHomeDir(), subdir);
81166
- const managedDir = join35(getManagedSettingsDir(), getConfigDirName(), subdir);
81180
+ const managedDir = join35(getManagedSettingsDir(), getConfigDirNameForProject(), subdir);
81167
81181
  const projectDirs = getProjectDirsUpToHome(subdir, cwd);
81168
81182
  const gitRoot = findGitRoot(cwd);
81169
81183
  const canonicalRoot = findCanonicalGitRoot(cwd);
81170
81184
  if (gitRoot && canonicalRoot && canonicalRoot !== gitRoot) {
81171
- const worktreeSubdir = normalizePathForComparison(join35(gitRoot, getConfigDirName(), subdir));
81185
+ const worktreeSubdir = normalizePathForComparison(join35(gitRoot, getConfigDirNameForProject(), subdir));
81172
81186
  const worktreeHasSubdir = projectDirs.some((dir) => normalizePathForComparison(dir) === worktreeSubdir);
81173
81187
  if (!worktreeHasSubdir) {
81174
- const mainConfigSubdir = join35(canonicalRoot, getConfigDirName(), subdir);
81188
+ const mainConfigSubdir = join35(canonicalRoot, getConfigDirNameForProject(), subdir);
81175
81189
  if (!projectDirs.includes(mainConfigSubdir)) {
81176
81190
  projectDirs.push(mainConfigSubdir);
81177
81191
  }
@@ -129187,7 +129201,7 @@ function saveConfigWithLock(file, createDefault, mergeFn) {
129187
129201
  }
129188
129202
  const currentConfig = getConfig2(file, createDefault);
129189
129203
  if (file === getGlobalClaudeFile() && wouldLoseAuthState(currentConfig)) {
129190
- logForDebugging3("saveConfigWithLock: re-read config is missing auth that cache has; refusing to write to avoid wiping ~/getConfigDirName().json. See GH #3117.", { level: "error" });
129204
+ logForDebugging3("saveConfigWithLock: re-read config is missing auth that cache has; refusing to write to avoid wiping ~/getConfigDirNameForProject().json. See GH #3117.", { level: "error" });
129191
129205
  return false;
129192
129206
  }
129193
129207
  const mergedConfig = mergeFn(currentConfig);
@@ -129521,7 +129535,7 @@ function getMemoryPath(memoryType) {
129521
129535
  return "";
129522
129536
  }
129523
129537
  function getManagedClaudeRulesDir() {
129524
- return join60(getManagedFilePath(), getConfigDirName(), "rules");
129538
+ return join60(getManagedFilePath(), getConfigDirNameForProject(), "rules");
129525
129539
  }
129526
129540
  function getUserClaudeRulesDir() {
129527
129541
  return join60(getAtlasConfigHomeDir3(), "rules");
@@ -131528,9 +131542,9 @@ function getSettingsFilePathForSource2(source) {
131528
131542
  function getRelativeSettingsFilePathForSource2(source) {
131529
131543
  switch (source) {
131530
131544
  case "projectSettings":
131531
- return join64(getConfigDirName(), "settings.json");
131545
+ return join64(getConfigDirNameForProject(), "settings.json");
131532
131546
  case "localSettings":
131533
- return join64(getConfigDirName(), "settings.local.json");
131547
+ return join64(getConfigDirNameForProject(), "settings.local.json");
131534
131548
  }
131535
131549
  }
131536
131550
  function getSettingsForSource2(source) {
@@ -138292,13 +138306,13 @@ function getLocalAgentMemoryDir(dirName) {
138292
138306
  if (process.env.ATLAS_REMOTE_MEMORY_DIR) {
138293
138307
  return join68(process.env.ATLAS_REMOTE_MEMORY_DIR, "projects", sanitizePath3(findCanonicalGitRoot2(getProjectRoot()) ?? getProjectRoot()), "agent-memory-local", dirName) + sep13;
138294
138308
  }
138295
- return join68(getCwd(), getConfigDirName(), "agent-memory-local", dirName) + sep13;
138309
+ return join68(getCwd(), getConfigDirNameForProject(), "agent-memory-local", dirName) + sep13;
138296
138310
  }
138297
138311
  function getAgentMemoryDir(agentType, scope) {
138298
138312
  const dirName = sanitizeAgentTypeForPath(agentType);
138299
138313
  switch (scope) {
138300
138314
  case "project":
138301
- return join68(getCwd(), getConfigDirName(), "agent-memory", dirName) + sep13;
138315
+ return join68(getCwd(), getConfigDirNameForProject(), "agent-memory", dirName) + sep13;
138302
138316
  case "local":
138303
138317
  return getLocalAgentMemoryDir(dirName);
138304
138318
  case "user":
@@ -138311,14 +138325,14 @@ function isAgentMemoryPath(absolutePath) {
138311
138325
  if (normalizedPath.startsWith(join68(memoryBase, "agent-memory") + sep13)) {
138312
138326
  return true;
138313
138327
  }
138314
- if (normalizedPath.startsWith(join68(getCwd(), getConfigDirName(), "agent-memory") + sep13)) {
138328
+ if (normalizedPath.startsWith(join68(getCwd(), getConfigDirNameForProject(), "agent-memory") + sep13)) {
138315
138329
  return true;
138316
138330
  }
138317
138331
  if (process.env.ATLAS_REMOTE_MEMORY_DIR) {
138318
138332
  if (normalizedPath.includes(sep13 + "agent-memory-local" + sep13) && normalizedPath.startsWith(join68(process.env.ATLAS_REMOTE_MEMORY_DIR, "projects") + sep13)) {
138319
138333
  return true;
138320
138334
  }
138321
- } else if (normalizedPath.startsWith(join68(getCwd(), getConfigDirName(), "agent-memory-local") + sep13)) {
138335
+ } else if (normalizedPath.startsWith(join68(getCwd(), getConfigDirNameForProject(), "agent-memory-local") + sep13)) {
138322
138336
  return true;
138323
138337
  }
138324
138338
  return false;
@@ -138328,7 +138342,7 @@ function getMemoryScopeDisplay(memory) {
138328
138342
  case "user":
138329
138343
  return `User (${join68(getMemoryBaseDir2(), "agent-memory")}/)`;
138330
138344
  case "project":
138331
- return "Project (getConfigDirName()/agent-memory/)";
138345
+ return "Project (getConfigDirNameForProject()/agent-memory/)";
138332
138346
  case "local":
138333
138347
  return `Local (${getLocalAgentMemoryDir("...")})`;
138334
138348
  default:
@@ -138371,8 +138385,8 @@ var init_agentMemory = __esm(() => {
138371
138385
  var FILE_EDIT_TOOL_NAME2 = "Edit", ATLAS_FOLDER_PERMISSION_PATTERN2, GLOBAL_ATLAS_FOLDER_PERMISSION_PATTERN2, FILE_UNEXPECTEDLY_MODIFIED_ERROR2 = "File has been unexpectedly modified. Read it again before attempting to write it.";
138372
138386
  var init_constants8 = __esm(() => {
138373
138387
  init_configDir();
138374
- ATLAS_FOLDER_PERMISSION_PATTERN2 = `/${getConfigDirName()}/**`;
138375
- GLOBAL_ATLAS_FOLDER_PERMISSION_PATTERN2 = `~/${getConfigDirName()}/**`;
138388
+ ATLAS_FOLDER_PERMISSION_PATTERN2 = `/${getConfigDirNameForProject()}/**`;
138389
+ GLOBAL_ATLAS_FOLDER_PERMISSION_PATTERN2 = `~/${getConfigDirNameForProject()}/**`;
138376
138390
  });
138377
138391
 
138378
138392
  // src/tui/utils/pdfUtils.ts
@@ -184766,7 +184780,7 @@ function generateTmuxSessionName2(repoPath, branch) {
184766
184780
  return combined.replace(/[/.]/g, "_");
184767
184781
  }
184768
184782
  function worktreesDir2(repoRoot) {
184769
- return join75(repoRoot, getConfigDirName(), "worktrees");
184783
+ return join75(repoRoot, getConfigDirNameForProject(), "worktrees");
184770
184784
  }
184771
184785
  function flattenSlug2(slug) {
184772
184786
  return slug.replaceAll("/", "+");
@@ -197395,7 +197409,7 @@ function getAddDirEnabledPlugins() {
197395
197409
  const result = {};
197396
197410
  for (const dir of getAdditionalDirectoriesForClaudeMd()) {
197397
197411
  for (const file of SETTINGS_FILES) {
197398
- const { settings } = parseSettingsFile2(join78(dir, getConfigDirName(), file));
197412
+ const { settings } = parseSettingsFile2(join78(dir, getConfigDirNameForProject(), file));
197399
197413
  if (!settings?.enabledPlugins) {
197400
197414
  continue;
197401
197415
  }
@@ -197408,7 +197422,7 @@ function getAddDirExtraMarketplaces() {
197408
197422
  const result = {};
197409
197423
  for (const dir of getAdditionalDirectoriesForClaudeMd()) {
197410
197424
  for (const file of SETTINGS_FILES) {
197411
- const { settings } = parseSettingsFile2(join78(dir, getConfigDirName(), file));
197425
+ const { settings } = parseSettingsFile2(join78(dir, getConfigDirNameForProject(), file));
197412
197426
  if (!settings?.extraKnownMarketplaces) {
197413
197427
  continue;
197414
197428
  }
@@ -200793,7 +200807,7 @@ var init_agentColorManager = __esm(() => {
200793
200807
  import { mkdir as mkdir20, readdir as readdir19, readFile as readFile28, unlink as unlink13, writeFile as writeFile17 } from "fs/promises";
200794
200808
  import { join as join84 } from "path";
200795
200809
  function getSnapshotDirForAgent(agentType) {
200796
- return join84(getCwd(), getConfigDirName(), SNAPSHOT_BASE, agentType);
200810
+ return join84(getCwd(), getConfigDirNameForProject(), SNAPSHOT_BASE, agentType);
200797
200811
  }
200798
200812
  function getSnapshotJsonPath(agentType) {
200799
200813
  return join84(getSnapshotDirForAgent(agentType), SNAPSHOT_JSON);
@@ -249349,11 +249363,11 @@ import {
249349
249363
  function getSkillsPath2(source, dir) {
249350
249364
  switch (source) {
249351
249365
  case "policySettings":
249352
- return join113(getManagedFilePath(), getConfigDirName(), dir);
249366
+ return join113(getManagedFilePath(), getConfigDirNameForProject(), dir);
249353
249367
  case "userSettings":
249354
249368
  return join113(getAtlasConfigHomeDir3(), dir);
249355
249369
  case "projectSettings":
249356
- return `getConfigDirName()/${dir}`;
249370
+ return `getConfigDirNameForProject()/${dir}`;
249357
249371
  case "plugin":
249358
249372
  return "plugin";
249359
249373
  default:
@@ -249685,7 +249699,7 @@ async function discoverSkillDirsForPaths2(filePaths, cwd) {
249685
249699
  for (const filePath of filePaths) {
249686
249700
  let currentDir = dirname53(filePath);
249687
249701
  while (currentDir.startsWith(resolvedCwd + pathSep2)) {
249688
- const skillDir = join113(currentDir, getConfigDirName(), "skills");
249702
+ const skillDir = join113(currentDir, getConfigDirNameForProject(), "skills");
249689
249703
  if (!dynamicSkillDirs2.has(skillDir)) {
249690
249704
  dynamicSkillDirs2.add(skillDir);
249691
249705
  try {
@@ -249796,7 +249810,7 @@ var init_loadSkillsDir2 = __esm(() => {
249796
249810
  import_ignore2 = __toESM(require_ignore(), 1);
249797
249811
  getSkillDirCommands2 = memoize_default(async (cwd) => {
249798
249812
  const userSkillsDir = join113(getAtlasConfigHomeDir3(), "skills");
249799
- const managedSkillsDir = join113(getManagedFilePath(), getConfigDirName(), "skills");
249813
+ const managedSkillsDir = join113(getManagedFilePath(), getConfigDirNameForProject(), "skills");
249800
249814
  const projectSkillsDirs = getProjectDirsUpToHome2("skills", cwd);
249801
249815
  logForDebugging3(`Loading skills from: managed=${managedSkillsDir}, user=${userSkillsDir}, project=[${projectSkillsDirs.join(", ")}]`);
249802
249816
  const additionalDirs = getAdditionalDirectoriesForClaudeMd();
@@ -249807,7 +249821,7 @@ var init_loadSkillsDir2 = __esm(() => {
249807
249821
  logForDebugging3(`[bare] Skipping skill dir discovery (${additionalDirs.length === 0 ? "no --add-dir" : "project skills disabled (kill switch) or skillsLocked"})`);
249808
249822
  return [];
249809
249823
  }
249810
- const additionalSkillsNested = await Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir2(join113(dir, getConfigDirName(), "skills"), "projectSettings")));
249824
+ const additionalSkillsNested = await Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir2(join113(dir, getConfigDirNameForProject(), "skills"), "projectSettings")));
249811
249825
  return additionalSkillsNested.flat().map((s) => s.skill);
249812
249826
  }
249813
249827
  const [
@@ -249820,7 +249834,7 @@ var init_loadSkillsDir2 = __esm(() => {
249820
249834
  isEnvTruthy2(process.env.ATLAS_DISABLE_POLICY_SKILLS) ? Promise.resolve([]) : loadSkillsFromSkillsDir2(managedSkillsDir, "policySettings"),
249821
249835
  isSettingSourceEnabled2("userSettings") && !skillsLocked ? loadSkillsFromSkillsDir2(userSkillsDir, "userSettings") : Promise.resolve([]),
249822
249836
  projectSkillsEnabled ? Promise.all(projectSkillsDirs.map((dir) => loadSkillsFromSkillsDir2(dir, "projectSettings"))) : Promise.resolve([]),
249823
- projectSkillsEnabled ? Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir2(join113(dir, getConfigDirName(), "skills"), "projectSettings"))) : Promise.resolve([]),
249837
+ projectSkillsEnabled ? Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir2(join113(dir, getConfigDirNameForProject(), "skills"), "projectSettings"))) : Promise.resolve([]),
249824
249838
  skillsLocked ? Promise.resolve([]) : loadSkillsFromCommandsDir2(cwd)
249825
249839
  ]);
249826
249840
  const allSkillsWithPaths = [
@@ -334140,7 +334154,7 @@ function hasCronTasksSync2(dir) {
334140
334154
  }
334141
334155
  async function writeCronTasks2(tasks, dir) {
334142
334156
  const root = dir ?? getProjectRoot();
334143
- await mkdir37(join126(root, getConfigDirName()), { recursive: true });
334157
+ await mkdir37(join126(root, getConfigDirNameForProject()), { recursive: true });
334144
334158
  const body = {
334145
334159
  tasks: tasks.map(({ durable: _durable, ...rest }) => rest)
334146
334160
  };
@@ -334252,7 +334266,7 @@ var init_cronTasks2 = __esm(() => {
334252
334266
  init_json2();
334253
334267
  init_log5();
334254
334268
  init_slowOperations();
334255
- CRON_FILE_REL2 = join126(getConfigDirName(), "scheduled_tasks.json");
334269
+ CRON_FILE_REL2 = join126(getConfigDirNameForProject(), "scheduled_tasks.json");
334256
334270
  DEFAULT_CRON_JITTER_CONFIG2 = {
334257
334271
  recurringFrac: 0.1,
334258
334272
  recurringCapMs: 15 * 60 * 1000,
@@ -345719,7 +345733,7 @@ function getProjectDirsUpToHome2(subdir, cwd) {
345719
345733
  if (normalizePathForComparison2(current) === normalizePathForComparison2(home)) {
345720
345734
  break;
345721
345735
  }
345722
- const claudeSubdir = join130(current, getConfigDirName(), subdir);
345736
+ const claudeSubdir = join130(current, getConfigDirNameForProject(), subdir);
345723
345737
  try {
345724
345738
  statSync10(claudeSubdir);
345725
345739
  dirs.push(claudeSubdir);
@@ -345854,15 +345868,15 @@ var init_markdownConfigLoader = __esm(() => {
345854
345868
  loadMarkdownFilesForSubdir2 = memoize_default(async function(subdir, cwd) {
345855
345869
  const searchStartTime = Date.now();
345856
345870
  const userDir = join130(getAtlasConfigHomeDir3(), subdir);
345857
- const managedDir = join130(getManagedFilePath(), getConfigDirName(), subdir);
345871
+ const managedDir = join130(getManagedFilePath(), getConfigDirNameForProject(), subdir);
345858
345872
  const projectDirs = getProjectDirsUpToHome2(subdir, cwd);
345859
345873
  const gitRoot = findGitRoot2(cwd);
345860
345874
  const canonicalRoot = findCanonicalGitRoot2(cwd);
345861
345875
  if (gitRoot && canonicalRoot && canonicalRoot !== gitRoot) {
345862
- const worktreeSubdir = normalizePathForComparison2(join130(gitRoot, getConfigDirName(), subdir));
345876
+ const worktreeSubdir = normalizePathForComparison2(join130(gitRoot, getConfigDirNameForProject(), subdir));
345863
345877
  const worktreeHasSubdir = projectDirs.some((dir) => normalizePathForComparison2(dir) === worktreeSubdir);
345864
345878
  if (!worktreeHasSubdir) {
345865
- const mainClaudeSubdir = join130(canonicalRoot, getConfigDirName(), subdir);
345879
+ const mainClaudeSubdir = join130(canonicalRoot, getConfigDirNameForProject(), subdir);
345866
345880
  if (!projectDirs.includes(mainClaudeSubdir)) {
345867
345881
  projectDirs.push(mainClaudeSubdir);
345868
345882
  }
@@ -360101,8 +360115,8 @@ async function getInstallationPath() {
360101
360115
  }
360102
360116
  } catch {}
360103
360117
  try {
360104
- await getFsImplementation2().stat(join138(homedir34(), ".local/bingetConfigDirName()"));
360105
- return join138(homedir34(), ".local/bingetConfigDirName()");
360118
+ await getFsImplementation2().stat(join138(homedir34(), ".local/bin/atlas"));
360119
+ return join138(homedir34(), ".local/bin/atlas");
360106
360120
  } catch {}
360107
360121
  return "native";
360108
360122
  }
@@ -361128,7 +361142,7 @@ async function checkInstall(force = false) {
361128
361142
  } catch (e) {
361129
361143
  if (isENOENT2(e)) {
361130
361144
  messages.push({
361131
- message: `installMethod is native, butgetConfigDirName() command not found at ${dirs.executable}`,
361145
+ message: `installMethod is native, but atlas command not found at ${dirs.executable}`,
361132
361146
  userActionRequired: true,
361133
361147
  type: "error"
361134
361148
  });
@@ -370473,7 +370487,7 @@ function Doctor(t0) {
370473
370487
  getDoctorDiagnostic().then(setDiagnostic);
370474
370488
  (async () => {
370475
370489
  const userAgentsDir = join142(getAtlasConfigHomeDir3(), "agents");
370476
- const projectAgentsDir = join142(getOriginalCwd(), "getConfigDirName()", "agents");
370490
+ const projectAgentsDir = join142(getOriginalCwd(), getConfigDirNameForProject(), "agents");
370477
370491
  const {
370478
370492
  activeAgents,
370479
370493
  allAgents,
@@ -394928,7 +394942,7 @@ function SkillsMenu(t0) {
394928
394942
  t2 = $[5];
394929
394943
  }
394930
394944
  const handleCancel = t2;
394931
- const configDirName = getConfigDirName();
394945
+ const configDirName = getConfigDirNameForProject();
394932
394946
  if (skills.length === 0) {
394933
394947
  let t3;
394934
394948
  if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
@@ -405184,7 +405198,7 @@ var AGENT_PATHS;
405184
405198
  var init_types16 = __esm(() => {
405185
405199
  init_configDir();
405186
405200
  AGENT_PATHS = {
405187
- FOLDER_NAME: getConfigDirName(),
405201
+ FOLDER_NAME: getConfigDirNameForProject(),
405188
405202
  AGENTS_DIR: "agents"
405189
405203
  };
405190
405204
  });
@@ -409120,7 +409134,7 @@ function LocationStep() {
409120
409134
  updateWizardData,
409121
409135
  cancel
409122
409136
  } = useWizard();
409123
- const configDirName = getConfigDirName();
409137
+ const configDirName = getConfigDirNameForProject();
409124
409138
  let t0;
409125
409139
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
409126
409140
  t0 = {
@@ -409243,7 +409257,7 @@ function MemoryStep() {
409243
409257
  }
409244
409258
  useKeybinding("confirm:no", goBack, t0);
409245
409259
  const isUserScope = wizardData.location === "userSettings";
409246
- const configDirName = getConfigDirName();
409260
+ const configDirName = getConfigDirNameForProject();
409247
409261
  let t1;
409248
409262
  if ($[1] !== isUserScope) {
409249
409263
  t1 = isUserScope ? [{
@@ -421542,7 +421556,7 @@ async function getWatchablePaths() {
421542
421556
  } catch {}
421543
421557
  }
421544
421558
  for (const dir of getAdditionalDirectoriesForClaudeMd()) {
421545
- const additionalSkillsPath = platformPath2.join(dir, getConfigDirName(), "skills");
421559
+ const additionalSkillsPath = platformPath2.join(dir, getConfigDirNameForProject(), "skills");
421546
421560
  try {
421547
421561
  await fs.stat(additionalSkillsPath);
421548
421562
  paths.push(additionalSkillsPath);
@@ -434342,7 +434356,7 @@ function normalizeCaseForComparison2(path) {
434342
434356
  function getClaudeSkillScope(filePath) {
434343
434357
  const absolutePath = expandPath2(filePath);
434344
434358
  const absolutePathLower = normalizeCaseForComparison2(absolutePath);
434345
- const configDir = getConfigDirName();
434359
+ const configDir = getConfigDirNameForProject();
434346
434360
  const bases = [
434347
434361
  {
434348
434362
  dir: expandPath2(join167(getOriginalCwd(), configDir, "skills")),
@@ -434395,7 +434409,7 @@ function getSettingsPaths3() {
434395
434409
  function isAtlasSettingsPath2(filePath) {
434396
434410
  const expandedPath = expandPath2(filePath);
434397
434411
  const normalizedPath = normalizeCaseForComparison2(expandedPath);
434398
- if (normalizedPath.endsWith(`${sep38}getConfigDirName()${sep38}settings.json`) || normalizedPath.endsWith(`${sep38}getConfigDirName()${sep38}settings.local.json`)) {
434412
+ if (normalizedPath.endsWith(`${sep38}getConfigDirNameForProject()${sep38}settings.json`) || normalizedPath.endsWith(`${sep38}getConfigDirNameForProject()${sep38}settings.local.json`)) {
434399
434413
  return true;
434400
434414
  }
434401
434415
  return getSettingsPaths3().some((settingsPath) => normalizeCaseForComparison2(settingsPath) === normalizedPath);
@@ -434404,9 +434418,9 @@ function isClaudeConfigFilePath2(filePath) {
434404
434418
  if (isAtlasSettingsPath2(filePath)) {
434405
434419
  return true;
434406
434420
  }
434407
- const commandsDir = join167(getOriginalCwd(), getConfigDirName(), "commands");
434408
- const agentsDir = join167(getOriginalCwd(), getConfigDirName(), "agents");
434409
- const skillsDir = join167(getOriginalCwd(), getConfigDirName(), "skills");
434421
+ const commandsDir = join167(getOriginalCwd(), getConfigDirNameForProject(), "commands");
434422
+ const agentsDir = join167(getOriginalCwd(), getConfigDirNameForProject(), "agents");
434423
+ const skillsDir = join167(getOriginalCwd(), getConfigDirNameForProject(), "skills");
434410
434424
  return pathInWorkingPath2(filePath, commandsDir) || pathInWorkingPath2(filePath, agentsDir) || pathInWorkingPath2(filePath, skillsDir);
434411
434425
  }
434412
434426
  function isSessionPlanFile(absolutePath) {
@@ -434434,10 +434448,10 @@ function isScratchpadEnabled() {
434434
434448
  }
434435
434449
  function getAtlasTempDirName2() {
434436
434450
  if (getPlatform3() === "windows") {
434437
- return getConfigDirName();
434451
+ return getConfigDirNameForProject();
434438
434452
  }
434439
434453
  const uid = process.getuid?.() ?? 0;
434440
- return `${getConfigDirName()}-${uid}`;
434454
+ return `${getConfigDirNameForProject()}-${uid}`;
434441
434455
  }
434442
434456
  function getProjectTempDir2() {
434443
434457
  return join167(getAtlasTempDir2(), sanitizePath3(getOriginalCwd())) + sep38;
@@ -434476,7 +434490,7 @@ function isDangerousFilePathToAutoEdit2(path) {
434476
434490
  if (normalizedSegment !== normalizeCaseForComparison2(dir)) {
434477
434491
  continue;
434478
434492
  }
434479
- if (dir === getConfigDirName()) {
434493
+ if (dir === getConfigDirNameForProject()) {
434480
434494
  const nextSegment = pathSegments[i + 1];
434481
434495
  if (nextSegment && normalizeCaseForComparison2(nextSegment) === "worktrees") {
434482
434496
  break;
@@ -435073,7 +435087,7 @@ function checkEditableInternalPath2(absolutePath, input) {
435073
435087
  }
435074
435088
  };
435075
435089
  }
435076
- if (normalizeCaseForComparison2(normalizedPath) === normalizeCaseForComparison2(join167(getOriginalCwd(), getConfigDirName(), "launch.json"))) {
435090
+ if (normalizeCaseForComparison2(normalizedPath) === normalizeCaseForComparison2(join167(getOriginalCwd(), getConfigDirNameForProject(), "launch.json"))) {
435077
435091
  return {
435078
435092
  behavior: "allow",
435079
435093
  updatedInput: input,
@@ -435248,7 +435262,7 @@ var init_filesystem2 = __esm(() => {
435248
435262
  ".git",
435249
435263
  ".vscode",
435250
435264
  ".idea",
435251
- getConfigDirName()
435265
+ getConfigDirNameForProject()
435252
435266
  ];
435253
435267
  DIR_SEP2 = posix9.sep;
435254
435268
  getAtlasTempDir2 = memoize_default(function getAtlasTempDir() {
@@ -440698,7 +440712,7 @@ function defaultSandboxDeps() {
440698
440712
  getPlatform: getPlatform3,
440699
440713
  getAdditionalDirectories: getAdditionalDirectoriesForClaudeMd,
440700
440714
  onSettingsChange: (cb) => settingsChangeDetector.subscribe(cb),
440701
- getConfigDirName,
440715
+ getConfigDirName: getConfigDirNameForProject,
440702
440716
  getAtlasTempDir: () => getAtlasTempDir2(),
440703
440717
  getManagedSettingsDropInDir: () => getManagedSettingsDropInDir2(),
440704
440718
  updateSettingsForSource: updateSettingsForSource2,
@@ -441390,14 +441404,14 @@ async function getMemoryFilesForNestedDirectory(dir, targetPath, processedPaths)
441390
441404
  if (isSettingSourceEnabled2("projectSettings")) {
441391
441405
  const projectPath = findMemoryFile(dir);
441392
441406
  result.push(...await processMemoryFile(projectPath, "Project", processedPaths, false));
441393
- const dotClaudePath = findMemoryFile(join172(dir, getConfigDirName()));
441407
+ const dotClaudePath = findMemoryFile(join172(dir, getConfigDirNameForProject()));
441394
441408
  result.push(...await processMemoryFile(dotClaudePath, "Project", processedPaths, false));
441395
441409
  }
441396
441410
  if (isSettingSourceEnabled2("localSettings")) {
441397
441411
  const localPath = join172(dir, "CLAUDE.local.md");
441398
441412
  result.push(...await processMemoryFile(localPath, "Local", processedPaths, false));
441399
441413
  }
441400
- const rulesDir = join172(dir, getConfigDirName(), "rules");
441414
+ const rulesDir = join172(dir, getConfigDirNameForProject(), "rules");
441401
441415
  const unconditionalProcessedPaths = new Set(processedPaths);
441402
441416
  result.push(...await processMdRules({
441403
441417
  rulesDir,
@@ -441413,7 +441427,7 @@ async function getMemoryFilesForNestedDirectory(dir, targetPath, processedPaths)
441413
441427
  return result;
441414
441428
  }
441415
441429
  async function getConditionalRulesForCwdLevelDirectory(dir, targetPath, processedPaths) {
441416
- const rulesDir = join172(dir, getConfigDirName(), "rules");
441430
+ const rulesDir = join172(dir, getConfigDirNameForProject(), "rules");
441417
441431
  return processConditionedMdRules(targetPath, rulesDir, "Project", processedPaths, false);
441418
441432
  }
441419
441433
  async function processConditionedMdRules(targetPath, rulesDir, type, processedPaths, includeExternal) {
@@ -441669,9 +441683,9 @@ var init_memoryFiles = __esm(() => {
441669
441683
  if (isSettingSourceEnabled2("projectSettings") && !skipProject) {
441670
441684
  const projectPath = findMemoryFile(dir);
441671
441685
  result.push(...await processMemoryFile(projectPath, "Project", processedPaths, includeExternal));
441672
- const dotClaudePath = findMemoryFile(join172(dir, getConfigDirName()));
441686
+ const dotClaudePath = findMemoryFile(join172(dir, getConfigDirNameForProject()));
441673
441687
  result.push(...await processMemoryFile(dotClaudePath, "Project", processedPaths, includeExternal));
441674
- const rulesDir = join172(dir, getConfigDirName(), "rules");
441688
+ const rulesDir = join172(dir, getConfigDirNameForProject(), "rules");
441675
441689
  result.push(...await processMdRules({
441676
441690
  rulesDir,
441677
441691
  type: "Project",
@@ -441690,9 +441704,9 @@ var init_memoryFiles = __esm(() => {
441690
441704
  for (const dir of additionalDirs) {
441691
441705
  const projectPath = findMemoryFile(dir);
441692
441706
  result.push(...await processMemoryFile(projectPath, "Project", processedPaths, includeExternal));
441693
- const dotClaudePath = findMemoryFile(join172(dir, getConfigDirName()));
441707
+ const dotClaudePath = findMemoryFile(join172(dir, getConfigDirNameForProject()));
441694
441708
  result.push(...await processMemoryFile(dotClaudePath, "Project", processedPaths, includeExternal));
441695
- const rulesDir = join172(dir, getConfigDirName(), "rules");
441709
+ const rulesDir = join172(dir, getConfigDirNameForProject(), "rules");
441696
441710
  result.push(...await processMdRules({
441697
441711
  rulesDir,
441698
441712
  type: "Project",
@@ -450327,7 +450341,7 @@ import { homedir as homedir40 } from "os";
450327
450341
  import { basename as basename54, join as join173, sep as sep40 } from "path";
450328
450342
  function isInClaudeFolder(filePath) {
450329
450343
  const absolutePath = expandPath2(filePath);
450330
- const claudeFolderPath = expandPath2(`${getOriginalCwd()}/${getConfigDirName()}`);
450344
+ const claudeFolderPath = expandPath2(`${getOriginalCwd()}/${getConfigDirNameForProject()}`);
450331
450345
  const normalizedAbsolutePath = normalizeCaseForComparison2(absolutePath);
450332
450346
  const normalizedClaudeFolderPath = normalizeCaseForComparison2(claudeFolderPath);
450333
450347
  return normalizedAbsolutePath.startsWith(normalizedClaudeFolderPath + sep40.toLowerCase()) || normalizedAbsolutePath.startsWith(normalizedClaudeFolderPath + "/");
@@ -471675,7 +471689,7 @@ async function applySkillImprovement(skillName, updates) {
471675
471689
  return;
471676
471690
  const { join } = await import("path");
471677
471691
  const fs = await import("fs/promises");
471678
- const filePath = join(getCwd(), getConfigDirName(), "skills", skillName, "SKILL.md");
471692
+ const filePath = join(getCwd(), getConfigDirNameForProject(), "skills", skillName, "SKILL.md");
471679
471693
  let currentContent;
471680
471694
  try {
471681
471695
  currentContent = await fs.readFile(filePath, "utf-8");
@@ -484047,7 +484061,7 @@ var init_cronTasksLock2 = __esm(() => {
484047
484061
  init_genericProcessUtils();
484048
484062
  init_json2();
484049
484063
  init_slowOperations();
484050
- LOCK_FILE_REL2 = join182(getConfigDirName(), "scheduled_tasks.lock");
484064
+ LOCK_FILE_REL2 = join182(getConfigDirNameForProject(), "scheduled_tasks.lock");
484051
484065
  schedulerLockSchema2 = lazySchema2(() => object({
484052
484066
  sessionId: string2(),
484053
484067
  pid: number2(),
@@ -501023,6 +501037,7 @@ init_cli();
501023
501037
  // src/atlascode/compose.ts
501024
501038
  init_sandbox();
501025
501039
  init_modelprovider2();
501040
+ init_shared();
501026
501041
  init_memory();
501027
501042
  init_executor();
501028
501043
  init_permissions3();
@@ -501174,7 +501189,7 @@ function createInMemorySandboxDeps() {
501174
501189
  getPlatform: () => resolvePlatform(),
501175
501190
  getAdditionalDirectories: () => [],
501176
501191
  onSettingsChange: () => () => {},
501177
- getConfigDirName: () => getConfigDirName(),
501192
+ getConfigDirName: () => getConfigDirNameForProject(),
501178
501193
  getAtlasTempDir: () => tempDir,
501179
501194
  getManagedSettingsDropInDir: () => "/etc/atlas/managed_settings.json",
501180
501195
  updateSettingsForSource: (source, values) => {
@@ -501260,6 +501275,7 @@ function createCoreDependencies() {
501260
501275
  getCwd: getCwdState
501261
501276
  });
501262
501277
  setSettingsPathsProvider(getSettingsPaths2);
501278
+ setConfigDirNameProvider(() => getActiveProductDefinition().configDirName);
501263
501279
  setDiskOutputEnv(createDiskOutputEnv());
501264
501280
  setHooksBootstrapEnv({
501265
501281
  getSessionId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlasharness/atlascode",
3
- "version": "0.1.98",
3
+ "version": "0.1.99",
4
4
  "description": "AtlasCode — Coding Agent for the domestic computing ecosystem (Ascend NPU + domestic LLM backends)",
5
5
  "homepage": "https://www.atlaswork.cn/",
6
6
  "bin": {