addashboard-cli 0.9.2 → 0.9.4
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/commands/ads.js +4 -7
- package/dist/commands/ads.js.map +1 -1
- package/dist/commands/authDevice.js +10 -2
- package/dist/commands/authDevice.js.map +1 -1
- package/dist/commands/authGoogle.js +39 -42
- package/dist/commands/authGoogle.js.map +1 -1
- package/dist/commands/freee.js +2 -18
- package/dist/commands/freee.js.map +1 -1
- package/dist/commands/pl.js +4 -8
- package/dist/commands/pl.js.map +1 -1
- package/dist/commands/review.js +4 -8
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.js +2 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/submission.js +236 -21
- package/dist/commands/submission.js.map +1 -1
- package/dist/index.js +46 -31
- package/dist/index.js.map +1 -1
- package/dist/lib/apiError.js +63 -0
- package/dist/lib/apiError.js.map +1 -0
- package/dist/lib/authFlow.js +82 -0
- package/dist/lib/authFlow.js.map +1 -0
- package/dist/lib/googleImageMetadata.js +145 -0
- package/dist/lib/googleImageMetadata.js.map +1 -0
- package/dist/lib/openBrowser.js +63 -0
- package/dist/lib/openBrowser.js.map +1 -0
- package/dist/schemas/submit-plan.js +27 -1
- package/dist/schemas/submit-plan.js.map +1 -1
- package/package.json +4 -3
- package/skills/ad-ops/SKILL.md +84 -10
- package/skills/ad-ops/ad-planner.html +275 -21
- package/skills/ad-ops/scripts/adops.sh +39 -9
- package/skills/ad-ops/scripts/plan_lint.py +262 -28
- package/skills/ad-ops/scripts/refs_import.py +251 -20
- package/skills/ad-ops/scripts/test_plan_lint.sh +126 -0
- package/skills/ad-ops//343/202/242/343/202/253/343/202/246/343/203/263/343/203/210/google/sample_account.json +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-plan.js","sourceRoot":"","sources":["../../src/schemas/submit-plan.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"submit-plan.js","sourceRoot":"","sources":["../../src/schemas/submit-plan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "addashboard-cli",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.4",
|
|
4
4
|
"description": "webgram CLI — ad-dashboard (https://macchiato.site) を Claude Code / Codex CLI から操作するための CLI",
|
|
5
5
|
"bin": {
|
|
6
6
|
"webgram": "./dist/index.js"
|
|
@@ -42,8 +42,9 @@
|
|
|
42
42
|
"test:watch": "vitest",
|
|
43
43
|
"test:e2e": "npm run build && playwright test",
|
|
44
44
|
"prepublishOnly": "npm run build",
|
|
45
|
-
"prepack": "node scripts/materialize-skills.js",
|
|
46
|
-
"postpack": "node scripts/materialize-skills.js --restore"
|
|
45
|
+
"prepack": "node scripts/sync-version.js && node scripts/materialize-skills.js",
|
|
46
|
+
"postpack": "node scripts/materialize-skills.js --restore",
|
|
47
|
+
"version:sync": "node scripts/sync-version.js"
|
|
47
48
|
},
|
|
48
49
|
"dependencies": {
|
|
49
50
|
"axios": "^1.7.7",
|
package/skills/ad-ops/SKILL.md
CHANGED
|
@@ -21,7 +21,8 @@ ad-hoc に `python3 -c` / `curl` / `ls -t` を書かない。**定型作業は
|
|
|
21
21
|
```bash
|
|
22
22
|
skills/ad-ops/scripts/adops.sh preflight <platform> <accountId> # フェーズ0: ログイン + アカウント疎通確認
|
|
23
23
|
skills/ad-ops/scripts/adops.sh planner [--stop] # フェーズ2: プランナーをHTTPで開く
|
|
24
|
-
skills/ad-ops/scripts/adops.sh plan [<入稿計画.json>]
|
|
24
|
+
skills/ad-ops/scripts/adops.sh plan [--wait] [<入稿計画.json>] # フェーズ3: DL回収 + 要約 + lint + 合意との差分
|
|
25
|
+
# --wait = 入稿ボタンが押されるまで待つ(バックグラウンドで起動する)
|
|
25
26
|
skills/ad-ops/scripts/adops.sh open <platform> <accountId> [campaigns|adgroups|ads] # 管理画面を開く(中間層は YDA=adgroups / Meta=adsets に自動変換)
|
|
26
27
|
skills/ad-ops/scripts/adops.sh refs-import <platform> <accountId> [--write] # 実アカウントから参照表を取り込む
|
|
27
28
|
```
|
|
@@ -30,9 +31,10 @@ skills/ad-ops/scripts/adops.sh refs-import <platform> <accountId> [--write]
|
|
|
30
31
|
|---|---|
|
|
31
32
|
| `preflight` | `auth whoami` → `list --resource accounts` を1回だけ叩き、**その accountId が接続中の認証情報で入稿可能か**を判定。不可なら exit 1 でアクセス可能なアカウント一覧を出す |
|
|
32
33
|
| `planner` | ポート 8799 で `http.server` を起動(起動済みなら再利用)してブラウザで開く。`--stop` で停止 |
|
|
33
|
-
| `plan` | `~/Downloads` に落ちた入稿計画を `入稿計画/` へリネーム移動し、構成を表で要約し、**dry-run が検出しない不備**を lint し、`サンプルプラン.json
|
|
34
|
+
| `plan` | `~/Downloads` に落ちた入稿計画を `入稿計画/` へリネーム移動し、構成を表で要約し、**dry-run が検出しない不備**を lint し、`サンプルプラン.json`(=合意内容)との**差分だけ**を出す。**対象はファイル名ではなく中身で判定する**(ブラウザがダウンロード名を改変するため) |
|
|
35
|
+
| `plan --wait` | 上記を、**プランナーの入稿ボタンが押されるまで待ってから**行う。押下を検知すると自動で回収〜lint まで進むので、**プロンプトのコピペが要らなくなる**。Claude がバックグラウンドで起動する |
|
|
34
36
|
| `open` | アカウントJSONの `mccId` を読んで管理画面URLを組み立てて開く。`--dry` でURLを出すだけ。**中間層の語は媒体で違う**(YDA=`adgroups` / Meta=`adsets`)が、どちらの表記で渡しても媒体別の正しい語へ変換される |
|
|
35
|
-
| `refs-import` |
|
|
37
|
+
| `refs-import` | 実アカウントから参照表を集めてアカウントJSONの `refs` にマージする(**yda / google**)。`--from-plan <入稿計画.json>` は実 API を叩かず、**本実行でアップロードしたロゴ**を取り込む。yda は見出し・説明文・CP名・広告グループの `campaignId`/`paramCode`/`finalUrlSample`・オーディエンス・配置面、google はブランド名・長見出し・ロゴ。**既定は差分表示のみ**、`--write` で書き込み(既存の番号を振り直さず、既存の値を消さず、書き込み前に `.bak` へ退避する) |
|
|
36
38
|
|
|
37
39
|
**【必須】管理画面URLを手で組み立てない。** 媒体ごとのURL形式(YDA の `mccId` 等)は `adops.sh open` に集約してある。SKILL.md や応答にURLをベタ書きすると、今回のように形式が変わったとき全箇所が腐る。
|
|
38
40
|
|
|
@@ -102,7 +104,17 @@ npx -y addashboard-cli@latest auth whoami
|
|
|
102
104
|
|
|
103
105
|
* 成功 → 1 行要約して次へ
|
|
104
106
|
|
|
105
|
-
* `not_logged_in` →
|
|
107
|
+
* `not_logged_in` → **停止せず、そのままログインを実行して完了を待ち、元の処理へ戻る**
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
npx -y addashboard-cli@latest auth login
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
ローカルの macOS / Windows / デスクトップ Linux では**ブラウザが自動で開く**ので、ユーザーは Google でログインするだけでよい。完了すると CLI が自動で続行する。CI / SSH / コンテナでは URL と入力コードが表示される方式に自動で切り替わるので、その2つをユーザーに伝えて待つ。
|
|
114
|
+
|
|
115
|
+
* **ブラウザ操作そのものは本人が行う。エージェントは Google の資格情報を扱わない**(この原則は従来どおり)
|
|
116
|
+
* **必ずバックグラウンドで起動し、終了を待ってから次へ進む**。ブラウザ方式は最大5分、コード方式に切り替わった場合は最大30分待つので、前面で実行すると Bash の実行上限(10分)に当たる
|
|
117
|
+
* 失敗したらエラーを要約して提示する。`--password` (ROPC) は使わない
|
|
106
118
|
|
|
107
119
|
### Step 1: 動画ファイルパスの受け取り
|
|
108
120
|
|
|
@@ -315,11 +327,12 @@ skills/ad-ops/scripts/adops.sh open yda <accountId> campaigns
|
|
|
315
327
|
| **本実行(実際の入稿)** | ✅ **できる**(2026-08-23 に実 API で確認済み)。ただし**配信オン (ENABLED) では入稿できない** — backend が 400 で拒否し、lint も ERROR で止める。**PAUSED で入稿し、管理画面で確認してから手で配信をオンにする**運用。広告が1件も作れなかった CP は自動削除される |
|
|
316
328
|
| 既存キャンペーン・広告グループへの広告追加 | ❌ 未対応。毎回あたらしいキャンペーンを作る形になる |
|
|
317
329
|
| 動画ファイルのアップロード | ❌ 未対応。**Google Ads API には窓口があるが(`YouTubeVideoUploadService`)、使っている Node ライブラリ(Opteo `google-ads-api`)が非対応**。運用者が YouTube へ手で上げ、動画IDを渡す |
|
|
318
|
-
| 参照データの自動取込(`refs-import`) |
|
|
330
|
+
| 参照データの自動取込(`refs-import`) | ✅ `adops.sh refs-import google <accountId> [--write]`。既存の Demand Gen 広告から**ブランド名 / 長見出し / ロゴ**を集めてアカウントJSONへマージする。既定は差分表示のみ。`--write` は書き込み前に `<名前>.json.bak` へ退避する |
|
|
319
331
|
| 管理画面を開く | ✅ `adops.sh open google <customerId> [campaigns\|adgroups\|ads]`。アカウントJSONの `consoleMcc` を使う |
|
|
320
332
|
| 入稿後に状態を確認する | ✅ `webgram list --platform google --resource ads --account-id <id> [--campaign-id <cpId>]`。**キャンペーン / 広告グループ / 広告の status を名前で返す**(PAUSED で入ったかを管理画面を開かずに確認できる) |
|
|
321
|
-
| 画像のローカルパス入稿 |
|
|
333
|
+
| 画像のローカルパス入稿 | **ロゴのみ対応**。プランナーの「ロゴ画像パス」にローカル画像を指定すると、本実行の直前に CLI がアップロードして resource_name に解決する(dry-run では上げない)。**マーケティング画像(横長・正方形)は未対応**で、登録済みアセットの `resource_name` を用意する |
|
|
322
334
|
| 地域の指定漏れ | ✅ 安全弁あり。**未指定なら日本 (2392) を既定で入れる**(未指定は全世界配信になるため。Meta の JP 既定と同じ) |
|
|
335
|
+
| キャンペーン名の重複 | ✅ 三重に止める。**プランナー**(`refs.campaigns` と突き合わせ、代替名も提案)/ **CLI**(本実行の直前に実データと突き合わせ。**素材のアップロードより前**に止める)/ **backend**(live で 400)。dry-run は実 API を叩かないので従来どおり通る |
|
|
323
336
|
|
|
324
337
|
### キャンペーン型が Demand Gen 固定な理由
|
|
325
338
|
|
|
@@ -332,7 +345,42 @@ skills/ad-ops/scripts/adops.sh open yda <accountId> campaigns
|
|
|
332
345
|
1. **YouTube 動画ID** — 運用者が事前に YouTube へアップロードしておく(動画広告の場合)
|
|
333
346
|
2. **ブランド名** — 広告に表示される広告主名(表示幅25まで)。**Demand Gen では必須**
|
|
334
347
|
3. **ロゴ画像アセット** — Google Ads に登録済み IMAGE アセットの resource_name。**画像広告では必須**(1:1・128x128以上)
|
|
348
|
+
|
|
349
|
+
**手で写さない。取り込む。**
|
|
350
|
+
```bash
|
|
351
|
+
webgram list --platform google --resource resources --account-id <customerId> # 中身を見るだけ
|
|
352
|
+
skills/ad-ops/scripts/adops.sh refs-import google <customerId> # 差分表示(既定)
|
|
353
|
+
skills/ad-ops/scripts/adops.sh refs-import google <customerId> --write # アカウントJSONへ反映
|
|
354
|
+
```
|
|
355
|
+
取り込むと**プランナーの「ロゴアセット」チップがプルダウンになる**(未取込のあいだは従来どおり手入力)。
|
|
356
|
+
`logos` は既存広告で実際にロゴとして使われているもの、`logoCandidates` は 1:1・128px 以上の未使用画像。
|
|
357
|
+
**候補は自動では取り込まない**(正方形画像がロゴとは限らないため)。使うなら `refs.logos` へ手で足す。
|
|
358
|
+
|
|
359
|
+
**asset は Customer をまたいで参照できない。** 別アカウントの resource_name を入れると入稿時に必ず落ちるので、
|
|
360
|
+
プランナーが書き出しの手前で止める
|
|
361
|
+
|
|
362
|
+
**ロゴが1つも登録されていないアカウント**では、プランナーの「ロゴ画像パス」にローカル画像を入れる。
|
|
363
|
+
本実行の直前に CLI がアップロードしてアセット化する(1:1・128x128以上・GIF/JPEG/PNG。カンマ改行区切りで最大5件)。
|
|
364
|
+
要件を満たさない画像は**アップロードを1件も始める前に**止まる。作ったアセットは
|
|
365
|
+
`refs-import google <accountId> --from-plan <入稿計画.json> --write` でアカウントJSONに取り込むと、
|
|
366
|
+
次回からプルダウンで選べる。
|
|
367
|
+
|
|
368
|
+
> **アセットは削除できない**(`AssetOperation` に remove が無い)。「ロゴアセット」と「ロゴ画像パス」の
|
|
369
|
+
> 同時指定は二重に作るので書き出しでブロックする。自動リサイズはしない — トリミングはロゴの端が欠け、
|
|
370
|
+
> 余白追加は背景色の判断が要るため、壊れたロゴを消せない場所に作ってしまう
|
|
335
371
|
4. **地域** — **指定しないと全世界配信になる**。通常は「日本」
|
|
372
|
+
5. **キャンペーン名** — **同名は拒否される**。プランナーの自動生成(`{URL番号}_{画像番号+形式}_{日付}`)は
|
|
373
|
+
日付が入るので通常は衝突しないが、同じ日に同じ番号で作り直すと当たる。
|
|
374
|
+
|
|
375
|
+
検知には `refs.campaigns` が要る。**入稿の前に取り込んでおく**:
|
|
376
|
+
```bash
|
|
377
|
+
skills/ad-ops/scripts/adops.sh refs-import google <customerId> --write
|
|
378
|
+
```
|
|
379
|
+
取り込みが古いと**プランナーの検知は空振りする**。本実行の直前に CLI が実データと
|
|
380
|
+
突き合わせるので最後は止まるが、その時点だと計画を書き直す手戻りが大きい。
|
|
381
|
+
|
|
382
|
+
> 重複していたら**代替名を提案する**(`〜_2` `〜_3`)。**自動でリネームはしない** —
|
|
383
|
+
> 運用者の意図と食い違う名前で本番に作られるより、名前を選び直してもらうほうが安全
|
|
336
384
|
|
|
337
385
|
### YDA / Meta との構造の違い
|
|
338
386
|
|
|
@@ -589,11 +637,33 @@ npx -y addashboard-cli@latest update-status \
|
|
|
589
637
|
> **`file://` で開いてはならない。** `fetch('サンプルプラン.json')` がブラウザにブロックされ、**エラーも出ないまま空のプランナーが表示される**。「プランが出てこない」と言われたら真っ先にこれを疑う。
|
|
590
638
|
3. **ユーザーが画面で内容を確認する。** 修正は次のいずれかで行う: 構成・文言の作り直しは **AI に再指示**(サンプルプラン JSON を上書きして再読込)、個別の追加・複製・文言/画像/パラメータの微修正は **プランナー内で直接編集**(セル選択コピペ可)。
|
|
591
639
|
4. 確認完了を `AskUserQuestion` で承認してもらう。**この承認がフェーズ3へのゲートである。**
|
|
592
|
-
|
|
593
|
-
|
|
640
|
+
5. **プランナーを開いたら、続けて入稿ボタンの待機をバックグラウンドで起動する**(下記「入稿ボタンの自動検知」)。ユーザーが画面で確認している間も会話は普通にできる。
|
|
641
|
+
3. **入稿計画**: プランナーの **「✅完成→保存して入稿」** を押して入稿計画JSONを書き出す(保存導線はこの1本だけ。旧「バージョン保存」ボタンは撤去済み)。押されると待機が検知して自動で先に進む。手動で進める場合も含め、以降は同じ:
|
|
642
|
+
1. **`adops.sh plan` を実行する。** DL回収・要約・lint・合意との差分がまとめて出る(待機経由なら実行済み)。
|
|
594
643
|
2. **【必須】差分だけを提示して確認を取る。** 出力の「合意(サンプルプラン)との差分」に挙がった項目**のみ**をユーザーに確認する。差分なしなら「合意どおり」とだけ伝える。**全項目の読み上げはしない**(冗長なうえ、読み上げに頼ると差分の見落としが起きる)。
|
|
595
644
|
3. **lint の ERROR が残っているうちは dry-run に進まない。** ERROR は dry-run が素通りさせる実害(相対 finalUrl・paramCode 衝突・クリエイティブ未解決)を拾っている。
|
|
596
645
|
4. `submit-plan` の **dry-run を流し**、全件パスを確認してから `AskUserQuestion` で本実行の承認を取る。
|
|
646
|
+
|
|
647
|
+
#### 入稿ボタンの自動検知(`adops.sh plan --wait`)
|
|
648
|
+
|
|
649
|
+
**プランナーを開いたら、続けてこれをバックグラウンドで起動する。** ユーザーが入稿ボタンを押した瞬間に検知し、回収・要約・lint まで一気に進む。**プロンプトを貼り直してもらう必要はない。**
|
|
650
|
+
|
|
651
|
+
```bash
|
|
652
|
+
skills/ad-ops/scripts/adops.sh plan --wait
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
- **【必須】Claude 自身がバックグラウンド実行する。** `adops.sh` の内部で `nohup` に逃がすと完了通知が返らず、この仕組みが成立しない
|
|
656
|
+
- 待機はブロッキングではないので、**ユーザーがプランナーで調整している間も普通に会話できる**(文言の相談・参照データの取り込み・空き番号の確認など)
|
|
657
|
+
- ⚠ **待機中に `入稿計画/` へファイルを書かない**(サンプルプランの更新などで誤検知しうる)
|
|
658
|
+
|
|
659
|
+
計画の特定は**ファイル名ではなく中身**で行う。ブラウザがダウンロード名を勝手に整形するため(実測: `TikTok入稿API検証_TikTok入稿計画_20260827-010101.json` → `TikTok 入稿 API 検証 2026年8月27日.json`)。保存フォルダの接続状態で保存先が変わるので `入稿計画/` と `~/Downloads` の両方を見る。
|
|
660
|
+
|
|
661
|
+
| exit | 意味 | Claude がすること |
|
|
662
|
+
|---|---|---|
|
|
663
|
+
| 0 | 検知して lint も通った | `submit-plan` の dry-run へ進む |
|
|
664
|
+
| 1 | 検知したが **lint ERROR** | ERROR を提示して修正を促す。**dry-run に進まない** |
|
|
665
|
+
| 3 | **作業中と違う案件**の計画が出た | プランナーのアカウント選択を確認してもらう |
|
|
666
|
+
| 124 | 時間内に押されなかった | 「ボタンを押したか」「保存先が `入稿計画/` か」を確認する |
|
|
597
667
|
4. **実行**: 承認後に `--no-dry-run --yes` で本実行する(1キャンペーンずつ・`submitted` はスキップ)。結果と管理画面URLを報告する。
|
|
598
668
|
|
|
599
669
|
**入稿計画ファイルの置き場所**: 書き出しはブラウザ設定によりダウンロードフォルダに落ちることがある。**`~/Downloads` に残さない。** `adops.sh plan` が `入稿計画/<案件名>_<CP名>_入稿計画_<timestamp>.json` へ自動でリネーム移動する。
|
|
@@ -608,6 +678,7 @@ npx -y addashboard-cli@latest update-status \
|
|
|
608
678
|
| 日予算の桁間違い | 想定外の課金 |
|
|
609
679
|
| CP名に「テスト」等が残存 | 本番アカウントに検証用の名前が残る |
|
|
610
680
|
| **CP名がアカウントの既存CPと同名 (Google)** | **Google は同名CPを拒否する**。dry-run は通り、本実行の作成で落ちる。lint が ERROR で拾う |
|
|
681
|
+
| **同じ計画の中で CP名が重複 (Google)** | まとめて入稿すると2件目以降が落ちる。`refs` の鮮度と無関係にローカルで確定するので lint / プランナー / CLI / backend の全層で ERROR |
|
|
611
682
|
| `imagePaths` のファイルが存在しない | 本実行のアップロードで初めて落ちる。lint は ERROR で拾う(`~` 展開・相対の基準は計画JSONのディレクトリ) |
|
|
612
683
|
| `paramCode` が特定できない | 計測パラメータ無しの広告が入稿される。パラメータ無し運用なら `urlParamsEnabled: false` を入れる(WARN 止まりになる) |
|
|
613
684
|
| `smartTargeting: false` | 配信が伸びない。方針は常時 ON なので lint が WARN で拾う |
|
|
@@ -805,7 +876,9 @@ npx -y addashboard-cli@latest list --platform yda --resource ads \
|
|
|
805
876
|
|
|
806
877
|
## ログイン情報の取り扱い
|
|
807
878
|
|
|
808
|
-
-
|
|
879
|
+
- **通常はブラウザ方式 (loopback) を使う**: パスワードは扱わない。`auth login` が**ブラウザを自動で開き**、ユーザーが Google で許可すると CLI が自動で続行する。Google 資格情報は Google 側でのみ入力される
|
|
880
|
+
- **ブラウザを開けない環境では device flow に自動で落ちる**(CI / SSH / コンテナ / リモートワークスペース、または `open`・`xdg-open` が無い場合)。このときは CLI が出す `verification_url` と `user_code` をユーザーに伝えて待つ
|
|
881
|
+
- 方式を固定したいときは `--loopback` / `--device`、または環境変数 `WEBGRAM_AUTH_FLOW=loopback|device|auto`(既定 `auto`)
|
|
809
882
|
- device_code / user_code は Google のワンタイム値。不要に貼らない
|
|
810
883
|
- 認証成功後は `~/.config/webgram/credentials.json` (`chmod 0600`) に保存される (再認証不要)
|
|
811
884
|
- **`--password` (ROPC) は deprecated なフォールバック**: どうしても device flow もブラウザも使えない場合のみ。使う場合は AskUserQuestion で1回だけ聞き、`printf '%s\n' '<pw>' | npx -y addashboard-cli@latest auth login --password --email <email>` の形で **stdin パイプ** 経由で渡す (argv は `ps` / シェル履歴に露出するため)。パスワードは応答メッセージに絶対書かない
|
|
@@ -825,7 +898,8 @@ npx -y addashboard-cli@latest list --platform yda --resource ads \
|
|
|
825
898
|
| `command not found: npx` | Node.js が入っていない。`https://nodejs.org` から LTS 版インストールを案内 |
|
|
826
899
|
| `Login failed: invalid_grant` | Web UI (`https://macchiato.site`) でログインできるか確認を案内 |
|
|
827
900
|
| `Login failed: network_error` | `curl -v https://macchiato.site/api/health` で疎通確認 |
|
|
828
|
-
| `not_logged_in` (whoami 時) | `auth login`
|
|
901
|
+
| `not_logged_in` (whoami 時) | 停止せず `auth login` を実行して完了を待ち、元の処理に戻る |
|
|
902
|
+
| ブラウザが開かない | `browser_unavailable` が出て自動でコード方式に切り替わる。切り替わらない場合は `--device` を付けて実行 |
|
|
829
903
|
| Rate limit (429) | 15分間ログイン失敗5回でブロック。15分待ってから再試行 |
|
|
830
904
|
| 入稿失敗 (媒体API側) | エラーメッセージを要約してユーザーに提示、残りの入稿を続けるか AskUserQuestion で確認 |
|
|
831
905
|
|