@lnar/cli 0.0.1-dev.f1de48c → 0.0.1

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 (72) hide show
  1. package/dist/api-client.d.ts +19 -0
  2. package/dist/api-client.js +38 -0
  3. package/dist/api-client.js.map +1 -1
  4. package/dist/auth.d.ts +20 -0
  5. package/dist/auth.js +74 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/browser.d.ts +1 -0
  8. package/dist/browser.js +68 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/capture-client.d.ts +13 -0
  11. package/dist/capture-client.js +37 -0
  12. package/dist/capture-client.js.map +1 -0
  13. package/dist/capture-worker.d.ts +14 -0
  14. package/dist/capture-worker.js +105 -0
  15. package/dist/capture-worker.js.map +1 -0
  16. package/dist/cli.js +21 -0
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/daemon.js +27 -0
  19. package/dist/commands/daemon.js.map +1 -1
  20. package/dist/commands/login.d.ts +2 -0
  21. package/dist/commands/login.js +19 -9
  22. package/dist/commands/login.js.map +1 -1
  23. package/dist/commands/record.d.ts +7 -0
  24. package/dist/commands/record.js +117 -0
  25. package/dist/commands/record.js.map +1 -0
  26. package/dist/commands/up.js +19 -0
  27. package/dist/commands/up.js.map +1 -1
  28. package/dist/recording/bundle.d.ts +25 -0
  29. package/dist/recording/bundle.js +55 -0
  30. package/dist/recording/bundle.js.map +1 -0
  31. package/dist/recording/capture.d.ts +53 -0
  32. package/dist/recording/capture.js +163 -0
  33. package/dist/recording/capture.js.map +1 -0
  34. package/dist/recording/session.d.ts +30 -0
  35. package/dist/recording/session.js +47 -0
  36. package/dist/recording/session.js.map +1 -0
  37. package/dist/recording/types.d.ts +59 -0
  38. package/dist/recording/types.js +8 -0
  39. package/dist/recording/types.js.map +1 -0
  40. package/dist/run-client.d.ts +19 -0
  41. package/dist/run-client.js +44 -0
  42. package/dist/run-client.js.map +1 -0
  43. package/dist/run-worker.d.ts +25 -0
  44. package/dist/run-worker.js +85 -0
  45. package/dist/run-worker.js.map +1 -0
  46. package/dist/runtime/actions.d.ts +13 -0
  47. package/dist/runtime/actions.js +107 -0
  48. package/dist/runtime/actions.js.map +1 -0
  49. package/dist/runtime/client.d.ts +3 -0
  50. package/dist/runtime/client.js +85 -0
  51. package/dist/runtime/client.js.map +1 -0
  52. package/dist/runtime/login.d.ts +20 -0
  53. package/dist/runtime/login.js +34 -0
  54. package/dist/runtime/login.js.map +1 -0
  55. package/dist/runtime/loop.d.ts +28 -0
  56. package/dist/runtime/loop.js +68 -0
  57. package/dist/runtime/loop.js.map +1 -0
  58. package/dist/runtime/playbook.d.ts +49 -0
  59. package/dist/runtime/playbook.js +73 -0
  60. package/dist/runtime/playbook.js.map +1 -0
  61. package/dist/runtime/runner.d.ts +20 -0
  62. package/dist/runtime/runner.js +54 -0
  63. package/dist/runtime/runner.js.map +1 -0
  64. package/dist/runtime/types.d.ts +69 -0
  65. package/dist/runtime/types.js +10 -0
  66. package/dist/runtime/types.js.map +1 -0
  67. package/dist/service/files.d.ts +14 -2
  68. package/dist/service/files.js +16 -4
  69. package/dist/service/files.js.map +1 -1
  70. package/dist/service/install.js +11 -3
  71. package/dist/service/install.js.map +1 -1
  72. package/package.json +12 -2
@@ -0,0 +1,68 @@
1
+ import { executeAction } from './actions.js';
2
+ import { detectLoginWall } from './login.js';
3
+ import { isFunctionCall, } from './types.js';
4
+ async function screenshotBase64(page) {
5
+ return (await page.screenshot({ type: 'png' })).toString('base64');
6
+ }
7
+ function buildFunctionResult(result, screenshot, acknowledged) {
8
+ const detail = acknowledged ? { ...result.detail, safety_acknowledgement: true } : result.detail;
9
+ return {
10
+ type: 'function_result',
11
+ name: result.name,
12
+ call_id: result.callId,
13
+ result: [
14
+ { type: 'text', text: JSON.stringify(detail) },
15
+ { type: 'image', data: screenshot, mime_type: 'image/png' },
16
+ ],
17
+ };
18
+ }
19
+ function collectText(interaction) {
20
+ const texts = interaction.steps
21
+ .filter((s) => s.type === 'text')
22
+ .map((s) => (s.type === 'text' ? s.text : ''))
23
+ .filter(Boolean);
24
+ return texts.length > 0 ? texts.join('\n') : null;
25
+ }
26
+ /** タスクを computer use ループで実行する。 */
27
+ export async function runTask(client, page, options, hooks) {
28
+ const initialShot = await screenshotBase64(page);
29
+ let interaction = await client.createInitial([
30
+ { type: 'text', text: options.task },
31
+ { type: 'image', data: initialShot, mime_type: 'image/png' },
32
+ ]);
33
+ for (let turn = 1; turn <= options.maxTurns; turn++) {
34
+ const calls = interaction.steps.filter(isFunctionCall);
35
+ if (calls.length === 0) {
36
+ return {
37
+ completed: true,
38
+ turns: turn - 1,
39
+ finalText: collectText(interaction),
40
+ aborted: false,
41
+ };
42
+ }
43
+ const responses = [];
44
+ for (const call of calls) {
45
+ let acknowledged = false;
46
+ if (call.safety_decision?.decision === 'require_confirmation') {
47
+ acknowledged = await hooks.onSafetyDecision(call.safety_decision.explanation);
48
+ if (!acknowledged) {
49
+ return { completed: false, turns: turn, finalText: null, aborted: true };
50
+ }
51
+ }
52
+ hooks.onAction?.(turn, call.name, call.arguments.intent);
53
+ const result = await executeAction(page, call);
54
+ if (await detectLoginWall(page)) {
55
+ await hooks.onLoginRequired(page);
56
+ }
57
+ responses.push(buildFunctionResult(result, await screenshotBase64(page), acknowledged));
58
+ }
59
+ interaction = await client.continueFrom(interaction.id, responses);
60
+ }
61
+ return {
62
+ completed: false,
63
+ turns: options.maxTurns,
64
+ finalText: collectText(interaction),
65
+ aborted: false,
66
+ };
67
+ }
68
+ //# sourceMappingURL=loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/runtime/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * タスク手順書 (playbook) の型と、実行時プロンプトの組み立て (Demo-to-MCP / Phase 4)。
3
+ *
4
+ * バックエンド (api/src/services/recording_analysis.Playbook) と同じ構造。
5
+ * 解析で得た playbook を実行時パラメータと合成して computer use への指示文を作る。
6
+ */
7
+ import { z } from 'zod';
8
+ export declare const PlaybookStepSchema: z.ZodObject<{
9
+ order: z.ZodNumber;
10
+ action: z.ZodString;
11
+ target: z.ZodOptional<z.ZodNullable<z.ZodString>>;
12
+ intent: z.ZodString;
13
+ }, z.core.$strip>;
14
+ export declare const PlaybookParameterSchema: z.ZodObject<{
15
+ name: z.ZodString;
16
+ description: z.ZodString;
17
+ example: z.ZodOptional<z.ZodNullable<z.ZodString>>;
18
+ }, z.core.$strip>;
19
+ export declare const PlaybookAuthPointSchema: z.ZodObject<{
20
+ step_order: z.ZodNumber;
21
+ site: z.ZodOptional<z.ZodNullable<z.ZodString>>;
22
+ note: z.ZodString;
23
+ }, z.core.$strip>;
24
+ export declare const PlaybookSchema: z.ZodObject<{
25
+ summary: z.ZodString;
26
+ steps: z.ZodDefault<z.ZodArray<z.ZodObject<{
27
+ order: z.ZodNumber;
28
+ action: z.ZodString;
29
+ target: z.ZodOptional<z.ZodNullable<z.ZodString>>;
30
+ intent: z.ZodString;
31
+ }, z.core.$strip>>>;
32
+ parameters: z.ZodDefault<z.ZodArray<z.ZodObject<{
33
+ name: z.ZodString;
34
+ description: z.ZodString;
35
+ example: z.ZodOptional<z.ZodNullable<z.ZodString>>;
36
+ }, z.core.$strip>>>;
37
+ auth_points: z.ZodDefault<z.ZodArray<z.ZodObject<{
38
+ step_order: z.ZodNumber;
39
+ site: z.ZodOptional<z.ZodNullable<z.ZodString>>;
40
+ note: z.ZodString;
41
+ }, z.core.$strip>>>;
42
+ success_criteria: z.ZodDefault<z.ZodArray<z.ZodString>>;
43
+ }, z.core.$strip>;
44
+ export type Playbook = z.infer<typeof PlaybookSchema>;
45
+ export type PlaybookParameter = z.infer<typeof PlaybookParameterSchema>;
46
+ /** JSON (文字列 or オブジェクト) を検証して Playbook にする。 */
47
+ export declare function parsePlaybook(input: unknown): Playbook;
48
+ /** playbook + 実行時パラメータから computer use への指示文を組み立てる。 */
49
+ export declare function buildTaskPrompt(playbook: Playbook, params: Record<string, string>, purpose?: string | null): string;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * タスク手順書 (playbook) の型と、実行時プロンプトの組み立て (Demo-to-MCP / Phase 4)。
3
+ *
4
+ * バックエンド (api/src/services/recording_analysis.Playbook) と同じ構造。
5
+ * 解析で得た playbook を実行時パラメータと合成して computer use への指示文を作る。
6
+ */
7
+ import { z } from 'zod';
8
+ export const PlaybookStepSchema = z.object({
9
+ order: z.number(),
10
+ action: z.string(),
11
+ target: z.string().nullish(),
12
+ intent: z.string(),
13
+ });
14
+ export const PlaybookParameterSchema = z.object({
15
+ name: z.string(),
16
+ description: z.string(),
17
+ example: z.string().nullish(),
18
+ });
19
+ export const PlaybookAuthPointSchema = z.object({
20
+ step_order: z.number(),
21
+ site: z.string().nullish(),
22
+ note: z.string(),
23
+ });
24
+ export const PlaybookSchema = z.object({
25
+ summary: z.string(),
26
+ steps: z.array(PlaybookStepSchema).default([]),
27
+ parameters: z.array(PlaybookParameterSchema).default([]),
28
+ auth_points: z.array(PlaybookAuthPointSchema).default([]),
29
+ success_criteria: z.array(z.string()).default([]),
30
+ });
31
+ /** JSON (文字列 or オブジェクト) を検証して Playbook にする。 */
32
+ export function parsePlaybook(input) {
33
+ const obj = typeof input === 'string' ? JSON.parse(input) : input;
34
+ return PlaybookSchema.parse(obj);
35
+ }
36
+ /** playbook + 実行時パラメータから computer use への指示文を組み立てる。 */
37
+ export function buildTaskPrompt(playbook, params, purpose) {
38
+ const lines = [];
39
+ lines.push(`# タスク\n${playbook.summary}`);
40
+ const trimmedPurpose = purpose?.trim();
41
+ if (trimmedPurpose) {
42
+ lines.push(`\n# 目的\n${trimmedPurpose}`);
43
+ }
44
+ if (playbook.steps.length > 0) {
45
+ lines.push('\n# 手順');
46
+ for (const s of [...playbook.steps].sort((a, b) => a.order - b.order)) {
47
+ const target = s.target ? ` (${s.target})` : '';
48
+ lines.push(`${s.order}. [${s.action}] ${s.intent}${target}`);
49
+ }
50
+ }
51
+ if (playbook.parameters.length > 0) {
52
+ lines.push('\n# 入力パラメータ (この実行での値)');
53
+ for (const p of playbook.parameters) {
54
+ const value = params[p.name];
55
+ lines.push(`- ${p.name}: ${value ?? '(未指定)'} — ${p.description}`);
56
+ }
57
+ }
58
+ if (playbook.auth_points.length > 0) {
59
+ lines.push('\n# ログインが必要な箇所');
60
+ for (const a of playbook.auth_points) {
61
+ lines.push(`- 手順${a.step_order}${a.site ? ` (${a.site})` : ''}: ${a.note}`);
62
+ }
63
+ lines.push('ログイン画面が出たら、自分で資格情報を入力せずユーザーのログイン完了を待ってから続行してください。');
64
+ }
65
+ if (playbook.success_criteria.length > 0) {
66
+ lines.push('\n# 完了条件');
67
+ for (const c of playbook.success_criteria)
68
+ lines.push(`- ${c}`);
69
+ }
70
+ lines.push('\n上記の手順とパラメータに従ってタスクを実行し、完了したら結果を簡潔に報告してください。');
71
+ return lines.join('\n');
72
+ }
73
+ //# sourceMappingURL=playbook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbook.js","sourceRoot":"","sources":["../../src/runtime/playbook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type RunOutcome } from './loop.js';
2
+ import { type Playbook } from './playbook.js';
3
+ import type { ComputerUseClient } from './types.js';
4
+ export type { RunOutcome } from './loop.js';
5
+ export interface RunPlaybookOptions {
6
+ readonly apiKey?: string;
7
+ readonly headless?: boolean;
8
+ readonly profileDir?: string;
9
+ readonly maxTurns?: number;
10
+ readonly startUrl?: string | null;
11
+ /** 作業の目的。指示文の先頭に含め、エージェントの意図理解を助ける。 */
12
+ readonly purpose?: string | null;
13
+ readonly logger?: (message: string) => void;
14
+ /** safety_decision を自動承認するか (既定 false=中断)。 */
15
+ readonly autoAcknowledgeSafety?: boolean;
16
+ /** テスト用にクライアントを差し替える。 */
17
+ readonly client?: ComputerUseClient;
18
+ }
19
+ /** playbook を実行し、結果を返す。 */
20
+ export declare function runPlaybook(playbook: Playbook, params: Record<string, string>, options?: RunPlaybookOptions): Promise<RunOutcome>;
@@ -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"}
@@ -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"}
@@ -15,7 +15,7 @@ import { mkdir, mkdtemp, rm, unlink, writeFile } from 'node:fs/promises';
15
15
  import { homedir, platform, tmpdir, userInfo } from 'node:os';
16
16
  import { dirname, join } from 'node:path';
17
17
  import { promisify } from 'node:util';
18
- import { linuxSystemdUnit, macOsPlist, SERVICE_LABEL, windowsTaskXml, } from './files.js';
18
+ import { linuxSystemdUnit, macOsLogPaths, macOsPlist, SERVICE_LABEL, windowsTaskXml, } from './files.js';
19
19
  const execAsync = promisify(exec);
20
20
  async function run(cmd, options = {}) {
21
21
  const { stdout } = await execAsync(cmd, options);
@@ -68,6 +68,10 @@ function detectTarget() {
68
68
  function macOsPlistPath() {
69
69
  return join(homedir(), 'Library', 'LaunchAgents', `${SERVICE_LABEL}.plist`);
70
70
  }
71
+ /** macOS のログ出力先ディレクトリ (`~/Library/Logs/lnar`)。`/tmp` を避ける。 */
72
+ function macOsLogDir() {
73
+ return join(homedir(), 'Library', 'Logs', 'lnar');
74
+ }
71
75
  function macOsServiceTarget() {
72
76
  return `gui/${userInfo().uid}/${SERVICE_LABEL}`;
73
77
  }
@@ -116,8 +120,11 @@ async function bootstrapMacOsWithRetry(uid, plistPath) {
116
120
  }
117
121
  async function installMacOs(target) {
118
122
  const plistPath = macOsPlistPath();
123
+ const logDir = macOsLogDir();
124
+ // ログディレクトリを先に作る (launchd は親 dir が無いと StandardOutPath を作れない)。
125
+ await mkdir(logDir, { recursive: true, mode: 0o700 });
119
126
  await mkdir(dirname(plistPath), { recursive: true });
120
- await writeFile(plistPath, macOsPlist(target));
127
+ await writeFile(plistPath, macOsPlist(target, logDir));
121
128
  const uid = userInfo().uid;
122
129
  // 既存サービスは print 結果に関わらず両ドメインを bootout する。
123
130
  // (詳細は bootoutBothDomains のコメント参照)
@@ -133,8 +140,9 @@ async function installMacOs(target) {
133
140
  // ことがある。EIO を検出して再 bootout + 短い backoff で数回リトライする。
134
141
  await bootstrapMacOsWithRetry(uid, plistPath);
135
142
  await run(`launchctl enable ${macOsServiceTarget()}`);
143
+ const log = macOsLogPaths(logDir);
136
144
  process.stdout.write(`Installed: ${plistPath}\n`);
137
- process.stdout.write(`Logs: /tmp/lnar-daemon.log /tmp/lnar-daemon.err.log\n`);
145
+ process.stdout.write(`Logs: ${log.stdout} ${log.stderr}\n`);
138
146
  }
139
147
  async function uninstallMacOs() {
140
148
  const plistPath = macOsPlistPath();
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/service/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/service/install.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@lnar/cli",
3
- "version": "0.0.1-dev.f1de48c",
3
+ "version": "0.0.1",
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"
@@ -22,15 +25,22 @@
22
25
  "engines": {
23
26
  "node": ">=20"
24
27
  },
25
- "lnar:defaultApiBaseUrl": "https://api-dev.lnar.ai",
28
+ "lnar:defaultApiBaseUrl": "https://api.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"