@researai/deepscientist 1.5.15 → 1.5.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.md +385 -104
- package/bin/ds.js +1241 -110
- package/docs/en/00_QUICK_START.md +100 -19
- package/docs/en/01_SETTINGS_REFERENCE.md +34 -1
- package/docs/en/02_START_RESEARCH_GUIDE.md +7 -0
- package/docs/en/05_TUI_GUIDE.md +6 -0
- package/docs/en/06_RUNTIME_AND_CANVAS.md +4 -3
- package/docs/en/09_DOCTOR.md +25 -8
- package/docs/en/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +63 -13
- package/docs/en/15_CODEX_PROVIDER_SETUP.md +37 -11
- package/docs/en/19_EXTERNAL_CONTROLLER_GUIDE.md +226 -0
- package/docs/en/19_LOCAL_BROWSER_AUTH.md +70 -0
- package/docs/en/20_WORKSPACE_MODES_GUIDE.md +250 -0
- package/docs/en/21_LOCAL_MODEL_BACKENDS_GUIDE.md +283 -0
- package/docs/en/91_DEVELOPMENT.md +237 -0
- package/docs/en/README.md +24 -2
- package/docs/zh/00_QUICK_START.md +89 -19
- package/docs/zh/01_SETTINGS_REFERENCE.md +34 -1
- package/docs/zh/02_START_RESEARCH_GUIDE.md +7 -0
- package/docs/zh/05_TUI_GUIDE.md +6 -0
- package/docs/zh/09_DOCTOR.md +26 -9
- package/docs/zh/14_PROMPT_SKILLS_AND_MCP_GUIDE.md +63 -13
- package/docs/zh/15_CODEX_PROVIDER_SETUP.md +37 -11
- package/docs/zh/19_EXTERNAL_CONTROLLER_GUIDE.md +226 -0
- package/docs/zh/19_LOCAL_BROWSER_AUTH.md +68 -0
- package/docs/zh/20_WORKSPACE_MODES_GUIDE.md +251 -0
- package/docs/zh/21_LOCAL_MODEL_BACKENDS_GUIDE.md +281 -0
- package/docs/zh/README.md +24 -2
- package/install.sh +46 -4
- package/package.json +2 -1
- package/pyproject.toml +1 -1
- package/src/deepscientist/__init__.py +1 -1
- package/src/deepscientist/acp/envelope.py +6 -0
- package/src/deepscientist/artifact/service.py +647 -22
- package/src/deepscientist/bash_exec/service.py +234 -9
- package/src/deepscientist/bridges/connectors.py +8 -2
- package/src/deepscientist/cli.py +115 -19
- package/src/deepscientist/codex_cli_compat.py +367 -22
- package/src/deepscientist/config/models.py +2 -1
- package/src/deepscientist/config/service.py +183 -13
- package/src/deepscientist/daemon/api/handlers.py +255 -31
- package/src/deepscientist/daemon/api/router.py +9 -0
- package/src/deepscientist/daemon/app.py +1146 -105
- package/src/deepscientist/diagnostics/__init__.py +6 -0
- package/src/deepscientist/diagnostics/runner_failures.py +130 -0
- package/src/deepscientist/doctor.py +207 -3
- package/src/deepscientist/gitops/__init__.py +10 -1
- package/src/deepscientist/gitops/diff.py +129 -0
- package/src/deepscientist/gitops/service.py +4 -1
- package/src/deepscientist/mcp/server.py +39 -0
- package/src/deepscientist/prompts/builder.py +275 -34
- package/src/deepscientist/quest/layout.py +15 -2
- package/src/deepscientist/quest/service.py +707 -55
- package/src/deepscientist/quest/stage_views.py +6 -1
- package/src/deepscientist/runners/codex.py +143 -43
- package/src/deepscientist/shared.py +19 -0
- package/src/deepscientist/skills/__init__.py +2 -2
- package/src/deepscientist/skills/installer.py +196 -5
- package/src/deepscientist/skills/registry.py +66 -0
- package/src/prompts/connectors/qq.md +18 -8
- package/src/prompts/connectors/weixin.md +16 -6
- package/src/prompts/contracts/shared_interaction.md +14 -2
- package/src/prompts/system.md +23 -5
- package/src/prompts/system_copilot.md +56 -0
- package/src/skills/analysis-campaign/SKILL.md +1 -0
- package/src/skills/baseline/SKILL.md +8 -0
- package/src/skills/decision/SKILL.md +8 -0
- package/src/skills/experiment/SKILL.md +8 -0
- package/src/skills/figure-polish/SKILL.md +1 -0
- package/src/skills/finalize/SKILL.md +1 -0
- package/src/skills/idea/SKILL.md +1 -0
- package/src/skills/intake-audit/SKILL.md +8 -0
- package/src/skills/mentor/SKILL.md +217 -0
- package/src/skills/mentor/references/correction-rules.md +210 -0
- package/src/skills/mentor/references/knowledge-profile.md +91 -0
- package/src/skills/mentor/references/persona-profile.md +138 -0
- package/src/skills/mentor/references/taste-profile.md +128 -0
- package/src/skills/mentor/references/thought-style-profile.md +138 -0
- package/src/skills/mentor/references/work-profile.md +289 -0
- package/src/skills/mentor/references/workflow-profile.md +240 -0
- package/src/skills/optimize/SKILL.md +1 -0
- package/src/skills/rebuttal/SKILL.md +1 -0
- package/src/skills/review/SKILL.md +1 -0
- package/src/skills/scout/SKILL.md +8 -0
- package/src/skills/write/SKILL.md +1 -0
- package/src/tui/dist/app/AppContainer.js +19 -11
- package/src/tui/dist/index.js +4 -1
- package/src/tui/dist/lib/api.js +33 -3
- package/src/tui/package.json +1 -1
- package/src/ui/dist/assets/AiManusChatView-Bv-Z8YpU.js +204 -0
- package/src/ui/dist/assets/AnalysisPlugin-BCKAfjba.js +1 -0
- package/src/ui/dist/assets/CliPlugin-BCKcpc35.js +109 -0
- package/src/ui/dist/assets/CodeEditorPlugin-DbOfSJ8K.js +2 -0
- package/src/ui/dist/assets/CodeViewerPlugin-CbaFRrUU.js +270 -0
- package/src/ui/dist/assets/DocViewerPlugin-DAjLVeQD.js +7 -0
- package/src/ui/dist/assets/GitCommitViewerPlugin-CIUqbUDO.js +1 -0
- package/src/ui/dist/assets/GitDiffViewerPlugin-CQACjoAA.js +6 -0
- package/src/ui/dist/assets/GitSnapshotViewer-0r4nLPke.js +30 -0
- package/src/ui/dist/assets/ImageViewerPlugin-nBOmI2v_.js +26 -0
- package/src/ui/dist/assets/LabCopilotPanel-BHxOxF4z.js +14 -0
- package/src/ui/dist/assets/LabPlugin-BKoZGs95.js +22 -0
- package/src/ui/dist/assets/LatexPlugin-ZwtV8pIp.js +25 -0
- package/src/ui/dist/assets/MarkdownViewerPlugin-DKqVfKyW.js +128 -0
- package/src/ui/dist/assets/MarketplacePlugin-BwxStZ9D.js +13 -0
- package/src/ui/dist/assets/NotebookEditor-BEQhaQbt.js +81 -0
- package/src/ui/dist/assets/{NotebookEditor-CccQYZjX.css → NotebookEditor-BHH8rdGj.css} +1 -1
- package/src/ui/dist/assets/NotebookEditor-BOr3x3Ej.css +1 -0
- package/src/ui/dist/assets/NotebookEditor-DB9N_T9q.js +361 -0
- package/src/ui/dist/assets/PdfLoader-Cy5jtWrr.css +1 -0
- package/src/ui/dist/assets/PdfLoader-eWBONbQP.js +16 -0
- package/src/ui/dist/assets/PdfMarkdownPlugin-D22YOZL3.js +1 -0
- package/src/ui/dist/assets/PdfViewerPlugin-c-RK9DLM.js +17 -0
- package/src/ui/dist/assets/PdfViewerPlugin-nwwE-fjJ.css +1 -0
- package/src/ui/dist/assets/SearchPlugin-CxF9ytAx.js +16 -0
- package/src/ui/dist/assets/SearchPlugin-DA4en4hK.css +1 -0
- package/src/ui/dist/assets/TextViewerPlugin-C5xqeeUH.js +54 -0
- package/src/ui/dist/assets/VNCViewer-BoLGLnHz.js +11 -0
- package/src/ui/dist/assets/bot-DREQOxzP.js +6 -0
- package/src/ui/dist/assets/browser-CTB2jwNe.js +8 -0
- package/src/ui/dist/assets/chevron-up-C9Qpx4DE.js +6 -0
- package/src/ui/dist/assets/code-WlFHE7z_.js +6 -0
- package/src/ui/dist/assets/file-content-BZMz3RYp.js +1 -0
- package/src/ui/dist/assets/file-diff-panel-CQhw0jS2.js +1 -0
- package/src/ui/dist/assets/file-jump-queue-DA-SdG__.js +1 -0
- package/src/ui/dist/assets/file-socket-CfQPKQKj.js +1 -0
- package/src/ui/dist/assets/git-commit-horizontal-DxZ8DCZh.js +6 -0
- package/src/ui/dist/assets/image-Bgl4VIyx.js +6 -0
- package/src/ui/dist/assets/index-BpV6lusQ.css +33 -0
- package/src/ui/dist/assets/index-CBNVuWcP.js +2496 -0
- package/src/ui/dist/assets/index-CwNu1aH4.js +11 -0
- package/src/ui/dist/assets/index-DrUnlf6K.js +1 -0
- package/src/ui/dist/assets/index-NW-h8VzN.js +1 -0
- package/src/ui/dist/assets/monaco-CiHMMNH_.js +1 -0
- package/src/ui/dist/assets/pdf-effect-queue-J8OnM0jE.js +6 -0
- package/src/ui/dist/assets/plugin-monaco-C8UgLomw.js +19 -0
- package/src/ui/dist/assets/plugin-notebook-HbW2K-1c.js +169 -0
- package/src/ui/dist/assets/plugin-pdf-CR8hgQBV.js +357 -0
- package/src/ui/dist/assets/plugin-terminal-MXFIPun8.js +227 -0
- package/src/ui/dist/assets/popover-CLc0pPP8.js +1 -0
- package/src/ui/dist/assets/project-sync-C9IdzdZW.js +1 -0
- package/src/ui/dist/assets/select-Cs2PmzwL.js +11 -0
- package/src/ui/dist/assets/sigma-ClKcHAXm.js +6 -0
- package/src/ui/dist/assets/trash-DwpbFr3w.js +11 -0
- package/src/ui/dist/assets/useCliAccess-NQ8m0Let.js +1 -0
- package/src/ui/dist/assets/useFileDiffOverlay-FuhcnKiw.js +1 -0
- package/src/ui/dist/assets/wrap-text-BC-Hltpd.js +11 -0
- package/src/ui/dist/assets/zoom-out-E_gaeAxL.js +11 -0
- package/src/ui/dist/index.html +5 -2
- package/src/ui/dist/assets/AiManusChatView-DDjbFnbt.js +0 -26597
- package/src/ui/dist/assets/AnalysisPlugin-Yb5IdmaU.js +0 -123
- package/src/ui/dist/assets/CliPlugin-e64sreyu.js +0 -31037
- package/src/ui/dist/assets/CodeEditorPlugin-C4D2TIkU.js +0 -427
- package/src/ui/dist/assets/CodeViewerPlugin-BVoNZIvC.js +0 -905
- package/src/ui/dist/assets/DocViewerPlugin-CLChbllo.js +0 -278
- package/src/ui/dist/assets/GitDiffViewerPlugin-C4xeFyFQ.js +0 -2661
- package/src/ui/dist/assets/ImageViewerPlugin-OiMUAcLi.js +0 -500
- package/src/ui/dist/assets/LabCopilotPanel-BjD2ThQF.js +0 -4104
- package/src/ui/dist/assets/LabPlugin-DQPg-NrB.js +0 -2677
- package/src/ui/dist/assets/LatexPlugin-CI05XAV9.js +0 -1792
- package/src/ui/dist/assets/MarkdownViewerPlugin-DpeBLYZf.js +0 -308
- package/src/ui/dist/assets/MarketplacePlugin-DolE58Q2.js +0 -413
- package/src/ui/dist/assets/NotebookEditor-7Qm2rSWD.js +0 -4214
- package/src/ui/dist/assets/NotebookEditor-C1kWaxKi.js +0 -84873
- package/src/ui/dist/assets/NotebookEditor-C3VQ7ylN.css +0 -1405
- package/src/ui/dist/assets/PdfLoader-BfOHw8Zw.js +0 -25468
- package/src/ui/dist/assets/PdfLoader-C-Y707R3.css +0 -49
- package/src/ui/dist/assets/PdfMarkdownPlugin-BulDREv1.js +0 -409
- package/src/ui/dist/assets/PdfViewerPlugin-C-daaOaL.js +0 -3095
- package/src/ui/dist/assets/PdfViewerPlugin-DQ11QcSf.css +0 -3627
- package/src/ui/dist/assets/SearchPlugin-CjpaiJ3A.js +0 -741
- package/src/ui/dist/assets/SearchPlugin-DDMrGDkh.css +0 -379
- package/src/ui/dist/assets/TextViewerPlugin-BxIyqPQC.js +0 -472
- package/src/ui/dist/assets/VNCViewer-HAg9mF7M.js +0 -18821
- package/src/ui/dist/assets/awareness-C0NPR2Dj.js +0 -292
- package/src/ui/dist/assets/bot-0DYntytV.js +0 -21
- package/src/ui/dist/assets/browser-BAcuE0Xj.js +0 -2895
- package/src/ui/dist/assets/code-B20Slj_w.js +0 -17
- package/src/ui/dist/assets/file-content-DT24KFma.js +0 -377
- package/src/ui/dist/assets/file-diff-panel-DK13YPql.js +0 -92
- package/src/ui/dist/assets/file-jump-queue-r5XKgJEV.js +0 -16
- package/src/ui/dist/assets/file-socket-B4T2o4nR.js +0 -58
- package/src/ui/dist/assets/function-B5QZkkHC.js +0 -1895
- package/src/ui/dist/assets/image-DSeR_sDS.js +0 -18
- package/src/ui/dist/assets/index-BrFje2Uk.js +0 -120
- package/src/ui/dist/assets/index-BwRJaoTl.js +0 -25
- package/src/ui/dist/assets/index-D_E4281X.js +0 -221322
- package/src/ui/dist/assets/index-DnYB3xb1.js +0 -159
- package/src/ui/dist/assets/index-G7AcWcMu.css +0 -12594
- package/src/ui/dist/assets/monaco-LExaAN3Y.js +0 -623
- package/src/ui/dist/assets/pdf-effect-queue-BJk5okWJ.js +0 -47
- package/src/ui/dist/assets/pdf_viewer-e0g1is2C.js +0 -8206
- package/src/ui/dist/assets/popover-D3Gg_FoV.js +0 -476
- package/src/ui/dist/assets/project-sync-C_ygLlVU.js +0 -297
- package/src/ui/dist/assets/select-CpAK6uWm.js +0 -1690
- package/src/ui/dist/assets/sigma-DEccaSgk.js +0 -22
- package/src/ui/dist/assets/square-check-big-uUfyVsbD.js +0 -17
- package/src/ui/dist/assets/trash-CXvwwSe8.js +0 -32
- package/src/ui/dist/assets/useCliAccess-Bnop4mgR.js +0 -957
- package/src/ui/dist/assets/useFileDiffOverlay-B8eUAX0I.js +0 -53
- package/src/ui/dist/assets/wrap-text-9vbOBpkW.js +0 -35
- package/src/ui/dist/assets/yjs-DncrqiZ8.js +0 -11243
- package/src/ui/dist/assets/zoom-out-BgVMmOW4.js +0 -34
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { O as Observable, f as floor, g as getUnixTime, e as equalityDeep, r as readVarUint, a as readVarString, w as writeVarUint, b as writeVarString, t as toUint8Array, c as createEncoder, d as createDecoder } from './function-B5QZkkHC.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @module awareness-protocol
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const outdatedTimeout = 30000;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @typedef {Object} MetaClientState
|
|
12
|
-
* @property {number} MetaClientState.clock
|
|
13
|
-
* @property {number} MetaClientState.lastUpdated unix timestamp
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information
|
|
18
|
-
* (cursor, username, status, ..). Each client can update its own local state and listen to state changes of
|
|
19
|
-
* remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.
|
|
20
|
-
*
|
|
21
|
-
* Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override
|
|
22
|
-
* its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is
|
|
23
|
-
* applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that
|
|
24
|
-
* a remote client is offline, it may propagate a message with
|
|
25
|
-
* `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a
|
|
26
|
-
* message is received, and the known clock of that client equals the received clock, it will override the state with `null`.
|
|
27
|
-
*
|
|
28
|
-
* Before a client disconnects, it should propagate a `null` state with an updated clock.
|
|
29
|
-
*
|
|
30
|
-
* Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.
|
|
31
|
-
*
|
|
32
|
-
* @extends {Observable<string>}
|
|
33
|
-
*/
|
|
34
|
-
class Awareness extends Observable {
|
|
35
|
-
/**
|
|
36
|
-
* @param {Y.Doc} doc
|
|
37
|
-
*/
|
|
38
|
-
constructor (doc) {
|
|
39
|
-
super();
|
|
40
|
-
this.doc = doc;
|
|
41
|
-
/**
|
|
42
|
-
* @type {number}
|
|
43
|
-
*/
|
|
44
|
-
this.clientID = doc.clientID;
|
|
45
|
-
/**
|
|
46
|
-
* Maps from client id to client state
|
|
47
|
-
* @type {Map<number, Object<string, any>>}
|
|
48
|
-
*/
|
|
49
|
-
this.states = new Map();
|
|
50
|
-
/**
|
|
51
|
-
* @type {Map<number, MetaClientState>}
|
|
52
|
-
*/
|
|
53
|
-
this.meta = new Map();
|
|
54
|
-
this._checkInterval = /** @type {any} */ (setInterval(() => {
|
|
55
|
-
const now = getUnixTime();
|
|
56
|
-
if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {
|
|
57
|
-
// renew local clock
|
|
58
|
-
this.setLocalState(this.getLocalState());
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* @type {Array<number>}
|
|
62
|
-
*/
|
|
63
|
-
const remove = [];
|
|
64
|
-
this.meta.forEach((meta, clientid) => {
|
|
65
|
-
if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {
|
|
66
|
-
remove.push(clientid);
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
if (remove.length > 0) {
|
|
70
|
-
removeAwarenessStates(this, remove, 'timeout');
|
|
71
|
-
}
|
|
72
|
-
}, floor(outdatedTimeout / 10)));
|
|
73
|
-
doc.on('destroy', () => {
|
|
74
|
-
this.destroy();
|
|
75
|
-
});
|
|
76
|
-
this.setLocalState({});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
destroy () {
|
|
80
|
-
this.emit('destroy', [this]);
|
|
81
|
-
this.setLocalState(null);
|
|
82
|
-
super.destroy();
|
|
83
|
-
clearInterval(this._checkInterval);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* @return {Object<string,any>|null}
|
|
88
|
-
*/
|
|
89
|
-
getLocalState () {
|
|
90
|
-
return this.states.get(this.clientID) || null
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* @param {Object<string,any>|null} state
|
|
95
|
-
*/
|
|
96
|
-
setLocalState (state) {
|
|
97
|
-
const clientID = this.clientID;
|
|
98
|
-
const currLocalMeta = this.meta.get(clientID);
|
|
99
|
-
const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1;
|
|
100
|
-
const prevState = this.states.get(clientID);
|
|
101
|
-
if (state === null) {
|
|
102
|
-
this.states.delete(clientID);
|
|
103
|
-
} else {
|
|
104
|
-
this.states.set(clientID, state);
|
|
105
|
-
}
|
|
106
|
-
this.meta.set(clientID, {
|
|
107
|
-
clock,
|
|
108
|
-
lastUpdated: getUnixTime()
|
|
109
|
-
});
|
|
110
|
-
const added = [];
|
|
111
|
-
const updated = [];
|
|
112
|
-
const filteredUpdated = [];
|
|
113
|
-
const removed = [];
|
|
114
|
-
if (state === null) {
|
|
115
|
-
removed.push(clientID);
|
|
116
|
-
} else if (prevState == null) {
|
|
117
|
-
if (state != null) {
|
|
118
|
-
added.push(clientID);
|
|
119
|
-
}
|
|
120
|
-
} else {
|
|
121
|
-
updated.push(clientID);
|
|
122
|
-
if (!equalityDeep(prevState, state)) {
|
|
123
|
-
filteredUpdated.push(clientID);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {
|
|
127
|
-
this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local']);
|
|
128
|
-
}
|
|
129
|
-
this.emit('update', [{ added, updated, removed }, 'local']);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* @param {string} field
|
|
134
|
-
* @param {any} value
|
|
135
|
-
*/
|
|
136
|
-
setLocalStateField (field, value) {
|
|
137
|
-
const state = this.getLocalState();
|
|
138
|
-
if (state !== null) {
|
|
139
|
-
this.setLocalState({
|
|
140
|
-
...state,
|
|
141
|
-
[field]: value
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* @return {Map<number,Object<string,any>>}
|
|
148
|
-
*/
|
|
149
|
-
getStates () {
|
|
150
|
-
return this.states
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Mark (remote) clients as inactive and remove them from the list of active peers.
|
|
156
|
-
* This change will be propagated to remote clients.
|
|
157
|
-
*
|
|
158
|
-
* @param {Awareness} awareness
|
|
159
|
-
* @param {Array<number>} clients
|
|
160
|
-
* @param {any} origin
|
|
161
|
-
*/
|
|
162
|
-
const removeAwarenessStates = (awareness, clients, origin) => {
|
|
163
|
-
const removed = [];
|
|
164
|
-
for (let i = 0; i < clients.length; i++) {
|
|
165
|
-
const clientID = clients[i];
|
|
166
|
-
if (awareness.states.has(clientID)) {
|
|
167
|
-
awareness.states.delete(clientID);
|
|
168
|
-
if (clientID === awareness.clientID) {
|
|
169
|
-
const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID));
|
|
170
|
-
awareness.meta.set(clientID, {
|
|
171
|
-
clock: curMeta.clock + 1,
|
|
172
|
-
lastUpdated: getUnixTime()
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
removed.push(clientID);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
if (removed.length > 0) {
|
|
179
|
-
awareness.emit('change', [{ added: [], updated: [], removed }, origin]);
|
|
180
|
-
awareness.emit('update', [{ added: [], updated: [], removed }, origin]);
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* @param {Awareness} awareness
|
|
186
|
-
* @param {Array<number>} clients
|
|
187
|
-
* @return {Uint8Array}
|
|
188
|
-
*/
|
|
189
|
-
const encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {
|
|
190
|
-
const len = clients.length;
|
|
191
|
-
const encoder = createEncoder();
|
|
192
|
-
writeVarUint(encoder, len);
|
|
193
|
-
for (let i = 0; i < len; i++) {
|
|
194
|
-
const clientID = clients[i];
|
|
195
|
-
const state = states.get(clientID) || null;
|
|
196
|
-
const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock;
|
|
197
|
-
writeVarUint(encoder, clientID);
|
|
198
|
-
writeVarUint(encoder, clock);
|
|
199
|
-
writeVarString(encoder, JSON.stringify(state));
|
|
200
|
-
}
|
|
201
|
-
return toUint8Array(encoder)
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Modify the content of an awareness update before re-encoding it to an awareness update.
|
|
206
|
-
*
|
|
207
|
-
* This might be useful when you have a central server that wants to ensure that clients
|
|
208
|
-
* cant hijack somebody elses identity.
|
|
209
|
-
*
|
|
210
|
-
* @param {Uint8Array} update
|
|
211
|
-
* @param {function(any):any} modify
|
|
212
|
-
* @return {Uint8Array}
|
|
213
|
-
*/
|
|
214
|
-
const modifyAwarenessUpdate = (update, modify) => {
|
|
215
|
-
const decoder = createDecoder(update);
|
|
216
|
-
const encoder = createEncoder();
|
|
217
|
-
const len = readVarUint(decoder);
|
|
218
|
-
writeVarUint(encoder, len);
|
|
219
|
-
for (let i = 0; i < len; i++) {
|
|
220
|
-
const clientID = readVarUint(decoder);
|
|
221
|
-
const clock = readVarUint(decoder);
|
|
222
|
-
const state = JSON.parse(readVarString(decoder));
|
|
223
|
-
const modifiedState = modify(state);
|
|
224
|
-
writeVarUint(encoder, clientID);
|
|
225
|
-
writeVarUint(encoder, clock);
|
|
226
|
-
writeVarString(encoder, JSON.stringify(modifiedState));
|
|
227
|
-
}
|
|
228
|
-
return toUint8Array(encoder)
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* @param {Awareness} awareness
|
|
233
|
-
* @param {Uint8Array} update
|
|
234
|
-
* @param {any} origin This will be added to the emitted change event
|
|
235
|
-
*/
|
|
236
|
-
const applyAwarenessUpdate = (awareness, update, origin) => {
|
|
237
|
-
const decoder = createDecoder(update);
|
|
238
|
-
const timestamp = getUnixTime();
|
|
239
|
-
const added = [];
|
|
240
|
-
const updated = [];
|
|
241
|
-
const filteredUpdated = [];
|
|
242
|
-
const removed = [];
|
|
243
|
-
const len = readVarUint(decoder);
|
|
244
|
-
for (let i = 0; i < len; i++) {
|
|
245
|
-
const clientID = readVarUint(decoder);
|
|
246
|
-
let clock = readVarUint(decoder);
|
|
247
|
-
const state = JSON.parse(readVarString(decoder));
|
|
248
|
-
const clientMeta = awareness.meta.get(clientID);
|
|
249
|
-
const prevState = awareness.states.get(clientID);
|
|
250
|
-
const currClock = clientMeta === undefined ? 0 : clientMeta.clock;
|
|
251
|
-
if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {
|
|
252
|
-
if (state === null) {
|
|
253
|
-
// never let a remote client remove this local state
|
|
254
|
-
if (clientID === awareness.clientID && awareness.getLocalState() != null) {
|
|
255
|
-
// remote client removed the local state. Do not remote state. Broadcast a message indicating
|
|
256
|
-
// that this client still exists by increasing the clock
|
|
257
|
-
clock++;
|
|
258
|
-
} else {
|
|
259
|
-
awareness.states.delete(clientID);
|
|
260
|
-
}
|
|
261
|
-
} else {
|
|
262
|
-
awareness.states.set(clientID, state);
|
|
263
|
-
}
|
|
264
|
-
awareness.meta.set(clientID, {
|
|
265
|
-
clock,
|
|
266
|
-
lastUpdated: timestamp
|
|
267
|
-
});
|
|
268
|
-
if (clientMeta === undefined && state !== null) {
|
|
269
|
-
added.push(clientID);
|
|
270
|
-
} else if (clientMeta !== undefined && state === null) {
|
|
271
|
-
removed.push(clientID);
|
|
272
|
-
} else if (state !== null) {
|
|
273
|
-
if (!equalityDeep(state, prevState)) {
|
|
274
|
-
filteredUpdated.push(clientID);
|
|
275
|
-
}
|
|
276
|
-
updated.push(clientID);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {
|
|
281
|
-
awareness.emit('change', [{
|
|
282
|
-
added, updated: filteredUpdated, removed
|
|
283
|
-
}, origin]);
|
|
284
|
-
}
|
|
285
|
-
if (added.length > 0 || updated.length > 0 || removed.length > 0) {
|
|
286
|
-
awareness.emit('update', [{
|
|
287
|
-
added, updated, removed
|
|
288
|
-
}, origin]);
|
|
289
|
-
}
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
export { Awareness, applyAwarenessUpdate, encodeAwarenessUpdate, modifyAwarenessUpdate, outdatedTimeout, removeAwarenessStates };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { w as createLucideIcon } from './index-D_E4281X.js';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @license lucide-react v0.511.0 - ISC
|
|
5
|
-
*
|
|
6
|
-
* This source code is licensed under the ISC license.
|
|
7
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const __iconNode = [
|
|
12
|
-
["path", { d: "M12 8V4H8", key: "hb8ula" }],
|
|
13
|
-
["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
|
|
14
|
-
["path", { d: "M2 14h2", key: "vft8re" }],
|
|
15
|
-
["path", { d: "M20 14h2", key: "4cs60a" }],
|
|
16
|
-
["path", { d: "M15 13v2", key: "1xurst" }],
|
|
17
|
-
["path", { d: "M9 13v2", key: "rq6x2g" }]
|
|
18
|
-
];
|
|
19
|
-
const Bot = createLucideIcon("bot", __iconNode);
|
|
20
|
-
|
|
21
|
-
export { Bot as B };
|