iac-code 0.2.0__tar.gz → 0.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {iac_code-0.2.0 → iac_code-0.2.1}/PKG-INFO +7 -1
- {iac_code-0.2.0 → iac_code-0.2.1}/README.md +7 -1
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/__init__.py +1 -1
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/auth.py +62 -23
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/model.py +2 -2
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/config.py +39 -2
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/de/LC_MESSAGES/messages.po +78 -71
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/es/LC_MESSAGES/messages.po +78 -71
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/fr/LC_MESSAGES/messages.po +78 -71
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/ja/LC_MESSAGES/messages.po +78 -71
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/pt/LC_MESSAGES/messages.po +78 -71
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.mo +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/locales/zh/LC_MESSAGES/messages.po +78 -71
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/banner.py +5 -2
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code.egg-info/PKG-INFO +7 -1
- {iac_code-0.2.0 → iac_code-0.2.1}/LICENSE +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/MANIFEST.in +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/pyproject.toml +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/setup.cfg +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/setup.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/agent_card.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/app.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/artifacts.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/client.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/events.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/executor.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/metrics.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/parts.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/persistence.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/push.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/push_queue.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/push_secrets.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/push_worker.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/router.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/signing.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/task_store.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transport.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/base.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/dispatcher.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/grpc.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/grpc_jsonrpc.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/http.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/redis_streams.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/stdio.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/unix.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/transports/websocket.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/a2a/types.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/convert.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/http_sse.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/mcp.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/metrics.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/server.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/session.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/slash_registry.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/state.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/tools.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/types.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/acp/version.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/agent/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/agent/agent_loop.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/agent/agent_tool.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/agent/agent_types.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/agent/message.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/agent/system_prompt.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/cli/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/cli/headless.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/cli/main.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/cli/output_formats.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/clear.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/compact.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/debug.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/effort.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/exit.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/help.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/registry.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/resume.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/commands/tasks.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/i18n/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/memory/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/memory/memory_manager.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/memory/memory_tools.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/anthropic_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/azure_openai_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/base.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/dashscope_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/deepseek_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/gemini_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/kimi_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/lmstudio_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/manager.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/minimax_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/modelscope_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/ollama_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/openai_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/openrouter_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/registry.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/retry.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/siliconflow_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/stream_watchdog.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/thinking.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/volcengine_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/providers/zhipu_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/agent_factory.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/capabilities/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/capabilities/auto_detect.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/capabilities/multimodal.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/cloud_credentials.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/context_manager.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/permissions/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/permissions/loader.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/permissions/pipeline.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/permissions/storage.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/providers/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/providers/aliyun.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/qwenpaw_source.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/session_index.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/session_storage.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/attributes.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/client.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/config.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/constants.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/content_serializer.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/events.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/fallback.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/identity.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/metrics.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/names.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/sanitize.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/sink.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/tracing.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/telemetry/types.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/token_budget.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/services/token_counter.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/SKILL.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/ecs.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/oss.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/rds.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/redis.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/slb.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/references/cloud-products/vpc.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/references/ros-template.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/references/template-parameters.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/references/terraform-template.md +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/iac_aliyun/scripts/tf2ros.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/bundled/simplify.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/discovery.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/frontmatter.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/listing.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/loader.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/processor.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/renderer.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/skill_definition.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/skills/skill_tool.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/state/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/state/app_state.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tasks/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tasks/notification_queue.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tasks/task_state.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tasks/task_tools.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/base.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/bash/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/bash/bash_tool.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/bash/command_parser.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/bash/mode_validation.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/bash/path_validation.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/bash/permissions.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/bash/readonly_commands.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/bash/rule_matching.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/bash/safety_checks.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/aliyun/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/aliyun/aliyun_api.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/aliyun/aliyun_doc_search.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/aliyun/endpoints.yml +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/aliyun/ros_client.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/aliyun/ros_stack.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/aliyun/ros_stack_instances.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/base_api.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/base_stack.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/registry.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/cloud/types.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/edit_file.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/glob.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/grep.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/list_files.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/read_file.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/result_storage.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/tool_executor.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/web_fetch.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/tools/write_file.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/types/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/types/permissions.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/types/skill_source.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/types/stream_events.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/components/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/components/dialog.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/components/divider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/components/fuzzy_picker.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/components/progress_bar.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/components/search_box.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/components/select.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/components/status_icon.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/components/tabs.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/core/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/core/in_place_render.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/core/input_history.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/core/key_event.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/core/prompt_input.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/core/raw_input.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/core/screen.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/dialogs/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/dialogs/global_search.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/dialogs/history_search.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/dialogs/model_picker.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/dialogs/quick_open.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/dialogs/resume_picker.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/keybindings/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/keybindings/manager.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/renderer.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/repl.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/spinner.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/suggestions/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/suggestions/aggregator.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/suggestions/command_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/suggestions/directory_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/suggestions/file_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/suggestions/shell_history_provider.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/suggestions/token_extractor.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/suggestions/types.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/ui/transcript_view.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/background_housekeeping.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/cleanup.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/image/__init__.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/image/clipboard.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/image/format_detect.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/image/pasted_content.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/image/processor.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/image/resizer.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/image/store.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/json_utils.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/log.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/project_paths.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code/utils/tool_input_parser.py +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code.egg-info/SOURCES.txt +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code.egg-info/dependency_links.txt +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code.egg-info/entry_points.txt +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code.egg-info/requires.txt +0 -0
- {iac_code-0.2.0 → iac_code-0.2.1}/src/iac_code.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iac_code
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Your AI-powered Infrastructure as Code assistant
|
|
5
5
|
Classifier: Programming Language :: Python :: 3
|
|
6
6
|
Classifier: Programming Language :: Python :: 3.10
|
|
@@ -65,3 +65,9 @@ Reading from stdin is also supported:
|
|
|
65
65
|
```bash
|
|
66
66
|
echo "Create an OSS Bucket" | iac-code --prompt -
|
|
67
67
|
```
|
|
68
|
+
|
|
69
|
+
## Contact Us
|
|
70
|
+
|
|
71
|
+
| [DingTalk](https://qr.dingtalk.com/action/joingroup?code=v1,k1,ubm/77U7qRh/STFZUNBP26X4PNg2z6+uhiPcLGtDNfU=&_dt_no_comment=1&origin=11) | [Discord](https://discord.gg/qECFuFBwF) |
|
|
72
|
+
| :----------------------------------------------------------: | :----------------------------------------------------------: |
|
|
73
|
+
| [<img src="website/static/img/qrcode-dingtalk.jpg" width="120" height="120" alt="DingTalk">](https://qr.dingtalk.com/action/joingroup?code=v1,k1,ubm/77U7qRh/STFZUNBP26X4PNg2z6+uhiPcLGtDNfU=&_dt_no_comment=1&origin=11) | [<img src="website/static/img/qrcode-discord.jpg" width="120" height="120" alt="Discord">](https://discord.gg/qECFuFBwF) |
|
|
@@ -45,4 +45,10 @@ Reading from stdin is also supported:
|
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
47
|
echo "Create an OSS Bucket" | iac-code --prompt -
|
|
48
|
-
```
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Contact Us
|
|
51
|
+
|
|
52
|
+
| [DingTalk](https://qr.dingtalk.com/action/joingroup?code=v1,k1,ubm/77U7qRh/STFZUNBP26X4PNg2z6+uhiPcLGtDNfU=&_dt_no_comment=1&origin=11) | [Discord](https://discord.gg/qECFuFBwF) |
|
|
53
|
+
| :----------------------------------------------------------: | :----------------------------------------------------------: |
|
|
54
|
+
| [<img src="website/static/img/qrcode-dingtalk.jpg" width="120" height="120" alt="DingTalk">](https://qr.dingtalk.com/action/joingroup?code=v1,k1,ubm/77U7qRh/STFZUNBP26X4PNg2z6+uhiPcLGtDNfU=&_dt_no_comment=1&origin=11) | [<img src="website/static/img/qrcode-discord.jpg" width="120" height="120" alt="Discord">](https://discord.gg/qECFuFBwF) |
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
__version__ = "0.2.
|
|
1
|
+
__version__ = "0.2.1"
|
|
2
2
|
__release_date__ = "2026-05-20"
|
|
@@ -14,10 +14,14 @@ if TYPE_CHECKING:
|
|
|
14
14
|
|
|
15
15
|
from iac_code.config import (
|
|
16
16
|
_LEGACY_KEY_NAME_ALIASES,
|
|
17
|
+
PARTNER_SOURCES,
|
|
18
|
+
PartnerSource,
|
|
17
19
|
_load_yaml,
|
|
18
20
|
_save_yaml,
|
|
19
21
|
get_active_provider_key,
|
|
22
|
+
get_available_partner_sources,
|
|
20
23
|
get_credentials_path,
|
|
24
|
+
get_llm_source,
|
|
21
25
|
get_provider_config,
|
|
22
26
|
get_settings_path,
|
|
23
27
|
)
|
|
@@ -595,6 +599,47 @@ def _get_active_key_name() -> str:
|
|
|
595
599
|
return get_active_provider_key() or ""
|
|
596
600
|
|
|
597
601
|
|
|
602
|
+
def _third_party_auth_flow(
|
|
603
|
+
available_partners: list[PartnerSource],
|
|
604
|
+
current_llm_source: str,
|
|
605
|
+
) -> str | None | _BackSentinel:
|
|
606
|
+
"""Second-level selection within the Third-party category."""
|
|
607
|
+
candidates = list(available_partners)
|
|
608
|
+
if any(ps.key == current_llm_source for ps in PARTNER_SOURCES):
|
|
609
|
+
if not any(ps.key == current_llm_source for ps in candidates):
|
|
610
|
+
for ps in PARTNER_SOURCES:
|
|
611
|
+
if ps.key == current_llm_source:
|
|
612
|
+
candidates.append(ps)
|
|
613
|
+
break
|
|
614
|
+
|
|
615
|
+
if len(candidates) == 0:
|
|
616
|
+
return _BACK
|
|
617
|
+
|
|
618
|
+
options: list[str] = []
|
|
619
|
+
default_idx = 0
|
|
620
|
+
for i, ps in enumerate(candidates):
|
|
621
|
+
label = ps.display_name
|
|
622
|
+
if current_llm_source == ps.key:
|
|
623
|
+
label += _(" (current)")
|
|
624
|
+
default_idx = i
|
|
625
|
+
options.append(label)
|
|
626
|
+
|
|
627
|
+
idx = _select(_("Select provider — {group}").format(group=_("Third-party")), options, default_index=default_idx)
|
|
628
|
+
if idx is None:
|
|
629
|
+
return _BACK
|
|
630
|
+
partner = candidates[idx]
|
|
631
|
+
|
|
632
|
+
settings_path = get_settings_path()
|
|
633
|
+
config = _load_yaml(settings_path)
|
|
634
|
+
config.pop("activeProvider", None)
|
|
635
|
+
config["llm_source"] = partner.key
|
|
636
|
+
_save_yaml(settings_path, config)
|
|
637
|
+
return _("{status}: {provider}").format(
|
|
638
|
+
status=_("Configured"),
|
|
639
|
+
provider=partner.display_name,
|
|
640
|
+
)
|
|
641
|
+
|
|
642
|
+
|
|
598
643
|
def _llm_auth_flow(console, store) -> str | None | _BackSentinel:
|
|
599
644
|
"""LLM provider auth flow with two-step vendor group selection."""
|
|
600
645
|
active_key_name = _get_active_key_name()
|
|
@@ -621,49 +666,42 @@ def _llm_auth_flow(console, store) -> str | None | _BackSentinel:
|
|
|
621
666
|
|
|
622
667
|
provider_map: dict[str, LLMProvider] = {str(p["key_name"]): p for p in PROVIDERS}
|
|
623
668
|
|
|
624
|
-
from iac_code.config import PARTNER_SOURCES, get_llm_source
|
|
625
|
-
|
|
626
|
-
num_partner_sources = len(PARTNER_SOURCES)
|
|
627
|
-
|
|
628
669
|
current_llm_source = get_llm_source()
|
|
670
|
+
available_partners = get_available_partner_sources()
|
|
671
|
+
is_current_partner = any(ps.key == current_llm_source for ps in PARTNER_SOURCES)
|
|
672
|
+
show_third_party = len(available_partners) > 0 or is_current_partner
|
|
629
673
|
|
|
630
674
|
while True:
|
|
631
|
-
# Step 1: Select vendor group (partner sources shown at the top)
|
|
632
675
|
group_options: list[str] = []
|
|
633
676
|
group_default_idx = 0
|
|
634
677
|
|
|
635
|
-
|
|
636
|
-
label =
|
|
637
|
-
if
|
|
678
|
+
if show_third_party:
|
|
679
|
+
label = _("Third-party")
|
|
680
|
+
if is_current_partner:
|
|
638
681
|
label += _(" (current)")
|
|
639
|
-
group_default_idx =
|
|
682
|
+
group_default_idx = 0
|
|
640
683
|
group_options.append(label)
|
|
641
684
|
|
|
642
685
|
for i, (group_name, keys) in enumerate(provider_groups):
|
|
643
686
|
label = _(group_name)
|
|
687
|
+
offset = 1 if show_third_party else 0
|
|
644
688
|
if active_key_name in keys:
|
|
645
689
|
label += _(" (current)")
|
|
646
|
-
group_default_idx = i +
|
|
690
|
+
group_default_idx = i + offset
|
|
647
691
|
group_options.append(label)
|
|
648
692
|
|
|
649
693
|
group_idx = _select(_("Select provider"), group_options, default_index=group_default_idx)
|
|
650
694
|
if group_idx is None:
|
|
651
695
|
return _BACK
|
|
652
696
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
config.pop("activeProvider", None)
|
|
659
|
-
config["llm_source"] = partner["key"]
|
|
660
|
-
_save_yaml(settings_path, config)
|
|
661
|
-
return _("{status}: {provider}").format(
|
|
662
|
-
status=_("Configured"),
|
|
663
|
-
provider=partner["display_name"],
|
|
664
|
-
)
|
|
697
|
+
if show_third_party and group_idx == 0:
|
|
698
|
+
result = _third_party_auth_flow(available_partners, current_llm_source)
|
|
699
|
+
if isinstance(result, _BackSentinel):
|
|
700
|
+
continue
|
|
701
|
+
return result
|
|
665
702
|
|
|
666
|
-
|
|
703
|
+
offset = 1 if show_third_party else 0
|
|
704
|
+
group_name, group_keys = provider_groups[group_idx - offset]
|
|
667
705
|
group_providers = [provider_map[k] for k in group_keys if k in provider_map]
|
|
668
706
|
|
|
669
707
|
# Step 2: Select provider within group (skip if only one)
|
|
@@ -755,6 +793,7 @@ def _llm_auth_flow(console, store) -> str | None | _BackSentinel:
|
|
|
755
793
|
|
|
756
794
|
|
|
757
795
|
_GROUP_NAME_MARKERS = [
|
|
796
|
+
_("Third-party"),
|
|
758
797
|
_("Alibaba Cloud"),
|
|
759
798
|
_("ZhiPu AI"),
|
|
760
799
|
_("Kimi"),
|
|
@@ -50,8 +50,8 @@ async def model_command(context: "CommandContext | None" = None, args: list[str]
|
|
|
50
50
|
|
|
51
51
|
display_name = llm_source
|
|
52
52
|
for ps in PARTNER_SOURCES:
|
|
53
|
-
if ps
|
|
54
|
-
display_name = ps
|
|
53
|
+
if ps.key == llm_source:
|
|
54
|
+
display_name = ps.display_name
|
|
55
55
|
break
|
|
56
56
|
return _(
|
|
57
57
|
"Model is managed by '{source}'. To change model, modify it in {source} or switch provider via /auth."
|
|
@@ -9,6 +9,7 @@ expansion supported); when set, every persisted artifact follows.
|
|
|
9
9
|
from __future__ import annotations
|
|
10
10
|
|
|
11
11
|
import os
|
|
12
|
+
from dataclasses import dataclass
|
|
12
13
|
from pathlib import Path
|
|
13
14
|
from typing import Any
|
|
14
15
|
|
|
@@ -179,11 +180,47 @@ def get_llm_source() -> str:
|
|
|
179
180
|
return "local"
|
|
180
181
|
|
|
181
182
|
|
|
182
|
-
|
|
183
|
-
|
|
183
|
+
@dataclass(frozen=True)
|
|
184
|
+
class PartnerSource:
|
|
185
|
+
key: str
|
|
186
|
+
display_name: str
|
|
187
|
+
|
|
188
|
+
def is_available(self) -> bool:
|
|
189
|
+
if self.key == "qwenpaw":
|
|
190
|
+
from iac_code.services.qwenpaw_source import _resolve_secret_dir
|
|
191
|
+
|
|
192
|
+
return _resolve_secret_dir() is not None
|
|
193
|
+
return False
|
|
194
|
+
|
|
195
|
+
def get_provider_display(self) -> str:
|
|
196
|
+
if self.key == "qwenpaw":
|
|
197
|
+
from iac_code.services.qwenpaw_source import load_from_qwenpaw
|
|
198
|
+
|
|
199
|
+
try:
|
|
200
|
+
config = load_from_qwenpaw()
|
|
201
|
+
except Exception:
|
|
202
|
+
return ""
|
|
203
|
+
if config:
|
|
204
|
+
from iac_code.providers.registry import PROVIDER_REGISTRY
|
|
205
|
+
|
|
206
|
+
desc = PROVIDER_REGISTRY.get(config.provider_key)
|
|
207
|
+
if desc:
|
|
208
|
+
from iac_code.i18n import _
|
|
209
|
+
|
|
210
|
+
return _(desc.display_name)
|
|
211
|
+
return config.provider_key
|
|
212
|
+
return ""
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
PARTNER_SOURCES: list[PartnerSource] = [
|
|
216
|
+
PartnerSource(key="qwenpaw", display_name="QwenPaw"),
|
|
184
217
|
]
|
|
185
218
|
|
|
186
219
|
|
|
220
|
+
def get_available_partner_sources() -> list[PartnerSource]:
|
|
221
|
+
return [ps for ps in PARTNER_SOURCES if ps.is_available()]
|
|
222
|
+
|
|
223
|
+
|
|
187
224
|
# ---------------------------------------------------------------------------
|
|
188
225
|
# Path helpers
|
|
189
226
|
# ---------------------------------------------------------------------------
|
|
Binary file
|
|
@@ -6,7 +6,7 @@ msgid ""
|
|
|
6
6
|
msgstr ""
|
|
7
7
|
"Project-Id-Version: iac-code 0.2.0\n"
|
|
8
8
|
"Report-Msgid-Bugs-To: \n"
|
|
9
|
-
"POT-Creation-Date: 2026-05-20
|
|
9
|
+
"POT-Creation-Date: 2026-05-20 15:23+0800\n"
|
|
10
10
|
"PO-Revision-Date: 2026-05-13 00:00+0000\n"
|
|
11
11
|
"Last-Translator: \n"
|
|
12
12
|
"Language: de\n"
|
|
@@ -543,217 +543,224 @@ msgstr "Eine frühere Sitzung fortsetzen"
|
|
|
543
543
|
msgid "[conversation id or search term]"
|
|
544
544
|
msgstr "[Konversations-ID oder Suchbegriff]"
|
|
545
545
|
|
|
546
|
-
#: src/iac_code/commands/auth.py:
|
|
546
|
+
#: src/iac_code/commands/auth.py:249 src/iac_code/commands/auth.py:883
|
|
547
547
|
#: src/iac_code/ui/core/prompt_input.py:505
|
|
548
548
|
msgid "Navigate"
|
|
549
549
|
msgstr "Navigieren"
|
|
550
550
|
|
|
551
|
-
#: src/iac_code/commands/auth.py:
|
|
552
|
-
#: src/iac_code/commands/auth.py:
|
|
553
|
-
#: src/iac_code/commands/auth.py:
|
|
554
|
-
#: src/iac_code/commands/auth.py:
|
|
551
|
+
#: src/iac_code/commands/auth.py:249 src/iac_code/commands/auth.py:371
|
|
552
|
+
#: src/iac_code/commands/auth.py:405 src/iac_code/commands/auth.py:412
|
|
553
|
+
#: src/iac_code/commands/auth.py:436 src/iac_code/commands/auth.py:883
|
|
554
|
+
#: src/iac_code/commands/auth.py:1073 src/iac_code/ui/core/prompt_input.py:505
|
|
555
555
|
msgid "Confirm"
|
|
556
556
|
msgstr "Bestätigen"
|
|
557
557
|
|
|
558
|
-
#: src/iac_code/commands/auth.py:
|
|
559
|
-
#: src/iac_code/commands/auth.py:
|
|
560
|
-
#: src/iac_code/commands/auth.py:
|
|
561
|
-
#: src/iac_code/commands/auth.py:
|
|
562
|
-
#: src/iac_code/commands/auth.py:
|
|
558
|
+
#: src/iac_code/commands/auth.py:249 src/iac_code/commands/auth.py:369
|
|
559
|
+
#: src/iac_code/commands/auth.py:371 src/iac_code/commands/auth.py:405
|
|
560
|
+
#: src/iac_code/commands/auth.py:412 src/iac_code/commands/auth.py:436
|
|
561
|
+
#: src/iac_code/commands/auth.py:883 src/iac_code/commands/auth.py:968
|
|
562
|
+
#: src/iac_code/commands/auth.py:1073
|
|
563
563
|
msgid "Back"
|
|
564
564
|
msgstr "Zurück"
|
|
565
565
|
|
|
566
|
-
#: src/iac_code/commands/auth.py:
|
|
566
|
+
#: src/iac_code/commands/auth.py:369
|
|
567
567
|
msgid "Keep"
|
|
568
568
|
msgstr "Behalten"
|
|
569
569
|
|
|
570
|
-
#: src/iac_code/commands/auth.py:
|
|
570
|
+
#: src/iac_code/commands/auth.py:369
|
|
571
571
|
msgid "Re-enter"
|
|
572
572
|
msgstr "Erneut eingeben"
|
|
573
573
|
|
|
574
|
-
#: src/iac_code/commands/auth.py:
|
|
575
|
-
#: src/iac_code/commands/auth.py:
|
|
574
|
+
#: src/iac_code/commands/auth.py:511 src/iac_code/commands/auth.py:623
|
|
575
|
+
#: src/iac_code/commands/auth.py:681 src/iac_code/commands/auth.py:689
|
|
576
|
+
#: src/iac_code/commands/auth.py:716
|
|
576
577
|
msgid " (current)"
|
|
577
578
|
msgstr " (aktuell)"
|
|
578
579
|
|
|
579
|
-
#: src/iac_code/commands/auth.py:
|
|
580
|
+
#: src/iac_code/commands/auth.py:514
|
|
580
581
|
msgid "Custom model..."
|
|
581
582
|
msgstr "Benutzerdefiniertes Modell …"
|
|
582
583
|
|
|
583
|
-
#: src/iac_code/commands/auth.py:
|
|
584
|
+
#: src/iac_code/commands/auth.py:517
|
|
584
585
|
#, python-brace-format
|
|
585
586
|
msgid "Select model for {provider}"
|
|
586
587
|
msgstr "Modell für {provider} auswählen"
|
|
587
588
|
|
|
588
|
-
#: src/iac_code/commands/auth.py:
|
|
589
|
+
#: src/iac_code/commands/auth.py:519
|
|
589
590
|
msgid "Select model"
|
|
590
591
|
msgstr "Modell auswählen"
|
|
591
592
|
|
|
592
|
-
#: src/iac_code/commands/auth.py:
|
|
593
|
+
#: src/iac_code/commands/auth.py:527
|
|
593
594
|
msgid "Enter custom model name: "
|
|
594
595
|
msgstr "Benutzerdefinierten Modellnamen eingeben: "
|
|
595
596
|
|
|
596
|
-
#: src/iac_code/commands/auth.py:
|
|
597
|
+
#: src/iac_code/commands/auth.py:553
|
|
597
598
|
msgid "Error: console not available"
|
|
598
599
|
msgstr "Fehler: Konsole nicht verfügbar"
|
|
599
600
|
|
|
600
|
-
#: src/iac_code/commands/auth.py:
|
|
601
|
+
#: src/iac_code/commands/auth.py:580
|
|
601
602
|
msgid "Configure LLM Provider"
|
|
602
603
|
msgstr "LLM-Anbieter konfigurieren"
|
|
603
604
|
|
|
604
|
-
#: src/iac_code/commands/auth.py:
|
|
605
|
+
#: src/iac_code/commands/auth.py:581
|
|
605
606
|
msgid "Configure IaC Cloud Service"
|
|
606
607
|
msgstr "IaC-Cloud-Dienst konfigurieren"
|
|
607
608
|
|
|
608
|
-
#: src/iac_code/commands/auth.py:
|
|
609
|
+
#: src/iac_code/commands/auth.py:583
|
|
609
610
|
msgid "Select configuration type"
|
|
610
611
|
msgstr "Konfigurationstyp auswählen"
|
|
611
612
|
|
|
612
|
-
#: src/iac_code/commands/auth.py:
|
|
613
|
-
#: src/iac_code/commands/auth.py:
|
|
614
|
-
#: src/iac_code/commands/auth.py:
|
|
613
|
+
#: src/iac_code/commands/auth.py:585 src/iac_code/commands/auth.py:741
|
|
614
|
+
#: src/iac_code/commands/auth.py:757 src/iac_code/commands/auth.py:836
|
|
615
|
+
#: src/iac_code/commands/auth.py:1009 src/iac_code/commands/auth.py:1050
|
|
615
616
|
msgid "Auth cancelled"
|
|
616
617
|
msgstr "Authentifizierung abgebrochen"
|
|
617
618
|
|
|
618
|
-
#: src/iac_code/commands/auth.py:
|
|
619
|
-
|
|
620
|
-
|
|
619
|
+
#: src/iac_code/commands/auth.py:627 src/iac_code/commands/auth.py:721
|
|
620
|
+
#: src/iac_code/commands/auth.py:811
|
|
621
|
+
#, python-brace-format
|
|
622
|
+
msgid "Select provider — {group}"
|
|
623
|
+
msgstr "Anbieter auswählen — {group}"
|
|
621
624
|
|
|
622
|
-
#: src/iac_code/commands/auth.py:
|
|
625
|
+
#: src/iac_code/commands/auth.py:627 src/iac_code/commands/auth.py:679
|
|
626
|
+
#: src/iac_code/commands/auth.py:796
|
|
627
|
+
msgid "Third-party"
|
|
628
|
+
msgstr "Drittanbieter"
|
|
629
|
+
|
|
630
|
+
#: src/iac_code/commands/auth.py:637
|
|
623
631
|
#, python-brace-format
|
|
624
632
|
msgid "{status}: {provider}"
|
|
625
633
|
msgstr "{status}: {provider}"
|
|
626
634
|
|
|
627
|
-
#: src/iac_code/commands/auth.py:
|
|
635
|
+
#: src/iac_code/commands/auth.py:638 src/iac_code/commands/auth.py:789
|
|
628
636
|
msgid "Configured"
|
|
629
637
|
msgstr "Konfiguriert"
|
|
630
638
|
|
|
631
|
-
#: src/iac_code/commands/auth.py:
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
msgstr "Anbieter auswählen — {group}"
|
|
639
|
+
#: src/iac_code/commands/auth.py:693
|
|
640
|
+
msgid "Select provider"
|
|
641
|
+
msgstr "Anbieter auswählen"
|
|
635
642
|
|
|
636
|
-
#: src/iac_code/commands/auth.py:
|
|
643
|
+
#: src/iac_code/commands/auth.py:734
|
|
637
644
|
#, python-brace-format
|
|
638
645
|
msgid "Configure {provider}"
|
|
639
646
|
msgstr "{provider} konfigurieren"
|
|
640
647
|
|
|
641
|
-
#: src/iac_code/commands/auth.py:
|
|
648
|
+
#: src/iac_code/commands/auth.py:750
|
|
642
649
|
#, python-brace-format
|
|
643
650
|
msgid "Enter API key for {provider}"
|
|
644
651
|
msgstr "API-Key für {provider} eingeben"
|
|
645
652
|
|
|
646
|
-
#: src/iac_code/commands/auth.py:
|
|
653
|
+
#: src/iac_code/commands/auth.py:788
|
|
647
654
|
#, python-brace-format
|
|
648
655
|
msgid "{status}: {provider} / {model}"
|
|
649
656
|
msgstr "{status}: {provider} / {model}"
|
|
650
657
|
|
|
651
|
-
#: src/iac_code/commands/auth.py:
|
|
658
|
+
#: src/iac_code/commands/auth.py:797 src/iac_code/commands/auth.py:818
|
|
652
659
|
msgid "Alibaba Cloud"
|
|
653
660
|
msgstr "Alibaba Cloud"
|
|
654
661
|
|
|
655
|
-
#: src/iac_code/commands/auth.py:
|
|
662
|
+
#: src/iac_code/commands/auth.py:798 src/iac_code/providers/registry.py:423
|
|
656
663
|
msgid "ZhiPu AI"
|
|
657
664
|
msgstr "ZhiPu AI"
|
|
658
665
|
|
|
659
|
-
#: src/iac_code/commands/auth.py:
|
|
666
|
+
#: src/iac_code/commands/auth.py:799
|
|
660
667
|
msgid "Kimi"
|
|
661
668
|
msgstr "Kimi"
|
|
662
669
|
|
|
663
|
-
#: src/iac_code/commands/auth.py:
|
|
670
|
+
#: src/iac_code/commands/auth.py:800
|
|
664
671
|
msgid "MiniMax"
|
|
665
672
|
msgstr "MiniMax"
|
|
666
673
|
|
|
667
|
-
#: src/iac_code/commands/auth.py:
|
|
674
|
+
#: src/iac_code/commands/auth.py:801 src/iac_code/providers/registry.py:425
|
|
668
675
|
msgid "Volcengine"
|
|
669
676
|
msgstr "Volcengine"
|
|
670
677
|
|
|
671
|
-
#: src/iac_code/commands/auth.py:
|
|
678
|
+
#: src/iac_code/commands/auth.py:802
|
|
672
679
|
msgid "SiliconFlow"
|
|
673
680
|
msgstr "SiliconFlow"
|
|
674
681
|
|
|
675
|
-
#: src/iac_code/commands/auth.py:
|
|
682
|
+
#: src/iac_code/commands/auth.py:803 src/iac_code/providers/registry.py:416
|
|
676
683
|
msgid "DeepSeek"
|
|
677
684
|
msgstr "DeepSeek"
|
|
678
685
|
|
|
679
|
-
#: src/iac_code/commands/auth.py:
|
|
686
|
+
#: src/iac_code/commands/auth.py:804 src/iac_code/providers/registry.py:414
|
|
680
687
|
msgid "OpenAI"
|
|
681
688
|
msgstr "OpenAI"
|
|
682
689
|
|
|
683
|
-
#: src/iac_code/commands/auth.py:
|
|
690
|
+
#: src/iac_code/commands/auth.py:805 src/iac_code/providers/registry.py:415
|
|
684
691
|
msgid "Anthropic"
|
|
685
692
|
msgstr "Anthropic"
|
|
686
693
|
|
|
687
|
-
#: src/iac_code/commands/auth.py:
|
|
694
|
+
#: src/iac_code/commands/auth.py:806 src/iac_code/providers/registry.py:418
|
|
688
695
|
msgid "Google Gemini"
|
|
689
696
|
msgstr "Google Gemini"
|
|
690
697
|
|
|
691
|
-
#: src/iac_code/commands/auth.py:
|
|
698
|
+
#: src/iac_code/commands/auth.py:807 src/iac_code/providers/registry.py:431
|
|
692
699
|
msgid "Azure OpenAI"
|
|
693
700
|
msgstr "Azure OpenAI"
|
|
694
701
|
|
|
695
|
-
#: src/iac_code/commands/auth.py:
|
|
702
|
+
#: src/iac_code/commands/auth.py:808 src/iac_code/providers/registry.py:430
|
|
696
703
|
msgid "OpenRouter"
|
|
697
704
|
msgstr "OpenRouter"
|
|
698
705
|
|
|
699
|
-
#: src/iac_code/commands/auth.py:
|
|
706
|
+
#: src/iac_code/commands/auth.py:809
|
|
700
707
|
msgid "Local"
|
|
701
708
|
msgstr "Lokal"
|
|
702
709
|
|
|
703
|
-
#: src/iac_code/commands/auth.py:
|
|
710
|
+
#: src/iac_code/commands/auth.py:810
|
|
704
711
|
msgid "Compatible"
|
|
705
712
|
msgstr "Kompatibel"
|
|
706
713
|
|
|
707
|
-
#: src/iac_code/commands/auth.py:
|
|
714
|
+
#: src/iac_code/commands/auth.py:827
|
|
708
715
|
msgid "Select Cloud Provider"
|
|
709
716
|
msgstr "Cloud-Anbieter auswählen"
|
|
710
717
|
|
|
711
|
-
#: src/iac_code/commands/auth.py:
|
|
718
|
+
#: src/iac_code/commands/auth.py:843
|
|
712
719
|
msgid "Credential"
|
|
713
720
|
msgstr "Anmeldedaten"
|
|
714
721
|
|
|
715
|
-
#: src/iac_code/commands/auth.py:
|
|
716
|
-
#: src/iac_code/commands/auth.py:
|
|
722
|
+
#: src/iac_code/commands/auth.py:844 src/iac_code/commands/auth.py:941
|
|
723
|
+
#: src/iac_code/commands/auth.py:1046 src/iac_code/ui/renderer.py:418
|
|
717
724
|
msgid "Region"
|
|
718
725
|
msgstr "Region"
|
|
719
726
|
|
|
720
|
-
#: src/iac_code/commands/auth.py:
|
|
727
|
+
#: src/iac_code/commands/auth.py:846
|
|
721
728
|
msgid "Configure Alibaba Cloud"
|
|
722
729
|
msgstr "Alibaba Cloud konfigurieren"
|
|
723
730
|
|
|
724
|
-
#: src/iac_code/commands/auth.py:
|
|
731
|
+
#: src/iac_code/commands/auth.py:929
|
|
725
732
|
msgid "Current configuration"
|
|
726
733
|
msgstr "Aktuelle Konfiguration"
|
|
727
734
|
|
|
728
|
-
#: src/iac_code/commands/auth.py:
|
|
735
|
+
#: src/iac_code/commands/auth.py:931
|
|
729
736
|
msgid "Mode"
|
|
730
737
|
msgstr "Modus"
|
|
731
738
|
|
|
732
|
-
#: src/iac_code/commands/auth.py:
|
|
739
|
+
#: src/iac_code/commands/auth.py:938
|
|
733
740
|
msgid "(not set)"
|
|
734
741
|
msgstr "(nicht gesetzt)"
|
|
735
742
|
|
|
736
|
-
#: src/iac_code/commands/auth.py:
|
|
743
|
+
#: src/iac_code/commands/auth.py:955
|
|
737
744
|
msgid "Configure Alibaba Cloud credentials"
|
|
738
745
|
msgstr "Alibaba Cloud-Anmeldedaten konfigurieren"
|
|
739
746
|
|
|
740
|
-
#: src/iac_code/commands/auth.py:
|
|
747
|
+
#: src/iac_code/commands/auth.py:968
|
|
741
748
|
msgid "Reconfigure credential"
|
|
742
749
|
msgstr "Anmeldedaten neu konfigurieren"
|
|
743
750
|
|
|
744
|
-
#: src/iac_code/commands/auth.py:
|
|
751
|
+
#: src/iac_code/commands/auth.py:981
|
|
745
752
|
msgid "Select credential type"
|
|
746
753
|
msgstr "Anmeldedatentyp auswählen"
|
|
747
754
|
|
|
748
|
-
#: src/iac_code/commands/auth.py:
|
|
755
|
+
#: src/iac_code/commands/auth.py:1031
|
|
749
756
|
msgid "Configured: Alibaba Cloud credentials saved to ~/.iac-code"
|
|
750
757
|
msgstr "Konfiguriert: Alibaba Cloud-Anmeldedaten unter ~/.iac-code gespeichert"
|
|
751
758
|
|
|
752
|
-
#: src/iac_code/commands/auth.py:
|
|
759
|
+
#: src/iac_code/commands/auth.py:1038
|
|
753
760
|
msgid "Configure Alibaba Cloud region"
|
|
754
761
|
msgstr "Alibaba Cloud-Region konfigurieren"
|
|
755
762
|
|
|
756
|
-
#: src/iac_code/commands/auth.py:
|
|
763
|
+
#: src/iac_code/commands/auth.py:1064
|
|
757
764
|
msgid "Configured: Alibaba Cloud region saved to ~/.iac-code"
|
|
758
765
|
msgstr "Konfiguriert: Alibaba Cloud-Region unter ~/.iac-code gespeichert"
|
|
759
766
|
|
|
@@ -1585,23 +1592,23 @@ msgstr "ROS Stack"
|
|
|
1585
1592
|
msgid "CloudStackInstances"
|
|
1586
1593
|
msgstr "CloudStackInstances"
|
|
1587
1594
|
|
|
1588
|
-
#: src/iac_code/ui/banner.py:
|
|
1595
|
+
#: src/iac_code/ui/banner.py:71
|
|
1589
1596
|
msgid "Your AI-powered Infrastructure as Code assistant"
|
|
1590
1597
|
msgstr "Ihr KI-gestützter Infrastructure-as-Code-Assistent"
|
|
1591
1598
|
|
|
1592
|
-
#: src/iac_code/ui/banner.py:
|
|
1599
|
+
#: src/iac_code/ui/banner.py:95
|
|
1593
1600
|
msgid "Welcome back"
|
|
1594
1601
|
msgstr "Willkommen zurück"
|
|
1595
1602
|
|
|
1596
|
-
#: src/iac_code/ui/banner.py:
|
|
1603
|
+
#: src/iac_code/ui/banner.py:101
|
|
1597
1604
|
msgid "Session"
|
|
1598
1605
|
msgstr "Sitzung"
|
|
1599
1606
|
|
|
1600
|
-
#: src/iac_code/ui/banner.py:
|
|
1607
|
+
#: src/iac_code/ui/banner.py:111
|
|
1601
1608
|
msgid "Debug mode"
|
|
1602
1609
|
msgstr "Debug-Modus"
|
|
1603
1610
|
|
|
1604
|
-
#: src/iac_code/ui/banner.py:
|
|
1611
|
+
#: src/iac_code/ui/banner.py:112
|
|
1605
1612
|
msgid "Log file"
|
|
1606
1613
|
msgstr "Protokolldatei"
|
|
1607
1614
|
|