paput-mcp 3.3.3 → 4.0.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 +88 -67
- package/dist/cli/index.js +5 -29
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/login.js +1 -1
- package/dist/cli/login.js.map +1 -1
- package/dist/cli/logout.js +3 -3
- package/dist/cli/logout.js.map +1 -1
- package/dist/cli/rules/paput-knowledge-capture.md +1 -1
- package/dist/cli/skills/paput-analyze-discard-policy/SKILL.md +3 -3
- package/dist/cli/skills/paput-capture/SKILL.md +1 -1
- package/dist/cli/skills/paput-init/SKILL.md +58 -9
- package/dist/handlers/add-knowledge-candidates/handler.js +49 -21
- package/dist/handlers/add-knowledge-candidates/handler.js.map +1 -1
- package/dist/handlers/add-knowledge-candidates/tool.js +1 -1
- package/dist/handlers/add-knowledge-candidates/tool.js.map +1 -1
- package/dist/handlers/discard-pending-candidate/handler.js +6 -21
- package/dist/handlers/discard-pending-candidate/handler.js.map +1 -1
- package/dist/handlers/get-capture-policy/handler.js +3 -3
- package/dist/handlers/get-capture-policy/handler.js.map +1 -1
- package/dist/handlers/get-capture-policy/tool.js +1 -1
- package/dist/handlers/get-capture-policy/tool.js.map +1 -1
- package/dist/handlers/get-discard-policy-context/handler.js +3 -11
- package/dist/handlers/get-discard-policy-context/handler.js.map +1 -1
- package/dist/handlers/get-discard-policy-context/tool.js +1 -1
- package/dist/handlers/get-discard-policy-context/tool.js.map +1 -1
- package/dist/handlers/get-project-context/handler.js +7 -9
- package/dist/handlers/get-project-context/handler.js.map +1 -1
- package/dist/handlers/get-project-context/tool.js +2 -2
- package/dist/handlers/get-project-context/tool.js.map +1 -1
- package/dist/handlers/index.js +4 -3
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/list-pending-candidates/handler.js +6 -9
- package/dist/handlers/list-pending-candidates/handler.js.map +1 -1
- package/dist/handlers/list-processed-sessions/handler.js +18 -0
- package/dist/handlers/list-processed-sessions/handler.js.map +1 -0
- package/dist/handlers/list-processed-sessions/index.js +3 -0
- package/dist/handlers/list-processed-sessions/index.js.map +1 -0
- package/dist/handlers/list-processed-sessions/tool.js +19 -0
- package/dist/handlers/list-processed-sessions/tool.js.map +1 -0
- package/dist/handlers/mark-processed-session/handler.js +37 -0
- package/dist/handlers/mark-processed-session/handler.js.map +1 -0
- package/dist/handlers/mark-processed-session/index.js +3 -0
- package/dist/handlers/mark-processed-session/index.js.map +1 -0
- package/dist/handlers/mark-processed-session/tool.js +28 -0
- package/dist/handlers/mark-processed-session/tool.js.map +1 -0
- package/dist/handlers/memo-projects.js +19 -5
- package/dist/handlers/memo-projects.js.map +1 -1
- package/dist/handlers/save-pending-candidate/handler.js +84 -31
- package/dist/handlers/save-pending-candidate/handler.js.map +1 -1
- package/dist/handlers/save-pending-candidate/tool.js +4 -0
- package/dist/handlers/save-pending-candidate/tool.js.map +1 -1
- package/dist/handlers/scan-sessions/handler.js +4 -2
- package/dist/handlers/scan-sessions/handler.js.map +1 -1
- package/dist/handlers/update-capture-policy/handler.js +3 -3
- package/dist/handlers/update-capture-policy/handler.js.map +1 -1
- package/dist/handlers/update-capture-policy/tool.js +2 -2
- package/dist/handlers/update-capture-policy/tool.js.map +1 -1
- package/dist/handlers/update-memo/handler.js +1 -1
- package/dist/handlers/update-memo/handler.js.map +1 -1
- package/dist/handlers/update-pending-candidate/handler.js +90 -0
- package/dist/handlers/update-pending-candidate/handler.js.map +1 -0
- package/dist/handlers/update-pending-candidate/index.js +3 -0
- package/dist/handlers/update-pending-candidate/index.js.map +1 -0
- package/dist/handlers/update-pending-candidate/tool.js +51 -0
- package/dist/handlers/update-pending-candidate/tool.js.map +1 -0
- package/dist/handlers/update-project-document/handler.js +61 -0
- package/dist/handlers/update-project-document/handler.js.map +1 -0
- package/dist/handlers/update-project-document/index.js +3 -0
- package/dist/handlers/update-project-document/index.js.map +1 -0
- package/dist/handlers/update-project-document/tool.js +31 -0
- package/dist/handlers/update-project-document/tool.js.map +1 -0
- package/dist/handlers/upsert-skill-sheet-project/handler.js +3 -0
- package/dist/handlers/upsert-skill-sheet-project/handler.js.map +1 -1
- package/dist/handlers/upsert-skill-sheet-project/tool.js +4 -0
- package/dist/handlers/upsert-skill-sheet-project/tool.js.map +1 -1
- package/dist/http.js +67 -21
- package/dist/http.js.map +1 -1
- package/dist/index.js +2 -9
- package/dist/index.js.map +1 -1
- package/dist/schemas/tool-input.js +65 -21
- package/dist/schemas/tool-input.js.map +1 -1
- package/dist/server.js +3 -17
- package/dist/server.js.map +1 -1
- package/dist/services/api/client.js +2 -3
- package/dist/services/api/client.js.map +1 -1
- package/dist/services/api/index.js +1 -0
- package/dist/services/api/index.js.map +1 -1
- package/dist/services/api/knowledge-candidate.js +44 -0
- package/dist/services/api/knowledge-candidate.js.map +1 -0
- package/dist/services/api/project-context.js +9 -1
- package/dist/services/api/project-context.js.map +1 -1
- package/dist/services/api/skill-sheet.js +5 -0
- package/dist/services/api/skill-sheet.js.map +1 -1
- package/dist/services/session/index.js +2 -3
- package/dist/services/session/index.js.map +1 -1
- package/dist/tool.js +37 -23
- package/dist/tool.js.map +1 -1
- package/docs/directory-submission.md +5 -5
- package/docs/privacy-policy.md +22 -12
- package/docs/reviewer-guide.md +13 -4
- package/docs/tools.md +61 -21
- package/docs/usage-examples.md +13 -12
- package/package.json +7 -3
|
@@ -1,11 +1,9 @@
|
|
|
1
|
+
import { addRemoteKnowledgeCandidates } from '../../services/api/knowledge-candidate.js';
|
|
1
2
|
import { findSimilarMemos } from '../../services/api/memo.js';
|
|
2
|
-
import { addKnowledgeCandidates } from '../../services/local-cache/index.js';
|
|
3
|
-
import { resolveProjectsForCwd } from '../../services/project-match/index.js';
|
|
4
|
-
import { scanSessions } from '../../services/session/index.js';
|
|
5
3
|
// 重複とみなす類似スコア閾値(この値以上は自動除外)
|
|
6
4
|
const NEAR_DUPLICATE_SCORE = 0.9;
|
|
7
5
|
const SIMILAR_MEMO_LIMIT = 5;
|
|
8
|
-
export async function handleAddKnowledgeCandidates(args, apiClient) {
|
|
6
|
+
export async function handleAddKnowledgeCandidates(args, apiClient, context) {
|
|
9
7
|
if (!args || typeof args.session_id !== 'string') {
|
|
10
8
|
return {
|
|
11
9
|
content: [{ type: 'text', text: 'session_id is required' }],
|
|
@@ -45,6 +43,12 @@ export async function handleAddKnowledgeCandidates(args, apiClient) {
|
|
|
45
43
|
const memoTypeKeys = Array.isArray(rawCandidate.memo_type_keys)
|
|
46
44
|
? rawCandidate.memo_type_keys.filter((key) => typeof key === 'string')
|
|
47
45
|
: [];
|
|
46
|
+
const projects = Array.isArray(rawCandidate.projects)
|
|
47
|
+
? rawCandidate.projects.filter((project) => typeof project === 'object' &&
|
|
48
|
+
project !== null &&
|
|
49
|
+
'id' in project &&
|
|
50
|
+
typeof project.id === 'number')
|
|
51
|
+
: undefined;
|
|
48
52
|
return [
|
|
49
53
|
{
|
|
50
54
|
title: candidate.title,
|
|
@@ -57,13 +61,17 @@ export async function handleAddKnowledgeCandidates(args, apiClient) {
|
|
|
57
61
|
is_public: typeof rawCandidate.is_public === 'boolean'
|
|
58
62
|
? rawCandidate.is_public
|
|
59
63
|
: false,
|
|
64
|
+
projects,
|
|
60
65
|
},
|
|
61
66
|
];
|
|
62
67
|
});
|
|
63
68
|
const source = args.source;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
69
|
+
return await addRemoteCandidates(args, apiClient, context, source, candidates);
|
|
70
|
+
}
|
|
71
|
+
async function addRemoteCandidates(args, apiClient, context = {}, source, candidates) {
|
|
72
|
+
const contextProjects = context.projectId
|
|
73
|
+
? [{ id: context.projectId, title: context.projectTitle }]
|
|
74
|
+
: [];
|
|
67
75
|
const semanticDuplicates = [];
|
|
68
76
|
const candidatesToAdd = [];
|
|
69
77
|
for (const candidate of candidates) {
|
|
@@ -79,16 +87,45 @@ export async function handleAddKnowledgeCandidates(args, apiClient) {
|
|
|
79
87
|
}
|
|
80
88
|
candidatesToAdd.push({
|
|
81
89
|
...candidate,
|
|
82
|
-
projects
|
|
90
|
+
projects: candidate.projects && candidate.projects.length > 0
|
|
91
|
+
? candidate.projects
|
|
92
|
+
: contextProjects,
|
|
83
93
|
similar_memos: similarMemos,
|
|
84
94
|
});
|
|
85
95
|
}
|
|
86
|
-
|
|
87
|
-
|
|
96
|
+
if (candidatesToAdd.length === 0) {
|
|
97
|
+
const response = {
|
|
98
|
+
added: 0,
|
|
99
|
+
duplicates: semanticDuplicates.length,
|
|
100
|
+
candidates: [],
|
|
101
|
+
duplicate_details: semanticDuplicates,
|
|
102
|
+
};
|
|
103
|
+
return {
|
|
104
|
+
structuredContent: response,
|
|
105
|
+
content: [
|
|
106
|
+
{
|
|
107
|
+
type: 'text',
|
|
108
|
+
text: JSON.stringify(response, null, 2),
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const result = await addRemoteKnowledgeCandidates(apiClient, {
|
|
114
|
+
source,
|
|
115
|
+
session_id: args.session_id,
|
|
116
|
+
source_session_updated_at: typeof args.source_session_updated_at === 'string'
|
|
117
|
+
? args.source_session_updated_at
|
|
118
|
+
: undefined,
|
|
119
|
+
candidates: candidatesToAdd,
|
|
120
|
+
});
|
|
121
|
+
const duplicateDetails = [
|
|
122
|
+
...semanticDuplicates,
|
|
123
|
+
...(result.duplicate_details ?? []),
|
|
124
|
+
];
|
|
88
125
|
const response = {
|
|
89
|
-
added: result.
|
|
126
|
+
added: result.candidates.length,
|
|
90
127
|
duplicates: duplicateDetails.length,
|
|
91
|
-
candidates: result.
|
|
128
|
+
candidates: result.candidates,
|
|
92
129
|
duplicate_details: duplicateDetails,
|
|
93
130
|
};
|
|
94
131
|
return {
|
|
@@ -101,15 +138,6 @@ export async function handleAddKnowledgeCandidates(args, apiClient) {
|
|
|
101
138
|
],
|
|
102
139
|
};
|
|
103
140
|
}
|
|
104
|
-
async function resolveProjects(apiClient, cwd) {
|
|
105
|
-
try {
|
|
106
|
-
return await resolveProjectsForCwd(apiClient, cwd);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
console.error('Failed to resolve projects for pending candidate:', error);
|
|
110
|
-
return [];
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
141
|
async function findSimilarMemosForCandidate(apiClient, title, body) {
|
|
114
142
|
const query = `${title}\n${body.slice(0, 200)}`;
|
|
115
143
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/add-knowledge-candidates/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/add-knowledge-candidates/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { handleAddKnowledgeCandidates } from './handler.js';
|
|
|
2
2
|
export const addKnowledgeCandidatesTool = {
|
|
3
3
|
definition: {
|
|
4
4
|
name: 'paput_add_knowledge_candidates',
|
|
5
|
-
description: 'Add reusable knowledge candidates extracted from a Claude or Codex session to the
|
|
5
|
+
description: 'Add reusable knowledge candidates extracted from a Claude or Codex session to the pending queue. Use this before saving knowledge to PaPut when candidates still need review or deduplication.',
|
|
6
6
|
inputSchema: {
|
|
7
7
|
type: 'object',
|
|
8
8
|
properties: {
|
|
@@ -1 +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,EACT,
|
|
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,EACT,gMAAgM;QAClM,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;gBAChE,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;oBACzB,WAAW,EAAE,yBAAyB;iBACvC;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,6BAA6B;oBAC1C,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,cAAc,EAAE;gCACd,IAAI,EAAE,OAAO;gCACb,KAAK,EAAE;oCACL,IAAI,EAAE,QAAQ;oCACd,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC;iCAC1D;gCACD,WAAW,EACT,4IAA4I;6BAC/I;4BACD,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"}
|
|
@@ -1,30 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export async function handleDiscardPendingCandidate(args,
|
|
1
|
+
import { discardRemoteKnowledgeCandidate } from '../../services/api/knowledge-candidate.js';
|
|
2
|
+
export async function handleDiscardPendingCandidate(args, apiClient) {
|
|
3
3
|
if (!args || typeof args.candidate_id !== 'string') {
|
|
4
4
|
return {
|
|
5
5
|
content: [{ type: 'text', text: 'candidate_id is required' }],
|
|
6
6
|
isError: true,
|
|
7
7
|
};
|
|
8
8
|
}
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
updated_at: new Date().toISOString(),
|
|
14
|
-
}));
|
|
15
|
-
if (!updated) {
|
|
16
|
-
return {
|
|
17
|
-
content: [
|
|
18
|
-
{ type: 'text', text: 'Pending candidate to discard was not found' },
|
|
19
|
-
],
|
|
20
|
-
isError: true,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
const result = {
|
|
24
|
-
discarded: true,
|
|
25
|
-
candidate_id: updated.id,
|
|
26
|
-
title: updated.title,
|
|
27
|
-
};
|
|
9
|
+
const result = await discardRemoteKnowledgeCandidate(apiClient, {
|
|
10
|
+
candidate_id: args.candidate_id,
|
|
11
|
+
reason: typeof args.reason === 'string' ? args.reason : undefined,
|
|
12
|
+
});
|
|
28
13
|
return {
|
|
29
14
|
structuredContent: result,
|
|
30
15
|
content: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/discard-pending-candidate/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/discard-pending-candidate/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAE5F,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,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,0BAA0B,EAAE,CAAC;YAC7D,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC,SAAS,EAAE;QAC9D,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,MAAM,EAAE,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAClE,CAAC,CAAC;IAEH,OAAO;QACL,iBAAiB,EAAE,MAA4C;QAC/D,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export async function handleGetCapturePolicy(_args,
|
|
3
|
-
const policy =
|
|
1
|
+
import { getRemoteCapturePolicy } from '../../services/api/knowledge-candidate.js';
|
|
2
|
+
export async function handleGetCapturePolicy(_args, apiClient) {
|
|
3
|
+
const policy = await getRemoteCapturePolicy(apiClient);
|
|
4
4
|
return {
|
|
5
5
|
structuredContent: policy,
|
|
6
6
|
content: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/get-capture-policy/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/get-capture-policy/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAEnF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAA0C,EAC1C,SAAoB;IAEpB,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAEvD,OAAO;QACL,iBAAiB,EAAE,MAA4C;QAC/D,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { handleGetCapturePolicy } from './handler.js';
|
|
|
2
2
|
export const getCapturePolicyTool = {
|
|
3
3
|
definition: {
|
|
4
4
|
name: 'paput_get_capture_policy',
|
|
5
|
-
description: 'Get the
|
|
5
|
+
description: 'Get the PaPut capture policy document generated from discarded knowledge candidates.',
|
|
6
6
|
inputSchema: {
|
|
7
7
|
type: 'object',
|
|
8
8
|
properties: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/get-capture-policy/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,UAAU,EAAE;QACV,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/get-capture-policy/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,UAAU,EAAE;QACV,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,sFAAsF;QACxF,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD,OAAO,EAAE,sBAAsB;CAChC,CAAC"}
|
|
@@ -1,17 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export async function handleGetDiscardPolicyContext(args,
|
|
1
|
+
import { getRemoteDiscardPolicyContext } from '../../services/api/knowledge-candidate.js';
|
|
2
|
+
export async function handleGetDiscardPolicyContext(args, apiClient) {
|
|
3
3
|
const limit = args && typeof args.limit === 'number' && args.limit > 0
|
|
4
4
|
? Math.min(Math.floor(args.limit), 200)
|
|
5
5
|
: 50;
|
|
6
|
-
const
|
|
7
|
-
const cache = readCache();
|
|
8
|
-
const discarded_candidates = getDiscardedCandidates(limit);
|
|
9
|
-
const result = {
|
|
10
|
-
policy,
|
|
11
|
-
total_discarded_count: cache.pending.filter((candidate) => candidate.status === 'discarded').length,
|
|
12
|
-
returned_discarded_count: discarded_candidates.length,
|
|
13
|
-
discarded_candidates,
|
|
14
|
-
};
|
|
6
|
+
const result = await getRemoteDiscardPolicyContext(apiClient, limit);
|
|
15
7
|
return {
|
|
16
8
|
structuredContent: result,
|
|
17
9
|
content: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/get-discard-policy-context/handler.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/get-discard-policy-context/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAE1F,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAyC,EACzC,SAAoB;IAEpB,MAAM,KAAK,GACT,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;QACtD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;QACvC,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAErE,OAAO;QACL,iBAAiB,EAAE,MAA4C;QAC/D,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { handleGetDiscardPolicyContext } from './handler.js';
|
|
|
2
2
|
export const getDiscardPolicyContextTool = {
|
|
3
3
|
definition: {
|
|
4
4
|
name: 'paput_get_discard_policy_context',
|
|
5
|
-
description: 'Get discarded
|
|
5
|
+
description: 'Get discarded knowledge candidates and the current capture policy so the client AI can analyze rejection patterns.',
|
|
6
6
|
inputSchema: {
|
|
7
7
|
type: 'object',
|
|
8
8
|
properties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/get-discard-policy-context/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,CAAC,MAAM,2BAA2B,GAAgB;IACtD,UAAU,EAAE;QACV,IAAI,EAAE,kCAAkC;QACxC,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/get-discard-policy-context/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAE7D,MAAM,CAAC,MAAM,2BAA2B,GAAgB;IACtD,UAAU,EAAE;QACV,IAAI,EAAE,kCAAkC;QACxC,WAAW,EACT,oHAAoH;QACtH,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,oDAAoD;iBAClE;aACF;SACF;KACF;IACD,OAAO,EAAE,6BAA6B;CACvC,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { getProjectContext, } from '../../services/api/project-context.js';
|
|
2
2
|
export async function handleGetProjectContext(args, apiClient, context) {
|
|
3
|
-
const project =
|
|
3
|
+
const project = getProjectSelector(args, context);
|
|
4
4
|
if (!project) {
|
|
5
5
|
return {
|
|
6
6
|
content: [
|
|
7
7
|
{
|
|
8
8
|
type: 'text',
|
|
9
|
-
text: 'project is required when
|
|
9
|
+
text: 'project is required when no MCP project_alias is configured.',
|
|
10
10
|
},
|
|
11
11
|
],
|
|
12
12
|
isError: true,
|
|
@@ -37,14 +37,12 @@ export async function handleGetProjectContext(args, apiClient, context) {
|
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
|
-
function
|
|
40
|
+
function getProjectSelector(args, context) {
|
|
41
|
+
if (context?.projectId) {
|
|
42
|
+
return { project_id: context.projectId };
|
|
43
|
+
}
|
|
41
44
|
const explicit = args && typeof args.project === 'string' ? args.project.trim() : '';
|
|
42
|
-
|
|
43
|
-
return explicit;
|
|
44
|
-
if (context?.projectMatch)
|
|
45
|
-
return context.projectMatch;
|
|
46
|
-
const envProjectMatch = process.env.PAPUT_PROJECT_MATCH?.trim();
|
|
47
|
-
return envProjectMatch || undefined;
|
|
45
|
+
return explicit || undefined;
|
|
48
46
|
}
|
|
49
47
|
function buildContextText(result) {
|
|
50
48
|
const lines = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/get-project-context/handler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,GAElB,MAAM,uCAAuC,CAAC;AAG/C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAyC,EACzC,SAAoB,EACpB,OAAqB;IAErB,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/get-project-context/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,13 @@ import { handleGetProjectContext } from './handler.js';
|
|
|
2
2
|
export const getProjectContextTool = {
|
|
3
3
|
definition: {
|
|
4
4
|
name: 'paput_get_project_context',
|
|
5
|
-
description: 'Get the private project context (always-applied instructions and an index of accumulated project documents) for a PaPut skill sheet project, resolved
|
|
5
|
+
description: 'Get the private project context (always-applied instructions and an index of accumulated project documents) for a PaPut skill sheet project, resolved from the MCP URL project_alias or a fuzzy project name. Call this at session start when working on a known project. Document bodies are not included; fetch them on demand with paput_get_project_document.',
|
|
6
6
|
inputSchema: {
|
|
7
7
|
type: 'object',
|
|
8
8
|
properties: {
|
|
9
9
|
project: {
|
|
10
10
|
type: 'string',
|
|
11
|
-
description: 'Project name to resolve (partial match allowed).
|
|
11
|
+
description: 'Project name to resolve (partial match allowed). Required only when no MCP project_alias is configured.',
|
|
12
12
|
},
|
|
13
13
|
},
|
|
14
14
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/get-project-context/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,CAAC,MAAM,qBAAqB,GAAgB;IAChD,UAAU,EAAE;QACV,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/get-project-context/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,CAAC,MAAM,qBAAqB,GAAgB;IAChD,UAAU,EAAE;QACV,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,mWAAmW;QACrW,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yGAAyG;iBAC5G;aACF;SACF;KACF;IACD,OAAO,EAAE,uBAAuB;CACjC,CAAC"}
|
package/dist/handlers/index.js
CHANGED
|
@@ -29,14 +29,15 @@ export * from './get-public-profile-context/index.js';
|
|
|
29
29
|
export * from './get-project-context/index.js';
|
|
30
30
|
export * from './get-project-document/index.js';
|
|
31
31
|
export * from './add-project-document/index.js';
|
|
32
|
+
export * from './update-project-document/index.js';
|
|
32
33
|
export * from './update-project-instructions/index.js';
|
|
33
34
|
export * from './discard-project-proposal/index.js';
|
|
34
35
|
export * from './promote-project-documents/index.js';
|
|
35
|
-
export * from './cache-status/index.js';
|
|
36
|
-
export * from './scan-sessions/index.js';
|
|
37
|
-
export * from './get-session-transcript/index.js';
|
|
38
36
|
export * from './add-knowledge-candidates/index.js';
|
|
37
|
+
export * from './list-processed-sessions/index.js';
|
|
38
|
+
export * from './mark-processed-session/index.js';
|
|
39
39
|
export * from './list-pending-candidates/index.js';
|
|
40
|
+
export * from './update-pending-candidate/index.js';
|
|
40
41
|
export * from './save-pending-candidate/index.js';
|
|
41
42
|
export * from './discard-pending-candidate/index.js';
|
|
42
43
|
export * from './get-capture-policy/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,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,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oDAAoD,CAAC;AACnE,cAAc,kDAAkD,CAAC;AACjE,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,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,4BAA4B,CAAC;AAC3C,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AACtD,cAAc,oDAAoD,CAAC;AACnE,cAAc,kDAAkD,CAAC;AACjE,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC;AAClD,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,kCAAkC,CAAC"}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export async function handleListPendingCandidates(args,
|
|
1
|
+
import { listRemoteKnowledgeCandidates } from '../../services/api/knowledge-candidate.js';
|
|
2
|
+
export async function handleListPendingCandidates(args, apiClient) {
|
|
3
3
|
const limit = typeof args?.limit === 'number' ? Math.max(1, args.limit) : 20;
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
count: candidates.length,
|
|
9
|
-
candidates,
|
|
10
|
-
};
|
|
4
|
+
const result = await listRemoteKnowledgeCandidates(apiClient, {
|
|
5
|
+
status: 'pending',
|
|
6
|
+
limit,
|
|
7
|
+
});
|
|
11
8
|
return {
|
|
12
9
|
structuredContent: result,
|
|
13
10
|
content: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/list-pending-candidates/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/list-pending-candidates/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAC;AAE1F,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAyC,EACzC,SAAoB;IAEpB,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,MAAM,GAAG,MAAM,6BAA6B,CAAC,SAAS,EAAE;QAC5D,MAAM,EAAE,SAAS;QACjB,KAAK;KACN,CAAC,CAAC;IAEH,OAAO;QACL,iBAAiB,EAAE,MAAM;QACzB,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { listRemoteProcessedSessions } from '../../services/api/knowledge-candidate.js';
|
|
2
|
+
export async function handleListProcessedSessions(args, apiClient) {
|
|
3
|
+
const source = parseSource(args?.source);
|
|
4
|
+
const result = await listRemoteProcessedSessions(apiClient, source);
|
|
5
|
+
return {
|
|
6
|
+
structuredContent: result,
|
|
7
|
+
content: [
|
|
8
|
+
{
|
|
9
|
+
type: 'text',
|
|
10
|
+
text: JSON.stringify(result, null, 2),
|
|
11
|
+
},
|
|
12
|
+
],
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function parseSource(value) {
|
|
16
|
+
return value === 'claude' || value === 'codex' ? value : undefined;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/list-processed-sessions/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,2CAA2C,CAAC;AAGxF,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,IAAyC,EACzC,SAAoB;IAEpB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEpE,OAAO;QACL,iBAAiB,EAAE,MAA4C;QAC/D,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/list-processed-sessions/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { handleListProcessedSessions } from './handler.js';
|
|
2
|
+
export const listProcessedSessionsTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_list_processed_sessions',
|
|
5
|
+
description: 'List AI sessions that have already been processed for knowledge capture. Use this before client-side local session import to skip sessions already reviewed.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
source: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
enum: ['claude', 'codex'],
|
|
12
|
+
description: 'Optional session source to filter by',
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
handler: handleListProcessedSessions,
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/list-processed-sessions/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,EACT,8JAA8J;QAChK,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;oBACzB,WAAW,EAAE,sCAAsC;iBACpD;aACF;SACF;KACF;IACD,OAAO,EAAE,2BAA2B;CACrC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { markRemoteProcessedSession } from '../../services/api/knowledge-candidate.js';
|
|
2
|
+
export async function handleMarkProcessedSession(args, apiClient) {
|
|
3
|
+
if (!args || typeof args.session_id !== 'string') {
|
|
4
|
+
return {
|
|
5
|
+
content: [{ type: 'text', text: 'session_id is required' }],
|
|
6
|
+
isError: true,
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
if (args.source !== 'claude' && args.source !== 'codex') {
|
|
10
|
+
return {
|
|
11
|
+
content: [
|
|
12
|
+
{
|
|
13
|
+
type: 'text',
|
|
14
|
+
text: 'source must be claude or codex',
|
|
15
|
+
},
|
|
16
|
+
],
|
|
17
|
+
isError: true,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const result = await markRemoteProcessedSession(apiClient, {
|
|
21
|
+
source: args.source,
|
|
22
|
+
session_id: args.session_id,
|
|
23
|
+
source_session_updated_at: typeof args.source_session_updated_at === 'string'
|
|
24
|
+
? args.source_session_updated_at
|
|
25
|
+
: undefined,
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
structuredContent: result,
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: 'text',
|
|
32
|
+
text: JSON.stringify(result, null, 2),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/mark-processed-session/handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAGvF,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAyC,EACzC,SAAoB;IAEpB,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,wBAAwB,EAAE,CAAC;YAC3D,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,gCAAgC;iBACvC;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,SAAS,EAAE;QACzD,MAAM,EAAE,IAAI,CAAC,MAAuB;QACpC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,yBAAyB,EACvB,OAAO,IAAI,CAAC,yBAAyB,KAAK,QAAQ;YAChD,CAAC,CAAC,IAAI,CAAC,yBAAyB;YAChC,CAAC,CAAC,SAAS;KAChB,CAAC,CAAC;IAEH,OAAO;QACL,iBAAiB,EAAE,MAA4C;QAC/D,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/mark-processed-session/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { handleMarkProcessedSession } from './handler.js';
|
|
2
|
+
export const markProcessedSessionTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_mark_processed_session',
|
|
5
|
+
description: 'Mark a Claude or Codex session as processed for knowledge capture. Use this after reviewing a local session even when no pending candidates are added.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
source: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
enum: ['claude', 'codex'],
|
|
12
|
+
description: 'Session source',
|
|
13
|
+
},
|
|
14
|
+
session_id: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
description: 'Session ID that was reviewed',
|
|
17
|
+
},
|
|
18
|
+
source_session_updated_at: {
|
|
19
|
+
type: 'string',
|
|
20
|
+
description: 'Source session updated timestamp in ISO 8601 format',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
required: ['source', 'session_id'],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
handler: handleMarkProcessedSession,
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/mark-processed-session/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,EACT,wJAAwJ;QAC1J,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;oBACzB,WAAW,EAAE,gBAAgB;iBAC9B;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,yBAAyB,EAAE;oBACzB,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qDAAqD;iBACnE;aACF;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC;SACnC;KACF;IACD,OAAO,EAAE,0BAA0B;CACpC,CAAC"}
|
|
@@ -6,24 +6,38 @@ export async function resolveMemoProjects(args, apiClient, context) {
|
|
|
6
6
|
'id' in item &&
|
|
7
7
|
typeof item.id === 'number');
|
|
8
8
|
}
|
|
9
|
+
if (context?.projectId) {
|
|
10
|
+
return [
|
|
11
|
+
{
|
|
12
|
+
id: context.projectId,
|
|
13
|
+
title: context.projectTitle,
|
|
14
|
+
},
|
|
15
|
+
];
|
|
16
|
+
}
|
|
9
17
|
const projectMatch = getProjectMatch(args, context);
|
|
10
18
|
if (!projectMatch)
|
|
11
19
|
return undefined;
|
|
12
20
|
try {
|
|
13
21
|
const projects = await searchSkillSheetProjects(apiClient, projectMatch);
|
|
14
|
-
|
|
22
|
+
if (projects.length === 0)
|
|
23
|
+
return undefined;
|
|
24
|
+
if (projects.length > 1) {
|
|
25
|
+
const candidates = projects
|
|
26
|
+
.map((project) => `${project.title} (ID: ${project.id})`)
|
|
27
|
+
.join(', ');
|
|
28
|
+
throw new Error(`project_match matched multiple projects. Specify projects explicitly or configure MCP project_alias. Candidates: ${candidates}`);
|
|
29
|
+
}
|
|
30
|
+
return [projects[0]];
|
|
15
31
|
}
|
|
16
32
|
catch (error) {
|
|
17
33
|
console.error('Failed to search projects:', error);
|
|
18
|
-
|
|
34
|
+
throw error;
|
|
19
35
|
}
|
|
20
36
|
}
|
|
21
37
|
function getProjectMatch(args, context) {
|
|
22
38
|
const explicit = typeof args.project_match === 'string' ? args.project_match.trim() : '';
|
|
23
39
|
if (explicit)
|
|
24
40
|
return explicit;
|
|
25
|
-
|
|
26
|
-
return context.projectMatch;
|
|
27
|
-
return process.env.PAPUT_PROJECT_MATCH;
|
|
41
|
+
return undefined;
|
|
28
42
|
}
|
|
29
43
|
//# sourceMappingURL=memo-projects.js.map
|