@vionwilliams/agent-os 1.0.0-alpha.18 → 1.0.0-alpha.20

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 (3) hide show
  1. package/README.md +2 -2
  2. package/dist/cli.js +169 -92
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 智能任务通用工作系统 · 多模型路由 + 意图编排 + 多智能体协调 + DataHub + 可编程面板 + LLM 知识编译器
4
4
 
5
- **Status**: `1.0.0-alpha.18` · Beta 测试版 · npm 公共包可用
5
+ **Status**: `1.0.0-alpha.20` · Beta 测试版 · npm 公共包可用
6
6
 
7
7
  ---
8
8
 
@@ -64,7 +64,7 @@ bash install-agent-os-mac.sh
64
64
  agent-os --version
65
65
  ```
66
66
 
67
- 成功时会显示 `1.0.0-alpha.18 (Agent-OS)` 或更新版本。
67
+ 成功时会显示 `1.0.0-alpha.20 (Agent-OS)` 或更新版本。
68
68
 
69
69
  然后打开 Agent-OS:
70
70
 
package/dist/cli.js CHANGED
@@ -93307,7 +93307,7 @@ var init_system = __esm(() => {
93307
93307
  AGENT_SDK_CLAUDE_CODE_PRESET_PREFIX,
93308
93308
  AGENT_SDK_PREFIX
93309
93309
  ];
93310
- AGENT_OS_VERSION = typeof MACRO !== "undefined" ? "1.0.0-alpha.18" : "dev";
93310
+ AGENT_OS_VERSION = typeof MACRO !== "undefined" ? "1.0.0-alpha.20" : "dev";
93311
93311
  CLI_SYSPROMPT_PREFIXES = new Set(CLI_SYSPROMPT_PREFIX_VALUES);
93312
93312
  });
93313
93313
 
@@ -93751,7 +93751,7 @@ function getClaudeCodeUserAgent() {
93751
93751
  }
93752
93752
  var AGENT_OS_VERSION2;
93753
93753
  var init_userAgent = __esm(() => {
93754
- AGENT_OS_VERSION2 = typeof MACRO !== "undefined" ? "1.0.0-alpha.18" : "dev";
93754
+ AGENT_OS_VERSION2 = typeof MACRO !== "undefined" ? "1.0.0-alpha.20" : "dev";
93755
93755
  });
93756
93756
 
93757
93757
  // src/utils/http.ts
@@ -93832,7 +93832,7 @@ var init_http2 = __esm(() => {
93832
93832
  init_auth();
93833
93833
  init_userAgent();
93834
93834
  init_workloadContext();
93835
- AGENT_OS_VERSION3 = typeof MACRO !== "undefined" ? "1.0.0-alpha.18" : "dev";
93835
+ AGENT_OS_VERSION3 = typeof MACRO !== "undefined" ? "1.0.0-alpha.20" : "dev";
93836
93836
  });
93837
93837
 
93838
93838
  // src/services/api/router/userProviders.ts
@@ -108830,8 +108830,10 @@ function convertToSandboxRuntimeConfig(settings) {
108830
108830
  denyWrite.push(resolve12(cwd2, ".claude", "settings.json"));
108831
108831
  denyWrite.push(resolve12(cwd2, ".claude", "settings.local.json"));
108832
108832
  }
108833
+ denyWrite.push(resolve12(originalCwd, ".agent-os", "skills"));
108833
108834
  denyWrite.push(resolve12(originalCwd, ".claude", "skills"));
108834
108835
  if (cwd2 !== originalCwd) {
108836
+ denyWrite.push(resolve12(cwd2, ".agent-os", "skills"));
108835
108837
  denyWrite.push(resolve12(cwd2, ".claude", "skills"));
108836
108838
  }
108837
108839
  bareGitRepoScrubPaths.length = 0;
@@ -207166,7 +207168,7 @@ var init_sessionStorage = __esm(() => {
207166
207168
  init_settings2();
207167
207169
  init_slowOperations();
207168
207170
  init_uuid();
207169
- VERSION4 = typeof MACRO !== "undefined" ? "1.0.0-alpha.18" : "unknown";
207171
+ VERSION4 = typeof MACRO !== "undefined" ? "1.0.0-alpha.20" : "unknown";
207170
207172
  MAX_TOMBSTONE_REWRITE_BYTES = 50 * 1024 * 1024;
207171
207173
  SKIP_FIRST_PROMPT_PATTERN = /^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;
207172
207174
  EPHEMERAL_PROGRESS_TYPES = new Set([
@@ -207296,7 +207298,7 @@ function Feedback({
207296
207298
  platform: env3.platform,
207297
207299
  gitRepo: envInfo.isGit,
207298
207300
  terminal: env3.terminal,
207299
- version: "1.0.0-alpha.18",
207301
+ version: "1.0.0-alpha.20",
207300
207302
  transcript: normalizeMessagesForAPI(messages),
207301
207303
  errors: sanitizedErrors,
207302
207304
  lastApiRequest: getLastAPIRequest(),
@@ -207480,7 +207482,7 @@ function Feedback({
207480
207482
  ", ",
207481
207483
  env3.terminal,
207482
207484
  ", v",
207483
- "1.0.0-alpha.18"
207485
+ "1.0.0-alpha.20"
207484
207486
  ]
207485
207487
  })
207486
207488
  ]
@@ -207586,7 +207588,7 @@ ${sanitizedDescription}
207586
207588
  ` + `**Environment Info**
207587
207589
  ` + `- Platform: ${env3.platform}
207588
207590
  ` + `- Terminal: ${env3.terminal}
207589
- ` + `- Version: ${"1.0.0-alpha.18"}
207591
+ ` + `- Version: ${"1.0.0-alpha.20"}
207590
207592
  ` + `- Feedback ID: ${feedbackId}
207591
207593
  ` + `
207592
207594
  **Errors**
@@ -259971,8 +259973,8 @@ var init_toolAnalytics = __esm(() => {
259971
259973
  init_agentContext();
259972
259974
  init_slowOperations();
259973
259975
  init_teammate();
259974
- AGENT_OS_VERSION4 = typeof MACRO !== "undefined" ? "1.0.0-alpha.18" : "dev";
259975
- AGENT_OS_BUILD_TIME = typeof MACRO !== "undefined" ? "2026-05-20T10:43:03Z" : undefined;
259976
+ AGENT_OS_VERSION4 = typeof MACRO !== "undefined" ? "1.0.0-alpha.20" : "dev";
259977
+ AGENT_OS_BUILD_TIME = typeof MACRO !== "undefined" ? "2026-05-20T19:41:00Z" : undefined;
259976
259978
  BUILTIN_MCP_SERVER_NAMES = new Set([]);
259977
259979
  TOOL_INPUT_MAX_JSON_CHARS = 4 * 1024;
259978
259980
  FILE_COMMANDS = new Set([
@@ -270151,6 +270153,37 @@ import {
270151
270153
  sep as pathSep,
270152
270154
  relative as relative8
270153
270155
  } from "path";
270156
+ function getProjectSkillsPath() {
270157
+ return join64(".agent-os", "skills");
270158
+ }
270159
+ function getProjectSkillsPathForRoot(root2) {
270160
+ return join64(root2, ".agent-os", "skills");
270161
+ }
270162
+ function getLegacyProjectSkillsPathForRoot(root2) {
270163
+ return join64(root2, ".claude", "skills");
270164
+ }
270165
+ function getAdditionalSkillsPaths(root2) {
270166
+ return [
270167
+ getProjectSkillsPathForRoot(root2),
270168
+ getLegacyProjectSkillsPathForRoot(root2)
270169
+ ];
270170
+ }
270171
+ function getContainingProjectSkillsRoot(filePath, cwd2) {
270172
+ const relativePath = relative8(cwd2, filePath);
270173
+ if (!relativePath || relativePath.startsWith("..") || isAbsolute14(relativePath)) {
270174
+ return null;
270175
+ }
270176
+ const parts = relativePath.split(pathSep).filter(Boolean);
270177
+ for (let i4 = 0;i4 < parts.length - 2; i4++) {
270178
+ const configDir = parts[i4];
270179
+ const skillsDir = parts[i4 + 1];
270180
+ const skillName = parts[i4 + 2];
270181
+ if ((configDir === ".agent-os" || configDir === ".claude") && skillsDir === "skills" && skillName) {
270182
+ return join64(cwd2, ...parts.slice(0, i4 + 2));
270183
+ }
270184
+ }
270185
+ return null;
270186
+ }
270154
270187
  function getSkillsPath(source, dir) {
270155
270188
  switch (source) {
270156
270189
  case "policySettings":
@@ -270158,7 +270191,7 @@ function getSkillsPath(source, dir) {
270158
270191
  case "userSettings":
270159
270192
  return join64(getClaudeConfigHomeDir(), dir);
270160
270193
  case "projectSettings":
270161
- return `.claude/${dir}`;
270194
+ return dir === "skills" ? getProjectSkillsPath() : `.claude/${dir}`;
270162
270195
  case "plugin":
270163
270196
  return "plugin";
270164
270197
  default:
@@ -270480,10 +270513,21 @@ async function discoverSkillDirsForPaths(filePaths, cwd2) {
270480
270513
  const resolvedCwd = cwd2.endsWith(pathSep) ? cwd2.slice(0, -1) : cwd2;
270481
270514
  const newDirs = [];
270482
270515
  for (const filePath of filePaths) {
270516
+ const containingSkillsRoot = getContainingProjectSkillsRoot(filePath, resolvedCwd);
270517
+ if (containingSkillsRoot !== null && !dynamicSkillDirs.has(containingSkillsRoot)) {
270518
+ dynamicSkillDirs.add(containingSkillsRoot);
270519
+ newDirs.push(containingSkillsRoot);
270520
+ }
270483
270521
  let currentDir = dirname27(filePath);
270484
270522
  while (currentDir.startsWith(resolvedCwd + pathSep)) {
270485
- const skillDir = join64(currentDir, ".claude", "skills");
270486
- if (!dynamicSkillDirs.has(skillDir)) {
270523
+ const skillDirs = [
270524
+ getProjectSkillsPathForRoot(currentDir),
270525
+ getLegacyProjectSkillsPathForRoot(currentDir)
270526
+ ];
270527
+ for (const skillDir of skillDirs) {
270528
+ if (dynamicSkillDirs.has(skillDir)) {
270529
+ continue;
270530
+ }
270487
270531
  dynamicSkillDirs.add(skillDir);
270488
270532
  try {
270489
270533
  await fs6.stat(skillDir);
@@ -270601,7 +270645,7 @@ var init_loadSkillsDir = __esm(() => {
270601
270645
  logForDebugging(`[bare] Skipping skill dir discovery (${additionalDirs.length === 0 ? "no --add-dir" : "projectSettings disabled or skillsLocked"})`);
270602
270646
  return [];
270603
270647
  }
270604
- const additionalSkillsNested2 = await Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir(join64(dir, ".claude", "skills"), "projectSettings")));
270648
+ const additionalSkillsNested2 = await Promise.all(additionalDirs.flatMap((dir) => getAdditionalSkillsPaths(dir)).map((dir) => loadSkillsFromSkillsDir(dir, "projectSettings")));
270605
270649
  return additionalSkillsNested2.flat().map((s2) => s2.skill);
270606
270650
  }
270607
270651
  const [
@@ -270614,7 +270658,7 @@ var init_loadSkillsDir = __esm(() => {
270614
270658
  isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_POLICY_SKILLS) ? Promise.resolve([]) : loadSkillsFromSkillsDir(managedSkillsDir, "policySettings"),
270615
270659
  isSettingSourceEnabled("userSettings") && !skillsLocked ? loadSkillsFromSkillsDir(userSkillsDir, "userSettings") : Promise.resolve([]),
270616
270660
  projectSettingsEnabled ? Promise.all(projectSkillsDirs.map((dir) => loadSkillsFromSkillsDir(dir, "projectSettings"))) : Promise.resolve([]),
270617
- projectSettingsEnabled ? Promise.all(additionalDirs.map((dir) => loadSkillsFromSkillsDir(join64(dir, ".claude", "skills"), "projectSettings"))) : Promise.resolve([]),
270661
+ projectSettingsEnabled ? Promise.all(additionalDirs.flatMap((dir) => getAdditionalSkillsPaths(dir)).map((dir) => loadSkillsFromSkillsDir(dir, "projectSettings"))) : Promise.resolve([]),
270618
270662
  skillsLocked ? Promise.resolve([]) : loadSkillsFromCommandsDir(cwd2)
270619
270663
  ]);
270620
270664
  const allSkillsWithPaths = [
@@ -274576,7 +274620,7 @@ function getInstallationEnv() {
274576
274620
  return;
274577
274621
  }
274578
274622
  function getClaudeCodeVersion() {
274579
- return "1.0.0-alpha.18";
274623
+ return "1.0.0-alpha.20";
274580
274624
  }
274581
274625
  async function getInstalledVSCodeExtensionVersion(command) {
274582
274626
  const { stdout } = await execFileNoThrow(command, ["--list-extensions", "--show-versions"], {
@@ -297294,7 +297338,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
297294
297338
  const client = new Client({
297295
297339
  name: "claude-code",
297296
297340
  title: "Agent-OS",
297297
- version: "1.0.0-alpha.18",
297341
+ version: "1.0.0-alpha.20",
297298
297342
  description: "Anthropic's agentic coding tool",
297299
297343
  websiteUrl: PRODUCT_URL
297300
297344
  }, {
@@ -297647,7 +297691,7 @@ var init_client4 = __esm(() => {
297647
297691
  const client = new Client({
297648
297692
  name: "claude-code",
297649
297693
  title: "Agent-OS",
297650
- version: "1.0.0-alpha.18",
297694
+ version: "1.0.0-alpha.20",
297651
297695
  description: "Anthropic's agentic coding tool",
297652
297696
  websiteUrl: PRODUCT_URL
297653
297697
  }, {
@@ -325287,16 +325331,6 @@ String: ${old_string}`,
325287
325331
  const fs7 = getFsImplementation();
325288
325332
  const absoluteFilePath = expandPath(file_path);
325289
325333
  const cwd2 = getCwd();
325290
- if (!isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)) {
325291
- const newSkillDirs = await discoverSkillDirsForPaths([absoluteFilePath], cwd2);
325292
- if (newSkillDirs.length > 0) {
325293
- for (const dir of newSkillDirs) {
325294
- dynamicSkillDirTriggers?.add(dir);
325295
- }
325296
- addSkillDirectories(newSkillDirs).catch(() => {});
325297
- }
325298
- activateConditionalSkillsForPaths([absoluteFilePath], cwd2);
325299
- }
325300
325334
  await diagnosticTracker.beforeFileEdited(absoluteFilePath);
325301
325335
  await fs7.mkdir(dirname41(absoluteFilePath));
325302
325336
  if (fileHistoryEnabled()) {
@@ -325329,6 +325363,20 @@ String: ${old_string}`,
325329
325363
  replaceAll: replace_all
325330
325364
  });
325331
325365
  writeTextContent(absoluteFilePath, updatedFile, encoding, endings);
325366
+ if (!isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE)) {
325367
+ const newSkillDirs = await discoverSkillDirsForPaths([absoluteFilePath], cwd2);
325368
+ if (newSkillDirs.length > 0) {
325369
+ for (const dir of newSkillDirs) {
325370
+ dynamicSkillDirTriggers?.add(dir);
325371
+ }
325372
+ try {
325373
+ await addSkillDirectories(newSkillDirs);
325374
+ } catch (error41) {
325375
+ logError2(error41);
325376
+ }
325377
+ }
325378
+ activateConditionalSkillsForPaths([absoluteFilePath], cwd2);
325379
+ }
325332
325380
  const lspManager = getLspServerManager();
325333
325381
  if (lspManager) {
325334
325382
  clearDeliveredDiagnosticsForFile(`file://${absoluteFilePath}`);
@@ -325994,14 +326042,6 @@ var init_FileWriteTool = __esm(() => {
325994
326042
  const fullFilePath = expandPath(file_path);
325995
326043
  const dir = dirname42(fullFilePath);
325996
326044
  const cwd2 = getCwd();
325997
- const newSkillDirs = await discoverSkillDirsForPaths([fullFilePath], cwd2);
325998
- if (newSkillDirs.length > 0) {
325999
- for (const dir2 of newSkillDirs) {
326000
- dynamicSkillDirTriggers?.add(dir2);
326001
- }
326002
- addSkillDirectories(newSkillDirs).catch(() => {});
326003
- }
326004
- activateConditionalSkillsForPaths([fullFilePath], cwd2);
326005
326045
  await diagnosticTracker.beforeFileEdited(fullFilePath);
326006
326046
  await getFsImplementation().mkdir(dir);
326007
326047
  if (fileHistoryEnabled()) {
@@ -326030,6 +326070,18 @@ var init_FileWriteTool = __esm(() => {
326030
326070
  const enc = meta?.encoding ?? "utf8";
326031
326071
  const oldContent = meta?.content ?? null;
326032
326072
  writeTextContent(fullFilePath, content, enc, "LF");
326073
+ const newSkillDirs = await discoverSkillDirsForPaths([fullFilePath], cwd2);
326074
+ if (newSkillDirs.length > 0) {
326075
+ for (const dir2 of newSkillDirs) {
326076
+ dynamicSkillDirTriggers?.add(dir2);
326077
+ }
326078
+ try {
326079
+ await addSkillDirectories(newSkillDirs);
326080
+ } catch (error41) {
326081
+ logError2(error41);
326082
+ }
326083
+ }
326084
+ activateConditionalSkillsForPaths([fullFilePath], cwd2);
326033
326085
  const lspManager = getLspServerManager();
326034
326086
  if (lspManager) {
326035
326087
  clearDeliveredDiagnosticsForFile(`file://${fullFilePath}`);
@@ -416284,7 +416336,7 @@ function getInvokedBinary() {
416284
416336
  async function getDoctorDiagnostic() {
416285
416337
  return {
416286
416338
  installationType: "package-manager",
416287
- version: "1.0.0-alpha.18",
416339
+ version: "1.0.0-alpha.20",
416288
416340
  installationPath: process.argv[1] ?? "",
416289
416341
  invokedBinary: getInvokedBinary(),
416290
416342
  configInstallMethod: "not set",
@@ -416689,7 +416741,7 @@ function buildPrimarySection() {
416689
416741
  });
416690
416742
  return [{
416691
416743
  label: "Version",
416692
- value: "1.0.0-alpha.18"
416744
+ value: "1.0.0-alpha.20"
416693
416745
  }, {
416694
416746
  label: "Session name",
416695
416747
  value: nameValue
@@ -420332,7 +420384,7 @@ function Config({
420332
420384
  }
420333
420385
  })
420334
420386
  }) : showSubmenu === "ChannelDowngrade" ? /* @__PURE__ */ jsx_runtime169.jsx(ChannelDowngradeDialog, {
420335
- currentVersion: "1.0.0-alpha.18",
420387
+ currentVersion: "1.0.0-alpha.20",
420336
420388
  onChoice: (choice) => {
420337
420389
  setShowSubmenu(null);
420338
420390
  setTabsHidden(false);
@@ -420344,7 +420396,7 @@ function Config({
420344
420396
  autoUpdatesChannel: "stable"
420345
420397
  };
420346
420398
  if (choice === "stay") {
420347
- newSettings.minimumVersion = "1.0.0-alpha.18";
420399
+ newSettings.minimumVersion = "1.0.0-alpha.20";
420348
420400
  }
420349
420401
  updateSettingsForSource("userSettings", newSettings);
420350
420402
  setSettingsData((prev_27) => ({
@@ -428335,7 +428387,7 @@ function HelpV2(t0) {
428335
428387
  let t6;
428336
428388
  if ($3[31] !== tabs) {
428337
428389
  t6 = /* @__PURE__ */ jsx_runtime195.jsx(Tabs, {
428338
- title: `Agent-OS v${"1.0.0-alpha.18"}`,
428390
+ title: `Agent-OS v${"1.0.0-alpha.20"}`,
428339
428391
  color: "professionalBlue",
428340
428392
  defaultTab: "general",
428341
428393
  children: tabs
@@ -429664,9 +429716,9 @@ Based on the areas detected in Phase 1, you may need to create multiple verifier
429664
429716
 
429665
429717
  ## Phase 4: Generate Verifier Skill
429666
429718
 
429667
- **All verifier skills are created in the project root's \`.claude/skills/\` directory.** This ensures they are automatically loaded when Agent-OS runs in the project.
429719
+ **All verifier skills are created in the project root's \`.agent-os/skills/\` directory.** This ensures they are automatically loaded when Agent-OS runs in the project.
429668
429720
 
429669
- Write the skill file to \`.claude/skills/<verifier-name>/SKILL.md\`.
429721
+ Write the skill file to \`.agent-os/skills/<verifier-name>/SKILL.md\`.
429670
429722
 
429671
429723
  ### Skill Template Structure
429672
429724
 
@@ -429750,7 +429802,7 @@ allowed-tools:
429750
429802
  ## Phase 5: Confirm Creation
429751
429803
 
429752
429804
  After writing the skill file(s), inform the user:
429753
- 1. Where each skill was created (always in \`.claude/skills/\`)
429805
+ 1. Where each skill was created (always in \`.agent-os/skills/\`)
429754
429806
  2. How the Verify agent will discover them \u2014 the folder name must contain "verifier" (case-insensitive) for automatic discovery
429755
429807
  3. That they can edit the skills to customize them
429756
429808
  4. That they can run /init-verifiers again to add more verifiers for other areas
@@ -431463,7 +431515,7 @@ var init_user = __esm(() => {
431463
431515
  deviceId,
431464
431516
  sessionId: getSessionId(),
431465
431517
  email: getEmail(),
431466
- appVersion: "1.0.0-alpha.18",
431518
+ appVersion: "1.0.0-alpha.20",
431467
431519
  platform: getHostPlatformForAnalytics(),
431468
431520
  organizationUuid,
431469
431521
  accountUuid,
@@ -451714,7 +451766,7 @@ function getAllReleaseNotes(changelogContent = getStoredChangelogFromMemory()) {
451714
451766
  return [];
451715
451767
  }
451716
451768
  }
451717
- async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.0.0-alpha.18") {
451769
+ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.0.0-alpha.20") {
451718
451770
  if (process.env.USER_TYPE === "ant") {
451719
451771
  const changelog = "";
451720
451772
  if (changelog) {
@@ -451741,7 +451793,7 @@ async function checkForReleaseNotes(lastSeenVersion, currentVersion = "1.0.0-alp
451741
451793
  releaseNotes
451742
451794
  };
451743
451795
  }
451744
- function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.0.0-alpha.18") {
451796
+ function checkForReleaseNotesSync(lastSeenVersion, currentVersion = "1.0.0-alpha.20") {
451745
451797
  if (process.env.USER_TYPE === "ant") {
451746
451798
  const changelog = "";
451747
451799
  if (changelog) {
@@ -452868,7 +452920,7 @@ function getRecentActivitySync() {
452868
452920
  return cachedActivity;
452869
452921
  }
452870
452922
  function getLogoDisplayData() {
452871
- const version2 = process.env.DEMO_VERSION ?? "1.0.0-alpha.18";
452923
+ const version2 = process.env.DEMO_VERSION ?? "1.0.0-alpha.20";
452872
452924
  const serverUrl = getDirectConnectServerUrl();
452873
452925
  const displayPath = process.env.DEMO_VERSION ? "/code/claude" : getDisplayPath(getCwd());
452874
452926
  const cwd2 = serverUrl ? `${displayPath} in ${serverUrl.replace(/^https?:\/\//, "")}` : displayPath;
@@ -454083,7 +454135,7 @@ function LogoV2() {
454083
454135
  if ($3[2] === Symbol.for("react.memo_cache_sentinel")) {
454084
454136
  t2 = () => {
454085
454137
  const currentConfig = getGlobalConfig();
454086
- if (currentConfig.lastReleaseNotesSeen === "1.0.0-alpha.18") {
454138
+ if (currentConfig.lastReleaseNotesSeen === "1.0.0-alpha.20") {
454087
454139
  return;
454088
454140
  }
454089
454141
  saveGlobalConfig(_temp328);
@@ -454749,12 +454801,12 @@ function AgentOsPoster() {
454749
454801
  });
454750
454802
  }
454751
454803
  function _temp328(current) {
454752
- if (current.lastReleaseNotesSeen === "1.0.0-alpha.18") {
454804
+ if (current.lastReleaseNotesSeen === "1.0.0-alpha.20") {
454753
454805
  return current;
454754
454806
  }
454755
454807
  return {
454756
454808
  ...current,
454757
- lastReleaseNotesSeen: "1.0.0-alpha.18"
454809
+ lastReleaseNotesSeen: "1.0.0-alpha.20"
454758
454810
  };
454759
454811
  }
454760
454812
  function _temp245(s_0) {
@@ -481331,7 +481383,7 @@ async function captureMemoryDiagnostics(trigger, dumpNumber = 0) {
481331
481383
  smapsRollup,
481332
481384
  platform: process.platform,
481333
481385
  nodeVersion: process.version,
481334
- ccVersion: "1.0.0-alpha.18"
481386
+ ccVersion: "1.0.0-alpha.20"
481335
481387
  };
481336
481388
  }
481337
481389
  async function performHeapDump(trigger = "manual", dumpNumber = 0) {
@@ -481904,7 +481956,7 @@ var init_bridge_kick = __esm(() => {
481904
481956
  var call58 = async () => {
481905
481957
  return {
481906
481958
  type: "text",
481907
- value: `${"1.0.0-alpha.18"} (built ${"2026-05-20T10:43:03Z"})`
481959
+ value: `${"1.0.0-alpha.20"} (built ${"2026-05-20T19:41:00Z"})`
481908
481960
  };
481909
481961
  }, version2, version_default;
481910
481962
  var init_version = __esm(() => {
@@ -491396,7 +491448,7 @@ function generateHtmlReport(data, insights) {
491396
491448
  </html>`;
491397
491449
  }
491398
491450
  function buildExportData(data, insights, facets, remoteStats) {
491399
- const version3 = typeof MACRO !== "undefined" ? "1.0.0-alpha.18" : "unknown";
491451
+ const version3 = typeof MACRO !== "undefined" ? "1.0.0-alpha.20" : "unknown";
491400
491452
  const remote_hosts_collected = remoteStats?.hosts.filter((h3) => h3.sessionCount > 0).map((h3) => h3.name);
491401
491453
  const facets_summary = {
491402
491454
  total: facets.size,
@@ -508556,6 +508608,15 @@ import { statSync as statSync12 } from "fs";
508556
508608
  import { lstat as lstat4, readdir as readdir27, readFile as readFile49, realpath as realpath9, stat as stat38 } from "fs/promises";
508557
508609
  import { homedir as homedir33 } from "os";
508558
508610
  import { dirname as dirname59, join as join143, resolve as resolve46, sep as sep33 } from "path";
508611
+ function getProjectConfigSubdirCandidates(root3, subdir) {
508612
+ if (subdir === "skills") {
508613
+ return [
508614
+ join143(root3, ".agent-os", subdir),
508615
+ join143(root3, ".claude", subdir)
508616
+ ];
508617
+ }
508618
+ return [join143(root3, ".claude", subdir)];
508619
+ }
508559
508620
  function extractDescriptionFromMarkdown(content, defaultDescription = "Custom item") {
508560
508621
  const lines2 = content.split(`
508561
508622
  `);
@@ -508645,13 +508706,15 @@ function getProjectDirsUpToHome(subdir, cwd2) {
508645
508706
  if (normalizePathForComparison(current) === normalizePathForComparison(home)) {
508646
508707
  break;
508647
508708
  }
508648
- const claudeSubdir = join143(current, ".claude", subdir);
508649
- try {
508650
- statSync12(claudeSubdir);
508651
- dirs.push(claudeSubdir);
508652
- } catch (e2) {
508653
- if (!isFsInaccessible(e2))
508654
- throw e2;
508709
+ const candidateSubdirs = getProjectConfigSubdirCandidates(current, subdir);
508710
+ for (const candidateSubdir of candidateSubdirs) {
508711
+ try {
508712
+ statSync12(candidateSubdir);
508713
+ dirs.push(candidateSubdir);
508714
+ } catch (e2) {
508715
+ if (!isFsInaccessible(e2))
508716
+ throw e2;
508717
+ }
508655
508718
  }
508656
508719
  if (gitRoot && normalizePathForComparison(current) === normalizePathForComparison(gitRoot)) {
508657
508720
  break;
@@ -508795,12 +508858,13 @@ var init_markdownConfigLoader = __esm(() => {
508795
508858
  const gitRoot = findGitRoot(cwd2);
508796
508859
  const canonicalRoot = findCanonicalGitRoot(cwd2);
508797
508860
  if (gitRoot && canonicalRoot && canonicalRoot !== gitRoot) {
508798
- const worktreeSubdir = normalizePathForComparison(join143(gitRoot, ".claude", subdir));
508799
- const worktreeHasSubdir = projectDirs.some((dir) => normalizePathForComparison(dir) === worktreeSubdir);
508861
+ const worktreeSubdirs = getProjectConfigSubdirCandidates(gitRoot, subdir).map((dir) => normalizePathForComparison(dir));
508862
+ const worktreeHasSubdir = projectDirs.some((dir) => worktreeSubdirs.includes(normalizePathForComparison(dir)));
508800
508863
  if (!worktreeHasSubdir) {
508801
- const mainClaudeSubdir = join143(canonicalRoot, ".claude", subdir);
508802
- if (!projectDirs.includes(mainClaudeSubdir)) {
508803
- projectDirs.push(mainClaudeSubdir);
508864
+ for (const mainSubdir of getProjectConfigSubdirCandidates(canonicalRoot, subdir)) {
508865
+ if (!projectDirs.includes(mainSubdir)) {
508866
+ projectDirs.push(mainSubdir);
508867
+ }
508804
508868
  }
508805
508869
  }
508806
508870
  }
@@ -514720,6 +514784,14 @@ function getClaudeSkillScope(filePath) {
514720
514784
  const absolutePath = expandPath(filePath);
514721
514785
  const absolutePathLower = normalizeCaseForComparison(absolutePath);
514722
514786
  const bases = [
514787
+ {
514788
+ dir: expandPath(join146(getOriginalCwd(), ".agent-os", "skills")),
514789
+ prefix: "/.agent-os/skills/"
514790
+ },
514791
+ {
514792
+ dir: expandPath(join146(getClaudeConfigHomeDir(), "skills")),
514793
+ prefix: "~/.agent-os/skills/"
514794
+ },
514723
514795
  {
514724
514796
  dir: expandPath(join146(getOriginalCwd(), ".claude", "skills")),
514725
514797
  prefix: "/.claude/skills/"
@@ -515594,7 +515666,7 @@ var init_filesystem = __esm(() => {
515594
515666
  });
515595
515667
  getBundledSkillsRoot = memoize_default(function getBundledSkillsRoot2() {
515596
515668
  const nonce = randomBytes18(16).toString("hex");
515597
- return join146(getClaudeTempDir(), "bundled-skills", "1.0.0-alpha.18", nonce);
515669
+ return join146(getClaudeTempDir(), "bundled-skills", "1.0.0-alpha.20", nonce);
515598
515670
  });
515599
515671
  getResolvedWorkingDirPaths = memoize_default(getPathsForPermissionCheck);
515600
515672
  });
@@ -520825,6 +520897,7 @@ function getSessionSpecificGuidanceSection(enabledTools, skillToolCommands) {
520825
520897
  `For broader codebase exploration and deep research, use the ${AGENT_TOOL_NAME} tool with subagent_type=${EXPLORE_AGENT.agentType}. This is slower than using ${searchTools} directly, so use this only when a simple, directed search proves to be insufficient or when your task will clearly require more than ${EXPLORE_AGENT_MIN_QUERIES} queries.`
520826
520898
  ] : [],
520827
520899
  hasSkills ? `/<skill-name> (e.g., /commit) is shorthand for users to invoke a user-invocable skill. When executed, the skill gets expanded to a full prompt. Use the ${SKILL_TOOL_NAME} tool to execute them. IMPORTANT: Only use ${SKILL_TOOL_NAME} for skills listed in its user-invocable skills section - do not guess or use built-in CLI commands.` : null,
520900
+ `Agent-OS project skills must be created under \`.agent-os/skills/<skill-name>/SKILL.md\`; global user skills must be created under \`~/.agent-os/skills/<skill-name>/SKILL.md\`. Do not create new skills under \`.claude/skills\` unless the user explicitly asks for legacy Claude Code compatibility.`,
520828
520901
  DISCOVER_SKILLS_TOOL_NAME !== null && hasSkills && enabledTools.has(DISCOVER_SKILLS_TOOL_NAME) ? getDiscoverSkillsGuidance() : null,
520829
520902
  null
520830
520903
  ].filter((item) => item !== null);
@@ -521523,7 +521596,7 @@ function computeFingerprintFromMessages(messages) {
521523
521596
  }
521524
521597
  var AGENT_OS_VERSION5, FINGERPRINT_SALT = "59cf53e54c78";
521525
521598
  var init_fingerprint = __esm(() => {
521526
- AGENT_OS_VERSION5 = typeof MACRO !== "undefined" ? "1.0.0-alpha.18" : "dev";
521599
+ AGENT_OS_VERSION5 = typeof MACRO !== "undefined" ? "1.0.0-alpha.20" : "dev";
521527
521600
  });
521528
521601
 
521529
521602
  // src/services/compact/apiMicrocompact.ts
@@ -523277,7 +523350,7 @@ async function sideQuery(opts) {
523277
523350
  betas.push(STRUCTURED_OUTPUTS_BETA_HEADER);
523278
523351
  }
523279
523352
  const messageText = extractFirstUserMessageText(messages);
523280
- const fingerprint = computeFingerprint(messageText, "1.0.0-alpha.18");
523353
+ const fingerprint = computeFingerprint(messageText, "1.0.0-alpha.20");
523281
523354
  const attributionHeader = getAttributionHeader(fingerprint);
523282
523355
  const systemBlocks = [
523283
523356
  attributionHeader ? { type: "text", text: attributionHeader } : null,
@@ -525196,7 +525269,7 @@ function appendToLog(path24, message) {
525196
525269
  cwd: getFsImplementation().cwd(),
525197
525270
  userType: process.env.USER_TYPE,
525198
525271
  sessionId: getSessionId(),
525199
- version: "1.0.0-alpha.18"
525272
+ version: "1.0.0-alpha.20"
525200
525273
  };
525201
525274
  getLogWriter(path24).write(messageWithTimestamp);
525202
525275
  }
@@ -528174,7 +528247,7 @@ function getTelemetryAttributes() {
528174
528247
  attributes["session.id"] = sessionId;
528175
528248
  }
528176
528249
  if (shouldIncludeAttribute("OTEL_METRICS_INCLUDE_VERSION")) {
528177
- attributes["app.version"] = "1.0.0-alpha.18";
528250
+ attributes["app.version"] = "1.0.0-alpha.20";
528178
528251
  }
528179
528252
  if (envDynamic.terminal) {
528180
528253
  attributes["terminal.type"] = envDynamic.terminal;
@@ -538318,7 +538391,7 @@ function buildSystemInitMessage(inputs) {
538318
538391
  slash_commands: inputs.commands.filter((c5) => c5.userInvocable !== false).map((c5) => c5.name),
538319
538392
  apiKeySource: getAnthropicApiKeyWithSource().source,
538320
538393
  betas: getSdkBetas(),
538321
- claude_code_version: "1.0.0-alpha.18",
538394
+ claude_code_version: "1.0.0-alpha.20",
538322
538395
  output_style: outputStyle2,
538323
538396
  agents: inputs.agents.map((agent) => agent.agentType),
538324
538397
  skills: inputs.skills.filter((s2) => s2.userInvocable !== false).map((skill) => skill.name),
@@ -560787,7 +560860,7 @@ function buildStatusLineCommandInput(permissionMode, exceeds200kTokens, settings
560787
560860
  project_dir: getOriginalCwd(),
560788
560861
  added_dirs: addedDirs
560789
560862
  },
560790
- version: "1.0.0-alpha.18",
560863
+ version: "1.0.0-alpha.20",
560791
560864
  output_style: {
560792
560865
  name: outputStyleName
560793
560866
  },
@@ -567227,7 +567300,7 @@ async function applySkillImprovement(skillName, updates) {
567227
567300
  return;
567228
567301
  const { join: join159 } = await import("path");
567229
567302
  const fs10 = await import("fs/promises");
567230
- const filePath = join159(getCwd(), ".claude", "skills", skillName, "SKILL.md");
567303
+ const filePath = join159(getCwd(), ".agent-os", "skills", skillName, "SKILL.md");
567231
567304
  let currentContent;
567232
567305
  try {
567233
567306
  currentContent = await fs10.readFile(filePath, "utf-8");
@@ -570317,11 +570390,15 @@ async function getWatchablePaths() {
570317
570390
  } catch {}
570318
570391
  }
570319
570392
  for (const dir of getAdditionalDirectoriesForClaudeMd()) {
570320
- const additionalSkillsPath = platformPath2.join(dir, ".claude", "skills");
570321
- try {
570322
- await fs11.stat(additionalSkillsPath);
570323
- paths2.push(additionalSkillsPath);
570324
- } catch {}
570393
+ for (const additionalSkillsPath of [
570394
+ platformPath2.join(dir, ".agent-os", "skills"),
570395
+ platformPath2.join(dir, ".claude", "skills")
570396
+ ]) {
570397
+ try {
570398
+ await fs11.stat(additionalSkillsPath);
570399
+ paths2.push(additionalSkillsPath);
570400
+ } catch {}
570401
+ }
570325
570402
  }
570326
570403
  return paths2;
570327
570404
  }
@@ -574350,7 +574427,7 @@ var init_tipRegistry = __esm(() => {
574350
574427
  },
574351
574428
  {
574352
574429
  id: "custom-commands",
574353
- content: async () => "Create skills by adding .md files to .claude/skills/ in your project or ~/.agent-os/skills/ for skills that work in any project",
574430
+ content: async () => "Create skills by adding SKILL.md files to .agent-os/skills/ in your project or ~/.agent-os/skills/ for skills that work in any project",
574354
574431
  cooldownSessions: 15,
574355
574432
  async isRelevant() {
574356
574433
  const config4 = getGlobalConfig();
@@ -584139,7 +584216,7 @@ function WelcomeV2() {
584139
584216
  dimColor: true,
584140
584217
  children: [
584141
584218
  "v",
584142
- "1.0.0-alpha.18",
584219
+ "1.0.0-alpha.20",
584143
584220
  " "
584144
584221
  ]
584145
584222
  })
@@ -584339,7 +584416,7 @@ function WelcomeV2() {
584339
584416
  dimColor: true,
584340
584417
  children: [
584341
584418
  "v",
584342
- "1.0.0-alpha.18",
584419
+ "1.0.0-alpha.20",
584343
584420
  " "
584344
584421
  ]
584345
584422
  })
@@ -584565,7 +584642,7 @@ function AppleTerminalWelcomeV2(t0) {
584565
584642
  dimColor: true,
584566
584643
  children: [
584567
584644
  "v",
584568
- "1.0.0-alpha.18",
584645
+ "1.0.0-alpha.20",
584569
584646
  " "
584570
584647
  ]
584571
584648
  });
@@ -584819,7 +584896,7 @@ function AppleTerminalWelcomeV2(t0) {
584819
584896
  dimColor: true,
584820
584897
  children: [
584821
584898
  "v",
584822
- "1.0.0-alpha.18",
584899
+ "1.0.0-alpha.20",
584823
584900
  " "
584824
584901
  ]
584825
584902
  });
@@ -586285,7 +586362,7 @@ function completeOnboarding() {
586285
586362
  saveGlobalConfig((current) => ({
586286
586363
  ...current,
586287
586364
  hasCompletedOnboarding: true,
586288
- lastOnboardingVersion: "1.0.0-alpha.18"
586365
+ lastOnboardingVersion: "1.0.0-alpha.20"
586289
586366
  }));
586290
586367
  }
586291
586368
  function showDialog(root3, renderer) {
@@ -589186,7 +589263,7 @@ You will use the AskUserQuestion to understand what the user wants to automate.
589186
589263
  - If you think the skill will require arguments, suggest arguments based on what you observed. Make sure you understand what someone would need to provide.
589187
589264
  - If it's not clear, ask if this skill should run inline (in the current conversation) or forked (as a sub-agent with its own context). Forked is better for self-contained tasks that don't need mid-process user input; inline is better when the user wants to steer mid-process.
589188
589265
  - Ask where the skill should be saved. Suggest a default based on context (repo-specific workflows \u2192 repo, cross-repo personal workflows \u2192 user). Options:
589189
- - **This repo** (\`.claude/skills/<name>/SKILL.md\`) \u2014 for workflows specific to this project
589266
+ - **This repo** (\`.agent-os/skills/<name>/SKILL.md\`) \u2014 for workflows specific to this project
589190
589267
  - **Personal** (\`~/.agent-os/skills/<name>/SKILL.md\`) \u2014 follows you across all repos
589191
589268
 
589192
589269
  **Round 3: Breaking down each step**
@@ -594748,8 +594825,8 @@ async function getEnvLessBridgeConfig() {
594748
594825
  }
594749
594826
  async function checkEnvLessBridgeMinVersion() {
594750
594827
  const cfg = await getEnvLessBridgeConfig();
594751
- if (cfg.min_version && lt("1.0.0-alpha.18", cfg.min_version)) {
594752
- return `Your version of Agent-OS (${"1.0.0-alpha.18"}) is too old for Remote Control.
594828
+ if (cfg.min_version && lt("1.0.0-alpha.20", cfg.min_version)) {
594829
+ return `Your version of Agent-OS (${"1.0.0-alpha.20"}) is too old for Remote Control.
594753
594830
  Version ${cfg.min_version} or higher is required. Run \`agent-os update\` to update.`;
594754
594831
  }
594755
594832
  return null;
@@ -595222,7 +595299,7 @@ async function initBridgeCore(params) {
595222
595299
  const rawApi = createBridgeApiClient({
595223
595300
  baseUrl,
595224
595301
  getAccessToken,
595225
- runnerVersion: "1.0.0-alpha.18",
595302
+ runnerVersion: "1.0.0-alpha.20",
595226
595303
  onDebug: logForDebugging,
595227
595304
  onAuth401,
595228
595305
  getTrustedDeviceToken
@@ -600901,7 +600978,7 @@ async function startMCPServer(cwd3, debug2, verbose) {
600901
600978
  setCwd(cwd3);
600902
600979
  const server = new Server({
600903
600980
  name: "claude/tengu",
600904
- version: "1.0.0-alpha.18"
600981
+ version: "1.0.0-alpha.20"
600905
600982
  }, {
600906
600983
  capabilities: {
600907
600984
  tools: {}
@@ -606412,7 +606489,7 @@ ${customInstructions}` : customInstructions;
606412
606489
  }
606413
606490
  }
606414
606491
  logForDiagnosticsNoPII("info", "started", {
606415
- version: "1.0.0-alpha.18",
606492
+ version: "1.0.0-alpha.20",
606416
606493
  is_native_binary: isInBundledMode()
606417
606494
  });
606418
606495
  registerCleanup(async () => {
@@ -607204,7 +607281,7 @@ Usage: agent-os --remote "your task description"`, () => gracefulShutdown(1));
607204
607281
  pendingHookMessages
607205
607282
  }, renderAndRun);
607206
607283
  }
607207
- }).version("1.0.0-alpha.18 (Agent-OS)", "-v, --version", "Output the version number");
607284
+ }).version("1.0.0-alpha.20 (Agent-OS)", "-v, --version", "Output the version number");
607208
607285
  program2.option("-w, --worktree [name]", "Create a new git worktree for this session (optionally specify a name)");
607209
607286
  program2.option("--tmux", "Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux.");
607210
607287
  if (canUserConfigureAdvisor()) {
@@ -609042,7 +609119,7 @@ if (false) {}
609042
609119
  async function main2() {
609043
609120
  const args = process.argv.slice(2);
609044
609121
  if (args.length === 1 && (args[0] === "--version" || args[0] === "-v" || args[0] === "-V")) {
609045
- console.log(`${"1.0.0-alpha.18"} (Agent-OS)`);
609122
+ console.log(`${"1.0.0-alpha.20"} (Agent-OS)`);
609046
609123
  return;
609047
609124
  }
609048
609125
  const {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vionwilliams/agent-os",
3
- "version": "1.0.0-alpha.18",
3
+ "version": "1.0.0-alpha.20",
4
4
  "description": "Agent-OS — 智能任务通用工作系统:多模型路由、意图编排、多智能体协调、DataHub 与可编程面板。",
5
5
  "type": "module",
6
6
  "private": false,