@elie-laloum/outpost 1.1.0 → 1.1.2
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/CHANGELOG.md +13 -0
- package/README.fr.md +1 -1
- package/README.md +1 -1
- package/dist/adapters/agents/claude-adapter.d.ts +3 -0
- package/dist/adapters/agents/claude-adapter.js +15 -0
- package/dist/adapters/agents/claude-adapter.js.map +1 -0
- package/dist/adapters/agents/claude-events.d.ts +3 -0
- package/dist/adapters/agents/claude-events.js +63 -0
- package/dist/adapters/agents/claude-events.js.map +1 -0
- package/dist/adapters/agents/claude-request.d.ts +4 -0
- package/dist/adapters/agents/claude-request.js +30 -0
- package/dist/adapters/agents/claude-request.js.map +1 -0
- package/dist/adapters/agents/codex-adapter.d.ts +3 -0
- package/dist/adapters/agents/codex-adapter.js +14 -0
- package/dist/adapters/agents/codex-adapter.js.map +1 -0
- package/dist/adapters/agents/codex-events.d.ts +2 -0
- package/dist/adapters/agents/codex-events.js +58 -0
- package/dist/adapters/agents/codex-events.js.map +1 -0
- package/dist/adapters/agents/codex-request.d.ts +4 -0
- package/dist/adapters/agents/codex-request.js +29 -0
- package/dist/adapters/agents/codex-request.js.map +1 -0
- package/dist/adapters/agents/continuation.d.ts +2 -0
- package/dist/adapters/agents/continuation.js +6 -0
- package/dist/adapters/agents/continuation.js.map +1 -0
- package/dist/adapters/agents/event-decoder.d.ts +4 -0
- package/dist/adapters/agents/event-decoder.js +15 -0
- package/dist/adapters/agents/event-decoder.js.map +1 -0
- package/dist/adapters/agents/protocol.d.ts +3 -0
- package/dist/adapters/agents/protocol.js +17 -0
- package/dist/adapters/agents/protocol.js.map +1 -0
- package/dist/adapters/agents/protocol.types.d.ts +4 -0
- package/dist/adapters/agents/protocol.types.js +2 -0
- package/dist/adapters/agents/protocol.types.js.map +1 -0
- package/dist/adapters/agents/settings.types.d.ts +14 -0
- package/dist/adapters/agents/settings.types.js +2 -0
- package/dist/adapters/agents/settings.types.js.map +1 -0
- package/dist/adapters/backlogs/backlog.constants.d.ts +4 -0
- package/dist/adapters/backlogs/backlog.constants.js +5 -0
- package/dist/adapters/backlogs/backlog.constants.js.map +1 -0
- package/dist/adapters/backlogs/beads-adapter.d.ts +4 -0
- package/dist/adapters/backlogs/beads-adapter.js +31 -0
- package/dist/adapters/backlogs/beads-adapter.js.map +1 -0
- package/dist/adapters/backlogs/cli.d.ts +3 -0
- package/dist/adapters/backlogs/cli.js +20 -0
- package/dist/adapters/backlogs/cli.js.map +1 -0
- package/dist/adapters/backlogs/github-adapter.d.ts +4 -0
- package/dist/adapters/backlogs/github-adapter.js +28 -0
- package/dist/adapters/backlogs/github-adapter.js.map +1 -0
- package/dist/adapters/backlogs/issue.d.ts +2 -0
- package/dist/adapters/backlogs/issue.js +13 -0
- package/dist/adapters/backlogs/issue.js.map +1 -0
- package/dist/adapters/backlogs/settings.types.d.ts +5 -0
- package/dist/adapters/backlogs/settings.types.js +2 -0
- package/dist/adapters/backlogs/settings.types.js.map +1 -0
- package/dist/application/activity-watchdog.d.ts +2 -0
- package/dist/application/activity-watchdog.js +38 -0
- package/dist/application/activity-watchdog.js.map +1 -0
- package/dist/application/agent-bootstrap.constants.d.ts +4 -0
- package/dist/application/agent-bootstrap.constants.js +6 -0
- package/dist/application/agent-bootstrap.constants.js.map +1 -0
- package/dist/application/agent-bootstrap.d.ts +3 -0
- package/dist/application/agent-bootstrap.js +28 -0
- package/dist/application/agent-bootstrap.js.map +1 -0
- package/dist/application/agent-output.d.ts +3 -0
- package/dist/application/agent-output.js +72 -0
- package/dist/application/agent-output.js.map +1 -0
- package/dist/application/agent-storage.d.ts +2 -0
- package/dist/application/agent-storage.js +4 -0
- package/dist/application/agent-storage.js.map +1 -0
- package/dist/application/agent-turn.d.ts +4 -0
- package/dist/application/agent-turn.js +58 -0
- package/dist/application/agent-turn.js.map +1 -0
- package/dist/application/attach.d.ts +3 -0
- package/dist/application/attach.js +42 -0
- package/dist/application/attach.js.map +1 -0
- package/dist/application/brief-renderer.d.ts +5 -0
- package/dist/application/brief-renderer.js +55 -0
- package/dist/application/brief-renderer.js.map +1 -0
- package/dist/application/campaign-integration.d.ts +2 -0
- package/dist/application/campaign-integration.js +44 -0
- package/dist/application/campaign-integration.js.map +1 -0
- package/dist/application/campaign-planner.d.ts +3 -0
- package/dist/application/campaign-planner.js +35 -0
- package/dist/application/campaign-planner.js.map +1 -0
- package/dist/application/campaign-worker.d.ts +3 -0
- package/dist/application/campaign-worker.js +54 -0
- package/dist/application/campaign-worker.js.map +1 -0
- package/dist/application/campaign.constants.d.ts +7 -0
- package/dist/application/campaign.constants.js +8 -0
- package/dist/application/campaign.constants.js.map +1 -0
- package/dist/application/campaign.d.ts +2 -32
- package/dist/application/campaign.js +23 -122
- package/dist/application/campaign.js.map +1 -1
- package/dist/application/campaign.types.d.ts +43 -0
- package/dist/application/campaign.types.js +2 -0
- package/dist/application/campaign.types.js.map +1 -0
- package/dist/application/continuation.d.ts +3 -0
- package/dist/application/continuation.js +16 -0
- package/dist/application/continuation.js.map +1 -0
- package/dist/application/dispatch-validation.d.ts +4 -0
- package/dist/application/dispatch-validation.js +34 -0
- package/dist/application/dispatch-validation.js.map +1 -0
- package/dist/application/dispatch.d.ts +4 -0
- package/dist/application/dispatch.js +85 -0
- package/dist/application/dispatch.js.map +1 -0
- package/dist/application/execution.constants.d.ts +13 -0
- package/dist/application/execution.constants.js +20 -0
- package/dist/application/execution.constants.js.map +1 -0
- package/dist/application/execution.d.ts +8 -47
- package/dist/application/execution.js +18 -228
- package/dist/application/execution.js.map +1 -1
- package/dist/application/execution.types.d.ts +54 -0
- package/dist/application/execution.types.js +2 -0
- package/dist/application/execution.types.js.map +1 -0
- package/dist/application/interactive-brief.d.ts +3 -2
- package/dist/application/interactive-brief.js.map +1 -1
- package/dist/application/interactive-brief.types.d.ts +1 -0
- package/dist/application/interactive-brief.types.js +2 -0
- package/dist/application/interactive-brief.types.js.map +1 -0
- package/dist/application/lifecycle-hooks.d.ts +3 -0
- package/dist/application/lifecycle-hooks.js +26 -0
- package/dist/application/lifecycle-hooks.js.map +1 -0
- package/dist/application/lifecycle.constants.d.ts +2 -0
- package/dist/application/lifecycle.constants.js +14 -0
- package/dist/application/lifecycle.constants.js.map +1 -0
- package/dist/application/observation.d.ts +1 -0
- package/dist/application/observation.js +7 -0
- package/dist/application/observation.js.map +1 -0
- package/dist/application/operation-gate.d.ts +2 -0
- package/dist/application/operation-gate.js +23 -0
- package/dist/application/operation-gate.js.map +1 -0
- package/dist/application/outpost.d.ts +5 -91
- package/dist/application/outpost.js +4 -628
- package/dist/application/outpost.js.map +1 -1
- package/dist/application/outpost.types.d.ts +86 -0
- package/dist/application/outpost.types.js +2 -0
- package/dist/application/outpost.types.js.map +1 -0
- package/dist/application/remote-apply.d.ts +2 -0
- package/dist/application/remote-apply.js +46 -0
- package/dist/application/remote-apply.js.map +1 -0
- package/dist/application/remote-backup.d.ts +2 -0
- package/dist/application/remote-backup.js +38 -0
- package/dist/application/remote-backup.js.map +1 -0
- package/dist/application/remote-download.d.ts +2 -0
- package/dist/application/remote-download.js +24 -0
- package/dist/application/remote-download.js.map +1 -0
- package/dist/application/remote-validation.d.ts +2 -0
- package/dist/application/remote-validation.js +62 -0
- package/dist/application/remote-validation.js.map +1 -0
- package/dist/application/remote-workspace.d.ts +4 -10
- package/dist/application/remote-workspace.js +28 -167
- package/dist/application/remote-workspace.js.map +1 -1
- package/dist/application/remote-workspace.types.d.ts +32 -0
- package/dist/application/remote-workspace.types.js +2 -0
- package/dist/application/remote-workspace.types.js.map +1 -0
- package/dist/application/sandbox-agents.d.ts +2 -0
- package/dist/application/sandbox-agents.js +54 -0
- package/dist/application/sandbox-agents.js.map +1 -0
- package/dist/application/sandbox-attach.d.ts +3 -0
- package/dist/application/sandbox-attach.js +48 -0
- package/dist/application/sandbox-attach.js.map +1 -0
- package/dist/application/sandbox-dispatch.d.ts +4 -0
- package/dist/application/sandbox-dispatch.js +124 -0
- package/dist/application/sandbox-dispatch.js.map +1 -0
- package/dist/application/sandbox-provision.d.ts +3 -0
- package/dist/application/sandbox-provision.js +108 -0
- package/dist/application/sandbox-provision.js.map +1 -0
- package/dist/application/sandbox-session.types.d.ts +38 -0
- package/dist/application/sandbox-session.types.js +2 -0
- package/dist/application/sandbox-session.types.js.map +1 -0
- package/dist/application/sandbox.d.ts +2 -0
- package/dist/application/sandbox.js +83 -0
- package/dist/application/sandbox.js.map +1 -0
- package/dist/application/startup-recovery.d.ts +3 -0
- package/dist/application/startup-recovery.js +25 -0
- package/dist/application/startup-recovery.js.map +1 -0
- package/dist/application/startup-recovery.types.d.ts +5 -0
- package/dist/application/startup-recovery.types.js +2 -0
- package/dist/application/startup-recovery.types.js.map +1 -0
- package/dist/application/tasks.d.ts +7 -17
- package/dist/application/tasks.js +1 -1
- package/dist/application/tasks.js.map +1 -1
- package/dist/application/tasks.types.d.ts +18 -0
- package/dist/application/tasks.types.js +2 -0
- package/dist/application/tasks.types.js.map +1 -0
- package/dist/application/workspace-fingerprint.d.ts +2 -0
- package/dist/application/workspace-fingerprint.js +25 -0
- package/dist/application/workspace-fingerprint.js.map +1 -0
- package/dist/application/workspace-registry.d.ts +3 -0
- package/dist/application/workspace-registry.js +2 -0
- package/dist/application/workspace-registry.js.map +1 -0
- package/dist/application/workspace.d.ts +2 -0
- package/dist/application/workspace.js +50 -0
- package/dist/application/workspace.js.map +1 -0
- package/dist/cli/commands.d.ts +1 -0
- package/dist/cli/commands.js +24 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/image-command.d.ts +2 -0
- package/dist/cli/image-command.js +13 -0
- package/dist/cli/image-command.js.map +1 -0
- package/dist/cli/image.constants.d.ts +9 -0
- package/dist/cli/image.constants.js +10 -0
- package/dist/cli/image.constants.js.map +1 -0
- package/dist/cli/image.d.ts +3 -0
- package/dist/cli/image.js +39 -0
- package/dist/cli/image.js.map +1 -0
- package/dist/cli/image.types.d.ts +8 -0
- package/dist/cli/image.types.js +2 -0
- package/dist/cli/image.types.js.map +1 -0
- package/dist/cli/init-command.d.ts +2 -0
- package/dist/cli/init-command.js +29 -0
- package/dist/cli/init-command.js.map +1 -0
- package/dist/cli/main.constants.d.ts +57 -0
- package/dist/cli/main.constants.js +35 -0
- package/dist/cli/main.constants.js.map +1 -0
- package/dist/cli/main.js +2 -86
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/main.types.d.ts +9 -0
- package/dist/cli/main.types.js +2 -0
- package/dist/cli/main.types.js.map +1 -0
- package/dist/cli/project-settings.d.ts +2 -0
- package/dist/cli/project-settings.js +36 -0
- package/dist/cli/project-settings.js.map +1 -0
- package/dist/cli/scaffold-files.d.ts +2 -0
- package/dist/cli/scaffold-files.js +27 -0
- package/dist/cli/scaffold-files.js.map +1 -0
- package/dist/cli/scaffold-validation.d.ts +2 -0
- package/dist/cli/scaffold-validation.js +11 -0
- package/dist/cli/scaffold-validation.js.map +1 -0
- package/dist/cli/scaffold.constants.d.ts +14 -0
- package/dist/cli/scaffold.constants.js +51 -0
- package/dist/cli/scaffold.constants.js.map +1 -0
- package/dist/cli/scaffold.d.ts +6 -28
- package/dist/cli/scaffold.js +14 -116
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/scaffold.types.d.ts +26 -0
- package/dist/cli/scaffold.types.js +2 -0
- package/dist/cli/scaffold.types.js.map +1 -0
- package/dist/cli/starters.d.ts +1 -1
- package/dist/cli/starters.js.map +1 -1
- package/dist/domain/agent-events.d.ts +2 -0
- package/dist/domain/agent-events.js +5 -0
- package/dist/domain/agent-events.js.map +1 -0
- package/dist/domain/agent.types.d.ts +81 -0
- package/dist/domain/agent.types.js +2 -0
- package/dist/domain/agent.types.js.map +1 -0
- package/dist/domain/backlog.d.ts +2 -15
- package/dist/domain/backlog.js.map +1 -1
- package/dist/domain/backlog.types.d.ts +15 -0
- package/dist/domain/backlog.types.js +2 -0
- package/dist/domain/backlog.types.js.map +1 -0
- package/dist/domain/command.types.d.ts +26 -0
- package/dist/domain/command.types.js +2 -0
- package/dist/domain/command.types.js.map +1 -0
- package/dist/domain/conversation.types.d.ts +20 -0
- package/dist/domain/conversation.types.js +2 -0
- package/dist/domain/conversation.types.js.map +1 -0
- package/dist/domain/errors.d.ts +2 -1
- package/dist/domain/errors.js.map +1 -1
- package/dist/domain/errors.types.d.ts +1 -0
- package/dist/domain/errors.types.js +2 -0
- package/dist/domain/errors.types.js.map +1 -0
- package/dist/domain/ports.d.ts +5 -183
- package/dist/domain/ports.js.map +1 -1
- package/dist/domain/prompts.d.ts +3 -21
- package/dist/domain/prompts.js.map +1 -1
- package/dist/domain/prompts.types.d.ts +22 -0
- package/dist/domain/prompts.types.js +2 -0
- package/dist/domain/prompts.types.js.map +1 -0
- package/dist/domain/response.d.ts +4 -29
- package/dist/domain/response.js.map +1 -1
- package/dist/domain/response.types.d.ts +29 -0
- package/dist/domain/response.types.js +2 -0
- package/dist/domain/response.types.js.map +1 -0
- package/dist/domain/sandbox.types.d.ts +31 -0
- package/dist/domain/sandbox.types.js +2 -0
- package/dist/domain/sandbox.types.js.map +1 -0
- package/dist/domain/usage.d.ts +2 -0
- package/dist/domain/usage.js +11 -0
- package/dist/domain/usage.js.map +1 -0
- package/dist/domain/workflow/failure.d.ts +5 -0
- package/dist/domain/workflow/failure.js +11 -0
- package/dist/domain/workflow/failure.js.map +1 -0
- package/dist/domain/workflow/task-runner.d.ts +2 -0
- package/dist/domain/workflow/task-runner.js +56 -0
- package/dist/domain/workflow/task-runner.js.map +1 -0
- package/dist/domain/workflow/task.d.ts +2 -0
- package/dist/domain/workflow/task.js +19 -0
- package/dist/domain/workflow/task.js.map +1 -0
- package/dist/domain/workflow/validation.d.ts +3 -0
- package/dist/domain/workflow/validation.js +30 -0
- package/dist/domain/workflow/validation.js.map +1 -0
- package/dist/domain/workflow/workflow-scheduler.d.ts +2 -0
- package/dist/domain/workflow/workflow-scheduler.js +71 -0
- package/dist/domain/workflow/workflow-scheduler.js.map +1 -0
- package/dist/domain/workflow/workflow-state.d.ts +2 -0
- package/dist/domain/workflow/workflow-state.js +69 -0
- package/dist/domain/workflow/workflow-state.js.map +1 -0
- package/dist/domain/workflow.d.ts +4 -67
- package/dist/domain/workflow.js +4 -224
- package/dist/domain/workflow.js.map +1 -1
- package/dist/domain/workflow.types.d.ts +77 -0
- package/dist/domain/workflow.types.js +2 -0
- package/dist/domain/workflow.types.js.map +1 -0
- package/dist/domain/workspace.types.d.ts +38 -0
- package/dist/domain/workspace.types.js +2 -0
- package/dist/domain/workspace.types.js.map +1 -0
- package/dist/index.d.ts +10 -10
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/conversations/capture.d.ts +4 -0
- package/dist/infrastructure/conversations/capture.js +77 -0
- package/dist/infrastructure/conversations/capture.js.map +1 -0
- package/dist/infrastructure/conversations/capture.types.d.ts +5 -0
- package/dist/infrastructure/conversations/capture.types.js +2 -0
- package/dist/infrastructure/conversations/capture.types.js.map +1 -0
- package/dist/infrastructure/conversations/claude-layout.d.ts +2 -0
- package/dist/infrastructure/conversations/claude-layout.js +18 -0
- package/dist/infrastructure/conversations/claude-layout.js.map +1 -0
- package/dist/infrastructure/conversations/codex-layout.d.ts +2 -0
- package/dist/infrastructure/conversations/codex-layout.js +17 -0
- package/dist/infrastructure/conversations/codex-layout.js.map +1 -0
- package/dist/infrastructure/conversations/conversation.constants.d.ts +1 -0
- package/dist/infrastructure/conversations/conversation.constants.js +2 -0
- package/dist/infrastructure/conversations/conversation.constants.js.map +1 -0
- package/dist/infrastructure/conversations/files.d.ts +1 -0
- package/dist/infrastructure/conversations/files.js +21 -0
- package/dist/infrastructure/conversations/files.js.map +1 -0
- package/dist/infrastructure/conversations/identity.d.ts +2 -0
- package/dist/infrastructure/conversations/identity.js +8 -0
- package/dist/infrastructure/conversations/identity.js.map +1 -0
- package/dist/infrastructure/conversations/layout.d.ts +3 -0
- package/dist/infrastructure/conversations/layout.js +7 -0
- package/dist/infrastructure/conversations/layout.js.map +1 -0
- package/dist/infrastructure/conversations/layout.types.d.ts +12 -0
- package/dist/infrastructure/conversations/layout.types.js +2 -0
- package/dist/infrastructure/conversations/layout.types.js.map +1 -0
- package/dist/infrastructure/conversations/locate.d.ts +2 -0
- package/dist/infrastructure/conversations/locate.js +18 -0
- package/dist/infrastructure/conversations/locate.js.map +1 -0
- package/dist/infrastructure/conversations/native-store.d.ts +3 -0
- package/dist/infrastructure/conversations/native-store.js +20 -0
- package/dist/infrastructure/conversations/native-store.js.map +1 -0
- package/dist/infrastructure/conversations/paths.d.ts +4 -0
- package/dist/infrastructure/conversations/paths.js +8 -0
- package/dist/infrastructure/conversations/paths.js.map +1 -0
- package/dist/infrastructure/conversations/relocate.d.ts +1 -0
- package/dist/infrastructure/conversations/relocate.js +44 -0
- package/dist/infrastructure/conversations/relocate.js.map +1 -0
- package/dist/infrastructure/conversations/restore.d.ts +3 -0
- package/dist/infrastructure/conversations/restore.js +35 -0
- package/dist/infrastructure/conversations/restore.js.map +1 -0
- package/dist/infrastructure/conversations.d.ts +14 -19
- package/dist/infrastructure/conversations.js +15 -205
- package/dist/infrastructure/conversations.js.map +1 -1
- package/dist/infrastructure/conversations.types.d.ts +6 -0
- package/dist/infrastructure/conversations.types.js +2 -0
- package/dist/infrastructure/conversations.types.js.map +1 -0
- package/dist/infrastructure/files.js +1 -1
- package/dist/infrastructure/files.js.map +1 -1
- package/dist/infrastructure/git/command.d.ts +1 -0
- package/dist/infrastructure/git/command.js +19 -0
- package/dist/infrastructure/git/command.js.map +1 -0
- package/dist/infrastructure/git/git.constants.d.ts +7 -0
- package/dist/infrastructure/git/git.constants.js +13 -0
- package/dist/infrastructure/git/git.constants.js.map +1 -0
- package/dist/infrastructure/git/history.d.ts +2 -0
- package/dist/infrastructure/git/history.js +13 -0
- package/dist/infrastructure/git/history.js.map +1 -0
- package/dist/infrastructure/git/lock.d.ts +1 -0
- package/dist/infrastructure/git/lock.js +36 -0
- package/dist/infrastructure/git/lock.js.map +1 -0
- package/dist/infrastructure/git/lock.types.d.ts +3 -0
- package/dist/infrastructure/git/lock.types.js +2 -0
- package/dist/infrastructure/git/lock.types.js.map +1 -0
- package/dist/infrastructure/git/managed-worktree.d.ts +2 -0
- package/dist/infrastructure/git/managed-worktree.js +79 -0
- package/dist/infrastructure/git/managed-worktree.js.map +1 -0
- package/dist/infrastructure/git/refresh-worktree.d.ts +1 -0
- package/dist/infrastructure/git/refresh-worktree.js +24 -0
- package/dist/infrastructure/git/refresh-worktree.js.map +1 -0
- package/dist/infrastructure/git/repository.d.ts +2 -0
- package/dist/infrastructure/git/repository.js +25 -0
- package/dist/infrastructure/git/repository.js.map +1 -0
- package/dist/infrastructure/git/workspace-lease.d.ts +3 -0
- package/dist/infrastructure/git/workspace-lease.js +66 -0
- package/dist/infrastructure/git/workspace-lease.js.map +1 -0
- package/dist/infrastructure/git/workspace.d.ts +2 -0
- package/dist/infrastructure/git/workspace.js +72 -0
- package/dist/infrastructure/git/workspace.js.map +1 -0
- package/dist/infrastructure/git/workspace.types.d.ts +24 -0
- package/dist/infrastructure/git/workspace.types.js +2 -0
- package/dist/infrastructure/git/workspace.types.js.map +1 -0
- package/dist/infrastructure/git.d.ts +4 -14
- package/dist/infrastructure/git.js +3 -303
- package/dist/infrastructure/git.js.map +1 -1
- package/dist/infrastructure/journal.d.ts +3 -10
- package/dist/infrastructure/journal.js +1 -1
- package/dist/infrastructure/journal.js.map +1 -1
- package/dist/infrastructure/journal.types.d.ts +10 -0
- package/dist/infrastructure/journal.types.js +2 -0
- package/dist/infrastructure/journal.types.js.map +1 -0
- package/dist/infrastructure/process.constants.d.ts +6 -0
- package/dist/infrastructure/process.constants.js +7 -0
- package/dist/infrastructure/process.constants.js.map +1 -0
- package/dist/infrastructure/process.d.ts +3 -2
- package/dist/infrastructure/process.js +5 -4
- package/dist/infrastructure/process.js.map +1 -1
- package/dist/infrastructure/process.types.d.ts +2 -0
- package/dist/infrastructure/process.types.js +2 -0
- package/dist/infrastructure/process.types.js.map +1 -0
- package/dist/infrastructure/reporter.d.ts +4 -10
- package/dist/infrastructure/reporter.js.map +1 -1
- package/dist/infrastructure/reporter.types.d.ts +9 -0
- package/dist/infrastructure/reporter.types.js +2 -0
- package/dist/infrastructure/reporter.types.js.map +1 -0
- package/dist/infrastructure/settings.d.ts +1 -1
- package/dist/infrastructure/settings.js.map +1 -1
- package/dist/infrastructure/shutdown.js +2 -6
- package/dist/infrastructure/shutdown.js.map +1 -1
- package/dist/infrastructure/terminal.d.ts +2 -10
- package/dist/infrastructure/terminal.js +2 -6
- package/dist/infrastructure/terminal.js.map +1 -1
- package/dist/infrastructure/terminal.types.d.ts +10 -0
- package/dist/infrastructure/terminal.types.js +2 -0
- package/dist/infrastructure/terminal.types.js.map +1 -0
- package/dist/infrastructure/transfer.constants.d.ts +3 -0
- package/dist/infrastructure/transfer.constants.js +2 -0
- package/dist/infrastructure/transfer.constants.js.map +1 -0
- package/dist/infrastructure/transfer.d.ts +1 -1
- package/dist/infrastructure/transfer.js +2 -1
- package/dist/infrastructure/transfer.js.map +1 -1
- package/dist/providers/agents.d.ts +3 -17
- package/dist/providers/agents.js +2 -203
- package/dist/providers/agents.js.map +1 -1
- package/dist/providers/backlogs.d.ts +3 -9
- package/dist/providers/backlogs.js +2 -81
- package/dist/providers/backlogs.js.map +1 -1
- package/dist/providers/cloud-files.constants.d.ts +1 -0
- package/dist/providers/cloud-files.constants.js +2 -0
- package/dist/providers/cloud-files.constants.js.map +1 -0
- package/dist/providers/cloud-files.d.ts +1 -1
- package/dist/providers/cloud-files.js +8 -6
- package/dist/providers/cloud-files.js.map +1 -1
- package/dist/providers/cloud.constants.d.ts +9 -0
- package/dist/providers/cloud.constants.js +10 -0
- package/dist/providers/cloud.constants.js.map +1 -0
- package/dist/providers/container-command.d.ts +3 -0
- package/dist/providers/container-command.js +77 -0
- package/dist/providers/container-command.js.map +1 -0
- package/dist/providers/container-files.d.ts +3 -0
- package/dist/providers/container-files.js +17 -0
- package/dist/providers/container-files.js.map +1 -0
- package/dist/providers/container-mounts.d.ts +3 -0
- package/dist/providers/container-mounts.js +63 -0
- package/dist/providers/container-mounts.js.map +1 -0
- package/dist/providers/container-plan.d.ts +2 -0
- package/dist/providers/container-plan.js +44 -0
- package/dist/providers/container-plan.js.map +1 -0
- package/dist/providers/container-preflight.d.ts +2 -0
- package/dist/providers/container-preflight.js +23 -0
- package/dist/providers/container-preflight.js.map +1 -0
- package/dist/providers/container.constants.d.ts +10 -0
- package/dist/providers/container.constants.js +11 -0
- package/dist/providers/container.constants.js.map +1 -0
- package/dist/providers/container.d.ts +5 -20
- package/dist/providers/container.js +42 -209
- package/dist/providers/container.js.map +1 -1
- package/dist/providers/container.types.d.ts +51 -0
- package/dist/providers/container.types.js +2 -0
- package/dist/providers/container.types.js.map +1 -0
- package/dist/providers/daytona-command.d.ts +3 -0
- package/dist/providers/daytona-command.js +86 -0
- package/dist/providers/daytona-command.js.map +1 -0
- package/dist/providers/daytona-files.d.ts +3 -0
- package/dist/providers/daytona-files.js +39 -0
- package/dist/providers/daytona-files.js.map +1 -0
- package/dist/providers/daytona.d.ts +4 -9
- package/dist/providers/daytona.js +12 -112
- package/dist/providers/daytona.js.map +1 -1
- package/dist/providers/daytona.types.d.ts +17 -0
- package/dist/providers/daytona.types.js +2 -0
- package/dist/providers/daytona.types.js.map +1 -0
- package/dist/providers/docker.d.ts +1 -1
- package/dist/providers/docker.js.map +1 -1
- package/dist/providers/factories.d.ts +2 -7
- package/dist/providers/factories.js.map +1 -1
- package/dist/providers/factories.types.d.ts +7 -0
- package/dist/providers/factories.types.js +2 -0
- package/dist/providers/factories.types.js.map +1 -0
- package/dist/providers/local.d.ts +3 -4
- package/dist/providers/local.js +1 -1
- package/dist/providers/local.js.map +1 -1
- package/dist/providers/local.types.d.ts +4 -0
- package/dist/providers/local.types.js +2 -0
- package/dist/providers/local.types.js.map +1 -0
- package/dist/providers/podman.d.ts +1 -1
- package/dist/providers/podman.js.map +1 -1
- package/dist/providers/vercel-command.d.ts +3 -0
- package/dist/providers/vercel-command.js +69 -0
- package/dist/providers/vercel-command.js.map +1 -0
- package/dist/providers/vercel-files.d.ts +3 -0
- package/dist/providers/vercel-files.js +54 -0
- package/dist/providers/vercel-files.js.map +1 -0
- package/dist/providers/vercel.d.ts +3 -7
- package/dist/providers/vercel.js +12 -111
- package/dist/providers/vercel.js.map +1 -1
- package/dist/providers/vercel.types.d.ts +16 -0
- package/dist/providers/vercel.types.js +2 -0
- package/dist/providers/vercel.types.js.map +1 -0
- package/dist/providers/versions.constants.d.ts +4 -0
- package/dist/providers/versions.constants.js +5 -0
- package/dist/providers/versions.constants.js.map +1 -0
- package/dist/providers/versions.d.ts +1 -4
- package/dist/providers/versions.js +1 -4
- package/dist/providers/versions.js.map +1 -1
- package/docs/architecture.fr.md +37 -0
- package/docs/architecture.md +49 -13
- package/docs/operations.md +1 -1
- package/package.json +10 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.1.2
|
|
4
|
+
|
|
5
|
+
- Match npm package repository metadata to the GitHub build origin for provenance verification. GitLab remains the canonical source repository.
|
|
6
|
+
|
|
7
|
+
## 1.1.1
|
|
8
|
+
|
|
9
|
+
- Separate Claude and Codex adapters, request builders and protocol decoders; preserve unknown events as raw observations.
|
|
10
|
+
- Split sandbox provisioning, operation ownership, dispatch, attachment, conversation storage and recovery into dedicated services.
|
|
11
|
+
- Separate campaign planning, issue execution and integration; isolate workflow state, retries and scheduling.
|
|
12
|
+
- Isolate container planning, mounts, commands and transfers, cloud command/file adapters, Git worktree management and remote synchronization stages.
|
|
13
|
+
- Extract contracts into `.types.ts` modules and configuration defaults into `.constants.ts` modules, without changing public entry points.
|
|
14
|
+
- Enforce dependency boundaries and type placement in CI, reject unused implementation declarations, and document the structure in English and French.
|
|
15
|
+
|
|
3
16
|
## 1.1.0
|
|
4
17
|
|
|
5
18
|
- Add typed issue campaigns with dynamic planning, bounded concurrency, per-issue branches, warm review, verified integration and tracker closure.
|
package/README.fr.md
CHANGED
|
@@ -26,7 +26,7 @@ npm pack
|
|
|
26
26
|
Installez l’archive obtenue dans votre dépôt cible, ou utilisez [GitHub Packages](https://github.com/elie-laloum/outpost/packages). La configuration du registre figure dans le [guide d’exploitation](docs/operations.md).
|
|
27
27
|
|
|
28
28
|
```sh
|
|
29
|
-
npm install --save-dev /chemin/elie-laloum-outpost-1.1.
|
|
29
|
+
npm install --save-dev /chemin/elie-laloum-outpost-1.1.2.tgz
|
|
30
30
|
npx outpost init --yes --agent codex --provider docker --template blank --build
|
|
31
31
|
```
|
|
32
32
|
|
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ npm pack
|
|
|
26
26
|
Install the resulting tarball in your target repository, or use the package from [GitHub Packages](https://github.com/elie-laloum/outpost/packages). Registry configuration is documented in [Operations](docs/operations.md).
|
|
27
27
|
|
|
28
28
|
```sh
|
|
29
|
-
npm install --save-dev /path/to/elie-laloum-outpost-1.1.
|
|
29
|
+
npm install --save-dev /path/to/elie-laloum-outpost-1.1.2.tgz
|
|
30
30
|
npx outpost init --yes --agent codex --provider docker --template blank --build
|
|
31
31
|
```
|
|
32
32
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { claudeEvents, claudeTranscriptUsage } from "./claude-events.js";
|
|
2
|
+
import { claudeRequest } from "./claude-request.js";
|
|
3
|
+
export function claude(settings = {}) {
|
|
4
|
+
return Object.freeze({
|
|
5
|
+
name: "claude",
|
|
6
|
+
conversations: "claude",
|
|
7
|
+
resumable: true,
|
|
8
|
+
capture: settings.saveConversations ?? true,
|
|
9
|
+
variables: Object.freeze({ ...settings.variables }),
|
|
10
|
+
request: (input) => claudeRequest(settings, input),
|
|
11
|
+
events: claudeEvents,
|
|
12
|
+
transcriptUsage: claudeTranscriptUsage,
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=claude-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-adapter.js","sourceRoot":"","sources":["../../../src/adapters/agents/claude-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,UAAU,MAAM,CAAC,WAA2B,EAAE;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,QAAQ,CAAC,iBAAiB,IAAI,IAAI;QAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;QAClD,MAAM,EAAE,YAAY;QACpB,eAAe,EAAE,qBAAqB;KAChB,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import type { AgentAdapter } from \"../../domain/agent.types.ts\";\nimport { claudeEvents, claudeTranscriptUsage } from \"./claude-events.ts\";\nimport { claudeRequest } from \"./claude-request.ts\";\nimport type { ClaudeSettings } from \"./settings.types.ts\";\n\nexport function claude(settings: ClaudeSettings = {}): AgentAdapter {\n return Object.freeze({\n name: \"claude\",\n conversations: \"claude\",\n resumable: true,\n capture: settings.saveConversations ?? true,\n variables: Object.freeze({ ...settings.variables }),\n request: (input) => claudeRequest(settings, input),\n events: claudeEvents,\n transcriptUsage: claudeTranscriptUsage,\n } satisfies AgentAdapter);\n}\n"]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { decodeEvent, decodeLine } from "./event-decoder.js";
|
|
2
|
+
import { asRecord, decodeRecord, numberOrZero } from "./protocol.js";
|
|
3
|
+
function tokens(value) {
|
|
4
|
+
const usage = asRecord(value);
|
|
5
|
+
return {
|
|
6
|
+
input: numberOrZero(usage.input_tokens),
|
|
7
|
+
cacheCreated: numberOrZero(usage.cache_creation_input_tokens),
|
|
8
|
+
cached: numberOrZero(usage.cache_read_input_tokens),
|
|
9
|
+
output: numberOrZero(usage.output_tokens),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function system(event) {
|
|
13
|
+
return typeof event.session_id === "string"
|
|
14
|
+
? [{ kind: "conversation", id: event.session_id }]
|
|
15
|
+
: [];
|
|
16
|
+
}
|
|
17
|
+
function assistant(event) {
|
|
18
|
+
const content = asRecord(event.message).content;
|
|
19
|
+
if (!Array.isArray(content))
|
|
20
|
+
return [];
|
|
21
|
+
return content.flatMap((part) => decodeEvent(asRecord(part), {
|
|
22
|
+
text: (block) => typeof block.text === "string"
|
|
23
|
+
? [{ kind: "text", text: block.text }]
|
|
24
|
+
: [],
|
|
25
|
+
tool_use: (block) => [
|
|
26
|
+
{ kind: "tool", name: String(block.name), input: block.input },
|
|
27
|
+
],
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
function result(event) {
|
|
31
|
+
const events = [];
|
|
32
|
+
if (!event.is_error && typeof event.result === "string")
|
|
33
|
+
events.push({ kind: "result", text: event.result });
|
|
34
|
+
if (event.usage)
|
|
35
|
+
events.push({ kind: "usage", tokens: tokens(event.usage) });
|
|
36
|
+
events.push(event.is_error
|
|
37
|
+
? {
|
|
38
|
+
kind: "failure",
|
|
39
|
+
message: String(event.result ?? JSON.stringify(event.errors) ?? "Agent failed"),
|
|
40
|
+
}
|
|
41
|
+
: { kind: "finished" });
|
|
42
|
+
return events;
|
|
43
|
+
}
|
|
44
|
+
export function claudeEvents(line) {
|
|
45
|
+
return decodeLine(line, {
|
|
46
|
+
system,
|
|
47
|
+
assistant,
|
|
48
|
+
result,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export function claudeTranscriptUsage(text) {
|
|
52
|
+
let usage;
|
|
53
|
+
for (const line of text.split(/\r?\n/)) {
|
|
54
|
+
const event = decodeRecord(line);
|
|
55
|
+
if (event?.type !== "assistant")
|
|
56
|
+
continue;
|
|
57
|
+
const message = asRecord(event.message);
|
|
58
|
+
if (message.usage)
|
|
59
|
+
usage = tokens(message.usage);
|
|
60
|
+
}
|
|
61
|
+
return usage;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=claude-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-events.js","sourceRoot":"","sources":["../../../src/adapters/agents/claude-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGrE,SAAS,MAAM,CAAC,KAAc;IAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,2BAA2B,CAAC;QAC7D,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,uBAAuB,CAAC;QACnD,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAqB;IACnC,OAAO,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACzC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QAClD,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,SAAS,CAAC,KAAqB;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CACd,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC5B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,CAAC,CAAC,EAAE;QACR,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;YACnB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SAC/D;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAqB;IACnC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QACrD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,IAAI,CACT,KAAK,CAAC,QAAQ;QACZ,CAAC,CAAC;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,MAAM,CACb,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,cAAc,CAC/D;SACF;QACH,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CACzB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,UAAU,CAAC,IAAI,EAAE;QACtB,MAAM;QACN,SAAS;QACT,MAAM;KACiB,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,KAAwB,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW;YAAE,SAAS;QAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO,CAAC,KAAK;YAAE,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import type { AgentEvent, Usage } from \"../../domain/agent.types.ts\";\nimport { decodeEvent, decodeLine } from \"./event-decoder.ts\";\nimport { asRecord, decodeRecord, numberOrZero } from \"./protocol.ts\";\nimport type { EventDecoders, ProtocolRecord } from \"./protocol.types.ts\";\n\nfunction tokens(value: unknown): Usage {\n const usage = asRecord(value);\n return {\n input: numberOrZero(usage.input_tokens),\n cacheCreated: numberOrZero(usage.cache_creation_input_tokens),\n cached: numberOrZero(usage.cache_read_input_tokens),\n output: numberOrZero(usage.output_tokens),\n };\n}\n\nfunction system(event: ProtocolRecord): AgentEvent[] {\n return typeof event.session_id === \"string\"\n ? [{ kind: \"conversation\", id: event.session_id }]\n : [];\n}\n\nfunction assistant(event: ProtocolRecord): AgentEvent[] {\n const content = asRecord(event.message).content;\n if (!Array.isArray(content)) return [];\n return content.flatMap((part) =>\n decodeEvent(asRecord(part), {\n text: (block) =>\n typeof block.text === \"string\"\n ? [{ kind: \"text\", text: block.text }]\n : [],\n tool_use: (block) => [\n { kind: \"tool\", name: String(block.name), input: block.input },\n ],\n }),\n );\n}\n\nfunction result(event: ProtocolRecord): AgentEvent[] {\n const events: AgentEvent[] = [];\n if (!event.is_error && typeof event.result === \"string\")\n events.push({ kind: \"result\", text: event.result });\n if (event.usage) events.push({ kind: \"usage\", tokens: tokens(event.usage) });\n events.push(\n event.is_error\n ? {\n kind: \"failure\",\n message: String(\n event.result ?? JSON.stringify(event.errors) ?? \"Agent failed\",\n ),\n }\n : { kind: \"finished\" },\n );\n return events;\n}\n\nexport function claudeEvents(line: string): AgentEvent[] {\n return decodeLine(line, {\n system,\n assistant,\n result,\n } satisfies EventDecoders);\n}\n\nexport function claudeTranscriptUsage(text: string): Usage | undefined {\n let usage: Usage | undefined;\n for (const line of text.split(/\\r?\\n/)) {\n const event = decodeRecord(line);\n if (event?.type !== \"assistant\") continue;\n const message = asRecord(event.message);\n if (message.usage) usage = tokens(message.usage);\n }\n return usage;\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentInput } from "../../domain/agent.types.ts";
|
|
2
|
+
import type { Command } from "../../domain/command.types.ts";
|
|
3
|
+
import type { ClaudeSettings } from "./settings.types.ts";
|
|
4
|
+
export declare function claudeRequest(settings: ClaudeSettings, input: AgentInput): Command;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { validateContinuation } from "./continuation.js";
|
|
2
|
+
export function claudeRequest(settings, input) {
|
|
3
|
+
validateContinuation(input);
|
|
4
|
+
const args = [];
|
|
5
|
+
if (!input.interactive)
|
|
6
|
+
args.push("--print", "--verbose", "--output-format", "stream-json");
|
|
7
|
+
if (settings.model)
|
|
8
|
+
args.push("--model", settings.model);
|
|
9
|
+
if (settings.reasoning)
|
|
10
|
+
args.push("--effort", settings.reasoning);
|
|
11
|
+
if (settings.permissions)
|
|
12
|
+
args.push("--permission-mode", settings.permissions);
|
|
13
|
+
if (!settings.permissions && !input.interactive)
|
|
14
|
+
args.push("--dangerously-skip-permissions");
|
|
15
|
+
if (input.continuation) {
|
|
16
|
+
args.push("--resume", input.continuation.id);
|
|
17
|
+
if (input.continuation.fork)
|
|
18
|
+
args.push("--fork-session");
|
|
19
|
+
}
|
|
20
|
+
if (input.interactive && input.text !== undefined)
|
|
21
|
+
args.push("--", input.text);
|
|
22
|
+
return {
|
|
23
|
+
executable: "claude",
|
|
24
|
+
arguments: args,
|
|
25
|
+
...(input.interactive
|
|
26
|
+
? { interactive: true }
|
|
27
|
+
: { stdin: input.text ?? "" }),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=claude-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-request.js","sourceRoot":"","sources":["../../../src/adapters/agents/claude-request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,MAAM,UAAU,aAAa,CAC3B,QAAwB,EACxB,KAAiB;IAEjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,WAAW;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACtE,IAAI,QAAQ,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,WAAW;QACtB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,WAAW;QAC7C,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO;QACL,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,IAAI;QACf,GAAG,CAAC,KAAK,CAAC,WAAW;YACnB,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE;YACvB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;KACjC,CAAC;AACJ,CAAC","sourcesContent":["import type { AgentInput } from \"../../domain/agent.types.ts\";\nimport type { Command } from \"../../domain/command.types.ts\";\nimport { validateContinuation } from \"./continuation.ts\";\nimport type { ClaudeSettings } from \"./settings.types.ts\";\n\nexport function claudeRequest(\n settings: ClaudeSettings,\n input: AgentInput,\n): Command {\n validateContinuation(input);\n const args: string[] = [];\n if (!input.interactive)\n args.push(\"--print\", \"--verbose\", \"--output-format\", \"stream-json\");\n if (settings.model) args.push(\"--model\", settings.model);\n if (settings.reasoning) args.push(\"--effort\", settings.reasoning);\n if (settings.permissions)\n args.push(\"--permission-mode\", settings.permissions);\n if (!settings.permissions && !input.interactive)\n args.push(\"--dangerously-skip-permissions\");\n if (input.continuation) {\n args.push(\"--resume\", input.continuation.id);\n if (input.continuation.fork) args.push(\"--fork-session\");\n }\n if (input.interactive && input.text !== undefined)\n args.push(\"--\", input.text);\n return {\n executable: \"claude\",\n arguments: args,\n ...(input.interactive\n ? { interactive: true }\n : { stdin: input.text ?? \"\" }),\n };\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { codexEvents } from "./codex-events.js";
|
|
2
|
+
import { codexRequest } from "./codex-request.js";
|
|
3
|
+
export function codex(settings = {}) {
|
|
4
|
+
return Object.freeze({
|
|
5
|
+
name: "codex",
|
|
6
|
+
conversations: "codex",
|
|
7
|
+
resumable: true,
|
|
8
|
+
capture: settings.saveConversations ?? true,
|
|
9
|
+
variables: Object.freeze({ ...settings.variables }),
|
|
10
|
+
request: (input) => codexRequest(settings, input),
|
|
11
|
+
events: codexEvents,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=codex-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-adapter.js","sourceRoot":"","sources":["../../../src/adapters/agents/codex-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,UAAU,KAAK,CAAC,WAA0B,EAAE;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,OAAO;QACb,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,QAAQ,CAAC,iBAAiB,IAAI,IAAI;QAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;QACjD,MAAM,EAAE,WAAW;KACG,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import type { AgentAdapter } from \"../../domain/agent.types.ts\";\nimport { codexEvents } from \"./codex-events.ts\";\nimport { codexRequest } from \"./codex-request.ts\";\nimport type { CodexSettings } from \"./settings.types.ts\";\n\nexport function codex(settings: CodexSettings = {}): AgentAdapter {\n return Object.freeze({\n name: \"codex\",\n conversations: \"codex\",\n resumable: true,\n capture: settings.saveConversations ?? true,\n variables: Object.freeze({ ...settings.variables }),\n request: (input) => codexRequest(settings, input),\n events: codexEvents,\n } satisfies AgentAdapter);\n}\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { decodeEvent, decodeLine } from "./event-decoder.js";
|
|
2
|
+
import { asRecord, numberOrZero } from "./protocol.js";
|
|
3
|
+
function conversation(event) {
|
|
4
|
+
return typeof event.thread_id === "string"
|
|
5
|
+
? [{ kind: "conversation", id: event.thread_id }]
|
|
6
|
+
: [];
|
|
7
|
+
}
|
|
8
|
+
function completedItem(event) {
|
|
9
|
+
return decodeEvent(asRecord(event.item), {
|
|
10
|
+
agent_message: (item) => typeof item.text === "string" ? [{ kind: "text", text: item.text }] : [],
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function startedItem(event) {
|
|
14
|
+
return decodeEvent(asRecord(event.item), {
|
|
15
|
+
command_execution: (item) => [
|
|
16
|
+
{ kind: "tool", name: "command", input: item.command },
|
|
17
|
+
],
|
|
18
|
+
mcp_tool_call: (item) => [
|
|
19
|
+
{ kind: "tool", name: String(item.tool), input: item.arguments },
|
|
20
|
+
],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function completedTurn(event) {
|
|
24
|
+
const usage = asRecord(event.usage);
|
|
25
|
+
return [
|
|
26
|
+
{
|
|
27
|
+
kind: "usage",
|
|
28
|
+
tokens: {
|
|
29
|
+
input: numberOrZero(usage.input_tokens),
|
|
30
|
+
cached: numberOrZero(usage.cached_input_tokens),
|
|
31
|
+
output: numberOrZero(usage.output_tokens),
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
{ kind: "finished" },
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
function failure(event) {
|
|
38
|
+
const error = typeof event.error === "string"
|
|
39
|
+
? event.error
|
|
40
|
+
: asRecord(event.error).message;
|
|
41
|
+
return [
|
|
42
|
+
{
|
|
43
|
+
kind: "failure",
|
|
44
|
+
message: String(event.message ?? error ?? "Agent failed"),
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
export function codexEvents(line) {
|
|
49
|
+
return decodeLine(line, {
|
|
50
|
+
"thread.started": conversation,
|
|
51
|
+
"item.completed": completedItem,
|
|
52
|
+
"item.started": startedItem,
|
|
53
|
+
"turn.completed": completedTurn,
|
|
54
|
+
error: failure,
|
|
55
|
+
"turn.failed": failure,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=codex-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-events.js","sourceRoot":"","sources":["../../../src/adapters/agents/codex-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGvD,SAAS,YAAY,CAAC,KAAqB;IACzC,OAAO,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACxC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,aAAa,CAAC,KAAqB;IAC1C,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACvC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CACtB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;KAC3E,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,KAAqB;IACxC,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACvC,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE;SACvD;QACD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACvB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;SACjE;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAqB;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO;QACL;YACE,IAAI,EAAE,OAAO;YACb,MAAM,EAAE;gBACN,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;gBACvC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBAC/C,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;aAC1C;SACF;QACD,EAAE,IAAI,EAAE,UAAU,EAAE;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAqB;IACpC,MAAM,KAAK,GACT,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC7B,CAAC,CAAC,KAAK,CAAC,KAAK;QACb,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IACpC,OAAO;QACL;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,IAAI,cAAc,CAAC;SAC1D;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,UAAU,CAAC,IAAI,EAAE;QACtB,gBAAgB,EAAE,YAAY;QAC9B,gBAAgB,EAAE,aAAa;QAC/B,cAAc,EAAE,WAAW;QAC3B,gBAAgB,EAAE,aAAa;QAC/B,KAAK,EAAE,OAAO;QACd,aAAa,EAAE,OAAO;KACvB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { AgentEvent } from \"../../domain/agent.types.ts\";\nimport { decodeEvent, decodeLine } from \"./event-decoder.ts\";\nimport { asRecord, numberOrZero } from \"./protocol.ts\";\nimport type { ProtocolRecord } from \"./protocol.types.ts\";\n\nfunction conversation(event: ProtocolRecord): AgentEvent[] {\n return typeof event.thread_id === \"string\"\n ? [{ kind: \"conversation\", id: event.thread_id }]\n : [];\n}\n\nfunction completedItem(event: ProtocolRecord): AgentEvent[] {\n return decodeEvent(asRecord(event.item), {\n agent_message: (item) =>\n typeof item.text === \"string\" ? [{ kind: \"text\", text: item.text }] : [],\n });\n}\n\nfunction startedItem(event: ProtocolRecord): AgentEvent[] {\n return decodeEvent(asRecord(event.item), {\n command_execution: (item) => [\n { kind: \"tool\", name: \"command\", input: item.command },\n ],\n mcp_tool_call: (item) => [\n { kind: \"tool\", name: String(item.tool), input: item.arguments },\n ],\n });\n}\n\nfunction completedTurn(event: ProtocolRecord): AgentEvent[] {\n const usage = asRecord(event.usage);\n return [\n {\n kind: \"usage\",\n tokens: {\n input: numberOrZero(usage.input_tokens),\n cached: numberOrZero(usage.cached_input_tokens),\n output: numberOrZero(usage.output_tokens),\n },\n },\n { kind: \"finished\" },\n ];\n}\n\nfunction failure(event: ProtocolRecord): AgentEvent[] {\n const error =\n typeof event.error === \"string\"\n ? event.error\n : asRecord(event.error).message;\n return [\n {\n kind: \"failure\",\n message: String(event.message ?? error ?? \"Agent failed\"),\n },\n ];\n}\n\nexport function codexEvents(line: string): AgentEvent[] {\n return decodeLine(line, {\n \"thread.started\": conversation,\n \"item.completed\": completedItem,\n \"item.started\": startedItem,\n \"turn.completed\": completedTurn,\n error: failure,\n \"turn.failed\": failure,\n });\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentInput } from "../../domain/agent.types.ts";
|
|
2
|
+
import type { Command } from "../../domain/command.types.ts";
|
|
3
|
+
import type { CodexSettings } from "./settings.types.ts";
|
|
4
|
+
export declare function codexRequest(settings: CodexSettings, input: AgentInput): Command;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { validateContinuation } from "./continuation.js";
|
|
2
|
+
export function codexRequest(settings, input) {
|
|
3
|
+
validateContinuation(input);
|
|
4
|
+
const args = [];
|
|
5
|
+
if (settings.approvalReviewer === "auto_review")
|
|
6
|
+
args.push("-a", "on-request", "-s", "danger-full-access", "-c", 'approvals_reviewer="auto_review"');
|
|
7
|
+
if (settings.approvalReviewer !== "auto_review" && !input.interactive)
|
|
8
|
+
args.push("--dangerously-bypass-approvals-and-sandbox");
|
|
9
|
+
if (settings.model)
|
|
10
|
+
args.push("--model", settings.model);
|
|
11
|
+
if (settings.reasoning)
|
|
12
|
+
args.push("-c", `model_reasoning_effort="${settings.reasoning}"`);
|
|
13
|
+
if (!input.interactive)
|
|
14
|
+
args.push("exec");
|
|
15
|
+
if (input.continuation)
|
|
16
|
+
args.push(input.continuation.fork ? "fork" : "resume", input.continuation.id);
|
|
17
|
+
if (!input.interactive)
|
|
18
|
+
args.push("--json", "-");
|
|
19
|
+
if (input.interactive && input.text !== undefined)
|
|
20
|
+
args.push("--", input.text);
|
|
21
|
+
return {
|
|
22
|
+
executable: "codex",
|
|
23
|
+
arguments: args,
|
|
24
|
+
...(input.interactive
|
|
25
|
+
? { interactive: true }
|
|
26
|
+
: { stdin: input.text ?? "" }),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=codex-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-request.js","sourceRoot":"","sources":["../../../src/adapters/agents/codex-request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,MAAM,UAAU,YAAY,CAC1B,QAAuB,EACvB,KAAiB;IAEjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,QAAQ,CAAC,gBAAgB,KAAK,aAAa;QAC7C,IAAI,CAAC,IAAI,CACP,IAAI,EACJ,YAAY,EACZ,IAAI,EACJ,oBAAoB,EACpB,IAAI,EACJ,kCAAkC,CACnC,CAAC;IACJ,IAAI,QAAQ,CAAC,gBAAgB,KAAK,aAAa,IAAI,CAAC,KAAK,CAAC,WAAW;QACnE,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,SAAS;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,2BAA2B,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,YAAY;QACpB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAC3C,KAAK,CAAC,YAAY,CAAC,EAAE,CACtB,CAAC;IACJ,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO;QACL,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,IAAI;QACf,GAAG,CAAC,KAAK,CAAC,WAAW;YACnB,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE;YACvB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;KACjC,CAAC;AACJ,CAAC","sourcesContent":["import type { AgentInput } from \"../../domain/agent.types.ts\";\nimport type { Command } from \"../../domain/command.types.ts\";\nimport { validateContinuation } from \"./continuation.ts\";\nimport type { CodexSettings } from \"./settings.types.ts\";\n\nexport function codexRequest(\n settings: CodexSettings,\n input: AgentInput,\n): Command {\n validateContinuation(input);\n const args: string[] = [];\n if (settings.approvalReviewer === \"auto_review\")\n args.push(\n \"-a\",\n \"on-request\",\n \"-s\",\n \"danger-full-access\",\n \"-c\",\n 'approvals_reviewer=\"auto_review\"',\n );\n if (settings.approvalReviewer !== \"auto_review\" && !input.interactive)\n args.push(\"--dangerously-bypass-approvals-and-sandbox\");\n if (settings.model) args.push(\"--model\", settings.model);\n if (settings.reasoning)\n args.push(\"-c\", `model_reasoning_effort=\"${settings.reasoning}\"`);\n if (!input.interactive) args.push(\"exec\");\n if (input.continuation)\n args.push(\n input.continuation.fork ? \"fork\" : \"resume\",\n input.continuation.id,\n );\n if (!input.interactive) args.push(\"--json\", \"-\");\n if (input.interactive && input.text !== undefined)\n args.push(\"--\", input.text);\n return {\n executable: \"codex\",\n arguments: args,\n ...(input.interactive\n ? { interactive: true }\n : { stdin: input.text ?? \"\" }),\n };\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuation.js","sourceRoot":"","sources":["../../../src/adapters/agents/continuation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,UAAU,oBAAoB,CAAC,KAAiB;IACpD,IAAI,KAAK,CAAC,YAAY;QACpB,SAAS,CACP,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAC9C,iCAAiC,CAClC,CAAC;AACN,CAAC","sourcesContent":["import type { AgentInput } from \"../../domain/agent.types.ts\";\nimport { invariant } from \"../../domain/errors.ts\";\n\nexport function validateContinuation(input: AgentInput): void {\n if (input.continuation)\n invariant(\n /^[A-Za-z0-9_-]+$/.test(input.continuation.id),\n \"Invalid conversation identifier\",\n );\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentEvent } from "../../domain/agent.types.ts";
|
|
2
|
+
import type { EventDecoders, ProtocolRecord } from "./protocol.types.ts";
|
|
3
|
+
export declare function decodeEvent(event: ProtocolRecord, handlers: EventDecoders): AgentEvent[];
|
|
4
|
+
export declare function decodeLine(line: string, handlers: EventDecoders): AgentEvent[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { decodeRecord } from "./protocol.js";
|
|
2
|
+
export function decodeEvent(event, handlers) {
|
|
3
|
+
const handler = typeof event.type === "string" && Object.hasOwn(handlers, event.type)
|
|
4
|
+
? handlers[event.type]
|
|
5
|
+
: undefined;
|
|
6
|
+
return handler?.(event) ?? [];
|
|
7
|
+
}
|
|
8
|
+
export function decodeLine(line, handlers) {
|
|
9
|
+
const event = decodeRecord(line);
|
|
10
|
+
if (!event)
|
|
11
|
+
return [{ kind: "raw", value: line }];
|
|
12
|
+
const events = decodeEvent(event, handlers);
|
|
13
|
+
return events.length ? events : [{ kind: "raw", value: event }];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=event-decoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-decoder.js","sourceRoot":"","sources":["../../../src/adapters/agents/event-decoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,UAAU,WAAW,CACzB,KAAqB,EACrB,QAAuB;IAEvB,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACtB,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,QAAuB;IAEvB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAClE,CAAC","sourcesContent":["import type { AgentEvent } from \"../../domain/agent.types.ts\";\nimport { decodeRecord } from \"./protocol.ts\";\nimport type { EventDecoders, ProtocolRecord } from \"./protocol.types.ts\";\n\nexport function decodeEvent(\n event: ProtocolRecord,\n handlers: EventDecoders,\n): AgentEvent[] {\n const handler =\n typeof event.type === \"string\" && Object.hasOwn(handlers, event.type)\n ? handlers[event.type]\n : undefined;\n return handler?.(event) ?? [];\n}\n\nexport function decodeLine(\n line: string,\n handlers: EventDecoders,\n): AgentEvent[] {\n const event = decodeRecord(line);\n if (!event) return [{ kind: \"raw\", value: line }];\n const events = decodeEvent(event, handlers);\n return events.length ? events : [{ kind: \"raw\", value: event }];\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function asRecord(value) {
|
|
2
|
+
return value !== null && typeof value === "object"
|
|
3
|
+
? value
|
|
4
|
+
: {};
|
|
5
|
+
}
|
|
6
|
+
export function numberOrZero(value) {
|
|
7
|
+
return typeof value === "number" ? value : 0;
|
|
8
|
+
}
|
|
9
|
+
export function decodeRecord(line) {
|
|
10
|
+
try {
|
|
11
|
+
return asRecord(JSON.parse(line));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/adapters/agents/protocol.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAChD,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY;IAEZ,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["export function asRecord(value: unknown): Record<string, unknown> {\n return value !== null && typeof value === \"object\"\n ? (value as Record<string, unknown>)\n : {};\n}\n\nexport function numberOrZero(value: unknown): number {\n return typeof value === \"number\" ? value : 0;\n}\n\nexport function decodeRecord(\n line: string,\n): Record<string, unknown> | undefined {\n try {\n return asRecord(JSON.parse(line));\n } catch {\n return undefined;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.types.js","sourceRoot":"","sources":["../../../src/adapters/agents/protocol.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { AgentEvent } from \"../../domain/agent.types.ts\";\n\nexport type ProtocolRecord = Record<string, unknown>;\nexport type EventDecoder = (event: ProtocolRecord) => AgentEvent[];\nexport type EventDecoders = Readonly<Partial<Record<string, EventDecoder>>>;\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Variables } from "../../domain/command.types.ts";
|
|
2
|
+
export interface CommonAgentSettings {
|
|
3
|
+
readonly model?: string;
|
|
4
|
+
readonly variables?: Variables;
|
|
5
|
+
readonly saveConversations?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface ClaudeSettings extends CommonAgentSettings {
|
|
8
|
+
readonly reasoning?: "low" | "medium" | "high" | "xhigh" | "max";
|
|
9
|
+
readonly permissions?: "default" | "acceptEdits" | "plan" | "auto" | "dontAsk" | "bypassPermissions";
|
|
10
|
+
}
|
|
11
|
+
export interface CodexSettings extends CommonAgentSettings {
|
|
12
|
+
readonly reasoning?: "low" | "medium" | "high" | "xhigh";
|
|
13
|
+
readonly approvalReviewer?: "user" | "auto_review";
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.types.js","sourceRoot":"","sources":["../../../src/adapters/agents/settings.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Variables } from \"../../domain/command.types.ts\";\n\nexport interface CommonAgentSettings {\n readonly model?: string;\n readonly variables?: Variables;\n readonly saveConversations?: boolean;\n}\n\nexport interface ClaudeSettings extends CommonAgentSettings {\n readonly reasoning?: \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n readonly permissions?:\n | \"default\"\n | \"acceptEdits\"\n | \"plan\"\n | \"auto\"\n | \"dontAsk\"\n | \"bypassPermissions\";\n}\n\nexport interface CodexSettings extends CommonAgentSettings {\n readonly reasoning?: \"low\" | \"medium\" | \"high\" | \"xhigh\";\n readonly approvalReviewer?: \"user\" | \"auto_review\";\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backlog.constants.js","sourceRoot":"","sources":["../../../src/adapters/backlogs/backlog.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,UAAU;CACxB,CAAC,CAAC","sourcesContent":["export const backlogDefaults = Object.freeze({\n deadlineMs: 60_000,\n retainBytes: 16_777_216,\n});\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Backlog } from "../../domain/backlog.types.ts";
|
|
2
|
+
import type { Executor } from "../../infrastructure/process.types.ts";
|
|
3
|
+
import type { BacklogSettings } from "./settings.types.ts";
|
|
4
|
+
export declare function beadsBacklog(settings?: BacklogSettings, executor?: Executor): Backlog;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { invariant } from "../../domain/errors.js";
|
|
2
|
+
import { cli } from "./cli.js";
|
|
3
|
+
import { issue } from "./issue.js";
|
|
4
|
+
export function beadsBacklog(settings = {}, executor) {
|
|
5
|
+
const run = cli("bd", settings, executor);
|
|
6
|
+
const identifier = (id) => {
|
|
7
|
+
invariant(/^[\w][\w.-]*$/.test(id), "Invalid Beads issue id");
|
|
8
|
+
return id;
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
async list(signal) {
|
|
12
|
+
const data = JSON.parse(await run([
|
|
13
|
+
"ready",
|
|
14
|
+
"--json",
|
|
15
|
+
"--limit",
|
|
16
|
+
"0",
|
|
17
|
+
...(settings.label ? ["--label", settings.label] : []),
|
|
18
|
+
], signal));
|
|
19
|
+
invariant(Array.isArray(data), "Invalid Beads backlog");
|
|
20
|
+
return data.map(issue);
|
|
21
|
+
},
|
|
22
|
+
async get(id, signal) {
|
|
23
|
+
const data = JSON.parse(await run(["show", identifier(id), "--json"], signal));
|
|
24
|
+
return issue(Array.isArray(data) ? data[0] : data);
|
|
25
|
+
},
|
|
26
|
+
async close(id, signal) {
|
|
27
|
+
await run(["close", identifier(id)], signal);
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=beads-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beads-adapter.js","sourceRoot":"","sources":["../../../src/adapters/backlogs/beads-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,UAAU,YAAY,CAC1B,WAA4B,EAAE,EAC9B,QAAmB;IAEnB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE;QAChC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,MAAM;YACf,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAC9B,MAAM,GAAG,CACP;gBACE,OAAO;gBACP,QAAQ;gBACR,SAAS;gBACT,GAAG;gBACH,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACvD,EACD,MAAM,CACP,CACF,CAAC;YACF,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACrB,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CACtD,CAAC;YACF,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM;YACpB,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { Backlog } from \"../../domain/backlog.types.ts\";\nimport { invariant } from \"../../domain/errors.ts\";\nimport type { Executor } from \"../../infrastructure/process.types.ts\";\nimport { cli } from \"./cli.ts\";\nimport { issue } from \"./issue.ts\";\nimport type { BacklogSettings } from \"./settings.types.ts\";\n\nexport function beadsBacklog(\n settings: BacklogSettings = {},\n executor?: Executor,\n): Backlog {\n const run = cli(\"bd\", settings, executor);\n const identifier = (id: string) => {\n invariant(/^[\\w][\\w.-]*$/.test(id), \"Invalid Beads issue id\");\n return id;\n };\n return {\n async list(signal) {\n const data: unknown = JSON.parse(\n await run(\n [\n \"ready\",\n \"--json\",\n \"--limit\",\n \"0\",\n ...(settings.label ? [\"--label\", settings.label] : []),\n ],\n signal,\n ),\n );\n invariant(Array.isArray(data), \"Invalid Beads backlog\");\n return data.map(issue);\n },\n async get(id, signal) {\n const data = JSON.parse(\n await run([\"show\", identifier(id), \"--json\"], signal),\n );\n return issue(Array.isArray(data) ? data[0] : data);\n },\n async close(id, signal) {\n await run([\"close\", identifier(id)], signal);\n },\n };\n}\n"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Executor } from "../../infrastructure/process.types.ts";
|
|
2
|
+
import type { BacklogSettings } from "./settings.types.ts";
|
|
3
|
+
export declare function cli(program: string, settings: BacklogSettings, executor?: Executor): (args: readonly string[], signal?: AbortSignal) => Promise<string>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { requireSuccess } from "../../infrastructure/process.js";
|
|
2
|
+
import { resolveVariables } from "../../infrastructure/settings.js";
|
|
3
|
+
import { backlogDefaults } from "./backlog.constants.js";
|
|
4
|
+
export function cli(program, settings, executor) {
|
|
5
|
+
const directory = settings.directory ?? process.cwd();
|
|
6
|
+
return async (args, signal) => {
|
|
7
|
+
signal?.throwIfAborted();
|
|
8
|
+
const variables = await resolveVariables(directory);
|
|
9
|
+
return (await requireSuccess({
|
|
10
|
+
executable: program,
|
|
11
|
+
arguments: args,
|
|
12
|
+
directory,
|
|
13
|
+
variables,
|
|
14
|
+
deadlineMs: settings.deadlineMs ?? backlogDefaults.deadlineMs,
|
|
15
|
+
retain: backlogDefaults.retainBytes,
|
|
16
|
+
...(signal ? { signal } : {}),
|
|
17
|
+
}, executor)).stdout;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/adapters/backlogs/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,UAAU,GAAG,CACjB,OAAe,EACf,QAAyB,EACzB,QAAmB;IAEnB,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtD,OAAO,KAAK,EAAE,IAAuB,EAAE,MAAoB,EAAE,EAAE;QAC7D,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACpD,OAAO,CACL,MAAM,cAAc,CAClB;YACE,UAAU,EAAE,OAAO;YACnB,SAAS,EAAE,IAAI;YACf,SAAS;YACT,SAAS;YACT,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,eAAe,CAAC,UAAU;YAC7D,MAAM,EAAE,eAAe,CAAC,WAAW;YACnC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,EACD,QAAQ,CACT,CACF,CAAC,MAAM,CAAC;IACX,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { requireSuccess } from \"../../infrastructure/process.ts\";\nimport type { Executor } from \"../../infrastructure/process.types.ts\";\nimport { resolveVariables } from \"../../infrastructure/settings.ts\";\nimport { backlogDefaults } from \"./backlog.constants.ts\";\nimport type { BacklogSettings } from \"./settings.types.ts\";\n\nexport function cli(\n program: string,\n settings: BacklogSettings,\n executor?: Executor,\n) {\n const directory = settings.directory ?? process.cwd();\n return async (args: readonly string[], signal?: AbortSignal) => {\n signal?.throwIfAborted();\n const variables = await resolveVariables(directory);\n return (\n await requireSuccess(\n {\n executable: program,\n arguments: args,\n directory,\n variables,\n deadlineMs: settings.deadlineMs ?? backlogDefaults.deadlineMs,\n retain: backlogDefaults.retainBytes,\n ...(signal ? { signal } : {}),\n },\n executor,\n )\n ).stdout;\n };\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Backlog } from "../../domain/backlog.types.ts";
|
|
2
|
+
import type { Executor } from "../../infrastructure/process.types.ts";
|
|
3
|
+
import type { BacklogSettings } from "./settings.types.ts";
|
|
4
|
+
export declare function githubBacklog(settings?: BacklogSettings, executor?: Executor): Backlog;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { invariant } from "../../domain/errors.js";
|
|
2
|
+
import { cli } from "./cli.js";
|
|
3
|
+
import { issue } from "./issue.js";
|
|
4
|
+
export function githubBacklog(settings = {}, executor) {
|
|
5
|
+
const run = cli("gh", settings, executor);
|
|
6
|
+
const identifier = (id) => {
|
|
7
|
+
invariant(/^[1-9]\d*$/.test(id), "GitHub issue id must be a positive number");
|
|
8
|
+
return id;
|
|
9
|
+
};
|
|
10
|
+
return {
|
|
11
|
+
async list(signal) {
|
|
12
|
+
const endpoint = `repos/{owner}/{repo}/issues?state=open&per_page=100${settings.label ? `&labels=${encodeURIComponent(settings.label)}` : ""}`;
|
|
13
|
+
const pages = JSON.parse(await run(["api", endpoint, "--paginate", "--slurp"], signal));
|
|
14
|
+
invariant(Array.isArray(pages) && pages.every(Array.isArray), "Invalid GitHub issue pages");
|
|
15
|
+
return pages
|
|
16
|
+
.flat()
|
|
17
|
+
.filter((item) => !item.pull_request)
|
|
18
|
+
.map(issue);
|
|
19
|
+
},
|
|
20
|
+
async get(id, signal) {
|
|
21
|
+
return issue(JSON.parse(await run(["issue", "view", identifier(id), "--json", "number,title,body"], signal)));
|
|
22
|
+
},
|
|
23
|
+
async close(id, signal) {
|
|
24
|
+
await run(["issue", "close", identifier(id), "--reason", "completed"], signal);
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=github-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-adapter.js","sourceRoot":"","sources":["../../../src/adapters/backlogs/github-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,UAAU,aAAa,CAC3B,WAA4B,EAAE,EAC9B,QAAmB;IAEnB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE;QAChC,SAAS,CACP,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EACrB,2CAA2C,CAC5C,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,MAAM;YACf,MAAM,QAAQ,GAAG,sDAAsD,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/I,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAC/B,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAC9D,CAAC;YACF,SAAS,CACP,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAClD,4BAA4B,CAC7B,CAAC;YACF,OAAO,KAAK;iBACT,IAAI,EAAE;iBACN,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;iBACpC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM;YAClB,OAAO,KAAK,CACV,IAAI,CAAC,KAAK,CACR,MAAM,GAAG,CACP,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,EAChE,MAAM,CACP,CACF,CACF,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM;YACpB,MAAM,GAAG,CACP,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,EAC3D,MAAM,CACP,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { Backlog } from \"../../domain/backlog.types.ts\";\nimport { invariant } from \"../../domain/errors.ts\";\nimport type { Executor } from \"../../infrastructure/process.types.ts\";\nimport { cli } from \"./cli.ts\";\nimport { issue } from \"./issue.ts\";\nimport type { BacklogSettings } from \"./settings.types.ts\";\n\nexport function githubBacklog(\n settings: BacklogSettings = {},\n executor?: Executor,\n): Backlog {\n const run = cli(\"gh\", settings, executor);\n const identifier = (id: string) => {\n invariant(\n /^[1-9]\\d*$/.test(id),\n \"GitHub issue id must be a positive number\",\n );\n return id;\n };\n return {\n async list(signal) {\n const endpoint = `repos/{owner}/{repo}/issues?state=open&per_page=100${settings.label ? `&labels=${encodeURIComponent(settings.label)}` : \"\"}`;\n const pages: unknown = JSON.parse(\n await run([\"api\", endpoint, \"--paginate\", \"--slurp\"], signal),\n );\n invariant(\n Array.isArray(pages) && pages.every(Array.isArray),\n \"Invalid GitHub issue pages\",\n );\n return pages\n .flat()\n .filter((item) => !item.pull_request)\n .map(issue);\n },\n async get(id, signal) {\n return issue(\n JSON.parse(\n await run(\n [\"issue\", \"view\", identifier(id), \"--json\", \"number,title,body\"],\n signal,\n ),\n ),\n );\n },\n async close(id, signal) {\n await run(\n [\"issue\", \"close\", identifier(id), \"--reason\", \"completed\"],\n signal,\n );\n },\n };\n}\n"]}
|