@hegemonart/get-design-done 1.31.0 → 1.32.0

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.
Files changed (180) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +75 -0
  4. package/NOTICE +262 -0
  5. package/README.md +13 -1
  6. package/SKILL.md +4 -0
  7. package/agents/design-authority-watcher.md +1 -1
  8. package/agents/perf-analyzer.md +2 -2
  9. package/bin/gdd-mcp +78 -0
  10. package/bin/gdd-sdk +34 -24
  11. package/bin/gdd-state-mcp +78 -0
  12. package/{README.de.md → docs/i18n/README.de.md} +1 -1
  13. package/{README.fr.md → docs/i18n/README.fr.md} +1 -1
  14. package/{README.it.md → docs/i18n/README.it.md} +1 -1
  15. package/{README.ja.md → docs/i18n/README.ja.md} +1 -1
  16. package/{README.ko.md → docs/i18n/README.ko.md} +1 -1
  17. package/{README.zh-CN.md → docs/i18n/README.zh-CN.md} +1 -1
  18. package/hooks/_hook-emit.js +1 -1
  19. package/hooks/budget-enforcer.ts +5 -5
  20. package/hooks/context-exhaustion.ts +2 -2
  21. package/hooks/gdd-precompact-snapshot.js +3 -3
  22. package/hooks/gdd-read-injection-scanner.ts +2 -2
  23. package/hooks/gdd-sessionstart-recap.js +1 -1
  24. package/hooks/gdd-turn-closeout.js +1 -1
  25. package/hooks/hooks.json +9 -0
  26. package/hooks/inject-using-gdd.sh +72 -0
  27. package/hooks/run-hook.cmd +35 -0
  28. package/package.json +20 -9
  29. package/recipes/.gitkeep +0 -0
  30. package/reference/schemas/events.schema.json +63 -1
  31. package/reference/schemas/recipe.schema.json +33 -0
  32. package/scripts/cli/gdd-events.mjs +5 -5
  33. package/scripts/lib/cache/gdd-cache-manager.cjs +1 -1
  34. package/scripts/lib/cli/index.ts +22 -160
  35. package/scripts/lib/connection-probe/index.cjs +1 -1
  36. package/scripts/lib/discuss-parallel-runner/aggregator.ts +1 -1
  37. package/scripts/lib/discuss-parallel-runner/index.ts +1 -1
  38. package/scripts/lib/error-classifier.cjs +24 -227
  39. package/scripts/lib/event-stream/index.ts +25 -193
  40. package/scripts/lib/gdd-errors/index.ts +24 -213
  41. package/scripts/lib/gdd-state/index.ts +23 -161
  42. package/scripts/lib/health-mirror/index.cjs +79 -1
  43. package/scripts/lib/iteration-budget.cjs +23 -199
  44. package/scripts/lib/jittered-backoff.cjs +24 -107
  45. package/scripts/lib/lockfile.cjs +23 -195
  46. package/scripts/lib/logger/index.ts +1 -1
  47. package/scripts/lib/parallelism-engine/concurrency-tuner.cjs +1 -1
  48. package/scripts/lib/perf-analyzer/index.cjs +1 -1
  49. package/scripts/lib/pipeline-runner/index.ts +4 -4
  50. package/scripts/lib/pipeline-runner/state-machine.ts +1 -1
  51. package/scripts/lib/prompt-dedup/index.cjs +1 -1
  52. package/scripts/lib/rate-guard.cjs +2 -2
  53. package/scripts/lib/recipe-loader.cjs +142 -0
  54. package/scripts/lib/session-runner/errors.ts +3 -3
  55. package/scripts/lib/session-runner/index.ts +3 -3
  56. package/scripts/lib/session-runner/transcript.ts +1 -1
  57. package/scripts/lib/tool-scoping/index.ts +1 -1
  58. package/scripts/mcp-servers/gdd-mcp/server.ts +29 -311
  59. package/scripts/mcp-servers/gdd-state/server.ts +28 -282
  60. package/sdk/README.md +45 -0
  61. package/{scripts/lib → sdk}/cli/commands/audit.ts +3 -3
  62. package/{scripts/lib → sdk}/cli/commands/init.ts +3 -3
  63. package/{scripts/lib → sdk}/cli/commands/query.ts +4 -4
  64. package/{scripts/lib → sdk}/cli/commands/run.ts +5 -5
  65. package/{scripts/lib → sdk}/cli/commands/stage.ts +5 -5
  66. package/sdk/cli/index.js +8091 -0
  67. package/sdk/cli/index.ts +172 -0
  68. package/{scripts/lib → sdk}/cli/parse-args.ts +2 -2
  69. package/{scripts/lib/gdd-errors → sdk/errors}/classification.ts +1 -1
  70. package/sdk/errors/index.ts +218 -0
  71. package/{scripts/lib → sdk}/event-stream/emitter.ts +1 -1
  72. package/sdk/event-stream/index.ts +197 -0
  73. package/{scripts/lib → sdk}/event-stream/reader.ts +1 -1
  74. package/{scripts/lib → sdk}/event-stream/types.ts +2 -2
  75. package/{scripts/lib → sdk}/event-stream/writer.ts +1 -1
  76. package/sdk/index.ts +19 -0
  77. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/README.md +3 -3
  78. package/sdk/mcp/gdd-mcp/server.js +1966 -0
  79. package/sdk/mcp/gdd-mcp/server.ts +325 -0
  80. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_cycle_recap.ts +3 -3
  81. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_decisions_list.ts +2 -2
  82. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_events_tail.ts +3 -3
  83. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_health.ts +2 -2
  84. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_intel_get.ts +2 -2
  85. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_learnings_digest.ts +2 -2
  86. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_phase_current.ts +2 -2
  87. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_phases_list.ts +2 -2
  88. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_plans_list.ts +2 -2
  89. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_reflections_latest.ts +2 -2
  90. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_status.ts +3 -3
  91. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/gdd_telemetry_query.ts +3 -3
  92. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/index.ts +2 -2
  93. package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/tools/shared.ts +3 -3
  94. package/sdk/mcp/gdd-state/server.js +2790 -0
  95. package/sdk/mcp/gdd-state/server.ts +294 -0
  96. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/add_blocker.ts +3 -3
  97. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/add_decision.ts +3 -3
  98. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/add_must_have.ts +3 -3
  99. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/checkpoint.ts +2 -2
  100. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/frontmatter_update.ts +2 -2
  101. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/get.ts +3 -3
  102. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/index.ts +1 -1
  103. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/probe_connections.ts +3 -3
  104. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/resolve_blocker.ts +3 -3
  105. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/set_status.ts +2 -2
  106. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/shared.ts +8 -8
  107. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/transition_stage.ts +4 -4
  108. package/{scripts/mcp-servers → sdk/mcp}/gdd-state/tools/update_progress.ts +2 -2
  109. package/sdk/primitives/error-classifier.cjs +232 -0
  110. package/sdk/primitives/iteration-budget.cjs +205 -0
  111. package/sdk/primitives/jittered-backoff.cjs +112 -0
  112. package/sdk/primitives/lockfile.cjs +201 -0
  113. package/{scripts/lib/gdd-state → sdk/state}/gates.ts +1 -1
  114. package/sdk/state/index.ts +167 -0
  115. package/{scripts/lib/gdd-state → sdk/state}/lockfile.ts +1 -1
  116. package/{scripts/lib/gdd-state → sdk/state}/mutator.ts +1 -1
  117. package/{scripts/lib/gdd-state → sdk/state}/parser.ts +1 -1
  118. package/{scripts/lib/gdd-state → sdk/state}/types.ts +4 -4
  119. package/skills/audit/SKILL.md +13 -0
  120. package/skills/brief/SKILL.md +25 -0
  121. package/skills/design/SKILL.md +17 -0
  122. package/skills/discuss/SKILL.md +13 -0
  123. package/skills/explore/SKILL.md +17 -0
  124. package/skills/health/SKILL.md +6 -0
  125. package/skills/plan/SKILL.md +25 -0
  126. package/skills/quality-gate/SKILL.md +2 -2
  127. package/skills/router/SKILL.md +4 -0
  128. package/skills/router/router-pick-emitter.md +78 -0
  129. package/skills/using-gdd/SKILL.md +78 -0
  130. package/skills/verify/SKILL.md +17 -0
  131. package/scripts/aggregate-agent-metrics.ts +0 -282
  132. package/scripts/bootstrap-manifest.txt +0 -3
  133. package/scripts/bootstrap.sh +0 -80
  134. package/scripts/build-distribution-bundles.cjs +0 -549
  135. package/scripts/build-intel.cjs +0 -486
  136. package/scripts/codegen-schema-types.ts +0 -149
  137. package/scripts/detect-stale-refs.cjs +0 -107
  138. package/scripts/e2e/run-headless.ts +0 -514
  139. package/scripts/extract-changelog-section.cjs +0 -58
  140. package/scripts/gsd-cleanup-incubator.cjs +0 -367
  141. package/scripts/injection-patterns.cjs +0 -58
  142. package/scripts/lint-agentskills-spec.cjs +0 -457
  143. package/scripts/release-smoke-test.cjs +0 -200
  144. package/scripts/rollback-release.sh +0 -42
  145. package/scripts/run-injection-scanner-ci.cjs +0 -83
  146. package/scripts/tests/test-authority-rejected-kinds.sh +0 -58
  147. package/scripts/tests/test-authority-watcher-diff.sh +0 -113
  148. package/scripts/tests/test-motion-provenance.sh +0 -64
  149. package/scripts/validate-frontmatter.ts +0 -409
  150. package/scripts/validate-incubator-scope.cjs +0 -133
  151. package/scripts/validate-schemas.ts +0 -401
  152. package/scripts/validate-skill-length.cjs +0 -283
  153. package/scripts/verify-version-sync.cjs +0 -30
  154. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_cycle_recap.schema.json +0 -0
  155. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_decisions_list.schema.json +0 -0
  156. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_events_tail.schema.json +0 -0
  157. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_health.schema.json +0 -0
  158. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_intel_get.schema.json +0 -0
  159. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_learnings_digest.schema.json +0 -0
  160. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_phase_current.schema.json +0 -0
  161. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_phases_list.schema.json +0 -0
  162. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_plans_list.schema.json +0 -0
  163. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_reflections_latest.schema.json +0 -0
  164. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_status.schema.json +0 -0
  165. /package/{scripts/mcp-servers → sdk/mcp}/gdd-mcp/schemas/gdd_telemetry_query.schema.json +0 -0
  166. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/add_blocker.schema.json +0 -0
  167. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/add_decision.schema.json +0 -0
  168. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/add_must_have.schema.json +0 -0
  169. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/checkpoint.schema.json +0 -0
  170. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/frontmatter_update.schema.json +0 -0
  171. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/get.schema.json +0 -0
  172. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/probe_connections.schema.json +0 -0
  173. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/resolve_blocker.schema.json +0 -0
  174. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/set_status.schema.json +0 -0
  175. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/transition_stage.schema.json +0 -0
  176. /package/{scripts/mcp-servers → sdk/mcp}/gdd-state/schemas/update_progress.schema.json +0 -0
  177. /package/{scripts/lib → sdk/primitives}/error-classifier.d.cts +0 -0
  178. /package/{scripts/lib → sdk/primitives}/iteration-budget.d.cts +0 -0
  179. /package/{scripts/lib → sdk/primitives}/jittered-backoff.d.cts +0 -0
  180. /package/{scripts/lib → sdk/primitives}/lockfile.d.cts +0 -0
package/sdk/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # `@hegemonart/get-design-done` SDK
2
+
3
+ The SDK is the typed, runtime-tested core that the GDD pipeline and both MCP
4
+ servers are built on. It is plain TypeScript run under Node 22+
5
+ `--experimental-strip-types` (no build step). Five concerns live here: the
6
+ **`gdd-state` MCP server** (11 typed STATE.md tools over stdio), **lockfile-safe
7
+ STATE.md** read / mutate / transition, the **append-only event stream** (JSONL +
8
+ in-process bus), the four **resilience primitives** (`.cjs` + `.d.cts`), and the
9
+ headless **`gdd-sdk` CLI**.
10
+
11
+ ## Import contract (D-04)
12
+
13
+ Prefer the **explicit per-module path** for the surface you need. The
14
+ `sdk/index.ts` barrel re-exports state / event-stream / errors / cli for callers
15
+ who want one entry point; the bare-package root import is reserved for the
16
+ install bin. Every path below is importable from the published package.
17
+
18
+ | Module | Public import | Helpers (key exports) | Stability |
19
+ | --------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------- | --------- |
20
+ | cli | `@hegemonart/get-design-done/sdk/cli` | `dispatch`, `main`, `USAGE`, `DispatcherDeps` | beta |
21
+ | state | `@hegemonart/get-design-done/sdk/state` | `read`, `mutate`, `transition`, `ParsedState`, `Stage` | beta |
22
+ | event-stream | `@hegemonart/get-design-done/sdk/event-stream` | `appendEvent`, `getWriter`, `getBus`, `subscribe`, `subscribeAll`, `reset`, `readEvents`, `aggregate`, `EventBus`, `EventWriter`, `KNOWN_EVENT_TYPES` | beta |
23
+ | errors | `@hegemonart/get-design-done/sdk/errors` | `GDDError`, `ValidationError`, `StateConflictError`, `OperationFailedError`, `TransitionGateFailed`, `LockAcquisitionError`, `ParseError` | beta |
24
+ | primitives/error-classifier | `@hegemonart/get-design-done/sdk/primitives/error-classifier` | `classify`, `FailoverReason` | stable |
25
+ | primitives/iteration-budget | `@hegemonart/get-design-done/sdk/primitives/iteration-budget` | `consume`, `refund`, `remaining`, `reset`, `IterationBudgetExhaustedError` | stable |
26
+ | primitives/jittered-backoff | `@hegemonart/get-design-done/sdk/primitives/jittered-backoff` | `delayMs`, `sleep`, `DEFAULTS` | stable |
27
+ | primitives/lockfile | `@hegemonart/get-design-done/sdk/primitives/lockfile` | `acquire`, `renameWithRetry` | stable |
28
+ | mcp/gdd-state | `@hegemonart/get-design-done/sdk/mcp/gdd-state` | `buildServer` (server.ts) — 11 STATE.md tools over stdio | beta |
29
+
30
+ The barrel: `import { read, appendEvent, ValidationError } from '@hegemonart/get-design-done/sdk'`.
31
+
32
+ ## Notes
33
+
34
+ - **Primitives are `stable`** (D-05): they ship as `.cjs` + `.d.cts` pairs and
35
+ are the most-imported surface; the TS migration is a separate phase.
36
+ - **`state` re-exports the three error classes** (`TransitionGateFailed`,
37
+ `LockAcquisitionError`, `ParseError`) from `errors` verbatim, so importing
38
+ them from either path yields the same identity.
39
+ - The event stream persists to `.design/telemetry/events.jsonl`; `appendEvent`
40
+ is persist-first / broadcast-second and never throws on the persist path.
41
+ - `mutate()` / `transition()` take an advisory sibling lockfile; one process per
42
+ `.design/` is the design contract.
43
+
44
+ See `connections/gdd-state.md` for the MCP wiring and the runtime fallback that
45
+ imports the `state` module directly when the MCP is `not_configured`.
@@ -1,4 +1,4 @@
1
- // scripts/lib/cli/commands/audit.ts — Plan 21-09 Task 5 (SDK-21).
1
+ // sdk/cli/commands/audit.ts — Plan 21-09 Task 5 (SDK-21).
2
2
  //
3
3
  // `gdd-sdk audit` — regression + verification dry-run.
4
4
  //
@@ -25,8 +25,8 @@
25
25
  import { existsSync, readFileSync } from 'node:fs';
26
26
  import { resolve as resolvePath } from 'node:path';
27
27
 
28
- import { read } from '../../gdd-state/index.ts';
29
- import type { ConnectionStatus, ParsedState } from '../../gdd-state/types.ts';
28
+ import { read } from '../../state/index.ts';
29
+ import type { ConnectionStatus, ParsedState } from '../../state/types.ts';
30
30
 
31
31
  import {
32
32
  coerceFlags,
@@ -1,4 +1,4 @@
1
- // scripts/lib/cli/commands/init.ts — Plan 21-09 Task 6 (SDK-21).
1
+ // sdk/cli/commands/init.ts — Plan 21-09 Task 6 (SDK-21).
2
2
  //
3
3
  // `gdd-sdk init` — bootstrap a new project's `.design/` directory by
4
4
  // delegating to `init-runner.run()` (Plan 21-08).
@@ -16,8 +16,8 @@
16
16
  import {
17
17
  run as defaultInitRun,
18
18
  type InitRunnerResult,
19
- } from '../../init-runner/index.ts';
20
- import { getLogger } from '../../logger/index.ts';
19
+ } from '../../../scripts/lib/init-runner/index.ts';
20
+ import { getLogger } from '../../../scripts/lib/logger/index.ts';
21
21
 
22
22
  import {
23
23
  coerceFlags,
@@ -1,4 +1,4 @@
1
- // scripts/lib/cli/commands/query.ts — Plan 21-09 Task 4 (SDK-21).
1
+ // sdk/cli/commands/query.ts — Plan 21-09 Task 4 (SDK-21).
2
2
  //
3
3
  // `gdd-sdk query <op>` — typed STATE.md read operations. Mirrors the
4
4
  // read side of the gdd-state MCP server. Never mutates — use the
@@ -20,9 +20,9 @@
20
20
  import { existsSync, readFileSync } from 'node:fs';
21
21
  import { resolve as resolvePath } from 'node:path';
22
22
 
23
- import { read } from '../../gdd-state/index.ts';
24
- import { gateFor } from '../../gdd-state/gates.ts';
25
- import { isStage, type ParsedState, type Stage } from '../../gdd-state/types.ts';
23
+ import { read } from '../../state/index.ts';
24
+ import { gateFor } from '../../state/gates.ts';
25
+ import { isStage, type ParsedState, type Stage } from '../../state/types.ts';
26
26
 
27
27
  import {
28
28
  coerceFlags,
@@ -1,4 +1,4 @@
1
- // scripts/lib/cli/commands/run.ts — Plan 21-09 Task 2 (SDK-21),
1
+ // sdk/cli/commands/run.ts — Plan 21-09 Task 2 (SDK-21),
2
2
  // extended by Plan 21-11 Task 3 (dry-run).
3
3
  //
4
4
  // `gdd-sdk run` — drives the full design pipeline via
@@ -36,10 +36,10 @@ import {
36
36
  type RunOverrides,
37
37
  type Stage,
38
38
  type StageOutcome,
39
- } from '../../pipeline-runner/index.ts';
40
- import { getLogger } from '../../logger/index.ts';
41
- import { ValidationError } from '../../gdd-errors/index.ts';
42
- import type { SessionResult, SessionRunnerOptions } from '../../session-runner/types.ts';
39
+ } from '../../../scripts/lib/pipeline-runner/index.ts';
40
+ import { getLogger } from '../../../scripts/lib/logger/index.ts';
41
+ import { ValidationError } from '../../errors/index.ts';
42
+ import type { SessionResult, SessionRunnerOptions } from '../../../scripts/lib/session-runner/types.ts';
43
43
 
44
44
  import {
45
45
  coerceFlags,
@@ -1,4 +1,4 @@
1
- // scripts/lib/cli/commands/stage.ts — Plan 21-09 Task 3 (SDK-21).
1
+ // sdk/cli/commands/stage.ts — Plan 21-09 Task 3 (SDK-21).
2
2
  //
3
3
  // `gdd-sdk stage <name>` — run a single pipeline stage. Delegates to
4
4
  // `pipeline-runner.run()` with `stages: [<name>]` for design-pipeline
@@ -24,16 +24,16 @@ import {
24
24
  type PipelineConfig,
25
25
  type PipelineResult,
26
26
  type Stage,
27
- } from '../../pipeline-runner/index.ts';
27
+ } from '../../../scripts/lib/pipeline-runner/index.ts';
28
28
  import {
29
29
  run as defaultExploreParallelRun,
30
30
  type ExploreRunnerResult,
31
- } from '../../explore-parallel-runner/index.ts';
31
+ } from '../../../scripts/lib/explore-parallel-runner/index.ts';
32
32
  import {
33
33
  run as defaultDiscussParallelRun,
34
34
  type DiscussRunnerResult,
35
- } from '../../discuss-parallel-runner/index.ts';
36
- import { getLogger } from '../../logger/index.ts';
35
+ } from '../../../scripts/lib/discuss-parallel-runner/index.ts';
36
+ import { getLogger } from '../../../scripts/lib/logger/index.ts';
37
37
 
38
38
  import {
39
39
  coerceFlags,