@ai-agent-forge/agent-forge 0.87.0 → 0.88.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 (137) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +2 -2
  3. package/dist/bundle/.build-manifest.json +65 -87
  4. package/dist/bundle/chunks/{chunk-BFC2BDVJ.js → chunk-HLJEVRWP.js} +2 -2
  5. package/dist/bundle/chunks/{chunk-MOHOLL3F.js → chunk-YGHQME4V.js} +72 -72
  6. package/dist/bundle/chunks/image-resize-worker.js +2 -2
  7. package/dist/bundle/cli.js +1 -1
  8. package/dist/bundle/client.js +1 -1
  9. package/dist/bundle/index.js +1 -1
  10. package/dist/bundle/rpc-entry.js +1 -1
  11. package/dist/cli/auth-check.d.ts.map +1 -1
  12. package/dist/cli/auth-check.js +14 -2
  13. package/dist/cli/auth-check.js.map +1 -1
  14. package/dist/cli/auth-command.d.ts.map +1 -1
  15. package/dist/cli/auth-command.js +1 -1
  16. package/dist/cli/auth-command.js.map +1 -1
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +3 -2
  19. package/dist/config.js.map +1 -1
  20. package/dist/core/agent-session-compaction.d.ts +6 -10
  21. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  22. package/dist/core/agent-session-compaction.js +7 -111
  23. package/dist/core/agent-session-compaction.js.map +1 -1
  24. package/dist/core/agent-session-internal.d.ts +0 -6
  25. package/dist/core/agent-session-internal.d.ts.map +1 -1
  26. package/dist/core/agent-session-internal.js.map +1 -1
  27. package/dist/core/agent-session-retry.d.ts.map +1 -1
  28. package/dist/core/agent-session-retry.js +0 -1
  29. package/dist/core/agent-session-retry.js.map +1 -1
  30. package/dist/core/agent-session.d.ts +0 -20
  31. package/dist/core/agent-session.d.ts.map +1 -1
  32. package/dist/core/agent-session.js +5 -33
  33. package/dist/core/agent-session.js.map +1 -1
  34. package/dist/core/extensions/bootstrap-compaction-policy.d.ts.map +1 -1
  35. package/dist/core/extensions/bootstrap-compaction-policy.js +0 -34
  36. package/dist/core/extensions/bootstrap-compaction-policy.js.map +1 -1
  37. package/dist/core/extensions/bootstrap-retry-policy.d.ts.map +1 -1
  38. package/dist/core/extensions/bootstrap-retry-policy.js +2 -2
  39. package/dist/core/extensions/bootstrap-retry-policy.js.map +1 -1
  40. package/dist/core/extensions/provider-failover.d.ts +7 -3
  41. package/dist/core/extensions/provider-failover.d.ts.map +1 -1
  42. package/dist/core/extensions/provider-failover.js +9 -8
  43. package/dist/core/extensions/provider-failover.js.map +1 -1
  44. package/dist/core/facade/coding-agent-facade.d.ts +0 -6
  45. package/dist/core/facade/coding-agent-facade.d.ts.map +1 -1
  46. package/dist/core/facade/coding-agent-facade.js +0 -3
  47. package/dist/core/facade/coding-agent-facade.js.map +1 -1
  48. package/dist/core/i18n/locales/zh-cn/cli.d.ts.map +1 -1
  49. package/dist/core/i18n/locales/zh-cn/cli.js +3 -1
  50. package/dist/core/i18n/locales/zh-cn/cli.js.map +1 -1
  51. package/dist/core/i18n/locales/zh-cn/interactive-mode.d.ts.map +1 -1
  52. package/dist/core/i18n/locales/zh-cn/interactive-mode.js +2 -0
  53. package/dist/core/i18n/locales/zh-cn/interactive-mode.js.map +1 -1
  54. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.d.ts.map +1 -1
  55. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js +0 -2
  56. package/dist/core/i18n/locales/zh-cn/tui-components-selectors.js.map +1 -1
  57. package/dist/core/model-config.d.ts +0 -1
  58. package/dist/core/model-config.d.ts.map +1 -1
  59. package/dist/core/model-config.js +9 -1
  60. package/dist/core/model-config.js.map +1 -1
  61. package/dist/core/model-runtime.d.ts.map +1 -1
  62. package/dist/core/model-runtime.js +3 -3
  63. package/dist/core/model-runtime.js.map +1 -1
  64. package/dist/core/provider-composer.d.ts +2 -2
  65. package/dist/core/provider-composer.d.ts.map +1 -1
  66. package/dist/core/provider-composer.js +7 -8
  67. package/dist/core/provider-composer.js.map +1 -1
  68. package/dist/core/sdk.d.ts +8 -0
  69. package/dist/core/sdk.d.ts.map +1 -1
  70. package/dist/core/sdk.js +6 -1
  71. package/dist/core/sdk.js.map +1 -1
  72. package/dist/core/settings-manager.d.ts +9 -20
  73. package/dist/core/settings-manager.d.ts.map +1 -1
  74. package/dist/core/settings-manager.js +20 -54
  75. package/dist/core/settings-manager.js.map +1 -1
  76. package/dist/main.d.ts.map +1 -1
  77. package/dist/main.js +3 -2
  78. package/dist/main.js.map +1 -1
  79. package/dist/modes/interactive/components/footer.d.ts +0 -2
  80. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  81. package/dist/modes/interactive/components/footer.js +2 -7
  82. package/dist/modes/interactive/components/footer.js.map +1 -1
  83. package/dist/modes/interactive/components/settings-selector.d.ts +2 -6
  84. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  85. package/dist/modes/interactive/components/settings-selector.js +6 -28
  86. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  87. package/dist/modes/interactive/interactive-mode.d.ts +0 -1
  88. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  89. package/dist/modes/interactive/interactive-mode.js +23 -36
  90. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  91. package/dist/modes/rpc/rpc-client.d.ts +0 -8
  92. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  93. package/dist/modes/rpc/rpc-client.js +0 -12
  94. package/dist/modes/rpc/rpc-client.js.map +1 -1
  95. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  96. package/dist/modes/rpc/rpc-mode.js +0 -9
  97. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  98. package/dist/modes/rpc/rpc-types.d.ts +0 -19
  99. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  100. package/dist/modes/rpc/rpc-types.js.map +1 -1
  101. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts +9 -2
  102. package/dist/plugins/ecosystem/node-plugin-bootstrap.d.ts.map +1 -1
  103. package/dist/plugins/ecosystem/node-plugin-bootstrap.js +23 -0
  104. package/dist/plugins/ecosystem/node-plugin-bootstrap.js.map +1 -1
  105. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts +9 -1
  106. package/dist/plugins/ecosystem/plugin-bootstrap.d.ts.map +1 -1
  107. package/dist/plugins/ecosystem/plugin-bootstrap.js +5 -0
  108. package/dist/plugins/ecosystem/plugin-bootstrap.js.map +1 -1
  109. package/dist/utils/photon.d.ts +2 -2
  110. package/dist/utils/photon.d.ts.map +1 -1
  111. package/dist/utils/photon.js +2 -2
  112. package/dist/utils/photon.js.map +1 -1
  113. package/docs/compaction.md +1 -3
  114. package/docs/docs.json +4 -0
  115. package/docs/index.md +1 -0
  116. package/docs/mcp.md +103 -0
  117. package/docs/models.md +14 -22
  118. package/docs/providers.md +0 -1
  119. package/docs/rpc.md +1 -26
  120. package/docs/sdk.md +4 -6
  121. package/docs/settings.md +9 -12
  122. package/docs/skills.md +1 -9
  123. package/docs/usage.md +1 -1
  124. package/examples/extensions/with-deps/package-lock.json +2 -2
  125. package/examples/extensions/with-deps/package.json +1 -1
  126. package/examples/extensions/with-deps/plugin.json +1 -1
  127. package/examples/sdk/10-settings.ts +2 -4
  128. package/examples/sdk/12-full-control.ts +1 -2
  129. package/package.json +1 -3
  130. package/dist/core/extensions/microcompact.d.ts +0 -80
  131. package/dist/core/extensions/microcompact.d.ts.map +0 -1
  132. package/dist/core/extensions/microcompact.js +0 -134
  133. package/dist/core/extensions/microcompact.js.map +0 -1
  134. package/dist/server/create-harness.d.ts +0 -26
  135. package/dist/server/create-harness.d.ts.map +0 -1
  136. package/dist/server/create-harness.js +0 -106
  137. package/dist/server/create-harness.js.map +0 -1
@@ -306,8 +306,6 @@ export class InteractiveMode {
306
306
  getMode: () => this.settingsManager.getMermaidRenderingMode(),
307
307
  theme,
308
308
  });
309
- // Skill commands: command name -> skill file path
310
- skillCommands = new Map();
311
309
  // Agent subscription unsubscribe function
312
310
  unsubscribe;
313
311
  signalCleanupHandlers = [];
@@ -423,7 +421,6 @@ export class InteractiveMode {
423
421
  this.editorContainer.addChild(this.editor);
424
422
  this.footerDataProvider = new FooterDataProvider(this.facade.getCwd());
425
423
  this.footer = new FooterComponent(this.session, this.footerDataProvider);
426
- this.footer.setAutoCompactEnabled(this.facade.isAutoCompactionEnabled());
427
424
  this.footerContainer = new Container();
428
425
  this.footerContainer.addChild(this.footer);
429
426
  this.failoverTicker = new ProviderFailoverTicker(() => this.footer.isProviderFailoverOpen(), () => this.ui.requestRender());
@@ -547,20 +544,19 @@ export class InteractiveMode {
547
544
  description: definition.description,
548
545
  ...(definition.argumentHint && { argumentHint: definition.argumentHint }),
549
546
  })), [builtinCommandNames, templateCommandNames, [...resourceSkillCommandNames]]);
550
- // Build skill commands from session.skills (if enabled)
551
- this.skillCommands.clear();
547
+ // Skill commands register unconditionally (D-079: the enableSkillCommands
548
+ // switch is retired). A capability command claiming the same skill:name
549
+ // still wins: conflicting names are rejected by AgentSession, so neither
550
+ // side is offered as an executable completion.
552
551
  const skillCommandList = [];
553
- if (this.settingsManager.getEnableSkillCommands()) {
554
- for (const skill of this.facade.getSkills().skills) {
555
- const commandName = `skill:${skill.name}`;
556
- if (capabilityCommandNames.has(commandName))
557
- continue;
558
- this.skillCommands.set(commandName, skill.filePath);
559
- skillCommandList.push({
560
- name: commandName,
561
- description: this.prefixAutocompleteDescription(skill.description, skill.sourceInfo),
562
- });
563
- }
552
+ for (const skill of this.facade.getSkills().skills) {
553
+ const commandName = `skill:${skill.name}`;
554
+ if (capabilityCommandNames.has(commandName))
555
+ continue;
556
+ skillCommandList.push({
557
+ name: commandName,
558
+ description: this.prefixAutocompleteDescription(skill.description, skill.sourceInfo),
559
+ });
564
560
  }
565
561
  return new CombinedAutocompleteProvider([...slashCommands, ...templateCommands, ...capabilityCommands, ...skillCommandList], this.facade.getCwd(), this.fdPath);
566
562
  }
@@ -1248,7 +1244,6 @@ export class InteractiveMode {
1248
1244
  this.renderer.setWheelScrollLines(this.settingsManager.getFullscreenWheelScrollLines());
1249
1245
  }
1250
1246
  this.footer.setSession(this.session);
1251
- this.footer.setAutoCompactEnabled(this.facade.isAutoCompactionEnabled());
1252
1247
  this.footerDataProvider.setCwd(this.facade.getCwd());
1253
1248
  // The switched session carries its own failover snapshot history; re-check
1254
1249
  // whether the countdown ticker is needed.
@@ -1498,7 +1493,14 @@ export class InteractiveMode {
1498
1493
  this.restoreQueuedMessagesToEditor({ abort: true, cancelAgentTasks: false });
1499
1494
  const activeAgents = this.facade.getActiveAgentTaskCount();
1500
1495
  if (activeAgents > 0) {
1501
- this.showStatus(`${activeAgents} 个子代理仍在运行 · /stop-agents 终止全部(Esc 只停当前回合)`);
1496
+ // 单复数拆双 key 保 en 语法(批次⑩规则,同 handleStopAgentsCommand)。
1497
+ this.showStatus(activeAgents === 1
1498
+ ? t("{count} subagent still running · /stop-agents stops all (Esc only stops the current turn)", {
1499
+ count: activeAgents,
1500
+ })
1501
+ : t("{count} subagents still running · /stop-agents stops all (Esc only stops the current turn)", {
1502
+ count: activeAgents,
1503
+ }));
1502
1504
  }
1503
1505
  }
1504
1506
  else if (this.facade.isBashRunning()) {
@@ -1510,17 +1512,12 @@ export class InteractiveMode {
1510
1512
  this.updateEditorBorderColor();
1511
1513
  }
1512
1514
  else if (!this.editor.getText().trim()) {
1513
- // Double-escape with empty editor triggers /tree, /fork, or nothing based on setting
1515
+ // Double-escape with empty editor triggers /tree or nothing based on setting
1514
1516
  const action = this.settingsManager.getDoubleEscapeAction();
1515
- if (action !== "none") {
1517
+ if (action === "tree") {
1516
1518
  const now = Date.now();
1517
1519
  if (now - this.lastEscapeTime < 500) {
1518
- if (action === "tree") {
1519
- this.showTreeSelector();
1520
- }
1521
- else {
1522
- this.showUserMessageSelector();
1523
- }
1520
+ this.showTreeSelector();
1524
1521
  this.lastEscapeTime = 0;
1525
1522
  }
1526
1523
  else {
@@ -2972,7 +2969,6 @@ export class InteractiveMode {
2972
2969
  const defaultModelId = this.settingsManager.getDefaultModel();
2973
2970
  const defaultModel = defaultProvider && defaultModelId ? `${defaultProvider}/${defaultModelId}` : t("not set");
2974
2971
  selector = new SettingsSelectorComponent({
2975
- autoCompact: this.facade.isAutoCompactionEnabled(),
2976
2972
  defaultModel,
2977
2973
  currentModel: this.facade.getModel(),
2978
2974
  availableDefaultModels: this.facade.getAvailableModels(),
@@ -2980,7 +2976,6 @@ export class InteractiveMode {
2980
2976
  imageWidthCells: this.settingsManager.getImageWidthCells(),
2981
2977
  autoResizeImages: this.settingsManager.getImageAutoResize(),
2982
2978
  blockImages: this.settingsManager.getBlockImages(),
2983
- enableSkillCommands: this.settingsManager.getEnableSkillCommands(),
2984
2979
  steeringMode: this.facade.getSteeringMode(),
2985
2980
  followUpMode: this.facade.getFollowUpMode(),
2986
2981
  transport: this.settingsManager.getTransport(),
@@ -3012,10 +3007,6 @@ export class InteractiveMode {
3012
3007
  fullscreenWheelScrollLines: this.settingsManager.getFullscreenWheelScrollLines(),
3013
3008
  warnings: this.settingsManager.getWarnings(),
3014
3009
  }, {
3015
- onAutoCompactChange: (enabled) => {
3016
- this.facade.setAutoCompactionEnabled(enabled);
3017
- this.footer.setAutoCompactEnabled(enabled);
3018
- },
3019
3010
  onShowImagesChange: (enabled) => {
3020
3011
  this.settingsManager.setShowImages(enabled);
3021
3012
  for (const child of this.chatContainer.children) {
@@ -3038,10 +3029,6 @@ export class InteractiveMode {
3038
3029
  onBlockImagesChange: (blocked) => {
3039
3030
  this.settingsManager.setBlockImages(blocked);
3040
3031
  },
3041
- onEnableSkillCommandsChange: (enabled) => {
3042
- this.settingsManager.setEnableSkillCommands(enabled);
3043
- this.setupAutocompleteProvider();
3044
- },
3045
3032
  onSteeringModeChange: (mode) => {
3046
3033
  this.facade.setSteeringMode(mode);
3047
3034
  },