@takagaki/cortex-decisions-viewer 0.4.70 → 0.4.71
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/render.js +81 -22
- package/package.json +1 -1
package/dist/render.js
CHANGED
|
@@ -107,18 +107,19 @@ const ADAPTER_CATALOG = {
|
|
|
107
107
|
"開発": ["github"],
|
|
108
108
|
};
|
|
109
109
|
/**
|
|
110
|
-
*
|
|
110
|
+
* 導出された状態 → 画面に出す文言。**マップとタイルで同じ語を使う。**
|
|
111
111
|
*
|
|
112
112
|
* - `off` は「OFFに設定されています」。**接続へ誘わない**——意図的に止めたものに
|
|
113
113
|
* 「接続しましょう」と出すのは、設定する必要が無いものを押させるのと同じ誤り。
|
|
114
|
-
* - `unset`
|
|
115
|
-
*
|
|
114
|
+
* - `unset` は「未接続」。こちらは入口を出してよい。
|
|
115
|
+
*
|
|
116
|
+
* **`empty` の行は無い。** 表示に入る前に `capabilityDisplayState` が unset へ畳むので、
|
|
117
|
+
* ここへ来ることはない(オーナー決定・2026-08-12。理由はその関数の項に書いてある)。
|
|
116
118
|
*/
|
|
117
119
|
const CAP_STATE_TEXT = {
|
|
118
120
|
unset: "未接続",
|
|
119
121
|
off: "OFFに設定されています",
|
|
120
122
|
broken: "設定に異常があります",
|
|
121
|
-
empty: "設定はありますが、対象がありません",
|
|
122
123
|
on: "接続OK",
|
|
123
124
|
};
|
|
124
125
|
/** 状態の印。CAP_STATE_TEXT の前に付ける(マップは付けない——⚠️バッジと二重になる) */
|
|
@@ -243,6 +244,27 @@ function capabilityRawState(cap, caps) {
|
|
|
243
244
|
var s = c.state == null ? "" : String(c.state);
|
|
244
245
|
return s ? s : null;
|
|
245
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* **画面が使う状態。`empty` を `unset` に畳む。**(オーナー決定・2026-08-12)
|
|
249
|
+
*
|
|
250
|
+
* scaffold が設定ファイルを必ず作るので、「設定ファイルはある」は利用者にとって無情報。
|
|
251
|
+
* ダミーキーのまま置かれている=繋がっていない、が実態で、`unset` と `empty` の違いは
|
|
252
|
+
* **実装の都合**でしかない。利用者にとっての答えはどちらも「未接続」。
|
|
253
|
+
* 実機の受け入れテストで「設定はありますが、対象がありません」が何を指すのか伝わらず、
|
|
254
|
+
* 次の一手(=接続する)に繋がらなかった。
|
|
255
|
+
*
|
|
256
|
+
* **engine の状態機械は変えない。** `empty` は今後も導出されてくる(プレースホルダを
|
|
257
|
+
* 実キーと数えない判定は engine の責務で、そこを潰すと無駄な同期が走る #125①)。
|
|
258
|
+
* 畳むのは表示だけ——**この1関数だけ**が写像を持つので、「やっぱり区別したい」に
|
|
259
|
+
* なったらここの1行を消せば5値の表示へ戻る。
|
|
260
|
+
*
|
|
261
|
+
* 畳んだ先が unset なので、文言・接続の入口の案内・マップの線の有無・グレーの見た目は
|
|
262
|
+
* すべて unset と同一になる。`off` / `broken` の区別は従来どおり残す。
|
|
263
|
+
*/
|
|
264
|
+
function capabilityDisplayState(cap, caps) {
|
|
265
|
+
var s = capabilityRawState(cap, caps);
|
|
266
|
+
return s === "empty" ? "unset" : s;
|
|
267
|
+
}
|
|
246
268
|
/**
|
|
247
269
|
* 貼られたURLから Backlog の接続先を読む。
|
|
248
270
|
*
|
|
@@ -317,7 +339,11 @@ function capabilityState(cap, ctx) {
|
|
|
317
339
|
: "ok";
|
|
318
340
|
}
|
|
319
341
|
// unset / empty / 未知の値。**未知を ok にも off にも寄せない**——どちらも嘘になる。
|
|
320
|
-
//
|
|
342
|
+
// 「まだ繋がっていない」側に倒すのが安全(繋がっていないのに線を引かない)。
|
|
343
|
+
//
|
|
344
|
+
// ここは**生の状態**(capabilityRawState)で見ている。empty と unset は元々どちらも
|
|
345
|
+
// idle に落ちるので、表示側の写像(capabilityDisplayState が empty を unset に畳む)と
|
|
346
|
+
// 答えが割れることはない。**この2つを分けるなら、写像とここの両方を直すこと。**
|
|
321
347
|
return "idle";
|
|
322
348
|
}
|
|
323
349
|
// ---- ここから下は capabilities を持たない古い fleet-status.json のための劣化表示 ----
|
|
@@ -406,7 +432,7 @@ function renderConnectionMap(site) {
|
|
|
406
432
|
const idle = st === "idle";
|
|
407
433
|
const warn = st === "warn";
|
|
408
434
|
const state = "cm-" + st;
|
|
409
|
-
const derived =
|
|
435
|
+
const derived = capabilityDisplayState(c.cap, caps);
|
|
410
436
|
// **ラベルは能力名(会議・課題管理…)。ツール名は下に小さく置く。**
|
|
411
437
|
// ツールは「その能力をいま何で実現しているか」という差し替え可能なアダプタで、
|
|
412
438
|
// 主語ではない。ツール名を主にすると、Teams のように複数の能力に使われるものが
|
|
@@ -1157,8 +1183,24 @@ a.ds-name:hover { text-decoration: underline; }
|
|
|
1157
1183
|
.ds-check-detail { font-size: 12px; color: var(--muted); }
|
|
1158
1184
|
.ds-tile-desc { font-size: 12.5px; color: var(--muted); }
|
|
1159
1185
|
.ds-tile-sub { font-size: 12.5px; margin-top: 2px; }
|
|
1160
|
-
.ds-tile-chev { color: var(--muted); }
|
|
1186
|
+
.ds-tile-chev { color: var(--muted); flex: 0 0 auto; }
|
|
1161
1187
|
.ds-tile-note { font-size: 12.5px; color: #a15c00; margin-top: 2px; }
|
|
1188
|
+
/* ---- 可変長の文字列は必ず折り返す(0.4.71) ----
|
|
1189
|
+
実機の受け入れテストで、状態の文言がタイル幅を超えて溢れた(スシローのデザインタイル)。
|
|
1190
|
+
ここに出るのは engine の detail・チェックの直し方・チャンネル名・ファイルパスなど
|
|
1191
|
+
**長さが読めない**文字列で、増えるたびに個別に手当てしていたら必ず取りこぼす。
|
|
1192
|
+
**省略(ellipsis)ではなく折り返しで受ける**——何が足りないのかを伝える文なので、
|
|
1193
|
+
途中で切ると画面の目的そのものが消える(名前だけの .ds-name は従来どおり省略のまま)。
|
|
1194
|
+
white-space: normal … button の中に置く行があるので UA 既定に委ねない
|
|
1195
|
+
overflow-wrap: anywhere … 空白の無い連なり(課題管理/issues-config.json・ID・URL)を切る
|
|
1196
|
+
min-width: 0 … flex の子が min-content より縮めるようにする(無いと折り返しても溢れる) */
|
|
1197
|
+
.ds-tile-name, .ds-tile-desc, .ds-tile-sub, .ds-tile-note,
|
|
1198
|
+
.ds-check-label, .ds-check-action, .ds-check-detail,
|
|
1199
|
+
.ds-pipe-label, .ds-pipe-todo, .ds-owner-state,
|
|
1200
|
+
.ds-empty, .sec-how, .modal-desc, .ds-toggle-msg,
|
|
1201
|
+
.ds-drive-note, .ds-inactive-note, .ds-legacy-chip, .ds-keys-code {
|
|
1202
|
+
min-width: 0; white-space: normal; overflow-wrap: anywhere;
|
|
1203
|
+
}
|
|
1162
1204
|
.badge.ds-undeclared { background: #fff4e5; color: #9a6700; }
|
|
1163
1205
|
.ds-toggle { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 6px; }
|
|
1164
1206
|
.ds-toggle-btn { font-size: 12px; padding: 3px 10px; border-radius: 999px; border: 1px solid var(--border); background: #fff; color: var(--text); cursor: pointer; }
|
|
@@ -1366,6 +1408,7 @@ var CAP_STATE_MARK = ${JSON.stringify(CAP_STATE_MARK)};
|
|
|
1366
1408
|
${externalCapability.toString()}
|
|
1367
1409
|
${capabilityAdapter.toString()}
|
|
1368
1410
|
${capabilityRawState.toString()}
|
|
1411
|
+
${capabilityDisplayState.toString()}
|
|
1369
1412
|
${backlogTargetOf.toString()}
|
|
1370
1413
|
${sourceNeedsAttention.toString()}
|
|
1371
1414
|
${capabilityState.toString()}
|
|
@@ -2347,13 +2390,20 @@ ${capabilityState.toString()}
|
|
|
2347
2390
|
}));
|
|
2348
2391
|
return;
|
|
2349
2392
|
}
|
|
2350
|
-
//
|
|
2351
|
-
//
|
|
2352
|
-
//
|
|
2353
|
-
|
|
2393
|
+
// **意図的にOFFにした能力にだけ、入力欄を出さない(0.4.71)。** 使わないと決めたものに
|
|
2394
|
+
// 鍵を求めるのは、設定する必要が無いものに設定を促す偽の警告と同じ。
|
|
2395
|
+
// 何も出さないと「トークンはどこで入れるのか」が分からなくなるので、理由を1行だけ残す
|
|
2396
|
+
// (上の GitHub の畳み方と同じ流儀)。
|
|
2397
|
+
//
|
|
2398
|
+
// **未接続(unset・畳んだ empty)には出す。** 0.4.70 では「繋ぐ先が無い状態で鍵を
|
|
2399
|
+
// 入れても効かない」として畳んでいたが、engine の checks は「この画面の入力欄に
|
|
2400
|
+
// 貼ってください」と案内しており、**入力欄が無いのは案内の嘘**だった(cortex-context の
|
|
2401
|
+
// デザインで実際にそうなっていた)。「未接続=これから繋げる入口」なら、その入口に
|
|
2402
|
+
// 最初の一歩を置けるほうが整合する。broken も出す——鍵を貼り直して直る場合がある
|
|
2403
|
+
if (capabilityDisplayState(SECRET_CAP[k], caps) === "off") {
|
|
2354
2404
|
pushCap(SECRET_CAP[k], el("p", {
|
|
2355
|
-
class: "sec-how",
|
|
2356
|
-
text: "
|
|
2405
|
+
class: "sec-how ds-all-connected",
|
|
2406
|
+
text: "この能力はOFFに設定されています。使う場合は設定ファイルで有効にしてください(鍵の登録はそのあとで構いません)。",
|
|
2357
2407
|
}));
|
|
2358
2408
|
return;
|
|
2359
2409
|
}
|
|
@@ -2525,7 +2575,7 @@ ${capabilityState.toString()}
|
|
|
2525
2575
|
// その状態を割り当て、残りは未接続——「知らない」を「繋がっている」に寄せない
|
|
2526
2576
|
var active = capabilityAdapter(cap, caps);
|
|
2527
2577
|
adapters.forEach(function (a, ai) {
|
|
2528
|
-
renderAdapterTile(cap, items, a, a === active ?
|
|
2578
|
+
renderAdapterTile(cap, items, a, a === active ? capabilityDisplayState(cap, caps) : "unset", ai);
|
|
2529
2579
|
});
|
|
2530
2580
|
} else if (items.length || declared) {
|
|
2531
2581
|
// 旧データ: アダプタのタイルは宣言か行があるときだけ。手動投入だけが理由でここへ来た
|
|
@@ -2545,7 +2595,7 @@ ${capabilityState.toString()}
|
|
|
2545
2595
|
*/
|
|
2546
2596
|
function renderAdapterTile(cap, items, adapter, derived, ai) {
|
|
2547
2597
|
var meta = CAP_META[cap] || { icon: "🔗", desc: "" };
|
|
2548
|
-
var st = derived === "unset" &&
|
|
2598
|
+
var st = derived === "unset" && capabilityDisplayState(cap, caps) !== "unset"
|
|
2549
2599
|
// カタログにあるが導出が答えていないアダプタ(今日は発生しない。#107 の前方互換)
|
|
2550
2600
|
? "idle"
|
|
2551
2601
|
: capabilityState(cap, { tools: tools, capabilities: caps, internals: internals, externals: sources, pipes: pipes });
|
|
@@ -2564,10 +2614,16 @@ ${capabilityState.toString()}
|
|
|
2564
2614
|
el("div", { class: "ds-tile-sub ds-gate-" + st, text: tileSub(cap, st, derived, adapter) }),
|
|
2565
2615
|
]);
|
|
2566
2616
|
// **なぜその状態なのかを添える(#125②)。** engine が書いた一文(detail)で、
|
|
2567
|
-
//
|
|
2568
|
-
//
|
|
2617
|
+
// 「何が無いのか」を出す。on のときは読み取り範囲(件数)が既に同じ行にある。
|
|
2618
|
+
//
|
|
2619
|
+
// **未接続(unset・畳んだ empty)はタイル表面に出さない(0.4.71)。** 未接続の答えは
|
|
2620
|
+
// 「まだ繋がっていない」の一言で足り、files が空です/figma.json がありません、の
|
|
2621
|
+
// 区別は押した先で読めばよい実装の話。表面に置くと一覧が理由文で埋まるうえ、
|
|
2622
|
+
// 実機で幅を超えて溢れた。off(何件残して止めたか)と broken(異常)は
|
|
2623
|
+
// 押さずに気づけないと困るので、表面に残す
|
|
2569
2624
|
var capInfo = caps[cap];
|
|
2570
|
-
|
|
2625
|
+
var detailOnTile = derived === "off" || derived === "broken";
|
|
2626
|
+
if (detailOnTile && capInfo && capInfo.detail && adapter === capabilityAdapter(cap, caps)) {
|
|
2571
2627
|
body.appendChild(el("div", { class: "ds-tile-note ds-tile-todo", text: capInfo.detail }));
|
|
2572
2628
|
}
|
|
2573
2629
|
// トークン未設定は**状態とは別軸**。状態機械に混ぜると判定が1箇所でなくなる。
|
|
@@ -2583,10 +2639,13 @@ ${capabilityState.toString()}
|
|
|
2583
2639
|
// 案件に未設定の警告を出すと、直す必要が無いものを直させることになる。
|
|
2584
2640
|
// 読めていない組織があるときは、この下の checks とタイルの状態(warn)が拾う
|
|
2585
2641
|
var tokenIsFallback = sk === "external-sources" && !githubTokenNeeded();
|
|
2586
|
-
// **#125②: 導出があるときは導出で判断する。** OFF
|
|
2587
|
-
//
|
|
2588
|
-
//
|
|
2589
|
-
|
|
2642
|
+
// **#125②: 導出があるときは導出で判断する。** OFF(意図的に止めた)にだけ出さない
|
|
2643
|
+
// ——入れる必要が無いものについて設定を促す偽の警告になる。
|
|
2644
|
+
//
|
|
2645
|
+
// **注記の条件は、入力欄を出す条件と同じにする(0.4.71)。** 別々にすると
|
|
2646
|
+
// 「入力欄はあるのに未設定だと言われない」「言われるのに入力欄が無い」のどちらかが起きる。
|
|
2647
|
+
// 0.4.70 は unset で入力欄を畳んでいたので注記も抑えていたが、案A で欄を出すようにしたため揃えた
|
|
2648
|
+
var tokenRelevant = derived != null ? derived !== "off" : tools[cap] !== "none";
|
|
2590
2649
|
if (!tokenIsFallback && tokenRelevant && sk && (SITE.secretKinds || []).indexOf(sk) >= 0 && !((fleetVal("secretSources") || {})[sk])) {
|
|
2591
2650
|
body.appendChild(el("div", { class: "ds-tile-note", text: "⚠ トークンが未設定です" }));
|
|
2592
2651
|
}
|
package/package.json
CHANGED