@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
@@ -1,3 +1,4 @@
1
+ import type { RecordedAction, RecordingManifest } from './recording/types.js';
1
2
  import type { ScanResult } from './types.js';
2
3
  export type SnapshotResponse = {
3
4
  agents: Array<{
@@ -15,3 +16,21 @@ export declare class ApiError extends Error {
15
16
  constructor(status: number, body: string);
16
17
  }
17
18
  export declare const postSnapshot: (baseUrl: string, apiKey: string, scan: ScanResult) => Promise<SnapshotResponse>;
19
+ export type RecordingResponse = {
20
+ id: string;
21
+ status: string;
22
+ name: string;
23
+ };
24
+ /** 録画メタデータ + 操作トレースを登録し、recording id を得る (status=pending)。 */
25
+ export declare const createRecording: (baseUrl: string, apiKey: string, input: {
26
+ name: string;
27
+ startUrl: string | null;
28
+ purpose?: string | null;
29
+ manifest: RecordingManifest;
30
+ actions: ReadonlyArray<RecordedAction>;
31
+ }) => Promise<RecordingResponse>;
32
+ /**
33
+ * バンドル tar.gz (メモリ上の Buffer) を raw body で PUT する。サーバー側で即解析され、
34
+ * 解析済み録画 (status=analyzed / playbook 付き) が返る。画像は S3 に保存されない。
35
+ */
36
+ export declare const uploadRecordingBundle: (baseUrl: string, apiKey: string, recordingId: string, body: Buffer) => Promise<RecordingResponse>;
@@ -34,4 +34,42 @@ export const postSnapshot = async (baseUrl, apiKey, scan) => {
34
34
  }
35
35
  return (await response.json());
36
36
  };
37
+ const recordingHeaders = (apiKey) => ({
38
+ Authorization: `Bearer ${apiKey}`,
39
+ });
40
+ /** 録画メタデータ + 操作トレースを登録し、recording id を得る (status=pending)。 */
41
+ export const createRecording = async (baseUrl, apiKey, input) => {
42
+ const url = new URL('/v1/recordings', baseUrl).toString();
43
+ const response = await fetch(url, {
44
+ method: 'POST',
45
+ headers: { ...recordingHeaders(apiKey), 'Content-Type': 'application/json' },
46
+ body: JSON.stringify({
47
+ name: input.name,
48
+ start_url: input.startUrl,
49
+ purpose: input.purpose ?? null,
50
+ manifest: input.manifest,
51
+ actions: input.actions,
52
+ }),
53
+ });
54
+ if (!response.ok) {
55
+ throw new ApiError(response.status, await response.text().catch(() => ''));
56
+ }
57
+ return (await response.json());
58
+ };
59
+ /**
60
+ * バンドル tar.gz (メモリ上の Buffer) を raw body で PUT する。サーバー側で即解析され、
61
+ * 解析済み録画 (status=analyzed / playbook 付き) が返る。画像は S3 に保存されない。
62
+ */
63
+ export const uploadRecordingBundle = async (baseUrl, apiKey, recordingId, body) => {
64
+ const url = new URL(`/v1/recordings/${recordingId}/bundle`, baseUrl).toString();
65
+ const response = await fetch(url, {
66
+ method: 'PUT',
67
+ headers: { ...recordingHeaders(apiKey), 'Content-Type': 'application/gzip' },
68
+ body,
69
+ });
70
+ if (!response.ok) {
71
+ throw new ApiError(response.status, await response.text().catch(() => ''));
72
+ }
73
+ return (await response.json());
74
+ };
37
75
  //# sourceMappingURL=api-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,MAAM,CAAS;IACf,IAAI,CAAS;IACb,YAAY,MAAc,EAAE,IAAY;QACtC,KAAK,CAAC,aAAa,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,OAAe,EACf,MAAc,EACd,IAAgB,EACW,EAAE;IAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,EAAE;SAClC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9B,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;gBACxB,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE;aACvB,CAAC,CAAC;SACJ,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAqB,CAAC;AACrD,CAAC,CAAC"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
package/dist/auth.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * CLI 認証情報の解決。
3
+ *
4
+ * 保存済み config を読み、必要なら OAuth access token を refresh し、API 呼び出し用の
5
+ * Bearer 値を返す。`sync` コマンドと同じ方針 (期限切れ + refresh 不可なら再ログイン案内)。
6
+ */
7
+ import { type StoredConfig } from './config.js';
8
+ export declare class NotLoggedInError extends Error {
9
+ constructor(message?: string);
10
+ }
11
+ /** API 呼び出し用の Bearer 値を取り出す。 */
12
+ export declare const bearerFor: (config: StoredConfig) => string;
13
+ export interface ResolvedAuth {
14
+ readonly baseUrl: string;
15
+ readonly token: string;
16
+ }
17
+ /**
18
+ * 認証を解決する。未ログインなら NotLoggedInError を投げる。
19
+ */
20
+ export declare const resolveAuth: () => Promise<ResolvedAuth>;
package/dist/auth.js ADDED
@@ -0,0 +1,74 @@
1
+ /**
2
+ * CLI 認証情報の解決。
3
+ *
4
+ * 保存済み config を読み、必要なら OAuth access token を refresh し、API 呼び出し用の
5
+ * Bearer 値を返す。`sync` コマンドと同じ方針 (期限切れ + refresh 不可なら再ログイン案内)。
6
+ */
7
+ import { DEFAULT_CLIENT_ID, loadConfig, saveConfig } from './config.js';
8
+ import { OAuthError, refreshAccessToken } from './oauth-client.js';
9
+ const ACCESS_TOKEN_REFRESH_SKEW_SECONDS = 60;
10
+ export class NotLoggedInError extends Error {
11
+ constructor(message = 'not logged in. Run `lnar login` first.') {
12
+ super(message);
13
+ this.name = 'NotLoggedInError';
14
+ }
15
+ }
16
+ const isAccessTokenExpired = (config) => {
17
+ if (!config.accessTokenExpiresAt)
18
+ return false;
19
+ const expires = Date.parse(config.accessTokenExpiresAt);
20
+ if (Number.isNaN(expires))
21
+ return true;
22
+ return expires - Date.now() < ACCESS_TOKEN_REFRESH_SKEW_SECONDS * 1000;
23
+ };
24
+ const refreshIfNeeded = async (config) => {
25
+ if (!config.accessToken)
26
+ return config;
27
+ if (!isAccessTokenExpired(config))
28
+ return config;
29
+ if (!config.refreshToken) {
30
+ throw new NotLoggedInError('access token expired and no refresh token. Run `lnar login`.');
31
+ }
32
+ const clientId = config.clientId ?? DEFAULT_CLIENT_ID;
33
+ let token;
34
+ try {
35
+ token = await refreshAccessToken(config.apiBaseUrl, clientId, config.refreshToken);
36
+ }
37
+ catch (err) {
38
+ if (err instanceof OAuthError && err.errorCode === 'invalid_grant') {
39
+ throw new NotLoggedInError('refresh token expired or revoked. Run `lnar login`.');
40
+ }
41
+ throw err;
42
+ }
43
+ const accessTokenExpiresAt = new Date(Date.now() + token.expires_in * 1000).toISOString();
44
+ const next = {
45
+ apiBaseUrl: config.apiBaseUrl,
46
+ accessToken: token.access_token,
47
+ refreshToken: token.refresh_token ?? config.refreshToken,
48
+ accessTokenExpiresAt,
49
+ scopes: token.scope ? token.scope.split(' ') : config.scopes,
50
+ clientId,
51
+ };
52
+ await saveConfig(next);
53
+ return { ...next, savedAt: new Date().toISOString() };
54
+ };
55
+ /** API 呼び出し用の Bearer 値を取り出す。 */
56
+ export const bearerFor = (config) => {
57
+ if (config.accessToken)
58
+ return config.accessToken;
59
+ if (config.apiKey)
60
+ return config.apiKey;
61
+ throw new NotLoggedInError('no credentials available. Run `lnar login`.');
62
+ };
63
+ /**
64
+ * 認証を解決する。未ログインなら NotLoggedInError を投げる。
65
+ */
66
+ export const resolveAuth = async () => {
67
+ const initial = await loadConfig();
68
+ if (initial == null) {
69
+ throw new NotLoggedInError();
70
+ }
71
+ const config = await refreshIfNeeded(initial);
72
+ return { baseUrl: config.apiBaseUrl, token: bearerFor(config) };
73
+ };
74
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const openBrowser: (url: string) => boolean;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * OS のデフォルトブラウザで URL を開く。
3
+ *
4
+ * 依存を増やさず、プラットフォームごとの組み込みコマンドを spawn する。
5
+ * macOS → `open -- <url>`
6
+ * Linux → `xdg-open -- <url>`
7
+ * Windows → `rundll32 url.dll,FileProtocolHandler <url>`
8
+ *
9
+ * セキュリティ:
10
+ * - URL は http / https スキームのみ許可(javascript:, file: 等は拒否)
11
+ * - macOS / Linux では `--` セパレータで先頭が `-` の URL をフラグと誤認させない
12
+ * - Windows は cmd.exe メタ文字解釈を避けるため `rundll32 url.dll,FileProtocolHandler`
13
+ * を使用(cmd /c start 経由は `&` 等で injection 余地が残る)
14
+ *
15
+ * CI / SSH / コンテナ等の "browser を出せない" 環境では子プロセスが失敗するが、
16
+ * 呼び出し側で URL を必ず stdout に表示するフォールバックを残すため、ここでは
17
+ * 例外を握り潰して boolean で結果だけ返す。
18
+ *
19
+ * 強制無効化: `LNAR_NO_BROWSER=1` を export しておくと自動オープンを抑止する。
20
+ */
21
+ import { spawn } from 'node:child_process';
22
+ import { platform } from 'node:os';
23
+ const isSafeHttpUrl = (url) => {
24
+ try {
25
+ const parsed = new URL(url);
26
+ return parsed.protocol === 'http:' || parsed.protocol === 'https:';
27
+ }
28
+ catch {
29
+ return false;
30
+ }
31
+ };
32
+ const resolveOpenCommand = (url) => {
33
+ const os = platform();
34
+ if (os === 'darwin') {
35
+ // `--` で URL がフラグ扱いされないようにする
36
+ return { command: 'open', args: ['--', url] };
37
+ }
38
+ if (os === 'win32') {
39
+ // cmd.exe を経由しないことで `&`, `|` 等のメタ文字解釈を回避
40
+ return { command: 'rundll32', args: ['url.dll,FileProtocolHandler', url] };
41
+ }
42
+ return { command: 'xdg-open', args: ['--', url] };
43
+ };
44
+ export const openBrowser = (url) => {
45
+ if (process.env.LNAR_NO_BROWSER === '1') {
46
+ return false;
47
+ }
48
+ if (!isSafeHttpUrl(url)) {
49
+ return false;
50
+ }
51
+ const { command, args } = resolveOpenCommand(url);
52
+ try {
53
+ const child = spawn(command, args, {
54
+ detached: true,
55
+ stdio: 'ignore',
56
+ });
57
+ // spawn 自体が失敗 (コマンドが PATH に無い等) しても unhandled error にしない。
58
+ child.on('error', () => {
59
+ /* swallow — フォールバックは呼び出し側の stdout に任せる */
60
+ });
61
+ child.unref();
62
+ return true;
63
+ }
64
+ catch {
65
+ return false;
66
+ }
67
+ };
68
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOnC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAW,EAAE;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAe,EAAE;IACtD,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtB,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpB,6BAA6B;QAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,yCAAyC;QACzC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,6BAA6B,EAAE,GAAG,CAAC,EAAE,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAW,EAAE;IAClD,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;YACjC,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,0DAA0D;QAC1D,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACrB,0CAA0C;QAC5C,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface PendingCaptureJob {
2
+ id: string;
3
+ name?: string | null;
4
+ /** ブラウザを開く開始 URL。 */
5
+ start_url?: string | null;
6
+ /** 録画する作業の目的。解析プロンプトに渡す。 */
7
+ purpose?: string | null;
8
+ }
9
+ /** 自分が録画すべき pending キャプチャジョブの一覧。 */
10
+ export declare const listPendingCaptures: (baseUrl: string, apiKey: string) => Promise<PendingCaptureJob[]>;
11
+ export declare const claimCapture: (baseUrl: string, apiKey: string, jobId: string, hostname: string) => Promise<void>;
12
+ export declare const reportCaptureResult: (baseUrl: string, apiKey: string, jobId: string, recordingId: string) => Promise<void>;
13
+ export declare const reportCaptureFailed: (baseUrl: string, apiKey: string, jobId: string, error: string) => Promise<void>;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 録画キャプチャジョブの REST クライアント (Demo-to-MCP / 録画 MCP 化)。
3
+ *
4
+ * daemon が「自分宛の pending キャプチャジョブ取得 → claim → ローカル録画 →
5
+ * recording_id を報告」を行うための API 呼び出し群。録画 run-job (run-client.ts) と同型。
6
+ */
7
+ import { ApiError } from './api-client.js';
8
+ const authHeaders = (apiKey) => ({
9
+ Authorization: `Bearer ${apiKey}`,
10
+ });
11
+ async function jsonOrThrow(response) {
12
+ if (!response.ok) {
13
+ throw new ApiError(response.status, await response.text().catch(() => ''));
14
+ }
15
+ return response.json();
16
+ }
17
+ /** 自分が録画すべき pending キャプチャジョブの一覧。 */
18
+ export const listPendingCaptures = async (baseUrl, apiKey) => {
19
+ const url = new URL('/v1/recordings/capture-jobs/pending', baseUrl).toString();
20
+ const response = await fetch(url, { headers: authHeaders(apiKey) });
21
+ return (await jsonOrThrow(response));
22
+ };
23
+ const postCapture = async (baseUrl, apiKey, path, body) => {
24
+ const url = new URL(path, baseUrl).toString();
25
+ const response = await fetch(url, {
26
+ method: 'POST',
27
+ headers: { ...authHeaders(apiKey), 'Content-Type': 'application/json' },
28
+ body: JSON.stringify(body),
29
+ });
30
+ await jsonOrThrow(response);
31
+ };
32
+ export const claimCapture = (baseUrl, apiKey, jobId, hostname) => postCapture(baseUrl, apiKey, `/v1/recordings/capture-jobs/${jobId}/claim`, { hostname });
33
+ export const reportCaptureResult = (baseUrl, apiKey, jobId, recordingId) => postCapture(baseUrl, apiKey, `/v1/recordings/capture-jobs/${jobId}/result`, {
34
+ recording_id: recordingId,
35
+ });
36
+ export const reportCaptureFailed = (baseUrl, apiKey, jobId, error) => postCapture(baseUrl, apiKey, `/v1/recordings/capture-jobs/${jobId}/failed`, { error });
37
+ //# sourceMappingURL=capture-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-client.js","sourceRoot":"","sources":["../src/capture-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAW3C,MAAM,WAAW,GAAG,CAAC,MAAc,EAA0B,EAAE,CAAC,CAAC;IAC/D,aAAa,EAAE,UAAU,MAAM,EAAE;CAClC,CAAC,CAAC;AAEH,KAAK,UAAU,WAAW,CAAC,QAAkB;IAC3C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,oCAAoC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,OAAe,EACf,MAAc,EACgB,EAAE;IAChC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,qCAAqC,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAwB,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EACvB,OAAe,EACf,MAAc,EACd,IAAY,EACZ,IAA6B,EACd,EAAE;IACjB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE;QACvE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IACH,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAe,EACf,MAAc,EACd,KAAa,EACb,QAAgB,EACD,EAAE,CACjB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,+BAA+B,KAAK,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAAe,EACf,MAAc,EACd,KAAa,EACb,WAAmB,EACJ,EAAE,CACjB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,+BAA+B,KAAK,SAAS,EAAE;IAC1E,YAAY,EAAE,WAAW;CAC1B,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAAe,EACf,MAAc,EACd,KAAa,EACb,KAAa,EACE,EAAE,CACjB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,+BAA+B,KAAK,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { claimCapture, listPendingCaptures, type PendingCaptureJob, reportCaptureFailed, reportCaptureResult } from './capture-client.js';
2
+ export interface CaptureWorkerDeps {
3
+ listPendingCaptures: typeof listPendingCaptures;
4
+ claimCapture: typeof claimCapture;
5
+ reportCaptureResult: typeof reportCaptureResult;
6
+ reportCaptureFailed: typeof reportCaptureFailed;
7
+ /** ローカルで録画してアップロードし、生成された recording の id を返す。 */
8
+ captureAndUpload: (baseUrl: string, token: string, job: PendingCaptureJob) => Promise<string>;
9
+ log?: (message: string) => void;
10
+ }
11
+ /** pending キャプチャジョブを 1 件実行して結果を報告する。 */
12
+ export declare function executeCapture(baseUrl: string, token: string, hostname: string, job: PendingCaptureJob, deps: CaptureWorkerDeps): Promise<void>;
13
+ /** 自分宛の pending キャプチャジョブをすべて実行する。実行件数を返す。 */
14
+ export declare function executePendingCaptures(baseUrl: string, token: string, hostname: string, deps?: CaptureWorkerDeps): Promise<number>;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * 録画キャプチャジョブのローカル実行ワーカー (Demo-to-MCP / 録画 MCP 化)。
3
+ *
4
+ * daemon から呼ばれ、自分宛の pending キャプチャジョブを順に
5
+ * claim → ローカルブラウザで録画 (人間が実演) → アップロード・解析 →
6
+ * recording_id を報告
7
+ * する。録画 run-job ワーカー (run-worker.ts) と同型だが、こちらは「録画そのものの
8
+ * 作成」をリモートから開始するためのもの。実演は人間がローカルブラウザで行う。
9
+ *
10
+ * 依存 (API クライアント / 録画+アップロード処理) は注入可能にしてテストしやすくする。
11
+ */
12
+ import { homedir } from 'node:os';
13
+ import { join } from 'node:path';
14
+ import { ApiError, createRecording, uploadRecordingBundle } from './api-client.js';
15
+ import { claimCapture, listPendingCaptures, reportCaptureFailed, reportCaptureResult, } from './capture-client.js';
16
+ import { packBundleToBuffer } from './recording/bundle.js';
17
+ import { recordSession } from './recording/session.js';
18
+ const fsSafeTimestamp = () => new Date().toISOString().replace(/[:.]/g, '-');
19
+ /**
20
+ * ブラウザを閉じたら停止するシグナル (リモート録画用)。
21
+ *
22
+ * `lnar record` の TTY (Enter) 停止はリモート daemon では使えない (本人のターミナル
23
+ * 入力を検知できない) ため、ブラウザ/ページの close のみで停止する。
24
+ */
25
+ const waitForStopOnClose = (page, context) => new Promise((resolve) => {
26
+ let done = false;
27
+ const finish = () => {
28
+ if (done)
29
+ return;
30
+ done = true;
31
+ resolve();
32
+ };
33
+ context.on('close', finish);
34
+ page.on('close', finish);
35
+ });
36
+ /** デフォルトの録画+アップロード処理 (recordSession → bundle → create → upload)。 */
37
+ const defaultCaptureAndUpload = async (baseUrl, token, job) => {
38
+ const createdAt = new Date().toISOString();
39
+ const name = job.name?.trim() || `recording-${fsSafeTimestamp()}`;
40
+ const profileDir = join(homedir(), '.config', 'lnar', 'record-profile');
41
+ const result = await recordSession({
42
+ name,
43
+ startUrl: job.start_url ?? null,
44
+ profileDir,
45
+ createdAt,
46
+ waitForStop: waitForStopOnClose,
47
+ });
48
+ const created = await createRecording(baseUrl, token, {
49
+ name,
50
+ startUrl: result.manifest.startUrl,
51
+ purpose: job.purpose ?? null,
52
+ manifest: result.manifest,
53
+ actions: result.actions,
54
+ });
55
+ const bundle = await packBundleToBuffer({
56
+ manifest: result.manifest,
57
+ actions: result.actions,
58
+ frames: result.frames,
59
+ });
60
+ // アップロード時にサーバー側で即解析される (画像は保存されない)。
61
+ const analyzed = await uploadRecordingBundle(baseUrl, token, created.id, bundle);
62
+ return analyzed.id;
63
+ };
64
+ const defaultDeps = () => ({
65
+ listPendingCaptures,
66
+ claimCapture,
67
+ reportCaptureResult,
68
+ reportCaptureFailed,
69
+ captureAndUpload: defaultCaptureAndUpload,
70
+ });
71
+ /** pending キャプチャジョブを 1 件実行して結果を報告する。 */
72
+ export async function executeCapture(baseUrl, token, hostname, job, deps) {
73
+ const log = deps.log ?? (() => { });
74
+ // claim は排他取得。競合 (409 = 別 daemon が先に取得) のときだけスキップする
75
+ // (走っているジョブを上書きしないため、failed 報告もしない)。それ以外は上位へ伝播。
76
+ try {
77
+ await deps.claimCapture(baseUrl, token, job.id, hostname);
78
+ }
79
+ catch (err) {
80
+ if (err instanceof ApiError && err.status === 409) {
81
+ log(`capture ${job.id} claim skipped (409 conflict)`);
82
+ return;
83
+ }
84
+ throw err;
85
+ }
86
+ // claim 後の録画・報告。ここでの失敗は job を failed として報告する。
87
+ try {
88
+ const recordingId = await deps.captureAndUpload(baseUrl, token, job);
89
+ await deps.reportCaptureResult(baseUrl, token, job.id, recordingId);
90
+ }
91
+ catch (err) {
92
+ const message = err instanceof Error ? err.message : String(err);
93
+ log(`capture ${job.id} failed: ${message}`);
94
+ await deps.reportCaptureFailed(baseUrl, token, job.id, message).catch(() => { });
95
+ }
96
+ }
97
+ /** 自分宛の pending キャプチャジョブをすべて実行する。実行件数を返す。 */
98
+ export async function executePendingCaptures(baseUrl, token, hostname, deps = defaultDeps()) {
99
+ const jobs = await deps.listPendingCaptures(baseUrl, token);
100
+ for (const job of jobs) {
101
+ await executeCapture(baseUrl, token, hostname, job, deps);
102
+ }
103
+ return jobs.length;
104
+ }
105
+ //# sourceMappingURL=capture-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-worker.js","sourceRoot":"","sources":["../src/capture-worker.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -3,6 +3,7 @@ import { Command } from 'commander';
3
3
  import { runDaemon } from './commands/daemon.js';
4
4
  import { runDown } from './commands/down.js';
5
5
  import { runLogin } from './commands/login.js';
6
+ import { runRecord } from './commands/record.js';
6
7
  import { runScan } from './commands/scan.js';
7
8
  import { runStatus } from './commands/status.js';
8
9
  import { runSync } from './commands/sync.js';
@@ -23,10 +24,13 @@ program
23
24
  .description('Authenticate (if needed) and install lnar as a background service that runs forever.')
24
25
  .option('--api-base-url <url>', 'lnar API base URL')
25
26
  .option('--client-id <id>', 'OAuth client_id (default: lnar-cli)')
27
+ .option('--no-browser', 'Do not open the authorization URL in a browser automatically')
26
28
  .action(async (opts) => {
27
29
  await runUp({
28
30
  apiBaseUrl: opts.apiBaseUrl,
29
31
  clientId: opts.clientId,
32
+ // commander の --no-X は opts.browser=false で渡る
33
+ noBrowser: opts.browser === false,
30
34
  });
31
35
  });
32
36
  program
@@ -49,10 +53,12 @@ program
49
53
  .description('Re-authorize this device via the OAuth Device Code flow (normally not needed — `lnar up` handles login).')
50
54
  .option('--api-base-url <url>', 'lnar API base URL')
51
55
  .option('--client-id <id>', 'OAuth client_id (default: lnar-cli)')
56
+ .option('--no-browser', 'Do not open the authorization URL in a browser automatically')
52
57
  .action(async (opts) => {
53
58
  await runLogin({
54
59
  apiBaseUrl: opts.apiBaseUrl,
55
60
  clientId: opts.clientId,
61
+ noBrowser: opts.browser === false,
56
62
  });
57
63
  });
58
64
  program
@@ -69,6 +75,21 @@ program
69
75
  .action(async (opts) => {
70
76
  await runSync({ dryRun: Boolean(opts.dryRun) });
71
77
  });
78
+ program
79
+ .command('record')
80
+ .description('Record a browser demo locally and upload it to lnar (Demo-to-MCP). You operate your own browser; the captured actions/keyframes become the material for generating a browser-automation MCP.')
81
+ .option('--url <url>', 'Start URL to open in the recording browser')
82
+ .option('--name <name>', 'Recording name (default: recording-<timestamp>)')
83
+ .option('--purpose <text>', 'Purpose of the task (improves playbook analysis; prompted after recording if omitted)')
84
+ .option('--headless', 'Run the browser headless (not recommended for interactive demos)')
85
+ .action(async (opts) => {
86
+ await runRecord({
87
+ url: opts.url,
88
+ name: opts.name,
89
+ purpose: opts.purpose,
90
+ headless: Boolean(opts.headless),
91
+ });
92
+ });
72
93
  // ---------------------------------------------------------------------------
73
94
  // Hidden internal command: launchd / systemd / Task Scheduler が exec する実体。
74
95
  // ユーザー向けには `lnar up` が完全に隠蔽するため、--help に出さない。
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { hostname } from 'node:os';
2
2
  import { ApiError, postSnapshot } from '../api-client.js';
3
+ import { executePendingCaptures } from '../capture-worker.js';
3
4
  import { DEFAULT_CLIENT_ID, loadConfig, saveConfig } from '../config.js';
4
5
  import { loadOrCreateMachineId } from '../machine-id.js';
5
6
  import { OAuthError, refreshAccessToken } from '../oauth-client.js';
6
7
  import { listPendingForHost, reportApplied, reportFailed, } from '../pending-client.js';
8
+ import { executePendingRuns } from '../run-worker.js';
7
9
  import { runAllScanners } from '../scanners/index.js';
8
10
  import { runSseClient, SseFatalError } from '../sse-client.js';
9
11
  import { getWriter } from '../writers/registry.js';
@@ -101,6 +103,31 @@ const applyPending = async (config, change) => {
101
103
  const runOnce = async (config) => {
102
104
  // 1. 最新スナップショットを送信 → サーバ側 agent ID が最新化される
103
105
  await runScanAndSync(config);
106
+ // 1.5. 録画 run-job をローカル実行する (Demo-to-MCP)。失敗しても以降の
107
+ // スキャン / pending 適用は継続させる (機能を分離する)。
108
+ try {
109
+ const ran = await executePendingRuns(config.apiBaseUrl, bearerFor(config), hostname());
110
+ if (ran > 0) {
111
+ process.stdout.write(`lnar daemon: executed ${ran} recording run(s)\n`);
112
+ }
113
+ }
114
+ catch (err) {
115
+ const message = err instanceof Error ? err.message : String(err);
116
+ process.stderr.write(`lnar daemon: recording runs error: ${message}\n`);
117
+ }
118
+ // 1.6. 録画キャプチャジョブ (start_recording 由来) をローカル録画する。
119
+ // ブラウザを開いて人間の実演を待つため時間がかかるが、失敗・例外しても
120
+ // 以降の処理は継続させる。
121
+ try {
122
+ const captured = await executePendingCaptures(config.apiBaseUrl, bearerFor(config), hostname());
123
+ if (captured > 0) {
124
+ process.stdout.write(`lnar daemon: ran ${captured} recording capture(s)\n`);
125
+ }
126
+ }
127
+ catch (err) {
128
+ const message = err instanceof Error ? err.message : String(err);
129
+ process.stderr.write(`lnar daemon: recording captures error: ${message}\n`);
130
+ }
104
131
  // 2. 自 host 向けの pending を取得
105
132
  const host = hostname();
106
133
  const pending = await listPendingForHost(config.apiBaseUrl, bearerFor(config), host);
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAqB,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,YAAY,GACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AASnD,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,iCAAiC,GAAG,EAAE,CAAC;AAE7C,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE,CAC1C,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACtB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEL,MAAM,oBAAoB,GAAG,CAAC,MAAoB,EAAW,EAAE;IAC7D,IAAI,CAAC,MAAM,CAAC,oBAAoB;QAAE,OAAO,KAAK,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,iCAAiC,GAAG,IAAI,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,KAAK,EAAE,MAAoB,EAAyB,EAAE;IAC5E,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACtD,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;YACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,MAAM,oBAAoB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1F,MAAM,IAAI,GAAkC;QAC1C,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,KAAK,CAAC,YAAY;QAC/B,YAAY,EAAE,KAAK,CAAC,aAAa,IAAI,MAAM,CAAC,YAAY;QACxD,oBAAoB;QACpB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;QAC5D,QAAQ;KACT,CAAC;IACF,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAAoB,EAAU,EAAE;IACjD,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC;IACxC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,MAAoB,EAAiB,EAAE;IACnE,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAChD,MAAM,IAAI,GAAe;QACvB,QAAQ,EAAE,QAAQ,EAAE;QACpB,SAAS;QACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM;KACP,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChC,MAAM,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EAAE,MAAoB,EAAE,MAAqB,EAAiB,EAAE;IACxF,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,YAAY,CAChB,MAAM,CAAC,UAAU,EACjB,KAAK,EACL,MAAM,CAAC,EAAE,EACT,uCAAuC,MAAM,CAAC,UAAU,EAAE,CAC3D,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC7B,MAAM,YAAY,CAChB,MAAM,CAAC,UAAU,EACjB,KAAK,EACL,MAAM,CAAC,EAAE,EACT,cAAc,MAAM,CAAC,UAAU,oCAAoC,CACpE,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,KAAK,EAAE,MAAoB,EAAiB,EAAE;IAC5D,2CAA2C;IAC3C,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAE7B,4BAA4B;IAC5B,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IACrF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,IAAI,IAAI,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,yBAAyB,OAAO,CAAC,MAAM,kBAAkB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,CACxG,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,QAAQ,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,WAAW,MAAM,CAAC,UAAU,KAAK,CAC9E,CAAC;QACF,MAAM,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,qCAAqC;IACrC,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,GAAG,EAAE;IAC9B,IAAI,QAAQ,GAAyB,IAAI,CAAC;IAC1C,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,OAAO,GAAG,CAAC,MAAoB,EAAiB,EAAE;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,wCAAwC;YACxC,MAAM,GAAG,IAAI,CAAC;YACd,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,IAAmB,EAAE;YACpC,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;oBAAS,CAAC;gBACT,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,GAAG,KAAK,CAAC;oBACf,sCAAsC;oBACtC,QAAQ,GAAG,GAAG,EAAE,CAAC;oBACjB,MAAM,QAAQ,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5B,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,MAAoB,EACpB,IAAY,EACZ,OAA6C,EAC7C,MAAmB,EACJ,EAAE;IACjB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACvE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAE3E,OAAO,YAAY,CAAC;QAClB,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;QACnB,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC;QACxB,MAAM;QACN,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,mCAAmC;YACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YACrD,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACvB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBACpE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,UAAyB,EAAE,EAAiB,EAAE;IAC5E,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IACnC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,wBAAwB,CAAC,GAAG,IAAI,CAAC;IAC9E,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACrD,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,EAAE,OAAO,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAEzC,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,OAAO,GAAG,KAAK,CAAC;QAChB,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAE5B,0DAA0D;IAC1D,+CAA+C;IAC/C,qDAAqD;IACrD,MAAM,UAAU,GAAsC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxE,MAAM,QAAQ,GAAG,CAAC,MAAoB,EAAQ,EAAE;QAC9C,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,UAAU,CAAC,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CACjF,CAAC,GAAY,EAAE,EAAE;YACf,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2BAA2B,GAAG,CAAC,MAAM,mCAAmC,CACzE,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,OAAO,IAAI,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC,CAAC;IAEF,QAAQ,CAAC,OAAO,CAAC,CAAC;IAElB,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,MAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,OAAO,IAAI,CAAC,CAAC;YACxE,IAAI,OAAO,CAAC,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;gBAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,OAAO,IAAI,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,OAAO,CAAC,IAAI;YAAE,MAAM;QACxB,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,7 @@ export type LoginOptions = {
2
2
  apiBaseUrl?: string;
3
3
  clientId?: string;
4
4
  scopes?: ReadonlyArray<string>;
5
+ /** true なら認可 URL を自動でブラウザに開かない (env `LNAR_NO_BROWSER=1` 相当)。 */
6
+ noBrowser?: boolean;
5
7
  };
6
8
  export declare const runLogin: (options?: LoginOptions) => Promise<void>;