agents-inc 0.152.1 → 0.153.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/CHANGELOG.md +33 -0
- package/README.md +31 -35
- package/dist/{chunk-LDP5ASDM.js → chunk-2HC2SNRP.js} +2 -15
- package/dist/chunk-2HC2SNRP.js.map +1 -0
- package/dist/{chunk-WKTHWQKM.js → chunk-35VOK7XE.js} +1338 -2573
- package/dist/chunk-35VOK7XE.js.map +1 -0
- package/dist/{chunk-SX5H6TSC.js → chunk-4VYALFQZ.js} +11 -8
- package/dist/chunk-4VYALFQZ.js.map +1 -0
- package/dist/{chunk-KXYVJGJP.js → chunk-6CNRMCFM.js} +3 -2
- package/dist/{chunk-KXYVJGJP.js.map → chunk-6CNRMCFM.js.map} +1 -1
- package/dist/{chunk-LZ52XEPR.js → chunk-ACKC577F.js} +7 -6
- package/dist/chunk-ACKC577F.js.map +1 -0
- package/dist/{chunk-XHUODHZ4.js → chunk-BMGBA6HJ.js} +22 -49
- package/dist/chunk-BMGBA6HJ.js.map +1 -0
- package/dist/{chunk-FVDKAVOL.js → chunk-EFU6P3B7.js} +18 -51
- package/dist/chunk-EFU6P3B7.js.map +1 -0
- package/dist/{chunk-STMHDOZD.js → chunk-F7Z5I6GU.js} +12 -9
- package/dist/chunk-F7Z5I6GU.js.map +1 -0
- package/dist/{chunk-E5X6RJ4E.js → chunk-FIHTAFST.js} +29 -26
- package/dist/chunk-FIHTAFST.js.map +1 -0
- package/dist/{chunk-QZZJFYUQ.js → chunk-FRWKCE6R.js} +3 -3
- package/dist/chunk-FRWKCE6R.js.map +1 -0
- package/dist/{chunk-5UWKOOIS.js → chunk-HEBPKK5L.js} +129 -195
- package/dist/chunk-HEBPKK5L.js.map +1 -0
- package/dist/{chunk-MJ2KHG24.js → chunk-IO4VEW5U.js} +6 -6
- package/dist/{chunk-MJ2KHG24.js.map → chunk-IO4VEW5U.js.map} +1 -1
- package/dist/{chunk-TUPYW2IQ.js → chunk-JC7DBPRD.js} +9 -12
- package/dist/chunk-JC7DBPRD.js.map +1 -0
- package/dist/{chunk-5GUOIJSG.js → chunk-JFAUQDZM.js} +3 -15
- package/dist/chunk-JFAUQDZM.js.map +1 -0
- package/dist/{chunk-ZL7PFNHN.js → chunk-K3O3YQYG.js} +2 -2
- package/dist/{chunk-SKQWRUPX.js → chunk-K7PJDWER.js} +59 -33
- package/dist/chunk-K7PJDWER.js.map +1 -0
- package/dist/{chunk-MVR3SYMN.js → chunk-KET3EVGX.js} +4 -3
- package/dist/{chunk-MVR3SYMN.js.map → chunk-KET3EVGX.js.map} +1 -1
- package/dist/{chunk-MWG4VU64.js → chunk-M5HSTNYU.js} +50 -56
- package/dist/chunk-M5HSTNYU.js.map +1 -0
- package/dist/{chunk-TJJPWUMA.js → chunk-NSJ2S7R5.js} +3 -2
- package/dist/{chunk-TJJPWUMA.js.map → chunk-NSJ2S7R5.js.map} +1 -1
- package/dist/{chunk-IHUY4M22.js → chunk-NXGMM5YN.js} +4 -4
- package/dist/chunk-NXQAY5U7.js +18441 -0
- package/dist/chunk-NXQAY5U7.js.map +1 -0
- package/dist/{chunk-Q2KG7UV3.js → chunk-OJJLYHM3.js} +2 -1
- package/dist/{chunk-Q2KG7UV3.js.map → chunk-OJJLYHM3.js.map} +1 -1
- package/dist/{chunk-PZIZNMHK.js → chunk-ORJ5Y222.js} +159 -138
- package/dist/chunk-ORJ5Y222.js.map +1 -0
- package/dist/{chunk-NR3OZGL4.js → chunk-OZXAJNLA.js} +2 -1
- package/dist/{chunk-NR3OZGL4.js.map → chunk-OZXAJNLA.js.map} +1 -1
- package/dist/{chunk-MM7CTTAV.js → chunk-Q5FLW4JG.js} +2 -2
- package/dist/{chunk-MM7CTTAV.js.map → chunk-Q5FLW4JG.js.map} +1 -1
- package/dist/{chunk-GRVKW3CC.js → chunk-R4SEU3DF.js} +3 -2
- package/dist/{chunk-GRVKW3CC.js.map → chunk-R4SEU3DF.js.map} +1 -1
- package/dist/{chunk-76ADG7LQ.js → chunk-R54KIGN2.js} +8 -22
- package/dist/chunk-R54KIGN2.js.map +1 -0
- package/dist/{chunk-SBHBBZKF.js → chunk-REKOWTIB.js} +25 -120
- package/dist/chunk-REKOWTIB.js.map +1 -0
- package/dist/chunk-TY6CAOL7.js +40 -0
- package/dist/chunk-TY6CAOL7.js.map +1 -0
- package/dist/{chunk-BNSRA6HL.js → chunk-U2DNAHFE.js} +39 -176
- package/dist/chunk-U2DNAHFE.js.map +1 -0
- package/dist/{chunk-PMM2MYMA.js → chunk-U2YSGBHA.js} +624 -349
- package/dist/chunk-U2YSGBHA.js.map +1 -0
- package/dist/{chunk-DTSG5XZB.js → chunk-V3ENMW7G.js} +3 -3
- package/dist/{chunk-L7SZXUBJ.js → chunk-VECFAKM5.js} +7 -6
- package/dist/{chunk-L7SZXUBJ.js.map → chunk-VECFAKM5.js.map} +1 -1
- package/dist/chunk-VGEBYCQZ.js +59 -0
- package/dist/chunk-VGEBYCQZ.js.map +1 -0
- package/dist/chunk-VZRO7RYT.js +3694 -0
- package/dist/chunk-VZRO7RYT.js.map +1 -0
- package/dist/{chunk-LASI35KT.js → chunk-WDAO3RUY.js} +14 -28
- package/dist/chunk-WDAO3RUY.js.map +1 -0
- package/dist/{chunk-MQ7FLIYS.js → chunk-WG6V6VJV.js} +3 -2
- package/dist/{chunk-MQ7FLIYS.js.map → chunk-WG6V6VJV.js.map} +1 -1
- package/dist/chunk-X5XJ6WKO.js +284 -0
- package/dist/chunk-X5XJ6WKO.js.map +1 -0
- package/dist/{chunk-RNJWAKMO.js → chunk-XGMOXMS4.js} +9 -8
- package/dist/chunk-XGMOXMS4.js.map +1 -0
- package/dist/{chunk-IUQBOCSU.js → chunk-ZBPEFQ4G.js} +2 -1
- package/dist/{chunk-IUQBOCSU.js.map → chunk-ZBPEFQ4G.js.map} +1 -1
- package/dist/{chunk-QRDTLVXG.js → chunk-ZNDLUWWD.js} +9 -22
- package/dist/chunk-ZNDLUWWD.js.map +1 -0
- package/dist/commands/build/marketplace.js +114 -35
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +9 -10
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/compile.js +97 -70
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/doctor.js +793 -64
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +169 -208
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +24 -39
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/init.js +41 -46
- package/dist/commands/list.js +10 -12
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/search.js +20 -81
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +25 -31
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +82 -332
- package/dist/commands/update.js.map +1 -1
- package/dist/components/common/confirm.js +1 -1
- package/dist/components/common/prompt-confirm.js +1 -1
- package/dist/components/common/select-list.js +2 -2
- package/dist/components/common/spinner.js +1 -1
- package/dist/components/wizard/category-grid.js +5 -6
- package/dist/components/wizard/checkbox-grid.js +5 -6
- package/dist/components/wizard/domain-selection.js +12 -13
- package/dist/components/wizard/run-wizard-session.js +30 -36
- package/dist/components/wizard/scroll-affordance.js +2 -2
- package/dist/components/wizard/skill-agent-summary.js +7 -7
- package/dist/components/wizard/source-grid.js +6 -11
- package/dist/components/wizard/stack-selection.js +9 -9
- package/dist/components/wizard/step-agents.js +12 -12
- package/dist/components/wizard/step-build.js +10 -11
- package/dist/components/wizard/step-confirm.js +11 -11
- package/dist/components/wizard/step-sources.js +11 -17
- package/dist/components/wizard/step-stack.js +10 -10
- package/dist/components/wizard/summary-panel.js +10 -10
- package/dist/components/wizard/toast.js +2 -2
- package/dist/components/wizard/wizard-layout.js +15 -16
- package/dist/components/wizard/wizard-tabs.js +6 -12
- package/dist/components/wizard/wizard.js +29 -35
- package/dist/config-exports.js +1 -1
- package/dist/copy-local-skills-KF2RAVD3.js +14 -0
- package/dist/hooks/init.js +49 -48
- package/dist/hooks/init.js.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/load-agent-defs-DGXGBU3Q.js +15 -0
- package/dist/{loader-5JP4S7CJ.js → loader-4U7UCE2Y.js} +7 -5
- package/dist/recompile-project-agents-CJVBAWDJ.js +20 -0
- package/dist/{source-loader-MZYCPL2S.js → source-loader-ZNSYJJCI.js} +6 -6
- package/dist/src/agents/developer/ai-developer/identity.md +4 -4
- package/dist/src/agents/developer/ai-developer/playbook.md +1 -1
- package/dist/src/agents/developer/api-developer/identity.md +4 -4
- package/dist/src/agents/developer/api-developer/metadata.yaml +1 -1
- package/dist/src/agents/developer/cli-developer/identity.md +4 -4
- package/dist/src/agents/developer/web-developer/identity.md +2 -2
- package/dist/src/agents/developer/web-developer/metadata.yaml +1 -1
- package/dist/src/agents/meta/agent-summoner/identity.md +4 -5
- package/dist/src/agents/meta/agent-summoner/output.md +2 -2
- package/dist/src/agents/meta/agent-summoner/playbook.md +15 -16
- package/dist/src/agents/meta/codex-keeper/identity.md +4 -4
- package/dist/src/agents/meta/codex-keeper/playbook.md +1 -1
- package/dist/src/agents/meta/convention-keeper/identity.md +1 -1
- package/dist/src/agents/meta/skill-summoner/critical-reminders.md +0 -34
- package/dist/src/agents/meta/skill-summoner/critical-requirements.md +27 -3
- package/dist/src/agents/meta/skill-summoner/identity.md +2 -2
- package/{src/agents/planning/web-pm → dist/src/agents/planning/pm}/critical-reminders.md +10 -7
- package/dist/src/agents/planning/{web-pm → pm}/critical-requirements.md +8 -4
- package/dist/src/agents/planning/pm/identity.md +47 -0
- package/dist/src/agents/planning/pm/metadata.yaml +12 -0
- package/dist/src/agents/planning/{web-pm → pm}/output.md +7 -90
- package/dist/src/agents/planning/pm/playbook.md +185 -0
- package/dist/src/agents/researcher/ai-researcher/critical-reminders.md +58 -0
- package/dist/src/agents/researcher/ai-researcher/critical-requirements.md +40 -0
- package/dist/src/agents/researcher/ai-researcher/identity.md +86 -0
- package/dist/src/agents/researcher/ai-researcher/metadata.yaml +10 -0
- package/dist/src/agents/researcher/ai-researcher/output.md +363 -0
- package/dist/src/agents/researcher/ai-researcher/playbook.md +545 -0
- package/dist/src/agents/researcher/api-researcher/critical-reminders.md +16 -0
- package/dist/src/agents/researcher/api-researcher/identity.md +7 -7
- package/dist/src/agents/researcher/cli-researcher/critical-reminders.md +50 -0
- package/dist/src/agents/researcher/cli-researcher/critical-requirements.md +36 -0
- package/dist/src/agents/researcher/cli-researcher/identity.md +87 -0
- package/dist/src/agents/researcher/cli-researcher/metadata.yaml +10 -0
- package/dist/src/agents/researcher/cli-researcher/output.md +343 -0
- package/dist/src/agents/researcher/cli-researcher/playbook.md +370 -0
- package/dist/src/agents/researcher/web-researcher/identity.md +5 -6
- package/dist/src/agents/reviewer/reviewer/critical-reminders.md +29 -0
- package/dist/src/agents/reviewer/reviewer/critical-requirements.md +31 -0
- package/dist/src/agents/reviewer/reviewer/identity.md +41 -0
- package/dist/src/agents/reviewer/reviewer/metadata.yaml +12 -0
- package/dist/src/agents/reviewer/reviewer/output.md +202 -0
- package/dist/src/agents/reviewer/reviewer/playbook.md +141 -0
- package/dist/src/agents/tester/ai-tester/critical-reminders.md +48 -0
- package/dist/src/agents/tester/ai-tester/critical-requirements.md +49 -0
- package/dist/src/agents/tester/ai-tester/identity.md +62 -0
- package/dist/src/agents/tester/ai-tester/metadata.yaml +12 -0
- package/dist/src/agents/tester/ai-tester/output.md +375 -0
- package/dist/src/agents/tester/ai-tester/playbook.md +789 -0
- package/dist/src/agents/tester/api-tester/identity.md +3 -3
- package/dist/src/agents/tester/cli-tester/critical-reminders.md +3 -3
- package/dist/src/agents/tester/cli-tester/critical-requirements.md +2 -2
- package/dist/src/agents/tester/cli-tester/identity.md +3 -3
- package/dist/src/agents/tester/cli-tester/output.md +4 -4
- package/dist/src/agents/tester/cli-tester/playbook.md +3 -3
- package/dist/src/agents/tester/web-tester/identity.md +3 -3
- package/dist/stores/wizard-store.js +8 -6
- package/package.json +13 -2
- package/src/agents/developer/ai-developer/identity.md +4 -4
- package/src/agents/developer/ai-developer/playbook.md +1 -1
- package/src/agents/developer/api-developer/identity.md +4 -4
- package/src/agents/developer/api-developer/metadata.yaml +1 -1
- package/src/agents/developer/cli-developer/identity.md +4 -4
- package/src/agents/developer/web-developer/identity.md +2 -2
- package/src/agents/developer/web-developer/metadata.yaml +1 -1
- package/src/agents/meta/agent-summoner/identity.md +4 -5
- package/src/agents/meta/agent-summoner/output.md +2 -2
- package/src/agents/meta/agent-summoner/playbook.md +15 -16
- package/src/agents/meta/codex-keeper/identity.md +4 -4
- package/src/agents/meta/codex-keeper/playbook.md +1 -1
- package/src/agents/meta/convention-keeper/identity.md +1 -1
- package/src/agents/meta/skill-summoner/critical-reminders.md +0 -34
- package/src/agents/meta/skill-summoner/critical-requirements.md +27 -3
- package/src/agents/meta/skill-summoner/identity.md +2 -2
- package/{dist/src/agents/planning/web-pm → src/agents/planning/pm}/critical-reminders.md +10 -7
- package/src/agents/planning/{web-pm → pm}/critical-requirements.md +8 -4
- package/src/agents/planning/pm/identity.md +47 -0
- package/src/agents/planning/pm/metadata.yaml +12 -0
- package/src/agents/planning/{web-pm → pm}/output.md +7 -90
- package/src/agents/planning/pm/playbook.md +185 -0
- package/src/agents/researcher/ai-researcher/critical-reminders.md +58 -0
- package/src/agents/researcher/ai-researcher/critical-requirements.md +40 -0
- package/src/agents/researcher/ai-researcher/identity.md +86 -0
- package/src/agents/researcher/ai-researcher/metadata.yaml +10 -0
- package/src/agents/researcher/ai-researcher/output.md +363 -0
- package/src/agents/researcher/ai-researcher/playbook.md +545 -0
- package/src/agents/researcher/api-researcher/critical-reminders.md +16 -0
- package/src/agents/researcher/api-researcher/identity.md +7 -7
- package/src/agents/researcher/cli-researcher/critical-reminders.md +50 -0
- package/src/agents/researcher/cli-researcher/critical-requirements.md +36 -0
- package/src/agents/researcher/cli-researcher/identity.md +87 -0
- package/src/agents/researcher/cli-researcher/metadata.yaml +10 -0
- package/src/agents/researcher/cli-researcher/output.md +343 -0
- package/src/agents/researcher/cli-researcher/playbook.md +370 -0
- package/src/agents/researcher/web-researcher/identity.md +5 -6
- package/src/agents/reviewer/reviewer/critical-reminders.md +29 -0
- package/src/agents/reviewer/reviewer/critical-requirements.md +31 -0
- package/src/agents/reviewer/reviewer/identity.md +41 -0
- package/src/agents/reviewer/reviewer/metadata.yaml +12 -0
- package/src/agents/reviewer/reviewer/output.md +202 -0
- package/src/agents/reviewer/reviewer/playbook.md +141 -0
- package/src/agents/tester/ai-tester/critical-reminders.md +48 -0
- package/src/agents/tester/ai-tester/critical-requirements.md +49 -0
- package/src/agents/tester/ai-tester/identity.md +62 -0
- package/src/agents/tester/ai-tester/metadata.yaml +12 -0
- package/src/agents/tester/ai-tester/output.md +375 -0
- package/src/agents/tester/ai-tester/playbook.md +789 -0
- package/src/agents/tester/api-tester/identity.md +3 -3
- package/src/agents/tester/cli-tester/critical-reminders.md +3 -3
- package/src/agents/tester/cli-tester/critical-requirements.md +2 -2
- package/src/agents/tester/cli-tester/identity.md +3 -3
- package/src/agents/tester/cli-tester/output.md +4 -4
- package/src/agents/tester/cli-tester/playbook.md +3 -3
- package/src/agents/tester/web-tester/identity.md +3 -3
- package/src/schemas/metadata.schema.json +31 -2
- package/src/schemas/project-config.schema.json +61 -15
- package/src/schemas/project-source-config.schema.json +0 -47
- package/dist/chunk-5GUOIJSG.js.map +0 -1
- package/dist/chunk-5UWKOOIS.js.map +0 -1
- package/dist/chunk-76ADG7LQ.js.map +0 -1
- package/dist/chunk-BNSRA6HL.js.map +0 -1
- package/dist/chunk-E5X6RJ4E.js.map +0 -1
- package/dist/chunk-EEPELKOM.js +0 -5938
- package/dist/chunk-EEPELKOM.js.map +0 -1
- package/dist/chunk-F7T5AFFN.js +0 -20
- package/dist/chunk-F7T5AFFN.js.map +0 -1
- package/dist/chunk-FVDKAVOL.js.map +0 -1
- package/dist/chunk-KFB5CRXZ.js +0 -377
- package/dist/chunk-KFB5CRXZ.js.map +0 -1
- package/dist/chunk-KR65TPKC.js +0 -664
- package/dist/chunk-KR65TPKC.js.map +0 -1
- package/dist/chunk-LASI35KT.js.map +0 -1
- package/dist/chunk-LDP5ASDM.js.map +0 -1
- package/dist/chunk-LZ52XEPR.js.map +0 -1
- package/dist/chunk-M7HO7NBK.js +0 -88
- package/dist/chunk-M7HO7NBK.js.map +0 -1
- package/dist/chunk-MWG4VU64.js.map +0 -1
- package/dist/chunk-ODNDXQH2.js +0 -77
- package/dist/chunk-ODNDXQH2.js.map +0 -1
- package/dist/chunk-P44SXVH3.js +0 -80
- package/dist/chunk-P44SXVH3.js.map +0 -1
- package/dist/chunk-PMM2MYMA.js.map +0 -1
- package/dist/chunk-PZIZNMHK.js.map +0 -1
- package/dist/chunk-Q45ZU6HD.js +0 -37
- package/dist/chunk-Q45ZU6HD.js.map +0 -1
- package/dist/chunk-QRDTLVXG.js.map +0 -1
- package/dist/chunk-QZZJFYUQ.js.map +0 -1
- package/dist/chunk-R5NOI2LP.js +0 -170
- package/dist/chunk-R5NOI2LP.js.map +0 -1
- package/dist/chunk-RNJWAKMO.js.map +0 -1
- package/dist/chunk-SBHBBZKF.js.map +0 -1
- package/dist/chunk-SKQWRUPX.js.map +0 -1
- package/dist/chunk-STMHDOZD.js.map +0 -1
- package/dist/chunk-SX5H6TSC.js.map +0 -1
- package/dist/chunk-TUPYW2IQ.js.map +0 -1
- package/dist/chunk-UBEDZ4FD.js +0 -4198
- package/dist/chunk-UBEDZ4FD.js.map +0 -1
- package/dist/chunk-VY6MNOXL.js +0 -20
- package/dist/chunk-VY6MNOXL.js.map +0 -1
- package/dist/chunk-WBCPLH66.js +0 -42
- package/dist/chunk-WBCPLH66.js.map +0 -1
- package/dist/chunk-WKTHWQKM.js.map +0 -1
- package/dist/chunk-XHUODHZ4.js.map +0 -1
- package/dist/chunk-ZPPHXXAP.js +0 -252
- package/dist/chunk-ZPPHXXAP.js.map +0 -1
- package/dist/commands/import/skill.js +0 -344
- package/dist/commands/import/skill.js.map +0 -1
- package/dist/commands/new/agent.js +0 -300
- package/dist/commands/new/agent.js.map +0 -1
- package/dist/commands/new/marketplace.js +0 -310
- package/dist/commands/new/marketplace.js.map +0 -1
- package/dist/commands/new/skill.js +0 -26
- package/dist/commands/validate.js +0 -575
- package/dist/commands/validate.js.map +0 -1
- package/dist/components/wizard/search-modal.js +0 -13
- package/dist/components/wizard/selection-card.js +0 -9
- package/dist/components/wizard/step-settings.js +0 -18
- package/dist/copy-local-skills-6EMVN7RB.js +0 -14
- package/dist/load-agent-defs-BWOUVEAR.js +0 -15
- package/dist/load-agent-defs-BWOUVEAR.js.map +0 -1
- package/dist/loader-5JP4S7CJ.js.map +0 -1
- package/dist/recompile-project-agents-6DL45TDI.js +0 -19
- package/dist/recompile-project-agents-6DL45TDI.js.map +0 -1
- package/dist/source-loader-MZYCPL2S.js.map +0 -1
- package/dist/src/agents/developer/web-architecture/critical-reminders.md +0 -48
- package/dist/src/agents/developer/web-architecture/critical-requirements.md +0 -65
- package/dist/src/agents/developer/web-architecture/identity.md +0 -64
- package/dist/src/agents/developer/web-architecture/metadata.yaml +0 -12
- package/dist/src/agents/developer/web-architecture/output.md +0 -449
- package/dist/src/agents/developer/web-architecture/playbook.md +0 -481
- package/dist/src/agents/pattern/pattern-scout/critical-reminders.md +0 -71
- package/dist/src/agents/pattern/pattern-scout/critical-requirements.md +0 -31
- package/dist/src/agents/pattern/pattern-scout/identity.md +0 -25
- package/dist/src/agents/pattern/pattern-scout/metadata.yaml +0 -10
- package/dist/src/agents/pattern/pattern-scout/output.md +0 -290
- package/dist/src/agents/pattern/pattern-scout/playbook.md +0 -1806
- package/dist/src/agents/pattern/web-pattern-critique/critical-reminders.md +0 -30
- package/dist/src/agents/pattern/web-pattern-critique/critical-requirements.md +0 -28
- package/dist/src/agents/pattern/web-pattern-critique/identity.md +0 -41
- package/dist/src/agents/pattern/web-pattern-critique/metadata.yaml +0 -12
- package/dist/src/agents/pattern/web-pattern-critique/output.md +0 -314
- package/dist/src/agents/pattern/web-pattern-critique/playbook.md +0 -572
- package/dist/src/agents/planning/api-pm/critical-reminders.md +0 -48
- package/dist/src/agents/planning/api-pm/critical-requirements.md +0 -41
- package/dist/src/agents/planning/api-pm/identity.md +0 -39
- package/dist/src/agents/planning/api-pm/metadata.yaml +0 -12
- package/dist/src/agents/planning/api-pm/output.md +0 -475
- package/dist/src/agents/planning/api-pm/playbook.md +0 -129
- package/dist/src/agents/planning/web-pm/identity.md +0 -26
- package/dist/src/agents/planning/web-pm/metadata.yaml +0 -12
- package/dist/src/agents/planning/web-pm/playbook.md +0 -318
- package/dist/src/agents/reviewer/ai-reviewer/critical-reminders.md +0 -40
- package/dist/src/agents/reviewer/ai-reviewer/critical-requirements.md +0 -37
- package/dist/src/agents/reviewer/ai-reviewer/identity.md +0 -51
- package/dist/src/agents/reviewer/ai-reviewer/metadata.yaml +0 -10
- package/dist/src/agents/reviewer/ai-reviewer/output.md +0 -395
- package/dist/src/agents/reviewer/ai-reviewer/playbook.md +0 -90
- package/dist/src/agents/reviewer/api-reviewer/critical-reminders.md +0 -31
- package/dist/src/agents/reviewer/api-reviewer/critical-requirements.md +0 -27
- package/dist/src/agents/reviewer/api-reviewer/identity.md +0 -51
- package/dist/src/agents/reviewer/api-reviewer/metadata.yaml +0 -12
- package/dist/src/agents/reviewer/api-reviewer/output.md +0 -343
- package/dist/src/agents/reviewer/api-reviewer/playbook.md +0 -288
- package/dist/src/agents/reviewer/cli-reviewer/critical-reminders.md +0 -33
- package/dist/src/agents/reviewer/cli-reviewer/critical-requirements.md +0 -30
- package/dist/src/agents/reviewer/cli-reviewer/identity.md +0 -44
- package/dist/src/agents/reviewer/cli-reviewer/metadata.yaml +0 -12
- package/dist/src/agents/reviewer/cli-reviewer/output.md +0 -414
- package/dist/src/agents/reviewer/cli-reviewer/playbook.md +0 -218
- package/dist/src/agents/reviewer/infra-reviewer/critical-reminders.md +0 -38
- package/dist/src/agents/reviewer/infra-reviewer/critical-requirements.md +0 -38
- package/dist/src/agents/reviewer/infra-reviewer/identity.md +0 -53
- package/dist/src/agents/reviewer/infra-reviewer/metadata.yaml +0 -10
- package/dist/src/agents/reviewer/infra-reviewer/output.md +0 -364
- package/dist/src/agents/reviewer/infra-reviewer/playbook.md +0 -161
- package/dist/src/agents/reviewer/web-reviewer/critical-reminders.md +0 -31
- package/dist/src/agents/reviewer/web-reviewer/critical-requirements.md +0 -26
- package/dist/src/agents/reviewer/web-reviewer/identity.md +0 -40
- package/dist/src/agents/reviewer/web-reviewer/metadata.yaml +0 -12
- package/dist/src/agents/reviewer/web-reviewer/output.md +0 -333
- package/dist/src/agents/reviewer/web-reviewer/playbook.md +0 -156
- package/src/agents/developer/web-architecture/critical-reminders.md +0 -48
- package/src/agents/developer/web-architecture/critical-requirements.md +0 -65
- package/src/agents/developer/web-architecture/identity.md +0 -64
- package/src/agents/developer/web-architecture/metadata.yaml +0 -12
- package/src/agents/developer/web-architecture/output.md +0 -449
- package/src/agents/developer/web-architecture/playbook.md +0 -481
- package/src/agents/pattern/pattern-scout/critical-reminders.md +0 -71
- package/src/agents/pattern/pattern-scout/critical-requirements.md +0 -31
- package/src/agents/pattern/pattern-scout/identity.md +0 -25
- package/src/agents/pattern/pattern-scout/metadata.yaml +0 -10
- package/src/agents/pattern/pattern-scout/output.md +0 -290
- package/src/agents/pattern/pattern-scout/playbook.md +0 -1806
- package/src/agents/pattern/web-pattern-critique/critical-reminders.md +0 -30
- package/src/agents/pattern/web-pattern-critique/critical-requirements.md +0 -28
- package/src/agents/pattern/web-pattern-critique/identity.md +0 -41
- package/src/agents/pattern/web-pattern-critique/metadata.yaml +0 -12
- package/src/agents/pattern/web-pattern-critique/output.md +0 -314
- package/src/agents/pattern/web-pattern-critique/playbook.md +0 -572
- package/src/agents/planning/api-pm/critical-reminders.md +0 -48
- package/src/agents/planning/api-pm/critical-requirements.md +0 -41
- package/src/agents/planning/api-pm/identity.md +0 -39
- package/src/agents/planning/api-pm/metadata.yaml +0 -12
- package/src/agents/planning/api-pm/output.md +0 -475
- package/src/agents/planning/api-pm/playbook.md +0 -129
- package/src/agents/planning/web-pm/identity.md +0 -26
- package/src/agents/planning/web-pm/metadata.yaml +0 -12
- package/src/agents/planning/web-pm/playbook.md +0 -318
- package/src/agents/reviewer/ai-reviewer/critical-reminders.md +0 -40
- package/src/agents/reviewer/ai-reviewer/critical-requirements.md +0 -37
- package/src/agents/reviewer/ai-reviewer/identity.md +0 -51
- package/src/agents/reviewer/ai-reviewer/metadata.yaml +0 -10
- package/src/agents/reviewer/ai-reviewer/output.md +0 -395
- package/src/agents/reviewer/ai-reviewer/playbook.md +0 -90
- package/src/agents/reviewer/api-reviewer/critical-reminders.md +0 -31
- package/src/agents/reviewer/api-reviewer/critical-requirements.md +0 -27
- package/src/agents/reviewer/api-reviewer/identity.md +0 -51
- package/src/agents/reviewer/api-reviewer/metadata.yaml +0 -12
- package/src/agents/reviewer/api-reviewer/output.md +0 -343
- package/src/agents/reviewer/api-reviewer/playbook.md +0 -288
- package/src/agents/reviewer/cli-reviewer/critical-reminders.md +0 -33
- package/src/agents/reviewer/cli-reviewer/critical-requirements.md +0 -30
- package/src/agents/reviewer/cli-reviewer/identity.md +0 -44
- package/src/agents/reviewer/cli-reviewer/metadata.yaml +0 -12
- package/src/agents/reviewer/cli-reviewer/output.md +0 -414
- package/src/agents/reviewer/cli-reviewer/playbook.md +0 -218
- package/src/agents/reviewer/infra-reviewer/critical-reminders.md +0 -38
- package/src/agents/reviewer/infra-reviewer/critical-requirements.md +0 -38
- package/src/agents/reviewer/infra-reviewer/identity.md +0 -53
- package/src/agents/reviewer/infra-reviewer/metadata.yaml +0 -10
- package/src/agents/reviewer/infra-reviewer/output.md +0 -364
- package/src/agents/reviewer/infra-reviewer/playbook.md +0 -161
- package/src/agents/reviewer/web-reviewer/critical-reminders.md +0 -31
- package/src/agents/reviewer/web-reviewer/critical-requirements.md +0 -26
- package/src/agents/reviewer/web-reviewer/identity.md +0 -40
- package/src/agents/reviewer/web-reviewer/metadata.yaml +0 -12
- package/src/agents/reviewer/web-reviewer/output.md +0 -333
- package/src/agents/reviewer/web-reviewer/playbook.md +0 -156
- /package/dist/{chunk-ZL7PFNHN.js.map → chunk-K3O3YQYG.js.map} +0 -0
- /package/dist/{chunk-IHUY4M22.js.map → chunk-NXGMM5YN.js.map} +0 -0
- /package/dist/{chunk-DTSG5XZB.js.map → chunk-V3ENMW7G.js.map} +0 -0
- /package/dist/{commands/new/skill.js.map → copy-local-skills-KF2RAVD3.js.map} +0 -0
- /package/dist/{components/wizard/search-modal.js.map → load-agent-defs-DGXGBU3Q.js.map} +0 -0
- /package/dist/{components/wizard/selection-card.js.map → loader-4U7UCE2Y.js.map} +0 -0
- /package/dist/{components/wizard/step-settings.js.map → recompile-project-agents-CJVBAWDJ.js.map} +0 -0
- /package/dist/{copy-local-skills-6EMVN7RB.js.map → source-loader-ZNSYJJCI.js.map} +0 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
## Output Format
|
|
2
|
+
|
|
3
|
+
<output_format>
|
|
4
|
+
Provide your AI test output in this structure:
|
|
5
|
+
|
|
6
|
+
<test_summary>
|
|
7
|
+
**Feature:** [What's being tested - e.g., "Support agent loop with order lookup tool"]
|
|
8
|
+
**Test File:** [/path/to/feature.test.ts]
|
|
9
|
+
**Test Count:** [X] deterministic tests across [Y] categories, [Z] evals
|
|
10
|
+
**Seam:** [Exact module or boundary stubbed - e.g., "provider SDK client via `createScriptedModel`"]
|
|
11
|
+
**Status:** [All deterministic tests failing - ready for implementation | All passing - verified]
|
|
12
|
+
</test_summary>
|
|
13
|
+
|
|
14
|
+
<determinism_report>
|
|
15
|
+
|
|
16
|
+
## Determinism Classification
|
|
17
|
+
|
|
18
|
+
| Behavior | Classification | Suite | Gate |
|
|
19
|
+
| ------------------------------ | --------------- | ------------------ | ------------- |
|
|
20
|
+
| [Prompt assembly] | Deterministic | `src/ai/*.test.ts` | Blocking (CI) |
|
|
21
|
+
| [Schema validation of output] | Deterministic | `src/ai/*.test.ts` | Blocking (CI) |
|
|
22
|
+
| [Retry and fallback paths] | Deterministic | `src/ai/*.test.ts` | Blocking (CI) |
|
|
23
|
+
| [Answer quality / tool choice] | Model-dependent | `evals/*.eval.ts` | Reported only |
|
|
24
|
+
|
|
25
|
+
**Live model calls in the blocking suite:** 0
|
|
26
|
+
**Network access in the blocking suite:** none (transport stubbed)
|
|
27
|
+
|
|
28
|
+
</determinism_report>
|
|
29
|
+
|
|
30
|
+
<test_suite>
|
|
31
|
+
|
|
32
|
+
## Test Coverage Summary
|
|
33
|
+
|
|
34
|
+
| Category | Count | Description |
|
|
35
|
+
| ----------------------- | ------- | ------------------------------------------------------ |
|
|
36
|
+
| Prompt Assembly | [X] | Message order, templates, truncation, escaping |
|
|
37
|
+
| Context Construction | [X] | Chunking, retrieval order, dedupe, budget trimming |
|
|
38
|
+
| Request Assertions | [X] | Model id, params, tool definitions, redaction |
|
|
39
|
+
| Structured Output | [X] | Valid, malformed, truncated, missing fields, refusals |
|
|
40
|
+
| Tool Calls & Agent Loop | [X] | Dispatch, bad arguments, unknown tools, iteration caps |
|
|
41
|
+
| Resilience | [X] | 429, 5xx, timeout, backoff schedule, fallback chain |
|
|
42
|
+
| Streaming | [X] | Chunk assembly, partial JSON, disconnect, abort |
|
|
43
|
+
| Token & Cost Budgets | [X] | Counting, trimming, ceilings, cache hits |
|
|
44
|
+
| Prompt Regression | [X] | Rendered-prompt snapshots under review |
|
|
45
|
+
| Safety (deterministic) | [X] | Trust boundaries, escaping, redaction, sanitization |
|
|
46
|
+
| **Total (blocking)** | **[X]** | |
|
|
47
|
+
| Evals (non-blocking) | [Z] | Golden dataset, graders, thresholds |
|
|
48
|
+
|
|
49
|
+
</test_suite>
|
|
50
|
+
|
|
51
|
+
<mocking_setup>
|
|
52
|
+
|
|
53
|
+
## Seam and Fixtures
|
|
54
|
+
|
|
55
|
+
**Seam:** [Module stubbed and why that level was chosen]
|
|
56
|
+
|
|
57
|
+
| Dependency | Stub | Why stubbed |
|
|
58
|
+
| ----------------- | ---------------------------- | ----------------------------------- |
|
|
59
|
+
| [Provider client] | `createScriptedModel([...])` | Deterministic turns, captured calls |
|
|
60
|
+
| [Embedder] | `createStubEmbedder({...})` | Fixed vectors, no network |
|
|
61
|
+
| [Vector store] | [In-memory fixture store] | Deterministic retrieval order |
|
|
62
|
+
| [Clock / timers] | `vi.useFakeTimers()` | Backoff and timeout without waiting |
|
|
63
|
+
|
|
64
|
+
**Fixtures used:**
|
|
65
|
+
|
|
66
|
+
| Fixture | Represents |
|
|
67
|
+
| --------------------------------------- | ------------------------------------------ |
|
|
68
|
+
| `fixtures/ai/extraction-valid.json` | Well-formed structured output |
|
|
69
|
+
| `fixtures/ai/extraction-truncated.json` | Stream cut before the JSON closed |
|
|
70
|
+
| `fixtures/ai/refusal.json` | Model refusal, distinct from a parse error |
|
|
71
|
+
| `fixtures/ai/rate-limit-429.json` | Provider rate limit with `retry-after` |
|
|
72
|
+
|
|
73
|
+
**Recording provenance:** [Where fixtures came from, what was redacted, when re-recorded]
|
|
74
|
+
|
|
75
|
+
</mocking_setup>
|
|
76
|
+
|
|
77
|
+
<test_code>
|
|
78
|
+
|
|
79
|
+
## Test File
|
|
80
|
+
|
|
81
|
+
**File:** `/path/to/feature.test.ts`
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
85
|
+
// ... project helpers, fixtures, scripted model factory
|
|
86
|
+
|
|
87
|
+
describe("[AI Feature]", () => {
|
|
88
|
+
beforeEach(() => {
|
|
89
|
+
// Reset stubs, fixtures, and any shared cache
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
describe("Prompt Assembly", () => {
|
|
93
|
+
it("[places system prompt first and user content last]", () => {});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
describe("Structured Output", () => {
|
|
97
|
+
it("[returns typed data for a valid payload]", () => {});
|
|
98
|
+
it("[returns a typed error for truncated JSON]", () => {});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe("Tool Calls & Agent Loop", () => {
|
|
102
|
+
it("[dispatches the tool and feeds the result back]", async () => {});
|
|
103
|
+
it("[stops at the iteration cap]", async () => {});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
describe("Resilience", () => {
|
|
107
|
+
it("[retries a 429 after the advertised delay]", async () => {});
|
|
108
|
+
it("[falls back once the primary model is exhausted]", async () => {});
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
describe("Streaming", () => {
|
|
112
|
+
it("[returns partial text when the stream drops]", async () => {});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
describe("Budgets", () => {
|
|
116
|
+
it("[rejects a request that cannot fit after trimming]", () => {});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
</test_code>
|
|
122
|
+
|
|
123
|
+
<coverage_analysis>
|
|
124
|
+
|
|
125
|
+
## Behaviors Covered
|
|
126
|
+
|
|
127
|
+
### Prompt & Context
|
|
128
|
+
|
|
129
|
+
- [Message ordering and role assignment]
|
|
130
|
+
- [History truncation at the configured limit]
|
|
131
|
+
- [Retrieved passages ordered by score and deduplicated]
|
|
132
|
+
- [Context trimmed to the token budget, system prompt preserved]
|
|
133
|
+
|
|
134
|
+
### Output Handling
|
|
135
|
+
|
|
136
|
+
- [Valid payload parses to the declared type]
|
|
137
|
+
- [Malformed, truncated, and prose-wrapped JSON produce typed errors]
|
|
138
|
+
- [Refusals are distinguishable from parse failures]
|
|
139
|
+
|
|
140
|
+
### Loop & Tools
|
|
141
|
+
|
|
142
|
+
- [Tool arguments validated before dispatch]
|
|
143
|
+
- [Unknown tool reported back rather than crashing]
|
|
144
|
+
- [Iteration cap terminates the loop with a stop reason]
|
|
145
|
+
|
|
146
|
+
### Resilience
|
|
147
|
+
|
|
148
|
+
- [429 retried after `retry-after`; 400 not retried]
|
|
149
|
+
- [Backoff schedule asserted with fake timers]
|
|
150
|
+
- [Fallback model used after the primary is exhausted]
|
|
151
|
+
- [Timeout aborts the in-flight request]
|
|
152
|
+
|
|
153
|
+
### Budgets
|
|
154
|
+
|
|
155
|
+
- [Token counting covers the full request]
|
|
156
|
+
- [Cost ceiling halts the loop]
|
|
157
|
+
- [Cache prevents a duplicate model call]
|
|
158
|
+
|
|
159
|
+
## What's NOT Covered (Intentionally)
|
|
160
|
+
|
|
161
|
+
- [Answer quality] - measured in `evals/*.eval.ts`, not asserted here
|
|
162
|
+
- [Provider SDK internals] - covered by the SDK's own tests
|
|
163
|
+
- [Exact generated wording] - unstable across model revisions
|
|
164
|
+
|
|
165
|
+
</coverage_analysis>
|
|
166
|
+
|
|
167
|
+
<eval_report>
|
|
168
|
+
|
|
169
|
+
## Evals (Non-Blocking)
|
|
170
|
+
|
|
171
|
+
| Eval | Dataset | Grader | Threshold | Samples |
|
|
172
|
+
| --------------------- | ----------------------------- | ---------------- | --------- | ------- |
|
|
173
|
+
| [Schema validity] | `datasets/support.jsonl` (v3) | Schema parse | ≥ 0.98 | 1 |
|
|
174
|
+
| [Tool selection] | `datasets/support.jsonl` (v3) | Exact match | ≥ 0.90 | 3 |
|
|
175
|
+
| [Answer groundedness] | `datasets/support.jsonl` (v3) | Pinned LLM judge | ≥ 0.85 | 3 |
|
|
176
|
+
|
|
177
|
+
**Cost cap:** [$X per run] | **Excluded from CI by:** [tag / path / config flag]
|
|
178
|
+
**Provenance recorded:** model id, model version, dataset revision, run date
|
|
179
|
+
|
|
180
|
+
</eval_report>
|
|
181
|
+
|
|
182
|
+
<test_status>
|
|
183
|
+
|
|
184
|
+
## Current Status
|
|
185
|
+
|
|
186
|
+
**Deterministic tests:** [FAILING - expected, no implementation yet | PASSING]
|
|
187
|
+
|
|
188
|
+
**Verification:**
|
|
189
|
+
|
|
190
|
+
- [ ] Tests fail for the RIGHT reasons (not import or setup errors)
|
|
191
|
+
- [ ] Suite run twice with identical results
|
|
192
|
+
- [ ] Zero live model calls, zero network access, zero API keys required
|
|
193
|
+
- [ ] No unclosed streams, timers, or handles
|
|
194
|
+
- [ ] Evals excluded from the default test command
|
|
195
|
+
|
|
196
|
+
**Ready for:** [ai-developer implementation | review]
|
|
197
|
+
|
|
198
|
+
</test_status>
|
|
199
|
+
|
|
200
|
+
<verification_commands>
|
|
201
|
+
|
|
202
|
+
## Verification
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Run the deterministic suite (use the project's test command)
|
|
206
|
+
npm test -- [path/to/feature.test.ts]
|
|
207
|
+
|
|
208
|
+
# Run twice to confirm stability
|
|
209
|
+
npm test -- [path/to/feature.test.ts] && npm test -- [path/to/feature.test.ts]
|
|
210
|
+
|
|
211
|
+
# Run the evals explicitly (never part of CI)
|
|
212
|
+
npm run eval -- [path/to/feature.eval.ts]
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
**Expected results:**
|
|
216
|
+
|
|
217
|
+
- Deterministic suite: all pass, identical on every run, no network
|
|
218
|
+
- Evals: report rates against thresholds and actual cost
|
|
219
|
+
|
|
220
|
+
</verification_commands>
|
|
221
|
+
|
|
222
|
+
<test_patterns_used>
|
|
223
|
+
|
|
224
|
+
## Patterns Applied
|
|
225
|
+
|
|
226
|
+
| Pattern | Usage |
|
|
227
|
+
| --------------------------- | ------------------------------------------------------------ |
|
|
228
|
+
| Scripted provider stub | Ordered responses per call; script exhaustion asserted |
|
|
229
|
+
| Captured request assertions | Model id, params, and tool definitions verified on each call |
|
|
230
|
+
| Fixture-driven parsing | Recorded and hand-written payloads for every malformed shape |
|
|
231
|
+
| Fake timers | Backoff schedule and timeout without real delays |
|
|
232
|
+
| File snapshots | Rendered prompts reviewed as diffs |
|
|
233
|
+
| Invariant assertions | Ordering, counts, schema shape - never generated prose |
|
|
234
|
+
| Eval separation | Model-in-the-loop suite tagged out of the CI gate |
|
|
235
|
+
|
|
236
|
+
</test_patterns_used>
|
|
237
|
+
|
|
238
|
+
</output_format>
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Section Guidelines
|
|
243
|
+
|
|
244
|
+
### AI Test Quality Requirements
|
|
245
|
+
|
|
246
|
+
| Requirement | Description |
|
|
247
|
+
| --------------------------------- | ---------------------------------------------------------------- |
|
|
248
|
+
| **Named seam** | Every suite states where the model was stubbed and why |
|
|
249
|
+
| **No live calls in CI** | Blocking tests need no key, no network, no billed tokens |
|
|
250
|
+
| **Error paths first-class** | Malformed output, 429, timeout, and stream drop each have a test |
|
|
251
|
+
| **Structural assertions** | Shape, arguments, ordering, and state - never model prose |
|
|
252
|
+
| **Deterministic by construction** | Fake timers, injected clock, seeded RNG, isolated fixtures |
|
|
253
|
+
| **Evals separated and capped** | Tagged out of CI, with thresholds, sample counts, and a cost cap |
|
|
254
|
+
| **Red before green** | Every test observed failing for the right reason at least once |
|
|
255
|
+
|
|
256
|
+
### Minimum Coverage Per Model Call Site
|
|
257
|
+
|
|
258
|
+
| Case | What it proves |
|
|
259
|
+
| ---------------- | ------------------------------------------------------------ |
|
|
260
|
+
| Success | Request parameters are correct and the response is parsed |
|
|
261
|
+
| Schema violation | Bad output produces a typed error, not a crash or silent nil |
|
|
262
|
+
| Provider error | Retry, fallback, or a clear typed failure |
|
|
263
|
+
| Budget boundary | Trimming or rejection happens before the call is billed |
|
|
264
|
+
|
|
265
|
+
### Assertion Style
|
|
266
|
+
|
|
267
|
+
```typescript
|
|
268
|
+
// Good - stable across model revisions
|
|
269
|
+
expect(result.ok).toBe(true);
|
|
270
|
+
expect(result.value).toStrictEqual({ name: "Ada", role: "engineer" });
|
|
271
|
+
expect(model.calls[0]).toMatchObject({ model: SUPPORT_MODEL_ID, temperature: 0 });
|
|
272
|
+
expect(result.stopReason).toBe("max_steps");
|
|
273
|
+
|
|
274
|
+
// Bad - asserts the model's wording, not your code
|
|
275
|
+
expect(result.text).toBe("Your order will arrive tomorrow.");
|
|
276
|
+
expect(result.text).toContain("I'd be happy to help");
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Red-Green Contract
|
|
280
|
+
|
|
281
|
+
1. **RED:** deterministic tests fail for the right reason, with the seam and fixtures in place
|
|
282
|
+
2. **GREEN:** ai-developer implements until they pass, without editing the tests
|
|
283
|
+
3. **VERIFY:** suite is stable across repeated runs; evals report separately
|
|
284
|
+
|
|
285
|
+
## Example Test Output
|
|
286
|
+
|
|
287
|
+
Here's what a complete, high-quality AI test handoff looks like:
|
|
288
|
+
|
|
289
|
+
```markdown
|
|
290
|
+
# Test Suite: Support Agent Loop
|
|
291
|
+
|
|
292
|
+
## Test File
|
|
293
|
+
|
|
294
|
+
`src/ai/support/__tests__/support-agent.test.ts`
|
|
295
|
+
|
|
296
|
+
## Seam
|
|
297
|
+
|
|
298
|
+
Provider SDK client, stubbed with `createScriptedModel([...])` from `tests/helpers/scripted-model.ts`.
|
|
299
|
+
Prompt builder, parser, tool dispatcher, retry wrapper, and budget logic all run for real.
|
|
300
|
+
|
|
301
|
+
## Coverage Summary
|
|
302
|
+
|
|
303
|
+
- Prompt Assembly: 4 tests
|
|
304
|
+
- Context Construction: 5 tests
|
|
305
|
+
- Request Assertions: 3 tests
|
|
306
|
+
- Structured Output: 8 tests
|
|
307
|
+
- Tool Calls & Agent Loop: 6 tests
|
|
308
|
+
- Resilience: 6 tests
|
|
309
|
+
- Streaming: 5 tests
|
|
310
|
+
- Token & Cost Budgets: 4 tests
|
|
311
|
+
- Safety (deterministic): 3 tests
|
|
312
|
+
- **Total blocking: 44 tests**
|
|
313
|
+
- Evals: 3 (excluded from CI)
|
|
314
|
+
|
|
315
|
+
## Determinism Classification
|
|
316
|
+
|
|
317
|
+
Blocking: everything above. Zero live model calls; the HTTP transport throws if reached.
|
|
318
|
+
Reported only: answer groundedness, tool-selection accuracy, schema-validity rate.
|
|
319
|
+
|
|
320
|
+
## Test Categories
|
|
321
|
+
|
|
322
|
+
### Structured Output
|
|
323
|
+
|
|
324
|
+
- valid payload parses to Extraction
|
|
325
|
+
- malformed JSON returns invalid_model_output
|
|
326
|
+
- truncated JSON returns invalid_model_output
|
|
327
|
+
- prose-wrapped JSON returns invalid_model_output
|
|
328
|
+
- missing required field rejected
|
|
329
|
+
- wrong field type rejected
|
|
330
|
+
- unknown field rejected
|
|
331
|
+
- refusal returns kind "refusal", not a parse error
|
|
332
|
+
|
|
333
|
+
### Resilience
|
|
334
|
+
|
|
335
|
+
- 429 retried after retry-after (2s, fake timers)
|
|
336
|
+
- backoff schedule is [500ms, 1000ms] across two 5xx failures
|
|
337
|
+
- retry ceiling produces model_unavailable
|
|
338
|
+
- 400 is not retried
|
|
339
|
+
- fallback model answers after the primary is exhausted
|
|
340
|
+
- timeout aborts the in-flight request and propagates the abort signal
|
|
341
|
+
|
|
342
|
+
### Streaming
|
|
343
|
+
|
|
344
|
+
- chunks assemble in order
|
|
345
|
+
- partial JSON is not parsed until complete
|
|
346
|
+
- mid-stream disconnect returns stop_reason "stream_error" plus partial text
|
|
347
|
+
- abort stops chunk delivery immediately
|
|
348
|
+
- usage recorded from the terminal event
|
|
349
|
+
|
|
350
|
+
## Evals
|
|
351
|
+
|
|
352
|
+
`evals/support-agent.eval.ts` against `evals/datasets/support.jsonl` (v3, 120 cases).
|
|
353
|
+
Thresholds: schema validity ≥ 0.98 (1 sample), tool selection ≥ 0.90 (3 samples),
|
|
354
|
+
groundedness ≥ 0.85 (3 samples, pinned judge model and snapshotted judge prompt).
|
|
355
|
+
Cost cap $4.00 per run. Excluded from CI by the `*.eval.ts` path exclusion in the test config.
|
|
356
|
+
|
|
357
|
+
## Test Status
|
|
358
|
+
|
|
359
|
+
All 44 blocking tests: FAILING (ready for implementation)
|
|
360
|
+
Verified failing for the right reasons; no import or setup errors.
|
|
361
|
+
|
|
362
|
+
## Investigation Findings
|
|
363
|
+
|
|
364
|
+
- Test runner: vitest; fake timers available and already used elsewhere
|
|
365
|
+
- Existing helper `createScriptedModel` reused from tests/helpers (not rebuilt)
|
|
366
|
+
- Fixtures recorded from the provider and redacted; stored in tests/fixtures/ai/
|
|
367
|
+
- Tokenizer: the project's `countTokens` wrapper; budget logic asserted around it
|
|
368
|
+
|
|
369
|
+
## For ai-developer
|
|
370
|
+
|
|
371
|
+
- Parser must return a typed Result, never throw, and must distinguish refusals
|
|
372
|
+
- Retry wrapper must read `retry-after` and skip retries for 4xx other than 429
|
|
373
|
+
- Loop must terminate with an explicit stop reason: "done", "max_steps", or "cost_ceiling"
|
|
374
|
+
- Reuse the existing budget helper; do not add a second token counter
|
|
375
|
+
```
|