tailii-host 0.6.0 → 0.7.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.
Files changed (91) hide show
  1. package/dist/approval/hook.js +11 -1
  2. package/dist/approval/hook.js.map +1 -1
  3. package/dist/backend/herdr.d.ts +41 -6
  4. package/dist/backend/herdr.js +111 -15
  5. package/dist/backend/herdr.js.map +1 -1
  6. package/dist/backend/sessionBackend.d.ts +10 -3
  7. package/dist/backend/sessionBackend.js +5 -2
  8. package/dist/backend/sessionBackend.js.map +1 -1
  9. package/dist/backend/tmux.d.ts +45 -1
  10. package/dist/backend/tmux.js +95 -11
  11. package/dist/backend/tmux.js.map +1 -1
  12. package/dist/chat/chatTailController.d.ts +1 -1
  13. package/dist/chat/chatTailController.js +16 -33
  14. package/dist/chat/chatTailController.js.map +1 -1
  15. package/dist/chat/imageService.d.ts +9 -1
  16. package/dist/chat/imageService.js +39 -0
  17. package/dist/chat/imageService.js.map +1 -1
  18. package/dist/chat/subagentTailer.js +23 -4
  19. package/dist/chat/subagentTailer.js.map +1 -1
  20. package/dist/chat/transcriptTailer.d.ts +38 -13
  21. package/dist/chat/transcriptTailer.js +213 -15
  22. package/dist/chat/transcriptTailer.js.map +1 -1
  23. package/dist/codex/codexAppServer.d.ts +54 -9
  24. package/dist/codex/codexAppServer.js +495 -76
  25. package/dist/codex/codexAppServer.js.map +1 -1
  26. package/dist/codex/codexNativeTurnController.d.ts +22 -1
  27. package/dist/codex/codexNativeTurnController.js +57 -8
  28. package/dist/codex/codexNativeTurnController.js.map +1 -1
  29. package/dist/codex/codexRolloutTailer.d.ts +2 -0
  30. package/dist/codex/codexRolloutTailer.js +78 -13
  31. package/dist/codex/codexRolloutTailer.js.map +1 -1
  32. package/dist/codex/codexSessionStore.js +54 -16
  33. package/dist/codex/codexSessionStore.js.map +1 -1
  34. package/dist/codex/codexSubagentTracker.d.ts +13 -0
  35. package/dist/codex/codexSubagentTracker.js +55 -1
  36. package/dist/codex/codexSubagentTracker.js.map +1 -1
  37. package/dist/codex/codexSystemNotice.d.ts +2 -0
  38. package/dist/codex/codexSystemNotice.js +20 -3
  39. package/dist/codex/codexSystemNotice.js.map +1 -1
  40. package/dist/commands/launch.js +50 -13
  41. package/dist/commands/launch.js.map +1 -1
  42. package/dist/engine/context.d.ts +32 -1
  43. package/dist/engine/context.js +39 -3
  44. package/dist/engine/context.js.map +1 -1
  45. package/dist/engine/engine.d.ts +5 -1
  46. package/dist/engine/engine.js +87 -4
  47. package/dist/engine/engine.js.map +1 -1
  48. package/dist/engine/handlers/codex.js +37 -0
  49. package/dist/engine/handlers/codex.js.map +1 -1
  50. package/dist/engine/handlers/core.js +14 -1
  51. package/dist/engine/handlers/core.js.map +1 -1
  52. package/dist/engine/handlers/mode.js +64 -1
  53. package/dist/engine/handlers/mode.js.map +1 -1
  54. package/dist/engine/handlers/session.js +17 -33
  55. package/dist/engine/handlers/session.js.map +1 -1
  56. package/dist/engine/handlers/workspace.js +22 -1
  57. package/dist/engine/handlers/workspace.js.map +1 -1
  58. package/dist/hub/effortDialog.d.ts +15 -0
  59. package/dist/hub/effortDialog.js +60 -16
  60. package/dist/hub/effortDialog.js.map +1 -1
  61. package/dist/hub/engineRelaySocket.d.ts +4 -0
  62. package/dist/hub/engineRelaySocket.js +6 -1
  63. package/dist/hub/engineRelaySocket.js.map +1 -1
  64. package/dist/hub/hubDaemon.js +22 -3
  65. package/dist/hub/hubDaemon.js.map +1 -1
  66. package/dist/hub/hubProtocol.d.ts +10 -0
  67. package/dist/hub/hubProtocol.js +12 -1
  68. package/dist/hub/hubProtocol.js.map +1 -1
  69. package/dist/hub/sessionHub.d.ts +78 -4
  70. package/dist/hub/sessionHub.js +281 -67
  71. package/dist/hub/sessionHub.js.map +1 -1
  72. package/dist/protocol/decode.js +70 -15
  73. package/dist/protocol/decode.js.map +1 -1
  74. package/dist/protocol/encode.js +2 -0
  75. package/dist/protocol/encode.js.map +1 -1
  76. package/dist/protocol/messages.d.ts +59 -1
  77. package/dist/services/fileService.d.ts +15 -0
  78. package/dist/services/fileService.js +176 -14
  79. package/dist/services/fileService.js.map +1 -1
  80. package/dist/services/officialApps.d.ts +12 -1
  81. package/dist/services/officialApps.js +145 -30
  82. package/dist/services/officialApps.js.map +1 -1
  83. package/dist/services/previewServer.js +15 -6
  84. package/dist/services/previewServer.js.map +1 -1
  85. package/dist/sessions/transcriptPath.d.ts +3 -0
  86. package/dist/sessions/transcriptPath.js +15 -0
  87. package/dist/sessions/transcriptPath.js.map +1 -0
  88. package/dist/shared/clientBuild.d.ts +26 -0
  89. package/dist/shared/clientBuild.js +89 -0
  90. package/dist/shared/clientBuild.js.map +1 -0
  91. package/package.json +3 -3
@@ -0,0 +1,26 @@
1
+ export interface ClientBuildRecord {
2
+ /** 記録時点で最も新しいビルド番号(CFBundleVersion)。 */
3
+ latestClientBuild: string;
4
+ /** そのビルドが名乗ったマーケティング版(表示用。比較には使わない)。 */
5
+ clientVersion?: string;
6
+ /** 記録した時刻(epoch ms)。 */
7
+ tsMs: number;
8
+ }
9
+ /** 記録ファイルの既定パス(self-update の管理ルートと同じ ~/.tailii/host/ 配下)。 */
10
+ export declare function clientBuildRecordPath(): string;
11
+ /** "4" / "1.2.3" を整数タプルへ。Apple の CFBundleVersion 規約外は null。 */
12
+ export declare function parseBuildTuple(build: string): number[] | null;
13
+ /** ビルド番号の比較(欠けた要素は 0 とみなす)。どちらかが規約外なら null。 */
14
+ export declare function compareBuild(a: string, b: string): number | null;
15
+ /** 記録済みの最新クライアントビルドを読む(無い・壊れている・規約外は null)。 */
16
+ export declare function readLatestClientBuild(filePath?: string): string | null;
17
+ /**
18
+ * hello で名乗られたクライアントビルドを記録する。既存より新しいときだけ書き換える
19
+ * (古いビルドの接続で記録が後退しない = 「最も新しいビルド」の単調性)。
20
+ * 記録は best-effort(失敗しても接続には影響させない)。
21
+ * @returns 書き換えたら true。
22
+ */
23
+ export declare function recordClientBuild(info: {
24
+ clientBuild: string;
25
+ clientVersion?: string;
26
+ }, filePath?: string, nowMs?: number): boolean;
@@ -0,0 +1,89 @@
1
+ // shared/clientBuild.ts — iOS クライアントのビルド番号の記録(host-auto-update)
2
+ //
3
+ // アプリは channel_hello に自分の `clientVersion`(CFBundleShortVersionString, 例 "1.0.0") と
4
+ // `clientBuild`(CFBundleVersion, 例 "4") を載せる。host はこのホストへ接続してきた
5
+ // 「最も新しいビルド番号」を ~/.tailii/host/client-build.json に記録し、次回以降の
6
+ // channel_hello で `latestClientBuild` として広告する。アプリは自分のビルド番号と比較し、
7
+ // より新しいビルドがこのホストを使った実績があれば「アプリを更新」を促す
8
+ // (TestFlight 配布ではマーケティング版 1.0.0 が据え置かれたままビルド番号だけ進むため、
9
+ // 版文字列ではなくビルド番号で判定する)。
10
+ //
11
+ // ビルド番号は Apple の規約どおり「ピリオド区切りの整数 1〜3 要素」だけを比較対象にする。
12
+ // それ以外(空・非数値)は記録も比較もしない(誤警報より沈黙)。
13
+ import fs from "node:fs";
14
+ import os from "node:os";
15
+ import path from "node:path";
16
+ /** 記録ファイルの既定パス(self-update の管理ルートと同じ ~/.tailii/host/ 配下)。 */
17
+ export function clientBuildRecordPath() {
18
+ return path.join(os.homedir(), ".tailii", "host", "client-build.json");
19
+ }
20
+ /** "4" / "1.2.3" を整数タプルへ。Apple の CFBundleVersion 規約外は null。 */
21
+ export function parseBuildTuple(build) {
22
+ const parts = build.trim().split(".");
23
+ if (parts.length === 0 || parts.length > 3)
24
+ return null;
25
+ const numbers = [];
26
+ for (const part of parts) {
27
+ if (!/^\d{1,9}$/.test(part))
28
+ return null;
29
+ numbers.push(Number.parseInt(part, 10));
30
+ }
31
+ return numbers;
32
+ }
33
+ /** ビルド番号の比較(欠けた要素は 0 とみなす)。どちらかが規約外なら null。 */
34
+ export function compareBuild(a, b) {
35
+ const left = parseBuildTuple(a);
36
+ const right = parseBuildTuple(b);
37
+ if (left === null || right === null)
38
+ return null;
39
+ const length = Math.max(left.length, right.length);
40
+ for (let index = 0; index < length; index += 1) {
41
+ const l = left[index] ?? 0;
42
+ const r = right[index] ?? 0;
43
+ if (l !== r)
44
+ return l < r ? -1 : 1;
45
+ }
46
+ return 0;
47
+ }
48
+ /** 記録済みの最新クライアントビルドを読む(無い・壊れている・規約外は null)。 */
49
+ export function readLatestClientBuild(filePath = clientBuildRecordPath()) {
50
+ try {
51
+ const parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
52
+ if (typeof parsed !== "object" || parsed === null)
53
+ return null;
54
+ const record = parsed;
55
+ if (typeof record.latestClientBuild !== "string")
56
+ return null;
57
+ return parseBuildTuple(record.latestClientBuild) === null ? null : record.latestClientBuild;
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ /**
64
+ * hello で名乗られたクライアントビルドを記録する。既存より新しいときだけ書き換える
65
+ * (古いビルドの接続で記録が後退しない = 「最も新しいビルド」の単調性)。
66
+ * 記録は best-effort(失敗しても接続には影響させない)。
67
+ * @returns 書き換えたら true。
68
+ */
69
+ export function recordClientBuild(info, filePath = clientBuildRecordPath(), nowMs = Date.now()) {
70
+ if (parseBuildTuple(info.clientBuild) === null)
71
+ return false;
72
+ const current = readLatestClientBuild(filePath);
73
+ if (current !== null && (compareBuild(info.clientBuild, current) ?? -1) <= 0)
74
+ return false;
75
+ const record = {
76
+ latestClientBuild: info.clientBuild.trim(),
77
+ ...(info.clientVersion !== undefined ? { clientVersion: info.clientVersion } : {}),
78
+ tsMs: nowMs,
79
+ };
80
+ try {
81
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
82
+ fs.writeFileSync(filePath, JSON.stringify(record));
83
+ return true;
84
+ }
85
+ catch {
86
+ return false;
87
+ }
88
+ }
89
+ //# sourceMappingURL=clientBuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clientBuild.js","sourceRoot":"","sources":["../../src/shared/clientBuild.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tailii-host",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "Tailii host — control Claude Code / Codex sessions on your machine from the Tailii mobile app",
5
5
  "author": "Namasugi",
6
6
  "license": "MIT",
@@ -50,7 +50,7 @@
50
50
  "ws": "^8.21.1"
51
51
  },
52
52
  "optionalDependencies": {
53
- "@tailii/quic-gw-darwin-arm64": "0.6.0",
54
- "@tailii/quic-gw-darwin-x64": "0.6.0"
53
+ "@tailii/quic-gw-darwin-arm64": "0.7.0",
54
+ "@tailii/quic-gw-darwin-x64": "0.7.0"
55
55
  }
56
56
  }