@excitedjs/dreamux 0.9.8 → 0.11.0
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/CHANGELOG.json +372 -0
- package/CHANGELOG.md +194 -0
- package/README.md +12 -5
- package/dist/channel/feishu-gate.js +16 -25
- package/dist/channel/feishu-gate.js.map +1 -1
- package/dist/cli/changelog.js +39 -0
- package/dist/cli/changelog.js.map +1 -0
- package/dist/cli/dreamux.js +8 -0
- package/dist/cli/dreamux.js.map +1 -1
- package/dist/daemon/restart-intent.js +51 -9
- package/dist/daemon/restart-intent.js.map +1 -1
- package/dist/runtime/config.js +4 -2
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/dispatcher-store.js +83 -27
- package/dist/runtime/dispatcher-store.js.map +1 -1
- package/dist/runtime/paths.js +12 -0
- package/dist/runtime/paths.js.map +1 -1
- package/dist/server.js +5 -2
- package/dist/server.js.map +1 -1
- package/package.json +4 -2
- package/skills/dreamux-maintenance/SKILL.md +35 -0
package/CHANGELOG.json
ADDED
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@excitedjs/dreamux",
|
|
3
|
+
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "0.11.0",
|
|
6
|
+
"tag": "@excitedjs/dreamux_v0.11.0",
|
|
7
|
+
"date": "Fri, 05 Jun 2026 16:16:45 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"minor": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "Unify persisted-file version policy (issue #98). BREAKING: dispatcher access.json is now v2-only; the legacy v1 shape (dm.allow_users + group.follow_users) is no longer auto-migrated and an unsupported/missing version fails loud. Rebuild: delete the dispatcher's access.json to return to the secure default (no one authorized), then recreate it as a v2 access.json with allow_users and group.policy (see the access.json section in the dreamux README) and restart; note that `dreamux onboard` does not restore access grants. status.json and restart-intent.json now warn-and-rebuild / warn-and-drop on incompatible, malformed, or invalid-field content instead of silently discarding or misreading; neither hard-fatals the server."
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"version": "0.10.0",
|
|
18
|
+
"tag": "@excitedjs/dreamux_v0.10.0",
|
|
19
|
+
"date": "Fri, 05 Jun 2026 15:34:49 GMT",
|
|
20
|
+
"comments": {
|
|
21
|
+
"minor": [
|
|
22
|
+
{
|
|
23
|
+
"comment": "Add the `dreamux changelog` command (and `--json`) that prints the installed package's bundled CHANGELOG, and ship CHANGELOG.md/CHANGELOG.json in the package files. This is the upgrade-time information entry point for the 0.x fail-loud + rebuild policy (issue #98)."
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"version": "0.9.8",
|
|
30
|
+
"tag": "@excitedjs/dreamux_v0.9.8",
|
|
31
|
+
"date": "Fri, 05 Jun 2026 14:06:54 GMT",
|
|
32
|
+
"comments": {
|
|
33
|
+
"patch": [
|
|
34
|
+
{
|
|
35
|
+
"comment": "Trusted peer-bot inbound now requires both a trusted sender open_id and an @-mention of this bot; introduce trusts only mention open_id (no union_id/user_id fallback); add diagnostic-only sender_union_id to inbound-drop logs (issue #102)"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"dependency": [
|
|
39
|
+
{
|
|
40
|
+
"comment": "Updating dependency \"@excitedjs/feishu-transport\" to `0.2.3`"
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"version": "0.9.7",
|
|
47
|
+
"tag": "@excitedjs/dreamux_v0.9.7",
|
|
48
|
+
"date": "Fri, 05 Jun 2026 12:14:20 GMT",
|
|
49
|
+
"comments": {
|
|
50
|
+
"patch": [
|
|
51
|
+
{
|
|
52
|
+
"comment": "Restructure the bundled dispatcher skill into a router plus references, make the teammate engine a deliberate explicit choice instead of forcing codex, and add prompt-composition, router-posture, and inspect/resume workflow guidance."
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"version": "0.9.6",
|
|
59
|
+
"tag": "@excitedjs/dreamux_v0.9.6",
|
|
60
|
+
"date": "Fri, 05 Jun 2026 08:05:04 GMT",
|
|
61
|
+
"comments": {
|
|
62
|
+
"patch": [
|
|
63
|
+
{
|
|
64
|
+
"comment": "Fix the published npm install path by removing the ahead-of-use Feishu channel runtime dependency."
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"version": "0.9.5",
|
|
71
|
+
"tag": "@excitedjs/dreamux_v0.9.5",
|
|
72
|
+
"date": "Fri, 05 Jun 2026 05:41:43 GMT",
|
|
73
|
+
"comments": {
|
|
74
|
+
"patch": [
|
|
75
|
+
{
|
|
76
|
+
"comment": "Bundle the dispatcher, team-dev-workflow, and dreamux-maintenance skills and install them as workspace-local symlinks for each dispatcher."
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"version": "0.9.4",
|
|
83
|
+
"tag": "@excitedjs/dreamux_v0.9.4",
|
|
84
|
+
"date": "Fri, 05 Jun 2026 05:30:23 GMT",
|
|
85
|
+
"comments": {
|
|
86
|
+
"patch": [
|
|
87
|
+
{
|
|
88
|
+
"comment": "Route Feishu inbound formatting through feishu-channel, including downloaded attachment paths and fallback resource references."
|
|
89
|
+
}
|
|
90
|
+
],
|
|
91
|
+
"dependency": [
|
|
92
|
+
{
|
|
93
|
+
"comment": "Updating dependency \"@excitedjs/feishu-transport\" to `0.2.2`"
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"version": "0.9.3",
|
|
100
|
+
"tag": "@excitedjs/dreamux_v0.9.3",
|
|
101
|
+
"date": "Fri, 05 Jun 2026 03:34:03 GMT",
|
|
102
|
+
"comments": {
|
|
103
|
+
"patch": [
|
|
104
|
+
{
|
|
105
|
+
"comment": "Fix group /introduce authorization to follow the group policy: under follow-user it now ignores allow_chats and gates only on allow_users, matching the delivery gate; block is denied explicitly (group_blocked); allowlist is unchanged."
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"version": "0.9.2",
|
|
112
|
+
"tag": "@excitedjs/dreamux_v0.9.2",
|
|
113
|
+
"date": "Fri, 05 Jun 2026 02:47:01 GMT",
|
|
114
|
+
"comments": {
|
|
115
|
+
"patch": [
|
|
116
|
+
{
|
|
117
|
+
"comment": "Add a best-effort Feishu channel acknowledgement for authorized group /introduce commands."
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"version": "0.9.1",
|
|
124
|
+
"tag": "@excitedjs/dreamux_v0.9.1",
|
|
125
|
+
"date": "Thu, 04 Jun 2026 23:08:48 GMT",
|
|
126
|
+
"comments": {
|
|
127
|
+
"patch": [
|
|
128
|
+
{
|
|
129
|
+
"comment": "Remove all synchronous blocking IO from package source (fs/promises + async child_process) and add a permanent ESLint gate (n/no-sync + import/syntax backstops via the shared @excitedjs/eslint-config) wired through rush lint, CI, and the pre-commit hook (issue #85)"
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
"dependency": [
|
|
133
|
+
{
|
|
134
|
+
"comment": "Updating dependency \"@excitedjs/feishu-transport\" to `0.2.1`"
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"version": "0.9.0",
|
|
141
|
+
"tag": "@excitedjs/dreamux_v0.9.0",
|
|
142
|
+
"date": "Thu, 04 Jun 2026 20:50:14 GMT",
|
|
143
|
+
"comments": {
|
|
144
|
+
"minor": [
|
|
145
|
+
{
|
|
146
|
+
"comment": "Add daemon command group (install/uninstall/start/stop/restart), enable systemd linger so the user service starts at boot, and inject a restart-completed notice into resumed dispatchers after daemon restart --notify-resumed"
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"version": "0.8.0",
|
|
153
|
+
"tag": "@excitedjs/dreamux_v0.8.0",
|
|
154
|
+
"date": "Thu, 04 Jun 2026 20:24:45 GMT",
|
|
155
|
+
"comments": {
|
|
156
|
+
"minor": [
|
|
157
|
+
{
|
|
158
|
+
"comment": "Fix the follow-user group-access semantics: the dispatcher runtime gate (dreamuxFeishuGate) now gates group delivery on a single global allow-user list shared with direct messages, instead of a separate group.follow_users list, so a sender on the global allowlist who @-mentions the bot is delivered in any group (issue #79). The access.json shape is unified to v2: a top-level allow_users list plus an explicit group.policy (block | allowlist | follow-user); v1 files are migrated forward by readDispatcherAccess (legacy dm.allow_users and group.follow_users are merged and de-duplicated, the policy is inferred, and the first save rewrites the file). An empty allow_users now authorizes nobody, consistent with direct messages. /introduce sender authorization moves to the global allow_users list while still requiring the chat to be named in allow_chats."
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"version": "0.7.0",
|
|
165
|
+
"tag": "@excitedjs/dreamux_v0.7.0",
|
|
166
|
+
"date": "Thu, 04 Jun 2026 20:18:37 GMT",
|
|
167
|
+
"comments": {
|
|
168
|
+
"minor": [
|
|
169
|
+
{
|
|
170
|
+
"comment": "Prefer a stable platform-aware system Node for the managed service (Homebrew on macOS, system paths on Linux) with fallback to the current Node, and add a non-fatal dreamux doctor advisory when the service Node is bound to a version manager."
|
|
171
|
+
}
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"version": "0.6.2",
|
|
177
|
+
"tag": "@excitedjs/dreamux_v0.6.2",
|
|
178
|
+
"date": "Thu, 04 Jun 2026 19:41:43 GMT",
|
|
179
|
+
"comments": {
|
|
180
|
+
"patch": [
|
|
181
|
+
{
|
|
182
|
+
"comment": "Log a distinct channel diagnostic ('introduce detected but not authorized') with a stable reason code (non_group / empty_sender_id / chat_not_allowlisted / sender_not_followed) when a group /introduce is detected but the sender is not authorized, instead of letting it surface as an ordinary gate drop (e.g. 'bot not mentioned'). Gate, trust, and /introduce semantics are unchanged (issue #77)."
|
|
183
|
+
}
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"version": "0.6.1",
|
|
189
|
+
"tag": "@excitedjs/dreamux_v0.6.1",
|
|
190
|
+
"date": "Thu, 04 Jun 2026 18:47:15 GMT",
|
|
191
|
+
"comments": {
|
|
192
|
+
"patch": [
|
|
193
|
+
{
|
|
194
|
+
"comment": "Inject each dispatcher's per-dispatcher channel logger into its Feishu bot/transport, so the transport's Lark SDK and WebSocket connection diagnostics land in logs/feishu-channel/<id>.log alongside the host's own channel decisions (issue #74)."
|
|
195
|
+
}
|
|
196
|
+
],
|
|
197
|
+
"dependency": [
|
|
198
|
+
{
|
|
199
|
+
"comment": "Updating dependency \"@excitedjs/feishu-transport\" to `0.2.0`"
|
|
200
|
+
}
|
|
201
|
+
]
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"version": "0.6.0",
|
|
206
|
+
"tag": "@excitedjs/dreamux_v0.6.0",
|
|
207
|
+
"date": "Thu, 04 Jun 2026 17:58:38 GMT",
|
|
208
|
+
"comments": {
|
|
209
|
+
"minor": [
|
|
210
|
+
{
|
|
211
|
+
"comment": "Add persistent structured file logging (pino) across server, Feishu channel, gate/drop/inbound/outbound/introduce, dispatcher runtime, and the feishu-mcp stdio shim; logs persist under ~/.dreamux/logs (issue #70)."
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"version": "0.5.0",
|
|
218
|
+
"tag": "@excitedjs/dreamux_v0.5.0",
|
|
219
|
+
"date": "Thu, 04 Jun 2026 17:12:55 GMT",
|
|
220
|
+
"comments": {
|
|
221
|
+
"minor": [
|
|
222
|
+
{
|
|
223
|
+
"comment": "Inject a one-shot <group_bots> context of a group's trusted bots on the first delivered message after /introduce (commit-after-notify, generation-safe clear); add a model-facing list_chat_bots MCP tool (backed by a read-only mcp.list_chat_bots admin method) returning a chat's known + trusted bots; and change the inbound reaction lifecycle to add-then-cancel so the message never shows a zero-reaction window during the received -> in-progress transition."
|
|
224
|
+
}
|
|
225
|
+
]
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"version": "0.4.0",
|
|
230
|
+
"tag": "@excitedjs/dreamux_v0.4.0",
|
|
231
|
+
"date": "Thu, 04 Jun 2026 15:47:28 GMT",
|
|
232
|
+
"comments": {
|
|
233
|
+
"minor": [
|
|
234
|
+
{
|
|
235
|
+
"comment": "Add the Feishu event-registry seam (FeishuBot.start now takes a route object with onMessage + optional onBotMemberAdded) and the group /introduce hard contract: /introduce triggers only when the sender is allowlisted, with no @-mention of the bot required. A new chat-bots.json store separates passive bot awareness from introduced trust."
|
|
236
|
+
}
|
|
237
|
+
]
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"version": "0.3.3",
|
|
242
|
+
"tag": "@excitedjs/dreamux_v0.3.3",
|
|
243
|
+
"date": "Thu, 04 Jun 2026 14:09:37 GMT",
|
|
244
|
+
"comments": {
|
|
245
|
+
"patch": [
|
|
246
|
+
{
|
|
247
|
+
"comment": "Fix Feishu inbound reaction emoji type values."
|
|
248
|
+
}
|
|
249
|
+
]
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"version": "0.3.2",
|
|
254
|
+
"tag": "@excitedjs/dreamux_v0.3.2",
|
|
255
|
+
"date": "Thu, 04 Jun 2026 13:15:17 GMT",
|
|
256
|
+
"comments": {
|
|
257
|
+
"patch": [
|
|
258
|
+
{
|
|
259
|
+
"comment": "Submit accepted Feishu inbound with non-blocking turn/start delivery and three-state reactions."
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"version": "0.3.1",
|
|
266
|
+
"tag": "@excitedjs/dreamux_v0.3.1",
|
|
267
|
+
"date": "Thu, 04 Jun 2026 07:44:14 GMT",
|
|
268
|
+
"comments": {
|
|
269
|
+
"patch": [
|
|
270
|
+
{
|
|
271
|
+
"comment": "Fix managed service startup when Node is provided by nvm."
|
|
272
|
+
}
|
|
273
|
+
]
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"version": "0.3.0",
|
|
278
|
+
"tag": "@excitedjs/dreamux_v0.3.0",
|
|
279
|
+
"date": "Thu, 04 Jun 2026 05:00:52 GMT",
|
|
280
|
+
"comments": {
|
|
281
|
+
"minor": [
|
|
282
|
+
{
|
|
283
|
+
"comment": "调整 onboard 与 dispatcher runtime,使其继承本机 Codex 状态,改用 JSON 配置并新增 uninstall 指令。"
|
|
284
|
+
}
|
|
285
|
+
],
|
|
286
|
+
"dependency": [
|
|
287
|
+
{
|
|
288
|
+
"comment": "Updating dependency \"@excitedjs/feishu-transport\" to `0.1.0`"
|
|
289
|
+
}
|
|
290
|
+
]
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
"version": "0.2.0",
|
|
295
|
+
"tag": "@excitedjs/dreamux_v0.2.0",
|
|
296
|
+
"date": "Wed, 03 Jun 2026 07:57:13 GMT",
|
|
297
|
+
"comments": {
|
|
298
|
+
"minor": [
|
|
299
|
+
{
|
|
300
|
+
"comment": "调整 onboard 与 dispatcher runtime,使其继承本机 Codex 状态,改用 JSON 配置并新增 uninstall 指令。"
|
|
301
|
+
}
|
|
302
|
+
]
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
"version": "0.1.4",
|
|
307
|
+
"tag": "@excitedjs/dreamux_v0.1.4",
|
|
308
|
+
"date": "Wed, 03 Jun 2026 04:29:43 GMT",
|
|
309
|
+
"comments": {
|
|
310
|
+
"patch": [
|
|
311
|
+
{
|
|
312
|
+
"comment": "Fix onboard Codex marketplace installation from the public dreamux repository."
|
|
313
|
+
}
|
|
314
|
+
]
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"version": "0.1.3",
|
|
319
|
+
"tag": "@excitedjs/dreamux_v0.1.3",
|
|
320
|
+
"date": "Tue, 02 Jun 2026 18:55:21 GMT",
|
|
321
|
+
"comments": {
|
|
322
|
+
"patch": [
|
|
323
|
+
{
|
|
324
|
+
"comment": "Implement dreamux onboard: first-run wizard, dispatcher-private Codex home setup, plugin installation, service registration, and transparent file ledger output."
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"comment": "Add the issue #18 dreamux serve foundation: single global bin command tree, dispatcher-private Codex homes, and serve-time Codex home checks."
|
|
328
|
+
}
|
|
329
|
+
],
|
|
330
|
+
"none": [
|
|
331
|
+
{
|
|
332
|
+
"comment": "Add repository field so npm provenance validation passes on OIDC publish"
|
|
333
|
+
}
|
|
334
|
+
]
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"version": "0.1.2",
|
|
339
|
+
"tag": "@excitedjs/dreamux_v0.1.2",
|
|
340
|
+
"date": "Sun, 31 May 2026 07:02:52 GMT",
|
|
341
|
+
"comments": {
|
|
342
|
+
"patch": [
|
|
343
|
+
{
|
|
344
|
+
"comment": "Thread Feishu replies and drop bot-loop inbound messages"
|
|
345
|
+
}
|
|
346
|
+
],
|
|
347
|
+
"dependency": [
|
|
348
|
+
{
|
|
349
|
+
"comment": "Updating dependency \"@excitedjs/feishu-transport\" to `0.0.2`"
|
|
350
|
+
}
|
|
351
|
+
]
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"version": "0.1.1",
|
|
356
|
+
"tag": "@excitedjs/dreamux_v0.1.1",
|
|
357
|
+
"date": "Sat, 30 May 2026 17:49:32 GMT",
|
|
358
|
+
"comments": {
|
|
359
|
+
"patch": [
|
|
360
|
+
{
|
|
361
|
+
"comment": "init"
|
|
362
|
+
}
|
|
363
|
+
],
|
|
364
|
+
"dependency": [
|
|
365
|
+
{
|
|
366
|
+
"comment": "Updating dependency \"@excitedjs/feishu-transport\" to `0.0.1`"
|
|
367
|
+
}
|
|
368
|
+
]
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
]
|
|
372
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Change Log - @excitedjs/dreamux
|
|
2
|
+
|
|
3
|
+
This log was last generated on Fri, 05 Jun 2026 16:16:45 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 0.11.0
|
|
6
|
+
Fri, 05 Jun 2026 16:16:45 GMT
|
|
7
|
+
|
|
8
|
+
### Minor changes
|
|
9
|
+
|
|
10
|
+
- Unify persisted-file version policy (issue #98). BREAKING: dispatcher access.json is now v2-only; the legacy v1 shape (dm.allow_users + group.follow_users) is no longer auto-migrated and an unsupported/missing version fails loud. Rebuild: delete the dispatcher's access.json to return to the secure default (no one authorized), then recreate it as a v2 access.json with allow_users and group.policy (see the access.json section in the dreamux README) and restart; note that `dreamux onboard` does not restore access grants. status.json and restart-intent.json now warn-and-rebuild / warn-and-drop on incompatible, malformed, or invalid-field content instead of silently discarding or misreading; neither hard-fatals the server.
|
|
11
|
+
|
|
12
|
+
## 0.10.0
|
|
13
|
+
Fri, 05 Jun 2026 15:34:49 GMT
|
|
14
|
+
|
|
15
|
+
### Minor changes
|
|
16
|
+
|
|
17
|
+
- Add the `dreamux changelog` command (and `--json`) that prints the installed package's bundled CHANGELOG, and ship CHANGELOG.md/CHANGELOG.json in the package files. This is the upgrade-time information entry point for the 0.x fail-loud + rebuild policy (issue #98).
|
|
18
|
+
|
|
19
|
+
## 0.9.8
|
|
20
|
+
Fri, 05 Jun 2026 14:06:54 GMT
|
|
21
|
+
|
|
22
|
+
### Patches
|
|
23
|
+
|
|
24
|
+
- Trusted peer-bot inbound now requires both a trusted sender open_id and an @-mention of this bot; introduce trusts only mention open_id (no union_id/user_id fallback); add diagnostic-only sender_union_id to inbound-drop logs (issue #102)
|
|
25
|
+
|
|
26
|
+
## 0.9.7
|
|
27
|
+
Fri, 05 Jun 2026 12:14:20 GMT
|
|
28
|
+
|
|
29
|
+
### Patches
|
|
30
|
+
|
|
31
|
+
- Restructure the bundled dispatcher skill into a router plus references, make the teammate engine a deliberate explicit choice instead of forcing codex, and add prompt-composition, router-posture, and inspect/resume workflow guidance.
|
|
32
|
+
|
|
33
|
+
## 0.9.6
|
|
34
|
+
Fri, 05 Jun 2026 08:05:04 GMT
|
|
35
|
+
|
|
36
|
+
### Patches
|
|
37
|
+
|
|
38
|
+
- Fix the published npm install path by removing the ahead-of-use Feishu channel runtime dependency.
|
|
39
|
+
|
|
40
|
+
## 0.9.5
|
|
41
|
+
Fri, 05 Jun 2026 05:41:43 GMT
|
|
42
|
+
|
|
43
|
+
### Patches
|
|
44
|
+
|
|
45
|
+
- Bundle the dispatcher, team-dev-workflow, and dreamux-maintenance skills and install them as workspace-local symlinks for each dispatcher.
|
|
46
|
+
|
|
47
|
+
## 0.9.4
|
|
48
|
+
Fri, 05 Jun 2026 05:30:23 GMT
|
|
49
|
+
|
|
50
|
+
### Patches
|
|
51
|
+
|
|
52
|
+
- Route Feishu inbound formatting through feishu-channel, including downloaded attachment paths and fallback resource references.
|
|
53
|
+
|
|
54
|
+
## 0.9.3
|
|
55
|
+
Fri, 05 Jun 2026 03:34:03 GMT
|
|
56
|
+
|
|
57
|
+
### Patches
|
|
58
|
+
|
|
59
|
+
- Fix group /introduce authorization to follow the group policy: under follow-user it now ignores allow_chats and gates only on allow_users, matching the delivery gate; block is denied explicitly (group_blocked); allowlist is unchanged.
|
|
60
|
+
|
|
61
|
+
## 0.9.2
|
|
62
|
+
Fri, 05 Jun 2026 02:47:01 GMT
|
|
63
|
+
|
|
64
|
+
### Patches
|
|
65
|
+
|
|
66
|
+
- Add a best-effort Feishu channel acknowledgement for authorized group /introduce commands.
|
|
67
|
+
|
|
68
|
+
## 0.9.1
|
|
69
|
+
Thu, 04 Jun 2026 23:08:48 GMT
|
|
70
|
+
|
|
71
|
+
### Patches
|
|
72
|
+
|
|
73
|
+
- Remove all synchronous blocking IO from package source (fs/promises + async child_process) and add a permanent ESLint gate (n/no-sync + import/syntax backstops via the shared @excitedjs/eslint-config) wired through rush lint, CI, and the pre-commit hook (issue #85)
|
|
74
|
+
|
|
75
|
+
## 0.9.0
|
|
76
|
+
Thu, 04 Jun 2026 20:50:14 GMT
|
|
77
|
+
|
|
78
|
+
### Minor changes
|
|
79
|
+
|
|
80
|
+
- Add daemon command group (install/uninstall/start/stop/restart), enable systemd linger so the user service starts at boot, and inject a restart-completed notice into resumed dispatchers after daemon restart --notify-resumed
|
|
81
|
+
|
|
82
|
+
## 0.8.0
|
|
83
|
+
Thu, 04 Jun 2026 20:24:45 GMT
|
|
84
|
+
|
|
85
|
+
### Minor changes
|
|
86
|
+
|
|
87
|
+
- Fix the follow-user group-access semantics: the dispatcher runtime gate (dreamuxFeishuGate) now gates group delivery on a single global allow-user list shared with direct messages, instead of a separate group.follow_users list, so a sender on the global allowlist who @-mentions the bot is delivered in any group (issue #79). The access.json shape is unified to v2: a top-level allow_users list plus an explicit group.policy (block | allowlist | follow-user); v1 files are migrated forward by readDispatcherAccess (legacy dm.allow_users and group.follow_users are merged and de-duplicated, the policy is inferred, and the first save rewrites the file). An empty allow_users now authorizes nobody, consistent with direct messages. /introduce sender authorization moves to the global allow_users list while still requiring the chat to be named in allow_chats.
|
|
88
|
+
|
|
89
|
+
## 0.7.0
|
|
90
|
+
Thu, 04 Jun 2026 20:18:37 GMT
|
|
91
|
+
|
|
92
|
+
### Minor changes
|
|
93
|
+
|
|
94
|
+
- Prefer a stable platform-aware system Node for the managed service (Homebrew on macOS, system paths on Linux) with fallback to the current Node, and add a non-fatal dreamux doctor advisory when the service Node is bound to a version manager.
|
|
95
|
+
|
|
96
|
+
## 0.6.2
|
|
97
|
+
Thu, 04 Jun 2026 19:41:43 GMT
|
|
98
|
+
|
|
99
|
+
### Patches
|
|
100
|
+
|
|
101
|
+
- Log a distinct channel diagnostic ('introduce detected but not authorized') with a stable reason code (non_group / empty_sender_id / chat_not_allowlisted / sender_not_followed) when a group /introduce is detected but the sender is not authorized, instead of letting it surface as an ordinary gate drop (e.g. 'bot not mentioned'). Gate, trust, and /introduce semantics are unchanged (issue #77).
|
|
102
|
+
|
|
103
|
+
## 0.6.1
|
|
104
|
+
Thu, 04 Jun 2026 18:47:15 GMT
|
|
105
|
+
|
|
106
|
+
### Patches
|
|
107
|
+
|
|
108
|
+
- Inject each dispatcher's per-dispatcher channel logger into its Feishu bot/transport, so the transport's Lark SDK and WebSocket connection diagnostics land in logs/feishu-channel/<id>.log alongside the host's own channel decisions (issue #74).
|
|
109
|
+
|
|
110
|
+
## 0.6.0
|
|
111
|
+
Thu, 04 Jun 2026 17:58:38 GMT
|
|
112
|
+
|
|
113
|
+
### Minor changes
|
|
114
|
+
|
|
115
|
+
- Add persistent structured file logging (pino) across server, Feishu channel, gate/drop/inbound/outbound/introduce, dispatcher runtime, and the feishu-mcp stdio shim; logs persist under ~/.dreamux/logs (issue #70).
|
|
116
|
+
|
|
117
|
+
## 0.5.0
|
|
118
|
+
Thu, 04 Jun 2026 17:12:55 GMT
|
|
119
|
+
|
|
120
|
+
### Minor changes
|
|
121
|
+
|
|
122
|
+
- Inject a one-shot <group_bots> context of a group's trusted bots on the first delivered message after /introduce (commit-after-notify, generation-safe clear); add a model-facing list_chat_bots MCP tool (backed by a read-only mcp.list_chat_bots admin method) returning a chat's known + trusted bots; and change the inbound reaction lifecycle to add-then-cancel so the message never shows a zero-reaction window during the received -> in-progress transition.
|
|
123
|
+
|
|
124
|
+
## 0.4.0
|
|
125
|
+
Thu, 04 Jun 2026 15:47:28 GMT
|
|
126
|
+
|
|
127
|
+
### Minor changes
|
|
128
|
+
|
|
129
|
+
- Add the Feishu event-registry seam (FeishuBot.start now takes a route object with onMessage + optional onBotMemberAdded) and the group /introduce hard contract: /introduce triggers only when the sender is allowlisted, with no @-mention of the bot required. A new chat-bots.json store separates passive bot awareness from introduced trust.
|
|
130
|
+
|
|
131
|
+
## 0.3.3
|
|
132
|
+
Thu, 04 Jun 2026 14:09:37 GMT
|
|
133
|
+
|
|
134
|
+
### Patches
|
|
135
|
+
|
|
136
|
+
- Fix Feishu inbound reaction emoji type values.
|
|
137
|
+
|
|
138
|
+
## 0.3.2
|
|
139
|
+
Thu, 04 Jun 2026 13:15:17 GMT
|
|
140
|
+
|
|
141
|
+
### Patches
|
|
142
|
+
|
|
143
|
+
- Submit accepted Feishu inbound with non-blocking turn/start delivery and three-state reactions.
|
|
144
|
+
|
|
145
|
+
## 0.3.1
|
|
146
|
+
Thu, 04 Jun 2026 07:44:14 GMT
|
|
147
|
+
|
|
148
|
+
### Patches
|
|
149
|
+
|
|
150
|
+
- Fix managed service startup when Node is provided by nvm.
|
|
151
|
+
|
|
152
|
+
## 0.3.0
|
|
153
|
+
Thu, 04 Jun 2026 05:00:52 GMT
|
|
154
|
+
|
|
155
|
+
### Minor changes
|
|
156
|
+
|
|
157
|
+
- 调整 onboard 与 dispatcher runtime,使其继承本机 Codex 状态,改用 JSON 配置并新增 uninstall 指令。
|
|
158
|
+
|
|
159
|
+
## 0.2.0
|
|
160
|
+
Wed, 03 Jun 2026 07:57:13 GMT
|
|
161
|
+
|
|
162
|
+
### Minor changes
|
|
163
|
+
|
|
164
|
+
- 调整 onboard 与 dispatcher runtime,使其继承本机 Codex 状态,改用 JSON 配置并新增 uninstall 指令。
|
|
165
|
+
|
|
166
|
+
## 0.1.4
|
|
167
|
+
Wed, 03 Jun 2026 04:29:43 GMT
|
|
168
|
+
|
|
169
|
+
### Patches
|
|
170
|
+
|
|
171
|
+
- Fix onboard Codex marketplace installation from the public dreamux repository.
|
|
172
|
+
|
|
173
|
+
## 0.1.3
|
|
174
|
+
Tue, 02 Jun 2026 18:55:21 GMT
|
|
175
|
+
|
|
176
|
+
### Patches
|
|
177
|
+
|
|
178
|
+
- Implement dreamux onboard: first-run wizard, dispatcher-private Codex home setup, plugin installation, service registration, and transparent file ledger output.
|
|
179
|
+
- Add the issue #18 dreamux serve foundation: single global bin command tree, dispatcher-private Codex homes, and serve-time Codex home checks.
|
|
180
|
+
|
|
181
|
+
## 0.1.2
|
|
182
|
+
Sun, 31 May 2026 07:02:52 GMT
|
|
183
|
+
|
|
184
|
+
### Patches
|
|
185
|
+
|
|
186
|
+
- Thread Feishu replies and drop bot-loop inbound messages
|
|
187
|
+
|
|
188
|
+
## 0.1.1
|
|
189
|
+
Sat, 30 May 2026 17:49:32 GMT
|
|
190
|
+
|
|
191
|
+
### Patches
|
|
192
|
+
|
|
193
|
+
- init
|
|
194
|
+
|
package/README.md
CHANGED
|
@@ -144,13 +144,11 @@ Access-gate allowlists are not part of `config.json`. Configure them in
|
|
|
144
144
|
|
|
145
145
|
```json
|
|
146
146
|
{
|
|
147
|
-
"version":
|
|
148
|
-
"
|
|
149
|
-
"allow_users": ["<USER_ID>"]
|
|
150
|
-
},
|
|
147
|
+
"version": 2,
|
|
148
|
+
"allow_users": ["<USER_ID>"],
|
|
151
149
|
"group": {
|
|
150
|
+
"policy": "follow-user",
|
|
152
151
|
"allow_chats": ["<CHAT_ID>"],
|
|
153
|
-
"follow_users": ["<USER_ID>"],
|
|
154
152
|
"require_mention": true
|
|
155
153
|
},
|
|
156
154
|
"observed_chats": [],
|
|
@@ -159,6 +157,15 @@ Access-gate allowlists are not part of `config.json`. Configure them in
|
|
|
159
157
|
}
|
|
160
158
|
```
|
|
161
159
|
|
|
160
|
+
`access.json` is v2-only. `allow_users` is the single global allowlist of
|
|
161
|
+
sender open_ids, shared by direct messages and the group `follow-user` policy.
|
|
162
|
+
`group.policy` is one of `block`, `allowlist`, or `follow-user`; under
|
|
163
|
+
`allowlist` the gate consults `allow_chats`, under `follow-user` it ignores
|
|
164
|
+
`allow_chats` and gates on `allow_users`. dreamux 0.x does not migrate older
|
|
165
|
+
shapes: an unsupported or missing `version` fails loud at startup. To reset,
|
|
166
|
+
delete the file (secure default: no one authorized) and recreate it in this v2
|
|
167
|
+
shape.
|
|
168
|
+
|
|
162
169
|
The server reads `access.json` directly at runtime and preserves runtime
|
|
163
170
|
observations and warnings in the same file.
|
|
164
171
|
|
|
@@ -162,35 +162,26 @@ function readDispatcherAccess(raw, path) {
|
|
|
162
162
|
if (!isRecord(raw)) {
|
|
163
163
|
throw new Error(`dispatcher access error in ${path}: top-level must be an object`);
|
|
164
164
|
}
|
|
165
|
+
// v2-only: the legacy v1 shape (`dm.allow_users` + `group.follow_users`) is no
|
|
166
|
+
// longer read or inferred. An unsupported or missing version fails loud — this
|
|
167
|
+
// file holds access authorization, so dreamux refuses to guess old permissions.
|
|
168
|
+
if (raw['version'] !== 2) {
|
|
169
|
+
const found = raw['version'] === undefined ? 'missing' : JSON.stringify(raw['version']);
|
|
170
|
+
throw new Error(`dispatcher access error in ${path}: unsupported schema version (found ${found}, expected 2).\n` +
|
|
171
|
+
'dreamux 0.x does not migrate old access state. This file controls access ' +
|
|
172
|
+
'authorization and old permissions will not be inferred. Delete it to return ' +
|
|
173
|
+
'to the secure default (no one is authorized), then recreate it as a v2 ' +
|
|
174
|
+
'access.json — set `allow_users` and `group.policy` — and restart. See the ' +
|
|
175
|
+
'access.json section in the dreamux README for the v2 shape.');
|
|
176
|
+
}
|
|
165
177
|
const defaults = defaultDispatcherAccessState();
|
|
166
|
-
const dm = isRecord(raw['dm']) ? raw['dm'] : {};
|
|
167
178
|
const group = isRecord(raw['group']) ? raw['group'] : {};
|
|
168
179
|
const lastGate = raw['last_gate'];
|
|
169
|
-
|
|
170
|
-
// - top-level `allow_users` (v2),
|
|
171
|
-
// - legacy `dm.allow_users` (v1 direct allowlist),
|
|
172
|
-
// - legacy `group.follow_users` (v1 group sender allowlist).
|
|
173
|
-
// They are merged and de-duplicated; the legacy fields are read but never
|
|
174
|
-
// written back, so the first save collapses the file to the v2 shape. The
|
|
175
|
-
// union means DM access becomes `dm.allow_users ∪ group.follow_users` — for
|
|
176
|
-
// the common case (the two were equal, or dm ⊇ follow) DM is unchanged.
|
|
177
|
-
const topAllow = readStringArray(raw, 'allow_users', [], path);
|
|
178
|
-
const legacyDmAllow = readStringArray(dm, 'allow_users', [], path);
|
|
179
|
-
const legacyFollow = readStringArray(group, 'follow_users', [], path);
|
|
180
|
-
const allowUsers = [...new Set([...topAllow, ...legacyDmAllow, ...legacyFollow])];
|
|
180
|
+
const allowUsers = readStringArray(raw, 'allow_users', [], path);
|
|
181
181
|
const allowChats = readStringArray(group, 'allow_chats', defaults.group.allow_chats, path);
|
|
182
|
-
// Group policy: an explicit value
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
// (never silently relax it to chat-only `allowlist`); then a non-empty
|
|
186
|
-
// `allow_chats` means chat-scoped gating; else the secure default.
|
|
187
|
-
const explicitPolicy = readGroupPolicy(group['policy'], path);
|
|
188
|
-
const policy = explicitPolicy ??
|
|
189
|
-
(legacyFollow.length > 0
|
|
190
|
-
? 'follow-user'
|
|
191
|
-
: allowChats.length > 0
|
|
192
|
-
? 'allowlist'
|
|
193
|
-
: defaults.group.policy);
|
|
182
|
+
// Group policy: an explicit value wins; an absent field falls back to the
|
|
183
|
+
// secure default. No inference from other fields — that was the v1 migration.
|
|
184
|
+
const policy = readGroupPolicy(group['policy'], path) ?? defaults.group.policy;
|
|
194
185
|
return {
|
|
195
186
|
version: 2,
|
|
196
187
|
allow_users: allowUsers,
|