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.
Files changed (137) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +141 -0
  3. package/briefs/code-reviewer/brief.yaml +8 -0
  4. package/briefs/code-reviewer/knowledge/review-standards.md +32 -0
  5. package/briefs/code-reviewer/personality.md +19 -0
  6. package/briefs/code-reviewer/skills/architecture-review/SKILL.md +76 -0
  7. package/briefs/code-reviewer/skills/review-process/SKILL.md +41 -0
  8. package/briefs/code-reviewer/skills/verification/SKILL.md +47 -0
  9. package/briefs/data-analyst/brief.yaml +8 -0
  10. package/briefs/data-analyst/knowledge/metrics-reference.md +43 -0
  11. package/briefs/data-analyst/personality.md +23 -0
  12. package/briefs/data-analyst/skills/metrics-framework/SKILL.md +90 -0
  13. package/briefs/data-analyst/skills/sql-query-builder/SKILL.md +115 -0
  14. package/briefs/devops-sre/brief.yaml +12 -0
  15. package/briefs/devops-sre/knowledge/runbook.md +69 -0
  16. package/briefs/devops-sre/personality.md +18 -0
  17. package/briefs/devops-sre/skills/ci-cd-github-actions/SKILL.md +114 -0
  18. package/briefs/devops-sre/skills/monitoring-observability/SKILL.md +394 -0
  19. package/briefs/devops-sre/skills/systematic-debugging/SKILL.md +46 -0
  20. package/briefs/devops-sre/skills/verification/SKILL.md +47 -0
  21. package/briefs/frontend-design/brief.yaml +8 -0
  22. package/briefs/frontend-design/knowledge/design-principles.md +43 -0
  23. package/briefs/frontend-design/personality.md +19 -0
  24. package/briefs/frontend-design/skills/design-review-checklist/SKILL.md +151 -0
  25. package/briefs/frontend-design/skills/web-design-guidelines/SKILL.md +39 -0
  26. package/briefs/fullstack-dev/brief.yaml +9 -0
  27. package/briefs/fullstack-dev/personality.md +18 -0
  28. package/briefs/growth-engineer/brief.yaml +8 -0
  29. package/briefs/growth-engineer/knowledge/growth-framework.md +83 -0
  30. package/briefs/growth-engineer/personality.md +19 -0
  31. package/briefs/growth-engineer/skills/analytics-setup/SKILL.md +109 -0
  32. package/briefs/growth-engineer/skills/brainstorming/SKILL.md +55 -0
  33. package/briefs/growth-engineer/skills/content-strategy/SKILL.md +93 -0
  34. package/briefs/growth-engineer/skills/seo-audit/SKILL.md +412 -0
  35. package/briefs/growth-engineer/skills/seo-audit/evals/evals.json +136 -0
  36. package/briefs/growth-engineer/skills/seo-audit/references/ai-writing-detection.md +200 -0
  37. package/briefs/nextjs-fullstack/brief.yaml +12 -0
  38. package/briefs/nextjs-fullstack/knowledge/conventions.md +57 -0
  39. package/briefs/nextjs-fullstack/personality.md +19 -0
  40. package/briefs/nextjs-fullstack/skills/next-best-practices/SKILL.md +153 -0
  41. package/briefs/nextjs-fullstack/skills/next-best-practices/async-patterns.md +87 -0
  42. package/briefs/nextjs-fullstack/skills/next-best-practices/bundling.md +180 -0
  43. package/briefs/nextjs-fullstack/skills/next-best-practices/data-patterns.md +297 -0
  44. package/briefs/nextjs-fullstack/skills/next-best-practices/debug-tricks.md +105 -0
  45. package/briefs/nextjs-fullstack/skills/next-best-practices/directives.md +73 -0
  46. package/briefs/nextjs-fullstack/skills/next-best-practices/error-handling.md +227 -0
  47. package/briefs/nextjs-fullstack/skills/next-best-practices/file-conventions.md +140 -0
  48. package/briefs/nextjs-fullstack/skills/next-best-practices/font.md +245 -0
  49. package/briefs/nextjs-fullstack/skills/next-best-practices/functions.md +108 -0
  50. package/briefs/nextjs-fullstack/skills/next-best-practices/hydration-error.md +91 -0
  51. package/briefs/nextjs-fullstack/skills/next-best-practices/image.md +173 -0
  52. package/briefs/nextjs-fullstack/skills/next-best-practices/metadata.md +301 -0
  53. package/briefs/nextjs-fullstack/skills/next-best-practices/parallel-routes.md +287 -0
  54. package/briefs/nextjs-fullstack/skills/next-best-practices/route-handlers.md +146 -0
  55. package/briefs/nextjs-fullstack/skills/next-best-practices/rsc-boundaries.md +159 -0
  56. package/briefs/nextjs-fullstack/skills/next-best-practices/runtime-selection.md +39 -0
  57. package/briefs/nextjs-fullstack/skills/next-best-practices/scripts.md +141 -0
  58. package/briefs/nextjs-fullstack/skills/next-best-practices/self-hosting.md +371 -0
  59. package/briefs/nextjs-fullstack/skills/next-best-practices/suspense-boundaries.md +67 -0
  60. package/briefs/nextjs-fullstack/skills/tdd/SKILL.md +53 -0
  61. package/briefs/product-manager/brief.yaml +8 -0
  62. package/briefs/product-manager/knowledge/pm-toolkit.md +51 -0
  63. package/briefs/product-manager/personality.md +19 -0
  64. package/briefs/product-manager/skills/brainstorming/SKILL.md +55 -0
  65. package/briefs/product-manager/skills/specification/SKILL.md +76 -0
  66. package/briefs/qa-engineer/brief.yaml +11 -0
  67. package/briefs/qa-engineer/knowledge/testing-patterns.md +54 -0
  68. package/briefs/qa-engineer/personality.md +24 -0
  69. package/briefs/qa-engineer/skills/qa-test-and-fix/SKILL.md +101 -0
  70. package/briefs/qa-engineer/skills/regression-testing/SKILL.md +95 -0
  71. package/briefs/security-auditor/brief.yaml +12 -0
  72. package/briefs/security-auditor/knowledge/code-patterns.md +49 -0
  73. package/briefs/security-auditor/knowledge/owasp-cheatsheet.md +75 -0
  74. package/briefs/security-auditor/personality.md +23 -0
  75. package/briefs/security-auditor/skills/security-review/SKILL.md +29 -0
  76. package/briefs/security-auditor/skills/systematic-debugging/SKILL.md +46 -0
  77. package/briefs/security-auditor/skills/verification/SKILL.md +47 -0
  78. package/briefs/startup-builder/brief.yaml +8 -0
  79. package/briefs/startup-builder/knowledge/startup-phases.md +64 -0
  80. package/briefs/startup-builder/personality.md +18 -0
  81. package/briefs/startup-builder/skills/ceo-review/SKILL.md +95 -0
  82. package/briefs/startup-builder/skills/launch-strategy/SKILL.md +353 -0
  83. package/briefs/startup-builder/skills/launch-strategy/evals/evals.json +91 -0
  84. package/briefs/startup-builder/skills/tdd/SKILL.md +53 -0
  85. package/briefs/startup-builder/skills/verification/SKILL.md +47 -0
  86. package/briefs/startup-kit/brief.yaml +9 -0
  87. package/briefs/startup-kit/personality.md +18 -0
  88. package/briefs/tech-writer/brief.yaml +8 -0
  89. package/briefs/tech-writer/knowledge/style-guide.md +54 -0
  90. package/briefs/tech-writer/personality.md +19 -0
  91. package/briefs/tech-writer/skills/api-documentation/SKILL.md +390 -0
  92. package/briefs/tech-writer/skills/plan-and-execute/SKILL.md +54 -0
  93. package/briefs/tech-writer/skills/release-notes/SKILL.md +77 -0
  94. package/briefs/typescript-strict/brief.yaml +8 -0
  95. package/briefs/typescript-strict/knowledge/type-patterns.md +117 -0
  96. package/briefs/typescript-strict/personality.md +23 -0
  97. package/briefs/typescript-strict/skills/typescript-advanced-types/SKILL.md +717 -0
  98. package/dist/brief.d.ts +13 -0
  99. package/dist/brief.d.ts.map +1 -0
  100. package/dist/brief.js +90 -0
  101. package/dist/brief.js.map +1 -0
  102. package/dist/cli.d.ts +3 -0
  103. package/dist/cli.d.ts.map +1 -0
  104. package/dist/cli.js +180 -0
  105. package/dist/cli.js.map +1 -0
  106. package/dist/compiler.d.ts +25 -0
  107. package/dist/compiler.d.ts.map +1 -0
  108. package/dist/compiler.js +253 -0
  109. package/dist/compiler.js.map +1 -0
  110. package/dist/index.d.ts +54 -0
  111. package/dist/index.d.ts.map +1 -0
  112. package/dist/index.js +255 -0
  113. package/dist/index.js.map +1 -0
  114. package/dist/injector.d.ts +17 -0
  115. package/dist/injector.d.ts.map +1 -0
  116. package/dist/injector.js +76 -0
  117. package/dist/injector.js.map +1 -0
  118. package/dist/lock.d.ts +8 -0
  119. package/dist/lock.d.ts.map +1 -0
  120. package/dist/lock.js +50 -0
  121. package/dist/lock.js.map +1 -0
  122. package/dist/resolver.d.ts +24 -0
  123. package/dist/resolver.d.ts.map +1 -0
  124. package/dist/resolver.js +135 -0
  125. package/dist/resolver.js.map +1 -0
  126. package/dist/types.d.ts +61 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/types.js +15 -0
  129. package/dist/types.js.map +1 -0
  130. package/package.json +64 -0
  131. package/registry.yaml +91 -0
  132. package/templates/default/brief.yaml +7 -0
  133. package/templates/default/knowledge/.gitkeep +0 -0
  134. package/templates/default/personality.md +12 -0
  135. package/templates/security/brief.yaml +6 -0
  136. package/templates/security/knowledge/.gitkeep +0 -0
  137. 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":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -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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"}
@@ -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"}