@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.
- package/AGENTS.example.md +18 -0
- package/CHANGELOG.md +311 -0
- package/CHATGPT_PROMPT.md +12 -0
- package/CODEX_PROMPT.md +12 -0
- package/CONTRIBUTING.md +51 -0
- package/DOMAIN_SETUP.md +241 -0
- package/FAQ.md +327 -0
- package/FAQ_ZH.md +279 -0
- package/LICENSE +21 -0
- package/NOTICE +9 -0
- package/PUBLIC_LAUNCH_CHECKLIST.md +111 -0
- package/README.md +287 -0
- package/README_ZH.md +461 -0
- package/SECURITY.md +145 -0
- package/config.example.env +31 -0
- package/dist/analysis/cache.js +27 -0
- package/dist/analysis/cache.js.map +1 -0
- package/dist/analysis/classify.js +102 -0
- package/dist/analysis/classify.js.map +1 -0
- package/dist/analysis/extract.js +139 -0
- package/dist/analysis/extract.js.map +1 -0
- package/dist/analysis/graph.js +22 -0
- package/dist/analysis/graph.js.map +1 -0
- package/dist/analysis/impact.js +167 -0
- package/dist/analysis/impact.js.map +1 -0
- package/dist/analysis/index.js +215 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/inventory.js +51 -0
- package/dist/analysis/inventory.js.map +1 -0
- package/dist/analysis/providers.js +24 -0
- package/dist/analysis/providers.js.map +1 -0
- package/dist/analysis/rank.js +27 -0
- package/dist/analysis/rank.js.map +1 -0
- package/dist/analysis/types.js +8 -0
- package/dist/analysis/types.js.map +1 -0
- package/dist/bashOps.js +233 -0
- package/dist/bashOps.js.map +1 -0
- package/dist/capabilitiesOps.js +365 -0
- package/dist/capabilitiesOps.js.map +1 -0
- package/dist/codexSessions.js +379 -0
- package/dist/codexSessions.js.map +1 -0
- package/dist/config.js +289 -0
- package/dist/config.js.map +1 -0
- package/dist/fsOps.js +286 -0
- package/dist/fsOps.js.map +1 -0
- package/dist/gitOps.js +79 -0
- package/dist/gitOps.js.map +1 -0
- package/dist/guard.js +198 -0
- package/dist/guard.js.map +1 -0
- package/dist/http.js +1671 -0
- package/dist/http.js.map +1 -0
- package/dist/proContext.js +274 -0
- package/dist/proContext.js.map +1 -0
- package/dist/profileStore.js +89 -0
- package/dist/profileStore.js.map +1 -0
- package/dist/projectCatalog.js +134 -0
- package/dist/projectCatalog.js.map +1 -0
- package/dist/redact.js +73 -0
- package/dist/redact.js.map +1 -0
- package/dist/searchOps.js +186 -0
- package/dist/searchOps.js.map +1 -0
- package/dist/server.js +2502 -0
- package/dist/server.js.map +1 -0
- package/dist/stdio.js +36 -0
- package/dist/stdio.js.map +1 -0
- package/dist/toolCardWidget.js +1155 -0
- package/dist/toolCardWidget.js.map +1 -0
- package/dist/workspaceOps.js +229 -0
- package/dist/workspaceOps.js.map +1 -0
- package/docs/.nojekyll +1 -0
- package/docs/favicon.svg +5 -0
- package/docs/index.html +638 -0
- package/docs/og.png +0 -0
- package/docs/script.js +80 -0
- package/docs/star.svg +11 -0
- package/docs/styles.css +1229 -0
- package/docs/zh.html +436 -0
- package/package.json +94 -0
- package/scripts/analysis-cli-smoke.mjs +81 -0
- package/scripts/analysis-smoke.mjs +179 -0
- package/scripts/clean.mjs +6 -0
- package/scripts/cli-smoke.mjs +168 -0
- package/scripts/codexflow.mjs +4375 -0
- package/scripts/doctor-smoke.mjs +90 -0
- package/scripts/execute-handoff-smoke.mjs +1110 -0
- package/scripts/http-smoke.mjs +812 -0
- package/scripts/pro-apply.mjs +141 -0
- package/scripts/pro-bundle.mjs +121 -0
- package/scripts/pro-smoke.mjs +95 -0
- package/scripts/settings-smoke.mjs +756 -0
- package/scripts/smoke.mjs +1194 -0
- package/scripts/stress.mjs +835 -0
package/dist/redact.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
const OPENAI_SECRET_PATTERN = /\bsk-[A-Za-z0-9_-]{10,}\b/g;
|
|
2
|
+
const COMMON_TOKEN_PATTERN = /\b(?:sk-ant-[A-Za-z0-9_-]{10,}|gh[opsru]_[A-Za-z0-9_]{20,}|github_pat_[A-Za-z0-9_]{20,}|npm_[A-Za-z0-9_-]{20,})\b/g;
|
|
3
|
+
const BEARER_TOKEN_PATTERN = /\b(Authorization\s*:\s*Bearer\s+)[A-Za-z0-9._~+/=-]{12,}/gi;
|
|
4
|
+
const CLI_TOKEN_PATTERN = /((?:\bngrok\s+config\s+add-authtoken|\bcloudflared\s+service\s+install|--(?:token|access-token|auth-token|api[_-]?key|authtoken))(?:=|\s+))[A-Za-z0-9._~+/=-]{8,}/gi;
|
|
5
|
+
const QUERY_TOKEN_PATTERN = /([?&](?:codexflow_token|token|access_token|auth_token|api[_-]?key)=)[^&\s"'`<>]{8,}/gi;
|
|
6
|
+
const CODEXFLOW_TOKEN_ASSIGNMENT_PATTERN = /\b(codexflow_token\s*=\s*)(?:"[^"\r\n]{8,512}"|'[^'\r\n]{8,512}'|`[^`\r\n]{8,512}`|[A-Za-z0-9_./+=-]{8,512})/gi;
|
|
7
|
+
const CODEXFLOW_TOKEN_FIELD_PATTERN = /(["']?codexflow_token["']?\s*:\s*)(?:"[^"\r\n]{8,512}"|'[^'\r\n]{8,512}'|`[^`\r\n]{8,512}`|[A-Za-z0-9_./+=-]{8,512})/gi;
|
|
8
|
+
const SECRET_ASSIGNMENT_PATTERN = /\b[A-Za-z0-9_]{0,64}(?:API[_-]?KEY|TOKEN|SECRET|PASSWORD|PRIVATE[_-]?KEY)[A-Za-z0-9_]{0,64}\s*=\s*(?:"[^"\r\n]{12,512}"|'[^'\r\n]{12,512}'|`[^`\r\n]{12,512}`|[A-Za-z0-9_./+=-]{20,512})/gi;
|
|
9
|
+
const SECRET_FIELD_PATTERN = /(["']?[A-Za-z0-9_]{0,64}(?:API[_-]?KEY|TOKEN|SECRET|PASSWORD|PRIVATE[_-]?KEY)[A-Za-z0-9_]{0,64}["']?\s*:\s*)(?:"[^"\r\n]{12,512}"|'[^'\r\n]{12,512}'|`[^`\r\n]{12,512}`|[A-Za-z0-9_./+=-]{20,512})/gi;
|
|
10
|
+
const SECRET_PATTERNS = [OPENAI_SECRET_PATTERN, COMMON_TOKEN_PATTERN, BEARER_TOKEN_PATTERN, CLI_TOKEN_PATTERN, QUERY_TOKEN_PATTERN, CODEXFLOW_TOKEN_ASSIGNMENT_PATTERN, CODEXFLOW_TOKEN_FIELD_PATTERN, SECRET_ASSIGNMENT_PATTERN, SECRET_FIELD_PATTERN];
|
|
11
|
+
export function hasSecretValue(text) {
|
|
12
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
13
|
+
pattern.lastIndex = 0;
|
|
14
|
+
let match;
|
|
15
|
+
while ((match = pattern.exec(text)) !== null) {
|
|
16
|
+
if (!isPlaceholderSecret(match[0]))
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
export function redactSensitiveText(text) {
|
|
23
|
+
return text
|
|
24
|
+
.replace(CODEXFLOW_TOKEN_ASSIGNMENT_PATTERN, (_match, prefix) => `${prefix}[REDACTED_SECRET]`)
|
|
25
|
+
.replace(CODEXFLOW_TOKEN_FIELD_PATTERN, (_match, prefix) => `${prefix}[REDACTED_SECRET]`)
|
|
26
|
+
.replace(CLI_TOKEN_PATTERN, (match, prefix) => isPlaceholderSecret(match) ? match : `${prefix}[REDACTED_SECRET]`)
|
|
27
|
+
.replace(SECRET_ASSIGNMENT_PATTERN, (match) => isPlaceholderSecret(match) ? match : redactSecretAssignment(match))
|
|
28
|
+
.replace(SECRET_FIELD_PATTERN, (match, prefix) => isPlaceholderSecret(match) ? match : `${prefix}[REDACTED_SECRET]`)
|
|
29
|
+
.replace(BEARER_TOKEN_PATTERN, (_match, prefix) => `${prefix}[REDACTED_SECRET]`)
|
|
30
|
+
.replace(QUERY_TOKEN_PATTERN, (_match, prefix) => `${prefix}[REDACTED_SECRET]`)
|
|
31
|
+
.replace(OPENAI_SECRET_PATTERN, (match) => isPlaceholderSecret(match) ? match : "[REDACTED_SECRET]")
|
|
32
|
+
.replace(COMMON_TOKEN_PATTERN, (match) => isPlaceholderSecret(match) ? match : "[REDACTED_SECRET]");
|
|
33
|
+
}
|
|
34
|
+
export function redactStructured(value, depth = 0) {
|
|
35
|
+
if (depth > 8)
|
|
36
|
+
return value;
|
|
37
|
+
if (typeof value === "string")
|
|
38
|
+
return redactSensitiveText(value);
|
|
39
|
+
if (!value || typeof value !== "object")
|
|
40
|
+
return value;
|
|
41
|
+
if (Array.isArray(value))
|
|
42
|
+
return value.map((item) => redactStructured(item, depth + 1));
|
|
43
|
+
const out = {};
|
|
44
|
+
for (const [key, item] of Object.entries(value)) {
|
|
45
|
+
out[key] = redactStructured(item, depth + 1);
|
|
46
|
+
}
|
|
47
|
+
return out;
|
|
48
|
+
}
|
|
49
|
+
function isPlaceholderSecret(value) {
|
|
50
|
+
const normalized = value.toLowerCase();
|
|
51
|
+
return (normalized.includes("[redacted_secret]") ||
|
|
52
|
+
normalized.includes("replace-me") ||
|
|
53
|
+
normalized.includes("replace-with-long-random-token") ||
|
|
54
|
+
normalized.includes("keep-this-codexflow-token-stable") ||
|
|
55
|
+
normalized.includes("keep-this-stable-token") ||
|
|
56
|
+
normalized.includes("your-ngrok-token") ||
|
|
57
|
+
normalized.includes("your-token") ||
|
|
58
|
+
normalized.includes("your-api-key-here") ||
|
|
59
|
+
normalized.includes("<openai_api_key>") ||
|
|
60
|
+
normalized.includes("process.env.") ||
|
|
61
|
+
normalized.includes("import.meta.env.") ||
|
|
62
|
+
normalized.includes("os.environ") ||
|
|
63
|
+
normalized.includes("getenv(") ||
|
|
64
|
+
normalized === "sk-..." ||
|
|
65
|
+
normalized.endsWith("=sk-..."));
|
|
66
|
+
}
|
|
67
|
+
function redactSecretAssignment(value) {
|
|
68
|
+
const index = value.indexOf("=");
|
|
69
|
+
if (index < 0)
|
|
70
|
+
return "[REDACTED_SECRET]";
|
|
71
|
+
return `${value.slice(0, index).trimEnd()}= [REDACTED_SECRET]`;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import fsp from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
import { CodexFlowError } from "./guard.js";
|
|
5
|
+
import { listFiles, textScanByteLimit } from "./fsOps.js";
|
|
6
|
+
import { redactSensitiveText } from "./redact.js";
|
|
7
|
+
import { searchWorkspaceStructured } from "./analysis/index.js";
|
|
8
|
+
function commandExists(command) {
|
|
9
|
+
return new Promise((resolve) => {
|
|
10
|
+
const child = process.platform === "win32"
|
|
11
|
+
? spawn("where", [command], { stdio: "ignore", shell: false })
|
|
12
|
+
: spawn("/bin/sh", ["-lc", `command -v ${command} >/dev/null 2>&1`], { stdio: "ignore" });
|
|
13
|
+
child.on("close", (code) => resolve(code === 0));
|
|
14
|
+
child.on("error", () => resolve(false));
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function truncateLine(line, max = 400) {
|
|
18
|
+
if (line.length <= max)
|
|
19
|
+
return line;
|
|
20
|
+
return `${line.slice(0, max)}…`;
|
|
21
|
+
}
|
|
22
|
+
async function runRipgrep(config, guard, workspace, options) {
|
|
23
|
+
const target = guard.resolve(workspace, options.root ?? ".");
|
|
24
|
+
const args = ["--json", "--line-number", "--with-filename", "--no-heading", "--color=never", "--max-columns", "500", "--max-count", "50", "--max-filesize", String(textScanByteLimit(config))];
|
|
25
|
+
if (!options.regex)
|
|
26
|
+
args.push("--fixed-strings");
|
|
27
|
+
if (options.includeHidden)
|
|
28
|
+
args.push("--hidden");
|
|
29
|
+
for (const glob of config.blockedGlobs)
|
|
30
|
+
args.push("-g", `!${glob}`);
|
|
31
|
+
if (options.glob)
|
|
32
|
+
args.push("-g", options.glob);
|
|
33
|
+
// Pass the query via -e so patterns beginning with "-" (e.g. "->", "--flag")
|
|
34
|
+
// are treated as the search term instead of ripgrep options.
|
|
35
|
+
args.push("-e", options.query, "--", target.absPath);
|
|
36
|
+
return new Promise((resolve, reject) => {
|
|
37
|
+
const child = spawn("rg", args, { cwd: workspace.root, env: { ...process.env, NO_COLOR: "1" } });
|
|
38
|
+
let stdout = "";
|
|
39
|
+
let stderr = "";
|
|
40
|
+
child.stdout.on("data", (chunk) => {
|
|
41
|
+
stdout += String(chunk);
|
|
42
|
+
if (stdout.length > config.maxOutputBytes)
|
|
43
|
+
child.kill("SIGTERM");
|
|
44
|
+
});
|
|
45
|
+
child.stderr.on("data", (chunk) => {
|
|
46
|
+
stderr += String(chunk);
|
|
47
|
+
});
|
|
48
|
+
child.on("error", reject);
|
|
49
|
+
child.on("close", (code) => {
|
|
50
|
+
if (code && code > 1) {
|
|
51
|
+
reject(new CodexFlowError(stderr.trim() || `ripgrep failed with exit code ${code}`));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const matches = [];
|
|
55
|
+
const lines = stdout.split("\n").filter(Boolean);
|
|
56
|
+
let visibleMatches = 0;
|
|
57
|
+
for (const line of lines) {
|
|
58
|
+
const value = JSON.parse(line);
|
|
59
|
+
if (value.type !== "match")
|
|
60
|
+
continue;
|
|
61
|
+
const absPath = path.resolve(value.data?.path?.text ?? "");
|
|
62
|
+
const rel = path.relative(workspace.root, absPath).split(path.sep).join("/");
|
|
63
|
+
if (rel.startsWith(".."))
|
|
64
|
+
continue;
|
|
65
|
+
if (guard.isBlockedRelativePath(rel))
|
|
66
|
+
continue;
|
|
67
|
+
visibleMatches += 1;
|
|
68
|
+
if (matches.length >= options.maxResults)
|
|
69
|
+
continue;
|
|
70
|
+
const lineText = String(value.data?.lines?.text ?? "").replace(/\r?\n$/, "");
|
|
71
|
+
matches.push({ path: rel || ".", line: Number(value.data?.line_number ?? 0), text: redactSensitiveText(truncateLine(lineText)) });
|
|
72
|
+
}
|
|
73
|
+
const text = matches.map((m) => `${m.path}:${m.line}: ${m.text}`).join("\n") || "No matches.";
|
|
74
|
+
resolve({ text, matches, truncated: visibleMatches > matches.length || stdout.length > config.maxOutputBytes, used: "ripgrep" });
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async function runNodeSearch(config, guard, workspace, options) {
|
|
79
|
+
const files = await listFiles(guard, workspace, {
|
|
80
|
+
root: options.root,
|
|
81
|
+
glob: options.glob,
|
|
82
|
+
includeHidden: options.includeHidden,
|
|
83
|
+
maxFiles: 20_000
|
|
84
|
+
});
|
|
85
|
+
const matches = [];
|
|
86
|
+
let visibleMatches = 0;
|
|
87
|
+
const scanBytes = textScanByteLimit(config);
|
|
88
|
+
const matcher = options.regex ? new RegExp(options.query) : undefined;
|
|
89
|
+
for (const rel of files) {
|
|
90
|
+
if (visibleMatches > options.maxResults)
|
|
91
|
+
break;
|
|
92
|
+
const resolved = guard.resolve(workspace, rel);
|
|
93
|
+
try {
|
|
94
|
+
const stat = await fsp.stat(resolved.absPath);
|
|
95
|
+
if (stat.size > scanBytes)
|
|
96
|
+
continue;
|
|
97
|
+
const buffer = await fsp.readFile(resolved.absPath);
|
|
98
|
+
if (buffer.includes(0))
|
|
99
|
+
continue;
|
|
100
|
+
const lines = buffer.toString("utf8").split(/\r?\n/);
|
|
101
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
102
|
+
const line = lines[i];
|
|
103
|
+
const hit = matcher ? matcher.test(line) : line.includes(options.query);
|
|
104
|
+
if (hit) {
|
|
105
|
+
visibleMatches += 1;
|
|
106
|
+
if (matches.length < options.maxResults) {
|
|
107
|
+
matches.push({ path: rel, line: i + 1, text: redactSensitiveText(truncateLine(line)) });
|
|
108
|
+
}
|
|
109
|
+
if (visibleMatches > options.maxResults)
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Skip unreadable files.
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const text = matches.map((m) => `${m.path}:${m.line}: ${m.text}`).join("\n") || "No matches.";
|
|
119
|
+
return { text, matches, truncated: visibleMatches > matches.length, used: "node" };
|
|
120
|
+
}
|
|
121
|
+
export async function searchWorkspace(config, guard, workspace, rawOptions) {
|
|
122
|
+
const query = rawOptions.symbol?.toString() || rawOptions.query?.toString() || "";
|
|
123
|
+
if (!query)
|
|
124
|
+
throw new CodexFlowError("query is required.");
|
|
125
|
+
const options = {
|
|
126
|
+
query,
|
|
127
|
+
regex: Boolean(rawOptions.regex),
|
|
128
|
+
root: rawOptions.root,
|
|
129
|
+
glob: rawOptions.glob,
|
|
130
|
+
includeHidden: Boolean(rawOptions.includeHidden),
|
|
131
|
+
maxResults: Math.max(1, Math.min(rawOptions.maxResults ?? config.maxSearchResults, config.maxSearchResults)),
|
|
132
|
+
intent: rawOptions.intent,
|
|
133
|
+
symbol: rawOptions.symbol,
|
|
134
|
+
includeTests: rawOptions.includeTests
|
|
135
|
+
};
|
|
136
|
+
let lexical;
|
|
137
|
+
if (await commandExists("rg")) {
|
|
138
|
+
lexical = await runRipgrep(config, guard, workspace, options);
|
|
139
|
+
}
|
|
140
|
+
else if (options.regex) {
|
|
141
|
+
throw new CodexFlowError("regex search requires ripgrep. Install rg or retry with regex=false.");
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
lexical = await runNodeSearch(config, guard, workspace, options);
|
|
145
|
+
}
|
|
146
|
+
const structuredRequested = rawOptions.intent !== undefined || rawOptions.symbol !== undefined || rawOptions.includeTests !== undefined;
|
|
147
|
+
if (!structuredRequested)
|
|
148
|
+
return lexical;
|
|
149
|
+
if (!config.analysisEnabled) {
|
|
150
|
+
lexical.analysis = {
|
|
151
|
+
schemaVersion: 1,
|
|
152
|
+
query,
|
|
153
|
+
intent: rawOptions.intent && rawOptions.intent !== "auto" ? rawOptions.intent : "text",
|
|
154
|
+
groups: { definitions: [], references: [], tests: [], configuration: [], documentation: [], other: [] },
|
|
155
|
+
matches: [],
|
|
156
|
+
coverage: { inventoryFiles: 0, analyzedFiles: 0, scannedBytes: 0, symbolCount: 0, relationshipCount: 0, truncated: true, warnings: ["Repository analysis is disabled by configuration."] },
|
|
157
|
+
warnings: ["Repository analysis is disabled by configuration."],
|
|
158
|
+
cache: { hit: false, key: "disabled" }
|
|
159
|
+
};
|
|
160
|
+
return lexical;
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
lexical.analysis = await searchWorkspaceStructured(config, guard, workspace, {
|
|
164
|
+
query,
|
|
165
|
+
intent: rawOptions.intent ?? "auto",
|
|
166
|
+
includeTests: Boolean(rawOptions.includeTests),
|
|
167
|
+
regex: Boolean(rawOptions.regex),
|
|
168
|
+
root: options.root,
|
|
169
|
+
maxResults: options.maxResults
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
lexical.analysis = {
|
|
174
|
+
schemaVersion: 1,
|
|
175
|
+
query,
|
|
176
|
+
intent: rawOptions.intent && rawOptions.intent !== "auto" ? rawOptions.intent : "text",
|
|
177
|
+
groups: { definitions: [], references: [], tests: [], configuration: [], documentation: [], other: [] },
|
|
178
|
+
matches: [],
|
|
179
|
+
coverage: { inventoryFiles: 0, analyzedFiles: 0, scannedBytes: 0, symbolCount: 0, relationshipCount: 0, truncated: true, warnings: [] },
|
|
180
|
+
warnings: [`Repository analysis unavailable: ${redactSensitiveText(error instanceof Error ? error.message : String(error))}`],
|
|
181
|
+
cache: { hit: false, key: "unavailable" }
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
return lexical;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=searchOps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchOps.js","sourceRoot":"","sources":["../src/searchOps.ts"],"names":[],"mappings":"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"}
|