bizboost 6.4.13 → 6.6.8

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.
Files changed (181) hide show
  1. package/README.md +97 -11
  2. package/dist/auth/InteractiveLogin.js +1 -1
  3. package/dist/auth/PortalAuthClient.d.ts +1 -1
  4. package/dist/auth/PortalAuthClient.js +1 -1
  5. package/dist/auth/TokenManager.d.ts +5 -14
  6. package/dist/auth/TokenManager.d.ts.map +1 -1
  7. package/dist/auth/TokenManager.js +1 -1
  8. package/dist/auth/TokenManager.js.map +1 -1
  9. package/dist/auth/portalTokenStore.d.ts +19 -0
  10. package/dist/auth/portalTokenStore.d.ts.map +1 -0
  11. package/dist/auth/portalTokenStore.js +1 -0
  12. package/dist/auth/portalTokenStore.js.map +1 -0
  13. package/dist/bin/bizboost201.mjs +2 -0
  14. package/dist/bin/bizboost202.mjs +2 -0
  15. package/dist/bin/bizboost203.mjs +2 -0
  16. package/dist/bin/bizboost204.mjs +2 -0
  17. package/dist/bin/bizboost205.mjs +2 -0
  18. package/dist/bin/bizboost206.mjs +2 -0
  19. package/dist/bin/bizboost207.mjs +2 -0
  20. package/dist/bin/bizboost208.mjs +2 -0
  21. package/dist/bin/bizboost209.mjs +2 -0
  22. package/dist/bin/bizboost210.mjs +2 -0
  23. package/dist/bin/bizboost211.mjs +2 -0
  24. package/dist/bin/bizboost212.mjs +2 -0
  25. package/dist/bin/bizboost213.mjs +2 -0
  26. package/dist/bin/bizboost214.mjs +2 -0
  27. package/dist/bin/bizboost215.mjs +2 -0
  28. package/dist/bin/bizboost216.mjs +2 -0
  29. package/dist/bin/bizboost217.mjs +2 -0
  30. package/dist/bin/bizboost218.mjs +2 -0
  31. package/dist/bin/bizboost219.mjs +2 -0
  32. package/dist/bin/bizboost220.mjs +2 -0
  33. package/dist/bin/bizboost221.mjs +2 -0
  34. package/dist/bin/bizboost222.mjs +2 -0
  35. package/dist/bin/bizboost223.mjs +2 -0
  36. package/dist/bin/bizboost224.mjs +2 -0
  37. package/dist/bin/bizboost225.mjs +2 -0
  38. package/dist/bin/bizboost226.mjs +2 -0
  39. package/dist/bin/bizboost227.mjs +2 -0
  40. package/dist/bin/bizboost228.mjs +2 -0
  41. package/dist/bin/bizboost229.mjs +2 -0
  42. package/dist/bin/bizboost230.mjs +2 -0
  43. package/dist/bin/bizboost231.mjs +2 -0
  44. package/dist/bin/bizboost232.mjs +2 -0
  45. package/dist/bin/bizboost233.mjs +2 -0
  46. package/dist/bin/bizboost234.mjs +2 -0
  47. package/dist/bin/bizboost235.mjs +2 -0
  48. package/dist/bin/bizboost236.mjs +2 -0
  49. package/dist/bin/bizboost237.mjs +2 -0
  50. package/dist/bin/bizboost238.mjs +2 -0
  51. package/dist/bin/bizboost239.mjs +2 -0
  52. package/dist/bin/bizboost240.mjs +2 -0
  53. package/dist/bin/bizboost241.mjs +2 -0
  54. package/dist/bin/bizboost242.mjs +2 -0
  55. package/dist/bin/bizboost243.mjs +2 -0
  56. package/dist/bin/bizboost244.mjs +2 -0
  57. package/dist/bin/bizboost245.mjs +2 -0
  58. package/dist/bin/bizboost246.mjs +2 -0
  59. package/dist/bin/bizboost247.mjs +2 -0
  60. package/dist/bin/bizboost248.mjs +2 -0
  61. package/dist/bin/bizboost249.mjs +2 -0
  62. package/dist/bin/bizboost250.mjs +2 -0
  63. package/dist/bin/bizboost251.mjs +2 -0
  64. package/dist/bin/bizboost252.mjs +2 -0
  65. package/dist/bin/bizboost253.mjs +2 -0
  66. package/dist/bin/bizboost254.mjs +2 -0
  67. package/dist/bin/bizboost255.mjs +2 -0
  68. package/dist/bin/bizboost256.mjs +2 -0
  69. package/dist/bin/bizboost257.mjs +2 -0
  70. package/dist/bin/bizboost258.mjs +2 -0
  71. package/dist/bin/bizboost259.mjs +2 -0
  72. package/dist/bin/bizboost260.mjs +2 -0
  73. package/dist/bin/bizboost261.mjs +2 -0
  74. package/dist/bin/bizboost262.mjs +2 -0
  75. package/dist/bin/bizboost263.mjs +2 -0
  76. package/dist/bin/bizboost264.mjs +2 -0
  77. package/dist/bin/bizboost265.mjs +2 -0
  78. package/dist/bin/bizboost266.mjs +2 -0
  79. package/dist/bin/bizboost267.mjs +2 -0
  80. package/dist/bin/bizboost268.mjs +2 -0
  81. package/dist/bin/bizboost269.mjs +2 -0
  82. package/dist/bin/bizboost270.mjs +2 -0
  83. package/dist/bin/bizboost271.mjs +2 -0
  84. package/dist/bin/bizboost272.mjs +2 -0
  85. package/dist/bin/bizboost273.mjs +2 -0
  86. package/dist/bin/bizboost274.mjs +2 -0
  87. package/dist/bin/bizboost275.mjs +2 -0
  88. package/dist/bin/bizboost276.mjs +2 -0
  89. package/dist/bin/bizboost277.mjs +2 -0
  90. package/dist/bin/bizboost278.mjs +2 -0
  91. package/dist/bin/bizboost279.mjs +2 -0
  92. package/dist/bin/bizboost280.mjs +2 -0
  93. package/dist/bin/bizboost281.mjs +2 -0
  94. package/dist/bin/bizboost282.mjs +2 -0
  95. package/dist/bin/bizboost283.mjs +2 -0
  96. package/dist/bin/bizboost284.mjs +2 -0
  97. package/dist/bin/bizboost285.mjs +2 -0
  98. package/dist/bin/bizboost286.mjs +2 -0
  99. package/dist/bin/bizboost287.mjs +2 -0
  100. package/dist/bin/bizboost288.mjs +2 -0
  101. package/dist/bin/bizboost289.mjs +2 -0
  102. package/dist/bin/bizboost290.mjs +2 -0
  103. package/dist/bin/bizboost291.mjs +2 -0
  104. package/dist/bin/bizboost292.mjs +2 -0
  105. package/dist/bin/bizboost293.mjs +2 -0
  106. package/dist/bin/bizboost294.mjs +2 -0
  107. package/dist/bin/bizboost295.mjs +2 -0
  108. package/dist/bin/bizboost296.mjs +2 -0
  109. package/dist/bin/bizboost297.mjs +2 -0
  110. package/dist/bin/bizboost298.mjs +2 -0
  111. package/dist/bin/bizboost299.mjs +2 -0
  112. package/dist/bin/bizboost300.mjs +2 -0
  113. package/dist/bin/bluelamp-vscode-base.mjs +1 -1
  114. package/dist/i18n/en.d.ts +6 -1
  115. package/dist/i18n/en.d.ts.map +1 -1
  116. package/dist/i18n/en.js +1 -1
  117. package/dist/i18n/en.js.map +1 -1
  118. package/dist/i18n/index.d.ts +1 -1
  119. package/dist/i18n/ja.d.ts +6 -1
  120. package/dist/i18n/ja.d.ts.map +1 -1
  121. package/dist/i18n/ja.js +1 -1
  122. package/dist/i18n/ja.js.map +1 -1
  123. package/dist/index.d.ts +2 -1
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +1 -1
  126. package/dist/index.js.map +1 -1
  127. package/dist/lib/account-mcp/index.cjs +1 -1
  128. package/dist/lib/accountAssurance.d.ts +41 -0
  129. package/dist/lib/accountAssurance.d.ts.map +1 -0
  130. package/dist/lib/accountAssurance.js +1 -0
  131. package/dist/lib/accountAssurance.js.map +1 -0
  132. package/dist/lib/claudeAccount.d.ts +45 -0
  133. package/dist/lib/claudeAccount.d.ts.map +1 -0
  134. package/dist/lib/claudeAccount.js +1 -0
  135. package/dist/lib/claudeAccount.js.map +1 -0
  136. package/dist/lib/claudeOnboardingSeed.d.ts +131 -0
  137. package/dist/lib/claudeOnboardingSeed.d.ts.map +1 -0
  138. package/dist/lib/claudeOnboardingSeed.js +1 -0
  139. package/dist/lib/claudeOnboardingSeed.js.map +1 -0
  140. package/dist/lib/debugRedaction.d.ts +42 -0
  141. package/dist/lib/debugRedaction.d.ts.map +1 -0
  142. package/dist/lib/debugRedaction.js +1 -0
  143. package/dist/lib/debugRedaction.js.map +1 -0
  144. package/dist/lib/headlessLaunch.d.ts +63 -0
  145. package/dist/lib/headlessLaunch.d.ts.map +1 -0
  146. package/dist/lib/headlessLaunch.js +1 -0
  147. package/dist/lib/headlessLaunch.js.map +1 -0
  148. package/dist/lib/inheritedTenant.d.ts +44 -0
  149. package/dist/lib/inheritedTenant.d.ts.map +1 -0
  150. package/dist/lib/inheritedTenant.js +1 -0
  151. package/dist/lib/inheritedTenant.js.map +1 -0
  152. package/dist/lib/mcp-server/index.cjs +1 -1
  153. package/dist/lib/mcp-server/install-package.cjs +1 -0
  154. package/dist/lib/mcp-server/mcp-version-advisor.cjs +1 -0
  155. package/dist/lib/mcp-server/portal-api-client.cjs +1 -1
  156. package/dist/lib/mcpJsonSelfHeal.d.ts +77 -0
  157. package/dist/lib/mcpJsonSelfHeal.d.ts.map +1 -0
  158. package/dist/lib/mcpJsonSelfHeal.js +1 -0
  159. package/dist/lib/mcpJsonSelfHeal.js.map +1 -0
  160. package/dist/lib/promptFailureGuidance.d.ts +30 -0
  161. package/dist/lib/promptFailureGuidance.d.ts.map +1 -0
  162. package/dist/lib/promptFailureGuidance.js +1 -0
  163. package/dist/lib/promptFailureGuidance.js.map +1 -0
  164. package/dist/lib/requireFromPackage.cjs +1 -0
  165. package/dist/lib/slotKeywordResolve.d.ts +69 -0
  166. package/dist/lib/slotKeywordResolve.d.ts.map +1 -0
  167. package/dist/lib/slotKeywordResolve.js +1 -0
  168. package/dist/lib/slotKeywordResolve.js.map +1 -0
  169. package/dist/lib/tempMcpConfig.d.ts +79 -0
  170. package/dist/lib/tempMcpConfig.d.ts.map +1 -0
  171. package/dist/lib/tempMcpConfig.js +1 -0
  172. package/dist/lib/tempMcpConfig.js.map +1 -0
  173. package/dist/lib/whoami.d.ts +34 -0
  174. package/dist/lib/whoami.d.ts.map +1 -0
  175. package/dist/lib/whoami.js +1 -0
  176. package/dist/lib/whoami.js.map +1 -0
  177. package/dist/scripts/generate-commands.js +1 -1
  178. package/dist/shared/claude-bin.js +1 -0
  179. package/dist/utils/logger.d.ts +1 -1
  180. package/package.json +114 -11
  181. package/verify-release.sh +154 -0
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env bash
2
+ # bluelamp の公開 tarball が、当社 GitHub Actions が出した正規ビルドであることを
3
+ # 第三者が検証するスクリプト。板 #507 ①。手順の正本: docs/npm-release-verification.md
4
+ #
5
+ # 使い方: ./verify-release.sh <version> 例: ./verify-release.sh 6.6.5
6
+ # インストール済みなら ./node_modules/bluelamp/verify-release.sh <version>
7
+ #
8
+ # ⚠️ このスクリプトは npm パッケージに同梱されているが、**信頼の起点ではない**。
9
+ # 改ざんされた tarball は改ざんされた検証器を同梱できる(検証器と検証対象が同じ袋に入って
10
+ # いる以上、これは原理的に避けられない)。これは繰り返し検証の利便のための道具である。
11
+ # 🔑 信頼の起点は「当社が配る物を一切実行しない」次の 2 手順である:
12
+ # 1. curl で tarball を取り、自分で sha256 を出す
13
+ # 2. その sha256 で公開透明性ログ(Rekor)を引き、人が目で記録を読む
14
+ # 詳細: docs/npm-release-verification.md §5
15
+ #
16
+ # 依存は curl / openssl / node の 3 つだけ(node は bluelamp 利用者なら必ず持つ)。
17
+ # cosign のインストールは不要。当社の認証情報も GitHub アカウントも不要。
18
+ #
19
+ # 🚨 このスクリプトはフォールバックしない。判定材料が欠けた場合も「通す」のではなく赤で落とす
20
+ # (測定不能は赤に倒す)。exit 0 以外はすべて「正規ビルドと確認できなかった」を意味する。
21
+ # exit 0 = 検証通過 / exit 1 = 検証失敗(改ざん・署名なし・身元不一致)/ exit 2 = 測定不能(前提不足)
22
+
23
+ set -euo pipefail
24
+
25
+ PKG="${BLUELAMP_PKG:-bluelamp}"
26
+ # 署名者としてこれ以外を受け付けない(ここが緩むと「誰かが署名した」だけの検証に落ちる)
27
+ EXPECT_REPO="${BLUELAMP_EXPECT_REPO:-mikoto-co-jp/mikoto-monorepo}"
28
+ EXPECT_WORKFLOW="${BLUELAMP_EXPECT_WORKFLOW:-.github/workflows/publish-npm.yml}"
29
+ EXPECT_ISSUER="${BLUELAMP_EXPECT_ISSUER:-https://token.actions.githubusercontent.com}"
30
+ REKOR="${BLUELAMP_REKOR_URL:-https://rekor.sigstore.dev}"
31
+ FULCIO="${BLUELAMP_FULCIO_URL:-https://fulcio.sigstore.dev}"
32
+ REGISTRY="${BLUELAMP_REGISTRY:-https://registry.npmjs.org}"
33
+
34
+ VERSION="${1:-}"
35
+ if [ -z "$VERSION" ]; then
36
+ echo "usage: $0 <version> (例: $0 6.6.5)" >&2
37
+ exit 2
38
+ fi
39
+
40
+ for c in curl openssl node; do
41
+ command -v "$c" >/dev/null 2>&1 || { echo "FAIL(測定不能): $c が無い" >&2; exit 2; }
42
+ done
43
+
44
+ WORK="$(mktemp -d)"
45
+ trap 'rm -rf "$WORK"' EXIT
46
+
47
+ say() { printf '%s\n' "$*"; }
48
+ fail() { printf 'FAIL: %s\n' "$*" >&2; exit 1; }
49
+ unmeasurable() { printf 'FAIL(測定不能): %s\n' "$*" >&2; exit 2; }
50
+
51
+ say "== 1. registry から ${PKG}@${VERSION} のメタデータを取得 =="
52
+ curl -sSf "${REGISTRY}/${PKG}/${VERSION}" -o "$WORK/meta.json" \
53
+ || unmeasurable "${PKG}@${VERSION} を registry から取得できない"
54
+ eval "$(node -e '
55
+ const j=require(process.argv[1]);
56
+ const d=j.dist||{};
57
+ if(!d.tarball||!d.shasum||!d.integrity) { console.log("BAD=1"); process.exit(0); }
58
+ console.log("TARBALL_URL=" + JSON.stringify(d.tarball));
59
+ console.log("EXP_SHA1=" + JSON.stringify(d.shasum));
60
+ console.log("EXP_INTEGRITY=" + JSON.stringify(d.integrity));
61
+ ' "$WORK/meta.json")"
62
+ [ "${BAD:-0}" = "1" ] && unmeasurable "registry メタデータに dist.tarball/shasum/integrity が揃っていない"
63
+ say " tarball: $TARBALL_URL"
64
+
65
+ say "== 2. tarball を取得し、registry が公示する digest と一致するか =="
66
+ curl -sSfL "$TARBALL_URL" -o "$WORK/pkg.tgz" || unmeasurable "tarball を取得できない"
67
+ GOT_SHA1="$(openssl dgst -sha1 -r "$WORK/pkg.tgz" | cut -d' ' -f1)"
68
+ GOT_SHA512_B64="$(openssl dgst -sha512 -binary "$WORK/pkg.tgz" | openssl base64 -A)"
69
+ [ "$GOT_SHA1" = "$EXP_SHA1" ] || fail "sha1 不一致 (registry=$EXP_SHA1 / 実物=$GOT_SHA1)"
70
+ [ "sha512-$GOT_SHA512_B64" = "$EXP_INTEGRITY" ] || fail "integrity 不一致 (registry=$EXP_INTEGRITY)"
71
+ SHA256="$(openssl dgst -sha256 -r "$WORK/pkg.tgz" | cut -d' ' -f1)"
72
+ say " OK sha256=$SHA256"
73
+
74
+ say "== 3. 公開 Rekor をこの digest で検索(当社ホスティングは登場しない) =="
75
+ curl -sSf -X POST -H 'Content-Type: application/json' \
76
+ -d "{\"hash\":\"sha256:${SHA256}\"}" "${REKOR}/api/v1/index/retrieve" -o "$WORK/uuids.json" \
77
+ || unmeasurable "Rekor 検索 API に到達できない"
78
+ UUIDS="$(node -e 'const a=require(process.argv[1]);if(!Array.isArray(a))process.exit(3);console.log(a.join("\n"))' "$WORK/uuids.json")" \
79
+ || unmeasurable "Rekor の応答を解釈できない"
80
+ [ -n "$UUIDS" ] || fail "この digest に対する署名が公開 Rekor に 1 件も無い(=正規ビルドと確認できない)"
81
+
82
+ say "== 4. Fulcio の信頼バンドルを取得(証明書チェーンの検証に使う) =="
83
+ curl -sSf "${FULCIO}/api/v2/trustBundle" -o "$WORK/tb.json" || unmeasurable "Fulcio 信頼バンドルを取得できない"
84
+ node -e '
85
+ const fs=require("fs"),{execSync}=require("child_process");
86
+ const j=require(process.argv[1]),W=process.argv[2];
87
+ const certs=[]; for(const c of (j.chains||[])) for(const p of (c.certificates||[])) certs.push(p.trim());
88
+ const root=[],inter=[];
89
+ for(const pem of certs){
90
+ fs.writeFileSync(W+"/_t.pem",pem+"\n");
91
+ const s=execSync("openssl x509 -in "+W+"/_t.pem -noout -subject -issuer").toString();
92
+ (s.match(/subject=(.*)/)[1].trim()===s.match(/issuer=(.*)/)[1].trim()?root:inter).push(pem);
93
+ }
94
+ if(!root.length) process.exit(3);
95
+ fs.writeFileSync(W+"/root.pem",root.join("\n")+"\n");
96
+ fs.writeFileSync(W+"/inter.pem",inter.join("\n")+"\n");
97
+ ' "$WORK/tb.json" "$WORK" || unmeasurable "Fulcio 信頼バンドルを分解できない"
98
+
99
+ say "== 5. 各エントリを検証(1 件でも全条件を満たせば通過) =="
100
+ PASSED=0
101
+ while IFS= read -r UUID; do
102
+ [ -n "$UUID" ] || continue
103
+ say "-- entry $UUID"
104
+ curl -sSf "${REKOR}/api/v1/log/entries/${UUID}" -o "$WORK/entry.json" || { say " skip: エントリを取得できない"; continue; }
105
+ # body(base64 JSON) から kind / hash / 署名 / 証明書 / integratedTime を取り出す
106
+ if ! node -e '
107
+ const fs=require("fs");const j=require(process.argv[1]),W=process.argv[2],SHA=process.argv[3];
108
+ const k=Object.keys(j)[0], e=j[k];
109
+ const b=JSON.parse(Buffer.from(e.body,"base64").toString());
110
+ if(b.kind!=="hashedrekord") { console.error(" skip: kind="+b.kind); process.exit(3); }
111
+ if((b.spec.data.hash.value||"").toLowerCase()!==SHA) { console.error(" skip: エントリの hash が対象と違う"); process.exit(3); }
112
+ fs.writeFileSync(W+"/sig.bin", Buffer.from(b.spec.signature.content,"base64"));
113
+ fs.writeFileSync(W+"/cert.pem", Buffer.from(b.spec.signature.publicKey.content,"base64").toString());
114
+ fs.writeFileSync(W+"/at.txt", String(e.integratedTime));
115
+ ' "$WORK/entry.json" "$WORK" "$SHA256"; then continue; fi
116
+ AT="$(cat "$WORK/at.txt")"
117
+
118
+ # 5-1. 証明書が Fulcio のルートに繋がるか。
119
+ # 🚨 -attime は必須。Fulcio の証明書は 10 分の短命なので、現在時刻で verify すると必ず期限切れで落ちる。
120
+ # 署名時点(Rekor が記録した integratedTime)で有効だったかを問う。
121
+ if ! openssl verify -CAfile "$WORK/root.pem" -untrusted "$WORK/inter.pem" -attime "$AT" "$WORK/cert.pem" >/dev/null 2>&1; then
122
+ say " skip: 証明書が Fulcio のルートに繋がらない"; continue
123
+ fi
124
+
125
+ # 5-2. 署名者の身元。ここが緩むと「誰かが署名した」だけの検証になる
126
+ SAN="$(openssl x509 -in "$WORK/cert.pem" -noout -ext subjectAltName 2>/dev/null | tr -d ' ' | sed -n 's/.*URI:\([^,]*\).*/\1/p' | head -1)"
127
+ case "$SAN" in
128
+ "https://github.com/${EXPECT_REPO}/${EXPECT_WORKFLOW}@"*) : ;;
129
+ *) say " skip: 署名者が当社ワークフローでない (SAN=${SAN:-なし})"; continue ;;
130
+ esac
131
+ if ! openssl x509 -in "$WORK/cert.pem" -noout -text 2>/dev/null | grep -qF "$EXPECT_ISSUER"; then
132
+ say " skip: OIDC 発行者が $EXPECT_ISSUER でない"; continue
133
+ fi
134
+
135
+ # 5-3. その証明書の鍵で、tarball のバイト列に対する署名が検証できるか
136
+ openssl x509 -in "$WORK/cert.pem" -pubkey -noout > "$WORK/cert.pub" 2>/dev/null || { say " skip: 公開鍵を取り出せない"; continue; }
137
+ if ! openssl dgst -sha256 -verify "$WORK/cert.pub" -signature "$WORK/sig.bin" "$WORK/pkg.tgz" >/dev/null 2>&1; then
138
+ say " skip: 署名が tarball と一致しない"; continue
139
+ fi
140
+
141
+ say ""
142
+ say "✅ 検証通過: ${PKG}@${VERSION} は当社 GitHub Actions が出した正規ビルドです"
143
+ say " tarball sha256 : $SHA256"
144
+ say " 署名者(SAN) : $SAN"
145
+ say " OIDC 発行者 : $EXPECT_ISSUER"
146
+ say " 署名時刻 : $(date -u -r "$AT" '+%Y-%m-%dT%H:%M:%SZ' 2>/dev/null || date -u -d "@$AT" '+%Y-%m-%dT%H:%M:%SZ')"
147
+ say " 透明性ログ : ${REKOR}/api/v1/log/entries/${UUID}"
148
+ PASSED=1
149
+ break
150
+ done <<EOF
151
+ $UUIDS
152
+ EOF
153
+
154
+ [ "$PASSED" = "1" ] || fail "全条件を満たすエントリが無かった(=正規ビルドと確認できない)"