feat: add OpenProse plugin skills
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
# Roadmap Examples
|
||||
|
||||
These examples demonstrate **planned** OpenProse syntax that is **not yet implemented**.
|
||||
|
||||
They are included to show the direction of the language and gather feedback on the design.
|
||||
|
||||
## Planned Features
|
||||
|
||||
| Feature | Status | Example File |
|
||||
|---------|--------|--------------|
|
||||
| Agent definitions | Planned | `simple-pipeline.prose` |
|
||||
| Named sessions | Planned | `simple-pipeline.prose` |
|
||||
| Parallel execution | Planned | `parallel-review.prose` |
|
||||
| Variables & context | Planned | `iterative-refinement.prose` |
|
||||
| Loops & conditionals | Planned | `iterative-refinement.prose` |
|
||||
| Imports | Planned | `syntax/open-prose-syntax.prose` |
|
||||
|
||||
## Do Not Run These Examples
|
||||
|
||||
These files will not work with the current interpreter. They are for reference only.
|
||||
|
||||
For working examples, see the parent `examples/` directory.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Iterative Refinement Example
|
||||
# Write draft, get feedback, refine until approved
|
||||
|
||||
agent writer:
|
||||
model: opus
|
||||
|
||||
agent reviewer:
|
||||
model: sonnet
|
||||
|
||||
let draft = session: writer
|
||||
prompt: "Write a first draft about AI safety"
|
||||
|
||||
loop until **approved**:
|
||||
let feedback = session: reviewer
|
||||
prompt: "Review this draft and provide feedback"
|
||||
context: draft
|
||||
|
||||
draft = session: writer
|
||||
prompt: "Improve the draft based on feedback"
|
||||
context: { draft, feedback }
|
||||
@@ -0,0 +1,18 @@
|
||||
# Parallel Review Example
|
||||
# Three reviewers analyze code in parallel, then synthesize
|
||||
|
||||
agent reviewer:
|
||||
model: sonnet
|
||||
|
||||
parallel:
|
||||
security = session: reviewer
|
||||
prompt: "Review this code for security issues"
|
||||
performance = session: reviewer
|
||||
prompt: "Review this code for performance issues"
|
||||
style = session: reviewer
|
||||
prompt: "Review this code for style and readability"
|
||||
|
||||
session synthesizer:
|
||||
model: opus
|
||||
prompt: "Synthesize the reviews into a unified report"
|
||||
context: { security, performance, style }
|
||||
@@ -0,0 +1,17 @@
|
||||
# Simple Pipeline Example
|
||||
# Research a topic, then write an article
|
||||
|
||||
import "web-search" from "github:example/web-search"
|
||||
|
||||
agent researcher:
|
||||
model: sonnet
|
||||
skills: ["web-search"]
|
||||
|
||||
agent writer:
|
||||
model: opus
|
||||
|
||||
session research: researcher
|
||||
prompt: "Research the latest developments in quantum computing"
|
||||
|
||||
-> session article: writer
|
||||
prompt: "Write a blog post about quantum computing"
|
||||
@@ -0,0 +1,223 @@
|
||||
# OpenProse - Confirmed Syntax
|
||||
# Python-like indentation, keyword-driven, minimal punctuation
|
||||
|
||||
# ============================================
|
||||
# IMPORTS (quoted skill names)
|
||||
# ============================================
|
||||
|
||||
import "web-search" from "github:example/web-search"
|
||||
import "summarizer" from "./skills/summarizer"
|
||||
|
||||
# ============================================
|
||||
# AGENT DEFINITIONS (quoted skills array)
|
||||
# ============================================
|
||||
|
||||
agent researcher:
|
||||
model: sonnet
|
||||
skills: ["web-search", "summarizer"]
|
||||
permissions:
|
||||
bash: deny
|
||||
|
||||
agent writer:
|
||||
model: opus
|
||||
skills: ["summarizer"]
|
||||
|
||||
# ============================================
|
||||
# SIMPLE FLOW
|
||||
# ============================================
|
||||
|
||||
# Simplest program: single session
|
||||
session "Explain quantum computing"
|
||||
|
||||
# Sequential (indentation = sequence)
|
||||
do:
|
||||
session: researcher
|
||||
prompt: "Research quantum computing"
|
||||
session: writer
|
||||
prompt: "Write a blog post"
|
||||
|
||||
# Inline sequence with arrow
|
||||
session "A" -> session "B" -> session "C"
|
||||
|
||||
# ============================================
|
||||
# PARALLEL EXECUTION (quoted modifiers)
|
||||
# ============================================
|
||||
|
||||
# Default: wait for all, fail-fast
|
||||
parallel:
|
||||
session "Security review"
|
||||
session "Performance review"
|
||||
session "Style review"
|
||||
|
||||
# Race: first to complete wins
|
||||
parallel ("first"):
|
||||
session "Try approach A"
|
||||
session "Try approach B"
|
||||
|
||||
# Continue on failure
|
||||
parallel (on-fail: "continue"):
|
||||
session "Risky operation 1"
|
||||
session "Risky operation 2"
|
||||
|
||||
# Named results for downstream use
|
||||
parallel:
|
||||
security = session "Security review"
|
||||
perf = session "Performance review"
|
||||
|
||||
session "Synthesize":
|
||||
context: { security, perf }
|
||||
|
||||
# ============================================
|
||||
# COMPOSITION: NAMED BLOCKS WITH PARAMETERS
|
||||
# ============================================
|
||||
|
||||
# Define a reusable block
|
||||
block review-pipeline:
|
||||
parallel:
|
||||
session "Security review"
|
||||
session "Performance review"
|
||||
session "Synthesize reviews"
|
||||
|
||||
# Block with parameters
|
||||
block research(topic):
|
||||
session "Research {topic}"
|
||||
session "Summarize findings about {topic}"
|
||||
|
||||
# Invoke with `do`
|
||||
do:
|
||||
session "Write code"
|
||||
do review-pipeline
|
||||
session "Final edits"
|
||||
|
||||
do research("quantum computing")
|
||||
|
||||
# ============================================
|
||||
# LOOPS (with ** orchestrator discretion)
|
||||
# ============================================
|
||||
|
||||
# Loop until condition (orchestrator evaluates **)
|
||||
loop until **approved**:
|
||||
session "Write draft"
|
||||
session "Get feedback"
|
||||
|
||||
# Multi-word condition
|
||||
loop until **user is satisfied with the result**:
|
||||
session "Propose solution"
|
||||
session "Get feedback"
|
||||
|
||||
# Repeat N times
|
||||
repeat 3:
|
||||
session "Attempt solution"
|
||||
|
||||
# Infinite loop (with runtime safeguards)
|
||||
loop:
|
||||
session "Monitor for events"
|
||||
session "Handle event"
|
||||
|
||||
# For-each
|
||||
for item in items:
|
||||
session "Process {item}"
|
||||
|
||||
# ============================================
|
||||
# CHOICE (orchestrator discretion)
|
||||
# ============================================
|
||||
|
||||
choice **based on urgency**:
|
||||
session "Quick fix"
|
||||
session "Thorough solution"
|
||||
|
||||
# ============================================
|
||||
# PIPELINE OPERATIONS
|
||||
# ============================================
|
||||
|
||||
# Map: transform each item
|
||||
items | map: session "Process {item}"
|
||||
|
||||
# Filter: select items
|
||||
items | filter: session "Is {item} relevant?"
|
||||
|
||||
# Reduce: accumulate results
|
||||
items | reduce(summary, item):
|
||||
session "Add {item} to {summary}"
|
||||
|
||||
# Chaining
|
||||
files
|
||||
| filter: session "Is {item} relevant?"
|
||||
| map: session "Extract info from {item}"
|
||||
| reduce(report, info):
|
||||
session "Add {info} to {report}"
|
||||
|
||||
# Parallel map
|
||||
items | pmap: session "Process {item}"
|
||||
|
||||
# ============================================
|
||||
# ERROR HANDLING
|
||||
# ============================================
|
||||
|
||||
# Try/catch/finally
|
||||
try:
|
||||
session "Risky operation"
|
||||
catch:
|
||||
session "Handle failure"
|
||||
finally:
|
||||
session "Cleanup"
|
||||
|
||||
# Retry with backoff
|
||||
session "Flaky API call" (retry: 3)
|
||||
|
||||
# ============================================
|
||||
# CONTEXT PASSING
|
||||
# ============================================
|
||||
|
||||
# Variable binding (mutable)
|
||||
let research = session: researcher
|
||||
prompt: "Research topic"
|
||||
|
||||
# Variable binding (immutable)
|
||||
const config = session "Get configuration"
|
||||
|
||||
# Explicit context
|
||||
session: writer
|
||||
prompt: "Write about the research"
|
||||
context: research
|
||||
|
||||
# Multiple contexts
|
||||
session "Final synthesis":
|
||||
context: [research, analysis, feedback]
|
||||
|
||||
# No context (start fresh)
|
||||
session "Independent task":
|
||||
context: []
|
||||
|
||||
# ============================================
|
||||
# COMPLETE EXAMPLE
|
||||
# ============================================
|
||||
|
||||
import "code-review" from "github:example/code-review"
|
||||
|
||||
agent code-reviewer:
|
||||
model: sonnet
|
||||
skills: ["code-review"]
|
||||
|
||||
agent synthesizer:
|
||||
model: opus
|
||||
|
||||
# Parallel review with named results
|
||||
parallel:
|
||||
sec = session: code-reviewer
|
||||
prompt: "Review for security issues"
|
||||
perf = session: code-reviewer
|
||||
prompt: "Review for performance issues"
|
||||
style = session: code-reviewer
|
||||
prompt: "Review for style issues"
|
||||
|
||||
# Synthesize all results
|
||||
session: synthesizer
|
||||
prompt: "Create unified review report"
|
||||
context: { sec, perf, style }
|
||||
|
||||
# Iterative refinement with ** condition
|
||||
loop until **approved**:
|
||||
let draft = session "Improve based on feedback"
|
||||
let feedback = session "Get stakeholder review"
|
||||
context: draft
|
||||
Reference in New Issue
Block a user