@tarunspandit/codexflow 0.29.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 (92) hide show
  1. package/AGENTS.example.md +18 -0
  2. package/CHANGELOG.md +311 -0
  3. package/CHATGPT_PROMPT.md +12 -0
  4. package/CODEX_PROMPT.md +12 -0
  5. package/CONTRIBUTING.md +51 -0
  6. package/DOMAIN_SETUP.md +241 -0
  7. package/FAQ.md +327 -0
  8. package/FAQ_ZH.md +279 -0
  9. package/LICENSE +21 -0
  10. package/NOTICE +9 -0
  11. package/PUBLIC_LAUNCH_CHECKLIST.md +111 -0
  12. package/README.md +287 -0
  13. package/README_ZH.md +461 -0
  14. package/SECURITY.md +145 -0
  15. package/config.example.env +31 -0
  16. package/dist/analysis/cache.js +27 -0
  17. package/dist/analysis/cache.js.map +1 -0
  18. package/dist/analysis/classify.js +102 -0
  19. package/dist/analysis/classify.js.map +1 -0
  20. package/dist/analysis/extract.js +139 -0
  21. package/dist/analysis/extract.js.map +1 -0
  22. package/dist/analysis/graph.js +22 -0
  23. package/dist/analysis/graph.js.map +1 -0
  24. package/dist/analysis/impact.js +167 -0
  25. package/dist/analysis/impact.js.map +1 -0
  26. package/dist/analysis/index.js +215 -0
  27. package/dist/analysis/index.js.map +1 -0
  28. package/dist/analysis/inventory.js +51 -0
  29. package/dist/analysis/inventory.js.map +1 -0
  30. package/dist/analysis/providers.js +24 -0
  31. package/dist/analysis/providers.js.map +1 -0
  32. package/dist/analysis/rank.js +27 -0
  33. package/dist/analysis/rank.js.map +1 -0
  34. package/dist/analysis/types.js +8 -0
  35. package/dist/analysis/types.js.map +1 -0
  36. package/dist/bashOps.js +233 -0
  37. package/dist/bashOps.js.map +1 -0
  38. package/dist/capabilitiesOps.js +365 -0
  39. package/dist/capabilitiesOps.js.map +1 -0
  40. package/dist/codexSessions.js +379 -0
  41. package/dist/codexSessions.js.map +1 -0
  42. package/dist/config.js +289 -0
  43. package/dist/config.js.map +1 -0
  44. package/dist/fsOps.js +286 -0
  45. package/dist/fsOps.js.map +1 -0
  46. package/dist/gitOps.js +79 -0
  47. package/dist/gitOps.js.map +1 -0
  48. package/dist/guard.js +198 -0
  49. package/dist/guard.js.map +1 -0
  50. package/dist/http.js +1671 -0
  51. package/dist/http.js.map +1 -0
  52. package/dist/proContext.js +274 -0
  53. package/dist/proContext.js.map +1 -0
  54. package/dist/profileStore.js +89 -0
  55. package/dist/profileStore.js.map +1 -0
  56. package/dist/projectCatalog.js +134 -0
  57. package/dist/projectCatalog.js.map +1 -0
  58. package/dist/redact.js +73 -0
  59. package/dist/redact.js.map +1 -0
  60. package/dist/searchOps.js +186 -0
  61. package/dist/searchOps.js.map +1 -0
  62. package/dist/server.js +2502 -0
  63. package/dist/server.js.map +1 -0
  64. package/dist/stdio.js +36 -0
  65. package/dist/stdio.js.map +1 -0
  66. package/dist/toolCardWidget.js +1155 -0
  67. package/dist/toolCardWidget.js.map +1 -0
  68. package/dist/workspaceOps.js +229 -0
  69. package/dist/workspaceOps.js.map +1 -0
  70. package/docs/.nojekyll +1 -0
  71. package/docs/favicon.svg +5 -0
  72. package/docs/index.html +638 -0
  73. package/docs/og.png +0 -0
  74. package/docs/script.js +80 -0
  75. package/docs/star.svg +11 -0
  76. package/docs/styles.css +1229 -0
  77. package/docs/zh.html +436 -0
  78. package/package.json +94 -0
  79. package/scripts/analysis-cli-smoke.mjs +81 -0
  80. package/scripts/analysis-smoke.mjs +179 -0
  81. package/scripts/clean.mjs +6 -0
  82. package/scripts/cli-smoke.mjs +168 -0
  83. package/scripts/codexflow.mjs +4375 -0
  84. package/scripts/doctor-smoke.mjs +90 -0
  85. package/scripts/execute-handoff-smoke.mjs +1110 -0
  86. package/scripts/http-smoke.mjs +812 -0
  87. package/scripts/pro-apply.mjs +141 -0
  88. package/scripts/pro-bundle.mjs +121 -0
  89. package/scripts/pro-smoke.mjs +95 -0
  90. package/scripts/settings-smoke.mjs +756 -0
  91. package/scripts/smoke.mjs +1194 -0
  92. package/scripts/stress.mjs +835 -0
@@ -0,0 +1,365 @@
1
+ import fs from "node:fs";
2
+ import fsp from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import { isSubpath } from "./guard.js";
6
+ const MAX_MCP_SERVER_INVENTORY = 120;
7
+ const MAX_PLUGIN_INVENTORY = 80;
8
+ function unique(items, key) {
9
+ const seen = new Set();
10
+ const out = [];
11
+ for (const item of items) {
12
+ const id = key(item);
13
+ if (seen.has(id))
14
+ continue;
15
+ seen.add(id);
16
+ out.push(item);
17
+ }
18
+ return out;
19
+ }
20
+ async function safeReadText(file, maxBytes = 16_000) {
21
+ const stat = await fsp.stat(file);
22
+ const handle = await fsp.open(file, "r");
23
+ try {
24
+ const buffer = Buffer.alloc(Math.min(stat.size, maxBytes));
25
+ const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
26
+ return buffer.subarray(0, bytesRead).toString("utf8");
27
+ }
28
+ finally {
29
+ await handle.close();
30
+ }
31
+ }
32
+ async function readTextWithStats(file, maxBytes) {
33
+ const stat = await fsp.stat(file);
34
+ const handle = await fsp.open(file, "r");
35
+ try {
36
+ const limit = Math.max(1, Math.min(maxBytes, stat.size));
37
+ const buffer = Buffer.alloc(limit);
38
+ const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
39
+ return {
40
+ text: buffer.subarray(0, bytesRead).toString("utf8"),
41
+ bytes: bytesRead,
42
+ totalBytes: stat.size,
43
+ truncated: stat.size > bytesRead
44
+ };
45
+ }
46
+ finally {
47
+ await handle.close();
48
+ }
49
+ }
50
+ async function safeReaddir(dir) {
51
+ try {
52
+ return await fsp.readdir(dir, { withFileTypes: true });
53
+ }
54
+ catch {
55
+ return [];
56
+ }
57
+ }
58
+ function realpathOrUndefined(filePath) {
59
+ try {
60
+ return fs.realpathSync(filePath);
61
+ }
62
+ catch {
63
+ return undefined;
64
+ }
65
+ }
66
+ function displayPath(absPath, workspaceRoot) {
67
+ const home = os.homedir();
68
+ if (absPath === workspaceRoot)
69
+ return "$WORKSPACE";
70
+ if (absPath.startsWith(`${workspaceRoot}${path.sep}`)) {
71
+ return `$WORKSPACE/${path.relative(workspaceRoot, absPath).split(path.sep).join("/")}`;
72
+ }
73
+ if (absPath === home)
74
+ return "~";
75
+ if (absPath.startsWith(`${home}${path.sep}`)) {
76
+ return `~/${path.relative(home, absPath).split(path.sep).join("/")}`;
77
+ }
78
+ return absPath;
79
+ }
80
+ function skillSource(skillPath, workspaceRoot) {
81
+ if (skillPath.startsWith(`${workspaceRoot}${path.sep}`))
82
+ return "workspace";
83
+ if (skillPath.includes(`${path.sep}.codex${path.sep}plugins${path.sep}`))
84
+ return "plugin";
85
+ if (skillPath.startsWith(`${os.homedir()}${path.sep}`))
86
+ return "user";
87
+ return "other";
88
+ }
89
+ function skillSourceRank(source) {
90
+ if (source === "workspace")
91
+ return 0;
92
+ if (source === "user")
93
+ return 1;
94
+ if (source === "plugin")
95
+ return 2;
96
+ return 3;
97
+ }
98
+ function compareSkills(a, b) {
99
+ return (skillSourceRank(a.source) - skillSourceRank(b.source) ||
100
+ a.name.localeCompare(b.name) ||
101
+ a.path.localeCompare(b.path));
102
+ }
103
+ function publicSkill(record) {
104
+ return {
105
+ name: record.name,
106
+ description: record.description,
107
+ source: record.source,
108
+ path: record.path
109
+ };
110
+ }
111
+ function frontmatterValue(text, key) {
112
+ const match = text.match(new RegExp(`^${key}:\\s*(.+)$`, "m"));
113
+ return match?.[1]?.trim().replace(/^["']|["']$/g, "");
114
+ }
115
+ async function findSkillFiles(root, maxDepth, out, maxItems) {
116
+ if (out.length >= maxItems || maxDepth < 0)
117
+ return;
118
+ const entries = await safeReaddir(root);
119
+ for (const entry of entries) {
120
+ if (out.length >= maxItems)
121
+ return;
122
+ if (entry.name === "node_modules" || entry.name === ".git")
123
+ continue;
124
+ const abs = path.join(root, entry.name);
125
+ if (entry.isFile() && entry.name === "SKILL.md") {
126
+ out.push(abs);
127
+ continue;
128
+ }
129
+ if (entry.isDirectory()) {
130
+ await findSkillFiles(abs, maxDepth - 1, out, maxItems);
131
+ }
132
+ }
133
+ }
134
+ async function discoverSkillRecords(workspace, options = {}) {
135
+ const maxSkills = Math.max(1, Math.min(options.maxSkills ?? 120, 500));
136
+ const workspaceRoots = [
137
+ path.join(workspace.root, ".codex", "skills"),
138
+ path.join(workspace.root, ".agents", "skills"),
139
+ path.join(workspace.root, "skills")
140
+ ].flatMap((dir) => {
141
+ const real = realpathOrUndefined(dir);
142
+ return real && isSubpath(real, workspace.root) ? [real] : [];
143
+ });
144
+ const roots = [
145
+ ...workspaceRoots,
146
+ ...(options.includeGlobal
147
+ ? [
148
+ path.join(os.homedir(), ".codex", "skills"),
149
+ path.join(os.homedir(), ".agents", "skills"),
150
+ path.join(os.homedir(), ".codex", "plugins", "cache")
151
+ ]
152
+ : [])
153
+ ].filter((dir) => fs.existsSync(dir));
154
+ const skillFiles = [];
155
+ for (const root of roots) {
156
+ await findSkillFiles(root, root.includes(`${path.sep}plugins${path.sep}cache`) ? 9 : 3, skillFiles, maxSkills);
157
+ if (skillFiles.length >= maxSkills)
158
+ break;
159
+ }
160
+ const items = [];
161
+ for (const file of skillFiles.slice(0, maxSkills)) {
162
+ const realFile = realpathOrUndefined(file) ?? file;
163
+ if (isSubpath(file, workspace.root) && !isSubpath(realFile, workspace.root))
164
+ continue;
165
+ let text = "";
166
+ try {
167
+ text = await safeReadText(realFile);
168
+ }
169
+ catch {
170
+ // Keep the skill visible even if the file cannot be read.
171
+ }
172
+ const name = frontmatterValue(text, "name") ?? path.basename(path.dirname(realFile));
173
+ const description = frontmatterValue(text, "description");
174
+ items.push({
175
+ name,
176
+ description,
177
+ source: skillSource(realFile, workspace.root),
178
+ path: displayPath(realFile, workspace.root),
179
+ absPath: realFile
180
+ });
181
+ }
182
+ return unique(items, (item) => `${item.source}:${item.name}:${item.path}`).sort(compareSkills);
183
+ }
184
+ export async function discoverSkillInventory(workspace, options = {}) {
185
+ return (await discoverSkillRecords(workspace, options)).map(publicSkill);
186
+ }
187
+ export async function loadSkill(workspace, options) {
188
+ const name = options.name.trim();
189
+ if (!name)
190
+ throw new Error("Skill name is required.");
191
+ const requestedPath = options.path?.trim();
192
+ const records = await discoverSkillRecords(workspace, {
193
+ includeGlobal: options.includeGlobal !== false,
194
+ maxSkills: options.maxSkills
195
+ });
196
+ const matches = records.filter((skill) => skill.name === name &&
197
+ (!options.source || skill.source === options.source) &&
198
+ (!requestedPath || skill.path === requestedPath));
199
+ if (!matches.length) {
200
+ const near = records
201
+ .filter((skill) => skill.name.toLowerCase().includes(name.toLowerCase()))
202
+ .slice(0, 8)
203
+ .map((skill) => `${skill.name} [${skill.source}]`)
204
+ .join(", ");
205
+ const suffix = requestedPath ? ` at ${requestedPath}` : "";
206
+ throw new Error(`Skill not found: ${name}${suffix}${near ? `. Similar skills: ${near}` : ""}`);
207
+ }
208
+ if (matches.length > 1) {
209
+ const choices = matches.map((skill) => `${skill.name} [${skill.source}] at ${skill.path}`).join("; ");
210
+ throw new Error(`Multiple skills named ${name} were found. Pass source and path to choose one: ${choices}`);
211
+ }
212
+ const [skill] = matches;
213
+ if (path.basename(skill.absPath) !== "SKILL.md") {
214
+ throw new Error(`Refusing to load non-skill file: ${skill.path}`);
215
+ }
216
+ if (skill.source === "workspace") {
217
+ const realSkillPath = realpathOrUndefined(skill.absPath);
218
+ if (!realSkillPath || !isSubpath(realSkillPath, workspace.root)) {
219
+ throw new Error(`Refusing to load workspace skill outside workspace: ${skill.path}`);
220
+ }
221
+ }
222
+ const maxBytes = Math.max(1_000, Math.min(options.maxBytes ?? 40_000, 100_000));
223
+ const loaded = await readTextWithStats(skill.absPath, maxBytes);
224
+ return {
225
+ skill: publicSkill(skill),
226
+ text: loaded.text,
227
+ bytes: loaded.bytes,
228
+ totalBytes: loaded.totalBytes,
229
+ truncated: loaded.truncated
230
+ };
231
+ }
232
+ function parseTomlMcpServers(text, source) {
233
+ const out = [];
234
+ const re = /^\s*\[(?:mcp_servers|mcpServers)\.("?)([^"\].]+)\1\]\s*$/gm;
235
+ let match;
236
+ while ((match = re.exec(text))) {
237
+ out.push({ name: match[2], source });
238
+ }
239
+ return out;
240
+ }
241
+ function parseJsonMcpServers(text, source) {
242
+ try {
243
+ const parsed = JSON.parse(text);
244
+ const servers = parsed?.mcpServers;
245
+ if (!servers || typeof servers !== "object" || Array.isArray(servers))
246
+ return [];
247
+ return Object.keys(servers).map((name) => ({ name, source }));
248
+ }
249
+ catch {
250
+ return [];
251
+ }
252
+ }
253
+ export async function discoverMcpServers(workspace) {
254
+ const candidates = [
255
+ { file: path.join(os.homedir(), ".codex", "config.toml"), kind: "toml", source: "user codex config" },
256
+ { file: path.join(workspace.root, ".mcp.json"), kind: "json", source: "workspace config" },
257
+ { file: path.join(workspace.root, ".cursor", "mcp.json"), kind: "json", source: "workspace cursor config" },
258
+ { file: path.join(os.homedir(), ".cursor", "mcp.json"), kind: "json", source: "user cursor config" }
259
+ ];
260
+ const servers = [];
261
+ for (const candidate of candidates) {
262
+ if (!fs.existsSync(candidate.file))
263
+ continue;
264
+ let text = "";
265
+ try {
266
+ text = await safeReadText(candidate.file, 200_000);
267
+ }
268
+ catch {
269
+ continue;
270
+ }
271
+ servers.push(...(candidate.kind === "toml" ? parseTomlMcpServers(text, candidate.source) : parseJsonMcpServers(text, candidate.source)));
272
+ }
273
+ return unique(servers, (server) => `${server.source}:${server.name}`)
274
+ .sort((a, b) => a.name.localeCompare(b.name) || a.source.localeCompare(b.source))
275
+ .slice(0, MAX_MCP_SERVER_INVENTORY);
276
+ }
277
+ async function findPluginManifests(root, depth, out) {
278
+ if (depth < 0 || out.length >= MAX_PLUGIN_INVENTORY * 3)
279
+ return;
280
+ for (const entry of await safeReaddir(root)) {
281
+ if (!entry.isDirectory())
282
+ continue;
283
+ const child = path.join(root, entry.name);
284
+ const manifest = path.join(child, ".codex-plugin", "plugin.json");
285
+ if (fs.existsSync(manifest))
286
+ out.push(manifest);
287
+ else
288
+ await findPluginManifests(child, depth - 1, out);
289
+ }
290
+ }
291
+ export async function discoverPluginInventory() {
292
+ const cacheRoot = path.join(os.homedir(), ".codex", "plugins", "cache");
293
+ const manifests = [];
294
+ await findPluginManifests(cacheRoot, 4, manifests);
295
+ const plugins = [];
296
+ for (const manifest of manifests) {
297
+ try {
298
+ const parsed = JSON.parse(await safeReadText(manifest, 100_000));
299
+ if (!parsed?.name)
300
+ continue;
301
+ const relative = path.relative(cacheRoot, manifest).split(path.sep);
302
+ plugins.push({
303
+ name: String(parsed.name),
304
+ ...(parsed.version ? { version: String(parsed.version) } : {}),
305
+ ...(parsed.description ? { description: String(parsed.description).slice(0, 240) } : {}),
306
+ source: relative[0] || "plugin cache",
307
+ capabilities: Array.isArray(parsed.interface?.capabilities) ? parsed.interface.capabilities.map(String) : [],
308
+ hasSkills: Boolean(parsed.skills),
309
+ hasApps: Boolean(parsed.apps),
310
+ hasMcpServers: Boolean(parsed.mcpServers)
311
+ });
312
+ }
313
+ catch {
314
+ // Ignore invalid or partially installed plugin manifests.
315
+ }
316
+ }
317
+ return unique(plugins, (plugin) => `${plugin.source}:${plugin.name}`)
318
+ .sort((a, b) => a.name.localeCompare(b.name) || a.source.localeCompare(b.source))
319
+ .slice(0, MAX_PLUGIN_INVENTORY);
320
+ }
321
+ export async function codexflowInventory(config, workspace, options = {}) {
322
+ const skills = await discoverSkillInventory(workspace, {
323
+ includeGlobal: options.includeGlobalSkills !== false,
324
+ maxSkills: options.maxSkills
325
+ });
326
+ const mcpServers = options.includeMcpServers === false ? [] : await discoverMcpServers(workspace);
327
+ const plugins = options.includeGlobalSkills === false ? [] : await discoverPluginInventory();
328
+ const bySource = skills.reduce((acc, skill) => {
329
+ acc[skill.source] = (acc[skill.source] ?? 0) + 1;
330
+ return acc;
331
+ }, {});
332
+ const skillLines = skills.length
333
+ ? skills.map((skill) => `- ${skill.name} [${skill.source}]${skill.description ? ` - ${skill.description}` : ""}`).join("\n")
334
+ : "- none discovered";
335
+ const mcpLines = mcpServers.length
336
+ ? mcpServers.map((server) => `- ${server.name} (${server.source})`).join("\n")
337
+ : "- none discovered";
338
+ const text = `# CodexFlow Inventory
339
+
340
+ Workspace: ${workspace.root}
341
+ Bash mode: ${config.bashMode}
342
+ Write mode: ${config.writeMode}
343
+ Tool mode: ${config.toolMode}
344
+
345
+ ## Skill summary
346
+
347
+ Total: ${skills.length}
348
+ Workspace: ${bySource.workspace ?? 0}
349
+ User: ${bySource.user ?? 0}
350
+ Plugin: ${bySource.plugin ?? 0}
351
+ Other: ${bySource.other ?? 0}
352
+
353
+ ${skillLines}
354
+
355
+ ## MCP servers
356
+
357
+ ${mcpLines}
358
+
359
+ ## Plugins
360
+
361
+ ${plugins.length ? plugins.map((plugin) => `- ${plugin.name}${plugin.version ? ` ${plugin.version}` : ""} (${plugin.source})`).join("\n") : "- none discovered"}
362
+ `;
363
+ return { text, skills, mcpServers, plugins };
364
+ }
365
+ //# sourceMappingURL=capabilitiesOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilitiesOps.js","sourceRoot":"","sources":["../src/capabilitiesOps.ts"],"names":[],"mappings":"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"}