@dotobokuri/fleet-console 1.39.0 → 1.41.0

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 (71) hide show
  1. package/README.md +2 -3
  2. package/dist/cli.d.ts +2 -1
  3. package/dist/cli.mjs +152 -1182
  4. package/dist/client/assets/{_baseUniq-BDfju2rW.js → _baseUniq-CImzMrtU.js} +1 -1
  5. package/dist/client/assets/{arc-DWcMv-ui.js → arc-CKb0rHjN.js} +1 -1
  6. package/dist/client/assets/{architectureDiagram-Q4EWVU46-DhPv_Uba.js → architectureDiagram-Q4EWVU46-BaZipXSe.js} +1 -1
  7. package/dist/client/assets/{blockDiagram-DXYQGD6D-D7RYcNDP.js → blockDiagram-DXYQGD6D-D4sS9TjR.js} +1 -1
  8. package/dist/client/assets/{c4Diagram-AHTNJAMY-9_4dQBo3.js → c4Diagram-AHTNJAMY-DvjpMsKx.js} +1 -1
  9. package/dist/client/assets/channel-dSuGhtYS.js +1 -0
  10. package/dist/client/assets/{chunk-4BX2VUAB-CQf5x2mT.js → chunk-4BX2VUAB-B47BryhY.js} +1 -1
  11. package/dist/client/assets/{chunk-4TB4RGXK-eeG8BKQB.js → chunk-4TB4RGXK-DKIhSC52.js} +1 -1
  12. package/dist/client/assets/{chunk-55IACEB6-1dkBlsDt.js → chunk-55IACEB6-B3Gvpef7.js} +1 -1
  13. package/dist/client/assets/{chunk-EDXVE4YY-C5vcF-lT.js → chunk-EDXVE4YY-C4gFtvU8.js} +1 -1
  14. package/dist/client/assets/{chunk-FMBD7UC4-CGelAuwP.js → chunk-FMBD7UC4-BADPieOa.js} +1 -1
  15. package/dist/client/assets/{chunk-OYMX7WX6-CbKgVyop.js → chunk-OYMX7WX6-BUdtWGUY.js} +1 -1
  16. package/dist/client/assets/{chunk-QZHKN3VN-CT0ppG8R.js → chunk-QZHKN3VN-CMxkeGnM.js} +1 -1
  17. package/dist/client/assets/{chunk-YZCP3GAM-BEf8DhxB.js → chunk-YZCP3GAM-Br6N7t8d.js} +1 -1
  18. package/dist/client/assets/classDiagram-6PBFFD2Q-DEN4mh7x.js +1 -0
  19. package/dist/client/assets/classDiagram-v2-HSJHXN6E-DEN4mh7x.js +1 -0
  20. package/dist/client/assets/clone-BbTnmCoq.js +1 -0
  21. package/dist/client/assets/{cose-bilkent-S5V4N54A-C6GtvpYi.js → cose-bilkent-S5V4N54A-D1Uw7i5_.js} +1 -1
  22. package/dist/client/assets/{dagre-KV5264BT-DvrU2BgH.js → dagre-KV5264BT-kop0bHkM.js} +1 -1
  23. package/dist/client/assets/{diagram-5BDNPKRD-Cy1qKKqt.js → diagram-5BDNPKRD-B9e41qNA.js} +1 -1
  24. package/dist/client/assets/{diagram-G4DWMVQ6-C4GGKnnD.js → diagram-G4DWMVQ6-Wew8X03k.js} +1 -1
  25. package/dist/client/assets/{diagram-MMDJMWI5-By7JFsIw.js → diagram-MMDJMWI5-DGBb5Oqa.js} +1 -1
  26. package/dist/client/assets/{diagram-TYMM5635-YwzVWpID.js → diagram-TYMM5635-CiVNsAz6.js} +1 -1
  27. package/dist/client/assets/{erDiagram-SMLLAGMA-CDsNlmLk.js → erDiagram-SMLLAGMA-BdemYTgC.js} +1 -1
  28. package/dist/client/assets/{flowDiagram-DWJPFMVM-BuUpIzTa.js → flowDiagram-DWJPFMVM-CXC6yxhU.js} +1 -1
  29. package/dist/client/assets/{ganttDiagram-T4ZO3ILL-Dqv9t2x8.js → ganttDiagram-T4ZO3ILL-SMUpaiUg.js} +1 -1
  30. package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-DApQn2c7.js → gitGraphDiagram-UUTBAWPF-UaFgTHEh.js} +1 -1
  31. package/dist/client/assets/{graph-CyX-IC4n.js → graph-Ch8F0gMI.js} +1 -1
  32. package/dist/client/assets/index-D38r12i5.css +1 -0
  33. package/dist/client/assets/index-DkTcJcbj.js +452 -0
  34. package/dist/client/assets/{infoDiagram-42DDH7IO-DIf3qelw.js → infoDiagram-42DDH7IO-BHBzw0bu.js} +1 -1
  35. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-CU3QtNdx.js → ishikawaDiagram-UXIWVN3A-CnDea8bw.js} +1 -1
  36. package/dist/client/assets/{journeyDiagram-VCZTEJTY-Dfq4OBhW.js → journeyDiagram-VCZTEJTY-CI91m8BP.js} +1 -1
  37. package/dist/client/assets/{kanban-definition-6JOO6SKY-CWSe3eh7.js → kanban-definition-6JOO6SKY-D-rn-rG2.js} +1 -1
  38. package/dist/client/assets/{layout-CfdpDpEB.js → layout-Cd9zpG94.js} +1 -1
  39. package/dist/client/assets/{linear-BQA5wLDW.js → linear-Cucr1ojd.js} +1 -1
  40. package/dist/client/assets/{mermaid.core-BwJS5O4y.js → mermaid.core-G36P12JZ.js} +4 -4
  41. package/dist/client/assets/{min-Cg-Q6TB5.js → min-CzfCLG7v.js} +1 -1
  42. package/dist/client/assets/{mindmap-definition-QFDTVHPH-BNXT0q7L.js → mindmap-definition-QFDTVHPH-4e1VjBV7.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-DEJITSTG-Cot4WNe7.js → pieDiagram-DEJITSTG-m2CGbU51.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-34T5L4WZ-_YW3nZwc.js → quadrantDiagram-34T5L4WZ-BKNPGqMc.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-MS252O5E-didEilrX.js → requirementDiagram-MS252O5E-D2BMwnpz.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-XADWPNL6-CIpzp5Ep.js → sankeyDiagram-XADWPNL6-Bm6hTqEh.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-FGHM5R23-CqvwD_CI.js → sequenceDiagram-FGHM5R23-Ds2FEGPj.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-FHFEXIEX-D492KgCG.js → stateDiagram-FHFEXIEX-CrXn2Tb7.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BbzpXIlW.js +1 -0
  50. package/dist/client/assets/{timeline-definition-GMOUNBTQ-BpAwqH0H.js → timeline-definition-GMOUNBTQ-mw053fb5.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-DHZGUBPP-DDMPO_HG.js → vennDiagram-DHZGUBPP-CAws0Vt2.js} +1 -1
  52. package/dist/client/assets/{wardley-RL74JXVD-TKEj0wFU.js → wardley-RL74JXVD-DGad2cmz.js} +1 -1
  53. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-CLjBh2KA.js → wardleyDiagram-NUSXRM2D-BlIyft8I.js} +1 -1
  54. package/dist/client/assets/{xychartDiagram-5P7HB3ND-DEn2Z9lG.js → xychartDiagram-5P7HB3ND-DHmSULAI.js} +1 -1
  55. package/dist/client/index.html +2 -2
  56. package/dist/client/theme-boot.js +5 -4
  57. package/dist/fleet-plugins/file-explorer/routes.mjs +484 -56
  58. package/dist/fleet-plugins/ledger/routes.mjs +56 -80
  59. package/dist/fleet-plugins/quota/routes.mjs +19806 -0
  60. package/dist/fleet-plugins/repository/routes.mjs +274 -17
  61. package/dist/fleet-plugins/scuttlebutt/routes.mjs +6 -431
  62. package/dist/fleet-plugins/skills/routes.mjs +1 -79
  63. package/dist/fleet-plugins/terminal/routes.mjs +12449 -2974
  64. package/package.json +1 -1
  65. package/dist/client/assets/channel-Cjiuj1tM.js +0 -1
  66. package/dist/client/assets/classDiagram-6PBFFD2Q-B-_6FtAZ.js +0 -1
  67. package/dist/client/assets/classDiagram-v2-HSJHXN6E-B-_6FtAZ.js +0 -1
  68. package/dist/client/assets/clone-BF2H_qSP.js +0 -1
  69. package/dist/client/assets/index-RzoF0XVt.js +0 -452
  70. package/dist/client/assets/index-bog2t8Rz.css +0 -1
  71. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-DUe9CEL6.js +0 -1
@@ -18913,7 +18913,7 @@ var AcpConnection = class extends BaseConnection {
18913
18913
  }
18914
18914
  /** Claude 계열 브릿지인지 여부를 단일 판별 지점으로 유지합니다. */
18915
18915
  isClaudeBackend() {
18916
- return this.cliType === "claude" || this.cliType === "claude-kimi";
18916
+ return this.cliType === "claude";
18917
18917
  }
18918
18918
  /** Claude bridge 전용 system prompt replacement, strict-MCP와 effort `_meta`를 조립합니다. */
18919
18919
  buildClaudeSessionMeta(systemPrompt, strictMcp, effort) {
@@ -19379,22 +19379,6 @@ var models_default = {
19379
19379
  { modelId: "claude-opus-4-8[1m]", name: "Claude Opus 4.8 [1M]", effort: { supported: true, levels: ["low", "medium", "high", "xhigh", "max"], default: "high" } }
19380
19380
  ]
19381
19381
  },
19382
- "claude-kimi": {
19383
- name: "Kimi via Claude Code",
19384
- defaultModel: "kimi-for-coding",
19385
- models: [
19386
- { modelId: "kimi-for-coding", name: "Kimi for Coding", description: "Available on every Kimi Code membership tier (262K context)", effort: { supported: false }, contextWindow: 262144 },
19387
- { modelId: "k3", name: "Kimi K3", description: "Available on Moderato and higher tiers (262K context)", effort: { supported: true, levels: ["low", "high", "max"], default: "high" }, contextWindow: 262144 },
19388
- { modelId: "k3[1m]", name: "Kimi K3 [1M]", description: "Available on Allegretto and higher tiers (1M context)", effort: { supported: true, levels: ["low", "high", "max"], default: "high" }, contextWindow: 1048576 },
19389
- { modelId: "kimi-for-coding-highspeed", name: "Kimi for Coding Highspeed", description: "Available on Allegretto and higher tiers (262K context)", effort: { supported: false }, contextWindow: 262144 }
19390
- ],
19391
- modelsMapping: {
19392
- haiku: "kimi-for-coding",
19393
- sonnet: "kimi-for-coding",
19394
- opus: "kimi-for-coding",
19395
- fable: "kimi-for-coding"
19396
- }
19397
- },
19398
19382
  codex: {
19399
19383
  name: "Codex",
19400
19384
  defaultModel: "gpt-5.6-sol",
@@ -19409,23 +19393,6 @@ var models_default = {
19409
19393
  { modelId: "gpt-5.5-fast", name: "GPT-5.5 Fast", providerModelId: "gpt-5.5", serviceTier: "priority", effort: { supported: true, levels: ["low", "medium", "high", "xhigh"], default: "high" } }
19410
19394
  ]
19411
19395
  },
19412
- "opencode-go": {
19413
- name: "OpenCode Go",
19414
- defaultModel: "opencode-go/deepseek-v4-flash",
19415
- models: [
19416
- { modelId: "opencode-go/deepseek-v4-flash", name: "DeepSeek V4 Flash", effort: { supported: false } },
19417
- { modelId: "opencode-go/deepseek-v4-pro", name: "DeepSeek V4 Pro", effort: { supported: false } },
19418
- { modelId: "opencode-go/glm-5.2", name: "GLM-5.2", effort: { supported: false } },
19419
- { modelId: "opencode-go/grok-4.5", name: "Grok 4.5", effort: { supported: false } },
19420
- { modelId: "opencode-go/kimi-k3", name: "Kimi K3", effort: { supported: false } },
19421
- { modelId: "opencode-go/kimi-k2.7-code", name: "Kimi K2.7 Code", effort: { supported: false } },
19422
- { modelId: "opencode-go/mimo-v2.5", name: "MiMo V2.5", effort: { supported: false } },
19423
- { modelId: "opencode-go/mimo-v2.5-pro", name: "MiMo V2.5 Pro", effort: { supported: false } },
19424
- { modelId: "opencode-go/minimax-m3", name: "MiniMax M3", effort: { supported: false } },
19425
- { modelId: "opencode-go/qwen3.7-max", name: "Qwen3.7 Max", effort: { supported: false } },
19426
- { modelId: "opencode-go/qwen3.7-plus", name: "Qwen3.7 Plus", effort: { supported: false } }
19427
- ]
19428
- },
19429
19396
  cursor: {
19430
19397
  name: "Cursor Agent",
19431
19398
  defaultModel: "auto",
@@ -19527,16 +19494,13 @@ var ModelEntrySchema = external_exports.object({
19527
19494
  });
19528
19495
  }
19529
19496
  });
19530
- var ModelsMappingSchema = external_exports.record(external_exports.string(), external_exports.string());
19531
19497
  var ProviderSchema = external_exports.object({
19532
19498
  /** 프로바이더 표시 이름 */
19533
19499
  name: external_exports.string(),
19534
19500
  /** 기본 모델 ID */
19535
19501
  defaultModel: external_exports.string(),
19536
19502
  /** 사용 가능한 모델 목록 */
19537
- models: external_exports.array(ModelEntrySchema).min(1),
19538
- /** modelId와 연관된 매핑 모델 (선택) */
19539
- modelsMapping: ModelsMappingSchema.optional()
19503
+ models: external_exports.array(ModelEntrySchema).min(1)
19540
19504
  }).check((ctx) => {
19541
19505
  const ids = new Set(ctx.value.models.map((m) => m.modelId));
19542
19506
  if (!ids.has(ctx.value.defaultModel)) {
@@ -19602,13 +19566,6 @@ function resolveCursorSpawnModel(modelId, effort) {
19602
19566
  }
19603
19567
  return model.spawnModelTemplate.replace("{effort}", resolvedLevel);
19604
19568
  }
19605
- function getProviderModelsMapping(cli) {
19606
- const provider = registry2.providers[cli];
19607
- if (!provider) {
19608
- throw new Error(`\uC54C \uC218 \uC5C6\uB294 \uD504\uB85C\uBC14\uC774\uB354: "${cli}"`);
19609
- }
19610
- return provider.modelsMapping ? structuredClone(provider.modelsMapping) : null;
19611
- }
19612
19569
  function findProviderModel(cli, modelId) {
19613
19570
  const provider = registry2.providers[cli];
19614
19571
  if (!provider) {
@@ -19640,32 +19597,6 @@ var CLI_BACKENDS = {
19640
19597
  usesNpxBridge: true,
19641
19598
  defaultMaxTokens: 16384
19642
19599
  },
19643
- "claude-kimi": {
19644
- id: "claude-kimi",
19645
- cliCommand: "claude",
19646
- protocol: "acp",
19647
- authRequired: true,
19648
- npxPackage: "@agentclientprotocol/claude-agent-acp@0.33.1",
19649
- modes: [
19650
- { id: "default", label: "Default" },
19651
- { id: "plan", label: "Plan" },
19652
- { id: "bypassPermissions", label: "YOLO" }
19653
- ],
19654
- supportsSessionClose: true,
19655
- supportsSessionLoad: true,
19656
- requiresModelAtSpawn: false,
19657
- usesNpxBridge: true,
19658
- defaultMaxTokens: 262144,
19659
- defaultEnv: {
19660
- ANTHROPIC_BASE_URL: "https://api.kimi.com/coding/",
19661
- ANTHROPIC_MODEL: "kimi-for-coding",
19662
- ANTHROPIC_DEFAULT_HAIKU_MODEL: "kimi-for-coding",
19663
- ANTHROPIC_DEFAULT_SONNET_MODEL: "kimi-for-coding",
19664
- ANTHROPIC_DEFAULT_OPUS_MODEL: "kimi-for-coding",
19665
- CLAUDE_CODE_SUBAGENT_MODEL: "kimi-for-coding",
19666
- API_TIMEOUT_MS: "3000000"
19667
- }
19668
- },
19669
19600
  codex: {
19670
19601
  id: "codex",
19671
19602
  cliCommand: "codex",
@@ -19683,22 +19614,6 @@ var CLI_BACKENDS = {
19683
19614
  usesNpxBridge: false,
19684
19615
  defaultMaxTokens: 1e5
19685
19616
  },
19686
- "opencode-go": {
19687
- id: "opencode-go",
19688
- cliCommand: "opencode",
19689
- protocol: "acp",
19690
- authRequired: false,
19691
- acpArgs: ["acp"],
19692
- modes: [
19693
- { id: "build", label: "Build" },
19694
- { id: "plan", label: "Plan" }
19695
- ],
19696
- supportsSessionClose: true,
19697
- supportsSessionLoad: true,
19698
- requiresModelAtSpawn: true,
19699
- usesNpxBridge: false,
19700
- defaultMaxTokens: 128e3
19701
- },
19702
19617
  cursor: {
19703
19618
  id: "cursor",
19704
19619
  cliCommand: "cursor-agent",
@@ -19758,10 +19673,7 @@ function getBackendConfig(cli) {
19758
19673
  function getYoloModeId(cli) {
19759
19674
  switch (cli) {
19760
19675
  case "claude":
19761
- case "claude-kimi":
19762
19676
  return "bypassPermissions";
19763
- case "opencode-go":
19764
- return "build";
19765
19677
  case "cursor":
19766
19678
  return "agent";
19767
19679
  case "codex":
@@ -19972,11 +19884,7 @@ var UnifiedClaudeAgentClient = class extends EventEmitter {
19972
19884
  firstPromptPending = null;
19973
19885
  currentEffort = null;
19974
19886
  detector = new CliDetector();
19975
- cliType;
19976
- constructor(cliType = "claude") {
19977
- super();
19978
- this.cliType = cliType;
19979
- }
19887
+ cliType = "claude";
19980
19888
  on(event, listener) {
19981
19889
  return super.on(event, listener);
19982
19890
  }
@@ -19992,31 +19900,14 @@ var UnifiedClaudeAgentClient = class extends EventEmitter {
19992
19900
  async connect(options) {
19993
19901
  await this.disconnect();
19994
19902
  const systemPromptMode = options.systemPromptMode ?? "prepend";
19995
- const requestedCli = options.cli ?? this.cliType;
19996
- if (systemPromptMode === "replace" && requestedCli !== "claude" && requestedCli !== "claude-kimi") {
19997
- throw new Error(
19998
- `system prompt replacement is not supported by the "${requestedCli}" backend`
19999
- );
20000
- }
20001
19903
  if (options.cli && options.cli !== this.cliType) {
20002
19904
  throw new Error(`UnifiedClaudeAgentClient\uB294 ${this.cliType} CLI\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4.`);
20003
19905
  }
20004
19906
  const acpMcpServers = this.resolveMcpServers(options.mcpServers);
20005
19907
  const spawnConfig = createSpawnConfig(this.cliType, options);
20006
- const modelsMapping = getProviderModelsMapping(this.cliType);
20007
- const mappingEnv = {};
20008
- if (modelsMapping) {
20009
- for (const [modelId, mappedModel] of Object.entries(modelsMapping)) {
20010
- const envKey = `ANTHROPIC_DEFAULT_${modelId.toUpperCase()}_MODEL`;
20011
- mappingEnv[envKey] = mappedModel;
20012
- }
20013
- }
20014
19908
  const backendConfig = getBackendConfig(this.cliType);
20015
19909
  const defaultEnv = backendConfig.defaultEnv ?? {};
20016
- const cleanEnv = cleanEnvironment(process.env, { ...defaultEnv, ...mappingEnv, ...options.env });
20017
- if (this.cliType === "claude-kimi") {
20018
- delete cleanEnv.ANTHROPIC_AUTH_TOKEN;
20019
- }
19910
+ const cleanEnv = cleanEnvironment(process.env, { ...defaultEnv, ...options.env });
20020
19911
  if (defaultEnv.ANTHROPIC_BASE_URL && !cleanEnv.ANTHROPIC_API_KEY && !cleanEnv.ANTHROPIC_AUTH_TOKEN) {
20021
19912
  throw new Error(
20022
19913
  `[${this.cliType}] ANTHROPIC_API_KEY \uD658\uACBD\uBCC0\uC218\uAC00 \uC124\uC815\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4. ${getProviderModels(this.cliType).name} API \uD0A4\uB97C \uC124\uC815\uD574\uC8FC\uC138\uC694.`
@@ -22161,331 +22052,15 @@ var UnifiedCursorAgentClient = class extends EventEmitter {
22161
22052
  return patterns.some((pattern) => pattern.test(text));
22162
22053
  }
22163
22054
  };
22164
- var UnifiedOpenCodeAgentClient = class _UnifiedOpenCodeAgentClient extends EventEmitter {
22165
- providerId;
22166
- connection = null;
22167
- sessionId = null;
22168
- sessionCwd = null;
22169
- currentSystemPrompt = null;
22170
- /** 첫 프롬프트 전송 시 systemPrompt를 텍스트 블록으로 앞에 붙이기 위한 플래그 */
22171
- firstPromptPending = null;
22172
- detector = new CliDetector();
22173
- constructor(providerId) {
22174
- super();
22175
- this.providerId = providerId;
22176
- }
22177
- on(event, listener) {
22178
- return super.on(event, listener);
22179
- }
22180
- once(event, listener) {
22181
- return super.once(event, listener);
22182
- }
22183
- off(event, listener) {
22184
- return super.off(event, listener);
22185
- }
22186
- emitTyped(event, ...args) {
22187
- return super.emit(event, ...args);
22188
- }
22189
- async connect(options) {
22190
- await this.disconnect();
22191
- if (options.cli && options.cli !== this.providerId) {
22192
- throw new Error(`UnifiedOpenCodeAgentClient\uB294 ${this.providerId} CLI\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4.`);
22193
- }
22194
- const acpMcpServers = this.resolveMcpServers(options.mcpServers);
22195
- const spawnConfig = createSpawnConfig(this.providerId, options);
22196
- const cleanEnv = cleanEnvironment(process.env, options.env);
22197
- cleanEnv.OPENCODE_CONFIG_CONTENT = JSON.stringify({
22198
- agent: {
22199
- explore: { disable: true },
22200
- plan: { disable: true },
22201
- general: { disable: true }
22202
- }
22203
- });
22204
- const connection = new AcpConnection({
22205
- command: spawnConfig.command,
22206
- args: spawnConfig.args,
22207
- cliType: this.providerId,
22208
- cwd: options.cwd,
22209
- env: cleanEnv,
22210
- requestTimeout: options.timeout,
22211
- initTimeout: options.timeout,
22212
- promptIdleTimeout: options.promptIdleTimeout,
22213
- clientInfo: options.clientInfo,
22214
- autoApprove: options.autoApprove,
22215
- fsAccess: options.fsAccess
22216
- });
22217
- this.connection = connection;
22218
- this.setupEventForwarding();
22219
- const recentLogs = [];
22220
- const collectLog = (message) => {
22221
- recentLogs.push(message);
22222
- if (recentLogs.length > 30) {
22223
- recentLogs.shift();
22224
- }
22225
- };
22226
- connection.on("log", collectLog);
22227
- let session;
22228
- try {
22229
- session = await connection.connect(
22230
- options.cwd,
22231
- options.sessionId,
22232
- acpMcpServers,
22233
- void 0
22234
- );
22235
- } catch (error51) {
22236
- const connectionError = this.buildConnectionError(error51, recentLogs);
22237
- await this.cleanupFailedConnection();
22238
- throw connectionError;
22239
- } finally {
22240
- connection.off("log", collectLog);
22241
- }
22242
- return this.finalizeConnect(options, session);
22243
- }
22244
- async disconnect() {
22245
- if (!this.connection) {
22246
- this.clearSessionState();
22247
- return;
22248
- }
22249
- const conn = this.connection;
22250
- await conn.disconnect();
22251
- conn.removeAllListeners();
22252
- this.connection = null;
22253
- this.clearSessionState();
22254
- }
22255
- async endSession() {
22256
- if (!this.connection || !this.sessionId) {
22257
- throw new Error("\uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
22258
- }
22259
- await this.connection.endSession(this.sessionId);
22260
- this.sessionId = null;
22261
- }
22262
- getConnectionInfo() {
22263
- return {
22264
- cli: this.connection ? this.providerId : null,
22265
- protocol: this.connection ? "acp" : null,
22266
- sessionId: this.sessionId,
22267
- state: this.connection ? this.connection.connectionState : "disconnected"
22268
- };
22269
- }
22270
- async detectClis() {
22271
- return this.detector.detectAll(true);
22272
- }
22273
- async sendMessage(content) {
22274
- if (!this.connection || !this.sessionId) {
22275
- throw new Error("\uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
22276
- }
22277
- const systemPrompt = this.firstPromptPending;
22278
- if (!systemPrompt) {
22279
- return this.connection.sendPrompt(this.sessionId, content);
22280
- }
22281
- const userBlocks = typeof content === "string" ? [{ type: "text", text: content }] : content;
22282
- const response = await this.connection.sendPrompt(this.sessionId, [
22283
- { type: "text", text: systemPrompt },
22284
- ...userBlocks
22285
- ]);
22286
- this.firstPromptPending = null;
22287
- return response;
22288
- }
22289
- async cancelPrompt() {
22290
- if (!this.connection || !this.sessionId) {
22291
- throw new Error("\uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
22292
- }
22293
- await this.connection.cancelSession(this.sessionId);
22294
- }
22295
- async setModel(model) {
22296
- if (!this.connection || !this.sessionId) {
22297
- throw new Error("\uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
22298
- }
22299
- await this.connection.setModel(this.sessionId, model);
22300
- }
22301
- async setConfigOption(configId, value) {
22302
- if (!this.connection || !this.sessionId) {
22303
- throw new Error("\uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
22304
- }
22305
- await this.connection.setConfigOption(this.sessionId, configId, value);
22306
- }
22307
- async setMode(mode) {
22308
- if (!this.connection || !this.sessionId) {
22309
- throw new Error("\uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
22310
- }
22311
- await this.connection.setMode(this.sessionId, mode);
22312
- }
22313
- async setYoloMode(enabled) {
22314
- return this.setMode(enabled ? getYoloModeId(this.providerId) : "plan");
22315
- }
22316
- getAvailableModes() {
22317
- return getBackendConfig(this.providerId).modes ?? [];
22318
- }
22319
- getAvailableModels() {
22320
- return getProviderModels(this.providerId);
22321
- }
22322
- getCurrentSystemPrompt() {
22323
- return this.currentSystemPrompt;
22324
- }
22325
- async loadSession(sessionId, mcpServers) {
22326
- if (!this.connection) {
22327
- throw new Error("\uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
22328
- }
22329
- await this.connection.loadSession({
22330
- sessionId,
22331
- cwd: this.sessionCwd ?? process.cwd(),
22332
- mcpServers: this.resolveMcpServers(mcpServers)
22333
- });
22334
- this.sessionId = sessionId;
22335
- this.currentSystemPrompt = null;
22336
- this.firstPromptPending = null;
22337
- }
22338
- async resetSession(cwd) {
22339
- if (!this.connection) {
22340
- throw new Error("\uC5F0\uACB0\uB418\uC5B4 \uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4");
22341
- }
22342
- const targetCwd = cwd ?? this.sessionCwd ?? process.cwd();
22343
- await this.disconnect();
22344
- const newClient = new _UnifiedOpenCodeAgentClient(this.providerId);
22345
- const result = await newClient.connect({
22346
- cwd: targetCwd,
22347
- autoApprove: true,
22348
- systemPrompt: this.currentSystemPrompt ?? void 0
22349
- });
22350
- this.connection = newClient.connection;
22351
- this.sessionId = newClient.sessionId;
22352
- this.sessionCwd = newClient.sessionCwd;
22353
- this.currentSystemPrompt = newClient.currentSystemPrompt;
22354
- this.firstPromptPending = newClient.firstPromptPending;
22355
- this.setupEventForwarding();
22356
- newClient.removeAllListeners();
22357
- return {
22358
- cli: this.providerId,
22359
- protocol: "acp",
22360
- session: result.session
22361
- };
22362
- }
22363
- resolveMcpServers(servers) {
22364
- return servers?.length ? mcpServerConfigsToAcp(servers) : [];
22365
- }
22366
- async finalizeConnect(options, session) {
22367
- if (options.yoloMode && session.sessionId) {
22368
- try {
22369
- await this.connection.setMode(session.sessionId, getYoloModeId(this.providerId));
22370
- } catch {
22371
- }
22372
- }
22373
- if (options.model && session.sessionId) {
22374
- try {
22375
- await this.connection.setModel(session.sessionId, options.model);
22376
- } catch {
22377
- }
22378
- }
22379
- this.sessionId = session.sessionId;
22380
- this.sessionCwd = options.cwd;
22381
- this.currentSystemPrompt = options.systemPrompt ?? null;
22382
- this.firstPromptPending = options.sessionId ? null : this.currentSystemPrompt;
22383
- return {
22384
- cli: this.providerId,
22385
- protocol: "acp",
22386
- session
22387
- };
22388
- }
22389
- clearSessionState() {
22390
- this.sessionId = null;
22391
- this.sessionCwd = null;
22392
- this.currentSystemPrompt = null;
22393
- this.firstPromptPending = null;
22394
- }
22395
- setupEventForwarding() {
22396
- if (!this.connection) return;
22397
- this.connection.on("stateChange", (state) => {
22398
- this.emitTyped("stateChange", state);
22399
- });
22400
- this.connection.on("userMessageChunk", (text, sessionId) => {
22401
- this.emitTyped("userMessageChunk", text, sessionId);
22402
- });
22403
- this.connection.on("messageChunk", (text, sessionId) => {
22404
- this.emitTyped("messageChunk", text, sessionId);
22405
- });
22406
- this.connection.on("thoughtChunk", (text, sessionId) => {
22407
- this.emitTyped("thoughtChunk", text, sessionId);
22408
- });
22409
- this.connection.on("toolCall", (title, status, sessionId, data) => {
22410
- this.emitTyped("toolCall", title, status, sessionId, data);
22411
- });
22412
- this.connection.on("toolCallUpdate", (title, status, sessionId, data) => {
22413
- this.emitTyped("toolCallUpdate", title, status, sessionId, data);
22414
- });
22415
- this.connection.on("plan", (plan, sessionId) => {
22416
- this.emitTyped("plan", plan, sessionId);
22417
- });
22418
- this.connection.on("availableCommandsUpdate", (commands, sessionId) => {
22419
- this.emitTyped("availableCommandsUpdate", commands, sessionId);
22420
- });
22421
- this.connection.on("sessionUpdate", (update) => {
22422
- this.emitTyped("sessionUpdate", update);
22423
- });
22424
- this.connection.on("permissionRequest", (params, resolve) => {
22425
- this.emitTyped("permissionRequest", params, resolve);
22426
- });
22427
- this.connection.on("fileRead", (params, resolve) => {
22428
- this.emitTyped("fileRead", params, resolve);
22429
- });
22430
- this.connection.on("fileWrite", (params, resolve) => {
22431
- this.emitTyped("fileWrite", params, resolve);
22432
- });
22433
- this.connection.on("promptComplete", (sessionId) => {
22434
- this.emitTyped("promptComplete", sessionId);
22435
- });
22436
- this.connection.on("error", (err) => {
22437
- this.emitTyped("error", err);
22438
- });
22439
- this.connection.on("exit", (code, signal) => {
22440
- this.emitTyped("exit", code, signal);
22441
- });
22442
- this.connection.on("log", (msg) => {
22443
- this.emitTyped("log", msg);
22444
- });
22445
- this.connection.on("logEntry", (entry) => {
22446
- this.emitTyped("logEntry", entry);
22447
- });
22448
- }
22449
- async cleanupFailedConnection() {
22450
- if (!this.connection) {
22451
- return;
22452
- }
22453
- try {
22454
- await this.connection.disconnect();
22455
- } catch {
22456
- }
22457
- this.connection.removeAllListeners();
22458
- this.connection = null;
22459
- this.clearSessionState();
22460
- }
22461
- buildConnectionError(error51, _recentLogs) {
22462
- if (error51 instanceof Error) {
22463
- return error51;
22464
- }
22465
- if (typeof error51 === "object" && error51 !== null) {
22466
- const obj = error51;
22467
- if (typeof obj.message === "string") {
22468
- const code = typeof obj.code === "number" ? ` (code: ${obj.code})` : "";
22469
- const data = obj.data ? ` \u2014 ${JSON.stringify(obj.data)}` : "";
22470
- return new Error(`${obj.message}${code}${data}`);
22471
- }
22472
- return new Error(JSON.stringify(error51));
22473
- }
22474
- return new Error(String(error51));
22475
- }
22476
- };
22477
22055
 
22478
22056
  // ../../packages/core-unified-agent/src/client/UnifiedAgent.ts
22479
22057
  var UnifiedAgent = {
22480
22058
  createClient(cli) {
22481
22059
  switch (cli) {
22482
22060
  case "claude":
22483
- case "claude-kimi":
22484
- return new UnifiedClaudeAgentClient(cli);
22061
+ return new UnifiedClaudeAgentClient();
22485
22062
  case "codex":
22486
22063
  return new UnifiedCodexAgentClient();
22487
- case "opencode-go":
22488
- return new UnifiedOpenCodeAgentClient("opencode-go");
22489
22064
  case "cursor":
22490
22065
  return new UnifiedCursorAgentClient();
22491
22066
  }
@@ -22500,7 +22075,7 @@ var UnifiedAgent = {
22500
22075
  const preferred = await new CliDetector().getPreferred();
22501
22076
  if (!preferred) {
22502
22077
  throw new Error(
22503
- "\uC0AC\uC6A9 \uAC00\uB2A5\uD55C CLI\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. claude, claude-kimi, codex, opencode-go, cursor \uC911 \uD558\uB098\uB97C \uC124\uCE58\uD574\uC8FC\uC138\uC694."
22078
+ "\uC0AC\uC6A9 \uAC00\uB2A5\uD55C CLI\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. claude, codex, cursor \uC911 \uD558\uB098\uB97C \uC124\uCE58\uD574\uC8FC\uC138\uC694."
22504
22079
  );
22505
22080
  }
22506
22081
  return this.createClient(preferred.cli);
@@ -16402,22 +16402,6 @@ var models_default = {
16402
16402
  { modelId: "claude-opus-4-8[1m]", name: "Claude Opus 4.8 [1M]", effort: { supported: true, levels: ["low", "medium", "high", "xhigh", "max"], default: "high" } }
16403
16403
  ]
16404
16404
  },
16405
- "claude-kimi": {
16406
- name: "Kimi via Claude Code",
16407
- defaultModel: "kimi-for-coding",
16408
- models: [
16409
- { modelId: "kimi-for-coding", name: "Kimi for Coding", description: "Available on every Kimi Code membership tier (262K context)", effort: { supported: false }, contextWindow: 262144 },
16410
- { modelId: "k3", name: "Kimi K3", description: "Available on Moderato and higher tiers (262K context)", effort: { supported: true, levels: ["low", "high", "max"], default: "high" }, contextWindow: 262144 },
16411
- { modelId: "k3[1m]", name: "Kimi K3 [1M]", description: "Available on Allegretto and higher tiers (1M context)", effort: { supported: true, levels: ["low", "high", "max"], default: "high" }, contextWindow: 1048576 },
16412
- { modelId: "kimi-for-coding-highspeed", name: "Kimi for Coding Highspeed", description: "Available on Allegretto and higher tiers (262K context)", effort: { supported: false }, contextWindow: 262144 }
16413
- ],
16414
- modelsMapping: {
16415
- haiku: "kimi-for-coding",
16416
- sonnet: "kimi-for-coding",
16417
- opus: "kimi-for-coding",
16418
- fable: "kimi-for-coding"
16419
- }
16420
- },
16421
16405
  codex: {
16422
16406
  name: "Codex",
16423
16407
  defaultModel: "gpt-5.6-sol",
@@ -16432,23 +16416,6 @@ var models_default = {
16432
16416
  { modelId: "gpt-5.5-fast", name: "GPT-5.5 Fast", providerModelId: "gpt-5.5", serviceTier: "priority", effort: { supported: true, levels: ["low", "medium", "high", "xhigh"], default: "high" } }
16433
16417
  ]
16434
16418
  },
16435
- "opencode-go": {
16436
- name: "OpenCode Go",
16437
- defaultModel: "opencode-go/deepseek-v4-flash",
16438
- models: [
16439
- { modelId: "opencode-go/deepseek-v4-flash", name: "DeepSeek V4 Flash", effort: { supported: false } },
16440
- { modelId: "opencode-go/deepseek-v4-pro", name: "DeepSeek V4 Pro", effort: { supported: false } },
16441
- { modelId: "opencode-go/glm-5.2", name: "GLM-5.2", effort: { supported: false } },
16442
- { modelId: "opencode-go/grok-4.5", name: "Grok 4.5", effort: { supported: false } },
16443
- { modelId: "opencode-go/kimi-k3", name: "Kimi K3", effort: { supported: false } },
16444
- { modelId: "opencode-go/kimi-k2.7-code", name: "Kimi K2.7 Code", effort: { supported: false } },
16445
- { modelId: "opencode-go/mimo-v2.5", name: "MiMo V2.5", effort: { supported: false } },
16446
- { modelId: "opencode-go/mimo-v2.5-pro", name: "MiMo V2.5 Pro", effort: { supported: false } },
16447
- { modelId: "opencode-go/minimax-m3", name: "MiniMax M3", effort: { supported: false } },
16448
- { modelId: "opencode-go/qwen3.7-max", name: "Qwen3.7 Max", effort: { supported: false } },
16449
- { modelId: "opencode-go/qwen3.7-plus", name: "Qwen3.7 Plus", effort: { supported: false } }
16450
- ]
16451
- },
16452
16419
  cursor: {
16453
16420
  name: "Cursor Agent",
16454
16421
  defaultModel: "auto",
@@ -16550,16 +16517,13 @@ var ModelEntrySchema = external_exports.object({
16550
16517
  });
16551
16518
  }
16552
16519
  });
16553
- var ModelsMappingSchema = external_exports.record(external_exports.string(), external_exports.string());
16554
16520
  var ProviderSchema = external_exports.object({
16555
16521
  /** 프로바이더 표시 이름 */
16556
16522
  name: external_exports.string(),
16557
16523
  /** 기본 모델 ID */
16558
16524
  defaultModel: external_exports.string(),
16559
16525
  /** 사용 가능한 모델 목록 */
16560
- models: external_exports.array(ModelEntrySchema).min(1),
16561
- /** modelId와 연관된 매핑 모델 (선택) */
16562
- modelsMapping: ModelsMappingSchema.optional()
16526
+ models: external_exports.array(ModelEntrySchema).min(1)
16563
16527
  }).check((ctx) => {
16564
16528
  const ids = new Set(ctx.value.models.map((m) => m.modelId));
16565
16529
  if (!ids.has(ctx.value.defaultModel)) {
@@ -16610,32 +16574,6 @@ var CLI_BACKENDS = {
16610
16574
  usesNpxBridge: true,
16611
16575
  defaultMaxTokens: 16384
16612
16576
  },
16613
- "claude-kimi": {
16614
- id: "claude-kimi",
16615
- cliCommand: "claude",
16616
- protocol: "acp",
16617
- authRequired: true,
16618
- npxPackage: "@agentclientprotocol/claude-agent-acp@0.33.1",
16619
- modes: [
16620
- { id: "default", label: "Default" },
16621
- { id: "plan", label: "Plan" },
16622
- { id: "bypassPermissions", label: "YOLO" }
16623
- ],
16624
- supportsSessionClose: true,
16625
- supportsSessionLoad: true,
16626
- requiresModelAtSpawn: false,
16627
- usesNpxBridge: true,
16628
- defaultMaxTokens: 262144,
16629
- defaultEnv: {
16630
- ANTHROPIC_BASE_URL: "https://api.kimi.com/coding/",
16631
- ANTHROPIC_MODEL: "kimi-for-coding",
16632
- ANTHROPIC_DEFAULT_HAIKU_MODEL: "kimi-for-coding",
16633
- ANTHROPIC_DEFAULT_SONNET_MODEL: "kimi-for-coding",
16634
- ANTHROPIC_DEFAULT_OPUS_MODEL: "kimi-for-coding",
16635
- CLAUDE_CODE_SUBAGENT_MODEL: "kimi-for-coding",
16636
- API_TIMEOUT_MS: "3000000"
16637
- }
16638
- },
16639
16577
  codex: {
16640
16578
  id: "codex",
16641
16579
  cliCommand: "codex",
@@ -16653,22 +16591,6 @@ var CLI_BACKENDS = {
16653
16591
  usesNpxBridge: false,
16654
16592
  defaultMaxTokens: 1e5
16655
16593
  },
16656
- "opencode-go": {
16657
- id: "opencode-go",
16658
- cliCommand: "opencode",
16659
- protocol: "acp",
16660
- authRequired: false,
16661
- acpArgs: ["acp"],
16662
- modes: [
16663
- { id: "build", label: "Build" },
16664
- { id: "plan", label: "Plan" }
16665
- ],
16666
- supportsSessionClose: true,
16667
- supportsSessionLoad: true,
16668
- requiresModelAtSpawn: true,
16669
- usesNpxBridge: false,
16670
- defaultMaxTokens: 128e3
16671
- },
16672
16594
  cursor: {
16673
16595
  id: "cursor",
16674
16596
  cliCommand: "cursor-agent",