@nac3/forge-cli 0.2.0-alpha.59z.121 → 0.2.0-alpha.59z.158

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 (161) hide show
  1. package/dist/agents/bridge.d.ts +69 -0
  2. package/dist/agents/bridge.d.ts.map +1 -0
  3. package/dist/agents/bridge.js +295 -0
  4. package/dist/agents/bridge.js.map +1 -0
  5. package/dist/agents/cli_real.d.ts +38 -0
  6. package/dist/agents/cli_real.d.ts.map +1 -0
  7. package/dist/agents/cli_real.js +46 -0
  8. package/dist/agents/cli_real.js.map +1 -0
  9. package/dist/agents/config_schema.d.ts +1 -1
  10. package/dist/agents/config_schema.d.ts.map +1 -1
  11. package/dist/agents/config_schema.js +16 -0
  12. package/dist/agents/config_schema.js.map +1 -1
  13. package/dist/agents/defaults.d.ts.map +1 -1
  14. package/dist/agents/defaults.js.map +1 -1
  15. package/dist/agents/delegate.d.ts +36 -0
  16. package/dist/agents/delegate.d.ts.map +1 -0
  17. package/dist/agents/delegate.js +68 -0
  18. package/dist/agents/delegate.js.map +1 -0
  19. package/dist/agents/iterative_step.d.ts +95 -0
  20. package/dist/agents/iterative_step.d.ts.map +1 -0
  21. package/dist/agents/iterative_step.js +249 -0
  22. package/dist/agents/iterative_step.js.map +1 -0
  23. package/dist/agents/llm_step.d.ts +50 -0
  24. package/dist/agents/llm_step.d.ts.map +1 -0
  25. package/dist/agents/llm_step.js +28 -0
  26. package/dist/agents/llm_step.js.map +1 -0
  27. package/dist/agents/real_step_factory.d.ts +95 -0
  28. package/dist/agents/real_step_factory.d.ts.map +1 -0
  29. package/dist/agents/real_step_factory.js +51 -0
  30. package/dist/agents/real_step_factory.js.map +1 -0
  31. package/dist/agents/runner.d.ts +14 -0
  32. package/dist/agents/runner.d.ts.map +1 -1
  33. package/dist/agents/runner.js +10 -1
  34. package/dist/agents/runner.js.map +1 -1
  35. package/dist/agents/runtime.d.ts +115 -0
  36. package/dist/agents/runtime.d.ts.map +1 -0
  37. package/dist/agents/runtime.js +429 -0
  38. package/dist/agents/runtime.js.map +1 -0
  39. package/dist/agents/system_prompt.d.ts +36 -0
  40. package/dist/agents/system_prompt.d.ts.map +1 -0
  41. package/dist/agents/system_prompt.js +101 -0
  42. package/dist/agents/system_prompt.js.map +1 -0
  43. package/dist/agents/types.d.ts +12 -1
  44. package/dist/agents/types.d.ts.map +1 -1
  45. package/dist/agents/types.js.map +1 -1
  46. package/dist/bin/yf.d.ts.map +1 -1
  47. package/dist/bin/yf.js +9 -0
  48. package/dist/bin/yf.js.map +1 -1
  49. package/dist/chat/claude_cli.d.ts +42 -0
  50. package/dist/chat/claude_cli.d.ts.map +1 -0
  51. package/dist/chat/claude_cli.js +299 -0
  52. package/dist/chat/claude_cli.js.map +1 -0
  53. package/dist/chat/graph_snapshot.d.ts +38 -0
  54. package/dist/chat/graph_snapshot.d.ts.map +1 -0
  55. package/dist/chat/graph_snapshot.js +159 -0
  56. package/dist/chat/graph_snapshot.js.map +1 -0
  57. package/dist/chat/ingest_session.d.ts +24 -4
  58. package/dist/chat/ingest_session.d.ts.map +1 -1
  59. package/dist/chat/ingest_session.js +139 -4
  60. package/dist/chat/ingest_session.js.map +1 -1
  61. package/dist/chat/panel.d.ts.map +1 -1
  62. package/dist/chat/panel.js +1358 -0
  63. package/dist/chat/panel.js.map +1 -1
  64. package/dist/chat/server.d.ts +21 -0
  65. package/dist/chat/server.d.ts.map +1 -1
  66. package/dist/chat/server.js +904 -4
  67. package/dist/chat/server.js.map +1 -1
  68. package/dist/chat/tools/nac3_invoke.d.ts +5 -0
  69. package/dist/chat/tools/nac3_invoke.d.ts.map +1 -1
  70. package/dist/chat/tools/nac3_invoke.js +1 -0
  71. package/dist/chat/tools/nac3_invoke.js.map +1 -1
  72. package/dist/chat/tools.d.ts.map +1 -1
  73. package/dist/chat/tools.js +12 -0
  74. package/dist/chat/tools.js.map +1 -1
  75. package/dist/commands/agent.d.ts +12 -1
  76. package/dist/commands/agent.d.ts.map +1 -1
  77. package/dist/commands/agent.js +92 -1
  78. package/dist/commands/agent.js.map +1 -1
  79. package/dist/commands/chat.d.ts +10 -0
  80. package/dist/commands/chat.d.ts.map +1 -1
  81. package/dist/commands/chat.js +12 -1
  82. package/dist/commands/chat.js.map +1 -1
  83. package/dist/commands/director.d.ts +37 -0
  84. package/dist/commands/director.d.ts.map +1 -0
  85. package/dist/commands/director.js +290 -0
  86. package/dist/commands/director.js.map +1 -0
  87. package/dist/commands/keys_setup.d.ts +1 -0
  88. package/dist/commands/keys_setup.d.ts.map +1 -1
  89. package/dist/commands/keys_setup.js +61 -11
  90. package/dist/commands/keys_setup.js.map +1 -1
  91. package/dist/core/pilot_setup.d.ts +14 -1
  92. package/dist/core/pilot_setup.d.ts.map +1 -1
  93. package/dist/core/pilot_setup.js +62 -1
  94. package/dist/core/pilot_setup.js.map +1 -1
  95. package/dist/core/provider_keys.d.ts.map +1 -1
  96. package/dist/core/provider_keys.js +12 -5
  97. package/dist/core/provider_keys.js.map +1 -1
  98. package/dist/design/yujin_design_resolver.d.ts +77 -0
  99. package/dist/design/yujin_design_resolver.d.ts.map +1 -0
  100. package/dist/design/yujin_design_resolver.js +113 -0
  101. package/dist/design/yujin_design_resolver.js.map +1 -0
  102. package/dist/docs/doctrine/default-design-system.md +120 -0
  103. package/dist/docs/doctrine/language-sovereignty.md +143 -0
  104. package/dist/docs/doctrine/testing-policy.md +211 -0
  105. package/dist/nac3/approval_queue.d.ts +8 -0
  106. package/dist/nac3/approval_queue.d.ts.map +1 -1
  107. package/dist/nac3/approval_queue.js.map +1 -1
  108. package/dist/nac3/internal_manifest.d.ts.map +1 -1
  109. package/dist/nac3/internal_manifest.js +178 -0
  110. package/dist/nac3/internal_manifest.js.map +1 -1
  111. package/dist/office/excel.d.ts +22 -0
  112. package/dist/office/excel.d.ts.map +1 -1
  113. package/dist/office/excel.js +82 -0
  114. package/dist/office/excel.js.map +1 -1
  115. package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_open.json +22 -0
  116. package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_unlabeled_button.json +26 -0
  117. package/dist/qa/brain_matrix/fixtures/scenario_agent_director_consults_workflow_before_dispatch.json +42 -0
  118. package/dist/qa/brain_matrix/fixtures/scenario_analyst_extracts_then_returns.json +28 -0
  119. package/dist/qa/brain_matrix/fixtures/scenario_coder_consults_nac_spec_before_writing.json +28 -0
  120. package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_override_shadcn.json +45 -0
  121. package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_use_card_template.json +44 -0
  122. package/dist/qa/brain_matrix/fixtures/scenario_director_delegates_to_analyst.json +26 -0
  123. package/dist/qa/brain_matrix/fixtures/scenario_director_no_self_delegation.json +20 -0
  124. package/dist/qa/brain_matrix/fixtures/scenario_director_terminal_done_marker.json +19 -0
  125. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_default_design_system.json +50 -0
  126. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_language_sovereignty.json +53 -0
  127. package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_testing_policy.json +55 -0
  128. package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_not_conducive_spa_python.json +61 -0
  129. package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_user_picks_python.json +48 -0
  130. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_destructive_pauses_for_r8.json +42 -0
  131. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_happy_path_writes_pizarron.json +76 -0
  132. package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_network_timeout_graceful.json +41 -0
  133. package/dist/qa/brain_matrix/fixtures/scenario_no_hardcoded_color_use_token.json +47 -0
  134. package/dist/qa/brain_matrix/fixtures/scenario_office_excel_update_cell_picks_right_verb.json +26 -0
  135. package/dist/qa/brain_matrix/fixtures/scenario_scaffolder_destructive_pauses_for_approval.json +23 -0
  136. package/dist/qa/brain_matrix/fixtures/scenario_sumie_icon_pick_from_catalog.json +56 -0
  137. package/dist/qa/brain_matrix/fixtures/scenario_tester_uses_shell_exec_only.json +27 -0
  138. package/dist/version.d.ts +1 -1
  139. package/dist/version.js +1 -1
  140. package/dist/workflow/graph.d.ts +59 -0
  141. package/dist/workflow/graph.d.ts.map +1 -0
  142. package/dist/workflow/graph.js +137 -0
  143. package/dist/workflow/graph.js.map +1 -0
  144. package/dist/workflow/state.d.ts +34 -0
  145. package/dist/workflow/state.d.ts.map +1 -1
  146. package/dist/workflow/state.js.map +1 -1
  147. package/docs/doctrine/default-design-system.md +120 -0
  148. package/docs/doctrine/language-sovereignty.md +143 -0
  149. package/docs/doctrine/testing-policy.md +211 -0
  150. package/package.json +102 -100
  151. package/src/i18n/catalogs/ar.json +20 -1
  152. package/src/i18n/catalogs/de.json +20 -1
  153. package/src/i18n/catalogs/en.json +20 -21
  154. package/src/i18n/catalogs/es.json +20 -21
  155. package/src/i18n/catalogs/fr.json +20 -1
  156. package/src/i18n/catalogs/hi.json +20 -1
  157. package/src/i18n/catalogs/it.json +20 -1
  158. package/src/i18n/catalogs/ja.json +20 -1
  159. package/src/i18n/catalogs/pt.json +20 -1
  160. package/src/i18n/catalogs/zh.json +20 -1
  161. package/templates/sumi-context.template.md +57 -0
@@ -1,16 +1,24 @@
1
1
  /**
2
- * Spec ingest sessions (V1.40 of HITO 1).
2
+ * Spec ingest sessions (V1.40 of HITO 1 + Director sprint slice 9).
3
3
  *
4
4
  * Holds the NormalisedDocument + flattened-text + extracted
5
5
  * structure for every spec the user has dropped on the chat
6
- * panel. The data lives in memory while the chat server runs;
7
- * it is not persisted because the user has not yet approved
8
- * scaffolding (V1.42).
6
+ * panel.
9
7
  *
10
8
  * Module-scope so V1.38 ingest, V1.40 extract, V1.41 plan,
11
9
  * V1.42 approval, V1.43 scaffold can all see the same doc
12
10
  * without threading state through the HTTP layer.
13
11
  *
12
+ * Persistence (slice 9): every mutation flushes the affected
13
+ * session to ~/.yujin-forge/ingest/<project_slug>/<doc_id>.json.
14
+ * On boot the chat server calls loadProjectIngests(slug) to
15
+ * hydrate the in-memory map. This fixes the HITO 4 bug where
16
+ * extract+plan didn't survive a server restart.
17
+ *
18
+ * Back-compat: when the project slug is null (legacy callers,
19
+ * unit tests that did not set one), persistence is skipped --
20
+ * the module still works as a pure in-memory cache.
21
+ *
14
22
  * ASCII-only.
15
23
  */
16
24
  import type { NormalisedDocument } from '../reader/types.js';
@@ -72,6 +80,18 @@ export interface IngestSession {
72
80
  * chars at ~4 chars/token = ~16K tokens, comfortably under
73
81
  * Claude's input budget for the extraction call. */
74
82
  export declare const FLATTEN_MAX_CHARS: number;
83
+ export declare function setProjectSlugForIngest(slug: string | null): void;
84
+ export declare function ingestStoreRoot(): string;
85
+ /** Wait for every queued persist to settle. The chat server calls
86
+ * this from close() so that test teardowns (which fs.rm the home
87
+ * directory immediately after close) do not race with in-flight
88
+ * fire-and-forget writes. */
89
+ export declare function flushPendingIngestWrites(): Promise<void>;
90
+ /** Hydrate SESSIONS from disk for `<project_slug>`. Idempotent;
91
+ * safe to call multiple times. Existing in-memory entries with
92
+ * the same doc_id are overwritten by the disk copy (disk is the
93
+ * source of truth across restarts). */
94
+ export declare function loadProjectIngests(slug: string): Promise<void>;
75
95
  /** Build the flattened-text view of a NormalisedDocument. */
76
96
  export declare function flattenDocument(doc: NormalisedDocument): {
77
97
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ingest_session.d.ts","sourceRoot":"","sources":["../../src/chat/ingest_session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingest_session.d.ts","sourceRoot":"","sources":["../../src/chat/ingest_session.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,153 @@
1
1
  /**
2
- * Spec ingest sessions (V1.40 of HITO 1).
2
+ * Spec ingest sessions (V1.40 of HITO 1 + Director sprint slice 9).
3
3
  *
4
4
  * Holds the NormalisedDocument + flattened-text + extracted
5
5
  * structure for every spec the user has dropped on the chat
6
- * panel. The data lives in memory while the chat server runs;
7
- * it is not persisted because the user has not yet approved
8
- * scaffolding (V1.42).
6
+ * panel.
9
7
  *
10
8
  * Module-scope so V1.38 ingest, V1.40 extract, V1.41 plan,
11
9
  * V1.42 approval, V1.43 scaffold can all see the same doc
12
10
  * without threading state through the HTTP layer.
13
11
  *
12
+ * Persistence (slice 9): every mutation flushes the affected
13
+ * session to ~/.yujin-forge/ingest/<project_slug>/<doc_id>.json.
14
+ * On boot the chat server calls loadProjectIngests(slug) to
15
+ * hydrate the in-memory map. This fixes the HITO 4 bug where
16
+ * extract+plan didn't survive a server restart.
17
+ *
18
+ * Back-compat: when the project slug is null (legacy callers,
19
+ * unit tests that did not set one), persistence is skipped --
20
+ * the module still works as a pure in-memory cache.
21
+ *
14
22
  * ASCII-only.
15
23
  */
24
+ import { promises as fs } from 'node:fs';
25
+ import path from 'node:path';
26
+ import os from 'node:os';
16
27
  /** Hard cap on the flattened text we feed to Claude. ~64K
17
28
  * chars at ~4 chars/token = ~16K tokens, comfortably under
18
29
  * Claude's input budget for the extraction call. */
19
30
  export const FLATTEN_MAX_CHARS = 64 * 1024;
20
31
  const SESSIONS = new Map();
32
+ /* ============================================================
33
+ * Slice 9 -- disk persistence layer.
34
+ * ============================================================ */
35
+ let activeProjectSlug = null;
36
+ export function setProjectSlugForIngest(slug) {
37
+ activeProjectSlug = slug;
38
+ }
39
+ export function ingestStoreRoot() {
40
+ const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
41
+ return path.join(home, '.yujin-forge', 'ingest');
42
+ }
43
+ function projectDir() {
44
+ if (!activeProjectSlug)
45
+ return null;
46
+ return path.join(ingestStoreRoot(), activeProjectSlug);
47
+ }
48
+ function sessionFile(docId) {
49
+ const dir = projectDir();
50
+ if (!dir)
51
+ return null;
52
+ /* doc_id is path-friendly per NormalisedDocument contract. */
53
+ return path.join(dir, docId + '.json');
54
+ }
55
+ function serialiseSession(s) {
56
+ /* Strip undefined fields so the JSON round-trip is symmetric --
57
+ * absent fields stay absent in the deserialised object. */
58
+ const clean = {
59
+ doc_id: s.doc_id,
60
+ doc: s.doc,
61
+ flat_text: s.flat_text,
62
+ ingested_at: s.ingested_at,
63
+ };
64
+ if (s.extraction)
65
+ clean.extraction = s.extraction;
66
+ if (s.plan)
67
+ clean.plan = s.plan;
68
+ if (s.scaffold)
69
+ clean.scaffold = s.scaffold;
70
+ return JSON.stringify(clean, null, 2);
71
+ }
72
+ async function persistSession(s) {
73
+ const file = sessionFile(s.doc_id);
74
+ if (!file)
75
+ return;
76
+ await fs.mkdir(path.dirname(file), { recursive: true });
77
+ const tmp = file + '.tmp';
78
+ await fs.writeFile(tmp, serialiseSession(s), 'utf-8');
79
+ await fs.rename(tmp, file);
80
+ }
81
+ /** Per-doc serialisation: two rapid mutations on the same session
82
+ * must not race on the same file, otherwise the last write to
83
+ * arrive at disk may NOT reflect the last mutation in code (e.g.
84
+ * setScaffold + clearScaffold in quick succession leaving the
85
+ * scaffold field still present). We chain each new persist on the
86
+ * pending Promise for that doc_id. */
87
+ const PENDING_WRITES = new Map();
88
+ /** Best-effort, per-doc-serialised flush. The flow that triggered
89
+ * the mutation does not block on disk IO; we capture errors
90
+ * to console.error so a broken filesystem surfaces without
91
+ * crashing the chat server. */
92
+ function persistAsync(s) {
93
+ const prev = PENDING_WRITES.get(s.doc_id) || Promise.resolve();
94
+ /* Snapshot the session at enqueue time so the chained write
95
+ * reflects the state at the moment the mutator was called,
96
+ * not whatever the in-memory object has drifted to by then. */
97
+ const snapshot = JSON.parse(serialiseSession(s));
98
+ const next = prev.then(() => persistSession(snapshot)).catch((err) => {
99
+ try {
100
+ console.error('ingest_session: persist failed for ' + s.doc_id + ': '
101
+ + (err instanceof Error ? err.message : String(err)));
102
+ }
103
+ catch { /* console may be redirected -- swallow */ }
104
+ });
105
+ PENDING_WRITES.set(s.doc_id, next);
106
+ /* Garbage-collect entries that have fully settled, so the map
107
+ * does not grow unbounded over a long-lived chat server run. */
108
+ next.finally(() => {
109
+ if (PENDING_WRITES.get(s.doc_id) === next)
110
+ PENDING_WRITES.delete(s.doc_id);
111
+ });
112
+ }
113
+ /** Wait for every queued persist to settle. The chat server calls
114
+ * this from close() so that test teardowns (which fs.rm the home
115
+ * directory immediately after close) do not race with in-flight
116
+ * fire-and-forget writes. */
117
+ export async function flushPendingIngestWrites() {
118
+ const pendings = Array.from(PENDING_WRITES.values());
119
+ await Promise.allSettled(pendings);
120
+ }
121
+ /** Hydrate SESSIONS from disk for `<project_slug>`. Idempotent;
122
+ * safe to call multiple times. Existing in-memory entries with
123
+ * the same doc_id are overwritten by the disk copy (disk is the
124
+ * source of truth across restarts). */
125
+ export async function loadProjectIngests(slug) {
126
+ const dir = path.join(ingestStoreRoot(), slug);
127
+ let files;
128
+ try {
129
+ files = await fs.readdir(dir);
130
+ }
131
+ catch (err) {
132
+ if (err.code === 'ENOENT')
133
+ return;
134
+ throw err;
135
+ }
136
+ for (const f of files) {
137
+ if (!f.endsWith('.json'))
138
+ continue;
139
+ try {
140
+ const raw = await fs.readFile(path.join(dir, f), 'utf-8');
141
+ const parsed = JSON.parse(raw);
142
+ if (parsed && typeof parsed.doc_id === 'string') {
143
+ SESSIONS.set(parsed.doc_id, parsed);
144
+ }
145
+ }
146
+ catch {
147
+ /* Skip un-parseable file; do not abort the whole load. */
148
+ }
149
+ }
150
+ }
21
151
  /** Build the flattened-text view of a NormalisedDocument. */
22
152
  export function flattenDocument(doc) {
23
153
  const parts = [];
@@ -52,6 +182,7 @@ export function recordIngest(doc) {
52
182
  ingested_at: new Date().toISOString(),
53
183
  };
54
184
  SESSIONS.set(doc.id, session);
185
+ persistAsync(session);
55
186
  return session;
56
187
  }
57
188
  export function getIngest(docId) {
@@ -62,24 +193,28 @@ export function setExtraction(docId, extraction) {
62
193
  if (!s)
63
194
  throw new Error('ingest_session: no session for ' + docId);
64
195
  s.extraction = extraction;
196
+ persistAsync(s);
65
197
  }
66
198
  export function setPlan(docId, plan) {
67
199
  const s = SESSIONS.get(docId);
68
200
  if (!s)
69
201
  throw new Error('ingest_session: no session for ' + docId);
70
202
  s.plan = plan;
203
+ persistAsync(s);
71
204
  }
72
205
  export function setScaffold(docId, report) {
73
206
  const s = SESSIONS.get(docId);
74
207
  if (!s)
75
208
  throw new Error('ingest_session: no session for ' + docId);
76
209
  s.scaffold = report;
210
+ persistAsync(s);
77
211
  }
78
212
  export function clearScaffold(docId) {
79
213
  const s = SESSIONS.get(docId);
80
214
  if (!s)
81
215
  throw new Error('ingest_session: no session for ' + docId);
82
216
  delete s.scaffold;
217
+ persistAsync(s);
83
218
  }
84
219
  export function listIngest() {
85
220
  return Array.from(SESSIONS.values()).map((s) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"ingest_session.js","sourceRoot":"","sources":["../../src/chat/ingest_session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ingest_session.js","sourceRoot":"","sources":["../../src/chat/ingest_session.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAwuLxD"}
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/chat/panel.ts"],"names":[],"mappings":"AAkBA,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb;;;;;2BAKuB;IACvB,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAsjOxD"}