paput-mcp 4.2.21 → 4.2.23
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 +6 -7
- package/dist/cli/rules/paput-knowledge-capture.md +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/create-memos/tool.js +1 -1
- package/dist/handlers/create-memos/tool.js.map +1 -1
- package/dist/handlers/get-dashboard-analysis-context/handler.js +1 -1
- package/dist/handlers/get-skill-sheet/handler.js +20 -23
- package/dist/handlers/get-skill-sheet/handler.js.map +1 -1
- package/dist/handlers/get-skill-sheet-project-episodes-context/handler.js +133 -0
- package/dist/handlers/get-skill-sheet-project-episodes-context/handler.js.map +1 -0
- package/dist/handlers/get-skill-sheet-project-episodes-context/index.js +2 -0
- package/dist/handlers/get-skill-sheet-project-episodes-context/index.js.map +1 -0
- package/dist/handlers/get-skill-sheet-project-episodes-context/tool.js +19 -0
- package/dist/handlers/get-skill-sheet-project-episodes-context/tool.js.map +1 -0
- package/dist/handlers/index.js +2 -4
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/save-pending-candidate/tool.js +1 -1
- package/dist/handlers/save-pending-candidate/tool.js.map +1 -1
- package/dist/handlers/search-memo/tool.js +2 -2
- package/dist/handlers/search-memo/tool.js.map +1 -1
- package/dist/handlers/update-memo/tool.js +1 -1
- package/dist/handlers/update-memo/tool.js.map +1 -1
- package/dist/handlers/update-pending-candidate/tool.js +1 -1
- package/dist/handlers/update-pending-candidate/tool.js.map +1 -1
- package/dist/handlers/update-skill-sheet-project-episodes/handler.js +99 -0
- package/dist/handlers/update-skill-sheet-project-episodes/handler.js.map +1 -0
- package/dist/handlers/update-skill-sheet-project-episodes/index.js +2 -0
- package/dist/handlers/update-skill-sheet-project-episodes/index.js.map +1 -0
- package/dist/handlers/update-skill-sheet-project-episodes/tool.js +58 -0
- package/dist/handlers/update-skill-sheet-project-episodes/tool.js.map +1 -0
- package/dist/handlers/upsert-skill-sheet-project/handler.js +6 -0
- package/dist/handlers/upsert-skill-sheet-project/handler.js.map +1 -1
- package/dist/handlers/upsert-skill-sheet-project/tool.js +9 -0
- package/dist/handlers/upsert-skill-sheet-project/tool.js.map +1 -1
- package/dist/plugin/skills/capture/SKILL.md +6 -6
- package/dist/plugin/skills/dashboard-analysis/SKILL.md +1 -1
- package/dist/plugin/skills/harvest/SKILL.md +5 -5
- package/dist/plugin/skills/principle-synthesizer/SKILL.md +7 -7
- package/dist/plugin/skills/project-episodes/SKILL.md +60 -0
- package/dist/plugin/skills/self-pr-draft/SKILL.md +37 -0
- package/dist/schemas/tool-input.js +42 -67
- package/dist/schemas/tool-input.js.map +1 -1
- package/dist/services/api/skill-sheet.js +3 -9
- package/dist/services/api/skill-sheet.js.map +1 -1
- package/dist/tool.js +3 -5
- package/dist/tool.js.map +1 -1
- package/docs/reviewer-guide.md +1 -1
- package/docs/tools.md +15 -21
- package/docs/usage-examples.md +28 -9
- package/package.json +1 -1
- package/dist/plugin/skills/project-summary/SKILL.md +0 -43
- package/dist/plugin/skills/public-profile-summary/SKILL.md +0 -73
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { handler } from './handler.js';
|
|
2
|
+
export const updateSkillSheetProjectEpisodesTool = {
|
|
3
|
+
definition: {
|
|
4
|
+
name: 'paput_update_skill_sheet_project_episodes',
|
|
5
|
+
description: 'Full-replace the AI-generated design-and-judgment episodes for a PaPut skill sheet project. Use only after the user explicitly approves the episode draft.',
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: 'object',
|
|
8
|
+
properties: {
|
|
9
|
+
project_id: {
|
|
10
|
+
type: 'number',
|
|
11
|
+
description: 'Project ID',
|
|
12
|
+
},
|
|
13
|
+
episodes: {
|
|
14
|
+
type: 'array',
|
|
15
|
+
description: 'Episodes to save. Pass an empty array to clear all project episodes. Maximum 5 episodes.',
|
|
16
|
+
maxItems: 5,
|
|
17
|
+
items: {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
claim: {
|
|
21
|
+
type: 'string',
|
|
22
|
+
maxLength: 200,
|
|
23
|
+
description: 'Required one-line claim for the episode, grounded in public linked memos.',
|
|
24
|
+
},
|
|
25
|
+
situation: {
|
|
26
|
+
type: 'string',
|
|
27
|
+
maxLength: 1000,
|
|
28
|
+
description: 'Optional situation context, 1-2 sentences.',
|
|
29
|
+
},
|
|
30
|
+
decision: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
maxLength: 1000,
|
|
33
|
+
description: 'Optional decision description, 1-2 sentences.',
|
|
34
|
+
},
|
|
35
|
+
reason: {
|
|
36
|
+
type: 'string',
|
|
37
|
+
maxLength: 1000,
|
|
38
|
+
description: 'Optional reason, 1-2 sentences.',
|
|
39
|
+
},
|
|
40
|
+
supporting_memo_ids: {
|
|
41
|
+
type: 'array',
|
|
42
|
+
minItems: 1,
|
|
43
|
+
description: 'Public memo IDs returned by the project episodes context tool that support this episode.',
|
|
44
|
+
items: {
|
|
45
|
+
type: 'number',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
required: ['claim', 'supporting_memo_ids'],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
required: ['project_id', 'episodes'],
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
handler,
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/update-skill-sheet-project-episodes/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,mCAAmC,GAAgB;IAC9D,UAAU,EAAE;QACV,IAAI,EAAE,2CAA2C;QACjD,WAAW,EACT,4JAA4J;QAC9J,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,YAAY;iBAC1B;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,OAAO;oBACb,WAAW,EACT,0FAA0F;oBAC5F,QAAQ,EAAE,CAAC;oBACX,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,SAAS,EAAE,GAAG;gCACd,WAAW,EACT,2EAA2E;6BAC9E;4BACD,SAAS,EAAE;gCACT,IAAI,EAAE,QAAQ;gCACd,SAAS,EAAE,IAAI;gCACf,WAAW,EAAE,4CAA4C;6BAC1D;4BACD,QAAQ,EAAE;gCACR,IAAI,EAAE,QAAQ;gCACd,SAAS,EAAE,IAAI;gCACf,WAAW,EAAE,+CAA+C;6BAC7D;4BACD,MAAM,EAAE;gCACN,IAAI,EAAE,QAAQ;gCACd,SAAS,EAAE,IAAI;gCACf,WAAW,EAAE,iCAAiC;6BAC/C;4BACD,mBAAmB,EAAE;gCACnB,IAAI,EAAE,OAAO;gCACb,QAAQ,EAAE,CAAC;gCACX,WAAW,EACT,0FAA0F;gCAC5F,KAAK,EAAE;oCACL,IAAI,EAAE,QAAQ;iCACf;6BACF;yBACF;wBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,qBAAqB,CAAC;qBAC3C;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;SACrC;KACF;IACD,OAAO;CACR,CAAC"}
|
|
@@ -88,6 +88,12 @@ function parseProjectParams(params) {
|
|
|
88
88
|
if (typeof params.mcp_alias === 'string') {
|
|
89
89
|
project.mcp_alias = params.mcp_alias;
|
|
90
90
|
}
|
|
91
|
+
if (Array.isArray(params.achievements)) {
|
|
92
|
+
if (!params.achievements.every((item) => typeof item === 'string')) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
project.achievements = params.achievements;
|
|
96
|
+
}
|
|
91
97
|
return project;
|
|
92
98
|
}
|
|
93
99
|
function isTechnology(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/upsert-skill-sheet-project/handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/handlers/upsert-skill-sheet-project/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -85,6 +85,15 @@ export const upsertSkillSheetProjectTool = {
|
|
|
85
85
|
required: ['id', 'title'],
|
|
86
86
|
},
|
|
87
87
|
},
|
|
88
|
+
achievements: {
|
|
89
|
+
type: 'array',
|
|
90
|
+
description: 'Achievement bullets owned by the user. Omit to keep existing values; pass an empty array to clear them. Maximum 10 items, 100 characters each.',
|
|
91
|
+
maxItems: 10,
|
|
92
|
+
items: {
|
|
93
|
+
type: 'string',
|
|
94
|
+
maxLength: 100,
|
|
95
|
+
},
|
|
96
|
+
},
|
|
88
97
|
},
|
|
89
98
|
required: [
|
|
90
99
|
'type',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/upsert-skill-sheet-project/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,2BAA2B,GAAgB;IACtD,UAAU,EAAE;QACV,IAAI,EAAE,kCAAkC;QACxC,WAAW,EACT,sJAAsJ;QACxJ,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yDAAyD;iBAC5D;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;iBACpD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,eAAe;iBAC7B;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gGAAgG;iBACnG;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gCAAgC;iBAC9C;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qBAAqB;iBACnC;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,MAAM;iBACpB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,mBAAmB;oBAChC,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE;gCACF,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,0CAA0C;6BACxD;4BACD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,iBAAiB;6BAC/B;yBACF;wBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;qBACnB;iBACF;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO;oBACb,WAAW,EACT,wHAAwH;oBAC1H,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;qBACf;iBACF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,eAAe;oBAC5B,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE;gCACF,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,SAAS;6BACvB;4BACD,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,YAAY;6BAC1B;yBACF;wBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;qBAC1B;iBACF;aACF;YACD,QAAQ,EAAE;gBACR,MAAM;gBACN,OAAO;gBACP,cAAc;gBACd,aAAa;gBACb,MAAM;gBACN,OAAO;gBACP,cAAc;gBACd,WAAW;gBACX,OAAO;aACR;SACF;KACF;IACD,OAAO;CACR,CAAC"}
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../../src/handlers/upsert-skill-sheet-project/tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,CAAC,MAAM,2BAA2B,GAAgB;IACtD,UAAU,EAAE;QACV,IAAI,EAAE,kCAAkC;QACxC,WAAW,EACT,sJAAsJ;QACxJ,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,yDAAyD;iBAC5D;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,sCAAsC;iBACpD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,eAAe;iBAC7B;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EACT,gGAAgG;iBACnG;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gCAAgC;iBAC9C;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,qBAAqB;iBACnC;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,MAAM;iBACpB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uBAAuB;iBACrC;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,mBAAmB;oBAChC,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE;gCACF,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,0CAA0C;6BACxD;4BACD,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,iBAAiB;6BAC/B;yBACF;wBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;qBACnB;iBACF;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,OAAO;oBACb,WAAW,EACT,wHAAwH;oBAC1H,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;qBACf;iBACF;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,eAAe;oBAC5B,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,EAAE,EAAE;gCACF,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,SAAS;6BACvB;4BACD,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,YAAY;6BAC1B;yBACF;wBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;qBAC1B;iBACF;gBACD,YAAY,EAAE;oBACZ,IAAI,EAAE,OAAO;oBACb,WAAW,EACT,gJAAgJ;oBAClJ,QAAQ,EAAE,EAAE;oBACZ,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,SAAS,EAAE,GAAG;qBACf;iBACF;aACF;YACD,QAAQ,EAAE;gBACR,MAAM;gBACN,OAAO;gBACP,cAAc;gBACd,aAAa;gBACb,MAAM;gBACN,OAAO;gBACP,cAAc;gBACd,WAAW;gBACX,OAAO;aACR;SACF;KACF;IACD,OAAO;CACR,CAAC"}
|
|
@@ -41,7 +41,7 @@ Extract reusable knowledge candidates from the current conversation or a user-sp
|
|
|
41
41
|
|
|
42
42
|
## Memo Type
|
|
43
43
|
|
|
44
|
-
Classify each candidate with one or more memo types via `memo_type_keys`. A memo can have several. This axis is what lets PaPut surface judgment and practices in
|
|
44
|
+
Classify each candidate with one or more memo types via `memo_type_keys`. A memo can have several. This axis is what lets PaPut surface judgment and practices in project episodes, self PR drafting, and analysis, so classify deliberately.
|
|
45
45
|
|
|
46
46
|
Typing is a reading step, not a writing step. Classify only after the body is final, and only from what the body already says. Never add headings, criteria sections, or choice wording to the body to justify a type — if a type fits only after such an edit, the type does not fit.
|
|
47
47
|
|
|
@@ -53,10 +53,10 @@ Typing is a reading step, not a writing step. Classify only after the body is fi
|
|
|
53
53
|
Guidance:
|
|
54
54
|
|
|
55
55
|
- Capture candidates are reusable decision criteria, procedures, or principles, so prefer `decision` / `operation` / `principle` when they fit; use `knowledge` for commodity technical know-how.
|
|
56
|
-
- `decision` / `operation` / `principle` are the primary material for
|
|
56
|
+
- `decision` / `operation` / `principle` are the primary material for durable judgment and working-practice summaries; `knowledge` usually is not.
|
|
57
57
|
- Tagging review — do not under-label. The default failure mode is dropping a judgment memo into `knowledge` and missing `decision` / `operation` / `principle`; this is a main reason the `principle` axis stays thin. Consider the durable three FIRST and use `knowledge` only when none genuinely fit. Quick catches: a stated reason for choosing or avoiding an option → `decision`; an operating practice (how you measure, review, run, or verify) → `operation`; a generalized stance one level above a single decision → `principle`. Before finalizing `memo_type_keys`, re-read the candidate once and ask "is there a judgment here that I labeled as mere knowledge?". Do not over-correct either: `principle` needs an explicitly generalized stance, not a one-off opinion — keep it honest against the Quality Bar.
|
|
58
58
|
- Do not over-label `decision` — it requires a judgment that actually happened, recorded in the body: an option taken, an alternative rejected, or a tradeoff resolved. A criteria-style heading, or a list of options with no record of what was chosen, does not make a memo a `decision`; plain library, API, or service behavior stays `knowledge` even when written as guidance.
|
|
59
|
-
- AI-collaboration practices and
|
|
59
|
+
- AI-collaboration practices and postures belong here, not in the reject pile: how you structure a task or spec for an AI, your review discipline for AI-generated changes, where you verify versus trust AI output, when you delegate versus do it yourself. Capture the reusable practice as `operation` or the stated stance as `principle` — generalized so it would hold with a different AI tool, on a different project, for someone else to learn. This is the scarcest, most durable axis; do not drop it as workflow chatter.
|
|
60
60
|
- Leaving a candidate unclassified (no type) is allowed, but classifying it improves analysis and the public profile. Do not force a type when none fits.
|
|
61
61
|
|
|
62
62
|
## Eliciting scarce operating practices (eval / observability)
|
|
@@ -75,7 +75,7 @@ Generalize one level above the project: drop service, metric, and dashboard name
|
|
|
75
75
|
|
|
76
76
|
## Eliciting prompt-derived judgment
|
|
77
77
|
|
|
78
|
-
The user's own prompts in the current conversation are first-party evidence of judgment. Corrections, constraints, repeated instructions, and choices among AI-presented options often reveal reusable operating practices or
|
|
78
|
+
The user's own prompts in the current conversation are first-party evidence of judgment. Corrections, constraints, repeated instructions, and choices among AI-presented options often reveal reusable operating practices or postures before they appear in the final artifact. When the conversation includes this signal, do not treat it as disposable task wording: actively draw out the reusable judgment and capture it as `operation`, `principle`, or `decision` as appropriate.
|
|
79
79
|
|
|
80
80
|
Draw out only what fits the conversation — do not interrogate:
|
|
81
81
|
|
|
@@ -84,7 +84,7 @@ Draw out only what fits the conversation — do not interrogate:
|
|
|
84
84
|
- Is the user repeating nearly the same boilerplate instruction? If it is project-specific, route it to a project document as a `procedure` through Check 1; if it is cross-project, capture the practice as `operation` in pending through Check 2.
|
|
85
85
|
- Did the AI present options, and did the user choose, reject, or combine them with a reason? That reason is `decision` material.
|
|
86
86
|
|
|
87
|
-
Generalize one level above the prompt: keep the judgment criterion, operating practice, stance, or repeatable procedure; drop local paths, project names, customer details, and exact task facts. Short verbatim phrasing from the user may be preserved for authenticity, but pending candidates must not include sensitive or project-specific content. A one-off "fix this" or "run tests" instruction is a work log, not knowledge, unless it exposes a reusable judgment criterion, operating practice, or procedure. Project-specific repeated instructions belong in project documents (`procedure`, Check 1); cross-project practices and
|
|
87
|
+
Generalize one level above the prompt: keep the judgment criterion, operating practice, stance, or repeatable procedure; drop local paths, project names, customer details, and exact task facts. Short verbatim phrasing from the user may be preserved for authenticity, but pending candidates must not include sensitive or project-specific content. A one-off "fix this" or "run tests" instruction is a work log, not knowledge, unless it exposes a reusable judgment criterion, operating practice, or procedure. Project-specific repeated instructions belong in project documents (`procedure`, Check 1); cross-project practices and postures belong in pending candidates (Check 2).
|
|
88
88
|
|
|
89
89
|
## Quality Bar
|
|
90
90
|
|
|
@@ -104,7 +104,7 @@ Prefer generalized but concrete writing:
|
|
|
104
104
|
Do not add these to pending:
|
|
105
105
|
|
|
106
106
|
- Project-specific specifications, screen names, button names, business workflows, operational rules, or local context.
|
|
107
|
-
- One-off tool mechanics or configuration: editor / OS / CLI settings, keybindings, which button was clicked, model- or version-specific quirks, project-specific CI wiring, or anecdotes about a single session (for example, "the AI got confused here"). These are commodity even when they mention AI tools — capture the reusable practice or stance instead, not the mechanics. Reusable AI-collaboration practices and
|
|
107
|
+
- One-off tool mechanics or configuration: editor / OS / CLI settings, keybindings, which button was clicked, model- or version-specific quirks, project-specific CI wiring, or anecdotes about a single session (for example, "the AI got confused here"). These are commodity even when they mention AI tools — capture the reusable practice or stance instead, not the mechanics. Reusable AI-collaboration practices and postures ARE worth capturing (see the AI-collaboration note under Memo Type); do not discard them as workflow chatter.
|
|
108
108
|
- Content that third parties cannot understand from the title and body alone.
|
|
109
109
|
- Rejected designs, anecdotes, work logs, impressions, or decision histories without reusable guidance.
|
|
110
110
|
- Content semantically close to existing memos or pending candidates.
|
|
@@ -6,7 +6,7 @@ description: Use this to analyze the user's PaPut dashboard, goals, skill sheet,
|
|
|
6
6
|
|
|
7
7
|
Analyze the user's PaPut dashboard and goals. Use this skill when the user asks about dashboard analysis, goals, progress, strengths, weak areas, next learning topics, or career-history phrasing.
|
|
8
8
|
|
|
9
|
-
Read the user through the JUDGMENT axis, not raw volume. The durable, hard-to-commoditize part of what they accumulate is their judgment and practice — captured as `memo_type`: `decision` (judgment criteria), `operation` (operating practices), `principle` (stated
|
|
9
|
+
Read the user through the JUDGMENT axis, not raw volume. The durable, hard-to-commoditize part of what they accumulate is their judgment and practice — captured as `memo_type`: `decision` (judgment criteria), `operation` (operating practices), `principle` (stated principles). `knowledge` is commodity. `structuredContent.dashboard_summary.memo_type_counts` holds the per-type accumulation; assess the user by how thick those three durable axes are, with categories as a secondary lens for the domains they work in.
|
|
10
10
|
|
|
11
11
|
The judgment axis is the LENS, not a replacement for goal analysis. The dashboard's core job is "where am I against my goals", so keep goals first-class: read each active goal THROUGH the axis — which judgment/practice/principle axis that goal requires, and whether that axis is currently thick or thin. Do not drop the goal overview in favor of axis-only talk.
|
|
12
12
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Use this to harvest reusable knowledge from past local Claude/Codex sessions when the AI client can read local files. Safe to run repeatedly — it skips already-processed sessions and only reviews new ones — so use it both for first-time onboarding and for periodic catch-up. Pay special attention to AI-collaboration practices and
|
|
2
|
+
description: Use this to harvest reusable knowledge from past local Claude/Codex sessions when the AI client can read local files. Safe to run repeatedly — it skips already-processed sessions and only reviews new ones — so use it both for first-time onboarding and for periodic catch-up. Pay special attention to AI-collaboration practices and postures (operation / principle), the scarce, durable axis.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# PaPut Harvest
|
|
@@ -44,7 +44,7 @@ periodic catch-up. There is no separate "init" step.
|
|
|
44
44
|
Draft each body first, structured to fit the content itself — do not shape
|
|
45
45
|
it around memo types. Then set `memo_type_keys` from the finalized body
|
|
46
46
|
(see Memo Type below); classify AI-collaboration practices as `operation`
|
|
47
|
-
and
|
|
47
|
+
and postures as `principle`.
|
|
48
48
|
9. If the session was reviewed but no candidates should be added, call
|
|
49
49
|
`paput_mark_processed_session` with `source`, `session_id`, and
|
|
50
50
|
`source_session_updated_at`.
|
|
@@ -83,7 +83,7 @@ Structure each candidate body to fit its content. Do not impose a judgment-memo
|
|
|
83
83
|
|
|
84
84
|
### Capture the AI-collaboration axis
|
|
85
85
|
|
|
86
|
-
Reusable AI-collaboration practices and
|
|
86
|
+
Reusable AI-collaboration practices and postures are first-class material here —
|
|
87
87
|
they are the scarcest, most durable axis and are easy to discard by mistake.
|
|
88
88
|
Capture them as `operation` (practice) or `principle` (stance). Examples:
|
|
89
89
|
|
|
@@ -148,7 +148,7 @@ but pending candidates must not include sensitive or project-specific content. A
|
|
|
148
148
|
one-off "fix this" or "run tests" instruction is a work log — exclude it unless
|
|
149
149
|
the prompt reveals a reusable judgment criterion, operating practice, or
|
|
150
150
|
procedure. Route project-specific repeated instructions to project documents
|
|
151
|
-
(`procedure`, Check 1); route cross-project practices and
|
|
151
|
+
(`procedure`, Check 1); route cross-project practices and postures to pending
|
|
152
152
|
candidates (Check 2).
|
|
153
153
|
|
|
154
154
|
### Do not add these to pending
|
|
@@ -169,7 +169,7 @@ Classify each candidate with one or more memo types via `memo_type_keys`:
|
|
|
169
169
|
|
|
170
170
|
- `decision`: reusable judgment criteria independent of any project.
|
|
171
171
|
- `operation`: operating practices — observability, eval, testing, review, and how you direct and verify AI collaboration.
|
|
172
|
-
- `principle`: a stance you have explicitly stated, generalized above individual decisions, including
|
|
172
|
+
- `principle`: a stance you have explicitly stated, generalized above individual decisions, including postures on how to work with AI.
|
|
173
173
|
- `knowledge`: commodity technical know-how, usage, or implementation knowledge.
|
|
174
174
|
|
|
175
175
|
`decision` / `operation` / `principle` are the primary material for the public
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Use this to synthesize cross-cutting principle candidates from the user's accumulated public decision/operation memos (and private design docs) and add them to pending. It surfaces the
|
|
2
|
+
description: Use this to synthesize cross-cutting principle candidates from the user's accumulated public decision/operation memos (and private design docs) and add them to pending. It surfaces the postures that run through many decisions — the thinnest, most AI-durable memo type — which the per-conversation paput-capture cannot reach. It only proposes to pending; it never saves to PaPut.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# PaPut Principle Synthesizer
|
|
6
6
|
|
|
7
|
-
Synthesize `principle` candidates by reading the user's accumulated `decision` / `operation` memos (and, as substrate, their private `design_doc` project documents) as a whole, finding the
|
|
7
|
+
Synthesize `principle` candidates by reading the user's accumulated `decision` / `operation` memos (and, as substrate, their private `design_doc` project documents) as a whole, finding the postures that run through many of them, and proposing each as a `principle` pending candidate.
|
|
8
8
|
|
|
9
|
-
A `principle` is a stance explicitly generalized one level above individual decisions — what the person optimizes for and what they reject across cases. It rarely falls out of a single conversation, so `paput-capture` (which works per session) structurally under-produces it. This skill fills that gap by working across the whole accumulated corpus
|
|
9
|
+
A `principle` is a stance explicitly generalized one level above individual decisions — what the person optimizes for and what they reject across cases. It rarely falls out of a single conversation, so `paput-capture` (which works per session) structurally under-produces it. This skill fills that gap by working across the whole accumulated corpus and turns the cross-cutting synthesis into reusable `principle` material.
|
|
10
10
|
|
|
11
11
|
Use this when the user wants to thicken their `principle` memos, distill recurring decisions into stated principles, or refresh principle candidates from accumulated knowledge.
|
|
12
12
|
|
|
13
13
|
## Workflow
|
|
14
14
|
|
|
15
15
|
1. Gather the material:
|
|
16
|
-
-
|
|
16
|
+
- Use `paput_search_memo` with `is_public: true` and `memo_type: decision`, then repeat with `memo_type: operation` and `memo_type: principle`. Page through results as needed. The `decision` / `operation` entries are the synthesis material; existing `principle` entries are the de-dup baseline.
|
|
17
17
|
- As substrate, call `paput_get_project_context` and read the `design_doc` documents in the index with `paput_get_project_document(id)`. Design docs hold decisions with reasons and rejected alternatives — strong principle material — but they are private and project-specific.
|
|
18
18
|
2. Read the bodies of the memos you plan to cluster with `paput_get_memo` (index first, fetch on demand — do not bulk-fetch everything).
|
|
19
19
|
3. Cluster across documents by theme. Look for a stance that runs through SEVERAL decisions/operations (and design-doc decisions), not a single memo restated.
|
|
20
|
-
- First, sweep the WHOLE index and enumerate EVERY distinct cross-cutting theme the corpus supports — do not stop at the few most obvious (e.g. security / concurrency) clusters. Aim to cover the corpus. Commonly-missed but high-value axes include: operating practices (observability, eval, testing validity), AI / automation collaboration
|
|
20
|
+
- First, sweep the WHOLE index and enumerate EVERY distinct cross-cutting theme the corpus supports — do not stop at the few most obvious (e.g. security / concurrency) clusters. Aim to cover the corpus. Commonly-missed but high-value axes include: operating practices (observability, eval, testing validity), AI / automation collaboration postures (treating model output as a soft signal, where to delegate generation), retrieval / routing separation, reversibility and incremental change, error-handling and failure semantics. Scan for these explicitly so the scarce axes are not dropped.
|
|
21
21
|
- Make the clusters DISJOINT: assign each source memo to the ONE principle it best anchors, not to several. If two themes overlap heavily or keep pulling the same memos, treat them as ONE cluster, or draw a sharp line so each cluster owns a distinct slice.
|
|
22
22
|
4. Synthesize each qualifying cluster into one `principle` candidate:
|
|
23
23
|
- One cluster → one coherent stance with a SINGLE throughline (one "optimize X over Y"). Every sub-point in the body must be a facet of that one posture. If you find yourself writing "and also…" about a different concern, that is a second principle — split it out or drop the weaker thread. Do not bundle two or three loosely-related ideas under an umbrella title.
|
|
@@ -29,7 +29,7 @@ Use this when the user wants to thicken their `principle` memos, distill recurri
|
|
|
29
29
|
- Merging is only for OVERLAPPING themes. It must NOT shrink the number of distinct themes you cover. "Fewer per theme" (no duplicates within a theme) is not "fewer themes" — never drop a genuine distinct cross-cutting stance just to keep the count small. Then re-check against the enumeration in step 3: if a distinct theme you found is not represented by any candidate, add it.
|
|
30
30
|
6. De-dup against existing memos before adding:
|
|
31
31
|
- For each candidate, call `paput_find_similar_memos` (it searches all of the user's memos, public and private). Treat a top score of ~0.85 or higher against an existing memo as a near-duplicate and skip it.
|
|
32
|
-
- Also compare against the existing `principle` entries
|
|
32
|
+
- Also compare against the existing public `principle` entries returned by `paput_search_memo`, and check `paput_list_pending_candidates` so you do not duplicate a pending candidate.
|
|
33
33
|
7. Add only the non-duplicate, mutually-distinct, generalized, project-independent candidates with `paput_add_knowledge_candidates` (memo_type_keys=['principle']). Add to pending only.
|
|
34
34
|
8. Report each added candidate: title, categories, memo type, candidate id, and the source memos it was synthesized from.
|
|
35
35
|
9. Do NOT save to PaPut. Saving a pending candidate is handled by `paput-save`, only when the user explicitly approves it.
|
|
@@ -39,7 +39,7 @@ Use this when the user wants to thicken their `principle` memos, distill recurri
|
|
|
39
39
|
- A `principle` must run through at least two or three decisions/operations. A single decision reworded is NOT a principle — drop it (or leave it as the decision memo it already is).
|
|
40
40
|
- One principle = one throughline. The title must name ONE posture, not an umbrella over several. If the body covers two or three loosely-related concerns, it is a grab-bag — split it into separate principles or drop the weakest thread. Test: can you state it as a single "optimize X, reject Y"? If you need "and also…" about an unrelated concern, it is two principles.
|
|
41
41
|
- Make principles mutually distinct. Do NOT emit two candidates that share most of their source memos or whose statements overlap. When that happens, merge them, or assign each shared memo to the single principle it best anchors and keep the two scopes disjoint. A source memo should anchor one principle, not back two.
|
|
42
|
-
- Cover the corpus. Surface EVERY distinct cross-cutting stance the material supports, not just the first few strong clusters. The disjointness and merge rules reduce duplicates WITHIN a theme; they must not reduce the number of themes. Watch for the scarce, high-value axes that are easy to skip once the security / concurrency clusters are formed — AI / automation collaboration
|
|
42
|
+
- Cover the corpus. Surface EVERY distinct cross-cutting stance the material supports, not just the first few strong clusters. The disjointness and merge rules reduce duplicates WITHIN a theme; they must not reduce the number of themes. Watch for the scarce, high-value axes that are easy to skip once the security / concurrency clusters are formed — AI / automation collaboration postures, operating practices (observability, eval, testing), and reversibility / incremental change. If the corpus clearly supports such a stance and no candidate covers it, that is under-coverage — add it.
|
|
43
43
|
- Example — grab-bag (avoid): "Advance changes reversibly and in minimal scope, don't rush first-classing until a consumer actually exists, and don't distort the official recommendation for the sake of an immature dependency" bundles three concerns. Split: (1) reversible/incremental change, (2) defer first-classing until a consumer exists. Drop the unrelated "don't distort the official recommendation" to its own memo.
|
|
44
44
|
- Example — overlap (avoid): one principle about "separating retrieval routes by purpose" and another about "AI judgments as soft signals" both leaning on the same memos. Keep route-separation in the first and move all AI-judgment material to the second so neither bleeds.
|
|
45
45
|
- Generalize. Remove project-specific specifications, screen names, code, identifiers, and secrets. The body must be reusable in another project from its title and text alone.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Use this to draft and optionally save design-and-judgment episodes for a PaPut skill sheet project from the project's public linked memos. Trigger when the user asks to generate, refresh, or save project episodes, project judgment episodes, or the "design and judgment" section for a skill sheet project.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# PaPut Project Episodes
|
|
6
|
+
|
|
7
|
+
Draft project episodes for the skill sheet project detail page. Episodes explain what the user chose, what they rejected, and why, backed by public linked memos.
|
|
8
|
+
|
|
9
|
+
## Workflow
|
|
10
|
+
|
|
11
|
+
1. Identify the target project ID.
|
|
12
|
+
- If the user gives a project ID, use it.
|
|
13
|
+
- If the user gives a project name, call `paput_get_skill_sheet` and choose the matching project.
|
|
14
|
+
- If the user does not specify a project, call `paput_get_skill_sheet`, show concise project candidates, and ask the user to choose one.
|
|
15
|
+
- Ask a concise clarification only when no project is specified or the match is ambiguous.
|
|
16
|
+
2. Call `paput_get_skill_sheet_project_episodes_context` with `project_id`.
|
|
17
|
+
3. Read `structuredContent.public_memos` and cluster the public linked memos by decision or operating-practice theme.
|
|
18
|
+
4. Draft 2-3 episodes when the material supports them. Generate fewer, or none, when the public memos are thin.
|
|
19
|
+
5. Present the draft in the user's language and tone, together with the achievements draft (see "Achievements Draft" below). Explain that each episode will become the project's "design and judgment" section.
|
|
20
|
+
6. Do not save unless the user explicitly asks to save, update, or apply the episodes.
|
|
21
|
+
7. If the user asks to save, call `paput_update_skill_sheet_project_episodes` with the approved `project_id` and `episodes`.
|
|
22
|
+
8. Report any `dropped_ids` from the save response. If a saved episode has no resolved public supporting memos, tell the user it may be hidden on the public profile.
|
|
23
|
+
9. Verify the saved result with `paput_get_skill_sheet`.
|
|
24
|
+
|
|
25
|
+
## Episode Shape
|
|
26
|
+
|
|
27
|
+
Each episode has:
|
|
28
|
+
|
|
29
|
+
- `claim`: one visible lead line. Use recruiter/interviewer-level vocabulary and preserve the meaningful contrast when the source supports it: what was chosen over what was rejected.
|
|
30
|
+
- `situation`: 1-2 sentences describing the context.
|
|
31
|
+
- `decision`: 1-2 sentences describing the choice.
|
|
32
|
+
- `reason`: 1-2 sentences explaining why that choice was made.
|
|
33
|
+
- `supporting_memo_ids`: one or more public linked memo IDs returned by the context tool.
|
|
34
|
+
|
|
35
|
+
## Material Rules
|
|
36
|
+
|
|
37
|
+
- Use only `structuredContent.public_memos` from `paput_get_skill_sheet_project_episodes_context` as episode evidence.
|
|
38
|
+
- Private linked memos are returned only as `private_memo_count`. Do not infer claims from private memo bodies.
|
|
39
|
+
- Prefer `decision` and `operation` memos. Use `knowledge` memos only as background.
|
|
40
|
+
- Do not use unrelated memos, goals, private dashboard analysis, or project documents as episode evidence.
|
|
41
|
+
- Do not invent memo IDs, technologies, responsibilities, impact, dates, or team scale.
|
|
42
|
+
- Do not treat memo count as proof of ability.
|
|
43
|
+
- If public linked memos do not support a claim, drop the claim.
|
|
44
|
+
- If the material is thin, say what is missing and suggest capturing or publishing better project-linked decision/operation memos.
|
|
45
|
+
|
|
46
|
+
## Achievements Draft (always propose)
|
|
47
|
+
|
|
48
|
+
Always propose an `achievements` draft alongside the episodes draft: 3-5 factual bullets (max 100 characters each, max 10 total) describing what was built and is running, grounded in the project description and public linked memos.
|
|
49
|
+
|
|
50
|
+
- Achievements are user-owned source material, not generated evidence. Present them as a draft for the user to edit and approve, and keep them factual: no judgment narrative (that belongs to episodes) and no invented metrics.
|
|
51
|
+
- Use `paput_upsert_skill_sheet_project` to save achievements only after explicit approval. Saving episodes and saving achievements are separate tool calls; the user may approve one and not the other.
|
|
52
|
+
- Omit `achievements` when calling `paput_upsert_skill_sheet_project` if the user wants to keep existing bullets. Pass `achievements: []` only when the user explicitly wants to clear them.
|
|
53
|
+
|
|
54
|
+
## Rules
|
|
55
|
+
|
|
56
|
+
- Do not claim that paput-mcp generated the episodes. The MCP client AI performs the drafting.
|
|
57
|
+
- Do not save a draft automatically.
|
|
58
|
+
- Every saved episode must have at least one `supporting_memo_id`.
|
|
59
|
+
- The public API filters supporting memo IDs to the user's own public memos. Dropped IDs mean the evidence was not public, not owned, or unavailable.
|
|
60
|
+
- Keep the tone factual and suitable for a skill sheet or career history.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Use this to draft a first-person self PR for the PaPut skill sheet from existing profile, skills, projects, project episodes, achievements, and public decision/operation/principle memos. It presents a draft first and saves only when the user explicitly asks.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# PaPut Self PR Draft
|
|
6
|
+
|
|
7
|
+
Draft the `self_pr` section of the PaPut skill sheet. This skill is draft-first: it does not save unless the user explicitly asks to save, update, or apply the final text.
|
|
8
|
+
|
|
9
|
+
## Workflow
|
|
10
|
+
|
|
11
|
+
1. Call `paput_get_skill_sheet`.
|
|
12
|
+
2. Review the basic profile, skills, projects, project `episodes`, project `achievements`, and current `self_pr`.
|
|
13
|
+
3. Gather additional public memo evidence only when needed:
|
|
14
|
+
- Use `paput_search_memo` with `is_public: true` and `memo_type: decision`, `operation`, or `principle`.
|
|
15
|
+
- Fetch full bodies with `paput_get_memo` only for the memos you actually need.
|
|
16
|
+
4. Draft a first-person self PR in the user's language.
|
|
17
|
+
5. Present the draft and ask the user to edit or approve it.
|
|
18
|
+
6. Do not save unless the user explicitly asks to save, update, or apply it.
|
|
19
|
+
7. If the user asks to save, call `paput_update_skill_sheet_self_pr` with the approved text.
|
|
20
|
+
8. Verify the saved result with `paput_get_skill_sheet`.
|
|
21
|
+
|
|
22
|
+
## Drafting Guidance
|
|
23
|
+
|
|
24
|
+
- Target a recruiter or interviewer reading the skill sheet.
|
|
25
|
+
- In Japanese, aim for about 300-600 characters unless the user asks for a different length. Use a comparable short professional length in other languages.
|
|
26
|
+
- Write in first person when that fits the user's language and tone.
|
|
27
|
+
- Anchor the text in projects, episodes, achievements, and public decision/operation/principle memos.
|
|
28
|
+
- Emphasize judgment, trade-offs, and operating practices when the evidence supports them.
|
|
29
|
+
- Keep technologies and domains concrete, but do not turn the self PR into a stack inventory.
|
|
30
|
+
|
|
31
|
+
## Rules
|
|
32
|
+
|
|
33
|
+
- Do not use private dashboard analysis, goals, or private memos unless the user explicitly provides them in the conversation.
|
|
34
|
+
- Do not invent outcomes, metrics, responsibilities, or years of experience.
|
|
35
|
+
- Do not present memo counts as proof of ability.
|
|
36
|
+
- Do not save automatically.
|
|
37
|
+
- If the material is thin, produce a conservative draft and say what evidence would improve it.
|
|
@@ -57,6 +57,37 @@ const skillSheetProjectSchema = z.object({
|
|
|
57
57
|
.array(z.number())
|
|
58
58
|
.describe('Development process IDs: 1 requirements, 2 basic design, 3 detailed design, 4 implementation, 5 testing, 6 maintenance'),
|
|
59
59
|
memos: z.array(skillSheetMemoSchema).describe('Related memos'),
|
|
60
|
+
achievements: z
|
|
61
|
+
.array(z.string().max(100).describe('Achievement bullet, max 100 characters'))
|
|
62
|
+
.max(10)
|
|
63
|
+
.describe('Achievement bullets owned by the user. Omit to keep existing values; pass an empty array to clear them.')
|
|
64
|
+
.optional(),
|
|
65
|
+
});
|
|
66
|
+
const skillSheetProjectEpisodeSchema = z.object({
|
|
67
|
+
claim: z
|
|
68
|
+
.string()
|
|
69
|
+
.min(1)
|
|
70
|
+
.max(200)
|
|
71
|
+
.describe('Required one-line claim for the episode, grounded in public linked memos'),
|
|
72
|
+
situation: z
|
|
73
|
+
.string()
|
|
74
|
+
.max(1000)
|
|
75
|
+
.describe('Optional situation context, 1-2 sentences')
|
|
76
|
+
.optional(),
|
|
77
|
+
decision: z
|
|
78
|
+
.string()
|
|
79
|
+
.max(1000)
|
|
80
|
+
.describe('Optional decision description, 1-2 sentences')
|
|
81
|
+
.optional(),
|
|
82
|
+
reason: z
|
|
83
|
+
.string()
|
|
84
|
+
.max(1000)
|
|
85
|
+
.describe('Optional reason, 1-2 sentences')
|
|
86
|
+
.optional(),
|
|
87
|
+
supporting_memo_ids: z
|
|
88
|
+
.array(z.number())
|
|
89
|
+
.min(1)
|
|
90
|
+
.describe('Public memo IDs returned by the project episodes context tool that support this episode'),
|
|
60
91
|
});
|
|
61
92
|
const knowledgeCandidateSchema = z.object({
|
|
62
93
|
title: z.string(),
|
|
@@ -138,6 +169,10 @@ const toolInputSchemas = {
|
|
|
138
169
|
paput_search_memo: z.object({
|
|
139
170
|
word: z.string().describe('Search keyword').optional(),
|
|
140
171
|
category_id: z.number().describe('Category ID').optional(),
|
|
172
|
+
memo_type: z
|
|
173
|
+
.enum(['knowledge', 'decision', 'operation', 'principle'])
|
|
174
|
+
.describe('Memo type filter')
|
|
175
|
+
.optional(),
|
|
141
176
|
ids: z.array(z.number()).describe('Memo IDs').optional(),
|
|
142
177
|
date: z.string().describe('Date in YYYY-MM-DD format').optional(),
|
|
143
178
|
is_public: z.boolean().describe('Visibility filter').optional(),
|
|
@@ -231,68 +266,6 @@ const toolInputSchemas = {
|
|
|
231
266
|
paput_update_skill_sheet_self_pr: z.object({
|
|
232
267
|
self_pr: z.string().describe('Self PR text').optional(),
|
|
233
268
|
}),
|
|
234
|
-
paput_update_skill_sheet_public_profile: z.object({
|
|
235
|
-
headline: z
|
|
236
|
-
.string()
|
|
237
|
-
.describe('One-line catchphrase summarizing the user')
|
|
238
|
-
.optional(),
|
|
239
|
-
profile_summary: z
|
|
240
|
-
.string()
|
|
241
|
-
.describe('Multi-line overall summary of the user')
|
|
242
|
-
.optional(),
|
|
243
|
-
strength_labels: z
|
|
244
|
-
.array(z.object({
|
|
245
|
-
label: z.string().describe('Strength label name'),
|
|
246
|
-
description: z.string().describe('Strength description').optional(),
|
|
247
|
-
category_names: z
|
|
248
|
-
.array(z.string())
|
|
249
|
-
.describe('Related category names')
|
|
250
|
-
.optional(),
|
|
251
|
-
project_ids: z
|
|
252
|
-
.array(z.string())
|
|
253
|
-
.describe('Related project IDs')
|
|
254
|
-
.optional(),
|
|
255
|
-
supporting_memo_ids: z
|
|
256
|
-
.array(z.number())
|
|
257
|
-
.describe('Public memo IDs that back this strength. Use only public decision/operation/principle memo IDs from the index; non-public or non-owned IDs are dropped server-side.')
|
|
258
|
-
.optional(),
|
|
259
|
-
}))
|
|
260
|
-
.describe('Array of strength labels')
|
|
261
|
-
.optional(),
|
|
262
|
-
stances: z
|
|
263
|
-
.array(z.object({
|
|
264
|
-
type: z
|
|
265
|
-
.enum(['decision', 'operation'])
|
|
266
|
-
.describe('Which axis this stance belongs to'),
|
|
267
|
-
statement: z
|
|
268
|
-
.string()
|
|
269
|
-
.describe('One-line stance synthesized from decision/operation memos, in plain non-expert vocabulary a non-technical recruiter grasps in one read (no domain jargon or English technical terms in the line — those belong in the drill-down memos). Keep the rejected alternative ("B, not A"): weave in what was chosen and what was rejected; dissolve principle into the wording.'),
|
|
270
|
-
supporting_memo_ids: z
|
|
271
|
-
.array(z.number())
|
|
272
|
-
.describe('Public memo IDs backing this stance (the drill-down judgment cards). Use only public decision/operation/principle memo IDs from the index.')
|
|
273
|
-
.optional(),
|
|
274
|
-
}))
|
|
275
|
-
.describe('Stances (judgment and operating practices) shown as the lead of the AI Summary tab. Lead with 3-4 stances total with one clear anchor stance, ordered by strength; keep each line in plain non-expert vocabulary with its rejected-alternative intact.')
|
|
276
|
-
.optional(),
|
|
277
|
-
project_highlights: z
|
|
278
|
-
.array(z.object({
|
|
279
|
-
project_id: z.string().describe('Related project ID'),
|
|
280
|
-
title: z.string().describe('Project title'),
|
|
281
|
-
summary: z
|
|
282
|
-
.string()
|
|
283
|
-
.describe('Short public-profile summary for the project'),
|
|
284
|
-
strength_labels: z
|
|
285
|
-
.array(z.string())
|
|
286
|
-
.describe('Strength labels supported by the project')
|
|
287
|
-
.optional(),
|
|
288
|
-
achievement_bullets: z
|
|
289
|
-
.array(z.string())
|
|
290
|
-
.describe('Top achievement bullets for the project')
|
|
291
|
-
.optional(),
|
|
292
|
-
}))
|
|
293
|
-
.describe('Short project highlights shown on the AI Summary tab')
|
|
294
|
-
.optional(),
|
|
295
|
-
}),
|
|
296
269
|
paput_set_skill_sheet_skills: z.object({
|
|
297
270
|
skills: z.array(skillSchema).describe('Skill list'),
|
|
298
271
|
}),
|
|
@@ -300,12 +273,15 @@ const toolInputSchemas = {
|
|
|
300
273
|
paput_delete_skill_sheet_project: z.object({
|
|
301
274
|
project_id: z.number().describe('Project ID to delete'),
|
|
302
275
|
}),
|
|
303
|
-
|
|
276
|
+
paput_get_skill_sheet_project_episodes_context: z.object({
|
|
304
277
|
project_id: z.number().describe('Project ID'),
|
|
305
278
|
}),
|
|
306
|
-
|
|
279
|
+
paput_update_skill_sheet_project_episodes: z.object({
|
|
307
280
|
project_id: z.number().describe('Project ID'),
|
|
308
|
-
|
|
281
|
+
episodes: z
|
|
282
|
+
.array(skillSheetProjectEpisodeSchema)
|
|
283
|
+
.max(5)
|
|
284
|
+
.describe('Episodes to save. Pass an empty array to clear all project episodes.'),
|
|
309
285
|
}),
|
|
310
286
|
paput_list_goals: emptySchema,
|
|
311
287
|
paput_create_goal: goalInputSchema,
|
|
@@ -337,7 +313,6 @@ const toolInputSchemas = {
|
|
|
337
313
|
analyzed_at: z.string().describe('Analysis timestamp in ISO 8601 format'),
|
|
338
314
|
}),
|
|
339
315
|
paput_get_dashboard_analysis_context: emptySchema,
|
|
340
|
-
paput_get_public_profile_context: emptySchema,
|
|
341
316
|
paput_get_project_context: z.object({
|
|
342
317
|
project: z
|
|
343
318
|
.string()
|
|
@@ -455,7 +430,7 @@ const toolInputSchemas = {
|
|
|
455
430
|
.optional(),
|
|
456
431
|
memo_type_keys: z
|
|
457
432
|
.array(z.enum(['knowledge', 'decision', 'operation', 'principle']))
|
|
458
|
-
.describe('Memo type classification keys (a memo can have multiple). decision/operation/principle are the primary material for
|
|
433
|
+
.describe('Memo type classification keys (a memo can have multiple). decision/operation/principle are the primary material for durable judgment and working-practice summaries.')
|
|
459
434
|
.optional(),
|
|
460
435
|
confidence: z.number().describe('Confidence score').optional(),
|
|
461
436
|
is_public: z
|