cloving 0.3.19 → 1.0.1
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/{LICENSE.md → LICENSE} +1 -1
- package/README.md +475 -182
- package/dist/src/authority/budgets.d.ts +12 -0
- package/dist/src/authority/budgets.js +42 -0
- package/dist/src/authority/commands.d.ts +7 -0
- package/dist/src/authority/commands.js +263 -0
- package/dist/src/authority/details.d.ts +28 -0
- package/dist/src/authority/details.js +33 -0
- package/dist/src/authority/dispatch-decision.d.ts +40 -0
- package/dist/src/authority/dispatch-decision.js +47 -0
- package/dist/src/authority/effect-requests.d.ts +2 -0
- package/dist/src/authority/effect-requests.js +139 -0
- package/dist/src/authority/effect-results.d.ts +4 -0
- package/dist/src/authority/effect-results.js +236 -0
- package/dist/src/authority/events.d.ts +2 -0
- package/dist/src/authority/events.js +45 -0
- package/dist/src/authority/gate-reduction.d.ts +8 -0
- package/dist/src/authority/gate-reduction.js +109 -0
- package/dist/src/authority/gates.d.ts +48 -0
- package/dist/src/authority/gates.js +77 -0
- package/dist/src/authority/history-state.d.ts +15 -0
- package/dist/src/authority/history-state.js +61 -0
- package/dist/src/authority/history.d.ts +13 -0
- package/dist/src/authority/history.js +37 -0
- package/dist/src/authority/instants.d.ts +3 -0
- package/dist/src/authority/instants.js +38 -0
- package/dist/src/authority/leases.d.ts +15 -0
- package/dist/src/authority/leases.js +113 -0
- package/dist/src/authority/operations.d.ts +101 -0
- package/dist/src/authority/operations.js +75 -0
- package/dist/src/authority/reconciliation.d.ts +27 -0
- package/dist/src/authority/reconciliation.js +147 -0
- package/dist/src/authority/reducer.d.ts +41 -0
- package/dist/src/authority/reducer.js +139 -0
- package/dist/src/authority/reduction-state.d.ts +36 -0
- package/dist/src/authority/reduction-state.js +68 -0
- package/dist/src/authority/reduction.d.ts +6 -0
- package/dist/src/authority/reduction.js +160 -0
- package/dist/src/authority/status-closure.d.ts +4 -0
- package/dist/src/authority/status-closure.js +57 -0
- package/dist/src/authority/status-effects.d.ts +17 -0
- package/dist/src/authority/status-effects.js +43 -0
- package/dist/src/authority/status-input.d.ts +45 -0
- package/dist/src/authority/status-input.js +9 -0
- package/dist/src/authority/status.d.ts +32 -0
- package/dist/src/authority/status.js +256 -0
- package/dist/src/authority/stop-sequence.d.ts +37 -0
- package/dist/src/authority/stop-sequence.js +91 -0
- package/dist/src/authority/transitions.d.ts +63 -0
- package/dist/src/authority/transitions.js +122 -0
- package/dist/src/broker/actor/adapter-calls.d.ts +13 -0
- package/dist/src/broker/actor/adapter-calls.js +34 -0
- package/dist/src/broker/actor/adapter-outcomes.d.ts +28 -0
- package/dist/src/broker/actor/adapter-outcomes.js +80 -0
- package/dist/src/broker/actor/authority-actor.d.ts +25 -0
- package/dist/src/broker/actor/authority-actor.js +169 -0
- package/dist/src/broker/actor/authority-changes.d.ts +31 -0
- package/dist/src/broker/actor/authority-changes.js +46 -0
- package/dist/src/broker/actor/authority-connection.d.ts +15 -0
- package/dist/src/broker/actor/authority-connection.js +44 -0
- package/dist/src/broker/actor/authority-conversion.d.ts +10 -0
- package/dist/src/broker/actor/authority-conversion.js +72 -0
- package/dist/src/broker/actor/authority-delivery.d.ts +13 -0
- package/dist/src/broker/actor/authority-delivery.js +162 -0
- package/dist/src/broker/actor/authority-logger.d.ts +2 -0
- package/dist/src/broker/actor/authority-logger.js +19 -0
- package/dist/src/broker/actor/authority-policy.d.ts +9 -0
- package/dist/src/broker/actor/authority-policy.js +11 -0
- package/dist/src/broker/actor/authority-queries.d.ts +45 -0
- package/dist/src/broker/actor/authority-queries.js +85 -0
- package/dist/src/broker/actor/authority-receipts.d.ts +28 -0
- package/dist/src/broker/actor/authority-receipts.js +84 -0
- package/dist/src/broker/actor/authority-release.d.ts +13 -0
- package/dist/src/broker/actor/authority-release.js +69 -0
- package/dist/src/broker/actor/authority-runtime.d.ts +60 -0
- package/dist/src/broker/actor/authority-runtime.js +204 -0
- package/dist/src/broker/actor/authority-session.d.ts +65 -0
- package/dist/src/broker/actor/authority-session.js +252 -0
- package/dist/src/broker/actor/authority-settings.d.ts +33 -0
- package/dist/src/broker/actor/authority-settings.js +63 -0
- package/dist/src/broker/actor/authority-upgrades.d.ts +16 -0
- package/dist/src/broker/actor/authority-upgrades.js +12 -0
- package/dist/src/broker/actor/authority-watchdog.d.ts +14 -0
- package/dist/src/broker/actor/authority-watchdog.js +41 -0
- package/dist/src/broker/actor/authority.d.ts +14 -0
- package/dist/src/broker/actor/authority.js +115 -0
- package/dist/src/broker/actor/delivery-intents.d.ts +68 -0
- package/dist/src/broker/actor/delivery-intents.js +77 -0
- package/dist/src/broker/actor/delivery-plan.d.ts +2 -0
- package/dist/src/broker/actor/delivery-plan.js +109 -0
- package/dist/src/broker/actor/delivery-results.d.ts +11 -0
- package/dist/src/broker/actor/delivery-results.js +63 -0
- package/dist/src/broker/actor/effect-delivery.d.ts +19 -0
- package/dist/src/broker/actor/effect-delivery.js +118 -0
- package/dist/src/broker/actor/effect-plan.d.ts +41 -0
- package/dist/src/broker/actor/effect-plan.js +173 -0
- package/dist/src/broker/actor/effect-queries.d.ts +27 -0
- package/dist/src/broker/actor/effect-queries.js +80 -0
- package/dist/src/broker/actor/effect-turn.d.ts +25 -0
- package/dist/src/broker/actor/effect-turn.js +84 -0
- package/dist/src/broker/actor/pin-check.d.ts +6 -0
- package/dist/src/broker/actor/pin-check.js +12 -0
- package/dist/src/broker/actor/runtime-parts.d.ts +23 -0
- package/dist/src/broker/actor/runtime-parts.js +34 -0
- package/dist/src/broker/actor/stop-plan.d.ts +20 -0
- package/dist/src/broker/actor/stop-plan.js +46 -0
- package/dist/src/broker/actor/stop-turn.d.ts +17 -0
- package/dist/src/broker/actor/stop-turn.js +42 -0
- package/dist/src/broker/actor/turn-draft.d.ts +31 -0
- package/dist/src/broker/actor/turn-draft.js +138 -0
- package/dist/src/broker/actor/turn-plan.d.ts +17 -0
- package/dist/src/broker/actor/turn-plan.js +136 -0
- package/dist/src/broker/actor/turn-refusals.d.ts +8 -0
- package/dist/src/broker/actor/turn-refusals.js +35 -0
- package/dist/src/broker/actor/turn-staging.d.ts +78 -0
- package/dist/src/broker/actor/turn-staging.js +34 -0
- package/dist/src/broker/actor/turn-state.d.ts +34 -0
- package/dist/src/broker/actor/turn-state.js +208 -0
- package/dist/src/broker/authority-admission.d.ts +21 -0
- package/dist/src/broker/authority-admission.js +70 -0
- package/dist/src/broker/authority-restore.d.ts +30 -0
- package/dist/src/broker/authority-restore.js +165 -0
- package/dist/src/broker/decision-restore.d.ts +16 -0
- package/dist/src/broker/decision-restore.js +158 -0
- package/dist/src/broker/decision-upgrade.d.ts +3 -0
- package/dist/src/broker/decision-upgrade.js +12 -0
- package/dist/src/broker/effect-restore.d.ts +20 -0
- package/dist/src/broker/effect-restore.js +111 -0
- package/dist/src/broker/effect-upgrade.d.ts +3 -0
- package/dist/src/broker/effect-upgrade.js +9 -0
- package/dist/src/broker/operation-digest.d.ts +1 -0
- package/dist/src/broker/operation-digest.js +4 -0
- package/dist/src/broker/socket-address.d.ts +9 -0
- package/dist/src/broker/socket-address.js +14 -0
- package/dist/src/broker/workflow-pin.d.ts +2 -0
- package/dist/src/broker/workflow-pin.js +5 -0
- package/dist/src/chats/destination.d.ts +4 -0
- package/dist/src/chats/destination.js +94 -0
- package/dist/src/chats/import.d.ts +13 -0
- package/dist/src/chats/import.js +71 -0
- package/dist/src/chats/normalize.d.ts +20 -0
- package/dist/src/chats/normalize.js +139 -0
- package/dist/src/chats/reader.d.ts +15 -0
- package/dist/src/chats/reader.js +87 -0
- package/dist/src/cli/arguments.d.ts +23 -0
- package/dist/src/cli/arguments.js +154 -0
- package/dist/src/cli/client.d.ts +15 -0
- package/dist/src/cli/client.js +122 -0
- package/dist/src/cli/commands.d.ts +14 -0
- package/dist/src/cli/commands.js +253 -0
- package/dist/src/cli/main.d.ts +1 -0
- package/dist/src/cli/main.js +80 -0
- package/dist/src/cli/render.d.ts +8 -0
- package/dist/src/cli/render.js +186 -0
- package/dist/src/cli/runtime-arguments.d.ts +73 -0
- package/dist/src/cli/runtime-arguments.js +248 -0
- package/dist/src/cli/runtime-directory.d.ts +4 -0
- package/dist/src/cli/runtime-directory.js +25 -0
- package/dist/src/cli/toolchain.d.ts +3 -0
- package/dist/src/cli/toolchain.js +74 -0
- package/dist/src/cli/usage.d.ts +4 -0
- package/dist/src/cli/usage.js +124 -0
- package/dist/src/cli/validate.d.ts +38 -0
- package/dist/src/cli/validate.js +116 -0
- package/dist/src/cli/watch-board-view.d.ts +22 -0
- package/dist/src/cli/watch-board-view.js +128 -0
- package/dist/src/cli/watch-board.d.ts +15 -0
- package/dist/src/cli/watch-board.js +174 -0
- package/dist/src/cli/watch-element.d.ts +11 -0
- package/dist/src/cli/watch-element.js +6 -0
- package/dist/src/cli/watch-model.d.ts +29 -0
- package/dist/src/cli/watch-model.js +261 -0
- package/dist/src/cli/watch-navigation.d.ts +9 -0
- package/dist/src/cli/watch-navigation.js +40 -0
- package/dist/src/cli/watch-page.d.ts +1 -0
- package/dist/src/cli/watch-page.js +272 -0
- package/dist/src/cli/watch-paths.d.ts +2 -0
- package/dist/src/cli/watch-paths.js +52 -0
- package/dist/src/cli/watch-phases.d.ts +7 -0
- package/dist/src/cli/watch-phases.js +148 -0
- package/dist/src/cli/watch-reads.d.ts +28 -0
- package/dist/src/cli/watch-reads.js +244 -0
- package/dist/src/cli/watch-render.d.ts +139 -0
- package/dist/src/cli/watch-render.js +95 -0
- package/dist/src/cli/watch-server.d.ts +10 -0
- package/dist/src/cli/watch-server.js +176 -0
- package/dist/src/cli/watch-stream.d.ts +11 -0
- package/dist/src/cli/watch-stream.js +128 -0
- package/dist/src/cli/watch-turn.d.ts +29 -0
- package/dist/src/cli/watch-turn.js +130 -0
- package/dist/src/cli/watch-view.d.ts +39 -0
- package/dist/src/cli/watch-view.js +223 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +62 -0
- package/dist/src/daemon/claude-turn.d.ts +28 -0
- package/dist/src/daemon/claude-turn.js +135 -0
- package/dist/src/daemon/claude-worker.d.ts +26 -0
- package/dist/src/daemon/claude-worker.js +224 -0
- package/dist/src/daemon/codex-stream.d.ts +4 -0
- package/dist/src/daemon/codex-stream.js +113 -0
- package/dist/src/daemon/daemon.d.ts +46 -0
- package/dist/src/daemon/daemon.js +186 -0
- package/dist/src/daemon/delivery-router.d.ts +10 -0
- package/dist/src/daemon/delivery-router.js +34 -0
- package/dist/src/daemon/github-calls.d.ts +29 -0
- package/dist/src/daemon/github-calls.js +127 -0
- package/dist/src/daemon/github-issue-methods.d.ts +3 -0
- package/dist/src/daemon/github-issue-methods.js +99 -0
- package/dist/src/daemon/github-issue-privacy.d.ts +6 -0
- package/dist/src/daemon/github-issue-privacy.js +131 -0
- package/dist/src/daemon/github-merge.d.ts +18 -0
- package/dist/src/daemon/github-merge.js +259 -0
- package/dist/src/daemon/github-methods.d.ts +5 -0
- package/dist/src/daemon/github-methods.js +198 -0
- package/dist/src/daemon/github-operation.d.ts +38 -0
- package/dist/src/daemon/github-operation.js +57 -0
- package/dist/src/daemon/github-worker.d.ts +17 -0
- package/dist/src/daemon/github-worker.js +281 -0
- package/dist/src/daemon/host-environment.d.ts +8 -0
- package/dist/src/daemon/host-environment.js +14 -0
- package/dist/src/daemon/issue-queue.d.ts +9 -0
- package/dist/src/daemon/issue-queue.js +163 -0
- package/dist/src/daemon/notify-message.d.ts +14 -0
- package/dist/src/daemon/notify-message.js +48 -0
- package/dist/src/daemon/notify.d.ts +12 -0
- package/dist/src/daemon/notify.js +161 -0
- package/dist/src/daemon/operation-journal.d.ts +42 -0
- package/dist/src/daemon/operation-journal.js +53 -0
- package/dist/src/daemon/ticket-registration.d.ts +33 -0
- package/dist/src/daemon/ticket-registration.js +177 -0
- package/dist/src/daemon/ticket-source.d.ts +17 -0
- package/dist/src/daemon/ticket-source.js +36 -0
- package/dist/src/daemon/work-tree.d.ts +26 -0
- package/dist/src/daemon/work-tree.js +206 -0
- package/dist/src/effect-authorization.d.ts +21 -0
- package/dist/src/effect-authorization.js +14 -0
- package/dist/src/execution-pin.d.ts +4 -0
- package/dist/src/execution-pin.js +68 -0
- package/dist/src/host/start-delivery.d.ts +41 -0
- package/dist/src/host/start-delivery.js +68 -0
- package/dist/src/host/step-bridge-host.d.ts +79 -0
- package/dist/src/host/step-bridge-host.js +205 -0
- package/dist/src/host/step-claims.d.ts +31 -0
- package/dist/src/host/step-claims.js +85 -0
- package/dist/src/host/world-host.d.ts +21 -0
- package/dist/src/host/world-host.js +51 -0
- package/dist/src/host/world-reconciliation.d.ts +37 -0
- package/dist/src/host/world-reconciliation.js +75 -0
- package/dist/src/host/world-runs.d.ts +14 -0
- package/dist/src/host/world-runs.js +61 -0
- package/dist/src/operation-identity.d.ts +7 -0
- package/dist/src/operation-identity.js +59 -0
- package/dist/src/protocol.d.ts +35 -0
- package/dist/src/protocol.js +64 -0
- package/dist/src/resource-files.d.ts +1 -0
- package/dist/src/resource-files.js +29 -0
- package/dist/src/service/changes.d.ts +11 -0
- package/dist/src/service/changes.js +32 -0
- package/dist/src/service/decision-handler.d.ts +9 -0
- package/dist/src/service/decision-handler.js +233 -0
- package/dist/src/service/event-handler.d.ts +10 -0
- package/dist/src/service/event-handler.js +70 -0
- package/dist/src/service/expiry.d.ts +13 -0
- package/dist/src/service/expiry.js +53 -0
- package/dist/src/service/gateway.d.ts +21 -0
- package/dist/src/service/gateway.js +120 -0
- package/dist/src/service/registry.d.ts +40 -0
- package/dist/src/service/registry.js +13 -0
- package/dist/src/service/replies.d.ts +26 -0
- package/dist/src/service/replies.js +56 -0
- package/dist/src/service/run-handlers.d.ts +4 -0
- package/dist/src/service/run-handlers.js +271 -0
- package/dist/src/service/service.d.ts +58 -0
- package/dist/src/service/service.js +212 -0
- package/dist/src/service/submission-handler.d.ts +4 -0
- package/dist/src/service/submission-handler.js +206 -0
- package/dist/src/service/transport.d.ts +16 -0
- package/dist/src/service/transport.js +141 -0
- package/dist/src/service/worker-port.d.ts +85 -0
- package/dist/src/service/worker-port.js +126 -0
- package/dist/src/step-bridge.d.ts +57 -0
- package/dist/src/step-bridge.js +4 -0
- package/dist/src/steps/decision-gate.d.ts +2 -0
- package/dist/src/steps/decision-gate.js +8 -0
- package/dist/src/steps/load-cycle.d.ts +10 -0
- package/dist/src/steps/load-cycle.js +11 -0
- package/dist/src/steps/protected-effect.d.ts +2 -0
- package/dist/src/steps/protected-effect.js +8 -0
- package/dist/src/storage/decision-rows.d.ts +54 -0
- package/dist/src/storage/decision-rows.js +72 -0
- package/dist/src/storage/decision-snapshots.d.ts +17 -0
- package/dist/src/storage/decision-snapshots.js +25 -0
- package/dist/src/storage/domain-changes.d.ts +48 -0
- package/dist/src/storage/domain-changes.js +213 -0
- package/dist/src/storage/domain-rows.d.ts +85 -0
- package/dist/src/storage/domain-rows.js +129 -0
- package/dist/src/storage/domain-schema.d.ts +32 -0
- package/dist/src/storage/domain-schema.js +193 -0
- package/dist/src/storage/effect-changes.d.ts +5 -0
- package/dist/src/storage/effect-changes.js +105 -0
- package/dist/src/storage/effect-rows.d.ts +67 -0
- package/dist/src/storage/effect-rows.js +74 -0
- package/dist/src/storage/effect-schema.d.ts +1 -0
- package/dist/src/storage/effect-schema.js +59 -0
- package/dist/src/storage/statements.d.ts +9 -0
- package/dist/src/storage/statements.js +8 -0
- package/dist/src/submission.d.ts +42 -0
- package/dist/src/submission.js +71 -0
- package/dist/src/turn-profile.d.ts +13 -0
- package/dist/src/turn-profile.js +100 -0
- package/dist/src/workflow-admission.d.ts +45 -0
- package/dist/src/workflow-admission.js +151 -0
- package/dist/src/workflow-contracts.d.ts +27 -0
- package/dist/src/workflow-contracts.js +88 -0
- package/dist/src/workflow-declaration.d.ts +11 -0
- package/dist/src/workflow-declaration.js +57 -0
- package/dist/src/workflow-resources.d.ts +8 -0
- package/dist/src/workflow-resources.js +14 -0
- package/dist/src/workflows.d.ts +5 -0
- package/dist/src/workflows.js +3 -0
- package/dist/tools/compile-workflows.d.ts +1 -0
- package/dist/tools/compile-workflows.js +33 -0
- package/dist/tools/self-host-processes.d.ts +10 -0
- package/dist/tools/self-host-processes.js +151 -0
- package/dist/tools/self-host-workflows.d.ts +15 -0
- package/dist/tools/self-host-workflows.js +78 -0
- package/dist/tools/self-host.d.ts +1 -0
- package/dist/tools/self-host.js +261 -0
- package/dist/tools/self-update-host.d.ts +6 -0
- package/dist/tools/self-update-host.js +41 -0
- package/dist/tools/self-update.d.ts +10 -0
- package/dist/tools/self-update.js +105 -0
- package/dist/tools/workflow-manifest.d.ts +3 -0
- package/dist/tools/workflow-manifest.js +34 -0
- package/dist/workflows/develop-prd.d.ts +7 -0
- package/dist/workflows/develop-prd.js +97 -0
- package/dist/workflows/develop-ticket.d.ts +15 -0
- package/dist/workflows/develop-ticket.js +301 -0
- package/dist/workflows/issue-labels.d.ts +14 -0
- package/dist/workflows/issue-labels.js +36 -0
- package/package.json +82 -75
- package/.DS_Store +0 -0
- package/.aider.chat.history.md +0 -16978
- package/.aider.input.history +0 -15
- package/.aider.tags.cache.v3/cache.db +0 -0
- package/.aider.tags.cache.v3/cache.db-shm +0 -0
- package/.aider.tags.cache.v3/cache.db-wal +0 -0
- package/.cursorrules +0 -77
- package/.github/workflows/auto-release.yml +0 -83
- package/.github/workflows/ci.yml +0 -32
- package/.github/workflows/npm-publish.yml +0 -34
- package/.gitignore +0 -67
- package/.husky/_/.gitignore +0 -1
- package/.husky/_/applypatch-msg +0 -2
- package/.husky/_/commit-msg +0 -2
- package/.husky/_/h +0 -22
- package/.husky/_/husky.sh +0 -9
- package/.husky/_/post-applypatch +0 -2
- package/.husky/_/post-checkout +0 -2
- package/.husky/_/post-commit +0 -2
- package/.husky/_/post-merge +0 -2
- package/.husky/_/post-rewrite +0 -2
- package/.husky/_/pre-applypatch +0 -2
- package/.husky/_/pre-auto-gc +0 -2
- package/.husky/_/pre-commit +0 -2
- package/.husky/_/pre-merge-commit +0 -2
- package/.husky/_/pre-push +0 -2
- package/.husky/_/pre-rebase +0 -2
- package/.husky/_/prepare-commit-msg +0 -2
- package/.husky/pre-commit +0 -1
- package/.husky/pre-push +0 -1
- package/.prettierrc.json +0 -7
- package/.tool-versions +0 -2
- package/SECURITY.md +0 -15
- package/cloving.json +0 -67
- package/dist/abstract_gpt/index.js +0 -55
- package/dist/cloving_gpt/adapters/Adapter.js +0 -2
- package/dist/cloving_gpt/adapters/azureopenai.js +0 -69
- package/dist/cloving_gpt/adapters/claude.js +0 -128
- package/dist/cloving_gpt/adapters/gemini.js +0 -135
- package/dist/cloving_gpt/adapters/gpt4all.js +0 -29
- package/dist/cloving_gpt/adapters/index.js +0 -2
- package/dist/cloving_gpt/adapters/mistral.js +0 -128
- package/dist/cloving_gpt/adapters/ollama.js +0 -128
- package/dist/cloving_gpt/adapters/openai.js +0 -100
- package/dist/cloving_gpt/index.js +0 -192
- package/dist/commands/analyze.js +0 -47
- package/dist/commands/chat.js +0 -14
- package/dist/commands/check.js +0 -7
- package/dist/commands/commit.js +0 -44
- package/dist/commands/config.js +0 -167
- package/dist/commands/describe.js +0 -235
- package/dist/commands/generate/code.js +0 -21
- package/dist/commands/generate/commit.js +0 -11
- package/dist/commands/generate/context.js +0 -82
- package/dist/commands/generate/docs.js +0 -11
- package/dist/commands/generate/documentation.js +0 -11
- package/dist/commands/generate/fizzbuzz.js +0 -35
- package/dist/commands/generate/init.js +0 -15
- package/dist/commands/generate/review.js +0 -11
- package/dist/commands/generate/sh.js +0 -95
- package/dist/commands/generate/shell.js +0 -11
- package/dist/commands/generate/unit_tests.js +0 -11
- package/dist/commands/init.js +0 -13
- package/dist/commands/models.js +0 -22
- package/dist/commands/project/build.js +0 -88
- package/dist/commands/project/complete.js +0 -12
- package/dist/commands/project/init.js +0 -82
- package/dist/commands/project/plan.js +0 -108
- package/dist/commands/proxy.js +0 -11
- package/dist/commands/review.js +0 -50
- package/dist/commands/tokens.js +0 -75
- package/dist/commands/unit_tests.js +0 -150
- package/dist/commands/update.js +0 -7
- package/dist/file2.js +0 -4
- package/dist/index.js +0 -134
- package/dist/managers/BlockManager.js +0 -120
- package/dist/managers/ChatManager.js +0 -653
- package/dist/managers/ChunkManager.js +0 -32
- package/dist/managers/CodeManager.js +0 -185
- package/dist/managers/CommitManager.js +0 -64
- package/dist/managers/DocsManager.js +0 -88
- package/dist/managers/DocumentationManager.js +0 -114
- package/dist/managers/InitManager.js +0 -230
- package/dist/managers/ProxyManager.js +0 -210
- package/dist/managers/ReviewManager.js +0 -131
- package/dist/managers/ShellManager.js +0 -163
- package/dist/managers/StreamManager.js +0 -308
- package/dist/managers/UnitTestManager.js +0 -243
- package/dist/managers/src/managers/ProxyManager.js +0 -1
- package/dist/newfile.js +0 -2
- package/dist/package.json +0 -86
- package/dist/utils/command_utils.js +0 -384
- package/dist/utils/config_utils.js +0 -249
- package/dist/utils/gitUtils.js +0 -42
- package/dist/utils/git_utils.js +0 -217
- package/dist/utils/modelUtils.js +0 -7
- package/dist/utils/model_utils.js +0 -7
- package/dist/utils/prompt_utils.js +0 -333
- package/dist/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
- package/dist/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
- package/dist/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
- package/dist/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
- package/dist/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
- package/dist/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
- package/dist/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
- package/dist/utils/prompts/SPECIAL_FILES.md +0 -66
- package/dist/utils/prompts/index.js +0 -27
- package/dist/utils/string_utils.js +0 -505
- package/dist/utils/types.js +0 -2
- package/jest.config.js +0 -11
- package/src/cloving_gpt/adapters/azureopenai.ts +0 -83
- package/src/cloving_gpt/adapters/claude.ts +0 -140
- package/src/cloving_gpt/adapters/gemini.ts +0 -146
- package/src/cloving_gpt/adapters/index.ts +0 -43
- package/src/cloving_gpt/adapters/mistral.ts +0 -142
- package/src/cloving_gpt/adapters/ollama.ts +0 -136
- package/src/cloving_gpt/adapters/openai.ts +0 -113
- package/src/cloving_gpt/index.ts +0 -229
- package/src/commands/chat.ts +0 -12
- package/src/commands/config.ts +0 -192
- package/src/commands/generate/code.ts +0 -18
- package/src/commands/generate/commit.ts +0 -9
- package/src/commands/generate/context.ts +0 -93
- package/src/commands/generate/docs.ts +0 -9
- package/src/commands/generate/review.ts +0 -9
- package/src/commands/generate/shell.ts +0 -9
- package/src/commands/generate/unit_tests.ts +0 -9
- package/src/commands/init.ts +0 -9
- package/src/commands/models.ts +0 -21
- package/src/commands/proxy.ts +0 -9
- package/src/commands/tokens.ts +0 -82
- package/src/index.ts +0 -197
- package/src/managers/BlockManager.ts +0 -126
- package/src/managers/ChatManager.ts +0 -755
- package/src/managers/ChunkManager.ts +0 -31
- package/src/managers/CodeManager.ts +0 -226
- package/src/managers/CommitManager.ts +0 -71
- package/src/managers/DocsManager.ts +0 -101
- package/src/managers/InitManager.ts +0 -263
- package/src/managers/ProxyManager.ts +0 -240
- package/src/managers/ReviewManager.ts +0 -154
- package/src/managers/ShellManager.ts +0 -172
- package/src/managers/StreamManager.ts +0 -353
- package/src/managers/UnitTestManager.ts +0 -293
- package/src/utils/config_utils.ts +0 -271
- package/src/utils/git_utils.ts +0 -230
- package/src/utils/model_utils.ts +0 -3
- package/src/utils/prompt_utils.ts +0 -375
- package/src/utils/prompts/CODEGEN_COULDNT_APPLY.md +0 -5
- package/src/utils/prompts/CODEGEN_EXAMPLES.md +0 -82
- package/src/utils/prompts/CODEGEN_INSTRUCTIONS.md +0 -43
- package/src/utils/prompts/DOCS_INSTRUCTIONS.md +0 -9
- package/src/utils/prompts/INIT_INSTRUCTIONS.md +0 -132
- package/src/utils/prompts/REVIEW_INSTRUCTIONS.md +0 -49
- package/src/utils/prompts/SHELL_INSTRUCTIONS.md +0 -15
- package/src/utils/prompts/SPECIAL_FILES.md +0 -66
- package/src/utils/prompts/index.ts +0 -37
- package/src/utils/string_utils.ts +0 -552
- package/src/utils/types.ts +0 -127
- package/tests/commands/generate/unit_tests.test.ts +0 -27
- package/tests/utils/git_utils.test.ts +0 -116
- package/tests/utils/model_utils.test.ts +0 -27
- package/tests/utils/prompt_utils.test.ts +0 -33
- package/tests/utils/string_utils.test.ts +0 -560
- package/tsconfig.json +0 -14
- package/yarn.lock +0 -5823
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import express, { Request, Response } from 'express'
|
|
2
|
-
import bodyParser from 'body-parser'
|
|
3
|
-
import fs from 'fs'
|
|
4
|
-
import path from 'path'
|
|
5
|
-
|
|
6
|
-
import ClovingGPT from '../cloving_gpt'
|
|
7
|
-
import ChunkManager from './ChunkManager'
|
|
8
|
-
import { getNearestClovingConfig } from '../utils/config_utils'
|
|
9
|
-
import { getAllFilesInDirectory } from '../utils/prompt_utils'
|
|
10
|
-
import type { ClovingGPTOptions } from '../utils/types'
|
|
11
|
-
|
|
12
|
-
class ProxyManager {
|
|
13
|
-
private gpt: ClovingGPT
|
|
14
|
-
private app: express.Application
|
|
15
|
-
private contextFiles: Record<string, string> = {}
|
|
16
|
-
private chunkManager: ChunkManager
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Creates an instance of ProxyManager.
|
|
20
|
-
* @param {ClovingGPTOptions} options - Configuration options for the ProxyManager.
|
|
21
|
-
* @description
|
|
22
|
-
* Initializes the ProxyManager with the given options. It sets up:
|
|
23
|
-
* - A ClovingGPT instance with silent and stream options enabled
|
|
24
|
-
* - An Express application with JSON body parsing
|
|
25
|
-
* - A ChunkManager for handling streaming responses
|
|
26
|
-
*/
|
|
27
|
-
constructor(private options: ClovingGPTOptions) {
|
|
28
|
-
this.options.silent = true
|
|
29
|
-
this.options.stream = true
|
|
30
|
-
this.gpt = new ClovingGPT(this.options)
|
|
31
|
-
this.app = express()
|
|
32
|
-
this.app.use(bodyParser.json())
|
|
33
|
-
this.chunkManager = new ChunkManager()
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async initialize() {
|
|
37
|
-
await this.setupRoutes()
|
|
38
|
-
await this.loadContextFiles()
|
|
39
|
-
this.startServer()
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
private async setupRoutes() {
|
|
43
|
-
this.app.get('/', (_req: Request, res: Response) => {
|
|
44
|
-
res.json({ message: 'ClovingGPT proxy server running' })
|
|
45
|
-
})
|
|
46
|
-
|
|
47
|
-
this.app.post('/v1/chat/completions', async (req, res, next) => {
|
|
48
|
-
try {
|
|
49
|
-
await this.handleChatCompletions(req, res)
|
|
50
|
-
} catch (error) {
|
|
51
|
-
next(error)
|
|
52
|
-
}
|
|
53
|
-
})
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
private async loadContextFiles() {
|
|
57
|
-
let files = this.options.files || '.'
|
|
58
|
-
|
|
59
|
-
let expandedFiles: string[] = []
|
|
60
|
-
for (const file of files) {
|
|
61
|
-
const filePath = path.resolve(file)
|
|
62
|
-
if (
|
|
63
|
-
await fs.promises
|
|
64
|
-
.stat(filePath)
|
|
65
|
-
.then((stat) => stat.isDirectory())
|
|
66
|
-
.catch(() => false)
|
|
67
|
-
) {
|
|
68
|
-
const dirFiles = await getAllFilesInDirectory(filePath)
|
|
69
|
-
expandedFiles = expandedFiles.concat(dirFiles.map((f) => path.relative(process.cwd(), f)))
|
|
70
|
-
} else {
|
|
71
|
-
expandedFiles.push(path.relative(process.cwd(), filePath))
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
files = expandedFiles
|
|
75
|
-
|
|
76
|
-
for (const file of files) {
|
|
77
|
-
const filePath = path.resolve(file)
|
|
78
|
-
if (
|
|
79
|
-
await fs.promises
|
|
80
|
-
.stat(filePath)
|
|
81
|
-
.then((stat) => stat.isFile())
|
|
82
|
-
.catch(() => false)
|
|
83
|
-
) {
|
|
84
|
-
const content = await fs.promises.readFile(filePath, 'utf-8')
|
|
85
|
-
this.contextFiles[file] = content
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
private async handleChatCompletions(req: Request, res: Response) {
|
|
91
|
-
try {
|
|
92
|
-
const { messages, stream } = req.body
|
|
93
|
-
|
|
94
|
-
if (!Array.isArray(messages)) {
|
|
95
|
-
return res.status(400).json({ error: 'Invalid request body: messages must be an array' })
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const content = messages
|
|
99
|
-
.map((message: any) => {
|
|
100
|
-
if (typeof message !== 'object' || typeof message.content !== 'string') {
|
|
101
|
-
throw new Error('Invalid message format')
|
|
102
|
-
}
|
|
103
|
-
return message.content
|
|
104
|
-
})
|
|
105
|
-
.join('\n\n')
|
|
106
|
-
|
|
107
|
-
const contextFileContents = Object.keys(this.contextFiles)
|
|
108
|
-
.map((file) => `### Contents of ${file}\n\n${this.contextFiles[file]}\n\n`)
|
|
109
|
-
.join('\n')
|
|
110
|
-
const prompt = `# Task
|
|
111
|
-
|
|
112
|
-
${content}
|
|
113
|
-
|
|
114
|
-
### Description of App
|
|
115
|
-
|
|
116
|
-
${JSON.stringify(getNearestClovingConfig().config, null, 2)}
|
|
117
|
-
|
|
118
|
-
${contextFileContents}
|
|
119
|
-
|
|
120
|
-
# Task
|
|
121
|
-
|
|
122
|
-
${content}`
|
|
123
|
-
|
|
124
|
-
if (stream) {
|
|
125
|
-
await this.handleStreamResponse(prompt, res)
|
|
126
|
-
} else {
|
|
127
|
-
await this.handleNonStreamResponse(prompt, res)
|
|
128
|
-
}
|
|
129
|
-
} catch (error) {
|
|
130
|
-
console.error('Error processing request:', error)
|
|
131
|
-
if (error instanceof Error && error.message === 'Invalid message format') {
|
|
132
|
-
res.status(400).json({
|
|
133
|
-
error: 'Invalid request body: each message must have a content property of type string',
|
|
134
|
-
})
|
|
135
|
-
} else {
|
|
136
|
-
res.status(500).json({ error: 'Internal server error' })
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
private async handleStreamResponse(prompt: string, res: Response) {
|
|
142
|
-
const shortPrompt = prompt.replace('### Task', '').trim().slice(0, 50).replace(/\n/g, ' ')
|
|
143
|
-
const promptTokens = Math.ceil(prompt.length / 4).toLocaleString()
|
|
144
|
-
console.log(`> sending ${promptTokens} token prompt:`, shortPrompt)
|
|
145
|
-
const responseStream = await this.gpt.streamText({ prompt })
|
|
146
|
-
|
|
147
|
-
res.setHeader('Content-Type', 'application/json')
|
|
148
|
-
res.setHeader('Transfer-Encoding', 'chunked')
|
|
149
|
-
|
|
150
|
-
let convertedStreams: string[] = []
|
|
151
|
-
// Add initial stream to indicate the start of the response
|
|
152
|
-
convertedStreams.push(
|
|
153
|
-
'{"id":"chatcmpl-9tLvSuRQaYzQIiKRAwI5a7WqdJspq","object":"chat.completion.chunk","created":1722979349,"model":"cloving","system_fingerprint":"fp_3aa7262c27","choices":[{"index":0,"delta":{"role":"assistant","content":"","refusal":null},"logprobs":null,"finish_reason":null}]}',
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
this.chunkManager.on('content', (buffer: string) => {
|
|
157
|
-
let convertedStream = this.gpt.convertStream(buffer)
|
|
158
|
-
|
|
159
|
-
while (convertedStream !== null) {
|
|
160
|
-
const { output, lastChar } = convertedStream
|
|
161
|
-
const content = JSON.stringify({
|
|
162
|
-
id: 'chatcmpl-9tLvSuRQaYzQIiKRAwI5a7WqdJspq',
|
|
163
|
-
object: 'chat.completion.chunk',
|
|
164
|
-
created: 1722979350,
|
|
165
|
-
model: 'cloving',
|
|
166
|
-
system_fingerprint: 'fp_3aa7262c27',
|
|
167
|
-
choices: [{ index: 0, delta: { content: output }, logprobs: null, finish_reason: null }],
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
convertedStreams.push(content)
|
|
171
|
-
|
|
172
|
-
if (convertedStreams.length >= 2) {
|
|
173
|
-
const dataToSend = convertedStreams.map((c) => `data: ${c}`).join('\n\n')
|
|
174
|
-
res.write(`${dataToSend}\n\n`)
|
|
175
|
-
convertedStreams = []
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
buffer = buffer.slice(lastChar)
|
|
179
|
-
convertedStream = this.gpt.convertStream(buffer)
|
|
180
|
-
}
|
|
181
|
-
})
|
|
182
|
-
|
|
183
|
-
responseStream.data.on('data', (chunk: Buffer) => {
|
|
184
|
-
const chunkString = chunk.toString()
|
|
185
|
-
this.chunkManager.addChunk(chunkString)
|
|
186
|
-
})
|
|
187
|
-
|
|
188
|
-
responseStream.data.on('end', () => {
|
|
189
|
-
// Send any remaining converted streams
|
|
190
|
-
const dataToSend = convertedStreams.map((c) => `data: ${c}`).join('\n\n')
|
|
191
|
-
res.write(`${dataToSend}\n\ndata: [DONE]\n\n`)
|
|
192
|
-
res.end()
|
|
193
|
-
})
|
|
194
|
-
|
|
195
|
-
responseStream.data.on('error', (error: Error) => {
|
|
196
|
-
console.error('Error streaming response:', error)
|
|
197
|
-
res.status(500).json({ error: 'Internal server error' })
|
|
198
|
-
})
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
private async handleNonStreamResponse(prompt: string, res: Response) {
|
|
202
|
-
const content = await this.gpt.generateText({ prompt })
|
|
203
|
-
|
|
204
|
-
const response = {
|
|
205
|
-
id: 'chatcmpl-' + Date.now(),
|
|
206
|
-
object: 'chat.completion',
|
|
207
|
-
created: Math.floor(Date.now() / 1000),
|
|
208
|
-
model: 'cloving',
|
|
209
|
-
choices: [
|
|
210
|
-
{
|
|
211
|
-
index: 0,
|
|
212
|
-
message: {
|
|
213
|
-
role: 'assistant',
|
|
214
|
-
content,
|
|
215
|
-
},
|
|
216
|
-
logprobs: null,
|
|
217
|
-
finish_reason: 'stop',
|
|
218
|
-
},
|
|
219
|
-
],
|
|
220
|
-
usage: {
|
|
221
|
-
prompt_tokens: Math.ceil(prompt.length / 4),
|
|
222
|
-
completion_tokens: Math.ceil(content.length / 4),
|
|
223
|
-
total_tokens: Math.ceil(prompt.length / 4) + Math.ceil(content.length / 4),
|
|
224
|
-
},
|
|
225
|
-
system_fingerprint: 'fp_3cd8b62c3b',
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
res.json(response)
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
private startServer() {
|
|
232
|
-
const port = parseInt(`${process.env.PORT || this.options.port || 3000}`, 10)
|
|
233
|
-
|
|
234
|
-
this.app.listen(port, () => {
|
|
235
|
-
console.log(`ClovingGPT proxy server running on port ${port}`)
|
|
236
|
-
})
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
export default ProxyManager
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import ncp from 'copy-paste'
|
|
2
|
-
import colors from 'colors'
|
|
3
|
-
import { select } from '@inquirer/prompts'
|
|
4
|
-
import { AxiosError } from 'axios'
|
|
5
|
-
|
|
6
|
-
import ClovingGPT from '../cloving_gpt'
|
|
7
|
-
import { getGitDiff } from '../utils/git_utils'
|
|
8
|
-
import { generateReviewPrompt } from '../utils/prompt_utils'
|
|
9
|
-
import { getConfig } from '../utils/config_utils'
|
|
10
|
-
import StreamManager from './StreamManager'
|
|
11
|
-
import type { ClovingGPTOptions } from '../utils/types'
|
|
12
|
-
|
|
13
|
-
class ReviewManager extends StreamManager {
|
|
14
|
-
constructor(options: ClovingGPTOptions) {
|
|
15
|
-
super(options)
|
|
16
|
-
options.silent = getConfig(options).globalSilent || false
|
|
17
|
-
options.stream = true
|
|
18
|
-
this.gpt = new ClovingGPT(options)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
private async getGitDiffPrompt(): Promise<string> {
|
|
22
|
-
const gitDiff = await getGitDiff()
|
|
23
|
-
return `${generateReviewPrompt(this.options, this.contextFiles)}
|
|
24
|
-
|
|
25
|
-
## Diff Content
|
|
26
|
-
${gitDiff}
|
|
27
|
-
|
|
28
|
-
# Task
|
|
29
|
-
|
|
30
|
-
${this.options.prompt || 'Please provide a code review.'}`
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
private async handleUserAction(analysis: string) {
|
|
34
|
-
const extractSection = (section: string): string => {
|
|
35
|
-
const regex = new RegExp(
|
|
36
|
-
`## ${section}[\\s\\S]*?(?=\\n## Potential Bugs and Recommended Fixes|$)`,
|
|
37
|
-
'g',
|
|
38
|
-
)
|
|
39
|
-
const match = analysis.match(regex)
|
|
40
|
-
return match ? match[0].trim() : ''
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const clipboardOption = await select({
|
|
44
|
-
message: 'What would you like to copy to the clipboard?',
|
|
45
|
-
choices: [
|
|
46
|
-
{ name: 'Copy only the Changes Overview', value: 'Changes Overview' },
|
|
47
|
-
{
|
|
48
|
-
name: 'Copy only the Potential Bugs and Recommended Fixes',
|
|
49
|
-
value: 'Potential Bugs and Recommended Fixes',
|
|
50
|
-
},
|
|
51
|
-
{ name: 'Copy everything', value: 'Everything' },
|
|
52
|
-
{ name: 'Done', value: 'Done' },
|
|
53
|
-
],
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
let contentToCopy = ''
|
|
57
|
-
|
|
58
|
-
switch (clipboardOption) {
|
|
59
|
-
case 'Changes Overview':
|
|
60
|
-
contentToCopy = extractSection('Changes Overview')
|
|
61
|
-
break
|
|
62
|
-
case 'Potential Bugs and Recommended Fixes':
|
|
63
|
-
contentToCopy = extractSection('Potential Bugs and Recommended Fixes')
|
|
64
|
-
break
|
|
65
|
-
case 'Everything':
|
|
66
|
-
contentToCopy = analysis
|
|
67
|
-
break
|
|
68
|
-
case 'Done':
|
|
69
|
-
console.log('No content copied to clipboard.')
|
|
70
|
-
return
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (contentToCopy) {
|
|
74
|
-
ncp.copy(contentToCopy, (err) => {
|
|
75
|
-
if (err) {
|
|
76
|
-
console.error(colors.red('Error: Unable to copy to clipboard.'), err)
|
|
77
|
-
} else {
|
|
78
|
-
console.log(colors.green('Selected content copied to clipboard'))
|
|
79
|
-
}
|
|
80
|
-
})
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
public async generateReview(extraPrompt?: string): Promise<void> {
|
|
85
|
-
try {
|
|
86
|
-
await this.checkForLatestVersion()
|
|
87
|
-
await this.loadContextFiles()
|
|
88
|
-
|
|
89
|
-
if (this.options.files) {
|
|
90
|
-
if (this.chatHistory.length === 0) {
|
|
91
|
-
this.addUserPrompt(`${generateReviewPrompt(this.options, this.contextFiles)}`)
|
|
92
|
-
this.addAssistantResponse('What would you like to do?')
|
|
93
|
-
}
|
|
94
|
-
this.addUserPrompt(
|
|
95
|
-
`${this.options.prompt || 'Please provide a code review.'}\n\n${extraPrompt || ''}`,
|
|
96
|
-
)
|
|
97
|
-
} else {
|
|
98
|
-
if (this.chatHistory.length === 0) {
|
|
99
|
-
this.addUserPrompt(await this.getGitDiffPrompt())
|
|
100
|
-
this.addAssistantResponse('What would you like to do?')
|
|
101
|
-
}
|
|
102
|
-
this.addUserPrompt(
|
|
103
|
-
`${this.options.prompt || 'Please provide a code review.'}\n\n${extraPrompt || ''}`,
|
|
104
|
-
)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const responseStream = await this.gpt.streamText({
|
|
108
|
-
prompt: this.prompt,
|
|
109
|
-
messages: this.chatHistory,
|
|
110
|
-
})
|
|
111
|
-
|
|
112
|
-
this.handleResponseStream(responseStream)
|
|
113
|
-
} catch (error) {
|
|
114
|
-
this.handleError(error as AxiosError)
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
private handleError(error: AxiosError) {
|
|
119
|
-
let errorMessage = error.message || 'An error occurred.'
|
|
120
|
-
const errorNumber = error.response?.status || 'unknown'
|
|
121
|
-
|
|
122
|
-
switch (errorNumber) {
|
|
123
|
-
case 400:
|
|
124
|
-
errorMessage = 'Invalid model or prompt size too large. Try specifying fewer files.'
|
|
125
|
-
break
|
|
126
|
-
case 403:
|
|
127
|
-
errorMessage = 'Inactive subscription or usage limit reached'
|
|
128
|
-
break
|
|
129
|
-
case 429:
|
|
130
|
-
errorMessage = 'Rate limit error'
|
|
131
|
-
break
|
|
132
|
-
case 500:
|
|
133
|
-
errorMessage = 'Internal server error'
|
|
134
|
-
break
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const statusMessage = (error.response?.data as any)?.statusMessage
|
|
138
|
-
console.error(
|
|
139
|
-
colors.red(
|
|
140
|
-
`\nError (${errorNumber}) while submitting the prompt to the AI API\n\n${statusMessage}\n`,
|
|
141
|
-
),
|
|
142
|
-
)
|
|
143
|
-
this.isProcessing = false
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
protected async finalizeResponse(): Promise<void> {
|
|
147
|
-
this.addAssistantResponse(this.responseString)
|
|
148
|
-
this.isProcessing = false
|
|
149
|
-
|
|
150
|
-
await this.handleUserAction(this.responseString)
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export default ReviewManager
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import highlight from 'cli-highlight'
|
|
2
|
-
import ncp from 'copy-paste'
|
|
3
|
-
import { execSync } from 'child_process'
|
|
4
|
-
import { select, input } from '@inquirer/prompts'
|
|
5
|
-
|
|
6
|
-
import ClovingGPT from '../cloving_gpt'
|
|
7
|
-
import { generateShellPrompt } from '../utils/prompt_utils'
|
|
8
|
-
import { extractMarkdown } from '../utils/string_utils'
|
|
9
|
-
import { getConfig } from '../utils/config_utils'
|
|
10
|
-
|
|
11
|
-
import type { ClovingGPTOptions, ChatMessage } from '../utils/types'
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* ShellManager class for handling shell script generation and execution.
|
|
15
|
-
*/
|
|
16
|
-
class ShellManager {
|
|
17
|
-
private gpt: ClovingGPT
|
|
18
|
-
private chatHistory: ChatMessage[] = []
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Creates an instance of ShellManager.
|
|
22
|
-
* @param {ClovingGPTOptions} options - The options for ClovingGPT.
|
|
23
|
-
*/
|
|
24
|
-
constructor(private options: ClovingGPTOptions) {
|
|
25
|
-
options.silent = getConfig(options).globalSilent || false
|
|
26
|
-
this.gpt = new ClovingGPT(options)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Generates a prompt to explain a shell script.
|
|
31
|
-
* @param {string} prompt - The original shell script prompt.
|
|
32
|
-
* @returns {string} The prompt for explaining the shell script.
|
|
33
|
-
* @private
|
|
34
|
-
*/
|
|
35
|
-
private generateExplainShellPrompt(prompt: string): string {
|
|
36
|
-
return `${prompt}
|
|
37
|
-
|
|
38
|
-
# Task
|
|
39
|
-
|
|
40
|
-
Please briefly explain how this shell script works.`
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Generates a shell script based on the given prompt.
|
|
45
|
-
* @param {string} prompt - The user's prompt for generating a shell script.
|
|
46
|
-
* @returns {Promise<string>} A promise that resolves to the generated shell script.
|
|
47
|
-
* @private
|
|
48
|
-
*/
|
|
49
|
-
private async generateShell(prompt: string): Promise<string> {
|
|
50
|
-
if (this.chatHistory.length === 0) {
|
|
51
|
-
const systemPrompt = generateShellPrompt()
|
|
52
|
-
this.chatHistory.push({ role: 'user', content: systemPrompt })
|
|
53
|
-
this.chatHistory.push({ role: 'assistant', content: 'What would you like to do?' })
|
|
54
|
-
}
|
|
55
|
-
this.chatHistory.push({ role: 'user', content: prompt })
|
|
56
|
-
return await this.gpt.generateText({ prompt, messages: this.chatHistory })
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Displays the generated shell script with syntax highlighting.
|
|
61
|
-
* @param {string} rawShellCommand - The raw shell command to display.
|
|
62
|
-
* @private
|
|
63
|
-
*/
|
|
64
|
-
private displayGeneratedShell(rawShellCommand: string) {
|
|
65
|
-
const generatedShell = extractMarkdown(rawShellCommand)
|
|
66
|
-
const generatedShellWithoutShebang = generatedShell.replace(/^#!.*?\s/, '')
|
|
67
|
-
console.log(highlight(generatedShellWithoutShebang))
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Handles user actions after generating a shell script.
|
|
72
|
-
* @param {string} response - The generated shell script.
|
|
73
|
-
* @param {string} prompt - The original user prompt.
|
|
74
|
-
* @returns {Promise<void>}
|
|
75
|
-
* @private
|
|
76
|
-
*/
|
|
77
|
-
private async handleUserAction(response: string, prompt: string): Promise<void> {
|
|
78
|
-
let { exec } = this.options
|
|
79
|
-
this.chatHistory.push({ role: 'assistant', content: response })
|
|
80
|
-
|
|
81
|
-
const generatedShell = extractMarkdown(response)
|
|
82
|
-
const generatedShellWithoutShebang = generatedShell.replace(/^#!.*?\s/, '')
|
|
83
|
-
|
|
84
|
-
if (exec) {
|
|
85
|
-
execSync(generatedShellWithoutShebang, { stdio: 'inherit' })
|
|
86
|
-
return
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const action = await select({
|
|
90
|
-
message: 'What would you like to do?',
|
|
91
|
-
choices: [
|
|
92
|
-
{ name: 'Execute', value: 'execute' },
|
|
93
|
-
{ name: 'Revise', value: 'revise' },
|
|
94
|
-
{ name: 'Explain', value: 'explain' },
|
|
95
|
-
{ name: 'Copy to Clipboard', value: 'copy' },
|
|
96
|
-
{ name: 'Cancel', value: 'cancel' },
|
|
97
|
-
],
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
switch (action) {
|
|
101
|
-
case 'execute':
|
|
102
|
-
execSync(generatedShellWithoutShebang, { stdio: 'inherit' })
|
|
103
|
-
break
|
|
104
|
-
case 'revise':
|
|
105
|
-
const newPrompt = await input({
|
|
106
|
-
message: 'How would you like to modify the output:',
|
|
107
|
-
})
|
|
108
|
-
const newRawShellCommand = await this.generateShell(newPrompt)
|
|
109
|
-
this.displayGeneratedShell(newRawShellCommand)
|
|
110
|
-
await this.handleUserAction(newRawShellCommand, newPrompt)
|
|
111
|
-
break
|
|
112
|
-
case 'explain':
|
|
113
|
-
const explainPrompt = this.generateExplainShellPrompt(generatedShellWithoutShebang)
|
|
114
|
-
this.chatHistory.push({ role: 'user', content: explainPrompt })
|
|
115
|
-
const explainShellCommand = await this.gpt.generateText({
|
|
116
|
-
prompt: explainPrompt,
|
|
117
|
-
messages: this.chatHistory,
|
|
118
|
-
})
|
|
119
|
-
console.log(highlight(explainShellCommand, { language: 'markdown' }))
|
|
120
|
-
break
|
|
121
|
-
case 'copy':
|
|
122
|
-
ncp.copy(generatedShellWithoutShebang, (err) => {
|
|
123
|
-
if (err) {
|
|
124
|
-
console.error('Error: Unable to copy to clipboard.', err)
|
|
125
|
-
} else {
|
|
126
|
-
console.log('Script copied to clipboard.')
|
|
127
|
-
}
|
|
128
|
-
})
|
|
129
|
-
break
|
|
130
|
-
case 'cancel':
|
|
131
|
-
console.log('Operation cancelled.')
|
|
132
|
-
break
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Generates a shell script based on user input and handles subsequent user actions.
|
|
138
|
-
*
|
|
139
|
-
* This method is the main entry point for generating and interacting with shell scripts.
|
|
140
|
-
* It performs the following steps:
|
|
141
|
-
* 1. Obtains a user prompt (either from options or by asking the user).
|
|
142
|
-
* 2. Generates a shell script based on the prompt.
|
|
143
|
-
* 3. Displays the generated script with syntax highlighting.
|
|
144
|
-
* 4. Handles user actions (execute, revise, explain, copy, or cancel) for the generated script.
|
|
145
|
-
*
|
|
146
|
-
* @returns {Promise<void>} A promise that resolves when the generation and handling process is complete.
|
|
147
|
-
* @throws {Error} If there's an issue during the shell script generation process.
|
|
148
|
-
* @public
|
|
149
|
-
*
|
|
150
|
-
* @example
|
|
151
|
-
* const shellManager = new ShellManager(options);
|
|
152
|
-
* await shellManager.generateAndHandleShell();
|
|
153
|
-
*/
|
|
154
|
-
public async generateAndHandleShell(): Promise<void> {
|
|
155
|
-
let { prompt: userPrompt } = this.options
|
|
156
|
-
try {
|
|
157
|
-
if (!userPrompt) {
|
|
158
|
-
userPrompt = await input({
|
|
159
|
-
message: 'What would you like to do: ',
|
|
160
|
-
})
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
const rawShellCommand = await this.generateShell(userPrompt)
|
|
164
|
-
this.displayGeneratedShell(rawShellCommand)
|
|
165
|
-
await this.handleUserAction(rawShellCommand, userPrompt)
|
|
166
|
-
} catch (error) {
|
|
167
|
-
console.error('Could not generate shell script', error)
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
export default ShellManager
|