@keyou007/agent-bot 0.1.13 → 0.1.14-alpha.1

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 (77) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +41 -44
  3. package/README.zh.md +41 -44
  4. package/config.example.yaml +4 -0
  5. package/dist/codex/CodexRuntime.js +8 -3
  6. package/dist/codex/CodexRuntime.js.map +1 -1
  7. package/dist/commands/CommandRouter.js +13 -0
  8. package/dist/commands/CommandRouter.js.map +1 -1
  9. package/dist/config/loadConfig.js +2 -0
  10. package/dist/config/loadConfig.js.map +1 -1
  11. package/dist/config/schema.js +2 -0
  12. package/dist/config/schema.js.map +1 -1
  13. package/dist/console/ConsoleTurnPresenter.js +2 -0
  14. package/dist/console/ConsoleTurnPresenter.js.map +1 -1
  15. package/dist/feishu/CardRenderer.js +428 -9
  16. package/dist/feishu/CardRenderer.js.map +1 -1
  17. package/dist/feishu/FeishuConnector.js +29 -8
  18. package/dist/feishu/FeishuConnector.js.map +1 -1
  19. package/dist/feishu/FeishuMessageClient.js +78 -8
  20. package/dist/feishu/FeishuMessageClient.js.map +1 -1
  21. package/dist/feishu/FeishuTurnPresenter.js +31 -2
  22. package/dist/feishu/FeishuTurnPresenter.js.map +1 -1
  23. package/dist/feishu/ownerAccess.js +7 -0
  24. package/dist/feishu/ownerAccess.js.map +1 -0
  25. package/dist/index.js +14 -17
  26. package/dist/index.js.map +1 -1
  27. package/dist/presentation/OutboundRouter.js +19 -1
  28. package/dist/presentation/OutboundRouter.js.map +1 -1
  29. package/dist/presentation/splitMarkdown.js +16 -4
  30. package/dist/presentation/splitMarkdown.js.map +1 -1
  31. package/dist/proxy/ProxySessionController.js +1012 -58
  32. package/dist/proxy/ProxySessionController.js.map +1 -1
  33. package/dist/startup/StartupNotifier.js +65 -16
  34. package/dist/startup/StartupNotifier.js.map +1 -1
  35. package/dist/startup/startFeishu.js +2 -2
  36. package/dist/startup/startFeishu.js.map +1 -1
  37. package/dist/state/StateStore.js +250 -67
  38. package/dist/state/StateStore.js.map +1 -1
  39. package/dist/state/migrations.js +26 -0
  40. package/dist/state/migrations.js.map +1 -1
  41. package/dist/supervision/SafeRestartNotifier.js +17 -16
  42. package/dist/supervision/SafeRestartNotifier.js.map +1 -1
  43. package/dist/supervision/SafeRestartScheduler.js +12 -7
  44. package/dist/supervision/SafeRestartScheduler.js.map +1 -1
  45. package/dist/supervision/replacementSupervisor.js +45 -4
  46. package/dist/supervision/replacementSupervisor.js.map +1 -1
  47. package/dist/supervisor.js +30 -18
  48. package/dist/supervisor.js.map +1 -1
  49. package/docs/technical-reference.md +18 -5
  50. package/docs/technical-reference.zh.md +18 -5
  51. package/npm-shrinkwrap.json +2 -2
  52. package/package.json +1 -1
  53. package/skills/agent-bot/SKILL.md +8 -2
  54. package/src/codex/CodexRuntime.ts +9 -3
  55. package/src/commands/CommandRouter.ts +13 -0
  56. package/src/commands/commandTypes.ts +2 -0
  57. package/src/config/loadConfig.ts +2 -0
  58. package/src/config/schema.ts +2 -0
  59. package/src/console/ConsoleTurnPresenter.ts +4 -1
  60. package/src/feishu/CardRenderer.ts +533 -9
  61. package/src/feishu/FeishuConnector.ts +44 -10
  62. package/src/feishu/FeishuMessageClient.ts +118 -7
  63. package/src/feishu/FeishuTurnPresenter.ts +42 -3
  64. package/src/feishu/ownerAccess.ts +7 -0
  65. package/src/feishu/types.ts +7 -0
  66. package/src/index.ts +20 -20
  67. package/src/presentation/OutboundRouter.ts +28 -3
  68. package/src/presentation/splitMarkdown.ts +26 -3
  69. package/src/proxy/ProxySessionController.ts +1177 -57
  70. package/src/startup/StartupNotifier.ts +67 -17
  71. package/src/startup/startFeishu.ts +5 -3
  72. package/src/state/StateStore.ts +394 -65
  73. package/src/state/migrations.ts +26 -0
  74. package/src/supervision/SafeRestartNotifier.ts +17 -17
  75. package/src/supervision/SafeRestartScheduler.ts +13 -6
  76. package/src/supervision/replacementSupervisor.ts +50 -4
  77. package/src/supervisor.ts +35 -16
@@ -8,13 +8,23 @@ interface TextRange {
8
8
  end: number;
9
9
  }
10
10
 
11
- export function splitMarkdown(text: string, maxLength = 4_000): string[] {
11
+ export function splitMarkdown(
12
+ text: string,
13
+ maxLength = 4_000,
14
+ maxTablesPerChunk = Number.POSITIVE_INFINITY,
15
+ ): string[] {
12
16
  if (maxLength < 32) throw new Error("maxLength must be at least 32");
13
- if (text.length <= maxLength) return [text];
17
+ if (
18
+ maxTablesPerChunk !== Number.POSITIVE_INFINITY
19
+ && (!Number.isInteger(maxTablesPerChunk) || maxTablesPerChunk < 1)
20
+ ) {
21
+ throw new Error("maxTablesPerChunk must be a positive integer");
22
+ }
14
23
 
15
24
  const chunks: string[] = [];
16
25
  let current = "";
17
26
  let fence: FenceState | undefined;
27
+ let currentTableCount = 0;
18
28
  const lines = text.match(/[^\n]*\n|[^\n]+$/g) ?? [];
19
29
 
20
30
  const closingSuffix = (): string => {
@@ -27,6 +37,7 @@ export function splitMarkdown(text: string, maxLength = 4_000): string[] {
27
37
  const continuation = fence;
28
38
  chunks.push(`${current}${closingSuffix()}`);
29
39
  current = continuation ? `${continuation.opener}\n` : "";
40
+ currentTableCount = 0;
30
41
  };
31
42
 
32
43
  const appendPlainLine = (line: string): void => {
@@ -78,10 +89,19 @@ export function splitMarkdown(text: string, maxLength = 4_000): string[] {
78
89
  ? headerLength + firstRow.length
79
90
  : headerLength;
80
91
 
81
- if (current && initialTableLength <= maxLength && current.length + initialTableLength > maxLength) flush();
92
+ if (
93
+ current
94
+ && (
95
+ currentTableCount >= maxTablesPerChunk
96
+ || (initialTableLength <= maxLength && current.length + initialTableLength > maxLength)
97
+ )
98
+ ) {
99
+ flush();
100
+ }
82
101
  if (headerLength <= maxLength) {
83
102
  current += header;
84
103
  current += delimiter;
104
+ currentTableCount += 1;
85
105
  } else {
86
106
  appendPlainLine(header);
87
107
  appendPlainLine(delimiter);
@@ -95,6 +115,7 @@ export function splitMarkdown(text: string, maxLength = 4_000): string[] {
95
115
  flush();
96
116
  if (continuationPrefix.length + row.length <= maxLength) {
97
117
  current = continuationPrefix;
118
+ currentTableCount = 1;
98
119
  current += row;
99
120
  continue;
100
121
  }
@@ -103,8 +124,10 @@ export function splitMarkdown(text: string, maxLength = 4_000): string[] {
103
124
  // to preserve it as one Markdown table row in that case, so retain the
104
125
  // existing lossless hard-split fallback.
105
126
  current = continuationPrefix;
127
+ currentTableCount = 1;
106
128
  appendPlainLine(row);
107
129
  }
130
+ if (currentTableCount >= maxTablesPerChunk) flush();
108
131
  };
109
132
 
110
133
  for (let index = 0; index < lines.length; index += 1) {