tailii-host 0.1.0
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/LICENSE +21 -0
- package/README.md +51 -0
- package/dist/apnsConfigStore.d.ts +22 -0
- package/dist/apnsConfigStore.js +50 -0
- package/dist/apnsConfigStore.js.map +1 -0
- package/dist/apnsJwtProvider.d.ts +50 -0
- package/dist/apnsJwtProvider.js +158 -0
- package/dist/apnsJwtProvider.js.map +1 -0
- package/dist/apnsSender.d.ts +69 -0
- package/dist/apnsSender.js +155 -0
- package/dist/apnsSender.js.map +1 -0
- package/dist/approvalPushNotifier.d.ts +100 -0
- package/dist/approvalPushNotifier.js +236 -0
- package/dist/approvalPushNotifier.js.map +1 -0
- package/dist/broker.d.ts +24 -0
- package/dist/broker.js +197 -0
- package/dist/broker.js.map +1 -0
- package/dist/chatTailController.d.ts +87 -0
- package/dist/chatTailController.js +292 -0
- package/dist/chatTailController.js.map +1 -0
- package/dist/claudeSessionStore.d.ts +15 -0
- package/dist/claudeSessionStore.js +201 -0
- package/dist/claudeSessionStore.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +53 -0
- package/dist/cli.js.map +1 -0
- package/dist/codexRolloutTailer.d.ts +56 -0
- package/dist/codexRolloutTailer.js +303 -0
- package/dist/codexRolloutTailer.js.map +1 -0
- package/dist/codexSessionStore.d.ts +23 -0
- package/dist/codexSessionStore.js +274 -0
- package/dist/codexSessionStore.js.map +1 -0
- package/dist/codexUsage.d.ts +16 -0
- package/dist/codexUsage.js +144 -0
- package/dist/codexUsage.js.map +1 -0
- package/dist/deviceTokenStore.d.ts +38 -0
- package/dist/deviceTokenStore.js +73 -0
- package/dist/deviceTokenStore.js.map +1 -0
- package/dist/dirLister.d.ts +9 -0
- package/dist/dirLister.js +98 -0
- package/dist/dirLister.js.map +1 -0
- package/dist/doctor.d.ts +36 -0
- package/dist/doctor.js +162 -0
- package/dist/doctor.js.map +1 -0
- package/dist/engine.d.ts +85 -0
- package/dist/engine.js +962 -0
- package/dist/engine.js.map +1 -0
- package/dist/hook.d.ts +67 -0
- package/dist/hook.js +511 -0
- package/dist/hook.js.map +1 -0
- package/dist/hookSettings.d.ts +40 -0
- package/dist/hookSettings.js +128 -0
- package/dist/hookSettings.js.map +1 -0
- package/dist/idleReaper.d.ts +13 -0
- package/dist/idleReaper.js +30 -0
- package/dist/idleReaper.js.map +1 -0
- package/dist/imageService.d.ts +53 -0
- package/dist/imageService.js +280 -0
- package/dist/imageService.js.map +1 -0
- package/dist/kick.d.ts +8 -0
- package/dist/kick.js +60 -0
- package/dist/kick.js.map +1 -0
- package/dist/launch.d.ts +107 -0
- package/dist/launch.js +396 -0
- package/dist/launch.js.map +1 -0
- package/dist/legacyHomeMigration.d.ts +1 -0
- package/dist/legacyHomeMigration.js +23 -0
- package/dist/legacyHomeMigration.js.map +1 -0
- package/dist/lineWriter.d.ts +9 -0
- package/dist/lineWriter.js +19 -0
- package/dist/lineWriter.js.map +1 -0
- package/dist/mdnsAdvertiser.d.ts +46 -0
- package/dist/mdnsAdvertiser.js +268 -0
- package/dist/mdnsAdvertiser.js.map +1 -0
- package/dist/observationLog.d.ts +54 -0
- package/dist/observationLog.js +108 -0
- package/dist/observationLog.js.map +1 -0
- package/dist/pairingCode.d.ts +60 -0
- package/dist/pairingCode.js +282 -0
- package/dist/pairingCode.js.map +1 -0
- package/dist/paths.d.ts +13 -0
- package/dist/paths.js +46 -0
- package/dist/paths.js.map +1 -0
- package/dist/permissionMode.d.ts +8 -0
- package/dist/permissionMode.js +32 -0
- package/dist/permissionMode.js.map +1 -0
- package/dist/planUsageFetcher.d.ts +35 -0
- package/dist/planUsageFetcher.js +172 -0
- package/dist/planUsageFetcher.js.map +1 -0
- package/dist/protocol.d.ts +329 -0
- package/dist/protocol.js +544 -0
- package/dist/protocol.js.map +1 -0
- package/dist/pushTokenCommand.d.ts +9 -0
- package/dist/pushTokenCommand.js +85 -0
- package/dist/pushTokenCommand.js.map +1 -0
- package/dist/pushTypes.d.ts +41 -0
- package/dist/pushTypes.js +68 -0
- package/dist/pushTypes.js.map +1 -0
- package/dist/sendLog.d.ts +14 -0
- package/dist/sendLog.js +64 -0
- package/dist/sendLog.js.map +1 -0
- package/dist/sessionActivityProvider.d.ts +7 -0
- package/dist/sessionActivityProvider.js +44 -0
- package/dist/sessionActivityProvider.js.map +1 -0
- package/dist/sessionIdleTracker.d.ts +19 -0
- package/dist/sessionIdleTracker.js +42 -0
- package/dist/sessionIdleTracker.js.map +1 -0
- package/dist/sessionListService.d.ts +27 -0
- package/dist/sessionListService.js +85 -0
- package/dist/sessionListService.js.map +1 -0
- package/dist/sessionMetadataStore.d.ts +33 -0
- package/dist/sessionMetadataStore.js +122 -0
- package/dist/sessionMetadataStore.js.map +1 -0
- package/dist/sessionSearch.d.ts +29 -0
- package/dist/sessionSearch.js +139 -0
- package/dist/sessionSearch.js.map +1 -0
- package/dist/setup.d.ts +83 -0
- package/dist/setup.js +412 -0
- package/dist/setup.js.map +1 -0
- package/dist/sleep.d.ts +4 -0
- package/dist/sleep.js +25 -0
- package/dist/sleep.js.map +1 -0
- package/dist/socketPath.d.ts +12 -0
- package/dist/socketPath.js +51 -0
- package/dist/socketPath.js.map +1 -0
- package/dist/subagentTailer.d.ts +15 -0
- package/dist/subagentTailer.js +399 -0
- package/dist/subagentTailer.js.map +1 -0
- package/dist/tmux.d.ts +62 -0
- package/dist/tmux.js +163 -0
- package/dist/tmux.js.map +1 -0
- package/dist/transcriptTailer.d.ts +61 -0
- package/dist/transcriptTailer.js +606 -0
- package/dist/transcriptTailer.js.map +1 -0
- package/dist/usageAggregator.d.ts +12 -0
- package/dist/usageAggregator.js +55 -0
- package/dist/usageAggregator.js.map +1 -0
- package/dist/version.d.ts +10 -0
- package/dist/version.js +45 -0
- package/dist/version.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// dirLister.ts
|
|
2
|
+
// tailii (TS host) — baseDir 配下限定のディレクトリ列挙/作成 + 非限定ブラウズ
|
|
3
|
+
// Swift 版 DirLister.swift の移植(session-workdir 4.x/5.x, dir-create, dir-picker 1.1)。
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { isInsideBase, standardize } from "./paths.js";
|
|
7
|
+
/** `baseDir/<partial の親>` 直下のサブディレクトリ名を prefix 一致で返す(base 外・不正は空)。 */
|
|
8
|
+
export function dirList(baseDir, partial) {
|
|
9
|
+
if (!baseDir)
|
|
10
|
+
return [];
|
|
11
|
+
// 絶対/`~` 直接指定は base 外(サジェスト対象外, 5.3/5.4)。
|
|
12
|
+
if (partial.startsWith("/") || partial.startsWith("~"))
|
|
13
|
+
return [];
|
|
14
|
+
// partial を親と未完セグメント(prefix)へ分割する。
|
|
15
|
+
const slashIdx = partial.lastIndexOf("/");
|
|
16
|
+
const parent = slashIdx >= 0 ? partial.slice(0, slashIdx) : "";
|
|
17
|
+
const prefix = slashIdx >= 0 ? partial.slice(slashIdx + 1) : partial;
|
|
18
|
+
// baseDir/<parent> を正準化し、base 内側であることを確認する(`..` 脱出を拒否, 5.3)。
|
|
19
|
+
const base = standardize(baseDir);
|
|
20
|
+
const parentPath = standardize(parent === "" ? base : base + "/" + parent);
|
|
21
|
+
if (!isInsideBase(parentPath, base))
|
|
22
|
+
return [];
|
|
23
|
+
let names;
|
|
24
|
+
try {
|
|
25
|
+
names = fs.readdirSync(parentPath);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
// 隠し dir は prefix が `.` 始まりのときのみ含める(4.7)。
|
|
31
|
+
const includeHidden = prefix.startsWith(".");
|
|
32
|
+
const result = [];
|
|
33
|
+
for (const name of names) {
|
|
34
|
+
if (name.startsWith(".") && !includeHidden)
|
|
35
|
+
continue;
|
|
36
|
+
if (!name.startsWith(prefix))
|
|
37
|
+
continue;
|
|
38
|
+
try {
|
|
39
|
+
if (!fs.statSync(path.join(parentPath, name)).isDirectory())
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
result.push(name);
|
|
46
|
+
}
|
|
47
|
+
return result.sort();
|
|
48
|
+
}
|
|
49
|
+
/** `baseDir` 配下限定で `relative` ディレクトリを作成する(base 外・不正・失敗は ok=false)。 */
|
|
50
|
+
export function dirCreate(baseDir, relative) {
|
|
51
|
+
if (!baseDir)
|
|
52
|
+
return { path: "", ok: false };
|
|
53
|
+
if (relative.startsWith("/") || relative.startsWith("~"))
|
|
54
|
+
return { path: "", ok: false };
|
|
55
|
+
const trimmed = relative.trim();
|
|
56
|
+
if (!trimmed)
|
|
57
|
+
return { path: "", ok: false };
|
|
58
|
+
const base = standardize(baseDir);
|
|
59
|
+
const target = standardize(base + "/" + trimmed);
|
|
60
|
+
// base 内側(かつ base 自体でない)のみ許可(`..` 脱出を拒否)。
|
|
61
|
+
if (target === base || !isInsideBase(target, base))
|
|
62
|
+
return { path: target, ok: false };
|
|
63
|
+
try {
|
|
64
|
+
fs.mkdirSync(target, { recursive: true });
|
|
65
|
+
return { path: target, ok: true };
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return { path: target, ok: false };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** 絶対パス直下のサブディレクトリ名を非限定で列挙する(隠し dir とファイルは除外、ソート済み)。 */
|
|
72
|
+
export function dirChildren(absolutePath) {
|
|
73
|
+
if (!absolutePath)
|
|
74
|
+
return [];
|
|
75
|
+
const dir = standardize(absolutePath);
|
|
76
|
+
let names;
|
|
77
|
+
try {
|
|
78
|
+
names = fs.readdirSync(dir);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
const result = [];
|
|
84
|
+
for (const name of names) {
|
|
85
|
+
if (name.startsWith("."))
|
|
86
|
+
continue;
|
|
87
|
+
try {
|
|
88
|
+
if (!fs.statSync(path.join(dir, name)).isDirectory())
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
result.push(name);
|
|
95
|
+
}
|
|
96
|
+
return result.sort();
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=dirLister.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dirLister.js","sourceRoot":"","sources":["../src/dirLister.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** シム生成の結果。 */
|
|
2
|
+
export type ShimResult = "created" | "updated" | "unchanged" | "skipped-foreign";
|
|
3
|
+
/** シムの内容を組み立てる(node 絶対パス + cli.js 絶対パス固定)。 */
|
|
4
|
+
export declare function shimContent(nodePath: string, cliPath: string): string;
|
|
5
|
+
/**
|
|
6
|
+
* `<binDir>/tailii-host` シムを生成する(冪等)。
|
|
7
|
+
* 既存内容が一致すれば何もしない。マーカーの無い既存ファイルは上書きしない
|
|
8
|
+
* (ユーザーが自前管理しているシムを壊さないため)。
|
|
9
|
+
*/
|
|
10
|
+
export declare function ensureHostShim(binDir: string, nodePath: string, cliPath: string): ShimResult;
|
|
11
|
+
/** この実行自身の dist/cli.js 絶対パス(シムの exec 先)。 */
|
|
12
|
+
export declare function resolveOwnCliPath(): string;
|
|
13
|
+
/** 既定のシム設置ディレクトリ(iOS 側 `HostControlCommand` の規約と対)。 */
|
|
14
|
+
export declare function defaultShimBinDir(): string;
|
|
15
|
+
/**
|
|
16
|
+
* PATH 文字列からコマンドの実体を探す(`command -v` 相当)。見つからなければ null。
|
|
17
|
+
*/
|
|
18
|
+
export declare function findCommand(name: string, envPath: string): string | null;
|
|
19
|
+
/** TCP ポートへ接続できるか(リモートログイン=sshd の稼働検査に使う)。 */
|
|
20
|
+
export declare function checkTcpPort(host: string, port: number, timeoutMs?: number): Promise<boolean>;
|
|
21
|
+
/** 1 検査項目の結果。 */
|
|
22
|
+
export interface DoctorCheck {
|
|
23
|
+
/** 表示名。 */
|
|
24
|
+
label: string;
|
|
25
|
+
ok: boolean;
|
|
26
|
+
/** 必須項目か(false は情報提供のみで exit code に影響しない)。 */
|
|
27
|
+
required: boolean;
|
|
28
|
+
/** 詳細(見つかったパス、または直し方のヒント)。 */
|
|
29
|
+
detail: string;
|
|
30
|
+
}
|
|
31
|
+
/** 全検査を実行する(副作用なし・シムは検査のみ)。 */
|
|
32
|
+
export declare function collectDoctorChecks(envPath?: string): Promise<DoctorCheck[]>;
|
|
33
|
+
/** 検査結果を人間向けに整形する。 */
|
|
34
|
+
export declare function formatDoctorChecks(checks: DoctorCheck[]): string;
|
|
35
|
+
/** `tailii doctor` エントリポイント。必須項目に ✗ があれば 1 を返す。 */
|
|
36
|
+
export declare function runDoctorCommand(_argv: string[]): Promise<number>;
|
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
// doctor.ts — 環境診断とホストシムの自動生成
|
|
2
|
+
//
|
|
3
|
+
// iPhone アプリは SSH 非対話シェルから `~/.local/bin/tailii-host` を exec する。
|
|
4
|
+
// 非対話シェルでは node が PATH に乗らないため、node 絶対パスを埋めた薄いシムを
|
|
5
|
+
// `tailii setup` が自動生成する(従来は手書き手順だった)。
|
|
6
|
+
//
|
|
7
|
+
// あわせて `tailii doctor` として、初回セットアップで詰まりやすい前提
|
|
8
|
+
// (tmux / claude / codex CLI・リモートログイン・シム)を機械検査する。
|
|
9
|
+
// 検査は launch.ts が SSH exec に注入するのと同じ PATH(defaultInjectedPath)で行う。
|
|
10
|
+
// エージェント側の実行環境と同じ条件で探すことで「ターミナルでは見えるが
|
|
11
|
+
// SSH 経由では見えない」タイプの偽陽性を避ける。
|
|
12
|
+
import * as fs from "node:fs";
|
|
13
|
+
import * as net from "node:net";
|
|
14
|
+
import * as os from "node:os";
|
|
15
|
+
import * as path from "node:path";
|
|
16
|
+
import { fileURLToPath } from "node:url";
|
|
17
|
+
import { defaultInjectedPath } from "./launch.js";
|
|
18
|
+
/** 生成マーカー。これを含まない既存ファイルはユーザー管理とみなし上書きしない。 */
|
|
19
|
+
const SHIM_MARKER = "Tailii host launcher";
|
|
20
|
+
/** シムの内容を組み立てる(node 絶対パス + cli.js 絶対パス固定)。 */
|
|
21
|
+
export function shimContent(nodePath, cliPath) {
|
|
22
|
+
return ("#!/bin/sh\n" +
|
|
23
|
+
`# ${SHIM_MARKER} — generated by \`tailii setup\` (safe to regenerate)\n` +
|
|
24
|
+
`exec "${nodePath}" "${cliPath}" "$@"\n`);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* `<binDir>/tailii-host` シムを生成する(冪等)。
|
|
28
|
+
* 既存内容が一致すれば何もしない。マーカーの無い既存ファイルは上書きしない
|
|
29
|
+
* (ユーザーが自前管理しているシムを壊さないため)。
|
|
30
|
+
*/
|
|
31
|
+
export function ensureHostShim(binDir, nodePath, cliPath) {
|
|
32
|
+
fs.mkdirSync(binDir, { recursive: true });
|
|
33
|
+
const shimPath = path.join(binDir, "tailii-host");
|
|
34
|
+
const content = shimContent(nodePath, cliPath);
|
|
35
|
+
let existing = null;
|
|
36
|
+
try {
|
|
37
|
+
existing = fs.readFileSync(shimPath, "utf8");
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
existing = null;
|
|
41
|
+
}
|
|
42
|
+
if (existing === content) {
|
|
43
|
+
fs.chmodSync(shimPath, 0o755);
|
|
44
|
+
return "unchanged";
|
|
45
|
+
}
|
|
46
|
+
if (existing !== null && !existing.includes(SHIM_MARKER))
|
|
47
|
+
return "skipped-foreign";
|
|
48
|
+
fs.writeFileSync(shimPath, content, { mode: 0o755 });
|
|
49
|
+
fs.chmodSync(shimPath, 0o755);
|
|
50
|
+
return existing === null ? "created" : "updated";
|
|
51
|
+
}
|
|
52
|
+
/** この実行自身の dist/cli.js 絶対パス(シムの exec 先)。 */
|
|
53
|
+
export function resolveOwnCliPath() {
|
|
54
|
+
return path.join(path.dirname(fileURLToPath(import.meta.url)), "cli.js");
|
|
55
|
+
}
|
|
56
|
+
/** 既定のシム設置ディレクトリ(iOS 側 `HostControlCommand` の規約と対)。 */
|
|
57
|
+
export function defaultShimBinDir() {
|
|
58
|
+
return path.join(os.homedir(), ".local/bin");
|
|
59
|
+
}
|
|
60
|
+
// MARK: - 環境検査(テスタブル)
|
|
61
|
+
/**
|
|
62
|
+
* PATH 文字列からコマンドの実体を探す(`command -v` 相当)。見つからなければ null。
|
|
63
|
+
*/
|
|
64
|
+
export function findCommand(name, envPath) {
|
|
65
|
+
for (const dir of envPath.split(":")) {
|
|
66
|
+
if (dir === "")
|
|
67
|
+
continue;
|
|
68
|
+
const candidate = path.join(dir, name);
|
|
69
|
+
try {
|
|
70
|
+
fs.accessSync(candidate, fs.constants.X_OK);
|
|
71
|
+
if (fs.statSync(candidate).isFile() || fs.lstatSync(candidate).isSymbolicLink())
|
|
72
|
+
return candidate;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// 次の PATH エントリへ。
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
/** TCP ポートへ接続できるか(リモートログイン=sshd の稼働検査に使う)。 */
|
|
81
|
+
export function checkTcpPort(host, port, timeoutMs = 1500) {
|
|
82
|
+
return new Promise((resolve) => {
|
|
83
|
+
const socket = net.connect({ host, port });
|
|
84
|
+
const done = (ok) => {
|
|
85
|
+
socket.destroy();
|
|
86
|
+
resolve(ok);
|
|
87
|
+
};
|
|
88
|
+
socket.setTimeout(timeoutMs, () => done(false));
|
|
89
|
+
socket.once("connect", () => done(true));
|
|
90
|
+
socket.once("error", () => done(false));
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/** 全検査を実行する(副作用なし・シムは検査のみ)。 */
|
|
94
|
+
export async function collectDoctorChecks(envPath = defaultInjectedPath()) {
|
|
95
|
+
const checks = [];
|
|
96
|
+
const nodeMajor = Number(process.versions.node.split(".")[0]);
|
|
97
|
+
checks.push({
|
|
98
|
+
label: "Node.js 20+",
|
|
99
|
+
ok: nodeMajor >= 20,
|
|
100
|
+
required: true,
|
|
101
|
+
detail: `v${process.versions.node}`,
|
|
102
|
+
});
|
|
103
|
+
const tmux = findCommand("tmux", envPath);
|
|
104
|
+
checks.push({
|
|
105
|
+
label: "tmux",
|
|
106
|
+
ok: tmux !== null,
|
|
107
|
+
required: true,
|
|
108
|
+
detail: tmux ?? "見つかりません。`brew install tmux` 等で導入してください",
|
|
109
|
+
});
|
|
110
|
+
const claude = findCommand("claude", envPath);
|
|
111
|
+
const codex = findCommand("codex", envPath);
|
|
112
|
+
checks.push({
|
|
113
|
+
label: "claude CLI",
|
|
114
|
+
// どちらかのエージェント CLI があれば必須要件は満たす(claude 無しの codex 運用も許す)。
|
|
115
|
+
ok: claude !== null,
|
|
116
|
+
required: codex === null,
|
|
117
|
+
detail: claude ?? "見つかりません。https://claude.com/claude-code から導入してください",
|
|
118
|
+
});
|
|
119
|
+
checks.push({
|
|
120
|
+
label: "codex CLI(任意)",
|
|
121
|
+
ok: codex !== null,
|
|
122
|
+
required: false,
|
|
123
|
+
detail: codex ?? "未導入(Codex セッションを使う場合のみ必要)",
|
|
124
|
+
});
|
|
125
|
+
const sshdUp = await checkTcpPort("127.0.0.1", 22);
|
|
126
|
+
checks.push({
|
|
127
|
+
label: "リモートログイン(sshd:22)",
|
|
128
|
+
ok: sshdUp,
|
|
129
|
+
required: true,
|
|
130
|
+
detail: sshdUp
|
|
131
|
+
? "接続可"
|
|
132
|
+
: "接続不可。システム設定 → 一般 → 共有 → リモートログイン を ON にしてください",
|
|
133
|
+
});
|
|
134
|
+
const shimPath = path.join(defaultShimBinDir(), "tailii-host");
|
|
135
|
+
const shimOk = fs.existsSync(shimPath);
|
|
136
|
+
checks.push({
|
|
137
|
+
label: "ホストシム(~/.local/bin/tailii-host)",
|
|
138
|
+
ok: shimOk,
|
|
139
|
+
required: true,
|
|
140
|
+
detail: shimOk ? shimPath : "未生成。`tailii setup` を実行すると自動生成されます",
|
|
141
|
+
});
|
|
142
|
+
return checks;
|
|
143
|
+
}
|
|
144
|
+
/** 検査結果を人間向けに整形する。 */
|
|
145
|
+
export function formatDoctorChecks(checks) {
|
|
146
|
+
return checks
|
|
147
|
+
.map((c) => ` ${c.ok ? "✓" : c.required ? "✗" : "-"} ${c.label} : ${c.detail}`)
|
|
148
|
+
.join("\n");
|
|
149
|
+
}
|
|
150
|
+
/** `tailii doctor` エントリポイント。必須項目に ✗ があれば 1 を返す。 */
|
|
151
|
+
export async function runDoctorCommand(_argv) {
|
|
152
|
+
const checks = await collectDoctorChecks();
|
|
153
|
+
process.stdout.write("Tailii 環境診断:\n" + formatDoctorChecks(checks) + "\n");
|
|
154
|
+
const failed = checks.filter((c) => c.required && !c.ok);
|
|
155
|
+
if (failed.length > 0) {
|
|
156
|
+
process.stdout.write(`必須項目 ${failed.length} 件が未充足です。上のヒントに従って解消してください。\n`);
|
|
157
|
+
return 1;
|
|
158
|
+
}
|
|
159
|
+
process.stdout.write("問題は見つかりませんでした。\n");
|
|
160
|
+
return 0;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { Readable, Writable } from "node:stream";
|
|
2
|
+
import { type ChatAgent } from "./chatTailController.js";
|
|
3
|
+
import { CodexRolloutTailer } from "./codexRolloutTailer.js";
|
|
4
|
+
import { ClaudeSessionStore } from "./claudeSessionStore.js";
|
|
5
|
+
import { CodexSessionStore } from "./codexSessionStore.js";
|
|
6
|
+
import { ImageService } from "./imageService.js";
|
|
7
|
+
import { type EngineLauncher } from "./launch.js";
|
|
8
|
+
import { type PlanUsageProvider } from "./planUsageFetcher.js";
|
|
9
|
+
import { SessionIdleTracker } from "./sessionIdleTracker.js";
|
|
10
|
+
import { SessionListService } from "./sessionListService.js";
|
|
11
|
+
import { SessionMetadataStore } from "./sessionMetadataStore.js";
|
|
12
|
+
import { TranscriptTailer } from "./transcriptTailer.js";
|
|
13
|
+
import { TmuxSessionManager } from "./tmux.js";
|
|
14
|
+
import { type StaleDistGuard } from "./version.js";
|
|
15
|
+
/**
|
|
16
|
+
* engine サブコマンドのエントリポイント。実 stdin/stdout を使って EngineControl を起動する。
|
|
17
|
+
* 引数(省略可、統合テスト注入用): --sessions-dir / --inner-command / --images-dir /
|
|
18
|
+
* --transcript / --claude-projects-dir / --idle-timeout / --resume-command。
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* 既定エージェントを host 側設定から解決する(`--agent` 未指定時のフォールバック)。
|
|
22
|
+
* `~/.tailii/agent` の内容が `codex` なら codex、それ以外/不在は claude。
|
|
23
|
+
* これにより iOS を改修せず(engine 起動コマンドは `<binary> engine` のまま)codex に切替できる。
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveDefaultAgent(agentFilePath?: string): ChatAgent;
|
|
26
|
+
export declare function runEngineCommand(args: string[]): Promise<number>;
|
|
27
|
+
export interface RunEngineOptions {
|
|
28
|
+
/** "stdin" 側(iOS→Mac の制御要求が流れてくる)。 */
|
|
29
|
+
input: Readable;
|
|
30
|
+
/** "stdout" 側(Mac→iOS の応答を流す)。 */
|
|
31
|
+
output: Writable;
|
|
32
|
+
sessionManager: TmuxSessionManager;
|
|
33
|
+
/** 画像通知/取得の橋渡し(省略時は画像処理なし = 後方互換)。 */
|
|
34
|
+
imageService?: ImageService | null;
|
|
35
|
+
/** 会話出力キャプチャ(省略時は chat_output なし = 後方互換)。 */
|
|
36
|
+
transcriptTailer?: TranscriptTailer | null;
|
|
37
|
+
/** tail 対象の claude セッショントランスクリプト JSONL の絶対パス。 */
|
|
38
|
+
transcriptPath?: string | null;
|
|
39
|
+
/** session_start の橋渡し先。省略時(null)は error(launch_failed) を返す安全側既定。 */
|
|
40
|
+
launcher?: EngineLauncher | null;
|
|
41
|
+
/** codex セッション用 launcher(agentType=codex 時)。省略時は launcher にフォールバック。 */
|
|
42
|
+
codexLauncher?: EngineLauncher | null;
|
|
43
|
+
sessionListService?: SessionListService | null;
|
|
44
|
+
metadataStore?: SessionMetadataStore | null;
|
|
45
|
+
idleTracker?: SessionIdleTracker | null;
|
|
46
|
+
resumeLauncher?: EngineLauncher | null;
|
|
47
|
+
/** codex セッションの reattach 時 resume 用 launcher。省略時は resumeLauncher にフォールバック。 */
|
|
48
|
+
codexResumeLauncher?: EngineLauncher | null;
|
|
49
|
+
claudeSessionStore?: ClaudeSessionStore | null;
|
|
50
|
+
/** codex 会話一覧の導出(agent-tag)。省略時は codex 会話を一覧に含めない(後方互換)。 */
|
|
51
|
+
codexSessionStore?: CodexSessionStore | null;
|
|
52
|
+
reaperCheckIntervalSeconds?: number;
|
|
53
|
+
/** セッション連動 chat_output tail の projects ルート(--transcript 指定時は使わない)。 */
|
|
54
|
+
chatTailProjectsRoot?: string | null;
|
|
55
|
+
/** 対象エージェント(既定 claude)。codex は rollout tail を使う。 */
|
|
56
|
+
agent?: ChatAgent;
|
|
57
|
+
/** codex モードの rollout tailer(テスト注入用。省略時は既定ルートで自動生成)。 */
|
|
58
|
+
codexTailer?: CodexRolloutTailer;
|
|
59
|
+
/** 自分がサポートする最大版(既定 PROTOCOL_MAX_SUPPORTED)。 */
|
|
60
|
+
maxVersion?: number;
|
|
61
|
+
/** プラン使用状況の取得(既定は実 OAuth 使用量 API。テストは () => null を注入する)。 */
|
|
62
|
+
planUsage?: PlanUsageProvider;
|
|
63
|
+
/** slash_list のユーザーレベル探索ルート(既定は os.homedir())。 */
|
|
64
|
+
homeDir?: string;
|
|
65
|
+
/** mode_get/mode_set の待機間隔(テストは短縮値を注入する)。 */
|
|
66
|
+
modeTiming?: Partial<ModeTiming>;
|
|
67
|
+
/** 起動時 package version と現在の package version を比較する stale 判定(テスト注入用)。 */
|
|
68
|
+
staleDistGuard?: StaleDistGuard | null;
|
|
69
|
+
/** stale dist 検出時の通知(CLI では return によりプロセス終了、テストは観測用)。 */
|
|
70
|
+
onStaleDist?: () => void;
|
|
71
|
+
}
|
|
72
|
+
interface ModeTiming {
|
|
73
|
+
getPollMs: number;
|
|
74
|
+
getAttempts: number;
|
|
75
|
+
setInitialPollMs: number;
|
|
76
|
+
setInitialTimeoutMs: number;
|
|
77
|
+
setChangePollMs: number;
|
|
78
|
+
setChangeTimeoutMs: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* EngineControl の本体。`input` から NDJSON 行を読み、session_* を `sessionManager` に
|
|
82
|
+
* 橋渡しし、応答を `output` へ NDJSON 行で書く。EOF(input end)で正常終了する。
|
|
83
|
+
*/
|
|
84
|
+
export declare function runEngine(options: RunEngineOptions): Promise<void>;
|
|
85
|
+
export {};
|