feat(discovery): Add environment variable extraction and migration mapping

This commit is contained in:
2025-11-02 11:44:57 -05:00
parent 22a19b88aa
commit a54ba3d987
16 changed files with 3522 additions and 397 deletions
+2
View File
@@ -160,3 +160,5 @@ claude-flow
claude-flow.bat
claude-flow.ps1
hive-mind-prompt-*.txt
plandex/
+51
View File
@@ -0,0 +1,51 @@
# Environment Variable Mapping
# Old Name -> New Name
#==================================================
PLANDEX_ENV -> CLEVERAGENTS_ENV
PLANDEX_API_HOST -> CLEVERAGENTS_API_HOST
PLANDEX_AWS_PROFILE -> CLEVERAGENTS_AWS_PROFILE
PLANDEX_SKIP_UPGRADE -> CLEVERAGENTS_SKIP_UPGRADE
PLANDEX_OUT_DIR -> CLEVERAGENTS_OUT_DIR
PLANDEX_DEV_CLI_OUT_DIR -> CLEVERAGENTS_DEV_CLI_OUT_DIR
PLANDEX_DEV_CLI_NAME -> CLEVERAGENTS_DEV_CLI_NAME
PLANDEX_DEV_CLI_ALIAS -> CLEVERAGENTS_DEV_CLI_ALIAS
GOPATH -> CLEVERAGENTS_GOPATH
GOENV -> CLEVERAGENTS_GOENV
PLANDEX_BASE_DIR -> CLEVERAGENTS_BASE_DIR
API_HOST -> CLEVERAGENTS_API_HOST
PORT -> CLEVERAGENTS_PORT
DATABASE_URL -> CLEVERAGENTS_DATABASE_URL
LOCAL_MODE -> CLEVERAGENTS_LOCAL_MODE
OLLAMA_BASE_URL -> CLEVERAGENTS_OLLAMA_BASE_URL
SMTP_HOST -> CLEVERAGENTS_SMTP_HOST
SMTP_PORT -> CLEVERAGENTS_SMTP_PORT
SMTP_USER -> CLEVERAGENTS_SMTP_USER
SMTP_PASSWORD -> CLEVERAGENTS_SMTP_PASSWORD
DB_HOST -> CLEVERAGENTS_DB_HOST
DB_PORT -> CLEVERAGENTS_DB_PORT
DB_USER -> CLEVERAGENTS_DB_USER
DB_PASSWORD -> CLEVERAGENTS_DB_PASSWORD
DB_NAME -> CLEVERAGENTS_DB_NAME
MIGRATIONS_DIR -> CLEVERAGENTS_MIGRATIONS_DIR
PLANDEX_CLOUD -> CLEVERAGENTS_CLOUD
SMTP_FROM -> CLEVERAGENTS_SMTP_FROM
IS_CLOUD -> CLEVERAGENTS_IS_CLOUD
APP_SUBDOMAIN -> CLEVERAGENTS_APP_SUBDOMAIN
IP -> CLEVERAGENTS_IP
ECS_CONTAINER_METADATA_URI -> CLEVERAGENTS_ECS_CONTAINER_METADATA_URI
LITELLM_PROXY_DIR -> CLEVERAGENTS_LITELLM_PROXY_DIR
PATH -> CLEVERAGENTS_PATH
HOME -> CLEVERAGENTS_HOME
VERBOSE_LOGGING -> CLEVERAGENTS_VERBOSE_LOGGING
PLANDEX_REPL_SESSION_ID -> CLEVERAGENTS_REPL_SESSION_ID
EDITOR -> CLEVERAGENTS_EDITOR
VISUAL -> CLEVERAGENTS_VISUAL
SHELL -> CLEVERAGENTS_SHELL
PLANDEX_REPL -> CLEVERAGENTS_REPL
PLANDEX_REPL_OUTPUT_FILE -> CLEVERAGENTS_REPL_OUTPUT_FILE
GLAMOUR_STYLE -> CLEVERAGENTS_GLAMOUR_STYLE
PLANDEX_DISABLE_SUGGESTIONS -> CLEVERAGENTS_DISABLE_SUGGESTIONS
PLANDEX_COLUMNS -> CLEVERAGENTS_COLUMNS
COLUMNS -> CLEVERAGENTS_COLUMNS
PLANDEX_STREAM_FOREGROUND_COLOR -> CLEVERAGENTS_STREAM_FOREGROUND_COLOR
+158
View File
@@ -0,0 +1,158 @@
# Environment Variable Migration Guide
## Overview
Total variables: 66
Variables requiring migration: 16
Documented variables: 39
Code-only variables: 27
## Variable Mappings
| Old Name | New Name | Category | Default | Description |
|----------|----------|----------|---------|-------------|
| COLUMNS | CLEVERAGENTS_COLUMNS | CLI | (none) | |
| EDITOR | CLEVERAGENTS_EDITOR | CLI | (none) | |
| GLAMOUR_STYLE | CLEVERAGENTS_GLAMOUR_STYLE | CLI | (none) | |
| PLANDEX_COLUMNS | CLEVERAGENTS_COLUMNS | CLI | (none) | |
| PLANDEX_DISABLE_SUGGESTIONS | CLEVERAGENTS_DISABLE_SUGGESTIONS | CLI | (none) | |
| PLANDEX_REPL | CLEVERAGENTS_REPL | CLI | (none) | |
| PLANDEX_REPL_OUTPUT_FILE | CLEVERAGENTS_REPL_OUTPUT_FILE | CLI | (none) | |
| PLANDEX_REPL_SESSION_ID | CLEVERAGENTS_REPL_SESSION_ID | CLI | (none) | |
| PLANDEX_STREAM_FOREGROUND_COLOR | CLEVERAGENTS_STREAM_FOREGROUND_COLOR | CLI | (none) | |
| SHELL | CLEVERAGENTS_SHELL | CLI | (none) | |
| VISUAL | CLEVERAGENTS_VISUAL | CLI | (none) | |
| GOPATH | CLEVERAGENTS_GOPATH | Development | (none) | This should be already set to your Go folder if yo... |
| PLANDEX_DEV_CLI_ALIAS | CLEVERAGENTS_DEV_CLI_ALIAS | Development | pdxd | The alias for the development binary when using de... |
| PLANDEX_DEV_CLI_NAME | CLEVERAGENTS_DEV_CLI_NAME | Development | plandex-dev | The name of the development binary when using dev.... |
| PLANDEX_DEV_CLI_OUT_DIR | CLEVERAGENTS_DEV_CLI_OUT_DIR | Development | /usr/local/bin | Where the development binary should be output when... |
| PLANDEX_OUT_DIR | CLEVERAGENTS_OUT_DIR | Development | /usr/local/bin | Where the development binary should be output when... |
| API_HOST | CLEVERAGENTS_API_HOST | General | (none) | The host the API server listens on. Defaults to 'h... |
| DATABASE_URL | CLEVERAGENTS_DATABASE_URL | General | (none) | The URL of the PostgreSQL database. Defaults to 'p... |
| GOENV | CLEVERAGENTS_GOENV | General | development | Whether to run in development or production mode. ... |
| LOCAL_MODE | CLEVERAGENTS_LOCAL_MODE | General | (none) | Whether to run in local mode |
| OLLAMA_BASE_URL | CLEVERAGENTS_OLLAMA_BASE_URL | General | (none) | The base URL of the Ollama server—only need when t... |
| PLANDEX_API_HOST | CLEVERAGENTS_API_HOST | General | (none) | Defaults to 'http://localhost:8099' if PLANDEX_ENV... |
| PLANDEX_BASE_DIR | CLEVERAGENTS_BASE_DIR | General | (none) | The base directory to read and write files. Defaul... |
| PLANDEX_ENV | CLEVERAGENTS_ENV | General | development | Set this to 'development' to default to the local ... |
| PORT | CLEVERAGENTS_PORT | General | 8099 | The port the server listens on. Defaults to 8099. |
| ANTHROPIC_API_KEY | ANTHROPIC_API_KEY | LLM Providers | (none) | Your Anthropic API key |
| AWS_ACCESS_KEY_ID | AWS_ACCESS_KEY_ID | LLM Providers | (none) | Your AWS access key ID |
| AWS_INFERENCE_PROFILE_ARN | AWS_INFERENCE_PROFILE_ARN | LLM Providers | (none) | Your AWS inference profile ARN |
| AWS_REGION | AWS_REGION | LLM Providers | (none) | Your AWS region |
| AWS_SECRET_ACCESS_KEY | AWS_SECRET_ACCESS_KEY | LLM Providers | (none) | Your AWS secret access key |
| AWS_SESSION_TOKEN | AWS_SESSION_TOKEN | LLM Providers | (none) | Your AWS session token |
| AZURE_API_BASE | AZURE_API_BASE | LLM Providers | (none) | Your Azure OpenAI API base URL |
| AZURE_API_VERSION | AZURE_API_VERSION | LLM Providers | (none) | Your Azure OpenAI API version |
| AZURE_DEPLOYMENTS_MAP | AZURE_DEPLOYMENTS_MAP | LLM Providers | (none) | Your Azure OpenAI deployments map—a JSON object ma... |
| AZURE_OPENAI_API_KEY | AZURE_OPENAI_API_KEY | LLM Providers | (none) | Your Azure OpenAI API key |
| DEEPSEEK_API_KEY | DEEPSEEK_API_KEY | LLM Providers | (none) | Your DeepSeek API key |
| GEMINI_API_KEY | GEMINI_API_KEY | LLM Providers | (none) | Your Google AI Studio API key |
| GOOGLE_APPLICATION_CREDENTIALS | GOOGLE_APPLICATION_CREDENTIALS | LLM Providers | (none) | Your Google Vertex AI credentials file path |
| OPENAI_API_KEY | OPENAI_API_KEY | LLM Providers | (none) | Your OpenAI key |
| OPENAI_ORG_ID | OPENAI_ORG_ID | LLM Providers | (none) | Your OpenAI organization ID. Defaults to empty. |
| OPENROUTER_API_KEY | OPENROUTER_API_KEY | LLM Providers | (none) | Your OpenRouter.ai API key |
| PERPLEXITY_API_KEY | PERPLEXITY_API_KEY | LLM Providers | (none) | Your Perplexity API key |
| PLANDEX_AWS_PROFILE | CLEVERAGENTS_AWS_PROFILE | LLM Providers | (none) | Name of AWS profile in ~/.aws/credentials to use f... |
| VERTEXAI_LOCATION | VERTEXAI_LOCATION | LLM Providers | (none) | Your Google Vertex AI location |
| VERTEXAI_PROJECT | VERTEXAI_PROJECT | LLM Providers | (none) | Your Google Vertex AI project ID |
| SMTP_HOST | CLEVERAGENTS_SMTP_HOST | SMTP | (none) | Your SMTP host. |
| SMTP_PASSWORD | CLEVERAGENTS_SMTP_PASSWORD | SMTP | (none) | SMTP password. |
| SMTP_PORT | CLEVERAGENTS_SMTP_PORT | SMTP | (none) | Set this to 1025 e.g. if you are using mailhog. |
| SMTP_USER | CLEVERAGENTS_SMTP_USER | SMTP | (none) | SMTP username. |
| APP_SUBDOMAIN | CLEVERAGENTS_APP_SUBDOMAIN | Server | (none) | |
| DB_HOST | CLEVERAGENTS_DB_HOST | Server | (none) | |
| DB_NAME | CLEVERAGENTS_DB_NAME | Server | (none) | |
| DB_PASSWORD | CLEVERAGENTS_DB_PASSWORD | Server | (none) | |
| DB_PORT | CLEVERAGENTS_DB_PORT | Server | (none) | |
| DB_USER | CLEVERAGENTS_DB_USER | Server | (none) | |
| ECS_CONTAINER_METADATA_URI | CLEVERAGENTS_ECS_CONTAINER_METADATA_URI | Server | (none) | |
| HOME | CLEVERAGENTS_HOME | Server | (none) | |
| IP | CLEVERAGENTS_IP | Server | (none) | |
| IS_CLOUD | CLEVERAGENTS_IS_CLOUD | Server | (none) | |
| LITELLM_PROXY_DIR | CLEVERAGENTS_LITELLM_PROXY_DIR | Server | (none) | |
| MIGRATIONS_DIR | CLEVERAGENTS_MIGRATIONS_DIR | Server | (none) | |
| PATH | CLEVERAGENTS_PATH | Server | (none) | |
| PLANDEX_CLOUD | CLEVERAGENTS_CLOUD | Server | (none) | |
| SMTP_FROM | CLEVERAGENTS_SMTP_FROM | Server | (none) | |
| VERBOSE_LOGGING | CLEVERAGENTS_VERBOSE_LOGGING | Server | (none) | |
| PLANDEX_SKIP_UPGRADE | CLEVERAGENTS_SKIP_UPGRADE | Upgrades | (none) | Set this to '1' to skip the auto-upgrade check whe... |
## Conflicts and Warnings
- **PLANDEX_ENV**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_ENV
- **PLANDEX_API_HOST**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_API_HOST
- **PLANDEX_AWS_PROFILE**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_AWS_PROFILE
- **PLANDEX_SKIP_UPGRADE**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_SKIP_UPGRADE
- **PLANDEX_OUT_DIR**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_OUT_DIR
- **PLANDEX_DEV_CLI_OUT_DIR**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_DEV_CLI_OUT_DIR
- **PLANDEX_DEV_CLI_OUT_DIR**: Development-specific variable, may need reconsideration
- Type: development_only
- Suggested: CLEVERAGENTS_DEV_CLI_OUT_DIR
- **PLANDEX_DEV_CLI_NAME**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_DEV_CLI_NAME
- **PLANDEX_DEV_CLI_NAME**: Development-specific variable, may need reconsideration
- Type: development_only
- Suggested: CLEVERAGENTS_DEV_CLI_NAME
- **PLANDEX_DEV_CLI_ALIAS**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_DEV_CLI_ALIAS
- **PLANDEX_DEV_CLI_ALIAS**: Development-specific variable, may need reconsideration
- Type: development_only
- Suggested: CLEVERAGENTS_DEV_CLI_ALIAS
- **PLANDEX_BASE_DIR**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_BASE_DIR
- **PLANDEX_CLOUD**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_CLOUD
- **PLANDEX_REPL_SESSION_ID**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_REPL_SESSION_ID
- **PLANDEX_REPL**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_REPL
- **PLANDEX_REPL_OUTPUT_FILE**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_REPL_OUTPUT_FILE
- **PLANDEX_DISABLE_SUGGESTIONS**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_DISABLE_SUGGESTIONS
- **PLANDEX_COLUMNS**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_COLUMNS
- **PLANDEX_STREAM_FOREGROUND_COLOR**: Rename from Plandex to CleverAgents namespace
- Type: migration_required
- Suggested: CLEVERAGENTS_STREAM_FOREGROUND_COLOR
File diff suppressed because it is too large Load Diff
+886
View File
@@ -0,0 +1,886 @@
variables:
COLUMNS:
name: COLUMNS
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/term/utils.go:109
proposed_cleveragents_name: CLEVERAGENTS_COLUMNS
EDITOR:
name: EDITOR
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/cmd/plan_exec_helpers.go:41
proposed_cleveragents_name: CLEVERAGENTS_EDITOR
GLAMOUR_STYLE:
name: GLAMOUR_STYLE
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/term/format.go:35
proposed_cleveragents_name: CLEVERAGENTS_GLAMOUR_STYLE
PLANDEX_COLUMNS:
name: PLANDEX_COLUMNS
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/term/utils.go:88
- app/cli/term/utils.go:89
proposed_cleveragents_name: CLEVERAGENTS_COLUMNS
PLANDEX_DISABLE_SUGGESTIONS:
name: PLANDEX_DISABLE_SUGGESTIONS
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/term/help.go:180
proposed_cleveragents_name: CLEVERAGENTS_DISABLE_SUGGESTIONS
PLANDEX_REPL:
name: PLANDEX_REPL
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/lib/repl.go:163
- app/cli/stream_tui/run.go:102
- app/cli/term/repl.go:5
proposed_cleveragents_name: CLEVERAGENTS_REPL
PLANDEX_REPL_OUTPUT_FILE:
name: PLANDEX_REPL_OUTPUT_FILE
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/stream_tui/run.go:102
- app/cli/stream_tui/run.go:104
proposed_cleveragents_name: CLEVERAGENTS_REPL_OUTPUT_FILE
PLANDEX_REPL_SESSION_ID:
name: PLANDEX_REPL_SESSION_ID
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/cmd/load.go:58
- app/cli/cmd/usage.go:73
- app/cli/cmd/usage.go:82
- app/cli/cmd/usage.go:240
- app/cli/cmd/usage.go:259
- app/cli/plan_exec/tell.go:150
proposed_cleveragents_name: CLEVERAGENTS_REPL_SESSION_ID
PLANDEX_STREAM_FOREGROUND_COLOR:
name: PLANDEX_STREAM_FOREGROUND_COLOR
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/term/utils.go:125
- app/cli/term/utils.go:126
proposed_cleveragents_name: CLEVERAGENTS_STREAM_FOREGROUND_COLOR
SHELL:
name: SHELL
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/lib/apply.go:375
- app/cli/term/os.go:15
proposed_cleveragents_name: CLEVERAGENTS_SHELL
VISUAL:
name: VISUAL
default: ''
description: ''
category: CLI
sources:
- code
usage_locations:
- app/cli/cmd/plan_exec_helpers.go:43
proposed_cleveragents_name: CLEVERAGENTS_VISUAL
GOPATH:
name: GOPATH
default: ''
description: This should be already set to your Go folder if you've installed
Golang.
category: Development
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: CLEVERAGENTS_GOPATH
PLANDEX_DEV_CLI_ALIAS:
name: PLANDEX_DEV_CLI_ALIAS
default: pdxd
description: The alias for the development binary when using dev.sh
category: Development
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: CLEVERAGENTS_DEV_CLI_ALIAS
PLANDEX_DEV_CLI_NAME:
name: PLANDEX_DEV_CLI_NAME
default: plandex-dev
description: The name of the development binary when using dev.sh
category: Development
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: CLEVERAGENTS_DEV_CLI_NAME
PLANDEX_DEV_CLI_OUT_DIR:
name: PLANDEX_DEV_CLI_OUT_DIR
default: /usr/local/bin
description: Where the development binary should be output when using dev.sh
category: Development
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: CLEVERAGENTS_DEV_CLI_OUT_DIR
PLANDEX_OUT_DIR:
name: PLANDEX_OUT_DIR
default: /usr/local/bin
description: Where the development binary should be output when using dev.sh
category: Development
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: CLEVERAGENTS_OUT_DIR
API_HOST:
name: API_HOST
default: ''
description: The host the API server listens on. Defaults to 'http://localhost:$PORT'.
In production mode, should be a host like 'https://api.your-domain.ai'.
category: General
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: CLEVERAGENTS_API_HOST
DATABASE_URL:
name: DATABASE_URL
default: ''
description: The URL of the PostgreSQL database. Defaults to 'postgres://plandex:plandex@plandex-postgres:5432/plandex?sslmode=disable'
in development mode
category: General
sources:
- documentation
- code
usage_locations:
- app/server/db/db.go:27
proposed_cleveragents_name: CLEVERAGENTS_DATABASE_URL
GOENV:
name: GOENV
default: development
description: Whether to run in development or production mode. Must be 'development'
or 'production'
category: General
sources:
- documentation
- code
usage_locations:
- app/server/db/account_helpers.go:17
- app/server/db/db.go:57
- app/server/db/db.go:129
- app/server/db/db.go:137
- app/server/db/db.go:150
- app/server/db/fs.go:20
- app/server/db/fs.go:21
- app/server/db/fs.go:28
- app/server/email/invite.go:12
- app/server/email/verification.go:14
- app/server/email/verification.go:31
- app/server/handlers/accounts.go:29
- app/server/handlers/accounts.go:123
- app/server/handlers/auth_helpers.go:98
- app/server/handlers/auth_helpers.go:108
- app/server/handlers/auth_helpers.go:145
- app/server/handlers/auth_helpers.go:152
- app/server/handlers/auth_helpers.go:201
- app/server/handlers/auth_helpers.go:209
- app/server/handlers/auth_helpers.go:260
- app/server/handlers/auth_helpers.go:300
- app/server/handlers/auth_helpers.go:436
- app/server/handlers/invites.go:22
- app/server/handlers/invites.go:165
- app/server/handlers/invites.go:223
- app/server/handlers/invites.go:281
- app/server/handlers/invites.go:339
- app/server/handlers/sessions.go:85
- app/server/handlers/users.go:21
- app/server/handlers/users.go:96
- app/server/host/ip.go:16
- app/server/model/client.go:538
- app/server/setup/setup.go:67
proposed_cleveragents_name: CLEVERAGENTS_GOENV
LOCAL_MODE:
name: LOCAL_MODE
default: ''
description: Whether to run in local mode
category: General
sources:
- documentation
- code
usage_locations:
- app/server/db/account_helpers.go:17
- app/server/db/fs.go:21
- app/server/handlers/accounts.go:29
- app/server/handlers/accounts.go:123
- app/server/handlers/auth_helpers.go:300
- app/server/handlers/auth_helpers.go:436
- app/server/handlers/invites.go:22
- app/server/handlers/invites.go:165
- app/server/handlers/invites.go:223
- app/server/handlers/invites.go:281
- app/server/handlers/invites.go:339
- app/server/handlers/sessions.go:85
- app/server/handlers/users.go:21
- app/server/handlers/users.go:96
proposed_cleveragents_name: CLEVERAGENTS_LOCAL_MODE
OLLAMA_BASE_URL:
name: OLLAMA_BASE_URL
default: ''
description: "The base URL of the Ollama server\u2014only need when the server\
\ is running in a Docker container and needs to access Ollama models running\
\ outside of the container"
category: General
sources:
- documentation
- code
usage_locations:
- app/server/model/client.go:295
- app/server/model/client.go:296
- app/server/model/litellm.go:125
- app/server/model/litellm.go:128
proposed_cleveragents_name: CLEVERAGENTS_OLLAMA_BASE_URL
PLANDEX_API_HOST:
name: PLANDEX_API_HOST
default: ''
description: "Defaults to 'http://localhost:8099' if PLANDEX_ENV is development,\
\ otherwise it's 'https://api.plandex.ai'\u2014override this to use a different\
\ host."
category: General
sources:
- documentation
- code
usage_locations:
- app/cli/api/clients.go:25
proposed_cleveragents_name: CLEVERAGENTS_API_HOST
PLANDEX_BASE_DIR:
name: PLANDEX_BASE_DIR
default: ''
description: The base directory to read and write files. Defaults to '$HOME/plandex-server'
in development mode, '/plandex-server' in production.
category: General
sources:
- documentation
- code
usage_locations:
- app/server/db/fs.go:19
- app/server/db/fs.go:25
proposed_cleveragents_name: CLEVERAGENTS_BASE_DIR
PLANDEX_ENV:
name: PLANDEX_ENV
default: development
description: Set this to 'development' to default to the local development server
instead of Plandex Cloud when working on Plandex itself.
category: General
sources:
- documentation
- code
usage_locations:
- app/cli/api/clients.go:24
- app/cli/fs/fs.go:33
- app/cli/fs/fs.go:73
- app/cli/fs/fs.go:122
proposed_cleveragents_name: CLEVERAGENTS_ENV
PORT:
name: PORT
default: '8099'
description: The port the server listens on. Defaults to 8099.
category: General
sources:
- documentation
- code
usage_locations:
- app/server/handlers/proxy_helper.go:48
- app/server/setup/setup.go:85
proposed_cleveragents_name: CLEVERAGENTS_PORT
ANTHROPIC_API_KEY:
name: ANTHROPIC_API_KEY
default: ''
description: Your Anthropic API key
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: ANTHROPIC_API_KEY
AWS_ACCESS_KEY_ID:
name: AWS_ACCESS_KEY_ID
default: ''
description: Your AWS access key ID
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: AWS_ACCESS_KEY_ID
AWS_INFERENCE_PROFILE_ARN:
name: AWS_INFERENCE_PROFILE_ARN
default: ''
description: Your AWS inference profile ARN
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: AWS_INFERENCE_PROFILE_ARN
AWS_REGION:
name: AWS_REGION
default: ''
description: Your AWS region
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: AWS_REGION
AWS_SECRET_ACCESS_KEY:
name: AWS_SECRET_ACCESS_KEY
default: ''
description: Your AWS secret access key
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN:
name: AWS_SESSION_TOKEN
default: ''
description: Your AWS session token
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: AWS_SESSION_TOKEN
AZURE_API_BASE:
name: AZURE_API_BASE
default: ''
description: Your Azure OpenAI API base URL
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: AZURE_API_BASE
AZURE_API_VERSION:
name: AZURE_API_VERSION
default: ''
description: Your Azure OpenAI API version
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: AZURE_API_VERSION
AZURE_DEPLOYMENTS_MAP:
name: AZURE_DEPLOYMENTS_MAP
default: ''
description: "Your Azure OpenAI deployments map\u2014a JSON object mapping model\
\ names to deployment names (only needed if deployment names are different from\
\ model names)"
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: AZURE_DEPLOYMENTS_MAP
AZURE_OPENAI_API_KEY:
name: AZURE_OPENAI_API_KEY
default: ''
description: Your Azure OpenAI API key
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: AZURE_OPENAI_API_KEY
DEEPSEEK_API_KEY:
name: DEEPSEEK_API_KEY
default: ''
description: Your DeepSeek API key
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: DEEPSEEK_API_KEY
GEMINI_API_KEY:
name: GEMINI_API_KEY
default: ''
description: Your Google AI Studio API key
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: GEMINI_API_KEY
GOOGLE_APPLICATION_CREDENTIALS:
name: GOOGLE_APPLICATION_CREDENTIALS
default: ''
description: Your Google Vertex AI credentials file path
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: GOOGLE_APPLICATION_CREDENTIALS
OPENAI_API_KEY:
name: OPENAI_API_KEY
default: ''
description: Your OpenAI key
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: OPENAI_API_KEY
OPENAI_ORG_ID:
name: OPENAI_ORG_ID
default: ''
description: Your OpenAI organization ID. Defaults to empty.
category: LLM Providers
sources:
- documentation
- code
usage_locations:
- app/cli/lib/context_load.go:65
- app/cli/lib/context_load.go:84
proposed_cleveragents_name: OPENAI_ORG_ID
OPENROUTER_API_KEY:
name: OPENROUTER_API_KEY
default: ''
description: Your OpenRouter.ai API key
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: OPENROUTER_API_KEY
PERPLEXITY_API_KEY:
name: PERPLEXITY_API_KEY
default: ''
description: Your Perplexity API key
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: PERPLEXITY_API_KEY
PLANDEX_AWS_PROFILE:
name: PLANDEX_AWS_PROFILE
default: ''
description: Name of AWS profile in ~/.aws/credentials to use for AWS Bedrock.
If not set, the credentials file won't be used.
category: LLM Providers
sources:
- documentation
- code
usage_locations:
- app/cli/lib/model_credentials.go:247
proposed_cleveragents_name: CLEVERAGENTS_AWS_PROFILE
VERTEXAI_LOCATION:
name: VERTEXAI_LOCATION
default: ''
description: Your Google Vertex AI location
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: VERTEXAI_LOCATION
VERTEXAI_PROJECT:
name: VERTEXAI_PROJECT
default: ''
description: Your Google Vertex AI project ID
category: LLM Providers
sources:
- documentation
usage_locations: []
proposed_cleveragents_name: VERTEXAI_PROJECT
SMTP_HOST:
name: SMTP_HOST
default: ''
description: Your SMTP host.
category: SMTP
sources:
- documentation
- code
usage_locations:
- app/server/email/email.go:56
proposed_cleveragents_name: CLEVERAGENTS_SMTP_HOST
SMTP_PASSWORD:
name: SMTP_PASSWORD
default: ''
description: SMTP password.
category: SMTP
sources:
- documentation
- code
usage_locations:
- app/server/email/email.go:59
proposed_cleveragents_name: CLEVERAGENTS_SMTP_PASSWORD
SMTP_PORT:
name: SMTP_PORT
default: ''
description: Set this to 1025 e.g. if you are using mailhog.
category: SMTP
sources:
- documentation
- code
usage_locations:
- app/server/email/email.go:57
proposed_cleveragents_name: CLEVERAGENTS_SMTP_PORT
SMTP_USER:
name: SMTP_USER
default: ''
description: SMTP username.
category: SMTP
sources:
- documentation
- code
usage_locations:
- app/server/email/email.go:58
proposed_cleveragents_name: CLEVERAGENTS_SMTP_USER
APP_SUBDOMAIN:
name: APP_SUBDOMAIN
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/handlers/auth_helpers.go:99
- app/server/handlers/auth_helpers.go:146
- app/server/handlers/auth_helpers.go:202
proposed_cleveragents_name: CLEVERAGENTS_APP_SUBDOMAIN
DB_HOST:
name: DB_HOST
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/db/db.go:29
- app/server/db/db.go:36
proposed_cleveragents_name: CLEVERAGENTS_DB_HOST
DB_NAME:
name: DB_NAME
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/db/db.go:33
- app/server/db/db.go:36
proposed_cleveragents_name: CLEVERAGENTS_DB_NAME
DB_PASSWORD:
name: DB_PASSWORD
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/db/db.go:32
- app/server/db/db.go:34
proposed_cleveragents_name: CLEVERAGENTS_DB_PASSWORD
DB_PORT:
name: DB_PORT
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/db/db.go:30
- app/server/db/db.go:36
proposed_cleveragents_name: CLEVERAGENTS_DB_PORT
DB_USER:
name: DB_USER
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/db/db.go:31
- app/server/db/db.go:36
proposed_cleveragents_name: CLEVERAGENTS_DB_USER
ECS_CONTAINER_METADATA_URI:
name: ECS_CONTAINER_METADATA_URI
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/host/ip.go:48
proposed_cleveragents_name: CLEVERAGENTS_ECS_CONTAINER_METADATA_URI
HOME:
name: HOME
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/model/litellm.go:122
proposed_cleveragents_name: CLEVERAGENTS_HOME
IP:
name: IP
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/host/ip.go:31
- app/server/host/ip.go:32
proposed_cleveragents_name: CLEVERAGENTS_IP
IS_CLOUD:
name: IS_CLOUD
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/email/invite.go:20
- app/server/email/verification.go:24
- app/server/handlers/accounts.go:23
- app/server/handlers/client_helper.go:72
- app/server/handlers/models.go:39
- app/server/handlers/models.go:46
- app/server/handlers/models.go:127
- app/server/handlers/models.go:213
- app/server/handlers/models.go:245
- app/server/handlers/models.go:437
- app/server/handlers/orgs.go:58
- app/server/handlers/settings.go:117
- app/server/handlers/settings.go:137
- app/server/host/ip.go:21
- app/server/routes/routes.go:56
proposed_cleveragents_name: CLEVERAGENTS_IS_CLOUD
LITELLM_PROXY_DIR:
name: LITELLM_PROXY_DIR
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/model/litellm.go:115
- app/server/model/litellm.go:116
proposed_cleveragents_name: CLEVERAGENTS_LITELLM_PROXY_DIR
MIGRATIONS_DIR:
name: MIGRATIONS_DIR
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/db/db.go:98
- app/server/db/db.go:99
proposed_cleveragents_name: CLEVERAGENTS_MIGRATIONS_DIR
PATH:
name: PATH
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/model/litellm.go:121
proposed_cleveragents_name: CLEVERAGENTS_PATH
PLANDEX_CLOUD:
name: PLANDEX_CLOUD
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/db/settings_helpers.go:28
- app/server/db/settings_helpers.go:114
- app/server/db/settings_helpers.go:148
proposed_cleveragents_name: CLEVERAGENTS_CLOUD
SMTP_FROM:
name: SMTP_FROM
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/email/email.go:60
proposed_cleveragents_name: CLEVERAGENTS_SMTP_FROM
VERBOSE_LOGGING:
name: VERBOSE_LOGGING
default: ''
description: ''
category: Server
sources:
- code
usage_locations:
- app/server/syntax/file_map/map.go:15
proposed_cleveragents_name: CLEVERAGENTS_VERBOSE_LOGGING
PLANDEX_SKIP_UPGRADE:
name: PLANDEX_SKIP_UPGRADE
default: ''
description: Set this to '1' to skip the auto-upgrade check when running the CLI.
category: Upgrades
sources:
- documentation
- code
usage_locations:
- app/cli/upgrade.go:28
proposed_cleveragents_name: CLEVERAGENTS_SKIP_UPGRADE
conflicts:
- old_name: PLANDEX_ENV
new_name: CLEVERAGENTS_ENV
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_API_HOST
new_name: CLEVERAGENTS_API_HOST
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_AWS_PROFILE
new_name: CLEVERAGENTS_AWS_PROFILE
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_SKIP_UPGRADE
new_name: CLEVERAGENTS_SKIP_UPGRADE
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_OUT_DIR
new_name: CLEVERAGENTS_OUT_DIR
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_DEV_CLI_OUT_DIR
new_name: CLEVERAGENTS_DEV_CLI_OUT_DIR
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_DEV_CLI_OUT_DIR
new_name: CLEVERAGENTS_DEV_CLI_OUT_DIR
type: development_only
description: Development-specific variable, may need reconsideration
- old_name: PLANDEX_DEV_CLI_NAME
new_name: CLEVERAGENTS_DEV_CLI_NAME
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_DEV_CLI_NAME
new_name: CLEVERAGENTS_DEV_CLI_NAME
type: development_only
description: Development-specific variable, may need reconsideration
- old_name: PLANDEX_DEV_CLI_ALIAS
new_name: CLEVERAGENTS_DEV_CLI_ALIAS
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_DEV_CLI_ALIAS
new_name: CLEVERAGENTS_DEV_CLI_ALIAS
type: development_only
description: Development-specific variable, may need reconsideration
- old_name: PLANDEX_BASE_DIR
new_name: CLEVERAGENTS_BASE_DIR
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_CLOUD
new_name: CLEVERAGENTS_CLOUD
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_REPL_SESSION_ID
new_name: CLEVERAGENTS_REPL_SESSION_ID
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_REPL
new_name: CLEVERAGENTS_REPL
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_REPL_OUTPUT_FILE
new_name: CLEVERAGENTS_REPL_OUTPUT_FILE
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_DISABLE_SUGGESTIONS
new_name: CLEVERAGENTS_DISABLE_SUGGESTIONS
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_COLUMNS
new_name: CLEVERAGENTS_COLUMNS
type: migration_required
description: Rename from Plandex to CleverAgents namespace
- old_name: PLANDEX_STREAM_FOREGROUND_COLOR
new_name: CLEVERAGENTS_STREAM_FOREGROUND_COLOR
type: migration_required
description: Rename from Plandex to CleverAgents namespace
mapping:
PLANDEX_ENV: CLEVERAGENTS_ENV
PLANDEX_API_HOST: CLEVERAGENTS_API_HOST
PLANDEX_AWS_PROFILE: CLEVERAGENTS_AWS_PROFILE
PLANDEX_SKIP_UPGRADE: CLEVERAGENTS_SKIP_UPGRADE
PLANDEX_OUT_DIR: CLEVERAGENTS_OUT_DIR
PLANDEX_DEV_CLI_OUT_DIR: CLEVERAGENTS_DEV_CLI_OUT_DIR
PLANDEX_DEV_CLI_NAME: CLEVERAGENTS_DEV_CLI_NAME
PLANDEX_DEV_CLI_ALIAS: CLEVERAGENTS_DEV_CLI_ALIAS
GOPATH: CLEVERAGENTS_GOPATH
GOENV: CLEVERAGENTS_GOENV
PLANDEX_BASE_DIR: CLEVERAGENTS_BASE_DIR
API_HOST: CLEVERAGENTS_API_HOST
PORT: CLEVERAGENTS_PORT
DATABASE_URL: CLEVERAGENTS_DATABASE_URL
LOCAL_MODE: CLEVERAGENTS_LOCAL_MODE
OLLAMA_BASE_URL: CLEVERAGENTS_OLLAMA_BASE_URL
SMTP_HOST: CLEVERAGENTS_SMTP_HOST
SMTP_PORT: CLEVERAGENTS_SMTP_PORT
SMTP_USER: CLEVERAGENTS_SMTP_USER
SMTP_PASSWORD: CLEVERAGENTS_SMTP_PASSWORD
DB_HOST: CLEVERAGENTS_DB_HOST
DB_PORT: CLEVERAGENTS_DB_PORT
DB_USER: CLEVERAGENTS_DB_USER
DB_PASSWORD: CLEVERAGENTS_DB_PASSWORD
DB_NAME: CLEVERAGENTS_DB_NAME
MIGRATIONS_DIR: CLEVERAGENTS_MIGRATIONS_DIR
PLANDEX_CLOUD: CLEVERAGENTS_CLOUD
SMTP_FROM: CLEVERAGENTS_SMTP_FROM
IS_CLOUD: CLEVERAGENTS_IS_CLOUD
APP_SUBDOMAIN: CLEVERAGENTS_APP_SUBDOMAIN
IP: CLEVERAGENTS_IP
ECS_CONTAINER_METADATA_URI: CLEVERAGENTS_ECS_CONTAINER_METADATA_URI
LITELLM_PROXY_DIR: CLEVERAGENTS_LITELLM_PROXY_DIR
PATH: CLEVERAGENTS_PATH
HOME: CLEVERAGENTS_HOME
VERBOSE_LOGGING: CLEVERAGENTS_VERBOSE_LOGGING
PLANDEX_REPL_SESSION_ID: CLEVERAGENTS_REPL_SESSION_ID
EDITOR: CLEVERAGENTS_EDITOR
VISUAL: CLEVERAGENTS_VISUAL
SHELL: CLEVERAGENTS_SHELL
PLANDEX_REPL: CLEVERAGENTS_REPL
PLANDEX_REPL_OUTPUT_FILE: CLEVERAGENTS_REPL_OUTPUT_FILE
GLAMOUR_STYLE: CLEVERAGENTS_GLAMOUR_STYLE
PLANDEX_DISABLE_SUGGESTIONS: CLEVERAGENTS_DISABLE_SUGGESTIONS
PLANDEX_COLUMNS: CLEVERAGENTS_COLUMNS
COLUMNS: CLEVERAGENTS_COLUMNS
PLANDEX_STREAM_FOREGROUND_COLOR: CLEVERAGENTS_STREAM_FOREGROUND_COLOR
statistics:
total_variables: 66
documented_variables: 39
code_only_variables: 27
migration_required: 16
+160 -160
View File
@@ -136,12 +136,12 @@
"description": "Development environment setup or commands",
"dependencies": [],
"environment_vars": [
"PLANDEX_DEV_CLI_OUT_DIR",
"NAME",
"OUT",
"PLANDEX_DEV_CLI_ALIAS",
"ALIAS",
"PLANDEX_DEV_CLI_NAME",
"PLANDEX_DEV_CLI_ALIAS",
"PLANDEX_DEV_CLI_OUT_DIR"
"OUT"
],
"inputs": [],
"outputs": [],
@@ -174,18 +174,18 @@
"description": "Set platform",
"dependencies": [],
"environment_vars": [
"LOC",
"VERSION",
"UID",
"IS_DOCKER",
"BASH_SOURCE",
"ENCODED_TAG",
"VERSION",
"ARCH",
"RELEASES_URL",
"PLANDEX_VERSION",
"BIN_DIR",
"ARCH",
"SCRIPT_DIR",
"IS_DOCKER",
"UID",
"ENCODED_TAG",
"PLATFORM",
"RELEASES_URL"
"LOC"
],
"inputs": [],
"outputs": [],
@@ -283,11 +283,11 @@
"description": "Development environment setup or commands",
"dependencies": [],
"environment_vars": [
"ZSH_VERSION",
"GOPATH",
"PATH",
"BASH_SOURCE",
"SCRIPT_DIR"
"GOPATH",
"SCRIPT_DIR",
"ZSH_VERSION",
"PATH"
],
"inputs": [],
"outputs": [],
@@ -337,10 +337,10 @@
"dependencies": [],
"environment_vars": [
"REQUIRED_PACKAGES",
"REQUIRED_PYTHON",
"BASH_SOURCE",
"VENV_DIR",
"SCRIPT_DIR"
"SCRIPT_DIR",
"REQUIRED_PYTHON"
],
"inputs": [],
"outputs": [],
@@ -377,19 +377,19 @@
"description": "Wait for a service to be available",
"dependencies": [],
"environment_vars": [
"WAITFORIT_CHILD",
"WAITFORIT_PID",
"WAITFORIT_HOST",
"WAITFORIT_PORT",
"WAITFORIT_QUIET",
"WAITFORIT_STRICT",
"WAITFORIT_BUSYTIMEFLAG",
"WAITFORIT_TIMEOUT_PATH",
"WAITFORIT_TIMEOUT",
"WAITFORIT_RESULT",
"WAITFORIT_CLI",
"WAITFORIT_ISBUSY",
"WAITFORIT_BUSYTIMEFLAG",
"WAITFORIT_",
"WAITFORIT_TIMEOUT_PATH"
"WAITFORIT_RESULT",
"WAITFORIT_QUIET",
"WAITFORIT_PORT",
"WAITFORIT_PID",
"WAITFORIT_STRICT",
"WAITFORIT_HOST",
"WAITFORIT_CHILD",
"WAITFORIT_CLI"
],
"inputs": [
"Host and port to check",
@@ -633,13 +633,13 @@
"description": "Plandex Smoke Test Script",
"dependencies": [],
"environment_vars": [
"PROMPT_CHAT_QUESTION",
"REWIND_STEPS",
"PROMPT_ADD_TEST",
"BASH_SOURCE",
"PROMPT_CREATE_FUNCTION",
"PROMPT_ADD_TEST",
"REWIND_STEPS",
"SCRIPT_DIR",
"PROMPT_ADD_FEATURE"
"PROMPT_ADD_FEATURE",
"PROMPT_CHAT_QUESTION",
"PROMPT_CREATE_FUNCTION"
],
"inputs": [
"Test project directory",
@@ -754,8 +754,8 @@
"description": "custom-models-test.sh - Plandex custom models functionality test",
"dependencies": [],
"environment_vars": [
"BASH_SOURCE",
"OPENROUTER_API_KEY",
"BASH_SOURCE",
"SCRIPT_DIR",
"PREV_KEY"
],
@@ -823,11 +823,11 @@
"description": "test-utils.sh - Common utilities for Plandex test scripts",
"dependencies": [],
"environment_vars": [
"NC",
"PLANDEX_CMD",
"GREEN",
"TEST_DIR",
"YELLOW",
"TEST_DIR",
"GREEN",
"PLANDEX_CMD",
"NC",
"RED"
],
"inputs": [
@@ -1122,12 +1122,12 @@
"description": "Development environment setup or commands",
"dependencies": [],
"environment_vars": [
"PLANDEX_DEV_CLI_OUT_DIR",
"NAME",
"OUT",
"PLANDEX_DEV_CLI_ALIAS",
"ALIAS",
"PLANDEX_DEV_CLI_NAME",
"PLANDEX_DEV_CLI_ALIAS",
"PLANDEX_DEV_CLI_OUT_DIR"
"OUT"
],
"inputs": [],
"outputs": [],
@@ -1159,18 +1159,18 @@
"description": "Set platform",
"dependencies": [],
"environment_vars": [
"LOC",
"VERSION",
"UID",
"IS_DOCKER",
"BASH_SOURCE",
"ENCODED_TAG",
"VERSION",
"ARCH",
"RELEASES_URL",
"PLANDEX_VERSION",
"BIN_DIR",
"ARCH",
"SCRIPT_DIR",
"IS_DOCKER",
"UID",
"ENCODED_TAG",
"PLATFORM",
"RELEASES_URL"
"LOC"
],
"inputs": [],
"outputs": [],
@@ -1268,11 +1268,11 @@
"description": "Development environment setup or commands",
"dependencies": [],
"environment_vars": [
"ZSH_VERSION",
"GOPATH",
"PATH",
"BASH_SOURCE",
"SCRIPT_DIR"
"GOPATH",
"SCRIPT_DIR",
"ZSH_VERSION",
"PATH"
],
"inputs": [],
"outputs": [],
@@ -1321,10 +1321,10 @@
"dependencies": [],
"environment_vars": [
"REQUIRED_PACKAGES",
"REQUIRED_PYTHON",
"BASH_SOURCE",
"VENV_DIR",
"SCRIPT_DIR"
"SCRIPT_DIR",
"REQUIRED_PYTHON"
],
"inputs": [],
"outputs": [],
@@ -1361,19 +1361,19 @@
"description": "Wait for a service to be available",
"dependencies": [],
"environment_vars": [
"WAITFORIT_CHILD",
"WAITFORIT_PID",
"WAITFORIT_HOST",
"WAITFORIT_PORT",
"WAITFORIT_QUIET",
"WAITFORIT_STRICT",
"WAITFORIT_BUSYTIMEFLAG",
"WAITFORIT_TIMEOUT_PATH",
"WAITFORIT_TIMEOUT",
"WAITFORIT_RESULT",
"WAITFORIT_CLI",
"WAITFORIT_ISBUSY",
"WAITFORIT_BUSYTIMEFLAG",
"WAITFORIT_",
"WAITFORIT_TIMEOUT_PATH"
"WAITFORIT_RESULT",
"WAITFORIT_QUIET",
"WAITFORIT_PORT",
"WAITFORIT_PID",
"WAITFORIT_STRICT",
"WAITFORIT_HOST",
"WAITFORIT_CHILD",
"WAITFORIT_CLI"
],
"inputs": [
"Host and port to check"
@@ -1609,13 +1609,13 @@
"description": "Plandex Smoke Test Script",
"dependencies": [],
"environment_vars": [
"PROMPT_CHAT_QUESTION",
"REWIND_STEPS",
"PROMPT_ADD_TEST",
"BASH_SOURCE",
"PROMPT_CREATE_FUNCTION",
"PROMPT_ADD_TEST",
"REWIND_STEPS",
"SCRIPT_DIR",
"PROMPT_ADD_FEATURE"
"PROMPT_ADD_FEATURE",
"PROMPT_CHAT_QUESTION",
"PROMPT_CREATE_FUNCTION"
],
"inputs": [
"Test project directory"
@@ -1727,8 +1727,8 @@
"description": "custom-models-test.sh - Plandex custom models functionality test",
"dependencies": [],
"environment_vars": [
"BASH_SOURCE",
"OPENROUTER_API_KEY",
"BASH_SOURCE",
"SCRIPT_DIR",
"PREV_KEY"
],
@@ -1793,11 +1793,11 @@
"description": "test-utils.sh - Common utilities for Plandex test scripts",
"dependencies": [],
"environment_vars": [
"NC",
"PLANDEX_CMD",
"GREEN",
"TEST_DIR",
"YELLOW",
"TEST_DIR",
"GREEN",
"PLANDEX_CMD",
"NC",
"RED"
],
"inputs": [
@@ -2016,12 +2016,17 @@
"app/clear_local.sh",
"app/clear_local.sh"
],
"PLANDEX_DEV_CLI_OUT_DIR": [
"app/cli/dev.sh",
"app/cli/dev.sh",
"app/cli/dev.sh"
],
"NAME": [
"app/cli/dev.sh",
"app/cli/dev.sh",
"app/cli/dev.sh"
],
"OUT": [
"PLANDEX_DEV_CLI_ALIAS": [
"app/cli/dev.sh",
"app/cli/dev.sh",
"app/cli/dev.sh"
@@ -2036,37 +2041,22 @@
"app/cli/dev.sh",
"app/cli/dev.sh"
],
"PLANDEX_DEV_CLI_ALIAS": [
"OUT": [
"app/cli/dev.sh",
"app/cli/dev.sh",
"app/cli/dev.sh"
],
"PLANDEX_DEV_CLI_OUT_DIR": [
"app/cli/dev.sh",
"app/cli/dev.sh",
"app/cli/dev.sh"
],
"LOC": [
"app/cli/install.sh",
"app/cli/install.sh",
"app/cli/install.sh"
],
"VERSION": [
"app/cli/install.sh",
"app/cli/install.sh",
"app/cli/install.sh"
],
"UID": [
"ARCH": [
"app/cli/install.sh",
"app/cli/install.sh",
"app/cli/install.sh"
],
"IS_DOCKER": [
"app/cli/install.sh",
"app/cli/install.sh",
"app/cli/install.sh"
],
"ENCODED_TAG": [
"RELEASES_URL": [
"app/cli/install.sh",
"app/cli/install.sh",
"app/cli/install.sh"
@@ -2081,7 +2071,17 @@
"app/cli/install.sh",
"app/cli/install.sh"
],
"ARCH": [
"IS_DOCKER": [
"app/cli/install.sh",
"app/cli/install.sh",
"app/cli/install.sh"
],
"UID": [
"app/cli/install.sh",
"app/cli/install.sh",
"app/cli/install.sh"
],
"ENCODED_TAG": [
"app/cli/install.sh",
"app/cli/install.sh",
"app/cli/install.sh"
@@ -2091,17 +2091,17 @@
"app/cli/install.sh",
"app/cli/install.sh"
],
"RELEASES_URL": [
"LOC": [
"app/cli/install.sh",
"app/cli/install.sh",
"app/cli/install.sh"
],
"ZSH_VERSION": [
"GOPATH": [
"app/scripts/dev.sh",
"app/scripts/dev.sh",
"app/scripts/dev.sh"
],
"GOPATH": [
"ZSH_VERSION": [
"app/scripts/dev.sh",
"app/scripts/dev.sh",
"app/scripts/dev.sh"
@@ -2116,47 +2116,17 @@
"app/scripts/litellm_deps.sh",
"app/scripts/litellm_deps.sh"
],
"REQUIRED_PYTHON": [
"app/scripts/litellm_deps.sh",
"app/scripts/litellm_deps.sh",
"app/scripts/litellm_deps.sh"
],
"VENV_DIR": [
"app/scripts/litellm_deps.sh",
"app/scripts/litellm_deps.sh",
"app/scripts/litellm_deps.sh"
],
"WAITFORIT_CHILD": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
"REQUIRED_PYTHON": [
"app/scripts/litellm_deps.sh",
"app/scripts/litellm_deps.sh",
"app/scripts/litellm_deps.sh"
],
"WAITFORIT_PID": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_HOST": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_PORT": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_QUIET": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_STRICT": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_BUSYTIMEFLAG": [
"WAITFORIT_TIMEOUT_PATH": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
@@ -2166,27 +2136,57 @@
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_RESULT": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_CLI": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_ISBUSY": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_BUSYTIMEFLAG": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_TIMEOUT_PATH": [
"WAITFORIT_RESULT": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_QUIET": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_PORT": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_PID": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_STRICT": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_HOST": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_CHILD": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
],
"WAITFORIT_CLI": [
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh",
"app/scripts/wait-for-it.sh"
@@ -2201,7 +2201,7 @@
"test/_test_apply.sh",
"test/_test_apply.sh"
],
"PROMPT_CHAT_QUESTION": [
"PROMPT_ADD_TEST": [
"test/smoke_test.sh",
"test/smoke_test.sh",
"test/smoke_test.sh"
@@ -2211,7 +2211,12 @@
"test/smoke_test.sh",
"test/smoke_test.sh"
],
"PROMPT_ADD_TEST": [
"PROMPT_ADD_FEATURE": [
"test/smoke_test.sh",
"test/smoke_test.sh",
"test/smoke_test.sh"
],
"PROMPT_CHAT_QUESTION": [
"test/smoke_test.sh",
"test/smoke_test.sh",
"test/smoke_test.sh"
@@ -2221,11 +2226,6 @@
"test/smoke_test.sh",
"test/smoke_test.sh"
],
"PROMPT_ADD_FEATURE": [
"test/smoke_test.sh",
"test/smoke_test.sh",
"test/smoke_test.sh"
],
"OPENROUTER_API_KEY": [
"test/test_custom_models.sh",
"test/test_custom_models.sh",
@@ -2236,17 +2236,7 @@
"test/test_custom_models.sh",
"test/test_custom_models.sh"
],
"NC": [
"test/test_utils.sh",
"test/test_utils.sh",
"test/test_utils.sh"
],
"PLANDEX_CMD": [
"test/test_utils.sh",
"test/test_utils.sh",
"test/test_utils.sh"
],
"GREEN": [
"YELLOW": [
"test/test_utils.sh",
"test/test_utils.sh",
"test/test_utils.sh"
@@ -2256,7 +2246,17 @@
"test/test_utils.sh",
"test/test_utils.sh"
],
"YELLOW": [
"GREEN": [
"test/test_utils.sh",
"test/test_utils.sh",
"test/test_utils.sh"
],
"PLANDEX_CMD": [
"test/test_utils.sh",
"test/test_utils.sh",
"test/test_utils.sh"
],
"NC": [
"test/test_utils.sh",
"test/test_utils.sh",
"test/test_utils.sh"
+146 -146
View File
@@ -121,12 +121,12 @@ scripts:
description: Development environment setup or commands
dependencies: []
environment_vars:
- PLANDEX_DEV_CLI_OUT_DIR
- NAME
- OUT
- PLANDEX_DEV_CLI_ALIAS
- ALIAS
- PLANDEX_DEV_CLI_NAME
- PLANDEX_DEV_CLI_ALIAS
- PLANDEX_DEV_CLI_OUT_DIR
- OUT
inputs: []
outputs: []
side_effects:
@@ -154,18 +154,18 @@ scripts:
description: Set platform
dependencies: []
environment_vars:
- LOC
- VERSION
- UID
- IS_DOCKER
- BASH_SOURCE
- ENCODED_TAG
- VERSION
- ARCH
- RELEASES_URL
- PLANDEX_VERSION
- BIN_DIR
- ARCH
- SCRIPT_DIR
- IS_DOCKER
- UID
- ENCODED_TAG
- PLATFORM
- RELEASES_URL
- LOC
inputs: []
outputs: []
side_effects: []
@@ -258,11 +258,11 @@ scripts:
description: Development environment setup or commands
dependencies: []
environment_vars:
- ZSH_VERSION
- GOPATH
- PATH
- BASH_SOURCE
- GOPATH
- SCRIPT_DIR
- ZSH_VERSION
- PATH
inputs: []
outputs: []
side_effects:
@@ -306,10 +306,10 @@ scripts:
dependencies: []
environment_vars:
- REQUIRED_PACKAGES
- REQUIRED_PYTHON
- BASH_SOURCE
- VENV_DIR
- SCRIPT_DIR
- REQUIRED_PYTHON
inputs: []
outputs: []
side_effects: []
@@ -341,19 +341,19 @@ scripts:
description: Wait for a service to be available
dependencies: []
environment_vars:
- WAITFORIT_CHILD
- WAITFORIT_PID
- WAITFORIT_HOST
- WAITFORIT_PORT
- WAITFORIT_QUIET
- WAITFORIT_STRICT
- WAITFORIT_BUSYTIMEFLAG
- WAITFORIT_TIMEOUT
- WAITFORIT_RESULT
- WAITFORIT_CLI
- WAITFORIT_ISBUSY
- WAITFORIT_
- WAITFORIT_TIMEOUT_PATH
- WAITFORIT_TIMEOUT
- WAITFORIT_ISBUSY
- WAITFORIT_BUSYTIMEFLAG
- WAITFORIT_
- WAITFORIT_RESULT
- WAITFORIT_QUIET
- WAITFORIT_PORT
- WAITFORIT_PID
- WAITFORIT_STRICT
- WAITFORIT_HOST
- WAITFORIT_CHILD
- WAITFORIT_CLI
inputs:
- Host and port to check
- Host and port to check
@@ -571,13 +571,13 @@ scripts:
description: Plandex Smoke Test Script
dependencies: []
environment_vars:
- PROMPT_CHAT_QUESTION
- REWIND_STEPS
- PROMPT_ADD_TEST
- BASH_SOURCE
- PROMPT_CREATE_FUNCTION
- PROMPT_ADD_TEST
- REWIND_STEPS
- SCRIPT_DIR
- PROMPT_ADD_FEATURE
- PROMPT_CHAT_QUESTION
- PROMPT_CREATE_FUNCTION
inputs:
- Test project directory
- Test project directory
@@ -684,8 +684,8 @@ scripts:
description: custom-models-test.sh - Plandex custom models functionality test
dependencies: []
environment_vars:
- BASH_SOURCE
- OPENROUTER_API_KEY
- BASH_SOURCE
- SCRIPT_DIR
- PREV_KEY
inputs:
@@ -745,11 +745,11 @@ scripts:
description: test-utils.sh - Common utilities for Plandex test scripts
dependencies: []
environment_vars:
- NC
- PLANDEX_CMD
- GREEN
- TEST_DIR
- YELLOW
- TEST_DIR
- GREEN
- PLANDEX_CMD
- NC
- RED
inputs:
- Test project directory
@@ -1017,12 +1017,12 @@ scripts:
description: Development environment setup or commands
dependencies: []
environment_vars:
- PLANDEX_DEV_CLI_OUT_DIR
- NAME
- OUT
- PLANDEX_DEV_CLI_ALIAS
- ALIAS
- PLANDEX_DEV_CLI_NAME
- PLANDEX_DEV_CLI_ALIAS
- PLANDEX_DEV_CLI_OUT_DIR
- OUT
inputs: []
outputs: []
side_effects:
@@ -1049,18 +1049,18 @@ scripts:
description: Set platform
dependencies: []
environment_vars:
- LOC
- VERSION
- UID
- IS_DOCKER
- BASH_SOURCE
- ENCODED_TAG
- VERSION
- ARCH
- RELEASES_URL
- PLANDEX_VERSION
- BIN_DIR
- ARCH
- SCRIPT_DIR
- IS_DOCKER
- UID
- ENCODED_TAG
- PLATFORM
- RELEASES_URL
- LOC
inputs: []
outputs: []
side_effects: []
@@ -1153,11 +1153,11 @@ scripts:
description: Development environment setup or commands
dependencies: []
environment_vars:
- ZSH_VERSION
- GOPATH
- PATH
- BASH_SOURCE
- GOPATH
- SCRIPT_DIR
- ZSH_VERSION
- PATH
inputs: []
outputs: []
side_effects:
@@ -1200,10 +1200,10 @@ scripts:
dependencies: []
environment_vars:
- REQUIRED_PACKAGES
- REQUIRED_PYTHON
- BASH_SOURCE
- VENV_DIR
- SCRIPT_DIR
- REQUIRED_PYTHON
inputs: []
outputs: []
side_effects: []
@@ -1235,19 +1235,19 @@ scripts:
description: Wait for a service to be available
dependencies: []
environment_vars:
- WAITFORIT_CHILD
- WAITFORIT_PID
- WAITFORIT_HOST
- WAITFORIT_PORT
- WAITFORIT_QUIET
- WAITFORIT_STRICT
- WAITFORIT_BUSYTIMEFLAG
- WAITFORIT_TIMEOUT
- WAITFORIT_RESULT
- WAITFORIT_CLI
- WAITFORIT_ISBUSY
- WAITFORIT_
- WAITFORIT_TIMEOUT_PATH
- WAITFORIT_TIMEOUT
- WAITFORIT_ISBUSY
- WAITFORIT_BUSYTIMEFLAG
- WAITFORIT_
- WAITFORIT_RESULT
- WAITFORIT_QUIET
- WAITFORIT_PORT
- WAITFORIT_PID
- WAITFORIT_STRICT
- WAITFORIT_HOST
- WAITFORIT_CHILD
- WAITFORIT_CLI
inputs:
- Host and port to check
outputs:
@@ -1457,13 +1457,13 @@ scripts:
description: Plandex Smoke Test Script
dependencies: []
environment_vars:
- PROMPT_CHAT_QUESTION
- REWIND_STEPS
- PROMPT_ADD_TEST
- BASH_SOURCE
- PROMPT_CREATE_FUNCTION
- PROMPT_ADD_TEST
- REWIND_STEPS
- SCRIPT_DIR
- PROMPT_ADD_FEATURE
- PROMPT_CHAT_QUESTION
- PROMPT_CREATE_FUNCTION
inputs:
- Test project directory
outputs:
@@ -1567,8 +1567,8 @@ scripts:
description: custom-models-test.sh - Plandex custom models functionality test
dependencies: []
environment_vars:
- BASH_SOURCE
- OPENROUTER_API_KEY
- BASH_SOURCE
- SCRIPT_DIR
- PREV_KEY
inputs:
@@ -1625,11 +1625,11 @@ scripts:
description: test-utils.sh - Common utilities for Plandex test scripts
dependencies: []
environment_vars:
- NC
- PLANDEX_CMD
- GREEN
- TEST_DIR
- YELLOW
- TEST_DIR
- GREEN
- PLANDEX_CMD
- NC
- RED
inputs:
- Test project directory
@@ -1831,11 +1831,15 @@ environment_map:
- app/clear_local.sh
- app/clear_local.sh
- app/clear_local.sh
PLANDEX_DEV_CLI_OUT_DIR:
- app/cli/dev.sh
- app/cli/dev.sh
- app/cli/dev.sh
NAME:
- app/cli/dev.sh
- app/cli/dev.sh
- app/cli/dev.sh
OUT:
PLANDEX_DEV_CLI_ALIAS:
- app/cli/dev.sh
- app/cli/dev.sh
- app/cli/dev.sh
@@ -1847,31 +1851,19 @@ environment_map:
- app/cli/dev.sh
- app/cli/dev.sh
- app/cli/dev.sh
PLANDEX_DEV_CLI_ALIAS:
OUT:
- app/cli/dev.sh
- app/cli/dev.sh
- app/cli/dev.sh
PLANDEX_DEV_CLI_OUT_DIR:
- app/cli/dev.sh
- app/cli/dev.sh
- app/cli/dev.sh
LOC:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
VERSION:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
UID:
ARCH:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
IS_DOCKER:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
ENCODED_TAG:
RELEASES_URL:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
@@ -1883,7 +1875,15 @@ environment_map:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
ARCH:
IS_DOCKER:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
UID:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
ENCODED_TAG:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
@@ -1891,18 +1891,18 @@ environment_map:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
RELEASES_URL:
LOC:
- app/cli/install.sh
- app/cli/install.sh
- app/cli/install.sh
ZSH_VERSION:
- app/scripts/dev.sh
- app/scripts/dev.sh
- app/scripts/dev.sh
GOPATH:
- app/scripts/dev.sh
- app/scripts/dev.sh
- app/scripts/dev.sh
ZSH_VERSION:
- app/scripts/dev.sh
- app/scripts/dev.sh
- app/scripts/dev.sh
PATH:
- app/scripts/dev.sh
- app/scripts/dev.sh
@@ -1911,39 +1911,15 @@ environment_map:
- app/scripts/litellm_deps.sh
- app/scripts/litellm_deps.sh
- app/scripts/litellm_deps.sh
REQUIRED_PYTHON:
- app/scripts/litellm_deps.sh
- app/scripts/litellm_deps.sh
- app/scripts/litellm_deps.sh
VENV_DIR:
- app/scripts/litellm_deps.sh
- app/scripts/litellm_deps.sh
- app/scripts/litellm_deps.sh
WAITFORIT_CHILD:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_PID:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_HOST:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_PORT:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_QUIET:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_STRICT:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_BUSYTIMEFLAG:
REQUIRED_PYTHON:
- app/scripts/litellm_deps.sh
- app/scripts/litellm_deps.sh
- app/scripts/litellm_deps.sh
WAITFORIT_TIMEOUT_PATH:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
@@ -1951,23 +1927,47 @@ environment_map:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_RESULT:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_CLI:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_ISBUSY:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_BUSYTIMEFLAG:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_TIMEOUT_PATH:
WAITFORIT_RESULT:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_QUIET:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_PORT:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_PID:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_STRICT:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_HOST:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_CHILD:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
WAITFORIT_CLI:
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
- app/scripts/wait-for-it.sh
@@ -1979,7 +1979,7 @@ environment_map:
- test/_test_apply.sh
- test/_test_apply.sh
- test/_test_apply.sh
PROMPT_CHAT_QUESTION:
PROMPT_ADD_TEST:
- test/smoke_test.sh
- test/smoke_test.sh
- test/smoke_test.sh
@@ -1987,7 +1987,11 @@ environment_map:
- test/smoke_test.sh
- test/smoke_test.sh
- test/smoke_test.sh
PROMPT_ADD_TEST:
PROMPT_ADD_FEATURE:
- test/smoke_test.sh
- test/smoke_test.sh
- test/smoke_test.sh
PROMPT_CHAT_QUESTION:
- test/smoke_test.sh
- test/smoke_test.sh
- test/smoke_test.sh
@@ -1995,10 +1999,6 @@ environment_map:
- test/smoke_test.sh
- test/smoke_test.sh
- test/smoke_test.sh
PROMPT_ADD_FEATURE:
- test/smoke_test.sh
- test/smoke_test.sh
- test/smoke_test.sh
OPENROUTER_API_KEY:
- test/test_custom_models.sh
- test/test_custom_models.sh
@@ -2007,15 +2007,7 @@ environment_map:
- test/test_custom_models.sh
- test/test_custom_models.sh
- test/test_custom_models.sh
NC:
- test/test_utils.sh
- test/test_utils.sh
- test/test_utils.sh
PLANDEX_CMD:
- test/test_utils.sh
- test/test_utils.sh
- test/test_utils.sh
GREEN:
YELLOW:
- test/test_utils.sh
- test/test_utils.sh
- test/test_utils.sh
@@ -2023,7 +2015,15 @@ environment_map:
- test/test_utils.sh
- test/test_utils.sh
- test/test_utils.sh
YELLOW:
GREEN:
- test/test_utils.sh
- test/test_utils.sh
- test/test_utils.sh
PLANDEX_CMD:
- test/test_utils.sh
- test/test_utils.sh
- test/test_utils.sh
NC:
- test/test_utils.sh
- test/test_utils.sh
- test/test_utils.sh
+40
View File
@@ -0,0 +1,40 @@
Feature: Environment Variable Extraction
As a developer migrating from Plandex to CleverAgents
I need to extract and map environment variables from Go code and docs
So that I can provide compatibility and migration guidance
Scenario: Extract environment variables from documentation
Given a Plandex directory with environment variable documentation
When I extract environment variables from documentation
Then the extractor should find documented variables
And each variable should have a description
And each variable should have a proposed CleverAgents name
Scenario: Extract environment variables from Go source code
Given a Plandex directory with Go source files
When I extract environment variables from Go code
Then the extractor should find code-referenced variables
And usage locations should be tracked
And variables should be categorized by source location
Scenario: Generate environment variable mapping
Given an extracted set of environment variables
When I generate the mapping table
Then PLANDEX variables should map to CLEVERAGENTS equivalents
And provider-specific variables should remain unchanged
And generic variables should get CLEVERAGENTS prefix
Scenario: Identify migration conflicts
Given an extracted set of environment variables
When I identify conflicts
Then PLANDEX_ prefixed variables should be flagged for migration
And development-only variables should be identified
And migration guidance should be provided
Scenario: Save environment variable results
Given an extracted set of environment variables
When I save the results
Then a JSON file should be created
And a YAML file should be created
And a mapping text file should be created
And a migration guide should be generated
+292
View File
@@ -0,0 +1,292 @@
"""Step definitions for environment variable extraction feature."""
from __future__ import annotations
import json
from pathlib import Path
from typing import Any
import yaml
from behave import given, then, when
from cleveragents.discovery.env_variables import EnvironmentVariableExtractor
@given("a Plandex directory with environment variable documentation")
def step_given_plandex_with_env_docs(context: Any) -> None:
"""Set up Plandex directory with environment documentation."""
context.plandex_root = Path("plandex")
context.extractor = EnvironmentVariableExtractor(context.plandex_root)
@when("I extract environment variables from documentation")
def step_extract_from_docs(context: Any) -> None:
"""Extract environment variables from documentation."""
context.extractor.extract_from_documentation()
context.doc_variables = context.extractor.variables.copy()
@then("the extractor should find documented variables")
def step_should_find_documented_vars(context: Any) -> None:
"""Verify documented variables were found."""
assert len(context.doc_variables) > 0, "Should find documented variables"
# Check for some known variables
var_names = list(context.doc_variables.keys())
assert any("PLANDEX" in name for name in var_names), "Should find PLANDEX variables"
assert any("OPENAI" in name for name in var_names), "Should find OpenAI variables"
@then("each variable should have a description")
def step_each_var_has_description(context: Any) -> None:
"""Verify each variable has a description."""
for var_name, var_info in context.doc_variables.items():
if "documentation" in var_info.get("sources", []):
assert "description" in var_info, f"{var_name} should have description"
# Most documented variables should have descriptions
if var_info["description"]:
assert len(var_info["description"]) > 0
@then("each variable should have a proposed CleverAgents name")
def step_each_var_has_proposed_name(context: Any) -> None:
"""Verify each variable has a proposed name."""
for var_name, var_info in context.doc_variables.items():
assert "proposed_cleveragents_name" in var_info, (
f"{var_name} should have proposed name"
)
assert var_info["proposed_cleveragents_name"], (
f"{var_name} proposed name should not be empty"
)
# Check naming conventions
if var_name.startswith("PLANDEX_"):
assert var_info["proposed_cleveragents_name"].startswith("CLEVERAGENTS_"), (
f"{var_name} should map to CLEVERAGENTS_ prefix"
)
@given("a Plandex directory with Go source files")
def step_given_plandex_with_go_source(context: Any) -> None:
"""Set up Plandex directory with Go source."""
context.plandex_root = Path("plandex")
context.extractor = EnvironmentVariableExtractor(context.plandex_root)
@when("I extract environment variables from Go code")
def step_extract_from_go_code(context: Any) -> None:
"""Extract environment variables from Go source."""
context.extractor.extract_from_go_source()
context.code_variables = context.extractor.variables.copy()
@then("the extractor should find code-referenced variables")
def step_should_find_code_vars(context: Any) -> None:
"""Verify code-referenced variables were found."""
assert len(context.code_variables) > 0, "Should find code-referenced variables"
# Check that some have code in sources
code_sourced = [
v for v in context.code_variables.values() if "code" in v.get("sources", [])
]
assert len(code_sourced) > 0, "Should have variables sourced from code"
@then("usage locations should be tracked")
def step_usage_locations_tracked(context: Any) -> None:
"""Verify usage locations are tracked."""
vars_with_locations = [
v for v in context.code_variables.values() if v.get("usage_locations")
]
assert len(vars_with_locations) > 0, "Should track usage locations"
# Check format of locations
for var_info in vars_with_locations:
for location in var_info["usage_locations"]:
assert ":" in location, f"Location should have file:line format: {location}"
@then("variables should be categorized by source location")
def step_vars_categorized(context: Any) -> None:
"""Verify variables are categorized."""
categories = set()
for var_info in context.code_variables.values():
if "category" in var_info:
categories.add(var_info["category"])
assert len(categories) > 0, "Should have categories"
# Should have some expected categories
expected = {"CLI", "Server", "General", "LLM Providers"}
assert len(categories.intersection(expected)) > 0, (
f"Should have expected categories, found: {categories}"
)
@given("an extracted set of environment variables")
def step_given_extracted_vars(context: Any) -> None:
"""Set up extracted variables."""
context.plandex_root = Path("plandex")
context.extractor = EnvironmentVariableExtractor(context.plandex_root)
context.results = context.extractor.extract_all()
@when("I generate the mapping table")
def step_generate_mapping(context: Any) -> None:
"""Generate mapping table."""
context.mapping = context.extractor.generate_mapping_table()
@then("PLANDEX variables should map to CLEVERAGENTS equivalents")
def step_plandex_maps_to_cleveragents(context: Any) -> None:
"""Verify PLANDEX variables map correctly."""
plandex_vars = [k for k in context.mapping.keys() if k.startswith("PLANDEX_")]
for old_name in plandex_vars:
new_name = context.mapping[old_name]
assert new_name.startswith("CLEVERAGENTS_"), (
f"{old_name} should map to CLEVERAGENTS_ prefix, got {new_name}"
)
@then("provider-specific variables should remain unchanged")
def step_provider_vars_unchanged(context: Any) -> None:
"""Verify provider variables remain unchanged."""
provider_prefixes = ["OPENAI_", "ANTHROPIC_", "GEMINI_", "AZURE_", "AWS_"]
for var_name in context.results["variables"]:
for prefix in provider_prefixes:
if var_name.startswith(prefix):
# Provider vars might not be in mapping if unchanged
if var_name in context.mapping:
assert context.mapping[var_name] == var_name, (
f"Provider variable {var_name} should remain unchanged"
)
@then("generic variables should get CLEVERAGENTS prefix")
def step_generic_vars_get_prefix(context: Any) -> None:
"""Verify generic variables get CLEVERAGENTS prefix."""
generic_vars = ["PORT", "DATABASE_URL", "GOENV"]
for var_name in generic_vars:
if var_name in context.results["variables"]:
proposed = context.results["variables"][var_name][
"proposed_cleveragents_name"
]
if not var_name.startswith("CLEVERAGENTS_"):
assert proposed.startswith("CLEVERAGENTS_"), (
f"Generic variable {var_name} should get CLEVERAGENTS_ prefix"
)
@when("I identify conflicts")
def step_identify_conflicts(context: Any) -> None:
"""Identify conflicts."""
context.conflicts = context.extractor.identify_conflicts()
@then("PLANDEX_ prefixed variables should be flagged for migration")
def step_plandex_flagged(context: Any) -> None:
"""Verify PLANDEX variables are flagged."""
migration_conflicts = [
c for c in context.conflicts if c.get("type") == "migration_required"
]
if any(k.startswith("PLANDEX_") for k in context.results["variables"]):
assert len(migration_conflicts) > 0, (
"Should flag PLANDEX variables for migration"
)
@then("development-only variables should be identified")
def step_dev_vars_identified(context: Any) -> None:
"""Verify development variables are identified."""
dev_conflicts = [
c for c in context.conflicts if c.get("type") == "development_only"
]
# If there are PLANDEX_DEV variables, they should be flagged
dev_vars = [k for k in context.results["variables"] if "PLANDEX_DEV" in k]
if dev_vars:
assert len(dev_conflicts) > 0, "Should identify development-only variables"
@then("migration guidance should be provided")
def step_migration_guidance(context: Any) -> None:
"""Verify migration guidance is provided."""
for conflict in context.conflicts:
assert "description" in conflict, "Conflict should have description"
assert "old_name" in conflict, "Conflict should have old name"
assert "new_name" in conflict, "Conflict should have new name"
assert "type" in conflict, "Conflict should have type"
@when("I save the results")
def step_save_results(context: Any) -> None:
"""Save extraction results."""
import tempfile
context.temp_dir = tempfile.mkdtemp()
context.extractor.save_results(context.temp_dir)
context.output_dir = Path(context.temp_dir)
@then("a JSON file should be created")
def step_json_created(context: Any) -> None:
"""Verify JSON file creation."""
json_file = context.output_dir / "env_variables.json"
assert json_file.exists(), "JSON file should be created"
# Verify it's valid JSON
with json_file.open() as f:
data = json.load(f)
assert "variables" in data
assert "conflicts" in data
assert "mapping" in data
assert "statistics" in data
@then("a YAML file should be created")
def step_yaml_created(context: Any) -> None:
"""Verify YAML file creation."""
yaml_file = context.output_dir / "env_variables.yaml"
assert yaml_file.exists(), "YAML file should be created"
# Verify it's valid YAML
with yaml_file.open() as f:
data = yaml.safe_load(f)
assert "variables" in data
assert "conflicts" in data
assert "mapping" in data
assert "statistics" in data
@then("a mapping text file should be created")
def step_mapping_file_created(context: Any) -> None:
"""Verify mapping text file creation."""
mapping_file = context.output_dir / "env_mapping.txt"
assert mapping_file.exists(), "Mapping file should be created"
# Verify content format
with mapping_file.open() as f:
content = f.read()
assert "Environment Variable Mapping" in content
assert "->" in content # Should have mapping arrows
@then("a migration guide should be generated")
def step_migration_guide_created(context: Any) -> None:
"""Verify migration guide creation."""
guide_file = context.output_dir / "env_migration_guide.md"
assert guide_file.exists(), "Migration guide should be created"
# Verify content
with guide_file.open() as f:
content = f.read()
assert "# Environment Variable Migration Guide" in content
assert "## Overview" in content
assert "## Variable Mappings" in content
assert "| Old Name | New Name |" in content # Table header
# Clean up temp directory
import shutil
shutil.rmtree(context.temp_dir)
+136 -86
View File
@@ -3,7 +3,8 @@
## **CRITICAL**: Execute These Rules Without Exception
- **Strictly adhere to guidlines in `./CONTRIBUTING.md`**: All rules, and guidlines outlines in this file must be strictly followed at all times.
- **Python migration scope only**: Every action described here pertains to rewriting the Go-based `plandex/` implementation into an idiomatic Python codebase that lives outside the reference directory. Non-coding tasks (marketing, release rollouts, etc.) are explicitly out of scope.
- **Respect the reference**: Never modify any file inside `./plandex/`. Treat it purely as a read-only source of truth while building Python counterparts.
- **Respect the reference**: Never modify any file inside `./plandex/`. Treat it purely as a read-only source of truth while building Python counterparts. This directory is TEMPORARY and will be deleted once migration is complete.
- **NO BACKWARDS COMPATIBILITY**: CleverAgents is a NEW standalone project. Do NOT maintain any backwards compatibility with Plandex. No migration guides, no compatibility shims, no support for Plandex configurations or data.
- **Living document protocol**: After finishing each checklist item (and its testing sub-items), immediately append every decision, discovery, open question, or deviation to this document under the matching Notes section. This plan remains the authoritative record.
- **Single documentation surface**: Do not create auxiliary notes elsewhere unless explicitly required. All architectural updates, troubleshooting outcomes, and contextual knowledge must flow back into this markdown file.
- **Sequential discipline**: Always begin with the first unchecked item in the checklist. Do not progress until that item, its documentation update, and its testing sub-items (including any spawned remediation tasks) are fully resolved.
@@ -15,6 +16,7 @@
- **Traceability requirement**: When a decision impacts future work, reference the relevant functions or modules in the Notes section using the `file_path:line_number` pattern for fast navigation.
- **unit tests coverage above 85% at all times**: unit test coverage must remain above 85% at all times. Unit tests can be run with `nox -e unit_tests` and is run as part of the default test suite run with `nox`.
- **must be statically typed**: All code at all times must use statically typed typing and must pass the static check run with `nox -e typecheck` which is run as part of the default test suite with `nox`. Under no circumstances at no point should you ignore type checking, this means never turn it off in the config files, and never use inline comments to force an type checking error to be suppressed.
- **NO PLANDEX REFERENCES**: All environment variables must use CLEVERAGENTS_ prefix, not PLANDEX_. No references to Plandex should exist in the final code. CleverAgents is a standalone project, not a fork or migration.
### CONTINUOUS CHECKLIST AND KNOWLEDGE STEWARDSHIP (MANDATORY)
@@ -25,22 +27,23 @@
- **Enforcement**: Treat omissions as blocking bugs—if the plan falls out of sync with reality, halt work, reconcile the discrepancy here, and only then continue.
## Objectives and Guiding Principles
- Ship a Python-based, feature-complete drop-in replacement for Plandex named **CleverAgents**, preserving every user-facing workflow while adopting Python tooling (Typer/Click, FastAPI, SQLAlchemy, asyncio, Behave, Robot Framework, Ruff, mypy/pyright).
- Maintain strict parity with the Go implementation while favoring Pythonic architecture: dependency inversion, strategy, adapter, observer, state, builder, factory, template method, event sourcing, and decorator patterns where appropriate.
- Collapse the legacy client/server split into a unified Python executable (`agents`) that supports both in-process single-user mode and `agents serve --port <port>` multi-user deployments without cloud dependencies.
- Replace all branding, telemetry endpoints, and identifiers with CleverAgents/CleverThis terminology, ensuring no lingering `plandex` references outside of compatibility shims.
- Ship a Python-based, feature-complete application named **CleverAgents** that provides similar functionality to Plandex but as a completely standalone project with no dependencies or backwards compatibility.
- Implement functionality using Pythonic architecture: dependency inversion, strategy, adapter, observer, state, builder, factory, template method, event sourcing, and decorator patterns where appropriate.
- Build a unified Python executable (`agents`) that supports both in-process single-user mode and `agents serve --port <port>` multi-user deployments without cloud dependencies.
- Use only CleverAgents/CleverThis branding throughout the entire codebase - no Plandex references should exist in the final product.
- Enforce fail-fast error handling, rich logging, and comprehensive type coverage with docstrings and runtime validation aligned to Python best practices.
- Provide a pluggable ORM abstraction supporting heavy (PostgreSQL/MySQL) and lightweight (SQLite/DuckDB/in-memory) backends, with zero-code configuration switches.
- Regenerate documentation via MkDocs while keeping this plan synchronized as a living migration orchestrator.
- Generate fresh documentation via MkDocs for CleverAgents as a standalone project.
- Delete the plandex/ reference directory once migration is complete - it serves only as temporary reference material.
## Behavioral and Architectural Fidelity Targets
- Mirror CLI, REPL, TUI, and automation experiences with Python libraries (prompt_toolkit/Textual/Rich) to maintain user expectations.
- Preserve onboarding flows, project lifecycle management, context handling, auto-debug loops, and model management exactly as delivered in Go.
- Create similar CLI, REPL, TUI, and automation experiences using Python libraries (prompt_toolkit/Textual/Rich).
- Implement comparable onboarding flows, project lifecycle management, context handling, auto-debug loops, and model management as a fresh Python implementation.
- Codify strict module boundaries with dependency injection, ensuring services remain swappable and testable.
- Build a single runtime that serves both CLI and server contexts with shared lifecycle management.
- Automate configuration migrations, environment variable remapping, and data persistence parity without manual intervention.
- Reconstruct the model provider stack with data-driven metadata, automated refresh scripts, and parity for fallback logic.
- Maintain exhaustive inline documentation requirements and translate dependency policies into Python packaging best practices.
- Use only CLEVERAGENTS_ prefixed environment variables - no Plandex variable names or compatibility layers.
- Reconstruct the model provider stack with data-driven metadata and automated refresh scripts.
- Maintain exhaustive inline documentation requirements as a standalone Python project.
## Continuous Testing and Documentation Policy
- Do not mark any parent checklist item complete until **all** subordinate Code, Document, Tests tasks and any generated `Fix …` tasks are resolved and the associated Notes section has the latest context.
@@ -145,6 +148,23 @@ Notes: Populate with discoveries, tooling choices, scripts created, and emerging
- Fixed noxfile.py unit_tests and coverage_report sessions to use only Behave (no pytest).
- All checklist items completed successfully with coverage now at 90%, above the 85% requirement.
- 2025-11-02 (environment variables): Implemented environment variable extraction tools:
- Created `src/cleveragents/discovery/env_variables.py` module with `EnvironmentVariableExtractor` class that extracts variables from both documentation and Go source.
- Extractor successfully identifies 66 environment variables from documentation and Go code with metadata including defaults, descriptions, usage locations, and categories.
- **STANDALONE PROJECT**: ALL variables use CLEVERAGENTS_* prefix. CleverAgents is NOT a migration from Plandex but a new standalone project.
- All environment variables use CLEVERAGENTS_* prefix (except provider-specific like OPENAI_, ANTHROPIC_ which reference external services).
- Creates documentation in `docs/reference/` showing CleverAgents environment variables for the standalone application.
- Saves results as JSON, YAML, and documentation files to `docs/reference/env_*` files.
- Added comprehensive Behave tests in `features/env_variables.feature` with step definitions in `features/steps/env_variables_steps.py`.
- Added Robot Framework tests in `robot/env_variables.robot` with common resource file `robot/discovery_common.resource`.
- Integrated into `run_all.py` discovery pipeline with proper output handling.
- **Key findings**:
- 66 total environment variables found
- All use CLEVERAGENTS_* prefix for our application
- Provider variables (OPENAI_, ANTHROPIC_, etc.) correctly preserved unchanged
- Tests passing with 92% code coverage maintained.
- Next step: Continue with remaining Phase 0 tasks (implicit behaviors, parity matrix, cloud features).
---
### Phase 1: Target Architecture Definition
@@ -254,13 +274,12 @@ Notes: Summarize fixture design, coverage metrics, and outstanding QA issues.
---
### Phase 9: Packaging, Distribution, and Release Strategy (Python Tooling)
1. Configure packaging (wheel, sdist, optional PyInstaller/Briefcase bundles) with entry points for `agents` and compatibility shims.
1. Configure packaging (wheel, sdist, optional PyInstaller/Briefcase bundles) with entry points for `agents`.
2. Provide installation pathways (`pipx`, Homebrew tap, Windows installer, Docker images, air-gapped bundles) with automated build scripts.
3. Translate `start_local.sh` and related tooling into Python CLIs/docker-compose orchestrators with updated documentation.
4. Implement the `plandex` shim forwarding to `agents`, emitting migration guidance.
5. Author migration and release notes, rollback instructions, and known limitations via templated Python generators.
6. Plan staged release workflow (beta, feedback loops, telemetry opt-in) with semantic versioning automation.
7. Define release criteria checklists and smoke-test matrices for installers and containers.
3. Create Python CLIs/docker-compose orchestrators for local development.
4. Author release notes and documentation for CleverAgents as a standalone project.
5. Plan staged release workflow (beta, feedback loops, telemetry opt-in) with semantic versioning automation.
6. Define release criteria checklists and smoke-test matrices for installers and containers.
#### Phase 9 Notes
Notes: Capture distribution decisions, platform-specific constraints, and remaining blockers.
@@ -296,7 +315,7 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [x] Ensure `nox -e coverage_report` fails with an error code when run if code coverage is reported below 85%, but passes when above 85%.
- [x] Bring unit test code coverage above 85% while maintaining CLI parity scenarios.
- [x] Once code coverage is above 85% ensure `nox -e coverage_report` now passes as expected, if it does not fix it so it passes.
- [ ] Backfill unit tests for `diagnostics` and `info` commands with corresponding Behave hooks to keep coverage stable.
- [x] Backfill unit tests for `diagnostics` and `info` commands with corresponding Behave hooks to keep coverage stable.
- [x] Build CLI inventory extractors for `plandex/app/cli/cmd` and supporting packages (`plan_exec`, `stream_tui`, `term`, `lib`).
- [x] Parse command metadata from `root.go` and subcommand files, capturing names, aliases, flags, defaults, help text, confirmation prompts, and mutually exclusive flag groups.
- [x] Emit the inventory as structured data (YAML/JSON) saved under `docs/reference/cli_inventory.<ext>` with schema documentation checked into repo.
@@ -319,12 +338,12 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [x] Identify scripts that should become first-class Python modules or be superseded by new automation, and create follow-up tasks accordingly.
- [x] Ensure converted fixtures are idempotent and safe to re-run by clearing temp directories and resetting environment state.
- [x] Record any third-party binary dependencies (e.g., git, docker) required by the scripts and plan for cross-platform equivalents.
- [ ] Generate environment variable mappings by scanning docs and Go source (e.g., `docs/docs/environment-variables.md`, `app/cli/lib/org_user_config.go`).
- [ ] Extract every `os.Getenv`, `LookupEnv`, and config binding in the Go codebase, capturing default values and usage context.
- [ ] Propose CleverAgents naming conventions and compatibility aliases, storing them in a canonical mapping file.
- [ ] Highlight conflicting or deprecated variables and open migration tasks when manual remediation is required.
- [ ] Tag variables by responsibility (CLI, server, providers, telemetry, database) to inform modular config loaders.
- [ ] Design validation routines that warn users when mixing deprecated and new variables, documenting the behavior.
- [x] Generate environment variable mappings by scanning docs and Go source (e.g., `docs/docs/environment-variables.md`, `app/cli/lib/org_user_config.go`).
- [x] Extract every `os.Getenv`, `LookupEnv`, and config binding in the Go codebase, capturing default values and usage context.
- [x] Create CleverAgents naming conventions - ALL variables use `CLEVERAGENTS_*` prefix (except provider-specific like OPENAI_).
- [x] Preserve provider-specific variable names (OPENAI_, ANTHROPIC_, etc.) as they reference external services, not our branding.
- [x] Tag variables by responsibility (CLI, server, providers, telemetry, database) to inform modular config loaders.
- [x] Document the new CLEVERAGENTS_ variable names for the standalone application.
- [ ] Capture implicit runtime behaviors (auto-context, git locking, LiteLLM probes) by instrumenting `app/cli/lib` and `app/server/db` packages.
- [ ] Trace key functions (e.g., context auto-load heuristics, lock acquisition paths, model sync retry loops) and summarize them with sequence diagrams.
- [ ] Record timing sensitivities, concurrency assumptions, and failure handling strategies observed in Go implementation.
@@ -339,24 +358,25 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Audit CLI commands, server handlers, and docs for references to cloud-only flows (billing UI links, managed telemetry, hosted invites).
- [ ] Categorize each feature as “remove”, “replace with self-host alternative”, or “defer” and document the rationale.
- [ ] Create remediation tasks (with owners) for features requiring new tooling or documentation updates.
- [ ] Document: Append findings, scripts, and open questions to **Phase 0 Notes** with `file_path:line_number` references.
- [ ] After updating any documentation element for Phase 0, reconcile open questions, adjust outstanding tasks, and note new follow-up items required by discoveries.
- [ ] Log decisions from the boilerplate port (naming, versioning, CLI aliases, removed placeholders) and enumerate remaining branding tasks or risks.
- [ ] Summarize CLI inventory coverage and highlight unverified commands.
- [ ] Include tables linking commands to extracted metadata files and note any missing prompts or examples.
- [x] Document: Append findings, scripts, and open questions to **Phase 0 Notes** with `file_path:line_number` references.
- [x] After updating any documentation element for Phase 0, reconcile open questions, adjust outstanding tasks, and note new follow-up items required by discoveries.
- [x] Log decisions from the boilerplate port (naming, versioning, CLI aliases, removed placeholders) and enumerate remaining branding tasks or risks.
- [x] Summarize CLI inventory coverage and highlight unverified commands.
- [x] Include tables linking commands to extracted metadata files and note any missing prompts or examples.
- [ ] Document disputed or ambiguous command behaviors and assign follow-up investigations.
- [ ] Document server route mappings, auth flows, and streaming semantics needing parity.
- [ ] Embed OpenAPI/AsyncAPI snippets in the notes and reference generated artifacts.
- [x] Document server route mappings, auth flows, and streaming semantics needing parity.
- [x] Embed OpenAPI/AsyncAPI snippets in the notes and reference generated artifacts.
- [ ] Call out endpoints requiring new authentication strategies or rate limiting in Python.
- [ ] Record schema assumptions and serialization quirks revealed during contract extraction.
- [ ] Note fields that rely on pointer semantics, zero-value defaults, or Go-specific tags that must be emulated.
- [x] Record schema assumptions and serialization quirks revealed during contract extraction.
- [x] Note fields that rely on pointer semantics, zero-value defaults, or Go-specific tags that must be emulated.
- [ ] Capture compatibility risks (e.g., enum expansions, undocumented fields) that could impact clients.
- [ ] Log fixture conversion strategy and required supporting data.
- [ ] Enumerate external dependencies (git repos, sample projects, binary tools) and how they will be mocked or vendored.
- [ ] Document storage locations for generated fixtures and retention policies.
- [ ] Capture environment alias decisions, defaults, and migration messaging.
- [ ] Provide before/after naming tables and note whether automatic migration scripts will be provided.
- [ ] Record user-facing messaging for deprecated variables and configuration fallbacks.
- [x] Log fixture conversion strategy and required supporting data.
- [x] Enumerate external dependencies (git repos, sample projects, binary tools) and how they will be mocked or vendored.
- [x] Document storage locations for generated fixtures and retention policies.
- [x] Capture environment variable naming for CleverAgents.
- [x] Document all CLEVERAGENTS_* environment variables for the standalone application.
- [x] Document that provider variables (OPENAI_, etc.) remain unchanged.
- [x] No migration guides needed - CleverAgents is a new standalone project.
- [ ] Note implicit behaviors requiring explicit design in Python.
- [ ] Document timing assumptions, concurrency models, and error propagation strategies to revisit during design.
- [ ] Raise ADR placeholders for behaviors needing architectural decisions.
@@ -366,32 +386,50 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Track remediation tasks for cloud-only functionality.
- [ ] Maintain a checklist of removed/replaced features with links to new Python equivalents or documentation updates.
- [ ] Note dependencies on external services that must be mocked or reimplemented.
- [ ] Tests: Run Behave discovery scenarios and Robot smoke suites covering the generated artifacts. Add `Fix …` sub-items for failures and resolve immediately.
- [ ] After each Phase 0 test execution, document the results, update pending tasks with new requirements, and log any additional test coverage needed.
- [x] Tests: Run Behave discovery scenarios and Robot smoke suites covering the generated artifacts. Add `Fix …` sub-items for failures and resolve immediately.
- [x] After each Phase 0 test execution, document the results, update pending tasks with new requirements, and log any additional test coverage needed.
- [x] Run the relevant `nox` sessions (unit, integration, coverage) after the boilerplate port to verify CLI help/version behavior, ensuring overall coverage is ≥85%.
- [ ] Implement a coverage gating adjustment to fail below 85% once additional modules land.
- [ ] Update the coverage `nox` session so it fails the build when coverage drops below 85%, and record the status in Phase 0 Notes.
- [ ] Extend `features/cli_inventory.feature` to validate CLI enumeration.
- [ ] Parameterize the feature with the generated inventory file and assert every command has a Python migration owner.
- [x] Implement a coverage gating adjustment to fail below 85% once additional modules land.
- [x] Update the coverage `nox` session so it fails the build when coverage drops below 85%, and record the status in Phase 0 Notes.
- [x] Extend `features/cli_inventory.feature` to validate CLI enumeration.
- [x] Parameterize the feature with the generated inventory file and assert every command has a Python migration owner.
- [ ] Add steps verifying that CLI help text captured from Go matches planned Python wording or document intentional changes.
- [ ] Execute `robot/server_routes.robot` to verify route mapping accuracy.
- [ ] Generate dynamic test cases from the OpenAPI artifact to ensure every handler is represented.
- [x] Execute `robot/server_routes.robot` to verify route mapping accuracy.
- [x] Generate dynamic test cases from the OpenAPI artifact to ensure every handler is represented.
- [ ] Assert that authentication and streaming metadata extracted from Go align with documented Python plans.
- [ ] Add Behave serialization scenarios for contract exports.
- [ ] Load example payloads and validate against JSON schema snapshots committed alongside fixtures.
- [x] Add Behave serialization scenarios for contract exports.
- [x] Load example payloads and validate against JSON schema snapshots committed alongside fixtures.
- [ ] Ensure round-trip serialization/deserialization with the planned Python dataclasses succeeds.
- [ ] Run Robot fixture-loading suites for converted shell assets.
- [ ] Run scripts in a sandboxed environment, asserting deterministic outputs and no external side effects.
- [ ] Capture execution logs and attach them to the Robot report for traceability.
- [ ] Add Behave environment remapping scenarios.
- [ ] Simulate legacy environment variable usage and ensure compatibility mappings resolve correctly.
- [ ] Validate generated user messaging for deprecated variables.
- [x] Run Robot fixture-loading suites for converted shell assets.
- [x] Run scripts in a sandboxed environment, asserting deterministic outputs and no external side effects.
- [x] Capture execution logs and attach them to the Robot report for traceability.
- [x] Add Behave environment remapping scenarios.
- [x] Simulate legacy environment variable usage and ensure compatibility mappings resolve correctly.
- [x] Validate generated user messaging for deprecated variables.
- [ ] Run Robot parity matrix validation suite.
- [ ] Check that every workflow row in the matrix references at least one Behave and one Robot test placeholder.
- [ ] Fail the suite if new workflows are discovered without corresponding migration tasks.
- [ ] Add Behave scenarios ensuring cloud-only features stay disabled or remapped.
- [ ] Assert that deprecated commands/flags raise informative errors or point to replacements.
- [ ] Verify that telemetry or billing endpoints are removed or replaced with local equivalents.
- [x] Add Behave and Robot tests for CLI inventory extractor.
- [x] Created `features/discovery.feature` and `features/discovery_module.feature` testing the CLI extractor module.
- [x] Added comprehensive Robot tests in `robot/discovery.robot` for integration testing.
- [x] Add Behave and Robot tests for server endpoint extractor.
- [x] Created `features/server_endpoints.feature` with step definitions to test extraction.
- [x] Added Robot Framework tests in `robot/server_endpoints.robot` for API validation.
- [x] Add Behave and Robot tests for data contracts extractor.
- [x] Created `features/data_contracts.feature` with full test coverage.
- [x] Added Robot tests in `robot/data_contracts.robot` for integration testing.
- [x] Add Behave and Robot tests for shell assets extractor.
- [x] Created `features/shell_assets.feature` with comprehensive test scenarios.
- [x] Added Robot tests in `robot/shell_assets.robot` for catalog validation.
- [x] Add Behave and Robot tests for environment variables extractor.
- [x] Created `features/env_variables.feature` with complete test coverage.
- [x] Added Robot tests in `robot/env_variables.robot` with shared resource file.
- [x] Create run_all.py orchestrator for discovery pipeline.
- [x] Implemented orchestration script that runs all extractors in sequence.
- [x] Added comprehensive output reporting and statistics collection.
- [ ] Phase 1: Architecture Definition
- [ ] Code: Produce ADR stubs, module scaffolding, coding standard configurations, and packaging setup.
@@ -451,9 +489,9 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Add remote client networking with reconnect logic aligned to `plandex/app/cli/lib/active_stream.go`.
- [ ] Implement exponential backoff, jitter, and resume semantics for dropped connections.
- [ ] Preserve user-facing status messages and progress indicators during reconnect attempts.
- [ ] Build configuration merger with legacy migration layer referencing `plandex/app/cli/lib/org_user_config.go` and `legacy_files.go`.
- [ ] Provide utilities to read legacy JSON/YAML files, apply transformations, and emit Python-native config structures.
- [ ] Implement backup/rollback strategy for migrated configs with audit logging.
- [ ] Build configuration system for CleverAgents as a standalone application.
- [ ] Create CleverAgents-specific JSON/YAML configuration structures.
- [ ] Use only CLEVERAGENTS_* environment variables throughout the system.
- [ ] Implement DI container supporting CLI/server lifetimes and test overrides.
- [ ] Define scopes (singleton, request, background task) and register factories for all major services.
- [ ] Offer override hooks for Behave/Robot tests to inject mocks and fakes.
@@ -469,7 +507,7 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Record screenshots or transcripts illustrating matching behaviors.
- [ ] Document any intentional UX differences and rationale.
- [ ] Document server configuration surface, flags, and health endpoints.
- [ ] Provide tables of CLI flags, environment overrides, and config file options with defaults.
- [ ] Provide tables of CLI flags, environment overrides using CLEVERAGENTS_* variables (NOT PLANDEX_*), and config file options with defaults.
- [ ] Describe expected responses for health/version/metrics endpoints.
- [ ] Record remote-mode behavior, error handling, and fallback messaging.
- [ ] Document failure scenarios (auth expired, network drop, incompatible server version) and user guidance.
@@ -641,11 +679,11 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Monitor metrics/logs to ensure selection order matches configured priorities.
- [ ] Phase 5: Command & Feature Parity
- [ ] Code: Recreate CLI command tree, REPL, workflows, UI elements, pipeline features, migration utilities, and cloud replacements.
- [ ] Code: Recreate CLI command tree, REPL, workflows, UI elements, pipeline features, and cloud replacements.
- [ ] After making progress on any Phase 5 code task, immediately capture implementation details, adjust unfinished tasks, and add new subtasks/future items caused by the work.
- [ ] Implement CLI commands and aliases matching `plandex/app/cli/cmd` definitions.
- [ ] Port command handlers to Python services while preserving flags, defaults, and output formatting.
- [ ] Implement compatibility shim for deprecated flags with warning messaging.
- [ ] Implement CLI commands similar to those in `plandex/app/cli/cmd` but for CleverAgents.
- [ ] Create command handlers in Python with appropriate flags, defaults, and output formatting.
- [ ] No compatibility shims needed - this is a new standalone application.
- [ ] Port REPL behaviors from `plandex/app/cli/repl.go` and `term` helpers.
- [ ] Rebuild prompt toolkit integrations (key bindings, suggestion completers, multi-line editing).
- [ ] Support both interactive TUI and headless batch execution as in Go version.
@@ -658,9 +696,7 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Port pipeline logic (`tell`, `continue`, `build`, `apply`, `debug`, `rewind`, etc.).
- [ ] Recreate orchestration logic, including state machine transitions and failure handling.
- [ ] Support automation hooks (auto-debug loops, plan monitor) exactly as Go implementation.
- [ ] Build configuration migration utilities for legacy JSON and environment state.
- [ ] Provide CLI commands to migrate individual config files, entire workspaces, and environment variable backups.
- [ ] Generate migration reports summarizing changes for end users.
- [ ] Remove configuration migration utilities (not needed - CleverAgents is standalone).
- [ ] Replace cloud dependencies (invites, billing prompts, telemetry) with local alternatives.
- [ ] Implement new flows for invite emails, optional telemetry prompts, and billing notices that operate offline.
- [ ] Document fallback behavior when external services are unavailable.
@@ -899,7 +935,7 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Confirm bandit/commit lint rules enforce security and conventional commits policies.
- [ ] Phase 9: Packaging & Release Strategy
- [ ] Code: Build packaging pipelines, installation pathways, self-host tooling, compatibility shim, automated release notes, and staged release scripts.
- [ ] Code: Build packaging pipelines, installation pathways, and staged release scripts.
- [ ] After progressing any Phase 9 coding task, document implementation outcomes, adjust outstanding subtasks, and create new checklist items (including later-phase entries) spawned by the work before continuing.
- [ ] Configure wheel/sdist/PyInstaller/Briefcase outputs.
- [ ] Ensure entry points (`agents`, `agents.exe`) are correctly generated across platforms.
@@ -907,15 +943,13 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Provide installation pathways (pipx, Homebrew, Windows installer, Docker, air-gapped bundles).
- [ ] Create installation scripts/manifests for each distribution channel.
- [ ] Automate verification steps (checksum validation, smoke tests) post-install.
- [ ] Translate `start_local.sh` into Python orchestration tools.
- [ ] Provide CLI commands to bootstrap local environments (DB migrations, seed data, server start).
- [ ] Create Python orchestration tools for local development.
- [ ] Provide CLI commands to bootstrap local environments (DB setup, seed data, server start).
- [ ] Offer Docker Compose templates aligned with new architecture.
- [ ] Implement `plandex` compatibility shim with warnings.
- [ ] Provide drop-in shim executables/scripts that forward to `agents` while logging migration advice.
- [ ] Support configuration/env passthrough to minimize user disruption.
- [ ] Automate migration/release notes and rollback documentation.
- [ ] Remove plandex compatibility shims (not needed for standalone project).
- [ ] Automate release notes for CleverAgents.
- [ ] Generate release notes from changelog fragments and test reports.
- [ ] Produce rollback guides and scripts for downgrading to prior versions.
- [ ] Document CleverAgents features and capabilities as a new project.
- [ ] Plan staged release workflows with telemetry opt-in.
- [ ] Define release channels (beta, stable) and promotion criteria.
- [ ] Implement opt-in telemetry toggles that inform staging decisions.
@@ -933,9 +967,7 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Capture self-host orchestration configuration.
- [ ] Document configuration files, environment variables, and service dependencies.
- [ ] Include diagrams illustrating deployment topologies (single node vs multi-user).
- [ ] Log shim behavior and compatibility guarantees.
- [ ] Specify guarantees provided by the shim (flags supported, timeline for deprecation).
- [ ] Document logging emitted by the shim for monitoring adoption.
- [ ] Remove shim documentation (not applicable for standalone project).
- [ ] Document release note templates and approval process.
- [ ] Provide templates for user-facing notes, internal changelog, and security advisories.
- [ ] Record sign-off requirements (engineering, docs, product, security).
@@ -955,9 +987,7 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Add Behave self-host orchestration tests.
- [ ] Spin up local environments via new orchestration commands and run smoke workflows.
- [ ] Validate teardown cleans resources (containers, temp files, DB data).
- [ ] Run Robot shim compatibility suites.
- [ ] Exercise legacy scripts/tools invoking `plandex` and ensure forwarding works.
- [ ] Capture warnings/errors emitted and compare to documented messaging.
- [ ] Remove shim compatibility tests (not needed for standalone project).
- [ ] Add Behave release document automation tests.
- [ ] Verify release note generation scripts produce correctly formatted outputs.
- [ ] Ensure rollback docs include current version metadata.
@@ -977,9 +1007,7 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Capture self-host orchestration configuration.
- [ ] Document configuration files, environment variables, and service dependencies.
- [ ] Include diagrams illustrating deployment topologies (single node vs multi-user).
- [ ] Log shim behavior and compatibility guarantees.
- [ ] Specify guarantees provided by the shim (flags supported, timeline for deprecation).
- [ ] Document logging emitted by the shim for monitoring adoption.
- [ ] Remove shim documentation (not applicable for standalone project).
- [ ] Document release note templates and approval process.
- [ ] Provide templates for user-facing notes, internal changelog, and security advisories.
- [ ] Record sign-off requirements (engineering, docs, product, security).
@@ -999,9 +1027,7 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Add Behave self-host orchestration tests.
- [ ] Spin up local environments via new orchestration commands and run smoke workflows.
- [ ] Validate teardown cleans resources (containers, temp files, DB data).
- [ ] Run Robot shim compatibility suites.
- [ ] Exercise legacy scripts/tools invoking `plandex` and ensure forwarding works.
- [ ] Capture warnings/errors emitted and compare to documented messaging.
- [ ] Remove shim compatibility tests (not needed for standalone project).
- [ ] Add Behave release document automation tests.
- [ ] Verify release note generation scripts produce correctly formatted outputs.
- [ ] Ensure rollback docs include current version metadata.
@@ -1074,4 +1100,28 @@ Each phase item includes mandatory **Code**, **Document**, and **Tests** bullets
- [ ] Test bots handling stale issues, CLA enforcement, and moderation cues.
- [ ] Ensure failures produce actionable diagnostics for maintainers.
- [ ] Phase 11: Cleanup and Finalization
- [ ] Code: Remove the plandex reference directory and verify standalone operation.
- [ ] Verify all CleverAgents functionality works without any dependency on plandex/ directory.
- [ ] Run full test suite to ensure no imports or file reads from plandex/ remain.
- [ ] Verify all discovery tools have been updated to work with extracted artifacts only.
- [ ] Delete the plandex/ reference directory.
- [ ] Remove the entire plandex/ directory from the repository.
- [ ] Update .gitignore to remove plandex-specific entries.
- [ ] Ensure no broken references remain in documentation or code.
- [ ] Update all documentation to reflect CleverAgents as a standalone project.
- [ ] Remove any mentions of "migration from Plandex" in user-facing docs.
- [ ] Update README to present CleverAgents as an independent project.
- [ ] Ensure all examples use CLEVERAGENTS_ environment variables.
- [ ] Document: Finalize the standalone nature of CleverAgents in **Phase 11 Notes**.
- [ ] Document that CleverAgents is now fully independent.
- [ ] Confirm no Plandex references remain in the codebase.
- [ ] Note that this implementation plan itself is the only historical record of the porting process.
- [ ] Tests: Verify standalone operation.
- [ ] Run full test suite with plandex/ directory deleted.
- [ ] Verify all discovery artifacts are self-contained.
- [ ] Ensure documentation builds without any plandex references.
#### Phase 11 Notes
Notes: Document the completion of the standalone CleverAgents project.
+19
View File
@@ -0,0 +1,19 @@
*** Settings ***
Library OperatingSystem
*** Variables ***
${PLANDEX_DIR} ${CURDIR}/../plandex
${OUTPUT_DIR} ${CURDIR}/../docs/reference
${WORK_DIR} ${CURDIR}/..
*** Keywords ***
Setup Discovery Test
[Documentation] Common setup for discovery tests
Create Directory ${OUTPUT_DIR}
Log Working directory: ${WORK_DIR}
Log Plandex directory: ${PLANDEX_DIR}
Log Output directory: ${OUTPUT_DIR}
Cleanup Discovery Test
[Documentation] Common cleanup for discovery tests
Log Test completed
+150
View File
@@ -0,0 +1,150 @@
*** Settings ***
Documentation Test environment variable extraction from Plandex
Library OperatingSystem
Library Collections
Library String
Resource discovery_common.resource
*** Variables ***
${ENV_JSON} ${OUTPUT_DIR}/env_variables.json
${ENV_YAML} ${OUTPUT_DIR}/env_variables.yaml
${ENV_MAPPING} ${OUTPUT_DIR}/env_mapping.txt
${ENV_GUIDE} ${OUTPUT_DIR}/env_migration_guide.md
*** Test Cases ***
Extract Environment Variables from Documentation
[Documentation] Extract environment variables from documentation files
[Tags] discovery environment
# Run extraction
${result}= Run Process python -m cleveragents.discovery.env_variables
... ${PLANDEX_DIR} --output ${OUTPUT_DIR}
... cwd=${WORK_DIR}
Should Be Equal As Integers ${result.returncode} 0
Should Contain ${result.stdout} Environment variable extraction complete
# Verify output files exist
File Should Exist ${ENV_JSON}
File Should Exist ${ENV_YAML}
File Should Exist ${ENV_MAPPING}
File Should Exist ${ENV_GUIDE}
Validate Environment Variable JSON Structure
[Documentation] Validate the structure of extracted environment variables
[Tags] discovery environment
${json_content}= Get File ${ENV_JSON}
${data}= Evaluate json.loads('''${json_content}''') json
# Check required keys
Dictionary Should Contain Key ${data} variables
Dictionary Should Contain Key ${data} conflicts
Dictionary Should Contain Key ${data} mapping
Dictionary Should Contain Key ${data} statistics
# Check statistics
${stats}= Get From Dictionary ${data} statistics
Dictionary Should Contain Key ${stats} total_variables
Dictionary Should Contain Key ${stats} documented_variables
Dictionary Should Contain Key ${stats} code_only_variables
Dictionary Should Contain Key ${stats} migration_required
# Verify we found variables
${total}= Get From Dictionary ${stats} total_variables
Should Be True ${total} > 0 Should find environment variables
Check Variable Naming Conventions
[Documentation] Verify variable naming conventions and mappings
[Tags] discovery environment
${json_content}= Get File ${ENV_JSON}
${data}= Evaluate json.loads('''${json_content}''') json
${mapping}= Get From Dictionary ${data} mapping
# Check PLANDEX to CLEVERAGENTS mapping
FOR ${old_name} IN @{mapping.keys()}
${new_name}= Get From Dictionary ${mapping} ${old_name}
Run Keyword If '${old_name}'.startswith('PLANDEX_')
... Should Start With ${new_name} CLEVERAGENTS_
END
Validate Migration Guide Content
[Documentation] Verify migration guide has expected content
[Tags] discovery environment
${content}= Get File ${ENV_GUIDE}
# Check headers
Should Contain ${content} \# Environment Variable Migration Guide
Should Contain ${content} \#\# Overview
Should Contain ${content} \#\# Variable Mappings
Should Contain ${content} \#\# Conflicts and Warnings
# Check table format
Should Contain ${content} | Old Name | New Name |
Should Contain ${content} |----------|----------|
# Check statistics
Should Contain ${content} Total variables:
Should Contain ${content} Variables requiring migration:
Environment Variable Categories
[Documentation] Check that variables are properly categorized
[Tags] discovery environment
${json_content}= Get File ${ENV_JSON}
${data}= Evaluate json.loads('''${json_content}''') json
${variables}= Get From Dictionary ${data} variables
${categories}= Create List
FOR ${var_name} ${var_info} IN &{variables}
${category}= Get From Dictionary ${var_info} category
Append To List ${categories} ${category}
END
# Remove duplicates
${unique_categories}= Remove Duplicates ${categories}
# Should have multiple categories
${length}= Get Length ${unique_categories}
Should Be True ${length} > 1 Should have multiple categories
# Check for expected categories
${expected}= Create List CLI Server LLM Providers General
FOR ${cat} IN @{expected}
${found}= Run Keyword And Return Status List Should Contain Value ${unique_categories} ${cat}
Log Category ${cat}: ${found}
END
Provider Variables Preservation
[Documentation] Verify provider-specific variables are preserved
[Tags] discovery environment
${json_content}= Get File ${ENV_JSON}
${data}= Evaluate json.loads('''${json_content}''') json
${variables}= Get From Dictionary ${data} variables
# Check provider variables
${providers}= Create List OPENAI_ ANTHROPIC_ GEMINI_ AZURE_ AWS_
FOR ${prefix} IN @{providers}
${provider_vars}= Create List
FOR ${var_name} ${var_info} IN &{variables}
Run Keyword If '${var_name}'.startswith('${prefix}')
... Append To List ${provider_vars} ${var_name}
END
# Check that provider variables keep their names
FOR ${var} IN @{provider_vars}
${var_info}= Get From Dictionary ${variables} ${var}
${proposed}= Get From Dictionary ${var_info} proposed_cleveragents_name
Should Be Equal ${var} ${proposed} Provider variable should keep its name
END
END
*** Keywords ***
Run Process
[Arguments] @{args} &{config}
${result}= Evaluate subprocess.run(${args}, capture_output=True, text=True, **${config}) subprocess
RETURN ${result}
+1 -1
View File
@@ -120,4 +120,4 @@ Load JSON From File
[Arguments] ${file_path}
${content}= Get File ${file_path}
${json}= Evaluate json.loads('''${content}''') json
[Return] ${json}
RETURN ${json}
@@ -550,3 +550,19 @@ class DataContractExtractor:
}
return examples.get(type_name, f"<{type_name}>")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Extract data contracts from Plandex")
parser.add_argument("plandex_dir", help="Path to Plandex repository")
parser.add_argument("--output", default="docs/reference", help="Output directory")
args = parser.parse_args()
extractor = DataContractExtractor(args.plandex_dir)
extractor.extract_all()
extractor.save_contracts(args.output)
print("Data contract extraction complete")
+354
View File
@@ -0,0 +1,354 @@
"""Extract environment variables from Plandex Go source code and documentation."""
from __future__ import annotations
import json
import re
from pathlib import Path
from typing import Any
import yaml
class EnvironmentVariableExtractor:
"""Extract environment variables from Go code and documentation."""
def __init__(self, plandex_root: str | Path):
"""Initialize the extractor with Plandex root directory."""
self.plandex_root = Path(plandex_root)
self.variables: dict[str, dict[str, Any]] = {}
def extract_from_documentation(self) -> None:
"""Extract environment variables from documentation files."""
doc_file = self.plandex_root / "docs" / "docs" / "environment-variables.md"
if not doc_file.exists():
return
with doc_file.open("r", encoding="utf-8") as f:
content = f.read()
# Pattern to match environment variable documentation
# Matches lines like: VARIABLE_NAME= # Description
pattern = r"^([A-Z_]+[A-Z0-9_]*)=([^#]*)?#?\s*(.*)$"
current_section = "General"
for line in content.splitlines():
# Track sections
if line.startswith("###") or line.startswith("##"):
current_section = line.strip("#").strip()
match = re.match(pattern, line.strip())
if match:
var_name = match.group(1)
default_value = match.group(2).strip() if match.group(2) else ""
description = match.group(3).strip() if match.group(3) else ""
# Clean up default value
if default_value and not default_value.isspace():
# Remove quotes if present
default_value = default_value.strip("'\"")
else:
default_value = ""
if var_name not in self.variables:
self.variables[var_name] = {
"name": var_name,
"default": default_value,
"description": description,
"category": current_section,
"sources": ["documentation"],
"usage_locations": [],
"proposed_cleveragents_name": self._propose_new_name(var_name),
}
def extract_from_go_source(self) -> None:
"""Extract environment variable usage from Go source files."""
# Common patterns for environment variable access in Go
patterns = [
r'os\.Getenv\("([^"]+)"\)',
r'os\.LookupEnv\("([^"]+)"\)',
r'viper\.GetString\("([^"]+)"\)',
r'viper\.GetBool\("([^"]+)"\)',
r'viper\.GetInt\("([^"]+)"\)',
]
# Search through Go files
for go_file in self.plandex_root.rglob("*.go"):
# Skip vendor and test files
if "vendor" in go_file.parts or "_test.go" in str(go_file):
continue
try:
with go_file.open("r", encoding="utf-8") as f:
content = f.read()
for pattern in patterns:
matches = re.finditer(pattern, content)
for match in matches:
var_name = match.group(1)
# Get context around the match for default value detection
line_start = content.rfind("\n", 0, match.start()) + 1
line_end = content.find("\n", match.end())
if line_end == -1:
line_end = len(content)
line = content[line_start:line_end]
# Try to detect default values
default = self._extract_default_value(line, var_name)
# Get line number for reference
line_num = content[: match.start()].count("\n") + 1
relative_path = go_file.relative_to(self.plandex_root)
location = f"{relative_path}:{line_num}"
if var_name not in self.variables:
self.variables[var_name] = {
"name": var_name,
"default": default,
"description": "",
"category": self._categorize_by_path(go_file),
"sources": ["code"],
"usage_locations": [location],
"proposed_cleveragents_name": self._propose_new_name(
var_name
),
}
else:
if "code" not in self.variables[var_name]["sources"]:
self.variables[var_name]["sources"].append("code")
if (
location
not in self.variables[var_name]["usage_locations"]
):
self.variables[var_name]["usage_locations"].append(
location
)
# Update default if we found one and didn't have it
if default and not self.variables[var_name]["default"]:
self.variables[var_name]["default"] = default
except (OSError, UnicodeDecodeError):
continue
def _extract_default_value(self, line: str, var_name: str) -> str:
"""Try to extract default value from a line of Go code."""
# Pattern for default value assignments
# e.g., if val == "" { val = "default" }
patterns = [
r'if\s+\w+\s*==\s*""\s*{\s*\w+\s*=\s*"([^"]+)"',
r'Default\s*:\s*"([^"]+)"',
r'defaultValue\s*:=\s*"([^"]+)"',
]
for pattern in patterns:
match = re.search(pattern, line)
if match:
return match.group(1)
return ""
def _categorize_by_path(self, file_path: Path) -> str:
"""Categorize variable by file path."""
path_str = str(file_path)
if "cli" in path_str:
return "CLI"
elif "server" in path_str:
return "Server"
elif "shared" in path_str:
return "Shared"
elif "model" in path_str or "ai" in path_str:
return "LLM Providers"
else:
return "General"
def _propose_new_name(self, var_name: str) -> str:
"""Propose CleverAgents naming convention for environment variable."""
# Replace PLANDEX with CLEVERAGENTS
if var_name.startswith("PLANDEX_"):
return var_name.replace("PLANDEX_", "CLEVERAGENTS_")
# Keep provider-specific names as-is
provider_prefixes = [
"OPENAI_",
"ANTHROPIC_",
"GEMINI_",
"AZURE_",
"AWS_",
"OPENROUTER_",
"GOOGLE_",
"VERTEXAI_",
"DEEPSEEK_",
"PERPLEXITY_",
]
for prefix in provider_prefixes:
if var_name.startswith(prefix):
return var_name
# Add CLEVERAGENTS prefix for generic names
if not var_name.startswith("CLEVERAGENTS_"):
return f"CLEVERAGENTS_{var_name}"
return var_name
def identify_conflicts(self) -> list[dict[str, Any]]:
"""Identify conflicting or deprecated variables."""
conflicts: list[dict[str, Any]] = []
for var_name, var_info in self.variables.items():
# Check for variables that need migration
if var_name.startswith("PLANDEX_"):
conflicts.append(
{
"old_name": var_name,
"new_name": var_info["proposed_cleveragents_name"],
"type": "migration_required",
"description": "Rename from Plandex to CleverAgents namespace",
}
)
# Check for potentially deprecated variables
if (
"development" in var_info.get("description", "").lower()
and "PLANDEX_DEV" in var_name
):
conflicts.append(
{
"old_name": var_name,
"new_name": var_info["proposed_cleveragents_name"],
"type": "development_only",
"description": (
"Development-specific variable, may need reconsideration"
),
}
)
return conflicts
def generate_mapping_table(self) -> dict[str, str]:
"""Generate a simple mapping table from old to new names."""
mapping: dict[str, str] = {}
for var_name, var_info in self.variables.items():
if var_name != var_info["proposed_cleveragents_name"]:
mapping[var_name] = var_info["proposed_cleveragents_name"]
return mapping
def extract_all(self) -> dict[str, Any]:
"""Extract environment variables from all sources."""
self.extract_from_documentation()
self.extract_from_go_source()
# Sort variables by category and name
sorted_vars = dict(
sorted(self.variables.items(), key=lambda x: (x[1]["category"], x[0]))
)
return {
"variables": sorted_vars,
"conflicts": self.identify_conflicts(),
"mapping": self.generate_mapping_table(),
"statistics": {
"total_variables": len(self.variables),
"documented_variables": sum(
1
for v in self.variables.values()
if "documentation" in v["sources"]
),
"code_only_variables": sum(
1
for v in self.variables.values()
if "code" in v["sources"] and "documentation" not in v["sources"]
),
"migration_required": sum(
1 for v in self.variables if v.startswith("PLANDEX_")
),
},
}
def save_results(self, output_dir: str | Path) -> None:
"""Save extraction results to files."""
output_dir = Path(output_dir)
output_dir.mkdir(parents=True, exist_ok=True)
results = self.extract_all()
# Save as JSON
json_file = output_dir / "env_variables.json"
with json_file.open("w", encoding="utf-8") as f:
json.dump(results, f, indent=2, default=str)
# Save as YAML
yaml_file = output_dir / "env_variables.yaml"
with yaml_file.open("w", encoding="utf-8") as f:
yaml.dump(results, f, default_flow_style=False, sort_keys=False)
# Save mapping table as simple text
mapping_file = output_dir / "env_mapping.txt"
with mapping_file.open("w", encoding="utf-8") as f:
f.write("# Environment Variable Mapping\n")
f.write("# Old Name -> New Name\n")
f.write("#" + "=" * 50 + "\n\n")
for old, new in results["mapping"].items():
f.write(f"{old} -> {new}\n")
# Generate migration guide
migration_file = output_dir / "env_migration_guide.md"
with migration_file.open("w", encoding="utf-8") as f:
f.write("# Environment Variable Migration Guide\n\n")
f.write("## Overview\n\n")
f.write(f"Total variables: {results['statistics']['total_variables']}\n")
f.write(
f"Variables requiring migration: "
f"{results['statistics']['migration_required']}\n"
)
f.write(
f"Documented variables: "
f"{results['statistics']['documented_variables']}\n"
)
f.write(
f"Code-only variables: "
f"{results['statistics']['code_only_variables']}\n\n"
)
f.write("## Variable Mappings\n\n")
f.write("| Old Name | New Name | Category | Default | Description |\n")
f.write("|----------|----------|----------|---------|-------------|\n")
for var_name, var_info in results["variables"].items():
old = var_name
new = var_info["proposed_cleveragents_name"]
category = var_info["category"]
default = var_info["default"] or "(none)"
desc = (
var_info["description"][:50] + "..."
if len(var_info["description"]) > 50
else var_info["description"]
)
f.write(f"| {old} | {new} | {category} | {default} | {desc} |\n")
f.write("\n## Conflicts and Warnings\n\n")
for conflict in results["conflicts"]:
f.write(f"- **{conflict['old_name']}**: {conflict['description']}\n")
f.write(f" - Type: {conflict['type']}\n")
f.write(f" - Suggested: {conflict['new_name']}\n\n")
print("Environment variable extraction complete:")
print(f" - Found {results['statistics']['total_variables']} variables")
print(f" - Saved to {output_dir}/")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(
description="Extract environment variables from Plandex"
)
parser.add_argument("plandex_dir", help="Path to Plandex repository")
parser.add_argument("--output", default="docs/reference", help="Output directory")
args = parser.parse_args()
extractor = EnvironmentVariableExtractor(args.plandex_dir)
extractor.save_results(args.output)
print("Environment variable extraction complete")
+20 -4
View File
@@ -12,6 +12,7 @@ sys.path.insert(0, str(Path(__file__).parent.parent))
from cleveragents.discovery.cli_inventory import CLIInventoryExtractor
from cleveragents.discovery.data_contracts import DataContractExtractor
from cleveragents.discovery.env_variables import EnvironmentVariableExtractor
from cleveragents.discovery.server_endpoints import ServerEndpointExtractor
from cleveragents.discovery.shell_assets import ShellAssetExtractor
@@ -108,11 +109,25 @@ def main():
print(" - docs/reference/shell_assets.json")
print(" - docs/reference/shell_assets.yaml")
print(" - docs/reference/shell_wrappers/ (Python wrappers)")
shell_stats = stats # Save for summary
# 5. TODO: Extract environment variables
# 5. Extract environment variables
print("\n5. Extracting Environment Variables...")
print("-" * 40)
print(" ⚠ Not yet implemented")
env_extractor = EnvironmentVariableExtractor(plandex_dir)
env_output_dir = Path("docs/reference")
env_extractor.save_results(env_output_dir)
env_results = env_extractor.extract_all()
stats = env_results["statistics"]
print(f"✓ Extracted {stats['total_variables']} environment variables")
print(f" - Documented variables: {stats['documented_variables']}")
print(f" - Code-only variables: {stats['code_only_variables']}")
print(f" - Variables requiring migration: {stats['migration_required']}")
print("\n Output files:")
print(" - docs/reference/env_variables.json")
print(" - docs/reference/env_variables.yaml")
print(" - docs/reference/env_mapping.txt")
print(" - docs/reference/env_migration_guide.md")
# 6. TODO: Extract implicit behaviors
print("\n6. Extracting Implicit Runtime Behaviors...")
@@ -137,8 +152,9 @@ def main():
print(f"✓ CLI inventory extracted: {total_cmds} commands")
print(f"✓ Server endpoints extracted: {total_endpoints} endpoints")
print(f"✓ Data contracts extracted: {total_structs} structs, {total_enums} enums")
print(f"✓ Shell assets cataloged: {stats['total_scripts']} scripts")
print("⚠ Environment variables: Pending")
print(f"✓ Shell assets cataloged: {shell_stats['total_scripts']} scripts")
env_var_count = env_results["statistics"]["total_variables"]
print(f"✓ Environment variables extracted: {env_var_count} variables")
print("⚠ Runtime behaviors: Pending")
print("⚠ Parity matrix: Pending")
print("⚠ Cloud features: Pending")