briefops 1.0.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 (255) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/CODE_OF_CONDUCT.md +13 -0
  3. package/CONTRIBUTING.md +53 -0
  4. package/LICENSE +21 -0
  5. package/README.md +801 -0
  6. package/SECURITY.md +59 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.js +54 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/approve.d.ts +2 -0
  11. package/dist/commands/approve.js +38 -0
  12. package/dist/commands/approve.js.map +1 -0
  13. package/dist/commands/brief.d.ts +2 -0
  14. package/dist/commands/brief.js +81 -0
  15. package/dist/commands/brief.js.map +1 -0
  16. package/dist/commands/codex.d.ts +2 -0
  17. package/dist/commands/codex.js +163 -0
  18. package/dist/commands/codex.js.map +1 -0
  19. package/dist/commands/compare.d.ts +2 -0
  20. package/dist/commands/compare.js +48 -0
  21. package/dist/commands/compare.js.map +1 -0
  22. package/dist/commands/continue.d.ts +2 -0
  23. package/dist/commands/continue.js +66 -0
  24. package/dist/commands/continue.js.map +1 -0
  25. package/dist/commands/doctor.d.ts +2 -0
  26. package/dist/commands/doctor.js +90 -0
  27. package/dist/commands/doctor.js.map +1 -0
  28. package/dist/commands/eval.d.ts +2 -0
  29. package/dist/commands/eval.js +89 -0
  30. package/dist/commands/eval.js.map +1 -0
  31. package/dist/commands/export.d.ts +2 -0
  32. package/dist/commands/export.js +105 -0
  33. package/dist/commands/export.js.map +1 -0
  34. package/dist/commands/finish.d.ts +2 -0
  35. package/dist/commands/finish.js +71 -0
  36. package/dist/commands/finish.js.map +1 -0
  37. package/dist/commands/handoff.d.ts +2 -0
  38. package/dist/commands/handoff.js +77 -0
  39. package/dist/commands/handoff.js.map +1 -0
  40. package/dist/commands/inbox.d.ts +2 -0
  41. package/dist/commands/inbox.js +36 -0
  42. package/dist/commands/inbox.js.map +1 -0
  43. package/dist/commands/init.d.ts +2 -0
  44. package/dist/commands/init.js +13 -0
  45. package/dist/commands/init.js.map +1 -0
  46. package/dist/commands/inspect.d.ts +2 -0
  47. package/dist/commands/inspect.js +226 -0
  48. package/dist/commands/inspect.js.map +1 -0
  49. package/dist/commands/log.d.ts +2 -0
  50. package/dist/commands/log.js +96 -0
  51. package/dist/commands/log.js.map +1 -0
  52. package/dist/commands/memory.d.ts +2 -0
  53. package/dist/commands/memory.js +236 -0
  54. package/dist/commands/memory.js.map +1 -0
  55. package/dist/commands/pack.d.ts +2 -0
  56. package/dist/commands/pack.js +42 -0
  57. package/dist/commands/pack.js.map +1 -0
  58. package/dist/commands/prime.d.ts +4 -0
  59. package/dist/commands/prime.js +44 -0
  60. package/dist/commands/prime.js.map +1 -0
  61. package/dist/commands/project.d.ts +2 -0
  62. package/dist/commands/project.js +50 -0
  63. package/dist/commands/project.js.map +1 -0
  64. package/dist/commands/shared.d.ts +3 -0
  65. package/dist/commands/shared.js +24 -0
  66. package/dist/commands/shared.js.map +1 -0
  67. package/dist/commands/skill.d.ts +2 -0
  68. package/dist/commands/skill.js +146 -0
  69. package/dist/commands/skill.js.map +1 -0
  70. package/dist/commands/worker.d.ts +2 -0
  71. package/dist/commands/worker.js +128 -0
  72. package/dist/commands/worker.js.map +1 -0
  73. package/dist/core/adapter.d.ts +22 -0
  74. package/dist/core/adapter.js +167 -0
  75. package/dist/core/adapter.js.map +1 -0
  76. package/dist/core/approval.d.ts +26 -0
  77. package/dist/core/approval.js +86 -0
  78. package/dist/core/approval.js.map +1 -0
  79. package/dist/core/brief.d.ts +47 -0
  80. package/dist/core/brief.js +411 -0
  81. package/dist/core/brief.js.map +1 -0
  82. package/dist/core/codex.d.ts +53 -0
  83. package/dist/core/codex.js +286 -0
  84. package/dist/core/codex.js.map +1 -0
  85. package/dist/core/codexPlugin.d.ts +51 -0
  86. package/dist/core/codexPlugin.js +228 -0
  87. package/dist/core/codexPlugin.js.map +1 -0
  88. package/dist/core/compatibility.d.ts +2 -0
  89. package/dist/core/compatibility.js +16 -0
  90. package/dist/core/compatibility.js.map +1 -0
  91. package/dist/core/config.d.ts +19 -0
  92. package/dist/core/config.js +77 -0
  93. package/dist/core/config.js.map +1 -0
  94. package/dist/core/contextBudget.d.ts +12 -0
  95. package/dist/core/contextBudget.js +22 -0
  96. package/dist/core/contextBudget.js.map +1 -0
  97. package/dist/core/contextCompare.d.ts +27 -0
  98. package/dist/core/contextCompare.js +97 -0
  99. package/dist/core/contextCompare.js.map +1 -0
  100. package/dist/core/continuity.d.ts +25 -0
  101. package/dist/core/continuity.js +73 -0
  102. package/dist/core/continuity.js.map +1 -0
  103. package/dist/core/errors.d.ts +4 -0
  104. package/dist/core/errors.js +12 -0
  105. package/dist/core/errors.js.map +1 -0
  106. package/dist/core/eval.d.ts +38 -0
  107. package/dist/core/eval.js +180 -0
  108. package/dist/core/eval.js.map +1 -0
  109. package/dist/core/exportPolicy.d.ts +7 -0
  110. package/dist/core/exportPolicy.js +17 -0
  111. package/dist/core/exportPolicy.js.map +1 -0
  112. package/dist/core/exportTargets.d.ts +25 -0
  113. package/dist/core/exportTargets.js +292 -0
  114. package/dist/core/exportTargets.js.map +1 -0
  115. package/dist/core/handoff.d.ts +48 -0
  116. package/dist/core/handoff.js +611 -0
  117. package/dist/core/handoff.js.map +1 -0
  118. package/dist/core/inbox.d.ts +15 -0
  119. package/dist/core/inbox.js +56 -0
  120. package/dist/core/inbox.js.map +1 -0
  121. package/dist/core/lock.d.ts +11 -0
  122. package/dist/core/lock.js +99 -0
  123. package/dist/core/lock.js.map +1 -0
  124. package/dist/core/log.d.ts +38 -0
  125. package/dist/core/log.js +93 -0
  126. package/dist/core/log.js.map +1 -0
  127. package/dist/core/memory.d.ts +86 -0
  128. package/dist/core/memory.js +353 -0
  129. package/dist/core/memory.js.map +1 -0
  130. package/dist/core/memoryHygiene.d.ts +25 -0
  131. package/dist/core/memoryHygiene.js +95 -0
  132. package/dist/core/memoryHygiene.js.map +1 -0
  133. package/dist/core/memoryProposal.d.ts +40 -0
  134. package/dist/core/memoryProposal.js +279 -0
  135. package/dist/core/memoryProposal.js.map +1 -0
  136. package/dist/core/output.d.ts +7 -0
  137. package/dist/core/output.js +18 -0
  138. package/dist/core/output.js.map +1 -0
  139. package/dist/core/patch.d.ts +37 -0
  140. package/dist/core/patch.js +220 -0
  141. package/dist/core/patch.js.map +1 -0
  142. package/dist/core/paths.d.ts +33 -0
  143. package/dist/core/paths.js +84 -0
  144. package/dist/core/paths.js.map +1 -0
  145. package/dist/core/prime.d.ts +17 -0
  146. package/dist/core/prime.js +298 -0
  147. package/dist/core/prime.js.map +1 -0
  148. package/dist/core/privacyDoctor.d.ts +14 -0
  149. package/dist/core/privacyDoctor.js +59 -0
  150. package/dist/core/privacyDoctor.js.map +1 -0
  151. package/dist/core/project.d.ts +16 -0
  152. package/dist/core/project.js +73 -0
  153. package/dist/core/project.js.map +1 -0
  154. package/dist/core/securityDoctor.d.ts +14 -0
  155. package/dist/core/securityDoctor.js +96 -0
  156. package/dist/core/securityDoctor.js.map +1 -0
  157. package/dist/core/skill.d.ts +16 -0
  158. package/dist/core/skill.js +81 -0
  159. package/dist/core/skill.js.map +1 -0
  160. package/dist/core/storage.d.ts +20 -0
  161. package/dist/core/storage.js +112 -0
  162. package/dist/core/storage.js.map +1 -0
  163. package/dist/core/tokens.d.ts +5 -0
  164. package/dist/core/tokens.js +24 -0
  165. package/dist/core/tokens.js.map +1 -0
  166. package/dist/core/worker.d.ts +51 -0
  167. package/dist/core/worker.js +312 -0
  168. package/dist/core/worker.js.map +1 -0
  169. package/dist/core/workflow.d.ts +61 -0
  170. package/dist/core/workflow.js +308 -0
  171. package/dist/core/workflow.js.map +1 -0
  172. package/dist/core/workspace.d.ts +7 -0
  173. package/dist/core/workspace.js +214 -0
  174. package/dist/core/workspace.js.map +1 -0
  175. package/dist/index.d.ts +2 -0
  176. package/dist/index.js +16 -0
  177. package/dist/index.js.map +1 -0
  178. package/dist/schemas/brief.d.ts +12 -0
  179. package/dist/schemas/brief.js +2 -0
  180. package/dist/schemas/brief.js.map +1 -0
  181. package/dist/schemas/eval.d.ts +96 -0
  182. package/dist/schemas/eval.js +30 -0
  183. package/dist/schemas/eval.js.map +1 -0
  184. package/dist/schemas/handoff.d.ts +33 -0
  185. package/dist/schemas/handoff.js +13 -0
  186. package/dist/schemas/handoff.js.map +1 -0
  187. package/dist/schemas/log.d.ts +51 -0
  188. package/dist/schemas/log.js +19 -0
  189. package/dist/schemas/log.js.map +1 -0
  190. package/dist/schemas/memory.d.ts +112 -0
  191. package/dist/schemas/memory.js +21 -0
  192. package/dist/schemas/memory.js.map +1 -0
  193. package/dist/schemas/memoryProposal.d.ts +181 -0
  194. package/dist/schemas/memoryProposal.js +46 -0
  195. package/dist/schemas/memoryProposal.js.map +1 -0
  196. package/dist/schemas/patch.d.ts +38 -0
  197. package/dist/schemas/patch.js +15 -0
  198. package/dist/schemas/patch.js.map +1 -0
  199. package/dist/schemas/project.d.ts +23 -0
  200. package/dist/schemas/project.js +8 -0
  201. package/dist/schemas/project.js.map +1 -0
  202. package/dist/schemas/skill.d.ts +26 -0
  203. package/dist/schemas/skill.js +9 -0
  204. package/dist/schemas/skill.js.map +1 -0
  205. package/dist/schemas/worker.d.ts +29 -0
  206. package/dist/schemas/worker.js +12 -0
  207. package/dist/schemas/worker.js.map +1 -0
  208. package/dist/version.d.ts +1 -0
  209. package/dist/version.js +3 -0
  210. package/dist/version.js.map +1 -0
  211. package/docs/codex-resume.md +13 -0
  212. package/docs/compatibility.md +49 -0
  213. package/docs/concept.md +13 -0
  214. package/docs/evals.md +18 -0
  215. package/docs/file-format.md +67 -0
  216. package/docs/handoff-briefs.md +9 -0
  217. package/docs/integrations/harnesses.md +74 -0
  218. package/docs/memory-lifecycle.md +23 -0
  219. package/docs/persistent-worker.md +15 -0
  220. package/docs/privacy-model.md +40 -0
  221. package/docs/quickstart.md +74 -0
  222. package/docs/release-checklist.md +68 -0
  223. package/docs/roadmap.md +33 -0
  224. package/docs/superpowers/plans/2026-06-08-briefops-oss-readiness.md +1272 -0
  225. package/docs/superpowers/plans/2026-06-08-codex-first-context-optimization.md +1176 -0
  226. package/docs/token-budget.md +63 -0
  227. package/examples/atlas-q/README.md +15 -0
  228. package/examples/codex-first-context/README.md +48 -0
  229. package/examples/codex-first-context/after-briefops-prime.md +40 -0
  230. package/examples/codex-first-context/before-manual-history-dump.md +18 -0
  231. package/examples/persistent-worker-demo/README.md +15 -0
  232. package/examples/persistent-worker-demo/after-codex-resume.md +17 -0
  233. package/examples/persistent-worker-demo/before-context-dump.md +5 -0
  234. package/examples/persistent-worker-demo/briefops-workspace/codex/prompts/resume_demo.md +29 -0
  235. package/examples/persistent-worker-demo/briefops-workspace/handoffs/handoff_demo.md +50 -0
  236. package/examples/persistent-worker-demo/briefops-workspace/logs/log_20260604_001.yaml +14 -0
  237. package/examples/persistent-worker-demo/briefops-workspace/logs/log_20260604_002.yaml +12 -0
  238. package/examples/persistent-worker-demo/briefops-workspace/memory/decisions.yaml +12 -0
  239. package/examples/persistent-worker-demo/briefops-workspace/memory/deprecated.yaml +1 -0
  240. package/examples/persistent-worker-demo/briefops-workspace/memory/facts.yaml +12 -0
  241. package/examples/persistent-worker-demo/briefops-workspace/memory/incidents.yaml +12 -0
  242. package/examples/persistent-worker-demo/briefops-workspace/memory/lessons.yaml +12 -0
  243. package/examples/persistent-worker-demo/briefops-workspace/memory-proposals/memprop_demo_001.memory-proposal.yaml +23 -0
  244. package/examples/persistent-worker-demo/briefops-workspace/projects/atlas-q.project.md +18 -0
  245. package/examples/persistent-worker-demo/briefops-workspace/skills/backtest-validation.skill.md +13 -0
  246. package/examples/persistent-worker-demo/briefops-workspace/skills/risk-review.skill.md +15 -0
  247. package/examples/persistent-worker-demo/briefops-workspace/workers/quant-reviewer.worker.yaml +12 -0
  248. package/examples/persistent-worker-demo/briefops-workspace/workers/summaries/quant-reviewer.summary.md +44 -0
  249. package/package.json +59 -0
  250. package/plugins/briefops-codex/.codex-plugin/plugin.json +39 -0
  251. package/plugins/briefops-codex/README.md +44 -0
  252. package/plugins/briefops-codex/skills/briefops-continue-worker/SKILL.md +22 -0
  253. package/plugins/briefops-codex/skills/briefops-finish-task/SKILL.md +22 -0
  254. package/plugins/briefops-codex/skills/briefops-prime-context/SKILL.md +24 -0
  255. package/plugins/briefops-codex/skills/briefops-review-memory/SKILL.md +27 -0
@@ -0,0 +1,167 @@
1
+ import path from "node:path";
2
+ import { BriefOpsError } from "./errors.js";
3
+ import { workspacePaths } from "./paths.js";
4
+ import { pathExists, readTextFile } from "./storage.js";
5
+ export const briefAdapters = ["generic", "codex", "claude-code"];
6
+ const fallbackTemplates = {
7
+ generic: [
8
+ "# BriefOps Task Brief",
9
+ "",
10
+ "{{warnings}}",
11
+ "## Role",
12
+ "",
13
+ "You are operating as an AI coding agent prepared by BriefOps.",
14
+ "",
15
+ "{{workerSection}}",
16
+ "## Primary Skill",
17
+ "",
18
+ "{{skillText}}",
19
+ "",
20
+ "## Project Context",
21
+ "",
22
+ "{{projectText}}",
23
+ "",
24
+ "## Relevant Memory",
25
+ "",
26
+ "{{memoryText}}",
27
+ "",
28
+ "## Task",
29
+ "",
30
+ "{{taskText}}",
31
+ "",
32
+ "## Delivery Format",
33
+ "",
34
+ "{{outputContract}}",
35
+ "",
36
+ "## Read If Needed",
37
+ "",
38
+ "{{readIfNeeded}}",
39
+ "",
40
+ "## Token Budget Report",
41
+ "",
42
+ "{{tokenReport}}",
43
+ ""
44
+ ].join("\n"),
45
+ codex: [
46
+ "# BriefOps Task Brief",
47
+ "",
48
+ "{{warnings}}",
49
+ "## Role",
50
+ "",
51
+ "You are Codex operating with a BriefOps-prepared task brief. Follow the repository's existing patterns and verify your work before completion.",
52
+ "",
53
+ "{{workerSection}}",
54
+ "## Primary Skill",
55
+ "",
56
+ "{{skillText}}",
57
+ "",
58
+ "## Project Context",
59
+ "",
60
+ "{{projectText}}",
61
+ "",
62
+ "## Relevant Memory",
63
+ "",
64
+ "{{memoryText}}",
65
+ "",
66
+ "## Task",
67
+ "",
68
+ "{{taskText}}",
69
+ "",
70
+ "## Delivery Format",
71
+ "",
72
+ "{{outputContract}}",
73
+ "",
74
+ "## Read If Needed",
75
+ "",
76
+ "{{readIfNeeded}}",
77
+ "",
78
+ "## Token Budget Report",
79
+ "",
80
+ "{{tokenReport}}",
81
+ ""
82
+ ].join("\n"),
83
+ "claude-code": [
84
+ "# BriefOps Task Brief",
85
+ "",
86
+ "{{warnings}}",
87
+ "## Role",
88
+ "",
89
+ "You are Claude Code operating with a BriefOps-prepared task brief. Keep changes scoped, explain verification, and preserve user work.",
90
+ "",
91
+ "{{workerSection}}",
92
+ "## Primary Skill",
93
+ "",
94
+ "{{skillText}}",
95
+ "",
96
+ "## Project Context",
97
+ "",
98
+ "{{projectText}}",
99
+ "",
100
+ "## Relevant Memory",
101
+ "",
102
+ "{{memoryText}}",
103
+ "",
104
+ "## Task",
105
+ "",
106
+ "{{taskText}}",
107
+ "",
108
+ "## Delivery Format",
109
+ "",
110
+ "{{outputContract}}",
111
+ "",
112
+ "## Read If Needed",
113
+ "",
114
+ "{{readIfNeeded}}",
115
+ "",
116
+ "## Token Budget Report",
117
+ "",
118
+ "{{tokenReport}}",
119
+ ""
120
+ ].join("\n")
121
+ };
122
+ export function normalizeBriefAdapter(value) {
123
+ const adapter = (value ?? "generic").trim().toLowerCase();
124
+ if (briefAdapters.includes(adapter)) {
125
+ return adapter;
126
+ }
127
+ throw new BriefOpsError(`Invalid brief adapter: ${value}`);
128
+ }
129
+ function formatTokenReport(report, total, budget) {
130
+ return [
131
+ ...report.map((line) => `- ${line.label}: ${line.used} / ${line.budget}`),
132
+ `- Total: ${total} / ${budget}`
133
+ ].join("\n");
134
+ }
135
+ async function readTemplate(cwd, adapter) {
136
+ const templatePath = path.join(workspacePaths(cwd).templates, `brief.${adapter}.md`);
137
+ if (await pathExists(templatePath)) {
138
+ return readTextFile(templatePath);
139
+ }
140
+ return fallbackTemplates[adapter];
141
+ }
142
+ export async function renderBriefWithAdapter(options) {
143
+ const template = await readTemplate(options.cwd, options.adapter);
144
+ const workerSection = options.parts.workerText
145
+ ? `## Worker Profile\n\n${options.parts.workerText}\n`
146
+ : "";
147
+ const warnings = options.parts.warnings.length > 0
148
+ ? `${options.parts.warnings.map((warning) => `> Warning: ${warning}`).join("\n")}\n`
149
+ : "";
150
+ const replacements = {
151
+ warnings,
152
+ workerSection,
153
+ skillText: options.parts.skillText,
154
+ projectText: options.parts.projectText,
155
+ memoryText: options.parts.memoryText,
156
+ taskText: options.parts.taskText,
157
+ outputContract: options.parts.outputContract,
158
+ readIfNeeded: options.parts.readIfNeeded,
159
+ tokenReport: formatTokenReport(options.parts.report, options.parts.totalTokens, options.parts.budget)
160
+ };
161
+ let rendered = template;
162
+ for (const [name, value] of Object.entries(replacements)) {
163
+ rendered = rendered.replaceAll(`{{${name}}}`, value);
164
+ }
165
+ return `${rendered.replace(/\n{3,}/g, "\n\n").trimEnd()}\n`;
166
+ }
167
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { MemoryProposal } from "../schemas/memoryProposal.js";
2
+ import type { SkillPatch } from "../schemas/patch.js";
3
+ export type ApproveMemoryResult = {
4
+ kind: "memory";
5
+ proposal: MemoryProposal;
6
+ created: number;
7
+ skipped: number;
8
+ };
9
+ export type ApproveSkillPatchResult = {
10
+ kind: "skill-patch";
11
+ patch: SkillPatch;
12
+ skillPath: string;
13
+ };
14
+ export type ApproveResult = ApproveMemoryResult | ApproveSkillPatchResult;
15
+ export declare function approveMemory(options: {
16
+ cwd?: string;
17
+ id: string;
18
+ }): Promise<ApproveMemoryResult>;
19
+ export declare function approveSkillPatch(options: {
20
+ cwd?: string;
21
+ id: string;
22
+ }): Promise<ApproveSkillPatchResult>;
23
+ export declare function approveAny(options: {
24
+ cwd?: string;
25
+ id: string;
26
+ }): Promise<ApproveResult>;
@@ -0,0 +1,86 @@
1
+ import { BriefOpsError } from "./errors.js";
2
+ import { applyMemoryProposal, readLatestProposedMemoryProposal, readMemoryProposal } from "./memoryProposal.js";
3
+ import { applySkillPatch, readLatestProposedSkillPatch, readSkillPatch } from "./patch.js";
4
+ function isMemoryProposalNotFound(error) {
5
+ return error instanceof BriefOpsError && error.message.startsWith("Memory proposal not found:");
6
+ }
7
+ function isSkillPatchNotFound(error) {
8
+ return error instanceof BriefOpsError && error.message.startsWith("Skill patch not found:");
9
+ }
10
+ function isNoProposedMemoryProposal(error) {
11
+ return error instanceof BriefOpsError && error.message === "No proposed memory proposals found.";
12
+ }
13
+ function isNoProposedSkillPatch(error) {
14
+ return error instanceof BriefOpsError && error.message === "No proposed skill patches found.";
15
+ }
16
+ export async function approveMemory(options) {
17
+ const result = await applyMemoryProposal({
18
+ cwd: options.cwd,
19
+ id: options.id
20
+ });
21
+ return {
22
+ kind: "memory",
23
+ proposal: result.proposal,
24
+ created: result.created,
25
+ skipped: result.skipped
26
+ };
27
+ }
28
+ export async function approveSkillPatch(options) {
29
+ const cwd = options.cwd ?? process.cwd();
30
+ const patch = options.id.trim().toLowerCase() === "latest"
31
+ ? await readLatestProposedSkillPatch(cwd)
32
+ : await readSkillPatch(cwd, options.id);
33
+ const result = await applySkillPatch({
34
+ cwd,
35
+ skill: patch.skill,
36
+ patch: patch.id
37
+ });
38
+ return {
39
+ kind: "skill-patch",
40
+ patch: result.patch,
41
+ skillPath: result.skillPath
42
+ };
43
+ }
44
+ export async function approveAny(options) {
45
+ const cwd = options.cwd ?? process.cwd();
46
+ if (options.id.trim().toLowerCase() === "latest") {
47
+ try {
48
+ const proposal = await readLatestProposedMemoryProposal(cwd);
49
+ return await approveMemory({ cwd, id: proposal.id });
50
+ }
51
+ catch (error) {
52
+ if (!isNoProposedMemoryProposal(error)) {
53
+ throw error;
54
+ }
55
+ }
56
+ try {
57
+ const patch = await readLatestProposedSkillPatch(cwd);
58
+ return await approveSkillPatch({ cwd, id: patch.id });
59
+ }
60
+ catch (error) {
61
+ if (isNoProposedSkillPatch(error)) {
62
+ throw new BriefOpsError("No proposed memory proposal or skill patch found for approval.");
63
+ }
64
+ throw error;
65
+ }
66
+ }
67
+ try {
68
+ await readMemoryProposal(cwd, options.id);
69
+ return await approveMemory({ cwd, id: options.id });
70
+ }
71
+ catch (error) {
72
+ if (!isMemoryProposalNotFound(error)) {
73
+ throw error;
74
+ }
75
+ }
76
+ try {
77
+ return await approveSkillPatch({ cwd, id: options.id });
78
+ }
79
+ catch (error) {
80
+ if (isSkillPatchNotFound(error)) {
81
+ throw new BriefOpsError(`No memory proposal or skill patch found for approval: ${options.id}`);
82
+ }
83
+ throw error;
84
+ }
85
+ }
86
+ //# sourceMappingURL=approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/core/approval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { GeneratedBrief, TokenReportLine } from "../schemas/brief.js";
2
+ export type GenerateBriefOptions = {
3
+ cwd?: string;
4
+ skill?: string;
5
+ project?: string;
6
+ worker?: string;
7
+ task: string;
8
+ budget?: number;
9
+ adapter?: string;
10
+ };
11
+ export declare function generateBrief(input: GenerateBriefOptions): Promise<GeneratedBrief>;
12
+ export declare function saveGeneratedBrief(options: {
13
+ cwd: string;
14
+ generated: GeneratedBrief;
15
+ project?: string;
16
+ skill?: string;
17
+ worker?: string;
18
+ outputPath?: string;
19
+ force?: boolean;
20
+ }): Promise<string>;
21
+ export declare function inspectBriefTokens(input: GenerateBriefOptions): Promise<{
22
+ skillName: string;
23
+ skillTokens: number;
24
+ projectName: string;
25
+ projectTokens: number;
26
+ workerName?: string;
27
+ workerTokens: number;
28
+ memoryTokens: number;
29
+ taskTokens: number;
30
+ totalTokens: number;
31
+ renderedTokens: number;
32
+ budget: number;
33
+ warnings: string[];
34
+ report: TokenReportLine[];
35
+ }>;
36
+ export declare function listSavedBriefs(cwd?: string): Promise<Array<{
37
+ id: string;
38
+ path: string;
39
+ tokens: number;
40
+ }>>;
41
+ export declare function showSavedBrief(cwd: string, idOrLatest: string): Promise<string>;
42
+ export declare function inspectSavedBrief(cwd: string, idOrLatest: string): Promise<{
43
+ id: string;
44
+ path: string;
45
+ tokens: number;
46
+ characters: number;
47
+ }>;