@ixo/openhands-sdk 0.4.1 → 0.5.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 +2 -2
- package/dist/cjs/campaign/cleanup.js +1 -1
- package/dist/cjs/campaign/cleanup.js.map +1 -1
- package/dist/cjs/campaign/spot.d.ts.map +1 -1
- package/dist/cjs/campaign/spot.js +2 -1
- package/dist/cjs/campaign/spot.js.map +1 -1
- package/dist/cjs/chain/ask.d.ts +17 -0
- package/dist/cjs/chain/ask.d.ts.map +1 -1
- package/dist/cjs/chain/ask.js +26 -9
- package/dist/cjs/chain/ask.js.map +1 -1
- package/dist/cjs/chain/broadcast.d.ts.map +1 -1
- package/dist/cjs/chain/broadcast.js +6 -4
- package/dist/cjs/chain/broadcast.js.map +1 -1
- package/dist/cjs/chain/claimVerdict.d.ts +26 -0
- package/dist/cjs/chain/claimVerdict.d.ts.map +1 -0
- package/dist/cjs/chain/claimVerdict.js +33 -0
- package/dist/cjs/chain/claimVerdict.js.map +1 -0
- package/dist/cjs/chain/delegate.d.ts +46 -3
- package/dist/cjs/chain/delegate.d.ts.map +1 -1
- package/dist/cjs/chain/delegate.js +68 -6
- package/dist/cjs/chain/delegate.js.map +1 -1
- package/dist/cjs/chain/entityShape.d.ts +2 -0
- package/dist/cjs/chain/entityShape.d.ts.map +1 -1
- package/dist/cjs/chain/entityShape.js +8 -1
- package/dist/cjs/chain/entityShape.js.map +1 -1
- package/dist/cjs/chain/env.d.ts +1 -0
- package/dist/cjs/chain/env.d.ts.map +1 -1
- package/dist/cjs/chain/env.js +9 -1
- package/dist/cjs/chain/env.js.map +1 -1
- package/dist/cjs/chain/inviteMessages.d.ts +183 -0
- package/dist/cjs/chain/inviteMessages.d.ts.map +1 -0
- package/dist/cjs/chain/inviteMessages.js +289 -0
- package/dist/cjs/chain/inviteMessages.js.map +1 -0
- package/dist/cjs/chain/inviteProof.d.ts +121 -0
- package/dist/cjs/chain/inviteProof.d.ts.map +1 -0
- package/dist/cjs/chain/inviteProof.js +297 -0
- package/dist/cjs/chain/inviteProof.js.map +1 -0
- package/dist/cjs/chain/lane.d.ts +148 -0
- package/dist/cjs/chain/lane.d.ts.map +1 -0
- package/dist/cjs/chain/lane.js +220 -0
- package/dist/cjs/chain/lane.js.map +1 -0
- package/dist/cjs/chain/money.d.ts +6 -4
- package/dist/cjs/chain/money.d.ts.map +1 -1
- package/dist/cjs/chain/money.js +10 -7
- package/dist/cjs/chain/money.js.map +1 -1
- package/dist/cjs/chain/oracle.d.ts +2 -0
- package/dist/cjs/chain/oracle.d.ts.map +1 -1
- package/dist/cjs/chain/oracle.js +1 -1
- package/dist/cjs/chain/oracle.js.map +1 -1
- package/dist/cjs/chain/orgReviewBilling.js +1 -1
- package/dist/cjs/chain/orgReviewBilling.js.map +1 -1
- package/dist/cjs/chain/payoutTerms.d.ts.map +1 -1
- package/dist/cjs/chain/payoutTerms.js +1 -1
- package/dist/cjs/chain/payoutTerms.js.map +1 -1
- package/dist/cjs/chain/personReview.d.ts +218 -0
- package/dist/cjs/chain/personReview.d.ts.map +1 -0
- package/dist/cjs/chain/personReview.js +379 -0
- package/dist/cjs/chain/personReview.js.map +1 -0
- package/dist/cjs/chain/postFee.d.ts +11 -0
- package/dist/cjs/chain/postFee.d.ts.map +1 -0
- package/dist/cjs/chain/postFee.js +14 -0
- package/dist/cjs/chain/postFee.js.map +1 -0
- package/dist/cjs/chain/query.d.ts +55 -2
- package/dist/cjs/chain/query.d.ts.map +1 -1
- package/dist/cjs/chain/query.js +144 -8
- package/dist/cjs/chain/query.js.map +1 -1
- package/dist/cjs/chain/reviewBilling.d.ts +3 -27
- package/dist/cjs/chain/reviewBilling.d.ts.map +1 -1
- package/dist/cjs/chain/reviewBilling.js +5 -112
- package/dist/cjs/chain/reviewBilling.js.map +1 -1
- package/dist/cjs/chain.d.ts +1 -1
- package/dist/cjs/chain.d.ts.map +1 -1
- package/dist/cjs/chain.js +5 -2
- package/dist/cjs/chain.js.map +1 -1
- package/dist/cjs/config.d.ts +11 -2
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +5 -1
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/data/agent.d.ts +2 -0
- package/dist/cjs/data/agent.d.ts.map +1 -1
- package/dist/cjs/data/agent.js +1 -0
- package/dist/cjs/data/agent.js.map +1 -1
- package/dist/cjs/data/board/assemble.d.ts +7 -2
- package/dist/cjs/data/board/assemble.d.ts.map +1 -1
- package/dist/cjs/data/board/assemble.js +76 -10
- package/dist/cjs/data/board/assemble.js.map +1 -1
- package/dist/cjs/data/board/facts.d.ts +2 -0
- package/dist/cjs/data/board/facts.d.ts.map +1 -1
- package/dist/cjs/data/board/facts.js +2 -1
- package/dist/cjs/data/board/facts.js.map +1 -1
- package/dist/cjs/data/board/read.d.ts +27 -3
- package/dist/cjs/data/board/read.d.ts.map +1 -1
- package/dist/cjs/data/board/read.js +122 -8
- package/dist/cjs/data/board/read.js.map +1 -1
- package/dist/cjs/data/board/types.d.ts +77 -5
- package/dist/cjs/data/board/types.d.ts.map +1 -1
- package/dist/cjs/data/board/types.js +5 -3
- package/dist/cjs/data/board/types.js.map +1 -1
- package/dist/cjs/data/checkers.d.ts +169 -0
- package/dist/cjs/data/checkers.d.ts.map +1 -0
- package/dist/cjs/data/checkers.js +354 -0
- package/dist/cjs/data/checkers.js.map +1 -0
- package/dist/cjs/data/checkersRead.d.ts +58 -0
- package/dist/cjs/data/checkersRead.d.ts.map +1 -0
- package/dist/cjs/data/checkersRead.js +263 -0
- package/dist/cjs/data/checkersRead.js.map +1 -0
- package/dist/cjs/data/denoms.d.ts.map +1 -1
- package/dist/cjs/data/denoms.js +1 -0
- package/dist/cjs/data/denoms.js.map +1 -1
- package/dist/cjs/data/docUrls.d.ts +2 -0
- package/dist/cjs/data/docUrls.d.ts.map +1 -1
- package/dist/cjs/data/docUrls.js +4 -1
- package/dist/cjs/data/docUrls.js.map +1 -1
- package/dist/cjs/data/docs.d.ts +3 -1
- package/dist/cjs/data/docs.d.ts.map +1 -1
- package/dist/cjs/data/docs.js +15 -2
- package/dist/cjs/data/docs.js.map +1 -1
- package/dist/cjs/data/engine.d.ts.map +1 -1
- package/dist/cjs/data/engine.js +12 -5
- package/dist/cjs/data/engine.js.map +1 -1
- package/dist/cjs/data/engineUrl.js +1 -1
- package/dist/cjs/data/engineUrl.js.map +1 -1
- package/dist/cjs/data/envelope.d.ts +18 -0
- package/dist/cjs/data/envelope.d.ts.map +1 -1
- package/dist/cjs/data/envelope.js +16 -1
- package/dist/cjs/data/envelope.js.map +1 -1
- package/dist/cjs/data/format.d.ts +18 -0
- package/dist/cjs/data/format.d.ts.map +1 -1
- package/dist/cjs/data/format.js +32 -2
- package/dist/cjs/data/format.js.map +1 -1
- package/dist/cjs/data/index.d.ts +2 -2
- package/dist/cjs/data/index.d.ts.map +1 -1
- package/dist/cjs/data/index.js +2 -1
- package/dist/cjs/data/index.js.map +1 -1
- package/dist/cjs/data/install.d.ts +44 -47
- package/dist/cjs/data/install.d.ts.map +1 -1
- package/dist/cjs/data/install.js +60 -59
- package/dist/cjs/data/install.js.map +1 -1
- package/dist/cjs/data/openness.d.ts +14 -1
- package/dist/cjs/data/openness.d.ts.map +1 -1
- package/dist/cjs/data/openness.js +14 -26
- package/dist/cjs/data/openness.js.map +1 -1
- package/dist/cjs/data/queue.d.ts +26 -0
- package/dist/cjs/data/queue.d.ts.map +1 -1
- package/dist/cjs/data/queue.js +57 -12
- package/dist/cjs/data/queue.js.map +1 -1
- package/dist/cjs/data/receipt.d.ts +19 -0
- package/dist/cjs/data/receipt.d.ts.map +1 -1
- package/dist/cjs/data/receipt.js +22 -5
- package/dist/cjs/data/receipt.js.map +1 -1
- package/dist/cjs/data/threads.d.ts +2 -0
- package/dist/cjs/data/threads.d.ts.map +1 -1
- package/dist/cjs/data/threads.js +3 -1
- package/dist/cjs/data/threads.js.map +1 -1
- package/dist/cjs/data/traceWords.js +1 -1
- package/dist/cjs/data/traceWords.js.map +1 -1
- package/dist/cjs/data/types.d.ts +6 -1
- package/dist/cjs/data/types.d.ts.map +1 -1
- package/dist/cjs/data/types.js.map +1 -1
- package/dist/cjs/data/whyReceipt.d.ts.map +1 -1
- package/dist/cjs/data/whyReceipt.js +10 -1
- package/dist/cjs/data/whyReceipt.js.map +1 -1
- package/dist/cjs/data/work.d.ts +5 -0
- package/dist/cjs/data/work.d.ts.map +1 -1
- package/dist/cjs/data/work.js +11 -5
- package/dist/cjs/data/work.js.map +1 -1
- package/dist/cjs/discovery.d.ts +64 -0
- package/dist/cjs/discovery.d.ts.map +1 -0
- package/dist/cjs/discovery.js +85 -0
- package/dist/cjs/discovery.js.map +1 -0
- package/dist/cjs/envRead.d.ts +1 -1
- package/dist/cjs/envRead.d.ts.map +1 -1
- package/dist/cjs/envRead.js +2 -1
- package/dist/cjs/envRead.js.map +1 -1
- package/dist/cjs/given.d.ts +14 -0
- package/dist/cjs/given.d.ts.map +1 -1
- package/dist/cjs/given.js +14 -2
- package/dist/cjs/given.js.map +1 -1
- package/dist/cjs/network.d.ts +3 -1
- package/dist/cjs/network.d.ts.map +1 -1
- package/dist/cjs/network.js +11 -3
- package/dist/cjs/network.js.map +1 -1
- package/dist/cjs/rubric/bridge.d.ts +8 -0
- package/dist/cjs/rubric/bridge.d.ts.map +1 -1
- package/dist/cjs/rubric/bridge.js +107 -8
- package/dist/cjs/rubric/bridge.js.map +1 -1
- package/dist/cjs/rubric/call.d.ts +35 -8
- package/dist/cjs/rubric/call.d.ts.map +1 -1
- package/dist/cjs/rubric/call.js +62 -20
- package/dist/cjs/rubric/call.js.map +1 -1
- package/dist/cjs/rubric/callTag.d.ts +5 -0
- package/dist/cjs/rubric/callTag.d.ts.map +1 -0
- package/dist/cjs/rubric/callTag.js +17 -0
- package/dist/cjs/rubric/callTag.js.map +1 -0
- package/dist/cjs/rubric/compose.d.ts.map +1 -1
- package/dist/cjs/rubric/compose.js +5 -3
- package/dist/cjs/rubric/compose.js.map +1 -1
- package/dist/cjs/rubric/draft.d.ts +9 -1
- package/dist/cjs/rubric/draft.d.ts.map +1 -1
- package/dist/cjs/rubric/draft.js +24 -2
- package/dist/cjs/rubric/draft.js.map +1 -1
- package/dist/cjs/rubric/gateMet.d.ts +17 -0
- package/dist/cjs/rubric/gateMet.d.ts.map +1 -1
- package/dist/cjs/rubric/gateMet.js +36 -3
- package/dist/cjs/rubric/gateMet.js.map +1 -1
- package/dist/cjs/rubric/leg.js +3 -3
- package/dist/cjs/rubric/leg.js.map +1 -1
- package/dist/cjs/rubric/marketPlan.d.ts +2 -0
- package/dist/cjs/rubric/marketPlan.d.ts.map +1 -1
- package/dist/cjs/rubric/marketPlan.js.map +1 -1
- package/dist/cjs/rubric/planAsk.d.ts +23 -0
- package/dist/cjs/rubric/planAsk.d.ts.map +1 -0
- package/dist/cjs/rubric/planAsk.js +24 -0
- package/dist/cjs/rubric/planAsk.js.map +1 -0
- package/dist/cjs/rubric/report.d.ts +208 -0
- package/dist/cjs/rubric/report.d.ts.map +1 -0
- package/dist/cjs/rubric/report.js +384 -0
- package/dist/cjs/rubric/report.js.map +1 -0
- package/dist/cjs/rubric/reportLine.d.ts +31 -0
- package/dist/cjs/rubric/reportLine.d.ts.map +1 -0
- package/dist/cjs/rubric/reportLine.js +45 -0
- package/dist/cjs/rubric/reportLine.js.map +1 -0
- package/dist/cjs/rubric/reportTemplate.d.ts +30 -0
- package/dist/cjs/rubric/reportTemplate.d.ts.map +1 -0
- package/dist/cjs/rubric/reportTemplate.js +78 -0
- package/dist/cjs/rubric/reportTemplate.js.map +1 -0
- package/dist/cjs/rubric/share.d.ts +46 -0
- package/dist/cjs/rubric/share.d.ts.map +1 -0
- package/dist/cjs/rubric/share.js +65 -0
- package/dist/cjs/rubric/share.js.map +1 -0
- package/dist/cjs/rubric/terms.d.ts +76 -2
- package/dist/cjs/rubric/terms.d.ts.map +1 -1
- package/dist/cjs/rubric/terms.js +84 -4
- package/dist/cjs/rubric/terms.js.map +1 -1
- package/dist/cjs/verification/profile.d.ts +28 -0
- package/dist/cjs/verification/profile.d.ts.map +1 -0
- package/dist/cjs/verification/profile.js +126 -0
- package/dist/cjs/verification/profile.js.map +1 -0
- package/dist/cjs/verification/schema.d.ts +54 -0
- package/dist/cjs/verification/schema.d.ts.map +1 -0
- package/dist/cjs/verification/schema.js +49 -0
- package/dist/cjs/verification/schema.js.map +1 -0
- package/dist/esm/campaign/cleanup.js +1 -1
- package/dist/esm/campaign/cleanup.js.map +1 -1
- package/dist/esm/campaign/spot.d.ts.map +1 -1
- package/dist/esm/campaign/spot.js +2 -1
- package/dist/esm/campaign/spot.js.map +1 -1
- package/dist/esm/chain/ask.d.ts +17 -0
- package/dist/esm/chain/ask.d.ts.map +1 -1
- package/dist/esm/chain/ask.js +28 -11
- package/dist/esm/chain/ask.js.map +1 -1
- package/dist/esm/chain/broadcast.d.ts.map +1 -1
- package/dist/esm/chain/broadcast.js +7 -5
- package/dist/esm/chain/broadcast.js.map +1 -1
- package/dist/esm/chain/claimVerdict.d.ts +26 -0
- package/dist/esm/chain/claimVerdict.d.ts.map +1 -0
- package/dist/esm/chain/claimVerdict.js +30 -0
- package/dist/esm/chain/claimVerdict.js.map +1 -0
- package/dist/esm/chain/delegate.d.ts +46 -3
- package/dist/esm/chain/delegate.d.ts.map +1 -1
- package/dist/esm/chain/delegate.js +60 -5
- package/dist/esm/chain/delegate.js.map +1 -1
- package/dist/esm/chain/entityShape.d.ts +2 -0
- package/dist/esm/chain/entityShape.d.ts.map +1 -1
- package/dist/esm/chain/entityShape.js +6 -0
- package/dist/esm/chain/entityShape.js.map +1 -1
- package/dist/esm/chain/env.d.ts +1 -0
- package/dist/esm/chain/env.d.ts.map +1 -1
- package/dist/esm/chain/env.js +7 -0
- package/dist/esm/chain/env.js.map +1 -1
- package/dist/esm/chain/inviteMessages.d.ts +183 -0
- package/dist/esm/chain/inviteMessages.d.ts.map +1 -0
- package/dist/esm/chain/inviteMessages.js +246 -0
- package/dist/esm/chain/inviteMessages.js.map +1 -0
- package/dist/esm/chain/inviteProof.d.ts +121 -0
- package/dist/esm/chain/inviteProof.d.ts.map +1 -0
- package/dist/esm/chain/inviteProof.js +278 -0
- package/dist/esm/chain/inviteProof.js.map +1 -0
- package/dist/esm/chain/lane.d.ts +148 -0
- package/dist/esm/chain/lane.d.ts.map +1 -0
- package/dist/esm/chain/lane.js +170 -0
- package/dist/esm/chain/lane.js.map +1 -0
- package/dist/esm/chain/money.d.ts +6 -4
- package/dist/esm/chain/money.d.ts.map +1 -1
- package/dist/esm/chain/money.js +10 -7
- package/dist/esm/chain/money.js.map +1 -1
- package/dist/esm/chain/oracle.d.ts +2 -0
- package/dist/esm/chain/oracle.d.ts.map +1 -1
- package/dist/esm/chain/oracle.js +1 -1
- package/dist/esm/chain/oracle.js.map +1 -1
- package/dist/esm/chain/orgReviewBilling.js +1 -1
- package/dist/esm/chain/orgReviewBilling.js.map +1 -1
- package/dist/esm/chain/payoutTerms.d.ts.map +1 -1
- package/dist/esm/chain/payoutTerms.js +1 -1
- package/dist/esm/chain/payoutTerms.js.map +1 -1
- package/dist/esm/chain/personReview.d.ts +218 -0
- package/dist/esm/chain/personReview.d.ts.map +1 -0
- package/dist/esm/chain/personReview.js +322 -0
- package/dist/esm/chain/personReview.js.map +1 -0
- package/dist/esm/chain/postFee.d.ts +11 -0
- package/dist/esm/chain/postFee.d.ts.map +1 -0
- package/dist/esm/chain/postFee.js +11 -0
- package/dist/esm/chain/postFee.js.map +1 -0
- package/dist/esm/chain/query.d.ts +55 -2
- package/dist/esm/chain/query.d.ts.map +1 -1
- package/dist/esm/chain/query.js +136 -8
- package/dist/esm/chain/query.js.map +1 -1
- package/dist/esm/chain/reviewBilling.d.ts +3 -27
- package/dist/esm/chain/reviewBilling.d.ts.map +1 -1
- package/dist/esm/chain/reviewBilling.js +5 -108
- package/dist/esm/chain/reviewBilling.js.map +1 -1
- package/dist/esm/chain.d.ts +1 -1
- package/dist/esm/chain.d.ts.map +1 -1
- package/dist/esm/chain.js +1 -1
- package/dist/esm/chain.js.map +1 -1
- package/dist/esm/config.d.ts +11 -2
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +6 -2
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/data/agent.d.ts +2 -0
- package/dist/esm/data/agent.d.ts.map +1 -1
- package/dist/esm/data/agent.js +1 -0
- package/dist/esm/data/agent.js.map +1 -1
- package/dist/esm/data/board/assemble.d.ts +7 -2
- package/dist/esm/data/board/assemble.d.ts.map +1 -1
- package/dist/esm/data/board/assemble.js +73 -9
- package/dist/esm/data/board/assemble.js.map +1 -1
- package/dist/esm/data/board/facts.d.ts +2 -0
- package/dist/esm/data/board/facts.d.ts.map +1 -1
- package/dist/esm/data/board/facts.js +2 -1
- package/dist/esm/data/board/facts.js.map +1 -1
- package/dist/esm/data/board/read.d.ts +27 -3
- package/dist/esm/data/board/read.d.ts.map +1 -1
- package/dist/esm/data/board/read.js +123 -10
- package/dist/esm/data/board/read.js.map +1 -1
- package/dist/esm/data/board/types.d.ts +77 -5
- package/dist/esm/data/board/types.d.ts.map +1 -1
- package/dist/esm/data/board/types.js +5 -3
- package/dist/esm/data/board/types.js.map +1 -1
- package/dist/esm/data/checkers.d.ts +169 -0
- package/dist/esm/data/checkers.d.ts.map +1 -0
- package/dist/esm/data/checkers.js +304 -0
- package/dist/esm/data/checkers.js.map +1 -0
- package/dist/esm/data/checkersRead.d.ts +58 -0
- package/dist/esm/data/checkersRead.d.ts.map +1 -0
- package/dist/esm/data/checkersRead.js +252 -0
- package/dist/esm/data/checkersRead.js.map +1 -0
- package/dist/esm/data/denoms.d.ts.map +1 -1
- package/dist/esm/data/denoms.js +1 -0
- package/dist/esm/data/denoms.js.map +1 -1
- package/dist/esm/data/docUrls.d.ts +2 -0
- package/dist/esm/data/docUrls.d.ts.map +1 -1
- package/dist/esm/data/docUrls.js +2 -0
- package/dist/esm/data/docUrls.js.map +1 -1
- package/dist/esm/data/docs.d.ts +3 -1
- package/dist/esm/data/docs.d.ts.map +1 -1
- package/dist/esm/data/docs.js +15 -2
- package/dist/esm/data/docs.js.map +1 -1
- package/dist/esm/data/engine.d.ts.map +1 -1
- package/dist/esm/data/engine.js +12 -5
- package/dist/esm/data/engine.js.map +1 -1
- package/dist/esm/data/engineUrl.js +2 -2
- package/dist/esm/data/engineUrl.js.map +1 -1
- package/dist/esm/data/envelope.d.ts +18 -0
- package/dist/esm/data/envelope.d.ts.map +1 -1
- package/dist/esm/data/envelope.js +14 -0
- package/dist/esm/data/envelope.js.map +1 -1
- package/dist/esm/data/format.d.ts +18 -0
- package/dist/esm/data/format.d.ts.map +1 -1
- package/dist/esm/data/format.js +28 -1
- package/dist/esm/data/format.js.map +1 -1
- package/dist/esm/data/index.d.ts +2 -2
- package/dist/esm/data/index.d.ts.map +1 -1
- package/dist/esm/data/index.js +1 -1
- package/dist/esm/data/index.js.map +1 -1
- package/dist/esm/data/install.d.ts +44 -47
- package/dist/esm/data/install.d.ts.map +1 -1
- package/dist/esm/data/install.js +56 -58
- package/dist/esm/data/install.js.map +1 -1
- package/dist/esm/data/openness.d.ts +14 -1
- package/dist/esm/data/openness.d.ts.map +1 -1
- package/dist/esm/data/openness.js +14 -26
- package/dist/esm/data/openness.js.map +1 -1
- package/dist/esm/data/queue.d.ts +26 -0
- package/dist/esm/data/queue.d.ts.map +1 -1
- package/dist/esm/data/queue.js +50 -9
- package/dist/esm/data/queue.js.map +1 -1
- package/dist/esm/data/receipt.d.ts +19 -0
- package/dist/esm/data/receipt.d.ts.map +1 -1
- package/dist/esm/data/receipt.js +20 -4
- package/dist/esm/data/receipt.js.map +1 -1
- package/dist/esm/data/threads.d.ts +2 -0
- package/dist/esm/data/threads.d.ts.map +1 -1
- package/dist/esm/data/threads.js +3 -1
- package/dist/esm/data/threads.js.map +1 -1
- package/dist/esm/data/traceWords.js +1 -1
- package/dist/esm/data/traceWords.js.map +1 -1
- package/dist/esm/data/types.d.ts +6 -1
- package/dist/esm/data/types.d.ts.map +1 -1
- package/dist/esm/data/types.js.map +1 -1
- package/dist/esm/data/whyReceipt.d.ts.map +1 -1
- package/dist/esm/data/whyReceipt.js +10 -1
- package/dist/esm/data/whyReceipt.js.map +1 -1
- package/dist/esm/data/work.d.ts +5 -0
- package/dist/esm/data/work.d.ts.map +1 -1
- package/dist/esm/data/work.js +11 -5
- package/dist/esm/data/work.js.map +1 -1
- package/dist/esm/discovery.d.ts +64 -0
- package/dist/esm/discovery.d.ts.map +1 -0
- package/dist/esm/discovery.js +74 -0
- package/dist/esm/discovery.js.map +1 -0
- package/dist/esm/envRead.d.ts +1 -1
- package/dist/esm/envRead.d.ts.map +1 -1
- package/dist/esm/envRead.js +1 -1
- package/dist/esm/envRead.js.map +1 -1
- package/dist/esm/given.d.ts +14 -0
- package/dist/esm/given.d.ts.map +1 -1
- package/dist/esm/given.js +11 -1
- package/dist/esm/given.js.map +1 -1
- package/dist/esm/network.d.ts +3 -1
- package/dist/esm/network.d.ts.map +1 -1
- package/dist/esm/network.js +10 -3
- package/dist/esm/network.js.map +1 -1
- package/dist/esm/rubric/bridge.d.ts +8 -0
- package/dist/esm/rubric/bridge.d.ts.map +1 -1
- package/dist/esm/rubric/bridge.js +105 -7
- package/dist/esm/rubric/bridge.js.map +1 -1
- package/dist/esm/rubric/call.d.ts +35 -8
- package/dist/esm/rubric/call.d.ts.map +1 -1
- package/dist/esm/rubric/call.js +57 -16
- package/dist/esm/rubric/call.js.map +1 -1
- package/dist/esm/rubric/callTag.d.ts +5 -0
- package/dist/esm/rubric/callTag.d.ts.map +1 -0
- package/dist/esm/rubric/callTag.js +12 -0
- package/dist/esm/rubric/callTag.js.map +1 -0
- package/dist/esm/rubric/compose.d.ts.map +1 -1
- package/dist/esm/rubric/compose.js +5 -3
- package/dist/esm/rubric/compose.js.map +1 -1
- package/dist/esm/rubric/draft.d.ts +9 -1
- package/dist/esm/rubric/draft.d.ts.map +1 -1
- package/dist/esm/rubric/draft.js +23 -2
- package/dist/esm/rubric/draft.js.map +1 -1
- package/dist/esm/rubric/gateMet.d.ts +17 -0
- package/dist/esm/rubric/gateMet.d.ts.map +1 -1
- package/dist/esm/rubric/gateMet.js +34 -2
- package/dist/esm/rubric/gateMet.js.map +1 -1
- package/dist/esm/rubric/leg.js +4 -4
- package/dist/esm/rubric/leg.js.map +1 -1
- package/dist/esm/rubric/marketPlan.d.ts +2 -0
- package/dist/esm/rubric/marketPlan.d.ts.map +1 -1
- package/dist/esm/rubric/marketPlan.js.map +1 -1
- package/dist/esm/rubric/planAsk.d.ts +23 -0
- package/dist/esm/rubric/planAsk.d.ts.map +1 -0
- package/dist/esm/rubric/planAsk.js +20 -0
- package/dist/esm/rubric/planAsk.js.map +1 -0
- package/dist/esm/rubric/report.d.ts +208 -0
- package/dist/esm/rubric/report.d.ts.map +1 -0
- package/dist/esm/rubric/report.js +371 -0
- package/dist/esm/rubric/report.js.map +1 -0
- package/dist/esm/rubric/reportLine.d.ts +31 -0
- package/dist/esm/rubric/reportLine.d.ts.map +1 -0
- package/dist/esm/rubric/reportLine.js +40 -0
- package/dist/esm/rubric/reportLine.js.map +1 -0
- package/dist/esm/rubric/reportTemplate.d.ts +30 -0
- package/dist/esm/rubric/reportTemplate.d.ts.map +1 -0
- package/dist/esm/rubric/reportTemplate.js +74 -0
- package/dist/esm/rubric/reportTemplate.js.map +1 -0
- package/dist/esm/rubric/share.d.ts +46 -0
- package/dist/esm/rubric/share.d.ts.map +1 -0
- package/dist/esm/rubric/share.js +58 -0
- package/dist/esm/rubric/share.js.map +1 -0
- package/dist/esm/rubric/terms.d.ts +76 -2
- package/dist/esm/rubric/terms.d.ts.map +1 -1
- package/dist/esm/rubric/terms.js +78 -3
- package/dist/esm/rubric/terms.js.map +1 -1
- package/dist/esm/verification/profile.d.ts +28 -0
- package/dist/esm/verification/profile.d.ts.map +1 -0
- package/dist/esm/verification/profile.js +122 -0
- package/dist/esm/verification/profile.js.map +1 -0
- package/dist/esm/verification/schema.d.ts +54 -0
- package/dist/esm/verification/schema.d.ts.map +1 -0
- package/dist/esm/verification/schema.js +46 -0
- package/dist/esm/verification/schema.js.map +1 -0
- package/package.json +22 -2
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `openhands-report/1`: an answer handed over as a structured review report (IXO-5698).
|
|
3
|
+
*
|
|
4
|
+
* One shape for every report ask, whatever is being reviewed:
|
|
5
|
+
* - the summary and its context: the product, its build, the date, the environment, who and what it is for, what was
|
|
6
|
+
* in scope, and the outcome in a sentence;
|
|
7
|
+
* - steps, each with a stable id, what was done, what was expected and observed, and a result (passed, failed,
|
|
8
|
+
* blocked, not tested, excluded);
|
|
9
|
+
* - findings, each with a stable id, the steps it came from, what was observed against what was expected, the impact,
|
|
10
|
+
* a severity with why, how to reproduce it (a blocker may say instead why it cannot be reproduced: the person
|
|
11
|
+
* weighs it), and how sure the reviewer is;
|
|
12
|
+
* - recommendations, each with a priority, the findings it answers, who should act, and when it counts as done;
|
|
13
|
+
* - limitations, as plain lines, and any extra sections the poster asked for by name.
|
|
14
|
+
* Evidence is referred to by file id, and every id must be a file handed over with the report.
|
|
15
|
+
*
|
|
16
|
+
* Plain TypeScript, no schema library: the reader rides into the browser (the reviewer card, the receipt) and the
|
|
17
|
+
* validator into the MCP; both are small. Every problem is said in words a person can act on.
|
|
18
|
+
*/
|
|
19
|
+
export { REPORT_CHECK_ID, reportCheckText, requiredSections } from "./reportLine.js";
|
|
20
|
+
export const REPORT_KIND = "openhands-report/1";
|
|
21
|
+
export const REPORT_LIMITS = {
|
|
22
|
+
/** The whole report as JSON. */
|
|
23
|
+
bytes: 100_000,
|
|
24
|
+
short: 300,
|
|
25
|
+
text: 4_000,
|
|
26
|
+
longText: 8_000,
|
|
27
|
+
steps: 100,
|
|
28
|
+
findings: 100,
|
|
29
|
+
lines: 50,
|
|
30
|
+
evidence: 12,
|
|
31
|
+
links: 50,
|
|
32
|
+
sections: 10,
|
|
33
|
+
heading: 60,
|
|
34
|
+
/** Extra sections a poster may require. */
|
|
35
|
+
required: 5
|
|
36
|
+
};
|
|
37
|
+
export const STEP_RESULTS = ["passed", "failed", "blocked", "not_tested", "excluded"];
|
|
38
|
+
export const SEVERITIES = ["blocker", "major", "minor"];
|
|
39
|
+
export const PRIORITIES = ["high", "medium", "low"];
|
|
40
|
+
/** A file, step or finding id. */
|
|
41
|
+
export const FILE_ID = /^[A-Za-z0-9_-]{1,64}$/;
|
|
42
|
+
const isText = (value, max) => typeof value === "string" && value.trim().length > 0 && value.length <= max;
|
|
43
|
+
const obj = (value) => (value !== null && typeof value === "object" && !Array.isArray(value) ? value : null);
|
|
44
|
+
/**
|
|
45
|
+
* Everything wrong with a report for this ask, in plain words; empty when it is good. `fileIds` are the ids of the
|
|
46
|
+
* files handed over with it (every evidence id must be one of them). Ids are unique and every link resolves.
|
|
47
|
+
*/
|
|
48
|
+
export function reportProblems(raw, requirement, fileIds = []) {
|
|
49
|
+
const problems = [];
|
|
50
|
+
/* The Expert Review rules (reportLine.ts `v`): every finding has evidence and a way to reproduce it, and the limitations are said. */
|
|
51
|
+
const review = requirement?.v === 2;
|
|
52
|
+
const report = obj(raw);
|
|
53
|
+
if (!report)
|
|
54
|
+
return ["The report must be an object with summary, steps, findings, recommendations and limitations."];
|
|
55
|
+
let size = 0;
|
|
56
|
+
try {
|
|
57
|
+
size = new TextEncoder().encode(JSON.stringify(report)).byteLength;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return ["The report could not be read as JSON."];
|
|
61
|
+
}
|
|
62
|
+
if (size > REPORT_LIMITS.bytes)
|
|
63
|
+
problems.push(`The report is ${Math.ceil(size / 1000)} kB; keep it under ${REPORT_LIMITS.bytes / 1000} kB.`);
|
|
64
|
+
if (report.kind !== undefined && report.kind !== REPORT_KIND)
|
|
65
|
+
problems.push(`The report's kind must be "${REPORT_KIND}".`);
|
|
66
|
+
const text = (where, value, what, max = REPORT_LIMITS.text, required = true) => {
|
|
67
|
+
if (value === undefined && !required)
|
|
68
|
+
return;
|
|
69
|
+
if (!isText(value, max))
|
|
70
|
+
problems.push(`${where}: ${what}, up to ${max} characters.`);
|
|
71
|
+
};
|
|
72
|
+
/** A list of ids that must each be one of `known`. */
|
|
73
|
+
const links = (where, value, known, what) => {
|
|
74
|
+
if (value === undefined)
|
|
75
|
+
return;
|
|
76
|
+
if (!Array.isArray(value) || value.length > REPORT_LIMITS.links)
|
|
77
|
+
return void problems.push(`${where}: ${what} is a list of ids.`);
|
|
78
|
+
for (const id of value)
|
|
79
|
+
if (typeof id !== "string" || !known.has(id))
|
|
80
|
+
problems.push(`${where}: "${String(id).slice(0, 40)}" is not one of the ${what}.`);
|
|
81
|
+
};
|
|
82
|
+
const files = new Set(fileIds);
|
|
83
|
+
const evidence = (where, value) => {
|
|
84
|
+
if (value === undefined)
|
|
85
|
+
return;
|
|
86
|
+
if (!Array.isArray(value) || value.length > REPORT_LIMITS.evidence)
|
|
87
|
+
return void problems.push(`${where}: evidence is a list of at most ${REPORT_LIMITS.evidence} file ids.`);
|
|
88
|
+
for (const id of value) {
|
|
89
|
+
if (typeof id !== "string" || !FILE_ID.test(id))
|
|
90
|
+
problems.push(`${where}: "${String(id).slice(0, 40)}" is not a file id (letters, digits, - and _).`);
|
|
91
|
+
else if (!files.has(id))
|
|
92
|
+
problems.push(`${where}: evidence "${id}" is not one of the attached files.`);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
/** Each entry's id: present, well formed, and not used twice. */
|
|
96
|
+
const ids = (entries, name) => {
|
|
97
|
+
const seen = new Set();
|
|
98
|
+
entries.forEach((raw, index) => {
|
|
99
|
+
const id = obj(raw)?.id;
|
|
100
|
+
if (typeof id !== "string" || !FILE_ID.test(id))
|
|
101
|
+
problems.push(`${name} ${index + 1}: give it an id (letters, digits, - and _), so others can point at it.`);
|
|
102
|
+
else if (seen.has(id))
|
|
103
|
+
problems.push(`${name} ${index + 1}: the id "${id}" is used twice.`);
|
|
104
|
+
else
|
|
105
|
+
seen.add(id);
|
|
106
|
+
});
|
|
107
|
+
return seen;
|
|
108
|
+
};
|
|
109
|
+
const summary = obj(report.summary);
|
|
110
|
+
if (!summary)
|
|
111
|
+
problems.push("Add a summary: the product, the date, what was in scope and the outcome.");
|
|
112
|
+
else {
|
|
113
|
+
text("Summary", summary.product, "say which product, link or build was reviewed", REPORT_LIMITS.short);
|
|
114
|
+
text("Summary", summary.date, "give the date of the review", 40);
|
|
115
|
+
text("Summary", summary.scope, "say what was in scope");
|
|
116
|
+
text("Summary", summary.outcome, "give the outcome in a short sentence", REPORT_LIMITS.short);
|
|
117
|
+
text("Summary", summary.build, "the build is optional text", REPORT_LIMITS.short, false);
|
|
118
|
+
text("Summary", summary.environment, "the environment is optional text", REPORT_LIMITS.short, false);
|
|
119
|
+
text("Summary", summary.target, "who and what it is for is optional text", REPORT_LIMITS.short, false);
|
|
120
|
+
}
|
|
121
|
+
let stepIds = new Set();
|
|
122
|
+
if (!Array.isArray(report.steps) || report.steps.length === 0)
|
|
123
|
+
problems.push("Add the steps you took, each with its result.");
|
|
124
|
+
else if (report.steps.length > REPORT_LIMITS.steps)
|
|
125
|
+
problems.push(`Keep it to ${REPORT_LIMITS.steps} steps.`);
|
|
126
|
+
else {
|
|
127
|
+
stepIds = ids(report.steps, "Step");
|
|
128
|
+
report.steps.forEach((raw, index) => {
|
|
129
|
+
const step = obj(raw);
|
|
130
|
+
const where = `Step ${index + 1}`;
|
|
131
|
+
if (!step)
|
|
132
|
+
return void problems.push(`${where} must say what you did and its result.`);
|
|
133
|
+
text(where, step.what, "say what you did");
|
|
134
|
+
if (!STEP_RESULTS.includes(step.result))
|
|
135
|
+
problems.push(`${where}: the result must be passed, failed, blocked, not_tested or excluded.`);
|
|
136
|
+
/* What was looked for and what was seen, wherever the step was actually done. */
|
|
137
|
+
const done = step.result !== "not_tested" && step.result !== "excluded";
|
|
138
|
+
text(where, step.expected, "say what you expected", REPORT_LIMITS.text, done);
|
|
139
|
+
text(where, step.observed, "say what you observed", REPORT_LIMITS.text, done);
|
|
140
|
+
text(where, step.notes, "notes are optional text", REPORT_LIMITS.text, false);
|
|
141
|
+
evidence(where, step.evidence);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
let findingIds = new Set();
|
|
145
|
+
if (!Array.isArray(report.findings))
|
|
146
|
+
problems.push("Add findings: a list, empty when you found nothing.");
|
|
147
|
+
else if (report.findings.length > REPORT_LIMITS.findings)
|
|
148
|
+
problems.push(`Keep it to ${REPORT_LIMITS.findings} findings.`);
|
|
149
|
+
else {
|
|
150
|
+
findingIds = ids(report.findings, "Finding");
|
|
151
|
+
report.findings.forEach((raw, index) => {
|
|
152
|
+
const finding = obj(raw);
|
|
153
|
+
const where = `Finding ${index + 1}`;
|
|
154
|
+
if (!finding)
|
|
155
|
+
return void problems.push(`${where} must have a title and a severity.`);
|
|
156
|
+
text(where, finding.title, "give it a short title", REPORT_LIMITS.short);
|
|
157
|
+
links(where, finding.steps, stepIds, "steps");
|
|
158
|
+
text(where, finding.observed, "say what you observed");
|
|
159
|
+
text(where, finding.expected, "say what you expected");
|
|
160
|
+
text(where, finding.impact, "say what it does to the person using it");
|
|
161
|
+
if (!SEVERITIES.includes(finding.severity))
|
|
162
|
+
problems.push(`${where}: the severity must be blocker, major or minor.`);
|
|
163
|
+
text(where, finding.severity_why, "say why it is that severe");
|
|
164
|
+
text(where, finding.how_to_reproduce, "how to reproduce is optional text", REPORT_LIMITS.text, false);
|
|
165
|
+
text(where, finding.cannot_reproduce, "what is missing to reproduce it is optional text", REPORT_LIMITS.text, false);
|
|
166
|
+
text(where, finding.uncertainty, "how sure you are is optional text", REPORT_LIMITS.text, false);
|
|
167
|
+
text(where, finding.advice, "advice is optional text", REPORT_LIMITS.text, false);
|
|
168
|
+
if (finding.severity === "major" && finding.how_to_reproduce === undefined)
|
|
169
|
+
problems.push(`${where} is major: say how to reproduce it.`);
|
|
170
|
+
if (finding.severity === "blocker" && finding.how_to_reproduce === undefined && finding.cannot_reproduce === undefined)
|
|
171
|
+
problems.push(`${where} is a blocker: say how to reproduce it, or under cannot_reproduce what is missing to reproduce it.`);
|
|
172
|
+
if (finding.cannot_reproduce !== undefined && finding.severity !== "blocker")
|
|
173
|
+
problems.push(`${where}: only a blocker may say it cannot be reproduced; say how to reproduce it.`);
|
|
174
|
+
if (review && finding.severity === "minor" && finding.how_to_reproduce === undefined)
|
|
175
|
+
problems.push(`${where}: say how to reproduce it.`);
|
|
176
|
+
if (review && (!Array.isArray(finding.evidence) || finding.evidence.length === 0))
|
|
177
|
+
problems.push(`${where}: attach its evidence (a screenshot, recording or trace) and name the file under evidence.`);
|
|
178
|
+
evidence(where, finding.evidence);
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/* No evidence anywhere is the one shape a review is refused for outright (bridge.ts), so it is said before it is filed. */
|
|
182
|
+
const cited = [report.steps, report.findings].some((entries) => Array.isArray(entries) && entries.some((one) => Array.isArray(obj(one)?.evidence) && obj(one).evidence.length > 0));
|
|
183
|
+
if (review && !cited)
|
|
184
|
+
problems.push("Attach your evidence: at least one screenshot, recording or trace, named under a step's or a finding's evidence.");
|
|
185
|
+
if (!Array.isArray(report.recommendations))
|
|
186
|
+
problems.push("Add recommendations: a list, empty when there are none.");
|
|
187
|
+
else if (report.recommendations.length > REPORT_LIMITS.lines)
|
|
188
|
+
problems.push(`Keep it to ${REPORT_LIMITS.lines} recommendations.`);
|
|
189
|
+
else
|
|
190
|
+
report.recommendations.forEach((raw, index) => {
|
|
191
|
+
const recommendation = obj(raw);
|
|
192
|
+
const where = `Recommendation ${index + 1}`;
|
|
193
|
+
if (!recommendation)
|
|
194
|
+
return void problems.push(`${where} must say what to do, its priority and when it is done.`);
|
|
195
|
+
text(where, recommendation.text, "say what to do");
|
|
196
|
+
if (!PRIORITIES.includes(recommendation.priority))
|
|
197
|
+
problems.push(`${where}: the priority must be high, medium or low.`);
|
|
198
|
+
links(where, recommendation.findings, findingIds, "findings");
|
|
199
|
+
text(where, recommendation.target, "who should act is optional text", REPORT_LIMITS.short, false);
|
|
200
|
+
text(where, recommendation.done_when, "say what you would see once it is done");
|
|
201
|
+
text(where, recommendation.advice, "advice is optional text", REPORT_LIMITS.text, false);
|
|
202
|
+
});
|
|
203
|
+
if (review && Array.isArray(report.limitations) && report.limitations.length === 0)
|
|
204
|
+
problems.push("Add limitations: what you could not test, or why the result may not hold.");
|
|
205
|
+
else if (!Array.isArray(report.limitations))
|
|
206
|
+
problems.push("Add limitations: a list of short lines, empty when there are none.");
|
|
207
|
+
else if (report.limitations.length > REPORT_LIMITS.lines || report.limitations.some((one) => !isText(one, REPORT_LIMITS.text)))
|
|
208
|
+
problems.push(`Limitations: at most ${REPORT_LIMITS.lines} lines of text.`);
|
|
209
|
+
const sections = report.sections === undefined ? {} : obj(report.sections);
|
|
210
|
+
if (!sections)
|
|
211
|
+
problems.push("Sections: an object of heading → text.");
|
|
212
|
+
else {
|
|
213
|
+
const entries = Object.entries(sections);
|
|
214
|
+
if (entries.length > REPORT_LIMITS.sections)
|
|
215
|
+
problems.push(`Keep it to ${REPORT_LIMITS.sections} extra sections.`);
|
|
216
|
+
for (const [heading, value] of entries) {
|
|
217
|
+
if (!heading.trim() || heading.length > REPORT_LIMITS.heading)
|
|
218
|
+
problems.push(`Section "${heading.slice(0, 40)}": a heading is 1..${REPORT_LIMITS.heading} characters.`);
|
|
219
|
+
if (!isText(value, REPORT_LIMITS.longText))
|
|
220
|
+
problems.push(`Section "${heading.slice(0, 40)}": write it out, up to ${REPORT_LIMITS.longText} characters.`);
|
|
221
|
+
}
|
|
222
|
+
for (const wanted of requirement?.sections ?? [])
|
|
223
|
+
if (!isText(sections[wanted], REPORT_LIMITS.longText))
|
|
224
|
+
problems.push(`This ask requires the section "${wanted}". Add it under sections.`);
|
|
225
|
+
}
|
|
226
|
+
return problems;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* The report as the answer's words (`deliverable`): its JSON in one fixed order, the kind first and the extra sections
|
|
230
|
+
* last, so the ask's shape check can tell a section heading from any other key (bridge.ts).
|
|
231
|
+
*/
|
|
232
|
+
export const reportText = (report) => JSON.stringify({
|
|
233
|
+
kind: REPORT_KIND,
|
|
234
|
+
summary: report.summary,
|
|
235
|
+
steps: report.steps,
|
|
236
|
+
findings: report.findings,
|
|
237
|
+
recommendations: report.recommendations,
|
|
238
|
+
limitations: report.limitations,
|
|
239
|
+
...(report.sections ? { sections: report.sections } : {})
|
|
240
|
+
});
|
|
241
|
+
/** Plain JSON keys, in the order a reader takes them: the bridge's shape gate looks for each. */
|
|
242
|
+
export const REPORT_KEYS = ["summary", "steps", "findings", "recommendations", "limitations"];
|
|
243
|
+
/**
|
|
244
|
+
* Where a report's files may be shown from: IXO's own content-addressed stores only (the gateway's `/ipfs/<cid>`, the
|
|
245
|
+
* Vault's `/public/cid/<cid>`). A claim can be filed by anyone, and a file at any other URL would let the answerer
|
|
246
|
+
* swap it after the approval, or learn who opened it.
|
|
247
|
+
*/
|
|
248
|
+
const STORED = /^https:\/\/(ipfs\.gateway\.ixo\.world\/ipfs|(?:devnet\.|testnet\.)?vfs\.ixo\.earth\/public\/cid)\/b[a-z2-7]{20,}$/;
|
|
249
|
+
/** Whether an answer's file may be shown from this URL (see `STORED`): every answer reader asks the same question. */
|
|
250
|
+
export const isStoredFile = (url) => typeof url === "string" && STORED.test(url);
|
|
251
|
+
/** The words a reader sees for a result. */
|
|
252
|
+
const SAID = { not_tested: "not tested", excluded: "left out on purpose" };
|
|
253
|
+
export const said = (value) => SAID[String(value)] ?? String(value ?? "");
|
|
254
|
+
const line = (label, value) => (value === undefined || value === null || value === "" ? "" : `\n${label}: ${String(value)}`);
|
|
255
|
+
const named = (label, value) => (value.length ? `\n${label}: ${value.join(", ")}` : "");
|
|
256
|
+
const each = (list, draw) => (list.length ? list.map(draw).join("\n\n") : "None");
|
|
257
|
+
/** A text field, or nothing. */
|
|
258
|
+
const str = (value) => (typeof value === "string" && value.trim() ? value : undefined);
|
|
259
|
+
/** A list of short strings (ids, lines); anything else in it is dropped. */
|
|
260
|
+
const strs = (value) => (Array.isArray(value) ? value.filter((one) => typeof one === "string" && one.trim().length > 0) : []);
|
|
261
|
+
/** Present keys only, so an optional field that is absent stays absent. */
|
|
262
|
+
const some = (value) => Object.fromEntries(Object.entries(value).filter(([, one]) => one !== undefined));
|
|
263
|
+
const list = (value) => (Array.isArray(value) ? value.map((one) => obj(one) ?? {}) : []);
|
|
264
|
+
/**
|
|
265
|
+
* The display parser: an answer envelope (or a bare report) → its report and its files, or null when it carries none.
|
|
266
|
+
* Tolerant: a reader shows what is there, the validator is where shape is enforced.
|
|
267
|
+
*/
|
|
268
|
+
export function readReport(envelope) {
|
|
269
|
+
const doc = obj(envelope);
|
|
270
|
+
const report = obj(doc?.report) ?? (doc?.kind === REPORT_KIND ? doc : null);
|
|
271
|
+
if (!report)
|
|
272
|
+
return null;
|
|
273
|
+
const summary = obj(report.summary) ?? {};
|
|
274
|
+
const read = {
|
|
275
|
+
summary: some({ product: str(summary.product) ?? "", build: str(summary.build), date: str(summary.date) ?? "", environment: str(summary.environment), target: str(summary.target), scope: str(summary.scope) ?? "", outcome: str(summary.outcome) ?? "" }),
|
|
276
|
+
steps: list(report.steps).map((step, index) => some({ id: str(step.id) ?? `step-${index + 1}`, what: str(step.what) ?? "", expected: str(step.expected), observed: str(step.observed), result: str(step.result) ?? "", notes: str(step.notes), evidence: strs(step.evidence) })),
|
|
277
|
+
findings: list(report.findings).map((finding, index) => some({
|
|
278
|
+
id: str(finding.id) ?? `finding-${index + 1}`,
|
|
279
|
+
title: str(finding.title) ?? "",
|
|
280
|
+
steps: strs(finding.steps),
|
|
281
|
+
observed: str(finding.observed),
|
|
282
|
+
expected: str(finding.expected),
|
|
283
|
+
impact: str(finding.impact),
|
|
284
|
+
severity: str(finding.severity) ?? "",
|
|
285
|
+
severity_why: str(finding.severity_why),
|
|
286
|
+
how_to_reproduce: str(finding.how_to_reproduce),
|
|
287
|
+
cannot_reproduce: str(finding.cannot_reproduce),
|
|
288
|
+
uncertainty: str(finding.uncertainty),
|
|
289
|
+
advice: str(finding.advice),
|
|
290
|
+
evidence: strs(finding.evidence)
|
|
291
|
+
})),
|
|
292
|
+
recommendations: list(report.recommendations).map((one) => some({ text: str(one.text) ?? "", priority: str(one.priority) ?? "", findings: strs(one.findings), target: str(one.target), done_when: str(one.done_when), advice: str(one.advice) })),
|
|
293
|
+
limitations: strs(report.limitations),
|
|
294
|
+
sections: Object.entries(obj(report.sections) ?? {}).map(([title, value]) => ({ title, text: String(value) }))
|
|
295
|
+
};
|
|
296
|
+
const files = (Array.isArray(doc?.files) ? doc.files : [])
|
|
297
|
+
.map(obj)
|
|
298
|
+
.filter((one) => one !== null && typeof one.id === "string" && typeof one.url === "string" && STORED.test(one.url))
|
|
299
|
+
.slice(0, 24)
|
|
300
|
+
.map((one) => ({ id: String(one.id), url: String(one.url), sha256: String(one.sha256 ?? ""), mediaType: String(one.mediaType ?? "application/octet-stream"), name: String(one.name ?? one.id) }));
|
|
301
|
+
return { doc: read, files };
|
|
302
|
+
}
|
|
303
|
+
/** The report as headed text, in reading order: for the places that only print text (a share card, an old reader). */
|
|
304
|
+
export function reportSections(report) {
|
|
305
|
+
const { summary } = report;
|
|
306
|
+
return [
|
|
307
|
+
{
|
|
308
|
+
title: "Summary",
|
|
309
|
+
text: `What was checked: ${summary.product}${line("Build", summary.build)}${line("Date", summary.date)}${line("Where", summary.environment)}${line("For", summary.target)}${line("Scope", summary.scope)}${line("Outcome", summary.outcome)}`
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
title: "Steps",
|
|
313
|
+
text: each(report.steps, (step, index) => `${index + 1}. ${step.what} — ${said(step.result)}${line("Expected", step.expected)}${line("Seen", step.observed)}${line("Notes", step.notes)}${named("Evidence", step.evidence)}`)
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
title: "Findings",
|
|
317
|
+
text: each(report.findings, (finding, index) => `${index + 1}. [${said(finding.severity)}] ${finding.title}${line("Why that severe", finding.severity_why)}${named("From steps", finding.steps)}${line("Expected", finding.expected)}${line("Seen", finding.observed)}${line("Impact", finding.impact)}${line("How to reproduce", finding.how_to_reproduce)}${line("Can't reproduce because", finding.cannot_reproduce)}${line("How sure", finding.uncertainty)}${line("Advice", finding.advice)}${named("Evidence", finding.evidence)}`)
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
title: "Recommendations",
|
|
321
|
+
text: each(report.recommendations, (one, index) => `${index + 1}. [${said(one.priority)}] ${one.text}${named("For findings", one.findings)}${line("Who", one.target)}${line("Done when", one.done_when)}${line("Advice", one.advice)}`)
|
|
322
|
+
},
|
|
323
|
+
{ title: "Limitations", text: report.limitations.length ? report.limitations.map((one) => `• ${one}`).join("\n") : "None" },
|
|
324
|
+
...report.sections
|
|
325
|
+
];
|
|
326
|
+
}
|
|
327
|
+
/** The Openhands envelope's own fields: everything else at the root of an expert answer is a form answer. */
|
|
328
|
+
const ENVELOPE_KEYS = new Set(["v", "collectionId", "ts", "submitter", "delegate", "alias", "via", "deliverable"]);
|
|
329
|
+
/**
|
|
330
|
+
* An answer to an expert ask (`checkEnvelope` in data/checkers.ts), read back into labelled answers: each answer's label is recovered from
|
|
331
|
+
* the `deliverable` lines `checkEnvelope` wrote ("Label: value", in the answers' order), so it needs no form. Null when
|
|
332
|
+
* the envelope is not one (its lines and its answers do not line up). File answers keep only files on IXO's own stores.
|
|
333
|
+
*/
|
|
334
|
+
export function formAnswersOf(envelope) {
|
|
335
|
+
if (!envelope || typeof envelope !== "object" || Array.isArray(envelope))
|
|
336
|
+
return null;
|
|
337
|
+
const doc = envelope;
|
|
338
|
+
const deliverable = typeof doc.deliverable === "string" ? doc.deliverable : null;
|
|
339
|
+
const keys = Object.keys(doc).filter((key) => !ENVELOPE_KEYS.has(key));
|
|
340
|
+
if (!deliverable || !keys.length || keys.length > 50)
|
|
341
|
+
return null;
|
|
342
|
+
const out = [];
|
|
343
|
+
let at = 0;
|
|
344
|
+
for (const key of keys) {
|
|
345
|
+
const value = doc[key];
|
|
346
|
+
const isFiles = Array.isArray(value) && value.every((one) => one && typeof one === "object" && typeof one.name === "string");
|
|
347
|
+
const said = isFiles ? value.map((one) => one.name).join(", ") : typeof value === "boolean" ? (value ? "yes" : "no") : typeof value === "string" || typeof value === "number" ? String(value) : null;
|
|
348
|
+
if (said === null)
|
|
349
|
+
return null;
|
|
350
|
+
/* "Label: said", then a line break or the end. */
|
|
351
|
+
let found = deliverable.indexOf(`: ${said}`, at);
|
|
352
|
+
while (found !== -1 && !(found + 2 + said.length === deliverable.length || deliverable[found + 2 + said.length] === "\n"))
|
|
353
|
+
found = deliverable.indexOf(`: ${said}`, found + 1);
|
|
354
|
+
if (found === -1)
|
|
355
|
+
return null;
|
|
356
|
+
const label = deliverable.slice(at, found).trim();
|
|
357
|
+
if (!label || label.includes("\n"))
|
|
358
|
+
return null;
|
|
359
|
+
at = found + 2 + said.length + 1;
|
|
360
|
+
if (isFiles) {
|
|
361
|
+
const files = value
|
|
362
|
+
.filter((one) => isStoredFile(one.content))
|
|
363
|
+
.map((one) => ({ name: one.name.replace(/\s+/g, " ").trim().slice(0, 80) || "file", mediaType: typeof one.type === "string" ? one.type.slice(0, 80) : "application/octet-stream", url: one.content }));
|
|
364
|
+
out.push({ label, files });
|
|
365
|
+
}
|
|
366
|
+
else
|
|
367
|
+
out.push({ label, value: said });
|
|
368
|
+
}
|
|
369
|
+
return at >= deliverable.length ? out : null;
|
|
370
|
+
}
|
|
371
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/rubric/report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The small half of `openhands-report/1` (rubric/report.ts) that an ask form needs: the poster's extra section
|
|
3
|
+
* headings and the AI's line on a report. Apart so the composer's first load carries neither the validator nor the
|
|
4
|
+
* reader.
|
|
5
|
+
*/
|
|
6
|
+
/** The id of the AI's report line in an ask's terms (`withReport`). */
|
|
7
|
+
export declare const REPORT_CHECK_ID = "r1";
|
|
8
|
+
/** What an ask asks of a report: the poster's extra section headings (terms `report`). */
|
|
9
|
+
export interface ReportRequirement {
|
|
10
|
+
sections: string[];
|
|
11
|
+
/**
|
|
12
|
+
* `2`: the Expert Review rules (2026-10-26): every finding carries evidence and says how to reproduce it, and the
|
|
13
|
+
* limitations are stated. Only review calls posted from then on carry it; a report ask without it is held to the
|
|
14
|
+
* rules it was posted with.
|
|
15
|
+
*/
|
|
16
|
+
v?: 2;
|
|
17
|
+
}
|
|
18
|
+
/** Extra sections a poster may require, and how long a heading may be. */
|
|
19
|
+
export declare const REQUIRED_MAX = 5;
|
|
20
|
+
export declare const HEADING_MAX = 60;
|
|
21
|
+
/** The poster's extra section headings, cleaned: at most five, each 1..60 characters, no repeats. Null if any is bad. */
|
|
22
|
+
export declare function requiredSections(raw: unknown): string[] | null;
|
|
23
|
+
/**
|
|
24
|
+
* The line the AI pre-check rules on: a structured report, or one attached as a PDF, with the poster's sections.
|
|
25
|
+
*
|
|
26
|
+
* Under the Expert Review rules (`v: 2`) it is only the clear failure — no report, or a report of something else —
|
|
27
|
+
* because each of the review's checks is its own line (`REVIEW_LINES`), and it stays within the parser's 300
|
|
28
|
+
* characters so the line the oracle reads is the line the ask shows.
|
|
29
|
+
*/
|
|
30
|
+
export declare function reportCheckText(requirement: ReportRequirement): string;
|
|
31
|
+
//# sourceMappingURL=reportLine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reportLine.d.ts","sourceRoot":"","sources":["../../../src/rubric/reportLine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uEAAuE;AACvE,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC,0FAA0F;AAC1F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;;;OAIG;IACH,CAAC,CAAC,EAAE,CAAC,CAAC;CACP;AAED,0EAA0E;AAC1E,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,WAAW,KAAK,CAAC;AAE9B,yHAAyH;AACzH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,GAAG,IAAI,CAM9D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,iBAAiB,GAAG,MAAM,CAStE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The small half of `openhands-report/1` (rubric/report.ts) that an ask form needs: the poster's extra section
|
|
3
|
+
* headings and the AI's line on a report. Apart so the composer's first load carries neither the validator nor the
|
|
4
|
+
* reader.
|
|
5
|
+
*/
|
|
6
|
+
/** The id of the AI's report line in an ask's terms (`withReport`). */
|
|
7
|
+
export const REPORT_CHECK_ID = "r1";
|
|
8
|
+
/** Extra sections a poster may require, and how long a heading may be. */
|
|
9
|
+
export const REQUIRED_MAX = 5;
|
|
10
|
+
export const HEADING_MAX = 60;
|
|
11
|
+
/** The poster's extra section headings, cleaned: at most five, each 1..60 characters, no repeats. Null if any is bad. */
|
|
12
|
+
export function requiredSections(raw) {
|
|
13
|
+
if (raw === undefined)
|
|
14
|
+
return [];
|
|
15
|
+
if (!Array.isArray(raw) || raw.length > REQUIRED_MAX)
|
|
16
|
+
return null;
|
|
17
|
+
const names = raw.map((one) => (typeof one === "string" ? one.trim() : ""));
|
|
18
|
+
if (names.some((one) => !one || one.length > HEADING_MAX))
|
|
19
|
+
return null;
|
|
20
|
+
return [...new Set(names)];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The line the AI pre-check rules on: a structured report, or one attached as a PDF, with the poster's sections.
|
|
24
|
+
*
|
|
25
|
+
* Under the Expert Review rules (`v: 2`) it is only the clear failure — no report, or a report of something else —
|
|
26
|
+
* because each of the review's checks is its own line (`REVIEW_LINES`), and it stays within the parser's 300
|
|
27
|
+
* characters so the line the oracle reads is the line the ask shows.
|
|
28
|
+
*/
|
|
29
|
+
export function reportCheckText(requirement) {
|
|
30
|
+
if (requirement.v === 2) {
|
|
31
|
+
const extra = requirement.sections.length ? ` and has the sections ${requirement.sections.map((one) => `"${one}"`).join(", ")}` : "";
|
|
32
|
+
const line = `The answer is a review report (written out, or attached as a PDF) of what this ask asked to be reviewed${extra}. Fail this only if there is no report, or it plainly reviews something else.`;
|
|
33
|
+
if (line.length <= 300)
|
|
34
|
+
return line;
|
|
35
|
+
return "The answer is a review report (written out, or attached as a PDF) of what this ask asked to be reviewed, with the sections the ask names. Fail this only if there is no report, or it plainly reviews something else.";
|
|
36
|
+
}
|
|
37
|
+
const extra = requirement.sections.length ? ` It also has these sections: ${requirement.sections.map((one) => `"${one}"`).join(", ")}.` : "";
|
|
38
|
+
return `The answer is a review report, either written out or attached as a PDF. It says what was checked, when, where and what was in scope, and the outcome; lists the steps taken, each with what was expected and what was seen, passed, failed, blocked, not tested or left out; lists the findings, each with its impact and a severity of blocker, major or minor with why, and every major finding says how to reproduce it (a blocker says how, or what is missing to reproduce it); gives recommendations, each with a priority and what would show it is done; and gives the review's limitations.${extra}`;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=reportLine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reportLine.js","sourceRoot":"","sources":["../../../src/rubric/reportLine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AAapC,0EAA0E;AAC1E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAE9B,yHAAyH;AACzH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,YAAY;QAAE,OAAO,IAAI,CAAC;IAClE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,WAA8B;IAC5D,IAAI,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrI,MAAM,IAAI,GAAG,0GAA0G,KAAK,+EAA+E,CAAC;QAC5M,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,uNAAuN,CAAC;IACjO,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,gCAAgC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7I,OAAO,ukBAAukB,KAAK,EAAE,CAAC;AACxlB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The review report template a specialist sees before handing in an Expert Review (2026-10-26, the Asky Checker
|
|
3
|
+
* round): the same six checks the review is held to (`REVIEW_CHECKS`, written as rules in call.ts `REVIEW_LINES`,
|
|
4
|
+
* the report line and the bridge's machine gates), as the sections of one report.
|
|
5
|
+
*
|
|
6
|
+
* One source for every place that shows it — the Experts app's submit page, the MCP's submit and read guidance, and
|
|
7
|
+
* the asks plugin's `report` skill — so no two can drift. Each section names the `openhands-report/1` field it fills
|
|
8
|
+
* (report.ts), so the written report and the structured one are the same report. Plain strings, no imports: it rides
|
|
9
|
+
* into the browser.
|
|
10
|
+
*/
|
|
11
|
+
/** The six checks, in plain words: what the checker looks at, and what the person giving the final OK weighs. */
|
|
12
|
+
export declare const REVIEW_CHECKS: readonly string[];
|
|
13
|
+
/** What is refused outright; everything else goes to the ask's owner for the final OK. */
|
|
14
|
+
export declare const REVIEW_REFUSED = "A report is turned down by the checker only when it is clearly not one: no report, a report of something other than this ask, or no evidence at all. Anything else goes to the ask's owner, who gives the final OK before you are paid.";
|
|
15
|
+
export interface TemplateSection {
|
|
16
|
+
title: string;
|
|
17
|
+
/** What to write, one line per item, and the report field it fills. */
|
|
18
|
+
items: {
|
|
19
|
+
say: string;
|
|
20
|
+
field?: string;
|
|
21
|
+
}[];
|
|
22
|
+
/** Where it goes in a structured report (`openhands-report/1`). */
|
|
23
|
+
field: string;
|
|
24
|
+
}
|
|
25
|
+
export declare const REVIEW_REPORT_SECTIONS: readonly TemplateSection[];
|
|
26
|
+
/** The template as plain text: headings and bullets, for the MCP's guidance and the plugin's skill. */
|
|
27
|
+
export declare function reviewReportTemplate(options?: {
|
|
28
|
+
fields?: boolean;
|
|
29
|
+
}): string;
|
|
30
|
+
//# sourceMappingURL=reportTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reportTemplate.d.ts","sourceRoot":"","sources":["../../../src/rubric/reportTemplate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,iHAAiH;AACjH,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAO1C,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,cAAc,4OAA4O,CAAC;AAExQ,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACzC,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,sBAAsB,EAAE,SAAS,eAAe,EAuC5D,CAAC;AAEF,uGAAuG;AACvG,wBAAgB,oBAAoB,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAU/E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The review report template a specialist sees before handing in an Expert Review (2026-10-26, the Asky Checker
|
|
3
|
+
* round): the same six checks the review is held to (`REVIEW_CHECKS`, written as rules in call.ts `REVIEW_LINES`,
|
|
4
|
+
* the report line and the bridge's machine gates), as the sections of one report.
|
|
5
|
+
*
|
|
6
|
+
* One source for every place that shows it — the Experts app's submit page, the MCP's submit and read guidance, and
|
|
7
|
+
* the asks plugin's `report` skill — so no two can drift. Each section names the `openhands-report/1` field it fills
|
|
8
|
+
* (report.ts), so the written report and the structured one are the same report. Plain strings, no imports: it rides
|
|
9
|
+
* into the browser.
|
|
10
|
+
*/
|
|
11
|
+
/** The six checks, in plain words: what the checker looks at, and what the person giving the final OK weighs. */
|
|
12
|
+
export const REVIEW_CHECKS = [
|
|
13
|
+
"It covers the ask's scenarios (or steps)",
|
|
14
|
+
"Every finding has evidence: a screenshot, recording or trace",
|
|
15
|
+
"Every problem says how to reproduce it",
|
|
16
|
+
"Every problem has a severity: blocker, major or minor",
|
|
17
|
+
"Every recommendation says what to change",
|
|
18
|
+
"The limitations are stated"
|
|
19
|
+
];
|
|
20
|
+
/** What is refused outright; everything else goes to the ask's owner for the final OK. */
|
|
21
|
+
export const REVIEW_REFUSED = "A report is turned down by the checker only when it is clearly not one: no report, a report of something other than this ask, or no evidence at all. Anything else goes to the ask's owner, who gives the final OK before you are paid.";
|
|
22
|
+
export const REVIEW_REPORT_SECTIONS = [
|
|
23
|
+
{
|
|
24
|
+
title: "What was tested",
|
|
25
|
+
field: "summary",
|
|
26
|
+
items: [
|
|
27
|
+
{ say: "The ask and what you reviewed", field: "summary.product" },
|
|
28
|
+
{ say: "The version or build", field: "summary.build" },
|
|
29
|
+
{ say: "Where: environment, URL, device, build", field: "summary.environment" },
|
|
30
|
+
{ say: "The scenarios you covered", field: "summary.scope" },
|
|
31
|
+
{ say: "The date", field: "summary.date" },
|
|
32
|
+
{ say: "The outcome, in one sentence", field: "summary.outcome" }
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
title: "Steps",
|
|
37
|
+
field: "steps",
|
|
38
|
+
items: [{ say: "One per scenario or step: what you did, what you expected, what you observed", field: "what, expected, observed" }, { say: "Its result: passed, failed, blocked or not tested", field: "result: passed, failed, blocked, not_tested" }]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
title: "Findings",
|
|
42
|
+
field: "findings",
|
|
43
|
+
items: [
|
|
44
|
+
{ say: "Each problem: what happened", field: "title, observed, expected" },
|
|
45
|
+
{ say: "Its evidence: a screenshot, recording or trace, attached and named", field: "evidence" },
|
|
46
|
+
{ say: "How to reproduce it (a blocker you cannot reproduce says what is missing)", field: "how_to_reproduce, cannot_reproduce" },
|
|
47
|
+
{ say: "Its severity, blocker, major or minor, and why", field: "severity, severity_why" },
|
|
48
|
+
{ say: "Its impact on the person using it", field: "impact" }
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
title: "Recommendations",
|
|
53
|
+
field: "recommendations",
|
|
54
|
+
items: [{ say: "Each: what to change", field: "text" }, { say: "Its priority: high, medium or low", field: "priority" }, { say: "How to tell it is done", field: "done_when" }]
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
title: "Limitations",
|
|
58
|
+
field: "limitations",
|
|
59
|
+
items: [{ say: "What you could not test, and why the result may not hold", field: "limitations" }]
|
|
60
|
+
}
|
|
61
|
+
];
|
|
62
|
+
/** The template as plain text: headings and bullets, for the MCP's guidance and the plugin's skill. */
|
|
63
|
+
export function reviewReportTemplate(options = {}) {
|
|
64
|
+
return [
|
|
65
|
+
"Review report",
|
|
66
|
+
"",
|
|
67
|
+
...REVIEW_REPORT_SECTIONS.flatMap((section) => [`## ${section.title}`, ...section.items.map((item) => `- ${item.say}${options.fields && item.field ? ` (${item.field})` : ""}`), ""]),
|
|
68
|
+
"What the checker looks at:",
|
|
69
|
+
...REVIEW_CHECKS.map((check, index) => `${index + 1}. ${check}`),
|
|
70
|
+
"",
|
|
71
|
+
REVIEW_REFUSED
|
|
72
|
+
].join("\n");
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=reportTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reportTemplate.js","sourceRoot":"","sources":["../../../src/rubric/reportTemplate.ts"],"names":[],"mappings":"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"}
|