diff --git a/CHANGELOG.md b/CHANGELOG.md
index de900868..8a4df9da 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## [2.12.1](https://github.com/breaking-brake/cc-wf-studio/compare/v2.12.0...v2.12.1) (2025-11-24)
+
+### Bug Fixes
+
+* resolve Slack import issues and improve setup instructions ([#140](https://github.com/breaking-brake/cc-wf-studio/issues/140)) ([bd264b9](https://github.com/breaking-brake/cc-wf-studio/commit/bd264b938dc8f2934ae4e18e6da4c5ed45031caa))
+
## [2.12.0](https://github.com/breaking-brake/cc-wf-studio/compare/v2.11.2...v2.12.0) (2025-11-23)
### Features
diff --git a/package.json b/package.json
index 4cafe2e2..b5e47b1c 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "cc-wf-studio",
"displayName": "Claude Code Workflow Studio",
"description": "Visual workflow editor for Claude Code Slash Commands, Sub Agents, Agent Skills, and MCP Tools",
- "version": "2.12.0",
+ "version": "2.12.1",
"publisher": "breaking-brake",
"icon": "resources/icon.png",
"repository": {
@@ -62,6 +62,9 @@
}
}
},
+ "activationEvents": [
+ "onUri"
+ ],
"scripts": {
"vscode:prepublish": "npm run build",
"build": "npm run build:webview && npm run build:extension",
diff --git a/specs/001-slack-workflow-sharing/contracts/slack-api-contracts.md b/specs/001-slack-workflow-sharing/contracts/slack-api-contracts.md
index caa1251d..4561b15e 100644
--- a/specs/001-slack-workflow-sharing/contracts/slack-api-contracts.md
+++ b/specs/001-slack-workflow-sharing/contracts/slack-api-contracts.md
@@ -15,9 +15,10 @@
本機能では、SlackワークスペースにインストールされたSlack Appから取得した**Bot User Token**を使用します。
**必要なBot Token Scopes**:
+- `channels:read` - チャンネル一覧取得
- `chat:write` - メッセージ投稿
+- `files:read` - ファイル情報取得・ダウンロード
- `files:write` - ファイルアップロード
-- `channels:read` - チャンネル一覧取得
- `groups:read` - メッセージ検索
**トークン形式**:
diff --git a/src/extension/utils/slack-token-manager.ts b/src/extension/utils/slack-token-manager.ts
index 410b4dd7..07345287 100644
--- a/src/extension/utils/slack-token-manager.ts
+++ b/src/extension/utils/slack-token-manager.ts
@@ -385,7 +385,13 @@ export class SlackTokenManager {
* @returns True if all required scopes present, false otherwise
*/
static validateTokenScopes(scopes: string[]): boolean {
- const requiredScopes = ['channels:read', 'chat:write', 'files:write', 'groups:read'];
+ const requiredScopes = [
+ 'channels:read',
+ 'chat:write',
+ 'files:read',
+ 'files:write',
+ 'groups:read',
+ ];
return requiredScopes.every((required) => scopes.includes(required));
}
@@ -397,7 +403,13 @@ export class SlackTokenManager {
* @returns Array of missing required scopes
*/
static getMissingScopes(scopes: string[]): string[] {
- const requiredScopes = ['channels:read', 'chat:write', 'files:write', 'groups:read'];
+ const requiredScopes = [
+ 'channels:read',
+ 'chat:write',
+ 'files:read',
+ 'files:write',
+ 'groups:read',
+ ];
return requiredScopes.filter((required) => !scopes.includes(required));
}
diff --git a/src/webview/package-lock.json b/src/webview/package-lock.json
index d398627c..8e91e086 100644
--- a/src/webview/package-lock.json
+++ b/src/webview/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "cc-wf-studio-webview",
- "version": "2.12.0",
+ "version": "2.12.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "cc-wf-studio-webview",
- "version": "2.12.0",
+ "version": "2.12.1",
"dependencies": {
"@radix-ui/react-select": "^2.2.6",
"@radix-ui/react-switch": "^1.2.6",
diff --git a/src/webview/package.json b/src/webview/package.json
index ad2e4e60..a976fca8 100644
--- a/src/webview/package.json
+++ b/src/webview/package.json
@@ -1,6 +1,6 @@
{
"name": "cc-wf-studio-webview",
- "version": "2.12.0",
+ "version": "2.12.1",
"private": true,
"type": "module",
"scripts": {
diff --git a/src/webview/src/components/dialogs/SlackManualTokenDialog.tsx b/src/webview/src/components/dialogs/SlackManualTokenDialog.tsx
index e92453f2..463deb9e 100644
--- a/src/webview/src/components/dialogs/SlackManualTokenDialog.tsx
+++ b/src/webview/src/components/dialogs/SlackManualTokenDialog.tsx
@@ -254,6 +254,9 @@ export function SlackManualTokenDialog({
lineHeight: '1.6',
}}
>
+
+ {t('slack.manualToken.security.notice')}
+
• {t('slack.manualToken.security.storage')}
• {t('slack.manualToken.security.transmission')}
• {t('slack.manualToken.security.deletion')}
diff --git a/src/webview/src/i18n/translation-keys.ts b/src/webview/src/i18n/translation-keys.ts
index f7e9e536..def295eb 100644
--- a/src/webview/src/i18n/translation-keys.ts
+++ b/src/webview/src/i18n/translation-keys.ts
@@ -543,6 +543,7 @@ export interface WebviewTranslationKeys {
'slack.manualToken.howToGet.step4': string;
'slack.manualToken.howToGet.step5': string;
'slack.manualToken.security.title': string;
+ 'slack.manualToken.security.notice': string;
'slack.manualToken.security.storage': string;
'slack.manualToken.security.transmission': string;
'slack.manualToken.security.deletion': string;
diff --git a/src/webview/src/i18n/translations/en.ts b/src/webview/src/i18n/translations/en.ts
index 4e80df6f..a87e2108 100644
--- a/src/webview/src/i18n/translations/en.ts
+++ b/src/webview/src/i18n/translations/en.ts
@@ -540,13 +540,16 @@ export const enWebviewTranslations: WebviewTranslationKeys = {
'slack.manualToken.title': 'Connect to Slack',
'slack.manualToken.description': 'Enter your Slack Bot Token to connect your workspace.',
'slack.manualToken.howToGet.title': 'How to get Bot Token',
- 'slack.manualToken.howToGet.step1': 'Create Slack App at api.slack.com/apps',
+ 'slack.manualToken.howToGet.step1': 'Create Slack App (at api.slack.com/apps)',
'slack.manualToken.howToGet.step2':
- 'Add Bot Token Scopes: channels:read, chat:write, files:write, groups:read',
- 'slack.manualToken.howToGet.step3': 'Install App to your workspace',
- 'slack.manualToken.howToGet.step4': 'Invite App to target channel',
- 'slack.manualToken.howToGet.step5': 'Copy Bot User OAuth Token (xoxb-...)',
+ 'Add Bot Token Scopes (OAuth & Permissions): channels:read, chat:write, files:read, files:write, groups:read',
+ 'slack.manualToken.howToGet.step3': 'Install App to your workspace (OAuth & Permissions)',
+ 'slack.manualToken.howToGet.step4': 'Invite App to target channel (in Slack)',
+ 'slack.manualToken.howToGet.step5':
+ 'Copy and paste Bot User OAuth Token to the form below (OAuth & Permissions, xoxb-...)',
'slack.manualToken.security.title': 'Security & Privacy',
+ 'slack.manualToken.security.notice':
+ 'Note: This feature communicates with Slack servers (not local-only operation)',
'slack.manualToken.security.storage': 'Token stored in VSCode Secret Storage (OS Keychain)',
'slack.manualToken.security.transmission':
'Only sent to Slack API (api.slack.com) for validation',
diff --git a/src/webview/src/i18n/translations/ja.ts b/src/webview/src/i18n/translations/ja.ts
index 28a091eb..7abec5ae 100644
--- a/src/webview/src/i18n/translations/ja.ts
+++ b/src/webview/src/i18n/translations/ja.ts
@@ -537,13 +537,16 @@ export const jaWebviewTranslations: WebviewTranslationKeys = {
'slack.manualToken.title': 'Slackに接続',
'slack.manualToken.description': 'Slack Bot Tokenを入力してワークスペースに接続してください。',
'slack.manualToken.howToGet.title': 'Bot Tokenの取得方法',
- 'slack.manualToken.howToGet.step1': 'api.slack.com/appsでSlack Appを作成',
+ 'slack.manualToken.howToGet.step1': 'Slack Appを作成(api.slack.com/apps)',
'slack.manualToken.howToGet.step2':
- 'Bot Token Scopesを追加: channels:read, chat:write, files:write, groups:read',
- 'slack.manualToken.howToGet.step3': 'Appをワークスペースにインストール',
- 'slack.manualToken.howToGet.step4': 'Appをワークフロー共有先のチャンネルに追加',
- 'slack.manualToken.howToGet.step5': 'Bot User OAuth Token(xoxb-...)をコピー',
+ 'Bot Token Scopesを追加(OAuth & Permissions): channels:read, chat:write, files:read, files:write, groups:read',
+ 'slack.manualToken.howToGet.step3': 'Appをワークスペースにインストール(OAuth & Permissions)',
+ 'slack.manualToken.howToGet.step4': 'Appをワークフロー共有先のチャンネルに追加(Slack内)',
+ 'slack.manualToken.howToGet.step5':
+ 'Bot User OAuth Token(xoxb-...)をコピーして下部の入力欄に貼り付け(OAuth & Permissions)',
'slack.manualToken.security.title': 'セキュリティーとプライバシー',
+ 'slack.manualToken.security.notice':
+ '注意:この機能はSlackサーバーと通信します(ローカル動作ではありません)',
'slack.manualToken.security.storage':
'トークンはVSCode Secret Storage(OSのキーチェーン)に安全に保存されます',
'slack.manualToken.security.transmission': 'Slack API(api.slack.com)への検証時のみ送信されます',
diff --git a/src/webview/src/i18n/translations/ko.ts b/src/webview/src/i18n/translations/ko.ts
index 304c7407..13f445ea 100644
--- a/src/webview/src/i18n/translations/ko.ts
+++ b/src/webview/src/i18n/translations/ko.ts
@@ -536,13 +536,16 @@ export const koWebviewTranslations: WebviewTranslationKeys = {
'slack.manualToken.title': 'Slack에 연결',
'slack.manualToken.description': 'Slack Bot Token을 입력하여 워크스페이스에 연결하세요.',
'slack.manualToken.howToGet.title': 'Bot Token 받는 방법',
- 'slack.manualToken.howToGet.step1': 'api.slack.com/apps에서 Slack App 생성',
+ 'slack.manualToken.howToGet.step1': 'Slack App 생성 (api.slack.com/apps)',
'slack.manualToken.howToGet.step2':
- 'Bot Token Scopes 추가: channels:read, chat:write, files:write, groups:read',
- 'slack.manualToken.howToGet.step3': '워크스페이스에 App 설치',
- 'slack.manualToken.howToGet.step4': '대상 채널에 App 추가',
- 'slack.manualToken.howToGet.step5': 'Bot User OAuth Token (xoxb-...) 복사',
+ 'Bot Token Scopes 추가 (OAuth & Permissions): channels:read, chat:write, files:read, files:write, groups:read',
+ 'slack.manualToken.howToGet.step3': '워크스페이스에 App 설치 (OAuth & Permissions)',
+ 'slack.manualToken.howToGet.step4': '대상 채널에 App 추가 (Slack 내)',
+ 'slack.manualToken.howToGet.step5':
+ 'Bot User OAuth Token을 복사하여 아래 양식에 붙여넣기 (OAuth & Permissions, xoxb-...)',
'slack.manualToken.security.title': '보안 및 개인정보',
+ 'slack.manualToken.security.notice':
+ '참고: 이 기능은 Slack 서버와 통신합니다 (로컬 전용 작업 아님)',
'slack.manualToken.security.storage':
'토큰은 VSCode Secret Storage (OS 키체인)에 안전하게 저장됩니다',
'slack.manualToken.security.transmission': 'Slack API (api.slack.com)로만 검증을 위해 전송됩니다',
diff --git a/src/webview/src/i18n/translations/zh-CN.ts b/src/webview/src/i18n/translations/zh-CN.ts
index 744e89ad..d3693d06 100644
--- a/src/webview/src/i18n/translations/zh-CN.ts
+++ b/src/webview/src/i18n/translations/zh-CN.ts
@@ -516,13 +516,15 @@ export const zhCNWebviewTranslations: WebviewTranslationKeys = {
'slack.manualToken.title': '连接到 Slack',
'slack.manualToken.description': '输入您的 Slack Bot Token 以连接工作区。',
'slack.manualToken.howToGet.title': '如何获取 Bot Token',
- 'slack.manualToken.howToGet.step1': '在 api.slack.com/apps 创建 Slack App',
+ 'slack.manualToken.howToGet.step1': '创建 Slack App (api.slack.com/apps)',
'slack.manualToken.howToGet.step2':
- '添加 Bot Token Scopes: channels:read, chat:write, files:write, groups:read',
- 'slack.manualToken.howToGet.step3': '将 App 安装到您的工作区',
- 'slack.manualToken.howToGet.step4': '将 App 添加到目标频道',
- 'slack.manualToken.howToGet.step5': '复制 Bot User OAuth Token (xoxb-...)',
+ '添加 Bot Token Scopes (OAuth & Permissions): channels:read, chat:write, files:read, files:write, groups:read',
+ 'slack.manualToken.howToGet.step3': '将 App 安装到您的工作区 (OAuth & Permissions)',
+ 'slack.manualToken.howToGet.step4': '将 App 添加到目标频道 (在 Slack 中)',
+ 'slack.manualToken.howToGet.step5':
+ '复制 Bot User OAuth Token 并粘贴到下方表单 (OAuth & Permissions, xoxb-...)',
'slack.manualToken.security.title': '安全和隐私',
+ 'slack.manualToken.security.notice': '注意:此功能与 Slack 服务器通信(非本地操作)',
'slack.manualToken.security.storage': '令牌安全存储在 VSCode Secret Storage (OS 密钥链)',
'slack.manualToken.security.transmission': '仅发送到 Slack API (api.slack.com) 用于验证',
'slack.manualToken.security.deletion': '可以随时删除',
diff --git a/src/webview/src/i18n/translations/zh-TW.ts b/src/webview/src/i18n/translations/zh-TW.ts
index cf97beb9..249c833b 100644
--- a/src/webview/src/i18n/translations/zh-TW.ts
+++ b/src/webview/src/i18n/translations/zh-TW.ts
@@ -516,13 +516,15 @@ export const zhTWWebviewTranslations: WebviewTranslationKeys = {
'slack.manualToken.title': '連接到 Slack',
'slack.manualToken.description': '輸入您的 Slack Bot Token 以連接工作區。',
'slack.manualToken.howToGet.title': '如何取得 Bot Token',
- 'slack.manualToken.howToGet.step1': '在 api.slack.com/apps 建立 Slack App',
+ 'slack.manualToken.howToGet.step1': '建立 Slack App (api.slack.com/apps)',
'slack.manualToken.howToGet.step2':
- '新增 Bot Token Scopes: channels:read, chat:write, files:write, groups:read',
- 'slack.manualToken.howToGet.step3': '將 App 安裝到您的工作區',
- 'slack.manualToken.howToGet.step4': '將 App 新增至目標頻道',
- 'slack.manualToken.howToGet.step5': '複製 Bot User OAuth Token (xoxb-...)',
+ '新增 Bot Token Scopes (OAuth & Permissions): channels:read, chat:write, files:read, files:write, groups:read',
+ 'slack.manualToken.howToGet.step3': '將 App 安裝到您的工作區 (OAuth & Permissions)',
+ 'slack.manualToken.howToGet.step4': '將 App 新增至目標頻道 (在 Slack 中)',
+ 'slack.manualToken.howToGet.step5':
+ '複製 Bot User OAuth Token 並貼上至下方表單 (OAuth & Permissions, xoxb-...)',
'slack.manualToken.security.title': '安全與隱私',
+ 'slack.manualToken.security.notice': '注意:此功能與 Slack 伺服器通信(非本地操作)',
'slack.manualToken.security.storage': '令牌安全儲存於 VSCode Secret Storage (OS 金鑰鏈)',
'slack.manualToken.security.transmission': '僅傳送至 Slack API (api.slack.com) 用於驗證',
'slack.manualToken.security.deletion': '可隨時刪除',