@memberjunction/ai-agents 5.45.1 → 5.46.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/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@ export * from './agent-types/loop-agent-response-type.js';
13
13
  export * from './agent-types/loop-agent-prompt-params.js';
14
14
  export * from './base-agent.js';
15
15
  export * from './prompt-component-resolver.js';
16
+ export * from './scoped-prompt-config-resolver.js';
16
17
  export * from './agent-run-watchdog.js';
17
18
  export * from './agent-types/index.js';
18
19
  export * from './AgentRunner.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AAKnD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACrI,cAAc,4CAA4C,CAAC;AAC3D,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iCAAiC,CAAC;AAChD,cAAc,iDAAiD,CAAC;AAChE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,GACZ,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AAKnD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACrI,cAAc,4CAA4C,CAAC;AAC3D,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iCAAiC,CAAC;AAChD,cAAc,iDAAiD,CAAC;AAChE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,GACZ,MAAM,6BAA6B,CAAC"}
package/dist/index.js CHANGED
@@ -13,6 +13,7 @@ export * from './agent-types/loop-agent-response-type.js';
13
13
  export * from './agent-types/loop-agent-prompt-params.js';
14
14
  export * from './base-agent.js';
15
15
  export * from './prompt-component-resolver.js';
16
+ export * from './scoped-prompt-config-resolver.js';
16
17
  export * from './agent-run-watchdog.js';
17
18
  export * from './agent-types/index.js';
18
19
  export * from './AgentRunner.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,4FAA4F;AAC5F,8FAA8F;AAC9F,2FAA2F;AAC3F,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAkE,MAAM,iCAAiC,CAAC;AACrI,cAAc,4CAA4C,CAAC;AAC3D,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iCAAiC,CAAC;AAChD,cAAc,iDAAiD,CAAC;AAChE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AAEpD,wDAAwD;AACxD,OAAO,EACL,eAAe,EAEf,0BAA0B,EAG1B,WAAW,GACZ,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,iCAAiC,CAAC;AAChD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,oCAAoC,CAAC;AACnD,4FAA4F;AAC5F,8FAA8F;AAC9F,2FAA2F;AAC3F,8BAA8B;AAC9B,OAAO,EAAE,kBAAkB,EAAkE,MAAM,iCAAiC,CAAC;AACrI,cAAc,4CAA4C,CAAC;AAC3D,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,sCAAsC,CAAC;AACrD,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iCAAiC,CAAC;AAChD,cAAc,iDAAiD,CAAC;AAChE,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uCAAuC,CAAC;AACtD,cAAc,qCAAqC,CAAC;AAEpD,wDAAwD;AACxD,OAAO,EACL,eAAe,EAEf,0BAA0B,EAG1B,WAAW,GACZ,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { MJScopedPromptConfigEntity } from "@memberjunction/core-entities";
2
+ import { SecondaryScopeValue } from "@memberjunction/ai-core-plus";
3
+ import { PromptComponentScope } from "./prompt-component-resolver.js";
4
+ /**
5
+ * The subset of `AIPromptParams` fields a resolved config writes onto. Kept as a minimal
6
+ * structural shape (rather than importing `AIPromptParams`) so the apply step is unit-testable
7
+ * and free of a hard prompt-runtime dependency — `AIPromptParams` is structurally assignable to it.
8
+ */
9
+ export interface ScopedPromptConfigTarget {
10
+ override?: {
11
+ modelId?: string;
12
+ vendorId?: string;
13
+ };
14
+ configurationId?: string;
15
+ effortLevel?: number;
16
+ additionalParameters?: Record<string, unknown>;
17
+ }
18
+ /**
19
+ * ScopedPromptConfigResolver — the run-settings sibling of {@link PromptComponentResolver}.
20
+ * Picks the single most-specific in-scope `MJ: Scoped Prompt Configs` row for a prompt (whole-row
21
+ * wins: SecondaryScopes match (+4) > PrimaryScopeRecord (+2) > global (+1), tie-broken by
22
+ * `Priority`), then overlays its non-null columns onto the prompt run's params.
23
+ *
24
+ * **Pluggable (ClassFactory).** Obtained via
25
+ * `MJGlobal.Instance.ClassFactory.CreateInstance(ScopedPromptConfigResolver)` — base by default, or
26
+ * a `@RegisterClass(ScopedPromptConfigResolver)` subclass. Protected hooks
27
+ * ({@link getCandidates}, {@link isInScope}, {@link score}) are the override points, mirroring
28
+ * the parts resolver.
29
+ */
30
+ export declare class ScopedPromptConfigResolver {
31
+ /** Resolve the single winning config for `promptID` under `scope`, or null if none in scope. */
32
+ Resolve(promptID: string, scope: PromptComponentScope): MJScopedPromptConfigEntity | null;
33
+ /** Candidate configs for a prompt: same PromptID + resolvable Status. */
34
+ protected getCandidates(promptID: string): MJScopedPromptConfigEntity[];
35
+ /** Is this config compatible with the run scope? (cascading: it may only require dims the run has) */
36
+ protected isInScope(c: MJScopedPromptConfigEntity, scope: PromptComponentScope): boolean;
37
+ /** Specificity score: SecondaryScopes match (+4) > PrimaryScopeRecord (+2) > Global (+1). */
38
+ protected score(c: MJScopedPromptConfigEntity): number;
39
+ protected parseScopes(raw: string | null): Record<string, unknown>;
40
+ }
41
+ /**
42
+ * Overlay a resolved `ScopedPromptConfig` onto a prompt run's params. Only sets values the caller
43
+ * has NOT already specified (runtime-explicit overrides win); null columns are skipped (inherit the
44
+ * prompt default). Model/vendor → `override.{modelId,vendorId}`; configuration → `configurationId`;
45
+ * effort → `effortLevel`; the sampling knobs → `additionalParameters` (existing keys win). Returns
46
+ * the applied config (for observability) or null when nothing resolved.
47
+ */
48
+ export declare function ApplyScopedPromptConfig(resolver: ScopedPromptConfigResolver, promptID: string, scope: PromptComponentScope, params: ScopedPromptConfigTarget): MJScopedPromptConfigEntity | null;
49
+ export type { PromptComponentScope, SecondaryScopeValue };
50
+ //# sourceMappingURL=scoped-prompt-config-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-prompt-config-resolver.d.ts","sourceRoot":"","sources":["../src/scoped-prompt-config-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAKnE;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACrC,QAAQ,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClD;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,0BAA0B;IACnC,gGAAgG;IACzF,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,0BAA0B,GAAG,IAAI;IAShG,yEAAyE;IACzE,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,0BAA0B,EAAE;IAMvE,sGAAsG;IACtG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,0BAA0B,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO;IA0BxF,6FAA6F;IAC7F,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,0BAA0B,GAAG,MAAM;IAOtD,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASrE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,0BAA0B,EACpC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,wBAAwB,GACjC,0BAA0B,GAAG,IAAI,CA8CnC;AAGD,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,134 @@
1
+ import { LogStatus } from "@memberjunction/core";
2
+ import { UUIDsEqual } from "@memberjunction/global";
3
+ import { AIEngine } from "@memberjunction/aiengine";
4
+ /** Statuses eligible for resolution. Archived configs are excluded. */
5
+ const RESOLVABLE_STATUSES = new Set(["Active", "Provisional"]);
6
+ /**
7
+ * ScopedPromptConfigResolver — the run-settings sibling of {@link PromptComponentResolver}.
8
+ * Picks the single most-specific in-scope `MJ: Scoped Prompt Configs` row for a prompt (whole-row
9
+ * wins: SecondaryScopes match (+4) > PrimaryScopeRecord (+2) > global (+1), tie-broken by
10
+ * `Priority`), then overlays its non-null columns onto the prompt run's params.
11
+ *
12
+ * **Pluggable (ClassFactory).** Obtained via
13
+ * `MJGlobal.Instance.ClassFactory.CreateInstance(ScopedPromptConfigResolver)` — base by default, or
14
+ * a `@RegisterClass(ScopedPromptConfigResolver)` subclass. Protected hooks
15
+ * ({@link getCandidates}, {@link isInScope}, {@link score}) are the override points, mirroring
16
+ * the parts resolver.
17
+ */
18
+ export class ScopedPromptConfigResolver {
19
+ /** Resolve the single winning config for `promptID` under `scope`, or null if none in scope. */
20
+ Resolve(promptID, scope) {
21
+ const inScope = this.getCandidates(promptID).filter((c) => this.isInScope(c, scope));
22
+ if (inScope.length === 0)
23
+ return null;
24
+ inScope.sort((a, b) => this.score(b) - this.score(a) || b.Priority - a.Priority);
25
+ return inScope[0];
26
+ }
27
+ // ── Protected hooks (override points) ──────────────────────────────────────
28
+ /** Candidate configs for a prompt: same PromptID + resolvable Status. */
29
+ getCandidates(promptID) {
30
+ return AIEngine.Instance.ScopedPromptConfigs.filter((c) => UUIDsEqual(c.PromptID, promptID) && RESOLVABLE_STATUSES.has(c.Status));
31
+ }
32
+ /** Is this config compatible with the run scope? (cascading: it may only require dims the run has) */
33
+ isInScope(c, scope) {
34
+ if (c.PrimaryScopeRecordID) {
35
+ if (!scope.primaryScopeRecordId ||
36
+ c.PrimaryScopeRecordID.toLowerCase() !== scope.primaryScopeRecordId.toLowerCase()) {
37
+ return false;
38
+ }
39
+ if (c.PrimaryScopeEntityID &&
40
+ scope.primaryScopeEntityId &&
41
+ !UUIDsEqual(c.PrimaryScopeEntityID, scope.primaryScopeEntityId)) {
42
+ return false;
43
+ }
44
+ }
45
+ const cfgScopes = this.parseScopes(c.SecondaryScopes);
46
+ for (const key of Object.keys(cfgScopes)) {
47
+ const runValue = scope.secondaryScopes?.[key];
48
+ if (runValue === undefined || String(runValue) !== String(cfgScopes[key])) {
49
+ return false;
50
+ }
51
+ }
52
+ return true;
53
+ }
54
+ /** Specificity score: SecondaryScopes match (+4) > PrimaryScopeRecord (+2) > Global (+1). */
55
+ score(c) {
56
+ let s = 1;
57
+ if (c.PrimaryScopeRecordID)
58
+ s += 2;
59
+ if (Object.keys(this.parseScopes(c.SecondaryScopes)).length > 0)
60
+ s += 4;
61
+ return s;
62
+ }
63
+ parseScopes(raw) {
64
+ if (!raw)
65
+ return {};
66
+ try {
67
+ const o = JSON.parse(raw);
68
+ return o && typeof o === "object" ? o : {};
69
+ }
70
+ catch {
71
+ return {};
72
+ }
73
+ }
74
+ }
75
+ /**
76
+ * Overlay a resolved `ScopedPromptConfig` onto a prompt run's params. Only sets values the caller
77
+ * has NOT already specified (runtime-explicit overrides win); null columns are skipped (inherit the
78
+ * prompt default). Model/vendor → `override.{modelId,vendorId}`; configuration → `configurationId`;
79
+ * effort → `effortLevel`; the sampling knobs → `additionalParameters` (existing keys win). Returns
80
+ * the applied config (for observability) or null when nothing resolved.
81
+ */
82
+ export function ApplyScopedPromptConfig(resolver, promptID, scope, params) {
83
+ const cfg = resolver.Resolve(promptID, scope);
84
+ if (!cfg)
85
+ return null;
86
+ if (cfg.ModelID && !params.override?.modelId) {
87
+ params.override = { ...(params.override ?? {}), modelId: cfg.ModelID };
88
+ if (cfg.VendorID && !params.override.vendorId) {
89
+ params.override.vendorId = cfg.VendorID;
90
+ }
91
+ }
92
+ if (cfg.ConfigurationID && params.configurationId == null) {
93
+ params.configurationId = cfg.ConfigurationID;
94
+ }
95
+ if (cfg.EffortLevel != null && params.effortLevel == null) {
96
+ params.effortLevel = cfg.EffortLevel;
97
+ }
98
+ // Sampling knobs → additionalParameters (existing/runtime keys win).
99
+ const knobs = {};
100
+ if (cfg.Temperature != null)
101
+ knobs.temperature = cfg.Temperature;
102
+ if (cfg.TopP != null)
103
+ knobs.topP = cfg.TopP;
104
+ if (cfg.TopK != null)
105
+ knobs.topK = cfg.TopK;
106
+ if (cfg.MinP != null)
107
+ knobs.minP = cfg.MinP;
108
+ if (cfg.FrequencyPenalty != null)
109
+ knobs.frequencyPenalty = cfg.FrequencyPenalty;
110
+ if (cfg.PresencePenalty != null)
111
+ knobs.presencePenalty = cfg.PresencePenalty;
112
+ if (cfg.Seed != null)
113
+ knobs.seed = cfg.Seed;
114
+ // StopSequences is comma-delimited text (like the prompt default); the runner's additionalParameters
115
+ // contract expects a ready-made string[] (it assigns it as-is to ChatParams.stopSequences), so split
116
+ // + trim here rather than passing the raw string. NOTE: the additionalParameters path intentionally
117
+ // bypasses AIPromptRunner's shouldApplyStopSequences driver-support gate — a scope-level override is
118
+ // taken as an explicit caller instruction, same as any runtime-supplied additionalParameters.
119
+ if (cfg.StopSequences) {
120
+ const stops = cfg.StopSequences.split(",").map((s) => s.trim()).filter((s) => s.length > 0);
121
+ if (stops.length > 0)
122
+ knobs.stopSequences = stops;
123
+ }
124
+ if (cfg.ResponseFormat)
125
+ knobs.responseFormat = cfg.ResponseFormat;
126
+ if (Object.keys(knobs).length > 0) {
127
+ params.additionalParameters = { ...knobs, ...(params.additionalParameters ?? {}) };
128
+ }
129
+ LogStatus(`ScopedPromptConfigResolver: applied config ${cfg.ID} for prompt ${promptID} ` +
130
+ `(scope record=${scope.primaryScopeRecordId ?? "global"}` +
131
+ `${cfg.ModelID ? `, model=${cfg.ModelID}` : ""})`);
132
+ return cfg;
133
+ }
134
+ //# sourceMappingURL=scoped-prompt-config-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-prompt-config-resolver.js","sourceRoot":"","sources":["../src/scoped-prompt-config-resolver.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/ai-agents",
3
3
  "type": "module",
4
- "version": "5.45.1",
4
+ "version": "5.46.0",
5
5
  "description": "MemberJunction: AI Agent Execution and Management",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -17,23 +17,23 @@
17
17
  "author": "MemberJunction.com",
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
- "@memberjunction/actions": "5.45.1",
21
- "@memberjunction/actions-base": "5.45.1",
22
- "@memberjunction/ai": "5.45.1",
23
- "@memberjunction/ai-core-plus": "5.45.1",
24
- "@memberjunction/ai-engine-base": "5.45.1",
25
- "@memberjunction/ai-prompts": "5.45.1",
26
- "@memberjunction/ai-reranker": "5.45.1",
27
- "@memberjunction/ai-vector-dupe": "5.45.1",
28
- "@memberjunction/ai-vector-sync": "5.45.1",
29
- "@memberjunction/aiengine": "5.45.1",
30
- "@memberjunction/context-crush": "5.45.1",
31
- "@memberjunction/core": "5.45.1",
32
- "@memberjunction/core-entities": "5.45.1",
33
- "@memberjunction/global": "5.45.1",
34
- "@memberjunction/search-engine": "5.45.1",
35
- "@memberjunction/storage": "5.45.1",
36
- "@memberjunction/templates": "5.45.1",
20
+ "@memberjunction/actions": "5.46.0",
21
+ "@memberjunction/actions-base": "5.46.0",
22
+ "@memberjunction/ai": "5.46.0",
23
+ "@memberjunction/ai-core-plus": "5.46.0",
24
+ "@memberjunction/ai-engine-base": "5.46.0",
25
+ "@memberjunction/ai-prompts": "5.46.0",
26
+ "@memberjunction/ai-reranker": "5.46.0",
27
+ "@memberjunction/ai-vector-dupe": "5.46.0",
28
+ "@memberjunction/ai-vector-sync": "5.46.0",
29
+ "@memberjunction/aiengine": "5.46.0",
30
+ "@memberjunction/context-crush": "5.46.0",
31
+ "@memberjunction/core": "5.46.0",
32
+ "@memberjunction/core-entities": "5.46.0",
33
+ "@memberjunction/global": "5.46.0",
34
+ "@memberjunction/search-engine": "5.46.0",
35
+ "@memberjunction/storage": "5.46.0",
36
+ "@memberjunction/templates": "5.46.0",
37
37
  "dotenv": "^17.2.4",
38
38
  "exceljs": "^4.4.0",
39
39
  "lodash": "^4.17.23",