lit-forge-mcp 0.10.0 → 0.11.0
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/lib/__tests__/economic-release-pulse.test.d.ts +1 -0
- package/dist/lib/__tests__/economic-release-pulse.test.js +102 -0
- package/dist/lib/__tests__/economic-release-pulse.test.js.map +1 -0
- package/dist/lib/economic-release-pulse/adapters/bea.d.ts +2 -0
- package/dist/lib/economic-release-pulse/adapters/bea.js +55 -0
- package/dist/lib/economic-release-pulse/adapters/bea.js.map +1 -0
- package/dist/lib/economic-release-pulse/adapters/boj.d.ts +2 -0
- package/dist/lib/economic-release-pulse/adapters/boj.js +21 -0
- package/dist/lib/economic-release-pulse/adapters/boj.js.map +1 -0
- package/dist/lib/economic-release-pulse/adapters/cao.d.ts +5 -0
- package/dist/lib/economic-release-pulse/adapters/cao.js +72 -0
- package/dist/lib/economic-release-pulse/adapters/cao.js.map +1 -0
- package/dist/lib/economic-release-pulse/cache.d.ts +3 -0
- package/dist/lib/economic-release-pulse/cache.js +22 -0
- package/dist/lib/economic-release-pulse/cache.js.map +1 -0
- package/dist/lib/economic-release-pulse/pulse.d.ts +14 -0
- package/dist/lib/economic-release-pulse/pulse.js +74 -0
- package/dist/lib/economic-release-pulse/pulse.js.map +1 -0
- package/dist/lib/economic-release-pulse/types.d.ts +22 -0
- package/dist/lib/economic-release-pulse/types.js +11 -0
- package/dist/lib/economic-release-pulse/types.js.map +1 -0
- package/dist/lib/economic-release-pulse/util.d.ts +8 -0
- package/dist/lib/economic-release-pulse/util.js +21 -0
- package/dist/lib/economic-release-pulse/util.js.map +1 -0
- package/dist/tools/get-economic-release-pulse.d.ts +2 -0
- package/dist/tools/get-economic-release-pulse.js +63 -0
- package/dist/tools/get-economic-release-pulse.js.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// economic-release-pulse の純粋関数テスト。
|
|
2
|
+
// ネットワーク fetch は CI で不安定なため、パーサと JST ヘルパのみ対象。
|
|
3
|
+
import { describe, it, expect } from "vitest";
|
|
4
|
+
import { parseCaoDate, parseCaoTime, parseCaoGdpTable, } from "../economic-release-pulse/adapters/cao.js";
|
|
5
|
+
import { jstParts, jstToday, jstDatePlus } from "../economic-release-pulse/util.js";
|
|
6
|
+
describe("parseCaoDate", () => {
|
|
7
|
+
it("和暦括弧・曜日付きの内閣府形式をパースする", () => {
|
|
8
|
+
expect(parseCaoDate("2026(令和8)年5月19日(火)")).toBe("2026-05-19");
|
|
9
|
+
expect(parseCaoDate("2027(令和9)年2月15日(月)")).toBe("2027-02-15");
|
|
10
|
+
});
|
|
11
|
+
it("和暦括弧なしでもパースする", () => {
|
|
12
|
+
expect(parseCaoDate("2026年5月1日")).toBe("2026-05-01");
|
|
13
|
+
});
|
|
14
|
+
it("precise でない日付は null", () => {
|
|
15
|
+
expect(parseCaoDate("未定")).toBeNull();
|
|
16
|
+
expect(parseCaoDate("2026(令和8)年12月中旬以降")).toBeNull();
|
|
17
|
+
expect(parseCaoDate("")).toBeNull();
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe("parseCaoTime", () => {
|
|
21
|
+
it("「8時50分」形式をパースする", () => {
|
|
22
|
+
expect(parseCaoTime("8時50分")).toBe("08:50");
|
|
23
|
+
expect(parseCaoTime("10時00分")).toBe("10:00");
|
|
24
|
+
});
|
|
25
|
+
it("「-」など時刻でないものは null", () => {
|
|
26
|
+
expect(parseCaoTime("-")).toBeNull();
|
|
27
|
+
expect(parseCaoTime("")).toBeNull();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe("parseCaoGdpTable", () => {
|
|
31
|
+
// 内閣府 公表予定ページの実構造を模した fixture。
|
|
32
|
+
const FIXTURE = `
|
|
33
|
+
<h2><span id="a">四半期別GDP速報</span></h2>
|
|
34
|
+
<table class="tableBase w_100">
|
|
35
|
+
<thead><tr><th scope="col">期間</th><th scope="col">公表予定日</th><th scope="col">公表時刻</th></tr></thead>
|
|
36
|
+
<tbody>
|
|
37
|
+
<tr>
|
|
38
|
+
<td class="txtCenter">2026年1-3月期(1次速報)</td>
|
|
39
|
+
<td>2026(令和8)年5月19日(火)</td>
|
|
40
|
+
<td class="txtCenter">8時50分</td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<td class="txtCenter">2026年4-6月期(1次速報)</td>
|
|
44
|
+
<td>2026(令和8)年8月17日(月)</td>
|
|
45
|
+
<td class="txtCenter">8時50分</td>
|
|
46
|
+
</tr>
|
|
47
|
+
</tbody>
|
|
48
|
+
</table>
|
|
49
|
+
<h2><span id="b">国民経済計算年次推計</span></h2>
|
|
50
|
+
<table class="tableBase w_100">
|
|
51
|
+
<tbody>
|
|
52
|
+
<tr><td class="txtCenter">2025年度</td><td>2026(令和8)年12月中旬以降</td><td class="txtCenter">-</td></tr>
|
|
53
|
+
</tbody>
|
|
54
|
+
</table>`;
|
|
55
|
+
it("GDP 速報テーブルの行を ReleaseEvent に変換する", () => {
|
|
56
|
+
const events = parseCaoGdpTable(FIXTURE);
|
|
57
|
+
expect(events).toHaveLength(2);
|
|
58
|
+
expect(events[0]).toEqual({
|
|
59
|
+
date: "2026-05-19",
|
|
60
|
+
time: "08:50",
|
|
61
|
+
country: "JP",
|
|
62
|
+
name: "日 GDP速報 2026年1-3月期(1次速報)",
|
|
63
|
+
source: "内閣府",
|
|
64
|
+
sourceUrl: "https://www.esri.cao.go.jp/jp/sna/kouhyou/kouhyou_top.html",
|
|
65
|
+
});
|
|
66
|
+
expect(events[1].date).toBe("2026-08-17");
|
|
67
|
+
});
|
|
68
|
+
it("四半期別GDP速報の最初のテーブルのみ対象(年次推計テーブルは含めない)", () => {
|
|
69
|
+
const events = parseCaoGdpTable(FIXTURE);
|
|
70
|
+
// 年次推計の「12月中旬以降」行は別テーブルなので拾わない
|
|
71
|
+
expect(events.every((e) => e.name.includes("速報"))).toBe(true);
|
|
72
|
+
expect(events.some((e) => e.date.startsWith("2026-12"))).toBe(false);
|
|
73
|
+
});
|
|
74
|
+
it("該当テーブルが無ければ空配列", () => {
|
|
75
|
+
expect(parseCaoGdpTable("<html><body>no table</body></html>")).toEqual([]);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
describe("jstParts / jstToday / jstDatePlus", () => {
|
|
79
|
+
it("UTC タイムスタンプを JST の日付・時刻に変換する", () => {
|
|
80
|
+
// 12:30 UTC = 21:30 JST 同日
|
|
81
|
+
expect(jstParts(Date.parse("2026-05-28T12:30:00+00:00"))).toEqual({
|
|
82
|
+
date: "2026-05-28",
|
|
83
|
+
time: "21:30",
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
it("日付境界を跨ぐ変換(UTC 夜 → JST 翌朝)", () => {
|
|
87
|
+
// 20:00 UTC 5/14 = 05:00 JST 5/15
|
|
88
|
+
expect(jstParts(Date.parse("2026-05-14T20:00:00+00:00"))).toEqual({
|
|
89
|
+
date: "2026-05-15",
|
|
90
|
+
time: "05:00",
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
it("jstToday は JST の当日を返す", () => {
|
|
94
|
+
// 2026-05-15 00:00 JST = 2026-05-14 15:00 UTC
|
|
95
|
+
expect(jstToday(new Date("2026-05-14T15:00:00Z"))).toBe("2026-05-15");
|
|
96
|
+
});
|
|
97
|
+
it("jstDatePlus は JST で N 日後を返す", () => {
|
|
98
|
+
expect(jstDatePlus(6, new Date("2026-05-14T15:00:00Z"))).toBe("2026-05-21");
|
|
99
|
+
expect(jstDatePlus(0, new Date("2026-05-14T15:00:00Z"))).toBe("2026-05-15");
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=economic-release-pulse.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"economic-release-pulse.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/economic-release-pulse.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// BEA(米経済分析局)アダプタ。
|
|
2
|
+
// 公式の機械可読リリース日程 JSON を取得する。スクレイピング不要・公式 API。
|
|
3
|
+
// https://apps.bea.gov/API/signup/release_dates.json
|
|
4
|
+
// 形式: { "<リリース名>": { "release_dates": ["2026-05-28T12:30:00+00:00", ...] }, ... }
|
|
5
|
+
// 個人投資家が見る主要 4 系列に絞って ReleaseEvent[] に正規化する。
|
|
6
|
+
import { withCache, DEFAULT_CACHE_TTL_MS } from "../cache.js";
|
|
7
|
+
import { jstParts, RELEASE_PULSE_UA, RELEASE_PULSE_FETCH_TIMEOUT_MS } from "../util.js";
|
|
8
|
+
const BEA_URL = "https://apps.bea.gov/API/signup/release_dates.json";
|
|
9
|
+
const BEA_SOURCE_URL = "https://www.bea.gov/news/schedule";
|
|
10
|
+
// BEA の release_dates.json のキー → 日本語表示名。
|
|
11
|
+
// 全 27 系列のうち、市況で参照される主要指標のみ採用。
|
|
12
|
+
const BEA_RELEASES = {
|
|
13
|
+
"Gross Domestic Product": "米 GDP",
|
|
14
|
+
"Personal Income and Outlays": "米 個人所得・支出(PCE)",
|
|
15
|
+
"U.S. International Trade in Goods and Services": "米 貿易収支",
|
|
16
|
+
"Corporate Profits": "米 企業収益",
|
|
17
|
+
};
|
|
18
|
+
export const beaAdapter = {
|
|
19
|
+
key: "bea",
|
|
20
|
+
label: "BEA(米経済分析局)",
|
|
21
|
+
fetchEvents: () => withCache("bea", DEFAULT_CACHE_TTL_MS, async () => {
|
|
22
|
+
const res = await fetch(BEA_URL, {
|
|
23
|
+
headers: { "User-Agent": RELEASE_PULSE_UA, Accept: "application/json" },
|
|
24
|
+
signal: AbortSignal.timeout(RELEASE_PULSE_FETCH_TIMEOUT_MS),
|
|
25
|
+
redirect: "follow",
|
|
26
|
+
});
|
|
27
|
+
if (!res.ok)
|
|
28
|
+
throw new Error(`HTTP ${res.status}`);
|
|
29
|
+
const data = (await res.json());
|
|
30
|
+
const out = [];
|
|
31
|
+
for (const [key, jpName] of Object.entries(BEA_RELEASES)) {
|
|
32
|
+
const dates = data[key]?.release_dates;
|
|
33
|
+
if (!Array.isArray(dates))
|
|
34
|
+
continue;
|
|
35
|
+
for (const raw of dates) {
|
|
36
|
+
if (typeof raw !== "string")
|
|
37
|
+
continue;
|
|
38
|
+
const ms = Date.parse(raw);
|
|
39
|
+
if (Number.isNaN(ms))
|
|
40
|
+
continue;
|
|
41
|
+
const { date, time } = jstParts(ms);
|
|
42
|
+
out.push({
|
|
43
|
+
date,
|
|
44
|
+
time,
|
|
45
|
+
country: "US",
|
|
46
|
+
name: jpName,
|
|
47
|
+
source: "BEA",
|
|
48
|
+
sourceUrl: BEA_SOURCE_URL,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return out;
|
|
53
|
+
}),
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=bea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bea.js","sourceRoot":"","sources":["../../../../src/lib/economic-release-pulse/adapters/bea.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,6CAA6C;AAC7C,uDAAuD;AACvD,kFAAkF;AAClF,6CAA6C;AAG7C,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AAExF,MAAM,OAAO,GAAG,oDAAoD,CAAC;AACrE,MAAM,cAAc,GAAG,mCAAmC,CAAC;AAE3D,yCAAyC;AACzC,+BAA+B;AAC/B,MAAM,YAAY,GAAqC;IACrD,wBAAwB,EAAE,OAAO;IACjC,6BAA6B,EAAE,gBAAgB;IAC/C,gDAAgD,EAAE,QAAQ;IAC1D,mBAAmB,EAAE,QAAQ;CAC9B,CAAC;AAIF,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,GAAG,EAAE,CAChB,SAAS,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;YAC/B,OAAO,EAAE,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE;YACvE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,8BAA8B,CAAC;YAC3D,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAoC,CAAC;QAEnE,MAAM,GAAG,GAAmB,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,SAAS;YACpC,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,SAAS;gBACtC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,SAAS;gBAC/B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACpC,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI;oBACJ,IAAI;oBACJ,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,MAAM;oBACZ,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,cAAc;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;CACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// 日銀アダプタ。
|
|
2
|
+
// 日銀の金融政策決定会合・主な意見・短観・議事要旨は、既に economic-events.ts に
|
|
3
|
+
// 手動キュレーション+verify:cb で裏取り済みのデータがある。それを再利用し、
|
|
4
|
+
// pulse ツールの出力にも JP の中銀イベントが含まれるようにする
|
|
5
|
+
// (新規スクレイピングはせず、verify 済みデータの再エクスポートに留める)。
|
|
6
|
+
import { ECONOMIC_EVENTS } from "../../economic-events.js";
|
|
7
|
+
const BOJ_SOURCE_URL = "https://www.boj.or.jp/about/calendar/index.htm";
|
|
8
|
+
export const bojAdapter = {
|
|
9
|
+
key: "boj",
|
|
10
|
+
label: "日銀(金融政策決定会合・主な意見・短観・議事要旨)",
|
|
11
|
+
// ネットワーク不要・同期だが、ReleaseAdapter 契約に合わせ async で返す。
|
|
12
|
+
fetchEvents: async () => ECONOMIC_EVENTS.filter((e) => e.country === "JP" && e.name.startsWith("日銀")).map((e) => ({
|
|
13
|
+
date: e.date,
|
|
14
|
+
...(e.time ? { time: e.time } : {}),
|
|
15
|
+
country: "JP",
|
|
16
|
+
name: e.name,
|
|
17
|
+
source: "日銀(lit-forge 収録データ)",
|
|
18
|
+
sourceUrl: BOJ_SOURCE_URL,
|
|
19
|
+
})),
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=boj.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boj.js","sourceRoot":"","sources":["../../../../src/lib/economic-release-pulse/adapters/boj.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,oDAAoD;AACpD,6CAA6C;AAC7C,sCAAsC;AACtC,2CAA2C;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAG3D,MAAM,cAAc,GAAG,gDAAgD,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,2BAA2B;IAClC,iDAAiD;IACjD,WAAW,EAAE,KAAK,IAA6B,EAAE,CAC/C,eAAe,CAAC,MAAM,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CACrD,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACZ,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,IAAa;QACtB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,MAAM,EAAE,qBAAqB;QAC7B,SAAS,EAAE,cAAc;KAC1B,CAAC,CAAC;CACN,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ReleaseAdapter, ReleaseEvent } from "../types.js";
|
|
2
|
+
export declare function parseCaoDate(s: string): string | null;
|
|
3
|
+
export declare function parseCaoTime(s: string): string | null;
|
|
4
|
+
export declare function parseCaoGdpTable(html: string): ReleaseEvent[];
|
|
5
|
+
export declare const caoAdapter: ReleaseAdapter;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// 内閣府(経済社会総合研究所)アダプタ。
|
|
2
|
+
// 「公表予定」ページの先頭テーブル「四半期別GDP速報」を HTML パースする。
|
|
3
|
+
// https://www.esri.cao.go.jp/jp/sna/kouhyou/kouhyou_top.html
|
|
4
|
+
// テーブル構造(安定・小サイズ 12KB):
|
|
5
|
+
// <tr><td>2026年1-3月期(1次速報)</td><td>2026(令和8)年5月19日(火)</td><td>8時50分</td></tr>
|
|
6
|
+
// 依存追加を避けるため正規表現ベース(geopolitical-pulse の parseRss と同方針)。
|
|
7
|
+
import { withCache, DEFAULT_CACHE_TTL_MS } from "../cache.js";
|
|
8
|
+
import { RELEASE_PULSE_UA, RELEASE_PULSE_FETCH_TIMEOUT_MS } from "../util.js";
|
|
9
|
+
const CAO_URL = "https://www.esri.cao.go.jp/jp/sna/kouhyou/kouhyou_top.html";
|
|
10
|
+
// "2026(令和8)年5月19日(火)" → "2026-05-19"。和暦括弧・曜日は無視。
|
|
11
|
+
// "未定" / "2026年12月中旬以降" など precise でないものは null。
|
|
12
|
+
export function parseCaoDate(s) {
|
|
13
|
+
const m = s.match(/(\d{4})(?:([^)]*))?年(\d{1,2})月(\d{1,2})日/);
|
|
14
|
+
if (!m)
|
|
15
|
+
return null;
|
|
16
|
+
const [, y, mo, d] = m;
|
|
17
|
+
return `${y}-${mo.padStart(2, "0")}-${d.padStart(2, "0")}`;
|
|
18
|
+
}
|
|
19
|
+
// "8時50分" → "08:50"。"-" 等は null。
|
|
20
|
+
export function parseCaoTime(s) {
|
|
21
|
+
const m = s.match(/(\d{1,2})時(\d{1,2})分/);
|
|
22
|
+
if (!m)
|
|
23
|
+
return null;
|
|
24
|
+
return `${m[1].padStart(2, "0")}:${m[2].padStart(2, "0")}`;
|
|
25
|
+
}
|
|
26
|
+
// 内閣府 公表予定ページ HTML から「四半期別GDP速報」テーブルの行を抽出する。
|
|
27
|
+
// 見出し「四半期別GDP速報」直後の最初の <table>...</table> のみ対象。
|
|
28
|
+
export function parseCaoGdpTable(html) {
|
|
29
|
+
const tableMatch = html.match(/四半期別GDP速報[\s\S]*?<table[^>]*>([\s\S]*?)<\/table>/);
|
|
30
|
+
if (!tableMatch)
|
|
31
|
+
return [];
|
|
32
|
+
const tableInner = tableMatch[1];
|
|
33
|
+
const out = [];
|
|
34
|
+
const rowRe = /<tr>([\s\S]*?)<\/tr>/g;
|
|
35
|
+
let rm;
|
|
36
|
+
while ((rm = rowRe.exec(tableInner)) !== null) {
|
|
37
|
+
const cells = [...rm[1].matchAll(/<td[^>]*>([\s\S]*?)<\/td>/g)].map((c) => c[1].replace(/<[^>]+>/g, "").replace(/\s+/g, "").trim());
|
|
38
|
+
// thead 行は <th> のみで cells が空 → スキップ
|
|
39
|
+
if (cells.length < 2)
|
|
40
|
+
continue;
|
|
41
|
+
const [period, dateStr, timeStr] = cells;
|
|
42
|
+
const date = parseCaoDate(dateStr ?? "");
|
|
43
|
+
if (!date)
|
|
44
|
+
continue; // 「未定」「中旬以降」等はスキップ
|
|
45
|
+
const time = parseCaoTime(timeStr ?? "");
|
|
46
|
+
out.push({
|
|
47
|
+
date,
|
|
48
|
+
...(time ? { time } : {}),
|
|
49
|
+
country: "JP",
|
|
50
|
+
name: `日 GDP速報 ${period}`,
|
|
51
|
+
source: "内閣府",
|
|
52
|
+
sourceUrl: CAO_URL,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
export const caoAdapter = {
|
|
58
|
+
key: "cao",
|
|
59
|
+
label: "内閣府(四半期別 GDP 速報)",
|
|
60
|
+
fetchEvents: () => withCache("cao", DEFAULT_CACHE_TTL_MS, async () => {
|
|
61
|
+
const res = await fetch(CAO_URL, {
|
|
62
|
+
headers: { "User-Agent": RELEASE_PULSE_UA, Accept: "text/html" },
|
|
63
|
+
signal: AbortSignal.timeout(RELEASE_PULSE_FETCH_TIMEOUT_MS),
|
|
64
|
+
redirect: "follow",
|
|
65
|
+
});
|
|
66
|
+
if (!res.ok)
|
|
67
|
+
throw new Error(`HTTP ${res.status}`);
|
|
68
|
+
const html = await res.text();
|
|
69
|
+
return parseCaoGdpTable(html);
|
|
70
|
+
}),
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=cao.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cao.js","sourceRoot":"","sources":["../../../../src/lib/economic-release-pulse/adapters/cao.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// アダプタ単位の in-memory TTL キャッシュ。
|
|
2
|
+
// 経済指標カレンダーは日内でほぼ変わらないため既定 6h。
|
|
3
|
+
// MCP プロセス存続中のみ有効(プロセス再起動でクリア)。
|
|
4
|
+
const store = new Map();
|
|
5
|
+
// 既定 TTL(6 時間)。
|
|
6
|
+
export const DEFAULT_CACHE_TTL_MS = 6 * 3600 * 1000;
|
|
7
|
+
// key で引き、未キャッシュ or 期限切れなら fn() を実行して格納する。
|
|
8
|
+
// fn() が throw した場合はキャッシュせず素通しで throw(失敗を握り込まない)。
|
|
9
|
+
export async function withCache(key, ttlMs, fn) {
|
|
10
|
+
const hit = store.get(key);
|
|
11
|
+
if (hit && hit.expiresAt > Date.now()) {
|
|
12
|
+
return hit.value;
|
|
13
|
+
}
|
|
14
|
+
const value = await fn();
|
|
15
|
+
store.set(key, { value, expiresAt: Date.now() + ttlMs });
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
// テスト用: キャッシュを全消去する。
|
|
19
|
+
export function clearCache() {
|
|
20
|
+
store.clear();
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/lib/economic-release-pulse/cache.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,+BAA+B;AAC/B,gCAAgC;AAIhC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;AAEvC,gBAAgB;AAChB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpD,2CAA2C;AAC3C,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,KAAa,EACb,EAAoB;IAEpB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,KAAU,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,EAAE,EAAE,CAAC;IACzB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACzD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qBAAqB;AACrB,MAAM,UAAU,UAAU;IACxB,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AdapterResult, ReleaseCountry, ReleaseEvent } from "./types.js";
|
|
2
|
+
export type ReleaseRange = "today" | "week";
|
|
3
|
+
export type EconomicReleasePulse = {
|
|
4
|
+
fetchedAt: string;
|
|
5
|
+
today: string;
|
|
6
|
+
range: ReleaseRange;
|
|
7
|
+
sources: AdapterResult[];
|
|
8
|
+
events: ReleaseEvent[];
|
|
9
|
+
};
|
|
10
|
+
export declare function fetchEconomicReleasePulse(opts: {
|
|
11
|
+
range: ReleaseRange;
|
|
12
|
+
country?: ReleaseCountry;
|
|
13
|
+
now?: Date;
|
|
14
|
+
}): Promise<EconomicReleasePulse>;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// 経済指標リリース予定アグリゲータ。
|
|
2
|
+
// 全アダプタを並列実行し、エラーを隔離(部分成功)、国/期間フィルタ・dedupe・ソートして返す。
|
|
3
|
+
// geopolitical-pulse.ts の fetchPulse と同じ構造。
|
|
4
|
+
import { jstToday, jstDatePlus } from "./util.js";
|
|
5
|
+
import { beaAdapter } from "./adapters/bea.js";
|
|
6
|
+
import { caoAdapter } from "./adapters/cao.js";
|
|
7
|
+
import { bojAdapter } from "./adapters/boj.js";
|
|
8
|
+
// 登録アダプタ。新ソース追加時はここに 1 行足す。
|
|
9
|
+
// 次サイクル候補: NY 連銀(Empire State)、FRB(鉱工業生産・FOMC)、BLS、総務省統計局。
|
|
10
|
+
const ADAPTERS = [beaAdapter, caoAdapter, bojAdapter];
|
|
11
|
+
// date(YYYY-MM-DD) が [from, to] の範囲内か(文字列比較で OK)。
|
|
12
|
+
function inRange(date, from, to) {
|
|
13
|
+
return date >= from && date <= to;
|
|
14
|
+
}
|
|
15
|
+
// 全アダプタ並列実行 → 国/期間フィルタ → dedupe → 日時ソート。
|
|
16
|
+
export async function fetchEconomicReleasePulse(opts) {
|
|
17
|
+
const now = opts.now ?? new Date();
|
|
18
|
+
const today = jstToday(now);
|
|
19
|
+
const to = opts.range === "week" ? jstDatePlus(6, now) : today;
|
|
20
|
+
const settled = await Promise.all(ADAPTERS.map(async (a) => {
|
|
21
|
+
const t0 = Date.now();
|
|
22
|
+
try {
|
|
23
|
+
const events = await a.fetchEvents();
|
|
24
|
+
return {
|
|
25
|
+
result: {
|
|
26
|
+
key: a.key,
|
|
27
|
+
label: a.label,
|
|
28
|
+
ok: true,
|
|
29
|
+
count: events.length,
|
|
30
|
+
elapsedMs: Date.now() - t0,
|
|
31
|
+
},
|
|
32
|
+
events,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
const msg = e instanceof Error ? e.message : "fetch failed";
|
|
37
|
+
return {
|
|
38
|
+
result: {
|
|
39
|
+
key: a.key,
|
|
40
|
+
label: a.label,
|
|
41
|
+
ok: false,
|
|
42
|
+
count: 0,
|
|
43
|
+
error: msg,
|
|
44
|
+
elapsedMs: Date.now() - t0,
|
|
45
|
+
},
|
|
46
|
+
events: [],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}));
|
|
50
|
+
let events = settled.flatMap((s) => s.events);
|
|
51
|
+
if (opts.country) {
|
|
52
|
+
events = events.filter((e) => e.country === opts.country);
|
|
53
|
+
}
|
|
54
|
+
events = events.filter((e) => inRange(e.date, today, to));
|
|
55
|
+
// dedupe(date|time|country|name)。BEA は同一日が重複することがあるため必須。
|
|
56
|
+
const seen = new Set();
|
|
57
|
+
const deduped = [];
|
|
58
|
+
for (const e of events) {
|
|
59
|
+
const k = `${e.date}|${e.time ?? ""}|${e.country}|${e.name}`;
|
|
60
|
+
if (seen.has(k))
|
|
61
|
+
continue;
|
|
62
|
+
seen.add(k);
|
|
63
|
+
deduped.push(e);
|
|
64
|
+
}
|
|
65
|
+
deduped.sort((a, b) => (a.date + (a.time ?? "99:99")).localeCompare(b.date + (b.time ?? "99:99")));
|
|
66
|
+
return {
|
|
67
|
+
fetchedAt: new Date().toISOString(),
|
|
68
|
+
today,
|
|
69
|
+
range: opts.range,
|
|
70
|
+
sources: settled.map((s) => s.result),
|
|
71
|
+
events: deduped,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=pulse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pulse.js","sourceRoot":"","sources":["../../../src/lib/economic-release-pulse/pulse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type ReleaseCountry = "US" | "JP" | "EU" | "GB" | "CN";
|
|
2
|
+
export type ReleaseEvent = {
|
|
3
|
+
date: string;
|
|
4
|
+
time?: string;
|
|
5
|
+
country: ReleaseCountry;
|
|
6
|
+
name: string;
|
|
7
|
+
source: string;
|
|
8
|
+
sourceUrl: string;
|
|
9
|
+
};
|
|
10
|
+
export type AdapterResult = {
|
|
11
|
+
key: string;
|
|
12
|
+
label: string;
|
|
13
|
+
ok: boolean;
|
|
14
|
+
count: number;
|
|
15
|
+
error?: string;
|
|
16
|
+
elapsedMs: number;
|
|
17
|
+
};
|
|
18
|
+
export type ReleaseAdapter = {
|
|
19
|
+
key: string;
|
|
20
|
+
label: string;
|
|
21
|
+
fetchEvents: () => Promise<ReleaseEvent[]>;
|
|
22
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// 経済指標リリース予定のリアルタイム取得(v0.11.0 新設)の共通型。
|
|
2
|
+
//
|
|
3
|
+
// 背景: get_economic_events_today は手動キュレーション(★★★ 中心・半年 1 回更新)で、
|
|
4
|
+
// NY 連銀製造業や鉱工業生産など収録外の指標を「取りこぼす」網羅性の穴があった。
|
|
5
|
+
// 本モジュールは公式機関のリリースカレンダーをアダプタ経由で実取得し、
|
|
6
|
+
// 既存ツールを「補完」する(置き換えではない)。
|
|
7
|
+
//
|
|
8
|
+
// 設計思想は geopolitical-pulse.ts を踏襲: 各ソースは独立、失敗しても全体は止めず
|
|
9
|
+
// AdapterResult[] で部分成功を呼び出し側に伝える。
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/economic-release-pulse/types.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,8DAA8D;AAC9D,2CAA2C;AAC3C,qCAAqC;AACrC,0BAA0B;AAC1B,EAAE;AACF,uDAAuD;AACvD,mCAAmC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function jstParts(epochMs: number): {
|
|
2
|
+
date: string;
|
|
3
|
+
time: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function jstToday(now?: Date): string;
|
|
6
|
+
export declare function jstDatePlus(daysAhead: number, now?: Date): string;
|
|
7
|
+
export declare const RELEASE_PULSE_UA = "Mozilla/5.0 (compatible; lit-forge-mcp/0.11; +https://github.com/noblabs/lit-forge-mcp)";
|
|
8
|
+
export declare const RELEASE_PULSE_FETCH_TIMEOUT_MS = 12000;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// JST 関連ヘルパー。経済指標の日付は全て JST に正規化して扱う。
|
|
2
|
+
// UNIX epoch(ms) を JST の { date: "YYYY-MM-DD", time: "HH:MM" } に分解する。
|
|
3
|
+
// UTC に +9h して toISOString の UTC 表現を JST 壁時計として使う手法。
|
|
4
|
+
export function jstParts(epochMs) {
|
|
5
|
+
const jst = new Date(epochMs + 9 * 3600 * 1000);
|
|
6
|
+
const iso = jst.toISOString();
|
|
7
|
+
return { date: iso.slice(0, 10), time: iso.slice(11, 16) };
|
|
8
|
+
}
|
|
9
|
+
// JST の本日(YYYY-MM-DD)。
|
|
10
|
+
export function jstToday(now = new Date()) {
|
|
11
|
+
return jstParts(now.getTime()).date;
|
|
12
|
+
}
|
|
13
|
+
// JST で now から daysAhead 日後の YYYY-MM-DD。
|
|
14
|
+
export function jstDatePlus(daysAhead, now = new Date()) {
|
|
15
|
+
return jstParts(now.getTime() + daysAhead * 24 * 3600 * 1000).date;
|
|
16
|
+
}
|
|
17
|
+
// 共通 User-Agent。一部の公式サイトは無 UA / bot UA を 403 で弾くため
|
|
18
|
+
// ブラウザ系 UA を送る(geopolitical-pulse と同方針)。
|
|
19
|
+
export const RELEASE_PULSE_UA = "Mozilla/5.0 (compatible; lit-forge-mcp/0.11; +https://github.com/noblabs/lit-forge-mcp)";
|
|
20
|
+
export const RELEASE_PULSE_FETCH_TIMEOUT_MS = 12_000;
|
|
21
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/lib/economic-release-pulse/util.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,sEAAsE;AACtE,qDAAqD;AACrD,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,QAAQ,CAAC,MAAY,IAAI,IAAI,EAAE;IAC7C,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,MAAY,IAAI,IAAI,EAAE;IACnE,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED,mDAAmD;AACnD,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAC3B,yFAAyF,CAAC;AAE5F,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// 経済指標リリース予定 リアルタイム取得ツール(v0.11.0 新設)。
|
|
2
|
+
//
|
|
3
|
+
// 役割分担:
|
|
4
|
+
// - 本ツール: 公式機関のリリースカレンダーを実取得し、収録漏れの無い「網羅性」を担保
|
|
5
|
+
// - get_economic_events_today: 手動キュレーション(★★★ 中心・半年 1 回更新・verify 済み)
|
|
6
|
+
// 両者は補完関係。市況サマリーでは両方を併用するのが望ましい。
|
|
7
|
+
//
|
|
8
|
+
// 現行カバー範囲(v0.11.0):
|
|
9
|
+
// - BEA(米): GDP / 個人所得・支出(PCE)/ 貿易収支 / 企業収益 — 公式 JSON
|
|
10
|
+
// - 内閣府(日): 四半期別 GDP 速報 — 公式 HTML
|
|
11
|
+
// - 日銀(日): 金融政策決定会合 / 主な意見 / 短観 / 議事要旨 — lit-forge 収録データ再利用
|
|
12
|
+
// 次サイクル予定: NY 連銀(Empire State)/ FRB(鉱工業生産・FOMC)/ BLS / 総務省統計局。
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
import { fetchEconomicReleasePulse, } from "../lib/economic-release-pulse/pulse.js";
|
|
15
|
+
import { jsonReply } from "./types.js";
|
|
16
|
+
const inputSchema = {
|
|
17
|
+
range: z
|
|
18
|
+
.enum(["today", "week"])
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("today=本日のみ / week=今日含む 7 日間。既定 today"),
|
|
21
|
+
country: z
|
|
22
|
+
.enum(["US", "JP", "EU", "GB", "CN"])
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("国コード絞り込み: US=米国 / JP=日本 / EU / GB / CN。未指定で全件。" +
|
|
25
|
+
"現行カバーは US(BEA)と JP(内閣府・日銀)のみ"),
|
|
26
|
+
};
|
|
27
|
+
export const getEconomicReleasePulseTool = {
|
|
28
|
+
name: "get_economic_release_pulse",
|
|
29
|
+
title: "経済指標リリース予定(公式機関カレンダー リアルタイム取得)",
|
|
30
|
+
description: "**公式機関のリリースカレンダーを実取得**して、当日〜週内の経済指標発表予定を返すツール。" +
|
|
31
|
+
"BEA(米経済分析局)・内閣府・日銀の公式日程を並列取得し、国・期間でフィルタして返します。" +
|
|
32
|
+
"【get_economic_events_today との違い】" +
|
|
33
|
+
"`get_economic_events_today` は運営者が一次ソースで裏取りした手動キュレーション(★★★ 中心、半年 1 回更新)で、" +
|
|
34
|
+
"収録対象を絞っているため NY 連銀製造業や鉱工業生産などを取りこぼす『網羅性の穴』があります。" +
|
|
35
|
+
"本ツールは公式カレンダーを実取得することでその穴を埋める**補完ツール**です。市況サマリーでは両方を併用してください。" +
|
|
36
|
+
"【現行カバー範囲(v0.11.0)】" +
|
|
37
|
+
"BEA(米 GDP / 個人所得・支出〔PCE〕/ 貿易収支 / 企業収益)、内閣府(四半期別 GDP 速報)、" +
|
|
38
|
+
"日銀(金融政策決定会合 / 主な意見 / 短観 / 議事要旨)。" +
|
|
39
|
+
"NY 連銀(Empire State)・FRB(鉱工業生産・FOMC)・BLS(雇用統計・CPI・PPI)・総務省統計局(日 CPI)は次サイクルで追加予定で、現時点では本ツールに含まれません。" +
|
|
40
|
+
"【利用上の注意】" +
|
|
41
|
+
"アダプタ単位の取得失敗は sources 配列に error として記録され、他アダプタの結果は返されます(部分成功)。" +
|
|
42
|
+
"結果は 6 時間キャッシュされます。各イベントには一次ソース URL(sourceUrl)が付きます。",
|
|
43
|
+
inputSchema,
|
|
44
|
+
handler: async ({ range, country }) => {
|
|
45
|
+
const effectiveRange = (range ?? "today");
|
|
46
|
+
const result = await fetchEconomicReleasePulse({
|
|
47
|
+
range: effectiveRange,
|
|
48
|
+
country: country,
|
|
49
|
+
});
|
|
50
|
+
return jsonReply({
|
|
51
|
+
today: result.today,
|
|
52
|
+
range: result.range,
|
|
53
|
+
fetchedAt: result.fetchedAt,
|
|
54
|
+
count: result.events.length,
|
|
55
|
+
events: result.events,
|
|
56
|
+
sources: result.sources,
|
|
57
|
+
note: "公式機関のリリースカレンダーを実取得した結果です。手動キュレーションの " +
|
|
58
|
+
"`get_economic_events_today` を補完します(網羅性担保が目的)。" +
|
|
59
|
+
"アダプタ単位の失敗は sources[].error を参照してください。",
|
|
60
|
+
});
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=get-economic-release-pulse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-economic-release-pulse.js","sourceRoot":"","sources":["../../src/tools/get-economic-release-pulse.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,QAAQ;AACR,gDAAgD;AAChD,sEAAsE;AACtE,mCAAmC;AACnC,EAAE;AACF,oBAAoB;AACpB,wDAAwD;AACxD,oCAAoC;AACpC,8DAA8D;AAC9D,+DAA+D;AAE/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,yBAAyB,GAE1B,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACvB,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,OAAO,EAAE,CAAC;SACP,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACpC,QAAQ,EAAE;SACV,QAAQ,CACP,gDAAgD;QAC9C,8BAA8B,CACjC;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAiB;IACvD,IAAI,EAAE,4BAA4B;IAClC,KAAK,EAAE,gCAAgC;IACvC,WAAW,EACT,gDAAgD;QAChD,gDAAgD;QAChD,kCAAkC;QAClC,0EAA0E;QAC1E,kDAAkD;QAClD,8DAA8D;QAC9D,oBAAoB;QACpB,0DAA0D;QAC1D,kCAAkC;QAClC,mGAAmG;QACnG,UAAU;QACV,8DAA8D;QAC9D,qDAAqD;IACvD,WAAW;IACX,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,OAAO,CAAiB,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC;YAC7C,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,OAAqC;SAC/C,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EACF,sCAAsC;gBACtC,+CAA+C;gBAC/C,uCAAuC;SAC1C,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -26,6 +26,7 @@ import { getDividendHistoryTool } from "./get-dividend-history.js";
|
|
|
26
26
|
import { getAnalystConsensusTool } from "./get-analyst-consensus.js";
|
|
27
27
|
import { getGeopoliticalCalendarTool } from "./get-geopolitical-calendar.js";
|
|
28
28
|
import { getGeopoliticalPulseTool } from "./get-geopolitical-pulse.js";
|
|
29
|
+
import { getEconomicReleasePulseTool } from "./get-economic-release-pulse.js";
|
|
29
30
|
export const tools = [
|
|
30
31
|
simulateNisaTool,
|
|
31
32
|
planRetirementTool,
|
|
@@ -46,5 +47,7 @@ export const tools = [
|
|
|
46
47
|
// v0.9.0 新規 / リネーム: 地政学カレンダー(旧 get_geopolitical_events)+ リアルタイム速報
|
|
47
48
|
getGeopoliticalCalendarTool,
|
|
48
49
|
getGeopoliticalPulseTool,
|
|
50
|
+
// v0.11.0 新規: 経済指標リリース予定の公式機関カレンダー リアルタイム取得(手動キュレーションの網羅性補完)
|
|
51
|
+
getEconomicReleasePulseTool,
|
|
49
52
|
];
|
|
50
53
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,sDAAsD;AACtD,6CAA6C;AAC7C,8DAA8D;AAC9D,0DAA0D;AAC1D,yDAAyD;AACzD,kBAAkB;AAClB,kEAAkE;AAClE,mFAAmF;AACnF,+HAA+H;AAC/H,0CAA0C;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,sDAAsD;AACtD,6CAA6C;AAC7C,8DAA8D;AAC9D,0DAA0D;AAC1D,yDAAyD;AACzD,kBAAkB;AAClB,kEAAkE;AAClE,mFAAmF;AACnF,+HAA+H;AAC/H,0CAA0C;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAE9E,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,4BAA4B;IAC5B,6BAA6B;IAC7B,qBAAqB;IACrB,0BAA0B;IAC1B,YAAY;IACZ,eAAe;IACf,wBAAwB;IACxB,yBAAyB;IACzB,kBAAkB;IAClB,qBAAqB;IACrB,oBAAoB;IACpB,eAAe;IACf,sBAAsB;IACtB,uBAAuB;IACvB,kEAAkE;IAClE,2BAA2B;IAC3B,wBAAwB;IACxB,6DAA6D;IAC7D,2BAA2B;CAC5B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lit-forge-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"mcpName": "io.github.noblabs/lit-forge-mcp",
|
|
5
5
|
"description": "MCP server for personal asset planning + daily market check: NISA / iDeCo simulation, retirement planning, market snapshot (USD/JPY, Nikkei, S&P 500, etc.), dividend history, analyst consensus, economic events.",
|
|
6
6
|
"type": "module",
|