headlesscode 1.0.2

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 (232) hide show
  1. package/ATTRIBUTION.md +53 -0
  2. package/CODE_OF_CONDUCT.md +130 -0
  3. package/CONTRIBUTING.md +107 -0
  4. package/LICENSE +202 -0
  5. package/README.md +486 -0
  6. package/SECURITY.md +211 -0
  7. package/bin/headlesscode.mjs +83 -0
  8. package/package.json +63 -0
  9. package/shared/prompts/review-mode-prompt-short.md +93 -0
  10. package/shared/prompts/review-mode-prompt.md +281 -0
  11. package/shared/rules-code/rules.md +22 -0
  12. package/shared/stacks/cpp/rules.md +30 -0
  13. package/shared/stacks/fastapi/rules.md +30 -0
  14. package/shared/stacks/javascript/rules.md +37 -0
  15. package/shared/stacks/postgresql/rules.md +31 -0
  16. package/shared/stacks/python/rules.md +35 -0
  17. package/shared/stacks/react/rules.md +11 -0
  18. package/shared/stacks/typescript/rules.md +10 -0
  19. package/src/budget/budget.ts +221 -0
  20. package/src/budget/concurrency.ts +126 -0
  21. package/src/budget/cost.ts +309 -0
  22. package/src/budget/index.ts +8 -0
  23. package/src/checkpoints/cli.ts +256 -0
  24. package/src/checkpoints/service.ts +227 -0
  25. package/src/cli.ts +1535 -0
  26. package/src/cloud/docker-provider.ts +334 -0
  27. package/src/cloud/provider.ts +300 -0
  28. package/src/codeintel/call-graph.ts +78 -0
  29. package/src/codeintel/find-references.ts +123 -0
  30. package/src/codeintel/go-to-definition.ts +193 -0
  31. package/src/codeintel/handlers.ts +190 -0
  32. package/src/codeintel/import-graph.ts +173 -0
  33. package/src/codeintel/outline.ts +180 -0
  34. package/src/codeintel/position.ts +77 -0
  35. package/src/codeintel/program.ts +350 -0
  36. package/src/codeintel/rename-symbol.ts +213 -0
  37. package/src/codeintel/tools.ts +280 -0
  38. package/src/codemap/build.ts +135 -0
  39. package/src/codemap/cli.ts +190 -0
  40. package/src/codemap/extract.ts +339 -0
  41. package/src/codemap/files.ts +236 -0
  42. package/src/codemap/fingerprint.ts +65 -0
  43. package/src/codemap/flows.ts +62 -0
  44. package/src/codemap/html.ts +451 -0
  45. package/src/codemap/lock.ts +80 -0
  46. package/src/codemap/types.ts +101 -0
  47. package/src/codesearch/airunner-embedder.ts +185 -0
  48. package/src/codesearch/chunk.ts +339 -0
  49. package/src/codesearch/cli.ts +223 -0
  50. package/src/codesearch/embedder.ts +332 -0
  51. package/src/codesearch/files.ts +280 -0
  52. package/src/codesearch/index.ts +469 -0
  53. package/src/codesearch/ollama-embedder.ts +205 -0
  54. package/src/codesearch/search.ts +141 -0
  55. package/src/codesearch/types.ts +100 -0
  56. package/src/config/mode-models.ts +218 -0
  57. package/src/dashboard/aggregate.ts +364 -0
  58. package/src/dashboard/chat-thread.ts +141 -0
  59. package/src/dashboard/checkpoints.ts +124 -0
  60. package/src/dashboard/cli.ts +193 -0
  61. package/src/dashboard/codemap.ts +44 -0
  62. package/src/dashboard/files.ts +121 -0
  63. package/src/dashboard/page.ts +2803 -0
  64. package/src/dashboard/self-improvement-metrics.ts +282 -0
  65. package/src/dashboard/server.ts +1103 -0
  66. package/src/dashboard/session-launch.ts +310 -0
  67. package/src/dashboard/timeline.ts +273 -0
  68. package/src/dashboard/tool-exec.ts +107 -0
  69. package/src/dashboard/trend-cli.ts +141 -0
  70. package/src/dashboard/trend.ts +413 -0
  71. package/src/decision-proxy/cli.ts +261 -0
  72. package/src/decision-proxy/proxy.ts +569 -0
  73. package/src/deploy/gate-cli.ts +147 -0
  74. package/src/deploy/gate.ts +254 -0
  75. package/src/engine/condense.ts +512 -0
  76. package/src/engine/events.ts +428 -0
  77. package/src/engine/handoff.ts +71 -0
  78. package/src/engine/lazy-tools.ts +160 -0
  79. package/src/engine/local-explore.ts +653 -0
  80. package/src/engine/logger.ts +96 -0
  81. package/src/engine/loop.ts +5517 -0
  82. package/src/engine/parser.ts +347 -0
  83. package/src/engine/prompt.ts +860 -0
  84. package/src/engine/reports.ts +47 -0
  85. package/src/engine/stacks.ts +448 -0
  86. package/src/engine/types.ts +291 -0
  87. package/src/engine/usage.ts +186 -0
  88. package/src/github/app-auth.ts +161 -0
  89. package/src/github/cli.ts +448 -0
  90. package/src/github/installations.ts +133 -0
  91. package/src/github/pr.ts +321 -0
  92. package/src/github/provision.ts +118 -0
  93. package/src/github/push.ts +122 -0
  94. package/src/index-util.ts +50 -0
  95. package/src/index.ts +81 -0
  96. package/src/init/cli.ts +248 -0
  97. package/src/init/gitignore.ts +74 -0
  98. package/src/llm/ollama.ts +308 -0
  99. package/src/llm/openrouter.ts +868 -0
  100. package/src/llm/preflight.ts +367 -0
  101. package/src/llm/transcript-capture.ts +84 -0
  102. package/src/memory/embed.ts +110 -0
  103. package/src/memory/index.ts +22 -0
  104. package/src/memory/local.ts +259 -0
  105. package/src/memory/summarizer.ts +283 -0
  106. package/src/memory/types.ts +153 -0
  107. package/src/memory/uwuchat.ts +157 -0
  108. package/src/migrate/cli.ts +115 -0
  109. package/src/orchestrator/analyze-cli.ts +104 -0
  110. package/src/orchestrator/auto-split.ts +206 -0
  111. package/src/orchestrator/cleanup.ts +1003 -0
  112. package/src/orchestrator/cli.ts +3571 -0
  113. package/src/orchestrator/cost-estimate.ts +564 -0
  114. package/src/orchestrator/cost-history-cli.ts +242 -0
  115. package/src/orchestrator/cost-history.ts +397 -0
  116. package/src/orchestrator/git-sync.ts +250 -0
  117. package/src/orchestrator/index.ts +153 -0
  118. package/src/orchestrator/log-analysis.ts +0 -0
  119. package/src/orchestrator/merge-check.ts +108 -0
  120. package/src/orchestrator/pipeline.ts +411 -0
  121. package/src/orchestrator/resume.ts +1940 -0
  122. package/src/orchestrator/reviewer.ts +503 -0
  123. package/src/orchestrator/split.ts +296 -0
  124. package/src/orchestrator/state.ts +542 -0
  125. package/src/orchestrator/status.ts +697 -0
  126. package/src/orchestrator/verification-gate.ts +134 -0
  127. package/src/orchestrator/watch.ts +898 -0
  128. package/src/permissions/commands.ts +1083 -0
  129. package/src/permissions/config.ts +241 -0
  130. package/src/permissions/index.ts +12 -0
  131. package/src/permissions/protected-files.ts +96 -0
  132. package/src/permissions/store-protection.ts +272 -0
  133. package/src/project-store.ts +648 -0
  134. package/src/projects/cli.ts +382 -0
  135. package/src/qa/qa.ts +487 -0
  136. package/src/tools/browser/handler.ts +346 -0
  137. package/src/tools/browser/service.ts +406 -0
  138. package/src/tools/browser/smoke.ts +78 -0
  139. package/src/tools/browser/tool.ts +99 -0
  140. package/src/tools/executor.ts +2575 -0
  141. package/src/tools/language-detect.ts +183 -0
  142. package/src/tools/output-summarizer.ts +369 -0
  143. package/src/tools/run-tests.ts +302 -0
  144. package/src/tools/set-indentation-tool.ts +49 -0
  145. package/src/tools/test-selection.ts +160 -0
  146. package/src/vendor/tests/smoke.ts +103 -0
  147. package/src/vendor/zoo-code/VENDOR-NOTES.md +213 -0
  148. package/src/vendor/zoo-code/shim/anthropic.ts +71 -0
  149. package/src/vendor/zoo-code/shim/openai.d.ts +60 -0
  150. package/src/vendor/zoo-code/shim/os-name.ts +18 -0
  151. package/src/vendor/zoo-code/shim/strip-bom.ts +14 -0
  152. package/src/vendor/zoo-code/shim/vscode.ts +76 -0
  153. package/src/vendor/zoo-code/src/core/config/CustomModesManager.ts +1015 -0
  154. package/src/vendor/zoo-code/src/core/diff/strategies/multi-search-replace.ts +670 -0
  155. package/src/vendor/zoo-code/src/core/prompts/sections/capabilities.ts +46 -0
  156. package/src/vendor/zoo-code/src/core/prompts/sections/custom-instructions.ts +559 -0
  157. package/src/vendor/zoo-code/src/core/prompts/sections/index.ts +10 -0
  158. package/src/vendor/zoo-code/src/core/prompts/sections/markdown-formatting.ts +7 -0
  159. package/src/vendor/zoo-code/src/core/prompts/sections/modes.ts +35 -0
  160. package/src/vendor/zoo-code/src/core/prompts/sections/objective.ts +13 -0
  161. package/src/vendor/zoo-code/src/core/prompts/sections/rules.ts +95 -0
  162. package/src/vendor/zoo-code/src/core/prompts/sections/skills.ts +105 -0
  163. package/src/vendor/zoo-code/src/core/prompts/sections/system-info.ts +30 -0
  164. package/src/vendor/zoo-code/src/core/prompts/sections/tool-use-guidelines.ts +9 -0
  165. package/src/vendor/zoo-code/src/core/prompts/sections/tool-use.ts +7 -0
  166. package/src/vendor/zoo-code/src/core/prompts/system.ts +176 -0
  167. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/access_mcp_resource.ts +41 -0
  168. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/apply_diff.ts +40 -0
  169. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/apply_patch.ts +61 -0
  170. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/ask_followup_question.ts +62 -0
  171. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/attempt_completion.ts +33 -0
  172. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/codebase_search.ts +43 -0
  173. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/converters.ts +109 -0
  174. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/edit.ts +48 -0
  175. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/edit_file.ts +72 -0
  176. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/execute_command.ts +54 -0
  177. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/generate_image.ts +51 -0
  178. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/index.ts +75 -0
  179. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/list_files.ts +41 -0
  180. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/mcp_server.ts +75 -0
  181. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/new_task.ts +39 -0
  182. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/read_command_output.ts +81 -0
  183. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/read_file.ts +169 -0
  184. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/run_slash_command.ts +31 -0
  185. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/search_files.ts +50 -0
  186. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/search_replace.ts +51 -0
  187. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/skill.ts +33 -0
  188. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/switch_mode.ts +31 -0
  189. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/update_todo_list.ts +54 -0
  190. package/src/vendor/zoo-code/src/core/prompts/tools/native-tools/write_to_file.ts +40 -0
  191. package/src/vendor/zoo-code/src/core/prompts/types.ts +12 -0
  192. package/src/vendor/zoo-code/src/i18n/index.ts +19 -0
  193. package/src/vendor/zoo-code/src/integrations/misc/extract-text.ts +81 -0
  194. package/src/vendor/zoo-code/src/services/checkpoints/RepoPerTaskCheckpointService.ts +15 -0
  195. package/src/vendor/zoo-code/src/services/checkpoints/ShadowCheckpointService.ts +553 -0
  196. package/src/vendor/zoo-code/src/services/checkpoints/excludes.ts +212 -0
  197. package/src/vendor/zoo-code/src/services/checkpoints/index.ts +3 -0
  198. package/src/vendor/zoo-code/src/services/checkpoints/types.ts +35 -0
  199. package/src/vendor/zoo-code/src/services/code-index/manager.ts +19 -0
  200. package/src/vendor/zoo-code/src/services/mcp/McpHub.ts +36 -0
  201. package/src/vendor/zoo-code/src/services/roo-config/index.ts +441 -0
  202. package/src/vendor/zoo-code/src/services/search/file-search.ts +143 -0
  203. package/src/vendor/zoo-code/src/services/skills/SkillsManager.ts +20 -0
  204. package/src/vendor/zoo-code/src/shared/globalFileNames.ts +9 -0
  205. package/src/vendor/zoo-code/src/shared/language.ts +43 -0
  206. package/src/vendor/zoo-code/src/shared/modes.ts +257 -0
  207. package/src/vendor/zoo-code/src/shared/tools.ts +385 -0
  208. package/src/vendor/zoo-code/src/utils/fs.ts +39 -0
  209. package/src/vendor/zoo-code/src/utils/globalContext.ts +22 -0
  210. package/src/vendor/zoo-code/src/utils/json-schema.ts +16 -0
  211. package/src/vendor/zoo-code/src/utils/logging.ts +21 -0
  212. package/src/vendor/zoo-code/src/utils/mcp-name.ts +190 -0
  213. package/src/vendor/zoo-code/src/utils/object.ts +18 -0
  214. package/src/vendor/zoo-code/src/utils/path.ts +94 -0
  215. package/src/vendor/zoo-code/src/utils/shell.ts +376 -0
  216. package/src/vendor/zoo-code/src/utils/text-normalization.ts +99 -0
  217. package/src/vendor/zoo-code/types/global-settings.ts +19 -0
  218. package/src/vendor/zoo-code/types/index.ts +22 -0
  219. package/src/vendor/zoo-code/types/message.ts +375 -0
  220. package/src/vendor/zoo-code/types/mode.ts +241 -0
  221. package/src/vendor/zoo-code/types/todo.ts +19 -0
  222. package/src/vendor/zoo-code/types/tool-params.ts +116 -0
  223. package/src/vendor/zoo-code/types/tool.ts +67 -0
  224. package/src/vendor/zoo-code/types/vscode.ts +84 -0
  225. package/src/vision/describe.ts +242 -0
  226. package/src/vision/tool.ts +91 -0
  227. package/src/watcher/cli.ts +369 -0
  228. package/src/watcher/github.ts +304 -0
  229. package/src/watcher/index.ts +59 -0
  230. package/src/watcher/state.ts +254 -0
  231. package/src/watcher/watch.ts +562 -0
  232. package/tsconfig.json +18 -0
@@ -0,0 +1,212 @@
1
+ import fs from "fs/promises"
2
+ import { join } from "path"
3
+
4
+ import { fileExistsAtPath } from "../../utils/fs"
5
+
6
+ const getBuildArtifactPatterns = () => [
7
+ ".gradle/",
8
+ ".idea/",
9
+ ".parcel-cache/",
10
+ ".pytest_cache/",
11
+ ".next/",
12
+ ".nuxt/",
13
+ ".sass-cache/",
14
+ ".terraform/",
15
+ ".terragrunt-cache/",
16
+ ".vs/",
17
+ ".vscode/",
18
+ "Pods/",
19
+ "__pycache__/",
20
+ "bin/",
21
+ "build/",
22
+ "bundle/",
23
+ "coverage/",
24
+ "deps/",
25
+ "dist/",
26
+ "env/",
27
+ "node_modules/",
28
+ "obj/",
29
+ "out/",
30
+ "pkg/",
31
+ "pycache/",
32
+ "target/dependency/",
33
+ "temp/",
34
+ "vendor/",
35
+ "venv/",
36
+ ]
37
+
38
+ const getMediaFilePatterns = () => [
39
+ "*.jpg",
40
+ "*.jpeg",
41
+ "*.png",
42
+ "*.gif",
43
+ "*.bmp",
44
+ "*.ico",
45
+ "*.webp",
46
+ "*.tiff",
47
+ "*.tif",
48
+ "*.raw",
49
+ "*.heic",
50
+ "*.avif",
51
+ "*.eps",
52
+ "*.psd",
53
+ "*.3gp",
54
+ "*.aac",
55
+ "*.aiff",
56
+ "*.asf",
57
+ "*.avi",
58
+ "*.divx",
59
+ "*.flac",
60
+ "*.m4a",
61
+ "*.m4v",
62
+ "*.mkv",
63
+ "*.mov",
64
+ "*.mp3",
65
+ "*.mp4",
66
+ "*.mpeg",
67
+ "*.mpg",
68
+ "*.ogg",
69
+ "*.opus",
70
+ "*.rm",
71
+ "*.rmvb",
72
+ "*.vob",
73
+ "*.wav",
74
+ "*.webm",
75
+ "*.wma",
76
+ "*.wmv",
77
+ ]
78
+
79
+ const getCacheFilePatterns = () => [
80
+ "*.DS_Store",
81
+ "*.bak",
82
+ "*.cache",
83
+ "*.crdownload",
84
+ "*.dmp",
85
+ "*.dump",
86
+ "*.eslintcache",
87
+ "*.lock",
88
+ "*.log",
89
+ "*.old",
90
+ "*.part",
91
+ "*.partial",
92
+ "*.pyc",
93
+ "*.pyo",
94
+ "*.stackdump",
95
+ "*.swo",
96
+ "*.swp",
97
+ "*.temp",
98
+ "*.tmp",
99
+ "*.Thumbs.db",
100
+ ]
101
+
102
+ const getConfigFilePatterns = () => ["*.env*", "*.local", "*.development", "*.production"]
103
+
104
+ const getLargeDataFilePatterns = () => [
105
+ "*.zip",
106
+ "*.tar",
107
+ "*.gz",
108
+ "*.rar",
109
+ "*.7z",
110
+ "*.iso",
111
+ "*.bin",
112
+ "*.exe",
113
+ "*.dll",
114
+ "*.so",
115
+ "*.dylib",
116
+ "*.dat",
117
+ "*.dmg",
118
+ "*.msi",
119
+ ]
120
+
121
+ const getDatabaseFilePatterns = () => [
122
+ "*.arrow",
123
+ "*.accdb",
124
+ "*.aof",
125
+ "*.avro",
126
+ "*.bak",
127
+ "*.bson",
128
+ "*.csv",
129
+ "*.db",
130
+ "*.dbf",
131
+ "*.dmp",
132
+ "*.frm",
133
+ "*.ibd",
134
+ "*.mdb",
135
+ "*.myd",
136
+ "*.myi",
137
+ "*.orc",
138
+ "*.parquet",
139
+ "*.pdb",
140
+ "*.rdb",
141
+ "*.sql",
142
+ "*.sqlite",
143
+ ]
144
+
145
+ const getGeospatialPatterns = () => [
146
+ "*.shp",
147
+ "*.shx",
148
+ "*.dbf",
149
+ "*.prj",
150
+ "*.sbn",
151
+ "*.sbx",
152
+ "*.shp.xml",
153
+ "*.cpg",
154
+ "*.gdb",
155
+ "*.mdb",
156
+ "*.gpkg",
157
+ "*.kml",
158
+ "*.kmz",
159
+ "*.gml",
160
+ "*.geojson",
161
+ "*.dem",
162
+ "*.asc",
163
+ "*.img",
164
+ "*.ecw",
165
+ "*.las",
166
+ "*.laz",
167
+ "*.mxd",
168
+ "*.qgs",
169
+ "*.grd",
170
+ "*.csv",
171
+ "*.dwg",
172
+ "*.dxf",
173
+ ]
174
+
175
+ const getLogFilePatterns = () => [
176
+ "*.error",
177
+ "*.log",
178
+ "*.logs",
179
+ "*.npm-debug.log*",
180
+ "*.out",
181
+ "*.stdout",
182
+ "yarn-debug.log*",
183
+ "yarn-error.log*",
184
+ ]
185
+
186
+ const getLfsPatterns = async (workspacePath: string) => {
187
+ try {
188
+ const attributesPath = join(workspacePath, ".gitattributes")
189
+
190
+ if (await fileExistsAtPath(attributesPath)) {
191
+ return (await fs.readFile(attributesPath, "utf8"))
192
+ .split("\n")
193
+ .filter((line) => line.includes("filter=lfs"))
194
+ .map((line) => line.split(" ")[0].trim())
195
+ }
196
+ } catch (error) {}
197
+
198
+ return []
199
+ }
200
+
201
+ export const getExcludePatterns = async (workspacePath: string) => [
202
+ ".git/",
203
+ ...getBuildArtifactPatterns(),
204
+ ...getMediaFilePatterns(),
205
+ ...getCacheFilePatterns(),
206
+ ...getConfigFilePatterns(),
207
+ ...getLargeDataFilePatterns(),
208
+ ...getDatabaseFilePatterns(),
209
+ ...getGeospatialPatterns(),
210
+ ...getLogFilePatterns(),
211
+ ...(await getLfsPatterns(workspacePath)),
212
+ ]
@@ -0,0 +1,3 @@
1
+ export type { CheckpointServiceOptions } from "./types"
2
+
3
+ export { RepoPerTaskCheckpointService } from "./RepoPerTaskCheckpointService"
@@ -0,0 +1,35 @@
1
+ import { CommitResult } from "simple-git"
2
+
3
+ export type CheckpointResult = Partial<CommitResult> & Pick<CommitResult, "commit">
4
+
5
+ export type CheckpointDiff = {
6
+ paths: {
7
+ relative: string
8
+ absolute: string
9
+ }
10
+ content: {
11
+ before: string
12
+ after: string
13
+ }
14
+ }
15
+
16
+ export interface CheckpointServiceOptions {
17
+ taskId: string
18
+ workspaceDir: string
19
+ shadowDir: string // globalStorageUri.fsPath
20
+
21
+ log?: (message: string) => void
22
+ }
23
+
24
+ export interface CheckpointEventMap {
25
+ initialize: { type: "initialize"; workspaceDir: string; baseHash: string; created: boolean; duration: number }
26
+ checkpoint: {
27
+ type: "checkpoint"
28
+ fromHash: string
29
+ toHash: string
30
+ duration: number
31
+ suppressMessage?: boolean
32
+ }
33
+ restore: { type: "restore"; commitHash: string; duration: number }
34
+ error: { type: "error"; error: Error }
35
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * SHIM — replaces zoo-code/src/services/code-index/manager.ts.
3
+ *
4
+ * The real CodeIndexManager maintains an embedded codebase-search index. The
5
+ * vendored `core/prompts/system.ts` only calls its `getInstance()` factory for
6
+ * initialization side effects; the returned instance is unused by the prompt
7
+ * builder. Codebase search execution is out of scope for Phase 1.
8
+ */
9
+
10
+ export class CodeIndexManager {
11
+ private static instance: CodeIndexManager | null = null
12
+
13
+ static getInstance(_context: unknown, _cwd: string): CodeIndexManager {
14
+ if (!CodeIndexManager.instance) {
15
+ CodeIndexManager.instance = new CodeIndexManager()
16
+ }
17
+ return CodeIndexManager.instance
18
+ }
19
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * SHIM — replaces zoo-code/src/services/mcp/McpHub.ts.
3
+ *
4
+ * The real McpHub manages MCP server connections through the VS Code API
5
+ * (SSE/stdio transports, global vs project config, connection lifecycle). A
6
+ * headless harness has no MCP servers in Phase 1. This stub satisfies the type
7
+ * surface used by the vendored prompt sections (capabilities.ts, system.ts)
8
+ * and native-tool schemas (mcp_server.ts): `getServers()` and the server/tool
9
+ * shapes those files read. Wiring real MCP transports is deferred.
10
+ */
11
+
12
+ export interface McpToolLike {
13
+ name: string
14
+ description?: string
15
+ inputSchema?: unknown
16
+ enabledForPrompt?: boolean
17
+ }
18
+
19
+ export interface McpServerLike {
20
+ name: string
21
+ tools?: McpToolLike[]
22
+ }
23
+
24
+ export class McpHub {
25
+ private servers: McpServerLike[]
26
+
27
+ constructor(servers: McpServerLike[] = []) {
28
+ this.servers = servers
29
+ }
30
+
31
+ getServers(): McpServerLike[] {
32
+ return this.servers
33
+ }
34
+
35
+ dispose(): void {}
36
+ }