@rasensio/aidlc 1.2.1 → 1.3.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 (81) hide show
  1. package/dist/cli.js +4 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/claim.d.ts +15 -0
  4. package/dist/commands/claim.d.ts.map +1 -0
  5. package/dist/commands/claim.js +122 -0
  6. package/dist/commands/claim.js.map +1 -0
  7. package/dist/commands/cost.d.ts +12 -0
  8. package/dist/commands/cost.d.ts.map +1 -0
  9. package/dist/commands/cost.js +409 -0
  10. package/dist/commands/cost.js.map +1 -0
  11. package/dist/commands/init.d.ts.map +1 -1
  12. package/dist/commands/init.js +38 -2
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/status.d.ts.map +1 -1
  15. package/dist/commands/status.js +30 -1
  16. package/dist/commands/status.js.map +1 -1
  17. package/dist/commands/transition.js +9 -0
  18. package/dist/commands/transition.js.map +1 -1
  19. package/dist/core/types.d.ts +8 -0
  20. package/dist/core/types.d.ts.map +1 -1
  21. package/dist/cost/config.d.ts +8 -0
  22. package/dist/cost/config.d.ts.map +1 -0
  23. package/dist/cost/config.js +37 -0
  24. package/dist/cost/config.js.map +1 -0
  25. package/dist/cost/hooks/claude-code.d.ts +29 -0
  26. package/dist/cost/hooks/claude-code.d.ts.map +1 -0
  27. package/dist/cost/hooks/claude-code.js +101 -0
  28. package/dist/cost/hooks/claude-code.js.map +1 -0
  29. package/dist/cost/hooks/kiro.d.ts +17 -0
  30. package/dist/cost/hooks/kiro.d.ts.map +1 -0
  31. package/dist/cost/hooks/kiro.js +66 -0
  32. package/dist/cost/hooks/kiro.js.map +1 -0
  33. package/dist/cost/ledger.d.ts +70 -0
  34. package/dist/cost/ledger.d.ts.map +1 -0
  35. package/dist/cost/ledger.js +314 -0
  36. package/dist/cost/ledger.js.map +1 -0
  37. package/dist/cost/providers/claude-code.d.ts +20 -0
  38. package/dist/cost/providers/claude-code.d.ts.map +1 -0
  39. package/dist/cost/providers/claude-code.js +116 -0
  40. package/dist/cost/providers/claude-code.js.map +1 -0
  41. package/dist/cost/providers/kiro.d.ts +19 -0
  42. package/dist/cost/providers/kiro.d.ts.map +1 -0
  43. package/dist/cost/providers/kiro.js +147 -0
  44. package/dist/cost/providers/kiro.js.map +1 -0
  45. package/dist/cost/providers/provider.d.ts +36 -0
  46. package/dist/cost/providers/provider.d.ts.map +1 -0
  47. package/dist/cost/providers/provider.js +21 -0
  48. package/dist/cost/providers/provider.js.map +1 -0
  49. package/dist/cost/rates-bundled.d.ts +11 -0
  50. package/dist/cost/rates-bundled.d.ts.map +1 -0
  51. package/dist/cost/rates-bundled.js +23 -0
  52. package/dist/cost/rates-bundled.js.map +1 -0
  53. package/dist/cost/rates.d.ts +42 -0
  54. package/dist/cost/rates.d.ts.map +1 -0
  55. package/dist/cost/rates.js +190 -0
  56. package/dist/cost/rates.js.map +1 -0
  57. package/dist/cost/recorder.d.ts +57 -0
  58. package/dist/cost/recorder.d.ts.map +1 -0
  59. package/dist/cost/recorder.js +339 -0
  60. package/dist/cost/recorder.js.map +1 -0
  61. package/dist/cost/report.d.ts +44 -0
  62. package/dist/cost/report.d.ts.map +1 -0
  63. package/dist/cost/report.js +164 -0
  64. package/dist/cost/report.js.map +1 -0
  65. package/dist/cost/sessions.d.ts +40 -0
  66. package/dist/cost/sessions.d.ts.map +1 -0
  67. package/dist/cost/sessions.js +200 -0
  68. package/dist/cost/sessions.js.map +1 -0
  69. package/dist/cost/sync.d.ts +24 -0
  70. package/dist/cost/sync.d.ts.map +1 -0
  71. package/dist/cost/sync.js +191 -0
  72. package/dist/cost/sync.js.map +1 -0
  73. package/dist/cost/types.d.ts +116 -0
  74. package/dist/cost/types.d.ts.map +1 -0
  75. package/dist/cost/types.js +13 -0
  76. package/dist/cost/types.js.map +1 -0
  77. package/dist/setup/setup-compute.d.ts +6 -0
  78. package/dist/setup/setup-compute.d.ts.map +1 -1
  79. package/dist/setup/setup-compute.js +3 -0
  80. package/dist/setup/setup-compute.js.map +1 -1
  81. package/package.json +3 -5
package/dist/cli.js CHANGED
@@ -34,6 +34,8 @@ import { registerDocs } from './commands/docs.js';
34
34
  import { registerReview } from './commands/review.js';
35
35
  import { registerUpdate } from './commands/update.js';
36
36
  import { registerKnowledge } from './commands/knowledge.js';
37
+ import { registerCost } from './commands/cost.js';
38
+ import { registerClaim } from './commands/claim.js';
37
39
  const pkg = JSON.parse(readFileSync(resolve(dirname(fileURLToPath(import.meta.url)), '..', 'package.json'), 'utf8'));
38
40
  const program = new Command();
39
41
  program
@@ -52,5 +54,7 @@ registerDocs(program);
52
54
  registerReview(program);
53
55
  registerUpdate(program);
54
56
  registerKnowledge(program);
57
+ registerCost(program);
58
+ registerClaim(program);
55
59
  program.parse();
56
60
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,6EAA6E;AAC7E,6EAA6E;AAC7E,yDAAyD;AACzD,MAAM,uBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC7D,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACtC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;IAChC,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO;IACzF,KAAK,MAAM,QAAQ,IAAI,uBAAuB;QAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACtE,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAE3B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,6EAA6E;AAC7E,6EAA6E;AAC7E,yDAAyD;AACzD,MAAM,uBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC7D,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACtC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;IAChC,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO;IACzF,KAAK,MAAM,QAAQ,IAAI,uBAAuB;QAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CACtE,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC1B,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AAEvB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `aidlc claim` / `aidlc release`: instance claiming with a durable
3
+ * session ledger (FR1.2).
4
+ *
5
+ * Performs the instance.yaml claim update and the sessions.ndjson append
6
+ * as one protocol step — in that order, so a failure between the two
7
+ * leaves exactly the divergence `aidlc cost sync` detects and reports.
8
+ *
9
+ * Session identity (FR1.5/D4): resolved from the active-session stash
10
+ * with the strict single-candidate rule; zero or multiple candidates
11
+ * degrade to a generated agent id with interval-based attribution.
12
+ */
13
+ import { Command } from 'commander';
14
+ export declare function registerClaim(program: Command): void;
15
+ //# sourceMappingURL=claim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.d.ts","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2GpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiBpD"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * `aidlc claim` / `aidlc release`: instance claiming with a durable
3
+ * session ledger (FR1.2).
4
+ *
5
+ * Performs the instance.yaml claim update and the sessions.ndjson append
6
+ * as one protocol step — in that order, so a failure between the two
7
+ * leaves exactly the divergence `aidlc cost sync` detects and reports.
8
+ *
9
+ * Session identity (FR1.5/D4): resolved from the active-session stash
10
+ * with the strict single-candidate rule; zero or multiple candidates
11
+ * degrade to a generated agent id with interval-based attribution.
12
+ */
13
+ import { Command } from 'commander';
14
+ import { existsSync } from 'node:fs';
15
+ import { join } from 'node:path';
16
+ import { randomUUID } from 'node:crypto';
17
+ import { loadYaml, saveYaml } from '../state/yaml-helpers.js';
18
+ import { appendSessionEvent, sessionsPath, resolveCurrentSession } from '../cost/sessions.js';
19
+ import { loadClaimTimeoutMinutes } from '../cost/config.js';
20
+ function instanceYamlPath(root, instance) {
21
+ return join(root, '.aidlc', 'state', instance, 'instance.yaml');
22
+ }
23
+ function resolveSession(root) {
24
+ const active = resolveCurrentSession(root);
25
+ if (active)
26
+ return { id: active.session_id, source: 'platform', agent: active.agent };
27
+ return { id: `agent-${randomUUID()}`, source: 'agent', agent: process.env.AIDLC_AGENT ?? 'unknown' };
28
+ }
29
+ function runClaim(instance, opts) {
30
+ const root = process.cwd();
31
+ const yamlPath = instanceYamlPath(root, instance);
32
+ if (!existsSync(yamlPath)) {
33
+ process.stderr.write(`no such instance: ${instance}\n`);
34
+ process.exitCode = 1;
35
+ return;
36
+ }
37
+ const state = loadYaml(yamlPath);
38
+ const now = new Date().toISOString();
39
+ const timeoutMs = loadClaimTimeoutMinutes(root) * 60_000;
40
+ if (opts.renew) {
41
+ if (!state.claim) {
42
+ process.stderr.write(`${instance} is not claimed — nothing to renew\n`);
43
+ process.exitCode = 1;
44
+ return;
45
+ }
46
+ state.claim.renewed_at = now;
47
+ saveYaml(yamlPath, state);
48
+ appendSessionEvent(sessionsPath(root, instance), {
49
+ event: 'renew',
50
+ session_id: state.claim.session,
51
+ id_source: state.claim.session.startsWith('agent-') ? 'agent' : 'platform',
52
+ agent: process.env.AIDLC_AGENT ?? 'unknown',
53
+ timestamp: now,
54
+ });
55
+ process.stdout.write(`renewed claim on ${instance}\n`);
56
+ return;
57
+ }
58
+ if (state.claim) {
59
+ const last = Date.parse(state.claim.renewed_at ?? state.claim.claimed_at);
60
+ if (Date.now() - last < timeoutMs) {
61
+ process.stderr.write(`${instance} is claimed by session ${state.claim.session} (not stale) — release it first or wait for timeout\n`);
62
+ process.exitCode = 1;
63
+ return;
64
+ }
65
+ process.stderr.write(`overriding stale claim by ${state.claim.session}\n`);
66
+ }
67
+ const session = resolveSession(root);
68
+ state.claim = { session: session.id, claimed_at: now };
69
+ saveYaml(yamlPath, state);
70
+ appendSessionEvent(sessionsPath(root, instance), {
71
+ event: 'claim',
72
+ session_id: session.id,
73
+ id_source: session.source,
74
+ agent: session.agent,
75
+ timestamp: now,
76
+ });
77
+ process.stdout.write(`claimed ${instance} as ${session.id} (${session.source})\n`);
78
+ }
79
+ function runRelease(instance) {
80
+ const root = process.cwd();
81
+ const yamlPath = instanceYamlPath(root, instance);
82
+ if (!existsSync(yamlPath)) {
83
+ process.stderr.write(`no such instance: ${instance}\n`);
84
+ process.exitCode = 1;
85
+ return;
86
+ }
87
+ const state = loadYaml(yamlPath);
88
+ if (!state.claim) {
89
+ process.stderr.write(`${instance} is not claimed\n`);
90
+ return;
91
+ }
92
+ const session = state.claim.session;
93
+ const now = new Date().toISOString();
94
+ state.claim = null;
95
+ saveYaml(yamlPath, state);
96
+ appendSessionEvent(sessionsPath(root, instance), {
97
+ event: 'release',
98
+ session_id: session,
99
+ id_source: session.startsWith('agent-') ? 'agent' : 'platform',
100
+ agent: process.env.AIDLC_AGENT ?? 'unknown',
101
+ timestamp: now,
102
+ });
103
+ process.stdout.write(`released ${instance}\n`);
104
+ }
105
+ export function registerClaim(program) {
106
+ program
107
+ .command('claim')
108
+ .description('Claim a lifecycle instance for this session (writes sessions.ndjson)')
109
+ .argument('<instance>', 'Instance name')
110
+ .option('--renew', 'Renew an existing claim instead of taking a new one')
111
+ .action((instance, opts) => {
112
+ runClaim(instance, opts);
113
+ });
114
+ program
115
+ .command('release')
116
+ .description('Release a claimed instance (writes sessions.ndjson)')
117
+ .argument('<instance>', 'Instance name')
118
+ .action((instance) => {
119
+ runRelease(instance);
120
+ });
121
+ }
122
+ //# sourceMappingURL=claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../src/commands/claim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `aidlc cost` command family: reports, capture, sync, rates, hooks.
3
+ *
4
+ * Machine-consumable output goes to stdout, diagnostics to stderr
5
+ * (cli.ts convention). Hook-mode subcommands (record, session-start) are
6
+ * silent on success — they run inside platform hooks.
7
+ *
8
+ * Design: design.md §1 (command surface)
9
+ */
10
+ import { Command } from 'commander';
11
+ export declare function registerCost(program: Command): void;
12
+ //# sourceMappingURL=cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/commands/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmXpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+EnD"}
@@ -0,0 +1,409 @@
1
+ /**
2
+ * `aidlc cost` command family: reports, capture, sync, rates, hooks.
3
+ *
4
+ * Machine-consumable output goes to stdout, diagnostics to stderr
5
+ * (cli.ts convention). Hook-mode subcommands (record, session-start) are
6
+ * silent on success — they run inside platform hooks.
7
+ *
8
+ * Design: design.md §1 (command surface)
9
+ */
10
+ import { Command } from 'commander';
11
+ import { spawn } from 'node:child_process';
12
+ import { readFileSync } from 'node:fs';
13
+ import { fileURLToPath } from 'node:url';
14
+ import { dirname, resolve } from 'node:path';
15
+ import { registerProvider, getProvider, allProviders } from '../cost/providers/provider.js';
16
+ import { claudeCodeProvider } from '../cost/providers/claude-code.js';
17
+ import { kiroProvider } from '../cost/providers/kiro.js';
18
+ import { recordUsage, lastCaptureError, logCapture } from '../cost/recorder.js';
19
+ import { stashSession } from '../cost/sessions.js';
20
+ import { appendEntry, ledgerPath } from '../cost/ledger.js';
21
+ import { instanceCost, listInstances, byTemplate, unattributedEntries } from '../cost/report.js';
22
+ import { effectiveRates, updateRates, microToUsd, NORMALIZATION_RULES } from '../cost/rates.js';
23
+ import { loadCostConfig, loadClaimTimeoutMinutes } from '../cost/config.js';
24
+ import { installClaudeCodeHooks, removeClaudeCodeHooks, claudeCodeHookStatus, } from '../cost/hooks/claude-code.js';
25
+ import { installKiroHooks, removeKiroHooks, kiroHookStatus } from '../cost/hooks/kiro.js';
26
+ import { SESSION_ID_RE } from '../cost/types.js';
27
+ registerProvider(claudeCodeProvider);
28
+ registerProvider(kiroProvider);
29
+ function projectRoot() {
30
+ return process.cwd();
31
+ }
32
+ function cliEntryPath() {
33
+ return resolve(dirname(fileURLToPath(import.meta.url)), '..', 'cli.js');
34
+ }
35
+ function readStdin() {
36
+ return new Promise((resolveInput) => {
37
+ let data = '';
38
+ process.stdin.setEncoding('utf8');
39
+ process.stdin.on('data', (chunk) => (data += chunk));
40
+ process.stdin.on('end', () => resolveInput(data));
41
+ // Hooks always pipe stdin; a TTY means manual invocation with no payload.
42
+ if (process.stdin.isTTY)
43
+ resolveInput('');
44
+ });
45
+ }
46
+ function parseHookInput(raw) {
47
+ try {
48
+ const parsed = JSON.parse(raw);
49
+ if (typeof parsed.session_id !== 'string' || !SESSION_ID_RE.test(parsed.session_id))
50
+ return null;
51
+ return {
52
+ session_id: parsed.session_id,
53
+ transcript_path: typeof parsed.transcript_path === 'string' ? parsed.transcript_path : undefined,
54
+ cwd: typeof parsed.cwd === 'string' ? parsed.cwd : undefined,
55
+ };
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
61
+ function fmtSeconds(secs) {
62
+ if (secs <= 0)
63
+ return '-';
64
+ const h = secs / 3600;
65
+ return h >= 1 ? `${h.toFixed(1)}h` : `${Math.round(secs / 60)}m`;
66
+ }
67
+ function fmtFidelityMix(mix) {
68
+ const parts = [];
69
+ for (const [k, v] of Object.entries(mix)) {
70
+ if (v > 0)
71
+ parts.push(`${Math.round(v * 100)}% ${k}`);
72
+ }
73
+ return parts.join(', ') || '-';
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // Subcommand actions
77
+ // ---------------------------------------------------------------------------
78
+ async function runRecord(opts) {
79
+ const root = projectRoot();
80
+ if (opts.manual) {
81
+ runManualRecord(root, opts);
82
+ return;
83
+ }
84
+ if (!opts.provider || !getProvider(opts.provider)) {
85
+ process.stderr.write('cost record: unknown or missing --provider\n');
86
+ process.exitCode = 1;
87
+ return;
88
+ }
89
+ const raw = await readStdin();
90
+ const input = parseHookInput(raw);
91
+ if (!input) {
92
+ logCapture(root, 'parse-stdin', 'invalid-payload');
93
+ return; // Hook context: silent, logged.
94
+ }
95
+ if (opts.detach) {
96
+ // Respawn without --detach and exit immediately (SessionEnd budget).
97
+ const args = [cliEntryPath(), 'cost', 'record', '--provider', opts.provider];
98
+ const child = spawn(process.execPath, args, {
99
+ detached: true,
100
+ stdio: ['pipe', 'ignore', 'ignore'],
101
+ cwd: root,
102
+ });
103
+ child.stdin.write(raw);
104
+ child.stdin.end();
105
+ child.unref();
106
+ return;
107
+ }
108
+ const result = await recordUsage({
109
+ projectRoot: root,
110
+ provider: opts.provider,
111
+ input,
112
+ claimTimeoutMinutes: loadClaimTimeoutMinutes(root),
113
+ });
114
+ if (result && (result.appended > 0 || result.unattributed > 0)) {
115
+ process.stderr.write(`cost record: ${result.appended} entries (${result.instances.join(', ') || 'none'}), ${result.unattributed} unattributed\n`);
116
+ }
117
+ }
118
+ function runManualRecord(root, opts) {
119
+ if (!opts.instance) {
120
+ process.stderr.write('cost record --manual requires --instance\n');
121
+ process.exitCode = 1;
122
+ return;
123
+ }
124
+ const fidelity = opts.fidelity === 'estimated' || opts.fidelity === 'unknown' ? opts.fidelity : null;
125
+ if (!fidelity) {
126
+ process.stderr.write('cost record --manual requires --fidelity estimated|unknown\n');
127
+ process.exitCode = 1;
128
+ return;
129
+ }
130
+ if (fidelity === 'estimated' && !opts.units) {
131
+ process.stderr.write('--fidelity estimated requires --units\n');
132
+ process.exitCode = 1;
133
+ return;
134
+ }
135
+ if (fidelity === 'unknown' && opts.units) {
136
+ process.stderr.write('--fidelity unknown forbids --units\n');
137
+ process.exitCode = 1;
138
+ return;
139
+ }
140
+ let units = null;
141
+ if (opts.units) {
142
+ try {
143
+ units = JSON.parse(opts.units);
144
+ }
145
+ catch {
146
+ process.stderr.write('--units is not valid JSON\n');
147
+ process.exitCode = 1;
148
+ return;
149
+ }
150
+ }
151
+ const session = opts.session && opts.session !== '-' && SESSION_ID_RE.test(opts.session)
152
+ ? opts.session
153
+ : null;
154
+ const now = new Date().toISOString();
155
+ const entry = {
156
+ timestamp: now,
157
+ session_id: session,
158
+ phase: currentPhase(root, opts.instance),
159
+ provider: 'manual',
160
+ fidelity,
161
+ coverage: { from: opts.from ?? now, to: opts.to ?? now },
162
+ cursor: null,
163
+ units,
164
+ };
165
+ try {
166
+ appendEntry(ledgerPath(root, opts.instance), entry);
167
+ process.stderr.write(`recorded ${fidelity} entry for ${opts.instance}\n`);
168
+ }
169
+ catch (err) {
170
+ process.stderr.write(`cost record: ${err.message}\n`);
171
+ process.exitCode = 1;
172
+ }
173
+ }
174
+ function currentPhase(root, instance) {
175
+ try {
176
+ const raw = readFileSync(`${root}/.aidlc/state/${instance}/instance.yaml`, 'utf8');
177
+ const match = raw.match(/^current_phase:\s*(\S+)/m);
178
+ return match ? match[1] : null;
179
+ }
180
+ catch {
181
+ return null;
182
+ }
183
+ }
184
+ async function runSessionStart(opts) {
185
+ const root = projectRoot();
186
+ const raw = await readStdin();
187
+ const input = parseHookInput(raw);
188
+ if (!input || !opts.provider) {
189
+ logCapture(root, 'session-start', 'invalid-payload');
190
+ return;
191
+ }
192
+ try {
193
+ stashSession(root, {
194
+ session_id: input.session_id,
195
+ agent: opts.provider,
196
+ cwd: input.cwd ?? root,
197
+ transcript_path: input.transcript_path,
198
+ started_at: new Date().toISOString(),
199
+ });
200
+ }
201
+ catch {
202
+ logCapture(root, 'session-start', 'stash-failed');
203
+ }
204
+ }
205
+ function runReport(instance, opts) {
206
+ const root = projectRoot();
207
+ const config = loadCostConfig(root);
208
+ if (opts.unattributed) {
209
+ const entries = unattributedEntries(root);
210
+ if (opts.json) {
211
+ process.stdout.write(JSON.stringify(entries, null, 2) + '\n');
212
+ }
213
+ else {
214
+ process.stdout.write(`${entries.length} unattributed entries\n`);
215
+ }
216
+ return;
217
+ }
218
+ if (opts.byTemplate) {
219
+ const rollup = byTemplate(root, config);
220
+ if (opts.json) {
221
+ process.stdout.write(JSON.stringify(rollup, null, 2) + '\n');
222
+ return;
223
+ }
224
+ for (const r of rollup) {
225
+ process.stdout.write(`${r.template.padEnd(16)} n=${String(r.count).padEnd(4)} avg ${microToUsd(r.avgMicroUsd).padEnd(9)} avg time ${fmtSeconds(r.avgElapsedSeconds)}\n`);
226
+ }
227
+ return;
228
+ }
229
+ const names = instance ? [instance] : listInstances(root);
230
+ const costs = names.map((n) => instanceCost(root, n, config));
231
+ if (opts.json) {
232
+ process.stdout.write(JSON.stringify(costs, null, 2) + '\n');
233
+ return;
234
+ }
235
+ for (const c of costs) {
236
+ process.stdout.write(`${c.instance} (${c.template ?? 'unknown'})\n`);
237
+ for (const p of c.phases) {
238
+ const cost = p.microUsd !== null ? microToUsd(p.microUsd) : `${p.tokens} tok`;
239
+ process.stdout.write(` ${p.phase.padEnd(16)} ${cost.padEnd(9)} ${fmtSeconds(p.elapsedSeconds).padEnd(6)}${p.unpricedModels.length > 0 ? ` (unpriced: ${p.unpricedModels.join(', ')})` : ''}\n`);
240
+ }
241
+ const total = c.microUsd !== null ? microToUsd(c.microUsd) : '-';
242
+ process.stdout.write(` total: ${total} time: ${fmtSeconds(c.elapsedSeconds)} fidelity: ${fmtFidelityMix(c.fidelityMix)}\n`);
243
+ process.stdout.write(` rates: ${c.snapshot}\n`);
244
+ }
245
+ const err = lastCaptureError(root);
246
+ if (err) {
247
+ process.stderr.write(`note: last capture error ${err.error_code} at ${err.stage} (${err.timestamp}) — see .aidlc/cost/capture.log\n`);
248
+ }
249
+ }
250
+ async function runSync(instance) {
251
+ const root = projectRoot();
252
+ const { syncCosts } = await import('../cost/sync.js');
253
+ const report = await syncCosts(root, instance ?? null, loadClaimTimeoutMinutes(root));
254
+ process.stdout.write(`attributed: ${report.attributed}\nunattributed: ${report.unattributed}\n`);
255
+ for (const s of report.skipped)
256
+ process.stdout.write(`skipped: ${s}\n`);
257
+ }
258
+ async function runRatesUpdate() {
259
+ const root = projectRoot();
260
+ try {
261
+ const snapshot = await updateRates(root, loadCostConfig(root));
262
+ process.stdout.write(`rates updated: ${snapshot.snapshot_version} (${Object.keys(snapshot.rates).length} models)\n`);
263
+ }
264
+ catch (err) {
265
+ process.stderr.write(`rates update failed: ${err.message}\n`);
266
+ const effective = effectiveRates(root, loadCostConfig(root));
267
+ process.stderr.write(`still using: ${effective.snapshot}\n`);
268
+ process.exitCode = 1;
269
+ }
270
+ }
271
+ function runRatesShow(opts) {
272
+ const root = projectRoot();
273
+ if (opts.normalization) {
274
+ for (const rule of NORMALIZATION_RULES)
275
+ process.stdout.write(`- ${rule.describe}\n`);
276
+ return;
277
+ }
278
+ const effective = effectiveRates(root, loadCostConfig(root));
279
+ process.stdout.write(`snapshot: ${effective.snapshot}\n`);
280
+ for (const [model, { rate, origin }] of effective.entries) {
281
+ const desc = rate.per_unit !== undefined
282
+ ? `$${rate.per_unit}/unit`
283
+ : `in $${rate.input_per_mtok}/MTok out $${rate.output_per_mtok}/MTok`;
284
+ process.stdout.write(`${model.padEnd(28)} ${desc.padEnd(36)} [${origin}]\n`);
285
+ }
286
+ }
287
+ function runHooks(action, opts) {
288
+ const root = projectRoot();
289
+ const platforms = opts.platform ? [opts.platform] : ['claude-code', 'kiro'];
290
+ const nodePath = process.execPath;
291
+ const cliPath = cliEntryPath();
292
+ for (const platform of platforms) {
293
+ if (platform === 'claude-code') {
294
+ if (action === 'install')
295
+ installClaudeCodeHooks(root, nodePath, cliPath);
296
+ else if (action === 'remove')
297
+ removeClaudeCodeHooks(root);
298
+ else {
299
+ const s = claudeCodeHookStatus(root);
300
+ process.stdout.write(`claude-code: ${s.installed ? 'installed' : 'not installed'}${s.installed && !s.commandResolvable ? ' (command path broken — re-run install)' : ''}\n`);
301
+ continue;
302
+ }
303
+ process.stdout.write(`claude-code: hooks ${action === 'install' ? 'installed' : 'removed'}\n`);
304
+ }
305
+ else if (platform === 'kiro') {
306
+ if (action === 'install')
307
+ installKiroHooks(root, nodePath, cliPath);
308
+ else if (action === 'remove')
309
+ removeKiroHooks(root);
310
+ else {
311
+ const s = kiroHookStatus(root);
312
+ process.stdout.write(`kiro: ${s.installed ? 'installed' : 'not installed'}${s.installed && !s.commandResolvable ? ' (command path broken — re-run install)' : ''}\n`);
313
+ continue;
314
+ }
315
+ process.stdout.write(`kiro: hooks ${action === 'install' ? 'installed' : 'removed'}\n`);
316
+ }
317
+ else {
318
+ process.stderr.write(`unknown platform: ${platform}\n`);
319
+ process.exitCode = 1;
320
+ }
321
+ }
322
+ }
323
+ function runProvidersStatus() {
324
+ const root = projectRoot();
325
+ const env = { projectRoot: root };
326
+ for (const p of allProviders()) {
327
+ const detected = p.detect(env);
328
+ const hooks = p.name === 'claude-code' ? claudeCodeHookStatus(root) : kiroHookStatus(root);
329
+ const metered = detected && hooks.installed && hooks.commandResolvable;
330
+ process.stdout.write(`${p.name}: ${detected ? 'detected' : 'not detected'}, hooks ${hooks.installed ? 'installed' : 'absent'} → ${metered ? 'metered capture ACTIVE' : 'no metered capture (fallback applies)'}\n`);
331
+ }
332
+ }
333
+ // ---------------------------------------------------------------------------
334
+ // Registration
335
+ // ---------------------------------------------------------------------------
336
+ export function registerCost(program) {
337
+ const cost = program
338
+ .command('cost')
339
+ .description('Per-instance cost tracking: reports, capture, rates, hooks');
340
+ cost
341
+ .argument('[instance]', 'Instance to report on (default: all)')
342
+ .option('--json', 'Structured JSON output')
343
+ .option('--by-template', 'Roll up average cost per template')
344
+ .option('--unattributed', 'List usage not attributed to any instance')
345
+ .action((instance, opts) => {
346
+ runReport(instance, opts);
347
+ });
348
+ cost
349
+ .command('record')
350
+ .description('Record usage (hook mode via stdin, or --manual)')
351
+ .option('--provider <name>', 'Cost provider (claude-code, kiro)')
352
+ .option('--detach', 'Spawn a background recorder and exit immediately')
353
+ .option('--manual', 'Manual entry mode (agent-driven fallback)')
354
+ .option('--instance <name>', 'Target instance (manual mode)')
355
+ .option('--session <id>', 'Session id, or "-" for none (manual mode)')
356
+ .option('--fidelity <f>', 'estimated | unknown (manual mode)')
357
+ .option('--units <json>', 'Units JSON (manual mode, estimated only)')
358
+ .option('--from <iso>', 'Coverage start (manual mode)')
359
+ .option('--to <iso>', 'Coverage end (manual mode)')
360
+ .action(async (opts) => {
361
+ await runRecord(opts);
362
+ });
363
+ cost
364
+ .command('session-start')
365
+ .description('Stash a platform session id (hook mode via stdin)')
366
+ .option('--provider <name>', 'Platform name')
367
+ .action(async (opts) => {
368
+ await runSessionStart(opts);
369
+ });
370
+ cost
371
+ .command('sync')
372
+ .description('Reconcile historical platform records into ledgers')
373
+ .argument('[instance]', 'Limit to one instance')
374
+ .action(async (instance) => {
375
+ await runSync(instance);
376
+ });
377
+ const rates = cost.command('rates').description('Manage the usage→dollar rate table');
378
+ rates
379
+ .command('update')
380
+ .description('Fetch current rates from the configured source')
381
+ .action(async () => {
382
+ await runRatesUpdate();
383
+ });
384
+ rates
385
+ .command('show')
386
+ .description('Print the effective merged rate table')
387
+ .option('--normalization', 'Print the model-id normalization rules')
388
+ .action((opts) => {
389
+ runRatesShow(opts);
390
+ });
391
+ const hooks = cost.command('hooks').description('Manage cost-capture hooks per platform');
392
+ for (const action of ['install', 'remove', 'status']) {
393
+ hooks
394
+ .command(action)
395
+ .description(`${action[0].toUpperCase()}${action.slice(1)} cost-capture hooks`)
396
+ .option('--platform <name>', 'Limit to one platform (claude-code, kiro)')
397
+ .action((opts) => {
398
+ runHooks(action, opts);
399
+ });
400
+ }
401
+ const providers = cost.command('providers').description('Cost provider status');
402
+ providers
403
+ .command('status')
404
+ .description('Show detection and metered-capture state per provider')
405
+ .action(() => {
406
+ runProvidersStatus();
407
+ });
408
+ }
409
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/commands/cost.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE1F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AACrC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAE/B,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,IAAI,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QAClC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,0EAA0E;QAC1E,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;YAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAC1D,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACjG,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,eAAe,EAAE,OAAO,MAAM,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;YAChG,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;SAC7D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC;AACnE,CAAC;AAED,SAAS,cAAc,CAAC,GAAiC;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;AACjC,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,KAAK,UAAU,SAAS,CAAC,IAUxB;IACC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACrE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;QACnD,OAAO,CAAC,gCAAgC;IAC1C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,qEAAqE;QACrE,MAAM,IAAI,GAAG,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;YAC1C,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;YACnC,GAAG,EAAE,IAAI;SACV,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAClB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;QAC/B,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK;QACL,mBAAmB,EAAE,uBAAuB,CAAC,IAAI,CAAC;KACnD,CAAC,CAAC;IACH,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gBAAgB,MAAM,CAAC,QAAQ,aAAa,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,MAAM,MAAM,CAAC,YAAY,iBAAiB,CAC5H,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,IAAY,EACZ,IAA4G;IAE5G,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACnE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACrG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QACrF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAChE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC7D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,IAAI,KAAK,GAAqB,IAAI,CAAC;IACnC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAc,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YACpD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QACtF,CAAC,CAAC,IAAI,CAAC,OAAO;QACd,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAc;QACvB,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,OAAO;QACnB,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;QACxC,QAAQ,EAAE,QAAQ;QAClB,QAAQ;QACR,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE;QACxD,MAAM,EAAE,IAAI;QACZ,KAAK;KACN,CAAC;IACF,IAAI,CAAC;QACH,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,QAAQ,cAAc,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAiB,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACjE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,QAAgB;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,IAAI,iBAAiB,QAAQ,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,IAA2B;IACxD,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,YAAY,CAAC,IAAI,EAAE;YACjB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,KAAK,EAAE,IAAI,CAAC,QAAQ;YACpB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI;YACtB,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,QAA4B,EAAE,IAAsE;IACrH,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,yBAAyB,CAAC,CAAC;QACnE,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CACnJ,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAE9D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,SAAS,KAAK,CAAC,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM,CAAC;YAC9E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAC3K,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,KAAK,WAAW,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,eAAe,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/H,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,UAAU,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,SAAS,mCAAmC,CAAC,CAAC;IACxI,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,QAA4B;IACjD,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,UAAU,mBAAmB,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IACjG,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,CAAC,gBAAgB,KAAK,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC;IACvH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAyB,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QACzE,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAiC;IACrD,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,mBAAmB;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC1D,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS;YACtC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,OAAO;YAC1B,CAAC,CAAC,OAAO,IAAI,CAAC,cAAc,cAAc,IAAI,CAAC,eAAe,OAAO,CAAC;QACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,KAAK,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,MAAc,EAAE,IAA2B;IAC3D,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAE/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC/B,IAAI,MAAM,KAAK,SAAS;gBAAE,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;iBACrE,IAAI,MAAM,KAAK,QAAQ;gBAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;iBACrD,CAAC;gBACJ,MAAM,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,EAAE,IAAI,CACvJ,CAAC;gBACF,SAAS;YACX,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;QACjG,CAAC;aAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC/B,IAAI,MAAM,KAAK,SAAS;gBAAE,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;iBAC/D,IAAI,MAAM,KAAK,QAAQ;gBAAE,eAAe,CAAC,IAAI,CAAC,CAAC;iBAC/C,CAAC;gBACJ,MAAM,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,EAAE,IAAI,CAChJ,CAAC;gBACF,SAAS;YACX,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,QAAQ,IAAI,CAAC,CAAC;YACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,iBAAiB,CAAC;QACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,WAAW,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,uCAAuC,IAAI,CAC9L,CAAC;IACJ,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,UAAU,YAAY,CAAC,OAAgB;IAC3C,MAAM,IAAI,GAAG,OAAO;SACjB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,4DAA4D,CAAC,CAAC;IAE7E,IAAI;SACD,QAAQ,CAAC,YAAY,EAAE,sCAAsC,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;SAC1C,MAAM,CAAC,eAAe,EAAE,mCAAmC,CAAC;SAC5D,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,CAAC;SACrE,MAAM,CAAC,CAAC,QAA4B,EAAE,IAAsE,EAAE,EAAE;QAC/G,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,MAAM,CAAC,mBAAmB,EAAE,mCAAmC,CAAC;SAChE,MAAM,CAAC,UAAU,EAAE,kDAAkD,CAAC;SACtE,MAAM,CAAC,UAAU,EAAE,2CAA2C,CAAC;SAC/D,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;SAC5D,MAAM,CAAC,gBAAgB,EAAE,2CAA2C,CAAC;SACrE,MAAM,CAAC,gBAAgB,EAAE,mCAAmC,CAAC;SAC7D,MAAM,CAAC,gBAAgB,EAAE,0CAA0C,CAAC;SACpE,MAAM,CAAC,cAAc,EAAE,8BAA8B,CAAC;SACtD,MAAM,CAAC,YAAY,EAAE,4BAA4B,CAAC;SAClD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,SAAS,CAAC,IAAuC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,IAA2B,EAAE,EAAE;QAC5C,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oDAAoD,CAAC;SACjE,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;SAC/C,MAAM,CAAC,KAAK,EAAE,QAA4B,EAAE,EAAE;QAC7C,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEL,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IACtF,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IACL,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,iBAAiB,EAAE,wCAAwC,CAAC;SACnE,MAAM,CAAC,CAAC,IAAiC,EAAE,EAAE;QAC5C,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEL,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,wCAAwC,CAAC,CAAC;IAC1F,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAU,EAAE,CAAC;QAC9D,KAAK;aACF,OAAO,CAAC,MAAM,CAAC;aACf,WAAW,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC;aAC9E,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;aACxE,MAAM,CAAC,CAAC,IAA2B,EAAE,EAAE;YACtC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAChF,SAAS;SACN,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,GAAG,EAAE;QACX,kBAAkB,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuQpC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2BnD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwQpC;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4BnD"}