@tung-engineering/agent-platform-web-sdk 0.0.74 → 0.0.75
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/web-sdk.cjs +164 -44
- package/dist/web-sdk.cjs.map +1 -1
- package/dist/web-sdk.min.js +133 -13
- package/dist/web-sdk.min.js.map +1 -1
- package/dist/web-sdk.mjs +489 -369
- package/dist/web-sdk.mjs.map +1 -1
- package/package.json +1 -1
package/dist/web-sdk.min.js
CHANGED
|
@@ -243,6 +243,43 @@ var d_=Object.defineProperty,p_=Object.defineProperties;var h_=Object.getOwnProp
|
|
|
243
243
|
background: oklch(95% 0.035 50);
|
|
244
244
|
}
|
|
245
245
|
|
|
246
|
+
/* Destructive actions (e.g. reject) use a separate red scale instead of the
|
|
247
|
+
brand accent, so they read as visually distinct from affirmative actions
|
|
248
|
+
like approve even though both can appear filled/outlined side by side. */
|
|
249
|
+
.ap-sdk-panel__btn--danger {
|
|
250
|
+
background: #dc2626;
|
|
251
|
+
color: #fff;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.ap-sdk-panel__btn--danger:hover:not(:disabled) {
|
|
255
|
+
background: #b91c1c;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.ap-sdk-panel__btn--danger-ghost {
|
|
259
|
+
background: transparent;
|
|
260
|
+
color: #b91c1c;
|
|
261
|
+
border: 1px solid #dc2626;
|
|
262
|
+
flex: 0 0 auto;
|
|
263
|
+
padding: 8px 16px;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.ap-sdk-panel__btn--danger-ghost:hover:not(:disabled) {
|
|
267
|
+
border-color: #b91c1c;
|
|
268
|
+
color: #b91c1c;
|
|
269
|
+
background: #fef2f2;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/* Full-width, roomier variant for stacked action layouts (e.g. the
|
|
273
|
+
automation summary card) — overrides the compact default padding/
|
|
274
|
+
flex sizing of whichever color variant it's paired with. */
|
|
275
|
+
.ap-sdk-panel__btn--block {
|
|
276
|
+
width: 100%;
|
|
277
|
+
flex: none;
|
|
278
|
+
padding: 11px 16px;
|
|
279
|
+
font-size: 14px;
|
|
280
|
+
border-radius: 10px;
|
|
281
|
+
}
|
|
282
|
+
|
|
246
283
|
.ap-sdk-panel__btn:disabled {
|
|
247
284
|
opacity: 0.55;
|
|
248
285
|
cursor: not-allowed;
|
|
@@ -1088,15 +1125,21 @@ button.ap-sdk-list-item__link {
|
|
|
1088
1125
|
}
|
|
1089
1126
|
`,`
|
|
1090
1127
|
.ap-sdk-runner__approval {
|
|
1091
|
-
margin-top:
|
|
1128
|
+
margin-top: 14px;
|
|
1092
1129
|
display: flex;
|
|
1093
1130
|
flex-direction: column;
|
|
1094
|
-
gap:
|
|
1131
|
+
gap: 10px;
|
|
1095
1132
|
width: 100%;
|
|
1096
1133
|
}
|
|
1097
1134
|
|
|
1135
|
+
/* Approve is the one prominent full-width action; Reject is demoted to a
|
|
1136
|
+
small centered text link below it rather than a second full button, so
|
|
1137
|
+
the decision reads as "one clear primary choice, one quiet way out"
|
|
1138
|
+
instead of two competing buttons crammed into a row. */
|
|
1098
1139
|
.ap-sdk-runner__approval-actions {
|
|
1099
1140
|
display: flex;
|
|
1141
|
+
flex-direction: column;
|
|
1142
|
+
align-items: center;
|
|
1100
1143
|
gap: 8px;
|
|
1101
1144
|
width: 100%;
|
|
1102
1145
|
}
|
|
@@ -1104,7 +1147,16 @@ button.ap-sdk-list-item__link {
|
|
|
1104
1147
|
.ap-sdk-runner__reject-form {
|
|
1105
1148
|
display: flex;
|
|
1106
1149
|
flex-direction: column;
|
|
1107
|
-
gap:
|
|
1150
|
+
gap: 8px;
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
/* Persistent explanation of the blank-vs-filled textarea behavior — kept as
|
|
1154
|
+
its own element rather than only a placeholder, since placeholders vanish
|
|
1155
|
+
the moment the user starts typing feedback. */
|
|
1156
|
+
.ap-sdk-runner__reject-hint {
|
|
1157
|
+
font-size: 11px;
|
|
1158
|
+
line-height: 1.4;
|
|
1159
|
+
color: #9ca3af;
|
|
1108
1160
|
}
|
|
1109
1161
|
|
|
1110
1162
|
.ap-sdk-runner__approval-error {
|
|
@@ -1112,6 +1164,72 @@ button.ap-sdk-list-item__link {
|
|
|
1112
1164
|
font-size: 12px;
|
|
1113
1165
|
}
|
|
1114
1166
|
|
|
1167
|
+
/* Separates the approve/reject decision from the always-available
|
|
1168
|
+
View task / Close actions below it, so the two rows don't read as one
|
|
1169
|
+
undifferentiated stack of buttons. */
|
|
1170
|
+
.ap-sdk-runner__divider {
|
|
1171
|
+
height: 1px;
|
|
1172
|
+
width: 100%;
|
|
1173
|
+
background: #f3f4f6;
|
|
1174
|
+
margin: 6px 0;
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
.ap-sdk-btn-icon {
|
|
1178
|
+
margin-right: 5px;
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
.ap-sdk-btn-icon--trailing {
|
|
1182
|
+
margin-right: 0;
|
|
1183
|
+
margin-left: 5px;
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
/* Lightweight text-link treatment for secondary/rare actions (Reject, Close)
|
|
1187
|
+
so they read as quiet fallbacks rather than full buttons competing for
|
|
1188
|
+
attention with the primary Approve / View task actions above them. */
|
|
1189
|
+
.ap-sdk-runner__text-btn {
|
|
1190
|
+
background: none;
|
|
1191
|
+
border: none;
|
|
1192
|
+
padding: 4px 2px;
|
|
1193
|
+
font-size: 12.5px;
|
|
1194
|
+
font-weight: 500;
|
|
1195
|
+
font-family: inherit;
|
|
1196
|
+
cursor: pointer;
|
|
1197
|
+
color: #6b7280;
|
|
1198
|
+
text-decoration: underline;
|
|
1199
|
+
text-underline-offset: 2px;
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
.ap-sdk-runner__text-btn:hover:not(:disabled) {
|
|
1203
|
+
color: #374151;
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
.ap-sdk-runner__text-btn--danger {
|
|
1207
|
+
color: #b91c1c;
|
|
1208
|
+
}
|
|
1209
|
+
|
|
1210
|
+
.ap-sdk-runner__text-btn--danger:hover:not(:disabled) {
|
|
1211
|
+
color: #991b1b;
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
.ap-sdk-runner__text-btn:disabled {
|
|
1215
|
+
opacity: 0.55;
|
|
1216
|
+
cursor: not-allowed;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
/* Stacks the View task / Close row to match the approval block above it
|
|
1220
|
+
(full-width primary action + a quiet text link) instead of two side-by-side
|
|
1221
|
+
buttons — scoped here rather than in success-card.ts's shared base classes
|
|
1222
|
+
so panel.ts's unrelated capture-success card is unaffected. */
|
|
1223
|
+
.ap-sdk-success-actions--stacked {
|
|
1224
|
+
flex-direction: column;
|
|
1225
|
+
align-items: center;
|
|
1226
|
+
gap: 10px;
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
.ap-sdk-success-actions--stacked .ap-sdk-panel__btn {
|
|
1230
|
+
flex: none;
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1115
1233
|
.ap-sdk-runner__meta {
|
|
1116
1234
|
display: flex;
|
|
1117
1235
|
flex-direction: column;
|
|
@@ -1474,27 +1592,29 @@ Please report this to https://github.com/markedjs/marked.`,e){let r="<p>An error
|
|
|
1474
1592
|
Title: ${document.title}
|
|
1475
1593
|
|
|
1476
1594
|
${n}${r?`
|
|
1477
|
-
… (truncated)`:""}`}function Vm(e,t){var i;const r=e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,o=(i=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:i.set;if(!o)throw new Error("target element does not accept text input");o.call(e,t),e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0}))}function Xm(e,t,n){var g,m;const r=e==="done"?"✓":"✗",o=t.selector?` \`${t.selector}\``:"",i=t.description||`${t.action}${o}`,a=e==="done"&&t.action==="getContext"?`read context (${(g=n==null?void 0:n.length)!=null?g:0} chars)`:n,d=a?` — ${a}`:"";if(Kn.push({status:e,text:`${r} ${i}${d}`}),!z)return;const u=z.querySelector("[data-ap-runner-log]");if(!u)return;(m=u.querySelector("[data-ap-runner-placeholder]"))==null||m.remove();const p=u.scrollHeight-u.scrollTop-u.clientHeight<=Lc,h=document.createElement("div");h.className=`ap-sdk-runner__log-entry ap-sdk-runner__log-entry--${e}`,h.textContent=Kn[Kn.length-1].text,u.appendChild(h),p&&(u.scrollTop=u.scrollHeight)}function Km(e){var t,n;return(n=(t=e.display)==null?void 0:t.variant)!=null?n:e.sdkEventType}function Qm(e){const t=Km(e);return(e.stream==="stdout"||e.stream==="stderr"||e.stream==="sdk_event"&&(t==="text"||t==="thinking"))&&e.data.trim()||null}function Nc(e){var r;const t=e.filter(o=>o.sequence>Rr).sort((o,i)=>o.sequence-i.sequence);if(t.length===0||(Rr=Math.max(Rr,...t.map(o=>o.sequence)),!z))return;const n=z.querySelector("[data-ap-runner-log]");if(n)for(const o of t){const i=Qm(o);if(!i)continue;(r=n.querySelector("[data-ap-runner-placeholder]"))==null||r.remove();const a=n.scrollHeight-n.scrollTop-n.clientHeight<=Lc,d=document.createElement("div");d.className=`ap-sdk-runner__log-entry ap-sdk-runner__log-entry--output ap-sdk-runner__log-entry--${o.stream}`,o.stream==="sdk_event"?(d.classList.add("ap-sdk-markdown"),d.innerHTML=Pc(i)):d.textContent=i,n.appendChild(d),a&&(n.scrollTop=n.scrollHeight)}}function eb(e){if(!z||!ve||!er)return;const t=z.querySelector("[data-ap-runner-summary]");if(!t)return;const n=`${er.replace(/\/+$/,"")}/tasks/${ve}`,r=e==="completed"?"Automation complete!":"Automation ended",o=e==="completed";t.style.display="block",t.innerHTML=`
|
|
1595
|
+
… (truncated)`:""}`}function Vm(e,t){var i;const r=e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,o=(i=Object.getOwnPropertyDescriptor(r,"value"))==null?void 0:i.set;if(!o)throw new Error("target element does not accept text input");o.call(e,t),e.dispatchEvent(new Event("input",{bubbles:!0})),e.dispatchEvent(new Event("change",{bubbles:!0}))}function Xm(e,t,n){var g,m;const r=e==="done"?"✓":"✗",o=t.selector?` \`${t.selector}\``:"",i=t.description||`${t.action}${o}`,a=e==="done"&&t.action==="getContext"?`read context (${(g=n==null?void 0:n.length)!=null?g:0} chars)`:n,d=a?` — ${a}`:"";if(Kn.push({status:e,text:`${r} ${i}${d}`}),!z)return;const u=z.querySelector("[data-ap-runner-log]");if(!u)return;(m=u.querySelector("[data-ap-runner-placeholder]"))==null||m.remove();const p=u.scrollHeight-u.scrollTop-u.clientHeight<=Lc,h=document.createElement("div");h.className=`ap-sdk-runner__log-entry ap-sdk-runner__log-entry--${e}`,h.textContent=Kn[Kn.length-1].text,u.appendChild(h),p&&(u.scrollTop=u.scrollHeight)}function Km(e){var t,n;return(n=(t=e.display)==null?void 0:t.variant)!=null?n:e.sdkEventType}function Qm(e){const t=Km(e);return(e.stream==="stdout"||e.stream==="stderr"||e.stream==="sdk_event"&&(t==="text"||t==="thinking"))&&e.data.trim()||null}function Nc(e){var r;const t=e.filter(o=>o.sequence>Rr).sort((o,i)=>o.sequence-i.sequence);if(t.length===0||(Rr=Math.max(Rr,...t.map(o=>o.sequence)),!z))return;const n=z.querySelector("[data-ap-runner-log]");if(n)for(const o of t){const i=Qm(o);if(!i)continue;(r=n.querySelector("[data-ap-runner-placeholder]"))==null||r.remove();const a=n.scrollHeight-n.scrollTop-n.clientHeight<=Lc,d=document.createElement("div");d.className=`ap-sdk-runner__log-entry ap-sdk-runner__log-entry--output ap-sdk-runner__log-entry--${o.stream}`,o.stream==="sdk_event"?(d.classList.add("ap-sdk-markdown"),d.innerHTML=Pc(i)):d.textContent=i,n.appendChild(d),a&&(n.scrollTop=n.scrollHeight)}}function eb(e){if(!z||!ve||!er)return;const t=z.querySelector("[data-ap-runner-summary]");if(!t)return;const n=`${er.replace(/\/+$/,"")}/tasks/${ve}`,r=e==="completed"?"Automation complete!":"Automation ended",o=e==="completed",i=o?"ap-sdk-panel__btn--secondary":"ap-sdk-panel__btn--primary";t.style.display="block",t.innerHTML=`
|
|
1478
1596
|
<div class="ap-sdk-success-card">
|
|
1479
1597
|
<p class="ap-sdk-success-headline">${Xs(r)}</p>
|
|
1480
1598
|
${o?`
|
|
1481
1599
|
<div class="ap-sdk-runner__approval" data-ap-runner-approval>
|
|
1482
1600
|
<div class="ap-sdk-runner__approval-actions">
|
|
1483
|
-
<button class="ap-sdk-panel__btn ap-sdk-panel__btn--primary" data-ap-runner-approve>Approve</button>
|
|
1484
|
-
<button class="ap-sdk-
|
|
1601
|
+
<button class="ap-sdk-panel__btn ap-sdk-panel__btn--primary ap-sdk-panel__btn--block" data-ap-runner-approve><span class="ap-sdk-btn-icon" aria-hidden="true">✓</span>Approve</button>
|
|
1602
|
+
<button class="ap-sdk-runner__text-btn ap-sdk-runner__text-btn--danger" data-ap-runner-reject>Reject</button>
|
|
1485
1603
|
</div>
|
|
1486
1604
|
<div class="ap-sdk-runner__reject-form" data-ap-runner-reject-form style="display:none">
|
|
1487
|
-
<textarea class="ap-sdk-panel__textarea" rows="2" placeholder="
|
|
1488
|
-
<
|
|
1605
|
+
<textarea class="ap-sdk-panel__textarea" rows="2" placeholder="What was wrong? (optional)" data-ap-runner-reject-feedback></textarea>
|
|
1606
|
+
<div class="ap-sdk-runner__reject-hint">Leave blank to reject permanently, or add details so the agent can retry with your feedback.</div>
|
|
1607
|
+
<button class="ap-sdk-panel__btn ap-sdk-panel__btn--danger ap-sdk-panel__btn--block" data-ap-runner-reject-submit>Reject Permanently</button>
|
|
1489
1608
|
</div>
|
|
1490
1609
|
<div class="ap-sdk-runner__approval-error" data-ap-runner-approval-error style="display:none"></div>
|
|
1491
|
-
</div
|
|
1492
|
-
<div class="ap-sdk-
|
|
1493
|
-
|
|
1494
|
-
<button class="ap-sdk-panel__btn ap-sdk-panel__btn--
|
|
1610
|
+
</div>
|
|
1611
|
+
<div class="ap-sdk-runner__divider"></div>`:""}
|
|
1612
|
+
<div class="ap-sdk-success-actions ap-sdk-success-actions--stacked">
|
|
1613
|
+
<button class="ap-sdk-panel__btn ${i} ap-sdk-panel__btn--block" data-ap-runner-view>View task<span class="ap-sdk-btn-icon ap-sdk-btn-icon--trailing" aria-hidden="true">↗</span></button>
|
|
1614
|
+
<button class="ap-sdk-runner__text-btn" data-ap-runner-close>Close</button>
|
|
1495
1615
|
</div>
|
|
1496
1616
|
</div>
|
|
1497
|
-
`,t.querySelector("[data-ap-runner-view]").addEventListener("click",()=>window.open(n,"_blank","noopener,noreferrer")),t.querySelector("[data-ap-runner-close]").addEventListener("click",()=>{const
|
|
1617
|
+
`,t.querySelector("[data-ap-runner-view]").addEventListener("click",()=>window.open(n,"_blank","noopener,noreferrer")),t.querySelector("[data-ap-runner-close]").addEventListener("click",()=>{const a=Gs;Js(),a==null||a()}),o&&tb(t)}function tb(e){const t=e.querySelector("[data-ap-runner-approve]"),n=e.querySelector("[data-ap-runner-reject]"),r=e.querySelector("[data-ap-runner-reject-form]"),o=e.querySelector("[data-ap-runner-reject-feedback]"),i=e.querySelector("[data-ap-runner-reject-submit]"),a=e.querySelector("[data-ap-runner-approval-error]"),d=e.querySelector(".ap-sdk-runner__approval-actions"),u=h=>{a.textContent=h,a.style.display="block"};t.addEventListener("click",()=>L(null,null,function*(){if(!ve||!Wt)return;const h=ve,g=Wt;t.disabled=!0,n.disabled=!0,a.style.display="none";try{yield ug(g,h),d.innerHTML='<span class="ap-sdk-status-badge ap-sdk-status-badge--approved">✓ Approved</span>',r.style.display="none"}catch(m){t.disabled=!1,n.disabled=!1,u(m instanceof Error?m.message:"Failed to approve — try again.")}})),n.addEventListener("click",()=>{r.style.display=r.style.display==="none"?"block":"none",r.style.display==="block"&&o.focus()});const p=()=>{i.textContent=o.value.trim()?"Reject & Continue":"Reject Permanently"};o.addEventListener("input",p),i.addEventListener("click",()=>L(null,null,function*(){if(!ve||!Wt)return;const h=ve,g=Wt,m=o.value.trim();i.disabled=!0,t.disabled=!0,a.style.display="none",i.textContent="Rejecting…";try{yield dg(g,h,m),m?$c():(d.innerHTML='<span class="ap-sdk-status-badge ap-sdk-status-badge--rejected">✕ Rejected</span>',r.style.display="none")}catch(k){i.disabled=!1,t.disabled=!1,p(),u(k instanceof Error?k.message:"Failed to reject — try again.")}}))}function nb(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Xs(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function rb(e,t,n){const r=!!(t.backendUrl&&t.token),o=document.createElement("div");o.className="ap-sdk-advanced",o.innerHTML=`
|
|
1498
1618
|
<details class="ap-sdk-advanced__details">
|
|
1499
1619
|
<summary class="ap-sdk-advanced__summary">Advanced options</summary>
|
|
1500
1620
|
<div class="ap-sdk-advanced__body">
|