codex-harness-kit 0.1.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/LICENSE +201 -0
- package/README.md +279 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +84 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/check-state.d.ts +4 -0
- package/dist/src/commands/check-state.js +15 -0
- package/dist/src/commands/check-state.js.map +1 -0
- package/dist/src/commands/init.d.ts +7 -0
- package/dist/src/commands/init.js +138 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/validate-harness.d.ts +4 -0
- package/dist/src/commands/validate-harness.js +9 -0
- package/dist/src/commands/validate-harness.js.map +1 -0
- package/dist/src/harness.d.ts +13 -0
- package/dist/src/harness.js +572 -0
- package/dist/src/harness.js.map +1 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/templates.d.ts +16 -0
- package/dist/src/templates.js +208 -0
- package/dist/src/templates.js.map +1 -0
- package/dist/src/types.d.ts +54 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createDefaultConfig, createDefaultState, renderAgentsActivationBridge, renderAgentsHarnessSupplement, renderAgentsTemplate, renderContractsReadmeTemplate, renderDecisionsTemplate, renderExampleContractTemplate, renderJsonFile, renderProjectMemoryTemplate } from "../templates.js";
|
|
4
|
+
import { ensureParentDirectory, hasMarkedBlock, pathExists, relativeToRepo, upsertMarkedBlock } from "../harness.js";
|
|
5
|
+
import { HARNESS_BRIDGE_MARKER_END, HARNESS_BRIDGE_MARKER_START, HARNESS_MARKER_END, HARNESS_MARKER_START } from "../templates.js";
|
|
6
|
+
export async function initializeHarness(options = {}) {
|
|
7
|
+
const repoRoot = path.resolve(options.targetPath ?? process.cwd());
|
|
8
|
+
await mkdir(repoRoot, { recursive: true });
|
|
9
|
+
const actions = [];
|
|
10
|
+
const notes = [];
|
|
11
|
+
const force = options.force ?? false;
|
|
12
|
+
const templates = new Map([
|
|
13
|
+
["docs/harness-config.json", renderJsonFile(createDefaultConfig())],
|
|
14
|
+
["docs/harness-state.json", renderJsonFile(createDefaultState())],
|
|
15
|
+
["docs/project-memory.md", renderProjectMemoryTemplate()],
|
|
16
|
+
["docs/decisions.md", renderDecisionsTemplate()],
|
|
17
|
+
["docs/contracts/README.md", renderContractsReadmeTemplate()],
|
|
18
|
+
["docs/contracts/example-contract.md", renderExampleContractTemplate()]
|
|
19
|
+
]);
|
|
20
|
+
const agentsResult = await writeAgentsFiles(repoRoot);
|
|
21
|
+
actions.push(...agentsResult.actions);
|
|
22
|
+
notes.push(...agentsResult.notes);
|
|
23
|
+
for (const [relativePath, content] of templates) {
|
|
24
|
+
const absolutePath = path.join(repoRoot, relativePath);
|
|
25
|
+
actions.push(await writeTextFileSafely(repoRoot, absolutePath, content, force));
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
repoRoot,
|
|
29
|
+
actions,
|
|
30
|
+
notes
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async function writeAgentsFiles(repoRoot) {
|
|
34
|
+
const agentsPath = path.join(repoRoot, "AGENTS.md");
|
|
35
|
+
const harnessAgentsPath = path.join(repoRoot, "AGENTS.harness.md");
|
|
36
|
+
const fullAgentsContent = renderAgentsTemplate();
|
|
37
|
+
const bridgeContent = renderAgentsActivationBridge();
|
|
38
|
+
const supplementContent = renderAgentsHarnessSupplement();
|
|
39
|
+
const actions = [];
|
|
40
|
+
if (!(await pathExists(agentsPath))) {
|
|
41
|
+
actions.push(await writeManagedFile(repoRoot, agentsPath, fullAgentsContent));
|
|
42
|
+
return { actions, notes: [] };
|
|
43
|
+
}
|
|
44
|
+
const existingAgents = await readFile(agentsPath, "utf8");
|
|
45
|
+
if (hasMarkedBlock(existingAgents, HARNESS_MARKER_START, HARNESS_MARKER_END)) {
|
|
46
|
+
const nextAgentsContent = upsertMarkedBlock(existingAgents, fullAgentsContent, HARNESS_MARKER_START, HARNESS_MARKER_END);
|
|
47
|
+
actions.push(await writeManagedFile(repoRoot, agentsPath, nextAgentsContent));
|
|
48
|
+
return { actions, notes: [] };
|
|
49
|
+
}
|
|
50
|
+
const nextAgentsContent = upsertMarkedBlock(existingAgents, bridgeContent, HARNESS_BRIDGE_MARKER_START, HARNESS_BRIDGE_MARKER_END);
|
|
51
|
+
actions.push(await writeManagedFile(repoRoot, agentsPath, nextAgentsContent));
|
|
52
|
+
actions.push(await writeManagedMarkedFile(repoRoot, harnessAgentsPath, supplementContent));
|
|
53
|
+
const notes = [
|
|
54
|
+
"Existing AGENTS.md was preserved and a codex-harness-kit activation bridge was added. Detailed harness rules live in AGENTS.harness.md."
|
|
55
|
+
];
|
|
56
|
+
return { actions, notes };
|
|
57
|
+
}
|
|
58
|
+
async function writeTextFileSafely(repoRoot, absolutePath, content, force) {
|
|
59
|
+
const relativePath = relativeToRepo(repoRoot, absolutePath);
|
|
60
|
+
if (!(await pathExists(absolutePath))) {
|
|
61
|
+
await ensureParentDirectory(absolutePath);
|
|
62
|
+
await writeFile(absolutePath, content, "utf8");
|
|
63
|
+
return {
|
|
64
|
+
file: relativePath,
|
|
65
|
+
status: "created"
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const existing = await readFile(absolutePath, "utf8");
|
|
69
|
+
if (existing === content) {
|
|
70
|
+
return {
|
|
71
|
+
file: relativePath,
|
|
72
|
+
status: "unchanged"
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (!force) {
|
|
76
|
+
return {
|
|
77
|
+
file: relativePath,
|
|
78
|
+
status: "skipped",
|
|
79
|
+
reason: "File already exists. Re-run with --force to overwrite the harness-managed version."
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
await ensureParentDirectory(absolutePath);
|
|
83
|
+
await writeFile(absolutePath, content, "utf8");
|
|
84
|
+
return {
|
|
85
|
+
file: relativePath,
|
|
86
|
+
status: "updated",
|
|
87
|
+
reason: "Overwritten because --force was provided."
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
async function writeManagedMarkedFile(repoRoot, absolutePath, blockContent) {
|
|
91
|
+
if (!(await pathExists(absolutePath))) {
|
|
92
|
+
return writeManagedFile(repoRoot, absolutePath, blockContent);
|
|
93
|
+
}
|
|
94
|
+
const existingContent = await readFile(absolutePath, "utf8");
|
|
95
|
+
const nextContent = upsertMarkedBlock(existingContent, blockContent, HARNESS_MARKER_START, HARNESS_MARKER_END);
|
|
96
|
+
return writeManagedFile(repoRoot, absolutePath, nextContent);
|
|
97
|
+
}
|
|
98
|
+
async function writeManagedFile(repoRoot, absolutePath, content) {
|
|
99
|
+
const relativePath = relativeToRepo(repoRoot, absolutePath);
|
|
100
|
+
if (!(await pathExists(absolutePath))) {
|
|
101
|
+
await ensureParentDirectory(absolutePath);
|
|
102
|
+
await writeFile(absolutePath, content, "utf8");
|
|
103
|
+
return {
|
|
104
|
+
file: relativePath,
|
|
105
|
+
status: "created"
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const existing = await readFile(absolutePath, "utf8");
|
|
109
|
+
if (existing === content) {
|
|
110
|
+
return {
|
|
111
|
+
file: relativePath,
|
|
112
|
+
status: "unchanged"
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
await ensureParentDirectory(absolutePath);
|
|
116
|
+
await writeFile(absolutePath, content, "utf8");
|
|
117
|
+
return {
|
|
118
|
+
file: relativePath,
|
|
119
|
+
status: "updated"
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export function renderInitResult(result) {
|
|
123
|
+
const lines = [];
|
|
124
|
+
lines.push(`Initialized codex-harness-kit in ${result.repoRoot}`);
|
|
125
|
+
for (const action of result.actions) {
|
|
126
|
+
const suffix = action.reason ? ` (${action.reason})` : "";
|
|
127
|
+
lines.push(`- ${action.status}: ${action.file}${suffix}`);
|
|
128
|
+
}
|
|
129
|
+
if (result.notes.length > 0) {
|
|
130
|
+
lines.push("");
|
|
131
|
+
lines.push("Notes:");
|
|
132
|
+
for (const note of result.notes) {
|
|
133
|
+
lines.push(`- ${note}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return lines.join("\n");
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { renderValidationReport, validateHarness } from "../harness.js";
|
|
2
|
+
export async function runValidateHarness(repoRoot) {
|
|
3
|
+
const report = await validateHarness(repoRoot);
|
|
4
|
+
return {
|
|
5
|
+
ok: report.ok,
|
|
6
|
+
output: renderValidationReport(report)
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=validate-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-harness.js","sourceRoot":"","sources":["../../../src/commands/validate-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,MAAM,EAAE,sBAAsB,CAAC,MAAM,CAAC;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DEFAULT_CONFIG_PATH, HARNESS_BRIDGE_MARKER_END, HARNESS_BRIDGE_MARKER_START, HARNESS_MARKER_END, HARNESS_MARKER_START } from "./templates.js";
|
|
2
|
+
import type { ValidationReport } from "./types.js";
|
|
3
|
+
export { DEFAULT_CONFIG_PATH, HARNESS_BRIDGE_MARKER_END, HARNESS_BRIDGE_MARKER_START, HARNESS_MARKER_END, HARNESS_MARKER_START };
|
|
4
|
+
export declare function pathExists(targetPath: string): Promise<boolean>;
|
|
5
|
+
export declare function ensureParentDirectory(filePath: string): Promise<void>;
|
|
6
|
+
export declare function relativeToRepo(repoRoot: string, targetPath: string): string;
|
|
7
|
+
export declare function resolveFromRepo(repoRoot: string, configuredPath: string): string;
|
|
8
|
+
export declare function hasMarkedBlock(content: string, startMarker: string, endMarker: string): boolean;
|
|
9
|
+
export declare function getMarkedBlockContent(content: string, startMarker: string, endMarker: string): string | null;
|
|
10
|
+
export declare function upsertMarkedBlock(existingContent: string, blockContent: string, startMarker: string, endMarker: string): string;
|
|
11
|
+
export declare function validateHarness(repoRootInput: string): Promise<ValidationReport>;
|
|
12
|
+
export declare function renderValidationReport(report: ValidationReport): string;
|
|
13
|
+
export declare function buildStateSummary(repoRootInput: string): Promise<string>;
|