@jigyasudham/veto 3.0.0 → 3.1.1
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/LICENSE +21 -21
- package/README.md +630 -589
- package/dist/agents/llm-runner.js +57 -57
- package/dist/cli/statusline.js +2 -2
- package/dist/cli.js +57 -26
- package/dist/cli.js.map +1 -1
- package/dist/memory/decisions.js +1 -1
- package/dist/memory/local.js +144 -144
- package/dist/memory/schema.js +228 -228
- package/dist/memory/sync.js +25 -25
- package/dist/router/implicit-outcomes.js +4 -4
- package/dist/router/learning-updater.js +45 -45
- package/dist/server.js +1 -1
- package/dist/tools/compact.js +3 -3
- package/dist/transcripts/archive.js +5 -5
- package/dist/transcripts/cache.d.ts +66 -0
- package/dist/transcripts/cache.d.ts.map +1 -0
- package/dist/transcripts/cache.js +0 -0
- package/dist/transcripts/cache.js.map +1 -0
- package/dist/transcripts/chunk.d.ts +26 -0
- package/dist/transcripts/chunk.d.ts.map +1 -0
- package/dist/transcripts/chunk.js +54 -0
- package/dist/transcripts/chunk.js.map +1 -0
- package/dist/transcripts/embed.d.ts +58 -0
- package/dist/transcripts/embed.d.ts.map +1 -0
- package/dist/transcripts/embed.js +303 -0
- package/dist/transcripts/embed.js.map +1 -0
- package/dist/transcripts/ingest.d.ts.map +1 -1
- package/dist/transcripts/ingest.js +14 -7
- package/dist/transcripts/ingest.js.map +1 -1
- package/dist/transcripts/manage.d.ts.map +1 -1
- package/dist/transcripts/manage.js +6 -0
- package/dist/transcripts/manage.js.map +1 -1
- package/dist/transcripts/mapping.js +5 -5
- package/dist/transcripts/pyramid.js +2 -2
- package/dist/transcripts/recall.d.ts +7 -0
- package/dist/transcripts/recall.d.ts.map +1 -1
- package/dist/transcripts/recall.js +25 -3
- package/dist/transcripts/recall.js.map +1 -1
- package/dist/transcripts/schema.d.ts +11 -1
- package/dist/transcripts/schema.d.ts.map +1 -1
- package/dist/transcripts/schema.js +126 -94
- package/dist/transcripts/schema.js.map +1 -1
- package/dist/transcripts/search.d.ts +35 -0
- package/dist/transcripts/search.d.ts.map +1 -1
- package/dist/transcripts/search.js +232 -34
- package/dist/transcripts/search.js.map +1 -1
- package/dist/transcripts/vectors.d.ts +40 -0
- package/dist/transcripts/vectors.d.ts.map +1 -0
- package/dist/transcripts/vectors.js +203 -0
- package/dist/transcripts/vectors.js.map +1 -0
- package/package.json +70 -61
- package/server.json +23 -23
- package/dist/skills/development/skill-api-design.d.ts +0 -15
- package/dist/skills/development/skill-api-design.d.ts.map +0 -1
- package/dist/skills/development/skill-api-design.js +0 -313
- package/dist/skills/development/skill-api-design.js.map +0 -1
- package/dist/skills/development/skill-auth.d.ts +0 -15
- package/dist/skills/development/skill-auth.d.ts.map +0 -1
- package/dist/skills/development/skill-auth.js +0 -255
- package/dist/skills/development/skill-auth.js.map +0 -1
- package/dist/skills/development/skill-ci-cd.d.ts +0 -2
- package/dist/skills/development/skill-ci-cd.d.ts.map +0 -1
- package/dist/skills/development/skill-ci-cd.js +0 -2
- package/dist/skills/development/skill-ci-cd.js.map +0 -1
- package/dist/skills/development/skill-crud.d.ts +0 -15
- package/dist/skills/development/skill-crud.d.ts.map +0 -1
- package/dist/skills/development/skill-crud.js +0 -193
- package/dist/skills/development/skill-crud.js.map +0 -1
- package/dist/skills/development/skill-db-schema.d.ts +0 -2
- package/dist/skills/development/skill-db-schema.d.ts.map +0 -1
- package/dist/skills/development/skill-db-schema.js +0 -2
- package/dist/skills/development/skill-db-schema.js.map +0 -1
- package/dist/skills/development/skill-docker.d.ts +0 -2
- package/dist/skills/development/skill-docker.d.ts.map +0 -1
- package/dist/skills/development/skill-docker.js +0 -2
- package/dist/skills/development/skill-docker.js.map +0 -1
- package/dist/skills/development/skill-env-setup.d.ts +0 -2
- package/dist/skills/development/skill-env-setup.d.ts.map +0 -1
- package/dist/skills/development/skill-env-setup.js +0 -2
- package/dist/skills/development/skill-env-setup.js.map +0 -1
- package/dist/skills/development/skill-scaffold.d.ts +0 -15
- package/dist/skills/development/skill-scaffold.d.ts.map +0 -1
- package/dist/skills/development/skill-scaffold.js +0 -299
- package/dist/skills/development/skill-scaffold.js.map +0 -1
- package/dist/skills/intelligence/skill-complexity-score.d.ts +0 -15
- package/dist/skills/intelligence/skill-complexity-score.d.ts.map +0 -1
- package/dist/skills/intelligence/skill-complexity-score.js +0 -66
- package/dist/skills/intelligence/skill-complexity-score.js.map +0 -1
- package/dist/skills/intelligence/skill-cost-track.d.ts +0 -14
- package/dist/skills/intelligence/skill-cost-track.d.ts.map +0 -1
- package/dist/skills/intelligence/skill-cost-track.js +0 -36
- package/dist/skills/intelligence/skill-cost-track.js.map +0 -1
- package/dist/skills/intelligence/skill-learning-loop.d.ts +0 -15
- package/dist/skills/intelligence/skill-learning-loop.d.ts.map +0 -1
- package/dist/skills/intelligence/skill-learning-loop.js +0 -66
- package/dist/skills/intelligence/skill-learning-loop.js.map +0 -1
- package/dist/skills/intelligence/skill-pattern-detect.d.ts +0 -14
- package/dist/skills/intelligence/skill-pattern-detect.d.ts.map +0 -1
- package/dist/skills/intelligence/skill-pattern-detect.js +0 -35
- package/dist/skills/intelligence/skill-pattern-detect.js.map +0 -1
- package/dist/skills/intelligence/skill-rate-watch.d.ts +0 -15
- package/dist/skills/intelligence/skill-rate-watch.d.ts.map +0 -1
- package/dist/skills/intelligence/skill-rate-watch.js +0 -58
- package/dist/skills/intelligence/skill-rate-watch.js.map +0 -1
- package/dist/skills/memory/skill-context-compress.d.ts +0 -15
- package/dist/skills/memory/skill-context-compress.d.ts.map +0 -1
- package/dist/skills/memory/skill-context-compress.js +0 -82
- package/dist/skills/memory/skill-context-compress.js.map +0 -1
- package/dist/skills/memory/skill-cross-sync.d.ts +0 -15
- package/dist/skills/memory/skill-cross-sync.d.ts.map +0 -1
- package/dist/skills/memory/skill-cross-sync.js +0 -88
- package/dist/skills/memory/skill-cross-sync.js.map +0 -1
- package/dist/skills/memory/skill-decision-log.d.ts +0 -15
- package/dist/skills/memory/skill-decision-log.d.ts.map +0 -1
- package/dist/skills/memory/skill-decision-log.js +0 -103
- package/dist/skills/memory/skill-decision-log.js.map +0 -1
- package/dist/skills/memory/skill-session-restore.d.ts +0 -15
- package/dist/skills/memory/skill-session-restore.d.ts.map +0 -1
- package/dist/skills/memory/skill-session-restore.js +0 -39
- package/dist/skills/memory/skill-session-restore.js.map +0 -1
- package/dist/skills/memory/skill-session-save.d.ts +0 -15
- package/dist/skills/memory/skill-session-save.d.ts.map +0 -1
- package/dist/skills/memory/skill-session-save.js +0 -74
- package/dist/skills/memory/skill-session-save.js.map +0 -1
- package/dist/skills/quality/skill-accessibility.d.ts +0 -2
- package/dist/skills/quality/skill-accessibility.d.ts.map +0 -1
- package/dist/skills/quality/skill-accessibility.js +0 -2
- package/dist/skills/quality/skill-accessibility.js.map +0 -1
- package/dist/skills/quality/skill-code-review.d.ts +0 -15
- package/dist/skills/quality/skill-code-review.d.ts.map +0 -1
- package/dist/skills/quality/skill-code-review.js +0 -60
- package/dist/skills/quality/skill-code-review.js.map +0 -1
- package/dist/skills/quality/skill-docs-gen.d.ts +0 -2
- package/dist/skills/quality/skill-docs-gen.d.ts.map +0 -1
- package/dist/skills/quality/skill-docs-gen.js +0 -2
- package/dist/skills/quality/skill-docs-gen.js.map +0 -1
- package/dist/skills/quality/skill-perf-audit.d.ts +0 -2
- package/dist/skills/quality/skill-perf-audit.d.ts.map +0 -1
- package/dist/skills/quality/skill-perf-audit.js +0 -2
- package/dist/skills/quality/skill-perf-audit.js.map +0 -1
- package/dist/skills/quality/skill-security-scan.d.ts +0 -15
- package/dist/skills/quality/skill-security-scan.d.ts.map +0 -1
- package/dist/skills/quality/skill-security-scan.js +0 -67
- package/dist/skills/quality/skill-security-scan.js.map +0 -1
- package/dist/skills/quality/skill-test-suite.d.ts +0 -15
- package/dist/skills/quality/skill-test-suite.d.ts.map +0 -1
- package/dist/skills/quality/skill-test-suite.js +0 -274
- package/dist/skills/quality/skill-test-suite.js.map +0 -1
- package/dist/skills/workflow/skill-deploy.d.ts +0 -2
- package/dist/skills/workflow/skill-deploy.d.ts.map +0 -1
- package/dist/skills/workflow/skill-deploy.js +0 -2
- package/dist/skills/workflow/skill-deploy.js.map +0 -1
- package/dist/skills/workflow/skill-git-workflow.d.ts +0 -2
- package/dist/skills/workflow/skill-git-workflow.d.ts.map +0 -1
- package/dist/skills/workflow/skill-git-workflow.js +0 -2
- package/dist/skills/workflow/skill-git-workflow.js.map +0 -1
- package/dist/skills/workflow/skill-rollback.d.ts +0 -2
- package/dist/skills/workflow/skill-rollback.d.ts.map +0 -1
- package/dist/skills/workflow/skill-rollback.js +0 -2
- package/dist/skills/workflow/skill-rollback.js.map +0 -1
- package/dist/skills/workflow/skill-task-breakdown.d.ts +0 -2
- package/dist/skills/workflow/skill-task-breakdown.d.ts.map +0 -1
- package/dist/skills/workflow/skill-task-breakdown.js +0 -2
- package/dist/skills/workflow/skill-task-breakdown.js.map +0 -1
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
// Skill: decision-log — guide to logging architectural and design decisions
|
|
2
|
-
const TEMPLATE = `
|
|
3
|
-
// ── Decision Log Entry ────────────────────────────────────────────────────
|
|
4
|
-
//
|
|
5
|
-
// Use this template for any decision that is:
|
|
6
|
-
// - Non-obvious (a reasonable engineer could choose differently)
|
|
7
|
-
// - Hard to reverse (schema changes, API contracts, auth architecture)
|
|
8
|
-
// - Frequently re-discussed (keeps relitigating the same debate)
|
|
9
|
-
// - A deliberate trade-off (performance vs correctness, simplicity vs flexibility)
|
|
10
|
-
//
|
|
11
|
-
{
|
|
12
|
-
"id": "ADR-001", // Sequential ID for referencing
|
|
13
|
-
"title": "Use JWT with rotating refresh tokens for authentication",
|
|
14
|
-
"status": "accepted", // proposed | accepted | deprecated | superseded-by:ADR-xxx
|
|
15
|
-
"date": "2026-05-01",
|
|
16
|
-
"deciders": ["agent:auth", "human:alice"],
|
|
17
|
-
|
|
18
|
-
"context": "We need an authentication mechanism for a stateless REST API that will be consumed by a mobile app and a web SPA. Session cookies are not ideal for the mobile client.",
|
|
19
|
-
|
|
20
|
-
"decision": "Implement stateless JWTs for access (15-minute TTL) with rotating refresh tokens stored server-side in a database table.",
|
|
21
|
-
|
|
22
|
-
"rationale": "JWTs allow stateless verification on every request without a DB lookup. Refresh token rotation limits the window of token theft. httpOnly cookies for refresh tokens prevent XSS access.",
|
|
23
|
-
|
|
24
|
-
"alternatives": [
|
|
25
|
-
{
|
|
26
|
-
"option": "Server-side sessions with Redis",
|
|
27
|
-
"pros": ["Instant revocation", "No JWT complexity"],
|
|
28
|
-
"cons": ["Requires Redis infrastructure", "Not stateless — every request hits Redis", "Mobile clients struggle with cookie-based sessions"],
|
|
29
|
-
"rejected_because": "Adds Redis dependency; poor fit for mobile client"
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"option": "Long-lived JWTs with no refresh",
|
|
33
|
-
"pros": ["Simple implementation"],
|
|
34
|
-
"cons": ["Cannot revoke without infrastructure", "Long-lived tokens are a large attack window"],
|
|
35
|
-
"rejected_because": "Unacceptable security risk if token is stolen"
|
|
36
|
-
}
|
|
37
|
-
],
|
|
38
|
-
|
|
39
|
-
"consequences": {
|
|
40
|
-
"positive": [
|
|
41
|
-
"Stateless verification — no DB lookup per request",
|
|
42
|
-
"Refresh token rotation limits theft window to 15 minutes",
|
|
43
|
-
"Mobile and web clients use the same auth mechanism"
|
|
44
|
-
],
|
|
45
|
-
"negative": [
|
|
46
|
-
"Access tokens cannot be revoked before expiry (15-minute window)",
|
|
47
|
-
"Requires refresh token table with periodic cleanup job",
|
|
48
|
-
"More complex than simple sessions"
|
|
49
|
-
],
|
|
50
|
-
"neutral": [
|
|
51
|
-
"JWT library (jsonwebtoken) must be kept up to date for security patches"
|
|
52
|
-
]
|
|
53
|
-
},
|
|
54
|
-
|
|
55
|
-
"references": [
|
|
56
|
-
"OWASP Authentication Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html",
|
|
57
|
-
"RFC 6749 OAuth 2.0 Bearer Tokens",
|
|
58
|
-
"Related implementation: src/services/auth.service.ts"
|
|
59
|
-
]
|
|
60
|
-
}
|
|
61
|
-
`.trim();
|
|
62
|
-
export function run(input) {
|
|
63
|
-
return {
|
|
64
|
-
skill: 'decision-log',
|
|
65
|
-
template: TEMPLATE,
|
|
66
|
-
checklist: [
|
|
67
|
-
'Log the decision as soon as it is made — memory fades quickly and context is lost',
|
|
68
|
-
'Assign a sequential ID (ADR-001, ADR-002) to enable referencing in code comments and PRs',
|
|
69
|
-
'Write the context section first: describe the forces and constraints that made a choice necessary',
|
|
70
|
-
'State the decision explicitly and unambiguously — one clear sentence of what was decided',
|
|
71
|
-
'Document the rationale: why this option over the alternatives?',
|
|
72
|
-
'List at least two alternatives that were genuinely considered, not just strawmen',
|
|
73
|
-
'For each alternative, record pros, cons, and the specific reason it was rejected',
|
|
74
|
-
'Document positive, negative, and neutral consequences of the chosen option',
|
|
75
|
-
'Set the status field: proposed → accepted → deprecated or superseded-by:ADR-xxx',
|
|
76
|
-
'Add file references so future engineers can find the implementation',
|
|
77
|
-
'Reference the decision ID in relevant code comments: // See ADR-001',
|
|
78
|
-
'Store the decision log in docs/decisions/ or as a session memory entry',
|
|
79
|
-
'Update the status to "deprecated" or "superseded" when the decision changes — never delete',
|
|
80
|
-
'Review the decision log when revisiting a design — check if the original constraints still apply',
|
|
81
|
-
],
|
|
82
|
-
patterns: [
|
|
83
|
-
'Architecture Decision Record (ADR) format: context → decision → rationale → alternatives → consequences',
|
|
84
|
-
'Decision-in-context: link from code to the decision that explains the design choice',
|
|
85
|
-
'Living document: update status when decisions change rather than deleting entries',
|
|
86
|
-
'Lightweight ADR: one file per decision, stored in git alongside the code it describes',
|
|
87
|
-
],
|
|
88
|
-
gotchas: [
|
|
89
|
-
'Writing the decision without the rationale — future engineers will not know why, only what',
|
|
90
|
-
'Only documenting the chosen option without listing alternatives — looks like no thought went into it',
|
|
91
|
-
'Not updating stale decisions — a deprecated decision still marked "accepted" causes confusion',
|
|
92
|
-
'Writing the ADR after the fact with the benefit of hindsight — capture the original thinking at decision time',
|
|
93
|
-
'Logging trivial decisions — reserve the log for non-obvious choices; not every variable name needs an ADR',
|
|
94
|
-
],
|
|
95
|
-
resources: [
|
|
96
|
-
'https://adr.github.io/ (Architectural Decision Records overview)',
|
|
97
|
-
'https://github.com/joelparkerhenderson/architecture-decision-record (templates and examples)',
|
|
98
|
-
'https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions (original Michael Nygard post)',
|
|
99
|
-
'https://www.thoughtworks.com/radar/techniques/lightweight-architecture-decision-records',
|
|
100
|
-
],
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=skill-decision-log.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-decision-log.js","sourceRoot":"","sources":["../../../src/skills/memory/skill-decision-log.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAiB5E,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DhB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,UAAU,GAAG,CAAC,KAAiB;IACnC,OAAO;QACL,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE;YACT,mFAAmF;YACnF,0FAA0F;YAC1F,mGAAmG;YACnG,0FAA0F;YAC1F,gEAAgE;YAChE,kFAAkF;YAClF,kFAAkF;YAClF,4EAA4E;YAC5E,iFAAiF;YACjF,qEAAqE;YACrE,qEAAqE;YACrE,wEAAwE;YACxE,4FAA4F;YAC5F,kGAAkG;SACnG;QACD,QAAQ,EAAE;YACR,yGAAyG;YACzG,qFAAqF;YACrF,mFAAmF;YACnF,uFAAuF;SACxF;QACD,OAAO,EAAE;YACP,4FAA4F;YAC5F,sGAAsG;YACtG,+FAA+F;YAC/F,+GAA+G;YAC/G,2GAA2G;SAC5G;QACD,SAAS,EAAE;YACT,kEAAkE;YAClE,8FAA8F;YAC9F,yGAAyG;YACzG,yFAAyF;SAC1F;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface SkillInput {
|
|
2
|
-
task: string;
|
|
3
|
-
context?: string;
|
|
4
|
-
options?: Record<string, unknown>;
|
|
5
|
-
}
|
|
6
|
-
export interface SkillOutput {
|
|
7
|
-
skill: string;
|
|
8
|
-
template?: string;
|
|
9
|
-
checklist: string[];
|
|
10
|
-
patterns: string[];
|
|
11
|
-
gotchas: string[];
|
|
12
|
-
resources: string[];
|
|
13
|
-
}
|
|
14
|
-
export declare function run(input: SkillInput): SkillOutput;
|
|
15
|
-
//# sourceMappingURL=skill-session-restore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-session-restore.d.ts","sourceRoot":"","sources":["../../../src/skills/memory/skill-session-restore.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAoClD"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// Skill: session-restore — guide to restoring context from a saved session
|
|
2
|
-
export function run(input) {
|
|
3
|
-
return {
|
|
4
|
-
skill: 'session-restore',
|
|
5
|
-
template: undefined,
|
|
6
|
-
checklist: [
|
|
7
|
-
'Call veto_sessions_list to find available sessions; pick the most recent one matching your task',
|
|
8
|
-
'Call veto_session_restore with the session_id — read the resume_instructions field first',
|
|
9
|
-
'Trust the restored context. Do NOT re-read source files to orient yourself — that defeats session restore and wastes tokens',
|
|
10
|
-
'Read task_state.nextAction (or context.nextAction) — that is your starting instruction, execute it directly',
|
|
11
|
-
'Read decisions[] to understand constraints already made — do not revisit them without cause',
|
|
12
|
-
'Read progress.completed to know what is done — do not redo this work',
|
|
13
|
-
'Read progress.remaining to know what is left before you start',
|
|
14
|
-
'Only open a file if you are about to EDIT it — not to "familiarize yourself" or "verify" it',
|
|
15
|
-
'If you find a file has changed since the save (e.g. a function is missing), read only that file, note the discrepancy, and continue',
|
|
16
|
-
'Save a new checkpoint after restore so future sessions start from your updated state, not the old one',
|
|
17
|
-
],
|
|
18
|
-
patterns: [
|
|
19
|
-
'Trust-then-act: the saved session is your context — start working from nextAction immediately',
|
|
20
|
-
'Read-only-to-edit: only read a file when you are about to change it, never for orientation',
|
|
21
|
-
'Stale-signal: if restored context mentions a symbol that does not exist, read only that file to reconcile',
|
|
22
|
-
'Checkpoint-on-restore: always save a new session immediately after restoring so the next session is current',
|
|
23
|
-
],
|
|
24
|
-
gotchas: [
|
|
25
|
-
'Re-reading the whole codebase after restore — this is the token-waste the tool exists to prevent; do not do it',
|
|
26
|
-
'Ignoring resume_instructions and falling back to default "read all files" behavior',
|
|
27
|
-
'Picking the wrong session when multiple tasks are in progress — check the task/summary field carefully',
|
|
28
|
-
'Not saving a new checkpoint after restore — the next session will start from the old stale state',
|
|
29
|
-
'Acting on a session saved in "blocked" state without first resolving the listed blocker',
|
|
30
|
-
],
|
|
31
|
-
resources: [
|
|
32
|
-
'Use the veto_session_restore MCP tool: { sessionId } → returns full session object',
|
|
33
|
-
'Use the veto_sessions_list MCP tool: returns all sessions sorted by updatedAt',
|
|
34
|
-
'Use the veto_session_save MCP tool after restoration to record the new starting point',
|
|
35
|
-
'MCP Session spec: https://modelcontextprotocol.io/docs/concepts/resources',
|
|
36
|
-
],
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=skill-session-restore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-session-restore.js","sourceRoot":"","sources":["../../../src/skills/memory/skill-session-restore.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAiB3E,MAAM,UAAU,GAAG,CAAC,KAAiB;IACnC,OAAO;QACL,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE;YACT,iGAAiG;YACjG,0FAA0F;YAC1F,6HAA6H;YAC7H,6GAA6G;YAC7G,6FAA6F;YAC7F,sEAAsE;YACtE,+DAA+D;YAC/D,6FAA6F;YAC7F,qIAAqI;YACrI,uGAAuG;SACxG;QACD,QAAQ,EAAE;YACR,+FAA+F;YAC/F,4FAA4F;YAC5F,2GAA2G;YAC3G,6GAA6G;SAC9G;QACD,OAAO,EAAE;YACP,gHAAgH;YAChH,oFAAoF;YACpF,wGAAwG;YACxG,kGAAkG;YAClG,yFAAyF;SAC1F;QACD,SAAS,EAAE;YACT,oFAAoF;YACpF,+EAA+E;YAC/E,uFAAuF;YACvF,2EAA2E;SAC5E;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface SkillInput {
|
|
2
|
-
task: string;
|
|
3
|
-
context?: string;
|
|
4
|
-
options?: Record<string, unknown>;
|
|
5
|
-
}
|
|
6
|
-
export interface SkillOutput {
|
|
7
|
-
skill: string;
|
|
8
|
-
template?: string;
|
|
9
|
-
checklist: string[];
|
|
10
|
-
patterns: string[];
|
|
11
|
-
gotchas: string[];
|
|
12
|
-
resources: string[];
|
|
13
|
-
}
|
|
14
|
-
export declare function run(input: SkillInput): SkillOutput;
|
|
15
|
-
//# sourceMappingURL=skill-session-save.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-session-save.d.ts","sourceRoot":"","sources":["../../../src/skills/memory/skill-session-save.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAqCD,wBAAgB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAqClD"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
// Skill: session-save — when and how to save MCP sessions
|
|
2
|
-
const TEMPLATE = `
|
|
3
|
-
// ── What to include in a session save ────────────────────────────────────
|
|
4
|
-
//
|
|
5
|
-
// A session save should capture enough context so that a future agent
|
|
6
|
-
// can resume work without re-reading all the source files.
|
|
7
|
-
//
|
|
8
|
-
// Recommended session object shape:
|
|
9
|
-
{
|
|
10
|
-
"task": "The original task description in one sentence",
|
|
11
|
-
"phase": "planning | implementing | reviewing | blocked | complete",
|
|
12
|
-
"progress": {
|
|
13
|
-
"completed": ["List of finished subtasks or files written"],
|
|
14
|
-
"inProgress": ["Current subtask being worked on"],
|
|
15
|
-
"remaining": ["Subtasks still to do"]
|
|
16
|
-
},
|
|
17
|
-
"decisions": [
|
|
18
|
-
{
|
|
19
|
-
"decision": "What was decided",
|
|
20
|
-
"rationale": "Why this approach was chosen",
|
|
21
|
-
"alternatives": ["Other options that were considered"],
|
|
22
|
-
"timestamp": "ISO 8601 timestamp"
|
|
23
|
-
}
|
|
24
|
-
],
|
|
25
|
-
"findings": [
|
|
26
|
-
"Any important discoveries that affect future work",
|
|
27
|
-
"File paths of key files that were read or modified",
|
|
28
|
-
"Patterns or constraints discovered in the codebase"
|
|
29
|
-
],
|
|
30
|
-
"blockers": [
|
|
31
|
-
"Anything preventing progress that needs human input"
|
|
32
|
-
],
|
|
33
|
-
"nextAction": "The single most important next step to resume work"
|
|
34
|
-
}
|
|
35
|
-
`.trim();
|
|
36
|
-
export function run(input) {
|
|
37
|
-
return {
|
|
38
|
-
skill: 'session-save',
|
|
39
|
-
template: TEMPLATE,
|
|
40
|
-
checklist: [
|
|
41
|
-
'Preferred: call veto_session_save { auto_summarize: true } — Veto reads the full conversation and generates the structured summary, context, and task_state for you. No manual writing needed.',
|
|
42
|
-
'Save at the start of every new significant phase: planning, implementing, reviewing',
|
|
43
|
-
'Save after completing each major file or subtask — checkpoint before moving to the next',
|
|
44
|
-
'Save before any risky operation (file overwrites, schema migrations, destructive commands)',
|
|
45
|
-
'Save immediately when a blocker is encountered that requires human input',
|
|
46
|
-
'Save when token context is getting large — a compact save enables a fresh continuation',
|
|
47
|
-
'If writing manually (auto_summarize: false): nextAction MUST be a concrete, file-specific instruction the NEXT AI can execute WITHOUT reading any files first — e.g. "Edit src/server.ts line 302 — add zod .max(2000) on summary field"',
|
|
48
|
-
'If writing manually: include only the specific file paths you actually modified, not a general codebase list',
|
|
49
|
-
'If writing manually: include enough inline context that the restoring AI does not need to re-read those files',
|
|
50
|
-
'Include blockers: anything requiring human action before work can continue',
|
|
51
|
-
'Verify the save succeeded — check auto_summarized: true in the response if you used auto_summarize',
|
|
52
|
-
],
|
|
53
|
-
patterns: [
|
|
54
|
-
'Checkpoint pattern: save after each completed unit of work, not only at the end',
|
|
55
|
-
'Progressive detail: early saves capture intent; later saves add findings and decisions',
|
|
56
|
-
'Minimal viable context: save enough to resume, not a full transcript of every action',
|
|
57
|
-
'Blocker-first save: when stuck, save immediately with the blocker clearly stated',
|
|
58
|
-
],
|
|
59
|
-
gotchas: [
|
|
60
|
-
'Not saving before a context switch — the next session starts blind without a save',
|
|
61
|
-
'Saving too much detail — a 5,000-token session save is expensive to restore and read',
|
|
62
|
-
'Forgetting to include nextAction — the restoring agent does not know where to start',
|
|
63
|
-
'Saving only at the very end — if the task fails partway through, the intermediate work is lost',
|
|
64
|
-
'Using vague phase descriptions ("working") instead of concrete phases (implementing step 3 of 7)',
|
|
65
|
-
],
|
|
66
|
-
resources: [
|
|
67
|
-
'Use the veto_session_save MCP tool: { sessionId, task, phase, progress, decisions, findings }',
|
|
68
|
-
'Use the veto_sessions_list MCP tool to verify saves and list available sessions',
|
|
69
|
-
'Use the veto_session_restore MCP tool to reload a previous session',
|
|
70
|
-
'MCP Session spec: https://modelcontextprotocol.io/docs/concepts/resources',
|
|
71
|
-
],
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=skill-session-save.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-session-save.js","sourceRoot":"","sources":["../../../src/skills/memory/skill-session-save.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAiB1D,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiChB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,UAAU,GAAG,CAAC,KAAiB;IACnC,OAAO;QACL,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,QAAQ;QAClB,SAAS,EAAE;YACT,gMAAgM;YAChM,qFAAqF;YACrF,yFAAyF;YACzF,4FAA4F;YAC5F,0EAA0E;YAC1E,wFAAwF;YACxF,0OAA0O;YAC1O,8GAA8G;YAC9G,+GAA+G;YAC/G,4EAA4E;YAC5E,oGAAoG;SACrG;QACD,QAAQ,EAAE;YACR,iFAAiF;YACjF,wFAAwF;YACxF,sFAAsF;YACtF,kFAAkF;SACnF;QACD,OAAO,EAAE;YACP,mFAAmF;YACnF,sFAAsF;YACtF,qFAAqF;YACrF,gGAAgG;YAChG,kGAAkG;SACnG;QACD,SAAS,EAAE;YACT,+FAA+F;YAC/F,iFAAiF;YACjF,oEAAoE;YACpE,2EAA2E;SAC5E;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-accessibility.d.ts","sourceRoot":"","sources":["../../../src/skills/quality/skill-accessibility.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-accessibility.js","sourceRoot":"","sources":["../../../src/skills/quality/skill-accessibility.ts"],"names":[],"mappings":""}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface SkillInput {
|
|
2
|
-
task: string;
|
|
3
|
-
context?: string;
|
|
4
|
-
options?: Record<string, unknown>;
|
|
5
|
-
}
|
|
6
|
-
export interface SkillOutput {
|
|
7
|
-
skill: string;
|
|
8
|
-
template?: string;
|
|
9
|
-
checklist: string[];
|
|
10
|
-
patterns: string[];
|
|
11
|
-
gotchas: string[];
|
|
12
|
-
resources: string[];
|
|
13
|
-
}
|
|
14
|
-
export declare function run(input: SkillInput): SkillOutput;
|
|
15
|
-
//# sourceMappingURL=skill-code-review.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-code-review.d.ts","sourceRoot":"","sources":["../../../src/skills/quality/skill-code-review.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAkElD"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
// Skill: code-review — 20-point code review checklist
|
|
2
|
-
export function run(input) {
|
|
3
|
-
return {
|
|
4
|
-
skill: 'code-review',
|
|
5
|
-
template: undefined,
|
|
6
|
-
checklist: [
|
|
7
|
-
// Correctness (1-4)
|
|
8
|
-
'1. CORRECTNESS — Does the code do what the PR description says? Walk through the logic manually with a concrete example.',
|
|
9
|
-
'2. EDGE CASES — Does it handle null/undefined, empty collections, zero, negative numbers, very large inputs, and concurrent calls correctly?',
|
|
10
|
-
'3. ERROR HANDLING — Are all errors caught, typed, and handled? No silent swallowed errors, no bare catch blocks that discard the error.',
|
|
11
|
-
'4. CONCURRENCY — Does shared mutable state have proper synchronisation? Are async operations correctly awaited? No floating promises.',
|
|
12
|
-
// Security (5-7)
|
|
13
|
-
'5. INPUT VALIDATION — Is all user-supplied input validated with a schema library (zod/joi) before use? No raw string concatenation into queries.',
|
|
14
|
-
'6. AUTHENTICATION & AUTHORISATION — Does every data-access path check that the requesting user owns the resource? Is auth middleware applied?',
|
|
15
|
-
'7. SECRETS — No hardcoded credentials, API keys, or tokens in the diff. No sensitive values logged or included in error responses.',
|
|
16
|
-
// Performance (8-9)
|
|
17
|
-
'8. N+1 QUERIES — Are list endpoints fetching related records in a loop? Use batch/include/join instead.',
|
|
18
|
-
'9. COMPLEXITY — Are there any O(n²) or worse algorithms on large datasets? Is database access inside a loop?',
|
|
19
|
-
// Types and naming (10-12)
|
|
20
|
-
'10. TYPES — Is TypeScript used strictly (no `any`, no type assertions without comment)? Are interfaces and return types explicit on public functions?',
|
|
21
|
-
'11. NAMING — Are variables, functions, and classes named clearly and consistently? Do boolean variables use is/has/should prefixes?',
|
|
22
|
-
'12. MAGIC VALUES — Are all magic numbers and magic strings replaced with named constants or enums?',
|
|
23
|
-
// Style and complexity (13-14)
|
|
24
|
-
'13. COMPLEXITY — Are functions short (< 30 lines) and single-purpose? If a function requires a long comment to explain it, refactor instead.',
|
|
25
|
-
'14. DUPLICATION — Is the same logic copy-pasted from elsewhere? Extract a shared utility or extend an existing one.',
|
|
26
|
-
// Tests (15-16)
|
|
27
|
-
'15. TEST COVERAGE — Are there tests for the new code? Do they cover the happy path, error paths, and at least one edge case?',
|
|
28
|
-
'16. TEST QUALITY — Do the tests assert on the right things? Are mocks minimal and purposeful? Tests should not duplicate implementation logic.',
|
|
29
|
-
// Documentation (17)
|
|
30
|
-
'17. DOCUMENTATION — Do complex functions have a JSDoc comment explaining the why (not just the what)? Are public API changes reflected in the OpenAPI spec?',
|
|
31
|
-
// Dependencies and build (18)
|
|
32
|
-
'18. DEPENDENCIES — Are new npm packages justified? Check for license compatibility, maintenance status, and security advisories (npm audit).',
|
|
33
|
-
// Observability (19)
|
|
34
|
-
'19. OBSERVABILITY — Are significant operations logged at the appropriate level? Are errors logged with enough context to diagnose? No passwords in logs.',
|
|
35
|
-
// Review hygiene (20)
|
|
36
|
-
'20. BREAKING CHANGES — Does the change break any existing API contracts, DB schemas, or public interfaces? If so, is it properly versioned or migrated?',
|
|
37
|
-
],
|
|
38
|
-
patterns: [
|
|
39
|
-
'Review the diff, not the file — focus on what changed and why',
|
|
40
|
-
'Ask questions instead of issuing commands: "Could this be null here?" vs "Fix this"',
|
|
41
|
-
'Distinguish blocking issues (must fix) from suggestions (nice to have) in comments',
|
|
42
|
-
'Approve with comments for minor non-blocking issues rather than blocking for style',
|
|
43
|
-
'Check the tests before the implementation — tests reveal the intended behaviour',
|
|
44
|
-
],
|
|
45
|
-
gotchas: [
|
|
46
|
-
'Approving without running or reading the tests — tests are part of the code',
|
|
47
|
-
'Nitpicking style when an auto-formatter (Prettier/ESLint) should enforce it',
|
|
48
|
-
'Missing the forest for the trees: reviewing individual lines but missing a design flaw',
|
|
49
|
-
'Not reviewing DB migrations for data safety (missing IF NOT EXISTS, backfill plan)',
|
|
50
|
-
'Forgetting to check error message text — "null pointer exception" leaking to the user',
|
|
51
|
-
],
|
|
52
|
-
resources: [
|
|
53
|
-
'https://google.github.io/eng-practices/review/reviewer/',
|
|
54
|
-
'https://mtlynch.io/code-review-love/',
|
|
55
|
-
'https://www.conventionalcommits.org/ (PR title / commit message style)',
|
|
56
|
-
'https://cheatsheetseries.owasp.org/cheatsheets/Code_Review_Guide_Introduction_Cheat_Sheet.html',
|
|
57
|
-
],
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=skill-code-review.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-code-review.js","sourceRoot":"","sources":["../../../src/skills/quality/skill-code-review.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAiBtD,MAAM,UAAU,GAAG,CAAC,KAAiB;IACnC,OAAO;QACL,KAAK,EAAE,aAAa;QACpB,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE;YACT,oBAAoB;YACpB,0HAA0H;YAC1H,8IAA8I;YAC9I,yIAAyI;YACzI,uIAAuI;YAEvI,iBAAiB;YACjB,kJAAkJ;YAClJ,+IAA+I;YAC/I,oIAAoI;YAEpI,oBAAoB;YACpB,yGAAyG;YACzG,8GAA8G;YAE9G,2BAA2B;YAC3B,uJAAuJ;YACvJ,qIAAqI;YACrI,oGAAoG;YAEpG,+BAA+B;YAC/B,8IAA8I;YAC9I,qHAAqH;YAErH,gBAAgB;YAChB,8HAA8H;YAC9H,gJAAgJ;YAEhJ,qBAAqB;YACrB,6JAA6J;YAE7J,8BAA8B;YAC9B,8IAA8I;YAE9I,qBAAqB;YACrB,0JAA0J;YAE1J,sBAAsB;YACtB,yJAAyJ;SAC1J;QACD,QAAQ,EAAE;YACR,+DAA+D;YAC/D,qFAAqF;YACrF,oFAAoF;YACpF,oFAAoF;YACpF,iFAAiF;SAClF;QACD,OAAO,EAAE;YACP,6EAA6E;YAC7E,6EAA6E;YAC7E,wFAAwF;YACxF,oFAAoF;YACpF,uFAAuF;SACxF;QACD,SAAS,EAAE;YACT,yDAAyD;YACzD,sCAAsC;YACtC,wEAAwE;YACxE,gGAAgG;SACjG;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-docs-gen.d.ts","sourceRoot":"","sources":["../../../src/skills/quality/skill-docs-gen.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-docs-gen.js","sourceRoot":"","sources":["../../../src/skills/quality/skill-docs-gen.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-perf-audit.d.ts","sourceRoot":"","sources":["../../../src/skills/quality/skill-perf-audit.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-perf-audit.js","sourceRoot":"","sources":["../../../src/skills/quality/skill-perf-audit.ts"],"names":[],"mappings":""}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface SkillInput {
|
|
2
|
-
task: string;
|
|
3
|
-
context?: string;
|
|
4
|
-
options?: Record<string, unknown>;
|
|
5
|
-
}
|
|
6
|
-
export interface SkillOutput {
|
|
7
|
-
skill: string;
|
|
8
|
-
template?: string;
|
|
9
|
-
checklist: string[];
|
|
10
|
-
patterns: string[];
|
|
11
|
-
gotchas: string[];
|
|
12
|
-
resources: string[];
|
|
13
|
-
}
|
|
14
|
-
export declare function run(input: SkillInput): SkillOutput;
|
|
15
|
-
//# sourceMappingURL=skill-security-scan.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-security-scan.d.ts","sourceRoot":"","sources":["../../../src/skills/quality/skill-security-scan.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAyElD"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
// Skill: security-scan — OWASP Top 10 scan process with tool commands
|
|
2
|
-
export function run(input) {
|
|
3
|
-
return {
|
|
4
|
-
skill: 'security-scan',
|
|
5
|
-
template: undefined,
|
|
6
|
-
checklist: [
|
|
7
|
-
// Dependency scanning
|
|
8
|
-
'1. Run npm audit: npx npm audit --audit-level=high (fail CI if high/critical found)',
|
|
9
|
-
'2. Run Snyk for deeper CVE analysis: npx snyk test --severity-threshold=high',
|
|
10
|
-
'3. Check for outdated packages: npx npm-check-updates (review before upgrading)',
|
|
11
|
-
'4. Verify lockfile integrity: npm ci (uses lockfile exactly; fails if lockfile is dirty)',
|
|
12
|
-
// Secrets scanning
|
|
13
|
-
'5. Scan for hardcoded secrets: npx gitleaks detect --source . --verbose',
|
|
14
|
-
'6. Run trufflehog on git history: trufflehog git file://. --since-commit HEAD~20',
|
|
15
|
-
'7. Verify .gitignore covers .env, *.key, *.pem, secrets.json, credentials.json',
|
|
16
|
-
// Static analysis
|
|
17
|
-
'8. Run ESLint security plugin: eslint --plugin security --rule "security/detect-eval-with-expression: error"',
|
|
18
|
-
'9. Run Semgrep OWASP ruleset: semgrep --config=p/owasp-top-ten --error .',
|
|
19
|
-
'10. Run CodeQL (GitHub Actions): use codeql-action/analyze with javascript/typescript queries',
|
|
20
|
-
// A01 – Broken Access Control
|
|
21
|
-
'11. A01 – Review every route handler: confirm auth middleware precedes data access',
|
|
22
|
-
'12. A01 – Search for direct object references: grep -r "req.params.id" src/ — verify ownership check in each',
|
|
23
|
-
// A02 – Cryptographic Failures
|
|
24
|
-
'13. A02 – Search for weak hashes: grep -r "md5\\|sha1\\|DES\\|RC4" src/ (flag any match)',
|
|
25
|
-
'14. A02 – Verify HTTPS enforcement: check for HSTS header and HTTP→HTTPS redirect in server config',
|
|
26
|
-
// A03 – Injection
|
|
27
|
-
'15. A03 – Search for SQL concatenation: grep -r "SELECT.*+" src/ — all DB calls should use parameterised queries',
|
|
28
|
-
'16. A03 – Search for eval: grep -rn "eval(" src/ — no eval() in production code',
|
|
29
|
-
// A05 – Misconfiguration
|
|
30
|
-
'17. A05 – Run security headers check: curl -I https://your-domain.com | grep -E "Content-Security|X-Frame|Strict-Transport|X-Content"',
|
|
31
|
-
'18. A05 – Verify no debug routes in production: grep -r "/debug\\|/__admin" src/routes/',
|
|
32
|
-
// A07 – Auth failures
|
|
33
|
-
'19. A07 – Confirm rate limiting on auth endpoints: grep -r "rateLimit" src/routes/auth',
|
|
34
|
-
'20. A07 – Verify account lockout logic exists: grep -r "lockedUntil\\|failedAttempts" src/services/auth',
|
|
35
|
-
// DAST
|
|
36
|
-
'21. Run OWASP ZAP baseline scan: docker run -t owasp/zap2docker-stable zap-baseline.py -t https://staging.example.com',
|
|
37
|
-
'22. Check Content-Security-Policy with observatory: npx observatory-cli your-domain.com --format report',
|
|
38
|
-
// Final gate
|
|
39
|
-
'23. Review all HIGH/CRITICAL findings; create tickets for each; do not ship with open criticals',
|
|
40
|
-
'24. Add security scan steps to CI pipeline so every PR is checked automatically',
|
|
41
|
-
],
|
|
42
|
-
patterns: [
|
|
43
|
-
'Shift-left security: scan in CI on every PR, not only before release',
|
|
44
|
-
'Defence in depth: layered scanning (dependency + static + dynamic)',
|
|
45
|
-
'Fail-fast: non-zero CI exit code on any high/critical finding',
|
|
46
|
-
'Security-as-code: Semgrep rules and ZAP configs version-controlled alongside application',
|
|
47
|
-
],
|
|
48
|
-
gotchas: [
|
|
49
|
-
'npm audit reports transitive dependency vulnerabilities — check if exploitable in your code path before panicking',
|
|
50
|
-
'Semgrep false positives on test files — add --exclude "tests/" to production scans',
|
|
51
|
-
'ZAP baseline scan covers only unauthenticated paths — run a full scan with an auth script for coverage',
|
|
52
|
-
'Gitleaks detects secrets committed at any point in history, not just HEAD — clean git history with git-filter-repo if needed',
|
|
53
|
-
'Snyk requires authentication for full CVE database access — set SNYK_TOKEN in CI secrets',
|
|
54
|
-
],
|
|
55
|
-
resources: [
|
|
56
|
-
'https://owasp.org/www-project-top-ten/',
|
|
57
|
-
'https://owasp.org/www-project-zap/',
|
|
58
|
-
'https://semgrep.dev/p/owasp-top-ten',
|
|
59
|
-
'https://github.com/gitleaks/gitleaks',
|
|
60
|
-
'https://snyk.io/docs/snyk-cli/',
|
|
61
|
-
'https://cheatsheetseries.owasp.org/cheatsheets/Nodejs_Security_Cheat_Sheet.html',
|
|
62
|
-
'https://docs.npmjs.com/cli/v10/commands/npm-audit',
|
|
63
|
-
'https://observatory.mozilla.org/',
|
|
64
|
-
],
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=skill-security-scan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-security-scan.js","sourceRoot":"","sources":["../../../src/skills/quality/skill-security-scan.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAiBtE,MAAM,UAAU,GAAG,CAAC,KAAiB;IACnC,OAAO;QACL,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,SAAS;QACnB,SAAS,EAAE;YACT,sBAAsB;YACtB,qFAAqF;YACrF,8EAA8E;YAC9E,iFAAiF;YACjF,0FAA0F;YAE1F,mBAAmB;YACnB,yEAAyE;YACzE,kFAAkF;YAClF,gFAAgF;YAEhF,kBAAkB;YAClB,8GAA8G;YAC9G,0EAA0E;YAC1E,+FAA+F;YAE/F,8BAA8B;YAC9B,oFAAoF;YACpF,8GAA8G;YAE9G,+BAA+B;YAC/B,0FAA0F;YAC1F,oGAAoG;YAEpG,kBAAkB;YAClB,kHAAkH;YAClH,iFAAiF;YAEjF,yBAAyB;YACzB,uIAAuI;YACvI,yFAAyF;YAEzF,sBAAsB;YACtB,wFAAwF;YACxF,yGAAyG;YAEzG,OAAO;YACP,uHAAuH;YACvH,yGAAyG;YAEzG,aAAa;YACb,iGAAiG;YACjG,iFAAiF;SAClF;QACD,QAAQ,EAAE;YACR,sEAAsE;YACtE,oEAAoE;YACpE,+DAA+D;YAC/D,0FAA0F;SAC3F;QACD,OAAO,EAAE;YACP,mHAAmH;YACnH,oFAAoF;YACpF,wGAAwG;YACxG,8HAA8H;YAC9H,0FAA0F;SAC3F;QACD,SAAS,EAAE;YACT,wCAAwC;YACxC,oCAAoC;YACpC,qCAAqC;YACrC,sCAAsC;YACtC,gCAAgC;YAChC,iFAAiF;YACjF,mDAAmD;YACnD,kCAAkC;SACnC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export interface SkillInput {
|
|
2
|
-
task: string;
|
|
3
|
-
context?: string;
|
|
4
|
-
options?: Record<string, unknown>;
|
|
5
|
-
}
|
|
6
|
-
export interface SkillOutput {
|
|
7
|
-
skill: string;
|
|
8
|
-
template?: string;
|
|
9
|
-
checklist: string[];
|
|
10
|
-
patterns: string[];
|
|
11
|
-
gotchas: string[];
|
|
12
|
-
resources: string[];
|
|
13
|
-
}
|
|
14
|
-
export declare function run(input: SkillInput): SkillOutput;
|
|
15
|
-
//# sourceMappingURL=skill-test-suite.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-test-suite.d.ts","sourceRoot":"","sources":["../../../src/skills/quality/skill-test-suite.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAgOD,wBAAgB,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAkDlD"}
|