@mj-biz-apps/marketing-server 0.2.0 → 0.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.
Files changed (75) hide show
  1. package/dist/__tests__/linkedInTargeting.test.d.ts +2 -0
  2. package/dist/__tests__/linkedInTargeting.test.d.ts.map +1 -0
  3. package/dist/__tests__/linkedInTargeting.test.js +65 -0
  4. package/dist/__tests__/linkedInTargeting.test.js.map +1 -0
  5. package/dist/agents/BaseMarketingAgent.d.ts.map +1 -1
  6. package/dist/agents/BaseMarketingAgent.js +22 -1
  7. package/dist/agents/BaseMarketingAgent.js.map +1 -1
  8. package/dist/agents/MarketingCreativeAgent.d.ts +16 -0
  9. package/dist/agents/MarketingCreativeAgent.d.ts.map +1 -0
  10. package/dist/agents/MarketingCreativeAgent.js +28 -0
  11. package/dist/agents/MarketingCreativeAgent.js.map +1 -0
  12. package/dist/agents/MarketingExperimentationAgent.d.ts +53 -0
  13. package/dist/agents/MarketingExperimentationAgent.d.ts.map +1 -1
  14. package/dist/agents/MarketingExperimentationAgent.js +241 -15
  15. package/dist/agents/MarketingExperimentationAgent.js.map +1 -1
  16. package/dist/agents/MarketingStrategyOnboardingAgent.d.ts.map +1 -1
  17. package/dist/agents/MarketingStrategyOnboardingAgent.js +38 -4
  18. package/dist/agents/MarketingStrategyOnboardingAgent.js.map +1 -1
  19. package/dist/agents/index.d.ts +1 -0
  20. package/dist/agents/index.d.ts.map +1 -1
  21. package/dist/agents/index.js +3 -0
  22. package/dist/agents/index.js.map +1 -1
  23. package/dist/generated/graphql-schemas/__mj_BizAppsMarketing.d.ts +397 -310
  24. package/dist/generated/graphql-schemas/__mj_BizAppsMarketing.d.ts.map +1 -1
  25. package/dist/generated/graphql-schemas/__mj_BizAppsMarketing.js +678 -326
  26. package/dist/generated/graphql-schemas/__mj_BizAppsMarketing.js.map +1 -1
  27. package/dist/index.d.ts +3 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +3 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/programs/ContentPostProgramDriver.d.ts +4 -8
  32. package/dist/programs/ContentPostProgramDriver.d.ts.map +1 -1
  33. package/dist/programs/ContentPostProgramDriver.js +16 -46
  34. package/dist/programs/ContentPostProgramDriver.js.map +1 -1
  35. package/dist/programs/EmailProgramDriver.d.ts +3 -5
  36. package/dist/programs/EmailProgramDriver.d.ts.map +1 -1
  37. package/dist/programs/EmailProgramDriver.js +15 -21
  38. package/dist/programs/EmailProgramDriver.js.map +1 -1
  39. package/dist/programs/google/GoogleAdsProgramDriver.d.ts +3 -5
  40. package/dist/programs/google/GoogleAdsProgramDriver.d.ts.map +1 -1
  41. package/dist/programs/google/GoogleAdsProgramDriver.js +40 -28
  42. package/dist/programs/google/GoogleAdsProgramDriver.js.map +1 -1
  43. package/dist/programs/google/googleBrandAssets.d.ts +5 -0
  44. package/dist/programs/google/googleBrandAssets.d.ts.map +1 -1
  45. package/dist/programs/google/googleBrandAssets.js +20 -15
  46. package/dist/programs/google/googleBrandAssets.js.map +1 -1
  47. package/dist/programs/index.d.ts +6 -0
  48. package/dist/programs/index.d.ts.map +1 -1
  49. package/dist/programs/index.js +5 -0
  50. package/dist/programs/index.js.map +1 -1
  51. package/dist/programs/linkedin/LinkedInAdsClient.d.ts +123 -2
  52. package/dist/programs/linkedin/LinkedInAdsClient.d.ts.map +1 -1
  53. package/dist/programs/linkedin/LinkedInAdsClient.js +196 -29
  54. package/dist/programs/linkedin/LinkedInAdsClient.js.map +1 -1
  55. package/dist/programs/linkedin/LinkedInAdsProgramDriver.d.ts +40 -11
  56. package/dist/programs/linkedin/LinkedInAdsProgramDriver.d.ts.map +1 -1
  57. package/dist/programs/linkedin/LinkedInAdsProgramDriver.js +397 -94
  58. package/dist/programs/linkedin/LinkedInAdsProgramDriver.js.map +1 -1
  59. package/dist/programs/linkedin/linkedInExecutionContext.d.ts +6 -0
  60. package/dist/programs/linkedin/linkedInExecutionContext.d.ts.map +1 -1
  61. package/dist/programs/linkedin/linkedInExecutionContext.js +2 -1
  62. package/dist/programs/linkedin/linkedInExecutionContext.js.map +1 -1
  63. package/dist/programs/meta/MetaAdsClient.d.ts +101 -0
  64. package/dist/programs/meta/MetaAdsClient.d.ts.map +1 -0
  65. package/dist/programs/meta/MetaAdsClient.js +239 -0
  66. package/dist/programs/meta/MetaAdsClient.js.map +1 -0
  67. package/dist/programs/meta/MetaAdsProgramDriver.d.ts +76 -0
  68. package/dist/programs/meta/MetaAdsProgramDriver.d.ts.map +1 -0
  69. package/dist/programs/meta/MetaAdsProgramDriver.js +431 -0
  70. package/dist/programs/meta/MetaAdsProgramDriver.js.map +1 -0
  71. package/dist/programs/meta/metaAdsExecutionContext.d.ts +39 -0
  72. package/dist/programs/meta/metaAdsExecutionContext.d.ts.map +1 -0
  73. package/dist/programs/meta/metaAdsExecutionContext.js +99 -0
  74. package/dist/programs/meta/metaAdsExecutionContext.js.map +1 -0
  75. package/package.json +9 -8
@@ -8,8 +8,9 @@ var MarketingExperimentationAgent_1;
8
8
  import { EscapeSQLString, RegisterClass } from '@memberjunction/global';
9
9
  import { BaseAgent } from '@memberjunction/ai-agents';
10
10
  import { LogStatus, LogError, Metadata, RunView } from '@memberjunction/core';
11
- import { enrichFinding, loadProgramKnowledge, renderKnowledgeBase, toMarketingEntityName, } from '@mj-biz-apps/marketing-core';
11
+ import { blockingLearningErrors, blockingErrors, driverProposalIssues, ProgramMetadataEngine, decidedProgramFromTaskInput, parseTaskInput, enrichFinding, loadProgramKnowledge, renderKnowledgeBase, toMarketingEntityName, validateLearning, creativeImageProvenance, } from '@mj-biz-apps/marketing-core';
12
12
  import { BaseMarketingAgent } from './BaseMarketingAgent.js';
13
+ import { CREATIVE_AGENT_NAME } from './MarketingCreativeAgent.js';
13
14
  /** Below this, a request is too short to rank a corpus against. */
14
15
  const MIN_RETRIEVAL_QUERY_CHARS = 25;
15
16
  /**
@@ -70,9 +71,26 @@ let MarketingExperimentationAgent = class MarketingExperimentationAgent extends
70
71
  async preparePromptParams(config, payload, params) {
71
72
  const result = await super.preparePromptParams(config, payload, params);
72
73
  const bag = (payload ?? {});
74
+ // The brand is on the payload (BaseMarketingAgent seeds it from a task input when the workflow runner
75
+ // passes none). The decided program, when this is the workflow's fifth step, is only in the task input.
73
76
  const brandId = typeof bag['brandId'] === 'string' ? bag['brandId'] : null;
74
77
  if (!brandId || !result.data)
75
78
  return result;
79
+ const firstUser = (params.conversationMessages ?? []).find(m => m.role === 'user');
80
+ const taskInput = parseTaskInput(typeof firstUser?.content === 'string' ? firstUser.content : null);
81
+ // Interpret mode (KI-99): the workflow's fifth step handed over a recorded decision. Code assembles the
82
+ // facts the mechanism may rest on; the template shows them as {{ decidedProgramFacts }}.
83
+ const decided = decidedProgramFromTaskInput(taskInput);
84
+ if (decided) {
85
+ try {
86
+ result.data['decidedProgramFacts'] = await this.renderDecidedProgramFacts(decided.programId, params.contextUser);
87
+ LogStatus(`MarketingExperimentationAgent: interpret mode for program ${decided.programId} (${decided.decision}).`);
88
+ }
89
+ catch (e) {
90
+ LogError('MarketingExperimentationAgent: decided-program facts failed to load — '
91
+ + (e instanceof Error ? e.message : String(e)));
92
+ }
93
+ }
76
94
  try {
77
95
  // Rank the corpus against what is actually being asked, when there is something to rank
78
96
  // against. The draft hypothesis does not exist yet at injection time — the model has not
@@ -95,6 +113,51 @@ let MarketingExperimentationAgent = class MarketingExperimentationAgent extends
95
113
  }
96
114
  return result;
97
115
  }
116
+ /**
117
+ * The facts an interpretation may rest on, as text for the prompt: the program's hypothesis, thresholds,
118
+ * decision and reason; its newest program-sourced learning (the finding the workflow wrote); and every
119
+ * observation and segment result it has. Numbers here are exactly the numbers the hook later allows.
120
+ */
121
+ async renderDecidedProgramFacts(programId, contextUser) {
122
+ const rv = new RunView();
123
+ const [prog, learnings, observations, segments] = await rv.RunViews([
124
+ {
125
+ EntityName: toMarketingEntityName('Programs'), ExtraFilter: `ID='${EscapeSQLString(programId)}'`,
126
+ Fields: ['ID', 'Code', 'Name', 'Hypothesis', 'MetricName', 'MetricBaseline', 'KeepThreshold', 'IterateRangeMin',
127
+ 'IterateRangeMax', 'KillThreshold', 'MinSampleSize', 'Decision', 'DecisionReason', 'DecidedEarly', 'Status'],
128
+ MaxRows: 1, ResultType: 'simple', BypassCache: true,
129
+ },
130
+ {
131
+ EntityName: toMarketingEntityName('Agent Learnings'),
132
+ ExtraFilter: `RelatedProgramID='${EscapeSQLString(programId)}' AND Source='program'`,
133
+ Fields: ['Finding', 'EvidenceBasis', 'Confidence', 'ObservedEventCount', 'ObservedActivityCount', 'DateRecorded'],
134
+ OrderBy: '__mj_CreatedAt DESC', MaxRows: 1, ResultType: 'simple', BypassCache: true,
135
+ },
136
+ {
137
+ EntityName: toMarketingEntityName('Program Observations'), ExtraFilter: `ProgramID='${EscapeSQLString(programId)}'`,
138
+ Fields: ['Sprint', 'AttributionSource', 'SourceRef', 'ObservedMetric', 'ConversionsCount', 'ActivityCount', 'WindowStart', 'WindowEnd'],
139
+ OrderBy: '__mj_UpdatedAt DESC', MaxRows: 20, ResultType: 'simple', BypassCache: true,
140
+ },
141
+ {
142
+ EntityName: toMarketingEntityName('Program Segment Results'), ExtraFilter: `ProgramID='${EscapeSQLString(programId)}'`,
143
+ Fields: ['SegmentLabel', 'ObservedMetric', 'ConversionsCount', 'RecommendedDecision'],
144
+ MaxRows: 50, ResultType: 'simple', BypassCache: true,
145
+ },
146
+ ], contextUser);
147
+ for (const r of [prog, learnings, observations, segments]) {
148
+ if (!r.Success)
149
+ throw new Error(r.ErrorMessage ?? 'lookup failed');
150
+ }
151
+ const program = prog.Results?.[0] ?? null;
152
+ if (!program)
153
+ throw new Error(`program ${programId} not found`);
154
+ return JSON.stringify({
155
+ program,
156
+ learning: learnings.Results?.[0] ?? null,
157
+ observations: observations.Results ?? [],
158
+ segmentResults: segments.Results ?? [],
159
+ }, null, 2);
160
+ }
98
161
  /**
99
162
  * The text findings are ranked against, drawn from the conversation.
100
163
  *
@@ -154,6 +217,112 @@ let MarketingExperimentationAgent = class MarketingExperimentationAgent extends
154
217
  await this.attachProposals(baseResult, currentPayload, agentRun, params.contextUser);
155
218
  return baseResult;
156
219
  }
220
+ /**
221
+ * The type driver's proposal gate on the model's OWN `Propose Program` call, before it executes (KI-107) — MJ's
222
+ * `validateActionsNextStep` hook, which the framework itself uses to bounce unknown actions and execution limits
223
+ * with a Retry. A headline over Google's 30 characters comes back to the model as the field-level message it can
224
+ * act on, instead of a refused action result a turn later. The action refuses the same draft anyway (Propose runs
225
+ * the gate; the entity runs it on save) — this is the cheaper, earlier door, not the only one.
226
+ */
227
+ async validateActionsNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
228
+ const base = await super.validateActionsNextStep(params, nextStep, currentPayload, agentRun, currentStep);
229
+ if (base.step !== nextStep.step)
230
+ return base; // the framework already refused it
231
+ const proposals = (nextStep.actions ?? []).filter(a => a.name.trim().toLowerCase() === 'propose program');
232
+ if (proposals.length === 0)
233
+ return base;
234
+ const bag = (currentPayload ?? {});
235
+ for (const call of proposals) {
236
+ const p = call.params ?? {};
237
+ const str = (k) => typeof p[k] === 'string' ? p[k] : null;
238
+ // Who proposed is a fact of THIS run, not the model's to declare (KI-108: the model wrote ProposedBy=user
239
+ // on CG-06 and agent_strategy on CE-10 — its instructions say which, it sometimes doesn't). An agent's
240
+ // proposal is agent_signal when it rests on a Learning, agent_strategy when it rests on Foundation/Plan.
241
+ const proposedBy = str('ConnectsToType') === 'Learning' ? 'agent_signal' : 'agent_strategy';
242
+ if (p['ProposedBy'] !== proposedBy) {
243
+ LogStatus(`MarketingExperimentationAgent: ProposedBy set to ${proposedBy} on the model's Propose Program call (it sent ${JSON.stringify(p['ProposedBy'] ?? null)}).`);
244
+ call.params = { ...p, ProposedBy: proposedBy };
245
+ }
246
+ const num = (k) => typeof p[k] === 'number' ? p[k] : typeof p[k] === 'string' && p[k] !== '' && !Number.isNaN(Number(p[k])) ? Number(p[k]) : null;
247
+ const brandId = str('BrandID') ?? (typeof bag['brandId'] === 'string' ? bag['brandId'] : null);
248
+ if (!brandId)
249
+ continue;
250
+ try {
251
+ await ProgramMetadataEngine.Instance.Config(false, params.contextUser);
252
+ const typeKey = str('ProgramTypeName') ?? str('ProgramTypeID');
253
+ const typeRow = typeKey ? ProgramMetadataEngine.Instance.Types.find(t => t.Name.trim().toLowerCase() === typeKey.trim().toLowerCase())
254
+ ?? ProgramMetadataEngine.Instance.TypeByID(typeKey) : undefined;
255
+ if (!typeRow)
256
+ continue; // Propose Program reports an unresolved type itself
257
+ const levers = p['TacticConfigJSON'];
258
+ const tacticConfigJSON = typeof levers === 'string' ? levers : levers != null ? JSON.stringify(levers) : null;
259
+ // KI-131: an ad image URL must be one this run RECEIVED — the Creative Agent's payload block or the
260
+ // founder's words. The first live run invented one; the prompt's "never invent" is advice, this is the rule.
261
+ const imageBounce = this.creativeImageBounce(tacticConfigJSON, bag, params);
262
+ if (imageBounce) {
263
+ LogStatus(`MarketingExperimentationAgent: Propose Program call bounced — creativeImageUrl provenance`);
264
+ return { step: 'Retry', terminate: false, errorMessage: imageBounce };
265
+ }
266
+ const issues = blockingErrors(await driverProposalIssues({
267
+ Name: str('Name'), Hypothesis: str('Hypothesis'), MetricName: str('MetricName'), MetricBaseline: num('MetricBaseline'),
268
+ Budget: num('Budget'), SegmentCuts: str('SegmentCuts'), ProgramTypeID: typeRow.ID, TacticConfigJSON: tacticConfigJSON,
269
+ }, brandId, params.contextUser));
270
+ if (issues.length > 0) {
271
+ LogStatus(`MarketingExperimentationAgent: Propose Program call bounced before execution — ${issues.map(i => i.code).join(', ')}`);
272
+ return {
273
+ step: 'Retry',
274
+ terminate: false,
275
+ errorMessage: `Propose Program would be refused as written — fix these before calling it: `
276
+ + issues.map((i, n) => `${n + 1}. ${i.message}`).join(' '),
277
+ };
278
+ }
279
+ }
280
+ catch (e) {
281
+ // Never block on the gate's own failure: the action runs the same gate and reports it properly.
282
+ LogError(`MarketingExperimentationAgent: proposal pre-validation failed — ${e instanceof Error ? e.message : String(e)}`);
283
+ }
284
+ }
285
+ return base;
286
+ }
287
+ /**
288
+ * A Creative delegation never ends the parent's run (KI-134) — MJ's `validateSubAgentNextStep` hook, the
289
+ * sub-agent twin of the action hook above. On the adapt follow-up ("use the Ascend cover, make it square") the
290
+ * model delegated with `terminateAfter: true`; the framework honoured it, so the run ended the moment the
291
+ * Creative agent returned: the square image was generated and hosted, `payload.creative` carried it, but the
292
+ * founder saw a bare "completed" with no message and `creativeImageUrl` never changed. The parent is the only
293
+ * one who can merge `creative` into the levers and answer, so the delegation is forced to hand control back.
294
+ */
295
+ async validateSubAgentNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
296
+ const base = await super.validateSubAgentNextStep(params, nextStep, currentPayload, agentRun, currentStep);
297
+ if (base.step !== nextStep.step)
298
+ return base; // the framework already refused it
299
+ for (const req of this.getRequestedSubAgents(base)) {
300
+ if (req.name.trim().toLowerCase() === CREATIVE_AGENT_NAME.toLowerCase() && req.terminateAfter) {
301
+ LogStatus(`MarketingExperimentationAgent: ${CREATIVE_AGENT_NAME} delegation asked to terminate the run — overridden, the parent must merge the creative and answer (KI-134)`);
302
+ req.terminateAfter = false;
303
+ }
304
+ }
305
+ return base;
306
+ }
307
+ /** The provenance verdict for a proposal's creativeImageUrl, or null when there is nothing to bounce. */
308
+ creativeImageBounce(tacticConfigJSON, bag, params) {
309
+ if (!tacticConfigJSON)
310
+ return null;
311
+ let url;
312
+ try {
313
+ url = JSON.parse(tacticConfigJSON)['creativeImageUrl'];
314
+ }
315
+ catch {
316
+ return null;
317
+ } // the parser reports bad JSON
318
+ if (typeof url !== 'string' || !url.trim())
319
+ return null;
320
+ const founderTexts = (params.conversationMessages ?? [])
321
+ .filter(m => m.role === 'user')
322
+ .map(m => typeof m.content === 'string' ? m.content : m.content.map(b => (b.type === 'text' ? b.content : '')).join('\n'));
323
+ const verdict = creativeImageProvenance(url.trim(), { payloadCreative: bag['creative'], founderTexts });
324
+ return verdict.ok ? null : verdict.message;
325
+ }
157
326
  /**
158
327
  * Decides, in code, whether this run may SAVE a proposal or only DRAFT one.
159
328
  *
@@ -197,9 +366,9 @@ let MarketingExperimentationAgent = class MarketingExperimentationAgent extends
197
366
  LogError(`MarketingExperimentationAgent: could not read this run's proposal steps — ${res.ErrorMessage}`);
198
367
  return;
199
368
  }
200
- const proposals = (res.Results ?? [])
369
+ const proposals = dedupeProposals((res.Results ?? [])
201
370
  .map(step => this.proposalFromStep(step.OutputData))
202
- .filter((p) => p !== null);
371
+ .filter((p) => p !== null));
203
372
  if (proposals.length === 0)
204
373
  return;
205
374
  bag['proposals'] = proposals;
@@ -236,6 +405,14 @@ let MarketingExperimentationAgent = class MarketingExperimentationAgent extends
236
405
  if (!draftKey)
237
406
  return null;
238
407
  delete inputs['DraftOnly']; // the re-submit on Approve must COMMIT
408
+ // D-32: budgets are computed by Propose; the card shows the computed figures, not what the model typed.
409
+ if (outputs['ComputedBudget'] !== undefined)
410
+ inputs['Budget'] = outputs['ComputedBudget'];
411
+ if (outputs['ComputedBudgetPerSprint'] !== undefined)
412
+ inputs['BudgetPerSprint'] = outputs['ComputedBudgetPerSprint'];
413
+ // D-34: the levers with the platform's names cached beside the ids — what the card and the commit carry.
414
+ if (typeof outputs['ResolvedTacticConfigJSON'] === 'string' && outputs['ResolvedTacticConfigJSON'])
415
+ inputs['TacticConfigJSON'] = outputs['ResolvedTacticConfigJSON'];
239
416
  return {
240
417
  programId: null, code: null, name: text(inputs['Name']), approvalRequestId: null,
241
418
  draft: {
@@ -290,10 +467,11 @@ let MarketingExperimentationAgent = class MarketingExperimentationAgent extends
290
467
  + 'An interpretation cannot precede the decision it interprets — dropped.');
291
468
  return;
292
469
  }
293
- // The Learning the writeback already created. Read fresh: it was written moments ago.
470
+ // The PROGRAM learning the writeback already created — not an override row written in the same
471
+ // second (an early Kill writes both). Read fresh: it was written moments ago.
294
472
  const learningRow = (await rv.RunView({
295
473
  EntityName: toMarketingEntityName('Agent Learnings'),
296
- ExtraFilter: `RelatedProgramID='${EscapeSQLString(programId)}'`,
474
+ ExtraFilter: `RelatedProgramID='${EscapeSQLString(programId)}' AND Source='program'`,
297
475
  Fields: ['ID', 'Finding'],
298
476
  OrderBy: '__mj_CreatedAt DESC', MaxRows: 1, ResultType: 'simple', BypassCache: true,
299
477
  }, contextUser)).Results?.[0];
@@ -302,15 +480,36 @@ let MarketingExperimentationAgent = class MarketingExperimentationAgent extends
302
480
  + 'nothing to enrich. The decision writeback runs first.');
303
481
  return;
304
482
  }
305
- // Observed values live on the segment results the observation path wrote.
306
- const observed = (await rv.RunView({
307
- EntityName: toMarketingEntityName('Program Segment Results'),
308
- ExtraFilter: `ProgramID='${EscapeSQLString(programId)}'`,
309
- Fields: ['ObservedMetric', 'ConversionsCount'], ResultType: 'simple', BypassCache: true,
310
- }, contextUser)).Results ?? [];
483
+ // Observed values live on the segment results AND the observations the pollers wrote — the same facts
484
+ // the interpret turn was shown.
485
+ const [segRes, obsRes] = await rv.RunViews([
486
+ {
487
+ EntityName: toMarketingEntityName('Program Segment Results'),
488
+ ExtraFilter: `ProgramID='${EscapeSQLString(programId)}'`,
489
+ Fields: ['ObservedMetric', 'ConversionsCount'], ResultType: 'simple', BypassCache: true,
490
+ },
491
+ {
492
+ EntityName: toMarketingEntityName('Program Observations'),
493
+ ExtraFilter: `ProgramID='${EscapeSQLString(programId)}'`,
494
+ Fields: ['ObservedMetric', 'ConversionsCount', 'ActivityCount'], MaxRows: 50, ResultType: 'simple', BypassCache: true,
495
+ },
496
+ ], contextUser);
497
+ const observed = (segRes.Success ? segRes.Results ?? [] : []);
498
+ const rows = (obsRes.Success ? obsRes.Results ?? [] : []);
499
+ // The allow-list is EVERY number in the facts the interpret turn was shown (`decidedProgramFacts`: the
500
+ // program row incl. its sample floor and budget, the learning's counts, observations, segment results) —
501
+ // derived from the same object, so the two cannot drift. A hand-picked list once omitted MinSampleSize and
502
+ // refused CG-06's honest "0 events vs 30 required" (KI-109). The observation/segment reads above stay as the
503
+ // hook's own second source for rows written after the facts were rendered.
504
+ const factsText = await this.renderDecidedProgramFacts(programId, contextUser).catch((e) => {
505
+ LogError(`MarketingExperimentationAgent: facts for the allow-list failed — ${e instanceof Error ? e.message : String(e)}`);
506
+ return '';
507
+ });
311
508
  const allowedNumbers = [
312
509
  exp.MetricBaseline, exp.KeepThreshold, exp.KillThreshold, exp.IterateRangeMin, exp.IterateRangeMax,
313
510
  ...observed.flatMap(o => [o.ObservedMetric, o.ConversionsCount]),
511
+ ...rows.flatMap(o => [o.ObservedMetric, o.ConversionsCount, o.ActivityCount]),
512
+ ...(factsText.match(/\d+(?:\.\d+)?/g) ?? []).map(Number),
314
513
  ];
315
514
  const result = enrichFinding(learningRow.Finding ?? '', interpretation, {
316
515
  decision: this.toDecisionOutcome(exp.Decision),
@@ -329,11 +528,23 @@ let MarketingExperimentationAgent = class MarketingExperimentationAgent extends
329
528
  LogError(`MarketingExperimentationAgent: could not load Learning ${learningRow.ID}.`);
330
529
  return;
331
530
  }
531
+ // The learning-quality bar at the authoring boundary (KI-51): the enriched text must still
532
+ // state the number, an implication (the mechanism IS the implication), a confidence, and no
533
+ // consultant-speak. A rejected enrichment leaves the factual finding untouched.
534
+ const quality = blockingLearningErrors(validateLearning({
535
+ Finding: result.finding, Implication: interpretation, Confidence: learning.Confidence,
536
+ }));
537
+ if (quality.length > 0) {
538
+ LogStatus(`MarketingExperimentationAgent: interpretation REJECTED by the learning validator for ${exp.Code ?? programId} `
539
+ + `(${quality.map(q => q.code).join(', ')}). The factual finding stands unchanged.`);
540
+ return;
541
+ }
332
542
  learning.Finding = result.finding;
333
- // Source moves off 'program' only when an agent actually contributed: 'analysis' is the
334
- // value list's slot for agent-derived reasoning, and it keeps agent-enriched findings
335
- // distinguishable from purely mechanical ones.
336
- learning.Source = 'analysis';
543
+ // Source STAYS 'program' (KI-51): the finding still rests on the measured outcome — the agent
544
+ // added mechanism, not evidence. Flipping it to 'analysis' used to erase the row from
545
+ // scanPriorWork.killedMatches and the approver's PRIOR WORK warning. The agent's
546
+ // contribution is recorded in Evidence so it stays distinguishable from a mechanical row.
547
+ learning.Evidence = `${(learning.Evidence ?? '').trim()}\n\nAgent interpretation (run ${agentRunId}): ${interpretation.trim()}`.trim();
337
548
  if (!await learning.Save()) {
338
549
  LogError(`MarketingExperimentationAgent: Learning ${learningRow.ID} save failed — `
339
550
  + `${learning.LatestResult?.CompleteMessage ?? 'unknown'}`);
@@ -368,4 +579,19 @@ MarketingExperimentationAgent = MarketingExperimentationAgent_1 = __decorate([
368
579
  export { MarketingExperimentationAgent };
369
580
  /** Anti-tree-shaking loader — the @RegisterClass above is a side effect. */
370
581
  export function LoadMarketingExperimentationAgent() { }
582
+ /**
583
+ * One card per program (KI-124): the model sometimes calls Propose Program twice in a run for the same program (a
584
+ * revision after the user's follow-up, or a plain repeat — CP-Meta drafted twice three seconds apart), and the card
585
+ * showed "(+1 more)" with two identical drafts. The LATER call is the proposal: drafts collapse by name, committed
586
+ * programs by id. Steps arrive in StepNumber order, so last wins.
587
+ */
588
+ export function dedupeProposals(proposals) {
589
+ const byKey = new Map();
590
+ for (const p of proposals) {
591
+ const key = p.programId ? `id:${p.programId.toLowerCase()}` : `name:${(p.name ?? '').trim().toLowerCase()}`;
592
+ byKey.delete(key);
593
+ byKey.set(key, p);
594
+ }
595
+ return [...byKey.values()];
596
+ }
371
597
  //# sourceMappingURL=MarketingExperimentationAgent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarketingExperimentationAgent.js","sourceRoot":"","sources":["../../src/agents/MarketingExperimentationAgent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MarketingExperimentationAgent.js","sourceRoot":"","sources":["../../src/agents/MarketingExperimentationAgent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarketingStrategyOnboardingAgent.d.ts","sourceRoot":"","sources":["../../src/agents/MarketingStrategyOnboardingAgent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAErL,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAsF7D,qBACa,gCAAiC,SAAQ,kBAAkB;cAC3C,yBAAyB,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;cAc7F,mBAAmB,CAAC,CAAC,EAC1C,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,CAAC;IAO1B;;;;;;;;;;;;;OAaG;IACH,+DAA+D;IAC/D,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,4BAA4B;IAiDpC;;;;;;;;;OASG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;;;;;;;;;;;;;;;;OAiBG;IAEH;;;;;;;OAOG;cACsB,oBAAoB,CAAC,CAAC,EAC3C,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9B,cAAc,EAAE,CAAC,EACjB,QAAQ,EAAE,0BAA0B,EACpC,WAAW,EAAE,8BAA8B,GAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAYhC,kFAAkF;YACpE,wBAAwB;IAoDtC;;;;;;;;;;;;OAYG;cACsB,qBAAqB,CAAC,CAAC,EAC5C,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9B,cAAc,EAAE,CAAC,EACjB,QAAQ,EAAE,0BAA0B,EACpC,WAAW,EAAE,8BAA8B,GAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAiBhC;;;;;;;;;;OAUG;YACW,mBAAmB;IAqBjC;;;;;;;;;;;;;;;;OAgBG;YACW,8BAA8B;IAuC5C,2FAA2F;IAC3F,OAAO,CAAC,4BAA4B;IAapC,yEAAyE;IACzE,OAAO,CAAC,sBAAsB;IAsB9B;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;;;;;;;;;;OAWG;cACgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;cAIxD,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAIzE,OAAO,CAAC,eAAe;IA0BvB,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB;IAQ3B;;;;;OAKG;IACH,OAAO,CAAC,iCAAiC;IASzC,8GAA8G;YAChG,kBAAkB;IAmYhC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;;;;;;;;OASG;IACH;;;;;;;;;;;;OAYG;YACW,2BAA2B;IAmFzC;;;;;;OAMG;YACW,iBAAiB;IAuB/B;;;;;;;;OAQG;YACW,gCAAgC;IA2C9C,OAAO,CAAC,YAAY;IAmDpB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;CA0DpB;AAsCD,wBAAgB,oCAAoC,SAAK"}
1
+ {"version":3,"file":"MarketingStrategyOnboardingAgent.d.ts","sourceRoot":"","sources":["../../src/agents/MarketingStrategyOnboardingAgent.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAErL,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAyF7D,qBACa,gCAAiC,SAAQ,kBAAkB;cAC3C,yBAAyB,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;cAc7F,mBAAmB,CAAC,CAAC,EAC1C,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,kBAAkB,GAC3B,OAAO,CAAC,cAAc,CAAC;IAO1B;;;;;;;;;;;;;OAaG;IACH,+DAA+D;IAC/D,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,4BAA4B;IAiDpC;;;;;;;;;OASG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;;;;;;;;;;;;;;;;OAiBG;IAEH;;;;;;;OAOG;cACsB,oBAAoB,CAAC,CAAC,EAC3C,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9B,cAAc,EAAE,CAAC,EACjB,QAAQ,EAAE,0BAA0B,EACpC,WAAW,EAAE,8BAA8B,GAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAYhC,kFAAkF;YACpE,wBAAwB;IAoDtC;;;;;;;;;;;;OAYG;cACsB,qBAAqB,CAAC,CAAC,EAC5C,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9B,cAAc,EAAE,CAAC,EACjB,QAAQ,EAAE,0BAA0B,EACpC,WAAW,EAAE,8BAA8B,GAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAiBhC;;;;;;;;;;OAUG;YACW,mBAAmB;IAqBjC;;;;;;;;;;;;;;;;OAgBG;YACW,8BAA8B;IAuC5C,2FAA2F;IAC3F,OAAO,CAAC,4BAA4B;IAapC,yEAAyE;IACzE,OAAO,CAAC,sBAAsB;IAsB9B;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;;;;;;;;;;OAWG;cACgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;cAIxD,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAIzE,OAAO,CAAC,eAAe;IA0BvB,8EAA8E;IAC9E,OAAO,CAAC,mBAAmB;IAQ3B;;;;;OAKG;IACH,OAAO,CAAC,iCAAiC;IASzC,8GAA8G;YAChG,kBAAkB;IA+ZhC;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;;;;;;;;OASG;IACH;;;;;;;;;;;;OAYG;YACW,2BAA2B;IAsFzC;;;;;;OAMG;YACW,iBAAiB;IAuB/B;;;;;;;;OAQG;YACW,gCAAgC;IA2C9C,OAAO,CAAC,YAAY;IAqDpB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;CA0DpB;AAsCD,wBAAgB,oCAAoC,SAAK"}
@@ -13,7 +13,7 @@ import { getGuidance, decideOnboardingStep, MESSAGING_SECTION_KEY, renderSpecMar
13
13
  // These are marketing-core services (they moved out of the Actions package on 2026-08-08 to
14
14
  // sit where every other open app keeps services). Imported from their defining package rather
15
15
  // than re-exported through Actions — see typescript-style.md, no cross-package re-exports.
16
- import { getOnboardingSnapshot, synthesizeFoundations, synthesizeSection, createStrategyApprovalRequest, synthesizePlan, materializeStrategyVersion, recordStrategyApprovalDecision, writeFinalizeRecommendations, } from '@mj-biz-apps/marketing-core';
16
+ import { getOnboardingSnapshot, synthesizeFoundations, synthesizeSection, sectionKeysFromFailures, readValidationFailures, StrategyMaterializationError, createStrategyApprovalRequest, synthesizePlan, materializeStrategyVersion, recordStrategyApprovalDecision, writeFinalizeRecommendations, } from '@mj-biz-apps/marketing-core';
17
17
  /**
18
18
  * Marketing Strategy Onboarding Agent — driver class.
19
19
  *
@@ -643,10 +643,16 @@ let MarketingStrategyOnboardingAgent = class MarketingStrategyOnboardingAgent ex
643
643
  const formAction = typeof formAnswer?.action === 'string' ? formAnswer.action : null;
644
644
  const formFeedback = typeof formAnswer?.feedback === 'string' ? formAnswer.feedback.trim() : '';
645
645
  payload.founderApproved = formAction === 'approved';
646
- // Notes typed alongside an approval are approval provenance, not a
647
- // revision request — they get stamped on the published version.
648
- if (formAction === 'approved' && formFeedback)
646
+ // Notes typed alongside an approval are approval provenance (stamped on the published
647
+ // version) AND a founder answer (KI-25): they join the objective every re-synthesis reads,
648
+ // so a figure given in the approval box reaches the spec instead of being lost.
649
+ if (formAction === 'approved' && formFeedback) {
649
650
  payload.approvalNotes = formFeedback;
651
+ const marker = `[Founder note at approval]: ${formFeedback}`;
652
+ const current = String(payload.augmentedBusinessObjective ?? '');
653
+ if (!current.includes(marker))
654
+ payload.augmentedBusinessObjective = `${current}\n${marker}`.trim();
655
+ }
650
656
  if (formAction === 'revise') {
651
657
  // An explicit "revise" is a change request — it must clear any
652
658
  // finalize intent, not sit alongside it.
@@ -856,6 +862,29 @@ let MarketingStrategyOnboardingAgent = class MarketingStrategyOnboardingAgent ex
856
862
  // engine note the prompt reads — the founder fixes the gap in THIS
857
863
  // conversation instead of starting over.
858
864
  payload.founderApproved = false;
865
+ // KI-25: re-synthesize the sections the refusal names NOW, with the
866
+ // founder's approval note already in the objective, so the re-presented
867
+ // document carries their answer and the next approve publishes.
868
+ // Only Foundations re-synthesize per section; a Plan slot is rebuilt by the plan
869
+ // synthesis at finalize (the missing-plan-keys branch above).
870
+ const refused = sectionKeysFromFailures(readValidationFailures(payload.materializationFailures)).filter(isFoundationKey);
871
+ const resynthed = [];
872
+ if (refused.length > 0 && payload.synthesisDisabled !== true) {
873
+ for (const sectionKey of refused) {
874
+ try {
875
+ const result = await synthesizeSection({ brandId, evidence, businessObjective: String(payload.augmentedBusinessObjective ?? objective), sectionKey, agentRunId, contextUser: params.contextUser, overrideStrong: true });
876
+ this.mergeSpec(payload, brandId, result.persisted ? [result] : [], evidence);
877
+ payload.lastSynthSectionKey = sectionKey;
878
+ resynthed.push(sectionKey);
879
+ }
880
+ catch (synthErr) {
881
+ LogError(`OnboardingShell: re-synthesis of ${sectionKey} after a refused publish failed: ${synthErr instanceof Error ? synthErr.message : synthErr}`);
882
+ }
883
+ }
884
+ this.commitConsumedTurns(payload, evidence);
885
+ payload.rawSources = [];
886
+ }
887
+ payload.resynthesizedAfterRefusal = resynthed;
859
888
  decision = {
860
889
  ...decision,
861
890
  phase: 'Finalize',
@@ -991,6 +1020,7 @@ let MarketingStrategyOnboardingAgent = class MarketingStrategyOnboardingAgent ex
991
1020
  payload.materializedVersionNumber = result.versionNumber;
992
1021
  payload.materializedSections = result.sectionsWritten;
993
1022
  payload.materializationError = undefined;
1023
+ payload.materializationFailures = undefined;
994
1024
  // Stamp the working spec, in CODE (the contract: "approved is set by the
995
1025
  // materialization step, never by an agent"). Until now nothing did — the
996
1026
  // run's own artifact kept saying ready-for-review and the viewer kept
@@ -1014,6 +1044,8 @@ let MarketingStrategyOnboardingAgent = class MarketingStrategyOnboardingAgent ex
1014
1044
  }
1015
1045
  catch (err) {
1016
1046
  payload.materializationError = err instanceof Error ? err.message : String(err);
1047
+ // The problems as data (KI-25 re-synthesis reads the section keys from these, not the text).
1048
+ payload.materializationFailures = err instanceof StrategyMaterializationError ? err.failures : [];
1017
1049
  LogError(`OnboardingShell: materialization FAILED — strategy remains Draft: ${payload.materializationError}`);
1018
1050
  return;
1019
1051
  }
@@ -1147,6 +1179,8 @@ let MarketingStrategyOnboardingAgent = class MarketingStrategyOnboardingAgent ex
1147
1179
  publishedVersionNumber: payload.materializedVersionNumber ?? null,
1148
1180
  publishedSections: payload.materializedSections ?? null,
1149
1181
  publishError: payload.materializationError ?? null,
1182
+ // KI-25: sections re-synthesized with the founder's approval note after a refusal.
1183
+ resynthesizedAfterRefusal: asStringArray(payload.resynthesizedAfterRefusal),
1150
1184
  specReadiness: spec?.readiness ?? null,
1151
1185
  foundationSlots: spec ? Object.keys(spec.foundations ?? {}).length : 0,
1152
1186
  planSlots: spec ? Object.keys(spec.plan ?? {}).length : 0,