Commit graph

638 commits

Author SHA1 Message Date
Snider
084807975a Merge branch 'feat/release-and-installers' into new 2026-02-08 21:59:18 +00:00
Snider
fd02adac50 Merge branch 'feat/release-archives' into new 2026-02-08 21:58:59 +00:00
Snider
af0a31ddd3 Merge branch 'feature/log-batch' into new 2026-02-08 21:58:52 +00:00
Snider
6e74356481 Merge branch 'feature/mcp-batch' into new 2026-02-08 21:58:46 +00:00
Snider
ebf165bd51 Merge branch 'feature/help-batch' into new 2026-02-08 21:58:39 +00:00
Snider
afeadf46de Merge branch 'feature/errors-batch' into new 2026-02-08 21:58:32 +00:00
Snider
b5680bc9fe Merge branch 'feature/issue-139-help-search' into new 2026-02-08 21:58:01 +00:00
Snider
5c6d166842 Merge branch 'feature/issue-90-process-logger' into new 2026-02-08 21:57:14 +00:00
Snider
3d9048e888 Merge branch 'feature/issue-87-no-color-support' into new 2026-02-08 21:56:44 +00:00
Snider
550bd4d6c1 Merge branch 'feature/issue-84-core-thread-safety' into new 2026-02-08 21:56:41 +00:00
Snider
af8e6a657b Merge branch 'feature/issue-81-apply-confirmation' into new 2026-02-08 21:55:37 +00:00
Snider
fc9a906c9b Merge branch 'feature/issue-78-nil-context' into new 2026-02-08 21:55:32 +00:00
Snider
3684c936f9 Merge branch 'fix/data-race-76' into new 2026-02-08 21:55:28 +00:00
Snider
d3550d2658 fix: resolve API signature mismatches after IO migration merge
Reconcile callers with actual function signatures after merging IO
migration branches. Some functions gained io.Medium params (repos.*),
others kept their original signatures (release.*, cache.*, container.*).

- Add io.Local to repos.LoadRegistry/FindRegistry/ScanDirectory callers
- Remove extra io.Local from release.ConfigExists/LoadConfig/WriteConfig callers
- Fix cache.New call (remove nil Medium arg)
- Add missing IsCPPProject to build discovery
- Add missing fields to mcp.Service struct (subsystems, logger, etc.)
- Add DefaultTCPAddr constant to mcp transport
- Fix node.go interface check (coreio.Medium, not coreio.Node)
- Fix container.linuxkit LoadState/EnsureLogsDir arg counts
- Fix vm templates to use package-level functions
- Remove unused Medium field from DaemonOptions

Co-Authored-By: Virgil <virgil@lethean.io>
2026-02-08 21:55:10 +00:00
Snider
e0b18aa6a2 Merge branch 'feature/cli-batch' into new
# Conflicts:
#	internal/cmd/dev/cmd_file_sync.go
#	internal/cmd/docs/cmd_sync.go
#	internal/cmd/sdk/generators/go.go
#	internal/cmd/setup/cmd_registry.go
#	pkg/cli/daemon.go
#	pkg/io/local/client.go
#	pkg/io/local/client_test.go
#	pkg/mcp/transport_tcp.go
2026-02-08 21:29:47 +00:00
Snider
59a986ea41 Merge branch 'feature/io-batch' into new
# Conflicts:
#	go.mod
#	go.sum
#	internal/cmd/dev/cmd_apply.go
#	internal/cmd/dev/cmd_file_sync.go
#	internal/cmd/docs/cmd_scan.go
#	internal/cmd/docs/cmd_sync.go
#	internal/cmd/help/cmd.go
#	internal/cmd/sdk/generators/go.go
#	internal/cmd/setup/cmd_registry.go
#	internal/variants/full.go
#	pkg/io/io.go
#	pkg/io/local/client.go
#	pkg/io/local/client_test.go
#	pkg/mcp/mcp.go
#	pkg/mcp/mcp_test.go
#	pkg/mcp/transport_tcp.go
2026-02-08 21:29:39 +00:00
Snider
83b5e10742 Merge branch 'chore/io-migrate-repos-medium-11165034141497363118' into new
# Conflicts:
#	internal/cmd/setup/cmd_github.go
#	pkg/repos/registry.go
2026-02-08 21:29:24 +00:00
Snider
fd4cbdee8f Merge branch 'chore/io-migrate-build-8873543635510272463' into new
# Conflicts:
#	pkg/build/checksum.go
#	pkg/build/config.go
#	pkg/build/discovery.go
#	pkg/build/discovery_test.go
#	pkg/io/io.go
#	pkg/io/local/client.go
#	pkg/release/release.go
2026-02-08 21:29:14 +00:00
Snider
4f21dbb163 Merge branch 'fix/io-migration-devops' into new 2026-02-08 21:28:55 +00:00
Snider
1ac04479f6 Merge branch 'fix/io-migration-repos' into new
# Conflicts:
#	pkg/repos/registry.go
2026-02-08 21:28:50 +00:00
Snider
948dd16761 Merge branch 'fix/io-migration-release' into new
# Conflicts:
#	pkg/release/config.go
#	pkg/release/release.go
2026-02-08 21:28:43 +00:00
Snider
b8d198f80b Merge branch 'fix/io-migration-container' into new
# Conflicts:
#	pkg/container/state.go
#	pkg/container/templates.go
2026-02-08 21:28:36 +00:00
Snider
41a5496b44 Merge branch 'fix/io-migration-cache' into new
# Conflicts:
#	pkg/cache/cache.go
2026-02-08 21:28:25 +00:00
Snider
650fd4d8c8 Merge branch 'fix/io-migration-build' into new
# Conflicts:
#	pkg/build/checksum.go
#	pkg/build/config.go
#	pkg/build/discovery.go
2026-02-08 21:28:17 +00:00
Snider
8b57baa419 Merge branch 'fix/io-migration-agentic' into new
# Conflicts:
#	pkg/agentic/config.go
#	pkg/agentic/context.go
2026-02-08 21:28:09 +00:00
Snider
7f07d1a807 Merge branch 'fix/io-medium-ext' into new
# Conflicts:
#	pkg/io/io.go
2026-02-08 21:27:53 +00:00
Snider
37558bc491 Merge branch 'feat/frankenphp-native-app' into new
# Conflicts:
#	pkg/crypt/chachapoly/chachapoly.go
#	pkg/crypt/chachapoly/chachapoly_test.go
#	pkg/crypt/lthn/lthn.go
#	pkg/crypt/lthn/lthn_test.go
#	pkg/crypt/rsa/rsa.go
#	pkg/crypt/rsa/rsa_test.go
#	pkg/io/node/node.go
#	pkg/io/sigil/sigil.go
#	pkg/io/sigil/sigils.go
2026-02-08 21:18:41 +00:00
Claude
3221b283fc
feat: add crypto, session, sigil, and node packages
Add new packages for cryptographic operations, session management,
and I/O handling:
- pkg/crypt/chachapoly: ChaCha20-Poly1305 AEAD encryption
- pkg/crypt/lthn: Lethean-specific key derivation and encryption
- pkg/crypt/rsa: RSA key generation, encryption, and signing
- pkg/io/node: CryptoNote node I/O and protocol handling
- pkg/io/sigil: Cryptographic sigil generation and verification
- pkg/session: Session parsing, HTML rendering, search, and video
- internal/cmd/forge: Forgejo auth status command
- internal/cmd/session: Session management CLI command

Also gitignore build artifacts (bugseti binary, i18n-validate).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:52:28 +00:00
Claude
8a102e4476
feat(i18n): complete en_GB translations and add completeness test
Fill all 568 missing translation keys in en_GB.json (765→1357 lines):
- 97 --help description keys (collect, ci, docs, dev, php, pkg, sdk, vm)
- 471 runtime keys (labels, errors, hints, progress, status messages)
- Add common.flag.follow, common.flag.tag, common.prompt.abort

Add completeness_test.go that scans all T() calls in source code and
verifies every cmd.*/common.* key exists using ModeStrict (panics on
missing). Catches translation gaps at test time instead of showing raw
keys in the CLI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 20:50:55 +00:00
Charon
d2a225e936 Merge pull request 'fix(ci): move root pipeline to .woodpecker/ directory' (#17) from fix/ci-pipeline-discovery into main 2026-02-08 18:52:50 +00:00
Claude
00850f88e4
fix(ci): move root pipeline to .woodpecker/ directory
WP v3 ignores root .woodpecker.yml when .woodpecker/ directory exists.
Move it into the directory so both core and bugseti pipelines are discovered.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:50:56 +00:00
Charon
60a0410c0b Merge pull request 'feat: Go vanity import + BugSETI CI pipeline' (#16) from feat/vanity-import-bugseti-ci into main 2026-02-08 18:40:43 +00:00
Claude
4b179b2c94
feat: add Go vanity import server and BugSETI CI pipeline
Add dappco.re vanity import handler (cmd/vanity-import/) that serves
go-import meta tags, enabling `go get dappco.re/core` to resolve to
forge.lthn.ai/host-uk/core. Deployed as a Docker container behind
Traefik on snider-linux.

Add Woodpecker CI pipeline (.woodpecker/bugseti.yml) for BugSETI
cross-platform builds. Phase 1: Linux amd64 with CGO, triggered on
bugseti-v* tags and main branch pushes to cmd/bugseti/.

Closes #3, closes #9

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 18:30:29 +00:00
Snider
40c4c5ef68 updates 2026-02-08 15:17:18 +00:00
Snider
f602587522 updates 2026-02-08 15:17:12 +00:00
Claude
d2916db640 feat: add Woodpecker CI pipeline and workspace improvements (#1)
Co-authored-by: Claude <developers@lethean.io>
Co-committed-by: Claude <developers@lethean.io>
2026-02-08 13:25:06 +00:00
Snider
b7a6e235e9 feat(core-app): add auto-migration and session/cache tables
AppServiceProvider runs migrate --force on first request.
Sessions and cache tables created automatically in SQLite.
Removed synthetic HTTP migration approach in favour of pure
PHP service provider — cleaner, works with Octane workers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 22:56:44 +00:00
Snider
c2715af316 feat(core-app): FrankenPHP + Wails v3 native desktop app
Single 53MB binary embedding PHP 8.4 ZTS runtime, Laravel 12,
Livewire 4, and Octane worker mode inside a Wails v3 native
desktop window.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 22:50:18 +00:00
Vi
091b6a73b9
feat(auth): add PGP challenge-response auth with air-gapped support (#348) (#356)
Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 20:45:55 +00:00
Vi
4e2327b0c9
feat(io): add S3 and SQLite Medium backends (#347) (#355)
Implement two new storage backends for the io.Medium interface:

- pkg/io/s3: S3-backed Medium using AWS SDK v2 with interface-based
  mocking for tests. Supports prefix-based namespacing via WithPrefix
  option. All 18 Medium methods implemented with proper S3 semantics
  (e.g. EnsureDir is no-op, IsDir checks prefix existence).

- pkg/io/sqlite: SQLite-backed Medium using modernc.org/sqlite (pure Go,
  no CGo). Uses a single table schema with path, content, mode, is_dir,
  and mtime columns. Supports custom table names via WithTable option.
  All tests use :memory: databases.

Both packages include comprehensive test suites following the _Good/_Bad/_Ugly
naming convention with 87 tests total (36 S3, 51 SQLite).

Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 20:45:45 +00:00
Vi
0413c359b3
feat(crypt): add LTHN, ChaCha20, RSA, PGP primitives (port from Enchantrix) (#346) (#354)
Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 20:30:28 +00:00
Vi
7718ad5e30
feat(io): add Sigil composable transform framework (port from Enchantrix) (#345) (#353)
Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 20:30:26 +00:00
Vi
1838ea18ab
feat(io): add Node in-memory filesystem (port from Borg DataNode) (#343) (#352)
Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 20:30:23 +00:00
Vi
c83f9a25a7
chore(io): Migrate internal/cmd/php to Medium abstraction (#338)
Completes issue #112 by migrating all direct os.* filesystem calls in
internal/cmd/php to use the io.Medium abstraction via getMedium().

Changes:
- packages.go: os.ReadFile/WriteFile → getMedium().Read/Write
- container.go: os.WriteFile/Remove/MkdirAll/Stat → getMedium().Write/Delete/EnsureDir/IsFile
- services.go: os.MkdirAll/OpenFile/Open → getMedium().EnsureDir/Create/Open
- dockerfile.go: os.ReadFile/Stat → getMedium().Read/IsFile
- ssl.go: os.MkdirAll/Stat → getMedium().EnsureDir/IsFile
- cmd_ci.go: os.WriteFile → getMedium().Write
- cmd.go: os.Stat → getMedium().IsDir
- coolify.go: os.Open → getMedium().Read
- testing.go: os.Stat → getMedium().IsFile
- cmd_qa_runner.go: os.Stat → getMedium().IsFile
- detect.go: os.Stat/ReadFile → getMedium().Exists/Read
- quality.go: os.Stat/ReadFile → getMedium().Exists/IsFile/Read

All production files now use the consistent getMedium() pattern for
testability. Test files retain direct os.* calls as they manage test
fixtures directly.

Closes #112

Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 18:14:59 +00:00
Vi
548e4589f7
feat(daemon): add MCP daemon mode with multi-transport support (#334)
Implements the daemon mode feature for running core as a background service
with MCP server capabilities.

New features:
- `core daemon` command with configurable MCP transport
- Support for stdio, TCP, and Unix socket transports
- Environment variable configuration (CORE_MCP_TRANSPORT, CORE_MCP_ADDR)
- CLI flags for runtime configuration
- Integration with existing daemon infrastructure (PID file, health checks)

Files added:
- internal/cmd/daemon/cmd.go - daemon command implementation
- pkg/mcp/transport_stdio.go - stdio transport wrapper
- pkg/mcp/transport_unix.go - Unix domain socket transport

Files modified:
- pkg/mcp/mcp.go - added log import
- pkg/mcp/transport_tcp.go - added log import
- pkg/mcp/transport_tcp_test.go - fixed port binding test

Usage:
  core daemon                           # TCP on 127.0.0.1:9100
  core daemon --mcp-transport=socket --mcp-addr=/tmp/core.sock
  CORE_MCP_TRANSPORT=stdio core daemon  # for Claude Code integration

Fixes #119

Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Snider <snider@host.uk.com>
2026-02-05 17:42:35 +00:00
dependabot[bot]
0a203bb486
build(deps): bump tar (#337)
Bumps the npm_and_yarn group with 1 update in the /cmd/bugseti/frontend directory: [tar](https://github.com/isaacs/node-tar).


Updates `tar` from 6.2.1 to 7.5.7
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v6.2.1...v7.5.7)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.7
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Snider <snider@host.uk.com>
2026-02-05 17:42:25 +00:00
Vi
3b3e2988fd
feat(linux): Ubuntu setup script and systemd improvements (#335)
* feat(linux): add Ubuntu setup script and improve systemd services

Add comprehensive Ubuntu setup script that transforms a fresh Ubuntu
installation into a native tool building machine with:

- System dependencies (WebKitGTK, GTK3, libappindicator)
- Development tools (Go 1.25.6, Node.js 22.x, gh CLI)
- Claude Code CLI installation
- Core CLI and core-ide from GitHub releases
- XDG autostart configuration
- SSH key generation and GitHub authentication

Improve systemd services:
- Add security hardening to system service (NoNewPrivileges, PrivateTmp,
  ProtectSystem)
- Add user-level service for non-root deployment
- Include user service in nfpm package

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: apply gofmt formatting to io.go and transport_tcp.go

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Snider <snider@host.uk.com>
2026-02-05 17:40:43 +00:00
Vi
27f8632867
feat: BugSETI app, WebSocket hub, browser automation, and MCP tools (#336)
* feat: add security logging and fix framework regressions

This commit implements comprehensive security event logging and resolves critical regressions in the core framework.

Security Logging:
- Enhanced `pkg/log` with a `Security` level and helper.
- Added `log.Username()` to consistently identify the executing user.
- Instrumented GitHub CLI auth, Agentic configuration, filesystem sandbox, MCP handlers, and MCP TCP transport with security logs.
- Added `SecurityStyle` to the CLI for consistent visual representation of security events.

UniFi Security (CodeQL):
- Refactored `pkg/unifi` to remove hardcoded `InsecureSkipVerify`, resolving a high-severity alert.
- Added a `--verify-tls` flag and configuration option to control TLS verification.
- Updated command handlers to support the new verification parameter.

Framework Fixes:
- Restored original signatures for `MustServiceFor`, `Config()`, and `Display()` in `pkg/framework/core`, which had been corrupted during a merge.
- Fixed `pkg/framework/framework.go` and `pkg/framework/core/runtime_pkg.go` to match the restored signatures.
- These fixes resolve project-wide compilation errors caused by the signature mismatches.

I encountered significant blockers due to a corrupted state of the `dev` branch after a merge, which introduced breaking changes in the core framework's DI system. I had to manually reconcile these signatures with the expected usage across the codebase to restore build stability.

* feat(mcp): add RAG tools (query, ingest, collections)

Add vector database tools to the MCP server for RAG operations:
- rag_query: Search for relevant documentation using semantic similarity
- rag_ingest: Ingest files or directories into the vector database
- rag_collections: List available collections

Uses existing internal/cmd/rag exports (QueryDocs, IngestDirectory, IngestFile)
and pkg/rag for Qdrant client access. Default collection is "hostuk-docs"
with topK=5 for queries.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(mcp): add metrics tools (record, query)

Add MCP tools for recording and querying AI/security metrics events.
The metrics_record tool writes events to daily JSONL files, and the
metrics_query tool provides aggregated statistics by type, repo, and agent.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: add 'core mcp serve' command

Add CLI command to start the MCP server for AI tool integration.

- Create internal/cmd/mcpcmd package with serve subcommand
- Support --workspace flag for directory restriction
- Handle SIGINT/SIGTERM for clean shutdown
- Register in full.go build variant

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(ws): add WebSocket hub package for real-time streaming

Add pkg/ws package implementing a hub pattern for WebSocket connections:
- Hub manages client connections, broadcasts, and channel subscriptions
- Client struct represents connected WebSocket clients
- Message types: process_output, process_status, event, error, ping/pong
- Channel-based subscription system (subscribe/unsubscribe)
- SendProcessOutput and SendProcessStatus for process streaming integration
- Full test coverage including concurrency tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(mcp): add process management and WebSocket MCP tools

Add MCP tools for process management:
- process_start: Start a new external process
- process_stop: Gracefully stop a running process
- process_kill: Force kill a process
- process_list: List all managed processes
- process_output: Get captured process output
- process_input: Send input to process stdin

Add MCP tools for WebSocket:
- ws_start: Start WebSocket server for real-time streaming
- ws_info: Get hub statistics (clients, channels)

Update Service struct with optional process.Service and ws.Hub fields,
new WithProcessService and WithWSHub options, getter methods, and
Shutdown method for cleanup.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(webview): add browser automation package via Chrome DevTools Protocol

Add pkg/webview package for browser automation:
- webview.go: Main interface with Connect, Navigate, Click, Type, QuerySelector, Screenshot, Evaluate
- cdp.go: Chrome DevTools Protocol WebSocket client implementation
- actions.go: DOM action types (Click, Type, Hover, Scroll, etc.) and ActionSequence builder
- console.go: Console message capture and filtering with ConsoleWatcher and ExceptionWatcher
- angular.go: Angular-specific helpers for router navigation, component access, and Zone.js stability

Add MCP tools for webview:
- webview_connect/disconnect: Connection management
- webview_navigate: Page navigation
- webview_click/type/query/wait: DOM interaction
- webview_console: Console output capture
- webview_eval: JavaScript execution
- webview_screenshot: Screenshot capture

Add documentation:
- docs/mcp/angular-testing.md: Guide for Angular application testing

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* docs: document new packages and BugSETI application

- Update CLAUDE.md with documentation for:
  - pkg/ws (WebSocket hub for real-time streaming)
  - pkg/webview (Browser automation via CDP)
  - pkg/mcp (MCP server tools: process, ws, webview)
  - BugSETI application overview
- Add comprehensive README for BugSETI with:
  - Installation and configuration guide
  - Usage workflow documentation
  - Architecture overview
  - Contributing guidelines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(bugseti): add BugSETI system tray app with auto-update

BugSETI - Distributed Bug Fixing like SETI@home but for code

Features:
- System tray app with Wails v3
- GitHub issue fetching with label filters
- Issue queue with priority management
- AI context seeding via seed-agent-developer skill
- Automated PR submission flow
- Stats tracking and leaderboard
- Cross-platform notifications
- Self-updating with stable/beta/nightly channels

Includes:
- cmd/bugseti: Main application with Angular frontend
- internal/bugseti: Core services (fetcher, queue, seeder, submit, config, stats, notify)
- internal/bugseti/updater: Auto-update system (checker, downloader, installer)
- .github/workflows/bugseti-release.yml: CI/CD for all platforms

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: resolve import cycle and code duplication

- Remove pkg/log import from pkg/io/local to break import cycle
  (pkg/log/rotation.go imports pkg/io, creating circular dependency)
- Use stderr logging for security events in sandbox escape detection
- Remove unused sync/atomic import from core.go
- Fix duplicate LogSecurity function declarations in cli/log.go
- Update workspace/service.go Crypt() call to match interface

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: update tests for new function signatures and format code

- Update core_test.go: Config(), Display() now panic instead of returning error
- Update runtime_pkg_test.go: sr.Config() now panics instead of returning error
- Update MustServiceFor tests to use assert.Panics
- Format BugSETI, MCP tools, and webview packages with gofmt

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Snider <631881+Snider@users.noreply.github.com>
Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 17:22:05 +00:00
Vi
d2ae87b108
fix: restore packages accidentally deleted during PR #313 rebase (#333)
During conflict resolution for PR #313 (streaming API), the agent
incorrectly assumed that modify/delete conflicts meant the PR intended
to remove these packages. This was wrong - PR #313 was only about
adding streaming API to pkg/io.

Restored packages:
- pkg/workspace - workspace management service
- pkg/unifi - UniFi controller client
- pkg/gitea - Gitea API client
- pkg/crypt/openpgp - OpenPGP encryption service
- internal/cmd/gitea - Gitea CLI commands
- internal/cmd/unifi - UniFi CLI commands

Also restored:
- Various test files (bench_test.go, integration_test.go, etc.)
- pkg/framework/core/interfaces.go (Workspace/Crypt interfaces)
- pkg/log/errors.go (error helpers)
- Documentation (faq.md, user-guide.md)

This allows PR #297 (MCP daemon mode) to proceed as it depends on
pkg/workspace.

Co-authored-by: Claude <developers@lethean.io>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 11:16:23 +00:00
Snider
bfa5353205
Add streaming API to pkg/io and optimize agentic context gathering (#313)
* feat(io): add streaming API to Medium interface and optimize agentic context

- Added ReadStream and WriteStream to io.Medium interface.
- Implemented streaming methods in local and mock mediums.
- Updated pkg/agentic/context.go to use streaming I/O with LimitReader.
- Added 5000-byte truncation limit for all AI context file reads to reduce memory usage.
- Documented when to use streaming vs full-file APIs in io.Medium.

* feat(io): optimize streaming API and fix PR feedback

- Fixed resource leak in agentic context by using defer for closing file streams.
- Improved truncation logic in agentic context to handle multibyte characters correctly by checking byte length before string conversion.
- Added comprehensive documentation to ReadStream and WriteStream in local medium.
- Added unit tests for ReadStream and WriteStream in local medium.
- Applied formatting and fixed auto-merge CI configuration.

* feat(io): add streaming API and fix CI failures (syntax fix)

- Introduced ReadStream and WriteStream to io.Medium interface.
- Implemented streaming methods in local and mock mediums.
- Optimized agentic context with streaming reads and truncation logic.
- Fixed syntax error in local client tests by overwriting the file.
- Fixed auto-merge CI by adding checkout and repository context.
- Applied formatting fixes.
2026-02-05 11:00:49 +00:00