@telosmaylx/dsh-session-notify 0.1.13 → 0.1.17
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.en.md +78 -41
- package/README.ja.md +78 -41
- package/README.ko.md +78 -41
- package/README.md +78 -41
- package/README.zh-TW.md +78 -41
- package/lib/client.js +2636 -2451
- package/lib/core.js +44 -5
- package/lib/index.js +104 -10
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
[](https://www.npmjs.com/package/@telosmaylx/dsh-session-notify)
|
|
14
14
|
[](https://github.com/TelosmaYLX/dsh-session-notify/pulls)
|
|
15
15
|
|
|
16
|
-
대화의 각 턴이 끝날 때 「완료 / 오류 / 차단 / 상한 도달」 상태를 소요 시간, token 소모량과 함께 세션 로그에 기록하고, 브라우저 시스템 알림과 페이지 내 toast를 푸시합니다. 5개 언어, 4가지 스타일 프리셋(카오모지 / 아이루 / 네코무스메 / DeepSeek짱), 시각적 문구 템플릿 편집기, 커스텀 프리셋 라이브러리가 내장되어 있으며, 캐시 적중률과 생성 속도는 공식 프로젝션에서 가져와 상태 표시줄과 동일한 기준을 사용합니다.
|
|
16
|
+
대화의 각 턴이 끝날 때 「완료 / 오류 / 차단 / 상한 도달」 상태를 소요 시간, token 소모량과 함께 세션 로그에 기록하고, 브라우저 시스템 알림과 페이지 내 toast를 푸시합니다. **AI가 질문할 때도 즉시 팝업으로 알려드립니다** — 세션 페이지를 지켜볼 필요가 없습니다. 5개 언어, 4가지 스타일 프리셋(카오모지 / 아이루 / 네코무스메 / DeepSeek짱), 시각적 문구 템플릿 편집기, 커스텀 프리셋 라이브러리가 내장되어 있으며, 캐시 적중률과 생성 속도는 공식 프로젝션에서 가져와 상태 표시줄과 동일한 기준을 사용합니다.
|
|
17
17
|
|
|
18
18
|
</div>
|
|
19
19
|
|
|
@@ -49,6 +49,16 @@
|
|
|
49
49
|
|
|
50
50
|
## 주요 기능
|
|
51
51
|
|
|
52
|
+
<div align="center">
|
|
53
|
+
|
|
54
|
+
<img src="screenshot/screenshot1.png" width="220" alt="제목 편집기">
|
|
55
|
+
<img src="screenshot/ScreenShot2png.png" width="220" alt="본문 편집기">
|
|
56
|
+
<img src="screenshot/ScreenShot3.png" width="220" alt="작업 완료 알림">
|
|
57
|
+
<img src="screenshot/ScreenShot4.png" width="220" alt="AI 질문 알림">
|
|
58
|
+
<img src="screenshot/ScreenShot5.png" width="220" alt="작업 오류 알림">
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
|
|
52
62
|
### 3채널 알림, 하나도 빠짐없이
|
|
53
63
|
|
|
54
64
|
| 채널 | 형태 | 설명 |
|
|
@@ -62,12 +72,17 @@
|
|
|
62
72
|
- 호스트는 모든 세션(백그라운드, 열려 있지 않은 창 포함)에 대해 「마지막 알림 본문」의 세션 프로젝션 유닛(key = `session-complete-notify`)을 유지합니다. 알림 본문은 세션 간에 일관되며, 사용자가 해당 창을 열어 두고 있지 않아도 됩니다.
|
|
63
73
|
- 클라이언트는 세션 목록 스냅샷에서 모든 세션의 `running` 비트를 관찰하며, `true → false` 엣지가 곧 알림 트리거입니다. 공식 sidebar 알림과 동일한 전략입니다(최초 관찰 시에는 기준선만 기록하며, 이미 idle 상태인 세션은 추가 발송하지 않습니다).
|
|
64
74
|
|
|
75
|
+
### 질문 즉시 알림
|
|
76
|
+
|
|
77
|
+
- AI가 `ask_user_question`을 호출해 질문하면, 호스트가 즉시 「질문 제목 + 본문」을 전용 프로젝션(key = `session-complete-notify-question`)에 기록하고, 클라이언트가 실시간 폴링 후 팝업으로 알립니다——**다른 페이지를 보고 있어도 질문을 놓치지 않습니다**.
|
|
78
|
+
- 질문 문구는 완전히 커스터마이징할 수 있습니다. 제목은 「사유별 제목 → 전역 제목 → 기본 제목」 순서로 결정되며, 본문은 `{question}` 플레이스홀더(AI의 실제 질문 주입)와 `{image}` / `{icon}` 미디어 스위치를 지원합니다.
|
|
79
|
+
|
|
65
80
|
### 문장 하나하나까지 커스터마이징
|
|
66
81
|
|
|
67
82
|
- **5개 언어**: 간체 중국어, 번체 중국어, English, 일본어, 한국어 —— 알림 문구, 소요 시간·소모량 표현, 설정 패널 UI가 모두 언어에 따라 전환됩니다(전환 즉시 재렌더링).
|
|
68
83
|
- **시각적 템플릿 편집기**(Chip 캡슐 편집기): 동적 정보를 인라인 캡슐로 렌더링합니다(플레이스홀더 코드가 노출되지 않음). 「+ 정보 삽입」은 커서 위치에 삽입되며(텍스트 중간에도 삽입 가능), 캡슐을 클릭하면 제거됩니다. 각 항목마다 실시간 미리보기가 제공됩니다(정보는 예시 값으로 본문에 흘러 들어감).
|
|
69
|
-
- **프리셋 시스템**: 내장 「기본」 기준선 + 원클릭 스타일 프리셋 4종(카오모지 / 아이루 / 네코무스메 / DeepSeek짱 — 제목과 5개 사유 문구를 통째로 스타일화). 현재 설정은 커스텀 프리셋으로 별도 저장할 수 있으며(`localStorage` 영속화), 자동 번호가 매겨진 이름 없는 프리셋(`이름 없음`, `이름 없음 2`…)과 「출처: xxx · 수정됨」 출처 표시, 프리셋 삭제를 지원합니다.
|
|
70
|
-
- **알림 제목 템플릿**: 비워 두면 각 사유에 대해 기본 제목을 사용합니다(완료=작업 완료 / 오류=작업 오류 / …). `{title}`은 세션 제목을 참조합니다.
|
|
84
|
+
- **프리셋 시스템**: 내장 「기본」 기준선 + 원클릭 스타일 프리셋 4종(카오모지 / 아이루 / 네코무스메 / DeepSeek짱 — 제목과 5개 종료 사유 + 질문 문구를 통째로 스타일화). 현재 설정은 커스텀 프리셋으로 별도 저장할 수 있으며(`localStorage` 영속화), 자동 번호가 매겨진 이름 없는 프리셋(`이름 없음`, `이름 없음 2`…)과 「출처: xxx · 수정됨」 출처 표시, 프리셋 삭제를 지원합니다.
|
|
85
|
+
- **알림 제목 템플릿**: 비워 두면 각 사유에 대해 기본 제목을 사용합니다(완료=작업 완료 / 오류=작업 오류 / … / 질문=AI가 질문했습니다). `{title}`은 세션 제목을 참조합니다.
|
|
71
86
|
|
|
72
87
|
### 공식 지표와 동일 기준
|
|
73
88
|
|
|
@@ -222,6 +237,8 @@ dsh plugin --profile web remove @telosmaylx/dsh-session-notify
|
|
|
222
237
|
|
|
223
238
|
**하위 에이전트 세션은 기본적으로 건너뜁니다**(`header.origin === 'subagent'` 또는 `delegationDepth > 0`) —— 하위 에이전트는 상위 세션이 조율하므로 턴마다 알림을 보내면 노이즈가 됩니다. 호스트 설정에서 건너뛰기를 해제할 수 있습니다.
|
|
224
239
|
|
|
240
|
+
**질문 알림은 독립 채널이며 위 화이트리스트에 포함되지 않습니다**: AI가 `ask_user_question`을 호출해 답변을 기다리는 동안(`tool/call` 이벤트) 즉시 알림이 뜨고, `tool/result`가 반환되면 알림이 무효화됩니다. 질문은 세션 로그에 기록되지 않고 알림만 표시됩니다.
|
|
241
|
+
|
|
225
242
|
### 알림 본문은 어디서 오나
|
|
226
243
|
|
|
227
244
|
클라이언트는 세션 목록에서 `running: true → false` 엣지를 관찰하면 알림을 보내며, 본문은 다음 우선순위로 가져옵니다(최대 6초 폴링, 400ms 간격):
|
|
@@ -230,20 +247,22 @@ dsh plugin --profile web remove @telosmaylx/dsh-session-notify
|
|
|
230
247
|
2. **세션 이벤트 윈도우의 notice 노드**(`kind=context` + `form=notice`) —— 보고 있는 세션은 디스크 저장 직후 바로 사용할 수 있습니다.
|
|
231
248
|
3. **폴백** —— 「상세는 세션 내 시스템 메시지 참조」+ 작업 영역 정보(`cwd` 마지막 세그먼트).
|
|
232
249
|
|
|
250
|
+
질문 알림의 본문도 호스트 프로젝션(key = `session-complete-notify-question`, 호스트가 제목과 본문을 이미 렌더링)을 우선 사용하며, 해당 프로젝션이 없는 구버전 호스트에서는 클라이언트가 제목과 `{question}` 텍스트를 직접 조합해 폴백합니다.
|
|
251
|
+
|
|
233
252
|
### 알림 예시
|
|
234
253
|
|
|
235
|
-
아래는 모두 `lib/core.js`의 `buildNotice`가 실제로 생성한 것입니다. 기본 문구는 「세션「{title}」〇〇. 클릭하여 확인.」 형식으로 통일됩니다(종료 사유에 따라 단어가 다르며, **소요 시간·소모량은 포함하지 않음**):
|
|
236
|
-
|
|
237
|
-
한국어 기본 문구:
|
|
238
|
-
|
|
239
|
-
```text
|
|
240
|
-
세션「重构登录模块」 완료. 클릭하여 확인. ← 완료
|
|
241
|
-
세션「重构登录模块」 중단됨. 클릭하여 확인. ← 중단
|
|
242
|
-
세션「重构登录模块」 차단됨. 클릭하여 확인. ← 차단
|
|
243
|
-
세션「重构登录模块」 한도 도달. 클릭하여 확인. ← 한도 도달
|
|
244
|
-
세션「重构登录模块」 오류. 클릭하여 확인. ← 오류
|
|
245
|
-
```
|
|
246
|
-
|
|
254
|
+
아래는 모두 `lib/core.js`의 `buildNotice`가 실제로 생성한 것입니다. 기본 문구는 「세션「{title}」〇〇. 클릭하여 확인.」 형식으로 통일됩니다(종료 사유에 따라 단어가 다르며, **소요 시간·소모량은 포함하지 않음**):
|
|
255
|
+
|
|
256
|
+
한국어 기본 문구:
|
|
257
|
+
|
|
258
|
+
```text
|
|
259
|
+
세션「重构登录模块」 완료. 클릭하여 확인. ← 완료
|
|
260
|
+
세션「重构登录模块」 중단됨. 클릭하여 확인. ← 중단
|
|
261
|
+
세션「重构登录模块」 차단됨. 클릭하여 확인. ← 차단
|
|
262
|
+
세션「重构登录模块」 한도 도달. 클릭하여 확인. ← 한도 도달
|
|
263
|
+
세션「重构登录模块」 오류. 클릭하여 확인. ← 오류
|
|
264
|
+
```
|
|
265
|
+
|
|
247
266
|
> 세션에 제목이 없으면(`titleValue`가 비어 있음) 「세션 완료. 클릭하여 확인.」으로 폴백합니다. 소요 시간·소모량·캐시 적중률·속도는 커스텀 템플릿에서 `{duration}` `{usage}` `{cache}` `{tps}`를 삽입한 경우에만 표시됩니다.
|
|
248
267
|
|
|
249
268
|
커스텀 템플릿(설정 패널에서 편집하며, 이 예시는 모든 정보 슬롯 사용):
|
|
@@ -281,7 +300,7 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
281
300
|
|
|
282
301
|
## 설정
|
|
283
302
|
|
|
284
|
-
대부분의 설정은 **DSH Web UI → 설정 → 플러그인 → 세션 완료 알림** 패널에서 완료됩니다(저장 후 「클릭하여 새로고침」을 누르면 적용). 「트리거 사유
|
|
303
|
+
대부분의 설정은 **DSH Web UI → 설정 → 플러그인 → 세션 완료 알림** 패널에서 완료됩니다(저장 후 「클릭하여 새로고침」을 누르면 적용). 「트리거 사유 화이트리스트」만 호스트 `cordis.patch.yml`의 `config`에서 설정합니다(하위 에이전트 건너뛰기는 패널의 체크박스로 제어).
|
|
285
304
|
|
|
286
305
|
### 설정 패널
|
|
287
306
|
|
|
@@ -293,12 +312,12 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
293
312
|
| 언어 | 5개 언어 중 단일 선택, 전환 시 패널 전체 즉시 재렌더링 |
|
|
294
313
|
| 알림 방식 | 3택1: 이중 채널(시스템 알림 + 페이지 내 알림, 기본값) / 시스템 알림만 / 페이지 내 알림만 |
|
|
295
314
|
| 알림 미디어 | 큰 이미지의 두 가지 소스: **사유별 업로드**——템플릿에서 「+ 정보 삽입 → 이미지」로 `{image}` 토큰을 삽입하고 로컬 이미지 선택(편집기에서 썸네일이 있는 칩으로 표시, **512px 너비·알림 표시 비율 16:9 중앙 크롭**으로 자동 압축, 사유별 저장). **전역 이미지/아이콘**——업로드 카드 2개를 한 줄에 나란히 배치(**아이콘이 먼저**. 빈 상태는 둥근 모서리 "+" 타일, 클릭하면 업로드. **이미지 512×288(16:9 중앙 크롭), 아이콘 128×128(1:1 정사각 중앙 크롭)**. 업로드 후 카드에 썸네일 표시, **클릭하면 전체 화면 미리보기(비율 유지·크롭 없는 원본 이미지)**, 오른쪽 위 ×로 삭제). 아이콘은 비우면 사이트 기본 아이콘, 또는 템플릿에 `{icon}` 토큰을 삽입해 **사유별 아이콘** 지정(전역보다 우선). 시스템 알림 채널에만 적용(페이지 내 토스트는 텍스트 카드). 「보내기」 테스트 버튼에도 동일 적용 |
|
|
296
|
-
| 제목 | 접이식 섹션(**기본 접힘**, 클릭하면 펼침): **전역 푸시 제목**(모든 이유 공통. Chip 편집기——「+ 정보 삽입」으로 삽입한 정보는 **캡슐 태그**로 표시되고, 클릭으로 제거. **알림 전송 시 제목 안의 정보 토큰(소요 시간/소모/오류/캐시 히트/속도)이 실제 값으로 대체되어 코드가 노출되지 않음**. 비워 두면 각 사유별 기본 제목 사용——완료=작업 완료, 오류=작업 오류, 중단=작업 중단, 차단=작업 차단, 상한=출력 상한
|
|
297
|
-
| 콘텐츠 | 접이식 섹션(**기본 접힘**, 클릭하면 펼침). 펼치면 각
|
|
315
|
+
| 제목 | 접이식 섹션(**기본 접힘**, 클릭하면 펼침): **전역 푸시 제목**(모든 이유 공통. Chip 편집기——「+ 정보 삽입」으로 삽입한 정보는 **캡슐 태그**로 표시되고, 클릭으로 제거. **알림 전송 시 제목 안의 정보 토큰(소요 시간/소모/오류/캐시 히트/속도)이 실제 값으로 대체되어 코드가 노출되지 않음**. 비워 두면 각 사유별 기본 제목 사용——완료=작업 완료, 오류=작업 오류, 중단=작업 중단, 차단=작업 차단, 상한=출력 상한 도달, 질문=AI가 질문했습니다) + **사유별 제목**(6개 사유 각각 입력. 각 행에 "+" 삽입 버튼——삽입 가능한 정보 토큰(「질문」포함, 이미지/아이콘 제외), 커서 위치에 삽입; **전역 제목보다 우선**. 비우면 전역 또는 언어 기본값 사용) |
|
|
316
|
+
| 콘텐츠 | 접이식 섹션(**기본 접힘**, 클릭하면 펼침). 펼치면 각 사유(완료, 오류, 중단, 차단, 출력 상한, 질문)마다 **한 줄 레이아웃**(사유 라벨 + Chip 편집기 + "+" 삽입 버튼——메뉴 펼침 중에는 "−"로 변경 + **종이비행기 보내기 버튼**. 버튼은 직사각형이며 세로 중앙 정렬): **템플릿이 비어 있으면(기본 프리셋) 편집기에 기본 문구 표시**. 텍스트 + 인라인 정보 캡슐, 커서 위치에 삽입; `{image}`/`{icon}` 칩은 **썸네일 클릭으로 큰 이미지 미리보기, × 클릭으로만 삭제**(실수 삭제 방지), 다른 칩은 클릭으로 제거; **편집 후 비우면 "비우면 기본 문구 사용" 플레이스홀더 표시(선택·삭제 불가)**. 질문 행의 기본 문구는 「AI가 질문합니다: {question}」이며, `{question}`은 보낼 때 AI의 실제 질문으로 대체됩니다(삽입 메뉴에도 「질문」 토큰이 있으며 다른 토큰과 동일한 조작입니다) |
|
|
298
317
|
| 하위 에이전트 세션 건너뛰기 | 체크박스(저장 시 설정 문서에 함께 기록) |
|
|
299
318
|
| 알림 권한 | 상태 실시간 표시: 승인됨(초록) / 미승인(「권한 요청」 버튼 포함) / 브라우저가 차단함(주소창 조작 안내 포함) / 환경 미지원 |
|
|
300
319
|
| 사유별 제목 커스터마이징 | 접는 영역(기본 접힘): 각 종료 사유마다 독립 제목 입력 상자. 비워 두면 = 전역 템플릿 또는 언어 기본 제목 사용 |
|
|
301
|
-
| 저장 | 호스트 설정 문서에 기록(`language` / `templates` / `titleTemplate` / `titleTemplates` / `pushMode`). 저장 후 「클릭하여 새로고침」 링크 표시 |
|
|
320
|
+
| 저장 | 호스트 설정 문서에 기록(`language` / `templates` / `titleTemplate` / `titleTemplates` / `pushMode` / `skipSubagents`). 저장 후 「클릭하여 새로고침」 링크 표시 |
|
|
302
321
|
| 초기화 | 원클릭으로 기본값 복원(**언어는 현재 선택 유지**, 제목/템플릿/알림 방식은 기본값으로 복원) 후 즉시 저장 |
|
|
303
322
|
|
|
304
323
|
> [!NOTE]
|
|
@@ -324,6 +343,7 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
324
343
|
| `{tps}` | 생성 속도(공식 프로젝션 기준, 데이터 없으면 비어 있음) | `92 tok/s` |
|
|
325
344
|
| `{image}` | 사용자 지정 알림 이미지 스위치: 「+ 정보 삽입」에서 삽입하고 로컬 이미지 선택(512px로 자동 압축), 사유별로 독립. 본문 렌더링 시 제거되며 세션 로그에 기록되지 않음. 토큰을 삭제하면 해당 사유의 이미지 데이터도 함께 지워짐 | — |
|
|
326
345
|
| `{icon}` | 사용자 지정 알림 아이콘 스위치: 「+ 정보 삽입」에서 삽입하고 로컬 이미지 선택(128×128 정사각형으로 자동 압축), 사유별로 독립. 본문 렌더링 시 제거되며 세션 로그에 기록되지 않음. 전역 「알림 아이콘」보다 우선. 토큰을 삭제하면 해당 사유의 아이콘 데이터도 함께 지워짐 | — |
|
|
346
|
+
| `{question}` | **질문 행 전용 플레이스홀더**: 보낼 때 AI의 실제 질문 텍스트로 대체됩니다. 「+ 정보 삽입」메뉴와 연동(「질문」토큰을 직접 선택 가능, 직접 입력한 `{question}`도 캡슐로 인식). 질문 채널에서만 사용 가능하며, 다른 사유 행에 넣으면 빈 문자열로 대체됩니다(리터럴 누출 방지) | `보고서 생성을 계속할까요?` |
|
|
327
347
|
| `{label}` | 폐기됨 —— 렌더링 시 자동 제거, 기존 템플릿은 계속 호환(삽입 메뉴에서 해당 옵션 제거됨) | — |
|
|
328
348
|
|
|
329
349
|
템플릿을 비워 두면 내장 기본 문구를 사용합니다(「세션「{title}」〇〇. 클릭하여 확인.」 형식으로 통일, 소요 시간·소모량 미포함). 접히는 행의 `summary`는 본문과 동일한 소스입니다(렌더링 결과 120자로 잘림) —— 접힌 행만 보는 사용자도 실제 제목과 소요 시간, 소모량을 확인할 수 있습니다.
|
|
@@ -365,6 +385,7 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
365
385
|
│ session/event 火线 │
|
|
366
386
|
│ ├─ turn/start → tracker 起表(key: sessionId:turn) │
|
|
367
387
|
│ ├─ assistant/message → 累加该轮 token 用量 │
|
|
388
|
+
│ ├─ tool/call → ask_user_question?写提问投影(标题+正文) │
|
|
368
389
|
│ └─ turn/end → reason.kind ∈ reasons ? │
|
|
369
390
|
│ ├─ 子代理会话?跳过 │
|
|
370
391
|
│ ├─ 读官方投影:cache / tps / title │
|
|
@@ -374,6 +395,8 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
374
395
|
│ │
|
|
375
396
|
│ settings.register → 官方「设置 → 插件」命名空间(失败退避重试) │
|
|
376
397
|
│ sessionProjections → 注册投影单元(key=session-complete-notify) │
|
|
398
|
+
│ + 提问投影(key=session-complete-notify- │
|
|
399
|
+
│ question,等待回答期间持续推送) │
|
|
377
400
|
└──────────────────────────────┬──────────────────────────────────────┘
|
|
378
401
|
│ user/message (source: plugin, form: notice)
|
|
379
402
|
▼ JSONL 持久化 + 投影推送
|
|
@@ -383,6 +406,8 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
383
406
|
│ ├─ 取正文:投影 → 事件窗口 notice → 降级(轮询 ≤6s) │
|
|
384
407
|
│ ├─ Web Notification(独立 tag,点击聚焦) │
|
|
385
408
|
│ └─ 页内 toast(永远展示,≤3 条,10s 自动消失) │
|
|
409
|
+
│ 提问投影轮询(key=session-complete-notify-question): │
|
|
410
|
+
│ 有值 → 立即弹提醒(标题+正文),无值清空 │
|
|
386
411
|
│ │
|
|
387
412
|
│ slots.inject('settings.plugin.item') → 设置卡片(预设/语言/模板) │
|
|
388
413
|
└─────────────────────────────────────────────────────────────────────┘
|
|
@@ -410,7 +435,8 @@ dsh-session-notify/
|
|
|
410
435
|
│ │ # sessionProjections 投影单元(后台会话推送正文)
|
|
411
436
|
│ ├── core.js # 纯逻辑层(零依赖,可独立测试):轮次计时与用量聚合、
|
|
412
437
|
│ │ # 5 语言文案表、时长/用量/缓存/速度格式化、
|
|
413
|
-
│ │ # 模板渲染({title}{duration}{usage}{error}{cache}{tps}
|
|
438
|
+
│ │ # 模板渲染({title}{duration}{usage}{error}{cache}{tps})、
|
|
439
|
+
│ │ # 提问正文构建(buildQuestionBody,{question} + 媒体剥除)
|
|
414
440
|
│ └── client.js # 浏览器平面:完成推送(系统通知 + toast)、
|
|
415
441
|
│ # 设置卡片(Chip 模板编辑器 + 预设系统 + 实时预览)
|
|
416
442
|
├── scripts/
|
|
@@ -471,6 +497,13 @@ node scripts/verify-notice.mjs <session.jsonl.zstd>
|
|
|
471
497
|
|
|
472
498
|
</details>
|
|
473
499
|
|
|
500
|
+
<details>
|
|
501
|
+
<summary><b>AI가 질문해도 팝업 알림이 뜨나요?</b></summary>
|
|
502
|
+
|
|
503
|
+
뜹니다. AI가 `ask_user_question`을 호출해 답변을 기다리면, 호스트가 즉시 「질문 제목 + 본문」을 전용 프로젝션(key = `session-complete-notify-question`)에 기록하고, 클라이언트가 폴링으로 값을 얻으면 즉시 알림을 띄웁니다——다른 페이지를 보고 있어도 놓치지 않습니다. 질문 문구는 완료 알림과 똑같이 완전히 커스터마이징할 수 있습니다. 설정 패널의 「제목 / 콘텐츠」 접이식 섹션에 각각 「질문」 행이 있으며, 본문은 `{question}` 플레이스홀더(AI의 실제 질문 주입)와 `{image}` / `{icon}` 미디어 스위치를 지원합니다. 답변 후(`tool/result`)에는 알림이 무효화되어 남지 않습니다.
|
|
504
|
+
|
|
505
|
+
</details>
|
|
506
|
+
|
|
474
507
|
<details>
|
|
475
508
|
<summary><b>왜 「중단」(interrupted)은 알림을 보내지 않나요?</b></summary>
|
|
476
509
|
|
|
@@ -533,27 +566,31 @@ node scripts/verify-notice.mjs <session.jsonl.zstd>
|
|
|
533
566
|
|
|
534
567
|
---
|
|
535
568
|
|
|
536
|
-
## 변경 로그
|
|
537
|
-
|
|
538
|
-
| 버전 | 날짜 | 변경 |
|
|
539
|
-
| --- | --- | --- |
|
|
540
|
-
| **0.1.
|
|
541
|
-
| **0.1.
|
|
542
|
-
| **0.1.
|
|
543
|
-
| **0.1.
|
|
544
|
-
| **0.1.
|
|
545
|
-
| **0.1.
|
|
546
|
-
| **0.1.
|
|
547
|
-
| **0.1.
|
|
548
|
-
| **0.1.
|
|
549
|
-
| **0.1.
|
|
550
|
-
| **0.1.
|
|
551
|
-
| 0.1.
|
|
552
|
-
| 0.1.
|
|
553
|
-
| 0.1.
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
569
|
+
## 변경 로그
|
|
570
|
+
|
|
571
|
+
| 버전 | 날짜 | 변경 내용 |
|
|
572
|
+
| --- | --- | --- |
|
|
573
|
+
| **0.1.17** | 2026-08-30 | **질문 즉시 알림(커스터마이징)**:AI 질문 즉시 팝업. 질문 문구는 `{question}` 플레이스홀더와 미디어 스위치 지원. 프리셋 4종에 5개 언어 질문 문구 추가. 구버전 호스트 폴백 |
|
|
574
|
+
| **0.1.16** | 2026-08-30 | **조작 수정**:Backspace 연타 시 태그 오삭제 방지(커서와 태그 사이에 텍스트가 없을 때만 태그 삭제) |
|
|
575
|
+
| **0.1.15** | 2026-08-30 | **조작 개선**:「콘텐츠」 접이식 영역 기본 펼침. 태그 삭제 후 커서가 실제 내용으로 이동해 연속 삭제 가능 |
|
|
576
|
+
| **0.1.14** | 2026-08-30 | **코드 리뷰 수정**:프리셋 삭제 확인, 저장된 구성으로 복원, 미디어 「×」로 미리보기 제거, 프리셋 매칭에 이미지 포함, 동명 경고, 수정 시에만 초기화 가능, 디버그 로그 자동 절단 |
|
|
577
|
+
| **0.1.13** | 2026-08-29 | 원클릭 스타일 프리셋 4종 추가(카오모지/아이루/네코무스메/DeepSeek짱), 5개 언어 지원 |
|
|
578
|
+
| **0.1.12** | 2026-08-29 | 릴리스 패키지 정리 |
|
|
579
|
+
| **0.1.11** | 2026-08-29 | **사용자 지정 알림 미디어**:`{image}`/`{icon}` 토큰 삽입 및 이미지/아이콘 업로드(자동 크롭). 제목에 정보 플레이스홀더. 「본문 템플릿×5」를 접이식으로. 레이아웃·조작 전면 개선 |
|
|
580
|
+
| **0.1.10** | 2026-08-29 | 푸시 제목을 네이티브 입력으로. 다국어 README 추가(English/繁體/日本語/한국어) |
|
|
581
|
+
| **0.1.9** | 2026-08-29 | 사유별 푸시 제목. 프로젝션을 객체로 업그레이드. 초기화 시 언어 유지. 사유별 「전송」 테스트 버튼 |
|
|
582
|
+
| **0.1.8** | 2026-08-29 | 기본 제목 「작업 완료」. 사유별 기본 문구. 초기화 버튼 추가 |
|
|
583
|
+
| **0.1.7** | 2026-08-29 | 설정 카드 크래시 수정(알림 권한 행 스코프 문제) |
|
|
584
|
+
| **0.1.6** | 2026-08-29 | 알림 권한 상태 영역 추가. 사용자 제스처 내 권한 요청 |
|
|
585
|
+
| **0.1.5** | 2026-08-29 | 알림 채널 설정(이중/시스템만/페이지 내만)——QQ 브라우저 이중 알림 해결 |
|
|
586
|
+
| **0.1.4** | 2026-08-28 | 완전한 제거 지원(dispose 생명주기 정리) |
|
|
587
|
+
| **0.1.3** | 2026-08-28 | dsh.bundle manifest 선언. settings 재시도 타이머를 ctx.effect()로 |
|
|
588
|
+
| 0.1.2 | 2026-08-27 | `@telosmaylx` 스코프로 이름 변경 |
|
|
589
|
+
| 0.1.1 | 2026-08-27 | GitHub / npm 설치 방법 문서화 |
|
|
590
|
+
| 0.1.0 | 2026-08-26 | 초기 버전: 세션 내 시스템 메시지 + 브라우저 알림 + 공식 설정 패널 |
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
557
594
|
## 기여
|
|
558
595
|
|
|
559
596
|
Issue와 PR을 환영합니다:
|
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
[](https://www.npmjs.com/package/@telosmaylx/dsh-session-notify)
|
|
14
14
|
[](https://github.com/TelosmaYLX/dsh-session-notify/pulls)
|
|
15
15
|
|
|
16
|
-
每轮对话结束时,把「已完成 / 出错 / 被阻塞 / 达到上限」连同用时、token 消耗写入会话日志,并推送浏览器系统通知与页内 toast
|
|
16
|
+
每轮对话结束时,把「已完成 / 出错 / 被阻塞 / 达到上限」连同用时、token 消耗写入会话日志,并推送浏览器系统通知与页内 toast;**AI 向你提问时同样立即弹窗提醒**,不必守着会话页面。内置 5 种语言、4 套风格预设(颜文字 / 艾露猫 / 猫娘 / DeepSeek 娘)、可视化文案模板编辑器、自定义预设库,缓存命中率与生成速度取自官方投影,与状态栏同口径。
|
|
17
17
|
|
|
18
18
|
</div>
|
|
19
19
|
|
|
@@ -49,6 +49,16 @@
|
|
|
49
49
|
|
|
50
50
|
## 功能特性
|
|
51
51
|
|
|
52
|
+
<div align="center">
|
|
53
|
+
|
|
54
|
+
<img src="screenshot/screenshot1.png" width="220" alt="标题编辑器">
|
|
55
|
+
<img src="screenshot/ScreenShot2png.png" width="220" alt="内容编辑器">
|
|
56
|
+
<img src="screenshot/ScreenShot3.png" width="220" alt="任务完成通知">
|
|
57
|
+
<img src="screenshot/ScreenShot4.png" width="220" alt="AI 提问通知">
|
|
58
|
+
<img src="screenshot/ScreenShot5.png" width="220" alt="任务出错通知">
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
|
|
52
62
|
### 三通道提醒,一条不漏
|
|
53
63
|
|
|
54
64
|
| 通道 | 形式 | 说明 |
|
|
@@ -62,12 +72,17 @@
|
|
|
62
72
|
- 宿主为所有会话(含后台、未打开窗口的)维护「最近一条通知正文」的会话投影单元(key = `session-complete-notify`),推送正文跨会话一致,不依赖你恰好开着那个窗口。
|
|
63
73
|
- 客户端从会话列表快照观测所有会话的 `running` 位,`true → false` 边沿即触发推送,与官方 sidebar 提醒同策略(首次观测只记录基线,已在 idle 的会话不补发)。
|
|
64
74
|
|
|
75
|
+
### 提问即时提醒
|
|
76
|
+
|
|
77
|
+
- AI 调用 `ask_user_question` 向你提问时,宿主立刻把「提问标题 + 正文」写入独立投影单元(key = `session-complete-notify-question`),客户端实时轮询并弹窗提醒——**即使你正看着别的页面,也不会错过提问**。
|
|
78
|
+
- 提问文案完全可定制:标题走「按原因定制标题 → 全局标题 → 默认标题」链路,正文支持 `{question}` 占位符(注入 AI 的实际提问),媒体开关 `{image}` / `{icon}` 同样生效。
|
|
79
|
+
|
|
65
80
|
### 可定制到每一句话
|
|
66
81
|
|
|
67
82
|
- **5 种语言**:简体中文、繁體中文、English、日本語、한국어 —— 通知文案、时长与用量措辞、设置面板界面全部随语言切换(切换即时重渲染)。
|
|
68
83
|
- **可视化模板编辑器**(Chip 胶囊编辑器):动态信息渲染为内联胶囊(占位符代码不露出),「+ 插入信息」在光标处插入(可插到文字中间),点击胶囊移除,每栏带实时预览(信息以示例值流入正文)。
|
|
69
|
-
- **预设系统**:内置「默认」基线 + 4 套一键风格预设(颜文字 / 艾露猫 / 猫娘 / DeepSeek 娘——标题与 5
|
|
70
|
-
- **推送标题模板**:留空时各原因用默认标题(完成=任务已完成 / 出错=任务出错 /
|
|
84
|
+
- **预设系统**:内置「默认」基线 + 4 套一键风格预设(颜文字 / 艾露猫 / 猫娘 / DeepSeek 娘——标题与 5 结束原因 + 提问正文整套风格化文案);当前配置可另存为自定义预设(`localStorage` 持久化),支持自动编号的未命名预设(`未命名`、`未命名 2`…)、「来自:xxx · 已修改」来源指示、删除预设。
|
|
85
|
+
- **推送标题模板**:留空时各原因用默认标题(完成=任务已完成 / 出错=任务出错 / … / 提问=AI 正在向你提问);`{title}` 引用会话标题。
|
|
71
86
|
|
|
72
87
|
### 与官方口径同源
|
|
73
88
|
|
|
@@ -222,6 +237,8 @@ dsh plugin --profile web remove @telosmaylx/dsh-session-notify
|
|
|
222
237
|
|
|
223
238
|
**子代理会话默认跳过**(`header.origin === 'subagent'` 或 `delegationDepth > 0`)—— 子代理由父会话编排,逐轮提醒是噪音;可在宿主配置关闭跳过。
|
|
224
239
|
|
|
240
|
+
**提问是独立通道,不走上面的白名单**:AI 调用 `ask_user_question` 等待你回答时(`tool/call` 事件)立即提醒,`tool/result` 返回后提醒失效。提问不写会话日志,只弹通知。
|
|
241
|
+
|
|
225
242
|
### 推送正文从哪来
|
|
226
243
|
|
|
227
244
|
客户端在会话列表观测到 `running: true → false` 边沿时推送,正文按以下优先级获取(最长轮询 6 秒,400ms 间隔):
|
|
@@ -230,20 +247,22 @@ dsh plugin --profile web remove @telosmaylx/dsh-session-notify
|
|
|
230
247
|
2. **会话事件窗口里的 notice 节点**(`kind=context` + `form=notice`)—— 正在查看的会话,落盘后立即可用;
|
|
231
248
|
3. **降级** —— 「详情见会话内系统消息」+ 工作区信息(`cwd` 最后一段)。
|
|
232
249
|
|
|
250
|
+
提问提醒的正文同样优先取宿主投影(key = `session-complete-notify-question`,宿主已渲染好标题与正文),老宿主无该投影时客户端自行拼接标题与 `{question}` 文本兜底。
|
|
251
|
+
|
|
233
252
|
### 通知示例
|
|
234
253
|
|
|
235
|
-
以下均由 `lib/core.js` 的 `buildNotice` 实际生成。默认文案统一为「会话「{title}」已xx,请点击查看。」句式(按结束原因差异用词;**不含用时与消耗**):
|
|
236
|
-
|
|
237
|
-
简体中文默认文案:
|
|
238
|
-
|
|
239
|
-
```text
|
|
240
|
-
会话「重构登录模块」已完成,请点击查看。 ← 完成
|
|
241
|
-
会话「重构登录模块」已中止,请点击查看。 ← 中止
|
|
242
|
-
会话「重构登录模块」被阻塞,请点击查看。 ← 阻塞
|
|
243
|
-
会话「重构登录模块」达到上限,请点击查看。 ← 上限
|
|
244
|
-
会话「重构登录模块」出错,请点击查看。 ← 出错
|
|
245
|
-
```
|
|
246
|
-
|
|
254
|
+
以下均由 `lib/core.js` 的 `buildNotice` 实际生成。默认文案统一为「会话「{title}」已xx,请点击查看。」句式(按结束原因差异用词;**不含用时与消耗**):
|
|
255
|
+
|
|
256
|
+
简体中文默认文案:
|
|
257
|
+
|
|
258
|
+
```text
|
|
259
|
+
会话「重构登录模块」已完成,请点击查看。 ← 完成
|
|
260
|
+
会话「重构登录模块」已中止,请点击查看。 ← 中止
|
|
261
|
+
会话「重构登录模块」被阻塞,请点击查看。 ← 阻塞
|
|
262
|
+
会话「重构登录模块」达到上限,请点击查看。 ← 上限
|
|
263
|
+
会话「重构登录模块」出错,请点击查看。 ← 出错
|
|
264
|
+
```
|
|
265
|
+
|
|
247
266
|
> 会话无标题(`titleValue` 为空)时自动回退「会话已完成,请点击查看。」;用时/消耗/缓存命中/速度等数据只在自定义模板中通过 `{duration}` `{usage}` `{cache}` `{tps}` 占位符插入时显示。
|
|
248
267
|
|
|
249
268
|
自定义模板(在设置面板编辑,本例用到全部信息位):
|
|
@@ -281,7 +300,7 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
281
300
|
|
|
282
301
|
## 配置
|
|
283
302
|
|
|
284
|
-
绝大多数配置在 **DSH Web UI → 设置 → 插件 → 会话完成提醒**
|
|
303
|
+
绝大多数配置在 **DSH Web UI → 设置 → 插件 → 会话完成提醒** 面板完成(保存后点「点击刷新」生效)。仅「触发原因白名单」在宿主 `cordis.patch.yml` 的 `config` 中配置(跳过子代理在面板中以复选框控制)。
|
|
285
304
|
|
|
286
305
|
### 设置面板
|
|
287
306
|
|
|
@@ -293,12 +312,12 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
293
312
|
| 语言 | 5 种语言单选,切换即时重渲染整个面板 |
|
|
294
313
|
| 推送方式 | 三选一:双通道(系统通知 + 页内提示,默认)/ 仅系统通知 / 仅页内提示 |
|
|
295
314
|
| 通知图片 | 大图两种来源:**按原因上传**——在模板中通过「+ 插入信息 → 图片」插入 `{image}` 标签并选择本地图片(编辑器内显示为带缩略图的标签,**自动压缩至 512px 宽、按通知显示比例 16:9 居中裁切**,随各原因独立保存);**全局大图/图标**——两张上传卡片并排一行(**图标在前**,空态 = 圆角矩形 + 号,点击上传;**大图 512×288(16:9 居中裁切)、图标 128×128(1:1 方形居中裁切)**;已上传则卡片显示缩略图,**点击缩略图可全屏查看完整原图(等比未裁切)**,右上角 × 删除)。图标留空用站点默认图标,也可在模板中插入 `{icon}` 标签**按原因指定图标**(优先于全局)。仅系统通知通道生效(页内 toast 为文字卡片),「发送」测试按钮同样生效 |
|
|
296
|
-
| 标题 | 折叠区(**默认收起**,点击展开):**全局推送标题**(所有原因共用,Chip 编辑器——点「+
|
|
297
|
-
| 内容 |
|
|
315
|
+
| 标题 | 折叠区(**默认收起**,点击展开):**全局推送标题**(所有原因共用,Chip 编辑器——点「+ 插入信息」插入的信息以**胶囊标签**形式显示,点击胶囊移除;占位提示「通用推送标题,留空时则使用默认标题,优先级低于下方自定义标题」(不可选中/删除);**通知发送时标题里的信息位(用时/消耗/错误/缓存命中/速度)会替换为实际值,不再显示代码**;留空时各原因用默认标题——完成=任务已完成、出错=任务出错、中止=任务已中止、阻塞=任务被阻塞、上限=任务达到上限、提问=AI 正在向你提问)+ **按原因定制标题**(6 条原因各自输入,每行带「+」插入按钮——可插入信息标签(含「提问」,不含图片/图标),插入到光标处;**优先于全局标题**,留空 = 用全局或语言默认标题) |
|
|
316
|
+
| 内容 | 折叠区(**默认收起**,点击展开);展开后每条结束原因(完成、出错、中止、阻塞、上限、提问)**一行式布局**(原因标签 + Chip 编辑器 + 「+」插入按钮——菜单展开时变「−」+ **发送箭头按钮**,按钮为矩形、垂直居中):**空模板(默认预设)时编辑器显示默认文案「会话「{title}」已xx,请点击查看。」**,文字 + 内联信息胶囊,光标处插入;`{image}`/`{icon}` 标签**点击缩略图可预览大图、点 × 才删除**(防误删),其他标签点击移除;**编辑后删空则显示「留空则使用默认文案」占位(不可选中/删除)**;提问行的默认文案为「AI 向你提问:{question}」,`{question}` 会在发送时替换为 AI 的实际提问(插入菜单同样提供「提问」标签,与其他标签同款交互) |
|
|
298
317
|
| 跳过子代理会话 | 复选框(保存时一并写入设置文档) |
|
|
299
318
|
| 通知权限 | 状态实时显示:已授权(绿)/ 尚未授权(附「请求授权」按钮)/ 已被浏览器屏蔽(附地址栏操作指引)/ 环境不支持 |
|
|
300
319
|
| 按原因定制标题 | 折叠区(默认收起):每个结束原因一个独立标题输入框,留空 = 用全局模板或语言默认标题 |
|
|
301
|
-
| 保存 | 写入宿主设置文档(`language` / `templates` / `titleTemplate` / `titleTemplates` / `pushMode`);保存后显示「点击刷新」链接 |
|
|
320
|
+
| 保存 | 写入宿主设置文档(`language` / `templates` / `titleTemplate` / `titleTemplates` / `pushMode` / `skipSubagents`);保存后显示「点击刷新」链接 |
|
|
302
321
|
| 重置 | 一键还原默认值(**语言保留当前选择**,标题/模板/推送方式恢复默认)并立即保存 |
|
|
303
322
|
|
|
304
323
|
> [!NOTE]
|
|
@@ -324,6 +343,7 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
324
343
|
| `{tps}` | 生成速度(官方投影口径,无数据为空) | `92 tok/s` |
|
|
325
344
|
| `{image}` | 自定义通知大图开关:从「+ 插入信息」插入并选择本地图片(自动压缩至 512px),按原因独立;正文渲染时剥除,不进会话日志;删除标签时该原因图片数据一并清除 | — |
|
|
326
345
|
| `{icon}` | 自定义通知图标开关:从「+ 插入信息」插入并选择本地图片(自动压缩至 128×128 方形),按原因独立;正文渲染时剥除,不进会话日志;优先于全局「通知图标」;删除标签时该原因图标数据一并清除 | — |
|
|
346
|
+
| `{question}` | **提问行的专属占位符**:发送时替换为 AI 的实际提问文本;与「+ 插入信息」菜单联动(可直接选「提问」标签,手输 `{question}` 同样识别为胶囊),仅提问通道可用,其他原因行插了也会被替换为空(防字面量泄漏) | `要继续生成报告吗?` |
|
|
327
347
|
| `{label}` | 已废弃 —— 渲染时自动剥除,旧模板仍兼容(插入菜单已移除该选项) | — |
|
|
328
348
|
|
|
329
349
|
模板留空即使用内置默认文案(「会话「{title}」已xx,请点击查看。」句式,不含用时与消耗)。折叠行 `summary` 与正文同源(渲染结果截断至 120 字符)—— 只看折叠行的用户也能看到真实标题与用时、消耗。
|
|
@@ -365,6 +385,7 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
365
385
|
│ session/event 火线 │
|
|
366
386
|
│ ├─ turn/start → tracker 起表(key: sessionId:turn) │
|
|
367
387
|
│ ├─ assistant/message → 累加该轮 token 用量 │
|
|
388
|
+
│ ├─ tool/call → ask_user_question?写提问投影(标题+正文) │
|
|
368
389
|
│ └─ turn/end → reason.kind ∈ reasons ? │
|
|
369
390
|
│ ├─ 子代理会话?跳过 │
|
|
370
391
|
│ ├─ 读官方投影:cache / tps / title │
|
|
@@ -374,6 +395,8 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
374
395
|
│ │
|
|
375
396
|
│ settings.register → 官方「设置 → 插件」命名空间(失败退避重试) │
|
|
376
397
|
│ sessionProjections → 注册投影单元(key=session-complete-notify) │
|
|
398
|
+
│ + 提问投影(key=session-complete-notify- │
|
|
399
|
+
│ question,等待回答期间持续推送) │
|
|
377
400
|
└──────────────────────────────┬──────────────────────────────────────┘
|
|
378
401
|
│ user/message (source: plugin, form: notice)
|
|
379
402
|
▼ JSONL 持久化 + 投影推送
|
|
@@ -383,6 +406,8 @@ Session "重构登录模块" completed (took 3m25s, used 1,240 in / 3,560 out).
|
|
|
383
406
|
│ ├─ 取正文:投影 → 事件窗口 notice → 降级(轮询 ≤6s) │
|
|
384
407
|
│ ├─ Web Notification(独立 tag,点击聚焦) │
|
|
385
408
|
│ └─ 页内 toast(永远展示,≤3 条,10s 自动消失) │
|
|
409
|
+
│ 提问投影轮询(key=session-complete-notify-question): │
|
|
410
|
+
│ 有值 → 立即弹提醒(标题+正文),无值清空 │
|
|
386
411
|
│ │
|
|
387
412
|
│ slots.inject('settings.plugin.item') → 设置卡片(预设/语言/模板) │
|
|
388
413
|
└─────────────────────────────────────────────────────────────────────┘
|
|
@@ -410,7 +435,8 @@ dsh-session-notify/
|
|
|
410
435
|
│ │ # sessionProjections 投影单元(后台会话推送正文)
|
|
411
436
|
│ ├── core.js # 纯逻辑层(零依赖,可独立测试):轮次计时与用量聚合、
|
|
412
437
|
│ │ # 5 语言文案表、时长/用量/缓存/速度格式化、
|
|
413
|
-
│ │ # 模板渲染({title}{duration}{usage}{error}{cache}{tps}
|
|
438
|
+
│ │ # 模板渲染({title}{duration}{usage}{error}{cache}{tps})、
|
|
439
|
+
│ │ # 提问正文构建(buildQuestionBody,{question} + 媒体剥除)
|
|
414
440
|
│ └── client.js # 浏览器平面:完成推送(系统通知 + toast)、
|
|
415
441
|
│ # 设置卡片(Chip 模板编辑器 + 预设系统 + 实时预览)
|
|
416
442
|
├── scripts/
|
|
@@ -471,6 +497,13 @@ node scripts/verify-notice.mjs <session.jsonl.zstd>
|
|
|
471
497
|
|
|
472
498
|
</details>
|
|
473
499
|
|
|
500
|
+
<details>
|
|
501
|
+
<summary><b>AI 向我提问时也会弹窗提醒吗?</b></summary>
|
|
502
|
+
|
|
503
|
+
会。AI 调用 `ask_user_question` 等待你回答时,宿主立刻把「提问标题 + 正文」写入独立投影(key = `session-complete-notify-question`),客户端轮询到后立即弹提醒——即使你正看着别的页面也不会错过。提问文案与完成通知一样完全可定制:设置面板的「标题 / 内容」折叠区各有「提问」一行,正文支持 `{question}` 占位符(注入 AI 的实际提问),`{image}` / `{icon}` 媒体开关同样生效。回答后(`tool/result`)提醒失效,不会残留。
|
|
504
|
+
|
|
505
|
+
</details>
|
|
506
|
+
|
|
474
507
|
<details>
|
|
475
508
|
<summary><b>为什么「中断」(interrupted)不提醒?</b></summary>
|
|
476
509
|
|
|
@@ -533,27 +566,31 @@ node scripts/verify-notice.mjs <session.jsonl.zstd>
|
|
|
533
566
|
|
|
534
567
|
---
|
|
535
568
|
|
|
536
|
-
## 更新日志
|
|
537
|
-
|
|
538
|
-
| 版本 | 日期 | 变更 |
|
|
539
|
-
| --- | --- | --- |
|
|
540
|
-
| **0.1.
|
|
541
|
-
| **0.1.
|
|
542
|
-
| **0.1.
|
|
543
|
-
| **0.1.
|
|
544
|
-
| **0.1.
|
|
545
|
-
| **0.1.
|
|
546
|
-
| **0.1.
|
|
547
|
-
| **0.1.
|
|
548
|
-
| **0.1.
|
|
549
|
-
| **0.1.
|
|
550
|
-
| **0.1.
|
|
551
|
-
| 0.1.
|
|
552
|
-
| 0.1.
|
|
553
|
-
| 0.1.
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
569
|
+
## 更新日志
|
|
570
|
+
|
|
571
|
+
| 版本 | 日期 | 变更 |
|
|
572
|
+
| --- | --- | --- |
|
|
573
|
+
| **0.1.17** | 2026-08-30 | **提问即时提醒(可定制)**:AI 提问立即弹窗;提问文案支持 `{question}` 占位符与媒体开关;4 套预设补齐 5 语言提问文案;旧宿主自动兜底 |
|
|
574
|
+
| **0.1.16** | 2026-08-30 | **交互修复**:连按 Backspace 不再误删标签(仅当光标与标签间无文字时才删标签) |
|
|
575
|
+
| **0.1.15** | 2026-08-30 | **交互优化**:「内容」折叠区默认展开;删除标签后光标直达真实内容,可连贯删除 |
|
|
576
|
+
| **0.1.14** | 2026-08-30 | **代码审查修复**:删除预设确认、预设恢复为已保存配置、媒体「×」清除预览、按原因图片参与预设匹配、同名预设提示、重置仅在有修改时可用、调试日志自动截断 |
|
|
577
|
+
| **0.1.13** | 2026-08-29 | 新增 4 套一键风格预设(颜文字/艾露猫/猫娘/DeepSeek 娘),支持 5 语言 |
|
|
578
|
+
| **0.1.12** | 2026-08-29 | 发布包清理 |
|
|
579
|
+
| **0.1.11** | 2026-08-29 | **自定义通知媒体**:模板可插 `{image}`/`{icon}` 并上传图片/图标(自动裁切);推送标题支持信息占位符;「正文模板 × 5」改折叠区,布局交互全面优化 |
|
|
580
|
+
| **0.1.10** | 2026-08-29 | 推送标题改原生输入框;新增多语言 README(English/繁體/日本語/한국어) |
|
|
581
|
+
| **0.1.9** | 2026-08-29 | 推送标题按原因定制;投影升级为对象;重置保留语言;每原因加「发送」测试按钮 |
|
|
582
|
+
| **0.1.8** | 2026-08-29 | 默认标题「任务已完成」;默认文案按结束原因差异化;新增重置按钮 |
|
|
583
|
+
| **0.1.7** | 2026-08-29 | 修复设置卡片崩溃(通知权限行作用域问题) |
|
|
584
|
+
| **0.1.6** | 2026-08-29 | 新增通知权限状态区;权限改为用户手势内请求 |
|
|
585
|
+
| **0.1.5** | 2026-08-29 | 新增推送方式(双通道/仅系统/仅页内),解决 QQ 浏览器双提示 |
|
|
586
|
+
| **0.1.4** | 2026-08-28 | 完整卸载支持(dispose 生命周期收尾) |
|
|
587
|
+
| **0.1.3** | 2026-08-28 | 声明 dsh.bundle manifest;settings 重试定时器改 ctx.effect() |
|
|
588
|
+
| 0.1.2 | 2026-08-27 | 包更名至 `@telosmaylx` scope |
|
|
589
|
+
| 0.1.1 | 2026-08-27 | GitHub、npm 安装方式文档化 |
|
|
590
|
+
| 0.1.0 | 2026-08-26 | 初始版本:会话内系统消息 + 浏览器推送 + 官方设置面板 |
|
|
591
|
+
|
|
592
|
+
---
|
|
593
|
+
|
|
557
594
|
## 贡献
|
|
558
595
|
|
|
559
596
|
欢迎 Issue 与 PR:
|