@j0hanz/filesystem-mcp 1.19.0 → 2.0.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 (301) hide show
  1. package/README.md +333 -838
  2. package/dist/cli-help.d.ts +3 -0
  3. package/dist/cli-help.d.ts.map +1 -0
  4. package/dist/cli-help.js +169 -0
  5. package/dist/cli-help.js.map +1 -0
  6. package/dist/cli.d.ts +28 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +168 -123
  9. package/dist/cli.js.map +1 -0
  10. package/dist/core/concurrency.d.ts +70 -0
  11. package/dist/core/concurrency.d.ts.map +1 -0
  12. package/dist/core/concurrency.js +173 -0
  13. package/dist/core/concurrency.js.map +1 -0
  14. package/dist/core/config.d.ts +19 -0
  15. package/dist/core/config.d.ts.map +1 -0
  16. package/dist/core/config.js +11 -0
  17. package/dist/core/config.js.map +1 -0
  18. package/dist/core/cursor.d.ts +23 -0
  19. package/dist/core/cursor.d.ts.map +1 -0
  20. package/dist/core/cursor.js +62 -0
  21. package/dist/core/cursor.js.map +1 -0
  22. package/dist/core/errors.d.ts +96 -0
  23. package/dist/core/errors.d.ts.map +1 -0
  24. package/dist/core/errors.js +356 -0
  25. package/dist/core/errors.js.map +1 -0
  26. package/dist/core/file-uri.d.ts +24 -0
  27. package/dist/core/file-uri.d.ts.map +1 -0
  28. package/dist/core/file-uri.js +52 -0
  29. package/dist/core/file-uri.js.map +1 -0
  30. package/dist/core/fmt.d.ts +38 -0
  31. package/dist/core/fmt.d.ts.map +1 -0
  32. package/dist/core/fmt.js +109 -0
  33. package/dist/core/fmt.js.map +1 -0
  34. package/dist/core/fs.d.ts +108 -0
  35. package/dist/core/fs.d.ts.map +1 -0
  36. package/dist/core/fs.js +243 -0
  37. package/dist/core/fs.js.map +1 -0
  38. package/dist/core/glob.d.ts +41 -0
  39. package/dist/core/glob.d.ts.map +1 -0
  40. package/dist/core/glob.js +399 -0
  41. package/dist/core/glob.js.map +1 -0
  42. package/dist/core/input-required.d.ts +147 -0
  43. package/dist/core/input-required.d.ts.map +1 -0
  44. package/dist/core/input-required.js +261 -0
  45. package/dist/core/input-required.js.map +1 -0
  46. package/dist/core/mime.d.ts +15 -0
  47. package/dist/core/mime.d.ts.map +1 -0
  48. package/dist/core/mime.js +188 -0
  49. package/dist/core/mime.js.map +1 -0
  50. package/dist/core/observability.d.ts +10 -0
  51. package/dist/core/observability.d.ts.map +1 -0
  52. package/dist/core/observability.js +76 -0
  53. package/dist/core/observability.js.map +1 -0
  54. package/dist/core/page-store.d.ts +41 -0
  55. package/dist/core/page-store.d.ts.map +1 -0
  56. package/dist/core/page-store.js +74 -0
  57. package/dist/core/page-store.js.map +1 -0
  58. package/dist/core/path-completer.d.ts +10 -0
  59. package/dist/core/path-completer.d.ts.map +1 -0
  60. package/dist/core/path-completer.js +227 -0
  61. package/dist/core/path-completer.js.map +1 -0
  62. package/dist/core/path-discovery.d.ts +8 -0
  63. package/dist/core/path-discovery.d.ts.map +1 -0
  64. package/dist/core/path-discovery.js +105 -0
  65. package/dist/core/path-discovery.js.map +1 -0
  66. package/dist/core/path-utils.d.ts +9 -0
  67. package/dist/core/path-utils.d.ts.map +1 -0
  68. package/dist/core/path-utils.js +121 -0
  69. package/dist/core/path-utils.js.map +1 -0
  70. package/dist/core/path.d.ts +148 -0
  71. package/dist/core/path.d.ts.map +1 -0
  72. package/dist/core/path.js +674 -0
  73. package/dist/core/path.js.map +1 -0
  74. package/dist/core/primitives.d.ts +23 -0
  75. package/dist/core/primitives.d.ts.map +1 -0
  76. package/dist/core/primitives.js +54 -0
  77. package/dist/core/primitives.js.map +1 -0
  78. package/dist/core/read.d.ts +74 -0
  79. package/dist/core/read.d.ts.map +1 -0
  80. package/dist/core/read.js +562 -0
  81. package/dist/core/read.js.map +1 -0
  82. package/dist/core/schema.d.ts +139 -0
  83. package/dist/core/schema.d.ts.map +1 -0
  84. package/dist/core/schema.js +345 -0
  85. package/dist/core/schema.js.map +1 -0
  86. package/dist/core/search.d.ts +100 -0
  87. package/dist/core/search.d.ts.map +1 -0
  88. package/dist/core/search.js +248 -0
  89. package/dist/core/search.js.map +1 -0
  90. package/dist/core/sensitive.d.ts +6 -0
  91. package/dist/core/sensitive.d.ts.map +1 -0
  92. package/dist/core/sensitive.js +142 -0
  93. package/dist/core/sensitive.js.map +1 -0
  94. package/dist/core/store.d.ts +57 -0
  95. package/dist/core/store.d.ts.map +1 -0
  96. package/dist/core/store.js +162 -0
  97. package/dist/core/store.js.map +1 -0
  98. package/dist/core/util.d.ts +26 -0
  99. package/dist/core/util.d.ts.map +1 -0
  100. package/dist/core/util.js +66 -0
  101. package/dist/core/util.js.map +1 -0
  102. package/dist/core/watcher-registry.d.ts +68 -0
  103. package/dist/core/watcher-registry.d.ts.map +1 -0
  104. package/dist/core/watcher-registry.js +312 -0
  105. package/dist/core/watcher-registry.js.map +1 -0
  106. package/dist/http-policy.d.ts +121 -0
  107. package/dist/http-policy.d.ts.map +1 -0
  108. package/dist/http-policy.js +340 -0
  109. package/dist/http-policy.js.map +1 -0
  110. package/dist/index.d.ts +1 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +77 -41
  113. package/dist/index.js.map +1 -0
  114. package/dist/instructions.d.ts +12 -0
  115. package/dist/instructions.d.ts.map +1 -0
  116. package/dist/instructions.js +71 -0
  117. package/dist/instructions.js.map +1 -0
  118. package/dist/prompts.d.ts +8 -6
  119. package/dist/prompts.d.ts.map +1 -0
  120. package/dist/prompts.js +74 -168
  121. package/dist/prompts.js.map +1 -0
  122. package/dist/resources.d.ts +73 -9
  123. package/dist/resources.d.ts.map +1 -0
  124. package/dist/resources.js +392 -163
  125. package/dist/resources.js.map +1 -0
  126. package/dist/server.d.ts +62 -1
  127. package/dist/server.d.ts.map +1 -0
  128. package/dist/server.js +139 -1
  129. package/dist/server.js.map +1 -0
  130. package/dist/tools/batch.d.ts +89 -0
  131. package/dist/tools/batch.d.ts.map +1 -0
  132. package/dist/tools/batch.js +157 -0
  133. package/dist/tools/batch.js.map +1 -0
  134. package/dist/tools/create.d.ts +2 -0
  135. package/dist/tools/create.d.ts.map +1 -0
  136. package/dist/tools/create.js +142 -0
  137. package/dist/tools/create.js.map +1 -0
  138. package/dist/tools/define.d.ts +110 -0
  139. package/dist/tools/define.d.ts.map +1 -0
  140. package/dist/tools/define.js +394 -0
  141. package/dist/tools/define.js.map +1 -0
  142. package/dist/tools/delete-file.d.ts +2 -4
  143. package/dist/tools/delete-file.d.ts.map +1 -0
  144. package/dist/tools/delete-file.js +330 -87
  145. package/dist/tools/delete-file.js.map +1 -0
  146. package/dist/tools/diff.d.ts +2 -0
  147. package/dist/tools/diff.d.ts.map +1 -0
  148. package/dist/tools/diff.js +94 -0
  149. package/dist/tools/diff.js.map +1 -0
  150. package/dist/tools/edit.d.ts +2 -0
  151. package/dist/tools/edit.d.ts.map +1 -0
  152. package/dist/tools/edit.js +442 -0
  153. package/dist/tools/edit.js.map +1 -0
  154. package/dist/tools/index.d.ts +26 -0
  155. package/dist/tools/index.d.ts.map +1 -0
  156. package/dist/tools/index.js +52 -0
  157. package/dist/tools/index.js.map +1 -0
  158. package/dist/tools/list.d.ts +2 -0
  159. package/dist/tools/list.d.ts.map +1 -0
  160. package/dist/tools/list.js +291 -0
  161. package/dist/tools/list.js.map +1 -0
  162. package/dist/tools/move.d.ts +2 -0
  163. package/dist/tools/move.d.ts.map +1 -0
  164. package/dist/tools/move.js +321 -0
  165. package/dist/tools/move.js.map +1 -0
  166. package/dist/tools/patch.d.ts +2 -0
  167. package/dist/tools/patch.d.ts.map +1 -0
  168. package/dist/tools/patch.js +155 -0
  169. package/dist/tools/patch.js.map +1 -0
  170. package/dist/tools/progress.d.ts +52 -0
  171. package/dist/tools/progress.d.ts.map +1 -0
  172. package/dist/tools/progress.js +172 -0
  173. package/dist/tools/progress.js.map +1 -0
  174. package/dist/tools/read.d.ts +2 -4
  175. package/dist/tools/read.d.ts.map +1 -0
  176. package/dist/tools/read.js +398 -152
  177. package/dist/tools/read.js.map +1 -0
  178. package/dist/tools/replace-in-files.d.ts +2 -4
  179. package/dist/tools/replace-in-files.d.ts.map +1 -0
  180. package/dist/tools/replace-in-files.js +435 -264
  181. package/dist/tools/replace-in-files.js.map +1 -0
  182. package/dist/tools/roots.d.ts +2 -4
  183. package/dist/tools/roots.d.ts.map +1 -0
  184. package/dist/tools/roots.js +29 -52
  185. package/dist/tools/roots.js.map +1 -0
  186. package/dist/tools/search-content.d.ts +2 -4
  187. package/dist/tools/search-content.d.ts.map +1 -0
  188. package/dist/tools/search-content.js +262 -228
  189. package/dist/tools/search-content.js.map +1 -0
  190. package/dist/tools/search-files.d.ts +2 -4
  191. package/dist/tools/search-files.d.ts.map +1 -0
  192. package/dist/tools/search-files.js +162 -161
  193. package/dist/tools/search-files.js.map +1 -0
  194. package/dist/tools/stat.d.ts +2 -4
  195. package/dist/tools/stat.d.ts.map +1 -0
  196. package/dist/tools/stat.js +202 -62
  197. package/dist/tools/stat.js.map +1 -0
  198. package/dist/transport/http.d.ts +5 -0
  199. package/dist/transport/http.d.ts.map +1 -0
  200. package/dist/transport/http.js +276 -0
  201. package/dist/transport/http.js.map +1 -0
  202. package/dist/transport/shared.d.ts +45 -0
  203. package/dist/transport/shared.d.ts.map +1 -0
  204. package/dist/transport/shared.js +65 -0
  205. package/dist/transport/shared.js.map +1 -0
  206. package/dist/transport/stdio.d.ts +32 -0
  207. package/dist/transport/stdio.d.ts.map +1 -0
  208. package/dist/transport/stdio.js +279 -0
  209. package/dist/transport/stdio.js.map +1 -0
  210. package/dist/transport.d.ts +5 -0
  211. package/dist/transport.d.ts.map +1 -0
  212. package/dist/transport.js +4 -0
  213. package/dist/transport.js.map +1 -0
  214. package/package.json +37 -46
  215. package/dist/assets/logo.svg +0 -35
  216. package/dist/completions.d.ts +0 -2
  217. package/dist/completions.js +0 -572
  218. package/dist/config.d.ts +0 -119
  219. package/dist/config.js +0 -31
  220. package/dist/lib/abort.d.ts +0 -7
  221. package/dist/lib/abort.js +0 -81
  222. package/dist/lib/constants.d.ts +0 -42
  223. package/dist/lib/constants.js +0 -313
  224. package/dist/lib/errors.d.ts +0 -28
  225. package/dist/lib/errors.js +0 -301
  226. package/dist/lib/file-operations/core.d.ts +0 -53
  227. package/dist/lib/file-operations/core.js +0 -144
  228. package/dist/lib/file-operations/metadata.d.ts +0 -77
  229. package/dist/lib/file-operations/metadata.js +0 -878
  230. package/dist/lib/file-operations/search.d.ts +0 -46
  231. package/dist/lib/file-operations/search.js +0 -1194
  232. package/dist/lib/file-operations/traversal.d.ts +0 -40
  233. package/dist/lib/file-operations/traversal.js +0 -310
  234. package/dist/lib/fs-helpers.d.ts +0 -46
  235. package/dist/lib/fs-helpers.js +0 -606
  236. package/dist/lib/globs.d.ts +0 -2
  237. package/dist/lib/globs.js +0 -19
  238. package/dist/lib/logger.d.ts +0 -27
  239. package/dist/lib/logger.js +0 -91
  240. package/dist/lib/observability.d.ts +0 -33
  241. package/dist/lib/observability.js +0 -373
  242. package/dist/lib/paths.d.ts +0 -35
  243. package/dist/lib/paths.js +0 -634
  244. package/dist/lib/resource-store.d.ts +0 -28
  245. package/dist/lib/resource-store.js +0 -195
  246. package/dist/lib/utils.d.ts +0 -7
  247. package/dist/lib/utils.js +0 -37
  248. package/dist/lib/zod-codecs.d.ts +0 -2
  249. package/dist/lib/zod-codecs.js +0 -18
  250. package/dist/pkg-info.d.ts +0 -7
  251. package/dist/pkg-info.js +0 -9
  252. package/dist/resources/generated-instructions.d.ts +0 -1
  253. package/dist/resources/generated-instructions.js +0 -105
  254. package/dist/resources/tool-catalog.d.ts +0 -2
  255. package/dist/resources/tool-catalog.js +0 -78
  256. package/dist/resources/tool-info.d.ts +0 -9
  257. package/dist/resources/tool-info.js +0 -206
  258. package/dist/resources/workflows.d.ts +0 -1
  259. package/dist/resources/workflows.js +0 -72
  260. package/dist/schemas.d.ts +0 -505
  261. package/dist/schemas.js +0 -676
  262. package/dist/server/bootstrap.d.ts +0 -6
  263. package/dist/server/bootstrap.js +0 -563
  264. package/dist/server/event-store.d.ts +0 -18
  265. package/dist/server/event-store.js +0 -71
  266. package/dist/server/roots-manager.d.ts +0 -28
  267. package/dist/server/roots-manager.js +0 -227
  268. package/dist/server/task-store.d.ts +0 -10
  269. package/dist/server/task-store.js +0 -91
  270. package/dist/tools/apply-patch.d.ts +0 -4
  271. package/dist/tools/apply-patch.js +0 -235
  272. package/dist/tools/calculate-hash.d.ts +0 -4
  273. package/dist/tools/calculate-hash.js +0 -187
  274. package/dist/tools/contract.d.ts +0 -50
  275. package/dist/tools/contract.js +0 -1
  276. package/dist/tools/create-directory.d.ts +0 -4
  277. package/dist/tools/create-directory.js +0 -68
  278. package/dist/tools/diff-files.d.ts +0 -4
  279. package/dist/tools/diff-files.js +0 -136
  280. package/dist/tools/edit-file.d.ts +0 -4
  281. package/dist/tools/edit-file.js +0 -256
  282. package/dist/tools/icons.d.ts +0 -15
  283. package/dist/tools/icons.js +0 -24
  284. package/dist/tools/list-directory.d.ts +0 -4
  285. package/dist/tools/list-directory.js +0 -218
  286. package/dist/tools/move-file.d.ts +0 -4
  287. package/dist/tools/move-file.js +0 -178
  288. package/dist/tools/read-multiple.d.ts +0 -4
  289. package/dist/tools/read-multiple.js +0 -207
  290. package/dist/tools/shared.d.ts +0 -172
  291. package/dist/tools/shared.js +0 -599
  292. package/dist/tools/stat-many.d.ts +0 -4
  293. package/dist/tools/stat-many.js +0 -104
  294. package/dist/tools/task-support.d.ts +0 -29
  295. package/dist/tools/task-support.js +0 -472
  296. package/dist/tools/tree.d.ts +0 -4
  297. package/dist/tools/tree.js +0 -102
  298. package/dist/tools/write-file.d.ts +0 -4
  299. package/dist/tools/write-file.js +0 -60
  300. package/dist/tools.d.ts +0 -5
  301. package/dist/tools.js +0 -54
@@ -1,206 +0,0 @@
1
- import { z } from 'zod';
2
- import { DEFAULT_SEARCH_CONTENT_RESULTS, MAX_SEARCH_RESULTS, MAX_TEXT_FILE_SIZE, } from '../lib/constants.js';
3
- import { ALL_TOOLS } from '../tools.js';
4
- function getTaskSupportLabel(taskSupport) {
5
- switch (taskSupport) {
6
- case 'optional':
7
- return '[Task: Optional]';
8
- case 'required':
9
- return '[Task: Required]';
10
- default:
11
- return undefined;
12
- }
13
- }
14
- function toEntry(contract) {
15
- const annotations = [];
16
- if (contract.annotations?.destructiveHint)
17
- annotations.push('[Destructive]');
18
- if (contract.annotations?.idempotentHint)
19
- annotations.push('[Idempotent]');
20
- if (contract.annotations?.readOnlyHint)
21
- annotations.push('[Read-Only]');
22
- const taskLabel = getTaskSupportLabel(contract.taskSupport);
23
- if (taskLabel)
24
- annotations.push(taskLabel);
25
- return {
26
- name: contract.name,
27
- title: contract.title,
28
- description: contract.description,
29
- ...(annotations.length > 0 ? { annotations } : {}),
30
- ...(contract.nuances && contract.nuances.length > 0
31
- ? { nuances: contract.nuances }
32
- : {}),
33
- ...(contract.gotchas && contract.gotchas.length > 0
34
- ? { gotchas: contract.gotchas }
35
- : {}),
36
- };
37
- }
38
- const ENTRIES = Object.fromEntries(ALL_TOOLS.map((contract) => [contract.name, toEntry(contract)]));
39
- const CONTRACTS_BY_NAME = new Map(ALL_TOOLS.map((contract) => [contract.name, contract]));
40
- export function getToolContracts() {
41
- return ALL_TOOLS;
42
- }
43
- export function getSortedToolContracts() {
44
- return [...ALL_TOOLS].sort((left, right) => left.name.localeCompare(right.name));
45
- }
46
- export function pickAvailableToolNames(names) {
47
- return names.filter((name) => CONTRACTS_BY_NAME.has(name));
48
- }
49
- export function formatToolNameList(names) {
50
- return names.map((name) => `\`${name}\``).join(', ');
51
- }
52
- export function getTaskCapableToolNames() {
53
- return getSortedToolContracts()
54
- .filter((contract) => contract.taskSupport === 'optional' ||
55
- contract.taskSupport === 'required')
56
- .map((contract) => contract.name);
57
- }
58
- export function buildCoreContextPack() {
59
- const rows = getSortedToolContracts().map((contract) => {
60
- const e = ENTRIES[contract.name];
61
- if (!e)
62
- return '';
63
- const annotations = e.annotations ? ` ${e.annotations.join(' ')}` : '';
64
- return `| \`${e.name}\` | ${e.description}${annotations} |`;
65
- });
66
- return `## Tool Summary\n\n| Tool | Purpose |\n|------|---------|\n${rows.join('\n')}`;
67
- }
68
- export function getSharedConstraints() {
69
- return [
70
- 'Operate within allowed roots only (negotiated at startup via CLI).',
71
- 'Sensitive file paths (e.g. .env, *.pem, *id_rsa*) are denied by default.',
72
- `Enforced limits: max file size ${Math.floor(MAX_TEXT_FILE_SIZE / 1024 / 1024)} MB, file search cap ${MAX_SEARCH_RESULTS} results, content search cap ${DEFAULT_SEARCH_CONTENT_RESULTS} matches.`,
73
- 'When a response includes `resourceUri`, call `resources/read` immediately — cached results expire on server restart.',
74
- ];
75
- }
76
- function formatTaskSupportLabel(taskSupport) {
77
- switch (taskSupport) {
78
- case 'optional':
79
- return 'optional';
80
- case 'required':
81
- return 'required';
82
- default:
83
- return 'forbidden';
84
- }
85
- }
86
- function toJsonSchemaObject(schema, io = 'output') {
87
- return z.toJSONSchema(schema, { io });
88
- }
89
- function summarizeArrayType(schema) {
90
- if (Array.isArray(schema.prefixItems) && schema.prefixItems.length > 0) {
91
- const itemTypes = schema.prefixItems.map(summarizeSchemaType).join(', ');
92
- return `tuple<${itemTypes}>`;
93
- }
94
- const itemType = schema.items ? summarizeSchemaType(schema.items) : 'unknown';
95
- return `array<${itemType}>`;
96
- }
97
- function summarizeSchemaType(schema) {
98
- if (Array.isArray(schema.enum) && schema.enum.length > 0) {
99
- return `enum(${schema.enum.map((value) => JSON.stringify(value)).join(', ')})`;
100
- }
101
- if (schema.const !== undefined) {
102
- return `const(${JSON.stringify(schema.const)})`;
103
- }
104
- if (Array.isArray(schema.anyOf) && schema.anyOf.length > 0) {
105
- return schema.anyOf.map(summarizeSchemaType).join(' | ');
106
- }
107
- if (Array.isArray(schema.oneOf) && schema.oneOf.length > 0) {
108
- return schema.oneOf.map(summarizeSchemaType).join(' | ');
109
- }
110
- if (schema.type === 'array') {
111
- return summarizeArrayType(schema);
112
- }
113
- if (schema.type === 'object' && schema.additionalProperties === false) {
114
- return 'object (strict)';
115
- }
116
- if (typeof schema.type === 'string' && schema.type.length > 0) {
117
- return schema.type;
118
- }
119
- return 'unknown';
120
- }
121
- function formatFieldLabel(label) {
122
- return label
123
- .split('_')
124
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
125
- .join(' ');
126
- }
127
- function buildSchemaFieldLines(label, schema) {
128
- const heading = `**${formatFieldLabel(label)}:**`;
129
- if (!schema) {
130
- return [heading, '- none'];
131
- }
132
- const io = label === 'input_fields' ? 'input' : 'output';
133
- const jsonSchema = toJsonSchemaObject(schema, io);
134
- const properties = jsonSchema.properties ?? {};
135
- const required = new Set(jsonSchema.required ?? []);
136
- const fieldNames = Object.keys(properties);
137
- const lines = [heading];
138
- if (typeof jsonSchema.description === 'string' &&
139
- jsonSchema.description.length > 0) {
140
- lines.push(`- Schema constraints: ${jsonSchema.description}`);
141
- }
142
- if (jsonSchema.additionalProperties === false) {
143
- lines.push('- Unknown fields are rejected (`additionalProperties: false`).');
144
- }
145
- if (fieldNames.length === 0) {
146
- lines.push('- object with no fields');
147
- return lines;
148
- }
149
- lines.push(...fieldNames.map((fieldName) => {
150
- const fieldSchema = properties[fieldName] ?? {};
151
- const type = summarizeSchemaType(fieldSchema);
152
- const requiredLabel = required.has(fieldName) ? 'required' : 'optional';
153
- const description = typeof fieldSchema.description === 'string' &&
154
- fieldSchema.description.length > 0
155
- ? fieldSchema.description
156
- : 'No description.';
157
- return `- ${fieldName} (${type}, ${requiredLabel}): ${description}`;
158
- }));
159
- return lines;
160
- }
161
- export function buildToolInfo(name) {
162
- const contract = CONTRACTS_BY_NAME.get(name);
163
- const entry = ENTRIES[name];
164
- if (!entry || !contract)
165
- return undefined;
166
- const annotationLines = [];
167
- if (contract.annotations?.readOnlyHint)
168
- annotationLines.push('- readOnlyHint: true');
169
- if (contract.annotations?.idempotentHint)
170
- annotationLines.push('- idempotentHint: true');
171
- if (contract.annotations?.destructiveHint)
172
- annotationLines.push('- destructiveHint: true');
173
- if (contract.annotations?.openWorldHint)
174
- annotationLines.push('- openWorldHint: true');
175
- const lines = [
176
- `---`,
177
- `# ${entry.name}`,
178
- '',
179
- `**Title:** ${entry.title}`,
180
- `**Description:** ${entry.description}`,
181
- '',
182
- '**Execution:**',
183
- `- taskSupport: ${formatTaskSupportLabel(contract.taskSupport)}`,
184
- '',
185
- ...buildSchemaFieldLines('input_fields', contract.inputSchema),
186
- '',
187
- ...buildSchemaFieldLines('output_fields', contract.outputSchema),
188
- ];
189
- if (annotationLines.length > 0) {
190
- lines.push('', '**Behavior:**', ...annotationLines);
191
- }
192
- if (entry.nuances && entry.nuances.length > 0) {
193
- lines.push('', '**Usage Notes:**');
194
- for (const nuance of entry.nuances) {
195
- lines.push(`- ${nuance}`);
196
- }
197
- }
198
- if (entry.gotchas && entry.gotchas.length > 0) {
199
- lines.push('', '**Warnings:**');
200
- for (const gotcha of entry.gotchas) {
201
- lines.push(`- ${gotcha}`);
202
- }
203
- }
204
- lines.push('---');
205
- return lines.join('\n');
206
- }
@@ -1 +0,0 @@
1
- export declare function buildWorkflowGuide(): string;
@@ -1,72 +0,0 @@
1
- import { formatToolNameList, pickAvailableToolNames } from './tool-info.js';
2
- export function buildWorkflowGuide() {
3
- const exploreTools = formatToolNameList(pickAvailableToolNames([
4
- 'roots',
5
- 'ls',
6
- 'tree',
7
- 'stat',
8
- 'stat_many',
9
- 'read',
10
- 'read_many',
11
- ]));
12
- const searchTools = formatToolNameList(pickAvailableToolNames(['find', 'grep', 'read']));
13
- const editTools = formatToolNameList(pickAvailableToolNames([
14
- 'edit',
15
- 'write',
16
- 'search_and_replace',
17
- 'mv',
18
- 'rm',
19
- 'mkdir',
20
- ]));
21
- return `## Workflows
22
-
23
- ### A: Explore — Discover directory layout or file content
24
-
25
- **Tools:** ${exploreTools}
26
-
27
- 1. Start with \`roots\` to identify allowed directories.
28
- 2. Use \`ls\` or \`tree\` to map structure, then \`stat\` or \`read\` for details.
29
-
30
- > Resolve paths before acting. Never assume a path exists.
31
-
32
- ### B: Search — Find files by name or content
33
-
34
- **Tools:** ${searchTools}
35
-
36
- 1. Use \`find\` for file name/glob matching.
37
- 2. Use \`grep\` for content search (supports regex).
38
- 3. Use \`read\` to inspect matched files.
39
-
40
- > Use \`grep\` for content, \`find\` for filenames. Do not conflate them.
41
-
42
- ### C: Edit — Modify files or directory layout
43
-
44
- **Tools:** ${editTools}
45
-
46
- 1. Use \`edit\` for targeted single-file changes (exact text match → replace).
47
- 2. Use \`search_and_replace\` for bulk changes across multiple files.
48
- 3. Use \`mv\`, \`rm\`, \`mkdir\` for structural changes.
49
-
50
- > Confirm destructive operations (\`write\`, \`mv\`, \`rm\`, bulk replace) before executing.
51
-
52
- ### D: Patch — Generate and apply unified diffs
53
-
54
- 1. Generate: \`diff_files(original, modified)\`.
55
- 2. Validate: \`apply_patch(patch, dryRun: true)\`.
56
- 3. Apply: \`apply_patch(patch)\`.
57
-
58
- > Multi-file patches: set \`path\` to the base directory. Results are reported per file.
59
-
60
- ### E: Task Mode — Deferred execution with polling
61
-
62
- Use task mode for long-running operations when durable polling or cancellation is needed.
63
- Only tools with \`execution.taskSupport: "optional"\` or \`"required"\` support this.
64
-
65
- 1. Send \`tools/call\` with \`task: {}\` in the request to create a task.
66
- 2. Poll \`tasks/get({ taskId })\` until status reaches \`completed\`, \`failed\`, or \`cancelled\`.
67
- 3. Retrieve the final result via \`tasks/result({ taskId })\`.
68
- 4. Cancel with \`tasks/cancel({ taskId })\` if no longer needed.
69
-
70
- > Do not send \`task\` metadata to tools with \`taskSupport: "forbidden"\` (the default).
71
- `;
72
- }