@@ -46,20 +46,33 @@ fn build_output_files(
4646 let prompt_projects = get_project_prompt_output_projects ( workspace) ;
4747
4848 // 项目级 CLAUDE.md(根目录 + 子目录)
49- // 始终如同 AGENTS.md 一样输出项目内存内容,不与全局内存混合。
49+ // 工作区根 CLAUDE.md 需要同时携带全局 memory 和工作区 prompt,
50+ // 这样打包 CLI 在裸容器里安装后也能直接看到完整的 Claude 上下文。
5051 for project in & prompt_projects {
5152 let Some ( project_root_dir) = resolve_project_root_dir ( workspace, project) else {
5253 continue ;
5354 } ;
5455
5556 if let Some ( root_prompt) = project. root_memory_prompt . as_ref ( ) {
57+ let content = if project. is_workspace_root_project == Some ( true ) {
58+ merge_workspace_root_memory (
59+ context
60+ . global_memory
61+ . as_ref ( )
62+ . map ( |prompt| prompt. content . as_str ( ) ) ,
63+ & root_prompt. content ,
64+ )
65+ } else {
66+ root_prompt. content . clone ( )
67+ } ;
68+
5669 output_files. push ( BaseOutputFileDeclarationDto {
5770 path : project_root_dir
5871 . join ( CLAUDE_CODE_MEMORY_FILE )
5972 . to_string_lossy ( )
6073 . into_owned ( ) ,
6174 scope : Some ( PROJECT_SCOPE . to_string ( ) ) ,
62- content : root_prompt . content . clone ( ) ,
75+ content,
6376 encoding : None ,
6477 } ) ;
6578 }
@@ -248,6 +261,18 @@ fn build_output_files(
248261 output_files
249262}
250263
264+ fn merge_workspace_root_memory ( global_memory : Option < & str > , workspace_prompt : & str ) -> String {
265+ let global_memory = global_memory. unwrap_or ( "" ) . trim ( ) ;
266+ let workspace_prompt = workspace_prompt. trim ( ) ;
267+
268+ match ( global_memory. is_empty ( ) , workspace_prompt. is_empty ( ) ) {
269+ ( true , true ) => String :: new ( ) ,
270+ ( false , true ) => global_memory. to_string ( ) ,
271+ ( true , false ) => workspace_prompt. to_string ( ) ,
272+ ( false , false ) => format ! ( "{global_memory}\n \n {workspace_prompt}" ) ,
273+ }
274+ }
275+
251276fn build_rule_content ( rule : & crate :: domain:: plugin_shared:: RulePrompt ) -> String {
252277 let Some ( ref yaml_fm) = rule. yaml_front_matter else {
253278 return rule. content . clone ( ) ;
@@ -446,6 +471,19 @@ mod tests {
446471 let result = wrap_yaml_front_matter ( & empty, "Just content." ) ;
447472 assert_eq ! ( result, "Just content." ) ;
448473 }
474+
475+ #[ test]
476+ fn merge_workspace_root_memory_includes_global_and_workspace_content ( ) {
477+ let merged = merge_workspace_root_memory (
478+ Some ( "Global memory from aindex" ) ,
479+ "Workspace root prompt from aindex" ,
480+ ) ;
481+
482+ assert_eq ! (
483+ merged,
484+ "Global memory from aindex\n \n Workspace root prompt from aindex"
485+ ) ;
486+ }
449487}
450488
451489fn build_cleanup ( workspace : & Workspace ) -> CleanupDeclarationsDto {
0 commit comments