@lnar/cli 0.0.1-dev.e586780 → 0.0.1-dev.f1f5888

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 (47) hide show
  1. package/dist/api-client.js +2 -0
  2. package/dist/api-client.js.map +1 -1
  3. package/dist/browser.d.ts +1 -0
  4. package/dist/browser.js +68 -0
  5. package/dist/browser.js.map +1 -0
  6. package/dist/cli.js +5 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/daemon.d.ts +2 -0
  9. package/dist/commands/daemon.js +87 -1
  10. package/dist/commands/daemon.js.map +1 -1
  11. package/dist/commands/login.d.ts +2 -0
  12. package/dist/commands/login.js +19 -9
  13. package/dist/commands/login.js.map +1 -1
  14. package/dist/commands/scan.js +12 -0
  15. package/dist/commands/scan.js.map +1 -1
  16. package/dist/commands/sync.js +3 -0
  17. package/dist/commands/sync.js.map +1 -1
  18. package/dist/commands/up.js +19 -0
  19. package/dist/commands/up.js.map +1 -1
  20. package/dist/machine-id.d.ts +2 -0
  21. package/dist/machine-id.js +48 -0
  22. package/dist/machine-id.js.map +1 -0
  23. package/dist/pending-client.d.ts +1 -1
  24. package/dist/scanners/claude-code-skills.d.ts +6 -0
  25. package/dist/scanners/claude-code-skills.js +201 -0
  26. package/dist/scanners/claude-code-skills.js.map +1 -0
  27. package/dist/scanners/claude-code.js +10 -3
  28. package/dist/scanners/claude-code.js.map +1 -1
  29. package/dist/scanners/index.js +3 -2
  30. package/dist/scanners/index.js.map +1 -1
  31. package/dist/sse-client.d.ts +72 -0
  32. package/dist/sse-client.js +174 -0
  33. package/dist/sse-client.js.map +1 -0
  34. package/dist/types.d.ts +43 -3
  35. package/dist/types.js +34 -2
  36. package/dist/types.js.map +1 -1
  37. package/dist/writers/claude-code.js +31 -10
  38. package/dist/writers/claude-code.js.map +1 -1
  39. package/dist/writers/registry.js +0 -4
  40. package/dist/writers/registry.js.map +1 -1
  41. package/package.json +1 -1
  42. package/dist/scanners/chatgpt.d.ts +0 -20
  43. package/dist/scanners/chatgpt.js +0 -49
  44. package/dist/scanners/chatgpt.js.map +0 -1
  45. package/dist/writers/chatgpt.d.ts +0 -8
  46. package/dist/writers/chatgpt.js +0 -12
  47. package/dist/writers/chatgpt.js.map +0 -1
package/dist/types.d.ts CHANGED
@@ -4,7 +4,6 @@ export declare const AgentKind: z.ZodEnum<{
4
4
  codex: "codex";
5
5
  cursor: "cursor";
6
6
  gemini_cli: "gemini_cli";
7
- chatgpt: "chatgpt";
8
7
  }>;
9
8
  export type AgentKind = z.infer<typeof AgentKind>;
10
9
  export declare const McpTransport: z.ZodEnum<{
@@ -63,13 +62,30 @@ export declare const PluginEntry: z.ZodObject<{
63
62
  gitCommitSha: z.ZodOptional<z.ZodNullable<z.ZodString>>;
64
63
  }, z.core.$strip>;
65
64
  export type PluginEntry = z.infer<typeof PluginEntry>;
65
+ export declare const SkillScope: z.ZodEnum<{
66
+ project: "project";
67
+ user: "user";
68
+ }>;
69
+ export type SkillScope = z.infer<typeof SkillScope>;
70
+ export declare const SkillEntry: z.ZodObject<{
71
+ name: z.ZodString;
72
+ description: z.ZodString;
73
+ scope: z.ZodEnum<{
74
+ project: "project";
75
+ user: "user";
76
+ }>;
77
+ projectPath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
78
+ sourcePath: z.ZodString;
79
+ contentHash: z.ZodString;
80
+ body: z.ZodString;
81
+ }, z.core.$strip>;
82
+ export type SkillEntry = z.infer<typeof SkillEntry>;
66
83
  export declare const AgentSnapshot: z.ZodObject<{
67
84
  agentKind: z.ZodEnum<{
68
85
  claude_code: "claude_code";
69
86
  codex: "codex";
70
87
  cursor: "cursor";
71
88
  gemini_cli: "gemini_cli";
72
- chatgpt: "chatgpt";
73
89
  }>;
74
90
  agentVersion: z.ZodOptional<z.ZodString>;
75
91
  servers: z.ZodArray<z.ZodObject<{
@@ -107,10 +123,23 @@ export declare const AgentSnapshot: z.ZodObject<{
107
123
  lastUpdatedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
108
124
  gitCommitSha: z.ZodOptional<z.ZodNullable<z.ZodString>>;
109
125
  }, z.core.$strip>>>;
126
+ skills: z.ZodOptional<z.ZodArray<z.ZodObject<{
127
+ name: z.ZodString;
128
+ description: z.ZodString;
129
+ scope: z.ZodEnum<{
130
+ project: "project";
131
+ user: "user";
132
+ }>;
133
+ projectPath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
134
+ sourcePath: z.ZodString;
135
+ contentHash: z.ZodString;
136
+ body: z.ZodString;
137
+ }, z.core.$strip>>>;
110
138
  }, z.core.$strip>;
111
139
  export type AgentSnapshot = z.infer<typeof AgentSnapshot>;
112
140
  export declare const ScanResult: z.ZodObject<{
113
141
  hostname: z.ZodString;
142
+ machineId: z.ZodOptional<z.ZodString>;
114
143
  scannedAt: z.ZodString;
115
144
  agents: z.ZodArray<z.ZodObject<{
116
145
  agentKind: z.ZodEnum<{
@@ -118,7 +147,6 @@ export declare const ScanResult: z.ZodObject<{
118
147
  codex: "codex";
119
148
  cursor: "cursor";
120
149
  gemini_cli: "gemini_cli";
121
- chatgpt: "chatgpt";
122
150
  }>;
123
151
  agentVersion: z.ZodOptional<z.ZodString>;
124
152
  servers: z.ZodArray<z.ZodObject<{
@@ -156,6 +184,18 @@ export declare const ScanResult: z.ZodObject<{
156
184
  lastUpdatedAt: z.ZodOptional<z.ZodNullable<z.ZodString>>;
157
185
  gitCommitSha: z.ZodOptional<z.ZodNullable<z.ZodString>>;
158
186
  }, z.core.$strip>>>;
187
+ skills: z.ZodOptional<z.ZodArray<z.ZodObject<{
188
+ name: z.ZodString;
189
+ description: z.ZodString;
190
+ scope: z.ZodEnum<{
191
+ project: "project";
192
+ user: "user";
193
+ }>;
194
+ projectPath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
195
+ sourcePath: z.ZodString;
196
+ contentHash: z.ZodString;
197
+ body: z.ZodString;
198
+ }, z.core.$strip>>>;
159
199
  }, z.core.$strip>>;
160
200
  }, z.core.$strip>;
161
201
  export type ScanResult = z.infer<typeof ScanResult>;
package/dist/types.js CHANGED
@@ -3,8 +3,11 @@ import { z } from 'zod';
3
3
  // codex: Codex CLI (OpenAI)
4
4
  // cursor: Cursor IDE
5
5
  // gemini_cli: Google Gemini CLI (~/.gemini/settings.json)
6
- // chatgpt: ChatGPT (Desktop / connectors) — 設定の暗号化のため現状は placeholder
7
- export const AgentKind = z.enum(['claude_code', 'codex', 'cursor', 'gemini_cli', 'chatgpt']);
6
+ //
7
+ // chatgpt OS keychain で暗号化された設定にしかアクセスできず読み取り API
8
+ // 公開されていないため、現状サポート対象外。pending change として残しておくと
9
+ // AgentKind enum が広がるだけで実体が無いので、enum 自体から外す。
10
+ export const AgentKind = z.enum(['claude_code', 'codex', 'cursor', 'gemini_cli']);
8
11
  export const McpTransport = z.enum(['stdio', 'http', 'sse']);
9
12
  // global: マシン全体 (plugin / ~/.claude.json top-level)
10
13
  // project: .mcp.json (チーム共有 / repo にコミットされる)
@@ -38,15 +41,44 @@ export const PluginEntry = z.object({
38
41
  lastUpdatedAt: z.string().nullable().optional(),
39
42
  gitCommitSha: z.string().nullable().optional(),
40
43
  });
44
+ // user: ~/.claude/skills/<name>/SKILL.md (マシン共通、個人 skill)
45
+ // project: <projectDir>/.claude/skills/<name>/SKILL.md (repo にコミットされ、チームで共有)
46
+ //
47
+ // plugin 同梱の skill (~/.claude/plugins/.../skills/...) は plugin 自体の情報から派生で
48
+ // 分かるため、本 snapshot には含めない (二重送信を避ける)。
49
+ export const SkillScope = z.enum(['user', 'project']);
50
+ export const SkillEntry = z.object({
51
+ // SKILL.md の YAML frontmatter から取り出した `name`
52
+ name: z.string(),
53
+ // SKILL.md の YAML frontmatter から取り出した `description` (skill のトリガー条件説明)
54
+ description: z.string(),
55
+ scope: SkillScope,
56
+ // project scope の場合のみ、所属する project ディレクトリ
57
+ projectPath: z.string().nullable().optional(),
58
+ // SKILL.md の絶対パス
59
+ sourcePath: z.string(),
60
+ // SKILL.md 全体の SHA-256 (先頭 16 桁) — 内容変更の検知に使う
61
+ contentHash: z.string(),
62
+ // SKILL.md 本文 (frontmatter 含む全体)。dashboard で開いたとき内容を見せるため。
63
+ // 多くても数 KB なので毎スキャンで送ってよい (圧縮効くので)。
64
+ body: z.string(),
65
+ });
41
66
  export const AgentSnapshot = z.object({
42
67
  agentKind: AgentKind,
43
68
  agentVersion: z.string().optional(),
44
69
  servers: z.array(McpServerEntry),
45
70
  // Claude Code のみ意味があるので、他 agent_kind では未指定でよい (omit = 空)。
46
71
  plugins: z.array(PluginEntry).optional(),
72
+ // Claude Code のみ意味があるので、他 agent_kind では未指定でよい (omit = 空)。
73
+ skills: z.array(SkillEntry).optional(),
47
74
  });
48
75
  export const ScanResult = z.object({
76
+ // hostname は macOS のネットワーク状況により `xxx.local` ↔ `xxx.kkbnj1.kt.home.ne.jp`
77
+ // のように変動する。表示用に保持しつつ、agent 同一性の判定には machineId を使う。
49
78
  hostname: z.string(),
79
+ // ~/.config/lnar/machine.json に永続化される UUID。同一マシンを跨ぐスキャンを
80
+ // 1 agent に集約するためのキー。古い CLI 互換のため optional。
81
+ machineId: z.string().optional(),
50
82
  scannedAt: z.string(),
51
83
  agents: z.array(AgentSnapshot),
52
84
  });
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -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,6 +1,6 @@
1
1
  {
2
2
  "name": "@lnar/cli",
3
- "version": "0.0.1-dev.e586780",
3
+ "version": "0.0.1-dev.f1f5888",
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,
@@ -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"}