paput-mcp 4.2.29 → 4.2.41

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 (36) hide show
  1. package/dist/cli/rules/paput-00-completion-checklist.md +1 -0
  2. package/dist/cli/rules/paput-zz-self-verify.md +2 -1
  3. package/dist/cli/setup-ai.js +8 -2
  4. package/dist/cli/setup-ai.js.map +1 -1
  5. package/dist/handlers/add-knowledge-candidates/handler.js +27 -8
  6. package/dist/handlers/add-knowledge-candidates/handler.js.map +1 -1
  7. package/dist/handlers/add-knowledge-candidates/tool.js +15 -7
  8. package/dist/handlers/add-knowledge-candidates/tool.js.map +1 -1
  9. package/dist/handlers/create-memos/tool.js +5 -4
  10. package/dist/handlers/create-memos/tool.js.map +1 -1
  11. package/dist/handlers/save-pending-candidate/tool.js +3 -2
  12. package/dist/handlers/save-pending-candidate/tool.js.map +1 -1
  13. package/dist/handlers/update-memo/tool.js +1 -1
  14. package/dist/handlers/update-memo/tool.js.map +1 -1
  15. package/dist/handlers/update-pending-candidate/tool.js +7 -2
  16. package/dist/handlers/update-pending-candidate/tool.js.map +1 -1
  17. package/dist/http.js +10 -0
  18. package/dist/http.js.map +1 -1
  19. package/dist/plugin/skills/analyze-discard-policy/SKILL.md +1 -0
  20. package/dist/plugin/skills/capture/SKILL.md +18 -1
  21. package/dist/plugin/skills/dashboard-analysis/SKILL.md +1 -0
  22. package/dist/plugin/skills/harvest/SKILL.md +297 -5
  23. package/dist/plugin/skills/interview-qa/SKILL.md +1 -0
  24. package/dist/plugin/skills/principle-synthesizer/SKILL.md +1 -0
  25. package/dist/plugin/skills/project-document/SKILL.md +3 -2
  26. package/dist/plugin/skills/project-episodes/SKILL.md +1 -0
  27. package/dist/plugin/skills/save/SKILL.md +1 -0
  28. package/dist/plugin/skills/self-pr-draft/SKILL.md +1 -0
  29. package/dist/schemas/tool-input.js +55 -13
  30. package/dist/schemas/tool-input.js.map +1 -1
  31. package/dist/services/api/knowledge-candidate.js.map +1 -1
  32. package/dist/services/api/onboarding.js +19 -0
  33. package/dist/services/api/onboarding.js.map +1 -0
  34. package/dist/services/onboarding-nudge.js +85 -0
  35. package/dist/services/onboarding-nudge.js.map +1 -0
  36. package/package.json +1 -1
@@ -0,0 +1,19 @@
1
+ const ONBOARDING_STATUS_TIMEOUT_MS = 3_000;
2
+ export async function getOnboardingStatus(client) {
3
+ const controller = new AbortController();
4
+ const timeout = setTimeout(() => controller.abort(), ONBOARDING_STATUS_TIMEOUT_MS);
5
+ let status;
6
+ try {
7
+ status = await client.get('/api/v1/mcp/onboarding-status', { signal: controller.signal });
8
+ }
9
+ finally {
10
+ clearTimeout(timeout);
11
+ }
12
+ if (!status ||
13
+ typeof status.memo_count !== 'number' ||
14
+ typeof status.has_skill_sheet !== 'boolean') {
15
+ throw new Error('Invalid onboarding status response format');
16
+ }
17
+ return status;
18
+ }
19
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../../src/services/api/onboarding.ts"],"names":[],"mappings":"AAGA,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,4BAA4B,CAC7B,CAAC;IACF,IAAI,MAAwB,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CACvB,+BAA+B,EAC/B,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAC9B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,IACE,CAAC,MAAM;QACP,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;QACrC,OAAO,MAAM,CAAC,eAAe,KAAK,SAAS,EAC3C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { getOnboardingStatus } from './api/index.js';
2
+ const GRADUATED_TTL_MS = 24 * 60 * 60 * 1000;
3
+ const PENDING_TTL_MS = 10 * 60 * 1000;
4
+ const NUDGE_COOLDOWN_MS = 30 * 60 * 1000;
5
+ // エントリが最後に更新されてからこの期間再アクセスがなければ、スイープで削除する
6
+ // (トークンローテーション後の古いトークンや卒業済みユーザーが二度と来ないケースで無限増加しないように)。
7
+ // 起こりうる最大 TTL(GRADUATED_TTL_MS)を下限に設定し、アクティブなエントリは巻き込まない。
8
+ const STALE_ENTRY_TTL_MS = GRADUATED_TTL_MS;
9
+ const SWEEP_INTERVAL_MS = 60 * 60 * 1000;
10
+ // キャッシュインスタンスごとのスイープ実施時刻。WeakMap にすることでキャッシュ自体の
11
+ // ガベージコレクションを妨げず、複数キャッシュインスタンス(テスト等)を混同しない。
12
+ const lastSweepAt = new WeakMap();
13
+ export function createOnboardingNudgeCache() {
14
+ return new Map();
15
+ }
16
+ export function invalidateOnboardingNudgeCache(cache, accessToken) {
17
+ const entry = cache.get(accessToken);
18
+ if (!entry)
19
+ return;
20
+ // エントリ全体を削除すると lastNudgeAt も失われ、書き込み直後にクールダウンが
21
+ // リセットされて毎回ナッジが再表示されてしまう。status だけを次回アクセス時に
22
+ // 再フェッチさせ、クールダウンの起点は保つ。
23
+ entry.forceRefetch = true;
24
+ }
25
+ function pruneStaleEntries(cache, now) {
26
+ const previousSweep = lastSweepAt.get(cache);
27
+ if (previousSweep !== undefined && now - previousSweep < SWEEP_INTERVAL_MS) {
28
+ return;
29
+ }
30
+ lastSweepAt.set(cache, now);
31
+ for (const [key, entry] of cache) {
32
+ if (now - entry.fetchedAt > STALE_ENTRY_TTL_MS) {
33
+ cache.delete(key);
34
+ }
35
+ }
36
+ }
37
+ export async function getOnboardingNudgeText(cache, accessToken, apiClient) {
38
+ const now = Date.now();
39
+ pruneStaleEntries(cache, now);
40
+ let entry = cache.get(accessToken);
41
+ if (!entry || entry.forceRefetch || isExpired(entry, now)) {
42
+ let status;
43
+ try {
44
+ status = await getOnboardingStatus(apiClient);
45
+ }
46
+ catch {
47
+ // status 取得失敗はナッジなしで通常応答を維持する(本処理を壊さない)。
48
+ return null;
49
+ }
50
+ entry = { status, fetchedAt: now, lastNudgeAt: entry?.lastNudgeAt };
51
+ cache.set(accessToken, entry);
52
+ }
53
+ if (isGraduated(entry.status)) {
54
+ return null;
55
+ }
56
+ if (entry.lastNudgeAt !== undefined && now - entry.lastNudgeAt < NUDGE_COOLDOWN_MS) {
57
+ return null;
58
+ }
59
+ entry.lastNudgeAt = now;
60
+ return buildNudgeText(entry.status);
61
+ }
62
+ function isGraduated(status) {
63
+ return status.memo_count > 0 && status.has_skill_sheet;
64
+ }
65
+ function isExpired(entry, now) {
66
+ const ttl = isGraduated(entry.status) ? GRADUATED_TTL_MS : PENDING_TTL_MS;
67
+ return now - entry.fetchedAt > ttl;
68
+ }
69
+ function buildNudgeText(status) {
70
+ if (status.memo_count === 0 && !status.has_skill_sheet) {
71
+ return ('This PaPut account has no memos and no skill sheet yet. You can help ' +
72
+ 'the user set both up: capture reusable knowledge as memos, and build ' +
73
+ 'a skill sheet outline (basic info, skills, projects). In Claude Code, ' +
74
+ 'the /paput:onboarding skill can run this setup end to end.');
75
+ }
76
+ if (!status.has_skill_sheet) {
77
+ return ('This PaPut account has memos but no skill sheet yet. You can help the ' +
78
+ 'user build a skill sheet outline (basic info, skills, projects). In ' +
79
+ 'Claude Code, the /paput:onboarding skill can help with this.');
80
+ }
81
+ return ('This PaPut account has a skill sheet but no memos yet. You can help the ' +
82
+ 'user capture reusable knowledge as memos. In Claude Code, the ' +
83
+ '/paput:onboarding skill can help with this.');
84
+ }
85
+ //# sourceMappingURL=onboarding-nudge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-nudge.js","sourceRoot":"","sources":["../../src/services/onboarding-nudge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "paput-mcp",
3
- "version": "4.2.29",
3
+ "version": "4.2.41",
4
4
  "description": "PaPut MCP Server",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",