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': '可隨時刪除',