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,308 @@
1
+ import path from "node:path";
2
+ import { generateCodexResume } from "./codex.js";
3
+ import { inspectContinuityHealth } from "./continuity.js";
4
+ import { BriefOpsError } from "./errors.js";
5
+ import { normalizeExportPolicy, sharedOnlyOmissionNote } from "./exportPolicy.js";
6
+ import { generateHandoff } from "./handoff.js";
7
+ import { withWorkspaceLock } from "./lock.js";
8
+ import { addWorkLog } from "./log.js";
9
+ import { isNoMemoryProposalCandidatesError, listMemoryProposals, proposeMemoryFromLog } from "./memoryProposal.js";
10
+ import { isNoSkillPatchCandidatesError, proposeSkillPatch } from "./patch.js";
11
+ import { writeGeneratedOutput } from "./output.js";
12
+ import { normalizeName, slugForFilename, workspacePaths } from "./paths.js";
13
+ import { readWorker, refreshWorkerSummary } from "./worker.js";
14
+ import { requireWorkspace } from "./workspace.js";
15
+ import { estimateTokens } from "./tokens.js";
16
+ function shellQuote(value) {
17
+ return `"${value.replace(/(["\\$`])/g, "\\$1")}"`;
18
+ }
19
+ function continueCommand(options) {
20
+ return [
21
+ "briefops continue",
22
+ options.project ? `--project ${options.project}` : undefined,
23
+ options.worker ? `--worker ${options.worker}` : undefined,
24
+ `--task ${shellQuote(options.task)}`
25
+ ].filter((part) => Boolean(part)).join(" ");
26
+ }
27
+ function isMissingWorkerError(error) {
28
+ return error instanceof BriefOpsError && error.message.startsWith("Worker not found:");
29
+ }
30
+ function normalizeImportance(value) {
31
+ const importance = (value ?? "normal").trim().toLowerCase();
32
+ if (importance === "trivial" ||
33
+ importance === "normal" ||
34
+ importance === "durable" ||
35
+ importance === "incident") {
36
+ return importance;
37
+ }
38
+ throw new BriefOpsError(`Invalid finish importance: ${value}`);
39
+ }
40
+ function hasDurableFields(options) {
41
+ return [
42
+ ...(options.lessons ?? []),
43
+ ...(options.openRisks ?? []),
44
+ ...(options.nextSteps ?? []),
45
+ ...(options.decisions ?? []),
46
+ ...(options.incidents ?? [])
47
+ ].some((value) => value.trim().length > 0) ||
48
+ /\b(decision|fact):/i.test(options.notes ?? "") ||
49
+ /\b(missing|missed|failed|blocked|unverified|risk|violation|regression|incident|error|bug|failure)\b/i.test(options.result);
50
+ }
51
+ export async function finishWork(options) {
52
+ const cwd = options.cwd ?? process.cwd();
53
+ return withWorkspaceLock({ cwd, name: "workflow" }, async () => {
54
+ await requireWorkspace(cwd);
55
+ const logResult = await addWorkLog({
56
+ ...options,
57
+ cwd
58
+ });
59
+ const warnings = [];
60
+ const importance = normalizeImportance(options.importance);
61
+ if (logResult.log.worker) {
62
+ try {
63
+ await readWorker(cwd, logResult.log.worker);
64
+ }
65
+ catch (error) {
66
+ if (!isMissingWorkerError(error)) {
67
+ throw error;
68
+ }
69
+ warnings.push(`Worker ${logResult.log.worker} does not exist yet. Run: briefops worker create ${logResult.log.worker}`);
70
+ }
71
+ }
72
+ let memoryProposalId;
73
+ let memoryProposalPath;
74
+ const durableFieldsPresent = hasDurableFields(options);
75
+ if (options.noMemoryProposal) {
76
+ warnings.push("Memory proposal skipped by --no-memory-proposal.");
77
+ }
78
+ else if (importance === "trivial") {
79
+ warnings.push("Trivial work is not proposed as durable memory.");
80
+ }
81
+ else if (importance === "durable" && !durableFieldsPresent) {
82
+ warnings.push("Durable finish requested, but no durable memory fields were provided.");
83
+ }
84
+ else if (importance === "normal" && !durableFieldsPresent) {
85
+ warnings.push("No durable memory proposal candidates found.");
86
+ }
87
+ else {
88
+ try {
89
+ const memoryProposal = await proposeMemoryFromLog({
90
+ cwd,
91
+ fromLog: logResult.log.id
92
+ });
93
+ memoryProposalId = memoryProposal.proposal.id;
94
+ memoryProposalPath = memoryProposal.path;
95
+ }
96
+ catch (error) {
97
+ if (!isNoMemoryProposalCandidatesError(error)) {
98
+ throw error;
99
+ }
100
+ warnings.push("No durable memory proposal candidates found.");
101
+ }
102
+ }
103
+ let skillPatchId;
104
+ let skillPatchPath;
105
+ if (options.proposeSkillPatch && !options.skill) {
106
+ throw new BriefOpsError("Skill patch proposal requires --skill.");
107
+ }
108
+ if (options.proposeSkillPatch && options.skill) {
109
+ try {
110
+ const patch = await proposeSkillPatch({
111
+ cwd,
112
+ skill: options.skill,
113
+ fromLog: logResult.log.id
114
+ });
115
+ skillPatchId = patch.patch.id;
116
+ skillPatchPath = patch.path;
117
+ }
118
+ catch (error) {
119
+ if (!isNoSkillPatchCandidatesError(error)) {
120
+ throw error;
121
+ }
122
+ warnings.push("No skill patch candidates found.");
123
+ }
124
+ }
125
+ let workerSummaryPath;
126
+ if (options.refreshWorker && options.worker) {
127
+ workerSummaryPath = (await refreshWorkerSummary({
128
+ cwd,
129
+ name: options.worker
130
+ })).path;
131
+ }
132
+ const nextTask = options.continueTask ?? logResult.log.next_steps[0] ?? options.task;
133
+ const nextCommand = continueCommand({
134
+ project: logResult.log.project,
135
+ worker: logResult.log.worker,
136
+ task: nextTask
137
+ });
138
+ return {
139
+ logId: logResult.log.id,
140
+ logPath: logResult.path,
141
+ memoryProposalId,
142
+ memoryProposalPath,
143
+ skillPatchId,
144
+ skillPatchPath,
145
+ workerSummaryPath,
146
+ nextCommand,
147
+ warnings
148
+ };
149
+ });
150
+ }
151
+ export async function continueWork(options) {
152
+ const cwd = options.cwd ?? process.cwd();
153
+ return withWorkspaceLock({ cwd, name: "workflow" }, async () => {
154
+ await requireWorkspace(cwd);
155
+ const worker = normalizeName(options.worker);
156
+ const workerProfile = await readWorker(cwd, worker);
157
+ const project = options.project ? normalizeName(options.project) : workerProfile.project;
158
+ if (!project) {
159
+ throw new BriefOpsError("Continue requires --project when the worker has no default project.");
160
+ }
161
+ const health = await inspectContinuityHealth({
162
+ cwd,
163
+ project,
164
+ worker
165
+ });
166
+ if (health.readiness === "FAIL") {
167
+ throw new BriefOpsError("Continuity health failed. Run `briefops inspect continuity` for details.");
168
+ }
169
+ const pending = (await listMemoryProposals({
170
+ cwd,
171
+ status: "proposed",
172
+ project
173
+ })).filter((proposal) => !proposal.worker || proposal.worker === worker);
174
+ const summary = await refreshWorkerSummary({
175
+ cwd,
176
+ name: worker
177
+ });
178
+ const handoff = await generateHandoff({
179
+ cwd,
180
+ project,
181
+ worker,
182
+ task: options.task,
183
+ budget: options.budget,
184
+ save: true
185
+ });
186
+ const resume = await generateCodexResume({
187
+ cwd,
188
+ project,
189
+ worker,
190
+ task: options.task,
191
+ fromHandoff: handoff.id,
192
+ budget: options.budget,
193
+ mode: options.mode,
194
+ completionPromise: options.completionPromise,
195
+ save: true,
196
+ outputPath: options.outputPath,
197
+ force: options.force
198
+ });
199
+ const pack = options.pack
200
+ ? await packResume({
201
+ cwd,
202
+ project,
203
+ worker,
204
+ task: options.task,
205
+ budget: options.budget
206
+ })
207
+ : undefined;
208
+ return {
209
+ readiness: health.readiness,
210
+ pendingMemoryProposals: pending.length,
211
+ workerSummaryPath: summary.path,
212
+ handoffPath: handoff.savedPath,
213
+ resumePath: resume.savedPath,
214
+ packPath: pack?.path,
215
+ nextCommand: continueCommand({
216
+ project,
217
+ worker,
218
+ task: options.task
219
+ }),
220
+ warnings: [
221
+ health.readiness === "WARN" ? "Continuity health is WARN; prompt was still generated." : undefined,
222
+ pending.length > 0 ? "Pending memory proposals should be reviewed before continuing." : undefined,
223
+ ...handoff.warnings,
224
+ ...(pack?.warnings ?? [])
225
+ ].filter((warning) => Boolean(warning))
226
+ };
227
+ });
228
+ }
229
+ function scrubLocalBriefOpsReferences(content) {
230
+ return content
231
+ .replace(/^Project file:\s*\.briefops\/[^\r\n]+$/gim, "Project context is included in this pack; no local BriefOps project file access is required.")
232
+ .replace(/`?\.briefops\/[^`\s)]+`?/g, "included local BriefOps context");
233
+ }
234
+ function renderPortablePackHeader(options) {
235
+ const reviewLine = options.exportPolicy === "shared-only"
236
+ ? sharedOnlyOmissionNote
237
+ : "Review before sharing outside your local machine. It may include local project memory, decisions, lessons, risks, and worker history.";
238
+ return [
239
+ "# BriefOps Portable Resume Pack",
240
+ "",
241
+ "This pack is self-contained. Paste it into Codex or attach it to a fresh thread.",
242
+ "",
243
+ reviewLine,
244
+ "",
245
+ `Worker: ${options.worker}`,
246
+ `Task: ${options.task}`,
247
+ `Generated: ${options.generatedAt}`,
248
+ `Estimated tokens: ${options.tokens}`,
249
+ ""
250
+ ].join("\n");
251
+ }
252
+ export async function packResume(options) {
253
+ const cwd = options.cwd ?? process.cwd();
254
+ return withWorkspaceLock({ cwd, name: "pack" }, async () => {
255
+ await requireWorkspace(cwd);
256
+ const worker = normalizeName(options.worker);
257
+ const exportPolicy = normalizeExportPolicy(options.exportPolicy);
258
+ const resume = await generateCodexResume({
259
+ cwd,
260
+ worker,
261
+ project: options.project,
262
+ task: options.task,
263
+ budget: options.budget ?? 3000,
264
+ exportPolicy,
265
+ save: false
266
+ });
267
+ const portableResume = scrubLocalBriefOpsReferences(resume.content).trim();
268
+ const generatedAt = new Date().toISOString();
269
+ let tokens = 0;
270
+ const buildContent = (estimatedTokens) => [
271
+ renderPortablePackHeader({
272
+ worker,
273
+ task: options.task.trim(),
274
+ generatedAt,
275
+ tokens: estimatedTokens,
276
+ exportPolicy
277
+ }),
278
+ portableResume,
279
+ ""
280
+ ].join("\n");
281
+ let content = buildContent(tokens);
282
+ for (let attempt = 0; attempt < 5; attempt += 1) {
283
+ const nextTokens = estimateTokens(content);
284
+ if (nextTokens === tokens) {
285
+ break;
286
+ }
287
+ tokens = nextTokens;
288
+ content = buildContent(tokens);
289
+ }
290
+ const budget = options.budget ?? 3000;
291
+ const warnings = tokens > budget
292
+ ? [`Portable resume pack exceeds token budget by ${tokens - budget} estimated tokens; core continuity content was preserved.`]
293
+ : [];
294
+ const targetPath = await writeGeneratedOutput({
295
+ defaultPath: path.join(workspacePaths(cwd).codexPrompts, `${slugForFilename(worker)}-resume-pack-${Date.now()}.md`),
296
+ outputPath: options.outputPath,
297
+ content,
298
+ force: options.force
299
+ });
300
+ return {
301
+ path: targetPath,
302
+ tokens,
303
+ content,
304
+ warnings
305
+ };
306
+ });
307
+ }
308
+ //# sourceMappingURL=workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/core/workflow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type InitResult = {
2
+ root: string;
3
+ created: string[];
4
+ existing: string[];
5
+ };
6
+ export declare function requireWorkspace(cwd?: string): Promise<void>;
7
+ export declare function initWorkspace(cwd?: string): Promise<InitResult>;
@@ -0,0 +1,214 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { workspaceSchemaVersion } from "./compatibility.js";
3
+ import { BriefOpsError } from "./errors.js";
4
+ import { memoryCategories, workspacePaths } from "./paths.js";
5
+ import { ensureDirectory, pathExists, writeFileIfAbsent } from "./storage.js";
6
+ const defaultBriefTemplates = {
7
+ "brief.generic.md": [
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
+ "brief.codex.md": [
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
+ "brief.claude-code.md": [
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
+ const defaultCodexPrompts = {
123
+ "mission.md": [
124
+ "# BriefOps Codex Mission",
125
+ "",
126
+ "Use this prompt when Codex should execute a task with a clear completion promise and evidence gates.",
127
+ "",
128
+ "Recommended command:",
129
+ "",
130
+ "```bash",
131
+ "briefops codex mission --worker <worker> --task \"<task>\" --adapter codex --save",
132
+ "```",
133
+ ""
134
+ ].join("\n"),
135
+ "plan.md": [
136
+ "# BriefOps Codex Plan",
137
+ "",
138
+ "Use this prompt when Codex should produce a decision-complete plan before editing product code.",
139
+ "",
140
+ "Recommended command:",
141
+ "",
142
+ "```bash",
143
+ "briefops codex plan --project <project> --idea \"<what to build>\" --save",
144
+ "```",
145
+ ""
146
+ ].join("\n")
147
+ };
148
+ export async function requireWorkspace(cwd = process.cwd()) {
149
+ const paths = workspacePaths(cwd);
150
+ if (!(await pathExists(paths.root))) {
151
+ throw new BriefOpsError(".briefops workspace not found. Run `briefops init` first.");
152
+ }
153
+ }
154
+ export async function initWorkspace(cwd = process.cwd()) {
155
+ const paths = workspacePaths(cwd);
156
+ const created = [];
157
+ const existing = [];
158
+ for (const dirPath of [
159
+ paths.root,
160
+ paths.skills,
161
+ paths.projects,
162
+ paths.memory,
163
+ paths.memoryProposals,
164
+ paths.workers,
165
+ paths.workerSummaries,
166
+ paths.logs,
167
+ paths.handoffs,
168
+ paths.briefs,
169
+ paths.codex,
170
+ paths.codexPrompts,
171
+ paths.evals,
172
+ paths.evalResults,
173
+ paths.patches,
174
+ paths.templates
175
+ ]) {
176
+ if (await pathExists(dirPath)) {
177
+ existing.push(dirPath);
178
+ }
179
+ else {
180
+ await ensureDirectory(dirPath);
181
+ created.push(dirPath);
182
+ }
183
+ }
184
+ const configCreated = await writeFileIfAbsent(paths.config, [
185
+ `version: ${workspaceSchemaVersion}`,
186
+ `created_at: "${new Date().toISOString()}"`,
187
+ "defaults: {}",
188
+ "token_budgets:",
189
+ " prime: 800",
190
+ " resume: 3000",
191
+ "memory_categories:",
192
+ ...memoryCategories.map((category) => ` - ${category}`),
193
+ ""
194
+ ].join("\n"));
195
+ (configCreated ? created : existing).push(paths.config);
196
+ for (const category of memoryCategories) {
197
+ const filePath = `${paths.memory}/${category}.yaml`;
198
+ const fileCreated = await writeFileIfAbsent(filePath, "items: []\n");
199
+ (fileCreated ? created : existing).push(filePath);
200
+ }
201
+ for (const [filename, template] of Object.entries(defaultBriefTemplates)) {
202
+ const filePath = `${paths.templates}/${filename}`;
203
+ const templateCreated = await writeFileIfAbsent(filePath, template);
204
+ (templateCreated ? created : existing).push(filePath);
205
+ }
206
+ for (const [filename, template] of Object.entries(defaultCodexPrompts)) {
207
+ const filePath = `${paths.codexPrompts}/${filename}`;
208
+ const promptCreated = await writeFileIfAbsent(filePath, template);
209
+ (promptCreated ? created : existing).push(filePath);
210
+ }
211
+ await fs.access(paths.root);
212
+ return { root: paths.root, created, existing };
213
+ }
214
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/core/workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { main } from "./cli.js";
3
+ import { BriefOpsError } from "./core/errors.js";
4
+ main(process.argv).catch((error) => {
5
+ if (error instanceof BriefOpsError) {
6
+ console.error(`Error: ${error.message}`);
7
+ }
8
+ else if (error instanceof Error) {
9
+ console.error(error.message);
10
+ }
11
+ else {
12
+ console.error(String(error));
13
+ }
14
+ process.exitCode = 1;
15
+ });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC1C,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;QACnC,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type TokenReportLine = {
2
+ label: string;
3
+ used: number;
4
+ budget: number;
5
+ };
6
+ export type GeneratedBrief = {
7
+ content: string;
8
+ warnings: string[];
9
+ report: TokenReportLine[];
10
+ totalTokens: number;
11
+ budget: number;
12
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=brief.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/schemas/brief.ts"],"names":[],"mappings":""}