yet-another-agentic-workflow 0.2.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 +125 -0
- package/dist/adapters.d.ts +43 -0
- package/dist/adapters.js +191 -0
- package/dist/adapters.js.map +1 -0
- package/dist/architect.d.ts +38 -0
- package/dist/architect.js +275 -0
- package/dist/architect.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +580 -0
- package/dist/cli.js.map +1 -0
- package/dist/feature.d.ts +30 -0
- package/dist/feature.js +344 -0
- package/dist/feature.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +26 -0
- package/dist/init.js +255 -0
- package/dist/init.js.map +1 -0
- package/dist/installer.d.ts +64 -0
- package/dist/installer.js +365 -0
- package/dist/installer.js.map +1 -0
- package/dist/observability.d.ts +37 -0
- package/dist/observability.js +200 -0
- package/dist/observability.js.map +1 -0
- package/dist/parser.d.ts +6 -0
- package/dist/parser.js +166 -0
- package/dist/parser.js.map +1 -0
- package/dist/persistence.d.ts +83 -0
- package/dist/persistence.js +279 -0
- package/dist/persistence.js.map +1 -0
- package/dist/providers.d.ts +14 -0
- package/dist/providers.js +27 -0
- package/dist/providers.js.map +1 -0
- package/dist/review.d.ts +29 -0
- package/dist/review.js +66 -0
- package/dist/review.js.map +1 -0
- package/dist/schema.d.ts +2 -0
- package/dist/schema.js +44 -0
- package/dist/schema.js.map +1 -0
- package/dist/skills.d.ts +24 -0
- package/dist/skills.js +210 -0
- package/dist/skills.js.map +1 -0
- package/dist/types.d.ts +86 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +48 -0
- package/schemas/agent.schema.json +37 -0
- package/schemas/context.schema.json +13 -0
- package/schemas/eval.schema.json +26 -0
- package/schemas/hook.schema.json +29 -0
- package/schemas/skill.schema.json +23 -0
- package/schemas/state.schema.json +14 -0
- package/schemas/workflow.schema.json +34 -0
- package/schemas/yaaw.schema.json +58 -0
- package/skills/clarify/SKILL.md +14 -0
- package/skills/code-review/SKILL.md +29 -0
- package/skills/slice-work/SKILL.md +15 -0
- package/skills/spec/SKILL.md +21 -0
- package/skills/tdd/SKILL.md +25 -0
- package/templates/instructions/managed-block.md +17 -0
package/dist/init.js
ADDED
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { access, mkdir, readFile, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import { basename, dirname, join, relative, resolve } from "node:path";
|
|
3
|
+
import { stringify } from "yaml";
|
|
4
|
+
import { createOfficialFeaturePrimitives } from "./feature.js";
|
|
5
|
+
export class InitConflictError extends Error {
|
|
6
|
+
constructor(path) {
|
|
7
|
+
super(`${path} already exists; rerun with --force to replace generated files`);
|
|
8
|
+
this.name = "InitConflictError";
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
async function exists(path) {
|
|
12
|
+
try {
|
|
13
|
+
await access(path);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function canonicalName(value) {
|
|
21
|
+
const normalized = value
|
|
22
|
+
.toLowerCase()
|
|
23
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
24
|
+
.replace(/^-+|-+$/g, "");
|
|
25
|
+
if (!normalized)
|
|
26
|
+
return "project";
|
|
27
|
+
return /^[a-z]/.test(normalized) ? normalized : `project-${normalized}`;
|
|
28
|
+
}
|
|
29
|
+
async function readPackageJson(root) {
|
|
30
|
+
const packagePath = join(root, "package.json");
|
|
31
|
+
if (!(await exists(packagePath)))
|
|
32
|
+
return undefined;
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(await readFile(packagePath, "utf8"));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function detectPackageManager(root, packageJson) {
|
|
41
|
+
if (typeof packageJson?.packageManager === "string") {
|
|
42
|
+
return packageJson.packageManager.split("@")[0];
|
|
43
|
+
}
|
|
44
|
+
const lockfiles = [
|
|
45
|
+
["pnpm-lock.yaml", "pnpm"],
|
|
46
|
+
["yarn.lock", "yarn"],
|
|
47
|
+
["bun.lock", "bun"],
|
|
48
|
+
["bun.lockb", "bun"],
|
|
49
|
+
["package-lock.json", "npm"]
|
|
50
|
+
];
|
|
51
|
+
for (const [file, manager] of lockfiles) {
|
|
52
|
+
if (await exists(join(root, file)))
|
|
53
|
+
return manager;
|
|
54
|
+
}
|
|
55
|
+
return packageJson ? "npm" : undefined;
|
|
56
|
+
}
|
|
57
|
+
function scriptCommand(manager, script) {
|
|
58
|
+
if (manager === "yarn")
|
|
59
|
+
return `yarn ${script}`;
|
|
60
|
+
if (manager === "pnpm")
|
|
61
|
+
return `pnpm ${script}`;
|
|
62
|
+
if (manager === "bun")
|
|
63
|
+
return `bun run ${script}`;
|
|
64
|
+
return script === "test" ? "npm test" : `npm run ${script}`;
|
|
65
|
+
}
|
|
66
|
+
function detectNodeCommands(packageJson, manager) {
|
|
67
|
+
if (!packageJson || !manager)
|
|
68
|
+
return {};
|
|
69
|
+
const rawScripts = packageJson.scripts;
|
|
70
|
+
if (!rawScripts || typeof rawScripts !== "object" || Array.isArray(rawScripts))
|
|
71
|
+
return {};
|
|
72
|
+
const scripts = rawScripts;
|
|
73
|
+
const candidates = {
|
|
74
|
+
test: ["test"],
|
|
75
|
+
lint: ["lint"],
|
|
76
|
+
typecheck: ["typecheck", "type-check"],
|
|
77
|
+
build: ["build"]
|
|
78
|
+
};
|
|
79
|
+
const commands = {};
|
|
80
|
+
for (const kind of Object.keys(candidates)) {
|
|
81
|
+
const script = candidates[kind].find((candidate) => typeof scripts[candidate] === "string");
|
|
82
|
+
if (script)
|
|
83
|
+
commands[kind] = scriptCommand(manager, script);
|
|
84
|
+
}
|
|
85
|
+
return commands;
|
|
86
|
+
}
|
|
87
|
+
async function detectLanguages(root) {
|
|
88
|
+
const markers = [
|
|
89
|
+
[["tsconfig.json"], "TypeScript"],
|
|
90
|
+
[["package.json"], "JavaScript"],
|
|
91
|
+
[["pyproject.toml", "requirements.txt", "setup.py"], "Python"],
|
|
92
|
+
[["Cargo.toml"], "Rust"],
|
|
93
|
+
[["go.mod"], "Go"],
|
|
94
|
+
[["pom.xml", "build.gradle", "build.gradle.kts"], "Java"],
|
|
95
|
+
[["Gemfile"], "Ruby"]
|
|
96
|
+
];
|
|
97
|
+
const languages = [];
|
|
98
|
+
for (const [files, language] of markers) {
|
|
99
|
+
if ((await Promise.all(files.map((file) => exists(join(root, file))))).some(Boolean)) {
|
|
100
|
+
languages.push(language);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return languages;
|
|
104
|
+
}
|
|
105
|
+
async function detectConventionalCommands(root, languages) {
|
|
106
|
+
if (languages.includes("Rust")) {
|
|
107
|
+
return { test: "cargo test", lint: "cargo clippy --all-targets", build: "cargo build" };
|
|
108
|
+
}
|
|
109
|
+
if (languages.includes("Go")) {
|
|
110
|
+
return { test: "go test ./...", lint: "go vet ./...", build: "go build ./..." };
|
|
111
|
+
}
|
|
112
|
+
if (languages.includes("Python")) {
|
|
113
|
+
const commands = { test: "python -m pytest" };
|
|
114
|
+
if (await exists(join(root, "ruff.toml")))
|
|
115
|
+
commands.lint = "python -m ruff check .";
|
|
116
|
+
if (await exists(join(root, "mypy.ini")))
|
|
117
|
+
commands.typecheck = "python -m mypy .";
|
|
118
|
+
return commands;
|
|
119
|
+
}
|
|
120
|
+
return {};
|
|
121
|
+
}
|
|
122
|
+
async function detectAiInstructions(root) {
|
|
123
|
+
const candidates = [
|
|
124
|
+
"AGENTS.md",
|
|
125
|
+
"CLAUDE.md",
|
|
126
|
+
"GEMINI.md",
|
|
127
|
+
".github/copilot-instructions.md",
|
|
128
|
+
".cursor/rules"
|
|
129
|
+
];
|
|
130
|
+
const found = [];
|
|
131
|
+
for (const candidate of candidates) {
|
|
132
|
+
const path = join(root, candidate);
|
|
133
|
+
if (!(await exists(path)))
|
|
134
|
+
continue;
|
|
135
|
+
const info = await stat(path);
|
|
136
|
+
if (info.isFile())
|
|
137
|
+
found.push(candidate.replaceAll("\\", "/"));
|
|
138
|
+
}
|
|
139
|
+
return found;
|
|
140
|
+
}
|
|
141
|
+
async function isInsideGitRepository(root) {
|
|
142
|
+
let current = root;
|
|
143
|
+
while (true) {
|
|
144
|
+
if (await exists(join(current, ".git")))
|
|
145
|
+
return true;
|
|
146
|
+
const parent = dirname(current);
|
|
147
|
+
if (parent === current)
|
|
148
|
+
return false;
|
|
149
|
+
current = parent;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
export async function discoverRepository(directory = ".") {
|
|
153
|
+
const root = resolve(directory);
|
|
154
|
+
const info = await stat(root);
|
|
155
|
+
if (!info.isDirectory())
|
|
156
|
+
throw new Error(`${directory} is not a directory`);
|
|
157
|
+
const packageJson = await readPackageJson(root);
|
|
158
|
+
const packageManager = await detectPackageManager(root, packageJson);
|
|
159
|
+
const languages = await detectLanguages(root);
|
|
160
|
+
const nodeCommands = detectNodeCommands(packageJson, packageManager);
|
|
161
|
+
const conventionalCommands = await detectConventionalCommands(root, languages);
|
|
162
|
+
const packageName = typeof packageJson?.name === "string" ? packageJson.name : basename(root);
|
|
163
|
+
const discovery = {
|
|
164
|
+
root,
|
|
165
|
+
projectName: canonicalName(packageName),
|
|
166
|
+
languages,
|
|
167
|
+
commands: { ...conventionalCommands, ...nodeCommands },
|
|
168
|
+
git: await isInsideGitRepository(root),
|
|
169
|
+
aiInstructions: await detectAiInstructions(root)
|
|
170
|
+
};
|
|
171
|
+
if (packageManager)
|
|
172
|
+
discovery.packageManager = packageManager;
|
|
173
|
+
return discovery;
|
|
174
|
+
}
|
|
175
|
+
function uniqueContext(discovery) {
|
|
176
|
+
const used = new Set();
|
|
177
|
+
return discovery.aiInstructions.map((path) => {
|
|
178
|
+
const base = canonicalName(`ai-instructions-${path.replace(/\.[^.]+$/, "")}`);
|
|
179
|
+
let name = base;
|
|
180
|
+
let index = 2;
|
|
181
|
+
while (used.has(name))
|
|
182
|
+
name = `${base}-${index++}`;
|
|
183
|
+
used.add(name);
|
|
184
|
+
return { name, path, description: "Existing repository instructions for coding agents." };
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
function projectDefinition(discovery) {
|
|
188
|
+
const evals = Object.entries(discovery.commands).map(([name, command]) => ({
|
|
189
|
+
name,
|
|
190
|
+
run: [command],
|
|
191
|
+
success: { exit_code: 0 }
|
|
192
|
+
}));
|
|
193
|
+
const verificationCommands = Object.values(discovery.commands);
|
|
194
|
+
const context = uniqueContext(discovery);
|
|
195
|
+
const feature = createOfficialFeaturePrimitives(verificationCommands, context);
|
|
196
|
+
return {
|
|
197
|
+
version: 1,
|
|
198
|
+
project: {
|
|
199
|
+
name: discovery.projectName,
|
|
200
|
+
description: discovery.languages.length
|
|
201
|
+
? `Initialized from a ${discovery.languages.join("/")} repository.`
|
|
202
|
+
: "Initialized from an existing repository."
|
|
203
|
+
},
|
|
204
|
+
skills: feature.skills,
|
|
205
|
+
agents: feature.agents,
|
|
206
|
+
hooks: [feature.hook],
|
|
207
|
+
evals: [...evals, feature.evaluation],
|
|
208
|
+
workflows: [feature.workflow],
|
|
209
|
+
context,
|
|
210
|
+
state: [
|
|
211
|
+
{
|
|
212
|
+
name: "workflow",
|
|
213
|
+
path: ".yaaw/state/workflow.json",
|
|
214
|
+
description: "Durable workflow progress and verification status.",
|
|
215
|
+
durable: true
|
|
216
|
+
}
|
|
217
|
+
]
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
export async function initializeRepository(directory = ".", options = {}) {
|
|
221
|
+
const discovery = await discoverRepository(directory);
|
|
222
|
+
const yaawDirectory = join(discovery.root, ".yaaw");
|
|
223
|
+
const configPath = join(yaawDirectory, "yaaw.yaml");
|
|
224
|
+
const discoveryPath = join(yaawDirectory, "discovery.json");
|
|
225
|
+
const statePath = join(yaawDirectory, "state", "workflow.json");
|
|
226
|
+
const feature = createOfficialFeaturePrimitives(Object.values(discovery.commands), uniqueContext(discovery));
|
|
227
|
+
const skillPaths = Object.keys(feature.skillDocuments).map((name) => join(yaawDirectory, "skills", name, "SKILL.md"));
|
|
228
|
+
if (!options.force) {
|
|
229
|
+
for (const generatedPath of [configPath, discoveryPath]) {
|
|
230
|
+
if (await exists(generatedPath))
|
|
231
|
+
throw new InitConflictError(generatedPath);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
await mkdir(join(yaawDirectory, "state"), { recursive: true });
|
|
235
|
+
await mkdir(join(yaawDirectory, "runs"), { recursive: true });
|
|
236
|
+
for (const skillPath of skillPaths)
|
|
237
|
+
await mkdir(dirname(skillPath), { recursive: true });
|
|
238
|
+
const writeOptions = options.force ? undefined : { flag: "wx" };
|
|
239
|
+
await writeFile(configPath, stringify(projectDefinition(discovery)), writeOptions);
|
|
240
|
+
await writeFile(discoveryPath, `${JSON.stringify({ ...discovery, root: "." }, null, 2)}\n`, "utf8");
|
|
241
|
+
if (!(await exists(statePath)) || options.force) {
|
|
242
|
+
await writeFile(statePath, `${JSON.stringify({ version: 1, status: "initialized", current: null }, null, 2)}\n`, "utf8");
|
|
243
|
+
}
|
|
244
|
+
for (const [name, source] of Object.entries(feature.skillDocuments)) {
|
|
245
|
+
const skillPath = join(yaawDirectory, "skills", name, "SKILL.md");
|
|
246
|
+
if (!(await exists(skillPath)) || options.force) {
|
|
247
|
+
await writeFile(skillPath, source, "utf8");
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return { discovery, configPath, discoveryPath, statePath, skillPaths };
|
|
251
|
+
}
|
|
252
|
+
export function relativeInitPaths(result) {
|
|
253
|
+
return [result.configPath, result.discoveryPath, result.statePath, ...result.skillPaths].map((path) => relative(result.discovery.root, path).replaceAll("\\", "/"));
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type RepositoryDiscovery } from "./init.js";
|
|
2
|
+
import { type ProviderDefinition, type ProviderId } from "./providers.js";
|
|
3
|
+
export declare const MANIFEST_SCHEMA_VERSION = 1;
|
|
4
|
+
export declare const MANAGED_BLOCK_START = "<!-- yaaw:start -->";
|
|
5
|
+
export declare const MANAGED_BLOCK_END = "<!-- yaaw:end -->";
|
|
6
|
+
export declare const MANAGED_INSTRUCTION_BLOCK = "<!-- yaaw:start -->\n\n## Yet Another Agentic Workflow\n\nThis repository uses YAAW engineering skills.\n\nUse the installed skills when their procedure matches the task.\n\nFor meaningful implementation work:\n\n- resolve consequential ambiguity before coding;\n- establish observable acceptance criteria;\n- prefer small independently verifiable slices;\n- use feedback loops rather than guessing;\n- verify before declaring work complete.\n\n<!-- yaaw:end -->";
|
|
7
|
+
export interface ManagedFileRecord {
|
|
8
|
+
hash: string;
|
|
9
|
+
}
|
|
10
|
+
export interface InstallManifest {
|
|
11
|
+
schemaVersion: number;
|
|
12
|
+
installedVersion: string;
|
|
13
|
+
providers: ProviderId[];
|
|
14
|
+
installedAt: string;
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
managedFiles: Record<string, ManagedFileRecord>;
|
|
17
|
+
managedInstructionBlocks: Record<string, ManagedFileRecord>;
|
|
18
|
+
}
|
|
19
|
+
export type PlanStatus = "added" | "updated" | "unchanged" | "removed" | "conflicted";
|
|
20
|
+
export type PlanKind = "skill" | "instruction";
|
|
21
|
+
export interface InstallOperation {
|
|
22
|
+
path: string;
|
|
23
|
+
kind: PlanKind;
|
|
24
|
+
status: PlanStatus;
|
|
25
|
+
content?: string;
|
|
26
|
+
previousHash?: string;
|
|
27
|
+
desiredHash?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface InstallationPlan {
|
|
30
|
+
root: string;
|
|
31
|
+
providers: ProviderId[];
|
|
32
|
+
discovery: RepositoryDiscovery;
|
|
33
|
+
previousManifest?: InstallManifest;
|
|
34
|
+
operations: InstallOperation[];
|
|
35
|
+
}
|
|
36
|
+
export interface InstallOptions {
|
|
37
|
+
providers: ProviderId[];
|
|
38
|
+
overwriteModified?: boolean;
|
|
39
|
+
now?: Date;
|
|
40
|
+
}
|
|
41
|
+
export interface InstallResult {
|
|
42
|
+
plan: InstallationPlan;
|
|
43
|
+
manifest: InstallManifest;
|
|
44
|
+
manifestPath: string;
|
|
45
|
+
}
|
|
46
|
+
export interface DoctorCheck {
|
|
47
|
+
status: "ok" | "warning" | "error";
|
|
48
|
+
message: string;
|
|
49
|
+
path?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface DoctorResult {
|
|
52
|
+
healthy: boolean;
|
|
53
|
+
root: string;
|
|
54
|
+
manifest?: InstallManifest;
|
|
55
|
+
checks: DoctorCheck[];
|
|
56
|
+
}
|
|
57
|
+
export declare function readInstallManifest(root?: string): Promise<InstallManifest | undefined>;
|
|
58
|
+
export declare function detectLegacyProviders(root?: string): Promise<ProviderId[]>;
|
|
59
|
+
export declare function planInstallation(root: string, options: InstallOptions): Promise<InstallationPlan>;
|
|
60
|
+
export declare function applyInstallation(plan: InstallationPlan, now?: Date): Promise<InstallResult>;
|
|
61
|
+
export declare function installRepository(root: string, options: InstallOptions): Promise<InstallResult>;
|
|
62
|
+
export declare function doctorRepository(root?: string): Promise<DoctorResult>;
|
|
63
|
+
export declare function providerNames(ids: ProviderId[]): string[];
|
|
64
|
+
export declare function providerFromDefinition(definition: ProviderDefinition): ProviderId;
|