@lnar/cli 0.0.1-dev.f1f5888 → 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.
- package/dist/api-client.d.ts +19 -0
- package/dist/api-client.js +38 -0
- package/dist/api-client.js.map +1 -1
- package/dist/auth.d.ts +20 -0
- package/dist/auth.js +74 -0
- package/dist/auth.js.map +1 -0
- package/dist/capture-client.d.ts +13 -0
- package/dist/capture-client.js +37 -0
- package/dist/capture-client.js.map +1 -0
- package/dist/capture-worker.d.ts +14 -0
- package/dist/capture-worker.js +105 -0
- package/dist/capture-worker.js.map +1 -0
- package/dist/cli.js +16 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/daemon.js +27 -0
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/record.d.ts +7 -0
- package/dist/commands/record.js +117 -0
- package/dist/commands/record.js.map +1 -0
- package/dist/recording/bundle.d.ts +25 -0
- package/dist/recording/bundle.js +55 -0
- package/dist/recording/bundle.js.map +1 -0
- package/dist/recording/capture.d.ts +53 -0
- package/dist/recording/capture.js +163 -0
- package/dist/recording/capture.js.map +1 -0
- package/dist/recording/session.d.ts +30 -0
- package/dist/recording/session.js +47 -0
- package/dist/recording/session.js.map +1 -0
- package/dist/recording/types.d.ts +59 -0
- package/dist/recording/types.js +8 -0
- package/dist/recording/types.js.map +1 -0
- package/dist/run-client.d.ts +19 -0
- package/dist/run-client.js +44 -0
- package/dist/run-client.js.map +1 -0
- package/dist/run-worker.d.ts +25 -0
- package/dist/run-worker.js +85 -0
- package/dist/run-worker.js.map +1 -0
- package/dist/runtime/actions.d.ts +13 -0
- package/dist/runtime/actions.js +107 -0
- package/dist/runtime/actions.js.map +1 -0
- package/dist/runtime/client.d.ts +3 -0
- package/dist/runtime/client.js +85 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/login.d.ts +20 -0
- package/dist/runtime/login.js +34 -0
- package/dist/runtime/login.js.map +1 -0
- package/dist/runtime/loop.d.ts +28 -0
- package/dist/runtime/loop.js +68 -0
- package/dist/runtime/loop.js.map +1 -0
- package/dist/runtime/playbook.d.ts +49 -0
- package/dist/runtime/playbook.js +73 -0
- package/dist/runtime/playbook.js.map +1 -0
- package/dist/runtime/runner.d.ts +20 -0
- package/dist/runtime/runner.js +54 -0
- package/dist/runtime/runner.js.map +1 -0
- package/dist/runtime/types.d.ts +69 -0
- package/dist/runtime/types.js +10 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/service/files.d.ts +14 -2
- package/dist/service/files.js +16 -4
- package/dist/service/files.js.map +1 -1
- package/dist/service/install.js +11 -3
- package/dist/service/install.js.map +1 -1
- package/package.json +12 -2
|
@@ -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"}
|
package/dist/service/files.d.ts
CHANGED
|
@@ -11,8 +11,20 @@ export interface ServiceTarget {
|
|
|
11
11
|
/** lnar の CLI スクリプト絶対パス (= process.argv[1]) */
|
|
12
12
|
scriptPath: string;
|
|
13
13
|
}
|
|
14
|
-
/**
|
|
15
|
-
|
|
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
|
/**
|
package/dist/service/files.js
CHANGED
|
@@ -5,8 +5,20 @@
|
|
|
5
5
|
* `service/install.ts` に分離して、ここはテストしやすい純粋関数のみ。
|
|
6
6
|
*/
|
|
7
7
|
export const SERVICE_LABEL = 'ai.lnar.daemon';
|
|
8
|
-
/**
|
|
9
|
-
|
|
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
|
|
24
|
-
<key>StandardErrorPath</key><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,
|
|
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"}
|
package/dist/service/install.js
CHANGED
|
@@ -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:
|
|
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
|
|
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
|
|
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"
|