Skip to content

Commit a6e100f

Browse files
jdmonacoclaude
andcommitted
chore: Release version 0.6.0
Shell integration, Obsidian embeds, automatic dependency execution, and multi-argument CLI options. Release preparation includes: - Documentation fixes and reorganization - Test consolidation with shared helpers - DRY refactoring (shared option parsing) - Shell subcommand test coverage - Dead code cleanup 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 25dfa1a commit a6e100f

File tree

23 files changed

+601
-417
lines changed

23 files changed

+601
-417
lines changed

CHANGELOG.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.6.0] - 2025-11-29
9+
10+
### Added
11+
- Shell integration with `wfw shell` subcommand: install, doctor, uninstall (32759ba, c0a49d6)
12+
- PS1 prompt integration via `__wfw_ps1()` function (1801cd7)
13+
- Obsidian markdown embed preprocessing: `![[file]]` syntax support (d3d1ccb)
14+
- Automatic dependency execution with execution caching (a51eeb1)
15+
- Multi-argument support for `--input`/`-in` and `--context`/`-cx` options (ee9e146)
16+
- Shell integration commands in installation guide (25dfa1a)
17+
- Pipeline module for dependency resolution and execution caching (a51eeb1)
18+
19+
### Changed
20+
- Consolidated CONTEXT/INPUT config into single arrays for cleaner handling (e179184)
21+
- Reorganized reference and developer-guide documentation (ec75d6d, 8cab58f)
22+
- Updated user-guide for accuracy and formatting (c769c3c)
23+
- Documentation list separators enforced for mkdocs compatibility (e0702f6, e6031d7, f12aebc)
24+
- Pipeline and syntax documentation updates (b5d35ae)
25+
26+
### Fixed
27+
- XML completion for builtin task templates (7d6950e)
28+
- Added doctor and uninstall to shell completions (e072ef6)
29+
830
## [0.5.0] - 2025-11-28
931

1032
### Added

CLAUDE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ docs/developer-guide/ → Architecture, implementation, layer docs
9797

9898
## Version Management
9999

100-
**Current version:** 0.5.0 (pre-release)
100+
**Current version:** 0.6.0 (pre-release)
101101

102102
**Location:** `WIREFLOW_VERSION` in `wireflow.sh` (line 14)
103103

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
**Reproducible AI Workflows for Research & Development**
44

5-
Version 0.5.0 (pre-release) · [Documentation](https://docs.joemona.co/wireflow/) · [GitHub](https://github.com/jdmonaco/wireflow)
5+
Version 0.6.0 (pre-release) · [Documentation](https://docs.joemona.co/wireflow/) · [GitHub](https://github.com/jdmonaco/wireflow)
66

77
## Key Features
88

RELEASE-NOTES.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,70 @@
11
# Release Notes
22

3+
## Version 0.6.0 (2025-11-29)
4+
5+
**Shell Integration, Obsidian Embeds & Automatic Dependencies**
6+
7+
This release adds seamless shell integration for prompt customization, Obsidian markdown embed support, and intelligent workflow caching with automatic dependency execution.
8+
9+
### 🐚 Shell Integration
10+
11+
Install WireFlow into your shell environment with a single command:
12+
13+
```bash
14+
wfw shell install # Install wfw command, completions, and prompt helper
15+
wfw shell doctor # Check installation status and fix issues
16+
wfw shell uninstall # Remove shell integration
17+
```
18+
19+
Customize your PS1 prompt with workflow-aware status:
20+
21+
```bash
22+
source ~/.local/share/wireflow/wfw-prompt.sh
23+
PS1='$(__wfw_ps1) \$ ' # Shows current workflow context
24+
```
25+
26+
### 📎 Obsidian Embed Support
27+
28+
Use Obsidian's `![[file]]` syntax directly in task files:
29+
30+
- `![[document.pdf]]` - Embeds PDF as content block
31+
- `![[image.png]]` - Embeds image via Vision API
32+
- `![[notes.md]]` - Inlines markdown content
33+
- Recursive embed resolution with cycle detection
34+
35+
Perfect for researchers using Obsidian as a knowledge base.
36+
37+
### 🔗 Automatic Dependency Execution
38+
39+
Workflows with `DEPENDS_ON` now auto-execute stale dependencies:
40+
41+
```bash
42+
wfw run analysis # Automatically runs prerequisite workflows first
43+
```
44+
45+
Features:
46+
47+
- Execution caching with hash-based staleness detection
48+
- Config/context/task changes trigger re-execution
49+
- Topological ordering ensures correct execution sequence
50+
51+
### 📥 Multi-Argument Options
52+
53+
Simplified file specification with multiple arguments per option:
54+
55+
```bash
56+
# Multiple inputs in one flag
57+
wfw run analysis -in file1.txt file2.txt file3.txt
58+
59+
# Multiple context files
60+
wfw run summary -cx ref1.pdf ref2.pdf
61+
62+
# Mix with other options
63+
wfw run report -in data.csv -cx guide.md --profile deep
64+
```
65+
66+
---
67+
368
## Version 0.5.0 (2025-11-28)
469

570
**Batch Processing, Model Profiles & Image Format Conversion**

docs/developer-guide/architecture.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ lib/
1919
├── core.sh # Subcommand implementations (init, new, edit, list, config)
2020
├── config.sh # Configuration loading and cascade logic
2121
├── help.sh # Help text for all subcommands
22+
├── pipeline.sh # Dependency resolution and execution caching
2223
├── run.sh # Run mode (workflow execution with full context)
2324
├── task.sh # Task mode (lightweight execution without workflow dirs)
2425
├── batch.sh # Batch mode (Message Batches API)

docs/developer-guide/implementation.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,28 @@ fi
5858
- Git-style format: usage line, options, description, examples
5959
- Sourced early, integrated via `help` subcommand and `-h` flags
6060

61+
### lib/pipeline.sh
62+
63+
**Dependency resolution and execution caching:**
64+
65+
- `write_execution_log()` - Write execution.json after successful workflow completion
66+
- `read_execution_log()` - Parse execution log for staleness checks
67+
- `compute_execution_hash()` - Generate 16-character hash of execution state
68+
- `is_execution_stale()` - Check if workflow needs re-run (mtime + hash validation)
69+
- `get_staleness_reason()` - Return human-readable reason for staleness
70+
- `extract_depends_on()` - Parse DEPENDS_ON from workflow config
71+
- `resolve_dependency_order()` - Topological sort for dependency chain
72+
- `execute_dependency()` - Run dependency workflow in isolated subprocess
73+
- `reset_workflow_config()` - Restore project-level config from cache
74+
- `get_execution_status()` - Format status for workflow listing
75+
- `get_execution_timestamp()` - Format last execution time
76+
77+
**Key concepts:**
78+
79+
- Execution hash combines: config state, file hashes, dependency hashes, task file hash
80+
- Fast path uses mtime checks, slow path uses full hash comparison
81+
- Subshell isolation prevents dependency config from polluting parent
82+
6183
### lib/task.sh
6284

6385
**Task mode execution:**

docs/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
**Reproducible AI Workflows for Research & Development**
44

5-
Version 0.5.0 (pre-release)
5+
Version 0.6.0 (pre-release)
66

77
## Key Features
88

docs/user-guide/configuration.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ CONTEXT=(
125125
| Variable | Description | Default |
126126
|----------|-------------|---------|
127127
| `OUTPUT_FORMAT` | File extension (`md`, `txt`, `json`) | `md` |
128-
| `EXPORT_FILE` | Additional output path | (empty) |
128+
| `EXPORT_PATH` | Additional output path | (empty) |
129129
| `SYSTEM_PROMPTS` | Prompt names | `(base)` |
130130
| `WIREFLOW_PROMPT_PREFIX` | Prompts directory | `~/.config/wireflow/prompts` |
131131

@@ -153,7 +153,7 @@ CONTEXT=(
153153
| `-in/--input` | `INPUT` | `-in data.csv` |
154154
| `-cx/--context` | `CONTEXT` | `-cx notes.md` |
155155
| `--depends-on` | `DEPENDS_ON` | `--depends-on preprocessing` |
156-
| `--export-file` | `EXPORT_FILE` | `--export-file reports/out.md` |
156+
| `--export` | `EXPORT_PATH` | `--export reports/out.md` |
157157

158158
## Viewing Configuration
159159

lib/config.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,6 @@ create_builtin_task_templates() {
436436
</user-task>
437437
TASK_EOF
438438

439-
#TODO fix builtin task templates with incomplete XML structure
440439
# summarize.txt
441440
cat > "$task_dir/summarize.txt" <<'TASK_EOF'
442441
<user-task>

lib/execute.sh

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,106 @@
77
# This file is sourced by wireflow.sh and lib/task.sh.
88
# =============================================================================
99

10+
# =============================================================================
11+
# Shared Option Parsing
12+
# =============================================================================
13+
14+
# Parse common execution options shared between run and task modes
15+
# Arguments:
16+
# $1 - option: The option flag being parsed
17+
# $2+ - remaining arguments
18+
# Returns:
19+
# Sets PARSE_CONSUMED to number of args consumed (0 = unknown option)
20+
# Sets global config variables (MODEL, TEMPERATURE, etc.)
21+
# Usage:
22+
# parse_common_option "$1" "${@:2}"
23+
# if [[ $PARSE_CONSUMED -gt 0 ]]; then
24+
# shift $PARSE_CONSUMED
25+
# fi
26+
PARSE_CONSUMED=0
27+
28+
parse_common_option() {
29+
local opt="$1"
30+
shift
31+
PARSE_CONSUMED=0
32+
33+
case "$opt" in
34+
--profile)
35+
[[ $# -eq 0 ]] && { echo "Error: --profile requires argument" >&2; return 1; }
36+
PROFILE="$1"
37+
CONFIG_SOURCE_MAP[PROFILE]="cli"
38+
PARSE_CONSUMED=2
39+
;;
40+
--model|-m)
41+
[[ $# -eq 0 ]] && { echo "Error: --model requires argument" >&2; return 1; }
42+
MODEL="$1"
43+
CONFIG_SOURCE_MAP[MODEL]="cli"
44+
PARSE_CONSUMED=2
45+
;;
46+
--enable-thinking)
47+
ENABLE_THINKING=true
48+
CONFIG_SOURCE_MAP[ENABLE_THINKING]="cli"
49+
PARSE_CONSUMED=1
50+
;;
51+
--disable-thinking)
52+
ENABLE_THINKING=false
53+
CONFIG_SOURCE_MAP[ENABLE_THINKING]="cli"
54+
PARSE_CONSUMED=1
55+
;;
56+
--thinking-budget)
57+
[[ $# -eq 0 ]] && { echo "Error: --thinking-budget requires argument" >&2; return 1; }
58+
THINKING_BUDGET="$1"
59+
CONFIG_SOURCE_MAP[THINKING_BUDGET]="cli"
60+
PARSE_CONSUMED=2
61+
;;
62+
--effort)
63+
[[ $# -eq 0 ]] && { echo "Error: --effort requires argument" >&2; return 1; }
64+
EFFORT="$1"
65+
CONFIG_SOURCE_MAP[EFFORT]="cli"
66+
PARSE_CONSUMED=2
67+
;;
68+
--temperature|-t)
69+
[[ $# -eq 0 ]] && { echo "Error: --temperature requires argument" >&2; return 1; }
70+
TEMPERATURE="$1"
71+
CONFIG_SOURCE_MAP[TEMPERATURE]="cli"
72+
PARSE_CONSUMED=2
73+
;;
74+
--max-tokens)
75+
[[ $# -eq 0 ]] && { echo "Error: --max-tokens requires argument" >&2; return 1; }
76+
MAX_TOKENS="$1"
77+
CONFIG_SOURCE_MAP[MAX_TOKENS]="cli"
78+
PARSE_CONSUMED=2
79+
;;
80+
--system|-p)
81+
[[ $# -eq 0 ]] && { echo "Error: --system requires argument" >&2; return 1; }
82+
IFS=',' read -ra SYSTEM_PROMPTS <<< "$1"
83+
CONFIG_SOURCE_MAP[SYSTEM_PROMPTS]="cli"
84+
PARSE_CONSUMED=2
85+
;;
86+
--format|-f)
87+
[[ $# -eq 0 ]] && { echo "Error: --format requires argument" >&2; return 1; }
88+
OUTPUT_FORMAT="$1"
89+
CONFIG_SOURCE_MAP[OUTPUT_FORMAT]="cli"
90+
PARSE_CONSUMED=2
91+
;;
92+
--enable-citations)
93+
ENABLE_CITATIONS=true
94+
CONFIG_SOURCE_MAP[ENABLE_CITATIONS]="cli"
95+
PARSE_CONSUMED=1
96+
;;
97+
--disable-citations)
98+
ENABLE_CITATIONS=false
99+
CONFIG_SOURCE_MAP[ENABLE_CITATIONS]="cli"
100+
PARSE_CONSUMED=1
101+
;;
102+
*)
103+
# Unknown option - caller handles
104+
PARSE_CONSUMED=0
105+
;;
106+
esac
107+
return 0
108+
}
109+
10110
# =============================================================================
11111
# System Prompt Building
12112
# =============================================================================

0 commit comments

Comments
 (0)