paput-mcp 2.0.3 → 2.2.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/README.md +99 -131
- package/dist/cli/index.js +31 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/install-codex-skill.js +58 -0
- package/dist/cli/install-codex-skill.js.map +1 -0
- package/dist/cli/setup-ai.js +260 -0
- package/dist/cli/setup-ai.js.map +1 -0
- package/dist/handlers/add-knowledge-candidates/handler.js +68 -0
- package/dist/handlers/add-knowledge-candidates/handler.js.map +1 -0
- package/dist/handlers/add-knowledge-candidates/index.js +3 -0
- package/dist/handlers/add-knowledge-candidates/index.js.map +1 -0
- package/dist/handlers/add-knowledge-candidates/tool.js +36 -0
- package/dist/handlers/add-knowledge-candidates/tool.js.map +1 -0
- package/dist/handlers/cache-status/handler.js +22 -0
- package/dist/handlers/cache-status/handler.js.map +1 -0
- package/dist/handlers/cache-status/index.js +3 -0
- package/dist/handlers/cache-status/index.js.map +1 -0
- package/dist/handlers/cache-status/tool.js +13 -0
- package/dist/handlers/cache-status/tool.js.map +1 -0
- package/dist/handlers/discard-pending-candidate/handler.js +36 -0
- package/dist/handlers/discard-pending-candidate/handler.js.map +1 -0
- package/dist/handlers/discard-pending-candidate/index.js +3 -0
- package/dist/handlers/discard-pending-candidate/index.js.map +1 -0
- package/dist/handlers/discard-pending-candidate/tool.js +17 -0
- package/dist/handlers/discard-pending-candidate/tool.js.map +1 -0
- package/dist/handlers/get-session-transcript/handler.js +42 -0
- package/dist/handlers/get-session-transcript/handler.js.map +1 -0
- package/dist/handlers/get-session-transcript/index.js +3 -0
- package/dist/handlers/get-session-transcript/index.js.map +1 -0
- package/dist/handlers/get-session-transcript/tool.js +28 -0
- package/dist/handlers/get-session-transcript/tool.js.map +1 -0
- package/dist/handlers/index.js +8 -0
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/list-pending-candidates/handler.js +19 -0
- package/dist/handlers/list-pending-candidates/handler.js.map +1 -0
- package/dist/handlers/list-pending-candidates/index.js +3 -0
- package/dist/handlers/list-pending-candidates/index.js.map +1 -0
- package/dist/handlers/list-pending-candidates/tool.js +18 -0
- package/dist/handlers/list-pending-candidates/tool.js.map +1 -0
- package/dist/handlers/save-pending-candidate/handler.js +80 -0
- package/dist/handlers/save-pending-candidate/handler.js.map +1 -0
- package/dist/handlers/save-pending-candidate/index.js +3 -0
- package/dist/handlers/save-pending-candidate/index.js.map +1 -0
- package/dist/handlers/save-pending-candidate/tool.js +20 -0
- package/dist/handlers/save-pending-candidate/tool.js.map +1 -0
- package/dist/handlers/scan-sessions/handler.js +26 -0
- package/dist/handlers/scan-sessions/handler.js.map +1 -0
- package/dist/handlers/scan-sessions/index.js +3 -0
- package/dist/handlers/scan-sessions/index.js.map +1 -0
- package/dist/handlers/scan-sessions/tool.js +27 -0
- package/dist/handlers/scan-sessions/tool.js.map +1 -0
- package/dist/handlers/sync-remote-memos/handler.js +42 -0
- package/dist/handlers/sync-remote-memos/handler.js.map +1 -0
- package/dist/handlers/sync-remote-memos/index.js +3 -0
- package/dist/handlers/sync-remote-memos/index.js.map +1 -0
- package/dist/handlers/sync-remote-memos/tool.js +22 -0
- package/dist/handlers/sync-remote-memos/tool.js.map +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/services/local-cache/index.js +235 -0
- package/dist/services/local-cache/index.js.map +1 -0
- package/dist/services/session/index.js +124 -0
- package/dist/services/session/index.js.map +1 -0
- package/dist/tool.js +9 -1
- package/dist/tool.js.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/knowledge.js +2 -0
- package/dist/types/knowledge.js.map +1 -0
- package/package.json +2 -5
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { addKnowledgeCandidates } from '../../services/local-cache/index.js';
|
|
2
|
+
export async function handleAddKnowledgeCandidates(args, _apiClient) {
|
|
3
|
+
if (!args || typeof args.session_id !== 'string') {
|
|
4
|
+
return {
|
|
5
|
+
content: [{ type: 'text', text: 'session_id は必須です' }],
|
|
6
|
+
isError: true,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
if (args.source !== 'claude' && args.source !== 'codex') {
|
|
10
|
+
return {
|
|
11
|
+
content: [
|
|
12
|
+
{
|
|
13
|
+
type: 'text',
|
|
14
|
+
text: 'source は claude または codex を指定してください',
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
isError: true,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (!Array.isArray(args.candidates)) {
|
|
21
|
+
return {
|
|
22
|
+
content: [{ type: 'text', text: 'candidates は配列で指定してください' }],
|
|
23
|
+
isError: true,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const candidates = args.candidates.flatMap((candidate) => {
|
|
27
|
+
if (typeof candidate !== 'object' ||
|
|
28
|
+
candidate === null ||
|
|
29
|
+
!('title' in candidate) ||
|
|
30
|
+
!('body' in candidate) ||
|
|
31
|
+
typeof candidate.title !== 'string' ||
|
|
32
|
+
typeof candidate.body !== 'string') {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const rawCandidate = candidate;
|
|
36
|
+
const categories = Array.isArray(rawCandidate.categories)
|
|
37
|
+
? rawCandidate.categories.filter((category) => typeof category === 'string')
|
|
38
|
+
: [];
|
|
39
|
+
return [
|
|
40
|
+
{
|
|
41
|
+
title: candidate.title,
|
|
42
|
+
body: candidate.body,
|
|
43
|
+
categories,
|
|
44
|
+
confidence: typeof rawCandidate.confidence === 'number'
|
|
45
|
+
? rawCandidate.confidence
|
|
46
|
+
: undefined,
|
|
47
|
+
is_public: typeof rawCandidate.is_public === 'boolean'
|
|
48
|
+
? rawCandidate.is_public
|
|
49
|
+
: false,
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
});
|
|
53
|
+
const result = addKnowledgeCandidates(args.source, args.session_id, candidates);
|
|
54
|
+
return {
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
type: 'text',
|
|
58
|
+
text: JSON.stringify({
|
|
59
|
+
added: result.added.length,
|
|
60
|
+
duplicates: result.duplicates.length,
|
|
61
|
+
candidates: result.added,
|
|
62
|
+
duplicate_details: result.duplicates,
|
|
63
|
+
}, null, 2),
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/add-knowledge-candidates/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAM7E,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,IAAyC,EACzC,UAAqB;IAErB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;YACrD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACxD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,qCAAqC;iBAC5C;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC;YAC5D,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CACxC,CAAC,SAAS,EAA6B,EAAE;QACvC,IACE,OAAO,SAAS,KAAK,QAAQ;YAC7B,SAAS,KAAK,IAAI;YAClB,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC;YACvB,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;YACtB,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ;YACnC,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,EAClC,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,YAAY,GAAG,SAAoC,CAAC;QAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;YACvD,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAC5B,CAAC,QAAQ,EAAsB,EAAE,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAC/D;YACH,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL;gBACE,KAAK,EAAE,SAAS,CAAC,KAAK;gBACtB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,UAAU;gBACV,UAAU,EACR,OAAO,YAAY,CAAC,UAAU,KAAK,QAAQ;oBACzC,CAAC,CAAC,YAAY,CAAC,UAAU;oBACzB,CAAC,CAAC,SAAS;gBACf,SAAS,EACP,OAAO,YAAY,CAAC,SAAS,KAAK,SAAS;oBACzC,CAAC,CAAC,YAAY,CAAC,SAAS;oBACxB,CAAC,CAAC,KAAK;aACZ;SACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,sBAAsB,CACnC,IAAI,CAAC,MAAuB,EAC5B,IAAI,CAAC,UAAU,EACf,UAAU,CACX,CAAC;IAEF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;oBAC1B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;oBACpC,UAAU,EAAE,MAAM,CAAC,KAAK;oBACxB,iBAAiB,EAAE,MAAM,CAAC,UAAU;iBACrC,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/add-knowledge-candidates/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { handleAddKnowledgeCandidates } from './handler.js';
|
|
2
|
+
export const addKnowledgeCandidatesTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_add_knowledge_candidates',
|
|
5
|
+
description: 'AI が抽出した知見候補を pending に保存します',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
session_id: { type: 'string', description: '抽出元セッションID' },
|
|
10
|
+
source: {
|
|
11
|
+
type: 'string',
|
|
12
|
+
enum: ['claude', 'codex'],
|
|
13
|
+
description: '抽出元セッションソース',
|
|
14
|
+
},
|
|
15
|
+
candidates: {
|
|
16
|
+
type: 'array',
|
|
17
|
+
description: '保存する知見候補',
|
|
18
|
+
items: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
properties: {
|
|
21
|
+
title: { type: 'string' },
|
|
22
|
+
body: { type: 'string' },
|
|
23
|
+
categories: { type: 'array', items: { type: 'string' } },
|
|
24
|
+
confidence: { type: 'number' },
|
|
25
|
+
is_public: { type: 'boolean', default: false },
|
|
26
|
+
},
|
|
27
|
+
required: ['title', 'body'],
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
required: ['session_id', 'source', 'candidates'],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
handler: handleAddKnowledgeCandidates,
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/add-knowledge-candidates/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,CAAC,MAAM,0BAA0B,GAAgB;IACrD,UAAU,EAAE;QACV,IAAI,EAAE,gCAAgC;QACtC,WAAW,EAAE,8BAA8B;QAC3C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;gBACzD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;oBACzB,WAAW,EAAE,aAAa;iBAC3B;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,UAAU;oBACvB,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACzB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;4BACxD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BAC9B,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;yBAC/C;wBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;qBAC5B;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC;SACjD;KACF;IACD,OAAO,EAAE,4BAA4B;CACtC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getCacheDir, readCache } from '../../services/local-cache/index.js';
|
|
2
|
+
export async function handleCacheStatus(_args, _apiClient) {
|
|
3
|
+
const cache = readCache();
|
|
4
|
+
const pendingCount = cache.pending.filter((candidate) => candidate.status === 'pending').length;
|
|
5
|
+
return {
|
|
6
|
+
content: [
|
|
7
|
+
{
|
|
8
|
+
type: 'text',
|
|
9
|
+
text: JSON.stringify({
|
|
10
|
+
cache_dir: getCacheDir(),
|
|
11
|
+
memos: cache.memos.length,
|
|
12
|
+
pending: pendingCount,
|
|
13
|
+
saved_candidates: cache.pending.filter((candidate) => candidate.status === 'saved').length,
|
|
14
|
+
discarded_candidates: cache.pending.filter((candidate) => candidate.status === 'discarded').length,
|
|
15
|
+
processed_sessions: cache.sessions.length,
|
|
16
|
+
last_remote_sync_at: cache.config.last_remote_sync_at || null,
|
|
17
|
+
}, null, 2),
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/cache-status/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAA0C,EAC1C,UAAqB;IAErB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CACvC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAC9C,CAAC,MAAM,CAAC;IAET,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,SAAS,EAAE,WAAW,EAAE;oBACxB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;oBACzB,OAAO,EAAE,YAAY;oBACrB,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CACpC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,OAAO,CAC5C,CAAC,MAAM;oBACR,oBAAoB,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CACxC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,WAAW,CAChD,CAAC,MAAM;oBACR,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;oBACzC,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC,mBAAmB,IAAI,IAAI;iBAC9D,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/cache-status/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { handleCacheStatus } from './handler.js';
|
|
2
|
+
export const cacheStatusTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_cache_status',
|
|
5
|
+
description: 'PaPut のローカルキャッシュ状態を取得します',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {},
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
handler: handleCacheStatus,
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/cache-status/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,UAAU,EAAE;QACV,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD,OAAO,EAAE,iBAAiB;CAC3B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { updatePendingCandidate } from '../../services/local-cache/index.js';
|
|
2
|
+
export async function handleDiscardPendingCandidate(args, _apiClient) {
|
|
3
|
+
if (!args || typeof args.candidate_id !== 'string') {
|
|
4
|
+
return {
|
|
5
|
+
content: [{ type: 'text', text: 'candidate_id は必須です' }],
|
|
6
|
+
isError: true,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
const updated = updatePendingCandidate(args.candidate_id, (candidate) => ({
|
|
10
|
+
...candidate,
|
|
11
|
+
status: 'discarded',
|
|
12
|
+
discarded_reason: typeof args.reason === 'string' ? args.reason : undefined,
|
|
13
|
+
updated_at: new Date().toISOString(),
|
|
14
|
+
}));
|
|
15
|
+
if (!updated) {
|
|
16
|
+
return {
|
|
17
|
+
content: [
|
|
18
|
+
{ type: 'text', text: '破棄対象の pending 候補が見つかりません' },
|
|
19
|
+
],
|
|
20
|
+
isError: true,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
content: [
|
|
25
|
+
{
|
|
26
|
+
type: 'text',
|
|
27
|
+
text: JSON.stringify({
|
|
28
|
+
discarded: true,
|
|
29
|
+
candidate_id: updated.id,
|
|
30
|
+
title: updated.title,
|
|
31
|
+
}, null, 2),
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/discard-pending-candidate/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAyC,EACzC,UAAqB;IAErB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;YACvD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACxE,GAAG,SAAS;QACZ,MAAM,EAAE,WAAW;QACnB,gBAAgB,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC3E,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC,CAAC;IAEJ,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE;aACnD;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,SAAS,EAAE,IAAI;oBACf,YAAY,EAAE,OAAO,CAAC,EAAE;oBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/discard-pending-candidate/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { handleDiscardPendingCandidate } from './handler.js';
|
|
2
|
+
export const discardPendingCandidateTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_discard_pending_candidate',
|
|
5
|
+
description: 'pending の知見候補を破棄します',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
candidate_id: { type: 'string', description: '破棄する候補ID' },
|
|
10
|
+
reason: { type: 'string', description: '破棄理由' },
|
|
11
|
+
},
|
|
12
|
+
required: ['candidate_id'],
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
handler: handleDiscardPendingCandidate,
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/discard-pending-candidate/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,CAAC,MAAM,2BAA2B,GAAgB;IACtD,UAAU,EAAE;QACV,IAAI,EAAE,iCAAiC;QACvC,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;gBACzD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;aAChD;YACD,QAAQ,EAAE,CAAC,cAAc,CAAC;SAC3B;KACF;IACD,OAAO,EAAE,6BAA6B;CACvC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getSessionTranscript } from '../../services/session/index.js';
|
|
2
|
+
export async function handleGetSessionTranscript(args, _apiClient) {
|
|
3
|
+
if (!args || typeof args.session_id !== 'string') {
|
|
4
|
+
return {
|
|
5
|
+
content: [{ type: 'text', text: 'session_id は必須です' }],
|
|
6
|
+
isError: true,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
if (args.source !== 'claude' && args.source !== 'codex') {
|
|
10
|
+
return {
|
|
11
|
+
content: [
|
|
12
|
+
{
|
|
13
|
+
type: 'text',
|
|
14
|
+
text: 'source は claude または codex を指定してください',
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
isError: true,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const maxChars = typeof args.max_chars === 'number' ? Math.max(1000, args.max_chars) : 20000;
|
|
21
|
+
const transcript = getSessionTranscript(args.source, args.session_id, maxChars);
|
|
22
|
+
if (!transcript) {
|
|
23
|
+
return {
|
|
24
|
+
content: [
|
|
25
|
+
{
|
|
26
|
+
type: 'text',
|
|
27
|
+
text: `セッションが見つかりません: ${args.source}:${args.session_id}`,
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
isError: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: 'text',
|
|
37
|
+
text: transcript,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/get-session-transcript/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAGvE,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAyC,EACzC,UAAqB;IAErB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;YACrD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QACxD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,qCAAqC;iBAC5C;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9E,MAAM,UAAU,GAAG,oBAAoB,CACrC,IAAI,CAAC,MAAuB,EAC5B,IAAI,CAAC,UAAU,EACf,QAAQ,CACT,CAAC;IAEF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,kBAAkB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;iBACzD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,UAAU;aACjB;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/get-session-transcript/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { handleGetSessionTranscript } from './handler.js';
|
|
2
|
+
export const getSessionTranscriptTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_get_session_transcript',
|
|
5
|
+
description: '知見抽出用にローカルセッション本文を取得します',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
session_id: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
description: '取得対象のセッションID',
|
|
12
|
+
},
|
|
13
|
+
source: {
|
|
14
|
+
type: 'string',
|
|
15
|
+
enum: ['claude', 'codex'],
|
|
16
|
+
description: 'セッションソース',
|
|
17
|
+
},
|
|
18
|
+
max_chars: {
|
|
19
|
+
type: 'number',
|
|
20
|
+
description: '返却する最大文字数。デフォルトは20000です',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
required: ['session_id', 'source'],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
handler: handleGetSessionTranscript,
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/get-session-transcript/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,CAAC,MAAM,wBAAwB,GAAgB;IACnD,UAAU,EAAE;QACV,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,cAAc;iBAC5B;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;oBACzB,WAAW,EAAE,UAAU;iBACxB;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yBAAyB;iBACvC;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC;SACnC;KACF;IACD,OAAO,EAAE,0BAA0B;CACpC,CAAC"}
|
package/dist/handlers/index.js
CHANGED
|
@@ -23,4 +23,12 @@ export * from './get-skill-sheet-projects/index.js';
|
|
|
23
23
|
export * from './add-skill-sheet-project/index.js';
|
|
24
24
|
export * from './update-skill-sheet-project/index.js';
|
|
25
25
|
export * from './delete-skill-sheet-project/index.js';
|
|
26
|
+
export * from './cache-status/index.js';
|
|
27
|
+
export * from './sync-remote-memos/index.js';
|
|
28
|
+
export * from './scan-sessions/index.js';
|
|
29
|
+
export * from './get-session-transcript/index.js';
|
|
30
|
+
export * from './add-knowledge-candidates/index.js';
|
|
31
|
+
export * from './list-pending-candidates/index.js';
|
|
32
|
+
export * from './save-pending-candidate/index.js';
|
|
33
|
+
export * from './discard-pending-candidate/index.js';
|
|
26
34
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { readCache } from '../../services/local-cache/index.js';
|
|
2
|
+
export async function handleListPendingCandidates(args, _apiClient) {
|
|
3
|
+
const limit = typeof args?.limit === 'number' ? Math.max(1, args.limit) : 20;
|
|
4
|
+
const candidates = readCache()
|
|
5
|
+
.pending.filter((candidate) => candidate.status === 'pending')
|
|
6
|
+
.slice(0, limit);
|
|
7
|
+
return {
|
|
8
|
+
content: [
|
|
9
|
+
{
|
|
10
|
+
type: 'text',
|
|
11
|
+
text: JSON.stringify({
|
|
12
|
+
count: candidates.length,
|
|
13
|
+
candidates,
|
|
14
|
+
}, null, 2),
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/list-pending-candidates/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAyC,EACzC,UAAqB;IAErB,MAAM,KAAK,GAAG,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,UAAU,GAAG,SAAS,EAAE;SAC3B,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC;SAC7D,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEnB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,KAAK,EAAE,UAAU,CAAC,MAAM;oBACxB,UAAU;iBACX,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/list-pending-candidates/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { handleListPendingCandidates } from './handler.js';
|
|
2
|
+
export const listPendingCandidatesTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_list_pending_candidates',
|
|
5
|
+
description: '未保存の知見候補を一覧表示します',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
limit: {
|
|
10
|
+
type: 'number',
|
|
11
|
+
description: '取得件数。デフォルトは20です',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
handler: handleListPendingCandidates,
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/list-pending-candidates/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,CAAC,MAAM,yBAAyB,GAAgB;IACpD,UAAU,EAAE;QACV,IAAI,EAAE,+BAA+B;QACrC,WAAW,EAAE,kBAAkB;QAC/B,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,iBAAiB;iBAC/B;aACF;SACF;KACF;IACD,OAAO,EAAE,2BAA2B;CACrC,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { createMemo, searchMemos } from '../../services/api/memo.js';
|
|
2
|
+
import { createFingerprint, readCache, toCachedMemo, updatePendingCandidate, upsertCachedMemos, } from '../../services/local-cache/index.js';
|
|
3
|
+
export async function handleSavePendingCandidate(args, apiClient) {
|
|
4
|
+
if (!args || typeof args.candidate_id !== 'string') {
|
|
5
|
+
return {
|
|
6
|
+
content: [{ type: 'text', text: 'candidate_id は必須です' }],
|
|
7
|
+
isError: true,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
const candidate = readCache().pending.find((item) => item.id === args.candidate_id && item.status === 'pending');
|
|
11
|
+
if (!candidate) {
|
|
12
|
+
return {
|
|
13
|
+
content: [
|
|
14
|
+
{ type: 'text', text: '保存対象の pending 候補が見つかりません' },
|
|
15
|
+
],
|
|
16
|
+
isError: true,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const title = typeof args.title === 'string' ? args.title : candidate.title;
|
|
20
|
+
const body = typeof args.body === 'string' ? args.body : candidate.body;
|
|
21
|
+
const categories = Array.isArray(args.categories)
|
|
22
|
+
? args.categories.filter((category) => typeof category === 'string')
|
|
23
|
+
: candidate.categories || [];
|
|
24
|
+
const params = {
|
|
25
|
+
title,
|
|
26
|
+
body,
|
|
27
|
+
is_public: typeof args.is_public === 'boolean'
|
|
28
|
+
? args.is_public
|
|
29
|
+
: (candidate.is_public ?? false),
|
|
30
|
+
categories: categories.map((name) => ({ name })),
|
|
31
|
+
};
|
|
32
|
+
const result = await createMemo(apiClient, params);
|
|
33
|
+
if (!result.success) {
|
|
34
|
+
return {
|
|
35
|
+
content: [
|
|
36
|
+
{
|
|
37
|
+
type: 'text',
|
|
38
|
+
text: `知見候補の保存に失敗しました: ${result.error || '不明なエラー'}`,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
isError: true,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const savedMemo = await findSavedMemo(apiClient, title, body);
|
|
45
|
+
if (savedMemo) {
|
|
46
|
+
upsertCachedMemos([toCachedMemo(savedMemo)]);
|
|
47
|
+
}
|
|
48
|
+
const updated = updatePendingCandidate(candidate.id, (item) => ({
|
|
49
|
+
...item,
|
|
50
|
+
title,
|
|
51
|
+
body,
|
|
52
|
+
categories,
|
|
53
|
+
is_public: params.is_public,
|
|
54
|
+
status: 'saved',
|
|
55
|
+
fingerprint: createFingerprint(title, body),
|
|
56
|
+
saved_memo_id: savedMemo?.id,
|
|
57
|
+
updated_at: new Date().toISOString(),
|
|
58
|
+
}));
|
|
59
|
+
return {
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: 'text',
|
|
63
|
+
text: JSON.stringify({
|
|
64
|
+
saved: true,
|
|
65
|
+
candidate_id: updated?.id,
|
|
66
|
+
memo_id: savedMemo?.id || null,
|
|
67
|
+
title,
|
|
68
|
+
}, null, 2),
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function findSavedMemo(apiClient, title, body) {
|
|
74
|
+
const result = await searchMemos(apiClient, { word: title, limit: 10 });
|
|
75
|
+
if (!result.success || !result.memos)
|
|
76
|
+
return undefined;
|
|
77
|
+
const fingerprint = createFingerprint(title, body);
|
|
78
|
+
return result.memos.find((memo) => createFingerprint(memo.title, memo.body) === fingerprint);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/save-pending-candidate/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,qCAAqC,CAAC;AAG7C,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAyC,EACzC,SAAoB;IAEpB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QACnD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;YACvD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CACxC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CACrE,CAAC;IACF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE;aACnD;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;IAC5E,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CACpB,CAAC,QAAQ,EAAsB,EAAE,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAC/D;QACH,CAAC,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC;IAE/B,MAAM,MAAM,GAAqB;QAC/B,KAAK;QACL,IAAI;QACJ,SAAS,EACP,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS;YACjC,CAAC,CAAC,IAAI,CAAC,SAAS;YAChB,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC;QACpC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KACjD,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,mBAAmB,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE;iBACpD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9D,IAAI,SAAS,EAAE,CAAC;QACd,iBAAiB,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,OAAO,GAAG,sBAAsB,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9D,GAAG,IAAI;QACP,KAAK;QACL,IAAI;QACJ,UAAU;QACV,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC;QAC3C,aAAa,EAAE,SAAS,EAAE,EAAE;QAC5B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACrC,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,KAAK,EAAE,IAAI;oBACX,YAAY,EAAE,OAAO,EAAE,EAAE;oBACzB,OAAO,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI;oBAC9B,KAAK;iBACN,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,SAAoB,EACpB,KAAa,EACb,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IACvD,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,WAAW,CACnE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/save-pending-candidate/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { handleSavePendingCandidate } from './handler.js';
|
|
2
|
+
export const savePendingCandidateTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_save_pending_candidate',
|
|
5
|
+
description: 'pending の知見候補を PaPut メモとして保存します',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
candidate_id: { type: 'string', description: '保存する候補ID' },
|
|
10
|
+
title: { type: 'string', description: '保存時に上書きするタイトル' },
|
|
11
|
+
body: { type: 'string', description: '保存時に上書きする本文' },
|
|
12
|
+
categories: { type: 'array', items: { type: 'string' } },
|
|
13
|
+
is_public: { type: 'boolean', default: false },
|
|
14
|
+
},
|
|
15
|
+
required: ['candidate_id'],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
handler: handleSavePendingCandidate,
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/save-pending-candidate/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,CAAC,MAAM,wBAAwB,GAAgB;IACnD,UAAU,EAAE;QACV,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,iCAAiC;QAC9C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;gBACzD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;gBACvD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;gBACpD,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACxD,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;aAC/C;YACD,QAAQ,EAAE,CAAC,cAAc,CAAC;SAC3B;KACF;IACD,OAAO,EAAE,0BAA0B;CACpC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { scanSessions } from '../../services/session/index.js';
|
|
2
|
+
export async function handleScanSessions(args, _apiClient) {
|
|
3
|
+
const sources = parseSources(args?.sources);
|
|
4
|
+
const includeProcessed = typeof args?.include_processed === 'boolean'
|
|
5
|
+
? args.include_processed
|
|
6
|
+
: false;
|
|
7
|
+
const sessions = scanSessions(sources, includeProcessed);
|
|
8
|
+
return {
|
|
9
|
+
content: [
|
|
10
|
+
{
|
|
11
|
+
type: 'text',
|
|
12
|
+
text: JSON.stringify({
|
|
13
|
+
count: sessions.length,
|
|
14
|
+
sessions,
|
|
15
|
+
}, null, 2),
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function parseSources(value) {
|
|
21
|
+
if (!Array.isArray(value))
|
|
22
|
+
return ['claude', 'codex'];
|
|
23
|
+
const sources = value.filter((source) => source === 'claude' || source === 'codex');
|
|
24
|
+
return sources.length > 0 ? sources : ['claude', 'codex'];
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/scan-sessions/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAG/D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAyC,EACzC,UAAqB;IAErB,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,gBAAgB,GACpB,OAAO,IAAI,EAAE,iBAAiB,KAAK,SAAS;QAC1C,CAAC,CAAC,IAAI,CAAC,iBAAiB;QACxB,CAAC,CAAC,KAAK,CAAC;IACZ,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAEzD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,KAAK,EAAE,QAAQ,CAAC,MAAM;oBACtB,QAAQ;iBACT,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAC1B,CAAC,MAAM,EAA2B,EAAE,CAClC,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO,CAC5C,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/scan-sessions/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { handleScanSessions } from './handler.js';
|
|
2
|
+
export const scanSessionsTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_scan_sessions',
|
|
5
|
+
description: 'Claude/Codex のローカルセッションログを検出します',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
sources: {
|
|
10
|
+
type: 'array',
|
|
11
|
+
items: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
enum: ['claude', 'codex'],
|
|
14
|
+
},
|
|
15
|
+
description: '検出対象のセッションソース',
|
|
16
|
+
},
|
|
17
|
+
include_processed: {
|
|
18
|
+
type: 'boolean',
|
|
19
|
+
description: 'digest 済みセッションも含めるかどうか',
|
|
20
|
+
default: false,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
handler: handleScanSessions,
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/scan-sessions/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,UAAU,EAAE;QACV,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,iCAAiC;QAC9C,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;qBAC1B;oBACD,WAAW,EAAE,eAAe;iBAC7B;gBACD,iBAAiB,EAAE;oBACjB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,wBAAwB;oBACrC,OAAO,EAAE,KAAK;iBACf;aACF;SACF;KACF;IACD,OAAO,EAAE,kBAAkB;CAC5B,CAAC"}
|