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.
- package/README.md +3 -2
- package/dist/agent-commands.js +25473 -24861
- package/dist/bin.js +1 -2
- package/dist/cli.js +1 -2
- package/dist/dist.js +12205 -0
- package/dist/esm.js +8 -16
- package/dist/forge-follow.js +5 -6
- package/dist/hash.js +9 -12083
- package/dist/helpers.js +257 -514
- package/dist/launcher-env.js +1 -2
- package/dist/launcher.js +3 -4
- package/dist/libsodium-wrappers.js +2 -4
- package/dist/libsodium-wrappers2.js +2 -4
- package/dist/main.js +791 -152
- package/dist/method/agents/alex/SKILL.md +13 -29
- package/dist/method/agents/alex/agent.yaml +1 -1
- package/dist/method/agents/basile/SKILL.md +44 -0
- package/dist/method/agents/basile/agent.yaml +69 -0
- package/dist/method/agents/chloe/SKILL.md +12 -25
- package/dist/method/agents/chloe/agent.yaml +3 -3
- package/dist/method/agents/ethan/SKILL.md +8 -9
- package/dist/method/agents/ethan/agent.yaml +9 -8
- package/dist/method/agents/hugo/SKILL.md +8 -8
- package/dist/method/agents/hugo/agent.yaml +9 -8
- package/dist/method/agents/iris/SKILL.md +4 -10
- package/dist/method/agents/izzy/SKILL.md +68 -91
- package/dist/method/agents/izzy/agent.yaml +8 -15
- package/dist/method/agents/jade/SKILL.md +7 -9
- package/dist/method/agents/jade/agent.yaml +9 -8
- package/dist/method/agents/julien/SKILL.md +38 -58
- package/dist/method/agents/lina/SKILL.md +7 -9
- package/dist/method/agents/lina/agent.yaml +9 -8
- package/dist/method/agents/lou/SKILL.md +4 -11
- package/dist/method/agents/lou/agent.yaml +2 -2
- package/dist/method/agents/maya/SKILL.md +12 -19
- package/dist/method/agents/maya/agent.yaml +1 -3
- package/dist/method/agents/milo/SKILL.md +21 -32
- package/dist/method/agents/noah/SKILL.md +109 -63
- package/dist/method/agents/noah/agent.yaml +14 -31
- package/dist/method/agents/noah/references/decisions.md +61 -121
- package/dist/method/agents/noah/references/environment.md +30 -70
- package/dist/method/agents/noah/references/facts.md +22 -11
- package/dist/method/agents/noah/references/journey.md +26 -78
- package/dist/method/agents/noah/references/team.md +63 -190
- package/dist/method/agents/omar/SKILL.md +12 -28
- package/dist/method/agents/omar/agent.yaml +1 -1
- package/dist/method/agents/quentin/SKILL.md +7 -15
- package/dist/method/agents/quentin/agent.yaml +4 -2
- package/dist/method/agents/sam/SKILL.md +6 -8
- package/dist/method/agents/sam/agent.yaml +9 -8
- package/dist/method/agents/stella/SKILL.md +6 -14
- package/dist/method/agents/stella/agent.yaml +1 -1
- package/dist/method/agents/tess/SKILL.md +7 -14
- package/dist/method/agents/tess/agent.yaml +2 -2
- package/dist/method/agents/zoe/SKILL.md +9 -21
- package/dist/method/doctor.yaml +23 -4
- package/dist/method/models.yaml +12 -0
- package/dist/method/skills/acceptance-qa/SKILL.md +1 -1
- package/dist/method/skills/acceptance-qa/references/run.md +24 -32
- package/dist/method/skills/acceptance-qa/references/scenarios.md +16 -19
- package/dist/method/skills/acceptance-qa/references/verdicts.md +10 -16
- package/dist/method/skills/api-e2e-tests/SKILL.md +46 -46
- package/dist/method/skills/audit-pillars/SKILL.md +12 -10
- package/dist/method/skills/audit-pillars/references/pillars.md +40 -0
- package/dist/method/skills/chain-stories/SKILL.md +5 -4
- package/dist/method/skills/chain-stories/references/merge-order.md +23 -0
- package/dist/method/skills/check-readiness/SKILL.md +1 -1
- package/dist/method/skills/check-requirements/SKILL.md +37 -72
- package/dist/method/skills/check-requirements/references/engine-proofs.md +16 -23
- package/dist/method/skills/check-requirements/references/proofs-and-gaps.md +22 -37
- package/dist/method/skills/critique-deliverable/SKILL.md +3 -3
- package/dist/method/skills/critique-deliverable/references/choose.md +12 -21
- package/dist/method/skills/critique-deliverable/references/format.md +14 -20
- package/dist/method/skills/critique-deliverable/references/gestures.md +14 -21
- package/dist/method/skills/critique-deliverable/references/judgment.md +4 -9
- package/dist/method/skills/critique-deliverable/references/methods.md +21 -0
- package/dist/method/skills/critique-deliverable/references/reconcile.md +6 -11
- package/dist/method/skills/deep-research/SKILL.md +16 -24
- package/dist/method/skills/deep-research/references/candidates.md +13 -25
- package/dist/method/skills/deep-research/references/external.md +15 -34
- package/dist/method/skills/deep-research/references/page-format.md +16 -42
- package/dist/method/skills/deep-research/references/types.md +16 -27
- package/dist/method/skills/develop-story/SKILL.md +56 -189
- package/dist/method/skills/develop-story/references/acceptance-tests.md +18 -71
- package/dist/method/skills/develop-story/references/quick-lane.md +20 -0
- package/dist/method/skills/diagnose-bug/SKILL.md +42 -53
- package/dist/method/skills/diagnose-bug/references/hypotheses.md +1 -2
- package/dist/method/skills/generate-knowledge-base/SKILL.md +57 -226
- package/dist/method/skills/generate-knowledge-base/assets/index-template.md +6 -15
- package/dist/method/skills/generate-knowledge-base/assets/page-template.md +11 -24
- package/dist/method/skills/generate-knowledge-base/references/living-docs.md +25 -64
- package/dist/method/skills/generate-knowledge-base/references/reuse-map.md +9 -18
- package/dist/method/skills/ideation/SKILL.md +16 -23
- package/dist/method/skills/ideation/references/close.md +18 -14
- package/dist/method/skills/ideation/references/converge.md +11 -21
- package/dist/method/skills/ideation/references/stances.md +13 -17
- package/dist/method/skills/ideation/references/techniques.md +20 -0
- package/dist/method/skills/improve-code/SKILL.md +42 -54
- package/dist/method/skills/pitch/SKILL.md +16 -19
- package/dist/method/skills/pitch/references/deck.md +15 -18
- package/dist/method/skills/pitch/references/design-implementation.md +13 -21
- package/dist/method/skills/pitch/references/design.md +21 -0
- package/dist/method/skills/pitch/references/story.md +13 -18
- package/dist/method/skills/plan-sprint/SKILL.md +49 -151
- package/dist/method/skills/resolve-merge-conflict/SKILL.md +40 -65
- package/dist/method/skills/review-after-launch/SKILL.md +56 -0
- package/dist/method/skills/review-story/SKILL.md +44 -72
- package/dist/method/skills/review-story/references/amend-story.md +8 -13
- package/dist/method/skills/review-story/references/export.md +7 -17
- package/dist/method/skills/review-story/references/free-review.md +9 -20
- package/dist/method/skills/review-story/references/judge.md +25 -37
- package/dist/method/skills/review-story/references/tests.md +29 -0
- package/dist/method/skills/round-table/SKILL.md +6 -6
- package/dist/method/skills/round-table/references/closing.md +18 -0
- package/dist/method/skills/round-table/references/guests.md +15 -15
- package/dist/method/skills/round-table/references/rooms.md +15 -28
- package/dist/method/skills/round-table/references/table.md +19 -0
- package/dist/method/skills/run-acceptance/SKILL.md +58 -0
- package/dist/method/skills/run-acceptance/references/template.md +39 -0
- package/dist/method/skills/run-retrospective/SKILL.md +50 -189
- package/dist/method/skills/security-review-architecture/SKILL.md +47 -109
- package/dist/method/skills/security-review-architecture/references/spec-review.md +27 -38
- package/dist/method/skills/setup-ci/SKILL.md +45 -109
- package/dist/method/skills/split-into-stories/SKILL.md +59 -192
- package/dist/method/skills/split-into-stories/assets/story.md.tmpl +15 -4
- package/dist/method/skills/strategy/SKILL.md +21 -25
- package/dist/method/skills/strategy/references/costs.md +12 -26
- package/dist/method/skills/strategy/references/gestures.md +12 -21
- package/dist/method/skills/strategy/references/innovate.md +19 -37
- package/dist/method/skills/strategy/references/solve.md +19 -32
- package/dist/method/skills/test-idea/SKILL.md +5 -5
- package/dist/method/skills/test-idea/assets/prfaq-template.md +1 -1
- package/dist/method/skills/test-idea/references/faq.md +12 -29
- package/dist/method/skills/test-idea/references/forge.md +19 -30
- package/dist/method/skills/test-idea/references/personas.md +16 -19
- package/dist/method/skills/test-idea/references/prfaq.md +31 -31
- package/dist/method/skills/workshop/SKILL.md +10 -16
- package/dist/method/skills/workshop/references/create.md +28 -45
- package/dist/method/skills/workshop/references/customize.md +17 -42
- package/dist/method/skills/workshop/references/evaluate.md +11 -42
- package/dist/method/skills/workshop/references/rules.md +17 -26
- package/dist/method/skills/write-architecture/SKILL.md +62 -220
- package/dist/method/skills/write-architecture/references/guard.md +11 -28
- package/dist/method/skills/write-architecture/references/self-check.md +22 -38
- package/dist/method/skills/write-brand/SKILL.md +2 -2
- package/dist/method/skills/write-brand/references/identity.md +21 -22
- package/dist/method/skills/write-brand/references/platform.md +13 -20
- package/dist/method/skills/write-brand/references/rules.md +16 -22
- package/dist/method/skills/write-brief/SKILL.md +56 -149
- package/dist/method/skills/write-brief/references/brief-checklist.md +18 -30
- package/dist/method/skills/write-content/SKILL.md +53 -210
- package/dist/method/skills/write-content/references/content-checklist.md +32 -50
- package/dist/method/skills/write-positioning/SKILL.md +53 -197
- package/dist/method/skills/write-positioning/references/positioning-checklist.md +15 -41
- package/dist/method/skills/write-positioning/references/seo-checklist.md +26 -51
- package/dist/method/skills/write-prd/SKILL.md +52 -179
- package/dist/method/skills/write-prd/references/prd-checklist.md +25 -54
- package/dist/method/skills/write-sales/SKILL.md +48 -212
- package/dist/method/skills/write-sales/references/before-you-send.md +21 -49
- package/dist/method/skills/write-sales/references/sales-checklist.md +19 -69
- package/dist/method/skills/write-spec/references/spec-guide.md +20 -23
- package/dist/method/skills/write-ux-spec/SKILL.md +57 -168
- package/dist/method/skills/write-ux-spec/references/accessibility-check.md +13 -72
- package/dist/method/skills/write-ux-spec/references/mockups.md +6 -68
- package/dist/method/skills/write-ux-spec/references/tokens-and-sketches.md +8 -81
- package/dist/method/skills/write-ux-spec/references/ux-checklist.md +12 -67
- package/dist/product-root.js +353 -250
- package/dist/project-command.js +1508 -0
- package/dist/project-command2.js +1 -0
- package/dist/read-command.js +19 -0
- package/dist/rolldown-runtime.js +1 -2
- package/dist/sheet-command.js +57 -0
- package/dist/webauthn-verify.js +4 -5
- package/package.json +11 -10
- package/dist/method/agents/noah/references/conduct.md +0 -102
- package/dist/method/skills/api-e2e-tests/references/frameworks.md +0 -58
- package/dist/method/skills/api-e2e-tests/references/generate.md +0 -67
- package/dist/method/skills/audit-pillars/references/accessibility.md +0 -13
- package/dist/method/skills/audit-pillars/references/architecture.md +0 -13
- package/dist/method/skills/audit-pillars/references/dependencies.md +0 -13
- package/dist/method/skills/audit-pillars/references/format.md +0 -20
- package/dist/method/skills/audit-pillars/references/interface.md +0 -13
- package/dist/method/skills/audit-pillars/references/method.md +0 -33
- package/dist/method/skills/audit-pillars/references/performance.md +0 -17
- package/dist/method/skills/audit-pillars/references/quality.md +0 -11
- package/dist/method/skills/audit-pillars/references/security.md +0 -13
- package/dist/method/skills/audit-pillars/references/tests.md +0 -17
- package/dist/method/skills/critique-deliverable/references/assumption-audit.md +0 -11
- package/dist/method/skills/critique-deliverable/references/compare-existing.md +0 -13
- package/dist/method/skills/critique-deliverable/references/devils-advocate.md +0 -13
- package/dist/method/skills/critique-deliverable/references/divergence.md +0 -15
- package/dist/method/skills/critique-deliverable/references/domain-expert.md +0 -14
- package/dist/method/skills/critique-deliverable/references/extreme-user.md +0 -13
- package/dist/method/skills/critique-deliverable/references/failure-modes.md +0 -13
- package/dist/method/skills/critique-deliverable/references/first-principles.md +0 -12
- package/dist/method/skills/critique-deliverable/references/inversion.md +0 -13
- package/dist/method/skills/critique-deliverable/references/pre-mortem.md +0 -12
- package/dist/method/skills/critique-deliverable/references/red-team.md +0 -12
- package/dist/method/skills/critique-deliverable/references/reframe.md +0 -12
- package/dist/method/skills/critique-deliverable/references/second-order.md +0 -12
- package/dist/method/skills/critique-deliverable/references/socratic.md +0 -15
- package/dist/method/skills/critique-deliverable/references/steelman.md +0 -13
- package/dist/method/skills/critique-deliverable/references/subtraction.md +0 -12
- package/dist/method/skills/develop-story/references/self-check.md +0 -46
- package/dist/method/skills/generate-knowledge-base/references/kb-checklist.md +0 -49
- package/dist/method/skills/generate-knowledge-base/references/repository-scan.md +0 -48
- package/dist/method/skills/ideation/references/choose.md +0 -21
- package/dist/method/skills/ideation/references/gestures.md +0 -15
- package/dist/method/skills/ideation/references/techniques-borrowed.md +0 -8
- package/dist/method/skills/ideation/references/techniques-deep.md +0 -12
- package/dist/method/skills/ideation/references/techniques-frames.md +0 -12
- package/dist/method/skills/ideation/references/techniques-futures.md +0 -8
- package/dist/method/skills/ideation/references/techniques-limits.md +0 -9
- package/dist/method/skills/ideation/references/techniques-people.md +0 -7
- package/dist/method/skills/ideation/references/techniques-sparks.md +0 -10
- package/dist/method/skills/ideation/references/techniques-together.md +0 -11
- package/dist/method/skills/order-merges/SKILL.md +0 -71
- package/dist/method/skills/pitch/references/deck-types.md +0 -17
- package/dist/method/skills/pitch/references/design-methods.md +0 -45
- package/dist/method/skills/pitch/references/design-thinking.md +0 -28
- package/dist/method/skills/pitch/references/story-frameworks.md +0 -39
- package/dist/method/skills/quick-lane/SKILL.md +0 -143
- package/dist/method/skills/review-tests/SKILL.md +0 -32
- package/dist/method/skills/review-tests/references/check.md +0 -25
- package/dist/method/skills/review-tests/references/grid.md +0 -27
- package/dist/method/skills/round-table/references/cast.md +0 -14
- package/dist/method/skills/round-table/references/gestures.md +0 -24
- package/dist/method/skills/round-table/references/independence.md +0 -21
- package/dist/method/skills/round-table/references/three-views.md +0 -17
- package/dist/method/skills/round-table/references/turns.md +0 -19
- package/dist/method/skills/strategy/references/innovate-frameworks.md +0 -48
- package/dist/method/skills/strategy/references/solve-methods.md +0 -45
- package/dist/method/skills/test-idea/references/bets.md +0 -14
- package/dist/method/skills/test-idea/references/concept.md +0 -24
- package/dist/method/skills/test-idea/references/verdict.md +0 -26
- package/dist/method/skills/workshop/references/analyze.md +0 -36
package/dist/product-root.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { $ as
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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")
|
|
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
|
|
9432
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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}:
|
|
14710
|
-
summary: truncate(`Story ${id} went through
|
|
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
|
|
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 }) =>
|
|
15110
|
-
|
|
15111
|
-
|
|
15112
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 };
|