c0de-agent 1.11.0 → 1.13.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 (177) hide show
  1. package/README.md +63 -16
  2. package/dist/cli/commands/acp.js +26 -8
  3. package/dist/cli/commands/chat.js +151 -1
  4. package/dist/cli/commands/config.d.ts +2 -0
  5. package/dist/cli/commands/config.js +63 -3
  6. package/dist/cli/commands/serve.js +11 -2
  7. package/dist/cli/commands/sessions.js +109 -3
  8. package/dist/cli/commands/trust.d.ts +11 -0
  9. package/dist/cli/commands/trust.js +31 -0
  10. package/dist/cli/commands/update.js +4 -0
  11. package/dist/cli/deps.d.ts +9 -6
  12. package/dist/cli/deps.js +66 -19
  13. package/dist/cli/index.d.ts +4 -1
  14. package/dist/cli/index.js +110 -11
  15. package/dist/cli/modes/acp.js +39 -8
  16. package/dist/cli/modes/print.d.ts +3 -0
  17. package/dist/cli/modes/print.js +78 -8
  18. package/dist/core/agent.d.ts +1 -1
  19. package/dist/core/agent.js +9 -4
  20. package/dist/core/agents/builtin.js +2 -2
  21. package/dist/core/agents/index.d.ts +0 -1
  22. package/dist/core/agents/index.js +0 -1
  23. package/dist/core/compact.d.ts +2 -0
  24. package/dist/core/compact.js +1 -0
  25. package/dist/core/config.d.ts +53 -2
  26. package/dist/core/config.js +235 -19
  27. package/dist/core/loop/compaction.d.ts +2 -1
  28. package/dist/core/loop/compaction.js +19 -6
  29. package/dist/core/loop/segment.d.ts +3 -1
  30. package/dist/core/loop/segment.js +24 -1
  31. package/dist/core/loop/stream-collect.js +9 -1
  32. package/dist/core/loop/subagent.js +88 -37
  33. package/dist/core/loop.d.ts +7 -0
  34. package/dist/core/loop.js +90 -6
  35. package/dist/core/redact.d.ts +11 -0
  36. package/dist/core/redact.js +49 -0
  37. package/dist/core/slash.d.ts +10 -0
  38. package/dist/core/slash.js +237 -65
  39. package/dist/core/title.js +7 -1
  40. package/dist/core/types.d.ts +22 -1
  41. package/dist/core/workflows/context.js +44 -4
  42. package/dist/core/workflows/discovery.d.ts +2 -2
  43. package/dist/core/workflows/discovery.js +5 -7
  44. package/dist/core/workflows/index.d.ts +2 -1
  45. package/dist/core/workflows/index.js +2 -1
  46. package/dist/core/workflows/registry.d.ts +13 -3
  47. package/dist/core/workflows/registry.js +14 -9
  48. package/dist/core/workflows/resolve.d.ts +22 -0
  49. package/dist/core/workflows/resolve.js +23 -0
  50. package/dist/core/workflows/runtime.d.ts +6 -1
  51. package/dist/core/workflows/runtime.js +19 -2
  52. package/dist/db/schema.d.ts +373 -1
  53. package/dist/db/schema.js +60 -4
  54. package/dist/kanban/index.d.ts +2 -1
  55. package/dist/kanban/index.js +1 -1
  56. package/dist/kanban/store.d.ts +87 -1
  57. package/dist/kanban/store.js +429 -22
  58. package/dist/llm/index.d.ts +1 -1
  59. package/dist/llm/index.js +1 -1
  60. package/dist/llm/provider.js +1 -1
  61. package/dist/llm/registry.d.ts +7 -1
  62. package/dist/llm/registry.js +7 -1
  63. package/dist/llm/retry.d.ts +5 -2
  64. package/dist/llm/retry.js +6 -5
  65. package/dist/llm/routing.d.ts +24 -1
  66. package/dist/llm/routing.js +29 -1
  67. package/dist/plugins/init.d.ts +7 -0
  68. package/dist/plugins/init.js +22 -1
  69. package/dist/plugins/loader.d.ts +7 -1
  70. package/dist/plugins/loader.js +12 -4
  71. package/dist/project/index.d.ts +1 -1
  72. package/dist/project/index.js +1 -1
  73. package/dist/project/project.d.ts +37 -0
  74. package/dist/project/project.js +142 -1
  75. package/dist/project/trust.d.ts +65 -0
  76. package/dist/project/trust.js +328 -0
  77. package/dist/server/agent-manager.d.ts +15 -2
  78. package/dist/server/agent-manager.js +18 -3
  79. package/dist/server/app.js +45 -30
  80. package/dist/server/auth-manager.d.ts +26 -9
  81. package/dist/server/auth-manager.js +78 -42
  82. package/dist/server/context.js +14 -1
  83. package/dist/server/index.d.ts +1 -1
  84. package/dist/server/index.js +1 -1
  85. package/dist/server/middleware/auth.d.ts +11 -1
  86. package/dist/server/middleware/auth.js +25 -3
  87. package/dist/server/permission/interactive.d.ts +11 -3
  88. package/dist/server/permission/interactive.js +23 -4
  89. package/dist/server/permission/store.d.ts +14 -2
  90. package/dist/server/permission/store.js +39 -3
  91. package/dist/server/registry-config.d.ts +14 -0
  92. package/dist/server/registry-config.js +44 -0
  93. package/dist/server/routes/auth.js +66 -10
  94. package/dist/server/routes/chat.d.ts +21 -0
  95. package/dist/server/routes/chat.js +685 -52
  96. package/dist/server/routes/commands.d.ts +4 -2
  97. package/dist/server/routes/commands.js +9 -4
  98. package/dist/server/routes/config.js +180 -23
  99. package/dist/server/routes/files.js +142 -28
  100. package/dist/server/routes/kanban.js +218 -26
  101. package/dist/server/routes/permissions.d.ts +0 -4
  102. package/dist/server/routes/permissions.js +140 -7
  103. package/dist/server/routes/project.js +132 -29
  104. package/dist/server/routes/provider.js +54 -3
  105. package/dist/server/routes/session.js +463 -23
  106. package/dist/server/routes/tool.js +24 -5
  107. package/dist/server/routes/update.d.ts +11 -5
  108. package/dist/server/routes/update.js +145 -29
  109. package/dist/server/routes/usage.d.ts +4 -0
  110. package/dist/server/routes/usage.js +133 -0
  111. package/dist/server/routes/workflows.js +476 -87
  112. package/dist/server/server.d.ts +16 -13
  113. package/dist/server/server.js +364 -107
  114. package/dist/server/terminal/pty-manager.d.ts +12 -0
  115. package/dist/server/terminal/pty-manager.js +63 -7
  116. package/dist/server/types.d.ts +16 -0
  117. package/dist/session/archive.d.ts +3 -1
  118. package/dist/session/archive.js +13 -1
  119. package/dist/session/branch.d.ts +2 -1
  120. package/dist/session/branch.js +92 -9
  121. package/dist/session/context.js +28 -2
  122. package/dist/session/import.d.ts +44 -0
  123. package/dist/session/import.js +83 -0
  124. package/dist/session/index.d.ts +1 -1
  125. package/dist/session/index.js +1 -1
  126. package/dist/session/jobs.d.ts +12 -0
  127. package/dist/session/jobs.js +53 -0
  128. package/dist/session/message.d.ts +7 -1
  129. package/dist/session/message.js +21 -1
  130. package/dist/session/session.d.ts +186 -12
  131. package/dist/session/session.js +577 -33
  132. package/dist/session/snapshot.d.ts +5 -2
  133. package/dist/session/snapshot.js +10 -2
  134. package/dist/session/types.d.ts +13 -1
  135. package/dist/session/usage.d.ts +62 -0
  136. package/dist/session/usage.js +194 -0
  137. package/dist/shared/types/agent.d.ts +29 -2
  138. package/dist/shared/types/config.d.ts +64 -5
  139. package/dist/shared/types/kanban.d.ts +17 -2
  140. package/dist/shared/types/message.d.ts +23 -0
  141. package/dist/tools/builtin/kanban.js +13 -2
  142. package/dist/tools/index.d.ts +14 -3
  143. package/dist/tools/index.js +23 -5
  144. package/dist/tools/websearch/index.d.ts +5 -1
  145. package/dist/tools/websearch/index.js +46 -7
  146. package/dist/tools/websearch/providers/brave.js +2 -2
  147. package/dist/tools/websearch/providers/duckduckgo.js +2 -1
  148. package/dist/tools/websearch/providers/tavily.js +2 -2
  149. package/dist/tools/websearch/types.d.ts +5 -1
  150. package/dist/tools/websearch/types.js +7 -1
  151. package/dist/update/index.d.ts +3 -3
  152. package/dist/update/index.js +2 -2
  153. package/dist/update/ipc.d.ts +13 -2
  154. package/dist/update/ipc.js +36 -2
  155. package/dist/update/scheduler.js +5 -2
  156. package/dist/update/snapshot.d.ts +18 -3
  157. package/dist/update/snapshot.js +5 -2
  158. package/dist/update/updater.d.ts +17 -1
  159. package/dist/update/updater.js +47 -18
  160. package/dist/update/version.d.ts +3 -0
  161. package/dist/update/version.js +9 -3
  162. package/drizzle/0008_tranquil_lily_hollister.sql +1 -0
  163. package/drizzle/0010_usage_events_ledger.sql +17 -0
  164. package/drizzle/0011_slow_slapstick.sql +12 -0
  165. package/drizzle/0012_chief_timeslip.sql +1 -0
  166. package/drizzle/0013_swift_zeigeist.sql +1 -0
  167. package/drizzle/0014_flimsy_legion.sql +1 -0
  168. package/drizzle/meta/0008_snapshot.json +875 -0
  169. package/drizzle/meta/0010_snapshot.json +1010 -0
  170. package/drizzle/meta/0011_snapshot.json +1055 -0
  171. package/drizzle/meta/0012_snapshot.json +1062 -0
  172. package/drizzle/meta/0013_snapshot.json +1068 -0
  173. package/drizzle/meta/0014_snapshot.json +1075 -0
  174. package/drizzle/meta/_journal.json +42 -0
  175. package/package.json +42 -42
  176. package/dist/core/agents/discovery.d.ts +0 -6
  177. package/dist/core/agents/discovery.js +0 -96
@@ -57,6 +57,48 @@
57
57
  "when": 1788425007432,
58
58
  "tag": "0007_same_wilson_fisk",
59
59
  "breakpoints": true
60
+ },
61
+ {
62
+ "idx": 8,
63
+ "version": "7",
64
+ "when": 1788730611917,
65
+ "tag": "0008_tranquil_lily_hollister",
66
+ "breakpoints": true
67
+ },
68
+ {
69
+ "idx": 10,
70
+ "version": "7",
71
+ "when": 1788950024430,
72
+ "tag": "0010_usage_events_ledger",
73
+ "breakpoints": true
74
+ },
75
+ {
76
+ "idx": 11,
77
+ "version": "7",
78
+ "when": 1788995144108,
79
+ "tag": "0011_slow_slapstick",
80
+ "breakpoints": true
81
+ },
82
+ {
83
+ "idx": 12,
84
+ "version": "7",
85
+ "when": 1789032562634,
86
+ "tag": "0012_chief_timeslip",
87
+ "breakpoints": true
88
+ },
89
+ {
90
+ "idx": 13,
91
+ "version": "7",
92
+ "when": 1789041898540,
93
+ "tag": "0013_swift_zeigeist",
94
+ "breakpoints": true
95
+ },
96
+ {
97
+ "idx": 14,
98
+ "version": "7",
99
+ "when": 1789122153126,
100
+ "tag": "0014_flimsy_legion",
101
+ "breakpoints": true
60
102
  }
61
103
  ]
62
104
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "c0de-agent",
3
- "version": "1.11.0",
3
+ "version": "1.13.0",
4
4
  "description": "Open-source AI coding assistant with Browser-Server architecture",
5
5
  "type": "module",
6
6
  "bin": {
@@ -49,63 +49,63 @@
49
49
  "node": ">=22.0.0"
50
50
  },
51
51
  "devDependencies": {
52
- "@biomejs/biome": "^2.5.1",
52
+ "@biomejs/biome": "^2.5.14",
53
53
  "@codemirror/lang-javascript": "^6.2.5",
54
- "@codemirror/state": "^6.7.0",
54
+ "@codemirror/state": "^6.7.5",
55
55
  "@codemirror/theme-one-dark": "^6.1.3",
56
- "@codemirror/view": "^6.43.4",
57
- "@shikijs/langs": "^4.3.0",
58
- "@shikijs/themes": "^4.3.0",
59
- "@testing-library/jest-dom": "^6.9.1",
60
- "@testing-library/react": "^16.3.2",
61
- "@testing-library/user-event": "^14.6.1",
62
- "@types/diff": "^8.0.0",
63
- "@types/node": "^26.0.1",
64
- "@types/pg": "^8.20.0",
65
- "@types/react": "^19.2.17",
66
- "@types/react-dom": "^19.2.3",
56
+ "@codemirror/view": "^6.43.12",
57
+ "@shikijs/langs": "^4.4.3",
58
+ "@shikijs/themes": "^4.4.3",
59
+ "@testing-library/jest-dom": "^7.0.1",
60
+ "@testing-library/react": "^16.3.3",
61
+ "@testing-library/user-event": "^14.6.7",
62
+ "@types/node": "^26.6.1",
63
+ "@types/pg": "^8.23.1",
64
+ "@types/react": "^19.3.0",
65
+ "@types/react-dom": "^19.3.0",
67
66
  "@types/ws": "^8.18.1",
68
- "@vitejs/plugin-react": "^6.0.3",
69
- "@wyw-in-js/vite": "^2.1.0",
67
+ "@vitejs/plugin-react": "^6.1.1",
68
+ "@wyw-in-js/vite": "^2.5.1",
70
69
  "drizzle-kit": "^0.31.10",
71
- "happy-dom": "^20.10.6",
72
- "node-gyp": "^13.0.1",
73
- "pg": "^8.22.0",
74
- "tsx": "^4.22.4",
70
+ "happy-dom": "^20.14.5",
71
+ "node-gyp": "^13.0.2",
72
+ "pg": "^8.23.0",
73
+ "tsx": "^4.23.13",
75
74
  "typescript": "^6.0.3",
76
- "vite": "^8.1.0",
75
+ "vite": "^8.3.0",
77
76
  "vite-plugin-pwa": "^1.3.0",
78
- "vitest": "^4.1.9"
77
+ "vitest": "^5.0.1"
79
78
  },
80
79
  "dependencies": {
81
- "@codemirror/commands": "^6.10.4",
80
+ "@codemirror/commands": "^6.11.1",
82
81
  "@dnd-kit/core": "^6.3.1",
83
82
  "@dnd-kit/sortable": "^10.0.0",
84
- "@electric-sql/pglite": "^0.5.3",
85
- "@hono/node-server": "^2.0.6",
86
- "@linaria/core": "^8.0.0",
87
- "@linaria/react": "^8.0.0",
88
- "@native-router/core": "^1.1.0",
89
- "@native-router/react": "^1.1.2",
90
- "@tanstack/react-query": "^5.101.2",
91
- "@tanstack/react-virtual": "^3.14.6",
83
+ "@electric-sql/pglite": "^0.5.8",
84
+ "@hono/node-server": "^2.1.1",
85
+ "@linaria/core": "^8.2.0",
86
+ "@linaria/react": "^8.2.0",
87
+ "@native-router/core": "^1.17.0",
88
+ "@native-router/react": "^1.16.1",
89
+ "@tanstack/react-query": "^5.103.0",
90
+ "@tanstack/react-virtual": "^3.14.13",
92
91
  "@xterm/addon-fit": "^0.11.0",
93
92
  "@xterm/addon-web-links": "^0.12.0",
94
93
  "@xterm/xterm": "^6.0.0",
95
94
  "diff": "^9.0.0",
96
95
  "drizzle-orm": "^0.45.2",
97
- "fuzzysort": "^3.1.0",
98
- "haze-ui": "^1.6.0",
99
- "hono": "^4.12.27",
100
- "lucide-react": "^1.22.0",
101
- "marked": "^18.0.5",
96
+ "fetch-fun": "^0.15.0",
97
+ "fuzzysort": "^4.0.2",
98
+ "haze-ui": "^1.30.0",
99
+ "hono": "^4.13.8",
100
+ "lucide-react": "^1.46.0",
101
+ "marked": "^18.0.13",
102
102
  "node-pty": "^1.1.0",
103
- "react": "^19.2.7",
104
- "react-dom": "^19.2.7",
105
- "react-router-dom": "^7.18.0",
106
- "shiki": "^4.3.0",
103
+ "react": "^19.3.0",
104
+ "react-dom": "^19.3.0",
105
+ "react-use-control": "^1.6.1",
106
+ "shiki": "^4.4.3",
107
107
  "trash": "^10.1.1",
108
- "undici": "^8.5.0",
109
- "ws": "^8.21.0"
108
+ "undici": "^8.10.2",
109
+ "ws": "^8.21.3"
110
110
  }
111
111
  }
@@ -1,6 +0,0 @@
1
- import type { AgentDefinition, AgentSource } from './types.js';
2
- /** 解析单个 markdown 文件为 AgentDefinition。无 frontmatter 返回 null。 */
3
- declare function loadAgentFile(filePath: string, source: AgentSource): Promise<AgentDefinition | null>;
4
- /** 加载项目 agents 目录下所有 .md 为 AgentDefinition(源: project)。 */
5
- declare function loadAgents(projectDir: string): Promise<AgentDefinition[]>;
6
- export { loadAgentFile, loadAgents };
@@ -1,96 +0,0 @@
1
- import { readdir, readFile, stat } from 'node:fs/promises';
2
- import { basename, join } from 'node:path';
3
- /** 默认 agent markdown 目录(相对项目根)。 */
4
- const AGENTS_DIR = '.c0de/agents';
5
- /** 解析简单 YAML 行(key: value 或 key: [a, b])。不处理嵌套。 */
6
- function parseFrontmatterLine(line) {
7
- const idx = line.indexOf(':');
8
- if (idx === -1)
9
- return null;
10
- const key = line.slice(0, idx).trim();
11
- let value = line.slice(idx + 1).trim();
12
- // 数组:[a, b, c]
13
- if (typeof value === 'string' && value.startsWith('[') && value.endsWith(']')) {
14
- value = value
15
- .slice(1, -1)
16
- .split(',')
17
- .map((s) => s.trim())
18
- .filter(Boolean);
19
- }
20
- else if (value === 'true') {
21
- value = true;
22
- }
23
- else if (value === 'false') {
24
- value = false;
25
- }
26
- else {
27
- // 尝试数字
28
- const num = Number(value);
29
- if (!Number.isNaN(num) && value !== '')
30
- value = num;
31
- }
32
- return [key, value];
33
- }
34
- /** 解析单个 markdown 文件为 AgentDefinition。无 frontmatter 返回 null。 */
35
- async function loadAgentFile(filePath, source) {
36
- let content;
37
- try {
38
- content = await readFile(filePath, 'utf-8');
39
- }
40
- catch {
41
- return null;
42
- }
43
- // frontmatter 必须以 --- 开头
44
- if (!content.startsWith('---'))
45
- return null;
46
- const endIdx = content.indexOf('\n---', 3);
47
- if (endIdx === -1)
48
- return null;
49
- const fmRaw = content.slice(3, endIdx);
50
- const body = content.slice(endIdx + 4).trim(); // 跳过 \n---
51
- const fm = {};
52
- for (const line of fmRaw.split('\n')) {
53
- const parsed = parseFrontmatterLine(line);
54
- if (parsed)
55
- fm[parsed[0]] = parsed[1];
56
- }
57
- const name = fm.name ?? basename(filePath, '.md');
58
- const description = fm.description ?? '';
59
- const mode = fm.mode ?? 'subagent';
60
- return {
61
- name,
62
- description,
63
- systemPrompt: body,
64
- ...(fm.tools ? { tools: fm.tools } : {}),
65
- ...(fm.model ? { model: fm.model } : {}),
66
- mode,
67
- ...(fm.isolated !== undefined ? { isolated: fm.isolated } : {}),
68
- ...(fm.maxRecursion !== undefined ? { maxRecursion: fm.maxRecursion } : {}),
69
- source,
70
- filePath,
71
- };
72
- }
73
- /** 加载项目 agents 目录下所有 .md 为 AgentDefinition(源: project)。 */
74
- async function loadAgents(projectDir) {
75
- const agentsDir = join(projectDir, AGENTS_DIR);
76
- let entries;
77
- try {
78
- const s = await stat(agentsDir);
79
- if (!s.isDirectory())
80
- return [];
81
- entries = await readdir(agentsDir);
82
- }
83
- catch {
84
- return [];
85
- }
86
- const defs = [];
87
- for (const entry of entries) {
88
- if (!entry.endsWith('.md'))
89
- continue;
90
- const def = await loadAgentFile(join(agentsDir, entry), 'project');
91
- if (def)
92
- defs.push(def);
93
- }
94
- return defs;
95
- }
96
- export { loadAgentFile, loadAgents };