@fprad0/skill-master-mcp 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +129 -10
  3. package/VERSION.md +3 -3
  4. package/bin/lib/menu-core.mjs +284 -2
  5. package/bin/skill-master-activation.mjs +163 -0
  6. package/bin/skill-master-bootstrap-global.mjs +35 -0
  7. package/bin/skill-master-eval-activation.mjs +32 -0
  8. package/bin/skill-master-install-global-skills.mjs +77 -0
  9. package/bin/skill-master-register-clients.mjs +154 -0
  10. package/bin/skill-master-success-skills.mjs +307 -0
  11. package/dist/activation-evals.d.ts +32 -0
  12. package/dist/activation-evals.d.ts.map +1 -0
  13. package/dist/activation-evals.js +116 -0
  14. package/dist/activation-evals.js.map +1 -0
  15. package/dist/domain-router.d.ts +11 -0
  16. package/dist/domain-router.d.ts.map +1 -0
  17. package/dist/domain-router.js +79 -0
  18. package/dist/domain-router.js.map +1 -0
  19. package/dist/index.js +460 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/moral-governance.d.ts +24 -0
  22. package/dist/moral-governance.d.ts.map +1 -0
  23. package/dist/moral-governance.js +143 -0
  24. package/dist/moral-governance.js.map +1 -0
  25. package/dist/prompt-router.d.ts +47 -0
  26. package/dist/prompt-router.d.ts.map +1 -0
  27. package/dist/prompt-router.js +324 -0
  28. package/dist/prompt-router.js.map +1 -0
  29. package/dist/success-learning.d.ts +147 -0
  30. package/dist/success-learning.d.ts.map +1 -0
  31. package/dist/success-learning.js +444 -0
  32. package/dist/success-learning.js.map +1 -0
  33. package/docs/architecture/APRENDIZADO_DE_IMPLEMENTACOES_BEM_SUCEDIDAS.md +125 -0
  34. package/docs/architecture/ARQUITETURA_AUTO_UPDATE.md +9 -0
  35. package/docs/architecture/PLANO_MASTER_ACIONAMENTO_AUTOMATICO_E_APRENDIZADO.md +341 -0
  36. package/docs/architecture/REDE_SEGURA_DE_SKILLS.md +148 -0
  37. package/docs/planning/V0_0_9_APROVACAO_CRITICA_MENSAGENS_DE_VENDA.md +85 -0
  38. package/docs/planning/V0_0_9_FONTES_E_CRITERIOS_DE_AUTORIDADE.md +139 -0
  39. package/docs/planning/V0_0_9_MATRIZ_SKILLS_MULTIDISCIPLINARES.md +105 -0
  40. package/docs/planning/V0_0_9_POLITICA_MORAL_CATOLICA_PARA_IA.md +181 -0
  41. package/docs/planning/V0_0_9_PROMPTS_EXECUCAO.md +59 -0
  42. package/docs/planning/V0_0_9_ROADMAP_DISCERNIMENTO_E_CONHECIMENTO_AMPLO.md +181 -0
  43. package/docs/skill-candidates/v0.0.9/ai-ethics-human-dignity/SKILL.md +32 -0
  44. package/docs/skill-candidates/v0.0.9/broad-domain-router/SKILL.md +41 -0
  45. package/docs/skill-candidates/v0.0.9/catholic-moral-discernment/SKILL.md +31 -0
  46. package/docs/skill-candidates/v0.0.9/engineering-systems-master/SKILL.md +31 -0
  47. package/docs/skill-candidates/v0.0.9/language-quality-pt-en-fr/SKILL.md +28 -0
  48. package/docs/skill-candidates/v0.0.9/math-science-reasoning/SKILL.md +29 -0
  49. package/docs/skill-candidates/v0.0.9/philosophy-sociology-discernment/SKILL.md +28 -0
  50. package/docs/skill-candidates/v0.0.9/professional-boundary-triage/SKILL.md +40 -0
  51. package/docs/skill-candidates/v0.0.9/release-ethics-gate/SKILL.md +32 -0
  52. package/docs/skill-candidates/v0.0.9/source-authority-reviewer/SKILL.md +31 -0
  53. package/manifests/channels/beta.json +7 -6
  54. package/manifests/channels/stable.json +8 -7
  55. package/network/approved-skills.json +51 -2
  56. package/network/unapproved-skill-candidates.json +77 -0
  57. package/package.json +13 -3
  58. package/sources.json +4 -1
@@ -0,0 +1,147 @@
1
+ import type { ApprovedSkillIndex } from './types.js';
2
+ declare const SUCCESS_SKILL_SCHEMA_VERSION = "skill-master-success-skill-v1";
3
+ declare const SUCCESS_LEARNING_POLICY_VERSION = "success-learning-human-approval-v1";
4
+ export type ExternalSkillCandidate = {
5
+ name: string;
6
+ description: string;
7
+ sourceUrl: string;
8
+ creatorName: string;
9
+ creatorUrl: string;
10
+ reviewStatus: 'pending-human-review' | 'approved' | 'blocked' | 'unapproved';
11
+ reason: string;
12
+ riskFlags: string[];
13
+ };
14
+ export type SuccessSkillDraft = {
15
+ schemaVersion: typeof SUCCESS_SKILL_SCHEMA_VERSION;
16
+ generatedAt: string;
17
+ policyVersion: typeof SUCCESS_LEARNING_POLICY_VERSION;
18
+ status: 'draft' | 'study' | 'rejected' | 'approved' | 'activated';
19
+ sourceImplementation: {
20
+ title: string;
21
+ summary: string;
22
+ sourceFiles: string[];
23
+ sourceUrls: string[];
24
+ };
25
+ candidateSkill: {
26
+ name: string;
27
+ description: string;
28
+ triggerPhrases: string[];
29
+ skillMarkdownFile: string;
30
+ contentHash: string;
31
+ };
32
+ evidence: {
33
+ reusablePattern: string;
34
+ implementationNotes: string[];
35
+ validationEvidence: string[];
36
+ };
37
+ governance: {
38
+ requiresHumanApproval: true;
39
+ approved: boolean;
40
+ approvedAt?: string;
41
+ approvedBy?: string;
42
+ approvalBlockers: string[];
43
+ riskFlags: string[];
44
+ };
45
+ creator?: {
46
+ name: string;
47
+ url?: string;
48
+ };
49
+ externalCandidates: ExternalSkillCandidate[];
50
+ decisionLog?: Array<{
51
+ decidedAt: string;
52
+ decidedBy: string;
53
+ decision: 'pending' | 'study' | 'rejected' | 'activated';
54
+ reason: string;
55
+ notionUpdateRecommended: boolean;
56
+ }>;
57
+ };
58
+ export type SuccessSkillReview = {
59
+ schemaVersion: string;
60
+ generatedAt?: string;
61
+ candidateName?: string;
62
+ recommendation: 'ready-for-human-approval' | 'needs-more-evidence' | 'needs-security-review' | 'invalid';
63
+ findings: string[];
64
+ riskFlags: string[];
65
+ approvalBlockers: string[];
66
+ externalUnapprovedCandidates: ExternalSkillCandidate[];
67
+ };
68
+ export type UnapprovedSuccessSkillEntry = {
69
+ filePath: string;
70
+ generatedAt?: string;
71
+ candidateName?: string;
72
+ reason: string;
73
+ riskFlags: string[];
74
+ externalCandidates: ExternalSkillCandidate[];
75
+ };
76
+ export type SuccessSkillActivation = {
77
+ candidateName: string;
78
+ targetRoot: string;
79
+ targetDirectory: string;
80
+ installedSkillPath: string;
81
+ approvalRecordPath: string;
82
+ activatedAt: string;
83
+ };
84
+ export type SuccessSkillApprovalPackage = {
85
+ generatedAt: string;
86
+ filePath: string;
87
+ totalDrafts: number;
88
+ readyForApproval: number;
89
+ needsReview: number;
90
+ };
91
+ export type SuccessSkillDecision = {
92
+ candidateName: string;
93
+ manifestPath: string;
94
+ decision: 'pending' | 'study' | 'rejected';
95
+ decidedAt: string;
96
+ decidedBy: string;
97
+ reason: string;
98
+ notionUpdateRecommended: true;
99
+ };
100
+ export declare const readSuccessSkillDraft: (manifestPath: string) => Promise<SuccessSkillDraft | null>;
101
+ export declare const prepareSuccessSkillDraft: ({ title, summary, reusablePattern, implementationNotes, validationEvidence, triggerPhrases, sourceFiles, sourceUrls, candidateName, description, creatorName, creatorUrl, externalCandidates, approvedIndex, outputDir, }: {
102
+ title: string;
103
+ summary: string;
104
+ reusablePattern: string;
105
+ implementationNotes: string[];
106
+ validationEvidence: string[];
107
+ triggerPhrases: string[];
108
+ sourceFiles: string[];
109
+ sourceUrls: string[];
110
+ candidateName?: string;
111
+ description?: string;
112
+ creatorName?: string;
113
+ creatorUrl?: string;
114
+ externalCandidates: ExternalSkillCandidate[];
115
+ approvedIndex: ApprovedSkillIndex;
116
+ outputDir: string;
117
+ }) => Promise<{
118
+ draft: SuccessSkillDraft;
119
+ manifestPath: string;
120
+ skillPath: string;
121
+ }>;
122
+ export declare const reviewSuccessSkillDraft: ({ manifestPath, approvedIndex, }: {
123
+ manifestPath: string;
124
+ approvedIndex: ApprovedSkillIndex;
125
+ }) => Promise<SuccessSkillReview>;
126
+ export declare const listUnapprovedSuccessSkills: (directory: string) => Promise<UnapprovedSuccessSkillEntry[]>;
127
+ export declare const listSuccessSkillDraftManifests: (directory: string) => Promise<string[]>;
128
+ export declare const recordSuccessSkillDecision: ({ manifestPath, decision, decidedBy, reason, }: {
129
+ manifestPath: string;
130
+ decision: "pending" | "study" | "rejected";
131
+ decidedBy?: string;
132
+ reason: string;
133
+ }) => Promise<SuccessSkillDecision>;
134
+ export declare const activateSuccessSkillDraft: ({ manifestPath, approvedIndex, targetRoot, approvedBy, overwrite, }: {
135
+ manifestPath: string;
136
+ approvedIndex: ApprovedSkillIndex;
137
+ targetRoot: string;
138
+ approvedBy?: string;
139
+ overwrite?: boolean;
140
+ }) => Promise<SuccessSkillActivation>;
141
+ export declare const prepareSuccessSkillApprovalPackage: ({ directory, outputDir, approvedIndex, }: {
142
+ directory: string;
143
+ outputDir: string;
144
+ approvedIndex: ApprovedSkillIndex;
145
+ }) => Promise<SuccessSkillApprovalPackage>;
146
+ export {};
147
+ //# sourceMappingURL=success-learning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"success-learning.d.ts","sourceRoot":"","sources":["../src/success-learning.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,QAAA,MAAM,4BAA4B,kCAAkC,CAAC;AACrE,QAAA,MAAM,+BAA+B,uCAAuC,CAAC;AAE7E,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,sBAAsB,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,OAAO,4BAA4B,CAAC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,+BAA+B,CAAC;IACtD,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;IAClE,oBAAoB,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,cAAc,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE;QACR,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,kBAAkB,EAAE,MAAM,EAAE,CAAC;KAC9B,CAAC;IACF,UAAU,EAAE;QACV,qBAAqB,EAAE,IAAI,CAAC;QAC5B,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,kBAAkB,EAAE,sBAAsB,EAAE,CAAC;IAC7C,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;QACzD,MAAM,EAAE,MAAM,CAAC;QACf,uBAAuB,EAAE,OAAO,CAAC;KAClC,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,0BAA0B,GAAG,qBAAqB,GAAG,uBAAuB,GAAG,SAAS,CAAC;IACzG,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,4BAA4B,EAAE,sBAAsB,EAAE,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kBAAkB,EAAE,sBAAsB,EAAE,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB,EAAE,IAAI,CAAC;CAC/B,CAAC;AA6HF,eAAO,MAAM,qBAAqB,GAAU,cAAc,MAAM,KAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAMlG,CAAC;AA0BF,eAAO,MAAM,wBAAwB,GAAU,2NAgB5C;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,sBAAsB,EAAE,CAAC;IAC7C,aAAa,EAAE,kBAAkB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB,KAAG,OAAO,CAAC;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAyEhF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,kCAG3C;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,kBAAkB,CAAC;CACnC,KAAG,OAAO,CAAC,kBAAkB,CA4E7B,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,2BAA2B,EAAE,CAuB1G,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAAiC,CAAC;AAE3H,eAAO,MAAM,0BAA0B,GAAU,gDAK9C;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB,KAAG,OAAO,CAAC,oBAAoB,CAqC/B,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAU,qEAM7C;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,kBAAkB,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,KAAG,OAAO,CAAC,sBAAsB,CAmEjC,CAAC;AAEF,eAAO,MAAM,kCAAkC,GAAU,0CAItD;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,kBAAkB,CAAC;CACnC,KAAG,OAAO,CAAC,2BAA2B,CA4DtC,CAAC"}
@@ -0,0 +1,444 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { promises as fs } from 'node:fs';
3
+ import path from 'node:path';
4
+ const SUCCESS_SKILL_SCHEMA_VERSION = 'skill-master-success-skill-v1';
5
+ const SUCCESS_LEARNING_POLICY_VERSION = 'success-learning-human-approval-v1';
6
+ const hashValue = (value) => createHash('sha256').update(value).digest('hex');
7
+ const normalizeName = (value) => value
8
+ .normalize('NFD')
9
+ .replace(/[\u0300-\u036f]/g, '')
10
+ .toLowerCase()
11
+ .trim();
12
+ const slugifySkillName = (value) => {
13
+ const slug = normalizeName(value)
14
+ .replace(/[^a-z0-9]+/g, '-')
15
+ .replace(/^-+|-+$/g, '')
16
+ .slice(0, 63);
17
+ return slug || 'learned-success-skill';
18
+ };
19
+ const singleLine = (value) => value.replace(/\s+/g, ' ').trim();
20
+ const yamlString = (value) => `"${singleLine(value).replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
21
+ const markdownList = (items) => items
22
+ .map((item) => `- ${singleLine(item)}`)
23
+ .join('\n');
24
+ const detectRiskFlags = (value) => {
25
+ const flags = new Set();
26
+ const content = value.toLowerCase();
27
+ if (/curl\s+[^|\n]+\|\s*(sh|bash)/i.test(value))
28
+ flags.add('shell-pipe-download');
29
+ if (/iwr\s+[^|\n]+\|\s*iex/i.test(value) || /invoke-webrequest[\s\S]{0,120}iex/i.test(value))
30
+ flags.add('powershell-download-exec');
31
+ if (/powershell(\.exe)?\s+-enc(odedcommand)?/i.test(value))
32
+ flags.add('encoded-powershell');
33
+ if (/\brm\s+-rf\s+(\/|\$HOME|~)/i.test(value))
34
+ flags.add('destructive-shell-command');
35
+ if (/\b(eval|exec)\s*\(/i.test(value))
36
+ flags.add('dynamic-code-execution');
37
+ if (/sk-[a-zA-Z0-9_-]{16,}/.test(value) || /gh[pousr]_[a-zA-Z0-9_]{20,}/.test(value))
38
+ flags.add('possible-secret');
39
+ if (content.includes('disable antivirus') || content.includes('bypass antivirus'))
40
+ flags.add('evasion-language');
41
+ return [...flags].sort();
42
+ };
43
+ const buildSkillMarkdown = ({ name, description, title, summary, reusablePattern, triggerPhrases, implementationNotes, validationEvidence, }) => [
44
+ '---',
45
+ `name: ${name}`,
46
+ `description: ${yamlString(description)}`,
47
+ '---',
48
+ '',
49
+ `# ${singleLine(title)}`,
50
+ '',
51
+ `Use this skill when: ${singleLine(reusablePattern)}`,
52
+ '',
53
+ '## Successful Pattern',
54
+ '',
55
+ singleLine(summary),
56
+ '',
57
+ '## Trigger Phrases',
58
+ '',
59
+ markdownList(triggerPhrases.length ? triggerPhrases : [name]),
60
+ '',
61
+ '## Workflow',
62
+ '',
63
+ markdownList(implementationNotes),
64
+ '',
65
+ '## Evidence Required',
66
+ '',
67
+ markdownList(validationEvidence),
68
+ '',
69
+ '## Boundaries',
70
+ '',
71
+ '- Treat this as a reusable pattern, not an automatic command runner.',
72
+ '- Re-check the current repository, dependencies, credentials, and environment before applying it.',
73
+ '- Do not publish, install globally, or modify user secrets unless the user explicitly authorizes that action.',
74
+ '',
75
+ ].join('\n');
76
+ const buildApprovalBlockers = ({ riskFlags, approvedIndex, name, validationEvidence, implementationNotes, }) => {
77
+ const blockers = [];
78
+ const approvedNames = new Set(approvedIndex.skills.map((skill) => normalizeName(skill.name)));
79
+ if (approvedNames.has(normalizeName(name))) {
80
+ blockers.push('A skill with this normalized name is already approved.');
81
+ }
82
+ if (validationEvidence.length === 0) {
83
+ blockers.push('Validation evidence is required before this candidate can be approved.');
84
+ }
85
+ if (implementationNotes.length < 2) {
86
+ blockers.push('At least two implementation notes are required to make the pattern reusable.');
87
+ }
88
+ if (riskFlags.length > 0) {
89
+ blockers.push('Risk flags require manual security review.');
90
+ }
91
+ return blockers;
92
+ };
93
+ export const readSuccessSkillDraft = async (manifestPath) => {
94
+ try {
95
+ return JSON.parse(await fs.readFile(manifestPath, 'utf8'));
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ };
101
+ const findManifestFiles = async (directory) => {
102
+ const found = [];
103
+ const visit = async (current) => {
104
+ let entries;
105
+ try {
106
+ entries = await fs.readdir(current, { withFileTypes: true });
107
+ }
108
+ catch {
109
+ return;
110
+ }
111
+ for (const entry of entries) {
112
+ const fullPath = path.join(current, entry.name);
113
+ if (entry.isDirectory()) {
114
+ await visit(fullPath);
115
+ }
116
+ else if (entry.isFile() && entry.name === 'manifest.json') {
117
+ found.push(fullPath);
118
+ }
119
+ }
120
+ };
121
+ await visit(directory);
122
+ return found.sort();
123
+ };
124
+ export const prepareSuccessSkillDraft = async ({ title, summary, reusablePattern, implementationNotes, validationEvidence, triggerPhrases, sourceFiles, sourceUrls, candidateName, description, creatorName, creatorUrl, externalCandidates, approvedIndex, outputDir, }) => {
125
+ const generatedAt = new Date().toISOString();
126
+ const name = slugifySkillName(candidateName ?? title);
127
+ const skillDescription = singleLine(description ?? `Use when ${reusablePattern}`);
128
+ const markdown = buildSkillMarkdown({
129
+ name,
130
+ description: skillDescription,
131
+ title,
132
+ summary,
133
+ reusablePattern,
134
+ triggerPhrases,
135
+ implementationNotes,
136
+ validationEvidence,
137
+ });
138
+ const riskFlags = detectRiskFlags([
139
+ title,
140
+ summary,
141
+ reusablePattern,
142
+ implementationNotes.join('\n'),
143
+ validationEvidence.join('\n'),
144
+ markdown,
145
+ ].join('\n'));
146
+ const approvalBlockers = buildApprovalBlockers({
147
+ riskFlags,
148
+ approvedIndex,
149
+ name,
150
+ validationEvidence,
151
+ implementationNotes,
152
+ });
153
+ const safeTimestamp = generatedAt.replace(/[:.]/g, '-');
154
+ const packageDir = path.join(outputDir, `${name}-${safeTimestamp}`);
155
+ const skillPath = path.join(packageDir, 'SKILL.md');
156
+ const manifestPath = path.join(packageDir, 'manifest.json');
157
+ const draft = {
158
+ schemaVersion: SUCCESS_SKILL_SCHEMA_VERSION,
159
+ generatedAt,
160
+ policyVersion: SUCCESS_LEARNING_POLICY_VERSION,
161
+ status: 'draft',
162
+ sourceImplementation: {
163
+ title: singleLine(title),
164
+ summary: singleLine(summary),
165
+ sourceFiles: sourceFiles.map(singleLine).filter(Boolean),
166
+ sourceUrls: sourceUrls.map(singleLine).filter(Boolean),
167
+ },
168
+ candidateSkill: {
169
+ name,
170
+ description: skillDescription,
171
+ triggerPhrases: triggerPhrases.map(singleLine).filter(Boolean),
172
+ skillMarkdownFile: skillPath,
173
+ contentHash: hashValue(markdown),
174
+ },
175
+ evidence: {
176
+ reusablePattern: singleLine(reusablePattern),
177
+ implementationNotes: implementationNotes.map(singleLine).filter(Boolean),
178
+ validationEvidence: validationEvidence.map(singleLine).filter(Boolean),
179
+ },
180
+ governance: {
181
+ requiresHumanApproval: true,
182
+ approved: false,
183
+ approvalBlockers,
184
+ riskFlags,
185
+ },
186
+ ...(creatorName ? { creator: { name: singleLine(creatorName), ...(creatorUrl ? { url: singleLine(creatorUrl) } : {}) } } : {}),
187
+ externalCandidates,
188
+ };
189
+ await fs.mkdir(packageDir, { recursive: true });
190
+ await fs.writeFile(skillPath, markdown, 'utf8');
191
+ await fs.writeFile(manifestPath, JSON.stringify(draft, null, 2), 'utf8');
192
+ return { draft, manifestPath, skillPath };
193
+ };
194
+ export const reviewSuccessSkillDraft = async ({ manifestPath, approvedIndex, }) => {
195
+ const draft = await readSuccessSkillDraft(manifestPath);
196
+ if (!draft) {
197
+ return {
198
+ schemaVersion: 'unknown',
199
+ recommendation: 'invalid',
200
+ findings: ['Success skill manifest could not be parsed as JSON.'],
201
+ riskFlags: [],
202
+ approvalBlockers: ['Invalid JSON manifest.'],
203
+ externalUnapprovedCandidates: [],
204
+ };
205
+ }
206
+ if (draft.schemaVersion !== SUCCESS_SKILL_SCHEMA_VERSION) {
207
+ return {
208
+ schemaVersion: draft.schemaVersion ?? 'unknown',
209
+ generatedAt: draft.generatedAt,
210
+ candidateName: draft.candidateSkill?.name,
211
+ recommendation: 'invalid',
212
+ findings: ['Success skill schema is not supported.'],
213
+ riskFlags: [],
214
+ approvalBlockers: ['Unsupported schema.'],
215
+ externalUnapprovedCandidates: [],
216
+ };
217
+ }
218
+ const approvedNames = new Set(approvedIndex.skills.map((skill) => normalizeName(skill.name)));
219
+ const approvedHashes = new Set(approvedIndex.skills.map((skill) => skill.contentHash));
220
+ const approvalBlockers = [...draft.governance.approvalBlockers];
221
+ const findings = [];
222
+ if (approvedNames.has(normalizeName(draft.candidateSkill.name))) {
223
+ approvalBlockers.push('A skill with this normalized name is already approved.');
224
+ }
225
+ if (approvedHashes.has(draft.candidateSkill.contentHash)) {
226
+ approvalBlockers.push('A skill with this content hash is already approved.');
227
+ }
228
+ if (draft.evidence.validationEvidence.length === 0) {
229
+ approvalBlockers.push('Validation evidence is missing.');
230
+ }
231
+ if (draft.evidence.implementationNotes.length < 2) {
232
+ approvalBlockers.push('Implementation notes are too thin for reuse.');
233
+ }
234
+ const uniqueBlockers = [...new Set(approvalBlockers)];
235
+ const externalUnapprovedCandidates = draft.externalCandidates.filter((candidate) => candidate.reviewStatus !== 'approved' && candidate.reviewStatus !== 'pending-human-review');
236
+ if (draft.governance.riskFlags.length > 0) {
237
+ findings.push(`${draft.governance.riskFlags.length} risk flag(s) require manual security review.`);
238
+ }
239
+ if (externalUnapprovedCandidates.length > 0) {
240
+ findings.push(`${externalUnapprovedCandidates.length} external candidate(s) are not approved for use.`);
241
+ }
242
+ if (uniqueBlockers.length > 0) {
243
+ findings.push(...uniqueBlockers);
244
+ }
245
+ if (findings.length === 0) {
246
+ findings.push('No blocking issue found. Human approval is still required before activation or distribution.');
247
+ }
248
+ return {
249
+ schemaVersion: draft.schemaVersion,
250
+ generatedAt: draft.generatedAt,
251
+ candidateName: draft.candidateSkill.name,
252
+ recommendation: draft.governance.riskFlags.length > 0
253
+ ? 'needs-security-review'
254
+ : uniqueBlockers.length > 0
255
+ ? 'needs-more-evidence'
256
+ : 'ready-for-human-approval',
257
+ findings,
258
+ riskFlags: draft.governance.riskFlags,
259
+ approvalBlockers: uniqueBlockers,
260
+ externalUnapprovedCandidates,
261
+ };
262
+ };
263
+ export const listUnapprovedSuccessSkills = async (directory) => {
264
+ const manifests = await findManifestFiles(directory);
265
+ const entries = [];
266
+ for (const manifestPath of manifests) {
267
+ const draft = await readSuccessSkillDraft(manifestPath);
268
+ if (!draft || draft.schemaVersion !== SUCCESS_SKILL_SCHEMA_VERSION)
269
+ continue;
270
+ if (draft.governance.approved)
271
+ continue;
272
+ if (draft.status === 'rejected')
273
+ continue;
274
+ entries.push({
275
+ filePath: manifestPath,
276
+ generatedAt: draft.generatedAt,
277
+ candidateName: draft.candidateSkill.name,
278
+ reason: draft.governance.approvalBlockers.length
279
+ ? draft.governance.approvalBlockers.join(' ')
280
+ : 'Pending explicit human approval before activation.',
281
+ riskFlags: draft.governance.riskFlags,
282
+ externalCandidates: draft.externalCandidates,
283
+ });
284
+ }
285
+ return entries.sort((a, b) => (b.generatedAt ?? '').localeCompare(a.generatedAt ?? ''));
286
+ };
287
+ export const listSuccessSkillDraftManifests = async (directory) => findManifestFiles(directory);
288
+ export const recordSuccessSkillDecision = async ({ manifestPath, decision, decidedBy, reason, }) => {
289
+ const draft = await readSuccessSkillDraft(manifestPath);
290
+ if (!draft || draft.schemaVersion !== SUCCESS_SKILL_SCHEMA_VERSION) {
291
+ throw new Error('Success skill manifest is invalid or unsupported.');
292
+ }
293
+ if (draft.status === 'activated' || draft.governance.approved) {
294
+ throw new Error('Activated or approved skills cannot be moved back by this decision command.');
295
+ }
296
+ const decidedAt = new Date().toISOString();
297
+ const reviewer = decidedBy ?? 'local-human-review';
298
+ const updatedDraft = {
299
+ ...draft,
300
+ status: decision === 'pending' ? 'draft' : decision,
301
+ decisionLog: [
302
+ ...(draft.decisionLog ?? []),
303
+ {
304
+ decidedAt,
305
+ decidedBy: reviewer,
306
+ decision,
307
+ reason: singleLine(reason),
308
+ notionUpdateRecommended: true,
309
+ },
310
+ ],
311
+ };
312
+ await fs.writeFile(manifestPath, JSON.stringify(updatedDraft, null, 2), 'utf8');
313
+ return {
314
+ candidateName: draft.candidateSkill.name,
315
+ manifestPath,
316
+ decision,
317
+ decidedAt,
318
+ decidedBy: reviewer,
319
+ reason: singleLine(reason),
320
+ notionUpdateRecommended: true,
321
+ };
322
+ };
323
+ export const activateSuccessSkillDraft = async ({ manifestPath, approvedIndex, targetRoot, approvedBy, overwrite = false, }) => {
324
+ const draft = await readSuccessSkillDraft(manifestPath);
325
+ if (!draft || draft.schemaVersion !== SUCCESS_SKILL_SCHEMA_VERSION) {
326
+ throw new Error('Success skill manifest is invalid or unsupported.');
327
+ }
328
+ const review = await reviewSuccessSkillDraft({ manifestPath, approvedIndex });
329
+ if (review.recommendation !== 'ready-for-human-approval') {
330
+ throw new Error(`Success skill is not ready for activation: ${review.findings.join(' ')}`);
331
+ }
332
+ const sourceSkillPath = draft.candidateSkill.skillMarkdownFile;
333
+ const skillMarkdown = await fs.readFile(sourceSkillPath, 'utf8');
334
+ if (hashValue(skillMarkdown) !== draft.candidateSkill.contentHash) {
335
+ throw new Error('Draft SKILL.md hash does not match the manifest.');
336
+ }
337
+ const activatedAt = new Date().toISOString();
338
+ const targetDirectory = path.join(targetRoot, draft.candidateSkill.name);
339
+ const installedSkillPath = path.join(targetDirectory, 'SKILL.md');
340
+ const approvalRecordPath = path.join(targetDirectory, 'skill-master-approval.json');
341
+ try {
342
+ await fs.access(targetDirectory);
343
+ if (!overwrite) {
344
+ throw new Error(`Target skill directory already exists: ${targetDirectory}`);
345
+ }
346
+ }
347
+ catch (error) {
348
+ if (error instanceof Error && !('code' in error)) {
349
+ throw error;
350
+ }
351
+ }
352
+ await fs.mkdir(targetDirectory, { recursive: true });
353
+ await fs.writeFile(installedSkillPath, skillMarkdown, 'utf8');
354
+ await fs.writeFile(approvalRecordPath, JSON.stringify({
355
+ schemaVersion: 'skill-master-success-activation-v1',
356
+ activatedAt,
357
+ approvedBy: approvedBy ?? 'local-human-review',
358
+ sourceManifest: manifestPath,
359
+ candidateName: draft.candidateSkill.name,
360
+ contentHash: draft.candidateSkill.contentHash,
361
+ sourceImplementation: draft.sourceImplementation,
362
+ targetRoot,
363
+ }, null, 2), 'utf8');
364
+ const updatedDraft = {
365
+ ...draft,
366
+ status: 'activated',
367
+ governance: {
368
+ ...draft.governance,
369
+ approved: true,
370
+ approvedAt: activatedAt,
371
+ approvedBy: approvedBy ?? 'local-human-review',
372
+ approvalBlockers: [],
373
+ },
374
+ };
375
+ await fs.writeFile(manifestPath, JSON.stringify(updatedDraft, null, 2), 'utf8');
376
+ return {
377
+ candidateName: draft.candidateSkill.name,
378
+ targetRoot,
379
+ targetDirectory,
380
+ installedSkillPath,
381
+ approvalRecordPath,
382
+ activatedAt,
383
+ };
384
+ };
385
+ export const prepareSuccessSkillApprovalPackage = async ({ directory, outputDir, approvedIndex, }) => {
386
+ const generatedAt = new Date().toISOString();
387
+ const manifests = await findManifestFiles(directory);
388
+ const rows = await Promise.all(manifests.map(async (manifestPath) => {
389
+ const draft = await readSuccessSkillDraft(manifestPath);
390
+ if (!draft || draft.schemaVersion !== SUCCESS_SKILL_SCHEMA_VERSION) {
391
+ return null;
392
+ }
393
+ const review = await reviewSuccessSkillDraft({ manifestPath, approvedIndex });
394
+ return { manifestPath, draft, review };
395
+ }));
396
+ const entries = rows.filter((entry) => entry !== null);
397
+ const readyForApproval = entries.filter((entry) => entry.review.recommendation === 'ready-for-human-approval').length;
398
+ const needsReview = entries.length - readyForApproval;
399
+ const safeTimestamp = generatedAt.replace(/[:.]/g, '-');
400
+ const filePath = path.join(outputDir, `success-skill-approval-package-${safeTimestamp}.md`);
401
+ const markdown = [
402
+ '# Success Skill Approval Package',
403
+ '',
404
+ `Generated at: ${generatedAt}`,
405
+ `Draft source: ${directory}`,
406
+ `Total drafts: ${entries.length}`,
407
+ `Ready for approval: ${readyForApproval}`,
408
+ `Needs review: ${needsReview}`,
409
+ '',
410
+ '## Human approval checklist',
411
+ '',
412
+ '- [ ] Read each generated SKILL.md before activation.',
413
+ '- [ ] Confirm validation evidence is real and current.',
414
+ '- [ ] Confirm no secrets, destructive commands, or environment-specific assumptions are embedded.',
415
+ '- [ ] Choose the activation target: workspace-local .codex/skills or user-global CODEX_HOME skills.',
416
+ '- [ ] Activate only one skill at a time and re-run catalog refresh afterward.',
417
+ '',
418
+ '## Drafts',
419
+ '',
420
+ ...entries.flatMap((entry, index) => [
421
+ `### ${index + 1}. ${entry.draft.candidateSkill.name}`,
422
+ '',
423
+ `Recommendation: ${entry.review.recommendation}`,
424
+ `Manifest: ${entry.manifestPath}`,
425
+ `SKILL.md: ${entry.draft.candidateSkill.skillMarkdownFile}`,
426
+ `Risk flags: ${entry.review.riskFlags.length ? entry.review.riskFlags.join(', ') : 'none'}`,
427
+ `Approval blockers: ${entry.review.approvalBlockers.length ? entry.review.approvalBlockers.join('; ') : 'none'}`,
428
+ '',
429
+ 'Findings:',
430
+ ...entry.review.findings.map((finding) => `- ${finding}`),
431
+ '',
432
+ ]),
433
+ ].join('\n');
434
+ await fs.mkdir(outputDir, { recursive: true });
435
+ await fs.writeFile(filePath, markdown, 'utf8');
436
+ return {
437
+ generatedAt,
438
+ filePath,
439
+ totalDrafts: entries.length,
440
+ readyForApproval,
441
+ needsReview,
442
+ };
443
+ };
444
+ //# sourceMappingURL=success-learning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"success-learning.js","sourceRoot":"","sources":["../src/success-learning.ts"],"names":[],"mappings":"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"}