agentplugged 1.3.0 → 1.4.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 (236) hide show
  1. package/README.md +3 -2
  2. package/dist/agent-commands.js +25473 -24861
  3. package/dist/bin.js +1 -2
  4. package/dist/cli.js +1 -2
  5. package/dist/dist.js +12205 -0
  6. package/dist/esm.js +8 -16
  7. package/dist/forge-follow.js +5 -6
  8. package/dist/hash.js +9 -12083
  9. package/dist/helpers.js +257 -514
  10. package/dist/launcher-env.js +1 -2
  11. package/dist/launcher.js +3 -4
  12. package/dist/libsodium-wrappers.js +2 -4
  13. package/dist/libsodium-wrappers2.js +2 -4
  14. package/dist/main.js +791 -152
  15. package/dist/method/agents/alex/SKILL.md +13 -29
  16. package/dist/method/agents/alex/agent.yaml +1 -1
  17. package/dist/method/agents/basile/SKILL.md +44 -0
  18. package/dist/method/agents/basile/agent.yaml +69 -0
  19. package/dist/method/agents/chloe/SKILL.md +12 -25
  20. package/dist/method/agents/chloe/agent.yaml +3 -3
  21. package/dist/method/agents/ethan/SKILL.md +8 -9
  22. package/dist/method/agents/ethan/agent.yaml +9 -8
  23. package/dist/method/agents/hugo/SKILL.md +8 -8
  24. package/dist/method/agents/hugo/agent.yaml +9 -8
  25. package/dist/method/agents/iris/SKILL.md +4 -10
  26. package/dist/method/agents/izzy/SKILL.md +68 -91
  27. package/dist/method/agents/izzy/agent.yaml +8 -15
  28. package/dist/method/agents/jade/SKILL.md +7 -9
  29. package/dist/method/agents/jade/agent.yaml +9 -8
  30. package/dist/method/agents/julien/SKILL.md +38 -58
  31. package/dist/method/agents/lina/SKILL.md +7 -9
  32. package/dist/method/agents/lina/agent.yaml +9 -8
  33. package/dist/method/agents/lou/SKILL.md +4 -11
  34. package/dist/method/agents/lou/agent.yaml +2 -2
  35. package/dist/method/agents/maya/SKILL.md +12 -19
  36. package/dist/method/agents/maya/agent.yaml +1 -3
  37. package/dist/method/agents/milo/SKILL.md +21 -32
  38. package/dist/method/agents/noah/SKILL.md +109 -63
  39. package/dist/method/agents/noah/agent.yaml +14 -31
  40. package/dist/method/agents/noah/references/decisions.md +61 -121
  41. package/dist/method/agents/noah/references/environment.md +30 -70
  42. package/dist/method/agents/noah/references/facts.md +22 -11
  43. package/dist/method/agents/noah/references/journey.md +26 -78
  44. package/dist/method/agents/noah/references/team.md +63 -190
  45. package/dist/method/agents/omar/SKILL.md +12 -28
  46. package/dist/method/agents/omar/agent.yaml +1 -1
  47. package/dist/method/agents/quentin/SKILL.md +7 -15
  48. package/dist/method/agents/quentin/agent.yaml +4 -2
  49. package/dist/method/agents/sam/SKILL.md +6 -8
  50. package/dist/method/agents/sam/agent.yaml +9 -8
  51. package/dist/method/agents/stella/SKILL.md +6 -14
  52. package/dist/method/agents/stella/agent.yaml +1 -1
  53. package/dist/method/agents/tess/SKILL.md +7 -14
  54. package/dist/method/agents/tess/agent.yaml +2 -2
  55. package/dist/method/agents/zoe/SKILL.md +9 -21
  56. package/dist/method/doctor.yaml +23 -4
  57. package/dist/method/models.yaml +12 -0
  58. package/dist/method/skills/acceptance-qa/SKILL.md +1 -1
  59. package/dist/method/skills/acceptance-qa/references/run.md +24 -32
  60. package/dist/method/skills/acceptance-qa/references/scenarios.md +16 -19
  61. package/dist/method/skills/acceptance-qa/references/verdicts.md +10 -16
  62. package/dist/method/skills/api-e2e-tests/SKILL.md +46 -46
  63. package/dist/method/skills/audit-pillars/SKILL.md +12 -10
  64. package/dist/method/skills/audit-pillars/references/pillars.md +40 -0
  65. package/dist/method/skills/chain-stories/SKILL.md +5 -4
  66. package/dist/method/skills/chain-stories/references/merge-order.md +23 -0
  67. package/dist/method/skills/check-readiness/SKILL.md +1 -1
  68. package/dist/method/skills/check-requirements/SKILL.md +37 -72
  69. package/dist/method/skills/check-requirements/references/engine-proofs.md +16 -23
  70. package/dist/method/skills/check-requirements/references/proofs-and-gaps.md +22 -37
  71. package/dist/method/skills/critique-deliverable/SKILL.md +3 -3
  72. package/dist/method/skills/critique-deliverable/references/choose.md +12 -21
  73. package/dist/method/skills/critique-deliverable/references/format.md +14 -20
  74. package/dist/method/skills/critique-deliverable/references/gestures.md +14 -21
  75. package/dist/method/skills/critique-deliverable/references/judgment.md +4 -9
  76. package/dist/method/skills/critique-deliverable/references/methods.md +21 -0
  77. package/dist/method/skills/critique-deliverable/references/reconcile.md +6 -11
  78. package/dist/method/skills/deep-research/SKILL.md +16 -24
  79. package/dist/method/skills/deep-research/references/candidates.md +13 -25
  80. package/dist/method/skills/deep-research/references/external.md +15 -34
  81. package/dist/method/skills/deep-research/references/page-format.md +16 -42
  82. package/dist/method/skills/deep-research/references/types.md +16 -27
  83. package/dist/method/skills/develop-story/SKILL.md +56 -189
  84. package/dist/method/skills/develop-story/references/acceptance-tests.md +18 -71
  85. package/dist/method/skills/develop-story/references/quick-lane.md +20 -0
  86. package/dist/method/skills/diagnose-bug/SKILL.md +42 -53
  87. package/dist/method/skills/diagnose-bug/references/hypotheses.md +1 -2
  88. package/dist/method/skills/generate-knowledge-base/SKILL.md +57 -226
  89. package/dist/method/skills/generate-knowledge-base/assets/index-template.md +6 -15
  90. package/dist/method/skills/generate-knowledge-base/assets/page-template.md +11 -24
  91. package/dist/method/skills/generate-knowledge-base/references/living-docs.md +25 -64
  92. package/dist/method/skills/generate-knowledge-base/references/reuse-map.md +9 -18
  93. package/dist/method/skills/ideation/SKILL.md +16 -23
  94. package/dist/method/skills/ideation/references/close.md +18 -14
  95. package/dist/method/skills/ideation/references/converge.md +11 -21
  96. package/dist/method/skills/ideation/references/stances.md +13 -17
  97. package/dist/method/skills/ideation/references/techniques.md +20 -0
  98. package/dist/method/skills/improve-code/SKILL.md +42 -54
  99. package/dist/method/skills/pitch/SKILL.md +16 -19
  100. package/dist/method/skills/pitch/references/deck.md +15 -18
  101. package/dist/method/skills/pitch/references/design-implementation.md +13 -21
  102. package/dist/method/skills/pitch/references/design.md +21 -0
  103. package/dist/method/skills/pitch/references/story.md +13 -18
  104. package/dist/method/skills/plan-sprint/SKILL.md +49 -151
  105. package/dist/method/skills/resolve-merge-conflict/SKILL.md +40 -65
  106. package/dist/method/skills/review-after-launch/SKILL.md +56 -0
  107. package/dist/method/skills/review-story/SKILL.md +44 -72
  108. package/dist/method/skills/review-story/references/amend-story.md +8 -13
  109. package/dist/method/skills/review-story/references/export.md +7 -17
  110. package/dist/method/skills/review-story/references/free-review.md +9 -20
  111. package/dist/method/skills/review-story/references/judge.md +25 -37
  112. package/dist/method/skills/review-story/references/tests.md +29 -0
  113. package/dist/method/skills/round-table/SKILL.md +6 -6
  114. package/dist/method/skills/round-table/references/closing.md +18 -0
  115. package/dist/method/skills/round-table/references/guests.md +15 -15
  116. package/dist/method/skills/round-table/references/rooms.md +15 -28
  117. package/dist/method/skills/round-table/references/table.md +19 -0
  118. package/dist/method/skills/run-acceptance/SKILL.md +58 -0
  119. package/dist/method/skills/run-acceptance/references/template.md +39 -0
  120. package/dist/method/skills/run-retrospective/SKILL.md +50 -189
  121. package/dist/method/skills/security-review-architecture/SKILL.md +47 -109
  122. package/dist/method/skills/security-review-architecture/references/spec-review.md +27 -38
  123. package/dist/method/skills/setup-ci/SKILL.md +45 -109
  124. package/dist/method/skills/split-into-stories/SKILL.md +59 -192
  125. package/dist/method/skills/split-into-stories/assets/story.md.tmpl +15 -4
  126. package/dist/method/skills/strategy/SKILL.md +21 -25
  127. package/dist/method/skills/strategy/references/costs.md +12 -26
  128. package/dist/method/skills/strategy/references/gestures.md +12 -21
  129. package/dist/method/skills/strategy/references/innovate.md +19 -37
  130. package/dist/method/skills/strategy/references/solve.md +19 -32
  131. package/dist/method/skills/test-idea/SKILL.md +5 -5
  132. package/dist/method/skills/test-idea/assets/prfaq-template.md +1 -1
  133. package/dist/method/skills/test-idea/references/faq.md +12 -29
  134. package/dist/method/skills/test-idea/references/forge.md +19 -30
  135. package/dist/method/skills/test-idea/references/personas.md +16 -19
  136. package/dist/method/skills/test-idea/references/prfaq.md +31 -31
  137. package/dist/method/skills/workshop/SKILL.md +10 -16
  138. package/dist/method/skills/workshop/references/create.md +28 -45
  139. package/dist/method/skills/workshop/references/customize.md +17 -42
  140. package/dist/method/skills/workshop/references/evaluate.md +11 -42
  141. package/dist/method/skills/workshop/references/rules.md +17 -26
  142. package/dist/method/skills/write-architecture/SKILL.md +62 -220
  143. package/dist/method/skills/write-architecture/references/guard.md +11 -28
  144. package/dist/method/skills/write-architecture/references/self-check.md +22 -38
  145. package/dist/method/skills/write-brand/SKILL.md +2 -2
  146. package/dist/method/skills/write-brand/references/identity.md +21 -22
  147. package/dist/method/skills/write-brand/references/platform.md +13 -20
  148. package/dist/method/skills/write-brand/references/rules.md +16 -22
  149. package/dist/method/skills/write-brief/SKILL.md +56 -149
  150. package/dist/method/skills/write-brief/references/brief-checklist.md +18 -30
  151. package/dist/method/skills/write-content/SKILL.md +53 -210
  152. package/dist/method/skills/write-content/references/content-checklist.md +32 -50
  153. package/dist/method/skills/write-positioning/SKILL.md +53 -197
  154. package/dist/method/skills/write-positioning/references/positioning-checklist.md +15 -41
  155. package/dist/method/skills/write-positioning/references/seo-checklist.md +26 -51
  156. package/dist/method/skills/write-prd/SKILL.md +52 -179
  157. package/dist/method/skills/write-prd/references/prd-checklist.md +25 -54
  158. package/dist/method/skills/write-sales/SKILL.md +48 -212
  159. package/dist/method/skills/write-sales/references/before-you-send.md +21 -49
  160. package/dist/method/skills/write-sales/references/sales-checklist.md +19 -69
  161. package/dist/method/skills/write-spec/references/spec-guide.md +20 -23
  162. package/dist/method/skills/write-ux-spec/SKILL.md +57 -168
  163. package/dist/method/skills/write-ux-spec/references/accessibility-check.md +13 -72
  164. package/dist/method/skills/write-ux-spec/references/mockups.md +6 -68
  165. package/dist/method/skills/write-ux-spec/references/tokens-and-sketches.md +8 -81
  166. package/dist/method/skills/write-ux-spec/references/ux-checklist.md +12 -67
  167. package/dist/product-root.js +353 -250
  168. package/dist/project-command.js +1508 -0
  169. package/dist/project-command2.js +1 -0
  170. package/dist/read-command.js +19 -0
  171. package/dist/rolldown-runtime.js +1 -2
  172. package/dist/sheet-command.js +57 -0
  173. package/dist/webauthn-verify.js +4 -5
  174. package/package.json +11 -10
  175. package/dist/method/agents/noah/references/conduct.md +0 -102
  176. package/dist/method/skills/api-e2e-tests/references/frameworks.md +0 -58
  177. package/dist/method/skills/api-e2e-tests/references/generate.md +0 -67
  178. package/dist/method/skills/audit-pillars/references/accessibility.md +0 -13
  179. package/dist/method/skills/audit-pillars/references/architecture.md +0 -13
  180. package/dist/method/skills/audit-pillars/references/dependencies.md +0 -13
  181. package/dist/method/skills/audit-pillars/references/format.md +0 -20
  182. package/dist/method/skills/audit-pillars/references/interface.md +0 -13
  183. package/dist/method/skills/audit-pillars/references/method.md +0 -33
  184. package/dist/method/skills/audit-pillars/references/performance.md +0 -17
  185. package/dist/method/skills/audit-pillars/references/quality.md +0 -11
  186. package/dist/method/skills/audit-pillars/references/security.md +0 -13
  187. package/dist/method/skills/audit-pillars/references/tests.md +0 -17
  188. package/dist/method/skills/critique-deliverable/references/assumption-audit.md +0 -11
  189. package/dist/method/skills/critique-deliverable/references/compare-existing.md +0 -13
  190. package/dist/method/skills/critique-deliverable/references/devils-advocate.md +0 -13
  191. package/dist/method/skills/critique-deliverable/references/divergence.md +0 -15
  192. package/dist/method/skills/critique-deliverable/references/domain-expert.md +0 -14
  193. package/dist/method/skills/critique-deliverable/references/extreme-user.md +0 -13
  194. package/dist/method/skills/critique-deliverable/references/failure-modes.md +0 -13
  195. package/dist/method/skills/critique-deliverable/references/first-principles.md +0 -12
  196. package/dist/method/skills/critique-deliverable/references/inversion.md +0 -13
  197. package/dist/method/skills/critique-deliverable/references/pre-mortem.md +0 -12
  198. package/dist/method/skills/critique-deliverable/references/red-team.md +0 -12
  199. package/dist/method/skills/critique-deliverable/references/reframe.md +0 -12
  200. package/dist/method/skills/critique-deliverable/references/second-order.md +0 -12
  201. package/dist/method/skills/critique-deliverable/references/socratic.md +0 -15
  202. package/dist/method/skills/critique-deliverable/references/steelman.md +0 -13
  203. package/dist/method/skills/critique-deliverable/references/subtraction.md +0 -12
  204. package/dist/method/skills/develop-story/references/self-check.md +0 -46
  205. package/dist/method/skills/generate-knowledge-base/references/kb-checklist.md +0 -49
  206. package/dist/method/skills/generate-knowledge-base/references/repository-scan.md +0 -48
  207. package/dist/method/skills/ideation/references/choose.md +0 -21
  208. package/dist/method/skills/ideation/references/gestures.md +0 -15
  209. package/dist/method/skills/ideation/references/techniques-borrowed.md +0 -8
  210. package/dist/method/skills/ideation/references/techniques-deep.md +0 -12
  211. package/dist/method/skills/ideation/references/techniques-frames.md +0 -12
  212. package/dist/method/skills/ideation/references/techniques-futures.md +0 -8
  213. package/dist/method/skills/ideation/references/techniques-limits.md +0 -9
  214. package/dist/method/skills/ideation/references/techniques-people.md +0 -7
  215. package/dist/method/skills/ideation/references/techniques-sparks.md +0 -10
  216. package/dist/method/skills/ideation/references/techniques-together.md +0 -11
  217. package/dist/method/skills/order-merges/SKILL.md +0 -71
  218. package/dist/method/skills/pitch/references/deck-types.md +0 -17
  219. package/dist/method/skills/pitch/references/design-methods.md +0 -45
  220. package/dist/method/skills/pitch/references/design-thinking.md +0 -28
  221. package/dist/method/skills/pitch/references/story-frameworks.md +0 -39
  222. package/dist/method/skills/quick-lane/SKILL.md +0 -143
  223. package/dist/method/skills/review-tests/SKILL.md +0 -32
  224. package/dist/method/skills/review-tests/references/check.md +0 -25
  225. package/dist/method/skills/review-tests/references/grid.md +0 -27
  226. package/dist/method/skills/round-table/references/cast.md +0 -14
  227. package/dist/method/skills/round-table/references/gestures.md +0 -24
  228. package/dist/method/skills/round-table/references/independence.md +0 -21
  229. package/dist/method/skills/round-table/references/three-views.md +0 -17
  230. package/dist/method/skills/round-table/references/turns.md +0 -19
  231. package/dist/method/skills/strategy/references/innovate-frameworks.md +0 -48
  232. package/dist/method/skills/strategy/references/solve-methods.md +0 -45
  233. package/dist/method/skills/test-idea/references/bets.md +0 -14
  234. package/dist/method/skills/test-idea/references/concept.md +0 -24
  235. package/dist/method/skills/test-idea/references/verdict.md +0 -26
  236. package/dist/method/skills/workshop/references/analyze.md +0 -36
@@ -1,5 +1,7 @@
1
- import { $ as readinessIdOf, $a as AGENT_EVENT_TYPES, $i as PROMOTION_TITLE, $r as QA_COMMAND, A as RoomIdSchema, Aa as EnvironmentCheckIdSchema, Ai as CHECKPOINT_EVENT_TYPES, An as critiqueStepOf, Ao as SkillNameSchema, B as OpenStackInputSchema, Ba as contentSize, Bi as CheckActionInputSchema, Bn as CREATOR_OWNER, Br as QUESTION_TOOL_NAME, Ca as SkillOverrideSchema, Ci as isSilentJudge, Cn as CRITIQUE_EVENT_TYPES, Ct as QualifyMergeConflictInputSchema, D as TEST_CRITERIA, Do as RULE_VALUES, Dt as HYPOTHESIS_KIND, E as ReviewTestsInputSchema, Ea as normalizedFolder, Eo as RULE_ACTIONS, Er as RootPinSchema, Fn as COURSE_KINDS, Fr as AnswerCheckpointInputSchema, Ga as DEFERRED_EVENT_TYPES, Gi as PUBLICATION_EXPORT_DIR, H as stackIdOf, Ha as isSkillOverrideContent, Hi as RequestActionInputSchema, Hr as QuestionProofSchema, I as flatTable, Ia as REQUIRED_CONTENT_FIELDS, In as CourseInputSchema, Ir as CHAT_DECISIONS, Ki as countWords, L as roundTableStepOf, Li as RESOLUTION_DECISIONS, Ln as courseIdOf, Lr as CHAT_EVENT_TYPES, M as RoundTableInputSchema, Mi as CheckpointIdSchema, Mo as TOOL_IDS, Ni as LIFTING_DECISIONS, No as TestSettingsSchema, O as TEST_REVIEW_EVENT_TYPES, On as critiqueIdOf, Ot as LOOP_EVENT_TYPES, P as TABLE_EVENT_TYPES, Pa as AgentContentSchema, Pn as COURSE_EVENT_TYPES, Q as ReadyInputSchema, Qi as MEMORY_EVENT_TYPES, R as AnswerStackInputSchema, Ra as SkillContentSchema, S as MeasureUsageInputSchema, St as MERGE_ORDER_EVENT_TYPES, Ta as RunProofCommandInputSchema, Ti as reviewIdOf, Tn as IDEA_VERSION, Ua as plainLine, Ui as SESSION_EVENT_TYPES, Un as DOCUMENT_KINDS, Ur as QuestionStackProofSchema, V as STACK_EVENT_TYPES, Va as isSkillContent, Vi as RecordExternalReadInputSchema, Vr as QUESTION_TOOL_VIA, Wi as PUBLICATION_DOCS_DIR, Wr as QuestionToolViaSchema, X as READINESS_FIX_FIRST, Xa as compareStoryIds, Xi as LESSON_EVENT_TYPES, Xo as recommendedGitWorkflow, Y as READINESS_EVENT_TYPES, Z as READINESS_GO_ON, Zo as resolveGitWorkflow, Zr as AcceptanceQaInputSchema, _n as TracedRequirementInputSchema, _r as BUDGET_RECOMMENDATION, _t as METHOD_EVENT_TYPES, a as fromBase64url, ai as RecordCriterionInputSchema, an as ELICITATION_EVENT_TYPES, ao as StoryIdSchema, ba as WRITE_GUARD_EVENT_TYPES, bi as SubmitReviewInputSchema, bn as DelegateInputSchema, br as WEB_ANSWER_EVENT_TYPES, bt as CONFLICT_OPTIONS, c as toHex, ca as retroIdOf, ci as REQUIREMENT_EVENT_TYPES, cn as MAX_ELICITED_NOTE_LENGTH, co as AgentIdSchema, dn as DeviationReasonSchema, dr as DecideCheckpointInputSchema, dt as WriteSensitiveInputSchema, ea as PromoteLessonInputSchema, ei as QA_EVENT_TYPES, eo as MAIN_SESSION_AGENT, et as readinessStepOf, fn as GetTraceInputSchema, ga as RequestCreatorActionInputSchema, go as DOMAIN_IDS, gr as BUDGET_OPTIONS, gt as TEAM_EVENT_TYPES, hi as REVIEW_EVENT_TYPES, hn as ResolveDeviationInputSchema, hr as BUDGET_EVENT_TYPES, ht as PauseTeamInputSchema, i as sha256Hex, ia as RecordLessonsInputSchema, ii as CRITERION_EVENT_TYPES, in as AskCreatorInputSchema, ir as CI_FORGES, j as RoomSchema, jn as hypothesisIdOf, jo as TEST_FILE_MAX_LINES, k as TEST_ROWS, kn as critiquePathOf, ko as SemverSchema, kt as LoopInputSchema, l as utf8, la as retroTitle, ln as DEVIATION_EVENT_TYPES, ls as ErrorCode, lt as ReadSensitiveInputSchema, mi as REVIEW_DOMAINS, mn as ReportDeviationInputSchema, mr as CheckCallInputSchema, n as randomBytes, na as ProposeRetrospectiveInputSchema, ni as qaProofBelongs, nn as EXCHANGE_EVENT_TYPES, nr as INSTALL_EVENT_TYPES, ns as ULID_PATTERN, o as fromUtf8, oa as commonIdOf, oi as criteriaInLine, pa as CreatorActionSchema, pi as JUDGE_LENS, pt as utf8Length, ra as ReadMemoryInputSchema, ri as qaProofKind, rn as SummarizeInputSchema, sa as lessonIdOf, si as criterionId, sn as ElicitationChannelSchema, t as gitBlobId, ta as ProposePromotionInputSchema, ti as QA_PROOF_DIR, to as NextInputSchema, u as historyCsv, ua as scopeLabel, un as DeviationIdInputSchema, ur as CHECKPOINT_DECIDED_EVENT_TYPES, vi as StartReviewInputSchema, vn as deviationIdOf, vr as BUDGET_TITLE_PREFIX, vt as MigrationStepIdSchema, w as USAGE_SOURCES, wa as ProofsFileSchema, wi as isSilentLens, wn as CritiqueInputSchema, wr as DEVICE_TRUST_EVENT_TYPES, xa as WRITE_TEXT_MAX, xi as TriageReviewInputSchema, xo as PHASE_IDS, xt as GetMergeOrderInputSchema, ya as CheckWriteInputSchema, yi as StoryReviewInputSchema, yn as DELEGATION_EVENT_TYPES, yr as MAX_BUDGET_USD, z as AskStackInputSchema, zi as checkpointIdOf, zr as MessageDigestSchema, zt as HUMAN_EVENT_TYPES } from "./hash.js";
2
- import { $ as SPEC_PATH, $c as critiqueOffer, $i as lessonStatuses, $l as parseMethodConfig, $n as isFileAction, $r as productKeyMissing, $s as passNumberFor, $t as writeCommonEntry, $u as unexpected, A as readRegistry, Aa as fail, Ad as CODEX_POLICY_PATH, Ai as changeFacts, Ao as validateGitWorkflow, Ar as noticeBranchOf, As as readMachineKey, At as queueOrder, Au as skippedWithItsPhase, B as unprovenCriteria, Ba as commandMatches, Bc as deviationResolutionProblem, Bd as canonicalBytes, Bi as lensDiffPathOf, Bl as storyDoneAt, Bn as creatorActionSummary, Bo as constitutionTarget, Br as newUlid, Bs as ciGreen, Bt as isReuseReport, Bu as CREATOR_ACTION_DECISIONS, C as plannedDependencies, Ca as POSITIONING_PATH, Cc as handoffs, Cd as CURSOR_HOOK_NAME, Ci as isJudgedKey, Cl as pathKey, Co as validateValidationMode, Cs as checkpointsOf$1, Ct as notePendingMerge, D as invalid$13, Da as readScope, Dd as cursorSessionIdOf, Di as openConflict, Dl as storiesOf, Do as writeProfile, Dr as openPause, Ds as loadHumanKey, Dt as currentOrder, Du as isSkipped, E as citingTests, Ea as outgrown, Ec as validateDecisions, Ed as CURSOR_UNREADABLE_REASON, Ei as conflictNote, El as validatedVersions, Eo as writePoints, Es as openDeferred, Et as takePendingMerge, Eu as documentProblemIsWarning, F as sentBackPublications, Fa as activeAgentNames, Fc as traceRequirement, Fi as findingSeverities, Fl as currentSprint, Fn as updateAvailableOf, Fo as readShippedTable, Fr as AgentSession, Fs as readReply, Fu as pointsView, G as knownOwners, Ga as patternOf, Gc as commandsToAccept, Gi as validateJudge, Gl as designSecurityReviewGap, Gn as proofCommandLine, Go as isRuleAction, Gs as storyCiStatus, Gt as isTestPath$1, Gu as resolutionProblem, H as readSprintStories, Ha as isEngineCommand, Hc as openDeviation, Hd as deviceIdMatchesKey, Hi as planReaders, Hl as ARCHITECTURE_PATH, Hn as journalActionProblem, Ho as renderConstitutionReferenceFiles, Hr as localeSigner, Hs as heldMergeCheckpoint, Ht as reuseOf, Hu as blocksInForce, I as withoutHeader, Ia as activeDefinitions, Ic as traceSummaries, Id as decryptFile, Ii as isDocumentPath, Il as latestSprint, Io as renderModelsFile, Ir as readSource, Is as withNote, Iu as byOpening, Ja as OWN_TOOL_PREFIX, Jc as standingOf, Ji as anchorsOf, Jl as reviewsSince, Jn as parseCommandLine, Jo as ruleLocked, Jr as productIdMismatch, Js as isStoryDeveloper, Jt as lessonFileIds, K as readDocumentFiles, Ka as scriptParts, Kc as proofDecisions, Kd as isReopenable, Ki as validateLensReports, Kl as isBlobOf, Kn as isSecretVariable, Ko as isRuleValue, Ks as currentPass, Kt as sourceWords, L as journeyView, La as loadDefinitions, Lc as tracedRequirements, Ld as encryptFile, Li as isLockfile, Ll as sprintStatus, Ln as actionStory, Lo as planShippedCopy, Lr as sessionTrust, Ls as skipWarning, Lt as weighedStoriesOf, Lu as checkpointPayload, M as invalidField, Md as codexHookCommands, Mi as chooseLenses, Ml as testReferences, Mo as effectiveTable, Mr as branchHead, Ms as canonicalJson, Mt as analyseConflict, Mu as deciderFor, N as isPublication, Na as compareSemver, Nc as measureResult, Nd as codexSessionIdOf, Ni as creatorStack, Nl as storiesIn$1, Nn as isEngineUpdatePoint, No as inheritClients, Nr as checkCiCommand, Ns as decisionPrompt, Nt as conflictSummary, Nu as delegationOf, O as itemOf, Oa as CommandRegistry, Od as CODEX_HOOK_DEFINITIONS, Oi as refreshedMergeSummary, Ol as criterionStatus, On as readDoctorCatalog, Oo as writeValidationMode, Or as leaveFastTrackCommand, Ot as filesByStory, Ou as skippedPhases, P as isValidatedPublication, Pa as roleForbidden, Pc as statusCounts, Pi as findingRefs, Pl as storyIn, Po as parseModelTable, Pr as ciUnavailable, Ps as formDigest, Pt as forcedFiles, Pu as delegationVerdict, Q as usageView, Qa as CODEX_CONFIG_PATH, Qc as critiqueOfDocument, Qi as lessonRecord, Ql as methodConfigInvalid, Qn as dryRunFileAction, Qr as productKeyById, Qs as passComplete, Qt as readLessonFile, Qu as unavailable$1, R as gitView, Ra as syncCommand, Rc as tracedStoryStatus, Rd as encryptedFileKeyId, Ri as isSensitiveChange, Rl as sprintStories, Rn as contentPreview, Ro as isRecord, Rr as usableId, Rt as weightDrift, Ru as truncate, S as approvedArchitecture, Sa as checkDocuments, Sc as courseNote, Sd as sameProject, Si as stackPromptItem, Sl as mergedStoriesOf, Sn as runDoctor, So as validateProfile, St as notRecorded, Su as refusedDocumentReview, Ta as blockOf, Tc as openCourse, Td as CURSOR_UNCHECKED_REASON, Ti as readinessOf, Tl as staleKnowledgeStories, Tn as isAutomatic, To as writePermissionMode, Ts as deferredView, U as DOCUMENT_PATHS, Ua as isNetworkCommand, Uc as openDeviations, Ud as ANTIGRAVITY_POLICY_PATH, Ui as readerPasses, Un as notReserved, Uo as DEFAULT_RULES, Us as isWorkflowFile, Ut as isCodePath, Uu as liftsBlocks, V as storyText, Va as engineCommandOnly, Vc as findDeviation, Vi as mergeLensReports, Vl as validatedStories, Vn as isCreatorActionKind, Vo as renderConstitution, Vs as existingCi, Vt as reuseLines, Vu as answerable, W as docsCommand, Wa as matchesAny, Wc as storyDeveloper, Wd as ANTIGRAVITY_UNCHECKED_REASON, Wi as stackText, Wl as SECURITY_REVIEWER, Wn as terminalCommand, Wo as allowedValues, Wr as journalProduct, Ws as mergeHold, Wt as isReadableCode, X as figuresOf, Xa as pauseHolds, Xc as critiquable, Xi as batchesOf, Xl as editedMethodText, Xn as runsCriteria, Xo as provideToolManual, Xr as announcedKey, Xs as openMergeCheckpoint, Xt as openCommonKey, Ya as budgetMessage, Yc as correctionLines, Yi as approved, Yl as parseDocumentFile, Yn as parseDeclaredLine, Yr as adoptRotatedKey, Ys as needsSecurity, Yt as memoryInvalid, Yu as waiverExpired, Z as usageSessionsOf, Za as pausedMessage, Zc as critiqueById, Zi as dueScopes, Zl as loadMethodConfig, Zn as contentProblem, Zr as forgetProductKey, Zs as parseDiff, Zt as readCommonEntry, Zu as AgentPluggedError, _ as antigravityTraceInfo, _a as ruledOutLines, _c as fastTrackHold, _l as validateShow, _n as environmentFixRecordOf, _r as parallelLimitProblem, _s as SKILL_FILE, _t as afterMerge, _u as activePhases, a as invalidInput, aa as retroOfCheckpoint, ac as securityReasons, ad as METHOD_GITIGNORE_PATH, ai as computeProjectionDetailed, al as hypothesisById, an as afterExecution, ao as mcpLaunch, ar as buildFromContent, as as loadSkillLayers, at as datedAfter, au as GENERATED_HEADER_HASH, b as readClaudeTranscript, ba as turnEvent, bc as courseById, bd as proofSessionOf, bi as stackPrompt, bl as blobIdsOf, bn as environmentChecks, bo as validatePermissionMode, br as storyJournalView, bt as mergedEvent, bu as openDocumentReview, c as project$1, ca as scopeFinished, cc as stackEntriesOf, cd as POINTER_FILES, ci as tableCandidate, cl as mentionsSensitiveData, cn as executionProblem, co as loadManifest, cr as bodySize, cs as overlap, ct as installHumanKey, cu as pointerStyleOf, d as measureProduct, da as attemptLimitCheckpoint, dc as unpublishedKinds, dd as isDecisionHook, di as validateProposal$1, dl as passageFound, dn as forgeRecordOf, do as targetedTools, dt as reviewNotInteractive, du as RETIRED_DEVELOPERS, ea as memoryOf$1, ec as passOutcome, ed as resolveValidationSettings, ei as projectionKey, el as critiqueStack, en as writeLessonFile, eo as CLAUDE_SETTINGS_PATH, et as countSpec, eu as renderMethodConfig, f as WINDOW_SLACK_MS, fa as attemptsView, fc as untriagedFindings, fd as chatClientOf, fi as validateRecall, fl as refsOf, fn as isForgeAction, fo as toolsFromDetection, fr as recordGitWorkflow, ft as trustProblem, fu as currentDeveloper, g as antigravityPlace, ga as parseHypothesis, gc as safeObserved, gi as selectionOutsideStack, gl as validateSettle$1, gn as syncJournal, go as profileCommand, gs as isDeveloper, gt as mergeHead, gu as STORY_BUILDERS, h as antigravityModelAt, ha as loopVerdict, hc as reportProblems, hi as readStackReply, hl as validateProposal, ho as methodNotInstalled, hr as openPullRequestCommand, hs as overridePath, ht as installProductKey, hu as PHASE_CLOSERS, i as defined, ia as refusedRetro, ic as reviewVerdictOf, id as METHOD_DIR, ii as computeProjection, il as hypothesesOf, in as actionUnchanged, io as engineCommand, ir as workshopKnown, it as verified, iu as GENERATED_HEADER, j as decodeStrict, ja as ok, jd as CODEX_UNCHECKED_REASON, ji as changeFiles, jl as isTestPath, jn as engineUpdateOf, jo as writeGitWorkflow, jr as syncLateNotices, js as DECISION_FORM_FIELDS, jt as CONFLICT_OPTION_TEXT, ju as KNOWLEDGE_BASE_INDEX_PATH, k as requirementAgentCommands, ka as defineCommand, kc as forgeRepositoryOf, kd as CODEX_HOOK_NAME, ki as isMergeCheckpoint, kl as missingLine, kn as engineUpdateRecordOf, ko as repositoryOnForge, kr as storyFiles, kt as mergeWaits, ku as skippedSteps, l as projectWithKey, la as scopeStatus, lc as stackEntryOf, ld as ROOT_CONSTITUTION_PATH, li as tableOffer, ll as normalizedPath, ln as executionStateProblem, lo as fallbacksFor, lr as verify, ls as significantWords, lt as keyCommand, lu as withPointerBlock, m as measureTraces, ma as loopStateOf, mc as qaLine, md as citedKey, mi as parseStackReply, ml as validateCritiqueReport, mo as resolveRules, mr as oneLine$1, ms as loadOverrides, mt as writeHuman, n as agentEventCommand, na as promotionSummary, nc as reviewLoopReached, nd as METHOD_CONFIG_PATH, nl as documentRisk, nn as fileBinding, no as GEMINI_MD_PATH, nt as deferredAgentCommands, nu as writeEngineVersion, o as planSprintCommand, oa as retroSummary, oc as sensitivePath, od as METHOD_SUBDIRS, oi as gestureOwner, ol as ideaOffer, on as currentRisk, oo as withEngineCommand, or as definitionDir, os as overrideCostWithFiles, ot as humanKeyMissing, ou as isGenerated, p as journalFacts, pa as hypothesisProblem, pc as looksLikeProof, pd as chatHookPath, pi as stacksOf, pl as validateClose, po as detectTools, pr as deliveryRemote, ps as AGENT_OVERRIDES_DIR, pt as trustedCreator, pu as documentOwner, q as readMockupFiles, qa as subcommands, qc as proofRequestOpen, qd as pointKindOf, qi as activeLessonIds, ql as readWorkingBytes, qn as lineForCriterion, qo as lockOf, qs as findFinding, qt as isReservedMemoryPath, qu as statusAt, r as agentWriteContext, ra as recordDigest, rc as reviewOf, ri as writingKey, rl as hypothesesDue, rn as workspacePath, ro as syncInputsFingerprint, rr as knownIds, rs as checkSkillOverrideRequest, rt as deferredCommand, ru as writeTools, s as planned, sa as retrosOf, sc as silentOf, sd as MODELS_PATH, si as isDocsPath, sl as keptObjections, sn as executionEvent, so as SYNC_MANIFEST_PATH, sr as analyze, ss as costOf, st as humanTarget, su as normalizeText, t as agentActivityCommands, ta as overflows, tc as refutedOf, td as methodSection, ti as readHeldProductKey, tl as deliveredAfter, tn as checkSensitivePath, to as parsePolicy, tr as agentCommand, tt as currentState, tu as stringifyMethodDocument, u as provenanceOf, ua as targetsOf$1, uc as storyReviewDone, ud as decisionChannels, ui as validateClosing, ul as openStack, un as higherRisk, uo as CURSOR_RULE_PATH, ur as invalidArgument, ut as reviewCommand, uu as RENAMED_AGENTS, v as count, va as triedLines, vc as checkCourse, vd as isHookedClient, vi as stackItems, vl as versionsOf$1, vn as FailureSchema, vr as startStoryCommand, vs as definitionFolders, vt as mergeFailed, vu as approvedAt, w as resolveInstallSettings, wa as isPositioning, wc as leftLines, wd as CURSOR_POLICY_PATH, wi as judgedKey, wl as staleKnowledgeSources, wo as writeInstallMode, ws as deferredLocks, wt as pendingMergeOf, wu as inactiveAgents, x as skillNameOf, xa as budgetThresholdsOf, xc as courseIsCoherent, xd as refOf, xi as stackPromptDigest, xl as knowledgePagesOf, xn as evaluateChecks, xo as validatePoints, xs as reasonHolds, xt as mergesOn, xu as phaseProgress, y as lines, ya as tryProblem, yc as computeImpact, yd as matchQuote, yi as stackProblem, yl as wasOffered, yn as diagnoseFailure, yo as validateInstallMode, yr as storyCommand, ys as parseDefinition, yt as mergeStory, yu as isDocumentReview, z as criteriaTrace, za as commandForms, zc as agentMayResolve, zd as wipeBytes, zi as lensDiff, zl as sprintsOf, zn as creatorActionCheckpoint, zo as isStrings, zr as createUlidFactory, zs as GITHUB_WORKFLOWS_DIR, zt as duplicateFindings } from "./agent-commands.js";
1
+ import { $a as AgentIdSchema, $i as retroIdOf, $r as REQUIREMENT_EVENT_TYPES, $t as MAX_ELICITED_NOTE_LENGTH, A as AskStackInputSchema, Ai as checkpointIdOf, Ar as MessageDigestSchema, At as HUMAN_EVENT_TYPES, B as READINESS_EVENT_TYPES, C as RoundTableInputSchema, Ci as CheckpointIdSchema, Co as TOOL_IDS, D as flatTable, Da as REQUIRED_CONTENT_FIELDS, Dn as CourseInputSchema, Dr as CHAT_DECISIONS, En as COURSE_KINDS, Er as AnswerCheckpointInputSchema, Fi as PUBLICATION_DOCS_DIR, Fr as QuestionToolViaSchema, G as readinessStepOf, Ga as MAIN_SESSION_AGENT, Gi as PromoteLessonInputSchema, Gr as QA_EVENT_TYPES, H as READINESS_GO_ON, Ho as resolveGitWorkflow, Hr as AcceptanceQaInputSchema, Ia as DEFERRED_EVENT_TYPES, Ii as PUBLICATION_EXPORT_DIR, Ji as ReadMemoryInputSchema, Jr as qaProofKind, Jt as SummarizeInputSchema, Ka as NextInputSchema, Ki as ProposePromotionInputSchema, Kr as QA_PROOF_DIR, Li as countWords, M as STACK_EVENT_TYPES, Ma as isSkillContent, Mi as RecordExternalReadInputSchema, Mr as QUESTION_TOOL_VIA, N as stackIdOf, Na as isSkillOverrideContent, Ni as RequestActionInputSchema, Nr as QuestionProofSchema, O as roundTableStepOf, Oi as RESOLUTION_DECISIONS, On as courseIdOf, Or as CHAT_EVENT_TYPES, Pa as plainLine, Pi as SESSION_EVENT_TYPES, Pn as DOCUMENT_KINDS, Pr as QuestionStackProofSchema, Qi as lessonIdOf, Qr as criterionId, Qt as ElicitationChannelSchema, S as RoomSchema, Sn as hypothesisIdOf, So as TEST_FILE_MAX_LINES, T as TABLE_EVENT_TYPES, Ta as AgentContentSchema, Tn as COURSE_EVENT_TYPES, U as ReadyInputSchema, Ui as MEMORY_EVENT_TYPES, V as READINESS_FIX_FIRST, Va as compareStoryIds, Vi as LESSON_EVENT_TYPES, Vo as recommendedGitWorkflow, W as readinessIdOf, Wa as AGENT_EVENT_TYPES, Wi as PROMOTION_TITLE, Wr as QA_COMMAND, Xa as StoryIdSchema, Xr as RecordCriterionInputSchema, Xt as ELICITATION_EVENT_TYPES, Yi as RecordLessonsInputSchema, Yn as CI_FORGES, Yr as CRITERION_EVENT_TYPES, Yt as AskCreatorInputSchema, Zi as commonIdOf, Zr as criteriaInLine, _ as ReviewTestsInputSchema, _a as normalizedFolder, _o as RULE_ACTIONS, _r as RootPinSchema, ai as REVIEW_DOMAINS, an as ReportDeviationInputSchema, ar as CheckCallInputSchema, b as TEST_ROWS, bn as critiquePathOf, bo as SemverSchema, bt as LoopInputSchema, cn as TracedRequirementInputSchema, cr as BUDGET_RECOMMENDATION, ct as METHOD_EVENT_TYPES, da as WRITE_GUARD_EVENT_TYPES, di as SubmitReviewInputSchema, dn as DelegateInputSchema, dr as WEB_ANSWER_EVENT_TYPES, dt as CONFLICT_OPTIONS, ea as retroTitle, en as DEVIATION_EVENT_TYPES, et as ReadSensitiveInputSchema, fa as WRITE_TEXT_MAX, fi as TriageReviewInputSchema, fo as PHASE_IDS, ft as GetMergeOrderInputSchema, ga as RunProofCommandInputSchema, gi as reviewIdOf, gn as IDEA_VERSION, h as USAGE_SOURCES, ha as ProofsFileSchema, hi as isSilentLens, hn as CritiqueInputSchema, hr as DEVICE_TRUST_EVENT_TYPES, ia as CreatorActionSchema, ii as JUDGE_LENS, it as utf8Length, j as OpenStackInputSchema, ja as contentSize, ji as CheckActionInputSchema, jn as CREATOR_OWNER, jr as QUESTION_TOOL_NAME, k as AnswerStackInputSchema, ka as SkillContentSchema, li as StartReviewInputSchema, ln as deviationIdOf, lr as BUDGET_TITLE_PREFIX, lt as MigrationStepIdSchema, ma as SkillOverrideSchema, mi as isSilentJudge, mn as CRITIQUE_EVENT_TYPES, mt as QualifyMergeConflictInputSchema, nn as DeviationReasonSchema, nr as DecideCheckpointInputSchema, nt as WriteSensitiveInputSchema, oi as REVIEW_EVENT_TYPES, on as ResolveDeviationInputSchema, or as BUDGET_EVENT_TYPES, ot as PauseTeamInputSchema, p as MeasureUsageInputSchema, pt as MERGE_ORDER_EVENT_TYPES, qi as ProposeRetrospectiveInputSchema, qn as INSTALL_EVENT_TYPES, qo as ULID_PATTERN, qr as qaProofBelongs, qt as EXCHANGE_EVENT_TYPES, rn as GetTraceInputSchema, sa as RequestCreatorActionInputSchema, so as DOMAIN_IDS, sr as BUDGET_OPTIONS, st as TEAM_EVENT_TYPES, t as historyCsv, ta as scopeLabel, tn as DeviationIdInputSchema, tr as CHECKPOINT_DECIDED_EVENT_TYPES, ts as ErrorCode, ua as CheckWriteInputSchema, ui as StoryReviewInputSchema, un as DELEGATION_EVENT_TYPES, ur as MAX_BUDGET_USD, v as TEST_CRITERIA, vo as RULE_VALUES, vt as HYPOTHESIS_KIND, wi as LIFTING_DECISIONS, wo as TestSettingsSchema, x as RoomIdSchema, xa as EnvironmentCheckIdSchema, xi as CHECKPOINT_EVENT_TYPES, xn as critiqueStepOf, xo as SkillNameSchema, y as TEST_REVIEW_EVENT_TYPES, yn as critiqueIdOf, yt as LOOP_EVENT_TYPES } from "./dist.js";
2
+ import { $ as usageView, $a as retroSummary, $c as correctionLines, $i as computeProjectionDetailed, $l as readWorkingBytes, $o as ruleLocked, $r as projectionKey, $s as needsSecurity, $t as fileBinding, $u as skippedWithItsPhase, A as readRegistry, Aa as isLockfile, Ac as validateDecisions, Ad as isHookedClient, Ai as isEngineCommand, Al as validatedVersions, An as isEngineUpdatePoint, Ao as writePoints, Ar as syncLateNotices, As as deferredView, At as mergeWaits, Au as triedLines, B as unprovenCriteria, Ba as activeLessonIds, Bc as traceSummaries, Bd as CODEX_HOOK_DEFINITIONS, Bi as CODEX_CONFIG_PATH, Bl as currentSprint, Bn as notReserved, Bo as readShippedTable, Bs as GITHUB_WORKFLOWS_DIR, Bt as duplicateFindings, Bu as activePhases, C as plannedDependencies, Ca as changeFacts, Cc as computeImpact, Cd as isDecisionHook, Ci as activeAgentNames, Cl as wasOffered, Co as validateInstallMode, Cs as definitionFolders, Ct as notRecorded, Cu as attemptsView, D as invalid$13, Da as findingRefs, Dc as handoffs, Di as commandForms, Dl as pathKey, Do as validateValidationMode, Dr as stepReading, Dt as takePendingMerge, Du as loopVerdict, E as citingTests, Ea as creatorStack, Ec as courseNote, Ed as citedKey, Ei as syncCommand, El as mergedStoriesOf, En as engineUpdateRecordOf, Eo as validateProfile, Es as reasonHolds, Eu as loopStateOf, F as sentBackPublications, Fa as planReaders, Fd as CURSOR_HOOK_NAME, Fi as subcommands, Fn as contentPreview, Fo as workflowOf, Fr as readSource, Fs as formDigest, Ft as forcedFiles, Ga as lessonRecord, Gc as findDeviation, Gd as codexSessionIdOf, Gi as syncInputsFingerprint, Gl as storyDoneAt, Gn as parseCommandLine, Go as constitutionTarget, Gs as mergeHold, Gt as lessonFileIds, Gu as refusedDocumentReview, H as readSprintStories, Ha as approved, Hc as tracedStoryStatus, Hd as CODEX_POLICY_PATH, Hi as CLAUDE_SETTINGS_PATH, Hl as sprintStatus, Hn as proofCommandLine, Ho as planShippedCopy, Hs as existingCi, Ht as reuseLines, Hu as isDocumentReview, I as withoutHeader, Ia as readerPasses, Id as CURSOR_POLICY_PATH, Ii as OWN_TOOL_PREFIX, Il as isTestPath, In as creatorActionCheckpoint, Io as writeGitWorkflow, Ir as sessionTrust, Is as readReply, J as readMockupFiles, Ja as overflows, Jc as storyDeveloper, Jd as decryptFile, Ji as fallbacksFor, Jl as ARCHITECTURE_PATH, Jn as contentProblem, Jo as DEFAULT_RULES, Jr as adoptRotatedKey, Js as REVIEW_LOOP_OPTIONS, Jt as readCommonEntry, K as knownOwners, Ka as lessonStatuses, Kc as openDeviation, Ki as SYNC_MANIFEST_PATH, Kl as validatedStories, Kn as parseDeclaredLine, Ko as renderConstitution, Ks as storyCiStatus, Kt as memoryInvalid, L as journeyView, La as stackText, Lc as measureResult, Ld as CURSOR_UNCHECKED_REASON, Li as budgetMessage, Ll as testReferences, Ln as creatorActionSummary, Lo as effectiveTable, Lr as usableId, Ls as withNote, Lu as readMachineKey, M as invalidField, Ma as lensDiff, Md as proofSessionOf, Mi as matchesAny, Ml as storiesOf, Mn as updateAvailableOf, Mo as writeValidationMode, Mr as checkCiCommand, Ms as DECISION_FORM_FIELDS, Mt as CONFLICT_OPTION_TEXT, Mu as turnEvent, N as isPublication, Na as lensDiffPathOf, Nc as forgeRepositoryOf, Nd as refOf, Ni as patternOf, Nl as criterionStatus, No as repositoryOnForge, Nr as ciUnavailable, Ns as canonicalJson, Nt as analyseConflict, Nu as isMergeCheckpoint, O as itemOf, Oa as findingSeverities, Oc as leftLines, Oi as commandMatches, Ol as staleKnowledgeSources, On as engineUpdateOf, Oo as writeInstallMode, Or as storyFiles, Os as checkpointsOf$1, Ot as currentOrder, Ou as parseHypothesis, P as isValidatedPublication, Pa as mergeLensReports, Pd as sameProject, Pi as scriptParts, Pl as missingLine, Pn as actionStory, Po as validateGitWorkflow, Pr as AgentSession, Ps as decisionPrompt, Pt as conflictSummary, Pu as loadHumanKey, Q as usageSessionsOf, Qa as retroOfCheckpoint, Qc as standingOf, Qd as canonicalBytes, Qi as computeProjection, Ql as isBlobOf, Qn as agentCommand, Qo as lockOf, Qr as productKeyMissing, Qs as isStoryDeveloper, Qt as checkSensitivePath, Qu as skippedSteps, R as gitView, Ra as validateJudge, Rc as statusCounts, Rd as CURSOR_UNREADABLE_REASON, Ri as pauseHolds, Rl as storiesIn$1, Rn as isCreatorActionKind, Ro as inheritClients, Rr as createUlidFactory, Rs as skipWarning, Rt as weighedStoriesOf, Ru as PHASE_CLOSERS, S as approvedArchitecture, Sa as refreshedMergeSummary, Sc as checkCourse, Sd as decisionChannels, Si as roleForbidden, Sl as versionsOf$1, Sn as isAutomatic, Ss as SKILL_FILE, St as mergesOn, Su as attemptLimitCheckpoint, Ta as chooseLenses, Tc as courseIsCoherent, Td as chatHookPath, Ti as loadDefinitions, Tl as knowledgePagesOf, Tn as readDoctorCatalog, To as validatePoints, Tr as leaveFastTrackCommand, Tt as pendingMergeOf, Tu as isHypothesis, U as DOCUMENT_PATHS, Ua as batchesOf, Uc as agentMayResolve, Ud as CODEX_UNCHECKED_REASON, Ui as parsePolicy, Ul as sprintStories, Un as isSecretVariable, Uo as isRecord, Ur as journalProduct, Us as heldMergeCheckpoint, Ut as reuseOf, Uu as openDocumentReview, V as storyText, Va as anchorsOf, Vc as tracedRequirements, Vd as CODEX_HOOK_NAME, Vl as latestSprint, Vn as terminalCommand, Vo as renderModelsFile, Vr as localeSigner, Vs as ciGreen, Vt as isReuseReport, Vu as approvedAt, W as docsCommand, Wa as dueScopes, Wc as deviationResolutionProblem, Wd as codexHookCommands, Wi as GEMINI_MD_PATH, Wl as sprintsOf, Wn as lineForCriterion, Wo as isStrings, Ws as isWorkflowFile, Wt as isReservedMemoryPath, Wu as phaseProgress, Xa as recordDigest, Xc as proofDecisions, Xd as encryptedFileKeyId, Xi as skillPhaseKey, Xl as SECURITY_REVIEWER, Xn as isFileAction, Xo as isRuleAction, Xr as forgetProductKey, Xs as currentPass, Xt as writeCommonEntry, Xu as isSkipped, Ya as promotionSummary, Yc as commandsToAccept, Yd as encryptFile, Yi as CURSOR_RULE_PATH, Yn as dryRunFileAction, Yo as allowedValues, Yr as announcedKey, Ys as changesAfter, Yt as readLessonFile, Yu as documentProblemIsWarning, Z as figuresOf, Za as refusedRetro, Zc as proofRequestOpen, Zd as wipeBytes, Zi as skillPhaseOf, Zl as designSecurityReviewGap, Zo as isRuleValue, Zr as productKeyById, Zs as findFinding, Zt as writeLessonFile, Zu as skippedPhases, _ as antigravityTraceInfo, _a as isJudgedKey, _c as looksLikeProof, _i as ok, _l as validateClose, _n as environmentChecks, _o as detectTools, _r as storyJournalView, _t as mergeHead, _u as RETIRED_DEVELOPERS, a as invalidInput, aa as validateProposal$1, ac as refutedOf, ad as byOpening, af as pointKindOf, ai as sheetStates, al as deliveredAfter, an as executionProblem, ar as bodySize, at as verified, au as parseMethodConfig, b as readClaudeTranscript, ba as conflictNote, bc as safeObserved, bd as resolveValidationSettings, bi as readRefusals, bl as validateSettle$1, bo as profileCommand, bs as overridePath, bt as mergeStory, c as project$1, ca as parseStackReply, cc as reviewVerdictOf, cl as hypothesesOf, cn as forgeRecordOf, co as engineCommand, cs as checkSkillOverrideRequest, ct as humanTarget, cu as writeEngineVersion, d as measureProduct, dc as silentOf, dd as blocksInForce, di as blockOf, dl as keptObjections, dr as oneLine$1, ds as overrideCostWithFiles, dt as reviewCommand, du as GENERATED_HEADER_HASH, ea as gestureOwner, ec as openMergeCheckpoint, ed as KNOWLEDGE_BASE_INDEX_PATH, ef as deviceIdMatchesKey, ei as readHeldProductKey, el as critiquable, en as workspacePath, eo as retrosOf, er as knownIds, et as SPEC_PATH, eu as reviewsSince, f as WINDOW_SLACK_MS, fa as stackItems, fc as stackEntriesOf, fd as liftsBlocks, fi as outgrown, fl as mentionsSensitiveData, fr as openPullRequestCommand, fs as costOf, ft as reviewNotInteractive, fu as isGenerated, g as antigravityPlace, ga as stackPromptItem, gc as untriagedFindings, gd as statusAt, gi as fail, gl as refsOf, gn as diagnoseFailure, go as toolsFromDetection, gr as storyCommand, gt as installProductKey, gu as RENAMED_AGENTS, h as antigravityModelAt, ha as stackPromptDigest, hc as unpublishedKinds, hi as defineCommand, hl as passageFound, hn as FailureSchema, ho as targetedTools, hr as startStoryCommand, ht as writeHuman, hu as withPointerBlock, i as defined, ia as validateClosing, ic as passOutcome, id as pointsView, if as isReopenable, ii as sheetCommand, il as critiqueStack, in as executionEvent, io as budgetThresholdsOf, ir as analyze, it as deferredCommand, iu as methodConfigInvalid, j as decodeStrict, ja as isSensitiveChange, jd as matchQuote, ji as isNetworkCommand, jo as writeProfile, jr as branchHead, js as openDeferred, jt as queueOrder, ju as tryProblem, k as requirementAgentCommands, ka as isDocumentPath, kc as openCourse, ki as engineCommandOnly, kl as staleKnowledgeStories, ko as writePermissionMode, kr as noticeBranchOf, ks as deferredLocks, kt as filesByStory, ku as ruledOutLines, l as projectWithKey, la as readStackReply, lc as securityReasons, ld as CREATOR_ACTION_DECISIONS, li as POSITIONING_PATH, ll as hypothesisById, ln as isForgeAction, lo as mcpLaunch, lr as recordGitWorkflow, lt as installHumanKey, lu as writeTools, m as measureTraces, ma as stackPrompt, mc as storyReviewDone, md as resolutionProblem, mi as CommandRegistry, ml as openStack, mn as environmentFixRecordOf, mr as parallelLimitProblem, ms as significantWords, mt as trustedCreator, mu as pointerStyleOf, n as agentEventCommand, na as tableCandidate, nc as passComplete, nd as delegationOf, nf as ANTIGRAVITY_UNCHECKED_REASON, ni as writingKey, nl as critiqueOfDocument, nn as afterExecution, no as scopeStatus, nr as buildFromContent, nt as currentState, nu as editedMethodText, o as planSprintCommand, oa as validateRecall, oc as reviewLoopReached, od as checkpointPayload, ol as documentRisk, on as executionStateProblem, oo as compareSemver, or as verify, ot as datedAfter, ou as renderMethodConfig, p as journalFacts, pa as stackProblem, pc as stackEntryOf, pi as readScope, pl as normalizedPath, pn as syncJournal, ps as overlap, pt as trustProblem, pu as normalizeText, q as readDocumentFiles, qa as memoryOf$1, qc as openDeviations, qi as loadManifest, qn as runsCriteria, qo as renderConstitutionReferenceFiles, qr as productIdMismatch, qt as openCommonKey, qu as inactiveAgents, r as agentWriteContext, ra as tableOffer, rc as passNumberFor, rd as delegationVerdict, ri as checkDocuments, rl as critiqueOffer, rn as currentRisk, ro as targetsOf$1, rr as definitionDir, rt as deferredAgentCommands, ru as loadMethodConfig, s as planned, sa as stacksOf, sc as reviewOf, sd as truncate, si as staleList, sl as hypothesesDue, sn as higherRisk, so as KIMI_MCP_PATH, sr as invalidArgument, st as humanKeyMissing, su as stringifyMethodDocument, t as agentActivityCommands, ta as isDocsPath, tc as parseDiff, td as deciderFor, tf as ANTIGRAVITY_POLICY_PATH, tl as critiqueById, tn as actionUnchanged, to as scopeFinished, tr as workshopKnown, ts as provideToolManual, tt as countSpec, tu as parseDocumentFile, u as provenanceOf, ua as selectionOutsideStack, uc as sensitivePath, ud as answerable, ui as isPositioning, ul as ideaOffer, uo as withEngineCommand, ur as deliveryRemote, us as loadSkillLayers, ut as keyCommand, uu as GENERATED_HEADER, v as count, va as judgedKey, vc as qaLine, vd as waiverExpired, vi as gestureOf, vl as validateCritiqueReport, vn as evaluateChecks, vo as resolveRules, vs as AGENT_OVERRIDES_DIR, vt as afterMerge, vu as currentDeveloper, w as resolveInstallSettings, wa as changeFiles, wc as courseById, wd as chatClientOf, wi as activeDefinitions, wl as blobIdsOf, wo as validatePermissionMode, wr as openPause, ws as parseDefinition, wt as notePendingMerge, wu as hypothesisProblem, x as skillNameOf, xa as openConflict, xc as fastTrackHold, xd as methodSection, xi as repeatedGesture, xl as validateShow, xs as isDeveloper, xt as mergedEvent, xu as repeatedCause, y as lines, ya as readinessOf, yc as reportProblems, yi as liveRefusals, yl as validateProposal, yn as runDoctor, yo as methodNotInstalled, ys as loadOverrides, yt as mergeFailed, yu as documentOwner, z as criteriaTrace, za as validateLensReports, zc as traceRequirement, zd as cursorSessionIdOf, zi as pausedMessage, zl as storyIn, zn as journalActionProblem, zo as parseModelTable, zr as newUlid, zt as weightDrift, zu as STORY_BUILDERS } from "./agent-commands.js";
3
+ import { a as fromBase64url, c as toHex, i as sha256Hex, l as utf8, n as randomBytes, o as fromUtf8, t as gitBlobId } from "./hash.js";
4
+ import { C as METHOD_CONFIG_PATH, D as METHOD_SUBDIRS, E as METHOD_GITIGNORE_PATH, M as ROOT_CONSTITUTION_PATH, O as MODELS_PATH, S as unexpected, T as METHOD_DIR, _ as sourceWords, c as PROFILE_PATH, h as isTestPath$1, k as POINTER_FILES, l as renderProfile, m as isReadableCode, p as isCodePath, s as scanProject, x as unavailable$1, y as AgentPluggedError } from "./project-command.js";
3
5
  import { constants, existsSync, readFileSync } from "node:fs";
4
6
  import { access, copyFile, lstat, mkdir, mkdtemp, open, readFile, readdir, readlink, realpath, rm, stat, symlink, utimes, writeFile } from "node:fs/promises";
5
7
  import { execFile, spawn } from "node:child_process";
@@ -7,7 +9,7 @@ import { delimiter, dirname, extname, isAbsolute, join, posix, relative, resolve
7
9
  import { homedir, tmpdir } from "node:os";
8
10
  import { ZodError, z } from "zod";
9
11
  import { isMap, isScalar, isSeq, parse, parseDocument } from "yaml";
10
- //#region ../../packages/adapters-tools/dist/engine-store.js
12
+ // ../../packages/adapters-tools/dist/engine-store.js
11
13
  /**
12
14
  * Where the versions of the engine live on this machine: one folder per version under
13
15
  * `~/.agentplugged/engines/<version>/`, each holding the npm package `agentplugged` of that version
@@ -64,8 +66,7 @@ function installedEntry(version, home = homedir()) {
64
66
  const folder = engineDir(version, home);
65
67
  return isInstalledEngine(folder, version) ? engineEntry(folder) : void 0;
66
68
  }
67
- //#endregion
68
- //#region ../../packages/core/dist/doctor/support-report.js
69
+ // ../../packages/core/dist/doctor/support-report.js
69
70
  /** What is removed, in the words of the report. */
70
71
  const REDACTIONS = [
71
72
  {
@@ -564,8 +565,7 @@ async function buildSupportReport(context) {
564
565
  removed: REDACTIONS
565
566
  };
566
567
  }
567
- //#endregion
568
- //#region ../../packages/core/dist/doctor/doctor-commands.js
568
+ // ../../packages/core/dist/doctor/doctor-commands.js
569
569
  /**
570
570
  * `doctor`, the creator's command: looks at the machine and returns the report. The
571
571
  * questions and the repairs are the terminal's (`apps/cli`): the engine only reads here.
@@ -696,8 +696,7 @@ const checkEnvironmentCommand = defineCommand({
696
696
  });
697
697
  }
698
698
  });
699
- //#endregion
700
- //#region ../../packages/core/dist/usage/usage-commands.js
699
+ // ../../packages/core/dist/usage/usage-commands.js
701
700
  /**
702
701
  * `measure_usage`: the engine reads the traces of the AI tools on this machine, ties
703
702
  * each session to its story and writes what is new or changed to the journal. Nothing an agent
@@ -806,8 +805,7 @@ function habitsOf(text) {
806
805
  })).sort((a, b) => b.errors - a.errors || (a.tool < b.tool ? -1 : 1)).slice(0, 3)
807
806
  };
808
807
  }
809
- //#endregion
810
- //#region ../../packages/core/dist/usage/usage-report.js
808
+ // ../../packages/core/dist/usage/usage-report.js
811
809
  /**
812
810
  * The report of what the AI tools consumed, by story, step, skill, agent or session over a period
813
811
  *, as pure rules over the measured sessions. Tokens and the origin of
@@ -1048,8 +1046,7 @@ async function habitsFor(context, id, events) {
1048
1046
  found: habitsOf(trace.text)
1049
1047
  };
1050
1048
  }
1051
- //#endregion
1052
- //#region ../../packages/core/dist/usage/usage-report-command.js
1049
+ // ../../packages/core/dist/usage/usage-report-command.js
1053
1050
  /**
1054
1051
  * `usage [--by story|step|skill|agent|session] [--story <e-s>] [--since <day>] [--until <day>]
1055
1052
  * [--session <tool>:<id>] [--json]`: what the AI tools consumed, read from the
@@ -1080,8 +1077,7 @@ const usageCommand = defineCommand({
1080
1077
  }
1081
1078
  }
1082
1079
  });
1083
- //#endregion
1084
- //#region ../../packages/core/dist/trust/install-folders.js
1080
+ // ../../packages/core/dist/trust/install-folders.js
1085
1081
  /** The product's own folder as the scope of an installation. */
1086
1082
  const ROOT_SCOPE = "root";
1087
1083
  /** True for the platforms whose file names are compared without their case. */
@@ -1176,8 +1172,7 @@ function installFolders(context, stories, cwd) {
1176
1172
  };
1177
1173
  };
1178
1174
  }
1179
- //#endregion
1180
- //#region ../../packages/core/dist/write-guard/write-path.js
1175
+ // ../../packages/core/dist/write-guard/write-path.js
1181
1176
  /** A path with `/`, `.` and `..` settled; undefined when it climbs out of its root. */
1182
1177
  function settle(path) {
1183
1178
  const out = [];
@@ -1189,8 +1184,7 @@ function settle(path) {
1189
1184
  }
1190
1185
  return out.join("/");
1191
1186
  }
1192
- //#endregion
1193
- //#region ../../packages/core/dist/write-guard/write-scope.js
1187
+ // ../../packages/core/dist/write-guard/write-scope.js
1194
1188
  /**
1195
1189
  * The scope of a story, for the guard before a write: the files and folders the
1196
1190
  * story names, read from its approved text, plus what the creator added (`scope_widen`). Pure: no
@@ -1331,8 +1325,7 @@ function widenedEntries(paths) {
1331
1325
  }] : [];
1332
1326
  });
1333
1327
  }
1334
- //#endregion
1335
- //#region ../../packages/core/dist/write-guard/write-decisions.js
1328
+ // ../../packages/core/dist/write-guard/write-decisions.js
1336
1329
  const LABEL = /^\s*(?:[-*+]\s+|\d{1,9}[.)]\s+)?(?:\*\*|__)?\s*(?:guard|garde)\s*(?::\s*(?:\*\*|__)?|(?:\*\*|__)\s*:)\s*/i;
1337
1330
  const NAME = "[`'\"]?([@\\w][\\w@./:-]{0,99}?)[`'\"]?";
1338
1331
  const NO_DEPENDENCY = new RegExp(`^(?:no|aucune?|pas de)\\s+(?:dependency|d[ée]pendance)\\s+${NAME}\\s*[.;]?$`, "i");
@@ -1590,8 +1583,7 @@ async function appendOwn(journal, draft) {
1590
1583
  ready: kept.ready
1591
1584
  });
1592
1585
  }
1593
- //#endregion
1594
- //#region ../../packages/core/dist/budget/budget-rules.js
1586
+ // ../../packages/core/dist/budget/budget-rules.js
1595
1587
  function own$2(record, key) {
1596
1588
  return Object.hasOwn(record, key) ? record[key] : void 0;
1597
1589
  }
@@ -1803,8 +1795,7 @@ function budgetCheckpoint(story, plan) {
1803
1795
  recommendation
1804
1796
  });
1805
1797
  }
1806
- //#endregion
1807
- //#region ../../packages/core/dist/budget/budget-settings.js
1798
+ // ../../packages/core/dist/budget/budget-settings.js
1808
1799
  /**
1809
1800
  * The single entry point of the budget settings: the alert ratio and what going over a ceiling
1810
1801
  * does. Everything that applies a budget reads them here, from the configuration the product
@@ -2049,8 +2040,7 @@ const checkCallCommand = defineCommand({
2049
2040
  return ok(answer ?? {});
2050
2041
  }
2051
2042
  });
2052
- //#endregion
2053
- //#region ../../packages/core/dist/chat/answer-finish.js
2043
+ // ../../packages/core/dist/chat/answer-finish.js
2054
2044
  /**
2055
2045
  * What the commands that record a creator's answer (the chat's, the form's, an agent's decision)
2056
2046
  * do around the write: take back the merge this call alone did at the forge, then finish what the
@@ -2100,8 +2090,7 @@ async function finishAnswer(context, recorded, merge, carried) {
2100
2090
  throw error;
2101
2091
  }
2102
2092
  }
2103
- //#endregion
2104
- //#region ../../packages/core/dist/chat/form-session.js
2093
+ // ../../packages/core/dist/chat/form-session.js
2105
2094
  /**
2106
2095
  * What the commands that ask the creator through the client's form (a checkpoint, a stack) do the
2107
2096
  * same way around the question: ask one at a time, then remember what the client did with the form.
@@ -2136,8 +2125,7 @@ function noteFormReply(context, reply) {
2136
2125
  if (reply.action === "failed" && reply.timedOut === true && context.session?.form !== "works") context.session?.noteForm("refused");
2137
2126
  return quick;
2138
2127
  }
2139
- //#endregion
2140
- //#region ../../packages/core/dist/chat/question-tool.js
2128
+ // ../../packages/core/dist/chat/question-tool.js
2141
2129
  const text$1 = (value) => typeof value === "string" ? value : "";
2142
2130
  /**
2143
2131
  * The questions of the tool's input as the fingerprint sees them: only the fields the tool shows
@@ -2335,8 +2323,7 @@ function readStackScreen(screen, record) {
2335
2323
  });
2336
2324
  return approved.sort((a, b) => a - b);
2337
2325
  }
2338
- //#endregion
2339
- //#region ../../packages/core/dist/chat/review-rules.js
2326
+ // ../../packages/core/dist/chat/review-rules.js
2340
2327
  /**
2341
2328
  * The refusals every channel of the creator's answer shares: the
2342
2329
  * `REVIEW_REQUIRED` that sends the creator to the terminal.
@@ -2358,8 +2345,7 @@ function reviewRequired(checkpoint, reason) {
2358
2345
  ...record === void 0 ? {} : { terminal_command: terminalCommand(record) }
2359
2346
  });
2360
2347
  }
2361
- //#endregion
2362
- //#region ../../packages/core/dist/chat/ask-command.js
2348
+ // ../../packages/core/dist/chat/ask-command.js
2363
2349
  /**
2364
2350
  * `ask_creator`: the engine presents an open checkpoint to the creator itself,
2365
2351
  * in the AI tool's form (the MCP protocol's elicitation), and records the answer the creator
@@ -2785,8 +2771,7 @@ async function answerFromQuestionTool(context, input) {
2785
2771
  proof: { question: refOfRecord(record) }
2786
2772
  });
2787
2773
  }
2788
- //#endregion
2789
- //#region ../../packages/core/dist/chat/answer-command.js
2774
+ // ../../packages/core/dist/chat/answer-command.js
2790
2775
  /** The messages already cited by an answer the projection accepted (`citedKey`). */
2791
2776
  function citedOf(state) {
2792
2777
  const cited = state.chat_cited;
@@ -3023,8 +3008,7 @@ const answerCheckpointCommand = defineCommand({
3023
3008
  return finishAnswer(context, recorded, merge, carried);
3024
3009
  }
3025
3010
  });
3026
- //#endregion
3027
- //#region ../../packages/core/dist/chat/stack-merges.js
3011
+ // ../../packages/core/dist/chat/stack-merges.js
3028
3012
  /** No merge to do. */
3029
3013
  const NO_MERGES = {
3030
3014
  done: /* @__PURE__ */ new Map(),
@@ -3099,8 +3083,7 @@ async function mergeStackPoints(context, config, state, points) {
3099
3083
  failed
3100
3084
  };
3101
3085
  }
3102
- //#endregion
3103
- //#region ../../packages/core/dist/chat/stack-commands.js
3086
+ // ../../packages/core/dist/chat/stack-commands.js
3104
3087
  /**
3105
3088
  * The tools of the stack to validate: `open_stack` (the engine opens a stack of
3106
3089
  * open checkpoints it checked), `ask_stack` (one form, a box per point, in an AI tool that shows
@@ -3802,8 +3785,7 @@ async function answerStackFromTool(context, input) {
3802
3785
  proof: { questions: used.map((record) => refOfRecord(record)) }
3803
3786
  });
3804
3787
  }
3805
- //#endregion
3806
- //#region ../../packages/core/dist/checkpoints/decide-command.js
3788
+ // ../../packages/core/dist/checkpoints/decide-command.js
3807
3789
  /** What each reason a point is the creator's says, for the agent that tried to decide it. */
3808
3790
  const WHY = {
3809
3791
  not_configured: "the creator has not chosen which points they keep yet: every point waits for them (present it to them, and offer them to choose their points with request_creator_action profile)",
@@ -3968,8 +3950,7 @@ const decideCheckpointCommand = defineCommand({
3968
3950
  });
3969
3951
  }
3970
3952
  });
3971
- //#endregion
3972
- //#region ../../packages/core/dist/ci/ci-setup.js
3953
+ // ../../packages/core/dist/ci/ci-setup.js
3973
3954
  /**
3974
3955
  * `ci setup`: the base CI of the product — lint, tests, build and dependency audit,
3975
3956
  * one check each — written from the method's templates (`skills/setup-ci/assets/`) for the
@@ -4320,8 +4301,7 @@ const ciCommand = defineCommand({
4320
4301
  }
4321
4302
  }
4322
4303
  });
4323
- //#endregion
4324
- //#region ../../packages/core/dist/course/course-commands.js
4304
+ // ../../packages/core/dist/course/course-commands.js
4325
4305
  function invalid$10(step, reason) {
4326
4306
  return new AgentPluggedError(ErrorCode.INVALID_ARGUMENTS, "error.invalid_arguments", {
4327
4307
  command: "correct_course",
@@ -4522,8 +4502,7 @@ const courseAgentCommands = [defineCommand({
4522
4502
  return ok(await resultOf$3(context, parsed.data, step, written.value.id, await currentState(context)));
4523
4503
  }
4524
4504
  })];
4525
- //#endregion
4526
- //#region ../../packages/core/dist/proofs/proof-declaration.js
4505
+ // ../../packages/core/dist/proofs/proof-declaration.js
4527
4506
  /**
4528
4507
  * The commands the project declares to prove its requirements: the file
4529
4508
  * `.agentplugged/proofs.yaml`, read and checked by the engine. An agent may write a proposal in it;
@@ -4622,8 +4601,7 @@ async function readProofDeclaration(files) {
4622
4601
  commands: parsed.data.commands.map(resolvedCommand)
4623
4602
  };
4624
4603
  }
4625
- //#endregion
4626
- //#region ../../packages/core/dist/proofs/proof-gesture.js
4604
+ // ../../packages/core/dist/proofs/proof-gesture.js
4627
4605
  function invalid$9(field, reason) {
4628
4606
  return new AgentPluggedError(ErrorCode.INVALID_ARGUMENTS, "error.invalid_arguments", {
4629
4607
  command: "request_creator_action",
@@ -4691,8 +4669,7 @@ async function proofCommandsAsked(context, record) {
4691
4669
  ...later === 0 ? {} : { later }
4692
4670
  };
4693
4671
  }
4694
- //#endregion
4695
- //#region ../../packages/core/dist/creator-actions/request-command.js
4672
+ // ../../packages/core/dist/creator-actions/request-command.js
4696
4673
  /** `INVALID_ARGUMENTS` on a field of the action (`action.<field>`). */
4697
4674
  function invalidAction(error) {
4698
4675
  const refused = invalidInput("request_creator_action", error);
@@ -4895,8 +4872,7 @@ const requestCreatorActionCommand = defineCommand({
4895
4872
  });
4896
4873
  }
4897
4874
  });
4898
- //#endregion
4899
- //#region ../../packages/core/dist/evals/eval-cases.js
4875
+ // ../../packages/core/dist/evals/eval-cases.js
4900
4876
  /**
4901
4877
  * The cases that evaluate how a skill behaves, pure: their format, their validation
4902
4878
  * and the lint of a rubric that proves nothing. The cases sit next to the skill they judge, in
@@ -5124,8 +5100,7 @@ function readCases(source, description) {
5124
5100
  function messageOf(entry) {
5125
5101
  return entry.state === void 0 ? entry.input : `[${entry.state}] ${entry.input}`;
5126
5102
  }
5127
- //#endregion
5128
- //#region ../../packages/core/dist/evals/eval-compare.js
5103
+ // ../../packages/core/dist/evals/eval-compare.js
5129
5104
  /** Mean, sample standard deviation, extremes. Undefined for no value. */
5130
5105
  function stats(values) {
5131
5106
  if (values.length === 0) return void 0;
@@ -5243,8 +5218,7 @@ function keep(reference, pass) {
5243
5218
  }
5244
5219
  };
5245
5220
  }
5246
- //#endregion
5247
- //#region ../../packages/core/dist/evals/eval-grading.js
5221
+ // ../../packages/core/dist/evals/eval-grading.js
5248
5222
  const flat$1 = (value) => value.normalize("NFKC").toLowerCase().replace(/\s+/gu, " ").trim();
5249
5223
  const wordsIn = (value) => (value.match(/[\p{L}\p{N}'’-]+/gu) ?? []).length;
5250
5224
  function callNamed(calls, name) {
@@ -5421,8 +5395,7 @@ function parseGrading(reply, rubric, material) {
5421
5395
  uncovered
5422
5396
  };
5423
5397
  }
5424
- //#endregion
5425
- //#region ../../packages/core/dist/evals/eval-transcript.js
5398
+ // ../../packages/core/dist/evals/eval-transcript.js
5426
5399
  const MAX_ANSWER = 2e4;
5427
5400
  /** The calls one line of a Claude Code stream holds. */
5428
5401
  function callsOfLine(line) {
@@ -5513,8 +5486,7 @@ function readRun(tool, transcript) {
5513
5486
  ok: transcript.trim() !== ""
5514
5487
  };
5515
5488
  }
5516
- //#endregion
5517
- //#region ../../packages/core/dist/evals/eval-triggers.js
5489
+ // ../../packages/core/dist/evals/eval-triggers.js
5518
5490
  /** The first letters of a word: « review », « reviews », « reviewing » are one. */
5519
5491
  const stem = (word) => word.slice(0, 5);
5520
5492
  function stemsOf(text) {
@@ -5616,8 +5588,7 @@ function skillLoaded(calls, skill) {
5616
5588
  function lineLoadsSkill(line, skill) {
5617
5589
  return callsOfLine(line).some((call) => loads(call, skill));
5618
5590
  }
5619
- //#endregion
5620
- //#region ../../packages/core/dist/evals/eval-run.js
5591
+ // ../../packages/core/dist/evals/eval-run.js
5621
5592
  /** A fingerprint of the skill's files: a pass says which version of the skill it judged. */
5622
5593
  function digestOf(files) {
5623
5594
  const parts = [...files].sort((a, b) => a.path.localeCompare(b.path)).map((file) => `${file.path}\n${file.text}`);
@@ -5883,8 +5854,7 @@ async function evaluate(agent, skill, file, options) {
5883
5854
  calls: plan.work + plan.judge
5884
5855
  };
5885
5856
  }
5886
- //#endregion
5887
- //#region ../../packages/core/dist/evals/eval-store.js
5857
+ // ../../packages/core/dist/evals/eval-store.js
5888
5858
  /**
5889
5859
  * Reading a skill, its cases and its reference from a folder, and what the workshop
5890
5860
  * says of them when it verifies a skill. The folder is the method's or the creator's: the same
@@ -6027,8 +5997,7 @@ function evalStatus(loaded, others, expected = []) {
6027
5997
  reference
6028
5998
  };
6029
5999
  }
6030
- //#endregion
6031
- //#region ../../packages/core/dist/creator-actions/workshop-command.js
6000
+ // ../../packages/core/dist/creator-actions/workshop-command.js
6032
6001
  /**
6033
6002
  * The workshop of agents and skills, one action of the `agent` tool: `agent.workshop`.
6034
6003
  * It writes nothing and asks nothing of the creator; it tells an agent, before it opens a request
@@ -6225,8 +6194,7 @@ const workshopCommand = defineCommand({
6225
6194
  }
6226
6195
  }
6227
6196
  });
6228
- //#endregion
6229
- //#region ../../packages/core/dist/proofs/proof-output.js
6197
+ // ../../packages/core/dist/proofs/proof-output.js
6230
6198
  /**
6231
6199
  * What the engine keeps of a command's output: the whole kept output, masked, in a
6232
6200
  * local file outside the journal; a few useful lines for the agent when the command failed; one
@@ -6297,8 +6265,7 @@ function measuredAfter(output, prefix) {
6297
6265
  }
6298
6266
  return found;
6299
6267
  }
6300
- //#endregion
6301
- //#region ../../packages/core/dist/proofs/proof-runner.js
6268
+ // ../../packages/core/dist/proofs/proof-runner.js
6302
6269
  /**
6303
6270
  * Port through which the engine starts a command of the project. `core` knows no
6304
6271
  * process: an adapter (Node) implements it. It starts the program without a shell when the line
@@ -6307,8 +6274,7 @@ function measuredAfter(output, prefix) {
6307
6274
  */
6308
6275
  /** The most output a run keeps, and the largest the adapter may be asked to keep. */
6309
6276
  const MAX_PROOF_OUTPUT_BYTES = 262144;
6310
- //#endregion
6311
- //#region ../../packages/core/dist/proofs/proof-run-command.js
6277
+ // ../../packages/core/dist/proofs/proof-run-command.js
6312
6278
  /** The folder of the local files that keep the whole output of the runs. Ignored by Git. */
6313
6279
  const PROOF_RUNS_DIR = `${METHOD_DIR}/.cache/proof-runs`;
6314
6280
  function refuse$4(field, reason) {
@@ -6562,8 +6528,7 @@ const proofAgentCommands = [defineCommand({
6562
6528
  }
6563
6529
  }
6564
6530
  })];
6565
- //#endregion
6566
- //#region ../../packages/core/dist/criteria/criterion-command.js
6531
+ // ../../packages/core/dist/criteria/criterion-command.js
6567
6532
  const refuse$3 = (field, reason) => invalid$13("record_criterion", field, reason);
6568
6533
  /** The accepted command that runs the tests of a criterion, and a declared one that is not accepted. */
6569
6534
  async function criterionCommand(context, state) {
@@ -6733,8 +6698,7 @@ const criterionAgentCommands = [defineCommand({
6733
6698
  }
6734
6699
  }
6735
6700
  })];
6736
- //#endregion
6737
- //#region ../../packages/core/dist/critique/critique-commands.js
6701
+ // ../../packages/core/dist/critique/critique-commands.js
6738
6702
  function invalid$8(step, reason) {
6739
6703
  return new AgentPluggedError(ErrorCode.INVALID_ARGUMENTS, "error.invalid_arguments", {
6740
6704
  command: "critique",
@@ -6902,8 +6866,7 @@ const critiqueAgentCommands = [defineCommand({
6902
6866
  return ok(await resultOf$1(context, parsed.data, step, written.value.id, state));
6903
6867
  }
6904
6868
  })];
6905
- //#endregion
6906
- //#region ../../packages/core/dist/delegation/delegate-command.js
6869
+ // ../../packages/core/dist/delegation/delegate-command.js
6907
6870
  /** `DELEGATION_INVALID`: the handover cannot go there; nothing is written. */
6908
6871
  function delegationInvalid(to, reason, details = {}) {
6909
6872
  return new AgentPluggedError(ErrorCode.DELEGATION_INVALID, `error.delegation_invalid.${reason}`, {
@@ -6999,8 +6962,7 @@ const delegateCommand = agentEventCommand({
6999
6962
  });
7000
6963
  }
7001
6964
  });
7002
- //#endregion
7003
- //#region ../../packages/core/dist/exchange/summarize-command.js
6965
+ // ../../packages/core/dist/exchange/summarize-command.js
7004
6966
  /**
7005
6967
  * `summarize`: Noah writes the short note of an exchange with the creator (what was asked, what
7006
6968
  * was decided, what was promised) to the journal. A session that starts later, in the AI tool or
@@ -7022,8 +6984,7 @@ const summarizeCommand = agentEventCommand({
7022
6984
  if (input.agent !== "noah") return roleForbidden(input.agent, "summarize");
7023
6985
  }
7024
6986
  });
7025
- //#endregion
7026
- //#region ../../packages/core/dist/history/history.js
6987
+ // ../../packages/core/dist/history/history.js
7027
6988
  /** The decisions `--decision` filters on: the resolutions, and `reopened`. */
7028
6989
  const HISTORY_DECISIONS = [...RESOLUTION_DECISIONS, "reopened"];
7029
6990
  /** The events that answer a checkpoint: at the terminal, from the chat, by the engine. */
@@ -7238,8 +7199,7 @@ function historyJson(entries, ignored = null) {
7238
7199
  ignored
7239
7200
  }))}\n`;
7240
7201
  }
7241
- //#endregion
7242
- //#region ../../packages/core/dist/history/history-command.js
7202
+ // ../../packages/core/dist/history/history-command.js
7243
7203
  function invalid$6(reason) {
7244
7204
  return new AgentPluggedError(ErrorCode.INVALID_ARGUMENTS, "error.invalid_arguments", { reason });
7245
7205
  }
@@ -7325,8 +7285,7 @@ const historyCommand$1 = defineCommand({
7325
7285
  }
7326
7286
  }
7327
7287
  });
7328
- //#endregion
7329
- //#region ../../packages/core/dist/journal/product-id.js
7288
+ // ../../packages/core/dist/journal/product-id.js
7330
7289
  /**
7331
7290
  * Writes `product_id` into the text of `method.yaml`, right after `engine_version`, keeping
7332
7291
  * comments, other keys and line endings.
@@ -7356,8 +7315,7 @@ async function readJournalProductId(journal) {
7356
7315
  return null;
7357
7316
  }
7358
7317
  }
7359
- //#endregion
7360
- //#region ../../packages/core/dist/init/existing-product.js
7318
+ // ../../packages/core/dist/init/existing-product.js
7361
7319
  /**
7362
7320
  * Root entries that say nothing about the product, in lowercase: Git, the method,
7363
7321
  * the files of the AI tools and coding assistants, the hosting of the repository, and what a fresh
@@ -7381,6 +7339,7 @@ const NOT_THE_PRODUCT = /* @__PURE__ */ new Set([
7381
7339
  ".cursorrules",
7382
7340
  ".cursorignore",
7383
7341
  ".gemini",
7342
+ ".kimi-code",
7384
7343
  ".mcp.json",
7385
7344
  ".windsurf",
7386
7345
  ".windsurfrules",
@@ -7481,8 +7440,7 @@ function knowledgeBaseExpected(config) {
7481
7440
  const off = [...config.agents?.inactive ?? [], ...config.agents?.disabled ?? []];
7482
7441
  return isExistingProduct(config) && domains.includes("docs") && !off.includes("zoe");
7483
7442
  }
7484
- //#endregion
7485
- //#region ../../packages/core/dist/init/init-command.js
7443
+ // ../../packages/core/dist/init/init-command.js
7486
7444
  /** The tool that reads each pointer file. */
7487
7445
  const POINTER_TOOLS = {
7488
7446
  "CLAUDE.md": "claude-code",
@@ -7628,6 +7586,19 @@ const initCommand = defineCommand({
7628
7586
  plan.add(`${dir}/`, action, ...operations);
7629
7587
  }
7630
7588
  await planGeneratedFile(plan, files, METHOD_GITIGNORE_PATH, `${GENERATED_HEADER_HASH}\n.cache/\noverrides/skills/*.local.yaml\n`, GENERATED_HEADER_HASH);
7589
+ if (await files.exists(PROFILE_PATH)) plan.add(PROFILE_PATH, "unchanged");
7590
+ else {
7591
+ const content = renderProfile(await scanProject(files), {
7592
+ sources: [],
7593
+ acceptance: "",
7594
+ notes: ""
7595
+ });
7596
+ plan.add(PROFILE_PATH, "created", {
7597
+ kind: "write",
7598
+ path: PROFILE_PATH,
7599
+ content
7600
+ });
7601
+ }
7631
7602
  for (const copy of shipped) {
7632
7603
  const writes = copy.writes.map((write) => ({
7633
7604
  kind: "write",
@@ -7751,8 +7722,7 @@ const initCommand = defineCommand({
7751
7722
  });
7752
7723
  }
7753
7724
  });
7754
- //#endregion
7755
- //#region ../../packages/core/dist/projection/project-state.js
7725
+ // ../../packages/core/dist/projection/project-state.js
7756
7726
  /** The projection's cache: never versioned (`.agentplugged/.gitignore`), never read as a source. */
7757
7727
  const STATE_CACHE_PATH = `${METHOD_DIR}/.cache/state.json`;
7758
7728
  /** The bytes of `state.json`: canonical JSON (RFC 8785), then `\n`. */
@@ -7836,8 +7806,7 @@ async function projectState(journal, files, options = {}) {
7836
7806
  warnings
7837
7807
  };
7838
7808
  }
7839
- //#endregion
7840
- //#region ../../packages/core/dist/journal/journal-command.js
7809
+ // ../../packages/core/dist/journal/journal-command.js
7841
7810
  const JOURNAL_ACTIONS = ["sync", "status"];
7842
7811
  function invalid$5(reason) {
7843
7812
  return new AgentPluggedError(ErrorCode.INVALID_ARGUMENTS, "error.invalid_arguments", { reason });
@@ -7895,8 +7864,7 @@ const journalCommand = defineCommand({
7895
7864
  }
7896
7865
  }
7897
7866
  });
7898
- //#endregion
7899
- //#region ../../packages/core/dist/critique/critique-next.js
7867
+ // ../../packages/core/dist/critique/critique-next.js
7900
7868
  /** The stories of the working copy that cite each identifier, from their files. */
7901
7869
  async function storyCitations(context) {
7902
7870
  const documents = (await readDocumentFiles(context.files, true)).map((file) => parseDocumentFile(file.path, file.text));
@@ -7963,8 +7931,7 @@ async function critiqueNext(context, step) {
7963
7931
  }
7964
7932
  return out;
7965
7933
  }
7966
- //#endregion
7967
- //#region ../../packages/core/dist/readiness/readiness-rules.js
7934
+ // ../../packages/core/dist/readiness/readiness-rules.js
7968
7935
  /**
7969
7936
  * The readiness gate, as pure rules. The engine computes what the plan as a whole
7970
7937
  * lets it compute (`analyse`), decides what a whole judged report is (`validateReadyReport`) and
@@ -8353,8 +8320,7 @@ function fixesOf(open, keys) {
8353
8320
  lines
8354
8321
  }));
8355
8322
  }
8356
- //#endregion
8357
- //#region ../../packages/core/dist/readiness/readiness-read.js
8323
+ // ../../packages/core/dist/readiness/readiness-read.js
8358
8324
  /** The profile has a UX domain (a product without one has no UX specification to wait for). */
8359
8325
  function needsUxOf(config) {
8360
8326
  return (config.profile?.domains ?? DOMAIN_IDS).includes("ux");
@@ -8381,8 +8347,7 @@ async function readCopy(context, needsUx) {
8381
8347
  needsUx
8382
8348
  };
8383
8349
  }
8384
- //#endregion
8385
- //#region ../../packages/core/dist/readiness/readiness-next.js
8350
+ // ../../packages/core/dist/readiness/readiness-next.js
8386
8351
  /** The steps where the gate stands: before the stories are cut, and before the first is built. */
8387
8352
  const GATE_STEPS = /* @__PURE__ */ new Set([
8388
8353
  "breakdown",
@@ -8420,8 +8385,7 @@ async function readinessNext(context, step) {
8420
8385
  open: left
8421
8386
  } } : {};
8422
8387
  }
8423
- //#endregion
8424
- //#region ../../packages/core/dist/spec/spec-next.js
8388
+ // ../../packages/core/dist/spec/spec-next.js
8425
8389
  /** The most reasons `next` says of a spec that outgrew the short path. */
8426
8390
  const MAX_WHY = 4;
8427
8391
  /** What the spec reveals that its scope does not declare. */
@@ -8448,8 +8412,7 @@ async function specNext(context, step) {
8448
8412
  };
8449
8413
  return unasked && mentionsSensitiveData(text) ? RISK : {};
8450
8414
  }
8451
- //#endregion
8452
- //#region ../../packages/core/dist/spec/spec-security.js
8415
+ // ../../packages/core/dist/spec/spec-security.js
8453
8416
  /**
8454
8417
  * The security review of the short path's design. The short path has no
8455
8418
  * architecture, so Chloé reviews the spec, with the same skill, the same result line (the blob
@@ -8499,8 +8462,7 @@ function specSecurityGate(input) {
8499
8462
  function isActive(active) {
8500
8463
  return active instanceof Set ? active.has(SECURITY_REVIEWER) : active.includes(SECURITY_REVIEWER);
8501
8464
  }
8502
- //#endregion
8503
- //#region ../../packages/core/dist/table/table-next.js
8465
+ // ../../packages/core/dist/table/table-next.js
8504
8466
  /** The active agents of the product, or undefined when they cannot be read. */
8505
8467
  async function activeTeam(context) {
8506
8468
  const loaded = await loadMethodConfig(context.files);
@@ -8629,8 +8591,7 @@ function morningSummary(projection, queue) {
8629
8591
  waiting: queue.map((item) => item.id)
8630
8592
  };
8631
8593
  }
8632
- //#endregion
8633
- //#region ../../packages/core/dist/next/next.js
8594
+ // ../../packages/core/dist/next/next.js
8634
8595
  const RISK_ORDER = {
8635
8596
  high: 0,
8636
8597
  medium: 1,
@@ -8760,6 +8721,26 @@ function releaseNotesDue(checkpoints, pages, merges, now) {
8760
8721
  const notes = pages.filter((page) => pathKey(page.path).startsWith(RELEASE_NOTES_FOLDER)).map((page) => page.last_story === void 0 ? 0 : rank.get(page.last_story) ?? 0);
8761
8722
  return Math.max(0, ...notes) < Math.max(...covered);
8762
8723
  }
8724
+ /** The acceptance report of the delivery phase, and the look back after a launch. */
8725
+ const ACCEPTANCE_PATH = `${METHOD_DIR}/docs/acceptance.md`;
8726
+ const AFTER_LAUNCH_PATH = `${METHOD_DIR}/docs/after-launch.md`;
8727
+ const citesDocument = (checkpoint, path) => checkpoint.type === "document" && (checkpoint.documents ?? []).some((cited) => pathKey(cited.path) === path);
8728
+ /** True when the creator approved the acceptance report during the current delivery phase. */
8729
+ function acceptancePassed(checkpoints, since, now) {
8730
+ return checkpoints.some((checkpoint) => citesDocument(checkpoint, ACCEPTANCE_PATH) && approvedAt(checkpoint, now) && checkpoint.resolution !== null && atOrAfter(checkpoint.resolution.at, since));
8731
+ }
8732
+ /**
8733
+ * True when the last release or publication the creator approved is at least a week old and no
8734
+ * look back (a `document` point citing the after-launch report) was opened since: open ones wait in
8735
+ * `validation`, so only a missing or a refused one makes it due.
8736
+ */
8737
+ function afterLaunchDue(checkpoints, now) {
8738
+ const launched = checkpoints.filter((checkpoint) => (checkpoint.type === "release" || checkpoint.type === "publication") && approvedAt(checkpoint, now) && checkpoint.resolution).map((checkpoint) => Date.parse(checkpoint.resolution?.at ?? "")).filter((at) => Number.isFinite(at));
8739
+ if (launched.length === 0) return false;
8740
+ const launchedAt = Math.max(...launched);
8741
+ if (now - launchedAt < 6048e5) return false;
8742
+ return !checkpoints.some((checkpoint) => citesDocument(checkpoint, AFTER_LAUNCH_PATH) && Date.parse(checkpoint.opened_at) >= launchedAt && (statusAt(checkpoint, now) === "open" || approvedAt(checkpoint, now)));
8743
+ }
8763
8744
  /** The step the creator skips to skip a structuring document. */
8764
8745
  const DOCUMENT_STEPS = {
8765
8746
  brief: "brief",
@@ -8847,7 +8828,11 @@ function computeStep(state, docs, config, alsoParked = /* @__PURE__ */ new Set()
8847
8828
  id: checkpoint.id,
8848
8829
  title: checkpoint.title,
8849
8830
  type: checkpoint.type,
8850
- risk: checkpoint.risk
8831
+ risk: checkpoint.risk,
8832
+ ...checkpoint.web_failure === void 0 || checkpoint.web_failure === null ? {} : { failure: {
8833
+ code: checkpoint.web_failure.code,
8834
+ reason: checkpoint.web_failure.reason
8835
+ } }
8851
8836
  }));
8852
8837
  const pending = Object.values(recordOf(state.projection, "humans")).filter((human) => human.trust === "pending").map((human) => human.device).sort();
8853
8838
  const specApproved = checkpoints.some((checkpoint) => isDocumentReview(checkpoint) && approvedAt(checkpoint, state.now) && checkpoint.documents.some((cited) => pathKey(cited.path) === ".agentplugged/docs/spec.md"));
@@ -8966,6 +8951,12 @@ function computeStep(state, docs, config, alsoParked = /* @__PURE__ */ new Set()
8966
8951
  command: `${COMMAND} review ${waitingPublication.id}`,
8967
8952
  checkpoint: waitingPublication.id
8968
8953
  });
8954
+ const waitingReport = open.find((checkpoint) => citesDocument(checkpoint, ACCEPTANCE_PATH) && !skip("acceptance") || citesDocument(checkpoint, AFTER_LAUNCH_PATH) && !skip("after_launch"));
8955
+ if (waitingReport !== void 0) return yours("validation", {
8956
+ waiting: waitingOf([waitingReport, ...open.filter((checkpoint) => checkpoint.id !== waitingReport.id)]),
8957
+ command: `${COMMAND} review ${waitingReport.id}`,
8958
+ checkpoint: waitingReport.id
8959
+ });
8969
8960
  if (config.domains.includes("docs") && active("zoe") && !skip("knowledge_base") && refused === null && current !== "delivery" && !storiesUnderWay(checkpoints, recordOf(state.projection, "stories"))) {
8970
8961
  const waitingFor = (step, checkpoint) => {
8971
8962
  const rest = open.filter((other) => other.id !== checkpoint.id);
@@ -8995,6 +8986,7 @@ function computeStep(state, docs, config, alsoParked = /* @__PURE__ */ new Set()
8995
8986
  if (staleKnowledgeStories(docs.knowledge_pages ?? [], merges).length > 0) return call("knowledge_base_update", "zoe");
8996
8987
  }
8997
8988
  if (config.domains.includes("docs") && active("zoe") && !skip("knowledge_base") && docs.knowledge_base !== false && refused === null && !open.some((checkpoint) => checkpoint.opened_by === "zoe") && !storiesUnderWay(checkpoints, recordOf(state.projection, "stories")) && releaseNotesDue(checkpoints, docs.knowledge_pages ?? [], mergedStoriesOf(state.projection), state.now)) return call("release_notes", "zoe");
8989
+ if (config.domains.includes("product") && active("iris") && !skip("after_launch") && refused === null && !storiesUnderWay(checkpoints, recordOf(state.projection, "stories")) && afterLaunchDue(checkpoints, state.now)) return call("after_launch", "iris");
8998
8990
  const refusedDocument = refusedDocumentReview(checkpoints, since, state.now);
8999
8991
  if (refusedDocument !== void 0) return {
9000
8992
  ...active(refusedDocument.opened_by) ? call("changes_requested", refusedDocument.opened_by) : yours("changes_requested"),
@@ -9090,7 +9082,11 @@ function computeStep(state, docs, config, alsoParked = /* @__PURE__ */ new Set()
9090
9082
  if (review !== void 0) return call("security_review", SECURITY_REVIEWER);
9091
9083
  return ready();
9092
9084
  }
9093
- if (current === "delivery") return approvedSince(checkpoints, "release", since, state.now) ? ready() : firstOf("delivery", ["omar"]);
9085
+ if (current === "delivery") {
9086
+ if (approvedSince(checkpoints, "release", since, state.now)) return ready();
9087
+ if (active("quentin") && !skip("acceptance") && !acceptancePassed(checkpoints, since, state.now)) return call("acceptance", "quentin");
9088
+ return firstOf("delivery", ["omar"]);
9089
+ }
9094
9090
  if (approvedSince(checkpoints, "publication", since, state.now)) return ready();
9095
9091
  const submitted = checkpoints.some((checkpoint) => checkpoint.type === "publication" && (checkpoint.documents ?? []).some((cited) => pathKey(cited.path) === POSITIONING_PATH) && (statusAt(checkpoint, state.now) === "open" || approvedAt(checkpoint, state.now)));
9096
9092
  if (docs.positioning === false && !submitted && domain("marketing") && active("julien") && !skip("positioning")) {
@@ -9215,6 +9211,28 @@ function computeStep(state, docs, config, alsoParked = /* @__PURE__ */ new Set()
9215
9211
  if (!reviewSkipped && untriagedFindings(story).length > 0) return triageStep(id);
9216
9212
  if (reviewSkipped || storyReviewDone(story, void 0, skip("story_ci", id))) {
9217
9213
  const merge = openMergeCheckpoint(checkpoints, id);
9214
+ const last = reviewOf(story)?.passes.at(-1);
9215
+ const failure = merge?.web_failure ?? null;
9216
+ if (!reviewSkipped && failure !== null && failure.reason === "head_moved" && last?.closed_by !== null && last?.closed_by !== void 0 && failure.event > last.closed_by) {
9217
+ const reviewers = reviewersOf("qa").filter((agent) => !isStoryDeveloper(story, agent));
9218
+ const review = {
9219
+ ...reviewInfo(id),
9220
+ pass: last.number + 1,
9221
+ qa: reviewers.length > 0 ? "pending" : "unavailable",
9222
+ reviewers: reviewers.slice(0, 1)
9223
+ };
9224
+ const [first] = reviewers;
9225
+ return first === void 0 ? {
9226
+ ...yours("review", {
9227
+ story: id,
9228
+ command: historyCommand(id)
9229
+ }),
9230
+ review
9231
+ } : {
9232
+ ...call("review", first, id),
9233
+ review
9234
+ };
9235
+ }
9218
9236
  if (merge !== void 0 && !held(merge)) {
9219
9237
  const rest = open.filter((checkpoint) => checkpoint.id !== merge.id);
9220
9238
  return yours("validation", {
@@ -9411,6 +9429,7 @@ const INDEPENDENT_STEPS = /* @__PURE__ */ new Set([
9411
9429
  "knowledge_base",
9412
9430
  "knowledge_base_update",
9413
9431
  "release_notes",
9432
+ "after_launch",
9414
9433
  "deferred_work",
9415
9434
  "setup_ci",
9416
9435
  "breakdown",
@@ -9428,13 +9447,61 @@ function nextStep(state, docs, config) {
9428
9447
  const step = withIndependence(state, docs, config);
9429
9448
  const pause = openPause(state.projection);
9430
9449
  if (pause !== void 0) return heldStep(step, pause);
9431
- const background = backgroundUpdate(state, docs, config);
9432
- return background === void 0 || step.step === "knowledge_base_update" ? step : {
9450
+ const repeated = repeatOf(state, step);
9451
+ const refused = refusalOf(state);
9452
+ const method = repeated ?? (refused !== void 0 && refused.times >= 2 ? {
9453
+ cause: "action",
9454
+ times: refused.times,
9455
+ what: `${refused.action}: ${refused.code}`
9456
+ } : void 0);
9457
+ const told = {
9433
9458
  ...step,
9459
+ ...method === void 0 ? {} : { change_method: method },
9460
+ ...refused === void 0 ? {} : { refused }
9461
+ };
9462
+ const background = backgroundUpdate(state, docs, config);
9463
+ return background === void 0 || told.step === "knowledge_base_update" ? told : {
9464
+ ...told,
9434
9465
  background
9435
9466
  };
9436
9467
  }
9437
9468
  /**
9469
+ * The latest refusal of an agent's call still live, as `next` tells it, or undefined. A refusal
9470
+ * about a story is dropped once a hypothesis was put forward on that story, or a point of it was
9471
+ * opened, since: the method already changed.
9472
+ */
9473
+ function refusalOf(state) {
9474
+ const stories = recordOf(state.projection, "stories");
9475
+ const checkpoints = Object.values(recordOf(state.projection, "checkpoints"));
9476
+ const live = liveRefusals(state.refusals ?? [], state.now).find((entry) => {
9477
+ const story = entry.target === "" ? void 0 : own(stories, entry.target);
9478
+ if (story === void 0) return true;
9479
+ const since = Date.parse(entry.at);
9480
+ return !((story.attempts ?? []).some((record) => isHypothesis(record) && Date.parse(record.at) >= since) || checkpoints.some((checkpoint) => checkpoint.story === entry.target && Date.parse(checkpoint.opened_at) >= since));
9481
+ });
9482
+ if (live === void 0) return void 0;
9483
+ const gesture = gestureOf(live.code);
9484
+ return {
9485
+ action: live.action,
9486
+ code: live.code,
9487
+ ...live.target === "" ? {} : { target: live.target },
9488
+ times: live.count,
9489
+ do: live.count >= 2 ? repeatedGesture(live.count, gesture) : gesture ?? NO_GESTURE
9490
+ };
9491
+ }
9492
+ /** When a code has no gesture of its own: read the message, then `state.next`. */
9493
+ const NO_GESTURE = "Read the message above for what to fix, then read state.next before trying again.";
9494
+ /** The repeated failure of the story an agent's step works on, as `next` tells it, or undefined. */
9495
+ function repeatOf(state, step) {
9496
+ if (step.story === null || (step.you ? step.step !== "validation" : step.agent === null)) return;
9497
+ const repeated = repeatedCause(own(recordOf(state.projection, "stories"), step.story), step.story, Object.values(recordOf(state.projection, "checkpoints")));
9498
+ return repeated === void 0 ? void 0 : {
9499
+ cause: repeated.cause,
9500
+ times: repeated.times,
9501
+ what: repeated.what
9502
+ };
9503
+ }
9504
+ /**
9438
9505
  * The step of a team the creator paused. It keeps what the creator still needs to see (the points
9439
9506
  * that wait, the phases, the sprint) and drops everything that names work to start.
9440
9507
  */
@@ -9506,8 +9573,7 @@ function withIndependence(state, docs, config) {
9506
9573
  stop: true
9507
9574
  };
9508
9575
  }
9509
- //#endregion
9510
- //#region ../../packages/core/dist/next/web-answers.js
9576
+ // ../../packages/core/dist/next/web-answers.js
9511
9577
  /** How long an answer is told: older, nobody is waiting for it. */
9512
9578
  const TELL_FOR_MS = 864e5;
9513
9579
  /** The most answers told at once (the newest): the agent reads the rest with `state.get`. */
@@ -9545,8 +9611,7 @@ function webAnswersNote(state, now) {
9545
9611
  }
9546
9612
  return told.sort((a, b) => b.at - a.at).slice(0, MOST).map(({ at: _at, ...answer }) => answer);
9547
9613
  }
9548
- //#endregion
9549
- //#region ../../packages/core/dist/next/next-command.js
9614
+ // ../../packages/core/dist/next/next-command.js
9550
9615
  const DOCS_DIR = `${METHOD_DIR}/docs`;
9551
9616
  const EPICS_DIR = `${METHOD_DIR}/epics`;
9552
9617
  const STORIES_DIR = `${METHOD_DIR}/stories`;
@@ -9558,7 +9623,8 @@ const TOOL_MARKERS = {
9558
9623
  "claude-code": CLAUDE_SETTINGS_PATH,
9559
9624
  codex: CODEX_CONFIG_PATH,
9560
9625
  antigravity: GEMINI_MD_PATH,
9561
- cursor: CURSOR_RULE_PATH
9626
+ cursor: CURSOR_RULE_PATH,
9627
+ kimi: KIMI_MCP_PATH
9562
9628
  };
9563
9629
  /** The kinds `next` looks for, and the file name that stands for each without a header. */
9564
9630
  const UPSTREAM_KINDS = [
@@ -9581,6 +9647,45 @@ async function syncFreshness(files, tools) {
9581
9647
  current: await syncInputsFingerprint(files)
9582
9648
  };
9583
9649
  }
9650
+ /**
9651
+ * Runs `sync` again when the phase whose skills it installed is no longer the current one, and
9652
+ * nothing else changed since (a stale method is the creator's `sync` step). A failure changes
9653
+ * nothing: the skills of the former phase stay, and every skill stays callable by its name.
9654
+ */
9655
+ async function refreshPhaseSkills(context, config, projection, now) {
9656
+ const { files } = context;
9657
+ if (!await files.exists(SYNC_MANIFEST_PATH)) return;
9658
+ const manifest = await loadManifest(files);
9659
+ if (manifest.skills_phase === void 0) return;
9660
+ if (manifest.skills_phase === skillPhaseKey(skillPhaseOf(projection, config, now))) return;
9661
+ if (manifest.inputs !== await syncInputsFingerprint(files)) return;
9662
+ try {
9663
+ const synced = await syncCommand.run(context, {});
9664
+ if (synced.ok) await commitPhaseSync(context, projection, synced.value.entries);
9665
+ } catch {}
9666
+ }
9667
+ /** The commit message of the files a change of phase installed. */
9668
+ const PHASE_SYNC_COMMIT_MESSAGE = "Method: skills of the new phase";
9669
+ /**
9670
+ * The files a change of phase wrote are committed by the engine where the creator's Git settings
9671
+ * allow a direct commit: left as changes, they would keep the main branch from taking a merge
9672
+ * (`base_dirty`). Where no direct commit is allowed, or the branch is not the one checked out
9673
+ * here, they stay as `sync` left them. Never fails.
9674
+ */
9675
+ async function commitPhaseSync(context, projection, entries) {
9676
+ const flow = workflowOf(projection).resolved;
9677
+ const workspace = context.storyWorkspace;
9678
+ if (flow.merge !== "direct" || workspace?.commitPaths === void 0) return;
9679
+ const branch = flow.integration ?? flow.production;
9680
+ const paths = [.../* @__PURE__ */ new Set([...entries.filter((entry) => entry.action !== "unchanged").map((entry) => entry.path), SYNC_MANIFEST_PATH])];
9681
+ try {
9682
+ await workspace.commitPaths({
9683
+ branch,
9684
+ paths,
9685
+ message: PHASE_SYNC_COMMIT_MESSAGE
9686
+ });
9687
+ } catch {}
9688
+ }
9584
9689
  /** A document's kind: its header's `kind` when known, else its file name (`PRD.md` → `prd`). */
9585
9690
  function kindOf(parsed) {
9586
9691
  const kind = parsed.kind?.value;
@@ -9686,7 +9791,8 @@ function preferredTools(config) {
9686
9791
  const nextCommand = defineCommand({
9687
9792
  name: "next",
9688
9793
  async run(context, input) {
9689
- const extra = Object.keys(input)[0];
9794
+ const wantsReading = input.reading === true;
9795
+ const extra = Object.keys(input).find((key) => key !== "reading");
9690
9796
  if (extra !== void 0) return fail(new AgentPluggedError(ErrorCode.INVALID_ARGUMENTS, "error.invalid_arguments", { reason: extra }));
9691
9797
  const { files } = context;
9692
9798
  if (!await files.exists(".agentplugged/method.yaml")) return fail(methodNotInstalled());
@@ -9696,6 +9802,7 @@ const nextCommand = defineCommand({
9696
9802
  try {
9697
9803
  await (await import("./forge-follow.js")).followForge(context);
9698
9804
  let projection = {};
9805
+ let journalRead = false;
9699
9806
  if (context.journal !== void 0) try {
9700
9807
  const listing = await context.journal.list();
9701
9808
  projection = (await computeProjection(listing.events, {
@@ -9704,6 +9811,7 @@ const nextCommand = defineCommand({
9704
9811
  ...config.product_id === void 0 ? {} : { product: config.product_id },
9705
9812
  allowTestTypes: context.allowTestTypes === true
9706
9813
  })).state;
9814
+ journalRead = true;
9707
9815
  } catch (error) {
9708
9816
  if (!(error instanceof AgentPluggedError && error.code === ErrorCode.NOT_A_GIT_REPO)) throw error;
9709
9817
  }
@@ -9724,10 +9832,12 @@ const nextCommand = defineCommand({
9724
9832
  ...delegation === void 0 ? {} : { delegation }
9725
9833
  };
9726
9834
  const now = (context.now ?? Date.now)();
9835
+ if (journalRead) await refreshPhaseSkills(context, config, projection, now);
9727
9836
  const state = {
9728
9837
  projection,
9729
9838
  now,
9730
- sync: await syncFreshness(files, tools)
9839
+ sync: await syncFreshness(files, tools),
9840
+ refusals: await readRefusals(files)
9731
9841
  };
9732
9842
  const docs = await readDocs(files);
9733
9843
  const knowledgeBase = await knowledgeBasePresent(files, context.mainBranch);
@@ -9769,10 +9879,20 @@ const nextCommand = defineCommand({
9769
9879
  reasons: track.left?.reasons ?? []
9770
9880
  } };
9771
9881
  const decisions = decisionQueue(projection, now, mode, delegation);
9882
+ const merged = new Set(mergedStoriesOf(projection).map((entry) => entry.story));
9883
+ const staleSheets = await readDocumentFiles(files, true).then((current) => sheetStates(current).filter((sheet) => sheet.stale.length > 0 && !merged.has(sheet.story)).map((sheet) => ({
9884
+ story: sheet.story,
9885
+ path: sheet.path,
9886
+ excerpts: staleList(sheet.stale),
9887
+ command: sheetCommand(sheet.story)
9888
+ }))).catch(() => []);
9889
+ const reading = !wantsReading || step.agent === null || step.you ? void 0 : await readDocumentFiles(files, true).then((current) => stepReading(current, step.agent ?? "", step.story)).catch(() => void 0);
9772
9890
  return ok({
9773
9891
  ...step,
9774
9892
  ...fast,
9893
+ ...reading === void 0 ? {} : { reading },
9775
9894
  ...notices.pending.length === 0 ? {} : { late_pages: notices.pending },
9895
+ ...staleSheets.length === 0 ? {} : { stale_sheets: staleSheets },
9776
9896
  answer,
9777
9897
  ...reason === void 0 ? {} : { answer_reason: reason },
9778
9898
  decisions,
@@ -9795,13 +9915,13 @@ const nextCommand = defineCommand({
9795
9915
  const nextAgentCommand = defineCommand({
9796
9916
  name: "next",
9797
9917
  audience: "agent",
9798
- description: "Read the product's next step: the step, the active agent to call and in which tool, the story or checkpoint it concerns, the open checkpoints (`waiting`), where the creator answers (`answer`: `chat`, or `terminal` with its `answer_reason`: `strict`, a high risk at the strict level only) and `decisions`: the checkpoints waiting for the creator in the order to present them one at a time (by risk, then by the actions they block, then oldest first), each with its recommendation. `validation` says how the creator is asked right now: `channels` (`available`: the ways to click an answer, in the order the engine tries them, then `chat`; call ask_creator or ask_stack when it holds more than `chat`), `elicitation` (the form alone is usable), `mode` and `proof`; it is read at each call, so read it before each decision, never from an earlier reading; `validation.points` says which points the creator keeps (`fixed`) and which the agents decide (`delegated`). `validation.unpublished` (when not null) says the local main branch holds commits not published to the remote, the creator's settings among them, which apply anyway: Noah offers once to publish them with request_creator_action `forge_push_main` (never forced), one « oui », never a command to type. The step `point_decision` hands a point the creator did not keep to the agent it names (decide_checkpoint). `independent: true` marks work that does not depend on the points waiting for the creator: do it; `stop: true`: nothing independent is left, stop. `pile` is the single stack of everything waiting (open_stack with `pile.stack`), and `morning` the summary of what happened since the creator last answered. `journey.skipped` lists the steps of the proposed journey the creator skipped: they are never errors, never proposed again, and the creator may take one up again (`step_resume`); never skip a step yourself, the creator says it. `update_available` / `engine_update`: a newer engine to propose once (request_creator_action `engine_update`). `background`, when present, is Zoé's update of the knowledge base pages that are behind, to run beside the step (in another session, never in place of it, never holding a developer). `critique`, when present (`kind`, `why`), is the critique of the structuring document the creator is about to validate, at risk: offer it in one line, once (review.critique `propose` records it; never impose it); `kind: idea` offers to test the idea or write the press release first. `table`, when present (`format: three_views`, `story`, `agents`: product, delivery, quality), offers the three views of a sensitive story whose merge waits for the creator: one line, once per story (chat.table with `table` {`story`} alone records it; never impose it). `hypotheses_due` lists the open hypotheses an evidence arrived for (a proof, a merged story): show them in one line each and let the creator close them or keep them open. `spec_path`, when present, is the short path (one spec instead of the brief, the PRD and the architecture): `choose` (a new product at its framing: propose the path, once, after `docs path`), `grow` (the spec outgrew it, `spec_path_why` says why: offer the full path in one line), `risk` (the spec speaks of sensitive data its scope does not declare: same line) or `carry` (the full path is on again while a spec stands: `docs grow` carries it over). `web_answers`: answers given in the web view to your points (yours = `agent`), until you write something: apply like a chat answer.`late_pages` lists knowledge base pages that are behind the code and carry no late notice (the creator's Git settings give the engine no commit): treat them as late, never rely on them. It writes nothing but, where the creator's Git settings allow it, a commit of its own adding the late notice to a knowledge base page.",
9918
+ description: "Read the product's next step: the step, the active agent to call and in which tool, the story or checkpoint it concerns, the open checkpoints (`waiting`), where the creator answers (`answer`: `chat`, or `terminal` with its `answer_reason`: `strict`, a high risk at the strict level only) and `decisions`: the checkpoints waiting for the creator in the order to present them one at a time (by risk, then by the actions they block, then oldest first), each with its recommendation. `validation` says how the creator is asked right now: `channels` (`available`: the ways to click an answer, in the order the engine tries them, then `chat`; call ask_creator or ask_stack when it holds more than `chat`), `elicitation` (the form alone is usable), `mode` and `proof`; it is read at each call, so read it before each decision, never from an earlier reading; `validation.points` says which points the creator keeps (`fixed`) and which the agents decide (`delegated`). `validation.unpublished` (when not null) says the local main branch holds commits not published to the remote, the creator's settings among them, which apply anyway: Noah offers once to publish them with request_creator_action `forge_push_main` (never forced), one « oui », never a command to type. The step `point_decision` hands a point the creator did not keep to the agent it names (decide_checkpoint). `independent: true` marks work that does not depend on the points waiting for the creator: do it; `stop: true`: nothing independent is left, stop. `pile` is the single stack of everything waiting (open_stack with `pile.stack`), and `morning` the summary of what happened since the creator last answered. `journey.skipped` lists the steps of the proposed journey the creator skipped: they are never errors, never proposed again, and the creator may take one up again (`step_resume`); never skip a step yourself, the creator says it. `update_available` / `engine_update`: a newer engine to propose once (request_creator_action `engine_update`). `background`, when present, is Zoé's update of the knowledge base pages that are behind, to run beside the step (in another session, never in place of it, never holding a developer). `critique`, when present (`kind`, `why`), is the critique of the structuring document the creator is about to validate, at risk: offer it in one line, once (review.critique `propose` records it; never impose it); `kind: idea` offers to test the idea or write the press release first. `table`, when present (`format: three_views`, `story`, `agents`: product, delivery, quality), offers the three views of a sensitive story whose merge waits for the creator: one line, once per story (chat.table with `table` {`story`} alone records it; never impose it). `hypotheses_due` lists the open hypotheses an evidence arrived for (a proof, a merged story): show them in one line each and let the creator close them or keep them open. `spec_path`, when present, is the short path (one spec instead of the brief, the PRD and the architecture): `choose` (a new product at its framing: propose the path, once, after `docs path`), `grow` (the spec outgrew it, `spec_path_why` says why: offer the full path in one line), `risk` (the spec speaks of sensitive data its scope does not declare: same line) or `carry` (the full path is on again while a spec stands: `docs grow` carries it over). `web_answers`: answers given in the web view to your points (yours = `agent`), until you write something: apply like a chat answer.`reading`, asked with `reading: true` by the agent doing the step only, holds the passages of the PRD, architecture and UX specification that agent needs and the `command` (`docs read`) for the rest: never read a whole document. `refused`: the latest refusal of an agent's call with its gesture `do`; refused twice the same way, `change_method` says not to try again. `stale_sheets` lists story sheets quoting a passage changed since: the scrum master writes each again (`command`) and opens the story's `document` checkpoint again when it was validated. `late_pages` lists knowledge base pages that are behind the code and carry no late notice (the creator's Git settings give the engine no commit): treat them as late, never rely on them. It writes nothing but, where the creator's Git settings allow it, a commit of its own adding the late notice to a knowledge base page.",
9799
9919
  inputSchema: NextInputSchema,
9800
9920
  allowsOlderEngine: () => true,
9801
9921
  async run(context, input) {
9802
9922
  const parsed = NextInputSchema.safeParse(input);
9803
9923
  if (!parsed.success) return fail(invalidInput("next", parsed.error));
9804
- const step = await nextCommand.run(context, {});
9924
+ const step = await nextCommand.run(context, parsed.data.reading === true ? { reading: true } : {});
9805
9925
  if (!step.ok) return step;
9806
9926
  const loaded = await loadMethodConfig(context.files);
9807
9927
  if (loaded instanceof AgentPluggedError) return fail(loaded);
@@ -9841,8 +9961,7 @@ const nextAgentCommand = defineCommand({
9841
9961
  });
9842
9962
  }
9843
9963
  });
9844
- //#endregion
9845
- //#region ../../packages/core/dist/loop/loop-command.js
9964
+ // ../../packages/core/dist/loop/loop-command.js
9846
9965
  const refuse$2 = (field, reason) => invalid$13("loop", field, reason);
9847
9966
  function callOf$1(input) {
9848
9967
  if (input.seen === void 0) return {
@@ -10132,8 +10251,7 @@ const loopAgentCommands = [defineCommand({
10132
10251
  }
10133
10252
  }
10134
10253
  })];
10135
- //#endregion
10136
- //#region ../../packages/core/dist/sensitive/sensitive-commands.js
10254
+ // ../../packages/core/dist/sensitive/sensitive-commands.js
10137
10255
  /**
10138
10256
  * The product key of `product`, checked against the key the journal announces: else
10139
10257
  * `PRODUCT_KEY_MISSING` or `PRODUCT_KEY_MISMATCH`; a keychain failure is reported as such.
@@ -10255,8 +10373,7 @@ const sensitiveCommands = [defineCommand({
10255
10373
  }
10256
10374
  }
10257
10375
  })];
10258
- //#endregion
10259
- //#region ../../packages/core/dist/memory/promotion.js
10376
+ // ../../packages/core/dist/memory/promotion.js
10260
10377
  /** A cap on the entries of the common memory looked at in one call. */
10261
10378
  const MAX_COMMON_ENTRIES$1 = 500;
10262
10379
  /** The ids of the active entries of this machine's common memory, or the reason it is unusable. */
@@ -10488,8 +10605,7 @@ async function keyedState$1(context, config) {
10488
10605
  const listing = await journal.list();
10489
10606
  return (await projectWithKey(context, config, listing)).projection.state;
10490
10607
  }
10491
- //#endregion
10492
- //#region ../../packages/core/dist/memory/propose-retrospective.js
10608
+ // ../../packages/core/dist/memory/propose-retrospective.js
10493
10609
  const base = agentEventCommand({
10494
10610
  name: "propose_retrospective",
10495
10611
  description: "Propose the retrospective of a finished epic (`scope: { kind: \"epic\", id: \"4\" }`) or sprint (`{ kind: \"sprint\", id: \"S-…\" }`) to the creator: `summary` (what you looked at: state, history, deferred work, deviations, reviews), then `lessons` (title, text, optional `tags`, `agents` the lesson is for, `replaces` the active lessons it supersedes: a lesson that contradicts an active one must replace it), `retire` (an active lesson that is no longer true, with its reason) and `actions` (follow-ups, with an optional owner), at least one of them. Read `read_memory` first. The engine refuses with MEMORY_INVALID, nothing written: `unknown_scope`, `scope_not_finished` (a story of the epic is not done, or the sprint is running), `scope_taken` (a retrospective of this scope is open or approved), `lesson_unknown` (a lesson to replace or retire is not active here), `lesson_conflict` (one lesson replaced or retired twice), `memory_full`. Otherwise it writes, in one go, a `memory` checkpoint (counts only, never a text) and the encrypted proposal, and returns the checkpoint (`checkpoint`), the retrospective (`retrospective`) and the id of each lesson (`lessons`). Then present every lesson, retirement and action to the creator in the chat, and ask once; nothing is recorded until they approve (`answer_checkpoint`, then `record_lessons`). Needs the product key (PRODUCT_KEY_MISSING).",
@@ -10582,8 +10698,7 @@ const proposeRetrospectiveCommand = defineCommand({
10582
10698
  });
10583
10699
  }
10584
10700
  });
10585
- //#endregion
10586
- //#region ../../packages/core/dist/memory/read-memory.js
10701
+ // ../../packages/core/dist/memory/read-memory.js
10587
10702
  /** The name of a lesson's file in `memory/lessons/`. */
10588
10703
  const LESSON_FILE = /^L-[0-9A-HJKMNP-TV-Z]{10}-[1-9][0-9]?\.json$/;
10589
10704
  /** A cap on the entries of the common memory read in one call, against a folder gone wild. */
@@ -10747,8 +10862,7 @@ const readMemoryCommand = defineCommand({
10747
10862
  }
10748
10863
  }
10749
10864
  });
10750
- //#endregion
10751
- //#region ../../packages/core/dist/memory/record-lessons.js
10865
+ // ../../packages/core/dist/memory/record-lessons.js
10752
10866
  /**
10753
10867
  * The plan to record an approved retrospective, or the refusal: the checkpoint is a retrospective's
10754
10868
  * and approved; `except` only leaves out, only under reservations; what is retired or replaced is
@@ -10871,8 +10985,7 @@ async function materialize(context, product, key, state, lessons, retired) {
10871
10985
  }
10872
10986
  return written;
10873
10987
  }
10874
- //#endregion
10875
- //#region ../../packages/core/dist/memory/index.js
10988
+ // ../../packages/core/dist/memory/index.js
10876
10989
  /** The retrospective and memory tools exposed to agents, in the order they are used. */
10877
10990
  const memoryCommands = [
10878
10991
  readMemoryCommand,
@@ -10955,8 +11068,7 @@ const memoryCommands = [
10955
11068
  proposePromotionCommand,
10956
11069
  promoteLessonCommand
10957
11070
  ];
10958
- //#endregion
10959
- //#region ../../packages/core/dist/merge/merge-order-commands.js
11071
+ // ../../packages/core/dist/merge/merge-order-commands.js
10960
11072
  /**
10961
11073
  * The two tools of the order of the merges and the conflicts: `get_merge_order` reads
10962
11074
  * the queue the engine computed; `qualify_merge_conflict` records what the story's developer
@@ -11227,8 +11339,7 @@ const mergeOrderAgentCommands = [defineCommand({
11227
11339
  }
11228
11340
  }
11229
11341
  }), qualifyMergeConflictCommand];
11230
- //#endregion
11231
- //#region ../../packages/core/dist/migrate/rename-agents.js
11342
+ // ../../packages/core/dist/migrate/rename-agents.js
11232
11343
  /**
11233
11344
  * The format step `rename-agents`: format 1 → 2. The team is renamed, the
11234
11345
  * developers are chosen by specialty instead of counted, and the quick-lane developer is gone.
@@ -11398,7 +11509,7 @@ function conflict$1(id, path) {
11398
11509
  * (`AGENT_ID_CONFLICT`, naming it): a folder that holds exactly the shipped `SKILL.md` is the
11399
11510
  * method's own (a run of `migrate` interrupted after its files);
11400
11511
  * - the shipped copies of the former agents leave `.agentplugged/agents/`, and the method is
11401
- * copied again (the renamed team, the new developers, the quick-lane skill);
11512
+ * copied again (the renamed team and the new developers);
11402
11513
  * - `overrides/agents/<former>.yaml` moves to its successor's name; one without successor goes to
11403
11514
  * `overrides/agents/retired/`, which `sync` does not read.
11404
11515
  */
@@ -11408,7 +11519,7 @@ async function planRenameAgentsFiles(files, method) {
11408
11519
  if (!(await method.listFiles(`${dir}/${name}`)).includes(path)) return void 0;
11409
11520
  return normalizeText(await method.readText(path));
11410
11521
  };
11411
- for (const name of [...NEW_NAMES, "quick-lane"]) for (const dir of ["agents", "skills"]) {
11522
+ for (const name of NEW_NAMES) for (const dir of ["agents", "skills"]) {
11412
11523
  const folder = `${METHOD_DIR}/${dir}/${name}`;
11413
11524
  if ((await files.listFiles(folder)).length === 0) continue;
11414
11525
  const path = `${folder}/${SKILL_FILE}`;
@@ -11487,8 +11598,7 @@ async function planRenameAgentsFiles(files, method) {
11487
11598
  notes
11488
11599
  };
11489
11600
  }
11490
- //#endregion
11491
- //#region ../../packages/core/dist/migrate/migrations.js
11601
+ // ../../packages/core/dist/migrate/migrations.js
11492
11602
  /**
11493
11603
  * The migrations shipped with the engine, in order. A format change adds its step here, with its
11494
11604
  * tests; a step is never removed nor changed once shipped.
@@ -11603,8 +11713,7 @@ async function planMigrationFiles(steps, files, method) {
11603
11713
  notes
11604
11714
  };
11605
11715
  }
11606
- //#endregion
11607
- //#region ../../packages/core/dist/migrate/migrate-command.js
11716
+ // ../../packages/core/dist/migrate/migrate-command.js
11608
11717
  function isNotARepository(error) {
11609
11718
  return error instanceof AgentPluggedError && error.code === ErrorCode.NOT_A_GIT_REPO;
11610
11719
  }
@@ -11815,8 +11924,7 @@ async function migrate(context, input) {
11815
11924
  ...changes
11816
11925
  });
11817
11926
  }
11818
- //#endregion
11819
- //#region ../../packages/core/dist/publications/publication-command.js
11927
+ // ../../packages/core/dist/publications/publication-command.js
11820
11928
  /**
11821
11929
  * `publication <G-id>` and `publication export <G-id>`, the creator's:
11822
11930
  * the full text of a deliverable, one command away, and the deliverable ready to publish. Both read
@@ -12042,8 +12150,7 @@ const publicationCommand = defineCommand({
12042
12150
  }
12043
12151
  }
12044
12152
  });
12045
- //#endregion
12046
- //#region ../../packages/core/dist/qa/qa-command.js
12153
+ // ../../packages/core/dist/qa/qa-command.js
12047
12154
  const refuse$1 = (field, reason) => invalid$13("acceptance_qa", field, reason);
12048
12155
  /** The accepted command that plays one criterion, or why not. */
12049
12156
  async function playCommand(context, state) {
@@ -12209,8 +12316,7 @@ const qaAgentCommands = [defineCommand({
12209
12316
  }
12210
12317
  }
12211
12318
  })];
12212
- //#endregion
12213
- //#region ../../packages/core/dist/quality/mutations.js
12319
+ // ../../packages/core/dist/quality/mutations.js
12214
12320
  /**
12215
12321
  * The mutations of a change, pure. A mutation is one small, deterministic break of the
12216
12322
  * code a story added: a comparison turned over, a condition negated, a boolean flipped, a constant
@@ -12537,8 +12643,7 @@ function side(text) {
12537
12643
  function describeMutation(mutation) {
12538
12644
  return `${mutation.path}:${mutation.line} ${mutation.kind} \`${side(mutation.from)}\` -> \`${side(mutation.to)}\``;
12539
12645
  }
12540
- //#endregion
12541
- //#region ../../packages/core/dist/quality/mutation-run.js
12646
+ // ../../packages/core/dist/quality/mutation-run.js
12542
12647
  /** A path inside the project: relative, with `/`, no `..`. */
12543
12648
  function insideProject(path) {
12544
12649
  if (path === "" || /^(?:[/\\~]|[A-Za-z]:)/.test(path) || path.includes("\\")) return false;
@@ -12753,8 +12858,7 @@ function mutationCounts(report) {
12753
12858
  errors
12754
12859
  };
12755
12860
  }
12756
- //#endregion
12757
- //#region ../../packages/core/dist/quality/test-gaps.js
12861
+ // ../../packages/core/dist/quality/test-gaps.js
12758
12862
  /** Criteria whose state is a hole in itself. */
12759
12863
  const OPEN = /* @__PURE__ */ new Set([
12760
12864
  "no_test",
@@ -12820,8 +12924,7 @@ function gapLines(gaps) {
12820
12924
  if (gaps.length > 12) lines.push(`+${gaps.length - 12} more`);
12821
12925
  return lines;
12822
12926
  }
12823
- //#endregion
12824
- //#region ../../packages/core/dist/quality/test-grid.js
12927
+ // ../../packages/core/dist/quality/test-grid.js
12825
12928
  /**
12826
12929
  * The graded review of the tests, pure. A reviewer reads the tests and fills a fixed
12827
12930
  * grid: for each criterion, `ok`, `issues` or `not_applicable`, and for each test that falls under a
@@ -12964,8 +13067,7 @@ function markGrid(grid) {
12964
13067
  lines
12965
13068
  };
12966
13069
  }
12967
- //#endregion
12968
- //#region ../../packages/core/dist/quality/review-tests-command.js
13070
+ // ../../packages/core/dist/quality/review-tests-command.js
12969
13071
  const refuse = (field, reason) => invalid$13("review_tests", field, reason);
12970
13072
  /** Criteria of the story and requirements in scope with their tests: the engine reads them, no agent. */
12971
13073
  async function requirementStates(context, state, workspace, only) {
@@ -13193,8 +13295,7 @@ const qualityAgentCommands = [defineCommand({
13193
13295
  }
13194
13296
  }
13195
13297
  })];
13196
- //#endregion
13197
- //#region ../../packages/core/dist/readiness/readiness-command.js
13298
+ // ../../packages/core/dist/readiness/readiness-command.js
13198
13299
  function invalid$3(step, reason) {
13199
13300
  return new AgentPluggedError(ErrorCode.INVALID_ARGUMENTS, "error.invalid_arguments", {
13200
13301
  command: "ready",
@@ -13386,8 +13487,7 @@ const readinessAgentCommands = [defineCommand({
13386
13487
  });
13387
13488
  }
13388
13489
  })];
13389
- //#endregion
13390
- //#region ../../packages/core/dist/write-guard/write-line.js
13490
+ // ../../packages/core/dist/write-guard/write-line.js
13391
13491
  /**
13392
13492
  * One line for the review of a story: the writes the guard refused before they were
13393
13493
  * written, by rule, and the writes it let through in doubt. Undefined when it did nothing, so a
@@ -13406,8 +13506,7 @@ function writeGuardLine(counts) {
13406
13506
  if (total === 0 && counts.doubted === 0) return void 0;
13407
13507
  return `Write guard: ${[total === 0 ? "no write refused" : `${total} write${total === 1 ? "" : "s"} refused before being written (${refused.join(", ")})`, ...counts.doubted === 0 ? [] : [`${counts.doubted} let through in doubt (traced in the journal)`]].join("; ")}.`;
13408
13508
  }
13409
- //#endregion
13410
- //#region ../../packages/core/dist/review/review-export.js
13509
+ // ../../packages/core/dist/review/review-export.js
13411
13510
  /** The file of the review skill that holds a lens, and a pass. */
13412
13511
  const lensFileOf = (lens) => `lens-${lens.replaceAll("_", "-")}.md`;
13413
13512
  const passFileOf = (pass) => `pass-${pass}.md`;
@@ -13521,8 +13620,7 @@ function exportPrompt(input) {
13521
13620
  ""
13522
13621
  ].join("\n");
13523
13622
  }
13524
- //#endregion
13525
- //#region ../../packages/core/dist/review/review-forge.js
13623
+ // ../../packages/core/dist/review/review-forge.js
13526
13624
  /**
13527
13625
  * The forge's side of a review: each review of a closed pass posted on the story's
13528
13626
  * pull request, a comment on its line for each finding on a changed line, the others in the
@@ -13661,8 +13759,7 @@ function deviationComment(deviation) {
13661
13759
  `<sub>${deviation.commit === void 0 ? "" : `commit ${deviation.commit.slice(0, 12)} · `}lifted by the agent that reported it once fixed (\`lift_deviation\`), or by the creator.</sub>`
13662
13760
  ].join("\n\n");
13663
13761
  }
13664
- //#endregion
13665
- //#region ../../packages/core/dist/review/review-free.js
13762
+ // ../../packages/core/dist/review/review-free.js
13666
13763
  /** A ref a free review names: never an option, never a range. */
13667
13764
  const REF = /^[A-Za-z0-9_][\w./@{}^~+-]{0,199}$/;
13668
13765
  /**
@@ -13765,8 +13862,7 @@ async function readPullRequest(context, number, label) {
13765
13862
  return { why: `the forge could not give ${label}` };
13766
13863
  }
13767
13864
  }
13768
- //#endregion
13769
- //#region ../../packages/core/dist/review/review-walkthrough.js
13865
+ // ../../packages/core/dist/review/review-walkthrough.js
13770
13866
  /** The weight of each reason a file is read early: the order is the engine's, not an agent's. */
13771
13867
  const WEIGHTS = {
13772
13868
  blocking: 100,
@@ -14140,8 +14236,7 @@ function uxFlows(text) {
14140
14236
  }
14141
14237
  return flows;
14142
14238
  }
14143
- //#endregion
14144
- //#region ../../packages/core/dist/review/review-commands.js
14239
+ // ../../packages/core/dist/review/review-commands.js
14145
14240
  /**
14146
14241
  * The tools of a story's independent review: `start_review` gives a reviewer the diff
14147
14242
  * of the story's branch in a file, `submit_review` records the review (its verdict computed here)
@@ -14251,6 +14346,17 @@ function reviewProblem(input) {
14251
14346
  });
14252
14347
  }
14253
14348
  }
14349
+ /**
14350
+ * The test command the project declares: its `test` script, as its package manager runs it. A
14351
+ * reader runs that and nothing else to try the tests (a launcher such as `npx` is refused to
14352
+ * agents), so it is told here instead of guessing.
14353
+ */
14354
+ async function declaredTestCommand(context) {
14355
+ try {
14356
+ const plan = await ciPlan(context.files);
14357
+ for (const step of plan.jobs.test) if ("run" in step && /^(?:pnpm|npm|yarn) run test$/.test(step.run)) return step.run;
14358
+ } catch {}
14359
+ }
14254
14360
  /** The reviewer's own findings of the story's earlier passes, with the triage decision only. */
14255
14361
  function ownFindings(story, agent, kind) {
14256
14362
  return (reviewOf(story)?.passes ?? []).flatMap((pass) => {
@@ -14381,6 +14487,7 @@ async function prepareStory(context, input, domains) {
14381
14487
  const truncated = await writeDiffs(context, kind, readers, reading.diff, path, `read the rest with git diff ${story.started?.base}...${reading.head}`);
14382
14488
  const statements = messages === "" ? void 0 : statementsPathOf(path);
14383
14489
  if (statements !== void 0) await context.files.writeText(statements, messages);
14490
+ const testCommand = kind === "qa" ? await declaredTestCommand(context) : void 0;
14384
14491
  const reuse = kind === "qa" ? reuseLines(await reuseOfReview(context, id, reading.head, reading.diff)) : [];
14385
14492
  const reuseReader = readers.find((reader) => reader.reader === "form") ?? readers.find((reader) => reader.reader === "whole");
14386
14493
  const told = readers.map((reader) => reader === reuseReader && reuse.length > 0 ? {
@@ -14416,6 +14523,7 @@ async function prepareStory(context, input, domains) {
14416
14523
  readers: told,
14417
14524
  criteria: (text?.criteria ?? []).map((criterion) => truncate(criterion, 100)),
14418
14525
  ...statements === void 0 ? {} : { statements },
14526
+ ...testCommand === void 0 ? {} : { test_command: testCommand },
14419
14527
  ...guardLine === void 0 ? {} : { guard: guardLine },
14420
14528
  ...followed === void 0 ? {} : {
14421
14529
  trace: followed.line,
@@ -14460,6 +14568,7 @@ async function prepareFree(context, input, domains) {
14460
14568
  const truncated = await writeDiffs(context, "qa", readers, read.diff, path, "the whole diff is the one you were given");
14461
14569
  const statements = statementsText === "" ? void 0 : statementsPathOf(path);
14462
14570
  if (statements !== void 0) await context.files.writeText(statements, statementsText);
14571
+ const testCommand = await declaredTestCommand(context);
14463
14572
  const meta = {
14464
14573
  id,
14465
14574
  source: read.label,
@@ -14497,6 +14606,7 @@ async function prepareFree(context, input, domains) {
14497
14606
  readers,
14498
14607
  criteria: [truncate(intent, 100)],
14499
14608
  ...statements === void 0 ? {} : { statements },
14609
+ ...testCommand === void 0 ? {} : { test_command: testCommand },
14500
14610
  previous: []
14501
14611
  }
14502
14612
  };
@@ -14514,7 +14624,7 @@ async function prepareReview(context, input) {
14514
14624
  const startReviewCommand = defineCommand({
14515
14625
  name: "start_review",
14516
14626
  audience: "agent",
14517
- description: "Start your independent review of a story in review: `kind` is `qa` for the quality reviewer, `security` for the security reviewer; `story` is `<epic>-<story>`; `agent` your own id. The story must be started, in review, not done, with a green (or waived) CI on the head of its branch; you must be an active agent of the review's domain (quality, security), never the story's developer nor `main`. The engine writes the diff of the story's branch since its base to a file (`diff`, from the product's root) and gives the changed files, the story's file, its requirements, whether it concerns security (`security`: `required`, `reasons`: paths, words, reviewer, qa_flag), your own findings of the earlier passes with how the developer sorted them, and the `lenses` to run, each chosen by the engine from the change's risk with `why`, and the story's numbered `criteria`; `more` adds lenses the creator asked for. Read the diff file, the story and the documents it cites — never the other reviewer's notes or comments, never the author's reasoning — then call submit_review with the same `commit`. Refused with REVIEW_NOT_POSSIBLE (unknown_story, not_started, done, not_independent, not_reviewer, not_in_review, ci_not_green: read the CI first, head_moved: the branch moved since its CI was read, already_reviewed, same_reviewer, security_not_required: this story needs no security review, branch_missing, no_diff). Nothing is written in the journal. A free review of a change that belongs to no story: instead of `story`, give `free`: its `intent` in one sentence (the judge's only criterion) and a `source` (`uncommitted`, a range `<from>..<to>`, `branch:<name>` against the main branch, `pr:<number>`) or a pasted `diff`; only the quality review (`kind` qa), by an agent of the quality domain. The engine reads the diff itself and returns the same lenses and readers, with `commit` naming the diff read; refused with source_invalid (and why) or free_not_reviewer. Readers whose entry has `passes` run those short passes after their lenses, and `statements` is the file of the commit messages they try.",
14627
+ description: "Start your independent review of a story in review: `kind` is `qa` for the quality reviewer, `security` for the security reviewer; `story` is `<epic>-<story>`; `agent` your own id. The story must be started, in review, not done, with a green (or waived) CI on the head of its branch; you must be an active agent of the review's domain (quality, security), never the story's developer nor `main`. The engine writes the diff of the story's branch since its base to a file (`diff`, from the product's root) and gives the changed files, the story's file, its requirements, whether it concerns security (`security`: `required`, `reasons`: paths, words, reviewer, qa_flag), your own findings of the earlier passes with how the developer sorted them, and the `lenses` to run, each chosen by the engine from the change's risk with `why`, and the story's numbered `criteria`; `more` adds lenses the creator asked for. Read the diff file, the story and the documents it cites — never the other reviewer's notes or comments, never the author's reasoning — then call submit_review with the same `commit`. Refused with REVIEW_NOT_POSSIBLE (unknown_story, not_started, done, not_independent, not_reviewer, not_in_review, ci_not_green: read the CI first, head_moved: the branch moved since its CI was read, already_reviewed, same_reviewer, security_not_required: this story needs no security review, branch_missing, no_diff). Nothing is written in the journal. A free review of a change that belongs to no story: instead of `story`, give `free`: its `intent` in one sentence (the judge's only criterion) and a `source` (`uncommitted`, a range `<from>..<to>`, `branch:<name>` against the main branch, `pr:<number>`) or a pasted `diff`; only the quality review (`kind` qa), by an agent of the quality domain. The engine reads the diff itself and returns the same lenses and readers, with `commit` naming the diff read; refused with source_invalid (and why) or free_not_reviewer. Readers whose entry has `passes` run those short passes after their lenses, and `statements` is the file of the commit messages they try. `test_command` is the project's declared test command: a reader who runs the tests runs that, never a launcher such as `npx`, and reads the changes with `git diff`, `git log` or `git show` from the product's folder (no `-C`).",
14518
14628
  inputSchema: StartReviewInputSchema,
14519
14629
  async run(context, input) {
14520
14630
  const parsed = StartReviewInputSchema.safeParse(input);
@@ -14706,12 +14816,22 @@ function loopCheckpoint(id, blocking) {
14706
14816
  ...checkpointPayload({
14707
14817
  type: "permission",
14708
14818
  risk: "medium",
14709
- title: truncate(`Review loop of story ${id}: 5 passes without agreement`, 120),
14710
- summary: truncate(`Story ${id} went through 5 review passes closed with a blocking finding (${blocking} blocking finding(s) in the last one). Approve to allow 5 more passes; refuse to keep the story out of review while you settle it with its developer.`, 2e3),
14819
+ title: truncate(`Review loop of story ${id}: 2 passes without agreement`, 120),
14820
+ summary: truncate(`Story ${id} went through 2 review passes that each ended with changes to make (${blocking} blocking finding(s) in the last one). The reviewer and the developer do not agree. Approve to allow 2 more passes, merge it as it is with the remaining findings accepted, or refuse to keep the story out of review while you settle it with its developer.`, 2e3),
14711
14821
  blocks: [{
14712
14822
  action: "story.review",
14713
14823
  story: id
14714
- }]
14824
+ }],
14825
+ options: [{
14826
+ id: REVIEW_LOOP_OPTIONS.more,
14827
+ label: `2 more review passes`,
14828
+ consequence: "The developer fixes again and the reviewer reviews the new commit."
14829
+ }, {
14830
+ id: REVIEW_LOOP_OPTIONS.asIs,
14831
+ label: "Merge as it is, remaining findings accepted",
14832
+ consequence: "The story's review is skipped for this story: its merge is proposed without another pass, the findings left stay as they are."
14833
+ }],
14834
+ recommendation: REVIEW_LOOP_OPTIONS.more
14715
14835
  }),
14716
14836
  source: "review_loop"
14717
14837
  };
@@ -14720,7 +14840,7 @@ function loopCheckpoint(id, blocking) {
14720
14840
  const storyOf = (input) => input.story;
14721
14841
  const recordReview = agentEventCommand({
14722
14842
  name: "submit_review",
14723
- description: "Submit your independent review of a story, after start_review: the same `kind` and `commit`, a `summary` of your review, and your `findings` (each: `severity` blocking, should_fix or minor; a one-line `title`; an optional `detail`; the `path` of the file as the diff names it and the `line` of its new side, when it is about a line). The engine computes the verdict (a blocking finding fails the review; one to fix gives pass with reservations; else pass), records the review, and the quality reviewer may ask for a security review (`security: true`). The judge's report also rules on each finding of the lenses (`judge.findings`: `<lens>#<rank>`, `confirmed` with its final severity, `refuted` with the place that proves it, `undecided`): a refuted finding is counted and never shown, an undecided one never blocks; a lens (`{lens, silent: true}`) or the judge (`{silent: true}`) that gave nothing is declared in its place, and the review then says it is possibly incomplete. Without a `story`, the `commit` start_review returned names a free review, recorded in the journal with no story. Once the pass has every review it needs (quality, and security when the story concerns it), it is closed: with a failed review, the story goes back to its developer, who sorts each finding (triage_review); without one, the engine opens the story's merge checkpoint. After 5 passes closed with a failed review, the engine opens a checkpoint for the creator. A closed pass is posted on the pull request by the engine, a comment on each finding's line (`published`: posted, skipped with the reason, or failed: call publish_review later). Never post or read comments on the pull request yourself. Refused with REVIEW_NOT_POSSIBLE like start_review, and head_moved when `commit` is not the head of the branch any more. With `lenses` (one report per lens `start_review` gave, the security review only the security lens) and `judge` (the fresh-context pass, quality only), leave `findings` empty: the engine refuses reports that are not whole (`report_invalid`, with what is missing), merges the same finding seen twice at its strictest severity, links each to its criterion, and computes the verdict. Returns the review's id (`review`: R-…), its verdict and its pass.",
14843
+ description: "Submit your independent review of a story, after start_review: the same `kind` and `commit`, a `summary` of your review, and your `findings` (each: `severity` blocking, should_fix or minor; a one-line `title`; an optional `detail`; the `path` of the file as the diff names it and the `line` of its new side, when it is about a line). The engine computes the verdict (a blocking finding fails the review; one to fix gives pass with reservations; else pass), records the review, and the quality reviewer may ask for a security review (`security: true`). The judge's report also rules on each finding of the lenses (`judge.findings`: `<lens>#<rank>`, `confirmed` with its final severity, `refuted` with the place that proves it, `undecided`): a refuted finding is counted and never shown, an undecided one never blocks; a lens (`{lens, silent: true}`) or the judge (`{silent: true}`) that gave nothing is declared in its place, and the review then says it is possibly incomplete. Without a `story`, the `commit` start_review returned names a free review, recorded in the journal with no story. Once the pass has every review it needs (quality, and security when the story concerns it), it is closed: with a failed review, the story goes back to its developer, who sorts each finding (triage_review); without one, the engine opens the story's merge checkpoint. After 2 passes closed with a failed review, the engine stops the loop and opens a checkpoint for the creator: one question about the disagreement. A closed pass is posted on the pull request by the engine, a comment on each finding's line (`published`: posted, skipped with the reason, or failed: call publish_review later). Never post or read comments on the pull request yourself. Refused with REVIEW_NOT_POSSIBLE like start_review, and head_moved when `commit` is not the head of the branch any more. With `lenses` (one report per lens `start_review` gave, the security review only the security lens) and `judge` (the fresh-context pass, quality only), leave `findings` empty: the engine refuses reports that are not whole (`report_invalid`, with what is missing), merges the same finding seen twice at its strictest severity, links each to its criterion, and computes the verdict. Returns the review's id (`review`: R-…), its verdict and its pass.",
14724
14844
  inputSchema: SubmitReviewInputSchema,
14725
14845
  needsState: () => true,
14726
14846
  replanned: true,
@@ -15103,14 +15223,26 @@ const submitReviewCommand = defineCommand({
15103
15223
  });
15104
15224
  const triageReviewCommand = agentEventCommand({
15105
15225
  name: "triage_review",
15106
- description: "Sort the findings of your story's closed review passes: you are the story's developer. Each item names a `finding` (R-…-n, from get_review), its `decision` (`fix`: you fix it on the story's branch; `defer`: you recorded it first with defer_work, linked to the story, and give its `deferred` id D-…; `reject`: with its `reason`), and its `root_cause` in one line: findings of one cause carry the same words. Sort before you send the story back to review: the merge waits until every finding is sorted. Refused with REVIEW_NOT_POSSIBLE (not_developer, unknown_finding, pass_open: a pass not closed yet, already_triaged, deferred_unknown, done, not_started).",
15226
+ description: "Sort the findings of your story's closed review passes: you are the story's developer. Each item names a `finding` (R-…-n, from get_review), its `decision` (`fix`: you fix it on the story's branch; `defer`: you recorded it first with defer_work, linked to the story, and give its `deferred` id D-…; `reject`: with its `reason`), and its `root_cause` in one line: findings of one cause carry the same words. Sort before you send the story back to review: the merge waits until every finding is sorted. A `fix` on a pass that approved the story sends it back to you (in progress): fix it, then send it to review again for a new pass, since the commit reviewed is no longer the one to merge. Refused with REVIEW_NOT_POSSIBLE (not_developer, unknown_finding, pass_open: a pass not closed yet, already_triaged, deferred_unknown, done, not_started).",
15107
15227
  inputSchema: TriageReviewInputSchema,
15108
15228
  needsState: () => true,
15109
- events: ({ story, items }) => ({ events: [{
15110
- type: REVIEW_EVENT_TYPES.triaged,
15111
- story,
15112
- payload: { items: items.map((item) => defined({ ...item })) }
15113
- }] }),
15229
+ events: ({ story: id, items }, state) => {
15230
+ const events = [{
15231
+ type: REVIEW_EVENT_TYPES.triaged,
15232
+ story: id,
15233
+ payload: { items: items.map((item) => defined({ ...item })) }
15234
+ }];
15235
+ const projected = state ?? {};
15236
+ const story = storyIn(projected, id);
15237
+ const fixedPasses = new Set(items.filter((item) => item.decision === "fix").map((item) => findFinding(story, item.finding)?.pass).filter((pass) => pass !== void 0 && pass.outcome === "approved" && !changesAfter(pass)));
15238
+ const checkpoints = Object.values(checkpointsOf$1(projected));
15239
+ if (story?.status === "in_review" && fixedPasses.size > 0 && reviewLoopReached(story, id, checkpoints, fixedPasses.size)) events.push({
15240
+ type: CHECKPOINT_EVENT_TYPES.opened,
15241
+ story: id,
15242
+ payload: loopCheckpoint(id, 0)
15243
+ });
15244
+ return { events };
15245
+ },
15114
15246
  check: ({ agent, story: id, items }, state) => {
15115
15247
  const story = storyIn(state, id);
15116
15248
  if (story?.started === void 0) return reviewNotPossible(id, "not_started");
@@ -15269,8 +15401,7 @@ const reviewAgentCommands = [
15269
15401
  }
15270
15402
  })
15271
15403
  ];
15272
- //#endregion
15273
- //#region ../../packages/core/dist/rules/rules-command.js
15404
+ // ../../packages/core/dist/rules/rules-command.js
15274
15405
  /**
15275
15406
  * Writes `rules.<action>` into the text of `method.yaml`, keeping comments, other keys and line
15276
15407
  * endings. A value equal to the default removes the key (the default is never pinned); without
@@ -15365,8 +15496,7 @@ const rulesCommand = defineCommand({
15365
15496
  });
15366
15497
  }
15367
15498
  });
15368
- //#endregion
15369
- //#region ../../packages/core/dist/table/rooms.js
15499
+ // ../../packages/core/dist/table/rooms.js
15370
15500
  /**
15371
15501
  * Saved rooms of the round table. A room is two plain files the creator can read
15372
15502
  * and edit, beside the product's other files and never in the journal: `<id>.yaml` (the cast, the
@@ -15493,8 +15623,7 @@ async function recallRoom(files, id, active) {
15493
15623
  }
15494
15624
  };
15495
15625
  }
15496
- //#endregion
15497
- //#region ../../packages/core/dist/table/table-commands.js
15626
+ // ../../packages/core/dist/table/table-commands.js
15498
15627
  function invalid$2(step, problems) {
15499
15628
  return new AgentPluggedError(ErrorCode.INVALID_ARGUMENTS, "error.invalid_arguments", {
15500
15629
  command: "round_table",
@@ -15651,8 +15780,7 @@ const roundTableAgentCommands = [defineCommand({
15651
15780
  });
15652
15781
  }
15653
15782
  })];
15654
- //#endregion
15655
- //#region ../../packages/core/dist/team/pause-team-command.js
15783
+ // ../../packages/core/dist/team/pause-team-command.js
15656
15784
  /**
15657
15785
  * `pause_team`: Noah holds the whole team once the creator agreed to it in the conversation (he
15658
15786
  * noticed that requests to change course piled up, proposed the pause, and heard yes). It writes
@@ -15677,8 +15805,7 @@ const pauseTeamCommand = agentEventCommand({
15677
15805
  if (open !== void 0) return new AgentPluggedError(ErrorCode.TEAM_ALREADY_PAUSED, "error.team_already_paused", { since: open.since });
15678
15806
  }
15679
15807
  });
15680
- //#endregion
15681
- //#region ../../packages/core/dist/test-frame/test-runners.js
15808
+ // ../../packages/core/dist/test-frame/test-runners.js
15682
15809
  /** The runners of unit and API tests (an API test is a test of the same runner that calls the service). */
15683
15810
  const API_RUNNERS = [
15684
15811
  "vitest",
@@ -15900,8 +16027,7 @@ function installCommand(ecosystem, packages, launcher) {
15900
16027
  default: return null;
15901
16028
  }
15902
16029
  }
15903
- //#endregion
15904
- //#region ../../packages/core/dist/test-frame/tests-setup.js
16030
+ // ../../packages/core/dist/test-frame/tests-setup.js
15905
16031
  const STACK_FILES = [
15906
16032
  ["node", ["package.json"]],
15907
16033
  ["python", [
@@ -16128,8 +16254,7 @@ const testsCommand = defineCommand({
16128
16254
  });
16129
16255
  }
16130
16256
  });
16131
- //#endregion
16132
- //#region ../../packages/core/dist/trace/trace-commands.js
16257
+ // ../../packages/core/dist/trace/trace-commands.js
16133
16258
  function invalid(command, field, reason) {
16134
16259
  return new AgentPluggedError(ErrorCode.INVALID_ARGUMENTS, "error.invalid_arguments", {
16135
16260
  command,
@@ -16173,7 +16298,7 @@ const reportDeviation = agentEventCommand({
16173
16298
  })
16174
16299
  }] };
16175
16300
  },
16176
- check: ({ story, requirements }, state, { prepared }) => {
16301
+ check: ({ agent, story, requirements }, state, { prepared }) => {
16177
16302
  const cited = prepared?.requirements;
16178
16303
  if (cited === void 0) return notReportable(story, "unknown_story");
16179
16304
  const missing = requirements.find((requirement) => !cited.includes(requirement));
@@ -16182,6 +16307,7 @@ const reportDeviation = agentEventCommand({
16182
16307
  const projected = Object.hasOwn(stories, story) ? stories[story] : void 0;
16183
16308
  if (tracedStoryStatus(state, story) === "done") return notReportable(story, "done");
16184
16309
  if (projected?.started === void 0) return notReportable(story, "not_started");
16310
+ if (isStoryDeveloper(projected, agent)) return notReportable(story, "own_story");
16185
16311
  }
16186
16312
  });
16187
16313
  /**
@@ -16461,8 +16587,7 @@ const traceAgentCommands = [
16461
16587
  resolveDeviationCommand,
16462
16588
  getTraceCommand
16463
16589
  ];
16464
- //#endregion
16465
- //#region ../../packages/core/dist/trust/install-plan.js
16590
+ // ../../packages/core/dist/trust/install-plan.js
16466
16591
  /** Characters a shell reads: a word that holds one is never a package. */
16467
16592
  const SHELL_CHARS = /[$`;|&<>(){}*?~\\"'\r\n]/;
16468
16593
  /**
@@ -17576,8 +17701,7 @@ function installCheckpoint(agent, request, trust, level) {
17576
17701
  request: action
17577
17702
  };
17578
17703
  }
17579
- //#endregion
17580
- //#region ../../packages/core/dist/trust/trust-commands.js
17704
+ // ../../packages/core/dist/trust/trust-commands.js
17581
17705
  /** Aborts a write the gate does not need (the checkpoint already exists, or none is needed). */
17582
17706
  var NoCheckpoint = class extends Error {
17583
17707
  decision;
@@ -17909,8 +18033,7 @@ const trustCommands = [
17909
18033
  requestActionCommand,
17910
18034
  checkActionCommand
17911
18035
  ];
17912
- //#endregion
17913
- //#region ../../packages/core/dist/trust-devices/trust-command.js
18036
+ // ../../packages/core/dist/trust-devices/trust-command.js
17914
18037
  /**
17915
18038
  * `agentplugged trust dismiss`: the way
17916
18039
  * out of `SECURITY_ROOT_CHANGED`. At the creator's terminal only; it names the events that raised
@@ -18003,8 +18126,7 @@ const trustDevicesCommand = defineCommand({
18003
18126
  }
18004
18127
  }
18005
18128
  });
18006
- //#endregion
18007
- //#region ../../packages/core/dist/write-guard/test-rules.js
18129
+ // ../../packages/core/dist/write-guard/test-rules.js
18008
18130
  const FAMILIES = {
18009
18131
  js: "js",
18010
18132
  jsx: "js",
@@ -18704,8 +18826,7 @@ function lineCount(text) {
18704
18826
  for (let at = text.indexOf("\n"); at !== -1; at = text.indexOf("\n", at + 1)) count += 1;
18705
18827
  return text.endsWith("\n") ? count - 1 : count;
18706
18828
  }
18707
- //#endregion
18708
- //#region ../../packages/core/dist/write-guard/write-tests.js
18829
+ // ../../packages/core/dist/write-guard/write-tests.js
18709
18830
  /**
18710
18831
  * The path relative to the product (or to the working copy of one of its stories, which lives next
18711
18832
  * to it in `<product>.worktrees/<story>/`), or undefined outside both.
@@ -19100,8 +19221,7 @@ const checkWriteCommand = defineCommand({
19100
19221
  }
19101
19222
  });
19102
19223
  DOCUMENT_PATHS.find((dir) => dir.endsWith("/stories"));
19103
- //#endregion
19104
- //#region ../../packages/core/dist/git/detect-workflow.js
19224
+ // ../../packages/core/dist/git/detect-workflow.js
19105
19225
  /**
19106
19226
  * What `init` reads of a product that already has a way of working, to propose it as the
19107
19227
  * default instead of replacing it: the branches (a staging branch next to the main one), the CI files
@@ -19223,8 +19343,7 @@ async function detectGitWorkflow(context) {
19223
19343
  facts
19224
19344
  };
19225
19345
  }
19226
- //#endregion
19227
- //#region ../../packages/core/dist/init/install-channel.js
19346
+ // ../../packages/core/dist/init/install-channel.js
19228
19347
  /**
19229
19348
  * The channels, other than npm, through which a creator can reach the method: the
19230
19349
  * tool's own store installs a thin wrapper, and that wrapper has the creator run `init` with
@@ -19252,8 +19371,7 @@ async function readInstallChannel(files) {
19252
19371
  const text = (await files.readText(INSTALL_CHANNEL_PATH)).trim();
19253
19372
  return INSTALL_CHANNELS.includes(text) ? text : void 0;
19254
19373
  }
19255
- //#endregion
19256
- //#region ../../packages/core/dist/sync/engine-command.js
19374
+ // ../../packages/core/dist/sync/engine-command.js
19257
19375
  /**
19258
19376
  * The command that runs the engine from a shell on this machine, as `method.yaml` declares it
19259
19377
  *: the creator's `mcp` launch, else `npx -y agentplugged@<engine_version>`. Undefined
@@ -19269,8 +19387,7 @@ async function resolveEngineCommand(files) {
19269
19387
  return;
19270
19388
  }
19271
19389
  }
19272
- //#endregion
19273
- //#region ../../packages/core/dist/trust-devices/root-pin.js
19390
+ // ../../packages/core/dist/trust-devices/root-pin.js
19274
19391
  /** The pin a text holds, or undefined when it is not a pin whose identifier is its key's. */
19275
19392
  function parseRootPin(text) {
19276
19393
  let value;
@@ -19292,8 +19409,7 @@ function rootPinText(pin) {
19292
19409
  public_key: pin.public_key
19293
19410
  }, null, 2)}\n`;
19294
19411
  }
19295
- //#endregion
19296
- //#region ../../packages/core/dist/chat/elicitation-hooks.js
19412
+ // ../../packages/core/dist/chat/elicitation-hooks.js
19297
19413
  /**
19298
19414
  * Hooks of the AI tool that could answer the engine's forms in the creator's place:
19299
19415
  * Claude Code runs `Elicitation` hooks when an MCP server asks for a form, and `ElicitationResult`
@@ -19363,8 +19479,7 @@ const QUESTION_TOOL_HOOK_EVENTS = ["PreToolUse", "PermissionRequest"];
19363
19479
  function questionToolHookIn(settings, tool) {
19364
19480
  return hookIn(settings, QUESTION_TOOL_HOOK_EVENTS, tool, (commands) => Array.isArray(commands) && commands.every((command) => isDecisionHook(command)));
19365
19481
  }
19366
- //#endregion
19367
- //#region ../../packages/core/dist/sync/codex-trust.js
19482
+ // ../../packages/core/dist/sync/codex-trust.js
19368
19483
  /**
19369
19484
  * Codex's approval of the project's hooks (layer 2). Codex runs a hook of a project only
19370
19485
  * once the creator approved it, and records the approval in the user's `~/.codex/config.toml`:
@@ -19516,8 +19631,7 @@ function mergeTrust(input) {
19516
19631
  }
19517
19632
  /** Thrown inside the merge when the file names a key in a form it does not know. */
19518
19633
  var UnknownSpelling = class extends Error {};
19519
- //#endregion
19520
- //#region ../../packages/core/dist/trust/antigravity-guard.js
19634
+ // ../../packages/core/dist/trust/antigravity-guard.js
19521
19635
  /** The call of a hook's input (`toolCall`), or undefined when it has none. */
19522
19636
  function callOf(input) {
19523
19637
  if (!isRecord(input) || !isRecord(input.toolCall)) return void 0;
@@ -20046,8 +20160,7 @@ async function recordToolRead(context, call, conversation) {
20046
20160
  });
20047
20161
  } catch {}
20048
20162
  }
20049
- //#endregion
20050
- //#region ../../packages/core/dist/trust/codex-guard.js
20163
+ // ../../packages/core/dist/trust/codex-guard.js
20051
20164
  /**
20052
20165
  * The permission rules of the product applied before each tool Codex runs: what the
20053
20166
  * project's `PreToolUse` hook asks the engine (`agentplugged hook codex pre-tool`), and the reads of
@@ -20167,8 +20280,7 @@ async function recordCodexRead(context, input, session) {
20167
20280
  });
20168
20281
  } catch {}
20169
20282
  }
20170
- //#endregion
20171
- //#region ../../packages/core/dist/trust/cursor-guard.js
20283
+ // ../../packages/core/dist/trust/cursor-guard.js
20172
20284
  /**
20173
20285
  * The permission rules of the product applied before each command and each file write Cursor runs
20174
20286
  *: what the project's hooks ask the engine (`agentplugged hook cursor pre-tool`), and the
@@ -20250,8 +20362,7 @@ const CURSOR_FLAVOR = {
20250
20362
  uncheckedReason: CURSOR_UNCHECKED_REASON,
20251
20363
  guardsShellReads: true
20252
20364
  };
20253
- //#endregion
20254
- //#region ../../packages/core/dist/doctor/environment-probe.js
20365
+ // ../../packages/core/dist/doctor/environment-probe.js
20255
20366
  /**
20256
20367
  * Port through which core looks at the machine for `doctor`: processes, files, ports,
20257
20368
  * memory, keychain. Core never touches them directly. No method may throw for an expected failure:
@@ -20267,8 +20378,7 @@ function envValue(env, name, windows) {
20267
20378
  const key = Object.keys(env).find((candidate) => candidate.toUpperCase() === upper);
20268
20379
  return key === void 0 ? void 0 : env[key];
20269
20380
  }
20270
- //#endregion
20271
- //#region ../../packages/core/dist/mcp-responses.js
20381
+ // ../../packages/core/dist/mcp-responses.js
20272
20382
  const ACK = {
20273
20383
  kind: "ack",
20274
20384
  max: 120
@@ -20720,8 +20830,7 @@ function withoutEventNoise(value) {
20720
20830
  if (typeof value.at !== "string") return value;
20721
20831
  return without(value, ["type", "at"]);
20722
20832
  }
20723
- //#endregion
20724
- //#region ../../packages/core/dist/index.js
20833
+ // ../../packages/core/dist/index.js
20725
20834
  /** Every command shipped by core. */
20726
20835
  const builtInCommands = [
20727
20836
  initCommand,
@@ -20789,8 +20898,7 @@ provideToolManual(builtInCommands);
20789
20898
  function createCommandRegistry() {
20790
20899
  return new CommandRegistry(builtInCommands);
20791
20900
  }
20792
- //#endregion
20793
- //#region ../../packages/adapters-tools/dist/node-tool-probe.js
20901
+ // ../../packages/adapters-tools/dist/node-tool-probe.js
20794
20902
  const DEFAULT_TIMEOUT_MS = 1e4;
20795
20903
  /** Enough for any version banner; anything longer is cut. */
20796
20904
  const MAX_OUTPUT = 65536;
@@ -20997,8 +21105,7 @@ async function readManifestVersion(path) {
20997
21105
  return;
20998
21106
  }
20999
21107
  }
21000
- //#endregion
21001
- //#region ../../packages/adapters-tools/dist/node-eval-agent.js
21108
+ // ../../packages/adapters-tools/dist/node-eval-agent.js
21002
21109
  const PASSED_ENV = [
21003
21110
  "PATH",
21004
21111
  "PATHEXT",
@@ -21302,8 +21409,7 @@ var NodeEvalAgent = class {
21302
21409
  });
21303
21410
  }
21304
21411
  };
21305
- //#endregion
21306
- //#region ../../packages/adapters-tools/dist/node-proof-runner.js
21412
+ // ../../packages/adapters-tools/dist/node-proof-runner.js
21307
21413
  /** How long after the program ended its pipes may stay open (a daemon it started) before the run is over. */
21308
21414
  const PIPE_GRACE_MS = 1e3;
21309
21415
  /** How long a stopped command has to end before the run is reported anyway. */
@@ -21757,8 +21863,7 @@ var NodeMutationLab = class {
21757
21863
  return { copy: new NodeMutationCopy(folder, root, inner === "" ? root : join(root, inner), this.#options) };
21758
21864
  }
21759
21865
  };
21760
- //#endregion
21761
- //#region ../../packages/adapters-tools/dist/node-usage-traces.js
21866
+ // ../../packages/adapters-tools/dist/node-usage-traces.js
21762
21867
  /**
21763
21868
  * The traces of the AI tools on this machine, read for the product's folder and the
21764
21869
  * working copies of its stories. Claude Code keeps one folder per project under
@@ -22030,8 +22135,7 @@ async function firstLineCwd(path) {
22030
22135
  await handle?.close();
22031
22136
  }
22032
22137
  }
22033
- //#endregion
22034
- //#region src/product-root.ts
22138
+ // src/product-root.ts
22035
22139
  /**
22036
22140
  * The product's configuration, relative to its root. The same path as the core's
22037
22141
  * `METHOD_CONFIG_PATH`, written here so that the launcher of the MCP server (which loads as little
@@ -22054,5 +22158,4 @@ function productRootOf(cwd) {
22054
22158
  }
22055
22159
  return cwd;
22056
22160
  }
22057
- //#endregion
22058
- export { engineDir as $, resolveEngineCommand as A, planOf as B, codexHookHashes as C, questionToolHookIn as D, elicitationHookIn as E, STATE_CACHE_PATH as F, DEFAULT_THRESHOLDS as G, compare as H, evalStatus as I, casesDigest as J, EVALS_DIR as K, loadSkill as L, validateInstallChannel as M, writeInstallChannel as N, parseRootPin as O, detectGitWorkflow as P, agentpluggedHome as Q, suggestStarter as R, recordToolRead as S, planCodexTrust as T, keep as U, selection as V, CASES_FILE as W, productRootOf$1 as X, readCases as Y, ENGINE_PACKAGE as Z, codexCallOf as _, NodeProofRunner as a, callOf as b, createCommandRegistry as c, DEFAULT_PATHEXT as d, engineEntry as et, envValue as f, CODEX_FLAVOR as g, cursorSessionOf as h, NodeMutationLab as i, readInstallChannel as j, rootPinText as k, ResponseMemory as l, cursorCallOf as m, productRootOf as n, isInstalledEngine as nt, NodeEvalAgent as o, CURSOR_FLAVOR as p, REFERENCE_FILE as q, NodeUsageTraces as r, isReleaseVersion as rt, NodeToolProbe as s, PRODUCT_CONFIG_PATH as t, installedEntry as tt, shapeResponse as u, codexSessionOf as v, codexTrustSupported as w, guardToolCall as x, recordCodexRead as y, evaluate as z };
22161
+ export { agentpluggedHome as $, resolveEngineCommand as A, planOf as B, codexHookHashes as C, questionToolHookIn as D, elicitationHookIn as E, STATE_CACHE_PATH as F, DEFAULT_THRESHOLDS as G, compare as H, evalStatus as I, casesDigest as J, EVALS_DIR as K, loadSkill as L, validateInstallChannel as M, writeInstallChannel as N, parseRootPin as O, detectGitWorkflow as P, ENGINE_PACKAGE as Q, suggestStarter as R, recordToolRead as S, planCodexTrust as T, keep as U, selection as V, CASES_FILE as W, checkCallCommand as X, readCases as Y, productRootOf$1 as Z, codexCallOf as _, NodeProofRunner as a, callOf as b, createCommandRegistry as c, DEFAULT_PATHEXT as d, engineDir as et, envValue as f, CODEX_FLAVOR as g, cursorSessionOf as h, NodeMutationLab as i, isReleaseVersion as it, readInstallChannel as j, rootPinText as k, ResponseMemory as l, cursorCallOf as m, productRootOf as n, installedEntry as nt, NodeEvalAgent as o, CURSOR_FLAVOR as p, REFERENCE_FILE as q, NodeUsageTraces as r, isInstalledEngine as rt, NodeToolProbe as s, PRODUCT_CONFIG_PATH as t, engineEntry as tt, shapeResponse as u, codexSessionOf as v, codexTrustSupported as w, guardToolCall as x, recordCodexRead as y, evaluate as z };