@kalphq/cli 0.0.0-dev-20260416091527 → 0.0.0-dev-20260420003114
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/{chunk-GFEVTHUW.js → chunk-DOHVZBJO.js} +59 -64
- package/dist/chunk-DOHVZBJO.js.map +1 -0
- package/dist/chunk-INMLAVHJ.js +217 -0
- package/dist/chunk-INMLAVHJ.js.map +1 -0
- package/dist/{create-XJURMQC4.js → create-LCVZRFEF.js} +8 -4
- package/dist/{create-XJURMQC4.js.map → create-LCVZRFEF.js.map} +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/{init-K7EASUMM.js → init-VMOFA2AV.js} +2 -2
- package/dist/manifest-LKYALPCB.js +82 -0
- package/dist/manifest-LKYALPCB.js.map +1 -0
- package/dist/push-RUUHE6RW.js +81 -0
- package/dist/push-RUUHE6RW.js.map +1 -0
- package/dist/skill-IGGMF5GR.js +346 -0
- package/dist/skill-IGGMF5GR.js.map +1 -0
- package/package.json +2 -2
- package/templates/project/meta/manifest-registry.json +1 -0
- package/templates/project/meta/manifests/.gitkeep +1 -0
- package/templates/project/meta/skills/.gitkeep +1 -0
- package/templates/project/meta/skills/applied.json +4 -0
- package/dist/chunk-GFEVTHUW.js.map +0 -1
- package/dist/push-YFHHNITO.js +0 -174
- package/dist/push-YFHHNITO.js.map +0 -1
- package/templates/agents/b2b-sales/index.ts +0 -57
- package/templates/agents/b2b-sales/signals/deal-won.ts +0 -31
- package/templates/agents/b2b-sales/signals/hot-lead-alert.ts +0 -29
- package/templates/agents/b2b-sales/steps/qualify-prospect.ts +0 -50
- package/templates/agents/b2b-sales/steps/score-lead.ts +0 -24
- package/templates/agents/b2b-sales/tools/enrich-company.ts +0 -17
- package/templates/agents/b2b-sales/tools/send-slack-notification.ts +0 -26
- package/templates/agents/b2b-sales/webhooks/crm-inbound.ts +0 -27
- package/templates/agents/b2b-sales/webhooks/stripe-payment.ts +0 -27
- package/templates/agents/customer-support/index.ts +0 -60
- package/templates/agents/customer-support/signals/escalation-needed.ts +0 -28
- package/templates/agents/customer-support/signals/ticket-resolved.ts +0 -29
- package/templates/agents/customer-support/steps/classify-ticket.ts +0 -22
- package/templates/agents/customer-support/steps/escalate-ticket.ts +0 -53
- package/templates/agents/customer-support/tools/create-jira-issue.ts +0 -30
- package/templates/agents/customer-support/tools/search-kb.ts +0 -13
- package/templates/agents/customer-support/webhooks/slack-escalation.ts +0 -27
- package/templates/agents/customer-support/webhooks/zendesk-ticket.ts +0 -29
- package/templates/agents/financial-agent/index.ts +0 -50
- package/templates/agents/financial-agent/signals/market-alert.ts +0 -31
- package/templates/agents/financial-agent/signals/portfolio-rebalance.ts +0 -27
- package/templates/agents/financial-agent/steps/analyze-signal.ts +0 -26
- package/templates/agents/financial-agent/steps/rebalance-check.ts +0 -55
- package/templates/agents/financial-agent/tools/fetch-market-data.ts +0 -13
- package/templates/agents/financial-agent/tools/send-email-alert.ts +0 -31
- package/templates/agents/financial-agent/webhooks/exchange-webhook.ts +0 -33
- package/templates/agents/financial-agent/webhooks/tradingview-alert.ts +0 -30
- package/templates/agents/minimal/index.ts +0 -24
- package/templates/agents/minimal/signals/error-alert.ts +0 -26
- package/templates/agents/minimal/signals/task-complete.ts +0 -25
- package/templates/agents/minimal/steps/example-step.ts +0 -13
- package/templates/agents/minimal/steps/transform-data.ts +0 -32
- package/templates/agents/minimal/tools/example-tool.ts +0 -13
- package/templates/agents/minimal/tools/http-request.ts +0 -26
- package/templates/agents/minimal/webhooks/generic-inbound.ts +0 -25
- package/templates/agents/minimal/webhooks/health-check.ts +0 -23
- /package/dist/{init-K7EASUMM.js.map → init-VMOFA2AV.js.map} +0 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
ensureConfig
|
|
4
|
+
} from "./chunk-Q455HC3P.js";
|
|
5
|
+
import "./chunk-2H7UOFLK.js";
|
|
6
|
+
|
|
7
|
+
// src/commands/skill.ts
|
|
8
|
+
import { defineCommand } from "citty";
|
|
9
|
+
import * as p from "@clack/prompts";
|
|
10
|
+
import pc from "picocolors";
|
|
11
|
+
|
|
12
|
+
// src/skills/index.ts
|
|
13
|
+
var chatCoreStep = [
|
|
14
|
+
'import { createStep } from "@kalphq/sdk";',
|
|
15
|
+
'import { z } from "zod";',
|
|
16
|
+
"",
|
|
17
|
+
"export const draftResponse = createStep({",
|
|
18
|
+
' id: "draft_response",',
|
|
19
|
+
' description: "Generates a high-quality response draft from user input.",',
|
|
20
|
+
" input: z.object({",
|
|
21
|
+
" message: z.string(),",
|
|
22
|
+
' tone: z.string().default("helpful"),',
|
|
23
|
+
" }),",
|
|
24
|
+
" output: z.object({",
|
|
25
|
+
" reply: z.string(),",
|
|
26
|
+
" }),",
|
|
27
|
+
" async run({ message, tone }) {",
|
|
28
|
+
" return {",
|
|
29
|
+
" reply: `[${tone}] ${message}`,",
|
|
30
|
+
" };",
|
|
31
|
+
" },",
|
|
32
|
+
"});",
|
|
33
|
+
""
|
|
34
|
+
].join("\n");
|
|
35
|
+
var autonomousLoopStep = [
|
|
36
|
+
'import { createStep } from "@kalphq/sdk";',
|
|
37
|
+
'import { z } from "zod";',
|
|
38
|
+
"",
|
|
39
|
+
"export const planNextAction = createStep({",
|
|
40
|
+
' id: "plan_next_action",',
|
|
41
|
+
' description: "Builds the next actionable task for autonomous execution.",',
|
|
42
|
+
" input: z.object({",
|
|
43
|
+
" objective: z.string(),",
|
|
44
|
+
" lastResult: z.string().optional(),",
|
|
45
|
+
" }),",
|
|
46
|
+
" output: z.object({",
|
|
47
|
+
" action: z.string(),",
|
|
48
|
+
" reason: z.string(),",
|
|
49
|
+
" }),",
|
|
50
|
+
" async run({ objective, lastResult }) {",
|
|
51
|
+
" return {",
|
|
52
|
+
" action: `Continue objective: ${objective}`,",
|
|
53
|
+
' reason: lastResult ? `Using previous result: ${lastResult}` : "Initial planning",',
|
|
54
|
+
" };",
|
|
55
|
+
" },",
|
|
56
|
+
"});",
|
|
57
|
+
""
|
|
58
|
+
].join("\n");
|
|
59
|
+
var memoryNotesTool = [
|
|
60
|
+
'import { createTool } from "@kalphq/sdk";',
|
|
61
|
+
'import { z } from "zod";',
|
|
62
|
+
"",
|
|
63
|
+
"export const saveNote = createTool({",
|
|
64
|
+
' id: "save_note",',
|
|
65
|
+
' description: "Persists a note in agent key-value storage.",',
|
|
66
|
+
" input: z.object({",
|
|
67
|
+
" key: z.string(),",
|
|
68
|
+
" value: z.string(),",
|
|
69
|
+
" }),",
|
|
70
|
+
" async execute({ key, value }, ctx) {",
|
|
71
|
+
" await ctx.storage.put(key, { value, savedAt: new Date().toISOString() });",
|
|
72
|
+
" return { saved: true, key };",
|
|
73
|
+
" },",
|
|
74
|
+
"});",
|
|
75
|
+
""
|
|
76
|
+
].join("\n");
|
|
77
|
+
var SKILLS = [
|
|
78
|
+
{
|
|
79
|
+
id: "chat-core",
|
|
80
|
+
label: "Chat Core",
|
|
81
|
+
description: "Adds structured message intake and response drafting primitives.",
|
|
82
|
+
files: (agent) => [
|
|
83
|
+
{
|
|
84
|
+
path: `agents/${agent}/skills/chat-core/steps/draft-response.ts`,
|
|
85
|
+
content: chatCoreStep
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
path: `agents/${agent}/skills/chat-core/index.ts`,
|
|
89
|
+
content: 'export { draftResponse } from "./steps/draft-response.js";\n'
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: "autonomous-loop",
|
|
95
|
+
label: "Autonomous Loop",
|
|
96
|
+
description: "Adds periodic planning and checkpointing primitives for autonomous agents.",
|
|
97
|
+
files: (agent) => [
|
|
98
|
+
{
|
|
99
|
+
path: `agents/${agent}/skills/autonomous-loop/steps/plan-next-action.ts`,
|
|
100
|
+
content: autonomousLoopStep
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
path: `agents/${agent}/skills/autonomous-loop/index.ts`,
|
|
104
|
+
content: 'export { planNextAction } from "./steps/plan-next-action.js";\n'
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: "memory-notes",
|
|
110
|
+
label: "Memory Notes",
|
|
111
|
+
description: "Adds helper tool for persisting structured notes in runtime storage.",
|
|
112
|
+
files: (agent) => [
|
|
113
|
+
{
|
|
114
|
+
path: `agents/${agent}/skills/memory-notes/tools/save-note.ts`,
|
|
115
|
+
content: memoryNotesTool
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
path: `agents/${agent}/skills/memory-notes/index.ts`,
|
|
119
|
+
content: 'export { saveNote } from "./tools/save-note.js";\n'
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
];
|
|
124
|
+
function getSkill(skillId) {
|
|
125
|
+
return SKILLS.find((skill) => skill.id === skillId);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// src/utils/skills.ts
|
|
129
|
+
import { createHash } from "crypto";
|
|
130
|
+
import { access, mkdir, readFile, writeFile } from "fs/promises";
|
|
131
|
+
import { dirname, join } from "path";
|
|
132
|
+
var EMPTY_STATE = {
|
|
133
|
+
schemaVersion: 1,
|
|
134
|
+
agents: {}
|
|
135
|
+
};
|
|
136
|
+
function hashPayload(value) {
|
|
137
|
+
return createHash("sha256").update(value).digest("hex");
|
|
138
|
+
}
|
|
139
|
+
function statePath(cwd) {
|
|
140
|
+
return join(cwd, "meta", "skills", "applied.json");
|
|
141
|
+
}
|
|
142
|
+
async function ensureAgentExists(cwd, agentName) {
|
|
143
|
+
await access(join(cwd, "agents", agentName, "index.ts"));
|
|
144
|
+
}
|
|
145
|
+
async function readSkillsState(cwd) {
|
|
146
|
+
const path = statePath(cwd);
|
|
147
|
+
try {
|
|
148
|
+
const src = await readFile(path, "utf-8");
|
|
149
|
+
const parsed = JSON.parse(src);
|
|
150
|
+
if (parsed?.schemaVersion !== 1 || typeof parsed.agents !== "object") {
|
|
151
|
+
return EMPTY_STATE;
|
|
152
|
+
}
|
|
153
|
+
return parsed;
|
|
154
|
+
} catch {
|
|
155
|
+
return EMPTY_STATE;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async function writeSkillsState(cwd, state) {
|
|
159
|
+
const dir = join(cwd, "meta", "skills");
|
|
160
|
+
await mkdir(dir, { recursive: true });
|
|
161
|
+
await writeFile(
|
|
162
|
+
statePath(cwd),
|
|
163
|
+
JSON.stringify(state, null, 2) + "\n",
|
|
164
|
+
"utf-8"
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
async function applySkillToAgent(params) {
|
|
168
|
+
const { cwd, agentName, skill } = params;
|
|
169
|
+
const files = skill.files(agentName);
|
|
170
|
+
for (const file of files) {
|
|
171
|
+
const absolute = join(cwd, file.path);
|
|
172
|
+
await mkdir(dirname(absolute), { recursive: true });
|
|
173
|
+
await writeFile(absolute, file.content, "utf-8");
|
|
174
|
+
}
|
|
175
|
+
const hash = hashPayload(JSON.stringify(files));
|
|
176
|
+
return {
|
|
177
|
+
skillId: skill.id,
|
|
178
|
+
addedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
179
|
+
hash,
|
|
180
|
+
files: files.map((f) => f.path)
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
async function recordAppliedSkill(params) {
|
|
184
|
+
const { cwd, agentName, record } = params;
|
|
185
|
+
const state = await readSkillsState(cwd);
|
|
186
|
+
const current = state.agents[agentName] ?? [];
|
|
187
|
+
state.agents[agentName] = [
|
|
188
|
+
...current.filter((entry) => entry.skillId !== record.skillId),
|
|
189
|
+
record
|
|
190
|
+
];
|
|
191
|
+
await writeSkillsState(cwd, state);
|
|
192
|
+
}
|
|
193
|
+
async function doctorSkills(cwd, agentName) {
|
|
194
|
+
const state = await readSkillsState(cwd);
|
|
195
|
+
const agents = agentName ? [agentName] : Object.keys(state.agents);
|
|
196
|
+
const issues = [];
|
|
197
|
+
for (const agent of agents) {
|
|
198
|
+
const records = state.agents[agent] ?? [];
|
|
199
|
+
for (const record of records) {
|
|
200
|
+
const missing = [];
|
|
201
|
+
for (const file of record.files) {
|
|
202
|
+
try {
|
|
203
|
+
await access(join(cwd, file));
|
|
204
|
+
} catch {
|
|
205
|
+
missing.push(file);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (missing.length > 0) {
|
|
209
|
+
issues.push({ agent, skillId: record.skillId, missingFiles: missing });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return issues;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// src/commands/skill.ts
|
|
217
|
+
var LOGO = "\u{1F98B}";
|
|
218
|
+
function printUsage() {
|
|
219
|
+
p.log.info(pc.bold("Usage"));
|
|
220
|
+
p.log.info(` ${pc.cyan("kalp skill add -a <agent> -s <skill>")}`);
|
|
221
|
+
p.log.info(` ${pc.cyan("kalp skill list [-a <agent>]")}`);
|
|
222
|
+
p.log.info(` ${pc.cyan("kalp skill doctor [-a <agent>]")}`);
|
|
223
|
+
}
|
|
224
|
+
var skill_default = defineCommand({
|
|
225
|
+
meta: { name: "skill", description: "Manage reusable DSL skills" },
|
|
226
|
+
args: {
|
|
227
|
+
agent: {
|
|
228
|
+
type: "string",
|
|
229
|
+
alias: "a",
|
|
230
|
+
description: "Agent name",
|
|
231
|
+
required: false
|
|
232
|
+
},
|
|
233
|
+
skill: {
|
|
234
|
+
type: "string",
|
|
235
|
+
alias: "s",
|
|
236
|
+
description: "Skill id",
|
|
237
|
+
required: false
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
async run({ args }) {
|
|
241
|
+
const cwd = process.cwd();
|
|
242
|
+
const action = (process.argv[3] ?? "").toLowerCase();
|
|
243
|
+
p.intro(`${LOGO} ${pc.bold("kalp skill")}`);
|
|
244
|
+
if (!action || !["add", "list", "doctor"].includes(action)) {
|
|
245
|
+
printUsage();
|
|
246
|
+
p.outro(pc.dim("Available skills: " + SKILLS.map((s) => s.id).join(", ")));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
try {
|
|
250
|
+
await ensureConfig(cwd);
|
|
251
|
+
} catch {
|
|
252
|
+
p.log.error(`${pc.cyan("kalp.config.ts")} not found`);
|
|
253
|
+
p.outro(pc.dim(`Run ${pc.cyan("kalp init")} first.`));
|
|
254
|
+
process.exit(1);
|
|
255
|
+
}
|
|
256
|
+
if (action === "add") {
|
|
257
|
+
const agentName = args.agent;
|
|
258
|
+
const skillId = args.skill;
|
|
259
|
+
if (!agentName || !skillId) {
|
|
260
|
+
p.log.error(`Missing required flags ${pc.cyan("-a <agent>")} and/or ${pc.cyan("-s <skill>")}`);
|
|
261
|
+
printUsage();
|
|
262
|
+
process.exit(1);
|
|
263
|
+
}
|
|
264
|
+
const skill = getSkill(skillId);
|
|
265
|
+
if (!skill) {
|
|
266
|
+
p.log.error(`Unknown skill ${pc.cyan(skillId)}`);
|
|
267
|
+
p.log.info(pc.dim("Available: " + SKILLS.map((s2) => s2.id).join(", ")));
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
await ensureAgentExists(cwd, agentName);
|
|
272
|
+
} catch {
|
|
273
|
+
p.log.error(
|
|
274
|
+
`Agent ${pc.cyan(agentName)} not found at ${pc.cyan(`agents/${agentName}/index.ts`)}`
|
|
275
|
+
);
|
|
276
|
+
process.exit(1);
|
|
277
|
+
}
|
|
278
|
+
const s = p.spinner();
|
|
279
|
+
s.start(`Applying skill ${pc.cyan(skill.id)} to ${pc.cyan(agentName)}`);
|
|
280
|
+
const record = await applySkillToAgent({
|
|
281
|
+
cwd,
|
|
282
|
+
agentName,
|
|
283
|
+
skill
|
|
284
|
+
});
|
|
285
|
+
await recordAppliedSkill({ cwd, agentName, record });
|
|
286
|
+
s.stop("Skill applied");
|
|
287
|
+
p.log.success(`${pc.bold(skill.label)} installed for ${pc.cyan(agentName)}`);
|
|
288
|
+
for (const file of record.files) {
|
|
289
|
+
p.log.info(`${pc.dim("\u2022")} ${pc.cyan(file)}`);
|
|
290
|
+
}
|
|
291
|
+
p.log.info(pc.bold("Next"));
|
|
292
|
+
p.log.info(
|
|
293
|
+
`Import from ${pc.cyan(`./skills/${skill.id}/index.js`)} in ${pc.cyan(`agents/${agentName}/index.ts`)}`
|
|
294
|
+
);
|
|
295
|
+
p.outro(pc.green("Skill installation complete."));
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
if (action === "list") {
|
|
299
|
+
const state = await readSkillsState(cwd);
|
|
300
|
+
const agentName = args.agent;
|
|
301
|
+
if (agentName) {
|
|
302
|
+
const records = state.agents[agentName] ?? [];
|
|
303
|
+
p.log.info(`${pc.bold(agentName)} skills`);
|
|
304
|
+
if (records.length === 0) {
|
|
305
|
+
p.outro(pc.dim("No skills installed."));
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
for (const record of records) {
|
|
309
|
+
p.log.info(`${pc.dim("\u2022")} ${pc.cyan(record.skillId)} ${pc.dim(`(${record.addedAt})`)}`);
|
|
310
|
+
}
|
|
311
|
+
p.outro(pc.green("Done."));
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
const agentNames = Object.keys(state.agents);
|
|
315
|
+
if (agentNames.length === 0) {
|
|
316
|
+
p.outro(pc.dim("No skills installed yet."));
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
for (const agent of agentNames) {
|
|
320
|
+
p.log.info(pc.bold(agent));
|
|
321
|
+
for (const record of state.agents[agent] ?? []) {
|
|
322
|
+
p.log.info(` ${pc.dim("\u2022")} ${pc.cyan(record.skillId)}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
p.outro(pc.green("Done."));
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
const issues = await doctorSkills(cwd, args.agent);
|
|
329
|
+
if (issues.length === 0) {
|
|
330
|
+
p.outro(pc.green("Skill manifest is in sync."));
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
p.log.warn("Detected skill drift between manifest and filesystem:");
|
|
334
|
+
for (const issue of issues) {
|
|
335
|
+
p.log.warn(`${pc.cyan(issue.agent)} / ${pc.cyan(issue.skillId)}`);
|
|
336
|
+
for (const file of issue.missingFiles) {
|
|
337
|
+
p.log.warn(` ${pc.dim("\u2022 missing")} ${pc.cyan(file)}`);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
p.outro(pc.yellow("Run kalp skill add again or repair files manually."));
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
export {
|
|
344
|
+
skill_default as default
|
|
345
|
+
};
|
|
346
|
+
//# sourceMappingURL=skill-IGGMF5GR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/skill.ts","../src/skills/index.ts","../src/utils/skills.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { ensureConfig } from \"../utils/fs.js\";\nimport { SKILLS, getSkill } from \"../skills/index.js\";\nimport {\n applySkillToAgent,\n doctorSkills,\n ensureAgentExists,\n readSkillsState,\n recordAppliedSkill,\n} from \"../utils/skills.js\";\n\nconst LOGO = \"🦋\";\n\nfunction printUsage(): void {\n p.log.info(pc.bold(\"Usage\"));\n p.log.info(` ${pc.cyan(\"kalp skill add -a <agent> -s <skill>\")}`);\n p.log.info(` ${pc.cyan(\"kalp skill list [-a <agent>]\")}`);\n p.log.info(` ${pc.cyan(\"kalp skill doctor [-a <agent>]\")}`);\n}\n\nexport default defineCommand({\n meta: { name: \"skill\", description: \"Manage reusable DSL skills\" },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name\",\n required: false,\n },\n skill: {\n type: \"string\",\n alias: \"s\",\n description: \"Skill id\",\n required: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const action = (process.argv[3] ?? \"\").toLowerCase();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp skill\")}`);\n\n if (!action || ![\"add\", \"list\", \"doctor\"].includes(action)) {\n printUsage();\n p.outro(pc.dim(\"Available skills: \" + SKILLS.map((s) => s.id).join(\", \")));\n return;\n }\n\n try {\n await ensureConfig(cwd);\n } catch {\n p.log.error(`${pc.cyan(\"kalp.config.ts\")} not found`);\n p.outro(pc.dim(`Run ${pc.cyan(\"kalp init\")} first.`));\n process.exit(1);\n }\n\n if (action === \"add\") {\n const agentName = args.agent;\n const skillId = args.skill;\n\n if (!agentName || !skillId) {\n p.log.error(`Missing required flags ${pc.cyan(\"-a <agent>\")} and/or ${pc.cyan(\"-s <skill>\")}`);\n printUsage();\n process.exit(1);\n }\n\n const skill = getSkill(skillId);\n if (!skill) {\n p.log.error(`Unknown skill ${pc.cyan(skillId)}`);\n p.log.info(pc.dim(\"Available: \" + SKILLS.map((s) => s.id).join(\", \")));\n process.exit(1);\n }\n\n try {\n await ensureAgentExists(cwd, agentName);\n } catch {\n p.log.error(\n `Agent ${pc.cyan(agentName)} not found at ${pc.cyan(`agents/${agentName}/index.ts`)}`,\n );\n process.exit(1);\n }\n\n const s = p.spinner();\n s.start(`Applying skill ${pc.cyan(skill.id)} to ${pc.cyan(agentName)}`);\n\n const record = await applySkillToAgent({\n cwd,\n agentName,\n skill,\n });\n await recordAppliedSkill({ cwd, agentName, record });\n\n s.stop(\"Skill applied\");\n p.log.success(`${pc.bold(skill.label)} installed for ${pc.cyan(agentName)}`);\n for (const file of record.files) {\n p.log.info(`${pc.dim(\"•\")} ${pc.cyan(file)}`);\n }\n p.log.info(pc.bold(\"Next\"));\n p.log.info(\n `Import from ${pc.cyan(`./skills/${skill.id}/index.js`)} in ${pc.cyan(`agents/${agentName}/index.ts`)}`,\n );\n p.outro(pc.green(\"Skill installation complete.\"));\n return;\n }\n\n if (action === \"list\") {\n const state = await readSkillsState(cwd);\n const agentName = args.agent;\n\n if (agentName) {\n const records = state.agents[agentName] ?? [];\n p.log.info(`${pc.bold(agentName)} skills`);\n if (records.length === 0) {\n p.outro(pc.dim(\"No skills installed.\"));\n return;\n }\n for (const record of records) {\n p.log.info(`${pc.dim(\"•\")} ${pc.cyan(record.skillId)} ${pc.dim(`(${record.addedAt})`)}`);\n }\n p.outro(pc.green(\"Done.\"));\n return;\n }\n\n const agentNames = Object.keys(state.agents);\n if (agentNames.length === 0) {\n p.outro(pc.dim(\"No skills installed yet.\"));\n return;\n }\n\n for (const agent of agentNames) {\n p.log.info(pc.bold(agent));\n for (const record of state.agents[agent] ?? []) {\n p.log.info(` ${pc.dim(\"•\")} ${pc.cyan(record.skillId)}`);\n }\n }\n p.outro(pc.green(\"Done.\"));\n return;\n }\n\n const issues = await doctorSkills(cwd, args.agent);\n if (issues.length === 0) {\n p.outro(pc.green(\"Skill manifest is in sync.\"));\n return;\n }\n\n p.log.warn(\"Detected skill drift between manifest and filesystem:\");\n for (const issue of issues) {\n p.log.warn(`${pc.cyan(issue.agent)} / ${pc.cyan(issue.skillId)}`);\n for (const file of issue.missingFiles) {\n p.log.warn(` ${pc.dim(\"• missing\")} ${pc.cyan(file)}`);\n }\n }\n p.outro(pc.yellow(\"Run kalp skill add again or repair files manually.\"));\n },\n});\n","export type SkillId = \"chat-core\" | \"autonomous-loop\" | \"memory-notes\";\n\nexport interface SkillFile {\n path: string;\n content: string;\n}\n\nexport interface SkillDefinition {\n id: SkillId;\n label: string;\n description: string;\n files: (agentName: string) => SkillFile[];\n}\n\nconst chatCoreStep = [\n 'import { createStep } from \"@kalphq/sdk\";',\n 'import { z } from \"zod\";',\n \"\",\n \"export const draftResponse = createStep({\",\n ' id: \"draft_response\",',\n ' description: \"Generates a high-quality response draft from user input.\",',\n \" input: z.object({\",\n \" message: z.string(),\",\n ' tone: z.string().default(\"helpful\"),',\n \" }),\",\n \" output: z.object({\",\n \" reply: z.string(),\",\n \" }),\",\n \" async run({ message, tone }) {\",\n \" return {\",\n \" reply: `[${tone}] ${message}`,\",\n \" };\",\n \" },\",\n \"});\",\n \"\",\n].join(\"\\n\");\n\nconst autonomousLoopStep = [\n 'import { createStep } from \"@kalphq/sdk\";',\n 'import { z } from \"zod\";',\n \"\",\n \"export const planNextAction = createStep({\",\n ' id: \"plan_next_action\",',\n ' description: \"Builds the next actionable task for autonomous execution.\",',\n \" input: z.object({\",\n \" objective: z.string(),\",\n \" lastResult: z.string().optional(),\",\n \" }),\",\n \" output: z.object({\",\n \" action: z.string(),\",\n \" reason: z.string(),\",\n \" }),\",\n \" async run({ objective, lastResult }) {\",\n \" return {\",\n \" action: `Continue objective: ${objective}`,\",\n ' reason: lastResult ? `Using previous result: ${lastResult}` : \"Initial planning\",',\n \" };\",\n \" },\",\n \"});\",\n \"\",\n].join(\"\\n\");\n\nconst memoryNotesTool = [\n 'import { createTool } from \"@kalphq/sdk\";',\n 'import { z } from \"zod\";',\n \"\",\n \"export const saveNote = createTool({\",\n ' id: \"save_note\",',\n ' description: \"Persists a note in agent key-value storage.\",',\n \" input: z.object({\",\n \" key: z.string(),\",\n \" value: z.string(),\",\n \" }),\",\n \" async execute({ key, value }, ctx) {\",\n \" await ctx.storage.put(key, { value, savedAt: new Date().toISOString() });\",\n \" return { saved: true, key };\",\n \" },\",\n \"});\",\n \"\",\n].join(\"\\n\");\n\nexport const SKILLS: SkillDefinition[] = [\n {\n id: \"chat-core\",\n label: \"Chat Core\",\n description:\n \"Adds structured message intake and response drafting primitives.\",\n files: (agent) => [\n {\n path: `agents/${agent}/skills/chat-core/steps/draft-response.ts`,\n content: chatCoreStep,\n },\n {\n path: `agents/${agent}/skills/chat-core/index.ts`,\n content: 'export { draftResponse } from \"./steps/draft-response.js\";\\n',\n },\n ],\n },\n {\n id: \"autonomous-loop\",\n label: \"Autonomous Loop\",\n description:\n \"Adds periodic planning and checkpointing primitives for autonomous agents.\",\n files: (agent) => [\n {\n path: `agents/${agent}/skills/autonomous-loop/steps/plan-next-action.ts`,\n content: autonomousLoopStep,\n },\n {\n path: `agents/${agent}/skills/autonomous-loop/index.ts`,\n content:\n 'export { planNextAction } from \"./steps/plan-next-action.js\";\\n',\n },\n ],\n },\n {\n id: \"memory-notes\",\n label: \"Memory Notes\",\n description:\n \"Adds helper tool for persisting structured notes in runtime storage.\",\n files: (agent) => [\n {\n path: `agents/${agent}/skills/memory-notes/tools/save-note.ts`,\n content: memoryNotesTool,\n },\n {\n path: `agents/${agent}/skills/memory-notes/index.ts`,\n content: 'export { saveNote } from \"./tools/save-note.js\";\\n',\n },\n ],\n },\n];\n\nexport function getSkill(skillId: string): SkillDefinition | undefined {\n return SKILLS.find((skill) => skill.id === skillId);\n}\n","import { createHash } from \"node:crypto\";\nimport { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport type { SkillDefinition } from \"../skills/index.js\";\n\nexport interface AppliedSkillRecord {\n skillId: string;\n addedAt: string;\n hash: string;\n files: string[];\n}\n\nexport interface SkillsState {\n schemaVersion: 1;\n agents: Record<string, AppliedSkillRecord[]>;\n}\n\nconst EMPTY_STATE: SkillsState = {\n schemaVersion: 1,\n agents: {},\n};\n\nfunction hashPayload(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nfunction statePath(cwd: string): string {\n return join(cwd, \"meta\", \"skills\", \"applied.json\");\n}\n\nexport async function ensureAgentExists(\n cwd: string,\n agentName: string,\n): Promise<void> {\n await access(join(cwd, \"agents\", agentName, \"index.ts\"));\n}\n\nexport async function readSkillsState(cwd: string): Promise<SkillsState> {\n const path = statePath(cwd);\n try {\n const src = await readFile(path, \"utf-8\");\n const parsed = JSON.parse(src) as SkillsState;\n if (parsed?.schemaVersion !== 1 || typeof parsed.agents !== \"object\") {\n return EMPTY_STATE;\n }\n return parsed;\n } catch {\n return EMPTY_STATE;\n }\n}\n\nexport async function writeSkillsState(\n cwd: string,\n state: SkillsState,\n): Promise<void> {\n const dir = join(cwd, \"meta\", \"skills\");\n await mkdir(dir, { recursive: true });\n await writeFile(\n statePath(cwd),\n JSON.stringify(state, null, 2) + \"\\n\",\n \"utf-8\",\n );\n}\n\nexport async function applySkillToAgent(params: {\n cwd: string;\n agentName: string;\n skill: SkillDefinition;\n}): Promise<AppliedSkillRecord> {\n const { cwd, agentName, skill } = params;\n const files = skill.files(agentName);\n\n for (const file of files) {\n const absolute = join(cwd, file.path);\n await mkdir(dirname(absolute), { recursive: true });\n await writeFile(absolute, file.content, \"utf-8\");\n }\n\n const hash = hashPayload(JSON.stringify(files));\n return {\n skillId: skill.id,\n addedAt: new Date().toISOString(),\n hash,\n files: files.map((f) => f.path),\n };\n}\n\nexport async function recordAppliedSkill(params: {\n cwd: string;\n agentName: string;\n record: AppliedSkillRecord;\n}): Promise<void> {\n const { cwd, agentName, record } = params;\n const state = await readSkillsState(cwd);\n const current = state.agents[agentName] ?? [];\n\n state.agents[agentName] = [\n ...current.filter((entry) => entry.skillId !== record.skillId),\n record,\n ];\n\n await writeSkillsState(cwd, state);\n}\n\nexport async function doctorSkills(\n cwd: string,\n agentName?: string,\n): Promise<Array<{ agent: string; skillId: string; missingFiles: string[] }>> {\n const state = await readSkillsState(cwd);\n const agents = agentName ? [agentName] : Object.keys(state.agents);\n const issues: Array<{\n agent: string;\n skillId: string;\n missingFiles: string[];\n }> = [];\n\n for (const agent of agents) {\n const records = state.agents[agent] ?? [];\n for (const record of records) {\n const missing: string[] = [];\n for (const file of record.files) {\n try {\n await access(join(cwd, file));\n } catch {\n missing.push(file);\n }\n }\n if (missing.length > 0) {\n issues.push({ agent, skillId: record.skillId, missingFiles: missing });\n }\n }\n }\n\n return issues;\n}\n"],"mappings":"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","names":["s"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kalphq/cli",
|
|
3
|
-
"version": "0.0.0-dev-
|
|
3
|
+
"version": "0.0.0-dev-20260420003114",
|
|
4
4
|
"description": "Zero-config CLI for deploying Kalp agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"picocolors": "1.1.1",
|
|
25
25
|
"zod": "3.25.76",
|
|
26
26
|
"zod-to-json-schema": "3.25.2",
|
|
27
|
-
"@kalphq/sdk": "0.0.0-dev-
|
|
27
|
+
"@kalphq/sdk": "0.0.0-dev-20260420003114"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "^22.15.3",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|