botmux 2.105.0 → 2.105.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/cli/read-isolation.d.ts +2 -1
- package/dist/adapters/cli/read-isolation.d.ts.map +1 -1
- package/dist/adapters/cli/read-isolation.js +51 -4
- package/dist/adapters/cli/read-isolation.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +19 -0
- package/dist/cli.js.map +1 -1
- package/dist/core/session-manager.d.ts +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +22 -3
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/types.d.ts +3 -3
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/worker-pool.d.ts +4 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +27 -9
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/worker.js +5 -2
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +14 -14
- package/dist/workflows/events/payloads.d.ts +8 -8
- package/dist/workflows/events/schema.d.ts +452 -452
- package/package.json +1 -1
|
@@ -68,7 +68,8 @@ export interface V2IsolationContext {
|
|
|
68
68
|
* (the agent's botmux CLI needs its config/registry/pm2/data structure) — instead its
|
|
69
69
|
* cross-bot-SENSITIVE parts are denied surgically: bots.json, logs, other bots' lark
|
|
70
70
|
* configs / session files / send-creds / BOT_HOMEs, and the shared conversation-content
|
|
71
|
-
* dirs. Own BOT_HOME + own
|
|
71
|
+
* dirs (frozen-cards, queues, attachments, whiteboards, …). Own BOT_HOME + own
|
|
72
|
+
* session/cred + own attachments bucket + config/registry stay readable by default.
|
|
72
73
|
* Plus the system-credential stores. Everything else (code/repos/runtime) stays open.
|
|
73
74
|
*
|
|
74
75
|
* NOTE: per-bot session stores (`sessions-<appId>.json`) are denied by PATTERN — see
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-isolation.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/read-isolation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;8EAG8E;AAC9E,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM/D;AAED;;;;;;;;;;;;;wBAawB;AACxB,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9E;AAOD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED;;+EAE+E;AAC/E,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB;;+FAE2F;IAC3F,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,cAAc,EAAE,MAAM,CAAC;IACvB;;kFAE8E;IAC9E,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED
|
|
1
|
+
{"version":3,"file":"read-isolation.d.ts","sourceRoot":"","sources":["../../../src/adapters/cli/read-isolation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;8EAG8E;AAC9E,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM/D;AAED;;;;;;;;;;;;;wBAawB;AACxB,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9E;AAOD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED;;+EAE+E;AAC/E,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB;;+FAE2F;IAC3F,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,cAAc,EAAE,MAAM,CAAC;IACvB;;kFAE8E;IAC9E,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;uFAauF;AACvF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAwFlE;AAOD;;;;;;;;;;;2EAW2E;AAC3E,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAmBpE;AAED;;;;;;;uEAOuE;AACvE,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,GAAG;IACzD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAyBA;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB;qEACiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBlD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,GAAE,MAAM,EAAO,EACzB,cAAc,GAAE,MAAM,EAAO,EAC7B,YAAY,GAAE,MAAM,EAAO,EAC3B,WAAW,GAAE,MAAM,EAAO,GACzB,MAAM,CAwBR;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE1F"}
|
|
@@ -79,7 +79,8 @@ export function botHomePath(botmuxHome, appId) {
|
|
|
79
79
|
* (the agent's botmux CLI needs its config/registry/pm2/data structure) — instead its
|
|
80
80
|
* cross-bot-SENSITIVE parts are denied surgically: bots.json, logs, other bots' lark
|
|
81
81
|
* configs / session files / send-creds / BOT_HOMEs, and the shared conversation-content
|
|
82
|
-
* dirs. Own BOT_HOME + own
|
|
82
|
+
* dirs (frozen-cards, queues, attachments, whiteboards, …). Own BOT_HOME + own
|
|
83
|
+
* session/cred + own attachments bucket + config/registry stay readable by default.
|
|
83
84
|
* Plus the system-credential stores. Everything else (code/repos/runtime) stays open.
|
|
84
85
|
*
|
|
85
86
|
* NOTE: per-bot session stores (`sessions-<appId>.json`) are denied by PATTERN — see
|
|
@@ -128,10 +129,43 @@ export function buildV2DenyPaths(ctx) {
|
|
|
128
129
|
`${bh}/bots`,
|
|
129
130
|
`${sd}/sessions.json`, // legacy shared store
|
|
130
131
|
`${sd}/frozen-cards`, // conversation content (all bots')
|
|
131
|
-
`${sd}/turn-sends`,
|
|
132
|
+
`${sd}/turn-sends`, // CLI only APPENDS markers here — read-deny is safe
|
|
132
133
|
`${sd}/crash-diagnostics`,
|
|
134
|
+
// All bots' Feishu-uploaded files. Own per-appId bucket (attachments/<self>/) is
|
|
135
|
+
// re-allowed via buildV2CarveOuts; siblings' buckets + the legacy flat
|
|
136
|
+
// per-messageId layout stay denied.
|
|
133
137
|
`${sd}/attachments`,
|
|
134
|
-
|
|
138
|
+
// whiteboards/ is deliberately NOT denied (owner decision): whiteboards are
|
|
139
|
+
// shared content, meant to be visible across the bots that collaborate on
|
|
140
|
+
// them. NOTE the store is currently GLOBAL (no per-chat scoping), so a
|
|
141
|
+
// sandboxed bot can `whiteboard list`/`read` boards from other chats too —
|
|
142
|
+
// an accepted tradeoff until whiteboards are bucketed by chat/appId. Also
|
|
143
|
+
// un-denying the read avoids the read-modify-write clobber a deny would cause.
|
|
144
|
+
// Queued inbound messages (queues/<rootMessageId>.jsonl = full LarkMessage
|
|
145
|
+
// content for EVERY bot). Daemon-side only — the CLI never reads it.
|
|
146
|
+
`${sd}/queues`,
|
|
147
|
+
// Seatbelt profiles + reattach markers: filenames/rules enumerate sibling
|
|
148
|
+
// session ids and appIds. sandbox-exec parses the profile BEFORE applying it,
|
|
149
|
+
// and the markers are read by the daemon — the sandboxed CLI never reads these.
|
|
150
|
+
`${sd}/read-isolation`,
|
|
151
|
+
// NOTE: schedules.json is deliberately NOT denied. It's a read-modify-write
|
|
152
|
+
// store: denying the read makes a sandboxed `botmux schedule` load an empty
|
|
153
|
+
// map and then overwrite the shared file, silently wiping EVERY bot's tasks
|
|
154
|
+
// (read-modify-write degraded to write-only). We accept the minor leak
|
|
155
|
+
// (isolated bots can read others' scheduled prompts) until schedule-store
|
|
156
|
+
// fail-closes on read errors (ENOENT vs EPERM). See PR #387 review.
|
|
157
|
+
`${bh}/feishu-session.json`, // Feishu web login session (setup automation) — can mint bots
|
|
158
|
+
// The dashboard admin credentials. `.dashboard-secret` signs the loopback-HMAC
|
|
159
|
+
// that gates `/__cli/rotate` AND the daemon-IPC write-link routes — the ipc-server
|
|
160
|
+
// comment (dashboard-ipc-server.ts) explicitly relies on the sandbox hiding it to
|
|
161
|
+
// "keep a sandboxed worker from minting write tokens" for sessions it doesn't own
|
|
162
|
+
// (a cross-bot escalation reachable by a semi-trusted conversant driving the agent).
|
|
163
|
+
// Only owner-facing admin verbs (`botmux dashboard`/`term-link`) sign with it — the
|
|
164
|
+
// agent's send/list/status never do, so denying it costs the agent nothing. Its
|
|
165
|
+
// sibling `.dashboard-token` (dashboard bearer) is denied for the same reason;
|
|
166
|
+
// `.dashboard-port` is just a port number (no credential value) → left readable.
|
|
167
|
+
`${bh}/.dashboard-secret`,
|
|
168
|
+
`${bh}/.dashboard-token`,
|
|
135
169
|
// NOTE: extraDenyPaths (readDenyExtraPaths) are NOT here — they go to
|
|
136
170
|
// buildV2CarveOuts().finalDenyPaths so they win over the own-BOT_HOME allow.
|
|
137
171
|
]
|
|
@@ -163,6 +197,15 @@ export function buildV2DenyRegexes(ctx) {
|
|
|
163
197
|
// bots.json.bak / .tmp / .bak.<suffix> but NOT the exact bots.json (that is
|
|
164
198
|
// the subpath deny's job) and NOT an unrelated `bots.jsonx`.
|
|
165
199
|
`^${escapeForRegex(bh)}/bots\\.json\\.`,
|
|
200
|
+
// LEGACY pre-BOT_HOME send-cred files (`<sd>/.send-cred-<appId>`): current
|
|
201
|
+
// builds write send-cred.json inside BOT_HOME, but leftovers from older
|
|
202
|
+
// builds still carry live per-bot send credentials at the data root.
|
|
203
|
+
`^${escapeForRegex(sd)}/\\.send-cred-`,
|
|
204
|
+
// Per-bot user display-name caches (`identities-<appId>.json`): open_id→name
|
|
205
|
+
// PII of every bot's interlocutors. The CLI never reads them (daemon-side
|
|
206
|
+
// prompt injection only), so the OWN file gets NO carve-out — the whole
|
|
207
|
+
// filename class is denied.
|
|
208
|
+
`^${escapeForRegex(sd)}/identities-[^/]+\\.json$`,
|
|
166
209
|
];
|
|
167
210
|
}
|
|
168
211
|
/** The v2 Seatbelt carve-outs that accompany {@link buildV2DenyPaths} +
|
|
@@ -186,10 +229,14 @@ export function buildV2CarveOuts(ctx) {
|
|
|
186
229
|
// Own routing metadata (`botmux send` reads it to route replies); siblings'
|
|
187
230
|
// stay denied by the buildV2DenyRegexes filename pattern.
|
|
188
231
|
`${sd}/sessions-${self}.json`,
|
|
232
|
+
// Own Feishu-upload bucket (attachments/<appId>/<messageId>/…) — the agent must
|
|
233
|
+
// read files the user uploads in chat. getAttachmentsDir keys the bucket on the
|
|
234
|
+
// appId precisely so this spawn-time-static carve-out can exist.
|
|
235
|
+
`${sd}/attachments/${self}`,
|
|
189
236
|
],
|
|
190
237
|
// file-read-metadata on the wholesale-denied parents so the CLI/skill can realpath()
|
|
191
238
|
// through them WITHOUT `ls` (enumeration) leaking.
|
|
192
|
-
traverseDirs: [`${bh}/bots`, `${h}/.lark-cli-bots`],
|
|
239
|
+
traverseDirs: [`${bh}/bots`, `${h}/.lark-cli-bots`, `${sd}/attachments`],
|
|
193
240
|
finalDenyPaths: (ctx.extraDenyPaths ?? [])
|
|
194
241
|
.map(normalizeIsolationPath)
|
|
195
242
|
.filter((p) => !!p),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-isolation.js","sourceRoot":"","sources":["../../../src/adapters/cli/read-isolation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;8EAG8E;AAC9E,MAAM,UAAU,sBAAsB,CAAC,CAAS;IAC9C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;;wBAawB;AACxB,MAAM,UAAU,gBAAgB,CAAC,cAAsB,EAAE,KAAa;IACpE,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC9E,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,KAAK,CAAC,iBAAiB,CAAC;AAC5D,CAAC;AAED;;;uFAGuF;AACvF,MAAM,WAAW,GAAG,mBAAmB,CAAC;AACxC,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,wFAAwF;IACxF,wFAAwF;IACxF,8CAA8C;IAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,wDAAwD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;+EAE+E;AAC/E,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,KAAa;IAC3D,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5E,CAAC;AAmBD
|
|
1
|
+
{"version":3,"file":"read-isolation.js","sourceRoot":"","sources":["../../../src/adapters/cli/read-isolation.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAk7DA,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAk7DA,MAAM,MAAM,kBAAkB,GAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAo3HrF;;;;;;;;;;;GAWG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,qBAAqB,EAAE,SAAS,CAAC,EAC9F,KAAK,EAAE,MAAM,EACb,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,2BAA2B,EAAE,UAAU,GAAG,IAAI,CAAC,GACzF,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA8F7B"}
|
package/dist/cli.js
CHANGED
|
@@ -4172,6 +4172,11 @@ async function cmdQuoted(rest) {
|
|
|
4172
4172
|
console.error('用法: botmux quoted <message_id> [--session-id <id>]');
|
|
4173
4173
|
process.exit(1);
|
|
4174
4174
|
}
|
|
4175
|
+
// Read isolation: register this bot from its own send-cred file so the Lark
|
|
4176
|
+
// client (getMessageDetail below) is available WITHOUT reading the denied
|
|
4177
|
+
// bots.json — same as cmdHistory / cmdSend. Missing this was why a sandboxed
|
|
4178
|
+
// isolated bot's `botmux quoted` failed "Bot not registered".
|
|
4179
|
+
await registerSelfFromCredFile();
|
|
4175
4180
|
const { larkAppId: appId } = await resolveSessionAppId(sessionIdArg);
|
|
4176
4181
|
const { getMessageDetail } = await import('./im/lark/client.js');
|
|
4177
4182
|
const { expandMergeForward } = await import('./im/lark/merge-forward.js');
|
|
@@ -4195,6 +4200,20 @@ async function cmdQuoted(rest) {
|
|
|
4195
4200
|
if (merged)
|
|
4196
4201
|
rendered.content = merged.text;
|
|
4197
4202
|
}
|
|
4203
|
+
// The referenced message's file/media resources arrive as key+name only. A
|
|
4204
|
+
// read-isolated agent can't call the Lark resource API itself (bots.json
|
|
4205
|
+
// creds are deny-read), so download the bytes HERE — via the bot client
|
|
4206
|
+
// registered above — into this bot's OWN attachment bucket
|
|
4207
|
+
// (attachments/<appId>/<messageId>/, read-allowed by its carve-out; sandbox
|
|
4208
|
+
// denies file *reads*, not writes). Surface the local paths so the agent can
|
|
4209
|
+
// actually open the file instead of only seeing its key.
|
|
4210
|
+
if (rendered.resources?.length) {
|
|
4211
|
+
const { downloadResources } = await import('./core/session-manager.js');
|
|
4212
|
+
const { attachments, needLogin } = await downloadResources(appId, messageId, rendered.resources);
|
|
4213
|
+
rendered.attachments = attachments;
|
|
4214
|
+
if (needLogin)
|
|
4215
|
+
rendered.needLogin = true;
|
|
4216
|
+
}
|
|
4198
4217
|
console.log(JSON.stringify(rendered, null, 2));
|
|
4199
4218
|
}
|
|
4200
4219
|
catch (err) {
|