@memberjunction/ai-agents 6.1.0-edge.5 → 6.1.0-edge.6

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.
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import { UserInfo, IMetadataProvider } from '@memberjunction/core';
13
13
  import { ExecuteAgentResult, ExecuteAgentParams, MediaOutput, FileOutputRef } from '@memberjunction/ai-core-plus';
14
+ import { ArtifactTargetPlan } from './artifact-target-plan.js';
14
15
  /**
15
16
  * Identifies an artifact (and the version) that a run created.
16
17
  */
@@ -48,6 +49,17 @@ export declare function selectPrimaryArtifact(fileArtifacts: readonly CreatedArt
48
49
  * ```
49
50
  */
50
51
  export declare class AgentRunner {
52
+ /** Fallback artifact type for agent payloads when the agent declares no DefaultArtifactTypeID. */
53
+ private static readonly JSON_ARTIFACT_TYPE_ID;
54
+ /**
55
+ * Max length of `MJ: Artifacts.Name` (`nvarchar(255)`).
56
+ *
57
+ * A directive's `name` is model output and routinely arrives as a full sentence. `BaseEntity.Validate`
58
+ * enforces MaxLength, so an over-long title makes `Save()` return false — which used to abort the whole
59
+ * artifact write and leave the deliverable reachable only through `AIAgentRun.FinalPayload`. Clamped
60
+ * instead: a truncated title still names the artifact the user is looking at.
61
+ */
62
+ private static readonly ARTIFACT_NAME_MAX_LENGTH;
51
63
  private readonly _provider;
52
64
  constructor(provider?: IMetadataProvider);
53
65
  /**
@@ -207,7 +219,14 @@ export declare class AgentRunner {
207
219
  * Handles artifact creation, versioning, and linking to conversation details.
208
220
  *
209
221
  * This method implements intelligent artifact versioning:
210
- * 1. If sourceArtifactId is provided (explicit continuity), creates new version of that artifact
222
+ * 0. If the agent supplied an artifactDirective, it decides: 'suppress' → nothing;
223
+ * 'create-new' → new artifact (sourceArtifactId ignored); 'version-source' → version
224
+ * targetArtifactId, else sourceArtifactId. A directive-named target is model output and is
225
+ * vetted first (UUID shape, existence, and the caller's right to write to it — see
226
+ * {@link VetArtifactVersionTarget}); anything failing falls back down the ladder to the
227
+ * caller's sourceArtifactId and then to the historical chain, so a directive can never widen
228
+ * what the caller was already allowed to do.
229
+ * 1. Otherwise, if sourceArtifactId is provided (explicit continuity), creates new version of that artifact
211
230
  * 2. Otherwise, checks for previous artifacts on this conversation detail
212
231
  * 3. If previous artifact exists, creates new version of it
213
232
  * 4. If no previous artifact, creates entirely new artifact
@@ -245,6 +264,128 @@ export declare class AgentRunner {
245
264
  versionId: string;
246
265
  versionNumber: number;
247
266
  } | undefined>;
267
+ /**
268
+ * Renders an untrusted value for a log line without trusting it to render itself.
269
+ *
270
+ * Directives arrive as parsed JSON, so a field declared `string` can hold any JSON value.
271
+ * `String(value)` is not safe on such a value — `{ toString: 'x' }` shadows `toString` with a
272
+ * non-callable, and `String()` throws — and a value that throws while being logged aborts the
273
+ * whole artifact write, which is the failure this helper exists to prevent.
274
+ *
275
+ * @param value - Any value, however malformed.
276
+ * @returns A short single-line description, never throwing.
277
+ */
278
+ private static DescribeUntrustedValue;
279
+ /**
280
+ * Escapes an id for interpolation into a `RunView.ExtraFilter`, warning when the value cannot
281
+ * be an id at all.
282
+ *
283
+ * `RunViewParams.ExtraFilter` is a raw SQL fragment with no parameterized form, so every id
284
+ * this class puts into one is escaped HERE — at the query builder — rather than at whichever
285
+ * call site happened to be audited. `ValidateUserProvidedSQLClause` upstream blacklists
286
+ * statement keywords but permits `OR`, so an unescaped id remains a real predicate-injection
287
+ * surface; escaping at the builder covers every caller, present and future, including the
288
+ * caller-supplied `sourceArtifactId` that arrives straight from the GraphQL boundary.
289
+ *
290
+ * @param id - The id to interpolate.
291
+ * @param label - What the id is, for the warning.
292
+ * @returns The escaped id, ready to sit inside single quotes.
293
+ */
294
+ private static FilterId;
295
+ /**
296
+ * Coerces one of a directive's free-text fields into something safe to persist.
297
+ *
298
+ * The field is model output: it may be absent, may not be a string at all, may be whitespace,
299
+ * and may be far longer than its column. Anything unusable becomes `undefined` so the caller
300
+ * falls back to its own default, and anything over-long is clamped rather than allowed to fail
301
+ * `BaseEntity.Validate` — a rejected `Save()` would discard the entire artifact, so a truncated
302
+ * title is strictly better than no artifact.
303
+ *
304
+ * @param value - The directive field (`name` or `description`).
305
+ * @param maxLength - Column limit to clamp to; omit for `nvarchar(MAX)` columns.
306
+ * @returns The trimmed (and clamped) text, or `undefined` when there is nothing usable.
307
+ */
308
+ private static SafeDirectiveText;
309
+ /**
310
+ * Vets one rung of the version-target ladder, returning the plan with a normalized id when the
311
+ * target is usable and `null` when the caller should fall back.
312
+ *
313
+ * Three things are checked, in cost order:
314
+ *
315
+ * 1. **Shape.** The id must be a UUID-shaped string. This matters because it is interpolated
316
+ * into the `ExtraFilter` fragments built by {@link GetMaxVersionForArtifact} and
317
+ * {@link CheckForDuplicateVersion}; those escape what they are handed, but an id that is not
318
+ * a UUID cannot name an artifact, so rejecting it here turns a doomed query into a clean
319
+ * fallback. The id is then TRIMMED for downstream use — `IsValidUUID` tolerates surrounding
320
+ * whitespace, so a value with a trailing newline passes validation and would otherwise reach
321
+ * `ArtifactID='<uuid>\n'` and fail as a SQL conversion error.
322
+ * 2. **Existence** — directive-named targets only.
323
+ * 3. **Authorization** — directive-named targets only. `vwArtifacts` carries no per-user
324
+ * predicate and no row-level-security filter, so a row loading successfully proves only that
325
+ * it EXISTS. Without this check an agent could name any artifact id in the instance and have
326
+ * the run's payload appended to it as a new version. The caller must own the artifact or hold
327
+ * an explicit `CanEdit` grant on it.
328
+ *
329
+ * Existence and authorization resolve in ONE `RunViews` round trip, and via `RunView` rather
330
+ * than `BaseEntity.Load` deliberately: `Load` THROWS on a permission denial, a SQL conversion
331
+ * error or any transient DB fault, and a throw here would propagate to the method-wide catch and
332
+ * lose the whole artifact — the opposite of the graceful fallback this is meant to provide.
333
+ *
334
+ * A caller-supplied `sourceArtifactId` is shape-checked but NOT loaded or authorized: it is a
335
+ * server-side argument rather than model output, and adding a round trip plus a new denial mode
336
+ * to that path would change behavior for every existing agent. (The pre-existing exposure on
337
+ * that path — any authenticated caller may name any artifact id — is unchanged by this PR and
338
+ * wants its own fix.) One exception, and it is deliberate rather than incidental: if the agent
339
+ * named the SAME id first and it failed authorization, `rejectedIds` refuses it on the caller
340
+ * rung too. The caller path still performs no authorization of its own; it just cannot be used
341
+ * to launder an id this run has already refused.
342
+ *
343
+ * **Why this does not call `PermissionEngine` / `ArtifactPermissionProvider`.** That provider
344
+ * (`MJCoreEntities/src/custom/PermissionProviders/ArtifactPermissionProvider.ts`) answers
345
+ * "may this user Update this artifact" from the permission ROWS, and is the right home for that
346
+ * question in general — see `guides/UNIFIED_PERMISSIONS_GUIDE.md` §1. It is not used here for
347
+ * two reasons specific to this path. First, it answers only half the question: it reads grant
348
+ * rows and does not treat the artifact's OWNER as an editor, so the `UserID` check below would
349
+ * remain regardless and the owner half would still live in two places. Second, and decisive:
350
+ * `PermissionEngine.CheckPermission` returns `Allowed: false` with "Unknown permission domain"
351
+ * when its domain is not loaded, and this path's response to a denial is a SILENT fallback to
352
+ * creating a new artifact. A deployment that has not synced `metadata/permission-domains` — or
353
+ * any caller that reaches the runner before `PermissionEngine.Config()` — would therefore stop
354
+ * versioning for every legitimate editor, with nothing in the logs to say why. A direct query
355
+ * has no such dependency on engine state. As of this writing nothing server-side calls
356
+ * `PermissionEngine` or runs its `Config()`: its callers are Explorer's Permissions dashboard,
357
+ * the Sharing Center, and the integration test suite. (`Lists/server`,
358
+ * `Communication/notifications` and the MJCoreEntities entity extensions call
359
+ * `ResourcePermissionEngine`, a different class over `MJ: Resource Permissions`.)
360
+ *
361
+ * The cost of that choice is drift: this is a third answer to "can this user edit this
362
+ * artifact", alongside the provider and `ng-conversations`' `artifact-permission.service.ts`.
363
+ * **If artifact sharing grows a new grant shape — role grantees, `SupportsDeny`, cascade from
364
+ * collections — this method must be updated with the provider.** Revisit the delegation once
365
+ * `PermissionEngine` is routinely configured server-side. The cleaner precondition is upstream:
366
+ * `CollectionPermissionProvider` already treats a collection's owner as a synthetic full-access
367
+ * grantee, and the same treatment in `ArtifactPermissionProvider` would make it a complete
368
+ * answer, at which point this method should delegate to `CheckPermission(..., 'Update')`
369
+ * outright rather than compose an owner check around it.
370
+ *
371
+ * @param plan - The `version` plan to vet.
372
+ * @param contextUser - User the run executes as.
373
+ * @param md - Provider for the lookups.
374
+ * @param agentName - Agent name, for log lines.
375
+ * @param rejectedIds - Ids already rejected on a higher rung; mutated with any new rejection so
376
+ * the same id cannot be re-admitted further down the ladder.
377
+ * @returns The vetted plan with a trimmed id, or `null` to fall back.
378
+ */
379
+ protected VetArtifactVersionTarget(plan: Extract<ArtifactTargetPlan, {
380
+ kind: 'version';
381
+ }>, contextUser: UserInfo, md: IMetadataProvider, agentName: string | undefined, rejectedIds: Set<string>): Promise<Extract<ArtifactTargetPlan, {
382
+ kind: 'version';
383
+ }> | null>;
384
+ /**
385
+ * Creates the artifact header row. Name and description come from the agent's directive when
386
+ * it supplied them (e.g. Skip's artifactRequest); otherwise the historical placeholder.
387
+ */
388
+ private createArtifactHeader;
248
389
  /**
249
390
  * Generates a conversation name and description using the "Name Conversation" AI prompt.
250
391
  * Same approach as UI - uses AI to create a meaningful title and description from the first user message.
@@ -319,10 +460,26 @@ export declare class AgentRunner {
319
460
  * @param mediaOutputs - Media outputs to persist as artifacts
320
461
  * @param contextUser - User context for DB operations
321
462
  * @param provider - Optional metadata provider for multi-provider support
463
+ * @param resolvedStorageAccountId - Pre-resolved storage account from the agent's resolution
464
+ * chain. Optional, and optional on purpose: this is a public method, and callers that
465
+ * predate storage-backed media keep working — omitting it just falls back to the first
466
+ * active account inside {@link uploadBase64ToStorage}.
322
467
  *
323
468
  * @since 5.38.0
324
469
  */
325
- CreateMediaArtifacts(conversationDetailId: string, mediaOutputs: MediaOutput[], contextUser: UserInfo, provider?: IMetadataProvider): Promise<void>;
470
+ CreateMediaArtifacts(conversationDetailId: string, mediaOutputs: MediaOutput[], contextUser: UserInfo, provider?: IMetadataProvider, resolvedStorageAccountId?: string): Promise<void>;
471
+ /**
472
+ * Uploads bytes to MJStorage when a storage account is configured, returning the new
473
+ * `MJ: Files` ID — or `undefined` to tell the caller to store the bytes inline.
474
+ *
475
+ * The single home of the storage-or-inline contract for every artifact this runner creates,
476
+ * file outputs and media alike. Deliberately never throws: delivery must not fail because
477
+ * storage is unavailable, so an upload error degrades to inline with a log line.
478
+ *
479
+ * @param logPrefix - Names the calling path in the log so an operator can tell which kind of
480
+ * artifact fell back, without the two paths carrying separate copies of this logic.
481
+ */
482
+ private uploadToStorageIfConfigured;
326
483
  /**
327
484
  * Creates MJ: Artifact records for file outputs collected during agent execution.
328
485
  * Reads directly from `ExecuteAgentResult.fileOutputs` — no DB query needed.
@@ -354,7 +511,11 @@ export declare class AgentRunner {
354
511
  * vs. inline content).
355
512
  */
356
513
  private createArtifactWithVersion;
357
- /** Creates a file-backed artifact (version references a FileID in MJStorage). */
514
+ /**
515
+ * Creates a file-backed artifact (version references a FileID in MJStorage). `label` names the
516
+ * thing being stored in diagnostics ("file", "media Image") so a failure reads as specifically as
517
+ * the inline path's would.
518
+ */
358
519
  private createFileArtifact;
359
520
  /** Creates an inline artifact (version stores base64 data URL directly, no MJStorage). */
360
521
  private createInlineFileArtifact;
@@ -1 +1 @@
1
- {"version":3,"file":"AgentRunner.d.ts","sourceRoot":"","sources":["../src/AgentRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentRunner.d.ts","sourceRoot":"","sources":["../src/AgentRunner.ts"],"names":[],"mappings":"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"}