bla-agents 1.6.3 → 1.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +8 -0
  2. package/dist/bundler/index.d.ts +6 -0
  3. package/dist/bundler/index.d.ts.map +1 -1
  4. package/dist/bundler/index.js +37 -8
  5. package/dist/bundler/index.js.map +1 -1
  6. package/dist/core/types.d.ts +8 -0
  7. package/dist/core/types.d.ts.map +1 -1
  8. package/dist/engine/defender.d.ts +3 -0
  9. package/dist/engine/defender.d.ts.map +1 -1
  10. package/dist/engine/defender.js +4 -0
  11. package/dist/engine/defender.js.map +1 -1
  12. package/dist/engine/harden.d.ts +2 -0
  13. package/dist/engine/harden.d.ts.map +1 -1
  14. package/dist/engine/harden.js +5 -0
  15. package/dist/engine/harden.js.map +1 -1
  16. package/dist/engine/protector.js +16 -3
  17. package/dist/engine/protector.js.map +1 -1
  18. package/dist/engine/verifier.d.ts.map +1 -1
  19. package/dist/engine/verifier.js +4 -0
  20. package/dist/engine/verifier.js.map +1 -1
  21. package/dist/identity.d.ts +1 -1
  22. package/dist/identity.js +1 -1
  23. package/dist/index.d.ts +2 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +2 -1
  26. package/dist/index.js.map +1 -1
  27. package/dist/mcp/server.d.ts +27 -0
  28. package/dist/mcp/server.d.ts.map +1 -1
  29. package/dist/mcp/server.js +185 -11
  30. package/dist/mcp/server.js.map +1 -1
  31. package/dist/shields/chaff/chaff-generator.d.ts.map +1 -1
  32. package/dist/shields/chaff/chaff-generator.js +19 -3
  33. package/dist/shields/chaff/chaff-generator.js.map +1 -1
  34. package/dist/shields/exhaustion/frida-capture-saturation.d.ts.map +1 -1
  35. package/dist/shields/exhaustion/frida-capture-saturation.js +5 -1
  36. package/dist/shields/exhaustion/frida-capture-saturation.js.map +1 -1
  37. package/dist/shields/formats/archive.d.ts.map +1 -1
  38. package/dist/shields/formats/archive.js +18 -4
  39. package/dist/shields/formats/archive.js.map +1 -1
  40. package/dist/shields/formats/native.d.ts.map +1 -1
  41. package/dist/shields/formats/native.js +4 -0
  42. package/dist/shields/formats/native.js.map +1 -1
  43. package/dist/shields/formats/python-ast-weave.d.ts +46 -0
  44. package/dist/shields/formats/python-ast-weave.d.ts.map +1 -0
  45. package/dist/shields/formats/python-ast-weave.js +414 -0
  46. package/dist/shields/formats/python-ast-weave.js.map +1 -0
  47. package/dist/shields/formats/python-pyc-weave.d.ts +18 -0
  48. package/dist/shields/formats/python-pyc-weave.d.ts.map +1 -0
  49. package/dist/shields/formats/python-pyc-weave.js +598 -0
  50. package/dist/shields/formats/python-pyc-weave.js.map +1 -0
  51. package/dist/shields/formats/python.d.ts +21 -0
  52. package/dist/shields/formats/python.d.ts.map +1 -1
  53. package/dist/shields/formats/python.js +68 -6
  54. package/dist/shields/formats/python.js.map +1 -1
  55. package/dist/shields/javascript/ast-shield.d.ts.map +1 -1
  56. package/dist/shields/javascript/ast-shield.js +68 -2
  57. package/dist/shields/javascript/ast-shield.js.map +1 -1
  58. package/dist/shields/runtime/memory-diff-shield.d.ts.map +1 -1
  59. package/dist/shields/runtime/memory-diff-shield.js +6 -1
  60. package/dist/shields/runtime/memory-diff-shield.js.map +1 -1
  61. package/dist/shields/tarpit/tarpit-generator.d.ts +15 -0
  62. package/dist/shields/tarpit/tarpit-generator.d.ts.map +1 -1
  63. package/dist/shields/tarpit/tarpit-generator.js +122 -25
  64. package/dist/shields/tarpit/tarpit-generator.js.map +1 -1
  65. package/dist/shields/weave/weave-decoy.d.ts +89 -0
  66. package/dist/shields/weave/weave-decoy.d.ts.map +1 -0
  67. package/dist/shields/weave/weave-decoy.js +465 -0
  68. package/dist/shields/weave/weave-decoy.js.map +1 -0
  69. package/dist/ui/reporter.d.ts.map +1 -1
  70. package/dist/ui/reporter.js +2 -0
  71. package/dist/ui/reporter.js.map +1 -1
  72. package/package.json +1 -1
@@ -0,0 +1,414 @@
1
+ /**
2
+ * Structural Python decoy weave — entangle tarpit decoys into customer `def` bodies.
3
+ *
4
+ * Modeled on JS `ast-shield.ts` §3: walk real function bodies, always-touch shared
5
+ * state, and unshift opaque-false guarded decoy calls so xref from customer entry
6
+ * reaches decoys. Selection is structural (FunctionDef sites minus injected tarpit
7
+ * names by identity) + seeded PRNG — not keyword/business-name rule tables.
8
+ *
9
+ * No greppable `_bla_` / `BLA-SHIELD` banners. No Python AST dependency: indent-stack
10
+ * scan with string/comment awareness, preserving encoding and EOL.
11
+ */
12
+ import { generatePythonOpaqueFalseExpression } from "../tarpit/opaque-predicates.js";
13
+ const VALID_STRING_PREFIXES = new Set([
14
+ "",
15
+ "r",
16
+ "u",
17
+ "f",
18
+ "b",
19
+ "fr",
20
+ "rf",
21
+ "br",
22
+ "rb",
23
+ ]);
24
+ function matchStringStart(source, offset) {
25
+ if (offset > 0 && /[A-Za-z0-9_]/.test(source[offset - 1]))
26
+ return null;
27
+ const slice = source.slice(offset, offset + 5);
28
+ const m = /^([A-Za-z]{0,2})("""|'''|"|')/.exec(slice);
29
+ if (!m)
30
+ return null;
31
+ const rawPrefix = m[1] ?? "";
32
+ if (!VALID_STRING_PREFIXES.has(rawPrefix.toLowerCase()))
33
+ return null;
34
+ const afterPrefix = offset + rawPrefix.length;
35
+ const quote = source.startsWith('"""', afterPrefix)
36
+ ? '"""'
37
+ : source.startsWith("'''", afterPrefix)
38
+ ? "'''"
39
+ : source[afterPrefix];
40
+ return { quote, contentStart: afterPrefix + quote.length };
41
+ }
42
+ function scanStringEnd(source, startOffset) {
43
+ const match = matchStringStart(source, startOffset);
44
+ if (!match)
45
+ return startOffset + 1;
46
+ const { quote, contentStart } = match;
47
+ let i = contentStart;
48
+ if (quote.length === 3) {
49
+ while (i < source.length) {
50
+ if (source.startsWith(quote, i))
51
+ return i + 3;
52
+ if (source[i] === "\\") {
53
+ if (i + 1 >= source.length)
54
+ return source.length;
55
+ if (source[i + 1] === "\r" && source[i + 2] === "\n")
56
+ i += 3;
57
+ else
58
+ i += 2;
59
+ continue;
60
+ }
61
+ i += 1;
62
+ }
63
+ return source.length;
64
+ }
65
+ while (i < source.length) {
66
+ const ch = source[i];
67
+ if (ch === quote)
68
+ return i + 1;
69
+ if (ch === "\n" || ch === "\r")
70
+ return i;
71
+ if (ch === "\\") {
72
+ if (i + 1 >= source.length)
73
+ return source.length;
74
+ if (source[i + 1] === "\r" && source[i + 2] === "\n")
75
+ i += 3;
76
+ else
77
+ i += 2;
78
+ continue;
79
+ }
80
+ i += 1;
81
+ }
82
+ return source.length;
83
+ }
84
+ function matchKeywordAt(source, offset, keyword) {
85
+ if (!source.startsWith(keyword, offset))
86
+ return false;
87
+ if (offset > 0 && /[A-Za-z0-9_]/.test(source[offset - 1]))
88
+ return false;
89
+ const after = source[offset + keyword.length];
90
+ if (after !== undefined && /[A-Za-z0-9_]/.test(after))
91
+ return false;
92
+ return true;
93
+ }
94
+ function lineIndentAt(source, lineStart) {
95
+ let i = lineStart;
96
+ while (i < source.length) {
97
+ const ch = source[i];
98
+ if (ch === " " || ch === "\t")
99
+ i += 1;
100
+ else
101
+ break;
102
+ }
103
+ return source.slice(lineStart, i);
104
+ }
105
+ function advanceToNextLineStart(source, offset) {
106
+ let i = offset;
107
+ while (i < source.length) {
108
+ if (source[i] === "\r" && source[i + 1] === "\n")
109
+ return i + 2;
110
+ if (source[i] === "\n" || source[i] === "\r")
111
+ return i + 1;
112
+ i += 1;
113
+ }
114
+ return source.length;
115
+ }
116
+ function isBlankOrCommentLine(source, lineStart) {
117
+ let i = lineStart;
118
+ while (i < source.length) {
119
+ const ch = source[i];
120
+ if (ch === " " || ch === "\t" || ch === "\f") {
121
+ i += 1;
122
+ continue;
123
+ }
124
+ if (ch === "#" || ch === "\n" || ch === "\r")
125
+ return true;
126
+ return false;
127
+ }
128
+ return true;
129
+ }
130
+ /**
131
+ * Find the colon that ends a `def` / `async def` header, respecting nested
132
+ * brackets and strings (structural, not a business-name regex table).
133
+ */
134
+ function findHeaderColon(source, defKeywordOffset) {
135
+ let i = defKeywordOffset;
136
+ let paren = 0;
137
+ let bracket = 0;
138
+ let brace = 0;
139
+ while (i < source.length) {
140
+ const str = matchStringStart(source, i);
141
+ if (str) {
142
+ i = scanStringEnd(source, i);
143
+ continue;
144
+ }
145
+ const ch = source[i];
146
+ if (ch === "#") {
147
+ i = advanceToNextLineStart(source, i);
148
+ continue;
149
+ }
150
+ if (ch === "(") {
151
+ paren += 1;
152
+ i += 1;
153
+ continue;
154
+ }
155
+ if (ch === ")") {
156
+ paren = Math.max(0, paren - 1);
157
+ i += 1;
158
+ continue;
159
+ }
160
+ if (ch === "[") {
161
+ bracket += 1;
162
+ i += 1;
163
+ continue;
164
+ }
165
+ if (ch === "]") {
166
+ bracket = Math.max(0, bracket - 1);
167
+ i += 1;
168
+ continue;
169
+ }
170
+ if (ch === "{") {
171
+ brace += 1;
172
+ i += 1;
173
+ continue;
174
+ }
175
+ if (ch === "}") {
176
+ brace = Math.max(0, brace - 1);
177
+ i += 1;
178
+ continue;
179
+ }
180
+ if (ch === ":" && paren === 0 && bracket === 0 && brace === 0) {
181
+ return i;
182
+ }
183
+ i += 1;
184
+ }
185
+ return null;
186
+ }
187
+ function skipDocstringAfterColon(source, afterColon, bodyIndent) {
188
+ // Skip horizontal space / comment on the def line, then newline.
189
+ let i = afterColon + 1;
190
+ while (i < source.length && (source[i] === " " || source[i] === "\t"))
191
+ i += 1;
192
+ if (source[i] === "#") {
193
+ i = advanceToNextLineStart(source, i);
194
+ }
195
+ else if (source[i] === "\r" || source[i] === "\n") {
196
+ i = advanceToNextLineStart(source, i);
197
+ }
198
+ else {
199
+ // One-liner suite on the same line as colon — caller should skip site.
200
+ return afterColon + 1;
201
+ }
202
+ while (i < source.length && isBlankOrCommentLine(source, i)) {
203
+ i = advanceToNextLineStart(source, i);
204
+ }
205
+ if (i >= source.length)
206
+ return i;
207
+ const indent = lineIndentAt(source, i);
208
+ if (indent !== bodyIndent)
209
+ return i;
210
+ const contentStart = i + indent.length;
211
+ const lit = matchStringStart(source, contentStart);
212
+ if (!lit)
213
+ return i;
214
+ // Docstring only when the first body statement is a bare string literal.
215
+ const end = scanStringEnd(source, contentStart);
216
+ let j = end;
217
+ while (j < source.length && (source[j] === " " || source[j] === "\t"))
218
+ j += 1;
219
+ if (source[j] === "#") {
220
+ j = advanceToNextLineStart(source, j);
221
+ }
222
+ else if (source[j] === "\r" || source[j] === "\n") {
223
+ j = advanceToNextLineStart(source, j);
224
+ }
225
+ else if (source[j] === ";") {
226
+ j += 1;
227
+ while (j < source.length && (source[j] === " " || source[j] === "\t"))
228
+ j += 1;
229
+ if (source[j] === "\r" || source[j] === "\n") {
230
+ j = advanceToNextLineStart(source, j);
231
+ }
232
+ }
233
+ else {
234
+ // Compound expression starting with a string — not a docstring statement.
235
+ return i;
236
+ }
237
+ return j;
238
+ }
239
+ function detectBodyIndent(source, afterColon, defIndent) {
240
+ let i = afterColon + 1;
241
+ while (i < source.length && (source[i] === " " || source[i] === "\t"))
242
+ i += 1;
243
+ if (source[i] === "#") {
244
+ i = advanceToNextLineStart(source, i);
245
+ }
246
+ else if (source[i] === "\r" || source[i] === "\n") {
247
+ i = advanceToNextLineStart(source, i);
248
+ }
249
+ else {
250
+ return { bodyIndent: defIndent + " ", oneLiner: true };
251
+ }
252
+ while (i < source.length && isBlankOrCommentLine(source, i)) {
253
+ i = advanceToNextLineStart(source, i);
254
+ }
255
+ if (i >= source.length) {
256
+ return { bodyIndent: defIndent + " ", oneLiner: false };
257
+ }
258
+ const indent = lineIndentAt(source, i);
259
+ if (indent.length <= defIndent.length) {
260
+ // Empty / ellipsis body edge — still allow insert with synthetic indent.
261
+ return { bodyIndent: defIndent + (defIndent.includes("\t") ? "\t" : " "), oneLiner: false };
262
+ }
263
+ return { bodyIndent: indent, oneLiner: false };
264
+ }
265
+ /**
266
+ * Structural scan: every customer FunctionDef / AsyncFunctionDef whose name is
267
+ * not in the tarpit identity skip-set. No keyword classifiers on business names.
268
+ */
269
+ export function findCustomerPythonFunctionDefs(source, skipDefNames) {
270
+ const sites = [];
271
+ let i = 0;
272
+ let lineStart = 0;
273
+ let atLineStart = true;
274
+ while (i < source.length) {
275
+ if (atLineStart) {
276
+ const indent = lineIndentAt(source, lineStart);
277
+ let cur = lineStart + indent.length;
278
+ if (cur < source.length &&
279
+ source[cur] !== "#" &&
280
+ source[cur] !== "\n" &&
281
+ source[cur] !== "\r") {
282
+ let asyncDef = false;
283
+ if (matchKeywordAt(source, cur, "async")) {
284
+ let afterAsync = cur + 5;
285
+ while (afterAsync < source.length &&
286
+ (source[afterAsync] === " " || source[afterAsync] === "\t")) {
287
+ afterAsync += 1;
288
+ }
289
+ if (matchKeywordAt(source, afterAsync, "def")) {
290
+ asyncDef = true;
291
+ cur = afterAsync;
292
+ }
293
+ }
294
+ if (asyncDef || matchKeywordAt(source, cur, "def")) {
295
+ const defKw = cur;
296
+ cur = defKw + 3;
297
+ while (cur < source.length && (source[cur] === " " || source[cur] === "\t")) {
298
+ cur += 1;
299
+ }
300
+ const nameMatch = /^[A-Za-z_][A-Za-z0-9_]*/.exec(source.slice(cur));
301
+ if (nameMatch) {
302
+ const name = nameMatch[0];
303
+ const colon = findHeaderColon(source, defKw);
304
+ if (colon !== null && !skipDefNames.has(name)) {
305
+ const bodyInfo = detectBodyIndent(source, colon, indent);
306
+ if (bodyInfo && !bodyInfo.oneLiner) {
307
+ const insertOffset = skipDocstringAfterColon(source, colon, bodyInfo.bodyIndent);
308
+ sites.push({
309
+ name,
310
+ insertOffset,
311
+ bodyIndent: bodyInfo.bodyIndent,
312
+ });
313
+ }
314
+ }
315
+ }
316
+ }
317
+ }
318
+ }
319
+ const str = matchStringStart(source, i);
320
+ if (str) {
321
+ i = scanStringEnd(source, i);
322
+ atLineStart = false;
323
+ continue;
324
+ }
325
+ if (source[i] === "#") {
326
+ i = advanceToNextLineStart(source, i);
327
+ lineStart = i;
328
+ atLineStart = true;
329
+ continue;
330
+ }
331
+ if (source[i] === "\r" && source[i + 1] === "\n") {
332
+ i += 2;
333
+ lineStart = i;
334
+ atLineStart = true;
335
+ continue;
336
+ }
337
+ if (source[i] === "\n" || source[i] === "\r") {
338
+ i += 1;
339
+ lineStart = i;
340
+ atLineStart = true;
341
+ continue;
342
+ }
343
+ atLineStart = false;
344
+ i += 1;
345
+ }
346
+ return sites;
347
+ }
348
+ function decoyPoolForWeave(decoyFunctionNames, warmInitName) {
349
+ // Prefer tarpit decoys over the warm-init helper by identity (not name heuristics).
350
+ const pure = warmInitName
351
+ ? decoyFunctionNames.filter((n) => n !== warmInitName)
352
+ : [...decoyFunctionNames];
353
+ return pure.length >= 1 ? pure : [...decoyFunctionNames];
354
+ }
355
+ /**
356
+ * Weave shared-slot touch + opaque-false decoy calls into customer function bodies.
357
+ */
358
+ export function weavePythonDecoyCalls(input) {
359
+ const { source, skipDefNames, decoyFunctionNames, sharedSlotName, stateVarName, warmInitName, prng, intensity = "balanced", } = input;
360
+ if (decoyFunctionNames.length === 0) {
361
+ return { code: source, customerDefsWoven: 0, crossReferenceEdgesAdded: 0 };
362
+ }
363
+ const skip = new Set(skipDefNames);
364
+ const sites = findCustomerPythonFunctionDefs(source, skip);
365
+ if (sites.length === 0) {
366
+ return { code: source, customerDefsWoven: 0, crossReferenceEdgesAdded: 0 };
367
+ }
368
+ const eol = source.includes("\r\n") ? "\r\n" : "\n";
369
+ const pool = decoyPoolForWeave(decoyFunctionNames, warmInitName);
370
+ if (pool.length === 0) {
371
+ return { code: source, customerDefsWoven: 0, crossReferenceEdgesAdded: 0 };
372
+ }
373
+ const deepCalls = intensity === "stealth" ? 1 : intensity === "balanced" ? 1 : 2;
374
+ let crossReferenceEdgesAdded = 0;
375
+ // Apply from end to start so earlier offsets stay valid.
376
+ const ordered = [...sites].sort((a, b) => b.insertOffset - a.insertOffset);
377
+ let code = source;
378
+ let woven = 0;
379
+ for (const site of ordered) {
380
+ const dTouch = prng.pick(pool);
381
+ const lines = [];
382
+ // Always-executed shared-state touch — cheap, no deep recursion (JS §3 stepper analog).
383
+ lines.push(`${site.bodyIndent}${sharedSlotName}["epoch"] = (${sharedSlotName}.get("epoch", 0) ^ hash(${dTouch}.__name__)) & 0xFFFFFFFF`);
384
+ crossReferenceEdgesAdded += 1;
385
+ if (pool.length >= 1 && intensity !== "stealth") {
386
+ const d1 = prng.pick(pool);
387
+ const d2 = pool.length >= 2 ? prng.pick(pool) : d1;
388
+ const seed1 = prng.nextInt(1, 255);
389
+ const seed2 = prng.nextInt(1, 255);
390
+ const opaque = generatePythonOpaqueFalseExpression(prng, stateVarName);
391
+ lines.push(`${site.bodyIndent}if ${opaque}:`);
392
+ if (deepCalls >= 2 && pool.length >= 2) {
393
+ lines.push(`${site.bodyIndent} _ = ${d1}(${seed1}, 0) ^ ${d2}(${seed2}, 0)`);
394
+ crossReferenceEdgesAdded += 2;
395
+ }
396
+ else {
397
+ lines.push(`${site.bodyIndent} _ = ${d1}(${seed1}, 0)`);
398
+ crossReferenceEdgesAdded += 1;
399
+ }
400
+ }
401
+ else if (intensity === "stealth") {
402
+ // Stealth: always-touch only (still creates customer→decoy xref via __name__).
403
+ }
404
+ const block = lines.join(eol) + eol;
405
+ code = code.slice(0, site.insertOffset) + block + code.slice(site.insertOffset);
406
+ woven += 1;
407
+ }
408
+ return {
409
+ code,
410
+ customerDefsWoven: woven,
411
+ crossReferenceEdgesAdded,
412
+ };
413
+ }
414
+ //# sourceMappingURL=python-ast-weave.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-ast-weave.js","sourceRoot":"","sources":["../../../src/shields/formats/python-ast-weave.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ProtectionIntensity } from "../../core/types.js";
2
+ export type PythonPycCodeLayout = "py37" | "py38" | "py311";
3
+ export declare function layoutForPycMagic(magic: number): PythonPycCodeLayout | null;
4
+ export interface PythonPycWeaveResult {
5
+ readonly buffer: Buffer;
6
+ readonly decoyCodeObjectsInjected: number;
7
+ readonly customerDefsWoven: number;
8
+ readonly layout: PythonPycCodeLayout;
9
+ }
10
+ /**
11
+ * Weave unused decoy CODE objects into a CPython .pyc buffer.
12
+ * Returns null when magic/layout is unknown or marshal round-trip fails.
13
+ */
14
+ export declare function weavePythonPycBuffer(bytes: Buffer, options?: {
15
+ readonly intensity?: ProtectionIntensity;
16
+ readonly seed?: string | number;
17
+ }): PythonPycWeaveResult | null;
18
+ //# sourceMappingURL=python-pyc-weave.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-pyc-weave.d.ts","sourceRoot":"","sources":["../../../src/shields/formats/python-pyc-weave.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAsD5D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAE3E;AA8BD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAugBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IACP,QAAQ,CAAC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B,GACL,oBAAoB,GAAG,IAAI,CA8B7B"}