@keboola/api-client 32.0.0 → 33.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +80 -2
- package/API-SURFACE.md +4 -1
- package/CHANGELOG.md +222 -0
- package/dist/{ManagementClientAuthError-B-tyPlyG.cjs → ManagementClientAuthError-DqeXL8nv.cjs} +2 -2
- package/dist/{ManagementClientAuthError-B-tyPlyG.cjs.map → ManagementClientAuthError-DqeXL8nv.cjs.map} +1 -1
- package/dist/{ManagementClientAuthError-BAFNvOdf.js → ManagementClientAuthError-iKbBugKC.js} +2 -2
- package/dist/{ManagementClientAuthError-BAFNvOdf.js.map → ManagementClientAuthError-iKbBugKC.js.map} +1 -1
- package/dist/ai/index.cjs +2 -2
- package/dist/ai/index.d.cts +2 -2
- package/dist/ai/index.d.ts +2 -2
- package/dist/ai/index.js +2 -2
- package/dist/ai/types.d.cts +1 -1
- package/dist/ai/types.d.ts +1 -1
- package/dist/{appLogs-DTLE6HTy.js → appLogs-D72eD8vP.js} +2 -2
- package/dist/{appLogs-DTLE6HTy.js.map → appLogs-D72eD8vP.js.map} +1 -1
- package/dist/{appLogs-NIEDTDHf.cjs → appLogs-D8K0VeNM.cjs} +2 -2
- package/dist/{appLogs-NIEDTDHf.cjs.map → appLogs-D8K0VeNM.cjs.map} +1 -1
- package/dist/{appLogs-BAaaGYKg.d.cts → appLogs-Q4A7A_Fc.d.cts} +2 -2
- package/dist/{appLogs-DX_WTBCa.d.ts → appLogs-u0XMZLjS.d.ts} +2 -2
- package/dist/apps/index.cjs +3 -3
- package/dist/apps/index.d.cts +3 -3
- package/dist/apps/index.d.ts +3 -3
- package/dist/apps/index.js +3 -3
- package/dist/apps/types.d.cts +2 -2
- package/dist/apps/types.d.ts +2 -2
- package/dist/assets/index.cjs +1 -1
- package/dist/assets/index.d.cts +1 -1
- package/dist/assets/index.d.ts +1 -1
- package/dist/assets/index.js +1 -1
- package/dist/auth/index.cjs +1 -1
- package/dist/auth/index.d.cts +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.js +1 -1
- package/dist/auth/types.d.cts +2 -2
- package/dist/auth/types.d.ts +2 -2
- package/dist/{auth-DP-6TFiM.cjs → auth-C2_JLisH.cjs} +2 -2
- package/dist/{auth-DP-6TFiM.cjs.map → auth-C2_JLisH.cjs.map} +1 -1
- package/dist/{auth-DtbQaeDj.js → auth-CE9rQV3-.js} +2 -2
- package/dist/{auth-DtbQaeDj.js.map → auth-CE9rQV3-.js.map} +1 -1
- package/dist/{authClient--BtZgjIc.js → authClient-DEyqR7GW.js} +43 -9
- package/dist/authClient-DEyqR7GW.js.map +1 -0
- package/dist/{authClient-DhfzOUaa.d.cts → authClient-DZ_8lvdJ.d.cts} +6 -6
- package/dist/{authClient-CtfyVHRD.d.ts → authClient-DwT6xdg5.d.ts} +6 -6
- package/dist/{authClient-b7uec7sw.cjs → authClient-IwQ9Ti0J.cjs} +43 -9
- package/dist/authClient-IwQ9Ti0J.cjs.map +1 -0
- package/dist/chat/index.cjs +3 -3
- package/dist/chat/index.d.cts +2 -2
- package/dist/chat/index.d.ts +2 -2
- package/dist/chat/index.js +3 -3
- package/dist/chat/types.d.cts +1 -1
- package/dist/chat/types.d.ts +1 -1
- package/dist/{createFetchClient-BbG46bL0.js → createFetchClient-DdyZMhxO.js} +3 -2
- package/dist/{createFetchClient-BbG46bL0.js.map → createFetchClient-DdyZMhxO.js.map} +1 -1
- package/dist/{createFetchClient-BRfTjBLV.cjs → createFetchClient-DvZvD31l.cjs} +8 -1
- package/dist/{createFetchClient-BRfTjBLV.cjs.map → createFetchClient-DvZvD31l.cjs.map} +1 -1
- package/dist/{createGenericFetchClient-BHYQLZhe.js → createGenericFetchClient-MQeLRiNW.js} +2 -2
- package/dist/{createGenericFetchClient-BHYQLZhe.js.map → createGenericFetchClient-MQeLRiNW.js.map} +1 -1
- package/dist/{createGenericFetchClient-DHs-i7_O.cjs → createGenericFetchClient-qfCZlCTv.cjs} +2 -2
- package/dist/{createGenericFetchClient-DHs-i7_O.cjs.map → createGenericFetchClient-qfCZlCTv.cjs.map} +1 -1
- package/dist/{createOpenapiFetchClient-CyDUFxHB.cjs → createOpenapiFetchClient-C57Ljzi6.cjs} +2 -2
- package/dist/{createOpenapiFetchClient-CyDUFxHB.cjs.map → createOpenapiFetchClient-C57Ljzi6.cjs.map} +1 -1
- package/dist/{createOpenapiFetchClient-Bn6_Pn0H.js → createOpenapiFetchClient-E7OIVkYv.js} +2 -2
- package/dist/{createOpenapiFetchClient-Bn6_Pn0H.js.map → createOpenapiFetchClient-E7OIVkYv.js.map} +1 -1
- package/dist/{credential-d2RDcXRB.js → credential-Bxv7yxOZ.js} +7 -4
- package/dist/credential-Bxv7yxOZ.js.map +1 -0
- package/dist/{credential-DOXH7XRS.cjs → credential-D-X5QQrM.cjs} +7 -4
- package/dist/credential-D-X5QQrM.cjs.map +1 -0
- package/dist/dataScience/index.cjs +2 -2
- package/dist/dataScience/index.d.cts +2 -2
- package/dist/dataScience/index.d.ts +2 -2
- package/dist/dataScience/index.js +2 -2
- package/dist/dataScience/types.d.cts +2 -2
- package/dist/dataScience/types.d.ts +2 -2
- package/dist/{dataScience-wexHEIue.cjs → dataScience-BPW993AG.cjs} +5 -5
- package/dist/{dataScience-wexHEIue.cjs.map → dataScience-BPW993AG.cjs.map} +1 -1
- package/dist/{dataScience-Sm8iONhP.js → dataScience-B_TA7wCB.js} +5 -5
- package/dist/{dataScience-Sm8iONhP.js.map → dataScience-B_TA7wCB.js.map} +1 -1
- package/dist/developerPortal/index.cjs +1 -1
- package/dist/developerPortal/index.d.cts +2 -2
- package/dist/developerPortal/index.d.ts +2 -2
- package/dist/developerPortal/index.js +1 -1
- package/dist/developerPortal/types.d.cts +1 -1
- package/dist/developerPortal/types.d.ts +1 -1
- package/dist/{developerPortalClient-CgTSzLoG.cjs → developerPortalClient-Db2XVB_o.cjs} +3 -3
- package/dist/{developerPortalClient-CgTSzLoG.cjs.map → developerPortalClient-Db2XVB_o.cjs.map} +1 -1
- package/dist/{developerPortalClient-DywKpDlW.js → developerPortalClient-jk46sjwP.js} +3 -3
- package/dist/{developerPortalClient-DywKpDlW.js.map → developerPortalClient-jk46sjwP.js.map} +1 -1
- package/dist/domain/permissions/index.d.cts +2 -2
- package/dist/domain/permissions/index.d.ts +2 -2
- package/dist/editor/index.cjs +2 -2
- package/dist/editor/index.d.cts +2 -2
- package/dist/editor/index.d.ts +2 -2
- package/dist/editor/index.js +2 -2
- package/dist/editor/types.d.cts +1 -1
- package/dist/editor/types.d.ts +1 -1
- package/dist/emitter-dLF1Fyfg.d.cts +11 -0
- package/dist/emitter-dLF1Fyfg.d.ts +11 -0
- package/dist/encryption/index.cjs +1 -1
- package/dist/encryption/index.d.cts +1 -1
- package/dist/encryption/index.d.ts +1 -1
- package/dist/encryption/index.js +1 -1
- package/dist/encryption/types.d.cts +1 -1
- package/dist/encryption/types.d.ts +1 -1
- package/dist/import/index.cjs +1 -1
- package/dist/import/index.d.cts +3 -3
- package/dist/import/index.d.ts +3 -3
- package/dist/import/index.js +1 -1
- package/dist/{import-SQuurg1G.js → import-2nqxQ9Rt.js} +3 -3
- package/dist/{import-SQuurg1G.js.map → import-2nqxQ9Rt.js.map} +1 -1
- package/dist/{import-C0-y1GQK.cjs → import-DJilJ6tq.cjs} +3 -3
- package/dist/{import-C0-y1GQK.cjs.map → import-DJilJ6tq.cjs.map} +1 -1
- package/dist/{index-FhKX7Cv1.d.ts → index-B0V1pJAa.d.ts} +241 -200
- package/dist/{index-Bg1P6Bb2.d.ts → index-B2OGaUap.d.ts} +6 -6
- package/dist/{index-Dbzjvy5h.d.ts → index-BjKjp3Rf.d.ts} +5 -5
- package/dist/{index-DeKPpYQy.d.ts → index-C7gxKoDF.d.cts} +3 -3
- package/dist/{index-D_7yCRKy.d.cts → index-CTd4YY8e.d.cts} +4 -4
- package/dist/{index-DiHHyMEo.d.cts → index-CUXEFQ7i.d.cts} +6 -6
- package/dist/{index-eAlN694c.d.cts → index-CVqk63at.d.ts} +3 -3
- package/dist/{index-Bc_hXWae.d.ts → index-C_cxKL1V.d.ts} +3 -3
- package/dist/{index-tKsiUarj.d.ts → index-ChMtULt4.d.ts} +4 -4
- package/dist/{index-Gn1H63Hk.d.cts → index-DCN2lH0v.d.cts} +4 -4
- package/dist/{index-Bjk-tCpG.d.cts → index-DIVvL54G.d.cts} +241 -200
- package/dist/{index-C7e3wBt9.d.cts → index-DLYAvSWZ.d.cts} +3 -3
- package/dist/{index-fHfc_VqS.d.ts → index-DQef014j.d.ts} +4 -4
- package/dist/{index-CeJOmN-P.d.ts → index-DVhTNwvu.d.ts} +3 -2
- package/dist/{index-CQrKS7PV.d.cts → index-DhVFuQDv.d.cts} +3 -2
- package/dist/{index-Ctqkm3Fx.d.ts → index-GNKwr7EQ.d.ts} +4 -4
- package/dist/{index-GDdFZCXp.d.ts → index-bB6wvw1f.d.ts} +4 -4
- package/dist/{index-BKh0prif.d.cts → index-exNi3I2Q.d.cts} +4 -4
- package/dist/{index-CXtdQ7be.d.cts → index-qOK5FtAH.d.cts} +4 -4
- package/dist/{index-DqOAjqxN.d.cts → index-t-a7kYnx.d.cts} +5 -5
- package/dist/index.cjs +303 -47
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -6
- package/dist/index.d.ts +7 -6
- package/dist/index.js +285 -30
- package/dist/index.js.map +1 -1
- package/dist/{jobStatus-kQ9JqF8t.cjs → jobStatus-0_Y3Sr4i.cjs} +37 -20
- package/dist/jobStatus-0_Y3Sr4i.cjs.map +1 -0
- package/dist/{jobStatus-DbMupQEK.js → jobStatus-PSZJMTiA.js} +35 -18
- package/dist/jobStatus-PSZJMTiA.js.map +1 -0
- package/dist/kaiAgent/index.cjs +1 -1
- package/dist/kaiAgent/index.d.cts +2 -210
- package/dist/kaiAgent/index.d.ts +2 -210
- package/dist/kaiAgent/index.js +1 -1
- package/dist/kaiAgent/types.d.cts +1 -1
- package/dist/kaiAgent/types.d.ts +1 -1
- package/dist/{kaiAgent-4OiIK1C2.cjs → kaiAgent-CMVub6Sc.cjs} +48 -4
- package/dist/kaiAgent-CMVub6Sc.cjs.map +1 -0
- package/dist/{kaiAgent-HDaFS9BR.js → kaiAgent-CYYn0QJW.js} +48 -4
- package/dist/kaiAgent-CYYn0QJW.js.map +1 -0
- package/dist/kaiAgentClient-B2O0DF4d.d.ts +249 -0
- package/dist/kaiAgentClient-iCFR2tRU.d.cts +249 -0
- package/dist/management/index.cjs +1 -1
- package/dist/management/index.d.cts +1 -1
- package/dist/management/index.d.ts +1 -1
- package/dist/management/index.js +1 -1
- package/dist/management/types.d.cts +1 -1
- package/dist/management/types.d.ts +1 -1
- package/dist/{management-DfjwQo7z.cjs → management-DGfgKsaA.cjs} +5 -5
- package/dist/{management-DfjwQo7z.cjs.map → management-DGfgKsaA.cjs.map} +1 -1
- package/dist/{management-CIFhu1Nm.js → management-DNEKhR6a.js} +5 -5
- package/dist/{management-CIFhu1Nm.js.map → management-DNEKhR6a.js.map} +1 -1
- package/dist/metastore/index.cjs +1 -1
- package/dist/metastore/index.d.cts +1 -1
- package/dist/metastore/index.d.ts +1 -1
- package/dist/metastore/index.js +1 -1
- package/dist/metastore/types.d.cts +1 -1
- package/dist/metastore/types.d.ts +1 -1
- package/dist/{metastore-CrXkKufo.js → metastore-CjwktHvw.js} +4 -4
- package/dist/{metastore-CrXkKufo.js.map → metastore-CjwktHvw.js.map} +1 -1
- package/dist/{metastore-Dq2NS6jb.cjs → metastore-DksEte8P.cjs} +4 -4
- package/dist/{metastore-Dq2NS6jb.cjs.map → metastore-DksEte8P.cjs.map} +1 -1
- package/dist/microsoftGraph/index.cjs +2 -2
- package/dist/microsoftGraph/index.d.cts +2 -2
- package/dist/microsoftGraph/index.d.ts +2 -2
- package/dist/microsoftGraph/index.js +2 -2
- package/dist/microsoftGraph/types.d.cts +1 -1
- package/dist/microsoftGraph/types.d.ts +1 -1
- package/dist/notifications/index.cjs +3 -3
- package/dist/notifications/index.d.cts +2 -2
- package/dist/notifications/index.d.ts +2 -2
- package/dist/notifications/index.js +3 -3
- package/dist/notifications/types.d.cts +1 -1
- package/dist/notifications/types.d.ts +1 -1
- package/dist/oauth/index.cjs +1 -1
- package/dist/oauth/index.d.cts +2 -2
- package/dist/oauth/index.d.ts +2 -2
- package/dist/oauth/index.js +1 -1
- package/dist/oauth/types.d.cts +1 -1
- package/dist/oauth/types.d.ts +1 -1
- package/dist/{oauth-CFwSNz37.js → oauth-Bg5zro5S.js} +5 -5
- package/dist/{oauth-CFwSNz37.js.map → oauth-Bg5zro5S.js.map} +1 -1
- package/dist/{oauth-CkW5gln-.cjs → oauth-DFsI1TE5.cjs} +5 -5
- package/dist/{oauth-CkW5gln-.cjs.map → oauth-DFsI1TE5.cjs.map} +1 -1
- package/dist/omnisearch/index.cjs +2 -2
- package/dist/omnisearch/index.d.cts +2 -2
- package/dist/omnisearch/index.d.ts +2 -2
- package/dist/omnisearch/index.js +2 -2
- package/dist/omnisearch/types.d.cts +1 -1
- package/dist/omnisearch/types.d.ts +1 -1
- package/dist/{project-BOGaVs-q.d.ts → project-Bh954iOA.d.ts} +2 -2
- package/dist/{project-BnQkL8cb.d.cts → project-D25GH8zK.d.cts} +2 -2
- package/dist/queryService/index.cjs +1 -1
- package/dist/queryService/index.d.cts +1 -1
- package/dist/queryService/index.d.ts +1 -1
- package/dist/queryService/index.js +1 -1
- package/dist/queryService/types.d.cts +1 -1
- package/dist/queryService/types.d.ts +1 -1
- package/dist/{queryService-BLaGbpm-.cjs → queryService--t_W9PSJ.cjs} +6 -6
- package/dist/{queryService-BLaGbpm-.cjs.map → queryService--t_W9PSJ.cjs.map} +1 -1
- package/dist/{queryService-DK-jUnET.js → queryService-DX6zeAs_.js} +6 -6
- package/dist/{queryService-DK-jUnET.js.map → queryService-DX6zeAs_.js.map} +1 -1
- package/dist/queue/index.cjs +1 -1
- package/dist/queue/index.d.cts +3 -3
- package/dist/queue/index.d.ts +3 -3
- package/dist/queue/index.js +1 -1
- package/dist/queue/types.d.cts +1 -1
- package/dist/queue/types.d.ts +1 -1
- package/dist/{queue-B7TY4JLf.cjs → queue-D1_TCe0z.cjs} +5 -5
- package/dist/{queue-B7TY4JLf.cjs.map → queue-D1_TCe0z.cjs.map} +1 -1
- package/dist/{queue-DViSQ-eq.js → queue-DrLUbk98.js} +5 -5
- package/dist/{queue-DViSQ-eq.js.map → queue-DrLUbk98.js.map} +1 -1
- package/dist/scheduler/index.cjs +3 -3
- package/dist/scheduler/index.d.cts +2 -2
- package/dist/scheduler/index.d.ts +2 -2
- package/dist/scheduler/index.js +3 -3
- package/dist/scheduler/types.d.cts +1 -1
- package/dist/scheduler/types.d.ts +1 -1
- package/dist/sdk/configurations/index.d.cts +4 -4
- package/dist/sdk/configurations/index.d.ts +4 -4
- package/dist/sdk/developerPortal/index.cjs +5 -5
- package/dist/sdk/developerPortal/index.cjs.map +1 -1
- package/dist/sdk/developerPortal/index.d.cts +5 -4
- package/dist/sdk/developerPortal/index.d.ts +5 -4
- package/dist/sdk/developerPortal/index.js +4 -4
- package/dist/sdk/queryService/index.cjs +1 -1
- package/dist/sdk/queryService/index.d.cts +1 -1
- package/dist/sdk/queryService/index.d.ts +1 -1
- package/dist/sdk/queryService/index.js +1 -1
- package/dist/sdk/semanticLayer/index.cjs +163 -74
- package/dist/sdk/semanticLayer/index.cjs.map +1 -1
- package/dist/sdk/semanticLayer/index.d.cts +16 -13
- package/dist/sdk/semanticLayer/index.d.ts +16 -13
- package/dist/sdk/semanticLayer/index.js +158 -75
- package/dist/sdk/semanticLayer/index.js.map +1 -1
- package/dist/sdk/semanticLayer/types.d.cts +2 -2
- package/dist/sdk/semanticLayer/types.d.ts +2 -2
- package/dist/sdk/storage/index.d.cts +1 -1
- package/dist/sdk/storage/index.d.ts +1 -1
- package/dist/sdk/tag/index.d.cts +2 -2
- package/dist/sdk/tag/index.d.ts +2 -2
- package/dist/sdk/tag/types.d.cts +1 -1
- package/dist/sdk/tag/types.d.ts +1 -1
- package/dist/sdk/vault/index.d.cts +1 -1
- package/dist/sdk/vault/index.d.ts +1 -1
- package/dist/status/index.cjs +1 -1
- package/dist/status/index.d.cts +1 -1
- package/dist/status/index.d.ts +1 -1
- package/dist/status/index.js +1 -1
- package/dist/storage/index.cjs +4 -4
- package/dist/storage/index.d.cts +2 -2
- package/dist/storage/index.d.ts +2 -2
- package/dist/storage/index.js +4 -4
- package/dist/storage/types.d.cts +2 -2
- package/dist/storage/types.d.ts +2 -2
- package/dist/{storage-kgxscFEg.js → storage--cVaecFq.js} +7 -7
- package/dist/{storage-kgxscFEg.js.map → storage--cVaecFq.js.map} +1 -1
- package/dist/{storage-CihHwZ7z.cjs → storage-DexWot8H.cjs} +7 -7
- package/dist/{storage-CihHwZ7z.cjs.map → storage-DexWot8H.cjs.map} +1 -1
- package/dist/store-C9FQCHGe.js +74 -0
- package/dist/store-C9FQCHGe.js.map +1 -0
- package/dist/store-xS-Cu_VS.cjs +85 -0
- package/dist/store-xS-Cu_VS.cjs.map +1 -0
- package/dist/stream/index.cjs +3 -3
- package/dist/stream/index.d.cts +2 -2
- package/dist/stream/index.d.ts +2 -2
- package/dist/stream/index.js +3 -3
- package/dist/stream/types.d.cts +1 -1
- package/dist/stream/types.d.ts +1 -1
- package/dist/syncActions/index.cjs +1 -1
- package/dist/syncActions/index.d.cts +1 -1
- package/dist/syncActions/index.d.ts +1 -1
- package/dist/syncActions/index.js +1 -1
- package/dist/syncActions/types.d.cts +1 -1
- package/dist/syncActions/types.d.ts +1 -1
- package/dist/{syncActions-B75t0NwP.js → syncActions-CkMHM-jB.js} +5 -5
- package/dist/{syncActions-B75t0NwP.js.map → syncActions-CkMHM-jB.js.map} +1 -1
- package/dist/{syncActions-CevF_TEb.cjs → syncActions-DQq_A9v6.cjs} +5 -5
- package/dist/{syncActions-CevF_TEb.cjs.map → syncActions-DQq_A9v6.cjs.map} +1 -1
- package/dist/telemetry/index.cjs +1 -1
- package/dist/telemetry/index.d.cts +2 -2
- package/dist/telemetry/index.d.ts +2 -2
- package/dist/telemetry/index.js +1 -1
- package/dist/{telemetry-DwlSLVAU.cjs → telemetry-CAu1Qt7B.cjs} +3 -3
- package/dist/{telemetry-DwlSLVAU.cjs.map → telemetry-CAu1Qt7B.cjs.map} +1 -1
- package/dist/{telemetry-FXpodtJN.js → telemetry-Ca6j0i9w.js} +3 -3
- package/dist/{telemetry-FXpodtJN.js.map → telemetry-Ca6j0i9w.js.map} +1 -1
- package/dist/{types-CGH_lfxS.d.cts → types-0xa_7cgo.d.cts} +2 -2
- package/dist/{types-CyiRYRVq.d.cts → types-3p0adMdd.d.cts} +3 -3
- package/dist/{types-BlCoTm7n.d.ts → types-6ThDkaJw.d.ts} +2 -2
- package/dist/{types-CkcMoXRk.d.ts → types-6hh_3SZs.d.ts} +3 -3
- package/dist/{types-dybUhlU2.d.ts → types-6ku2LeX6.d.ts} +2 -2
- package/dist/{types-BH9ljNmj.d.cts → types-B42HhyB0.d.cts} +2 -2
- package/dist/{types-C1vhYcic.d.cts → types-B4_MM5Wf.d.cts} +2 -2
- package/dist/{types-DlbiVsVo.d.cts → types-B6JJCta-.d.cts} +2 -2
- package/dist/{types-sVYo0o9_.d.ts → types-B6lOyHY_.d.ts} +3 -3
- package/dist/{types-BZBdLUpH.d.ts → types-B7O5koJb.d.cts} +2 -2
- package/dist/{types-De_DA2ga.d.ts → types-BHI8Lin9.d.ts} +2 -2
- package/dist/{types-Cj4bLPp5.d.cts → types-BO3sCD0a.d.cts} +37 -6
- package/dist/{types-zA3H84SM.d.cts → types-BOnf68s5.d.cts} +2 -2
- package/dist/{types-CPanB0p7.d.cts → types-BS5M67xm.d.cts} +3 -3
- package/dist/{types-COIsNoTQ.d.cts → types-BT46XIgn.d.cts} +2 -2
- package/dist/types-BUYqdN7B.d.ts +205 -0
- package/dist/{types-D-qI9ne4.d.ts → types-BYKHr5bR.d.ts} +2 -2
- package/dist/{types-D1uloiuY.d.cts → types-Be3Wgn1U.d.cts} +2 -2
- package/dist/{types-BTbczawY.d.ts → types-BgVKG4vg.d.ts} +2 -2
- package/dist/{types-CyHZ1ZQe.d.ts → types-C2gzqtjf.d.ts} +2 -2
- package/dist/{types-Av2egS_l.d.ts → types-C35GWNmq.d.ts} +2 -2
- package/dist/{types-D6jKxUv_.d.ts → types-C4mr0lop.d.ts} +35 -3
- package/dist/{types-BI2jI-3-.d.cts → types-CCr1-9Q6.d.cts} +3 -3
- package/dist/{types-DeSd3gqW.d.ts → types-CHCM9oNk.d.ts} +3 -3
- package/dist/{types-BMQW-2Yw.d.ts → types-CNQdtffE.d.ts} +729 -79
- package/dist/{types-MbcIiKDI.d.cts → types-CPaluTW7.d.cts} +3 -3
- package/dist/{types-CXTqFYah.d.ts → types-CSc8NQCY.d.ts} +37 -6
- package/dist/{types-Cz1dj_TM.d.ts → types-C_ilZZkQ.d.ts} +2 -2
- package/dist/{types-EJEoI3ZK.d.ts → types-CaMfshWX.d.ts} +2 -2
- package/dist/{types-BoV9M5Xg.d.cts → types-Ccgbipp4.d.cts} +2 -2
- package/dist/{types-DuiUN0h8.d.ts → types-Cpjk0-ta.d.ts} +2 -2
- package/dist/{types-GuWtMCMn.d.cts → types-CrH4H8M4.d.cts} +2 -2
- package/dist/{types-DNXC_-fA.d.cts → types-Cu-0LT4f.d.cts} +2 -2
- package/dist/{types-BptQ7jpP.d.cts → types-CxmV36rp.d.cts} +2 -2
- package/dist/{types-DwpRt3e9.d.ts → types-D-98DirB.d.ts} +2 -2
- package/dist/{types-BV2BDccJ.d.cts → types-D6ocCyGh.d.cts} +35 -3
- package/dist/{types-COc-nind.d.cts → types-D7Wgcp0u.d.ts} +2 -2
- package/dist/{types-ByWD2oeV.d.ts → types-DAzmGzlb.d.ts} +2 -2
- package/dist/{types-BREGN3qo.d.cts → types-DHI0g51U.d.cts} +2 -2
- package/dist/{types-Dfc58bPE.d.ts → types-DHqIJKwx.d.ts} +2 -2
- package/dist/types-DONxb2-c.d.cts +205 -0
- package/dist/{types-Di8VIZwQ.d.ts → types-DTTC70Ac.d.ts} +2 -2
- package/dist/{types-C2CLlR4i.d.ts → types-DlvZeert.d.ts} +2 -2
- package/dist/{types-cDU_J45_.d.cts → types-DqniGeDJ.d.cts} +2 -2
- package/dist/{types-iNlsdRkx.d.cts → types-E3VT-zYz.d.cts} +729 -79
- package/dist/{types-B4jdPHoL.d.cts → types-Jt0ipbSm.d.cts} +2 -2
- package/dist/{types-Bpnpa2Wt.d.ts → types-Ur37iOqb.d.ts} +3 -3
- package/dist/{types-BnaAo7xn.d.ts → types-ZGAWRIBW.d.ts} +2 -2
- package/dist/{types-CvkqEvhv.d.cts → types-bY6K3y0O.d.cts} +2 -2
- package/dist/{types-CpALS017.d.ts → types-k4R8gQ4U.d.ts} +2 -2
- package/dist/{types-CcuG9cid.d.cts → types-sO52qIAA.d.cts} +2 -2
- package/dist/{types-CJHi0zdD.d.cts → types-sp1rJY9E.d.cts} +2 -2
- package/dist/{validateConnectionStatus-V9q6Nl6u.cjs → validateConnectionStatus-24zqIQ0p.cjs} +2 -2
- package/dist/{validateConnectionStatus-V9q6Nl6u.cjs.map → validateConnectionStatus-24zqIQ0p.cjs.map} +1 -1
- package/dist/{validateConnectionStatus-BrLXkoSI.js → validateConnectionStatus-DhkWg6Eq.js} +2 -2
- package/dist/{validateConnectionStatus-BrLXkoSI.js.map → validateConnectionStatus-DhkWg6Eq.js.map} +1 -1
- package/dist/vault/index.cjs +4 -4
- package/dist/vault/index.d.cts +1 -1
- package/dist/vault/index.d.ts +1 -1
- package/dist/vault/index.js +4 -4
- package/dist/vault/types.d.cts +1 -1
- package/dist/vault/types.d.ts +1 -1
- package/package.json +2 -2
- package/surface/auth.md +2 -2
- package/surface/kaiAgent.md +5 -2
- package/dist/authClient--BtZgjIc.js.map +0 -1
- package/dist/authClient-b7uec7sw.cjs.map +0 -1
- package/dist/createStore-BNiCRQXa.js +0 -148
- package/dist/createStore-BNiCRQXa.js.map +0 -1
- package/dist/createStore-MQbboXcB.cjs +0 -177
- package/dist/createStore-MQbboXcB.cjs.map +0 -1
- package/dist/credential-DOXH7XRS.cjs.map +0 -1
- package/dist/credential-d2RDcXRB.js.map +0 -1
- package/dist/jobStatus-DbMupQEK.js.map +0 -1
- package/dist/jobStatus-kQ9JqF8t.cjs.map +0 -1
- package/dist/kaiAgent-4OiIK1C2.cjs.map +0 -1
- package/dist/kaiAgent-HDaFS9BR.js.map +0 -1
- package/dist/types-B2vmg_UF.d.cts +0 -148
- package/dist/types-RfaldD4P.d.ts +0 -148
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_store = require("./store-xS-Cu_VS.cjs");
|
|
2
2
|
//#region src/utils/createAbortError.ts
|
|
3
3
|
const createAbortError = (reason) => new DOMException(reason, "AbortError");
|
|
4
4
|
//#endregion
|
|
@@ -47,35 +47,52 @@ const lazy = (task) => {
|
|
|
47
47
|
//#endregion
|
|
48
48
|
//#region src/utils/async/result.ts
|
|
49
49
|
const asError = (thrown) => thrown instanceof Error ? thrown : new Error(String(thrown), { cause: thrown });
|
|
50
|
+
const success = (data) => ({
|
|
51
|
+
success: true,
|
|
52
|
+
data
|
|
53
|
+
});
|
|
54
|
+
const failure = (error) => ({
|
|
55
|
+
success: false,
|
|
56
|
+
error
|
|
57
|
+
});
|
|
58
|
+
const isSuccess = (result) => result.success;
|
|
59
|
+
const isFailure = (result) => !result.success;
|
|
60
|
+
const map = (result, fn) => result.success ? success(fn(result.data)) : result;
|
|
61
|
+
const mapError = (result, fn) => result.success ? result : failure(fn(result.error));
|
|
62
|
+
const andThen = (result, fn) => result.success ? fn(result.data) : result;
|
|
63
|
+
const match = (result, onSuccess, onFailure) => result.success ? onSuccess(result.data) : onFailure(result.error);
|
|
64
|
+
const unwrap = (result) => {
|
|
65
|
+
if (result.success) return result.data;
|
|
66
|
+
throw result.error;
|
|
67
|
+
};
|
|
68
|
+
const unwrapOr = (result, fallback) => result.success ? result.data : fallback;
|
|
50
69
|
const tryCatch = (task) => {
|
|
51
70
|
try {
|
|
52
|
-
return
|
|
53
|
-
success: true,
|
|
54
|
-
data: task()
|
|
55
|
-
};
|
|
71
|
+
return success(task());
|
|
56
72
|
} catch (thrown) {
|
|
57
|
-
return
|
|
58
|
-
success: false,
|
|
59
|
-
error: asError(thrown)
|
|
60
|
-
};
|
|
73
|
+
return failure(asError(thrown));
|
|
61
74
|
}
|
|
62
75
|
};
|
|
63
76
|
const tryCatchAsync = async (task) => {
|
|
64
77
|
try {
|
|
65
|
-
return
|
|
66
|
-
success: true,
|
|
67
|
-
data: await task()
|
|
68
|
-
};
|
|
78
|
+
return success(await task());
|
|
69
79
|
} catch (thrown) {
|
|
70
|
-
return
|
|
71
|
-
success: false,
|
|
72
|
-
error: asError(thrown)
|
|
73
|
-
};
|
|
80
|
+
return failure(asError(thrown));
|
|
74
81
|
}
|
|
75
82
|
};
|
|
76
83
|
const fromThrowable = (fn) => (...args) => tryCatch(() => fn(...args));
|
|
77
84
|
const fromThrowableAsync = (fn) => (...args) => tryCatchAsync(() => fn(...args));
|
|
78
85
|
const Result = {
|
|
86
|
+
success,
|
|
87
|
+
failure,
|
|
88
|
+
isSuccess,
|
|
89
|
+
isFailure,
|
|
90
|
+
map,
|
|
91
|
+
mapError,
|
|
92
|
+
andThen,
|
|
93
|
+
match,
|
|
94
|
+
unwrap,
|
|
95
|
+
unwrapOr,
|
|
79
96
|
tryCatch,
|
|
80
97
|
tryCatchAsync,
|
|
81
98
|
fromThrowable,
|
|
@@ -229,7 +246,7 @@ const pollLoop = async ({ pollKey, pollFn: _pollFn, until: _until, signal: calle
|
|
|
229
246
|
};
|
|
230
247
|
//#endregion
|
|
231
248
|
//#region src/utils/async/poll/poll.ts
|
|
232
|
-
const emitter =
|
|
249
|
+
const emitter = require_store.createEmitter();
|
|
233
250
|
const failureOf = (result) => {
|
|
234
251
|
if ("error" in result && result.error) return result.error;
|
|
235
252
|
if (result.state === "aborted") {
|
|
@@ -242,7 +259,7 @@ const poller = ({ pollKey, signal, until, ...pollLoopOptions }) => {
|
|
|
242
259
|
const callerSignal = signal ?? neverAborts();
|
|
243
260
|
const pollerSignal = new AbortController();
|
|
244
261
|
const anySignal = AbortSignal.any([pollerSignal.signal, callerSignal]);
|
|
245
|
-
const snapshot =
|
|
262
|
+
const snapshot = require_store.createStore({
|
|
246
263
|
pollKey: pollKey ?? [],
|
|
247
264
|
state: "idle",
|
|
248
265
|
attempt: 0,
|
|
@@ -491,4 +508,4 @@ Object.defineProperty(exports, "poller", {
|
|
|
491
508
|
}
|
|
492
509
|
});
|
|
493
510
|
|
|
494
|
-
//# sourceMappingURL=jobStatus-
|
|
511
|
+
//# sourceMappingURL=jobStatus-0_Y3Sr4i.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobStatus-0_Y3Sr4i.cjs","names":["createEmitter","createStore"],"sources":["../src/utils/createAbortError.ts","../src/utils/async/delay.ts","../src/utils/async/lazy.ts","../src/utils/async/result.ts","../src/utils/async/poll/utils.ts","../src/utils/async/poll/backoff.ts","../src/utils/async/poll/pollLoop.ts","../src/utils/async/poll/poll.ts","../src/domain/jobStatus.ts"],"sourcesContent":["export const createAbortError = (reason?: string) => new DOMException(reason, 'AbortError');\n","import { createAbortError } from '../createAbortError';\n\nexport const delay = (timeout: number, signal?: AbortSignal) =>\n new Promise<void>((resolve, reject) => {\n if (signal?.aborted) return reject(createAbortError(signal.reason));\n\n const onAbort = () => {\n clearTimeout(timeoutId);\n reject(createAbortError(signal?.reason));\n };\n\n // `once: true` only detaches the listener once the event fires, so the timeout path has to\n // detach it explicitly — a caller reusing one signal across many delays (`poll` does) would\n // otherwise pile up a listener per delay for as long as the signal is alive.\n const timeoutId = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, timeout);\n\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n","import type { TaskFn } from './types';\n\n/**\n * Computes `task` on first call and hands that one value to every later caller —\n * the async `Lazy<T>`. While the first run is in flight every call shares it; once\n * it resolves, every call — right after, or long after — replays the same promise.\n * (Contrast `dedupe`, which shares only an *in-flight* run and lets the next\n * trigger start a fresh one, success or not.)\n *\n * A rejection is *not* kept: the slot is cleared, so the next call starts a fresh\n * run. Lazy init over the network — a stack index, JWKS, feature flags — must not\n * be bricked forever by one transient failure. Callers that joined the failed run\n * all reject with its error; only a call made after it settles retries.\n *\n * @returns a getter; each call returns the promise of the computed value.\n * @throws The returned promise rejects with whatever `task` throws or rejects\n * with — the caller handles it (try/catch, or `.catch` on `void get()`).\n */\nexport const lazy = <T>(task: TaskFn<T>): (() => Promise<Awaited<T>>) => {\n let value: Promise<Awaited<T>> | null = null;\n\n // async wrapper so a synchronous throw from `task` rejects rather than throws.\n const runTask = async (): Promise<Awaited<T>> => await task();\n\n return () => {\n value ??= runTask().catch((error: unknown) => {\n value = null;\n throw error;\n });\n return value;\n };\n};\n","export type Success<T> = { success: true; data: T };\nexport type Failure<E extends Error> = { success: false; error: E };\nexport type Result<T, E extends Error = Error> = Success<T> | Failure<E>;\n\n// A task that returns a promise is a type error: the wrapper would report success before it\n// settles, and the rejection would go unhandled. Use the `*Async` sibling.\ntype NotPromise<T> = T extends PromiseLike<unknown> ? never : T;\n\nexport const asError = (thrown: unknown) =>\n thrown instanceof Error ? thrown : new Error(String(thrown), { cause: thrown });\n\nconst success = <T>(data: T): Result<T, never> => ({ success: true, data });\nconst failure = <E extends Error>(error: E): Result<never, E> => ({ success: false, error });\nconst isSuccess = <T, E extends Error>(result: Result<T, E>): result is Success<T> =>\n result.success;\nconst isFailure = <T, E extends Error>(result: Result<T, E>): result is Failure<E> =>\n !result.success;\n\nconst map = <T, E extends Error, U>(result: Result<T, E>, fn: (data: T) => U): Result<U, E> =>\n result.success ? success(fn(result.data)) : result;\n\nconst mapError = <T, E extends Error, F extends Error>(\n result: Result<T, E>,\n fn: (error: E) => F,\n): Result<T, F> => (result.success ? result : failure(fn(result.error)));\n\nconst andThen = <T, E extends Error, U, F extends Error>(\n result: Result<T, E>,\n fn: (data: T) => Result<U, F>,\n): Result<U, E | F> => (result.success ? fn(result.data) : result);\n\nconst match = <T, E extends Error, R>(\n result: Result<T, E>,\n onSuccess: (data: T) => R,\n onFailure: (error: E) => R,\n): R => (result.success ? onSuccess(result.data) : onFailure(result.error));\n\nconst unwrap = <T, E extends Error>(result: Result<T, E>): T => {\n if (result.success) return result.data;\n throw result.error;\n};\n\nconst unwrapOr = <T, E extends Error, U>(result: Result<T, E>, fallback: U): T | U =>\n result.success ? result.data : fallback;\n\nconst tryCatch = <T>(task: () => NotPromise<T>): Result<T> => {\n try {\n return success(task());\n } catch (thrown) {\n return failure(asError(thrown));\n }\n};\n\nconst tryCatchAsync = async <T>(task: () => T | PromiseLike<T>): Promise<Result<T>> => {\n try {\n return success(await task());\n } catch (thrown) {\n return failure(asError(thrown));\n }\n};\n\nconst fromThrowable =\n <A extends unknown[], R>(fn: (...args: A) => NotPromise<R>) =>\n (...args: A): Result<R> =>\n tryCatch(() => fn(...args));\n\nconst fromThrowableAsync =\n <A extends unknown[], R>(fn: (...args: A) => R | PromiseLike<R>) =>\n (...args: A): Promise<Result<R>> =>\n tryCatchAsync(() => fn(...args));\n\nexport const Result = {\n success,\n failure,\n isSuccess,\n isFailure,\n map,\n mapError,\n andThen,\n match,\n unwrap,\n unwrapOr,\n tryCatch,\n tryCatchAsync,\n fromThrowable,\n fromThrowableAsync,\n};\n","/**\n * The longest delay a timer can hold: `setTimeout` takes a 32-bit signed number of milliseconds,\n * about 24.9 days.\n *\n * - Above it the delay wraps: Node warns and fires after 1 ms, so a long wait becomes a busy loop.\n * - It bounds a backoff curve and a poll's timeout alike, since both end up in a timer.\n */\nexport const MAX_TIMER_DELAY = 2 ** 31 - 1;\n\nexport const clamp = (value: number, min: number, max = Infinity) =>\n Math.min(Math.max(value, min), max);\n\nexport const finiteOr = (value: number, fallback: number) =>\n Number.isFinite(value) ? value : fallback;\n\n/** A signal that never aborts, so an input nobody gave costs no branch of its own. */\nexport const neverAborts = () => new AbortController().signal;\n","import { clamp, finiteOr, MAX_TIMER_DELAY } from './utils';\n\nexport type Jitter =\n | 'none' // delay\n | 'full' // [0, delay)\n | 'equal'; // [delay / 2, delay)\n\ntype Backoff =\n | { type: 'constant'; interval: number } // 3000, 3000, 3000, ...\n | { type: 'linear'; initialInterval: number; step: number } // 1000, 2000, 3000, …\n | { type: 'exponential'; initialInterval: number; factor?: number }; // 1000, 2000, 4000, 8000, …\n\ntype RandomFn = () => number;\ntype JitterFn = (delay: number) => number;\ntype BackoffFn = (attempt: number) => number;\n\nexport type BackoffDef = {\n jitter?: Jitter;\n maxInterval?: number;\n random?: RandomFn;\n} & Backoff;\n\nconst MIN_STEP = 500;\nconst MIN_FACTOR = 2;\nconst MIN_INTERVAL = 500;\n\nexport const createBackoff = ({\n jitter = 'none',\n maxInterval: _maxInterval = MAX_TIMER_DELAY,\n random = Math.random,\n ...backoff\n}: BackoffDef): BackoffFn => {\n const backoffFn: BackoffFn = (attempt) => {\n if (backoff.type === 'linear') {\n const interval = clamp(finiteOr(backoff.initialInterval, MIN_INTERVAL), MIN_INTERVAL);\n const step = clamp(finiteOr(backoff.step, MIN_STEP), MIN_STEP);\n\n return interval + step * (attempt - 1);\n }\n if (backoff.type === 'exponential') {\n const interval = clamp(finiteOr(backoff.initialInterval, MIN_INTERVAL), MIN_INTERVAL);\n const factor = clamp(finiteOr(backoff.factor ?? MIN_FACTOR, MIN_FACTOR), MIN_FACTOR);\n\n return interval * factor ** (attempt - 1);\n }\n\n return clamp(finiteOr(backoff.interval, MIN_INTERVAL), MIN_INTERVAL);\n };\n\n const jitterFn: JitterFn = (delay) => {\n if (jitter === 'none') return delay;\n if (jitter === 'full') return delay * random();\n return delay / 2 + (delay / 2) * random(); // equal\n };\n\n const maxInterval = clamp(finiteOr(_maxInterval, MAX_TIMER_DELAY), MIN_INTERVAL, MAX_TIMER_DELAY);\n return (_attempt) => {\n const attempt = clamp(finiteOr(Math.trunc(_attempt), 1), 1);\n const capped = Math.min(backoffFn(attempt), maxInterval);\n // Floored after the jitter, not before: `full` jitter multiplies by a random fraction, so a floor\n // applied to the curve alone leaves sub-millisecond gaps between attempts.\n return clamp(finiteOr(jitterFn(capped), MIN_INTERVAL), MIN_INTERVAL, maxInterval);\n };\n};\n","import { delay } from '../delay';\nimport { Result } from '../result';\n\nimport { type BackoffDef, createBackoff } from './backoff';\nimport { clamp, finiteOr, MAX_TIMER_DELAY, neverAborts } from './utils';\n\ntype Clock = {\n wait: (ms: number, signal?: AbortSignal) => Promise<void>;\n now: () => number;\n};\n\nexport type PollKey = readonly unknown[];\n\nexport type PollContext<K extends PollKey = PollKey> = {\n pollKey: K;\n attempt: number;\n elapsed: number;\n};\n\n/** The context plus the answer it is about: what `until` decides on, and what an ending reports. */\nexport type PollTick<T, K extends PollKey = PollKey> = PollContext<K> & { last: T | null };\n\nexport type PollResultState = 'done' | 'timedOut' | 'exhausted' | 'aborted' | 'errored';\n\nexport type PollResult<T, K extends PollKey = PollKey> = PollTick<T, K> &\n (\n | { state: 'done'; data: T }\n | { state: 'timedOut' | 'exhausted'; error?: Error }\n | { state: 'aborted'; reason?: unknown }\n | { state: 'errored'; error: Error }\n );\n\nexport type PollOptions<T, K extends PollKey = PollKey> = {\n pollKey?: K;\n pollFn: (context: PollContext<K> & { signal: AbortSignal }) => Promise<T>;\n until: (tick: PollTick<T, K> & { data: T }) => boolean;\n signal?: AbortSignal;\n backoff?: BackoffDef;\n isRetryable?: (error: Error) => boolean;\n maxAttempts?: number;\n timeout?: number;\n clock?: Clock;\n};\n\nconst pollResult = {\n done: <T, K extends PollKey>(data: T, context: PollTick<T, K>): PollResult<T, K> => ({\n state: 'done',\n data,\n ...context,\n last: data,\n }),\n errored: <T, K extends PollKey>(error: Error, context: PollTick<T, K>): PollResult<T, K> => ({\n state: 'errored',\n error,\n ...context,\n }),\n exhausted: <T, K extends PollKey>(context: PollTick<T, K>, error?: Error): PollResult<T, K> => ({\n state: 'exhausted',\n error,\n ...context,\n }),\n timedOut: <T, K extends PollKey>(context: PollTick<T, K>, error?: Error): PollResult<T, K> => ({\n state: 'timedOut',\n error,\n ...context,\n }),\n aborted: <T, K extends PollKey>(context: PollTick<T, K>, reason: unknown): PollResult<T, K> => ({\n state: 'aborted',\n reason,\n ...context,\n }),\n};\n\nexport const pollLoop = async <T, K extends PollKey = PollKey>({\n pollKey,\n pollFn: _pollFn,\n until: _until,\n signal: callerSignal = neverAborts(),\n backoff: backoffDef = { type: 'constant', interval: 3000 },\n clock = { wait: (ms, signal) => delay(ms, signal), now: () => performance.now() },\n isRetryable: _isRetryable = () => false,\n maxAttempts: _maxAttempts = Infinity,\n timeout: _timeout = Infinity,\n}: PollOptions<T, K>): Promise<PollResult<T, K>> => {\n // A deadline ends up in a timer, so a finite one is bounded by what a timer can hold. `Infinity`\n // is answered before the clamp: it means no deadline, and clamping would make it the longest one.\n const requested = finiteOr(_timeout, Infinity);\n const timeout = requested === Infinity ? Infinity : clamp(requested, 0, MAX_TIMER_DELAY);\n const maxAttempts = Math.trunc(clamp(finiteOr(_maxAttempts, Infinity), 0));\n\n const timeoutSignal = timeout === Infinity ? neverAborts() : AbortSignal.timeout(timeout);\n const anySignal = AbortSignal.any([callerSignal, timeoutSignal]);\n const anyAborted = Promise.withResolvers<never>();\n\n anySignal.addEventListener('abort', () => anyAborted.reject(anySignal.reason), {\n once: true,\n });\n void anyAborted.promise.catch(() => undefined);\n\n const backoffFn = createBackoff(backoffDef);\n const startedAt = clock.now();\n\n const until = Result.fromThrowable(_until);\n const isRetryable = Result.fromThrowable(_isRetryable);\n // A poll without a key has an empty one, and `K` is opaque in here — the one place the absent\n // case is materialised is the one place it has to be asserted.\n const key = pollKey ?? ([] as unknown as K);\n // Only what the context declares: a request is not handed the tick's `last` as well.\n const pollFn = ({ pollKey: key, attempt: at, elapsed }: PollContext<K>) =>\n Result.tryCatchAsync(() =>\n Promise.race([\n _pollFn({ pollKey: key, attempt: at, elapsed, signal: anySignal }),\n anyAborted.promise,\n ]),\n );\n const sleep = Result.fromThrowableAsync((ms: number) => clock.wait(ms, anySignal));\n\n let attempt = 0;\n // What a retry swallowed: the poll carries it to whichever ending runs out first.\n let last: T | null = null;\n let lastError: Error | undefined;\n const context = (at = clock.now() - startedAt): PollTick<T, K> => ({\n pollKey: key,\n attempt,\n elapsed: at,\n last,\n });\n\n if (attempt >= maxAttempts) return pollResult.exhausted<T, K>(context());\n\n while (true) {\n const before = context();\n if (timeoutSignal.aborted) return pollResult.timedOut(before, lastError);\n if (callerSignal.aborted) return pollResult.aborted(before, callerSignal.reason);\n\n attempt++;\n // The attempt it is, not the one before it — `before` was read to decide whether to make it.\n const poll = await pollFn({ ...before, attempt });\n\n // What the attempt produced, recorded before the tick that reports it: on any ending but `done`\n // these two are the only account of what the poll saw, and reading them one attempt behind is\n // reading the wrong answer.\n if (poll.success) last = poll.data;\n else lastError = poll.error;\n\n const after = context();\n if (timeoutSignal.aborted) return pollResult.timedOut(after, lastError);\n if (callerSignal.aborted) return pollResult.aborted(after, callerSignal.reason);\n\n if (!poll.success) {\n const canRetry = isRetryable(poll.error);\n\n // A predicate that throws cannot ask for a retry. The request's own failure stays the reported\n // one — it is the type a caller's guards expect — and the predicate's rides along as its cause.\n if (!canRetry.success) {\n poll.error.cause ??= canRetry.error;\n return pollResult.errored(poll.error, after);\n }\n if (!canRetry.data) return pollResult.errored(poll.error, after);\n }\n\n if (poll.success) {\n const isDone = until({ ...after, data: poll.data });\n if (!isDone.success) return pollResult.errored(isDone.error, after);\n if (isDone.data) return pollResult.done(poll.data, after);\n }\n\n // exhausted\n if (attempt >= maxAttempts) return pollResult.exhausted(after, lastError);\n\n // sleep\n const backoff = backoffFn(attempt);\n if (after.elapsed + backoff >= timeout) return pollResult.timedOut(after, lastError);\n\n const slept = await sleep(backoff);\n if (!slept.success) {\n const afterSleep = context();\n if (timeoutSignal.aborted) return pollResult.timedOut(afterSleep, lastError);\n if (callerSignal.aborted) return pollResult.aborted(afterSleep, callerSignal.reason);\n\n return pollResult.errored(slept.error, afterSleep);\n }\n }\n};\n","import { createAbortError } from '../../createAbortError';\nimport { createEmitter, createStore } from '../../store';\nimport { lazy } from '../lazy';\n\nimport {\n type PollKey,\n pollLoop,\n type PollOptions,\n type PollResult,\n type PollResultState,\n type PollTick,\n} from './pollLoop';\nimport { neverAborts } from './utils';\n\nexport type PollState = 'idle' | 'polling' | PollResultState;\nexport type PollSnapshot = PollTick<unknown> & { state: PollState };\n\ntype OnFailure<T> = (result: PollResult<T>) => Error | undefined;\n\nexport type PollerStartFn<T> = () => Promise<PollResult<T>>;\nexport type PollerStopFn = (reason?: string) => void;\ntype PollerSubscribeFn = (listener: (snapshot: PollSnapshot) => void) => () => void;\ntype PollerDebugFn = () => PollSnapshot;\ntype PollerUnwrapFn<T> = (onFailure?: OnFailure<T>) => Promise<T>;\nexport type Poller<T> = {\n readonly state: PollState;\n start: PollerStartFn<T>;\n unwrap: PollerUnwrapFn<T>;\n stop: PollerStopFn;\n subscribe: PollerSubscribeFn;\n debug: PollerDebugFn;\n};\n\nexport type PollTask<T> = Promise<PollResult<T>> &\n Pick<Poller<T>, 'unwrap' | 'stop' | 'subscribe' | 'debug'>;\n\nexport type ObservedPoller = Pick<Poller<unknown>, 'stop' | 'subscribe' | 'debug' | 'start'>;\n\nexport const emitter = createEmitter<ObservedPoller>();\n\nexport const failureOf = (result: PollResult<unknown>): Error => {\n if ('error' in result && result.error) return result.error;\n\n if (result.state === 'aborted') {\n if (result.reason instanceof Error) return result.reason;\n\n return createAbortError(\n typeof result.reason === 'string' ? result.reason : 'The poll was stopped.',\n );\n }\n\n return new Error(`The poll ${result.state} after ${result.attempt} attempts.`);\n};\n\nexport const poller = <T, K extends PollKey = PollKey>({\n pollKey,\n signal,\n until,\n ...pollLoopOptions\n}: PollOptions<T, K>): Poller<T> => {\n const callerSignal = signal ?? neverAborts();\n const pollerSignal = new AbortController();\n const anySignal = AbortSignal.any([pollerSignal.signal, callerSignal]);\n\n // snapshoting\n const snapshot = createStore<PollSnapshot>({\n pollKey: pollKey ?? [],\n state: 'idle',\n attempt: 0,\n elapsed: 0,\n last: null,\n });\n const updateSnapshot = (next: Partial<PollSnapshot>) =>\n snapshot.set({ ...snapshot.get(), ...next });\n\n const handleUntil = (context: PollTick<T, K> & { data: T }) => {\n updateSnapshot({ attempt: context.attempt, elapsed: context.elapsed, last: context.data });\n return until(context);\n };\n\n const start: PollerStartFn<T> = lazy(async () => {\n updateSnapshot({ state: 'polling' });\n const result = await pollLoop({\n ...pollLoopOptions,\n pollKey,\n until: handleUntil,\n signal: anySignal,\n });\n // The result knows what a tick cannot: attempts that failed, and the time the ending itself took.\n snapshot.set({\n pollKey: result.pollKey,\n state: result.state,\n attempt: result.attempt,\n elapsed: result.elapsed,\n last: result.last,\n });\n return result;\n });\n\n const stop: PollerStopFn = (reason) => pollerSignal.abort(reason);\n const subscribe: PollerSubscribeFn = (listener) =>\n snapshot.subscribe(() => listener(snapshot.get()));\n const debug: PollerDebugFn = snapshot.get;\n\n const unwrap: PollerUnwrapFn<T> = async (onFailure) => {\n const result = await start();\n if (result.state === 'done') return result.data;\n throw onFailure?.(result) ?? failureOf(result);\n };\n\n const controls = {\n stop,\n subscribe,\n debug,\n start,\n };\n\n emitter.emit(controls);\n\n return {\n get state() {\n return snapshot.get().state;\n },\n unwrap,\n ...controls,\n };\n};\n\nexport const poll = <T, K extends PollKey = PollKey>(options: PollOptions<T, K>): PollTask<T> => {\n const p = poller(options);\n\n return Object.assign(p.start(), {\n unwrap: p.unwrap,\n stop: p.stop,\n subscribe: p.subscribe,\n debug: p.debug,\n });\n};\n","import type { QueryJobStatus } from '../clients/queryService/types';\nimport type { QueueJobStatus } from '../clients/queue/types';\nimport type { StorageJobStatus } from '../clients/storage/jobs/types';\n\n/**\n * How one service's status vocabulary splits by what the job is doing. Declared per service, then\n * indexed into sets by `forService`.\n *\n * - The three groups are disjoint and together cover the vocabulary. `terminal` is not declared: a\n * job is terminal exactly when it has succeeded or failed.\n * - Annotating the constant is what validates its members: `QueueJobStatus` and `QueryJobStatus` are\n * generated, so a spec that renames one fails the build here instead of silently dropping it from\n * a group and leaving a poll loop to run to `maxAttempts`.\n */\ntype StatusGroups<Status extends string> = {\n running: readonly Status[];\n successful: readonly Status[];\n failed: readonly Status[];\n};\n\n/**\n * A service's statuses as named constants — `SUCCESS: 'success'`.\n *\n * Keyed off the status type, so there is an entry per status and no more, and a spec that renames a\n * status renames the key with it.\n */\ntype StatusNames<Status extends string> = { [K in Status as Uppercase<K>]: K };\n\n// `StorageJobStatus` in `connection`, whose `isDoneStatus` is the `success`/`error` pair.\nconst STORAGE: StatusGroups<StorageJobStatus> = {\n running: ['waiting', 'processing'],\n successful: ['success'],\n failed: ['error'],\n};\n\n/**\n * `PlainJobInterface` in `job-queue-internal-api-php-client`.\n *\n * - `terminating` is running, not terminal: the job is still being killed and keeps reporting until\n * `terminated`.\n * - `warning` is a success — the run produced its output and only added a non-fatal notice, which is\n * why a flow keeps going past it. The backend declares no such split (`STATUSES_FINISHED` is its\n * only grouping), so dividing it into success and failure is ours.\n */\nconst QUEUE: StatusGroups<QueueJobStatus> = {\n running: ['created', 'waiting', 'processing', 'terminating'],\n successful: ['success', 'warning'],\n failed: ['error', 'cancelled', 'terminated'],\n};\n\n// `JobState` in `go-monorepo` (`services/query/internal/repository/models`). `canceled` with one\n// `l` — queryService's spelling, unlike the other two services.\nconst QUERY: StatusGroups<QueryJobStatus> = {\n running: ['created', 'enqueued', 'processing'],\n successful: ['completed'],\n failed: ['failed', 'canceled'],\n};\n\n/**\n * One service's view of its statuses: a predicate per question, with the data a level down.\n *\n * - `isSuccessful` / `isFailed` are `false` while the job is still running, so read them together\n * with `isTerminal` where that distinction matters.\n * - `isKnown` narrows an untyped string — one read out of an MCP tool result or a URL, say. A status\n * that arrived on a typed response needs no guard. Its `Set<string>` is what takes the wider type\n * the caller has, so the guard needs no assertion of its own.\n * - `describe` answers every question about one status at once, for a caller that needs more than\n * one of them.\n * - `statuses.terminal` is `successful` plus `failed` — the group a poll loop stops on.\n * - `named` is asserted, not proven: `Object.fromEntries` types its result as an index signature,\n * and no expression convinces TypeScript that uppercasing every status produces exactly\n * `StatusNames<Status>`. The alternative is writing all three maps out by hand, which is the\n * duplication this file exists to avoid.\n */\nconst forService = <Status extends string>(groups: StatusGroups<Status>) => {\n const all = [...groups.running, ...groups.successful, ...groups.failed];\n\n const running: ReadonlySet<Status> = new Set(groups.running);\n const successful: ReadonlySet<Status> = new Set(groups.successful);\n const failed: ReadonlySet<Status> = new Set(groups.failed);\n const terminal: ReadonlySet<Status> = new Set([...groups.successful, ...groups.failed]);\n const known: ReadonlySet<string> = new Set<string>(all);\n\n return {\n isRunning: (status: Status) => running.has(status),\n isTerminal: (status: Status) => terminal.has(status),\n isSuccessful: (status: Status) => successful.has(status),\n isFailed: (status: Status) => failed.has(status),\n isKnown: (value: string): value is Status => known.has(value),\n describe: (status: Status) => ({\n isRunning: running.has(status),\n isTerminal: terminal.has(status),\n isSuccessful: successful.has(status),\n isFailed: failed.has(status),\n }),\n statuses: { running, successful, failed, terminal },\n named: Object.fromEntries(\n all.map((status) => [status.toUpperCase(), status]),\n ) as StatusNames<Status>,\n };\n};\n\n/**\n * Job statuses per service: `jobStatus.queue.isFailed(status)` is the question about one job,\n * `jobStatus.queue.statuses.failed` the statuses behind it,\n * `jobStatus.queue.named.ERROR` one of them by name.\n *\n * One entry per service, never one over the union: the vocabularies overlap by label — `processing`\n * belongs to all three, `created` to queue and query — while which statuses exist and what each\n * implies differ per service. A shared entry would take another service's status and answer by its\n * rules.\n *\n * - `storage` and `queue` describe a job; `query` describes a query job, not its statements. A\n * statement has its own state, including a terminal `notExecuted` with no job-level equivalent.\n * - Spread a group where an array is wanted — an API `status` filter, or a UI list that mixes job\n * statuses with its own.\n */\nexport const jobStatus = {\n storage: forService(STORAGE),\n queue: forService(QUEUE),\n query: forService(QUERY),\n};\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as createEmitter, t as createStore } from "./store-C9FQCHGe.js";
|
|
2
2
|
//#region src/utils/createAbortError.ts
|
|
3
3
|
const createAbortError = (reason) => new DOMException(reason, "AbortError");
|
|
4
4
|
//#endregion
|
|
@@ -47,35 +47,52 @@ const lazy = (task) => {
|
|
|
47
47
|
//#endregion
|
|
48
48
|
//#region src/utils/async/result.ts
|
|
49
49
|
const asError = (thrown) => thrown instanceof Error ? thrown : new Error(String(thrown), { cause: thrown });
|
|
50
|
+
const success = (data) => ({
|
|
51
|
+
success: true,
|
|
52
|
+
data
|
|
53
|
+
});
|
|
54
|
+
const failure = (error) => ({
|
|
55
|
+
success: false,
|
|
56
|
+
error
|
|
57
|
+
});
|
|
58
|
+
const isSuccess = (result) => result.success;
|
|
59
|
+
const isFailure = (result) => !result.success;
|
|
60
|
+
const map = (result, fn) => result.success ? success(fn(result.data)) : result;
|
|
61
|
+
const mapError = (result, fn) => result.success ? result : failure(fn(result.error));
|
|
62
|
+
const andThen = (result, fn) => result.success ? fn(result.data) : result;
|
|
63
|
+
const match = (result, onSuccess, onFailure) => result.success ? onSuccess(result.data) : onFailure(result.error);
|
|
64
|
+
const unwrap = (result) => {
|
|
65
|
+
if (result.success) return result.data;
|
|
66
|
+
throw result.error;
|
|
67
|
+
};
|
|
68
|
+
const unwrapOr = (result, fallback) => result.success ? result.data : fallback;
|
|
50
69
|
const tryCatch = (task) => {
|
|
51
70
|
try {
|
|
52
|
-
return
|
|
53
|
-
success: true,
|
|
54
|
-
data: task()
|
|
55
|
-
};
|
|
71
|
+
return success(task());
|
|
56
72
|
} catch (thrown) {
|
|
57
|
-
return
|
|
58
|
-
success: false,
|
|
59
|
-
error: asError(thrown)
|
|
60
|
-
};
|
|
73
|
+
return failure(asError(thrown));
|
|
61
74
|
}
|
|
62
75
|
};
|
|
63
76
|
const tryCatchAsync = async (task) => {
|
|
64
77
|
try {
|
|
65
|
-
return
|
|
66
|
-
success: true,
|
|
67
|
-
data: await task()
|
|
68
|
-
};
|
|
78
|
+
return success(await task());
|
|
69
79
|
} catch (thrown) {
|
|
70
|
-
return
|
|
71
|
-
success: false,
|
|
72
|
-
error: asError(thrown)
|
|
73
|
-
};
|
|
80
|
+
return failure(asError(thrown));
|
|
74
81
|
}
|
|
75
82
|
};
|
|
76
83
|
const fromThrowable = (fn) => (...args) => tryCatch(() => fn(...args));
|
|
77
84
|
const fromThrowableAsync = (fn) => (...args) => tryCatchAsync(() => fn(...args));
|
|
78
85
|
const Result = {
|
|
86
|
+
success,
|
|
87
|
+
failure,
|
|
88
|
+
isSuccess,
|
|
89
|
+
isFailure,
|
|
90
|
+
map,
|
|
91
|
+
mapError,
|
|
92
|
+
andThen,
|
|
93
|
+
match,
|
|
94
|
+
unwrap,
|
|
95
|
+
unwrapOr,
|
|
79
96
|
tryCatch,
|
|
80
97
|
tryCatchAsync,
|
|
81
98
|
fromThrowable,
|
|
@@ -420,4 +437,4 @@ const jobStatus = {
|
|
|
420
437
|
//#endregion
|
|
421
438
|
export { poller as a, Result as c, delay as d, createAbortError as f, poll as i, asError as l, emitter as n, clamp as o, failureOf as r, finiteOr as s, jobStatus as t, lazy as u };
|
|
422
439
|
|
|
423
|
-
//# sourceMappingURL=jobStatus-
|
|
440
|
+
//# sourceMappingURL=jobStatus-PSZJMTiA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobStatus-PSZJMTiA.js","names":[],"sources":["../src/utils/createAbortError.ts","../src/utils/async/delay.ts","../src/utils/async/lazy.ts","../src/utils/async/result.ts","../src/utils/async/poll/utils.ts","../src/utils/async/poll/backoff.ts","../src/utils/async/poll/pollLoop.ts","../src/utils/async/poll/poll.ts","../src/domain/jobStatus.ts"],"sourcesContent":["export const createAbortError = (reason?: string) => new DOMException(reason, 'AbortError');\n","import { createAbortError } from '../createAbortError';\n\nexport const delay = (timeout: number, signal?: AbortSignal) =>\n new Promise<void>((resolve, reject) => {\n if (signal?.aborted) return reject(createAbortError(signal.reason));\n\n const onAbort = () => {\n clearTimeout(timeoutId);\n reject(createAbortError(signal?.reason));\n };\n\n // `once: true` only detaches the listener once the event fires, so the timeout path has to\n // detach it explicitly — a caller reusing one signal across many delays (`poll` does) would\n // otherwise pile up a listener per delay for as long as the signal is alive.\n const timeoutId = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, timeout);\n\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n","import type { TaskFn } from './types';\n\n/**\n * Computes `task` on first call and hands that one value to every later caller —\n * the async `Lazy<T>`. While the first run is in flight every call shares it; once\n * it resolves, every call — right after, or long after — replays the same promise.\n * (Contrast `dedupe`, which shares only an *in-flight* run and lets the next\n * trigger start a fresh one, success or not.)\n *\n * A rejection is *not* kept: the slot is cleared, so the next call starts a fresh\n * run. Lazy init over the network — a stack index, JWKS, feature flags — must not\n * be bricked forever by one transient failure. Callers that joined the failed run\n * all reject with its error; only a call made after it settles retries.\n *\n * @returns a getter; each call returns the promise of the computed value.\n * @throws The returned promise rejects with whatever `task` throws or rejects\n * with — the caller handles it (try/catch, or `.catch` on `void get()`).\n */\nexport const lazy = <T>(task: TaskFn<T>): (() => Promise<Awaited<T>>) => {\n let value: Promise<Awaited<T>> | null = null;\n\n // async wrapper so a synchronous throw from `task` rejects rather than throws.\n const runTask = async (): Promise<Awaited<T>> => await task();\n\n return () => {\n value ??= runTask().catch((error: unknown) => {\n value = null;\n throw error;\n });\n return value;\n };\n};\n","export type Success<T> = { success: true; data: T };\nexport type Failure<E extends Error> = { success: false; error: E };\nexport type Result<T, E extends Error = Error> = Success<T> | Failure<E>;\n\n// A task that returns a promise is a type error: the wrapper would report success before it\n// settles, and the rejection would go unhandled. Use the `*Async` sibling.\ntype NotPromise<T> = T extends PromiseLike<unknown> ? never : T;\n\nexport const asError = (thrown: unknown) =>\n thrown instanceof Error ? thrown : new Error(String(thrown), { cause: thrown });\n\nconst success = <T>(data: T): Result<T, never> => ({ success: true, data });\nconst failure = <E extends Error>(error: E): Result<never, E> => ({ success: false, error });\nconst isSuccess = <T, E extends Error>(result: Result<T, E>): result is Success<T> =>\n result.success;\nconst isFailure = <T, E extends Error>(result: Result<T, E>): result is Failure<E> =>\n !result.success;\n\nconst map = <T, E extends Error, U>(result: Result<T, E>, fn: (data: T) => U): Result<U, E> =>\n result.success ? success(fn(result.data)) : result;\n\nconst mapError = <T, E extends Error, F extends Error>(\n result: Result<T, E>,\n fn: (error: E) => F,\n): Result<T, F> => (result.success ? result : failure(fn(result.error)));\n\nconst andThen = <T, E extends Error, U, F extends Error>(\n result: Result<T, E>,\n fn: (data: T) => Result<U, F>,\n): Result<U, E | F> => (result.success ? fn(result.data) : result);\n\nconst match = <T, E extends Error, R>(\n result: Result<T, E>,\n onSuccess: (data: T) => R,\n onFailure: (error: E) => R,\n): R => (result.success ? onSuccess(result.data) : onFailure(result.error));\n\nconst unwrap = <T, E extends Error>(result: Result<T, E>): T => {\n if (result.success) return result.data;\n throw result.error;\n};\n\nconst unwrapOr = <T, E extends Error, U>(result: Result<T, E>, fallback: U): T | U =>\n result.success ? result.data : fallback;\n\nconst tryCatch = <T>(task: () => NotPromise<T>): Result<T> => {\n try {\n return success(task());\n } catch (thrown) {\n return failure(asError(thrown));\n }\n};\n\nconst tryCatchAsync = async <T>(task: () => T | PromiseLike<T>): Promise<Result<T>> => {\n try {\n return success(await task());\n } catch (thrown) {\n return failure(asError(thrown));\n }\n};\n\nconst fromThrowable =\n <A extends unknown[], R>(fn: (...args: A) => NotPromise<R>) =>\n (...args: A): Result<R> =>\n tryCatch(() => fn(...args));\n\nconst fromThrowableAsync =\n <A extends unknown[], R>(fn: (...args: A) => R | PromiseLike<R>) =>\n (...args: A): Promise<Result<R>> =>\n tryCatchAsync(() => fn(...args));\n\nexport const Result = {\n success,\n failure,\n isSuccess,\n isFailure,\n map,\n mapError,\n andThen,\n match,\n unwrap,\n unwrapOr,\n tryCatch,\n tryCatchAsync,\n fromThrowable,\n fromThrowableAsync,\n};\n","/**\n * The longest delay a timer can hold: `setTimeout` takes a 32-bit signed number of milliseconds,\n * about 24.9 days.\n *\n * - Above it the delay wraps: Node warns and fires after 1 ms, so a long wait becomes a busy loop.\n * - It bounds a backoff curve and a poll's timeout alike, since both end up in a timer.\n */\nexport const MAX_TIMER_DELAY = 2 ** 31 - 1;\n\nexport const clamp = (value: number, min: number, max = Infinity) =>\n Math.min(Math.max(value, min), max);\n\nexport const finiteOr = (value: number, fallback: number) =>\n Number.isFinite(value) ? value : fallback;\n\n/** A signal that never aborts, so an input nobody gave costs no branch of its own. */\nexport const neverAborts = () => new AbortController().signal;\n","import { clamp, finiteOr, MAX_TIMER_DELAY } from './utils';\n\nexport type Jitter =\n | 'none' // delay\n | 'full' // [0, delay)\n | 'equal'; // [delay / 2, delay)\n\ntype Backoff =\n | { type: 'constant'; interval: number } // 3000, 3000, 3000, ...\n | { type: 'linear'; initialInterval: number; step: number } // 1000, 2000, 3000, …\n | { type: 'exponential'; initialInterval: number; factor?: number }; // 1000, 2000, 4000, 8000, …\n\ntype RandomFn = () => number;\ntype JitterFn = (delay: number) => number;\ntype BackoffFn = (attempt: number) => number;\n\nexport type BackoffDef = {\n jitter?: Jitter;\n maxInterval?: number;\n random?: RandomFn;\n} & Backoff;\n\nconst MIN_STEP = 500;\nconst MIN_FACTOR = 2;\nconst MIN_INTERVAL = 500;\n\nexport const createBackoff = ({\n jitter = 'none',\n maxInterval: _maxInterval = MAX_TIMER_DELAY,\n random = Math.random,\n ...backoff\n}: BackoffDef): BackoffFn => {\n const backoffFn: BackoffFn = (attempt) => {\n if (backoff.type === 'linear') {\n const interval = clamp(finiteOr(backoff.initialInterval, MIN_INTERVAL), MIN_INTERVAL);\n const step = clamp(finiteOr(backoff.step, MIN_STEP), MIN_STEP);\n\n return interval + step * (attempt - 1);\n }\n if (backoff.type === 'exponential') {\n const interval = clamp(finiteOr(backoff.initialInterval, MIN_INTERVAL), MIN_INTERVAL);\n const factor = clamp(finiteOr(backoff.factor ?? MIN_FACTOR, MIN_FACTOR), MIN_FACTOR);\n\n return interval * factor ** (attempt - 1);\n }\n\n return clamp(finiteOr(backoff.interval, MIN_INTERVAL), MIN_INTERVAL);\n };\n\n const jitterFn: JitterFn = (delay) => {\n if (jitter === 'none') return delay;\n if (jitter === 'full') return delay * random();\n return delay / 2 + (delay / 2) * random(); // equal\n };\n\n const maxInterval = clamp(finiteOr(_maxInterval, MAX_TIMER_DELAY), MIN_INTERVAL, MAX_TIMER_DELAY);\n return (_attempt) => {\n const attempt = clamp(finiteOr(Math.trunc(_attempt), 1), 1);\n const capped = Math.min(backoffFn(attempt), maxInterval);\n // Floored after the jitter, not before: `full` jitter multiplies by a random fraction, so a floor\n // applied to the curve alone leaves sub-millisecond gaps between attempts.\n return clamp(finiteOr(jitterFn(capped), MIN_INTERVAL), MIN_INTERVAL, maxInterval);\n };\n};\n","import { delay } from '../delay';\nimport { Result } from '../result';\n\nimport { type BackoffDef, createBackoff } from './backoff';\nimport { clamp, finiteOr, MAX_TIMER_DELAY, neverAborts } from './utils';\n\ntype Clock = {\n wait: (ms: number, signal?: AbortSignal) => Promise<void>;\n now: () => number;\n};\n\nexport type PollKey = readonly unknown[];\n\nexport type PollContext<K extends PollKey = PollKey> = {\n pollKey: K;\n attempt: number;\n elapsed: number;\n};\n\n/** The context plus the answer it is about: what `until` decides on, and what an ending reports. */\nexport type PollTick<T, K extends PollKey = PollKey> = PollContext<K> & { last: T | null };\n\nexport type PollResultState = 'done' | 'timedOut' | 'exhausted' | 'aborted' | 'errored';\n\nexport type PollResult<T, K extends PollKey = PollKey> = PollTick<T, K> &\n (\n | { state: 'done'; data: T }\n | { state: 'timedOut' | 'exhausted'; error?: Error }\n | { state: 'aborted'; reason?: unknown }\n | { state: 'errored'; error: Error }\n );\n\nexport type PollOptions<T, K extends PollKey = PollKey> = {\n pollKey?: K;\n pollFn: (context: PollContext<K> & { signal: AbortSignal }) => Promise<T>;\n until: (tick: PollTick<T, K> & { data: T }) => boolean;\n signal?: AbortSignal;\n backoff?: BackoffDef;\n isRetryable?: (error: Error) => boolean;\n maxAttempts?: number;\n timeout?: number;\n clock?: Clock;\n};\n\nconst pollResult = {\n done: <T, K extends PollKey>(data: T, context: PollTick<T, K>): PollResult<T, K> => ({\n state: 'done',\n data,\n ...context,\n last: data,\n }),\n errored: <T, K extends PollKey>(error: Error, context: PollTick<T, K>): PollResult<T, K> => ({\n state: 'errored',\n error,\n ...context,\n }),\n exhausted: <T, K extends PollKey>(context: PollTick<T, K>, error?: Error): PollResult<T, K> => ({\n state: 'exhausted',\n error,\n ...context,\n }),\n timedOut: <T, K extends PollKey>(context: PollTick<T, K>, error?: Error): PollResult<T, K> => ({\n state: 'timedOut',\n error,\n ...context,\n }),\n aborted: <T, K extends PollKey>(context: PollTick<T, K>, reason: unknown): PollResult<T, K> => ({\n state: 'aborted',\n reason,\n ...context,\n }),\n};\n\nexport const pollLoop = async <T, K extends PollKey = PollKey>({\n pollKey,\n pollFn: _pollFn,\n until: _until,\n signal: callerSignal = neverAborts(),\n backoff: backoffDef = { type: 'constant', interval: 3000 },\n clock = { wait: (ms, signal) => delay(ms, signal), now: () => performance.now() },\n isRetryable: _isRetryable = () => false,\n maxAttempts: _maxAttempts = Infinity,\n timeout: _timeout = Infinity,\n}: PollOptions<T, K>): Promise<PollResult<T, K>> => {\n // A deadline ends up in a timer, so a finite one is bounded by what a timer can hold. `Infinity`\n // is answered before the clamp: it means no deadline, and clamping would make it the longest one.\n const requested = finiteOr(_timeout, Infinity);\n const timeout = requested === Infinity ? Infinity : clamp(requested, 0, MAX_TIMER_DELAY);\n const maxAttempts = Math.trunc(clamp(finiteOr(_maxAttempts, Infinity), 0));\n\n const timeoutSignal = timeout === Infinity ? neverAborts() : AbortSignal.timeout(timeout);\n const anySignal = AbortSignal.any([callerSignal, timeoutSignal]);\n const anyAborted = Promise.withResolvers<never>();\n\n anySignal.addEventListener('abort', () => anyAborted.reject(anySignal.reason), {\n once: true,\n });\n void anyAborted.promise.catch(() => undefined);\n\n const backoffFn = createBackoff(backoffDef);\n const startedAt = clock.now();\n\n const until = Result.fromThrowable(_until);\n const isRetryable = Result.fromThrowable(_isRetryable);\n // A poll without a key has an empty one, and `K` is opaque in here — the one place the absent\n // case is materialised is the one place it has to be asserted.\n const key = pollKey ?? ([] as unknown as K);\n // Only what the context declares: a request is not handed the tick's `last` as well.\n const pollFn = ({ pollKey: key, attempt: at, elapsed }: PollContext<K>) =>\n Result.tryCatchAsync(() =>\n Promise.race([\n _pollFn({ pollKey: key, attempt: at, elapsed, signal: anySignal }),\n anyAborted.promise,\n ]),\n );\n const sleep = Result.fromThrowableAsync((ms: number) => clock.wait(ms, anySignal));\n\n let attempt = 0;\n // What a retry swallowed: the poll carries it to whichever ending runs out first.\n let last: T | null = null;\n let lastError: Error | undefined;\n const context = (at = clock.now() - startedAt): PollTick<T, K> => ({\n pollKey: key,\n attempt,\n elapsed: at,\n last,\n });\n\n if (attempt >= maxAttempts) return pollResult.exhausted<T, K>(context());\n\n while (true) {\n const before = context();\n if (timeoutSignal.aborted) return pollResult.timedOut(before, lastError);\n if (callerSignal.aborted) return pollResult.aborted(before, callerSignal.reason);\n\n attempt++;\n // The attempt it is, not the one before it — `before` was read to decide whether to make it.\n const poll = await pollFn({ ...before, attempt });\n\n // What the attempt produced, recorded before the tick that reports it: on any ending but `done`\n // these two are the only account of what the poll saw, and reading them one attempt behind is\n // reading the wrong answer.\n if (poll.success) last = poll.data;\n else lastError = poll.error;\n\n const after = context();\n if (timeoutSignal.aborted) return pollResult.timedOut(after, lastError);\n if (callerSignal.aborted) return pollResult.aborted(after, callerSignal.reason);\n\n if (!poll.success) {\n const canRetry = isRetryable(poll.error);\n\n // A predicate that throws cannot ask for a retry. The request's own failure stays the reported\n // one — it is the type a caller's guards expect — and the predicate's rides along as its cause.\n if (!canRetry.success) {\n poll.error.cause ??= canRetry.error;\n return pollResult.errored(poll.error, after);\n }\n if (!canRetry.data) return pollResult.errored(poll.error, after);\n }\n\n if (poll.success) {\n const isDone = until({ ...after, data: poll.data });\n if (!isDone.success) return pollResult.errored(isDone.error, after);\n if (isDone.data) return pollResult.done(poll.data, after);\n }\n\n // exhausted\n if (attempt >= maxAttempts) return pollResult.exhausted(after, lastError);\n\n // sleep\n const backoff = backoffFn(attempt);\n if (after.elapsed + backoff >= timeout) return pollResult.timedOut(after, lastError);\n\n const slept = await sleep(backoff);\n if (!slept.success) {\n const afterSleep = context();\n if (timeoutSignal.aborted) return pollResult.timedOut(afterSleep, lastError);\n if (callerSignal.aborted) return pollResult.aborted(afterSleep, callerSignal.reason);\n\n return pollResult.errored(slept.error, afterSleep);\n }\n }\n};\n","import { createAbortError } from '../../createAbortError';\nimport { createEmitter, createStore } from '../../store';\nimport { lazy } from '../lazy';\n\nimport {\n type PollKey,\n pollLoop,\n type PollOptions,\n type PollResult,\n type PollResultState,\n type PollTick,\n} from './pollLoop';\nimport { neverAborts } from './utils';\n\nexport type PollState = 'idle' | 'polling' | PollResultState;\nexport type PollSnapshot = PollTick<unknown> & { state: PollState };\n\ntype OnFailure<T> = (result: PollResult<T>) => Error | undefined;\n\nexport type PollerStartFn<T> = () => Promise<PollResult<T>>;\nexport type PollerStopFn = (reason?: string) => void;\ntype PollerSubscribeFn = (listener: (snapshot: PollSnapshot) => void) => () => void;\ntype PollerDebugFn = () => PollSnapshot;\ntype PollerUnwrapFn<T> = (onFailure?: OnFailure<T>) => Promise<T>;\nexport type Poller<T> = {\n readonly state: PollState;\n start: PollerStartFn<T>;\n unwrap: PollerUnwrapFn<T>;\n stop: PollerStopFn;\n subscribe: PollerSubscribeFn;\n debug: PollerDebugFn;\n};\n\nexport type PollTask<T> = Promise<PollResult<T>> &\n Pick<Poller<T>, 'unwrap' | 'stop' | 'subscribe' | 'debug'>;\n\nexport type ObservedPoller = Pick<Poller<unknown>, 'stop' | 'subscribe' | 'debug' | 'start'>;\n\nexport const emitter = createEmitter<ObservedPoller>();\n\nexport const failureOf = (result: PollResult<unknown>): Error => {\n if ('error' in result && result.error) return result.error;\n\n if (result.state === 'aborted') {\n if (result.reason instanceof Error) return result.reason;\n\n return createAbortError(\n typeof result.reason === 'string' ? result.reason : 'The poll was stopped.',\n );\n }\n\n return new Error(`The poll ${result.state} after ${result.attempt} attempts.`);\n};\n\nexport const poller = <T, K extends PollKey = PollKey>({\n pollKey,\n signal,\n until,\n ...pollLoopOptions\n}: PollOptions<T, K>): Poller<T> => {\n const callerSignal = signal ?? neverAborts();\n const pollerSignal = new AbortController();\n const anySignal = AbortSignal.any([pollerSignal.signal, callerSignal]);\n\n // snapshoting\n const snapshot = createStore<PollSnapshot>({\n pollKey: pollKey ?? [],\n state: 'idle',\n attempt: 0,\n elapsed: 0,\n last: null,\n });\n const updateSnapshot = (next: Partial<PollSnapshot>) =>\n snapshot.set({ ...snapshot.get(), ...next });\n\n const handleUntil = (context: PollTick<T, K> & { data: T }) => {\n updateSnapshot({ attempt: context.attempt, elapsed: context.elapsed, last: context.data });\n return until(context);\n };\n\n const start: PollerStartFn<T> = lazy(async () => {\n updateSnapshot({ state: 'polling' });\n const result = await pollLoop({\n ...pollLoopOptions,\n pollKey,\n until: handleUntil,\n signal: anySignal,\n });\n // The result knows what a tick cannot: attempts that failed, and the time the ending itself took.\n snapshot.set({\n pollKey: result.pollKey,\n state: result.state,\n attempt: result.attempt,\n elapsed: result.elapsed,\n last: result.last,\n });\n return result;\n });\n\n const stop: PollerStopFn = (reason) => pollerSignal.abort(reason);\n const subscribe: PollerSubscribeFn = (listener) =>\n snapshot.subscribe(() => listener(snapshot.get()));\n const debug: PollerDebugFn = snapshot.get;\n\n const unwrap: PollerUnwrapFn<T> = async (onFailure) => {\n const result = await start();\n if (result.state === 'done') return result.data;\n throw onFailure?.(result) ?? failureOf(result);\n };\n\n const controls = {\n stop,\n subscribe,\n debug,\n start,\n };\n\n emitter.emit(controls);\n\n return {\n get state() {\n return snapshot.get().state;\n },\n unwrap,\n ...controls,\n };\n};\n\nexport const poll = <T, K extends PollKey = PollKey>(options: PollOptions<T, K>): PollTask<T> => {\n const p = poller(options);\n\n return Object.assign(p.start(), {\n unwrap: p.unwrap,\n stop: p.stop,\n subscribe: p.subscribe,\n debug: p.debug,\n });\n};\n","import type { QueryJobStatus } from '../clients/queryService/types';\nimport type { QueueJobStatus } from '../clients/queue/types';\nimport type { StorageJobStatus } from '../clients/storage/jobs/types';\n\n/**\n * How one service's status vocabulary splits by what the job is doing. Declared per service, then\n * indexed into sets by `forService`.\n *\n * - The three groups are disjoint and together cover the vocabulary. `terminal` is not declared: a\n * job is terminal exactly when it has succeeded or failed.\n * - Annotating the constant is what validates its members: `QueueJobStatus` and `QueryJobStatus` are\n * generated, so a spec that renames one fails the build here instead of silently dropping it from\n * a group and leaving a poll loop to run to `maxAttempts`.\n */\ntype StatusGroups<Status extends string> = {\n running: readonly Status[];\n successful: readonly Status[];\n failed: readonly Status[];\n};\n\n/**\n * A service's statuses as named constants — `SUCCESS: 'success'`.\n *\n * Keyed off the status type, so there is an entry per status and no more, and a spec that renames a\n * status renames the key with it.\n */\ntype StatusNames<Status extends string> = { [K in Status as Uppercase<K>]: K };\n\n// `StorageJobStatus` in `connection`, whose `isDoneStatus` is the `success`/`error` pair.\nconst STORAGE: StatusGroups<StorageJobStatus> = {\n running: ['waiting', 'processing'],\n successful: ['success'],\n failed: ['error'],\n};\n\n/**\n * `PlainJobInterface` in `job-queue-internal-api-php-client`.\n *\n * - `terminating` is running, not terminal: the job is still being killed and keeps reporting until\n * `terminated`.\n * - `warning` is a success — the run produced its output and only added a non-fatal notice, which is\n * why a flow keeps going past it. The backend declares no such split (`STATUSES_FINISHED` is its\n * only grouping), so dividing it into success and failure is ours.\n */\nconst QUEUE: StatusGroups<QueueJobStatus> = {\n running: ['created', 'waiting', 'processing', 'terminating'],\n successful: ['success', 'warning'],\n failed: ['error', 'cancelled', 'terminated'],\n};\n\n// `JobState` in `go-monorepo` (`services/query/internal/repository/models`). `canceled` with one\n// `l` — queryService's spelling, unlike the other two services.\nconst QUERY: StatusGroups<QueryJobStatus> = {\n running: ['created', 'enqueued', 'processing'],\n successful: ['completed'],\n failed: ['failed', 'canceled'],\n};\n\n/**\n * One service's view of its statuses: a predicate per question, with the data a level down.\n *\n * - `isSuccessful` / `isFailed` are `false` while the job is still running, so read them together\n * with `isTerminal` where that distinction matters.\n * - `isKnown` narrows an untyped string — one read out of an MCP tool result or a URL, say. A status\n * that arrived on a typed response needs no guard. Its `Set<string>` is what takes the wider type\n * the caller has, so the guard needs no assertion of its own.\n * - `describe` answers every question about one status at once, for a caller that needs more than\n * one of them.\n * - `statuses.terminal` is `successful` plus `failed` — the group a poll loop stops on.\n * - `named` is asserted, not proven: `Object.fromEntries` types its result as an index signature,\n * and no expression convinces TypeScript that uppercasing every status produces exactly\n * `StatusNames<Status>`. The alternative is writing all three maps out by hand, which is the\n * duplication this file exists to avoid.\n */\nconst forService = <Status extends string>(groups: StatusGroups<Status>) => {\n const all = [...groups.running, ...groups.successful, ...groups.failed];\n\n const running: ReadonlySet<Status> = new Set(groups.running);\n const successful: ReadonlySet<Status> = new Set(groups.successful);\n const failed: ReadonlySet<Status> = new Set(groups.failed);\n const terminal: ReadonlySet<Status> = new Set([...groups.successful, ...groups.failed]);\n const known: ReadonlySet<string> = new Set<string>(all);\n\n return {\n isRunning: (status: Status) => running.has(status),\n isTerminal: (status: Status) => terminal.has(status),\n isSuccessful: (status: Status) => successful.has(status),\n isFailed: (status: Status) => failed.has(status),\n isKnown: (value: string): value is Status => known.has(value),\n describe: (status: Status) => ({\n isRunning: running.has(status),\n isTerminal: terminal.has(status),\n isSuccessful: successful.has(status),\n isFailed: failed.has(status),\n }),\n statuses: { running, successful, failed, terminal },\n named: Object.fromEntries(\n all.map((status) => [status.toUpperCase(), status]),\n ) as StatusNames<Status>,\n };\n};\n\n/**\n * Job statuses per service: `jobStatus.queue.isFailed(status)` is the question about one job,\n * `jobStatus.queue.statuses.failed` the statuses behind it,\n * `jobStatus.queue.named.ERROR` one of them by name.\n *\n * One entry per service, never one over the union: the vocabularies overlap by label — `processing`\n * belongs to all three, `created` to queue and query — while which statuses exist and what each\n * implies differ per service. A shared entry would take another service's status and answer by its\n * rules.\n *\n * - `storage` and `queue` describe a job; `query` describes a query job, not its statements. A\n * statement has its own state, including a terminal `notExecuted` with no job-level equivalent.\n * - Spread a group where an array is wanted — an API `status` filter, or a UI list that mixes job\n * statuses with its own.\n */\nexport const jobStatus = {\n storage: forService(STORAGE),\n queue: forService(QUEUE),\n query: forService(QUERY),\n};\n"],"mappings":"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"}
|
package/dist/kaiAgent/index.cjs
CHANGED
|
@@ -1,210 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { a as GetHistoryQuery, c as VoteRequest, i as GetChatPath, n as ChatRequest, o as GetVotesQuery, s as UsageResponse, t as ApprovalBody } from "../types-iNlsdRkx.cjs";
|
|
4
|
-
import { z } from "zod";
|
|
5
|
-
//#region src/clients/kaiAgent/kaiAgentClient.d.ts
|
|
6
|
-
declare const agentSettingsSchema: z.ZodObject<{
|
|
7
|
-
projectId: z.ZodString;
|
|
8
|
-
customInstructions: z.ZodNullable<z.ZodString>;
|
|
9
|
-
createdAt: z.ZodString;
|
|
10
|
-
updatedAt: z.ZodString;
|
|
11
|
-
}, z.core.$strip>;
|
|
12
|
-
declare const toolPermissionValueSchema: z.ZodEnum<{
|
|
13
|
-
always_allow: "always_allow";
|
|
14
|
-
always_ask: "always_ask";
|
|
15
|
-
blocked: "blocked";
|
|
16
|
-
}>;
|
|
17
|
-
declare const userAgentSettingsSchema: z.ZodObject<{
|
|
18
|
-
projectId: z.ZodString;
|
|
19
|
-
userId: z.ZodString;
|
|
20
|
-
customInstructions: z.ZodNullable<z.ZodString>;
|
|
21
|
-
toolPermissions: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
22
|
-
always_allow: "always_allow";
|
|
23
|
-
always_ask: "always_ask";
|
|
24
|
-
blocked: "blocked";
|
|
25
|
-
}>>>;
|
|
26
|
-
createdAt: z.ZodString;
|
|
27
|
-
updatedAt: z.ZodString;
|
|
28
|
-
}, z.core.$strip>;
|
|
29
|
-
declare const toolsListResponseSchema: z.ZodObject<{
|
|
30
|
-
tools: z.ZodArray<z.ZodObject<{
|
|
31
|
-
name: z.ZodString;
|
|
32
|
-
description: z.ZodString;
|
|
33
|
-
readOnly: z.ZodBoolean;
|
|
34
|
-
}, z.core.$strip>>;
|
|
35
|
-
}, z.core.$strip>;
|
|
36
|
-
declare const skillsListResponseSchema: z.ZodObject<{
|
|
37
|
-
skills: z.ZodArray<z.ZodObject<{
|
|
38
|
-
name: z.ZodString;
|
|
39
|
-
description: z.ZodNullable<z.ZodString>;
|
|
40
|
-
source: z.ZodEnum<{
|
|
41
|
-
"first-party": "first-party";
|
|
42
|
-
project: "project";
|
|
43
|
-
vendored: "vendored";
|
|
44
|
-
}>;
|
|
45
|
-
}, z.core.$strip>>;
|
|
46
|
-
commands: z.ZodArray<z.ZodObject<{
|
|
47
|
-
name: z.ZodString;
|
|
48
|
-
description: z.ZodString;
|
|
49
|
-
}, z.core.$strip>>;
|
|
50
|
-
}, z.core.$strip>;
|
|
51
|
-
declare const sandboxFileListingSchema: z.ZodObject<{
|
|
52
|
-
entries: z.ZodArray<z.ZodObject<{
|
|
53
|
-
name: z.ZodString;
|
|
54
|
-
path: z.ZodString;
|
|
55
|
-
type: z.ZodEnum<{
|
|
56
|
-
dir: "dir";
|
|
57
|
-
file: "file";
|
|
58
|
-
}>;
|
|
59
|
-
size: z.ZodOptional<z.ZodNumber>;
|
|
60
|
-
}, z.core.$strip>>;
|
|
61
|
-
}, z.core.$strip>;
|
|
62
|
-
declare const sandboxFileContentSchema: z.ZodObject<{
|
|
63
|
-
content: z.ZodString;
|
|
64
|
-
encoding: z.ZodEnum<{
|
|
65
|
-
binary: "binary";
|
|
66
|
-
"utf-8": "utf-8";
|
|
67
|
-
}>;
|
|
68
|
-
truncated: z.ZodBoolean;
|
|
69
|
-
size: z.ZodNumber;
|
|
70
|
-
}, z.core.$strip>;
|
|
71
|
-
declare const sandboxGitBranchSchema: z.ZodObject<{
|
|
72
|
-
branch: z.ZodNullable<z.ZodString>;
|
|
73
|
-
}, z.core.$strip>;
|
|
74
|
-
declare const votesResponseSchema: z.ZodArray<z.ZodObject<{
|
|
75
|
-
chatId: z.ZodString;
|
|
76
|
-
messageId: z.ZodString;
|
|
77
|
-
isUpvoted: z.ZodBoolean;
|
|
78
|
-
}, z.core.$strip>>;
|
|
79
|
-
type AgentSettings = z.infer<typeof agentSettingsSchema>;
|
|
80
|
-
type UserAgentSettings = z.infer<typeof userAgentSettingsSchema>;
|
|
81
|
-
type ToolsListResponse = z.infer<typeof toolsListResponseSchema>;
|
|
82
|
-
type SkillsListResponse = z.infer<typeof skillsListResponseSchema>;
|
|
83
|
-
type SandboxFileListing = z.infer<typeof sandboxFileListingSchema>;
|
|
84
|
-
type SandboxFileContent = z.infer<typeof sandboxFileContentSchema>;
|
|
85
|
-
type SandboxGitBranch = z.infer<typeof sandboxGitBranchSchema>;
|
|
86
|
-
type VotesResponse = z.infer<typeof votesResponseSchema>;
|
|
87
|
-
type UpdateAgentSettingsRequest = {
|
|
88
|
-
customInstructions?: string | null;
|
|
89
|
-
};
|
|
90
|
-
type UpdateUserAgentSettingsRequest = {
|
|
91
|
-
customInstructions?: string | null;
|
|
92
|
-
toolPermissions?: Record<string, z.infer<typeof toolPermissionValueSchema>> | null;
|
|
93
|
-
};
|
|
94
|
-
declare const createKaiAgentClient: ({ baseUrl, middlewares, auth }: ClientInitOptions) => {
|
|
95
|
-
healthCheck: (signal?: AbortSignal) => Promise<unknown>;
|
|
96
|
-
getHistory: (params?: GetHistoryQuery) => Promise<{
|
|
97
|
-
chats: {
|
|
98
|
-
id?: string;
|
|
99
|
-
title?: string;
|
|
100
|
-
userId?: string;
|
|
101
|
-
createdAt?: string;
|
|
102
|
-
lastMessageAt?: string;
|
|
103
|
-
visibility?: 'public' | 'private';
|
|
104
|
-
branchId?: number | null;
|
|
105
|
-
}[];
|
|
106
|
-
hasMore: boolean;
|
|
107
|
-
}>;
|
|
108
|
-
getChat: (chatId: GetChatPath['id'], signal?: AbortSignal) => Promise<{
|
|
109
|
-
id: string;
|
|
110
|
-
title: string;
|
|
111
|
-
userId: string;
|
|
112
|
-
createdAt: string;
|
|
113
|
-
lastMessageAt: string;
|
|
114
|
-
visibility: 'public' | 'private';
|
|
115
|
-
branchId?: number | null;
|
|
116
|
-
contextWindow?: {
|
|
117
|
-
usedTokens: number;
|
|
118
|
-
maxTokens: number;
|
|
119
|
-
percentage: number;
|
|
120
|
-
} | null;
|
|
121
|
-
messages: {
|
|
122
|
-
id: string;
|
|
123
|
-
role: 'user' | 'assistant';
|
|
124
|
-
parts: ({
|
|
125
|
-
type: 'text';
|
|
126
|
-
text: string;
|
|
127
|
-
state?: 'done';
|
|
128
|
-
} | {
|
|
129
|
-
type: 'tool-result';
|
|
130
|
-
toolCallId: string;
|
|
131
|
-
toolName: string;
|
|
132
|
-
result: string;
|
|
133
|
-
} | {
|
|
134
|
-
type: 'step-start';
|
|
135
|
-
} | {
|
|
136
|
-
type: 'data-compact-boundary';
|
|
137
|
-
data: {
|
|
138
|
-
trigger: 'manual' | 'auto';
|
|
139
|
-
preTokens: number;
|
|
140
|
-
preservedSegment?: {
|
|
141
|
-
headUuid: string;
|
|
142
|
-
anchorUuid: string;
|
|
143
|
-
tailUuid: string;
|
|
144
|
-
};
|
|
145
|
-
summary: string;
|
|
146
|
-
sdkSessionId: string;
|
|
147
|
-
};
|
|
148
|
-
} | {
|
|
149
|
-
type: string;
|
|
150
|
-
toolCallId: string;
|
|
151
|
-
state: 'output-available' | 'output-error' | 'output-denied' | 'input-available' | 'input-streaming' | 'approval-requested' | 'approval-responded';
|
|
152
|
-
input?: {
|
|
153
|
-
[key: string]: unknown;
|
|
154
|
-
};
|
|
155
|
-
output?: unknown;
|
|
156
|
-
errorText?: string;
|
|
157
|
-
approval?: {
|
|
158
|
-
id: string;
|
|
159
|
-
approved: boolean;
|
|
160
|
-
reason?: string;
|
|
161
|
-
};
|
|
162
|
-
})[];
|
|
163
|
-
metadata?: {
|
|
164
|
-
createdAt?: string;
|
|
165
|
-
hidden?: boolean;
|
|
166
|
-
requestContext?: {
|
|
167
|
-
path?: string;
|
|
168
|
-
sqlEditorActive?: boolean;
|
|
169
|
-
};
|
|
170
|
-
};
|
|
171
|
-
status?: 'pending' | 'completed' | 'interrupted' | 'failed';
|
|
172
|
-
}[];
|
|
173
|
-
}>;
|
|
174
|
-
deleteChat: (chatId: string) => Promise<{
|
|
175
|
-
id?: string;
|
|
176
|
-
title?: string;
|
|
177
|
-
userId?: string;
|
|
178
|
-
createdAt?: string;
|
|
179
|
-
visibility?: 'public' | 'private';
|
|
180
|
-
branchId?: number | null;
|
|
181
|
-
}>;
|
|
182
|
-
createChat: (request: ChatRequest) => Promise<Response>;
|
|
183
|
-
getVotes: (chatId: GetVotesQuery['chatId']) => Promise<VotesResponse>;
|
|
184
|
-
submitVote: (params: VoteRequest) => Promise<void>;
|
|
185
|
-
getUsage: (signal?: AbortSignal) => Promise<UsageResponse>;
|
|
186
|
-
approveToolCall: (chatId: string, body: ApprovalBody) => Promise<void>;
|
|
187
|
-
submitToolOutput: (chatId: string, body: {
|
|
188
|
-
toolUseId: string;
|
|
189
|
-
output?: string;
|
|
190
|
-
errorText?: string;
|
|
191
|
-
}) => Promise<void>;
|
|
192
|
-
stopChat: (chatId: string) => Promise<{
|
|
193
|
-
stopped: boolean;
|
|
194
|
-
}>;
|
|
195
|
-
getSuggestions: (request: SuggestionsRequestBody, signal?: AbortSignal) => Promise<SuggestionsApiResponse>;
|
|
196
|
-
getAgentSettings: (signal?: AbortSignal) => Promise<AgentSettings>;
|
|
197
|
-
updateAgentSettings: (request: UpdateAgentSettingsRequest, signal?: AbortSignal) => Promise<AgentSettings>;
|
|
198
|
-
getUserAgentSettings: (signal?: AbortSignal) => Promise<UserAgentSettings>;
|
|
199
|
-
updateUserAgentSettings: (request: UpdateUserAgentSettingsRequest, signal?: AbortSignal) => Promise<UserAgentSettings>;
|
|
200
|
-
getToolsList: (signal?: AbortSignal) => Promise<ToolsListResponse>;
|
|
201
|
-
getSkillsList: (signal?: AbortSignal) => Promise<SkillsListResponse>;
|
|
202
|
-
listSandboxFiles: (chatId: string, path?: string, signal?: AbortSignal) => Promise<SandboxFileListing>;
|
|
203
|
-
readSandboxFile: (chatId: string, path: string, signal?: AbortSignal) => Promise<SandboxFileContent>;
|
|
204
|
-
downloadSandboxFile: (chatId: string, path: string, signal?: AbortSignal) => Promise<Blob>;
|
|
205
|
-
getSandboxGitBranch: (chatId: string, signal?: AbortSignal) => Promise<SandboxGitBranch>;
|
|
206
|
-
chatStreamUrl: string;
|
|
207
|
-
};
|
|
208
|
-
//#endregion
|
|
209
|
-
export { createKaiAgentClient };
|
|
210
|
-
//# sourceMappingURL=index.d.cts.map
|
|
1
|
+
import { r as createKaiAgentClient } from "../kaiAgentClient-iCFR2tRU.cjs";
|
|
2
|
+
export { createKaiAgentClient };
|