cli-jaw 2.2.17 → 2.2.18
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/README.md +4 -0
- package/dist/bin/cli-jaw.js +9 -1
- package/dist/bin/cli-jaw.js.map +1 -1
- package/dist/bin/commands/ask.js +245 -0
- package/dist/bin/commands/ask.js.map +1 -0
- package/dist/bin/commands/chat.js +41 -3
- package/dist/bin/commands/chat.js.map +1 -1
- package/dist/bin/commands/dispatch.js +210 -167
- package/dist/bin/commands/dispatch.js.map +1 -1
- package/dist/bin/commands/init.js +33 -4
- package/dist/bin/commands/init.js.map +1 -1
- package/dist/bin/commands/slack.js +73 -3
- package/dist/bin/commands/slack.js.map +1 -1
- package/dist/bin/commands/tui/raw-pipe-mode.js +90 -0
- package/dist/bin/commands/tui/raw-pipe-mode.js.map +1 -0
- package/dist/bin/commands/tui/simple-mode.js +11 -2
- package/dist/bin/commands/tui/simple-mode.js.map +1 -1
- package/dist/bin/postinstall.js +54 -30
- package/dist/bin/postinstall.js.map +1 -1
- package/dist/server.js +10 -0
- package/dist/server.js.map +1 -1
- package/dist/src/agent/pi-runtime.js +10 -2
- package/dist/src/agent/pi-runtime.js.map +1 -1
- package/dist/src/agent/spawn/queue.js +21 -0
- package/dist/src/agent/spawn/queue.js.map +1 -1
- package/dist/src/agent/spawn.js +19 -6
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/cli/cli-status.js +65 -5
- package/dist/src/cli/cli-status.js.map +1 -1
- package/dist/src/cli/handlers.js +9 -1
- package/dist/src/cli/handlers.js.map +1 -1
- package/dist/src/cli/tui/jawcode-render.js +18 -5
- package/dist/src/cli/tui/jawcode-render.js.map +1 -1
- package/dist/src/core/config.js +85 -0
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/exec-name.js +55 -0
- package/dist/src/core/exec-name.js.map +1 -0
- package/dist/src/core/runtime-settings.js +9 -1
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/core/settings-watch.js +10 -1
- package/dist/src/core/settings-watch.js.map +1 -1
- package/dist/src/lib/tui/bun-shim.mjs +75 -0
- package/dist/src/memory/bootstrap.js +8 -1
- package/dist/src/memory/bootstrap.js.map +1 -1
- package/dist/src/messaging/channel-validate.js +11 -1
- package/dist/src/messaging/channel-validate.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +23 -2
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +6 -0
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/orchestrator/request-registry.js +116 -0
- package/dist/src/orchestrator/request-registry.js.map +1 -0
- package/dist/src/prompt/templates/a1-system.md +5 -5
- package/dist/src/routes/messaging.js +94 -1
- package/dist/src/routes/messaging.js.map +1 -1
- package/dist/src/routes/settings.js +61 -4
- package/dist/src/routes/settings.js.map +1 -1
- package/dist/src/routes/system.js +23 -3
- package/dist/src/routes/system.js.map +1 -1
- package/dist/src/slack/bot.js +36 -1
- package/dist/src/slack/bot.js.map +1 -1
- package/dist/src/slack/commands.js +29 -1
- package/dist/src/slack/commands.js.map +1 -1
- package/dist/src/slack/events.js +4 -1
- package/dist/src/slack/events.js.map +1 -1
- package/dist/src/slack/history.js +10 -3
- package/dist/src/slack/history.js.map +1 -1
- package/dist/src/slack/identity.js +553 -0
- package/dist/src/slack/identity.js.map +1 -0
- package/dist/src/slack/ingress.js +42 -0
- package/dist/src/slack/ingress.js.map +1 -1
- package/dist/src/slack/manifest.js +95 -71
- package/dist/src/slack/manifest.js.map +1 -1
- package/dist/src/slack/roster.js +180 -0
- package/dist/src/slack/roster.js.map +1 -0
- package/package.json +4 -3
- package/public/css/sidebar.css +29 -51
- package/public/dist/assets/AdvancedExport-c41zCkwB.js +1 -0
- package/public/dist/assets/{Agent-CNNQ7KkJ.js → Agent-nMPZsMfN.js} +1 -1
- package/public/dist/assets/ChannelsSlack-CVNKtoo4.js +1 -0
- package/public/dist/assets/{app-Dsgp4xpU.js → app-DqSJmDwP.js} +4 -4
- package/public/dist/assets/{app-DjgGeXhJ.css → app-DuyLYRC6.css} +1 -1
- package/public/dist/assets/bgtask-badge-CjWz0F6U.js +1 -0
- package/public/dist/assets/{bgtask-badge-CpavV0Jc.js → bgtask-badge-D6XYRFI5.js} +1 -1
- package/public/dist/assets/{employees-BJyEgim7.js → employees-B_wKPfTO.js} +1 -1
- package/public/dist/assets/{iframe-renderer-B8k3AvTv.js → iframe-renderer-D1-zDg8V.js} +2 -2
- package/public/dist/assets/iframe-renderer-qRVLHPnT.js +1 -0
- package/public/dist/assets/{manager-kXYQyMhR.js → manager-Bjuh1jpq.js} +1 -1
- package/public/dist/assets/{memory-D2RbBVO-.js → memory-CNUpXWEC.js} +1 -1
- package/public/dist/assets/memory-CcWGiPy_.js +1 -0
- package/public/dist/assets/message-history-BamMPUnL.js +1 -0
- package/public/dist/assets/{message-history-Bw2E_b8L.js → message-history-DB1rynP-.js} +1 -1
- package/public/dist/assets/{render-BkGcpH7z.js → render-DXwQzjsJ.js} +1 -1
- package/public/dist/assets/{settings-B1FPORO2.js → settings-CXndjCad.js} +14 -14
- package/public/dist/assets/settings-RGpifFHy.js +1 -0
- package/public/dist/assets/settings-core-X_5UHfr3.js +1 -0
- package/public/dist/assets/settings-core-t5yYVRrv.js +162 -0
- package/public/dist/assets/{sidebar-DW78DANx.js → sidebar-DgIj-LuT.js} +3 -3
- package/public/dist/assets/skills-CbwIimit.js +1 -0
- package/public/dist/assets/{skills-lWi0ZFiV.js → skills-QqxjqDHg.js} +1 -1
- package/public/dist/assets/{slash-commands-DYOI6nKj.js → slash-commands-B2V_jngP.js} +1 -1
- package/public/dist/assets/slash-commands-tCNRlNTC.js +1 -0
- package/public/dist/assets/{trace-drawer-DBX9xzmt.js → trace-drawer-CBe9nRjS.js} +1 -1
- package/public/dist/assets/{ui-Bx7eqnXt.js → ui-CDozpEQt.js} +1 -1
- package/public/dist/assets/ui-o-VpvrSv.js +1 -0
- package/public/dist/index.html +15 -34
- package/public/dist/manager/index.html +1 -1
- package/public/index.html +13 -32
- package/public/js/features/channel-onboarding-flow.ts +25 -2
- package/public/js/features/channel-onboarding.ts +111 -8
- package/public/js/features/settings-cli-status.ts +18 -4
- package/public/js/features/settings-slack.ts +127 -29
- package/public/js/features/settings-types.ts +11 -2
- package/public/locales/en.json +17 -8
- package/public/locales/ja.json +17 -8
- package/public/locales/ko.json +17 -8
- package/public/locales/zh.json +17 -8
- package/public/manager/src/settings/pages/AdvancedExport.tsx +1 -0
- package/public/manager/src/settings/pages/Agent.tsx +10 -1
- package/public/manager/src/settings/pages/ChannelsSlack.tsx +13 -1
- package/scripts/atomic-build.sh +10 -3
- package/scripts/release-preview.sh +16 -1
- package/scripts/verify-dist-assets.sh +53 -0
- package/public/dist/assets/AdvancedExport-DYGcCAUq.js +0 -1
- package/public/dist/assets/ChannelsSlack-ybvupgdK.js +0 -1
- package/public/dist/assets/bgtask-badge-C6h5C-o4.js +0 -1
- package/public/dist/assets/iframe-renderer-BO_GgCTR.js +0 -1
- package/public/dist/assets/memory-amsvg4Ey.js +0 -1
- package/public/dist/assets/message-history-BGHZxvgV.js +0 -1
- package/public/dist/assets/settings-CMN-zN4Q.js +0 -1
- package/public/dist/assets/settings-core-B_OjGYVN.js +0 -1
- package/public/dist/assets/settings-core-CxRwqx86.js +0 -144
- package/public/dist/assets/skills-Dz-9Yrxr.js +0 -1
- package/public/dist/assets/slash-commands-xJFCdTTM.js +0 -1
- package/public/dist/assets/ui-JOcrYeG-.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingress.js","sourceRoot":"","sources":["../../../src/slack/ingress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAqB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;AACtD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;AACzC,MAAM,eAAe,GAAsB,EAAE,CAAC;AAC9C,IAAI,eAAe,GAAG,CAAC,CAAC;AACxB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,SAAS,aAAa;IAClB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,0BAA0B,IAAI,CAAC,CAAC,CAAC;IACzE,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa;IAClB,OAAO,eAAe,GAAG,aAAa,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,MAAM;QAClB,eAAe,IAAI,CAAC,CAAC;QACrB,KAAK,EAAE,CAAC;IACZ,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAI,IAAsB,EAAE,MAAoB;IACjF,IAAI,SAAS,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACxF,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,KAAK,GAAG,GAAG,EAAE;YACf,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC3C,eAAe,IAAI,CAAC,CAAC;gBACrB,aAAa,EAAE,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,IAAI,OAAO;gBAAE,OAAO;YACpB,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,KAAK,IAAI,CAAC;gBAAE,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,aAAa,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAoB;IACpD,OAAO,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,KAAK,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC;QACvE,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC,SAAS,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAC/B,OAAe,EACf,IAA4C;IAE5C,IAAI,SAAS;QAAE,OAAO;IACtB,MAAM,cAAc,GAAG,UAAU,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;QACnB,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,cAAc,KAAK,UAAU;YAAE,OAAO;QACvE,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClG,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3D,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QAC5C,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QAChB,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI;YAAE,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACP,CAAC;AASD,MAAM,UAAU,aAAa,CAAC,MAM7B;IACG,MAAM,mBAAmB,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACvE,MAAM,WAAW,GAAG,mBAAmB,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,aAAa,GAAG,mBAAmB,IAAI,CAAC,WAAW;QACrD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;IACnF,MAAM,KAAK,GAAG,mBAAmB,CAAC,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE;QACxC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,eAAe,EAAE,IAAI;QACvE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM;QAC5C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK;KAC5D,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACvG,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;QACnE,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACnC,SAAS,GAAG,IAAI,CAAC;IACjB,UAAU,IAAI,CAAC,CAAC;IAChB,KAAK,MAAM,UAAU,IAAI,WAAW;QAAE,UAAU,CAAC,KAAK,EAAE,CAAC;IACzD,MAAM,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAChE,qEAAqE;QACrE,wEAAwE;QACxE,IAAI,UAAqD,CAAC;QAC1D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YACxC,UAAU,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACxC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QACrC,IAAI,UAAU;YAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QACzC,KAAK,MAAM,OAAO,IAAI,OAAO;YAAE,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvE,CAAC;IACD,yEAAyE;IACzE,2EAA2E;IAC3E,yEAAyE;IACzE,oCAAoC;IACpC,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,SAAS,GAAG,KAAK,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC;AACzD,CAAC"}
|
|
1
|
+
{"version":3,"file":"ingress.js","sourceRoot":"","sources":["../../../src/slack/ingress.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,80 +9,104 @@
|
|
|
9
9
|
// and the PKCE localhost flow GA'd 2026-03-30 explicitly bans bot scopes on
|
|
10
10
|
// desktop redirects. Full analysis: devlog 260803_slack_oauth_setup/000.
|
|
11
11
|
import { stringify } from 'yaml';
|
|
12
|
-
export const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
messages_tab_read_only_enabled: false,
|
|
12
|
+
export const DEFAULT_SLACK_APP_NAME = 'cli-jaw';
|
|
13
|
+
export const MAX_SLACK_APP_NAME_LENGTH = 35;
|
|
14
|
+
function normalizedSlackAppName(appName) {
|
|
15
|
+
const normalized = appName.trim();
|
|
16
|
+
if (!normalized || Array.from(normalized).length > MAX_SLACK_APP_NAME_LENGTH || !/^[a-z0-9._-]+$/.test(normalized)) {
|
|
17
|
+
throw new RangeError(`Slack app name must be 1-${MAX_SLACK_APP_NAME_LENGTH} characters using lowercase letters, numbers, dots, underscores, or hyphens.`);
|
|
18
|
+
}
|
|
19
|
+
return normalized;
|
|
20
|
+
}
|
|
21
|
+
export function createSlackAppManifest(appName = DEFAULT_SLACK_APP_NAME) {
|
|
22
|
+
const name = normalizedSlackAppName(appName);
|
|
23
|
+
return {
|
|
24
|
+
_metadata: { major_version: 1 },
|
|
25
|
+
display_information: {
|
|
26
|
+
name,
|
|
27
|
+
description: 'AI agent orchestration — relay messages to your cli-jaw instance',
|
|
29
28
|
},
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
// chat:write -> chat.postMessage + chat.update/chat.delete
|
|
52
|
-
// (live progress status edits its own message)
|
|
53
|
-
// files:write -> files.getUploadURLExternal / completeUploadExternal
|
|
54
|
-
// commands -> slash_commands envelopes
|
|
55
|
-
'app_mentions:read',
|
|
56
|
-
'channels:history',
|
|
57
|
-
'groups:history',
|
|
58
|
-
'im:history',
|
|
59
|
-
'im:write',
|
|
60
|
-
'chat:write',
|
|
61
|
-
// files.info -> files:read; authenticated private downloads use
|
|
62
|
-
// the same bot token only after Slack-host and SSRF validation.
|
|
63
|
-
'files:read',
|
|
64
|
-
'files:write',
|
|
65
|
-
'commands',
|
|
29
|
+
features: {
|
|
30
|
+
bot_user: {
|
|
31
|
+
display_name: name,
|
|
32
|
+
always_online: false,
|
|
33
|
+
},
|
|
34
|
+
// The Messages tab is what gives users a DM composer for the app.
|
|
35
|
+
// Without it the im:history/im:write scopes are granted but nobody
|
|
36
|
+
// can actually start a DM.
|
|
37
|
+
app_home: {
|
|
38
|
+
messages_tab_enabled: true,
|
|
39
|
+
messages_tab_read_only_enabled: false,
|
|
40
|
+
},
|
|
41
|
+
// The `commands` scope AUTHORIZES slash commands; it does not create
|
|
42
|
+
// any. cli-jaw routes the received command name through its shared
|
|
43
|
+
// command catalog, so any catalog command works once registered here.
|
|
44
|
+
// Starter set only — add more from `cli-jaw help` as needed.
|
|
45
|
+
slash_commands: [
|
|
46
|
+
{ command: '/model', description: 'Show or switch the model', usage_hint: '[model]', should_escape: false },
|
|
47
|
+
{ command: '/cli', description: 'Show or switch the CLI engine', usage_hint: '[engine]', should_escape: false },
|
|
48
|
+
{ command: '/clear', description: 'Clear the conversation', should_escape: false },
|
|
49
|
+
{ command: '/help', description: 'Command list', usage_hint: '[command]', should_escape: false },
|
|
66
50
|
],
|
|
67
51
|
},
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
52
|
+
oauth_config: {
|
|
53
|
+
scopes: {
|
|
54
|
+
bot: [
|
|
55
|
+
// Every scope here maps to a call the transport really makes:
|
|
56
|
+
// app_mentions:read -> app_mention envelopes
|
|
57
|
+
// channels:history -> message.channels envelopes
|
|
58
|
+
// groups:history -> message.groups envelopes
|
|
59
|
+
// im:history -> message.im envelopes (DMs; NOT covered by app_mention)
|
|
60
|
+
// im:write -> conversations.open (DM a user id)
|
|
61
|
+
// chat:write -> chat.postMessage + chat.update/chat.delete
|
|
62
|
+
// (live progress status edits its own message)
|
|
63
|
+
// files:write -> files.getUploadURLExternal / completeUploadExternal
|
|
64
|
+
// commands -> slash_commands envelopes
|
|
65
|
+
'app_mentions:read',
|
|
66
|
+
'channels:history',
|
|
67
|
+
'groups:history',
|
|
68
|
+
'im:history',
|
|
69
|
+
'im:write',
|
|
70
|
+
'chat:write',
|
|
71
|
+
// files.info -> files:read; authenticated private downloads use
|
|
72
|
+
// the same bot token only after Slack-host and SSRF validation.
|
|
73
|
+
'files:read',
|
|
74
|
+
'files:write',
|
|
75
|
+
// Sender identity and rosters. Existing installs do not get
|
|
76
|
+
// these automatically; without them names degrade to raw ids.
|
|
77
|
+
'users:read',
|
|
78
|
+
'team:read',
|
|
79
|
+
'channels:read',
|
|
80
|
+
'groups:read',
|
|
81
|
+
'im:read',
|
|
82
|
+
'mpim:read',
|
|
83
|
+
'commands',
|
|
84
|
+
],
|
|
85
|
+
},
|
|
77
86
|
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
settings: {
|
|
88
|
+
event_subscriptions: {
|
|
89
|
+
bot_events: [
|
|
90
|
+
'app_mention',
|
|
91
|
+
'message.channels',
|
|
92
|
+
'message.groups',
|
|
93
|
+
'message.im',
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
socket_mode_enabled: true,
|
|
97
|
+
org_deploy_enabled: false,
|
|
98
|
+
is_hosted: false,
|
|
99
|
+
token_rotation_enabled: false,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export const SLACK_APP_MANIFEST = createSlackAppManifest();
|
|
104
|
+
/** Serialize the manifest for pasting into Slack's "From a manifest" flow. */
|
|
105
|
+
export function slackManifestYaml(appName = DEFAULT_SLACK_APP_NAME) {
|
|
106
|
+
return stringify(createSlackAppManifest(appName));
|
|
107
|
+
}
|
|
108
|
+
/** Serialize the manifest as formatted JSON for the onboarding copy action. */
|
|
109
|
+
export function slackManifestJson(appName = DEFAULT_SLACK_APP_NAME) {
|
|
110
|
+
return JSON.stringify(createSlackAppManifest(appName), null, 2);
|
|
87
111
|
}
|
|
88
112
|
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/slack/manifest.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,qEAAqE;AACrE,6EAA6E;AAC7E,6EAA6E;AAC7E,8BAA8B;AAC9B,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,4EAA4E;AAC5E,yEAAyE;AAEzE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/slack/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// ─── Slack Roster ────────────────────────────────────
|
|
2
|
+
// "Who is in this channel?" and "who is in this workspace?" — the second half of
|
|
3
|
+
// the question an agent could not answer before. conversations.members returns
|
|
4
|
+
// bare user ids, so the names come from the identity cache and a bounded
|
|
5
|
+
// users.list join rather than one users.info call per member.
|
|
6
|
+
// Design + rate-limit facts: devlog 260811_slack_sender_identity_roster/030.
|
|
7
|
+
import { slackApi, describeSlackError } from './api.js';
|
|
8
|
+
import { redactChannelSecrets } from '../messaging/redact.js';
|
|
9
|
+
import { getCachedSlackIdentities, pickSlackUserName, primeSlackIdentityCache, resolveSlackIdentities, } from './identity.js';
|
|
10
|
+
/** Slack recommends staying at or below 200 per page. */
|
|
11
|
+
const PAGE_SIZE = 200;
|
|
12
|
+
const MAX_PAGE_SIZE = 1000;
|
|
13
|
+
/** conversations.members is Tier 4, so a slightly deeper walk is affordable. */
|
|
14
|
+
const MAX_MEMBER_PAGES = 5;
|
|
15
|
+
/** users.list is only Tier 2 — walk it far more conservatively. */
|
|
16
|
+
const MAX_LIST_PAGES = 3;
|
|
17
|
+
const TOP_UP_LIMIT = 25;
|
|
18
|
+
function clampLimit(limit) {
|
|
19
|
+
const n = Number(limit) || PAGE_SIZE;
|
|
20
|
+
return Math.min(Math.max(Math.floor(n), 1), MAX_PAGE_SIZE);
|
|
21
|
+
}
|
|
22
|
+
function memberFromIdentity(identity) {
|
|
23
|
+
const member = {
|
|
24
|
+
id: identity.id,
|
|
25
|
+
name: identity.name,
|
|
26
|
+
isBot: identity.isBot,
|
|
27
|
+
};
|
|
28
|
+
if (identity.realName)
|
|
29
|
+
member.realName = identity.realName;
|
|
30
|
+
if (identity.displayName)
|
|
31
|
+
member.displayName = identity.displayName;
|
|
32
|
+
return member;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Channel membership.
|
|
36
|
+
*
|
|
37
|
+
* Deliberately NOT one users.info per member: a 200-person channel would be 200
|
|
38
|
+
* round trips. Order is cache -> bounded users.list join -> small users.info
|
|
39
|
+
* top-up. What is guaranteed is a CEILING on calls (5 member pages + 3 list pages
|
|
40
|
+
* + 25 top-ups), not a page count for a given channel size — member ids and
|
|
41
|
+
* users.list ordering are unrelated, so a target can sit on a later page.
|
|
42
|
+
*/
|
|
43
|
+
export async function fetchSlackChannelMembers(token, channel, opts) {
|
|
44
|
+
const perPage = clampLimit(opts.limit);
|
|
45
|
+
const ids = [];
|
|
46
|
+
let cursor = '';
|
|
47
|
+
let hasMore = false;
|
|
48
|
+
for (let page = 0; page < MAX_MEMBER_PAGES; page += 1) {
|
|
49
|
+
const result = await slackApi(token, 'conversations.members', { channel, limit: perPage, ...(cursor ? { cursor } : {}) }, { form: true, ...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}) });
|
|
50
|
+
if (!result.ok) {
|
|
51
|
+
return { ok: false, error: redactChannelSecrets(describeSlackError(result.error, result.data)) };
|
|
52
|
+
}
|
|
53
|
+
for (const id of result.data?.members ?? [])
|
|
54
|
+
if (id)
|
|
55
|
+
ids.push(id);
|
|
56
|
+
cursor = result.data?.response_metadata?.next_cursor?.trim() || '';
|
|
57
|
+
if (!cursor)
|
|
58
|
+
break;
|
|
59
|
+
if (page === MAX_MEMBER_PAGES - 1)
|
|
60
|
+
hasMore = true;
|
|
61
|
+
}
|
|
62
|
+
const { members, partial } = await namesForIds(token, ids, opts);
|
|
63
|
+
return { ok: true, members, hasMore, partial };
|
|
64
|
+
}
|
|
65
|
+
/** Resolve names for a list of ids: cache, then a bounded list join, then top-up. */
|
|
66
|
+
async function namesForIds(token, ids, opts) {
|
|
67
|
+
const resolved = new Map(getCachedSlackIdentities(opts.teamId, ids));
|
|
68
|
+
let missing = ids.filter(id => !resolved.has(id));
|
|
69
|
+
let cursor = '';
|
|
70
|
+
for (let page = 0; page < MAX_LIST_PAGES && missing.length; page += 1) {
|
|
71
|
+
const result = await slackApi(token, 'users.list',
|
|
72
|
+
// Always send a limit. Slack marks it optional, but omitting it makes
|
|
73
|
+
// Slack attempt the whole directory and can 500 on a large team.
|
|
74
|
+
{ limit: PAGE_SIZE, ...(cursor ? { cursor } : {}) }, { form: true, ...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}) });
|
|
75
|
+
if (!result.ok)
|
|
76
|
+
break; // A list failure is not fatal; top-up still runs.
|
|
77
|
+
primeSlackIdentityCache(opts.teamId, result.data?.members ?? []);
|
|
78
|
+
const found = getCachedSlackIdentities(opts.teamId, missing);
|
|
79
|
+
for (const [id, identity] of found)
|
|
80
|
+
resolved.set(id, identity);
|
|
81
|
+
missing = missing.filter(id => !resolved.has(id));
|
|
82
|
+
cursor = result.data?.response_metadata?.next_cursor?.trim() || '';
|
|
83
|
+
if (!cursor)
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
let partial = false;
|
|
87
|
+
if (missing.length) {
|
|
88
|
+
const batch = await resolveSlackIdentities(token, missing.map(id => ({ userId: id })), {
|
|
89
|
+
teamId: opts.teamId, topUpLimit: TOP_UP_LIMIT,
|
|
90
|
+
...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}),
|
|
91
|
+
...(opts.signal ? { signal: opts.signal } : {}),
|
|
92
|
+
});
|
|
93
|
+
partial = batch.partial;
|
|
94
|
+
for (const [id, identity] of batch.identities)
|
|
95
|
+
resolved.set(id, identity);
|
|
96
|
+
}
|
|
97
|
+
const members = ids.map(id => {
|
|
98
|
+
const identity = resolved.get(id);
|
|
99
|
+
// An unresolved member still appears, under its raw id. A roster that
|
|
100
|
+
// silently omits people is worse than one that admits it does not know.
|
|
101
|
+
return identity
|
|
102
|
+
? memberFromIdentity(identity)
|
|
103
|
+
: { id, name: id, isBot: false };
|
|
104
|
+
});
|
|
105
|
+
return { members, partial };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Workspace directory.
|
|
109
|
+
*
|
|
110
|
+
* users.list already returns full user objects, so no users.info re-read is
|
|
111
|
+
* needed — and priming the identity cache from these pages means later inbound
|
|
112
|
+
* resolution is a cache hit.
|
|
113
|
+
*/
|
|
114
|
+
export async function fetchSlackWorkspaceUsers(token, opts) {
|
|
115
|
+
const perPage = clampLimit(opts.limit);
|
|
116
|
+
const members = [];
|
|
117
|
+
let cursor = '';
|
|
118
|
+
let hasMore = false;
|
|
119
|
+
for (let page = 0; page < MAX_LIST_PAGES; page += 1) {
|
|
120
|
+
const result = await slackApi(token, 'users.list', { limit: perPage, ...(cursor ? { cursor } : {}) }, { form: true, ...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}) });
|
|
121
|
+
if (!result.ok) {
|
|
122
|
+
return { ok: false, error: redactChannelSecrets(describeSlackError(result.error, result.data)) };
|
|
123
|
+
}
|
|
124
|
+
const page_members = result.data?.members ?? [];
|
|
125
|
+
primeSlackIdentityCache(opts.teamId, page_members);
|
|
126
|
+
for (const user of page_members) {
|
|
127
|
+
if (!user?.id)
|
|
128
|
+
continue;
|
|
129
|
+
// "Who is here" normally means people, so bots and deactivated
|
|
130
|
+
// accounts are opt-in rather than default noise.
|
|
131
|
+
if (user.deleted && !opts.includeDeleted)
|
|
132
|
+
continue;
|
|
133
|
+
if (user.is_bot && !opts.includeBots)
|
|
134
|
+
continue;
|
|
135
|
+
const member = {
|
|
136
|
+
id: user.id,
|
|
137
|
+
name: pickSlackUserName(user, user.id),
|
|
138
|
+
isBot: user.is_bot === true,
|
|
139
|
+
};
|
|
140
|
+
if (user.deleted)
|
|
141
|
+
member.deleted = true;
|
|
142
|
+
members.push(member);
|
|
143
|
+
}
|
|
144
|
+
cursor = result.data?.response_metadata?.next_cursor?.trim() || '';
|
|
145
|
+
if (!cursor)
|
|
146
|
+
break;
|
|
147
|
+
if (page === MAX_LIST_PAGES - 1)
|
|
148
|
+
hasMore = true;
|
|
149
|
+
}
|
|
150
|
+
const teamName = await fetchTeamName(token, opts);
|
|
151
|
+
return { ok: true, members, hasMore, partial: false, ...(teamName ? { teamName } : {}) };
|
|
152
|
+
}
|
|
153
|
+
/** Workspace name. Optional: without team:read the roster still returns fine. */
|
|
154
|
+
async function fetchTeamName(token, opts) {
|
|
155
|
+
const result = await slackApi(token, 'team.info', {}, { form: true, ...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}) });
|
|
156
|
+
return result.ok ? (result.data?.team?.name || '') : '';
|
|
157
|
+
}
|
|
158
|
+
const FORMAT_CHAR_CAP = 6000;
|
|
159
|
+
/** Plain-text rendering for the agent prompt. Names keep their ids alongside. */
|
|
160
|
+
export function formatRosterForAgent(result, opts = {}) {
|
|
161
|
+
if (!result.ok)
|
|
162
|
+
return result.error;
|
|
163
|
+
const heading = opts.channel
|
|
164
|
+
? `#${opts.channel} 멤버 ${result.members.length}명`
|
|
165
|
+
: `${result.teamName ? `${result.teamName} ` : ''}워크스페이스 사용자 ${result.members.length}명`;
|
|
166
|
+
const lines = result.members.map(member => {
|
|
167
|
+
const tags = [member.id];
|
|
168
|
+
if (member.isBot)
|
|
169
|
+
tags.push('봇');
|
|
170
|
+
if (member.deleted)
|
|
171
|
+
tags.push('비활성');
|
|
172
|
+
return `- ${member.name} (${tags.join(', ')})`;
|
|
173
|
+
});
|
|
174
|
+
if (result.hasMore)
|
|
175
|
+
lines.push('… (페이지 상한에 도달해 일부만 표시)');
|
|
176
|
+
if (result.partial)
|
|
177
|
+
lines.push('… (이름 해석 상한에 도달해 일부는 id 로 표시)');
|
|
178
|
+
return redactChannelSecrets([heading, ...lines].join('\n')).slice(0, FORMAT_CHAR_CAP);
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=roster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roster.js","sourceRoot":"","sources":["../../../src/slack/roster.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cli-jaw",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.18",
|
|
4
4
|
"description": "Personal AI assistant powered by Pi, Antigravity, AI-E, Claude, Claude E, Codex, Codex App, Cursor, Grok, Kiro, OpenCode, and Copilot — Web, Terminal, Telegram, and Discord interfaces with 107 built-in skills",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"verify:release-evidence": "node scripts/verify-release-evidence.mjs",
|
|
91
91
|
"test:fresh-install": "tsx scripts/fresh-install-smoke.ts",
|
|
92
92
|
"build": "bash scripts/atomic-build.sh",
|
|
93
|
-
"postbuild": "node scripts/link-current-nvm-bin.cjs",
|
|
93
|
+
"postbuild": "bash scripts/verify-dist-assets.sh && node scripts/link-current-nvm-bin.cjs",
|
|
94
94
|
"build:frontend": "vite build --config vite.config.ts",
|
|
95
95
|
"qa:manager-frontend": "npm run build:frontend && npm run typecheck:frontend",
|
|
96
96
|
"dev:frontend": "vite --config vite.config.ts",
|
|
@@ -135,7 +135,8 @@
|
|
|
135
135
|
"check:electron-dist-linux-no-jwc": "node scripts/check-electron-sidecar-no-jwc.cjs --server-root electron/dist/linux-unpacked/resources/server",
|
|
136
136
|
"check:app-icons": "node scripts/check-app-icon-assets.cjs",
|
|
137
137
|
"check:electron-no-native": "node scripts/check-electron-no-native.cjs",
|
|
138
|
-
"smoke:tui-fullscreen": "tsx scripts/smoke/tui-fullscreen-frame-smoke.ts"
|
|
138
|
+
"smoke:tui-fullscreen": "tsx scripts/smoke/tui-fullscreen-frame-smoke.ts",
|
|
139
|
+
"verify:dist-assets": "bash scripts/verify-dist-assets.sh"
|
|
139
140
|
},
|
|
140
141
|
"dependencies": {
|
|
141
142
|
"@codemirror/autocomplete": "^6.20.1",
|
package/public/css/sidebar.css
CHANGED
|
@@ -226,60 +226,16 @@
|
|
|
226
226
|
background: color-mix(in oklch, var(--accent) 10%, var(--bg));
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
-
.
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
/* Slack guided setup card: 3 steps above the collapsed advanced section. */
|
|
234
|
-
.slack-setup-card {
|
|
235
|
-
display: flex;
|
|
236
|
-
flex-direction: column;
|
|
237
|
-
gap: 10px;
|
|
238
|
-
margin: 8px 0;
|
|
239
|
-
padding: 10px;
|
|
240
|
-
border: 1px solid color-mix(in oklch, var(--accent) 35%, var(--border));
|
|
241
|
-
border-radius: 6px;
|
|
242
|
-
background: color-mix(in oklch, var(--accent) 4%, var(--bg));
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
.slack-setup-step {
|
|
246
|
-
display: flex;
|
|
247
|
-
gap: 8px;
|
|
248
|
-
align-items: flex-start;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
.slack-step-num {
|
|
252
|
-
flex: 0 0 auto;
|
|
253
|
-
width: 18px;
|
|
254
|
-
height: 18px;
|
|
255
|
-
border-radius: 50%;
|
|
256
|
-
border: 1px solid var(--accent);
|
|
257
|
-
color: var(--accent);
|
|
258
|
-
font-size: 11px;
|
|
259
|
-
line-height: 18px;
|
|
260
|
-
text-align: center;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
.slack-step-body {
|
|
264
|
-
flex: 1;
|
|
265
|
-
min-width: 0;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
.slack-step-title {
|
|
269
|
-
font-size: 12px;
|
|
270
|
-
color: var(--text);
|
|
271
|
-
margin-bottom: 2px;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
.slack-step-desc {
|
|
275
|
-
font-size: 11px;
|
|
229
|
+
.perm-btn:disabled {
|
|
230
|
+
border-color: var(--border);
|
|
231
|
+
background: none;
|
|
276
232
|
color: var(--text-dim);
|
|
277
|
-
|
|
233
|
+
cursor: not-allowed;
|
|
234
|
+
opacity: 0.55;
|
|
278
235
|
}
|
|
279
236
|
|
|
280
|
-
.
|
|
281
|
-
|
|
282
|
-
gap: 6px;
|
|
237
|
+
.channel-transport-status .transport-status-block + .transport-status-block {
|
|
238
|
+
margin-top: 10px;
|
|
283
239
|
}
|
|
284
240
|
|
|
285
241
|
.slack-field-error {
|
|
@@ -288,6 +244,17 @@
|
|
|
288
244
|
margin-top: 3px;
|
|
289
245
|
}
|
|
290
246
|
|
|
247
|
+
.settings-managed-notice {
|
|
248
|
+
margin-bottom: 8px;
|
|
249
|
+
padding: 7px 8px;
|
|
250
|
+
border: 1px solid color-mix(in oklch, var(--accent) 45%, var(--border));
|
|
251
|
+
border-radius: 6px;
|
|
252
|
+
color: var(--text-dim);
|
|
253
|
+
background: color-mix(in oklch, var(--accent) 7%, var(--bg));
|
|
254
|
+
font-size: 11px;
|
|
255
|
+
line-height: 1.4;
|
|
256
|
+
}
|
|
257
|
+
|
|
291
258
|
.input-sm.input-error {
|
|
292
259
|
border-color: var(--error, #e5534b);
|
|
293
260
|
}
|
|
@@ -315,6 +282,7 @@
|
|
|
315
282
|
flex: 0 0 auto;
|
|
316
283
|
padding: 3px 8px;
|
|
317
284
|
font-size: 10px;
|
|
285
|
+
white-space: nowrap;
|
|
318
286
|
}
|
|
319
287
|
|
|
320
288
|
.onboarding-box {
|
|
@@ -404,6 +372,16 @@
|
|
|
404
372
|
color: var(--text-dim);
|
|
405
373
|
}
|
|
406
374
|
|
|
375
|
+
.onboarding-manifest-status {
|
|
376
|
+
align-self: center;
|
|
377
|
+
font-size: 10px;
|
|
378
|
+
color: var(--accent);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
.onboarding-manifest-status.is-error {
|
|
382
|
+
color: var(--error, #e5534b);
|
|
383
|
+
}
|
|
384
|
+
|
|
407
385
|
.onboarding-scopes {
|
|
408
386
|
display: block;
|
|
409
387
|
margin-top: 4px;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-XQCOJYun.js";import{n as t,t as n}from"./jsx-runtime-gFMgZ0TQ.js";import{t as r}from"./error-normalize-BzeO0SXE.js";import{a as i,i as a,n as o,r as s,t as c}from"./page-shell-LF7vVVfG.js";var l=e(t(),1),u=n();function d(e,t){let n=new Blob([t],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e,i.click(),URL.revokeObjectURL(r)}function f(e){let t;try{t=JSON.parse(e)}catch(e){return{ok:!1,error:`Invalid JSON: ${e.message}`}}return!t||typeof t!=`object`||Array.isArray(t)?{ok:!1,error:`Import payload must be a JSON object.`}:{ok:!0,value:p(t)}}function p(e){let{settingsSchemaVersion:t,runtimeDefaultMigration:n,multiSessionDefaultMigration:r,slackEnvironmentVariables:i,...a}=e;return a}function m({port:e,client:t,triggerDownload:n}){let{state:m}=i(t,`/api/settings`),[h,g]=(0,l.useState)(!1),[_,v]=(0,l.useState)(``),[y,b]=(0,l.useState)(null),[x,S]=(0,l.useState)(!1),[C,w]=(0,l.useState)(null),T=n||d;(0,l.useEffect)(()=>{v(``),b(null),w(null)},[e]);let E=(0,l.useCallback)(()=>{m.kind===`ready`&&T(`cli-jaw-settings-${e}.json`,JSON.stringify(p(m.data),null,2))},[m,e,T]),D=(0,l.useCallback)(async()=>{let e=f(_);if(!e.ok){b(e.error),w(null);return}b(null),w(null),S(!0);try{await t.put(`/api/settings`,e.value),w(`Imported. Reload the page to refresh other tabs.`)}catch(e){b(r(e))}finally{S(!1)}},[t,_]);return m.kind===`loading`?(0,u.jsx)(o,{}):m.kind===`offline`?(0,u.jsx)(s,{port:e}):m.kind===`error`?(0,u.jsx)(c,{message:m.message}):(0,u.jsxs)(`div`,{className:`settings-page-form`,children:[(0,u.jsx)(a,{title:`Export`,hint:`Download the resolved /i/${e}/api/settings document as JSON.`,children:(0,u.jsx)(`button`,{type:`button`,className:`settings-action settings-action-secondary`,onClick:E,children:`Download settings JSON`})}),(0,u.jsxs)(a,{title:`Import (advanced)`,hint:`Replaces matching keys via PUT. Only enable when you understand the impact.`,children:[(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`advanced-toggle`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Show import controls`}),(0,u.jsx)(`input`,{id:`advanced-toggle`,type:`checkbox`,checked:h,onChange:e=>g(e.target.checked)})]}),h?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`label`,{className:`settings-field`,htmlFor:`advanced-import`,children:[(0,u.jsx)(`span`,{className:`settings-field-label`,children:`Settings JSON`}),(0,u.jsx)(`textarea`,{id:`advanced-import`,rows:8,value:_,placeholder:`{"cli":"codex","tui":{"themeSeed":"jaw-dark"}}`,onChange:e=>v(e.target.value),"aria-invalid":!!y}),y?(0,u.jsx)(`span`,{className:`settings-field-error`,role:`alert`,children:y}):null,C?(0,u.jsx)(`span`,{className:`settings-field-description`,role:`status`,children:C}):null]}),(0,u.jsx)(`button`,{type:`button`,className:`settings-action settings-action-save`,onClick:()=>void D(),disabled:x||_.trim()===``,children:x?`Importing…`:`Apply import`})]}):null]})]})}export{m as default,p as stripServerOwnedSettingsFields,f as validateImportPayload};
|