- Split monolithic publish into build + parallel publish-platform + publish-main + release jobs - Each platform package gets its own OIDC token (fixes token expiration during large binary uploads) - Add --prepare-only flag to publish.ts for build step version sync - Matrix strategy: 7 parallel platform jobs - publish-main waits for all platforms before publishing main package
106 lines
4.2 KiB
TypeScript
106 lines
4.2 KiB
TypeScript
#!/usr/bin/env bun
|
|
/**
|
|
* Generate the full Sisyphus system prompt and output to sisyphus-prompt.md
|
|
*
|
|
* Usage:
|
|
* bun run script/generate-sisyphus-prompt.ts
|
|
*/
|
|
|
|
import { createSisyphusAgent } from "../src/agents/sisyphus"
|
|
import { ORACLE_PROMPT_METADATA } from "../src/agents/oracle"
|
|
import { LIBRARIAN_PROMPT_METADATA } from "../src/agents/librarian"
|
|
import { EXPLORE_PROMPT_METADATA } from "../src/agents/explore"
|
|
import { MULTIMODAL_LOOKER_PROMPT_METADATA } from "../src/agents/multimodal-looker"
|
|
import { createBuiltinSkills } from "../src/features/builtin-skills"
|
|
import { DEFAULT_CATEGORIES, CATEGORY_DESCRIPTIONS } from "../src/tools/delegate-task/constants"
|
|
import type { AvailableAgent, AvailableCategory, AvailableSkill } from "../src/agents/dynamic-agent-prompt-builder"
|
|
import type { BuiltinAgentName, AgentPromptMetadata } from "../src/agents/types"
|
|
import { writeFileSync } from "node:fs"
|
|
import { join } from "node:path"
|
|
|
|
// Build available agents (same logic as utils.ts)
|
|
const agentMetadata: Record<string, AgentPromptMetadata> = {
|
|
oracle: ORACLE_PROMPT_METADATA,
|
|
librarian: LIBRARIAN_PROMPT_METADATA,
|
|
explore: EXPLORE_PROMPT_METADATA,
|
|
"multimodal-looker": MULTIMODAL_LOOKER_PROMPT_METADATA,
|
|
}
|
|
|
|
const agentDescriptions: Record<string, string> = {
|
|
oracle: "Read-only consultation agent. High-IQ reasoning specialist for debugging hard problems and high-difficulty architecture design.",
|
|
librarian: "Specialized codebase understanding agent for multi-repository analysis, searching remote codebases, retrieving official documentation, and finding implementation examples using GitHub CLI, Context7, and Web Search. MUST BE USED when users ask to look up code in remote repositories, explain library internals, or find usage examples in open source.",
|
|
explore: 'Contextual grep for codebases. Answers "Where is X?", "Which file has Y?", "Find the code that does Z". Fire multiple in parallel for broad searches. Specify thoroughness: "quick" for basic, "medium" for moderate, "very thorough" for comprehensive analysis.',
|
|
"multimodal-looker": "Analyze media files (PDFs, images, diagrams) that require interpretation beyond raw text. Extracts specific information or summaries from documents, describes visual content. Use when you need analyzed/extracted data rather than literal file contents.",
|
|
}
|
|
|
|
const availableAgents: AvailableAgent[] = Object.entries(agentMetadata).map(([name, metadata]) => ({
|
|
name: name as BuiltinAgentName,
|
|
description: agentDescriptions[name] ?? "",
|
|
metadata,
|
|
}))
|
|
|
|
// Build available categories
|
|
const availableCategories: AvailableCategory[] = Object.entries(DEFAULT_CATEGORIES).map(([name]) => ({
|
|
name,
|
|
description: CATEGORY_DESCRIPTIONS[name] ?? "General tasks",
|
|
}))
|
|
|
|
// Build available skills
|
|
const builtinSkills = createBuiltinSkills()
|
|
const availableSkills: AvailableSkill[] = builtinSkills.map((skill) => ({
|
|
name: skill.name,
|
|
description: skill.description,
|
|
location: "plugin" as const,
|
|
}))
|
|
|
|
// Generate the agent config
|
|
const model = "anthropic/claude-opus-4-5"
|
|
const sisyphusConfig = createSisyphusAgent(
|
|
model,
|
|
availableAgents,
|
|
undefined, // no tool names
|
|
availableSkills,
|
|
availableCategories
|
|
)
|
|
|
|
// Output to file
|
|
const outputPath = join(import.meta.dirname, "..", "sisyphus-prompt.md")
|
|
const content = `# Sisyphus System Prompt
|
|
|
|
> Auto-generated by \`script/generate-sisyphus-prompt.ts\`
|
|
> Generated at: ${new Date().toISOString()}
|
|
|
|
## Configuration
|
|
|
|
| Field | Value |
|
|
|-------|-------|
|
|
| Model | \`${model}\` |
|
|
| Max Tokens | \`${sisyphusConfig.maxTokens}\` |
|
|
| Mode | \`${sisyphusConfig.mode}\` |
|
|
| Thinking | ${sisyphusConfig.thinking ? `Budget: ${sisyphusConfig.thinking.budgetTokens}` : "N/A"} |
|
|
|
|
## Available Agents
|
|
|
|
${availableAgents.map((a) => `- **${a.name}**: ${a.description.split(".")[0]}`).join("\n")}
|
|
|
|
## Available Categories
|
|
|
|
${availableCategories.map((c) => `- **${c.name}**: ${c.description}`).join("\n")}
|
|
|
|
## Available Skills
|
|
|
|
${availableSkills.map((s) => `- **${s.name}**: ${s.description.split(".")[0]}`).join("\n")}
|
|
|
|
---
|
|
|
|
## Full System Prompt
|
|
|
|
\`\`\`markdown
|
|
${sisyphusConfig.prompt}
|
|
\`\`\`
|
|
`
|
|
|
|
writeFileSync(outputPath, content)
|
|
console.log(`Generated: ${outputPath}`)
|
|
console.log(`Prompt length: ${sisyphusConfig.prompt?.length ?? 0} characters`)
|