@burdenoff/microfe-atheletebridge 2026.801.1 → 2026.801.3
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/atheletebridge/AthleteBridgeRoot.d.ts.map +1 -1
- package/dist/atheletebridge/AthleteBridgeRoot.js +53 -45
- package/dist/atheletebridge/AthleteBridgeRoot.js.map +1 -1
- package/dist/atheletebridge/AthleteBridgeRoutes.d.ts.map +1 -1
- package/dist/atheletebridge/AthleteBridgeRoutes.js +15 -7
- package/dist/atheletebridge/AthleteBridgeRoutes.js.map +1 -1
- package/dist/atheletebridge/components/StatusBadge.d.ts.map +1 -1
- package/dist/atheletebridge/components/StatusBadge.js +3 -1
- package/dist/atheletebridge/components/StatusBadge.js.map +1 -1
- package/dist/atheletebridge/components/ai/AgentRunFeed.d.ts +19 -0
- package/dist/atheletebridge/components/ai/AgentRunFeed.d.ts.map +1 -0
- package/dist/atheletebridge/components/ai/AgentRunFeed.js +124 -0
- package/dist/atheletebridge/components/ai/AgentRunFeed.js.map +1 -0
- package/dist/atheletebridge/components/ai/AiErrorNotice.d.ts +21 -0
- package/dist/atheletebridge/components/ai/AiErrorNotice.d.ts.map +1 -0
- package/dist/atheletebridge/components/ai/AiErrorNotice.js +114 -0
- package/dist/atheletebridge/components/ai/AiErrorNotice.js.map +1 -0
- package/dist/atheletebridge/components/ai/AiModelPicker.d.ts +19 -0
- package/dist/atheletebridge/components/ai/AiModelPicker.d.ts.map +1 -0
- package/dist/atheletebridge/components/ai/AiModelPicker.js +203 -0
- package/dist/atheletebridge/components/ai/AiModelPicker.js.map +1 -0
- package/dist/atheletebridge/components/ai/DecisionCard.d.ts +11 -0
- package/dist/atheletebridge/components/ai/DecisionCard.d.ts.map +1 -0
- package/dist/atheletebridge/components/ai/DecisionCard.js +343 -0
- package/dist/atheletebridge/components/ai/DecisionCard.js.map +1 -0
- package/dist/atheletebridge/components/ai/RunDecisionPanel.d.ts +21 -0
- package/dist/atheletebridge/components/ai/RunDecisionPanel.d.ts.map +1 -0
- package/dist/atheletebridge/components/ai/RunDecisionPanel.js +371 -0
- package/dist/atheletebridge/components/ai/RunDecisionPanel.js.map +1 -0
- package/dist/atheletebridge/components/ai/assessment.d.ts +14 -0
- package/dist/atheletebridge/components/ai/assessment.d.ts.map +1 -0
- package/dist/atheletebridge/components/ai/assessment.js +30 -0
- package/dist/atheletebridge/components/ai/assessment.js.map +1 -0
- package/dist/atheletebridge/components/ai/index.d.ts +11 -0
- package/dist/atheletebridge/components/ai/index.d.ts.map +1 -0
- package/dist/atheletebridge/components/index.d.ts +1 -0
- package/dist/atheletebridge/components/index.d.ts.map +1 -1
- package/dist/atheletebridge/hooks/index.d.ts +2 -2
- package/dist/atheletebridge/hooks/index.d.ts.map +1 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.d.ts +92 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.d.ts.map +1 -1
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js +274 -129
- package/dist/atheletebridge/hooks/useAthleteBridgeApi.js.map +1 -1
- package/dist/atheletebridge/index.d.ts +1 -1
- package/dist/atheletebridge/index.d.ts.map +1 -1
- package/dist/atheletebridge/pages/ai/AiOperationsPage.d.ts +23 -0
- package/dist/atheletebridge/pages/ai/AiOperationsPage.d.ts.map +1 -0
- package/dist/atheletebridge/pages/ai/AiOperationsPage.js +117 -0
- package/dist/atheletebridge/pages/ai/AiOperationsPage.js.map +1 -0
- package/dist/atheletebridge/types/index.d.ts +124 -1
- package/dist/atheletebridge/types/index.d.ts.map +1 -1
- package/dist/atheletebridge/utils/aiDecision.d.ts +73 -0
- package/dist/atheletebridge/utils/aiDecision.d.ts.map +1 -0
- package/dist/atheletebridge/utils/aiDecision.js +187 -0
- package/dist/atheletebridge/utils/aiDecision.js.map +1 -0
- package/dist/atheletebridge/utils/index.d.ts +2 -0
- package/dist/atheletebridge/utils/index.d.ts.map +1 -1
- package/dist/atheletebridge/utils/pageContext.d.ts.map +1 -1
- package/dist/atheletebridge/utils/pageContext.js +5 -0
- package/dist/atheletebridge/utils/pageContext.js.map +1 -1
- package/dist/generated/wspace-types.d.ts +68885 -33499
- package/dist/generated/wspace-types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -198,6 +198,15 @@ export interface AthProgram {
|
|
|
198
198
|
isTemplate: boolean;
|
|
199
199
|
tags: string[];
|
|
200
200
|
drills?: AthDrillConnection;
|
|
201
|
+
/**
|
|
202
|
+
* `AthProgram.context` — provenance + AI state, written by the decision
|
|
203
|
+
* engine and never by a client. Holds `lastAiAdjustment` (assessment,
|
|
204
|
+
* rationale, confidence, recommendedWeeklyLoadChangePct, flags, source,
|
|
205
|
+
* agentRunId, decidedBy, decidedAt, status PROPOSED/ACCEPTED/OVERRIDDEN) and,
|
|
206
|
+
* for AI-generated drafts, `generatedBy`/`agentRunId`/`goals`/`constraints`.
|
|
207
|
+
* Optional here because only the AI Operations page selects it.
|
|
208
|
+
*/
|
|
209
|
+
context?: unknown;
|
|
201
210
|
createdAt: string;
|
|
202
211
|
updatedAt: string;
|
|
203
212
|
}
|
|
@@ -249,7 +258,16 @@ export interface AthPerformanceMetric {
|
|
|
249
258
|
createdAt: string;
|
|
250
259
|
updatedAt: string;
|
|
251
260
|
}
|
|
252
|
-
/**
|
|
261
|
+
/**
|
|
262
|
+
* PaginationInput on the svc.
|
|
263
|
+
*
|
|
264
|
+
* NOTE: the COMPOSED supergraph's `PaginationInput` has only `limit` + `offset`
|
|
265
|
+
* — `wspace-conversations-svc` / `wspace-rbac-svc` declare a narrower input of
|
|
266
|
+
* the same name and Federation intersects input types, so `cursor` does not
|
|
267
|
+
* survive composition and sending it is a validation error at the gateway. All
|
|
268
|
+
* paging in this package is therefore offset-based; `pageInfo.cursor` is
|
|
269
|
+
* informational only.
|
|
270
|
+
*/
|
|
253
271
|
export interface PaginationInput {
|
|
254
272
|
cursor?: string | null;
|
|
255
273
|
limit?: number;
|
|
@@ -315,6 +333,111 @@ export interface AthAvailabilityConnection {
|
|
|
315
333
|
items: AthAvailability[];
|
|
316
334
|
pageInfo: AthPageInfo;
|
|
317
335
|
}
|
|
336
|
+
/** `AthAgentRunStatus` — whether the provider call itself completed. */
|
|
337
|
+
export type AthAgentRunStatus = 'FAILED' | 'SUCCEEDED';
|
|
338
|
+
/** `AthAgentRunTrigger` — what caused the run. */
|
|
339
|
+
export type AthAgentRunTrigger = 'EVENT' | 'MANUAL' | 'SCHEDULED';
|
|
340
|
+
/** `AthAiAssessment` — the coaching call an assessment/override lands on. */
|
|
341
|
+
export type AthAiAssessment = 'AT_RISK' | 'DELOAD' | 'MAINTAIN' | 'PROGRESSION';
|
|
342
|
+
/** One selectable (provider, model) pair from the static AI model catalog. */
|
|
343
|
+
export interface AthAiModelInfo {
|
|
344
|
+
provider: string;
|
|
345
|
+
model: string;
|
|
346
|
+
label: string;
|
|
347
|
+
isDefault: boolean;
|
|
348
|
+
capabilities: string[];
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* The workspace's saved default AI provider/model. `autoPilotEnabled` is the
|
|
352
|
+
* per-workspace opt-in for the scheduled loop; the loop is ALSO gated per
|
|
353
|
+
* deployment by the `ATHELETEBRIDGE_AGENT_LOOP_ENABLED` kill switch, so a true
|
|
354
|
+
* here does not on its own mean anything is running.
|
|
355
|
+
*/
|
|
356
|
+
export interface AthWorkspaceAiConfig {
|
|
357
|
+
workspaceId: string;
|
|
358
|
+
provider: string;
|
|
359
|
+
model: string;
|
|
360
|
+
autoPilotEnabled: boolean;
|
|
361
|
+
autoPilotLastRunAt: string | null;
|
|
362
|
+
updatedAt: string;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* One row of the append-only AI decision ledger. `decision` and `inputRefs` are
|
|
366
|
+
* free-form JSON by contract (ids + short summaries only, never raw user
|
|
367
|
+
* content) — read them through `utils/aiDecision`, never by casting.
|
|
368
|
+
*/
|
|
369
|
+
export interface AthAgentRun {
|
|
370
|
+
id: string;
|
|
371
|
+
workspaceId: string;
|
|
372
|
+
actorId: string;
|
|
373
|
+
actorType: string;
|
|
374
|
+
provider: string;
|
|
375
|
+
model: string;
|
|
376
|
+
trigger: AthAgentRunTrigger;
|
|
377
|
+
status: AthAgentRunStatus;
|
|
378
|
+
promptSummary: string;
|
|
379
|
+
/** Every attempt's raw upstream failure, for a FAILED run. */
|
|
380
|
+
error: string | null;
|
|
381
|
+
/** The decision payload, or `{ parseError }` when the reply was unusable. */
|
|
382
|
+
decision: unknown;
|
|
383
|
+
/** Provenance: the ids and aggregate stats the model actually considered. */
|
|
384
|
+
inputRefs: unknown;
|
|
385
|
+
tokensIn: number | null;
|
|
386
|
+
tokensOut: number | null;
|
|
387
|
+
latencyMs: number | null;
|
|
388
|
+
costUsd: number | null;
|
|
389
|
+
createdAt: string;
|
|
390
|
+
}
|
|
391
|
+
export interface AthAgentRunConnection {
|
|
392
|
+
items: AthAgentRun[];
|
|
393
|
+
pageInfo: AthPageInfo;
|
|
394
|
+
}
|
|
395
|
+
/** Result of `athOverrideAgentRun` — itself recorded as a NEW ledger row. */
|
|
396
|
+
export interface AthAgentRunOverride {
|
|
397
|
+
id: string;
|
|
398
|
+
workspaceId: string;
|
|
399
|
+
programId: string;
|
|
400
|
+
supersedesRunId: string;
|
|
401
|
+
assessment: AthAiAssessment;
|
|
402
|
+
note: string;
|
|
403
|
+
appliedToProgram: boolean;
|
|
404
|
+
createdAt: string;
|
|
405
|
+
}
|
|
406
|
+
/** Result of `athAdjustPlanFromPerformance` — a PROPOSAL, never an applied change. */
|
|
407
|
+
export interface AthPlanAdjustment {
|
|
408
|
+
agentRunId: string;
|
|
409
|
+
athleteId: string;
|
|
410
|
+
programId: string;
|
|
411
|
+
assessment: AthAiAssessment;
|
|
412
|
+
rationale: string;
|
|
413
|
+
confidence: number;
|
|
414
|
+
recommendedWeeklyLoadChangePct: number | null;
|
|
415
|
+
flags: string[];
|
|
416
|
+
appliedToProgram: boolean;
|
|
417
|
+
createdAt: string;
|
|
418
|
+
}
|
|
419
|
+
/** Result of `athGenerateProgram` — a DRAFT program the coach reviews. */
|
|
420
|
+
export interface AthGenerateProgramResult {
|
|
421
|
+
agentRunId: string;
|
|
422
|
+
program: AthProgram;
|
|
423
|
+
drillCount: number;
|
|
424
|
+
sessionCount: number;
|
|
425
|
+
}
|
|
426
|
+
/** Exactly one of teamId / athleteId must be set. */
|
|
427
|
+
export interface AthGenerateProgramInput {
|
|
428
|
+
teamId?: string;
|
|
429
|
+
athleteId?: string;
|
|
430
|
+
goals: string;
|
|
431
|
+
constraints?: string;
|
|
432
|
+
sport?: AthSport;
|
|
433
|
+
level?: AthProgramLevel;
|
|
434
|
+
/** Program length in weeks (1–12). Defaults to 4. */
|
|
435
|
+
weeks?: number;
|
|
436
|
+
/** Only used when athleteId is set — first week starts on/after this date. */
|
|
437
|
+
startDate?: string;
|
|
438
|
+
/** Force a provider instead of the workspace/platform default chain. */
|
|
439
|
+
requestedProvider?: string;
|
|
440
|
+
}
|
|
318
441
|
export interface AthCreateTeamInput {
|
|
319
442
|
name: string;
|
|
320
443
|
sport?: AthSport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAM5C;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC,+BAA+B;IAC/B,WAAW,CAAC,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IAEF,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,KAAK,MAAM,IAAI,CAAC;IAE9D,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,KAAK,MAAM,IAAI,CAAC;IAEvE,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAEvC,0CAA0C;IAC1C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAMvC,MAAM,MAAM,QAAQ,GAClB,WAAW,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEpG,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,aAAa,GACvB,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AAExF,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAE9F,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAExF,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC;AAEjF,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAElE,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAEjG,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnE,MAAM,MAAM,aAAa,GACvB,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,CAAC;AAMnG,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAGlB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,iCAAiC;AACjC,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,aAAa,CAAC;AAE7E,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAMD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,6DAA6D;AAC7D,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,uBAAuB,CAAC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { AthAiAssessment } from '../types';
|
|
2
|
+
|
|
3
|
+
/** One rendered key/value pair from a JSON payload. */
|
|
4
|
+
export interface AiPayloadEntry {
|
|
5
|
+
key: string;
|
|
6
|
+
label: string;
|
|
7
|
+
value: string;
|
|
8
|
+
}
|
|
9
|
+
export type AiDecisionKind =
|
|
10
|
+
/** No decision recorded (a FAILED run never reached one). */
|
|
11
|
+
'none'
|
|
12
|
+
/** The provider replied but the reply was unusable — `{ parseError }`. */
|
|
13
|
+
| 'parse-failure'
|
|
14
|
+
/** `athAdjustPlanFromPerformance` — the AI's read of an athlete's trend. */
|
|
15
|
+
| 'assessment'
|
|
16
|
+
/** `athOverrideAgentRun` — a coach's review of a prior decision. */
|
|
17
|
+
| 'override'
|
|
18
|
+
/** `athGenerateProgram` — a generated multi-week plan. */
|
|
19
|
+
| 'program-plan'
|
|
20
|
+
/** Recognisably JSON, but not a shape this build knows. */
|
|
21
|
+
| 'other';
|
|
22
|
+
export interface AiDecisionSummary {
|
|
23
|
+
kind: AiDecisionKind;
|
|
24
|
+
/** Short headline for the decision card. */
|
|
25
|
+
title: string;
|
|
26
|
+
/** True when the card must read as a failure, not as an empty success. */
|
|
27
|
+
isFailure: boolean;
|
|
28
|
+
assessment: AthAiAssessment | null;
|
|
29
|
+
/** Resolution written by the engine: PROPOSED / ACCEPTED / OVERRIDDEN. */
|
|
30
|
+
status: string | null;
|
|
31
|
+
rationale: string | null;
|
|
32
|
+
note: string | null;
|
|
33
|
+
confidence: number | null;
|
|
34
|
+
recommendedWeeklyLoadChangePct: number | null;
|
|
35
|
+
flags: string[];
|
|
36
|
+
parseError: string | null;
|
|
37
|
+
/** Every payload key not surfaced in a dedicated field above. */
|
|
38
|
+
extra: AiPayloadEntry[];
|
|
39
|
+
}
|
|
40
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
41
|
+
/** Title-cased label for a payload key (`avgRpe` → `Avg rpe`). */
|
|
42
|
+
export declare function humanizePayloadKey(key: string): string;
|
|
43
|
+
/** Render any JSON value as a single readable line. */
|
|
44
|
+
export declare function formatPayloadValue(value: unknown): string;
|
|
45
|
+
/** Flatten a JSON payload into ordered, renderable entries. Never drops a key. */
|
|
46
|
+
export declare function toPayloadEntries(payload: unknown, skipKeys?: ReadonlySet<string>): AiPayloadEntry[];
|
|
47
|
+
/**
|
|
48
|
+
* Provenance entries for a run's `inputRefs` — the ids and aggregate stats the
|
|
49
|
+
* model actually considered. Keys whose value is null/undefined are dropped
|
|
50
|
+
* (the engine writes `{ teamId, athleteId }` with one of them unset).
|
|
51
|
+
*/
|
|
52
|
+
export declare function toProvenanceEntries(inputRefs: unknown): AiPayloadEntry[];
|
|
53
|
+
/**
|
|
54
|
+
* Classify and unpack a ledger row's `decision` payload for rendering.
|
|
55
|
+
*
|
|
56
|
+
* A `parseError` payload is classified as a FAILURE even though the ledger row
|
|
57
|
+
* itself is SUCCEEDED (the provider answered; the answer was unusable) — that
|
|
58
|
+
* distinction is the whole point of recording it, so the card must show it.
|
|
59
|
+
*/
|
|
60
|
+
export declare function summarizeDecision(decision: unknown): AiDecisionSummary;
|
|
61
|
+
/** Format a confidence in 0–1 as a percentage, or null when absent. */
|
|
62
|
+
export declare function formatConfidence(confidence: number | null): string | null;
|
|
63
|
+
/** Format a signed weekly-load change, e.g. `-10%` / `+5%`. */
|
|
64
|
+
export declare function formatLoadChange(pct: number | null): string | null;
|
|
65
|
+
/**
|
|
66
|
+
* The program an override can legally be filed against, read off the run's
|
|
67
|
+
* provenance. `athAdjustPlanFromPerformance` and earlier overrides name it in
|
|
68
|
+
* `inputRefs.programId`; `athGenerateProgram` runs BEFORE the program exists,
|
|
69
|
+
* so its runs carry no program id and the coach must choose one (the service
|
|
70
|
+
* validates the link and answers NOT_FOUND when the run never touched it).
|
|
71
|
+
*/
|
|
72
|
+
export declare function programIdFromInputRefs(inputRefs: unknown): string | null;
|
|
73
|
+
//# sourceMappingURL=aiDecision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiDecision.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/utils/aiDecision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc;AACxB,6DAA6D;AAC3D,MAAM;AACR,0EAA0E;GACxE,eAAe;AACjB,4EAA4E;GAC1E,YAAY;AACd,oEAAoE;GAClE,UAAU;AACZ,0DAA0D;GACxD,cAAc;AAChB,2DAA2D;GACzD,OAAO,CAAC;AAEZ,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,0EAA0E;IAC1E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,8BAA8B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iEAAiE;IACjE,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAgDD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWtD;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAuBzD;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAC7B,cAAc,EAAE,CAWlB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,OAAO,GAAG,cAAc,EAAE,CAWxE;AAuCD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,iBAAiB,CAuFtE;AAED,uEAAuE;AACvE,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAMzE;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAMlE;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKxE"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
//#region src/atheletebridge/utils/aiDecision.ts
|
|
2
|
+
var e = [
|
|
3
|
+
"AT_RISK",
|
|
4
|
+
"DELOAD",
|
|
5
|
+
"MAINTAIN",
|
|
6
|
+
"PROGRESSION"
|
|
7
|
+
], t = new Set([
|
|
8
|
+
"assessment",
|
|
9
|
+
"status",
|
|
10
|
+
"rationale",
|
|
11
|
+
"note",
|
|
12
|
+
"confidence",
|
|
13
|
+
"recommendedWeeklyLoadChangePct",
|
|
14
|
+
"flags",
|
|
15
|
+
"parseError"
|
|
16
|
+
]), n = {
|
|
17
|
+
agentRunId: "Agent run",
|
|
18
|
+
athleteId: "Athlete",
|
|
19
|
+
avgRpe: "Average RPE",
|
|
20
|
+
avgTotalLoad: "Average total load",
|
|
21
|
+
constraints: "Constraints",
|
|
22
|
+
decidedAt: "Decided at",
|
|
23
|
+
decidedBy: "Decided by",
|
|
24
|
+
goals: "Goals",
|
|
25
|
+
level: "Level",
|
|
26
|
+
loadTrend: "Load trend",
|
|
27
|
+
metricCount: "Metrics considered",
|
|
28
|
+
metricSummaries: "Metric summaries",
|
|
29
|
+
programId: "Program",
|
|
30
|
+
proposedAssessment: "AI proposed",
|
|
31
|
+
requestedWeeks: "Requested weeks",
|
|
32
|
+
rpeTrend: "RPE trend",
|
|
33
|
+
source: "Source",
|
|
34
|
+
sport: "Sport",
|
|
35
|
+
statusCounts: "Workout status counts",
|
|
36
|
+
supersedesRunId: "Supersedes run",
|
|
37
|
+
teamId: "Team",
|
|
38
|
+
weeks: "Weeks",
|
|
39
|
+
workoutLogCount: "Workout logs considered"
|
|
40
|
+
};
|
|
41
|
+
function r(e) {
|
|
42
|
+
return typeof e == "object" && !!e && !Array.isArray(e);
|
|
43
|
+
}
|
|
44
|
+
function i(e) {
|
|
45
|
+
let t = n[e];
|
|
46
|
+
if (t) return t;
|
|
47
|
+
let r = e.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").trim().toLowerCase();
|
|
48
|
+
return r ? r.charAt(0).toUpperCase() + r.slice(1) : e;
|
|
49
|
+
}
|
|
50
|
+
function a(e) {
|
|
51
|
+
if (e == null) return "—";
|
|
52
|
+
if (typeof e == "string") return e.trim() ? e : "—";
|
|
53
|
+
if (typeof e == "number") return Number.isFinite(e) ? String(e) : "—";
|
|
54
|
+
if (typeof e == "boolean") return e ? "Yes" : "No";
|
|
55
|
+
if (Array.isArray(e)) return e.length === 0 ? "—" : e.map((e) => a(e)).join(", ");
|
|
56
|
+
if (r(e)) {
|
|
57
|
+
let t = Object.entries(e).map(([e, t]) => `${i(e)}: ${a(t)}`);
|
|
58
|
+
return t.length === 0 ? "—" : t.join(" · ");
|
|
59
|
+
}
|
|
60
|
+
return String(e);
|
|
61
|
+
}
|
|
62
|
+
function o(e, t) {
|
|
63
|
+
return r(e) ? Object.entries(e).filter(([e]) => !t?.has(e)).map(([e, t]) => ({
|
|
64
|
+
key: e,
|
|
65
|
+
label: i(e),
|
|
66
|
+
value: a(t)
|
|
67
|
+
})) : [];
|
|
68
|
+
}
|
|
69
|
+
function s(e) {
|
|
70
|
+
return r(e) ? Object.entries(e).filter(([, e]) => e != null).map(([e, t]) => ({
|
|
71
|
+
key: e,
|
|
72
|
+
label: i(e),
|
|
73
|
+
value: a(t)
|
|
74
|
+
})) : [];
|
|
75
|
+
}
|
|
76
|
+
function c(e, t) {
|
|
77
|
+
let n = e[t];
|
|
78
|
+
return typeof n == "string" && n.trim() ? n : null;
|
|
79
|
+
}
|
|
80
|
+
function l(e, t) {
|
|
81
|
+
let n = e[t];
|
|
82
|
+
return typeof n == "number" && Number.isFinite(n) ? n : null;
|
|
83
|
+
}
|
|
84
|
+
function u(t) {
|
|
85
|
+
let n = t.assessment;
|
|
86
|
+
return typeof n == "string" && e.includes(n) ? n : null;
|
|
87
|
+
}
|
|
88
|
+
function d(e) {
|
|
89
|
+
let t = e.flags;
|
|
90
|
+
return Array.isArray(t) ? t.filter((e) => typeof e == "string" && e.trim().length > 0) : [];
|
|
91
|
+
}
|
|
92
|
+
var f = {
|
|
93
|
+
assessment: null,
|
|
94
|
+
status: null,
|
|
95
|
+
rationale: null,
|
|
96
|
+
note: null,
|
|
97
|
+
confidence: null,
|
|
98
|
+
recommendedWeeklyLoadChangePct: null,
|
|
99
|
+
flags: [],
|
|
100
|
+
parseError: null,
|
|
101
|
+
extra: []
|
|
102
|
+
};
|
|
103
|
+
function p(e) {
|
|
104
|
+
if (e == null) return {
|
|
105
|
+
kind: "none",
|
|
106
|
+
title: "No decision recorded",
|
|
107
|
+
isFailure: !1,
|
|
108
|
+
...f
|
|
109
|
+
};
|
|
110
|
+
if (!r(e)) return {
|
|
111
|
+
kind: "other",
|
|
112
|
+
title: "Decision payload",
|
|
113
|
+
isFailure: !1,
|
|
114
|
+
...f,
|
|
115
|
+
extra: [{
|
|
116
|
+
key: "value",
|
|
117
|
+
label: "Value",
|
|
118
|
+
value: a(e)
|
|
119
|
+
}]
|
|
120
|
+
};
|
|
121
|
+
let n = c(e, "parseError");
|
|
122
|
+
if (n) return {
|
|
123
|
+
kind: "parse-failure",
|
|
124
|
+
title: "Unusable model reply",
|
|
125
|
+
isFailure: !0,
|
|
126
|
+
...f,
|
|
127
|
+
parseError: n,
|
|
128
|
+
extra: o(e, t)
|
|
129
|
+
};
|
|
130
|
+
let i = u(e), s = c(e, "note"), p = c(e, "status"), m = c(e, "rationale"), h = o(e, t);
|
|
131
|
+
return i && s ? {
|
|
132
|
+
...f,
|
|
133
|
+
kind: "override",
|
|
134
|
+
title: "Coach decision",
|
|
135
|
+
isFailure: !1,
|
|
136
|
+
assessment: i,
|
|
137
|
+
status: p,
|
|
138
|
+
note: s,
|
|
139
|
+
rationale: m,
|
|
140
|
+
flags: d(e),
|
|
141
|
+
extra: h
|
|
142
|
+
} : i ? {
|
|
143
|
+
...f,
|
|
144
|
+
kind: "assessment",
|
|
145
|
+
title: "Performance assessment",
|
|
146
|
+
isFailure: !1,
|
|
147
|
+
assessment: i,
|
|
148
|
+
status: p,
|
|
149
|
+
rationale: m,
|
|
150
|
+
confidence: l(e, "confidence"),
|
|
151
|
+
recommendedWeeklyLoadChangePct: l(e, "recommendedWeeklyLoadChangePct"),
|
|
152
|
+
flags: d(e),
|
|
153
|
+
extra: h
|
|
154
|
+
} : Array.isArray(e.weeks) ? {
|
|
155
|
+
...f,
|
|
156
|
+
kind: "program-plan",
|
|
157
|
+
title: "Generated training plan",
|
|
158
|
+
isFailure: !1,
|
|
159
|
+
rationale: m,
|
|
160
|
+
extra: h
|
|
161
|
+
} : {
|
|
162
|
+
...f,
|
|
163
|
+
kind: "other",
|
|
164
|
+
title: "Decision payload",
|
|
165
|
+
isFailure: !1,
|
|
166
|
+
status: p,
|
|
167
|
+
rationale: m,
|
|
168
|
+
note: s,
|
|
169
|
+
flags: d(e),
|
|
170
|
+
extra: h
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function m(e) {
|
|
174
|
+
return e === null ? null : `${Math.round(Math.min(Math.max(e, 0), 1) * 100)}%`;
|
|
175
|
+
}
|
|
176
|
+
function h(e) {
|
|
177
|
+
if (e === null) return null;
|
|
178
|
+
let t = Math.round(e * 10) / 10;
|
|
179
|
+
return `${t > 0 ? "+" : ""}${t}%`;
|
|
180
|
+
}
|
|
181
|
+
function g(e) {
|
|
182
|
+
return r(e) ? c(e, "programId") : null;
|
|
183
|
+
}
|
|
184
|
+
//#endregion
|
|
185
|
+
export { m as formatConfidence, h as formatLoadChange, r as isRecord, g as programIdFromInputRefs, p as summarizeDecision, s as toProvenanceEntries };
|
|
186
|
+
|
|
187
|
+
//# sourceMappingURL=aiDecision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiDecision.js","names":[],"sources":["../../../src/atheletebridge/utils/aiDecision.ts"],"sourcesContent":["/**\n * AI ledger payload readers\n * @module atheletebridge/utils/aiDecision\n *\n * `AthAgentRun.decision` and `AthAgentRun.inputRefs` are JSON by contract: the\n * decision engine writes a different shape per decision path (a performance\n * assessment, a coach override, a generated program plan) and, when the model's\n * reply could not be parsed, a `{ parseError }` marker on an otherwise\n * SUCCEEDED row.\n *\n * Two rules govern this file:\n *\n * 1. NOTHING IS HIDDEN. A payload shape this module does not recognise is still\n * rendered, key by key, via `extra`. A card that silently drops unknown keys\n * is how a failed decision reads as an empty success.\n * 2. NOTHING IS CAST. Every read is a guarded lookup on `unknown`, so a payload\n * that disagrees with the shape we expect degrades to \"shown generically\"\n * rather than to a runtime crash inside the render.\n */\n\nimport type { AthAiAssessment } from '../types';\n\n/** One rendered key/value pair from a JSON payload. */\nexport interface AiPayloadEntry {\n key: string;\n label: string;\n value: string;\n}\n\nexport type AiDecisionKind =\n /** No decision recorded (a FAILED run never reached one). */\n | 'none'\n /** The provider replied but the reply was unusable — `{ parseError }`. */\n | 'parse-failure'\n /** `athAdjustPlanFromPerformance` — the AI's read of an athlete's trend. */\n | 'assessment'\n /** `athOverrideAgentRun` — a coach's review of a prior decision. */\n | 'override'\n /** `athGenerateProgram` — a generated multi-week plan. */\n | 'program-plan'\n /** Recognisably JSON, but not a shape this build knows. */\n | 'other';\n\nexport interface AiDecisionSummary {\n kind: AiDecisionKind;\n /** Short headline for the decision card. */\n title: string;\n /** True when the card must read as a failure, not as an empty success. */\n isFailure: boolean;\n assessment: AthAiAssessment | null;\n /** Resolution written by the engine: PROPOSED / ACCEPTED / OVERRIDDEN. */\n status: string | null;\n rationale: string | null;\n note: string | null;\n confidence: number | null;\n recommendedWeeklyLoadChangePct: number | null;\n flags: string[];\n parseError: string | null;\n /** Every payload key not surfaced in a dedicated field above. */\n extra: AiPayloadEntry[];\n}\n\nconst ASSESSMENT_VALUES: readonly AthAiAssessment[] = [\n 'AT_RISK',\n 'DELOAD',\n 'MAINTAIN',\n 'PROGRESSION',\n];\n\n/** Keys rendered through a dedicated field on {@link AiDecisionSummary}. */\nconst DEDICATED_DECISION_KEYS = new Set([\n 'assessment',\n 'status',\n 'rationale',\n 'note',\n 'confidence',\n 'recommendedWeeklyLoadChangePct',\n 'flags',\n 'parseError',\n]);\n\n/** Human labels for the provenance keys the decision engine actually writes. */\nconst PAYLOAD_LABELS: Record<string, string> = {\n agentRunId: 'Agent run',\n athleteId: 'Athlete',\n avgRpe: 'Average RPE',\n avgTotalLoad: 'Average total load',\n constraints: 'Constraints',\n decidedAt: 'Decided at',\n decidedBy: 'Decided by',\n goals: 'Goals',\n level: 'Level',\n loadTrend: 'Load trend',\n metricCount: 'Metrics considered',\n metricSummaries: 'Metric summaries',\n programId: 'Program',\n proposedAssessment: 'AI proposed',\n requestedWeeks: 'Requested weeks',\n rpeTrend: 'RPE trend',\n source: 'Source',\n sport: 'Sport',\n statusCounts: 'Workout status counts',\n supersedesRunId: 'Supersedes run',\n teamId: 'Team',\n weeks: 'Weeks',\n workoutLogCount: 'Workout logs considered',\n};\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Title-cased label for a payload key (`avgRpe` → `Avg rpe`). */\nexport function humanizePayloadKey(key: string): string {\n const known = PAYLOAD_LABELS[key];\n if (known) {\n return known;\n }\n const spaced = key\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .trim()\n .toLowerCase();\n return spaced ? spaced.charAt(0).toUpperCase() + spaced.slice(1) : key;\n}\n\n/** Render any JSON value as a single readable line. */\nexport function formatPayloadValue(value: unknown): string {\n if (value === null || value === undefined) {\n return '—';\n }\n if (typeof value === 'string') {\n return value.trim() ? value : '—';\n }\n if (typeof value === 'number') {\n return Number.isFinite(value) ? String(value) : '—';\n }\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No';\n }\n if (Array.isArray(value)) {\n return value.length === 0 ? '—' : value.map((item) => formatPayloadValue(item)).join(', ');\n }\n if (isRecord(value)) {\n const parts = Object.entries(value).map(\n ([key, nested]) => `${humanizePayloadKey(key)}: ${formatPayloadValue(nested)}`\n );\n return parts.length === 0 ? '—' : parts.join(' · ');\n }\n return String(value);\n}\n\n/** Flatten a JSON payload into ordered, renderable entries. Never drops a key. */\nexport function toPayloadEntries(\n payload: unknown,\n skipKeys?: ReadonlySet<string>\n): AiPayloadEntry[] {\n if (!isRecord(payload)) {\n return [];\n }\n return Object.entries(payload)\n .filter(([key]) => !skipKeys?.has(key))\n .map(([key, value]) => ({\n key,\n label: humanizePayloadKey(key),\n value: formatPayloadValue(value),\n }));\n}\n\n/**\n * Provenance entries for a run's `inputRefs` — the ids and aggregate stats the\n * model actually considered. Keys whose value is null/undefined are dropped\n * (the engine writes `{ teamId, athleteId }` with one of them unset).\n */\nexport function toProvenanceEntries(inputRefs: unknown): AiPayloadEntry[] {\n if (!isRecord(inputRefs)) {\n return [];\n }\n return Object.entries(inputRefs)\n .filter(([, value]) => value !== null && value !== undefined)\n .map(([key, value]) => ({\n key,\n label: humanizePayloadKey(key),\n value: formatPayloadValue(value),\n }));\n}\n\nfunction readString(record: Record<string, unknown>, key: string): string | null {\n const value = record[key];\n return typeof value === 'string' && value.trim() ? value : null;\n}\n\nfunction readNumber(record: Record<string, unknown>, key: string): number | null {\n const value = record[key];\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\n\nfunction readAssessment(record: Record<string, unknown>): AthAiAssessment | null {\n const value = record.assessment;\n return typeof value === 'string' && (ASSESSMENT_VALUES as readonly string[]).includes(value)\n ? (value as AthAiAssessment)\n : null;\n}\n\nfunction readFlags(record: Record<string, unknown>): string[] {\n const value = record.flags;\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter((flag): flag is string => typeof flag === 'string' && flag.trim().length > 0);\n}\n\nconst EMPTY_SUMMARY: Omit<AiDecisionSummary, 'kind' | 'title' | 'isFailure'> = {\n assessment: null,\n status: null,\n rationale: null,\n note: null,\n confidence: null,\n recommendedWeeklyLoadChangePct: null,\n flags: [],\n parseError: null,\n extra: [],\n};\n\n/**\n * Classify and unpack a ledger row's `decision` payload for rendering.\n *\n * A `parseError` payload is classified as a FAILURE even though the ledger row\n * itself is SUCCEEDED (the provider answered; the answer was unusable) — that\n * distinction is the whole point of recording it, so the card must show it.\n */\nexport function summarizeDecision(decision: unknown): AiDecisionSummary {\n if (decision === null || decision === undefined) {\n return { kind: 'none', title: 'No decision recorded', isFailure: false, ...EMPTY_SUMMARY };\n }\n\n if (!isRecord(decision)) {\n return {\n kind: 'other',\n title: 'Decision payload',\n isFailure: false,\n ...EMPTY_SUMMARY,\n extra: [{ key: 'value', label: 'Value', value: formatPayloadValue(decision) }],\n };\n }\n\n const parseError = readString(decision, 'parseError');\n if (parseError) {\n return {\n kind: 'parse-failure',\n title: 'Unusable model reply',\n isFailure: true,\n ...EMPTY_SUMMARY,\n parseError,\n extra: toPayloadEntries(decision, DEDICATED_DECISION_KEYS),\n };\n }\n\n const assessment = readAssessment(decision);\n const note = readString(decision, 'note');\n const status = readString(decision, 'status');\n const rationale = readString(decision, 'rationale');\n const extra = toPayloadEntries(decision, DEDICATED_DECISION_KEYS);\n\n if (assessment && note) {\n // A coach override: assessment + note + resolution status, no rationale.\n return {\n ...EMPTY_SUMMARY,\n kind: 'override',\n title: 'Coach decision',\n isFailure: false,\n assessment,\n status,\n note,\n rationale,\n flags: readFlags(decision),\n extra,\n };\n }\n\n if (assessment) {\n return {\n ...EMPTY_SUMMARY,\n kind: 'assessment',\n title: 'Performance assessment',\n isFailure: false,\n assessment,\n status,\n rationale,\n confidence: readNumber(decision, 'confidence'),\n recommendedWeeklyLoadChangePct: readNumber(decision, 'recommendedWeeklyLoadChangePct'),\n flags: readFlags(decision),\n extra,\n };\n }\n\n if (Array.isArray(decision.weeks)) {\n return {\n ...EMPTY_SUMMARY,\n kind: 'program-plan',\n title: 'Generated training plan',\n isFailure: false,\n rationale,\n extra,\n };\n }\n\n return {\n ...EMPTY_SUMMARY,\n kind: 'other',\n title: 'Decision payload',\n isFailure: false,\n status,\n rationale,\n note,\n flags: readFlags(decision),\n extra,\n };\n}\n\n/** Format a confidence in 0–1 as a percentage, or null when absent. */\nexport function formatConfidence(confidence: number | null): string | null {\n if (confidence === null) {\n return null;\n }\n const clamped = Math.min(Math.max(confidence, 0), 1);\n return `${Math.round(clamped * 100)}%`;\n}\n\n/** Format a signed weekly-load change, e.g. `-10%` / `+5%`. */\nexport function formatLoadChange(pct: number | null): string | null {\n if (pct === null) {\n return null;\n }\n const rounded = Math.round(pct * 10) / 10;\n return `${rounded > 0 ? '+' : ''}${rounded}%`;\n}\n\n/**\n * The program an override can legally be filed against, read off the run's\n * provenance. `athAdjustPlanFromPerformance` and earlier overrides name it in\n * `inputRefs.programId`; `athGenerateProgram` runs BEFORE the program exists,\n * so its runs carry no program id and the coach must choose one (the service\n * validates the link and answers NOT_FOUND when the run never touched it).\n */\nexport function programIdFromInputRefs(inputRefs: unknown): string | null {\n if (!isRecord(inputRefs)) {\n return null;\n }\n return readString(inputRefs, 'programId');\n}\n"],"mappings":"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"}
|
|
@@ -8,5 +8,7 @@ export { formatDate, formatDuration } from './formatters';
|
|
|
8
8
|
export { safeExternalHref } from './url';
|
|
9
9
|
export { toIsoOrUndefined, isoToLocalInput } from './datetime';
|
|
10
10
|
export { timeAgo } from './timeAgo';
|
|
11
|
+
export { isRecord, humanizePayloadKey, formatPayloadValue, toPayloadEntries, toProvenanceEntries, summarizeDecision, formatConfidence, formatLoadChange, programIdFromInputRefs, } from './aiDecision';
|
|
12
|
+
export type { AiPayloadEntry, AiDecisionKind, AiDecisionSummary } from './aiDecision';
|
|
11
13
|
export { stableHash, initials, gradientForSeed, gradientCss, CREST_GRADIENTS } from './identity';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageContext.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/utils/pageContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,UAAU,wBAAwB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAG1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"pageContext.d.ts","sourceRoot":"","sources":["../../../src/atheletebridge/utils/pageContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,UAAU,wBAAwB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAG1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4FD,wBAAgB,iBAAiB,IAAI,WAAW,CAe/C;AAED,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,wBAAwB,CAkC1B"}
|
|
@@ -73,6 +73,11 @@ var e = new Set(["new", "edit"]), t = [
|
|
|
73
73
|
entityType: "ATHLETEBRIDGE_ANALYTICS",
|
|
74
74
|
idGroup: 0
|
|
75
75
|
},
|
|
76
|
+
{
|
|
77
|
+
pattern: /^\/atheletebridge\/ai$/,
|
|
78
|
+
entityType: "ATHLETEBRIDGE_AI_OPERATIONS",
|
|
79
|
+
idGroup: 0
|
|
80
|
+
},
|
|
76
81
|
{
|
|
77
82
|
pattern: /^\/atheletebridge\/tournaments$/,
|
|
78
83
|
entityType: "ATHLETEBRIDGE_TOURNAMENTS",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageContext.js","names":[],"sources":["../../../src/atheletebridge/utils/pageContext.ts"],"sourcesContent":["/**\n * Page context gathering — captures the user's current route context so the\n * assistant can resolve \"this / current / here\" without asking for an id.\n *\n * Two rules govern this file:\n *\n * 1. The capture index is declared PER ROUTE (`idGroup`), never assumed to be\n * `match[1]`. The athlete route (`/teams/:teamId/athletes/:memberId`) has two\n * captures, and a shared `match[1]` read handed the assistant an\n * `ATHLETEBRIDGE_ATHLETE` entityType paired with a TEAM id — a\n * confidently-wrong context. Declaring the group per row makes that class of\n * bug unrepresentable.\n * 2. Only ids and types cross the wire. No athlete names, emails or metric\n * values are ever forwarded, and only keys the agent actually accepts\n * (`ALLOWED_CONTEXT_KEYS` in wspace/sandbox/ai-assistant/src/context-loader.ts)\n * are emitted — `userAgent`/`timestamp` used to be sent and silently dropped.\n */\n\ninterface ConversationContextShape {\n entityType?: string;\n entityId?: string;\n activeTab?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface PageContext {\n // `currentUrl` (NOT `activeUrl`) — must match the agent's allowed-context-key\n // contract, otherwise the agent filters it out.\n currentUrl: string;\n currentPage: string;\n // The entity the user is currently looking at, resolved from the route.\n entityType?: string;\n entityId?: string;\n activeTab?: string;\n}\n\n/**\n * Route segments that are literals in the router, not entity ids. Without this\n * guard `/atheletebridge/teams/new` resolves to `entityId: 'new'`.\n */\nconst RESERVED_ID_SEGMENTS = new Set(['new', 'edit']);\n\ninterface RouteDescriptor {\n pattern: RegExp;\n entityType: string;\n /**\n * 1-based capture group holding the entity id, or 0 for index routes that\n * name a surface rather than a single record.\n */\n idGroup: number;\n /** Extra ids/flags derived from the match. Ids and types only — never names. */\n metadata?: (match: RegExpMatchArray) => Record<string, unknown>;\n}\n\n/**\n * Mirrors the routes registered in AthleteBridgeRoutes.tsx. Every shipped route\n * that names something the assistant can act on has a row here; anything absent\n * falls through to the generic `activeTab` branch and binds to nothing.\n */\nconst ROUTE_DESCRIPTORS: RouteDescriptor[] = [\n // Athlete detail is matched BEFORE team detail: its path is a strict\n // extension of the team path and the more specific pattern must win.\n {\n pattern: /^\\/atheletebridge\\/teams\\/([^/]+)\\/athletes\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_ATHLETE',\n idGroup: 2,\n metadata: (match) => ({ teamId: match[1] }),\n },\n {\n pattern: /^\\/atheletebridge\\/teams\\/([^/]+)\\/edit$/,\n entityType: 'ATHLETEBRIDGE_TEAM',\n idGroup: 1,\n metadata: () => ({ mode: 'edit' }),\n },\n {\n pattern: /^\\/atheletebridge\\/teams\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_TEAM',\n idGroup: 1,\n },\n { pattern: /^\\/atheletebridge\\/teams$/, entityType: 'ATHLETEBRIDGE_TEAMS', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/fixtures\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_FIXTURE',\n idGroup: 1,\n },\n { pattern: /^\\/atheletebridge\\/fixtures$/, entityType: 'ATHLETEBRIDGE_FIXTURES', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/programs\\/([^/]+)\\/edit$/,\n entityType: 'ATHLETEBRIDGE_PROGRAM',\n idGroup: 1,\n metadata: () => ({ mode: 'edit' }),\n },\n {\n pattern: /^\\/atheletebridge\\/programs\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_PROGRAM',\n idGroup: 1,\n },\n { pattern: /^\\/atheletebridge\\/programs$/, entityType: 'ATHLETEBRIDGE_PROGRAMS', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/sessions\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_SESSION',\n idGroup: 1,\n },\n { pattern: /^\\/atheletebridge\\/sessions$/, entityType: 'ATHLETEBRIDGE_SESSIONS', idGroup: 0 },\n // Index-only surfaces. AthleteBridgeRoutes.tsx registers no detail route for\n // these, so an id-capturing pattern here could never match anything real.\n { pattern: /^\\/atheletebridge\\/standings$/, entityType: 'ATHLETEBRIDGE_STANDINGS', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/performance$/,\n entityType: 'ATHLETEBRIDGE_PERFORMANCE',\n idGroup: 0,\n },\n { pattern: /^\\/atheletebridge\\/analytics$/, entityType: 'ATHLETEBRIDGE_ANALYTICS', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/tournaments$/,\n entityType: 'ATHLETEBRIDGE_TOURNAMENTS',\n idGroup: 0,\n },\n { pattern: /^\\/atheletebridge\\/onboarding$/, entityType: 'ATHLETEBRIDGE_ONBOARDING', idGroup: 0 },\n];\n\nexport function gatherPageContext(): PageContext {\n const pathSegments = window.location.pathname.split('/').filter(Boolean);\n const currentPage = pathSegments.slice(0, 3).join('/') || 'home';\n const entity = resolveAthleteBridgeConversationContext(\n window.location.pathname,\n window.location.search\n );\n\n return {\n currentUrl: window.location.href,\n currentPage,\n entityType: entity.entityType,\n entityId: entity.entityId,\n activeTab: entity.activeTab,\n };\n}\n\nexport function resolveAthleteBridgeConversationContext(\n pathname: string,\n search: string\n): ConversationContextShape {\n const params = new URLSearchParams(search);\n\n for (const descriptor of ROUTE_DESCRIPTORS) {\n const match = pathname.match(descriptor.pattern);\n if (!match) continue;\n\n const entityId = descriptor.idGroup > 0 ? match[descriptor.idGroup] : undefined;\n // `/teams/new` shape-matches `/teams/:id` — a router literal is not an id.\n if (entityId !== undefined && RESERVED_ID_SEGMENTS.has(entityId)) continue;\n\n return {\n entityType: descriptor.entityType,\n ...(entityId ? { entityId } : {}),\n metadata: {\n routePattern: descriptor.pattern.source,\n ...(descriptor.metadata ? descriptor.metadata(match) : {}),\n },\n };\n }\n\n const activeTab =\n params.get('tab') ??\n (() => {\n const segments = pathname.split('/').filter(Boolean);\n return segments.length > 2 ? segments[segments.length - 1] : undefined;\n })();\n\n return {\n activeTab: activeTab ?? undefined,\n metadata: {\n ...(activeTab ? { activeTab } : {}),\n },\n };\n}\n"],"mappings":";AAwCA,IAAM,IAAuB,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,GAmB9C,IAAuC;CAG3C;EACE,SAAS;EACT,YAAY;EACZ,SAAS;EACT,WAAW,OAAW,EAAE,QAAQ,EAAM,GAAG;CAC3C;CACA;EACE,SAAS;EACT,YAAY;EACZ,SAAS;EACT,iBAAiB,EAAE,MAAM,OAAO;CAClC;CACA;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAA6B,YAAY;EAAuB,SAAS;CAAE;CACtF;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAgC,YAAY;EAA0B,SAAS;CAAE;CAC5F;EACE,SAAS;EACT,YAAY;EACZ,SAAS;EACT,iBAAiB,EAAE,MAAM,OAAO;CAClC;CACA;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAgC,YAAY;EAA0B,SAAS;CAAE;CAC5F;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAgC,YAAY;EAA0B,SAAS;CAAE;CAG5F;EAAE,SAAS;EAAiC,YAAY;EAA2B,SAAS;CAAE;CAC9F;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAiC,YAAY;EAA2B,SAAS;CAAE;CAC9F;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAkC,YAAY;EAA4B,SAAS;CAAE;AAClG;AAEA,SAAgB,IAAiC;CAE/C,IAAM,IADe,OAAO,SAAS,SAAS,MAAM,GAAG,EAAE,OAAO,OAC5C,EAAa,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,QACpD,IAAS,EACb,OAAO,SAAS,UAChB,OAAO,SAAS,MAClB;CAEA,OAAO;EACL,YAAY,OAAO,SAAS;EAC5B;EACA,YAAY,EAAO;EACnB,UAAU,EAAO;EACjB,WAAW,EAAO;CACpB;AACF;AAEA,SAAgB,EACd,GACA,GAC0B;CAC1B,IAAM,IAAS,IAAI,gBAAgB,CAAM;CAEzC,KAAK,IAAM,KAAc,GAAmB;EAC1C,IAAM,IAAQ,EAAS,MAAM,EAAW,OAAO;EAC/C,IAAI,CAAC,GAAO;EAEZ,IAAM,IAAW,EAAW,UAAU,IAAI,EAAM,EAAW,WAAW,KAAA;EAElE,YAAa,KAAA,KAAa,EAAqB,IAAI,CAAQ,IAE/D,OAAO;GACL,YAAY,EAAW;GACvB,GAAI,IAAW,EAAE,YAAS,IAAI,CAAC;GAC/B,UAAU;IACR,cAAc,EAAW,QAAQ;IACjC,GAAI,EAAW,WAAW,EAAW,SAAS,CAAK,IAAI,CAAC;GAC1D;EACF;CACF;CAEA,IAAM,IACJ,EAAO,IAAI,KAAK,YACT;EACL,IAAM,IAAW,EAAS,MAAM,GAAG,EAAE,OAAO,OAAO;EACnD,OAAO,EAAS,SAAS,IAAI,EAAS,EAAS,SAAS,KAAK,KAAA;CAC/D,GAAG;CAEL,OAAO;EACL,WAAW,KAAa,KAAA;EACxB,UAAU,EACR,GAAI,IAAY,EAAE,aAAU,IAAI,CAAC,EACnC;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"pageContext.js","names":[],"sources":["../../../src/atheletebridge/utils/pageContext.ts"],"sourcesContent":["/**\n * Page context gathering — captures the user's current route context so the\n * assistant can resolve \"this / current / here\" without asking for an id.\n *\n * Two rules govern this file:\n *\n * 1. The capture index is declared PER ROUTE (`idGroup`), never assumed to be\n * `match[1]`. The athlete route (`/teams/:teamId/athletes/:memberId`) has two\n * captures, and a shared `match[1]` read handed the assistant an\n * `ATHLETEBRIDGE_ATHLETE` entityType paired with a TEAM id — a\n * confidently-wrong context. Declaring the group per row makes that class of\n * bug unrepresentable.\n * 2. Only ids and types cross the wire. No athlete names, emails or metric\n * values are ever forwarded, and only keys the agent actually accepts\n * (`ALLOWED_CONTEXT_KEYS` in wspace/sandbox/ai-assistant/src/context-loader.ts)\n * are emitted — `userAgent`/`timestamp` used to be sent and silently dropped.\n */\n\ninterface ConversationContextShape {\n entityType?: string;\n entityId?: string;\n activeTab?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface PageContext {\n // `currentUrl` (NOT `activeUrl`) — must match the agent's allowed-context-key\n // contract, otherwise the agent filters it out.\n currentUrl: string;\n currentPage: string;\n // The entity the user is currently looking at, resolved from the route.\n entityType?: string;\n entityId?: string;\n activeTab?: string;\n}\n\n/**\n * Route segments that are literals in the router, not entity ids. Without this\n * guard `/atheletebridge/teams/new` resolves to `entityId: 'new'`.\n */\nconst RESERVED_ID_SEGMENTS = new Set(['new', 'edit']);\n\ninterface RouteDescriptor {\n pattern: RegExp;\n entityType: string;\n /**\n * 1-based capture group holding the entity id, or 0 for index routes that\n * name a surface rather than a single record.\n */\n idGroup: number;\n /** Extra ids/flags derived from the match. Ids and types only — never names. */\n metadata?: (match: RegExpMatchArray) => Record<string, unknown>;\n}\n\n/**\n * Mirrors the routes registered in AthleteBridgeRoutes.tsx. Every shipped route\n * that names something the assistant can act on has a row here; anything absent\n * falls through to the generic `activeTab` branch and binds to nothing.\n */\nconst ROUTE_DESCRIPTORS: RouteDescriptor[] = [\n // Athlete detail is matched BEFORE team detail: its path is a strict\n // extension of the team path and the more specific pattern must win.\n {\n pattern: /^\\/atheletebridge\\/teams\\/([^/]+)\\/athletes\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_ATHLETE',\n idGroup: 2,\n metadata: (match) => ({ teamId: match[1] }),\n },\n {\n pattern: /^\\/atheletebridge\\/teams\\/([^/]+)\\/edit$/,\n entityType: 'ATHLETEBRIDGE_TEAM',\n idGroup: 1,\n metadata: () => ({ mode: 'edit' }),\n },\n {\n pattern: /^\\/atheletebridge\\/teams\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_TEAM',\n idGroup: 1,\n },\n { pattern: /^\\/atheletebridge\\/teams$/, entityType: 'ATHLETEBRIDGE_TEAMS', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/fixtures\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_FIXTURE',\n idGroup: 1,\n },\n { pattern: /^\\/atheletebridge\\/fixtures$/, entityType: 'ATHLETEBRIDGE_FIXTURES', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/programs\\/([^/]+)\\/edit$/,\n entityType: 'ATHLETEBRIDGE_PROGRAM',\n idGroup: 1,\n metadata: () => ({ mode: 'edit' }),\n },\n {\n pattern: /^\\/atheletebridge\\/programs\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_PROGRAM',\n idGroup: 1,\n },\n { pattern: /^\\/atheletebridge\\/programs$/, entityType: 'ATHLETEBRIDGE_PROGRAMS', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/sessions\\/([^/]+)$/,\n entityType: 'ATHLETEBRIDGE_SESSION',\n idGroup: 1,\n },\n { pattern: /^\\/atheletebridge\\/sessions$/, entityType: 'ATHLETEBRIDGE_SESSIONS', idGroup: 0 },\n // Index-only surfaces. AthleteBridgeRoutes.tsx registers no detail route for\n // these, so an id-capturing pattern here could never match anything real.\n { pattern: /^\\/atheletebridge\\/standings$/, entityType: 'ATHLETEBRIDGE_STANDINGS', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/performance$/,\n entityType: 'ATHLETEBRIDGE_PERFORMANCE',\n idGroup: 0,\n },\n { pattern: /^\\/atheletebridge\\/analytics$/, entityType: 'ATHLETEBRIDGE_ANALYTICS', idGroup: 0 },\n {\n pattern: /^\\/atheletebridge\\/ai$/,\n entityType: 'ATHLETEBRIDGE_AI_OPERATIONS',\n idGroup: 0,\n },\n {\n pattern: /^\\/atheletebridge\\/tournaments$/,\n entityType: 'ATHLETEBRIDGE_TOURNAMENTS',\n idGroup: 0,\n },\n { pattern: /^\\/atheletebridge\\/onboarding$/, entityType: 'ATHLETEBRIDGE_ONBOARDING', idGroup: 0 },\n];\n\nexport function gatherPageContext(): PageContext {\n const pathSegments = window.location.pathname.split('/').filter(Boolean);\n const currentPage = pathSegments.slice(0, 3).join('/') || 'home';\n const entity = resolveAthleteBridgeConversationContext(\n window.location.pathname,\n window.location.search\n );\n\n return {\n currentUrl: window.location.href,\n currentPage,\n entityType: entity.entityType,\n entityId: entity.entityId,\n activeTab: entity.activeTab,\n };\n}\n\nexport function resolveAthleteBridgeConversationContext(\n pathname: string,\n search: string\n): ConversationContextShape {\n const params = new URLSearchParams(search);\n\n for (const descriptor of ROUTE_DESCRIPTORS) {\n const match = pathname.match(descriptor.pattern);\n if (!match) continue;\n\n const entityId = descriptor.idGroup > 0 ? match[descriptor.idGroup] : undefined;\n // `/teams/new` shape-matches `/teams/:id` — a router literal is not an id.\n if (entityId !== undefined && RESERVED_ID_SEGMENTS.has(entityId)) continue;\n\n return {\n entityType: descriptor.entityType,\n ...(entityId ? { entityId } : {}),\n metadata: {\n routePattern: descriptor.pattern.source,\n ...(descriptor.metadata ? descriptor.metadata(match) : {}),\n },\n };\n }\n\n const activeTab =\n params.get('tab') ??\n (() => {\n const segments = pathname.split('/').filter(Boolean);\n return segments.length > 2 ? segments[segments.length - 1] : undefined;\n })();\n\n return {\n activeTab: activeTab ?? undefined,\n metadata: {\n ...(activeTab ? { activeTab } : {}),\n },\n };\n}\n"],"mappings":";AAwCA,IAAM,IAAuB,IAAI,IAAI,CAAC,OAAO,MAAM,CAAC,GAmB9C,IAAuC;CAG3C;EACE,SAAS;EACT,YAAY;EACZ,SAAS;EACT,WAAW,OAAW,EAAE,QAAQ,EAAM,GAAG;CAC3C;CACA;EACE,SAAS;EACT,YAAY;EACZ,SAAS;EACT,iBAAiB,EAAE,MAAM,OAAO;CAClC;CACA;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAA6B,YAAY;EAAuB,SAAS;CAAE;CACtF;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAgC,YAAY;EAA0B,SAAS;CAAE;CAC5F;EACE,SAAS;EACT,YAAY;EACZ,SAAS;EACT,iBAAiB,EAAE,MAAM,OAAO;CAClC;CACA;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAgC,YAAY;EAA0B,SAAS;CAAE;CAC5F;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAgC,YAAY;EAA0B,SAAS;CAAE;CAG5F;EAAE,SAAS;EAAiC,YAAY;EAA2B,SAAS;CAAE;CAC9F;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAiC,YAAY;EAA2B,SAAS;CAAE;CAC9F;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EACE,SAAS;EACT,YAAY;EACZ,SAAS;CACX;CACA;EAAE,SAAS;EAAkC,YAAY;EAA4B,SAAS;CAAE;AAClG;AAEA,SAAgB,IAAiC;CAE/C,IAAM,IADe,OAAO,SAAS,SAAS,MAAM,GAAG,EAAE,OAAO,OAC5C,EAAa,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,QACpD,IAAS,EACb,OAAO,SAAS,UAChB,OAAO,SAAS,MAClB;CAEA,OAAO;EACL,YAAY,OAAO,SAAS;EAC5B;EACA,YAAY,EAAO;EACnB,UAAU,EAAO;EACjB,WAAW,EAAO;CACpB;AACF;AAEA,SAAgB,EACd,GACA,GAC0B;CAC1B,IAAM,IAAS,IAAI,gBAAgB,CAAM;CAEzC,KAAK,IAAM,KAAc,GAAmB;EAC1C,IAAM,IAAQ,EAAS,MAAM,EAAW,OAAO;EAC/C,IAAI,CAAC,GAAO;EAEZ,IAAM,IAAW,EAAW,UAAU,IAAI,EAAM,EAAW,WAAW,KAAA;EAElE,YAAa,KAAA,KAAa,EAAqB,IAAI,CAAQ,IAE/D,OAAO;GACL,YAAY,EAAW;GACvB,GAAI,IAAW,EAAE,YAAS,IAAI,CAAC;GAC/B,UAAU;IACR,cAAc,EAAW,QAAQ;IACjC,GAAI,EAAW,WAAW,EAAW,SAAS,CAAK,IAAI,CAAC;GAC1D;EACF;CACF;CAEA,IAAM,IACJ,EAAO,IAAI,KAAK,YACT;EACL,IAAM,IAAW,EAAS,MAAM,GAAG,EAAE,OAAO,OAAO;EACnD,OAAO,EAAS,SAAS,IAAI,EAAS,EAAS,SAAS,KAAK,KAAA;CAC/D,GAAG;CAEL,OAAO;EACL,WAAW,KAAa,KAAA;EACxB,UAAU,EACR,GAAI,IAAY,EAAE,aAAU,IAAI,CAAC,EACnC;CACF;AACF"}
|