mirror of
https://github.com/documenso/documenso.git
synced 2026-08-15 02:53:32 +10:00
chore: remove planning skills
This commit is contained in:
@@ -1,56 +0,0 @@
|
|||||||
---
|
|
||||||
name: create-justification
|
|
||||||
description: Create a new justification file in .agents/justifications/ with a unique three-word ID, frontmatter, and formatted title
|
|
||||||
license: MIT
|
|
||||||
compatibility: opencode
|
|
||||||
metadata:
|
|
||||||
audience: agents
|
|
||||||
workflow: decision-making
|
|
||||||
---
|
|
||||||
|
|
||||||
## What I do
|
|
||||||
|
|
||||||
I help you create new justification files in the `.agents/justifications/` directory. Each justification file gets:
|
|
||||||
|
|
||||||
- A unique three-word identifier (e.g., `swift-emerald-river`)
|
|
||||||
- Frontmatter with the current date and formatted title
|
|
||||||
- Content you provide
|
|
||||||
|
|
||||||
## How to use
|
|
||||||
|
|
||||||
Run the script with a slug and content:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx tsx scripts/create-justification.ts "decision-name" "Justification content here"
|
|
||||||
```
|
|
||||||
|
|
||||||
Or use heredoc for multi-line content:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx tsx scripts/create-justification.ts "decision-name" << HEREDOC
|
|
||||||
Multi-line
|
|
||||||
justification content
|
|
||||||
goes here
|
|
||||||
HEREDOC
|
|
||||||
```
|
|
||||||
|
|
||||||
## File format
|
|
||||||
|
|
||||||
Files are created as: `{three-word-id}-{slug}.md`
|
|
||||||
|
|
||||||
Example: `swift-emerald-river-decision-name.md`
|
|
||||||
|
|
||||||
The file includes frontmatter:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
---
|
|
||||||
date: 2026-01-13
|
|
||||||
title: Decision Name
|
|
||||||
---
|
|
||||||
|
|
||||||
Your content here
|
|
||||||
```
|
|
||||||
|
|
||||||
## When to use me
|
|
||||||
|
|
||||||
Use this skill when you need to document the reasoning or justification for a decision, approach, or architectural choice. The unique ID ensures no filename conflicts, and the frontmatter provides metadata for organization.
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
---
|
|
||||||
name: create-plan
|
|
||||||
description: Create a new plan file in .agents/plans/ with a unique three-word ID, frontmatter, and formatted title
|
|
||||||
license: MIT
|
|
||||||
compatibility: opencode
|
|
||||||
metadata:
|
|
||||||
audience: agents
|
|
||||||
workflow: planning
|
|
||||||
---
|
|
||||||
|
|
||||||
## What I do
|
|
||||||
|
|
||||||
I help you create new plan files in the `.agents/plans/` directory. Each plan file gets:
|
|
||||||
|
|
||||||
- A unique three-word identifier (e.g., `happy-blue-moon`)
|
|
||||||
- Frontmatter with the current date and formatted title
|
|
||||||
- Content you provide
|
|
||||||
|
|
||||||
## How to use
|
|
||||||
|
|
||||||
Run the script with a slug and content:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx tsx scripts/create-plan.ts "feature-name" "Plan content here"
|
|
||||||
```
|
|
||||||
|
|
||||||
Or use heredoc for multi-line content:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx tsx scripts/create-plan.ts "feature-name" << HEREDOC
|
|
||||||
Multi-line
|
|
||||||
plan content
|
|
||||||
goes here
|
|
||||||
HEREDOC
|
|
||||||
```
|
|
||||||
|
|
||||||
## File format
|
|
||||||
|
|
||||||
Files are created as: `{three-word-id}-{slug}.md`
|
|
||||||
|
|
||||||
Example: `happy-blue-moon-feature-name.md`
|
|
||||||
|
|
||||||
The file includes frontmatter:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
---
|
|
||||||
date: 2026-01-13
|
|
||||||
title: Feature Name
|
|
||||||
---
|
|
||||||
|
|
||||||
Your content here
|
|
||||||
```
|
|
||||||
|
|
||||||
## When to use me
|
|
||||||
|
|
||||||
Use this skill when you need to create a new plan document for a feature, task, or project. The unique ID ensures no filename conflicts, and the frontmatter provides metadata for organization.
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
---
|
|
||||||
name: create-scratch
|
|
||||||
description: Create a new scratch file in .agents/scratches/ with a unique three-word ID, frontmatter, and formatted title
|
|
||||||
license: MIT
|
|
||||||
compatibility: opencode
|
|
||||||
metadata:
|
|
||||||
audience: agents
|
|
||||||
workflow: exploration
|
|
||||||
---
|
|
||||||
|
|
||||||
## What I do
|
|
||||||
|
|
||||||
I help you create new scratch files in the `.agents/scratches/` directory. Each scratch file gets:
|
|
||||||
|
|
||||||
- A unique three-word identifier (e.g., `calm-teal-cloud`)
|
|
||||||
- Frontmatter with the current date and formatted title
|
|
||||||
- Content you provide
|
|
||||||
|
|
||||||
## How to use
|
|
||||||
|
|
||||||
Run the script with a slug and content:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx tsx scripts/create-scratch.ts "note-name" "Scratch content here"
|
|
||||||
```
|
|
||||||
|
|
||||||
Or use heredoc for multi-line content:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx tsx scripts/create-scratch.ts "note-name" << HEREDOC
|
|
||||||
Multi-line
|
|
||||||
scratch content
|
|
||||||
goes here
|
|
||||||
HEREDOC
|
|
||||||
```
|
|
||||||
|
|
||||||
## File format
|
|
||||||
|
|
||||||
Files are created as: `{three-word-id}-{slug}.md`
|
|
||||||
|
|
||||||
Example: `calm-teal-cloud-note-name.md`
|
|
||||||
|
|
||||||
The file includes frontmatter:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
---
|
|
||||||
date: 2026-01-13
|
|
||||||
title: Note Name
|
|
||||||
---
|
|
||||||
|
|
||||||
Your content here
|
|
||||||
```
|
|
||||||
|
|
||||||
## When to use me
|
|
||||||
|
|
||||||
Use this skill when you need to create a temporary note, exploration document, or scratch pad for ideas. The unique ID ensures no filename conflicts, and the frontmatter provides metadata for organization.
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
import { mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
||||||
import { join } from 'path';
|
|
||||||
|
|
||||||
import { generateId } from './utils/generate-id';
|
|
||||||
|
|
||||||
const JUSTIFICATIONS_DIR = join(process.cwd(), '.agents', 'justifications');
|
|
||||||
|
|
||||||
const main = () => {
|
|
||||||
const args = process.argv.slice(2);
|
|
||||||
|
|
||||||
if (args.length === 0) {
|
|
||||||
console.error('Usage: npx tsx scripts/create-justification.ts "file-slug" [content]');
|
|
||||||
console.error(' or: npx tsx scripts/create-justification.ts "file-slug" << HEREDOC');
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const slug = args[0];
|
|
||||||
let content = '';
|
|
||||||
|
|
||||||
// Check if content is provided as second argument
|
|
||||||
if (args.length > 1) {
|
|
||||||
content = args.slice(1).join(' ');
|
|
||||||
} else {
|
|
||||||
// Read from stdin (heredoc)
|
|
||||||
try {
|
|
||||||
const stdin = readFileSync(0, 'utf-8');
|
|
||||||
content = stdin.trim();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error reading from stdin:', error);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!content) {
|
|
||||||
console.error('Error: No content provided');
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate unique ID
|
|
||||||
const id = generateId();
|
|
||||||
const filename = `${id}-${slug}.md`;
|
|
||||||
const filepath = join(JUSTIFICATIONS_DIR, filename);
|
|
||||||
|
|
||||||
// Format title from slug (kebab-case to Title Case)
|
|
||||||
const title = slug
|
|
||||||
.split('-')
|
|
||||||
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
||||||
.join(' ');
|
|
||||||
|
|
||||||
// Get current date in ISO format
|
|
||||||
const date = new Date().toISOString().split('T')[0];
|
|
||||||
|
|
||||||
// Create frontmatter
|
|
||||||
const frontmatter = `---
|
|
||||||
date: ${date}
|
|
||||||
title: ${title}
|
|
||||||
---
|
|
||||||
|
|
||||||
`;
|
|
||||||
|
|
||||||
// Ensure directory exists
|
|
||||||
mkdirSync(JUSTIFICATIONS_DIR, { recursive: true });
|
|
||||||
|
|
||||||
// Write file with frontmatter
|
|
||||||
writeFileSync(filepath, frontmatter + content, 'utf-8');
|
|
||||||
|
|
||||||
console.log(`Created justification: ${filepath}`);
|
|
||||||
console.log(`ID: ${id}`);
|
|
||||||
console.log(`Filename: ${filename}`);
|
|
||||||
};
|
|
||||||
|
|
||||||
main();
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
import { mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
||||||
import { join } from 'path';
|
|
||||||
|
|
||||||
import { generateId } from './utils/generate-id';
|
|
||||||
|
|
||||||
const PLANS_DIR = join(process.cwd(), '.agents', 'plans');
|
|
||||||
|
|
||||||
const main = () => {
|
|
||||||
const args = process.argv.slice(2);
|
|
||||||
|
|
||||||
if (args.length === 0) {
|
|
||||||
console.error('Usage: npx tsx scripts/create-plan.ts "file-slug" [content]');
|
|
||||||
console.error(' or: npx tsx scripts/create-plan.ts "file-slug" << HEREDOC');
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const slug = args[0];
|
|
||||||
let content = '';
|
|
||||||
|
|
||||||
// Check if content is provided as second argument
|
|
||||||
if (args.length > 1) {
|
|
||||||
content = args.slice(1).join(' ');
|
|
||||||
} else {
|
|
||||||
// Read from stdin (heredoc)
|
|
||||||
try {
|
|
||||||
const stdin = readFileSync(0, 'utf-8');
|
|
||||||
content = stdin.trim();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error reading from stdin:', error);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!content) {
|
|
||||||
console.error('Error: No content provided');
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate unique ID
|
|
||||||
const id = generateId();
|
|
||||||
const filename = `${id}-${slug}.md`;
|
|
||||||
const filepath = join(PLANS_DIR, filename);
|
|
||||||
|
|
||||||
// Format title from slug (kebab-case to Title Case)
|
|
||||||
const title = slug
|
|
||||||
.split('-')
|
|
||||||
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
||||||
.join(' ');
|
|
||||||
|
|
||||||
// Get current date in ISO format
|
|
||||||
const date = new Date().toISOString().split('T')[0];
|
|
||||||
|
|
||||||
// Create frontmatter
|
|
||||||
const frontmatter = `---
|
|
||||||
date: ${date}
|
|
||||||
title: ${title}
|
|
||||||
---
|
|
||||||
|
|
||||||
`;
|
|
||||||
|
|
||||||
// Ensure directory exists
|
|
||||||
mkdirSync(PLANS_DIR, { recursive: true });
|
|
||||||
|
|
||||||
// Write file with frontmatter
|
|
||||||
writeFileSync(filepath, frontmatter + content, 'utf-8');
|
|
||||||
|
|
||||||
console.log(`Created plan: ${filepath}`);
|
|
||||||
console.log(`ID: ${id}`);
|
|
||||||
console.log(`Filename: ${filename}`);
|
|
||||||
};
|
|
||||||
|
|
||||||
main();
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/usr/bin/env node
|
|
||||||
import { mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
||||||
import { join } from 'path';
|
|
||||||
|
|
||||||
import { generateId } from './utils/generate-id';
|
|
||||||
|
|
||||||
const SCRATCHES_DIR = join(process.cwd(), '.agents', 'scratches');
|
|
||||||
|
|
||||||
const main = () => {
|
|
||||||
const args = process.argv.slice(2);
|
|
||||||
|
|
||||||
if (args.length === 0) {
|
|
||||||
console.error('Usage: npx tsx scripts/create-scratch.ts "file-slug" [content]');
|
|
||||||
console.error(' or: npx tsx scripts/create-scratch.ts "file-slug" << HEREDOC');
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const slug = args[0];
|
|
||||||
let content = '';
|
|
||||||
|
|
||||||
// Check if content is provided as second argument
|
|
||||||
if (args.length > 1) {
|
|
||||||
content = args.slice(1).join(' ');
|
|
||||||
} else {
|
|
||||||
// Read from stdin (heredoc)
|
|
||||||
try {
|
|
||||||
const stdin = readFileSync(0, 'utf-8');
|
|
||||||
content = stdin.trim();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Error reading from stdin:', error);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!content) {
|
|
||||||
console.error('Error: No content provided');
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate unique ID
|
|
||||||
const id = generateId();
|
|
||||||
const filename = `${id}-${slug}.md`;
|
|
||||||
const filepath = join(SCRATCHES_DIR, filename);
|
|
||||||
|
|
||||||
// Format title from slug (kebab-case to Title Case)
|
|
||||||
const title = slug
|
|
||||||
.split('-')
|
|
||||||
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
||||||
.join(' ');
|
|
||||||
|
|
||||||
// Get current date in ISO format
|
|
||||||
const date = new Date().toISOString().split('T')[0];
|
|
||||||
|
|
||||||
// Create frontmatter
|
|
||||||
const frontmatter = `---
|
|
||||||
date: ${date}
|
|
||||||
title: ${title}
|
|
||||||
---
|
|
||||||
|
|
||||||
`;
|
|
||||||
|
|
||||||
// Ensure directory exists
|
|
||||||
mkdirSync(SCRATCHES_DIR, { recursive: true });
|
|
||||||
|
|
||||||
// Write file with frontmatter
|
|
||||||
writeFileSync(filepath, frontmatter + content, 'utf-8');
|
|
||||||
|
|
||||||
console.log(`Created scratch: ${filepath}`);
|
|
||||||
console.log(`ID: ${id}`);
|
|
||||||
console.log(`Filename: ${filename}`);
|
|
||||||
};
|
|
||||||
|
|
||||||
main();
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
/**
|
|
||||||
* Generates a unique identifier using three simple words.
|
|
||||||
* Falls back to unix timestamp if word generation fails.
|
|
||||||
*/
|
|
||||||
export const generateId = (): string => {
|
|
||||||
const adjectives = [
|
|
||||||
'happy',
|
|
||||||
'bright',
|
|
||||||
'swift',
|
|
||||||
'calm',
|
|
||||||
'bold',
|
|
||||||
'clever',
|
|
||||||
'gentle',
|
|
||||||
'quick',
|
|
||||||
'sharp',
|
|
||||||
'warm',
|
|
||||||
'cool',
|
|
||||||
'fresh',
|
|
||||||
'solid',
|
|
||||||
'clear',
|
|
||||||
'sweet',
|
|
||||||
'wild',
|
|
||||||
'quiet',
|
|
||||||
'loud',
|
|
||||||
'smooth',
|
|
||||||
];
|
|
||||||
|
|
||||||
const nouns = [
|
|
||||||
'moon',
|
|
||||||
'star',
|
|
||||||
'ocean',
|
|
||||||
'river',
|
|
||||||
'forest',
|
|
||||||
'mountain',
|
|
||||||
'cloud',
|
|
||||||
'wave',
|
|
||||||
'stone',
|
|
||||||
'flower',
|
|
||||||
'bird',
|
|
||||||
'wind',
|
|
||||||
'light',
|
|
||||||
'shadow',
|
|
||||||
'fire',
|
|
||||||
'earth',
|
|
||||||
'sky',
|
|
||||||
'tree',
|
|
||||||
'leaf',
|
|
||||||
'rock',
|
|
||||||
];
|
|
||||||
|
|
||||||
const colors = [
|
|
||||||
'blue',
|
|
||||||
'red',
|
|
||||||
'green',
|
|
||||||
'yellow',
|
|
||||||
'purple',
|
|
||||||
'orange',
|
|
||||||
'pink',
|
|
||||||
'cyan',
|
|
||||||
'amber',
|
|
||||||
'emerald',
|
|
||||||
'violet',
|
|
||||||
'indigo',
|
|
||||||
'coral',
|
|
||||||
'teal',
|
|
||||||
'gold',
|
|
||||||
'silver',
|
|
||||||
'copper',
|
|
||||||
'bronze',
|
|
||||||
'ivory',
|
|
||||||
'jade',
|
|
||||||
];
|
|
||||||
|
|
||||||
try {
|
|
||||||
const randomAdjective = adjectives[Math.floor(Math.random() * adjectives.length)];
|
|
||||||
const randomColor = colors[Math.floor(Math.random() * colors.length)];
|
|
||||||
const randomNoun = nouns[Math.floor(Math.random() * nouns.length)];
|
|
||||||
|
|
||||||
return `${randomAdjective}-${randomColor}-${randomNoun}`;
|
|
||||||
} catch {
|
|
||||||
// Fallback to unix timestamp if something goes wrong
|
|
||||||
return Date.now().toString();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Reference in New Issue
Block a user