@qfei-design/make-ai-assistant 0.1.4 → 0.1.5

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/sse.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("./conversation-Yku9Lzj_.cjs"),S=1e6,u=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),p=(e,t,r)=>{const a=Object.keys(e).find(s=>s.toLowerCase()===t.toLowerCase());a&&delete e[a],e[t]=r},A=e=>{const t={};return Array.isArray(e)?e.forEach(([r,a])=>p(t,r,a)):e&&typeof e.forEach=="function"?e.forEach((r,a)=>p(t,a,r)):e&&Object.entries(e).forEach(([r,a])=>p(t,r,a)),p(t,"Accept","text/event-stream"),p(t,"Content-Type","application/json"),t},I=(e,t)=>{if(!u(t))throw new Error("Invalid assistant SSE event: data");if(Object.prototype.hasOwnProperty.call(t,"type"))throw new Error("Invalid assistant SSE event: unsupported field");try{return b.parseAssistantEvent({...t,type:e})}catch(r){throw r instanceof Error&&r.message.startsWith("Invalid assistant event")?new Error(r.message.replace("Invalid assistant event","Invalid assistant SSE event")):r}},w=e=>{if(!e.trim())return;const t=e.split(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("./conversation-Cv1wdvCR.cjs"),S=1e6,u=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),p=(e,t,r)=>{const a=Object.keys(e).find(s=>s.toLowerCase()===t.toLowerCase());a&&delete e[a],e[t]=r},A=e=>{const t={};return Array.isArray(e)?e.forEach(([r,a])=>p(t,r,a)):e&&typeof e.forEach=="function"?e.forEach((r,a)=>p(t,a,r)):e&&Object.entries(e).forEach(([r,a])=>p(t,r,a)),p(t,"Accept","text/event-stream"),p(t,"Content-Type","application/json"),t},I=(e,t)=>{if(!u(t))throw new Error("Invalid assistant SSE event: data");if(Object.prototype.hasOwnProperty.call(t,"type"))throw new Error("Invalid assistant SSE event: unsupported field");try{return b.parseAssistantEvent({...t,type:e})}catch(r){throw r instanceof Error&&r.message.startsWith("Invalid assistant event")?new Error(r.message.replace("Invalid assistant event","Invalid assistant SSE event")):r}},w=e=>{if(!e.trim())return;const t=e.split(`
2
2
  `),r=t.find(n=>n.startsWith("event:"))?.slice(6).trim(),a=t.filter(n=>n.startsWith("data:")).map(n=>n.slice(5).trimStart()).join(`
3
3
  `);if(t.some(n=>n.startsWith("event:")||n.startsWith("data:"))){if(!r||!a)throw new Error("Invalid assistant SSE event: missing event or data");try{return I(r,JSON.parse(a))}catch(n){throw n instanceof Error&&n.message.startsWith("Invalid assistant SSE event")?n:new Error("Invalid assistant SSE event: JSON")}}};async function*T(e,t,r=S){if(!e.body)throw new Error("当前运行环境无法读取 AI 助手流式响应");const a=e.body.getReader(),s=new TextDecoder;let n="",d=!1,h=!1,l;const c=()=>(l??=a.cancel().catch(o=>{console.error("[make-ai-assistant] SSE reader cancellation failed",{errorType:o instanceof Error?o.name:typeof o})}),l),f=()=>{c()};t?.addEventListener("abort",f,{once:!0});const m=o=>{const i=o.type==="error"||o.type==="run.cancelled"||o.type==="run.complete";return h||=i,i};try{for(;;){if(t?.aborted)throw new DOMException("Aborted","AbortError");const o=await a.read();if(t?.aborted)throw new DOMException("Aborted","AbortError");let i=s.decode(o.value,{stream:!o.done});d&&(i=`\r${i}`,d=!1),!o.done&&i.endsWith("\r")&&(i=i.slice(0,-1),d=!0),o.done&&d&&(i+="\r",d=!1),n+=i.replace(/\r\n|\r/g,`
4
4
  `);let E=n.indexOf(`
package/dist/sse.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { p as b } from "./conversation-Dy2Sghjv.js";
1
+ import { p as b } from "./conversation-B7eGUXi-.js";
2
2
  const S = 1e6, u = (e) => typeof e == "object" && e !== null && !Array.isArray(e), E = (e, t, r) => {
3
3
  const a = Object.keys(e).find(
4
4
  (s) => s.toLowerCase() === t.toLowerCase()
package/dist/styles.css CHANGED
@@ -116,6 +116,8 @@
116
116
  grid-template-rows: auto auto minmax(0, 1fr) auto;
117
117
  height: 100%;
118
118
  min-height: 360px;
119
+ min-width: 0;
120
+ position: relative;
119
121
  }
120
122
 
121
123
  .make-ai-assistant__header {
@@ -138,8 +140,9 @@
138
140
  .make-ai-assistant__header h2 {
139
141
  font-size: 15px;
140
142
  font-weight: 700;
141
- letter-spacing: -.01em;
143
+ letter-spacing: 0;
142
144
  line-height: 22px;
145
+ overflow-wrap: anywhere;
143
146
  }
144
147
 
145
148
  .make-ai-assistant__header p {
@@ -147,6 +150,7 @@
147
150
  font-size: 12px;
148
151
  line-height: 18px;
149
152
  margin-top: 1px;
153
+ overflow-wrap: anywhere;
150
154
  }
151
155
 
152
156
  .make-ai-assistant__avatar {
@@ -210,10 +214,12 @@
210
214
  margin: 12px 18px 0;
211
215
  padding: 8px 10px;
212
216
  border-radius: 10px;
217
+ overflow-wrap: anywhere;
213
218
  }
214
219
 
215
220
  .make-ai-assistant__body {
216
221
  min-height: 0;
222
+ min-width: 0;
217
223
  overflow: auto;
218
224
  overscroll-behavior: contain;
219
225
  padding: 22px 18px 30px;
@@ -345,7 +351,9 @@
345
351
  color: var(--make-ai-internal-text);
346
352
  font-size: 14px;
347
353
  line-height: 1.7;
354
+ overflow-wrap: anywhere;
348
355
  white-space: pre-wrap;
356
+ word-break: break-word;
349
357
  }
350
358
 
351
359
  .make-ai-assistant__message--user .make-ai-assistant__bubble {
@@ -385,6 +393,7 @@
385
393
  font-size: 13px;
386
394
  gap: 4px;
387
395
  line-height: 1.55;
396
+ overflow-wrap: anywhere;
388
397
  padding: 10px 12px;
389
398
  }
390
399
 
@@ -398,20 +407,167 @@
398
407
  align-items: center;
399
408
  color: var(--make-ai-internal-text-secondary);
400
409
  display: flex;
410
+ flex: 1;
401
411
  font-size: 12px;
402
412
  gap: 7px;
403
413
  line-height: 18px;
414
+ min-width: 0;
404
415
  min-height: 24px;
405
416
  }
406
417
 
407
- .make-ai-assistant__progress > span {
418
+ .make-ai-assistant__progress > span:first-child {
408
419
  animation: make-ai-pulse 1.2s ease-in-out infinite;
409
420
  background: var(--make-ai-internal-accent);
410
421
  border-radius: 50%;
422
+ flex: 0 0 auto;
411
423
  height: 7px;
412
424
  width: 7px;
413
425
  }
414
426
 
427
+ .make-ai-assistant__progress > span:last-child {
428
+ min-width: 0;
429
+ overflow-wrap: anywhere;
430
+ }
431
+
432
+ .make-ai-assistant__process {
433
+ background: var(--make-ai-internal-surface);
434
+ border: 1px solid color-mix(in srgb, var(--make-ai-internal-border) 88%, transparent);
435
+ border-radius: 10px;
436
+ color: var(--make-ai-internal-text-secondary);
437
+ font-size: 12px;
438
+ line-height: 1.55;
439
+ overflow: hidden;
440
+ overflow-wrap: anywhere;
441
+ }
442
+
443
+ .make-ai-assistant__process summary {
444
+ align-items: center;
445
+ cursor: pointer;
446
+ display: flex;
447
+ gap: 8px;
448
+ list-style: none;
449
+ min-height: 32px;
450
+ padding: 7px 9px;
451
+ }
452
+
453
+ .make-ai-assistant__process summary::-webkit-details-marker {
454
+ display: none;
455
+ }
456
+
457
+ .make-ai-assistant__process summary::after {
458
+ border-bottom: 1.5px solid currentColor;
459
+ border-right: 1.5px solid currentColor;
460
+ content: "";
461
+ flex: 0 0 auto;
462
+ height: 6px;
463
+ opacity: .72;
464
+ transform: rotate(45deg);
465
+ transition: transform 160ms ease;
466
+ width: 6px;
467
+ }
468
+
469
+ .make-ai-assistant__process[open] summary::after {
470
+ transform: rotate(225deg);
471
+ }
472
+
473
+ .make-ai-assistant__process-title {
474
+ flex: 1;
475
+ min-width: 0;
476
+ }
477
+
478
+ .make-ai-assistant__process-count {
479
+ color: color-mix(in srgb, var(--make-ai-internal-text-secondary) 78%, var(--make-ai-internal-bg));
480
+ flex: 0 0 auto;
481
+ font-size: 11px;
482
+ margin-left: auto;
483
+ }
484
+
485
+ .make-ai-assistant__process ol {
486
+ display: grid;
487
+ gap: 6px;
488
+ list-style: none;
489
+ margin: 0;
490
+ padding: 0 10px 10px 12px;
491
+ }
492
+
493
+ .make-ai-assistant__process li {
494
+ align-items: flex-start;
495
+ display: flex;
496
+ gap: 8px;
497
+ min-width: 0;
498
+ }
499
+
500
+ .make-ai-assistant__process li > span:first-child {
501
+ background: var(--make-ai-internal-border);
502
+ border-radius: 50%;
503
+ flex: 0 0 auto;
504
+ height: 6px;
505
+ margin-top: 7px;
506
+ width: 6px;
507
+ }
508
+
509
+ .make-ai-assistant__process li[data-step-active] > span:first-child {
510
+ background: var(--make-ai-internal-accent);
511
+ }
512
+
513
+ .make-ai-assistant__process li > span:last-child {
514
+ min-width: 0;
515
+ overflow-wrap: anywhere;
516
+ }
517
+
518
+ .make-ai-assistant__reply-actions {
519
+ align-items: center;
520
+ color: var(--make-ai-internal-text-secondary);
521
+ display: flex;
522
+ flex-wrap: wrap;
523
+ gap: 4px 10px;
524
+ min-height: 24px;
525
+ }
526
+
527
+ .make-ai-assistant__reply-actions button {
528
+ background: transparent;
529
+ border: 0;
530
+ border-radius: 6px;
531
+ color: inherit;
532
+ cursor: pointer;
533
+ font-size: 12px;
534
+ font-weight: 600;
535
+ padding: 3px 0;
536
+ }
537
+
538
+ .make-ai-assistant__reply-actions button:hover {
539
+ color: var(--make-ai-internal-accent);
540
+ }
541
+
542
+ .make-ai-assistant__reply-feedback {
543
+ color: color-mix(in srgb, var(--make-ai-internal-success) 78%, var(--make-ai-internal-text-secondary));
544
+ font-size: 12px;
545
+ }
546
+
547
+ .make-ai-assistant__reply-feedback[data-copy-status="error"] {
548
+ color: var(--make-ai-internal-danger);
549
+ }
550
+
551
+ .make-ai-assistant__back-to-latest {
552
+ background: var(--make-ai-internal-bg);
553
+ border: 1px solid color-mix(in srgb, var(--make-ai-internal-accent) 26%, var(--make-ai-internal-border));
554
+ border-radius: 999px;
555
+ bottom: 94px;
556
+ box-shadow: 0 8px 20px rgb(30 31 43 / 10%);
557
+ color: var(--make-ai-internal-accent);
558
+ cursor: pointer;
559
+ font-size: 12px;
560
+ font-weight: 600;
561
+ padding: 7px 11px;
562
+ position: absolute;
563
+ right: 18px;
564
+ z-index: 2;
565
+ }
566
+
567
+ .make-ai-assistant__back-to-latest:hover {
568
+ background: var(--make-ai-internal-accent-soft);
569
+ }
570
+
415
571
  .make-ai-assistant__retry {
416
572
  align-self: flex-start;
417
573
  background: transparent;
@@ -558,7 +714,7 @@
558
714
  font-size: 30px;
559
715
  font-variant-numeric: tabular-nums;
560
716
  font-weight: 700;
561
- letter-spacing: -.04em;
717
+ letter-spacing: 0;
562
718
  line-height: 1.25;
563
719
  margin-top: 8px;
564
720
  }
@@ -680,6 +836,60 @@ button.make-ai-artifact__record:hover { background: var(--make-ai-internal-accen
680
836
  to { opacity: 1; transform: translateX(0); }
681
837
  }
682
838
 
839
+ @container (max-width: 360px) {
840
+ .make-ai-assistant__header {
841
+ gap: 8px;
842
+ grid-template-columns: auto minmax(0, 1fr) auto;
843
+ min-height: 64px;
844
+ padding: 12px 14px;
845
+ }
846
+
847
+ .make-ai-assistant__privacy-note {
848
+ align-items: flex-start;
849
+ margin: 10px 14px 0;
850
+ }
851
+
852
+ .make-ai-assistant__body {
853
+ padding: 18px 14px 28px;
854
+ }
855
+
856
+ .make-ai-assistant__message {
857
+ margin-bottom: 22px;
858
+ }
859
+
860
+ .make-ai-assistant__message--user .make-ai-assistant__message-turn {
861
+ max-width: 100%;
862
+ }
863
+
864
+ .make-ai-assistant__message--assistant .make-ai-assistant__message-stack {
865
+ margin-left: 32px;
866
+ max-width: calc(100% - 32px);
867
+ }
868
+
869
+ .make-ai-assistant__suggestions {
870
+ display: grid;
871
+ grid-template-columns: minmax(0, 1fr);
872
+ overflow: visible;
873
+ }
874
+
875
+ .make-ai-assistant__suggestions button {
876
+ text-align: left;
877
+ white-space: normal;
878
+ }
879
+
880
+ .make-ai-assistant__composer-region {
881
+ padding: 10px 14px 9px;
882
+ }
883
+
884
+ .make-ai-assistant__back-to-latest {
885
+ bottom: 104px;
886
+ left: 50%;
887
+ right: auto;
888
+ transform: translateX(-50%);
889
+ white-space: nowrap;
890
+ }
891
+ }
892
+
683
893
  @media (max-width: 560px) {
684
894
  .make-ai-assistant__drawer { width: 100vw; }
685
895
  .make-ai-assistant__launcher { bottom: 20px; right: 20px; }
@@ -704,9 +914,12 @@ button.make-ai-artifact__record:hover { background: var(--make-ai-internal-accen
704
914
  @media (prefers-reduced-motion: reduce) {
705
915
  .make-ai-assistant__drawer,
706
916
  .make-ai-assistant__launcher-orbit,
707
- .make-ai-assistant__progress > span,
917
+ .make-ai-assistant__progress > span:first-child,
708
918
  .make-ai-assistant__typing span {
709
919
  animation: none;
710
920
  }
711
- .make-ai-assistant__launcher { transition: none; }
921
+ .make-ai-assistant__launcher,
922
+ .make-ai-assistant__process summary::after {
923
+ transition: none;
924
+ }
712
925
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qfei-design/make-ai-assistant",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Platform-wide Make AI Assistant contracts, React shell, and context-aware artifact templates.",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -1 +0,0 @@
1
- "use strict";const $=(t,e)=>{let r=0;for(const a of t)if(r+=1,r>e)break;return r};const o={actions:10,comparisonItems:24,jsonCharacters:1e6,jsonDepth:64,jsonNodes:1e4,rankingItems:50,recordColumns:20,recordListRecords:100,recordValues:100,textCharacters:2e4,trendPointsPerSeries:120,trendSeries:8,validationIssues:100},l={artifactsPerRun:50,assistantMessagesPerRun:20,historyArtifacts:500,historyCharacters:1e6,historyMessages:200,identifierCharacters:1e3,messageCharacters:1e5},K=["metric","comparison","trend","ranking","record-list","notice"],C=()=>({success:!1,issues:[{path:"",message:"could not be safely inspected"}]}),D=new Set(["navigate","open-record","open-list","invoke"]),F=new Set(["decimal","currency","percent"]);class M extends Array{push(...e){const r=o.validationIssues-this.length;return r>0?super.push(...e.slice(0,r)):this.length}}const c=t=>(()=>{if(typeof t!="object"||t===null||Array.isArray(t))return!1;const e=Object.getPrototypeOf(t);return e===Object.prototype||e===null})(),x=t=>typeof t=="string"&&t.trim().length>0,T=(t,e)=>{let r=0;for(const a of t)if(r+=1,r>e)return r;return r},u=t=>typeof t=="string"&&T(t,o.textCharacters)<=o.textCharacters,b=t=>typeof t=="number"&&Number.isFinite(t),L=t=>t.length<=120?t:`${t.slice(0,117)}...`,m=(t,e,r)=>{x(t)?u(t)||r.push({path:e,message:`must contain at most ${o.textCharacters} characters`}):r.push({path:e,message:"must be a non-empty string"})},I=(t,e,r)=>{t!==void 0&&typeof t!="string"?r.push({path:e,message:"must be a string"}):typeof t=="string"&&!u(t)&&r.push({path:e,message:`must contain at most ${o.textCharacters} characters`})},d=(t,e,r,a)=>{for(const s in t)if(Object.prototype.hasOwnProperty.call(t,s)){if(a.length>=o.validationIssues)break;e.has(s)||a.push({path:L(r?`${r}.${s}`:s),message:"is not supported"})}},A=(t,e,r,a)=>t.length>e?(a.push({path:r,message:`must contain at most ${e} items`}),!0):!1,E=(t,e,r)=>{for(let a=0;a<t.length;a+=1)if(!Object.prototype.hasOwnProperty.call(t,a))return r.push({path:e,message:"must not contain empty array slots"}),!0;return!1},S=(t,e,r,a)=>{const s=new Set;t.forEach((n,f)=>{if(!c(n)||typeof n[e]!="string")return;const i=n[e];s.has(i)?a.push({path:`${r}[${f}].${e}`,message:"must be unique within the collection"}):s.add(i)})},q=new Set(["schemaVersion","id","kind","title","summary","presentation","actions","meta","data"]),U=new Set(["template","density"]),z=new Set(["style","currency","precision","unit"]),J=new Set(["id","label","intent","target","appearance"]),H=new Set(["value","format","delta","context"]),B=new Set(["value","format","direction","label"]),P=new Set(["items"]),W=new Set(["id","label","value","format","hint"]),G=new Set(["series"]),Q=new Set(["id","label","points","format"]),X=new Set(["x","y"]),Z=new Set(["id","label","value","format","description"]),tt=new Set(["entity","columns","records","total"]),et=new Set(["key","label"]),rt=new Set(["key","label","format"]),nt=new Set(["id","title","values","action"]),at=new Set(["tone","body"]),w=(t,e,r)=>c(t)?(d(t,z,e,r),t.style!==void 0&&(typeof t.style!="string"||!F.has(t.style))&&r.push({path:`${e}.style`,message:"is not supported"}),t.currency!==void 0&&m(t.currency,`${e}.currency`,r),t.precision!==void 0&&(!Number.isInteger(t.precision)||Number(t.precision)<0||Number(t.precision)>20)&&r.push({path:`${e}.precision`,message:"must be an integer between 0 and 20"}),I(t.unit,`${e}.unit`,r),!0):(r.push({path:e,message:"must be an object"}),!1),R=t=>{const e=[{kind:"visit",depth:0,value:t}],r=new WeakSet;let a=0,s=0;try{for(;e.length>0;){const n=e.pop();if(!n)break;if(n.kind==="leave"){r.delete(n.value);continue}if(s+=1,s>o.jsonNodes||n.depth>o.jsonDepth)return!1;if(n.value===null||typeof n.value=="boolean")continue;if(typeof n.value=="string"){if(a+=T(n.value,o.textCharacters),!u(n.value)||a>o.jsonCharacters)return!1;continue}if(typeof n.value=="number"){if(!Number.isFinite(n.value))return!1;continue}if(!Array.isArray(n.value)&&!c(n.value)||r.has(n.value))return!1;r.add(n.value),e.push({kind:"leave",value:n.value});const f=o.jsonNodes-s;if(Array.isArray(n.value)){if(n.value.length>f)return!1;for(let i=n.value.length-1;i>=0;i-=1)e.push({kind:"visit",depth:n.depth+1,value:n.value[i]})}else{const i=[];for(const h in n.value)if(Object.prototype.hasOwnProperty.call(n.value,h)){if(!u(h)||(a+=T(h,o.textCharacters),a>o.jsonCharacters)||i.length>=f)return!1;i.push(h)}for(let h=i.length-1;h>=0;h-=1){const y=i[h];e.push({kind:"visit",depth:n.depth+1,value:n.value[y]})}}}return!0}catch{return!1}},st=t=>t===null||typeof t=="boolean"||u(t)||b(t),Y=(t,e,r)=>c(t)?(d(t,J,e,r),m(t.id,`${e}.id`,r),m(t.label,`${e}.label`,r),(typeof t.intent!="string"||!D.has(t.intent))&&r.push({path:`${e}.intent`,message:"is not supported"}),(!c(t.target)||!R(t.target))&&r.push({path:`${e}.target`,message:"must be a JSON object"}),t.appearance!==void 0&&(typeof t.appearance!="string"||!["primary","secondary","link"].includes(t.appearance))&&r.push({path:`${e}.appearance`,message:"is not supported"}),!0):(r.push({path:e,message:"must be an object"}),!1),ot=(t,e)=>{if(d(t,q,"",e),t.schemaVersion!=="1.0"&&e.push({path:"schemaVersion",message:"must equal 1.0"}),m(t.id,"id",e),K.includes(t.kind)||e.push({path:"kind",message:"is not a supported Artifact kind"}),I(t.title,"title",e),I(t.summary,"summary",e),t.presentation!==void 0&&(c(t.presentation)?(d(t.presentation,U,"presentation",e),t.presentation.template!==void 0&&!x(t.presentation.template)?e.push({path:"presentation.template",message:"must be a non-empty string"}):t.presentation.template!==void 0&&!u(t.presentation.template)&&e.push({path:"presentation.template",message:`must contain at most ${o.textCharacters} characters`}),t.presentation.density!==void 0&&(typeof t.presentation.density!="string"||!["compact","comfortable"].includes(t.presentation.density))&&e.push({path:"presentation.density",message:"is not supported"})):e.push({path:"presentation",message:"must be an object"})),t.actions!==void 0){if(!Array.isArray(t.actions))e.push({path:"actions",message:"must be an array"});else if(!A(t.actions,o.actions,"actions",e)){if(E(t.actions,"actions",e))return;S(t.actions,"id","actions",e),t.actions.forEach((a,s)=>Y(a,`actions[${s}]`,e))}}t.meta!==void 0&&(!c(t.meta)||!R(t.meta))&&e.push({path:"meta",message:"must be a JSON object"})},it=(t,e)=>{d(t,H,"data",e),!b(t.value)&&!u(t.value)&&e.push({path:"data.value",message:"must be a finite number or string"}),t.format!==void 0&&w(t.format,"data.format",e),t.delta!==void 0&&(c(t.delta)?(d(t.delta,B,"data.delta",e),b(t.delta.value)||e.push({path:"data.delta.value",message:"must be a finite number"}),t.delta.direction!==void 0&&(typeof t.delta.direction!="string"||!["up","down","flat"].includes(t.delta.direction))&&e.push({path:"data.delta.direction",message:"is not supported"}),t.delta.format!==void 0&&(typeof t.delta.format!="string"||!["decimal","percent"].includes(t.delta.format))&&e.push({path:"data.delta.format",message:"is not supported"}),I(t.delta.label,"data.delta.label",e)):e.push({path:"data.delta",message:"must be an object"})),I(t.context,"data.context",e)},ct=(t,e)=>{if(d(t,P,"data",e),!Array.isArray(t.items)||t.items.length===0){e.push({path:"data.items",message:"must be a non-empty array"});return}A(t.items,o.comparisonItems,"data.items",e)||E(t.items,"data.items",e)||(S(t.items,"id","data.items",e),t.items.forEach((r,a)=>{const s=`data.items[${a}]`;if(!c(r)){e.push({path:s,message:"must be an object"});return}d(r,W,s,e),m(r.id,`${s}.id`,e),m(r.label,`${s}.label`,e),!b(r.value)&&!u(r.value)&&e.push({path:`${s}.value`,message:"must be a finite number or string"}),r.format!==void 0&&w(r.format,`${s}.format`,e),I(r.hint,`${s}.hint`,e)}))},dt=(t,e)=>{if(d(t,G,"data",e),!Array.isArray(t.series)||t.series.length===0){e.push({path:"data.series",message:"must be a non-empty array"});return}A(t.series,o.trendSeries,"data.series",e)||E(t.series,"data.series",e)||(S(t.series,"id","data.series",e),t.series.forEach((r,a)=>{const s=`data.series[${a}]`;if(!c(r)){e.push({path:s,message:"must be an object"});return}if(d(r,Q,s,e),m(r.id,`${s}.id`,e),m(r.label,`${s}.label`,e),r.format!==void 0&&w(r.format,`${s}.format`,e),!Array.isArray(r.points)||r.points.length===0){e.push({path:`${s}.points`,message:"must be a non-empty array"});return}A(r.points,o.trendPointsPerSeries,`${s}.points`,e)||E(r.points,`${s}.points`,e)||r.points.forEach((n,f)=>{const i=`${s}.points[${f}]`;if(!c(n)){e.push({path:i,message:"must be an object"});return}d(n,X,i,e),!b(n.x)&&!u(n.x)&&e.push({path:`${i}.x`,message:"must be a finite number or string"}),b(n.y)||e.push({path:`${i}.y`,message:"must be a finite number"})})}))},pt=(t,e)=>{if(d(t,P,"data",e),!Array.isArray(t.items)||t.items.length===0){e.push({path:"data.items",message:"must be a non-empty array"});return}A(t.items,o.rankingItems,"data.items",e)||E(t.items,"data.items",e)||(S(t.items,"id","data.items",e),t.items.forEach((r,a)=>{const s=`data.items[${a}]`;if(!c(r)){e.push({path:s,message:"must be an object"});return}d(r,Z,s,e),m(r.id,`${s}.id`,e),m(r.label,`${s}.label`,e),b(r.value)||e.push({path:`${s}.value`,message:"must be a finite number"}),r.format!==void 0&&w(r.format,`${s}.format`,e),I(r.description,`${s}.description`,e)}))},mt=(t,e)=>{if(d(t,tt,"data",e),c(t.entity)?(d(t.entity,et,"data.entity",e),m(t.entity.key,"data.entity.key",e),I(t.entity.label,"data.entity.label",e)):e.push({path:"data.entity",message:"must be an object"}),!Array.isArray(t.columns)||t.columns.length===0)e.push({path:"data.columns",message:"must be a non-empty array"});else if(!A(t.columns,o.recordColumns,"data.columns",e)){if(E(t.columns,"data.columns",e))return;S(t.columns,"key","data.columns",e),t.columns.forEach((a,s)=>{const n=`data.columns[${s}]`;if(!c(a)){e.push({path:n,message:"must be an object"});return}d(a,rt,n,e),m(a.key,`${n}.key`,e),m(a.label,`${n}.label`,e),a.format!==void 0&&w(a.format,`${n}.format`,e)})}if(!Array.isArray(t.records))e.push({path:"data.records",message:"must be an array"});else if(!A(t.records,o.recordListRecords,"data.records",e)){if(E(t.records,"data.records",e))return;S(t.records,"id","data.records",e),t.records.forEach((a,s)=>{const n=`data.records[${s}]`;if(!c(a)){e.push({path:n,message:"must be an object"});return}if(d(a,nt,n,e),m(a.id,`${n}.id`,e),I(a.title,`${n}.title`,e),!c(a.values))e.push({path:`${n}.values`,message:"must contain only JSON primitive display values"});else{const f=a.values;let i=!1,h=0;for(const y in f)if(Object.prototype.hasOwnProperty.call(f,y)){if(h+=1,h>o.recordValues)break;i||=!u(y)||!st(f[y])}h>o.recordValues?e.push({path:`${n}.values`,message:`must contain at most ${o.recordValues} values`}):i&&e.push({path:`${n}.values`,message:"must contain only JSON primitive display values"})}a.action!==void 0&&Y(a.action,`${n}.action`,e)})}t.total!==void 0&&(!Number.isInteger(t.total)||Number(t.total)<0)&&e.push({path:"data.total",message:"must be a non-negative integer"})},ft=(t,e)=>{d(t,at,"data",e),(typeof t.tone!="string"||!["info","success","warning","danger"].includes(t.tone))&&e.push({path:"data.tone",message:"is not supported"}),m(t.body,"data.body",e)},j=(t,e)=>{if(ot(t,e),!c(t.data)){e.push({path:"data",message:"must be an object"});return}switch(t.kind){case"metric":it(t.data,e);break;case"comparison":ct(t.data,e);break;case"trend":dt(t.data,e);break;case"ranking":pt(t.data,e);break;case"record-list":mt(t.data,e);break;case"notice":ft(t.data,e);break}},V=t=>{const e=new M;try{if(!c(t))return{success:!1,issues:[{path:"",message:"must be an object"}]};j(t,e)}catch{return C()}if(e.length>0)return{success:!1,issues:e};if(!R(t))return{success:!1,issues:[{path:"",message:"exceeds the Artifact resource budget"}]};let r;try{r=structuredClone(t)}catch{return C()}const a=new M;try{if(!c(r))return C();j(r,a)}catch{return C()}return a.length===0&&!R(r)&&a.push({path:"",message:"exceeds the Artifact resource budget"}),a.length===0?{success:!0,artifact:r}:{success:!1,issues:a}},k=t=>{const e=V(t);if(e.success)return e.artifact;const r=e.issues.map(a=>`${a.path||"artifact"} ${a.message}`).join(", ");throw new Error(`Invalid Make AI Artifact: ${r}`)},N=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),g=(t,e)=>{if(Object.keys(t).some(r=>!e.has(r)))throw new Error("Invalid assistant event: unsupported field")},p=(t,e,r=l.identifierCharacters)=>{const a=typeof t=="string"?$(t,r):0;if(typeof t!="string"||!t.trim()||a>r)throw new Error(`Invalid assistant event: ${e}`);return t},ht=t=>{if(!N(t)||typeof t.type!="string")throw new Error("Invalid assistant event: data");switch(t.type){case"message.start":return g(t,new Set(["type","runId","messageId"])),{type:t.type,runId:p(t.runId,"runId"),messageId:p(t.messageId,"messageId")};case"message.delta":if(g(t,new Set(["type","messageId","delta"])),typeof t.delta!="string")throw new Error("Invalid assistant event: delta");return{type:t.type,messageId:p(t.messageId,"messageId"),delta:t.delta};case"message.replace":return g(t,new Set(["type","messageId","content"])),{type:t.type,messageId:p(t.messageId,"messageId"),content:p(t.content,"content",l.messageCharacters)};case"message.complete":return g(t,new Set(["type","messageId"])),{type:t.type,messageId:p(t.messageId,"messageId")};case"artifact":return g(t,new Set(["type","messageId","artifact"])),{type:t.type,messageId:p(t.messageId,"messageId"),artifact:k(t.artifact)};case"run.progress":return g(t,new Set(["type","runId","message"])),{type:t.type,runId:p(t.runId,"runId"),message:p(t.message,"message",l.messageCharacters)};case"error":if(g(t,new Set(["type","code","message","retryable","requestId"])),typeof t.retryable!="boolean")throw new Error("Invalid assistant event: retryable");return{type:t.type,code:p(t.code,"code"),message:p(t.message,"message",l.messageCharacters),retryable:t.retryable,requestId:t.requestId===void 0?void 0:p(t.requestId,"requestId")};case"run.cancelled":return g(t,new Set(["type","runId"])),{type:t.type,runId:t.runId===void 0?void 0:p(t.runId,"runId")};case"run.complete":return g(t,new Set(["type","runId","threadId"])),{type:t.type,runId:p(t.runId,"runId"),threadId:p(t.threadId,"threadId")};default:throw new Error("Invalid assistant event: unsupported type")}},lt=t=>{try{return ht(t)}catch(e){throw e instanceof Error&&(e.message.startsWith("Invalid assistant event:")||e.message.startsWith("Invalid Make AI Artifact:"))?e:new Error("Invalid assistant event: data")}},gt=t=>{if(!N(t))throw new Error("Invalid assistant conversation snapshot: data");if(g(t,new Set(["threadId","messages"])),!Array.isArray(t.messages)||t.messages.length>l.historyMessages)throw new Error("Invalid assistant conversation snapshot: messages");const e=new Set;let r=0,a=0;return{messages:t.messages.map(n=>{if(!N(n))throw new Error("Invalid assistant conversation snapshot: message");g(n,new Set(["id","role","content","artifacts"]));const f=p(n.id,"messageId");if(e.has(f))throw new Error("Invalid assistant conversation snapshot: duplicate message id");if(e.add(f),n.role!=="assistant"&&n.role!=="user")throw new Error("Invalid assistant conversation snapshot: role");const i=n.role,h=typeof n.content=="string"?$(n.content,l.messageCharacters):0;if(typeof n.content!="string"||h>l.messageCharacters)throw new Error("Invalid assistant conversation snapshot: content");if(r+=$(n.content,l.historyCharacters-r),r>l.historyCharacters)throw new Error("Invalid assistant conversation snapshot: content budget");if(n.artifacts!==void 0&&(!Array.isArray(n.artifacts)||n.artifacts.length>l.artifactsPerRun))throw new Error("Invalid assistant conversation snapshot: artifacts");const y=(n.artifacts??[]).map(k),O=new Set;for(const v of y){if(O.has(v.id))throw new Error("Invalid assistant conversation snapshot: duplicate artifact id");O.add(v.id)}if(a+=y.length,a>l.historyArtifacts)throw new Error("Invalid assistant conversation snapshot: artifact budget");return{id:f,role:i,content:n.content,artifacts:y,status:"complete"}}),status:"idle",threadId:t.threadId===void 0?void 0:p(t.threadId,"threadId")}},ut=t=>t===void 0?{messages:[],status:"idle"}:gt(t),yt=(t,e)=>({...t,error:void 0,progress:void 0,status:"streaming",messages:[...t.messages,{id:e.id,role:"user",content:e.content,artifacts:[],status:"complete"}]}),_=(t,e,r)=>({...t,messages:t.messages.map(a=>a.id===e?r(a):a)}),It=(t,e)=>{switch(e.type){case"message.start":return{...t,activeRunId:e.runId,error:void 0,progress:void 0,status:"streaming",messages:[...t.messages,{id:e.messageId,role:"assistant",content:"",artifacts:[],status:"streaming"}]};case"message.delta":return _(t,e.messageId,r=>({...r,content:`${r.content}${e.delta}`}));case"message.replace":return _(t,e.messageId,r=>({...r,content:e.content}));case"artifact":return _(t,e.messageId,r=>({...r,artifacts:[...r.artifacts,e.artifact]}));case"message.complete":return _(t,e.messageId,r=>({...r,status:"complete"}));case"run.progress":return{...t,progress:{runId:e.runId,message:e.message}};case"error":return{...t,activeRunId:void 0,error:{code:e.code,message:e.message,retryable:e.retryable,requestId:e.requestId},progress:void 0,messages:t.messages.map(r=>r.status==="streaming"?{...r,status:"complete"}:r),status:"error"};case"run.cancelled":return{...t,activeRunId:void 0,progress:void 0,status:"idle",messages:t.messages.map(r=>r.status==="streaming"?{...r,status:"complete"}:r)};case"run.complete":return{...t,activeRunId:void 0,error:void 0,progress:void 0,messages:t.messages.map(r=>r.status==="streaming"?{...r,status:"complete"}:r),status:"idle",threadId:e.threadId}}};exports.MAKE_AI_ARTIFACT_KINDS=K;exports.MAKE_AI_ARTIFACT_LIMITS=o;exports.MAKE_AI_ARTIFACT_SCHEMA_VERSION="1.0";exports.MAKE_AI_CONVERSATION_LIMITS=l;exports.appendUserMessage=yt;exports.countCodePointsUpTo=$;exports.createAssistantConversationState=ut;exports.parseArtifact=k;exports.parseAssistantEvent=lt;exports.reduceAssistantEvent=It;exports.validateArtifact=V;