@interf/compiler 0.2.4 → 0.3.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/README.md +194 -148
- package/dist/commands/benchmark.d.ts.map +1 -1
- package/dist/commands/benchmark.js +60 -351
- package/dist/commands/benchmark.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +43 -110
- 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 +29 -214
- 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 +72 -455
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/default.d.ts.map +1 -1
- package/dist/commands/default.js +16 -28
- package/dist/commands/default.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +71 -337
- 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 +13 -6
- package/dist/commands/source-config-wizard.d.ts.map +1 -1
- package/dist/commands/source-config-wizard.js +93 -59
- 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/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +59 -98
- package/dist/commands/verify.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -6
- 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/benchmark-execution.d.ts.map +1 -1
- package/dist/lib/benchmark-execution.js +7 -16
- package/dist/lib/benchmark-execution.js.map +1 -1
- package/dist/lib/benchmark-targets.d.ts +3 -4
- package/dist/lib/benchmark-targets.d.ts.map +1 -1
- package/dist/lib/benchmark-targets.js +9 -55
- 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 +98 -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 +94 -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 +42 -94
- package/dist/lib/local-workflows.js.map +1 -1
- package/dist/lib/obsidian.d.ts +1 -5
- package/dist/lib/obsidian.d.ts.map +1 -1
- package/dist/lib/obsidian.js +11 -165
- 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 +2 -3
- package/dist/lib/runtime-contracts.d.ts.map +1 -1
- package/dist/lib/runtime-contracts.js +10 -9
- package/dist/lib/runtime-contracts.js.map +1 -1
- package/dist/lib/runtime-reconcile.d.ts +2 -5
- package/dist/lib/runtime-reconcile.d.ts.map +1 -1
- package/dist/lib/runtime-reconcile.js +23 -176
- 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 +52 -57
- package/dist/lib/runtime-runs.js.map +1 -1
- package/dist/lib/runtime-types.d.ts +5 -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 +53 -312
- package/dist/lib/schema.d.ts.map +1 -1
- package/dist/lib/schema.js +39 -206
- package/dist/lib/schema.js.map +1 -1
- package/dist/lib/source-config.d.ts +7 -7
- package/dist/lib/source-config.d.ts.map +1 -1
- package/dist/lib/source-config.js +55 -62
- 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 +27 -223
- 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 +26 -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} +8 -8
- package/dist/lib/validate-workspace.d.ts.map +1 -0
- package/dist/lib/{validate-kb.js → validate-workspace.js} +44 -46
- 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 +6 -19
- 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 +74 -349
- 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 +15 -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 +13 -30
- package/dist/lib/workflows.js.map +1 -1
- package/dist/lib/workspace-compile.d.ts +50 -0
- package/dist/lib/workspace-compile.d.ts.map +1 -0
- package/dist/lib/{workflows-kb.js → workspace-compile.js} +81 -89
- package/dist/lib/workspace-compile.js.map +1 -0
- package/package.json +9 -9
- package/skills/benchmark/SKILL.md +16 -24
- package/skills/workflow/create/SKILL.md +7 -14
- package/templates/workspace/README.md +23 -0
- package/templates/workspace/interfignore +2 -0
- 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.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.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
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
import type { CommandModule } from "yargs";
|
|
2
2
|
import type { WorkflowExecutionProfile } from "../lib/executors.js";
|
|
3
|
-
import type { SourceInterfaceConfig } from "../lib/schema.js";
|
|
4
|
-
export { type WorkflowWizardPrompts, buildKnowledgeBaseWorkflowOptions, buildInterfaceWorkflowOptions, buildStandaloneInterfaceWorkflowOptions, selectWorkflowTargetType, formatWorkflowLabel, CREATE_NEW_WORKFLOW_VALUE, chooseKnowledgeBaseWorkflow, chooseInterfaceWorkflow, createWorkflowWizard, createKnowledgeBaseWorkflowWizard, createInterfaceWorkflowWizard, } from "./create-workflow-wizard.js";
|
|
5
3
|
export declare const createCommand: CommandModule;
|
|
6
|
-
export declare function
|
|
4
|
+
export declare function createWorkspaceWizard(options?: {
|
|
7
5
|
intro?: boolean;
|
|
8
|
-
skipSkillInstall?: boolean;
|
|
9
6
|
executionProfile?: WorkflowExecutionProfile;
|
|
10
7
|
}): Promise<void>;
|
|
11
|
-
export
|
|
12
|
-
intro?: boolean;
|
|
13
|
-
knowledgeBasePathOverride?: string;
|
|
14
|
-
knowledgeBaseNameOverride?: string;
|
|
15
|
-
executionProfile?: WorkflowExecutionProfile;
|
|
16
|
-
suggestedInterface?: SourceInterfaceConfig;
|
|
17
|
-
}): Promise<void>;
|
|
8
|
+
export { type WorkflowWizardPrompts, formatWorkflowLabel, chooseWorkspaceWorkflow, createWorkflowWizard, createWorkspaceWorkflowWizard, } from "./create-workflow-wizard.js";
|
|
18
9
|
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAO3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAyCpE,eAAO,MAAM,aAAa,EAAE,aAmC3B,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;CACxC,iBAmFP;AAkCD,OAAO,EACL,KAAK,qBAAqB,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,6BAA6B,CAAC"}
|
package/dist/commands/create.js
CHANGED
|
@@ -1,30 +1,20 @@
|
|
|
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 {
|
|
6
|
-
import { addKnowledgeBaseWithWorkflow, addInterface, loadRegistry } from "../lib/registry.js";
|
|
4
|
+
import { detectInterf, defaultWorkspaceNameForSource, listWorkspacesForSourceFolder, } from "../lib/interf.js";
|
|
5
|
+
import { addWorkspace, } from "../lib/registry.js";
|
|
7
6
|
import { resolveLocalExecutor } from "../lib/executors.js";
|
|
8
|
-
import {
|
|
9
|
-
import { formatInterfaceWorkflowStageStep, formatKnowledgeBaseWorkflowStageStep, listInterfaceWorkflowChoices, listKnowledgeBaseInterfaceWorkflowChoices, resolveInterfaceWorkflowFromConfig, resolveKnowledgeBaseWorkflowFromConfig, } from "../lib/workflow-definitions.js";
|
|
10
|
-
import { createKnowledgeBase, createInterface, compileKnowledgeBase as compileKnowledgeBaseWorkflow, compileInterface as compileInterfaceWorkflow, } from "../lib/workflows.js";
|
|
7
|
+
import { createWorkspace, compileWorkspace, } from "../lib/workflows.js";
|
|
11
8
|
import { slugify } from "../lib/util.js";
|
|
12
9
|
import { addExecutionProfileOptions, executionProfileFromArgv, formatWorkflowExecutionProfile, } from "../lib/execution-profile.js";
|
|
13
|
-
import {
|
|
14
|
-
import { promptSingleInterfaceConfig } from "./source-config-wizard.js";
|
|
15
|
-
import { chooseKnowledgeBaseWorkflow, chooseInterfaceWorkflow, createWorkflowWizard, } from "./create-workflow-wizard.js";
|
|
16
|
-
export { buildKnowledgeBaseWorkflowOptions, buildInterfaceWorkflowOptions, buildStandaloneInterfaceWorkflowOptions, selectWorkflowTargetType, formatWorkflowLabel, CREATE_NEW_WORKFLOW_VALUE, chooseKnowledgeBaseWorkflow, chooseInterfaceWorkflow, createWorkflowWizard, createKnowledgeBaseWorkflowWizard, createInterfaceWorkflowWizard, } from "./create-workflow-wizard.js";
|
|
10
|
+
import { chooseWorkspaceWorkflow, createWorkflowWizard, } from "./create-workflow-wizard.js";
|
|
17
11
|
function normalizeCreateTarget(value) {
|
|
18
12
|
if (!value)
|
|
19
13
|
return null;
|
|
20
14
|
switch (value) {
|
|
21
|
-
case "
|
|
22
|
-
case "
|
|
23
|
-
|
|
24
|
-
case "kb":
|
|
25
|
-
return "knowledge-base";
|
|
26
|
-
case "interface":
|
|
27
|
-
return "interface";
|
|
15
|
+
case "workspace":
|
|
16
|
+
case "ws":
|
|
17
|
+
return "workspace";
|
|
28
18
|
case "workflow":
|
|
29
19
|
case "wf":
|
|
30
20
|
return "workflow";
|
|
@@ -33,57 +23,28 @@ function normalizeCreateTarget(value) {
|
|
|
33
23
|
}
|
|
34
24
|
}
|
|
35
25
|
async function selectCreateTarget() {
|
|
36
|
-
const detected = detectInterf(process.cwd());
|
|
37
|
-
const registry = loadRegistry();
|
|
38
|
-
if (!detected && registry.knowledgeBases.length === 0) {
|
|
39
|
-
return "knowledge-base";
|
|
40
|
-
}
|
|
41
|
-
const recommendInterface = Boolean(detected);
|
|
42
26
|
return p.select({
|
|
43
27
|
message: "Create what?",
|
|
44
|
-
options:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
{
|
|
57
|
-
value: "workflow",
|
|
58
|
-
label: "Workflow",
|
|
59
|
-
hint: "Create a reusable workflow package for knowledge bases or interfaces",
|
|
60
|
-
},
|
|
61
|
-
]
|
|
62
|
-
: [
|
|
63
|
-
{
|
|
64
|
-
value: "knowledge-base",
|
|
65
|
-
label: "Knowledge Base (Recommended)",
|
|
66
|
-
hint: "Attach the current folder as a new local knowledge base",
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
value: "interface",
|
|
70
|
-
label: "Interface",
|
|
71
|
-
hint: "Create an interface from a knowledge base already in your registry",
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
value: "workflow",
|
|
75
|
-
label: "Workflow",
|
|
76
|
-
hint: "Create a reusable workflow package for knowledge bases or interfaces",
|
|
77
|
-
},
|
|
78
|
-
],
|
|
28
|
+
options: [
|
|
29
|
+
{
|
|
30
|
+
value: "workspace",
|
|
31
|
+
label: "Workspace (Recommended)",
|
|
32
|
+
hint: "Create a compiled workspace for this folder",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
value: "workflow",
|
|
36
|
+
label: "Workflow",
|
|
37
|
+
hint: "Create a reusable local workflow package",
|
|
38
|
+
},
|
|
39
|
+
],
|
|
79
40
|
});
|
|
80
41
|
}
|
|
81
42
|
export const createCommand = {
|
|
82
43
|
command: "create [type]",
|
|
83
|
-
describe: "Create a
|
|
44
|
+
describe: "Create a compiled workspace or reusable workflow",
|
|
84
45
|
builder: (yargs) => addExecutionProfileOptions(yargs.positional("type", {
|
|
85
46
|
type: "string",
|
|
86
|
-
describe: "Type to create (`
|
|
47
|
+
describe: "Type to create (`workspace` or `workflow`)",
|
|
87
48
|
default: undefined,
|
|
88
49
|
})),
|
|
89
50
|
handler: async (argv) => {
|
|
@@ -101,449 +62,105 @@ export const createCommand = {
|
|
|
101
62
|
return;
|
|
102
63
|
type = selected;
|
|
103
64
|
}
|
|
104
|
-
if (type === "knowledge-base") {
|
|
105
|
-
await createKnowledgeBaseWizard({ executionProfile });
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
65
|
if (type === "workflow") {
|
|
109
|
-
|
|
110
|
-
const detected = detectInterf(cwd);
|
|
111
|
-
let sourcePath = cwd;
|
|
112
|
-
let knowledgeBasePath;
|
|
113
|
-
if (detected?.config.type === "knowledge-base") {
|
|
114
|
-
knowledgeBasePath = detected.path;
|
|
115
|
-
sourcePath = resolveKnowledgeBaseSourcePath(detected.path);
|
|
116
|
-
}
|
|
117
|
-
else if (detected?.config.type === "interface") {
|
|
118
|
-
const parentKnowledgeBasePath = resolveInterfaceKnowledgeBasePath(detected.path);
|
|
119
|
-
if (parentKnowledgeBasePath) {
|
|
120
|
-
knowledgeBasePath = parentKnowledgeBasePath;
|
|
121
|
-
sourcePath = resolveKnowledgeBaseSourcePath(parentKnowledgeBasePath);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
const localKnowledgeBases = listKnowledgeBasesForSourceFolder(cwd);
|
|
126
|
-
if (localKnowledgeBases.length === 1) {
|
|
127
|
-
const localKnowledgeBase = localKnowledgeBases[0];
|
|
128
|
-
knowledgeBasePath = localKnowledgeBase.path;
|
|
129
|
-
sourcePath = resolveKnowledgeBaseSourcePath(localKnowledgeBase.path);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
await createWorkflowWizard({ sourcePath, knowledgeBasePath });
|
|
66
|
+
await createWorkflowWizard({ sourcePath: process.cwd() });
|
|
133
67
|
return;
|
|
134
68
|
}
|
|
135
|
-
await
|
|
69
|
+
await createWorkspaceWizard({ executionProfile });
|
|
136
70
|
},
|
|
137
71
|
};
|
|
138
|
-
export async function
|
|
72
|
+
export async function createWorkspaceWizard(options = {}) {
|
|
139
73
|
if (options.intro !== false) {
|
|
140
|
-
p.intro(chalk.bold("Create a
|
|
74
|
+
p.intro(chalk.bold("Create a workspace"));
|
|
141
75
|
}
|
|
142
|
-
p.log.info("Interf prepares a shared workspace beside this folder for your agent.");
|
|
143
|
-
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>/`.");
|
|
144
76
|
const cwd = process.cwd();
|
|
145
|
-
const
|
|
146
|
-
if (
|
|
77
|
+
const detected = detectInterf(cwd);
|
|
78
|
+
if (detected) {
|
|
147
79
|
process.exitCode = 1;
|
|
148
|
-
p.log.error("You are already inside
|
|
80
|
+
p.log.error("You are already inside a compiled workspace.");
|
|
149
81
|
return;
|
|
150
82
|
}
|
|
151
|
-
const
|
|
152
|
-
if (
|
|
153
|
-
p.log.info(`This
|
|
83
|
+
const existing = listWorkspacesForSourceFolder(cwd);
|
|
84
|
+
if (existing.length > 0) {
|
|
85
|
+
p.log.info(`This folder already has ${existing.length} workspace${existing.length === 1 ? "" : "s"}. Creating another is fine when you want to compare workflows or keep separate compiled surfaces.`);
|
|
154
86
|
}
|
|
155
|
-
|
|
87
|
+
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.");
|
|
88
|
+
const defaultName = slugify(defaultWorkspaceNameForSource(cwd) || basename(cwd));
|
|
156
89
|
const rawName = await p.text({
|
|
157
|
-
message: "
|
|
158
|
-
placeholder: defaultName || "my-
|
|
90
|
+
message: "Workspace name?",
|
|
91
|
+
placeholder: defaultName || "my-workspace",
|
|
159
92
|
initialValue: defaultName,
|
|
160
|
-
validate: (
|
|
93
|
+
validate: (value) => (value.trim().length === 0 ? "Name is required" : undefined),
|
|
161
94
|
});
|
|
162
95
|
if (p.isCancel(rawName))
|
|
163
96
|
return;
|
|
164
97
|
const name = slugify(rawName);
|
|
165
98
|
if (name !== rawName) {
|
|
166
|
-
p.log.info(`
|
|
99
|
+
p.log.info(`Workspace name: ${name}`);
|
|
167
100
|
}
|
|
168
|
-
const
|
|
101
|
+
const about = await p.text({
|
|
102
|
+
message: "What is this workspace for? (optional)",
|
|
103
|
+
placeholder: "Quarterly results workspace for finance reporting and strategy questions",
|
|
104
|
+
});
|
|
105
|
+
if (p.isCancel(about))
|
|
106
|
+
return;
|
|
107
|
+
const workflowChoice = await chooseWorkspaceWorkflow(cwd);
|
|
169
108
|
if (p.isCancel(workflowChoice))
|
|
170
109
|
return;
|
|
171
|
-
const
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
// Create
|
|
177
|
-
s.start("Creating knowledge base...");
|
|
178
|
-
let knowledgeBasePath;
|
|
110
|
+
const workflowId = workflowChoice;
|
|
111
|
+
const spinner = p.spinner();
|
|
112
|
+
spinner.start("Creating workspace...");
|
|
113
|
+
let workspacePath = "";
|
|
179
114
|
try {
|
|
180
|
-
|
|
115
|
+
workspacePath = createWorkspace(name, cwd, workflowId, String(about).trim().length > 0 ? String(about).trim() : undefined);
|
|
116
|
+
addWorkspace(name, workspacePath, workflowId);
|
|
117
|
+
spinner.stop("Workspace created.");
|
|
181
118
|
}
|
|
182
119
|
catch (error) {
|
|
183
|
-
|
|
120
|
+
spinner.stop("Workspace creation failed.");
|
|
184
121
|
process.exitCode = 1;
|
|
185
|
-
p.log.error(error instanceof Error ? error.message :
|
|
122
|
+
p.log.error(error instanceof Error ? error.message : String(error));
|
|
186
123
|
return;
|
|
187
124
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
const createdKnowledgeBaseConfig = readInterfConfig(knowledgeBasePath);
|
|
191
|
-
if (createdKnowledgeBaseConfig?.workflow) {
|
|
192
|
-
p.log.info(`Workflow: ${createdKnowledgeBaseConfig.workflow}`);
|
|
193
|
-
}
|
|
194
|
-
// Discovery preflight
|
|
195
|
-
const discovery = discoverSourceFiles(cwd, knowledgeBasePath);
|
|
196
|
-
p.log.info(`Found ${discovery.totalCount} source files ready to summarize and compile.`);
|
|
197
|
-
if (discovery.ignoredCount > 0) {
|
|
198
|
-
p.log.info("This count already excludes Interf files, hidden folders, and anything matched by `.interfignore`.");
|
|
199
|
-
}
|
|
200
|
-
if (loadUserConfig()?.viewer === "obsidian") {
|
|
201
|
-
p.log.info(`Obsidian defaults applied; knowledge base registered with Obsidian when available as "${name}".`);
|
|
202
|
-
}
|
|
203
|
-
const buildNow = await p.confirm({
|
|
204
|
-
message: "Compile this knowledge base now?",
|
|
125
|
+
const compileNow = await p.confirm({
|
|
126
|
+
message: "Build the compiled workspace now?",
|
|
205
127
|
initialValue: true,
|
|
206
128
|
});
|
|
207
|
-
if (p.isCancel(
|
|
129
|
+
if (p.isCancel(compileNow) || !compileNow) {
|
|
130
|
+
p.outro(`Next: cd ${workspacePath}\n interf compile`);
|
|
208
131
|
return;
|
|
209
|
-
if (buildNow) {
|
|
210
|
-
const { executor, error } = resolveLocalExecutor({ executionProfile: options.executionProfile });
|
|
211
|
-
if (!executor) {
|
|
212
|
-
process.exitCode = 1;
|
|
213
|
-
p.log.warn(error ?? "No local executor detected.");
|
|
214
|
-
p.outro([
|
|
215
|
-
`Knowledge base: ${knowledgeBasePath}`,
|
|
216
|
-
`Next: run \`interf compile\` from ${cwd} once an executor is configured.`,
|
|
217
|
-
].join("\n"));
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
const profileLabel = formatWorkflowExecutionProfile(executor.executionProfile);
|
|
221
|
-
if (profileLabel) {
|
|
222
|
-
p.log.info(`Execution profile: ${profileLabel}`);
|
|
223
|
-
}
|
|
224
|
-
const compiled = await runKnowledgeBaseCompile(executor, knowledgeBasePath);
|
|
225
|
-
if (compiled) {
|
|
226
|
-
const configuredInterface = loadSourceFolderConfig(cwd)?.interfaces?.[0];
|
|
227
|
-
const createFirstInterface = await p.confirm({
|
|
228
|
-
message: configuredInterface
|
|
229
|
-
? `Create the configured interface "${configuredInterface.name}" now?`
|
|
230
|
-
: "Create a first interface now?",
|
|
231
|
-
initialValue: Boolean(configuredInterface),
|
|
232
|
-
});
|
|
233
|
-
if (p.isCancel(createFirstInterface))
|
|
234
|
-
return;
|
|
235
|
-
if (createFirstInterface) {
|
|
236
|
-
await createInterfaceWizard({
|
|
237
|
-
intro: false,
|
|
238
|
-
knowledgeBasePathOverride: knowledgeBasePath,
|
|
239
|
-
knowledgeBaseNameOverride: name,
|
|
240
|
-
executionProfile: options.executionProfile,
|
|
241
|
-
suggestedInterface: configuredInterface
|
|
242
|
-
? { name: configuredInterface.name, about: configuredInterface.about }
|
|
243
|
-
: undefined,
|
|
244
|
-
});
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
p.outro([
|
|
248
|
-
`Knowledge base ready: ${knowledgeBasePath}`,
|
|
249
|
-
`CLI control plane: ${cwd}`,
|
|
250
|
-
`Workspace entrypoint: ${knowledgeBasePath}`,
|
|
251
|
-
`Browse in Obsidian or markdown from: ${knowledgeBasePath}`,
|
|
252
|
-
`Next: \`interf create interface\` from ${cwd} when you want a focused interface for a specific job.`,
|
|
253
|
-
].join("\n"));
|
|
254
|
-
return;
|
|
255
|
-
}
|
|
256
|
-
p.outro([
|
|
257
|
-
`Knowledge base created: ${knowledgeBasePath}`,
|
|
258
|
-
`The compile did not complete cleanly.`,
|
|
259
|
-
`Next: rerun \`cd ${knowledgeBasePath} && interf compile\` after fixing the reported issue, or run \`interf compile\` from ${cwd}.`,
|
|
260
|
-
].join("\n"));
|
|
261
|
-
process.exitCode = 1;
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
p.outro([
|
|
265
|
-
`Knowledge base created: ${knowledgeBasePath}`,
|
|
266
|
-
`CLI control plane: ${cwd}`,
|
|
267
|
-
`Workspace entrypoint: ${knowledgeBasePath}`,
|
|
268
|
-
`Next: run \`cd ${knowledgeBasePath} && interf compile\`, or run \`interf compile\` from ${cwd}.`,
|
|
269
|
-
].join("\n"));
|
|
270
|
-
}
|
|
271
|
-
export async function createInterfaceWizard(options = {}) {
|
|
272
|
-
if (options.intro !== false) {
|
|
273
|
-
p.intro(chalk.bold("Create an interface"));
|
|
274
|
-
}
|
|
275
|
-
p.log.info("An interface is a task-specific workspace on top of a knowledge base.");
|
|
276
|
-
p.log.info("Use it when one shared workspace is not enough and your agent needs outputs shaped for one job.");
|
|
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
132
|
}
|
|
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
|
-
}
|
|
379
|
-
else if (configuredInterfaces.length === 1) {
|
|
380
|
-
interfaceConfig = configuredInterfaces[0];
|
|
381
|
-
p.log.info(`Using configured interface "${interfaceConfig.name}" from ${sourcePath}/interf.config.json.`);
|
|
382
|
-
}
|
|
383
|
-
else if (configuredInterfaces.length > 1) {
|
|
384
|
-
const choice = await p.select({
|
|
385
|
-
message: "Which configured interface?",
|
|
386
|
-
options: [
|
|
387
|
-
...configuredInterfaces.map((entry) => ({
|
|
388
|
-
value: entry.name,
|
|
389
|
-
label: entry.name,
|
|
390
|
-
hint: entry.about,
|
|
391
|
-
})),
|
|
392
|
-
{
|
|
393
|
-
value: "__create_new__",
|
|
394
|
-
label: "Create new interface",
|
|
395
|
-
hint: "Add a new interface to interf.config.json first",
|
|
396
|
-
},
|
|
397
|
-
],
|
|
398
|
-
});
|
|
399
|
-
if (p.isCancel(choice))
|
|
400
|
-
return;
|
|
401
|
-
if (choice !== "__create_new__") {
|
|
402
|
-
interfaceConfig = configuredInterfaces.find((entry) => entry.name === choice);
|
|
403
|
-
p.log.info(`Using configured interface "${interfaceConfig.name}" from ${sourcePath}/interf.config.json.`);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
if (!interfaceConfig) {
|
|
407
|
-
interfaceConfig = await promptSingleInterfaceConfig();
|
|
408
|
-
if (!interfaceConfig)
|
|
409
|
-
return;
|
|
410
|
-
upsertSourceFolderInterfaceConfig(sourcePath, interfaceConfig);
|
|
411
|
-
createdFromConfigWizard = true;
|
|
412
|
-
p.log.info(`Saved interface "${interfaceConfig.name}" to ${sourcePath}/interf.config.json.`);
|
|
413
|
-
}
|
|
414
|
-
const name = interfaceConfig.name;
|
|
415
|
-
const workflowChoices = Array.from(new Map([
|
|
416
|
-
...listKnowledgeBaseInterfaceWorkflowChoices(knowledgeBasePath),
|
|
417
|
-
...listInterfaceWorkflowChoices(sourcePath),
|
|
418
|
-
].map((option) => [option.id, option])).values());
|
|
419
|
-
let selectedWorkflow;
|
|
420
|
-
if (workflowChoices.length === 1) {
|
|
421
|
-
selectedWorkflow = workflowChoices[0].id;
|
|
422
|
-
p.log.info(`Workflow: ${workflowChoices[0].label}`);
|
|
423
|
-
}
|
|
424
|
-
else {
|
|
425
|
-
const workflow = await chooseInterfaceWorkflow(knowledgeBasePath);
|
|
426
|
-
if (p.isCancel(workflow))
|
|
427
|
-
return;
|
|
428
|
-
selectedWorkflow = workflow;
|
|
429
|
-
}
|
|
430
|
-
const workflowInfo = workflowChoices.find((option) => option.id === selectedWorkflow);
|
|
431
|
-
const interfaceStageSequence = workflowInfo.stages.map((stage) => stage.label).join(" -> ");
|
|
432
|
-
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.`);
|
|
433
|
-
p.log.info(`${workflowInfo.label}: ${workflowInfo.hint}`);
|
|
434
133
|
const { executor, error } = resolveLocalExecutor({ executionProfile: options.executionProfile });
|
|
435
134
|
if (!executor) {
|
|
436
135
|
process.exitCode = 1;
|
|
437
|
-
p.log.error(error ?? "No coding agent detected.
|
|
136
|
+
p.log.error(error ?? "No coding agent detected.");
|
|
438
137
|
return;
|
|
439
138
|
}
|
|
139
|
+
await compileWorkspaceAfterCreate(executor, workspacePath);
|
|
140
|
+
}
|
|
141
|
+
async function compileWorkspaceAfterCreate(executor, workspacePath) {
|
|
142
|
+
console.log();
|
|
440
143
|
const profileLabel = formatWorkflowExecutionProfile(executor.executionProfile);
|
|
441
144
|
if (profileLabel) {
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
let dirPath;
|
|
445
|
-
try {
|
|
446
|
-
dirPath = createInterface(name, knowledgeBasePath, connectedKnowledgeBaseName, selectedWorkflow);
|
|
145
|
+
console.log(chalk.dim(` Execution profile: ${profileLabel}`));
|
|
146
|
+
console.log();
|
|
447
147
|
}
|
|
448
|
-
|
|
449
|
-
process.exitCode = 1;
|
|
450
|
-
p.log.error(error instanceof Error ? error.message : "Failed to create interface scaffold.");
|
|
451
|
-
return;
|
|
452
|
-
}
|
|
453
|
-
if (loadUserConfig()?.viewer === "obsidian") {
|
|
454
|
-
p.log.info("Obsidian defaults applied. Interfaces stay inside the parent knowledge-base workspace by default so knowledge-base summaries and source links remain navigable.");
|
|
455
|
-
}
|
|
456
|
-
p.log.info(`Created interface scaffold at ${dirPath}`);
|
|
457
|
-
if (createdFromConfigWizard) {
|
|
458
|
-
p.log.info("The interface config is now the source of truth. This command used it to create the scaffold.");
|
|
459
|
-
}
|
|
460
|
-
const createdInterfaceConfig = readInterfConfig(dirPath);
|
|
461
|
-
if (createdInterfaceConfig?.workflow) {
|
|
462
|
-
p.log.info(`Workflow: ${createdInterfaceConfig.workflow}`);
|
|
463
|
-
}
|
|
464
|
-
writeInterfaceCompilePlanTemplate(dirPath, {
|
|
465
|
-
workflowId: selectedWorkflow,
|
|
466
|
-
sourcePath,
|
|
467
|
-
interfaceName: name,
|
|
468
|
-
useCase: interfaceConfig.about.trim(),
|
|
469
|
-
});
|
|
470
|
-
addInterface(name, dirPath, connectedKnowledgeBaseName, knowledgeBasePath, selectedWorkflow);
|
|
471
|
-
const buildNow = await p.confirm({
|
|
472
|
-
message: "Compile this interface now?",
|
|
473
|
-
initialValue: true,
|
|
474
|
-
});
|
|
475
|
-
if (p.isCancel(buildNow))
|
|
476
|
-
return;
|
|
477
|
-
if (buildNow) {
|
|
478
|
-
const built = await runInterfaceCompile(executor, dirPath);
|
|
479
|
-
if (built) {
|
|
480
|
-
p.outro([
|
|
481
|
-
`Interface ready: ${dirPath}`,
|
|
482
|
-
`CLI control plane: ${sourcePath}`,
|
|
483
|
-
`Workspace entrypoint: ${dirPath}`,
|
|
484
|
-
`Browse it from the knowledge base at: ${knowledgeBasePath}`,
|
|
485
|
-
].join("\n"));
|
|
486
|
-
return;
|
|
487
|
-
}
|
|
488
|
-
p.outro([
|
|
489
|
-
`Interface created: ${dirPath}`,
|
|
490
|
-
`The compile did not complete cleanly.`,
|
|
491
|
-
`Next: rerun \`cd ${dirPath} && interf compile\` after fixing the reported issue, or run \`interf compile\` from the source folder.`,
|
|
492
|
-
].join("\n"));
|
|
493
|
-
process.exitCode = 1;
|
|
494
|
-
return;
|
|
495
|
-
}
|
|
496
|
-
p.outro([
|
|
497
|
-
`Interface created: ${dirPath}`,
|
|
498
|
-
`CLI control plane: ${sourcePath}`,
|
|
499
|
-
`Workspace entrypoint: ${dirPath}`,
|
|
500
|
-
`Next: run \`cd ${dirPath} && interf compile\`, or run \`interf compile\` from ${sourcePath}.`,
|
|
501
|
-
].join("\n"));
|
|
502
|
-
}
|
|
503
|
-
function createWizardReporter() {
|
|
504
|
-
return {
|
|
148
|
+
const reporter = {
|
|
505
149
|
line: (message) => console.log(chalk.dim(` ${message}`)),
|
|
506
150
|
blankLine: () => console.log(),
|
|
507
151
|
};
|
|
508
|
-
|
|
509
|
-
async function runKnowledgeBaseCompile(executor, knowledgeBasePath) {
|
|
510
|
-
console.log();
|
|
511
|
-
console.log(chalk.bold(" Compiling knowledge base..."));
|
|
512
|
-
console.log();
|
|
513
|
-
const result = await compileKnowledgeBaseWorkflow({
|
|
152
|
+
const result = await compileWorkspace({
|
|
514
153
|
executor,
|
|
515
|
-
|
|
516
|
-
reporter
|
|
154
|
+
workspacePath,
|
|
155
|
+
reporter,
|
|
517
156
|
});
|
|
518
157
|
if (!result.ok) {
|
|
519
158
|
process.exitCode = 1;
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
console.log(chalk.red(` ${failedStage} failed.`));
|
|
523
|
-
return false;
|
|
524
|
-
}
|
|
525
|
-
console.log();
|
|
526
|
-
console.log(chalk.green(" ✓ Knowledge base ready."));
|
|
527
|
-
return true;
|
|
528
|
-
}
|
|
529
|
-
async function runInterfaceCompile(executor, interfacePath) {
|
|
530
|
-
console.log();
|
|
531
|
-
console.log(chalk.bold(" Compiling interface..."));
|
|
532
|
-
console.log();
|
|
533
|
-
const result = await compileInterfaceWorkflow({
|
|
534
|
-
executor,
|
|
535
|
-
knowledgeBasePath: interfacePath,
|
|
536
|
-
reporter: createWizardReporter(),
|
|
537
|
-
});
|
|
538
|
-
if (!result.ok) {
|
|
539
|
-
process.exitCode = 1;
|
|
540
|
-
const workflowId = resolveInterfaceWorkflowFromConfig(readInterfConfig(interfacePath));
|
|
541
|
-
const failedStage = formatInterfaceWorkflowStageStep(workflowId, result.failedStage ?? "compile", { workspacePath: interfacePath });
|
|
542
|
-
console.log(chalk.red(` ${failedStage} failed.`));
|
|
543
|
-
return false;
|
|
159
|
+
console.log(chalk.red(" Workspace compile failed."));
|
|
160
|
+
return;
|
|
544
161
|
}
|
|
545
162
|
console.log();
|
|
546
|
-
console.log(chalk.green(" ✓
|
|
547
|
-
return true;
|
|
163
|
+
console.log(chalk.green(" ✓ Compiled workspace ready."));
|
|
548
164
|
}
|
|
165
|
+
export { formatWorkflowLabel, chooseWorkspaceWorkflow, createWorkflowWizard, createWorkspaceWorkflowWizard, } from "./create-workflow-wizard.js";
|
|
549
166
|
//# sourceMappingURL=create.js.map
|