Skip to content

Releases: leodido/structcli

v0.18.0

04 May 12:56

Choose a tag to compare

What's Changed

Breaking Changes 🛠

  • feat!: remove MethodByName, wire FieldHookProvider/RegisterType by @leodido in #157
  • refactor!: remove short from DefineHookFunc signature by @leodido in #160

Features & Enhancements 🎉

  • feat: add RegisterType[T], FieldHookProvider, and FieldCompleter APIs by @leodido in #156
  • feat(ci): add WASM build and behavioral parity CI by @leodido in #162
  • feat(ci): expand wasm parity to all 8 examples by @leodido in #163
  • feat(ci): add functional parity checks for DCE-safe APIs by @leodido in #164

Documentation 📖

  • docs: update README for new custom type hook APIs by @leodido in #158
  • docs: add customtypes example by @leodido in #159
  • docs: clean up LLM tells and stale references by @leodido in #161
  • docs: document WASM support in README by @leodido in #165

Full Changelog: v0.17.0...v0.18.0

v0.17.0

30 Apr 13:29

Choose a tag to compare

What's Changed

Features & Enhancements 🎉

  • feat: add standalone capability interfaces (Validatable, Transformable, ContextInjector) by @leodido in #141
  • feat: add Bind(cmd, opts) for flag definition and auto-unmarshal registration by @leodido in #142
  • feat: add ExecuteC + bind pipeline for auto-unmarshal by @leodido in #149
  • feat: add Setup orchestrator with functional options by @leodido in #144
  • feat: add WithAppName and WithConfig to Setup by @leodido in #145
  • refactor: rewrite examples to use Setup + Bind + ExecuteC by @leodido in #146
  • fix: bind pipeline runtime fixes for shared opts, repeated ExecuteC, and config reload by @leodido in #148
  • refactor: extract DefaultValidateTagName and DefaultModTagName constants by @leodido in #152
  • refactor: unify annotation prefix by @leodido in #154

Bug Fixes 🪤

  • fix: allow --jsonschema and --debug-options on commands without RunE by @leodido in #140
  • fix: warn when Bind-registered command has subcommands but TraverseChildren is false by @leodido in #151
  • fix: warn when Bind is used without ExecuteC by @leodido in #153

Documentation 📖

  • docs: update README, ai-native.md, and examples for Setup + Bind + ExecuteC API by @leodido in #147
  • docs: explain WithDebug non-variadic signature in Setup godoc by @leodido in #150
  • docs: remove em/en dashes and undeprecate composite interfaces by @leodido in #155

Full Changelog: v0.16.1...v0.17.0

v0.16.1

23 Apr 22:40

Choose a tag to compare

What's Changed

Bug Fixes 🪤

  • fix(ci): add GONOSUMDB alongside GONOSUMCHECK in workflows by @leodido in #139

Full Changelog: v0.16.0...v0.16.1

v0.16.0

23 Apr 19:16

Choose a tag to compare

What's Changed

Features & Enhancements 🎉

  • refactor: replace unsafe.Pointer with safe reflect in define path by @leodido in #104
  • refactor: replace unreachable pflag error handling with panic helpers by @leodido in #114
  • feat: add RegisterEnum for automatic string enum flag handling by @leodido in #115
  • feat: add RegisterIntEnum for integer-based enum flags by @leodido in #116
  • refactor: migrate zapcore.Level to RegisterIntEnum by @leodido in #118
  • feat: add flagkit package with Follow type for agent-friendly streaming by @leodido in #119
  • feat: add flagkit.LogLevel types (ZapLogLevel, SlogLogLevel, LogLevel alias) by @leodido in #125
  • feat: add flagkit.Output type with OutputFormat enum and RegisterOutputFormats by @leodido in #121
  • feat: add flagkit.Verbose and flagkit.DryRun types by @leodido in #122
  • feat: add flagkit.Timeout and flagkit.Quiet types by @leodido in #126
  • feat: add JSON debug output and source attribution for UseDebug by @leodido in #129
  • feat: add SetupHelpTopics for env-vars and config-keys help topics by @leodido in #133
  • feat: close --jsonschema gaps and add cross-tree CLI support by @leodido in #134

Bug Fixes 🪤

  • fix: P1.2 preset round-trip must exclude comma from values by @leodido in #109
  • fix: filter non-callable commands in agents.go and skill.go by @leodido in #111
  • fix: handle embedded struct name collision in Unmarshal by @leodido in #124
  • fix: show inherited persistent flags in subcommand help by @leodido in #131
  • docs: update README debug section and all help text snippets by @leodido in #130
  • fix: reject --jsonschema on help topic commands by @leodido in #135
  • fix: validate --jsonschema flag values and deduplicate WithFullTree by @leodido in #136

Documentation 📖

  • docs: add RegisterEnum section to README by @leodido in #128
  • docs: fix non-compiling minimal example and stale flagcustom tag by @leodido in #132

Other Changes 🫶

  • feat: add Unwrap() to ValidationError for errors.Is/errors.As support by @leodido in #102

Full Changelog: v0.15.0...v0.16.0

v0.15.0

14 Apr 17:58

Choose a tag to compare

What's Changed

Features & Enhancements 🎉

  • Add flaghidden annotation by @leodido in #92
  • Add command factory for captured output streams by @fntlnz in #97
  • Deduplicate enum help-text building logic by @leodido in #96

Bug Fixes 🪤

  • Check InferDecodeHooks return in flagcustom fallback path by @leodido in #94
  • Propagate SetAnnotation error from InferDecodeHooks by @leodido in #95
  • Signal truncation in config description when paths exceed 3 by @leodido in #98
  • Remove throwaway "" map entry in Groups() by @leodido in #100
  • Discard unreachable MarkHidden error to fix diff coverage by @leodido in #93

Other Changes 🫶

New Contributors

Full Changelog: v0.14.0...v0.15.0

v0.14.0

07 Apr 08:43

Choose a tag to compare

What's Changed

Features & Enhancements 🎉

  • Add stdio MCP server support by @leodido in #82
  • Include runnable parent commands in discovery files by @leodido in #80
  • Remove os.Exit from JSON Schema and MCP interceptors by @leodido in #83
  • Add Version constant and CI gate against tag drift by @leodido in #79

Bug Fixes 🪤

Other Changes 🫶

  • Dogfood generators on the full example CLI by @leodido in #77
  • Add SetupMCP to README and AI Native guide by @leodido in #86
  • Restore project coverage above 90% by @leodido in #84
  • Boost coverage for values/net.go and jsonschema.go by @leodido in #85
  • Add unreleased entries for v0.14.0 by @leodido in #87
  • Bump Version constant to 0.14.0 by @leodido in #88

Full Changelog: v0.13.0...v0.14.0

v0.13.0

03 Apr 20:51

Choose a tag to compare

What's Changed

Features & Enhancements 🎉

  • Add --jsonschema flag for machine-readable CLI self-description by @leodido in #62
  • Add semantic exit codes for AI-native CLIs by @leodido in #63
  • Add EnumValuer interface and store enum values in flag annotations by @leodido in #66
  • Store validate/mod tags as annotations with custom tag name support by @leodido in #67
  • Add Details() to ValidationError with generalized interface by @leodido in #68
  • Structured JSON errors with typed interception and semantic exit codes by @leodido in #65
  • Emit integer schema types for integral flags by @leodido in #72
  • Make JSON Schema setup composable and configurable by @leodido in #73
  • Add SKILL.md, llms.txt, and AGENTS.md generators by @leodido in #76

Bug Fixes 🪤

  • Fix memory cleanup assertion math by @leodido in #69
  • Keep missing flags and config errors distinct by @leodido in #71
  • Recurse into unexported embedded structs by @leodido in #78

Other Changes 🫶

  • Add "Build AI-Native CLIs" section to README by @leodido in #64
  • Preserve exact env restoration in tests by @leodido in #74
  • Remove tracked structerr binary by @leodido in #70
  • Align contract and changelog by @leodido in #75

Full Changelog: v0.12.0...v0.13.0

v0.12.0

22 Mar 01:31

Choose a tag to compare

What's Changed

Features & Enhancements 🎉

  • Establish byte type contract primitives by @leodido in #52
  • Add Hex/Base64 typed bytes support for flags, env, and config by @leodido in #53
  • Support net.IP/net.IPMask/net.IPNet/[]net.IP across flags, env, and config by @leodido in #54
  • Add built-in slice ([]time.Duration, []bool, []uint) families by @leodido in #58
  • Add map families (map[string]string, map[string]int, map[string]int64) and example by @leodido in #61

Bug Fixes 🪤

  • Align []string decode with CSV semantics by @leodido in #57

Other Changes 🫶

  • Codify separator policy by @leodido in #56
  • Document byte built-ins and clean stale comment by @leodido in #55
  • Run collections example (examples/collections) coverage by @leodido in #60

Full Changelog: v0.11.0...v0.12.0

v0.11.0

23 Feb 09:56

Choose a tag to compare

What's Changed

Features & Enhancements 🎉

  • Add first-class flag presets for alias/value combos by @leodido in #47
  • Auto-register Complete<FieldName> flag completions by @leodido in #50
  • Add runnable flagpreset demo command by @leodido in #48

Other Changes 🫶

Full Changelog: v0.10.0...v0.11.0

v0.10.0

15 Feb 20:12
1328f15

Choose a tag to compare

What's Changed

Features & Enhancements 🎉

  • Add float32/float64 support by @leodido in #33
  • Add opt-in config key validation by @leodido in #44
  • Reconcile root config and command effective viper scopes by @leodido in #42
  • Clarify options contract for validate/transform by @leodido in #35

Bug Fixes 🪤

  • Stop swallowing env/config/define errors by @leodido in #28
  • Eliminate SetEnvPrefix data races by @leodido in #29
  • Clear env prefix in Reset() by @leodido in #32
  • Apply defaults when unmarshal runs on leaf command by @leodido in #37
  • Scope remapping metadata to command context by @leodido in #38
  • Support nested alias keys during remapping by @leodido in #39
  • Wrap commands added after SetupDebug by @leodido in #43
  • Fix config remapping typo by @leodido in #45

Security 🔒

  • Bump golang.org/x/crypto to v0.45.0 by @leodido in #30
  • Bump golang.org/x/crypto from 0.39.0 to 0.45.0 in /examples/full by @dependabot[bot] in #31

Other Changes 🫶

  • Remove goto definition_done by @leodido in #34
  • Clarify config key forms, precedence, and env scope by @leodido in #40
  • Add characterization coverage for key remapping by @leodido in #36
  • Characterize global vs scoped viper config boundary by @leodido in #41

Full Changelog: v0.9.2...v0.10.0