@xopcai/xopc 0.0.46 → 0.0.48

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 (202) hide show
  1. package/README.md +17 -2
  2. package/README.zh-CN.md +8 -2
  3. package/dist/extensions/dingtalk/src/plugin.js +1 -1
  4. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  5. package/dist/extensions/telegram/src/command-handler.js +1 -1
  6. package/dist/extensions/telegram/src/command-handler.js.map +1 -1
  7. package/dist/extensions/telegram/src/plugin.js +1 -1
  8. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  9. package/dist/extensions/telegram/xopc.extension.json +1 -1
  10. package/dist/extensions/weixin/src/api/api.js +2 -2
  11. package/dist/extensions/weixin/src/auth/accounts.js +1 -1
  12. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  13. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  14. package/dist/extensions/weixin/src/messaging/debug-mode.js +1 -1
  15. package/dist/extensions/weixin/src/messaging/inbound.js +1 -1
  16. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  17. package/dist/extensions/weixin/src/plugin.js +1 -1
  18. package/dist/extensions/weixin/src/storage/sync-buf.js +1 -1
  19. package/dist/gateway/static/root/assets/{agents-9tPOBNVa.js → agents-BdISC5UA.js} +2 -2
  20. package/dist/gateway/static/root/assets/{agents-9tPOBNVa.js.map → agents-BdISC5UA.js.map} +1 -1
  21. package/dist/gateway/static/root/assets/{apps-page-yjXMjZEY.js → apps-page-CXU_Jg95.js} +2 -2
  22. package/dist/gateway/static/root/assets/{apps-page-yjXMjZEY.js.map → apps-page-CXU_Jg95.js.map} +1 -1
  23. package/dist/gateway/static/root/assets/{channels-settings-B-vOBJmr.js → channels-settings-Doe1ciOW.js} +2 -2
  24. package/dist/gateway/static/root/assets/{channels-settings-B-vOBJmr.js.map → channels-settings-Doe1ciOW.js.map} +1 -1
  25. package/dist/gateway/static/root/assets/{cron-dreaming-jobs-CmdPJHC8.js → cron-dreaming-jobs-C-V4_3vz.js} +2 -2
  26. package/dist/gateway/static/root/assets/{cron-dreaming-jobs-CmdPJHC8.js.map → cron-dreaming-jobs-C-V4_3vz.js.map} +1 -1
  27. package/dist/gateway/static/root/assets/{cron-page-aS5nCGTE.js → cron-page-CIIy81K6.js} +2 -2
  28. package/dist/gateway/static/root/assets/{cron-page-aS5nCGTE.js.map → cron-page-CIIy81K6.js.map} +1 -1
  29. package/dist/gateway/static/root/assets/{dist-COrWk0va.js → dist-VW7dXc5X.js} +2 -2
  30. package/dist/gateway/static/root/assets/{dist-COrWk0va.js.map → dist-VW7dXc5X.js.map} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-debug-page-p7Aufdiu.js → extension-debug-page-Cslwx62-.js} +2 -2
  32. package/dist/gateway/static/root/assets/{extension-debug-page-p7Aufdiu.js.map → extension-debug-page-Cslwx62-.js.map} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-Ca_H5bLy.js → extension-page-Dzyebr6T.js} +2 -2
  34. package/dist/gateway/static/root/assets/{extension-page-Ca_H5bLy.js.map → extension-page-Dzyebr6T.js.map} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-settings-page-f8jERrXK.js → extension-settings-page-B07uetL_.js} +2 -2
  36. package/dist/gateway/static/root/assets/{extension-settings-page-f8jERrXK.js.map → extension-settings-page-B07uetL_.js.map} +1 -1
  37. package/dist/gateway/static/root/assets/{heartbeat-config-api-BC5dh16N.js → heartbeat-config-api-kmvGNriW.js} +2 -2
  38. package/dist/gateway/static/root/assets/{heartbeat-config-api-BC5dh16N.js.map → heartbeat-config-api-kmvGNriW.js.map} +1 -1
  39. package/dist/gateway/static/root/assets/{index-DRnjltLC.js → index-DW6JvymK.js} +11 -11
  40. package/dist/gateway/static/root/assets/{index-DRnjltLC.js.map → index-DW6JvymK.js.map} +1 -1
  41. package/dist/gateway/static/root/assets/{logs-page-CBHnie4a.js → logs-page-BiRnV2Ex.js} +2 -2
  42. package/dist/gateway/static/root/assets/{logs-page-CBHnie4a.js.map → logs-page-BiRnV2Ex.js.map} +1 -1
  43. package/dist/gateway/static/root/assets/{sessions-page-29vp15ci.js → sessions-page-DQq0QaQh.js} +2 -2
  44. package/dist/gateway/static/root/assets/{sessions-page-29vp15ci.js.map → sessions-page-DQq0QaQh.js.map} +1 -1
  45. package/dist/gateway/static/root/assets/{settings-page-Bd1rO8dz.js → settings-page-BV_l8nJ3.js} +2 -2
  46. package/dist/gateway/static/root/assets/{settings-page-Bd1rO8dz.js.map → settings-page-BV_l8nJ3.js.map} +1 -1
  47. package/dist/gateway/static/root/assets/{skills-page-BYppQ88L.js → skills-page-Bv0pphDM.js} +2 -2
  48. package/dist/gateway/static/root/assets/{skills-page-BYppQ88L.js.map → skills-page-Bv0pphDM.js.map} +1 -1
  49. package/dist/gateway/static/root/assets/{use-image-provider-credentials-DlWCe2d_.js → use-image-provider-credentials-BPcW1K0N.js} +2 -2
  50. package/dist/gateway/static/root/assets/{use-image-provider-credentials-DlWCe2d_.js.map → use-image-provider-credentials-BPcW1K0N.js.map} +1 -1
  51. package/dist/gateway/static/root/index.html +1 -1
  52. package/dist/package.js +1 -1
  53. package/dist/src/agent/agent-manager.js +6 -6
  54. package/dist/src/agent/context/workspace-seed.js +2 -2
  55. package/dist/src/agent/goals/checklist-judge.js +21 -17
  56. package/dist/src/agent/goals/checklist-judge.js.map +1 -1
  57. package/dist/src/agent/goals/evaluate-turn.js +6 -11
  58. package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
  59. package/dist/src/agent/goals/judge.d.ts +16 -0
  60. package/dist/src/agent/goals/judge.js +61 -13
  61. package/dist/src/agent/goals/judge.js.map +1 -1
  62. package/dist/src/agent/goals/post-turn.js +1 -1
  63. package/dist/src/agent/goals/state.d.ts +7 -0
  64. package/dist/src/agent/goals/state.js +24 -1
  65. package/dist/src/agent/goals/state.js.map +1 -1
  66. package/dist/src/agent/image/load-image-media.js +1 -1
  67. package/dist/src/agent/ipc/bus.js +1 -1
  68. package/dist/src/agent/ipc/inbox.js +2 -2
  69. package/dist/src/agent/ipc/socket.js +1 -1
  70. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  71. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  72. package/dist/src/agent/memory/dreaming/events.js +1 -1
  73. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  74. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  75. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  76. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  77. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  78. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  79. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  80. package/dist/src/agent/models/manager.js +1 -1
  81. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  82. package/dist/src/agent/service.js +5 -5
  83. package/dist/src/agent/skills/config.js +1 -1
  84. package/dist/src/agent/skills/hub-hash.js +2 -2
  85. package/dist/src/agent/skills/hub-lock.js +1 -1
  86. package/dist/src/agent/skills/hub-pull.js +1 -1
  87. package/dist/src/agent/skills/index.js +1 -1
  88. package/dist/src/agent/skills/managed-store.js +1 -1
  89. package/dist/src/agent/skills/scanner.js +1 -1
  90. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  91. package/dist/src/agent/skills/skill-manager.js +1 -1
  92. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  93. package/dist/src/agent/tools/factory.js +1 -1
  94. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  95. package/dist/src/agent/tools/send-media.js +1 -1
  96. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  97. package/dist/src/agent/tools/write.js +1 -1
  98. package/dist/src/auth/credentials.js +3 -3
  99. package/dist/src/auth/profiles/store.js +1 -1
  100. package/dist/src/auth/sync-provider-auth.js +1 -1
  101. package/dist/src/channels/attachments/inbound-persist.js +1 -1
  102. package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
  103. package/dist/src/channels/outbound/persist-store.js +1 -1
  104. package/dist/src/channels/pairing/allow-from-file.js +1 -1
  105. package/dist/src/channels/pairing/pairing-store.js +2 -2
  106. package/dist/src/chat-commands/builtins/config.js +2 -2
  107. package/dist/src/chat-commands/builtins/model.d.ts +2 -2
  108. package/dist/src/chat-commands/builtins/model.js +10 -8
  109. package/dist/src/chat-commands/builtins/model.js.map +1 -1
  110. package/dist/src/chat-commands/builtins/system.js +1 -1
  111. package/dist/src/chat-commands/builtins/system.js.map +1 -1
  112. package/dist/src/chat-commands/context.js +1 -1
  113. package/dist/src/cli/bin.d.ts +7 -0
  114. package/dist/src/cli/bin.js +4 -0
  115. package/dist/src/cli/bootstrap-extensions.js +5 -1
  116. package/dist/src/cli/bootstrap-extensions.js.map +1 -1
  117. package/dist/src/cli/cli-log-level-preset.d.ts +7 -0
  118. package/dist/src/cli/cli-log-level-preset.js +13 -0
  119. package/dist/src/cli/cli-log-level-preset.js.map +1 -0
  120. package/dist/src/cli/commands/agent.js +2 -2
  121. package/dist/src/cli/commands/agents.js +1 -1
  122. package/dist/src/cli/commands/config.js +2 -2
  123. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  124. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  125. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  126. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  127. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  128. package/dist/src/cli/commands/extension-dev.js +1 -1
  129. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  130. package/dist/src/cli/commands/extension-pack.js +1 -1
  131. package/dist/src/cli/commands/gateway.js +1 -1
  132. package/dist/src/cli/commands/image.js +1 -1
  133. package/dist/src/cli/commands/init.js +4 -4
  134. package/dist/src/cli/commands/models.js +1 -1
  135. package/dist/src/cli/commands/onboard.js +1 -1
  136. package/dist/src/cli/commands/update.js +1 -1
  137. package/dist/src/cli/index.d.ts +0 -1
  138. package/dist/src/cli/index.js +1 -1
  139. package/dist/src/cli/index.js.map +1 -1
  140. package/dist/src/cli/utils/init-workspace.js +2 -2
  141. package/dist/src/config/index.js +2 -2
  142. package/dist/src/config/loader.js +2 -2
  143. package/dist/src/config/models-json.js +2 -2
  144. package/dist/src/config/profile.js +2 -2
  145. package/dist/src/cron/executor.js +2 -2
  146. package/dist/src/cron/persistence.js +1 -1
  147. package/dist/src/cron/run-log-store.js +1 -1
  148. package/dist/src/daemon/launchd.js +2 -2
  149. package/dist/src/daemon/systemd.js +2 -2
  150. package/dist/src/extensions/health.js +1 -1
  151. package/dist/src/extensions/loader.d.ts +5 -0
  152. package/dist/src/extensions/loader.js +19 -3
  153. package/dist/src/extensions/loader.js.map +1 -1
  154. package/dist/src/extensions/lockfile.js +2 -2
  155. package/dist/src/gateway/agents-admin.js +2 -2
  156. package/dist/src/gateway/hono/lib/extension-store.js +1 -1
  157. package/dist/src/gateway/hono/lib/static-ui.js +1 -1
  158. package/dist/src/gateway/hono/oauth.js +1 -1
  159. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  160. package/dist/src/gateway/hono/routes/config.js +1 -1
  161. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  162. package/dist/src/gateway/hono/routes/host-fs.js +1 -1
  163. package/dist/src/gateway/hono/routes/models.js +1 -1
  164. package/dist/src/gateway/hono/routes/workspace.js +3 -3
  165. package/dist/src/gateway/hono/sse.js +2 -2
  166. package/dist/src/gateway/lock.js +2 -2
  167. package/dist/src/gateway/service/run-gateway-agent.js +2 -2
  168. package/dist/src/gateway/service.js +5 -5
  169. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  170. package/dist/src/gateway/workspace-heartbeat-path.js +1 -1
  171. package/dist/src/infra/update-check.js +1 -1
  172. package/dist/src/infra/update-lock.js +3 -3
  173. package/dist/src/infra/update-runner.js +2 -2
  174. package/dist/src/infra/update-runner.js.map +1 -1
  175. package/dist/src/infra/update-startup.js +2 -2
  176. package/dist/src/infra/write-file-atomic.js +2 -2
  177. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  178. package/dist/src/providers/index.js +2 -2
  179. package/dist/src/providers/model-registry.js +1 -1
  180. package/dist/src/session/config-store.js +2 -2
  181. package/dist/src/session/search-index-cache.js +1 -1
  182. package/dist/src/session/search-index.js +1 -1
  183. package/dist/src/session/session-title.js +1 -1
  184. package/dist/src/session/store.js +5 -5
  185. package/dist/src/tui/backends/embedded-backend.d.ts +1 -1
  186. package/dist/src/tui/backends/embedded-backend.js +25 -4
  187. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  188. package/dist/src/tui/backends/gateway-sse-backend.js +36 -10
  189. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  190. package/dist/src/tui/tui-commands.js +1 -1
  191. package/dist/src/tui/tui-commands.js.map +1 -1
  192. package/dist/src/tui/tui.js +13 -2
  193. package/dist/src/tui/tui.js.map +1 -1
  194. package/dist/src/utils/logger/audit.js +1 -1
  195. package/dist/src/utils/logger/log-store.js +1 -1
  196. package/dist/src/utils/logger/rotation.js +1 -1
  197. package/dist/src/voice/tts/audio.js +1 -1
  198. package/dist/src/voice/tts/providers/edge-speech.js +1 -1
  199. package/package.json +7 -7
  200. package/dist/src/cli/agent-chat-log-level-preset.d.ts +0 -8
  201. package/dist/src/cli/agent-chat-log-level-preset.js +0 -25
  202. package/dist/src/cli/agent-chat-log-level-preset.js.map +0 -1
@@ -7,8 +7,8 @@ import { getExtensionLockfileManager } from "../../extensions/lockfile.js";
7
7
  import { downloadExtensionStoreZipBuffer, resolveExtensionZipDownloadUrl, resolveExtensionsStoreBaseUrl } from "../../agent/skills/marketplace/adapters/store/store-api-client.js";
8
8
  import { fetchRegistry, findExtension, getExtensionMarketplaceStoreBaseUrl, listExtensions, searchExtensions } from "../../extensions/marketplace.js";
9
9
  import { getContextWithOpts } from "../index.js";
10
- import { join, resolve } from "node:path";
11
10
  import { existsSync, readFileSync, rmSync, statSync } from "node:fs";
11
+ import { join, resolve } from "node:path";
12
12
  import { Command } from "commander";
13
13
  import { execSync } from "node:child_process";
14
14
  import semver from "semver";
@@ -4,8 +4,8 @@ import { init_logger } from "../../utils/logger.js";
4
4
  import { normalizeExtensionManifest } from "../../extensions/normalize-manifest.js";
5
5
  import { checkEngineCompatibility } from "../../extensions/engine-check.js";
6
6
  import { colors } from "../utils/colors.js";
7
- import { isAbsolute, join, resolve } from "node:path";
8
7
  import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync } from "node:fs";
8
+ import { isAbsolute, join, resolve } from "node:path";
9
9
  import { Command } from "commander";
10
10
  import { execSync } from "node:child_process";
11
11
  //#region src/cli/commands/extension-pack.ts
@@ -2,8 +2,8 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { init_paths, resolveConfigPath } from "../../config/paths.js";
4
4
  import { loadConfig } from "../../config/loader.js";
5
- import "../../config/index.js";
6
5
  import { formatExamples, register } from "../registry.js";
6
+ import "../../config/index.js";
7
7
  import { seedMainAgentBootstrap } from "../../agent/context/workspace-seed.js";
8
8
  import { initWorkspace } from "../utils/init-workspace.js";
9
9
  import { GatewayServer } from "../../gateway/server.js";
@@ -8,8 +8,8 @@ import { formatExamples, register } from "../registry.js";
8
8
  import { colors } from "../utils/colors.js";
9
9
  import "../../agent/image/index.js";
10
10
  import { getContextWithOpts } from "../index.js";
11
- import { join, resolve } from "node:path";
12
11
  import { mkdir, writeFile } from "node:fs/promises";
12
+ import { join, resolve } from "node:path";
13
13
  import { Command } from "commander";
14
14
  //#region src/cli/commands/image.ts
15
15
  init_loader();
@@ -1,13 +1,13 @@
1
- import { resolveStateDir } from "../../config/paths-state.js";
2
- import { resolveAgentBootstrapDir, resolveAgentWorkspaceDir } from "../../agent/agent-scope.js";
1
+ import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
3
2
  import { createLogger } from "../../utils/logger/index.js";
4
3
  import { init_logger } from "../../utils/logger.js";
4
+ import { resolveStateDir } from "../../config/paths-state.js";
5
+ import { resolveAgentBootstrapDir, resolveAgentWorkspaceDir } from "../../agent/agent-scope.js";
5
6
  import { WORKSPACE_FILES, init_paths, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveBinDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveExtensionsDir, resolveInboxDir, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogsDir, resolveSessionsDir, resolveSkillsDir, resolveToolsDir, resolveWorkspaceStateDir, resolveWorkspaceStatePath } from "../../config/paths.js";
6
- import { init_write_file_atomic, writeTextAtomic } from "../../infra/write-file-atomic.js";
7
7
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
8
+ import { mkdir, writeFile } from "fs/promises";
8
9
  import { join } from "path";
9
10
  import { existsSync } from "fs";
10
- import { mkdir, writeFile } from "fs/promises";
11
11
  //#region src/cli/commands/init.ts
12
12
  init_write_file_atomic();
13
13
  init_logger();
@@ -1,7 +1,7 @@
1
1
  import { loadConfig } from "../../config/loader.js";
2
2
  import { getAllModels, getAvailableModels, getConfiguredProviders, init_providers, isProviderConfigured } from "../../providers/index.js";
3
- import "../../config/index.js";
4
3
  import { formatExamples, register } from "../registry.js";
4
+ import "../../config/index.js";
5
5
  import { getContextWithOpts } from "../index.js";
6
6
  import { Command } from "commander";
7
7
  //#region src/cli/commands/models.ts
@@ -1,8 +1,8 @@
1
1
  import { ConfigSchema, init_schema } from "../../config/schema.js";
2
2
  import { saveConfig } from "../../config/loader.js";
3
3
  import { isWeixinOnboardConfigured } from "../../../extensions/weixin/src/adapters/onboard-cli.js";
4
- import "../../config/index.js";
5
4
  import { formatExamples, register } from "../registry.js";
5
+ import "../../config/index.js";
6
6
  import { seedMainAgentBootstrap } from "../../agent/context/workspace-seed.js";
7
7
  import { initWorkspace } from "../utils/init-workspace.js";
8
8
  import { colors } from "../utils/colors.js";
@@ -1,7 +1,7 @@
1
1
  import { PACKAGE_VERSION, init_package_version } from "../../package-version.js";
2
2
  import { loadConfig } from "../../config/loader.js";
3
- import "../../config/index.js";
4
3
  import { formatExamples, register } from "../registry.js";
4
+ import "../../config/index.js";
5
5
  import { normalizeUpdateChannel } from "../../infra/update-channels.js";
6
6
  import { compareSemver, detectInstallKind, resolveNpmChannelTag, resolvePackageRoot } from "../../infra/update-check.js";
7
7
  import { Command } from "commander";
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env node
2
- import './agent-chat-log-level-preset.js';
3
2
  import { type CLIContext } from './registry.js';
4
3
  import './commands/setup.js';
5
4
  import './commands/onboard.js';
@@ -2,7 +2,6 @@
2
2
  import { version } from "../../package.js";
3
3
  import { flushAndClose } from "../utils/logger/shutdown.js";
4
4
  import { init_logger } from "../utils/logger.js";
5
- import "./agent-chat-log-level-preset.js";
6
5
  import { createDefaultContext, registry } from "./registry.js";
7
6
  import { registerExtensionCliCommands } from "./bootstrap-extensions.js";
8
7
  import "./commands/setup.js";
@@ -25,6 +24,7 @@ import "./commands/logs.js";
25
24
  import { registerAgentsCli } from "./commands/agents.js";
26
25
  import { Command } from "commander";
27
26
  //#region src/cli/index.ts
27
+ /** Command wiring and `program.parse`; executable entry is `bin.ts` (log preset before logger init). */
28
28
  init_logger();
29
29
  let parsedOpts = {};
30
30
  function getContextWithOpts(argv = process.argv) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["pkg.version"],"sources":["../../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport './agent-chat-log-level-preset.js';\nimport { Command } from 'commander';\nimport { registry, createDefaultContext, type CLIContext } from './registry.js';\nimport pkg from '../../package.json' with { type: 'json' };\nimport { flushAndClose } from '../utils/logger.js'; // Import flushAndClose for graceful shutdown\nimport { registerExtensionCliCommands } from './bootstrap-extensions.js';\n\n// Import order determines display order in help\nimport './commands/setup.js';\nimport './commands/onboard.js';\nimport './commands/agent.js';\nimport './commands/tui.js';\nimport './commands/gateway.js';\nimport './commands/session.js';\nimport './commands/cron.js';\nimport './commands/config.js';\nimport './commands/doctor/index.js';\nimport './commands/image.js';\nimport './commands/channels.js';\nimport './commands/models.js';\nimport { registerExtensionCommands } from './commands/extension.js';\nimport './commands/auth.js';\nimport './commands/skills.js';\nimport './commands/update.js';\nimport './commands/logs.js';\nimport { registerAgentsCli } from './commands/agents.js';\n\n// Global parsed options - updated before each command\nexport let parsedOpts: { config?: string; workspace?: string; verbose?: boolean } = {};\n\nexport function getContextWithOpts(argv: string[] = process.argv): CLIContext {\n return createDefaultContext(argv, parsedOpts);\n}\n\n// Long-running commands that should not auto-exit\nconst LONG_RUNNING_COMMANDS = new Set(['gateway', 'agent', 'tui', 'extension:dev']);\n\nconst program = new Command()\n .name('xopc')\n .description('Ultra-Lightweight Personal AI Assistant')\n .version(pkg.version)\n .option('--verbose', 'Enable verbose logging', false)\n .option('--config <path>', 'Config file path')\n .option('--workspace <path>', 'Workspace directory');\n\n// Hook to capture parsed options before each command runs\nprogram.hook('preAction', (thisCommand) => {\n parsedOpts = thisCommand.opts();\n});\n\n// Hook to ensure process exits after command completion\n// Second arg is the command whose action ran; the first is the ancestor that registered the hook\n// (often the root program), so using only the first arg mis-detects the subcommand as \"xopc\".\nprogram.hook('postAction', async (_hookOwner, actionCommand) => {\n const cmd = actionCommand ?? program;\n const args = cmd.args;\n const subCommandName = args.length > 0 ? args[0] : cmd.name();\n\n // Skip long-running commands (gateway foreground, agent interactive mode)\n if (LONG_RUNNING_COMMANDS.has(subCommandName)) {\n // For agent command, only skip exit if interactive mode (-i) is used\n if (subCommandName === 'agent') {\n const hasInteractiveFlag = process.argv.includes('-i') || process.argv.includes('--interactive');\n if (!hasInteractiveFlag) {\n // Agent in non-interactive mode should exit normally\n await flushAndClose();\n process.exit(0);\n }\n }\n // Gateway or agent -i: don't exit\n return;\n }\n // For all other commands, flush logs and exit\n await flushAndClose();\n process.exit(0);\n});\n\n// Create initial context (will use env vars and defaults)\nconst ctx = getContextWithOpts(process.argv);\nregistry.install(program, ctx);\nregisterAgentsCli(program);\nregisterExtensionCommands(program);\n\n// Only parse if this is the main module being executed directly\n// Skip parsing when imported as module (e.g., in tests)\nconst isTestEnv = !!process.env.VITEST || !!process.env.TEST || !!process.env.NODE_ENV?.includes('test');\nconst isMainModule = !isTestEnv && import.meta.url.startsWith('file:');\n\nif (isMainModule) {\n // Filter out standalone '--' separator (passed by pnpm run -- <cmd>)\n // npm removes it automatically, pnpm passes it through\n const argv = process.argv.filter((arg, index) => {\n if (arg !== '--') return true;\n // Only filter '--' if it's the separator between script and command\n // (i.e., comes after the script name and before actual args)\n return index < 2; // Keep '--' if it's a script argument (index 0 or 1)\n });\n void registerExtensionCliCommands(program).then(() => {\n program.parse(argv);\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;aAKmD;AAwBnD,IAAW,aAAyE,EAAE;AAEtF,SAAgB,mBAAmB,OAAiB,QAAQ,MAAkB;AAC5E,QAAO,qBAAqB,MAAM,WAAW;;AAI/C,MAAM,wBAAwB,IAAI,IAAI;CAAC;CAAW;CAAS;CAAO;CAAgB,CAAC;AAEnF,MAAM,UAAU,IAAI,SAAS,CAC1B,KAAK,OAAO,CACZ,YAAY,0CAA0C,CACtD,QAAQA,QAAY,CACpB,OAAO,aAAa,0BAA0B,MAAM,CACpD,OAAO,mBAAmB,mBAAmB,CAC7C,OAAO,sBAAsB,sBAAsB;AAGtD,QAAQ,KAAK,cAAc,gBAAgB;AACzC,cAAa,YAAY,MAAM;EAC/B;AAKF,QAAQ,KAAK,cAAc,OAAO,YAAY,kBAAkB;CAC9D,MAAM,MAAM,iBAAiB;CAC7B,MAAM,OAAO,IAAI;CACjB,MAAM,iBAAiB,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,MAAM;AAG7D,KAAI,sBAAsB,IAAI,eAAe,EAAE;AAE7C,MAAI,mBAAmB;OAEjB,EADuB,QAAQ,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,SAAS,gBAAgB,GACvE;AAEvB,UAAM,eAAe;AACrB,YAAQ,KAAK,EAAE;;;AAInB;;AAGF,OAAM,eAAe;AACrB,SAAQ,KAAK,EAAE;EACf;AAGF,MAAM,MAAM,mBAAmB,QAAQ,KAAK;AAC5C,SAAS,QAAQ,SAAS,IAAI;AAC9B,kBAAkB,QAAQ;AAC1B,0BAA0B,QAAQ;AAOlC,IAFqB,EADH,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAA,cAAuB,SAAS,OAAO,KACrE,OAAO,KAAK,IAAI,WAAW,QAAQ,EAEpD;CAGhB,MAAM,OAAO,QAAQ,KAAK,QAAQ,KAAK,UAAU;AAC/C,MAAI,QAAQ,KAAM,QAAO;AAGzB,SAAO,QAAQ;GACf;AACG,8BAA6B,QAAQ,CAAC,WAAW;AACpD,UAAQ,MAAM,KAAK;GACnB"}
1
+ {"version":3,"file":"index.js","names":["pkg.version"],"sources":["../../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\n/** Command wiring and `program.parse`; executable entry is `bin.ts` (log preset before logger init). */\nimport { Command } from 'commander';\nimport { registry, createDefaultContext, type CLIContext } from './registry.js';\nimport pkg from '../../package.json' with { type: 'json' };\nimport { flushAndClose } from '../utils/logger.js'; // Import flushAndClose for graceful shutdown\nimport { registerExtensionCliCommands } from './bootstrap-extensions.js';\n\n// Import order determines display order in help\nimport './commands/setup.js';\nimport './commands/onboard.js';\nimport './commands/agent.js';\nimport './commands/tui.js';\nimport './commands/gateway.js';\nimport './commands/session.js';\nimport './commands/cron.js';\nimport './commands/config.js';\nimport './commands/doctor/index.js';\nimport './commands/image.js';\nimport './commands/channels.js';\nimport './commands/models.js';\nimport { registerExtensionCommands } from './commands/extension.js';\nimport './commands/auth.js';\nimport './commands/skills.js';\nimport './commands/update.js';\nimport './commands/logs.js';\nimport { registerAgentsCli } from './commands/agents.js';\n\n// Global parsed options - updated before each command\nexport let parsedOpts: { config?: string; workspace?: string; verbose?: boolean } = {};\n\nexport function getContextWithOpts(argv: string[] = process.argv): CLIContext {\n return createDefaultContext(argv, parsedOpts);\n}\n\n// Long-running commands that should not auto-exit\nconst LONG_RUNNING_COMMANDS = new Set(['gateway', 'agent', 'tui', 'extension:dev']);\n\nconst program = new Command()\n .name('xopc')\n .description('Ultra-Lightweight Personal AI Assistant')\n .version(pkg.version)\n .option('--verbose', 'Enable verbose logging', false)\n .option('--config <path>', 'Config file path')\n .option('--workspace <path>', 'Workspace directory');\n\n// Hook to capture parsed options before each command runs\nprogram.hook('preAction', (thisCommand) => {\n parsedOpts = thisCommand.opts();\n});\n\n// Hook to ensure process exits after command completion\n// Second arg is the command whose action ran; the first is the ancestor that registered the hook\n// (often the root program), so using only the first arg mis-detects the subcommand as \"xopc\".\nprogram.hook('postAction', async (_hookOwner, actionCommand) => {\n const cmd = actionCommand ?? program;\n const args = cmd.args;\n const subCommandName = args.length > 0 ? args[0] : cmd.name();\n\n // Skip long-running commands (gateway foreground, agent interactive mode)\n if (LONG_RUNNING_COMMANDS.has(subCommandName)) {\n // For agent command, only skip exit if interactive mode (-i) is used\n if (subCommandName === 'agent') {\n const hasInteractiveFlag = process.argv.includes('-i') || process.argv.includes('--interactive');\n if (!hasInteractiveFlag) {\n // Agent in non-interactive mode should exit normally\n await flushAndClose();\n process.exit(0);\n }\n }\n // Gateway or agent -i: don't exit\n return;\n }\n // For all other commands, flush logs and exit\n await flushAndClose();\n process.exit(0);\n});\n\n// Create initial context (will use env vars and defaults)\nconst ctx = getContextWithOpts(process.argv);\nregistry.install(program, ctx);\nregisterAgentsCli(program);\nregisterExtensionCommands(program);\n\n// Only parse if this is the main module being executed directly\n// Skip parsing when imported as module (e.g., in tests)\nconst isTestEnv = !!process.env.VITEST || !!process.env.TEST || !!process.env.NODE_ENV?.includes('test');\nconst isMainModule = !isTestEnv && import.meta.url.startsWith('file:');\n\nif (isMainModule) {\n // Filter out standalone '--' separator (passed by pnpm run -- <cmd>)\n // npm removes it automatically, pnpm passes it through\n const argv = process.argv.filter((arg, index) => {\n if (arg !== '--') return true;\n // Only filter '--' if it's the separator between script and command\n // (i.e., comes after the script name and before actual args)\n return index < 2; // Keep '--' if it's a script argument (index 0 or 1)\n });\n void registerExtensionCliCommands(program).then(() => {\n program.parse(argv);\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;aAKmD;AAwBnD,IAAW,aAAyE,EAAE;AAEtF,SAAgB,mBAAmB,OAAiB,QAAQ,MAAkB;AAC5E,QAAO,qBAAqB,MAAM,WAAW;;AAI/C,MAAM,wBAAwB,IAAI,IAAI;CAAC;CAAW;CAAS;CAAO;CAAgB,CAAC;AAEnF,MAAM,UAAU,IAAI,SAAS,CAC1B,KAAK,OAAO,CACZ,YAAY,0CAA0C,CACtD,QAAQA,QAAY,CACpB,OAAO,aAAa,0BAA0B,MAAM,CACpD,OAAO,mBAAmB,mBAAmB,CAC7C,OAAO,sBAAsB,sBAAsB;AAGtD,QAAQ,KAAK,cAAc,gBAAgB;AACzC,cAAa,YAAY,MAAM;EAC/B;AAKF,QAAQ,KAAK,cAAc,OAAO,YAAY,kBAAkB;CAC9D,MAAM,MAAM,iBAAiB;CAC7B,MAAM,OAAO,IAAI;CACjB,MAAM,iBAAiB,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,MAAM;AAG7D,KAAI,sBAAsB,IAAI,eAAe,EAAE;AAE7C,MAAI,mBAAmB;OAEjB,EADuB,QAAQ,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK,SAAS,gBAAgB,GACvE;AAEvB,UAAM,eAAe;AACrB,YAAQ,KAAK,EAAE;;;AAInB;;AAGF,OAAM,eAAe;AACrB,SAAQ,KAAK,EAAE;EACf;AAGF,MAAM,MAAM,mBAAmB,QAAQ,KAAK;AAC5C,SAAS,QAAQ,SAAS,IAAI;AAC9B,kBAAkB,QAAQ;AAC1B,0BAA0B,QAAQ;AAOlC,IAFqB,EADH,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,CAAA,cAAuB,SAAS,OAAO,KACrE,OAAO,KAAK,IAAI,WAAW,QAAQ,EAEpD;CAGhB,MAAM,OAAO,QAAQ,KAAK,QAAQ,KAAK,UAAU;AAC/C,MAAI,QAAQ,KAAM,QAAO;AAGzB,SAAO,QAAQ;GACf;AACG,8BAA6B,QAAQ,CAAC,WAAW;AACpD,UAAQ,MAAM,KAAK;GACnB"}
@@ -1,8 +1,8 @@
1
1
  import { ConfigSchema, init_schema } from "../../config/schema.js";
2
2
  import { init_loader, loadConfig, saveConfig } from "../../config/loader.js";
3
- import { dirname, join } from "node:path";
4
- import { existsSync, mkdirSync, readFileSync } from "node:fs";
5
3
  import { randomBytes } from "node:crypto";
4
+ import { existsSync, mkdirSync, readFileSync } from "node:fs";
5
+ import { dirname, join } from "node:path";
6
6
  //#region src/cli/utils/init-workspace.ts
7
7
  init_schema();
8
8
  init_loader();
@@ -2,14 +2,14 @@ import { ENV_VARS, resolveHomeDir, resolveStateDir } from "./paths-state.js";
2
2
  import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
3
3
  import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
4
4
  import { resolveAgentBootstrapDir, resolveAgentDir as resolveAgentDir$1, resolveAgentHomeDir as resolveAgentHomeDir$1, resolveAgentWorkspaceDir, resolveSessionsDir as resolveSessionsDir$1 } from "../agent/agent-scope.js";
5
+ import { FILENAMES, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentCredentialsDir, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveCronLogPath, resolveCronLogsDir, resolveCronRunsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMemoryDir, resolveMemoryPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSessionTranscriptPath, resolveSessionTranscriptPathInDir, resolveSessionsArchiveDir, resolveSessionsDir, resolveSessionsIndexPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
5
6
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
6
7
  import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
7
8
  import { DingtalkConfigSchema } from "../../extensions/dingtalk/src/config-schema.js";
8
9
  import { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, ConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, getAgentDefaultModelRef, getWorkspacePath, init_schema, parseModelRef } from "./schema.js";
10
+ import { init_loader, loadConfig, registerChannelConfigValidator, saveConfig } from "./loader.js";
9
11
  import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
10
12
  import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
11
- import { FILENAMES, WORKSPACE_FILES, existsSync, init_paths, resolveAgentAuthProfilesPath, resolveAgentCredentialsDir, resolveAgentDir, resolveAgentHomeDir, resolveAgentMetadataPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveCronLogPath, resolveCronLogsDir, resolveCronRunsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMemoryDir, resolveMemoryPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSessionTranscriptPath, resolveSessionTranscriptPathInDir, resolveSessionsArchiveDir, resolveSessionsDir, resolveSessionsIndexPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
12
- import { init_loader, loadConfig, registerChannelConfigValidator, saveConfig } from "./loader.js";
13
13
  import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
14
14
  import { CustomModelSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
15
15
  import { formatThinkingLevels, listThinkingLevels, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, thinkLevelToNumber } from "../agent/transcript/thinking-types.js";
@@ -1,9 +1,9 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { ConfigSchema, init_schema } from "./schema.js";
2
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
3
3
  import { createLogger } from "../utils/logger/index.js";
4
4
  import { init_logger } from "../utils/logger.js";
5
5
  import { init_paths, resolveConfigPath } from "./paths.js";
6
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
6
+ import { ConfigSchema, init_schema } from "./schema.js";
7
7
  import { dirname } from "path";
8
8
  import { existsSync, mkdirSync, promises, readFileSync } from "fs";
9
9
  import { config } from "dotenv";
@@ -1,8 +1,8 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { init_paths, resolveModelsJsonPath } from "./paths.js";
3
2
  import { init_write_file_atomic, writeTextAtomicSync } from "../infra/write-file-atomic.js";
4
- import { z } from "zod";
3
+ import { init_paths, resolveModelsJsonPath } from "./paths.js";
5
4
  import { existsSync, readFileSync } from "fs";
5
+ import { z } from "zod";
6
6
  //#region src/config/models-json.ts
7
7
  /**
8
8
  * Models.json configuration types and schema
@@ -1,9 +1,9 @@
1
- import { ENV_VARS, init_paths_state, resolveHomeDir } from "./paths-state.js";
2
1
  import { createLogger } from "../utils/logger/index.js";
3
2
  import { init_logger } from "../utils/logger.js";
3
+ import { ENV_VARS, init_paths_state, resolveHomeDir } from "./paths-state.js";
4
+ import { mkdir, readdir, rm, stat } from "fs/promises";
4
5
  import { join } from "path";
5
6
  import { existsSync } from "fs";
6
- import { mkdir, readdir, rm, stat } from "fs/promises";
7
7
  //#region src/config/profile.ts
8
8
  init_logger();
9
9
  init_paths_state();
@@ -1,7 +1,7 @@
1
- import { init_agent_scope, normalizeAgentId } from "../agent/agent-scope.js";
2
- import { buildSessionKey, init_session_key } from "../routing/session-key.js";
3
1
  import { createLogger } from "../utils/logger/index.js";
4
2
  import { init_logger } from "../utils/logger.js";
3
+ import { init_agent_scope, normalizeAgentId } from "../agent/agent-scope.js";
4
+ import { buildSessionKey, init_session_key } from "../routing/session-key.js";
5
5
  import { bundledChannelPlugins } from "../generated/bundled-channel-plugins.js";
6
6
  import { shouldSilence, stripHeartbeatToken } from "../heartbeat/tokens.js";
7
7
  import { getChannelPlugin, listChannelPlugins, syncChannelPluginsFromManager } from "../channels/plugins/registry.js";
@@ -1,6 +1,6 @@
1
+ import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
1
2
  import { createLogger } from "../utils/logger/index.js";
2
3
  import { init_logger } from "../utils/logger.js";
3
- import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
4
  import { JobDataSchema } from "./validation.js";
5
5
  import { access, readFile } from "fs/promises";
6
6
  //#region src/cron/persistence.ts
@@ -1,8 +1,8 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { init_paths, resolveCronRunsDir } from "../config/paths.js";
4
- import { join } from "path";
5
4
  import { appendFile, mkdir, readFile, readdir, unlink, writeFile } from "fs/promises";
5
+ import { join } from "path";
6
6
  //#region src/cron/run-log-store.ts
7
7
  init_paths();
8
8
  init_logger();
@@ -1,10 +1,10 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import path from "node:path";
5
- import os from "node:os";
6
4
  import { existsSync } from "node:fs";
7
5
  import { access, constants as constants$1, mkdir, readFile, rm, writeFile } from "node:fs/promises";
6
+ import path from "node:path";
7
+ import os from "node:os";
8
8
  import { spawn, spawnSync } from "node:child_process";
9
9
  //#region src/daemon/launchd.ts
10
10
  /**
@@ -1,10 +1,10 @@
1
1
  import { __esmMin, __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import path from "node:path";
5
- import os from "node:os";
6
4
  import { existsSync } from "node:fs";
7
5
  import { access, constants as constants$1, mkdir, readFile, rm, writeFile } from "node:fs/promises";
6
+ import path from "node:path";
7
+ import os from "node:os";
8
8
  import { execSync, spawn, spawnSync } from "node:child_process";
9
9
  //#region src/daemon/systemd.ts
10
10
  /**
@@ -1,8 +1,8 @@
1
1
  import { init_paths, resolveExtensionsDir } from "../config/paths.js";
2
2
  import { getExtensionLockfileManager } from "./lockfile.js";
3
+ import { readFile, readdir } from "fs/promises";
3
4
  import { join } from "path";
4
5
  import { existsSync } from "fs";
5
- import { readFile, readdir } from "fs/promises";
6
6
  //#region src/extensions/health.ts
7
7
  init_paths();
8
8
  var ExtensionHealthChecker = class {
@@ -146,6 +146,11 @@ export declare class ExtensionLoader {
146
146
  */
147
147
  private claimExtensionSlots;
148
148
  loadManifest(extensionPath: string): ExtensionManifest | null;
149
+ /**
150
+ * Build candidate extension entry paths. After `tsdown`, manifests may still
151
+ * point at `*.ts` while the shipped tree only contains the emitted `*.js`.
152
+ */
153
+ private moduleEntryCandidates;
149
154
  private loadModule;
150
155
  private createExtensionApi;
151
156
  private initializeExtension;
@@ -1,7 +1,7 @@
1
1
  import { PACKAGE_VERSION, init_package_version } from "../package-version.js";
2
- import { init_agent_scope, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
3
2
  import { createLogger, createServiceLogger } from "../utils/logger/index.js";
4
3
  import { init_logger } from "../utils/logger.js";
4
+ import { init_agent_scope, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
5
5
  import { init_paths, resolveBundledExtensionsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveWorkspaceExtensionsDir } from "../config/paths.js";
6
6
  import { init_loader, loadConfig } from "../config/loader.js";
7
7
  import { getProviderRegistry, init_plugin_registry } from "../providers/plugin-registry.js";
@@ -617,14 +617,30 @@ var ExtensionLoader = class {
617
617
  }
618
618
  return null;
619
619
  }
620
- async loadModule(extensionPath, manifest) {
621
- const entryPoints = [
620
+ /**
621
+ * Build candidate extension entry paths. After `tsdown`, manifests may still
622
+ * point at `*.ts` while the shipped tree only contains the emitted `*.js`.
623
+ */
624
+ moduleEntryCandidates(manifest) {
625
+ const raw = [
622
626
  manifest.main,
623
627
  "index.ts",
624
628
  "index.js",
625
629
  "extension.ts",
626
630
  "extension.js"
627
631
  ].filter(Boolean);
632
+ const out = [];
633
+ for (const entry of raw) {
634
+ out.push(entry);
635
+ if (entry.endsWith(".tsx")) out.push(`${entry.slice(0, -4)}.js`);
636
+ else if (entry.endsWith(".ts")) out.push(`${entry.slice(0, -3)}.js`);
637
+ else if (entry.endsWith(".mts")) out.push(`${entry.slice(0, -4)}.mjs`);
638
+ else if (entry.endsWith(".cts")) out.push(`${entry.slice(0, -4)}.cjs`);
639
+ }
640
+ return [...new Set(out)];
641
+ }
642
+ async loadModule(extensionPath, manifest) {
643
+ const entryPoints = this.moduleEntryCandidates(manifest);
628
644
  for (const entry of entryPoints) {
629
645
  const fullPath = isAbsolute(entry) ? entry : join(extensionPath, entry);
630
646
  if (existsSync(fullPath)) try {