@open-everywhere/provider-slack 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +21 -0
- package/README.md +47 -0
- package/agent/access/slack-attachment-fetch.ts +168 -0
- package/agent/app-manifest.ts +149 -0
- package/agent/channels/slack-approval-card.ts +275 -0
- package/agent/channels/slack-attachments.ts +195 -0
- package/agent/channels/slack-commands.ts +227 -0
- package/agent/channels/slack-context.ts +185 -0
- package/agent/channels/slack-events.ts +5406 -0
- package/agent/channels/slack-front.ts +2349 -0
- package/agent/channels/slack-identity.ts +520 -0
- package/agent/channels/slack-input-response.ts +162 -0
- package/agent/channels/slack-mrkdwn.ts +61 -0
- package/agent/channels/slack-origin-codec.ts +62 -0
- package/agent/channels/slack-post-arm.ts +314 -0
- package/agent/channels/slack-read.ts +248 -0
- package/agent/channels/slack-route-hold.ts +107 -0
- package/agent/channels/slack-shortcut.ts +336 -0
- package/agent/channels/slack-signature.ts +53 -0
- package/agent/channels/slack-spend-gate.ts +62 -0
- package/agent/channels/slack-tenant-fence.ts +99 -0
- package/agent/channels/slack-wake-backscroll.ts +604 -0
- package/agent/channels/slack-web-api.ts +178 -0
- package/agent/channels/slack-webhook-verifier.ts +116 -0
- package/agent/channels/slack.ts +1266 -0
- package/agent/contributions.ts +32 -0
- package/agent/docs-generated.ts +15 -0
- package/agent/ops.ts +50 -0
- package/agent/provider-events.ts +91 -0
- package/agent/register.ts +144 -0
- package/agent/surface-parity.ts +99 -0
- package/dist/agent/access/slack-attachment-fetch.d.ts +15 -0
- package/dist/agent/access/slack-attachment-fetch.d.ts.map +1 -0
- package/dist/agent/access/slack-attachment-fetch.js +151 -0
- package/dist/agent/access/slack-attachment-fetch.js.map +1 -0
- package/dist/agent/app-manifest.d.ts +15 -0
- package/dist/agent/app-manifest.d.ts.map +1 -0
- package/dist/agent/app-manifest.js +141 -0
- package/dist/agent/app-manifest.js.map +1 -0
- package/dist/agent/channels/slack-approval-card.d.ts +71 -0
- package/dist/agent/channels/slack-approval-card.d.ts.map +1 -0
- package/dist/agent/channels/slack-approval-card.js +232 -0
- package/dist/agent/channels/slack-approval-card.js.map +1 -0
- package/dist/agent/channels/slack-attachments.d.ts +66 -0
- package/dist/agent/channels/slack-attachments.d.ts.map +1 -0
- package/dist/agent/channels/slack-attachments.js +174 -0
- package/dist/agent/channels/slack-attachments.js.map +1 -0
- package/dist/agent/channels/slack-commands.d.ts +27 -0
- package/dist/agent/channels/slack-commands.d.ts.map +1 -0
- package/dist/agent/channels/slack-commands.js +208 -0
- package/dist/agent/channels/slack-commands.js.map +1 -0
- package/dist/agent/channels/slack-context.d.ts +26 -0
- package/dist/agent/channels/slack-context.d.ts.map +1 -0
- package/dist/agent/channels/slack-context.js +178 -0
- package/dist/agent/channels/slack-context.js.map +1 -0
- package/dist/agent/channels/slack-events.d.ts +1654 -0
- package/dist/agent/channels/slack-events.d.ts.map +1 -0
- package/dist/agent/channels/slack-events.js +4240 -0
- package/dist/agent/channels/slack-events.js.map +1 -0
- package/dist/agent/channels/slack-front.d.ts +387 -0
- package/dist/agent/channels/slack-front.d.ts.map +1 -0
- package/dist/agent/channels/slack-front.js +1958 -0
- package/dist/agent/channels/slack-front.js.map +1 -0
- package/dist/agent/channels/slack-identity.d.ts +245 -0
- package/dist/agent/channels/slack-identity.d.ts.map +1 -0
- package/dist/agent/channels/slack-identity.js +405 -0
- package/dist/agent/channels/slack-identity.js.map +1 -0
- package/dist/agent/channels/slack-input-response.d.ts +26 -0
- package/dist/agent/channels/slack-input-response.d.ts.map +1 -0
- package/dist/agent/channels/slack-input-response.js +127 -0
- package/dist/agent/channels/slack-input-response.js.map +1 -0
- package/dist/agent/channels/slack-mrkdwn.d.ts +3 -0
- package/dist/agent/channels/slack-mrkdwn.d.ts.map +1 -0
- package/dist/agent/channels/slack-mrkdwn.js +53 -0
- package/dist/agent/channels/slack-mrkdwn.js.map +1 -0
- package/dist/agent/channels/slack-origin-codec.d.ts +7 -0
- package/dist/agent/channels/slack-origin-codec.d.ts.map +1 -0
- package/dist/agent/channels/slack-origin-codec.js +55 -0
- package/dist/agent/channels/slack-origin-codec.js.map +1 -0
- package/dist/agent/channels/slack-post-arm.d.ts +54 -0
- package/dist/agent/channels/slack-post-arm.d.ts.map +1 -0
- package/dist/agent/channels/slack-post-arm.js +268 -0
- package/dist/agent/channels/slack-post-arm.js.map +1 -0
- package/dist/agent/channels/slack-read.d.ts +84 -0
- package/dist/agent/channels/slack-read.d.ts.map +1 -0
- package/dist/agent/channels/slack-read.js +205 -0
- package/dist/agent/channels/slack-read.js.map +1 -0
- package/dist/agent/channels/slack-route-hold.d.ts +34 -0
- package/dist/agent/channels/slack-route-hold.d.ts.map +1 -0
- package/dist/agent/channels/slack-route-hold.js +97 -0
- package/dist/agent/channels/slack-route-hold.js.map +1 -0
- package/dist/agent/channels/slack-shortcut.d.ts +162 -0
- package/dist/agent/channels/slack-shortcut.d.ts.map +1 -0
- package/dist/agent/channels/slack-shortcut.js +262 -0
- package/dist/agent/channels/slack-shortcut.js.map +1 -0
- package/dist/agent/channels/slack-signature.d.ts +19 -0
- package/dist/agent/channels/slack-signature.d.ts.map +1 -0
- package/dist/agent/channels/slack-signature.js +50 -0
- package/dist/agent/channels/slack-signature.js.map +1 -0
- package/dist/agent/channels/slack-spend-gate.d.ts +22 -0
- package/dist/agent/channels/slack-spend-gate.d.ts.map +1 -0
- package/dist/agent/channels/slack-spend-gate.js +48 -0
- package/dist/agent/channels/slack-spend-gate.js.map +1 -0
- package/dist/agent/channels/slack-tenant-fence.d.ts +61 -0
- package/dist/agent/channels/slack-tenant-fence.d.ts.map +1 -0
- package/dist/agent/channels/slack-tenant-fence.js +88 -0
- package/dist/agent/channels/slack-tenant-fence.js.map +1 -0
- package/dist/agent/channels/slack-wake-backscroll.d.ts +188 -0
- package/dist/agent/channels/slack-wake-backscroll.d.ts.map +1 -0
- package/dist/agent/channels/slack-wake-backscroll.js +473 -0
- package/dist/agent/channels/slack-wake-backscroll.js.map +1 -0
- package/dist/agent/channels/slack-web-api.d.ts +46 -0
- package/dist/agent/channels/slack-web-api.d.ts.map +1 -0
- package/dist/agent/channels/slack-web-api.js +147 -0
- package/dist/agent/channels/slack-web-api.js.map +1 -0
- package/dist/agent/channels/slack-webhook-verifier.d.ts +5 -0
- package/dist/agent/channels/slack-webhook-verifier.d.ts.map +1 -0
- package/dist/agent/channels/slack-webhook-verifier.js +112 -0
- package/dist/agent/channels/slack-webhook-verifier.js.map +1 -0
- package/dist/agent/channels/slack.d.ts +37 -0
- package/dist/agent/channels/slack.d.ts.map +1 -0
- package/dist/agent/channels/slack.js +1169 -0
- package/dist/agent/channels/slack.js.map +1 -0
- package/dist/agent/contributions.d.ts +17 -0
- package/dist/agent/contributions.d.ts.map +1 -0
- package/dist/agent/contributions.js +32 -0
- package/dist/agent/contributions.js.map +1 -0
- package/dist/agent/docs-generated.d.ts +3 -0
- package/dist/agent/docs-generated.d.ts.map +1 -0
- package/dist/agent/docs-generated.js +13 -0
- package/dist/agent/docs-generated.js.map +1 -0
- package/dist/agent/ops.d.ts +3 -0
- package/dist/agent/ops.d.ts.map +1 -0
- package/dist/agent/ops.js +38 -0
- package/dist/agent/ops.js.map +1 -0
- package/dist/agent/provider-events.d.ts +3 -0
- package/dist/agent/provider-events.d.ts.map +1 -0
- package/dist/agent/provider-events.js +84 -0
- package/dist/agent/provider-events.js.map +1 -0
- package/dist/agent/register.d.ts +5 -0
- package/dist/agent/register.d.ts.map +1 -0
- package/dist/agent/register.js +118 -0
- package/dist/agent/register.js.map +1 -0
- package/dist/agent/surface-parity.d.ts +3 -0
- package/dist/agent/surface-parity.d.ts.map +1 -0
- package/dist/agent/surface-parity.js +95 -0
- package/dist/agent/surface-parity.js.map +1 -0
- package/package.json +209 -0
- package/tsconfig.build.json +22 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../agent/channels/slack.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,kFAAkF;AAClF,4EAA4E;AAC5E,oFAAoF;AACpF,8EAA8E;AAC9E,gFAAgF;AAChF,uEAAuE;AACvE,EAAE;AACF,gFAAgF;AAChF,qFAAqF;AACrF,oFAAoF;AACpF,sBAAsB;AACtB,EAAE;AACF,oEAAoE;AACpE,oFAAoF;AACpF,8EAA8E;AAC9E,kFAAkF;AAElF,OAAO,EACL,YAAY,GAKb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,oBAAoB,EACpB,SAAS,GAGV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,SAAS,EACT,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,OAAO,EACP,MAAM,EACN,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,OAAO,EACP,yBAAyB,EACzB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,6BAA6B,EAI7B,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,qBAAqB,EAA8B,MAAM,mBAAmB,CAAC;AACtM,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,4FAA4F;AAC5F,+FAA+F;AAE/F,8EAA8E;AAC9E,0EAA0E;AAC1E,kFAAkF;AAClF,8EAA8E;AAC9E,oEAAoE;AACpE,EAAE;AACF,iFAAiF;AACjF,8EAA8E;AAC9E,+EAA+E;AAC/E,sFAAsF;AAEtF,gFAAgF;AAChF,mFAAmF;AACnF,qFAAqF;AACrF,gFAAgF;AAChF,qFAAqF;AACrF,iFAAiF;AACjF,4DAA4D;AAC5D;;yFAEyF;AACzF,SAAS,sBAAsB,CAAC,SAA6B;IAC3D,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1C,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjD,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,KAA4D;IAC9E,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,gBAAgB,CAAC;YACzB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;SACjK,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACvF,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,CAAC;IACpB,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,oFAAoF;AACpF,sFAAsF;AACtF,0FAA0F;AAC1F,qFAAqF;AACrF,wFAAwF;AACxF,KAAK,UAAU,mBAAmB,CAAC,OAA0B;IAC3D,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;AACH,CAAC;AAED,kGAAkG;AAClG,qGAAqG;AACrG,kGAAkG;AAClG,+FAA+F;AAC/F,iGAAiG;AACjG,iGAAiG;AACjG,kFAAkF;AAClF,sEAAsE;AACtE,KAAK,UAAU,aAAa,CAAC,OAA0B,EAAE,MAAe;IACtE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;IACvD,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;YACvG,MAAM,SAAS,CAAC,6BAA6B,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,oGAAoG;AACpG,kGAAkG;AAClG,oGAAoG;AACpG,oGAAoG;AACpG,KAAK,UAAU,YAAY,CAAC,OAA0B,EAAE,IAAY;IAClE,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;IACvD,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpF,MAAM,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IACD,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAiB,EAAE,QAA4B,EAAE,IAAY;IAClG,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5F,IAAI,QAAQ;QAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,+EAA+E;AAC/E,uFAAuF;AACvF,mFAAmF;AACnF,mFAAmF;AACnF,gFAAgF;AAChF,uFAAuF;AACvF,oFAAoF;AACpF,gEAAgE;AAChE,SAAS,WAAW,CAAC,KAAc;IACjC,OAAQ,KAA6C,EAAE,WAAW,KAAK,IAAI,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAsF,EACtF,KAAa,EACb,OAAe;IAEf,OAAO,CAAC,IAAI,CAAC,2BAA2B,KAAK,kDAAkD,OAAO,GAAG,CAAC,CAAC;IAC3G,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,gBAAgB,CAAC;YACzB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;SACjK,CAAC,CAAC;QACH,MAAM,mBAAmB,EAAE,CAAC,WAAW,CAAC;YACtC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,oBAAoB;YAC5B,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SACzF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,0DAA0D,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC;AAED,uFAAuF;AACvF,0FAA0F;AAC1F,sFAAsF;AACtF,+DAA+D;AAC/D,KAAK,UAAU,iBAAiB,CAAC,KAAkB,EAAE,KAA6B,EAAE,gBAAyB;IAC3G,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;IAChC,8FAA8F;IAC9F,iGAAiG;IACjG,iGAAiG;IACjG,+FAA+F;IAC/F,sCAAsC;IACtC,MAAM,SAAS,GAAG,gBAAgB,IAAI,KAAK,CAAC,QAAQ,CAAC;IACrD,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS;QAAE,OAAO;IACnC,iGAAiG;IACjG,kGAAkG;IAClG,kGAAkG;IAClG,gGAAgG;IAChG,IAAI,aAAa,CAAC,yBAAyB,CAAC;QAAE,OAAO;IACrD,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACxG,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;IACH,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,0EAA0E;AAC1E,KAAK,UAAU,gBAAgB,CAAC,OAA0B;IACxD,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,2EAA2E;QAC3E,2EAA2E;QAC3E,MAAM,IAAI,GAAG;YACX,OAAO,EAAE,EAAE,IAAI,EAAE,OAAgB,EAAE;YACnC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;SAC/I,CAAC;QACF,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACjC,sFAAsF;QACtF,8FAA8F;QAC9F,mFAAmF;QACnF,0EAA0E;QAC1E,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QAE9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACtE,IAAI,EAAsB,CAAC;QAC3B,MAAM,KAAK,GAAI,IAA4B,CAAC,KAAK,CAAC;QAClD,IAAI,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAI,EAAqD,EAAE,OAAO,CAAC;gBAC1E,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;oBACjG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;oBACV,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrF,MAAM,QAAQ,GAAI,MAA2B,CAAC,EAAE,CAAC;YACjD,IAAI,MAAM,CAAC,EAAE,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;IAC7D,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,KAAK,UAAU,gBAAgB,CAAC,GAAiB,EAAE,SAAiB,EAAE,IAAkB;IACtF,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACnF,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,wCAAwC;IACvD,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,kGAAkG;AAClG,iGAAiG;AACjG,mFAAmF;AACnF,MAAM,YAAY,GAAG,IAAI,GAAG,EAA0D,CAAC;AAEvF,KAAK,UAAU,eAAe,CAAC,GAAiB,EAAE,OAAqB,EAAE,IAAkB;IACzF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACtC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,sCAAsC;IAChE,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,YAAY,EAAE;QAAE,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IAC/F,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACrE,MAAM,EAAE,cAAc,EAAE,GAAG,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACtE,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACpE,OAAO,EAAE,GAAG,IAAI,EAAE,cAAc,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,0DAA0D;IACzE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAiB,EAAE,OAAqB,EAAE,IAAa;IACjF,OAAO,IAAI;QACT,CAAC,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,wCAAwC;QAChH,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,aAAa,CAAC,OAAqB,EAAE,KAAmB;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,oCAAoC;IAC9D,kGAAkG;IAClG,gGAAgG;IAChG,mGAAmG;IACnG,mGAAmG;IACnG,iCAAiC;IACjC,MAAM,YAAY,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO,cAAc,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;QACvD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,cAAc,EAAE,KAAK,CAAC,cAAc;KACrC,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,oFAAoF;AACpF,qFAAqF;AACrF,uFAAuF;AACvF,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,oFAAoF;AACpF,2EAA2E;AAC3E,EAAE;AACF,gGAAgG;AAChG,8FAA8F;AAC9F,iGAAiG;AACjG,iGAAiG;AACjG,oGAAoG;AACpG,8BAA8B;AAC9B,KAAK,UAAU,YAAY,CAAC,GAAiB,EAAE,KAAsB;IACnE,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,uEAAuE;QAClI,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,SAAS;YAAE,OAAO,CAAC,oBAAoB;QAExE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACpF,MAAM,YAAY,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClF,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnD,GAAG,CAAC,WAAW,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,uBAAuB,EAAE,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC9H,wFAAwF;gBACxF,2FAA2F;gBAC3F,4CAA4C;gBAC5C,MAAM,eAAe,CAAC;oBACpB,QAAQ;oBACR,SAAS,EAAE,CAAC;oBACZ,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,GAAG;oBACV,OAAO,EAAE,8BAA8B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG;oBAC7D,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,IAAI,EAAE,qBAAqB;iBAC5B,CAAC,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qFAAqF;QACvF,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACpD,4FAA4F;QAC5F,MAAM,eAAe,CAAC;YACpB,QAAQ,EAAE,WAAW,EAAE;YACvB,SAAS,EAAE,CAAC;YACZ,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,cAAc,CAAC,CAAC,UAAU,EAAE;YACrC,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,aAAa;SACpB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,oFAAoF;YACpF,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,cAAc,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,uFAAuF;AACvF,sFAAsF;AACtF,SAAS,kBAAkB,CAAC,OAAqB,EAAE,KAAmB;IACpE,MAAM,UAAU,GAA2B;QACzC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;QAC7B,UAAU,EAAE,OAAO,CAAC,SAAS;QAC7B,YAAY,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;KACtC,CAAC;IACF,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,SAAS;QAAE,UAAU,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/F,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,UAAU,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACnG,IAAI,KAAK,CAAC,cAAc;QAAE,UAAU,CAAC,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC;IAC7E,OAAO;QACL,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;KACvH,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAqB,EAAE,KAAmB;IACrE,OAAO,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9D,CAAC;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,IAAI,GAAG,IAAI,CAAC;AAElB;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,gBAAgB,CAAC,OAAqB,EAAE,MAAc,EAAE,MAAM,GAA4B,EAAE;IACnG,OAAO,aAAa,CAClB,CAAC,KAAK,IAAI,EAAE;QACV,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,gBAAgB,CAAC;gBACzB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;gBAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;aAC/J,CAAC,CAAC;YACH,MAAM,mBAAmB,EAAE,CAAC,WAAW,CAAC;gBACtC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC5B,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,MAAM,EAAE,sBAAsB;gBAC9B,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE;aAC1E,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC,CAAC,EAAE,CACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,GAAiB,EACjB,OAAqB,EACrB,IAAa;AACb,oGAAoG;AACpG,OAA2B;IAE3B,2FAA2F;IAC3F,+FAA+F;IAC/F,6FAA6F;IAC7F,yFAAyF;IACzF,8FAA8F;IAC9F,gGAAgG;IAChG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,UAAU,GAAI,GAAG,CAAC,MAAqC,CAAC,MAAM,CAAC;QACrE,MAAM,MAAM,GACV,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YACrD,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,0FAA0F;gBAC1F,wFAAwF;gBACxF,mFAAmF;gBACnF,sFAAsF;gBACtF,+BAA+B;gBAC/B,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,MAAM;YAAE,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACvD,CAAC;IACD,kFAAkF;IAClF,qFAAqF;IACrF,sFAAsF;IACtF,uFAAuF;IACvF,uFAAuF;IACvF,wFAAwF;IACxF,sFAAsF;IACtF,sFAAsF;IACtF,uFAAuF;IACvF,yEAAyE;IACzE,EAAE;IACF,+FAA+F;IAC/F,8FAA8F;IAC9F,6FAA6F;IAC7F,8FAA8F;IAC9F,+FAA+F;IAC/F,gGAAgG;IAChG,8FAA8F;IAC9F,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,OAAQ,OAAO,CAAC,GAA4B,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,OAAO,CAAC,GAA0B,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5I,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;YACpD,2FAA2F;YAC3F,2FAA2F;YAC3F,qFAAqF;YACrF,4DAA4D;YAC5D,OAAO,CAAC,GAAG,CACT,uEAAuE,QAAQ,IAAI,GAAG,YAAY,OAAO,CAAC,MAAM,IAAI,GAAG,oCAAoC,CAC5J,CAAC;YACF,MAAM,gBAAgB,CAAC,OAAO,EAAE,yCAAyC,EAAE,EAAE,KAAK,EAAE,QAAQ,IAAI,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;YACtI,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,0EAA0E,QAAQ,YAAY,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC;IAC5I,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE7D,gGAAgG;IAChG,gGAAgG;IAChG,8FAA8F;IAC9F,0FAA0F;IAC1F,iGAAiG;IACjG,0FAA0F;IAC1F,iGAAiG;IACjG,sCAAsC;IACtC,8FAA8F;IAC9F,+FAA+F;IAC/F,2FAA2F;IAC3F,wFAAwF;IACxF,0FAA0F;IAC1F,iGAAiG;IACjG,yEAAyE;IACzE,kGAAkG;IAClG,kGAAkG;IAClG,gGAAgG;IAChG,4DAA4D;IAC5D,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAChE,IAAI,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,YAAY,EAAE,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACnH,MAAM,gBAAgB,CAAC,OAAO,EAAE,6BAA6B,EAAE;YAC7D,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;YAC5B,UAAU,EAAE,mBAAmB,IAAI,IAAI;SACxC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,mBAAmB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,UAAU,EAAE,CAAC;QACjG,OAAO,CAAC,GAAG,CACT,4EAA4E,OAAO,CAAC,SAAS,8DAA8D,CAC5J,CAAC;QACF,MAAM,gBAAgB,CAAC,OAAO,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC,CAAC;QACxH,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;QACrE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gGAAgG;IAChG,gGAAgG;IAChG,+FAA+F;IAC/F,gGAAgG;IAChG,gGAAgG;IAChG,iGAAiG;IACjG,uBAAuB;IACvB,EAAE;IACF,+FAA+F;IAC/F,gGAAgG;IAChG,6FAA6F;IAC7F,6EAA6E;IAC7E,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC;QAChC,QAAQ,EAAE,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC;QAC5C,IAAI;QACJ,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IACrB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,8FAA8F;QAC9F,+FAA+F;QAC/F,2DAA2D;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kFAAkF;IAClF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IACD,4EAA4E;IAC5E,MAAM,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAE9C,2FAA2F;IAC3F,+FAA+F;IAC/F,+FAA+F;IAC/F,gGAAgG;IAChG,2FAA2F;IAC3F,+FAA+F;IAC/F,kGAAkG;IAClG,sCAAsC;IAEtC,mFAAmF;IACnF,oFAAoF;IACpF,kFAAkF;IAClF,kFAAkF;IAClF,oFAAoF;IACpF,4CAA4C;IAC5C,IAAI,OAAsC,CAAC;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACtD,qFAAqF;QACrF,+DAA+D;QAC/D,MAAM,iBAAiB,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACpI,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAiB,EACjB,OAAqB,EACrB,IAAa,EACb,GAAG,GAA6D,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;IAEnH,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CACV,6FAA6F,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,EAAE,GAAG,CAChI,CAAC;QACF,MAAM,gBAAgB,CAAC,OAAO,EAAE,qDAAqD,CAAC,CAAC;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4FAA4F;AAC5F,6FAA6F;AAC7F,wFAAwF;AACxF,YAAY;AACZ,MAAM,mBAAmB,GAAG,YAAY,CAAC;IACvC,KAAK,EAAE,oBAAoB;IAC3B,+FAA+F;IAC/F,4FAA4F;IAC5F,gGAAgG;IAChG,iGAAiG;IACjG,iGAAiG;IACjG,UAAU,EAAE,OAAO;IACnB,qFAAqF;IACrF,YAAY,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC;IACjE,eAAe,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC;IACnE,+FAA+F;IAC/F,kGAAkG;IAClG,uFAAuF;IACvF,uFAAuF;IACvF,oFAAoF;IACpF,eAAe,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,uBAAuB,CAAC,GAAG,EAAE,UAAU,CAAC;IAC9E,MAAM,EAAE;QACN,+EAA+E;QAC/E,gFAAgF;QAChF,iFAAiF;QACjF,mFAAmF;QACnF,+EAA+E;QAC/E,0EAA0E;QAC1E,sFAAsF;QACtF,2CAA2C;QAC3C,EAAE;QACF,wFAAwF;QACxF,qFAAqF;QACrF,oFAAoF;QACpF,sFAAsF;QACtF,yFAAyF;QACzF,uFAAuF;QACvF,2EAA2E;QAC3E,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;YAC5C,oFAAoF;YACpF,IAAI,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAiD,CAAC;gBAC7F,MAAM,SAAS,GAAG,OAAO,KAAK,EAAE,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;gBACvF,MAAM,QAAQ,GAAG,OAAO,KAAK,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpF,oFAAoF;gBACpF,sEAAsE;gBACrE,OAAO,CAAC,KAA4C,CAAC,aAAa,GAAG,SAAS;oBAC7E,CAAC,CAAE,EAAE,SAAS,EAAE,QAAQ,EAAmC;oBAC3D,CAAC,CAAC,SAAS,CAAC;YAChB,CAAC;YACD,gGAAgG;YAChG,6FAA6F;YAC7F,sFAAsF;YACtF,+FAA+F;YAC/F,6FAA6F;YAC7F,kEAAkE;YACjE,OAAO,CAAC,KAA4C,CAAC,kBAAkB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YAChG,8FAA8F;YAC9F,yFAAyF;YACzF,iFAAiF;YACjF,8FAA8F;YAC9F,6FAA6F;YAC7F,2FAA2F;YAC3F,kCAAkC;YAClC,CAAC;gBACC,MAAM,KAAK,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAiD,CAAC;gBAC7F,IAAI,KAAK,EAAE,YAAY,KAAK,IAAI,EAAE,CAAC;oBAChC,OAAO,CAAC,KAA4C,CAAC,cAAc;wBAClE,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;gBACtE,CAAC;YACH,CAAC;YACD,sEAAsE;YACtE,OAAO,CAAC,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC;YAC/C,MAAM,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7C,CAAC;QACD,uFAAuF;QACvF,0FAA0F;QAC1F,0FAA0F;QAC1F,uFAAuF;QACvF,mFAAmF;QACnF,0FAA0F;QAC1F,8FAA8F;QAC9F,8FAA8F;QAC9F,gGAAgG;QAChG,2FAA2F;QAC3F,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC;YACnD,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI;gBAAE,OAAO;YACjE,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC;YAC5C,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,8EAA8E;QAC9E,qFAAqF;QACrF,uFAAuF;QACvF,sFAAsF;QACtF,kFAAkF;QAClF,sFAAsF;QACtF,mFAAmF;QACnF,8BAA8B;QAC9B,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,uFAAuF;QACvF,uFAAuF;QACvF,qFAAqF;QACrF,+EAA+E;QAC/E,gFAAgF;QAChF,sFAAsF;QACtF,qFAAqF;QACrF,sFAAsF;QACtF,mFAAmF;QACnF,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;YAChD,sFAAsF;YACtF,8FAA8F;YAC9F,MAAM,SAAS,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;YACnC,6FAA6F;YAC7F,8FAA8F;YAC9F,iBAAiB;YACjB,6FAA6F;YAC7F,2FAA2F;YAC3F,8FAA8F;YAC9F,+FAA+F;YAC/F,MAAM,MAAM,GAAI,GAA2D,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YAC/F,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClF,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACzC,iFAAiF;gBACjF,mFAAmF;gBACnF,0CAA0C;gBAC1C,OAAO;YACT,CAAC;YACD,oFAAoF;YACpF,gFAAgF;YAChF,mFAAmF;YACnF,yDAAyD;YACzD,MAAM,kBAAkB,GAAG,yBAAyB,EAAE,CAAC;YACvD,iFAAiF;YACjF,mFAAmF;YACnF,oEAAoE;YACpE,MAAM,eAAe,GAAG,sBAAsB,EAAE,CAAC;YACjD,8FAA8F;YAC9F,oDAAoD;YACpD,MAAM,eAAe,GAAG,sBAAsB,CAAE,GAA2D,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;YAChI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,6EAA6E;gBAC7E,2EAA2E;gBAC3E,+DAA+D;gBAC9D,OAAO,CAAC,KAA4C,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC1E,0EAA0E;gBAC1E,0EAA0E;gBAC1E,8EAA8E;gBAC9E,wDAAwD;gBACxD,OAAO,CAAC,GAAG,CACT,2CAA2C,MAAM,CAAC,MAAM,uBAAuB,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,GAAG,GAAG,CAClJ,CAAC;gBACF,wFAAwF;gBACxF,4FAA4F;gBAC5F,uFAAuF;gBACvF,0FAA0F;gBAC1F,0FAA0F;gBAC1F,iFAAiF;gBACjF,EAAE;gBACF,wFAAwF;gBACxF,4FAA4F;gBAC5F,8EAA8E;gBAC9E,IAAI,MAAM,CAAC,MAAM,KAAK,wBAAwB,EAAE,CAAC;oBAC/C,IAAI,CAAC;wBACH,MAAM,CAAC,GAAG,gBAAgB,CAAC;4BACzB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;4BAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;yBACjL,CAAC,CAAC;wBACH,MAAM,4BAA4B,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;oBACnD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,IAAI,CAAC,iEAAiE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC/F,CAAC;gBACH,CAAC;gBACD,2EAA2E;gBAC3E,6EAA6E;gBAC7E,2EAA2E;gBAC3E,4EAA4E;gBAC5E,mEAAmE;gBACnE,IAAI,UAAU,CAAC,MAAM,EAAE,eAAe,IAAI,eAAe,CAAC,EAAE,CAAC;oBAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;oBACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC;oBACrD,OAAO,CAAC,IAAI,CACV,0FAA0F;wBACxF,IAAI,SAAS,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,6EAA6E,CACvH,CAAC;oBACF,IAAI,CAAC;wBACH,MAAM,CAAC,GAAG,gBAAgB,CAAC;4BACzB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;4BAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;yBACnK,CAAC,CAAC;wBACH,MAAM,mBAAmB,EAAE,CAAC,WAAW,CAAC;4BACtC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BAC5B,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,OAAO,EAAE,CAAC,CAAC,OAAO;4BAClB,MAAM,EAAE,gBAAgB;4BACxB,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;yBAC1D,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,IAAI,CAAC,yDAAyD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACvF,CAAC;gBACH,CAAC;gBACD,oFAAoF;gBACpF,kFAAkF;gBAClF,oFAAoF;gBACpF,oFAAoF;gBACpF,8EAA8E;gBAC9E,uEAAuE;gBACvE,IAAI,CAAC;oBACH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;oBACtD,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;wBAC1B,MAAM,CAAC,GAAG,gBAAgB,CAAC;4BACzB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;4BAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;yBAC/I,CAAC,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,mBAAmB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;wBACnD,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;4BACtC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;4BACzD,IAAI,MAAM,IAAI,iBAAiB,EAAE,CAAC;gCAChC,MAAM,eAAe,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gCACnC,OAAO,CAAC,GAAG,CACT,kDAAkD,MAAM,+BAA+B,SAAS,IAAI,QAAQ,GAAG,CAChH,CAAC;4BACJ,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,kEAAkE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChG,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACP,iCAAiC;gBACnC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,mFAAmF;YACnF,uFAAuF;YACvF,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;YAC3D,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC7B,iFAAiF;gBACjF,8EAA8E;gBAC9E,OAAO;YACT,CAAC;YACA,OAAO,CAAC,KAA4C,CAAC,YAAY,GAAG,KAAK,CAAC;YAC3E,mFAAmF;YACnF,kFAAkF;YAClF,uFAAuF;YACvF,qFAAqF;YACrF,qFAAqF;YACrF,0FAA0F;YAC1F,wFAAwF;YACxF,yFAAyF;YACzF,uFAAuF;YACvF,0FAA0F;YAC1F,EAAE;YACF,2FAA2F;YAC3F,4FAA4F;YAC5F,2FAA2F;YAC3F,4FAA4F;YAC5F,uFAAuF;YACvF,uFAAuF;YACvF,0FAA0F;YAC1F,gFAAgF;YAChF,IAAI,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAI,OAAO,CAAC,KAA4C,CAAC,aAAkD,CAAC;gBACxH,gFAAgF;gBAChF,oFAAoF;gBACpF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;gBACvD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;gBACpC,MAAM,SAAS,GAAG,SAAS;oBACzB,CAAC,CAAC,gBAAgB,CAAC;wBACf,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;wBAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;qBAC/I,CAAC;oBACJ,CAAC,CAAC,SAAS,CAAC;gBACd,wFAAwF;gBACxF,yFAAyF;gBACzF,uFAAuF;gBACvF,2FAA2F;gBAC3F,2FAA2F;gBAC3F,wFAAwF;gBACxF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,4CAA4C,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC;gBACzI,IAAI,QAAQ,CAAC,YAAY,IAAI,qBAAqB,CAAC,IAAI,EAAE,eAAe,EAAE,kBAAkB,CAAC,EAAE,CAAC;oBAC9F,qFAAqF;oBACrF,sFAAsF;oBACtF,yFAAyF;oBACzF,kFAAkF;oBAClF,OAAO,CAAC,IAAI,CACV,6IAA6I,SAAS,IAAI,GAAG,IAAI,MAAM,EAAE,QAAQ,IAAI,WAAW,GAAG,CACpM,CAAC;oBACF,IAAI,SAAS,EAAE,CAAC;wBACd,IAAI,CAAC;4BACH,MAAM,mBAAmB,EAAE,CAAC,WAAW,CAAC;gCACtC,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gCAC5B,GAAG,EAAE,SAAS,CAAC,GAAG;gCAClB,QAAQ,EAAE,SAAS,CAAC,QAAQ;gCAC5B,SAAS,EAAE,SAAS,CAAC,SAAS;gCAC9B,OAAO,EAAE,SAAS,CAAC,OAAO;gCAC1B,MAAM,EAAE,+BAA+B;gCACvC,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;6BACvG,CAAC,CAAC;wBACL,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,OAAO,CAAC,IAAI,CAAC,wEAAwE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACtG,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM,sBAAsB,CAAC;oBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM;oBACN,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI;wBACvB,kFAAkF;wBAClF,iFAAiF;wBACjF,oFAAoF;wBACpF,mFAAmF;wBACnF,0EAA0E;wBAC1E,MAAM,QAAQ,CAAC;4BACb,GAAG,EAAE,SAAS,EAAE,GAAG;4BACnB,GAAG,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;4BACpH,GAAG,EAAE,KAAK,IAAI,EAAE;gCACd,MAAM,SAAS,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;4BAC9E,CAAC;yBACF,CAAC,CAAC;oBACL,CAAC;oBACD,KAAK,CAAC,iBAAiB;wBACrB,IAAI,CAAC,SAAS;4BAAE,OAAO,SAAS,CAAC;wBACjC,IAAI,CAAC;4BACH,OAAO,CAAC,MAAM,mBAAmB,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC;wBACrG,CAAC;wBAAC,MAAM,CAAC;4BACP,OAAO,SAAS,CAAC;wBACnB,CAAC;oBACH,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU;wBACxB,IAAI,CAAC,SAAS;4BAAE,OAAO;wBACvB,gFAAgF;wBAChF,+EAA+E;wBAC/E,+EAA+E;wBAC/E,kFAAkF;wBAClF,uFAAuF;wBACvF,0EAA0E;wBAC1E,MAAM,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC1H,CAAC;iBACF,CAAC,CAAC;gBACH,yFAAyF;gBACzF,wFAAwF;gBACxF,yFAAyF;gBACzF,sFAAsF;gBACtF,IAAI,eAAe,IAAI,kBAAkB,EAAE,CAAC;oBACzC,OAAO,CAAC,KAA4C,CAAC,WAAW,GAAG,KAAK,CAAC;gBAC5E,CAAC;gBACD,OAAO,CAAC,iFAAiF;YAC3F,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,wFAAwF;gBACxF,8FAA8F;gBAC9F,0FAA0F;gBAC1F,0FAA0F;gBAC1F,6FAA6F;gBAC7F,4EAA4E;gBAC5E,4FAA4F;gBAC5F,0FAA0F;gBAC1F,6FAA6F;gBAC7F,sFAAsF;gBACtF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC;gBACvD,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,CAAC,GAAG,gBAAgB,CAAC;wBACzB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;wBAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;qBAC7J,CAAC,CAAC;oBACH,MAAM,gBAAgB,CAAC;wBACrB,GAAG,EAAE;4BACH,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,OAAO,EAAE,CAAC,CAAC,OAAO;4BAClB,WAAW,EAAG,OAAO,CAAC,KAA4C,CAAC,kBAAwC;yBAC5G;wBACD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;wBACzB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnC,wFAAwF;wBACxF,kFAAkF;wBAClF,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,IAAI,IAAI,EAAE;wBAC3C,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,KAAK,SAAS,IAAI,aAAa,IAAI,GAAG,GAAG,CAAC;qBAChG,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,4FAA4F;oBAC5F,2FAA2F;oBAC3F,wFAAwF;oBACxF,4FAA4F;oBAC5F,wFAAwF;oBACxF,OAAO,CAAC,IAAI,CACV,kDAAkD,MAAM,CAAC,IAAI,CAAC,MAAM,8DAA8D,aAAa,IAAI,GAAG,GAAG,CAC1J,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,kFAAkF;gBAClF,+EAA+E;gBAC/E,iDAAiD;gBACjD,OAAO,CAAC,GAAG,CACT,0GAA0G,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,GAAG,GAAG,CAC7K,CAAC;YACJ,CAAC;YACD,2FAA2F;YAC3F,8FAA8F;YAC9F,sFAAsF;YACtF,qFAAqF;YACrF,4FAA4F;YAC5F,uFAAuF;YACvF,uEAAuE;YACvE,MAAM,iBAAiB,GAAG,eAAe,IAAI,kBAAkB,CAAC;YAChE,8EAA8E;YAC9E,8EAA8E;YAC9E,IAAI,iBAAiB;gBAAG,OAAO,CAAC,KAA4C,CAAC,WAAW,GAAG,KAAK,CAAC;YACjG,8EAA8E;YAC9E,6EAA6E;YAC7E,6EAA6E;YAC7E,+EAA+E;YAC/E,yDAAyD;YACzD,MAAM,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACpF,8EAA8E;YAC9E,mFAAmF;YACnF,iFAAiF;YACjF,uEAAuE;YACvE,IAAI,CAAC;gBACH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;gBACtD,IAAI,iBAAiB,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;oBAC/C,MAAM,CAAC,GAAG,gBAAgB,CAAC;wBACzB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;wBAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,EAAE;qBAC/I,CAAC,CAAC;oBACH,+EAA+E;oBAC/E,iFAAiF;oBACjF,0FAA0F;oBAC1F,uFAAuF;oBACvF,0FAA0F;oBAC1F,wEAAwE;oBACxE,0BAA0B;oBAC1B,MAAM,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC3G,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;QACD,kFAAkF;QAClF,oFAAoF;QACpF,6CAA6C;QAC7C,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5C,IAAK,OAAO,CAAC,KAA4C,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;gBAChF,MAAM,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,oFAAoF;QACpF,6EAA6E;QAC7E,iBAAiB,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1C,IAAK,OAAO,CAAC,KAA4C,CAAC,YAAY,KAAK,IAAI;gBAAE,OAAO;YACxF,MAAM,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,6EAA6E;QAC7E,oFAAoF;QACpF,+EAA+E;QAC/E,oFAAoF;QACpF,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACrC,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrE,OAAO;YACT,CAAC;YACD,MAAM,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC;gBACH,MAAM,YAAY,CAChB,OAAO,EACP,gEAAgE,IAAI,CAAC,OAAO,kCAAkC,CAC/G,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;QACD,6EAA6E;QAC7E,4EAA4E;QAC5E,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;YACxC,IAAI,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxE,OAAO;YACT,CAAC;YACD,MAAM,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC;gBACH,MAAM,YAAY,CAAC,OAAO,EAAE,iCAAiC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;YACD,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;KACF;CACF,CAAC,CAAC;AAEH,6FAA6F;AAC7F,8FAA8F;AAC9F,eAAe,iBAAiB,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const CONTRIBUTIONS: {
|
|
2
|
+
readonly schemaVersion: 1;
|
|
3
|
+
readonly package: "@open-everywhere/provider-slack";
|
|
4
|
+
readonly register: "agent/register.js#registerSlackProvider";
|
|
5
|
+
readonly contributions: readonly [{
|
|
6
|
+
readonly kind: "channel";
|
|
7
|
+
readonly name: "slack";
|
|
8
|
+
readonly module: "agent/channels/slack.js";
|
|
9
|
+
readonly summary: "The Slack surface. Wires Slack's webhook → an OpenEverywhere session, and — the point of the \"Slack-binding\" slice — populates the session auth context with the REAL Slack identity (team/channel/user…";
|
|
10
|
+
}, {
|
|
11
|
+
readonly kind: "channel";
|
|
12
|
+
readonly name: "slack-commands";
|
|
13
|
+
readonly module: "agent/channels/slack-commands.js";
|
|
14
|
+
readonly summary: "The Slack SLASH-COMMAND ingestion surface for \"/oe\" — the zero-inference control-plane escape hatch (backlog item 23): pure logic, instant code-rendered responses, NO model turn, so it keeps…";
|
|
15
|
+
}];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=contributions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contributions.d.ts","sourceRoot":"","sources":["../../agent/contributions.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,aAAa;aACxB,aAAa,EAAE,CAAC;aAChB,OAAO,EAAE,iCAAiC;aAC1C,QAAQ,EAAE,yCAAyC;aACnD,aAAa;iBAET,IAAI,EAAE,SAAS;iBAAE,IAAI,EAAE,OAAO;iBAAE,MAAM,EAAE,yBAAyB;iBAAE,OAAO,EAAE,4MAA4M;;iBACxR,IAAI,EAAE,SAAS;iBAAE,IAAI,EAAE,gBAAgB;iBAAE,MAAM,EAAE,kCAAkC;iBAAE,OAAO,EAAE,mMAAmM;;CAE7R,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// THE CONTRIBUTION MANIFEST for `@open-everywhere/provider-slack` (OPE-375) — the curated
|
|
2
|
+
// catalogue of everything this package OFFERS an app's eve slot tree. `oe build` reads it;
|
|
3
|
+
// the app's `roster.config.ts` decides about it, and `roster.lock.json` records the review.
|
|
4
|
+
//
|
|
5
|
+
// 🔴 CURATED, NOT SCANNED, AND THAT IS MEASURED RATHER THAN STYLISTIC. A directory scan cannot
|
|
6
|
+
// enumerate contributions: core ships 47 files under `agent/channels/` of which 9 are channels, and
|
|
7
|
+
// 13 under `agent/connections/` of which 1 is a connection. Shape predicates do not rescue it either
|
|
8
|
+
// — only 8 of the 9 mounted core channels contain `defineChannel(`. A hand-kept list is the only
|
|
9
|
+
// honest catalogue, so keeping it current is a real authoring duty (`npm run lint:contributions`
|
|
10
|
+
// scan-compares the two kinds where a predicate IS sound — tools and hooks — and says plainly that
|
|
11
|
+
// the other four are unguarded).
|
|
12
|
+
//
|
|
13
|
+
// 🔴 THIS FILE IMPORTS NOTHING, DELIBERATELY. A provider bundle may reach core only through the
|
|
14
|
+
// `@open-everywhere/core/agent/adapter-api.js` barrel (the boundary lock, packages/core/scripts/
|
|
15
|
+
// boundary-test.ts), so a manifest that imported its own types would be a boundary red — and
|
|
16
|
+
// widening the barrel to admit a build-time type would be the wrong fix. Every manifest is therefore
|
|
17
|
+
// import-free DATA whose shape `roster-plan.ts` validates at build time, exactly as it must for a
|
|
18
|
+
// third-party package it has never seen. The types are in
|
|
19
|
+
// `@open-everywhere/core/agent/scaffold/roster-config.js` for READERS.
|
|
20
|
+
//
|
|
21
|
+
// ERASABLE SYNTAX ONLY (no `enum`, no `namespace`) — `oe build` loads this with a bare import.
|
|
22
|
+
export const CONTRIBUTIONS = {
|
|
23
|
+
schemaVersion: 1,
|
|
24
|
+
package: "@open-everywhere/provider-slack",
|
|
25
|
+
register: "agent/register.js#registerSlackProvider",
|
|
26
|
+
contributions: [
|
|
27
|
+
// ── channels ─────────────────────────────────────────────────────────────────────────────────
|
|
28
|
+
{ kind: "channel", name: "slack", module: "agent/channels/slack.js", summary: "The Slack surface. Wires Slack's webhook → an OpenEverywhere session, and — the point of the \"Slack-binding\" slice — populates the session auth context with the REAL Slack identity (team/channel/user…" },
|
|
29
|
+
{ kind: "channel", name: "slack-commands", module: "agent/channels/slack-commands.js", summary: "The Slack SLASH-COMMAND ingestion surface for \"/oe\" — the zero-inference control-plane escape hatch (backlog item 23): pure logic, instant code-rendered responses, NO model turn, so it keeps…" },
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=contributions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contributions.js","sourceRoot":"","sources":["../../agent/contributions.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,2FAA2F;AAC3F,4FAA4F;AAC5F,EAAE;AACF,+FAA+F;AAC/F,oGAAoG;AACpG,qGAAqG;AACrG,iGAAiG;AACjG,iGAAiG;AACjG,mGAAmG;AACnG,iCAAiC;AACjC,EAAE;AACF,gGAAgG;AAChG,iGAAiG;AACjG,6FAA6F;AAC7F,qGAAqG;AACrG,kGAAkG;AAClG,0DAA0D;AAC1D,uEAAuE;AACvE,EAAE;AACF,+FAA+F;AAE/F,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,aAAa,EAAE,CAAC;IAChB,OAAO,EAAE,iCAAiC;IAC1C,QAAQ,EAAE,yCAAyC;IACnD,aAAa,EAAE;QACb,gGAAgG;QAChG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,yBAAyB,EAAE,OAAO,EAAE,4MAA4M,EAAE;QAC5R,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,kCAAkC,EAAE,OAAO,EAAE,mMAAmM,EAAE;KACtS;CACO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-generated.d.ts","sourceRoot":"","sources":["../../agent/docs-generated.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAC;AAE3E,eAAO,MAAM,aAAa,EAAE,SAAS,QAAQ,EAO5C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// GENERATED by `npx tsx scripts/docs-generate.ts` from docs/deploy/surfaces/slack.md — DO NOT HAND-EDIT.
|
|
2
|
+
// Edit the markdown under docs/ and re-run the generator; `npm run lint:docs` fails the
|
|
3
|
+
// build if this file and its sources ever disagree. See scripts/docs-generate.ts for why the
|
|
4
|
+
// manual is compiled in at all (docs/ does not exist on disk in a hosted deployment).
|
|
5
|
+
export const PROVIDER_DOCS = [
|
|
6
|
+
{
|
|
7
|
+
path: "docs/deploy/surfaces/slack.md",
|
|
8
|
+
title: "Slack",
|
|
9
|
+
summary: "Tag or DM Open Everywhere in your Slack workspace and it acts as an autonomous teammate — it reads the thread, does the work, posts back, and remembers what it learned, scoped correctly per channel.",
|
|
10
|
+
markdown: "# Slack\n\nTag or DM Open Everywhere in your Slack workspace and it acts as an autonomous teammate — it reads the thread, does the work, posts back, and remembers what it learned, scoped correctly per channel.\n\nThis page is the Slack-specific setup runbook. For the concept of a *surface* and how surfaces plug in, see [Surfaces](../../extending/surfaces.md). For how memory is scoped per workspace and channel, see [Memory](../../capabilities/memory.md). For how Slack's feature set compares to the other surfaces, see the [surface support matrix](./support-matrix.md) — Slack is the reference surface, where everything lands first.\n\n## How the silo model maps\n\nOpen Everywhere's memory is [opt-in domains and silos](../../capabilities/memory.md), not an\nautomatic per-workspace tier stack. Slack is a clean fit for that model — a channel or DM is a\n**surface**, and a Slack team is the natural `workspace` identity key many channels' surface\nkeys share, but nothing pools their memory automatically: a channel gets shared memory only\nvia an explicit `domain` listing it, or the `org` pseudo-domain fallback.\n\n| Open Everywhere concept | Slack thing |\n| --- | --- |\n| `org` (tenant) | your deployment (`deploymentIdentity.org` in `agent/identity/surfaces.ts`, one org per deploy today) |\n| `workspace` (identity key) | the Slack workspace / team (`team_id`) |\n| `surface` (partition key) | the individual channel or DM (`channel_id`) |\n| `mode` | `channel` (public/private channel), `dm` (1:1 IM), `mpim` (group DM) |\n| `visibility` | `public` only for a confirmed public channel; everything else `private` |\n| `trust` | `internal` for a verified in-workspace channel/DM partner; `external` for Slack Connect / shared channels or anything unverifiable — **unless the workspace is vouched**, which raises the unverifiable cases (see below) |\n\n**Visibility isn't the memory gate — trust is.** `visibility` (public vs. private) is tracked\nper channel but plays no role in whether memory shares: a **private** channel with verified\ninternal membership shares its domain's (or the org's) brain exactly like a public one does.\nWhat actually gates it is **trust** (`slackTrust`): `is_ext_shared` / `is_org_shared` /\n`is_shared` (a Slack Connect channel spanning orgs) binds `external` — read-only `public`\nmemory at most, never a domain or the org brain — and so does any channel Slack's\n`conversations.info` couldn't positively check. A confirmed in-workspace channel, private or\npublic, binds `internal`. An `app_mention` envelope carries neither bit, so the channel\nenriches both from `conversations.info`; if that call fails, the channel binds `external`\n(fail-closed) and its own visibility falls back to `private`.\n\n### The workspace vouch, and what it vouches\n\nThis deployment declares its own Slack **workspace** `internal` in\n[`agent/identity/surfaces.ts`](../../how-it-works/config-as-code.md) — one tenant-grain line, not a\nlist of rooms. A declaration counts at any rung, so the line vouches every room under the workspace:\neach channel, and each **group DM**, whose conversation id no config can name. Declare your own\nworkspace the same way, or name single channels instead if you want a narrower claim.\n\nThe vouch is a **promotion**, so it sits below Slack's own verdict and can only raise a room that\nwould otherwise be unproven:\n\n- A **Slack Connect** room (`is_ext_shared`) stays `external` — a channel and a group DM alike. The\n vouch never re-promotes a room the platform positively reports as shared.\n- A channel `conversations.info` never confirmed stays `external` too. The vouch is not a substitute\n for the check.\n- A channel you want out of the claim is declared `public` at **room grain**. The narrower entry\n wins, and on a channel `public` is a demotion that sits *above* the platform verdict. (`external`\n is not a declarable value — it is the fail-closed default of an unlisted surface.)\n\n🔴 **A group DM is demoted by evidence, never by its absence.** That is the one asymmetry with a\nchannel. An `is_ext_shared` group DM binds `external`, but a group DM Slack never confirmed binds\n`internal` where an unconfirmed channel would fail closed. So on a group DM your declaration decides\nwhenever Slack gave no positive refutation — and the room-grain carve-out cannot narrow it back,\nbecause that demotion applies to channels and no config can name an mpim's conversation id.\n\n🔴 **The vouch reaches this workspace's DMs.** A DM reads `trust` as \"is the partner internal?\", and\na workspace line matches a DM key too. A partner Slack reports as external still binds `external`.\nWhat changes is the partner with **no verdict** — nobody looked, or the `users.info` call failed (a\nmissing `users:read` scope, a rate limit, a network error) on someone who is in fact a guest or a\nConnect stranger. That case used to bind `external` and now binds `internal`. Vouch a workspace only\nif you mean every DM partner in it; name single channels instead if you do not.\n\nA DM partner that is an **app** follows the same rule as a person: your own workspace's app binds\n`internal`, an app from another workspace binds `external` unless you declared that workspace.\n\n### Enterprise Grid: declare the organisation once\n\nAn Enterprise Grid holds several workspaces, and a Slack surface key names only the workspace. So a\nGrid gets its own rung, written as one line at the enterprise id:\n\n```ts\ndefineSurface({ key: \"slack/E0GRIDID\", trust: \"internal\" }),\n```\n\nThat line vouches the workspaces under the Grid, so you do not list them one by one. A workspace you\ndid not declare and that no Grid line covers stays undeclared, and Open Everywhere reads an\nundeclared workspace as an outside one.\n\n**Every door carries the rung.** The Grid line reaches every path that decides who is a MEMBER (see\nbelow), and every path that vouches a ROOM: a channel mention, a DM, a group DM, a thread reply, a\nchannel join and a **shortcut** all resolve the same enterprise line. So you declare the Grid once\nand list no workspace under it.\n\nOpen Everywhere reads the enterprise id wherever Slack puts it on that route:\n\n- the **event envelope** (`enterprise_id` beside `team_id`) on every Events API path;\n- on the **interactivity** route, which has no envelope: the payload's top-level `enterprise`\n object, or `team.enterprise_id`. Slack sends the first for an org-wide install and the second for\n a per-workspace install on a Grid, so both are read;\n- an `enterprise_id` **form field** on the `/oe` slash-command route.\n\nThe `/oe` command is narrower than the wake doors, and only here: it carries the rung into your\ndeclaration, but it cannot make a **channel** command's room internal, because a slash-command\npayload carries no `conversations.info` verdict and that check fails closed. Nothing about a\nmention, a DM or a shortcut in the same room changes.\n\n`preflight` may still report a Grid line as a **dead declaration**. That is the check's own data,\nnot a gap in the rung: it folds traffic from audit rows, and a row names a workspace and a room with\nno rung above them, so a working Grid line matches none of them. Do not delete the line on that\nadvice — the check says so itself.\n\nThe enterprise is the **lowest** rung, so anything narrower wins. `slack/E0GRIDID` internal plus\n`slack/T0SALES` public keeps that one workspace's **rooms** out; a room-grain `public` entry keeps\none room out. A `public` enterprise line does not demote a workspace you declared internal beneath\nit.\n\n🔴 **The carve-out does not reach a workspace's own members.** The member half answers \"is this the\nworkspace the message arrived in?\" before it reads your declarations, so a Sales person writing in a\nSales room is a member however you declared `slack/T0SALES`. The `public` line demotes that person\nonly where they write in **another** workspace, and it demotes every Sales room on both halves. To\nkeep a workspace's people out of the member set, do not declare the Grid above them.\n\n🔴 **It fixes who counts as a member, and that is the point of the rung.** On a Grid a person's home\n`team_id` is their own workspace, not the workspace the message sits in. Without the enterprise line\nevery Grid colleague reads as an outside author: their message marks the turn a non-member turn, their\nwords render inside the untrusted fence, and the member plane refuses their personal credential. With\nthe line they read as members. A workspace under a **different** Grid, or under no declaration, is\nstill an outside author.\n\nThe member half needs no extra scope and no configuration beyond the line above: Open Everywhere\nreads the author's own workspace and Grid from the `users.info` lookup it already pays for, so it\nholds on every ingress, the channel-mention path included. A single-workspace install has no\nenterprise id, declares nothing at that rung, and behaves exactly as before.\n\n**What this arms, and what stays off.** The [member plane](../configuration-reference.md)\n(`connectors.memberPlane`) refuses any room the operator never declared internal. It is consulted at\none place — the mint of a member's own connector credential on a non-DM surface — so without this\nline that mint would refuse in every Slack room, while ordinary Slack wakes carried on unaffected.\nThe plane itself **ships dark on this deployment**: the setting keeps its shipped default of `false`,\nand the gate refuses on that first. Declaring the workspace removes the config blocker; it does not\narm the plane.\n\n## Prerequisites\n\n- **Admin** (or app-install rights) on the target Slack workspace.\n- A reachable Open Everywhere instance — deployed (public HTTPS URL) or local with a tunnel. See the [docs index](../../README.md) to get the project and the [setup runbook](../setup-runbook.md) for the deployment steps (env, access config, safety rules).\n- Your instance's public base URL. The Slack webhook route is **`/eve/v1/slack`**, so Slack calls `https://<your-deploy-url>/eve/v1/slack`.\n\n## Step 1 — Create the Slack app\n\n1. Go to <https://api.slack.com/apps> → **Create New App** → **From scratch**. Name it (e.g. `Open Everywhere`) and pick the target workspace.\n2. **OAuth & Permissions** → **Bot Token Scopes**, add:\n - `app_mentions:read` — receive `@mention` events.\n - `chat:write` — post replies, and edit the agent's own posts (`edit_reply` uses `chat.update`,\n which needs no scope beyond this one).\n - `chat:write.customize` (optional) — vary the bot's display NAME per message (`chat.postMessage`'s\n `username` param). Powers the worker-reply TIER signal: a worker that posts into the room\n itself shows as \"\\<agent name\\> [task]\" instead of the bare agent name, so its reply is\n visually distinct from the ambient supervisor's (see\n [Agent & loop](../../how-it-works/agent-and-loop.md)). **Nothing renders it today** — the\n bracket is keyed on the `task` grain, and no shipped route mints that grain: a worker reports\n back through the seat and posts nothing of its own. Grant this scope only if you run a\n deployment whose workers post directly. **Scope optional, graceful fallback:**\n omit it and every reply still posts, under the bot's default name — the agent detects a\n rejected `username` and retries the SAME post without it, so a missing scope costs only the\n tier signal, never the reply itself.\n - `files:write` — upload file attachments (the `post_file` tool — charts, CSVs, documents a\n delegated worker posts into the thread). Omit this and every file post fails with Slack's\n `missing_scope`; the agent reports the blocker instead of delivering the file.\n - `files:read` — download user-uploaded attachments (the `describe_image` tool fetches an\n image's `url_private`, which Slack only serves to an app with this scope). Omit it and\n image reads fail; text replies are unaffected.\n - `channels:history` — read public-channel messages in the thread it's working.\n - `channels:read` — **positively confirm a public channel's identity** (`conversations.info`:\n shared-ness, member count, name/topic; also backs `conversations.members`). This is the\n channel half of the trust gate: every non-DM message enriches its trust/visibility from\n `conversations.info`, and a failed call binds the channel `external` (fail-closed) —\n silently, with no error naming the missing scope. Also needed for channel-join intros and\n the governance-channel roster.\n - `groups:read` — the same as `channels:read`, for **private** channels — needed for\n `conversations.info`/`conversations.members` on a private channel exactly the way\n `channels:read` covers a public one.\n - `im:history` — read DM messages (required for DM support).\n - `im:read` — **the DM half of `channels:read`.** `conversations.info` / `conversations.members`\n on a `D…` (DM) conversation need this scope; `channels:read` and `groups:read` do **not** cover\n an `im`. Two paths ask that question about a DM: the **approval clicker floor** (a member-tier\n approve/reject click resolves the room's roster before it executes) and **card disclosure**\n (the same roster question at propose time, before a card is posted). Omit it and both Slack\n calls fail with `missing_scope`, the roster comes back unresolved, and the clicker floor's\n beneficiary leg — the one guarding actions whose result is handed to the clicker, e.g. minting\n a webhook signing secret — **refuses the click**, blaming an unreadable roster. Ordinary DM\n chat still works; it is approvals *in DMs* that break.\n - `mpim:read` — the same, for **group DMs**, and it carries one more job than its 1:1 twin.\n `conversations.info`/`conversations.members` on an `mpim` need their own scope, and an approval\n card or a click can land in a group DM exactly as it can in a 1:1. Beyond that, an `app_mention`\n event carries no channel type, so this is the **only** way the agent can tell that an\n `@mention` landed in a group DM rather than a channel — and that is what routes the mention into\n the group DM's own standing session. Without the scope, `@mention`s in group DMs still get\n answered, but from a separate per-thread session that cannot be woken when delegated work\n finishes; plain messages in the group DM are unaffected.\n - `im:write` — **open a DM the agent starts.** Two features need it. The governance DM-delivery\n arm: on a workspace with no governance channel, an org-scope admin read asked in an ordinary\n room is delivered to the requesting admin's DM instead of rendering there (see\n [Access & scoping](../../how-it-works/access-and-scoping.md)). Omit it and that delivery fails\n closed — the agent refuses and posts nothing; it never falls back to answering in the room.\n And **global shortcuts** (Step 9 below): a global shortcut names no conversation, so the agent\n opens the invoker's own DM to wake in. Omit the scope and a global shortcut acks and wakes\n nothing, with the reason in the deploy log. Message shortcuts do not need it.\n - `commands` — **register the `/oe` slash command and the shortcuts.** Slack's own description\n is *\"Add shortcuts and slash commands that people can use\"*. It grants no read access; it is\n what lets the app declare those entry points at all. Omit it and both the shortcuts (Step 9\n below) and the `/oe` command ([Slash commands](#slash-commands-oe-zero-inference-control-plane),\n set up in its own section further down) are unavailable to install.\n - `groups:history` — read private-channel messages (if you'll use it in private channels).\n - `reactions:write` — set the 👀 (working) / 🛑 (blocked) status reaction on the thread root, and the `react` tool's model-chosen reactions.\n - `reactions:read` — **ingest inbound reactions.** Lets the agent receive `reaction_added` / `reaction_removed` events (Step 1.7) so a 👍 / 👎 on one of *its own* replies is recorded as lightweight human feedback. Omit this and reaction ingestion is silently off.\n - `pins:read`, `pins:write` — read pinned standing instructions on first onboard and maintain the pinned in-flight status message.\n - `mpim:history` — read group-DM messages (only if you'll use group DMs).\n - `users:read` — resolve a Slack user id to their profile (`users.info`). Backs the bot's own\n display name and the name-drop wake's bot-name check, and — the security-relevant one — the\n **DM-partner trust check**: every DM enriches its trust from `users.info` (is the partner a\n full member, a guest, a Connect stranger?), and a failed call leaves it unverified, which the\n binding treats as `external` (fail-closed). Omit this and **every DM binds `external`**\n (read-only `public` memory at most) on a fresh install, with no error pointing at the cause —\n `users.info` just fails quietly and the binding falls back to its safe default. 🔴 **A vouched\n workspace inverts that fallback**: the deploy's own declaration then supplies `internal` for the\n partner nobody could check, so the missing scope opens the shared read layer instead of closing\n it (see [the workspace vouch](#the-workspace-vouch-and-what-it-vouches)). The same scope\n also backs the workspace roster (`users.list`) that [identity\n linking](../../how-it-works/identity.md) searches to name a person's other account; without it\n that search finds nothing and linking falls back to its code flow, which still works.\n > **Already installed?** Adding a scope to the app does **not** retrofit an existing\n > installation — an app installed before this list grew still holds only the scopes it was\n > granted at install time, and its `xoxb-` token keeps working, so nothing looks broken. After\n > adding a scope you must **reinstall the app to the workspace** (OAuth & Permissions →\n > *Reinstall to Workspace*) and re-approve, then re-copy the Bot User OAuth Token if it changed.\n > Until you do, approvals in DMs keep failing on the unreadable roster described above.\n\n3. **Install to Workspace** (top of OAuth & Permissions). Approve the scopes.\n4. Copy the **Bot User OAuth Token** (`xoxb-…`) — this is `SLACK_BOT_TOKEN`.\n5. **Basic Information** → **App Credentials** → copy the **Signing Secret** — this is `SLACK_SIGNING_SECRET` (used to verify every inbound webhook).\n6. **Event Subscriptions** → toggle **On**. Set the **Request URL** to:\n\n ```\n https://<your-deploy-url>/eve/v1/slack\n ```\n\n Slack sends a one-time `url_verification` challenge; your instance must be running and reachable so it can echo the challenge back (see [Gotchas](#gotchas)).\n7. Under **Subscribe to bot events**, add:\n - `app_mention` — wake on `@Open Everywhere …` in a channel.\n - `message.im` — wake on a direct message.\n - `message.channels` — **reply-without-re-tagging in public channels.** After you `@mention`\n the agent in a thread it stays *engaged* and picks up your follow-up replies without a new\n mention (until you ask it to stop — see *Stopping it*, below). Omit this and the agent only ever responds\n to explicit mentions — the passive engagement feature is silently off. Engaged replies are\n **judged, not automatic**: the agent reads every reply in the thread but stays silent when\n people are talking among themselves — it responds only when a message is addressed to it or\n moves its task forward. An `@mention` always guarantees a response. The model has two ways to\n go quiet on a judged turn: the legacy `NO_REPLY` text convention, or the `no_reply` tool (a\n closed reason, audited — prefer it; both still work). In a busy thread it can also choose a\n single emoji `react` instead of a text reply — on a message that did **not** address it, a\n react can be the whole response. A message that **did** address it (an `@mention` or a DM) is\n always owed one short reply; there the react only acknowledges.\n - `message.groups` — the same for **private** channels (needs `groups:history`).\n - `message.mpim` — **group DMs** (needs `mpim:history`). Not the same as the two above: a group\n DM is treated as DM-family, so **every** message in it wakes the agent, with no engagement or\n name-drop gate in front — the same rule as a 1:1 DM. It still *judges* whether to answer (a\n group DM holds other people, who talk to each other), and it stays silent when nothing was\n asked of it. Omit this event and the agent only hears `@mention`s in group DMs.\n - `member_joined_channel` — **intro on invite.** When someone `/invite`s the agent into a\n channel it introduces itself once, fitted to the channel (see\n [Channel-join intros](#channel-join-intros-default-on-fail-closed)). Omit this and the\n agent stays silent until its first mention, which then carries the intro instead.\n - `reaction_added`, `reaction_removed` — **reaction ingestion (feedback signal).** A 👍 / 👎\n on one of the agent's own replies is recorded as lightweight human feedback (and every\n reaction emits anonymous volume telemetry); reactions on *other* messages are counted but\n not stored. Needs the `reactions:read` scope from Step 2. Omit these and the feature is\n silently off — nothing else changes.\n8. **Interactivity & Shortcuts** → toggle **On**. Set the **Request URL** to the same\n `https://<your-deploy-url>/eve/v1/slack` — the same route Event Subscriptions uses. This is\n what makes the agent's **clickable buttons work**: Eve's own tool-approval prompts and\n clarifying-question options render as interactive Block Kit messages, **and** the\n admin-mutation approval cards (spend caps, connector revokes, forgetting a memory bullet —\n see [In-Slack approvals](../../security/control-plane.md#in-slack-approvals)) post their\n approve/reject buttons the same way. Both ride this one Request URL; Slack delivers every\n button click to it, and the front classifies which handler a click belongs to. Without it,\n clicks fail with *\"the app is not configured to handle interactive responses\"* while\n everything else appears to work.\n9. **Shortcuts** (same **Interactivity & Shortcuts** page, below the Request URL) → **Create New\n Shortcut**. A shortcut is a **wake**: it starts a turn the same way an `@mention` does. Add\n either or both — they answer different needs.\n - **On messages** (a *message shortcut*) — appears in a message's `…` menu. The agent wakes on\n **that message**: its text is the wake's content, and any files on it come too. Use it to hand\n the agent something somebody else wrote without re-typing or re-tagging it. In a **channel**\n the reply threads under the message; in a **DM** it lands flat in the conversation, which is\n where every DM answer lands.\n\n The message is somebody else's, and the agent is told so: the wake is attributed to **you**,\n the person who invoked the shortcut, and the message's body is wrapped as untrusted content.\n Handing a message over does not vouch for it — but it does run the turn with **your** access,\n not the message author's.\n\n Slack delivers a `message_action` even for a conversation the app is not a member of, so the\n shortcut has to answer for itself what the room is. It asks `conversations.info`, and three\n outcomes follow.\n\n - **A room the app cannot see at all** — a private channel, DM or group DM it is not in —\n answers `channel_not_found`. The shortcut then wakes nothing, because the agent must not\n route a message whose room it could not identify. For a private channel this is measured. For\n a DM or a group DM it is an INFERENCE from Slack's documentation, and the code says so\n (`appCanReadConversation` in `slack-identity.ts`): no offline tier can drive a live\n `conversations.info` against a DM the app is not in, so the answer there is unmeasured. If the\n inference is wrong, such a DM reaches the turn with its files.\n - **A public channel the app has not joined** answers, and says `is_member: false`. The\n message's **text** crosses into the turn, and that is the ruled trade: you are the\n principal, and the body is fenced as untrusted. Its **files do not** — the references are\n dropped from the wake and never registered, so the bot token downloads nothing from a room\n the agent has not joined, and the agent is told the text rather than that there is a file it\n cannot open.\n - **A room the app is in** carries the message and its files both. A shortcut on a screenshot\n surfaces the screenshot here, and only here.\n - **Global** — appears in the composer's ⚡ menu and in search. It names no conversation, so the\n agent wakes in **your own DM** with it, with the shortcut's name as the whole content. This\n one needs the `im:write` scope from Step 2 (the agent opens the DM with\n `conversations.open`); without it the shortcut acks and wakes nothing, and the deploy log says\n so.\n\n Slack asks for a **Name**, a **Short Description** and a **Callback ID** for each. The callback\n ID is yours to choose — the agent owns every shortcut this app receives, so the name you give it\n is simply the trigger name the agent is told about. Shortcuts ride the **`commands`** scope from\n Step 2, which Slack documents as *\"Add shortcuts and slash commands that people can use\"* — the\n same scope the `/oe` command uses.\n\n > **A message shortcut in a channel needs the single window.** A shortcut is *addressed*, so it\n > never goes through the engagement or name-drop judge — it takes the same road a\n > single-window `@mention` takes. On a domain that does **not** run the ambient supervisor\n > (`ambientSupervisor` off) a channel has no such road, so a message shortcut used there wakes\n > nothing and logs a warning. Message shortcuts in DMs and group DMs, and global shortcuts, work\n > on every deployment.\n >\n > A message shortcut also needs the agent to know **which kind of room** it was invoked in. If\n > `conversations.info` fails — a missing scope, or a transient Slack error — the shortcut wakes\n > nothing and logs a warning, rather than routing a DM's content into a channel session. Retry\n > the shortcut; if it keeps failing, check the `channels:read`, `groups:read`, `im:read` and\n > `mpim:read` scopes from Step 2.\n10. **Save Changes.** If Slack prompts to reinstall the app (scopes changed), do it.\n\n> **Verify the wake path after deploy.** `@mention` the agent in a public channel, let it reply,\n> then post a follow-up in that thread **without** tagging it. If it responds, engagement is live.\n> If only the mention worked, re-check that `message.channels` is subscribed and `channels:history`\n> is granted. (The engagement events all land on the same `/eve/v1/slack` Request URL.)\n\n### Optional: respond to name-drops (per domain, off by default)\n\nBy default the agent **never** joins a conversation uninvited: it responds to `@mentions`, DMs,\nand threads it's already engaged in — a top-level message that merely *says* its name is ignored.\nIf you want it to (judged, carefully) answer messages like *\"could Ada look at this?\"*, opt a\n**memory domain** in:\n\n```ts\n// agent/memory/config/domains/org.ts — one file per domain; list each in domains/index.ts\nexport const domain = defineDomain({ name: \"org\", match: \"org\", memory: \"org-brain\", nameDropWake: true }) // workspace-wide\n\n// agent/memory/config/domains/support.ts\nexport const domain = defineDomain({ name: \"support\", reach: [\"slack/T…/C…\"], nameDropWake: true, /* … */ }) // just these channels\n```\n\nAn explicit domain's setting always wins for its channels (no fall-through to `org`). The gate is\ndeliberately conservative even when enabled: **top-level** human messages in channels/private\ngroups only (a group DM never needs it — it's DM-family, so every message there wakes the agent\nanyway), the message must say one of the agent's names — the wake trigger's token set (same rule\non Discord) is:\n\n- the bot's **Slack display name** — the agent's public face on Slack, from one cached\n `users.info` lookup; rename the app and the trigger follows, nothing to configure;\n- the deployment's canonical `identity.name` setting, when set — the same name the agent\n introduces itself by on every surface;\n- any token in `wake.nameDrop.include` (configuration-reference.md), added by the operator;\n\nminus any token in `wake.nameDrop.exclude`, which wins over the other three. Matching is\ncase-insensitive and word-boundary, same as an `@mention`'s name check. The\nchannel must be positively confirmed as **not externally shared** (Slack Connect and\nunverifiable channels never trigger it), and the agent then *judges* whether a reply is actually\nwarranted — when in doubt it stays silent. If it does reply, it starts a thread on the message and\nfollows that thread from then on, exactly as if it had been mentioned.\n\nUninvited turns also **fail quietly**: until the agent has actually posted a reply, an error\n(model outage, tool failure) on a name-drop turn is logged and audited (`surface.quiet_fail`)\ninstead of posted — a turn that would have judged \"stay silent\" never spams the conversation\nwith a stack trace instead. Once it has replied it's a participant, and failures go loud like\nany engaged thread's. Every wake decision is one log line in your host's runtime logs, and the\nname-drop road writes **two audit rows of its own**:\n\n- `surface.name_drop_woke` — the road admitted the message and handed on a wake. It names the\n room (`container`), the message (`ts`), which session took the wake (`road`: the room's standing\n seat, or a fresh per-thread session) and who decided (`via`: the built-in policy, or a drop-in\n [wake arm](../../extending/drop-in-arms.md)).\n- `surface.name_drop_silent` — somebody named the agent and the road refused. `reason` is the\n refusing gate's own words: the domain never enabled `nameDropWake`, or the channel is not\n confirmed internal.\n\nA message that names nobody writes neither row — unless a drop-in wake arm adds the wake, and that\nrow carries `via: \"arm\"`. The pair is what tells a **judged** silence from a **dead** road: no row\nat all means the road never ran. Read a `surface.name_drop_woke` row with no reply as \"the road\nadmitted the wake\", not yet as \"the seat judged silence\": gates below the road can still refuse the\nturn — the tenant fence, the spend cap, and on a seated channel the seat's own stood-down marker —\nand each of those writes its own refusal row. Slack itself writes no per-turn silence row — the\ndeployment's posture is actions-only — so the silent turn's own record is the always-on\n`reply.no_reply_observed` row plus the [session\ntranscript](../../security/audit-and-provenance.md). A reply is audited as `reply.post`, the one\ncanonical row every reply route writes, whether the model called the `reply` tool or the turn's\nending text was the answer.\n\n### Channel-join intros (default on, fail-closed)\n\nBeing `/invite`d into a channel **is** an invitation — so, unlike name-drops, this needs no\nopt-in. When the bot is added to a channel it **reads up before it introduces itself**: it\nimmediately acks (\"👋 Just joined — reading up on this channel; back in a moment.\"), fetches the\nchannel's recent history (up to 50 messages) and the inviter's name, then posts an introduction\n**in a thread under the \"joined\" notice** grounded in what it read: a teammate's personal channel\ngets a person-focused hello fitted to what they've actually been working on, a team channel gets\nan \"I've read the room\" line plus 2–3 concrete offers drawn from things really discussed there,\nand a large announce-style channel (~500+ members) skips the ack and the read entirely and gets\none low-key line (\"I'll stay in the background — @mention me if I can help\") and then silence.\nAn empty or unreadable channel degrades to an intro from the name and topic alone. The fetched\nhistory is framed as untrusted channel data — something *in* the backscroll asking the bot to act\nis chatter, never a task. The intro is still a *judged* turn — the agent can choose to say\nnothing at all if even that would be noise.\n\n> **What it deliberately does *not* read:** other channels. Claude Tag's join intro searches the\n> whole workspace via per-user tokens; Open Everywhere's access model is bot-principal only, so\n> cross-channel context comes from the channel's [domain memory](../../capabilities/memory.md) —\n> if the channel is in a domain, the intro turn may take one look at that shared memory too.\n\nTwo hard limits:\n\n- **Never on externally-shared channels.** The same fail-closed gate as name-drops: the channel\n must be positively confirmed as not externally shared (Slack Connect, org-shared, and\n unverifiable channels never get an intro).\n- **Once per channel.** The join intro shares its once-only marker with the first-mention\n onboarding (Step 3 below) — whichever happens first claims the channel, so you never get both,\n and a remove/re-invite doesn't re-intro.\n\nRequires the `member_joined_channel` bot event from Step 1.7. Without it the feature is silently\noff and the intro rides the first `@mention` instead.\n\n## Step 2 — Configure the environment\n\nSet these on your instance:\n\n```bash\nSLACK_BOT_TOKEN=xoxb-… # Bot User OAuth Token from Step 1.4\nSLACK_SIGNING_SECRET=… # Signing Secret from Step 1.5\n```\n\nOptional, but relevant to the silo model:\n\n```bash\nOE_MEMORY_PROVIDER=git # memory backend — git | sqlite\nOE_MEMORY_DIR=/abs/path/to/store\n```\n\n**Identity binds automatically.** You do **not** set workspace, surface, mode, or visibility by hand. The Slack channel reads `team_id`, `channel_id`, `channel_type`, and `is_private` straight off each inbound event into the session auth context, and `bindSlack` derives workspace = the Slack workspace, surface = the channel, plus mode and visibility. The `deploymentIdentity.workspace` / `.surface` declaration in `agent/identity/surfaces.ts` is only the `eve dev` (no-surface HTTP) gap-filler — once Slack is wired it is ignored.\n\n## Step 3 — Invoke it\n\nOpen Everywhere wakes on an `@mention` in a channel, or on any message in a DM.\n\n1. In any channel, invite the bot: `/invite @Open Everywhere`.\n2. Mention it: `@Open Everywhere summarise the last 20 messages and post the action items`.\n3. Expected behaviour:\n - It reacts to the thread root with 👀 (seen it, working on it) and shows a rotating status verb as its typing indicator (`Tinkering…`).\n - On the **first** mention in a channel it posts a short intro and adopts any pinned messages as standing instructions for that surface.\n - It does the work, replies in-thread, and **removes** the 👀 — absence is the done signal; the posted reply is the result. On a failure it flips to 🛑 (blocked) instead. (✅ is deliberately left to humans — react ✅ yourself to mark something done.)\n - **Every channel reply lands in a thread.** A message that is already in a thread is answered\n in that thread. A **top-level** channel message — an `@mention` or an ambient answer alike —\n is answered in a new thread opened on that message, so a busy channel keeps one root per\n topic and the answer sits under the question. Only a post that answers no message at all (a\n [routine](../../capabilities/proactivity-and-routines.md) fire, a webhook post-back) goes to\n the channel root. A **DM** is deliberately different: its replies stay flat, because\n threading a 1:1 shatters the conversation.\n - That status reaction is code-driven and narrow by design; the model can ALSO choose its own\n reaction via the `react` tool — a bare emoji ack (e.g. 👍) instead of a low-content reply in a\n busy thread. It's a genuine alternative response, not a status indicator, and is audited like\n any other tool call.\n4. Test a DM: open a direct message with the bot and send a plain message (no `@mention` needed in a DM). It responds the same way. The DM surface's memory is isolated and `private`.\n\n### What it can read on Slack\n\n**The message that woke it carries more than the typed text.** Three parts reach the agent — four\nwhen the wake is an edit, which also carries the text as it read before the edit:\n\n- The author's own text.\n- Any file the message carries. The agent sees the reference — the id, the name, the mimetype\n and the file's Slack `url_private` — not the bytes. It reads an image with `describe_image`\n and a text file with `read_file_upload`.\n- **A quoted Slack message: a forward, a share, or a message permalink unfurl.** Slack puts\n this content beside the text, not in it. The agent sees it appended under the author's text,\n so a person can forward a message to the agent and ask about it. A quoted field the author's\n own text already carries is dropped. The unit is one whole field, so a two-line quote of which\n the author typed one line is kept intact — the repeated line stays.\n\n A plain **link unfurl** — the title and blurb Slack scrapes from a web page — is **not**\n merged on any path Open Everywhere's own parser handles. Those paths read quoted Slack\n messages only, and they are: an ambient channel message, an engaged thread, a name-drop, a\n **DM**, a **group DM**, and a mention that the unified window or a group DM owns.\n\n> ⚠️ **One `@mention` route still merges a link unfurl, and in practice it almost always does.**\n> A mention that Open Everywhere's own parser does not own is forwarded to the `eve` framework's\n> native inbound path, and that path reads every attachment — including the text Slack scrapes\n> from a linked page. Measured against our pinned eve: the scraped text is merged whenever the\n> message carries Block Kit `blocks` whose flattened text contains what the person typed — the\n> normal case for a message composed in a Slack client. Otherwise eve falls back to a length\n> comparison, which can discard the scraped text. Since you cannot tell from the outside which\n> case a given message hits, treat a linked page's title and blurb on that route as reaching the\n> model inside the member's unfenced body.\n> Open Everywhere does not control that leg today (tracked as OPE-1380).\n\n> ⚠️ **Quoted content carries the forwarder's standing, not its own.** Open Everywhere merges the\n> quoted text into the forwarder's message body. The fence keys on the **author** of that body, so\n> a forward from a vouched member arrives with the member's trust tier and is delivered unfenced —\n> the same as anything that member types. The agent is not told which words the member wrote and\n> which came from the quoted message.\n>\n> A member can therefore put another Slack author's words in front of the model under their own\n> standing. Treat the ability to forward into a channel the agent watches as equal to the ability\n> to talk to the agent. This is the same handling a direct `@mention` has always had.\n\nTwo **wake** decisions read only what the person typed: the check that drops a message as the\nduplicate of an `@mention`, and the name-drop trigger. So forwarding a message that says the\nagent's name does not wake it by name. The agent does *act on* forwarded content once it is\nawake — that is the point of the feature.\n\nOne caveat on the first of those, and it is unmeasured. We do not know whether Slack raises an\n`app_mention` for an `@mention` that sits inside a forwarded message rather than in the text the\nperson typed. We assume it does not, and Open Everywhere is built for that case: the forward\nstill reaches the agent **on any route that was already going to wake it** — a DM, a group DM,\nan engaged thread, or an ambient channel. In a plain channel with no ambient mode and no\nname-drop, a forward whose only mention sits inside the quote wakes nothing, the same as any\nother message nobody addressed to the agent. If Slack *does* raise an `app_mention`, the forward\nreaches the agent twice instead — once by the mention route and once by the wake route. A\nduplicate answer is the deliberate trade; the alternative was a forward the agent never saw at\nall on the routes that do wake.\n\nBeyond the message that woke it, the agent has three reads on Slack, all open to any member of\nthe room (membership *is* the read tier here — there is no separate grant to hand out):\n\n- `read_channel` — recent history of **the channel this turn arrived in**, pulled into the\n conversation that asked. It takes no target: the channel comes from the turn's own binding, so a\n channel the bot has not been invited to is not addressable, not merely refused.\n- `read_thread` — the same, scoped to the thread this turn arrived in.\n\n Both are fenced to the session's [memory domain](../../capabilities/memory.md) and to the\n window's own sources, and nothing else. A refused read writes a `read.refused` audit row naming\n the channel, the caller's domain and the verdict (ids only, never message content) —\n `GET /control/v1/audit?since=<iso>&actions=read.refused`.\n- `read_file_upload` — decodes a **text** attachment already posted in the room (an image\n goes to `describe_image` instead). The fetch uses the bot token and is host-pinned to\n Slack, allowlisted by file type and capped by size, and the decoded content is ingested as\n untrusted external data like any other surface text.\n\n### Personal credentials in a Slack room (the member plane)\n\nThe [member plane](../../security/credentials-and-planes.md) is the one way a person's own connector\ncredential resolves outside a 1:1 DM. Two Slack facts decide whether a room admits it.\n\n**Your declaration vouches the room, at any rung you wrote it on.** One\n`defineSurface({ key: \"slack/<team>\", trust: \"internal\" })` line covers every room in that workspace.\nA room you did not declare vouches for nobody, and the plane refuses there.\n\n**A group DM is a channel here.** It is a shared room with several people in it, so it reaches the\nsame gate a channel reaches. Nobody declares a group DM's own key, so its vouch always comes from a\nrung above it — the workspace line does the job.\n\n**Slack Connect demotes the room, whatever you declared.** A channel or a group DM that Slack reports\nas externally shared (`is_ext_shared`) stays out of the plane. A workspace-wide declaration cannot\nre-promote a room that spans another organisation.\n\n> ⚠️ **The group-DM half of that needs `mpim:read`.** Open Everywhere reads the sharing flag from\n> `conversations.info`, and on a group DM that call needs the `mpim:read` scope. Without the scope the\n> call answers nothing, Open Everywhere demotes nothing, and a Slack Connect **group DM** stays vouched\n> under your workspace declaration. Absence of an answer never demotes a room — only Slack saying so\n> does. Grant `mpim:read` (Step 1) if you use group DMs and rely on this demotion. A **channel** does\n> not have this gap: an unconfirmed channel fails closed on its own.\n\n**A guest or an outside person who WRITES marks that turn.** Open Everywhere probes the author of the\nmessage that woke it (`users.info`). A positively refused author makes the turn a non-member turn, and\nthe plane refuses a personal credential on it. **Sitting in the room marks nothing** — the mark keys\non whose words entered the conversation, not on who is present. Open Everywhere reads no roster for\nthis, and an unreadable probe refuses nobody.\n\n**The author probe walks your declaration rungs.** An author from the workspace the message sits in\nis a member. An author from a **different** workspace is a member only if you declared that\nworkspace, or the [Grid](#enterprise-grid-declare-the-organisation-once) it belongs to. This is what\nadmits an Enterprise Grid colleague, whose home workspace is a sibling of the one they are writing\nin. A guest grade still refuses on either path: `is_restricted`, `is_ultra_restricted`, `is_stranger`\nand a deleted account all mark the turn, whatever workspace the person sits in.\n\n**An app is judged by its workspace, like a person.** A bot that writes in a room is a member when it\nis your own workspace's app, and an outside author when it belongs to another workspace you have not\ndeclared. There is no separate rule for bots.\n\n## Slash commands: `/oe` (zero-inference control-plane)\n\n`/oe` is the control-plane escape hatch (backlog item 23): pure logic, code-rendered responses,\n**no model turn** — so it answers even while a channel is over its spend cap or the model/gateway\nitself is down. Unlike `@mention`/DM, it rides its **own dedicated Request URL**\n(`/eve/v1/slack/commands`) — a brand-new route, separate from the Event Subscriptions /\nInteractivity URL (`/eve/v1/slack`) Steps 1.6–1.8 configure — so setting it up never touches the\nmention/DM/approval-card wiring above.\n\nCommands (typed as free text after `/oe`):\n\n| Command | What it does | Visibility |\n| --- | --- | --- |\n| `/oe status` | Deploy sanity: the deployment sha and eve pin that identify this build, the app version when the deploy carries one, primary/utility model config, the context window and the token count compaction fires at, memory provider. | Ephemeral (only you see it) |\n| `/oe budget` (or `/oe budget status`) | This channel's and workspace's effective spend caps (tokens + USD) and current-month spend — the SAME figures the spend gate enforces. | Ephemeral |\n| `/oe budget raise <usd>` | Proposes a new monthly USD cap for this channel: posts the SAME public approval card `set_spend_limit` posts (Approve/Reject buttons); an admin decides. The ephemeral ack also shows **your own domain's recent spend** from the ledger — see [Spend & cost](../../security/spend-and-cost.md#the-domain-spend-scan-behind-oe-budget-raise). | Card: public in-channel. Ack: ephemeral |\n| `/oe budget clear` | Proposes clearing this channel's spend-limit override back to the config-as-code cap: posts the SAME public approval card `clear_spend_limit` posts. | Card: public in-channel. Ack: ephemeral |\n| `/oe stop` | Stands down the turn currently running in this channel: resolves it from the durable turn-anchor registry and cancels it. **No model turn, nothing spent** — so it works while the channel is over its cap, which is when you are most likely to want it. | Ephemeral |\n| `/oe rate <1-5>` | Records one human mark on the [model A/B test](../../extending/models-and-gateway.md#ab-testing-a-challenger-model): rates this channel's most recent champion/challenger turn, on the arm that turn actually ran. Answers \"nothing to rate\" — the normal reply — while the test is off. | Ephemeral |\n| `/oe help` | Lists the commands. | Ephemeral |\n\nBare `/oe` (no text) defaults to help — the friendliest landing. `/oe budget` alone (no `raise`/\n`clear`) defaults to `budget status`; Discord's equivalent (`/oe`) requires picking a concrete\nsubcommand instead — see the [Discord guide](./discord.md#slash-commands-oe-zero-inference-control-plane)\nfor why that's a genuine, documented platform grammar difference, not an inconsistency.\n\n### Register the Slack app feature\n\n1. In your Slack app config, go to **Slash Commands** → **Create New Command**.\n2. **Command**: `/oe`.\n3. **Request URL**:\n\n ```\n https://<your-deploy-url>/eve/v1/slack/commands\n ```\n\n4. **Short Description**: `Open Everywhere control-plane commands (stop, status, budget) — no model turn.`\n5. **Usage Hint**: `stop | status | budget | budget raise <usd> | budget clear | help`.\n6. **Save**, then reinstall the app if Slack prompts you to (a new command is a scope-adjacent change).\n\nNo extra env var is needed — the route reuses `SLACK_SIGNING_SECRET` from [Step 2](#step-2--configure-the-environment) to verify every request (the SAME `v0=` HMAC scheme Event Subscriptions uses), and `SLACK_BOT_TOKEN` to post the `raise`/`clear` approval card.\n\n## Stopping it\n\nTwo different things, two different mechanisms — and the split is not stylistic.\n\n**Stop the turn it is running now.** Either react **✋** on the thread, or run **`/oe stop`**. Both\nare decided at ingress, before any model call, so both are free and both keep working when the\nchannel is over its spend cap. The ✋ is placed by the agent's host when a turn actually kicks work\noff — its first delegation — and removed when the turn ends, so it is present and clickable exactly\nwhile a stop is meaningful, and never appears on a message the agent merely read. Inference cannot\ndo this job at all: the agent is the thing that is busy, so a message saying \"stop!\" queues behind\nthe very turn it would stop.\n\nBe clear-eyed about what a stop is: the turn's history rolls back to its last completed model call,\nbut **anything already done is done** — tool calls inside the interrupted step had real effects and\nare not undone, and a running sandbox command can't be killed. The acknowledgement says so, and\nnames what had already run.\n\n**Stop it following the thread.** Just tell it — \"you can stop following this\", \"we're good here,\nthanks\", whatever you'd say to a colleague. This is **judged, not pattern-matched**: the agent reads\nthe intent between turns and calls `stand_down`, which sets a durable marker on the thread. It stays\nin the channel and loses nothing; `@mention` it to pull it back in. There is deliberately no magic\nword — the regex that used to look for one disengaged on \"don't stop the deploy\" as readily as on\n\"stop\", which is the failure mode a pattern over unbounded phrasing always has.\n\nThis is a **channel-only** verb. A DM has no `@mention` to pull it back in, so `stand_down` refuses\nthere and the agent replies that it could not stop following — a marker nobody could ever clear\nwould trap the DM silent for good.\n\n### Spend caps deliberately do NOT gate `/oe`\n\nThere is no model turn to decline, so `/oe` isn't a \"new spend\" origin — it works in a ⛔'d channel\nexactly as well as in one with headroom. `/oe budget raise`/`clear` still go through the real\napproval-card machinery; a human's click, not the command, is what actually changes anything.\n\n## Gotchas\n\n- **Signing-secret verification.** Every inbound webhook is HMAC-verified against `SLACK_SIGNING_SECRET`. If it's wrong or unset, Slack requests are rejected and the bot stays silent — check this first if mentions do nothing.\n- **Request URL challenge handshake.** When you set or change the Event Subscriptions URL, Slack POSTs a `url_verification` challenge. Your instance must be live and reachable at that moment to echo it back, or Slack marks the URL unverified and won't deliver events. Running locally? Expose it with a tunnel (e.g. `ngrok`) and use that HTTPS URL.\n- **DMs need both pieces.** A DM only works if you subscribed to the `message.im` bot event **and** granted the `im:history` scope. Missing either means DMs are silently dropped.\n- **An approve/reject click in a DM needs `im:read` (group DM: `mpim:read`).** Both are separate\n from `im:history`, and neither is covered by `channels:read`/`groups:read`. Before a member-tier\n click executes, the approval **clicker floor** resolves the room's roster\n (`conversations.info` + `conversations.members`) to check who could see the card; in a DM that\n call is on a `D…` id. Without the scope both calls fail `missing_scope`, the roster is\n unresolved, and clicks on the kinds whose result is handed to the clicker (minting a webhook\n signing secret, say) are refused with a roster complaint — while chat in that same DM keeps\n working normally, which is what makes it confusing. If you added the scope to an app that was\n already installed, **reinstall it** — see the note in Step 1.\n- **A private channel is NOT memory-isolated by that alone — trust decides, not visibility.** A verified in-workspace private channel shares its domain's (or the org's) brain exactly like a public one; visibility (public/private) is tracked but doesn't gate sharing. What DOES gate it is `conversations.info` failing to positively confirm the channel — missing the relevant read scope means the channel binds `external` (fail-closed): read-only `public` memory at most, no domain or org brain, regardless of whether it's public or private. Grant `channels:read` (or `groups:read` for a private channel) so `conversations.info` succeeds and the channel resolves `internal` — `channels:history` is a different scope (it gates `conversations.history`, the message-read path) and granting it alone will not fix this.\n- **`/oe` has its own Request URL.** It's a separate Slack app feature (Slash Commands) from Event Subscriptions/Interactivity — pointing it at the wrong URL (or forgetting to set it at all) means `/oe` times out with Slack's generic \"dispatch_failed\" error while mentions/DMs keep working fine, since they're on a different route entirely.\n- **Slack Connect (shared) channels: it answers, with public-only memory.** A channel shared across workspaces/orgs (`is_shared` / `is_ext_shared` / `is_org_shared` on `conversations.info`) binds **external** trust: the bot still replies, but with read-only `public` memory at most — no domain brain, no org brain, no shared-memory writes (this differs from Claude's Slack agent, which refuses shared channels outright). One consequence to know: if *another* org in that shared channel runs its own agent on this codebase (or any bot), each install answers its own org's mentions independently — the bot-author drop prevents loops between them, but nothing deduplicates two humans mentioning two different bots. If you don't want the bot in shared channels at all, just don't invite it to them.\n",
|
|
11
|
+
},
|
|
12
|
+
];
|
|
13
|
+
//# sourceMappingURL=docs-generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs-generated.js","sourceRoot":"","sources":["../../agent/docs-generated.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,wFAAwF;AACxF,6FAA6F;AAC7F,sFAAsF;AAItF,MAAM,CAAC,MAAM,aAAa,GAAwB;IAChD;QACE,IAAI,EAAE,+BAA+B;QACrC,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,wMAAwM;QACjN,QAAQ,EAAE,o9pDAAo9pD;KAC/9pD;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../agent/ops.ts"],"names":[],"mappings":"AAwBA,0GAA0G;AAC1G,wBAAgB,gBAAgB,IAAI,IAAI,CAwBvC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// registerSlackOps — the LIGHT ops-plane half of the slack bundle's boot wiring: the quickstart
|
|
2
|
+
// surface-goal step, the paste-ready app manifest, and the telemetry credential-presence probe.
|
|
3
|
+
// Split out of register.ts so the
|
|
4
|
+
// STANDALONE ops MCP entry (repo-root scripts/ops-mcp.ts, which serves preflight/quickstart with
|
|
5
|
+
// no agent boot) can register it without pulling the whole channel graph. registerSlackProvider()
|
|
6
|
+
// calls this too, so the agent runtime carries the same registrations.
|
|
7
|
+
//
|
|
8
|
+
// This file (not core) owns the Slack env-key knowledge — SLACK_BOT_TOKEN / SLACK_SIGNING_SECRET
|
|
9
|
+
// are the bundle's vendor fingerprints (boundary-test.ts rule 6).
|
|
10
|
+
import { registerQuickstartSurfaceGoal, registerSurfaceAppManifest, registerSurfaceCredentialProbe, } from "@open-everywhere/core/agent/adapter-api.js";
|
|
11
|
+
import { SLACK_APP_CONSOLE_URL, SLACK_APP_MANIFEST_COLLECT, SLACK_APP_MANIFEST_STEPS, slackAppManifestTemplate, } from "./app-manifest.js";
|
|
12
|
+
const set = (v) => v !== undefined && v !== "";
|
|
13
|
+
/** Register the slack ops-plane arms (quickstart goal step + app manifest + telemetry presence probe). */
|
|
14
|
+
export function registerSlackOps() {
|
|
15
|
+
registerQuickstartSurfaceGoal("slack", (env) => {
|
|
16
|
+
const ok = set(env.SLACK_BOT_TOKEN) && set(env.SLACK_SIGNING_SECRET);
|
|
17
|
+
return {
|
|
18
|
+
id: "slack",
|
|
19
|
+
title: "Slack app",
|
|
20
|
+
status: ok ? "done" : "todo",
|
|
21
|
+
detail: "Create a Slack app from the manifest the ops tool `surface_manifest { surface: \"slack\" }` returns, then copy the bot " +
|
|
22
|
+
"token + signing secret. Slack reserves app creation for a workspace admin, so this step needs a person.",
|
|
23
|
+
command: ok ? undefined : "set SLACK_BOT_TOKEN + SLACK_SIGNING_SECRET in .env.local",
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
// THE PASTE-READY APP MANIFEST (OPE-1603). Minting the Slack app stays human, so the ops plane's
|
|
27
|
+
// job is to hand the operator the exact document. The bundle owns the document (agent/
|
|
28
|
+
// app-manifest.ts); core substitutes this deployment's host into it.
|
|
29
|
+
registerSurfaceAppManifest("slack", {
|
|
30
|
+
format: "json",
|
|
31
|
+
consoleUrl: SLACK_APP_CONSOLE_URL,
|
|
32
|
+
steps: SLACK_APP_MANIFEST_STEPS,
|
|
33
|
+
collect: SLACK_APP_MANIFEST_COLLECT,
|
|
34
|
+
template: slackAppManifestTemplate,
|
|
35
|
+
});
|
|
36
|
+
registerSurfaceCredentialProbe("slack", () => Boolean(process.env.SLACK_BOT_TOKEN));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ops.js","sourceRoot":"","sources":["../../agent/ops.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,gGAAgG;AAChG,kCAAkC;AAClC,iGAAiG;AACjG,kGAAkG;AAClG,uEAAuE;AACvE,EAAE;AACF,iGAAiG;AACjG,kEAAkE;AAElE,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,GAAG,GAAG,CAAC,CAAqB,EAAW,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;AAE5E,0GAA0G;AAC1G,MAAM,UAAU,gBAAgB;IAC9B,6BAA6B,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACrE,OAAO;YACL,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YAC5B,MAAM,EACJ,yHAAyH;gBACzH,yGAAyG;YAC3G,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0DAA0D;SACrF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,iGAAiG;IACjG,uFAAuF;IACvF,qEAAqE;IACrE,0BAA0B,CAAC,OAAO,EAAE;QAClC,MAAM,EAAE,MAAM;QACd,UAAU,EAAE,qBAAqB;QACjC,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,0BAA0B;QACnC,QAAQ,EAAE,wBAAwB;KACnC,CAAC,CAAC;IACH,8BAA8B,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-events.d.ts","sourceRoot":"","sources":["../../agent/provider-events.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAE3F,eAAO,MAAM,qBAAqB,EAAE,wBAoEnC,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// SLACK's event inventory (OPE-1612). See the core module's header
|
|
2
|
+
// (packages/core/agent/routines/provider-events.ts) for what the three routing states mean.
|
|
3
|
+
//
|
|
4
|
+
// 🔴 SLACK REGISTERS NO EVENT NORMALIZER, so every row is `routing: "none"` and the declaration
|
|
5
|
+
// names no `source`. That is the whole point of listing them: the normalizer registry can only
|
|
6
|
+
// enumerate what this deployment already routes, so the events nobody wired are exactly the ones it
|
|
7
|
+
// is structurally unable to mention. A reader asking "could a routine wake on a Slack channel being
|
|
8
|
+
// created?" gets an answer here instead of silence.
|
|
9
|
+
//
|
|
10
|
+
// SLACK IS THE REFERENCE SURFACE, WHICH IS WHY IT HAS NO NORMALIZER. Its deliveries already drive
|
|
11
|
+
// the mention leg, the ambient supervisor and the reaction-feedback plane — a routine fires INTO
|
|
12
|
+
// Slack rather than OFF it. Wiring one would need a decision the routing plane cannot make alone:
|
|
13
|
+
// `message` is the highest-volume event any surface here emits, and a subscription on it with no
|
|
14
|
+
// narrowing is a fire-hose the mandatory-narrowing rule exists to refuse.
|
|
15
|
+
export const SLACK_PROVIDER_EVENTS = {
|
|
16
|
+
// `source` is ABSENT, not empty — the bundle registers no normalizer, so there is no key to name.
|
|
17
|
+
doc: "https://docs.slack.dev/reference/events",
|
|
18
|
+
events: [
|
|
19
|
+
{
|
|
20
|
+
event: "message",
|
|
21
|
+
routing: "none",
|
|
22
|
+
match: [],
|
|
23
|
+
scope: [],
|
|
24
|
+
note: "a message was posted in a channel; the ambient supervisor already judges these, so a routine on it would wake a seat twice",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
event: "app_mention",
|
|
28
|
+
routing: "none",
|
|
29
|
+
match: [],
|
|
30
|
+
scope: [],
|
|
31
|
+
note: "the app was @mentioned; the mention leg owns it and wakes a full turn already",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
event: "reaction_added",
|
|
35
|
+
routing: "none",
|
|
36
|
+
match: [],
|
|
37
|
+
scope: [],
|
|
38
|
+
note: "somebody reacted to a message; the reaction-feedback plane reads it, and a routine could not tell its own ack glyphs from a person's",
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
event: "reaction_removed",
|
|
42
|
+
routing: "none",
|
|
43
|
+
match: [],
|
|
44
|
+
scope: [],
|
|
45
|
+
note: "a reaction was taken off a message; unwired for the same reason as `reaction_added`",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
event: "channel_created",
|
|
49
|
+
routing: "none",
|
|
50
|
+
match: [],
|
|
51
|
+
scope: [],
|
|
52
|
+
note: "a channel was created — the clearest candidate for a routine trigger here, and nothing routes it today",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
event: "member_joined_channel",
|
|
56
|
+
routing: "none",
|
|
57
|
+
match: [],
|
|
58
|
+
scope: [],
|
|
59
|
+
note: "somebody joined a channel; unwired — an onboarding routine would want this one",
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
event: "team_join",
|
|
63
|
+
routing: "none",
|
|
64
|
+
match: [],
|
|
65
|
+
scope: [],
|
|
66
|
+
note: "a new member joined the workspace; unwired",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
event: "file_shared",
|
|
70
|
+
routing: "none",
|
|
71
|
+
match: [],
|
|
72
|
+
scope: [],
|
|
73
|
+
note: "a file was shared; unwired — the attachment plane reads files on a turn it was already woken for",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
event: "app_home_opened",
|
|
77
|
+
routing: "none",
|
|
78
|
+
match: [],
|
|
79
|
+
scope: [],
|
|
80
|
+
note: "a user opened the app's home tab; unwired, and a poor routine trigger — it fires on a view, not on work",
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=provider-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-events.js","sourceRoot":"","sources":["../../agent/provider-events.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,4FAA4F;AAC5F,EAAE;AACF,gGAAgG;AAChG,+FAA+F;AAC/F,oGAAoG;AACpG,oGAAoG;AACpG,oDAAoD;AACpD,EAAE;AACF,kGAAkG;AAClG,iGAAiG;AACjG,kGAAkG;AAClG,iGAAiG;AACjG,0EAA0E;AAS1E,MAAM,CAAC,MAAM,qBAAqB,GAA6B;IAC7D,kGAAkG;IAClG,GAAG,EAAE,yCAAyC;IAC9C,MAAM,EAAE;QACN;YACE,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,4HAA4H;SACnI;QACD;YACE,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,+EAA+E;SACtF;QACD;YACE,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,sIAAsI;SAC7I;QACD;YACE,KAAK,EAAE,kBAAkB;YACzB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,qFAAqF;SAC5F;QACD;YACE,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,wGAAwG;SAC/G;QACD;YACE,KAAK,EAAE,uBAAuB;YAC9B,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,gFAAgF;SACvF;QACD;YACE,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,4CAA4C;SACnD;QACD;YACE,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,kGAAkG;SACzG;QACD;YACE,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,yGAAyG;SAChH;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Perform ALL of the slack bundle's registrations. Idempotent (each register call replaces);
|
|
2
|
+
* cheap and side-effect-free beyond the registry writes (every live Slack call inside the
|
|
3
|
+
* registered arms resolves its token lazily at call time). */
|
|
4
|
+
export declare function registerSlackProvider(): void;
|
|
5
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../agent/register.ts"],"names":[],"mappings":"AAqEA;;+DAE+D;AAC/D,wBAAgB,qBAAqB,IAAI,IAAI,CAuE5C"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// registerSlackProvider — the ONE boot entry of @open-everywhere/provider-slack. The app's
|
|
2
|
+
// adapter-wiring module (agent/lib/register-adapters.ts) imports this STATICALLY and calls it once
|
|
3
|
+
// at boot; every seam the slack bundle implements registers here and nowhere else. Static imports
|
|
4
|
+
// only: eve bundles the agent definition and its whole import graph into one rolldown chunk — a
|
|
5
|
+
// literal dynamic import() code-splits and trips eve's "expected one authored module" invariant.
|
|
6
|
+
//
|
|
7
|
+
// What slack registers:
|
|
8
|
+
// • identity mapper — bindSlack (chat-surface plane; channels/slack-identity.ts)
|
|
9
|
+
// • capability manifest — midTurnPost + reactions (Slack has both primitives)
|
|
10
|
+
// • surface parity — the OPE-1499 ledger: every capability the chat-surface contract
|
|
11
|
+
// names, answered supported/unsupported (./surface-parity.ts)
|
|
12
|
+
// • post arm — slackPostArm (mid-turn reply + unified reply + redrive helpers)
|
|
13
|
+
// • wake-origin codec — the stored-data slack arm (channels/slack-origin-codec.ts)
|
|
14
|
+
// • read adapter — slackReadAdapter (the generic read_channel/read_thread arm)
|
|
15
|
+
// • reaction surface — slack's emoji-feedback ingest membership
|
|
16
|
+
// • bot display name — a HANDLE line on a Slack-pinned session, not identity since OPE-610
|
|
17
|
+
// (OPE-587; core identity/bot-display-name.ts)
|
|
18
|
+
// • account display name — a human account's name + handle for the identity-linking flow
|
|
19
|
+
// (OPE-616; core identity/account-display-name.ts)
|
|
20
|
+
// • attachment resolver — the trusted url_private plane (channels/slack-attachments.ts)
|
|
21
|
+
// • governance supplier — the live roster arm of the OPE-110 governance venue floor
|
|
22
|
+
// • slack BRIDGE — the seam bundle→core for the slack behaviours core's GENERIC
|
|
23
|
+
// spine still branches on (slackForm posts for approval/connector
|
|
24
|
+
// cards + credential intake, display-name lookups, the fail-closed
|
|
25
|
+
// internal-channel gate, the DM-partner membership verdict, the
|
|
26
|
+
// readable-channel list, and the channel object the routine/webhook
|
|
27
|
+
// dispatchers `receive()` into) — core channels/slack-bridge.ts
|
|
28
|
+
// • ops arms — quickstart surface-goal step + telemetry creds probe (./ops.ts)
|
|
29
|
+
import { registerIdentityMapper, registerCapabilityManifest, registerSurfaceParity, registerProviderEvents, registerPostArm, registerWakeOriginCodec, registerReadAdapter, registerSeatCatchUp, registerReactionSurface, registerBotDisplayName, registerAccountDisplayName, registerAccountDirectory, registerSlackBridge, registerProviderDocs, registerWebhookVerifier, } from "@open-everywhere/core/agent/adapter-api.js";
|
|
30
|
+
import { PROVIDER_DOCS } from "./docs-generated.js";
|
|
31
|
+
import { SLACK_SURFACE_PARITY } from "./surface-parity.js";
|
|
32
|
+
import { SLACK_PROVIDER_EVENTS } from "./provider-events.js";
|
|
33
|
+
import { bindSlack, partnerFactsFromInfo } from "./channels/slack-identity.js";
|
|
34
|
+
import { slackPostArm } from "./channels/slack-post-arm.js";
|
|
35
|
+
import { slackWakeOriginCodec } from "./channels/slack-origin-codec.js";
|
|
36
|
+
import { slackReadAdapter, callSlackRead } from "./channels/slack-read.js";
|
|
37
|
+
import { slackSeatCatchUpFetch, SLACK_TIMESTAMP_PRECISION_MS } from "./channels/slack-wake-backscroll.js";
|
|
38
|
+
import { registerSlackAttachmentResolver } from "./channels/slack-attachments.js";
|
|
39
|
+
import { slackForm, fetchUserDisplayName, fetchChannelDisplayName, fetchUserProfileNames, fetchWorkspaceRoster, botDisplayName, confirmChannelInternal, registerSlackGovernanceMembers, } from "./channels/slack-events.js";
|
|
40
|
+
import slackChannel from "./channels/slack.js";
|
|
41
|
+
import { slackWebhookVerifier } from "./channels/slack-webhook-verifier.js";
|
|
42
|
+
import { registerSlackOps } from "./ops.js";
|
|
43
|
+
/** Perform ALL of the slack bundle's registrations. Idempotent (each register call replaces);
|
|
44
|
+
* cheap and side-effect-free beyond the registry writes (every live Slack call inside the
|
|
45
|
+
* registered arms resolves its token lazily at call time). */
|
|
46
|
+
export function registerSlackProvider() {
|
|
47
|
+
registerIdentityMapper("slack", bindSlack);
|
|
48
|
+
// Chat surface: Slack has BOTH uniform verbs — mid-turn chat.postMessage and reactions.add.
|
|
49
|
+
// `closingProseDropped` states the third fact (OPE-784): channels/slack.ts runs every
|
|
50
|
+
// supervisor turn through the message-tool-only gate, so a per-container supervisor's closing
|
|
51
|
+
// text never posts. The persona reads it to tell that seat the truth about its own delivery.
|
|
52
|
+
registerCapabilityManifest("slack", { midTurnPost: true, reactions: true, closingProseDropped: true });
|
|
53
|
+
// The OPE-1499 parity ledger: every capability the chat-surface contract names, answered
|
|
54
|
+
// `supported` or `{ unsupported: "<reason>" }`. Gates nothing at runtime — `lint:surface-parity`
|
|
55
|
+
// reds on an unanswered row, and the contract's §7.1/§7.1.1/§7.2 tables are generated from it.
|
|
56
|
+
registerSurfaceParity("slack", SLACK_SURFACE_PARITY);
|
|
57
|
+
// The OPE-1612 event inventory: every vendor event that could wake a routine, and how far the
|
|
58
|
+
// normalizer plane carries each one. Gates nothing at runtime — `lint:provider-events` reds a
|
|
59
|
+
// bundle that declares none or that promises a match key the normalizer does not declare, and
|
|
60
|
+
// the manual's inventory table is generated from it.
|
|
61
|
+
registerProviderEvents("slack", SLACK_PROVIDER_EVENTS);
|
|
62
|
+
registerPostArm(slackPostArm);
|
|
63
|
+
registerWakeOriginCodec("slack", slackWakeOriginCodec);
|
|
64
|
+
registerReadAdapter(slackReadAdapter);
|
|
65
|
+
// THE SEAT CATCH-UP FETCH (OPE-1726): the seat's own channel history since its last wake,
|
|
66
|
+
// normalized and visibility-gated. Core's shared path (channels/seat-catch-up.ts) applies the
|
|
67
|
+
// bounds, the domain's admission policy and the token cap; a platform that registers none is
|
|
68
|
+
// reported UNAVAILABLE in its wakes rather than rendering an empty context.
|
|
69
|
+
// The surface DECLARES the unit its own message stamps carry, and core widens both catch-up
|
|
70
|
+
// bounds by it (OPE-1847). A wrong or missing unit bounds the seat out of its own window.
|
|
71
|
+
registerSeatCatchUp("slack", slackSeatCatchUpFetch, { timestampPrecisionMs: SLACK_TIMESTAMP_PRECISION_MS });
|
|
72
|
+
registerReactionSurface("slack");
|
|
73
|
+
// The bot's own Slack display name (OPE-587) — the arm the instruction assembler renders as a
|
|
74
|
+
// HANDLE line on a Slack-pinned session ("your mention/handle here appears as X"), never as
|
|
75
|
+
// identity since OPE-610 settled the naming model. `botDisplayName` memoises one auth.test +
|
|
76
|
+
// users.info pair per instance, so the assembler pays no round trip per turn.
|
|
77
|
+
registerBotDisplayName("slack", botDisplayName);
|
|
78
|
+
// A HUMAN account's Slack display name + handle (OPE-616) — the arm the identity-linking flow
|
|
79
|
+
// (hooks/link-claim.ts, tools/confirm_link.ts) names a claimant/initiator with, instead of a bare
|
|
80
|
+
// principal key. `fetchUserProfileNames` is the same cached users.info call the wake envelope's
|
|
81
|
+
// <participants> block already resolves (channels/slack-events.ts) — one cache, one call.
|
|
82
|
+
registerAccountDisplayName("slack", (nativeId) => fetchUserProfileNames(nativeId));
|
|
83
|
+
// The WORKSPACE ROSTER (OPE-617) — the lookup the reverse-initiated link uses to NAME the other
|
|
84
|
+
// account instead of posting a bearer code. Slack has no server-side user search, so the arm hands
|
|
85
|
+
// core the whole (paged, human-only) roster and core does the pure matching. `users:read` is the
|
|
86
|
+
// scope; without it the arm answers with nothing and linking falls back to the code flow.
|
|
87
|
+
registerAccountDirectory("slack", () => fetchWorkspaceRoster());
|
|
88
|
+
// Attachment plane: the trusted-provenance url_private resolver (+ the size-guarded variant
|
|
89
|
+
// read_file_upload uses). Registering here preserves the "register in every process" posture —
|
|
90
|
+
// register-adapters.ts runs wherever describe_image / read_file_upload can execute.
|
|
91
|
+
registerSlackAttachmentResolver();
|
|
92
|
+
// Governance venue floor (OPE-110): the live Slack roster supplier. Core owns the seam + the
|
|
93
|
+
// fail-closed default (no supplier ⇒ a governance channel never arms); v1 is Slack-only.
|
|
94
|
+
registerSlackGovernanceMembers();
|
|
95
|
+
// The bundle→core bridge for the generic spine's slack branches (see file header).
|
|
96
|
+
registerSlackBridge({
|
|
97
|
+
form: slackForm,
|
|
98
|
+
readCall: callSlackRead,
|
|
99
|
+
fetchUserDisplayName,
|
|
100
|
+
fetchChannelDisplayName,
|
|
101
|
+
botDisplayName,
|
|
102
|
+
confirmChannelInternal,
|
|
103
|
+
partnerFactsFromInfo,
|
|
104
|
+
channel: slackChannel,
|
|
105
|
+
});
|
|
106
|
+
registerSlackOps();
|
|
107
|
+
// Webhook-verifier plane (OPE-164, populated for slack by OPE-197): Slack's `v0=` HMAC scheme, so
|
|
108
|
+
// a GENERIC hook can declare `source: "slack"` and be verified the way Slack signs. Changes no
|
|
109
|
+
// existing route — `/eve/v1/slack` and `/eve/v1/slack/commands` keep their own inline gate over
|
|
110
|
+
// the same shared primitive. NOT chat-mintable: the key is Slack's own Signing Secret
|
|
111
|
+
// (`keyOrigin: "vendor-issued"`), so this is an operator-declared-hook scheme by construction.
|
|
112
|
+
registerWebhookVerifier(slackWebhookVerifier);
|
|
113
|
+
// Shipped-manual plane (OPE-138): this bundle's own setup runbook (docs/deploy/surfaces/slack.md,
|
|
114
|
+
// compiled into ./docs-generated.ts because docs/ is not on disk at runtime). De-select the bundle
|
|
115
|
+
// and the module leaves the import graph; registerProviderDocs re-checks the selection gate anyway.
|
|
116
|
+
registerProviderDocs("slack", PROVIDER_DOCS);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../agent/register.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,mGAAmG;AACnG,kGAAkG;AAClG,gGAAgG;AAChG,iGAAiG;AACjG,EAAE;AACF,wBAAwB;AACxB,0FAA0F;AAC1F,mFAAmF;AACnF,+FAA+F;AAC/F,2FAA2F;AAC3F,+FAA+F;AAC/F,0FAA0F;AAC1F,2FAA2F;AAC3F,wEAAwE;AACxE,mGAAmG;AACnG,4EAA4E;AAC5E,6FAA6F;AAC7F,gFAAgF;AAChF,6FAA6F;AAC7F,yFAAyF;AACzF,4FAA4F;AAC5F,+FAA+F;AAC/F,gGAAgG;AAChG,6FAA6F;AAC7F,iGAAiG;AACjG,6FAA6F;AAC7F,+FAA+F;AAE/F,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AAC1G,OAAO,EAAE,+BAA+B,EAAE,MAAM,iCAAiC,CAAC;AAClF,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,4BAA4B,CAAC;AACpC,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C;;+DAE+D;AAC/D,MAAM,UAAU,qBAAqB;IACnC,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3C,4FAA4F;IAC5F,sFAAsF;IACtF,8FAA8F;IAC9F,6FAA6F;IAC7F,0BAA0B,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;IACvG,yFAAyF;IACzF,iGAAiG;IACjG,+FAA+F;IAC/F,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACrD,8FAA8F;IAC9F,8FAA8F;IAC9F,8FAA8F;IAC9F,qDAAqD;IACrD,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACvD,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9B,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACvD,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACtC,0FAA0F;IAC1F,8FAA8F;IAC9F,6FAA6F;IAC7F,4EAA4E;IAC5E,4FAA4F;IAC5F,0FAA0F;IAC1F,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,EAAE,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAC5G,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,8FAA8F;IAC9F,4FAA4F;IAC5F,6FAA6F;IAC7F,8EAA8E;IAC9E,sBAAsB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAChD,8FAA8F;IAC9F,kGAAkG;IAClG,gGAAgG;IAChG,0FAA0F;IAC1F,0BAA0B,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,gGAAgG;IAChG,mGAAmG;IACnG,iGAAiG;IACjG,0FAA0F;IAC1F,wBAAwB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAChE,4FAA4F;IAC5F,+FAA+F;IAC/F,oFAAoF;IACpF,+BAA+B,EAAE,CAAC;IAClC,6FAA6F;IAC7F,yFAAyF;IACzF,8BAA8B,EAAE,CAAC;IACjC,mFAAmF;IACnF,mBAAmB,CAAC;QAClB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,aAAa;QACvB,oBAAoB;QACpB,uBAAuB;QACvB,cAAc;QACd,sBAAsB;QACtB,oBAAoB;QACpB,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;IACH,gBAAgB,EAAE,CAAC;IACnB,kGAAkG;IAClG,+FAA+F;IAC/F,gGAAgG;IAChG,sFAAsF;IACtF,+FAA+F;IAC/F,uBAAuB,CAAC,oBAAoB,CAAC,CAAC;IAC9C,kGAAkG;IAClG,mGAAmG;IACnG,oGAAoG;IACpG,oBAAoB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface-parity.d.ts","sourceRoot":"","sources":["../../agent/surface-parity.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAE3F,eAAO,MAAM,oBAAoB,EAAE,wBAwFlC,CAAC"}
|