@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
@@ -0,0 +1,54 @@
1
+ /**
2
+ * playbook を実行時パラメータでローカルブラウザ実行する (Demo-to-MCP / Phase 4)。
3
+ *
4
+ * ローカルの永続プロファイルでブラウザを起動 → computer use ループ。ログイン要求は
5
+ * 可視ブラウザでユーザーが対応し、ポーリングで自動再開する。認証情報は保存しない。
6
+ */
7
+ import { homedir } from 'node:os';
8
+ import { join } from 'node:path';
9
+ import { chromium } from 'playwright';
10
+ import { createGeminiClient } from './client.js';
11
+ import { waitForLoginToClear } from './login.js';
12
+ import { runTask } from './loop.js';
13
+ import { buildTaskPrompt } from './playbook.js';
14
+ const DEFAULT_VIEWPORT = { width: 1280, height: 800 };
15
+ function defaultProfileDir() {
16
+ return join(homedir(), '.config', 'lnar', 'run-profile');
17
+ }
18
+ /** playbook を実行し、結果を返す。 */
19
+ export async function runPlaybook(playbook, params, options = {}) {
20
+ const log = options.logger ?? (() => { });
21
+ const client = options.client ?? createGeminiClient(options.apiKey);
22
+ const task = buildTaskPrompt(playbook, params, options.purpose);
23
+ const context = await chromium.launchPersistentContext(options.profileDir ?? defaultProfileDir(), { headless: options.headless ?? false, viewport: DEFAULT_VIEWPORT });
24
+ try {
25
+ const page = context.pages()[0] ?? (await context.newPage());
26
+ if (options.startUrl) {
27
+ await page.goto(options.startUrl, { waitUntil: 'domcontentloaded' });
28
+ }
29
+ const hooks = {
30
+ onAction: (turn, name, intent) => log(`[turn ${turn}] ${name}${intent ? ` — ${intent}` : ''}`),
31
+ onLoginRequired: async (p) => {
32
+ // タイムアウト時は false。ログイン未完了のまま続行すると不安定になるため中断する。
33
+ const cleared = await waitForLoginToClear(p, { log });
34
+ if (!cleared) {
35
+ throw new Error('ログイン待機がタイムアウトしました。タスクを中断します。');
36
+ }
37
+ },
38
+ onSafetyDecision: async (explanation) => {
39
+ if (options.autoAcknowledgeSafety) {
40
+ log(`⚠️ safety: ${explanation} (auto-acknowledged)`);
41
+ return true;
42
+ }
43
+ log(`⚠️ safety: ${explanation} (拒否して中断)`);
44
+ return false;
45
+ },
46
+ };
47
+ return await runTask(client, page, { task, maxTurns: options.maxTurns ?? 40 }, hooks);
48
+ }
49
+ finally {
50
+ if (context.browser()?.isConnected())
51
+ await context.close().catch(() => { });
52
+ }
53
+ }
54
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runtime/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Gemini computer use (browser) のランタイム型 (Demo-to-MCP / Phase 4)。
3
+ *
4
+ * Phase 0 スパイクで実 API 検証済みの形を本体へ昇格したもの。
5
+ * `@google/genai` >= 2.0.0 の interactions API (`steps` スキーマ) に対応する。
6
+ */
7
+ export type ActionName = 'click' | 'double_click' | 'right_click' | 'type' | 'navigate' | 'scroll' | 'press_key' | 'hotkey' | 'drag_and_drop' | 'go_back' | 'go_forward' | 'take_screenshot' | 'wait';
8
+ export interface SafetyDecision {
9
+ readonly decision: 'require_confirmation' | string;
10
+ readonly explanation: string;
11
+ }
12
+ export interface ActionArguments {
13
+ readonly x?: number;
14
+ readonly y?: number;
15
+ readonly start_x?: number;
16
+ readonly start_y?: number;
17
+ readonly end_x?: number;
18
+ readonly end_y?: number;
19
+ readonly text?: string;
20
+ readonly press_enter?: boolean;
21
+ readonly url?: string;
22
+ readonly direction?: 'up' | 'down' | 'left' | 'right';
23
+ readonly magnitude_in_pixels?: number;
24
+ readonly key?: string;
25
+ readonly keys?: ReadonlyArray<string>;
26
+ readonly seconds?: number;
27
+ readonly intent?: string;
28
+ }
29
+ export interface FunctionCallStep {
30
+ readonly type: 'function_call';
31
+ readonly id: string;
32
+ readonly name: ActionName;
33
+ readonly arguments: ActionArguments;
34
+ readonly safety_decision?: SafetyDecision;
35
+ }
36
+ export interface TextStep {
37
+ readonly type: 'text';
38
+ readonly text: string;
39
+ }
40
+ export type InteractionStep = FunctionCallStep | TextStep;
41
+ export interface Interaction {
42
+ readonly id: string;
43
+ readonly steps: ReadonlyArray<InteractionStep>;
44
+ }
45
+ export type InteractionInput = {
46
+ readonly type: 'text';
47
+ readonly text: string;
48
+ } | {
49
+ readonly type: 'image';
50
+ readonly data: string;
51
+ readonly mime_type: 'image/png';
52
+ } | {
53
+ readonly type: 'function_result';
54
+ readonly name: string;
55
+ readonly call_id: string;
56
+ readonly result: ReadonlyArray<{
57
+ readonly type: 'text';
58
+ readonly text: string;
59
+ } | {
60
+ readonly type: 'image';
61
+ readonly data: string;
62
+ readonly mime_type: 'image/png';
63
+ }>;
64
+ };
65
+ export interface ComputerUseClient {
66
+ createInitial(input: ReadonlyArray<InteractionInput>): Promise<Interaction>;
67
+ continueFrom(previousInteractionId: string, input: ReadonlyArray<InteractionInput>): Promise<Interaction>;
68
+ }
69
+ export declare function isFunctionCall(step: InteractionStep): step is FunctionCallStep;
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Gemini computer use (browser) のランタイム型 (Demo-to-MCP / Phase 4)。
3
+ *
4
+ * Phase 0 スパイクで実 API 検証済みの形を本体へ昇格したもの。
5
+ * `@google/genai` >= 2.0.0 の interactions API (`steps` スキーマ) に対応する。
6
+ */
7
+ export function isFunctionCall(step) {
8
+ return step.type === 'function_call';
9
+ }
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiFH,MAAM,UAAU,cAAc,CAAC,IAAqB;IAClD,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC;AACvC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { SkillEntry } from '../types.js';
2
+ export interface ScanClaudeCodeSkillsOptions {
3
+ home?: string;
4
+ cwd?: string;
5
+ }
6
+ export declare const scanClaudeCodeSkills: (options?: ScanClaudeCodeSkillsOptions) => Promise<SkillEntry[]>;
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Claude Code の skill インストール状態をスキャンする。
3
+ *
4
+ * skill とは: `<scope>/.claude/skills/<name>/SKILL.md` に置かれた agent 用の
5
+ * 「呼び出し可能な手順書」。各 SKILL.md は YAML frontmatter で `name` と
6
+ * `description` を宣言する。
7
+ *
8
+ * スキャン対象:
9
+ * - user: ~/.claude/skills/<name>/SKILL.md
10
+ * - project: <projectDir>/.claude/skills/<name>/SKILL.md
11
+ * ※ `<projectDir>` は `~/.claude.json#projects` に登録されたパスと
12
+ * 現在の cwd を巡回する (claude-code.ts の MCP スキャンと同じ流儀)
13
+ *
14
+ * 明示的に **対象外**:
15
+ * - ~/.claude/plugins/.../skills/<name>/SKILL.md (plugin 同梱)
16
+ * plugin の情報自体が別途 plugin scanner で取れているため、ここで二重送信しない。
17
+ *
18
+ * 値ではなく状態 (どの skill が入っていて、その frontmatter は何か) だけを送る。
19
+ * SKILL.md 本文は contentHash 経由で「変わったかどうか」だけ追跡する。
20
+ */
21
+ import { createHash } from 'node:crypto';
22
+ import { readdir, readFile, stat } from 'node:fs/promises';
23
+ import { homedir } from 'node:os';
24
+ import { join } from 'node:path';
25
+ import { readJsonIfExists } from './_normalize.js';
26
+ /**
27
+ * YAML frontmatter の最小パーサ。
28
+ *
29
+ * SKILL.md は実質的に `name:` と `description:` の 2 キーしか使わないので、
30
+ * 完全な YAML パーサは入れず、以下のサブセットだけ扱う:
31
+ * - `key: value` (single-line scalar)
32
+ * - `key: "value"` / `'value'` (quoted scalar)
33
+ * - `key: >` / `key: |` の後の indent された継続行 (folded / literal block scalar)
34
+ *
35
+ * これ以外 (リスト、ネスト、anchor 等) は SKILL.md には現れないので未対応。
36
+ * 想定外の構文が来たら値は空文字になり、上位で `null` 扱いされて drop される。
37
+ */
38
+ const parseFrontmatter = (text) => {
39
+ // 先頭が `---\n` で始まらなければ frontmatter なし
40
+ if (!text.startsWith('---\n') && !text.startsWith('---\r\n'))
41
+ return null;
42
+ const lines = text.split(/\r?\n/);
43
+ // 最初の `---` を飛ばし、次の `---` (or `...`) までを frontmatter とみなす
44
+ let endIdx = -1;
45
+ for (let i = 1; i < lines.length; i++) {
46
+ const trimmed = lines[i]?.trim();
47
+ if (trimmed === '---' || trimmed === '...') {
48
+ endIdx = i;
49
+ break;
50
+ }
51
+ }
52
+ if (endIdx === -1)
53
+ return null;
54
+ const result = {};
55
+ let i = 1;
56
+ while (i < endIdx) {
57
+ const line = lines[i] ?? '';
58
+ const m = line.match(/^([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/);
59
+ if (!m) {
60
+ i += 1;
61
+ continue;
62
+ }
63
+ const [, key, rawValueRaw] = m;
64
+ if (!key) {
65
+ i += 1;
66
+ continue;
67
+ }
68
+ const rawValue = (rawValueRaw ?? '').trim();
69
+ if (rawValue === '>' || rawValue === '|') {
70
+ // block scalar: 次の indented 行を全て集める
71
+ const collected = [];
72
+ const baseIndent = (lines[i + 1] ?? '').match(/^(\s*)/)?.[1]?.length ?? 0;
73
+ let j = i + 1;
74
+ while (j < endIdx) {
75
+ const nextLine = lines[j] ?? '';
76
+ if (nextLine.trim() === '') {
77
+ collected.push('');
78
+ j += 1;
79
+ continue;
80
+ }
81
+ const indent = nextLine.match(/^(\s*)/)?.[1]?.length ?? 0;
82
+ if (indent < Math.max(baseIndent, 1))
83
+ break;
84
+ collected.push(nextLine.slice(baseIndent));
85
+ j += 1;
86
+ }
87
+ result[key] =
88
+ rawValue === '>' ? collected.join(' ').replace(/\s+/g, ' ').trim() : collected.join('\n');
89
+ i = j;
90
+ continue;
91
+ }
92
+ // single-line: クォート除去のみ最小対応
93
+ result[key] = stripQuotes(rawValue);
94
+ i += 1;
95
+ }
96
+ const name = result.name?.trim();
97
+ const description = result.description?.trim();
98
+ if (!name || !description)
99
+ return null;
100
+ return { name, description };
101
+ };
102
+ const stripQuotes = (s) => {
103
+ if (s.length >= 2) {
104
+ const first = s[0];
105
+ const last = s[s.length - 1];
106
+ if ((first === '"' && last === '"') || (first === "'" && last === "'")) {
107
+ return s.slice(1, -1);
108
+ }
109
+ }
110
+ return s;
111
+ };
112
+ // ---------------------------------------------------------------------------
113
+ // ファイルシステム走査
114
+ // ---------------------------------------------------------------------------
115
+ const hashContent = (text) => createHash('sha256').update(text).digest('hex').slice(0, 16);
116
+ const isDirectory = async (path) => {
117
+ try {
118
+ return (await stat(path)).isDirectory();
119
+ }
120
+ catch {
121
+ return false;
122
+ }
123
+ };
124
+ const readSkillFile = async (skillsDir, childName, scope, projectPath) => {
125
+ // 想定構造: <skillsDir>/<childName>/SKILL.md
126
+ // childName 自体が直接 SKILL.md ということは Claude Code の仕様上ない。
127
+ const dir = join(skillsDir, childName);
128
+ if (!(await isDirectory(dir)))
129
+ return null;
130
+ const filePath = join(dir, 'SKILL.md');
131
+ let body;
132
+ try {
133
+ body = await readFile(filePath, 'utf-8');
134
+ }
135
+ catch (err) {
136
+ if (err.code === 'ENOENT')
137
+ return null;
138
+ return null;
139
+ }
140
+ const front = parseFrontmatter(body);
141
+ if (front == null)
142
+ return null;
143
+ return {
144
+ name: front.name,
145
+ description: front.description,
146
+ scope,
147
+ projectPath: projectPath ?? null,
148
+ sourcePath: filePath,
149
+ contentHash: hashContent(body),
150
+ body,
151
+ };
152
+ };
153
+ const scanSkillsDirectory = async (skillsDir, scope, projectPath) => {
154
+ let entries;
155
+ try {
156
+ entries = await readdir(skillsDir);
157
+ }
158
+ catch (err) {
159
+ if (err.code === 'ENOENT')
160
+ return [];
161
+ return [];
162
+ }
163
+ const results = await Promise.all(entries.map((name) => readSkillFile(skillsDir, name, scope, projectPath)));
164
+ return results.filter((s) => s !== null);
165
+ };
166
+ const dedupeByPath = (skills) => {
167
+ // 巡回中に同じ project を重複して見ることがある (cwd と ~/.claude.json#projects の両方に
168
+ // 入っている場合など) ので、sourcePath で de-dup する。
169
+ const seen = new Map();
170
+ for (const s of skills) {
171
+ if (!seen.has(s.sourcePath))
172
+ seen.set(s.sourcePath, s);
173
+ }
174
+ return Array.from(seen.values());
175
+ };
176
+ export const scanClaudeCodeSkills = async (options = {}) => {
177
+ const home = options.home ?? homedir();
178
+ const cwd = options.cwd ?? process.cwd();
179
+ // user scope: ~/.claude/skills/
180
+ const userSkillsDir = join(home, '.claude', 'skills');
181
+ // project scope: ~/.claude.json#projects のキー + cwd を全部巡回。
182
+ // MCP スキャン (claude-code.ts) と同じ巡回ロジック。
183
+ const claudeJsonPath = join(home, '.claude.json');
184
+ const projectDirs = new Set();
185
+ projectDirs.add(cwd);
186
+ const root = await readJsonIfExists(claudeJsonPath);
187
+ if (root && typeof root === 'object' && !Array.isArray(root)) {
188
+ const projects = root.projects;
189
+ if (projects && typeof projects === 'object' && !Array.isArray(projects)) {
190
+ for (const dir of Object.keys(projects)) {
191
+ projectDirs.add(dir);
192
+ }
193
+ }
194
+ }
195
+ const [userSkills, ...projectSkillSets] = await Promise.all([
196
+ scanSkillsDirectory(userSkillsDir, 'user', null),
197
+ ...Array.from(projectDirs).map((dir) => scanSkillsDirectory(join(dir, '.claude', 'skills'), 'project', dir)),
198
+ ]);
199
+ return dedupeByPath([...userSkills, ...projectSkillSets.flat()]);
200
+ };
201
+ //# sourceMappingURL=claude-code-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-skills.js","sourceRoot":"","sources":["../../src/scanners/claude-code-skills.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { promisify } from 'node:util';
5
5
  import { hashConfig } from '../hash.js';
6
6
  import { extractFromMcpServersField, readJsonIfExists } from './_normalize.js';
7
7
  import { scanClaudeCodePlugins } from './claude-code-plugins.js';
8
+ import { scanClaudeCodeSkills } from './claude-code-skills.js';
8
9
  const execAsync = promisify(exec);
9
10
  export const claudeCodePaths = (home = homedir(), cwd = process.cwd()) => ({
10
11
  global: join(home, '.claude.json'),
@@ -194,12 +195,13 @@ export const scanClaudeCode = async (options = {}) => {
194
195
  const cwd = options.cwd ?? process.cwd();
195
196
  const includeRemote = options.includeRemote ?? true;
196
197
  const paths = claudeCodePaths(home, cwd);
197
- const [projectShared, globalAndLocal, plugins, remote, installedPlugins] = await Promise.all([
198
+ const [projectShared, globalAndLocal, plugins, remote, installedPlugins, installedSkills] = await Promise.all([
198
199
  readAllProjectShared(paths.global, cwd),
199
200
  readGlobalClaudeJson(paths.global),
200
201
  readPluginServers(paths.pluginsManifest),
201
202
  includeRemote ? scanClaudeAiRemote() : Promise.resolve([]),
202
203
  scanClaudeCodePlugins(home),
204
+ scanClaudeCodeSkills({ home, cwd }),
203
205
  ]);
204
206
  const all = [
205
207
  ...projectShared,
@@ -208,7 +210,7 @@ export const scanClaudeCode = async (options = {}) => {
208
210
  ...plugins,
209
211
  ...remote,
210
212
  ];
211
- if (all.length === 0 && installedPlugins.length === 0) {
213
+ if (all.length === 0 && installedPlugins.length === 0 && installedSkills.length === 0) {
212
214
  // 検出ゼロでもファイルが一つでも存在すれば「Claude Code を使っているマシン」と
213
215
  // みなして空 snapshot を返す。すべて読めなかった場合のみ null。
214
216
  const anyConfigSeen = (await readJsonIfExists(paths.global)) !== null ||
@@ -216,6 +218,11 @@ export const scanClaudeCode = async (options = {}) => {
216
218
  if (!anyConfigSeen)
217
219
  return null;
218
220
  }
219
- return { agentKind: 'claude_code', servers: all, plugins: installedPlugins };
221
+ return {
222
+ agentKind: 'claude_code',
223
+ servers: all,
224
+ plugins: installedPlugins,
225
+ skills: installedSkills,
226
+ };
220
227
  };
221
228
  //# sourceMappingURL=claude-code.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/scanners/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAe,OAAO,EAAE,EAAE,MAAc,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACzF,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;IAClC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;IAC/B,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,wBAAwB,CAAC;CAC5E,CAAC,CAAC;AAEH,8EAA8E;AAC9E,wDAAwD;AACxD,EAAE;AACF,iEAAiE;AACjE,gEAAgE;AAChE,kDAAkD;AAClD,kEAAkE;AAClE,8EAA8E;AAE9E,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAY,EAA6B,EAAE;IAC1E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,OAAO,0BAA0B,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAAE,UAAkB,EAAE,GAAW,EAA6B,EAAE;IAChG,yCAAyC;IACzC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAI,IAAgC,CAAC,QAAQ,CAAC;QAC5D,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAmC,CAAC,EAAE,CAAC;gBACnE,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAChF,CAAC;IACF,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC,CAAC;AAEF,8EAA8E;AAC9E,uBAAuB;AACvB,qDAAqD;AACrD,iFAAiF;AACjF,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG,KAAK,EAChC,IAAY,EACoD,EAAE;IAClE,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,IAAI,GAAG,IAA+B,CAAC;IAE7C,MAAM,aAAa,GAAG,0BAA0B,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAErF,MAAM,YAAY,GAAqB,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,KAAK,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAmC,CAAC,EAAE,CAAC;YAC9F,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ;gBAAE,SAAS;YAChE,MAAM,OAAO,GAAG,0BAA0B,CACxC,YAAY,EACZ,YAAY,EACZ,OAAO,EACP,GAAG,IAAI,aAAa,WAAW,GAAG,CACnC,CAAC;YACF,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACxD,CAAC,CAAC;AAaF,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC5C,qDAAqD;IACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,WAAmB,EAA2C,EAAE;IAC/F,kCAAkC;IAClC,0FAA0F;IAC1F,sFAAsF;IACtF,gCAAgC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACjF,MAAM,IAAI,GAAG,IAA+B,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;IAChC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,OAAO,OAAkC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,YAAoB,EAA6B,EAAE;IAClF,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACxD,MAAM,OAAO,GAAI,IAAgC,CAAC,OAAO,CAAC;IAC1D,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAkC,CAAC,EAAE,CAAC;QACrF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEf,KAAK,MAAM,MAAM,IAAI,OAAkC,EAAE,CAAC;YACxD,MAAM,WAAW,GAAG,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;YACvF,IAAI,WAAW,IAAI,IAAI;gBAAE,SAAS;YAClC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,MAAM,IAAI,IAAI;gBAAE,MAAM;YAC1B,KAAK,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,SAAS;gBAC9C,qEAAqE;gBACrE,sDAAsD;gBACtD,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;gBACtD,MAAM,OAAO,GAAG,0BAA0B,CACxC,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAC/B,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,gDAAgD;oBAChD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,UAAU,IAAI,IAAI,UAAU,EAAE,EAAE,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YACD,MAAM,CAAC,2CAA2C;QACpD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,8EAA8E;AAC9E,2BAA2B;AAC3B,kDAAkD;AAClD,oDAAoD;AACpD,8EAA8E;AAE9E,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAEtC,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,MAAc,EAAoB,EAAE;IAC9E,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;YAAE,SAAS;QACjD,yDAAyD;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,QAAQ,GAAG,CAAC;YAAE,SAAS;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;aAC1E,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;aAC/B,IAAI,EAAE,CAAC;QAEV,IAAI,SAAS,GAAiB,MAAM,CAAC;QACrC,IAAI,GAAuB,CAAC;QAC5B,IAAI,OAA2B,CAAC;QAChC,IAAI,IAA0B,CAAC;QAC/B,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,GAAG,GAAG,UAAU,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,OAAO,CAAC;YACpB,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,SAAS;YACT,OAAO;YACP,IAAI;YACJ,GAAG;YACH,UAAU,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACzD,WAAW,EAAE,QAAQ;YACrB,UAAU,EAAE,mBAAmB;SAChC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,IAA+B,EAAE;IAC/D,IAAI,CAAC;QACH,+DAA+D;QAC/D,oDAAoD;QACpD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE;YACpD,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;SAC3B,CAAC,CAAC;QACH,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAYF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,UAAiC,EAAE,EACJ,EAAE;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IAEpD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEzC,MAAM,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3F,oBAAoB,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC;QACvC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC;QAClC,iBAAiB,CAAC,KAAK,CAAC,eAAe,CAAC;QACxC,aAAa,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAsB,CAAC;QAC9E,qBAAqB,CAAC,IAAI,CAAC;KAC5B,CAAC,CAAC;IAEH,MAAM,GAAG,GAAqB;QAC5B,GAAG,aAAa;QAChB,GAAG,cAAc,CAAC,MAAM;QACxB,GAAG,cAAc,CAAC,KAAK;QACvB,GAAG,OAAO;QACV,GAAG,MAAM;KACV,CAAC;IAEF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,+CAA+C;QAC/C,yCAAyC;QACzC,MAAM,aAAa,GACjB,CAAC,MAAM,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI;YAC/C,CAAC,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;QACnD,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;IAClC,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC/E,CAAC,CAAC"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/scanners/claude-code.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,16 @@
1
- import { scanChatgpt } from './chatgpt.js';
2
1
  import { scanClaudeCode } from './claude-code.js';
3
2
  import { scanCodex } from './codex.js';
4
3
  import { scanCursor } from './cursor.js';
5
4
  import { scanGeminiCli } from './gemini-cli.js';
5
+ // ChatGPT は OS keychain で設定が暗号化されており、現状読み取り API が無いため
6
+ // scanner / agent_kind から外している。再追加する場合は scanners/chatgpt.ts と
7
+ // writers/chatgpt.ts を復活させて runAllScanners と AgentKind enum に戻すこと。
6
8
  export const runAllScanners = async (options = {}) => {
7
9
  const results = await Promise.all([
8
10
  scanClaudeCode(options),
9
11
  scanCodex({ home: options.home }),
10
12
  scanCursor(options),
11
13
  scanGeminiCli(options),
12
- scanChatgpt({ home: options.home }),
13
14
  ]);
14
15
  return results.filter((r) => r !== null);
15
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanners/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,UAA0B,EAAE,EACF,EAAE;IAC5B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChC,cAAc,CAAC,OAAO,CAAC;QACvB,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,UAAU,CAAC,OAAO,CAAC;QACnB,aAAa,CAAC,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;KACpC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC/D,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanners/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,sDAAsD;AACtD,8DAA8D;AAC9D,mEAAmE;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,UAA0B,EAAE,EAA4B,EAAE;IAC7F,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAChC,cAAc,CAAC,OAAO,CAAC;QACvB,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACjC,UAAU,CAAC,OAAO,CAAC;QACnB,aAAa,CAAC,OAAO,CAAC;KACvB,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAsB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC/D,CAAC,CAAC"}
@@ -11,8 +11,20 @@ export interface ServiceTarget {
11
11
  /** lnar の CLI スクリプト絶対パス (= process.argv[1]) */
12
12
  scriptPath: string;
13
13
  }
14
- /** macOS launchd LaunchAgent plist。RunAtLoad + KeepAlive で常駐させる。 */
15
- export declare function macOsPlist(target: ServiceTarget): string;
14
+ /**
15
+ * macOS のログ出力先 (絶対パス 2 本)。launchd の plist は `~` を展開しないため、
16
+ * 呼び出し側で解決した絶対パスのディレクトリを受け取る。
17
+ * `/tmp` を避け、ユーザー専用の `~/Library/Logs/lnar/` 配下に置く。
18
+ */
19
+ export declare function macOsLogPaths(logDir: string): {
20
+ stdout: string;
21
+ stderr: string;
22
+ };
23
+ /**
24
+ * macOS launchd LaunchAgent plist。RunAtLoad + KeepAlive で常駐させる。
25
+ * `logDir` はログを書き出すディレクトリの絶対パス (例: ~/Library/Logs/lnar)。
26
+ */
27
+ export declare function macOsPlist(target: ServiceTarget, logDir: string): string;
16
28
  /** Linux systemd user unit。`systemctl --user enable --now` で起動。 */
17
29
  export declare function linuxSystemdUnit(target: ServiceTarget): string;
18
30
  /**
@@ -5,8 +5,20 @@
5
5
  * `service/install.ts` に分離して、ここはテストしやすい純粋関数のみ。
6
6
  */
7
7
  export const SERVICE_LABEL = 'ai.lnar.daemon';
8
- /** macOS launchd LaunchAgent plist。RunAtLoad + KeepAlive で常駐させる。 */
9
- export function macOsPlist(target) {
8
+ /**
9
+ * macOS のログ出力先 (絶対パス 2 本)。launchd の plist は `~` を展開しないため、
10
+ * 呼び出し側で解決した絶対パスのディレクトリを受け取る。
11
+ * `/tmp` を避け、ユーザー専用の `~/Library/Logs/lnar/` 配下に置く。
12
+ */
13
+ export function macOsLogPaths(logDir) {
14
+ return { stdout: `${logDir}/daemon.log`, stderr: `${logDir}/daemon.err.log` };
15
+ }
16
+ /**
17
+ * macOS launchd LaunchAgent plist。RunAtLoad + KeepAlive で常駐させる。
18
+ * `logDir` はログを書き出すディレクトリの絶対パス (例: ~/Library/Logs/lnar)。
19
+ */
20
+ export function macOsPlist(target, logDir) {
21
+ const log = macOsLogPaths(logDir);
10
22
  return `<?xml version="1.0" encoding="UTF-8"?>
11
23
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
12
24
  <plist version="1.0">
@@ -20,8 +32,8 @@ export function macOsPlist(target) {
20
32
  </array>
21
33
  <key>RunAtLoad</key><true/>
22
34
  <key>KeepAlive</key><true/>
23
- <key>StandardOutPath</key><string>/tmp/lnar-daemon.log</string>
24
- <key>StandardErrorPath</key><string>/tmp/lnar-daemon.err.log</string>
35
+ <key>StandardOutPath</key><string>${log.stdout}</string>
36
+ <key>StandardErrorPath</key><string>${log.stderr}</string>
25
37
  <key>EnvironmentVariables</key>
26
38
  <dict>
27
39
  <key>PATH</key>
@@ -1 +1 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/service/files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAA;AAS7C,oEAAoE;AACpE,MAAM,UAAU,UAAU,CAAC,MAAqB;IAC9C,OAAO;;;;4BAImB,aAAa;;;cAG3B,MAAM,CAAC,QAAQ;cACf,MAAM,CAAC,UAAU;;;;;;;;;;;;;;CAc9B,CAAA;AACD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,OAAO;;;;;;YAMG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU;;;;;;;;CAQ/C,CAAA;AACD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,QAAgB;IACpE,gDAAgD;IAChD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CACnC,CAAC;SACE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC5B,6CAA6C;IAC7C,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAA;IAC1D,OAAO;;;;;;;;gBAQO,MAAM,CAAC,QAAQ,CAAC;;;;;gBAKhB,MAAM,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8Bf,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;mBACrB,UAAU;;;;CAI5B,CAAA;AACD,CAAC"}
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/service/files.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAA;AAS7C;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,EAAE,CAAA;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAqB,EAAE,MAAc;IAC9D,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACjC,OAAO;;;;4BAImB,aAAa;;;cAG3B,MAAM,CAAC,QAAQ;cACf,MAAM,CAAC,UAAU;;;;;sCAKO,GAAG,CAAC,MAAM;wCACR,GAAG,CAAC,MAAM;;;;;;;;CAQjD,CAAA;AACD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,MAAqB;IACpD,OAAO;;;;;;YAMG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU;;;;;;;;CAQ/C,CAAA;AACD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,QAAgB;IACpE,gDAAgD;IAChD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CACnC,CAAC;SACE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAC5B,6CAA6C;IAC7C,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAA;IAC1D,OAAO;;;;;;;;gBAQO,MAAM,CAAC,QAAQ,CAAC;;;;;gBAKhB,MAAM,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8Bf,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;mBACrB,UAAU;;;;CAI5B,CAAA;AACD,CAAC"}