frontend-harness 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.
Files changed (77) hide show
  1. package/AGENTS.md +48 -0
  2. package/CLAUDE.md +48 -0
  3. package/README.md +262 -0
  4. package/dist/cli/index.d.ts +2 -0
  5. package/dist/cli/index.js +380 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/runtime/builtin-skills.d.ts +6 -0
  8. package/dist/runtime/builtin-skills.js +269 -0
  9. package/dist/runtime/builtin-skills.js.map +1 -0
  10. package/dist/runtime/clean.d.ts +11 -0
  11. package/dist/runtime/clean.js +85 -0
  12. package/dist/runtime/clean.js.map +1 -0
  13. package/dist/runtime/command-taxonomy.d.ts +12 -0
  14. package/dist/runtime/command-taxonomy.js +72 -0
  15. package/dist/runtime/command-taxonomy.js.map +1 -0
  16. package/dist/runtime/context.d.ts +71 -0
  17. package/dist/runtime/context.js +153 -0
  18. package/dist/runtime/context.js.map +1 -0
  19. package/dist/runtime/graph.d.ts +12 -0
  20. package/dist/runtime/graph.js +211 -0
  21. package/dist/runtime/graph.js.map +1 -0
  22. package/dist/runtime/knowledge.d.ts +48 -0
  23. package/dist/runtime/knowledge.js +383 -0
  24. package/dist/runtime/knowledge.js.map +1 -0
  25. package/dist/runtime/plan.d.ts +18 -0
  26. package/dist/runtime/plan.js +571 -0
  27. package/dist/runtime/plan.js.map +1 -0
  28. package/dist/runtime/policy-provenance.d.ts +17 -0
  29. package/dist/runtime/policy-provenance.js +195 -0
  30. package/dist/runtime/policy-provenance.js.map +1 -0
  31. package/dist/runtime/project-discovery.d.ts +17 -0
  32. package/dist/runtime/project-discovery.js +166 -0
  33. package/dist/runtime/project-discovery.js.map +1 -0
  34. package/dist/runtime/project-paths.d.ts +6 -0
  35. package/dist/runtime/project-paths.js +47 -0
  36. package/dist/runtime/project-paths.js.map +1 -0
  37. package/dist/runtime/protocol-init.d.ts +50 -0
  38. package/dist/runtime/protocol-init.js +256 -0
  39. package/dist/runtime/protocol-init.js.map +1 -0
  40. package/dist/runtime/repair-decision.d.ts +3 -0
  41. package/dist/runtime/repair-decision.js +195 -0
  42. package/dist/runtime/repair-decision.js.map +1 -0
  43. package/dist/runtime/repair-packet.d.ts +7 -0
  44. package/dist/runtime/repair-packet.js +159 -0
  45. package/dist/runtime/repair-packet.js.map +1 -0
  46. package/dist/runtime/skills.d.ts +19 -0
  47. package/dist/runtime/skills.js +230 -0
  48. package/dist/runtime/skills.js.map +1 -0
  49. package/dist/runtime/state-explain.d.ts +2 -0
  50. package/dist/runtime/state-explain.js +106 -0
  51. package/dist/runtime/state-explain.js.map +1 -0
  52. package/dist/runtime/state.d.ts +10 -0
  53. package/dist/runtime/state.js +237 -0
  54. package/dist/runtime/state.js.map +1 -0
  55. package/dist/runtime/units.d.ts +10 -0
  56. package/dist/runtime/units.js +181 -0
  57. package/dist/runtime/units.js.map +1 -0
  58. package/dist/runtime/verification-commands.d.ts +11 -0
  59. package/dist/runtime/verification-commands.js +89 -0
  60. package/dist/runtime/verification-commands.js.map +1 -0
  61. package/dist/runtime/verify.d.ts +7 -0
  62. package/dist/runtime/verify.js +192 -0
  63. package/dist/runtime/verify.js.map +1 -0
  64. package/dist/schemas/types.d.ts +244 -0
  65. package/dist/schemas/types.js +2 -0
  66. package/dist/schemas/types.js.map +1 -0
  67. package/dist/schemas/validation.d.ts +2 -0
  68. package/dist/schemas/validation.js +21 -0
  69. package/dist/schemas/validation.js.map +1 -0
  70. package/dist/storage/json.d.ts +5 -0
  71. package/dist/storage/json.js +24 -0
  72. package/dist/storage/json.js.map +1 -0
  73. package/dist/storage/paths.d.ts +3 -0
  74. package/dist/storage/paths.js +9 -0
  75. package/dist/storage/paths.js.map +1 -0
  76. package/docs/DIRECTION.md +67 -0
  77. package/package.json +35 -0
@@ -0,0 +1,383 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { harnessPath, relativeHarnessPath } from "../storage/paths.js";
4
+ import { writeText } from "../storage/json.js";
5
+ const knowledgeTypes = new Set([
6
+ "prd_semantics",
7
+ "project_convention",
8
+ "decision_record",
9
+ "pitfall",
10
+ "glossary"
11
+ ]);
12
+ const knowledgeStatuses = new Set(["active", "deprecated"]);
13
+ const knowledgeStabilities = new Set(["stable", "evolving"]);
14
+ export function promoteKnowledge(projectRoot, input) {
15
+ const title = input.title?.trim();
16
+ const body = input.body?.trim();
17
+ if (!title) {
18
+ throw new Error("knowledge promote requires --title");
19
+ }
20
+ if (!body) {
21
+ throw new Error("knowledge promote requires --body");
22
+ }
23
+ const type = parseKnowledgeType(input.type ?? "prd_semantics", "knowledge promote --type");
24
+ const status = parseKnowledgeStatus(input.status ?? "active", "knowledge promote --status");
25
+ const stability = parseKnowledgeStability(input.stability ?? "stable", "knowledge promote --stability");
26
+ const createdAt = new Date().toISOString();
27
+ const id = slugify(title) || `knowledge-${formatKnowledgeStamp(createdAt).toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "")}`;
28
+ const fileName = `${formatKnowledgeStamp(createdAt)}-${id}.md`;
29
+ const relativePath = relativeHarnessPath("knowledge", fileName);
30
+ const content = renderKnowledge({
31
+ id,
32
+ title,
33
+ body,
34
+ type,
35
+ status,
36
+ stability,
37
+ createdAt,
38
+ scope: splitList(input.scope),
39
+ sourcePaths: splitList(input.source)
40
+ });
41
+ writeText(path.join(projectRoot, relativePath), content);
42
+ return {
43
+ path: relativePath,
44
+ id,
45
+ title,
46
+ type,
47
+ status,
48
+ stability,
49
+ createdAt
50
+ };
51
+ }
52
+ export function discoverKnowledgeCards(projectRoot) {
53
+ const knowledgeRoot = harnessPath(projectRoot, "knowledge");
54
+ if (!isReadableDirectory(knowledgeRoot)) {
55
+ return [];
56
+ }
57
+ return listMarkdownFiles(knowledgeRoot)
58
+ .flatMap((fullPath) => {
59
+ const card = describeKnowledgeCard(projectRoot, fullPath);
60
+ return card ? [card] : [];
61
+ })
62
+ .sort((left, right) => left.path.localeCompare(right.path));
63
+ }
64
+ export function checkKnowledge(projectRoot) {
65
+ const knowledgeRoot = harnessPath(projectRoot, "knowledge");
66
+ const relativeRoot = path.relative(projectRoot, knowledgeRoot).split(path.sep).join(path.posix.sep);
67
+ if (!fs.existsSync(knowledgeRoot)) {
68
+ return {
69
+ status: "not_configured",
70
+ knowledgeRoot: relativeRoot,
71
+ cardCount: 0,
72
+ activeCardCount: 0,
73
+ deprecatedCardCount: 0,
74
+ errors: [],
75
+ warnings: ["Create .frontend-harness/knowledge before checking project knowledge."]
76
+ };
77
+ }
78
+ const errors = [];
79
+ const warnings = [];
80
+ if (!isReadableDirectory(knowledgeRoot)) {
81
+ errors.push(".frontend-harness/knowledge must be a readable directory.");
82
+ }
83
+ const files = isReadableDirectory(knowledgeRoot) ? listMarkdownFiles(knowledgeRoot, errors) : [];
84
+ const ids = new Set();
85
+ const duplicateIds = new Set();
86
+ let activeCardCount = 0;
87
+ let deprecatedCardCount = 0;
88
+ for (const fullPath of files) {
89
+ const relativePath = path.relative(projectRoot, fullPath).split(path.sep).join(path.posix.sep);
90
+ const content = safeRead(fullPath);
91
+ if (content === null) {
92
+ errors.push(`${relativePath} cannot be read.`);
93
+ continue;
94
+ }
95
+ const parsed = parseKnowledgeFrontmatter(content);
96
+ if (!parsed.hasFrontmatter) {
97
+ errors.push(`${relativePath} must include YAML frontmatter.`);
98
+ continue;
99
+ }
100
+ const cardErrors = validateKnowledgeMetadata(relativePath, parsed.metadata);
101
+ errors.push(...cardErrors);
102
+ const id = parsed.metadata.id;
103
+ if (id) {
104
+ if (ids.has(id)) {
105
+ duplicateIds.add(id);
106
+ }
107
+ ids.add(id);
108
+ }
109
+ if (parsed.metadata.status === "active") {
110
+ activeCardCount += 1;
111
+ }
112
+ if (parsed.metadata.status === "deprecated") {
113
+ deprecatedCardCount += 1;
114
+ if (!parsed.metadata.related.length) {
115
+ warnings.push(`${relativePath} is deprecated without a related replacement or explanation.`);
116
+ }
117
+ }
118
+ }
119
+ for (const duplicateId of duplicateIds) {
120
+ errors.push(`Duplicate knowledge id: ${duplicateId}.`);
121
+ }
122
+ return {
123
+ status: errors.length ? "failed" : "passed",
124
+ knowledgeRoot: relativeRoot,
125
+ cardCount: files.length,
126
+ activeCardCount,
127
+ deprecatedCardCount,
128
+ errors,
129
+ warnings
130
+ };
131
+ }
132
+ function describeKnowledgeCard(projectRoot, fullPath) {
133
+ const relativePath = path.relative(projectRoot, fullPath).split(path.sep).join(path.posix.sep);
134
+ const content = safeRead(fullPath);
135
+ if (content === null) {
136
+ return null;
137
+ }
138
+ const parsed = parseKnowledgeFrontmatter(content);
139
+ if (!parsed.hasFrontmatter || validateKnowledgeMetadata(relativePath, parsed.metadata).length) {
140
+ return null;
141
+ }
142
+ const metadata = parsed.metadata;
143
+ const title = metadata.title;
144
+ const summary = metadata.summary;
145
+ const type = metadata.type;
146
+ const status = metadata.status;
147
+ const stability = metadata.stability;
148
+ const scope = metadata.scope;
149
+ const tags = metadata.tags;
150
+ const sourcePaths = metadata.sourcePaths;
151
+ const related = metadata.related;
152
+ const updatedAt = metadata.updatedAt;
153
+ return {
154
+ id: metadata.id,
155
+ path: relativePath,
156
+ title,
157
+ summary,
158
+ type,
159
+ status,
160
+ stability,
161
+ scope,
162
+ tags,
163
+ sourcePaths,
164
+ related,
165
+ updatedAt,
166
+ searchable: normalize([
167
+ relativePath,
168
+ metadata.id,
169
+ title,
170
+ summary,
171
+ type,
172
+ stability,
173
+ ...scope,
174
+ ...tags,
175
+ ...sourcePaths,
176
+ ...related
177
+ ].join(" "))
178
+ };
179
+ }
180
+ function parseKnowledgeFrontmatter(content) {
181
+ const metadata = {
182
+ scope: [],
183
+ tags: [],
184
+ sourcePaths: [],
185
+ related: []
186
+ };
187
+ if (!content.startsWith("---\n")) {
188
+ return { hasFrontmatter: false, metadata };
189
+ }
190
+ const endIndex = content.indexOf("\n---", 4);
191
+ if (endIndex < 0) {
192
+ return { hasFrontmatter: false, metadata };
193
+ }
194
+ const listKeys = new Set(["scope", "tags", "source_paths", "related"]);
195
+ let currentList = null;
196
+ for (const line of content.slice(4, endIndex).split("\n")) {
197
+ const trimmed = line.trim();
198
+ if (!trimmed || trimmed.startsWith("#")) {
199
+ continue;
200
+ }
201
+ const listItem = trimmed.match(/^-\s+(.+)$/);
202
+ if (listItem && currentList) {
203
+ const value = listItem[1];
204
+ if (value) {
205
+ metadata[currentList].push(unquoteScalar(value));
206
+ }
207
+ continue;
208
+ }
209
+ const pair = trimmed.match(/^([A-Za-z][A-Za-z0-9_-]*):\s*(.*)$/);
210
+ if (!pair) {
211
+ currentList = null;
212
+ continue;
213
+ }
214
+ const key = pair[1] ?? "";
215
+ const value = (pair[2] ?? "").trim();
216
+ if (key === "id" || key === "title" || key === "summary" || key === "type" || key === "status" || key === "stability") {
217
+ metadata[key] = unquoteScalar(value);
218
+ currentList = null;
219
+ continue;
220
+ }
221
+ if (key === "updated_at") {
222
+ metadata.updatedAt = unquoteScalar(value);
223
+ currentList = null;
224
+ continue;
225
+ }
226
+ if (listKeys.has(key)) {
227
+ const mappedKey = key === "source_paths" ? "sourcePaths" : key;
228
+ metadata[mappedKey] = parseListValue(value);
229
+ currentList = value ? null : mappedKey;
230
+ continue;
231
+ }
232
+ currentList = null;
233
+ }
234
+ return { hasFrontmatter: true, metadata };
235
+ }
236
+ function validateKnowledgeMetadata(relativePath, metadata) {
237
+ const errors = [];
238
+ if (!metadata.id || !/^[a-z0-9][a-z0-9-]{2,80}$/.test(metadata.id)) {
239
+ errors.push(`${relativePath} must include a kebab-case id.`);
240
+ }
241
+ if (!metadata.title) {
242
+ errors.push(`${relativePath} must include a non-empty title.`);
243
+ }
244
+ if (!metadata.summary) {
245
+ errors.push(`${relativePath} must include a non-empty summary.`);
246
+ }
247
+ if (!metadata.type || !knowledgeTypes.has(metadata.type)) {
248
+ errors.push(`${relativePath} type must be one of: ${[...knowledgeTypes].join(", ")}.`);
249
+ }
250
+ if (!metadata.status || !knowledgeStatuses.has(metadata.status)) {
251
+ errors.push(`${relativePath} status must be one of: ${[...knowledgeStatuses].join(", ")}.`);
252
+ }
253
+ if (!metadata.stability || !knowledgeStabilities.has(metadata.stability)) {
254
+ errors.push(`${relativePath} stability must be one of: ${[...knowledgeStabilities].join(", ")}.`);
255
+ }
256
+ if (!metadata.updatedAt || !/^\d{4}-\d{2}-\d{2}([T ][0-9:.+-Z]+)?$/.test(metadata.updatedAt)) {
257
+ errors.push(`${relativePath} must include updated_at as YYYY-MM-DD or ISO timestamp.`);
258
+ }
259
+ return errors;
260
+ }
261
+ function renderKnowledge(input) {
262
+ const summary = firstBodyLine(input.body) ?? input.title;
263
+ return `---
264
+ id: ${input.id}
265
+ type: ${input.type}
266
+ title: ${input.title}
267
+ summary: ${summary}
268
+ scope:
269
+ ${renderList(input.scope)}
270
+ status: ${input.status}
271
+ stability: ${input.stability}
272
+ updated_at: ${input.createdAt}
273
+ source_paths:
274
+ ${renderList(input.sourcePaths)}
275
+ related: []
276
+ ---
277
+
278
+ # ${input.title}
279
+
280
+ ${input.body}
281
+ `;
282
+ }
283
+ function renderList(items) {
284
+ return items.length ? items.map((item) => ` - ${item}`).join("\n") : " []";
285
+ }
286
+ function firstBodyLine(body) {
287
+ return body
288
+ .split("\n")
289
+ .map((line) => line.trim())
290
+ .find((line) => line && !line.startsWith("#") && !line.startsWith("- ")) ?? null;
291
+ }
292
+ function parseKnowledgeType(value, label) {
293
+ if (knowledgeTypes.has(value)) {
294
+ return value;
295
+ }
296
+ throw new Error(`${label} must be one of: ${[...knowledgeTypes].join(", ")}`);
297
+ }
298
+ function parseKnowledgeStatus(value, label) {
299
+ if (knowledgeStatuses.has(value)) {
300
+ return value;
301
+ }
302
+ throw new Error(`${label} must be one of: ${[...knowledgeStatuses].join(", ")}`);
303
+ }
304
+ function parseKnowledgeStability(value, label) {
305
+ if (knowledgeStabilities.has(value)) {
306
+ return value;
307
+ }
308
+ throw new Error(`${label} must be one of: ${[...knowledgeStabilities].join(", ")}`);
309
+ }
310
+ function splitList(value) {
311
+ return value
312
+ ? value.split(",").map((item) => item.trim()).filter(Boolean)
313
+ : [];
314
+ }
315
+ function parseListValue(value) {
316
+ if (!value || value === "[]") {
317
+ return [];
318
+ }
319
+ const inline = value.match(/^\[(.*)\]$/);
320
+ if (!inline) {
321
+ return [unquoteScalar(value)];
322
+ }
323
+ return (inline[1] ?? "")
324
+ .split(",")
325
+ .map((item) => unquoteScalar(item.trim()))
326
+ .filter(Boolean);
327
+ }
328
+ function unquoteScalar(value) {
329
+ return value.replace(/^["']|["']$/g, "").trim();
330
+ }
331
+ function slugify(value) {
332
+ return value
333
+ .toLowerCase()
334
+ .replace(/[^a-z0-9]+/g, "-")
335
+ .replace(/^-+|-+$/g, "")
336
+ .slice(0, 80);
337
+ }
338
+ function formatKnowledgeStamp(createdAt) {
339
+ return createdAt
340
+ .replace(/[-:]/g, "")
341
+ .replace(/\.\d{3}Z$/, "Z");
342
+ }
343
+ function safeRead(filePath) {
344
+ try {
345
+ return fs.readFileSync(filePath, "utf8");
346
+ }
347
+ catch {
348
+ return null;
349
+ }
350
+ }
351
+ function isReadableDirectory(directory) {
352
+ try {
353
+ return fs.statSync(directory).isDirectory();
354
+ }
355
+ catch {
356
+ return false;
357
+ }
358
+ }
359
+ function listMarkdownFiles(directory, errors) {
360
+ try {
361
+ return fs.readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {
362
+ const fullPath = path.join(directory, entry.name);
363
+ if (entry.isDirectory()) {
364
+ if (entry.name.startsWith(".")) {
365
+ return [];
366
+ }
367
+ return listMarkdownFiles(fullPath, errors);
368
+ }
369
+ return entry.name.endsWith(".md") ? [fullPath] : [];
370
+ });
371
+ }
372
+ catch (error) {
373
+ if (errors) {
374
+ const message = error instanceof Error ? error.message : String(error);
375
+ errors.push(`Cannot read .frontend-harness/knowledge: ${message}`);
376
+ }
377
+ return [];
378
+ }
379
+ }
380
+ function normalize(value) {
381
+ return value.toLowerCase().replace(/[^\p{L}\p{N}-]+/gu, " ").trim();
382
+ }
383
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/runtime/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { AgentDecisionCheckResult, ComponentItem, ExecutionGuidanceStep, ExecutionUnit, TaskUnderstanding } from "../schemas/types.js";
2
+ export interface PlanInput {
3
+ taskText: string;
4
+ prd?: string;
5
+ ui?: string;
6
+ agentDecision?: string;
7
+ }
8
+ export interface PlanOutput {
9
+ task: TaskUnderstanding;
10
+ components: ComponentItem[];
11
+ units: ExecutionUnit[];
12
+ executionGuidance: ExecutionGuidanceStep[];
13
+ componentGraphPath: string;
14
+ guidancePath: string;
15
+ statePath: string;
16
+ }
17
+ export declare function createPlan(projectRoot: string, input: PlanInput): PlanOutput;
18
+ export declare function checkAgentPlanningDecision(projectRoot: string, file: string | undefined): AgentDecisionCheckResult;