@lnar/cli 0.0.1-dev.5da411d → 0.0.1-dev.632e82b

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 (105) hide show
  1. package/README.md +16 -54
  2. package/dist/api-client.d.ts +19 -0
  3. package/dist/api-client.js +40 -0
  4. package/dist/api-client.js.map +1 -1
  5. package/dist/auth.d.ts +20 -0
  6. package/dist/auth.js +74 -0
  7. package/dist/auth.js.map +1 -0
  8. package/dist/browser.d.ts +1 -0
  9. package/dist/browser.js +68 -0
  10. package/dist/browser.js.map +1 -0
  11. package/dist/capture-client.d.ts +13 -0
  12. package/dist/capture-client.js +37 -0
  13. package/dist/capture-client.js.map +1 -0
  14. package/dist/capture-worker.d.ts +14 -0
  15. package/dist/capture-worker.js +105 -0
  16. package/dist/capture-worker.js.map +1 -0
  17. package/dist/cli.js +21 -0
  18. package/dist/cli.js.map +1 -1
  19. package/dist/commands/daemon.d.ts +2 -0
  20. package/dist/commands/daemon.js +114 -1
  21. package/dist/commands/daemon.js.map +1 -1
  22. package/dist/commands/login.d.ts +2 -0
  23. package/dist/commands/login.js +19 -9
  24. package/dist/commands/login.js.map +1 -1
  25. package/dist/commands/record.d.ts +7 -0
  26. package/dist/commands/record.js +117 -0
  27. package/dist/commands/record.js.map +1 -0
  28. package/dist/commands/scan.js +12 -0
  29. package/dist/commands/scan.js.map +1 -1
  30. package/dist/commands/sync.js +3 -0
  31. package/dist/commands/sync.js.map +1 -1
  32. package/dist/commands/up.js +19 -0
  33. package/dist/commands/up.js.map +1 -1
  34. package/dist/machine-id.d.ts +2 -0
  35. package/dist/machine-id.js +48 -0
  36. package/dist/machine-id.js.map +1 -0
  37. package/dist/pending-client.d.ts +1 -1
  38. package/dist/recording/bundle.d.ts +25 -0
  39. package/dist/recording/bundle.js +55 -0
  40. package/dist/recording/bundle.js.map +1 -0
  41. package/dist/recording/capture.d.ts +53 -0
  42. package/dist/recording/capture.js +163 -0
  43. package/dist/recording/capture.js.map +1 -0
  44. package/dist/recording/session.d.ts +30 -0
  45. package/dist/recording/session.js +47 -0
  46. package/dist/recording/session.js.map +1 -0
  47. package/dist/recording/types.d.ts +59 -0
  48. package/dist/recording/types.js +8 -0
  49. package/dist/recording/types.js.map +1 -0
  50. package/dist/run-client.d.ts +19 -0
  51. package/dist/run-client.js +44 -0
  52. package/dist/run-client.js.map +1 -0
  53. package/dist/run-worker.d.ts +25 -0
  54. package/dist/run-worker.js +85 -0
  55. package/dist/run-worker.js.map +1 -0
  56. package/dist/runtime/actions.d.ts +13 -0
  57. package/dist/runtime/actions.js +107 -0
  58. package/dist/runtime/actions.js.map +1 -0
  59. package/dist/runtime/client.d.ts +3 -0
  60. package/dist/runtime/client.js +85 -0
  61. package/dist/runtime/client.js.map +1 -0
  62. package/dist/runtime/login.d.ts +20 -0
  63. package/dist/runtime/login.js +34 -0
  64. package/dist/runtime/login.js.map +1 -0
  65. package/dist/runtime/loop.d.ts +28 -0
  66. package/dist/runtime/loop.js +68 -0
  67. package/dist/runtime/loop.js.map +1 -0
  68. package/dist/runtime/playbook.d.ts +49 -0
  69. package/dist/runtime/playbook.js +73 -0
  70. package/dist/runtime/playbook.js.map +1 -0
  71. package/dist/runtime/runner.d.ts +20 -0
  72. package/dist/runtime/runner.js +54 -0
  73. package/dist/runtime/runner.js.map +1 -0
  74. package/dist/runtime/types.d.ts +69 -0
  75. package/dist/runtime/types.js +10 -0
  76. package/dist/runtime/types.js.map +1 -0
  77. package/dist/scanners/claude-code-skills.d.ts +6 -0
  78. package/dist/scanners/claude-code-skills.js +201 -0
  79. package/dist/scanners/claude-code-skills.js.map +1 -0
  80. package/dist/scanners/claude-code.js +10 -3
  81. package/dist/scanners/claude-code.js.map +1 -1
  82. package/dist/scanners/index.js +3 -2
  83. package/dist/scanners/index.js.map +1 -1
  84. package/dist/service/files.d.ts +14 -2
  85. package/dist/service/files.js +16 -4
  86. package/dist/service/files.js.map +1 -1
  87. package/dist/service/install.js +83 -16
  88. package/dist/service/install.js.map +1 -1
  89. package/dist/sse-client.d.ts +72 -0
  90. package/dist/sse-client.js +174 -0
  91. package/dist/sse-client.js.map +1 -0
  92. package/dist/types.d.ts +43 -3
  93. package/dist/types.js +34 -2
  94. package/dist/types.js.map +1 -1
  95. package/dist/writers/claude-code.js +31 -10
  96. package/dist/writers/claude-code.js.map +1 -1
  97. package/dist/writers/registry.js +0 -4
  98. package/dist/writers/registry.js.map +1 -1
  99. package/package.json +11 -1
  100. package/dist/scanners/chatgpt.d.ts +0 -20
  101. package/dist/scanners/chatgpt.js +0 -49
  102. package/dist/scanners/chatgpt.js.map +0 -1
  103. package/dist/writers/chatgpt.d.ts +0 -8
  104. package/dist/writers/chatgpt.js +0 -12
  105. package/dist/writers/chatgpt.js.map +0 -1
@@ -11,11 +11,14 @@ import { applyPluginChange, PLUGIN_ACTIONS } from './claude-code-plugins.js';
11
11
  * → ~/.claude.json の top-level `mcpServers` を編集
12
12
  * - source_scope='local'
13
13
  * → ~/.claude.json の `projects[<project_path>].mcpServers` を編集
14
- * - source_scope='project' (.mcp.json, チーム共有)
15
- * → 未対応。team 共有ファイルを CLI が勝手に編集するのは事故の元なので
16
- * dashboard 側でも Disconnect ボタンを出さない方針。
14
+ * - source_scope='project' (.mcp.json, チーム共有 + agent_kind 非依存)
15
+ * → `<project_path>/.mcp.json` top-level `mcpServers` を編集。Anthropic
16
+ * が定義した形式だが、Cursor / VS Code 等他ツールも同じファイルを参照する
17
+ * クロスツール慣習として広まっているため、dashboard 側からも書き込みを
18
+ * 許可する。team 共有 (git にコミット) されているのでこの編集は repo の
19
+ * 作業ツリーに変更として現れる前提。
17
20
  * - source_scope='remote' / plugin 由来
18
- * → 同じく未対応 (claude.ai / plugin lifecycle の管理外)
21
+ * → 未対応 (claude.ai / plugin lifecycle の管理外)
19
22
  *
20
23
  * 形式: `{ "<server>": { type, command, args, url, env } }`
21
24
  * - env キーは spec.envKeys 由来。値は空文字で埋める (ユーザーが手動補完)。
@@ -40,7 +43,9 @@ const buildEntryFromSpec = (spec) => {
40
43
  return entry;
41
44
  };
42
45
  const globalConfigPath = (home = homedir()) => join(home, '.claude.json');
43
- const loadGlobalConfig = async (path) => {
46
+ // project scope (.mcp.json) project ディレクトリ直下に置かれる。
47
+ const projectConfigPath = (projectPath) => join(projectPath, '.mcp.json');
48
+ const loadJsonConfig = async (path) => {
44
49
  try {
45
50
  const text = await readFile(path, 'utf-8');
46
51
  return JSON.parse(text);
@@ -53,7 +58,10 @@ const loadGlobalConfig = async (path) => {
53
58
  };
54
59
  /**
55
60
  * 操作対象の mcpServers セクションへの参照を返す。
56
- * local の場合は projects[project_path].mcpServers を辿り、無ければ作る。
61
+ * - local : `projects[project_path].mcpServers` を辿り、無ければ作る
62
+ * - project: top-level `mcpServers` (`<project>/.mcp.json` の単純なルート構造)
63
+ * - global : top-level `mcpServers` (`~/.claude.json`)
64
+ *
57
65
  * config を mutate するので、戻り値を書き換えればそのまま永続化対象になる。
58
66
  */
59
67
  const resolveMcpServersSection = (config, change) => {
@@ -80,7 +88,8 @@ const resolveMcpServersSection = (config, change) => {
80
88
  }
81
89
  return mcpServers;
82
90
  }
83
- // global (= Claude Code の user scope) / null (旧データ互換) は top-level を見る
91
+ // global (= Claude Code の user scope) / project (.mcp.json) / null (旧データ互換) は
92
+ // ファイル直下の top-level mcpServers を見る (書き込み先パスのみ呼び元で振り分け)。
84
93
  let mcpServers = config.mcpServers;
85
94
  if (!mcpServers || typeof mcpServers !== 'object' || Array.isArray(mcpServers)) {
86
95
  mcpServers = {};
@@ -88,12 +97,24 @@ const resolveMcpServersSection = (config, change) => {
88
97
  }
89
98
  return mcpServers;
90
99
  };
100
+ /**
101
+ * 書き込み対象ファイルのパスを scope から導出。
102
+ */
103
+ const resolveConfigPath = (change, home) => {
104
+ if (change.source_scope === 'project') {
105
+ if (!change.project_path) {
106
+ throw new Error('source_scope=project requires project_path on the pending change');
107
+ }
108
+ return projectConfigPath(change.project_path);
109
+ }
110
+ return globalConfigPath(home);
111
+ };
91
112
  const applyChange = async (change, home = homedir()) => {
92
- if (change.source_scope === 'project' || change.source_scope === 'remote') {
113
+ if (change.source_scope === 'remote') {
93
114
  throw new Error(`claude-code writer does not support source_scope='${change.source_scope}'`);
94
115
  }
95
- const path = globalConfigPath(home);
96
- const config = await loadGlobalConfig(path);
116
+ const path = resolveConfigPath(change, home);
117
+ const config = await loadJsonConfig(path);
97
118
  const mcpServers = resolveMcpServersSection(config, change);
98
119
  if (change.action === 'add_server') {
99
120
  if (change.spec == null) {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/writers/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/writers/claude-code.ts"],"names":[],"mappings":"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"}
@@ -20,10 +20,6 @@ export const getWriter = async (kind) => {
20
20
  const { geminiCliWriter } = await import('./gemini-cli.js');
21
21
  return geminiCliWriter;
22
22
  }
23
- case 'chatgpt': {
24
- const { chatgptWriter } = await import('./chatgpt.js');
25
- return chatgptWriter;
26
- }
27
23
  default:
28
24
  return null;
29
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/writers/registry.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAe,EAA0B,EAAE;IACzE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC9D,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACnD,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACrD,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC5D,OAAO,eAAe,CAAC;QACzB,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;YACvD,OAAO,aAAa,CAAC;QACvB,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/writers/registry.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAe,EAA0B,EAAE;IACzE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC9D,OAAO,gBAAgB,CAAC;QAC1B,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;YACnD,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACrD,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC5D,OAAO,eAAe,CAAC;QACzB,CAAC;QACD;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@lnar/cli",
3
- "version": "0.0.1-dev.5da411d",
3
+ "version": "0.0.1-dev.632e82b",
4
4
  "description": "Lnar CLI — scans local AI agents (Claude / Claude Code, Codex CLI, Cursor, Gemini CLI, ChatGPT) for connected MCP servers and reports them to your lnar account.",
5
5
  "type": "module",
6
6
  "private": false,
7
7
  "bin": {
8
8
  "lnar": "./dist/cli.js"
9
9
  },
10
+ "exports": {
11
+ ".": "./dist/cli.js"
12
+ },
10
13
  "files": [
11
14
  "dist",
12
15
  "README.md"
@@ -24,13 +27,20 @@
24
27
  },
25
28
  "lnar:defaultApiBaseUrl": "https://api-dev.lnar.ai",
26
29
  "dependencies": {
30
+ "@google/genai": "^2.0.0",
31
+ "@modelcontextprotocol/sdk": "^1.12.0",
27
32
  "commander": "^12.1.0",
33
+ "playwright": "^1.49.0",
28
34
  "smol-toml": "^1.3.1",
35
+ "tar": "^7.4.3",
36
+ "tar-stream": "^3.2.0",
29
37
  "zod": "^4.4.3"
30
38
  },
31
39
  "devDependencies": {
32
40
  "@biomejs/biome": "^2.4.13",
33
41
  "@types/node": "^25.5.0",
42
+ "@types/tar": "^6.1.13",
43
+ "@types/tar-stream": "^3.1.4",
34
44
  "tsx": "^4.19.2",
35
45
  "typescript": "~5.6.2",
36
46
  "vitest": "^4.1.5"
@@ -1,20 +0,0 @@
1
- import type { AgentSnapshot } from '../types.js';
2
- /**
3
- * ChatGPT Desktop / ChatGPT connectors のスキャナー (placeholder)。
4
- *
5
- * 現状の制限:
6
- * ChatGPT Desktop (macOS) の connector 一覧は
7
- * `~/Library/Application Support/com.openai.chat/connector-apps-<uuid>/apps.data` に
8
- * **暗号化されたバイナリ** で保存されており、平文の MCP 設定として読めない。
9
- * 暗号鍵は OS Keychain (`com.openai.chat`) に格納されている可能性が高く、
10
- * ユーザー同意なくアクセスするのは不適切。
11
- *
12
- * したがって本スキャナーは「ChatGPT Desktop が **インストールされている**」ことだけを
13
- * 検出し、agent_kind='chatgpt' の空 snapshot を返す。MCP リストの取得は将来 OpenAI 側で
14
- * 公開 API が用意されるか、ユーザー操作で明示的に export してもらう必要がある。
15
- */
16
- export declare const chatgptDataDir: (home?: string, os?: NodeJS.Platform) => string | null;
17
- export declare const scanChatgpt: (options?: {
18
- home?: string;
19
- platform?: NodeJS.Platform;
20
- }) => Promise<AgentSnapshot | null>;
@@ -1,49 +0,0 @@
1
- import { stat } from 'node:fs/promises';
2
- import { homedir, platform } from 'node:os';
3
- import { join } from 'node:path';
4
- /**
5
- * ChatGPT Desktop / ChatGPT connectors のスキャナー (placeholder)。
6
- *
7
- * 現状の制限:
8
- * ChatGPT Desktop (macOS) の connector 一覧は
9
- * `~/Library/Application Support/com.openai.chat/connector-apps-<uuid>/apps.data` に
10
- * **暗号化されたバイナリ** で保存されており、平文の MCP 設定として読めない。
11
- * 暗号鍵は OS Keychain (`com.openai.chat`) に格納されている可能性が高く、
12
- * ユーザー同意なくアクセスするのは不適切。
13
- *
14
- * したがって本スキャナーは「ChatGPT Desktop が **インストールされている**」ことだけを
15
- * 検出し、agent_kind='chatgpt' の空 snapshot を返す。MCP リストの取得は将来 OpenAI 側で
16
- * 公開 API が用意されるか、ユーザー操作で明示的に export してもらう必要がある。
17
- */
18
- export const chatgptDataDir = (home = homedir(), os = platform()) => {
19
- if (os === 'darwin') {
20
- return join(home, 'Library', 'Application Support', 'com.openai.chat');
21
- }
22
- if (os === 'win32') {
23
- const appdata = process.env.APPDATA ?? join(home, 'AppData', 'Roaming');
24
- return join(appdata, 'OpenAI', 'ChatGPT');
25
- }
26
- // Linux 用クライアントは未公式
27
- return null;
28
- };
29
- const exists = async (path) => {
30
- if (path == null)
31
- return false;
32
- try {
33
- const s = await stat(path);
34
- return s.isDirectory();
35
- }
36
- catch {
37
- return false;
38
- }
39
- };
40
- export const scanChatgpt = async (options = {}) => {
41
- const dir = chatgptDataDir(options.home, options.platform);
42
- if (!(await exists(dir))) {
43
- return null;
44
- }
45
- // インストール検出済み。設定の読み出しは未対応 — 空 snapshot を返して
46
- // 「ユーザーが ChatGPT を使っている」事実だけ伝える。
47
- return { agentKind: 'chatgpt', servers: [] };
48
- };
49
- //# sourceMappingURL=chatgpt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/scanners/chatgpt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;;;;;;;;;;GAaG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,OAAe,OAAO,EAAE,EACxB,KAAsB,QAAQ,EAAE,EACjB,EAAE;IACjB,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC;IACD,oBAAoB;IACpB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,KAAK,EAAE,IAAmB,EAAoB,EAAE;IAC7D,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC9B,UAAyD,EAAE,EAC5B,EAAE;IACjC,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,2CAA2C;IAC3C,iCAAiC;IACjC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAC/C,CAAC,CAAC"}
@@ -1,8 +0,0 @@
1
- import type { Writer } from './index.js';
2
- /**
3
- * ChatGPT Desktop: connector データは OS Keychain で暗号化されており、
4
- * 平文の MCP 設定ファイルが存在しない。よって書き込みは未対応 (unsupported)。
5
- *
6
- * 将来 OpenAI 側が export / API を公開した場合に実装する。
7
- */
8
- export declare const chatgptWriter: Writer;
@@ -1,12 +0,0 @@
1
- /**
2
- * ChatGPT Desktop: connector データは OS Keychain で暗号化されており、
3
- * 平文の MCP 設定ファイルが存在しない。よって書き込みは未対応 (unsupported)。
4
- *
5
- * 将来 OpenAI 側が export / API を公開した場合に実装する。
6
- */
7
- export const chatgptWriter = {
8
- async apply(_change) {
9
- return 'unsupported';
10
- },
11
- };
12
- //# sourceMappingURL=chatgpt.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chatgpt.js","sourceRoot":"","sources":["../../src/writers/chatgpt.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,KAAK,CAAC,KAAK,CAAC,OAAO;QACjB,OAAO,aAAa,CAAA;IACtB,CAAC;CACF,CAAA"}