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,113 +0,0 @@
|
|
|
1
|
-
import { Adapter } from '.'
|
|
2
|
-
import type { GPTRequest, OpenAIStreamChunk } from '../../utils/types'
|
|
3
|
-
|
|
4
|
-
// OpenAIAdapter class implements the Adapter interface
|
|
5
|
-
export class OpenAIAdapter implements Adapter {
|
|
6
|
-
private model: string
|
|
7
|
-
|
|
8
|
-
// List of supported models
|
|
9
|
-
static supportedModels: string[] = [
|
|
10
|
-
'openai:gpt:o1-preview',
|
|
11
|
-
'openai:gpt:o1-mini',
|
|
12
|
-
'openai:gpt:4o-2024-08-06',
|
|
13
|
-
'openai:gpt:4o',
|
|
14
|
-
'openai:gpt:4o-mini',
|
|
15
|
-
'openai:gpt:4-turbo',
|
|
16
|
-
'openai:gpt:3.5-turbo',
|
|
17
|
-
'openai:text-embedding:3-large',
|
|
18
|
-
// Add more supported models here as needed
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
// Method to list supported models
|
|
22
|
-
static listSupportedModels(): void {
|
|
23
|
-
OpenAIAdapter.supportedModels.forEach((model) => {
|
|
24
|
-
console.log(model)
|
|
25
|
-
})
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Constructor to initialize the model
|
|
29
|
-
constructor(model: string) {
|
|
30
|
-
this.model = model
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Method to get the API endpoint
|
|
34
|
-
getEndpoint(): string {
|
|
35
|
-
return `https://api.openai.com/v1/chat/completions`
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Method to get the headers for the API request
|
|
39
|
-
getHeaders(apiKey: string): Record<string, string> {
|
|
40
|
-
return {
|
|
41
|
-
Authorization: `Bearer ${apiKey}`,
|
|
42
|
-
'Content-Type': 'application/json',
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Method to get the payload for the API request
|
|
47
|
-
getPayload(request: GPTRequest, stream: boolean = false): Record<string, any> {
|
|
48
|
-
return {
|
|
49
|
-
model: this.model.replace(':', '-'),
|
|
50
|
-
messages:
|
|
51
|
-
request.messages && request.messages.length > 0
|
|
52
|
-
? request.messages
|
|
53
|
-
: [{ role: 'user', content: request.prompt }],
|
|
54
|
-
max_tokens: request.maxTokens,
|
|
55
|
-
temperature: request.temperature || 0.2,
|
|
56
|
-
stream,
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Method to extract the response from the API response data
|
|
61
|
-
extractResponse(data: any): string {
|
|
62
|
-
return data.choices[0].message.content
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Method to convert the stream data into OpenAIStreamChunk format
|
|
66
|
-
// data example:
|
|
67
|
-
// {
|
|
68
|
-
// id: 'chatcmpl-9tL477A98d54qvVQqJT010bm8BLJl',
|
|
69
|
-
// object: 'chat.completion.chunk',
|
|
70
|
-
// created: 1722976043,
|
|
71
|
-
// model: 'gpt-4o-2024-05-13',
|
|
72
|
-
// system_fingerprint: 'fp_3aa7262c27',
|
|
73
|
-
// choices: [
|
|
74
|
-
// {
|
|
75
|
-
// "index": 0,
|
|
76
|
-
// "delta": {
|
|
77
|
-
// "content": " basic"
|
|
78
|
-
// },
|
|
79
|
-
// "logprobs": null,
|
|
80
|
-
// "finish_reason": null
|
|
81
|
-
// }
|
|
82
|
-
// ]
|
|
83
|
-
// }
|
|
84
|
-
convertStream(data: string): OpenAIStreamChunk | null {
|
|
85
|
-
let beginningChar = 0
|
|
86
|
-
let lastChar = 0
|
|
87
|
-
|
|
88
|
-
while (lastChar < data.length) {
|
|
89
|
-
try {
|
|
90
|
-
let remainingString = data.slice(beginningChar, lastChar)
|
|
91
|
-
|
|
92
|
-
// Strip any leading characters until we encounter the first '{' in this block
|
|
93
|
-
const firstBraceIndex = remainingString.indexOf('{')
|
|
94
|
-
if (firstBraceIndex > -1) {
|
|
95
|
-
remainingString = remainingString.slice(firstBraceIndex)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const parsedObject = JSON.parse(remainingString)
|
|
99
|
-
const output = parsedObject?.choices[0]?.delta?.content || ''
|
|
100
|
-
|
|
101
|
-
return {
|
|
102
|
-
output,
|
|
103
|
-
lastChar,
|
|
104
|
-
}
|
|
105
|
-
} catch (error) {
|
|
106
|
-
// Incrementally increase the size of the JSON string to parse
|
|
107
|
-
lastChar += 1
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return null
|
|
112
|
-
}
|
|
113
|
-
}
|
package/src/cloving_gpt/index.ts
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
import highlight from 'cli-highlight'
|
|
2
|
-
import process from 'process'
|
|
3
|
-
import colors from 'colors'
|
|
4
|
-
import { confirm } from '@inquirer/prompts'
|
|
5
|
-
import axios, { AxiosResponse, AxiosError } from 'axios'
|
|
6
|
-
|
|
7
|
-
import { Adapter } from './adapters/'
|
|
8
|
-
import { ClaudeAdapter } from './adapters/claude'
|
|
9
|
-
import { OpenAIAdapter } from './adapters/openai'
|
|
10
|
-
import { MistralAdapter } from './adapters/mistral'
|
|
11
|
-
import { OllamaAdapter } from './adapters/ollama'
|
|
12
|
-
import { GeminiAdapter } from './adapters/gemini'
|
|
13
|
-
import { AzureOpenAIAdapter } from './adapters/azureopenai'
|
|
14
|
-
import { parseMarkdownInstructions } from '../utils/string_utils'
|
|
15
|
-
import { getConfig, getPrimaryModel } from '../utils/config_utils'
|
|
16
|
-
|
|
17
|
-
import type {
|
|
18
|
-
OpenAIStreamChunk,
|
|
19
|
-
GPTRequest,
|
|
20
|
-
ClovingGPTOptions,
|
|
21
|
-
ClovingConfig,
|
|
22
|
-
ChatMessage,
|
|
23
|
-
} from '../utils/types'
|
|
24
|
-
|
|
25
|
-
class ClovingGPT {
|
|
26
|
-
public adapter: Adapter
|
|
27
|
-
public silent: boolean
|
|
28
|
-
public temperature: number
|
|
29
|
-
public stream: boolean
|
|
30
|
-
private apiKey: string
|
|
31
|
-
private timeout: number
|
|
32
|
-
|
|
33
|
-
constructor(options: ClovingGPTOptions) {
|
|
34
|
-
const { model: partialModel } = options
|
|
35
|
-
const config: ClovingConfig = getConfig(options)
|
|
36
|
-
if (!config || !config.models) {
|
|
37
|
-
console.log('No cloving configuration found. Please run: cloving config')
|
|
38
|
-
process.exit(1)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const primaryModel = getPrimaryModel(partialModel)
|
|
42
|
-
if (!primaryModel) {
|
|
43
|
-
console.log('No AI API models found in the cloving configuration. Please run: cloving config')
|
|
44
|
-
process.exit(1)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const { provider, model, config: modelConfig } = primaryModel
|
|
48
|
-
this.apiKey = modelConfig.apiKey
|
|
49
|
-
this.temperature = options.temperature || modelConfig.temperature || 0.2
|
|
50
|
-
this.silent = options.silent || modelConfig.silent || false
|
|
51
|
-
this.stream = options.stream || false
|
|
52
|
-
this.timeout = options.timeout || 60000 // Default timeout of 60 seconds
|
|
53
|
-
|
|
54
|
-
switch (provider) {
|
|
55
|
-
case 'claude':
|
|
56
|
-
this.adapter = new ClaudeAdapter(model)
|
|
57
|
-
break
|
|
58
|
-
case 'openai':
|
|
59
|
-
this.adapter = new OpenAIAdapter(model)
|
|
60
|
-
break
|
|
61
|
-
case 'mistral':
|
|
62
|
-
this.adapter = new MistralAdapter(model)
|
|
63
|
-
break
|
|
64
|
-
case 'ollama':
|
|
65
|
-
this.adapter = new OllamaAdapter(model)
|
|
66
|
-
break
|
|
67
|
-
case 'gemini':
|
|
68
|
-
this.adapter = new GeminiAdapter(model)
|
|
69
|
-
break
|
|
70
|
-
case 'azureopenai':
|
|
71
|
-
if (!modelConfig.endpoint) {
|
|
72
|
-
throw new Error('Azure OpenAI endpoint not configured')
|
|
73
|
-
}
|
|
74
|
-
this.adapter = new AzureOpenAIAdapter(model, modelConfig.endpoint)
|
|
75
|
-
break
|
|
76
|
-
default:
|
|
77
|
-
throw new Error(`Unsupported provider: ${provider}`)
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
private async reviewPrompt(
|
|
82
|
-
prompt: string,
|
|
83
|
-
messages: ChatMessage[],
|
|
84
|
-
endpoint: string,
|
|
85
|
-
): Promise<string | null> {
|
|
86
|
-
if (this.silent) return prompt
|
|
87
|
-
|
|
88
|
-
const fullPrompt = messages
|
|
89
|
-
.map((m) => (m.role === 'user' ? `# Task\n\n${m.content}` : m.content))
|
|
90
|
-
.join('\n\n')
|
|
91
|
-
|
|
92
|
-
const tokenCount = Math.ceil(fullPrompt.length / 4).toLocaleString()
|
|
93
|
-
const reviewPrompt = await confirm({
|
|
94
|
-
message: `Do you want to review the ~${tokenCount} token prompt before sending it to ${endpoint}?`,
|
|
95
|
-
default: true,
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
if (reviewPrompt) {
|
|
99
|
-
parseMarkdownInstructions(fullPrompt).map((code) => {
|
|
100
|
-
if (code.trim().startsWith('```')) {
|
|
101
|
-
const lines = code.split('\n')
|
|
102
|
-
const language = code.match(/```(\w+)/)?.[1] || 'default'
|
|
103
|
-
console.log(lines[0])
|
|
104
|
-
try {
|
|
105
|
-
if (language === 'default') {
|
|
106
|
-
console.log(highlight(lines.slice(1, -1).join('\n')))
|
|
107
|
-
} else {
|
|
108
|
-
console.log(highlight(lines.slice(1, -1).join('\n'), { language }))
|
|
109
|
-
}
|
|
110
|
-
} catch (error) {
|
|
111
|
-
// don't highlight if it fails
|
|
112
|
-
console.log(lines.slice(1, -1).join('\n'))
|
|
113
|
-
}
|
|
114
|
-
console.log(lines.slice(-1)[0])
|
|
115
|
-
} else {
|
|
116
|
-
console.log(highlight(code, { language: 'markdown' }))
|
|
117
|
-
}
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
const confirmPrompt = await confirm({
|
|
121
|
-
message: `Are you sure you want to continue?`,
|
|
122
|
-
default: true,
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
if (!confirmPrompt) {
|
|
126
|
-
process.exit(1)
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return prompt
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
public async streamText(request: GPTRequest): Promise<AxiosResponse> {
|
|
134
|
-
request.stream = true
|
|
135
|
-
request.temperature ||= this.temperature
|
|
136
|
-
|
|
137
|
-
const endpoint = this.adapter.getEndpoint(this.stream)
|
|
138
|
-
const payload = this.adapter.getPayload(request, this.stream)
|
|
139
|
-
const headers = this.adapter.getHeaders(this.apiKey)
|
|
140
|
-
|
|
141
|
-
const reviewedPrompt = await this.reviewPrompt(request.prompt, request.messages || [], endpoint)
|
|
142
|
-
if (reviewedPrompt === null) {
|
|
143
|
-
throw new Error('Operation cancelled by user')
|
|
144
|
-
}
|
|
145
|
-
request.prompt = reviewedPrompt
|
|
146
|
-
|
|
147
|
-
const maxRetries = 5
|
|
148
|
-
let attempt = 0
|
|
149
|
-
let delay = 1000 // Initial delay of 1 second
|
|
150
|
-
|
|
151
|
-
while (attempt < maxRetries) {
|
|
152
|
-
try {
|
|
153
|
-
return await axios({
|
|
154
|
-
method: 'post',
|
|
155
|
-
url: endpoint,
|
|
156
|
-
data: payload,
|
|
157
|
-
headers: headers,
|
|
158
|
-
responseType: 'stream',
|
|
159
|
-
timeout: this.timeout,
|
|
160
|
-
})
|
|
161
|
-
} catch (err) {
|
|
162
|
-
const error = err as AxiosError
|
|
163
|
-
if (error.response && error.response.status === 429) {
|
|
164
|
-
attempt++
|
|
165
|
-
const tokenCount = payload.messages
|
|
166
|
-
.reduce((acc: number, message: any) => acc + Math.ceil(message.content.length / 4), 0)
|
|
167
|
-
.toLocaleString()
|
|
168
|
-
console.warn(
|
|
169
|
-
`${colors.red.bold('ERROR')} Rate limit error for this ${tokenCount} token prompt. Possibly past the token limit for this AI API. Try including fewer code files. Retrying in ${delay / 1000} seconds... (Attempt ${attempt} of ${maxRetries})`,
|
|
170
|
-
)
|
|
171
|
-
await new Promise((resolve) => setTimeout(resolve, delay))
|
|
172
|
-
delay *= 2 // Exponential backoff
|
|
173
|
-
} else {
|
|
174
|
-
throw error
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
throw new Error('Max retries exceeded')
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
public async generateText(request: GPTRequest): Promise<string> {
|
|
183
|
-
request.temperature ||= this.temperature
|
|
184
|
-
|
|
185
|
-
const endpoint = this.adapter.getEndpoint(this.stream)
|
|
186
|
-
const payload = this.adapter.getPayload(request, this.stream)
|
|
187
|
-
const headers = this.adapter.getHeaders(this.apiKey)
|
|
188
|
-
|
|
189
|
-
const reviewedPrompt = await this.reviewPrompt(request.prompt, request.messages || [], endpoint)
|
|
190
|
-
if (reviewedPrompt === null) {
|
|
191
|
-
throw new Error('Operation cancelled by user')
|
|
192
|
-
}
|
|
193
|
-
request.prompt = reviewedPrompt
|
|
194
|
-
|
|
195
|
-
try {
|
|
196
|
-
const response = await axios.post(endpoint, payload, { headers })
|
|
197
|
-
return this.adapter.extractResponse(response.data)
|
|
198
|
-
} catch (err) {
|
|
199
|
-
const error = err as AxiosError
|
|
200
|
-
let errorMessage = 'An error occurred while communicating with the AI server'
|
|
201
|
-
|
|
202
|
-
if (error.response) {
|
|
203
|
-
// The request was made and the server responded with a status code
|
|
204
|
-
// that falls out of the range of 2xx
|
|
205
|
-
errorMessage = `Server responded with status ${error.response.status}: ${error.response.statusText}`
|
|
206
|
-
} else if (error.request) {
|
|
207
|
-
// The request was made but no response was received
|
|
208
|
-
errorMessage = 'No response received from the server'
|
|
209
|
-
} else {
|
|
210
|
-
// Something happened in setting up the request that triggered an Error
|
|
211
|
-
errorMessage = error.message || 'Unknown error occurred'
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
console.error(
|
|
215
|
-
`${colors.red.bold('ERROR')} ${errorMessage}\n` +
|
|
216
|
-
`Endpoint: ${this.adapter.getEndpoint(this.stream)}\n` +
|
|
217
|
-
`Details: ${colors.yellow(JSON.stringify(error.response?.data || {}, null, 2))}\n`,
|
|
218
|
-
)
|
|
219
|
-
|
|
220
|
-
throw new Error(errorMessage)
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
convertStream(data: string): OpenAIStreamChunk | null {
|
|
225
|
-
return this.adapter.convertStream(data)
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
export default ClovingGPT
|
package/src/commands/chat.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import ChatManager from '../managers/ChatManager'
|
|
2
|
-
import { getConfig } from '../utils/config_utils'
|
|
3
|
-
import type { ClovingGPTOptions } from '../utils/types'
|
|
4
|
-
|
|
5
|
-
const chat = async (options: ClovingGPTOptions) => {
|
|
6
|
-
options.silent = getConfig(options).globalSilent || false
|
|
7
|
-
options.stream = true
|
|
8
|
-
const chatManager = new ChatManager(options)
|
|
9
|
-
await chatManager.initialize()
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export default chat
|
package/src/commands/config.ts
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import { getConfig, saveConfig } from '../utils/config_utils'
|
|
2
|
-
import { fetchModels } from '../utils/prompt_utils'
|
|
3
|
-
import type { ClovingModelConfig } from '../utils/types'
|
|
4
|
-
|
|
5
|
-
// Add this type definition at the top of the file
|
|
6
|
-
import { select, input, confirm } from '@inquirer/prompts'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Configures the AI models by prompting the user for various settings.
|
|
10
|
-
*
|
|
11
|
-
* @returns {Promise<void>} A promise that resolves when the configuration is complete.
|
|
12
|
-
*/
|
|
13
|
-
export const config = async (): Promise<void> => {
|
|
14
|
-
let currentConfig = getConfig({})
|
|
15
|
-
|
|
16
|
-
// Ensure models are initialized properly
|
|
17
|
-
if (!currentConfig.models) {
|
|
18
|
-
currentConfig.models = {}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const models = await fetchModels()
|
|
22
|
-
if (models.length === 0) {
|
|
23
|
-
console.error('No models available.')
|
|
24
|
-
throw new Error('No models available')
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
let continueConfig = true
|
|
28
|
-
|
|
29
|
-
while (continueConfig) {
|
|
30
|
-
const providers = [...new Set(models.map((model) => model.split(':')[0]))]
|
|
31
|
-
/**
|
|
32
|
-
* Prompts the user to select a provider from the available models.
|
|
33
|
-
*/
|
|
34
|
-
const selectedProvider = await select({
|
|
35
|
-
message: 'Select a provider:',
|
|
36
|
-
choices: providers.map((provider) => ({ name: provider, value: provider })),
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
const providerModels = models.filter((model) => model.startsWith(selectedProvider))
|
|
40
|
-
const modelCategories = [...new Set(providerModels.map((model) => model.split(':')[1]))]
|
|
41
|
-
/**
|
|
42
|
-
* Prompts the user to select a category from the selected provider's models.
|
|
43
|
-
*/
|
|
44
|
-
const selectedCategory = await select({
|
|
45
|
-
message: 'Select a category:',
|
|
46
|
-
choices: modelCategories.map((category) => ({ name: category, value: category })),
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
const specificModels = providerModels.filter(
|
|
50
|
-
(model) => model.split(':')[1] === selectedCategory,
|
|
51
|
-
)
|
|
52
|
-
/**
|
|
53
|
-
* Prompts the user to select a specific model from the selected category.
|
|
54
|
-
*/
|
|
55
|
-
const modelIndex = await select({
|
|
56
|
-
message: "Select an AI model you'd like to use:",
|
|
57
|
-
choices: specificModels.map((model, index) => ({ name: model, value: index })),
|
|
58
|
-
pageSize: specificModels.length,
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
const selectedModel = specificModels[modelIndex]
|
|
62
|
-
/**
|
|
63
|
-
* Prompts the user to enter the API key for the selected model.
|
|
64
|
-
*/
|
|
65
|
-
const apiKey = await input({
|
|
66
|
-
message: `Enter your API key for ${selectedModel}: `,
|
|
67
|
-
})
|
|
68
|
-
const [provider, ...modelParts] = selectedModel?.split(':') || []
|
|
69
|
-
const model = modelParts.join(':')
|
|
70
|
-
|
|
71
|
-
if (!currentConfig.models[provider]) {
|
|
72
|
-
currentConfig.models[provider] = {}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Prompts the user to set the selected model as the primary model.
|
|
77
|
-
*/
|
|
78
|
-
const primary = await confirm({
|
|
79
|
-
message:
|
|
80
|
-
'Set this model as the primary? Primary models are used by default if your prompt fits within its context window. You can configure backup models for larger prompts.',
|
|
81
|
-
default: true,
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Prompts the user to enter the priority for the selected model.
|
|
86
|
-
*
|
|
87
|
-
* @returns {string} The priority value as a string.
|
|
88
|
-
*/
|
|
89
|
-
const priority = await input({
|
|
90
|
-
message:
|
|
91
|
-
'Enter the priority for this model (0-100). Higher priority AI APIs are chosen as long as the prompt fits its context window:',
|
|
92
|
-
default: primary ? '100' : '0',
|
|
93
|
-
validate: (input: string) => {
|
|
94
|
-
const num = parseInt(input, 10)
|
|
95
|
-
if (isNaN(num) || num < 0 || num > 100) {
|
|
96
|
-
return 'Please enter a valid number between 0 and 100.'
|
|
97
|
-
}
|
|
98
|
-
return true
|
|
99
|
-
},
|
|
100
|
-
})
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Prompts the user to decide if they want to review all prompts before they are sent to the selected model.
|
|
104
|
-
*/
|
|
105
|
-
const review = await confirm({
|
|
106
|
-
message: `Do you want to review all prompts before they are sent to ${selectedModel}?`,
|
|
107
|
-
default: false,
|
|
108
|
-
})
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Prompts the user to decide if they trust the selected model with sensitive information.
|
|
112
|
-
*/
|
|
113
|
-
const trust = await confirm({
|
|
114
|
-
message: `Do you trust ${selectedModel} with sensitive information?`,
|
|
115
|
-
default: true,
|
|
116
|
-
})
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Prompts the user to enter the temperature setting for the selected model.
|
|
120
|
-
*
|
|
121
|
-
* @returns {string} The temperature value as a string.
|
|
122
|
-
*/
|
|
123
|
-
const temperature = await input({
|
|
124
|
-
message: `Enter the temperature for ${selectedModel} (0.0 - 1.0): [0.2]`,
|
|
125
|
-
default: '0.2',
|
|
126
|
-
validate: (value: string) => {
|
|
127
|
-
const num = parseFloat(value)
|
|
128
|
-
if (isNaN(num) || num < 0 || num > 1) {
|
|
129
|
-
return 'Please enter a valid number between 0.0 and 1.0.'
|
|
130
|
-
}
|
|
131
|
-
return true
|
|
132
|
-
},
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
const parsedTemperature = parseFloat(temperature)
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Constructs the model configuration object.
|
|
139
|
-
*/
|
|
140
|
-
let modelConfig: ClovingModelConfig = {
|
|
141
|
-
apiKey,
|
|
142
|
-
primary,
|
|
143
|
-
priority: parseInt(priority, 10),
|
|
144
|
-
silent: !review,
|
|
145
|
-
trust,
|
|
146
|
-
temperature: parsedTemperature,
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
if (provider === 'azureopenai') {
|
|
150
|
-
/**
|
|
151
|
-
* Prompts the user to enter the Azure OpenAI endpoint URL.
|
|
152
|
-
*/
|
|
153
|
-
const endpoint = await input({
|
|
154
|
-
message: 'Enter the Azure OpenAI endpoint URL:',
|
|
155
|
-
validate: (value: string) => {
|
|
156
|
-
if (!value.startsWith('https://')) {
|
|
157
|
-
return 'Please enter a valid HTTPS URL'
|
|
158
|
-
}
|
|
159
|
-
return true
|
|
160
|
-
},
|
|
161
|
-
})
|
|
162
|
-
modelConfig.endpoint = endpoint
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
currentConfig.models[provider][model] = modelConfig
|
|
166
|
-
|
|
167
|
-
if (primary) {
|
|
168
|
-
// Ensure only one primary model
|
|
169
|
-
for (const p in currentConfig.models) {
|
|
170
|
-
for (const m in currentConfig.models[p]) {
|
|
171
|
-
if (p !== provider || m !== model) {
|
|
172
|
-
currentConfig.models[p][m].primary = false
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Prompts the user to decide if they want to configure another model.
|
|
180
|
-
*/
|
|
181
|
-
const anotherModel = await confirm({
|
|
182
|
-
message: 'Do you want to configure another model?',
|
|
183
|
-
default: true,
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
continueConfig = anotherModel
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
saveConfig(currentConfig)
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
export default config
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { getConfig } from '../../utils/config_utils'
|
|
2
|
-
import ChatManager from '../../managers/ChatManager'
|
|
3
|
-
import CodeManager from '../../managers/CodeManager'
|
|
4
|
-
import type { ClovingGPTOptions } from '../../utils/types'
|
|
5
|
-
|
|
6
|
-
const code = async (options: ClovingGPTOptions) => {
|
|
7
|
-
if (options.interactive) {
|
|
8
|
-
options.silent = getConfig(options).globalSilent || false
|
|
9
|
-
options.stream = true
|
|
10
|
-
const chatManager = new ChatManager(options)
|
|
11
|
-
await chatManager.initialize()
|
|
12
|
-
} else {
|
|
13
|
-
const codeManager = new CodeManager(options)
|
|
14
|
-
await codeManager.initialize()
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export default code
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { ClovingGPTOptions } from '../../utils/types'
|
|
2
|
-
import CommitManager from '../../managers/CommitManager'
|
|
3
|
-
|
|
4
|
-
const commit = async (options: ClovingGPTOptions) => {
|
|
5
|
-
const commitManager = new CommitManager(options)
|
|
6
|
-
await commitManager.generateCommit()
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export default commit
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import highlight from 'cli-highlight'
|
|
2
|
-
import ncp from 'copy-paste'
|
|
3
|
-
import fs from 'fs'
|
|
4
|
-
import path from 'path'
|
|
5
|
-
import { input, confirm } from '@inquirer/prompts'
|
|
6
|
-
|
|
7
|
-
import { collectSpecialFileContents, addFileOrDirectoryToContext } from '../../utils/prompt_utils'
|
|
8
|
-
import { getConfig, getNearestClovingConfig, getAllFiles } from '../../utils/config_utils'
|
|
9
|
-
import type { ClovingGPTOptions } from '../../utils/types'
|
|
10
|
-
|
|
11
|
-
const generateContextPrompt = (files: string[], contextFiles: Record<string, string>): string => {
|
|
12
|
-
const specialFileContents = collectSpecialFileContents()
|
|
13
|
-
const specialFiles = Object.keys(specialFileContents)
|
|
14
|
-
.map(
|
|
15
|
-
(file) =>
|
|
16
|
-
`### Contents of ${file}\n\n${JSON.stringify(specialFileContents[file], null, 2)}\n\n`,
|
|
17
|
-
)
|
|
18
|
-
.join('\n')
|
|
19
|
-
const contextFileContents = Object.keys(contextFiles)
|
|
20
|
-
.map((file) => `### Contents of ${file}\n\n${contextFiles[file]}\n\n`)
|
|
21
|
-
.join('\n')
|
|
22
|
-
|
|
23
|
-
return `### Description of App
|
|
24
|
-
|
|
25
|
-
${JSON.stringify(getNearestClovingConfig().config, null, 2)}
|
|
26
|
-
|
|
27
|
-
${specialFiles}
|
|
28
|
-
|
|
29
|
-
${contextFileContents}
|
|
30
|
-
|
|
31
|
-
### Directory structure
|
|
32
|
-
|
|
33
|
-
${files.join('\n')}`
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const context = async (options: ClovingGPTOptions) => {
|
|
37
|
-
let { files } = options
|
|
38
|
-
options.silent = getConfig(options).globalSilent || false
|
|
39
|
-
const allSrcFiles = await getAllFiles(options, false)
|
|
40
|
-
let contextFiles: Record<string, string> = {}
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
if (files) {
|
|
44
|
-
for (const file of files) {
|
|
45
|
-
const filePath = path.resolve(file)
|
|
46
|
-
if (
|
|
47
|
-
await fs.promises
|
|
48
|
-
.stat(filePath)
|
|
49
|
-
.then((stat) => stat.isFile())
|
|
50
|
-
.catch(() => false)
|
|
51
|
-
) {
|
|
52
|
-
const content = await fs.promises.readFile(filePath, 'utf-8')
|
|
53
|
-
contextFiles[file] = content
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
} else {
|
|
57
|
-
let includeMoreFiles = true
|
|
58
|
-
|
|
59
|
-
while (includeMoreFiles) {
|
|
60
|
-
const contextFile = await input({
|
|
61
|
-
message:
|
|
62
|
-
'Enter the relative path of a file or directory you would like to include as context (or press enter to continue):',
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
if (contextFile) {
|
|
66
|
-
contextFiles = await addFileOrDirectoryToContext(contextFile, contextFiles, options)
|
|
67
|
-
} else {
|
|
68
|
-
includeMoreFiles = false
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const contextPrompt = generateContextPrompt(allSrcFiles, contextFiles)
|
|
74
|
-
|
|
75
|
-
console.log('\nGenerated Context Prompt:')
|
|
76
|
-
console.log(highlight(contextPrompt, { language: 'markdown' }))
|
|
77
|
-
|
|
78
|
-
const copyToClipboard = await confirm({
|
|
79
|
-
message: 'Do you want to copy the context prompt to your clipboard?',
|
|
80
|
-
default: true,
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
if (copyToClipboard) {
|
|
84
|
-
ncp.copy(contextPrompt, () => {
|
|
85
|
-
console.log('Context prompt copied to clipboard')
|
|
86
|
-
})
|
|
87
|
-
}
|
|
88
|
-
} catch (error) {
|
|
89
|
-
console.error('Could not generate context', error)
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export default context
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import DocsManager from '../../managers/DocsManager'
|
|
2
|
-
import type { ClovingGPTOptions } from '../../utils/types'
|
|
3
|
-
|
|
4
|
-
const docs = async (options: ClovingGPTOptions) => {
|
|
5
|
-
const docsManager = new DocsManager(options)
|
|
6
|
-
await docsManager.generateDocs()
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export default docs
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import ReviewManager from '../../managers/ReviewManager'
|
|
2
|
-
import type { ClovingGPTOptions } from '../../utils/types'
|
|
3
|
-
|
|
4
|
-
const review = async (options: ClovingGPTOptions) => {
|
|
5
|
-
const reviewManager = new ReviewManager(options)
|
|
6
|
-
await reviewManager.generateReview()
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export default review
|