agentbrief 0.1.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/LICENSE +21 -0
- package/README.md +141 -0
- package/briefs/code-reviewer/brief.yaml +8 -0
- package/briefs/code-reviewer/knowledge/review-standards.md +32 -0
- package/briefs/code-reviewer/personality.md +19 -0
- package/briefs/code-reviewer/skills/architecture-review/SKILL.md +76 -0
- package/briefs/code-reviewer/skills/review-process/SKILL.md +41 -0
- package/briefs/code-reviewer/skills/verification/SKILL.md +47 -0
- package/briefs/data-analyst/brief.yaml +8 -0
- package/briefs/data-analyst/knowledge/metrics-reference.md +43 -0
- package/briefs/data-analyst/personality.md +23 -0
- package/briefs/data-analyst/skills/metrics-framework/SKILL.md +90 -0
- package/briefs/data-analyst/skills/sql-query-builder/SKILL.md +115 -0
- package/briefs/devops-sre/brief.yaml +12 -0
- package/briefs/devops-sre/knowledge/runbook.md +69 -0
- package/briefs/devops-sre/personality.md +18 -0
- package/briefs/devops-sre/skills/ci-cd-github-actions/SKILL.md +114 -0
- package/briefs/devops-sre/skills/monitoring-observability/SKILL.md +394 -0
- package/briefs/devops-sre/skills/systematic-debugging/SKILL.md +46 -0
- package/briefs/devops-sre/skills/verification/SKILL.md +47 -0
- package/briefs/frontend-design/brief.yaml +8 -0
- package/briefs/frontend-design/knowledge/design-principles.md +43 -0
- package/briefs/frontend-design/personality.md +19 -0
- package/briefs/frontend-design/skills/design-review-checklist/SKILL.md +151 -0
- package/briefs/frontend-design/skills/web-design-guidelines/SKILL.md +39 -0
- package/briefs/fullstack-dev/brief.yaml +9 -0
- package/briefs/fullstack-dev/personality.md +18 -0
- package/briefs/growth-engineer/brief.yaml +8 -0
- package/briefs/growth-engineer/knowledge/growth-framework.md +83 -0
- package/briefs/growth-engineer/personality.md +19 -0
- package/briefs/growth-engineer/skills/analytics-setup/SKILL.md +109 -0
- package/briefs/growth-engineer/skills/brainstorming/SKILL.md +55 -0
- package/briefs/growth-engineer/skills/content-strategy/SKILL.md +93 -0
- package/briefs/growth-engineer/skills/seo-audit/SKILL.md +412 -0
- package/briefs/growth-engineer/skills/seo-audit/evals/evals.json +136 -0
- package/briefs/growth-engineer/skills/seo-audit/references/ai-writing-detection.md +200 -0
- package/briefs/nextjs-fullstack/brief.yaml +12 -0
- package/briefs/nextjs-fullstack/knowledge/conventions.md +57 -0
- package/briefs/nextjs-fullstack/personality.md +19 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/SKILL.md +153 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/async-patterns.md +87 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/bundling.md +180 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/data-patterns.md +297 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/debug-tricks.md +105 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/directives.md +73 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/error-handling.md +227 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/file-conventions.md +140 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/font.md +245 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/functions.md +108 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/hydration-error.md +91 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/image.md +173 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/metadata.md +301 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/parallel-routes.md +287 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/route-handlers.md +146 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/rsc-boundaries.md +159 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/runtime-selection.md +39 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/scripts.md +141 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/self-hosting.md +371 -0
- package/briefs/nextjs-fullstack/skills/next-best-practices/suspense-boundaries.md +67 -0
- package/briefs/nextjs-fullstack/skills/tdd/SKILL.md +53 -0
- package/briefs/product-manager/brief.yaml +8 -0
- package/briefs/product-manager/knowledge/pm-toolkit.md +51 -0
- package/briefs/product-manager/personality.md +19 -0
- package/briefs/product-manager/skills/brainstorming/SKILL.md +55 -0
- package/briefs/product-manager/skills/specification/SKILL.md +76 -0
- package/briefs/qa-engineer/brief.yaml +11 -0
- package/briefs/qa-engineer/knowledge/testing-patterns.md +54 -0
- package/briefs/qa-engineer/personality.md +24 -0
- package/briefs/qa-engineer/skills/qa-test-and-fix/SKILL.md +101 -0
- package/briefs/qa-engineer/skills/regression-testing/SKILL.md +95 -0
- package/briefs/security-auditor/brief.yaml +12 -0
- package/briefs/security-auditor/knowledge/code-patterns.md +49 -0
- package/briefs/security-auditor/knowledge/owasp-cheatsheet.md +75 -0
- package/briefs/security-auditor/personality.md +23 -0
- package/briefs/security-auditor/skills/security-review/SKILL.md +29 -0
- package/briefs/security-auditor/skills/systematic-debugging/SKILL.md +46 -0
- package/briefs/security-auditor/skills/verification/SKILL.md +47 -0
- package/briefs/startup-builder/brief.yaml +8 -0
- package/briefs/startup-builder/knowledge/startup-phases.md +64 -0
- package/briefs/startup-builder/personality.md +18 -0
- package/briefs/startup-builder/skills/ceo-review/SKILL.md +95 -0
- package/briefs/startup-builder/skills/launch-strategy/SKILL.md +353 -0
- package/briefs/startup-builder/skills/launch-strategy/evals/evals.json +91 -0
- package/briefs/startup-builder/skills/tdd/SKILL.md +53 -0
- package/briefs/startup-builder/skills/verification/SKILL.md +47 -0
- package/briefs/startup-kit/brief.yaml +9 -0
- package/briefs/startup-kit/personality.md +18 -0
- package/briefs/tech-writer/brief.yaml +8 -0
- package/briefs/tech-writer/knowledge/style-guide.md +54 -0
- package/briefs/tech-writer/personality.md +19 -0
- package/briefs/tech-writer/skills/api-documentation/SKILL.md +390 -0
- package/briefs/tech-writer/skills/plan-and-execute/SKILL.md +54 -0
- package/briefs/tech-writer/skills/release-notes/SKILL.md +77 -0
- package/briefs/typescript-strict/brief.yaml +8 -0
- package/briefs/typescript-strict/knowledge/type-patterns.md +117 -0
- package/briefs/typescript-strict/personality.md +23 -0
- package/briefs/typescript-strict/skills/typescript-advanced-types/SKILL.md +717 -0
- package/dist/brief.d.ts +13 -0
- package/dist/brief.d.ts.map +1 -0
- package/dist/brief.js +90 -0
- package/dist/brief.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +180 -0
- package/dist/cli.js.map +1 -0
- package/dist/compiler.d.ts +25 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +253 -0
- package/dist/compiler.js.map +1 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +255 -0
- package/dist/index.js.map +1 -0
- package/dist/injector.d.ts +17 -0
- package/dist/injector.d.ts.map +1 -0
- package/dist/injector.js +76 -0
- package/dist/injector.js.map +1 -0
- package/dist/lock.d.ts +8 -0
- package/dist/lock.d.ts.map +1 -0
- package/dist/lock.js +50 -0
- package/dist/lock.js.map +1 -0
- package/dist/resolver.d.ts +24 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +135 -0
- package/dist/resolver.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/package.json +64 -0
- package/registry.yaml +91 -0
- package/templates/default/brief.yaml +7 -0
- package/templates/default/knowledge/.gitkeep +0 -0
- package/templates/default/personality.md +12 -0
- package/templates/security/brief.yaml +6 -0
- package/templates/security/knowledge/.gitkeep +0 -0
- package/templates/security/personality.md +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brief.d.ts","sourceRoot":"","sources":["../src/brief.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAS/D;AAeD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAKnF;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAsBvF"}
|
package/dist/brief.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { basename, join } from "node:path";
|
|
4
|
+
import yaml from "js-yaml";
|
|
5
|
+
export async function loadBrief(dir) {
|
|
6
|
+
const specPath = join(dir, "brief.yaml");
|
|
7
|
+
if (!existsSync(specPath)) {
|
|
8
|
+
throw new Error(`No brief.yaml found in: ${dir}`);
|
|
9
|
+
}
|
|
10
|
+
const content = await readFile(specPath, "utf-8");
|
|
11
|
+
const spec = yaml.load(content);
|
|
12
|
+
validate(spec, specPath);
|
|
13
|
+
return spec;
|
|
14
|
+
}
|
|
15
|
+
function validate(spec, path) {
|
|
16
|
+
const s = spec;
|
|
17
|
+
if (!s || typeof s !== "object") {
|
|
18
|
+
throw new Error(`Invalid brief.yaml at ${path}: must be a YAML object`);
|
|
19
|
+
}
|
|
20
|
+
if (!s.name || typeof s.name !== "string") {
|
|
21
|
+
throw new Error(`brief.yaml must have a "name" string field`);
|
|
22
|
+
}
|
|
23
|
+
if (!s.version || typeof s.version !== "string") {
|
|
24
|
+
throw new Error(`brief.yaml must have a "version" string field`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export async function loadPersonality(dir, spec) {
|
|
28
|
+
const relPath = spec.personality || "personality.md";
|
|
29
|
+
const fullPath = join(dir, relPath);
|
|
30
|
+
if (!existsSync(fullPath))
|
|
31
|
+
return "";
|
|
32
|
+
return readFile(fullPath, "utf-8");
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Scan skill directories and extract SKILL.md frontmatter.
|
|
36
|
+
*
|
|
37
|
+
* Each skill is a directory containing a SKILL.md file (+ optional scripts/, references/, assets/).
|
|
38
|
+
* Compatible with the skills.sh / Agent Skills ecosystem.
|
|
39
|
+
*
|
|
40
|
+
* Layout: skills/{skill-name}/SKILL.md
|
|
41
|
+
*/
|
|
42
|
+
export async function loadSkillMetas(dir, spec) {
|
|
43
|
+
if (!spec.skills || spec.skills.length === 0)
|
|
44
|
+
return [];
|
|
45
|
+
const metas = [];
|
|
46
|
+
for (const s of spec.skills) {
|
|
47
|
+
const fullPath = join(dir, s);
|
|
48
|
+
if (!existsSync(fullPath) || !statSync(fullPath).isDirectory())
|
|
49
|
+
continue;
|
|
50
|
+
for (const entry of readdirSync(fullPath)) {
|
|
51
|
+
const entryPath = join(fullPath, entry);
|
|
52
|
+
if (!statSync(entryPath).isDirectory())
|
|
53
|
+
continue;
|
|
54
|
+
const skillMd = join(entryPath, "SKILL.md");
|
|
55
|
+
if (existsSync(skillMd)) {
|
|
56
|
+
const meta = await parseSkillFrontmatter(skillMd, `${entry}/`);
|
|
57
|
+
metas.push(meta);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return metas;
|
|
62
|
+
}
|
|
63
|
+
async function parseSkillFrontmatter(filePath, relPath) {
|
|
64
|
+
const content = await readFile(filePath, "utf-8");
|
|
65
|
+
const fallbackName = basename(filePath, ".md");
|
|
66
|
+
// Check for YAML frontmatter (--- ... ---)
|
|
67
|
+
if (content.startsWith("---")) {
|
|
68
|
+
const endIdx = content.indexOf("---", 3);
|
|
69
|
+
if (endIdx !== -1) {
|
|
70
|
+
try {
|
|
71
|
+
const frontmatter = yaml.load(content.slice(3, endIdx));
|
|
72
|
+
return {
|
|
73
|
+
name: frontmatter.name || fallbackName,
|
|
74
|
+
description: frontmatter.description,
|
|
75
|
+
path: relPath,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// Invalid YAML frontmatter, fall through
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// No frontmatter — try to extract name from first heading
|
|
84
|
+
const headingMatch = content.match(/^#\s+(.+)/m);
|
|
85
|
+
return {
|
|
86
|
+
name: headingMatch ? headingMatch[1].trim() : fallbackName,
|
|
87
|
+
path: relPath,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=brief.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brief.js","sourceRoot":"","sources":["../src/brief.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAc,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,IAAa,EAAE,IAAY;IAC5C,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,yBAAyB,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAClE,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,IAAe;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,gBAAgB,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,IAAe;IAChE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAExD,MAAM,KAAK,GAAgB,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;YAAE,SAAS;QAEzE,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;gBAAE,SAAS;YAEjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,QAAgB,EAAE,OAAe;IACrE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAE/C,2CAA2C;IAC3C,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC;gBACJ,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAA4B,CAAC;gBACnF,OAAO;oBACN,IAAI,EAAG,WAAW,CAAC,IAAe,IAAI,YAAY;oBAClD,WAAW,EAAE,WAAW,CAAC,WAAiC;oBAC1D,IAAI,EAAE,OAAO;iBACb,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACR,yCAAyC;YAC1C,CAAC;QACF,CAAC;IACF,CAAC;IAED,0DAA0D;IAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACjD,OAAO;QACN,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY;QAC1D,IAAI,EAAE,OAAO;KACb,CAAC;AACH,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { eject, init, list, search, show, update, use } from "./index.js";
|
|
4
|
+
const program = new Command();
|
|
5
|
+
program.name("agentbrief").description("Pluggable role definitions for AI coding agents").version("0.1.0");
|
|
6
|
+
program.addHelpText("after", `
|
|
7
|
+
Quick start:
|
|
8
|
+
agentbrief use ./path/to/brief Apply a brief to your project
|
|
9
|
+
agentbrief init my-agent Create a new brief from scratch
|
|
10
|
+
agentbrief list Show applied briefs
|
|
11
|
+
|
|
12
|
+
Documentation: https://github.com/0xranx/agentbrief`);
|
|
13
|
+
// ── use ─────────────────────────────────────────────────
|
|
14
|
+
program
|
|
15
|
+
.command("use <source>")
|
|
16
|
+
.description("Apply a brief to the current project")
|
|
17
|
+
.option("-d, --dir <path>", "Project directory", ".")
|
|
18
|
+
.action(async (source, opts) => {
|
|
19
|
+
try {
|
|
20
|
+
const result = await use({ source, projectDir: opts.dir });
|
|
21
|
+
console.log(`✓ Applied "${result.name}" v${result.version}`);
|
|
22
|
+
console.log("");
|
|
23
|
+
if (result.description) {
|
|
24
|
+
console.log(` Description: ${result.description}`);
|
|
25
|
+
}
|
|
26
|
+
if (result.knowledgeCount > 0) {
|
|
27
|
+
console.log(` Knowledge: ${result.knowledgeCount} ${result.knowledgeCount === 1 ? "entry" : "entries"}`);
|
|
28
|
+
}
|
|
29
|
+
if (result.skillsCount > 0) {
|
|
30
|
+
console.log(` Skills: ${result.skillsCount} ${result.skillsCount === 1 ? "entry" : "entries"}`);
|
|
31
|
+
}
|
|
32
|
+
console.log("");
|
|
33
|
+
console.log(` Injected into: ${result.files.join(", ")}`);
|
|
34
|
+
console.log("");
|
|
35
|
+
console.log(" Start a new conversation with your AI coding agent to see the effect.");
|
|
36
|
+
if (result.claudeLines > 500) {
|
|
37
|
+
console.log("");
|
|
38
|
+
console.log(` ⚠ CLAUDE.md is ${result.claudeLines} lines (recommended: < 300). Consider using extends to consolidate briefs.`);
|
|
39
|
+
}
|
|
40
|
+
else if (result.claudeLines > 300) {
|
|
41
|
+
console.log("");
|
|
42
|
+
console.log(` Note: CLAUDE.md is ${result.claudeLines} lines. Keep it under 300 for best results.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
console.error(`Error: ${err.message}`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// ── eject ───────────────────────────────────────────────
|
|
51
|
+
program
|
|
52
|
+
.command("eject <name>")
|
|
53
|
+
.description("Remove a brief from the current project")
|
|
54
|
+
.option("-d, --dir <path>", "Project directory", ".")
|
|
55
|
+
.action(async (name, opts) => {
|
|
56
|
+
try {
|
|
57
|
+
const result = await eject(name, opts.dir);
|
|
58
|
+
if (result.files.length === 0) {
|
|
59
|
+
console.log(`No injection found for "${name}".`);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.log(`✓ Ejected "${name}" from: ${result.files.join(", ")}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
console.error(`Error: ${err.message}`);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// ── list ────────────────────────────────────────────────
|
|
71
|
+
program
|
|
72
|
+
.command("list")
|
|
73
|
+
.description("List briefs applied to the current project")
|
|
74
|
+
.option("-d, --dir <path>", "Project directory", ".")
|
|
75
|
+
.action(async (opts) => {
|
|
76
|
+
try {
|
|
77
|
+
const entries = await list(opts.dir);
|
|
78
|
+
if (entries.length === 0) {
|
|
79
|
+
console.log("No briefs applied.");
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
console.log("Applied briefs:\n");
|
|
83
|
+
const nameWidth = Math.max(4, ...entries.map((e) => e.name.length));
|
|
84
|
+
const header = ` ${"NAME".padEnd(nameWidth)} VERSION SOURCE`;
|
|
85
|
+
console.log(header);
|
|
86
|
+
for (const e of entries) {
|
|
87
|
+
console.log(` ${e.name.padEnd(nameWidth)} v${e.version.padEnd(7)} ${e.source}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
console.error(`Error: ${err.message}`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
// ── show ────────────────────────────────────────────────
|
|
96
|
+
program
|
|
97
|
+
.command("show <name>")
|
|
98
|
+
.description("Show the injected content for a brief")
|
|
99
|
+
.option("-d, --dir <path>", "Project directory", ".")
|
|
100
|
+
.action(async (name, opts) => {
|
|
101
|
+
try {
|
|
102
|
+
const content = await show(name, opts.dir);
|
|
103
|
+
if (!content) {
|
|
104
|
+
console.log(`No injection found for "${name}".`);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
console.log(content);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
console.error(`Error: ${err.message}`);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// ── update ──────────────────────────────────────────────
|
|
115
|
+
program
|
|
116
|
+
.command("update [name]")
|
|
117
|
+
.description("Re-apply briefs from their sources (fetches latest)")
|
|
118
|
+
.option("-d, --dir <path>", "Project directory", ".")
|
|
119
|
+
.action(async (name, opts) => {
|
|
120
|
+
try {
|
|
121
|
+
const results = await update({ name, projectDir: opts.dir });
|
|
122
|
+
if (results.length === 0) {
|
|
123
|
+
console.log(name ? `Brief "${name}" not found.` : "No briefs applied.");
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
for (const r of results) {
|
|
127
|
+
console.log(`✓ Updated "${r.name}" v${r.version}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
console.error(`Error: ${err.message}`);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
// ── search ──────────────────────────────────────────────
|
|
136
|
+
program
|
|
137
|
+
.command("search [query]")
|
|
138
|
+
.description("Browse available briefs from the registry")
|
|
139
|
+
.action(async (query) => {
|
|
140
|
+
try {
|
|
141
|
+
const entries = await search(query);
|
|
142
|
+
if (entries.length === 0) {
|
|
143
|
+
console.log(query ? `No briefs matching "${query}".` : "Registry is empty.");
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
console.log("Available briefs:\n");
|
|
147
|
+
const nameWidth = Math.max(4, ...entries.map((e) => e.name.length));
|
|
148
|
+
console.log(` ${"NAME".padEnd(nameWidth)} TRUST DESCRIPTION`);
|
|
149
|
+
for (const e of entries) {
|
|
150
|
+
const trust = e.trust.padEnd(9);
|
|
151
|
+
console.log(` ${e.name.padEnd(nameWidth)} ${trust} ${e.description || ""}`);
|
|
152
|
+
}
|
|
153
|
+
console.log(`\nUsage: agentbrief use <name>`);
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
console.error(`Error: ${err.message}`);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
// ── init ────────────────────────────────────────────────
|
|
161
|
+
program
|
|
162
|
+
.command("init <name>")
|
|
163
|
+
.description("Create a new brief")
|
|
164
|
+
.option("-d, --dir <path>", "Target directory")
|
|
165
|
+
.option("--description <text>", "Brief description")
|
|
166
|
+
.option("-t, --template <name>", "Use a template (e.g., security)")
|
|
167
|
+
.action(async (name, opts) => {
|
|
168
|
+
try {
|
|
169
|
+
const dir = opts.dir || `./${name}`;
|
|
170
|
+
const result = await init({ name, dir, description: opts.description, template: opts.template });
|
|
171
|
+
console.log(`✓ Created brief "${name}" at ${result}`);
|
|
172
|
+
console.log(" Edit brief.yaml and personality.md to define your agent role.");
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
console.error(`Error: ${err.message}`);
|
|
176
|
+
process.exit(1);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
program.parse();
|
|
180
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,iDAAiD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE3G,OAAO,CAAC,WAAW,CAClB,OAAO,EACP;;;;;;oDAMmD,CACnD,CAAC;AAEF,2DAA2D;AAE3D,OAAO;KACL,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAqB,EAAE,EAAE;IACvD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;QACvF,IAAI,MAAM,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CACV,oBAAoB,MAAM,CAAC,WAAW,4EAA4E,CAClH,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,WAAW,6CAA6C,CAAC,CAAC;QACtG,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC,CAAC,CAAC;AAEJ,2DAA2D;AAE3D,OAAO;KACL,OAAO,CAAC,cAAc,CAAC;KACvB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAqB,EAAE,EAAE;IACrD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,WAAW,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC,CAAC,CAAC;AAEJ,2DAA2D;AAE3D,OAAO;KACL,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,IAAqB,EAAE,EAAE;IACvC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAClC,OAAO;QACR,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACpF,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC,CAAC,CAAC;AAEJ,2DAA2D;AAE3D,OAAO;KACL,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAAqB,EAAE,EAAE;IACrD,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC,CAAC,CAAC;AAEJ,2DAA2D;AAE3D,OAAO;KACL,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,GAAG,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,IAAqB,EAAE,EAAE;IACjE,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;YACxE,OAAO;QACR,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC,CAAC,CAAC;AAEJ,2DAA2D;AAE3D,OAAO;KACL,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,2CAA2C,CAAC;KACxD,MAAM,CAAC,KAAK,EAAE,KAAc,EAAE,EAAE;IAChC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAC7E,OAAO;QACR,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC,CAAC,CAAC;AAEJ,2DAA2D;AAE3D,OAAO;KACL,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;KAC9C,MAAM,CAAC,sBAAsB,EAAE,mBAAmB,CAAC;KACnD,MAAM,CAAC,uBAAuB,EAAE,iCAAiC,CAAC;KAClE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,IAA+D,EAAE,EAAE;IAC/F,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,IAAI,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,QAAQ,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACF,CAAC,CAAC,CAAC;AAEJ,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { BriefSpec, EngineTarget, SkillMeta } from "./types.js";
|
|
2
|
+
export interface CompileOpts {
|
|
3
|
+
spec: BriefSpec;
|
|
4
|
+
personality: string;
|
|
5
|
+
/** Target engine. When omitted, defaults to 'claude-code' (full output). */
|
|
6
|
+
engine?: EngineTarget;
|
|
7
|
+
/** Parsed skill metadata from SKILL.md frontmatter */
|
|
8
|
+
skillMetas?: SkillMeta[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Reduction for Cursor: keep headings, first prose paragraph after each heading,
|
|
12
|
+
* lists, and code blocks. Drops subsequent prose paragraphs.
|
|
13
|
+
*/
|
|
14
|
+
export declare function condense(text: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Moderate reduction for OpenCode/Codex: keep first sentence of prose paragraphs,
|
|
17
|
+
* preserve structured content (headings, lists, code blocks) intact.
|
|
18
|
+
*/
|
|
19
|
+
export declare function moderate(text: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Compile a brief spec + personality into a markdown document.
|
|
22
|
+
* Output is adapted to the target engine's conventions and length preferences.
|
|
23
|
+
*/
|
|
24
|
+
export declare function compile(opts: CompileOpts): string;
|
|
25
|
+
//# sourceMappingURL=compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAe,SAAS,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,sDAAsD;IACtD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CACzB;AAYD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0D7C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2B7C;AAsID;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CA4BjD"}
|
package/dist/compiler.js
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
function resolveMode(engine) {
|
|
2
|
+
if (!engine || engine === "claude-code")
|
|
3
|
+
return "full";
|
|
4
|
+
if (engine === "cursor")
|
|
5
|
+
return "minimal";
|
|
6
|
+
return "concise"; // opencode, codex
|
|
7
|
+
}
|
|
8
|
+
// ── Text reduction helpers ─────────────────────────────
|
|
9
|
+
/**
|
|
10
|
+
* Reduction for Cursor: keep headings, first prose paragraph after each heading,
|
|
11
|
+
* lists, and code blocks. Drops subsequent prose paragraphs.
|
|
12
|
+
*/
|
|
13
|
+
export function condense(text) {
|
|
14
|
+
const lines = text.split("\n");
|
|
15
|
+
const result = [];
|
|
16
|
+
let inCodeBlock = false;
|
|
17
|
+
let justSawHeading = false;
|
|
18
|
+
let keptProseAfterHeading = false;
|
|
19
|
+
for (const line of lines) {
|
|
20
|
+
if (line.trimStart().startsWith("```")) {
|
|
21
|
+
inCodeBlock = !inCodeBlock;
|
|
22
|
+
result.push(line);
|
|
23
|
+
justSawHeading = false;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (inCodeBlock) {
|
|
27
|
+
result.push(line);
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
// Keep headings
|
|
31
|
+
if (/^#{1,6}\s/.test(line)) {
|
|
32
|
+
result.push(line);
|
|
33
|
+
justSawHeading = true;
|
|
34
|
+
keptProseAfterHeading = false;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
// Keep list items (-, *, numbered)
|
|
38
|
+
if (/^\s*[-*]\s/.test(line) || /^\s*\d+\.\s/.test(line)) {
|
|
39
|
+
result.push(line);
|
|
40
|
+
justSawHeading = false;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
// Keep empty lines (preserve structure)
|
|
44
|
+
if (line.trim() === "") {
|
|
45
|
+
result.push(line);
|
|
46
|
+
// Empty line after heading prose means we're done with that paragraph
|
|
47
|
+
if (keptProseAfterHeading) {
|
|
48
|
+
justSawHeading = false;
|
|
49
|
+
}
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
// Keep first prose paragraph after a heading (the identity/context statement)
|
|
53
|
+
if (justSawHeading && !keptProseAfterHeading) {
|
|
54
|
+
result.push(line);
|
|
55
|
+
keptProseAfterHeading = true;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (keptProseAfterHeading && justSawHeading) {
|
|
59
|
+
// Still in the first paragraph after heading (no blank line yet)
|
|
60
|
+
result.push(line);
|
|
61
|
+
}
|
|
62
|
+
// Drop other prose paragraphs
|
|
63
|
+
}
|
|
64
|
+
// Collapse 3+ consecutive empty lines into 2
|
|
65
|
+
return result
|
|
66
|
+
.join("\n")
|
|
67
|
+
.replace(/\n{3,}/g, "\n\n")
|
|
68
|
+
.trim();
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Moderate reduction for OpenCode/Codex: keep first sentence of prose paragraphs,
|
|
72
|
+
* preserve structured content (headings, lists, code blocks) intact.
|
|
73
|
+
*/
|
|
74
|
+
export function moderate(text) {
|
|
75
|
+
const blocks = text.split(/\n\n+/);
|
|
76
|
+
const result = [];
|
|
77
|
+
for (const block of blocks) {
|
|
78
|
+
const trimmed = block.trim();
|
|
79
|
+
if (!trimmed)
|
|
80
|
+
continue;
|
|
81
|
+
// Keep headings, lists, code blocks intact
|
|
82
|
+
if (/^#{1,6}\s/.test(trimmed) ||
|
|
83
|
+
/^\s*[-*]\s/.test(trimmed) ||
|
|
84
|
+
/^\s*\d+\.\s/.test(trimmed) ||
|
|
85
|
+
trimmed.startsWith("```")) {
|
|
86
|
+
result.push(trimmed);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// Prose paragraph: keep first sentence only
|
|
90
|
+
const firstSentence = extractFirstSentence(trimmed);
|
|
91
|
+
if (firstSentence) {
|
|
92
|
+
result.push(firstSentence);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return result.join("\n\n").trim();
|
|
96
|
+
}
|
|
97
|
+
function extractFirstSentence(text) {
|
|
98
|
+
// Match up to and including the first sentence-ending punctuation followed by space or end
|
|
99
|
+
const match = text.match(/^(.+?[.!?])(?:\s|$)/);
|
|
100
|
+
return match ? match[1] : text;
|
|
101
|
+
}
|
|
102
|
+
// ── Section builders ───────────────────────────────────
|
|
103
|
+
function buildHeader(spec, mode) {
|
|
104
|
+
const parts = [];
|
|
105
|
+
if (mode === "minimal") {
|
|
106
|
+
parts.push(`# ${spec.name}`);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
parts.push(`# AgentBrief: ${spec.name}`);
|
|
110
|
+
if (spec.description) {
|
|
111
|
+
parts.push(`> ${spec.description}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (mode === "full") {
|
|
115
|
+
parts.push("> Applied via AgentBrief. Do not edit this section manually.");
|
|
116
|
+
}
|
|
117
|
+
return parts.join("\n");
|
|
118
|
+
}
|
|
119
|
+
function buildPersonality(personality, mode) {
|
|
120
|
+
const trimmed = personality.trim();
|
|
121
|
+
if (!trimmed)
|
|
122
|
+
return "";
|
|
123
|
+
if (mode === "full")
|
|
124
|
+
return trimmed;
|
|
125
|
+
if (mode === "minimal")
|
|
126
|
+
return condense(trimmed);
|
|
127
|
+
return moderate(trimmed); // concise
|
|
128
|
+
}
|
|
129
|
+
function buildKnowledge(spec, mode) {
|
|
130
|
+
if (!spec.knowledge || spec.knowledge.length === 0)
|
|
131
|
+
return "";
|
|
132
|
+
if (mode === "minimal")
|
|
133
|
+
return ""; // Cursor: omit entirely
|
|
134
|
+
const lines = [];
|
|
135
|
+
if (mode === "full") {
|
|
136
|
+
lines.push("## Reference Knowledge");
|
|
137
|
+
lines.push("");
|
|
138
|
+
lines.push("The following domain knowledge files are available. Read them when you need domain-specific information:");
|
|
139
|
+
lines.push("");
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
lines.push("## Knowledge");
|
|
143
|
+
lines.push("");
|
|
144
|
+
}
|
|
145
|
+
for (const k of spec.knowledge) {
|
|
146
|
+
// Strip trailing slash for directory entries to avoid double-nesting in path display
|
|
147
|
+
const cleanK = k.replace(/\/$/, "");
|
|
148
|
+
// If the entry is a directory reference (e.g. "knowledge/"), point to the flattened dir
|
|
149
|
+
if (cleanK === "knowledge" || k.endsWith("/")) {
|
|
150
|
+
lines.push(`- \`.agentbrief/${spec.name}/knowledge/\``);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
lines.push(`- \`.agentbrief/${spec.name}/knowledge/${cleanK}\``);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return lines.join("\n");
|
|
157
|
+
}
|
|
158
|
+
function buildSkills(spec, mode, skillMetas) {
|
|
159
|
+
if (!spec.skills || spec.skills.length === 0)
|
|
160
|
+
return "";
|
|
161
|
+
if (mode === "minimal")
|
|
162
|
+
return ""; // Cursor: omit entirely
|
|
163
|
+
const lines = [];
|
|
164
|
+
const skillsPath = `.agentbrief/${spec.name}/skills/`;
|
|
165
|
+
if (mode === "full") {
|
|
166
|
+
lines.push("## Skills");
|
|
167
|
+
lines.push("");
|
|
168
|
+
lines.push("When the described situation arises, read the corresponding skill file and follow its instructions step by step.");
|
|
169
|
+
lines.push("");
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
lines.push("## Skills");
|
|
173
|
+
lines.push("");
|
|
174
|
+
}
|
|
175
|
+
if (skillMetas && skillMetas.length > 0) {
|
|
176
|
+
for (const meta of skillMetas) {
|
|
177
|
+
if (mode === "full" && meta.description) {
|
|
178
|
+
lines.push(`- **${meta.name}** — USE WHEN: ${meta.description}`);
|
|
179
|
+
lines.push(` → \`${skillsPath}${meta.path}\``);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const desc = meta.description ? ` — ${meta.description}` : "";
|
|
183
|
+
lines.push(`- **${meta.name}**${desc}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
for (const s of spec.skills) {
|
|
189
|
+
lines.push(`- \`${skillsPath}${s}\``);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return lines.join("\n");
|
|
193
|
+
}
|
|
194
|
+
function buildScale(scale, mode) {
|
|
195
|
+
if (!scale)
|
|
196
|
+
return "";
|
|
197
|
+
if (mode === "minimal")
|
|
198
|
+
return ""; // Cursor: omit entirely
|
|
199
|
+
const parts = [];
|
|
200
|
+
if (scale.timeout)
|
|
201
|
+
parts.push(`timeout=${scale.timeout}s`);
|
|
202
|
+
if (scale.concurrency)
|
|
203
|
+
parts.push(`concurrency=${scale.concurrency}`);
|
|
204
|
+
if (scale.engine)
|
|
205
|
+
parts.push(`engine=${scale.engine}`);
|
|
206
|
+
if (scale.model)
|
|
207
|
+
parts.push(`model=${scale.model}`);
|
|
208
|
+
if (parts.length === 0)
|
|
209
|
+
return "";
|
|
210
|
+
if (mode === "full") {
|
|
211
|
+
const lines = ["## Operational Constraints", ""];
|
|
212
|
+
if (scale.timeout)
|
|
213
|
+
lines.push(`- Response timeout: ${scale.timeout}s`);
|
|
214
|
+
if (scale.concurrency)
|
|
215
|
+
lines.push(`- Max concurrency: ${scale.concurrency}`);
|
|
216
|
+
if (scale.engine)
|
|
217
|
+
lines.push(`- Preferred engine: ${scale.engine}`);
|
|
218
|
+
if (scale.model)
|
|
219
|
+
lines.push(`- Preferred model: ${scale.model}`);
|
|
220
|
+
return lines.join("\n");
|
|
221
|
+
}
|
|
222
|
+
// concise: single inline line
|
|
223
|
+
return `**Constraints:** ${parts.join(", ")}`;
|
|
224
|
+
}
|
|
225
|
+
// ── Main compile function ──────────────────────────────
|
|
226
|
+
/**
|
|
227
|
+
* Compile a brief spec + personality into a markdown document.
|
|
228
|
+
* Output is adapted to the target engine's conventions and length preferences.
|
|
229
|
+
*/
|
|
230
|
+
export function compile(opts) {
|
|
231
|
+
const { spec, personality, engine } = opts;
|
|
232
|
+
const mode = resolveMode(engine);
|
|
233
|
+
const sections = [];
|
|
234
|
+
sections.push(buildHeader(spec, mode));
|
|
235
|
+
const personalitySection = buildPersonality(personality, mode);
|
|
236
|
+
if (personalitySection) {
|
|
237
|
+
sections.push(personalitySection);
|
|
238
|
+
}
|
|
239
|
+
const knowledgeSection = buildKnowledge(spec, mode);
|
|
240
|
+
if (knowledgeSection) {
|
|
241
|
+
sections.push(knowledgeSection);
|
|
242
|
+
}
|
|
243
|
+
const skillsSection = buildSkills(spec, mode, opts.skillMetas);
|
|
244
|
+
if (skillsSection) {
|
|
245
|
+
sections.push(skillsSection);
|
|
246
|
+
}
|
|
247
|
+
const scaleSection = buildScale(spec.scale, mode);
|
|
248
|
+
if (scaleSection) {
|
|
249
|
+
sections.push(scaleSection);
|
|
250
|
+
}
|
|
251
|
+
return sections.join("\n\n");
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { LockEntry, TrustLevel } from "./types.js";
|
|
2
|
+
export { loadBrief, loadPersonality, loadSkillMetas } from "./brief.js";
|
|
3
|
+
export { compile } from "./compiler.js";
|
|
4
|
+
export { eject as ejectFromFiles, inject } from "./injector.js";
|
|
5
|
+
export { readLock } from "./lock.js";
|
|
6
|
+
export { listRegistry, resolveSource } from "./resolver.js";
|
|
7
|
+
export type { BriefSource, BriefSpec, LockEntry, LockFile, Registry, RegistryEntry, ScaleConfig } from "./types.js";
|
|
8
|
+
export { ENGINE_FILES } from "./types.js";
|
|
9
|
+
export interface UseOpts {
|
|
10
|
+
source: string;
|
|
11
|
+
projectDir?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface UseResult {
|
|
14
|
+
name: string;
|
|
15
|
+
version: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
knowledgeCount: number;
|
|
18
|
+
skillsCount: number;
|
|
19
|
+
files: string[];
|
|
20
|
+
/** Line count of CLAUDE.md after injection */
|
|
21
|
+
claudeLines: number;
|
|
22
|
+
}
|
|
23
|
+
export declare function use(opts: UseOpts): Promise<UseResult>;
|
|
24
|
+
export interface EjectResult {
|
|
25
|
+
name: string;
|
|
26
|
+
files: string[];
|
|
27
|
+
}
|
|
28
|
+
export declare function eject(name: string, projectDir?: string): Promise<EjectResult>;
|
|
29
|
+
export declare function list(projectDir?: string): Promise<LockEntry[]>;
|
|
30
|
+
export interface InitOpts {
|
|
31
|
+
name: string;
|
|
32
|
+
dir: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
template?: string;
|
|
35
|
+
}
|
|
36
|
+
export declare function init(opts: InitOpts): Promise<string>;
|
|
37
|
+
/**
|
|
38
|
+
* Extract the injected content for a brief from CLAUDE.md.
|
|
39
|
+
* Returns the content between markers, or null if not found.
|
|
40
|
+
*/
|
|
41
|
+
export declare function show(name: string, projectDir?: string): Promise<string | null>;
|
|
42
|
+
export interface UpdateOpts {
|
|
43
|
+
name?: string;
|
|
44
|
+
projectDir?: string;
|
|
45
|
+
}
|
|
46
|
+
export declare function update(opts: UpdateOpts): Promise<UseResult[]>;
|
|
47
|
+
export interface SearchResult {
|
|
48
|
+
name: string;
|
|
49
|
+
source: string;
|
|
50
|
+
description: string;
|
|
51
|
+
trust: TrustLevel;
|
|
52
|
+
}
|
|
53
|
+
export declare function search(query?: string): Promise<SearchResult[]>;
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAA2B,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGjF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5D,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACpH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1C,MAAM,WAAW,OAAO;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAkI3D;AAID,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAMnF;AAID,wBAAsB,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAIpE;AAID,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CA+D1D;AAID;;;GAGG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAapF;AAID,MAAM,WAAW,UAAU;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAWnE;AAID,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CAClB;AAED,wBAAsB,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAapE"}
|