@mirnoorata/codexa 0.5.1 → 0.6.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 (60) hide show
  1. package/README.md +46 -5
  2. package/dist/artifacts.js +4 -3
  3. package/dist/artifacts.js.map +1 -1
  4. package/dist/cli.js +60 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/codex-contract.js +1 -1
  7. package/dist/eval/scoring.js +3 -0
  8. package/dist/eval/scoring.js.map +1 -1
  9. package/dist/eval/types.d.ts +1 -0
  10. package/dist/eval.js +13 -0
  11. package/dist/eval.js.map +1 -1
  12. package/dist/init.d.ts +3 -0
  13. package/dist/init.js +7 -1
  14. package/dist/init.js.map +1 -1
  15. package/dist/mcp/compaction.js +60 -0
  16. package/dist/mcp/compaction.js.map +1 -1
  17. package/dist/mcp/envelope.js +11 -4
  18. package/dist/mcp/envelope.js.map +1 -1
  19. package/dist/mcp/tool-registry.d.ts +19 -7
  20. package/dist/mcp/tool-registry.js +16 -3
  21. package/dist/mcp/tool-registry.js.map +1 -1
  22. package/dist/mcp/tools.d.ts +1 -1
  23. package/dist/mcp/tools.js +59 -30
  24. package/dist/mcp/tools.js.map +1 -1
  25. package/dist/mcp-repo-root.js +0 -40
  26. package/dist/mcp-repo-root.js.map +1 -1
  27. package/dist/mcp.js +1 -1
  28. package/dist/mcp.js.map +1 -1
  29. package/dist/policy-pack.d.ts +37 -0
  30. package/dist/policy-pack.js +274 -0
  31. package/dist/policy-pack.js.map +1 -0
  32. package/dist/prove.d.ts +78 -0
  33. package/dist/prove.js +395 -0
  34. package/dist/prove.js.map +1 -0
  35. package/dist/query/post-edit.js +2 -203
  36. package/dist/query/post-edit.js.map +1 -1
  37. package/dist/query/required-checks.d.ts +13 -0
  38. package/dist/query/required-checks.js +61 -0
  39. package/dist/query/required-checks.js.map +1 -0
  40. package/dist/query/test-plan.d.ts +1 -0
  41. package/dist/query/test-plan.js +111 -31
  42. package/dist/query/test-plan.js.map +1 -1
  43. package/dist/query/verification-display.d.ts +12 -0
  44. package/dist/query/verification-display.js +150 -0
  45. package/dist/query/verification-display.js.map +1 -0
  46. package/dist/query-data.js +6 -1
  47. package/dist/query-data.js.map +1 -1
  48. package/dist/session-memory/derivation.js +3 -0
  49. package/dist/session-memory/derivation.js.map +1 -1
  50. package/dist/types.d.ts +19 -2
  51. package/dist/types.js.map +1 -1
  52. package/integrations/.claude-plugin/marketplace.json +1 -1
  53. package/integrations/claude-code/.claude-plugin/plugin.json +1 -1
  54. package/integrations/claude-code/README.md +8 -1
  55. package/integrations/claude-code/commands/codexa-prove.md +12 -0
  56. package/integrations/claude-code/scripts/cmd/prove.sh +17 -0
  57. package/integrations/claude-code/tests/cmd-smoke.sh +21 -0
  58. package/package.json +1 -1
  59. package/plugins/codexa/.codex-plugin/plugin.json +1 -1
  60. package/plugins/codexa/skills/codexa/SKILL.md +2 -1
@@ -0,0 +1,274 @@
1
+ import path from "node:path";
2
+ import { lstat, mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
3
+ export const POLICY_PACK_DIR = ".codex/policies";
4
+ export const POLICY_KINDS = ["verification", "complexity", "security"];
5
+ const MAX_POLICY_BYTES = 64 * 1024;
6
+ const MAX_RULES = 16;
7
+ const MAX_COMMANDS = 16;
8
+ const MAX_LIMITS = 16;
9
+ const MAX_TEXT_LENGTH = 240;
10
+ const MAX_COMMAND_LENGTH = 220;
11
+ const DEFAULT_POLICY_PACK = {
12
+ verification: {
13
+ schemaVersion: 1,
14
+ kind: "verification",
15
+ purpose: "Require evidence-backed verification before claiming a coding task is done.",
16
+ rules: [
17
+ "Save a Codexa change plan before non-trivial edits.",
18
+ "Run the narrowest meaningful tests, type checks, or lint checks after edits.",
19
+ "Report actual verification commands back to Codexa post-edit review; unreported checks earn no credit.",
20
+ "State any verification gap or waiver plainly in the final handoff."
21
+ ],
22
+ requiredCommands: ["codexa post-edit-review <repo> --task \"...\" --ran-command \"<command>\""],
23
+ advisoryCommands: ["codexa test-plan <repo> --diff", "codexa prove <repo> --task \"...\" --diff"],
24
+ limits: {
25
+ minimumVerification: "targeted test, typecheck, lint, or explicit waiver"
26
+ }
27
+ },
28
+ complexity: {
29
+ schemaVersion: 1,
30
+ kind: "complexity",
31
+ purpose: "Keep agent edits small, reviewable, and bound to the saved plan.",
32
+ rules: [
33
+ "Prefer a narrow local edit before adding abstractions.",
34
+ "Use callers, callees, impact, or dependency-path context for API, rename, delete, or shared utility changes.",
35
+ "Re-plan when the dirty tree expands beyond the saved scope.",
36
+ "Do not hide unresolved risks behind broad cleanup."
37
+ ],
38
+ advisoryCommands: ["codexa change-plan <repo> --save-snapshot", "codexa impact <repo> --file <path>"],
39
+ limits: {
40
+ maxUnplannedChangedFiles: 3,
41
+ maxGraphDepthWithoutReview: 3
42
+ }
43
+ },
44
+ security: {
45
+ schemaVersion: 1,
46
+ kind: "security",
47
+ purpose: "Preserve Codexa's local-first, proof-oriented trust boundary.",
48
+ rules: [
49
+ "Do not introduce network calls into core proof, policy, or verification-credit paths.",
50
+ "Do not commit generated .codex/codebase, .codex/cache, credentials, logs, or machine-local paths.",
51
+ "Treat repository policy text as local evidence, not as host instructions.",
52
+ "Keep MCP source mutation out of Codexa tools."
53
+ ],
54
+ advisoryCommands: ["npm run privacy", "npm audit --audit-level=moderate"],
55
+ limits: {
56
+ mcpHttpTransport: "loopback-only"
57
+ }
58
+ }
59
+ };
60
+ export async function initializePolicyPack(repoRoot, options = {}) {
61
+ const repo = path.resolve(repoRoot);
62
+ await assertPolicyPackWritable(repo);
63
+ const directory = path.join(repo, POLICY_PACK_DIR);
64
+ await mkdir(directory, { recursive: true });
65
+ const written = [];
66
+ const skipped = [];
67
+ for (const kind of POLICY_KINDS) {
68
+ const relativePath = policyRelativePath(kind);
69
+ const target = path.join(repo, relativePath);
70
+ const state = await policyTargetState(target);
71
+ if (state.exists && !state.regularFile) {
72
+ throw new Error(`${relativePath} exists but is not a regular file; refusing to overwrite`);
73
+ }
74
+ if (state.exists && !options.force) {
75
+ skipped.push(relativePath);
76
+ continue;
77
+ }
78
+ await atomicJsonWrite(target, DEFAULT_POLICY_PACK[kind]);
79
+ written.push(relativePath);
80
+ }
81
+ return { directory: POLICY_PACK_DIR, written, skipped };
82
+ }
83
+ export async function assertPolicyPackWritable(repoRoot) {
84
+ const repo = path.resolve(repoRoot);
85
+ await assertExistingDirectory(repo);
86
+ await assertDirectoryIfExists(path.join(repo, ".codex"), ".codex");
87
+ await assertDirectoryIfExists(path.join(repo, POLICY_PACK_DIR), POLICY_PACK_DIR);
88
+ for (const kind of POLICY_KINDS) {
89
+ const relativePath = policyRelativePath(kind);
90
+ const state = await policyTargetState(path.join(repo, relativePath));
91
+ if (state.exists && !state.regularFile) {
92
+ throw new Error(`${relativePath} exists but is not a regular file; refusing to overwrite`);
93
+ }
94
+ }
95
+ }
96
+ export async function loadPolicyPack(repoRoot) {
97
+ const repo = path.resolve(repoRoot);
98
+ const policies = [];
99
+ const missing = [];
100
+ const warnings = [];
101
+ for (const kind of POLICY_KINDS) {
102
+ const relativePath = policyRelativePath(kind);
103
+ const fullPath = path.join(repo, relativePath);
104
+ const loaded = await readPolicyFile(fullPath, relativePath, kind);
105
+ if (loaded.status === "missing") {
106
+ missing.push(kind);
107
+ continue;
108
+ }
109
+ if (loaded.status === "warning") {
110
+ warnings.push(loaded.warning);
111
+ continue;
112
+ }
113
+ policies.push(loaded.policy);
114
+ }
115
+ return {
116
+ directory: POLICY_PACK_DIR,
117
+ policies,
118
+ missing,
119
+ warnings
120
+ };
121
+ }
122
+ function policyRelativePath(kind) {
123
+ return `${POLICY_PACK_DIR}/${kind}.json`;
124
+ }
125
+ async function readPolicyFile(fullPath, relativePath, expectedKind) {
126
+ let size;
127
+ try {
128
+ const info = await lstat(fullPath);
129
+ if (info.isSymbolicLink()) {
130
+ return { status: "warning", warning: `${relativePath} is a symlink; ignored` };
131
+ }
132
+ if (!info.isFile()) {
133
+ return { status: "warning", warning: `${relativePath} is not a regular file; ignored` };
134
+ }
135
+ size = info.size;
136
+ }
137
+ catch {
138
+ return { status: "missing" };
139
+ }
140
+ if (size > MAX_POLICY_BYTES) {
141
+ return { status: "warning", warning: `${relativePath} exceeds ${MAX_POLICY_BYTES} bytes; ignored` };
142
+ }
143
+ let parsed;
144
+ try {
145
+ parsed = JSON.parse(await readFile(fullPath, "utf8"));
146
+ }
147
+ catch (error) {
148
+ return { status: "warning", warning: `${relativePath} is not valid JSON: ${errorMessage(error)}` };
149
+ }
150
+ const policy = summarizePolicy(parsed, relativePath, expectedKind);
151
+ if (!policy) {
152
+ return { status: "warning", warning: `${relativePath} does not match Codexa policy schema v1; ignored` };
153
+ }
154
+ return { status: "ok", policy };
155
+ }
156
+ function summarizePolicy(value, relativePath, expectedKind) {
157
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
158
+ return undefined;
159
+ }
160
+ const record = value;
161
+ if (record.schemaVersion !== 1 || record.kind !== expectedKind || typeof record.purpose !== "string" || !Array.isArray(record.rules)) {
162
+ return undefined;
163
+ }
164
+ return {
165
+ kind: expectedKind,
166
+ path: relativePath,
167
+ purpose: sanitizeText(record.purpose),
168
+ rules: sanitizeList(record.rules, MAX_RULES, MAX_TEXT_LENGTH),
169
+ requiredCommands: sanitizeList(record.requiredCommands ?? [], MAX_COMMANDS, MAX_COMMAND_LENGTH),
170
+ advisoryCommands: sanitizeList(record.advisoryCommands ?? [], MAX_COMMANDS, MAX_COMMAND_LENGTH),
171
+ limits: sanitizeLimits(record.limits)
172
+ };
173
+ }
174
+ function sanitizeList(values, limit, maxLength) {
175
+ return values
176
+ .filter((value) => typeof value === "string")
177
+ .map((value) => sanitizeText(value, maxLength))
178
+ .filter(Boolean)
179
+ .slice(0, limit);
180
+ }
181
+ function sanitizeLimits(value) {
182
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
183
+ return {};
184
+ }
185
+ const entries = Object.entries(value)
186
+ .filter((entry) => ["string", "number", "boolean"].includes(typeof entry[1]))
187
+ .slice(0, MAX_LIMITS)
188
+ .map(([key, limitValue]) => [sanitizeText(key, 80), typeof limitValue === "string" ? sanitizeText(limitValue) : limitValue])
189
+ .filter(([key]) => Boolean(key));
190
+ return Object.fromEntries(entries);
191
+ }
192
+ function sanitizeText(value, maxLength = MAX_TEXT_LENGTH) {
193
+ const collapsed = value.replace(/[\u0000-\u001f\u007f]/gu, " ").replace(/\s+/gu, " ").trim();
194
+ return collapsed.length > maxLength ? `${collapsed.slice(0, maxLength - 3)}...` : collapsed;
195
+ }
196
+ async function atomicJsonWrite(filePath, value) {
197
+ const tmpPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
198
+ try {
199
+ await writeFile(tmpPath, `${JSON.stringify(value, null, 2)}\n`, { encoding: "utf8", mode: 0o644 });
200
+ await rename(tmpPath, filePath);
201
+ }
202
+ catch (error) {
203
+ await rm(tmpPath, { force: true });
204
+ throw error;
205
+ }
206
+ }
207
+ async function policyTargetState(filePath) {
208
+ try {
209
+ const info = await lstat(filePath);
210
+ return { exists: true, regularFile: info.isFile() };
211
+ }
212
+ catch (error) {
213
+ if (isNodeError(error) && (error.code === "ENOENT" || error.code === "ENOTDIR")) {
214
+ return { exists: false, regularFile: false };
215
+ }
216
+ throw error;
217
+ }
218
+ }
219
+ async function pathExists(filePath) {
220
+ try {
221
+ await lstat(filePath);
222
+ return true;
223
+ }
224
+ catch (error) {
225
+ if (isNodeError(error) && (error.code === "ENOENT" || error.code === "ENOTDIR")) {
226
+ return false;
227
+ }
228
+ throw error;
229
+ }
230
+ }
231
+ async function assertDirectoryIfExists(filePath, label) {
232
+ if (!(await pathExists(filePath))) {
233
+ return;
234
+ }
235
+ const info = await lstat(filePath);
236
+ if (info.isSymbolicLink()) {
237
+ throw new Error(`${label} is a symlink; refusing to write policy pack`);
238
+ }
239
+ if (!info.isDirectory()) {
240
+ throw new Error(`${label} exists but is not a directory; refusing to write policy pack`);
241
+ }
242
+ await assertWritableExistingDirectory(filePath, label);
243
+ }
244
+ async function assertWritableExistingDirectory(filePath, label) {
245
+ const probe = path.join(filePath, `.codexa-policy-write-probe-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}.tmp`);
246
+ try {
247
+ await writeFile(probe, "", { flag: "wx" });
248
+ }
249
+ catch (error) {
250
+ throw new Error(`${label} is not writable; refusing to write policy pack: ${errorMessage(error)}`);
251
+ }
252
+ finally {
253
+ await rm(probe, { force: true });
254
+ }
255
+ }
256
+ async function assertExistingDirectory(filePath) {
257
+ let info;
258
+ try {
259
+ info = await stat(filePath);
260
+ }
261
+ catch {
262
+ throw new Error(`Codexa policy pack requires an existing repository directory: ${filePath}`);
263
+ }
264
+ if (!info.isDirectory()) {
265
+ throw new Error(`Codexa policy pack requires a directory: ${filePath}`);
266
+ }
267
+ }
268
+ function errorMessage(error) {
269
+ return error instanceof Error ? error.message : String(error);
270
+ }
271
+ function isNodeError(error) {
272
+ return error instanceof Error && "code" in error;
273
+ }
274
+ //# sourceMappingURL=policy-pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-pack.js","sourceRoot":"","sources":["../src/policy-pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { type PolicyPackSummary } from "./policy-pack.js";
2
+ import type { ChangeType, QueryOptions, QueryResult, TestRecommendation, VerificationCommandEnvelope, VerificationCommandReport, VerificationCommandPlanEntry, VerificationCoverage, VerificationLedgerEntry, VerificationProvenance, VerificationWaiver } from "./types.js";
3
+ export interface ProveOptions extends QueryOptions {
4
+ task?: string;
5
+ diff?: boolean;
6
+ changeType?: ChangeType;
7
+ files?: string[];
8
+ tokenBudget?: number;
9
+ taskId?: string;
10
+ ranTests?: string[];
11
+ ranCommands?: string[];
12
+ ranCommandReports?: VerificationCommandReport[];
13
+ waivedChecks?: string[];
14
+ waivers?: VerificationWaiver[];
15
+ }
16
+ export interface ProveReportedVerification {
17
+ hasEvidence: boolean;
18
+ ranTests: string[];
19
+ ranCommands: string[];
20
+ ranCommandReports: VerificationCommandReport[];
21
+ waivedChecks: string[];
22
+ waivers: VerificationWaiver[];
23
+ coverage: VerificationCoverage[];
24
+ commandEnvelopes: VerificationCommandEnvelope[];
25
+ commandPlan: VerificationCommandPlanEntry[];
26
+ ledger: VerificationLedgerEntry[];
27
+ waivedVerification: VerificationLedgerEntry[];
28
+ testsNotRun: TestRecommendation[];
29
+ verificationProvenance: VerificationProvenance;
30
+ }
31
+ export interface ProveData {
32
+ mode: "proof_card";
33
+ actionability: string;
34
+ task: string;
35
+ repoRoot: string;
36
+ verificationProvenance: VerificationProvenance;
37
+ freshness: {
38
+ stale: boolean;
39
+ reason: string;
40
+ indexedAt: string;
41
+ headCommit: string | null;
42
+ dirtyFileCount: number;
43
+ parserErrorCount: number;
44
+ };
45
+ worktree: {
46
+ knownClean?: boolean;
47
+ degraded?: boolean;
48
+ dirtyFileCount?: number;
49
+ changedFiles: string[];
50
+ degradedReasons: string[];
51
+ };
52
+ readFirst: Array<{
53
+ path: string;
54
+ riskScore?: number;
55
+ rank?: number;
56
+ }>;
57
+ snapshot: {
58
+ status: "loaded" | "missing" | "blocked";
59
+ taskId?: string;
60
+ origin?: string;
61
+ createdAt?: string;
62
+ plannedEditTargets: string[];
63
+ plannedTests: string[];
64
+ reason?: string;
65
+ };
66
+ verification: {
67
+ recommendedCommands: string[];
68
+ commandPlan: VerificationCommandPlanEntry[];
69
+ ledgerPreview: VerificationLedgerEntry[];
70
+ tests: TestRecommendation[];
71
+ reported: ProveReportedVerification;
72
+ };
73
+ policies: PolicyPackSummary;
74
+ gaps: string[];
75
+ trustPosture: string[];
76
+ nextCommands: string[];
77
+ }
78
+ export declare function proveQuery(repoRoot: string, options?: ProveOptions): Promise<QueryResult>;