productfoo 0.0.0-stage → 1.0.1

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 (498) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +338 -2
  3. package/bin/foo +3 -0
  4. package/bin/foo.mjs +42 -0
  5. package/commands/bug.md +31 -0
  6. package/commands/discovery.md +28 -0
  7. package/commands/ideate.md +27 -0
  8. package/commands/init.md +28 -0
  9. package/commands/pitch.md +27 -0
  10. package/commands/preview.md +25 -0
  11. package/commands/research.md +31 -0
  12. package/commands/roast.md +27 -0
  13. package/commands/spec.md +30 -0
  14. package/config/pricing.yaml +198 -0
  15. package/config/routing-policy.yaml +171 -0
  16. package/dist-public/src/activeModel.d.ts +83 -0
  17. package/dist-public/src/activeModel.js +331 -0
  18. package/dist-public/src/agentAdapters.d.ts +122 -0
  19. package/dist-public/src/agentAdapters.js +178 -0
  20. package/dist-public/src/agentState.d.ts +43 -0
  21. package/dist-public/src/agentState.js +177 -0
  22. package/dist-public/src/bugCapsule.d.ts +94 -0
  23. package/dist-public/src/bugCapsule.js +227 -0
  24. package/dist-public/src/bugCapture.d.ts +26 -0
  25. package/dist-public/src/bugCapture.js +251 -0
  26. package/dist-public/src/bugOwnerLog.d.ts +93 -0
  27. package/dist-public/src/bugOwnerLog.js +304 -0
  28. package/dist-public/src/bugReportStore.d.ts +48 -0
  29. package/dist-public/src/bugReportStore.js +860 -0
  30. package/dist-public/src/bugSpecContext.d.ts +7 -0
  31. package/dist-public/src/bugSpecContext.js +129 -0
  32. package/dist-public/src/channelFreshness.d.ts +25 -0
  33. package/dist-public/src/channelFreshness.js +194 -0
  34. package/dist-public/src/cli.d.ts +30 -0
  35. package/dist-public/src/cli.js +1667 -0
  36. package/dist-public/src/cliArgs.d.ts +7 -0
  37. package/dist-public/src/cliArgs.js +44 -0
  38. package/dist-public/src/codeCatalog.d.ts +41 -0
  39. package/dist-public/src/codeCatalog.js +197 -0
  40. package/dist-public/src/commandContract.d.ts +84 -0
  41. package/dist-public/src/commandContract.js +390 -0
  42. package/dist-public/src/commandUsage.d.ts +3 -0
  43. package/dist-public/src/commandUsage.js +30 -0
  44. package/dist-public/src/commands/agent.d.ts +60 -0
  45. package/dist-public/src/commands/agent.js +1353 -0
  46. package/dist-public/src/commands/asp.d.ts +8 -0
  47. package/dist-public/src/commands/asp.js +669 -0
  48. package/dist-public/src/commands/evalCmd.d.ts +4 -0
  49. package/dist-public/src/commands/evalCmd.js +405 -0
  50. package/dist-public/src/commands/login.d.ts +25 -0
  51. package/dist-public/src/commands/login.js +94 -0
  52. package/dist-public/src/commands/loop.d.ts +16 -0
  53. package/dist-public/src/commands/loop.js +619 -0
  54. package/dist-public/src/commands/reconcile.d.ts +41 -0
  55. package/dist-public/src/commands/reconcile.js +292 -0
  56. package/dist-public/src/commands/runtime.d.ts +1 -0
  57. package/dist-public/src/commands/runtime.js +36 -0
  58. package/dist-public/src/commands/scanRedact.d.ts +8 -0
  59. package/dist-public/src/commands/scanRedact.js +266 -0
  60. package/dist-public/src/commands/setup.d.ts +28 -0
  61. package/dist-public/src/commands/setup.js +398 -0
  62. package/dist-public/src/commands/shared.d.ts +17 -0
  63. package/dist-public/src/commands/shared.js +147 -0
  64. package/dist-public/src/commands/source.d.ts +1 -0
  65. package/dist-public/src/commands/source.js +134 -0
  66. package/dist-public/src/commands/specCmd.d.ts +24 -0
  67. package/dist-public/src/commands/specCmd.js +794 -0
  68. package/dist-public/src/commands/update.d.ts +61 -0
  69. package/dist-public/src/commands/update.js +244 -0
  70. package/dist-public/src/comprehensionSignal.d.ts +20 -0
  71. package/dist-public/src/comprehensionSignal.js +166 -0
  72. package/dist-public/src/conductor/diversity.d.ts +48 -0
  73. package/dist-public/src/conductor/diversity.js +423 -0
  74. package/dist-public/src/conductor/engine.d.ts +7 -0
  75. package/dist-public/src/conductor/engine.js +295 -0
  76. package/dist-public/src/conductor/families/ideate.d.ts +2 -0
  77. package/dist-public/src/conductor/families/ideate.js +255 -0
  78. package/dist-public/src/conductor/families/interview.d.ts +2 -0
  79. package/dist-public/src/conductor/families/interview.js +39 -0
  80. package/dist-public/src/conductor/families/specSwarm.d.ts +2 -0
  81. package/dist-public/src/conductor/families/specSwarm.js +146 -0
  82. package/dist-public/src/conductor/familyDelivery.d.ts +6 -0
  83. package/dist-public/src/conductor/familyDelivery.js +37 -0
  84. package/dist-public/src/conductor/familyPackArtifact.d.ts +4 -0
  85. package/dist-public/src/conductor/familyPackArtifact.js +260 -0
  86. package/dist-public/src/conductor/ideateDecision.d.ts +6 -0
  87. package/dist-public/src/conductor/ideateDecision.js +237 -0
  88. package/dist-public/src/conductor/pack.d.ts +26 -0
  89. package/dist-public/src/conductor/pack.js +75 -0
  90. package/dist-public/src/conductor/types.d.ts +111 -0
  91. package/dist-public/src/conductor/types.js +7 -0
  92. package/dist-public/src/configPath.d.ts +2 -0
  93. package/dist-public/src/configPath.js +7 -0
  94. package/dist-public/src/discoveryArtifacts.d.ts +54 -0
  95. package/dist-public/src/discoveryArtifacts.js +467 -0
  96. package/dist-public/src/discoveryCommand.d.ts +127 -0
  97. package/dist-public/src/discoveryCommand.js +2148 -0
  98. package/dist-public/src/discoveryConnections.d.ts +339 -0
  99. package/dist-public/src/discoveryConnections.js +613 -0
  100. package/dist-public/src/discoveryDocs.d.ts +129 -0
  101. package/dist-public/src/discoveryDocs.js +577 -0
  102. package/dist-public/src/discoveryEvidence.d.ts +59 -0
  103. package/dist-public/src/discoveryEvidence.js +198 -0
  104. package/dist-public/src/discoveryFireflies.d.ts +25 -0
  105. package/dist-public/src/discoveryFireflies.js +551 -0
  106. package/dist-public/src/discoveryGmail.d.ts +12 -0
  107. package/dist-public/src/discoveryGmail.js +466 -0
  108. package/dist-public/src/discoveryGong.d.ts +12 -0
  109. package/dist-public/src/discoveryGong.js +491 -0
  110. package/dist-public/src/discoveryLearningRouting.d.ts +90 -0
  111. package/dist-public/src/discoveryLearningRouting.js +405 -0
  112. package/dist-public/src/discoveryMatching.d.ts +26 -0
  113. package/dist-public/src/discoveryMatching.js +73 -0
  114. package/dist-public/src/discoveryOutlook.d.ts +12 -0
  115. package/dist-public/src/discoveryOutlook.js +492 -0
  116. package/dist-public/src/discoveryProcess.d.ts +221 -0
  117. package/dist-public/src/discoveryProcess.js +703 -0
  118. package/dist-public/src/discoveryProof.d.ts +143 -0
  119. package/dist-public/src/discoveryProof.js +529 -0
  120. package/dist-public/src/discoveryProviders.d.ts +152 -0
  121. package/dist-public/src/discoveryProviders.js +756 -0
  122. package/dist-public/src/discoveryReadiness.d.ts +219 -0
  123. package/dist-public/src/discoveryReadiness.js +672 -0
  124. package/dist-public/src/discoveryReconcile.d.ts +57 -0
  125. package/dist-public/src/discoveryReconcile.js +424 -0
  126. package/dist-public/src/discoverySlack.d.ts +12 -0
  127. package/dist-public/src/discoverySlack.js +452 -0
  128. package/dist-public/src/discoverySources.d.ts +56 -0
  129. package/dist-public/src/discoverySources.js +322 -0
  130. package/dist-public/src/discoverySync.d.ts +52 -0
  131. package/dist-public/src/discoverySync.js +151 -0
  132. package/dist-public/src/discoverySynthesis.d.ts +57 -0
  133. package/dist-public/src/discoverySynthesis.js +215 -0
  134. package/dist-public/src/discoveryTeams.d.ts +12 -0
  135. package/dist-public/src/discoveryTeams.js +516 -0
  136. package/dist-public/src/discoveryZoom.d.ts +12 -0
  137. package/dist-public/src/discoveryZoom.js +523 -0
  138. package/dist-public/src/elicitationSurface.d.ts +13 -0
  139. package/dist-public/src/elicitationSurface.js +77 -0
  140. package/dist-public/src/errorReport.d.ts +99 -0
  141. package/dist-public/src/errorReport.js +443 -0
  142. package/dist-public/src/errorTaxonomy.d.ts +84 -0
  143. package/dist-public/src/errorTaxonomy.js +189 -0
  144. package/dist-public/src/evalCalibration.d.ts +82 -0
  145. package/dist-public/src/evalCalibration.js +169 -0
  146. package/dist-public/src/evalChecks.d.ts +21 -0
  147. package/dist-public/src/evalChecks.js +295 -0
  148. package/dist-public/src/evalCompile.d.ts +56 -0
  149. package/dist-public/src/evalCompile.js +58 -0
  150. package/dist-public/src/evalImprove.d.ts +60 -0
  151. package/dist-public/src/evalImprove.js +175 -0
  152. package/dist-public/src/evalJudge.d.ts +47 -0
  153. package/dist-public/src/evalJudge.js +143 -0
  154. package/dist-public/src/evalLabels.d.ts +100 -0
  155. package/dist-public/src/evalLabels.js +287 -0
  156. package/dist-public/src/evalRecord.d.ts +68 -0
  157. package/dist-public/src/evalRecord.js +165 -0
  158. package/dist-public/src/evalRoast.d.ts +88 -0
  159. package/dist-public/src/evalRoast.js +249 -0
  160. package/dist-public/src/evidenceIntake.d.ts +66 -0
  161. package/dist-public/src/evidenceIntake.js +356 -0
  162. package/dist-public/src/feedback.d.ts +78 -0
  163. package/dist-public/src/feedback.js +294 -0
  164. package/dist-public/src/firefliesClient.d.ts +106 -0
  165. package/dist-public/src/firefliesClient.js +258 -0
  166. package/dist-public/src/firstMoveTensions.d.ts +10 -0
  167. package/dist-public/src/firstMoveTensions.js +93 -0
  168. package/dist-public/src/gitRun.d.ts +21 -0
  169. package/dist-public/src/gitRun.js +50 -0
  170. package/dist-public/src/githubReconcile.d.ts +94 -0
  171. package/dist-public/src/githubReconcile.js +205 -0
  172. package/dist-public/src/gmailNango.d.ts +131 -0
  173. package/dist-public/src/gmailNango.js +329 -0
  174. package/dist-public/src/gongNango.d.ts +118 -0
  175. package/dist-public/src/gongNango.js +308 -0
  176. package/dist-public/src/grammarGate.d.ts +13 -0
  177. package/dist-public/src/grammarGate.js +72 -0
  178. package/dist-public/src/harnessGates.d.ts +65 -0
  179. package/dist-public/src/harnessGates.js +168 -0
  180. package/dist-public/src/humanSurfaceEval.d.ts +19 -0
  181. package/dist-public/src/humanSurfaceEval.js +156 -0
  182. package/dist-public/src/ideate.d.ts +43 -0
  183. package/dist-public/src/ideate.js +255 -0
  184. package/dist-public/src/ideateContext.d.ts +11 -0
  185. package/dist-public/src/ideateContext.js +83 -0
  186. package/dist-public/src/index.d.ts +2 -0
  187. package/dist-public/src/index.js +4 -0
  188. package/dist-public/src/initCommand.d.ts +25 -0
  189. package/dist-public/src/initCommand.js +558 -0
  190. package/dist-public/src/interviewGate.d.ts +25 -0
  191. package/dist-public/src/interviewGate.js +126 -0
  192. package/dist-public/src/jsonFile.d.ts +2 -0
  193. package/dist-public/src/jsonFile.js +22 -0
  194. package/dist-public/src/loopBudget.d.ts +182 -0
  195. package/dist-public/src/loopBudget.js +494 -0
  196. package/dist-public/src/loopContracts.d.ts +35 -0
  197. package/dist-public/src/loopContracts.js +364 -0
  198. package/dist-public/src/machineState.d.ts +1 -0
  199. package/dist-public/src/machineState.js +9 -0
  200. package/dist-public/src/notionNango.d.ts +93 -0
  201. package/dist-public/src/notionNango.js +279 -0
  202. package/dist-public/src/orchestrationResult.d.ts +11 -0
  203. package/dist-public/src/orchestrationResult.js +73 -0
  204. package/dist-public/src/outlookNango.d.ts +124 -0
  205. package/dist-public/src/outlookNango.js +327 -0
  206. package/dist-public/src/packetCorrections.d.ts +40 -0
  207. package/dist-public/src/packetCorrections.js +172 -0
  208. package/dist-public/src/packetGlossary.d.ts +6 -0
  209. package/dist-public/src/packetGlossary.js +42 -0
  210. package/dist-public/src/packetIndex.d.ts +54 -0
  211. package/dist-public/src/packetIndex.js +744 -0
  212. package/dist-public/src/packetIndexEntry.d.ts +3 -0
  213. package/dist-public/src/packetIndexEntry.js +128 -0
  214. package/dist-public/src/packetIndexServe.d.ts +13 -0
  215. package/dist-public/src/packetIndexServe.js +113 -0
  216. package/dist-public/src/packetIndexWorker.d.ts +7 -0
  217. package/dist-public/src/packetIndexWorker.js +45 -0
  218. package/dist-public/src/packetLifecycle.d.ts +30 -0
  219. package/dist-public/src/packetLifecycle.js +127 -0
  220. package/dist-public/src/packetReconcile.d.ts +73 -0
  221. package/dist-public/src/packetReconcile.js +386 -0
  222. package/dist-public/src/packetStatus.d.ts +125 -0
  223. package/dist-public/src/packetStatus.js +770 -0
  224. package/dist-public/src/packetValidation.d.ts +17 -0
  225. package/dist-public/src/packetValidation.js +333 -0
  226. package/dist-public/src/packetVerify.d.ts +73 -0
  227. package/dist-public/src/packetVerify.js +303 -0
  228. package/dist-public/src/packetWrite.d.ts +52 -0
  229. package/dist-public/src/packetWrite.js +448 -0
  230. package/dist-public/src/pitch.d.ts +38 -0
  231. package/dist-public/src/pitch.js +154 -0
  232. package/dist-public/src/processMemo.d.ts +8 -0
  233. package/dist-public/src/processMemo.js +23 -0
  234. package/dist-public/src/productDetect.d.ts +30 -0
  235. package/dist-public/src/productDetect.js +376 -0
  236. package/dist-public/src/profile.d.ts +62 -0
  237. package/dist-public/src/profile.js +334 -0
  238. package/dist-public/src/questionModel.d.ts +46 -0
  239. package/dist-public/src/questionModel.js +74 -0
  240. package/dist-public/src/questionText.d.ts +7 -0
  241. package/dist-public/src/questionText.js +38 -0
  242. package/dist-public/src/redactConfig.d.ts +2 -0
  243. package/dist-public/src/redactConfig.js +11 -0
  244. package/dist-public/src/redactEngine.d.ts +59 -0
  245. package/dist-public/src/redactEngine.js +509 -0
  246. package/dist-public/src/redactGate.d.ts +63 -0
  247. package/dist-public/src/redactGate.js +209 -0
  248. package/dist-public/src/repoRead.d.ts +29 -0
  249. package/dist-public/src/repoRead.js +160 -0
  250. package/dist-public/src/research.d.ts +242 -0
  251. package/dist-public/src/research.js +1314 -0
  252. package/dist-public/src/researchCompletion.d.ts +34 -0
  253. package/dist-public/src/researchCompletion.js +123 -0
  254. package/dist-public/src/researchExecution.d.ts +47 -0
  255. package/dist-public/src/researchExecution.js +309 -0
  256. package/dist-public/src/researchFormat.d.ts +21 -0
  257. package/dist-public/src/researchFormat.js +77 -0
  258. package/dist-public/src/researchGate.d.ts +86 -0
  259. package/dist-public/src/researchGate.js +1036 -0
  260. package/dist-public/src/researchReceipt.d.ts +76 -0
  261. package/dist-public/src/researchReceipt.js +148 -0
  262. package/dist-public/src/researchRender.d.ts +2 -0
  263. package/dist-public/src/researchRender.js +267 -0
  264. package/dist-public/src/researchSigningKey.d.ts +19 -0
  265. package/dist-public/src/researchSigningKey.js +95 -0
  266. package/dist-public/src/riskClassify.d.ts +42 -0
  267. package/dist-public/src/riskClassify.js +149 -0
  268. package/dist-public/src/routines.d.ts +42 -0
  269. package/dist-public/src/routines.js +269 -0
  270. package/dist-public/src/routingPolicy.d.ts +172 -0
  271. package/dist-public/src/routingPolicy.js +646 -0
  272. package/dist-public/src/secretInput.d.ts +8 -0
  273. package/dist-public/src/secretInput.js +89 -0
  274. package/dist-public/src/selfCheck.d.ts +7 -0
  275. package/dist-public/src/selfCheck.js +473 -0
  276. package/dist-public/src/selfCheckCache.d.ts +29 -0
  277. package/dist-public/src/selfCheckCache.js +147 -0
  278. package/dist-public/src/severityClass.d.ts +15 -0
  279. package/dist-public/src/severityClass.js +22 -0
  280. package/dist-public/src/skillClientPolicy.d.ts +8 -0
  281. package/dist-public/src/skillClientPolicy.js +16 -0
  282. package/dist-public/src/skillLocal.d.ts +98 -0
  283. package/dist-public/src/skillLocal.js +463 -0
  284. package/dist-public/src/skillTreeDigest.d.ts +9 -0
  285. package/dist-public/src/skillTreeDigest.js +64 -0
  286. package/dist-public/src/slackNango.d.ts +62 -0
  287. package/dist-public/src/slackNango.js +208 -0
  288. package/dist-public/src/social/arxiv.d.ts +19 -0
  289. package/dist-public/src/social/arxiv.js +96 -0
  290. package/dist-public/src/social/github.d.ts +2 -0
  291. package/dist-public/src/social/github.js +78 -0
  292. package/dist-public/src/social/hackernews.d.ts +2 -0
  293. package/dist-public/src/social/hackernews.js +67 -0
  294. package/dist-public/src/social/index.d.ts +10 -0
  295. package/dist-public/src/social/index.js +79 -0
  296. package/dist-public/src/social/reddit.d.ts +2 -0
  297. package/dist-public/src/social/reddit.js +125 -0
  298. package/dist-public/src/social/types.d.ts +73 -0
  299. package/dist-public/src/social/types.js +61 -0
  300. package/dist-public/src/social/xml.d.ts +10 -0
  301. package/dist-public/src/social/xml.js +49 -0
  302. package/dist-public/src/social/youtube.d.ts +7 -0
  303. package/dist-public/src/social/youtube.js +217 -0
  304. package/dist-public/src/sourceIngress.d.ts +488 -0
  305. package/dist-public/src/sourceIngress.js +1651 -0
  306. package/dist-public/src/specAfter.d.ts +187 -0
  307. package/dist-public/src/specAfter.js +814 -0
  308. package/dist-public/src/specBudget.d.ts +124 -0
  309. package/dist-public/src/specBudget.js +424 -0
  310. package/dist-public/src/specDecisionSignals.d.ts +38 -0
  311. package/dist-public/src/specDecisionSignals.js +121 -0
  312. package/dist-public/src/specLinkedCommits.d.ts +7 -0
  313. package/dist-public/src/specLinkedCommits.js +107 -0
  314. package/dist-public/src/specSections.d.ts +105 -0
  315. package/dist-public/src/specSections.js +718 -0
  316. package/dist-public/src/statusGlyphs.d.ts +18 -0
  317. package/dist-public/src/statusGlyphs.js +75 -0
  318. package/dist-public/src/swarmCommand.d.ts +10 -0
  319. package/dist-public/src/swarmCommand.js +96 -0
  320. package/dist-public/src/teamsNango.d.ts +114 -0
  321. package/dist-public/src/teamsNango.js +301 -0
  322. package/dist-public/src/tokenStore.d.ts +10 -0
  323. package/dist-public/src/tokenStore.js +77 -0
  324. package/dist-public/src/trustEnvelope.d.ts +78 -0
  325. package/dist-public/src/trustEnvelope.js +392 -0
  326. package/dist-public/src/untrustedText.d.ts +6 -0
  327. package/dist-public/src/untrustedText.js +20 -0
  328. package/dist-public/src/updateNotice.d.ts +41 -0
  329. package/dist-public/src/updateNotice.js +290 -0
  330. package/dist-public/src/vendorYaml.d.ts +1 -0
  331. package/dist-public/src/vendorYaml.js +7374 -0
  332. package/dist-public/src/workflowRunActuals.d.ts +67 -0
  333. package/dist-public/src/workflowRunActuals.js +184 -0
  334. package/dist-public/src/zendeskDiscovery.d.ts +12 -0
  335. package/dist-public/src/zendeskDiscovery.js +513 -0
  336. package/dist-public/src/zendeskNango.d.ts +131 -0
  337. package/dist-public/src/zendeskNango.js +344 -0
  338. package/dist-public/src/zoomNango.d.ts +106 -0
  339. package/dist-public/src/zoomNango.js +351 -0
  340. package/docs/CHANGELOG.md +32 -0
  341. package/docs/THIRD_PARTY_NOTICES.md +36 -0
  342. package/package.json +71 -4
  343. package/schemas/bug-capsule-receipt.schema.json +54 -0
  344. package/schemas/bug-capsule.schema.json +189 -0
  345. package/schemas/discovery-evidence-envelope.schema.json +79 -0
  346. package/schemas/discovery-processing-receipt.schema.json +71 -0
  347. package/schemas/discovery-service-contract.schema.json +189 -0
  348. package/skills/AGENTS.md +32 -0
  349. package/skills/README.md +287 -0
  350. package/skills/bug/SKILL.md +49 -0
  351. package/skills/build-preview-spec/SKILL.md +103 -0
  352. package/skills/capture-external-artifact/SKILL.md +23 -0
  353. package/skills/capture-external-artifact/agents/openai.yaml +4 -0
  354. package/skills/capture-external-artifact/references/extractor-libraries.md +27 -0
  355. package/skills/check-spec-health/SKILL.md +45 -0
  356. package/skills/check-spec-health/agents/openai.yaml +4 -0
  357. package/skills/competitive-positioning/SKILL.md +86 -0
  358. package/skills/competitive-positioning/agents/openai.yaml +4 -0
  359. package/skills/cpo-lens/SKILL.md +398 -0
  360. package/skills/cpo-lens/agents/openai.yaml +4 -0
  361. package/skills/create-prd/SKILL.md +26 -0
  362. package/skills/create-prd/agents/openai.yaml +4 -0
  363. package/skills/customer-discovery/SKILL.md +192 -0
  364. package/skills/design-system/SKILL.md +49 -0
  365. package/skills/design-system/agents/openai.yaml +4 -0
  366. package/skills/discussion-guide/SKILL.md +75 -0
  367. package/skills/discussion-guide/agents/openai.yaml +4 -0
  368. package/skills/firecrawl-research-papers/SKILL.md +96 -0
  369. package/skills/firecrawl-research-papers/agents/openai.yaml +4 -0
  370. package/skills/foo-roast/SKILL.md +325 -0
  371. package/skills/generate-gtm-brief/SKILL.md +41 -0
  372. package/skills/generate-gtm-brief/agents/openai.yaml +4 -0
  373. package/skills/generate-gtm-brief/references/gtm-brief-template.md +56 -0
  374. package/skills/gong-quotes/SKILL.md +43 -0
  375. package/skills/gong-quotes/agents/openai.yaml +4 -0
  376. package/skills/grill-me/SKILL.md +27 -0
  377. package/skills/grill-me/agents/openai.yaml +4 -0
  378. package/skills/ideate/SKILL.md +180 -0
  379. package/skills/ideate/references/family-packs.md +5 -0
  380. package/skills/initiative-tracker/SKILL.md +23 -0
  381. package/skills/initiative-tracker/agents/openai.yaml +4 -0
  382. package/skills/interop-review/SKILL.md +25 -0
  383. package/skills/interop-review/agents/openai.yaml +4 -0
  384. package/skills/interview-me/SKILL.md +404 -0
  385. package/skills/interview-me/agents/openai.yaml +4 -0
  386. package/skills/loop-library-audit/SKILL.md +123 -0
  387. package/skills/pitch/SKILL.md +110 -0
  388. package/skills/pitch/references/opportunity-assessment.md +136 -0
  389. package/skills/pitch/references/prfaq-template.md +54 -0
  390. package/skills/pmm-release-briefing/SKILL.md +27 -0
  391. package/skills/pmm-release-briefing/agents/openai.yaml +4 -0
  392. package/skills/pmm-release-briefing/references/variant-generalized.md +16 -0
  393. package/skills/positioning-messaging/SKILL.md +70 -0
  394. package/skills/positioning-messaging/agents/openai.yaml +4 -0
  395. package/skills/positioning-messaging/references/guest-insights.md +1400 -0
  396. package/skills/preview-swarm/SKILL.md +418 -0
  397. package/skills/preview-swarm/agents/openai.yaml +4 -0
  398. package/skills/preview-swarm/references/html-effectiveness-build-previews.md +168 -0
  399. package/skills/product-copywriting/SKILL.md +127 -0
  400. package/skills/product-copywriting/agents/openai.yaml +4 -0
  401. package/skills/product-copywriting/references/foo-voice.md +26 -0
  402. package/skills/product-shape-interview/SKILL.md +219 -0
  403. package/skills/product-shape-interview/agents/openai.yaml +4 -0
  404. package/skills/ready-for-release/SKILL.md +39 -0
  405. package/skills/ready-for-release/agents/openai.yaml +4 -0
  406. package/skills/redact-transcripts/SKILL.md +23 -0
  407. package/skills/redact-transcripts/agents/openai.yaml +4 -0
  408. package/skills/research-brief/SKILL.md +48 -0
  409. package/skills/research-brief/agents/openai.yaml +4 -0
  410. package/skills/research-refresh/SKILL.md +63 -0
  411. package/skills/research-refresh/references/worked-cases.md +44 -0
  412. package/skills/review-loop/SKILL.md +200 -0
  413. package/skills/review-spec/SKILL.md +32 -0
  414. package/skills/review-spec/agents/openai.yaml +4 -0
  415. package/skills/rfc-from-research/SKILL.md +42 -0
  416. package/skills/rfc-from-research/agents/openai.yaml +4 -0
  417. package/skills/rfc-from-research/references/rfc-pattern.md +69 -0
  418. package/skills/skill-registry.yaml +810 -0
  419. package/skills/spec-cleanup/SKILL.md +103 -0
  420. package/skills/spec-cleanup/agents/openai.yaml +4 -0
  421. package/skills/spec-swarm/SKILL.md +87 -0
  422. package/skills/spec-swarm/agents/openai.yaml +4 -0
  423. package/skills/spec-swarm/template/SKILL.template.md +94 -0
  424. package/skills/spec-swarm/template/personas/accessibility-inclusion.md +40 -0
  425. package/skills/spec-swarm/template/personas/ai-technical-pm.md +69 -0
  426. package/skills/spec-swarm/template/personas/analytics-engineering.md +39 -0
  427. package/skills/spec-swarm/template/personas/applied-ai-eval.md +64 -0
  428. package/skills/spec-swarm/template/personas/business-gm-pm.md +67 -0
  429. package/skills/spec-swarm/template/personas/consumer-craft-pm.md +68 -0
  430. package/skills/spec-swarm/template/personas/content-design.md +40 -0
  431. package/skills/spec-swarm/template/personas/cpo.md +42 -0
  432. package/skills/spec-swarm/template/personas/data-science.md +42 -0
  433. package/skills/spec-swarm/template/personas/developer-experience.md +65 -0
  434. package/skills/spec-swarm/template/personas/dx-product.md +70 -0
  435. package/skills/spec-swarm/template/personas/field.md +43 -0
  436. package/skills/spec-swarm/template/personas/finance-cfo.md +40 -0
  437. package/skills/spec-swarm/template/personas/growth-pm.md +67 -0
  438. package/skills/spec-swarm/template/personas/platform-pm.md +67 -0
  439. package/skills/spec-swarm/template/personas/pmm.md +43 -0
  440. package/skills/spec-swarm/template/personas/principal-product-designer.md +42 -0
  441. package/skills/spec-swarm/template/personas/product-ops-program.md +41 -0
  442. package/skills/spec-swarm/template/personas/qa-release.md +41 -0
  443. package/skills/spec-swarm/template/personas/responsible-ai-safety.md +64 -0
  444. package/skills/spec-swarm/template/personas/security-privacy-legal.md +40 -0
  445. package/skills/spec-swarm/template/personas/strategy-competitive.md +41 -0
  446. package/skills/spec-swarm/template/personas/technical-architect.md +42 -0
  447. package/skills/spec-swarm/template/personas/technical-lead.md +43 -0
  448. package/skills/spec-swarm/template/personas/user-research.md +41 -0
  449. package/skills/spec-swarm-accessibility-inclusion/SKILL.md +95 -0
  450. package/skills/spec-swarm-accessibility-inclusion/agents/openai.yaml +4 -0
  451. package/skills/spec-swarm-ai-technical-pm/SKILL.md +124 -0
  452. package/skills/spec-swarm-analytics-engineering/SKILL.md +94 -0
  453. package/skills/spec-swarm-analytics-engineering/agents/openai.yaml +4 -0
  454. package/skills/spec-swarm-applied-ai-eval/SKILL.md +120 -0
  455. package/skills/spec-swarm-business-gm-pm/SKILL.md +122 -0
  456. package/skills/spec-swarm-consumer-craft-pm/SKILL.md +122 -0
  457. package/skills/spec-swarm-content-design/SKILL.md +95 -0
  458. package/skills/spec-swarm-content-design/agents/openai.yaml +4 -0
  459. package/skills/spec-swarm-cpo/SKILL.md +94 -0
  460. package/skills/spec-swarm-cpo/agents/openai.yaml +4 -0
  461. package/skills/spec-swarm-data-science/SKILL.md +95 -0
  462. package/skills/spec-swarm-data-science/agents/openai.yaml +4 -0
  463. package/skills/spec-swarm-developer-experience/SKILL.md +121 -0
  464. package/skills/spec-swarm-dx-product/SKILL.md +126 -0
  465. package/skills/spec-swarm-field/SKILL.md +96 -0
  466. package/skills/spec-swarm-field/agents/openai.yaml +4 -0
  467. package/skills/spec-swarm-finance-cfo/SKILL.md +95 -0
  468. package/skills/spec-swarm-finance-cfo/agents/openai.yaml +4 -0
  469. package/skills/spec-swarm-growth-pm/SKILL.md +122 -0
  470. package/skills/spec-swarm-platform-pm/SKILL.md +122 -0
  471. package/skills/spec-swarm-pmm/SKILL.md +96 -0
  472. package/skills/spec-swarm-pmm/agents/openai.yaml +4 -0
  473. package/skills/spec-swarm-principal-product-designer/SKILL.md +95 -0
  474. package/skills/spec-swarm-principal-product-designer/agents/openai.yaml +4 -0
  475. package/skills/spec-swarm-product-ops-program/SKILL.md +96 -0
  476. package/skills/spec-swarm-product-ops-program/agents/openai.yaml +4 -0
  477. package/skills/spec-swarm-qa-release/SKILL.md +96 -0
  478. package/skills/spec-swarm-qa-release/agents/openai.yaml +4 -0
  479. package/skills/spec-swarm-responsible-ai-safety/SKILL.md +120 -0
  480. package/skills/spec-swarm-security-privacy-legal/SKILL.md +95 -0
  481. package/skills/spec-swarm-security-privacy-legal/agents/openai.yaml +4 -0
  482. package/skills/spec-swarm-strategy-competitive/SKILL.md +96 -0
  483. package/skills/spec-swarm-strategy-competitive/agents/openai.yaml +4 -0
  484. package/skills/spec-swarm-technical-architect/SKILL.md +95 -0
  485. package/skills/spec-swarm-technical-architect/agents/openai.yaml +4 -0
  486. package/skills/spec-swarm-technical-lead/SKILL.md +96 -0
  487. package/skills/spec-swarm-technical-lead/agents/openai.yaml +4 -0
  488. package/skills/spec-swarm-user-research/SKILL.md +95 -0
  489. package/skills/spec-swarm-user-research/agents/openai.yaml +4 -0
  490. package/skills/strategy-check/SKILL.md +170 -0
  491. package/skills/strategy-check/agents/openai.yaml +4 -0
  492. package/skills/study-digest/SKILL.md +41 -0
  493. package/skills/synthetic-customer/SKILL.md +68 -0
  494. package/skills/update-cli-spec/SKILL.md +69 -0
  495. package/skills/update-cli-spec/agents/openai.yaml +4 -0
  496. package/skills/voc-researcher/SKILL.md +45 -0
  497. package/skills/voc-researcher/agents/openai.yaml +4 -0
  498. package/skills-lock.json +35 -0
@@ -0,0 +1,303 @@
1
+ // Portable intent-verification verdict (intent-verification-verdict-v0).
2
+ //
3
+ // `foo asp verify` is the third leg of the packet read-side, complementing the
4
+ // two that already exist:
5
+ // - `asp validate` — is the packet well-formed? (structure & identity)
6
+ // - `asp reconcile` — did we touch only files mapped to an agreed task?
7
+ // - `asp verify` — did we actually ship what we intended, with proof?
8
+ //
9
+ // The question this answers is the one Fiona Fung names as the new bottleneck
10
+ // once coding is cheap: "how do you know the experience you shipped is what you
11
+ // intended?" foo already carries the answer in the packet — every task's
12
+ // `done_when` checks each hold `{ id, text, done, proof }`. Verify reads those
13
+ // and renders a verdict over productfoo's signature distinction: done is a *claim*
14
+ // (🟡), proof is a *receipt* (✅). A task marked done whose acceptance checks
15
+ // are not actually met is *drift* (⚠️) — a false completion claim, the one case
16
+ // worth escalating.
17
+ //
18
+ // Cross-agent by construction: verify reads only packet artifacts (spec.md,
19
+ // tasks.yaml, events.jsonl) and emits a runtime-neutral verdict — JSON for
20
+ // machines, glyph-decorated text for humans. The build can happen in one
21
+ // coding harness and the verification in another; the verdict
22
+ // lives in the portable packet, never in a vendor's session. With `--record`
23
+ // the verdict is appended to events.jsonl as a `com.foo.intent.verified` event,
24
+ // so the proof becomes part of the same append-only ledger every runtime reads.
25
+ import { existsSync, readFileSync } from "node:fs";
26
+ import path from "node:path";
27
+ import { parse as parseYaml } from "./vendorYaml.js";
28
+ import { STATUS_GLYPHS, withGlyph } from "./statusGlyphs.js";
29
+ import { countByClass } from "./severityClass.js";
30
+ import { requirementIds } from "./specSections.js";
31
+ export const VERIFY_SCHEMA_VERSION = "1.0";
32
+ // The event type emitted by `--record`. Deliberately not in the validator's
33
+ // AGENT_EVENT_TYPES set, so a verdict event needs no agent-identity ceremony and
34
+ // any runtime (human or agent) can write one.
35
+ export const VERIFY_EVENT_TYPE = "com.foo.intent.verified";
36
+ function asRecord(value) {
37
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
38
+ }
39
+ function str(value) {
40
+ return typeof value === "string" && value.trim() !== "" ? value.trim() : null;
41
+ }
42
+ // The intent is the contract we verify against: the prose under `## Intent`.
43
+ // We surface only the first paragraph so the verdict header shows what was
44
+ // promised without reprinting the whole section.
45
+ function parseIntent(specText) {
46
+ const lines = specText.split(/\r?\n/);
47
+ let inSection = false;
48
+ const para = [];
49
+ for (const line of lines) {
50
+ if (/^##\s+/.test(line)) {
51
+ if (inSection)
52
+ break;
53
+ inSection = /^##\s+Intent\s*$/i.test(line);
54
+ continue;
55
+ }
56
+ if (!inSection)
57
+ continue;
58
+ if (line.trim() === "") {
59
+ if (para.length > 0)
60
+ break;
61
+ continue;
62
+ }
63
+ if (line.trim().startsWith("<!--"))
64
+ continue;
65
+ para.push(line.trim());
66
+ }
67
+ return para.length > 0 ? para.join(" ") : null;
68
+ }
69
+ // A done_when check is proven only when it is both marked done AND carries a
70
+ // non-empty proof string — done is the claim, proof is the receipt.
71
+ function checkVerdict(raw) {
72
+ const dw = asRecord(raw);
73
+ const id = str(dw.id) ?? "C-?";
74
+ const text = str(dw.text) ?? "";
75
+ const proof = str(dw.proof);
76
+ const done = dw.done === true;
77
+ const state = !done ? "open" : proof ? "proven" : "claimed";
78
+ return { id, text, state, proof };
79
+ }
80
+ function taskVerdictFrom(status, checks) {
81
+ // A done task whose acceptance is not actually met is a false completion —
82
+ // the dangerous case, surfaced as drift regardless of proof on other checks.
83
+ if (status === "done") {
84
+ if (checks.some((c) => c.state === "open"))
85
+ return "drift";
86
+ if (checks.some((c) => c.state === "claimed"))
87
+ return "claimed";
88
+ return "proven";
89
+ }
90
+ // Not-done tasks are simply unfinished work, never drift.
91
+ return "incomplete";
92
+ }
93
+ // Worst-wins precedence for the single headline verdict. Drift (a false "done")
94
+ // outranks everything; an unfinished packet is "incomplete"; a fully-done but
95
+ // partly-unproven packet is "claimed"; all-done-and-proven is "proven".
96
+ const VERDICT_RANK = { drift: 0, incomplete: 1, claimed: 2, proven: 3 };
97
+ function worst(a, b) {
98
+ return VERDICT_RANK[a] <= VERDICT_RANK[b] ? a : b;
99
+ }
100
+ export function verifyPacket(options) {
101
+ const tasksPath = path.join(options.packetDir, "tasks.yaml");
102
+ const specPath = path.join(options.packetDir, "spec.md");
103
+ if (!existsSync(tasksPath))
104
+ throw new Error(`tasks.yaml missing in ${options.packetDir}`);
105
+ if (!existsSync(specPath))
106
+ throw new Error(`spec.md missing in ${options.packetDir}`);
107
+ const doc = asRecord(parseYaml(readFileSync(tasksPath, "utf8")));
108
+ const specText = readFileSync(specPath, "utf8");
109
+ const rawTasks = Array.isArray(doc.tasks) ? doc.tasks : [];
110
+ const tasks = { total: 0, proven: 0, claimed: 0, incomplete: 0, drift: 0, dropped: 0 };
111
+ const checks = { total: 0, proven: 0, claimed: 0, open: 0 };
112
+ const findings = [];
113
+ const taskVerdicts = [];
114
+ // requirement id -> the worst verdict of any non-rejected task that refs it.
115
+ const reqVerdict = new Map();
116
+ const reqTasks = new Map();
117
+ for (const raw of rawTasks) {
118
+ const t = asRecord(raw);
119
+ const id = str(t.id);
120
+ if (!id)
121
+ continue;
122
+ const status = str(t.status) ?? "todo";
123
+ const title = str(t.title) ?? "";
124
+ const agreement = str(t.agreement) ?? "agreed";
125
+ // Dropped and rejected work is intentionally not part of the shipped intent;
126
+ // count dropped for visibility but exclude it from the verdict math.
127
+ if (status === "dropped") {
128
+ tasks.total += 1;
129
+ tasks.dropped += 1;
130
+ continue;
131
+ }
132
+ const checkVerdicts = (Array.isArray(t.done_when) ? t.done_when : []).map(checkVerdict);
133
+ for (const c of checkVerdicts) {
134
+ checks.total += 1;
135
+ checks[c.state] += 1;
136
+ }
137
+ const checksProven = checkVerdicts.filter((c) => c.state === "proven").length;
138
+ const verdict = taskVerdictFrom(status, checkVerdicts);
139
+ tasks.total += 1;
140
+ tasks[verdict] += 1;
141
+ if (verdict === "drift") {
142
+ const open = checkVerdicts.filter((c) => c.state === "open").map((c) => c.id);
143
+ findings.push({
144
+ kind: "false_completion",
145
+ severity: "high",
146
+ // bad: a false "done" cannot be trusted until the check is actually met.
147
+ class: "bad",
148
+ subject: `task:${id}`,
149
+ summary: `Task ${id} is marked done, but acceptance check(s) ${open.join(", ")} are not met. A "done" without met acceptance is a false completion claim.`,
150
+ suggested_actions: [
151
+ "satisfy the open done_when check(s) and add proof",
152
+ "move the task back to doing until acceptance is met",
153
+ "amend the done_when checks if they no longer reflect intent",
154
+ ],
155
+ requires_human: true,
156
+ });
157
+ }
158
+ else if (verdict === "claimed") {
159
+ const unproven = checkVerdicts.filter((c) => c.state === "claimed").map((c) => c.id);
160
+ findings.push({
161
+ kind: "unproven_claim",
162
+ severity: "medium",
163
+ // sad: recoverable — the work is done, it just needs a proof receipt.
164
+ class: "sad",
165
+ subject: `task:${id}`,
166
+ summary: `Task ${id} is done but check(s) ${unproven.join(", ")} carry no proof. Done is a claim; proof is the receipt.`,
167
+ suggested_actions: [
168
+ "add a proof reference (test, run, link) to each unproven done_when check",
169
+ ],
170
+ requires_human: false,
171
+ });
172
+ }
173
+ taskVerdicts.push({
174
+ id,
175
+ title,
176
+ status,
177
+ agreement,
178
+ verdict,
179
+ checks_total: checkVerdicts.length,
180
+ checks_proven: checksProven,
181
+ checks: checkVerdicts,
182
+ });
183
+ if (agreement !== "rejected") {
184
+ const refs = Array.isArray(t.refs) ? t.refs.map(str).filter((x) => x !== null) : [];
185
+ for (const ref of refs) {
186
+ reqVerdict.set(ref, worst(reqVerdict.get(ref) ?? "proven", verdict));
187
+ reqTasks.set(ref, [...(reqTasks.get(ref) ?? []), id]);
188
+ }
189
+ }
190
+ }
191
+ // Requirement coverage: every requirement declared in spec.md, judged by the
192
+ // worst verdict of the tasks that claim it. An unreferenced requirement has no
193
+ // proving task, so it is unproven by definition.
194
+ const specReqs = requirementIds(specText);
195
+ const requirementVerdicts = specReqs.map((rid) => {
196
+ const v = reqVerdict.get(rid) ?? "incomplete";
197
+ const taskIds = reqTasks.get(rid) ?? [];
198
+ if (v !== "proven") {
199
+ findings.push({
200
+ kind: "uncovered_requirement",
201
+ severity: taskIds.length === 0 ? "medium" : "low",
202
+ // bad when nothing references it (structurally unprovable — needs a spec
203
+ // or task change); sad when a referencing task just is not done yet.
204
+ class: taskIds.length === 0 ? "bad" : "sad",
205
+ subject: `requirement:${rid}`,
206
+ summary: taskIds.length === 0
207
+ ? `Requirement ${rid} is declared in spec.md but no task references it — it cannot be proven.`
208
+ : `Requirement ${rid} is referenced by ${taskIds.join(", ")} but is not yet proven (${v}).`,
209
+ suggested_actions: taskIds.length === 0
210
+ ? ["add a task whose refs include this requirement, or drop the requirement"]
211
+ : ["finish and prove the referencing task(s)"],
212
+ requires_human: taskIds.length === 0,
213
+ });
214
+ }
215
+ return { id: rid, verdict: v, task_ids: taskIds };
216
+ });
217
+ const reqProven = requirementVerdicts.filter((r) => r.verdict === "proven").length;
218
+ // Headline verdict: worst over every counted task. An empty packet (no
219
+ // non-dropped tasks) is "incomplete" — there is nothing proven yet.
220
+ const counted = tasks.total - tasks.dropped;
221
+ let verdict = counted === 0 ? "incomplete" : "proven";
222
+ for (const tv of taskVerdicts)
223
+ verdict = worst(verdict, tv.verdict);
224
+ const summary = (() => {
225
+ switch (verdict) {
226
+ case "drift":
227
+ return `${tasks.drift} task(s) claim done without meeting acceptance — false completion. Resolve before trusting this packet.`;
228
+ case "incomplete":
229
+ return `Work is unproven: ${tasks.incomplete} task(s) not yet done. Nothing false, just unfinished.`;
230
+ case "claimed":
231
+ return `All work is done but ${tasks.claimed} task(s) lack proof. Add receipts to reach proven.`;
232
+ case "proven":
233
+ return `Every counted task is done and proven (${checks.proven}/${checks.total} checks). Shipped matches intent.`;
234
+ }
235
+ })();
236
+ return {
237
+ schema_version: VERIFY_SCHEMA_VERSION,
238
+ spec_id: str(doc.spec_id),
239
+ packet: path.relative(options.root, options.packetDir).split(path.sep).join("/"),
240
+ intent: parseIntent(specText),
241
+ verdict,
242
+ tasks,
243
+ checks,
244
+ requirements: { total: specReqs.length, proven: reqProven, unproven: specReqs.length - reqProven },
245
+ findings_by_class: countByClass(findings.map((f) => f.class)),
246
+ task_verdicts: taskVerdicts,
247
+ requirement_verdicts: requirementVerdicts,
248
+ findings,
249
+ summary,
250
+ };
251
+ }
252
+ // Map a verdict to the locked status-glyph state (foo-status-glyphs-v0). The
253
+ // word always travels with the glyph, so the caller passes both through
254
+ // withGlyph; here we only choose the FooState.
255
+ export function verdictGlyphState(verdict) {
256
+ switch (verdict) {
257
+ case "proven":
258
+ return "proven";
259
+ case "claimed":
260
+ return "claimed";
261
+ case "incomplete":
262
+ return "todo";
263
+ case "drift":
264
+ return "drift";
265
+ }
266
+ }
267
+ function verdictDisplayLabel(verdict) {
268
+ return verdict === "claimed" ? STATUS_GLYPHS.claimed.label : verdict;
269
+ }
270
+ // Human view. Glyphs ride the human-only gate (glyphsEnabled): the caller passes
271
+ // glyphsOn=false for --json, NO_COLOR, and piped/non-TTY output, so no glyph ever
272
+ // reaches machine readers.
273
+ export function renderVerifyReport(report, glyphsOn) {
274
+ const lines = [];
275
+ const headline = `${verdictDisplayLabel(report.verdict).toUpperCase()} — ${report.summary}`;
276
+ lines.push(withGlyph(verdictGlyphState(report.verdict), `verify ${report.packet}: ${headline}`, glyphsOn));
277
+ if (report.intent)
278
+ lines.push(` Intent: ${report.intent}`);
279
+ lines.push(` Tasks: ${report.tasks.proven} proven · ${report.tasks.claimed} ${STATUS_GLYPHS.claimed.label} · ${report.tasks.incomplete} incomplete · ${report.tasks.drift} drift` +
280
+ (report.tasks.dropped ? ` · ${report.tasks.dropped} dropped` : ""));
281
+ lines.push(` Checks: ${report.checks.proven}/${report.checks.total} proven (${report.checks.claimed} ${STATUS_GLYPHS.claimed.label}, ${report.checks.open} open)`);
282
+ if (report.requirements.total > 0) {
283
+ lines.push(` Requirements: ${report.requirements.proven}/${report.requirements.total} proven`);
284
+ }
285
+ const interesting = report.task_verdicts.filter((t) => t.verdict !== "proven");
286
+ if (interesting.length > 0) {
287
+ lines.push("");
288
+ lines.push(" Unproven tasks:");
289
+ for (const t of interesting) {
290
+ lines.push(` ${withGlyph(verdictGlyphState(t.verdict), `${verdictDisplayLabel(t.verdict).padEnd(20)} ${t.id}`, glyphsOn)} ${t.title} (${t.checks_proven}/${t.checks_total} checks proven)`);
291
+ }
292
+ }
293
+ if (report.findings.length > 0) {
294
+ lines.push("");
295
+ lines.push(` Findings (${report.findings.length}): ${report.findings_by_class.bad} bad (unrecoverable) · ${report.findings_by_class.sad} sad (recoverable)`);
296
+ // bad before sad: fix-now ahead of clean-up.
297
+ const ordered = [...report.findings].sort((a, b) => (a.class === b.class ? 0 : a.class === "bad" ? -1 : 1));
298
+ for (const f of ordered) {
299
+ lines.push(` [${f.class}/${f.severity}] ${f.summary}`);
300
+ }
301
+ }
302
+ return `${lines.join("\n")}\n`;
303
+ }
@@ -0,0 +1,52 @@
1
+ export type JsonObject = Record<string, unknown>;
2
+ export declare function findSecretLeak(text: string): string | null;
3
+ export type Actor = JsonObject & {
4
+ type: string;
5
+ id: string;
6
+ };
7
+ export declare function resolveActor(overrides?: {
8
+ type?: string;
9
+ id?: string;
10
+ }): Actor;
11
+ export type AppendEventOptions = {
12
+ packetDir: string;
13
+ type: string;
14
+ subject?: string;
15
+ data?: JsonObject;
16
+ actor?: {
17
+ type?: string;
18
+ id?: string;
19
+ };
20
+ now?: Date;
21
+ };
22
+ export declare function appendEvent(options: AppendEventOptions): JsonObject;
23
+ export type UpdateTaskOptions = {
24
+ packetDir: string;
25
+ taskId: string;
26
+ status: string;
27
+ proof?: string;
28
+ summary?: string;
29
+ reason?: string;
30
+ needs?: string[];
31
+ actor?: {
32
+ type?: string;
33
+ id?: string;
34
+ };
35
+ now?: Date;
36
+ };
37
+ export declare function updateTask(options: UpdateTaskOptions): {
38
+ event: JsonObject;
39
+ from: string;
40
+ to: string;
41
+ };
42
+ export type InitOptions = {
43
+ root: string;
44
+ name: string;
45
+ now?: Date;
46
+ };
47
+ export type InitResult = {
48
+ packetDir: string;
49
+ specId: string;
50
+ relSpecRef: string;
51
+ };
52
+ export declare function initPacket(options: InitOptions): InitResult;