@interf/compiler 0.1.8

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 (145) hide show
  1. package/LICENSE +183 -0
  2. package/README.md +1008 -0
  3. package/TRADEMARKS.md +19 -0
  4. package/dist/bin.d.ts +3 -0
  5. package/dist/bin.d.ts.map +1 -0
  6. package/dist/bin.js +30 -0
  7. package/dist/bin.js.map +1 -0
  8. package/dist/commands/benchmark.d.ts +3 -0
  9. package/dist/commands/benchmark.d.ts.map +1 -0
  10. package/dist/commands/benchmark.js +400 -0
  11. package/dist/commands/benchmark.js.map +1 -0
  12. package/dist/commands/compile.d.ts +3 -0
  13. package/dist/commands/compile.d.ts.map +1 -0
  14. package/dist/commands/compile.js +139 -0
  15. package/dist/commands/compile.js.map +1 -0
  16. package/dist/commands/create.d.ts +49 -0
  17. package/dist/commands/create.d.ts.map +1 -0
  18. package/dist/commands/create.js +813 -0
  19. package/dist/commands/create.js.map +1 -0
  20. package/dist/commands/default.d.ts +3 -0
  21. package/dist/commands/default.d.ts.map +1 -0
  22. package/dist/commands/default.js +52 -0
  23. package/dist/commands/default.js.map +1 -0
  24. package/dist/commands/doctor.d.ts +3 -0
  25. package/dist/commands/doctor.d.ts.map +1 -0
  26. package/dist/commands/doctor.js +146 -0
  27. package/dist/commands/doctor.js.map +1 -0
  28. package/dist/commands/init.d.ts +3 -0
  29. package/dist/commands/init.d.ts.map +1 -0
  30. package/dist/commands/init.js +235 -0
  31. package/dist/commands/init.js.map +1 -0
  32. package/dist/commands/list.d.ts +3 -0
  33. package/dist/commands/list.d.ts.map +1 -0
  34. package/dist/commands/list.js +32 -0
  35. package/dist/commands/list.js.map +1 -0
  36. package/dist/commands/reset.d.ts +3 -0
  37. package/dist/commands/reset.d.ts.map +1 -0
  38. package/dist/commands/reset.js +136 -0
  39. package/dist/commands/reset.js.map +1 -0
  40. package/dist/commands/status.d.ts +3 -0
  41. package/dist/commands/status.d.ts.map +1 -0
  42. package/dist/commands/status.js +67 -0
  43. package/dist/commands/status.js.map +1 -0
  44. package/dist/commands/verify.d.ts +3 -0
  45. package/dist/commands/verify.d.ts.map +1 -0
  46. package/dist/commands/verify.js +112 -0
  47. package/dist/commands/verify.js.map +1 -0
  48. package/dist/index.d.ts +30 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +18 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/lib/agents.d.ts +59 -0
  53. package/dist/lib/agents.d.ts.map +1 -0
  54. package/dist/lib/agents.js +760 -0
  55. package/dist/lib/agents.js.map +1 -0
  56. package/dist/lib/benchmark.d.ts +30 -0
  57. package/dist/lib/benchmark.d.ts.map +1 -0
  58. package/dist/lib/benchmark.js +325 -0
  59. package/dist/lib/benchmark.js.map +1 -0
  60. package/dist/lib/config.d.ts +6 -0
  61. package/dist/lib/config.d.ts.map +1 -0
  62. package/dist/lib/config.js +15 -0
  63. package/dist/lib/config.js.map +1 -0
  64. package/dist/lib/discovery.d.ts +8 -0
  65. package/dist/lib/discovery.d.ts.map +1 -0
  66. package/dist/lib/discovery.js +80 -0
  67. package/dist/lib/discovery.js.map +1 -0
  68. package/dist/lib/executors.d.ts +33 -0
  69. package/dist/lib/executors.d.ts.map +1 -0
  70. package/dist/lib/executors.js +44 -0
  71. package/dist/lib/executors.js.map +1 -0
  72. package/dist/lib/filesystem.d.ts +4 -0
  73. package/dist/lib/filesystem.d.ts.map +1 -0
  74. package/dist/lib/filesystem.js +61 -0
  75. package/dist/lib/filesystem.js.map +1 -0
  76. package/dist/lib/interf.d.ts +37 -0
  77. package/dist/lib/interf.d.ts.map +1 -0
  78. package/dist/lib/interf.js +1104 -0
  79. package/dist/lib/interf.js.map +1 -0
  80. package/dist/lib/local-workflows.d.ts +35 -0
  81. package/dist/lib/local-workflows.d.ts.map +1 -0
  82. package/dist/lib/local-workflows.js +149 -0
  83. package/dist/lib/local-workflows.js.map +1 -0
  84. package/dist/lib/parse.d.ts +9 -0
  85. package/dist/lib/parse.d.ts.map +1 -0
  86. package/dist/lib/parse.js +51 -0
  87. package/dist/lib/parse.js.map +1 -0
  88. package/dist/lib/registry.d.ts +28 -0
  89. package/dist/lib/registry.d.ts.map +1 -0
  90. package/dist/lib/registry.js +80 -0
  91. package/dist/lib/registry.js.map +1 -0
  92. package/dist/lib/runtime.d.ts +59 -0
  93. package/dist/lib/runtime.d.ts.map +1 -0
  94. package/dist/lib/runtime.js +615 -0
  95. package/dist/lib/runtime.js.map +1 -0
  96. package/dist/lib/schema.d.ts +705 -0
  97. package/dist/lib/schema.d.ts.map +1 -0
  98. package/dist/lib/schema.js +443 -0
  99. package/dist/lib/schema.js.map +1 -0
  100. package/dist/lib/state.d.ts +49 -0
  101. package/dist/lib/state.d.ts.map +1 -0
  102. package/dist/lib/state.js +633 -0
  103. package/dist/lib/state.js.map +1 -0
  104. package/dist/lib/summarize-plan.d.ts +16 -0
  105. package/dist/lib/summarize-plan.d.ts.map +1 -0
  106. package/dist/lib/summarize-plan.js +112 -0
  107. package/dist/lib/summarize-plan.js.map +1 -0
  108. package/dist/lib/user-config.d.ts +6 -0
  109. package/dist/lib/user-config.d.ts.map +1 -0
  110. package/dist/lib/user-config.js +16 -0
  111. package/dist/lib/user-config.js.map +1 -0
  112. package/dist/lib/validate.d.ts +149 -0
  113. package/dist/lib/validate.d.ts.map +1 -0
  114. package/dist/lib/validate.js +838 -0
  115. package/dist/lib/validate.js.map +1 -0
  116. package/dist/lib/workflow-definitions.d.ts +79 -0
  117. package/dist/lib/workflow-definitions.d.ts.map +1 -0
  118. package/dist/lib/workflow-definitions.js +565 -0
  119. package/dist/lib/workflow-definitions.js.map +1 -0
  120. package/dist/lib/workflows.d.ts +125 -0
  121. package/dist/lib/workflows.d.ts.map +1 -0
  122. package/dist/lib/workflows.js +1107 -0
  123. package/dist/lib/workflows.js.map +1 -0
  124. package/package.json +73 -0
  125. package/skills/benchmark/SKILL.md +129 -0
  126. package/skills/interface/analyze/SKILL.md +140 -0
  127. package/skills/interface/compile/SKILL.md +153 -0
  128. package/skills/interface/compile/references/output-format.md +48 -0
  129. package/skills/interface/create/SKILL.md +264 -0
  130. package/skills/interface/create/references/compile-plan-format.md +109 -0
  131. package/skills/interface/create/references/workflows.md +50 -0
  132. package/skills/interface/query/SKILL.md +34 -0
  133. package/skills/interface/retrieve/SKILL.md +166 -0
  134. package/skills/knowledge-base/compile/SKILL.md +220 -0
  135. package/skills/knowledge-base/compile/references/output-format.md +48 -0
  136. package/skills/knowledge-base/compile/references/stage-claims.md +60 -0
  137. package/skills/knowledge-base/compile/references/stage-entities.md +46 -0
  138. package/skills/knowledge-base/query/SKILL.md +33 -0
  139. package/skills/knowledge-base/summarize/SKILL.md +122 -0
  140. package/skills/workflow/create/SKILL.md +126 -0
  141. package/templates/interface/README.md +158 -0
  142. package/templates/interface/interfaces.md +99 -0
  143. package/templates/knowledge-base/README.md +138 -0
  144. package/templates/knowledge-base/interfignore +19 -0
  145. package/templates/knowledge-base/registry.md +118 -0
package/TRADEMARKS.md ADDED
@@ -0,0 +1,19 @@
1
+ # Trademarks
2
+
3
+ `Interf`, the Interf word mark, and related logos are trademarks of Interf, Inc.
4
+
5
+ This repository's code is available under the Apache 2.0 license in [LICENSE](./LICENSE). That license does not grant trademark rights.
6
+
7
+ You may:
8
+
9
+ - describe this project factually as a fork or derivative of Interf
10
+ - state that your project is based on or compatible with Interf
11
+ - reproduce the name where required by the Apache 2.0 license for attribution
12
+
13
+ You may not:
14
+
15
+ - present your fork, hosted service, or product as the official Interf product
16
+ - use the Interf name or logos in a way that implies endorsement by Interf, Inc.
17
+ - ship a confusingly similar product name, branding, or visual identity
18
+
19
+ If you need official brand usage permission, contact Interf, Inc.
package/dist/bin.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
package/dist/bin.js ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import yargs from "yargs";
3
+ import { hideBin } from "yargs/helpers";
4
+ import { initCommand } from "./commands/init.js";
5
+ import { createCommand } from "./commands/create.js";
6
+ import { compileCommand } from "./commands/compile.js";
7
+ import { benchmarkCommand } from "./commands/benchmark.js";
8
+ import { doctorCommand } from "./commands/doctor.js";
9
+ import { listCommand } from "./commands/list.js";
10
+ import { statusCommand } from "./commands/status.js";
11
+ import { resetCommand } from "./commands/reset.js";
12
+ import { defaultCommand } from "./commands/default.js";
13
+ import { verifyCommand } from "./commands/verify.js";
14
+ yargs(hideBin(process.argv))
15
+ .scriptName("interf")
16
+ .command(defaultCommand)
17
+ .command(initCommand)
18
+ .command(createCommand)
19
+ .command(compileCommand)
20
+ .command(benchmarkCommand)
21
+ .command(doctorCommand)
22
+ .command(listCommand)
23
+ .command(statusCommand)
24
+ .command(verifyCommand)
25
+ .command(resetCommand)
26
+ .strict()
27
+ .help()
28
+ .version()
29
+ .parse();
30
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB,UAAU,CAAC,QAAQ,CAAC;KACpB,OAAO,CAAC,cAAc,CAAC;KACvB,OAAO,CAAC,WAAW,CAAC;KACpB,OAAO,CAAC,aAAa,CAAC;KACtB,OAAO,CAAC,cAAc,CAAC;KACvB,OAAO,CAAC,gBAAgB,CAAC;KACzB,OAAO,CAAC,aAAa,CAAC;KACtB,OAAO,CAAC,WAAW,CAAC;KACpB,OAAO,CAAC,aAAa,CAAC;KACtB,OAAO,CAAC,aAAa,CAAC;KACtB,OAAO,CAAC,YAAY,CAAC;KACrB,MAAM,EAAE;KACR,IAAI,EAAE;KACN,OAAO,EAAE;KACT,KAAK,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CommandModule } from "yargs";
2
+ export declare const benchmarkCommand: CommandModule;
3
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/commands/benchmark.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AA0Y3C,eAAO,MAAM,gBAAgB,EAAE,aAmD9B,CAAC"}
@@ -0,0 +1,400 @@
1
+ import chalk from "chalk";
2
+ import * as p from "@clack/prompts";
3
+ import { basename, resolve } from "node:path";
4
+ import { loadRegistry } from "../lib/registry.js";
5
+ import { detectInterf, listKnowledgeBasesForSourceFolder, readInterfConfig, resolveInterfaceKnowledgeBasePath, resolveKnowledgeBaseSourcePath, } from "../lib/interf.js";
6
+ import { listBenchmarkSpecs, listBenchmarkTargets, loadBenchmarkSpecFromFile, runBenchmark, saveBenchmarkRun, writeBenchmarkSpec, } from "../lib/benchmark.js";
7
+ function slugify(input) {
8
+ return input
9
+ .toLowerCase()
10
+ .trim()
11
+ .replace(/[^a-z0-9]+/g, "-")
12
+ .replace(/^-+|-+$/g, "")
13
+ .slice(0, 80);
14
+ }
15
+ function parseListInput(value) {
16
+ return value
17
+ .split(/[\n,]/g)
18
+ .map((item) => item.trim())
19
+ .filter(Boolean);
20
+ }
21
+ function parseOptionalPositiveInteger(value) {
22
+ const trimmed = value.trim();
23
+ if (trimmed.length === 0)
24
+ return undefined;
25
+ const parsed = Number.parseInt(trimmed, 10);
26
+ if (!Number.isFinite(parsed) || parsed < 0)
27
+ return undefined;
28
+ return parsed;
29
+ }
30
+ function resolveBenchmarkSourcePath(cwd) {
31
+ const detected = detectInterf(cwd);
32
+ if (detected?.config.type === "knowledge-base") {
33
+ return resolveKnowledgeBaseSourcePath(detected.path, detected.config);
34
+ }
35
+ if (detected?.config.type === "interface") {
36
+ const knowledgeBasePath = resolveInterfaceKnowledgeBasePath(detected.path);
37
+ if (!knowledgeBasePath)
38
+ return null;
39
+ return resolveKnowledgeBaseSourcePath(knowledgeBasePath, readInterfConfig(knowledgeBasePath));
40
+ }
41
+ if (listKnowledgeBasesForSourceFolder(cwd).length > 0) {
42
+ return cwd;
43
+ }
44
+ if (basename(cwd) === "interf") {
45
+ const sourcePath = resolve(cwd, "..");
46
+ if (listKnowledgeBasesForSourceFolder(sourcePath).length > 0) {
47
+ return sourcePath;
48
+ }
49
+ }
50
+ return null;
51
+ }
52
+ async function chooseSourcePathFromRegistry() {
53
+ const registry = loadRegistry();
54
+ const sourceFolders = Array.from(new Map(registry.knowledgeBases.map((knowledgeBase) => {
55
+ const config = readInterfConfig(knowledgeBase.path);
56
+ const sourcePath = resolveKnowledgeBaseSourcePath(knowledgeBase.path, config);
57
+ return [
58
+ sourcePath,
59
+ {
60
+ sourcePath,
61
+ label: basename(sourcePath) || sourcePath,
62
+ hint: `${knowledgeBase.name} at ${sourcePath}`,
63
+ },
64
+ ];
65
+ })).values());
66
+ if (sourceFolders.length === 0)
67
+ return null;
68
+ if (sourceFolders.length === 1)
69
+ return sourceFolders[0].sourcePath;
70
+ return p.select({
71
+ message: "Which source folder?",
72
+ options: sourceFolders.map((folder) => ({
73
+ value: folder.sourcePath,
74
+ label: folder.label,
75
+ hint: folder.hint,
76
+ })),
77
+ });
78
+ }
79
+ async function chooseTargetType(sourcePath, explicitType) {
80
+ if (explicitType === "knowledge-base" || explicitType === "kb" || explicitType === "base") {
81
+ return "knowledge-base";
82
+ }
83
+ if (explicitType === "interface") {
84
+ return "interface";
85
+ }
86
+ if (explicitType) {
87
+ return null;
88
+ }
89
+ const knowledgeBaseTargets = listBenchmarkTargets(sourcePath, "knowledge-base");
90
+ const interfaceTargets = listBenchmarkTargets(sourcePath, "interface");
91
+ const knowledgeBaseEligible = knowledgeBaseTargets.filter((target) => target.eligible).length;
92
+ const interfaceEligible = interfaceTargets.filter((target) => target.eligible).length;
93
+ if (knowledgeBaseEligible > 0 && interfaceEligible === 0)
94
+ return "knowledge-base";
95
+ if (interfaceEligible > 0 && knowledgeBaseEligible === 0)
96
+ return "interface";
97
+ if (knowledgeBaseTargets.length === 0 && interfaceTargets.length === 0)
98
+ return null;
99
+ return p.select({
100
+ message: "Benchmark what?",
101
+ options: [
102
+ {
103
+ value: "knowledge-base",
104
+ label: knowledgeBaseEligible > 0 ? "Knowledge Base (Recommended)" : "Knowledge Base",
105
+ hint: `${knowledgeBaseEligible}/${knowledgeBaseTargets.length} compiled and eligible`,
106
+ },
107
+ {
108
+ value: "interface",
109
+ label: interfaceEligible > 0 ? "Interface (Recommended)" : "Interface",
110
+ hint: `${interfaceEligible}/${interfaceTargets.length} compiled and eligible`,
111
+ },
112
+ ],
113
+ });
114
+ }
115
+ function formatTargetLabel(target) {
116
+ return {
117
+ value: target.path,
118
+ label: target.type === "interface" && target.knowledgeBaseName
119
+ ? `${target.name} → ${target.knowledgeBaseName}`
120
+ : target.name,
121
+ hint: `${target.workflow} • ${target.summary}`,
122
+ };
123
+ }
124
+ async function chooseTargets(sourcePath, type) {
125
+ const targets = listBenchmarkTargets(sourcePath, type);
126
+ const eligibleTargets = targets.filter((target) => target.eligible);
127
+ const ineligibleTargets = targets.filter((target) => !target.eligible);
128
+ if (ineligibleTargets.length > 0) {
129
+ console.log();
130
+ console.log(chalk.dim(` Skipping ${ineligibleTargets.length} ineligible ${type === "knowledge-base" ? "knowledge base" : "interface"}${ineligibleTargets.length === 1 ? "" : "s"}:`));
131
+ for (const target of ineligibleTargets) {
132
+ const label = target.type === "interface" && target.knowledgeBaseName
133
+ ? `${target.name} → ${target.knowledgeBaseName}`
134
+ : target.name;
135
+ console.log(chalk.dim(` ${label} (${target.status}/${target.stage})`));
136
+ }
137
+ }
138
+ if (eligibleTargets.length === 0) {
139
+ return null;
140
+ }
141
+ if (eligibleTargets.length === 1) {
142
+ return eligibleTargets;
143
+ }
144
+ const choice = await p.multiselect({
145
+ message: type === "knowledge-base" ? "Which knowledge bases?" : "Which interfaces?",
146
+ options: eligibleTargets.map(formatTargetLabel),
147
+ });
148
+ if (p.isCancel(choice))
149
+ return choice;
150
+ const selectedPaths = new Set(choice ?? []);
151
+ return eligibleTargets.filter((target) => selectedPaths.has(target.path));
152
+ }
153
+ async function createBenchmarkSpecWizard(sourcePath, type) {
154
+ const rawName = await p.text({
155
+ message: "Benchmark name?",
156
+ placeholder: type === "knowledge-base" ? "knowledge-home-quality" : "weekly-brief-quality",
157
+ validate: (value) => (value.trim().length === 0 ? "Name is required" : undefined),
158
+ });
159
+ if (p.isCancel(rawName))
160
+ return rawName;
161
+ const description = await p.text({
162
+ message: "One-line description?",
163
+ placeholder: "Compare output quality on the same compiled targets",
164
+ });
165
+ if (p.isCancel(description))
166
+ return description;
167
+ const cases = [];
168
+ let addAnother = true;
169
+ while (addAnother) {
170
+ const caseLabel = await p.text({
171
+ message: `Case ${cases.length + 1} id?`,
172
+ placeholder: type === "knowledge-base" ? "home-overview" : "brief-clarity",
173
+ validate: (value) => {
174
+ if (value.trim().length === 0)
175
+ return "Case id is required";
176
+ if (slugify(value).length === 0)
177
+ return "Use letters, numbers, and dashes";
178
+ if (cases.some((benchmarkCase) => benchmarkCase.id === slugify(value))) {
179
+ return "That case id already exists";
180
+ }
181
+ return undefined;
182
+ },
183
+ });
184
+ if (p.isCancel(caseLabel))
185
+ return caseLabel;
186
+ const question = await p.text({
187
+ message: "What should this case prove?",
188
+ placeholder: type === "knowledge-base"
189
+ ? "Does home.md surface the main themes clearly?"
190
+ : "Does this interface clearly say what changed and what matters next?",
191
+ validate: (value) => (value.trim().length === 0 ? "Question is required" : undefined),
192
+ });
193
+ if (p.isCancel(question))
194
+ return question;
195
+ const file = await p.text({
196
+ message: "Relative output file?",
197
+ placeholder: type === "knowledge-base" ? "home.md" : "briefs/current-state.md",
198
+ validate: (value) => (value.trim().length === 0 ? "File path is required" : undefined),
199
+ });
200
+ if (p.isCancel(file))
201
+ return file;
202
+ const mustInclude = await p.text({
203
+ message: "Required phrases? (comma or newline separated, optional)",
204
+ placeholder: "themes, risks, next steps",
205
+ });
206
+ if (p.isCancel(mustInclude))
207
+ return mustInclude;
208
+ const mustNotInclude = await p.text({
209
+ message: "Forbidden phrases? (comma or newline separated, optional)",
210
+ placeholder: "TODO, TBD",
211
+ });
212
+ if (p.isCancel(mustNotInclude))
213
+ return mustNotInclude;
214
+ const minWords = await p.text({
215
+ message: "Minimum words? (optional)",
216
+ placeholder: "150",
217
+ validate: (value) => {
218
+ if (value.trim().length === 0)
219
+ return undefined;
220
+ return parseOptionalPositiveInteger(value) === undefined ? "Use a whole number" : undefined;
221
+ },
222
+ });
223
+ if (p.isCancel(minWords))
224
+ return minWords;
225
+ const maxWords = await p.text({
226
+ message: "Maximum words? (optional)",
227
+ placeholder: "600",
228
+ validate: (value) => {
229
+ if (value.trim().length === 0)
230
+ return undefined;
231
+ return parseOptionalPositiveInteger(value) === undefined ? "Use a whole number" : undefined;
232
+ },
233
+ });
234
+ if (p.isCancel(maxWords))
235
+ return maxWords;
236
+ const caseExpect = {
237
+ must_include: parseListInput(mustInclude),
238
+ must_not_include: parseListInput(mustNotInclude),
239
+ min_words: parseOptionalPositiveInteger(minWords),
240
+ max_words: parseOptionalPositiveInteger(maxWords),
241
+ };
242
+ cases.push({
243
+ id: slugify(caseLabel),
244
+ question: question.trim(),
245
+ file: file.trim(),
246
+ expect: caseExpect.must_include.length > 0 ||
247
+ caseExpect.must_not_include.length > 0 ||
248
+ typeof caseExpect.min_words === "number" ||
249
+ typeof caseExpect.max_words === "number"
250
+ ? caseExpect
251
+ : undefined,
252
+ });
253
+ const more = await p.confirm({
254
+ message: "Add another case?",
255
+ initialValue: false,
256
+ });
257
+ if (p.isCancel(more))
258
+ return more;
259
+ addAnother = Boolean(more);
260
+ }
261
+ const filePath = writeBenchmarkSpec(sourcePath, {
262
+ id: slugify(rawName),
263
+ type,
264
+ name: rawName.trim(),
265
+ description: description.trim(),
266
+ cases,
267
+ });
268
+ p.log.info(`Saved benchmark spec: ${filePath}`);
269
+ return loadBenchmarkSpecFromFile(filePath);
270
+ }
271
+ async function chooseBenchmarkSpec(sourcePath, type, explicitPath) {
272
+ if (explicitPath) {
273
+ const spec = loadBenchmarkSpecFromFile(resolve(process.cwd(), explicitPath));
274
+ if (!spec) {
275
+ console.log(chalk.red(`Could not read benchmark spec: ${explicitPath}`));
276
+ return null;
277
+ }
278
+ if (spec.type !== type) {
279
+ console.log(chalk.red(`Benchmark spec is for ${spec.type}, not ${type}.`));
280
+ return null;
281
+ }
282
+ return spec;
283
+ }
284
+ const specs = listBenchmarkSpecs(sourcePath, type);
285
+ if (specs.length === 0) {
286
+ return createBenchmarkSpecWizard(sourcePath, type);
287
+ }
288
+ const mode = await p.select({
289
+ message: "Benchmark spec?",
290
+ options: [
291
+ {
292
+ value: "existing",
293
+ label: "Existing benchmark (Recommended)",
294
+ hint: "Reuse a saved benchmark from interf/benchmarks/",
295
+ },
296
+ {
297
+ value: "new",
298
+ label: "Create new benchmark",
299
+ hint: "Write a simple file-based benchmark for these targets",
300
+ },
301
+ ],
302
+ });
303
+ if (p.isCancel(mode))
304
+ return mode;
305
+ if (mode === "new") {
306
+ return createBenchmarkSpecWizard(sourcePath, type);
307
+ }
308
+ const choice = await p.select({
309
+ message: "Choose a benchmark",
310
+ options: specs.map((spec) => ({
311
+ value: spec.id,
312
+ label: spec.name,
313
+ hint: spec.description ?? spec.filePath,
314
+ })),
315
+ });
316
+ if (p.isCancel(choice))
317
+ return choice;
318
+ return specs.find((spec) => spec.id === choice) ?? null;
319
+ }
320
+ function printBenchmarkResults(runPath, results) {
321
+ console.log();
322
+ console.log(chalk.bold(` Benchmark: ${results.benchmark.name}`));
323
+ console.log(chalk.dim(` Spec: ${results.benchmark.file}`));
324
+ console.log(chalk.dim(` Saved run: ${runPath}`));
325
+ console.log();
326
+ for (const result of results.results) {
327
+ const label = result.target.type === "interface" && result.target.knowledgeBaseName
328
+ ? `${result.target.name} → ${result.target.knowledgeBaseName}`
329
+ : result.target.name;
330
+ const status = result.ok ? chalk.green("pass") : chalk.yellow("mixed");
331
+ console.log(` ${label.padEnd(24)} ${status} cases:${String(result.passedCases).padStart(2)}/${String(result.totalCases).padEnd(2)} checks:${String(result.passedChecks).padStart(2)}/${String(result.totalChecks).padEnd(2)} workflow:${result.target.workflow}`);
332
+ }
333
+ const failedResults = results.results
334
+ .flatMap((result) => result.caseResults
335
+ .filter((caseResult) => !caseResult.ok)
336
+ .map((caseResult) => ({ result, caseResult })));
337
+ if (failedResults.length > 0) {
338
+ console.log();
339
+ console.log(chalk.bold(" Case failures"));
340
+ console.log(chalk.dim(" " + "─".repeat(50)));
341
+ for (const { result, caseResult } of failedResults) {
342
+ const targetLabel = result.target.type === "interface" && result.target.knowledgeBaseName
343
+ ? `${result.target.name} → ${result.target.knowledgeBaseName}`
344
+ : result.target.name;
345
+ console.log(` ${targetLabel} / ${caseResult.caseId}`);
346
+ for (const check of caseResult.checks.filter((entry) => !entry.ok)) {
347
+ console.log(chalk.dim(` - ${check.label}: ${check.detail}`));
348
+ }
349
+ }
350
+ }
351
+ console.log();
352
+ }
353
+ export const benchmarkCommand = {
354
+ command: "benchmark [type]",
355
+ describe: "Benchmark compiled knowledge bases or interfaces with file-based evals",
356
+ builder: (yargs) => yargs
357
+ .positional("type", {
358
+ describe: "What to benchmark (`knowledge-base` or `interface`; auto-detected if omitted)",
359
+ })
360
+ .option("spec", {
361
+ type: "string",
362
+ describe: "Path to a benchmark spec file (`.json`)",
363
+ }),
364
+ handler: async (argv) => {
365
+ let sourcePath = resolveBenchmarkSourcePath(process.cwd());
366
+ if (!sourcePath) {
367
+ const choice = await chooseSourcePathFromRegistry();
368
+ if (p.isCancel(choice))
369
+ return;
370
+ sourcePath = choice ?? null;
371
+ }
372
+ if (!sourcePath) {
373
+ console.log(chalk.red(" Could not find a source folder with Interf knowledge bases. Run this from a source folder, knowledge base, or interface first."));
374
+ return;
375
+ }
376
+ const type = await chooseTargetType(sourcePath, argv.type);
377
+ if (p.isCancel(type))
378
+ return;
379
+ if (!type) {
380
+ console.log(chalk.red(" Could not determine what to benchmark."));
381
+ return;
382
+ }
383
+ const targets = await chooseTargets(sourcePath, type);
384
+ if (p.isCancel(targets))
385
+ return;
386
+ if (!targets || targets.length === 0) {
387
+ console.log(chalk.red(` No compiled ${type === "knowledge-base" ? "knowledge bases" : "interfaces"} are eligible to benchmark yet.`));
388
+ return;
389
+ }
390
+ const spec = await chooseBenchmarkSpec(sourcePath, type, argv.spec);
391
+ if (p.isCancel(spec))
392
+ return;
393
+ if (!spec)
394
+ return;
395
+ const results = runBenchmark(sourcePath, spec, targets);
396
+ const runPath = saveBenchmarkRun(sourcePath, results);
397
+ printBenchmarkResults(runPath, results);
398
+ },
399
+ };
400
+ //# sourceMappingURL=benchmark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../src/commands/benchmark.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CommandModule } from "yargs";
2
+ export declare const compileCommand: CommandModule;
3
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,eAAO,MAAM,cAAc,EAAE,aA0F5B,CAAC"}
@@ -0,0 +1,139 @@
1
+ import chalk from "chalk";
2
+ import * as p from "@clack/prompts";
3
+ import { detectInterf, listKnowledgeBasesForSourceFolder, readInterfConfig, } from "../lib/interf.js";
4
+ import { resolveLocalExecutor } from "../lib/executors.js";
5
+ import { loadRegistry } from "../lib/registry.js";
6
+ import { formatInterfaceWorkflowStageStep, formatKnowledgeBaseWorkflowStageStep, resolveInterfaceWorkflowFromConfig, resolveKnowledgeBaseWorkflowFromConfig, } from "../lib/workflow-definitions.js";
7
+ import { compileKnowledgeBase, compileInterface, } from "../lib/workflows.js";
8
+ export const compileCommand = {
9
+ command: "compile [type]",
10
+ describe: "Compile a knowledge base or interface",
11
+ builder: (yargs) => yargs.positional("type", {
12
+ describe: "What to compile (`knowledge-base` or `interface`; auto-detected if omitted)",
13
+ }),
14
+ handler: async (argv) => {
15
+ let type = argv.type;
16
+ if (type === "knowledge-base" || type === "kb" || type === "base") {
17
+ type = "knowledge-base";
18
+ }
19
+ if (type && type !== "knowledge-base" && type !== "interface") {
20
+ console.log(chalk.red(`Unknown compile target: ${type}`));
21
+ return;
22
+ }
23
+ const { executor, error } = resolveLocalExecutor();
24
+ if (!executor) {
25
+ console.log(chalk.red(error ?? "No coding agent detected."));
26
+ return;
27
+ }
28
+ if (!type) {
29
+ const detected = detectInterf(process.cwd());
30
+ if (detected) {
31
+ type = detected.config.type;
32
+ }
33
+ else {
34
+ const localKnowledgeBases = listKnowledgeBasesForSourceFolder(process.cwd());
35
+ if (localKnowledgeBases.length > 0) {
36
+ type = "knowledge-base";
37
+ }
38
+ }
39
+ if (!type) {
40
+ console.log(chalk.red(" Could not detect a knowledge base. Run this from a source folder with ./interf/<name>, from that knowledge base, or from ./interf/<name>/interfaces/<name>."));
41
+ return;
42
+ }
43
+ }
44
+ let knowledgeBasePath;
45
+ const detected = detectInterf(process.cwd());
46
+ const localKnowledgeBases = type === "knowledge-base"
47
+ ? listKnowledgeBasesForSourceFolder(process.cwd())
48
+ : [];
49
+ if (detected && detected.config.type === type) {
50
+ knowledgeBasePath = detected.path;
51
+ }
52
+ else if (type === "knowledge-base" && localKnowledgeBases.length > 0) {
53
+ if (localKnowledgeBases.length === 1) {
54
+ knowledgeBasePath = localKnowledgeBases[0].path;
55
+ }
56
+ else {
57
+ const choice = await p.select({
58
+ message: "Which local knowledge base?",
59
+ options: localKnowledgeBases.map((entry) => ({ value: entry.path, label: entry.config.name })),
60
+ });
61
+ if (p.isCancel(choice))
62
+ return;
63
+ knowledgeBasePath = choice;
64
+ }
65
+ }
66
+ else {
67
+ const reg = loadRegistry();
68
+ const entries = type === "knowledge-base" ? reg.knowledgeBases : reg.interfaces;
69
+ if (entries.length === 0) {
70
+ const label = type === "knowledge-base" ? "knowledge bases" : "interfaces";
71
+ console.log(chalk.red(`No ${label} found. Create one first.`));
72
+ return;
73
+ }
74
+ if (entries.length === 1) {
75
+ knowledgeBasePath = entries[0].path;
76
+ }
77
+ else {
78
+ const choice = await p.select({
79
+ message: type === "knowledge-base" ? "Which knowledge base?" : "Which interface?",
80
+ options: entries.map((entry) => ({ value: entry.path, label: entry.name })),
81
+ });
82
+ if (p.isCancel(choice))
83
+ return;
84
+ knowledgeBasePath = choice;
85
+ }
86
+ }
87
+ if (type === "knowledge-base") {
88
+ await compileKnowledgeBaseCommand(executor, knowledgeBasePath);
89
+ }
90
+ else {
91
+ await compileInterfaceCommand(executor, knowledgeBasePath);
92
+ }
93
+ },
94
+ };
95
+ async function compileKnowledgeBaseCommand(executor, knowledgeBasePath) {
96
+ console.log();
97
+ console.log(chalk.bold(" Compiling knowledge base..."));
98
+ console.log();
99
+ const reporter = {
100
+ line: (message) => console.log(chalk.dim(` ${message}`)),
101
+ blankLine: () => console.log(),
102
+ };
103
+ const result = await compileKnowledgeBase({
104
+ executor,
105
+ knowledgeBasePath,
106
+ reporter,
107
+ });
108
+ if (!result.ok) {
109
+ const workflowId = resolveKnowledgeBaseWorkflowFromConfig(readInterfConfig(knowledgeBasePath));
110
+ const failedStage = formatKnowledgeBaseWorkflowStageStep(workflowId, result.failedStage ?? "compile", { workspacePath: knowledgeBasePath });
111
+ console.log(chalk.red(` ${failedStage} failed.`));
112
+ return;
113
+ }
114
+ console.log();
115
+ console.log(chalk.green(" ✓ Knowledge base compiled."));
116
+ }
117
+ async function compileInterfaceCommand(executor, knowledgeBasePath) {
118
+ console.log();
119
+ console.log(chalk.bold(" Compiling interface..."));
120
+ console.log();
121
+ const reporter = {
122
+ line: (message) => console.log(chalk.dim(` ${message}`)),
123
+ blankLine: () => console.log(),
124
+ };
125
+ const result = await compileInterface({
126
+ executor,
127
+ knowledgeBasePath,
128
+ reporter,
129
+ });
130
+ if (!result.ok) {
131
+ const workflowId = resolveInterfaceWorkflowFromConfig(readInterfConfig(knowledgeBasePath));
132
+ const failedStage = formatInterfaceWorkflowStageStep(workflowId, result.failedStage ?? "compile", { workspacePath: knowledgeBasePath });
133
+ console.log(chalk.red(` ${failedStage} failed.`));
134
+ return;
135
+ }
136
+ console.log();
137
+ console.log(chalk.green(" ✓ Interface compiled."));
138
+ }
139
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/commands/compile.ts"],"names":[],"mappings":"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"}