@remnic/core 9.69.61 → 9.69.63

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 (94) hide show
  1. package/dist/access-admin-ops-surface.js +4 -4
  2. package/dist/access-authorization-probe.js +5 -5
  3. package/dist/access-boundary.js +4 -4
  4. package/dist/access-cli.js +20 -20
  5. package/dist/access-extraction-force-flush.js +4 -4
  6. package/dist/access-http-briefing.js +5 -5
  7. package/dist/access-http-query.js +4 -4
  8. package/dist/access-http.js +16 -16
  9. package/dist/access-identity-continuity-surface.js +4 -4
  10. package/dist/access-lcm-surface.js +4 -4
  11. package/dist/access-mcp.js +11 -11
  12. package/dist/access-namespace-preflight.js +4 -4
  13. package/dist/access-observe-write-surface.js +4 -4
  14. package/dist/access-operations-batch.js +5 -5
  15. package/dist/access-operations.js +10 -10
  16. package/dist/access-recall-concurrency.js +4 -4
  17. package/dist/access-recall-response.js +4 -4
  18. package/dist/access-recall-surface.js +4 -4
  19. package/dist/access-service.js +4 -4
  20. package/dist/access-surface-catalog.js +6 -6
  21. package/dist/{chunk-2C5Z7CWB.js → chunk-24TJ77TT.js} +2 -2
  22. package/dist/{chunk-LY3SDHMI.js → chunk-3MSMBVA3.js} +2 -2
  23. package/dist/{chunk-2L5DIVDU.js → chunk-4EEDRKRT.js} +2 -2
  24. package/dist/{chunk-WLZYGLJ4.js → chunk-5MA7ZLPD.js} +5 -7
  25. package/dist/chunk-5MA7ZLPD.js.map +1 -0
  26. package/dist/{chunk-XOLVM3AT.js → chunk-5WXJE5TV.js} +2 -2
  27. package/dist/{chunk-NLE6TSLG.js → chunk-BLVHDY2U.js} +5 -7
  28. package/dist/chunk-BLVHDY2U.js.map +1 -0
  29. package/dist/{chunk-4IFSMCRS.js → chunk-FEHVG4C4.js} +2 -2
  30. package/dist/{chunk-DC5CTLCZ.js → chunk-FTNV5476.js} +8 -8
  31. package/dist/{chunk-M4PHCEPU.js → chunk-LAEW4S43.js} +2 -2
  32. package/dist/{chunk-XN4CPSCN.js → chunk-LVGVXG22.js} +2 -2
  33. package/dist/{chunk-4P3ZBL5E.js → chunk-PZEXA6CM.js} +2 -2
  34. package/dist/{chunk-NORFVW2H.js → chunk-RA3C46VX.js} +2 -2
  35. package/dist/{chunk-YL2W6NUG.js → chunk-TPRBJF46.js} +3 -3
  36. package/dist/{chunk-TQAXUYUE.js → chunk-TQC6ELJO.js} +2 -2
  37. package/dist/{chunk-TM7S5UHD.js → chunk-U6HXB2OG.js} +2 -2
  38. package/dist/{chunk-WD32KTVI.js → chunk-VXGB766B.js} +3 -3
  39. package/dist/{chunk-ZNFHWNDM.js → chunk-W5UAB6EH.js} +3 -3
  40. package/dist/{chunk-ZJ6MEVTX.js → chunk-WAR75CRY.js} +8 -8
  41. package/dist/{chunk-KIOXEHWF.js → chunk-WKNWC46C.js} +2 -2
  42. package/dist/{chunk-K7S2IMGJ.js → chunk-ZDZJ2PG4.js} +309 -12
  43. package/dist/{chunk-K7S2IMGJ.js.map → chunk-ZDZJ2PG4.js.map} +1 -1
  44. package/dist/cli.js +17 -17
  45. package/dist/external-wiki-access.js +5 -5
  46. package/dist/extraction.js +3 -3
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +22 -20
  50. package/dist/memory-browse-operations.js +5 -5
  51. package/dist/model-registry.d.ts.map +1 -1
  52. package/dist/model-registry.js +1 -1
  53. package/dist/orchestrator.js +20 -20
  54. package/dist/profiling.d.ts.map +1 -1
  55. package/dist/profiling.js +1 -1
  56. package/dist/recall-navigation-operations.js +5 -5
  57. package/dist/recall-navigation.js +4 -4
  58. package/dist/security/audit-memory-cli.d.ts.map +1 -1
  59. package/dist/security/audit-memory.d.ts +10 -0
  60. package/dist/security/audit-memory.d.ts.map +1 -1
  61. package/dist/security/injection-screen.d.ts +1 -2
  62. package/dist/security/injection-screen.d.ts.map +1 -1
  63. package/dist/summarizer.js +2 -2
  64. package/dist/support-passport/index.js +7 -7
  65. package/package.json +12 -2
  66. package/src/index.ts +1 -1
  67. package/src/model-registry.test.ts +22 -1
  68. package/src/model-registry.ts +7 -6
  69. package/src/profiling.test.ts +20 -1
  70. package/src/profiling.ts +7 -7
  71. package/src/security/audit-memory-cli.test.ts +90 -0
  72. package/src/security/audit-memory-cli.ts +7 -0
  73. package/src/security/audit-memory.ts +14 -0
  74. package/src/security/injection-screen.test.ts +245 -0
  75. package/src/security/injection-screen.ts +341 -11
  76. package/dist/chunk-NLE6TSLG.js.map +0 -1
  77. package/dist/chunk-WLZYGLJ4.js.map +0 -1
  78. /package/dist/{chunk-2C5Z7CWB.js.map → chunk-24TJ77TT.js.map} +0 -0
  79. /package/dist/{chunk-LY3SDHMI.js.map → chunk-3MSMBVA3.js.map} +0 -0
  80. /package/dist/{chunk-2L5DIVDU.js.map → chunk-4EEDRKRT.js.map} +0 -0
  81. /package/dist/{chunk-XOLVM3AT.js.map → chunk-5WXJE5TV.js.map} +0 -0
  82. /package/dist/{chunk-4IFSMCRS.js.map → chunk-FEHVG4C4.js.map} +0 -0
  83. /package/dist/{chunk-DC5CTLCZ.js.map → chunk-FTNV5476.js.map} +0 -0
  84. /package/dist/{chunk-M4PHCEPU.js.map → chunk-LAEW4S43.js.map} +0 -0
  85. /package/dist/{chunk-XN4CPSCN.js.map → chunk-LVGVXG22.js.map} +0 -0
  86. /package/dist/{chunk-4P3ZBL5E.js.map → chunk-PZEXA6CM.js.map} +0 -0
  87. /package/dist/{chunk-NORFVW2H.js.map → chunk-RA3C46VX.js.map} +0 -0
  88. /package/dist/{chunk-YL2W6NUG.js.map → chunk-TPRBJF46.js.map} +0 -0
  89. /package/dist/{chunk-TQAXUYUE.js.map → chunk-TQC6ELJO.js.map} +0 -0
  90. /package/dist/{chunk-TM7S5UHD.js.map → chunk-U6HXB2OG.js.map} +0 -0
  91. /package/dist/{chunk-WD32KTVI.js.map → chunk-VXGB766B.js.map} +0 -0
  92. /package/dist/{chunk-ZNFHWNDM.js.map → chunk-W5UAB6EH.js.map} +0 -0
  93. /package/dist/{chunk-ZJ6MEVTX.js.map → chunk-WAR75CRY.js.map} +0 -0
  94. /package/dist/{chunk-KIOXEHWF.js.map → chunk-WKNWC46C.js.map} +0 -0
@@ -210,7 +210,7 @@ import {
210
210
  import {
211
211
  EngramAccessHttpServer,
212
212
  MeetingsInputError
213
- } from "./chunk-DC5CTLCZ.js";
213
+ } from "./chunk-FTNV5476.js";
214
214
  import {
215
215
  WearablesInputError
216
216
  } from "./chunk-V7IZKJI3.js";
@@ -220,10 +220,10 @@ import {
220
220
  loadChatSession,
221
221
  processChatMessage,
222
222
  sessionBelongsToPrincipal
223
- } from "./chunk-2L5DIVDU.js";
223
+ } from "./chunk-4EEDRKRT.js";
224
224
  import {
225
225
  EngramAccessService
226
- } from "./chunk-WD32KTVI.js";
226
+ } from "./chunk-VXGB766B.js";
227
227
  import {
228
228
  WorkStorage
229
229
  } from "./chunk-MPC7TYTZ.js";
@@ -3075,10 +3075,282 @@ var RESPONSE_CONTROL_PATTERNS = [
3075
3075
  /\breplace[ \t]{1,8}(?:normal|default|your|the|its|all)?[ \t]{0,8}(?:behaviou?r|responses?|answers?|repl(?:y|ies)|output)\b/i,
3076
3076
  /\b(?:literal|exact|verbatim)[ \t]{1,8}(?:response|answer|reply|marker|string|output|phrase|token)\b/i
3077
3077
  ];
3078
- function findResponseControlDirective(content) {
3079
- for (const pattern of RESPONSE_CONTROL_PATTERNS) {
3080
- const finding = findingFor("response-control-directive", content, pattern);
3081
- if (finding) return finding;
3078
+ var RESPONSE_CONTROL_CORROBORATORS = [
3079
+ /\bCANARY\b/i,
3080
+ /https?:\/\//i,
3081
+ /\b[0-9a-f]{8,}\b/i,
3082
+ /\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/,
3083
+ // Naming the emission as a phrase/marker/token is a payload cue: ordinary
3084
+ // prose names a field ("the request id"), not "the phrase".
3085
+ /\b(?:the|this|that|following)[ \t]{1,8}(?:phrase|marker|token|string|sequence|literal|codeword|passphrase)\b/i,
3086
+ // Verbatim control over the wording, not the content.
3087
+ /\b(?:literal(?:ly)?|verbatim|word[- ]for[- ]word|exactly[ \t]{1,8}(?:this|that|as)|character[- ]for[- ]character)\b/i,
3088
+ /\bno[ \t]{1,8}(?:explanation|commentary|preamble|deviation|other[ \t]{1,8}text)\b/i,
3089
+ /\b(?:only|nothing[ \t]{1,8}else|and[ \t]{1,8}nothing)\b[^\n]{0,30}\b(?:answers?|responses?|repl(?:y|ies)|output|say|said)\b/i,
3090
+ // Persistence across turns: an ordinary fact does not legislate later turns.
3091
+ /\b(?:remember|persist|store[ \t]{1,8}this|retain[ \t]{1,8}this)\b/i,
3092
+ /\bany[ \t]{1,8}(?:later|future|subsequent)\b/i,
3093
+ /\b(?:future|later|subsequent|following|upcoming)[ \t]{1,8}(?:answers?|responses?|repl(?:y|ies)|output|turns?|messages?|conversations?|sessions?)\b/i,
3094
+ /\b(?:across|between)[ \t]{1,8}(?:conversations|sessions|chats)\b/i,
3095
+ /\b(?:from[ \t]{1,8}now[ \t]{1,8}on|going[ \t]{1,8}forward|in[ \t]{1,8}(?:all|every)[ \t]{1,8}(?:future|later)[ \t]{1,8}(?:turns?|answers?|responses?))\b/i,
3096
+ /\b(?:whenever|every[ \t]{1,8}time|each[ \t]{1,8}time|any[ \t]{1,8}time)\b[^\n]{0,60}\b(?:asked|discussed|mentioned|queried|retrieved|recalled)\b/i,
3097
+ // The subject is the agent, not a system under discussion.
3098
+ /\byour[ \t]{1,8}(?:answers?|responses?|repl(?:y|ies)|output|behaviou?r|memory)\b/i,
3099
+ /\b(?:assistant|agent|model)(?:'s)?[ \t]{1,8}(?:answers?|responses?|repl(?:y|ies)|output|behaviou?r)\b/i,
3100
+ // A hidden activation phrase is itself the second signal.
3101
+ /\b(?:activation|trigger)[ \t]{1,8}(?:phrase|key|word|code)\b/i,
3102
+ /\b(?:approved|required|correct|canonical)[ \t]{1,8}(?:response|answer|reply)\b/i
3103
+ ];
3104
+ var ORDINARY_CAPS_TOKENS = /* @__PURE__ */ new Set([
3105
+ "API",
3106
+ "HTTP",
3107
+ "HTTPS",
3108
+ "JSON",
3109
+ "XML",
3110
+ "HTML",
3111
+ "CSS",
3112
+ "CSV",
3113
+ "TSV",
3114
+ "YAML",
3115
+ "TOML",
3116
+ "SQL",
3117
+ "URL",
3118
+ "URI",
3119
+ "UUID",
3120
+ "ID",
3121
+ "IDS",
3122
+ "UTC",
3123
+ "ISO",
3124
+ "PDF",
3125
+ "PNG",
3126
+ "JPEG",
3127
+ "SVG",
3128
+ "TLS",
3129
+ "SSL",
3130
+ "SSH",
3131
+ "DNS",
3132
+ "TCP",
3133
+ "UDP",
3134
+ "IP",
3135
+ "CDN",
3136
+ "CORS",
3137
+ "CSRF",
3138
+ "JWT",
3139
+ "OAUTH",
3140
+ "REST",
3141
+ "GRPC",
3142
+ "RPC",
3143
+ "SDK",
3144
+ "CLI",
3145
+ "GUI",
3146
+ "OK",
3147
+ "YES",
3148
+ "NO",
3149
+ "TODO",
3150
+ "FAQ",
3151
+ "PR",
3152
+ "CI",
3153
+ "CD",
3154
+ "QA",
3155
+ "UX",
3156
+ "UI",
3157
+ "MIT",
3158
+ "GPL",
3159
+ "EU",
3160
+ "US",
3161
+ "AM",
3162
+ "PM",
3163
+ "FYI",
3164
+ "ETA",
3165
+ // Crypto, encoding, and spec vocabulary (trailing digits are stripped
3166
+ // before this lookup, so SHA256/SHA-256/UTF8/ISO8601/RFC3339 all reduce).
3167
+ "SHA",
3168
+ "MD",
3169
+ "HMAC",
3170
+ "AES",
3171
+ "RSA",
3172
+ "ECDSA",
3173
+ "PBKDF",
3174
+ "BCRYPT",
3175
+ "SCRYPT",
3176
+ "ARGON",
3177
+ "UTF",
3178
+ "ASCII",
3179
+ "BASE",
3180
+ "HEX",
3181
+ "CRC",
3182
+ "GZIP",
3183
+ "ZSTD",
3184
+ "RFC",
3185
+ "ANSI",
3186
+ "IEEE",
3187
+ "SMTP",
3188
+ "IMAP",
3189
+ "LDAP",
3190
+ "SAML",
3191
+ "OIDC",
3192
+ "SSO",
3193
+ "MFA",
3194
+ "TOTP",
3195
+ "ACL",
3196
+ "RBAC",
3197
+ "AWS",
3198
+ "GCP",
3199
+ "GPU",
3200
+ "CPU",
3201
+ "RAM",
3202
+ "SSD",
3203
+ "OS",
3204
+ "VM",
3205
+ "K8S",
3206
+ "NPM",
3207
+ "SEMVER",
3208
+ "GET",
3209
+ "POST",
3210
+ "PUT",
3211
+ "PATCH",
3212
+ "DELETE",
3213
+ "HEAD",
3214
+ "OPTIONS",
3215
+ "TRACE"
3216
+ ]);
3217
+ var ORDINARY_CAPITALIZED_WORDS = /* @__PURE__ */ new Set([
3218
+ "Dear",
3219
+ "Hello",
3220
+ "Hi",
3221
+ "Greetings",
3222
+ "Please",
3223
+ "Thanks",
3224
+ "Thank",
3225
+ "Regards",
3226
+ "Sincerely",
3227
+ "Yes",
3228
+ "No",
3229
+ "True",
3230
+ "False",
3231
+ "Null",
3232
+ "None",
3233
+ "Error",
3234
+ "Warning",
3235
+ "Note",
3236
+ "Summary",
3237
+ "Subject",
3238
+ "Re",
3239
+ "Fwd",
3240
+ "Attention",
3241
+ "Notice",
3242
+ "Draft",
3243
+ "Monday",
3244
+ "Tuesday",
3245
+ "Wednesday",
3246
+ "Thursday",
3247
+ "Friday",
3248
+ "Saturday",
3249
+ "Sunday",
3250
+ "January",
3251
+ "February",
3252
+ "March",
3253
+ "April",
3254
+ "May",
3255
+ "June",
3256
+ "July",
3257
+ "August",
3258
+ "September",
3259
+ "October",
3260
+ "November",
3261
+ "December"
3262
+ ]);
3263
+ var EMISSION_VERB_PRESENT = /\b(?:begin|start|end|include|contain|say|state|output|return|emit|produce|reply|respond|answer|replace|becomes?|is|are|be)\b[ \t]/i;
3264
+ var OPAQUE_EMISSION_TARGET = /\b(?:begin|start|end|include|contain|say|state|output|return|emit|produce|reply|respond|answer|replace|becomes?|is|are|be)\b[ \t]{1,8}(?:(?:with|by|exactly)[ \t]{1,8})?(?:normal[ \t]{1,8}behaviou?r[ \t]{1,8}with[ \t]{1,8})?/gi;
3265
+ var EMISSION_SLOT_VALUE = /(?:"([^"\n]{2,40})"|'([^'\n]{2,40})'|([A-Za-z][A-Za-z0-9_-]{1,39})\b)/y;
3266
+ var MAX_WHITESPACE_RUN_SCAN = 64;
3267
+ function lowercaseFollowsWhitespace(content, from) {
3268
+ const limit = Math.min(content.length, from + MAX_WHITESPACE_RUN_SCAN);
3269
+ let index = from;
3270
+ while (index < limit) {
3271
+ const code = content.charCodeAt(index);
3272
+ const whitespace = code === 32 || code >= 9 && code <= 13;
3273
+ if (!whitespace) return code >= 97 && code <= 122;
3274
+ index += 1;
3275
+ }
3276
+ return false;
3277
+ }
3278
+ function splitSentencesOutsideQuotes(content) {
3279
+ const sentences = [];
3280
+ const TOKEN = /["'.!?\n]/g;
3281
+ let start = 0;
3282
+ let quote;
3283
+ let match;
3284
+ while ((match = TOKEN.exec(content)) !== null) {
3285
+ const char = match[0];
3286
+ const index = match.index;
3287
+ if (quote !== void 0) {
3288
+ if (char === quote) quote = void 0;
3289
+ continue;
3290
+ }
3291
+ if (char === '"' || char === "'" && !/[A-Za-z0-9]/.test(content[index - 1] ?? " ")) {
3292
+ quote = char;
3293
+ continue;
3294
+ }
3295
+ const next = content[index + 1];
3296
+ const insideToken = char !== "\n" && next !== void 0 && !/\s/.test(next);
3297
+ const terminalUrlPunctuation = (char === "?" || char === "!") && lowercaseFollowsWhitespace(content, index + 1) && /:\/\/[^\s]*$/.test(content.slice(Math.max(0, index - 300), index));
3298
+ const newlineContinues = char === "\n" && /[:\-][ \t]*$/.test(content.slice(Math.max(0, index - 4), index));
3299
+ const endsUnit = !insideToken && !terminalUrlPunctuation && !newlineContinues && (char === "." || char === "!" || char === "?" || char === "\n");
3300
+ if (endsUnit) {
3301
+ if (index > start) sentences.push(content.slice(start, index));
3302
+ start = index + 1;
3303
+ }
3304
+ }
3305
+ if (start < content.length) sentences.push(content.slice(start));
3306
+ return sentences;
3307
+ }
3308
+ function reduceToken(token) {
3309
+ return token.replace(/[0-9]+$/, "");
3310
+ }
3311
+ function isOrdinaryToken(token) {
3312
+ const segments = token.split(/[-_]+/).filter((segment) => segment.length > 0);
3313
+ if (segments.length === 0) return true;
3314
+ if (segments.length > 1 && segments.every((segment) => /^[A-Z][a-z]+$/.test(segment))) return true;
3315
+ return segments.every((segment) => {
3316
+ if (/^[0-9]+$/.test(segment)) return true;
3317
+ const reduced = reduceToken(segment);
3318
+ if (ORDINARY_CAPS_TOKENS.has(segment) || ORDINARY_CAPS_TOKENS.has(reduced)) return true;
3319
+ return ORDINARY_CAPITALIZED_WORDS.has(segment);
3320
+ });
3321
+ }
3322
+ function hasOpaqueEmissionTarget(sentence) {
3323
+ OPAQUE_EMISSION_TARGET.lastIndex = 0;
3324
+ for (let verb = OPAQUE_EMISSION_TARGET.exec(sentence); verb !== null; verb = OPAQUE_EMISSION_TARGET.exec(sentence)) {
3325
+ EMISSION_SLOT_VALUE.lastIndex = verb.index + verb[0].length;
3326
+ const match = EMISSION_SLOT_VALUE.exec(sentence);
3327
+ if (!match) continue;
3328
+ const quoted = match[1] ?? match[2];
3329
+ if (quoted !== void 0) {
3330
+ const inner = quoted.trim();
3331
+ if (!/\s/.test(inner) && isOrdinaryToken(inner)) continue;
3332
+ return true;
3333
+ }
3334
+ const token = match[3];
3335
+ if (token === void 0) continue;
3336
+ if (/^[a-z]/.test(token)) continue;
3337
+ if (!isOrdinaryToken(token)) return true;
3338
+ }
3339
+ return false;
3340
+ }
3341
+ function findResponseControlDirective(content, profile = "default") {
3342
+ const directive = RESPONSE_CONTROL_PATTERNS.map(
3343
+ (pattern) => findingFor("response-control-directive", content, pattern)
3344
+ ).find((finding) => finding !== void 0);
3345
+ if (!directive) return void 0;
3346
+ if (profile === "hardened") return directive;
3347
+ const anyCorroborator = RESPONSE_CONTROL_CORROBORATORS.some((pattern) => pattern.test(content));
3348
+ const anyEmissionVerb = !anyCorroborator ? EMISSION_VERB_PRESENT.test(content) : true;
3349
+ if (!anyCorroborator && !anyEmissionVerb) return void 0;
3350
+ for (const sentence of splitSentencesOutsideQuotes(content)) {
3351
+ if (!RESPONSE_CONTROL_PATTERNS.some((pattern) => pattern.test(sentence))) continue;
3352
+ if (anyCorroborator && RESPONSE_CONTROL_CORROBORATORS.some((pattern) => pattern.test(sentence))) return directive;
3353
+ if (hasOpaqueEmissionTarget(sentence)) return directive;
3082
3354
  }
3083
3355
  return void 0;
3084
3356
  }
@@ -3100,7 +3372,16 @@ function findAuthorityEscalation(content) {
3100
3372
  AUTHORITY_MANDATORY_DIRECTIVE_PATTERN
3101
3373
  );
3102
3374
  }
3103
- function screenCandidateFact(content, profile = "default") {
3375
+ var INVISIBLE_FORMATTING = /[\u00ad\u200b-\u200f\u2060\u2028\u2029\ufeff]/g;
3376
+ var NON_ASCII_SPACE_LIKE = /[\f\v\u0085\u1680\u00a0\u2000-\u200a\u202f\u205f\u3000]/g;
3377
+ var ASCII_SPACE_RUN = /[ \t]{2,}/g;
3378
+ function normalizeForScreening(content) {
3379
+ const spaced = content.replace(NON_ASCII_SPACE_LIKE, " ").replace(INVISIBLE_FORMATTING, " ").replace(ASCII_SPACE_RUN, " ");
3380
+ const deleted = content.replace(INVISIBLE_FORMATTING, "").replace(NON_ASCII_SPACE_LIKE, " ").replace(ASCII_SPACE_RUN, " ");
3381
+ return spaced === deleted ? [spaced] : [spaced, deleted];
3382
+ }
3383
+ function screenCandidateFact(rawContent, profile = "default") {
3384
+ const variants = normalizeForScreening(rawContent);
3104
3385
  const findings = [];
3105
3386
  const rules = [
3106
3387
  ["imperative-to-agent", findImperativeToAgent],
@@ -3113,8 +3394,13 @@ function screenCandidateFact(content, profile = "default") {
3113
3394
  ["tool-routing-directive", findToolRoutingDirective]
3114
3395
  ];
3115
3396
  for (const [rule, find] of rules) {
3116
- const finding = find(content);
3117
- if (finding) findings.push({ rule, excerpt: finding.excerpt });
3397
+ for (const content of variants) {
3398
+ const finding = find(content, profile);
3399
+ if (finding) {
3400
+ findings.push({ rule, excerpt: finding.excerpt });
3401
+ break;
3402
+ }
3403
+ }
3118
3404
  }
3119
3405
  const score = findings.reduce((sum, finding) => sum + ruleWeight(finding.rule, profile), 0);
3120
3406
  return { score, findings, quarantine: score >= INJECTION_SCREEN_THRESHOLD };
@@ -3231,6 +3517,10 @@ function writeBurstStats(groups) {
3231
3517
  anomalousGroups
3232
3518
  };
3233
3519
  }
3520
+ function auditScreenProfile(config) {
3521
+ const capabilities = resolveSecurityCapabilities(config);
3522
+ return capabilities.injectionScreen ? capabilities.injectionScreenProfile : "default";
3523
+ }
3234
3524
  async function auditMemoryStore(options) {
3235
3525
  const since = parseSince(options.since);
3236
3526
  const storage = options.storage;
@@ -3347,7 +3637,13 @@ function registerSecurityCommands(cmd, orchestrator) {
3347
3637
  memoryDir: orchestrator.config.memoryDir,
3348
3638
  storage: orchestrator.storage,
3349
3639
  since: typeof options.since === "string" && options.since.trim().length > 0 ? options.since.trim() : void 0,
3350
- quarantine: options.quarantine === true
3640
+ quarantine: options.quarantine === true,
3641
+ // Screen with the profile live ingestion uses, or a memory this
3642
+ // deployment would quarantine on write stays active once stored
3643
+ // (#3078). A deployment with the screen DISABLED keeps the previous
3644
+ // `default` weighting: the sweep must not be stricter than the
3645
+ // write path the operator configured.
3646
+ profile: auditScreenProfile(orchestrator.config)
3351
3647
  });
3352
3648
  if (options.json === true) {
3353
3649
  console.log(JSON.stringify(report, null, 2));
@@ -9709,6 +10005,7 @@ export {
9709
10005
  exportSkillBundles,
9710
10006
  readSkillBundlesFromDir,
9711
10007
  persistImportedSkills,
10008
+ auditScreenProfile,
9712
10009
  auditMemoryStore,
9713
10010
  formatAuditMemoryReport,
9714
10011
  registerWearableConnector,
@@ -9834,4 +10131,4 @@ export {
9834
10131
  listMemoryMarkdownFilePaths,
9835
10132
  registerCli
9836
10133
  };
9837
- //# sourceMappingURL=chunk-K7S2IMGJ.js.map
10134
+ //# sourceMappingURL=chunk-ZDZJ2PG4.js.map