workflowskill 0.1.0 → 0.2.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/README.md +25 -42
- package/dist/cli/index.mjs +2 -2
- package/dist/cli/index.mjs.map +1 -1
- package/dist/index.d.mts +14 -22
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/{runtime-BY1CFnew.mjs → runtime-CD81H1bx.mjs} +9 -35
- package/dist/runtime-CD81H1bx.mjs.map +1 -0
- package/dist/{html-select-BZPYAr6k.mjs → web-scrape-GeEM_JNl.mjs} +50 -12
- package/dist/web-scrape-GeEM_JNl.mjs.map +1 -0
- package/package.json +1 -4
- package/skill/SKILL.md +60 -30
- package/dist/gmail-CYBJ6Dxa.mjs +0 -209
- package/dist/gmail-CYBJ6Dxa.mjs.map +0 -1
- package/dist/html-select-BZPYAr6k.mjs.map +0 -1
- package/dist/http-request-k9bp5joL.mjs +0 -91
- package/dist/http-request-k9bp5joL.mjs.map +0 -1
- package/dist/runtime-BY1CFnew.mjs.map +0 -1
- package/dist/sheets-CGy8JvVz.mjs +0 -177
- package/dist/sheets-CGy8JvVz.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ A declarative workflow language for AI agents.
|
|
|
16
16
|
|
|
17
17
|
```yaml
|
|
18
18
|
inputs:
|
|
19
|
-
|
|
19
|
+
url:
|
|
20
20
|
type: string
|
|
21
21
|
|
|
22
22
|
outputs:
|
|
@@ -25,20 +25,24 @@ outputs:
|
|
|
25
25
|
value: $steps.summarize.output.summary
|
|
26
26
|
|
|
27
27
|
steps:
|
|
28
|
-
- id:
|
|
28
|
+
- id: scrape
|
|
29
29
|
type: tool
|
|
30
|
-
tool:
|
|
30
|
+
tool: web.scrape
|
|
31
31
|
inputs:
|
|
32
32
|
url:
|
|
33
33
|
type: string
|
|
34
|
-
value: $inputs.
|
|
35
|
-
|
|
36
|
-
body:
|
|
34
|
+
value: $inputs.url
|
|
35
|
+
selector:
|
|
37
36
|
type: string
|
|
37
|
+
value: "p"
|
|
38
|
+
outputs:
|
|
39
|
+
text:
|
|
40
|
+
type: array
|
|
41
|
+
value: $result.results
|
|
38
42
|
|
|
39
43
|
- id: summarize
|
|
40
44
|
type: llm
|
|
41
|
-
prompt: "Summarize this content: $steps.
|
|
45
|
+
prompt: "Summarize this content: $steps.scrape.output.text"
|
|
42
46
|
outputs:
|
|
43
47
|
summary:
|
|
44
48
|
type: string
|
|
@@ -75,20 +79,13 @@ A WorkflowSkill is authored via natural conversation with any agent system that
|
|
|
75
79
|
2. Your agent writes a WorkflowSkill.
|
|
76
80
|
3. Run it deterministically: `workflowskill run <workflow.md>`
|
|
77
81
|
|
|
78
|
-
Your agent will research the task, write the workflow file, and validate it with the CLI. The
|
|
82
|
+
Your agent will research the task, write the workflow file, and validate it with the CLI. The bundled tools available to generated workflows are:
|
|
79
83
|
|
|
80
|
-
| Tool
|
|
81
|
-
|
|
|
82
|
-
| `
|
|
83
|
-
| `html.select` | CSS selector extraction from HTML | No |
|
|
84
|
-
| `gmail.search` | Search Gmail by query | Google OAuth2 |
|
|
85
|
-
| `gmail.read` | Read a Gmail message by ID | Google OAuth2 |
|
|
86
|
-
| `gmail.send` | Send email via Gmail | Google OAuth2 |
|
|
87
|
-
| `sheets.read` | Read a Google Sheets range | Google OAuth2 |
|
|
88
|
-
| `sheets.write` | Write to a Google Sheets range | Google OAuth2 |
|
|
89
|
-
| `sheets.append` | Append rows to a Google Sheets range | Google OAuth2 |
|
|
84
|
+
| Tool | What it does |
|
|
85
|
+
| ------------- | ------------------------------------------------ |
|
|
86
|
+
| `web.scrape` | Fetch a URL and extract data via CSS selectors |
|
|
90
87
|
|
|
91
|
-
|
|
88
|
+
Works with no setup or credentials.
|
|
92
89
|
|
|
93
90
|
**Evaluate the output:** Check `status` for overall success. If a step failed, its `error` field explains why. For `each` steps, `iterations` shows per-item results. Compare per-step `inputs` and `output` values against your expectations to find where the data flow broke down.
|
|
94
91
|
|
|
@@ -96,13 +93,13 @@ Your agent will research the task, write the workflow file, and validate it with
|
|
|
96
93
|
|
|
97
94
|
WorkflowSkill workflows are YAML documents with five step types:
|
|
98
95
|
|
|
99
|
-
| Step type | Description
|
|
100
|
-
| ------------- |
|
|
101
|
-
| `tool` | Invoke
|
|
102
|
-
| `llm` | Call a language model with a templated prompt
|
|
103
|
-
| `transform` | Filter, map, or sort data without side effects
|
|
104
|
-
| `conditional` | Branch execution based on an expression
|
|
105
|
-
| `exit` | Terminate early with a status and output
|
|
96
|
+
| Step type | Description |
|
|
97
|
+
| ------------- | ------------------------------------------------------------------------------------ |
|
|
98
|
+
| `tool` | Invoke a builtin tool (`web.scrape`), MCP server endpoint, or any registered adapter |
|
|
99
|
+
| `llm` | Call a language model with a templated prompt |
|
|
100
|
+
| `transform` | Filter, map, or sort data without side effects |
|
|
101
|
+
| `conditional` | Branch execution based on an expression |
|
|
102
|
+
| `exit` | Terminate early with a status and output |
|
|
106
103
|
|
|
107
104
|
Steps are connected by `$steps.<id>.output.<field>` references. Loops use `each`. Error handling uses `on_error: fail | ignore` (retries are a separate `retry:` field).
|
|
108
105
|
|
|
@@ -169,7 +166,7 @@ interface LLMAdapter {
|
|
|
169
166
|
|
|
170
167
|
Built-in implementations:
|
|
171
168
|
|
|
172
|
-
- **`
|
|
169
|
+
- **`BuiltinToolAdapter`** — provides `web.scrape` for standalone use
|
|
173
170
|
- **`AnthropicLLMAdapter`** — wraps the Anthropic SDK; reads `ANTHROPIC_API_KEY` from the environment
|
|
174
171
|
|
|
175
172
|
For testing, **`MockToolAdapter`** and **`MockLLMAdapter`** let you supply handler functions without any external dependencies.
|
|
@@ -215,23 +212,9 @@ Create a `.env` file in your project directory (or export env vars in your shell
|
|
|
215
212
|
|
|
216
213
|
```
|
|
217
214
|
ANTHROPIC_API_KEY=sk-ant-... # Required for LLM steps in workflows
|
|
218
|
-
GOOGLE_CLIENT_ID=... # Required for Gmail and Sheets tools
|
|
219
|
-
GOOGLE_CLIENT_SECRET=...
|
|
220
|
-
GOOGLE_REFRESH_TOKEN=...
|
|
221
215
|
```
|
|
222
216
|
|
|
223
|
-
Missing `ANTHROPIC_API_KEY` causes LLM steps to fail with a clear error (no silent fallback).
|
|
224
|
-
|
|
225
|
-
### Getting Google OAuth2 credentials
|
|
226
|
-
|
|
227
|
-
1. Go to [Google Cloud Console](https://console.cloud.google.com/) and create or select a project.
|
|
228
|
-
2. Enable the APIs you need: **Gmail API** and/or **Google Sheets API** under _APIs & Services > Library_.
|
|
229
|
-
3. Go to _APIs & Services > OAuth consent screen_. Choose **External** and fill in the app name and your email.
|
|
230
|
-
4. Go to _APIs & Services > Credentials > Create Credentials > OAuth client ID_. Choose **Desktop app**. Copy the **Client ID** and **Client Secret** into your `.env`.
|
|
231
|
-
5. Get a refresh token. The easiest way is [Google's OAuth 2.0 Playground](https://developers.google.com/oauthplayground/):
|
|
232
|
-
- Click the gear icon, check **Use your own OAuth credentials**, and enter your Client ID and Client Secret.
|
|
233
|
-
- In the left panel, select the scopes you need: `https://www.googleapis.com/auth/gmail.modify` (under **Gmail API v1**) and/or `https://www.googleapis.com/auth/spreadsheets` (under **Sheets API v4**). Click **Authorize APIs** and sign in.
|
|
234
|
-
- Click **Exchange authorization code for tokens**. Copy the **Refresh token** into your `.env`.
|
|
217
|
+
Missing `ANTHROPIC_API_KEY` causes LLM steps to fail with a clear error (no silent fallback).
|
|
235
218
|
|
|
236
219
|
## Documentation
|
|
237
220
|
|
package/dist/cli/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { S as ParseError, f as loadConfig, h as validateWorkflow, i as runWorkflowSkill, m as AnthropicLLMAdapter, p as
|
|
2
|
+
import { S as ParseError, f as loadConfig, h as validateWorkflow, i as runWorkflowSkill, m as AnthropicLLMAdapter, p as BuiltinToolAdapter, w as parseWorkflowFromMd } from "../runtime-CD81H1bx.mjs";
|
|
3
3
|
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
4
|
import { basename, join } from "node:path";
|
|
5
5
|
import { Command } from "commander";
|
|
@@ -156,7 +156,7 @@ async function runCommand(file, options) {
|
|
|
156
156
|
process.exit(1);
|
|
157
157
|
}
|
|
158
158
|
const config = loadConfig();
|
|
159
|
-
const toolAdapter = await
|
|
159
|
+
const toolAdapter = await BuiltinToolAdapter.create();
|
|
160
160
|
let llmAdapter;
|
|
161
161
|
if (config.anthropicApiKey) llmAdapter = new AnthropicLLMAdapter(config.anthropicApiKey);
|
|
162
162
|
else llmAdapter = { call() {
|
package/dist/cli/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/cli/validate.ts","../../src/cli/format.ts","../../src/cli/run.ts","../../src/cli/index.ts"],"sourcesContent":["// CLI: validate command — check workflows without running them.\n\nimport { readFileSync } from 'node:fs';\nimport { parseWorkflowFromMd } from '../parser/index.js';\nimport { ParseError } from '../parser/index.js';\nimport { validateWorkflow } from '../validator/index.js';\n\nexport function validateCommand(files: string[]): void {\n let hasErrors = false;\n\n for (const file of files) {\n let content: string;\n try {\n content = readFileSync(file, 'utf-8');\n } catch {\n console.error(`✗ ${file}: Cannot read file`);\n hasErrors = true;\n continue;\n }\n\n // Parse\n let workflow;\n try {\n workflow = parseWorkflowFromMd(content);\n } catch (err) {\n if (err instanceof ParseError) {\n console.error(`✗ ${file}: ${err.message}`);\n for (const detail of err.details) {\n console.error(` ${detail.path}: ${detail.message}`);\n }\n } else {\n console.error(`✗ ${file}: ${err instanceof Error ? err.message : String(err)}`);\n }\n hasErrors = true;\n continue;\n }\n\n // Validate\n const result = validateWorkflow(workflow);\n if (!result.valid) {\n console.error(`✗ ${file}: Validation errors`);\n for (const error of result.errors) {\n console.error(` ${error.path}: ${error.message}`);\n }\n hasErrors = true;\n continue;\n }\n\n console.log(`✓ ${file} (${workflow.steps.length} steps)`);\n }\n\n if (hasErrors) {\n process.exit(1);\n }\n}\n","// CLI formatting module — runtime event rendering.\n// Uses picocolors for terminal colors and writes to stderr (keeping stdout clean for output).\n\nimport pc from 'picocolors';\nimport type { RuntimeEvent } from '../types/index.js';\n\n// ─── Runtime event renderer ───────────────────────────────────────────────────\n\n// Track in-progress step names for the \"running...\" line (keyed by stepId).\nconst runtimeActiveSteps = new Map<string, string>();\n\n// Whether stderr is a real TTY (enables in-place cursor movement).\nconst isTTY = !!process.stderr.isTTY;\n\n// ANSI helpers for in-place line updates (only used when isTTY is true).\nconst MOVE_UP = (n: number): string => `\\x1b[${n}A`;\nconst CLEAR_LINE = '\\x1b[2K\\r';\nconst MOVE_DOWN = (n: number): string => `\\x1b[${n}B`;\n\n// Lines printed between step_start and step_complete (retries, each_progress).\nlet linesSinceStepStart = 0;\n// Whether each_progress has been printed at least once for the current step.\nlet hasEachProgress = false;\n\n/**\n * Render a runtime event to stderr with live step-by-step progress output.\n * All CLI live output goes to stderr; stdout is reserved for the JSON run log.\n *\n * On TTY: the yellow \"running...\" line is overwritten in-place by the green/red\n * completion line, and each_progress updates a single line instead of appending.\n * On non-TTY (pipes, files): append-only fallback — existing behavior.\n */\nexport function renderRuntimeEvent(event: RuntimeEvent): void {\n switch (event.type) {\n case 'workflow_start':\n process.stderr.write(`\\n${pc.bold('▶')} Running ${pc.cyan(event.workflow)} (${event.totalSteps} step${event.totalSteps !== 1 ? 's' : ''})\\n\\n`);\n break;\n\n case 'step_start': {\n linesSinceStepStart = 0;\n hasEachProgress = false;\n const typeLabel = event.tool ? `[tool] (${event.tool})` : `[${event.stepType}]`;\n const line = ` ${pc.yellow('●')} ${event.stepId} ${pc.dim(typeLabel)} ${pc.dim('running...')}`;\n runtimeActiveSteps.set(event.stepId, line);\n process.stderr.write(line + '\\n');\n break;\n }\n\n case 'step_complete': {\n runtimeActiveSteps.delete(event.stepId);\n const durationStr = formatDuration(event.duration_ms);\n const extras: string[] = [];\n if (event.tokens) extras.push(`${event.tokens.input + event.tokens.output} tokens`);\n if (event.iterations !== undefined) extras.push(`${event.iterations} iterations`);\n const extraStr = extras.length > 0 ? pc.dim(` (${extras.join(', ')})`) : '';\n const completionLine =\n event.status === 'success'\n ? ` ${pc.green('✓')} ${event.stepId} ${pc.dim(durationStr)}${extraStr}`\n : ` ${pc.red('✗')} ${event.stepId} ${pc.dim(durationStr)} ${pc.red('failed')}${extraStr}`;\n\n if (isTTY) {\n // Move up past any intermediate lines + the \"running...\" line, overwrite it,\n // then move the cursor back down past the intermediate lines.\n const up = linesSinceStepStart + 1;\n process.stderr.write(\n MOVE_UP(up) + CLEAR_LINE + completionLine + '\\n' +\n (linesSinceStepStart > 0 ? MOVE_DOWN(linesSinceStepStart) : ''),\n );\n } else {\n process.stderr.write(completionLine + '\\n');\n }\n break;\n }\n\n case 'step_skip':\n runtimeActiveSteps.delete(event.stepId);\n process.stderr.write(` ${pc.dim('○')} ${pc.dim(event.stepId)} ${pc.dim('skipped')}: ${pc.dim(event.reason)}\\n`);\n break;\n\n case 'step_retry':\n process.stderr.write(` ${pc.yellow('↻')} ${event.stepId} retry #${event.attempt}: ${pc.dim(event.error)}\\n`);\n linesSinceStepStart++;\n break;\n\n case 'step_error':\n process.stderr.write(` ${pc.red('✗')} ${event.stepId} error (${event.onError}): ${pc.dim(event.error)}\\n`);\n linesSinceStepStart++;\n break;\n\n case 'each_progress':\n if (isTTY && hasEachProgress) {\n // Overwrite the previous each_progress line in-place.\n process.stderr.write(MOVE_UP(1) + CLEAR_LINE + ` ${pc.dim(`${event.current}/${event.total}`)}\\n`);\n } else {\n process.stderr.write(` ${pc.dim(`${event.current}/${event.total}`)}\\n`);\n linesSinceStepStart++;\n hasEachProgress = true;\n }\n break;\n\n case 'workflow_complete': {\n const durationStr = formatDuration(event.duration_ms);\n const { steps_executed, steps_skipped, total_tokens } = event.summary;\n const parts: string[] = [`${steps_executed} executed`];\n if (steps_skipped > 0) parts.push(`${steps_skipped} skipped`);\n if (total_tokens > 0) parts.push(`${total_tokens} tokens`);\n const summary = parts.join(', ');\n if (event.status === 'success') {\n process.stderr.write(`\\n${pc.green(pc.bold('✓'))} ${pc.green('Success')} in ${durationStr} ${pc.dim(`(${summary})`)}\\n`);\n } else {\n process.stderr.write(`\\n${pc.red(pc.bold('✗'))} ${pc.red('Failed')} in ${durationStr} ${pc.dim(`(${summary})`)}\\n`);\n }\n break;\n }\n }\n}\n\n/** Reset runtime format state (for testing). */\nexport function resetRuntimeFormatState(): void {\n runtimeActiveSteps.clear();\n linesSinceStepStart = 0;\n hasEachProgress = false;\n}\n\n/** Format a duration in milliseconds as a human-readable string (e.g. \"1.2s\", \"2m30s\"). */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n const totalSeconds = ms / 1000;\n if (totalSeconds < 60) return `${totalSeconds.toFixed(1)}s`;\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = Math.round(totalSeconds % 60);\n return `${minutes}m${seconds}s`;\n}\n","// CLI: run command — execute a workflow and print the run log.\n\nimport { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { basename, join } from 'node:path';\nimport { runWorkflowSkill } from '../runtime/index.js';\nimport type { RunLog } from '../types/index.js';\nimport { loadConfig } from '../config/index.js';\nimport { AnthropicLLMAdapter } from '../adapters/anthropic-llm-adapter.js';\nimport { DevToolAdapter } from '../dev-tools/dev-tool-adapter.js';\nimport type { LLMAdapter, LLMResult } from '../types/index.js';\nimport { renderRuntimeEvent } from './format.js';\n\n/** Write a run log to stdout and persist it to disk. */\nfunction writeRunLog(log: RunLog, logDir: string): void {\n const json = JSON.stringify(log, null, 2);\n mkdirSync(logDir, { recursive: true });\n const safeTimestamp = log.started_at.replace(/:/g, '-');\n const logFile = join(logDir, `${log.workflow}-${safeTimestamp}.json`);\n writeFileSync(logFile, json + '\\n', 'utf-8');\n console.error(`Run log written to ${logFile}`);\n console.log(json);\n}\n\nexport async function runCommand(\n file: string,\n options: { input?: string; logDir?: string },\n): Promise<void> {\n const logDir = options.logDir ?? 'runs';\n const workflowName = basename(file, '.md');\n\n let content: string;\n try {\n content = readFileSync(file, 'utf-8');\n } catch (err) {\n console.error(`Error: Cannot read file \"${file}\": ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n\n // Parse inputs\n let inputs: Record<string, unknown> = {};\n if (options.input) {\n try {\n inputs = JSON.parse(options.input) as Record<string, unknown>;\n } catch {\n console.error('Error: --input must be valid JSON');\n process.exit(1);\n }\n }\n\n // Load config and create adapters\n const config = loadConfig();\n const toolAdapter = await DevToolAdapter.create(config);\n let llmAdapter: LLMAdapter;\n if (config.anthropicApiKey) {\n llmAdapter = new AnthropicLLMAdapter(config.anthropicApiKey);\n } else {\n // No API key — create an adapter that fails with a clear error on first use.\n // Workflows without LLM steps (e.g., hello-world.md) still work.\n llmAdapter = {\n call(): Promise<LLMResult> {\n throw new Error(\n 'ANTHROPIC_API_KEY not set. This workflow has LLM steps that require it.\\n' +\n 'Set it in runtime/.env or export it in your shell: export ANTHROPIC_API_KEY=sk-ant-...',\n );\n },\n };\n }\n\n const log = await runWorkflowSkill({\n content,\n inputs,\n toolAdapter,\n llmAdapter,\n workflowName,\n onEvent: renderRuntimeEvent,\n });\n\n writeRunLog(log, logDir);\n process.exit(log.status === 'success' ? 0 : 1);\n}\n","#!/usr/bin/env node\n// WorkflowSkill CLI — validate and run workflows.\n\nimport { Command } from 'commander';\nimport { validateCommand } from './validate.js';\nimport { runCommand } from './run.js';\n\nconst program = new Command();\n\nprogram\n .name('workflowskill')\n .description('WorkflowSkill runtime CLI')\n .version('0.1.0');\n\nprogram\n .command('validate')\n .description('Validate one or more workflow SKILL.md files without executing')\n .argument('<files...>', 'Workflow files to validate')\n .action(validateCommand);\n\nprogram\n .command('run <file>')\n .description('Execute a workflow SKILL.md file')\n .option('-i, --input <json>', 'Workflow inputs as JSON string', '{}')\n .option('-l, --log-dir <dir>', 'Directory to write run logs', 'runs')\n .action(runCommand);\n\nprogram.parse();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/cli/validate.ts","../../src/cli/format.ts","../../src/cli/run.ts","../../src/cli/index.ts"],"sourcesContent":["// CLI: validate command — check workflows without running them.\n\nimport { readFileSync } from 'node:fs';\nimport { parseWorkflowFromMd } from '../parser/index.js';\nimport { ParseError } from '../parser/index.js';\nimport { validateWorkflow } from '../validator/index.js';\n\nexport function validateCommand(files: string[]): void {\n let hasErrors = false;\n\n for (const file of files) {\n let content: string;\n try {\n content = readFileSync(file, 'utf-8');\n } catch {\n console.error(`✗ ${file}: Cannot read file`);\n hasErrors = true;\n continue;\n }\n\n // Parse\n let workflow;\n try {\n workflow = parseWorkflowFromMd(content);\n } catch (err) {\n if (err instanceof ParseError) {\n console.error(`✗ ${file}: ${err.message}`);\n for (const detail of err.details) {\n console.error(` ${detail.path}: ${detail.message}`);\n }\n } else {\n console.error(`✗ ${file}: ${err instanceof Error ? err.message : String(err)}`);\n }\n hasErrors = true;\n continue;\n }\n\n // Validate\n const result = validateWorkflow(workflow);\n if (!result.valid) {\n console.error(`✗ ${file}: Validation errors`);\n for (const error of result.errors) {\n console.error(` ${error.path}: ${error.message}`);\n }\n hasErrors = true;\n continue;\n }\n\n console.log(`✓ ${file} (${workflow.steps.length} steps)`);\n }\n\n if (hasErrors) {\n process.exit(1);\n }\n}\n","// CLI formatting module — runtime event rendering.\n// Uses picocolors for terminal colors and writes to stderr (keeping stdout clean for output).\n\nimport pc from 'picocolors';\nimport type { RuntimeEvent } from '../types/index.js';\n\n// ─── Runtime event renderer ───────────────────────────────────────────────────\n\n// Track in-progress step names for the \"running...\" line (keyed by stepId).\nconst runtimeActiveSteps = new Map<string, string>();\n\n// Whether stderr is a real TTY (enables in-place cursor movement).\nconst isTTY = !!process.stderr.isTTY;\n\n// ANSI helpers for in-place line updates (only used when isTTY is true).\nconst MOVE_UP = (n: number): string => `\\x1b[${n}A`;\nconst CLEAR_LINE = '\\x1b[2K\\r';\nconst MOVE_DOWN = (n: number): string => `\\x1b[${n}B`;\n\n// Lines printed between step_start and step_complete (retries, each_progress).\nlet linesSinceStepStart = 0;\n// Whether each_progress has been printed at least once for the current step.\nlet hasEachProgress = false;\n\n/**\n * Render a runtime event to stderr with live step-by-step progress output.\n * All CLI live output goes to stderr; stdout is reserved for the JSON run log.\n *\n * On TTY: the yellow \"running...\" line is overwritten in-place by the green/red\n * completion line, and each_progress updates a single line instead of appending.\n * On non-TTY (pipes, files): append-only fallback — existing behavior.\n */\nexport function renderRuntimeEvent(event: RuntimeEvent): void {\n switch (event.type) {\n case 'workflow_start':\n process.stderr.write(`\\n${pc.bold('▶')} Running ${pc.cyan(event.workflow)} (${event.totalSteps} step${event.totalSteps !== 1 ? 's' : ''})\\n\\n`);\n break;\n\n case 'step_start': {\n linesSinceStepStart = 0;\n hasEachProgress = false;\n const typeLabel = event.tool ? `[tool] (${event.tool})` : `[${event.stepType}]`;\n const line = ` ${pc.yellow('●')} ${event.stepId} ${pc.dim(typeLabel)} ${pc.dim('running...')}`;\n runtimeActiveSteps.set(event.stepId, line);\n process.stderr.write(line + '\\n');\n break;\n }\n\n case 'step_complete': {\n runtimeActiveSteps.delete(event.stepId);\n const durationStr = formatDuration(event.duration_ms);\n const extras: string[] = [];\n if (event.tokens) extras.push(`${event.tokens.input + event.tokens.output} tokens`);\n if (event.iterations !== undefined) extras.push(`${event.iterations} iterations`);\n const extraStr = extras.length > 0 ? pc.dim(` (${extras.join(', ')})`) : '';\n const completionLine =\n event.status === 'success'\n ? ` ${pc.green('✓')} ${event.stepId} ${pc.dim(durationStr)}${extraStr}`\n : ` ${pc.red('✗')} ${event.stepId} ${pc.dim(durationStr)} ${pc.red('failed')}${extraStr}`;\n\n if (isTTY) {\n // Move up past any intermediate lines + the \"running...\" line, overwrite it,\n // then move the cursor back down past the intermediate lines.\n const up = linesSinceStepStart + 1;\n process.stderr.write(\n MOVE_UP(up) + CLEAR_LINE + completionLine + '\\n' +\n (linesSinceStepStart > 0 ? MOVE_DOWN(linesSinceStepStart) : ''),\n );\n } else {\n process.stderr.write(completionLine + '\\n');\n }\n break;\n }\n\n case 'step_skip':\n runtimeActiveSteps.delete(event.stepId);\n process.stderr.write(` ${pc.dim('○')} ${pc.dim(event.stepId)} ${pc.dim('skipped')}: ${pc.dim(event.reason)}\\n`);\n break;\n\n case 'step_retry':\n process.stderr.write(` ${pc.yellow('↻')} ${event.stepId} retry #${event.attempt}: ${pc.dim(event.error)}\\n`);\n linesSinceStepStart++;\n break;\n\n case 'step_error':\n process.stderr.write(` ${pc.red('✗')} ${event.stepId} error (${event.onError}): ${pc.dim(event.error)}\\n`);\n linesSinceStepStart++;\n break;\n\n case 'each_progress':\n if (isTTY && hasEachProgress) {\n // Overwrite the previous each_progress line in-place.\n process.stderr.write(MOVE_UP(1) + CLEAR_LINE + ` ${pc.dim(`${event.current}/${event.total}`)}\\n`);\n } else {\n process.stderr.write(` ${pc.dim(`${event.current}/${event.total}`)}\\n`);\n linesSinceStepStart++;\n hasEachProgress = true;\n }\n break;\n\n case 'workflow_complete': {\n const durationStr = formatDuration(event.duration_ms);\n const { steps_executed, steps_skipped, total_tokens } = event.summary;\n const parts: string[] = [`${steps_executed} executed`];\n if (steps_skipped > 0) parts.push(`${steps_skipped} skipped`);\n if (total_tokens > 0) parts.push(`${total_tokens} tokens`);\n const summary = parts.join(', ');\n if (event.status === 'success') {\n process.stderr.write(`\\n${pc.green(pc.bold('✓'))} ${pc.green('Success')} in ${durationStr} ${pc.dim(`(${summary})`)}\\n`);\n } else {\n process.stderr.write(`\\n${pc.red(pc.bold('✗'))} ${pc.red('Failed')} in ${durationStr} ${pc.dim(`(${summary})`)}\\n`);\n }\n break;\n }\n }\n}\n\n/** Reset runtime format state (for testing). */\nexport function resetRuntimeFormatState(): void {\n runtimeActiveSteps.clear();\n linesSinceStepStart = 0;\n hasEachProgress = false;\n}\n\n/** Format a duration in milliseconds as a human-readable string (e.g. \"1.2s\", \"2m30s\"). */\nexport function formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n const totalSeconds = ms / 1000;\n if (totalSeconds < 60) return `${totalSeconds.toFixed(1)}s`;\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = Math.round(totalSeconds % 60);\n return `${minutes}m${seconds}s`;\n}\n","// CLI: run command — execute a workflow and print the run log.\n\nimport { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { basename, join } from 'node:path';\nimport { runWorkflowSkill } from '../runtime/index.js';\nimport type { RunLog } from '../types/index.js';\nimport { loadConfig } from '../config/index.js';\nimport { AnthropicLLMAdapter } from '../adapters/anthropic-llm-adapter.js';\nimport { BuiltinToolAdapter } from '../tools/builtin-tool-adapter.js';\nimport type { LLMAdapter, LLMResult } from '../types/index.js';\nimport { renderRuntimeEvent } from './format.js';\n\n/** Write a run log to stdout and persist it to disk. */\nfunction writeRunLog(log: RunLog, logDir: string): void {\n const json = JSON.stringify(log, null, 2);\n mkdirSync(logDir, { recursive: true });\n const safeTimestamp = log.started_at.replace(/:/g, '-');\n const logFile = join(logDir, `${log.workflow}-${safeTimestamp}.json`);\n writeFileSync(logFile, json + '\\n', 'utf-8');\n console.error(`Run log written to ${logFile}`);\n console.log(json);\n}\n\nexport async function runCommand(\n file: string,\n options: { input?: string; logDir?: string },\n): Promise<void> {\n const logDir = options.logDir ?? 'runs';\n const workflowName = basename(file, '.md');\n\n let content: string;\n try {\n content = readFileSync(file, 'utf-8');\n } catch (err) {\n console.error(`Error: Cannot read file \"${file}\": ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n\n // Parse inputs\n let inputs: Record<string, unknown> = {};\n if (options.input) {\n try {\n inputs = JSON.parse(options.input) as Record<string, unknown>;\n } catch {\n console.error('Error: --input must be valid JSON');\n process.exit(1);\n }\n }\n\n // Load config and create adapters\n const config = loadConfig();\n const toolAdapter = await BuiltinToolAdapter.create();\n let llmAdapter: LLMAdapter;\n if (config.anthropicApiKey) {\n llmAdapter = new AnthropicLLMAdapter(config.anthropicApiKey);\n } else {\n // No API key — create an adapter that fails with a clear error on first use.\n // Workflows without LLM steps (e.g., hello-world.md) still work.\n llmAdapter = {\n call(): Promise<LLMResult> {\n throw new Error(\n 'ANTHROPIC_API_KEY not set. This workflow has LLM steps that require it.\\n' +\n 'Set it in runtime/.env or export it in your shell: export ANTHROPIC_API_KEY=sk-ant-...',\n );\n },\n };\n }\n\n const log = await runWorkflowSkill({\n content,\n inputs,\n toolAdapter,\n llmAdapter,\n workflowName,\n onEvent: renderRuntimeEvent,\n });\n\n writeRunLog(log, logDir);\n process.exit(log.status === 'success' ? 0 : 1);\n}\n","#!/usr/bin/env node\n// WorkflowSkill CLI — validate and run workflows.\n\nimport { Command } from 'commander';\nimport { validateCommand } from './validate.js';\nimport { runCommand } from './run.js';\n\nconst program = new Command();\n\nprogram\n .name('workflowskill')\n .description('WorkflowSkill runtime CLI')\n .version('0.1.0');\n\nprogram\n .command('validate')\n .description('Validate one or more workflow SKILL.md files without executing')\n .argument('<files...>', 'Workflow files to validate')\n .action(validateCommand);\n\nprogram\n .command('run <file>')\n .description('Execute a workflow SKILL.md file')\n .option('-i, --input <json>', 'Workflow inputs as JSON string', '{}')\n .option('-l, --log-dir <dir>', 'Directory to write run logs', 'runs')\n .action(runCommand);\n\nprogram.parse();\n"],"mappings":"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"}
|
package/dist/index.d.mts
CHANGED
|
@@ -451,17 +451,23 @@ declare class AnthropicLLMAdapter implements LLMAdapter {
|
|
|
451
451
|
call(model: string | undefined, prompt: string, responseFormat?: Record<string, unknown>): Promise<LLMResult>;
|
|
452
452
|
}
|
|
453
453
|
//#endregion
|
|
454
|
-
//#region src/
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
454
|
+
//#region src/tools/builtin-tool-adapter.d.ts
|
|
455
|
+
declare class BuiltinToolAdapter implements ToolAdapter {
|
|
456
|
+
private tools;
|
|
457
|
+
private register;
|
|
458
|
+
has(toolName: string): boolean;
|
|
459
|
+
list(): ToolDescriptor[];
|
|
460
|
+
invoke(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
461
|
+
/**
|
|
462
|
+
* Create a BuiltinToolAdapter with all bundled tools registered.
|
|
463
|
+
*/
|
|
464
|
+
static create(): Promise<BuiltinToolAdapter>;
|
|
460
465
|
}
|
|
466
|
+
//#endregion
|
|
467
|
+
//#region src/config/index.d.ts
|
|
461
468
|
/** WorkflowSkill configuration. */
|
|
462
469
|
interface WorkflowSkillConfig {
|
|
463
470
|
anthropicApiKey?: string;
|
|
464
|
-
googleCredentials?: GoogleCredentials;
|
|
465
471
|
}
|
|
466
472
|
/**
|
|
467
473
|
* Load configuration from environment variables, with .env fallback.
|
|
@@ -474,20 +480,6 @@ interface WorkflowSkillConfig {
|
|
|
474
480
|
*/
|
|
475
481
|
declare function loadConfig(cwd?: string): WorkflowSkillConfig;
|
|
476
482
|
//#endregion
|
|
477
|
-
//#region src/dev-tools/dev-tool-adapter.d.ts
|
|
478
|
-
declare class DevToolAdapter implements ToolAdapter {
|
|
479
|
-
private tools;
|
|
480
|
-
private register;
|
|
481
|
-
has(toolName: string): boolean;
|
|
482
|
-
list(): ToolDescriptor[];
|
|
483
|
-
invoke(toolName: string, args: Record<string, unknown>): Promise<ToolResult>;
|
|
484
|
-
/**
|
|
485
|
-
* Create a DevToolAdapter with all available tools registered.
|
|
486
|
-
* Google tools are only registered if credentials are provided.
|
|
487
|
-
*/
|
|
488
|
-
static create(config: WorkflowSkillConfig): Promise<DevToolAdapter>;
|
|
489
|
-
}
|
|
490
|
-
//#endregion
|
|
491
483
|
//#region src/executor/types.d.ts
|
|
492
484
|
/** Additional context attached to a step execution error. */
|
|
493
485
|
interface StepErrorContext {
|
|
@@ -633,5 +625,5 @@ declare function runWorkflowSkill(options: RunWorkflowSkillOptions): Promise<Run
|
|
|
633
625
|
//#region src/skill/index.d.ts
|
|
634
626
|
declare const AUTHORING_SKILL: string;
|
|
635
627
|
//#endregion
|
|
636
|
-
export { AUTHORING_SKILL, AnthropicLLMAdapter, type ConditionalOutput, ConditionalStep,
|
|
628
|
+
export { AUTHORING_SKILL, AnthropicLLMAdapter, BuiltinToolAdapter, type ConditionalOutput, ConditionalStep, type DispatchResult, EvalError, type ExitOutput, ExitStatus, ExitStep, FieldSchema, JsonSchema, LLMAdapter, type LLMHandler, LLMResult, LLMStep, LexError, MockLLMAdapter, MockToolAdapter, OnError, ParseError, type ParseErrorDetail, ParseExprError, ParsedSkill, RetryPolicy, RetryRecord, RunLog, RunLogError, type RunOptions, RunStatus, RunSummary, type RunWorkflowSkillOptions, RuntimeContext, RuntimeEvent, SchemaType, SkillFrontmatter, SortDirection, Step, StepBase, type StepErrorContext, StepExecutionError, StepInput, type StepOutput, StepRecord, StepRunStatus, StepType, TokenUsage, ToolAdapter, ToolDescriptor, type ToolHandler, ToolResult, ToolStep, TransformFilterStep, TransformMapStep, TransformOperation, TransformSortStep, TransformStep, type ValidateWorkflowSkillOptions, type ValidateWorkflowSkillResult, ValidationError, ValidationResult, WorkflowDefinition, WorkflowExecutionError, WorkflowInput, WorkflowOutput, type WorkflowSkillConfig, buildFailedRunLog, dispatch, executeConditional, executeExit, executeLLM, executeTool, executeTransform, interpolatePrompt, loadConfig, parseSkillMd, parseWorkflowFromMd, parseWorkflowYaml, resolveExpression, runWorkflow, runWorkflowSkill, validateWorkflow, validateWorkflowSkill };
|
|
637
629
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/index.ts","../src/parser/index.ts","../src/expression/lexer.ts","../src/expression/parser.ts","../src/expression/evaluator.ts","../src/expression/index.ts","../src/validator/index.ts","../src/adapters/mock-tool-adapter.ts","../src/adapters/mock-llm-adapter.ts","../src/adapters/anthropic-llm-adapter.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types/index.ts","../src/parser/index.ts","../src/expression/lexer.ts","../src/expression/parser.ts","../src/expression/evaluator.ts","../src/expression/index.ts","../src/validator/index.ts","../src/adapters/mock-tool-adapter.ts","../src/adapters/mock-llm-adapter.ts","../src/adapters/anthropic-llm-adapter.ts","../src/tools/builtin-tool-adapter.ts","../src/config/index.ts","../src/executor/types.ts","../src/executor/transform.ts","../src/executor/conditional.ts","../src/executor/exit.ts","../src/executor/tool.ts","../src/executor/llm.ts","../src/executor/index.ts","../src/runtime/index.ts","../src/skill/index.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as parseSkillMd, S as ParseError, T as parseWorkflowYaml, _ as interpolatePrompt, a as dispatch, b as ParseExprError, c as StepExecutionError, d as executeTransform, f as loadConfig, g as validateWorkflowSkill, h as validateWorkflow, i as runWorkflowSkill, l as executeExit, m as AnthropicLLMAdapter, n as buildFailedRunLog, o as executeLLM, p as
|
|
1
|
+
import { C as parseSkillMd, S as ParseError, T as parseWorkflowYaml, _ as interpolatePrompt, a as dispatch, b as ParseExprError, c as StepExecutionError, d as executeTransform, f as loadConfig, g as validateWorkflowSkill, h as validateWorkflow, i as runWorkflowSkill, l as executeExit, m as AnthropicLLMAdapter, n as buildFailedRunLog, o as executeLLM, p as BuiltinToolAdapter, r as runWorkflow, s as executeTool, t as WorkflowExecutionError, u as executeConditional, v as resolveExpression, w as parseWorkflowFromMd, x as LexError, y as EvalError } from "./runtime-CD81H1bx.mjs";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
|
|
@@ -57,5 +57,5 @@ var MockLLMAdapter = class {
|
|
|
57
57
|
const AUTHORING_SKILL = readFileSync(join(import.meta.dirname, "../../skill/SKILL.md"), "utf-8");
|
|
58
58
|
|
|
59
59
|
//#endregion
|
|
60
|
-
export { AUTHORING_SKILL, AnthropicLLMAdapter,
|
|
60
|
+
export { AUTHORING_SKILL, AnthropicLLMAdapter, BuiltinToolAdapter, EvalError, LexError, MockLLMAdapter, MockToolAdapter, ParseError, ParseExprError, StepExecutionError, WorkflowExecutionError, buildFailedRunLog, dispatch, executeConditional, executeExit, executeLLM, executeTool, executeTransform, interpolatePrompt, loadConfig, parseSkillMd, parseWorkflowFromMd, parseWorkflowYaml, resolveExpression, runWorkflow, runWorkflowSkill, validateWorkflow, validateWorkflowSkill };
|
|
61
61
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1113,8 +1113,8 @@ var AnthropicLLMAdapter = class {
|
|
|
1113
1113
|
};
|
|
1114
1114
|
|
|
1115
1115
|
//#endregion
|
|
1116
|
-
//#region src/
|
|
1117
|
-
var
|
|
1116
|
+
//#region src/tools/builtin-tool-adapter.ts
|
|
1117
|
+
var BuiltinToolAdapter = class BuiltinToolAdapter {
|
|
1118
1118
|
tools = /* @__PURE__ */ new Map();
|
|
1119
1119
|
register(descriptor, handler) {
|
|
1120
1120
|
this.tools.set(descriptor.name, {
|
|
@@ -1137,30 +1137,12 @@ var DevToolAdapter = class DevToolAdapter {
|
|
|
1137
1137
|
return entry.handler(args);
|
|
1138
1138
|
}
|
|
1139
1139
|
/**
|
|
1140
|
-
* Create a
|
|
1141
|
-
* Google tools are only registered if credentials are provided.
|
|
1140
|
+
* Create a BuiltinToolAdapter with all bundled tools registered.
|
|
1142
1141
|
*/
|
|
1143
|
-
static async create(
|
|
1144
|
-
const adapter = new
|
|
1145
|
-
const
|
|
1146
|
-
adapter.register(
|
|
1147
|
-
const htmlMod = await import("./html-select-BZPYAr6k.mjs");
|
|
1148
|
-
adapter.register(htmlMod.descriptor, htmlMod.handler);
|
|
1149
|
-
if (config.googleCredentials) {
|
|
1150
|
-
const { OAuth2Client } = await import("google-auth-library");
|
|
1151
|
-
const auth = new OAuth2Client(config.googleCredentials.clientId, config.googleCredentials.clientSecret);
|
|
1152
|
-
auth.setCredentials({ refresh_token: config.googleCredentials.refreshToken });
|
|
1153
|
-
const gmailMod = await import("./gmail-CYBJ6Dxa.mjs");
|
|
1154
|
-
const gmailHandlers = gmailMod.createHandlers(auth);
|
|
1155
|
-
adapter.register(gmailMod.searchDescriptor, gmailHandlers.search);
|
|
1156
|
-
adapter.register(gmailMod.readDescriptor, gmailHandlers.read);
|
|
1157
|
-
adapter.register(gmailMod.sendDescriptor, gmailHandlers.send);
|
|
1158
|
-
const sheetsMod = await import("./sheets-CGy8JvVz.mjs");
|
|
1159
|
-
const sheetsHandlers = sheetsMod.createHandlers(auth);
|
|
1160
|
-
adapter.register(sheetsMod.readDescriptor, sheetsHandlers.read);
|
|
1161
|
-
adapter.register(sheetsMod.writeDescriptor, sheetsHandlers.write);
|
|
1162
|
-
adapter.register(sheetsMod.appendDescriptor, sheetsHandlers.append);
|
|
1163
|
-
}
|
|
1142
|
+
static async create() {
|
|
1143
|
+
const adapter = new BuiltinToolAdapter();
|
|
1144
|
+
const scrapeMod = await import("./web-scrape-GeEM_JNl.mjs");
|
|
1145
|
+
adapter.register(scrapeMod.descriptor, scrapeMod.handler);
|
|
1164
1146
|
return adapter;
|
|
1165
1147
|
}
|
|
1166
1148
|
};
|
|
@@ -1219,14 +1201,6 @@ function loadConfig(cwd) {
|
|
|
1219
1201
|
const config = {};
|
|
1220
1202
|
const anthropicKey = get("ANTHROPIC_API_KEY");
|
|
1221
1203
|
if (anthropicKey) config.anthropicApiKey = anthropicKey;
|
|
1222
|
-
const clientId = get("GOOGLE_CLIENT_ID");
|
|
1223
|
-
const clientSecret = get("GOOGLE_CLIENT_SECRET");
|
|
1224
|
-
const refreshToken = get("GOOGLE_REFRESH_TOKEN");
|
|
1225
|
-
if (clientId && clientSecret && refreshToken) config.googleCredentials = {
|
|
1226
|
-
clientId,
|
|
1227
|
-
clientSecret,
|
|
1228
|
-
refreshToken
|
|
1229
|
-
};
|
|
1230
1204
|
return config;
|
|
1231
1205
|
}
|
|
1232
1206
|
|
|
@@ -1999,5 +1973,5 @@ function sleep(ms) {
|
|
|
1999
1973
|
}
|
|
2000
1974
|
|
|
2001
1975
|
//#endregion
|
|
2002
|
-
export { parseSkillMd as C, ParseError as S, parseWorkflowYaml as T, interpolatePrompt as _, dispatch as a, ParseExprError as b, StepExecutionError as c, executeTransform as d, loadConfig as f, validateWorkflowSkill as g, validateWorkflow as h, runWorkflowSkill as i, executeExit as l, AnthropicLLMAdapter as m, buildFailedRunLog as n, executeLLM as o,
|
|
2003
|
-
//# sourceMappingURL=runtime-
|
|
1976
|
+
export { parseSkillMd as C, ParseError as S, parseWorkflowYaml as T, interpolatePrompt as _, dispatch as a, ParseExprError as b, StepExecutionError as c, executeTransform as d, loadConfig as f, validateWorkflowSkill as g, validateWorkflow as h, runWorkflowSkill as i, executeExit as l, AnthropicLLMAdapter as m, buildFailedRunLog as n, executeLLM as o, BuiltinToolAdapter as p, runWorkflow as r, executeTool as s, WorkflowExecutionError as t, executeConditional as u, resolveExpression as v, parseWorkflowFromMd as w, LexError as x, EvalError as y };
|
|
1977
|
+
//# sourceMappingURL=runtime-CD81H1bx.mjs.map
|