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,611 @@
1
+ import path from "node:path";
2
+ import { BriefOpsError } from "./errors.js";
3
+ import { filterMemoryForExport, normalizeExportPolicy, sharedOnlyOmissionNote } from "./exportPolicy.js";
4
+ import { listWorkLogs } from "./log.js";
5
+ import { withWorkspaceLock } from "./lock.js";
6
+ import { formatMemoryItem, selectContinuityContext, taskKeywords } from "./memory.js";
7
+ import { writeGeneratedOutput } from "./output.js";
8
+ import { readProject } from "./project.js";
9
+ import { formatDateStamp, normalizeName, slugForFilename, workspacePaths } from "./paths.js";
10
+ import { listFilesBySuffix, parseMarkdownWithFrontmatter, readTextFile, stringifyMarkdownWithFrontmatter } from "./storage.js";
11
+ import { estimateTokens, truncateToTokenBudget } from "./tokens.js";
12
+ import { generateWorkerIntelligence, readWorker } from "./worker.js";
13
+ import { requireWorkspace } from "./workspace.js";
14
+ import { handoffSchema } from "../schemas/handoff.js";
15
+ const defaultPolicy = {
16
+ max_total_tokens: 2500,
17
+ project: 450,
18
+ worker: 350,
19
+ recent_logs: 450,
20
+ decisions: 350,
21
+ lessons: 350,
22
+ incidents: 250,
23
+ open_risks: 250,
24
+ task: 150,
25
+ template: 300
26
+ };
27
+ function sectionReport(label, text, budget) {
28
+ return {
29
+ label,
30
+ used: estimateTokens(text),
31
+ budget
32
+ };
33
+ }
34
+ function renderTokenReport(lines, total, budget) {
35
+ return [
36
+ ...lines.map((line) => `- ${line.label}: ${line.used} / ${line.budget}`),
37
+ `- Total: ${total} / ${budget}`
38
+ ].join("\n");
39
+ }
40
+ function formatMemory(items) {
41
+ return items.length > 0 ? items.join("\n") : "No active matching memory found.";
42
+ }
43
+ async function renderWorkerForExport(options) {
44
+ if (!options.worker) {
45
+ return "No worker selected.";
46
+ }
47
+ if (options.exportPolicy === "shared-only") {
48
+ const worker = await readWorker(options.cwd, options.worker);
49
+ return [
50
+ `# Worker Intelligence: ${worker.name}`,
51
+ "",
52
+ sharedOnlyOmissionNote,
53
+ "",
54
+ "## Identity",
55
+ "",
56
+ worker.description || "No worker description recorded.",
57
+ "",
58
+ "## Project",
59
+ "",
60
+ worker.project ?? "No default project recorded.",
61
+ "",
62
+ "## Default Operating Style",
63
+ "",
64
+ worker.style.length > 0 ? worker.style.map((style) => `- ${style}`).join("\n") : "- Verify before completion.",
65
+ "",
66
+ "## Skill Bundle",
67
+ "",
68
+ worker.default_skills.length > 0
69
+ ? worker.default_skills.map((skill) => `- ${skill}`).join("\n")
70
+ : "- No default skills recorded.",
71
+ ""
72
+ ].join("\n");
73
+ }
74
+ return (await generateWorkerIntelligence({
75
+ cwd: options.cwd,
76
+ name: options.worker,
77
+ budget: options.budget
78
+ })).content;
79
+ }
80
+ function formatLogItem(log) {
81
+ const details = [
82
+ log.result,
83
+ ...log.open_risks.map((risk) => `open risk: ${risk}`),
84
+ ...log.decisions.map((decision) => `decision: ${decision}`),
85
+ ...log.incidents.map((incident) => `incident: ${incident}`),
86
+ ...log.next_steps.map((step) => `next: ${step}`)
87
+ ].join("; ");
88
+ return `- ${log.created_at.slice(0, 10)}: ${log.task}; ${details}`;
89
+ }
90
+ function scoreLogItem(log, task) {
91
+ const taskWords = taskKeywords(task);
92
+ const logWords = taskKeywords([
93
+ log.task,
94
+ log.result,
95
+ ...log.lessons,
96
+ ...log.open_risks,
97
+ ...log.next_steps,
98
+ ...log.decisions,
99
+ ...log.incidents
100
+ ].join(" "));
101
+ const overlap = [...taskWords].filter((word) => logWords.has(word)).length;
102
+ const age = Date.parse(log.created_at);
103
+ const fresh = Number.isNaN(age) ? 0 : Math.max(0, 10 - Math.floor((Date.now() - age) / 86_400_000));
104
+ return (overlap * 8 +
105
+ fresh +
106
+ log.open_risks.length * 12 +
107
+ log.decisions.length * 10 +
108
+ log.incidents.length * 8 +
109
+ log.next_steps.length * 4);
110
+ }
111
+ function selectLogItems(options) {
112
+ const ordered = options.logs
113
+ .map((log) => ({
114
+ log,
115
+ score: scoreLogItem(log, options.task)
116
+ }))
117
+ .sort((a, b) => b.score - a.score || b.log.created_at.localeCompare(a.log.created_at))
118
+ .slice(0, options.quota);
119
+ const selected = [];
120
+ let tokens = 0;
121
+ for (const item of ordered) {
122
+ const text = formatLogItem(item.log);
123
+ const itemTokens = estimateTokens(text);
124
+ if (selected.length > 0 && tokens + itemTokens > options.maxTokens) {
125
+ continue;
126
+ }
127
+ selected.push(text);
128
+ tokens += itemTokens;
129
+ }
130
+ return selected.length > 0 ? selected.join("\n") : "No recent work logs found.";
131
+ }
132
+ async function resolveHandoffContext(options) {
133
+ const cwd = options.cwd ?? process.cwd();
134
+ await requireWorkspace(cwd);
135
+ const workerName = options.worker ? normalizeName(options.worker) : undefined;
136
+ const worker = workerName ? await readWorker(cwd, workerName) : undefined;
137
+ const project = options.project
138
+ ? normalizeName(options.project)
139
+ : worker?.project
140
+ ? normalizeName(worker.project)
141
+ : undefined;
142
+ return {
143
+ cwd,
144
+ project,
145
+ worker: workerName,
146
+ skills: worker?.default_skills ?? [],
147
+ task: options.task?.trim(),
148
+ budget: options.budget ?? defaultPolicy.max_total_tokens
149
+ };
150
+ }
151
+ function trimSection(text, minTokens) {
152
+ const used = estimateTokens(text);
153
+ if (used <= minTokens) {
154
+ return { text, trimmed: false };
155
+ }
156
+ const target = Math.max(minTokens, Math.floor(used * 0.65));
157
+ const trimmed = truncateToTokenBudget(text, target).text;
158
+ return {
159
+ text: trimmed,
160
+ trimmed: trimmed !== text
161
+ };
162
+ }
163
+ function trimMarkdownSection(markdown, heading, minTokens) {
164
+ const marker = `## ${heading}`;
165
+ const start = markdown.indexOf(marker);
166
+ if (start === -1) {
167
+ return { text: markdown, trimmed: false };
168
+ }
169
+ const bodyStart = start + marker.length;
170
+ const nextHeading = markdown.indexOf("\n## ", bodyStart);
171
+ const end = nextHeading === -1 ? markdown.length : nextHeading;
172
+ const body = markdown.slice(bodyStart, end);
173
+ const trimmed = trimSection(body.trim(), minTokens);
174
+ if (!trimmed.trimmed) {
175
+ return { text: markdown, trimmed: false };
176
+ }
177
+ return {
178
+ text: `${markdown.slice(0, bodyStart)}\n\n${trimmed.text}\n${markdown.slice(end)}`,
179
+ trimmed: true
180
+ };
181
+ }
182
+ export async function generateHandoff(options) {
183
+ const context = await resolveHandoffContext(options);
184
+ const exportPolicy = normalizeExportPolicy(options.exportPolicy);
185
+ const id = `handoff_${formatDateStamp()}`;
186
+ let projectText = context.project
187
+ ? exportPolicy === "shared-only"
188
+ ? [
189
+ `Project: ${context.project}`,
190
+ "Local project file details are omitted by shared-only policy."
191
+ ].join("\n")
192
+ : truncateToTokenBudget((await readProject(context.cwd, context.project)).body, defaultPolicy.project).text
193
+ : "No project selected.";
194
+ const workerSummary = await renderWorkerForExport({
195
+ cwd: context.cwd,
196
+ worker: context.worker,
197
+ budget: defaultPolicy.worker,
198
+ exportPolicy
199
+ });
200
+ let workerText = truncateToTokenBudget(workerSummary, defaultPolicy.worker).text;
201
+ const logs = exportPolicy === "shared-only" ? [] : await listWorkLogs({
202
+ cwd: context.cwd,
203
+ project: context.project,
204
+ worker: context.worker,
205
+ limit: 12
206
+ });
207
+ let logsText = exportPolicy === "shared-only"
208
+ ? sharedOnlyOmissionNote
209
+ : selectLogItems({
210
+ logs,
211
+ task: context.task,
212
+ maxTokens: defaultPolicy.recent_logs,
213
+ quota: 5
214
+ });
215
+ const memory = await selectContinuityContext({
216
+ cwd: context.cwd,
217
+ project: context.project,
218
+ skill: context.skills[0],
219
+ skills: context.skills,
220
+ worker: context.worker,
221
+ task: context.task,
222
+ maxTokens: defaultPolicy.decisions +
223
+ defaultPolicy.lessons +
224
+ defaultPolicy.incidents,
225
+ quotas: {
226
+ decisions: 5,
227
+ lessons: 6,
228
+ incidents: 4,
229
+ facts: 3,
230
+ deprecated: 0
231
+ }
232
+ });
233
+ const memoryItems = filterMemoryForExport(memory.items, exportPolicy);
234
+ const byType = (type) => memoryItems.filter((item) => item.type === type).map(formatMemoryItem);
235
+ const taskText = truncateToTokenBudget(context.task ?? "No next task provided.", defaultPolicy.task).text;
236
+ const openRisks = logs.flatMap((log) => log.open_risks);
237
+ const nextSteps = logs.flatMap((log) => log.next_steps);
238
+ let decisionsText = formatMemory(byType("decision"));
239
+ let lessonsText = formatMemory(byType("lesson"));
240
+ let incidentsText = formatMemory(byType("incident"));
241
+ const openRisksText = exportPolicy === "shared-only"
242
+ ? sharedOnlyOmissionNote
243
+ : openRisks.length > 0
244
+ ? openRisks.map((risk) => `- ${risk}`).join("\n")
245
+ : "No unresolved open risks found.";
246
+ const nextActionsText = exportPolicy === "shared-only"
247
+ ? sharedOnlyOmissionNote
248
+ : nextSteps.length > 0
249
+ ? nextSteps.map((step) => `- ${step}`).join("\n")
250
+ : `- ${taskText}`;
251
+ const readIfNeededText = context.project
252
+ ? `Project file: .briefops/projects/${context.project}.project.md`
253
+ : "No project references listed.";
254
+ const render = (warnings = []) => {
255
+ const sections = [
256
+ ["Project", projectText, defaultPolicy.project],
257
+ ["Worker", workerText, defaultPolicy.worker],
258
+ ["Recent Work", logsText, defaultPolicy.recent_logs],
259
+ ["Active Decisions", decisionsText, defaultPolicy.decisions],
260
+ ["Active Lessons", lessonsText, defaultPolicy.lessons],
261
+ ["Recent Incidents / Risks", incidentsText, defaultPolicy.incidents],
262
+ ["Open Risks", openRisksText, defaultPolicy.open_risks],
263
+ ["Current Task", taskText, defaultPolicy.task]
264
+ ];
265
+ const report = sections.map(([label, text, budget]) => sectionReport(label, text, budget));
266
+ const warningText = warnings.length > 0 ? `> ${warnings.join("\n> ")}\n\n` : "";
267
+ const body = [
268
+ "# BriefOps Continuity Handoff",
269
+ "",
270
+ `${warningText}## Purpose`,
271
+ "",
272
+ "This handoff lets a new AI coding thread continue work without requiring the user to repeat project history, worker judgment, and recent task context.",
273
+ "",
274
+ "## Project",
275
+ "",
276
+ projectText,
277
+ "",
278
+ "## Worker",
279
+ "",
280
+ workerText,
281
+ "",
282
+ "## Current Task",
283
+ "",
284
+ taskText,
285
+ "",
286
+ "## Recent Work",
287
+ "",
288
+ logsText,
289
+ "",
290
+ "## Active Decisions",
291
+ "",
292
+ decisionsText,
293
+ "",
294
+ "## Active Lessons",
295
+ "",
296
+ lessonsText,
297
+ "",
298
+ "## Recent Incidents / Risks",
299
+ "",
300
+ incidentsText,
301
+ "",
302
+ "## Open Risks",
303
+ "",
304
+ openRisksText,
305
+ "",
306
+ "## Suggested Next Actions",
307
+ "",
308
+ nextActionsText,
309
+ "",
310
+ "## Read If Needed",
311
+ "",
312
+ readIfNeededText,
313
+ "",
314
+ "## Token Budget Report",
315
+ "",
316
+ "__TOKEN_REPORT__",
317
+ ""
318
+ ].join("\n");
319
+ let content = body;
320
+ let tokens = estimateTokens(content.replace("__TOKEN_REPORT__", ""));
321
+ content = content.replace("__TOKEN_REPORT__", renderTokenReport(report, tokens, context.budget));
322
+ tokens = estimateTokens(content);
323
+ content = content.replace(/- Total: \d+ \/ \d+/, `- Total: ${tokens} / ${context.budget}`);
324
+ tokens = estimateTokens(content);
325
+ return { content, tokens, report };
326
+ };
327
+ const bodyBudget = Math.max(200, context.budget - 100);
328
+ let rendered = render();
329
+ const trimTargets = [
330
+ () => {
331
+ const trimmed = trimSection(lessonsText, 30);
332
+ lessonsText = trimmed.text;
333
+ return trimmed.trimmed;
334
+ },
335
+ () => {
336
+ const trimmed = trimSection(incidentsText, 30);
337
+ incidentsText = trimmed.text;
338
+ return trimmed.trimmed;
339
+ },
340
+ () => {
341
+ const trimmed = trimSection(logsText, 35);
342
+ logsText = trimmed.text;
343
+ return trimmed.trimmed;
344
+ },
345
+ () => {
346
+ const trimmed = trimSection(workerText, 45);
347
+ workerText = trimmed.text;
348
+ return trimmed.trimmed;
349
+ },
350
+ () => {
351
+ const trimmed = trimSection(projectText, 45);
352
+ projectText = trimmed.text;
353
+ return trimmed.trimmed;
354
+ },
355
+ () => {
356
+ const trimmed = trimSection(decisionsText, 30);
357
+ decisionsText = trimmed.text;
358
+ return trimmed.trimmed;
359
+ }
360
+ ];
361
+ while (rendered.tokens > bodyBudget) {
362
+ const trimmed = trimTargets.some((trim) => trim());
363
+ if (!trimmed) {
364
+ break;
365
+ }
366
+ rendered = render();
367
+ }
368
+ const warnings = rendered.tokens > bodyBudget
369
+ ? [`Rendered handoff exceeds token budget by ${rendered.tokens - bodyBudget} estimated tokens after trimming continuity context.`]
370
+ : [];
371
+ if (warnings.length > 0) {
372
+ rendered = render(warnings);
373
+ }
374
+ const metadata = {
375
+ id,
376
+ created_at: new Date().toISOString(),
377
+ project: context.project,
378
+ worker: context.worker,
379
+ task: context.task,
380
+ adapter: "generic",
381
+ budget: context.budget,
382
+ total_tokens: rendered.tokens,
383
+ warnings
384
+ };
385
+ const content = stringifyMarkdownWithFrontmatter(metadata, rendered.content);
386
+ const savedPath = options.save
387
+ ? await saveGeneratedHandoff({
388
+ cwd: context.cwd,
389
+ id,
390
+ project: context.project,
391
+ worker: context.worker,
392
+ content,
393
+ outputPath: options.outputPath,
394
+ force: options.force
395
+ })
396
+ : undefined;
397
+ return {
398
+ id,
399
+ content,
400
+ tokens: estimateTokens(content),
401
+ budget: context.budget,
402
+ warnings,
403
+ report: rendered.report,
404
+ savedPath
405
+ };
406
+ }
407
+ export async function saveGeneratedHandoff(options) {
408
+ return withWorkspaceLock({ cwd: options.cwd, name: "handoff" }, async () => {
409
+ return writeGeneratedOutput({
410
+ defaultPath: path.join(workspacePaths(options.cwd).handoffs, `${options.id}-${slugForFilename(options.project ?? "global")}-${slugForFilename(options.worker ?? "handoff")}.md`),
411
+ outputPath: options.outputPath,
412
+ content: options.content,
413
+ force: options.force
414
+ });
415
+ });
416
+ }
417
+ function handoffIdFromPath(filePath) {
418
+ return path.basename(filePath, ".md");
419
+ }
420
+ async function resolveSavedHandoffPath(cwd, idOrLatest) {
421
+ await requireWorkspace(cwd);
422
+ const files = await listFilesBySuffix(workspacePaths(cwd).handoffs, ".md");
423
+ if (files.length === 0) {
424
+ throw new BriefOpsError("No saved handoffs found.");
425
+ }
426
+ if (idOrLatest.trim().toLowerCase() === "latest") {
427
+ return [...files].sort().at(-1);
428
+ }
429
+ const match = files.find((filePath) => handoffIdFromPath(filePath).startsWith(idOrLatest));
430
+ if (!match) {
431
+ throw new BriefOpsError(`Saved handoff not found: ${idOrLatest}`);
432
+ }
433
+ return match;
434
+ }
435
+ export async function listSavedHandoffs(cwd = process.cwd()) {
436
+ await requireWorkspace(cwd);
437
+ const files = await listFilesBySuffix(workspacePaths(cwd).handoffs, ".md");
438
+ const handoffs = await Promise.all(files.map(async (filePath) => ({
439
+ id: handoffIdFromPath(filePath),
440
+ path: filePath,
441
+ tokens: estimateTokens(await readTextFile(filePath))
442
+ })));
443
+ return handoffs.sort((a, b) => b.id.localeCompare(a.id));
444
+ }
445
+ export async function showSavedHandoff(cwd, idOrLatest) {
446
+ return readTextFile(await resolveSavedHandoffPath(cwd, idOrLatest));
447
+ }
448
+ export async function inspectSavedHandoff(cwd, idOrLatest) {
449
+ const filePath = await resolveSavedHandoffPath(cwd, idOrLatest);
450
+ const raw = await readTextFile(filePath);
451
+ const parsed = parseMarkdownWithFrontmatter(raw, handoffSchema, filePath);
452
+ return {
453
+ metadata: parsed.data,
454
+ path: filePath,
455
+ characters: raw.length
456
+ };
457
+ }
458
+ export async function generateCodexResumeFromHandoff(options) {
459
+ const context = await resolveHandoffContext(options);
460
+ const exportPolicy = normalizeExportPolicy(options.exportPolicy);
461
+ const handoff = options.fromHandoff && exportPolicy !== "shared-only"
462
+ ? await showSavedHandoff(context.cwd, options.fromHandoff)
463
+ : (await generateHandoff({
464
+ ...options,
465
+ cwd: context.cwd,
466
+ exportPolicy,
467
+ save: false
468
+ })).content;
469
+ let workerIntelligence = await renderWorkerForExport({
470
+ cwd: context.cwd,
471
+ worker: context.worker,
472
+ budget: 800,
473
+ exportPolicy
474
+ });
475
+ let handoffText = handoff.trim();
476
+ const renderResume = (warnings = []) => {
477
+ const warningText = warnings.length > 0 ? `> ${warnings.join("\n> ")}\n\n` : "";
478
+ const content = [
479
+ "# BriefOps Codex Resume Mission",
480
+ "",
481
+ "## Mission",
482
+ "",
483
+ `Continue work as ${context.worker ?? "the selected BriefOps worker"}.`,
484
+ "",
485
+ `${warningText}## Continuity Contract`,
486
+ "",
487
+ "You are starting in a new thread. Do not assume the user will repeat prior context.",
488
+ "",
489
+ "Before acting:",
490
+ "1. Read the handoff.",
491
+ "2. Restate what is already known.",
492
+ "3. Identify unresolved risks.",
493
+ "4. Execute only the current task.",
494
+ "5. Verify before claiming completion.",
495
+ "",
496
+ "## Current Task",
497
+ "",
498
+ context.task ?? "Continue prior BriefOps work.",
499
+ "",
500
+ "## Handoff",
501
+ "",
502
+ handoffText,
503
+ "",
504
+ "## Worker Intelligence",
505
+ "",
506
+ workerIntelligence.trim(),
507
+ "",
508
+ "## Evidence Gates",
509
+ "",
510
+ "- Context gate: name the project files, docs, memory items, or logs used.",
511
+ "- Continuity gate: state which previous result or lesson you are continuing from.",
512
+ "- Change gate: summarize smallest useful change set.",
513
+ "- Verification gate: include commands or manual checks.",
514
+ "- Risk gate: call out unresolved or deferred risks.",
515
+ options.completionPromise ? `- Completion promise: ${options.completionPromise}` : undefined,
516
+ "",
517
+ "## Completion Signal",
518
+ "",
519
+ "Only after all gates pass, end with:",
520
+ "",
521
+ "```text",
522
+ "<briefops-complete>DONE</briefops-complete>",
523
+ "```",
524
+ ""
525
+ ].filter((line) => line !== undefined).join("\n");
526
+ return {
527
+ content,
528
+ tokens: estimateTokens(content)
529
+ };
530
+ };
531
+ let resume = renderResume();
532
+ const trimResumeTargets = [
533
+ () => {
534
+ const trimmed = trimMarkdownSection(handoffText, "Active Lessons", 30);
535
+ handoffText = trimmed.text;
536
+ return trimmed.trimmed;
537
+ },
538
+ () => {
539
+ const trimmed = trimMarkdownSection(handoffText, "Recent Incidents / Risks", 30);
540
+ handoffText = trimmed.text;
541
+ return trimmed.trimmed;
542
+ },
543
+ () => {
544
+ const trimmed = trimMarkdownSection(handoffText, "Recent Work", 35);
545
+ handoffText = trimmed.text;
546
+ return trimmed.trimmed;
547
+ },
548
+ () => {
549
+ const trimmed = trimSection(workerIntelligence, 80);
550
+ workerIntelligence = trimmed.text;
551
+ return trimmed.trimmed;
552
+ },
553
+ () => {
554
+ const trimmed = trimMarkdownSection(handoffText, "Worker", 45);
555
+ handoffText = trimmed.text;
556
+ return trimmed.trimmed;
557
+ },
558
+ () => {
559
+ const trimmed = trimMarkdownSection(handoffText, "Project", 45);
560
+ handoffText = trimmed.text;
561
+ return trimmed.trimmed;
562
+ },
563
+ () => {
564
+ const trimmed = trimMarkdownSection(handoffText, "Active Decisions", 30);
565
+ handoffText = trimmed.text;
566
+ return trimmed.trimmed;
567
+ }
568
+ ];
569
+ while (resume.tokens > context.budget) {
570
+ const trimmed = trimResumeTargets.some((trim) => trim());
571
+ if (!trimmed) {
572
+ break;
573
+ }
574
+ resume = renderResume();
575
+ }
576
+ const warnings = resume.tokens > context.budget
577
+ ? [`Rendered Codex resume exceeds token budget by ${resume.tokens - context.budget} estimated tokens after trimming continuity context.`]
578
+ : [];
579
+ if (warnings.length > 0) {
580
+ resume = renderResume(warnings);
581
+ }
582
+ const id = `resume_${formatDateStamp()}`;
583
+ const savedPath = options.save
584
+ ? await writeResumePrompt({
585
+ cwd: context.cwd,
586
+ id,
587
+ worker: context.worker,
588
+ content: resume.content,
589
+ outputPath: options.outputPath,
590
+ force: options.force
591
+ })
592
+ : undefined;
593
+ return {
594
+ id,
595
+ content: resume.content,
596
+ tokens: resume.tokens,
597
+ budget: context.budget,
598
+ warnings,
599
+ report: [],
600
+ savedPath
601
+ };
602
+ }
603
+ async function writeResumePrompt(options) {
604
+ return withWorkspaceLock({ cwd: options.cwd, name: "codex-prompt" }, async () => writeGeneratedOutput({
605
+ defaultPath: path.join(workspacePaths(options.cwd).codexPrompts, `${options.id}-resume-${slugForFilename(options.worker ?? "worker")}.md`),
606
+ outputPath: options.outputPath,
607
+ content: options.content,
608
+ force: options.force
609
+ }));
610
+ }
611
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/core/handoff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type InboxOptions = {
2
+ cwd?: string;
3
+ project?: string;
4
+ worker?: string;
5
+ skill?: string;
6
+ };
7
+ export type InboxSummary = {
8
+ pendingMemoryProposals: number;
9
+ pendingSkillPatches: number;
10
+ openRisks: number;
11
+ staleMemory: number;
12
+ deprecatedMemory: number;
13
+ recommendedCommands: string[];
14
+ };
15
+ export declare function getInboxSummary(options?: InboxOptions): Promise<InboxSummary>;