Commit 0720a24
feat: custom global options (#98)
* feat: add Parser.parseGlobals for custom global option extraction
Permissive argv scanner that extracts known global flags and passes
unknown flags + positionals through to rest. Reuses all existing
Parser internals (createOptionNames, normalizeOptionName, coerce, etc).
* feat: add globals generic to middleware Context and command execution
Adds globals as a third generic on Handler, Context, and middleware()
factory following the existing InferVars/InferEnv pattern. Wires
globals into execute.Options and mwCtx construction.
* feat: render custom global options in help output
Extends globalOptionsLines, formatRoot, and formatCommand to accept an
optional globals schema. Custom globals render as a separate block
above the built-in global options using the existing optionEntries helper.
* feat: add global options to shell completions
Extends complete() to accept an optional globals descriptor. Global
flags are suggested alongside command-specific options with dedup.
Value resolution falls through from command options to globals.
* feat: wire global options into Cli.ts
Adds globals as 4th generic on Cli type, all create() overloads, and
create.Options. Stores globals config in WeakMap. Validates against
builtin flag collisions at create() and command option collisions at
command(). Extracts globals via Parser.parseGlobals after builtin
extraction in serveImpl. Passes globals to middleware context,
Help output, Completions, --llms manifests, and --schema output.
* fix: rename rest to commandRest to avoid redeclaration in serveImpl
* test: add globals integration, type-level, and parser unit tests
13 integration tests (middleware flow, aliases, defaults, routing,
help, --llms, --schema, conflicts, negation, position flexibility),
2 type-level tests (generic flow, alias constraint), and 8 parser
unit tests for parseGlobals.
* fix: globals parsing edge cases and collision detection
- Stop unknown flags from greedily eating the next token as a value
- Add -- separator handling in parseGlobals
- Wrap parseGlobals in try/catch for clean error envelopes
- Validate globalAlias values against reserved short flags (-h)
- Check command alias collisions with global aliases
- Include --no-{config} negation in builtin collision list
- Add globals to fetch gateway middleware context
* chore: remove duplicate tests and use toKebab in completions
- Delete redundant "stripped from argv" and "work with subcommands" tests
- Update validation error test to match new try/catch behavior
- Use toKebab import instead of inline regex in Completions.ts
* refactor: extract GlobalsDescriptor type, deduplicate across files
Define GlobalsDescriptor once in Cli.ts, replace 6 inline repetitions
across Cli.ts, Help.ts, and Completions.ts.
* chore: add changeset for custom global options
* fix: CI type errors — exactOptionalPropertyTypes and ts-expect-error
- Add undefined to GlobalsDescriptor.alias for exactOptionalPropertyTypes
- Restructure globalAlias type test to avoid tsc -b @ts-expect-error quirk
* test: close coverage gaps in completions, parser, cli, and help
- 5 completions tests (global flags, aliases, dedup, enum values, booleans)
- 7 parser tests (-- separator, stacked shorts, count, array, unknown --no-*,
unknown --flag=value, missing value error)
- 3 cli tests (parseGlobals error envelope, -h alias conflict, command alias conflict)
- 2 help tests (deprecated globals rendering, globals with defaults in formatRoot)
* test: close remaining coverage gaps in parseGlobals and serveImpl
- 6 parser tests (stacked short count/non-boolean/value-taking, short
missing value, known --no- negation, known --flag=value with array)
- 1 cli test (agent-mode error formatting for globals validation)
* fix: handle global option edge cases
* test: cover global options e2e
* chore: update changeset wording
* test: stabilize lazy import tracking
---------
Co-authored-by: jxom <7336481+jxom@users.noreply.github.com>1 parent 713bb95 commit 0720a24
13 files changed
Lines changed: 1205 additions & 45 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
422 | 422 | | |
423 | 423 | | |
424 | 424 | | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4310 | 4310 | | |
4311 | 4311 | | |
4312 | 4312 | | |
4313 | | - | |
| 4313 | + | |
4314 | 4314 | | |
4315 | 4315 | | |
4316 | 4316 | | |
| |||
5366 | 5366 | | |
5367 | 5367 | | |
5368 | 5368 | | |
| 5369 | + | |
| 5370 | + | |
| 5371 | + | |
| 5372 | + | |
| 5373 | + | |
| 5374 | + | |
| 5375 | + | |
| 5376 | + | |
| 5377 | + | |
| 5378 | + | |
| 5379 | + | |
| 5380 | + | |
| 5381 | + | |
| 5382 | + | |
| 5383 | + | |
| 5384 | + | |
| 5385 | + | |
| 5386 | + | |
| 5387 | + | |
| 5388 | + | |
| 5389 | + | |
| 5390 | + | |
| 5391 | + | |
| 5392 | + | |
| 5393 | + | |
| 5394 | + | |
| 5395 | + | |
| 5396 | + | |
| 5397 | + | |
| 5398 | + | |
| 5399 | + | |
| 5400 | + | |
| 5401 | + | |
| 5402 | + | |
| 5403 | + | |
| 5404 | + | |
| 5405 | + | |
| 5406 | + | |
| 5407 | + | |
| 5408 | + | |
| 5409 | + | |
| 5410 | + | |
| 5411 | + | |
| 5412 | + | |
| 5413 | + | |
| 5414 | + | |
| 5415 | + | |
| 5416 | + | |
| 5417 | + | |
| 5418 | + | |
| 5419 | + | |
| 5420 | + | |
| 5421 | + | |
| 5422 | + | |
| 5423 | + | |
| 5424 | + | |
| 5425 | + | |
| 5426 | + | |
| 5427 | + | |
| 5428 | + | |
| 5429 | + | |
| 5430 | + | |
| 5431 | + | |
| 5432 | + | |
| 5433 | + | |
| 5434 | + | |
| 5435 | + | |
| 5436 | + | |
| 5437 | + | |
| 5438 | + | |
| 5439 | + | |
| 5440 | + | |
| 5441 | + | |
| 5442 | + | |
| 5443 | + | |
| 5444 | + | |
| 5445 | + | |
| 5446 | + | |
| 5447 | + | |
| 5448 | + | |
| 5449 | + | |
| 5450 | + | |
| 5451 | + | |
| 5452 | + | |
| 5453 | + | |
| 5454 | + | |
| 5455 | + | |
| 5456 | + | |
| 5457 | + | |
| 5458 | + | |
| 5459 | + | |
| 5460 | + | |
| 5461 | + | |
| 5462 | + | |
| 5463 | + | |
| 5464 | + | |
| 5465 | + | |
| 5466 | + | |
| 5467 | + | |
| 5468 | + | |
| 5469 | + | |
| 5470 | + | |
| 5471 | + | |
| 5472 | + | |
| 5473 | + | |
| 5474 | + | |
| 5475 | + | |
| 5476 | + | |
| 5477 | + | |
| 5478 | + | |
| 5479 | + | |
| 5480 | + | |
| 5481 | + | |
| 5482 | + | |
| 5483 | + | |
| 5484 | + | |
| 5485 | + | |
| 5486 | + | |
| 5487 | + | |
| 5488 | + | |
| 5489 | + | |
| 5490 | + | |
| 5491 | + | |
| 5492 | + | |
| 5493 | + | |
| 5494 | + | |
| 5495 | + | |
| 5496 | + | |
| 5497 | + | |
| 5498 | + | |
| 5499 | + | |
| 5500 | + | |
| 5501 | + | |
| 5502 | + | |
| 5503 | + | |
| 5504 | + | |
| 5505 | + | |
| 5506 | + | |
| 5507 | + | |
| 5508 | + | |
| 5509 | + | |
| 5510 | + | |
| 5511 | + | |
| 5512 | + | |
| 5513 | + | |
| 5514 | + | |
| 5515 | + | |
| 5516 | + | |
| 5517 | + | |
| 5518 | + | |
| 5519 | + | |
| 5520 | + | |
| 5521 | + | |
| 5522 | + | |
| 5523 | + | |
| 5524 | + | |
| 5525 | + | |
| 5526 | + | |
| 5527 | + | |
| 5528 | + | |
| 5529 | + | |
| 5530 | + | |
| 5531 | + | |
| 5532 | + | |
| 5533 | + | |
| 5534 | + | |
| 5535 | + | |
| 5536 | + | |
| 5537 | + | |
| 5538 | + | |
| 5539 | + | |
| 5540 | + | |
| 5541 | + | |
| 5542 | + | |
| 5543 | + | |
| 5544 | + | |
| 5545 | + | |
| 5546 | + | |
| 5547 | + | |
| 5548 | + | |
| 5549 | + | |
| 5550 | + | |
| 5551 | + | |
| 5552 | + | |
| 5553 | + | |
| 5554 | + | |
| 5555 | + | |
| 5556 | + | |
| 5557 | + | |
| 5558 | + | |
| 5559 | + | |
| 5560 | + | |
| 5561 | + | |
| 5562 | + | |
| 5563 | + | |
| 5564 | + | |
| 5565 | + | |
| 5566 | + | |
| 5567 | + | |
| 5568 | + | |
| 5569 | + | |
| 5570 | + | |
| 5571 | + | |
| 5572 | + | |
| 5573 | + | |
| 5574 | + | |
| 5575 | + | |
| 5576 | + | |
| 5577 | + | |
| 5578 | + | |
| 5579 | + | |
| 5580 | + | |
| 5581 | + | |
| 5582 | + | |
| 5583 | + | |
| 5584 | + | |
| 5585 | + | |
| 5586 | + | |
| 5587 | + | |
| 5588 | + | |
| 5589 | + | |
| 5590 | + | |
| 5591 | + | |
| 5592 | + | |
| 5593 | + | |
| 5594 | + | |
| 5595 | + | |
| 5596 | + | |
| 5597 | + | |
| 5598 | + | |
| 5599 | + | |
| 5600 | + | |
| 5601 | + | |
| 5602 | + | |
| 5603 | + | |
| 5604 | + | |
| 5605 | + | |
| 5606 | + | |
| 5607 | + | |
| 5608 | + | |
| 5609 | + | |
| 5610 | + | |
| 5611 | + | |
| 5612 | + | |
| 5613 | + | |
| 5614 | + | |
| 5615 | + | |
| 5616 | + | |
| 5617 | + | |
| 5618 | + | |
| 5619 | + | |
| 5620 | + | |
| 5621 | + | |
| 5622 | + | |
| 5623 | + | |
| 5624 | + | |
| 5625 | + | |
| 5626 | + | |
| 5627 | + | |
| 5628 | + | |
| 5629 | + | |
| 5630 | + | |
| 5631 | + | |
| 5632 | + | |
| 5633 | + | |
| 5634 | + | |
| 5635 | + | |
| 5636 | + | |
| 5637 | + | |
| 5638 | + | |
| 5639 | + | |
| 5640 | + | |
| 5641 | + | |
| 5642 | + | |
| 5643 | + | |
| 5644 | + | |
| 5645 | + | |
| 5646 | + | |
| 5647 | + | |
| 5648 | + | |
| 5649 | + | |
| 5650 | + | |
| 5651 | + | |
| 5652 | + | |
| 5653 | + | |
| 5654 | + | |
| 5655 | + | |
| 5656 | + | |
| 5657 | + | |
| 5658 | + | |
5369 | 5659 | | |
5370 | 5660 | | |
5371 | 5661 | | |
| |||
0 commit comments