@interf/compiler 0.2.5 → 0.3.1
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/README.md +192 -187
- package/dist/bin.js +3 -3
- package/dist/bin.js.map +1 -1
- package/dist/commands/compile.d.ts +1 -0
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +45 -138
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/create-workflow-wizard.d.ts +4 -25
- package/dist/commands/create-workflow-wizard.d.ts.map +1 -1
- package/dist/commands/create-workflow-wizard.js +46 -222
- package/dist/commands/create-workflow-wizard.js.map +1 -1
- package/dist/commands/create.d.ts +2 -11
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +78 -477
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/default.d.ts.map +1 -1
- package/dist/commands/default.js +27 -43
- package/dist/commands/default.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/executor-flow.d.ts +9 -0
- package/dist/commands/executor-flow.d.ts.map +1 -0
- package/dist/commands/executor-flow.js +55 -0
- package/dist/commands/executor-flow.js.map +1 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +320 -321
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +12 -22
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +27 -124
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/source-config-wizard.d.ts +10 -11
- package/dist/commands/source-config-wizard.d.ts.map +1 -1
- package/dist/commands/source-config-wizard.js +100 -97
- package/dist/commands/source-config-wizard.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +60 -56
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/test-flow.d.ts +21 -0
- package/dist/commands/test-flow.d.ts.map +1 -0
- package/dist/commands/test-flow.js +106 -0
- package/dist/commands/test-flow.js.map +1 -0
- package/dist/commands/test.d.ts +4 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +131 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +63 -98
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/workspace-flow.d.ts +21 -0
- package/dist/commands/workspace-flow.d.ts.map +1 -0
- package/dist/commands/workspace-flow.js +90 -0
- package/dist/commands/workspace-flow.js.map +1 -0
- package/dist/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -7
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-constants.js +1 -1
- package/dist/lib/agent-constants.js.map +1 -1
- package/dist/lib/agent-detection.js +4 -4
- package/dist/lib/agent-detection.js.map +1 -1
- package/dist/lib/agent-skills.js +6 -6
- package/dist/lib/agent-skills.js.map +1 -1
- package/dist/lib/benchmark-execution.d.ts.map +1 -1
- package/dist/lib/benchmark-execution.js +32 -19
- package/dist/lib/benchmark-execution.js.map +1 -1
- package/dist/lib/benchmark-sandbox.d.ts +10 -0
- package/dist/lib/benchmark-sandbox.d.ts.map +1 -0
- package/dist/lib/benchmark-sandbox.js +75 -0
- package/dist/lib/benchmark-sandbox.js.map +1 -0
- package/dist/lib/benchmark-targets.d.ts +4 -4
- package/dist/lib/benchmark-targets.d.ts.map +1 -1
- package/dist/lib/benchmark-targets.js +20 -54
- package/dist/lib/benchmark-targets.js.map +1 -1
- package/dist/lib/benchmark-types.d.ts +2 -3
- package/dist/lib/benchmark-types.d.ts.map +1 -1
- package/dist/lib/benchmark.d.ts +1 -1
- package/dist/lib/benchmark.d.ts.map +1 -1
- package/dist/lib/benchmark.js +1 -1
- package/dist/lib/benchmark.js.map +1 -1
- package/dist/lib/config.d.ts +1 -2
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +2 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/discovery.d.ts +1 -1
- package/dist/lib/discovery.d.ts.map +1 -1
- package/dist/lib/discovery.js +7 -2
- package/dist/lib/discovery.js.map +1 -1
- package/dist/lib/eval-packs.d.ts +6 -52
- package/dist/lib/eval-packs.d.ts.map +1 -1
- package/dist/lib/eval-packs.js +11 -39
- package/dist/lib/eval-packs.js.map +1 -1
- package/dist/lib/interf-bootstrap.d.ts +3 -5
- package/dist/lib/interf-bootstrap.d.ts.map +1 -1
- package/dist/lib/interf-bootstrap.js +10 -57
- package/dist/lib/interf-bootstrap.js.map +1 -1
- package/dist/lib/interf-detect.d.ts +13 -11
- package/dist/lib/interf-detect.d.ts.map +1 -1
- package/dist/lib/interf-detect.js +59 -45
- package/dist/lib/interf-detect.js.map +1 -1
- package/dist/lib/interf-scaffold.d.ts +2 -5
- package/dist/lib/interf-scaffold.d.ts.map +1 -1
- package/dist/lib/interf-scaffold.js +99 -235
- package/dist/lib/interf-scaffold.js.map +1 -1
- package/dist/lib/interf-workflow-package.d.ts +1 -2
- package/dist/lib/interf-workflow-package.d.ts.map +1 -1
- package/dist/lib/interf-workflow-package.js +99 -90
- package/dist/lib/interf-workflow-package.js.map +1 -1
- package/dist/lib/interf.d.ts +4 -5
- package/dist/lib/interf.d.ts.map +1 -1
- package/dist/lib/interf.js +3 -6
- package/dist/lib/interf.js.map +1 -1
- package/dist/lib/local-workflows.d.ts +9 -8
- package/dist/lib/local-workflows.d.ts.map +1 -1
- package/dist/lib/local-workflows.js +56 -92
- package/dist/lib/local-workflows.js.map +1 -1
- package/dist/lib/obsidian.d.ts +1 -3
- package/dist/lib/obsidian.d.ts.map +1 -1
- package/dist/lib/obsidian.js +10 -81
- package/dist/lib/obsidian.js.map +1 -1
- package/dist/lib/registry.d.ts +6 -17
- package/dist/lib/registry.d.ts.map +1 -1
- package/dist/lib/registry.js +36 -50
- package/dist/lib/registry.js.map +1 -1
- package/dist/lib/runtime-contracts.d.ts +4 -3
- package/dist/lib/runtime-contracts.d.ts.map +1 -1
- package/dist/lib/runtime-contracts.js +125 -9
- package/dist/lib/runtime-contracts.js.map +1 -1
- package/dist/lib/runtime-reconcile.d.ts +3 -5
- package/dist/lib/runtime-reconcile.d.ts.map +1 -1
- package/dist/lib/runtime-reconcile.js +70 -167
- package/dist/lib/runtime-reconcile.js.map +1 -1
- package/dist/lib/runtime-runs.d.ts.map +1 -1
- package/dist/lib/runtime-runs.js +61 -57
- package/dist/lib/runtime-runs.js.map +1 -1
- package/dist/lib/runtime-types.d.ts +16 -6
- package/dist/lib/runtime-types.d.ts.map +1 -1
- package/dist/lib/runtime.d.ts +2 -2
- package/dist/lib/runtime.d.ts.map +1 -1
- package/dist/lib/runtime.js +1 -1
- package/dist/lib/runtime.js.map +1 -1
- package/dist/lib/schema.d.ts +69 -311
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/schema.js +49 -210
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/source-config.d.ts +8 -7
- package/dist/lib/source-config.d.ts.map +1 -1
- package/dist/lib/source-config.js +59 -63
- package/dist/lib/source-config.js.map +1 -1
- package/dist/lib/state-artifacts.d.ts +5 -11
- package/dist/lib/state-artifacts.d.ts.map +1 -1
- package/dist/lib/state-artifacts.js +8 -18
- package/dist/lib/state-artifacts.js.map +1 -1
- package/dist/lib/state-health.d.ts +4 -8
- package/dist/lib/state-health.d.ts.map +1 -1
- package/dist/lib/state-health.js +52 -233
- package/dist/lib/state-health.js.map +1 -1
- package/dist/lib/state-io.d.ts +7 -12
- package/dist/lib/state-io.d.ts.map +1 -1
- package/dist/lib/state-io.js +32 -93
- package/dist/lib/state-io.js.map +1 -1
- package/dist/lib/state-view.d.ts +4 -6
- package/dist/lib/state-view.d.ts.map +1 -1
- package/dist/lib/state-view.js +62 -101
- package/dist/lib/state-view.js.map +1 -1
- package/dist/lib/state.d.ts +5 -5
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +4 -4
- package/dist/lib/state.js.map +1 -1
- package/dist/lib/summarize-plan.d.ts +2 -2
- package/dist/lib/summarize-plan.d.ts.map +1 -1
- package/dist/lib/summarize-plan.js +13 -13
- package/dist/lib/summarize-plan.js.map +1 -1
- package/dist/lib/{validate-kb.d.ts → validate-workspace.d.ts} +49 -8
- package/dist/lib/validate-workspace.d.ts.map +1 -0
- package/dist/lib/validate-workspace.js +398 -0
- package/dist/lib/validate-workspace.js.map +1 -0
- package/dist/lib/validate.d.ts +5 -7
- package/dist/lib/validate.d.ts.map +1 -1
- package/dist/lib/validate.js +22 -20
- package/dist/lib/validate.js.map +1 -1
- package/dist/lib/workflow-definitions.d.ts +14 -50
- package/dist/lib/workflow-definitions.d.ts.map +1 -1
- package/dist/lib/workflow-definitions.js +100 -353
- package/dist/lib/workflow-definitions.js.map +1 -1
- package/dist/lib/workflow-helpers.d.ts +3 -4
- package/dist/lib/workflow-helpers.d.ts.map +1 -1
- package/dist/lib/workflow-helpers.js +17 -49
- package/dist/lib/workflow-helpers.js.map +1 -1
- package/dist/lib/workflow-stage-runner.d.ts +1 -2
- package/dist/lib/workflow-stage-runner.d.ts.map +1 -1
- package/dist/lib/workflow-stage-runner.js +4 -6
- package/dist/lib/workflow-stage-runner.js.map +1 -1
- package/dist/lib/workflow-starter-docs.d.ts +3 -5
- package/dist/lib/workflow-starter-docs.d.ts.map +1 -1
- package/dist/lib/workflow-starter-docs.js +2 -17
- package/dist/lib/workflow-starter-docs.js.map +1 -1
- package/dist/lib/workflows.d.ts +9 -14
- package/dist/lib/workflows.d.ts.map +1 -1
- package/dist/lib/workflows.js +15 -30
- package/dist/lib/workflows.js.map +1 -1
- package/dist/lib/workspace-compile.d.ts +51 -0
- package/dist/lib/workspace-compile.d.ts.map +1 -0
- package/dist/lib/workspace-compile.js +397 -0
- package/dist/lib/workspace-compile.js.map +1 -0
- package/package.json +9 -9
- package/skills/benchmark/SKILL.md +20 -27
- package/skills/workflow/create/SKILL.md +10 -14
- package/skills/workspace/shape/SKILL.md +15 -0
- package/skills/workspace/structure/SKILL.md +15 -0
- package/skills/workspace/summarize/SKILL.md +15 -0
- package/templates/workspace/README.md +23 -0
- package/templates/workspace/interfignore +2 -0
- package/dist/commands/benchmark.d.ts +0 -3
- package/dist/commands/benchmark.d.ts.map +0 -1
- package/dist/commands/benchmark.js +0 -374
- package/dist/commands/benchmark.js.map +0 -1
- package/dist/lib/bundled-templates.d.ts +0 -5
- package/dist/lib/bundled-templates.d.ts.map +0 -1
- package/dist/lib/bundled-templates.js +0 -23
- package/dist/lib/bundled-templates.js.map +0 -1
- package/dist/lib/interf-compile-plan.d.ts +0 -12
- package/dist/lib/interf-compile-plan.d.ts.map +0 -1
- package/dist/lib/interf-compile-plan.js +0 -143
- package/dist/lib/interf-compile-plan.js.map +0 -1
- package/dist/lib/validate-interface.d.ts +0 -79
- package/dist/lib/validate-interface.d.ts.map +0 -1
- package/dist/lib/validate-interface.js +0 -535
- package/dist/lib/validate-interface.js.map +0 -1
- package/dist/lib/validate-kb.d.ts.map +0 -1
- package/dist/lib/validate-kb.js +0 -252
- package/dist/lib/validate-kb.js.map +0 -1
- package/dist/lib/workflows-interface-contracts.d.ts +0 -24
- package/dist/lib/workflows-interface-contracts.d.ts.map +0 -1
- package/dist/lib/workflows-interface-contracts.js +0 -304
- package/dist/lib/workflows-interface-contracts.js.map +0 -1
- package/dist/lib/workflows-interface.d.ts +0 -72
- package/dist/lib/workflows-interface.d.ts.map +0 -1
- package/dist/lib/workflows-interface.js +0 -377
- package/dist/lib/workflows-interface.js.map +0 -1
- package/dist/lib/workflows-kb.d.ts +0 -50
- package/dist/lib/workflows-kb.d.ts.map +0 -1
- package/dist/lib/workflows-kb.js +0 -306
- package/dist/lib/workflows-kb.js.map +0 -1
- package/skills/interface/analyze/SKILL.md +0 -191
- package/skills/interface/compile/SKILL.md +0 -152
- package/skills/interface/compile/references/output-format.md +0 -48
- package/skills/interface/create/SKILL.md +0 -87
- package/skills/interface/create/references/compile-plan-format.md +0 -109
- package/skills/interface/create/references/workflows.md +0 -35
- package/skills/interface/query/SKILL.md +0 -48
- package/skills/interface/retrieve/SKILL.md +0 -133
- package/skills/knowledge-base/compile/SKILL.md +0 -196
- package/skills/knowledge-base/compile/references/output-format.md +0 -48
- package/skills/knowledge-base/compile/references/stage-claims.md +0 -60
- package/skills/knowledge-base/compile/references/stage-entities.md +0 -46
- package/skills/knowledge-base/query/SKILL.md +0 -45
- package/skills/knowledge-base/summarize/SKILL.md +0 -152
- package/templates/interface/README.md +0 -159
- package/templates/interface/interfaces.md +0 -102
- package/templates/knowledge-base/README.md +0 -137
- package/templates/knowledge-base/interfignore +0 -19
- package/templates/knowledge-base/registry.md +0 -118
- package/templates/workflow-package/README.md +0 -16
- package/templates/workflow-package/create/SKILL.md +0 -8
- package/templates/workflow-package/interface-query/SKILL.md +0 -29
- package/templates/workflow-package/interface-stage/SKILL.md +0 -13
- package/templates/workflow-package/knowledge-base-query/SKILL.md +0 -36
- package/templates/workflow-package/knowledge-base-stage/SKILL.md +0 -13
- package/templates/workflow-starters/interface/interf/README.md +0 -13
- package/templates/workflow-starters/interface/interf/create/SKILL.md +0 -15
- package/templates/workflow-starters/knowledge-base/interf/README.md +0 -13
- package/templates/workflow-starters/knowledge-base/karpathy/README.md +0 -13
package/dist/commands/create.js
CHANGED
|
@@ -1,29 +1,21 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import { basename } from "node:path";
|
|
3
3
|
import * as p from "@clack/prompts";
|
|
4
|
-
import { detectInterf,
|
|
5
|
-
import { discoverSourceFiles } from "../lib/discovery.js";
|
|
6
|
-
import { addKnowledgeBaseWithWorkflow, addInterface, loadRegistry } from "../lib/registry.js";
|
|
7
|
-
import { resolveLocalExecutor } from "../lib/executors.js";
|
|
8
|
-
import { formatInterfaceWorkflowStageStep, formatKnowledgeBaseWorkflowStageStep, listInterfaceWorkflowChoices, listKnowledgeBaseInterfaceWorkflowChoices, resolveInterfaceWorkflowFromConfig, resolveKnowledgeBaseWorkflowFromConfig, } from "../lib/workflow-definitions.js";
|
|
9
|
-
import { createKnowledgeBase, createInterface, compileKnowledgeBase as compileKnowledgeBaseWorkflow, compileInterface as compileInterfaceWorkflow, } from "../lib/workflows.js";
|
|
4
|
+
import { detectInterf, defaultWorkspaceNameForSource, listWorkspacesForSourceFolder, } from "../lib/interf.js";
|
|
10
5
|
import { slugify } from "../lib/util.js";
|
|
11
|
-
import { addExecutionProfileOptions, executionProfileFromArgv,
|
|
12
|
-
import { loadSourceFolderConfig,
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
|
|
6
|
+
import { addExecutionProfileOptions, executionProfileFromArgv, } from "../lib/execution-profile.js";
|
|
7
|
+
import { loadSourceFolderConfig, upsertSourceWorkspaceConfig } from "../lib/source-config.js";
|
|
8
|
+
import { chooseWorkspaceWorkflow, createWorkflowWizard, } from "./create-workflow-wizard.js";
|
|
9
|
+
import { compileWorkspaceWithReporter, ensureWorkspaceFromConfig, } from "./workspace-flow.js";
|
|
10
|
+
import { promptSingleWorkspaceConfig } from "./source-config-wizard.js";
|
|
11
|
+
import { resolveOrConfigureLocalExecutor } from "./executor-flow.js";
|
|
16
12
|
function normalizeCreateTarget(value) {
|
|
17
13
|
if (!value)
|
|
18
14
|
return null;
|
|
19
15
|
switch (value) {
|
|
20
|
-
case "
|
|
21
|
-
case "
|
|
22
|
-
|
|
23
|
-
case "kb":
|
|
24
|
-
return "knowledge-base";
|
|
25
|
-
case "interface":
|
|
26
|
-
return "interface";
|
|
16
|
+
case "workspace":
|
|
17
|
+
case "ws":
|
|
18
|
+
return "workspace";
|
|
27
19
|
case "workflow":
|
|
28
20
|
case "wf":
|
|
29
21
|
return "workflow";
|
|
@@ -32,57 +24,28 @@ function normalizeCreateTarget(value) {
|
|
|
32
24
|
}
|
|
33
25
|
}
|
|
34
26
|
async function selectCreateTarget() {
|
|
35
|
-
const detected = detectInterf(process.cwd());
|
|
36
|
-
const registry = loadRegistry();
|
|
37
|
-
if (!detected && registry.knowledgeBases.length === 0) {
|
|
38
|
-
return "knowledge-base";
|
|
39
|
-
}
|
|
40
|
-
const recommendInterface = Boolean(detected);
|
|
41
27
|
return p.select({
|
|
42
28
|
message: "Create what?",
|
|
43
|
-
options:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
{
|
|
56
|
-
value: "workflow",
|
|
57
|
-
label: "Workflow",
|
|
58
|
-
hint: "Create a reusable workflow package for knowledge bases or interfaces",
|
|
59
|
-
},
|
|
60
|
-
]
|
|
61
|
-
: [
|
|
62
|
-
{
|
|
63
|
-
value: "knowledge-base",
|
|
64
|
-
label: "Knowledge Base (Recommended)",
|
|
65
|
-
hint: "Attach the current folder as a new local knowledge base",
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
value: "interface",
|
|
69
|
-
label: "Interface",
|
|
70
|
-
hint: "Create an interface from a knowledge base already in your registry",
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
value: "workflow",
|
|
74
|
-
label: "Workflow",
|
|
75
|
-
hint: "Create a reusable workflow package for knowledge bases or interfaces",
|
|
76
|
-
},
|
|
77
|
-
],
|
|
29
|
+
options: [
|
|
30
|
+
{
|
|
31
|
+
value: "workspace",
|
|
32
|
+
label: "Workspace (Recommended)",
|
|
33
|
+
hint: "Create a compiled workspace for this folder",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
value: "workflow",
|
|
37
|
+
label: "Workflow",
|
|
38
|
+
hint: "Create a reusable local workflow package",
|
|
39
|
+
},
|
|
40
|
+
],
|
|
78
41
|
});
|
|
79
42
|
}
|
|
80
43
|
export const createCommand = {
|
|
81
44
|
command: "create [type]",
|
|
82
|
-
describe: "Create a
|
|
45
|
+
describe: "Create a compiled workspace or reusable workflow",
|
|
83
46
|
builder: (yargs) => addExecutionProfileOptions(yargs.positional("type", {
|
|
84
47
|
type: "string",
|
|
85
|
-
describe: "Type to create (`
|
|
48
|
+
describe: "Type to create (`workspace` or `workflow`)",
|
|
86
49
|
default: undefined,
|
|
87
50
|
})),
|
|
88
51
|
handler: async (argv) => {
|
|
@@ -100,456 +63,94 @@ export const createCommand = {
|
|
|
100
63
|
return;
|
|
101
64
|
type = selected;
|
|
102
65
|
}
|
|
103
|
-
if (type === "knowledge-base") {
|
|
104
|
-
await createKnowledgeBaseWizard({ executionProfile });
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
66
|
if (type === "workflow") {
|
|
108
|
-
|
|
109
|
-
const detected = detectInterf(cwd);
|
|
110
|
-
let sourcePath = cwd;
|
|
111
|
-
let knowledgeBasePath;
|
|
112
|
-
if (detected?.config.type === "knowledge-base") {
|
|
113
|
-
knowledgeBasePath = detected.path;
|
|
114
|
-
sourcePath = resolveKnowledgeBaseSourcePath(detected.path);
|
|
115
|
-
}
|
|
116
|
-
else if (detected?.config.type === "interface") {
|
|
117
|
-
const parentKnowledgeBasePath = resolveInterfaceKnowledgeBasePath(detected.path);
|
|
118
|
-
if (parentKnowledgeBasePath) {
|
|
119
|
-
knowledgeBasePath = parentKnowledgeBasePath;
|
|
120
|
-
sourcePath = resolveKnowledgeBaseSourcePath(parentKnowledgeBasePath);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
const localKnowledgeBases = listKnowledgeBasesForSourceFolder(cwd);
|
|
125
|
-
if (localKnowledgeBases.length === 1) {
|
|
126
|
-
const localKnowledgeBase = localKnowledgeBases[0];
|
|
127
|
-
knowledgeBasePath = localKnowledgeBase.path;
|
|
128
|
-
sourcePath = resolveKnowledgeBaseSourcePath(localKnowledgeBase.path);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
await createWorkflowWizard({ sourcePath, knowledgeBasePath });
|
|
67
|
+
await createWorkflowWizard({ sourcePath: process.cwd() });
|
|
132
68
|
return;
|
|
133
69
|
}
|
|
134
|
-
await
|
|
70
|
+
await createWorkspaceWizard({ executionProfile });
|
|
135
71
|
},
|
|
136
72
|
};
|
|
137
|
-
export async function
|
|
73
|
+
export async function createWorkspaceWizard(options = {}) {
|
|
138
74
|
if (options.intro !== false) {
|
|
139
|
-
p.intro(chalk.bold("Create a
|
|
75
|
+
p.intro(chalk.bold("Create a workspace"));
|
|
140
76
|
}
|
|
141
|
-
p.log.info("Interf prepares a shared workspace beside this folder for your agent.");
|
|
142
|
-
p.log.info("In Interf, that shared workspace is called a knowledge base. Your raw files stay where they are; the knowledge base lives under `./interf/<name>/`.");
|
|
143
77
|
const cwd = process.cwd();
|
|
144
|
-
const
|
|
145
|
-
if (
|
|
78
|
+
const detected = detectInterf(cwd);
|
|
79
|
+
if (detected) {
|
|
146
80
|
process.exitCode = 1;
|
|
147
|
-
p.log.error("You are already inside
|
|
81
|
+
p.log.error("You are already inside a compiled workspace.");
|
|
148
82
|
return;
|
|
149
83
|
}
|
|
150
|
-
const
|
|
151
|
-
if (
|
|
152
|
-
p.log.info(`This
|
|
84
|
+
const existing = listWorkspacesForSourceFolder(cwd);
|
|
85
|
+
if (existing.length > 0) {
|
|
86
|
+
p.log.info(`This folder already has ${existing.length} workspace${existing.length === 1 ? "" : "s"}. Add another only when you need a separate set of questions or a different focus.`);
|
|
153
87
|
}
|
|
154
|
-
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
88
|
+
p.log.info("Interf builds a compiled workspace on top of your raw files. Your files stay where they are and stay the source of truth.");
|
|
89
|
+
const existingConfig = loadSourceFolderConfig(cwd);
|
|
90
|
+
const suggestedName = slugify(defaultWorkspaceNameForSource(cwd) || basename(cwd)) || "default";
|
|
91
|
+
const draft = await promptSingleWorkspaceConfig({
|
|
92
|
+
initial: { name: suggestedName },
|
|
93
|
+
introStyle: existingConfig ? "additional" : "first",
|
|
160
94
|
});
|
|
161
|
-
if (
|
|
95
|
+
if (!draft)
|
|
162
96
|
return;
|
|
163
|
-
const
|
|
164
|
-
if (name !== rawName) {
|
|
165
|
-
p.log.info(`Knowledge base name: ${name}`);
|
|
166
|
-
}
|
|
167
|
-
const workflowChoice = await chooseKnowledgeBaseWorkflow(cwd);
|
|
97
|
+
const workflowChoice = await chooseWorkspaceWorkflow(cwd);
|
|
168
98
|
if (p.isCancel(workflowChoice))
|
|
169
99
|
return;
|
|
170
|
-
const
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
let knowledgeBasePath;
|
|
178
|
-
try {
|
|
179
|
-
knowledgeBasePath = createKnowledgeBase(name, cwd, selectedWorkflow);
|
|
180
|
-
}
|
|
181
|
-
catch (error) {
|
|
182
|
-
s.stop("Create failed");
|
|
183
|
-
process.exitCode = 1;
|
|
184
|
-
p.log.error(error instanceof Error ? error.message : "Failed to create knowledge base.");
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
addKnowledgeBaseWithWorkflow(name, knowledgeBasePath, selectedWorkflow);
|
|
188
|
-
s.stop(`Knowledge base "${name}" created`);
|
|
189
|
-
const createdKnowledgeBaseConfig = readInterfConfig(knowledgeBasePath);
|
|
190
|
-
if (createdKnowledgeBaseConfig?.workflow) {
|
|
191
|
-
p.log.info(`Workflow: ${createdKnowledgeBaseConfig.workflow}`);
|
|
192
|
-
}
|
|
193
|
-
// Discovery preflight
|
|
194
|
-
const discovery = discoverSourceFiles(cwd, knowledgeBasePath);
|
|
195
|
-
p.log.info(`Found ${discovery.totalCount} source files ready to summarize and compile.`);
|
|
196
|
-
if (discovery.ignoredCount > 0) {
|
|
197
|
-
p.log.info("This count already excludes Interf files, hidden folders, and anything matched by `.interfignore`.");
|
|
198
|
-
}
|
|
199
|
-
p.log.info("Interf writes a normal folder you can open in Obsidian or any markdown app.");
|
|
200
|
-
const buildNow = await p.confirm({
|
|
201
|
-
message: "Compile this knowledge base now?",
|
|
202
|
-
initialValue: true,
|
|
203
|
-
});
|
|
204
|
-
if (p.isCancel(buildNow))
|
|
205
|
-
return;
|
|
206
|
-
if (buildNow) {
|
|
207
|
-
const { executor, error } = resolveLocalExecutor({ executionProfile: options.executionProfile });
|
|
208
|
-
if (!executor) {
|
|
209
|
-
process.exitCode = 1;
|
|
210
|
-
p.log.warn(error ?? "No local executor detected.");
|
|
211
|
-
p.outro([
|
|
212
|
-
`Knowledge base: ${knowledgeBasePath}`,
|
|
213
|
-
`Next: run \`interf compile\` from ${cwd} once an executor is configured.`,
|
|
214
|
-
].join("\n"));
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
const profileLabel = formatWorkflowExecutionProfile(executor.executionProfile);
|
|
218
|
-
if (profileLabel) {
|
|
219
|
-
p.log.info(`Execution profile: ${profileLabel}`);
|
|
220
|
-
}
|
|
221
|
-
const compiled = await runKnowledgeBaseCompile(executor, knowledgeBasePath);
|
|
222
|
-
if (compiled) {
|
|
223
|
-
const configuredInterface = loadSourceFolderConfig(cwd)?.interfaces?.[0];
|
|
224
|
-
const createFirstInterface = await p.confirm({
|
|
225
|
-
message: configuredInterface
|
|
226
|
-
? `Create the configured interface "${configuredInterface.name}" now?`
|
|
227
|
-
: "Create a first interface now?",
|
|
228
|
-
initialValue: Boolean(configuredInterface),
|
|
229
|
-
});
|
|
230
|
-
if (p.isCancel(createFirstInterface))
|
|
231
|
-
return;
|
|
232
|
-
if (createFirstInterface) {
|
|
233
|
-
await createInterfaceWizard({
|
|
234
|
-
intro: false,
|
|
235
|
-
knowledgeBasePathOverride: knowledgeBasePath,
|
|
236
|
-
knowledgeBaseNameOverride: name,
|
|
237
|
-
executionProfile: options.executionProfile,
|
|
238
|
-
suggestedInterface: configuredInterface
|
|
239
|
-
? { name: configuredInterface.name, about: configuredInterface.about }
|
|
240
|
-
: undefined,
|
|
241
|
-
});
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
p.outro([
|
|
245
|
-
`Knowledge base ready: ${knowledgeBasePath}`,
|
|
246
|
-
`CLI control plane: ${cwd}`,
|
|
247
|
-
`Workspace entrypoint: ${knowledgeBasePath}`,
|
|
248
|
-
`Open this folder to inspect the compiled workspace: ${knowledgeBasePath}`,
|
|
249
|
-
`If you use Obsidian, open this folder as the vault to browse the graph.`,
|
|
250
|
-
`Next: \`interf create interface\` from ${cwd} when you want a focused interface for a specific job.`,
|
|
251
|
-
].join("\n"));
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
p.outro([
|
|
255
|
-
`Knowledge base created: ${knowledgeBasePath}`,
|
|
256
|
-
`The compile did not complete cleanly.`,
|
|
257
|
-
`Next: rerun \`cd ${knowledgeBasePath} && interf compile\` after fixing the reported issue, or run \`interf compile\` from ${cwd}.`,
|
|
258
|
-
].join("\n"));
|
|
259
|
-
process.exitCode = 1;
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
p.outro([
|
|
263
|
-
`Knowledge base created: ${knowledgeBasePath}`,
|
|
264
|
-
`CLI control plane: ${cwd}`,
|
|
265
|
-
`Workspace entrypoint: ${knowledgeBasePath}`,
|
|
266
|
-
`Open this folder to inspect the compiled workspace: ${knowledgeBasePath}`,
|
|
267
|
-
`Next: run \`cd ${knowledgeBasePath} && interf compile\`, or run \`interf compile\` from ${cwd}.`,
|
|
268
|
-
].join("\n"));
|
|
269
|
-
}
|
|
270
|
-
export async function createInterfaceWizard(options = {}) {
|
|
271
|
-
if (options.intro !== false) {
|
|
272
|
-
p.intro(chalk.bold("Create an interface"));
|
|
273
|
-
}
|
|
274
|
-
p.log.info("Start with the main compiled workspace first.");
|
|
275
|
-
p.log.info("An interface is a second compiled workspace for one recurring job on top of the main compiled workspace.");
|
|
276
|
-
p.log.info("Use it when one shared workspace is not enough and your agent needs narrower retrieval, job-specific outputs, or extra task-specific evals.");
|
|
277
|
-
// Find the knowledge-base — either cwd has interf/ or we look up registry
|
|
278
|
-
const cwd = process.cwd();
|
|
279
|
-
const detected = detectInterf(cwd);
|
|
280
|
-
const localKnowledgeBases = listKnowledgeBasesForSourceFolder(cwd);
|
|
281
|
-
let knowledgeBasePath;
|
|
282
|
-
let connectedKnowledgeBaseName;
|
|
283
|
-
if (options.knowledgeBasePathOverride && options.knowledgeBaseNameOverride) {
|
|
284
|
-
knowledgeBasePath = options.knowledgeBasePathOverride;
|
|
285
|
-
connectedKnowledgeBaseName = options.knowledgeBaseNameOverride;
|
|
286
|
-
}
|
|
287
|
-
else if (detected && detected.config.type === "knowledge-base") {
|
|
288
|
-
const useCurrentKnowledgeBase = await p.confirm({
|
|
289
|
-
message: `Use the current knowledge base "${detected.config.name}"?`,
|
|
290
|
-
initialValue: true,
|
|
291
|
-
});
|
|
292
|
-
if (p.isCancel(useCurrentKnowledgeBase))
|
|
293
|
-
return;
|
|
294
|
-
if (useCurrentKnowledgeBase) {
|
|
295
|
-
knowledgeBasePath = detected.path;
|
|
296
|
-
connectedKnowledgeBaseName = detected.config.name;
|
|
297
|
-
}
|
|
298
|
-
else {
|
|
299
|
-
const availableKnowledgeBases = [
|
|
300
|
-
...localKnowledgeBases
|
|
301
|
-
.filter((knowledgeBase) => knowledgeBase.path !== detected.path)
|
|
302
|
-
.map((knowledgeBase) => ({
|
|
303
|
-
path: knowledgeBase.path,
|
|
304
|
-
name: knowledgeBase.config.name,
|
|
305
|
-
label: `${knowledgeBase.config.name} (${knowledgeBase.path})`,
|
|
306
|
-
})),
|
|
307
|
-
...loadRegistry().knowledgeBases
|
|
308
|
-
.filter((knowledgeBase) => knowledgeBase.path !== detected.path)
|
|
309
|
-
.map((knowledgeBase) => ({
|
|
310
|
-
path: knowledgeBase.path,
|
|
311
|
-
name: knowledgeBase.name,
|
|
312
|
-
label: `${knowledgeBase.name} (${knowledgeBase.path})`,
|
|
313
|
-
})),
|
|
314
|
-
];
|
|
315
|
-
const uniqueKnowledgeBases = Array.from(new Map(availableKnowledgeBases.map((knowledgeBase) => [knowledgeBase.path, knowledgeBase])).values());
|
|
316
|
-
if (uniqueKnowledgeBases.length === 0) {
|
|
317
|
-
process.exitCode = 1;
|
|
318
|
-
p.log.error("No other knowledge bases found. Use the current one or create another knowledge base first.");
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
|
-
const choice = await p.select({
|
|
322
|
-
message: "Which knowledge base?",
|
|
323
|
-
options: uniqueKnowledgeBases.map((knowledgeBase) => ({
|
|
324
|
-
value: knowledgeBase.path,
|
|
325
|
-
label: knowledgeBase.label,
|
|
326
|
-
})),
|
|
327
|
-
});
|
|
328
|
-
if (p.isCancel(choice))
|
|
329
|
-
return;
|
|
330
|
-
const knowledgeBase = uniqueKnowledgeBases.find((entry) => entry.path === choice);
|
|
331
|
-
knowledgeBasePath = knowledgeBase.path;
|
|
332
|
-
connectedKnowledgeBaseName = knowledgeBase.name;
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
else if (localKnowledgeBases.length > 0) {
|
|
336
|
-
const choice = await p.select({
|
|
337
|
-
message: "Which local knowledge base?",
|
|
338
|
-
options: localKnowledgeBases.map((knowledgeBase) => ({
|
|
339
|
-
value: knowledgeBase.path,
|
|
340
|
-
label: `${knowledgeBase.config.name} (${knowledgeBase.path})`,
|
|
341
|
-
})),
|
|
342
|
-
});
|
|
343
|
-
if (p.isCancel(choice))
|
|
344
|
-
return;
|
|
345
|
-
const knowledgeBase = localKnowledgeBases.find((entry) => entry.path === choice);
|
|
346
|
-
knowledgeBasePath = knowledgeBase.path;
|
|
347
|
-
connectedKnowledgeBaseName = knowledgeBase.config.name;
|
|
348
|
-
}
|
|
349
|
-
else {
|
|
350
|
-
const reg = loadRegistry();
|
|
351
|
-
if (reg.knowledgeBases.length === 0) {
|
|
352
|
-
process.exitCode = 1;
|
|
353
|
-
p.log.error("No knowledge bases found. Create one first: interf create knowledge-base");
|
|
354
|
-
return;
|
|
355
|
-
}
|
|
356
|
-
const choice = await p.select({
|
|
357
|
-
message: "Which knowledge base?",
|
|
358
|
-
options: reg.knowledgeBases.map((knowledgeBase) => ({
|
|
359
|
-
value: knowledgeBase.path,
|
|
360
|
-
label: `${knowledgeBase.name} (${knowledgeBase.path})`,
|
|
361
|
-
})),
|
|
362
|
-
});
|
|
363
|
-
if (p.isCancel(choice))
|
|
364
|
-
return;
|
|
365
|
-
const knowledgeBase = reg.knowledgeBases.find((entry) => entry.path === choice);
|
|
366
|
-
knowledgeBasePath = knowledgeBase.path;
|
|
367
|
-
connectedKnowledgeBaseName = knowledgeBase.name;
|
|
368
|
-
}
|
|
369
|
-
const sourcePath = resolveKnowledgeBaseSourcePath(knowledgeBasePath);
|
|
370
|
-
const configuredInterfaces = loadSourceFolderConfig(sourcePath)?.interfaces ?? [];
|
|
371
|
-
let interfaceConfig = null;
|
|
372
|
-
let createdFromConfigWizard = false;
|
|
373
|
-
if (options.suggestedInterface?.name) {
|
|
374
|
-
interfaceConfig =
|
|
375
|
-
configuredInterfaces.find((entry) => entry.name === options.suggestedInterface?.name) ??
|
|
376
|
-
options.suggestedInterface;
|
|
377
|
-
p.log.info(`Using configured interface "${interfaceConfig.name}" from ${sourcePath}/interf.config.json.`);
|
|
378
|
-
p.log.info(`Interface purpose: ${interfaceConfig.about}`);
|
|
379
|
-
}
|
|
380
|
-
else if (configuredInterfaces.length === 1) {
|
|
381
|
-
interfaceConfig = configuredInterfaces[0];
|
|
382
|
-
p.log.info(`Using configured interface "${interfaceConfig.name}" from ${sourcePath}/interf.config.json.`);
|
|
383
|
-
p.log.info(`Interface purpose: ${interfaceConfig.about}`);
|
|
384
|
-
}
|
|
385
|
-
else if (configuredInterfaces.length > 1) {
|
|
386
|
-
const choice = await p.select({
|
|
387
|
-
message: "Which configured interface?",
|
|
388
|
-
options: [
|
|
389
|
-
...configuredInterfaces.map((entry) => ({
|
|
390
|
-
value: entry.name,
|
|
391
|
-
label: entry.name,
|
|
392
|
-
hint: entry.about,
|
|
393
|
-
})),
|
|
394
|
-
{
|
|
395
|
-
value: "__create_new__",
|
|
396
|
-
label: "Create new interface",
|
|
397
|
-
hint: "Add a new interface to interf.config.json first",
|
|
398
|
-
},
|
|
399
|
-
],
|
|
400
|
-
});
|
|
401
|
-
if (p.isCancel(choice))
|
|
402
|
-
return;
|
|
403
|
-
if (choice !== "__create_new__") {
|
|
404
|
-
interfaceConfig = configuredInterfaces.find((entry) => entry.name === choice);
|
|
405
|
-
p.log.info(`Using configured interface "${interfaceConfig.name}" from ${sourcePath}/interf.config.json.`);
|
|
406
|
-
p.log.info(`Interface purpose: ${interfaceConfig.about}`);
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
if (!interfaceConfig) {
|
|
410
|
-
interfaceConfig = await promptSingleInterfaceConfig();
|
|
411
|
-
if (!interfaceConfig)
|
|
412
|
-
return;
|
|
413
|
-
upsertSourceFolderInterfaceConfig(sourcePath, interfaceConfig);
|
|
414
|
-
createdFromConfigWizard = true;
|
|
415
|
-
p.log.info(`Saved interface "${interfaceConfig.name}" to ${sourcePath}/interf.config.json.`);
|
|
416
|
-
}
|
|
417
|
-
const name = interfaceConfig.name;
|
|
418
|
-
const workflowChoices = Array.from(new Map([
|
|
419
|
-
...listKnowledgeBaseInterfaceWorkflowChoices(knowledgeBasePath),
|
|
420
|
-
...listInterfaceWorkflowChoices(sourcePath),
|
|
421
|
-
].map((option) => [option.id, option])).values());
|
|
422
|
-
let selectedWorkflow;
|
|
423
|
-
if (workflowChoices.length === 1) {
|
|
424
|
-
selectedWorkflow = workflowChoices[0].id;
|
|
425
|
-
p.log.info(`Workflow: ${workflowChoices[0].label}`);
|
|
426
|
-
}
|
|
427
|
-
else {
|
|
428
|
-
const workflow = await chooseInterfaceWorkflow(knowledgeBasePath);
|
|
429
|
-
if (p.isCancel(workflow))
|
|
430
|
-
return;
|
|
431
|
-
selectedWorkflow = workflow;
|
|
432
|
-
}
|
|
433
|
-
const workflowInfo = workflowChoices.find((option) => option.id === selectedWorkflow);
|
|
434
|
-
const interfaceStageSequence = workflowInfo.stages.map((stage) => stage.label).join(" -> ");
|
|
435
|
-
p.log.info(`Interface workflow = the default ${interfaceStageSequence} method for this interface. You can edit it later in \`workflow/\` or create your own saved workflow.`);
|
|
436
|
-
p.log.info(`${workflowInfo.label}: ${workflowInfo.hint}`);
|
|
437
|
-
const { executor, error } = resolveLocalExecutor({ executionProfile: options.executionProfile });
|
|
438
|
-
if (!executor) {
|
|
100
|
+
const workflowId = workflowChoice;
|
|
101
|
+
const configToSave = {
|
|
102
|
+
...draft,
|
|
103
|
+
workflow: workflowId,
|
|
104
|
+
};
|
|
105
|
+
const existingNames = new Set((existingConfig?.workspaces ?? []).map((workspace) => workspace.name));
|
|
106
|
+
if (existingNames.has(configToSave.name)) {
|
|
439
107
|
process.exitCode = 1;
|
|
440
|
-
p.log.error(
|
|
108
|
+
p.log.error(`Workspace "${configToSave.name}" already exists. Use \`interf\` or \`interf init\` to edit it.`);
|
|
441
109
|
return;
|
|
442
110
|
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
111
|
+
upsertSourceWorkspaceConfig(cwd, configToSave);
|
|
112
|
+
const name = configToSave.name;
|
|
113
|
+
const about = configToSave.about;
|
|
114
|
+
const spinner = p.spinner();
|
|
115
|
+
spinner.start("Creating workspace...");
|
|
116
|
+
let workspacePath = "";
|
|
448
117
|
try {
|
|
449
|
-
|
|
118
|
+
workspacePath = ensureWorkspaceFromConfig(cwd, configToSave);
|
|
119
|
+
spinner.stop("Workspace created.");
|
|
450
120
|
}
|
|
451
121
|
catch (error) {
|
|
122
|
+
spinner.stop("Workspace creation failed.");
|
|
452
123
|
process.exitCode = 1;
|
|
453
|
-
p.log.error(error instanceof Error ? error.message :
|
|
124
|
+
p.log.error(error instanceof Error ? error.message : String(error));
|
|
454
125
|
return;
|
|
455
126
|
}
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
p.log.info("When you compile it, Interf narrows retrieval and writes outputs for that recurring job.");
|
|
459
|
-
if (createdFromConfigWizard) {
|
|
460
|
-
p.log.info("The interface config is now the source of truth. This command used it to create the scaffold.");
|
|
461
|
-
}
|
|
462
|
-
const createdInterfaceConfig = readInterfConfig(dirPath);
|
|
463
|
-
if (createdInterfaceConfig?.workflow) {
|
|
464
|
-
p.log.info(`Workflow: ${createdInterfaceConfig.workflow}`);
|
|
465
|
-
}
|
|
466
|
-
writeInterfaceCompilePlanTemplate(dirPath, {
|
|
467
|
-
workflowId: selectedWorkflow,
|
|
468
|
-
sourcePath,
|
|
469
|
-
interfaceName: name,
|
|
470
|
-
useCase: interfaceConfig.about.trim(),
|
|
471
|
-
});
|
|
472
|
-
addInterface(name, dirPath, connectedKnowledgeBaseName, knowledgeBasePath, selectedWorkflow);
|
|
473
|
-
const buildNow = await p.confirm({
|
|
474
|
-
message: "Compile this interface now?",
|
|
127
|
+
const compileNow = await p.confirm({
|
|
128
|
+
message: "Build it now? (Recommended)",
|
|
475
129
|
initialValue: true,
|
|
476
130
|
});
|
|
477
|
-
if (p.isCancel(
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
if (built) {
|
|
482
|
-
p.outro([
|
|
483
|
-
`Interface ready: ${dirPath}`,
|
|
484
|
-
`CLI control plane: ${sourcePath}`,
|
|
485
|
-
`Workspace entrypoint: ${dirPath}`,
|
|
486
|
-
`Open the main workspace here: ${knowledgeBasePath}`,
|
|
487
|
-
`Open the interface here: ${dirPath}`,
|
|
488
|
-
`If you use Obsidian, open the knowledge-base folder as the vault so interface links resolve cleanly.`,
|
|
489
|
-
].join("\n"));
|
|
490
|
-
return;
|
|
491
|
-
}
|
|
492
|
-
p.outro([
|
|
493
|
-
`Interface created: ${dirPath}`,
|
|
494
|
-
`The compile did not complete cleanly.`,
|
|
495
|
-
`Next: rerun \`cd ${dirPath} && interf compile\` after fixing the reported issue, or run \`interf compile\` from the source folder.`,
|
|
496
|
-
].join("\n"));
|
|
497
|
-
process.exitCode = 1;
|
|
131
|
+
if (p.isCancel(compileNow) || !compileNow) {
|
|
132
|
+
p.outro(configToSave.checks.length > 0
|
|
133
|
+
? "Next:\n interf compile\n interf test"
|
|
134
|
+
: "Next:\n interf compile\n interf or interf init");
|
|
498
135
|
return;
|
|
499
136
|
}
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
`CLI control plane: ${sourcePath}`,
|
|
503
|
-
`Workspace entrypoint: ${dirPath}`,
|
|
504
|
-
`Open the interface here: ${dirPath}`,
|
|
505
|
-
`If you use Obsidian, open the knowledge-base folder as the vault: ${knowledgeBasePath}`,
|
|
506
|
-
`Next: run \`cd ${dirPath} && interf compile\`, or run \`interf compile\` from ${sourcePath}.`,
|
|
507
|
-
].join("\n"));
|
|
508
|
-
}
|
|
509
|
-
function createWizardReporter() {
|
|
510
|
-
return {
|
|
511
|
-
line: (message) => console.log(chalk.dim(` ${message}`)),
|
|
512
|
-
blankLine: () => console.log(),
|
|
513
|
-
};
|
|
514
|
-
}
|
|
515
|
-
async function runKnowledgeBaseCompile(executor, knowledgeBasePath) {
|
|
516
|
-
console.log();
|
|
517
|
-
console.log(chalk.bold(" Compiling knowledge base..."));
|
|
518
|
-
console.log();
|
|
519
|
-
const result = await compileKnowledgeBaseWorkflow({
|
|
520
|
-
executor,
|
|
521
|
-
knowledgeBasePath,
|
|
522
|
-
reporter: createWizardReporter(),
|
|
137
|
+
const { executor, error } = await resolveOrConfigureLocalExecutor({
|
|
138
|
+
executionProfile: options.executionProfile,
|
|
523
139
|
});
|
|
524
|
-
if (!
|
|
140
|
+
if (!executor) {
|
|
525
141
|
process.exitCode = 1;
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
console.log(chalk.red(` ${failedStage} failed.`));
|
|
529
|
-
return false;
|
|
142
|
+
p.log.error(error ?? "No coding agent detected.");
|
|
143
|
+
return;
|
|
530
144
|
}
|
|
531
|
-
|
|
532
|
-
console.log(chalk.green(" ✓ Knowledge base ready."));
|
|
533
|
-
return true;
|
|
145
|
+
await compileWorkspaceAfterCreate(executor, workspacePath);
|
|
534
146
|
}
|
|
535
|
-
async function
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
console.log();
|
|
539
|
-
const result = await compileInterfaceWorkflow({
|
|
540
|
-
executor,
|
|
541
|
-
knowledgeBasePath: interfacePath,
|
|
542
|
-
reporter: createWizardReporter(),
|
|
543
|
-
});
|
|
544
|
-
if (!result.ok) {
|
|
147
|
+
async function compileWorkspaceAfterCreate(executor, workspacePath) {
|
|
148
|
+
const compiled = await compileWorkspaceWithReporter(executor, workspacePath);
|
|
149
|
+
if (!compiled.ok) {
|
|
545
150
|
process.exitCode = 1;
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
console.log(chalk.red(` ${failedStage} failed.`));
|
|
549
|
-
return false;
|
|
151
|
+
console.log(chalk.red(" Workspace compile failed."));
|
|
152
|
+
return;
|
|
550
153
|
}
|
|
551
|
-
console.log();
|
|
552
|
-
console.log(chalk.green(" ✓ Interface ready."));
|
|
553
|
-
return true;
|
|
554
154
|
}
|
|
155
|
+
export { formatWorkflowLabel, chooseWorkspaceWorkflow, createWorkflowWizard, createWorkspaceWorkflowWizard, } from "./create-workflow-wizard.js";
|
|
555
156
|
//# sourceMappingURL=create.js.map
|