@kirkchinese/dsh-citeciter 0.9.0-alpha.3 → 0.9.0-beta.2

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 (89) hide show
  1. package/README.md +68 -139
  2. package/README.zh.md +70 -141
  3. package/lib/client.js +4020 -1830
  4. package/lib/index.js +16928 -16567
  5. package/lib/{typert-common-BQpqe5Ph.js → typert-common-g1lnIG8u.js} +3 -5
  6. package/lib/typert.host.js +2 -2
  7. package/lib/typert.remote-client.js +1 -1
  8. package/lib/types/actions.d.ts +22 -14
  9. package/lib/types/blackboard-tool.d.ts +6 -0
  10. package/lib/types/blocking-question-recovery.d.ts +16 -0
  11. package/lib/types/board.d.ts +0 -15
  12. package/lib/types/client/action-controller.d.ts +9 -2
  13. package/lib/types/client/action-executor.d.ts +5 -1
  14. package/lib/types/client/board-citation.d.ts +8 -0
  15. package/lib/types/client/citer-session-face.d.ts +3 -2
  16. package/lib/types/client/companion-controller.d.ts +18 -9
  17. package/lib/types/client/components/{WheelSettings.d.ts → ActionSettings.d.ts} +2 -2
  18. package/lib/types/client/components/ActionWheel.d.ts +4 -4
  19. package/lib/types/client/components/CiteCiterSettings.d.ts +1 -1
  20. package/lib/types/client/components/CiteLauncher.d.ts +7 -2
  21. package/lib/types/client/components/CitePanel.d.ts +4 -1
  22. package/lib/types/client/components/CiterPet.d.ts +10 -0
  23. package/lib/types/client/components/DocumentReader.d.ts +2 -4
  24. package/lib/types/client/components/LearningRoute.d.ts +3 -4
  25. package/lib/types/client/components/ModelChoice.d.ts +7 -3
  26. package/lib/types/client/components/QuestionCard.d.ts +8 -4
  27. package/lib/types/client/components/QuestionReplyBody.d.ts +5 -0
  28. package/lib/types/client/components/ReferenceAttachments.d.ts +6 -2
  29. package/lib/types/client/components/SelectionToolbar.d.ts +19 -0
  30. package/lib/types/client/components/ToolMessage.d.ts +1 -1
  31. package/lib/types/client/components/TopicActions.d.ts +15 -4
  32. package/lib/types/client/components/TopicComposer.d.ts +2 -1
  33. package/lib/types/client/components/TopicHeader.d.ts +8 -3
  34. package/lib/types/client/components/TopicNavigation.d.ts +4 -4
  35. package/lib/types/client/components/TopicQuestions.d.ts +10 -0
  36. package/lib/types/client/components/TopicTitle.d.ts +6 -2
  37. package/lib/types/client/components/UserMessageBody.d.ts +4 -1
  38. package/lib/types/client/conversation-dom.d.ts +0 -7
  39. package/lib/types/client/draft-controller.d.ts +3 -6
  40. package/lib/types/client/draft-merge.d.ts +8 -0
  41. package/lib/types/client/draft-references.d.ts +6 -0
  42. package/lib/types/client/host-dock.d.ts +1 -1
  43. package/lib/types/client/host-icons.d.ts +2 -13
  44. package/lib/types/client/host-image-preview.d.ts +2 -1
  45. package/lib/types/client/host-source-chat.d.ts +11 -0
  46. package/lib/types/client/host-ui-adapter.d.ts +2 -2
  47. package/lib/types/client/native-composer.d.ts +15 -0
  48. package/lib/types/client/prompt.d.ts +4 -4
  49. package/lib/types/client/question-draft-controller.d.ts +50 -0
  50. package/lib/types/client/question-interaction.d.ts +33 -0
  51. package/lib/types/client/request-guard.d.ts +3 -13
  52. package/lib/types/client/selection-toolbar.d.ts +36 -0
  53. package/lib/types/client/tool-presentation.d.ts +14 -0
  54. package/lib/types/client/topic-presentation.d.ts +0 -7
  55. package/lib/types/client/topic-question-controller.d.ts +80 -0
  56. package/lib/types/client/types.d.ts +3 -4
  57. package/lib/types/client/wheel-gesture.d.ts +6 -1
  58. package/lib/types/document-access.d.ts +7 -2
  59. package/lib/types/host-agent-modules.d.ts +16 -6
  60. package/lib/types/host-session-adapter.d.ts +7 -4
  61. package/lib/types/host-settings-adapter.d.ts +5 -5
  62. package/lib/types/index.d.ts +8 -8
  63. package/lib/types/learning-cards-tool.d.ts +5 -0
  64. package/lib/types/learning.d.ts +0 -4
  65. package/lib/types/legacy-migration.d.ts +16 -0
  66. package/lib/types/observer.d.ts +0 -7
  67. package/lib/types/question-draft-contract.d.ts +55 -0
  68. package/lib/types/question-draft-lifecycle.d.ts +8 -0
  69. package/lib/types/question-draft-store.d.ts +38 -0
  70. package/lib/types/question-reply.d.ts +23 -0
  71. package/lib/types/source-read-tool.d.ts +3 -4
  72. package/lib/types/tool-approval-projection.d.ts +10 -0
  73. package/lib/types/tool-events.d.ts +2 -0
  74. package/lib/types/tool-outcome-contract.d.ts +3 -0
  75. package/lib/types/topic-deletion-receipts.d.ts +40 -0
  76. package/lib/types/topic-index.d.ts +26 -30
  77. package/lib/types/topic-log.d.ts +41 -0
  78. package/lib/types/topic-prompts.d.ts +8 -1
  79. package/lib/types/topic-question-bridge.d.ts +10 -0
  80. package/lib/types/topic-questions.d.ts +53 -0
  81. package/lib/types/topic-runtime.d.ts +21 -317
  82. package/lib/types/topic.d.ts +219 -177
  83. package/lib/types/typert-codec.d.ts +2 -4
  84. package/lib/types/typert-common.d.ts +251 -1138
  85. package/lib/types/typert.host.d.ts +525 -2584
  86. package/lib/types/update.d.ts +0 -7
  87. package/lib/{update-CRD1jFLf.js → update-B_0nN1_f.js} +215 -121
  88. package/package.json +68 -79
  89. package/lib/types/client/components/TopicSettingsDialog.d.ts +0 -21
package/README.md CHANGED
@@ -1,191 +1,120 @@
1
1
  # CiteCiter
2
2
 
3
- [简体中文](README.zh.md) · [npm](https://www.npmjs.com/package/@kirkchinese/dsh-citeciter) · [Issues](https://github.com/kirkchinese/CiteCiter/issues)
3
+ [简体中文](README.zh.md) · [npm](https://www.npmjs.com/package/@kirkchinese/dsh-citeciter) · [Changelog](https://github.com/kirkchinese/CiteCiter/blob/v0.9.0-beta.2/CHANGELOG.md) · [Issues](https://github.com/kirkchinese/CiteCiter/issues)
4
4
 
5
- > **0.8.0 is deprecated.** On Linux, starting DSH through a symlink can prevent Topic creation or restoration with a missing `@deepseek-ai/dsh-agent-loop` error. For DSH 0.1.5-rc.1 / Desktop 2.0.9, upgrade to [0.8.2](https://github.com/kirkchinese/CiteCiter/releases/tag/v0.8.2). For DSH 0.1.7, read the compatibility notice below first.
5
+ ![CiteCiter](https://raw.githubusercontent.com/kirkchinese/CiteCiter/v0.9.0-beta.2/assets/hero/citeciter-hero.png)
6
6
 
7
- CiteCiter adds a source-aware workspace to DeepSeek Harness. Create independent Topics from conversations, tool results and documents for text, programming, image and learning tasks. New Topics use native DSH Sessions, permissions, models, attachments and message queues. The source conversation continues independently.
7
+ **The AI finished the task. I still want to understand how it did it.**
8
8
 
9
- [![CiteCiter demonstration: learn while working](https://raw.githubusercontent.com/kirkchinese/CiteCiter/feat/dsh-latest-usability/assets/docs/video-cover.png)](https://www.bilibili.com/video/BV1tqeA65EJ8/)
9
+ CiteCiter is a [DeepSeek Harness (DSH)](https://github.com/deepseek-ai/deepseek-harness) plugin that helps you learn from your agent's real work. Select part of a conversation, a tool result or a document, ask about it in a separate Topic that keeps its source, use a blackboard to see how the pieces relate, then return to your work. The main conversation is never modified.
10
10
 
11
- [Watch on Bilibili](https://www.bilibili.com/video/BV1tqeA65EJ8/). The video shows a released version; this branch's wheel routing and alpha migration are described below.
11
+ [![CiteCiter demo](https://raw.githubusercontent.com/kirkchinese/CiteCiter/v0.9.0-beta.2/assets/docs/video-cover.png)](https://www.bilibili.com/video/BV1tqeA65EJ8/)
12
12
 
13
- ![Native Citer workspace and manual submission diagram](https://raw.githubusercontent.com/kirkchinese/CiteCiter/feat/dsh-latest-usability/assets/docs/native-workspace.svg)
13
+ [Watch the demo on Bilibili](https://www.bilibili.com/video/BV1tqeA65EJ8/) (recorded with an earlier version; the interface has changed slightly).
14
14
 
15
- This is a 0.8 workspace diagram, not a screenshot, with the optional learning route explicitly enabled. This branch routes references as follows; model work still starts only after manual submission.
15
+ ## Installation
16
16
 
17
- ```mermaid
18
- flowchart LR
19
- S[Actual selection] --> W[Wheel action]
20
- W --> F[Free question]
21
- W --> N[Other built-ins]
22
- W --> C[Custom destination]
23
- F --> A{Unarchived same-source Topic selected?}
24
- A -->|Yes| D[Append to existing draft]
25
- A -->|No| T[Create Topic draft]
26
- N --> T
27
- C --> D
28
- C --> T
29
- D --> E[Edit references, question and model]
30
- T --> E
31
- E --> M[Manual send]
32
- ```
33
-
34
- ## Version and installation
17
+ CiteCiter needs DSH and a working model. The plugin declares exact host versions, so choose the CiteCiter release that matches your DSH:
35
18
 
36
- This is **0.9.0-alpha.3, the default prerelease on npm latest / next**, targeting Web DSH `0.1.7-rc.2` and the same DSH bundled with [DSH Desktop 2.0.15](https://github.com/anywhere-labs/dsh-desktop/releases/tag/v2.0.15). Separate Host/Client compile checks against DSH `0.1.5-rc.2` remain; they do not establish functional acceptance of the latest Desktop. The older **0.8.2** package remains available only for DSH `0.1.5-rc.1` / Desktop `2.0.9`. Node.js must satisfy `^22.19.0 || >=24.0.0`. Linux acceptance is excluded from this round.
19
+ | DSH version | CiteCiter version |
20
+ | --- | --- |
21
+ | `0.2.0-rc.2` (including the official Desktop), `0.2.1-alpha.1`, `0.2.1-alpha.2` | `0.9.0-beta.2` |
22
+ | `0.1.7-rc.2` | `0.9.0-alpha.3` |
23
+ | `0.1.5-rc.1` | `0.8.2` |
24
+ | `0.1.2-rc.1` | `0.6.0` |
37
25
 
38
- **Do not use 0.8.2 with DSH 0.1.7.** Its exact peer ranges fail the compatibility gate; forcing installation then fails Typert activation because `create()` factories are missing. See [Issue #9](https://github.com/kirkchinese/CiteCiter/issues/9). This release supports the RC2 gate and Host/Remote factories without `allow-version`. Install this prerelease instead of forcing the old package through a compatibility exemption.
26
+ **Official Desktop:** install the npm package `@kirkchinese/dsh-citeciter` from the Plugins page, or enter `https://github.com/kirkchinese/CiteCiter.git` in its Git field, then restart when prompted.
39
27
 
40
- | Version | Status | Main differences |
41
- | --- | --- | --- |
42
- | 0.9.0-alpha.3 | Default prerelease; npm latest / next | Preserve IME composition; save drafts silently in the background |
43
- | 0.9.0-alpha.2 | Earlier prerelease | Prerelease-aware update checks; affected by the input regression, upgrade to alpha.3 |
44
- | 0.9.0-alpha.1 | Earlier prerelease | Dual-host adapters, durable drafts, PTC tool display, reference routing and learning-route policy |
45
- | 0.8.2 | Older hosts | Explicit source horizons and continuation; native first-answer question suggestions |
46
- | 0.8.1 | Published | Fix Topic startup through Linux/macOS launcher symlinks |
47
- | 0.8.0 | Deprecated; upgrade to 0.8.2 | Linux launcher symlinks can prevent Topics from opening |
48
- | 0.7.0-beta.3 | Previous development candidate | Private read-only Topics, selection wheel, manual five-stage learning |
49
- | 0.6.0 | Published | DSH 0.1.2-rc.1 / Desktop 2.0.5 baseline |
28
+ **CLI and Web:**
50
29
 
51
- For DSH 0.1.7, install this prerelease:
52
-
53
- ```powershell
54
- npm install -g @deepseek-ai/dsh@0.1.7-rc.2
55
- dsh plugin --profile web add @kirkchinese/dsh-citeciter@0.9.0-alpha.3
56
- dsh web
30
+ ```sh
31
+ dsh plugin --profile web add @kirkchinese/dsh-citeciter@0.9.0-beta.2
57
32
  ```
58
33
 
59
- Both `latest` and `next` select 0.9.0-alpha.3; it remains a prerelease. For DSH 0.1.5-rc.1 / Desktop 2.0.9, explicitly install 0.8.2. Older built-in update checks may reject prerelease versions; use the installation command above to upgrade. For DSH 0.1.2-rc.1 / Desktop 2.0.5, keep using @kirkchinese/dsh-citeciter@0.6.0. If npm blocks native dependency installation scripts, follow its output to allow the named dependencies and reinstall. Do not disable script restrictions globally.
60
-
61
- In 0.8.0, launching DSH through a Linux/macOS symlink can prevent Topics from opening with a missing dsh-agent-loop error. Version 0.8.1 resolves the real CLI entry before loading host modules and retains Desktop's app.asar anchor. Native Linux Node regression passed; macOS has not been tested.
34
+ You can also install a release tag straight from the repository, which contains the built plugin, so nothing is built at install time:
62
35
 
63
- Build and install this branch locally:
64
-
65
- ```powershell
66
- npm install -g @deepseek-ai/dsh@0.1.7-rc.2
67
- pnpm install --frozen-lockfile
68
- pnpm typecheck
69
- pnpm typecheck:desktop
70
- pnpm build
71
- pnpm --dir packages/citeciter pack --pack-destination E:/project/CiteCiter/.refs/artifacts
72
- dsh plugin --profile web add E:/project/CiteCiter/.refs/artifacts/kirkchinese-dsh-citeciter-0.9.0-alpha.3.tgz
36
+ ```sh
37
+ dsh plugin --profile web add "git+https://github.com/kirkchinese/CiteCiter.git#v0.9.0-beta.2"
73
38
  ```
74
39
 
75
- Desktop bundles its own DSH. Version 0.8.2 retains the accepted Desktop 2.0.9 baseline. This release targets Desktop 2.0.15: run `dsh plugin add @kirkchinese/dsh-citeciter@0.9.0-alpha.3` in its managed terminal. Updating the global CLI does not update Desktop's embedded runtime. Restart the relevant host after installation. Do not run Web and Desktop writers against the same DSH home simultaneously.
76
-
77
- Known host limitation: Windows read-only PowerShell can reject the host encoding initialization under ConstrainedLanguage, and some Chinese output can be garbled. Citer retains the original errors without raising permissions or hiding output; DSH must fix the executor. This prerelease makes no native acceptance claim for Linux/macOS or the separate Desktop NEXT shell.
78
-
79
- ## Source reading and suggested questions
80
-
81
- `read_source_session` returns byte-bounded pages. `sourceMaxSeq` is the readable snapshot horizon; the legacy `availableThroughSeq` is request-bounded and does not indicate source exhaustion. When `hasMore` is true, pass `nextFromSeq` as the next `fromSeq` and omit `throughSeq`. `truncated` only marks a byte-budget stop within the range. Empty pages, filtered events and oversized placeholders do not prove missing evidence. Observer reads currently committed events; Exact Fork reads only the inherited prefix.
82
-
83
- Native Topics offer three suggested questions after the first answer by default; disable them in CiteCiter settings. The prompt omits suggestions when the current request excludes them, asks for only a result, or imposes a strict format or length limit. Clicking a question only fills the draft and still requires manual submission. Source instructions and question suggestions are separate prompt modules; source contents remain gated by submitted attachments.
84
-
85
- ## Drafts and references
86
-
87
- Edits appear immediately and IME composition retains its selection until confirmed. Drafts save in the background without a saving indicator. Save failures, attachment recovery failures and multi-window conflicts remain visible. Alpha.3 fixes the composition regression in 0.9.0-alpha.1 / alpha.2.
88
-
89
- 1. Select text in the source conversation, hold the right mouse button, point at a wheel action and release. Tool results, the document reader and native file previews provide additional entry points.
90
- 2. Free question adds the selection to the selected unarchived Topic; it creates a Topic when none is selected or the selected Topic is archived. Other built-in actions create Topics by default, and custom actions choose their destination. Append only within the current source, retaining the draft, model and permissions. Source addresses and excerpts are removable attachments. The plus button selects actual files or images; it does not manufacture references.
91
- 3. Review the question, references, permissions and model, then click Send or press Enter. Shift + Enter inserts a newline; Enter during IME composition does not submit.
92
-
93
- Creating Topics, choosing wheel actions, changing models and quoting boards do not call a model. Wheel actions go directly to the Citer composer, where the user edits the question, references and model before sending. Custom actions targeting an existing Topic append their prompt after the current draft. Submitted prompts and references are recorded in the Topic's native log.
94
-
95
- Removing an unsent source attachment makes its reading tool reject access; new Topics do not silently inherit source history. Previously sent references remain in conversation history: removing a later draft copy does not retract them. Draft text, actual references and attachment bytes are stored in the owning Topic's `draft/` directory and restored after panel close, Topic switches, reload and restart. Restoration never sends a message. Model, reasoning and permission choices continue to use host-persisted state. Background polling in another window does not replace the last-used Topic; navigation restoration follows explicit actions.
96
-
97
- Drafts do not enter model logs or grant source access. Only host-confirmed submission contents are cleared; edits made during submission survive. Rejected sends retain the draft. Lost responses display a pending state for explicit reconciliation or retry. Concurrent save conflicts preserve local input and ask which version to keep. Choosing the local draft restores attachment bytes still held by this window if another window removed them. Missing or damaged attachments surface errors. Permanent Topic deletion includes its draft. Older Desktop refuses writes to newer session formats; continue in the newer Web host instead of manually downgrading logs.
40
+ Restart DSH and refresh the page after installing or upgrading. Do not use `dsh plugin allow-version` to force a plugin that does not match your host version. Do not run two host processes on the same DSH home.
98
41
 
99
- ## Permissions, input and queue
42
+ ## Start from one question
100
43
 
101
- Model menus support arrow keys, Home/End and Enter. Submenu changes keep focus inside the menu; the model button retains focus and blocks repeated actions while saving.
44
+ Say your agent changed some code and you wonder: "Why does this async save affect typing?"
102
45
 
103
- New Topics start **read-only**, even when their source has full access. The input's permission menu selects native DSH read-only, workspace-write or full-access mode. Modification requires an explicit user mode choice or changed new-Topic default. DSH approval, sandbox and tool policies remain active.
46
+ 1. Select the relevant text in the conversation, a tool result or a document; the Citer toolbar appears next to it.
47
+ 2. Click 解释 (explain) to get an explanation right away, or 提问 (ask) to put the source and the excerpt into the composer as removable attachments, write your own question and send it.
48
+ 3. Keep asking about the material; when it helps, have the model draw the flow on the blackboard or summarize learning cards.
49
+ 4. Go back to the task and check your understanding against the code, a tool result or a small experiment.
104
50
 
105
- Input controls are attachments, permission mode, model/reasoning and Send. Choose the model first, then one of its supported reasoning levels. Images and generic files use native DSH attachment services, with upload state and retry. Select files from the attachment menu, paste images into the input, or drop files onto the Citer panel. The drop invitation names the receiving Topic; release adds attachments only to that Topic. Drops are unavailable without a current Topic, and files dropped into Citer are not copied into the source draft. Mixed image and text paste retains both. Sent files show a download icon and filename; click to save the original attachment. Click a historical image to preview it inside the host. Escape, the backdrop or the close button dismisses the preview and restores focus to the image. User messages omit the role label. Host rejection shows its cause and retains the draft; an accepted message is cleared even if the subsequent status read fails.
51
+ Creating a Topic or choosing 提问 only prepares a draft; preset actions such as 解释 and 翻译 send when you choose them, or only fill the composer if you change that in Settings. Explanations and boards can still be wrong; they help you understand and check, not replace evidence.
106
52
 
107
- While a reply runs, Enter and Send follow DSH's busy-send preference; Ctrl + Enter temporarily uses the other delivery mode. Queued messages run after the current turn; steering is admitted at its next step. The composer toggle overrides the current Topic without changing the host default. Pending rows can be removed or changed to steering. Stop ends the response and preserves existing output; pending work follows DSH's queue rules.
53
+ ## Features
108
54
 
109
- New Topics use standard programming tools under DSH permissions. Existing records retain their conversation and permissions when migrated into the source directory. Migration verifies every event; records that cannot be verified stay in their original store with an error report. Permissions are not expanded automatically.
55
+ | You want to | CiteCiter provides |
56
+ | --- | --- |
57
+ | Understand an answer, code or tool result | A separate Topic with a source citation; follow-ups never touch the main conversation |
58
+ | See relationships and processes | A blackboard with Markdown, formulas, tables, SVG, images and sandboxed HTML; vision models can inspect the rendered board and fix it |
59
+ | Keep what you learned | Learning cards you can export and revise, with prose and code examples shown separately |
60
+ | Discuss real files | File and image attachments, a `.txt` / `.md` document reader, and a "CiteCiter 学习" entry in native file previews |
61
+ | Act on what you understood | DSH models, tools, approvals, permissions, queueing and steering; new Topics are read-only by default |
62
+ | Pick up where you left off | Drafts (text, references, attachments) and unsubmitted question answers are saved and restored after switching, refreshing or restarting, never sent automatically |
110
63
 
111
- DSH tool approvals, clarification questions and plan confirmations appear in their owning Topic, with decisions handled by the native host interaction service. Approval cards retain the tool name, reason and related parameters for inspection.
64
+ ## Using CiteCiter
112
65
 
113
- Model-provided reasoning appears in an expandable Thinking row. While reasoning is streaming before the answer, the row shows Thinking in progress. Collapsed rows retain a one-line preview; expanding displays the full Markdown. Models that return no reasoning do not produce an empty row.
66
+ **Toolbar and actions.** After you select text, a toolbar appears next to it: the first four actions are shown directly, and the rest plus 在新 Topic 中提问 (ask in a new Topic) are under "⋯". Actions go to the open Topic by default, or create one when there is none or it is archived. 提问 opens the composer for your own question; preset actions such as 解释, 找错误 and 翻译 send directly without touching an existing draft. Action names, prompts and order are configurable in Settings. If you prefer gestures, turn on the wheel in Settings: hold the right mouse button (or the chosen key) after selecting text, move to an action and release.
114
67
 
115
- After the host accepts a manual submission, the transcript follows the latest message. Model output alone preserves the user's position while reading earlier messages.
68
+ **Desktop pet.** While Citer is closed, its mascot peeks over the window edge; she stands up when the pointer comes near, and a click opens Citer. Drag her to either side at any height and the place is remembered. A small dot appears next to her when an answer finishes or a question waits for you while Citer is closed.
116
69
 
117
- ## Learning, boards and images
70
+ **Composer.** The composer offers attachments, permission mode, model and reasoning effort, and Send. Enter sends, Shift + Enter adds a line, and Enter never sends during IME composition. While a reply is generating, Enter follows DSH's queue/steer preference and Ctrl + Enter uses the other one. Add files from the attachment menu, paste images, or drop files onto the Citer panel.
118
71
 
119
- Learning route is off by default. While off, the current prompt prevents old messages or todo items from reviving a teaching route; a single explanation or board request does not enable it. Ordinary coding plans remain available. When enabled, a submitted question asks the model to select and maintain a plan through DSH `todo_write`, using underlying logic, qualitative analysis, quantitative board work, concept connections and summary cards as needed. The user's scope, length, tool constraints and card count take precedence; the route does not expand the request into one task per stage.
72
+ **Drafts.** Drafts save silently in the background. Edits to the same Topic from several windows merge automatically; where they overlap, the window you are typing in wins. After a successful send, only what was sent is cleared, and anything written meanwhile is kept.
120
73
 
121
- The board appears once, in the host conversation's blackboard tab. It supports text, Markdown, math, tables, SVG, images and isolated HTML. Quoting adds a draft attachment; math renders as math rather than raw object fields. Read, export and revise cards in Citer's Cards view. Examples explicitly use text or code: text renders as Markdown; code uses the native code block with its language, line breaks, indentation and copy button. Exports include code fences, and older cards remain readable.
74
+ **Learning route and cards.** The learning route is off by default and can be turned on in the Topic menu (⋯); when on, the model plans its explanation with DSH todos. You can ask for learning cards at any time; the model checks conclusions, conditions and calculations first, but self-checking does not guarantee correctness. Active recall is off by default; when on, cards show their self-test question first.
122
75
 
123
- `blackboard_view` returns a browser-rendered PNG to an image-capable model, allowing it to inspect clipping, labels, arrows and layout before updating the board. The image contains only the board, not the conversation or window layout. A separate capture worker renders the requested Topic and board revision offscreen at 1000×680 when another Topic is selected, the Citer panel is closed, or a narrow layout hides the board. Keep the DSH Web or Desktop page connected. SVG colors are preserved; Markdown code uses backgrounds suited to the dark board. Sandboxed HTML iframes cannot be captured; use SVG for inspectable diagrams.
76
+ **Codex Connect.** CiteCiter is adapted to the community plugin [Codex Connect](https://github.com/franksong2702/dsh-codex-connect) (`dsh-codex-connect`). With it installed and enabled in the same profile, Topics can use its ChatGPT / Codex models and GPT Image tools, and generated images appear under the tool card. Its image tools are enabled separately in Codex Connect's settings; see its documentation for installation, sign-in and supported DSH versions.
124
77
 
125
- Compatible host plugins can provide `codex_connect_image_generate` and `view_image` to Topics. Citer does not manage their accounts. The current upstream [dsh-codex-connect](https://github.com/franksong2702/dsh-codex-connect) `0.1.0-alpha.4.52` supports DSH RC1/RC2 without local patches or version exceptions. Image capabilities are off by default: open Settings → Built-in plugins → Codex Connect → Capabilities, enable GPT Image generation, and save. Web and Desktop have separate profiles; configure each profile separately. Installation alone does not enable the tools. `view_image` has its own Enable view_image tool switch; enabling image generation does not enable it. Generation, uploaded-image editing and display are tracked in the [current acceptance record](https://github.com/kirkchinese/CiteCiter/blob/feat/dsh-latest-usability/docs/validation/2026-09-27-connect-450.md); previous versions do not establish current acceptance.
78
+ ## Permissions and data
126
79
 
127
- Before saving cards, the model is instructed to check definitions, conditions, derivations, numbers and contradictions, then correct or mark unverified claims. Self-review does not ensure factual accuracy; acceptance found and corrected a model error. See the [validation record](https://github.com/kirkchinese/CiteCiter/blob/feat/dsh-latest-usability/docs/validation/2026-09-12-native-real-model.md). Active recall is optional and off by default. There is no spaced repetition, reminder or streak system.
80
+ New Topics are **read-only** by default, even when the source session has more permissions. A Topic can change the workspace only after you choose another permission mode in the composer or change the default for new Topics in Settings; DSH approvals and sandboxing still apply.
128
81
 
129
- ## Topics and layout
82
+ Topics appear only in the Citer list, never in DSH's session list. A new Topic starts with the excerpt or question as its title, and DSH's title service summarizes it on the first answer; rename it by double-clicking the title, pressing F2 or using the Topic menu, after which the title no longer changes on its own; an archived Topic returns to the list when you send to it again. Permanent deletion asks for the full Session ID and removes only that Topic's records, drafts and attachments.
130
83
 
131
- The list icon opens searchable Topics for the current source; + creates a blank Topic. Double-click the title or press F2 to rename; Enter/blur saves and Escape cancels. Archive hides a Topic while preserving its records, and the archive list restores it. Submitting a new message in an archived Topic returns it to the active list after host admission; rejected submissions preserve the archive state and draft. Permanent deletion requires the full Session ID and removes only Citer-owned Topic files after releasing its runtime. Symlinks and paths outside the owned directory are rejected. Source Sessions are never deleted.
132
-
133
- Wide windows keep source and Citer side by side, with a resizable divider. Drag the title area away to float; release at the right window edge to dock. Opening native file details temporarily hides Citer when both panes cannot fit. Closing details restores the same Topic, draft and model. Explicitly selecting Citer or a file-selection action opens the compact Citer page; its top-left Back button restores the prior view. Without details, narrow screens use this page directly rather than placing Citer below the source. Closing restores host space and preserves Desktop captions.
134
-
135
- Surfaces use translucent backgrounds, blur and short transitions, respecting host themes and reduced-motion settings. A dedicated adapter owns layout changes; unknown host structures do not receive an intrusive full-screen fallback.
136
-
137
- ## Storage and migration
138
-
139
- Topics appear only in Citer navigation. DSH does not recursively discover nested Topic logs. Citer owns live membership and navigation; native send services can address a loaded Topic by identity.
84
+ CiteCiter stores its data in each source session's directory:
140
85
 
141
86
  ```text
142
87
  .dsh/sessions/<workspace>/<sourceSession>/
143
- ├── session.v4.jsonl[.zstd] DSH-owned source
88
+ ├── session.v4.jsonl[.zstd] main session managed by DSH (never modified by Citer)
144
89
  └── citeciter/
145
- ├── owner.json Verified source ownership
90
+ ├── owner.json directory ownership
146
91
  ├── <topicNumber>/
147
- │ ├── topic.json Title, archive state, model and source
148
- │ ├── draft/ Unsent text, references and attachment bytes
149
- │ └── sessions/<workspace>/<citerSession>/session.v4.jsonl
150
- └── migration-backups/ Verified original copies
92
+ │ ├── topic.json Topic information
93
+ │ ├── draft/ unsent text, references and attachments
94
+ │ ├── question-drafts/ unsubmitted question answers
95
+ │ └── sessions/ the Topic's own session log
96
+ └── deleted/ deletion records (identity only, no content)
151
97
  ```
152
98
 
153
- Citer owns creation, archive, restore and deletion. Archiving preserves the full log. Deletion leaves other Topics, the source and migration backups intact. Migration reads and writes through public DSH persistence APIs, compares the header and every event before switching the index, and retains originals. Moving verified old copies out of the main list requires an explicitly confirmed scope.
154
-
155
- Alpha uses v4 logs. DSH reads and migrates older v3 logs; Citer does not rewrite event sequences or `seedLength`. Sources with historical logs remain addressable through their physical source directory.
156
-
157
- ## Documents and native preview
158
-
159
- While Citer is open, use the top-right … → Document reading action. The standalone reader launcher remains available when Citer is closed and no longer covers its composer.
160
-
161
- Click 📖 to import `.txt`, `.md` or `.markdown`. The reader preserves the full document, displays at most 500 KiB of UTF-8 text per page and accepts up to 2,000,000 characters. Paging clears the previous selection but keeps the question. Preparing a draft collapses the reader. The document address and excerpt are separate removable attachments.
162
-
163
- Document tools return the full UTF-16 length and actual read range. Search results expose the valid endpoint; reads distinguish the requested cap, returned endpoint and remaining content. Continue with nextFromOffset and omit throughOffset when the end is unknown. Invalid ranges report explicit bounds instead of silently clamping them.
164
-
165
- When the optional documentPreviews service is present, select “CiteCiter 学习” in native file preview. The host reads the file; Citer provides selectable source text, pagination and references. Creating a Topic stores a complete snapshot, unaffected by later file changes. Each snapshot is limited to 8 MiB / 2,000,000 characters and requires a source Session address.
166
-
167
- This branch compiles against public subpackage types `0.1.7-rc.2`; the preview service remains optional. Without it, conversation actions and the independent reader remain usable. The learning viewer does not provide PDF text extraction, Word parsing or OCR. Selections from different documents can join one Topic; reads identify documents by their submitted attachment addresses.
168
-
169
- ## Wheel settings
170
-
171
- Configure the trigger, default model and eight slots in Settings → CiteCiter. Defaults are Ask, Explain, Find errors, Translate, Quantitative board, Summary cards and two empty slots. Each slot has a prompt, input hint, draft destination, content mode and default placement. Save slot edits explicitly.
172
-
173
- A short right-click leaves a clickable wheel; Shift + right-click preserves the native menu. Arrow keys, digits 1–8 and Enter select actions. Center, empty slots, outside release, Escape, source changes or wheel blur cancel. There is no preliminary question dialog; the Citer composer owns the draft.
99
+ Topics created before 0.8 are migrated into this layout at startup; their original logs are kept.
174
100
 
175
- ## Sibling project
101
+ ## Known issues
176
102
 
177
- CiteCiter and [Claude2DSH](https://github.com/kirkchinese/claude2dsh), by the same author, serve one workflow: moving knowledge between agent tools and then reusing it.
103
+ - On Windows, PowerShell in read-only mode may report a language-mode error or print garbled Chinese. This is a limitation of the DSH executor inside the read-only sandbox; CiteCiter does not loosen permissions to work around it.
104
+ - After the official Desktop restarts, other browser tabs still connected to the old backend may go blank; refreshing restores them. This also happens with CiteCiter disabled.
105
+ - Using different DSH versions one after another at the same browser address can leave the host's own draft data in an incompatible format so the main conversation does not render; use a different address or port per version.
106
+ - The plugin is mainly tested on Windows; Linux and macOS have not been systematically tested, and reports are welcome.
178
107
 
179
- - **Claude2DSH** — migrates Claude Code conversations, skills, subagents, slash commands, memory and MCP servers into DeepSeek Harness as native resumable sessions and assets, and exports back. It brings the past context in; CiteCiter keeps what you conclude from it traceable.
108
+ ## Why CiteCiter
180
109
 
181
- Both follow the same rules: public extension points only, nothing written into a foreign tool's directory without explicit authorization, and a real-profile acceptance run before every release. If you are reorganizing past sessions, importing first makes citing them much easier.
110
+ Practice usually produces two things: a result and a skill. We form judgment by trying, making mistakes, comparing approaches and verifying. AI can take over more and more of the execution, but it does not automatically hand the matching understanding to its user, so finishing a task and growing as a person can come apart.
182
111
 
183
- ## Development and acceptance
112
+ CiteCiter turns real AI work into material you can cite, question and check. Start from the question in front of you, understand the principle, look at the evidence, and continue with a better understanding. Even when an agent does the work, people still need to set goals, understand the key conditions, judge whether a result applies, and take over when something goes wrong.
184
113
 
185
- [Contributing](https://github.com/kirkchinese/CiteCiter/blob/feat/dsh-latest-usability/CONTRIBUTING.md) · [Alpha changes](https://github.com/kirkchinese/CiteCiter/blob/feat/dsh-latest-usability/docs/releases/v0.9.0-alpha.3.md) · [Current acceptance status](https://github.com/kirkchinese/CiteCiter/blob/feat/dsh-latest-usability/docs/validation/2026-09-27-connect-450.md) · [0.8.2 fix notes](https://github.com/kirkchinese/CiteCiter/blob/feat/dsh-latest-usability/docs/releases/v0.8.2.md)
114
+ ## Feedback
186
115
 
187
- Host and Client compile separately. Native session adaptation, source reading, index storage, attachments, queue, board capture, learning plans and UI controls are separate modules. The DSH Agent Loop is unchanged. The full host input component has no supported cross-session embedding interface; Citer reuses public ConversationController / SessionFace behavior and does not automatically inherit every third-party composer extension.
116
+ Bring a task where "the agent finished, but I still can't explain it" to the [issue tracker](https://github.com/kirkchinese/CiteCiter/issues). Include your DSH and plugin versions and whether you got stuck installing, citing and asking, or understanding the answer. Remove keys and private content before pasting material.
188
117
 
189
- Artificial model providers, test directories and temporary acceptance scripts have been removed from the current branch, with Git history preserved. CI checks dependencies, types, build and packaging. Functional acceptance uses real models, real source branches and actual UI; the validation record states coverage and unfinished work.
118
+ See [CONTRIBUTING.md](https://github.com/kirkchinese/CiteCiter/blob/v0.9.0-beta.2/CONTRIBUTING.md) for development and [docs/product.zh.md](https://github.com/kirkchinese/CiteCiter/blob/v0.9.0-beta.2/docs/product.zh.md) (Chinese) for the product rules. [Claude2DSH](https://github.com/kirkchinese/claude2dsh), by the same author, migrates sessions and assets between Claude Code and DSH.
190
119
 
191
120
  MIT License.