@workplane/agent-skills 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/package.json +34 -0
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# @workplane/agent-skills
|
|
2
|
+
|
|
3
|
+
Pre-built agentic workplans and the `CanonicalSkillWorkflow` interface for building structured AI skills on top of `@workplane/workplans`.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @workplane/agent-skills @workplane/workplans
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Built-in skills
|
|
12
|
+
|
|
13
|
+
### `code-review`
|
|
14
|
+
|
|
15
|
+
Git diff → local summarize (ollama) → frontier critique (anthropic).
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { createDefaultRegistry, SequentialWorkplanRunner, LocalWorkplanContext } from "@workplane/agent-skills";
|
|
19
|
+
import { SequentialWorkplanRunner } from "@workplane/workplans";
|
|
20
|
+
|
|
21
|
+
const registry = createDefaultRegistry();
|
|
22
|
+
const skill = registry.get("code-review");
|
|
23
|
+
const plan = skill.buildPlan({ repo: "./my-repo", model: "claude-haiku-4-5-20251001" });
|
|
24
|
+
await new SequentialWorkplanRunner().run(plan, new LocalWorkplanContext());
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### `summarize-file`
|
|
28
|
+
|
|
29
|
+
Read file → summarize with configurable provider (default: ollama).
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const plan = registry.get("summarize-file").buildPlan({ file: "./README.md" });
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## `CanonicalSkillWorkflow` interface
|
|
36
|
+
|
|
37
|
+
For complex skills with structured input validation, context building, and persistent output:
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import type { CanonicalSkillWorkflow } from "@workplane/agent-skills";
|
|
41
|
+
import { CanonicalSkillRunner } from "@workplane/agent-skills";
|
|
42
|
+
|
|
43
|
+
class MySkill implements CanonicalSkillWorkflow<MyInput, MyOutput> {
|
|
44
|
+
async resolveInputs(raw) { ... }
|
|
45
|
+
async buildContext(inputs) { ... }
|
|
46
|
+
async invokeAI(context) { ... }
|
|
47
|
+
async persistOutput(output) { ... }
|
|
48
|
+
async notify(ref) { ... } // optional — failure never fails the run
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const result = await new CanonicalSkillRunner().run(new MySkill(), input);
|
|
52
|
+
```
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { WorkplanRunContext, Workplan } from '@workplane/workplans';
|
|
2
|
+
|
|
3
|
+
interface ResolvedInputs<TInput> {
|
|
4
|
+
raw: TInput;
|
|
5
|
+
}
|
|
6
|
+
interface SkillContext {
|
|
7
|
+
inputs: Record<string, unknown>;
|
|
8
|
+
ctx: WorkplanRunContext;
|
|
9
|
+
}
|
|
10
|
+
interface AIOutput<TOutput> {
|
|
11
|
+
result: TOutput;
|
|
12
|
+
metadata?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
interface OutputRef {
|
|
15
|
+
type: string;
|
|
16
|
+
id: string;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
interface CanonicalSkillWorkflow<TInput = unknown, TOutput = unknown> {
|
|
20
|
+
resolveInputs(raw: TInput): Promise<ResolvedInputs<TInput>>;
|
|
21
|
+
buildContext(inputs: ResolvedInputs<TInput>): Promise<SkillContext>;
|
|
22
|
+
invokeAI(context: SkillContext): Promise<AIOutput<TOutput>>;
|
|
23
|
+
persistOutput(output: AIOutput<TOutput>): Promise<OutputRef>;
|
|
24
|
+
notify?(ref: OutputRef): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
interface SkillRunResult<TOutput> {
|
|
27
|
+
output: TOutput;
|
|
28
|
+
ref: OutputRef;
|
|
29
|
+
metadata?: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
interface SkillEntry {
|
|
32
|
+
name: string;
|
|
33
|
+
description: string;
|
|
34
|
+
buildPlan(options: Record<string, unknown>): Workplan;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
declare class CanonicalSkillRunner {
|
|
38
|
+
run<TInput, TOutput>(skill: CanonicalSkillWorkflow<TInput, TOutput>, input: TInput): Promise<SkillRunResult<TOutput>>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
declare class SkillRegistry {
|
|
42
|
+
private readonly skills;
|
|
43
|
+
register(entry: SkillEntry): void;
|
|
44
|
+
get(name: string): SkillEntry | undefined;
|
|
45
|
+
list(): SkillEntry[];
|
|
46
|
+
}
|
|
47
|
+
declare function createDefaultRegistry(): SkillRegistry;
|
|
48
|
+
declare function listSkills(registry: SkillRegistry): void;
|
|
49
|
+
|
|
50
|
+
interface CodeReviewOptions {
|
|
51
|
+
repoPath?: string;
|
|
52
|
+
model?: string;
|
|
53
|
+
branch?: string;
|
|
54
|
+
}
|
|
55
|
+
declare function codeReviewPlan(opts?: CodeReviewOptions): Workplan;
|
|
56
|
+
|
|
57
|
+
interface SummarizeFileOptions {
|
|
58
|
+
filePath: string;
|
|
59
|
+
provider?: string;
|
|
60
|
+
model?: string;
|
|
61
|
+
}
|
|
62
|
+
declare function summarizeFilePlan(opts: SummarizeFileOptions): Workplan;
|
|
63
|
+
|
|
64
|
+
export { type AIOutput, CanonicalSkillRunner, type CanonicalSkillWorkflow, type OutputRef, type ResolvedInputs, type SkillContext, type SkillEntry, SkillRegistry, type SkillRunResult, codeReviewPlan, createDefaultRegistry, listSkills, summarizeFilePlan };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// src/runner.ts
|
|
2
|
+
var CanonicalSkillRunner = class {
|
|
3
|
+
async run(skill, input) {
|
|
4
|
+
const resolved = await skill.resolveInputs(input);
|
|
5
|
+
const context = await skill.buildContext(resolved);
|
|
6
|
+
const aiOutput = await skill.invokeAI(context);
|
|
7
|
+
const ref = await skill.persistOutput(aiOutput);
|
|
8
|
+
if (skill.notify) {
|
|
9
|
+
try {
|
|
10
|
+
await skill.notify(ref);
|
|
11
|
+
} catch {
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return { output: aiOutput.result, ref, metadata: aiOutput.metadata };
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// src/skills/code-review.ts
|
|
19
|
+
function codeReviewPlan(opts = {}) {
|
|
20
|
+
const { repoPath = ".", model = "claude-haiku-4-5-20251001", branch } = opts;
|
|
21
|
+
const diffCmd = branch ? `git diff ${branch}..HEAD` : "git diff HEAD~1";
|
|
22
|
+
return {
|
|
23
|
+
id: "code-review",
|
|
24
|
+
name: "Code Review",
|
|
25
|
+
steps: [
|
|
26
|
+
{
|
|
27
|
+
id: "diff",
|
|
28
|
+
name: "Git Diff",
|
|
29
|
+
adapter: "shell",
|
|
30
|
+
provider: "shell",
|
|
31
|
+
payload: { command: diffCmd, cwd: repoPath },
|
|
32
|
+
output: { dest: "next" }
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "summarize",
|
|
36
|
+
name: "Summarize",
|
|
37
|
+
adapter: "ollama",
|
|
38
|
+
provider: "ollama",
|
|
39
|
+
model: "llama3",
|
|
40
|
+
payload: { prompt: "Summarize these code changes concisely:\n{{prevOutput}}" },
|
|
41
|
+
output: { dest: "next" }
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
id: "critique",
|
|
45
|
+
name: "Critique",
|
|
46
|
+
adapter: "anthropic",
|
|
47
|
+
provider: "anthropic",
|
|
48
|
+
model,
|
|
49
|
+
payload: { prompt: "Review this summary for correctness, security issues, and code quality:\n{{prevOutput}}" }
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// src/skills/summarize-file.ts
|
|
56
|
+
function summarizeFilePlan(opts) {
|
|
57
|
+
const { filePath, provider = "ollama", model = "llama3" } = opts;
|
|
58
|
+
return {
|
|
59
|
+
id: "summarize-file",
|
|
60
|
+
name: "Summarize File",
|
|
61
|
+
steps: [
|
|
62
|
+
{
|
|
63
|
+
id: "read",
|
|
64
|
+
name: "Read File",
|
|
65
|
+
adapter: "file",
|
|
66
|
+
provider: "file",
|
|
67
|
+
payload: { path: filePath },
|
|
68
|
+
output: { dest: "next" }
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: "summarize",
|
|
72
|
+
name: "Summarize",
|
|
73
|
+
adapter: provider,
|
|
74
|
+
provider,
|
|
75
|
+
model,
|
|
76
|
+
payload: { prompt: "Summarize the following file content concisely:\n{{prevOutput}}" }
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// src/skills/index.ts
|
|
83
|
+
var SkillRegistry = class {
|
|
84
|
+
skills = /* @__PURE__ */ new Map();
|
|
85
|
+
register(entry) {
|
|
86
|
+
this.skills.set(entry.name, entry);
|
|
87
|
+
}
|
|
88
|
+
get(name) {
|
|
89
|
+
return this.skills.get(name);
|
|
90
|
+
}
|
|
91
|
+
list() {
|
|
92
|
+
return Array.from(this.skills.values());
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
function createDefaultRegistry() {
|
|
96
|
+
const registry = new SkillRegistry();
|
|
97
|
+
registry.register({
|
|
98
|
+
name: "code-review",
|
|
99
|
+
description: "Git diff \u2192 local summarize (ollama) \u2192 frontier critique (anthropic)",
|
|
100
|
+
buildPlan: (opts) => codeReviewPlan({
|
|
101
|
+
repoPath: typeof opts.repo === "string" ? opts.repo : void 0,
|
|
102
|
+
model: typeof opts.model === "string" ? opts.model : void 0,
|
|
103
|
+
branch: typeof opts.branch === "string" ? opts.branch : void 0
|
|
104
|
+
})
|
|
105
|
+
});
|
|
106
|
+
registry.register({
|
|
107
|
+
name: "summarize-file",
|
|
108
|
+
description: "Read file \u2192 summarize with configurable provider (default: ollama)",
|
|
109
|
+
buildPlan: (opts) => {
|
|
110
|
+
const filePath = typeof opts.file === "string" ? opts.file : "";
|
|
111
|
+
if (!filePath) throw new Error("--file is required for summarize-file");
|
|
112
|
+
return summarizeFilePlan({
|
|
113
|
+
filePath,
|
|
114
|
+
provider: typeof opts.provider === "string" ? opts.provider : void 0,
|
|
115
|
+
model: typeof opts.model === "string" ? opts.model : void 0
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
return registry;
|
|
120
|
+
}
|
|
121
|
+
function listSkills(registry) {
|
|
122
|
+
for (const skill of registry.list()) {
|
|
123
|
+
process.stdout.write(` ${skill.name.padEnd(20)} ${skill.description}
|
|
124
|
+
`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
export {
|
|
128
|
+
CanonicalSkillRunner,
|
|
129
|
+
SkillRegistry,
|
|
130
|
+
codeReviewPlan,
|
|
131
|
+
createDefaultRegistry,
|
|
132
|
+
listSkills,
|
|
133
|
+
summarizeFilePlan
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runner.ts","../src/skills/code-review.ts","../src/skills/summarize-file.ts","../src/skills/index.ts"],"sourcesContent":["import type { CanonicalSkillWorkflow, SkillRunResult } from \"./types.js\";\n\nexport class CanonicalSkillRunner {\n async run<TInput, TOutput>(\n skill: CanonicalSkillWorkflow<TInput, TOutput>,\n input: TInput,\n ): Promise<SkillRunResult<TOutput>> {\n const resolved = await skill.resolveInputs(input);\n const context = await skill.buildContext(resolved);\n const aiOutput = await skill.invokeAI(context);\n const ref = await skill.persistOutput(aiOutput);\n\n if (skill.notify) {\n try {\n await skill.notify(ref);\n } catch {\n // notify failure never fails the run\n }\n }\n\n return { output: aiOutput.result, ref, metadata: aiOutput.metadata };\n }\n}\n","import type { Workplan } from \"@workplane/workplans\";\n\nexport interface CodeReviewOptions {\n repoPath?: string;\n model?: string;\n branch?: string;\n}\n\nexport function codeReviewPlan(opts: CodeReviewOptions = {}): Workplan {\n const { repoPath = \".\", model = \"claude-haiku-4-5-20251001\", branch } = opts;\n const diffCmd = branch ? `git diff ${branch}..HEAD` : \"git diff HEAD~1\";\n\n return {\n id: \"code-review\",\n name: \"Code Review\",\n steps: [\n {\n id: \"diff\",\n name: \"Git Diff\",\n adapter: \"shell\",\n provider: \"shell\",\n payload: { command: diffCmd, cwd: repoPath },\n output: { dest: \"next\" },\n },\n {\n id: \"summarize\",\n name: \"Summarize\",\n adapter: \"ollama\",\n provider: \"ollama\",\n model: \"llama3\",\n payload: { prompt: \"Summarize these code changes concisely:\\n{{prevOutput}}\" },\n output: { dest: \"next\" },\n },\n {\n id: \"critique\",\n name: \"Critique\",\n adapter: \"anthropic\",\n provider: \"anthropic\",\n model,\n payload: { prompt: \"Review this summary for correctness, security issues, and code quality:\\n{{prevOutput}}\" },\n },\n ],\n };\n}\n","import type { Workplan } from \"@workplane/workplans\";\n\nexport interface SummarizeFileOptions {\n filePath: string;\n provider?: string;\n model?: string;\n}\n\nexport function summarizeFilePlan(opts: SummarizeFileOptions): Workplan {\n const { filePath, provider = \"ollama\", model = \"llama3\" } = opts;\n\n return {\n id: \"summarize-file\",\n name: \"Summarize File\",\n steps: [\n {\n id: \"read\",\n name: \"Read File\",\n adapter: \"file\",\n provider: \"file\",\n payload: { path: filePath },\n output: { dest: \"next\" },\n },\n {\n id: \"summarize\",\n name: \"Summarize\",\n adapter: provider,\n provider,\n model,\n payload: { prompt: \"Summarize the following file content concisely:\\n{{prevOutput}}\" },\n },\n ],\n };\n}\n","import type { SkillEntry } from \"../types.js\";\nimport { codeReviewPlan } from \"./code-review.js\";\nimport { summarizeFilePlan } from \"./summarize-file.js\";\n\nexport class SkillRegistry {\n private readonly skills = new Map<string, SkillEntry>();\n\n register(entry: SkillEntry): void {\n this.skills.set(entry.name, entry);\n }\n\n get(name: string): SkillEntry | undefined {\n return this.skills.get(name);\n }\n\n list(): SkillEntry[] {\n return Array.from(this.skills.values());\n }\n}\n\nexport function createDefaultRegistry(): SkillRegistry {\n const registry = new SkillRegistry();\n\n registry.register({\n name: \"code-review\",\n description: \"Git diff → local summarize (ollama) → frontier critique (anthropic)\",\n buildPlan: (opts) =>\n codeReviewPlan({\n repoPath: typeof opts.repo === \"string\" ? opts.repo : undefined,\n model: typeof opts.model === \"string\" ? opts.model : undefined,\n branch: typeof opts.branch === \"string\" ? opts.branch : undefined,\n }),\n });\n\n registry.register({\n name: \"summarize-file\",\n description: \"Read file → summarize with configurable provider (default: ollama)\",\n buildPlan: (opts) => {\n const filePath = typeof opts.file === \"string\" ? opts.file : \"\";\n if (!filePath) throw new Error(\"--file is required for summarize-file\");\n return summarizeFilePlan({\n filePath,\n provider: typeof opts.provider === \"string\" ? opts.provider : undefined,\n model: typeof opts.model === \"string\" ? opts.model : undefined,\n });\n },\n });\n\n return registry;\n}\n\nexport function listSkills(registry: SkillRegistry): void {\n for (const skill of registry.list()) {\n process.stdout.write(` ${skill.name.padEnd(20)} ${skill.description}\\n`);\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@workplane/agent-skills",
|
|
3
|
+
"version": "0.3.1",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/MindStaq/workplane.git"
|
|
10
|
+
},
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md"
|
|
22
|
+
],
|
|
23
|
+
"sideEffects": false,
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public",
|
|
26
|
+
"registry": "https://registry.npmjs.org/"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@workplane/workplans": "0.3.1"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsup"
|
|
33
|
+
}
|
|
34
|
+
}
|