- {versionLifecycleProposal.cadence_matrix.slice(0, 4).map(cadence => (
+ {versionLifecycleProposal.cadence_matrix.slice(0, 5).map(cadence => (
+ {!!versionLifecycleProposal.periodic_schedule_bindings?.length && (
+
{t('versionLifecycleProposal.sections.telegram')}
diff --git a/apps/web/src/lib/api-client.ts b/apps/web/src/lib/api-client.ts
index e91c5e8db..2b90f84f5 100644
--- a/apps/web/src/lib/api-client.ts
+++ b/apps/web/src/lib/api-client.ts
@@ -3996,6 +3996,14 @@ export interface AiAgentVersionLifecycleUpdateProposalSnapshot {
summary: string
gate: string
}>
+ periodic_schedule_bindings?: Array<{
+ binding_id: string
+ workflow: string
+ cron: string
+ local_time: string
+ purpose: string
+ runtime_write_allowed: false
+ }>
}
export interface HostRunawayAiopsLoopReadinessSnapshot {
diff --git a/docs/ai/agent-market-watch-sources.v1.json b/docs/ai/agent-market-watch-sources.v1.json
index 8180dfd3f..ccff74684 100644
--- a/docs/ai/agent-market-watch-sources.v1.json
+++ b/docs/ai/agent-market-watch-sources.v1.json
@@ -1,11 +1,12 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"schema_version": "agent_market_watch_sources_v1",
- "updated_at": "2026-06-26",
+ "updated_at": "2026-07-10",
"purpose": "AI Agent 市場定期評估的 primary-source watchlist;來源變更只會觸發重新評估,不代表取代或整合已批准。",
"cadence": {
"weekly_market_watch": "每週一 09:00 Asia/Taipei 產生只讀市場觀測報告與整合 / 探索 review 摘要。",
"monthly_integration_review": "經 operator review 後,提交 market watch、integration review 與 discovery intake 的 reviewed baseline。",
+ "weekly_version_lifecycle_update_review": "每週二 09:00 Asia/Taipei 比對目前 AI Agent / SDK 版本 baseline,產生 no-write 更新提案。",
"trigger_on_major_version": true
},
"policy": {
@@ -14,7 +15,9 @@
"paid_provider_requires_approval": true,
"new_dependency_requires_approval": true,
"raw_external_pages_committed": false,
- "official_or_primary_sources_only": true
+ "official_or_primary_sources_only": true,
+ "github_sources_allowed": false,
+ "github_freeze_policy": "GitHub / gh / GitHub API / GitHub search disabled; use vendor docs, PyPI, npm, and committed offline metadata only."
},
"candidates": [
{
@@ -47,13 +50,13 @@
"source_id": "openai_agents_python_pypi",
"type": "pypi",
"url": "https://pypi.org/pypi/openai-agents/json",
- "reference_version": null
+ "reference_version": "0.18.1"
},
{
"source_id": "openai_agents_typescript_npm",
"type": "npm",
"url": "https://registry.npmjs.org/@openai%2Fagents",
- "reference_version": null
+ "reference_version": "0.13.1"
}
]
},
@@ -75,13 +78,7 @@
"source_id": "langgraph_pypi",
"type": "pypi",
"url": "https://pypi.org/pypi/langgraph/json",
- "reference_version": null
- },
- {
- "source_id": "langgraph_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/langchain-ai/langgraph/releases/latest",
- "reference_version": null
+ "reference_version": "1.2.9"
}
]
},
@@ -103,7 +100,7 @@
"source_id": "nvidia_nemo_agent_toolkit_pypi",
"type": "pypi",
"url": "https://pypi.org/pypi/nvidia-nat/json",
- "reference_version": null
+ "reference_version": "1.8.0"
},
{
"source_id": "nvidia_nemotron_developer_page",
@@ -171,13 +168,7 @@
"source_id": "google_adk_pypi",
"type": "pypi",
"url": "https://pypi.org/pypi/google-adk/json",
- "reference_version": null
- },
- {
- "source_id": "google_adk_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/google/adk-python/releases/latest",
- "reference_version": null
+ "reference_version": "2.4.0"
}
]
},
@@ -196,9 +187,9 @@
"reference_version": null
},
{
- "source_id": "microsoft_agent_framework_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/microsoft/agent-framework/releases/latest",
+ "source_id": "microsoft_autogen_migration_docs",
+ "type": "docs",
+ "url": "https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen/",
"reference_version": null
}
]
@@ -221,13 +212,125 @@
"source_id": "crewai_pypi",
"type": "pypi",
"url": "https://pypi.org/pypi/crewai/json",
+ "reference_version": "1.15.2"
+ }
+ ]
+ },
+ {
+ "candidate_id": "llamaindex_agent_workflows",
+ "display_name": "LlamaIndex AgentWorkflow / Workflows",
+ "evaluation_priority": "can_test",
+ "recommended_role": "RAG / Document Agent Workflow Orchestrator",
+ "requires_cost_approval": false,
+ "requires_dependency_approval": true,
+ "sources": [
+ {
+ "source_id": "llamaindex_agent_workflows_docs",
+ "type": "docs",
+ "url": "https://developers.llamaindex.ai/python/examples/agent/agent_workflow_basic/",
"reference_version": null
},
{
- "source_id": "crewai_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/crewAIInc/crewAI/releases/latest",
+ "source_id": "llamaindex_workflows_docs",
+ "type": "docs",
+ "url": "https://developers.llamaindex.ai/python/llamaagents/workflows/",
"reference_version": null
+ },
+ {
+ "source_id": "llama_index_core_pypi",
+ "type": "pypi",
+ "url": "https://pypi.org/pypi/llama-index-core/json",
+ "reference_version": "0.14.23"
+ }
+ ]
+ },
+ {
+ "candidate_id": "pydantic_ai_agents",
+ "display_name": "Pydantic AI Agents",
+ "evaluation_priority": "can_test",
+ "recommended_role": "Type-Safe Tool Agent / Structured Output Runtime",
+ "requires_cost_approval": true,
+ "requires_dependency_approval": true,
+ "sources": [
+ {
+ "source_id": "pydantic_ai_overview_docs",
+ "type": "docs",
+ "url": "https://pydantic.dev/docs/ai/overview/",
+ "reference_version": null
+ },
+ {
+ "source_id": "pydantic_ai_agents_docs",
+ "type": "docs",
+ "url": "https://pydantic.dev/docs/ai/core-concepts/agent/",
+ "reference_version": null
+ },
+ {
+ "source_id": "pydantic_ai_pypi",
+ "type": "pypi",
+ "url": "https://pypi.org/pypi/pydantic-ai/json",
+ "reference_version": "2.8.0"
+ }
+ ]
+ },
+ {
+ "candidate_id": "aws_strands_agents",
+ "display_name": "AWS Strands Agents",
+ "evaluation_priority": "can_test",
+ "recommended_role": "AWS-Native Model-First Agent SDK",
+ "requires_cost_approval": true,
+ "requires_dependency_approval": true,
+ "sources": [
+ {
+ "source_id": "strands_agents_docs",
+ "type": "docs",
+ "url": "https://strandsagents.com/docs/user-guide/quickstart/overview/",
+ "reference_version": null
+ },
+ {
+ "source_id": "aws_strands_prescriptive_guidance",
+ "type": "docs",
+ "url": "https://docs.aws.amazon.com/prescriptive-guidance/latest/agentic-ai-frameworks/strands-agents.html",
+ "reference_version": null
+ },
+ {
+ "source_id": "strands_agents_pypi",
+ "type": "pypi",
+ "url": "https://pypi.org/pypi/strands-agents/json",
+ "reference_version": "1.46.0"
+ },
+ {
+ "source_id": "strands_agents_typescript_npm",
+ "type": "npm",
+ "url": "https://registry.npmjs.org/@strands-agents%2Fsdk",
+ "reference_version": "1.8.0"
+ }
+ ]
+ },
+ {
+ "candidate_id": "autogen_legacy_migration",
+ "display_name": "AutoGen Legacy Migration",
+ "evaluation_priority": "watch_only",
+ "recommended_role": "Legacy Multi-Agent Framework Migration Signal",
+ "requires_cost_approval": false,
+ "requires_dependency_approval": true,
+ "sources": [
+ {
+ "source_id": "autogen_docs",
+ "type": "docs",
+ "url": "https://microsoft.github.io/autogen/stable//index.html",
+ "reference_version": null
+ },
+ {
+ "source_id": "autogen_to_agent_framework_migration_docs",
+ "type": "docs",
+ "url": "https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen/",
+ "reference_version": null
+ },
+ {
+ "source_id": "autogen_agentchat_pypi",
+ "type": "pypi",
+ "url": "https://pypi.org/pypi/autogen-agentchat/json",
+ "reference_version": "0.7.5"
}
]
},
@@ -244,12 +347,6 @@
"type": "docs",
"url": "https://hermes-agent.nousresearch.com",
"reference_version": null
- },
- {
- "source_id": "hermes_agent_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/NousResearch/hermes-agent/releases/latest",
- "reference_version": null
}
]
},
@@ -266,12 +363,6 @@
"type": "docs",
"url": "https://microsoft.github.io/agent-governance-toolkit/",
"reference_version": null
- },
- {
- "source_id": "microsoft_agent_governance_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/microsoft/agent-governance-toolkit/releases/latest",
- "reference_version": null
}
]
},
@@ -288,12 +379,6 @@
"type": "docs",
"url": "https://thclaws.ai",
"reference_version": null
- },
- {
- "source_id": "thclaws_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/thClaws/thClaws/releases/latest",
- "reference_version": null
}
]
},
@@ -310,12 +395,6 @@
"type": "docs",
"url": "https://vstorm-co.github.io/pydantic-deepagents/",
"reference_version": null
- },
- {
- "source_id": "pydantic_deepagents_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/vstorm-co/pydantic-deepagents/releases/latest",
- "reference_version": null
}
]
},
@@ -332,12 +411,6 @@
"type": "docs",
"url": "https://agentos.sh",
"reference_version": null
- },
- {
- "source_id": "agentos_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/framerslab/agentos/releases/latest",
- "reference_version": null
}
]
},
@@ -354,28 +427,9 @@
"type": "docs",
"url": "https://bernstein.run",
"reference_version": null
- },
- {
- "source_id": "bernstein_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/sipyourdrink-ltd/bernstein/releases/latest",
- "reference_version": null
}
]
}
],
- "discovery_sources": [
- {
- "source_id": "github_ai_agent_topic",
- "type": "github_search",
- "url": "https://api.github.com/search/repositories?q=topic:ai-agent+stars:%3E500&sort=updated&order=desc",
- "purpose": "Find new high-signal open-source AI Agent frameworks. Any finding requires manual source classification before integration."
- },
- {
- "source_id": "github_agent_framework_topic",
- "type": "github_search",
- "url": "https://api.github.com/search/repositories?q=topic:agent-framework+stars:%3E300&sort=updated&order=desc",
- "purpose": "Find new agent framework candidates. Any finding requires official-source verification before being added as a candidate."
- }
- ]
+ "discovery_sources": []
}
diff --git a/docs/ai/agent-replacement-candidates.v1.json b/docs/ai/agent-replacement-candidates.v1.json
index c8281ecab..287fe9eca 100644
--- a/docs/ai/agent-replacement-candidates.v1.json
+++ b/docs/ai/agent-replacement-candidates.v1.json
@@ -220,6 +220,46 @@
"evaluation_priority": "secondary",
"required_stage": "offline_replay"
},
+ {
+ "candidate_id": "llamaindex_agent_workflows",
+ "display_name": "LlamaIndex AgentWorkflow / Workflows",
+ "official_url": "https://developers.llamaindex.ai/python/examples/agent/agent_workflow_basic/",
+ "role": "rag_document_agent_workflow_orchestrator",
+ "evaluation_priority": "can_test",
+ "required_stage": "offline_replay",
+ "current_decision": "new_mainstream_candidate_registered_requires_no_sdk_no_api_adapter_then_offline_replay",
+ "sdk_dependency": "llama_index_core_package_not_installed"
+ },
+ {
+ "candidate_id": "pydantic_ai_agents",
+ "display_name": "Pydantic AI Agents",
+ "official_url": "https://pydantic.dev/docs/ai/overview/",
+ "role": "type_safe_tool_agent_structured_output_runtime",
+ "evaluation_priority": "can_test",
+ "required_stage": "offline_replay",
+ "current_decision": "new_mainstream_candidate_registered_requires_no_sdk_no_api_adapter_then_offline_replay",
+ "sdk_dependency": "pydantic_ai_package_not_installed"
+ },
+ {
+ "candidate_id": "aws_strands_agents",
+ "display_name": "AWS Strands Agents",
+ "official_url": "https://strandsagents.com/docs/user-guide/quickstart/overview/",
+ "role": "aws_native_model_first_agent_sdk",
+ "evaluation_priority": "can_test",
+ "required_stage": "offline_replay",
+ "current_decision": "new_mainstream_candidate_registered_requires_cost_provider_and_no_sdk_no_api_adapter_review",
+ "sdk_dependency": "strands_agents_package_not_installed"
+ },
+ {
+ "candidate_id": "autogen_legacy_migration",
+ "display_name": "AutoGen Legacy Migration",
+ "official_url": "https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen/",
+ "role": "legacy_multi_agent_framework_migration_signal",
+ "evaluation_priority": "watch_only",
+ "required_stage": "watch_only_primary_source_monitoring",
+ "current_decision": "watch_only_migration_signal_microsoft_agent_framework_is_successor_path",
+ "latest_discovery_classification": "docs/evaluations/agent_market_discovery_classification_2026-06-04.json"
+ },
{
"candidate_id": "hermes_agent_personal_platform",
"display_name": "NousResearch Hermes Agent",
diff --git a/docs/ai/ai-technology-watch-sources.v1.json b/docs/ai/ai-technology-watch-sources.v1.json
index 87ad5f9eb..a146ece10 100644
--- a/docs/ai/ai-technology-watch-sources.v1.json
+++ b/docs/ai/ai-technology-watch-sources.v1.json
@@ -1,6 +1,6 @@
{
"schema_version": "ai_technology_watch_sources_v1",
- "updated_at": "2026-06-26",
+ "updated_at": "2026-07-10",
"cadence": {
"near_real_time_watch": "每 6 小時執行一次只讀 primary-source 檢查,偵測主流 AI 技術版本、文件與 release 變更。",
"daily_triage": "每日彙整變更技術,依商業適用性、依賴風險、成本風險與資安風險分組。",
@@ -16,7 +16,9 @@
"workflow_modification_approved": false,
"telegram_send_approved": false,
"model_provider_switch_approved": false,
- "host_write_approved": false
+ "host_write_approved": false,
+ "github_sources_allowed": false,
+ "github_freeze_policy": "GitHub / gh / GitHub API / GitHub search disabled; use vendor docs, PyPI, npm, and committed offline metadata only."
},
"coverage_contract": {
"scope": [
@@ -54,13 +56,13 @@
"source_id": "openai_agents_python_pypi",
"type": "pypi",
"url": "https://pypi.org/pypi/openai-agents/json",
- "reference_version": "0.17.7"
+ "reference_version": "0.18.1"
},
{
"source_id": "openai_agents_typescript_npm",
"type": "npm",
"url": "https://registry.npmjs.org/%40openai%2Fagents",
- "reference_version": "0.12.0"
+ "reference_version": "0.13.1"
},
{
"source_id": "openai_agents_docs",
@@ -93,7 +95,8 @@
{
"source_id": "nvidia_nemo_agent_toolkit_pypi",
"type": "pypi",
- "url": "https://pypi.org/pypi/nvidia-nat/json"
+ "url": "https://pypi.org/pypi/nvidia-nat/json",
+ "reference_version": "1.8.0"
},
{
"source_id": "nvidia_nemotron_3_ultra_blog",
@@ -117,13 +120,7 @@
"source_id": "langgraph_pypi",
"type": "pypi",
"url": "https://pypi.org/pypi/langgraph/json",
- "reference_version": "1.2.6"
- },
- {
- "source_id": "langgraph_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/langchain-ai/langgraph/releases/latest",
- "reference_version": "1.2.6"
+ "reference_version": "1.2.9"
},
{
"source_id": "langgraph_docs",
@@ -147,13 +144,7 @@
"source_id": "google_adk_pypi",
"type": "pypi",
"url": "https://pypi.org/pypi/google-adk/json",
- "reference_version": "2.3.0"
- },
- {
- "source_id": "google_adk_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/google/adk-python/releases/latest",
- "reference_version": "v2.3.0"
+ "reference_version": "2.4.0"
},
{
"source_id": "google_adk_docs",
@@ -173,16 +164,15 @@
"requires_dependency_approval": true,
"requires_security_review": true,
"sources": [
- {
- "source_id": "microsoft_agent_framework_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/microsoft/agent-framework/releases/latest",
- "reference_version": "dotnet-1.11.0"
- },
{
"source_id": "microsoft_agent_framework_docs",
"type": "docs",
"url": "https://learn.microsoft.com/en-us/agent-framework/overview/"
+ },
+ {
+ "source_id": "microsoft_autogen_migration_docs",
+ "type": "docs",
+ "url": "https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen/"
}
]
},
@@ -201,7 +191,7 @@
"source_id": "crewai_pypi",
"type": "pypi",
"url": "https://pypi.org/pypi/crewai/json",
- "reference_version": "1.14.7"
+ "reference_version": "1.15.2"
},
{
"source_id": "crewai_docs",
@@ -210,6 +200,128 @@
}
]
},
+ {
+ "candidate_id": "llamaindex_agent_workflows",
+ "display_name": "LlamaIndex AgentWorkflow / Workflows",
+ "technology_area": "agent_frameworks",
+ "integration_surface": "rag_document_agent_workflow",
+ "awoooi_role": "RAG / 文件型 Agent workflow 與 ingestion orchestration 候選",
+ "evaluation_priority": "p1",
+ "requires_cost_approval": false,
+ "requires_dependency_approval": true,
+ "requires_security_review": true,
+ "sources": [
+ {
+ "source_id": "llamaindex_agent_workflows_docs",
+ "type": "docs",
+ "url": "https://developers.llamaindex.ai/python/examples/agent/agent_workflow_basic/"
+ },
+ {
+ "source_id": "llamaindex_workflows_docs",
+ "type": "docs",
+ "url": "https://developers.llamaindex.ai/python/llamaagents/workflows/"
+ },
+ {
+ "source_id": "llama_index_core_pypi",
+ "type": "pypi",
+ "url": "https://pypi.org/pypi/llama-index-core/json",
+ "reference_version": "0.14.23"
+ }
+ ]
+ },
+ {
+ "candidate_id": "pydantic_ai_agents",
+ "display_name": "Pydantic AI",
+ "technology_area": "agent_frameworks",
+ "integration_surface": "type_safe_agent_structured_output",
+ "awoooi_role": "type-safe tool agent、structured output 與 validation-first workflow 候選",
+ "evaluation_priority": "p1",
+ "requires_cost_approval": true,
+ "requires_dependency_approval": true,
+ "requires_security_review": true,
+ "sources": [
+ {
+ "source_id": "pydantic_ai_overview_docs",
+ "type": "docs",
+ "url": "https://pydantic.dev/docs/ai/overview/"
+ },
+ {
+ "source_id": "pydantic_ai_agents_docs",
+ "type": "docs",
+ "url": "https://pydantic.dev/docs/ai/core-concepts/agent/"
+ },
+ {
+ "source_id": "pydantic_ai_pypi",
+ "type": "pypi",
+ "url": "https://pypi.org/pypi/pydantic-ai/json",
+ "reference_version": "2.8.0"
+ }
+ ]
+ },
+ {
+ "candidate_id": "aws_strands_agents",
+ "display_name": "AWS Strands Agents",
+ "technology_area": "agent_frameworks",
+ "integration_surface": "aws_native_model_first_agent_sdk",
+ "awoooi_role": "AWS-native agent SDK watch / sandbox candidate,需成本與 provider gate",
+ "evaluation_priority": "p1",
+ "requires_cost_approval": true,
+ "requires_dependency_approval": true,
+ "requires_security_review": true,
+ "sources": [
+ {
+ "source_id": "strands_agents_docs",
+ "type": "docs",
+ "url": "https://strandsagents.com/docs/user-guide/quickstart/overview/"
+ },
+ {
+ "source_id": "aws_strands_prescriptive_guidance",
+ "type": "docs",
+ "url": "https://docs.aws.amazon.com/prescriptive-guidance/latest/agentic-ai-frameworks/strands-agents.html"
+ },
+ {
+ "source_id": "strands_agents_pypi",
+ "type": "pypi",
+ "url": "https://pypi.org/pypi/strands-agents/json",
+ "reference_version": "1.46.0"
+ },
+ {
+ "source_id": "strands_agents_typescript_npm",
+ "type": "npm",
+ "url": "https://registry.npmjs.org/%40strands-agents%2Fsdk",
+ "reference_version": "1.8.0"
+ }
+ ]
+ },
+ {
+ "candidate_id": "autogen_legacy_migration",
+ "display_name": "AutoGen Legacy Migration",
+ "technology_area": "agent_frameworks",
+ "integration_surface": "legacy_multi_agent_migration_signal",
+ "awoooi_role": "AutoGen legacy usage stays migration signal; Microsoft Agent Framework is the enterprise successor path.",
+ "evaluation_priority": "p2",
+ "requires_cost_approval": false,
+ "requires_dependency_approval": true,
+ "requires_security_review": true,
+ "sources": [
+ {
+ "source_id": "autogen_docs",
+ "type": "docs",
+ "url": "https://microsoft.github.io/autogen/stable//index.html"
+ },
+ {
+ "source_id": "autogen_to_agent_framework_migration_docs",
+ "type": "docs",
+ "url": "https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen/"
+ },
+ {
+ "source_id": "autogen_agentchat_pypi",
+ "type": "pypi",
+ "url": "https://pypi.org/pypi/autogen-agentchat/json",
+ "reference_version": "0.7.5"
+ }
+ ]
+ },
{
"candidate_id": "modelcontextprotocol_sdk",
"display_name": "Model Context Protocol SDK",
@@ -224,17 +336,8 @@
{
"source_id": "mcp_typescript_sdk_npm",
"type": "npm",
- "url": "https://registry.npmjs.org/%40modelcontextprotocol%2Fsdk"
- },
- {
- "source_id": "mcp_typescript_sdk_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/modelcontextprotocol/typescript-sdk/releases/latest"
- },
- {
- "source_id": "mcp_typescript_sdk_docs",
- "type": "docs",
- "url": "https://github.com/modelcontextprotocol/typescript-sdk"
+ "url": "https://registry.npmjs.org/%40modelcontextprotocol%2Fsdk",
+ "reference_version": "1.29.0"
},
{
"source_id": "mcp_specification_2025_06_18",
@@ -259,16 +362,6 @@
"requires_dependency_approval": true,
"requires_security_review": true,
"sources": [
- {
- "source_id": "a2a_protocol_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/a2aproject/A2A/releases/latest"
- },
- {
- "source_id": "a2a_python_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/a2aproject/a2a-python/releases/latest"
- },
{
"source_id": "a2a_protocol_docs",
"type": "docs",
@@ -431,14 +524,9 @@
"requires_security_review": true,
"sources": [
{
- "source_id": "pgvector_github_tags",
- "type": "github_tags",
- "url": "https://api.github.com/repos/pgvector/pgvector/tags"
- },
- {
- "source_id": "pgvector_docs",
+ "source_id": "pgvector_pgxn",
"type": "docs",
- "url": "https://github.com/pgvector/pgvector"
+ "url": "https://pgxn.org/dist/vector/"
}
]
},
@@ -459,9 +547,9 @@
"url": "https://pypi.org/pypi/qdrant-client/json"
},
{
- "source_id": "qdrant_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/qdrant/qdrant/releases/latest"
+ "source_id": "qdrant_docs",
+ "type": "docs",
+ "url": "https://qdrant.tech/documentation/"
}
]
},
@@ -482,9 +570,9 @@
"url": "https://pypi.org/pypi/chromadb/json"
},
{
- "source_id": "chromadb_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/chroma-core/chroma/releases/latest"
+ "source_id": "chromadb_docs",
+ "type": "docs",
+ "url": "https://docs.trychroma.com/"
}
]
},
@@ -545,11 +633,6 @@
"requires_dependency_approval": true,
"requires_security_review": true,
"sources": [
- {
- "source_id": "tgi_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/huggingface/text-generation-inference/releases/latest"
- },
{
"source_id": "tgi_docs",
"type": "docs",
@@ -574,28 +657,12 @@
"url": "https://pypi.org/pypi/vllm/json"
},
{
- "source_id": "vllm_github_release",
- "type": "github_release",
- "url": "https://api.github.com/repos/vllm-project/vllm/releases/latest"
+ "source_id": "vllm_docs",
+ "type": "docs",
+ "url": "https://docs.vllm.ai/en/latest/"
}
]
}
],
- "discovery_sources": [
- {
- "source_id": "github_ai_agent_discovery",
- "type": "github_search",
- "url": "https://api.github.com/search/repositories?q=topic:ai-agent+stars:%3E5000&sort=updated&order=desc"
- },
- {
- "source_id": "github_mcp_discovery",
- "type": "github_search",
- "url": "https://api.github.com/search/repositories?q=topic:mcp+stars:%3E1000&sort=updated&order=desc"
- },
- {
- "source_id": "github_rag_discovery",
- "type": "github_search",
- "url": "https://api.github.com/search/repositories?q=topic:rag+stars:%3E3000&sort=updated&order=desc"
- }
- ]
+ "discovery_sources": []
}
diff --git a/docs/evaluations/ai_agent_version_lifecycle_update_proposal_2026-07-10.json b/docs/evaluations/ai_agent_version_lifecycle_update_proposal_2026-07-10.json
new file mode 100644
index 000000000..a1dadbc9c
--- /dev/null
+++ b/docs/evaluations/ai_agent_version_lifecycle_update_proposal_2026-07-10.json
@@ -0,0 +1,922 @@
+{
+ "schema_version": "ai_agent_version_lifecycle_update_proposal_v1",
+ "generated_at": "2026-07-10T00:00:00+08:00",
+ "program_status": {
+ "overall_completion_percent": 80,
+ "current_priority": "P1",
+ "current_task_id": "CIR-P1-AI-002",
+ "next_task_id": "P1-006-agent-market-version-lifecycle-readback",
+ "read_only_mode": true,
+ "runtime_authority": "version_lifecycle_update_proposal_only_no_write_or_upgrade",
+ "status_note": "CIR-P1-AI-002 將市場主流 AI Agent / SDK / framework 研究、導入評估與版本生命週期更新排程納入同一個 no-write governance queue。Agent 可主動比對 official docs / PyPI / npm baseline、提出 replay / adapter / update proposal;實際 SDK install、paid API、provider switch、OpenClaw replacement、workflow write、production write 仍全部關閉。"
+ },
+ "source_refs": [
+ "docs/evaluations/ai_agent_proactive_operations_contract_2026-06-11.json",
+ "docs/evaluations/ai_agent_host_stateful_version_inventory_2026-06-11.json",
+ "docs/evaluations/dependency_supply_chain_drift_monitor_2026-06-18.json",
+ "docs/evaluations/ai_agent_market_radar_readback_2026-06-26.json",
+ "docs/evaluations/ai_technology_radar_readback_2026-06-26.json",
+ "docs/ai/AI_AGENT_AUTOMATION_WORKLIST_2026-06-04.md",
+ "docs/ai/agent-market-watch-sources.v1.json",
+ "docs/ai/ai-technology-watch-sources.v1.json",
+ "docs/ai/agent-replacement-candidates.v1.json",
+ ".gitea/workflows/agent-market-watch.yaml",
+ ".gitea/workflows/ai-technology-watch.yaml",
+ ".gitea/workflows/agent-version-lifecycle-watch.yaml"
+ ],
+ "agent_roles": [
+ {
+ "agent_id": "openclaw",
+ "role": "仲裁者",
+ "responsibility": "高風險版本變更、主機/K3s/stateful 維護窗、OpenClaw challenger 評估、回滾與最終 gate 判斷。"
+ },
+ {
+ "agent_id": "hermes",
+ "role": "營運與知識執行者",
+ "responsibility": "套件/CI/觀測/Telegram 版本差異整理、報告化、runbook 草稿、批准包欄位完整性。"
+ },
+ {
+ "agent_id": "nemotron",
+ "role": "AI 技術評測執行者",
+ "responsibility": "AI Agent/模型/SDK/MCP/RAG 候選的市場資料摘要、離線 replay 評估設計、schema 與工具鏈兼容性檢查。"
+ }
+ ],
+ "lifecycle_domains": [
+ {
+ "domain_id": "ai_agents_models",
+ "display_name": "AI Agent / 模型 / SDK",
+ "owner_agent": "nemotron",
+ "risk_tier": "high",
+ "cadence": "weekly_primary_source + triggered_on_major_release",
+ "decision_policy": "市場 scorecard、replay、shadow、canary、成本、安全與可觀測性證據不足時只保留提案。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "backend_python_packages",
+ "display_name": "FastAPI / Python 套件",
+ "owner_agent": "hermes",
+ "risk_tier": "high",
+ "cadence": "daily_repo_manifest + weekly_primary_source",
+ "decision_policy": "只產生 dependency approval packet;不得寫 lockfile、不得安裝或升級。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "frontend_javascript_packages",
+ "display_name": "Next.js / pnpm 套件",
+ "owner_agent": "hermes",
+ "risk_tier": "medium",
+ "cadence": "daily_repo_manifest + weekly_primary_source",
+ "decision_policy": "只整理 UI/runtime 相容性、lockfile 差異與煙測計畫;不得改 lockfile。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "container_images",
+ "display_name": "Docker base image / image digest",
+ "owner_agent": "openclaw",
+ "risk_tier": "high",
+ "cadence": "weekly_digest_review + triggered_on_security",
+ "decision_policy": "只產 SBOM/digest pin 提案;不得 pull/build/push image。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "host_os_packages",
+ "display_name": "主機 OS / kernel / Nginx / SSH",
+ "owner_agent": "openclaw",
+ "risk_tier": "critical",
+ "cadence": "monthly_maintenance_review + triggered_on_security",
+ "decision_policy": "必須先有維護窗、備份、rollback owner、smoke plan;不得執行主機指令。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "k3s_kubernetes_components",
+ "display_name": "K3s / Kubernetes / CNI / Ingress",
+ "owner_agent": "openclaw",
+ "risk_tier": "critical",
+ "cadence": "monthly_skew_policy_review + triggered_on_eol",
+ "decision_policy": "先做 version skew 與節點維護窗批准包;不得 kubectl、drain、restart。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "stateful_services",
+ "display_name": "PostgreSQL / Redis / MinIO / Harbor / Gitea",
+ "owner_agent": "openclaw",
+ "risk_tier": "critical",
+ "cadence": "monthly_stateful_review + triggered_on_security",
+ "decision_policy": "任何更新前必須證明備份新鮮、restore drill 與資料相容性;不得 restart/migration。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "observability_stack",
+ "display_name": "Prometheus / Alertmanager / Grafana / OTEL / Sentry",
+ "owner_agent": "hermes",
+ "risk_tier": "medium",
+ "cadence": "weekly_freshness + monthly_upgrade_review",
+ "decision_policy": "只提出 route/receiver/collector 相容性矩陣;不得寫告警路由。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "telegram_bot_gateway",
+ "display_name": "Telegram Bot / Gateway / digest policy",
+ "owner_agent": "hermes",
+ "risk_tier": "high",
+ "cadence": "weekly_policy_review + triggered_on_delivery_failure",
+ "decision_policy": "只產 no-send digest 與收斂策略;不得直送 Bot 或寫 Gateway queue。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "mcp_rag_tool_registry",
+ "display_name": "MCP / RAG / tool registry",
+ "owner_agent": "nemotron",
+ "risk_tier": "medium",
+ "cadence": "weekly_contract_review + triggered_on_tool_release",
+ "decision_policy": "只整理工具能力、資料保留、redaction 與審核需求;不得啟用新工具或外部服務。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "ci_cd_runner_tools",
+ "display_name": "Gitea Actions / runner / deploy tooling",
+ "owner_agent": "hermes",
+ "risk_tier": "high",
+ "cadence": "weekly_runner_health + triggered_on_ci_failure",
+ "decision_policy": "只產 workflow/runner owner packet;不得修改 workflow 或自動 merge。",
+ "current_authority": "L2_approval_package_only"
+ },
+ {
+ "domain_id": "backup_dr_tooling",
+ "display_name": "Backup / DR / restore tooling",
+ "owner_agent": "openclaw",
+ "risk_tier": "critical",
+ "cadence": "weekly_backup_freshness + monthly_restore_readiness",
+ "decision_policy": "只整理 restore drill 與 escrow readiness;不得刪備份、restore 或 prune。",
+ "current_authority": "L2_approval_package_only"
+ }
+ ],
+ "update_proposals": [
+ {
+ "proposal_id": "ai_agent_market_primary_source_radar",
+ "domain_id": "ai_agents_models",
+ "display_name": "AI Agent 市場主流版本雷達",
+ "owner_agent": "nemotron",
+ "priority": "P2",
+ "risk_tier": "high",
+ "status": "proposal_ready_owner_review_required",
+ "summary": "持續把 OpenClaw、Hermes、NemoTron 與市場主流 Agent/SDK/MCP/A2A 能力放入 scorecard;只產生候選與差距,不切換 provider。",
+ "evidence_refs": [
+ "docs/evaluations/ai_agent_market_radar_readback_2026-06-26.json",
+ "docs/evaluations/ai_technology_radar_readback_2026-06-26.json"
+ ],
+ "approval_gate": "market_replay_shadow_canary_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "primary source freshness readback",
+ "candidate scorecard replay fixture",
+ "成本/延遲/安全/可觀測性欄位完整性檢查"
+ ],
+ "rollback_plan": [
+ "維持 incumbent route",
+ "撤回候選標籤",
+ "保留舊 scorecard 作為比較基線"
+ ],
+ "blocked_runtime_actions": [
+ "provider route switch",
+ "paid API call",
+ "OpenClaw replacement"
+ ],
+ "telegram_policy": "action_required_digest_draft_only"
+ },
+ {
+ "proposal_id": "openclaw_challenger_replay_bench",
+ "domain_id": "ai_agents_models",
+ "display_name": "OpenClaw challenger replay 評測台",
+ "owner_agent": "openclaw",
+ "priority": "P1",
+ "risk_tier": "critical",
+ "status": "blocked_until_replay_shadow_canary_evidence",
+ "summary": "建立可讓 NemoTron 或其他 challenger 用相同任務集比較仲裁品質的 replay 評測台;未完成 shadow/canary 前不得替換 OpenClaw。",
+ "evidence_refs": [
+ "docs/HARD_RULES.md",
+ "docs/evaluations/ai_provider_route_matrix_2026-06-04.json"
+ ],
+ "approval_gate": "market_replay_shadow_canary_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "sanitized historical task replay",
+ "shadow decision disagreement review",
+ "canary stop condition table"
+ ],
+ "rollback_plan": [
+ "OpenClaw remains arbitration default",
+ "disable challenger route flag",
+ "archive failed challenger scorecard"
+ ],
+ "blocked_runtime_actions": [
+ "OpenClaw replacement",
+ "production routing",
+ "runtime agent arbitration switch"
+ ],
+ "telegram_policy": "critical_owner_review_draft_only"
+ },
+ {
+ "proposal_id": "python_dependency_authority_alignment",
+ "domain_id": "backend_python_packages",
+ "display_name": "Python dependency authority 對齊",
+ "owner_agent": "hermes",
+ "priority": "P2",
+ "risk_tier": "high",
+ "status": "action_required_dependency_packet",
+ "summary": "把 API Python manifest、套件風險、測試矩陣與 rollback plan 收成一份 owner packet;本階段不安裝、不升級。",
+ "evidence_refs": [
+ "docs/evaluations/dependency_supply_chain_drift_monitor_2026-06-18.json",
+ "apps/api/pyproject.toml"
+ ],
+ "approval_gate": "dependency_upgrade_owner_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "pytest target matrix",
+ "API smoke plan",
+ "dependency conflict review"
+ ],
+ "rollback_plan": [
+ "restore previous lock snapshot",
+ "revert dependency PR branch",
+ "rerun API smoke"
+ ],
+ "blocked_runtime_actions": [
+ "package upgrade",
+ "lockfile write",
+ "workflow trigger"
+ ],
+ "telegram_policy": "failure_or_owner_action_draft_only"
+ },
+ {
+ "proposal_id": "frontend_pnpm_freshness_plan",
+ "domain_id": "frontend_javascript_packages",
+ "display_name": "前端 pnpm / Next.js 新鮮度計畫",
+ "owner_agent": "hermes",
+ "priority": "P3",
+ "risk_tier": "medium",
+ "status": "proposal_ready_owner_review_required",
+ "summary": "整理前端套件、i18n、瀏覽器煙測與 build/typecheck gate,低中風險也先形成可審核草案。",
+ "evidence_refs": [
+ "apps/web/package.json",
+ "apps/web/pnpm-lock.yaml",
+ "docs/evaluations/dependency_supply_chain_drift_monitor_2026-06-18.json"
+ ],
+ "approval_gate": "dependency_upgrade_owner_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "pnpm typecheck",
+ "eslint target files",
+ "desktop/mobile governance smoke"
+ ],
+ "rollback_plan": [
+ "revert package update branch",
+ "restore previous lockfile",
+ "re-run production smoke after deploy marker"
+ ],
+ "blocked_runtime_actions": [
+ "package upgrade",
+ "lockfile write",
+ "auto merge"
+ ],
+ "telegram_policy": "weekly_digest_draft_only"
+ },
+ {
+ "proposal_id": "container_digest_sbom_pin_packet",
+ "domain_id": "container_images",
+ "display_name": "Container digest / SBOM pin 批准包",
+ "owner_agent": "openclaw",
+ "priority": "P2",
+ "risk_tier": "high",
+ "status": "blocked_until_sbom_and_image_gate",
+ "summary": "為 base image 與 runtime image 建立 digest pin、SBOM、漏洞摘要與部署煙測計畫;不 pull/build/push image。",
+ "evidence_refs": [
+ "docs/evaluations/dependency_supply_chain_drift_monitor_2026-06-18.json",
+ "docs/evaluations/docker_build_surface_inventory_2026-06-04.json"
+ ],
+ "approval_gate": "container_sbom_digest_owner_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "SBOM source plan",
+ "image digest diff review",
+ "deployment smoke plan"
+ ],
+ "rollback_plan": [
+ "retain previous image digest",
+ "revert manifest proposal",
+ "block rollout until smoke passes"
+ ],
+ "blocked_runtime_actions": [
+ "image pull",
+ "docker build",
+ "registry push"
+ ],
+ "telegram_policy": "critical_image_digest_draft_only"
+ },
+ {
+ "proposal_id": "k3s_skew_maintenance_window_packet",
+ "domain_id": "k3s_kubernetes_components",
+ "display_name": "K3s version skew 維護窗批准包",
+ "owner_agent": "openclaw",
+ "priority": "P1",
+ "risk_tier": "critical",
+ "status": "blocked_until_maintenance_window",
+ "summary": "將 K3s/Kubernetes skew policy、節點順序、備援與煙測列成批准包;不得 kubectl、drain、restart。",
+ "evidence_refs": [
+ "docs/evaluations/ai_agent_host_stateful_version_inventory_2026-06-11.json",
+ "https://kubernetes.io/releases/version-skew-policy/"
+ ],
+ "approval_gate": "k3s_version_skew_owner_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "version skew table",
+ "node-by-node maintenance sequence",
+ "public route smoke plan"
+ ],
+ "rollback_plan": [
+ "pause node sequence",
+ "restore previous control-plane state",
+ "run post-check readback"
+ ],
+ "blocked_runtime_actions": [
+ "kubectl command",
+ "node drain",
+ "k3s upgrade"
+ ],
+ "telegram_policy": "critical_owner_review_draft_only"
+ },
+ {
+ "proposal_id": "host_os_security_maintenance_packet",
+ "domain_id": "host_os_packages",
+ "display_name": "Host OS 安全維護窗批准包",
+ "owner_agent": "openclaw",
+ "priority": "P1",
+ "risk_tier": "critical",
+ "status": "blocked_until_host_maintenance_window",
+ "summary": "把 OS/kernel/Nginx/OpenSSH 更新變成維護窗提案;本階段只用既有 inventory,不 SSH、不 apt、不 reboot。",
+ "evidence_refs": [
+ "docs/evaluations/ai_agent_host_stateful_version_inventory_2026-06-11.json",
+ "docs/runbooks/K3S-OPTIMIZATION-RUNBOOK.md"
+ ],
+ "approval_gate": "host_maintenance_window_owner_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "host impact matrix",
+ "pre-change backup check",
+ "post-change service smoke plan"
+ ],
+ "rollback_plan": [
+ "maintenance abort condition",
+ "service restore sequence",
+ "owner communication plan"
+ ],
+ "blocked_runtime_actions": [
+ "host command",
+ "os package upgrade",
+ "reboot"
+ ],
+ "telegram_policy": "critical_owner_review_draft_only"
+ },
+ {
+ "proposal_id": "stateful_backup_first_upgrade_packet",
+ "domain_id": "stateful_services",
+ "display_name": "Stateful backup-first 升級批准包",
+ "owner_agent": "openclaw",
+ "priority": "P1",
+ "risk_tier": "critical",
+ "status": "blocked_until_backup_and_restore_evidence",
+ "summary": "PostgreSQL/Redis/MinIO/Harbor/Gitea 更新前先要求備份新鮮度、restore drill 與資料相容性;不 restart、不 migration。",
+ "evidence_refs": [
+ "docs/evaluations/ai_agent_host_stateful_version_inventory_2026-06-11.json",
+ "docs/evaluations/backup_dr_readiness_matrix_2026-06-04.json"
+ ],
+ "approval_gate": "stateful_backup_restore_owner_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "backup freshness readback",
+ "restore drill owner packet",
+ "data compatibility smoke"
+ ],
+ "rollback_plan": [
+ "restore snapshot selection",
+ "service-level rollback owner",
+ "read-only consistency check"
+ ],
+ "blocked_runtime_actions": [
+ "stateful restart",
+ "database migration",
+ "restore execution"
+ ],
+ "telegram_policy": "critical_owner_review_draft_only"
+ },
+ {
+ "proposal_id": "observability_agentops_stack_freshness",
+ "domain_id": "observability_stack",
+ "display_name": "AgentOps 觀測堆疊新鮮度",
+ "owner_agent": "hermes",
+ "priority": "P3",
+ "risk_tier": "medium",
+ "status": "proposal_ready_owner_review_required",
+ "summary": "追蹤 Prometheus、Alertmanager、Grafana、OTEL、Sentry 與 GenAI telemetry 更新,只產相容性矩陣與告警降噪提案。",
+ "evidence_refs": [
+ "docs/evaluations/observability_contract_matrix_2026-06-04.json",
+ "docs/evaluations/service_health_gap_matrix_2026-06-04.json"
+ ],
+ "approval_gate": "workflow_runner_owner_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "alert route compatibility matrix",
+ "dashboard readback smoke",
+ "noise reduction acceptance criteria"
+ ],
+ "rollback_plan": [
+ "retain previous alert route",
+ "disable candidate dashboard flag",
+ "restore previous receiver policy"
+ ],
+ "blocked_runtime_actions": [
+ "alert route write",
+ "workflow write",
+ "production write"
+ ],
+ "telegram_policy": "failure_only_digest_draft"
+ },
+ {
+ "proposal_id": "telegram_bot_gateway_policy_refresh",
+ "domain_id": "telegram_bot_gateway",
+ "display_name": "Telegram Bot / Gateway policy refresh",
+ "owner_agent": "hermes",
+ "priority": "P2",
+ "risk_tier": "high",
+ "status": "blocked_until_no_send_receipt_gate",
+ "summary": "把日報、週報、月報與 action-required 告警收斂成 no-send digest、receipt readback 與 owner review;不得實發 Telegram。",
+ "evidence_refs": [
+ "docs/evaluations/ai_agent_telegram_action_required_digest_policy_2026-06-04.json",
+ "docs/evaluations/ai_agent_report_live_delivery_approval_package_2026-06-04.json"
+ ],
+ "approval_gate": "telegram_gateway_owner_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "sanitized message preview",
+ "dedup key review",
+ "receipt readback dry-run"
+ ],
+ "rollback_plan": [
+ "mute candidate digest type",
+ "restore previous no-send policy",
+ "owner-visible failure receipt"
+ ],
+ "blocked_runtime_actions": [
+ "Telegram direct send",
+ "Gateway queue write",
+ "Bot API call"
+ ],
+ "telegram_policy": "no_send_owner_review_required"
+ },
+ {
+ "proposal_id": "mcp_rag_tool_registry_freshness",
+ "domain_id": "mcp_rag_tool_registry",
+ "display_name": "MCP / RAG / tool registry 新鮮度",
+ "owner_agent": "nemotron",
+ "priority": "P3",
+ "risk_tier": "medium",
+ "status": "proposal_ready_owner_review_required",
+ "summary": "整理 MCP server、RAG memory、tool permission 與 redaction policy 版本差異;不得啟用新外部工具或寫入記憶。",
+ "evidence_refs": [
+ "docs/evaluations/ai_agent_proactive_operations_contract_2026-06-11.json",
+ "docs/evaluations/ai_agent_interaction_learning_proof_2026-06-04.json"
+ ],
+ "approval_gate": "mcp_rag_tool_registry_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "tool permission matrix",
+ "RAG retention and redaction review",
+ "sandbox replay for tool-call changes"
+ ],
+ "rollback_plan": [
+ "remove candidate tool from registry draft",
+ "retain previous memory contract",
+ "mark replay pack rejected"
+ ],
+ "blocked_runtime_actions": [
+ "new external tool activation",
+ "memory write",
+ "paid external service"
+ ],
+ "telegram_policy": "weekly_digest_draft_only"
+ },
+ {
+ "proposal_id": "gitea_runner_deploy_tooling_refresh",
+ "domain_id": "ci_cd_runner_tools",
+ "display_name": "Gitea runner / deploy tooling refresh",
+ "owner_agent": "hermes",
+ "priority": "P2",
+ "risk_tier": "high",
+ "status": "blocked_until_workflow_owner_packet",
+ "summary": "整理 Gitea runner、deploy marker、workflow attestation 與 smoke gate 更新提案;不得改 workflow、建立 PR 或 auto merge。",
+ "evidence_refs": [
+ "docs/evaluations/gitea_workflow_runner_health_2026-06-04.json",
+ "docs/LOGBOOK.md"
+ ],
+ "approval_gate": "workflow_runner_owner_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "runner attestation readback",
+ "deploy marker verification plan",
+ "public smoke route list"
+ ],
+ "rollback_plan": [
+ "keep previous workflow",
+ "pause candidate deploy marker",
+ "manual owner review before merge"
+ ],
+ "blocked_runtime_actions": [
+ "workflow write",
+ "PR creation",
+ "auto merge"
+ ],
+ "telegram_policy": "deployment_failure_digest_draft_only"
+ },
+ {
+ "proposal_id": "mainstream_agent_framework_version_lifecycle_review",
+ "domain_id": "ai_agents_models",
+ "display_name": "主流 AI Agent / Framework 版本生命週期定期審核",
+ "owner_agent": "nemotron",
+ "priority": "P1",
+ "risk_tier": "high",
+ "status": "proposal_ready_owner_review_required",
+ "summary": "每週固定比對市場主流 AI Agent / SDK / framework official docs、PyPI、npm baseline,判斷是否需要 adapter design、offline replay、sandbox 或更新批准包;不安裝、不付費呼叫、不切 production。",
+ "evidence_refs": [
+ "docs/ai/agent-market-watch-sources.v1.json",
+ "docs/ai/ai-technology-watch-sources.v1.json",
+ "docs/ai/agent-replacement-candidates.v1.json",
+ ".gitea/workflows/agent-market-watch.yaml",
+ ".gitea/workflows/ai-technology-watch.yaml",
+ ".gitea/workflows/agent-version-lifecycle-watch.yaml"
+ ],
+ "approval_gate": "market_replay_shadow_canary_review",
+ "requires_owner_approval": true,
+ "direct_update_allowed": false,
+ "auto_execution_allowed": false,
+ "validation_plan": [
+ "official docs / PyPI / npm baseline readback",
+ "market integration review for changed candidates",
+ "offline replay adapter plan before any SDK install",
+ "cost, security, observability, rollback fields complete"
+ ],
+ "rollback_plan": [
+ "keep OpenClaw incumbent route",
+ "revert candidate to watch-only registry status",
+ "retain previous version baseline and replay scorecard"
+ ],
+ "blocked_runtime_actions": [
+ "SDK install",
+ "paid API call",
+ "provider route switch",
+ "OpenClaw replacement",
+ "workflow write",
+ "production write"
+ ],
+ "telegram_policy": "weekly_digest_draft_only"
+ }
+ ],
+ "cadence_matrix": [
+ {
+ "cadence_id": "daily_repo_manifest_readback",
+ "frequency": "daily",
+ "scope": "repo-only manifests and committed snapshots",
+ "allowed_now": true,
+ "owner_agent": "hermes",
+ "output": "只讀差異摘要與過期來源標記"
+ },
+ {
+ "cadence_id": "weekly_primary_source_market_review",
+ "frequency": "weekly",
+ "scope": "AI Agent / SDK / MCP / RAG primary source review",
+ "allowed_now": false,
+ "owner_agent": "nemotron",
+ "output": "外部來源批准包,未批准不得 live lookup"
+ },
+ {
+ "cadence_id": "weekly_dependency_supply_chain_review",
+ "frequency": "weekly",
+ "scope": "dependency, image, SBOM, license, CVE proposal",
+ "allowed_now": false,
+ "owner_agent": "hermes",
+ "output": "dependency owner packet"
+ },
+ {
+ "cadence_id": "monthly_host_k3s_maintenance_review",
+ "frequency": "monthly",
+ "scope": "host OS, kernel, K3s, Kubernetes skew",
+ "allowed_now": false,
+ "owner_agent": "openclaw",
+ "output": "maintenance window proposal"
+ },
+ {
+ "cadence_id": "monthly_stateful_backup_restore_review",
+ "frequency": "monthly",
+ "scope": "PostgreSQL, Redis, MinIO, Harbor, Gitea, backup/restore",
+ "allowed_now": false,
+ "owner_agent": "openclaw",
+ "output": "backup-first approval package"
+ },
+ {
+ "cadence_id": "triggered_critical_security_or_eol_review",
+ "frequency": "triggered",
+ "scope": "critical vulnerability, EOL, runner failure, delivery failure",
+ "allowed_now": false,
+ "owner_agent": "openclaw",
+ "output": "urgent owner review packet"
+ },
+ {
+ "cadence_id": "weekly_ai_agent_framework_version_review",
+ "frequency": "weekly_tuesday_0900_taipei",
+ "scope": "OpenAI Agents SDK, LangGraph, Google ADK, Microsoft Agent Framework, CrewAI, LlamaIndex, Pydantic AI, AWS Strands, AutoGen migration, NVIDIA NeMo/Nemotron, Claude Agent SDK baseline versions",
+ "allowed_now": true,
+ "owner_agent": "nemotron",
+ "output": "no-write version drift queue, integration review, replay/update proposal, and blocked runtime action list"
+ }
+ ],
+ "approval_gate_matrix": [
+ {
+ "gate_id": "market_replay_shadow_canary_review",
+ "risk_tier": "critical",
+ "owner_approval_required": true,
+ "auto_execute_allowed": false,
+ "required_evidence": [
+ "market scorecard",
+ "sanitized replay fixture",
+ "shadow/canary stop conditions",
+ "cost and latency comparison"
+ ]
+ },
+ {
+ "gate_id": "dependency_upgrade_owner_review",
+ "risk_tier": "high",
+ "owner_approval_required": true,
+ "auto_execute_allowed": false,
+ "required_evidence": [
+ "manifest diff",
+ "test matrix",
+ "rollback branch plan"
+ ]
+ },
+ {
+ "gate_id": "container_sbom_digest_owner_review",
+ "risk_tier": "high",
+ "owner_approval_required": true,
+ "auto_execute_allowed": false,
+ "required_evidence": [
+ "SBOM plan",
+ "digest diff",
+ "deployment smoke"
+ ]
+ },
+ {
+ "gate_id": "host_maintenance_window_owner_review",
+ "risk_tier": "critical",
+ "owner_approval_required": true,
+ "auto_execute_allowed": false,
+ "required_evidence": [
+ "maintenance window",
+ "affected hosts",
+ "rollback owner",
+ "service smoke"
+ ]
+ },
+ {
+ "gate_id": "k3s_version_skew_owner_review",
+ "risk_tier": "critical",
+ "owner_approval_required": true,
+ "auto_execute_allowed": false,
+ "required_evidence": [
+ "version skew policy",
+ "node sequence",
+ "cluster health readback"
+ ]
+ },
+ {
+ "gate_id": "stateful_backup_restore_owner_review",
+ "risk_tier": "critical",
+ "owner_approval_required": true,
+ "auto_execute_allowed": false,
+ "required_evidence": [
+ "backup freshness",
+ "restore drill",
+ "data compatibility"
+ ]
+ },
+ {
+ "gate_id": "telegram_gateway_owner_review",
+ "risk_tier": "high",
+ "owner_approval_required": true,
+ "auto_execute_allowed": false,
+ "required_evidence": [
+ "sanitized preview",
+ "dedup key",
+ "receipt dry-run"
+ ]
+ },
+ {
+ "gate_id": "workflow_runner_owner_review",
+ "risk_tier": "high",
+ "owner_approval_required": true,
+ "auto_execute_allowed": false,
+ "required_evidence": [
+ "runner attestation",
+ "workflow diff",
+ "deploy smoke plan"
+ ]
+ },
+ {
+ "gate_id": "mcp_rag_tool_registry_review",
+ "risk_tier": "medium",
+ "owner_approval_required": true,
+ "auto_execute_allowed": false,
+ "required_evidence": [
+ "tool permission matrix",
+ "retention policy",
+ "redaction review"
+ ]
+ }
+ ],
+ "telegram_digest_contract": {
+ "status": "draft_only_no_send",
+ "direct_send_allowed": false,
+ "gateway_queue_write_allowed": false,
+ "bot_api_call_allowed": false,
+ "success_noise_suppression": true,
+ "draft_outputs": [
+ "日報版本候選摘要",
+ "週報市場與依賴漂移摘要",
+ "月報維護窗與高風險 gate 摘要",
+ "action-required owner review 草稿"
+ ],
+ "redaction_required": true
+ },
+ "runtime_boundaries": {
+ "read_only_update_proposal_allowed": true,
+ "schedule_activation_allowed": false,
+ "external_market_lookup_allowed": false,
+ "external_registry_lookup_allowed": false,
+ "external_cve_lookup_allowed": false,
+ "package_upgrade_allowed": false,
+ "lockfile_write_allowed": false,
+ "host_upgrade_allowed": false,
+ "os_package_upgrade_allowed": false,
+ "kernel_upgrade_allowed": false,
+ "k3s_upgrade_allowed": false,
+ "kubectl_command_allowed": false,
+ "node_drain_allowed": false,
+ "reboot_allowed": false,
+ "stateful_restart_allowed": false,
+ "database_migration_allowed": false,
+ "image_pull_allowed": false,
+ "docker_build_allowed": false,
+ "registry_push_allowed": false,
+ "workflow_write_allowed": false,
+ "pr_creation_allowed": false,
+ "auto_merge_allowed": false,
+ "provider_route_switch_allowed": false,
+ "openclaw_replacement_allowed": false,
+ "paid_api_call_allowed": false,
+ "secret_read_allowed": false,
+ "telegram_direct_send_allowed": false,
+ "telegram_gateway_queue_write_allowed": false,
+ "production_write_allowed": false,
+ "conversation_transcript_display_allowed": false
+ },
+ "rollups": {
+ "domain_count": 12,
+ "proposal_count": 13,
+ "cadence_count": 7,
+ "approval_gate_count": 9,
+ "read_only_proposal_count": 13,
+ "approval_required_count": 13,
+ "critical_candidate_count": 4,
+ "high_candidate_count": 6,
+ "false_runtime_boundary_count": 29,
+ "auto_execution_allowed_count": 0,
+ "telegram_direct_send_count": 0,
+ "telegram_gateway_queue_write_count": 0,
+ "production_write_count": 0,
+ "update_allowed_count": 0,
+ "domain_ids": [
+ "ai_agents_models",
+ "backend_python_packages",
+ "backup_dr_tooling",
+ "ci_cd_runner_tools",
+ "container_images",
+ "frontend_javascript_packages",
+ "host_os_packages",
+ "k3s_kubernetes_components",
+ "mcp_rag_tool_registry",
+ "observability_stack",
+ "stateful_services",
+ "telegram_bot_gateway"
+ ],
+ "proposal_ids": [
+ "ai_agent_market_primary_source_radar",
+ "container_digest_sbom_pin_packet",
+ "frontend_pnpm_freshness_plan",
+ "gitea_runner_deploy_tooling_refresh",
+ "host_os_security_maintenance_packet",
+ "k3s_skew_maintenance_window_packet",
+ "mainstream_agent_framework_version_lifecycle_review",
+ "mcp_rag_tool_registry_freshness",
+ "observability_agentops_stack_freshness",
+ "openclaw_challenger_replay_bench",
+ "python_dependency_authority_alignment",
+ "stateful_backup_first_upgrade_packet",
+ "telegram_bot_gateway_policy_refresh"
+ ]
+ },
+ "next_actions": [
+ {
+ "task_id": "P1-006-agent-market-version-lifecycle-readback",
+ "priority": "P1",
+ "owner_agent": "nemotron",
+ "summary": "讀回主流 AI Agent market watch、technology radar、replacement candidates 與 weekly version lifecycle proposal,確認每個候選都有下一個 replay/update gate。",
+ "gate": "market_replay_shadow_canary_review"
+ },
+ {
+ "task_id": "P2-414",
+ "priority": "P2",
+ "owner_agent": "hermes",
+ "summary": "把日報、週報、月報的版本生命週期欄位與 P2-413 proposal queue 對齊。",
+ "gate": "report_schema_update_no_send"
+ },
+ {
+ "task_id": "P2-415",
+ "priority": "P1",
+ "owner_agent": "openclaw",
+ "summary": "設計 OpenClaw challenger replay bench 的 sanitized task set 與評分欄位。",
+ "gate": "market_replay_shadow_canary_review"
+ },
+ {
+ "task_id": "P2-416",
+ "priority": "P2",
+ "owner_agent": "nemotron",
+ "summary": "把 MCP/RAG/tool registry 的保留、遮罩與權限欄位轉成 owner packet。",
+ "gate": "mcp_rag_tool_registry_review"
+ },
+ {
+ "task_id": "P2-417",
+ "priority": "P1",
+ "owner_agent": "openclaw",
+ "summary": "建立 host/K3s/stateful 維護窗批准包的 owner review readback。",
+ "gate": "maintenance_window_owner_review"
+ }
+ ],
+ "periodic_schedule_bindings": [
+ {
+ "binding_id": "agent_market_watch_weekly_monday_0900_taipei",
+ "workflow": ".gitea/workflows/agent-market-watch.yaml",
+ "cron": "0 1 * * 1",
+ "local_time": "Monday 09:00 Asia/Taipei",
+ "purpose": "weekly primary-source Agent market integration review",
+ "runtime_write_allowed": false
+ },
+ {
+ "binding_id": "ai_technology_watch_every_6_hours",
+ "workflow": ".gitea/workflows/ai-technology-watch.yaml",
+ "cron": "0 */6 * * *",
+ "local_time": "every 6 hours UTC / every 6 hours Taipei-shifted",
+ "purpose": "near-real-time AI technology and Agent version drift radar",
+ "runtime_write_allowed": false
+ },
+ {
+ "binding_id": "agent_version_lifecycle_weekly_tuesday_0900_taipei",
+ "workflow": ".gitea/workflows/agent-version-lifecycle-watch.yaml",
+ "cron": "proposal_only_weekly_tuesday_0900_taipei",
+ "local_time": "Tuesday 09:00 Asia/Taipei",
+ "purpose": "no-write AI Agent version/update proposal review queue",
+ "runtime_write_allowed": false
+ }
+ ]
+}
diff --git a/k8s/awoooi-prod/06-deployment-api.yaml b/k8s/awoooi-prod/06-deployment-api.yaml
index 7bc080260..bba4595f8 100644
--- a/k8s/awoooi-prod/06-deployment-api.yaml
+++ b/k8s/awoooi-prod/06-deployment-api.yaml
@@ -84,12 +84,12 @@ spec:
- name: AWOOOI_BUILD_COMMIT_SHA
# 2026-06-29 Codex: CD rewrites this to the deployed image tag so
# production deploy readback does not rely on a stale static snapshot.
- value: "df70a0233f0d838f92f193e10b7c399c397f2f46"
+ value: "99f427a3cfd6044499bdf4b6726c9b9d9fb0f21b"
- name: AWOOOI_DESIRED_API_IMAGE_TAG
# 2026-06-30 Codex: CD rewrites this alongside AWOOOI_BUILD_COMMIT_SHA.
# Production readback compares runtime image truth against this
# GitOps desired tag instead of doing a slow Gitea raw fetch.
- value: "df70a0233f0d838f92f193e10b7c399c397f2f46"
+ value: "99f427a3cfd6044499bdf4b6726c9b9d9fb0f21b"
- name: DATABASE_POOL_SIZE
# 2026-07-01 Codex: production role `awoooi` currently has a low
# connection limit. Keep API pool conservative until DB role
diff --git a/k8s/awoooi-prod/kustomization.yaml b/k8s/awoooi-prod/kustomization.yaml
index af3b9ea6d..f530c5c98 100644
--- a/k8s/awoooi-prod/kustomization.yaml
+++ b/k8s/awoooi-prod/kustomization.yaml
@@ -41,7 +41,7 @@ resources:
images:
- name: 192.168.0.110:5000/library/api:IMAGE_TAG_PLACEHOLDER
newName: 192.168.0.110:5000/awoooi/api
- newTag: df70a0233f0d838f92f193e10b7c399c397f2f46
+ newTag: 99f427a3cfd6044499bdf4b6726c9b9d9fb0f21b
- name: 192.168.0.110:5000/library/web:IMAGE_TAG_PLACEHOLDER
newName: 192.168.0.110:5000/awoooi/web
- newTag: df70a0233f0d838f92f193e10b7c399c397f2f46
+ newTag: 99f427a3cfd6044499bdf4b6726c9b9d9fb0f21b
diff --git a/scripts/agents/agent-market-discovery-classify.py b/scripts/agents/agent-market-discovery-classify.py
index b37a69c49..8f29b2049 100644
--- a/scripts/agents/agent-market-discovery-classify.py
+++ b/scripts/agents/agent-market-discovery-classify.py
@@ -1,9 +1,12 @@
#!/usr/bin/env python3
"""
-Classify market discovery repositories using primary GitHub metadata.
+Classify market discovery repositories using supplied primary-source metadata.
The command is read-only. It does not add watch-registry entries, install SDKs,
call LLMs, approve paid provider use, enter replay, or change production.
+Under the GitHub account-safety freeze it does not fetch GitHub metadata; callers
+must provide sanitized metadata explicitly, or drafts are marked policy-blocked
+for offline review.
"""
from __future__ import annotations
@@ -14,7 +17,6 @@ import json
import sys
from pathlib import Path
from typing import Any
-from urllib.request import Request, urlopen
ROOT = Path(__file__).resolve().parents[2]
@@ -33,7 +35,7 @@ def main() -> int:
metadata = (
_read_json(Path(args.metadata))
if args.metadata
- else _fetch_repository_metadata(discovery_review, args.timeout_seconds)
+ else _policy_blocked_repository_metadata(discovery_review)
)
service = _load_service()
report = service.run_agent_market_discovery_classification(
@@ -49,9 +51,8 @@ def main() -> int:
return 0
-def _fetch_repository_metadata(
+def _policy_blocked_repository_metadata(
discovery_review: dict[str, Any],
- timeout_seconds: int,
) -> dict[str, dict[str, Any]]:
metadata: dict[str, dict[str, Any]] = {}
for draft in discovery_review.get("candidate_drafts") or []:
@@ -60,43 +61,17 @@ def _fetch_repository_metadata(
repo = str(draft.get("repository_full_name", ""))
if not repo:
continue
- try:
- metadata[repo] = _fetch_one_repository(repo, timeout_seconds)
- except Exception as exc: # noqa: BLE001
- metadata[repo] = {
- "full_name": repo,
- "html_url": draft.get("html_url"),
- "description": None,
- "topics": [],
- "stargazers_count": draft.get("stargazers_count_max"),
- "error": str(exc),
- }
+ metadata[repo] = {
+ "full_name": repo,
+ "html_url": draft.get("html_url"),
+ "description": None,
+ "topics": [],
+ "stargazers_count": draft.get("stargazers_count_max"),
+ "policy_blocker": "github_global_freeze_metadata_must_be_supplied_offline",
+ }
return metadata
-def _fetch_one_repository(repo: str, timeout_seconds: int) -> dict[str, Any]:
- request = Request(
- f"https://api.github.com/repos/{repo}",
- headers={
- "User-Agent": "awoooi-agent-market-discovery-classifier/1.0",
- "Accept": "application/vnd.github+json",
- },
- )
- with urlopen(request, timeout=timeout_seconds) as response: # noqa: S310
- payload = json.loads(response.read().decode("utf-8"))
- return {
- "full_name": str(payload.get("full_name") or repo),
- "html_url": payload.get("html_url"),
- "description": payload.get("description"),
- "homepage": payload.get("homepage"),
- "topics": list(payload.get("topics") or []),
- "language": payload.get("language"),
- "stargazers_count": payload.get("stargazers_count"),
- "pushed_at": payload.get("pushed_at"),
- "archived": bool(payload.get("archived", False)),
- }
-
-
def _read_json(path: Path) -> dict[str, Any]:
with path.open(encoding="utf-8") as handle:
payload = json.load(handle)