gpt-connector 0.2.0 → 0.3.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/CHANGELOG.md ADDED
@@ -0,0 +1,17 @@
1
+ # Changelog
2
+
3
+ ## 0.3.0 — 2026-07-14
4
+
5
+ - BugHub factory向けに `gpt-connector factory-diagnostics --json` を追加した。既存
6
+ `gpt-connector.diagnostics.v1` の `doctor` 契約は維持する。
7
+ - 明示的な canonical dotagents `collection.enabled: true` の時だけ動く、network I/O を
8
+ 持たない product-owned `runtime-errors` local aggregate を追加した。
9
+ - runtime error の公開面は固定 code/template と SHA-256 fingerprint のみを使う。prompt、
10
+ 応答、添付、識別子、credential、CDP dump、絶対 path、raw error は保存・出力しない。
11
+ - true headlessを使わず、cold startでは窓なしで専用profileのheadful Chromeを起動し、CDPで
12
+ ChatGPT targetを最初から最小化状態で作成・確認してからapp readyを待つ`gpt-connector browser start`
13
+ を追加した。既存endpointもapp probeより先に最小化する。現行macOS実測では最小化中も送受信を維持する。
14
+ - `gpt-connector browser show`で、正規専用profileの一意ChatGPT windowだけを明示的に表示へ戻せるようにした。認証要求時はstartが同じwindowを表示へ戻してから`AUTH_REQUIRED`を返す。
15
+ - window stateのCDP read-backを有界pollにし、非同期遷移直後の旧stateによるfalse failureを防いだ。
16
+ - cold startはhidden Chrome・background minimized targetから開始し、最小化確認後に正規PIDだけをunhideしてからprobeする。
17
+ - showはCDP stateのstale値に依存せず`Page.bringToFront`を送る。最終状態はWindowServerの正規PID/layer 0 window数で確認する。
package/README.md CHANGED
@@ -10,7 +10,7 @@ Codex開発枠から、ログイン済みChatGPT公式Web runtimeの通常Chat
10
10
  > [!WARNING]
11
11
  > consumer Chatの非公開Web runtimeとminified bundleに依存する実験的実装。OpenAIの公開・安定APIではない。bundle contractが変わった場合は`RUNTIME_DRIFT`で停止し、別方式へ自動fallbackしない。
12
12
 
13
- 現在版は[`gpt-connector@0.2.0`](https://www.npmjs.com/package/gpt-connector)。ソースと変更履歴は[GitHub repository](https://github.com/kitepon-rgb/gpt-connector)を正とする。
13
+ 現在版は[`gpt-connector@0.3.0`](https://www.npmjs.com/package/gpt-connector)。ソースと変更履歴は[GitHub repository](https://github.com/kitepon-rgb/gpt-connector)を正とする。
14
14
 
15
15
  ## 成立済み機能
16
16
 
@@ -26,7 +26,7 @@ Codex開発枠から、ログイン済みChatGPT公式Web runtimeの通常Chat
26
26
  - 256KiB CDP chunk転送とpage側SHA-256照合。
27
27
  - server attachment metadata read-backとモデル読取確認。
28
28
  - caller既知slugによるconsult冪等性、terminal result回収、owner-only durable job台帳。
29
- - upload/conversationを作らないdry-rundiagnostics。
29
+ - upload/conversationを作らないdry-run、既存diagnostics、factory diagnostics
30
30
  - CLIとstdio MCP adapter。
31
31
 
32
32
  ## 前提
@@ -45,18 +45,33 @@ npm install --global gpt-connector
45
45
  ```
46
46
 
47
47
  専用Chromeを起動する。通常ChromeとOracle profileは使用しない。
48
+ true headlessは使わず、cold startでは窓なしで専用profileのheadful Chromeを起動する。CDP browser endpointからChatGPT targetを最初から最小化状態で作成し、最小化を確認してからapp readyを待つ。既存endpointではapp probeより先に専用ChatGPT windowを最小化する。現行macOS実測では最小化中も送受信を維持する。
49
+
50
+ Chromeのhidden状態はflashを覆うcold準備中だけに使い、最小化確認後は正規PIDだけをunhideしてからprobeする。hiddenのまま運用せず、Oracleのhide fallbackでもない。
51
+
52
+ `browser start`が成功を返す時点では専用ChatGPT windowは最小化済みである。認証が必要になった場合だけwindowを表示へ戻す。手動でログイン/確認するには次を使う。
53
+
54
+ window stateのCDP read-backは遷移直後の旧stateを単発判定せず、有界時間内に期待stateへ収束したことを確認する。
55
+
56
+ ChromeのCDPはshow後も最小化状態を返すことがあるため、表示/非表示の最終判定は正規PIDのWindowServer layer 0 window数で行う。start成功時は0、show成功時は1件以上である。
57
+ 実機では同時cold startが`started` 1件/`already_ready` 1件へ収束し、新規専用Chrome PIDで15秒・10ms監視中のlayer 0 on-screen最大値は0だった。`models`とchat(`ACCEPTED_NO_FLASH_OK`)の後も0を維持し、show→startは0→1→0を確認した。
48
58
 
49
59
  ```bash
50
- open -na 'Google Chrome' --args \
51
- --remote-debugging-port=9223 \
52
- --user-data-dir="$HOME/.gpt-connector/browser-profile" \
53
- --no-first-run \
54
- --no-default-browser-check \
55
- https://chatgpt.com/
60
+ gpt-connector browser show
61
+ ```
62
+
63
+ Chrome更新時はrelease smokeとして`browser start`、`models`、最小化中の`chat`、必要時の`browser show`を確認する。
64
+
65
+ ```bash
66
+ gpt-connector browser start
56
67
  ```
57
68
 
58
69
  初回だけ、開いた専用ChromeでChatGPTへ手動ログインする。connectorはpassword、cookie、tokenを読み出さない。
59
70
 
71
+ ### AI installer向けセットアップ
72
+
73
+ CodexなどのAIが導入する場合は、[AI installer向けセットアップ契約](docs/ai-installer-setup-contract.md)に従う。AIはinstall、専用Chrome起動、read-only診断、MCP設定を担当し、人間には専用ChromeでのChatGPTログインだけを依頼する。通常ChromeやOracleのprofile、認証情報は使用しない。
74
+
60
75
  ## source setup
61
76
 
62
77
  ```bash
@@ -114,6 +129,45 @@ gpt-connector --version
114
129
 
115
130
  `doctor`は`gpt-connector.diagnostics.v1` JSONを返します。接続可能なら`overall: "ready"`、CDPや認証などが未準備なら`overall: "not_ready"`と安定`reasonCode`をstdoutへ返し、exit codeは非0です。診断はuploadや会話作成を行いません。
116
131
 
132
+ ## BugHub factory 契約
133
+
134
+ 既存の `doctor` と別に、factory consumer 用の versioned read-only JSON を提供します。
135
+
136
+ ```bash
137
+ gpt-connector factory-diagnostics --json
138
+ gpt-connector runtime-errors diagnostics --json
139
+ gpt-connector runtime-errors snapshot --after-cursor 0 --limit 256 --json
140
+ ```
141
+
142
+ `factory-diagnostics` は package version、既存 diagnostics schema、overall、consult job の
143
+ state/job schema と migration、CDP、official origin、auth、runtime bridge、stdio MCP contractを
144
+ 固定 check ID で返します。Chrome/CDP/auth が未準備なら `not_ready`、live connector を提供しない
145
+ host は `unsupported`、検査できない項目は `unverified` です。いずれも upload、conversation、archive、
146
+ job 作成を行いません。
147
+
148
+ `runtime-errors` は product-owned local aggregate であり、network I/O は実装しません。canonical
149
+ dotagents factory config(POSIX: `~/.config/dotagents/factory-reporter.json`、Windows native:
150
+ `%LOCALAPPDATA%\\dotagents\\factory-reporter\\config.json`)が厳密な JSON shape で
151
+ `collection.enabled: true` の場合だけ collection を開始します。設定なし・不正設定・
152
+ `reporting.enabled`・token/credentialの存在は collection を有効にしません。既定はOFFです。
153
+
154
+ 公開操作はすべて `--json` 必須です。
155
+
156
+ ```bash
157
+ gpt-connector runtime-errors snapshot --json
158
+ gpt-connector runtime-errors diagnostics --json
159
+ gpt-connector runtime-errors ack 12 --json
160
+ gpt-connector runtime-errors resolve <sha256-fingerprint> --json
161
+ gpt-connector runtime-errors reopen <sha256-fingerprint> --json
162
+ gpt-connector runtime-errors compact --json
163
+ ```
164
+
165
+ recordは固定 code/template、SHA-256 fingerprint、count、first/last seen、status、cursorだけを持ちます。
166
+ ack cursor は単調で、compact は retention を過ぎた resolved かつ ack 済み recordだけを削除します。
167
+ stateは製品所有directoryへ owner-only atomic writeし、symlink・権限 drift・schema改ざんを拒否します。
168
+ prompt、assistant response、file名/内容/digest、conversation/session/job ID、cookie/token、CDP dump、
169
+ 絶対path、生stack/stderrは入力・保存・出力できません。
170
+
117
171
  ## Codex MCP
118
172
 
119
173
  Codexはtrusted projectの`.codex/config.toml`を読み、stdio serverは`command`と`env`で構成できる。npm global install後は、利用するprojectへ次の設定を置く。
@@ -0,0 +1,57 @@
1
+ export interface BrowserLaunchResult {
2
+ readonly ok: true;
3
+ readonly status: "already_ready" | "started";
4
+ readonly endpoint: "http://127.0.0.1:9223";
5
+ }
6
+ export interface BrowserShowResult {
7
+ readonly ok: true;
8
+ readonly status: "shown";
9
+ readonly endpoint: "http://127.0.0.1:9223";
10
+ }
11
+ type Spawned = {
12
+ readonly once: (event: "error", listener: (error: Error) => void) => unknown;
13
+ };
14
+ type Spawn = (command: string, args: readonly string[]) => Spawned;
15
+ type Readiness = () => Promise<boolean>;
16
+ interface ListenerProcess {
17
+ readonly pid: string;
18
+ readonly command: string;
19
+ }
20
+ type ProcessInspector = () => Promise<readonly ListenerProcess[]>;
21
+ interface BrowserLock {
22
+ release(): Promise<void>;
23
+ }
24
+ type LockAcquirer = (profile: string, waitDeadlineMs: number) => Promise<BrowserLock>;
25
+ type WindowMinimizer = () => Promise<"minimized">;
26
+ type ColdTargetCreator = () => Promise<string>;
27
+ type ColdWindowVerifier = (targetId: string) => Promise<"minimized">;
28
+ type WindowShower = () => Promise<"normal">;
29
+ type ProcessRevealer = (pid: number, timeoutMs: number) => Promise<void>;
30
+ type ProcessActivator = (pid: number, timeoutMs: number) => Promise<void>;
31
+ type WindowVisibilityVerifier = (pid: number, expectedVisible: boolean, timeoutMs: number) => Promise<void>;
32
+ interface BrowserOptions {
33
+ readonly platform?: NodeJS.Platform;
34
+ readonly home?: string;
35
+ readonly fetch?: typeof globalThis.fetch;
36
+ readonly spawn?: Spawn;
37
+ readonly sleep?: (milliseconds: number) => Promise<void>;
38
+ readonly endpointReady?: Readiness;
39
+ readonly appReady?: Readiness;
40
+ readonly connectorProbe?: Readiness;
41
+ readonly processInspector?: ProcessInspector;
42
+ readonly lockAcquirer?: LockAcquirer;
43
+ readonly windowMinimizer?: WindowMinimizer;
44
+ readonly coldTargetCreator?: ColdTargetCreator;
45
+ readonly coldWindowVerifier?: ColdWindowVerifier;
46
+ readonly windowShower?: WindowShower;
47
+ readonly existingTargetAbsent?: Readiness;
48
+ readonly processRevealer?: ProcessRevealer;
49
+ readonly processActivator?: ProcessActivator;
50
+ readonly windowVisibilityVerifier?: WindowVisibilityVerifier;
51
+ readonly probeTimeoutMs?: number;
52
+ readonly appProbeTimeoutMs?: number;
53
+ readonly readyDeadlineMs?: number;
54
+ }
55
+ export declare function startBrowser(options?: BrowserOptions): Promise<BrowserLaunchResult>;
56
+ export declare function showBrowser(options?: BrowserOptions): Promise<BrowserShowResult>;
57
+ export {};