跳转至

CLI 用法

ChatEnv 的 CLI 入口是 chatenv。所有命令默认只读取一个根变量:

export CHATARCH_HOME=~/.chatarch

实际 env/profile 根目录为:

$CHATARCH_HOME/envs/

也可以对单次命令使用 --home

chatenv --home /tmp/chatarch cat -t example

交互策略

缺少必要命令参数时,ChatEnv 默认会在可交互终端中自动补问。例如缺少 profile name、key,或命令需要唯一 config type 但未传 -t/--type 时,会进入补参流程。

  • -i:显式强制交互补问。
  • -I:显式禁用交互补问,缺必要参数时报错。
  • CHATARCH_AUTO_PROMPT=false:关闭默认自动补问;不影响显式 -i,也不影响必要参数已经足够的命令。

可识别的 false 值为 false0nooff

export CHATARCH_AUTO_PROMPT=false
chatenv get          # 直接报错,不自动询问 key
chatenv get -i       # 仍然强制询问 key

Schema 注册

chatenv 命令基于已注册 schema 工作。ChatEnv 内置少量 ChatArch 共享 schema(当前为 OpenAI / Feishu);业务项目的私有变量仍应定义并注册自己的 BaseEnvConfig 子类。

from chatenv import BaseEnvConfig, EnvField

class ExampleConfig(BaseEnvConfig):
    _title = "Example Configuration"
    _aliases = ["example"]
    _storage_dir = "Example"

    EXAMPLE_API_KEY = EnvField("EXAMPLE_API_KEY", is_sensitive=True)

初始化

chatenv init                  # 写入全部已注册类型的 active .env
chatenv init -t example       # 只写入 Example 类型
chatenv init -t example -i    # 初始化前逐项补问

查看

chatenv --version             # 查看当前 chatenv 版本
chatenv --tree                # 从已注册 Click 命令生成完整命令树
chatenv --tree-brief          # 从同一注册表生成省略参数签名的简略命令树
chatenv list                  # 按类型列出 active .env [default] 和 named profiles
chatenv list -t example
chatenv status                # 列出当前 Python 环境已注册的平台/schema
chatenv status --detail       # 展开每个平台的变量、敏感性、默认值和 provider 来源
chatenv status -t example --detail
chatenv cat                   # 输出所有 active values,敏感值默认打码
chatenv cat -t example
chatenv cat -t example work   # 输出 Example/work.env
chatenv cat -t example --no-mask

Profile

chatenv new -t example work       # 从当前 active values 创建 work.env
chatenv save -t example work      # 保存当前 active values 到 work.env
chatenv use -t example work       # 将 work.env 激活为 .env
chatenv delete -t example work    # 删除 work.env

new/save/delete 遇到覆盖或删除会确认;自动化场景使用 -y/--yes

Key 操作

chatenv set EXAMPLE_API_KEY=sk-xxx
chatenv get EXAMPLE_API_KEY

set 会根据 key 所属 schema 写回对应类型的 active .env

Paste

paste 用于跨机器复制 typed env。输入不要求是严格 dotenv 文件,会从终端日志、shell prompt、复制文本里提取已注册 key;同一行里用空格分隔的多个 KEY='VALUE' 片段也会被逐个识别。

chatenv cat -t example --no-mask | chatenv paste --stdin --profile work --yes
chatenv paste --value "EXAMPLE_API_KEY='sk-xxx'" --yes
chatenv paste --value "EXAMPLE_MODEL='gpt example' EXAMPLE_API_KEY='sk-xxx'" --yes
chatenv paste

写入前会输出识别概要:识别到哪些类型、哪些 key、未知 key 被忽略。

Runtime tokens

Token-store 是运行态,不是另一个手工维护 env 文件。日常刷新应由服务包注册 refresh provider 后执行:

chatenv token refresh PyPI RexWzh
chatenv token status PyPI RexWzh
chatenv token list PyPI
chatenv token clear PyPI RexWzh        # dry-run
chatenv token clear PyPI RexWzh --execute

服务包通过 pyproject.toml 注册:

[project.entry-points."chatenv.token_refreshers"]
PyPI = "chatpypi.session_ops:refresh_chatenv_token"

刷新函数返回 chatenv.TokenRefreshResult 或同形 mapping;ChatEnv 负责写入 tokens/<Service>/<profile>.json 并只输出 safe metadata。若确实需要迁移或接入外部刷新器,可显式导入:

external-refresh-command | chatenv token import PyPI RexWzh --stdin --token-type web_session

token import 是显式交接入口,不代表 ChatEnv 推荐用户手工维护 token JSON。

命令树 / Readback

chatenv --tree 从当前安装包的 Click 注册表实时生成带参数签名的命令树;chatenv --tree-brief 从同一注册表生成省略参数签名的版本。两者都适合发布验收、文档校对和自动化 readback。

chatenv
├── --help  # Show this message and exit.
├── --version  # Show the version and exit.
├── --tree  # Print the registered command tree.
├── --tree-brief  # Print the registered command tree without parameter signatures.
├── --home HOME  # Override CHATARCH_HOME for this command.
├── init [--type CONFIG-TYPES] [--interactive]  # Create or update active typed env files.
├── new [NAME] [--type CONFIG-TYPES] [--yes] [--interactive]  # Create a named typed profile without activating it.
├── paste [--value VALUE] [--stdin] [--profile PROFILE] [--yes] [--interactive]  # Paste loose env text and import recognized keys.
├── use [NAME] [--type CONFIG-TYPES] [--interactive]  # Activate a named profile for one config type.
├── list [--type CONFIG-TYPES]  # List active default and named profiles grouped by config type.
├── status [--type CONFIG-TYPES] [--detail]  # Show registered config platforms and provider ownership.
├── token  # Manage generic runtime token profiles.
│   ├── status <SERVICE> [PROFILE] [--format OUTPUT-FORMAT]  # Show safe runtime token metadata for SERVICE/PROFILE.
│   ├── refresh <SERVICE> [PROFILE] [--format OUTPUT-FORMAT]  # Refresh SERVICE/PROFILE through a registered service refresh provider.
│   ├── import <SERVICE> [PROFILE] [--stdin] [--file VALUE-FILE] [--token-type TOKEN-TYPE] [--summary SUMMARY] [--expires-at EXPIRES-AT] [--format OUTPUT-FORMAT]  # Explicitly import externally refreshed runtime token JSON.
│   ├── list [SERVICE] [--format OUTPUT-FORMAT]  # List runtime token profiles grouped by service.
│   └── clear <SERVICE> [PROFILE] [--execute] [--format OUTPUT-FORMAT]  # Clear a generic runtime token file for SERVICE/PROFILE.
├── cat [NAME] [--no-mask] [--type CONFIG-TYPES]  # Print active values, or a named typed profile with -t TYPE NAME.
├── get [KEY] [--interactive]  # Get a configuration value from active typed env files.
├── set [KEY-VALUE] [--interactive]  # Set a configuration value in the matching active typed env file.
├── save [NAME] [--type CONFIG-TYPES] [--yes] [--interactive]  # Save current active values as a named profile.
├── delete [NAME] [--type CONFIG-TYPES] [--yes] [--interactive]  # Delete a named profile for one config type.
└── test [--target TARGET] [--interactive]  # Test a registered configuration schema.