玉澜
93d6e1a001
feat(cmdcore): unified CommandSpec + FromLeafSpec/FromShortcut adapters (Phase 2)
...
Introduce cmdcore.CommandSpec as the single typed leaf definition and
cmdcore.NewCommand as the one orchestration path (flags → constraint decl
checks → Runtime Schema projection → constraint help → PostMount → RunE
escape / generated RunE{required → constraints → Validate → BuildArgs →
ConfirmRisk → Dispatch}). Dispatch becomes a spec property, not a
separate framework.
helpers.NewLeafCommand now delegates to cmdcore.NewCommand(FromLeafSpec),
so every LeafSpec command — including all 27 devapp leaves — flows through
the unified spec. The MCP dispatch (Call / callMCPToolOnServer /
callMCPTool) is captured in the FromLeafSpec closure.
internal/shortcut/adapter.go adds FromShortcut, the typed seam mapping a
Shortcut's shared base (flags of every kind, known constraints, risk,
help identity) into a CommandSpec. It is intentionally NOT wired into the
live mount() path: Shortcut's multi-step Execute, decline-returns-nil
semantics, and Flag.Enum/Hidden/custom-constraint extras are not modeled
by cmdcore yet, so the 376 shipped shortcuts stay byte-identical. Live
wiring is deferred to Phase 3, gated by shortcut-list + schema equivalence.
Commands are provably unaffected: check-generated-drift ok (840 tools,
identical hashes), `dws schema --all` and `shortcut list` unchanged, full
helpers/cmdcore/shortcut suites green, changed-code coverage 100%.
2026-07-30 20:31:54 +08:00
..
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 08:11:27 +08:00
2026-07-14 08:11:27 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 15:19:25 +08:00
2026-07-17 10:23:40 +08:00
2026-07-15 23:38:37 +08:00
2026-07-17 10:23:40 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:02:20 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 08:11:27 +08:00
2026-07-15 11:41:30 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 12:04:31 +08:00
2026-07-28 21:13:49 +08:00
2026-07-29 09:46:00 +08:00
2026-07-23 00:18:46 +08:00
2026-07-29 14:20:39 +08:00
2026-07-14 08:11:27 +08:00
2026-07-23 00:03:58 +08:00
2026-07-29 13:29:53 +08:00
2026-07-23 13:00:05 +08:00
2026-07-23 13:00:05 +08:00
2026-07-29 00:21:26 +08:00
2026-07-29 15:51:04 +08:00
2026-07-10 21:40:36 +08:00
2026-07-29 14:36:41 +08:00
2026-07-29 15:34:59 +08:00
2026-07-29 17:51:27 +08:00
2026-07-16 10:58:56 +08:00
2026-07-28 12:09:57 +08:00
2026-07-07 19:07:03 +08:00
2026-07-13 20:33:56 +08:00
2026-06-11 12:18:25 +08:00
2026-06-11 12:18:25 +08:00
2026-07-15 23:14:16 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-06-13 23:34:37 +08:00
2026-06-13 23:34:37 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 17:07:51 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 22:31:21 +08:00
2026-07-15 15:19:25 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 22:31:21 +08:00
2026-07-15 15:19:25 +08:00
2026-06-13 23:25:04 +08:00
2026-06-13 23:25:04 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:14:16 +08:00
2026-07-15 12:08:39 +08:00
2026-06-24 10:30:04 +08:00
2026-06-24 10:30:04 +08:00
2026-06-24 10:30:04 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:02:20 +08:00
2026-07-16 10:58:56 +08:00
2026-07-12 23:11:08 +08:00
2026-07-12 23:11:08 +08:00
2026-07-12 23:11:08 +08:00
2026-07-15 22:19:49 +08:00
2026-07-15 23:02:20 +08:00
2026-07-15 23:14:16 +08:00
2026-07-15 12:08:39 +08:00
2026-07-06 00:46:47 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 22:31:21 +08:00
2026-07-15 15:19:25 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-15 23:02:20 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-15 12:08:39 +08:00
2026-07-15 12:08:39 +08:00
2026-06-11 12:18:25 +08:00
2026-07-15 22:19:49 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 22:31:21 +08:00
2026-07-15 15:19:25 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 22:31:21 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 22:19:49 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 22:19:49 +08:00
2026-07-15 23:14:16 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:14:16 +08:00
2026-07-15 12:08:39 +08:00
2026-07-09 21:28:35 +08:00
2026-07-09 21:28:35 +08:00
2026-06-14 10:41:37 +08:00
2026-06-15 17:22:45 +08:00
2026-07-16 10:58:56 +08:00
2026-06-13 21:39:45 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 23:14:16 +08:00
2026-07-15 17:07:51 +08:00
2026-07-16 10:58:56 +08:00
2026-06-24 20:36:26 +08:00
2026-07-15 12:08:39 +08:00
2026-07-15 15:19:25 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 12:38:05 +08:00
2026-07-23 17:43:12 +08:00
2026-07-23 17:43:12 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-28 14:30:29 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-29 12:25:45 +08:00
2026-07-07 19:07:03 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 16:34:45 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-06-16 17:09:06 +08:00
2026-07-28 18:05:20 +08:00
2026-07-16 10:58:56 +08:00
2026-06-18 18:34:12 +08:00
2026-06-18 18:34:12 +08:00
2026-07-06 00:46:47 +08:00
2026-07-30 16:08:19 +08:00
2026-07-28 21:33:26 +08:00
2026-07-14 00:06:37 +08:00
2026-07-14 19:04:05 +08:00
2026-07-16 10:58:56 +08:00
2026-07-13 21:09:27 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-23 17:43:12 +08:00
2026-07-23 17:43:12 +08:00
2026-07-23 17:43:12 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-23 17:43:12 +08:00
2026-07-23 17:43:12 +08:00
2026-07-29 15:34:59 +08:00
2026-07-29 15:34:59 +08:00
2026-07-07 20:48:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-07 19:07:03 +08:00
2026-07-29 11:57:57 +08:00
2026-07-16 10:58:56 +08:00
2026-07-29 15:34:59 +08:00
2026-07-29 15:34:59 +08:00
2026-07-29 15:34:59 +08:00
2026-07-29 15:34:59 +08:00
2026-07-29 15:34:59 +08:00
2026-07-13 21:09:27 +08:00
2026-07-29 15:34:59 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-29 13:29:53 +08:00
2026-07-29 09:46:00 +08:00
2026-07-16 10:58:56 +08:00
2026-07-29 00:21:26 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-29 13:29:53 +08:00
2026-07-22 16:31:10 +08:00
2026-07-22 16:31:10 +08:00
2026-07-07 19:07:03 +08:00
2026-07-23 00:03:58 +08:00
2026-07-14 19:04:05 +08:00
2026-07-16 10:58:56 +08:00
2026-07-17 15:04:13 +08:00
2026-03-28 17:51:22 +08:00
2026-07-15 12:08:39 +08:00
2026-07-30 20:31:50 +08:00
2026-07-30 20:31:50 +08:00
2026-07-30 20:31:50 +08:00
2026-07-30 20:31:54 +08:00
2026-07-07 19:07:03 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-13 22:51:38 +08:00
2026-07-14 00:06:37 +08:00
2026-07-15 12:08:39 +08:00
2026-07-24 11:05:14 +08:00
2026-07-23 17:43:13 +08:00
2026-07-24 11:05:14 +08:00
2026-07-14 08:11:27 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-28 11:36:44 +08:00
2026-07-16 10:58:56 +08:00
2026-07-29 11:57:57 +08:00
2026-07-07 19:07:03 +08:00
2026-07-21 15:07:59 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:41:59 +08:00
2026-07-23 17:43:12 +08:00
2026-07-24 09:43:16 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 12:08:39 +08:00
2026-07-07 19:07:03 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 08:11:27 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 08:11:27 +08:00
2026-07-29 11:57:57 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 08:11:27 +08:00
2026-07-15 12:08:39 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 08:11:27 +08:00
2026-07-16 10:58:56 +08:00
2026-07-15 11:41:30 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 08:11:27 +08:00
2026-07-14 08:11:27 +08:00
2026-07-29 15:34:59 +08:00
2026-07-29 15:34:59 +08:00
2026-07-17 15:04:13 +08:00
2026-07-15 18:21:30 +08:00
2026-07-16 10:58:56 +08:00
2026-07-29 15:34:59 +08:00
2026-07-16 10:24:58 +08:00
2026-07-16 10:58:56 +08:00
2026-07-08 14:06:57 +08:00
2026-07-13 21:09:27 +08:00
2026-07-14 08:11:27 +08:00
2026-07-29 15:34:59 +08:00
2026-07-16 10:58:56 +08:00
2026-07-14 08:11:27 +08:00
2026-07-16 10:58:56 +08:00
2026-07-17 15:04:13 +08:00
2026-07-17 15:04:13 +08:00
2026-07-13 21:09:27 +08:00
2026-07-13 21:09:27 +08:00
2026-07-07 19:07:03 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-29 11:57:57 +08:00
2026-07-29 15:34:59 +08:00
2026-07-29 11:57:57 +08:00
2026-03-27 17:55:57 +08:00
2026-03-27 17:55:57 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 19:07:03 +08:00
2026-07-28 12:09:57 +08:00
2026-07-16 10:58:56 +08:00
2026-07-13 22:51:38 +08:00
2026-07-28 12:09:57 +08:00
2026-07-28 12:09:57 +08:00
2026-07-16 10:58:56 +08:00
2026-07-07 23:38:23 +08:00
2026-07-15 15:31:08 +08:00
2026-07-23 17:43:12 +08:00
2026-07-16 10:58:56 +08:00