@horizon_works/banto 0.8.7 → 0.8.9
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/license/client.js +28 -8
- package/package.json +1 -1
- package/server.js +61 -1
package/license/client.js
CHANGED
|
@@ -193,6 +193,9 @@ async function check(version) {
|
|
|
193
193
|
status: r.status || 'unknown',
|
|
194
194
|
daysLeft: typeof r.days_left === 'number' ? r.days_left : null,
|
|
195
195
|
plan: r.plan || null, expiresAt: r.expires_at || null,
|
|
196
|
+
// ★台帳の「統計を送ってよい」印を控える(★isSharing の③が読む)
|
|
197
|
+
// ★これは**入れる側**だけに効く。★止めるのは常に手元の share.json
|
|
198
|
+
stats_opt_in: r.stats_opt_in === true,
|
|
196
199
|
lastOkAt: r.status === 'active' ? now : (cache && cache.lastOkAt) || null,
|
|
197
200
|
};
|
|
198
201
|
writeCache(next);
|
|
@@ -244,17 +247,34 @@ const HOME = process.env.BANTO_HOME || path.join(require('os').homedir(), '.bant
|
|
|
244
247
|
const STATS_CACHE = path.join(HOME, '.stats.json');
|
|
245
248
|
|
|
246
249
|
/**
|
|
247
|
-
*
|
|
250
|
+
* 送ることに同意しているか
|
|
248
251
|
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
252
|
+
* ★強さの順(2026-08-29)
|
|
253
|
+
* ① 手元で「止めて」と言われていたら → ★**必ず止まる**(本人の意思がいちばん強い)
|
|
254
|
+
* ② 手元で「送る」と言われていたら → 送る
|
|
255
|
+
* ③ 手元に何も無ければ → ★**台帳の `stats_opt_in`** を見る
|
|
256
|
+
* ④ どれも無ければ → ★送らない(既定オフ。★書面のとおり)
|
|
257
|
+
*
|
|
258
|
+
* 🚨★③を足した理由(2026-08-29)
|
|
259
|
+
* ★`stats_opt_in` の列は 2026-08-21 から在ったのに、**誰も読んでいなかった**
|
|
260
|
+
* (→ tooling-check.md「列を作った日に、読む側を書く」)。
|
|
261
|
+
* ★身内へお渡しした鍵など、**こちらで入れたい**場面がある。
|
|
262
|
+
* ★★ただし**切る力は台帳に持たせない**。★止めるのは常に本人。
|
|
263
|
+
* ★誰がいつ入れたかは `stats_opt_in_at` に残る(★あとから説明できる)。
|
|
254
264
|
*/
|
|
255
265
|
function isSharing() {
|
|
256
|
-
|
|
257
|
-
|
|
266
|
+
// ① ② 手元に書いてあれば、それが最優先
|
|
267
|
+
try {
|
|
268
|
+
const j = JSON.parse(fs.readFileSync(path.join(HOME, 'share.json'), 'utf8'));
|
|
269
|
+
if (typeof j.stats === 'boolean') return j.stats;
|
|
270
|
+
} catch (_) {}
|
|
271
|
+
// ③ 台帳の印(★最後に確かめたときの結果を控えから読む。通信しない)
|
|
272
|
+
try {
|
|
273
|
+
const c = readCache();
|
|
274
|
+
if (c && c.stats_opt_in === true) return true;
|
|
275
|
+
} catch (_) {}
|
|
276
|
+
// ④ 既定は送らない
|
|
277
|
+
return false;
|
|
258
278
|
}
|
|
259
279
|
|
|
260
280
|
/** 同意を切り替える(★人が明示的に呼んだときだけ) */
|
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -653,6 +653,45 @@ const CORE_HOME = path.join(
|
|
|
653
653
|
|
|
654
654
|
function coreFile(rel) { return path.join(CORE_HOME, rel.split('/').join(path.sep)); }
|
|
655
655
|
|
|
656
|
+
/**
|
|
657
|
+
* ★核の新しい版が出ていないかを見る(★同期。通信しない)
|
|
658
|
+
*
|
|
659
|
+
* ★通信は別の口(下の `核の版を取りにいく`)が1日1回だけ行い、
|
|
660
|
+
* ★結果を `.remote_version.json` に控える。★ここはその控えを読むだけ。
|
|
661
|
+
* ★★起動を遅くしない。★取れていなければ黙る。
|
|
662
|
+
*/
|
|
663
|
+
function 核の版を見る() {
|
|
664
|
+
const 手元 = (() => {
|
|
665
|
+
try { return JSON.parse(fs.readFileSync(path.join(CORE_HOME, '.version.json'), 'utf8')).version; }
|
|
666
|
+
catch (_) { return null; }
|
|
667
|
+
})();
|
|
668
|
+
const 配布口 = (() => {
|
|
669
|
+
try { return JSON.parse(fs.readFileSync(path.join(CORE_HOME, '.remote_version.json'), 'utf8')).version; }
|
|
670
|
+
catch (_) { return null; }
|
|
671
|
+
})();
|
|
672
|
+
if (!配布口) return null; // ★まだ見にいっていない
|
|
673
|
+
if (手元 === 配布口) return null; // ★同じなら黙る
|
|
674
|
+
// ★手元が無い=まだ核が入っていない。★これは別の案内が出るので、ここでは黙る
|
|
675
|
+
if (!手元) return null;
|
|
676
|
+
return { 手元, 配布口, 新しいのがある: true };
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
/** ★1日1回だけ、配布口の版を見にいく(★中身は取らない。版だけ) */
|
|
680
|
+
async function 核の版を取りにいく() {
|
|
681
|
+
const f = path.join(CORE_HOME, '.remote_version.json');
|
|
682
|
+
try {
|
|
683
|
+
const 前 = JSON.parse(fs.readFileSync(f, 'utf8'));
|
|
684
|
+
const 今日 = new Date().toISOString().slice(0, 10);
|
|
685
|
+
if (前.checked_on === 今日) return; // ★今日はもう見た
|
|
686
|
+
} catch (_) {}
|
|
687
|
+
try {
|
|
688
|
+
const v = await supPost('core_version', {});
|
|
689
|
+
fs.mkdirSync(CORE_HOME, { recursive: true });
|
|
690
|
+
fs.writeFileSync(f, JSON.stringify(
|
|
691
|
+
{ version: v, checked_on: new Date().toISOString().slice(0, 10) }, null, 2), 'utf8');
|
|
692
|
+
} catch (_) { /* ★取れなければ黙る(★鍵が無い・通信できない) */ }
|
|
693
|
+
}
|
|
694
|
+
|
|
656
695
|
function loadInstructions() {
|
|
657
696
|
let core = null;
|
|
658
697
|
// ① 手元の控え(★鍵が切れても読める)
|
|
@@ -713,7 +752,21 @@ function loadInstructions() {
|
|
|
713
752
|
// ③ 記録(3件たまったら鳴る)
|
|
714
753
|
try { const d = FREE.selfDiagnosis(); if (d) 行.push(d); } catch (_) {}
|
|
715
754
|
|
|
716
|
-
// ④
|
|
755
|
+
// ④ ★核の新しい版が出ていないか(2026-08-29)
|
|
756
|
+
// 🚨★由来=「接続する度に最新があれば自動的にアップされるの?」→ ★**核はされていなかった**。
|
|
757
|
+
// ★道具(npx -y)は起動のたびに最新になるが、★核は `sync_core` を言うまで古いまま。
|
|
758
|
+
// ★★実際、ドムさんの指摘で直した「名前を聞き直さない」が、★言わないと届かない状態だった。
|
|
759
|
+
// ★**黙って上書きしない**(★手を入れた核を壊さない)。★出るのは「取ってきますか」まで。
|
|
760
|
+
// ★通信するので、★**1日1回だけ**見る(★起動を遅くしない)。★取れなければ黙る。
|
|
761
|
+
try {
|
|
762
|
+
const 版 = 核の版を見る();
|
|
763
|
+
if (版 && 版.新しいのがある) {
|
|
764
|
+
行.push('★番頭の核に新しい版があります(お手元 ' + (版.手元 || '無し') + ' → ' + 版.配布口 + ')'
|
|
765
|
+
+ ' →「番頭の核を取ってきて」で入ります');
|
|
766
|
+
}
|
|
767
|
+
} catch (_) {}
|
|
768
|
+
|
|
769
|
+
// ⑤ 下ごしらえ(★足りないものを1つだけ)
|
|
717
770
|
try {
|
|
718
771
|
const e = ENV.guide();
|
|
719
772
|
if (e.足りないもの) 行.push('下ごしらえ:' + e.次にすること.何が + '(「下ごしらえを見て」で手順が出ます)');
|
|
@@ -1872,6 +1925,13 @@ let LICENSE_STATE = { allowed: true, status: 'unconfigured', message: '', daysLe
|
|
|
1872
1925
|
if (LICENSE_STATE.allowed && LIC.isSharing && LIC.isSharing()) {
|
|
1873
1926
|
try { await LIC.reportStats(VERSION, FREE.review(false)); } catch (_) {}
|
|
1874
1927
|
}
|
|
1928
|
+
|
|
1929
|
+
// ★核の新しい版が出ていないかを、1日1回だけ見にいく(★版だけ。中身は取らない)
|
|
1930
|
+
// ★取れた結果は控えに書き、★次の起動の「いまの状態」に1行出る。
|
|
1931
|
+
// ★★黙って上書きしない。★出るのは「取ってきますか」まで。
|
|
1932
|
+
if (LICENSE_STATE.allowed) {
|
|
1933
|
+
try { await 核の版を取りにいく(); } catch (_) {}
|
|
1934
|
+
}
|
|
1875
1935
|
} catch (_) {
|
|
1876
1936
|
// license モジュールが無い構成でも動く
|
|
1877
1937
|
}
|