Skip to content

Commit b12a7ba

Browse files
authored
Merge pull request #154 from TrueNine/dev
fix: restore claude workspace memory aggregation
2 parents e59d2f4 + 0608b32 commit b12a7ba

2 files changed

Lines changed: 56 additions & 4 deletions

File tree

cli/integrate-tests/src/lib.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,20 @@ pub fn run_tnmsc_with_env(args: &[&str], cwd: &Path, envs: &[(&str, &str)]) -> C
375375
command_output(&mut command, "cargo run -p tnmsc --bin tnmsc")
376376
}
377377

378+
pub fn run_packaged_tnmsc_with_env(
379+
args: &[&str],
380+
cwd: &Path,
381+
envs: &[(&str, &str)],
382+
) -> CommandResult {
383+
let mut command = Command::new(release_binary_path());
384+
command.args(args).current_dir(cwd);
385+
for (key, value) in envs {
386+
command.env(key, value);
387+
}
388+
389+
command_output(&mut command, "target/debug/tnmsc")
390+
}
391+
378392
pub fn run_program_inherit(program: &str, args: &[&str], cwd: &Path) -> bool {
379393
let mut command;
380394
#[cfg(unix)]
@@ -574,7 +588,7 @@ pub fn pack_cli_artifacts() -> Option<PackedArtifacts> {
574588
let workspace_root_dir = workspace_root().to_string_lossy().into_owned();
575589

576590
eprintln!("[tnmsc-integrate-tests] running assemble-npm...");
577-
let assemble = run_tnmsc_with_env(
591+
let assemble = run_packaged_tnmsc_with_env(
578592
&["assemble-npm", "--profile", "debug"],
579593
&workspace_root(),
580594
&[
@@ -628,7 +642,7 @@ pub fn pack_cli_artifacts() -> Option<PackedArtifacts> {
628642
cross_start.elapsed().as_secs_f64()
629643
);
630644

631-
let assemble_cross = run_tnmsc_with_env(
645+
let assemble_cross = run_packaged_tnmsc_with_env(
632646
&["assemble-npm", "--profile", "debug"],
633647
&workspace_root(),
634648
&[

sdk/src/domain/output_plans/claude_code_output_plan.rs

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
251276
fn 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\nWorkspace root prompt from aindex"
485+
);
486+
}
449487
}
450488

451489
fn build_cleanup(workspace: &Workspace) -> CleanupDeclarationsDto {

0 commit comments

Comments
 (0)