claude-code-workflow 7.2.5 → 7.2.6
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/.claude/commands/workflow/analyze-with-file.md +11 -10
- package/.claude/skills/ccw-help/command.json +3 -3
- package/.claude/skills/ccw-help/index/all-commands.json +3 -3
- package/.claude/skills/ccw-help/index/by-category.json +3 -3
- package/.claude/skills/ccw-help/index/by-use-case.json +3 -3
- package/.claude/skills/skill-iter-tune/SKILL.md +382 -0
- package/.claude/skills/skill-iter-tune/phases/01-setup.md +144 -0
- package/.claude/skills/skill-iter-tune/phases/02-execute.md +292 -0
- package/.claude/skills/skill-iter-tune/phases/03-evaluate.md +312 -0
- package/.claude/skills/skill-iter-tune/phases/04-improve.md +186 -0
- package/.claude/skills/skill-iter-tune/phases/05-report.md +166 -0
- package/.claude/skills/skill-iter-tune/specs/evaluation-criteria.md +63 -0
- package/.claude/skills/skill-iter-tune/templates/eval-prompt.md +134 -0
- package/.claude/skills/skill-iter-tune/templates/execute-prompt.md +97 -0
- package/.claude/skills/team-roadmap-dev/SKILL.md +1 -1
- package/.claude/skills/team-roadmap-dev/roles/coordinator/role.md +1 -1
- package/.claude/skills/team-roadmap-dev/specs/team-config.json +1 -1
- package/ccw/dist/commands/install.d.ts.map +1 -1
- package/ccw/dist/commands/install.js +11 -9
- package/ccw/dist/commands/install.js.map +1 -1
- package/ccw/dist/tools/cli-executor-core.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor-core.js +0 -25
- package/ccw/dist/tools/cli-executor-core.js.map +1 -1
- package/ccw/dist/tools/cli-executor-state.d.ts.map +1 -1
- package/ccw/dist/tools/cli-executor-state.js +0 -31
- package/ccw/dist/tools/cli-executor-state.js.map +1 -1
- package/ccw/dist/tools/cli-history-store.d.ts.map +1 -1
- package/ccw/dist/tools/cli-history-store.js +1 -30
- package/ccw/dist/tools/cli-history-store.js.map +1 -1
- package/ccw/frontend/dist/assets/{AlertDialog-CFGtc76Y.js → AlertDialog-BMFUcfv_.js} +2 -2
- package/ccw/frontend/dist/assets/{AlertDialog-CFGtc76Y.js.map → AlertDialog-BMFUcfv_.js.map} +1 -1
- package/ccw/frontend/dist/assets/{AnalysisPage-Duxia_dG.js → AnalysisPage-Bxa333tD.js} +2 -2
- package/ccw/frontend/dist/assets/{AnalysisPage-Duxia_dG.js.map → AnalysisPage-Bxa333tD.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CU9hesAE.js → ApiSettingsPage-BFVU-wcR.js} +2 -2
- package/ccw/frontend/dist/assets/{ApiSettingsPage-CU9hesAE.js.map → ApiSettingsPage-BFVU-wcR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliModeToggle-DcdOFSvM.js → CliModeToggle-MDoFAJPL.js} +2 -2
- package/ccw/frontend/dist/assets/{CliModeToggle-DcdOFSvM.js.map → CliModeToggle-MDoFAJPL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliSessionSharePage-oKN-GRIT.js → CliSessionSharePage-DkRmLiNN.js} +2 -2
- package/ccw/frontend/dist/assets/{CliSessionSharePage-oKN-GRIT.js.map → CliSessionSharePage-DkRmLiNN.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CliViewerPage-_wUoHaY-.js → CliViewerPage-DN8jWddy.js} +2 -2
- package/ccw/frontend/dist/assets/{CliViewerPage-_wUoHaY-.js.map → CliViewerPage-DN8jWddy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CodexLensManagerPage-ClPNashJ.js → CodexLensManagerPage-Du_VAJtC.js} +2 -2
- package/ccw/frontend/dist/assets/{CodexLensManagerPage-ClPNashJ.js.map → CodexLensManagerPage-Du_VAJtC.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Collapsible-Dladh9Eu.js → Collapsible-CF5bSyzt.js} +2 -2
- package/ccw/frontend/dist/assets/{Collapsible-Dladh9Eu.js.map → Collapsible-CF5bSyzt.js.map} +1 -1
- package/ccw/frontend/dist/assets/{CommandsManagerPage-B6DBb_Ew.js → CommandsManagerPage-Bm_P9I76.js} +2 -2
- package/ccw/frontend/dist/assets/{CommandsManagerPage-B6DBb_Ew.js.map → CommandsManagerPage-Bm_P9I76.js.map} +1 -1
- package/ccw/frontend/dist/assets/{DeepWikiPage-CDA3xm3R.js → DeepWikiPage-2YIlfWhz.js} +2 -2
- package/ccw/frontend/dist/assets/{DeepWikiPage-CDA3xm3R.js.map → DeepWikiPage-2YIlfWhz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{EndpointsPage-Bu7iU0Wy.js → EndpointsPage-CMVNz5PY.js} +2 -2
- package/ccw/frontend/dist/assets/{EndpointsPage-Bu7iU0Wy.js.map → EndpointsPage-CMVNz5PY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ExplorerPage-xim2cboZ.js → ExplorerPage-C-KFz8YU.js} +2 -2
- package/ccw/frontend/dist/assets/{ExplorerPage-xim2cboZ.js.map → ExplorerPage-C-KFz8YU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FixSessionPage-BTFYoFQF.js → FixSessionPage-CdKND69l.js} +2 -2
- package/ccw/frontend/dist/assets/{FixSessionPage-BTFYoFQF.js.map → FixSessionPage-CdKND69l.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-B30ANzTJ.js → FloatingFileBrowser-Bf4iqOSd.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingFileBrowser-B30ANzTJ.js.map → FloatingFileBrowser-Bf4iqOSd.js.map} +1 -1
- package/ccw/frontend/dist/assets/{FloatingPanel-Ds84B7Ob.js → FloatingPanel-CJbvABPb.js} +2 -2
- package/ccw/frontend/dist/assets/{FloatingPanel-Ds84B7Ob.js.map → FloatingPanel-CJbvABPb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{GraphExplorerPage-DJ4YnFOQ.js → GraphExplorerPage-DPoozRTR.js} +2 -2
- package/ccw/frontend/dist/assets/{GraphExplorerPage-DJ4YnFOQ.js.map → GraphExplorerPage-DPoozRTR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HistoryPage-rzLVsw11.js → HistoryPage-DOMa9gJX.js} +2 -2
- package/ccw/frontend/dist/assets/{HistoryPage-rzLVsw11.js.map → HistoryPage-DOMa9gJX.js.map} +1 -1
- package/ccw/frontend/dist/assets/{HookManagerPage-DizO_dCP.js → HookManagerPage-Cfn2UEyy.js} +2 -2
- package/ccw/frontend/dist/assets/{HookManagerPage-DizO_dCP.js.map → HookManagerPage-Cfn2UEyy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{InstallationsPage-BFamuE4y.js → InstallationsPage-qngOxLvm.js} +2 -2
- package/ccw/frontend/dist/assets/{InstallationsPage-BFamuE4y.js.map → InstallationsPage-qngOxLvm.js.map} +1 -1
- package/ccw/frontend/dist/assets/{IssueHubPage-DHwQWuUc.js → IssueHubPage-Cvf7tH8p.js} +2 -2
- package/ccw/frontend/dist/assets/{IssueHubPage-DHwQWuUc.js.map → IssueHubPage-Cvf7tH8p.js.map} +1 -1
- package/ccw/frontend/dist/assets/{LiteTasksPage-DMDkG7pi.js → LiteTasksPage-D20smVCY.js} +2 -2
- package/ccw/frontend/dist/assets/{LiteTasksPage-DMDkG7pi.js.map → LiteTasksPage-D20smVCY.js.map} +1 -1
- package/ccw/frontend/dist/assets/{McpManagerPage-CS2v_1OG.js → McpManagerPage-Bld27yu4.js} +2 -2
- package/ccw/frontend/dist/assets/{McpManagerPage-CS2v_1OG.js.map → McpManagerPage-Bld27yu4.js.map} +1 -1
- package/ccw/frontend/dist/assets/{MemoryPage-DhYPE-VC.js → MemoryPage-DmknNdBh.js} +2 -2
- package/ccw/frontend/dist/assets/{MemoryPage-DhYPE-VC.js.map → MemoryPage-DmknNdBh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{NotFoundPage-BLmC7-ot.js → NotFoundPage-DdwPN1xU.js} +2 -2
- package/ccw/frontend/dist/assets/{NotFoundPage-BLmC7-ot.js.map → NotFoundPage-DdwPN1xU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{OrchestratorPage-1jzSUFZW.js → OrchestratorPage-CgDdmvBg.js} +2 -2
- package/ccw/frontend/dist/assets/{OrchestratorPage-1jzSUFZW.js.map → OrchestratorPage-CgDdmvBg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-gWuAj-Cn.js → ProjectOverviewPage-9Ze9quxh.js} +2 -2
- package/ccw/frontend/dist/assets/{ProjectOverviewPage-gWuAj-Cn.js.map → ProjectOverviewPage-9Ze9quxh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{PromptHistoryPage-q7ySVNHM.js → PromptHistoryPage-YRkBppOx.js} +2 -2
- package/ccw/frontend/dist/assets/{PromptHistoryPage-q7ySVNHM.js.map → PromptHistoryPage-YRkBppOx.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ReviewSessionPage-DX1uT_nH.js → ReviewSessionPage-DSaeHw83.js} +2 -2
- package/ccw/frontend/dist/assets/{ReviewSessionPage-DX1uT_nH.js.map → ReviewSessionPage-DSaeHw83.js.map} +1 -1
- package/ccw/frontend/dist/assets/{RulesManagerPage-Bg6T5W-W.js → RulesManagerPage-BpGwS_jB.js} +2 -2
- package/ccw/frontend/dist/assets/{RulesManagerPage-Bg6T5W-W.js.map → RulesManagerPage-BpGwS_jB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionDetailPage-C_ig6JSh.js → SessionDetailPage-B_YHME7k.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionDetailPage-C_ig6JSh.js.map → SessionDetailPage-B_YHME7k.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SessionsPage-BENFqFDn.js → SessionsPage-bW6kEEib.js} +2 -2
- package/ccw/frontend/dist/assets/{SessionsPage-BENFqFDn.js.map → SessionsPage-bW6kEEib.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SettingsPage-2c-oTxfz.js → SettingsPage-CSwUd2Bw.js} +4 -4
- package/ccw/frontend/dist/assets/{SettingsPage-2c-oTxfz.js.map → SettingsPage-CSwUd2Bw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SkillsManagerPage-GLo6DXnt.js → SkillsManagerPage-CyqKvFUi.js} +2 -2
- package/ccw/frontend/dist/assets/{SkillsManagerPage-GLo6DXnt.js.map → SkillsManagerPage-CyqKvFUi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-CRqMV90p.js → SpecsSettingsPage-DHqQNW_y.js} +2 -2
- package/ccw/frontend/dist/assets/{SpecsSettingsPage-CRqMV90p.js.map → SpecsSettingsPage-DHqQNW_y.js.map} +1 -1
- package/ccw/frontend/dist/assets/{Switch-vlMavMRD.js → Switch-s_-xzEWF.js} +2 -2
- package/ccw/frontend/dist/assets/{Switch-vlMavMRD.js.map → Switch-s_-xzEWF.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TabsNavigation-CLKz7pWP.js → TabsNavigation-CU50UxOb.js} +2 -2
- package/ccw/frontend/dist/assets/{TabsNavigation-CLKz7pWP.js.map → TabsNavigation-CU50UxOb.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TaskDrawer-BAFvNqF8.js → TaskDrawer-128XISsA.js} +2 -2
- package/ccw/frontend/dist/assets/{TaskDrawer-BAFvNqF8.js.map → TaskDrawer-128XISsA.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TeamPage-C2IsDkAv.js → TeamPage-Bg_KII8B.js} +2 -2
- package/ccw/frontend/dist/assets/{TeamPage-C2IsDkAv.js.map → TeamPage-Bg_KII8B.js.map} +1 -1
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-mgS-iKDm.js → TerminalDashboardPage-CQ9K2zwB.js} +2 -2
- package/ccw/frontend/dist/assets/{TerminalDashboardPage-mgS-iKDm.js.map → TerminalDashboardPage-CQ9K2zwB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-CxxK_YIp.js → archive--nR2vYUk.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-CxxK_YIp.js.map → archive--nR2vYUk.js.map} +1 -1
- package/ccw/frontend/dist/assets/{archive-restore-DZsrBaeG.js → archive-restore-CZ7graO0.js} +2 -2
- package/ccw/frontend/dist/assets/{archive-restore-DZsrBaeG.js.map → archive-restore-CZ7graO0.js.map} +1 -1
- package/ccw/frontend/dist/assets/{arrow-right-BotRHOhr.js → arrow-right-ChKhpVhq.js} +2 -2
- package/ccw/frontend/dist/assets/{arrow-right-BotRHOhr.js.map → arrow-right-ChKhpVhq.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bookmark-plus-C0MWZ3S9.js → bookmark-plus-X-JcgObI.js} +2 -2
- package/ccw/frontend/dist/assets/{bookmark-plus-C0MWZ3S9.js.map → bookmark-plus-X-JcgObI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{bot-BcHFJXqD.js → bot-C3uo7Fkg.js} +2 -2
- package/ccw/frontend/dist/assets/{bot-BcHFJXqD.js.map → bot-C3uo7Fkg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{braces-D_p0IZhP.js → braces-5wZupwrA.js} +2 -2
- package/ccw/frontend/dist/assets/{braces-D_p0IZhP.js.map → braces-5wZupwrA.js.map} +1 -1
- package/ccw/frontend/dist/assets/{circle-stop-Bt634NUt.js → circle-stop-DZ5hLKjQ.js} +2 -2
- package/ccw/frontend/dist/assets/{circle-stop-Bt634NUt.js.map → circle-stop-DZ5hLKjQ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{cpu-DjeGKtvT.js → cpu-Dc8IS79i.js} +2 -2
- package/ccw/frontend/dist/assets/{cpu-DjeGKtvT.js.map → cpu-Dc8IS79i.js.map} +1 -1
- package/ccw/frontend/dist/assets/{ellipsis-vertical-BmNPuatq.js → ellipsis-vertical-B4pqbrsR.js} +2 -2
- package/ccw/frontend/dist/assets/{ellipsis-vertical-BmNPuatq.js.map → ellipsis-vertical-B4pqbrsR.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-B0-xkP67.js → eye-BwniwXnu.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-B0-xkP67.js.map → eye-BwniwXnu.js.map} +1 -1
- package/ccw/frontend/dist/assets/{eye-off-Bz0Fkli3.js → eye-off-BWntEdln.js} +2 -2
- package/ccw/frontend/dist/assets/{eye-off-Bz0Fkli3.js.map → eye-off-BWntEdln.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-json-PUAS4vBm.js → file-json-BDcmkaVn.js} +2 -2
- package/ccw/frontend/dist/assets/{file-json-PUAS4vBm.js.map → file-json-BDcmkaVn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{file-text-BMeW5-Sb.js → file-text-DsqI3R_g.js} +2 -2
- package/ccw/frontend/dist/assets/{file-text-BMeW5-Sb.js.map → file-text-DsqI3R_g.js.map} +1 -1
- package/ccw/frontend/dist/assets/{filter-B4wgMvwi.js → filter-CQMcD8RT.js} +2 -2
- package/ccw/frontend/dist/assets/{filter-B4wgMvwi.js.map → filter-CQMcD8RT.js.map} +1 -1
- package/ccw/frontend/dist/assets/{folder-BSHjjjND.js → folder-jX77-MUi.js} +2 -2
- package/ccw/frontend/dist/assets/{folder-BSHjjjND.js.map → folder-jX77-MUi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{gauge-7VRNEl22.js → gauge-yQjRXM3o.js} +2 -2
- package/ccw/frontend/dist/assets/{gauge-7VRNEl22.js.map → gauge-yQjRXM3o.js.map} +1 -1
- package/ccw/frontend/dist/assets/{globe-PvVHBjbW.js → globe-BecpCHYI.js} +2 -2
- package/ccw/frontend/dist/assets/{globe-PvVHBjbW.js.map → globe-BecpCHYI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{grid-3x3-CsmmDlhN.js → grid-3x3-BrvzDFqU.js} +2 -2
- package/ccw/frontend/dist/assets/{grid-3x3-CsmmDlhN.js.map → grid-3x3-BrvzDFqU.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hard-drive-D88EZgTY.js → hard-drive-B0cynodE.js} +2 -2
- package/ccw/frontend/dist/assets/{hard-drive-D88EZgTY.js.map → hard-drive-B0cynodE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{hash-CZpNRWqt.js → hash-xOrTLxBg.js} +2 -2
- package/ccw/frontend/dist/assets/{hash-CZpNRWqt.js.map → hash-xOrTLxBg.js.map} +1 -1
- package/ccw/frontend/dist/assets/{history-DxN1mopa.js → history-BzXwj8RL.js} +2 -2
- package/ccw/frontend/dist/assets/{history-DxN1mopa.js.map → history-BzXwj8RL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-C04xeBGC.js → index-B9aFbBPN.js} +2 -2
- package/ccw/frontend/dist/assets/{index-C04xeBGC.js.map → index-B9aFbBPN.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-BzGEkwIf.js → index-BNZGm_Ur.js} +2 -2
- package/ccw/frontend/dist/assets/{index-BzGEkwIf.js.map → index-BNZGm_Ur.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-bSgtHHOF.js → index-D3uMibtZ.js} +4 -4
- package/ccw/frontend/dist/assets/{index-bSgtHHOF.js.map → index-D3uMibtZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-BUiq2PUK.js → index-DflI9CwB.js} +2 -2
- package/ccw/frontend/dist/assets/{index-BUiq2PUK.js.map → index-DflI9CwB.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-CIoWWkDn.js → index-Dy0tUf1F.js} +2 -2
- package/ccw/frontend/dist/assets/{index-CIoWWkDn.js.map → index-Dy0tUf1F.js.map} +1 -1
- package/ccw/frontend/dist/assets/{index-DlcRFzFq.js → index-osmL8__2.js} +2 -2
- package/ccw/frontend/dist/assets/{index-DlcRFzFq.js.map → index-osmL8__2.js.map} +1 -1
- package/ccw/frontend/dist/assets/{layout-grid-BZqfuNG0.js → layout-grid-CWFZqQWu.js} +2 -2
- package/ccw/frontend/dist/assets/{layout-grid-BZqfuNG0.js.map → layout-grid-CWFZqQWu.js.map} +1 -1
- package/ccw/frontend/dist/assets/{lightbulb-DqJ4OHRL.js → lightbulb-BRLgsWe3.js} +2 -2
- package/ccw/frontend/dist/assets/{lightbulb-DqJ4OHRL.js.map → lightbulb-BRLgsWe3.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-2-Bq7fLkC9.js → link-2-BpKdq14u.js} +2 -2
- package/ccw/frontend/dist/assets/{link-2-Bq7fLkC9.js.map → link-2-BpKdq14u.js.map} +1 -1
- package/ccw/frontend/dist/assets/{link-dSLYjCIG.js → link-BxUCReDi.js} +2 -2
- package/ccw/frontend/dist/assets/{link-dSLYjCIG.js.map → link-BxUCReDi.js.map} +1 -1
- package/ccw/frontend/dist/assets/{list-Bm_CnR56.js → list-Ce9EsAg8.js} +2 -2
- package/ccw/frontend/dist/assets/{list-Bm_CnR56.js.map → list-Ce9EsAg8.js.map} +1 -1
- package/ccw/frontend/dist/assets/{map-pin-B5TELa0z.js → map-pin-CxzQV1hS.js} +2 -2
- package/ccw/frontend/dist/assets/{map-pin-B5TELa0z.js.map → map-pin-CxzQV1hS.js.map} +1 -1
- package/ccw/frontend/dist/assets/{messages-square-B9sWItdK.js → messages-square-Dyodk79r.js} +2 -2
- package/ccw/frontend/dist/assets/{messages-square-B9sWItdK.js.map → messages-square-Dyodk79r.js.map} +1 -1
- package/ccw/frontend/dist/assets/{minimize-2-Z1MYs_Tp.js → minimize-2-s0009UK9.js} +2 -2
- package/ccw/frontend/dist/assets/{minimize-2-Z1MYs_Tp.js.map → minimize-2-s0009UK9.js.map} +1 -1
- package/ccw/frontend/dist/assets/{package-EEv4N_Qk.js → package-C69biuJL.js} +2 -2
- package/ccw/frontend/dist/assets/{package-EEv4N_Qk.js.map → package-C69biuJL.js.map} +1 -1
- package/ccw/frontend/dist/assets/{plug-CEkvvYXh.js → plug-DERl-wQd.js} +2 -2
- package/ccw/frontend/dist/assets/{plug-CEkvvYXh.js.map → plug-DERl-wQd.js.map} +1 -1
- package/ccw/frontend/dist/assets/{power-B6Rod0u_.js → power-CdvaDgTh.js} +2 -2
- package/ccw/frontend/dist/assets/{power-B6Rod0u_.js.map → power-CdvaDgTh.js.map} +1 -1
- package/ccw/frontend/dist/assets/{save-DULWrB2g.js → save-C_Uot2e4.js} +2 -2
- package/ccw/frontend/dist/assets/{save-DULWrB2g.js.map → save-C_Uot2e4.js.map} +1 -1
- package/ccw/frontend/dist/assets/{send-C4z974WG.js → send-R1XtAXeP.js} +2 -2
- package/ccw/frontend/dist/assets/{send-C4z974WG.js.map → send-R1XtAXeP.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-check-big-CqEEw-V0.js → square-check-big-Cyqi4INj.js} +2 -2
- package/ccw/frontend/dist/assets/{square-check-big-CqEEw-V0.js.map → square-check-big-Cyqi4INj.js.map} +1 -1
- package/ccw/frontend/dist/assets/{square-pen-D-4BrMtQ.js → square-pen-BmLNjUUw.js} +2 -2
- package/ccw/frontend/dist/assets/{square-pen-D-4BrMtQ.js.map → square-pen-BmLNjUUw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{star-CDVVM69o.js → star-CakKtIYu.js} +2 -2
- package/ccw/frontend/dist/assets/{star-CDVVM69o.js.map → star-CakKtIYu.js.map} +1 -1
- package/ccw/frontend/dist/assets/{style-CumJ7XC8.js → style-DdNmehyz.js} +2 -2
- package/ccw/frontend/dist/assets/{style-CumJ7XC8.js.map → style-DdNmehyz.js.map} +1 -1
- package/ccw/frontend/dist/assets/{target-Dr9SuV1Y.js → target-CUvfwM3S.js} +2 -2
- package/ccw/frontend/dist/assets/{target-Dr9SuV1Y.js.map → target-CUvfwM3S.js.map} +1 -1
- package/ccw/frontend/dist/assets/{test-tube-DzDRKk8F.js → test-tube-BVwrOGiZ.js} +2 -2
- package/ccw/frontend/dist/assets/{test-tube-DzDRKk8F.js.map → test-tube-BVwrOGiZ.js.map} +1 -1
- package/ccw/frontend/dist/assets/{upload-CihSmIM7.js → upload-CY1NwcDw.js} +2 -2
- package/ccw/frontend/dist/assets/{upload-CihSmIM7.js.map → upload-CY1NwcDw.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useApiSettings-CevxWX2z.js → useApiSettings-9JuzUfPE.js} +2 -2
- package/ccw/frontend/dist/assets/{useApiSettings-CevxWX2z.js.map → useApiSettings-9JuzUfPE.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCli-jVaF89uU.js → useCli-Bb7Zo-OI.js} +2 -2
- package/ccw/frontend/dist/assets/{useCli-jVaF89uU.js.map → useCli-Bb7Zo-OI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useCommands-D4uGmNpF.js → useCommands-BUu-hUYI.js} +2 -2
- package/ccw/frontend/dist/assets/{useCommands-D4uGmNpF.js.map → useCommands-BUu-hUYI.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useDebounce-BEYmuZYP.js → useDebounce-CptXgLBn.js} +2 -2
- package/ccw/frontend/dist/assets/{useDebounce-BEYmuZYP.js.map → useDebounce-CptXgLBn.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useFileExplorer-DEv0DVy7.js → useFileExplorer-B7dN8VT1.js} +2 -2
- package/ccw/frontend/dist/assets/{useFileExplorer-DEv0DVy7.js.map → useFileExplorer-B7dN8VT1.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useLocale-BRJreqvl.js → useLocale-D6USNXOr.js} +2 -2
- package/ccw/frontend/dist/assets/{useLocale-BRJreqvl.js.map → useLocale-D6USNXOr.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSkills-lnfeXe9l.js → useSkills-r8yfiQ-u.js} +3 -3
- package/ccw/frontend/dist/assets/{useSkills-lnfeXe9l.js.map → useSkills-r8yfiQ-u.js.map} +1 -1
- package/ccw/frontend/dist/assets/{useSystemSettings-PlxVdbXI.js → useSystemSettings-BVWDQLMy.js} +2 -2
- package/ccw/frontend/dist/assets/{useSystemSettings-PlxVdbXI.js.map → useSystemSettings-BVWDQLMy.js.map} +1 -1
- package/ccw/frontend/dist/assets/{wand-sparkles-BbqUxeEg.js → wand-sparkles-Zdaej5bR.js} +2 -2
- package/ccw/frontend/dist/assets/{wand-sparkles-BbqUxeEg.js.map → wand-sparkles-Zdaej5bR.js.map} +1 -1
- package/ccw/frontend/dist/index.html +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Phase 4: Apply Improvements
|
|
2
|
+
|
|
3
|
+
> **COMPACT SENTINEL [Phase 4: Improve]**
|
|
4
|
+
> This phase contains 4 execution steps (Step 4.1 -- 4.4).
|
|
5
|
+
> If you can read this sentinel but cannot find the full Step protocol below, context has been compressed.
|
|
6
|
+
> Recovery: `Read("phases/04-improve.md")`
|
|
7
|
+
|
|
8
|
+
Apply targeted improvements to skill files based on evaluation suggestions. Uses a general-purpose Agent to make changes, ensuring only suggested modifications are applied.
|
|
9
|
+
|
|
10
|
+
## Objective
|
|
11
|
+
|
|
12
|
+
- Read evaluation suggestions from current iteration
|
|
13
|
+
- Launch Agent to apply improvements in priority order
|
|
14
|
+
- Document all changes made
|
|
15
|
+
- Update iteration state
|
|
16
|
+
|
|
17
|
+
## Execution
|
|
18
|
+
|
|
19
|
+
### Step 4.1: Prepare Improvement Context
|
|
20
|
+
|
|
21
|
+
```javascript
|
|
22
|
+
const N = state.current_iteration;
|
|
23
|
+
const iterDir = `${state.work_dir}/iterations/iteration-${N}`;
|
|
24
|
+
const evaluation = state.iterations[N - 1].evaluation;
|
|
25
|
+
|
|
26
|
+
// Verify we have suggestions to apply
|
|
27
|
+
if (!evaluation.suggestions || evaluation.suggestions.length === 0) {
|
|
28
|
+
// No suggestions -- skip improvement, mark iteration complete
|
|
29
|
+
state.iterations[N - 1].improvement = {
|
|
30
|
+
changes_applied: [],
|
|
31
|
+
changes_file: null,
|
|
32
|
+
improvement_rationale: 'No suggestions provided by evaluation'
|
|
33
|
+
};
|
|
34
|
+
state.iterations[N - 1].status = 'completed';
|
|
35
|
+
Write(`${state.work_dir}/iteration-state.json`, JSON.stringify(state, null, 2));
|
|
36
|
+
// -> Return to orchestrator for next iteration
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Build file inventory for agent context
|
|
41
|
+
const skillFileInventory = state.target_skills.map(skill => {
|
|
42
|
+
return `Skill: ${skill.name} (${skill.path})\nFiles:\n` +
|
|
43
|
+
skill.files.map(f => ` - ${f}`).join('\n');
|
|
44
|
+
}).join('\n\n');
|
|
45
|
+
|
|
46
|
+
// Chain mode: add chain relationship context
|
|
47
|
+
const chainContext = state.execution_mode === 'chain'
|
|
48
|
+
? `\nChain Order: ${state.chain_order.join(' -> ')}\n` +
|
|
49
|
+
`Chain Scores: ${state.chain_order.map(s =>
|
|
50
|
+
`${s}: ${state.iterations[N-1].evaluation?.chain_scores?.[s] || 'N/A'}`
|
|
51
|
+
).join(', ')}\n` +
|
|
52
|
+
`Weakest Link: ${state.chain_order.reduce((min, s) => {
|
|
53
|
+
const score = state.iterations[N-1].evaluation?.chain_scores?.[s] || 100;
|
|
54
|
+
return score < (state.iterations[N-1].evaluation?.chain_scores?.[min] || 100) ? s : min;
|
|
55
|
+
}, state.chain_order[0])}`
|
|
56
|
+
: '';
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Step 4.2: Launch Improvement Agent
|
|
60
|
+
|
|
61
|
+
> **CHECKPOINT**: Before launching agent, verify:
|
|
62
|
+
> 1. evaluation.suggestions is non-empty
|
|
63
|
+
> 2. All target_file paths in suggestions are valid
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
const suggestionsText = evaluation.suggestions.map((s, i) =>
|
|
67
|
+
`${i + 1}. [${s.priority.toUpperCase()}] ${s.description}\n` +
|
|
68
|
+
` Target: ${s.target_file}\n` +
|
|
69
|
+
` Rationale: ${s.rationale}\n` +
|
|
70
|
+
(s.code_snippet ? ` Suggested change:\n ${s.code_snippet}\n` : '')
|
|
71
|
+
).join('\n');
|
|
72
|
+
|
|
73
|
+
Agent({
|
|
74
|
+
subagent_type: 'general-purpose',
|
|
75
|
+
run_in_background: false,
|
|
76
|
+
description: `Apply skill improvements iteration ${N}`,
|
|
77
|
+
prompt: `## Task: Apply Targeted Improvements to Skill Files
|
|
78
|
+
|
|
79
|
+
You are improving a workflow skill based on evaluation feedback. Apply ONLY the suggested changes -- do not refactor, add features, or "improve" beyond what is explicitly suggested.
|
|
80
|
+
|
|
81
|
+
## Current Score: ${evaluation.score}/100
|
|
82
|
+
Dimension breakdown:
|
|
83
|
+
${evaluation.dimensions.map(d => `- ${d.name}: ${d.score}/100`).join('\n')}
|
|
84
|
+
|
|
85
|
+
## Skill File Inventory
|
|
86
|
+
${skillFileInventory}
|
|
87
|
+
|
|
88
|
+
${chainContext ? `## Chain Context\n${chainContext}\n\nPrioritize improvements on the weakest skill in the chain. Also consider interface compatibility between adjacent skills in the chain.\n` : ''}
|
|
89
|
+
|
|
90
|
+
## Improvement Suggestions (apply in priority order)
|
|
91
|
+
${suggestionsText}
|
|
92
|
+
|
|
93
|
+
## Rules
|
|
94
|
+
1. Read each target file BEFORE modifying it
|
|
95
|
+
2. Apply ONLY the suggested changes -- no unsolicited modifications
|
|
96
|
+
3. If a suggestion's target_file doesn't exist, skip it and note in summary
|
|
97
|
+
4. If a suggestion conflicts with existing patterns, adapt it to fit (note adaptation)
|
|
98
|
+
5. Preserve existing code style, naming conventions, and structure
|
|
99
|
+
6. After all changes, write a change summary to: ${iterDir}/iteration-${N}-changes.md
|
|
100
|
+
|
|
101
|
+
## Changes Summary Format (write to ${iterDir}/iteration-${N}-changes.md)
|
|
102
|
+
|
|
103
|
+
# Iteration ${N} Changes
|
|
104
|
+
|
|
105
|
+
## Applied Suggestions
|
|
106
|
+
- [high] description: what was changed in which file
|
|
107
|
+
- [medium] description: what was changed in which file
|
|
108
|
+
|
|
109
|
+
## Files Modified
|
|
110
|
+
- path/to/file.md: brief description of changes
|
|
111
|
+
|
|
112
|
+
## Skipped Suggestions (if any)
|
|
113
|
+
- description: reason for skipping
|
|
114
|
+
|
|
115
|
+
## Notes
|
|
116
|
+
- Any adaptations or considerations
|
|
117
|
+
|
|
118
|
+
## Success Criteria
|
|
119
|
+
- All high-priority suggestions applied
|
|
120
|
+
- Medium-priority suggestions applied if feasible
|
|
121
|
+
- Low-priority suggestions applied if trivial
|
|
122
|
+
- Changes summary written to ${iterDir}/iteration-${N}-changes.md
|
|
123
|
+
`
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Step 4.3: Verify Changes
|
|
128
|
+
|
|
129
|
+
After agent completes:
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
// Verify changes summary was written
|
|
133
|
+
const changesFile = `${iterDir}/iteration-${N}-changes.md`;
|
|
134
|
+
const changesExist = Glob(changesFile).length > 0;
|
|
135
|
+
|
|
136
|
+
if (!changesExist) {
|
|
137
|
+
// Agent didn't write summary -- create a minimal one
|
|
138
|
+
Write(changesFile, `# Iteration ${N} Changes\n\n## Notes\nAgent completed but did not produce changes summary.\n`);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Read changes summary to extract applied changes
|
|
142
|
+
const changesContent = Read(changesFile);
|
|
143
|
+
|
|
144
|
+
// Parse applied changes (heuristic: count lines starting with "- [")
|
|
145
|
+
const appliedMatches = changesContent.match(/^- \[.+?\]/gm) || [];
|
|
146
|
+
const changes_applied = appliedMatches.map(m => ({
|
|
147
|
+
summary: m.replace(/^- /, ''),
|
|
148
|
+
file: '' // Extracted from context
|
|
149
|
+
}));
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Step 4.4: Update State
|
|
153
|
+
|
|
154
|
+
```javascript
|
|
155
|
+
state.iterations[N - 1].improvement = {
|
|
156
|
+
changes_applied: changes_applied,
|
|
157
|
+
changes_file: changesFile,
|
|
158
|
+
improvement_rationale: `Applied ${changes_applied.length} improvements based on evaluation score ${evaluation.score}`
|
|
159
|
+
};
|
|
160
|
+
state.iterations[N - 1].status = 'completed';
|
|
161
|
+
state.updated_at = new Date().toISOString();
|
|
162
|
+
|
|
163
|
+
// Also update the skill files list in case new files were created
|
|
164
|
+
for (const skill of state.target_skills) {
|
|
165
|
+
skill.files = Glob(`${skill.path}/**/*.md`).map(f => f.replace(skill.path + '/', ''));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
Write(`${state.work_dir}/iteration-state.json`, JSON.stringify(state, null, 2));
|
|
169
|
+
|
|
170
|
+
// -> Return to orchestrator for next iteration (Phase 2) or termination check
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Error Handling
|
|
174
|
+
|
|
175
|
+
| Error | Recovery |
|
|
176
|
+
|-------|----------|
|
|
177
|
+
| Agent fails to complete | Rollback from skill-snapshot: `cp -r "${iterDir}/skill-snapshot/${skill.name}/*" "${skill.path}/"` |
|
|
178
|
+
| Agent corrupts files | Same rollback from snapshot |
|
|
179
|
+
| Changes summary missing | Create minimal summary, continue |
|
|
180
|
+
| target_file not found | Agent skips suggestion, notes in summary |
|
|
181
|
+
|
|
182
|
+
## Output
|
|
183
|
+
|
|
184
|
+
- **Files**: `iteration-{N}-changes.md`, modified skill files
|
|
185
|
+
- **State**: `iterations[N-1].improvement` and `.status` updated
|
|
186
|
+
- **Next**: Return to orchestrator, begin next iteration (Phase 2) or terminate
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Phase 5: Final Report
|
|
2
|
+
|
|
3
|
+
> **COMPACT SENTINEL [Phase 5: Report]**
|
|
4
|
+
> This phase contains 4 execution steps (Step 5.1 -- 5.4).
|
|
5
|
+
> If you can read this sentinel but cannot find the full Step protocol below, context has been compressed.
|
|
6
|
+
> Recovery: `Read("phases/05-report.md")`
|
|
7
|
+
|
|
8
|
+
Generate comprehensive iteration history report and display results to user.
|
|
9
|
+
|
|
10
|
+
## Objective
|
|
11
|
+
|
|
12
|
+
- Read complete iteration state
|
|
13
|
+
- Generate formatted final report with score progression
|
|
14
|
+
- Write final-report.md
|
|
15
|
+
- Display summary to user
|
|
16
|
+
|
|
17
|
+
## Execution
|
|
18
|
+
|
|
19
|
+
### Step 5.1: Read Complete State
|
|
20
|
+
|
|
21
|
+
```javascript
|
|
22
|
+
const state = JSON.parse(Read(`${state.work_dir}/iteration-state.json`));
|
|
23
|
+
state.status = 'completed';
|
|
24
|
+
state.updated_at = new Date().toISOString();
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Step 5.2: Generate Report
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
// Determine outcome
|
|
31
|
+
const outcomeMap = {
|
|
32
|
+
quality_threshold_met: 'PASSED -- Quality threshold reached',
|
|
33
|
+
max_iterations_reached: 'MAX ITERATIONS -- Threshold not reached',
|
|
34
|
+
convergence_detected: 'CONVERGED -- Score stopped improving',
|
|
35
|
+
error_limit_reached: 'FAILED -- Too many errors'
|
|
36
|
+
};
|
|
37
|
+
const outcome = outcomeMap[state.termination_reason] || 'COMPLETED';
|
|
38
|
+
|
|
39
|
+
// Build score progression table
|
|
40
|
+
const scoreTable = state.iterations
|
|
41
|
+
.filter(i => i.evaluation)
|
|
42
|
+
.map(i => {
|
|
43
|
+
const dims = i.evaluation.dimensions || [];
|
|
44
|
+
const dimScores = ['clarity', 'completeness', 'correctness', 'effectiveness', 'efficiency']
|
|
45
|
+
.map(id => {
|
|
46
|
+
const dim = dims.find(d => d.id === id);
|
|
47
|
+
return dim ? dim.score : '-';
|
|
48
|
+
});
|
|
49
|
+
return `| ${i.round} | ${i.evaluation.score} | ${dimScores.join(' | ')} |`;
|
|
50
|
+
}).join('\n');
|
|
51
|
+
|
|
52
|
+
// Build iteration details
|
|
53
|
+
const iterationDetails = state.iterations.map(iter => {
|
|
54
|
+
const evalSection = iter.evaluation
|
|
55
|
+
? `**Score**: ${iter.evaluation.score}/100\n` +
|
|
56
|
+
`**Strengths**: ${iter.evaluation.strengths?.join(', ') || 'N/A'}\n` +
|
|
57
|
+
`**Weaknesses**: ${iter.evaluation.weaknesses?.slice(0, 3).join(', ') || 'N/A'}`
|
|
58
|
+
: '**Evaluation**: Skipped or failed';
|
|
59
|
+
|
|
60
|
+
const changesSection = iter.improvement
|
|
61
|
+
? `**Changes Applied**: ${iter.improvement.changes_applied?.length || 0}\n` +
|
|
62
|
+
(iter.improvement.changes_applied?.map(c => ` - ${c.summary}`).join('\n') || ' None')
|
|
63
|
+
: '**Improvements**: None';
|
|
64
|
+
|
|
65
|
+
return `### Iteration ${iter.round}\n${evalSection}\n${changesSection}`;
|
|
66
|
+
}).join('\n\n');
|
|
67
|
+
|
|
68
|
+
const report = `# Skill Iter Tune -- Final Report
|
|
69
|
+
|
|
70
|
+
## Summary
|
|
71
|
+
|
|
72
|
+
| Field | Value |
|
|
73
|
+
|-------|-------|
|
|
74
|
+
| **Target Skills** | ${state.target_skills.map(s => s.name).join(', ')} |
|
|
75
|
+
| **Execution Mode** | ${state.execution_mode} |
|
|
76
|
+
${state.execution_mode === 'chain' ? `| **Chain Order** | ${state.chain_order.join(' -> ')} |` : ''}
|
|
77
|
+
| **Test Scenario** | ${state.test_scenario.description} |
|
|
78
|
+
| **Iterations** | ${state.iterations.length} |
|
|
79
|
+
| **Initial Score** | ${state.score_trend[0] || 'N/A'} |
|
|
80
|
+
| **Final Score** | ${state.latest_score}/100 |
|
|
81
|
+
| **Quality Threshold** | ${state.quality_threshold} |
|
|
82
|
+
| **Outcome** | ${outcome} |
|
|
83
|
+
| **Started** | ${state.started_at} |
|
|
84
|
+
| **Completed** | ${state.updated_at} |
|
|
85
|
+
|
|
86
|
+
## Score Progression
|
|
87
|
+
|
|
88
|
+
| Iter | Composite | Clarity | Completeness | Correctness | Effectiveness | Efficiency |
|
|
89
|
+
|------|-----------|---------|--------------|-------------|---------------|------------|
|
|
90
|
+
${scoreTable}
|
|
91
|
+
|
|
92
|
+
**Trend**: ${state.score_trend.join(' -> ')}
|
|
93
|
+
|
|
94
|
+
${state.execution_mode === 'chain' ? `
|
|
95
|
+
## Chain Score Progression
|
|
96
|
+
|
|
97
|
+
| Iter | ${state.chain_order.join(' | ')} |
|
|
98
|
+
|------|${state.chain_order.map(() => '------').join('|')}|
|
|
99
|
+
${state.iterations.filter(i => i.evaluation?.chain_scores).map(i => {
|
|
100
|
+
const scores = state.chain_order.map(s => i.evaluation.chain_scores[s] || '-');
|
|
101
|
+
return `| ${i.round} | ${scores.join(' | ')} |`;
|
|
102
|
+
}).join('\n')}
|
|
103
|
+
` : ''}
|
|
104
|
+
|
|
105
|
+
## Iteration Details
|
|
106
|
+
|
|
107
|
+
${iterationDetails}
|
|
108
|
+
|
|
109
|
+
## Remaining Weaknesses
|
|
110
|
+
|
|
111
|
+
${state.iterations.length > 0 && state.iterations[state.iterations.length - 1].evaluation
|
|
112
|
+
? state.iterations[state.iterations.length - 1].evaluation.weaknesses?.map(w => `- ${w}`).join('\n') || 'None identified'
|
|
113
|
+
: 'No evaluation data available'}
|
|
114
|
+
|
|
115
|
+
## Artifact Locations
|
|
116
|
+
|
|
117
|
+
| Path | Description |
|
|
118
|
+
|------|-------------|
|
|
119
|
+
| \`${state.work_dir}/iteration-state.json\` | Complete state history |
|
|
120
|
+
| \`${state.work_dir}/iterations/iteration-{N}/iteration-{N}-eval.md\` | Per-iteration evaluations |
|
|
121
|
+
| \`${state.work_dir}/iterations/iteration-{N}/iteration-{N}-changes.md\` | Per-iteration change logs |
|
|
122
|
+
| \`${state.work_dir}/final-report.md\` | This report |
|
|
123
|
+
| \`${state.backup_dir}/\` | Original skill backups |
|
|
124
|
+
|
|
125
|
+
## Restore Original
|
|
126
|
+
|
|
127
|
+
To revert all changes and restore the original skill files:
|
|
128
|
+
|
|
129
|
+
\`\`\`bash
|
|
130
|
+
${state.target_skills.map(s => `cp -r "${state.backup_dir}/${s.name}"/* "${s.path}/"`).join('\n')}
|
|
131
|
+
\`\`\`
|
|
132
|
+
`;
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Step 5.3: Write Report and Update State
|
|
136
|
+
|
|
137
|
+
```javascript
|
|
138
|
+
Write(`${state.work_dir}/final-report.md`, report);
|
|
139
|
+
|
|
140
|
+
state.status = 'completed';
|
|
141
|
+
Write(`${state.work_dir}/iteration-state.json`, JSON.stringify(state, null, 2));
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Step 5.4: Display Summary to User
|
|
145
|
+
|
|
146
|
+
Output to user:
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
Skill Iter Tune Complete!
|
|
150
|
+
|
|
151
|
+
Target: {skill names}
|
|
152
|
+
Iterations: {count}
|
|
153
|
+
Score: {initial} -> {final} ({outcome})
|
|
154
|
+
Threshold: {threshold}
|
|
155
|
+
|
|
156
|
+
Score trend: {score1} -> {score2} -> ... -> {scoreN}
|
|
157
|
+
|
|
158
|
+
Full report: {workDir}/final-report.md
|
|
159
|
+
Backups: {backupDir}/
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Output
|
|
163
|
+
|
|
164
|
+
- **Files**: `final-report.md`
|
|
165
|
+
- **State**: `status = completed`
|
|
166
|
+
- **Next**: Workflow complete. Return control to user.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Evaluation Criteria
|
|
2
|
+
|
|
3
|
+
Skill 质量评估标准,由 Phase 03 (Evaluate) 引用。Gemini 按此标准对 skill 产出物进行多维度评分。
|
|
4
|
+
|
|
5
|
+
## Dimensions
|
|
6
|
+
|
|
7
|
+
| Dimension | Weight | ID | Description |
|
|
8
|
+
|-----------|--------|----|-------------|
|
|
9
|
+
| Clarity | 0.20 | clarity | 指令清晰无歧义,结构良好,易于遵循。Phase 文件有明确的 Step 划分、输入输出说明 |
|
|
10
|
+
| Completeness | 0.25 | completeness | 覆盖所有必要阶段、边界情况、错误处理。没有遗漏关键执行路径 |
|
|
11
|
+
| Correctness | 0.25 | correctness | 逻辑正确,数据流一致,Phase 间无矛盾。State schema 与实际使用匹配 |
|
|
12
|
+
| Effectiveness | 0.20 | effectiveness | 在给定测试场景下能产出高质量输出。产物满足用户需求和成功标准 |
|
|
13
|
+
| Efficiency | 0.10 | efficiency | 无冗余内容,上下文使用合理,不浪费 token。Phase 职责清晰无重叠 |
|
|
14
|
+
|
|
15
|
+
## Scoring Guide
|
|
16
|
+
|
|
17
|
+
| Range | Level | Description |
|
|
18
|
+
|-------|-------|-------------|
|
|
19
|
+
| 90-100 | Excellent | 生产级别,几乎无改进空间 |
|
|
20
|
+
| 80-89 | Good | 可投入使用,仅需微调 |
|
|
21
|
+
| 70-79 | Adequate | 功能可用,有明显可改进区域 |
|
|
22
|
+
| 60-69 | Needs Work | 存在影响产出质量的显著问题 |
|
|
23
|
+
| 0-59 | Poor | 结构或逻辑存在根本性问题 |
|
|
24
|
+
|
|
25
|
+
## Composite Score Calculation
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
composite = sum(dimension.score * dimension.weight)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Output JSON Schema
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"composite_score": 75,
|
|
36
|
+
"dimensions": [
|
|
37
|
+
{ "name": "Clarity", "id": "clarity", "score": 80, "weight": 0.20, "feedback": "..." },
|
|
38
|
+
{ "name": "Completeness", "id": "completeness", "score": 70, "weight": 0.25, "feedback": "..." },
|
|
39
|
+
{ "name": "Correctness", "id": "correctness", "score": 78, "weight": 0.25, "feedback": "..." },
|
|
40
|
+
{ "name": "Effectiveness", "id": "effectiveness", "score": 72, "weight": 0.20, "feedback": "..." },
|
|
41
|
+
{ "name": "Efficiency", "id": "efficiency", "score": 85, "weight": 0.10, "feedback": "..." }
|
|
42
|
+
],
|
|
43
|
+
"strengths": ["...", "...", "..."],
|
|
44
|
+
"weaknesses": ["...", "...", "..."],
|
|
45
|
+
"suggestions": [
|
|
46
|
+
{
|
|
47
|
+
"priority": "high",
|
|
48
|
+
"target_file": "phases/02-execute.md",
|
|
49
|
+
"description": "Add explicit error handling for CLI timeout",
|
|
50
|
+
"rationale": "Current phase has no recovery path when CLI execution exceeds timeout",
|
|
51
|
+
"code_snippet": "optional suggested replacement code"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Evaluation Focus by Iteration
|
|
58
|
+
|
|
59
|
+
| Iteration | Primary Focus |
|
|
60
|
+
|-----------|--------------|
|
|
61
|
+
| 1 | 全面评估,建立 baseline |
|
|
62
|
+
| 2-3 | 重点关注上一轮 weaknesses 是否改善,避免重复已解决的问题 |
|
|
63
|
+
| 4+ | 精细化改进,关注 Effectiveness 和 Efficiency |
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Evaluation Prompt Template
|
|
2
|
+
|
|
3
|
+
Phase 03 使用此模板构造 ccw cli 提示词,让 Gemini 按多维度评估 skill 质量。
|
|
4
|
+
|
|
5
|
+
## Template
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
PURPOSE: Evaluate the quality of a workflow skill by examining both its definition files and the artifacts it produced when executed against a test scenario. Provide a structured multi-dimensional score with actionable improvement suggestions.
|
|
9
|
+
|
|
10
|
+
SKILL DEFINITION:
|
|
11
|
+
${skillContent}
|
|
12
|
+
|
|
13
|
+
TEST SCENARIO:
|
|
14
|
+
${testScenario.description}
|
|
15
|
+
Requirements: ${testScenario.requirements}
|
|
16
|
+
Success Criteria: ${testScenario.success_criteria}
|
|
17
|
+
|
|
18
|
+
ARTIFACTS PRODUCED:
|
|
19
|
+
${artifactsSummary}
|
|
20
|
+
|
|
21
|
+
EVALUATION CRITERIA:
|
|
22
|
+
${evaluationCriteria}
|
|
23
|
+
|
|
24
|
+
${previousEvalContext}
|
|
25
|
+
|
|
26
|
+
TASK:
|
|
27
|
+
1. Read all skill definition files and produced artifacts carefully
|
|
28
|
+
2. Score each dimension on 0-100 based on the evaluation criteria:
|
|
29
|
+
- Clarity (weight 0.20): Instructions unambiguous, well-structured, easy to follow
|
|
30
|
+
- Completeness (weight 0.25): All phases, edge cases, error handling covered
|
|
31
|
+
- Correctness (weight 0.25): Logic sound, data flow consistent, no contradictions
|
|
32
|
+
- Effectiveness (weight 0.20): Produces high-quality output for the test scenario
|
|
33
|
+
- Efficiency (weight 0.10): Minimal redundancy, appropriate context usage
|
|
34
|
+
3. Calculate weighted composite score
|
|
35
|
+
4. List top 3 strengths
|
|
36
|
+
5. List top 3-5 weaknesses with specific file:section references
|
|
37
|
+
6. Provide 3-5 prioritized improvement suggestions with concrete changes
|
|
38
|
+
|
|
39
|
+
MODE: analysis
|
|
40
|
+
|
|
41
|
+
EXPECTED OUTPUT FORMAT (strict JSON, no markdown wrapping):
|
|
42
|
+
{
|
|
43
|
+
"composite_score": <number 0-100>,
|
|
44
|
+
"dimensions": [
|
|
45
|
+
{ "name": "Clarity", "id": "clarity", "score": <0-100>, "weight": 0.20, "feedback": "<specific feedback>" },
|
|
46
|
+
{ "name": "Completeness", "id": "completeness", "score": <0-100>, "weight": 0.25, "feedback": "<specific feedback>" },
|
|
47
|
+
{ "name": "Correctness", "id": "correctness", "score": <0-100>, "weight": 0.25, "feedback": "<specific feedback>" },
|
|
48
|
+
{ "name": "Effectiveness", "id": "effectiveness", "score": <0-100>, "weight": 0.20, "feedback": "<specific feedback>" },
|
|
49
|
+
{ "name": "Efficiency", "id": "efficiency", "score": <0-100>, "weight": 0.10, "feedback": "<specific feedback>" }
|
|
50
|
+
],
|
|
51
|
+
"strengths": ["<strength 1>", "<strength 2>", "<strength 3>"],
|
|
52
|
+
"weaknesses": ["<weakness 1 with file:section reference>", "..."],
|
|
53
|
+
"suggestions": [
|
|
54
|
+
{
|
|
55
|
+
"priority": "high|medium|low",
|
|
56
|
+
"target_file": "<relative path to skill file>",
|
|
57
|
+
"description": "<what to change>",
|
|
58
|
+
"rationale": "<why this improves quality>",
|
|
59
|
+
"code_snippet": "<optional: suggested replacement content>"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"chain_scores": {
|
|
63
|
+
"<skill_name>": "<number 0-100, per-skill score — only present in chain mode>"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
CONSTRAINTS:
|
|
68
|
+
- Be rigorous and specific — reference exact file paths and sections
|
|
69
|
+
- Each suggestion MUST include a target_file that maps to a skill file
|
|
70
|
+
- Focus suggestions on highest-impact changes first
|
|
71
|
+
- Do NOT suggest changes already addressed in previous iterations
|
|
72
|
+
- Output ONLY the JSON object, no surrounding text or markdown
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Variable Substitution
|
|
76
|
+
|
|
77
|
+
| Variable | Source | Description |
|
|
78
|
+
|----------|--------|-------------|
|
|
79
|
+
| `${skillContent}` | Same as execute-prompt.md | 完整 skill 文件内容 |
|
|
80
|
+
| `${testScenario.*}` | iteration-state.json | 测试场景信息 |
|
|
81
|
+
| `${artifactsSummary}` | Phase 03 reads artifacts/ dir | 产出物文件列表 + 内容摘要 |
|
|
82
|
+
| `${evaluationCriteria}` | specs/evaluation-criteria.md | 评分标准全文 |
|
|
83
|
+
| `${previousEvalContext}` | 历史迭代记录 | 前几轮评估摘要(避免重复建议) |
|
|
84
|
+
| `${chainContext}` | Phase 03 constructs | chain 模式下的链上下文信息 |
|
|
85
|
+
|
|
86
|
+
## previousEvalContext Construction
|
|
87
|
+
|
|
88
|
+
```javascript
|
|
89
|
+
// Build context from prior iterations to avoid repeating suggestions
|
|
90
|
+
const previousEvalContext = state.iterations.length > 0
|
|
91
|
+
? `PREVIOUS ITERATIONS (context for avoiding duplicate suggestions):
|
|
92
|
+
${state.iterations.map(iter => `
|
|
93
|
+
Iteration ${iter.round}: Score ${iter.evaluation?.score || 'N/A'}
|
|
94
|
+
Applied changes: ${iter.improvement?.changes_applied?.map(c => c.summary).join('; ') || 'none'}
|
|
95
|
+
Remaining weaknesses: ${iter.evaluation?.weaknesses?.slice(0, 3).join('; ') || 'none'}
|
|
96
|
+
`).join('')}
|
|
97
|
+
IMPORTANT: Focus on NEW issues or issues NOT adequately addressed in previous improvements.`
|
|
98
|
+
: '';
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## chainContext Construction
|
|
102
|
+
|
|
103
|
+
```javascript
|
|
104
|
+
// Build chain context for evaluation (chain mode only)
|
|
105
|
+
const chainContext = state.execution_mode === 'chain'
|
|
106
|
+
? `CHAIN CONTEXT:
|
|
107
|
+
This skill chain contains ${state.chain_order.length} skills executed in order:
|
|
108
|
+
${state.chain_order.map((s, i) => `${i+1}. ${s}`).join('\n')}
|
|
109
|
+
Current evaluation covers the entire chain output.
|
|
110
|
+
Please provide per-skill quality scores in an additional "chain_scores" field.`
|
|
111
|
+
: '';
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## artifactsSummary Construction
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
// Read manifest.json if available, otherwise list files
|
|
118
|
+
const manifestPath = `${iterDir}/artifacts/manifest.json`;
|
|
119
|
+
let artifactsSummary;
|
|
120
|
+
|
|
121
|
+
if (fileExists(manifestPath)) {
|
|
122
|
+
const manifest = JSON.parse(Read(manifestPath));
|
|
123
|
+
artifactsSummary = manifest.artifacts.map(a =>
|
|
124
|
+
`- ${a.path}: ${a.description} (Phase ${a.phase})`
|
|
125
|
+
).join('\n');
|
|
126
|
+
} else {
|
|
127
|
+
// Fallback: list all files with first 200 lines each
|
|
128
|
+
const files = Glob(`${iterDir}/artifacts/**/*`);
|
|
129
|
+
artifactsSummary = files.map(f => {
|
|
130
|
+
const content = Read(f, { limit: 200 });
|
|
131
|
+
return `--- ${f.replace(iterDir + '/artifacts/', '')} ---\n${content}`;
|
|
132
|
+
}).join('\n\n');
|
|
133
|
+
}
|
|
134
|
+
```
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Execute Prompt Template
|
|
2
|
+
|
|
3
|
+
Phase 02 使用此模板构造 ccw cli 提示词,让 Claude 模拟执行 skill 并产出所有预期产物。
|
|
4
|
+
|
|
5
|
+
## Template
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
PURPOSE: Simulate executing the following workflow skill against a test scenario. Produce all expected output artifacts as if the skill were invoked with the given input. This is for evaluating skill quality.
|
|
9
|
+
|
|
10
|
+
SKILL CONTENT:
|
|
11
|
+
${skillContent}
|
|
12
|
+
|
|
13
|
+
TEST SCENARIO:
|
|
14
|
+
Description: ${testScenario.description}
|
|
15
|
+
Input Arguments: ${testScenario.input_args}
|
|
16
|
+
Requirements: ${testScenario.requirements}
|
|
17
|
+
Success Criteria: ${testScenario.success_criteria}
|
|
18
|
+
|
|
19
|
+
TASK:
|
|
20
|
+
1. Study the complete skill structure (SKILL.md + all phase files)
|
|
21
|
+
2. Follow the skill's execution flow sequentially (Phase 1 → Phase N)
|
|
22
|
+
3. For each phase, produce the artifacts that phase would generate
|
|
23
|
+
4. Write all output artifacts to the current working directory
|
|
24
|
+
5. Create a manifest.json listing all produced artifacts with descriptions
|
|
25
|
+
|
|
26
|
+
MODE: write
|
|
27
|
+
|
|
28
|
+
CONTEXT: @**/*
|
|
29
|
+
|
|
30
|
+
EXPECTED:
|
|
31
|
+
- All artifacts the skill would produce for this test scenario
|
|
32
|
+
- Each artifact in its correct relative path
|
|
33
|
+
- A manifest.json at root: { "artifacts": [{ "path": "...", "description": "...", "phase": N }] }
|
|
34
|
+
|
|
35
|
+
CONSTRAINTS:
|
|
36
|
+
- Follow the skill execution flow exactly — do not skip or reorder phases
|
|
37
|
+
- Produce realistic, high-quality output (not placeholder content)
|
|
38
|
+
- If the skill requires user interaction (AskUserQuestion), use reasonable defaults
|
|
39
|
+
- If the skill invokes external tools/CLIs, document what would be called but produce expected output directly
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Variable Substitution
|
|
43
|
+
|
|
44
|
+
| Variable | Source | Description |
|
|
45
|
+
|----------|--------|-------------|
|
|
46
|
+
| `${skillContent}` | Phase 02 reads all skill files | 完整 SKILL.md + phase 文件内容,用 markdown headers 分隔 |
|
|
47
|
+
| `${testScenario.description}` | iteration-state.json | 用户描述的测试场景 |
|
|
48
|
+
| `${testScenario.input_args}` | iteration-state.json | 模拟传给 skill 的参数 |
|
|
49
|
+
| `${testScenario.requirements}` | iteration-state.json | 质量要求列表 |
|
|
50
|
+
| `${testScenario.success_criteria}` | iteration-state.json | 成功标准定义 |
|
|
51
|
+
|
|
52
|
+
## Chain Mode Extension
|
|
53
|
+
|
|
54
|
+
When running in chain mode, the template is invoked once per skill in `chain_order`. Each invocation includes:
|
|
55
|
+
|
|
56
|
+
### Additional Variable
|
|
57
|
+
|
|
58
|
+
| Variable | Source | Description |
|
|
59
|
+
|----------|--------|-------------|
|
|
60
|
+
| `${previousChainOutput}` | Phase 02 chain loop | 前序 skill 的 artifacts 摘要 (chain 模式下非首个 skill) |
|
|
61
|
+
|
|
62
|
+
### Chain Prompt Modification
|
|
63
|
+
|
|
64
|
+
When `execution_mode === 'chain'`, the prompt includes:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
PREVIOUS CHAIN OUTPUT (from upstream skill "${previousSkillName}"):
|
|
68
|
+
${previousChainOutput}
|
|
69
|
+
|
|
70
|
+
IMPORTANT: Use the above output as input context for this skill's execution.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
This section is only added for skills at position 2+ in the chain. The first skill in the chain receives no upstream context.
|
|
74
|
+
|
|
75
|
+
## skillContent Construction
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
// Read only executable skill files and format with consistent headers
|
|
79
|
+
const skillMd = Read(`${skill.path}/SKILL.md`);
|
|
80
|
+
const phaseFiles = Glob(`${skill.path}/phases/*.md`).map(f => ({
|
|
81
|
+
relativePath: f.replace(skill.path + '/', ''),
|
|
82
|
+
content: Read(f)
|
|
83
|
+
}));
|
|
84
|
+
const specFiles = Glob(`${skill.path}/specs/*.md`).map(f => ({
|
|
85
|
+
relativePath: f.replace(skill.path + '/', ''),
|
|
86
|
+
content: Read(f)
|
|
87
|
+
}));
|
|
88
|
+
|
|
89
|
+
const skillContent = `
|
|
90
|
+
### File: SKILL.md
|
|
91
|
+
${skillMd}
|
|
92
|
+
|
|
93
|
+
${phaseFiles.map(f => `### File: ${f.relativePath}\n${f.content}`).join('\n\n')}
|
|
94
|
+
|
|
95
|
+
${specFiles.length > 0 ? specFiles.map(f => `### File: ${f.relativePath}\n${f.content}`).join('\n\n') : ''}
|
|
96
|
+
`.trim();
|
|
97
|
+
```
|
|
@@ -148,7 +148,7 @@ AskUserQuestion({
|
|
|
148
148
|
|----------|------------|
|
|
149
149
|
| Unknown --role value | Error with role registry list |
|
|
150
150
|
| Role file not found | Error with expected path (roles/{name}/role.md) |
|
|
151
|
-
| project-tech.json missing | Coordinator invokes /workflow:
|
|
151
|
+
| project-tech.json missing | Coordinator invokes /workflow:spec:setup |
|
|
152
152
|
| Phase verification fails with gaps | Coordinator triggers gap closure loop (max 3 iterations) |
|
|
153
153
|
| Max gap closure iterations (3) | Report to user, ask for guidance |
|
|
154
154
|
| Worker crash | Respawn worker, reassign task |
|
|
@@ -284,7 +284,7 @@ Delegate to `commands/monitor.md`:
|
|
|
284
284
|
|
|
285
285
|
| Scenario | Resolution |
|
|
286
286
|
|----------|------------|
|
|
287
|
-
| project-tech.json missing | Invoke /workflow:
|
|
287
|
+
| project-tech.json missing | Invoke /workflow:spec:setup automatically |
|
|
288
288
|
| User cancels roadmap discussion | Save session state, exit gracefully |
|
|
289
289
|
| Planner fails | Retry once, then ask user for guidance |
|
|
290
290
|
| Executor fails on plan | Mark plan as failed, continue with next |
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"init_prerequisite": {
|
|
86
86
|
"required_files": [".workflow/project-tech.json"],
|
|
87
87
|
"optional_files": [".workflow/specs/*.md"],
|
|
88
|
-
"init_command": "/workflow:
|
|
88
|
+
"init_command": "/workflow:spec:setup "
|
|
89
89
|
},
|
|
90
90
|
"_metadata": {
|
|
91
91
|
"created_at": "2026-02-24",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAoCA,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA4JD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAoCA,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA4JD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAyU3E;AAoUD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAuDnH;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA0BxE;AA2BD;;GAEG;AACH,UAAU,sBAAsB;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAsND;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D3F"}
|