@makaio/framework 1.0.0-dev-1779046984397
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/LICENSE +21 -0
- package/README.md +363 -0
- package/dist/account-identity-Ce1Bwrqi.mjs +1 -0
- package/dist/adapter-CbyjCE2d.mjs +1 -0
- package/dist/adapters/acp-client/index.d.mts +209 -0
- package/dist/adapters/acp-client/index.mjs +1 -0
- package/dist/adapters/config/index.d.mts +429 -0
- package/dist/adapters/config/index.mjs +1 -0
- package/dist/adapters/index.d.mts +4175 -0
- package/dist/adapters/index.mjs +11 -0
- package/dist/adapters/node.d.mts +263 -0
- package/dist/adapters/node.mjs +4 -0
- package/dist/adapters/stream-session/index.d.mts +1384 -0
- package/dist/adapters/stream-session/index.mjs +1 -0
- package/dist/adapters/stream-session/testing/index.d.mts +29 -0
- package/dist/adapters/stream-session/testing/index.mjs +1 -0
- package/dist/base-orchestrator-9z8TuA5a.d.mts +772 -0
- package/dist/bus/index.d.mts +3331 -0
- package/dist/bus/index.mjs +1 -0
- package/dist/bus-B1seC4M_.mjs +2 -0
- package/dist/capability-service-tnpR_TaB.mjs +1 -0
- package/dist/chunk-Dc06z0qk.mjs +1 -0
- package/dist/chunk-cpUYaJdV.mjs +1 -0
- package/dist/cleanEnvForAdapter-DvcIGXTG.mjs +1 -0
- package/dist/client-Dh4x4GQN.mjs +1 -0
- package/dist/clients/index.d.mts +2786 -0
- package/dist/clients/index.mjs +1 -0
- package/dist/clients-namespace-B0xAPZ6J.d.mts +332 -0
- package/dist/config-namespace-DLSs83zr.d.mts +638 -0
- package/dist/config-namespace-MJT8P0Ud.mjs +1 -0
- package/dist/contracts/adapter/index.d.mts +3 -0
- package/dist/contracts/adapter/index.mjs +1 -0
- package/dist/contracts/adapter/schemas/session-lineage.d.mts +2 -0
- package/dist/contracts/adapter/schemas/session-lineage.mjs +1 -0
- package/dist/contracts/client/index.d.mts +3 -0
- package/dist/contracts/client/index.mjs +1 -0
- package/dist/contracts/common/index.d.mts +2 -0
- package/dist/contracts/common/index.mjs +1 -0
- package/dist/contracts/config/index.d.mts +455 -0
- package/dist/contracts/config/index.mjs +1 -0
- package/dist/contracts/extension/index.d.mts +3 -0
- package/dist/contracts/extension/index.mjs +1 -0
- package/dist/contracts/harness/index.d.mts +2 -0
- package/dist/contracts/harness/index.mjs +1 -0
- package/dist/contracts/host/index.d.mts +2 -0
- package/dist/contracts/host/index.mjs +1 -0
- package/dist/contracts/index.d.mts +12665 -0
- package/dist/contracts/index.mjs +1 -0
- package/dist/contracts/model-registry/index.d.mts +2 -0
- package/dist/contracts/model-registry/index.mjs +1 -0
- package/dist/contracts/native-session-supervisor/index.d.mts +2 -0
- package/dist/contracts/native-session-supervisor/index.mjs +1 -0
- package/dist/contracts/platform/index.d.mts +2 -0
- package/dist/contracts/platform/index.mjs +1 -0
- package/dist/contracts/provider/index.d.mts +3 -0
- package/dist/contracts/provider/index.mjs +1 -0
- package/dist/contracts/session/index.d.mts +3 -0
- package/dist/contracts/session/index.mjs +1 -0
- package/dist/contracts/shared/index.d.mts +2 -0
- package/dist/contracts/shared/index.mjs +1 -0
- package/dist/contracts/skill/index.d.mts +2 -0
- package/dist/contracts/skill/index.mjs +1 -0
- package/dist/contracts/toast/index.d.mts +198 -0
- package/dist/contracts/toast/index.mjs +1 -0
- package/dist/contracts/variant/index.d.mts +2 -0
- package/dist/contracts/variant/index.mjs +1 -0
- package/dist/core/index.d.mts +1001 -0
- package/dist/core/index.mjs +1 -0
- package/dist/credential-ref-DLCsoKVZ.mjs +1 -0
- package/dist/cursor-storage-DOQdvo9j.mjs +1 -0
- package/dist/definition-DkYy1PZz.mjs +1 -0
- package/dist/definition-DtUNiGom.d.mts +158 -0
- package/dist/definition-DxvZ9e22.d.mts +376 -0
- package/dist/drizzle-CWVVw7Er.mjs +1 -0
- package/dist/execution-target-BW_uiBVe.mjs +1 -0
- package/dist/extension-COqwS-2Q.mjs +1 -0
- package/dist/extension-Cbrl4YGX.mjs +1 -0
- package/dist/extension-namespace-zaGKi6Qj.mjs +1 -0
- package/dist/handlers-iGKUJ380.mjs +41 -0
- package/dist/harness-CEq1Zkf9.mjs +1 -0
- package/dist/hooks/index.d.mts +423 -0
- package/dist/hooks/index.mjs +1 -0
- package/dist/host-CXAUGGN0.mjs +1 -0
- package/dist/identity-B_A0mE63.mjs +1 -0
- package/dist/index-6lyShOoU.d.mts +225 -0
- package/dist/index-7sXlairn2.d.mts +43 -0
- package/dist/index-BAKM2GMH2.d.mts +535 -0
- package/dist/index-BB419vv-.d.mts +3897 -0
- package/dist/index-BJOfdtbw.d.mts +729 -0
- package/dist/index-BXP9GK5q.d.mts +1075 -0
- package/dist/index-BdPwu6c0.d.mts +1730 -0
- package/dist/index-BePI0ckL.d.mts +40 -0
- package/dist/index-Bigx81Kr.d.mts +37 -0
- package/dist/index-BnNqbx2I.d.mts +134 -0
- package/dist/index-Bv15sNLn.d.mts +389 -0
- package/dist/index-C-myW_aK.d.mts +412 -0
- package/dist/index-C9F3Fc1A.d.mts +2938 -0
- package/dist/index-CNxS4Tlu.d.mts +1 -0
- package/dist/index-CVA0m1g9.d.mts +995 -0
- package/dist/index-C_kS2aqV2.d.mts +438 -0
- package/dist/index-Ch3ph52M2.d.mts +40 -0
- package/dist/index-CnZOKNjU.d.mts +89 -0
- package/dist/index-D1T-PPqF.d.mts +67 -0
- package/dist/index-D7T8XCku.d.mts +341 -0
- package/dist/index-DBQtpFLE.d.mts +4843 -0
- package/dist/index-DEw90pa2.d.mts +183 -0
- package/dist/index-DQRsGXb5.d.mts +109 -0
- package/dist/index-Dd5s4MSm.d.mts +72 -0
- package/dist/index-DubqLGH8.d.mts +1002 -0
- package/dist/index-ESSDWIB7.d.mts +11 -0
- package/dist/index-N5K1NOYs.d.mts +184 -0
- package/dist/index-PdUSmPT2.d.mts +180 -0
- package/dist/index-SzSiyG61.d.mts +117 -0
- package/dist/index-T0471kWA.d.mts +6760 -0
- package/dist/index-WKjrpcA_.d.mts +218 -0
- package/dist/index-hapw9_En.d.mts +13592 -0
- package/dist/index-iID2R9G1.d.mts +1490 -0
- package/dist/kernel/cli/index.d.mts +141 -0
- package/dist/kernel/cli/index.mjs +1 -0
- package/dist/kernel/cli/schemas.d.mts +63 -0
- package/dist/kernel/cli/schemas.mjs +1 -0
- package/dist/kernel/extension/index.d.mts +2 -0
- package/dist/kernel/extension/index.mjs +1 -0
- package/dist/kernel/index.d.mts +296 -0
- package/dist/kernel/index.mjs +1 -0
- package/dist/kernel/namespace/index.d.mts +2 -0
- package/dist/kernel/namespace/index.mjs +1 -0
- package/dist/kernel/observability/index.d.mts +2 -0
- package/dist/kernel/observability/index.mjs +1 -0
- package/dist/kernel/providers/index.d.mts +2 -0
- package/dist/kernel/providers/index.mjs +1 -0
- package/dist/kernel/window/index.d.mts +2 -0
- package/dist/kernel/window/index.mjs +1 -0
- package/dist/model-registry-BNzpR6TU.mjs +1 -0
- package/dist/model-registry-CIscwC52.mjs +1 -0
- package/dist/namespace-0yuzAKlr.mjs +1 -0
- package/dist/namespace-8cNguvIp.mjs +1 -0
- package/dist/namespace-BK2erxpV.d.mts +921 -0
- package/dist/namespace-Bmc7AW4J2.mjs +1 -0
- package/dist/namespace-C2ufjgaQ.d.mts +767 -0
- package/dist/namespace-C54Oj025.d.mts +159 -0
- package/dist/namespace-CCDEOwmW.d.mts +1313 -0
- package/dist/namespace-CfEWMXBx.mjs +1 -0
- package/dist/namespace-CkLUtc0g.d.mts +580 -0
- package/dist/namespace-D5Wrt7YU.mjs +1 -0
- package/dist/namespace-DZcuLwEA.d.mts +51 -0
- package/dist/namespace-Db-p67Rg.mjs +1 -0
- package/dist/namespace-FWx6HxaW.d.mts +611 -0
- package/dist/namespace-GLGGcWPH.d.mts +43 -0
- package/dist/namespace-N0dfwSg6.mjs +1 -0
- package/dist/namespace-O5SNY-LV.d.mts +2226 -0
- package/dist/namespace-ZbthBQVt.d.mts +142 -0
- package/dist/namespace-bq4Prtzn.d.mts +2046 -0
- package/dist/namespace-pNcSglBS.mjs +1 -0
- package/dist/namespace-ptv-pw_g.d.mts +3019 -0
- package/dist/namespace-xkvVw3hf2.d.mts +189 -0
- package/dist/native-session-supervisor-L-UIaEfd.mjs +1 -0
- package/dist/node/bus-server/index.d.mts +178 -0
- package/dist/node/bus-server/index.mjs +1 -0
- package/dist/node/bus-server/server-lifecycle.d.mts +2 -0
- package/dist/node/bus-server/server-lifecycle.mjs +1 -0
- package/dist/node/machine-identity/index.d.mts +85 -0
- package/dist/node/machine-identity/index.mjs +3 -0
- package/dist/node/transports/index.d.mts +1752 -0
- package/dist/node/transports/index.mjs +2 -0
- package/dist/orchestrator-shared-DrjtTXYh.d.mts +249 -0
- package/dist/orchestrator-shared-Wv1GI2mW.mjs +1 -0
- package/dist/platform-BbSLVg5b.mjs +1 -0
- package/dist/profile-4StaDQW0.mjs +1 -0
- package/dist/provider-context-CNRQ4d5m.mjs +1 -0
- package/dist/providers/index.d.mts +135 -0
- package/dist/providers/index.mjs +1 -0
- package/dist/providers-Cr4Za8a1.mjs +1 -0
- package/dist/providers-namespace-CDwxY_DV.d.mts +583 -0
- package/dist/schema-BwzXEtT2.d.mts +837 -0
- package/dist/schema-CAw_BqaG.mjs +1 -0
- package/dist/schema-introspection-D61TT_7b.mjs +1 -0
- package/dist/schema-uSGW-6oM.mjs +1 -0
- package/dist/schemas-BXstpWVp.mjs +1 -0
- package/dist/schemas-BdMU-gew.d.mts +160 -0
- package/dist/schemas-C40ZAJ33.mjs +1 -0
- package/dist/schemas-C5xtVqdb.d.mts +46 -0
- package/dist/schemas-CGZy_rU6.d.mts +13 -0
- package/dist/schemas-CLxtoKFy.mjs +1 -0
- package/dist/schemas-Co_sVhzz.mjs +1 -0
- package/dist/schemas-D9108Iv1.d.mts +182 -0
- package/dist/schemas-DENVYyds.d.mts +463 -0
- package/dist/schemas-DbWs_hj8.d.mts +174 -0
- package/dist/schemas-Di0XnnMX.d.mts +73 -0
- package/dist/schemas-KMA1efQg.d.mts +944 -0
- package/dist/schemas-qmn5SWPU.d.mts +312 -0
- package/dist/schemas-sshQEF3l.d.mts +237 -0
- package/dist/server-lifecycle-Cf_SZ27k.d.mts +160 -0
- package/dist/server-lifecycle-DbFwlrTW.mjs +1 -0
- package/dist/service-base/index.d.mts +98 -0
- package/dist/service-base/index.mjs +1 -0
- package/dist/services/adapter-runtime/index.d.mts +4 -0
- package/dist/services/adapter-runtime/index.mjs +1 -0
- package/dist/services/adapter-runtime/namespace.d.mts +2 -0
- package/dist/services/adapter-runtime/namespace.mjs +1 -0
- package/dist/services/adapter-runtime/schemas.d.mts +2 -0
- package/dist/services/adapter-runtime/schemas.mjs +1 -0
- package/dist/services/adapter-subsystem/index.d.mts +3 -0
- package/dist/services/adapter-subsystem/index.mjs +1 -0
- package/dist/services/adapter-subsystem/namespace.d.mts +2 -0
- package/dist/services/adapter-subsystem/namespace.mjs +1 -0
- package/dist/services/agent-runtime/index.d.mts +3 -0
- package/dist/services/agent-runtime/index.mjs +1 -0
- package/dist/services/agent-runtime/namespace.d.mts +2 -0
- package/dist/services/agent-runtime/namespace.mjs +1 -0
- package/dist/services/agent-runtime/schemas.d.mts +2 -0
- package/dist/services/agent-runtime/schemas.mjs +1 -0
- package/dist/services/capability/index.d.mts +2 -0
- package/dist/services/capability/index.mjs +1 -0
- package/dist/services/cli-detection/namespace.d.mts +56 -0
- package/dist/services/cli-detection/namespace.mjs +1 -0
- package/dist/services/codebase/index.d.mts +3 -0
- package/dist/services/codebase/index.mjs +1 -0
- package/dist/services/codebase/namespace.d.mts +2 -0
- package/dist/services/codebase/namespace.mjs +1 -0
- package/dist/services/codebase/schemas.d.mts +2 -0
- package/dist/services/codebase/schemas.mjs +1 -0
- package/dist/services/compression/index.d.mts +3 -0
- package/dist/services/compression/index.mjs +1 -0
- package/dist/services/compression/namespace.d.mts +2 -0
- package/dist/services/compression/namespace.mjs +1 -0
- package/dist/services/compression/schemas.d.mts +2 -0
- package/dist/services/compression/schemas.mjs +1 -0
- package/dist/services/context-rules/index.d.mts +412 -0
- package/dist/services/context-rules/index.mjs +1 -0
- package/dist/services/credential-change/index.d.mts +17 -0
- package/dist/services/credential-change/index.mjs +1 -0
- package/dist/services/definition/index.d.mts +2 -0
- package/dist/services/definition/index.mjs +1 -0
- package/dist/services/definition/namespace.d.mts +71 -0
- package/dist/services/definition/namespace.mjs +1 -0
- package/dist/services/definition/schemas.d.mts +38 -0
- package/dist/services/definition/schemas.mjs +1 -0
- package/dist/services/dialog/namespace.d.mts +105 -0
- package/dist/services/dialog/namespace.mjs +1 -0
- package/dist/services/dialog/schemas.d.mts +109 -0
- package/dist/services/dialog/schemas.mjs +1 -0
- package/dist/services/execution-target/index.d.mts +4 -0
- package/dist/services/execution-target/index.mjs +1 -0
- package/dist/services/execution-target/namespace.d.mts +2 -0
- package/dist/services/execution-target/namespace.mjs +1 -0
- package/dist/services/execution-target/schemas.d.mts +2 -0
- package/dist/services/execution-target/schemas.mjs +1 -0
- package/dist/services/filesystem/namespace.d.mts +432 -0
- package/dist/services/filesystem/namespace.mjs +1 -0
- package/dist/services/filesystem/schemas.d.mts +240 -0
- package/dist/services/filesystem/schemas.mjs +1 -0
- package/dist/services/harness/index.d.mts +861 -0
- package/dist/services/harness/index.mjs +1 -0
- package/dist/services/harness/storage/schema.d.mts +424 -0
- package/dist/services/harness/storage/schema.mjs +1 -0
- package/dist/services/index.d.mts +5703 -0
- package/dist/services/index.mjs +1 -0
- package/dist/services/local-notification/index.d.mts +25 -0
- package/dist/services/local-notification/index.mjs +1 -0
- package/dist/services/local-notification/namespace.d.mts +73 -0
- package/dist/services/local-notification/namespace.mjs +1 -0
- package/dist/services/local-notification/schemas.d.mts +88 -0
- package/dist/services/local-notification/schemas.mjs +1 -0
- package/dist/services/log-import/browser.d.mts +3 -0
- package/dist/services/log-import/browser.mjs +1 -0
- package/dist/services/log-import/index.d.mts +275 -0
- package/dist/services/log-import/index.mjs +2 -0
- package/dist/services/log-import/log-import.d.mts +3 -0
- package/dist/services/log-import/log-import.mjs +1 -0
- package/dist/services/log-import/namespace.d.mts +327 -0
- package/dist/services/log-import/namespace.mjs +1 -0
- package/dist/services/log-import/schemas.d.mts +217 -0
- package/dist/services/log-import/schemas.mjs +1 -0
- package/dist/services/model-registry/index.d.mts +2 -0
- package/dist/services/model-registry/index.mjs +1 -0
- package/dist/services/preferences/index.d.mts +3 -0
- package/dist/services/preferences/index.mjs +1 -0
- package/dist/services/preferences/schemas.d.mts +2 -0
- package/dist/services/preferences/schemas.mjs +1 -0
- package/dist/services/preferences/storage-namespace.d.mts +3 -0
- package/dist/services/preferences/storage-namespace.mjs +1 -0
- package/dist/services/provider-context/index.d.mts +2 -0
- package/dist/services/provider-context/index.mjs +1 -0
- package/dist/services/provider-runtime/index.d.mts +136 -0
- package/dist/services/provider-runtime/index.mjs +1 -0
- package/dist/services/session/handlers/index.d.mts +2 -0
- package/dist/services/session/handlers/index.mjs +1 -0
- package/dist/services/session/index.d.mts +10 -0
- package/dist/services/session/index.mjs +1 -0
- package/dist/services/session/messages/namespace.d.mts +2 -0
- package/dist/services/session/messages/namespace.mjs +1 -0
- package/dist/services/session/orchestrator-testing/index.d.mts +2 -0
- package/dist/services/session/orchestrator-testing/index.mjs +1 -0
- package/dist/services/session/session-events/namespace.d.mts +2 -0
- package/dist/services/session/session-events/namespace.mjs +1 -0
- package/dist/services/session/storage/namespace.d.mts +2 -0
- package/dist/services/session/storage/namespace.mjs +1 -0
- package/dist/services/session/storage/schema.d.mts +2 -0
- package/dist/services/session/storage/schema.mjs +1 -0
- package/dist/services/session/testing/index.d.mts +35 -0
- package/dist/services/session/testing/index.mjs +52 -0
- package/dist/services/session/testing/orchestrator-shared.d.mts +2 -0
- package/dist/services/session/testing/orchestrator-shared.mjs +1 -0
- package/dist/services/session/turns/namespace.d.mts +2 -0
- package/dist/services/session/turns/namespace.mjs +1 -0
- package/dist/services/session-editor/index.d.mts +119 -0
- package/dist/services/session-editor/index.mjs +1 -0
- package/dist/services/settings/index.d.mts +47 -0
- package/dist/services/settings/index.mjs +1 -0
- package/dist/services/settings/namespace.d.mts +662 -0
- package/dist/services/settings/namespace.mjs +1 -0
- package/dist/services/settings/storage/clients-namespace.d.mts +2 -0
- package/dist/services/settings/storage/clients-namespace.mjs +1 -0
- package/dist/services/settings/storage/extension-configs/namespace.d.mts +184 -0
- package/dist/services/settings/storage/extension-configs/namespace.mjs +1 -0
- package/dist/services/settings/storage/index.d.mts +4 -0
- package/dist/services/settings/storage/index.mjs +1 -0
- package/dist/services/settings/storage/providers-namespace.d.mts +2 -0
- package/dist/services/settings/storage/providers-namespace.mjs +1 -0
- package/dist/services/tool-approval/index.d.mts +2 -0
- package/dist/services/tool-approval/index.mjs +1 -0
- package/dist/services/tools/index.d.mts +2 -0
- package/dist/services/tools/index.mjs +1 -0
- package/dist/services/tray-menu/index.d.mts +4 -0
- package/dist/services/tray-menu/index.mjs +1 -0
- package/dist/services/tray-menu/namespace.d.mts +2 -0
- package/dist/services/tray-menu/namespace.mjs +1 -0
- package/dist/services/tray-menu/schemas.d.mts +2 -0
- package/dist/services/tray-menu/schemas.mjs +1 -0
- package/dist/services/turn/index.d.mts +2 -0
- package/dist/services/turn/index.mjs +1 -0
- package/dist/services/turn/namespace.d.mts +2 -0
- package/dist/services/turn/namespace.mjs +1 -0
- package/dist/services/turn/schemas.d.mts +335 -0
- package/dist/services/turn/schemas.mjs +1 -0
- package/dist/services/worker/index.d.mts +3 -0
- package/dist/services/worker/index.mjs +1 -0
- package/dist/services/worker/namespace.d.mts +2 -0
- package/dist/services/worker/namespace.mjs +1 -0
- package/dist/services/worker/schemas.d.mts +2 -0
- package/dist/services/worker/schemas.mjs +1 -0
- package/dist/session-Do6lDZM4.mjs +123 -0
- package/dist/session-lineage-Eev4uo4I.d.mts +65 -0
- package/dist/session-piI1R5rP.mjs +1 -0
- package/dist/shared-DxHLl9UP.mjs +1 -0
- package/dist/shared-schemas-BgQv_tnu.mjs +1 -0
- package/dist/skill-CB5h-ZFQ.mjs +1 -0
- package/dist/storage/drizzle/client.d.mts +78 -0
- package/dist/storage/drizzle/client.mjs +1 -0
- package/dist/storage/drizzle/index.d.mts +98 -0
- package/dist/storage/drizzle/index.mjs +1 -0
- package/dist/storage/handlers/drizzle/index.d.mts +2 -0
- package/dist/storage/handlers/drizzle/index.mjs +1 -0
- package/dist/storage/handlers/index.d.mts +33 -0
- package/dist/storage/handlers/index.mjs +1 -0
- package/dist/storage/index.d.mts +192 -0
- package/dist/storage/index.mjs +1 -0
- package/dist/storage-namespace-ADwyijoe.mjs +1 -0
- package/dist/storage-namespace-DAm8iWEj.d.mts +221 -0
- package/dist/storage-namespace-definition-CHu2k14q.mjs +1 -0
- package/dist/storage-namespace-definition-CJgqyXH1.d.mts +17 -0
- package/dist/style.css +3782 -0
- package/dist/testing/drizzle-harness.d.mts +130 -0
- package/dist/testing/drizzle-harness.mjs +1 -0
- package/dist/testing/index.d.mts +106 -0
- package/dist/testing/index.mjs +1 -0
- package/dist/tool-approval-service-BcBSUZCO.mjs +1 -0
- package/dist/tools/index.d.mts +825 -0
- package/dist/tools/index.mjs +1 -0
- package/dist/tools/testing/index.d.mts +53 -0
- package/dist/tools/testing/index.mjs +1 -0
- package/dist/tools-CDSgj0ee.mjs +1 -0
- package/dist/tray-menu-service-CTXC1Elg.mjs +1 -0
- package/dist/types-6WxLfoM3.d.mts +31 -0
- package/dist/types-BjToUrHp.d.mts +6619 -0
- package/dist/types-CD1LJwPc.d.mts +1009 -0
- package/dist/types-Cvrj2ogm.d.mts +305 -0
- package/dist/types-DYF5LxZY.d.mts +233 -0
- package/dist/types-t295YC6T.d.mts +262 -0
- package/dist/types-vNpkAe4Y.d.mts +128 -0
- package/dist/ui-components/index.d.mts +2342 -0
- package/dist/ui-components/index.mjs +8 -0
- package/dist/ui-config-CXmbsqZV.mjs +1 -0
- package/dist/ui-hooks/index.d.mts +1805 -0
- package/dist/ui-hooks/index.mjs +1 -0
- package/dist/ui-kernel/index.d.mts +2793 -0
- package/dist/ui-kernel/index.mjs +1 -0
- package/dist/ui-kernel/pages/namespace.d.mts +88 -0
- package/dist/ui-kernel/pages/namespace.mjs +1 -0
- package/dist/ui-kernel/pages/schemas.d.mts +2 -0
- package/dist/ui-kernel/pages/schemas.mjs +1 -0
- package/dist/ui-views/index.d.mts +487 -0
- package/dist/ui-views/index.mjs +30 -0
- package/dist/utils/health-probe.d.mts +26 -0
- package/dist/utils/health-probe.mjs +1 -0
- package/dist/utils/index.d.mts +227 -0
- package/dist/utils/index.mjs +2 -0
- package/dist/utils/keychain.d.mts +31 -0
- package/dist/utils/keychain.mjs +1 -0
- package/dist/utils/resolve-package-root.d.mts +12 -0
- package/dist/utils/resolve-package-root.mjs +1 -0
- package/dist/utils/workspace-root.d.mts +27 -0
- package/dist/utils/workspace-root.mjs +2 -0
- package/dist/variant-D5kSrL3m.mjs +1 -0
- package/dist/version-CjS20oXi.mjs +1 -0
- package/dist/visibility-CZu8ooOA.mjs +1 -0
- package/dist/window-registry-CUftmDr3.mjs +1 -0
- package/dist/window-registry-C_IJmY8_.d.mts +130 -0
- package/package.json +346 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z as e}from"zod";import{createBusNamespace as t}from"@makaio/framework/core";import{BrowserEntrypointSchema as n,ClientDefinitionSchema as r,ProviderDefinitionSchema as i}from"@makaio/framework/contracts";import{ExtensionWarningEntrySchema as a}from"@makaio/framework/contracts/extension";const o=e.enum([`discovered`,`initializing`,`active`,`failed`,`skipped`,`stopped`]),s=e.object({name:e.string(),displayName:e.string()}),c=s.extend({state:o,error:e.string().optional()}),l=c.extend({critical:e.boolean()}),u=c.extend({surface:e.enum([`interactive`,`headless`,`any`]).optional(),enabled:e.boolean(),browser:n.optional()}),d=e.object({packageName:e.string()}),f=d.extend({definition:i}),p=d.extend({definition:r}),m=t(`kernel:extension`,{stateChanged:e.object({name:e.string(),displayName:e.string(),from:o,to:o,error:e.string().optional(),contributes:e.object({adapters:e.boolean(),tools:e.boolean(),triggers:e.boolean(),providers:e.boolean(),clients:e.boolean(),ui:e.boolean(),storage:e.boolean(),sessionEventActions:e.boolean()}).optional()}),list:{request:e.object({}),response:e.object({extensions:e.array(u)})},get:{request:e.object({name:e.string()}),response:e.object({extension:u.nullable()})},setEnabled:{request:e.object({name:e.string(),enabled:e.boolean()}),response:e.object({success:e.boolean()})},"contributions.catalog":{request:e.object({}),response:e.object({providers:e.array(f),clients:e.array(p)})},enabledChanged:e.object({name:e.string(),enabled:e.boolean()}),"warnings.list":{request:e.object({extensionName:e.string().optional()}),response:e.object({entries:e.array(a)})},"warnings.changed":a}),h=m.subjects;export{o as a,l as c,c as i,h as n,u as o,s as r,a as s,m as t};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import{agents as e}from"./services/session/storage/schema.mjs";import{t}from"./schema-uSGW-6oM.mjs";import{n}from"./namespace-8cNguvIp.mjs";import{SessionStorageSubjects as r}from"./services/session/storage/namespace.mjs";import{TurnStorageSubjects as i}from"./services/turn/namespace.mjs";import"./services/session/turns/namespace.mjs";import{AdapterRuntimeSubjects as a}from"./services/adapter-runtime/namespace.mjs";import{MessageStorageSubjects as o}from"./services/session/messages/namespace.mjs";import{n as s}from"./namespace-Db-p67Rg.mjs";import{ProviderStorageSubjects as c}from"./services/settings/storage/providers-namespace.mjs";import{ExecutionTargetSubjects as l}from"./services/execution-target/namespace.mjs";import{r as u,t as d}from"./provider-context-CNRQ4d5m.mjs";import{ExtractedContextSchema as f}from"./services/compression/schemas.mjs";import{PreferencesSubjects as p}from"./services/preferences/storage-namespace.mjs";import{z as m}from"zod";import{AdapterSubjects as h,AgentResolutionSubjects as g,AgentStatusSchema as _,AgentSubjects as v,MakaioSessionAgentSchema as y,SessionSubjects as b,TurnUsageSchema as x}from"@makaio/framework/contracts";import{createStorageNamespaceDefinition as S}from"@makaio/framework/storage";import{and as C,asc as w,desc as ee,eq as T,sql as te}from"drizzle-orm";import{HookAbortError as E}from"@makaio/framework/hooks";import{AdapterRuntimeSubjects as ne}from"@makaio/framework/services/adapter-runtime";import{buildProviderContext as re}from"@makaio/framework/services/provider-context";const D=S(`agent`,{schemas:{get:{request:m.object({agentId:m.string()}),response:m.object({agent:y.nullable()})},set:{request:m.object({agentId:m.string(),agent:y}),response:m.object({success:m.boolean()})},delete:{request:m.object({agentId:m.string()}),response:m.object({success:m.boolean()})},listByAdapter:{request:m.object({adapterName:m.string(),status:m.enum([`idle`,`active`,`dead`,`disposed`,`all`]).optional()}),response:m.object({agents:m.array(y)})},listBySession:{request:m.object({sessionId:m.string()}),response:m.object({agents:m.array(y)})},updateStatus:{request:m.object({agentId:m.string(),status:_}),response:m.object({success:m.boolean()})},updateActivity:{request:m.object({agentId:m.string(),lastActivityAt:m.number()}),response:m.object({success:m.boolean()})},updateRuntime:{request:m.object({agentId:m.string(),cwd:m.string().optional(),model:m.string().optional(),providerConfigId:m.string().optional()}).refine(e=>e.cwd!==void 0||e.model!==void 0||e.providerConfigId!==void 0,{message:`At least one runtime field (cwd, model, or providerConfigId) must be provided`}),response:m.object({success:m.boolean()})}},extensions:{drizzle:{agents:e}}}),O=D.subjects;function ie(e){if(e)try{let t=JSON.parse(e),n=x.safeParse(t);return n.success?n.data:void 0}catch{return}}function k(e){return{turnId:e.turnId,sessionId:e.sessionId,turnNumber:e.turnNumber,startedAt:e.startedAt,completedAt:e.completedAt??void 0,status:e.status,error:e.error??void 0,usage:ie(e.usage)}}function ae(e,t,n){let r=[oe(e,t),se(e,t),ce(e,t),A(e,t),j(e,t),M(e,t),le(e,t)];return()=>r.forEach(e=>e())}function oe(e,n){return e.on(i.create,async e=>{let{sessionId:r,turnId:i}=e.payload,a=Date.now(),o=i??crypto.randomUUID();await n.run(te`
|
|
2
|
+
WITH next_num AS (
|
|
3
|
+
SELECT COALESCE(MAX(turn_number), 0) + 1 AS n
|
|
4
|
+
FROM turns
|
|
5
|
+
WHERE session_id = ${r}
|
|
6
|
+
)
|
|
7
|
+
INSERT INTO turns (turn_id, session_id, turn_number, started_at, status)
|
|
8
|
+
SELECT ${o}, ${r}, n, ${a}, ${`active`}
|
|
9
|
+
FROM next_num
|
|
10
|
+
`);let[s]=await n.select({turnNumber:t.turnNumber}).from(t).where(T(t.turnId,o)),c={turnId:o,sessionId:r,turnNumber:s.turnNumber,startedAt:a,status:`active`};e.setResult({turn:c})})}function se(e,n){return e.on(i.complete,async e=>{let{turnId:r,status:i,expectedStatus:a,error:o,usage:s}=e.payload,c={completedAt:Date.now(),status:i,error:o??null};s!==void 0&&(c.usage=JSON.stringify(s));let l=a?C(T(t.turnId,r),T(t.status,a)):T(t.turnId,r),u=await n.update(t).set(c).where(l).returning();if(u.length>0){e.setResult({turn:k(u[0]),transitioned:!0});return}let[d]=await n.select().from(t).where(T(t.turnId,r)).limit(1);if(!d)throw Error(`Turn not found: ${r}`);e.setResult({turn:k(d),transitioned:!1})})}function ce(e,n){return e.on(i.set,async e=>{let{turn:r}=e.payload,i={turnId:r.turnId,sessionId:r.sessionId,turnNumber:r.turnNumber,startedAt:r.startedAt,completedAt:r.completedAt??null,status:r.status,error:r.error??null,usage:r.usage?JSON.stringify(r.usage):null};await n.insert(t).values(i).onConflictDoUpdate({target:t.turnId,set:i}),e.setResult({turn:r})})}function A(e,n){return e.on(i.get,async e=>{let{turnId:r}=e.payload,[i]=await n.select().from(t).where(T(t.turnId,r)).limit(1);e.setResult({turn:i?k(i):null})})}function j(e,n){return e.on(i.getBySession,async e=>{let{sessionId:r,limit:i,status:a}=e.payload,o=n.select().from(t).where(T(t.sessionId,r)).orderBy(w(t.turnNumber));a&&(o=n.select().from(t).where(C(T(t.sessionId,r),T(t.status,a))).orderBy(w(t.turnNumber))),i&&(o=o.limit(i));let s=await o;e.setResult({turns:s.map(k)})})}function M(e,n){return e.on(i.getActive,async e=>{let{sessionId:r}=e.payload,[i]=await n.select().from(t).where(C(T(t.sessionId,r),T(t.status,`active`))).orderBy(ee(t.turnNumber)).limit(1);e.setResult({turn:i?k(i):null})})}function le(e,n){return e.on(i.listActive,async e=>{let r=await n.select().from(t).where(T(t.status,`active`)).orderBy(w(t.startedAt));e.setResult({turns:r.map(k)})})}function ue(e){let t=new Map,n=new Map,r=new Map,i=de(t,n,r),a=[fe(e,i,r),pe(e,t,i),me(e,i),he(e,t),ge(e,t,n),_e(e,t,n),ve(e,t)];return()=>a.forEach(e=>e())}function de(e,t,n){return r=>{e.set(r.turnId,r);let i=t.get(r.sessionId)??[];i.includes(r.turnId)||i.push(r.turnId),t.set(r.sessionId,i);let a=n.get(r.sessionId)??0;r.turnNumber>a&&n.set(r.sessionId,r.turnNumber)}}function fe(e,t,n){return e.on(i.create,e=>{let{sessionId:r,turnId:i}=e.payload,a=Date.now(),o={turnId:i??crypto.randomUUID(),sessionId:r,turnNumber:(n.get(r)??0)+1,startedAt:a,status:`active`};t(o),e.setResult({turn:o})})}function pe(e,t,n){return e.on(i.complete,e=>{let{turnId:r,status:i,expectedStatus:a,error:o,usage:s}=e.payload,c=t.get(r);if(!c)throw Error(`Turn not found: ${r}`);if(a&&c.status!==a){e.setResult({turn:c,transitioned:!1});return}let l={...c,completedAt:Date.now(),status:i,error:o??void 0,usage:s??c.usage};n(l),e.setResult({turn:l,transitioned:!0})})}function me(e,t){return e.on(i.set,e=>{let{turn:n}=e.payload;t(n),e.setResult({turn:n})})}function he(e,t){return e.on(i.get,e=>{e.setResult({turn:t.get(e.payload.turnId)??null})})}function ge(e,t,n){return e.on(i.getBySession,e=>{let{sessionId:r,status:i,limit:a}=e.payload,o=(n.get(r)??[]).map(e=>t.get(e)).filter(e=>!!e);i&&(o=o.filter(e=>e.status===i)),o.sort((e,t)=>e.turnNumber-t.turnNumber),a&&(o=o.slice(0,a)),e.setResult({turns:o})})}function _e(e,t,n){return e.on(i.getActive,e=>{let{sessionId:r}=e.payload,i=(n.get(r)??[]).map(e=>t.get(e)).filter(e=>!!e).filter(e=>e.status===`active`).sort((e,t)=>t.turnNumber-e.turnNumber).at(0);e.setResult({turn:i??null})})}function ve(e,t){return e.on(i.listActive,e=>{let n=[...t.values()].filter(e=>e.status===`active`).sort((e,t)=>e.startedAt-t.startedAt);e.setResult({turns:n})})}function N(e){return{source:e.source,...e.sourceId!==void 0&&{sourceId:e.sourceId}}}var P=class{turnId;sessionId;turnNumber;startedAt;_initiator;_agentIds;_messageIds=[];_completedAgents=new Set;_erroredAgents=new Map;constructor(e){if(!Number.isInteger(e.turnNumber)||e.turnNumber<1)throw Error(`turnNumber must be a positive integer`);this.turnId=e.turnId??crypto.randomUUID(),this.sessionId=e.sessionId,this.turnNumber=e.turnNumber,this.startedAt=e.startedAt??Date.now(),this._initiator=Object.freeze(N(e.initiator??{source:`user`})),this._agentIds=Object.freeze([...e.agentIds])}get agentIds(){return this._agentIds}get initiator(){return N(this._initiator)}get messageIds(){return this._messageIds}get completedAgents(){return this._completedAgents}get erroredAgents(){return this._erroredAgents}addMessage(e){this._messageIds.push(e)}markAgentCompleted(e){return this._completedAgents.add(e),this.checkCompletion()}markAgentErrored(e,t){return this._erroredAgents.set(e,t),this.checkCompletion()}hasAgent(e){return this._agentIds.includes(e)}isComplete(){return this._completedAgents.size+this._erroredAgents.size>=this._agentIds.length}getResult(){return{success:this._erroredAgents.size===0,errors:Array.from(this._erroredAgents.values())}}getContext(){if(this._messageIds.length===0)throw Error(`Turn ${this.turnId} has no messages yet`);return{turnId:this.turnId,messageId:this._messageIds[this._messageIds.length-1]}}getContextForMessage(e){return{turnId:this.turnId,messageId:e}}checkCompletion(){return this.isComplete()?{turnComplete:!0,result:this.getResult()}:{turnComplete:!1}}};function F(e){return typeof e==`string`?e:(Array.isArray(e.blocks)?e.blocks:[e.blocks]).filter(e=>e.type===`text`).map(e=>e.content).join(`
|
|
11
|
+
`)}function ye(e){return e}function be(e){return typeof e==`string`?[{type:`text`,content:e}]:(Array.isArray(e.blocks)?e.blocks:[e.blocks]).map(ye)}async function xe(e,t,n,r){let{session:i}=await e.request(b.get,{sessionId:t});if(i){if(i.status!==`active`)throw Error(`[getOrCreateSession] Session is not active: ${t}`);return{sessionId:t,session:i}}await e.request(b.create,{sessionId:t,originWindowId:r});let{session:a}=await e.request(b.get,{sessionId:t});if(!a)throw Error(`[getOrCreateSession] Failed to create session: ${t}`);return{sessionId:t,session:a}}function Se(e,t){if(t===void 0){let t=e.agents.find(t=>t.agentId===e.leadAgentId);if(!t)throw Error(`[resolveTargetAgents] Lead agent not found: ${e.leadAgentId}`);return[t]}if(t===`all`)return e.agents;let n=new Set(t);return e.agents.filter(e=>n.has(e.agentId))}function Ce(e,t){for(let n of e.values())if(n.hasAgent(t))return n}function we(e,t){if(e===`extension`){let e=t?.trim();if(!e)throw Error(`extensionId is required when source is "extension"`);return{source:`extension`,sourceId:e}}return e?{source:e}:{source:`user`}}async function I(e,t,n){let{adapterId:r}=await e.request(a.resolveId,{adapterName:t,...n!==void 0&&{machineId:n}});return r}async function Te(e,t,n){if(!(!t||!n))try{let{config:r}=await e.request(s.getProviderConfig,{id:t});if(!r)return;let{provider:i}=await e.request(c.get,{id:r.definitionId}),a=i?.availableModels?.find(e=>e.name===n);return a?{supportedReasoningLevels:a.supportedReasoningLevels}:void 0}catch{return}}async function Ee(e,t){let{executionTarget:n}=await e.request(l.resolve,t);return n}async function L(e,t){let{sessionId:r,limit:i}=t,a=[],s=!1,c=!1,l;do{let{events:t,nextCursor:u}=await e.request(n.getEvents,{sessionId:r,options:{limit:1e4,...l&&{after:l}}});for(let n of t){if(n.type===`squash`){s=!0,a.length=0;let e=n.payload,t={messageId:`squash-${n.eventId}`,sessionId:r,turnId:null,role:`assistant`,contentText:e.summaryJson,blocks:[{type:`text`,content:e.summaryJson}],timestamp:n.timestamp};a.push(t)}else if(n.type===`message`){let t=n.payload,{message:r}=await e.request(o.get,{messageId:t.messageId});r&&a.push(r)}if(i&&a.length>=i){c=!0;break}}if(i&&a.length>=i)break;l=u??void 0}while(l);return{messages:a,hasSquashBoundary:s,sessionChain:[r],truncated:c,incomplete:!1}}const R=new class{actions=new Map;register(e){if(this.actions.has(e.id))throw Error(`Action already registered: ${e.id}`);this.actions.set(e.id,e)}get(e){return this.actions.get(e)}getAll(){return Array.from(this.actions.values())}getByCategory(e){return this.getAll().filter(t=>t.category===e)}reset(){this.actions.clear()}};async function z(e,t,n){let r=e,i,a;for(let e of t){let t=R.get(e.actionId);if(!t)throw Error(`Unknown action: ${e.actionId}`);let o={...n,...e.options},s=await t.execute(r,o);if(s.kind===`messages`)r=s.messages;else{i=s.json,a=s.tokenEstimate,r=[];break}}if(!i&&r.length>0){let e=r.reduce((e,t)=>e+JSON.stringify(t.blocks).length,0);a=Math.ceil(e/4)}return{messages:r,contextJson:i,tokenEstimate:a}}function B(e){return e.map(e=>({...e,blocks:e.blocks.filter(e=>e.type!==`reasoning`)}))}const De={id:`strip-reasoning`,label:`Strip Reasoning`,description:`Remove reasoning/thinking blocks from messages`,category:`transformation`,async execute(e){return{kind:`messages`,messages:B(e)}}};function V(e){return e.map(e=>({...e,blocks:e.blocks.map(e=>{if(e.type===`tool_output`){let t=e.output.length;return{...e,output:`[output removed - ${t} chars]`}}return e})}))}const Oe={id:`strip-tool-outputs`,label:`Strip Tool Outputs`,description:`Remove tool output contents, keep structure`,category:`transformation`,async execute(e){return{kind:`messages`,messages:V(e)}}};async function H(e,t){let n=[],i=[],a=[],o=!1,s=!1,c=!1,l=[],u,d=t,f;for(;d;){let n=await e.request(r.get,{sessionId:d});if(!n.session){c=!0;break}d===t&&(u=n.session.forkTransforms??void 0),l.unshift({sessionId:d,forkPointMessageId:n.session.forkPointMessageId??void 0}),f=n.session.parentSessionId??void 0,d=f}for(let t=0;t<l.length;t++){let{sessionId:r}=l[t],c=t===l.length-1,u=l[t+1]?.forkPointMessageId;n.push(r);let d=await L(e,{sessionId:r});if(d.hasSquashBoundary&&(o=!0,c||(i.length=0)),d.truncated&&(s=!0),c)a=d.messages;else for(let e of d.messages)if(i.push(e),u&&e.messageId===u)break}return u&&(i=await ke(i,u)),{messages:[...i,...a],hasSquashBoundary:o,sessionChain:n,truncated:s,incomplete:c}}async function ke(e,t){if(t.segments?.length){let n=t.segments[0].fromMessageId,r=t.segments[t.segments.length-1].toMessageId,i=e.findIndex(e=>e.messageId===n),a=e.findIndex(e=>e.messageId===r);if(i===-1||a===-1||i>a)return U(e,t.segments);let o=e.slice(0,i),s=e.slice(i,a+1),c=e.slice(a+1),l=U(s,t.segments);return[...o,...l,...c]}let n=e;if(t.removedMessageIds?.length){let e=new Set(t.removedMessageIds);n=n.filter(t=>!e.has(t.messageId))}return t.appliedPipeline?.length&&(n=(await z(n,t.appliedPipeline)).messages),n}function Ae(e,t){let n=e;return t.stripReasoning&&(n=B(n)),t.stripToolOutputs&&(n=V(n)),n}function U(e,t){let n=new Map;for(let t=0;t<e.length;t++)n.set(e[t].messageId,t);let r=[];for(let i of t){let t=n.get(i.fromMessageId),a=n.get(i.toMessageId);if(t===void 0||a===void 0){console.warn(`[getFullConversation] Skipping segment with missing boundary IDs`,{segmentKey:`${i.fromMessageId}..${i.toMessageId}`,fromMessageId:i.fromMessageId,toMessageId:i.toMessageId,hasFrom:t!==void 0,hasTo:a!==void 0});continue}let o=e.slice(t,a+1),s;switch(i.policy){case`exclude`:s=[];break;case`summarize`:if(i.summaryText){if(o.length===0)throw Error(`Cannot create synthetic summary message for empty segment: ${i.fromMessageId}..${i.toMessageId}`);s=[{messageId:`summary-${i.fromMessageId}-${i.toMessageId}`,turnId:null,sessionId:o[0].sessionId,role:`assistant`,contentText:i.summaryText,blocks:[{type:`text`,content:i.summaryText}],timestamp:o[o.length-1].timestamp}]}else s=o;break;default:s=o;break}if((i.policy!==`summarize`||!i.summaryText)&&i.overrides&&Object.keys(i.overrides).length>0){let e=new Set(Object.entries(i.overrides).filter(([,e])=>e===`exclude`).map(([e])=>e));s=s.filter(t=>!e.has(t.messageId))}s=Ae(s,i),r.push(...s)}return r}function W(e){return{role:e.role,blocks:e.blocks}}async function je(e,t){return{messageHistory:(await H(e,t.sessionId)).messages.map(W),isFirstTurn:!0}}async function Me(e,t,n,r){if(t.cwd===n)return{swapped:!1};let i=await e.request(v.cwd.change,{agentId:t.agentId,adapterId:t.adapterId,adapterName:t.adapterName,adapterSessionId:t.adapterSessionId??``,sessionId:t.sessionId,newCwd:n,...r?.skipWarning?{skipWarning:!0}:{}});if(!i.success)throw Error(`Failed to change cwd for agent ${t.agentId}: ${i.reason??`unknown`}`);return i.previousCwd?(t.cwd=n,{swapped:!0,previousCwd:i.previousCwd}):(t.cwd=n,{swapped:!1})}async function Ne(e,t,n,r){let i=n===void 0||t.model===n,a=r?.reasoningEffort===void 0,o=!r?.providerConfigId;if(i&&a&&o)return{changed:!1};let s=r?.providerConfigId?await u(e,r.providerConfigId):void 0,c=await e.request(v.model.change,{agentId:t.agentId,adapterId:t.adapterId,adapterName:t.adapterName,adapterSessionId:t.adapterSessionId??``,...n!==void 0&&{newModel:n},...r?.reasoningEffort!==void 0&&{reasoningEffort:r.reasoningEffort},...r?.skipWarning!==void 0&&{skipWarning:r.skipWarning},...s!==void 0&&{providerContext:s}});if(!c.success)throw Error(`Failed to change model for agent ${t.agentId}: ${c.reason??`unknown`}`);return n!==void 0&&(t.model=n),{changed:!0,swapped:c.swapped??!1}}async function Pe(e,t,n){let r=[],i=new Set;for(let a of t){let t=await e.requestOptional(h.getAgent,{adapterId:a.adapterId,agentId:a.agentId});if(t.handled&&t.data.agent!==null)r.push(a);else{let t=await G(e,a,n);r.push(t),i.add(t.agentId)}}return{verifiedAgents:r,recoveredAgentIds:i}}async function Fe(e,t,n){let r=await H(e,t.sessionId),i=n?.pipeline??[];return{messageHistory:(i.length>0?(await z(r.messages,i)).messages:r.messages).map(W),isFirstTurn:!0}}async function G(e,t,n){let r=await I(e,t.adapterName).catch(()=>t.adapterId);return await e.request(h.rehydrateAgent,{adapterId:r,agentId:t.agentId,cwd:n.cwd,model:n.model??t.model}),t.adapterId=r,t}function K(e){return typeof e==`string`&&e.trim().length>0?e.trim():void 0}async function q(e,t,n,r){let{adapterName:i}=await e.request(a.resolveName,{adapterId:t});if(n&&i!==n)throw Error(`${r}adapterName "${n}" does not match adapterId "${t}"`);return i}async function J(e,t,n,r,i,a,o,s,c,l){let u=n.map(async n=>{try{await e.request(v.sendMessage,{agentId:n.agentId,adapterId:n.adapterId,message:r,deliveryMode:o,messageId:i,turnId:a.turnId,sessionId:t.sessionId,sessionContext:c,...l!==void 0&&{responseSchema:l}}),await e.emit(b.user_message.acknowledged,{sessionId:a.sessionId,turnId:a.turnId,turnNumber:a.turnNumber,messageId:i,agentId:n.agentId})}catch(t){if(t instanceof E){await e.emit(b.user_message.completed,{sessionId:a.sessionId,turnId:a.turnId,turnNumber:a.turnNumber,messageId:i,agentId:n.agentId,outcome:`cancelled`});let t=a.markAgentCompleted(n.agentId);t.turnComplete&&await s(a,t.result);return}let r=t instanceof Error?t.message:String(t),o=a.markAgentErrored(n.agentId,r);await e.emit(b.user_message.completed,{sessionId:a.sessionId,turnId:a.turnId,turnNumber:a.turnNumber,messageId:i,agentId:n.agentId,outcome:`error`,error:r}),o.turnComplete&&await s(a,o.result)}});await Promise.all(u)}function Ie(e){return e.on(b.abandon,async t=>{let{parentSessionId:n,childSessionId:r}=t.payload,{session:i}=await e.request(b.get,{sessionId:r});if(!i)throw Error(`[abandon-handler] Child session not found: ${r}`);if(i.parentSessionId!==n)throw Error(`[abandon-handler] Invalid parent-child relationship: session ${r} is not a child of ${n}`+(i.parentSessionId?` (actual parent: ${i.parentSessionId})`:` (session has no parent)`));if(!(await e.request(b.close,{sessionId:r})).success)throw Error(`[abandon-handler] Failed to close child session: ${r}`);await e.emit(b.abandoned,{sessionId:r,parentSessionId:n}),t.setResult({success:!0})})}function Le(e,t,n){return e.on(b.agent.attach,async r=>{let{sessionId:i,agent:a,initialMessage:o,role:s}=r.payload,c=Re(a),l=await We(e,i),u=await Be(e,i,o,a),{adapterName:f,adapterId:p}=await ze(e,a.kind===`adapter`&&`adapterName`in a?a.adapterName:u?.adapterName,a.kind===`adapter`&&`adapterId`in a?a.adapterId:void 0,n),{providerConfigId:m,providerContext:g}=await Ve(e,a.providerConfigId,u),{runtimeOptions:_,mergedModel:v,mergedCwd:y}=Ue(c,u,g),b=Ge(l,s),x=qe(p,i,o,b,_,Ke(l),u?.harnessId);g!==void 0&&await d(e,g);let S=await e.request(h.startAgent,x);if(!S.success)throw Error(`[attach-handler] Failed to start agent: ${S.message}`);let C=a.kind===`persona`?a.personaId:void 0;await Ye(e,S,{adapterName:f,sessionId:i,role:b,timestamp:Date.now(),personaId:C,profileId:u?.profileId,harnessId:u?.harnessId,providerConfigId:m,compressionMode:u?.compressionMode,model:v,cwd:y});let w=o&&S.messageId?await Xe(e,t,i,S.agentId,S.messageId,o):void 0;r.setResult({agentId:S.agentId,adapterSessionId:S.adapterSessionId,role:b,...w&&{messageId:w.messageId,turnId:w.turnId}})})}function Re(e){return{...e.model!==void 0&&{model:e.model},...e.reasoningEffort!==void 0&&{reasoningEffort:e.reasoningEffort},...e.cwd!==void 0&&{cwd:e.cwd},...e.allowedTools!==void 0&&{allowedTools:e.allowedTools},...e.disallowedTools!==void 0&&{disallowedTools:e.disallowedTools},...e.allowedDirectories!==void 0&&{allowedDirectories:e.allowedDirectories},...e.systemPrompt!==void 0&&{systemPrompt:e.systemPrompt}}}async function ze(e,t,n,r){let i=K(t),a=K(n);if(!i&&!a)throw Error(`[attach-handler] adapterName or adapterId is required — provide one explicitly or via persona/profile/virtualModel resolution`);if(a)return{adapterName:await q(e,a,i,`[attach-handler] `),adapterId:a};let o=i;return{adapterName:o,adapterId:await I(e,o,r)}}async function Be(e,t,n,r){if(r.kind===`adapter`)return null;let i=n?F(n):void 0;return e.request(g.resolve,{selection:r,context:{sessionId:t,promptText:i}})}async function Ve(e,t,n){let r=t??n?.providerConfigId;return{providerConfigId:r,providerContext:r===void 0?void 0:await u(e,r)}}function He(e){return Object.fromEntries(Object.entries(e).filter(([,e])=>e!==void 0))}function Ue(e,t,n){let r=e.model??t?.model,i=e.cwd;return{runtimeOptions:He({model:r,reasoningEffort:e.reasoningEffort??t?.reasoningEffort,cwd:i,allowedTools:e.allowedTools??t?.allowedTools,disallowedTools:e.disallowedTools??t?.disallowedTools,allowedDirectories:e.allowedDirectories??t?.allowedDirectories,systemPrompt:e.systemPrompt??t?.systemPrompt,providerContext:n}),mergedModel:r,mergedCwd:i}}async function We(e,t){let{session:n}=await e.request(b.get,{sessionId:t});if(!n)throw Error(`[attach-handler] Session not found: ${t}`);if(n.status!==`active`)throw Error(`[attach-handler] Session is not active: ${t}`);return n}function Ge(e,t){let n=e.agents.length===0;return t??(n?`lead`:`member`)}function Ke(e){if(e.isImported&&e.isOrchestrated===!1&&e.adapterSessionId)return e.adapterSessionId}function qe(e,t,n,r,i,a,o){return a?{mode:`resume`,adapterId:e,sessionId:t,adapterSessionId:a,role:r,...i,...n!==void 0&&{initialMessage:n},...o!==void 0&&{harnessId:o}}:{adapterId:e,sessionId:t,role:r,...i,...n!==void 0&&{initialMessage:n},...o!==void 0&&{harnessId:o}}}async function Je(e,t){!t.personaId&&!t.profileId&&!t.harnessId&&!t.providerConfigId||await e.request(O.set,{agentId:t.agentId,agent:{agentId:t.agentId,adapterId:t.adapterId,adapterName:t.adapterName,sessionId:t.sessionId,role:t.role,status:`idle`,personaId:t.personaId,profileId:t.profileId,harnessId:t.harnessId,providerConfigId:t.providerConfigId,createdAt:t.timestamp,lastActivityAt:t.timestamp,...t.model!==void 0&&{model:t.model},...t.cwd!==void 0&&{cwd:t.cwd},...t.compressionMode!==void 0&&{compressionMode:t.compressionMode}}})}async function Ye(e,t,n){try{await Je(e,{agentId:t.agentId,adapterId:t.adapterId,adapterName:n.adapterName,sessionId:n.sessionId,role:n.role,timestamp:n.timestamp,personaId:n.personaId,profileId:n.profileId,harnessId:n.harnessId,providerConfigId:n.providerConfigId,compressionMode:n.compressionMode,model:n.model,cwd:n.cwd})}catch(r){console.error(`[attach-handler] Failed to persist agent identity, rolling back started agent`,{sessionId:n.sessionId,agentId:t.agentId,adapterId:t.adapterId,error:r});try{await e.request(h.stopAgent,{adapterId:t.adapterId,agentId:t.agentId})}catch(e){console.error(`[attach-handler] Failed to rollback started agent after identity persistence failure`,{sessionId:n.sessionId,agentId:t.agentId,adapterId:t.adapterId,error:e})}throw r}}async function Xe(e,t,n,r,a,o){let{turn:s}=await e.request(i.create,{sessionId:n}),c=new P({sessionId:n,agentIds:[r],turnId:s.turnId,turnNumber:s.turnNumber});return c.addMessage(a),t.set(n,c),await e.emit(b.turn.started,{sessionId:n,turnId:c.turnId,turnNumber:c.turnNumber,messageId:a,agentIds:[...c.agentIds]}),await e.emit(b.user_message.sent,{sessionId:n,turnId:c.turnId,turnNumber:c.turnNumber,messageId:a,content:o,agentIds:[...c.agentIds]}),await e.emit(b.user_message.acknowledged,{sessionId:n,turnId:c.turnId,turnNumber:c.turnNumber,messageId:a,agentId:r}),{messageId:a,turnId:c.turnId}}const Ze={id:`messages-to-context`,label:`Export as Context`,description:`Convert messages to context JSON (final step)`,category:`extraction`,async execute(e){let t=e.map(e=>({role:e.role,content:e.blocks.map(e=>e.type===`text`?e.content:e.type===`reasoning`?`[reasoning: ${e.content}]`:e.type===`tool_call`?`[tool: ${e.name}]`:e.type===`tool_output`?e.output:``).filter(Boolean).join(`
|
|
12
|
+
`)})),n=t.reduce((e,t)=>e+t.content.length,0),r=Math.ceil(n/4);return{kind:`context`,json:{type:`compressed-messages`,messageCount:e.length,messages:t},tokenEstimate:r}}},Qe={id:`llm-summarize`,label:`Summarize`,description:`LLM-generated summary of selected messages`,category:`transformation`,async execute(e){return{kind:`messages`,messages:e}}};function $e(e){let t=[];for(let n of e){let e=n.blocks.filter(e=>e.type===`text`).map(e=>e.content).join(`
|
|
13
|
+
`);e&&(n.role===`user`?t.push(`[human]\n${e}\n[/human]`):n.role===`assistant`&&t.push(`[assistant]\n${e}\n[/assistant]`))}return`<conversation>\n${t.join(`
|
|
14
|
+
|
|
15
|
+
`)}\n</conversation>`}function et(e){return{id:`llm-extract`,label:`LLM Extract`,description:`Extract structured context using a cheap LLM model (requires virtualModelId in options)`,category:`extraction`,async execute(t,n){let r={kind:`messages`,messages:t},i=n?.virtualModelId;if(typeof i!=`string`)return r;let a=(typeof n?.sessionId==`string`&&n.sessionId.length>0?n.sessionId:void 0)??t[0]?.sessionId;if(typeof a!=`string`||a.length===0)return r;try{let n=await e.request(g.resolve,{selection:{kind:`virtual-model`,virtualModelId:i},context:{sessionId:a}}),{adapterId:r}=await e.request(ne.resolveId,{adapterName:n.adapterName}),o=$e(t),s=n.providerConfigId?await re(e,n.providerConfigId):void 0,{text:c}=await e.request(h.infer,{adapterId:r,prompt:o,model:n.model,systemPrompt:`You are a context extraction assistant. Analyze the following conversation and extract structured information. Respond with ONLY valid JSON matching this exact schema — no markdown, no explanation, no code fences:
|
|
16
|
+
|
|
17
|
+
{
|
|
18
|
+
"resolved_items": ["string — completed work with resolution details"],
|
|
19
|
+
"known_bugs": [{ "issue": "string", "location": "string", "impact": "string" }],
|
|
20
|
+
"todos": [{ "issue": "string", "location": "string", "priority": "high|medium|low" }],
|
|
21
|
+
"key_decisions_and_rationale": ["string — decision with reasoning"],
|
|
22
|
+
"technical_details": {
|
|
23
|
+
"files": ["string — file paths mentioned"],
|
|
24
|
+
"schemas": {},
|
|
25
|
+
"apis": ["string — API endpoints or contracts"],
|
|
26
|
+
"config": {}
|
|
27
|
+
},
|
|
28
|
+
"constraints_and_requirements": ["string — constraints or non-negotiable requirements"],
|
|
29
|
+
"current_state": "string — one paragraph summary of where work stands now",
|
|
30
|
+
"roadmap": ["string — future work items in priority order"],
|
|
31
|
+
"data_flows": ["string — key data movement patterns"],
|
|
32
|
+
"component_interactions": { "ComponentName": "string — description of its role" },
|
|
33
|
+
"key_files": { "filepath": "string — what this file does" },
|
|
34
|
+
"helpful_hint": ["string — quick reference hints for resuming work"]
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
Rules:
|
|
38
|
+
- Omit array items you have no evidence for (prefer empty array over fabrication).
|
|
39
|
+
- current_state MUST be present; write "No summary available" if you cannot determine it.
|
|
40
|
+
- Extract only facts stated or clearly implied in the conversation. Do not invent.
|
|
41
|
+
- key_files and component_interactions should only include items explicitly mentioned.`,...s!==void 0&&{providerContext:s}}),l=c.trim().replace(/^```(?:json)?\s*/i,``).replace(/\s*```$/i,``).trim(),u=JSON.parse(l),d=f.parse(u),p=Math.ceil(JSON.stringify(d).length/4);return{kind:`context`,json:{...d},tokenEstimate:p}}catch(e){return console.warn(`[llm-extract] action failed`,{action:`llm-extract`,sessionId:a,error:e}),r}}}}let Y=!1,X=!1;function Z(e){Y||(Y=!0,R.register(De),R.register(Oe),R.register(Ze),R.register(Qe)),e&&!X&&(X=!0,R.register(et(e)))}function tt(){Y=!1,X=!1}function nt(e){return Z(e),e.on(b.compress,async t=>{let{sessionId:r,pipeline:i}=t.payload,{messages:a}=await e.request(o.getBySession,{sessionId:r,limit:1e4}),s=await z(a,i,{sessionId:r});if(!s.contextJson)throw Error(`[compress-handler] Compress pipeline must produce context JSON (sessionId=${r})`);let c=a.map(e=>e.messageId),l=Math.ceil(a.reduce((e,t)=>e+JSON.stringify(t.blocks).length/4,0)),u=crypto.randomUUID();await e.request(n.append,{event:{sessionId:r,eventId:u,timestamp:Date.now(),type:`squash`,payload:{summaryJson:JSON.stringify(s.contextJson),tokensBefore:l,tokensAfter:s.tokenEstimate,compressedMessageIds:c}}}),await e.emit(b.compressed,{sessionId:r,eventId:u}),t.setResult({eventId:u,contextJson:s.contextJson,tokensBefore:l,tokensAfter:s.tokenEstimate})})}async function rt(e,t,n,r){if(!n.segments?.length)return!1;let i=[],a;do{let{messages:n,nextCursor:s}=await e.request(o.getBySession,{sessionId:t,order:`asc`,limit:200,after:a});i.push(...n),a=r&&n.some(e=>e.messageId===r)?void 0:s??void 0}while(a);if(i.length===0)throw Error(`[fork-handler] Segment transforms require at least one source message (sourceSessionId=${t})`);let s=i;if(r){let e=i.findIndex(e=>e.messageId===r);if(e===-1)throw Error(`[fork-handler] Fork point message not found in source message list: ${r} (sourceSessionId=${t})`);s=i.slice(0,e+1)}let c=new Map;s.forEach((e,t)=>{c.set(e.messageId,t)});let l=-1;for(let e of n.segments){if(!e.fromMessageId||!e.toMessageId)throw Error(`[fork-handler] Segment must have fromMessageId and toMessageId (sourceSessionId=${t})`);let n=c.get(e.fromMessageId),r=c.get(e.toMessageId);if(n===void 0||r===void 0)throw Error(`[fork-handler] Segment boundaries must reference source messages: ${e.fromMessageId}..${e.toMessageId} (sourceSessionId=${t})`);if(n>r)throw Error(`[fork-handler] Segment range is reversed: ${e.fromMessageId}..${e.toMessageId} (sourceSessionId=${t})`);if(n<=l)throw Error(`[fork-handler] Segments must not overlap and must be ordered (sourceSessionId=${t})`);if(n!==l+1)throw Error(`[fork-handler] Segments must be contiguous without gaps (sourceSessionId=${t})`);l=r}if(l!==s.length-1)throw Error(`[fork-handler] Segments must cover the entire source message range (sourceSessionId=${t})`);return!0}function it(e){if(!e.segments?.length&&e.appliedPipeline?.length)for(let t of e.appliedPipeline){let e=R.get(t.actionId);if(!e)throw Error(`[fork-handler] Unknown action in pipeline: ${t.actionId}`);if(e.category!==`transformation`)throw Error(`[fork-handler] Action '${t.actionId}' is category '${e.category}', but only 'transformation' actions are allowed in fork transforms`)}}function at(e){return e.on(b.fork,async t=>{let{sourceSessionId:n,fromMessageId:r,name:i,branchKind:a=`fork`,transforms:s,targetWorkingDirectory:c,existingSessionId:l}=t.payload,{session:u}=await e.request(b.get,{sessionId:n});if(!u)throw Error(`[fork-handler] Source session not found: ${n}`);if(r){let{message:t}=await e.request(o.get,{messageId:r});if(!t)throw Error(`[fork-handler] Fork point message not found: ${r} (sourceSessionId=${n})`);if(t.sessionId!==n)throw Error(`[fork-handler] Fork point message ${r} does not belong to session ${n}`)}s&&(await rt(e,n,s,r)||it(s));let{sessionId:d}=await e.request(b.create,{...l?{sessionId:l}:{},parentSessionId:n,forkPointMessageId:r,branchKind:a,forkTransforms:s,...i?{title:i}:{},...c?{targetWorkingDirectory:c}:{}});await e.emit(b.branch.created,{sessionId:n,childSessionId:d,parentSessionId:n,kind:a,forkPointMessageId:r,transforms:s}),await e.emit(b.forked,{parentSessionId:n,childSessionId:d,forkPoint:r}),t.setResult({sessionId:d})})}function ot(e){return e.on(b.merge,async t=>{let{parentSessionId:r,childSessionId:i,summary:a}=t.payload,o=`merge:${r}:${i}`,{session:s}=await e.request(b.get,{sessionId:r});if(!s)throw Error(`[merge-handler] Parent session not found: ${r}`);if(s.status!==`active`)throw Error(`[merge-handler] Parent session is not active: ${r}`);let{session:c}=await e.request(b.get,{sessionId:i});if(!c)throw Error(`[merge-handler] Child session not found: ${i}`);if(c.parentSessionId!==r)throw Error(`[merge-handler] Invalid parent-child relationship: session ${i} is not a child of ${r}`+(c.parentSessionId?` (actual parent: ${c.parentSessionId})`:` (session has no parent)`));await e.emit(b.merging,{parentSessionId:r,childSessionId:i});let l=a??`Child session ${i} merged.`;if(!(await e.request(b.close,{sessionId:i})).success)throw Error(`[merge-handler] Failed to close child session: ${i}`);let u=JSON.stringify({handoff:l});await e.request(n.append,{event:{sessionId:r,eventId:o,timestamp:Date.now(),type:`branch.merged`,payload:{childSessionId:i,parentSessionId:r,resultJson:u}}}),await e.emit(b.branch.merged,{sessionId:r,childSessionId:i,parentSessionId:r,resultJson:u}),await e.emit(b.merged,{parentSessionId:r,childSessionId:i,handoff:l}),t.setResult({success:!0,handoff:l})})}async function Q(e,t,n,r,a){if(!t.parentSessionId||r?.messageHistory)return r;let{turns:o}=await e.request(i.getBySession,{sessionId:n,limit:2});if(!(a&&o.length<=1))return r;let s=(await H(e,n)).messages.map(W);return{...r,messageHistory:s,isFirstTurn:!0,hasNewTransforms:t.forkTransforms!==void 0}}const $={enabled:!0,template:`User changed working directory from {oldCwd} to {newCwd}`};function st(e,t,n){return e.replace(/\{oldCwd\}/g,t).replace(/\{newCwd\}/g,n)}function ct(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.enabled==`boolean`&&typeof t.template==`string`}async function lt(e){try{let t=await e.request(p.get,{key:{scope:`global`,surface:`ui`,context:`cwdChangeNotification`},category:`chat-display`});if(t.value!==null&&t.value!==void 0)return ct(t.value)?t.value:$}catch{}return $}function ut(e){let{baseContext:t,recoveryContext:n,isRecovered:r,isSwapped:i,swapMeta:a,cwdMessage:o,freshMessageHistory:s}=e,c=r&&n?{...t,...n}:t;if(!i)return c;let l=a&&o!==void 0?{cwdChange:{previousCwd:a.previousCwd,newCwd:a.newCwd,message:o}}:void 0;return c={...c,hasConnectorSwap:!0,...s!==void 0&&{messageHistory:s},...l&&{turnContext:{...c?.turnContext,...l}}},c}async function dt(e){let{bus:t,session:n,turn:r,message:i,messageId:a,deliveryMode:o,onTurnComplete:s,agent:c,agentContext:l,responseSchema:u}=e;try{await t.request(v.sendMessage,{agentId:c.agentId,adapterId:c.adapterId,message:i,deliveryMode:o,messageId:a,turnId:r.turnId,sessionId:n.sessionId,sessionContext:l,...u!==void 0&&{responseSchema:u}}),await t.emit(b.user_message.acknowledged,{sessionId:r.sessionId,turnId:r.turnId,turnNumber:r.turnNumber,messageId:a,agentId:c.agentId})}catch(e){if(e instanceof E){await t.emit(b.user_message.completed,{sessionId:r.sessionId,turnId:r.turnId,turnNumber:r.turnNumber,messageId:a,agentId:c.agentId,outcome:`cancelled`});let e=r.markAgentCompleted(c.agentId);e.turnComplete&&await s(r,e.result);return}let n=e instanceof Error?e.message:String(e),i=r.markAgentErrored(c.agentId,n);await t.emit(b.user_message.completed,{sessionId:r.sessionId,turnId:r.turnId,turnNumber:r.turnNumber,messageId:a,agentId:c.agentId,outcome:`error`,error:n}),i.turnComplete&&await s(r,i.result)}}async function ft(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g){let _=await Q(e,t,t.sessionId,c,u),v=l?await l.enrichForDeliveryMode(_?.messageHistory,a.turnId,o):_?.messageHistory,y=_?{..._,messageHistory:v}:void 0,b=p?.size?await lt(e):$,x=n.map(async n=>{let c=m?.get(n.agentId),l=c&&b.enabled?st(b.template,c.previousCwd,c.newCwd):void 0;await dt({bus:e,session:t,turn:a,message:r,messageId:i,deliveryMode:o,onTurnComplete:s,agent:n,agentContext:ut({baseContext:y,recoveryContext:d,isRecovered:f?.has(n.agentId)??!1,isSwapped:p?.has(n.agentId)??!1,swapMeta:c,cwdMessage:l,freshMessageHistory:h}),responseSchema:g})});await Promise.all(x)}export{be as A,Ee as C,xe as D,Ce as E,O as F,ue as M,ae as N,Se as O,D as P,I as S,we as T,Pe as _,nt as a,R as b,Le as c,K as d,q as f,G as g,Ne as h,at as i,P as j,F as k,Ie as l,Me as m,Q as n,Z as o,Fe as p,ot as r,tt as s,ft as t,J as u,je as v,Te as w,L as x,H as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./ui-config-CXmbsqZV.mjs";import{i as t,r as n}from"./schemas-Co_sVhzz.mjs";import{z as r}from"zod";import{createBusNamespace as i}from"@makaio/framework/core";const a=`At least one of adapterName or clientId must be provided`,o=e=>!!(e.adapterName||e.clientId);function s(e){return!!(e.id||e.name)}function c(e){return e.id||!e.name?!0:!!e.adapterName}const l={get:{request:r.object({id:r.string().optional(),name:r.string().optional(),adapterName:r.string().optional()}).refine(s,{message:`Either id or name is required`,path:[`id`]}).refine(c,{message:`adapterName is required when looking up by name`,path:[`adapterName`]}),response:t},list:{request:r.object({adapterName:r.string().optional(),clientId:r.string().optional(),name:r.string().optional()}),response:r.object({harnesses:r.array(t)})},set:{request:n,response:r.object({id:r.string()})},delete:{request:r.object({id:r.string()}),response:r.object({success:r.boolean()})},getDefault:{request:r.object({adapterName:r.string().optional(),clientId:r.string().optional()}).refine(o,{message:a,path:[`adapterName`]}),response:t},resolve:{request:r.object({adapterName:r.string().optional(),clientId:r.string().optional(),personaHarnessId:r.string().optional(),profileHarnessId:r.string().optional()}).refine(o,{message:a,path:[`adapterName`]}),response:t},getSchema:{request:r.object({}),response:r.object({schema:r.record(r.string(),r.unknown()),uiConfig:e})},created:t,updated:t,deleted:r.object({id:r.string()})},u=i(`harness`,l),d=u.subjects;function f(e,t){return t[e]??[]}function p(e){let{registeredTools:t,allowedCapabilities:n,disallowedCapabilities:r,capabilityMap:i}=e,a=new Set(n),o=new Set(r),s=[],c=[];for(let e of t){let t=f(e,i);n.length>0&&t.length>0&&t.every(e=>a.has(e))&&s.push(e),t.some(e=>o.has(e))&&c.push(e)}return{allowedTools:s,disallowedTools:c}}function m(e,t){return t.length===0?e?[...e]:void 0:[...new Set([...e??[],...t])]}function h(e,t){return{allowedTools:m(e,[]),disallowedTools:m(t,[])}}async function g(e,t){let{allowedCapabilities:n,disallowedCapabilities:r,harnessId:i,allowedTools:a,disallowedTools:o}=t;if(!((n?.length??0)||(r?.length??0))||!i)return h(a,o);let s=await e.request(d.get,{id:i});if(!s.toolCapabilityMap)return h(a,o);let c=p({registeredTools:s.nativeTools.enabled,allowedCapabilities:n??[],disallowedCapabilities:r??[],capabilityMap:s.toolCapabilityMap});return{allowedTools:m(a,c.allowedTools),disallowedTools:m(o,c.disallowedTools)}}const _={bash:[`shell.execute`,`file.read`,`file.write`,`file.delete`,`network.request`,`process.manage`],patch:[`file.write`]};function v(e){return{id:e.id,name:e.name,description:e.description,adapterName:e.adapterName,clientId:e.clientId,approvalPolicy:`always-ask`,nativeTools:{enabled:[],disabled:[]},registryTools:{enabled:[],disabled:[]},isDefault:!0,enabled:!0}}const y={id:`harness-codex-app-server-native`,name:`Codex Native`,description:`Codex app server with built-in native tools`,adapterName:`codex-app-server`,clientId:`codex`,approvalPolicy:`always-ask`,nativeTools:{enabled:[`bash`,`patch`],disabled:[]},registryTools:{enabled:[],disabled:[]},toolCapabilityMap:_,isDefault:!0,enabled:!0},b=v({id:`harness-openai-node-registry`,name:`OpenAI Registry`,description:`OpenAI adapter with registry-managed tools`,adapterName:`openai-node`}),x=v({id:`harness-claude-code-registry`,name:`Claude Code Registry`,description:`Claude Code adapter with registry-managed tools`,adapterName:`claude-code`,clientId:`claude-code`}),S=v({id:`harness-gemini-sdk-registry`,name:`Gemini SDK Registry`,description:`Gemini SDK adapter with registry-managed tools`,adapterName:`gemini-sdk`,clientId:`gemini`}),C=[y,b,x,S];export{b as a,g as c,l as d,d as f,S as i,f as l,y as n,_ as o,C as r,p as s,x as t,u};
|
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { ExtractSubjectPayload, SubjectDefinition } from "@makaio/framework/core";
|
|
2
|
+
import { IMakaioBus, InterceptorContext } from "@makaio/framework/bus";
|
|
3
|
+
import { IMakaioSession, JsonValue, MessageInput, SessionContext, SessionMessageBlock, SessionSubjects, StepFinished, StepType, Turn } from "@makaio/framework/contracts";
|
|
4
|
+
import { SessionSendMessageRequest } from "@makaio/framework/contracts/session";
|
|
5
|
+
|
|
6
|
+
//#region packages/hooks/src/types/hook-name.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* Union of all hook names.
|
|
9
|
+
* - Named hooks provide enriched context (session, history, etc.)
|
|
10
|
+
* - BusMessage is the generic escape hatch for any subject
|
|
11
|
+
*/
|
|
12
|
+
type HookName = 'BusMessage' | 'PreUserMessage' | 'PostUserMessage' | 'PreTurn' | 'PostTurn' | 'PostStep' | 'PreToolUse' | 'PostToolUse' | 'SessionStart' | 'SessionEnd';
|
|
13
|
+
//#endregion
|
|
14
|
+
//#region packages/hooks/src/types/hook-context.d.ts
|
|
15
|
+
/** Session-level turn.completed payload (distinct from agent-level TurnCompleted) */
|
|
16
|
+
type SessionTurnCompleted = ExtractSubjectPayload<typeof SessionSubjects.turn.completed>;
|
|
17
|
+
/**
|
|
18
|
+
* Base context shared by all hooks.
|
|
19
|
+
*/
|
|
20
|
+
interface BaseHookContext<P> extends InterceptorContext<P> {
|
|
21
|
+
/** Hook event name */
|
|
22
|
+
readonly hookEvent: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generic BusMessage context for escape hatch.
|
|
26
|
+
* Simply an alias for InterceptorContext - no extra fields needed.
|
|
27
|
+
*/
|
|
28
|
+
type BusMessageContext<P = unknown> = InterceptorContext<P>;
|
|
29
|
+
/**
|
|
30
|
+
* Core context properties available to request-based hooks.
|
|
31
|
+
* This is a subset of RequestContext that hooks care about.
|
|
32
|
+
*/
|
|
33
|
+
interface RequestHookContext<P> {
|
|
34
|
+
/** The request payload (readonly via getter, mutable via replacePayload) */
|
|
35
|
+
readonly payload: P;
|
|
36
|
+
/** Message identifier (optional - may not be present if not provided by caller) */
|
|
37
|
+
readonly messageId?: string;
|
|
38
|
+
/** Correlation identifier for tracing (optional) */
|
|
39
|
+
readonly correlationId?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Replace the payload with a new value.
|
|
42
|
+
* Subsequent handlers in the middleware chain will receive the new payload.
|
|
43
|
+
*
|
|
44
|
+
* **Note:** Only `message` and `sessionContext` can be replaced. Routing fields
|
|
45
|
+
* (`agentId`, `adapterId`, `sessionId`, `messageId`, `deliveryMode`) are
|
|
46
|
+
* intentionally immutable to preserve message routing integrity.
|
|
47
|
+
*/
|
|
48
|
+
replacePayload(newPayload: Partial<P>): void;
|
|
49
|
+
/**
|
|
50
|
+
* Continue to the next handler in the middleware chain.
|
|
51
|
+
*/
|
|
52
|
+
next(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Session enrichment props shared across session-aware hooks.
|
|
56
|
+
*
|
|
57
|
+
* Hooks that operate within a session context (PreUserMessage, PostTurn, etc.)
|
|
58
|
+
* can extend this interface to get access to session and history data.
|
|
59
|
+
*
|
|
60
|
+
* Enrichment is optional - fields may be undefined if sessionId wasn't available
|
|
61
|
+
* or if the lookup failed (graceful degradation).
|
|
62
|
+
*
|
|
63
|
+
* Host code augments this interface via declaration merging to add
|
|
64
|
+
* host-owned fields (e.g., `project`, `worktree`) contributed by a
|
|
65
|
+
* `SessionSubjects.enrichContext` handler.
|
|
66
|
+
*/
|
|
67
|
+
interface SessionHookContext {
|
|
68
|
+
/** Session object (populated when sessionId is available) */
|
|
69
|
+
readonly session?: IMakaioSession;
|
|
70
|
+
/** Recent turn history, oldest first (up to 10 turns) */
|
|
71
|
+
readonly recentHistory: Turn[];
|
|
72
|
+
/** Bus instance for making requests */
|
|
73
|
+
readonly bus: IMakaioBus;
|
|
74
|
+
/**
|
|
75
|
+
* Arbitrary context extensions contributed by the host-registered
|
|
76
|
+
* `SessionSubjects.enrichContext` handler. Framework spreads these onto
|
|
77
|
+
* the context object at hook-call time. Empty object in OSS mode.
|
|
78
|
+
*/
|
|
79
|
+
readonly contextExtensions: Record<string, unknown>;
|
|
80
|
+
[key: string]: unknown;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Extended payload type for PreUserMessage context.
|
|
84
|
+
* Includes SessionSendMessageRequest fields plus runner-specific fields.
|
|
85
|
+
* Uses Partial because not all request fields are available in the runner context.
|
|
86
|
+
*
|
|
87
|
+
* Note: `cwd` is runner-injected from the connector's current working directory
|
|
88
|
+
* (via `AgentTurnExecutor`) — it is NOT a wire-protocol field and is independent
|
|
89
|
+
* of the `SessionSendMessageRequest` schema. It is always present when the hook
|
|
90
|
+
* fires from the adapter layer.
|
|
91
|
+
*/
|
|
92
|
+
type PreUserMessagePayload = Partial<SessionSendMessageRequest> & {
|
|
93
|
+
/** Agent ID (runner-specific, not part of SessionSendMessageRequest) */agentId?: string; /** Adapter ID (runner-specific, not part of SessionSendMessageRequest) */
|
|
94
|
+
adapterId?: string; /** Message content (always present) */
|
|
95
|
+
message: SessionSendMessageRequest['message'];
|
|
96
|
+
/**
|
|
97
|
+
* Current working directory of the agent connector at the time the hook fires.
|
|
98
|
+
* Injected by the adapter runner from connector state — not from the wire protocol.
|
|
99
|
+
* Plugins use this to scope file-system operations to the agent's directory.
|
|
100
|
+
*/
|
|
101
|
+
cwd?: string;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* PreUserMessage context with enriched session data.
|
|
105
|
+
*
|
|
106
|
+
* Intercepts: AgentSubjects.sendMessage RPC via request middleware
|
|
107
|
+
*
|
|
108
|
+
* When sessionId is present in SendMessageRequest, the context builder
|
|
109
|
+
* queries the bus to populate session, recentHistory, and project fields.
|
|
110
|
+
* Without sessionId, these fields remain undefined/empty (hooks may fire
|
|
111
|
+
* before a session is established).
|
|
112
|
+
*/
|
|
113
|
+
interface PreUserMessageContext extends RequestHookContext<PreUserMessagePayload>, SessionHookContext {
|
|
114
|
+
readonly hookEvent: 'PreUserMessage';
|
|
115
|
+
/**
|
|
116
|
+
* Set turn context for downstream consumers.
|
|
117
|
+
* Uses replacePayload() to add context to sessionContext.turnContext.
|
|
118
|
+
* Value must be JSON-serializable.
|
|
119
|
+
* @param key - Turn context key to write (e.g. 'guides', 'cwdChange')
|
|
120
|
+
* @param value - JSON-serializable value to store under the key
|
|
121
|
+
*/
|
|
122
|
+
setTurnContext(key: string, value: JsonValue): void;
|
|
123
|
+
/**
|
|
124
|
+
* Get turn context set by THIS hook instance.
|
|
125
|
+
* Returns only context set via setTurnContext() in this handler.
|
|
126
|
+
* Context from earlier hooks is merged separately after handler completes.
|
|
127
|
+
* @returns Turn context values set by this hook instance only
|
|
128
|
+
*/
|
|
129
|
+
getTurnContext(): Record<string, JsonValue>;
|
|
130
|
+
/** Abort message processing. Throws HookAbortError. */
|
|
131
|
+
abort(reason?: string): never;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* PostUserMessage context.
|
|
135
|
+
*
|
|
136
|
+
* Fires after a user message has been sent to the agent but before
|
|
137
|
+
* the agent starts processing. Useful for detection and enforcement hooks.
|
|
138
|
+
*
|
|
139
|
+
* NOTE: No session enrichment in current implementation (SEAM for Phase 3).
|
|
140
|
+
*/
|
|
141
|
+
interface PostUserMessageContext {
|
|
142
|
+
readonly hookEvent: 'PostUserMessage';
|
|
143
|
+
/** Session ID (may be undefined for sessionless messages) */
|
|
144
|
+
readonly sessionId?: string;
|
|
145
|
+
/** Message ID for correlation */
|
|
146
|
+
readonly messageId?: string;
|
|
147
|
+
/** Agent ID that received the message */
|
|
148
|
+
readonly agentId: string;
|
|
149
|
+
/** Adapter ID */
|
|
150
|
+
readonly adapterId: string;
|
|
151
|
+
/** Bus instance for making requests */
|
|
152
|
+
readonly bus: IMakaioBus;
|
|
153
|
+
}
|
|
154
|
+
interface PreTurnContext extends BaseHookContext<unknown> {
|
|
155
|
+
readonly hookEvent: 'PreTurn';
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* PostTurn context with turn completion data.
|
|
159
|
+
*
|
|
160
|
+
* Intercepts: SessionSubjects.turn.completed event
|
|
161
|
+
*
|
|
162
|
+
* Provides access to turn outcome (success/error) and identifiers.
|
|
163
|
+
* Useful for semantic extraction, analytics, and post-processing.
|
|
164
|
+
*
|
|
165
|
+
* Extends SessionHookContext for optional session enrichment (session,
|
|
166
|
+
* recentHistory, project) when available.
|
|
167
|
+
*/
|
|
168
|
+
interface PostTurnContext extends SessionHookContext {
|
|
169
|
+
readonly hookEvent: 'PostTurn';
|
|
170
|
+
/** Session ID where turn completed */
|
|
171
|
+
readonly sessionId: string;
|
|
172
|
+
/** Turn identifier */
|
|
173
|
+
readonly turnId: string;
|
|
174
|
+
/** Whether all agents completed successfully */
|
|
175
|
+
readonly success: boolean;
|
|
176
|
+
/** Error message if any agent failed */
|
|
177
|
+
readonly error?: string;
|
|
178
|
+
/** Full turn.completed payload for advanced use */
|
|
179
|
+
readonly payload: SessionTurnCompleted;
|
|
180
|
+
/** Message identifier for correlation */
|
|
181
|
+
readonly messageId: string;
|
|
182
|
+
/** Correlation identifier for tracing */
|
|
183
|
+
readonly correlationId?: string;
|
|
184
|
+
/**
|
|
185
|
+
* Continue to the next interceptor in the chain.
|
|
186
|
+
*/
|
|
187
|
+
next(): Promise<void>;
|
|
188
|
+
/**
|
|
189
|
+
* Stop propagation of this event.
|
|
190
|
+
* Subsequent interceptors and handlers will NOT be called.
|
|
191
|
+
*/
|
|
192
|
+
stopPropagation(): void;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* PostStep context with step completion data.
|
|
196
|
+
*
|
|
197
|
+
* Intercepts: AgentSubjects.step.finished event
|
|
198
|
+
*
|
|
199
|
+
* Provides access to step type, metadata, and optional filtering.
|
|
200
|
+
* Enriches with session, recentHistory, and project when available.
|
|
201
|
+
*
|
|
202
|
+
* Use stepType to filter for specific step types:
|
|
203
|
+
* - 'reasoning': Thinking/reasoning blocks (extended thinking enabled)
|
|
204
|
+
* - 'tool_use': Tool calls
|
|
205
|
+
* - 'text': Regular text message blocks
|
|
206
|
+
*/
|
|
207
|
+
interface PostStepContext extends SessionHookContext {
|
|
208
|
+
readonly hookEvent: 'PostStep';
|
|
209
|
+
/** Session ID where step completed */
|
|
210
|
+
readonly sessionId?: string;
|
|
211
|
+
/** Agent that completed the step */
|
|
212
|
+
readonly agentId: string;
|
|
213
|
+
/** Adapter instance */
|
|
214
|
+
readonly adapterId: string;
|
|
215
|
+
/** Adapter type name */
|
|
216
|
+
readonly adapterName: string;
|
|
217
|
+
/** Message ID being processed */
|
|
218
|
+
readonly messageId?: string;
|
|
219
|
+
/** Step type (reasoning, tool_use, text) */
|
|
220
|
+
readonly stepType: StepType;
|
|
221
|
+
/** Content block index */
|
|
222
|
+
readonly blockIndex: number;
|
|
223
|
+
/**
|
|
224
|
+
* Step content block (if available).
|
|
225
|
+
*
|
|
226
|
+
* Fetched from message storage with retry logic. May be undefined if:
|
|
227
|
+
* - messageId not available
|
|
228
|
+
* - Message not yet persisted (timing window)
|
|
229
|
+
* - Block index out of range
|
|
230
|
+
*
|
|
231
|
+
* Contains actual content: reasoning text, tool args, or message text.
|
|
232
|
+
*/
|
|
233
|
+
readonly stepContent?: SessionMessageBlock;
|
|
234
|
+
/** Full step.finished payload for advanced use */
|
|
235
|
+
readonly payload: StepFinished;
|
|
236
|
+
/** Correlation identifier for tracing */
|
|
237
|
+
readonly correlationId?: string;
|
|
238
|
+
/**
|
|
239
|
+
* Continue to the next interceptor in the chain.
|
|
240
|
+
*/
|
|
241
|
+
next(): Promise<void>;
|
|
242
|
+
/**
|
|
243
|
+
* Stop propagation of this event.
|
|
244
|
+
*/
|
|
245
|
+
stopPropagation(): void;
|
|
246
|
+
}
|
|
247
|
+
interface PreToolUseContext extends BaseHookContext<unknown> {
|
|
248
|
+
readonly hookEvent: 'PreToolUse';
|
|
249
|
+
}
|
|
250
|
+
interface PostToolUseContext extends BaseHookContext<unknown> {
|
|
251
|
+
readonly hookEvent: 'PostToolUse';
|
|
252
|
+
}
|
|
253
|
+
interface SessionStartContext extends BaseHookContext<unknown> {
|
|
254
|
+
readonly hookEvent: 'SessionStart';
|
|
255
|
+
}
|
|
256
|
+
interface SessionEndContext extends BaseHookContext<unknown> {
|
|
257
|
+
readonly hookEvent: 'SessionEnd';
|
|
258
|
+
}
|
|
259
|
+
//#endregion
|
|
260
|
+
//#region packages/hooks/src/types/hook-options.d.ts
|
|
261
|
+
/**
|
|
262
|
+
* Base options shared by all hooks.
|
|
263
|
+
*/
|
|
264
|
+
interface BaseHookOptions {
|
|
265
|
+
/** Handler priority. Higher runs first. Default: 0 */
|
|
266
|
+
priority?: number;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Options for BusMessage hook (generic escape hatch).
|
|
270
|
+
*/
|
|
271
|
+
interface BusMessageHookOptions<S extends SubjectDefinition = SubjectDefinition> extends BaseHookOptions {
|
|
272
|
+
/** Subject to intercept (required) */
|
|
273
|
+
subject: S;
|
|
274
|
+
}
|
|
275
|
+
interface PreUserMessageHookOptions extends BaseHookOptions {
|
|
276
|
+
/** Hook name for error attribution (default: 'anonymous') */
|
|
277
|
+
name?: string;
|
|
278
|
+
/** Number of recent turns to include (default: 5) */
|
|
279
|
+
historyDepth?: number;
|
|
280
|
+
}
|
|
281
|
+
interface PostUserMessageHookOptions extends BaseHookOptions {
|
|
282
|
+
/** Hook name for error attribution (default: 'anonymous') */
|
|
283
|
+
name?: string;
|
|
284
|
+
}
|
|
285
|
+
type PreTurnHookOptions = BaseHookOptions;
|
|
286
|
+
/**
|
|
287
|
+
* Options for PostTurn hook.
|
|
288
|
+
*/
|
|
289
|
+
interface PostTurnHookOptions extends BaseHookOptions {
|
|
290
|
+
/** Hook name for error attribution (default: 'anonymous') */
|
|
291
|
+
name?: string;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Options for PostStep hook.
|
|
295
|
+
*
|
|
296
|
+
* Allows filtering by step type to only process specific step types.
|
|
297
|
+
*/
|
|
298
|
+
interface PostStepHookOptions extends BaseHookOptions {
|
|
299
|
+
/** Hook name for error attribution (default: 'anonymous') */
|
|
300
|
+
name?: string;
|
|
301
|
+
/**
|
|
302
|
+
* Filter by step types. If specified, handler only called for these types.
|
|
303
|
+
* When using createHook, defaults to ['reasoning'] if not specified.
|
|
304
|
+
*/
|
|
305
|
+
stepTypes?: StepType[];
|
|
306
|
+
}
|
|
307
|
+
type PreToolUseHookOptions = BaseHookOptions;
|
|
308
|
+
type PostToolUseHookOptions = BaseHookOptions;
|
|
309
|
+
type SessionStartHookOptions = BaseHookOptions;
|
|
310
|
+
type SessionEndHookOptions = BaseHookOptions;
|
|
311
|
+
//#endregion
|
|
312
|
+
//#region packages/hooks/src/create-hook.d.ts
|
|
313
|
+
/**
|
|
314
|
+
* Hook registration result.
|
|
315
|
+
*/
|
|
316
|
+
interface HookRegistration {
|
|
317
|
+
/** Unsubscribe from the hook */
|
|
318
|
+
unsubscribe: () => void;
|
|
319
|
+
/** Hook name for identification */
|
|
320
|
+
hookName: HookName;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Conditional options type - inferred from hook name.
|
|
324
|
+
*/
|
|
325
|
+
type HookOptions<K extends HookName, S extends SubjectDefinition = SubjectDefinition> = K extends 'BusMessage' ? BusMessageHookOptions<S> : K extends 'PreUserMessage' ? PreUserMessageHookOptions : K extends 'PostUserMessage' ? PostUserMessageHookOptions : K extends 'PreTurn' ? PreTurnHookOptions : K extends 'PostTurn' ? PostTurnHookOptions : K extends 'PostStep' ? PostStepHookOptions : K extends 'PreToolUse' ? PreToolUseHookOptions : K extends 'PostToolUse' ? PostToolUseHookOptions : K extends 'SessionStart' ? SessionStartHookOptions : K extends 'SessionEnd' ? SessionEndHookOptions : never;
|
|
326
|
+
/**
|
|
327
|
+
* Conditional context type - what handler receives.
|
|
328
|
+
*/
|
|
329
|
+
type HookContext<K extends HookName, S extends SubjectDefinition = SubjectDefinition> = K extends 'BusMessage' ? BusMessageContext<ExtractSubjectPayload<S>> : K extends 'PreUserMessage' ? PreUserMessageContext : K extends 'PostUserMessage' ? PostUserMessageContext : K extends 'PreTurn' ? PreTurnContext : K extends 'PostTurn' ? PostTurnContext : K extends 'PostStep' ? PostStepContext : K extends 'PreToolUse' ? PreToolUseContext : K extends 'PostToolUse' ? PostToolUseContext : K extends 'SessionStart' ? SessionStartContext : K extends 'SessionEnd' ? SessionEndContext : never;
|
|
330
|
+
/**
|
|
331
|
+
* Create a typed hook registration.
|
|
332
|
+
* @param name - Hook name (BusMessage for generic, or named hooks for enriched context)
|
|
333
|
+
* @param options - Hook-specific options including handler
|
|
334
|
+
* @returns HookRegistration with unsubscribe function
|
|
335
|
+
* @example BusMessage (generic escape hatch)
|
|
336
|
+
* ```typescript
|
|
337
|
+
* createHook('BusMessage', {
|
|
338
|
+
* subject: AgentSubjects.tool.use,
|
|
339
|
+
* handler: (ctx) => {
|
|
340
|
+
* if (ctx.payload.toolName === 'dangerous') {
|
|
341
|
+
* ctx.stopPropagation();
|
|
342
|
+
* }
|
|
343
|
+
* },
|
|
344
|
+
* });
|
|
345
|
+
* ```
|
|
346
|
+
*/
|
|
347
|
+
declare function createHook<K extends HookName, S extends SubjectDefinition = SubjectDefinition>(name: K, options: HookOptions<K, S> & {
|
|
348
|
+
handler: (ctx: HookContext<K, S>) => void | Promise<void>;
|
|
349
|
+
priority?: number;
|
|
350
|
+
}): HookRegistration;
|
|
351
|
+
//#endregion
|
|
352
|
+
//#region packages/hooks/src/errors/hook-abort-error.d.ts
|
|
353
|
+
/**
|
|
354
|
+
* Thrown by hooks to abort message processing.
|
|
355
|
+
*
|
|
356
|
+
* This error propagates through AIAgent to the session layer,
|
|
357
|
+
* which emits user_message.completed with outcome 'cancelled'.
|
|
358
|
+
*/
|
|
359
|
+
declare class HookAbortError extends Error {
|
|
360
|
+
readonly hookName: string;
|
|
361
|
+
readonly reason?: string | undefined;
|
|
362
|
+
readonly code = "HOOK_ABORT";
|
|
363
|
+
constructor(hookName: string, reason?: string | undefined);
|
|
364
|
+
}
|
|
365
|
+
//#endregion
|
|
366
|
+
//#region packages/hooks/src/runners/pre-user-message-runner.d.ts
|
|
367
|
+
/**
|
|
368
|
+
* Register a PreUserMessage hook.
|
|
369
|
+
* @param name - Hook name for error attribution
|
|
370
|
+
* @param handler - Hook handler function
|
|
371
|
+
* @param options - Hook configuration options
|
|
372
|
+
* @param priority - Handler priority (higher runs first, default: 0)
|
|
373
|
+
* @returns Unsubscribe function
|
|
374
|
+
*/
|
|
375
|
+
declare function registerPreUserMessageHook(name: string, handler: (ctx: PreUserMessageContext) => void | Promise<void>, options: PreUserMessageHookOptions, priority?: number): () => void;
|
|
376
|
+
/**
|
|
377
|
+
* Reset all hooks. For testing only.
|
|
378
|
+
* Call explicitly in beforeEach() to prevent test pollution.
|
|
379
|
+
*/
|
|
380
|
+
declare function resetPreUserMessageHooks(): void;
|
|
381
|
+
interface PreUserMessageInput {
|
|
382
|
+
agentId?: string;
|
|
383
|
+
adapterId?: string;
|
|
384
|
+
message: MessageInput;
|
|
385
|
+
sessionId?: string;
|
|
386
|
+
sessionContext?: SessionContext;
|
|
387
|
+
messageId?: string;
|
|
388
|
+
cwd?: string;
|
|
389
|
+
}
|
|
390
|
+
interface PreUserMessageResult {
|
|
391
|
+
message: MessageInput;
|
|
392
|
+
sessionContext?: SessionContext;
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Run all registered PreUserMessage hooks.
|
|
396
|
+
* @param input - Input containing message and context
|
|
397
|
+
* @param bus - Bus instance for session enrichment
|
|
398
|
+
* @returns Result with potentially modified message and sessionContext
|
|
399
|
+
* @throws HookAbortError if a hook calls abort()
|
|
400
|
+
*/
|
|
401
|
+
declare function runPreUserMessageHooks(input: PreUserMessageInput, bus: IMakaioBus): Promise<PreUserMessageResult>;
|
|
402
|
+
//#endregion
|
|
403
|
+
//#region packages/hooks/src/runners/post-user-message-runner.d.ts
|
|
404
|
+
/**
|
|
405
|
+
* Reset all hooks. For testing only.
|
|
406
|
+
* Call explicitly in beforeEach() to prevent test pollution.
|
|
407
|
+
*/
|
|
408
|
+
declare function resetPostUserMessageHooks(): void;
|
|
409
|
+
interface PostUserMessageInput {
|
|
410
|
+
agentId: string;
|
|
411
|
+
adapterId: string;
|
|
412
|
+
sessionId?: string;
|
|
413
|
+
messageId?: string;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Run all registered PostUserMessage hooks.
|
|
417
|
+
* @param input - Input containing agent/session identifiers
|
|
418
|
+
* @param bus - Bus instance for making requests
|
|
419
|
+
* @returns Promise that resolves when all hooks complete
|
|
420
|
+
*/
|
|
421
|
+
declare function runPostUserMessageHooks(input: PostUserMessageInput, bus: IMakaioBus): Promise<void>;
|
|
422
|
+
//#endregion
|
|
423
|
+
export { type BusMessageContext, type BusMessageHookOptions, HookAbortError, type HookName, type HookRegistration, type PostStepContext, type PostStepHookOptions, type PostToolUseContext, type PostToolUseHookOptions, type PostTurnContext, type PostTurnHookOptions, type PostUserMessageContext, type PostUserMessageHookOptions, type PostUserMessageInput, type PreToolUseContext, type PreToolUseHookOptions, type PreTurnContext, type PreTurnHookOptions, type PreUserMessageContext, type PreUserMessageHookOptions, type PreUserMessageInput, type SessionEndContext, type SessionEndHookOptions, type SessionHookContext, type SessionStartContext, type SessionStartHookOptions, createHook, registerPreUserMessageHook, resetPostUserMessageHooks, resetPreUserMessageHooks, runPostUserMessageHooks, runPreUserMessageHooks };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{MakaioBus as e}from"@makaio/framework/bus";import{AgentSubjects as t,SessionSubjects as n}from"@makaio/framework/contracts";import{TurnStorageSubjects as r}from"@makaio/framework/services/turn";const i={session:void 0,recentHistory:[],contextExtensions:{}};async function a(e,t){try{let{session:a}=await e.request(n.get,{sessionId:t});if(!a)return i;let[o,s]=await Promise.all([e.request(r.getBySession,{sessionId:t,limit:10}).catch(()=>({turns:[]})),e.requestOptional(n.enrichContext,{sessionId:t}).catch(()=>({handled:!1}))]),c=s.handled?s.data:{};return{session:a,recentHistory:o.turns,contextExtensions:c}}catch{return i}}async function o(e,t){let n=e.payload,r=await a(t,n.sessionId);return{...r.contextExtensions,hookEvent:`PostTurn`,sessionId:n.sessionId,turnId:n.turnId,success:n.success,error:n.error,payload:n,messageId:e.messageId,correlationId:e.correlationId,session:r.session,recentHistory:r.recentHistory,contextExtensions:r.contextExtensions,bus:t,async next(){await e.next()},stopPropagation:e.stopPropagation.bind(e)}}async function s(e,t){let n=e.payload,r=n.sessionId?await a(t,n.sessionId):i;return{...r.contextExtensions,hookEvent:`PostStep`,sessionId:n.sessionId,agentId:n.agentId,adapterId:n.adapterId,adapterName:n.adapterName,messageId:n.messageId,stepType:n.stepType,blockIndex:n.blockIndex,stepContent:n.content,payload:n,correlationId:e.correlationId,session:r.session,recentHistory:r.recentHistory,contextExtensions:r.contextExtensions,bus:t,async next(){await e.next()},stopPropagation:e.stopPropagation.bind(e)}}var c=class extends Error{hookName;reason;code=`HOOK_ABORT`;constructor(e,t){super(`Message aborted by hook: ${e}${t?` - ${t}`:``}`),this.hookName=e,this.reason=t,this.name=`HookAbortError`}},l=class{entries=[];register(e,t,n,r=0){let i={name:e,handler:t,priority:r,options:n};return this.entries.push(i),this.entries.sort((e,t)=>t.priority-e.priority),()=>{let e=this.entries.indexOf(i);e!==-1&&this.entries.splice(e,1)}}reset(){this.entries.length=0}[Symbol.iterator](){return this.entries[Symbol.iterator]()}};const u=new l;function d(e,t,n,r=0){return u.register(e,t,n,r)}function f(){u.reset()}async function p(e,t){let n=e.message,r=e.sessionContext,o=e.sessionId?await a(t,e.sessionId):i;for(let{name:i,handler:a}of u){let s={},l={...o.contextExtensions,get payload(){return{message:n,sessionId:e.sessionId,sessionContext:r,cwd:e.cwd,adapterId:e.adapterId,agentId:e.agentId}},messageId:e.messageId,correlationId:void 0,replacePayload:e=>{e.message!==void 0&&(n=e.message),e.sessionContext!==void 0&&(r=e.sessionContext)},next:async()=>{},abort:e=>{throw new c(i,e)},hookEvent:`PreUserMessage`,session:o.session,recentHistory:o.recentHistory,contextExtensions:o.contextExtensions,bus:t,setTurnContext(e,t){s[e]=t},getTurnContext(){return{...s}}};await a(l);let u=l.getTurnContext();if(Object.keys(u).length>0){let e={...r?.turnContext??{},...u};r={...r,turnContext:e}}}return{message:n,sessionContext:r}}const m=new l;function h(e,t,n,r=0){return m.register(e,t,n,r)}function g(){m.reset()}async function _(e,t){for(let{name:n,handler:r}of m){let i={hookEvent:`PostUserMessage`,agentId:e.agentId,adapterId:e.adapterId,sessionId:e.sessionId,messageId:e.messageId,bus:t};try{await r(i)}catch(e){console.error(`[PostUserMessage] Hook "${n}" failed:`,e)}}}async function v(e,t,n,r,i){try{await r(await n())}catch(n){console.error(`[${e}] Hook '${t}' error:`,n)}await i()}function y(r,i){if(r===`BusMessage`){let t=i;return{unsubscribe:e.intercept(t.subject,t.handler,{priority:t.priority}),hookName:r}}if(r===`PreUserMessage`){let e=i;return{unsubscribe:d(e.name??`anonymous`,e.handler,e,e.priority??0),hookName:r}}if(r===`PostUserMessage`){let e=i;return{unsubscribe:h(e.name??`anonymous`,e.handler,e,e.priority??0),hookName:r}}if(r===`PostTurn`){let t=i,a=t.name??`anonymous`;return{unsubscribe:e.intercept(n.turn.completed,async n=>{await v(`PostTurn`,a,()=>o(n,e),t.handler,()=>n.next())},{priority:t.priority}),hookName:r}}if(r===`PostStep`){let n=i,a=n.stepTypes??[`reasoning`],o=n.name??`anonymous`;return{unsubscribe:e.intercept(t.step.finished,async t=>{if(!a.includes(t.payload.stepType)){await t.next();return}await v(`PostStep`,o,()=>s(t,e),n.handler,()=>t.next())},{priority:n.priority}),hookName:r}}throw Error(`Named hook "${r}" not yet implemented. Use BusMessage for now.`)}export{c as HookAbortError,y as createHook,d as registerPreUserMessageHook,g as resetPostUserMessageHooks,f as resetPreUserMessageHooks,_ as runPostUserMessageHooks,p as runPreUserMessageHooks};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z as e}from"zod";import{createBusNamespace as t}from"@makaio/framework/core";const n=e.string().refine(e=>{let t=e.split(`:`);return t.length===2&&t[0].length>0&&t[1].length>0},{message:`registrationId must be "{packageName}:{windowId}"`}),r=e.record(e.string(),e.string()).optional(),i=e.object({windowId:e.number().int().nonnegative(),registrationId:n,params:r,label:e.string().optional(),visible:e.boolean(),focused:e.boolean()}),a={"window.opened":e.object({windowId:e.number().int().nonnegative(),registrationId:n,params:r,label:e.string().optional(),visible:e.boolean(),focused:e.boolean()}),"window.closed":e.object({windowId:e.number().int().nonnegative(),registrationId:n,params:r}),"window.labelChanged":e.object({windowId:e.number().int().nonnegative(),label:e.string()}),"window.create":{request:e.object({registrationId:n,params:r}),response:e.object({windowId:e.number().int().nonnegative()})},"window.focus":{request:e.object({windowId:e.number().int().nonnegative().optional()}),response:e.object({success:e.boolean()})},"window.list":{request:e.object({}),response:e.object({windows:e.array(i)})},"window.openDashboard":{request:e.object({}),response:e.object({windowId:e.number().nullable()})},"tray.activate":{request:e.object({}),response:e.object({handled:e.boolean()})},"app.focus":{request:e.object({}),response:e.object({focused:e.boolean(),windowId:e.number().int().nonnegative().nullable()})}},o=t(`host`,a),s=o.subjects;export{i,s as n,a as r,o as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{AdapterRuntimeSubjects as e}from"./services/adapter-runtime/namespace.mjs";import{AdapterSubjects as t}from"@makaio/framework/contracts";const n=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],r=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];function i(e,t){return e>>>t|e<<32-t}function a(e){let t=new TextEncoder().encode(e),a=t.length*8,o=t.length+9+63>>6<<6>>>0,s=new Uint8Array(o);s.set(t),s[t.length]=128;let c=new DataView(s.buffer),l=Math.floor(a/4294967296),u=a>>>0;c.setUint32(o-8,l,!1),c.setUint32(o-4,u,!1);let d=[...r],f=new Uint32Array(64);for(let e=0;e<s.length;e+=64){for(let t=0;t<16;t+=1)f[t]=c.getUint32(e+t*4,!1);for(let e=16;e<64;e+=1){let t=i(f[e-15],7)^i(f[e-15],18)^f[e-15]>>>3,n=i(f[e-2],17)^i(f[e-2],19)^f[e-2]>>>10;f[e]=f[e-16]+t+f[e-7]+n>>>0}let[t,r,a,o,s,l,u,p]=d;for(let e=0;e<64;e+=1){let c=i(s,6)^i(s,11)^i(s,25),d=s&l^~s&u,m=p+c+d+n[e]+f[e]>>>0,h=(i(t,2)^i(t,13)^i(t,22))+(t&r^t&a^r&a)>>>0;p=u,u=l,l=s,s=o+m>>>0,o=a,a=r,r=t,t=m+h>>>0}d[0]=d[0]+t>>>0,d[1]=d[1]+r>>>0,d[2]=d[2]+a>>>0,d[3]=d[3]+o>>>0,d[4]=d[4]+s>>>0,d[5]=d[5]+l>>>0,d[6]=d[6]+u>>>0,d[7]=d[7]+p>>>0}return d.map(e=>e.toString(16).padStart(8,`0`)).join(``)}function o(e,t){let n=a(JSON.stringify([e,t]));return[n.slice(0,8),n.slice(8,12),`5${n.slice(13,16)}`,`a${n.slice(17,20)}`,n.slice(20,32)].join(`-`)}function s(e,t){let n=e.machineId??t;if(!n)throw Error(`resolveId requires machineId when no runtime default machine is configured for adapterName="${e.adapterName}"`);return o(n,e.adapterName)}var c=class{currentMachineId;adapterNamesById=new Map;localAdapterIds=new Set;constructor(e){this.currentMachineId=e}replaceKnownAdapterNames(e){for(let e of this.localAdapterIds)this.adapterNamesById.delete(e);if(this.localAdapterIds=new Set,this.currentMachineId)for(let t of e){let e=o(this.currentMachineId,t);this.adapterNamesById.set(e,t),this.localAdapterIds.add(e)}}resolveId(e){let t=s(e,this.currentMachineId);return this.rememberAdapterId(t,e.adapterName),t}rememberAdapterId(e,t){this.adapterNamesById.set(e,t)}resolveAdapterName(e){return this.adapterNamesById.get(e)}async resolveAdapterNameFromKnownNames(e,t){return this.resolveAdapterName(e)||(this.replaceKnownAdapterNames(await t()),this.resolveAdapterName(e))}clear(){this.adapterNamesById.clear(),this.localAdapterIds.clear()}};function l(n,r={}){let i=new c(r.currentMachineId);r.knownAdapterNames&&i.replaceKnownAdapterNames(r.knownAdapterNames);let a=[n.on(t.initialized,e=>{i.rememberAdapterId(e.payload.adapterId,e.payload.adapterName)}),n.on(e.resolveId,e=>{e.setResult({adapterId:i.resolveId(e.payload)})}),n.on(e.resolveName,async e=>{let t=i.resolveAdapterName(e.payload.adapterId)??(r.listKnownAdapterNames?await i.resolveAdapterNameFromKnownNames(e.payload.adapterId,r.listKnownAdapterNames):void 0);if(!t)throw Error(`Adapter not found for adapterId="${e.payload.adapterId}"`);e.setResult({adapterName:t})})];return{registry:i,cleanup:()=>{for(let e of a)e()}}}export{s as i,o as n,l as r,c as t};
|