@momentiq/dark-factory-cli 2.17.0 → 3.0.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 (136) hide show
  1. package/dist/adapters/codex-sdk.d.ts +30 -5
  2. package/dist/adapters/codex-sdk.d.ts.map +1 -1
  3. package/dist/adapters/codex-sdk.js +50 -15
  4. package/dist/adapters/codex-sdk.js.map +1 -1
  5. package/dist/adapters/cursor-sdk.d.ts.map +1 -1
  6. package/dist/adapters/cursor-sdk.js +14 -2
  7. package/dist/adapters/cursor-sdk.js.map +1 -1
  8. package/dist/adapters/index.d.ts +1 -0
  9. package/dist/adapters/index.d.ts.map +1 -1
  10. package/dist/adapters/index.js +6 -0
  11. package/dist/adapters/index.js.map +1 -1
  12. package/dist/adapters/mode-scope.d.ts +86 -0
  13. package/dist/adapters/mode-scope.d.ts.map +1 -0
  14. package/dist/adapters/mode-scope.js +456 -0
  15. package/dist/adapters/mode-scope.js.map +1 -0
  16. package/dist/branch-protection/audit_branch_protection.py +80 -2
  17. package/dist/cli.d.ts +5 -0
  18. package/dist/cli.d.ts.map +1 -1
  19. package/dist/cli.js +31 -1
  20. package/dist/cli.js.map +1 -1
  21. package/dist/commands/mode.d.ts +2 -0
  22. package/dist/commands/mode.d.ts.map +1 -0
  23. package/dist/commands/mode.js +235 -0
  24. package/dist/commands/mode.js.map +1 -0
  25. package/dist/commands/objectives.d.ts +27 -3
  26. package/dist/commands/objectives.d.ts.map +1 -1
  27. package/dist/commands/objectives.js +347 -53
  28. package/dist/commands/objectives.js.map +1 -1
  29. package/dist/commands/onboard.d.ts.map +1 -1
  30. package/dist/commands/onboard.js +3 -1
  31. package/dist/commands/onboard.js.map +1 -1
  32. package/dist/cycle-doc-validator/validate_cycle_doc.py +128 -11
  33. package/dist/doctor.d.ts.map +1 -1
  34. package/dist/doctor.js +15 -7
  35. package/dist/doctor.js.map +1 -1
  36. package/dist/evidence/index.d.ts +1 -0
  37. package/dist/evidence/index.d.ts.map +1 -1
  38. package/dist/evidence/index.js +5 -0
  39. package/dist/evidence/index.js.map +1 -1
  40. package/dist/evidence/ui-visual/embed.d.ts +65 -0
  41. package/dist/evidence/ui-visual/embed.d.ts.map +1 -0
  42. package/dist/evidence/ui-visual/embed.js +176 -0
  43. package/dist/evidence/ui-visual/embed.js.map +1 -0
  44. package/dist/evidence/ui-visual/index.d.ts +2 -0
  45. package/dist/evidence/ui-visual/index.d.ts.map +1 -0
  46. package/dist/evidence/ui-visual/index.js +6 -0
  47. package/dist/evidence/ui-visual/index.js.map +1 -0
  48. package/dist/index.d.ts +1 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +1 -1
  51. package/dist/index.js.map +1 -1
  52. package/dist/mcp/cycle-doc/parser.d.ts +3 -3
  53. package/dist/mcp/cycle-doc/parser.d.ts.map +1 -1
  54. package/dist/mcp/cycle-doc/parser.js +2 -2
  55. package/dist/mcp/cycle-doc/parser.js.map +1 -1
  56. package/dist/mcp/tools/doctor.d.ts +5 -0
  57. package/dist/mcp/tools/doctor.d.ts.map +1 -1
  58. package/dist/mcp/tools/doctor.js +10 -1
  59. package/dist/mcp/tools/doctor.js.map +1 -1
  60. package/dist/mcp/tools/review-bypass.d.ts +5 -0
  61. package/dist/mcp/tools/review-bypass.d.ts.map +1 -1
  62. package/dist/mcp/tools/review-bypass.js +9 -1
  63. package/dist/mcp/tools/review-bypass.js.map +1 -1
  64. package/dist/mode/apply.d.ts +8 -0
  65. package/dist/mode/apply.d.ts.map +1 -0
  66. package/dist/mode/apply.js +118 -0
  67. package/dist/mode/apply.js.map +1 -0
  68. package/dist/mode/context.d.ts +50 -0
  69. package/dist/mode/context.d.ts.map +1 -0
  70. package/dist/mode/context.js +127 -0
  71. package/dist/mode/context.js.map +1 -0
  72. package/dist/mode/critic-registration.d.ts +66 -0
  73. package/dist/mode/critic-registration.d.ts.map +1 -0
  74. package/dist/mode/critic-registration.js +279 -0
  75. package/dist/mode/critic-registration.js.map +1 -0
  76. package/dist/mode/guard.d.ts +15 -0
  77. package/dist/mode/guard.d.ts.map +1 -0
  78. package/dist/mode/guard.js +160 -0
  79. package/dist/mode/guard.js.map +1 -0
  80. package/dist/mode/init.d.ts +17 -0
  81. package/dist/mode/init.d.ts.map +1 -0
  82. package/dist/mode/init.js +147 -0
  83. package/dist/mode/init.js.map +1 -0
  84. package/dist/mode/loadConfig.d.ts +34 -0
  85. package/dist/mode/loadConfig.d.ts.map +1 -0
  86. package/dist/mode/loadConfig.js +38 -0
  87. package/dist/mode/loadConfig.js.map +1 -0
  88. package/dist/mode/prompts/designer-baseline.md +47 -0
  89. package/dist/mode/resolve.d.ts +24 -0
  90. package/dist/mode/resolve.d.ts.map +1 -0
  91. package/dist/mode/resolve.js +65 -0
  92. package/dist/mode/resolve.js.map +1 -0
  93. package/dist/mode/scope-policy.d.ts +41 -0
  94. package/dist/mode/scope-policy.d.ts.map +1 -0
  95. package/dist/mode/scope-policy.js +97 -0
  96. package/dist/mode/scope-policy.js.map +1 -0
  97. package/dist/mode/status.d.ts +14 -0
  98. package/dist/mode/status.d.ts.map +1 -0
  99. package/dist/mode/status.js +13 -0
  100. package/dist/mode/status.js.map +1 -0
  101. package/dist/onboard/seeders/design-md.d.ts +3 -0
  102. package/dist/onboard/seeders/design-md.d.ts.map +1 -0
  103. package/dist/onboard/seeders/design-md.js +138 -0
  104. package/dist/onboard/seeders/design-md.js.map +1 -0
  105. package/dist/onboard/seeders/index.d.ts +8 -0
  106. package/dist/onboard/seeders/index.d.ts.map +1 -1
  107. package/dist/onboard/seeders/index.js +3 -0
  108. package/dist/onboard/seeders/index.js.map +1 -1
  109. package/dist/onboard/validate.d.ts +36 -1
  110. package/dist/onboard/validate.d.ts.map +1 -1
  111. package/dist/onboard/validate.js +136 -42
  112. package/dist/onboard/validate.js.map +1 -1
  113. package/dist/skills/config.d.ts +2 -110
  114. package/dist/skills/config.d.ts.map +1 -1
  115. package/dist/skills/config.js +20 -58
  116. package/dist/skills/config.js.map +1 -1
  117. package/dist/skills/index.d.ts +1 -1
  118. package/dist/skills/index.d.ts.map +1 -1
  119. package/dist/skills/index.js +1 -1
  120. package/dist/skills/index.js.map +1 -1
  121. package/dist/skills/install.d.ts.map +1 -1
  122. package/dist/skills/install.js +7 -0
  123. package/dist/skills/install.js.map +1 -1
  124. package/package.json +3 -3
  125. package/skills/designer-brief/SKILL.md.tmpl +74 -0
  126. package/skills/designer-brief/skill.json +17 -0
  127. package/skills/designer-build/SKILL.md.tmpl +63 -0
  128. package/skills/designer-build/skill.json +17 -0
  129. package/skills/designer-handoff/SKILL.md.tmpl +64 -0
  130. package/skills/designer-handoff/skill.json +17 -0
  131. package/skills/designer-ship/SKILL.md.tmpl +77 -0
  132. package/skills/designer-ship/skill.json +17 -0
  133. package/skills/objectives/SKILL.md.tmpl +34 -6
  134. package/skills/verify/producer/ui-visual-surfaces.ts +261 -0
  135. package/skills/verify/producer/ui-visual.config.ts +22 -0
  136. package/skills/verify/producer/ui-visual.producer.spec.ts +137 -0
@@ -0,0 +1,235 @@
1
+ // Cycle 27 Phase A — `df mode` CLI wrapper.
2
+ //
3
+ // Subcommands:
4
+ // df mode init [name] Seed a `modes.<name>` catalog entry into
5
+ // darkfactory.yaml (default name: designer).
6
+ // Appends — never rewrites the consumer's file.
7
+ // df mode status [--json] Report the active operator mode, resolved from
8
+ // `--mode <name>` / `DF_MODE`. No mode active is
9
+ // the normal engineer path (exit 0).
10
+ //
11
+ // The logic lives in src/mode/ (init.ts / status.ts / resolve.ts); this is
12
+ // the thin argv shim, mirroring commands/skills.ts.
13
+ import { readFileSync } from "node:fs";
14
+ import { initMode } from "../mode/init.js";
15
+ import { applyModeScopeCriticRegistration } from "../mode/critic-registration.js";
16
+ import { modeStatus } from "../mode/status.js";
17
+ import { applyMode } from "../mode/apply.js";
18
+ import { decideGuard } from "../mode/guard.js";
19
+ import { buildModeContext, safeDesignMdPath } from "../mode/context.js";
20
+ async function readStdin() {
21
+ const chunks = [];
22
+ for await (const chunk of process.stdin) {
23
+ chunks.push(Buffer.from(chunk));
24
+ }
25
+ return Buffer.concat(chunks).toString("utf8");
26
+ }
27
+ function parseModeFlags(rest) {
28
+ const flags = {};
29
+ const positional = [];
30
+ for (let i = 0; i < rest.length; i++) {
31
+ const a = rest[i] ?? "";
32
+ if (a.startsWith("--")) {
33
+ const eq = a.indexOf("=");
34
+ if (eq >= 0) {
35
+ flags[a.slice(2, eq)] = a.slice(eq + 1);
36
+ }
37
+ else {
38
+ const next = rest[i + 1];
39
+ if (next !== undefined && !next.startsWith("--")) {
40
+ flags[a.slice(2)] = next;
41
+ i++;
42
+ }
43
+ else {
44
+ flags[a.slice(2)] = true;
45
+ }
46
+ }
47
+ }
48
+ else {
49
+ positional.push(a);
50
+ }
51
+ }
52
+ return { flags, positional };
53
+ }
54
+ const USAGE = [
55
+ "usage:",
56
+ " df mode init [name] Seed a modes.<name> catalog entry into darkfactory.yaml",
57
+ " (default: designer). Appends; never rewrites your file.",
58
+ " df mode status [--json] Report the active operator mode (--mode <name> / DF_MODE).",
59
+ " df mode apply [name] Write the per-user Claude Code overlay into",
60
+ " .claude/settings.local.json (env, hooks, deny belt, MCP).",
61
+ " df mode guard --hook PreToolUse hook binding: reads the hook JSON on stdin,",
62
+ " emits an allow/deny decision per the mode catalog.",
63
+ " df mode context --hook SessionStart hook binding: emits the mode persona +",
64
+ " catalog summary + DESIGN.md as additional context.",
65
+ "",
66
+ "The mode axis is an OPERATOR axis (who is driving the session). It is",
67
+ "independent of the critic-fleet --profile / AGENT_REVIEW_PROFILE axis.",
68
+ ].join("\n");
69
+ export async function cmdMode(rest) {
70
+ const { flags, positional } = parseModeFlags(rest);
71
+ const wantsHelp = flags["help"] === true || rest.includes("-h");
72
+ const sub = positional.filter((p) => p !== "-h")[0];
73
+ if (sub === undefined || wantsHelp) {
74
+ process.stdout.write(`${USAGE}\n`);
75
+ return sub === undefined && !wantsHelp ? 1 : 0;
76
+ }
77
+ if (sub === "init") {
78
+ const modeName = positional[1] ?? "designer";
79
+ try {
80
+ const result = initMode(process.cwd(), modeName);
81
+ const lines = [];
82
+ if (result.status === "exists") {
83
+ lines.push(`df mode: "${modeName}" already in the catalog at ${result.configPath} — catalog unchanged.`);
84
+ }
85
+ else {
86
+ lines.push(`df mode: seeded modes.${modeName} into ${result.configPath}.`, `df mode: proposed writeScopes (review in the init PR — protectedPaths wins on overlap):`, ...result.writeScopes.map((s) => ` - ${s}`));
87
+ }
88
+ // Register the deterministic ModeScope scope critic so out-of-scope
89
+ // diffs are blocked in local `df review`/`df gate-push` AND CI
90
+ // `agent-critic` (inside the existing required check — no consumer
91
+ // ruleset/workflow changes). Runs on every init (idempotent) so a
92
+ // repo whose catalog predates the critic still gets it wired.
93
+ const reg = applyModeScopeCriticRegistration(process.cwd());
94
+ // A registration `error` (malformed / failed-validation `.agent-review/
95
+ // config.json`) is a HARD failure: the catalog was seeded but the
96
+ // deterministic scope critic is NOT wired, so `Mode:` PRs would merge
97
+ // WITHOUT the scope gate — the exact unsafe state this critic exists to
98
+ // prevent. Exiting 0 there reads as "the mode is guarded" and hides it,
99
+ // so we fail non-zero and suppress the "next" hint. `absent` is NOT an
100
+ // error: it is the specified pre-`df onboard` skip (no config yet), so it
101
+ // stays exit 0 and keeps the next-step (the catalog seed is real work).
102
+ let registrationFailed = false;
103
+ switch (reg.status) {
104
+ case "registered":
105
+ lines.push(`df mode: registered the ModeScope scope critic in ${reg.configPath}:`);
106
+ lines.push(...reg.changes.map((c) => ` - ${c}`));
107
+ break;
108
+ case "already-registered":
109
+ lines.push(`df mode: ModeScope scope critic already registered in ${reg.configPath} — unchanged.`);
110
+ break;
111
+ case "absent":
112
+ lines.push(`df mode: NOTE ${reg.configPath} not found — run \`df onboard\` first, then re-run ` +
113
+ `\`df mode init ${modeName}\` to wire the scope critic (idempotent).`);
114
+ break;
115
+ case "error":
116
+ registrationFailed = true;
117
+ lines.push(`df mode: ERROR could not register the ModeScope scope critic in ${reg.configPath}: ${reg.error}. ` +
118
+ `The catalog was seeded but the scope gate is NOT wired — \`Mode:\` PRs would skip it. ` +
119
+ `Fix ${reg.configPath} and re-run \`df mode init ${modeName}\` (idempotent).`);
120
+ break;
121
+ }
122
+ if (registrationFailed) {
123
+ // Fail loud on stderr with a non-zero exit — do NOT print the "next"
124
+ // hint, which would imply the mode is ready to commit and guarded.
125
+ process.stderr.write(`${lines.join("\n")}\n`);
126
+ return 1;
127
+ }
128
+ lines.push(`df mode: next: commit darkfactory.yaml + .agent-review/config.json, then run \`df doctor\`.`);
129
+ process.stdout.write(`${lines.join("\n")}\n`);
130
+ return 0;
131
+ }
132
+ catch (e) {
133
+ process.stderr.write(`df mode init failed: ${e instanceof Error ? e.message : String(e)}\n`);
134
+ return 1;
135
+ }
136
+ }
137
+ if (sub === "status") {
138
+ try {
139
+ const status = modeStatus(process.cwd(), { mode: flags["mode"] }, { DF_MODE: process.env["DF_MODE"] });
140
+ if (flags["json"] === true) {
141
+ process.stdout.write(`${JSON.stringify(status, null, 2)}\n`);
142
+ return 0;
143
+ }
144
+ if (!status.active) {
145
+ process.stdout.write("df mode: no operator mode active (normal engineer session). " +
146
+ "Activate with --mode <name> or DF_MODE=<name>.\n");
147
+ return 0;
148
+ }
149
+ const scopes = status.mode.writeScopes ?? [];
150
+ process.stdout.write([
151
+ `df mode: ACTIVE — ${status.modeName}`,
152
+ ` writeScopes: ${scopes.length > 0 ? scopes.join(", ") : "(none configured)"}`,
153
+ ` protectedPaths: ${(status.mode.protectedPaths ?? []).join(", ") || "(none)"}`,
154
+ ` dependencyPolicy: ${status.mode.dependencyPolicy ?? "(unset)"}`,
155
+ ` visual evidence: ${status.mode.evidence?.visual ?? "(unset)"}`,
156
+ ].join("\n") + "\n");
157
+ return 0;
158
+ }
159
+ catch (e) {
160
+ process.stderr.write(`df mode status failed: ${e instanceof Error ? e.message : String(e)}\n`);
161
+ return 1;
162
+ }
163
+ }
164
+ if (sub === "apply") {
165
+ const modeName = positional[1] ?? "designer";
166
+ try {
167
+ const result = applyMode(process.cwd(), modeName);
168
+ process.stdout.write([
169
+ `df mode: ${result.created ? "created" : "updated"} ${result.settingsPath} for mode "${result.modeName}".`,
170
+ `df mode: next: open Claude Code in this repo — the session starts in ${result.modeName} mode.`,
171
+ ].join("\n") + "\n");
172
+ return 0;
173
+ }
174
+ catch (e) {
175
+ process.stderr.write(`df mode apply failed: ${e instanceof Error ? e.message : String(e)}\n`);
176
+ return 1;
177
+ }
178
+ }
179
+ if (sub === "guard" && flags["hook"] === true) {
180
+ // PreToolUse binding. JSON out on stdout, always exit 0 — the decision
181
+ // payload carries allow/deny; a crashed guard must not wedge the session.
182
+ let decision;
183
+ try {
184
+ const stdin = await readStdin();
185
+ let hookInput = null;
186
+ try {
187
+ hookInput = JSON.parse(stdin);
188
+ }
189
+ catch {
190
+ hookInput = null; // decideGuard fail-closes when a mode is active
191
+ }
192
+ const status = modeStatus(process.cwd(), {}, { DF_MODE: process.env["DF_MODE"] });
193
+ decision = decideGuard(hookInput, status.active ? { modeName: status.modeName, mode: status.mode } : undefined);
194
+ }
195
+ catch (e) {
196
+ // Catalog unresolvable while DF_MODE set (unknown mode, broken yaml):
197
+ // fail CLOSED — an unenforceable mode must not silently allow.
198
+ decision = {
199
+ decision: "deny",
200
+ plain: "To be safe, the mode guard blocked this action — the mode setup couldn't be read.",
201
+ hint: `guard could not resolve the active mode (${e instanceof Error ? e.message : String(e)}) — fix darkfactory.yaml/DF_MODE or unset DF_MODE`,
202
+ };
203
+ }
204
+ const payload = decision.decision === "allow"
205
+ ? { hookEventName: "PreToolUse", permissionDecision: "allow" }
206
+ : {
207
+ hookEventName: "PreToolUse",
208
+ permissionDecision: "deny",
209
+ permissionDecisionReason: `${decision.plain} [agent: ${decision.hint}]`,
210
+ };
211
+ process.stdout.write(`${JSON.stringify({ hookSpecificOutput: payload })}\n`);
212
+ return 0;
213
+ }
214
+ if (sub === "context" && flags["hook"] === true) {
215
+ try {
216
+ const status = modeStatus(process.cwd(), {}, { DF_MODE: process.env["DF_MODE"] });
217
+ if (!status.active)
218
+ return 0; // no mode → no context injection
219
+ // null covers missing, non-relative, traversal, and symlink-escape —
220
+ // all narrated as "unseeded" by buildModeContext (fail-safe silence).
221
+ const designMdPath = safeDesignMdPath(process.cwd(), status.mode.designSystem?.designMd ?? "DESIGN.md");
222
+ const designMd = designMdPath !== null ? readFileSync(designMdPath, "utf8") : undefined;
223
+ const additionalContext = buildModeContext({ modeName: status.modeName, mode: status.mode }, designMd);
224
+ process.stdout.write(`${JSON.stringify({ hookSpecificOutput: { hookEventName: "SessionStart", additionalContext } })}\n`);
225
+ return 0;
226
+ }
227
+ catch (e) {
228
+ process.stderr.write(`df mode context failed: ${e instanceof Error ? e.message : String(e)}\n`);
229
+ return 1;
230
+ }
231
+ }
232
+ process.stderr.write(`df mode: unknown subcommand "${sub}".\n${USAGE}\n`);
233
+ return 1;
234
+ }
235
+ //# sourceMappingURL=mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/commands/mode.ts"],"names":[],"mappings":"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"}
@@ -10,9 +10,16 @@ interface HashOptions {
10
10
  subcommand: "hash";
11
11
  text: string;
12
12
  }
13
+ type DeriveSource = {
14
+ kind: "cycle";
15
+ cycle: string;
16
+ } | {
17
+ kind: "brief";
18
+ briefPath: string;
19
+ };
13
20
  interface DeriveOptions {
14
21
  subcommand: "derive";
15
- cycle: string;
22
+ source: DeriveSource;
16
23
  apply: boolean;
17
24
  json: boolean;
18
25
  cwd: string;
@@ -30,11 +37,19 @@ export declare function parseObjectivesArgs(rest: string[]): ParsedOptions | {
30
37
  error: string;
31
38
  };
32
39
  export interface ExtractedCriterion {
33
- /** Criterion id (`ec<k>`) — the validator-compatible locator suffix. */
40
+ /**
41
+ * Criterion id — the locator suffix. `ec<k>` for a cycle-doc exit criterion,
42
+ * `ac<k>` for a brief Done-when checkbox.
43
+ */
34
44
  id: string;
35
45
  /** Human-facing display text (label + emphasis stripped). */
36
46
  text: string;
37
- /** The verbatim source line — the canonical hash input. */
47
+ /**
48
+ * The canonical hash input for this criterion — the exact string fed to
49
+ * `canonicalizeCriterion`. For an exit-criteria item this is the verbatim
50
+ * source line; for a brief Done-when checkbox it is the criterion text with
51
+ * the `[ ]`/`[x]` marker stripped, so toggling the box never moves the hash.
52
+ */
38
53
  raw: string;
39
54
  /**
40
55
  * Non-blank, NON-marker lines that follow this item's `raw` line before the
@@ -61,6 +76,15 @@ export interface ExtractedCriterion {
61
76
  * criteria — see `continuationLines`.
62
77
  */
63
78
  export declare function extractExitCriteria(sectionBody: string): ExtractedCriterion[];
79
+ /**
80
+ * Enumerate a brief `## Done-when` section body's checkboxes into criteria,
81
+ * assigning each a positional `ac<k>` id. Mirrors `extractExitCriteria`'s
82
+ * continuation-line collection so the single-line-atomic-criterion guard applies
83
+ * to briefs too. `raw` is the checkbox-stripped criterion text (the canonical
84
+ * hash input); NON-checkbox list items and prose in the section are ignored (one
85
+ * objective per Done-when checkbox).
86
+ */
87
+ export declare function extractBriefCriteria(sectionBody: string): ExtractedCriterion[];
64
88
  export declare function cmdObjectives(rest: string[], io: ObjectivesIo, deps?: ObjectivesDeps): Promise<number>;
65
89
  export {};
66
90
  //# sourceMappingURL=objectives.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"objectives.d.ts","sourceRoot":"","sources":["../../src/commands/objectives.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,YAAY,EAAgB,MAAM,4BAA4B,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAMD,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;CACpC;AAED,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,aAAa;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,aAAa;IACrB,UAAU,EAAE,SAAS,CAAC;CACvB;AAED,KAAK,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AAEhF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAqBrF;AAoMD,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;;;;;;;OAYG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA4B7E;AAyCD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,EAAE,YAAY,EAChB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAmCjB"}
1
+ {"version":3,"file":"objectives.d.ts","sourceRoot":"","sources":["../../src/commands/objectives.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,YAAY,EAIb,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAMD,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;CACpC;AAED,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,KAAK,YAAY,GACb;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,UAAU,aAAa;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,YAAY;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,aAAa;IACrB,UAAU,EAAE,SAAS,CAAC;CACvB;AAED,KAAK,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY,GAAG,aAAa,CAAC;AAEhF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAqBrF;AA2ND,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;;;;;;;OAYG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA4B7E;AAkDD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA2B9E;AAoED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,EAAE,YAAY,EAChB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CAmCjB"}