@spinabot/brigade 1.3.1 → 1.4.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/README.md +54 -10
- package/convex/config.d.ts +2 -2
- package/convex/extensions.d.ts +2 -2
- package/convex/logs.d.ts +2 -2
- package/convex/memory.d.ts +7 -7
- package/convex/messages.d.ts +4 -4
- package/convex/schema.d.ts +17 -17
- package/convex/subagents.d.ts +12 -12
- package/dist/agents/agent-loop.d.ts +1 -0
- package/dist/agents/agent-loop.d.ts.map +1 -1
- package/dist/agents/agent-loop.js +1 -1
- package/dist/agents/agent-loop.js.map +1 -1
- package/dist/agents/channels/access-control/format-allow-from.d.ts +50 -0
- package/dist/agents/channels/access-control/format-allow-from.d.ts.map +1 -0
- package/dist/agents/channels/access-control/format-allow-from.js +64 -0
- package/dist/agents/channels/access-control/format-allow-from.js.map +1 -0
- package/dist/agents/channels/access-control/index.d.ts +2 -1
- package/dist/agents/channels/access-control/index.d.ts.map +1 -1
- package/dist/agents/channels/access-control/index.js +2 -1
- package/dist/agents/channels/access-control/index.js.map +1 -1
- package/dist/agents/channels/access-control/store.d.ts +15 -0
- package/dist/agents/channels/access-control/store.d.ts.map +1 -1
- package/dist/agents/channels/access-control/store.js +44 -1
- package/dist/agents/channels/access-control/store.js.map +1 -1
- package/dist/agents/channels/bundled-channel-metas.d.ts +26 -0
- package/dist/agents/channels/bundled-channel-metas.d.ts.map +1 -0
- package/dist/agents/channels/bundled-channel-metas.js +44 -0
- package/dist/agents/channels/bundled-channel-metas.js.map +1 -0
- package/dist/agents/channels/channel-messaging-registry.d.ts +130 -0
- package/dist/agents/channels/channel-messaging-registry.d.ts.map +1 -0
- package/dist/agents/channels/channel-messaging-registry.js +211 -0
- package/dist/agents/channels/channel-messaging-registry.js.map +1 -0
- package/dist/agents/channels/channel-meta-registry.d.ts +60 -0
- package/dist/agents/channels/channel-meta-registry.d.ts.map +1 -0
- package/dist/agents/channels/channel-meta-registry.js +128 -0
- package/dist/agents/channels/channel-meta-registry.js.map +1 -0
- package/dist/agents/channels/channel-security-registry.d.ts +138 -0
- package/dist/agents/channels/channel-security-registry.d.ts.map +1 -0
- package/dist/agents/channels/channel-security-registry.js +265 -0
- package/dist/agents/channels/channel-security-registry.js.map +1 -0
- package/dist/agents/channels/exposure.d.ts +44 -0
- package/dist/agents/channels/exposure.d.ts.map +1 -0
- package/dist/agents/channels/exposure.js +48 -0
- package/dist/agents/channels/exposure.js.map +1 -0
- package/dist/agents/channels/general-callback.d.ts +25 -0
- package/dist/agents/channels/general-callback.d.ts.map +1 -0
- package/dist/agents/channels/general-callback.js +31 -0
- package/dist/agents/channels/general-callback.js.map +1 -0
- package/dist/agents/channels/inbound-pipeline.d.ts +9 -0
- package/dist/agents/channels/inbound-pipeline.d.ts.map +1 -1
- package/dist/agents/channels/inbound-pipeline.js +429 -39
- package/dist/agents/channels/inbound-pipeline.js.map +1 -1
- package/dist/agents/channels/markdown-capability.d.ts +44 -0
- package/dist/agents/channels/markdown-capability.d.ts.map +1 -0
- package/dist/agents/channels/markdown-capability.js +66 -0
- package/dist/agents/channels/markdown-capability.js.map +1 -0
- package/dist/agents/channels/sdk.d.ts +170 -10
- package/dist/agents/channels/sdk.d.ts.map +1 -1
- package/dist/agents/channels/sdk.js +138 -6
- package/dist/agents/channels/sdk.js.map +1 -1
- package/dist/agents/channels/telegram/account-config.d.ts +41 -0
- package/dist/agents/channels/telegram/account-config.d.ts.map +1 -1
- package/dist/agents/channels/telegram/account-config.js +79 -0
- package/dist/agents/channels/telegram/account-config.js.map +1 -1
- package/dist/agents/channels/telegram/adapter.d.ts +6 -0
- package/dist/agents/channels/telegram/adapter.d.ts.map +1 -1
- package/dist/agents/channels/telegram/adapter.js +178 -6
- package/dist/agents/channels/telegram/adapter.js.map +1 -1
- package/dist/agents/channels/telegram/allowed-updates.d.ts +14 -5
- package/dist/agents/channels/telegram/allowed-updates.d.ts.map +1 -1
- package/dist/agents/channels/telegram/allowed-updates.js +8 -4
- package/dist/agents/channels/telegram/allowed-updates.js.map +1 -1
- package/dist/agents/channels/telegram/connection.d.ts +108 -1
- package/dist/agents/channels/telegram/connection.d.ts.map +1 -1
- package/dist/agents/channels/telegram/connection.js +219 -3
- package/dist/agents/channels/telegram/connection.js.map +1 -1
- package/dist/agents/channels/telegram/draft-stream.d.ts +98 -0
- package/dist/agents/channels/telegram/draft-stream.d.ts.map +1 -0
- package/dist/agents/channels/telegram/draft-stream.js +222 -0
- package/dist/agents/channels/telegram/draft-stream.js.map +1 -0
- package/dist/agents/channels/telegram/inbound-extras.d.ts +10 -1
- package/dist/agents/channels/telegram/inbound-extras.d.ts.map +1 -1
- package/dist/agents/channels/telegram/inbound-extras.js +66 -0
- package/dist/agents/channels/telegram/inbound-extras.js.map +1 -1
- package/dist/agents/channels/telegram/inline-keyboard.d.ts +36 -0
- package/dist/agents/channels/telegram/inline-keyboard.d.ts.map +1 -0
- package/dist/agents/channels/telegram/inline-keyboard.js +62 -0
- package/dist/agents/channels/telegram/inline-keyboard.js.map +1 -0
- package/dist/agents/channels/telegram/plugin.d.ts.map +1 -1
- package/dist/agents/channels/telegram/plugin.js +7 -11
- package/dist/agents/channels/telegram/plugin.js.map +1 -1
- package/dist/agents/channels/telegram/reasoning-lane.d.ts +41 -0
- package/dist/agents/channels/telegram/reasoning-lane.d.ts.map +1 -0
- package/dist/agents/channels/telegram/reasoning-lane.js +67 -0
- package/dist/agents/channels/telegram/reasoning-lane.js.map +1 -0
- package/dist/agents/channels/telegram/socks-dispatcher.d.ts +32 -0
- package/dist/agents/channels/telegram/socks-dispatcher.d.ts.map +1 -0
- package/dist/agents/channels/telegram/socks-dispatcher.js +97 -0
- package/dist/agents/channels/telegram/socks-dispatcher.js.map +1 -0
- package/dist/agents/channels/types.adapters.d.ts +137 -4
- package/dist/agents/channels/types.adapters.d.ts.map +1 -1
- package/dist/agents/channels/types.adapters.js +2 -2
- package/dist/agents/channels/types.core.d.ts +26 -2
- package/dist/agents/channels/types.core.d.ts.map +1 -1
- package/dist/agents/channels/types.plugin.d.ts +25 -7
- package/dist/agents/channels/types.plugin.d.ts.map +1 -1
- package/dist/agents/channels/types.plugin.js +6 -5
- package/dist/agents/channels/types.plugin.js.map +1 -1
- package/dist/agents/channels/whatsapp/adapter.d.ts +8 -0
- package/dist/agents/channels/whatsapp/adapter.d.ts.map +1 -1
- package/dist/agents/channels/whatsapp/adapter.js +7 -4
- package/dist/agents/channels/whatsapp/adapter.js.map +1 -1
- package/dist/agents/channels/whatsapp/connection.d.ts +24 -2
- package/dist/agents/channels/whatsapp/connection.d.ts.map +1 -1
- package/dist/agents/channels/whatsapp/connection.js +26 -5
- package/dist/agents/channels/whatsapp/connection.js.map +1 -1
- package/dist/agents/channels/whatsapp/plugin.d.ts.map +1 -1
- package/dist/agents/channels/whatsapp/plugin.js +6 -10
- package/dist/agents/channels/whatsapp/plugin.js.map +1 -1
- package/dist/agents/extensions/activation-planner.d.ts +125 -0
- package/dist/agents/extensions/activation-planner.d.ts.map +1 -0
- package/dist/agents/extensions/activation-planner.js +221 -0
- package/dist/agents/extensions/activation-planner.js.map +1 -0
- package/dist/agents/extensions/diagnose.d.ts +84 -0
- package/dist/agents/extensions/diagnose.d.ts.map +1 -0
- package/dist/agents/extensions/diagnose.js +123 -0
- package/dist/agents/extensions/diagnose.js.map +1 -0
- package/dist/agents/extensions/discovery.d.ts +85 -7
- package/dist/agents/extensions/discovery.d.ts.map +1 -1
- package/dist/agents/extensions/discovery.js +200 -15
- package/dist/agents/extensions/discovery.js.map +1 -1
- package/dist/agents/extensions/index.d.ts +3 -2
- package/dist/agents/extensions/index.d.ts.map +1 -1
- package/dist/agents/extensions/index.js +3 -2
- package/dist/agents/extensions/index.js.map +1 -1
- package/dist/agents/extensions/install-scan.d.ts +63 -0
- package/dist/agents/extensions/install-scan.d.ts.map +1 -0
- package/dist/agents/extensions/install-scan.js +201 -0
- package/dist/agents/extensions/install-scan.js.map +1 -0
- package/dist/agents/extensions/install.d.ts +135 -0
- package/dist/agents/extensions/install.d.ts.map +1 -0
- package/dist/agents/extensions/install.js +414 -0
- package/dist/agents/extensions/install.js.map +1 -0
- package/dist/agents/extensions/loader.d.ts +13 -2
- package/dist/agents/extensions/loader.d.ts.map +1 -1
- package/dist/agents/extensions/loader.js +126 -13
- package/dist/agents/extensions/loader.js.map +1 -1
- package/dist/agents/extensions/registry.d.ts +109 -0
- package/dist/agents/extensions/registry.d.ts.map +1 -1
- package/dist/agents/extensions/registry.js +172 -0
- package/dist/agents/extensions/registry.js.map +1 -1
- package/dist/agents/extensions/sdk-alias.d.ts +45 -0
- package/dist/agents/extensions/sdk-alias.d.ts.map +1 -0
- package/dist/agents/extensions/sdk-alias.js +94 -0
- package/dist/agents/extensions/sdk-alias.js.map +1 -0
- package/dist/agents/extensions/types.d.ts +155 -1
- package/dist/agents/extensions/types.d.ts.map +1 -1
- package/dist/agents/extensions/types.js.map +1 -1
- package/dist/agents/tools/composio-tool.d.ts +9 -1
- package/dist/agents/tools/composio-tool.d.ts.map +1 -1
- package/dist/agents/tools/composio-tool.js +68 -4
- package/dist/agents/tools/composio-tool.js.map +1 -1
- package/dist/agents/tools/message-action-tool.d.ts +6 -1
- package/dist/agents/tools/message-action-tool.d.ts.map +1 -1
- package/dist/agents/tools/message-action-tool.js +52 -2
- package/dist/agents/tools/message-action-tool.js.map +1 -1
- package/dist/agents/tools/send-message-tool.d.ts +1 -0
- package/dist/agents/tools/send-message-tool.d.ts.map +1 -1
- package/dist/agents/tools/send-message-tool.js +56 -1
- package/dist/agents/tools/send-message-tool.js.map +1 -1
- package/dist/buildstamp.json +1 -1
- package/dist/channel-sdk.d.ts +28 -0
- package/dist/channel-sdk.d.ts.map +1 -0
- package/dist/channel-sdk.js +28 -0
- package/dist/channel-sdk.js.map +1 -0
- package/dist/cli/commands/channels.d.ts.map +1 -1
- package/dist/cli/commands/channels.js +8 -8
- package/dist/cli/commands/channels.js.map +1 -1
- package/dist/cli/commands/connect.d.ts +8 -11
- package/dist/cli/commands/connect.d.ts.map +1 -1
- package/dist/cli/commands/connect.js +157 -17
- package/dist/cli/commands/connect.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +64 -0
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/extensions.d.ts +46 -0
- package/dist/cli/commands/extensions.d.ts.map +1 -0
- package/dist/cli/commands/extensions.js +578 -0
- package/dist/cli/commands/extensions.js.map +1 -0
- package/dist/cli/commands/gateway.d.ts.map +1 -1
- package/dist/cli/commands/gateway.js +6 -0
- package/dist/cli/commands/gateway.js.map +1 -1
- package/dist/cli/commands/pairing.d.ts.map +1 -1
- package/dist/cli/commands/pairing.js +16 -2
- package/dist/cli/commands/pairing.js.map +1 -1
- package/dist/cli/commands/update.d.ts +17 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +104 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/program/build-program.d.ts.map +1 -1
- package/dist/cli/program/build-program.js +113 -0
- package/dist/cli/program/build-program.js.map +1 -1
- package/dist/config/paths.d.ts +1 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +9 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/core/gateway-probe.d.ts.map +1 -1
- package/dist/core/gateway-probe.js +9 -1
- package/dist/core/gateway-probe.js.map +1 -1
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +134 -2
- package/dist/core/server.js.map +1 -1
- package/dist/protocol.d.ts +25 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/system-prompt/assembler.d.ts.map +1 -1
- package/dist/system-prompt/assembler.js +17 -0
- package/dist/system-prompt/assembler.js.map +1 -1
- package/dist/system-prompt/identity-defaults.d.ts +28 -0
- package/dist/system-prompt/identity-defaults.d.ts.map +1 -1
- package/dist/system-prompt/identity-defaults.js +47 -0
- package/dist/system-prompt/identity-defaults.js.map +1 -1
- package/dist/ui/editor.d.ts.map +1 -1
- package/dist/ui/editor.js +1 -0
- package/dist/ui/editor.js.map +1 -1
- package/dist/version.d.ts +4 -3
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +27 -5
- package/dist/version.js.map +1 -1
- package/package.json +21 -4
- package/scripts/build-done.mjs +11 -2
|
@@ -2,13 +2,20 @@
|
|
|
2
2
|
* User-module discovery.
|
|
3
3
|
*
|
|
4
4
|
* Out-of-tree modules dropped into `~/.brigade/extensions/` are discovered and
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Each must `export default` a `BrigadeModule` (or an
|
|
8
|
-
* else is skipped with a warning — a bad user module
|
|
5
|
+
* imported here, alongside the bundled ones. A candidate is either a top-level
|
|
6
|
+
* `*.js`/`*.mjs`/`*.ts`/`*.mts` file or a folder containing
|
|
7
|
+
* `index.{js,mjs,ts,mts}`. Each must `export default` a `BrigadeModule` (or an
|
|
8
|
+
* array of them); anything else is skipped with a warning — a bad user module
|
|
9
|
+
* never aborts boot. `.d.ts` declaration files are NOT candidates.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
11
|
+
* TypeScript-authored modules load directly: imports go through a Jiti instance
|
|
12
|
+
* that transpiles `.ts`/`.mts` on import, so authors don't need a build step.
|
|
13
|
+
*
|
|
14
|
+
* Authors import the stable `brigade/extension-sdk` / `brigade/channel-sdk`
|
|
15
|
+
* surface (defineModule + the capability contracts), so a user module never
|
|
16
|
+
* reaches into Brigade internals. Those specifiers are alias-resolved to
|
|
17
|
+
* Brigade's own built SDK entry points by the Jiti instance (see `sdk-alias.ts`),
|
|
18
|
+
* so the author does NOT install Brigade into the extensions folder.
|
|
12
19
|
*
|
|
13
20
|
* POSIX safety gates (non-Windows only): world-writable files are rejected
|
|
14
21
|
* (mode & 0o002), suspicious ownership (uid != current uid AND != root) is
|
|
@@ -16,18 +23,32 @@
|
|
|
16
23
|
* rejected. Each rejection logs WHY and skips the candidate; the loader
|
|
17
24
|
* continues with the rest.
|
|
18
25
|
*/
|
|
19
|
-
import { existsSync, readdirSync, realpathSync, statSync } from "node:fs";
|
|
26
|
+
import { existsSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
|
|
20
27
|
import path from "node:path";
|
|
21
|
-
import { pathToFileURL } from "node:url";
|
|
22
28
|
import { createSubsystemLogger } from "../../logging/subsystem-logger.js";
|
|
29
|
+
import { createExtensionSdkJiti } from "./sdk-alias.js";
|
|
23
30
|
const log = createSubsystemLogger("extensions/discovery");
|
|
24
31
|
// A user module whose top-level module init hangs (e.g. a stray top-level
|
|
25
32
|
// `await`) must not wedge a turn or boot. Cap each import; a slow one is
|
|
26
33
|
// logged + skipped (the import keeps running detached but we move on).
|
|
27
34
|
const IMPORT_TIMEOUT_MS = 5_000;
|
|
28
|
-
|
|
35
|
+
// Single Jiti instance shared across every candidate (per process). It carries
|
|
36
|
+
// the SDK alias (`brigade/extension-sdk` / `brigade/channel-sdk` → Brigade's own
|
|
37
|
+
// built entries) and the TypeScript transpile config. Created lazily so the cost
|
|
38
|
+
// is only paid when at least one user module is actually imported.
|
|
39
|
+
let sharedJiti = null;
|
|
40
|
+
function getExtensionJiti() {
|
|
41
|
+
sharedJiti ??= createExtensionSdkJiti(import.meta.url);
|
|
42
|
+
return sharedJiti;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Import a candidate through the shared Jiti instance (applies the SDK alias +
|
|
46
|
+
* TS transpile), racing against `IMPORT_TIMEOUT_MS`. Jiti takes an absolute file
|
|
47
|
+
* path (not a `file://` URL), and resolves `.ts`/`.mts`/`.js` itself.
|
|
48
|
+
*/
|
|
49
|
+
function importWithTimeout(absPath) {
|
|
29
50
|
return Promise.race([
|
|
30
|
-
import(
|
|
51
|
+
getExtensionJiti().import(absPath),
|
|
31
52
|
new Promise((_, reject) => {
|
|
32
53
|
const t = setTimeout(() => reject(new Error(`import timed out after ${IMPORT_TIMEOUT_MS}ms`)), IMPORT_TIMEOUT_MS);
|
|
33
54
|
t.unref?.();
|
|
@@ -45,9 +66,27 @@ function isModule(value) {
|
|
|
45
66
|
function isManifest(value) {
|
|
46
67
|
return !!value && typeof value === "object" && typeof value.id === "string";
|
|
47
68
|
}
|
|
48
|
-
|
|
69
|
+
// Accepted top-level / index entry extensions. `.d.ts` is excluded explicitly
|
|
70
|
+
// in `isCandidateFile` — it is a declaration file, never an importable module.
|
|
71
|
+
const ENTRY_EXTENSIONS = [".js", ".mjs", ".ts", ".mts"];
|
|
72
|
+
// Directory index basenames, in PRECEDENCE order. When a folder ships more than
|
|
73
|
+
// one (e.g. both a precompiled `index.js` and a source `index.ts`), the FIRST
|
|
74
|
+
// match here wins — compiled (`.js`/`.mjs`) is preferred over source
|
|
75
|
+
// (`.ts`/`.mts`) so a built artifact takes precedence over its own source, and
|
|
76
|
+
// the runtime stays deterministic regardless of readdir order.
|
|
77
|
+
const DIR_INDEX_BASENAMES = ["index.js", "index.mjs", "index.ts", "index.mts"];
|
|
78
|
+
/** Is `name` an importable top-level entry file? Accepts the entry extensions
|
|
79
|
+
* but rejects `.d.ts` declaration files. */
|
|
80
|
+
function isCandidateFile(name) {
|
|
81
|
+
if (name.endsWith(".d.ts"))
|
|
82
|
+
return false;
|
|
83
|
+
return ENTRY_EXTENSIONS.some((ext) => name.endsWith(ext));
|
|
84
|
+
}
|
|
85
|
+
/** Resolve the import entry for a directory candidate
|
|
86
|
+
* (index.{js,mjs,ts,mts}). Picks the first present per DIR_INDEX_BASENAMES
|
|
87
|
+
* precedence (compiled before source). */
|
|
49
88
|
function dirEntry(dir) {
|
|
50
|
-
for (const name of
|
|
89
|
+
for (const name of DIR_INDEX_BASENAMES) {
|
|
51
90
|
const candidate = path.join(dir, name);
|
|
52
91
|
try {
|
|
53
92
|
if (statSync(candidate).isFile())
|
|
@@ -134,7 +173,7 @@ function candidateEntries(extensionsDir) {
|
|
|
134
173
|
catch {
|
|
135
174
|
continue;
|
|
136
175
|
}
|
|
137
|
-
if (st.isFile() && (name
|
|
176
|
+
if (st.isFile() && isCandidateFile(name)) {
|
|
138
177
|
entries.push(full);
|
|
139
178
|
}
|
|
140
179
|
else if (st.isDirectory()) {
|
|
@@ -145,6 +184,122 @@ function candidateEntries(extensionsDir) {
|
|
|
145
184
|
}
|
|
146
185
|
return entries;
|
|
147
186
|
}
|
|
187
|
+
// ── Sidecar manifest (plugin SDK Step 5: manifest-driven lazy activation) ──
|
|
188
|
+
//
|
|
189
|
+
// A user module may ship a `brigade.extension.json` next to its entry so the
|
|
190
|
+
// discovery planner can read activation metadata WITHOUT importing the module
|
|
191
|
+
// body (the whole point of lazy activation — a non-triggered module is never
|
|
192
|
+
// imported, so its top-level never runs). The sidecar lives:
|
|
193
|
+
// - for a folder module: `<dir>/brigade.extension.json` (next to its index);
|
|
194
|
+
// - for a file module: `<basename>.brigade.extension.json` next to the file,
|
|
195
|
+
// with a fall back to a shared `brigade.extension.json` in the same dir.
|
|
196
|
+
// When absent, the loader falls back to importing the module to read its
|
|
197
|
+
// `manifest` field (today's behavior). A malformed / unreadable sidecar is
|
|
198
|
+
// ignored (logged) and treated as absent — it never aborts discovery.
|
|
199
|
+
const SIDECAR_BASENAME = "brigade.extension.json";
|
|
200
|
+
/**
|
|
201
|
+
* Read the sidecar manifest for a candidate entry, WITHOUT importing the module.
|
|
202
|
+
* `source` is the resolved entry path (a file, or a dir's `index.*`). Returns the
|
|
203
|
+
* parsed `BrigadeModuleManifest` when a readable, well-formed sidecar exists;
|
|
204
|
+
* `undefined` otherwise (no sidecar, unreadable, malformed, or wrong shape).
|
|
205
|
+
*/
|
|
206
|
+
export function readSidecarManifest(source) {
|
|
207
|
+
const dir = path.dirname(source);
|
|
208
|
+
const base = path.basename(source);
|
|
209
|
+
// Candidate sidecar locations, in precedence order: a file-specific
|
|
210
|
+
// `<name>.brigade.extension.json`, then the dir-shared `brigade.extension.json`.
|
|
211
|
+
const stem = base.replace(/\.(js|mjs|ts|mts)$/i, "");
|
|
212
|
+
const candidates = [
|
|
213
|
+
path.join(dir, `${stem}.${SIDECAR_BASENAME}`),
|
|
214
|
+
path.join(dir, SIDECAR_BASENAME),
|
|
215
|
+
];
|
|
216
|
+
for (const sidecar of candidates) {
|
|
217
|
+
let raw;
|
|
218
|
+
try {
|
|
219
|
+
if (!statSync(sidecar).isFile())
|
|
220
|
+
continue;
|
|
221
|
+
raw = readFileSync(sidecar, "utf8");
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
continue; // not present / unreadable — try the next location
|
|
225
|
+
}
|
|
226
|
+
try {
|
|
227
|
+
const parsed = JSON.parse(raw);
|
|
228
|
+
if (isManifest(parsed))
|
|
229
|
+
return parsed;
|
|
230
|
+
log.warn("ignored sidecar manifest — not a valid BrigadeModuleManifest (needs string id)", {
|
|
231
|
+
sidecar,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
catch (err) {
|
|
235
|
+
log.warn("ignored sidecar manifest — JSON parse failed", {
|
|
236
|
+
sidecar,
|
|
237
|
+
error: err instanceof Error ? err.message : String(err),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
// A present-but-bad sidecar at this location stops the search — we don't
|
|
241
|
+
// silently fall through to a dir-shared one when a file-specific sidecar
|
|
242
|
+
// exists but is malformed (that would mask the operator's typo).
|
|
243
|
+
return undefined;
|
|
244
|
+
}
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* List discovery candidates under `extensionsDir` with each one's POSIX safety
|
|
249
|
+
* verdict + its sidecar manifest (read WITHOUT importing the module body). This
|
|
250
|
+
* is the lazy-activation entry point: the loader plans activation from the
|
|
251
|
+
* sidecar manifest and only imports the candidates that survive the plan. Never
|
|
252
|
+
* imports anything; never throws (an unreadable sidecar is treated as absent).
|
|
253
|
+
*/
|
|
254
|
+
export function listDiscoveryCandidates(extensionsDir) {
|
|
255
|
+
const out = [];
|
|
256
|
+
for (const source of candidateEntries(extensionsDir)) {
|
|
257
|
+
const safetyReason = checkPosixSafety(source, extensionsDir);
|
|
258
|
+
const manifest = safetyReason ? undefined : readSidecarManifest(source);
|
|
259
|
+
out.push({ source, safetyReason, manifest });
|
|
260
|
+
}
|
|
261
|
+
return out;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Import a single candidate the same way `discoverUserModules` does — through the
|
|
265
|
+
* shared SDK-alias + TypeScript Jiti instance, time-boxed — and return the
|
|
266
|
+
* discovered module(s) plus the resolved manifest. Used by the loader's lazy
|
|
267
|
+
* path AFTER the activation planner decides (from a sidecar) that the module
|
|
268
|
+
* should load, OR when the candidate shipped no sidecar so the body must be read
|
|
269
|
+
* to recover its `manifest` field. The POSIX safety gate is the caller's
|
|
270
|
+
* responsibility (mirrors `importCandidateForDiagnosis`). Returns `[]` on
|
|
271
|
+
* import failure (logged), so a bad module never aborts the load.
|
|
272
|
+
*
|
|
273
|
+
* `sidecarManifest` (when provided) takes precedence over a body-carried manifest
|
|
274
|
+
* — the operator's declarative sidecar is authoritative.
|
|
275
|
+
*/
|
|
276
|
+
export async function importDiscoveredModules(source, sidecarManifest) {
|
|
277
|
+
const out = [];
|
|
278
|
+
try {
|
|
279
|
+
const imported = (await importWithTimeout(source));
|
|
280
|
+
const exported = imported.default ?? imported.module;
|
|
281
|
+
const candidates = Array.isArray(exported) ? exported : [exported];
|
|
282
|
+
const topLevelManifest = isManifest(imported.manifest) ? imported.manifest : undefined;
|
|
283
|
+
for (const c of candidates) {
|
|
284
|
+
if (isModule(c)) {
|
|
285
|
+
const manifest = sidecarManifest ??
|
|
286
|
+
topLevelManifest ??
|
|
287
|
+
(isManifest(c.manifest) ? c.manifest : undefined);
|
|
288
|
+
out.push({ module: c, origin: "user", source, manifest });
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
log.warn("ignored user extension — no default BrigadeModule export", { source });
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch (err) {
|
|
296
|
+
log.warn("failed to import user extension — skipping", {
|
|
297
|
+
source,
|
|
298
|
+
error: err instanceof Error ? err.message : String(err),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
return out;
|
|
302
|
+
}
|
|
148
303
|
// Process-lifetime cache keyed by dir. The per-turn agent path and the gateway
|
|
149
304
|
// both call discovery; without this they'd readdir+stat (and re-run the import
|
|
150
305
|
// resolution) on every turn. Node already caches the dynamic imports themselves;
|
|
@@ -186,9 +341,39 @@ export function listExtensionSources(extensionsDir) {
|
|
|
186
341
|
export function extensionsRootExists(extensionsDir) {
|
|
187
342
|
return existsSync(extensionsDir);
|
|
188
343
|
}
|
|
189
|
-
/** Drop the discovery cache so the next `discoverUserModules` re-scans (reload).
|
|
344
|
+
/** Drop the discovery cache so the next `discoverUserModules` re-scans (reload).
|
|
345
|
+
* Also drops the shared Jiti instance so a reloaded module is re-transpiled
|
|
346
|
+
* fresh rather than served from Jiti's own module cache. */
|
|
190
347
|
export function clearDiscoveryCache() {
|
|
191
348
|
discoveryCache.clear();
|
|
349
|
+
sharedJiti = null;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Import a single candidate the same way `discoverUserModules` does — through
|
|
353
|
+
* the shared SDK-alias + TypeScript Jiti instance, time-boxed — and report what
|
|
354
|
+
* came back, without recording anything into a registry. This is the engine
|
|
355
|
+
* behind `brigade extensions doctor`'s "did my plugin import + export a module?"
|
|
356
|
+
* diagnosis. Callers run `checkPosixSafety` FIRST; this only runs for a
|
|
357
|
+
* candidate that passed the safety gate.
|
|
358
|
+
*/
|
|
359
|
+
export async function importCandidateForDiagnosis(source) {
|
|
360
|
+
try {
|
|
361
|
+
const imported = (await importWithTimeout(source));
|
|
362
|
+
const exported = imported.default ?? imported.module;
|
|
363
|
+
const candidates = Array.isArray(exported) ? exported : [exported];
|
|
364
|
+
const firstModule = candidates.find((c) => isModule(c));
|
|
365
|
+
if (firstModule) {
|
|
366
|
+
return { imported: true, hasValidModule: true, moduleId: firstModule.id };
|
|
367
|
+
}
|
|
368
|
+
return { imported: true, hasValidModule: false };
|
|
369
|
+
}
|
|
370
|
+
catch (err) {
|
|
371
|
+
return {
|
|
372
|
+
imported: false,
|
|
373
|
+
hasValidModule: false,
|
|
374
|
+
error: err instanceof Error ? err.message : String(err),
|
|
375
|
+
};
|
|
376
|
+
}
|
|
192
377
|
}
|
|
193
378
|
/**
|
|
194
379
|
* Discover + import user modules from `extensionsDir`. Returns the loaded
|
|
@@ -217,7 +402,7 @@ export async function discoverUserModules(extensionsDir) {
|
|
|
217
402
|
continue;
|
|
218
403
|
}
|
|
219
404
|
try {
|
|
220
|
-
const imported = (await importWithTimeout(
|
|
405
|
+
const imported = (await importWithTimeout(source));
|
|
221
406
|
const exported = imported.default ?? imported.module;
|
|
222
407
|
const candidates = Array.isArray(exported) ? exported : [exported];
|
|
223
408
|
// A module may carry `manifest` either as a top-level named export OR
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/agents/extensions/discovery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/agents/extensions/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export { defineModule } from "./types.js";
|
|
10
10
|
export type { BrigadeExtensionContext, BrigadeModule, ChannelAdapter, ChannelCommand, ChannelCommandContext, ChannelStartContext, GatewayCaller, GatewayMethodHandler, HttpRoute, HttpRouteHandler, InboundMessage, Integration, MediaGenProvider, Service, ServiceStartContext, SpeechProvider, TranscriptionProvider, } from "./types.js";
|
|
11
|
-
export { BrigadeExtensionRegistry, type RegistryContextMeta } from "./registry.js";
|
|
12
|
-
export { clearDiscoveryCache, discoverUserModules, type DiscoveredModule } from "./discovery.js";
|
|
11
|
+
export { BrigadeExtensionRegistry, diffCapabilityIds, type PluginCapabilityIds, type PluginRecord, type PluginRecordStatus, type RegistryContextMeta, } from "./registry.js";
|
|
12
|
+
export { clearDiscoveryCache, discoverUserModules, type DiscoveredModule, type DiscoveryCandidate, importDiscoveredModules, listDiscoveryCandidates, readSidecarManifest, } from "./discovery.js";
|
|
13
|
+
export { type ActivationDecision, type ActivationSnapshot, BUILTIN_CHANNEL_COMMAND_NAMES, buildActivationSnapshot, planActivation, } from "./activation-planner.js";
|
|
13
14
|
export { loadModules, type LoadModulesArgs } from "./loader.js";
|
|
14
15
|
export { BUNDLED_MODULES } from "./modules/index.js";
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EACX,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,mBAAmB,EACnB,cAAc,EACd,qBAAqB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EACX,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,mBAAmB,EACnB,cAAc,EACd,qBAAqB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EACN,wBAAwB,EACxB,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,cAAc,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* memory note `project_brigade_extensibility_plan`.
|
|
8
8
|
*/
|
|
9
9
|
export { defineModule } from "./types.js";
|
|
10
|
-
export { BrigadeExtensionRegistry } from "./registry.js";
|
|
11
|
-
export { clearDiscoveryCache, discoverUserModules } from "./discovery.js";
|
|
10
|
+
export { BrigadeExtensionRegistry, diffCapabilityIds, } from "./registry.js";
|
|
11
|
+
export { clearDiscoveryCache, discoverUserModules, importDiscoveredModules, listDiscoveryCandidates, readSidecarManifest, } from "./discovery.js";
|
|
12
|
+
export { BUILTIN_CHANNEL_COMMAND_NAMES, buildActivationSnapshot, planActivation, } from "./activation-planner.js";
|
|
12
13
|
export { loadModules } from "./loader.js";
|
|
13
14
|
export { BUNDLED_MODULES } from "./modules/index.js";
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAoB1C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAoB1C,OAAO,EACN,wBAAwB,EACxB,iBAAiB,GAKjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,mBAAmB,EAGnB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGN,6BAA6B,EAC7B,uBAAuB,EACvB,cAAc,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAwB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install-time security scan — a static, read-only pattern sweep over an
|
|
3
|
+
* installed extension's source so the operator sees what a freshly-added
|
|
4
|
+
* module CAN reach BEFORE it ever runs.
|
|
5
|
+
*
|
|
6
|
+
* This is a transparency surface, NOT a sandbox. Every construct it flags is
|
|
7
|
+
* dual-use: a channel adapter legitimately opens network sockets, a tool
|
|
8
|
+
* legitimately spawns a subprocess, a memory backend legitimately writes files.
|
|
9
|
+
* So the scan SURFACES findings as a warning the operator acknowledges — it
|
|
10
|
+
* never hard-blocks an install. The point is informed consent: "this plugin
|
|
11
|
+
* runs shell commands and reads your environment — proceed?".
|
|
12
|
+
*
|
|
13
|
+
* The scan is deliberately simple (line-regex over source text, no AST / no
|
|
14
|
+
* execution): it must run fast on an untrusted tree without importing or
|
|
15
|
+
* evaluating any of it. False positives are acceptable; the operator reads the
|
|
16
|
+
* snippet and decides. It walks only the source-text files of the module
|
|
17
|
+
* (skipping node_modules, lockfiles, binaries, and oversized files) so the
|
|
18
|
+
* report stays focused on the author's own code.
|
|
19
|
+
*/
|
|
20
|
+
/** How alarming a finding is. `high` = direct code-exec or shell reach. */
|
|
21
|
+
export type ScanSeverity = "high" | "medium" | "low";
|
|
22
|
+
/** One matched risky construct in the installed source. */
|
|
23
|
+
export interface ScanFinding {
|
|
24
|
+
/** Stable rule id (e.g. `dynamic-eval`). */
|
|
25
|
+
rule: string;
|
|
26
|
+
severity: ScanSeverity;
|
|
27
|
+
/** One plain-language line: what this construct can do. */
|
|
28
|
+
note: string;
|
|
29
|
+
/** Source file the match was found in (relative to the scanned root). */
|
|
30
|
+
file: string;
|
|
31
|
+
/** 1-based line number of the match. */
|
|
32
|
+
line: number;
|
|
33
|
+
/** The matched line, trimmed + length-capped, for the operator to eyeball. */
|
|
34
|
+
snippet: string;
|
|
35
|
+
}
|
|
36
|
+
/** Aggregate result of a scan pass. */
|
|
37
|
+
export interface ScanReport {
|
|
38
|
+
/** Every finding, in file + line order. */
|
|
39
|
+
findings: ScanFinding[];
|
|
40
|
+
/** Count of source files actually scanned (after skip rules). */
|
|
41
|
+
filesScanned: number;
|
|
42
|
+
/** Tallies by severity, for the one-line summary. */
|
|
43
|
+
counts: {
|
|
44
|
+
high: number;
|
|
45
|
+
medium: number;
|
|
46
|
+
low: number;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Scan a single block of source TEXT (already read) for risky constructs. Split
|
|
51
|
+
* out so tests can feed sample source directly without touching disk. `fileLabel`
|
|
52
|
+
* is what each finding records as its `file`.
|
|
53
|
+
*/
|
|
54
|
+
export declare function scanSourceText(source: string, fileLabel: string): ScanFinding[];
|
|
55
|
+
/**
|
|
56
|
+
* Statically scan an installed module directory for dual-use constructs. Reads
|
|
57
|
+
* source files only (no import / no execution). Never throws — an unreadable
|
|
58
|
+
* file is skipped. Findings are sorted by file then line for a stable report.
|
|
59
|
+
*/
|
|
60
|
+
export declare function scanInstalledModule(moduleDir: string): ScanReport;
|
|
61
|
+
/** One-line human summary of a scan report (e.g. "2 high, 1 medium"). */
|
|
62
|
+
export declare function summarizeScan(report: ScanReport): string;
|
|
63
|
+
//# sourceMappingURL=install-scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-scan.d.ts","sourceRoot":"","sources":["../../../src/agents/extensions/install-scan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,2EAA2E;AAC3E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAErD,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC3B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;IACvB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,uCAAuC;AACvC,MAAM,WAAW,UAAU;IAC1B,2CAA2C;IAC3C,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AA0HD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAwB/E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAmBjE;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAQxD"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install-time security scan — a static, read-only pattern sweep over an
|
|
3
|
+
* installed extension's source so the operator sees what a freshly-added
|
|
4
|
+
* module CAN reach BEFORE it ever runs.
|
|
5
|
+
*
|
|
6
|
+
* This is a transparency surface, NOT a sandbox. Every construct it flags is
|
|
7
|
+
* dual-use: a channel adapter legitimately opens network sockets, a tool
|
|
8
|
+
* legitimately spawns a subprocess, a memory backend legitimately writes files.
|
|
9
|
+
* So the scan SURFACES findings as a warning the operator acknowledges — it
|
|
10
|
+
* never hard-blocks an install. The point is informed consent: "this plugin
|
|
11
|
+
* runs shell commands and reads your environment — proceed?".
|
|
12
|
+
*
|
|
13
|
+
* The scan is deliberately simple (line-regex over source text, no AST / no
|
|
14
|
+
* execution): it must run fast on an untrusted tree without importing or
|
|
15
|
+
* evaluating any of it. False positives are acceptable; the operator reads the
|
|
16
|
+
* snippet and decides. It walks only the source-text files of the module
|
|
17
|
+
* (skipping node_modules, lockfiles, binaries, and oversized files) so the
|
|
18
|
+
* report stays focused on the author's own code.
|
|
19
|
+
*/
|
|
20
|
+
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
21
|
+
import path from "node:path";
|
|
22
|
+
// The rule set. Each entry is intentionally broad — a hit means "this construct
|
|
23
|
+
// is present", which the operator interprets. Ordered high → low so the most
|
|
24
|
+
// important rules read first in the source.
|
|
25
|
+
const RULES = [
|
|
26
|
+
{
|
|
27
|
+
rule: "dynamic-eval",
|
|
28
|
+
severity: "high",
|
|
29
|
+
note: "evaluates code from a string at runtime (eval)",
|
|
30
|
+
pattern: /\beval\s*\(/,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
rule: "function-constructor",
|
|
34
|
+
severity: "high",
|
|
35
|
+
note: "builds and runs code via the Function constructor",
|
|
36
|
+
pattern: /\bnew\s+Function\s*\(/,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
rule: "child-process",
|
|
40
|
+
severity: "high",
|
|
41
|
+
note: "runs other programs / shell commands (child_process)",
|
|
42
|
+
pattern: /\bchild_process\b|\bnode:child_process\b/,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
rule: "process-spawn",
|
|
46
|
+
severity: "high",
|
|
47
|
+
note: "spawns or executes a subprocess (spawn / exec / execSync / fork)",
|
|
48
|
+
pattern: /\b(?:exec|execSync|execFile|execFileSync|spawn|spawnSync|fork)\s*\(/,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
rule: "network-client",
|
|
52
|
+
severity: "medium",
|
|
53
|
+
note: "opens outbound network connections (net / tls / dgram sockets)",
|
|
54
|
+
pattern: /\b(?:node:)?(?:net|tls|dgram)\b|\.(?:createConnection|connect)\s*\(/,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
rule: "http-client",
|
|
58
|
+
severity: "medium",
|
|
59
|
+
note: "makes HTTP(S) requests (fetch / http / https / axios / got)",
|
|
60
|
+
pattern: /\b(?:node:)?https?\b|\bfetch\s*\(|\baxios\b|\bgot\s*\(|\bundici\b|\bXMLHttpRequest\b/,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
rule: "filesystem-write",
|
|
64
|
+
severity: "medium",
|
|
65
|
+
note: "writes or deletes files on disk (fs write / unlink / rm)",
|
|
66
|
+
pattern: /\b(?:writeFile|writeFileSync|appendFile|appendFileSync|createWriteStream|unlink|unlinkSync|rm|rmSync|rmdir|rmdirSync|mkdir|mkdirSync)\s*\(/,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
rule: "env-enumeration",
|
|
70
|
+
severity: "low",
|
|
71
|
+
note: "reads the full process environment (process.env enumeration)",
|
|
72
|
+
pattern: /process\.env\b\s*(?:\)|,|\]|\}|;|$)|Object\.(?:keys|entries|values|assign)\s*\(\s*process\.env\b|\{\s*\.\.\.\s*process\.env\b/,
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
// Files whose CONTENT we scan — author source, not data/binaries/deps.
|
|
76
|
+
const SCANNED_EXTENSIONS = new Set([".js", ".mjs", ".cjs", ".ts", ".mts", ".cts", ".jsx", ".tsx"]);
|
|
77
|
+
// Directories we never descend into: vendored deps + VCS metadata. A plugin's
|
|
78
|
+
// own code is what the operator is consenting to; its dependencies are out of
|
|
79
|
+
// scope for this lightweight surface (and would drown the report).
|
|
80
|
+
const SKIP_DIRS = new Set(["node_modules", ".git", ".hg", ".svn", "dist", "build", ".cache"]);
|
|
81
|
+
// Hard caps so a pathological tree can't wedge the scan.
|
|
82
|
+
const MAX_FILE_BYTES = 512 * 1024; // skip files larger than 512 KiB
|
|
83
|
+
const MAX_FILES = 2_000; // stop after this many source files
|
|
84
|
+
const SNIPPET_MAX = 160; // trim each surfaced snippet to this many chars
|
|
85
|
+
/** Recursively collect scannable source files under `root` (bounded). */
|
|
86
|
+
function collectSourceFiles(root) {
|
|
87
|
+
const out = [];
|
|
88
|
+
const stack = [root];
|
|
89
|
+
while (stack.length > 0 && out.length < MAX_FILES) {
|
|
90
|
+
const dir = stack.pop();
|
|
91
|
+
let names;
|
|
92
|
+
try {
|
|
93
|
+
names = readdirSync(dir);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
for (const name of names) {
|
|
99
|
+
if (out.length >= MAX_FILES)
|
|
100
|
+
break;
|
|
101
|
+
if (SKIP_DIRS.has(name))
|
|
102
|
+
continue;
|
|
103
|
+
const full = path.join(dir, name);
|
|
104
|
+
let st;
|
|
105
|
+
try {
|
|
106
|
+
st = statSync(full);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (st.isDirectory()) {
|
|
112
|
+
stack.push(full);
|
|
113
|
+
}
|
|
114
|
+
else if (st.isFile()) {
|
|
115
|
+
const ext = path.extname(name).toLowerCase();
|
|
116
|
+
if (SCANNED_EXTENSIONS.has(ext) && st.size <= MAX_FILE_BYTES) {
|
|
117
|
+
out.push(full);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
/** Trim + length-cap a source line for safe display. */
|
|
125
|
+
function makeSnippet(rawLine) {
|
|
126
|
+
const trimmed = rawLine.trim();
|
|
127
|
+
return trimmed.length > SNIPPET_MAX ? `${trimmed.slice(0, SNIPPET_MAX)}…` : trimmed;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Scan a single block of source TEXT (already read) for risky constructs. Split
|
|
131
|
+
* out so tests can feed sample source directly without touching disk. `fileLabel`
|
|
132
|
+
* is what each finding records as its `file`.
|
|
133
|
+
*/
|
|
134
|
+
export function scanSourceText(source, fileLabel) {
|
|
135
|
+
const findings = [];
|
|
136
|
+
const lines = source.split(/\r?\n/);
|
|
137
|
+
for (let i = 0; i < lines.length; i++) {
|
|
138
|
+
const line = lines[i] ?? "";
|
|
139
|
+
// Cheap skip of obvious whole-line comments — cuts the most common false
|
|
140
|
+
// positives (a rule name mentioned in a doc comment). This is best-effort;
|
|
141
|
+
// the operator still reviews each snippet.
|
|
142
|
+
const lead = line.trimStart();
|
|
143
|
+
if (lead.startsWith("//") || lead.startsWith("*"))
|
|
144
|
+
continue;
|
|
145
|
+
for (const r of RULES) {
|
|
146
|
+
if (r.pattern.test(line)) {
|
|
147
|
+
findings.push({
|
|
148
|
+
rule: r.rule,
|
|
149
|
+
severity: r.severity,
|
|
150
|
+
note: r.note,
|
|
151
|
+
file: fileLabel,
|
|
152
|
+
line: i + 1,
|
|
153
|
+
snippet: makeSnippet(line),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return findings;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Statically scan an installed module directory for dual-use constructs. Reads
|
|
162
|
+
* source files only (no import / no execution). Never throws — an unreadable
|
|
163
|
+
* file is skipped. Findings are sorted by file then line for a stable report.
|
|
164
|
+
*/
|
|
165
|
+
export function scanInstalledModule(moduleDir) {
|
|
166
|
+
const files = collectSourceFiles(moduleDir);
|
|
167
|
+
const findings = [];
|
|
168
|
+
let filesScanned = 0;
|
|
169
|
+
for (const file of files) {
|
|
170
|
+
let text;
|
|
171
|
+
try {
|
|
172
|
+
text = readFileSync(file, "utf8");
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
filesScanned++;
|
|
178
|
+
const rel = path.relative(moduleDir, file) || path.basename(file);
|
|
179
|
+
findings.push(...scanSourceText(text, rel.replace(/\\/g, "/")));
|
|
180
|
+
}
|
|
181
|
+
findings.sort((a, b) => (a.file === b.file ? a.line - b.line : a.file.localeCompare(b.file)));
|
|
182
|
+
const counts = { high: 0, medium: 0, low: 0 };
|
|
183
|
+
for (const f of findings)
|
|
184
|
+
counts[f.severity]++;
|
|
185
|
+
return { findings, filesScanned, counts };
|
|
186
|
+
}
|
|
187
|
+
/** One-line human summary of a scan report (e.g. "2 high, 1 medium"). */
|
|
188
|
+
export function summarizeScan(report) {
|
|
189
|
+
const { high, medium, low } = report.counts;
|
|
190
|
+
if (high + medium + low === 0)
|
|
191
|
+
return "no risky constructs found";
|
|
192
|
+
const parts = [];
|
|
193
|
+
if (high)
|
|
194
|
+
parts.push(`${high} high`);
|
|
195
|
+
if (medium)
|
|
196
|
+
parts.push(`${medium} medium`);
|
|
197
|
+
if (low)
|
|
198
|
+
parts.push(`${low} low`);
|
|
199
|
+
return parts.join(", ");
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=install-scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-scan.js","sourceRoot":"","sources":["../../../src/agents/extensions/install-scan.ts"],"names":[],"mappings":"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"}
|