@fenixforce/edition-pro 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/approval-routes.d.ts +15 -0
- package/dist/api/fleet-routes.d.ts +23 -0
- package/dist/api/integration-routes.d.ts +17 -0
- package/dist/api/middleware.d.ts +37 -0
- package/dist/boot.d.ts +37 -0
- package/dist/business/approval-queue.d.ts +94 -0
- package/dist/business/arena.d.ts +71 -0
- package/dist/business/best-of-n.d.ts +68 -0
- package/dist/business/brainstorm.d.ts +42 -0
- package/dist/business/compile-checker.d.ts +50 -0
- package/dist/business/debate.d.ts +38 -0
- package/dist/business/fleet-budget.d.ts +69 -0
- package/dist/business/fleet-config.d.ts +125 -0
- package/dist/business/fleet.d.ts +85 -0
- package/dist/business/handoff.d.ts +56 -0
- package/dist/business/hat-system.d.ts +57 -0
- package/dist/business/index.d.ts +44 -0
- package/dist/business/integration-registry.d.ts +66 -0
- package/dist/business/node-pipeline.d.ts +62 -0
- package/dist/business/oracle.d.ts +64 -0
- package/dist/business/roles/index.d.ts +7 -0
- package/dist/business/roles/judge.d.ts +24 -0
- package/dist/business/roles/planner.d.ts +30 -0
- package/dist/business/roles/types.d.ts +37 -0
- package/dist/business/roles/worker.d.ts +25 -0
- package/dist/business/router.d.ts +75 -0
- package/dist/business/shared-memory.d.ts +85 -0
- package/dist/business/status-detector.d.ts +52 -0
- package/dist/business/swarm-registry.d.ts +63 -0
- package/dist/business/templates.d.ts +55 -0
- package/dist/business/workspace-manager.d.ts +105 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +638 -0
- package/dist/infrastructure/pty-agent.d.ts +74 -0
- package/dist/migrations/migrate.d.ts +7 -0
- package/dist/migrations/runner.d.ts +49 -0
- package/dist/workspace/worktree.d.ts +69 -0
- package/package.json +37 -0
- package/skills/builtin/academic-researcher/SKILL.md +51 -0
- package/skills/builtin/advanced-recon/SKILL.md +75 -0
- package/skills/builtin/agent-governance/SKILL.md +122 -0
- package/skills/builtin/algorithmic-art/SKILL.md +55 -0
- package/skills/builtin/api-attack-surface-mapper/SKILL.md +88 -0
- package/skills/builtin/api-development/SKILL.md +147 -0
- package/skills/builtin/api-exploit-prover/SKILL.md +74 -0
- package/skills/builtin/api-integration/SKILL.md +73 -0
- package/skills/builtin/api-security-tester/SKILL.md +82 -0
- package/skills/builtin/api-test-executor/SKILL.md +62 -0
- package/skills/builtin/app-store-optimization/SKILL.md +46 -0
- package/skills/builtin/audio-tour-guide/SKILL.md +18 -0
- package/skills/builtin/auth-flow-operator/SKILL.md +70 -0
- package/skills/builtin/autonomous-rag/SKILL.md +21 -0
- package/skills/builtin/backend-development/SKILL.md +265 -0
- package/skills/builtin/binary-analysis-analyst/SKILL.md +61 -0
- package/skills/builtin/binary-analysis-core/SKILL.md +65 -0
- package/skills/builtin/binary-recon/SKILL.md +64 -0
- package/skills/builtin/blackboard-coordination/SKILL.md +56 -0
- package/skills/builtin/blog-to-podcast/SKILL.md +18 -0
- package/skills/builtin/blog-writing/SKILL.md +36 -0
- package/skills/builtin/brainstorming/SKILL.md +69 -0
- package/skills/builtin/brand-design/SKILL.md +42 -0
- package/skills/builtin/ci-cd-pipelines/SKILL.md +210 -0
- package/skills/builtin/cloud-infrastructure/SKILL.md +140 -0
- package/skills/builtin/code-review/SKILL.md +88 -0
- package/skills/builtin/code-review-analyst/SKILL.md +96 -0
- package/skills/builtin/code-review-recon/SKILL.md +64 -0
- package/skills/builtin/code-review-verifier/SKILL.md +55 -0
- package/skills/builtin/coding-agent-team/SKILL.md +13 -0
- package/skills/builtin/competitor-intelligence/SKILL.md +39 -0
- package/skills/builtin/content-engine/SKILL.md +82 -0
- package/skills/builtin/context7-docs/SKILL.md +145 -0
- package/skills/builtin/copywriting/SKILL.md +38 -0
- package/skills/builtin/corrective-rag/SKILL.md +19 -0
- package/skills/builtin/cost-optimization/SKILL.md +131 -0
- package/skills/builtin/crypto-vulnerability-analyst/SKILL.md +64 -0
- package/skills/builtin/customer-support/SKILL.md +48 -0
- package/skills/builtin/customer-voice-support/SKILL.md +43 -0
- package/skills/builtin/data-analysis/SKILL.md +57 -0
- package/skills/builtin/data-visualization/SKILL.md +33 -0
- package/skills/builtin/database-design/SKILL.md +119 -0
- package/skills/builtin/decision-helper/SKILL.md +84 -0
- package/skills/builtin/deep-research/SKILL.md +68 -0
- package/skills/builtin/deepwiki-research/SKILL.md +115 -0
- package/skills/builtin/dependency-audit/SKILL.md +46 -0
- package/skills/builtin/doc-coauthoring/SKILL.md +48 -0
- package/skills/builtin/docker-deployment/SKILL.md +243 -0
- package/skills/builtin/docx-generation/SKILL.md +135 -0
- package/skills/builtin/dry-run-harness/SKILL.md +61 -0
- package/skills/builtin/editor/SKILL.md +44 -0
- package/skills/builtin/email-drafter/SKILL.md +42 -0
- package/skills/builtin/error-handling/SKILL.md +82 -0
- package/skills/builtin/eval-harness/SKILL.md +197 -0
- package/skills/builtin/evaluation-framework/SKILL.md +51 -0
- package/skills/builtin/exploit-writer/SKILL.md +63 -0
- package/skills/builtin/fact-checker/SKILL.md +51 -0
- package/skills/builtin/filesystem-context/SKILL.md +47 -0
- package/skills/builtin/financial-coach/SKILL.md +18 -0
- package/skills/builtin/finding-chain-correlator/SKILL.md +70 -0
- package/skills/builtin/finding-verifier/SKILL.md +65 -0
- package/skills/builtin/frontend-design/SKILL.md +104 -0
- package/skills/builtin/frontend-development/SKILL.md +227 -0
- package/skills/builtin/frontend-slides/SKILL.md +155 -0
- package/skills/builtin/fullstack-project/SKILL.md +286 -0
- package/skills/builtin/game-development/SKILL.md +60 -0
- package/skills/builtin/git-workflow/SKILL.md +44 -0
- package/skills/builtin/i18n-localization/SKILL.md +38 -0
- package/skills/builtin/image-prompt-engineering/SKILL.md +37 -0
- package/skills/builtin/investment-research/SKILL.md +33 -0
- package/skills/builtin/investor-materials/SKILL.md +90 -0
- package/skills/builtin/javascript-surface-analyzer/SKILL.md +66 -0
- package/skills/builtin/markdown-reports/SKILL.md +68 -0
- package/skills/builtin/market-research/SKILL.md +69 -0
- package/skills/builtin/mcp-builder/SKILL.md +86 -0
- package/skills/builtin/meeting-notes/SKILL.md +47 -0
- package/skills/builtin/memory-safety-analyst/SKILL.md +61 -0
- package/skills/builtin/meta-controller/SKILL.md +44 -0
- package/skills/builtin/mixture-of-agents/SKILL.md +53 -0
- package/skills/builtin/monitoring-observability/SKILL.md +169 -0
- package/skills/builtin/negotiation-simulator/SKILL.md +24 -0
- package/skills/builtin/nestjs-development/SKILL.md +56 -0
- package/skills/builtin/nextjs-development/SKILL.md +55 -0
- package/skills/builtin/parallel-dispatch/SKILL.md +83 -0
- package/skills/builtin/pdf-generation/SKILL.md +169 -0
- package/skills/builtin/personal-finance/SKILL.md +17 -0
- package/skills/builtin/pev-workflow/SKILL.md +62 -0
- package/skills/builtin/planning-with-files/SKILL.md +59 -0
- package/skills/builtin/pptx-generation/SKILL.md +117 -0
- package/skills/builtin/prisma-orm/SKILL.md +48 -0
- package/skills/builtin/rag-database-routing/SKILL.md +38 -0
- package/skills/builtin/rapid-prototyping/SKILL.md +152 -0
- package/skills/builtin/react-development/SKILL.md +244 -0
- package/skills/builtin/react-native-mobile/SKILL.md +113 -0
- package/skills/builtin/refactoring/SKILL.md +39 -0
- package/skills/builtin/reflexive-metacognition/SKILL.md +29 -0
- package/skills/builtin/riper-workflow/SKILL.md +214 -0
- package/skills/builtin/security-audit/SKILL.md +113 -0
- package/skills/builtin/security-self-audit/SKILL.md +311 -0
- package/skills/builtin/self-evolving-agent/SKILL.md +28 -0
- package/skills/builtin/self-improvement-loop/SKILL.md +58 -0
- package/skills/builtin/semantic-search/SKILL.md +93 -0
- package/skills/builtin/seo-audit-team/SKILL.md +27 -0
- package/skills/builtin/seo-optimization/SKILL.md +49 -0
- package/skills/builtin/server-management/SKILL.md +190 -0
- package/skills/builtin/social-media-content/SKILL.md +50 -0
- package/skills/builtin/sprint-planner/SKILL.md +49 -0
- package/skills/builtin/strategic-compact/SKILL.md +61 -0
- package/skills/builtin/strategy-advisor/SKILL.md +51 -0
- package/skills/builtin/structured-thinking/SKILL.md +70 -0
- package/skills/builtin/subagent-development/SKILL.md +105 -0
- package/skills/builtin/system-design/SKILL.md +66 -0
- package/skills/builtin/systematic-debugging/SKILL.md +87 -0
- package/skills/builtin/tailwind-css/SKILL.md +55 -0
- package/skills/builtin/taint-flow-tracer/SKILL.md +89 -0
- package/skills/builtin/teaching-agent-team/SKILL.md +32 -0
- package/skills/builtin/tech-debt-manager/SKILL.md +67 -0
- package/skills/builtin/technical-documentation/SKILL.md +47 -0
- package/skills/builtin/test-driven-development/SKILL.md +70 -0
- package/skills/builtin/theme-factory/SKILL.md +244 -0
- package/skills/builtin/threat-model-generator/SKILL.md +105 -0
- package/skills/builtin/trust-layer/SKILL.md +43 -0
- package/skills/builtin/typescript-patterns/SKILL.md +61 -0
- package/skills/builtin/ui-ux-design/SKILL.md +75 -0
- package/skills/builtin/verification-before-completion/SKILL.md +41 -0
- package/skills/builtin/verification-loop/SKILL.md +120 -0
- package/skills/builtin/waf-bypass-agent/SKILL.md +97 -0
- package/skills/builtin/web-artifacts-builder/SKILL.md +117 -0
- package/skills/builtin/web-assessment-executor/SKILL.md +66 -0
- package/skills/builtin/web-exploit-prover/SKILL.md +58 -0
- package/skills/builtin/web-scraping/SKILL.md +63 -0
- package/skills/builtin/webapp-testing/SKILL.md +86 -0
- package/skills/builtin/webhook-development/SKILL.md +62 -0
- package/skills/builtin/writing-skills/SKILL.md +67 -0
- package/skills/builtin/xlsx-generation/SKILL.md +116 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pdf-generation
|
|
3
|
+
description: "Use this skill when the user asks to create, fill, merge, split, or manipulate PDF files. Triggers: 'PDF', '.pdf', 'form fill', 'merge PDFs', 'split PDF', 'watermark', 'OCR', or any request involving PDF manipulation."
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PDF Generation
|
|
8
|
+
|
|
9
|
+
## What This Skill Does
|
|
10
|
+
|
|
11
|
+
Create and manipulate PDFs using `pdf-lib` (MIT, pure JavaScript, runs on Bun). Extract text using `pdf-parse`.
|
|
12
|
+
|
|
13
|
+
## Dependencies
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
bun add pdf-lib
|
|
17
|
+
bun add pdf-parse
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Creating PDFs
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { PDFDocument, rgb, StandardFonts, PageSizes } from "pdf-lib";
|
|
24
|
+
import { writeFile, readFile } from "fs/promises";
|
|
25
|
+
|
|
26
|
+
const doc = await PDFDocument.create();
|
|
27
|
+
doc.setTitle("Document Title");
|
|
28
|
+
doc.setAuthor("Fenix Agent");
|
|
29
|
+
|
|
30
|
+
const font = await doc.embedFont(StandardFonts.Helvetica);
|
|
31
|
+
const boldFont = await doc.embedFont(StandardFonts.HelveticaBold);
|
|
32
|
+
|
|
33
|
+
const page = doc.addPage(PageSizes.Letter); // [612, 792]
|
|
34
|
+
const { width, height } = page.getSize();
|
|
35
|
+
|
|
36
|
+
// Title
|
|
37
|
+
page.drawText("Document Title", {
|
|
38
|
+
x: 50, y: height - 72,
|
|
39
|
+
size: 24, font: boldFont, color: rgb(0.1, 0.1, 0.12),
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Body text
|
|
43
|
+
page.drawText("This is a paragraph of body text.", {
|
|
44
|
+
x: 50, y: height - 120,
|
|
45
|
+
size: 12, font, color: rgb(0.2, 0.2, 0.2),
|
|
46
|
+
maxWidth: width - 100,
|
|
47
|
+
lineHeight: 16,
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
// Draw line separator
|
|
51
|
+
page.drawLine({
|
|
52
|
+
start: { x: 50, y: height - 100 },
|
|
53
|
+
end: { x: width - 50, y: height - 100 },
|
|
54
|
+
thickness: 1, color: rgb(0.8, 0.8, 0.8),
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Add second page
|
|
58
|
+
const page2 = doc.addPage(PageSizes.Letter);
|
|
59
|
+
page2.drawText("Page 2 content", { x: 50, y: height - 72, size: 12, font });
|
|
60
|
+
|
|
61
|
+
const pdfBytes = await doc.save();
|
|
62
|
+
await writeFile("output.pdf", pdfBytes);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Merging PDFs
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { PDFDocument } from "pdf-lib";
|
|
69
|
+
|
|
70
|
+
const merged = await PDFDocument.create();
|
|
71
|
+
const files = ["file1.pdf", "file2.pdf", "file3.pdf"];
|
|
72
|
+
|
|
73
|
+
for (const file of files) {
|
|
74
|
+
const bytes = await readFile(file);
|
|
75
|
+
const source = await PDFDocument.load(bytes);
|
|
76
|
+
const pages = await merged.copyPages(source, source.getPageIndices());
|
|
77
|
+
pages.forEach(page => merged.addPage(page));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
await writeFile("merged.pdf", await merged.save());
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Splitting PDFs
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
const source = await PDFDocument.load(await readFile("input.pdf"));
|
|
87
|
+
|
|
88
|
+
// Extract pages 0-4 into a new document
|
|
89
|
+
const part1 = await PDFDocument.create();
|
|
90
|
+
const pages = await part1.copyPages(source, [0, 1, 2, 3, 4]);
|
|
91
|
+
pages.forEach(p => part1.addPage(p));
|
|
92
|
+
await writeFile("part1.pdf", await part1.save());
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Filling PDF Forms
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
const bytes = await readFile("form.pdf");
|
|
99
|
+
const doc = await PDFDocument.load(bytes);
|
|
100
|
+
const form = doc.getForm();
|
|
101
|
+
|
|
102
|
+
// Fill fields by name
|
|
103
|
+
form.getTextField("name").setText("John Doe");
|
|
104
|
+
form.getTextField("email").setText("john@example.com");
|
|
105
|
+
form.getCheckBox("agree").check();
|
|
106
|
+
form.getDropdown("country").select("United States");
|
|
107
|
+
|
|
108
|
+
// Flatten (make fields non-editable)
|
|
109
|
+
form.flatten();
|
|
110
|
+
|
|
111
|
+
await writeFile("filled.pdf", await doc.save());
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Adding Watermark
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const doc = await PDFDocument.load(await readFile("input.pdf"));
|
|
118
|
+
const font = await doc.embedFont(StandardFonts.HelveticaBold);
|
|
119
|
+
|
|
120
|
+
for (const page of doc.getPages()) {
|
|
121
|
+
const { width, height } = page.getSize();
|
|
122
|
+
page.drawText("DRAFT", {
|
|
123
|
+
x: width / 4, y: height / 3,
|
|
124
|
+
size: 72, font,
|
|
125
|
+
color: rgb(0.9, 0.9, 0.9),
|
|
126
|
+
rotate: { type: "degrees" as const, angle: 45 },
|
|
127
|
+
opacity: 0.3,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
await writeFile("watermarked.pdf", await doc.save());
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Extracting Text
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
import pdf from "pdf-parse";
|
|
138
|
+
|
|
139
|
+
const buffer = await readFile("input.pdf");
|
|
140
|
+
const data = await pdf(buffer);
|
|
141
|
+
console.log(data.text); // All text content
|
|
142
|
+
console.log(data.numpages); // Page count
|
|
143
|
+
console.log(data.info); // Metadata
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Embedding Images
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
const imageBytes = await readFile("logo.png");
|
|
150
|
+
const image = await doc.embedPng(imageBytes);
|
|
151
|
+
// or: const image = await doc.embedJpg(imageBytes);
|
|
152
|
+
|
|
153
|
+
const dims = image.scale(0.5); // Scale to 50%
|
|
154
|
+
page.drawImage(image, {
|
|
155
|
+
x: 50, y: height - 100,
|
|
156
|
+
width: dims.width, height: dims.height,
|
|
157
|
+
});
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Rules
|
|
161
|
+
|
|
162
|
+
- Use `pdf-lib` for creation, merging, splitting, form filling, watermarks (pure JS, Bun-compatible)
|
|
163
|
+
- Use `pdf-parse` for text extraction (pure JS, Bun-compatible)
|
|
164
|
+
- Always embed fonts (never rely on system fonts for portability)
|
|
165
|
+
- Always set metadata (title, author, creation date)
|
|
166
|
+
- For form filling, flatten after filling unless user needs editable output
|
|
167
|
+
- Test output opens in multiple PDF readers
|
|
168
|
+
- All packages are MIT licensed, no Python required
|
|
169
|
+
- For OCR on scanned PDFs, use Vision-LLM through Fenix provider abstraction (Task 3.9), not Tesseract.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Personal Finance
|
|
2
|
+
## Capabilities
|
|
3
|
+
- Parse bank statements and categorize expenses
|
|
4
|
+
- Build monthly budgets with recommended allocations
|
|
5
|
+
- Track spending against budget categories
|
|
6
|
+
- Calculate savings rate and project goal timelines
|
|
7
|
+
- Identify spending patterns and suggest optimizations
|
|
8
|
+
|
|
9
|
+
## Budget Template (50/30/20)
|
|
10
|
+
- **50% Needs**: rent, utilities, groceries, insurance, minimum debt payments
|
|
11
|
+
- **30% Wants**: entertainment, dining out, subscriptions, hobbies
|
|
12
|
+
- **20% Savings**: emergency fund, retirement, debt payoff above minimums
|
|
13
|
+
|
|
14
|
+
## Rules
|
|
15
|
+
- Categorize every transaction (no "miscellaneous" bucket above 5%)
|
|
16
|
+
- Flag recurring subscriptions the user may have forgotten
|
|
17
|
+
- Note: informational guidance, not professional financial advice.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Plan -> Execute -> Verify
|
|
2
|
+
|
|
3
|
+
## The Three Stages
|
|
4
|
+
|
|
5
|
+
### Plan
|
|
6
|
+
Create detailed plan with expected outcomes for each step. Plan reviewed before execution begins.
|
|
7
|
+
|
|
8
|
+
### Execute
|
|
9
|
+
Follow the plan. If unexpected complexity discovered, return to planning rather than improvising.
|
|
10
|
+
|
|
11
|
+
### Verify
|
|
12
|
+
Dedicated verification step after execution. Verifier operates independently:
|
|
13
|
+
- Does NOT trust the executor's self-report
|
|
14
|
+
- Reads actual output/code independently
|
|
15
|
+
- Checks against original plan's expected outcomes
|
|
16
|
+
- Reports pass/fail with specific evidence
|
|
17
|
+
|
|
18
|
+
## Self-Correcting Loop
|
|
19
|
+
|
|
20
|
+
If verify fails:
|
|
21
|
+
1. Verifier produces specific failure report
|
|
22
|
+
2. Return to Plan with failure report as input
|
|
23
|
+
3. New plan addresses specific failures
|
|
24
|
+
4. Execute revised plan
|
|
25
|
+
5. Verify again
|
|
26
|
+
6. Max 3 correction cycles, then escalate to user
|
|
27
|
+
|
|
28
|
+
## Artifact Production
|
|
29
|
+
|
|
30
|
+
Each PEV cycle produces:
|
|
31
|
+
- `plan.md` — detailed plan with expected outcomes
|
|
32
|
+
- Execution log — what was actually done
|
|
33
|
+
- Verification report — pass/fail per step with evidence
|
|
34
|
+
|
|
35
|
+
## Output Format
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
## Plan
|
|
39
|
+
### Step 1: [Title]
|
|
40
|
+
**Action**: [what to do]
|
|
41
|
+
**Expected outcome**: [what should result]
|
|
42
|
+
|
|
43
|
+
## Execution Log
|
|
44
|
+
### Step 1: [Title]
|
|
45
|
+
**Status**: complete
|
|
46
|
+
**Actual outcome**: [what happened]
|
|
47
|
+
|
|
48
|
+
## Verification Report
|
|
49
|
+
### Step 1: [Title]
|
|
50
|
+
**Expected**: [from plan]
|
|
51
|
+
**Actual**: [from execution]
|
|
52
|
+
**Verdict**: PASS / FAIL
|
|
53
|
+
**Evidence**: [specific proof]
|
|
54
|
+
|
|
55
|
+
## Overall: PASS / FAIL (cycle N of 3)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Rules
|
|
59
|
+
|
|
60
|
+
- Verification is always a separate step, never combined with execution
|
|
61
|
+
- Verifier must distrust executor's report
|
|
62
|
+
- Each PEV cycle produces artifacts: plan.md, execution log, verification report
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: planning-with-files
|
|
3
|
+
description: "Use this skill for multi-step tasks, complex projects, or any work requiring a plan before execution. Triggers: 'plan', 'multi-step', 'project', 'architect', 'complex task', 'break this down', or any task with 3+ steps that benefits from written planning."
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Planning with Files
|
|
8
|
+
|
|
9
|
+
## What This Skill Does
|
|
10
|
+
|
|
11
|
+
Use filesystem-persisted plans for multi-step work. Write the plan before executing. Track progress. Capture findings. Recover context across sessions.
|
|
12
|
+
|
|
13
|
+
## Files
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
workspace/
|
|
17
|
+
├── task_plan.md # The plan with checkable items
|
|
18
|
+
├── findings.md # Discoveries and decisions made during work
|
|
19
|
+
├── progress.md # Current status and blockers
|
|
20
|
+
└── scratchpad.md # Temporary notes, rough ideas
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Plan Format
|
|
24
|
+
|
|
25
|
+
```markdown
|
|
26
|
+
# Task: [What we're building]
|
|
27
|
+
|
|
28
|
+
## Goal
|
|
29
|
+
One sentence describing the end state.
|
|
30
|
+
|
|
31
|
+
## Steps
|
|
32
|
+
- [ ] Step 1: [specific, actionable, completable in one session]
|
|
33
|
+
- [ ] Step 2: [depends on step 1 output]
|
|
34
|
+
- [ ] Step 3: [can be done in parallel with step 2]
|
|
35
|
+
|
|
36
|
+
## Decisions Made
|
|
37
|
+
- Decision 1: [what] because [why]
|
|
38
|
+
|
|
39
|
+
## Open Questions
|
|
40
|
+
- Question 1: [what we need to find out]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Rules
|
|
44
|
+
|
|
45
|
+
- Write the plan BEFORE executing any steps
|
|
46
|
+
- Each step must be specific enough that you could hand it to someone else
|
|
47
|
+
- Update progress.md after completing each step
|
|
48
|
+
- Record findings as you discover them (don't lose context)
|
|
49
|
+
- Review the plan after every 3 steps and adjust if needed
|
|
50
|
+
- Steps should be 2-5 minutes each. If longer, break them down.
|
|
51
|
+
|
|
52
|
+
## Dynamic Scaffolding
|
|
53
|
+
|
|
54
|
+
Start with minimal plan structure. Add complexity only as the task reveals it:
|
|
55
|
+
- Simple task (1-3 steps): single task_plan.md with checklist
|
|
56
|
+
- Medium task (4-10 steps): task_plan.md + findings.md
|
|
57
|
+
- Complex task (10+ steps): full workspace with task_plan.md, findings.md, progress.md, decisions.md, scratchpad.md
|
|
58
|
+
|
|
59
|
+
Don't create a 5-file workspace for a 2-step task. Don't try to squeeze a 15-step project into a single checklist.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pptx-generation
|
|
3
|
+
description: "Use this skill when the user asks to create or edit PowerPoint presentations (.pptx). Triggers: 'presentation', 'slides', 'deck', 'PowerPoint', '.pptx', 'pitch deck', 'slide deck', or requests for visual presentations with layouts, speaker notes, and diagrams."
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# PPTX Generation
|
|
8
|
+
|
|
9
|
+
## What This Skill Does
|
|
10
|
+
|
|
11
|
+
Create PowerPoint presentations using the `pptxgenjs` npm package (MIT, pure JavaScript, runs on Bun).
|
|
12
|
+
|
|
13
|
+
## Dependencies
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
bun add pptxgenjs
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Creation
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import PptxGenJS from "pptxgenjs";
|
|
23
|
+
|
|
24
|
+
const pres = new PptxGenJS();
|
|
25
|
+
pres.layout = "LAYOUT_16x9";
|
|
26
|
+
pres.author = "Fenix Agent";
|
|
27
|
+
pres.title = "Presentation Title";
|
|
28
|
+
|
|
29
|
+
// Title slide
|
|
30
|
+
const titleSlide = pres.addSlide();
|
|
31
|
+
titleSlide.addText("Presentation Title", {
|
|
32
|
+
x: 0.5, y: 1.5, w: 9, h: 1.5,
|
|
33
|
+
fontSize: 36, bold: true, color: "1a1a2e",
|
|
34
|
+
align: "center",
|
|
35
|
+
});
|
|
36
|
+
titleSlide.addText("Subtitle or Author", {
|
|
37
|
+
x: 0.5, y: 3.2, w: 9, h: 0.8,
|
|
38
|
+
fontSize: 18, color: "666666",
|
|
39
|
+
align: "center",
|
|
40
|
+
});
|
|
41
|
+
titleSlide.addNotes("Speaker notes for the title slide go here.");
|
|
42
|
+
|
|
43
|
+
// Content slide with bullets
|
|
44
|
+
const contentSlide = pres.addSlide();
|
|
45
|
+
contentSlide.addText("Section Title", {
|
|
46
|
+
x: 0.5, y: 0.3, w: 9, h: 0.8,
|
|
47
|
+
fontSize: 28, bold: true, color: "1a1a2e",
|
|
48
|
+
});
|
|
49
|
+
contentSlide.addText(
|
|
50
|
+
[
|
|
51
|
+
{ text: "First point", options: { bullet: true, fontSize: 18 } },
|
|
52
|
+
{ text: "Second point", options: { bullet: true, fontSize: 18 } },
|
|
53
|
+
{ text: "Third point", options: { bullet: true, fontSize: 18 } },
|
|
54
|
+
],
|
|
55
|
+
{ x: 0.8, y: 1.5, w: 8.2, h: 4, valign: "top" }
|
|
56
|
+
);
|
|
57
|
+
contentSlide.addNotes("Key talking points for this slide.");
|
|
58
|
+
|
|
59
|
+
// Slide with image (from file or base64)
|
|
60
|
+
const imageSlide = pres.addSlide();
|
|
61
|
+
imageSlide.addImage({ path: "chart.png", x: 1, y: 1.5, w: 8, h: 4.5 });
|
|
62
|
+
// Or from base64:
|
|
63
|
+
// imageSlide.addImage({ data: "data:image/png;base64,...", x: 1, y: 1.5, w: 8, h: 4.5 });
|
|
64
|
+
|
|
65
|
+
// Slide with table
|
|
66
|
+
const tableSlide = pres.addSlide();
|
|
67
|
+
tableSlide.addText("Data Overview", { x: 0.5, y: 0.3, w: 9, h: 0.8, fontSize: 28, bold: true });
|
|
68
|
+
tableSlide.addTable(
|
|
69
|
+
[
|
|
70
|
+
[{ text: "Metric", options: { bold: true, fill: { color: "2563eb" }, color: "ffffff" } },
|
|
71
|
+
{ text: "Value", options: { bold: true, fill: { color: "2563eb" }, color: "ffffff" } }],
|
|
72
|
+
["Users", "10,542"],
|
|
73
|
+
["Revenue", "$52,300"],
|
|
74
|
+
["Growth", "+23%"],
|
|
75
|
+
],
|
|
76
|
+
{ x: 1, y: 1.5, w: 8, colW: [4, 4], border: { type: "solid", pt: 1, color: "cccccc" } }
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
// Write file
|
|
80
|
+
await pres.writeFile({ fileName: "output.pptx" });
|
|
81
|
+
// Or get buffer: const buffer = await pres.write({ outputType: "nodebuffer" });
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Reading Existing .pptx
|
|
85
|
+
|
|
86
|
+
Use `adm-zip` to extract XML content from existing presentations:
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import AdmZip from "adm-zip";
|
|
90
|
+
|
|
91
|
+
const zip = new AdmZip("input.pptx");
|
|
92
|
+
const slideEntries = zip.getEntries().filter(e => e.entryName.startsWith("ppt/slides/slide"));
|
|
93
|
+
for (const entry of slideEntries) {
|
|
94
|
+
const xml = entry.getData().toString("utf-8");
|
|
95
|
+
// Parse XML to extract text content
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Slide Design Rules
|
|
100
|
+
|
|
101
|
+
- Maximum 6 bullet points per slide
|
|
102
|
+
- Maximum 8 words per bullet
|
|
103
|
+
- One key idea per slide
|
|
104
|
+
- Consistent fonts and colors throughout
|
|
105
|
+
- Include slide numbers
|
|
106
|
+
- Add speaker notes for every content slide
|
|
107
|
+
- Minimum structure: title, agenda, content slides, summary
|
|
108
|
+
- High-contrast text (dark on light or light on dark)
|
|
109
|
+
- Always use 16:9 layout unless specified otherwise
|
|
110
|
+
|
|
111
|
+
## Rules
|
|
112
|
+
|
|
113
|
+
- Use `pptxgenjs` for creation (pure JS, Bun-compatible)
|
|
114
|
+
- Always include speaker notes
|
|
115
|
+
- Always use 16:9 layout
|
|
116
|
+
- Test output opens in PowerPoint or LibreOffice Impress
|
|
117
|
+
- All packages are MIT licensed, no Python required
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: prisma-orm
|
|
3
|
+
description: "Use this skill when working with Prisma ORM. Triggers: 'Prisma', 'prisma schema', 'prisma migrate', 'prisma client', or any Prisma-related request. Always fetch Context7 docs first."
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Prisma ORM
|
|
8
|
+
|
|
9
|
+
## Before You Start
|
|
10
|
+
|
|
11
|
+
**Context7:** ALWAYS fetch current Prisma docs before generating schema or queries.
|
|
12
|
+
|
|
13
|
+
## Schema Pattern
|
|
14
|
+
|
|
15
|
+
```prisma
|
|
16
|
+
model User {
|
|
17
|
+
id String @id @default(uuid())
|
|
18
|
+
email String @unique
|
|
19
|
+
name String
|
|
20
|
+
posts Post[]
|
|
21
|
+
createdAt DateTime @default(now())
|
|
22
|
+
updatedAt DateTime @updatedAt
|
|
23
|
+
|
|
24
|
+
@@index([email])
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
model Post {
|
|
28
|
+
id String @id @default(uuid())
|
|
29
|
+
title String
|
|
30
|
+
content String
|
|
31
|
+
published Boolean @default(false)
|
|
32
|
+
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
|
|
33
|
+
authorId String
|
|
34
|
+
createdAt DateTime @default(now())
|
|
35
|
+
|
|
36
|
+
@@index([authorId])
|
|
37
|
+
@@index([published, createdAt(sort: Desc)])
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Rules
|
|
42
|
+
|
|
43
|
+
- Always add @@index for foreign keys and commonly queried fields
|
|
44
|
+
- Use @updatedAt for automatic timestamp management
|
|
45
|
+
- Prefer uuid() over autoincrement() for distributed systems
|
|
46
|
+
- Always run `prisma generate` after schema changes
|
|
47
|
+
- Always run `prisma migrate dev` to create migration files
|
|
48
|
+
- Fetch Context7 docs for current Prisma Client API before writing queries
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# RAG Database Routing
|
|
2
|
+
## Pattern
|
|
3
|
+
When multiple knowledge bases exist, classify the query before retrieving:
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
Query → Classifier → Route to correct KB → Retrieve → Generate
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Routing Logic
|
|
10
|
+
- **Technical docs** → code documentation vector store
|
|
11
|
+
- **Business/policy** → internal documents store
|
|
12
|
+
- **Product info** → product catalog store
|
|
13
|
+
- **General/current** → web search
|
|
14
|
+
- **Ambiguous** → query multiple stores, merge results with RRF
|
|
15
|
+
|
|
16
|
+
## Implementation
|
|
17
|
+
```typescript
|
|
18
|
+
function routeQuery(query: string): string[] {
|
|
19
|
+
// Classify intent
|
|
20
|
+
const intent = classifyIntent(query); // lightweight LLM or keyword matching
|
|
21
|
+
|
|
22
|
+
// Map to knowledge bases
|
|
23
|
+
const routes: Record<string, string[]> = {
|
|
24
|
+
technical: ["code_docs"],
|
|
25
|
+
business: ["internal_docs"],
|
|
26
|
+
product: ["product_catalog"],
|
|
27
|
+
general: ["web_search"],
|
|
28
|
+
ambiguous: ["code_docs", "internal_docs", "web_search"],
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
return routes[intent] || routes.ambiguous;
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Rules
|
|
36
|
+
- Classify before retrieving (don't search all stores for every query)
|
|
37
|
+
- "Ambiguous" should query multiple stores, not guess
|
|
38
|
+
- Log routing decisions for accuracy monitoring.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rapid-prototyping
|
|
3
|
+
description: "Use this skill when the user wants a quick proof-of-concept, MVP, working demo, or prototype built fast. Triggers: 'quick prototype', 'MVP', 'proof of concept', 'demo', 'just get it working', 'rough draft', 'hack something together', 'spike', or when speed matters more than polish. Prioritizes working code over perfect architecture."
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Rapid Prototyping
|
|
8
|
+
|
|
9
|
+
## What This Skill Does
|
|
10
|
+
|
|
11
|
+
Build working prototypes fast. Ship a functional demo in minimum time. Cut every corner that doesn't affect whether the thing works. Perfect code comes later.
|
|
12
|
+
|
|
13
|
+
## Mindset
|
|
14
|
+
|
|
15
|
+
Speed over polish. Working over elegant. Done over perfect.
|
|
16
|
+
|
|
17
|
+
But never skip: input validation, error handling that tells the user what went wrong, and basic security (no hardcoded secrets, no SQL injection).
|
|
18
|
+
|
|
19
|
+
## Decision Framework
|
|
20
|
+
|
|
21
|
+
| Question | Prototype Answer |
|
|
22
|
+
|----------|-----------------|
|
|
23
|
+
| Database? | SQLite file or JSON file. No Postgres setup. |
|
|
24
|
+
| Auth? | Simple token or session. No OAuth flows. |
|
|
25
|
+
| Frontend? | Single HTML file or minimal React. No design system. |
|
|
26
|
+
| Styling? | Tailwind CDN or inline styles. No custom CSS. |
|
|
27
|
+
| Testing? | Manual testing. No test suite. |
|
|
28
|
+
| Deployment? | Local only. Or single `docker run` command. |
|
|
29
|
+
| Error handling? | Try/catch with console.log. User sees "Something went wrong." |
|
|
30
|
+
| Types? | Use TypeScript but `as any` is acceptable for prototypes |
|
|
31
|
+
|
|
32
|
+
## Fastest Stacks
|
|
33
|
+
|
|
34
|
+
### Web App (under 2 hours)
|
|
35
|
+
```
|
|
36
|
+
Bun + Hono (server) + single HTML file (client) + SQLite (data)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### API Only (under 1 hour)
|
|
40
|
+
```
|
|
41
|
+
Bun + Hono + JSON file storage
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Interactive Tool (under 30 minutes)
|
|
45
|
+
```
|
|
46
|
+
Single HTML file with vanilla JS (use web-artifacts-builder skill)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Full App with Auth (under 4 hours)
|
|
50
|
+
```
|
|
51
|
+
Next.js + SQLite + simple JWT + Tailwind CDN
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Patterns
|
|
55
|
+
|
|
56
|
+
### JSON File Database (zero setup)
|
|
57
|
+
```typescript
|
|
58
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
59
|
+
|
|
60
|
+
const DB_PATH = "./data.json";
|
|
61
|
+
|
|
62
|
+
function readDB(): any {
|
|
63
|
+
if (!existsSync(DB_PATH)) return { items: [] };
|
|
64
|
+
return JSON.parse(readFileSync(DB_PATH, "utf-8"));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function writeDB(data: any) {
|
|
68
|
+
writeFileSync(DB_PATH, JSON.stringify(data, null, 2));
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Quick API Server (Hono + Bun)
|
|
73
|
+
```typescript
|
|
74
|
+
import { Hono } from "hono";
|
|
75
|
+
import { cors } from "hono/cors";
|
|
76
|
+
|
|
77
|
+
const app = new Hono();
|
|
78
|
+
app.use("*", cors());
|
|
79
|
+
|
|
80
|
+
app.get("/api/items", (c) => {
|
|
81
|
+
const db = readDB();
|
|
82
|
+
return c.json(db.items);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
app.post("/api/items", async (c) => {
|
|
86
|
+
const body = await c.req.json();
|
|
87
|
+
const db = readDB();
|
|
88
|
+
const item = { id: crypto.randomUUID(), ...body, createdAt: new Date() };
|
|
89
|
+
db.items.push(item);
|
|
90
|
+
writeDB(db);
|
|
91
|
+
return c.json(item, 201);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
export default { port: 3000, fetch: app.fetch };
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Inline Frontend (embed in server response)
|
|
98
|
+
```typescript
|
|
99
|
+
app.get("/", (c) => {
|
|
100
|
+
return c.html(`
|
|
101
|
+
<!DOCTYPE html>
|
|
102
|
+
<html>
|
|
103
|
+
<head>
|
|
104
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
105
|
+
</head>
|
|
106
|
+
<body class="p-8 max-w-2xl mx-auto">
|
|
107
|
+
<h1 class="text-2xl font-bold mb-4">My Prototype</h1>
|
|
108
|
+
<div id="app"></div>
|
|
109
|
+
<script>
|
|
110
|
+
// Vanilla JS UI here
|
|
111
|
+
</script>
|
|
112
|
+
</body>
|
|
113
|
+
</html>
|
|
114
|
+
`);
|
|
115
|
+
});
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Rules
|
|
119
|
+
|
|
120
|
+
- Get to "it works" as fast as possible
|
|
121
|
+
- Ask clarifying questions ONLY if you literally cannot proceed without the answer
|
|
122
|
+
- Use the simplest tool that solves the problem
|
|
123
|
+
- Hardcode configuration values (but never secrets)
|
|
124
|
+
- Skip abstractions. Direct function calls over dependency injection.
|
|
125
|
+
- One file is better than five files for a prototype
|
|
126
|
+
- README can be 3 lines: what it does, how to run it, what's missing
|
|
127
|
+
- When the prototype works, tell the user what you'd change for production
|
|
128
|
+
|
|
129
|
+
## When to Stop Prototyping
|
|
130
|
+
|
|
131
|
+
The prototype is done when the user can interact with the core feature. Stop and show them. Let them direct what happens next. Do not refactor, add tests, or polish without being asked.
|
|
132
|
+
|
|
133
|
+
## Verification
|
|
134
|
+
|
|
135
|
+
1. The thing runs
|
|
136
|
+
2. The core feature works when you click/type/submit
|
|
137
|
+
3. Errors don't crash the process (they show a message)
|
|
138
|
+
4. The user can run it with one command from the README
|
|
139
|
+
|
|
140
|
+
## Graduating to Production
|
|
141
|
+
|
|
142
|
+
When the user wants to turn the prototype into a real project, switch to the appropriate skill:
|
|
143
|
+
- **fullstack-project** for complete application scaffolding
|
|
144
|
+
- **backend-development** for proper API architecture
|
|
145
|
+
- **database-design** for real schema design
|
|
146
|
+
- **docker-deployment** for containerization
|
|
147
|
+
|
|
148
|
+
## Efficient Tool Batching (Lovable pattern)
|
|
149
|
+
|
|
150
|
+
Combine multiple independent operations into a single turn. Create all files in one batch rather than asking for confirmation between each.
|
|
151
|
+
|
|
152
|
+
Ambiguous: discuss first. Clear: build immediately.
|