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,185 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const prompts_1 = require("@inquirer/prompts");
|
|
7
|
-
const cli_highlight_1 = __importDefault(require("cli-highlight"));
|
|
8
|
-
const colors_1 = __importDefault(require("colors"));
|
|
9
|
-
const cloving_gpt_1 = __importDefault(require("../cloving_gpt"));
|
|
10
|
-
const config_utils_1 = require("../utils/config_utils");
|
|
11
|
-
const prompt_utils_1 = require("../utils/prompt_utils");
|
|
12
|
-
const string_utils_1 = require("../utils/string_utils");
|
|
13
|
-
const prompts_2 = require("../utils/prompts");
|
|
14
|
-
const StreamManager_1 = __importDefault(require("./StreamManager"));
|
|
15
|
-
class CodeManager extends StreamManager_1.default {
|
|
16
|
-
constructor(options) {
|
|
17
|
-
super(options);
|
|
18
|
-
options.silent = (0, config_utils_1.getConfig)(options).globalSilent || false;
|
|
19
|
-
options.stream = true;
|
|
20
|
-
this.gpt = new cloving_gpt_1.default(options);
|
|
21
|
-
}
|
|
22
|
-
async initialize() {
|
|
23
|
-
try {
|
|
24
|
-
if (this.options.files) {
|
|
25
|
-
for (const file of this.options.files) {
|
|
26
|
-
this.contextFiles = await (0, prompt_utils_1.addFileOrDirectoryToContext)(file, this.contextFiles, this.options);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
let includeMoreFiles = true;
|
|
31
|
-
while (includeMoreFiles) {
|
|
32
|
-
const contextFile = await (0, prompts_1.input)({
|
|
33
|
-
message: `Enter the relative path of a file or directory you would like to include as context (or press enter to continue): `,
|
|
34
|
-
});
|
|
35
|
-
if (contextFile) {
|
|
36
|
-
this.contextFiles = await (0, prompt_utils_1.addFileOrDirectoryToContext)(contextFile, this.contextFiles, this.options);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
includeMoreFiles = false;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (!this.options.prompt) {
|
|
44
|
-
const userPrompt = await (0, prompts_1.input)({
|
|
45
|
-
message: 'What would you like the code to do:',
|
|
46
|
-
});
|
|
47
|
-
this.options.prompt = userPrompt;
|
|
48
|
-
}
|
|
49
|
-
await this.generateCode(this.options.prompt);
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
const error = err;
|
|
53
|
-
console.error('Could not generate code', error.message);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
async generateCode(userPrompt) {
|
|
57
|
-
await this.checkForLatestVersion();
|
|
58
|
-
await this.loadContextFiles();
|
|
59
|
-
if (this.chatHistory.length === 0) {
|
|
60
|
-
this.addUserPrompt((0, prompt_utils_1.generateCodegenPrompt)(this.contextFiles));
|
|
61
|
-
this.addAssistantResponse('What would you like to do?');
|
|
62
|
-
}
|
|
63
|
-
this.addUserPrompt(userPrompt);
|
|
64
|
-
try {
|
|
65
|
-
const responseStream = await this.gpt.streamText({
|
|
66
|
-
prompt: userPrompt,
|
|
67
|
-
messages: this.chatHistory,
|
|
68
|
-
});
|
|
69
|
-
this.handleResponseStream(responseStream);
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
const error = err;
|
|
73
|
-
console.error('Error streaming response:', error.message);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
async handleUserAction(response) {
|
|
77
|
-
const currentNewBlocks = (0, string_utils_1.extractCurrentNewBlocks)(response);
|
|
78
|
-
const files = Array.from(new Set(currentNewBlocks.map((block) => block.filePath)));
|
|
79
|
-
if (this.options.save) {
|
|
80
|
-
await (0, string_utils_1.applyAndSaveCurrentNewBlocks)(currentNewBlocks);
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
const action = await (0, prompts_1.select)({
|
|
84
|
-
message: 'What would you like to do?',
|
|
85
|
-
choices: [
|
|
86
|
-
{ name: 'Revise', value: 'revise' },
|
|
87
|
-
{ name: 'Explain', value: 'explain' },
|
|
88
|
-
{ name: 'Save a Source Code File', value: 'save' },
|
|
89
|
-
{ name: 'Save All Source Code Files', value: 'saveAll' },
|
|
90
|
-
{ name: 'Copy Source Code to Clipboard', value: 'copySource' },
|
|
91
|
-
{ name: 'Copy Entire Response to Clipboard', value: 'copyAll' },
|
|
92
|
-
{ name: 'Done', value: 'done' },
|
|
93
|
-
],
|
|
94
|
-
});
|
|
95
|
-
switch (action) {
|
|
96
|
-
case 'revise':
|
|
97
|
-
const newPrompt = await (0, prompts_1.input)({
|
|
98
|
-
message: 'How would you like to modify the output:',
|
|
99
|
-
});
|
|
100
|
-
let includeMoreFiles = true;
|
|
101
|
-
while (includeMoreFiles) {
|
|
102
|
-
const contextFile = await (0, prompts_1.input)({
|
|
103
|
-
message: 'Enter the relative path of a file or directory you would like to include as context (or press enter to continue):',
|
|
104
|
-
});
|
|
105
|
-
if (contextFile) {
|
|
106
|
-
this.contextFiles = await (0, prompt_utils_1.addFileOrDirectoryToContext)(contextFile, this.contextFiles, this.options);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
includeMoreFiles = false;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
await this.generateCode(newPrompt);
|
|
113
|
-
break;
|
|
114
|
-
case 'explain':
|
|
115
|
-
const explainPrompt = this.generateExplainCodePrompt(response);
|
|
116
|
-
this.chatHistory.push({ role: 'user', content: explainPrompt });
|
|
117
|
-
const explainCodeCommand = await this.gpt.generateText({
|
|
118
|
-
prompt: explainPrompt,
|
|
119
|
-
messages: this.chatHistory,
|
|
120
|
-
});
|
|
121
|
-
console.log((0, cli_highlight_1.default)(explainCodeCommand, { language: 'markdown' }));
|
|
122
|
-
break;
|
|
123
|
-
case 'save':
|
|
124
|
-
let saveAnother = true;
|
|
125
|
-
while (saveAnother) {
|
|
126
|
-
const fileToSave = await (0, prompts_1.select)({
|
|
127
|
-
message: 'Which file do you want to save?',
|
|
128
|
-
choices: files.map((file) => ({ name: file, value: file })),
|
|
129
|
-
});
|
|
130
|
-
await (0, string_utils_1.applyAndSaveCurrentNewBlocks)(currentNewBlocks.filter((block) => block.filePath === fileToSave));
|
|
131
|
-
const saveMore = await (0, prompts_1.confirm)({
|
|
132
|
-
message: 'Do you want to save another file?',
|
|
133
|
-
default: true,
|
|
134
|
-
});
|
|
135
|
-
saveAnother = saveMore;
|
|
136
|
-
}
|
|
137
|
-
break;
|
|
138
|
-
case 'saveAll':
|
|
139
|
-
await (0, string_utils_1.applyAndSaveCurrentNewBlocks)(currentNewBlocks);
|
|
140
|
-
console.log(colors_1.default.green('\nAll files have been saved.'));
|
|
141
|
-
break;
|
|
142
|
-
case 'done':
|
|
143
|
-
break;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
generateExplainCodePrompt(prompt) {
|
|
147
|
-
return `${prompt}
|
|
148
|
-
|
|
149
|
-
# Task
|
|
150
|
-
|
|
151
|
-
Please briefly explain how the code works in this.`;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Finalizes the response processing.
|
|
155
|
-
* This method should be overridden to provide specific finalization behavior.
|
|
156
|
-
* @protected
|
|
157
|
-
*/
|
|
158
|
-
async finalizeResponse() {
|
|
159
|
-
this.addAssistantResponse(this.responseString);
|
|
160
|
-
this.isProcessing = false;
|
|
161
|
-
if (this.responseString !== '') {
|
|
162
|
-
const currentNewBlocks = (0, string_utils_1.extractCurrentNewBlocks)(this.responseString);
|
|
163
|
-
const [canApply, summary] = await (0, string_utils_1.checkBlocksApplicability)(currentNewBlocks);
|
|
164
|
-
if (!canApply) {
|
|
165
|
-
await this.handleUnapplicableBlocks(summary);
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
this.retryCount = 0; // Reset the retry count on successful application
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
await this.handleUserAction(this.responseString);
|
|
172
|
-
}
|
|
173
|
-
async handleUnapplicableBlocks(summary) {
|
|
174
|
-
if (this.retryCount < this.maxRetries) {
|
|
175
|
-
console.log(`\n\n${summary}\n\n${colors_1.default.yellow.bold('WARNING')} Some of the provided code blocks could not be automatically applied. Retrying (Attempt ${this.retryCount + 1}/${this.maxRetries})...\n`);
|
|
176
|
-
this.retryCount++;
|
|
177
|
-
await this.generateCode(`${prompts_2.CODEGEN_COULDNT_APPLY}\n\n${summary}`);
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
console.log(`\n\n${colors_1.default.red.bold('ERROR')} Failed to generate a diff that could be cleanly applied after ${this.maxRetries} attempts. Please review the changes manually and try again.\n`);
|
|
181
|
-
this.retryCount = 0; // Reset the retry count for future attempts
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
exports.default = CodeManager;
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const fs_1 = __importDefault(require("fs"));
|
|
7
|
-
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const child_process_1 = require("child_process");
|
|
9
|
-
const string_utils_1 = require("../utils/string_utils");
|
|
10
|
-
const git_utils_1 = require("../utils/git_utils");
|
|
11
|
-
const config_utils_1 = require("../utils/config_utils");
|
|
12
|
-
const cloving_gpt_1 = __importDefault(require("../cloving_gpt"));
|
|
13
|
-
class CommitManager {
|
|
14
|
-
constructor(options) {
|
|
15
|
-
options.silent = (0, config_utils_1.getConfig)(options).globalSilent || false;
|
|
16
|
-
this.gpt = new cloving_gpt_1.default(options);
|
|
17
|
-
}
|
|
18
|
-
cleanCommitMessage(message) {
|
|
19
|
-
// Remove markdown code block formatting if present, including any text before and after
|
|
20
|
-
const codeBlockRegex = /.*?```.*\n(.*?)\n```.*/m;
|
|
21
|
-
const match = message.match(codeBlockRegex);
|
|
22
|
-
return match ? match[1].trim() : message.trim();
|
|
23
|
-
}
|
|
24
|
-
async generateCommit() {
|
|
25
|
-
try {
|
|
26
|
-
// Get the git diff
|
|
27
|
-
const diff = (0, child_process_1.execSync)('git diff HEAD').toString().trim();
|
|
28
|
-
// Check if the diff is blank
|
|
29
|
-
if (!diff) {
|
|
30
|
-
console.error('No changes to commit.');
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
// Generate the prompt for commit message
|
|
34
|
-
const prompt = (0, git_utils_1.generateCommitMessagePrompt)(diff);
|
|
35
|
-
// Instantiate ClovingGPT and get the commit message
|
|
36
|
-
const rawCommitMessage = await this.gpt.generateText({ prompt });
|
|
37
|
-
// Clean the commit message using extractMarkdown and remove code blocks
|
|
38
|
-
const commitMessage = this.cleanCommitMessage((0, string_utils_1.extractMarkdown)(rawCommitMessage));
|
|
39
|
-
// Write the commit message to a temporary file
|
|
40
|
-
const tempCommitFilePath = path_1.default.join('.git', 'SUGGESTED_COMMIT_EDITMSG');
|
|
41
|
-
fs_1.default.writeFileSync(tempCommitFilePath, commitMessage);
|
|
42
|
-
// Commit the changes using the generated commit message
|
|
43
|
-
try {
|
|
44
|
-
(0, child_process_1.execFileSync)('git', ['commit', '-a', '--edit', '--file', tempCommitFilePath], {
|
|
45
|
-
stdio: 'inherit',
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
catch (commitError) {
|
|
49
|
-
// If commit is canceled (non-zero exit), handle it here
|
|
50
|
-
console.log('Commit was canceled or failed.');
|
|
51
|
-
}
|
|
52
|
-
// Remove the temporary file using fs
|
|
53
|
-
fs_1.default.unlink(tempCommitFilePath, (err) => {
|
|
54
|
-
if (err)
|
|
55
|
-
throw err;
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
const error = err;
|
|
60
|
-
console.error('Could not generate commit message:', error.message);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
exports.default = CommitManager;
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const prompts_1 = require("@inquirer/prompts");
|
|
7
|
-
const colors_1 = __importDefault(require("colors"));
|
|
8
|
-
const cloving_gpt_1 = __importDefault(require("../cloving_gpt"));
|
|
9
|
-
const config_utils_1 = require("../utils/config_utils");
|
|
10
|
-
const prompts_2 = require("../utils/prompts");
|
|
11
|
-
const prompt_utils_1 = require("../utils/prompt_utils");
|
|
12
|
-
const string_utils_1 = require("../utils/string_utils");
|
|
13
|
-
const StreamManager_1 = __importDefault(require("./StreamManager"));
|
|
14
|
-
/**
|
|
15
|
-
* Manages the generation of documentation for specified files.
|
|
16
|
-
*/
|
|
17
|
-
class DocsManager extends StreamManager_1.default {
|
|
18
|
-
/**
|
|
19
|
-
* Creates a new DocumentationManager instance.
|
|
20
|
-
* @param {ClovingGPTOptions} options - Configuration options for the DocumentationManager.
|
|
21
|
-
*/
|
|
22
|
-
constructor(options) {
|
|
23
|
-
super(options);
|
|
24
|
-
options.silent = (0, config_utils_1.getConfig)(options).globalSilent || false;
|
|
25
|
-
options.stream = true;
|
|
26
|
-
this.gpt = new cloving_gpt_1.default(options);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Generates documentation for the specified files.
|
|
30
|
-
* @returns {Promise<void>}
|
|
31
|
-
*/
|
|
32
|
-
async generateDocs(extraPrompt) {
|
|
33
|
-
try {
|
|
34
|
-
this.isProcessing = true;
|
|
35
|
-
if (this.retryCount === 0) {
|
|
36
|
-
await this.checkForLatestVersion();
|
|
37
|
-
}
|
|
38
|
-
await this.loadContextFiles();
|
|
39
|
-
this.addUserPrompt(`${(0, prompt_utils_1.generateDocsPrompt)(this.contextFiles)}\n\n${extraPrompt || ''}`);
|
|
40
|
-
const responseStream = await this.gpt.streamText({
|
|
41
|
-
prompt: this.prompt,
|
|
42
|
-
messages: this.chatHistory,
|
|
43
|
-
});
|
|
44
|
-
this.handleResponseStream(responseStream);
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
console.error(colors_1.default.red('Error generating documentation:'), error);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Finalizes the response processing.
|
|
52
|
-
* This method should be overridden to provide specific finalization behavior.
|
|
53
|
-
* @protected
|
|
54
|
-
*/
|
|
55
|
-
async finalizeResponse() {
|
|
56
|
-
this.addAssistantResponse(this.responseString);
|
|
57
|
-
this.isProcessing = false;
|
|
58
|
-
if (this.responseString !== '') {
|
|
59
|
-
const currentNewBlocks = (0, string_utils_1.extractCurrentNewBlocks)(this.responseString);
|
|
60
|
-
const [canApply, summary] = await (0, string_utils_1.checkBlocksApplicability)(currentNewBlocks);
|
|
61
|
-
if (canApply && currentNewBlocks.length > 0) {
|
|
62
|
-
const shouldSave = await (0, prompts_1.confirm)({
|
|
63
|
-
message: '\n\nDo you want to save the generated documentation?',
|
|
64
|
-
default: true,
|
|
65
|
-
});
|
|
66
|
-
if (shouldSave) {
|
|
67
|
-
await (0, string_utils_1.applyAndSaveCurrentNewBlocks)(currentNewBlocks);
|
|
68
|
-
console.log(colors_1.default.green('\nDocumentation has been saved to the respective files.'));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
if (this.retryCount < this.maxRetries) {
|
|
73
|
-
console.log(`\n\n${summary}\n\n${colors_1.default.yellow.bold('WARNING')} Some of the provided code blocks could not be automatically applied. Retrying (Attempt ${this.retryCount + 1}/${this.maxRetries})...\n`);
|
|
74
|
-
this.retryCount++;
|
|
75
|
-
this.generateDocs(`\n\n${prompts_2.CODEGEN_COULDNT_APPLY}\n\n${summary}`);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
console.log(`\n\n${colors_1.default.red.bold('ERROR')} Failed to generate a diff that could be cleanly applied after ${this.maxRetries} attempts. Please review the changes manually and try again.\n`);
|
|
80
|
-
this.retryCount = 0; // Reset the retry count for future attempts
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
// Reset responseString after processing
|
|
85
|
-
this.responseString = '';
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
exports.default = DocsManager;
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const prompts_1 = require("@inquirer/prompts");
|
|
7
|
-
const colors_1 = __importDefault(require("colors"));
|
|
8
|
-
const cli_highlight_1 = __importDefault(require("cli-highlight"));
|
|
9
|
-
const cloving_gpt_1 = __importDefault(require("../cloving_gpt"));
|
|
10
|
-
const config_utils_1 = require("../utils/config_utils");
|
|
11
|
-
const prompt_utils_1 = require("../utils/prompt_utils");
|
|
12
|
-
const prompts_2 = require("../utils/prompts");
|
|
13
|
-
const string_utils_1 = require("../utils/string_utils");
|
|
14
|
-
/**
|
|
15
|
-
* Manages the generation of documentation for specified files.
|
|
16
|
-
*/
|
|
17
|
-
class DocumentationManager {
|
|
18
|
-
/**
|
|
19
|
-
* Creates a new DocumentationManager instance.
|
|
20
|
-
* @param {ClovingGPTOptions} options - Configuration options for the DocumentationManager.
|
|
21
|
-
*/
|
|
22
|
-
constructor(options) {
|
|
23
|
-
this.options = options;
|
|
24
|
-
this.contextFiles = {};
|
|
25
|
-
this.chatHistory = [];
|
|
26
|
-
this.options.silent = (0, config_utils_1.getConfig)(options).globalSilent || false;
|
|
27
|
-
this.gpt = new cloving_gpt_1.default(options);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Generates documentation for the specified files.
|
|
31
|
-
* @returns {Promise<void>}
|
|
32
|
-
*/
|
|
33
|
-
async generateDocumentation() {
|
|
34
|
-
try {
|
|
35
|
-
await this.loadContextFiles();
|
|
36
|
-
if (this.chatHistory.length === 0) {
|
|
37
|
-
this.chatHistory.push({ role: 'user', content: prompts_2.CODEGEN_INSTRUCTIONS });
|
|
38
|
-
this.chatHistory.push({ role: 'assistant', content: 'What would you like to do?' });
|
|
39
|
-
}
|
|
40
|
-
const prompt = this.generateDocumentationPrompt();
|
|
41
|
-
this.chatHistory.push({ role: 'user', content: prompt });
|
|
42
|
-
const response = await this.gpt.generateText({ prompt, messages: this.chatHistory });
|
|
43
|
-
this.displayGeneratedDocumentation(response);
|
|
44
|
-
const currentNewBlocks = (0, string_utils_1.extractCurrentNewBlocks)(response);
|
|
45
|
-
if (currentNewBlocks.length > 0) {
|
|
46
|
-
const shouldSave = await (0, prompts_1.confirm)({
|
|
47
|
-
message: 'Do you want to save the generated documentation?',
|
|
48
|
-
default: true,
|
|
49
|
-
});
|
|
50
|
-
if (shouldSave) {
|
|
51
|
-
await (0, string_utils_1.applyAndSaveCurrentNewBlocks)(currentNewBlocks);
|
|
52
|
-
console.log(colors_1.default.green('\nDocumentation has been saved to the respective files.'));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
console.error(colors_1.default.red('Error generating documentation:'), error);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Displays the generated documentation in the console with syntax highlighting.
|
|
62
|
-
* @param {string} rawDocumentationResponse - The raw documentation response from the GPT model.
|
|
63
|
-
*/
|
|
64
|
-
displayGeneratedDocumentation(rawDocumentationResponse) {
|
|
65
|
-
(0, string_utils_1.parseMarkdownInstructions)(rawDocumentationResponse).map((code) => {
|
|
66
|
-
if (code.trim().startsWith('```')) {
|
|
67
|
-
const lines = code.split('\n');
|
|
68
|
-
const language = code.match(/```(\w+)/)?.[1] || 'plaintext';
|
|
69
|
-
console.log(lines[0]);
|
|
70
|
-
try {
|
|
71
|
-
console.log((0, cli_highlight_1.default)(lines.slice(1, -1).join('\n'), { language }));
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
// don't highlight if it fails
|
|
75
|
-
console.log(lines.slice(1, -1).join('\n'));
|
|
76
|
-
}
|
|
77
|
-
console.log(lines.slice(-1)[0]);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
console.log((0, cli_highlight_1.default)(code, { language: 'markdown' }));
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Loads the context files specified in the options.
|
|
86
|
-
* @returns {Promise<void>}
|
|
87
|
-
*/
|
|
88
|
-
async loadContextFiles() {
|
|
89
|
-
if (this.options.files) {
|
|
90
|
-
for (const file of this.options.files) {
|
|
91
|
-
this.contextFiles = await (0, prompt_utils_1.addFileOrDirectoryToContext)(file, this.contextFiles, this.options);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
console.log(colors_1.default.yellow('No files specified. Please provide files using the -f option.'));
|
|
96
|
-
process.exit(1);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Generates the documentation prompt to be sent to the GPT model.
|
|
101
|
-
* @returns {string} The generated documentation prompt.
|
|
102
|
-
*/
|
|
103
|
-
generateDocumentationPrompt() {
|
|
104
|
-
const contextFileContents = Object.entries(this.contextFiles)
|
|
105
|
-
.map(([file, content]) => `### File: ${file}\n\n\`\`\`\n${content}\n\`\`\`\n`)
|
|
106
|
-
.join('\n\n');
|
|
107
|
-
return `Please generate documentation for the following files. Add or update documentation comments for functions, classes, and modules as appropriate. Use the standard documentation format for the respective language (e.g., JSDoc for JavaScript/TypeScript, docstrings for Python, etc.).
|
|
108
|
-
|
|
109
|
-
${contextFileContents}
|
|
110
|
-
|
|
111
|
-
Please provide the updated files with added documentation using the CURRENT/NEW block format. Only include the parts of the files that have changed.`;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
exports.default = DocumentationManager;
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const fs_1 = __importDefault(require("fs"));
|
|
7
|
-
const os_1 = __importDefault(require("os"));
|
|
8
|
-
const path_1 = __importDefault(require("path"));
|
|
9
|
-
const colors_1 = __importDefault(require("colors"));
|
|
10
|
-
const ignore_1 = __importDefault(require("ignore"));
|
|
11
|
-
const fs_2 = require("fs");
|
|
12
|
-
const prompts_1 = require("@inquirer/prompts");
|
|
13
|
-
const cloving_gpt_1 = __importDefault(require("../cloving_gpt"));
|
|
14
|
-
const string_utils_1 = require("../utils/string_utils");
|
|
15
|
-
const config_utils_1 = require("../utils/config_utils");
|
|
16
|
-
const prompt_utils_1 = require("../utils/prompt_utils");
|
|
17
|
-
const prompts_2 = require("../utils/prompts");
|
|
18
|
-
class InitManager {
|
|
19
|
-
constructor(options) {
|
|
20
|
-
this.options = options;
|
|
21
|
-
this.chatHistory = [];
|
|
22
|
-
this.options.silent = (0, config_utils_1.getConfig)(this.options).globalSilent || false;
|
|
23
|
-
this.gpt = new cloving_gpt_1.default(this.options);
|
|
24
|
-
this.chatHistory.push({
|
|
25
|
-
role: 'system',
|
|
26
|
-
content: prompts_2.INIT_INSTRUCTIONS,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Initializes the InitManager by collecting special file contents, checking for dependencies,
|
|
31
|
-
* and processing the AI response for the project details.
|
|
32
|
-
*
|
|
33
|
-
* @return {Promise<void>} A promise that resolves when the initialization is complete.
|
|
34
|
-
*/
|
|
35
|
-
async initialize() {
|
|
36
|
-
const specialFileContents = (0, prompt_utils_1.collectSpecialFileContents)();
|
|
37
|
-
const specialFileNames = Object.keys(specialFileContents).map((file) => ' - ' + file);
|
|
38
|
-
this.logInitializationMessage(specialFileNames);
|
|
39
|
-
const config = (0, config_utils_1.getConfig)(this.options);
|
|
40
|
-
if (!config || !config?.models) {
|
|
41
|
-
console.error('No cloving configuration found. Please run `cloving config`');
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
if (!(0, prompt_utils_1.checkForSpecialFiles)()) {
|
|
45
|
-
console.error('No dependencies files detected. Please add a dependency file (e.g. package.json, Gemfile, requirements.txt, etc.) to your project and run `cloving init` again.');
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const tempFilePath = path_1.default.join(os_1.default.tmpdir(), `describe_${Date.now()}.tmp`);
|
|
49
|
-
try {
|
|
50
|
-
const limitedFileList = await this.getFilteredFileList();
|
|
51
|
-
const projectDetails = {
|
|
52
|
-
files: limitedFileList,
|
|
53
|
-
specialFiles: specialFileContents,
|
|
54
|
-
};
|
|
55
|
-
const [success, errorMessage] = await this.processAIResponse(projectDetails, tempFilePath);
|
|
56
|
-
if (!success) {
|
|
57
|
-
console.log(errorMessage);
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
await this.promptUserForReview();
|
|
61
|
-
// Clean up
|
|
62
|
-
await fs_2.promises.unlink(tempFilePath);
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
console.error('Error describing the project:', error.message);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Checks if a directory exists at the specified path.
|
|
70
|
-
*
|
|
71
|
-
* @param {string} directory - The path of the directory to check.
|
|
72
|
-
* @return {Promise<boolean>} A promise that resolves to true if the directory exists, false otherwise.
|
|
73
|
-
*/
|
|
74
|
-
async directoryExists(directory) {
|
|
75
|
-
try {
|
|
76
|
-
const stats = await fs_2.promises.stat(directory);
|
|
77
|
-
return stats.isDirectory();
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Returns a filtered list of files, excluding those ignored by the .gitignore file.
|
|
85
|
-
*
|
|
86
|
-
* @return {string[]} A list of file paths, limited to the first 100 files.
|
|
87
|
-
*/
|
|
88
|
-
async getFilteredFileList() {
|
|
89
|
-
const gitignorePath = path_1.default.join(process.cwd(), '.gitignore');
|
|
90
|
-
const ig = (0, ignore_1.default)();
|
|
91
|
-
if (fs_1.default.existsSync(gitignorePath)) {
|
|
92
|
-
const gitignoreContent = fs_1.default.readFileSync(gitignorePath, 'utf-8');
|
|
93
|
-
ig.add(gitignoreContent);
|
|
94
|
-
}
|
|
95
|
-
const fileList = await (0, prompt_utils_1.generateFileList)();
|
|
96
|
-
const filteredFileList = fileList.filter((file) => {
|
|
97
|
-
try {
|
|
98
|
-
return !ig.ignores(file);
|
|
99
|
-
}
|
|
100
|
-
catch (error) {
|
|
101
|
-
return false;
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
return filteredFileList.slice(0, 100);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Logs the initialization message based on the special file names and silent mode.
|
|
108
|
-
*
|
|
109
|
-
* @param {string[]} specialFileNames - A list of special file names to be analyzed.
|
|
110
|
-
* @return {void} No return value.
|
|
111
|
-
*/
|
|
112
|
-
logInitializationMessage(specialFileNames) {
|
|
113
|
-
if (!this.options.silent) {
|
|
114
|
-
if (specialFileNames.length > 0) {
|
|
115
|
-
console.log(`Cloving will analyze the list of files and the contents of the following files:
|
|
116
|
-
|
|
117
|
-
${specialFileNames.join('\n')}
|
|
118
|
-
|
|
119
|
-
Cloving will send AI a request to summarize the technologies used in this project.
|
|
120
|
-
|
|
121
|
-
This will provide better context for future Cloving requests.`);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
console.log(`
|
|
125
|
-
This script will analyze the list of files in the current directory using GPT to summarize the
|
|
126
|
-
technologies used. This will provide better context for future Cloving requests.
|
|
127
|
-
`);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Processes the AI response by generating a prompt, sending it to the AI,
|
|
133
|
-
* and saving the response to a temporary file and cloving.json.
|
|
134
|
-
*
|
|
135
|
-
* @param {any} projectDetails - A JSON object describing the project.
|
|
136
|
-
* @param {string} tempFilePath - The path to the temporary file.
|
|
137
|
-
* @param {string} errorMessage - An error message if there was an error.
|
|
138
|
-
* @return {[boolean, string]} A promise that resolves with an array containing a boolean
|
|
139
|
-
* indicating whether the AI response was successfully processed,
|
|
140
|
-
* and a message explaining any errors.
|
|
141
|
-
*/
|
|
142
|
-
async processAIResponse(projectDetails, tempFilePath, errorMessage = '') {
|
|
143
|
-
const prompt = errorMessage !== ''
|
|
144
|
-
? errorMessage
|
|
145
|
-
: `Here is a JSON object describing my project:
|
|
146
|
-
${JSON.stringify(projectDetails, null, 2)}`;
|
|
147
|
-
this.chatHistory.push({ role: 'user', content: prompt });
|
|
148
|
-
const aiChatResponse = await this.gpt.generateText({ prompt, messages: this.chatHistory });
|
|
149
|
-
this.chatHistory.push({ role: 'assistant', content: aiChatResponse });
|
|
150
|
-
let cleanAiChatResponse = (0, string_utils_1.extractJsonMetadata)(aiChatResponse);
|
|
151
|
-
const [validSyntax, syntaxErrorMessage] = this.checkClovingJsonSyntax(cleanAiChatResponse);
|
|
152
|
-
if (!validSyntax) {
|
|
153
|
-
console.log(syntaxErrorMessage);
|
|
154
|
-
console.log('Retrying...');
|
|
155
|
-
return this.processAIResponse(projectDetails, tempFilePath, syntaxErrorMessage);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
await fs_2.promises.writeFile(tempFilePath, cleanAiChatResponse);
|
|
159
|
-
// Save the AI chat response to cloving.json
|
|
160
|
-
await fs_2.promises.writeFile('cloving.json', cleanAiChatResponse);
|
|
161
|
-
console.log(`Project data saved to ${colors_1.default.green.bold('cloving.json')}`);
|
|
162
|
-
return [true, ''];
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Checks the syntax of the generated cloving.json file.
|
|
167
|
-
*
|
|
168
|
-
* @param {string} cleanAiChatResponse - The cleaned AI chat response.
|
|
169
|
-
* @return {[boolean, string]} An array where the first element is a boolean indicating
|
|
170
|
-
* whether the syntax was valid, and the second element is a
|
|
171
|
-
* message explaining any errors.
|
|
172
|
-
*/
|
|
173
|
-
checkClovingJsonSyntax(cleanAiChatResponse) {
|
|
174
|
-
try {
|
|
175
|
-
JSON.parse(cleanAiChatResponse);
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
return [
|
|
179
|
-
false,
|
|
180
|
-
`${colors_1.default.red.bold('ERROR:')} parsing cloving.json: ${colors_1.default.red.bold(error.message)}`,
|
|
181
|
-
];
|
|
182
|
-
}
|
|
183
|
-
const clovingJson = JSON.parse(cleanAiChatResponse);
|
|
184
|
-
const directoriesToCheck = [
|
|
185
|
-
...clovingJson.languages.map((language) => ({
|
|
186
|
-
type: 'Language',
|
|
187
|
-
name: language.name,
|
|
188
|
-
directory: language.directory,
|
|
189
|
-
})),
|
|
190
|
-
...clovingJson.frameworks.map((framework) => ({
|
|
191
|
-
type: 'Framework',
|
|
192
|
-
name: framework.name,
|
|
193
|
-
directory: framework.directory,
|
|
194
|
-
})),
|
|
195
|
-
...clovingJson.testingFrameworks.map((testingFramework) => ({
|
|
196
|
-
type: 'Testing Framework',
|
|
197
|
-
name: testingFramework.name,
|
|
198
|
-
directory: testingFramework.directory,
|
|
199
|
-
})),
|
|
200
|
-
];
|
|
201
|
-
const missingDirectories = directoriesToCheck.filter((item) => !fs_1.default.existsSync(item.directory));
|
|
202
|
-
if (missingDirectories.length > 0) {
|
|
203
|
-
const missingDirMessages = missingDirectories.map((item) => `${item.type} ${colors_1.default.bold(item.name)}: ${colors_1.default.red.bold(item.directory)}`);
|
|
204
|
-
return [
|
|
205
|
-
false,
|
|
206
|
-
`${colors_1.default.red.bold('ERROR:')} The following directories were not found:\n${missingDirMessages.join('\n')}`,
|
|
207
|
-
];
|
|
208
|
-
}
|
|
209
|
-
return [true, ''];
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Prompts the user to review the generated data if the `silent` option is not set.
|
|
213
|
-
* If the user confirms, reads the content of 'cloving.json' and logs it to the console.
|
|
214
|
-
*
|
|
215
|
-
* @return {Promise<void>} A promise that resolves when the review is complete.
|
|
216
|
-
*/
|
|
217
|
-
async promptUserForReview() {
|
|
218
|
-
if (!this.options.silent) {
|
|
219
|
-
const reviewAnswer = await (0, prompts_1.confirm)({
|
|
220
|
-
message: 'Do you want to review the generated data?',
|
|
221
|
-
default: true,
|
|
222
|
-
});
|
|
223
|
-
if (reviewAnswer) {
|
|
224
|
-
const clovingJsonContent = await fs_2.promises.readFile('cloving.json', 'utf-8');
|
|
225
|
-
console.log(clovingJsonContent);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
exports.default = InitManager;
|