@takagaki/cortex-decisions-viewer 0.12.187 → 0.12.189

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.
Binary file
package/dist/build.js CHANGED
@@ -314,6 +314,7 @@ exports.PROJECT_ICON_EXTS = ["png", "jpg", "webp"];
314
314
  exports.GUIDE_VIDEO_SOURCES = {
315
315
  // ポスターは動画の宣言には持たない(render.ts の SECRET_FORMS の guide.video.poster が data URI で持つ)
316
316
  backlog: { video: path.join(__dirname, "..", "assets", "guides", "backlog.mp4") },
317
+ slack: { video: path.join(__dirname, "..", "assets", "guides", "slack.mp4") },
317
318
  };
318
319
  /**
319
320
  * ファイルを内容ハッシュ名で `outAbs/assets/` へコピーする。CSS/JS と同じ規約
package/dist/render.js CHANGED
@@ -90,6 +90,7 @@ const google_chat_guide_images_1 = require("./google-chat-guide-images");
90
90
  const meet_guide_images_1 = require("./meet-guide-images");
91
91
  const figma_guide_images_1 = require("./figma-guide-images");
92
92
  const backlog_guide_images_1 = require("./backlog-guide-images");
93
+ const slack_guide_images_1 = require("./slack-guide-images");
93
94
  const story_1 = require("./story");
94
95
  // 「人が確認したか/機械が触ってよいか」の口(#699 F2b)。正本は engine の confirmed.mjs・判定は流し込むだけ
95
96
  const confirmed_1 = require("./confirmed");
@@ -6842,6 +6843,18 @@ ${story_1.splitByNameLinks.toString()}
6842
6843
  var BACKLOG_SHOT_STEP8 = "${backlog_guide_images_1.BACKLOG_GUIDE_STEP8}";
6843
6844
  var BACKLOG_SHOT_STEP9 = "${backlog_guide_images_1.BACKLOG_GUIDE_STEP9}";
6844
6845
  var BACKLOG_SHOT_STEP10 = "${backlog_guide_images_1.BACKLOG_GUIDE_STEP10}";
6846
+ // Slack の手順動画のポスターと手順画像10枚(#1353)。理由は src/slack-guide-images.ts
6847
+ var SLACK_SHOT_POSTER = "${slack_guide_images_1.SLACK_GUIDE_POSTER}";
6848
+ var SLACK_SHOT_STEP1 = "${slack_guide_images_1.SLACK_GUIDE_STEP1}";
6849
+ var SLACK_SHOT_STEP2 = "${slack_guide_images_1.SLACK_GUIDE_STEP2}";
6850
+ var SLACK_SHOT_STEP3 = "${slack_guide_images_1.SLACK_GUIDE_STEP3}";
6851
+ var SLACK_SHOT_STEP4 = "${slack_guide_images_1.SLACK_GUIDE_STEP4}";
6852
+ var SLACK_SHOT_STEP5 = "${slack_guide_images_1.SLACK_GUIDE_STEP5}";
6853
+ var SLACK_SHOT_STEP6 = "${slack_guide_images_1.SLACK_GUIDE_STEP6}";
6854
+ var SLACK_SHOT_STEP7 = "${slack_guide_images_1.SLACK_GUIDE_STEP7}";
6855
+ var SLACK_SHOT_STEP8 = "${slack_guide_images_1.SLACK_GUIDE_STEP8}";
6856
+ var SLACK_SHOT_STEP9 = "${slack_guide_images_1.SLACK_GUIDE_STEP9}";
6857
+ var SLACK_SHOT_STEP10 = "${slack_guide_images_1.SLACK_GUIDE_STEP10}";
6845
6858
 
6846
6859
  /**
6847
6860
  * コピーボタンの動き(copyRow と copyInline の共通部分)。clipboard が使えない環境では
@@ -10393,6 +10406,18 @@ ${story_1.splitByNameLinks.toString()}
10393
10406
  if (allSlack) return head + "が読めていません(" + DS_GATE_NO_TOKEN.customer.text + ")";
10394
10407
  return head + "に問題";
10395
10408
  }
10409
+ /** ワークスペース名がまだ分からないときの札(ID は出さない・#1370) */
10410
+ var WORKSPACE_NAME_PENDING = "ワークスペース名を取得中";
10411
+ /**
10412
+ * 台帳の name が本物の名前なら返し、そうでなければ ""。
10413
+ * 接続時に Slack へ名前を問い合わせて引けなかった行は、台帳に team_id が name として入る
10414
+ * (slack-oauth の mergeWorkspaceIndex)。それは名前ではないので、ID の形も弾く。
10415
+ */
10416
+ function realWorkspaceName(name, teamId) {
10417
+ var n = typeof name === "string" ? name.trim() : "";
10418
+ if (n === "" || n.toUpperCase() === String(teamId || "").toUpperCase() || /^[TE](?=[A-Z0-9]*[0-9])[A-Z0-9]{8,11}$/.test(n)) return "";
10419
+ return n;
10420
+ }
10396
10421
  /**
10397
10422
  * Slack のチャンネルを、所属する組織ごとに分ける(2026-08-20)。
10398
10423
  *
@@ -10424,15 +10449,15 @@ ${story_1.splitByNameLinks.toString()}
10424
10449
  */
10425
10450
  function groupSlackByOrg(items, workspaces) {
10426
10451
  var known = {};
10427
- (workspaces || []).forEach(function (w) { if (w && w.teamId) known[w.teamId] = w.name || w.teamId; });
10452
+ (workspaces || []).forEach(function (w) { if (w && w.teamId) known[w.teamId] = realWorkspaceName(w.name, w.teamId); });
10428
10453
  var order = [];
10429
10454
  var byKey = {};
10430
10455
  (items || []).forEach(function (s) {
10431
10456
  var key, title, unknown = false;
10432
10457
  if (s.workspace) {
10433
10458
  key = s.workspace;
10434
- // **台帳に無ければ team_id を出す。** 空欄より、少なくとも突き合わせられる
10435
- title = known[s.workspace] || s.workspace;
10459
+ // **名前が分からないとき ID(T…)を出さない(#1370)。** 機械の語を画面に出さない
10460
+ title = known[s.workspace] || WORKSPACE_NAME_PENDING;
10436
10461
  } else if (s.orgUnknown === true) {
10437
10462
  key = "__unknown__";
10438
10463
  title = "組織不明";
@@ -12536,7 +12561,19 @@ ${story_1.splitByNameLinks.toString()}
12536
12561
  ? " お客様の Slack のチャンネルは、その Slack の管理者がワークスペースの接続を承認すると読めるようになります(チャンネルを読む権限と、通知を投稿する権限を渡します)。"
12537
12562
  : "")
12538
12563
  + (adapter !== "slack" ? " DM(1対1のチャット)は対象外です。" : "");
12539
- m.modal.appendChild(el("p", { class: "modal-desc", text: "ここに並んでいる" + chatNoun + "は、例外なく全て毎晩の Gold 昇格が読み取り、Decision・用語集の材料になります。読み取りを止めるには「登録を解除」してください。" + chatScope + chatExtra }));
12564
+ var chatDesc = el("p", { class: "modal-desc", text: "ここに並んでいる" + chatNoun + "は、例外なく全て毎晩の Gold 昇格が読み取り、Decision・用語集の材料になります。読み取りを止めるには「登録を解除」してください。" + chatScope + chatExtra });
12565
+ m.modal.appendChild(chatDesc);
12566
+ // 🔴 **Slack のつなぎ方の動画+画像(#1353)は Backlog と同じ配置**(見出しのすぐ下・説明文より前・折りたたまない・中央・幅 480px 上限)。
12567
+ // Google Chat 専用の窓には出さない
12568
+ // Backlog(backlogTargetsEditable)と同じく、投入の口が無い(つなげない)配信先には出さない
12569
+ if (SITE.intake && (!adapter || adapter === "slack")) {
12570
+ var slackCarousel = buildGuideCarousel("slack", SLACK_GUIDE);
12571
+ if (slackCarousel) {
12572
+ slackCarousel.classList.add("mt-carousel-center");
12573
+ slackCarousel.setAttribute("data-guide-kind", "slack");
12574
+ m.modal.insertBefore(slackCarousel, chatDesc);
12575
+ }
12576
+ }
12540
12577
  } else if (cap === "デザイン" && (!adapter || adapter === "figma")) {
12541
12578
  // 🔴 **Figma の説明文(c-07・新設)。** 追加の欄の手順 4(何が同期されるか)と手順 1 の前提
12542
12579
  // (トークンの登録)を、ここに 1 回だけ置く。鍵の欄は 0 件のあいだ畳まれているので、入れる欄が
@@ -17282,14 +17319,14 @@ ${story_1.splitByNameLinks.toString()}
17282
17319
  var v = fleetVal("slackWorkspaces");
17283
17320
  return Array.isArray(v) ? v : null;
17284
17321
  }
17285
- /** team_id → 表示名。宣言はあるが一覧に無いワークスペースは team_id のまま出す */
17322
+ /** team_id → 表示名。宣言はあるが一覧に無いワークスペース・名前が引けなかったワークスペースは「ワークスペース名を取得中」を出す(ID は出さない・#1370) */
17286
17323
  function workspaceLabel(teamId) {
17287
17324
  if (!teamId) return "";
17288
17325
  var list = slackWorkspaces() || [];
17289
17326
  for (var i = 0; i < list.length; i++) {
17290
- if (list[i].teamId === teamId) return list[i].name || teamId;
17327
+ if (list[i].teamId === teamId) return realWorkspaceName(list[i].name, teamId) || WORKSPACE_NAME_PENDING;
17291
17328
  }
17292
- return teamId;
17329
+ return WORKSPACE_NAME_PENDING;
17293
17330
  }
17294
17331
 
17295
17332
 
@@ -18431,6 +18468,29 @@ ${story_1.splitByNameLinks.toString()}
18431
18468
  */
18432
18469
  var BACKLOG_KEY_SCOPE_NOTE = "";
18433
18470
 
18471
+ // Slack のつなぎ方の動画+画像(#1353)。Backlog(SECRET_FORMS.backlog.guide)と同じ形で、モーダルの上に出す
18472
+ // (openCapabilityModal のチャットの項)。Slack は鍵を入れるカードを持たないので、SECRET_FORMS には入れずここに置く。
18473
+ // 動画の実 URL は guide に置かない(SITE.guideAssets.slack.video を build.ts の GUIDE_VIDEO_SOURCES が注入する)
18474
+ var SLACK_GUIDE = {
18475
+ counter: true,
18476
+ video: {
18477
+ alt: "Slack のチャンネルを Cortex につなぐ手順の動画(約1分30秒)。チャンネルの URL のコピー、貼り付け、Cortex の招待、接続OK の確認までを画面で見せます。",
18478
+ poster: SLACK_SHOT_POSTER,
18479
+ },
18480
+ shots: [
18481
+ { src: SLACK_SHOT_STEP1, width: "960", height: "540", heading: "1. Cortex の欄にチャンネルの URL を貼る", alt: "手順 1。Cortex の Slack のモーダル。「Slackチャンネルを追加」の URL の入力欄が赤枠で示されている。" },
18482
+ { src: SLACK_SHOT_STEP2, width: "960", height: "540", heading: "2. Slack でチャンネルのリンクをコピー", alt: "手順 2。Slack の左の一覧でチャンネルを右クリックし、「コピー」→「リンクをコピー」が赤枠で示されている。" },
18483
+ { src: SLACK_SHOT_STEP3, width: "960", height: "540", heading: "3. 貼り付けて追加", alt: "手順 3。URL を貼った入力欄と「追加」ボタンが赤く囲まれている。" },
18484
+ { src: SLACK_SHOT_STEP4, width: "960", height: "540", heading: "4. 「未招待」と出たら招待の一文をコピー", alt: "手順 4。チャンネルの行に「未招待」と「Cortex を招待してください:/invite @Cortex[コピー]」が出ている。" },
18485
+ { src: SLACK_SHOT_STEP5, width: "960", height: "540", heading: "5. チャンネルで /invite @Cortex を送る", alt: "手順 5。Slack の入力欄に /invite @Cortex が入り、候補に Cortex(アプリ)が出ている。" },
18486
+ { src: SLACK_SHOT_STEP6, width: "960", height: "540", heading: "6. Cortex が参加したら OK", alt: "手順 6。チャンネルに「Cortex さんと一緒に参加しました」と出ている。" },
18487
+ { src: SLACK_SHOT_STEP7, width: "960", height: "540", heading: "7. 接続を確認して接続OK", alt: "手順 7。チャンネルの行に緑の「接続OK」が出ている。" },
18488
+ { src: SLACK_SHOT_STEP8, width: "960", height: "540", heading: "(Cortex が入っていないワークスペース)接続する", alt: "補足の手順 1。行に「このワークスペースに Cortex が入っていなければ、ワークスペースを接続してください。[接続する]」が出ている。" },
18489
+ { src: SLACK_SHOT_STEP9, width: "960", height: "540", heading: "(同)使うワークスペースを選んで許可する", alt: "補足の手順 2。Slack の許可の画面。使うワークスペースの欄と「許可する」ボタンが赤く囲まれている。" },
18490
+ { src: SLACK_SHOT_STEP10, width: "960", height: "540", heading: "(同)接続しましたと出たら Cortex の画面に戻る", alt: "補足の手順 3。「接続しました」の画面。Cortex の画面に戻る。" },
18491
+ ],
18492
+ };
18493
+
18434
18494
  /**
18435
18495
  * 鍵の入力欄に出す説明。kind は Lambda 側(resolveSecretTarget)と綴りを合わせること。
18436
18496
  *