@momentiq/dark-factory-cli 1.1.0 → 2.1.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.
- package/README.md +86 -2
- package/dist/adapters/critic-result-schema.d.ts +14 -14
- package/dist/adapters/index.d.ts +1 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/static-schema-lint.d.ts +68 -0
- package/dist/adapters/static-schema-lint.d.ts.map +1 -0
- package/dist/adapters/static-schema-lint.js +813 -0
- package/dist/adapters/static-schema-lint.js.map +1 -0
- package/dist/cli.d.ts +17 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +313 -41
- package/dist/cli.js.map +1 -1
- package/dist/commands/findings.d.ts +6 -0
- package/dist/commands/findings.d.ts.map +1 -0
- package/dist/commands/findings.js +196 -0
- package/dist/commands/findings.js.map +1 -0
- package/dist/commands/onboard.d.ts +6 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +111 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/skills.d.ts +6 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +248 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/cycle-doc-validator/validate_cycle_doc.py +131 -60
- package/dist/doctor.d.ts +17 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +107 -0
- package/dist/doctor.js.map +1 -1
- package/dist/evidence/docker-build.d.ts +6 -0
- package/dist/evidence/docker-build.d.ts.map +1 -0
- package/dist/evidence/docker-build.js +199 -0
- package/dist/evidence/docker-build.js.map +1 -0
- package/dist/evidence/index.d.ts +1 -0
- package/dist/evidence/index.d.ts.map +1 -1
- package/dist/evidence/index.js +6 -0
- package/dist/evidence/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +2 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/doctor.d.ts.map +1 -1
- package/dist/mcp/tools/doctor.js +5 -0
- package/dist/mcp/tools/doctor.js.map +1 -1
- package/dist/mcp/tools/review-bypass.d.ts.map +1 -1
- package/dist/mcp/tools/review-bypass.js +21 -0
- package/dist/mcp/tools/review-bypass.js.map +1 -1
- package/dist/mcp/tools/skills-install.d.ts +6 -0
- package/dist/mcp/tools/skills-install.d.ts.map +1 -0
- package/dist/mcp/tools/skills-install.js +260 -0
- package/dist/mcp/tools/skills-install.js.map +1 -0
- package/dist/mcp/tools/stats-gate.d.ts.map +1 -1
- package/dist/mcp/tools/stats-gate.js +63 -15
- package/dist/mcp/tools/stats-gate.js.map +1 -1
- package/dist/onboard/analyze.d.ts +7 -0
- package/dist/onboard/analyze.d.ts.map +1 -0
- package/dist/onboard/analyze.js +86 -0
- package/dist/onboard/analyze.js.map +1 -0
- package/dist/onboard/analyzer.d.ts +15 -0
- package/dist/onboard/analyzer.d.ts.map +1 -0
- package/dist/onboard/analyzer.js +52 -0
- package/dist/onboard/analyzer.js.map +1 -0
- package/dist/onboard/analyzers/ci.d.ts +3 -0
- package/dist/onboard/analyzers/ci.d.ts.map +1 -0
- package/dist/onboard/analyzers/ci.js +112 -0
- package/dist/onboard/analyzers/ci.js.map +1 -0
- package/dist/onboard/analyzers/docs.d.ts +3 -0
- package/dist/onboard/analyzers/docs.d.ts.map +1 -0
- package/dist/onboard/analyzers/docs.js +151 -0
- package/dist/onboard/analyzers/docs.js.map +1 -0
- package/dist/onboard/analyzers/git.d.ts +3 -0
- package/dist/onboard/analyzers/git.d.ts.map +1 -0
- package/dist/onboard/analyzers/git.js +87 -0
- package/dist/onboard/analyzers/git.js.map +1 -0
- package/dist/onboard/analyzers/lockfile.d.ts +3 -0
- package/dist/onboard/analyzers/lockfile.d.ts.map +1 -0
- package/dist/onboard/analyzers/lockfile.js +285 -0
- package/dist/onboard/analyzers/lockfile.js.map +1 -0
- package/dist/onboard/analyzers/manifest.d.ts +3 -0
- package/dist/onboard/analyzers/manifest.d.ts.map +1 -0
- package/dist/onboard/analyzers/manifest.js +228 -0
- package/dist/onboard/analyzers/manifest.js.map +1 -0
- package/dist/onboard/analyzers/tree.d.ts +3 -0
- package/dist/onboard/analyzers/tree.d.ts.map +1 -0
- package/dist/onboard/analyzers/tree.js +196 -0
- package/dist/onboard/analyzers/tree.js.map +1 -0
- package/dist/onboard/fixtures/replay-git-history.d.ts +20 -0
- package/dist/onboard/fixtures/replay-git-history.d.ts.map +1 -0
- package/dist/onboard/fixtures/replay-git-history.js +91 -0
- package/dist/onboard/fixtures/replay-git-history.js.map +1 -0
- package/dist/onboard/schema.d.ts +545 -0
- package/dist/onboard/schema.d.ts.map +1 -0
- package/dist/onboard/schema.js +142 -0
- package/dist/onboard/schema.js.map +1 -0
- package/dist/policy/gate.d.ts +1 -1
- package/dist/policy/gate.d.ts.map +1 -1
- package/dist/policy/gate.js +96 -12
- package/dist/policy/gate.js.map +1 -1
- package/dist/prompt.d.ts +1 -0
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +105 -1
- package/dist/prompt.js.map +1 -1
- package/dist/report.d.ts +106 -3
- package/dist/report.d.ts.map +1 -1
- package/dist/report.js +282 -10
- package/dist/report.js.map +1 -1
- package/dist/runner.d.ts +2 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +86 -2
- package/dist/runner.js.map +1 -1
- package/dist/self-consistency.d.ts +144 -0
- package/dist/self-consistency.d.ts.map +1 -0
- package/dist/self-consistency.js +368 -0
- package/dist/self-consistency.js.map +1 -0
- package/dist/skills/config.d.ts +176 -0
- package/dist/skills/config.d.ts.map +1 -0
- package/dist/skills/config.js +251 -0
- package/dist/skills/config.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +8 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/install.d.ts +62 -0
- package/dist/skills/install.d.ts.map +1 -0
- package/dist/skills/install.js +315 -0
- package/dist/skills/install.js.map +1 -0
- package/dist/skills/template.d.ts +42 -0
- package/dist/skills/template.d.ts.map +1 -0
- package/dist/skills/template.js +95 -0
- package/dist/skills/template.js.map +1 -0
- package/dist/trusted-surface/rebind.d.ts.map +1 -1
- package/dist/trusted-surface/rebind.js +14 -1
- package/dist/trusted-surface/rebind.js.map +1 -1
- package/package.json +36 -2
- package/skills/README.md +89 -0
- package/skills/chief-engineer-blitz/SKILL.md.tmpl +443 -0
- package/skills/chief-engineer-blitz/skill.json +53 -0
- package/skills/chief-engineer-review/SKILL.md.tmpl +184 -0
- package/skills/chief-engineer-review/references/review-examples.md.tmpl +130 -0
- package/skills/chief-engineer-review/skill.json +67 -0
- package/skills/chief-engineer-review/templates/code-review-prompt.md.tmpl +111 -0
- package/skills/chief-engineer-review/templates/escalation-prompt.md.tmpl +56 -0
- package/skills/chief-engineer-review/templates/plan-review-prompt.md.tmpl +74 -0
- package/skills/skill-schema.json +73 -0
package/README.md
CHANGED
|
@@ -99,16 +99,28 @@ df admit-pr --files docs/roadmap/cycles/cycle1.md,packages/cli/src/cli.ts
|
|
|
99
99
|
|
|
100
100
|
# Hook-facing subcommands (subscription cost model).
|
|
101
101
|
df review --commit HEAD --profile local --foreground
|
|
102
|
-
df gate-push # local pre-push, reads stdin
|
|
102
|
+
df gate-push # local pre-push, reads stdin (default: gate HEAD only)
|
|
103
|
+
df gate-push --full-range # legacy: gate every commit in the push range
|
|
103
104
|
df gate-push --commit HEAD --ci # CI replay
|
|
104
105
|
df doctor --profile local # env + per-adapter auth check
|
|
105
106
|
df gates # static gates, no LLM
|
|
106
107
|
df stats # alias for `df audit stats`
|
|
107
108
|
|
|
109
|
+
# Audit-mode inspection (NOT a gate).
|
|
110
|
+
df findings --range origin/main..HEAD # per-commit findings for the range
|
|
111
|
+
df findings --range origin/main..HEAD --json # df_findings-shaped JSON array
|
|
112
|
+
|
|
108
113
|
# Stdio Model Context Protocol server — exposes the CLI surface to any
|
|
109
114
|
# MCP-speaking agent.
|
|
110
115
|
df mcp # start the stdio MCP server
|
|
111
116
|
df mcp --help # config snippets for Claude Code, Cursor, Codex
|
|
117
|
+
|
|
118
|
+
# Bundled-skill installer (consumer-shape — implements DFP #192).
|
|
119
|
+
df skills list # list bundled skills (name, version, summary)
|
|
120
|
+
df skills install <name> # render + write .claude/skills/<name>/
|
|
121
|
+
df skills install --all # install every skill declared `enabled: true`
|
|
122
|
+
# in darkfactory.yaml
|
|
123
|
+
df skills install <name> --force # overwrite a hand-edited rendered file
|
|
112
124
|
```
|
|
113
125
|
|
|
114
126
|
> **Note on `--use-bundled-default-spec`**: the bundled `spec-default.yaml`
|
|
@@ -133,7 +145,8 @@ Codex / Claude CLI logins) are flat-rate.
|
|
|
133
145
|
| Subcommand | Hook | Cost model |
|
|
134
146
|
| --- | --- | --- |
|
|
135
147
|
| `df review` | `.husky/post-commit` (background) | **Subscription** — consumes Cursor / Codex / Claude CLI logins via the active profile's `auth` pins. No API spend by default. |
|
|
136
|
-
| `df gate-push` | `.husky/pre-push` | Free — reads pre-existing artifacts, no LLM calls. |
|
|
148
|
+
| `df gate-push` | `.husky/pre-push` | Free — reads pre-existing artifacts, no LLM calls. Default (Cycle 13 / dark-factory-platform#149): gates the HEAD commit only; intermediate commits are iteration receipts (`df findings --range` surfaces them un-gated). Opt-in legacy: `--full-range` or `DF_GATE_FULL_RANGE=1` gates every commit in the range. **Soundness caveat:** HEAD's per-SHA artifact reviews `parent..HEAD` only, NOT `base..HEAD` — use `--full-range` or the CI cold-path `agent-critic` workflow (which reviews the full PR diff) when cumulative-state evidence is required. |
|
|
149
|
+
| `df findings --range <base>..<head>` | None (operator-run) | Free. Walks every commit's per-SHA artifact in the range for audit-mode inspection. NOT a gate; does not re-run critics. The companion-surface to the final-commit-only `df gate-push` default. |
|
|
137
150
|
| `df doctor` | None (operator-run) | Free. Validates that per-adapter auth source is reachable. |
|
|
138
151
|
| `df gates` | None (operator-run) | Free. Runs static quality gates per `validation.requiredQualityGates`. |
|
|
139
152
|
| `df stats` | None (operator-run) | Free. Reads `.git/agent-reviews/_runs.ndjson`. |
|
|
@@ -273,6 +286,77 @@ The bundled Python scripts resolve the consumer repo root in this order:
|
|
|
273
286
|
The TypeScript wrappers set `DF_REPO_ROOT` automatically when a `repoRoot`
|
|
274
287
|
option is supplied — pass it when invoking outside a git worktree.
|
|
275
288
|
|
|
289
|
+
## Bundled skills (`df skills install` — DFP #192)
|
|
290
|
+
|
|
291
|
+
The CLI ships a small set of **consumer-shape templated skills** that any
|
|
292
|
+
repo adopting Dark Factory can install with one command — no fork, no
|
|
293
|
+
hand-edit. The skill body templates live in this repo under `skills/<name>/`;
|
|
294
|
+
the renderer substitutes `{{REPO_NAME}}`, `{{ADR_DIR}}`,
|
|
295
|
+
`{{CYCLE_DOCS_DIR}}`, `{{QUALITY_GATE_TARGETS}}`, etc. against the
|
|
296
|
+
consumer's `darkfactory.yaml` at install time.
|
|
297
|
+
|
|
298
|
+
**Bundled today:**
|
|
299
|
+
|
|
300
|
+
- **`chief-engineer-review`** — AI-native architectural review (autonomous
|
|
301
|
+
+ conversational modes). Originated in `momentiq-ai/sage3c`.
|
|
302
|
+
- **`chief-engineer-blitz`** — orchestrated multi-PR delivery doctrine (six
|
|
303
|
+
phases: Plan → Spec → Implement → Triage → Validate → Closure).
|
|
304
|
+
Originated in `momentiq-ai/dark-factory-platform`.
|
|
305
|
+
|
|
306
|
+
**Consumer setup (one-time per repo):**
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
# 1. Author darkfactory.yaml at repo root (see the schema below).
|
|
310
|
+
# 2. Install:
|
|
311
|
+
df skills install --all # installs every skill marked enabled
|
|
312
|
+
# … or one at a time:
|
|
313
|
+
df skills install chief-engineer-review
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
**`darkfactory.yaml` schema** (every key optional — install falls back to
|
|
317
|
+
sensible defaults):
|
|
318
|
+
|
|
319
|
+
```yaml
|
|
320
|
+
repo:
|
|
321
|
+
displayName: "My Repo"
|
|
322
|
+
slug: "my-repo"
|
|
323
|
+
ownerRepo: "my-org/my-repo"
|
|
324
|
+
docs:
|
|
325
|
+
manifesto: docs/PRINCIPLES.md
|
|
326
|
+
adrDir: docs/ADR
|
|
327
|
+
cycleDocsDir: docs/roadmap/cycles
|
|
328
|
+
rfcDir: docs/rfcs
|
|
329
|
+
prdDir: docs/prds
|
|
330
|
+
agents:
|
|
331
|
+
chiefEngineer: .claude/agents/chief-engineer.md
|
|
332
|
+
qualityGates:
|
|
333
|
+
- make quality-gates
|
|
334
|
+
- make test
|
|
335
|
+
worktreeRoot: .claude/worktrees
|
|
336
|
+
agentCommitterOrg: my-org # for the claude-code+<handle>@<org>.ai committer
|
|
337
|
+
skills:
|
|
338
|
+
chief-engineer-review:
|
|
339
|
+
enabled: true
|
|
340
|
+
chief-engineer-blitz:
|
|
341
|
+
enabled: true
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
**Re-install semantics:**
|
|
345
|
+
|
|
346
|
+
- A re-install with identical inputs is a no-op (the rendered file carries
|
|
347
|
+
an `install-hash` in its `GENERATED` header; matching hash → unchanged).
|
|
348
|
+
- A re-install with different inputs (config changed, template upstream
|
|
349
|
+
changed) overwrites the rendered file.
|
|
350
|
+
- A re-install where the rendered file has been hand-edited (no `GENERATED`
|
|
351
|
+
header detected) is **skipped** — pass `--force` to overwrite.
|
|
352
|
+
|
|
353
|
+
**MCP tool parity:** the `df mcp` server exposes `df_skills_install` +
|
|
354
|
+
`df_skills_list` with the same semantics, so MCP-speaking agents (Claude
|
|
355
|
+
Code, Cursor) can install skills programmatically without shelling out.
|
|
356
|
+
|
|
357
|
+
**Adding a new bundled skill:** see `skills/README.md` for the manifest +
|
|
358
|
+
template authoring rules.
|
|
359
|
+
|
|
276
360
|
## License
|
|
277
361
|
|
|
278
362
|
Apache-2.0. The OSS critic surface is a public artifact. The hosted Dark
|
|
@@ -52,33 +52,33 @@ export declare const CriticResultZodSchema: z.ZodObject<{
|
|
|
52
52
|
justification: z.ZodOptional<z.ZodString>;
|
|
53
53
|
requiresHumanJudgment: z.ZodOptional<z.ZodBoolean>;
|
|
54
54
|
}, "strip", z.ZodTypeAny, {
|
|
55
|
-
evidence: string;
|
|
56
55
|
severity: string;
|
|
57
56
|
category: string;
|
|
57
|
+
evidence: string;
|
|
58
58
|
impact: string;
|
|
59
59
|
requiredFix: string;
|
|
60
60
|
symbol?: string | undefined;
|
|
61
|
-
routeId?: string | undefined;
|
|
62
|
-
requiresHumanJudgment?: boolean | undefined;
|
|
63
61
|
file?: string | undefined;
|
|
64
62
|
line?: number | undefined;
|
|
65
63
|
manifestoSection?: string | undefined;
|
|
66
64
|
evidencePath?: string | undefined;
|
|
65
|
+
routeId?: string | undefined;
|
|
67
66
|
justification?: string | undefined;
|
|
67
|
+
requiresHumanJudgment?: boolean | undefined;
|
|
68
68
|
}, {
|
|
69
|
-
evidence: string;
|
|
70
69
|
severity: string;
|
|
71
70
|
category: string;
|
|
71
|
+
evidence: string;
|
|
72
72
|
impact: string;
|
|
73
73
|
requiredFix: string;
|
|
74
74
|
symbol?: string | undefined;
|
|
75
|
-
routeId?: string | undefined;
|
|
76
|
-
requiresHumanJudgment?: boolean | undefined;
|
|
77
75
|
file?: string | undefined;
|
|
78
76
|
line?: number | undefined;
|
|
79
77
|
manifestoSection?: string | undefined;
|
|
80
78
|
evidencePath?: string | undefined;
|
|
79
|
+
routeId?: string | undefined;
|
|
81
80
|
justification?: string | undefined;
|
|
81
|
+
requiresHumanJudgment?: boolean | undefined;
|
|
82
82
|
}>, "many">;
|
|
83
83
|
validation: z.ZodObject<{
|
|
84
84
|
qualityGateResults: z.ZodArray<z.ZodObject<{
|
|
@@ -132,6 +132,7 @@ export declare const CriticResultZodSchema: z.ZodObject<{
|
|
|
132
132
|
}>;
|
|
133
133
|
confidence: z.ZodEnum<[string, ...string[]]>;
|
|
134
134
|
}, "strip", z.ZodTypeAny, {
|
|
135
|
+
requiresHumanJudgment: boolean;
|
|
135
136
|
status: string;
|
|
136
137
|
validation: {
|
|
137
138
|
qualityGateResults: {
|
|
@@ -145,26 +146,26 @@ export declare const CriticResultZodSchema: z.ZodObject<{
|
|
|
145
146
|
}[];
|
|
146
147
|
qualityGatesMissing: string[];
|
|
147
148
|
};
|
|
148
|
-
requiresHumanJudgment: boolean;
|
|
149
149
|
summary: string;
|
|
150
150
|
confidence: string;
|
|
151
151
|
verdict: string;
|
|
152
152
|
findings: {
|
|
153
|
-
evidence: string;
|
|
154
153
|
severity: string;
|
|
155
154
|
category: string;
|
|
155
|
+
evidence: string;
|
|
156
156
|
impact: string;
|
|
157
157
|
requiredFix: string;
|
|
158
158
|
symbol?: string | undefined;
|
|
159
|
-
routeId?: string | undefined;
|
|
160
|
-
requiresHumanJudgment?: boolean | undefined;
|
|
161
159
|
file?: string | undefined;
|
|
162
160
|
line?: number | undefined;
|
|
163
161
|
manifestoSection?: string | undefined;
|
|
164
162
|
evidencePath?: string | undefined;
|
|
163
|
+
routeId?: string | undefined;
|
|
165
164
|
justification?: string | undefined;
|
|
165
|
+
requiresHumanJudgment?: boolean | undefined;
|
|
166
166
|
}[];
|
|
167
167
|
}, {
|
|
168
|
+
requiresHumanJudgment: boolean;
|
|
168
169
|
status: string;
|
|
169
170
|
validation: {
|
|
170
171
|
qualityGateResults: {
|
|
@@ -178,24 +179,23 @@ export declare const CriticResultZodSchema: z.ZodObject<{
|
|
|
178
179
|
}[];
|
|
179
180
|
qualityGatesMissing: string[];
|
|
180
181
|
};
|
|
181
|
-
requiresHumanJudgment: boolean;
|
|
182
182
|
summary: string;
|
|
183
183
|
confidence: string;
|
|
184
184
|
verdict: string;
|
|
185
185
|
findings: {
|
|
186
|
-
evidence: string;
|
|
187
186
|
severity: string;
|
|
188
187
|
category: string;
|
|
188
|
+
evidence: string;
|
|
189
189
|
impact: string;
|
|
190
190
|
requiredFix: string;
|
|
191
191
|
symbol?: string | undefined;
|
|
192
|
-
routeId?: string | undefined;
|
|
193
|
-
requiresHumanJudgment?: boolean | undefined;
|
|
194
192
|
file?: string | undefined;
|
|
195
193
|
line?: number | undefined;
|
|
196
194
|
manifestoSection?: string | undefined;
|
|
197
195
|
evidencePath?: string | undefined;
|
|
196
|
+
routeId?: string | undefined;
|
|
198
197
|
justification?: string | undefined;
|
|
198
|
+
requiresHumanJudgment?: boolean | undefined;
|
|
199
199
|
}[];
|
|
200
200
|
}>;
|
|
201
201
|
export type CriticResultModelEnvelope = z.infer<typeof CriticResultZodSchema>;
|
package/dist/adapters/index.d.ts
CHANGED
|
@@ -3,5 +3,6 @@ export { GeminiSdkAdapter, GEMINI_SDK_ADAPTER_ID, GEMINI_API_KEY_ENV, DEFAULT_TH
|
|
|
3
3
|
export { GrokDirectSdkAdapter, GROK_DIRECT_SDK_ADAPTER_ID, XAI_API_KEY_ENV, XAI_BASE_URL, GROK_PERMANENT_STATUS, DEFAULT_REASONING_EFFORT as GROK_DEFAULT_REASONING_EFFORT, resolveReasoningEffort, extractXaiApiErrorStatus, isGrokPermanentFailure, type GrokClient, type GrokResponsesCreateParams, type GrokStreamEvent, type GrokUsage, type GrokDirectSdkAdapterOptions, type GrokReasoningEffort, } from "./grok-direct-sdk.js";
|
|
4
4
|
export { CodexSdkAdapter, CODEX_SDK_ADAPTER_ID, CODEX_API_KEY_ENV, CODEX_HOME_ENV, CODEX_AUTH_CHATGPT, CODEX_AUTH_API, CODEX_AUTH_MODES, DEFAULT_REASONING_EFFORT as CODEX_DEFAULT_REASONING_EFFORT, targetTripleForCurrentPlatform, resolveBundledCodexCliPath, probeCodexLoginStatus, resolveCodexReasoningEffort, extractCodexErrorCode, resolveAuthOrFail, type CodexAuthMode, type CodexAuthProbeOutcome, type CodexExecHook, type CodexClient, type CodexThread, type CodexUsage, type CodexTurnResult, type CodexThreadOptions, type CodexThreadEvent, type CodexSdkAdapterOptions, } from "./codex-sdk.js";
|
|
5
5
|
export { CursorCliAdapter, CURSOR_CLI_ADAPTER_ID, CURSOR_CLI_BINARY, CURSOR_API_KEY_ENV as CURSOR_CLI_API_KEY_ENV_STRIPPED, CURSOR_CLI_AUTH_CHATGPT, CURSOR_CLI_AUTH_MODES, CURSOR_CLI_PERMANENT_SUBTYPES, buildCursorCliArgs, buildSubscriptionEnv, defaultCursorCliRunner, extractAssistantText as cursorCliExtractAssistantText, extractInitEvent, extractResultEnvelope, isPermanentResultSubtype, resolveAuthOrFail as cursorCliResolveAuthOrFail, resolveCursorCliModelId, type CursorCliAdapterOptions, type CursorCliAuthMode, type CursorCliInitEvent, type CursorCliResultEnvelope, type CursorCliRunArgs, type CursorCliRunOutcome, type CursorCliRunner, } from "./cursor-cli.js";
|
|
6
|
+
export { StaticSchemaLintAdapter, STATIC_SCHEMA_LINT_ADAPTER_ID, STATIC_SCHEMAS, extractSchemaBlocks, stripJsoncSyntax, type StaticSchemaLintAdapterOptions, type ExtractedBlock, } from "./static-schema-lint.js";
|
|
6
7
|
export { AdapterRegistry, collectRequiredEnvVars, type CriticAdapter, type CriticReviewOptions, } from "./critic.js";
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,IAAI,6BAA6B,EACzD,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,IAAI,8BAA8B,EAC1D,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,IAAI,+BAA+B,EACrD,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,IAAI,6BAA6B,EACrD,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,IAAI,0BAA0B,EAC/C,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,IAAI,6BAA6B,EACzD,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,UAAU,EACf,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,IAAI,8BAA8B,EAC1D,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AAOxB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,IAAI,+BAA+B,EACrD,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,IAAI,6BAA6B,EACrD,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,IAAI,0BAA0B,EAC/C,uBAAuB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,8BAA8B,EACnC,KAAK,cAAc,GACpB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,KAAK,aAAa,EAClB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC"}
|
package/dist/adapters/index.js
CHANGED
|
@@ -19,5 +19,12 @@ export { CodexSdkAdapter, CODEX_SDK_ADAPTER_ID, CODEX_API_KEY_ENV, CODEX_HOME_EN
|
|
|
19
19
|
// cursor-sdk: cloud/CI profiles continue to use cursor-sdk with the
|
|
20
20
|
// Doppler-provisioned key; local profiles use cursor-cli with no key.
|
|
21
21
|
export { CursorCliAdapter, CURSOR_CLI_ADAPTER_ID, CURSOR_CLI_BINARY, CURSOR_API_KEY_ENV as CURSOR_CLI_API_KEY_ENV_STRIPPED, CURSOR_CLI_AUTH_CHATGPT, CURSOR_CLI_AUTH_MODES, CURSOR_CLI_PERMANENT_SUBTYPES, buildCursorCliArgs, buildSubscriptionEnv, defaultCursorCliRunner, extractAssistantText as cursorCliExtractAssistantText, extractInitEvent, extractResultEnvelope, isPermanentResultSubtype, resolveAuthOrFail as cursorCliResolveAuthOrFail, resolveCursorCliModelId, } from "./cursor-cli.js";
|
|
22
|
+
// Consumer dark-factory-platform#107 — deterministic schema-lint adapter.
|
|
23
|
+
// Validates JSON-Schema-tagged code blocks in markdown / config-file
|
|
24
|
+
// examples (e.g. CLAUDE.md `~/.claude/settings.json` examples). No LLM,
|
|
25
|
+
// no network, no auth; runs in <100ms. Closes the local-quorum
|
|
26
|
+
// coverage gap where the LLM critics passed a schema-invalid example
|
|
27
|
+
// that the cloud-cursor adapter (different prompt envelope) caught.
|
|
28
|
+
export { StaticSchemaLintAdapter, STATIC_SCHEMA_LINT_ADAPTER_ID, STATIC_SCHEMAS, extractSchemaBlocks, stripJsoncSyntax, } from "./static-schema-lint.js";
|
|
22
29
|
export { AdapterRegistry, collectRequiredEnvVars, } from "./critic.js";
|
|
23
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,EAAE;AACF,kEAAkE;AAClE,2DAA2D;AAC3D,EAAE;AACF,kEAAkE;AAClE,4CAA4C;AAC5C,kGAAkG;AAClG,EAAE;AACF,wEAAwE;AACxE,0DAA0D;AAE1D,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,aAAa,GAGd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,GAIzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,IAAI,6BAA6B,EACzD,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GAOvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,IAAI,8BAA8B,EAC1D,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,iBAAiB,GAWlB,MAAM,gBAAgB,CAAC;AAExB,wEAAwE;AACxE,wEAAwE;AACxE,gEAAgE;AAChE,oEAAoE;AACpE,sEAAsE;AACtE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,IAAI,+BAA+B,EACrD,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,IAAI,6BAA6B,EACrD,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,IAAI,0BAA0B,EAC/C,uBAAuB,GAQxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,eAAe,EACf,sBAAsB,GAGvB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,EAAE;AACF,kEAAkE;AAClE,2DAA2D;AAC3D,EAAE;AACF,kEAAkE;AAClE,4CAA4C;AAC5C,kGAAkG;AAClG,EAAE;AACF,wEAAwE;AACxE,0DAA0D;AAE1D,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,aAAa,GAGd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,GAIzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,wBAAwB,IAAI,6BAA6B,EACzD,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GAOvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,IAAI,8BAA8B,EAC1D,8BAA8B,EAC9B,0BAA0B,EAC1B,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,iBAAiB,GAWlB,MAAM,gBAAgB,CAAC;AAExB,wEAAwE;AACxE,wEAAwE;AACxE,gEAAgE;AAChE,oEAAoE;AACpE,sEAAsE;AACtE,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,IAAI,+BAA+B,EACrD,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,IAAI,6BAA6B,EACrD,gBAAgB,EAChB,qBAAqB,EACrB,wBAAwB,EACxB,iBAAiB,IAAI,0BAA0B,EAC/C,uBAAuB,GAQxB,MAAM,iBAAiB,CAAC;AAEzB,0EAA0E;AAC1E,qEAAqE;AACrE,wEAAwE;AACxE,+DAA+D;AAC/D,qEAAqE;AACrE,oEAAoE;AACpE,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,cAAc,EACd,mBAAmB,EACnB,gBAAgB,GAGjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,eAAe,EACf,sBAAsB,GAGvB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type CriticConfig, type CriticResult, type DoctorCheck, type ReviewPacket } from "@momentiq/dark-factory-schemas";
|
|
2
|
+
import type { CriticAdapter, CriticReviewOptions } from "./critic.js";
|
|
3
|
+
export declare const STATIC_SCHEMA_LINT_ADAPTER_ID = "static-schema-lint";
|
|
4
|
+
/**
|
|
5
|
+
* The built-in schema registry. Maps a schema name (the value of the
|
|
6
|
+
* `// schema: <name>` annotation) to the JSON Schema definition the
|
|
7
|
+
* adapter validates against.
|
|
8
|
+
*/
|
|
9
|
+
export declare const STATIC_SCHEMAS: Readonly<Record<string, Record<string, unknown>>>;
|
|
10
|
+
export interface ExtractedBlock {
|
|
11
|
+
/** Schema name from the annotation. */
|
|
12
|
+
schemaName: string;
|
|
13
|
+
/** Code-block body with the schema-marker line stripped (parseable as JSON). */
|
|
14
|
+
body: string;
|
|
15
|
+
/** Fence language tag (e.g. "jsonc", "json", "yaml", or "" if absent). */
|
|
16
|
+
language: string;
|
|
17
|
+
/** 1-based line in the source markdown where the fence body starts. */
|
|
18
|
+
startLine: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Strip JSONC / JSON5-style comments AND trailing commas from a JSON-ish
|
|
22
|
+
* payload so `JSON.parse` succeeds on JSONC examples. Single-pass state
|
|
23
|
+
* machine — comment stripping AND trailing-comma removal both honor
|
|
24
|
+
* string-literal boundaries, so a comma-brace sequence inside a string
|
|
25
|
+
* value (`",}"`) is preserved verbatim. Designed for the limited surface
|
|
26
|
+
* of config-file examples in docs, not as a general JSON5 parser.
|
|
27
|
+
*
|
|
28
|
+
* Exported for unit-testability.
|
|
29
|
+
*/
|
|
30
|
+
export declare function stripJsoncSyntax(text: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Extract schema-annotated code blocks from a markdown source. Returns
|
|
33
|
+
* an empty array when the source contains no annotated blocks.
|
|
34
|
+
*
|
|
35
|
+
* The schema annotation may be embedded INSIDE the code block — three
|
|
36
|
+
* forms: JSONC line comment, YAML / shell line comment, or block
|
|
37
|
+
* comment — or as an HTML comment IMMEDIATELY before the fence (the
|
|
38
|
+
* only form compatible with strict JSON blocks, since JSON forbids
|
|
39
|
+
* inline comments).
|
|
40
|
+
*/
|
|
41
|
+
export declare function extractSchemaBlocks(source: string): ExtractedBlock[];
|
|
42
|
+
export declare function reconstructAddedContentFromDiff(diff: string): Map<string, string>;
|
|
43
|
+
/**
|
|
44
|
+
* Options for constructing the adapter. The `schemas` override lets
|
|
45
|
+
* callers add additional schemas without modifying the built-in registry
|
|
46
|
+
* (useful for tests and for consumer repos that want to lint their own
|
|
47
|
+
* config shapes). Supplied schemas merge with `STATIC_SCHEMAS`; a
|
|
48
|
+
* caller-supplied schema with the same name as a built-in overrides it.
|
|
49
|
+
*/
|
|
50
|
+
export interface StaticSchemaLintAdapterOptions {
|
|
51
|
+
schemas?: Readonly<Record<string, Record<string, unknown>>>;
|
|
52
|
+
/**
|
|
53
|
+
* File globs (basenames + extensions) the adapter will scan. The
|
|
54
|
+
* default covers the high-churn doc surfaces. Anything not matching
|
|
55
|
+
* is skipped without inspection.
|
|
56
|
+
*/
|
|
57
|
+
scannedFilePatterns?: readonly RegExp[];
|
|
58
|
+
}
|
|
59
|
+
export declare class StaticSchemaLintAdapter implements CriticAdapter {
|
|
60
|
+
readonly id = "static-schema-lint";
|
|
61
|
+
readonly requiredEnvVars: readonly string[];
|
|
62
|
+
private readonly registry;
|
|
63
|
+
private readonly scannedFilePatterns;
|
|
64
|
+
constructor(options?: StaticSchemaLintAdapterOptions);
|
|
65
|
+
review(packet: ReviewPacket, critic: CriticConfig, options: CriticReviewOptions): Promise<CriticResult>;
|
|
66
|
+
doctor(_critic: CriticConfig): Promise<DoctorCheck[]>;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=static-schema-lint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-schema-lint.d.ts","sourceRoot":"","sources":["../../src/adapters/static-schema-lint.ts"],"names":[],"mappings":"AAmEA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,WAAW,EAEhB,KAAK,YAAY,EAClB,MAAM,gCAAgC,CAAC;AAyBxC,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,eAAO,MAAM,6BAA6B,uBAAuB,CAAC;AAoHlE;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAG3E,CAAC;AAiDH,MAAM,WAAW,cAAc;IAC7B,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkFrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CA0DpE;AAmED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA4EjF;AA4ED;;;;;;GAMG;AACH,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5D;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAUD,qBAAa,uBAAwB,YAAW,aAAa;IAC3D,QAAQ,CAAC,EAAE,wBAAiC;IAC5C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAM;IAEjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAoB;gBAE5C,OAAO,GAAE,8BAAmC;IAMlD,MAAM,CACV,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC;IAwKlB,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CA2C5D"}
|