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,25 @@
1
+ import { type ExportPolicy } from "./exportPolicy.js";
2
+ export type ExportTarget = "agents-md" | "claude-md" | "cursor-rules";
3
+ export type ExportMode = "router";
4
+ export type HarnessExportOptions = {
5
+ cwd?: string;
6
+ target: ExportTarget;
7
+ worker?: string;
8
+ project?: string;
9
+ exportPolicy?: ExportPolicy;
10
+ outputPath?: string;
11
+ force?: boolean;
12
+ dryRun?: boolean;
13
+ stdout?: boolean;
14
+ };
15
+ export type HarnessExportFile = {
16
+ path: string;
17
+ content: string;
18
+ tokens: number;
19
+ written: boolean;
20
+ };
21
+ export type HarnessExportResult = {
22
+ files: HarnessExportFile[];
23
+ warnings: string[];
24
+ };
25
+ export declare function renderHarnessExport(options: HarnessExportOptions): HarnessExportResult;
@@ -0,0 +1,292 @@
1
+ import path from "node:path";
2
+ import { defaultContextBudgets, formatBudgetLine } from "./contextBudget.js";
3
+ import { BriefOpsError } from "./errors.js";
4
+ import { normalizeExportPolicy, sharedOnlyOmissionNote } from "./exportPolicy.js";
5
+ import { estimateTokens } from "./tokens.js";
6
+ function shellValue(value) {
7
+ return `"${value.replace(/(["\\$`])/g, "\\$1")}"`;
8
+ }
9
+ function workerFlag(worker) {
10
+ return worker ? ` --worker ${worker}` : " --worker <worker>";
11
+ }
12
+ function projectLine(project) {
13
+ return project ? ["", `Project: \`${project}\``] : [];
14
+ }
15
+ function policyLines(exportPolicy) {
16
+ return [
17
+ "",
18
+ `Export policy: \`${exportPolicy}\``,
19
+ exportPolicy === "shared-only"
20
+ ? "These instructions are safe to commit because they route agents to BriefOps instead of copying private local memory."
21
+ : "Local-private export was selected; keep this file local unless you review it before sharing."
22
+ ];
23
+ }
24
+ function renderAgentsMd(options) {
25
+ const worker = options.worker ?? "<worker>";
26
+ return [
27
+ "# BriefOps Agent Instructions",
28
+ "",
29
+ "This repository uses BriefOps for local AI coding continuity.",
30
+ ...projectLine(options.project),
31
+ ...policyLines(options.exportPolicy),
32
+ "",
33
+ "## Start Of Work",
34
+ "",
35
+ "Before broad repo/history inspection, run:",
36
+ "",
37
+ "```bash",
38
+ `briefops prime --format codex --task ${shellValue("<current task>")} --max-tokens 800`,
39
+ "```",
40
+ "",
41
+ "Use the output as a routing brief, not as a replacement for relevant code inspection.",
42
+ "",
43
+ "## Finish Of Work",
44
+ "",
45
+ "At the end of meaningful work, run:",
46
+ "",
47
+ "```bash",
48
+ `briefops finish --worker ${worker} --task ${shellValue("<completed task>")} --result ${shellValue("<result>")}`,
49
+ "```",
50
+ "",
51
+ "Add `--lesson`, `--decision`, `--open-risk`, or `--next-step` only when the item is durable and useful for future work.",
52
+ "",
53
+ "## Memory Approval",
54
+ "",
55
+ "Never apply memory automatically.",
56
+ "",
57
+ "Ask the user before running:",
58
+ "",
59
+ "```bash",
60
+ "briefops approve latest",
61
+ "```",
62
+ "",
63
+ "## Fresh Thread Resume",
64
+ "",
65
+ "When continuing in a fresh thread:",
66
+ "",
67
+ "```bash",
68
+ `briefops continue --worker ${worker} --task ${shellValue("<next task>")} --pack`,
69
+ "```",
70
+ "",
71
+ "## Boundaries",
72
+ "",
73
+ "- Do not dump the entire `.briefops/` directory.",
74
+ "- Do not auto-approve memory or skill patches.",
75
+ "- Do not treat BriefOps context as a substitute for code inspection.",
76
+ "- Prefer compact prime context before reading large history.",
77
+ ""
78
+ ].join("\n");
79
+ }
80
+ function renderClaudeMd(options) {
81
+ const worker = options.worker ?? "<worker>";
82
+ return [
83
+ "# Claude Code Instructions: BriefOps",
84
+ "",
85
+ "This project uses BriefOps for local work continuity.",
86
+ ...projectLine(options.project),
87
+ ...policyLines(options.exportPolicy),
88
+ "",
89
+ "## Before Starting Work",
90
+ "",
91
+ "Run:",
92
+ "",
93
+ "```bash",
94
+ `briefops prime --format markdown --task ${shellValue("<current task>")} --max-tokens 800`,
95
+ "```",
96
+ "",
97
+ "Use the result to understand the selected worker, relevant project context, approved memory, open risks, and pending review items.",
98
+ "",
99
+ "## During Work",
100
+ "",
101
+ "Inspect only files relevant to the current task.",
102
+ "",
103
+ "Do not read the entire `.briefops/` workspace unless explicitly asked.",
104
+ "",
105
+ "## After Meaningful Work",
106
+ "",
107
+ "Run:",
108
+ "",
109
+ "```bash",
110
+ `briefops finish --worker ${worker} --task ${shellValue("<task>")} --result ${shellValue("<result>")}`,
111
+ "```",
112
+ "",
113
+ "Use durable fields only when useful:",
114
+ "",
115
+ "```bash",
116
+ "--lesson",
117
+ "--decision",
118
+ "--open-risk",
119
+ "--next-step",
120
+ "```",
121
+ "",
122
+ "## Human Approval Required",
123
+ "",
124
+ "Never apply BriefOps memory or skill patches automatically.",
125
+ "",
126
+ "Ask before:",
127
+ "",
128
+ "```bash",
129
+ "briefops approve latest",
130
+ "```",
131
+ "",
132
+ "## Fresh Thread Resume",
133
+ "",
134
+ "For a fresh Claude/Codex thread:",
135
+ "",
136
+ "```bash",
137
+ `briefops continue --worker ${worker} --task ${shellValue("<next task>")} --pack`,
138
+ "```",
139
+ ""
140
+ ].join("\n");
141
+ }
142
+ function cursorRule(description, alwaysApply, body) {
143
+ return [
144
+ "---",
145
+ `description: ${description}`,
146
+ `alwaysApply: ${alwaysApply ? "true" : "false"}`,
147
+ "---",
148
+ "",
149
+ body.trim(),
150
+ ""
151
+ ].join("\n");
152
+ }
153
+ function renderCursorRules(options) {
154
+ const worker = options.worker ?? "<worker>";
155
+ const policyNote = options.exportPolicy === "shared-only" ? `\n\n${sharedOnlyOmissionNote}` : "";
156
+ return [
157
+ {
158
+ relativePath: ".cursor/rules/briefops-prime.mdc",
159
+ content: cursorRule("Use BriefOps to prime AI coding context before broad repo/history inspection.", true, [
160
+ "# BriefOps Prime",
161
+ "",
162
+ "This repository uses BriefOps for local AI coding continuity.",
163
+ policyNote.trim() ? policyNote.trimStart() : undefined,
164
+ "",
165
+ "Before broad repo/history inspection, run:",
166
+ "",
167
+ "```bash",
168
+ `briefops prime --format codex --task ${shellValue("<current task>")} --max-tokens 800`,
169
+ "```",
170
+ "",
171
+ "Use the result as a compact routing brief.",
172
+ "",
173
+ "Do not:",
174
+ "- dump the full `.briefops` workspace",
175
+ "- auto-approve memory or skill patches",
176
+ "- treat prime context as a replacement for relevant code inspection"
177
+ ].filter((line) => line !== undefined).join("\n"))
178
+ },
179
+ {
180
+ relativePath: ".cursor/rules/briefops-finish.mdc",
181
+ content: cursorRule("Use when finishing meaningful AI coding work and recording durable lessons, decisions, risks, or next steps.", false, [
182
+ "# BriefOps Finish",
183
+ "",
184
+ "At the end of meaningful work, run `briefops finish`.",
185
+ "",
186
+ `Default worker hint: \`${worker}\`.`,
187
+ "",
188
+ "Only record durable items that will help future work.",
189
+ "",
190
+ "Do not create memory that the user did not approve."
191
+ ].join("\n"))
192
+ },
193
+ {
194
+ relativePath: ".cursor/rules/briefops-memory-review.mdc",
195
+ content: cursorRule("Use when BriefOps reports pending memory proposals or skill patches that need human review.", false, [
196
+ "# BriefOps Memory Review",
197
+ "",
198
+ "Memory and skill patch changes are human-approved.",
199
+ "",
200
+ "Review first:",
201
+ "",
202
+ "```bash",
203
+ "briefops memory proposal-show latest",
204
+ "briefops inbox",
205
+ "```",
206
+ "",
207
+ "Apply only after explicit user confirmation:",
208
+ "",
209
+ "```bash",
210
+ "briefops approve latest",
211
+ "```"
212
+ ].join("\n"))
213
+ },
214
+ {
215
+ relativePath: ".cursor/rules/briefops-continue.mdc",
216
+ content: cursorRule("Use when continuing a BriefOps worker in a fresh thread.", false, [
217
+ "# BriefOps Continue",
218
+ "",
219
+ "When continuing prior work in a fresh thread, run:",
220
+ "",
221
+ "```bash",
222
+ `briefops continue --worker ${worker} --task ${shellValue("<next task>")} --pack`,
223
+ "```",
224
+ "",
225
+ "Use the generated pack as the continuity handoff.",
226
+ "",
227
+ "Do not treat it as permission to skip relevant code inspection."
228
+ ].join("\n"))
229
+ }
230
+ ];
231
+ }
232
+ function defaultRelativePath(target) {
233
+ if (target === "agents-md") {
234
+ return "AGENTS.md";
235
+ }
236
+ if (target === "claude-md") {
237
+ return "CLAUDE.md";
238
+ }
239
+ throw new BriefOpsError("--output is not supported for cursor-rules because it writes multiple files.");
240
+ }
241
+ function hardWarningBudget(target, tokens) {
242
+ if (target === "agents-md") {
243
+ return 800;
244
+ }
245
+ if (target === "claude-md") {
246
+ return 1000;
247
+ }
248
+ return defaultContextBudgets.exportCursorTotal;
249
+ }
250
+ export function renderHarnessExport(options) {
251
+ const cwd = options.cwd ?? process.cwd();
252
+ const exportPolicy = normalizeExportPolicy(options.exportPolicy ?? "shared-only");
253
+ const renderOptions = {
254
+ worker: options.worker,
255
+ project: options.project,
256
+ exportPolicy
257
+ };
258
+ const rendered = options.target === "agents-md"
259
+ ? [{ relativePath: options.outputPath ?? defaultRelativePath(options.target), content: renderAgentsMd(renderOptions) }]
260
+ : options.target === "claude-md"
261
+ ? [{ relativePath: options.outputPath ?? defaultRelativePath(options.target), content: renderClaudeMd(renderOptions) }]
262
+ : renderCursorRules(renderOptions);
263
+ const files = rendered.map((file) => {
264
+ const resolvedPath = path.isAbsolute(file.relativePath)
265
+ ? file.relativePath
266
+ : path.join(cwd, file.relativePath);
267
+ return {
268
+ path: resolvedPath,
269
+ content: file.content,
270
+ tokens: estimateTokens(file.content),
271
+ written: false
272
+ };
273
+ });
274
+ const warnings = [];
275
+ for (const file of files) {
276
+ const perFileBudget = options.target === "agents-md"
277
+ ? defaultContextBudgets.exportAgentsMd
278
+ : options.target === "claude-md"
279
+ ? defaultContextBudgets.exportClaudeMd
280
+ : defaultContextBudgets.exportCursorRule;
281
+ if (file.tokens > perFileBudget) {
282
+ warnings.push(formatBudgetLine(path.basename(file.path), file.tokens, perFileBudget));
283
+ }
284
+ }
285
+ const total = files.reduce((sum, file) => sum + file.tokens, 0);
286
+ const hardBudget = hardWarningBudget(options.target, total);
287
+ if (total > hardBudget) {
288
+ warnings.push(formatBudgetLine("export total", total, hardBudget));
289
+ }
290
+ return { files, warnings };
291
+ }
292
+ //# sourceMappingURL=exportTargets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportTargets.js","sourceRoot":"","sources":["../../src/core/exportTargets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { type ExportPolicy } from "./exportPolicy.js";
2
+ import { type HandoffMetadata } from "../schemas/handoff.js";
3
+ import type { TokenReportLine } from "../schemas/brief.js";
4
+ export type GenerateHandoffOptions = {
5
+ cwd?: string;
6
+ project?: string;
7
+ worker?: string;
8
+ task?: string;
9
+ budget?: number;
10
+ fromHandoff?: string;
11
+ mode?: string;
12
+ completionPromise?: string;
13
+ exportPolicy?: ExportPolicy;
14
+ save?: boolean;
15
+ outputPath?: string;
16
+ force?: boolean;
17
+ };
18
+ export type HandoffResult = {
19
+ id: string;
20
+ content: string;
21
+ tokens: number;
22
+ budget: number;
23
+ warnings: string[];
24
+ report: TokenReportLine[];
25
+ savedPath?: string;
26
+ };
27
+ export declare function generateHandoff(options: GenerateHandoffOptions): Promise<HandoffResult>;
28
+ export declare function saveGeneratedHandoff(options: {
29
+ cwd: string;
30
+ id: string;
31
+ project?: string;
32
+ worker?: string;
33
+ content: string;
34
+ outputPath?: string;
35
+ force?: boolean;
36
+ }): Promise<string>;
37
+ export declare function listSavedHandoffs(cwd?: string): Promise<Array<{
38
+ id: string;
39
+ path: string;
40
+ tokens: number;
41
+ }>>;
42
+ export declare function showSavedHandoff(cwd: string, idOrLatest: string): Promise<string>;
43
+ export declare function inspectSavedHandoff(cwd: string, idOrLatest: string): Promise<{
44
+ metadata: HandoffMetadata;
45
+ path: string;
46
+ characters: number;
47
+ }>;
48
+ export declare function generateCodexResumeFromHandoff(options: GenerateHandoffOptions): Promise<HandoffResult>;