Commit Graph

3456 Commits

Author SHA1 Message Date
Kayvan Sylvan
eea80f3bee feat: add multi-content support for images and PDFs in Anthropic client
### CHANGES
- Update toMessages to handle multi-content messages with text and attachments
- Add contentBlocksFromMessage to convert message parts to Anthropic blocks
- Implement support for image URLs including data URLs and base64 images
- Add PDF attachment handling via data URLs and URL-based PDFs
- Introduce parseDataURL for extracting MIME type and data from data URLs
- Create normalizeImageMimeType to standardize supported image MIME types
- Add isPDFURL to detect PDF files from URL paths
- Refactor system content accumulation to use text extraction from parts
- Update tests to verify PDF attachment processing in multi-content messages
2026-01-21 14:19:40 -08:00
Kayvan Sylvan
fa5a352860 Merge pull request #1951 from ksylvan/kayvan/extract_wisdom_with_attribution
Add `extract_wisdom_with_attribution` pattern for speaker-attributed quotes
2026-01-21 14:04:40 -08:00
Kayvan Sylvan
ce383fe2d9 Merge pull request #1950 from cleong14/feat/suggest-gt-command
feat: add suggest_gt_command pattern
2026-01-21 14:04:20 -08:00
Kayvan Sylvan
327bd85bb6 chore: incoming 1950 changelog entry 2026-01-21 14:01:45 -08:00
Kayvan Sylvan
378abd5fe3 chore: incoming 1951 changelog entry 2026-01-21 14:00:01 -08:00
Kayvan Sylvan
a31dc59f7e feat: add extract_wisdom_with_attribution pattern for speaker-attributed quotes
## CHANGES

- Add new pattern extending `extract_wisdom` with speaker attribution
- Create README and system.md for the new pattern
- Update pattern_explanations.md with new pattern entry
- Add pattern to suggest_pattern category lists
- Update pattern_descriptions.json with metadata and tags
- Update pattern_extracts.json with pattern content
2026-01-21 13:46:36 -08:00
Chaz
436e5aae6b feat: add suggest_gt_command pattern
Adds a pattern that suggests Gas Town (gt) CLI commands based on
natural language descriptions. Covers 85+ commands across work
management, agents, communication, services, diagnostics, and recovery.

Pipe-friendly output: first line is the raw command, enabling:
  echo "message the mayor" | fabric -p suggest_gt_command | head -1

Gas Town: https://github.com/steveyegge/gastown

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 00:23:14 -10:00
github-actions[bot]
c528a72b5b chore(release): Update version to v1.4.386 v1.4.386 2026-01-21 00:17:17 +00:00
Kayvan Sylvan
89df6ac75e Merge pull request #1945 from ksylvan/implement-spotify-api
feat: Add Spotify API integration for podcast metadata retrieval
2026-01-20 16:13:04 -08:00
Kayvan Sylvan
963acdefbb chore: incoming 1945 changelog entry 2026-01-20 16:01:09 -08:00
Kayvan Sylvan
719590abb6 feat: add Spotify metadata retrieval via --spotify flag
## CHANGES
- Add Spotify plugin with OAuth token handling and metadata
- Wire --spotify flag into CLI processing and output
- Register Spotify in plugin setup, env, and registry
- Update shell completions to include --spotify option
- Add i18n strings for Spotify configuration errors
- Add unit and integration tests for Spotify API
- Set gopls integration build tags for workspace
2026-01-20 15:57:59 -08:00
github-actions[bot]
b5e36d93b6 chore(release): Update version to v1.4.385 v1.4.385 2026-01-20 20:07:22 +00:00
Kayvan Sylvan
2241b2a283 Merge pull request #1949 from ksylvan/image-generation-feature-should-warn
Fix #1931 - Image Generation Feature should warn if the model is not capable of Image Generation
2026-01-20 12:04:40 -08:00
Kayvan Sylvan
ef60f8ca89 chore: incoming 1949 changelog entry 2026-01-20 11:59:31 -08:00
Kayvan Sylvan
a23c698947 feat: add image generation compatibility warnings for unsupported models
## CHANGES

- Add warning to stderr when using incompatible models with image generation
- Add GPT-5, GPT-5-nano, and GPT-5.2 to supported image generation models
- Create `checkImageGenerationCompatibility` function in OpenAI plugin
- Add comprehensive tests for image generation compatibility warnings
- Add integration test scenarios for CLI image generation workflows
- Suggest gpt-4o as alternative in incompatibility warning messages
2026-01-20 11:55:18 -08:00
Kayvan Sylvan
1e693cd5e8 Merge pull request #1948 from cleong14/pattern/create_bd_issue
feat(patterns): add create_bd_issue pattern
2026-01-20 11:27:32 -08:00
Kayvan Sylvan
4fd1584518 chore: incoming 1948 changelog entry 2026-01-20 11:25:07 -08:00
Kayvan Sylvan
794a71a82b Merge pull request #1947 from cleong14/pattern/extract_bd_ideas
feat(patterns): add extract_bd_ideas pattern
2026-01-20 11:20:52 -08:00
Kayvan Sylvan
1e4ed78bcf chore: incoming 1947 changelog entry 2026-01-20 11:20:13 -08:00
Chaz
360682eb6f feat(patterns): add create_bd_issue pattern
Transforms natural language issue descriptions into optimal bd (Beads)
issue tracker commands.

Features:
- Comprehensive bd create flag reference
- Intelligent type detection (bug, feature, task, epic, chore)
- Priority assessment (P0-P4) based on urgency signals
- Smart label selection (1-4 relevant labels)
- Outputs clean, ready-to-execute commands

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-20 06:38:42 -10:00
Chaz
095dcd8434 feat(patterns): add extract_bd_ideas pattern
Extracts actionable ideas from content and transforms them into
well-structured bd (Beads) issue tracker commands.

Features:
- Identifies tasks, problems, ideas, improvements, bugs, and features
- Evaluates actionability and appropriate scoping
- Assigns priorities (P0-P4) and relevant labels
- Outputs ready-to-execute bd create commands

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-20 06:38:14 -10:00
github-actions[bot]
fb407ccfed chore(release): Update version to v1.4.384 v1.4.384 2026-01-19 16:22:15 +00:00
Kayvan Sylvan
c9d4c19ef8 Merge pull request #1944 from ksylvan/1033_infermatic_provider
Add Infermatic AI Provider Support
2026-01-19 08:19:57 -08:00
Kayvan Sylvan
f4e7489d42 chore: incoming 1944 changelog entry 2026-01-19 08:16:05 -08:00
Kayvan Sylvan
7012acd12a fix: replace go-git status API with native git CLI for worktree compatibility
- Replace go-git status API with native `git status --porcelain` command
- Fix worktree detection issues caused by go-git library bugs
- Simplify `IsWorkingDirectoryClean` to use CLI output parsing
- Simplify `GetStatusDetails` to return raw porcelain output
- Use native `git rev-parse HEAD` to get commit hash after commit
- Remove unused `os` and `filepath` imports from walker.go
- Remove complex worktree file existence checking logic
2026-01-19 08:15:22 -08:00
Kayvan Sylvan
387610bcf8 Add Infermatic provider test case
Adds test coverage for the Infermatic AI provider in
TestCreateClient to verify the provider exists and
creates a valid client.

Part of #1033: Add Infermatic AI provider support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 06:38:38 -08:00
Kayvan Sylvan
9e1ee4d48e WIP: Phase 1 - Add Infermatic provider to ProviderMap
Issue: #1033
Phase: 1 of 2
Status: Pending verification

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 06:25:31 -08:00
github-actions[bot]
8706fbba3b chore(release): Update version to v1.4.383 v1.4.383 2026-01-18 18:21:20 +00:00
Kayvan Sylvan
b169576cd8 Merge pull request #1943 from ksylvan/fabric-ollama-server-ignores-context-window
fix: Ollama server now respects the default context window
2026-01-18 10:18:39 -08:00
Kayvan Sylvan
da34f5823a chore: refactor parseOllamaNumCtx for cleaner errors and type fixes
### CHANGES
- Remove value from fractional part error message
- Update overflow check to use float64 for consistency
- Ensure error messages omit unnecessary details for clarity
2026-01-18 10:12:18 -08:00
Kayvan Sylvan
14358a1c1b fix: Edit comments per review comments 2026-01-18 09:59:35 -08:00
Kayvan Sylvan
ce74e881be fix: add validation for NaN, Inf, and negative values in parseOllamaNumCtx
## CHANGES

- Add NaN and Infinity validation for float64 values
- Add NaN and Infinity validation for float32 values
- Add negative value check for int64 type
- Add negative value check for json.Number type
- Add comprehensive test cases for special float values
- Add test cases for negative int64 and json.Number inputs
- Update line reference comments for validation checks
2026-01-18 07:42:10 -08:00
Kayvan Sylvan
a4399000cf chore: incoming 1943 changelog entry 2026-01-18 01:46:28 -08:00
Kayvan Sylvan
6f804d7e46 fix: changes based on PR review 2026-01-18 01:46:09 -08:00
Kayvan Sylvan
8c015b09a1 test: add comprehensive tests for parseOllamaNumCtx and simplify error handling
- Add comprehensive unit tests for `parseOllamaNumCtx` function
- Remove redundant negative value checks in float parsing
- Simplify error messages to avoid exposing internal type info
- Streamline error response in `ollamaChat` handler
- Add helper functions for string containment in tests
- Cover edge cases including overflow, invalid types, and boundaries
2026-01-18 01:34:03 -08:00
Kayvan Sylvan
03108cc69d format fix 2026-01-18 01:02:46 -08:00
Kayvan Sylvan
556e098fc1 fix: Ollama server now respects the default context window
This commit fixes the Ollama server /api/chat endpoint which was ignoring
the client-provided num_ctx parameter and global DEFAULT_MODEL_CONTEXT_LENGTH,
always using a hardcoded value of 2048 tokens.

- Add parseOllamaNumCtx() function in ollama.go with type-safe extraction
  supporting 6 numeric types (float64, float32, int, int64, json.Number, string)
- Extract num_ctx from client request options in ollamaChat()
- Add ModelContextLength field to ChatRequest struct in chat.go
- Replace hardcoded 2048 with request.ModelContextLength in GetChatter() call

- Platform-aware integer overflow protection for 32-bit systems
- DoS protection via 1,000,000 token maximum limit
- Long string truncation in error messages (50 char limit)
- Sanitized error messages (no internal stdlib details exposed)

- Missing/null num_ctx returns (0, nil) to trigger existing default fallback
- Zero API contract changes
- Invalid values return 400 Bad Request with clear error messages

- All existing tests pass
- Compilation successful with no errors or warnings

Fixes #1942
2026-01-18 00:47:37 -08:00
github-actions[bot]
9a4ef0e8f3 chore(release): Update version to v1.4.382 v1.4.382 2026-01-17 17:34:41 +00:00
Kayvan Sylvan
2eafa750b2 Merge pull request #1941 from ksylvan/kayvan/fix-suggest-pattern
Add `greybeard_secure_prompt_engineer` to metadata, also remove duplicate json data file.
2026-01-17 09:32:21 -08:00
Kayvan Sylvan
935c0cab48 chore: incoming 1941 changelog entry 2026-01-17 09:29:46 -08:00
Kayvan Sylvan
1cf346ee31 feat: add greybeard_secure_prompt_engineer pattern for secure prompts
- Add greybeard_secure_prompt_engineer pattern to create secure system prompts
- Update pattern explanations and renumber existing entries
- Refactor build process to use npm hooks for copying JSON files
- Remove manual web static file copying from extract script
- Update .gitignore to exclude generated data and tmp directories
- Modify suggest_pattern categories to include new security pattern
- Delete redundant web static data file, rely on build hooks
2026-01-17 09:16:46 -08:00
github-actions[bot]
8c9c3135ab chore(release): Update version to v1.4.381 v1.4.381 2026-01-17 14:50:18 +00:00
Kayvan Sylvan
42392b0717 Merge pull request #1940 from ksylvan/kayvan/fix-ollama-serve-flow
Rewrite Ollama chat handler to support proper streaming responses
2026-01-17 06:47:56 -08:00
Kayvan Sylvan
2cb2a76200 feat: add support for pattern variables in Ollama API requests
## CHANGES

- Add `Variables` field to `OllamaRequestBody` struct for direct variable passing
- Change `Options` field from empty struct to flexible `map[string]any` type
- Extract variables from top-level `Variables` field or nested `Options.variables`
- Support parsing variables as JSON string or map format
- Pass extracted variables to `PromptRequest` for single message chats
- Pass extracted variables to `PromptRequest` for multi-message chats
- Add `omitempty` JSON tags to optional fields
2026-01-17 06:35:41 -08:00
Kayvan Sylvan
0f466a32bc chore: incoming 1940 changelog entry 2026-01-17 05:35:54 -08:00
Kayvan Sylvan
c7c9d73c01 fix: return string error payloads and fail non-stream empty upstream
## CHANGES
- Serialize JSON error field as `err.Error()` string
- Treat non-stream upstream empty content as 502 error
- Keep streaming mode tolerant when upstream returns no content
2026-01-17 05:34:38 -08:00
Kayvan Sylvan
61e8871396 fix: set NDJSON header only after successful upstream response
## CHANGES
- Move NDJSON `Content-Type` header after status validation
- Avoid setting stream headers on upstream error responses
- Log warning when upstream returns no streamed content
- Keep duration timing consistent across response paths
- Preserve existing streaming and non-streaming response behavior
2026-01-17 05:03:03 -08:00
Kayvan Sylvan
04fef11e17 fix: harden Ollama streaming flush and align metric counters with int64
## CHANGES
- Use int64 for prompt and eval count fields
- Skip sending secondary error message on stream write failure
- Allow non-http schemes and validate host only for address
- Flush response only when writer implements http.Flusher
2026-01-17 04:55:49 -08:00
Kayvan Sylvan
c50b9a61de fix: propagate request context and close Ollama stream on errors
## CHANGES
- Use Gin request context for outbound HTTP calls
- Send final stream chunk when response write fails
- Capture timing duration once for consistent metrics
- Build final Ollama response via shared helper function
- Validate Fabric base URL scheme is http/https only
- Add clarifying documentation comments for URL and writers
2026-01-17 04:21:41 -08:00
Kayvan Sylvan
665267842f fix: align Ollama duration fields to int64 nanosecond precision
## CHANGES
- Use int64 for `load_duration` JSON field values
- Use int64 for `prompt_eval_duration` JSON field values
- Remove lossy int casts when assigning nanosecond durations
- Keep duration payloads consistent with `total_duration` precision
- Prevent potential overflow on long-running request timing
2026-01-17 04:01:26 -08:00