agent-pipeline 0.1.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/CLAUDE.md +134 -0
- package/README.md +209 -0
- package/dist/analytics/pipeline-analytics.d.ts +19 -0
- package/dist/analytics/pipeline-analytics.d.ts.map +1 -0
- package/dist/analytics/pipeline-analytics.js +155 -0
- package/dist/analytics/pipeline-analytics.js.map +1 -0
- package/dist/analytics/types.d.ts +31 -0
- package/dist/analytics/types.d.ts.map +1 -0
- package/dist/analytics/types.js +2 -0
- package/dist/analytics/types.js.map +1 -0
- package/dist/cli/commands/agent/info.d.ts +2 -0
- package/dist/cli/commands/agent/info.d.ts.map +1 -0
- package/dist/cli/commands/agent/info.js +62 -0
- package/dist/cli/commands/agent/info.js.map +1 -0
- package/dist/cli/commands/agent/list.d.ts +2 -0
- package/dist/cli/commands/agent/list.d.ts.map +1 -0
- package/dist/cli/commands/agent/list.js +57 -0
- package/dist/cli/commands/agent/list.js.map +1 -0
- package/dist/cli/commands/agent/pull.d.ts +5 -0
- package/dist/cli/commands/agent/pull.d.ts.map +1 -0
- package/dist/cli/commands/agent/pull.js +71 -0
- package/dist/cli/commands/agent/pull.js.map +1 -0
- package/dist/cli/commands/analytics.d.ts +6 -0
- package/dist/cli/commands/analytics.d.ts.map +1 -0
- package/dist/cli/commands/analytics.js +101 -0
- package/dist/cli/commands/analytics.js.map +1 -0
- package/dist/cli/commands/cleanup.d.ts +7 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/cleanup.js +76 -0
- package/dist/cli/commands/cleanup.js.map +1 -0
- package/dist/cli/commands/history.d.ts +7 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +173 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/init.d.ts +7 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +158 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +2 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +15 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +2 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +13 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/pipeline/clone.d.ts +2 -0
- package/dist/cli/commands/pipeline/clone.d.ts.map +1 -0
- package/dist/cli/commands/pipeline/clone.js +42 -0
- package/dist/cli/commands/pipeline/clone.js.map +1 -0
- package/dist/cli/commands/pipeline/config.d.ts +2 -0
- package/dist/cli/commands/pipeline/config.d.ts.map +1 -0
- package/dist/cli/commands/pipeline/config.js +23 -0
- package/dist/cli/commands/pipeline/config.js.map +1 -0
- package/dist/cli/commands/pipeline/create.d.ts +2 -0
- package/dist/cli/commands/pipeline/create.d.ts.map +1 -0
- package/dist/cli/commands/pipeline/create.js +86 -0
- package/dist/cli/commands/pipeline/create.js.map +1 -0
- package/dist/cli/commands/pipeline/delete.d.ts +6 -0
- package/dist/cli/commands/pipeline/delete.d.ts.map +1 -0
- package/dist/cli/commands/pipeline/delete.js +60 -0
- package/dist/cli/commands/pipeline/delete.js.map +1 -0
- package/dist/cli/commands/pipeline/edit.d.ts +2 -0
- package/dist/cli/commands/pipeline/edit.d.ts.map +1 -0
- package/dist/cli/commands/pipeline/edit.js +50 -0
- package/dist/cli/commands/pipeline/edit.js.map +1 -0
- package/dist/cli/commands/pipeline/export.d.ts +6 -0
- package/dist/cli/commands/pipeline/export.d.ts.map +1 -0
- package/dist/cli/commands/pipeline/export.js +48 -0
- package/dist/cli/commands/pipeline/export.js.map +1 -0
- package/dist/cli/commands/pipeline/import.d.ts +2 -0
- package/dist/cli/commands/pipeline/import.d.ts.map +1 -0
- package/dist/cli/commands/pipeline/import.js +59 -0
- package/dist/cli/commands/pipeline/import.js.map +1 -0
- package/dist/cli/commands/pipeline/validate.d.ts +2 -0
- package/dist/cli/commands/pipeline/validate.d.ts.map +1 -0
- package/dist/cli/commands/pipeline/validate.js +28 -0
- package/dist/cli/commands/pipeline/validate.js.map +1 -0
- package/dist/cli/commands/rollback.d.ts +6 -0
- package/dist/cli/commands/rollback.d.ts.map +1 -0
- package/dist/cli/commands/rollback.js +49 -0
- package/dist/cli/commands/rollback.js.map +1 -0
- package/dist/cli/commands/run.d.ts +15 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +61 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +52 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/test.d.ts +5 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +18 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/uninstall.d.ts +2 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +6 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/hooks.d.ts +8 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +98 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/templates/agents/cleanup-reporter.md +107 -0
- package/dist/cli/templates/agents/code-reducer.md +51 -0
- package/dist/cli/templates/agents/code-reviewer.md +34 -0
- package/dist/cli/templates/agents/context-reducer.md +94 -0
- package/dist/cli/templates/agents/dependency-auditor.md +127 -0
- package/dist/cli/templates/agents/detective-empath.md +26 -0
- package/dist/cli/templates/agents/detective-linguist.md +26 -0
- package/dist/cli/templates/agents/detective-logician.md +26 -0
- package/dist/cli/templates/agents/detective-skeptic.md +26 -0
- package/dist/cli/templates/agents/detective-statistician.md +26 -0
- package/dist/cli/templates/agents/doc-updater.md +30 -0
- package/dist/cli/templates/agents/judge.md +27 -0
- package/dist/cli/templates/agents/memory-updater.md +72 -0
- package/dist/cli/templates/agents/quality-checker.md +32 -0
- package/dist/cli/templates/agents/security-auditor.md +32 -0
- package/dist/cli/templates/agents/storyteller.md +26 -0
- package/dist/cli/templates/agents/summary.md +32 -0
- package/dist/cli/templates/agents/synthesizer.md +26 -0
- package/dist/cli/templates/pipelines/large-pipeline-example.yml +178 -0
- package/dist/cli/templates/pipelines/post-commit-example.yml +67 -0
- package/dist/cli/templates/pipelines/post-merge-example.yml +78 -0
- package/dist/cli/templates/pipelines/pre-commit-example.yml +41 -0
- package/dist/cli/templates/pipelines/pre-push-example.yml +51 -0
- package/dist/cli/templates/pipelines/test-pipeline.yml +90 -0
- package/dist/cli/utils/agent-importer.d.ts +21 -0
- package/dist/cli/utils/agent-importer.d.ts.map +1 -0
- package/dist/cli/utils/agent-importer.js +150 -0
- package/dist/cli/utils/agent-importer.js.map +1 -0
- package/dist/cli/utils/interactive-prompts.d.ts +10 -0
- package/dist/cli/utils/interactive-prompts.d.ts.map +1 -0
- package/dist/cli/utils/interactive-prompts.js +75 -0
- package/dist/cli/utils/interactive-prompts.js.map +1 -0
- package/dist/config/pipeline-loader.d.ts +14 -0
- package/dist/config/pipeline-loader.d.ts.map +1 -0
- package/dist/config/pipeline-loader.js +71 -0
- package/dist/config/pipeline-loader.js.map +1 -0
- package/dist/config/project-config-loader.d.ts +11 -0
- package/dist/config/project-config-loader.d.ts.map +1 -0
- package/dist/config/project-config-loader.js +100 -0
- package/dist/config/project-config-loader.js.map +1 -0
- package/dist/config/schema.d.ts +165 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +2 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/agent-query-runner.d.ts +25 -0
- package/dist/core/agent-query-runner.d.ts.map +1 -0
- package/dist/core/agent-query-runner.js +76 -0
- package/dist/core/agent-query-runner.js.map +1 -0
- package/dist/core/agent-runtime-registry.d.ts +11 -0
- package/dist/core/agent-runtime-registry.d.ts.map +1 -0
- package/dist/core/agent-runtime-registry.js +32 -0
- package/dist/core/agent-runtime-registry.js.map +1 -0
- package/dist/core/agent-runtimes/claude-code-headless-runtime.d.ts +16 -0
- package/dist/core/agent-runtimes/claude-code-headless-runtime.d.ts.map +1 -0
- package/dist/core/agent-runtimes/claude-code-headless-runtime.js +301 -0
- package/dist/core/agent-runtimes/claude-code-headless-runtime.js.map +1 -0
- package/dist/core/agent-runtimes/claude-sdk-runtime.d.ts +15 -0
- package/dist/core/agent-runtimes/claude-sdk-runtime.d.ts.map +1 -0
- package/dist/core/agent-runtimes/claude-sdk-runtime.js +92 -0
- package/dist/core/agent-runtimes/claude-sdk-runtime.js.map +1 -0
- package/dist/core/branch-manager.d.ts +15 -0
- package/dist/core/branch-manager.d.ts.map +1 -0
- package/dist/core/branch-manager.js +90 -0
- package/dist/core/branch-manager.js.map +1 -0
- package/dist/core/condition-evaluator.d.ts +16 -0
- package/dist/core/condition-evaluator.d.ts.map +1 -0
- package/dist/core/condition-evaluator.js +121 -0
- package/dist/core/condition-evaluator.js.map +1 -0
- package/dist/core/context-reducer.d.ts +15 -0
- package/dist/core/context-reducer.d.ts.map +1 -0
- package/dist/core/context-reducer.js +224 -0
- package/dist/core/context-reducer.js.map +1 -0
- package/dist/core/dag-planner.d.ts +13 -0
- package/dist/core/dag-planner.d.ts.map +1 -0
- package/dist/core/dag-planner.js +233 -0
- package/dist/core/dag-planner.js.map +1 -0
- package/dist/core/git-manager.d.ts +14 -0
- package/dist/core/git-manager.d.ts.map +1 -0
- package/dist/core/git-manager.js +70 -0
- package/dist/core/git-manager.js.map +1 -0
- package/dist/core/group-execution-orchestrator.d.ts +34 -0
- package/dist/core/group-execution-orchestrator.d.ts.map +1 -0
- package/dist/core/group-execution-orchestrator.js +238 -0
- package/dist/core/group-execution-orchestrator.js.map +1 -0
- package/dist/core/loop-state-manager.d.ts +29 -0
- package/dist/core/loop-state-manager.d.ts.map +1 -0
- package/dist/core/loop-state-manager.js +78 -0
- package/dist/core/loop-state-manager.js.map +1 -0
- package/dist/core/output-storage-manager.d.ts +14 -0
- package/dist/core/output-storage-manager.d.ts.map +1 -0
- package/dist/core/output-storage-manager.js +68 -0
- package/dist/core/output-storage-manager.js.map +1 -0
- package/dist/core/output-tool-builder.d.ts +6 -0
- package/dist/core/output-tool-builder.d.ts.map +1 -0
- package/dist/core/output-tool-builder.js +50 -0
- package/dist/core/output-tool-builder.js.map +1 -0
- package/dist/core/parallel-executor.d.ts +21 -0
- package/dist/core/parallel-executor.d.ts.map +1 -0
- package/dist/core/parallel-executor.js +93 -0
- package/dist/core/parallel-executor.js.map +1 -0
- package/dist/core/pipeline-finalizer.d.ts +24 -0
- package/dist/core/pipeline-finalizer.d.ts.map +1 -0
- package/dist/core/pipeline-finalizer.js +103 -0
- package/dist/core/pipeline-finalizer.js.map +1 -0
- package/dist/core/pipeline-initializer.d.ts +36 -0
- package/dist/core/pipeline-initializer.d.ts.map +1 -0
- package/dist/core/pipeline-initializer.js +105 -0
- package/dist/core/pipeline-initializer.js.map +1 -0
- package/dist/core/pipeline-runner.d.ts +36 -0
- package/dist/core/pipeline-runner.d.ts.map +1 -0
- package/dist/core/pipeline-runner.js +326 -0
- package/dist/core/pipeline-runner.js.map +1 -0
- package/dist/core/pr-creator.d.ts +23 -0
- package/dist/core/pr-creator.d.ts.map +1 -0
- package/dist/core/pr-creator.js +138 -0
- package/dist/core/pr-creator.js.map +1 -0
- package/dist/core/retry-handler.d.ts +15 -0
- package/dist/core/retry-handler.d.ts.map +1 -0
- package/dist/core/retry-handler.js +95 -0
- package/dist/core/retry-handler.js.map +1 -0
- package/dist/core/stage-executor.d.ts +27 -0
- package/dist/core/stage-executor.d.ts.map +1 -0
- package/dist/core/stage-executor.js +365 -0
- package/dist/core/stage-executor.js.map +1 -0
- package/dist/core/state-manager.d.ts +10 -0
- package/dist/core/state-manager.d.ts.map +1 -0
- package/dist/core/state-manager.js +61 -0
- package/dist/core/state-manager.js.map +1 -0
- package/dist/core/types/agent-runtime.d.ts +51 -0
- package/dist/core/types/agent-runtime.d.ts.map +1 -0
- package/dist/core/types/agent-runtime.js +2 -0
- package/dist/core/types/agent-runtime.js.map +1 -0
- package/dist/core/types/execution-graph.d.ts +29 -0
- package/dist/core/types/execution-graph.d.ts.map +1 -0
- package/dist/core/types/execution-graph.js +2 -0
- package/dist/core/types/execution-graph.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +400 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications/notification-manager.d.ts +12 -0
- package/dist/notifications/notification-manager.d.ts.map +1 -0
- package/dist/notifications/notification-manager.js +74 -0
- package/dist/notifications/notification-manager.js.map +1 -0
- package/dist/notifications/notifiers/base-notifier.d.ts +9 -0
- package/dist/notifications/notifiers/base-notifier.d.ts.map +1 -0
- package/dist/notifications/notifiers/base-notifier.js +27 -0
- package/dist/notifications/notifiers/base-notifier.js.map +1 -0
- package/dist/notifications/notifiers/local-notifier.d.ts +11 -0
- package/dist/notifications/notifiers/local-notifier.d.ts.map +1 -0
- package/dist/notifications/notifiers/local-notifier.js +91 -0
- package/dist/notifications/notifiers/local-notifier.js.map +1 -0
- package/dist/notifications/notifiers/slack-notifier.d.ts +13 -0
- package/dist/notifications/notifiers/slack-notifier.d.ts.map +1 -0
- package/dist/notifications/notifiers/slack-notifier.js +209 -0
- package/dist/notifications/notifiers/slack-notifier.js.map +1 -0
- package/dist/notifications/types.d.ts +34 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/notifications/types.js +2 -0
- package/dist/notifications/types.js.map +1 -0
- package/dist/ui/components/execution-group.d.ts +10 -0
- package/dist/ui/components/execution-group.d.ts.map +1 -0
- package/dist/ui/components/execution-group.js +19 -0
- package/dist/ui/components/execution-group.js.map +1 -0
- package/dist/ui/components/stage-row.d.ts +10 -0
- package/dist/ui/components/stage-row.d.ts.map +1 -0
- package/dist/ui/components/stage-row.js +69 -0
- package/dist/ui/components/stage-row.js.map +1 -0
- package/dist/ui/components/status-badge.d.ts +7 -0
- package/dist/ui/components/status-badge.d.ts.map +1 -0
- package/dist/ui/components/status-badge.js +18 -0
- package/dist/ui/components/status-badge.js.map +1 -0
- package/dist/ui/components/summary-line.d.ts +9 -0
- package/dist/ui/components/summary-line.d.ts.map +1 -0
- package/dist/ui/components/summary-line.js +13 -0
- package/dist/ui/components/summary-line.js.map +1 -0
- package/dist/ui/pipeline-ui.d.ts +8 -0
- package/dist/ui/pipeline-ui.d.ts.map +1 -0
- package/dist/ui/pipeline-ui.js +82 -0
- package/dist/ui/pipeline-ui.js.map +1 -0
- package/dist/utils/error-factory.d.ts +21 -0
- package/dist/utils/error-factory.d.ts.map +1 -0
- package/dist/utils/error-factory.js +74 -0
- package/dist/utils/error-factory.js.map +1 -0
- package/dist/utils/errors.d.ts +11 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +21 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/gh-cli-checker.d.ts +6 -0
- package/dist/utils/gh-cli-checker.d.ts.map +1 -0
- package/dist/utils/gh-cli-checker.js +42 -0
- package/dist/utils/gh-cli-checker.js.map +1 -0
- package/dist/utils/logger.d.ts +16 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +39 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pipeline-formatter.d.ts +10 -0
- package/dist/utils/pipeline-formatter.d.ts.map +1 -0
- package/dist/utils/pipeline-formatter.js +92 -0
- package/dist/utils/pipeline-formatter.js.map +1 -0
- package/dist/utils/token-estimator.d.ts +15 -0
- package/dist/utils/token-estimator.d.ts.map +1 -0
- package/dist/utils/token-estimator.js +46 -0
- package/dist/utils/token-estimator.js.map +1 -0
- package/dist/validators/pipeline-validator.d.ts +31 -0
- package/dist/validators/pipeline-validator.d.ts.map +1 -0
- package/dist/validators/pipeline-validator.js +540 -0
- package/dist/validators/pipeline-validator.js.map +1 -0
- package/license +21 -0
- package/package.json +90 -0
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
**Documentation Philosophy**: Keep all documentation minimal and scannable. Write only essential information in 1-2 sentences per concept. Avoid verbose explanations, extensive examples, or redundant details.
|
|
6
|
+
|
|
7
|
+
**Agent Pipeline Philosophy**: Less is more. Break up all tasks to the smallest fully coherent unit and use one agent per small task. This micro multi agent approach is how to get the most use of Agent Pipeline. Using the same agent with different inputs is perfectly fine as long as the agent itself is focused. The anti-pattern would be having a Swiss Army knife agent that does completely different things based on inputs.
|
|
8
|
+
|
|
9
|
+
See @README.md for comprehensive feature documentation and usage examples. Deep dives now live under:
|
|
10
|
+
- `docs/configuration.md` – pipeline settings, git workflow, notifications
|
|
11
|
+
- `docs/examples.md` – shipped pipeline templates
|
|
12
|
+
- `docs/cli.md` – command reference
|
|
13
|
+
|
|
14
|
+
## Tech Stack
|
|
15
|
+
- **Language**: TypeScript (ES2022, ESNext modules)
|
|
16
|
+
- **UI Framework**: Ink (React for terminal) + React 18
|
|
17
|
+
- **Platforms**: Node.js v18+, cross-platform (macOS, Windows, Linux)
|
|
18
|
+
- **Key Dependencies**: Claude Agent SDK, simple-git, YAML parser, node-notifier
|
|
19
|
+
|
|
20
|
+
## Architecture
|
|
21
|
+
|
|
22
|
+
### Core Execution Flow
|
|
23
|
+
|
|
24
|
+
The pipeline executes in this order:
|
|
25
|
+
|
|
26
|
+
1. **Pipeline Loader** (`src/config/pipeline-loader.ts`) - Parses YAML configurations
|
|
27
|
+
2. **Pipeline Validator** (`src/validators/pipeline-validator.ts`) - Pre-flight checks, DAG cycle detection
|
|
28
|
+
3. **DAG Planner** (`src/core/dag-planner.ts`) - Analyzes dependencies, creates execution graph with topological sort
|
|
29
|
+
4. **Pipeline Runner** (`src/core/pipeline-runner.ts`) - Coordinates the run lifecycle via:
|
|
30
|
+
- **Pipeline Initializer** (`src/core/pipeline-initializer.ts`) – prepares git state, notifications, and execution context
|
|
31
|
+
- **Group Execution Orchestrator** (`src/core/group-execution-orchestrator.ts`) – evaluates conditions, executes stage groups (parallel or sequential), triggers context reduction
|
|
32
|
+
- **Pipeline Finalizer** (`src/core/pipeline-finalizer.ts`) – restores branches, summarizes results, optionally creates PRs
|
|
33
|
+
5. **Parallel Executor** (`src/core/parallel-executor.ts`) - Runs independent stages concurrently
|
|
34
|
+
6. **Stage Executor** (`src/core/stage-executor.ts`) - Executes individual agent stages with retry logic
|
|
35
|
+
7. **Output Tool Builder** (`src/core/output-tool-builder.ts`) - Provides MCP `report_outputs` tool for structured data extraction
|
|
36
|
+
8. **State Manager** (`src/core/state-manager.ts`) - Persists execution state to `.agent-pipeline/state/runs/`
|
|
37
|
+
9. **PR Creator** (`src/core/pr-creator.ts`) - Creates GitHub PRs via `gh` CLI
|
|
38
|
+
10. **Notification Manager** (`src/notifications/notification-manager.ts`) - Sends desktop/Slack notifications
|
|
39
|
+
|
|
40
|
+
### Key Architectural Patterns
|
|
41
|
+
|
|
42
|
+
**DAG Execution**: Stages declare dependencies via `dependsOn` array. DAG Planner performs topological sort and groups stages by execution level. Each level runs in parallel, levels execute sequentially.
|
|
43
|
+
|
|
44
|
+
**State Management**: Each pipeline run gets a unique `runId`. State is saved after each stage group completes by `StateManager`. This enables rollback, analytics, and history browsing.
|
|
45
|
+
|
|
46
|
+
**Git Workflow**: Pipelines run on isolated branches (`pipeline/{name}` or `pipeline/{name}-{runId}`). Each stage creates an atomic commit. Original branch is restored after completion.
|
|
47
|
+
|
|
48
|
+
**Output Extraction**: Agents report structured data via MCP `report_outputs` tool or text format. Tool-based extraction preserves types (objects, arrays, numbers). Text-based falls back to regex. Single reusable MCP server created via `OutputToolBuilder` with generic `z.record(z.string(), z.unknown())` schema.
|
|
49
|
+
|
|
50
|
+
**Conditional Execution**: Condition Evaluator (`src/core/condition-evaluator.ts`) parses template expressions like `{{ stages.review.outputs.issues > 0 }}` and evaluates against pipeline state before delegation to the orchestrator.
|
|
51
|
+
|
|
52
|
+
**Retry Mechanism**: Retry Handler (`src/core/retry-handler.ts`) implements exponential/linear/fixed backoff strategies. `StageExecutor` uses it to wrap agent execution with configurable retry logic.
|
|
53
|
+
|
|
54
|
+
**UI Architecture**: Dual-mode operation - Interactive mode uses Ink/React terminal UI (`src/ui/pipeline-ui.tsx`) with real-time updates. Non-interactive mode uses simple console logging.
|
|
55
|
+
|
|
56
|
+
**Permission Control**: Agents default to `acceptEdits` mode for automated workflows, allowing file operations without prompts while respecting `.claude/settings.json` allow/deny rules. Configurable per pipeline via `settings.permissionMode`.
|
|
57
|
+
|
|
58
|
+
### Critical Files
|
|
59
|
+
|
|
60
|
+
- `src/config/schema.ts` - TypeScript interfaces for all configuration and state types
|
|
61
|
+
- `src/core/pipeline-runner.ts` - Entry point that wires initializer, group orchestrator, and finalizer
|
|
62
|
+
- `src/core/pipeline-initializer.ts` - Pre-run setup (git, notifications, parallel executor)
|
|
63
|
+
- `src/core/group-execution-orchestrator.ts` - Executes DAG groups, handles skips, saves state
|
|
64
|
+
- `src/core/pipeline-finalizer.ts` - Cleans up, restores branches, triggers PR creation/summaries
|
|
65
|
+
- `src/core/stage-executor.ts` - Stage execution with MCP tool integration and output extraction
|
|
66
|
+
- `src/core/output-tool-builder.ts` - Singleton MCP server for `report_outputs` tool
|
|
67
|
+
- `src/core/types/execution-graph.ts` - DAG type definitions
|
|
68
|
+
- `src/index.ts` - CLI entry point with command routing
|
|
69
|
+
|
|
70
|
+
## Build Commands
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Build TypeScript to dist/
|
|
74
|
+
npm run build
|
|
75
|
+
|
|
76
|
+
# Watch mode for development
|
|
77
|
+
npm run dev
|
|
78
|
+
|
|
79
|
+
# Run CLI in development (after build)
|
|
80
|
+
node dist/index.js <command>
|
|
81
|
+
# OR after npm link:
|
|
82
|
+
agent-pipeline <command>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Test Commands
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Run all tests with Vitest
|
|
89
|
+
npm test -- --run
|
|
90
|
+
|
|
91
|
+
# Run tests in watch mode
|
|
92
|
+
npm run test -- --watch
|
|
93
|
+
|
|
94
|
+
# Run specific test file
|
|
95
|
+
npm test src/__tests__/core/pipeline-runner.test.ts -- --run
|
|
96
|
+
|
|
97
|
+
# Run tests with coverage
|
|
98
|
+
npm test -- --coverage --run
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**IMPORTANT**: When running test commands via Bash, always include `--run` to avoid entering Vitest's interactive mode accidentally.
|
|
102
|
+
|
|
103
|
+
### Test Architecture
|
|
104
|
+
|
|
105
|
+
Tests use Vitest with extensive mocking:
|
|
106
|
+
- `src/__tests__/mocks/` - Mock implementations (claude-sdk, git-manager, simple-git, etc.)
|
|
107
|
+
- `src/__tests__/fixtures/` - Test data (pipeline configs, states, git states)
|
|
108
|
+
- All core modules have 100% test coverage
|
|
109
|
+
|
|
110
|
+
## Development Notes
|
|
111
|
+
|
|
112
|
+
**Module System**: Uses ESNext modules. All imports require `.js` extension (e.g., `import './foo.js'` even for `.ts` files).
|
|
113
|
+
|
|
114
|
+
**Git Manager**: Wraps `simple-git` for all git operations. Never use git directly - always use GitManager or BranchManager.
|
|
115
|
+
|
|
116
|
+
**Error Handling**: Custom error types in `src/utils/errors.ts`. Use `Logger` from `src/utils/logger.ts` for consistent logging.
|
|
117
|
+
|
|
118
|
+
**Notification System**: All notifications wrapped in try/catch - must never crash pipeline. Parallel sends to all channels (desktop + Slack).
|
|
119
|
+
|
|
120
|
+
**PR Creation**: Requires `gh` CLI installed and authenticated. Always check if PR exists before creating. Falls back gracefully if `gh` unavailable.
|
|
121
|
+
|
|
122
|
+
**State Files**: Located in `.agent-pipeline/state/runs/{runId}.json`. Each run is immutable once completed.
|
|
123
|
+
|
|
124
|
+
**Branch Strategies**:
|
|
125
|
+
- `reusable` - Same branch per pipeline (`pipeline/commit-review`)
|
|
126
|
+
- `unique-per-run` - Unique branch per run (`pipeline/commit-review-{runId}`)
|
|
127
|
+
|
|
128
|
+
**Dry Run Mode**: When enabled, skip all git commits but execute agents. Useful for testing pipelines.
|
|
129
|
+
|
|
130
|
+
### Development Flow
|
|
131
|
+
When planning new features or fixes, if you notice the changes will require a large refactoring, only do a detailed plan of the first phase of required changes and ask user for review before the next phases.
|
|
132
|
+
|
|
133
|
+
### Testing Style
|
|
134
|
+
Spawn tasks or agents whenver you identify large patterned changes required in tests (eg. replace all instances of mockQuery(...) with mockRuntime.execute(...))
|
package/README.md
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Agent Pipeline
|
|
2
|
+
|
|
3
|
+
> Intelligent agent orchestration with parallel execution, conditional logic, git workflow automation, and multi-channel notifications for Claude Code
|
|
4
|
+
|
|
5
|
+
Last update: 2025-10-28
|
|
6
|
+
|
|
7
|
+
Agent Pipeline delivers an agent-driven CI/CD workflow with full visibility. Execute Claude agents with DAG-planned parallelism, conditional logic, retries, and automated git hygiene. Branch isolation, GitHub PR creation, local/Slack notifications, and a live terminal UI keep humans in the loop.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- **Pipeline orchestration** – `PipelineRunner` combines DAG planning, conditional gating, and per-stage retries backed by `RetryHandler`.
|
|
12
|
+
- **Git workflow automation** – `BranchManager` and `PRCreator` isolate work on dedicated branches and open PRs via GitHub CLI.
|
|
13
|
+
- **State & context management** – `StateManager` persists run history while `ContextReducer` trims prompts using token-aware summaries and saved artifacts.
|
|
14
|
+
- **Model flexibility** – Mix Haiku, Sonnet, and Opus models per stage for cost optimization (up to 90% savings on simple tasks).
|
|
15
|
+
- **Cost controls** – Set `maxTurns` and `maxThinkingTokens` to prevent runaway agents and enable deep reasoning when needed.
|
|
16
|
+
- **Observability** – Ink-powered live UI, interactive history browser, and analytics reports generated from stored run data.
|
|
17
|
+
- **Notifications** – `NotificationManager` sends desktop and Slack notifications with event filtering and fail-safe delivery.
|
|
18
|
+
- **Permission control** – Defaults to `acceptEdits` mode for automated workflows, respecting `.claude/settings.json` allow/deny rules.
|
|
19
|
+
- **YAML-first configuration** – Schema-validated pipelines with structured agent outputs and customizable commit messages.
|
|
20
|
+
|
|
21
|
+
## Prerequisites
|
|
22
|
+
|
|
23
|
+
- **Node.js** (v18 or higher)
|
|
24
|
+
- **Git** (configured with user name and email)
|
|
25
|
+
- **Claude API Key** (set in environment or Claude Code settings)
|
|
26
|
+
- **GitHub CLI** (`gh`) – optional unless you enable automated PR creation
|
|
27
|
+
- Install: `brew install gh` (macOS) or [see docs](https://cli.github.com/)
|
|
28
|
+
- Authenticate: `gh auth login`
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
31
|
+
|
|
32
|
+
### npm (Recommended)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install -g agent-pipeline
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### From Source
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
git clone https://github.com/FRE-Studios/agent-pipeline.git
|
|
42
|
+
cd agent-pipeline
|
|
43
|
+
npm install
|
|
44
|
+
npm run build
|
|
45
|
+
npm link
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Quick Start
|
|
49
|
+
|
|
50
|
+
### 1. Initialize New Project
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Initialize with minimal test pipeline
|
|
54
|
+
agent-pipeline init
|
|
55
|
+
|
|
56
|
+
# Initialize with a specific example
|
|
57
|
+
agent-pipeline init post-commit
|
|
58
|
+
|
|
59
|
+
# Initialize with all examples
|
|
60
|
+
agent-pipeline init --all
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
This scaffolds the `test-pipeline`, optional example pipelines, required agent definitions, and the directory structure (`.agent-pipeline/`, `.claude/agents/`). Agents from installed Claude Code plugins are automatically imported.
|
|
64
|
+
|
|
65
|
+
### 2. Run Your First Pipeline
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Run with interactive live UI (default)
|
|
69
|
+
agent-pipeline run test-pipeline
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**What you'll see:** live terminal UI with status badges, real-time agent output streaming, atomic commits per stage, and a pipeline summary with timing and results.
|
|
73
|
+
|
|
74
|
+
### 3. Explore Your Pipeline History
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# Browse past runs interactively
|
|
78
|
+
agent-pipeline history
|
|
79
|
+
|
|
80
|
+
# View performance metrics and analytics
|
|
81
|
+
agent-pipeline analytics
|
|
82
|
+
agent-pipeline analytics --pipeline <name> --days 30
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 4. Try Advanced Features
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Parallel execution with DAG dependencies
|
|
89
|
+
agent-pipeline run parallel-example
|
|
90
|
+
|
|
91
|
+
# Conditional logic based on previous stage outputs
|
|
92
|
+
agent-pipeline run conditional-example
|
|
93
|
+
|
|
94
|
+
# Git workflow with branch isolation and PR creation
|
|
95
|
+
agent-pipeline run git-workflow-example
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### Manual Setup (Alternative)
|
|
101
|
+
|
|
102
|
+
#### 1. Create a Pipeline Configuration
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
# .agent-pipeline/pipelines/my-pipeline.yml
|
|
106
|
+
name: my-pipeline
|
|
107
|
+
trigger: manual
|
|
108
|
+
|
|
109
|
+
settings:
|
|
110
|
+
autoCommit: true
|
|
111
|
+
commitPrefix: "[pipeline:{{stage}}]"
|
|
112
|
+
failureStrategy: continue
|
|
113
|
+
preserveWorkingTree: false
|
|
114
|
+
|
|
115
|
+
agents:
|
|
116
|
+
- name: code-review
|
|
117
|
+
agent: .claude/agents/code-reviewer.md
|
|
118
|
+
timeout: 120
|
|
119
|
+
|
|
120
|
+
- name: code-reducer
|
|
121
|
+
agent: .claude/agents/code-reducer.md
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
#### 2. Create Agent Definitions
|
|
125
|
+
|
|
126
|
+
```markdown
|
|
127
|
+
<!-- .claude/agents/code-reviewer.md -->
|
|
128
|
+
# Code Review Agent
|
|
129
|
+
|
|
130
|
+
You are a code review agent in an automated pipeline.
|
|
131
|
+
|
|
132
|
+
## Your Task
|
|
133
|
+
Review the code changes and provide feedback...
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
#### 3. Run the Pipeline
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
agent-pipeline run my-pipeline
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Documentation
|
|
143
|
+
|
|
144
|
+
- `docs/configuration.md` – Pipeline settings, git workflow, notifications, and context reduction details.
|
|
145
|
+
- `docs/examples.md` – Ready-to-run sample pipelines shipped with the CLI.
|
|
146
|
+
- `docs/cli.md` – Command reference for pipeline, agent, and git integration workflows.
|
|
147
|
+
- `docs/data-flow-map.md` – Visual data flow diagrams showing how data moves through the system.
|
|
148
|
+
- `docs/dev/` – Historical design notes and roadmap snapshots.
|
|
149
|
+
|
|
150
|
+
## Architecture Overview
|
|
151
|
+
|
|
152
|
+
Key components:
|
|
153
|
+
|
|
154
|
+
- `src/core/pipeline-runner.ts` – Orchestrates initialization, execution groups, and finalization.
|
|
155
|
+
- `src/core/group-execution-orchestrator.ts` – Applies conditional logic, executes groups (parallel or sequential), and triggers context reduction.
|
|
156
|
+
- `src/core/stage-executor.ts` – Runs individual agents with retries, token estimation, and git commits.
|
|
157
|
+
- `src/core/state-manager.ts` – Persists pipeline state under `.agent-pipeline/state/runs/`.
|
|
158
|
+
- `src/core/branch-manager.ts` / `src/core/git-manager.ts` – Handle branch isolation and git commands.
|
|
159
|
+
- `src/core/pr-creator.ts` – Integrates with GitHub CLI for PR automation.
|
|
160
|
+
- `src/utils/token-estimator.ts` – Provides `smartCount()` for context window monitoring.
|
|
161
|
+
- `src/ui/pipeline-ui.tsx` & `src/ui/history-browser.tsx` – Ink UIs for live runs and history browsing.
|
|
162
|
+
- `src/analytics/pipeline-analytics.ts` – Generates aggregated metrics for the `analytics` command.
|
|
163
|
+
- `src/notifications/notification-manager.ts` – Dispatches desktop and Slack notifications.
|
|
164
|
+
- `src/cli/commands/` – Command implementations (`run`, `install`, `cleanup`, `rollback`, etc.).
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
agent-pipeline/
|
|
168
|
+
├── .agent-pipeline/ # Pipeline definitions and run history
|
|
169
|
+
├── docs/ # User and developer documentation
|
|
170
|
+
├── src/
|
|
171
|
+
│ ├── analytics/
|
|
172
|
+
│ ├── cli/commands/
|
|
173
|
+
│ ├── config/
|
|
174
|
+
│ ├── core/
|
|
175
|
+
│ ├── notifications/
|
|
176
|
+
│ ├── ui/
|
|
177
|
+
│ ├── utils/
|
|
178
|
+
│ └── index.ts # CLI entry point
|
|
179
|
+
└── .claude/agents/ # Example agent prompts
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Git History Example
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
* a3f9d2c [pipeline:memory-manager] Update CLAUDE.md with findings
|
|
186
|
+
* 8c2e4a1 [pipeline:doc-updater] Add documentation updates
|
|
187
|
+
* 5b7f3d9 [pipeline:quality-check] Refactor for better readability
|
|
188
|
+
* 2e1c8f4 [pipeline:security-audit] Fix security issues
|
|
189
|
+
* 9d4a2b6 [pipeline:code-review] Apply style improvements
|
|
190
|
+
* 7a3b5c8 feat: add user authentication
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Atomic commits make it easy to review changes, roll back specific stages, or bisect when issues arise.
|
|
194
|
+
|
|
195
|
+
## Development
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Install dependencies
|
|
199
|
+
npm install
|
|
200
|
+
|
|
201
|
+
# Build
|
|
202
|
+
npm run build
|
|
203
|
+
|
|
204
|
+
# Watch mode
|
|
205
|
+
npm run dev
|
|
206
|
+
|
|
207
|
+
# Run tests
|
|
208
|
+
npm test
|
|
209
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { StateManager } from '../core/state-manager.js';
|
|
2
|
+
import { PipelineMetrics, LoopMetrics } from './types.js';
|
|
3
|
+
export declare class PipelineAnalytics {
|
|
4
|
+
private stateManager;
|
|
5
|
+
private loopStateManager;
|
|
6
|
+
constructor(stateManager: StateManager, repoPath: string);
|
|
7
|
+
generateMetrics(pipelineName?: string, timeRange?: {
|
|
8
|
+
start: Date;
|
|
9
|
+
end: Date;
|
|
10
|
+
}): Promise<PipelineMetrics>;
|
|
11
|
+
private calculateStageMetrics;
|
|
12
|
+
private analyzeFailures;
|
|
13
|
+
private calculateTrends;
|
|
14
|
+
generateLoopMetrics(timeRange?: {
|
|
15
|
+
start: Date;
|
|
16
|
+
end: Date;
|
|
17
|
+
}): Promise<LoopMetrics>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=pipeline-analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-analytics.d.ts","sourceRoot":"","sources":["../../src/analytics/pipeline-analytics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,eAAe,EAAgC,WAAW,EAAE,MAAM,YAAY,CAAC;AAGxF,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,YAAY;IAHtB,OAAO,CAAC,gBAAgB,CAAmB;gBAGjC,YAAY,EAAE,YAAY,EAClC,QAAQ,EAAE,MAAM;IAKZ,eAAe,CACnB,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,GACrC,OAAO,CAAC,eAAe,CAAC;IA+C3B,OAAO,CAAC,qBAAqB;IA0D7B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,eAAe;IAkCjB,mBAAmB,CACvB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAA;KAAE,GACrC,OAAO,CAAC,WAAW,CAAC;CAsDxB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { LoopStateManager } from '../core/loop-state-manager.js';
|
|
2
|
+
export class PipelineAnalytics {
|
|
3
|
+
stateManager;
|
|
4
|
+
loopStateManager;
|
|
5
|
+
constructor(stateManager, repoPath) {
|
|
6
|
+
this.stateManager = stateManager;
|
|
7
|
+
this.loopStateManager = new LoopStateManager(repoPath);
|
|
8
|
+
}
|
|
9
|
+
async generateMetrics(pipelineName, timeRange) {
|
|
10
|
+
const runs = await this.stateManager.getAllRuns();
|
|
11
|
+
const filteredRuns = runs.filter((run) => {
|
|
12
|
+
if (pipelineName && run.pipelineConfig.name !== pipelineName) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
if (timeRange) {
|
|
16
|
+
const runTime = new Date(run.trigger.timestamp);
|
|
17
|
+
if (runTime < timeRange.start || runTime > timeRange.end) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
});
|
|
23
|
+
const totalRuns = filteredRuns.length;
|
|
24
|
+
const successfulRuns = filteredRuns.filter((r) => r.status === 'completed').length;
|
|
25
|
+
const successRate = totalRuns > 0 ? successfulRuns / totalRuns : 0;
|
|
26
|
+
const totalDuration = filteredRuns.reduce((sum, run) => sum + run.artifacts.totalDuration, 0);
|
|
27
|
+
const averageDuration = totalRuns > 0 ? totalDuration / totalRuns : 0;
|
|
28
|
+
const stageMetrics = this.calculateStageMetrics(filteredRuns);
|
|
29
|
+
const failureReasons = this.analyzeFailures(filteredRuns);
|
|
30
|
+
const trendsOverTime = this.calculateTrends(filteredRuns);
|
|
31
|
+
return {
|
|
32
|
+
totalRuns,
|
|
33
|
+
successRate,
|
|
34
|
+
averageDuration,
|
|
35
|
+
stageMetrics,
|
|
36
|
+
failureReasons,
|
|
37
|
+
trendsOverTime
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
calculateStageMetrics(runs) {
|
|
41
|
+
const aggregates = new Map();
|
|
42
|
+
for (const run of runs) {
|
|
43
|
+
for (const stage of run.stages) {
|
|
44
|
+
const aggregate = aggregates.get(stage.stageName) ?? {
|
|
45
|
+
stageName: stage.stageName,
|
|
46
|
+
totalRuns: 0,
|
|
47
|
+
successCount: 0,
|
|
48
|
+
failureCount: 0,
|
|
49
|
+
durationTotal: 0,
|
|
50
|
+
durationSamples: 0
|
|
51
|
+
};
|
|
52
|
+
aggregate.totalRuns++;
|
|
53
|
+
if (stage.status === 'success') {
|
|
54
|
+
aggregate.successCount++;
|
|
55
|
+
}
|
|
56
|
+
else if (stage.status === 'failed') {
|
|
57
|
+
aggregate.failureCount++;
|
|
58
|
+
}
|
|
59
|
+
if (typeof stage.duration === 'number') {
|
|
60
|
+
aggregate.durationTotal += stage.duration;
|
|
61
|
+
aggregate.durationSamples++;
|
|
62
|
+
}
|
|
63
|
+
aggregates.set(stage.stageName, aggregate);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const metrics = new Map();
|
|
67
|
+
for (const aggregate of aggregates.values()) {
|
|
68
|
+
const { stageName, totalRuns, successCount, failureCount, durationTotal, durationSamples } = aggregate;
|
|
69
|
+
metrics.set(stageName, {
|
|
70
|
+
stageName,
|
|
71
|
+
totalRuns,
|
|
72
|
+
failureCount,
|
|
73
|
+
successRate: totalRuns > 0 ? successCount / totalRuns : 0,
|
|
74
|
+
averageDuration: durationSamples > 0 ? durationTotal / durationSamples : 0
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return metrics;
|
|
78
|
+
}
|
|
79
|
+
analyzeFailures(runs) {
|
|
80
|
+
const failures = new Map();
|
|
81
|
+
for (const run of runs) {
|
|
82
|
+
for (const stage of run.stages) {
|
|
83
|
+
if (stage.status === 'failed' && stage.error) {
|
|
84
|
+
const reason = stage.error.message.split('\n')[0];
|
|
85
|
+
failures.set(reason, (failures.get(reason) || 0) + 1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return failures;
|
|
90
|
+
}
|
|
91
|
+
calculateTrends(runs) {
|
|
92
|
+
const dataByDay = new Map();
|
|
93
|
+
for (const run of runs) {
|
|
94
|
+
const day = new Date(run.trigger.timestamp).toISOString().split('T')[0];
|
|
95
|
+
if (!dataByDay.has(day)) {
|
|
96
|
+
dataByDay.set(day, { successes: 0, failures: 0 });
|
|
97
|
+
}
|
|
98
|
+
const dayData = dataByDay.get(day);
|
|
99
|
+
if (run.status === 'completed') {
|
|
100
|
+
dayData.successes++;
|
|
101
|
+
}
|
|
102
|
+
else if (run.status === 'failed') {
|
|
103
|
+
dayData.failures++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return Array.from(dataByDay.entries())
|
|
107
|
+
.map(([date, data]) => {
|
|
108
|
+
const totalRuns = data.successes + data.failures;
|
|
109
|
+
return {
|
|
110
|
+
date,
|
|
111
|
+
successRate: totalRuns > 0 ? data.successes / totalRuns : 0,
|
|
112
|
+
totalRuns
|
|
113
|
+
};
|
|
114
|
+
})
|
|
115
|
+
.sort((a, b) => a.date.localeCompare(b.date));
|
|
116
|
+
}
|
|
117
|
+
async generateLoopMetrics(timeRange) {
|
|
118
|
+
const allSessions = await this.loopStateManager.getAllSessions();
|
|
119
|
+
const filteredSessions = timeRange
|
|
120
|
+
? allSessions.filter((session) => {
|
|
121
|
+
const sessionTime = new Date(session.startTime);
|
|
122
|
+
return sessionTime >= timeRange.start && sessionTime <= timeRange.end;
|
|
123
|
+
})
|
|
124
|
+
: allSessions;
|
|
125
|
+
const totalSessions = filteredSessions.length;
|
|
126
|
+
const completedSessions = filteredSessions.filter(s => s.status === 'completed').length;
|
|
127
|
+
const failedSessions = filteredSessions.filter(s => s.status === 'failed').length;
|
|
128
|
+
const limitReachedSessions = filteredSessions.filter(s => s.status === 'limit-reached').length;
|
|
129
|
+
const totalIterations = filteredSessions.reduce((sum, s) => sum + s.totalIterations, 0);
|
|
130
|
+
const averageIterationsPerSession = totalSessions > 0
|
|
131
|
+
? totalIterations / totalSessions
|
|
132
|
+
: 0;
|
|
133
|
+
const pipelineCounts = new Map();
|
|
134
|
+
for (const session of filteredSessions) {
|
|
135
|
+
for (const iteration of session.iterations) {
|
|
136
|
+
pipelineCounts.set(iteration.pipelineName, (pipelineCounts.get(iteration.pipelineName) || 0) + 1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const terminationReasons = new Map();
|
|
140
|
+
for (const session of filteredSessions) {
|
|
141
|
+
terminationReasons.set(session.status, (terminationReasons.get(session.status) || 0) + 1);
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
totalSessions,
|
|
145
|
+
completedSessions,
|
|
146
|
+
failedSessions,
|
|
147
|
+
limitReachedSessions,
|
|
148
|
+
averageIterationsPerSession,
|
|
149
|
+
totalIterations,
|
|
150
|
+
mostCommonPipelines: pipelineCounts,
|
|
151
|
+
terminationReasons
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=pipeline-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-analytics.js","sourceRoot":"","sources":["../../src/analytics/pipeline-analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface PipelineMetrics {
|
|
2
|
+
totalRuns: number;
|
|
3
|
+
successRate: number;
|
|
4
|
+
averageDuration: number;
|
|
5
|
+
stageMetrics: Map<string, StageMetrics>;
|
|
6
|
+
failureReasons: Map<string, number>;
|
|
7
|
+
trendsOverTime: TimeSeriesData[];
|
|
8
|
+
}
|
|
9
|
+
export interface StageMetrics {
|
|
10
|
+
stageName: string;
|
|
11
|
+
successRate: number;
|
|
12
|
+
averageDuration: number;
|
|
13
|
+
failureCount: number;
|
|
14
|
+
totalRuns: number;
|
|
15
|
+
}
|
|
16
|
+
export interface TimeSeriesData {
|
|
17
|
+
date: string;
|
|
18
|
+
successRate: number;
|
|
19
|
+
totalRuns: number;
|
|
20
|
+
}
|
|
21
|
+
export interface LoopMetrics {
|
|
22
|
+
totalSessions: number;
|
|
23
|
+
completedSessions: number;
|
|
24
|
+
failedSessions: number;
|
|
25
|
+
limitReachedSessions: number;
|
|
26
|
+
averageIterationsPerSession: number;
|
|
27
|
+
totalIterations: number;
|
|
28
|
+
mostCommonPipelines: Map<string, number>;
|
|
29
|
+
terminationReasons: Map<string, number>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,cAAc,EAAE,cAAc,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,2BAA2B,EAAE,MAAM,CAAC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agent/info.ts"],"names":[],"mappings":"AAMA,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAsEf"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { PipelineLoader } from '../../../config/pipeline-loader.js';
|
|
4
|
+
export async function agentInfoCommand(repoPath, agentName) {
|
|
5
|
+
try {
|
|
6
|
+
const agentsDir = path.join(repoPath, '.claude', 'agents');
|
|
7
|
+
let agentPath = path.join(agentsDir, `${agentName}.md`);
|
|
8
|
+
try {
|
|
9
|
+
await fs.access(agentPath);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
agentPath = path.join(agentsDir, agentName);
|
|
13
|
+
await fs.access(agentPath);
|
|
14
|
+
}
|
|
15
|
+
const content = await fs.readFile(agentPath, 'utf-8');
|
|
16
|
+
const stats = await fs.stat(agentPath);
|
|
17
|
+
const loader = new PipelineLoader(repoPath);
|
|
18
|
+
const allPipelines = await loader.listPipelines();
|
|
19
|
+
const usingPipelines = [];
|
|
20
|
+
for (const pipelineName of allPipelines) {
|
|
21
|
+
try {
|
|
22
|
+
const { config } = await loader.loadPipeline(pipelineName);
|
|
23
|
+
const agentFile = path.basename(agentPath);
|
|
24
|
+
const isUsed = config.agents.some(a => a.agent.endsWith(agentFile) ||
|
|
25
|
+
a.agent.endsWith(agentName));
|
|
26
|
+
if (isUsed) {
|
|
27
|
+
usingPipelines.push(pipelineName);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
console.log(`\n${'='.repeat(80)}`);
|
|
34
|
+
console.log(`Agent: ${path.basename(agentPath, '.md')}`);
|
|
35
|
+
console.log(`${'='.repeat(80)}\n`);
|
|
36
|
+
console.log(`File: ${path.relative(repoPath, agentPath)}`);
|
|
37
|
+
console.log(`Size: ${stats.size} bytes`);
|
|
38
|
+
console.log(`Modified: ${stats.mtime.toLocaleString()}`);
|
|
39
|
+
if (usingPipelines.length > 0) {
|
|
40
|
+
console.log(`\nUsed by ${usingPipelines.length} pipeline(s):`);
|
|
41
|
+
usingPipelines.forEach(p => console.log(` - ${p}`));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.log('\nNot currently used by any pipelines');
|
|
45
|
+
}
|
|
46
|
+
console.log(`\n${'─'.repeat(80)}\n`);
|
|
47
|
+
console.log('Content:\n');
|
|
48
|
+
console.log(content);
|
|
49
|
+
console.log(`\n${'='.repeat(80)}\n`);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error.code === 'ENOENT') {
|
|
53
|
+
console.error(`❌ Agent "${agentName}" not found`);
|
|
54
|
+
console.error(' Run "agent-pipeline agent list" to see available agents\n');
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.error(`❌ Failed to read agent info: ${error.message}`);
|
|
58
|
+
}
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../../src/cli/commands/agent/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agent/list.ts"],"names":[],"mappings":"AAYA,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEvE"}
|