wingfoil 0.2.1 → 0.2.2
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/README.md +12 -6
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/init-command.d.ts.map +1 -1
- package/dist/cli/init-command.js +2 -1
- package/dist/cli/init-command.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +117 -29
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/registrar.d.ts +15 -6
- package/dist/cli/registrar.d.ts.map +1 -1
- package/dist/cli/registrar.js +4 -0
- package/dist/cli/registrar.js.map +1 -1
- package/dist/core/exit-code.d.ts.map +1 -1
- package/dist/core/exit-code.js +7 -6
- package/dist/core/exit-code.js.map +1 -1
- package/dist/core/index.d.ts +5 -4
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +232 -89
- package/dist/core/index.js.map +1 -1
- package/dist/core/init.d.ts +5 -3
- package/dist/core/init.d.ts.map +1 -1
- package/dist/core/init.js +5 -3
- package/dist/core/init.js.map +1 -1
- package/dist/core/registry.d.ts +69 -17
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js.map +1 -1
- package/dist/directives/schema.d.ts +3 -3
- package/dist/directives/schema.js +3 -3
- package/dist/mcp/index.d.ts +1 -1
- package/dist/memory/add.d.ts +62 -5
- package/dist/memory/add.d.ts.map +1 -1
- package/dist/memory/add.js +130 -7
- package/dist/memory/add.js.map +1 -1
- package/dist/memory/audit.d.ts +26 -6
- package/dist/memory/audit.d.ts.map +1 -1
- package/dist/memory/audit.js +27 -11
- package/dist/memory/audit.js.map +1 -1
- package/dist/memory/commit-message.js +1 -1
- package/dist/memory/commit-message.js.map +1 -1
- package/dist/memory/history.d.ts +1 -1
- package/dist/memory/history.js +1 -1
- package/dist/memory/index.d.ts +3 -3
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +6 -2
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/state-machine.js +2 -2
- package/dist/storage/templates.d.ts.map +1 -1
- package/dist/storage/templates.js +12 -1
- package/dist/storage/templates.js.map +1 -1
- package/dist/validation/id.d.ts +26 -0
- package/dist/validation/id.d.ts.map +1 -1
- package/dist/validation/id.js +64 -1
- package/dist/validation/id.js.map +1 -1
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +4 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/secret-scan.d.ts +7 -5
- package/dist/validation/secret-scan.d.ts.map +1 -1
- package/dist/validation/secret-scan.js +7 -5
- package/dist/validation/secret-scan.js.map +1 -1
- package/dist/workflow/schema.d.ts.map +1 -1
- package/dist/workflow/schema.js +27 -1
- package/dist/workflow/schema.js.map +1 -1
- package/package.json +23 -9
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
<p align="center"><img src="docs/assets/wingfoil-mark.svg" width="140" alt="WingFoil logo"></p>
|
|
2
|
+
|
|
1
3
|
# WingFoil
|
|
2
4
|
|
|
3
5
|
**A structured harness for deterministic AI-assisted software development.**
|
|
@@ -63,7 +65,7 @@ real-time tracking of project state.
|
|
|
63
65
|
|
|
64
66
|
## Key Features
|
|
65
67
|
|
|
66
|
-
### Five Pillars — status in 0.2.
|
|
68
|
+
### Five Pillars — status in 0.2.2
|
|
67
69
|
|
|
68
70
|
- ✓ **Project Memory** — Git-backed documents (tasks, ADRs, decision-logs, bugs, specs…) with per-type
|
|
69
71
|
state machines, approval gates and an audit trail (**shipped**: create, search, submit, approve,
|
|
@@ -71,7 +73,7 @@ real-time tracking of project state.
|
|
|
71
73
|
- ✓ **Project DNA** — Structured config: modules, tech stack, team & roles, resource paths
|
|
72
74
|
(**shipped**: show, set, add, update, remove)
|
|
73
75
|
- ✓ **Project Directives** — Role-scoped rules: six built-in templates installed by `init`, your own
|
|
74
|
-
custom directives, role assignments (**shipped in 0.2
|
|
76
|
+
custom directives, role assignments (**shipped in 0.2**)
|
|
75
77
|
- ✓ **Interaction Layer** — CLI for humans and agents; MCP server for agents with read-only Resources
|
|
76
78
|
and one Prompt per role (**shipped**)
|
|
77
79
|
- **Workflow State Management** — workflows are declared and listable today; the engine that starts
|
|
@@ -83,7 +85,7 @@ real-time tracking of project state.
|
|
|
83
85
|
|---|---|
|
|
84
86
|
| Setup | `wingfoil init [--template Scrum\|Kanban]` · `wingfoil mcp` |
|
|
85
87
|
| DNA | `wingfoil dna show [section]` · `dna set <path> --value <v>` · `dna add` · `dna update` · `dna remove` · `wingfoil paths [category]` |
|
|
86
|
-
| Memory | `wingfoil memory add --type <t> --title <t
|
|
88
|
+
| Memory | `wingfoil memory add --type <t> --title <t> [--set <name>=<value>]` · `submit <id>` · `approve <id> --reason <r>` · `reject <id> --reason <r>` · `deprecate <id>` · `history <id>` · `search [keyword]` |
|
|
87
89
|
| Directives | `wingfoil directive create --name <n>` · `directive assign --directive <n> --role <r>` · `directive remove <n>` · `wingfoil directives list [--role <r>]` |
|
|
88
90
|
| Workflow | `wingfoil workflow list` |
|
|
89
91
|
|
|
@@ -232,13 +234,17 @@ WingFoil is built one pillar per release until all five are integrated in 1.0.
|
|
|
232
234
|
|---|---|---|
|
|
233
235
|
| Lean Inception · Requirements | Product vision, USM · BDD · SARD · backlog | ✓ Complete |
|
|
234
236
|
| **0.1** | Project Memory + DNA | ✓ Released (not published to npm) |
|
|
235
|
-
| **0.2** | + Project Directives, Memory approvals, DNA editing, MCP role Prompts |
|
|
237
|
+
| **0.2** | + Project Directives, Memory approvals, DNA editing, MCP role Prompts | ✓ Released (`wingfoil@0.2.1` on npm) |
|
|
238
|
+
| **0.2.2** | Patch: configuration at the repository root, staged npm publishing, first-use fixes | 🔄 Being released |
|
|
236
239
|
| **0.3** | + Project Workflow | Planned |
|
|
237
240
|
| **0.4** | + Interaction Layer polish | Planned |
|
|
238
241
|
| **1.0** | MVP complete | Planned |
|
|
239
242
|
|
|
240
|
-
**Dogfooding:** WingFoil's own development is managed with WingFoil — its configuration lives
|
|
241
|
-
`docs/
|
|
243
|
+
**Dogfooding:** WingFoil's own development is managed with WingFoil — its configuration lives in
|
|
244
|
+
`.wingfoil/` and its Memory in `docs/04_memory/`, at the repository root. From there the Memory verbs
|
|
245
|
+
(`add`, `submit`, `approve`, `reject`, `deprecate`, `history`, `search`) run on WingFoil's own Memory,
|
|
246
|
+
through a published, pinned build of WingFoil (`npm run -s wingfoil -- <command>`), whose MCP server
|
|
247
|
+
is registered in `.mcp.json`. See [COLLABORATION.md](COLLABORATION.md).
|
|
242
248
|
|
|
243
249
|
---
|
|
244
250
|
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `cli` module — human interface (Commander.js
|
|
2
|
+
* `cli` module — human interface (Commander.js); the `wingfoil` command surface.
|
|
3
3
|
*
|
|
4
4
|
* task-006-dual-interface-shared-core adds the thin adapter (spec-006 §2): `buildCliCommands`
|
|
5
5
|
* (`./registrar.ts`) derives one `wingfoil <noun> <verb>` command descriptor per operation from a
|
package/dist/cli/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runMcp = exports.createReadlinePrompt = exports.runInit = exports.emitError = exports.renderSuccess = exports.isValidFormat = exports.exitWith = exports.buildProgram = exports.listRegisteredCliCommands = exports.buildCliCommands = exports.MODULE_NAME = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* `cli` module — human interface (Commander.js
|
|
5
|
+
* `cli` module — human interface (Commander.js); the `wingfoil` command surface.
|
|
6
6
|
*
|
|
7
7
|
* task-006-dual-interface-shared-core adds the thin adapter (spec-006 §2): `buildCliCommands`
|
|
8
8
|
* (`./registrar.ts`) derives one `wingfoil <noun> <verb>` command descriptor per operation from a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"AAeA,OAAO,EAA0C,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAWhD,0GAA0G;AAC1G,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,yGAAyG;IACzG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,iGAAiG;IACjG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,iGAAiG;AACjG,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,oGAAoG;IACpG,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,yFAAyF;IACzF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,UAAU,CAAC,gBAAgB,CAAC,CAAC;CAClF;
|
|
1
|
+
{"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"AAeA,OAAO,EAA0C,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAWhD,0GAA0G;AAC1G,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,yGAAyG;IACzG,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,iGAAiG;IACjG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,iGAAiG;AACjG,MAAM,WAAW,WAAW;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,oGAAoG;IACpG,QAAQ,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,yFAAyF;IACzF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,UAAU,CAAC,gBAAgB,CAAC,CAAC;CAClF;AA4CD;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBvF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAS5E"}
|
package/dist/cli/init-command.js
CHANGED
|
@@ -43,7 +43,8 @@ async function selectTemplate(options, deps, format) {
|
|
|
43
43
|
}
|
|
44
44
|
// 2. --template absent + (non-interactive OR not a TTY): fail immediately (spec-008 §4).
|
|
45
45
|
if (!options.interactive || !deps.isTTY) {
|
|
46
|
-
|
|
46
|
+
// bug-140: name the legal values, read from the registry so a new template needs no edit here.
|
|
47
|
+
(0, error_1.emitError)(`missing required argument: --template (one of: ${storage_1.TEMPLATE_NAMES.join(', ')})`, { format });
|
|
47
48
|
(0, exit_1.exitWith)(2);
|
|
48
49
|
return null;
|
|
49
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC,OAAO,iBAAiB,EAAE,QAAQ,EAAE,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AAMnE,OAAO,EAAoB,KAAK,oBAAoB,EAAmB,MAAM,aAAa,CAAC;AAkB3F;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAgKlH"}
|
package/dist/cli/program.js
CHANGED
|
@@ -31,14 +31,17 @@ exports.buildProgram = buildProgram;
|
|
|
31
31
|
* `tsconfig.test.json` and transforms `commander`'s ESM on the way in, see `jest.config.js` — and
|
|
32
32
|
* black-box by `test/cli/program.integration.test.ts`, which spawns the compiled `dist/` and so
|
|
33
33
|
* exercises the real ESM `import()` this file actually ships with.
|
|
34
|
-
* `buildCliCommands`/`listRegisteredCliCommands` (`./registrar.ts`) still carry
|
|
35
|
-
*
|
|
34
|
+
* `buildCliCommands`/`listRegisteredCliCommands` (`./registrar.ts`) still carry the dispatch
|
|
35
|
+
* behaviour. What this file adds of its own is presentation: how `--help` renders the declaration each
|
|
36
|
+
* command carries (task-120 — the positional's name and required-ness, `(required)` on an option, the
|
|
37
|
+
* example and exit-code footer), covered by `test/cli/help-describes-every-command.test.ts`.
|
|
36
38
|
*/
|
|
37
39
|
const node_fs_1 = require("node:fs");
|
|
38
40
|
const node_path_1 = require("node:path");
|
|
39
41
|
// Direct module import, not the `../core` barrel — the same path `./registrar.ts` already uses for the
|
|
40
42
|
// other two exit-code mappings (task-101; keeps this file out of the barrel's merge surface).
|
|
41
43
|
const exit_code_1 = require("../core/exit-code");
|
|
44
|
+
const storage_1 = require("../storage");
|
|
42
45
|
const registrar_1 = require("./registrar");
|
|
43
46
|
const init_command_1 = require("./init-command");
|
|
44
47
|
const mcp_command_1 = require("./mcp-command");
|
|
@@ -96,6 +99,14 @@ async function buildProgram(modules, options) {
|
|
|
96
99
|
(0, error_1.emitError)(incompleteInvocationReason(program.args), { format: 'console' });
|
|
97
100
|
(0, exit_1.exitWith)(termination.exitCode);
|
|
98
101
|
});
|
|
102
|
+
// How a command is listed under its parent (task-120, `bug-128`). Commander's own `subcommandTerm`
|
|
103
|
+
// renders each registered argument from the flag Commander ENFORCES, which is why every derived verb
|
|
104
|
+
// used to read `[positionals...]`; this renders the positional the operation declares instead,
|
|
105
|
+
// `<id>` when core refuses its absence and `[section]` when it does not. Installed before the first
|
|
106
|
+
// `.command()` for the same reason as the callback above: `copyInheritedSettings` copies the help
|
|
107
|
+
// configuration at registration time.
|
|
108
|
+
const declaredPositionals = new Map();
|
|
109
|
+
program.configureHelp({ subcommandTerm: (command) => subcommandTerm(command, declaredPositionals.get(command)) });
|
|
99
110
|
// Register `-V, --version` so `wingfoil --version` prints the version and exits 0
|
|
100
111
|
// (spec-008-cli-grammar §1, bug-001-cli-version-flag) — Commander handles it before any command.
|
|
101
112
|
program.version(readPackageVersion());
|
|
@@ -107,12 +118,15 @@ async function buildProgram(modules, options) {
|
|
|
107
118
|
// `wingfoil init` is a SPECIAL bootstrap command (task-029, P5.1.1): it runs BEFORE config exists,
|
|
108
119
|
// so it is NOT a `CORE_MODULES` noun-verb op — it is wired directly here and drives `runInit`
|
|
109
120
|
// (./init-command.ts). The wizard/`--template`/prompt-matrix logic is fully unit-tested in
|
|
110
|
-
// ./init-command.ts; this registration is
|
|
111
|
-
//
|
|
121
|
+
// ./init-command.ts; this registration is a thin `commander` seam, and `test/cli/program.test.ts`
|
|
122
|
+
// pins it (the command is registered and drives `runInit` with the resolved options).
|
|
112
123
|
program
|
|
113
124
|
.command('init')
|
|
114
|
-
.description('
|
|
115
|
-
|
|
125
|
+
.description('scaffold .wingfoil/ in the current git repository and commit it')
|
|
126
|
+
// bug-140: the legal values come from the template registry, the same list `--template` resolves
|
|
127
|
+
// against and the missing-argument error names (./init-command.ts).
|
|
128
|
+
.option('--template <name>', `methodology template, one of: ${storage_1.TEMPLATE_NAMES.join(', ')} (required without a terminal or with --no-interactive)`)
|
|
129
|
+
.addHelpText('after', leafHelpFooter(`wingfoil init --template ${storage_1.TEMPLATE_NAMES[0] ?? '<name>'}`))
|
|
116
130
|
.action(async (localOpts) => {
|
|
117
131
|
const globalOpts = program.opts();
|
|
118
132
|
let root;
|
|
@@ -130,11 +144,12 @@ async function buildProgram(modules, options) {
|
|
|
130
144
|
// starts the long-running production MCP server over stdio rather than wrapping a `CORE_MODULES`
|
|
131
145
|
// noun-verb op, so — like `init` above — it is wired directly here and drives `runMcp`
|
|
132
146
|
// (./mcp-command.ts). The pre-flight (resolve-root / error / exit 1) is unit-tested in
|
|
133
|
-
// ./mcp-command.ts with an injected server-start; this registration is
|
|
134
|
-
// `
|
|
147
|
+
// ./mcp-command.ts with an injected server-start; this registration is a thin `commander` seam, and
|
|
148
|
+
// `test/cli/program.test.ts` pins it (the command is registered and drives `runMcp`).
|
|
135
149
|
program
|
|
136
150
|
.command('mcp')
|
|
137
151
|
.description('start the WingFoil MCP server (read-only Resources and role Prompts) over stdio')
|
|
152
|
+
.addHelpText('after', leafHelpFooter('wingfoil mcp'))
|
|
138
153
|
.action(async () => {
|
|
139
154
|
const globalOpts = program.opts();
|
|
140
155
|
const format = (0, output_1.isValidFormat)(globalOpts.format) ? globalOpts.format : 'console';
|
|
@@ -143,39 +158,109 @@ async function buildProgram(modules, options) {
|
|
|
143
158
|
const nounCommands = new Map();
|
|
144
159
|
for (const command of (0, registrar_1.buildCliCommands)(modules, options)) {
|
|
145
160
|
const target = resolveCommandTarget(program, nounCommands, command);
|
|
146
|
-
// A
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
//
|
|
154
|
-
// positional
|
|
161
|
+
// A flat command IS its noun (`paths`), so only a nested verb's noun takes the module's own line.
|
|
162
|
+
if (command.verb && command.nounDescription !== undefined)
|
|
163
|
+
nounCommands.get(command.noun)?.description(command.nounDescription);
|
|
164
|
+
if (command.description !== undefined)
|
|
165
|
+
target.description(command.description);
|
|
166
|
+
// The operand (task-025's `positionals` seam, named by task-120). PARSING is the same for every
|
|
167
|
+
// derived command whatever it declares: Commander accepts any number of operands and core decides
|
|
168
|
+
// what to refuse, with its own message — `dl-082-cli-parameter-shape` gives each command at most
|
|
169
|
+
// ONE positional, the identity of its target, and an operation refuses an extra one itself
|
|
170
|
+
// (`dna set`'s migration message) rather than leave it to a Commander arity error. A declared
|
|
171
|
+
// positional is registered as an OPTIONAL variadic argument under its declared name: marking it
|
|
172
|
+
// required to Commander would replace core's `missing required argument: memory submit <id>` with
|
|
173
|
+
// Commander's own refusal, so required-ness is RENDERED (the usage line below, `subcommandTerm`)
|
|
174
|
+
// and never enforced here. A command that declares none registers no argument — so `--help` shows
|
|
175
|
+
// none — and allows excess arguments, which accepts exactly what the variadic list accepted.
|
|
176
|
+
if (command.positional) {
|
|
177
|
+
target.argument(`[${command.positional.name}...]`, command.positional.description);
|
|
178
|
+
declaredPositionals.set(target, command.positional);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
target.allowExcessArguments(true);
|
|
182
|
+
}
|
|
155
183
|
// Plus this command's own `--{flag}` options (task-028-implement-paths-category's
|
|
156
184
|
// `CoreOperation.flags`, e.g. `paths`'s `--list`): Commander rejects an unknown option, so each
|
|
157
185
|
// declared flag must be registered explicitly.
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
target.option(`--${name}`, `${name} flag`);
|
|
186
|
+
for (const flag of command.flags ?? []) {
|
|
187
|
+
target.option(`--${flag.name}`, flag.description ?? '');
|
|
161
188
|
}
|
|
162
189
|
// Value-bearing `--{name} <value>` options (task-020-implement-memory-add's `memory add
|
|
163
190
|
// --type/--title/--tags`): Commander rejects an unknown option, so each declared option must be
|
|
164
191
|
// registered explicitly with a `<value>` operand (distinguishing it from a boolean `--flag`).
|
|
192
|
+
// `required` is rendered in the description, not enforced by Commander (`requiredOption` would
|
|
193
|
+
// replace core's refusal, exactly as for the positional above).
|
|
165
194
|
for (const option of command.options ?? []) {
|
|
166
|
-
|
|
195
|
+
const flags = `--${option.name} <${option.valueName ?? 'value'}>`;
|
|
196
|
+
const description = [option.description, option.required === true ? '(required)' : undefined].filter(Boolean).join(' ');
|
|
197
|
+
// A repeatable option (task-110, `memory add --set`) collects every occurrence in order;
|
|
198
|
+
// Commander's default for a value option is last-one-wins, which would drop all but one.
|
|
199
|
+
if (option.repeatable === true) {
|
|
200
|
+
target.option(flags, description, (value, previous) => [...(previous ?? []), value]);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
target.option(flags, description);
|
|
204
|
+
}
|
|
167
205
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
//
|
|
172
|
-
|
|
206
|
+
target.usage(['[options]', ...positionalTerm(command.positional)].join(' '));
|
|
207
|
+
if (command.example !== undefined)
|
|
208
|
+
target.addHelpText('after', leafHelpFooter(command.example));
|
|
209
|
+
// The action reads the operands and options off the invoked command itself: Commander passes the
|
|
210
|
+
// declared argument's values first only when one is registered, so the command object — always the
|
|
211
|
+
// LAST callback argument — is the one shape both kinds of command share. Forward the operands
|
|
212
|
+
// (task-025), collapse this command's declared flags into a `{ name: boolean }` record (task-028)
|
|
213
|
+
// and its declared value options into a `{ name: value }` record (task-020) for `run`.
|
|
214
|
+
target.action(async (...actionArgs) => {
|
|
215
|
+
const invoked = actionArgs[actionArgs.length - 1];
|
|
173
216
|
const globalOpts = program.opts();
|
|
174
|
-
|
|
217
|
+
const options = invoked.opts();
|
|
218
|
+
await command.run(globalOpts.format, invoked.args, buildFlagValues(command, options), buildOptionValues(command, options));
|
|
175
219
|
});
|
|
176
220
|
}
|
|
177
221
|
return program;
|
|
178
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* How `--help` shows a declared positional: `<name>` when the operation refuses its absence, `[name]`
|
|
225
|
+
* when it does not — one element or none, so callers can spread it into a list of terms.
|
|
226
|
+
*/
|
|
227
|
+
function positionalTerm(positional) {
|
|
228
|
+
if (!positional)
|
|
229
|
+
return [];
|
|
230
|
+
return [positional.required === true ? `<${positional.name}>` : `[${positional.name}]`];
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* A command's line in its parent's command list — Commander's own term (`name`, then `[options]` when
|
|
234
|
+
* it has options of its own, then its arguments), with the DECLARED positional in place of the
|
|
235
|
+
* registered variadic argument (task-120). A command with no declared positional — Commander's own
|
|
236
|
+
* `help [command]` included — keeps Commander's rendering of whatever it registered.
|
|
237
|
+
*/
|
|
238
|
+
function subcommandTerm(command, positional) {
|
|
239
|
+
const argumentTerms = positional
|
|
240
|
+
? positionalTerm(positional)
|
|
241
|
+
: command.registeredArguments.map((argument) => {
|
|
242
|
+
const name = `${argument.name()}${argument.variadic ? '...' : ''}`;
|
|
243
|
+
return argument.required ? `<${name}>` : `[${name}]`;
|
|
244
|
+
});
|
|
245
|
+
return [command.name(), ...(command.options.length > 0 ? ['[options]'] : []), ...argumentTerms].join(' ');
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* The text after a command's own help (`spec-008-cli-grammar` §8, `P5.1.4-cli-ux.feature`): one example
|
|
249
|
+
* invocation, and the three exit codes of `spec-005` §1, the same for every command. Leaf commands
|
|
250
|
+
* only — a noun's help lists its verbs, and each verb carries its own.
|
|
251
|
+
*/
|
|
252
|
+
function leafHelpFooter(example) {
|
|
253
|
+
return [
|
|
254
|
+
'',
|
|
255
|
+
'Example:',
|
|
256
|
+
` $ ${example}`,
|
|
257
|
+
'',
|
|
258
|
+
'Exit codes:',
|
|
259
|
+
' 0 success',
|
|
260
|
+
' 1 the command line was valid, but the operation failed',
|
|
261
|
+
' 2 the command line is wrong: unknown command or option, missing or invalid argument',
|
|
262
|
+
].join('\n');
|
|
263
|
+
}
|
|
179
264
|
/**
|
|
180
265
|
* The `error: <reason>` text (spec-005 §3.1) for an invocation Commander found incomplete —
|
|
181
266
|
* task-103-a-missing-verb-exits-2-with-an-error-line (`bug-103`). Commander supplies no message on
|
|
@@ -232,7 +317,7 @@ function resolveCommandTarget(program, nounCommands, command) {
|
|
|
232
317
|
* `CliCommand.run`'s already-optional `flags` parameter.
|
|
233
318
|
*/
|
|
234
319
|
function buildFlagValues(command, options) {
|
|
235
|
-
const flagNames = command.flags ?? [];
|
|
320
|
+
const flagNames = (command.flags ?? []).map((flag) => flag.name);
|
|
236
321
|
if (flagNames.length === 0)
|
|
237
322
|
return undefined;
|
|
238
323
|
const flagValues = {};
|
|
@@ -246,7 +331,8 @@ function buildFlagValues(command, options) {
|
|
|
246
331
|
* into a `{ name: value }` record read from Commander's parsed options object (task-020), so
|
|
247
332
|
* `command.run` never has to know Commander's option-object shape. An option the invocation omitted is
|
|
248
333
|
* simply absent from the record (not present-as-`undefined`), so a core op can distinguish "not given"
|
|
249
|
-
* from an empty string
|
|
334
|
+
* from an empty string; a repeatable option (task-110) is the array of its occurrences. Returns
|
|
335
|
+
* `undefined` when the command declares no value options (every command
|
|
250
336
|
* before task-020-implement-memory-add), matching `CliCommand.run`'s already-optional `options` param.
|
|
251
337
|
*/
|
|
252
338
|
function buildOptionValues(command, options) {
|
|
@@ -258,6 +344,8 @@ function buildOptionValues(command, options) {
|
|
|
258
344
|
const value = options[commanderKey(name)];
|
|
259
345
|
if (typeof value === 'string')
|
|
260
346
|
optionValues[name] = value;
|
|
347
|
+
else if (Array.isArray(value))
|
|
348
|
+
optionValues[name] = value.filter((item) => typeof item === 'string');
|
|
261
349
|
}
|
|
262
350
|
return optionValues;
|
|
263
351
|
}
|
package/dist/cli/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/registrar.d.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* unit-testable; wiring this command model onto a real `commander` `Command` tree is a separate,
|
|
16
16
|
* thin, mechanical concern.
|
|
17
17
|
*/
|
|
18
|
-
import type { CoreModule, CoreOption, ParamsBuilder } from '../core/registry';
|
|
18
|
+
import type { CoreFlag, CoreModule, CoreOption, CorePositional, ParamsBuilder } from '../core/registry';
|
|
19
19
|
/** Ambient dependencies {@link buildCliCommands} needs: how to resolve the project root and how to shape each operation's params. */
|
|
20
20
|
export interface BuildCommandsOptions {
|
|
21
21
|
/** Resolves the project root a core call needs — an ambient/environment concern, not a CLI flag. */
|
|
@@ -32,10 +32,18 @@ export interface CliCommand {
|
|
|
32
32
|
readonly noun: string;
|
|
33
33
|
readonly verb: string;
|
|
34
34
|
readonly mutates: boolean;
|
|
35
|
-
/** Copied from `
|
|
35
|
+
/** Copied from `CoreModule.description` — the noun's one-line summary (task-120). */
|
|
36
|
+
readonly nounDescription?: string;
|
|
37
|
+
/** Copied from `CoreOperation.description` — the command's one-line summary (task-120). */
|
|
38
|
+
readonly description?: string;
|
|
39
|
+
/** Copied from `CoreOperation.positional` — the operand `--help` names; absent when it reads none (task-120). */
|
|
40
|
+
readonly positional?: CorePositional;
|
|
41
|
+
/** Copied from `CoreOperation.example` — the invocation `--help` shows under `Example:` (task-120). */
|
|
42
|
+
readonly example?: string;
|
|
43
|
+
/** Copied from `CoreOperation.flags` (`../core/registry.ts`) — the boolean flags `program.ts`
|
|
36
44
|
* registers as Commander `--{name}` options for this command (empty/absent for every command
|
|
37
|
-
* before task-028-implement-paths-category;
|
|
38
|
-
readonly flags?: readonly
|
|
45
|
+
* before task-028-implement-paths-category; `--list` for `paths`). */
|
|
46
|
+
readonly flags?: readonly CoreFlag[];
|
|
39
47
|
/** Copied from `CoreOperation.options` (`../core/registry.ts`) — the value-bearing `--{name} <value>`
|
|
40
48
|
* options `program.ts` registers for this command (task-020-implement-memory-add; empty/absent for
|
|
41
49
|
* every command before it). */
|
|
@@ -47,12 +55,13 @@ export interface CliCommand {
|
|
|
47
55
|
* `wingfoil dna set project.license --value MIT` -> `['project.license']`, one positional per
|
|
48
56
|
* command since `dl-082-cli-parameter-shape`), this command's own parsed `--{flag}`
|
|
49
57
|
* values (task-028, e.g. `{ list: true }`), and its parsed value-bearing `--{name} <value>` OPTIONS
|
|
50
|
-
* (task-020, e.g. `{ type: 'decision', title: 'Use PostgreSQL' }
|
|
58
|
+
* (task-020, e.g. `{ type: 'decision', title: 'Use PostgreSQL' }`; a repeatable option's value is
|
|
59
|
+
* the array of its occurrences, task-110). All are additive/optional — a
|
|
51
60
|
* command that reads no positional and declares no flags/options is still called exactly as before:
|
|
52
61
|
* `run(format)`. The single-positional read ops (`dna show`, `paths`) read `positionals[0]` via
|
|
53
62
|
* `ParamsContext.positional`.
|
|
54
63
|
*/
|
|
55
|
-
readonly run: (formatValue: string, positionals?: readonly string[], flags?: Readonly<Record<string, boolean>>, options?: Readonly<Record<string, string>>) => Promise<void>;
|
|
64
|
+
readonly run: (formatValue: string, positionals?: readonly string[], flags?: Readonly<Record<string, boolean>>, options?: Readonly<Record<string, string | readonly string[]>>) => Promise<void>;
|
|
56
65
|
}
|
|
57
66
|
/**
|
|
58
67
|
* Derive one `CliCommand` per operation in `modules`, in `enumerateOperations`'s deterministic
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrar.d.ts","sourceRoot":"","sources":["../../src/cli/registrar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"registrar.d.ts","sourceRoot":"","sources":["../../src/cli/registrar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASxG,qIAAqI;AACrI,MAAM,WAAW,oBAAoB;IACnC,oGAAoG;IACpG,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,CAAC;IACnC,iHAAiH;IACjH,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,2FAA2F;IAC3F,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,iHAAiH;IACjH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IACrC,uGAAuG;IACvG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;0EAEsE;IACtE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IACrC;;mCAE+B;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACzC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,GAAG,EAAE,CACZ,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,EAC/B,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACzC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,KAC3D,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE,OAAO,EAAE,oBAAoB,GAAG,UAAU,EAAE,CAmE5G;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,EAAE,CAEnF"}
|
package/dist/cli/registrar.js
CHANGED
|
@@ -18,6 +18,10 @@ function buildCliCommands(modules, options) {
|
|
|
18
18
|
noun: module.name,
|
|
19
19
|
verb,
|
|
20
20
|
mutates: operation.mutates,
|
|
21
|
+
nounDescription: module.description,
|
|
22
|
+
description: operation.description,
|
|
23
|
+
positional: operation.positional,
|
|
24
|
+
example: operation.example,
|
|
21
25
|
flags: operation.flags,
|
|
22
26
|
options: operation.options,
|
|
23
27
|
run: async (formatValue, positionals, flags, optionValues) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrar.js","sourceRoot":"","sources":["../../src/cli/registrar.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"registrar.js","sourceRoot":"","sources":["../../src/cli/registrar.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-code.d.ts","sourceRoot":"","sources":["../../src/core/exit-code.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAAiB,UAAU,EAAE,MAAM,SAAS,CAAC;AAGpE,wGAAwG;AACxG,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAgBjC,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAE3D;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAEvE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"exit-code.d.ts","sourceRoot":"","sources":["../../src/core/exit-code.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAAiB,UAAU,EAAE,MAAM,SAAS,CAAC;AAGpE,wGAAwG;AACxG,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAgBjC,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAE3D;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAEvE;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAqDD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CAM5E;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,YAAY,GAAG,QAAQ,CAEvE;AAED,sGAAsG;AACtG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAS9D"}
|
package/dist/core/exit-code.js
CHANGED
|
@@ -64,12 +64,13 @@ function exitCodeForResult(result) {
|
|
|
64
64
|
* version surface: a Commander upgrade that renames or adds one must revisit this set, which is why
|
|
65
65
|
* the codes are listed explicitly here rather than inferred from the suggested exit code.
|
|
66
66
|
*
|
|
67
|
-
* One of them, `commander.excessArguments`, is
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
67
|
+
* One of them, `commander.excessArguments`, is reached in production only by the two hand-wired
|
|
68
|
+
* bootstrap commands (`wingfoil init extra` → `error: too many arguments for 'init'…`, exit `2`,
|
|
69
|
+
* pinned by `test/cli/commander-parse-exit-codes.integration.test.ts`). A command derived from
|
|
70
|
+
* `CORE_MODULES` never raises it: `src/cli/program.ts` registers a declared positional as an optional
|
|
71
|
+
* variadic list and lets a command without one accept excess operands (task-120), so
|
|
72
|
+
* `wingfoil dna show project extra` is accepted and an extra positional on a write verb is refused by
|
|
73
|
+
* WingFoil's own check instead, already at exit `2`.
|
|
73
74
|
*/
|
|
74
75
|
const USAGE_ERROR_PARSE_CODES = new Set([
|
|
75
76
|
'commander.unknownCommand',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-code.js","sourceRoot":"","sources":["../../src/core/exit-code.ts"],"names":[],"mappings":";;AA8CA,4CAEC;AAGD,8CAEC;
|
|
1
|
+
{"version":3,"file":"exit-code.js","sourceRoot":"","sources":["../../src/core/exit-code.ts"],"names":[],"mappings":"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"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -96,13 +96,14 @@ export { DNA_ENTRY_OPTION_PREFIX, dnaEntryOptionName, dnaEntryFieldOfOption } fr
|
|
|
96
96
|
/**
|
|
97
97
|
* `wingfoil memory add` params (P1.3, task-020-implement-memory-add) — the FIRST Memory-document
|
|
98
98
|
* mutation. `options` is the value-bearing-option seam this task establishes
|
|
99
|
-
* (`ParamsContext.options`, `core/registry.ts`), read as `--type`/`--title`/`--tags
|
|
100
|
-
*
|
|
101
|
-
*
|
|
99
|
+
* (`ParamsContext.options`, `core/registry.ts`), read as `--type`/`--title`/`--tags` and the repeatable
|
|
100
|
+
* `--set <name>=<value>` (task-110, `spec-008-cli-grammar` §10), which arrives as a string array. The
|
|
101
|
+
* MCP surface never populates it (task-030 wires the Tool input schema); a call with no options simply
|
|
102
|
+
* has all of them absent, which the required checks below reject as usage errors.
|
|
102
103
|
*/
|
|
103
104
|
export interface MemoryAddParams {
|
|
104
105
|
readonly root: string;
|
|
105
|
-
readonly options?: Readonly<Record<string, string>>;
|
|
106
|
+
readonly options?: Readonly<Record<string, string | readonly string[]>>;
|
|
106
107
|
}
|
|
107
108
|
/**
|
|
108
109
|
* `wingfoil memory search [keyword]` params (P1.5, task-021-implement-memory-search) — reuses
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAuFA,OAAO,KAAK,EAAU,UAAU,EAAc,MAAM,YAAY,CAAC;AAIjE,mGAAmG;AACnG,eAAO,MAAM,WAAW,EAAG,MAAe,CAAC;AAE3C,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,EAId,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAClG,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,WAAW,CAAC;AACnB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,QAAQ,CAAC;AAChG,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5G,YAAY,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE/G,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAkCD;;;;;;;;;;;;wDAYwD;AACxD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;yEACyE;AACzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AA2DD;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AA0LD;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAkDD;;;;;;GAMG;AACH,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AA4BjG;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CACzE;AAsHD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAqED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6GAA6G;IAC7G,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;sFACsF;AACtF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACrD;AA6DD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,sFAAsF;AACtF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAqDD;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAuED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED,4GAA4G;AAC5G,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6GAA6G;IAC7G,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAsED;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED,yGAAyG;AACzG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mGAAmG;IACnG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAuED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AA+DD;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAmDD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,sGAAsG;AACtG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AA4HD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAyR7C,CAAC"}
|