@luoyi-dsh/instagram-scroll 1.0.0 → 1.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.
package/README.md CHANGED
@@ -1,158 +1,172 @@
1
- # DSH Instagram 滾動瀏覽與探索插件 (`@luoyi-dsh/instagram-scroll`)
2
-
3
- ![Banner](assets/banner.png)
4
-
5
- > **DeepSeek Harness (DSH)** 專屬的 Instagram 動態探索、智慧推坑與日報生成外掛。
6
- > 具備核心能力:**定時或手動替主人刷一輪 Instagram 首頁動態與主題標籤、逐條閱讀內文評估主人興趣、自動點讚與留言推坑,並自動彙整生成每日 Markdown 探索日報**。
7
-
8
- ---
9
-
10
- ## 🌟 核心特性
11
-
12
- 1. **自動動態探索巡查 (Scroll Duty)**:
13
- - 定期輪詢首頁動態牆 (Timeline Feed) 與指定主題標籤 (Hashtags)。
14
- - 逐則貼文抓取標題、作者、標籤與完整內文。
15
- 2. **LLM 價值評估與推坑 (AI Recommendation)**:
16
- - 由大語言模型依據主人的興趣 Prompt 深度分析貼文內容與價值評分。
17
- - 若達標(預設 > 75 分),自動在貼文下點讚並留言 `@目標用戶` 附上真誠自然的推薦語。
18
- 3. **每日探索日報 (Daily Markdown Report)**:
19
- - 自動將今日瀏覽之所有精選貼文、摘要與推薦紀錄整理為 Markdown 日報。
20
- - 儲存於 `data/reports/YYYY-MM-DD.md`,可隨時在 Web 面板查看與回溯。
21
- 4. **狀態帳本與嚴格去重控制**:
22
- - `data/scroll_ledger.json` 記錄已看貼文 PK 與今日推坑次數,避免重複推坑或重複閱讀,並防止觸發風控。
23
- 5. **DSH Web 瀏覽器端介面 (`client.js`)**:
24
- - 提供直觀動態牆瀑布流預覽、即時手動觸發刷動態按鈕、日報閱讀器與自訂設定面板。
25
-
26
- ---
27
-
28
- ## 📦 安裝方式
29
-
30
- 使用 DSH CLI 安裝插件:
31
-
32
- ```bash
33
- dsh plugin --profile web add @luoyi-dsh/instagram-scroll
34
- ```
35
-
36
- 或透過 npm 安裝:
37
-
38
- ```bash
39
- npm install @luoyi-dsh/instagram-scroll
40
- ```
41
-
42
- ---
43
-
44
- ## 🛠️ 提供之 DSH Tools
45
-
46
- | 工具名稱 | 說明 | 參數 |
47
- | :--- | :--- | :--- |
48
- | **`ig_run_scroll_duty_now`** | 立即手動替主人刷一輪 Instagram 動態與探索,讀取貼文進行評估、點讚與留言推坑 | 無 |
49
- | **`ig_scroll_feed`** | 滾動讀取 Instagram 時間軸最新動態貼文(含作者、讚數、內文摘要) | `limit` (number,預設 15,最大 50) |
50
- | **`ig_explore_topics`** | 依照指定主題或探索標籤滾動閱讀熱門貼文 | `tag` (string,必填), `limit` (number,預設 15) |
51
- | **`ig_like_feed_post`** | 在滾動瀏覽過程中對感興趣的 Instagram 貼文按讚 | `media_pk` (string,必填) |
52
-
53
- ---
54
-
55
- ## 💻 使用範例
56
-
57
- ### 1. DSH AI 自然語言直接調用
58
-
59
- 在 DSH 對話中,主模型可直接以自然語言執行滾動探索或瀏覽:
60
-
61
- ```text
62
- 💬 範例 1:執行一輪完整的動態探索與推坑
63
- 「請立刻替我刷一輪 Instagram 動態牆,看看有沒有適合我的技術新貼文並推薦給我」
64
- -> AI 將調用:ig_run_scroll_duty_now()
65
-
66
- 💬 範例 2:滾動瀏覽首頁動態貼文
67
- 「幫我刷最新 10 則 Instagram 動態」
68
- -> AI 將調用:ig_scroll_feed(limit=10)
69
-
70
- 💬 範例 3:探索特定主題標籤
71
- 「探索 Instagram 上 #deepseek 標籤的熱門貼文」
72
- -> AI 將調用:ig_explore_topics(tag="deepseek", limit=15)
73
- ```
74
-
75
- ---
76
-
77
- ### 2. 透過 HTTP REST API 調用 (DSH Web 路由)
78
-
79
- > 💡 **提示**:DSH Web 預設埠號為 **3080**。插件已註冊官方 REST API(前綴 `/api/instagram/scroll`):
80
-
81
- #### 1. 手動觸發滾動一輪 (`POST /api/instagram/scroll/run`)
82
- ```bash
83
- curl -X POST http://127.0.0.1:3080/api/instagram/scroll/run
84
- ```
85
-
86
- #### 2. 獲取當前滾動狀態與今日統計 (`GET /api/instagram/scroll/status`)
87
- ```bash
88
- curl http://127.0.0.1:3080/api/instagram/scroll/status
89
- ```
90
-
91
- #### 3. 讀取今日探索日報內容 (`GET /api/instagram/scroll/report`)
92
- ```bash
93
- curl http://127.0.0.1:3080/api/instagram/scroll/report
94
- ```
95
-
96
- #### 4. 讀取與更新設定 (`GET / POST /api/instagram/scroll/config`)
97
- ```bash
98
- # 取得設定
99
- curl http://127.0.0.1:3080/api/instagram/scroll/config
100
-
101
- # 更新設定
102
- curl -X POST http://127.0.0.1:3080/api/instagram/scroll/config \
103
- -H "Content-Type: application/json" \
104
- -d '{"masterUsername":"your_username","minScore":80}'
105
- ```
106
-
107
- ---
108
-
109
- ## ⚙️ 設定參數說明 (Settings)
110
-
111
- 可於 DSH 設定面板或插件目錄下的 `data/config.json` 中配置:
112
-
113
- | 欄位名稱 | 型別 | 預設值 | 說明 |
114
- | :--- | :--- | :--- | :--- |
115
- | **`masterUsername`** | string | `""` | 主人的 Instagram 使用者名稱(達標時在留言區 @主人 推薦) |
116
- | **`interestTags`** | array | `["ai", "deepseek", "coding", "tech"]` | 主人感興趣的主題標籤或領域關鍵字清單 |
117
- | **`personaPrompt`** | string | *預設人設提示詞* | 評估貼文趣味度與撰寫 @主人 推薦語的人設 Prompt |
118
- | **`minScore`** | number | `75` | 推坑門檻分數(0-100,達標才在貼文下留言推薦) |
119
- | **`dailyRecommendCap`** | number | `5` | 每日向主人推坑留言的上限則數(防止過度打擾與風控) |
120
- | **`scrollIntervalMinutes`**| number | `60` | 自動巡查刷動態牆的時間週期(分鐘) |
121
- | **`autoScrollEnabled`** | boolean| `true` | 是否啟用背景定時自動刷動態牆任務 |
122
- | **`likeOnRecommend`** | boolean| `true` | 決定推薦給主人時是否順便對該貼文點讚 |
123
- | **`batchSize`** | number | `15` | 每輪滾動瀏覽抓取的貼文筆數 (10-30) |
124
-
125
- ---
126
-
127
- ## 📁 目錄結構
128
-
129
- ```text
130
- dsh-instagram-scroll/
131
- ├── cordis.patch.yml # DSH bundle patch 宣告
132
- ├── package.json # 模組定義與依賴
133
- ├── tsconfig.json # TypeScript 編譯設定
134
- ├── assets/
135
- │ └── banner.png # 宣傳橫幅
136
- ├── client.js # DSH Web 前端面板 (動態瀏覽、手動觸發、日報查看)
137
- ├── data/
138
- │ ├── config.json # 本地設定檔
139
- │ ├── scroll_ledger.json # 瀏覽去重與統計帳本
140
- │ └── reports/ # 每日日報儲存目錄 (YYYY-MM-DD.md)
141
- └── src/
142
- ├── index.ts # Cordis 外掛入口、排程定時器與 Web API
143
- ├── config.ts # Schemastery 設定模型
144
- ├── types.d.ts # 型別宣告
145
- ├── core/
146
- │ └── scrollDuty.ts # 滾動瀏覽、大模型評估、點讚與推坑核心邏輯
147
- ├── lib/
148
- │ ├── hostdeps.ts # DSH 宿主相容層
149
- │ └── ledger.ts # 日報生成與歷史去重帳本管理器
150
- └── tools/
151
- └── scrollTools.ts # 向 DSH Tools 註冊之專用滾動瀏覽工具
152
- ```
153
-
154
- ---
155
-
156
- ## 📄 授權條款
157
-
158
- 本專案採用 [MIT License](LICENSE) 開源授權。
1
+ # DSH Instagram Scroll Feed & Exploration Plugin (`@luoyi-dsh/instagram-scroll`)
2
+
3
+ <div align="center">
4
+
5
+ ![DSH Instagram Scroll Banner](assets/banner.png)
6
+
7
+ **[English](README.md) | [繁體中文](README.zh-Hant.md)**
8
+
9
+ </div>
10
+
11
+ > Dedicated Instagram feed exploration, AI recommendation, and daily digest plugin for **DeepSeek Harness (DSH)**.
12
+ > Core capabilities: **Automatically or manually browse Instagram timeline feeds and topic hashtags on behalf of the user, evaluate post relevance against the owner's interests using LLMs, like and leave authentic recommendation comments, and aggregate highlights into daily Markdown reports**.
13
+
14
+ ---
15
+
16
+ ## 🌟 Key Features
17
+
18
+ 1. **Automated Feed Browsing (Scroll Duty)**:
19
+ - Periodically polls timeline feeds and configured topic hashtags.
20
+ - Extracts post caption, author, tags, and media metadata.
21
+ 2. **LLM Evaluation & Smart Recommendation**:
22
+ - Analyzes post relevance and scores content (0-100) based on master's interest prompt.
23
+ - Automatically likes posts and writes authentic recommendation comments mentioning master (`@masterUsername`) when score meets criteria (default > 75).
24
+ 3. **Daily Markdown Digest (`data/reports/YYYY-MM-DD.md`)**:
25
+ - Automatically organizes reviewed posts, summaries, and recommendation trails into clean Markdown daily digests.
26
+ - Viewable directly in the web console.
27
+ 4. **State Ledger & Deduplication**:
28
+ - `data/scroll_ledger.json` keeps track of inspected media PKs and daily quotas to prevent repetitive actions and avoid rate limits.
29
+ 5. **DSH Web Control Panel (`client.js`)**:
30
+ - Provides an intuitive feed waterfall preview, manual duty execution button, daily report reader, and settings inspector.
31
+
32
+ ---
33
+
34
+ ## 📦 Installation
35
+
36
+ Install via DSH Plugin CLI:
37
+
38
+ ```bash
39
+ dsh plugin --profile web add @luoyi-dsh/instagram-scroll
40
+ ```
41
+
42
+ Or via standard npm:
43
+
44
+ ```bash
45
+ npm install @luoyi-dsh/instagram-scroll
46
+ ```
47
+
48
+ ---
49
+
50
+ ## 🛠️ Provided DSH Tools
51
+
52
+ | Tool Name | Description | Parameters |
53
+ | :--- | :--- | :--- |
54
+ | **`ig_run_scroll_duty_now`** | Trigger an immediate exploration duty cycle (evaluate posts, like & recommend) | None |
55
+ | **`ig_scroll_feed`** | Read timeline feed posts (author, like count, caption excerpt) | `limit` (number, default 15, max 50) |
56
+ | **`ig_explore_topics`** | Explore popular posts under a specific topic or hashtag | `tag` (string, required), `limit` (number, default 15) |
57
+ | **`ig_like_feed_post`** | Like an Instagram post during browsing | `media_pk` (string, required) |
58
+
59
+ ---
60
+
61
+ ## 💻 Usage Examples
62
+
63
+ ### 1. Natural Language Invocation in DSH Chat
64
+
65
+ ```text
66
+ 💬 Example 1: Run full exploration and recommendation duty
67
+ "Please check my Instagram feed right now and recommend any interesting technical posts."
68
+ -> AI calls: ig_run_scroll_duty_now()
69
+
70
+ 💬 Example 2: Read timeline posts
71
+ "Browse the latest 10 posts on my Instagram feed."
72
+ -> AI calls: ig_scroll_feed(limit=10)
73
+
74
+ 💬 Example 3: Explore a hashtag
75
+ "Explore top posts under #deepseek on Instagram."
76
+ -> AI calls: ig_explore_topics(tag="deepseek", limit=15)
77
+ ```
78
+
79
+ ---
80
+
81
+ ### 2. Via HTTP REST API (DSH Web Routes)
82
+
83
+ > 💡 **Tip**: Default DSH Web port is **3080**.
84
+
85
+ #### 1. Manually Trigger Duty Cycle (`POST /api/instagram/scroll/run`)
86
+ ```bash
87
+ curl -X POST http://127.0.0.1:3080/api/instagram/scroll/run
88
+ ```
89
+
90
+ #### 2. Get Current Status & Daily Stats (`GET /api/instagram/scroll/status`)
91
+ ```bash
92
+ curl http://127.0.0.1:3080/api/instagram/scroll/status
93
+ ```
94
+
95
+ #### 3. Read Today's Markdown Digest (`GET /api/instagram/scroll/report`)
96
+ ```bash
97
+ curl http://127.0.0.1:3080/api/instagram/scroll/report
98
+ ```
99
+
100
+ #### 4. Read & Update Configuration (`GET / POST /api/instagram/scroll/config`)
101
+ ```bash
102
+ # Read config
103
+ curl http://127.0.0.1:3080/api/instagram/scroll/config
104
+
105
+ # Update config
106
+ curl -X POST http://127.0.0.1:3080/api/instagram/scroll/config \
107
+ -H "Content-Type: application/json" \
108
+ -d '{"masterUsername":"your_username","minScore":80}'
109
+ ```
110
+
111
+ ---
112
+
113
+ ## ⚙️ Configuration Parameters (Settings)
114
+
115
+ > 💡 **Tip**: No need to configure Instagram credentials here; it automatically inherits session state from `@luoyi-dsh/instagram-mcp`.
116
+
117
+ | Field | Type | Default | Description |
118
+ | :--- | :--- | :--- | :--- |
119
+ | **`masterUsername`** | string | `""` | Master's Instagram username (mentioned in comments when recommended) |
120
+ | **`interestTags`** | array | `["ai", "deepseek", "coding", "tech"]` | Topic hashtags and keywords matching the owner's interest |
121
+ | **`personaPrompt`** | string | *Default persona prompt* | Persona prompt guiding post analysis and recommendation copywriting |
122
+ | **`minScore`** | number | `75` | Recommendation score threshold (0-100) |
123
+ | **`dailyRecommendCap`** | number | `5` | Maximum recommendation comments allowed per day |
124
+ | **`scrollIntervalMinutes`**| number | `60` | Background exploration duty interval in minutes |
125
+ | **`autoScrollEnabled`** | boolean| `true` | Whether background automated exploration duty is enabled |
126
+ | **`likeOnRecommend`** | boolean| `true` | Automatically like post upon recommending to master |
127
+ | **`batchSize`** | number | `15` | Number of posts inspected per scroll duty round (10-30) |
128
+
129
+ ---
130
+
131
+ ## 📁 Directory Structure
132
+
133
+ ```text
134
+ dsh-instagram-scroll/
135
+ ├── cordis.patch.yml # DSH bundle patch manifest
136
+ ├── package.json # Module definitions and dependencies
137
+ ├── tsconfig.json # TypeScript compiler configuration
138
+ ├── CHANGELOG.md # Version release notes
139
+ ├── README.md # English documentation (This file)
140
+ ├── README.zh-Hant.md # Traditional Chinese documentation
141
+ ├── assets/
142
+ │ ├── banner.png # Promotional banner
143
+ │ └── zh-Hant.md # Localized documentation
144
+ ├── client.js # DSH Web UI panel
145
+ ├── data/ # [Runtime generated, ignored in Git]
146
+ │ ├── config.json # Local configuration
147
+ │ ├── scroll_ledger.json # Deduplication and quota ledger
148
+ │ └── reports/ # Daily reports folder (YYYY-MM-DD.md)
149
+ └── src/
150
+ ├── index.ts # Cordis plugin entrypoint and Web API
151
+ ├── config.ts # Schemastery config schema
152
+ ├── types.d.ts # Type definitions
153
+ ├── core/
154
+ │ └── scrollDuty.ts # Scroll duty execution, LLM evaluation, likes & comments
155
+ ├── lib/
156
+ │ ├── hostdeps.ts # DSH runtime compatibility layer
157
+ │ └── ledger.ts # Daily digest and history ledger manager
158
+ └── tools/
159
+ └── scrollTools.ts # Dedicated DSH tools registration
160
+ ```
161
+
162
+ ---
163
+
164
+ ## 📜 Releases & Changelog
165
+
166
+ For detailed release history and changes, please refer to [CHANGELOG.md](CHANGELOG.md).
167
+
168
+ ---
169
+
170
+ ## 📄 License
171
+
172
+ This project is licensed under the [MIT License](LICENSE).
@@ -0,0 +1,174 @@
1
+ # DSH Instagram 滾動瀏覽與探索插件 (`@luoyi-dsh/instagram-scroll`)
2
+
3
+ <div align="center">
4
+
5
+ ![DSH Instagram Scroll Banner](assets/banner.png)
6
+
7
+ **[English](README.md) | [繁體中文](README.zh-Hant.md)**
8
+
9
+ </div>
10
+
11
+ > **DeepSeek Harness (DSH)** 專屬的 Instagram 動態探索、智慧推坑與日報生成外掛。
12
+ > 具備核心能力:**定時或手動替主人刷一輪 Instagram 首頁動態與主題標籤、逐條閱讀內文評估主人興趣、自動點讚與留言推坑,並自動彙整生成每日 Markdown 探索日報**。
13
+
14
+ ---
15
+
16
+ ## 🌟 核心特性
17
+
18
+ 1. **自動動態探索巡查 (Scroll Duty)**:
19
+ - 定期輪詢首頁動態牆 (Timeline Feed) 與指定主題標籤 (Hashtags)。
20
+ - 逐則貼文抓取標題、作者、標籤與完整內文。
21
+ 2. **LLM 價值評估與推坑 (AI Recommendation)**:
22
+ - 由大語言模型依據主人的興趣 Prompt 深度分析貼文內容與價值評分。
23
+ - 若達標(預設 > 75 分),自動在貼文下點讚並留言 `@目標用戶` 附上真誠自然的推薦語。
24
+ 3. **每日探索日報 (Daily Markdown Report)**:
25
+ - 自動將今日瀏覽之所有精選貼文、摘要與推薦紀錄整理為 Markdown 日報。
26
+ - 儲存於 `data/reports/YYYY-MM-DD.md`,可隨時在 Web 面板查看與回溯。
27
+ 4. **狀態帳本與嚴格去重控制**:
28
+ - `data/scroll_ledger.json` 記錄已看貼文 PK 與今日推坑次數,避免重複推坑或重複閱讀,並防止觸發風控。
29
+ 5. **DSH Web 瀏覽器端介面 (`client.js`)**:
30
+ - 提供直觀動態牆瀑布流預覽、即時手動觸發刷動態按鈕、日報閱讀器與自訂設定面板。
31
+
32
+ ---
33
+
34
+ ## 📦 安裝方式
35
+
36
+ 使用 DSH CLI 安裝插件:
37
+
38
+ ```bash
39
+ dsh plugin --profile web add @luoyi-dsh/instagram-scroll
40
+ ```
41
+
42
+ 或透過 npm 安裝:
43
+
44
+ ```bash
45
+ npm install @luoyi-dsh/instagram-scroll
46
+ ```
47
+
48
+ ---
49
+
50
+ ## 🛠️ 提供之 DSH Tools
51
+
52
+ | 工具名稱 | 說明 | 參數 |
53
+ | :--- | :--- | :--- |
54
+ | **`ig_run_scroll_duty_now`** | 立即手動替主人刷一輪 Instagram 動態與探索,讀取貼文進行評估、點讚與留言推坑 | 無 |
55
+ | **`ig_scroll_feed`** | 滾動讀取 Instagram 時間軸最新動態貼文(含作者、讚數、內文摘要) | `limit` (number,預設 15,最大 50) |
56
+ | **`ig_explore_topics`** | 依照指定主題或探索標籤滾動閱讀熱門貼文 | `tag` (string,必填), `limit` (number,預設 15) |
57
+ | **`ig_like_feed_post`** | 在滾動瀏覽過程中對感興趣的 Instagram 貼文按讚 | `media_pk` (string,必填) |
58
+
59
+ ---
60
+
61
+ ## 💻 使用範例
62
+
63
+ ### 1. DSH AI 自然語言直接調用
64
+
65
+ 在 DSH 對話中,主模型可直接以自然語言執行滾動探索或瀏覽:
66
+
67
+ ```text
68
+ 💬 範例 1:執行一輪完整的動態探索與推坑
69
+ 「請立刻替我刷一輪 Instagram 動態牆,看看有沒有適合我的技術新貼文並推薦給我」
70
+ -> AI 將調用:ig_run_scroll_duty_now()
71
+
72
+ 💬 範例 2:滾動瀏覽首頁動態貼文
73
+ 「幫我刷最新 10 則 Instagram 動態」
74
+ -> AI 將調用:ig_scroll_feed(limit=10)
75
+
76
+ 💬 範例 3:探索特定主題標籤
77
+ 「探索 Instagram 上 #deepseek 標籤的熱門貼文」
78
+ -> AI 將調用:ig_explore_topics(tag="deepseek", limit=15)
79
+ ```
80
+
81
+ ---
82
+
83
+ ### 2. 透過 HTTP REST API 調用 (DSH Web 路由)
84
+
85
+ > 💡 **提示**:DSH Web 預設埠號為 **3080**。
86
+
87
+ #### 1. 手動觸發滾動一輪 (`POST /api/instagram/scroll/run`)
88
+ ```bash
89
+ curl -X POST http://127.0.0.1:3080/api/instagram/scroll/run
90
+ ```
91
+
92
+ #### 2. 獲取當前滾動狀態與今日統計 (`GET /api/instagram/scroll/status`)
93
+ ```bash
94
+ curl http://127.0.0.1:3080/api/instagram/scroll/status
95
+ ```
96
+
97
+ #### 3. 讀取今日探索日報內容 (`GET /api/instagram/scroll/report`)
98
+ ```bash
99
+ curl http://127.0.0.1:3080/api/instagram/scroll/report
100
+ ```
101
+
102
+ #### 4. 讀取與更新設定 (`GET / POST /api/instagram/scroll/config`)
103
+ ```bash
104
+ # 取得設定
105
+ curl http://127.0.0.1:3080/api/instagram/scroll/config
106
+
107
+ # 更新設定
108
+ curl -X POST http://127.0.0.1:3080/api/instagram/scroll/config \
109
+ -H "Content-Type: application/json" \
110
+ -d '{"masterUsername":"your_username","minScore":80}'
111
+ ```
112
+
113
+ ---
114
+
115
+ ## ⚙️ 設定參數說明 (Settings)
116
+
117
+ > 💡 **提示**:本外掛**不用輸入帳號密碼**,會直接沿用依賴的 `@luoyi-dsh/instagram-mcp` 獲取之 Session 與登入狀態。
118
+
119
+ | 欄位名稱 | 型別 | 預設值 | 說明 |
120
+ | :--- | :--- | :--- | :--- |
121
+ | **`masterUsername`** | string | `""` | 主人的 Instagram 使用者名稱(達標時在留言區 @主人 推薦) |
122
+ | **`interestTags`** | array | `["ai", "deepseek", "coding", "tech"]` | 主人感興趣的主題標籤或領域關鍵字清單 |
123
+ | **`personaPrompt`** | string | *預設人設提示詞* | 評估貼文趣味度與撰寫 @主人 推薦語的人設 Prompt |
124
+ | **`minScore`** | number | `75` | 推坑門檻分數(0-100,達標才在貼文下留言推薦) |
125
+ | **`dailyRecommendCap`** | number | `5` | 每日向主人推坑留言的上限則數(防止過度打擾與風控) |
126
+ | **`scrollIntervalMinutes`**| number | `60` | 自動巡查刷動態牆的時間週期(分鐘) |
127
+ | **`autoScrollEnabled`** | boolean| `true` | 是否啟用背景定時自動刷動態牆任務 |
128
+ | **`likeOnRecommend`** | boolean| `true` | 決定推薦給主人時是否順便對該貼文點讚 |
129
+ | **`batchSize`** | number | `15` | 每輪滾動瀏覽抓取的貼文筆數 (10-30) |
130
+
131
+ ---
132
+
133
+ ## 📁 目錄結構
134
+
135
+ ```text
136
+ dsh-instagram-scroll/
137
+ ├── cordis.patch.yml # DSH bundle patch 宣告
138
+ ├── package.json # 模組定義與依賴
139
+ ├── tsconfig.json # TypeScript 編譯設定
140
+ ├── CHANGELOG.md # 版本更新紀錄
141
+ ├── README.md # 英文說明文件
142
+ ├── README.zh-Hant.md # 繁體中文說明文件
143
+ ├── assets/
144
+ │ ├── banner.png # 宣傳橫幅
145
+ │ └── zh-Hant.md # 本地化說明文件
146
+ ├── client.js # DSH Web 前端面板 (動態瀏覽、手動觸發、日報查看)
147
+ ├── data/
148
+ │ ├── config.json # 本地設定檔
149
+ │ ├── scroll_ledger.json # 瀏覽去重與統計帳本
150
+ │ └── reports/ # 每日日報儲存目錄 (YYYY-MM-DD.md)
151
+ └── src/
152
+ ├── index.ts # Cordis 外掛入口、排程定時器與 Web API
153
+ ├── config.ts # Schemastery 設定模型
154
+ ├── types.d.ts # 型別宣告
155
+ ├── core/
156
+ │ └── scrollDuty.ts # 滾動瀏覽、大模型評估、點讚與推坑核心邏輯
157
+ ├── lib/
158
+ │ ├── hostdeps.ts # DSH 宿主相容層
159
+ │ └── ledger.ts # 日報生成與歷史去重帳本管理器
160
+ └── tools/
161
+ └── scrollTools.ts # 向 DSH Tools 註冊之專用滾動瀏覽工具
162
+ ```
163
+
164
+ ---
165
+
166
+ ## 📜 版本發布紀錄 (Releases)
167
+
168
+ 詳細版本演進與更新紀錄,請參閱 [CHANGELOG.md](CHANGELOG.md)。
169
+
170
+ ---
171
+
172
+ ## 📄 授權條款
173
+
174
+ 本專案採用 [MIT License](LICENSE) 開源授權。
package/client.js CHANGED
@@ -13,7 +13,7 @@
13
13
  */
14
14
 
15
15
  window.__ModuleLoader__.load({
16
- id: 'dsh-instagram-scroll',
16
+ id: '@luoyi-dsh/instagram-scroll',
17
17
  factory: (require) => {
18
18
  const React = require('react')
19
19
  const h = React.createElement
@@ -556,6 +556,7 @@ window.__ModuleLoader__.load({
556
556
  const [tab, setTab] = useState('feed')
557
557
  const [cfg, setCfg] = useState(normalizeScrollConfig({}))
558
558
  const [status, setStatus] = useState(null)
559
+ const [mcpStatus, setMcpStatus] = useState(null)
559
560
  const [report, setReport] = useState('')
560
561
  const [loading, setLoading] = useState(true)
561
562
  const [saving, setSaving] = useState(false)
@@ -564,14 +565,18 @@ window.__ModuleLoader__.load({
564
565
 
565
566
  const refresh = async () => {
566
567
  try {
567
- const [cfgRes, statusRes, reportRes] = await Promise.all([
568
- jget('/config'),
569
- jget('/status'),
570
- jget('/report'),
568
+ const [cfgRes, statusRes, reportRes, mcpRes] = await Promise.all([
569
+ jget('/config').catch(() => null),
570
+ jget('/status').catch(() => null),
571
+ jget('/report').catch(() => null),
572
+ fetch('/api/instagram/mcp/status', { credentials: 'same-origin' })
573
+ .then((r) => r.json())
574
+ .catch(() => null),
571
575
  ])
572
576
  if (cfgRes?.ok) setCfg(normalizeScrollConfig(cfgRes.config))
573
577
  if (statusRes?.ok) setStatus(statusRes)
574
578
  if (reportRes?.ok) setReport(reportRes.report || '')
579
+ if (mcpRes?.ok) setMcpStatus(mcpRes)
575
580
  } catch (e) {
576
581
  setMsg(`讀取狀態失敗: ${e.message}`)
577
582
  } finally {
@@ -625,6 +630,22 @@ window.__ModuleLoader__.load({
625
630
  const daily = status?.dailyStats || {}
626
631
  const recommendedItems = daily.recommendedItems || []
627
632
 
633
+ const isMcpConnected = Boolean(
634
+ status?.mcpReady ||
635
+ status?.loginStatus?.ok ||
636
+ mcpStatus?.mcpReady ||
637
+ mcpStatus?.loginStatus?.ok
638
+ )
639
+
640
+ const rawAccount =
641
+ status?.mcpAccount ||
642
+ status?.loginStatus?.username ||
643
+ mcpStatus?.loginStatus?.username ||
644
+ (mcpStatus?.loginStatus?.message?.match(/@([^\s)]+)/)?.[1]) ||
645
+ (isMcpConnected ? '已連線' : '')
646
+
647
+ const displayAccount = rawAccount ? rawAccount.replace(/^@/, '') : ''
648
+
628
649
  return h(
629
650
  'div',
630
651
  { className: 'ig-scr-root' },
@@ -643,8 +664,22 @@ window.__ModuleLoader__.load({
643
664
  h('div', { className: 'ig-scr-brand-title' }, 'Instagram 滾動探索與主人推坑'),
644
665
  h(
645
666
  'div',
646
- { className: 'ig-scr-brand-sub' },
647
- cfg.masterUsername ? `當前主人目標: @${cfg.masterUsername.replace(/^@/, '')}` : '尚未綁定主人帳號'
667
+ { className: 'ig-scr-brand-sub', style: { display: 'flex', alignItems: 'center', gap: '8px' } },
668
+ cfg.masterUsername ? `目標主人: @${cfg.masterUsername.replace(/^@/, '')}` : '尚未綁定主人帳號',
669
+ h('span', { style: { color: 'rgba(255, 255, 255, 0.2)' } }, '|'),
670
+ isMcpConnected
671
+ ? h(
672
+ 'span',
673
+ { style: { color: '#34d399', fontSize: '11px', display: 'inline-flex', alignItems: 'center', gap: '4px' } },
674
+ h('span', { style: { width: '6px', height: '6px', borderRadius: '50%', background: '#10b981' } }),
675
+ `MCP 會話: @${displayAccount || '已連線'}`
676
+ )
677
+ : h(
678
+ 'span',
679
+ { style: { color: '#fbbf24', fontSize: '11px', display: 'inline-flex', alignItems: 'center', gap: '4px' } },
680
+ h('span', { style: { width: '6px', height: '6px', borderRadius: '50%', background: '#f59e0b' } }),
681
+ '等待 MCP 登入'
682
+ )
648
683
  )
649
684
  )
650
685
  ),
@@ -652,7 +687,8 @@ window.__ModuleLoader__.load({
652
687
  'button',
653
688
  {
654
689
  className: 'ig-scr-btn primary',
655
- disabled: runningRound,
690
+ disabled: runningRound || !isMcpConnected,
691
+ title: !isMcpConnected ? '等待 FastMCP 連線就緒後即可刷動態' : '立即替主人刷一輪動態',
656
692
  onClick: runNow,
657
693
  },
658
694
  h(Icon.Play, { size: 12 }),
@@ -820,6 +856,32 @@ window.__ModuleLoader__.load({
820
856
  h('div', { className: 'ig-scr-section-desc' }, '設定主人的 Instagram 帳號名與感興趣的標籤領域,AI 將依此進行嚴格內容篩選。')
821
857
  ),
822
858
 
859
+ // MCP Session 來源提示
860
+ h(
861
+ 'div',
862
+ {
863
+ style: {
864
+ background: 'rgba(59, 130, 246, 0.06)',
865
+ border: '1px solid rgba(59, 130, 246, 0.2)',
866
+ borderRadius: '8px',
867
+ padding: '10px 14px',
868
+ fontSize: '12px',
869
+ color: '#93c5fd',
870
+ display: 'flex',
871
+ alignItems: 'center',
872
+ gap: '8px',
873
+ },
874
+ },
875
+ h(Icon.Sparkles, { size: 14 }),
876
+ h(
877
+ 'span',
878
+ null,
879
+ isMcpConnected
880
+ ? `已沿用 @luoyi-dsh/instagram-mcp 的登入會話 (@${displayAccount || '已授權'}),本外掛無需填寫帳密。`
881
+ : '本外掛無需輸入帳密,直接沿用依賴的 dsh-instagram-mcp 獲取之 Session。目前 MCP 尚未登入,請先至 MCP 面板完成登入。'
882
+ )
883
+ ),
884
+
823
885
  h(
824
886
  'div',
825
887
  { className: 'ig-scr-field' },
@@ -1013,47 +1075,71 @@ window.__ModuleLoader__.load({
1013
1075
  const slots = (typeof ctx.get === 'function' ? ctx.get('slots') : undefined) || ctx.slots
1014
1076
  if (!slots) return
1015
1077
 
1016
- try {
1017
- slots.inject('settings.section', () =>
1078
+ // 1. 左側一級專屬導航槽位 (settings.section)
1079
+ const registerSection = () => {
1080
+ try {
1018
1081
  slots.register(
1019
1082
  {
1020
1083
  name: 'settings.section',
1021
1084
  id: 'instagram-scroll',
1022
- order: 33,
1023
- label: 'Instagram 滾動推坑',
1085
+ order: 36,
1086
+ label: 'Instagram 滾動',
1024
1087
  },
1025
1088
  () => h(ScrollPanel)
1026
1089
  )
1027
- )
1028
- } catch (e) {}
1090
+ } catch (e) {
1091
+ console.error('[@luoyi-dsh/instagram-scroll] 註冊 settings.section 異常:', e)
1092
+ }
1093
+ }
1094
+ if (typeof slots.inject === 'function') {
1095
+ slots.inject('settings.section', registerSection)
1096
+ } else if (typeof slots.register === 'function') {
1097
+ registerSection()
1098
+ }
1029
1099
 
1030
- try {
1031
- slots.inject('settings.plugins.tab', () =>
1100
+ // 2. 外掛程式頁面頂部頁籤 (settings.plugins.tab)
1101
+ const registerTab = () => {
1102
+ try {
1032
1103
  slots.register(
1033
1104
  {
1034
1105
  name: 'settings.plugins.tab',
1035
1106
  id: 'instagram-scroll',
1036
- order: 33,
1037
- label: 'Instagram 滾動推坑',
1107
+ order: 36,
1108
+ label: 'Instagram 滾動',
1038
1109
  },
1039
1110
  () => h(ScrollPanel)
1040
1111
  )
1041
- )
1042
- } catch (e) {}
1112
+ } catch (e) {
1113
+ console.error('[@luoyi-dsh/instagram-scroll] 註冊 settings.plugins.tab 異常:', e)
1114
+ }
1115
+ }
1116
+ if (typeof slots.inject === 'function') {
1117
+ slots.inject('settings.plugins.tab', registerTab)
1118
+ } else if (typeof slots.register === 'function') {
1119
+ registerTab()
1120
+ }
1043
1121
 
1044
- try {
1045
- slots.inject('plugins.item', () =>
1122
+ // 3. 外掛程式卡片列表槽位 (plugins.item)
1123
+ const registerItem = () => {
1124
+ try {
1046
1125
  slots.register(
1047
1126
  {
1048
1127
  name: 'plugins.item',
1049
1128
  id: 'instagram-scroll',
1050
- order: 33,
1129
+ order: 36,
1051
1130
  label: 'Instagram 滾動探索與推坑',
1052
1131
  },
1053
1132
  () => h(ScrollPanel)
1054
1133
  )
1055
- )
1056
- } catch (e) {}
1134
+ } catch (e) {
1135
+ console.error('[@luoyi-dsh/instagram-scroll] 註冊 plugins.item 異常:', e)
1136
+ }
1137
+ }
1138
+ if (typeof slots.inject === 'function') {
1139
+ slots.inject('plugins.item', registerItem)
1140
+ } else if (typeof slots.register === 'function') {
1141
+ registerItem()
1142
+ }
1057
1143
  },
1058
1144
  }
1059
1145
  },
package/cordis.patch.yml CHANGED
@@ -4,6 +4,6 @@
4
4
 
5
5
  - insert:
6
6
  - id: instagram-scroll
7
- name: dsh-instagram-scroll
7
+ name: '@luoyi-dsh/instagram-scroll'
8
8
  config:
9
9
  enabled: true
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,EAAgD,qBAAqB,EAAwB,MAAM,aAAa,CAAA;AAMvH,eAAO,MAAM,IAAI,qBAAqB,CAAA;AACtC,eAAO,MAAM,MAAM,UAAyB,CAAA;AAG5C,eAAO,MAAM,MAAM,KAAqC,CAAA;AAoBxD,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,GAAE,OAAO,CAAC,qBAAqB,CAAM,QAgM9E;;;;;;;AAED,wBAKC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAMH,OAAO,EAAgD,qBAAqB,EAAwB,MAAM,aAAa,CAAA;AAMvH,eAAO,MAAM,IAAI,qBAAqB,CAAA;AACtC,eAAO,MAAM,MAAM,UAAyB,CAAA;AAG5C,eAAO,MAAM,MAAM,KAAqC,CAAA;AAoBxD,wBAAgB,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,GAAE,OAAO,CAAC,qBAAqB,CAAM,QAoN9E;;;;;;;AAED,wBAKC"}
package/dist/index.js CHANGED
@@ -19,7 +19,7 @@ import { buildScrollConfigSchema, defaultScrollConfig, sanitizeScrollConfig } fr
19
19
  import { loadSchemastery } from './lib/hostdeps.js';
20
20
  import { ScrollLedgerManager } from './lib/ledger.js';
21
21
  import { executeScrollRound } from './core/scrollDuty.js';
22
- import { getSharedMcpClient } from '@luoyi-dsh/instagram-mcp';
22
+ import { getSharedMcpClient, getSharedMcpService } from '@luoyi-dsh/instagram-mcp';
23
23
  export const name = 'instagram-scroll';
24
24
  export const inject = ['webServer', 'tools'];
25
25
  const zInstance = await loadSchemastery();
@@ -162,10 +162,19 @@ export function apply(ctx, userConfig = {}) {
162
162
  }
163
163
  // 讀取今日狀態與推坑數據
164
164
  if (req.method === 'GET' && pathname === '/api/instagram/scroll/status') {
165
- const client = getMcpClient();
165
+ const svc = getSharedMcpService() || globalThis.__DSH_INSTAGRAM_MCP__;
166
+ const client = getMcpClient() || svc?.client;
167
+ const mcpLogin = svc?.loginStatus || null;
168
+ const isReady = Boolean(client && client.ready);
169
+ const account = mcpLogin?.username ||
170
+ (mcpLogin?.message?.match(/@([^\s)]+)/)?.[1]) ||
171
+ (isReady ? '已連線' : '');
166
172
  return sendJson(res, 200, {
167
173
  ok: true,
168
- mcpReady: Boolean(client && client.ready),
174
+ mcpReady: isReady,
175
+ inheritedSession: true,
176
+ loginStatus: mcpLogin || (isReady ? { ok: true, message: 'FastMCP 運行中', username: account } : null),
177
+ mcpAccount: account,
169
178
  dailyStats: ledger.getDailyStats(),
170
179
  });
171
180
  }
@@ -191,23 +200,28 @@ export function apply(ctx, userConfig = {}) {
191
200
  sendJson(res, 500, { ok: false, error: err.message });
192
201
  }
193
202
  };
203
+ globalThis.__DSH_IG_SCROLL_HANDLER__ = handleRequest;
194
204
  const webServer = (typeof ctx.get === 'function' ? ctx.get('webServer') : undefined) || ctx.webServer;
195
- if (globalThis.__DSH_IG_SCROLL_ROUTES_REGISTERED__) {
196
- // 已經註冊過,防止重複載入導致 duplicate prefix route
197
- }
198
- else if (webServer) {
205
+ if (!globalThis.__DSH_IG_SCROLL_ROUTES_REGISTERED__ && webServer) {
206
+ const routeDispatcher = (req, res) => {
207
+ const activeHandler = globalThis.__DSH_IG_SCROLL_HANDLER__;
208
+ if (typeof activeHandler === 'function') {
209
+ return activeHandler(req, res);
210
+ }
211
+ return handleRequest(req, res);
212
+ };
199
213
  try {
200
214
  if (typeof webServer.register === 'function') {
201
215
  webServer.register({
202
216
  kind: 'prefix',
203
217
  path: '/api/instagram/scroll',
204
- handler: handleRequest,
218
+ handler: routeDispatcher,
205
219
  });
206
220
  globalThis.__DSH_IG_SCROLL_ROUTES_REGISTERED__ = true;
207
221
  log('✅ 已註冊 DSH 官方路由: /api/instagram/scroll');
208
222
  }
209
223
  else if (webServer.router) {
210
- webServer.router.all('/api/instagram/scroll/*', handleRequest);
224
+ webServer.router.all('/api/instagram/scroll/*', routeDispatcher);
211
225
  globalThis.__DSH_IG_SCROLL_ROUTES_REGISTERED__ = true;
212
226
  }
213
227
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAyB,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACvH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAA2B,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE3G,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAA;AACtC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AAE5C,MAAM,SAAS,GAAG,MAAM,eAAe,EAAE,CAAA;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAA;AAExD,SAAS,QAAQ,CAAC,GAAQ,EAAE,MAAc,EAAE,IAAS;IACnD,GAAG,CAAC,UAAU,GAAG,MAAM,CAAA;IACvB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAA;IAChE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED,SAAS,QAAQ,CAAC,GAAQ;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAA,CAAC,CAAC,CAAC,CAAA;QACjD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YAAC,CAAC;YAC7C,MAAM,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAAC,CAAC;QACvB,CAAC,CAAC,CAAA;QACF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAQ,EAAE,aAA6C,EAAE;IAC7E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IAC3C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACjE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEvE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAC/C,MAAM,gBAAgB,GAAG,CAAC,GAAG,EAAE;QAC7B,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;YACtD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,YAAY,GAA0B,oBAAoB,CAAC;QAC/D,GAAG,mBAAmB;QACtB,GAAG,UAAU;QACb,GAAG,gBAAgB;KACpB,CAAC,CAAA;IAEF,+BAA+B;IAC/B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAC3E,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,KAAqC,EAAE,EAAE;QAC3D,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;QAClC,IAAI,CAAC;YACH,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;QAC3E,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,GAAG,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACxC,CAAC;IACH,CAAC,CAAA;IAED,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,CAAA;IACnC,CAAC,CAAA;IAED,GAAG,CAAC,iCAAiC,UAAU,GAAG,CAAC,CAAA;IAEnD,aAAa;IACb,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,EAAE,UAAU,CAAC,CAAA;IAEvF,IAAI,WAAW,GAA0B,IAAI,CAAA;IAC7C,IAAI,UAAU,GAAG,KAAK,CAAA;IAEtB,MAAM,YAAY,GAAG,GAA8B,EAAE;QACnD,OAAO,kBAAkB,EAAE,CAAA;IAC7B,CAAC,CAAA;IAED,oBAAoB;IACpB,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,KAAK,CAAA;IACzF,MAAM,YAAY,GAAG,CAAC,OAAY,EAAE,EAAE;QACpC,IAAI,CAAC;YACH,IAAI,OAAO,KAAK,EAAE,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC1C,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACzB,CAAC;iBAAM,IAAI,OAAO,GAAG,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC3C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC,CAAA;IAED,YAAY,CAAC;QACX,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,yEAAyE;QAC3E,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;QAC9C,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;YAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAA;YAClE,CAAC;YACD,OAAO,MAAM,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;QACzE,CAAC;KACF,CAAC,CAAA;IAEF,QAAQ;IACR,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,IAAI,UAAU;YAAE,OAAM;QACtB,IAAI,WAAW,EAAE,CAAC;YAChB,aAAa,CAAC,WAAW,CAAC,CAAA;YAC1B,WAAW,GAAG,IAAI,CAAA;QACpB,CAAC;QAED,IAAI,YAAY,CAAC,iBAAiB,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,qBAAqB,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;YACrF,GAAG,CAAC,6BAA6B,YAAY,CAAC,qBAAqB,KAAK,CAAC,CAAA;YACzE,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;gBACnC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;gBAC7B,IAAI,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK;oBAAE,OAAM;gBAClD,IAAI,CAAC;oBACH,MAAM,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;gBAClE,CAAC;gBAAC,OAAO,CAAM,EAAE,CAAC;oBAChB,GAAG,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;gBACjC,CAAC;YACH,CAAC,EAAE,UAAU,CAAC,CAAA;QAChB,CAAC;IACH,CAAC,CAAA;IAED,cAAc,EAAE,CAAA;IAEhB,iBAAiB;IACjB,MAAM,aAAa,GAAG,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;YAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAA;YAE7B,OAAO;YACP,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,QAAQ,KAAK,8BAA8B,EAAE,CAAC;gBACxE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YACrF,CAAC;YAED,OAAO;YACP,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,KAAK,8BAA8B,EAAE,CAAC;gBACzE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAClC,UAAU,CAAC,MAAM,CAAC,CAAA;gBAClB,cAAc,EAAE,CAAA;gBAChB,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YACrF,CAAC;YAED,cAAc;YACd,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,QAAQ,KAAK,8BAA8B,EAAE,CAAC;gBACxE,MAAM,GAAG,GAAG,mBAAmB,EAAE,IAAK,UAAkB,CAAC,qBAAqB,CAAA;gBAC9E,MAAM,MAAM,GAAG,YAAY,EAAE,IAAI,GAAG,EAAE,MAAM,CAAA;gBAC5C,MAAM,QAAQ,GAAG,GAAG,EAAE,WAAW,IAAI,IAAI,CAAA;gBACzC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC/C,MAAM,OAAO,GACX,QAAQ,EAAE,QAAQ;oBAClB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC7C,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBAExB,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;oBACxB,EAAE,EAAE,IAAI;oBACR,QAAQ,EAAE,OAAO;oBACjB,gBAAgB,EAAE,IAAI;oBACtB,WAAW,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBACnG,UAAU,EAAE,OAAO;oBACnB,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE;iBACnC,CAAC,CAAA;YACJ,CAAC;YAED,WAAW;YACX,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,QAAQ,KAAK,8BAA8B,EAAE,CAAC;gBACxE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;oBACxB,EAAE,EAAE,IAAI;oBACR,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE;iBAChC,CAAC,CAAA;YACJ,CAAC;YAED,UAAU;YACV,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,KAAK,2BAA2B,EAAE,CAAC;gBACtE,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;gBAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC7B,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAA;gBACnF,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;gBAC/E,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;YACnC,CAAC;YAED,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,QAAQ,EAAE,EAAE,CAAC,CAAA;QACpE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QACvD,CAAC;IACH,CAAC,CAGA;IAAC,UAAkB,CAAC,yBAAyB,GAAG,aAAa,CAAA;IAE9D,MAAM,SAAS,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,SAAS,CAAA;IACrG,IAAI,CAAE,UAAkB,CAAC,mCAAmC,IAAI,SAAS,EAAE,CAAC;QAC1E,MAAM,eAAe,GAAG,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAE;YAC7C,MAAM,aAAa,GAAI,UAAkB,CAAC,yBAAyB,CAAA;YACnE,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;gBACxC,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;YAChC,CAAC;YACD,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAChC,CAAC,CAAA;QAED,IAAI,CAAC;YACH,IAAI,OAAO,SAAS,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC7C,SAAS,CAAC,QAAQ,CAAC;oBACjB,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,uBAAuB;oBAC7B,OAAO,EAAE,eAAe;iBACzB,CAAC,CACD;gBAAC,UAAkB,CAAC,mCAAmC,GAAG,IAAI,CAAA;gBAC/D,GAAG,CAAC,uCAAuC,CAAC,CAAA;YAC9C,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC5B,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAC/D;gBAAC,UAAkB,CAAC,mCAAmC,GAAG,IAAI,CAAA;YACjE,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,GAAG,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAED,OAAO;IACP,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,UAAU,GAAG,IAAI,CAAA;QACjB,IAAI,WAAW;YAAE,aAAa,CAAC,WAAW,CAAC,CAAA;QAC3C,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC7B,CAAC,CAAA;IAED,IAAI,OAAO,GAAG,EAAE,EAAE,KAAK,UAAU,EAAE,CAAC;QAClC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC5B,CAAC;AACH,CAAC;AAED,eAAe;IACb,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;CACN,CAAA"}
@@ -107,12 +107,12 @@ export class ScrollLedgerManager {
107
107
  }
108
108
  appendReport(item) {
109
109
  const reportPath = join(this.reportsDir, `${this.state.date}.md`);
110
- const line = `### [${item.author}](${item.url}) (評分: ${item.score}/100)
111
- - **推薦原因**:${item.reason}
112
- - **@主人留言**:\`${item.commentText}\`
113
- - **時間**:${item.timestamp}
114
-
115
- ---
110
+ const line = `### [${item.author}](${item.url}) (評分: ${item.score}/100)
111
+ - **推薦原因**:${item.reason}
112
+ - **@主人留言**:\`${item.commentText}\`
113
+ - **時間**:${item.timestamp}
114
+
115
+ ---
116
116
  `;
117
117
  try {
118
118
  let content = '';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luoyi-dsh/instagram-scroll",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "DeepSeek Harness (DSH) Instagram 動態滾動瀏覽與探索插件:提供動態牆無限滾動、探索摘要與即時互動能力",
5
5
  "keywords": [
6
6
  "dsh",
@@ -19,6 +19,7 @@
19
19
  },
20
20
  "client": {
21
21
  "platform": "web",
22
+ "immediately": true,
22
23
  "inject": [
23
24
  "@deepseek-ai/dsh-client-ui-settings",
24
25
  "@deepseek-ai/dsh-client-ui-settings-plugins"