@kilnai/cli 0.1.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/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +87 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dev-watcher.d.ts +21 -0
- package/dist/commands/dev-watcher.d.ts.map +1 -0
- package/dist/commands/dev-watcher.js +48 -0
- package/dist/commands/dev-watcher.js.map +1 -0
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +60 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/domain.d.ts +10 -0
- package/dist/commands/domain.d.ts.map +1 -0
- package/dist/commands/domain.js +274 -0
- package/dist/commands/domain.js.map +1 -0
- package/dist/commands/gateway.d.ts +2 -0
- package/dist/commands/gateway.d.ts.map +1 -0
- package/dist/commands/gateway.js +53 -0
- package/dist/commands/gateway.js.map +1 -0
- package/dist/commands/init-templates.d.ts +18 -0
- package/dist/commands/init-templates.d.ts.map +1 -0
- package/dist/commands/init-templates.js +118 -0
- package/dist/commands/init-templates.js.map +1 -0
- package/dist/commands/init.d.ts +21 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +167 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp-config.d.ts +3 -0
- package/dist/commands/mcp-config.d.ts.map +1 -0
- package/dist/commands/mcp-config.js +12 -0
- package/dist/commands/mcp-config.js.map +1 -0
- package/dist/commands/memory.d.ts +3 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +51 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/run.d.ts +10 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +141 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/serve.d.ts +7 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +24 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/skill.d.ts +3 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +101 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +27 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/formatters.d.ts +54 -0
- package/dist/formatters.d.ts.map +1 -0
- package/dist/formatters.js +214 -0
- package/dist/formatters.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +166 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/config-generator.d.ts +10 -0
- package/dist/mcp/config-generator.d.ts.map +1 -0
- package/dist/mcp/config-generator.js +49 -0
- package/dist/mcp/config-generator.js.map +1 -0
- package/dist/mcp/index.d.ts +26 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +103 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +36 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +155 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/transports.d.ts +28 -0
- package/dist/mcp/transports.d.ts.map +1 -0
- package/dist/mcp/transports.js +96 -0
- package/dist/mcp/transports.js.map +1 -0
- package/dist/mcp-entry.d.ts +3 -0
- package/dist/mcp-entry.d.ts.map +1 -0
- package/dist/mcp-entry.js +24 -0
- package/dist/mcp-entry.js.map +1 -0
- package/dist/wrapper/claude-code-process.d.ts +52 -0
- package/dist/wrapper/claude-code-process.d.ts.map +1 -0
- package/dist/wrapper/claude-code-process.js +112 -0
- package/dist/wrapper/claude-code-process.js.map +1 -0
- package/dist/wrapper/index.d.ts +42 -0
- package/dist/wrapper/index.d.ts.map +1 -0
- package/dist/wrapper/index.js +9 -0
- package/dist/wrapper/index.js.map +1 -0
- package/dist/wrapper/session-manager.d.ts +26 -0
- package/dist/wrapper/session-manager.d.ts.map +1 -0
- package/dist/wrapper/session-manager.js +89 -0
- package/dist/wrapper/session-manager.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Orchestrator } from "@kilnai/core";
|
|
2
|
+
import { KilnMcpServer } from "../mcp/server.js";
|
|
3
|
+
export async function serveCommand(appConfig, opts) {
|
|
4
|
+
const orchestrator = new Orchestrator({ requireApproval: false });
|
|
5
|
+
const server = new KilnMcpServer(orchestrator);
|
|
6
|
+
const config = {
|
|
7
|
+
type: opts?.transport ?? "stdio",
|
|
8
|
+
port: opts?.port,
|
|
9
|
+
};
|
|
10
|
+
await server.start(config);
|
|
11
|
+
if (config.type === "sse") {
|
|
12
|
+
console.error(`${appConfig.appName} MCP server running (SSE on port ${config.port ?? 3001})`);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
console.error(`${appConfig.appName} MCP server running (stdio)`);
|
|
16
|
+
}
|
|
17
|
+
const shutdown = async () => {
|
|
18
|
+
await server.stop();
|
|
19
|
+
process.exit(0);
|
|
20
|
+
};
|
|
21
|
+
process.on("SIGINT", shutdown);
|
|
22
|
+
process.on("SIGTERM", shutdown);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAwB,EAAE,IAG5D;IACC,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,YAAY,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAoB;QAC9B,IAAI,EAAE,IAAI,EAAE,SAAS,IAAI,OAAO;QAChC,IAAI,EAAE,IAAI,EAAE,IAAI;KACjB,CAAC;IAEF,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,oCAAoC,MAAM,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC;IAChG,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,6BAA6B,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;QACzC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,wBAAsB,YAAY,CAChC,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, cpSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { DomainRegistry, SkillRegistry, loadSkillYaml } from "@kilnai/core";
|
|
4
|
+
import { formatSkillList } from "../formatters.js";
|
|
5
|
+
export async function skillCommand(config, subcommand, args) {
|
|
6
|
+
switch (subcommand) {
|
|
7
|
+
case "list":
|
|
8
|
+
return listSkills(config);
|
|
9
|
+
case "install":
|
|
10
|
+
return installSkill(config, args[0]);
|
|
11
|
+
case "publish":
|
|
12
|
+
return publishSkill(config);
|
|
13
|
+
default:
|
|
14
|
+
console.log(`Usage: ${config.appName} skill <list|install|publish>`);
|
|
15
|
+
console.log("");
|
|
16
|
+
console.log("Subcommands:");
|
|
17
|
+
console.log(" list List all available skills");
|
|
18
|
+
console.log(" install <package> Install a skill package");
|
|
19
|
+
console.log(" publish Validate and prepare skill for publishing");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function listSkills(_config) {
|
|
23
|
+
const cwd = process.cwd();
|
|
24
|
+
const userHome = process.env.HOME ?? process.env.USERPROFILE ?? "";
|
|
25
|
+
// Load domain registry and discover domain package skills
|
|
26
|
+
const builtinDomains = DomainRegistry.loadBuiltinDomains();
|
|
27
|
+
const domainRegistry = new DomainRegistry({ builtinConfigs: builtinDomains });
|
|
28
|
+
domainRegistry.loadInstalledDomains(cwd);
|
|
29
|
+
// Load skill registry with 3-tier discovery
|
|
30
|
+
const skillRegistry = new SkillRegistry();
|
|
31
|
+
skillRegistry.discoverAll(cwd, userHome);
|
|
32
|
+
const skills = skillRegistry.all();
|
|
33
|
+
console.log(formatSkillList(skills));
|
|
34
|
+
}
|
|
35
|
+
async function installSkill(config, packagePath) {
|
|
36
|
+
if (!packagePath) {
|
|
37
|
+
console.error("Usage: " + config.appName + " skill install <path-or-package>");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const cwd = process.cwd();
|
|
42
|
+
const skillsDir = join(cwd, ".kiln", "skills");
|
|
43
|
+
// Resolve the source path
|
|
44
|
+
const sourcePath = resolve(packagePath);
|
|
45
|
+
if (!existsSync(sourcePath)) {
|
|
46
|
+
console.error(`Not found: ${sourcePath}`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Validate the skill YAML
|
|
51
|
+
try {
|
|
52
|
+
loadSkillYaml(sourcePath);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.error(`Invalid skill file: ${err instanceof Error ? err.message : String(err)}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Ensure skills directory exists
|
|
60
|
+
if (!existsSync(skillsDir)) {
|
|
61
|
+
mkdirSync(skillsDir, { recursive: true });
|
|
62
|
+
}
|
|
63
|
+
// Copy the skill file
|
|
64
|
+
const fileName = sourcePath.split(/[\\/]/).pop();
|
|
65
|
+
const destPath = join(skillsDir, fileName);
|
|
66
|
+
cpSync(sourcePath, destPath);
|
|
67
|
+
console.log(`Installed skill to ${destPath}`);
|
|
68
|
+
}
|
|
69
|
+
function publishSkill(_config) {
|
|
70
|
+
const cwd = process.cwd();
|
|
71
|
+
// Look for SKILL.yaml in current directory
|
|
72
|
+
const skillYamlPath = join(cwd, "SKILL.yaml");
|
|
73
|
+
const skillYmlPath = join(cwd, "SKILL.yml");
|
|
74
|
+
const filePath = existsSync(skillYamlPath) ? skillYamlPath : existsSync(skillYmlPath) ? skillYmlPath : null;
|
|
75
|
+
if (!filePath) {
|
|
76
|
+
console.error("No SKILL.yaml found in current directory.");
|
|
77
|
+
console.error("Create a SKILL.yaml with name, description, and instructions fields.");
|
|
78
|
+
process.exit(1);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Validate
|
|
82
|
+
try {
|
|
83
|
+
const skill = loadSkillYaml(filePath);
|
|
84
|
+
console.log(`Skill "${skill.name}" validated successfully.`);
|
|
85
|
+
console.log("");
|
|
86
|
+
console.log("To publish, create a kiln-package.yaml:");
|
|
87
|
+
console.log("");
|
|
88
|
+
console.log(" type: skill");
|
|
89
|
+
console.log(` version: "0.1.0"`);
|
|
90
|
+
console.log(` author: "Your Name"`);
|
|
91
|
+
console.log(` name: ${skill.name}`);
|
|
92
|
+
console.log(` description: ${skill.description}`);
|
|
93
|
+
console.log(` instructions: |`);
|
|
94
|
+
console.log(` ${skill.instructions.split("\n").join("\n ")}`);
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
console.error(`Invalid SKILL.yaml: ${err instanceof Error ? err.message : String(err)}`);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,wBAAgB,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CA4BlF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export function statusCommand(appConfig, projectPath) {
|
|
4
|
+
const root = projectPath ?? process.cwd();
|
|
5
|
+
const configPath = join(root, appConfig.dirName, "config.json");
|
|
6
|
+
if (!existsSync(configPath)) {
|
|
7
|
+
console.log(`Not initialized. Run '${appConfig.appName} init' first.`);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const raw = readFileSync(configPath, "utf-8");
|
|
11
|
+
const config = JSON.parse(raw);
|
|
12
|
+
const appLabel = appConfig.appName.charAt(0).toUpperCase() + appConfig.appName.slice(1);
|
|
13
|
+
console.log(`\n${appLabel} Project Status\n`);
|
|
14
|
+
console.log(` Domain: ${config.domain}`);
|
|
15
|
+
console.log(` Require Approval: ${config.requireApproval}`);
|
|
16
|
+
console.log(` Max Depth: ${config.maxDepth}`);
|
|
17
|
+
console.log(` Parallel Workers: ${config.parallelWorkers}`);
|
|
18
|
+
console.log(` Provider: ${config.provider}`);
|
|
19
|
+
console.log(` Mode: ${config.mode}`);
|
|
20
|
+
const memoryDir = join(root, appConfig.dirName, "memory");
|
|
21
|
+
if (existsSync(memoryDir)) {
|
|
22
|
+
const files = readdirSync(memoryDir);
|
|
23
|
+
console.log(`\n Memory files: ${files.length}`);
|
|
24
|
+
}
|
|
25
|
+
console.log("");
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,UAAU,aAAa,CAAC,SAAwB,EAAE,WAAoB;IAC1E,MAAM,IAAI,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAEhE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,yBAAyB,SAAS,CAAC,OAAO,eAAe,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAkB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAE/D,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,mBAAmB,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DomainConfig, DomainRegistry } from "@kilnai/core";
|
|
2
|
+
/** Options passed to the system prompt builder */
|
|
3
|
+
export interface SystemPromptOptions {
|
|
4
|
+
readonly task: string;
|
|
5
|
+
readonly domain: DomainConfig;
|
|
6
|
+
readonly memorySnapshot?: string;
|
|
7
|
+
readonly projectPath: string;
|
|
8
|
+
}
|
|
9
|
+
/** Configuration for a Kiln-based CLI app */
|
|
10
|
+
export interface KilnAppConfig {
|
|
11
|
+
readonly appName: string;
|
|
12
|
+
readonly dirName: string;
|
|
13
|
+
readonly version: string;
|
|
14
|
+
readonly description: string;
|
|
15
|
+
readonly createRegistry: () => DomainRegistry;
|
|
16
|
+
readonly buildSystemPrompt: (opts: SystemPromptOptions) => string;
|
|
17
|
+
readonly mcpServerName: string;
|
|
18
|
+
readonly studioDistPath?: string;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEjE,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,cAAc,CAAC;IAC9C,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,MAAM,CAAC;IAClE,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { Phase, OrchestratorStatus } from "@kilnai/core";
|
|
2
|
+
import type { TaskNode, TaskStatus } from "@kilnai/core";
|
|
3
|
+
import type { CostSummary } from "@kilnai/core";
|
|
4
|
+
import type { KilnEvent } from "@kilnai/core";
|
|
5
|
+
import { KilnError } from "@kilnai/core";
|
|
6
|
+
import type { DomainConfig } from "@kilnai/core";
|
|
7
|
+
import type { SkillConfig } from "@kilnai/core";
|
|
8
|
+
/** Ordered list of orchestrator phases */
|
|
9
|
+
export declare const PHASES: Phase[];
|
|
10
|
+
/** Human-readable labels for each phase */
|
|
11
|
+
export declare const PHASE_LABELS: Record<Phase, string>;
|
|
12
|
+
/** Status icons for task tree nodes */
|
|
13
|
+
export declare const TASK_ICONS: Record<TaskStatus, string>;
|
|
14
|
+
/**
|
|
15
|
+
* Determine whether a phase is done, active, or pending
|
|
16
|
+
* relative to the current phase and orchestrator status.
|
|
17
|
+
*/
|
|
18
|
+
export declare function phaseState(phase: Phase, currentPhase: Phase, status: OrchestratorStatus): "done" | "active" | "pending";
|
|
19
|
+
/**
|
|
20
|
+
* Format the phase progress bar as a single string.
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatPhaseBar(currentPhase: Phase, status: OrchestratorStatus): string;
|
|
23
|
+
/**
|
|
24
|
+
* Format a single task node as an indented line.
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatTaskNode(node: TaskNode): string;
|
|
27
|
+
/**
|
|
28
|
+
* Format the full task tree as an array of formatted lines.
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatTaskTree(nodes: readonly TaskNode[]): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Compute the cost per role from a CostSummary and format as a string.
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatCost(summary: CostSummary): string;
|
|
35
|
+
/**
|
|
36
|
+
* Determine the color tier for a total cost in USD.
|
|
37
|
+
*/
|
|
38
|
+
export declare function costColor(totalUsd: number): "green" | "yellow" | "red";
|
|
39
|
+
/**
|
|
40
|
+
* Format a single event as a log line.
|
|
41
|
+
*/
|
|
42
|
+
export declare function formatEvent(event: KilnEvent): string;
|
|
43
|
+
/**
|
|
44
|
+
* Format the activity log as an array of strings (last N events).
|
|
45
|
+
*/
|
|
46
|
+
export declare function formatActivityLog(events: readonly KilnEvent[], maxLines?: number): string[];
|
|
47
|
+
/** Format a KilnError with suggestion and doc link for CLI display */
|
|
48
|
+
export declare function formatError(error: KilnError): string;
|
|
49
|
+
/** Format a list of domain configs for CLI display */
|
|
50
|
+
export declare function formatDomainList(domains: readonly DomainConfig[]): string;
|
|
51
|
+
/** Format a list of skill configs for CLI display */
|
|
52
|
+
export declare function formatSkillList(skills: readonly SkillConfig[]): string;
|
|
53
|
+
export declare function stripAnsi(text: string): string;
|
|
54
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAS9C,OAAO,EAAE,SAAS,EAAsB,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,0CAA0C;AAC1C,eAAO,MAAM,MAAM,EAAE,KAAK,EAOzB,CAAC;AAEF,2CAA2C;AAC3C,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAO9C,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAOjD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,KAAK,EACnB,MAAM,EAAE,kBAAkB,GACzB,MAAM,GAAG,QAAQ,GAAG,SAAS,CAY/B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,KAAK,EACnB,MAAM,EAAE,kBAAkB,GACzB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAQrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,EAAE,CAgBnE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAcvD;AA2BD;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAItE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAmCpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,QAAQ,SAAI,GACX,MAAM,EAAE,CAGV;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAepD;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,MAAM,CAGzE;AAED,qDAAqD;AACrD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAGtE;AAQD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { getErrorSuggestion } from "@kilnai/core";
|
|
2
|
+
/** Ordered list of orchestrator phases */
|
|
3
|
+
export const PHASES = [
|
|
4
|
+
"analyze",
|
|
5
|
+
"research",
|
|
6
|
+
"architect",
|
|
7
|
+
"implement",
|
|
8
|
+
"verify",
|
|
9
|
+
"synthesize",
|
|
10
|
+
];
|
|
11
|
+
/** Human-readable labels for each phase */
|
|
12
|
+
export const PHASE_LABELS = {
|
|
13
|
+
analyze: "Analyze",
|
|
14
|
+
research: "Research",
|
|
15
|
+
architect: "Architect",
|
|
16
|
+
implement: "Implement",
|
|
17
|
+
verify: "Verify",
|
|
18
|
+
synthesize: "Synthesize",
|
|
19
|
+
};
|
|
20
|
+
/** Status icons for task tree nodes */
|
|
21
|
+
export const TASK_ICONS = {
|
|
22
|
+
proposed: "\u25CB",
|
|
23
|
+
testing: "\u25C9",
|
|
24
|
+
supported: "\u2713",
|
|
25
|
+
refuted: "\u2717",
|
|
26
|
+
rejected: "\u2298",
|
|
27
|
+
revised: "\u21BB",
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Determine whether a phase is done, active, or pending
|
|
31
|
+
* relative to the current phase and orchestrator status.
|
|
32
|
+
*/
|
|
33
|
+
export function phaseState(phase, currentPhase, status) {
|
|
34
|
+
const phaseIdx = PHASES.indexOf(phase);
|
|
35
|
+
const currentIdx = PHASES.indexOf(currentPhase);
|
|
36
|
+
if (status === "completed" || status === "failed" || status === "cancelled") {
|
|
37
|
+
if (phaseIdx <= currentIdx)
|
|
38
|
+
return "done";
|
|
39
|
+
return "pending";
|
|
40
|
+
}
|
|
41
|
+
if (phaseIdx < currentIdx)
|
|
42
|
+
return "done";
|
|
43
|
+
if (phaseIdx === currentIdx)
|
|
44
|
+
return "active";
|
|
45
|
+
return "pending";
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Format the phase progress bar as a single string.
|
|
49
|
+
*/
|
|
50
|
+
export function formatPhaseBar(currentPhase, status) {
|
|
51
|
+
const parts = PHASES.map((phase) => {
|
|
52
|
+
const state = phaseState(phase, currentPhase, status);
|
|
53
|
+
const label = PHASE_LABELS[phase];
|
|
54
|
+
if (state === "done")
|
|
55
|
+
return `[\u2713 ${label}]`;
|
|
56
|
+
if (state === "active")
|
|
57
|
+
return `[\u25CF ${label}]`;
|
|
58
|
+
return `[ ${label}]`;
|
|
59
|
+
});
|
|
60
|
+
return parts.join(" > ");
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Format a single task node as an indented line.
|
|
64
|
+
*/
|
|
65
|
+
export function formatTaskNode(node) {
|
|
66
|
+
const indent = " ".repeat(node.depth);
|
|
67
|
+
const icon = TASK_ICONS[node.status];
|
|
68
|
+
const statement = node.statement.length > 60
|
|
69
|
+
? node.statement.slice(0, 57) + "..."
|
|
70
|
+
: node.statement;
|
|
71
|
+
return `${indent}${icon} ${statement}`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Format the full task tree as an array of formatted lines.
|
|
75
|
+
*/
|
|
76
|
+
export function formatTaskTree(nodes) {
|
|
77
|
+
const statusOrder = {
|
|
78
|
+
testing: 0,
|
|
79
|
+
proposed: 1,
|
|
80
|
+
supported: 2,
|
|
81
|
+
revised: 3,
|
|
82
|
+
refuted: 4,
|
|
83
|
+
rejected: 5,
|
|
84
|
+
};
|
|
85
|
+
const sorted = [...nodes].sort((a, b) => {
|
|
86
|
+
if (a.depth !== b.depth)
|
|
87
|
+
return a.depth - b.depth;
|
|
88
|
+
return (statusOrder[a.status] ?? 99) - (statusOrder[b.status] ?? 99);
|
|
89
|
+
});
|
|
90
|
+
return sorted.map(formatTaskNode);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Compute the cost per role from a CostSummary and format as a string.
|
|
94
|
+
*/
|
|
95
|
+
export function formatCost(summary) {
|
|
96
|
+
const total = `$${summary.totalCostUsd.toFixed(2)}`;
|
|
97
|
+
const roles = Object.entries(summary.byRole);
|
|
98
|
+
if (roles.length === 0)
|
|
99
|
+
return `Cost: ${total}`;
|
|
100
|
+
const breakdown = roles
|
|
101
|
+
.map(([role, usage]) => {
|
|
102
|
+
const pricing = computeRoleCost(usage);
|
|
103
|
+
return `${role}: $${pricing.toFixed(2)}`;
|
|
104
|
+
})
|
|
105
|
+
.join(", ");
|
|
106
|
+
return `Cost: ${total} (${breakdown})`;
|
|
107
|
+
}
|
|
108
|
+
/** Compute USD cost for a single role usage entry */
|
|
109
|
+
function computeRoleCost(usage) {
|
|
110
|
+
const MODEL_RATES = {
|
|
111
|
+
"claude-opus-4-6": { input: 15, output: 75 },
|
|
112
|
+
"claude-sonnet-4-6": { input: 3, output: 15 },
|
|
113
|
+
"claude-haiku-4-5-20251001": { input: 0.8, output: 4 },
|
|
114
|
+
};
|
|
115
|
+
const rates = MODEL_RATES[usage.model];
|
|
116
|
+
if (!rates)
|
|
117
|
+
return 0;
|
|
118
|
+
const uncachedInput = Math.max(0, usage.inputTokens - usage.cacheReadTokens - usage.cacheWriteTokens);
|
|
119
|
+
return ((uncachedInput * rates.input +
|
|
120
|
+
usage.outputTokens * rates.output +
|
|
121
|
+
usage.cacheReadTokens * rates.input * 0.1 +
|
|
122
|
+
usage.cacheWriteTokens * rates.input * 1.25) /
|
|
123
|
+
1_000_000);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Determine the color tier for a total cost in USD.
|
|
127
|
+
*/
|
|
128
|
+
export function costColor(totalUsd) {
|
|
129
|
+
if (totalUsd < 1)
|
|
130
|
+
return "green";
|
|
131
|
+
if (totalUsd < 5)
|
|
132
|
+
return "yellow";
|
|
133
|
+
return "red";
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Format a single event as a log line.
|
|
137
|
+
*/
|
|
138
|
+
export function formatEvent(event) {
|
|
139
|
+
switch (event.type) {
|
|
140
|
+
case "phase_changed": {
|
|
141
|
+
const e = event;
|
|
142
|
+
return `[Phase] \u2192 ${e.phaseName}`;
|
|
143
|
+
}
|
|
144
|
+
case "task_started": {
|
|
145
|
+
const e = event;
|
|
146
|
+
const stmt = e.statement.length > 50
|
|
147
|
+
? e.statement.slice(0, 47) + "..."
|
|
148
|
+
: e.statement;
|
|
149
|
+
return `[Task] Started: ${stmt}`;
|
|
150
|
+
}
|
|
151
|
+
case "task_completed": {
|
|
152
|
+
const e = event;
|
|
153
|
+
return `[Task] ${e.status}: ${e.taskId.slice(0, 8)}`;
|
|
154
|
+
}
|
|
155
|
+
case "tool_called": {
|
|
156
|
+
const e = event;
|
|
157
|
+
return e.workerIndex !== undefined
|
|
158
|
+
? `[Tool] ${e.toolName} (worker ${e.workerIndex})`
|
|
159
|
+
: `[Tool] ${e.toolName}`;
|
|
160
|
+
}
|
|
161
|
+
case "cost_update": {
|
|
162
|
+
const e = event;
|
|
163
|
+
return `[Cost] $${e.totalCostUsd.toFixed(2)} total`;
|
|
164
|
+
}
|
|
165
|
+
case "error": {
|
|
166
|
+
const e = event;
|
|
167
|
+
return `[Error] ${e.message}`;
|
|
168
|
+
}
|
|
169
|
+
default:
|
|
170
|
+
return `[${event.type}]`;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Format the activity log as an array of strings (last N events).
|
|
175
|
+
*/
|
|
176
|
+
export function formatActivityLog(events, maxLines = 8) {
|
|
177
|
+
const recent = events.slice(-maxLines);
|
|
178
|
+
return recent.map(formatEvent);
|
|
179
|
+
}
|
|
180
|
+
/** Format a KilnError with suggestion and doc link for CLI display */
|
|
181
|
+
export function formatError(error) {
|
|
182
|
+
const lines = [];
|
|
183
|
+
lines.push(`Error [${error.code}]: ${error.message}`);
|
|
184
|
+
const suggestion = error.suggestion ?? getErrorSuggestion(error.code, error.context).suggestion;
|
|
185
|
+
if (suggestion) {
|
|
186
|
+
lines.push(` Suggestion: ${suggestion}`);
|
|
187
|
+
}
|
|
188
|
+
const docUrl = error.docUrl ?? getErrorSuggestion(error.code, error.context).docUrl;
|
|
189
|
+
if (docUrl) {
|
|
190
|
+
lines.push(` Docs: ${docUrl}`);
|
|
191
|
+
}
|
|
192
|
+
return lines.join("\n");
|
|
193
|
+
}
|
|
194
|
+
/** Format a list of domain configs for CLI display */
|
|
195
|
+
export function formatDomainList(domains) {
|
|
196
|
+
if (domains.length === 0)
|
|
197
|
+
return "No domains available.";
|
|
198
|
+
return domains.map((d, i) => ` ${i + 1}. ${d.displayName} (${d.name})`).join("\n");
|
|
199
|
+
}
|
|
200
|
+
/** Format a list of skill configs for CLI display */
|
|
201
|
+
export function formatSkillList(skills) {
|
|
202
|
+
if (skills.length === 0)
|
|
203
|
+
return "No skills available.";
|
|
204
|
+
return skills.map((s, i) => ` ${i + 1}. ${s.name} -- ${s.description}`).join("\n");
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Strip ANSI escape codes from a string.
|
|
208
|
+
*/
|
|
209
|
+
// eslint-disable-next-line no-control-regex
|
|
210
|
+
const ANSI_PATTERN = /\x1B(?:\[[0-9;]*[A-Za-z]|\][^\x07]*(?:\x07|\x1B\\))/g;
|
|
211
|
+
export function stripAnsi(text) {
|
|
212
|
+
return text.replace(ANSI_PATTERN, "");
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../src/formatters.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
import type { KilnAppConfig } from "./config.js";
|
|
3
|
+
export type { KilnAppConfig, SystemPromptOptions } from "./config.js";
|
|
4
|
+
export { ClaudeSession } from "./wrapper/claude-code-process.js";
|
|
5
|
+
export type { ClaudeSessionConfig } from "./wrapper/claude-code-process.js";
|
|
6
|
+
export type { SessionMode, SessionContext, SessionReport, WrapperConfig } from "./wrapper/index.js";
|
|
7
|
+
export { SessionManager } from "./wrapper/session-manager.js";
|
|
8
|
+
export { KilnMcpServer, KILN_TOOLS } from "./mcp/index.js";
|
|
9
|
+
export type { KilnTool, McpServerInfo } from "./mcp/index.js";
|
|
10
|
+
export declare function createCli(config: KilnAppConfig): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,YAAY,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE9D,wBAAsB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsIpE"}
|