@takagaki/cortex-decisions-viewer 0.4.45 → 0.4.47

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/dist/build.js CHANGED
@@ -975,7 +975,7 @@ async function build(opts) {
975
975
  graph,
976
976
  categories,
977
977
  months,
978
- intake: opts.intakeUrl && opts.projectKey
978
+ intake: opts.intakeUrl && opts.projectKey && opts.intakeToken
979
979
  ? {
980
980
  url: opts.intakeUrl,
981
981
  token: opts.intakeToken ?? "",
package/dist/render.js CHANGED
@@ -743,6 +743,13 @@ a.ds-name:hover { text-decoration: underline; }
743
743
  .badge.ds-gold { background: #fef3c7; color: #92400e; border: 1px solid #fcd34d; }
744
744
  .badge.ds-excluded { background: #eceef1; color: #6b7280; }
745
745
  .badge.ds-undeclared { background: #fff4e5; color: #9a6700; }
746
+ .ds-toggle { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 6px; }
747
+ .ds-toggle-btn { font-size: 12px; padding: 3px 10px; border-radius: 999px; border: 1px solid var(--border); background: #fff; color: var(--text); cursor: pointer; }
748
+ .ds-toggle-btn:hover:not(:disabled) { border-color: var(--accent); color: var(--accent); }
749
+ .ds-toggle-btn:disabled { opacity: .6; cursor: default; }
750
+ .ds-toggle-msg { font-size: 12px; color: var(--muted); }
751
+ .ds-toggle-msg.is-ok { color: #1a7f37; }
752
+ .ds-toggle-msg.is-error { color: #b42318; }
746
753
  .badge.ds-notify { background: #eff6ff; color: #1e40af; border: 1px solid #bfdbfe; }
747
754
  .ds-gate { display: inline-flex; align-items: center; gap: 5px; font-size: 12.5px; font-weight: 600; flex: 0 0 auto; }
748
755
  .ds-gate::before { content: ""; width: 8px; height: 8px; border-radius: 999px; background: currentColor; }
@@ -1525,6 +1532,93 @@ const CLIENT_JS = `
1525
1532
  ]);
1526
1533
  }
1527
1534
  // 外部ソース1件のカード(グループ化表示・展開表示の両方から使う)
1535
+ /**
1536
+ * Gold昇格の切り替えボタン。押すと設定ファイル(channels.json)が書き換わる。
1537
+ *
1538
+ * **広げる方向(OFF→ON)には確認を出す。** そのチャンネルの内容をAIが読んで、顧客も見る
1539
+ * Decision・用語集に蒸留するようになる。社内限定のチャンネルをONにすると、顧客が見られない
1540
+ * 会話が顧客可視の層に出てくる(実際にその事故が起きている)。狭める方向は安全なので確認しない。
1541
+ *
1542
+ * 保存しても画面はすぐには変わらない(接続状況は夜間バッチのスナップショット)。
1543
+ * それを伝えないと「保存できていない」と受け取られるので、応答のメッセージをそのまま出す。
1544
+ */
1545
+ function goldToggle(s) {
1546
+ var wrap = el("div", { class: "ds-toggle" });
1547
+ var on = s.gold === true;
1548
+ var btn = el("button", {
1549
+ class: "ds-toggle-btn" + (on ? " is-on" : ""),
1550
+ type: "button",
1551
+ text: on ? "Gold昇格を止める" : "Gold昇格を始める",
1552
+ });
1553
+ var msg = el("div", { class: "ds-toggle-msg" });
1554
+ wrap.appendChild(btn);
1555
+ wrap.appendChild(msg);
1556
+
1557
+ btn.addEventListener("click", async function () {
1558
+ var next = !on;
1559
+ if (next) {
1560
+ var ok = window.confirm(
1561
+ "「" + (s.name || s.ref) + "」の内容を、顧客も見る Decision・用語集に蒸留するようになります。" +
1562
+ String.fromCharCode(10, 10) +
1563
+ "社内限定の会話が含まれるチャンネルでは、顧客に見せられない内容が出てしまう可能性があります。" +
1564
+ String.fromCharCode(10) +
1565
+ "顧客がこのチャンネルにいる(=すでに会話を見ている)場合にだけ有効にしてください。" +
1566
+ String.fromCharCode(10, 10) +
1567
+ "※ 今夜の蒸留(22時ごろ)までに止めれば取り込まれません。一度生成された記録は自動では消えません。" +
1568
+ String.fromCharCode(10, 10) +
1569
+ "有効にしますか?",
1570
+ );
1571
+ if (!ok) return;
1572
+ }
1573
+ var editor = window.prompt("変更者のお名前を入力してください(履歴に残ります)", "");
1574
+ if (editor === null) return;
1575
+ if (!editor.trim()) { msg.className = "ds-toggle-msg is-error"; msg.textContent = "⚠ お名前を入力してください。"; return; }
1576
+
1577
+ btn.disabled = true;
1578
+ msg.className = "ds-toggle-msg";
1579
+ msg.textContent = "保存中…";
1580
+ var intake = SITE.intake;
1581
+ var pfx = intake.url + (intake.url.indexOf("?") === -1 ? "?" : "&");
1582
+ try {
1583
+ var res = await fetch(pfx + "op=config&t=" + encodeURIComponent(intake.token), {
1584
+ method: "POST",
1585
+ headers: { "content-type": "application/json" },
1586
+ body: JSON.stringify({
1587
+ file: "チャット/channels.json",
1588
+ op: "set-channel-gold",
1589
+ ref: s.ref,
1590
+ value: next,
1591
+ editor: editor,
1592
+ }),
1593
+ });
1594
+ var j = await res.json().catch(function () { return {}; });
1595
+ if (!res.ok) {
1596
+ msg.className = "ds-toggle-msg is-error";
1597
+ msg.textContent = "✗ " + (j.message || "保存できませんでした。");
1598
+ btn.disabled = false;
1599
+ return;
1600
+ }
1601
+ msg.className = "ds-toggle-msg is-ok";
1602
+ msg.textContent = "✓ " + (j.message || "保存しました。");
1603
+ // **押した内容をボタンに反映し、逆向きの操作を必ず残す。**
1604
+ // バッジ(Gold昇格の読み取り対象/除外)は夜間バッチのスナップショット由来なので変えない。
1605
+ // 変えると「もう効いている」と誤解させるため。変えるのはボタンだけ。
1606
+ // ここを disabled のままにすると、誤って有効にした直後に**同じ画面から止められなくなる**。
1607
+ // 表示が直るのは翌朝で、その間に22時のGold昇格が走り、生成されたレコードは自動削除されない
1608
+ // (Gold層は追記専用)。危険な方向は押せるのに戻す方向が塞がる、という状態は許容できない。
1609
+ on = next;
1610
+ btn.textContent = on ? "Gold昇格を止める" : "Gold昇格を始める";
1611
+ btn.className = "ds-toggle-btn" + (on ? " is-on" : "");
1612
+ btn.disabled = false;
1613
+ } catch (e) {
1614
+ msg.className = "ds-toggle-msg is-error";
1615
+ msg.textContent = "✗ 通信に失敗しました。";
1616
+ btn.disabled = false;
1617
+ }
1618
+ });
1619
+ return wrap;
1620
+ }
1621
+
1528
1622
  function extSourceCard(s, meta) {
1529
1623
  var badges = el("div", { class: "ds-badges" });
1530
1624
  // 「意図的に外した」と「宣言し忘れ」を分けて出す。同じ「除外」と書くと、
@@ -1534,7 +1628,7 @@ const CLIENT_JS = `
1534
1628
  else if (s.gold === false) badges.appendChild(el("span", { class: "badge ds-excluded", text: "除外" }));
1535
1629
  if (s.notify === true) badges.appendChild(el("span", { class: "badge ds-notify", text: "通知先" }));
1536
1630
  var gate = DS_GATE[s.gate] || DS_GATE["unknown"];
1537
- return el("div", { class: "ds-card" }, [
1631
+ var card = el("div", { class: "ds-card" }, [
1538
1632
  el("div", { class: "ds-card-main" }, [
1539
1633
  el("span", { class: "ds-icon", text: meta.icon }),
1540
1634
  el("span", { class: "ds-type", text: meta.label }),
@@ -1543,6 +1637,12 @@ const CLIENT_JS = `
1543
1637
  badges,
1544
1638
  el("span", { class: "ds-gate " + gate.cls, text: gate.text }),
1545
1639
  ]);
1640
+ // Gold昇格の切り替え。書き込み経路(intake Lambda)がある案件でだけ出す。
1641
+ // Slack以外は読み手が導出しないので出さない(押せても効かないボタンは出さない)。
1642
+ if (SITE.intake && s.type === "slack" && s.ref) {
1643
+ card.appendChild(goldToggle(s));
1644
+ }
1645
+ return card;
1546
1646
  }
1547
1647
 
1548
1648
  // ---------- 操作タブ(接続マップ・データソースと自動化・取り込み。今後この受け皿に機能を足す) ----------
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takagaki/cortex-decisions-viewer",
3
- "version": "0.4.45",
3
+ "version": "0.4.47",
4
4
  "description": "Cortexの意思決定記録(Decisions/*.md)を静的サイトにビルドして閲覧する。各レコードに「Edit on GitHub」リンクを付与する。",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -29,6 +29,7 @@
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.10.0",
32
+ "linkedom": "^0.18.13",
32
33
  "typescript": "^5.7.0"
33
34
  }
34
35
  }