devloop 0.6.0__tar.gz → 0.6.2__tar.gz
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.
- {devloop-0.6.0 → devloop-0.6.2}/PKG-INFO +10 -10
- {devloop-0.6.0 → devloop-0.6.2}/README.md +9 -9
- {devloop-0.6.0 → devloop-0.6.2}/pyproject.toml +1 -1
- devloop-0.6.2/src/devloop/cli/templates/git_hooks/post-commit +99 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/tool_runner.py +2 -2
- {devloop-0.6.0 → devloop-0.6.2}/LICENSE +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/agent_health_monitor.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/ci_monitor.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/code_rabbit.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/doc_lifecycle.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/echo.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/file_logger.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/formatter.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/git_commit_assistant.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/linter.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/performance_profiler.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/sandbox_helper.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/security_scanner.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/snyk.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/test_runner.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/agents/type_checker.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/agent_rules.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/agent_publish.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/audit.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/custom_agents.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/feedback.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/marketplace.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/marketplace_server.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/metrics.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/release.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/summary.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/telemetry.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/commands/tools.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/main.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/main_v1.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/pre_push_check.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/prerequisites.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/pyodide_installer.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/.devloop/tools-registry.json +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/claude_commands/README.md +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/claude_commands/agent-summary.md +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/claude_commands/devloop-findings.md +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/claude_commands/devloop-status.md +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/claude_commands/extract-findings.md +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/claude_commands/verify-work.md +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/devloop_agents_template.md +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/git_hooks/pre-commit +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/git_hooks/pre-commit-checks +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/git_hooks/pre-push +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/supervisor/devloop.conf +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/systemd/devloop.service +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/collectors/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/collectors/base.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/collectors/filesystem.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/collectors/git.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/collectors/manager.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/collectors/process.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/collectors/system.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/action_logger.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/agent.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/agent_audit_logger.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/agent_template.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/amp_integration.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/amp_thread_mapper.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/auto_fix.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/backup_manager.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/claude_adapter.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/config.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/config_schema.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/context.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/context_store.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/contextual_feedback.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/custom_agent.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/daemon_health.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/debug_trace.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/error_handler.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/error_notifier.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/event.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/event_replayer.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/event_store.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/feedback.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/file_lock_manager.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/learning.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/manager.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/operational_health.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/pattern_analyzer.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/pattern_detector.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/performance.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/proactive_feedback.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/summary_formatter.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/summary_generator.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/telemetry.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/tool_dependencies.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/tool_registry.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/core/transactional_io.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/integrations/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/integrations/beads_integration.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/lsp/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/lsp/__main__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/lsp/mapper.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/lsp/server.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/api.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/cache.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/http_server.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/installer.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/metadata.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/publisher.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/registry.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/registry_client.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/reviews.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/search.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/marketplace/signing.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/metrics/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/metrics/dora.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/metrics/value_metrics.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/artifactory_registry.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/ci_provider.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/circleci_provider.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/github_actions_provider.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/gitlab_ci_provider.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/jenkins_provider.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/provider_manager.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/pypi_registry.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/providers/registry_provider.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/release/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/release/release_manager.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/audit_logger.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/bubblewrap_sandbox.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/cgroups_helper.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/factory.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/no_sandbox.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/package.json +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/path_validator.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/pyodide_runner.js +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/pyodide_sandbox.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/sandbox.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/security/token_manager.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/telemetry/__init__.py +0 -0
- {devloop-0.6.0 → devloop-0.6.2}/src/devloop/telemetry/telemetry_manager.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devloop
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: Intelligent background agents for development workflow automation
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -536,7 +536,7 @@ config = (
|
|
|
536
536
|
)
|
|
537
537
|
```
|
|
538
538
|
|
|
539
|
-
[View agent
|
|
539
|
+
[View agent architecture and categories →](./ARCHITECTURE.md)
|
|
540
540
|
|
|
541
541
|
---
|
|
542
542
|
|
|
@@ -1331,7 +1331,7 @@ poetry run mypy src
|
|
|
1331
1331
|
### Marketplace
|
|
1332
1332
|
- **[Marketplace Guide](./docs/MARKETPLACE_GUIDE.md)** — Discovering, installing, and publishing agents
|
|
1333
1333
|
- **[Marketplace API Guide](./docs/MARKETPLACE_API.md)** — Agent registry API reference
|
|
1334
|
-
- **[Agent Reference](./
|
|
1334
|
+
- **[Agent Reference](./ARCHITECTURE.md)** — Agent categories and architecture
|
|
1335
1335
|
|
|
1336
1336
|
### Advanced
|
|
1337
1337
|
- **[Development Guide](./docs/development.md)** — Contributing guide
|
|
@@ -1344,14 +1344,14 @@ poetry run mypy src
|
|
|
1344
1344
|
|
|
1345
1345
|
DevLoop follows these core principles:
|
|
1346
1346
|
|
|
1347
|
-
✅ **Non-Intrusive** — Runs in background without blocking workflow
|
|
1348
|
-
✅ **Event-Driven** — All actions triggered by observable events
|
|
1349
|
-
✅ **Configurable** — Fine-grained control over agent behavior
|
|
1350
|
-
✅ **Context-Aware** — Understands your project structure
|
|
1351
|
-
✅ **Parallel** — Multiple agents run concurrently
|
|
1352
|
-
✅ **Lightweight** — Respects system resources
|
|
1347
|
+
✅ **Non-Intrusive** — Runs in background without blocking workflow
|
|
1348
|
+
✅ **Event-Driven** — All actions triggered by observable events
|
|
1349
|
+
✅ **Configurable** — Fine-grained control over agent behavior
|
|
1350
|
+
✅ **Context-Aware** — Understands your project structure
|
|
1351
|
+
✅ **Parallel** — Multiple agents run concurrently
|
|
1352
|
+
✅ **Lightweight** — Respects system resources
|
|
1353
1353
|
|
|
1354
|
-
[Read the
|
|
1354
|
+
[Read the AI agent workflow guide →](./AGENTS.md) | [System architecture →](./ARCHITECTURE.md)
|
|
1355
1355
|
|
|
1356
1356
|
---
|
|
1357
1357
|
|
|
@@ -495,7 +495,7 @@ config = (
|
|
|
495
495
|
)
|
|
496
496
|
```
|
|
497
497
|
|
|
498
|
-
[View agent
|
|
498
|
+
[View agent architecture and categories →](./ARCHITECTURE.md)
|
|
499
499
|
|
|
500
500
|
---
|
|
501
501
|
|
|
@@ -1290,7 +1290,7 @@ poetry run mypy src
|
|
|
1290
1290
|
### Marketplace
|
|
1291
1291
|
- **[Marketplace Guide](./docs/MARKETPLACE_GUIDE.md)** — Discovering, installing, and publishing agents
|
|
1292
1292
|
- **[Marketplace API Guide](./docs/MARKETPLACE_API.md)** — Agent registry API reference
|
|
1293
|
-
- **[Agent Reference](./
|
|
1293
|
+
- **[Agent Reference](./ARCHITECTURE.md)** — Agent categories and architecture
|
|
1294
1294
|
|
|
1295
1295
|
### Advanced
|
|
1296
1296
|
- **[Development Guide](./docs/development.md)** — Contributing guide
|
|
@@ -1303,14 +1303,14 @@ poetry run mypy src
|
|
|
1303
1303
|
|
|
1304
1304
|
DevLoop follows these core principles:
|
|
1305
1305
|
|
|
1306
|
-
✅ **Non-Intrusive** — Runs in background without blocking workflow
|
|
1307
|
-
✅ **Event-Driven** — All actions triggered by observable events
|
|
1308
|
-
✅ **Configurable** — Fine-grained control over agent behavior
|
|
1309
|
-
✅ **Context-Aware** — Understands your project structure
|
|
1310
|
-
✅ **Parallel** — Multiple agents run concurrently
|
|
1311
|
-
✅ **Lightweight** — Respects system resources
|
|
1306
|
+
✅ **Non-Intrusive** — Runs in background without blocking workflow
|
|
1307
|
+
✅ **Event-Driven** — All actions triggered by observable events
|
|
1308
|
+
✅ **Configurable** — Fine-grained control over agent behavior
|
|
1309
|
+
✅ **Context-Aware** — Understands your project structure
|
|
1310
|
+
✅ **Parallel** — Multiple agents run concurrently
|
|
1311
|
+
✅ **Lightweight** — Respects system resources
|
|
1312
1312
|
|
|
1313
|
-
[Read the
|
|
1313
|
+
[Read the AI agent workflow guide →](./AGENTS.md) | [System architecture →](./ARCHITECTURE.md)
|
|
1314
1314
|
|
|
1315
1315
|
---
|
|
1316
1316
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
#
|
|
3
|
+
# Post-commit hook: Auto-close Beads issues on commit
|
|
4
|
+
#
|
|
5
|
+
# This hook automatically closes Beads issues referenced in commit messages.
|
|
6
|
+
#
|
|
7
|
+
# Supported commit message patterns:
|
|
8
|
+
# - "fixes claude-agents-abc123"
|
|
9
|
+
# - "closes claude-agents-abc123"
|
|
10
|
+
# - "resolves claude-agents-abc123"
|
|
11
|
+
# - Multiple issues: "fixes claude-agents-abc123, claude-agents-def456"
|
|
12
|
+
#
|
|
13
|
+
# The hook will:
|
|
14
|
+
# 1. Parse the commit message for issue references
|
|
15
|
+
# 2. Close each referenced issue with commit SHA and message as reason
|
|
16
|
+
# 3. Exit silently if bd is not available
|
|
17
|
+
# 4. Exit silently if no issues are referenced
|
|
18
|
+
|
|
19
|
+
set -e
|
|
20
|
+
|
|
21
|
+
# Check if bd is available
|
|
22
|
+
if ! command -v bd >/dev/null 2>&1; then
|
|
23
|
+
exit 0
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
# Check if we're in a bd workspace
|
|
27
|
+
if [ ! -d .beads ]; then
|
|
28
|
+
exit 0
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Get the commit SHA and message
|
|
32
|
+
COMMIT_SHA=$(git rev-parse HEAD)
|
|
33
|
+
COMMIT_SHA_SHORT=$(git rev-parse --short HEAD)
|
|
34
|
+
COMMIT_MSG=$(git log -1 --pretty=%B)
|
|
35
|
+
|
|
36
|
+
# Extract issue IDs from commit message
|
|
37
|
+
# Pattern: (fixes|closes|resolves) (claude-agents-[a-z0-9]+|#\d+)
|
|
38
|
+
# Examples: "fixes claude-agents-abc123" or "closes #42"
|
|
39
|
+
|
|
40
|
+
# Helper function to parse and close issues
|
|
41
|
+
parse_and_close_issues() {
|
|
42
|
+
local msg="$1"
|
|
43
|
+
local sha="$2"
|
|
44
|
+
local sha_short="$3"
|
|
45
|
+
|
|
46
|
+
# Convert message to lowercase for case-insensitive matching
|
|
47
|
+
local lower_msg=$(echo "$msg" | tr '[:upper:]' '[:lower:]')
|
|
48
|
+
|
|
49
|
+
# Extract all issue references after fixes/closes/resolves keywords
|
|
50
|
+
# This regex looks for the keywords followed by issue IDs
|
|
51
|
+
local matches=$(echo "$lower_msg" | grep -oE '(fixes|closes|resolves)[[:space:]]+(claude-agents-[a-z0-9]+|#[0-9]+)' || true)
|
|
52
|
+
|
|
53
|
+
if [ -z "$matches" ]; then
|
|
54
|
+
return
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Process each match and extract the issue ID
|
|
58
|
+
echo "$matches" | while read -r line; do
|
|
59
|
+
# Extract just the issue ID part (everything after the keyword and space)
|
|
60
|
+
local issue_id=$(echo "$line" | sed 's/^[^ ]* //')
|
|
61
|
+
|
|
62
|
+
if [ -n "$issue_id" ]; then
|
|
63
|
+
close_issue "$issue_id" "$sha" "$sha_short" "$msg"
|
|
64
|
+
fi
|
|
65
|
+
done
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Helper function to close a single issue
|
|
69
|
+
close_issue() {
|
|
70
|
+
local issue_id="$1"
|
|
71
|
+
local sha="$2"
|
|
72
|
+
local sha_short="$3"
|
|
73
|
+
local msg="$4"
|
|
74
|
+
|
|
75
|
+
# Clean up the issue ID (remove leading # if present)
|
|
76
|
+
issue_id=$(echo "$issue_id" | sed 's/^#//')
|
|
77
|
+
|
|
78
|
+
# Construct the reason string
|
|
79
|
+
local reason="Completed in commit $sha_short: $msg"
|
|
80
|
+
|
|
81
|
+
# Limit reason length to avoid overly long strings
|
|
82
|
+
if [ ${#reason} -gt 200 ]; then
|
|
83
|
+
reason="Completed in commit $sha_short"
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
# Attempt to close the issue
|
|
87
|
+
if bd close "$issue_id" --reason "$reason" >/dev/null 2>&1; then
|
|
88
|
+
echo "✓ Closed $issue_id"
|
|
89
|
+
else
|
|
90
|
+
# Issue may not exist or may already be closed - don't fail the commit
|
|
91
|
+
# Silently continue
|
|
92
|
+
:
|
|
93
|
+
fi
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# Parse and close issues from the commit message
|
|
97
|
+
parse_and_close_issues "$COMMIT_MSG" "$COMMIT_SHA" "$COMMIT_SHA_SHORT"
|
|
98
|
+
|
|
99
|
+
exit 0
|
|
@@ -3,6 +3,7 @@ Tool Runner - Execute tools from the tool registry with error handling.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
|
+
import shlex
|
|
6
7
|
import subprocess
|
|
7
8
|
from dataclasses import dataclass
|
|
8
9
|
from pathlib import Path
|
|
@@ -270,8 +271,7 @@ class ToolRunner:
|
|
|
270
271
|
|
|
271
272
|
try:
|
|
272
273
|
result = subprocess.run(
|
|
273
|
-
fix_cmd,
|
|
274
|
-
shell=True,
|
|
274
|
+
shlex.split(fix_cmd),
|
|
275
275
|
cwd=str(self.cwd),
|
|
276
276
|
capture_output=True,
|
|
277
277
|
text=True,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/claude_commands/devloop-findings.md
RENAMED
|
File without changes
|
|
File without changes
|
{devloop-0.6.0 → devloop-0.6.2}/src/devloop/cli/templates/claude_commands/extract-findings.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|