From a979d25ca9ecd15da52347dca505cc1c3f45ab78 Mon Sep 17 00:00:00 2001 From: limityan Date: Fri, 5 Jun 2026 15:35:58 +0800 Subject: [PATCH] refactor(core): layer crates and close product assembly facade --- AGENTS-CN.md | 58 ++- AGENTS.md | 61 ++-- BitFun-Installer/src-tauri/Cargo.toml | 2 +- CONTRIBUTING.md | 8 +- CONTRIBUTING_CN.md | 8 +- Cargo.toml | 42 +-- MiniApp/Skills/miniapp-dev/SKILL.md | 14 +- MiniApp/Skills/miniapp-dev/design-playbook.md | 8 +- README.md | 12 +- README.zh-CN.md | 12 +- .../agent-runtime-services-design.md | 2 +- .../cache-friendly-message-structure.md | 32 +- docs/architecture/core-decomposition.md | 28 +- docs/architecture/deep-review.md | 26 +- docs/architecture/i18n.md | 4 +- .../architecture/model-request-cache-reuse.md | 80 ++--- .../session-runtime-usage-report-design.md | 72 ++-- docs/plans/core-decomposition-completed.md | 39 +- docs/plans/core-decomposition-plan.md | 156 ++------ scripts/core-boundaries/checker.mjs | 165 ++++++++- .../core-boundaries/rules/crate-layout.mjs | 51 +++ .../core-boundaries/rules/feature-rules.mjs | 15 +- .../rules/source/facade-rules.mjs | 36 +- .../rules/source/forbidden-rules.mjs | 167 +++++---- .../rules/source/required-rules.mjs | 274 +++++++------- scripts/core-boundaries/self-test.mjs | 338 +++++++++--------- scripts/generate-i18n-contract.mjs | 35 +- scripts/i18n-audit.mjs | 6 +- scripts/i18n-contract.test.mjs | 12 +- src/apps/cli/Cargo.toml | 6 +- src/apps/desktop/AGENTS-CN.md | 2 +- src/apps/desktop/AGENTS.md | 2 +- src/apps/desktop/Cargo.toml | 8 +- src/crates/acp/AGENTS-CN.md | 24 -- src/crates/contracts/AGENTS-CN.md | 26 ++ src/crates/contracts/AGENTS.md | 32 ++ .../{ => contracts}/core-types/AGENTS.md | 2 +- .../{ => contracts}/core-types/Cargo.toml | 0 .../{ => contracts}/core-types/src/errors.rs | 0 .../{ => contracts}/core-types/src/lib.rs | 0 .../{ => contracts}/core-types/src/session.rs | 0 .../{ => contracts}/core-types/src/surface.rs | 0 .../core-types/src/tool_image_attachment.rs | 0 .../core-types/tests/session_contracts.rs | 0 .../core-types/tests/surface_contracts.rs | 0 src/crates/{ => contracts}/events/AGENTS.md | 2 +- src/crates/{ => contracts}/events/Cargo.toml | 0 .../{ => contracts}/events/src/agentic.rs | 0 .../{ => contracts}/events/src/emitter.rs | 0 src/crates/{ => contracts}/events/src/lib.rs | 0 .../{ => contracts}/events/src/types.rs | 0 .../{ => contracts}/runtime-ports/AGENTS.md | 2 +- .../{ => contracts}/runtime-ports/Cargo.toml | 0 .../{ => contracts}/runtime-ports/src/lib.rs | 0 .../tests/session_store_contracts.rs | 0 src/crates/execution/AGENTS-CN.md | 30 ++ src/crates/execution/AGENTS.md | 40 +++ .../{ => execution}/agent-runtime/AGENTS.md | 2 +- .../{ => execution}/agent-runtime/Cargo.toml | 2 +- .../agent-runtime/src/agents.rs | 0 .../agent-runtime/src/custom_subagent.rs | 0 .../agent-runtime/src/events.rs | 0 .../{ => execution}/agent-runtime/src/lib.rs | 0 .../agent-runtime/src/post_call_hooks.rs | 0 .../agent-runtime/src/prompt.rs | 0 .../agent-runtime/src/prompt_cache.rs | 0 .../agent-runtime/src/scheduled_job.rs | 0 .../agent-runtime/src/scheduler.rs | 0 .../agent-runtime/src/session_control.rs | 0 .../agent-runtime/src/thread_goal.rs | 0 .../src/thread_goal/templates/budget_limit.md | 0 .../src/thread_goal/templates/continuation.md | 0 .../templates/objective_updated.md | 0 .../agent-runtime/src/thread_goal_tools.rs | 0 .../agent-runtime/src/tool_confirmation.rs | 0 .../agent-runtime/src/user_questions.rs | 0 .../tests/agent_registry_contracts.rs | 0 .../tests/custom_subagent_contracts.rs | 0 .../custom_subagent_discovery_contracts.rs | 0 .../agent-runtime/tests/events_contracts.rs | 0 .../tests/post_call_hook_contracts.rs | 0 .../post_call_hook_execution_contracts.rs | 0 .../tests/prompt_cache_contracts.rs | 0 .../agent-runtime/tests/prompt_contracts.rs | 0 .../tests/scheduled_job_contracts.rs | 0 .../tests/scheduler_contracts.rs | 0 .../tests/session_control_contracts.rs | 0 .../tests/thread_goal_contracts.rs | 0 .../thread_goal_tool_handler_contracts.rs | 0 .../tests/tool_confirmation_contracts.rs | 0 .../tests/user_question_tool_contracts.rs | 0 .../{ => execution}/agent-stream/AGENTS.md | 2 +- .../{ => execution}/agent-stream/Cargo.toml | 4 +- .../{ => execution}/agent-stream/src/lib.rs | 0 .../tests/common/fixture_loader.rs | 0 .../agent-stream/tests/common/mod.rs | 0 .../tests/common/sse_fixture_server.rs | 0 .../tests/common/stream_test_harness.rs | 0 .../anthropic/closed_after_message_delta.sse | 0 ...y_thinking_signature_text_and_tool_use.sse | 0 .../stream/anthropic/extended_thinking.sse | 0 .../stream/anthropic/inline_think_text.sse | 0 .../interleaved_parallel_tool_use.sse | 0 .../malformed_content_block_delta.sse | 0 .../malformed_tool_arguments_extra_brace.sse | 0 .../gemini/function_call_string_args.sse | 0 ...y_reasoning_content_text_and_tool_call.sse | 0 .../stream/openai/inline_think_text.sse | 0 ...nterleaved_parallel_tool_args_by_index.sse | 0 ...hree_tools_with_empty_toolcall_anomaly.sse | 0 .../openai/tool_args_snapshot_stop_reason.sse | 0 .../openai/tool_args_split_with_usage.sse | 0 .../openai/tool_call_missing_type_field.sse | 0 ..._call_trailing_empty_args_finish_chunk.sse | 0 .../openai/tool_id_only_orphan_filtered.sse | 0 ...ool_id_prelude_then_payload_without_id.sse | 0 ...st_final_chunk_contains_orphan_id_only.sse | 0 .../malformed_function_call_arguments.sse | 0 .../tests/stream_processor_anthropic.rs | 0 .../tests/stream_processor_openai.rs | 18 +- .../tests/stream_processor_tool_arguments.rs | 0 .../tests/stream_replay_regressions.rs | 2 +- .../agent-stream/tests/stream_test_harness.rs | 0 .../{ => execution}/agent-tools/AGENTS.md | 2 +- .../{ => execution}/agent-tools/Cargo.toml | 4 +- .../agent-tools/src/execution_gate.rs | 0 .../agent-tools/src/file_guidance.rs | 0 .../agent-tools/src/file_read_freshness.rs | 0 .../agent-tools/src/framework.rs | 0 .../agent-tools/src/input_validator.rs | 0 .../{ => execution}/agent-tools/src/lib.rs | 0 .../src/tool_execution_presentation.rs | 0 .../agent-tools/src/tool_result_storage.rs | 0 .../agent-tools/tests/tool_contracts.rs | 0 src/crates/{ => execution}/harness/AGENTS.md | 2 +- src/crates/{ => execution}/harness/Cargo.toml | 0 src/crates/{ => execution}/harness/src/lib.rs | 0 .../{ => execution}/harness/tests/registry.rs | 0 .../runtime-services/AGENTS.md | 2 +- .../runtime-services/Cargo.toml | 2 +- .../runtime-services/src/lib.rs | 0 .../runtime-services/src/test_support.rs | 0 .../tests/runtime_services_contracts.rs | 0 .../{ => execution}/tool-packs/AGENTS.md | 2 +- .../{ => execution}/tool-packs/Cargo.toml | 0 .../{ => execution}/tool-packs/src/lib.rs | 0 .../{ => execution}/tool-runtime/AGENTS.md | 2 +- .../{ => execution}/tool-runtime/Cargo.toml | 0 .../tool-runtime/src/fs/backend.rs | 0 .../tool-runtime/src/fs/delete_path.rs | 0 .../tool-runtime/src/fs/edit_file.rs | 0 .../tool-runtime/src/fs/list_dir.rs | 0 .../tool-runtime/src/fs/mod.rs | 0 .../tool-runtime/src/fs/read_file.rs | 0 .../tool-runtime/src/fs/write_file.rs | 0 .../{ => execution}/tool-runtime/src/lib.rs | 0 .../tool-runtime/src/search/glob_search.rs | 0 .../tool-runtime/src/search/grep_search.rs | 0 .../tool-runtime/src/search/mod.rs | 0 .../tool-runtime/src/util/ansi_cleaner.rs | 0 .../tool-runtime/src/util/mod.rs | 0 .../tool-runtime/src/util/read_line_prefix.rs | 3 +- .../tool-runtime/src/util/string.rs | 0 .../tool-runtime/tests/tool_io_contracts.rs | 0 src/crates/facade/AGENTS-CN.md | 26 ++ src/crates/facade/AGENTS.md | 39 ++ src/crates/{ => facade}/core/AGENTS-CN.md | 21 +- src/crates/{ => facade}/core/AGENTS.md | 21 +- src/crates/{ => facade}/core/Cargo.toml | 36 +- src/crates/{ => facade}/core/build.rs | 2 +- .../browser_data_extraction.yaml | 0 .../builtin_playbooks/browser_form_fill.yaml | 0 .../builtin_playbooks/browser_screenshot.yaml | 0 .../desktop_app_automation.yaml | 0 .../builtin_playbooks/im_send_message.yaml | 0 .../builtin_skills/agent-browser/SKILL.md | 0 .../references/authentication.md | 0 .../agent-browser/references/commands.md | 0 .../agent-browser/references/profiling.md | 0 .../agent-browser/references/proxy-support.md | 0 .../references/session-management.md | 0 .../agent-browser/references/snapshot-refs.md | 0 .../references/video-recording.md | 0 .../templates/authenticated-session.sh | 0 .../templates/capture-workflow.sh | 0 .../templates/form-automation.sh | 0 .../core/builtin_skills/docx/LICENSE.txt | 0 .../core/builtin_skills/docx/SKILL.md | 0 .../builtin_skills/docx/scripts/__init__.py | 0 .../docx/scripts/accept_changes.py | 0 .../builtin_skills/docx/scripts/comment.py | 0 .../docx/scripts/office/helpers/__init__.py | 0 .../docx/scripts/office/helpers/merge_runs.py | 0 .../office/helpers/simplify_redlines.py | 0 .../docx/scripts/office/pack.py | 0 .../schemas/ISO-IEC29500-4_2016/dml-chart.xsd | 0 .../ISO-IEC29500-4_2016/dml-chartDrawing.xsd | 0 .../ISO-IEC29500-4_2016/dml-diagram.xsd | 0 .../ISO-IEC29500-4_2016/dml-lockedCanvas.xsd | 0 .../schemas/ISO-IEC29500-4_2016/dml-main.xsd | 0 .../ISO-IEC29500-4_2016/dml-picture.xsd | 0 .../dml-spreadsheetDrawing.xsd | 0 .../dml-wordprocessingDrawing.xsd | 0 .../schemas/ISO-IEC29500-4_2016/pml.xsd | 0 .../shared-additionalCharacteristics.xsd | 0 .../shared-bibliography.xsd | 0 .../shared-commonSimpleTypes.xsd | 0 .../shared-customXmlDataProperties.xsd | 0 .../shared-customXmlSchemaProperties.xsd | 0 .../shared-documentPropertiesCustom.xsd | 0 .../shared-documentPropertiesExtended.xsd | 0 .../shared-documentPropertiesVariantTypes.xsd | 0 .../ISO-IEC29500-4_2016/shared-math.xsd | 0 .../shared-relationshipReference.xsd | 0 .../schemas/ISO-IEC29500-4_2016/sml.xsd | 0 .../schemas/ISO-IEC29500-4_2016/vml-main.xsd | 0 .../ISO-IEC29500-4_2016/vml-officeDrawing.xsd | 0 .../vml-presentationDrawing.xsd | 0 .../vml-spreadsheetDrawing.xsd | 0 .../vml-wordprocessingDrawing.xsd | 0 .../schemas/ISO-IEC29500-4_2016/wml.xsd | 0 .../schemas/ISO-IEC29500-4_2016/xml.xsd | 0 .../ecma/fouth-edition/opc-contentTypes.xsd | 0 .../ecma/fouth-edition/opc-coreProperties.xsd | 0 .../schemas/ecma/fouth-edition/opc-digSig.xsd | 0 .../ecma/fouth-edition/opc-relationships.xsd | 0 .../docx/scripts/office/schemas/mce/mc.xsd | 0 .../office/schemas/microsoft/wml-2010.xsd | 0 .../office/schemas/microsoft/wml-2012.xsd | 0 .../office/schemas/microsoft/wml-2018.xsd | 0 .../office/schemas/microsoft/wml-cex-2018.xsd | 0 .../office/schemas/microsoft/wml-cid-2016.xsd | 0 .../microsoft/wml-sdtdatahash-2020.xsd | 0 .../schemas/microsoft/wml-symex-2015.xsd | 0 .../docx/scripts/office/soffice.py | 0 .../docx/scripts/office/unpack.py | 0 .../docx/scripts/office/validate.py | 0 .../scripts/office/validators/__init__.py | 0 .../docx/scripts/office/validators/base.py | 0 .../docx/scripts/office/validators/docx.py | 0 .../docx/scripts/office/validators/pptx.py | 0 .../scripts/office/validators/redlining.py | 0 .../docx/scripts/templates/comments.xml | 0 .../scripts/templates/commentsExtended.xml | 0 .../scripts/templates/commentsExtensible.xml | 0 .../docx/scripts/templates/commentsIds.xml | 0 .../docx/scripts/templates/people.xml | 0 .../core/builtin_skills/find-skills/SKILL.md | 0 .../builtin_skills/gstack-autoplan/SKILL.md | 0 .../core/builtin_skills/gstack-cso/SKILL.md | 0 .../gstack-design-consultation/SKILL.md | 0 .../gstack-design-review/SKILL.md | 0 .../gstack-document-release/SKILL.md | 0 .../gstack-investigate/SKILL.md | 0 .../gstack-office-hours/SKILL.md | 0 .../gstack-plan-ceo-review/SKILL.md | 0 .../gstack-plan-design-review/SKILL.md | 0 .../gstack-plan-eng-review/SKILL.md | 0 .../builtin_skills/gstack-qa-only/SKILL.md | 0 .../core/builtin_skills/gstack-qa/SKILL.md | 0 .../core/builtin_skills/gstack-retro/SKILL.md | 0 .../builtin_skills/gstack-review/SKILL.md | 0 .../core/builtin_skills/gstack-ship/SKILL.md | 0 .../core/builtin_skills/pdf/LICENSE.txt | 0 .../core/builtin_skills/pdf/SKILL.md | 0 .../core/builtin_skills/pdf/forms.md | 0 .../core/builtin_skills/pdf/reference.md | 0 .../pdf/scripts/check_bounding_boxes.py | 0 .../pdf/scripts/check_fillable_fields.py | 0 .../pdf/scripts/convert_pdf_to_images.py | 0 .../pdf/scripts/create_validation_image.py | 0 .../pdf/scripts/extract_form_field_info.py | 0 .../pdf/scripts/extract_form_structure.py | 0 .../pdf/scripts/fill_fillable_fields.py | 0 .../scripts/fill_pdf_form_with_annotations.py | 0 .../core/builtin_skills/pptx/LICENSE.txt | 0 .../core/builtin_skills/pptx/SKILL.md | 0 .../core/builtin_skills/pptx/editing.md | 0 .../core/builtin_skills/pptx/pptxgenjs.md | 0 .../builtin_skills/pptx/scripts/__init__.py | 0 .../builtin_skills/pptx/scripts/add_slide.py | 0 .../core/builtin_skills/pptx/scripts/clean.py | 0 .../pptx/scripts/office/helpers/__init__.py | 0 .../pptx/scripts/office/helpers/merge_runs.py | 0 .../office/helpers/simplify_redlines.py | 0 .../pptx/scripts/office/pack.py | 0 .../schemas/ISO-IEC29500-4_2016/dml-chart.xsd | 0 .../ISO-IEC29500-4_2016/dml-chartDrawing.xsd | 0 .../ISO-IEC29500-4_2016/dml-diagram.xsd | 0 .../ISO-IEC29500-4_2016/dml-lockedCanvas.xsd | 0 .../schemas/ISO-IEC29500-4_2016/dml-main.xsd | 0 .../ISO-IEC29500-4_2016/dml-picture.xsd | 0 .../dml-spreadsheetDrawing.xsd | 0 .../dml-wordprocessingDrawing.xsd | 0 .../schemas/ISO-IEC29500-4_2016/pml.xsd | 0 .../shared-additionalCharacteristics.xsd | 0 .../shared-bibliography.xsd | 0 .../shared-commonSimpleTypes.xsd | 0 .../shared-customXmlDataProperties.xsd | 0 .../shared-customXmlSchemaProperties.xsd | 0 .../shared-documentPropertiesCustom.xsd | 0 .../shared-documentPropertiesExtended.xsd | 0 .../shared-documentPropertiesVariantTypes.xsd | 0 .../ISO-IEC29500-4_2016/shared-math.xsd | 0 .../shared-relationshipReference.xsd | 0 .../schemas/ISO-IEC29500-4_2016/sml.xsd | 0 .../schemas/ISO-IEC29500-4_2016/vml-main.xsd | 0 .../ISO-IEC29500-4_2016/vml-officeDrawing.xsd | 0 .../vml-presentationDrawing.xsd | 0 .../vml-spreadsheetDrawing.xsd | 0 .../vml-wordprocessingDrawing.xsd | 0 .../schemas/ISO-IEC29500-4_2016/wml.xsd | 0 .../schemas/ISO-IEC29500-4_2016/xml.xsd | 0 .../ecma/fouth-edition/opc-contentTypes.xsd | 0 .../ecma/fouth-edition/opc-coreProperties.xsd | 0 .../schemas/ecma/fouth-edition/opc-digSig.xsd | 0 .../ecma/fouth-edition/opc-relationships.xsd | 0 .../pptx/scripts/office/schemas/mce/mc.xsd | 0 .../office/schemas/microsoft/wml-2010.xsd | 0 .../office/schemas/microsoft/wml-2012.xsd | 0 .../office/schemas/microsoft/wml-2018.xsd | 0 .../office/schemas/microsoft/wml-cex-2018.xsd | 0 .../office/schemas/microsoft/wml-cid-2016.xsd | 0 .../microsoft/wml-sdtdatahash-2020.xsd | 0 .../schemas/microsoft/wml-symex-2015.xsd | 0 .../pptx/scripts/office/soffice.py | 0 .../pptx/scripts/office/unpack.py | 0 .../pptx/scripts/office/validate.py | 0 .../scripts/office/validators/__init__.py | 0 .../pptx/scripts/office/validators/base.py | 0 .../pptx/scripts/office/validators/docx.py | 0 .../pptx/scripts/office/validators/pptx.py | 0 .../scripts/office/validators/redlining.py | 0 .../builtin_skills/pptx/scripts/thumbnail.py | 0 .../builtin_skills/writing-skills/SKILL.md | 0 .../anthropic-best-practices.md | 0 .../examples/CLAUDE_MD_TESTING.md | 0 .../writing-skills/graphviz-conventions.dot | 0 .../writing-skills/persuasion-principles.md | 0 .../writing-skills/render-graphs.js | 0 .../testing-skills-with-subagents.md | 0 .../core/builtin_skills/xlsx/LICENSE.txt | 0 .../core/builtin_skills/xlsx/SKILL.md | 0 .../xlsx/scripts/office/helpers/__init__.py | 0 .../xlsx/scripts/office/helpers/merge_runs.py | 0 .../office/helpers/simplify_redlines.py | 0 .../xlsx/scripts/office/pack.py | 0 .../schemas/ISO-IEC29500-4_2016/dml-chart.xsd | 0 .../ISO-IEC29500-4_2016/dml-chartDrawing.xsd | 0 .../ISO-IEC29500-4_2016/dml-diagram.xsd | 0 .../ISO-IEC29500-4_2016/dml-lockedCanvas.xsd | 0 .../schemas/ISO-IEC29500-4_2016/dml-main.xsd | 0 .../ISO-IEC29500-4_2016/dml-picture.xsd | 0 .../dml-spreadsheetDrawing.xsd | 0 .../dml-wordprocessingDrawing.xsd | 0 .../schemas/ISO-IEC29500-4_2016/pml.xsd | 0 .../shared-additionalCharacteristics.xsd | 0 .../shared-bibliography.xsd | 0 .../shared-commonSimpleTypes.xsd | 0 .../shared-customXmlDataProperties.xsd | 0 .../shared-customXmlSchemaProperties.xsd | 0 .../shared-documentPropertiesCustom.xsd | 0 .../shared-documentPropertiesExtended.xsd | 0 .../shared-documentPropertiesVariantTypes.xsd | 0 .../ISO-IEC29500-4_2016/shared-math.xsd | 0 .../shared-relationshipReference.xsd | 0 .../schemas/ISO-IEC29500-4_2016/sml.xsd | 0 .../schemas/ISO-IEC29500-4_2016/vml-main.xsd | 0 .../ISO-IEC29500-4_2016/vml-officeDrawing.xsd | 0 .../vml-presentationDrawing.xsd | 0 .../vml-spreadsheetDrawing.xsd | 0 .../vml-wordprocessingDrawing.xsd | 0 .../schemas/ISO-IEC29500-4_2016/wml.xsd | 0 .../schemas/ISO-IEC29500-4_2016/xml.xsd | 0 .../ecma/fouth-edition/opc-contentTypes.xsd | 0 .../ecma/fouth-edition/opc-coreProperties.xsd | 0 .../schemas/ecma/fouth-edition/opc-digSig.xsd | 0 .../ecma/fouth-edition/opc-relationships.xsd | 0 .../xlsx/scripts/office/schemas/mce/mc.xsd | 0 .../office/schemas/microsoft/wml-2010.xsd | 0 .../office/schemas/microsoft/wml-2012.xsd | 0 .../office/schemas/microsoft/wml-2018.xsd | 0 .../office/schemas/microsoft/wml-cex-2018.xsd | 0 .../office/schemas/microsoft/wml-cid-2016.xsd | 0 .../microsoft/wml-sdtdatahash-2020.xsd | 0 .../schemas/microsoft/wml-symex-2015.xsd | 0 .../xlsx/scripts/office/soffice.py | 0 .../xlsx/scripts/office/unpack.py | 0 .../xlsx/scripts/office/validate.py | 0 .../scripts/office/validators/__init__.py | 0 .../xlsx/scripts/office/validators/base.py | 0 .../xlsx/scripts/office/validators/docx.py | 0 .../xlsx/scripts/office/validators/pptx.py | 0 .../scripts/office/validators/redlining.py | 0 .../builtin_skills/xlsx/scripts/recalc.py | 0 .../{ => facade}/core/locales/en-US.ftl | 0 .../{ => facade}/core/locales/zh-CN.ftl | 0 .../{ => facade}/core/locales/zh-TW.ftl | 0 .../src/agentic/agents/citation_renumber.rs | 0 .../agentic/agents/definitions/custom/mod.rs | 0 .../agents/definitions/custom/subagent.rs | 0 .../agents/definitions/hidden/code_review.rs | 0 .../agents/definitions/hidden/deep_review.rs | 0 .../agents/definitions/hidden/generate_doc.rs | 0 .../agentic/agents/definitions/hidden/mod.rs | 0 .../src/agentic/agents/definitions/mod.rs | 0 .../agents/definitions/modes/agentic.rs | 0 .../agentic/agents/definitions/modes/claw.rs | 0 .../agents/definitions/modes/cowork.rs | 0 .../agentic/agents/definitions/modes/debug.rs | 0 .../agents/definitions/modes/deep_research.rs | 0 .../agentic/agents/definitions/modes/mod.rs | 0 .../agents/definitions/modes/multitask.rs | 0 .../agentic/agents/definitions/modes/plan.rs | 0 .../agentic/agents/definitions/modes/team.rs | 0 .../agentic/agents/definitions/review/mod.rs | 0 .../agents/definitions/review/review_fixer.rs | 0 .../definitions/review/review_specialists.rs | 0 .../agentic/agents/definitions/shared/mod.rs | 0 .../agents/definitions/shared/readonly.rs | 0 .../definitions/subagents/computer_use.rs | 0 .../agents/definitions/subagents/explore.rs | 0 .../definitions/subagents/file_finder.rs | 0 .../definitions/subagents/general_purpose.rs | 0 .../agents/definitions/subagents/mod.rs | 0 .../subagents/research_specialist.rs | 0 .../core/src/agentic/agents/mod.rs | 0 .../src/agentic/agents/prompt_builder/mod.rs | 0 .../prompt_builder/prompt_builder_impl.rs | 0 .../agents/prompt_builder/user_context.rs | 0 .../agentic/agents/prompts/agentic_mode.md | 4 +- .../agentic_mode_first_entry_reminder.md | 0 .../src/agentic/agents/prompts/claw_mode.md | 0 .../src/agentic/agents/prompts/code_review.md | 0 .../agents/prompts/computer_use_mode.md | 0 .../src/agentic/agents/prompts/cowork_mode.md | 0 .../debug_mode_first_entry_reminder.md | 0 .../prompts/debug_mode_ongoing_reminder.md | 0 .../agents/prompts/deep_research_agent.md | 0 .../agents/prompts/deep_review_agent.md | 0 .../agentic/agents/prompts/explore_agent.md | 0 .../agents/prompts/file_finder_agent.md | 0 .../agents/prompts/general_purpose_agent.md | 0 .../agents/prompts/generate_doc_agent.md | 0 .../multitask_mode_first_entry_reminder.md | 0 .../multitask_mode_ongoing_reminder.md | 0 .../prompts/plan_mode_first_entry_reminder.md | 0 .../prompts/plan_mode_ongoing_reminder.md | 0 .../prompts/research_specialist_agent.md | 0 .../prompts/review_architecture_agent.md | 0 .../prompts/review_business_logic_agent.md | 0 .../agents/prompts/review_fixer_agent.md | 0 .../agents/prompts/review_frontend_agent.md | 0 .../prompts/review_performance_agent.md | 0 .../prompts/review_quality_gate_agent.md | 0 .../agents/prompts/review_security_agent.md | 0 .../src/agentic/agents/prompts/team_mode.md | 0 .../agentic/agents/registry/availability.rs | 0 .../src/agentic/agents/registry/builtin.rs | 0 .../src/agentic/agents/registry/catalog.rs | 0 .../src/agentic/agents/registry/custom.rs | 0 .../core/src/agentic/agents/registry/mod.rs | 0 .../core/src/agentic/agents/registry/query.rs | 0 .../src/agentic/agents/registry/resolution.rs | 0 .../src/agentic/agents/registry/support.rs | 0 .../core/src/agentic/agents/registry/tests.rs | 0 .../core/src/agentic/agents/registry/types.rs | 0 .../src/agentic/agents/registry/visibility.rs | 0 .../core/src/agentic/context_profile.rs | 0 .../src/agentic/coordination/coordinator.rs | 0 .../core/src/agentic/coordination/mod.rs | 0 .../src/agentic/coordination/scheduler.rs | 0 .../src/agentic/coordination/state_manager.rs | 0 .../src/agentic/coordination/turn_outcome.rs | 0 .../core/src/agentic/core/dialog_turn.rs | 0 .../core/src/agentic/core/message.rs | 0 .../core/src/agentic/core/messages_helper.rs | 0 .../{ => facade}/core/src/agentic/core/mod.rs | 0 .../core/src/agentic/core/prompt_markup.rs | 0 .../core/src/agentic/core/session.rs | 0 .../core/src/agentic/core/state.rs | 0 .../core/src/agentic/deep_review/AGENTS.md | 2 +- .../src/agentic/deep_review/CONTRIBUTING.md | 2 +- .../core/src/agentic/deep_review/budget.rs | 0 .../agentic/deep_review/concurrency_policy.rs | 0 .../core/src/agentic/deep_review/constants.rs | 0 .../src/agentic/deep_review/diagnostics.rs | 0 .../agentic/deep_review/execution_policy.rs | 0 .../agentic/deep_review/incremental_cache.rs | 0 .../core/src/agentic/deep_review/manifest.rs | 8 +- .../core/src/agentic/deep_review/mod.rs | 0 .../core/src/agentic/deep_review/queue.rs | 0 .../core/src/agentic/deep_review/report.rs | 0 .../src/agentic/deep_review/shared_context.rs | 0 .../src/agentic/deep_review/task_adapter.rs | 0 .../agentic/deep_review/team_definition.rs | 0 .../src/agentic/deep_review/tool_context.rs | 0 .../agentic/deep_review/tool_measurement.rs | 0 .../core/src/agentic/deep_review_policy.rs | 0 .../core/src/agentic/events/mod.rs | 0 .../core/src/agentic/events/queue.rs | 0 .../core/src/agentic/events/router.rs | 0 .../core/src/agentic/events/types.rs | 0 .../core/src/agentic/execution/AGENTS.md | 0 .../src/agentic/execution/execution_engine.rs | 0 .../core/src/agentic/execution/mod.rs | 0 .../src/agentic/execution/round_executor.rs | 2 - .../src/agentic/execution/stream_processor.rs | 0 .../core/src/agentic/execution/types.rs | 0 .../execution/write_content_sanitizer.rs | 0 .../core/src/agentic/fork_agent/mod.rs | 1 - .../core/src/agentic/goal_mode/mod.rs | 0 .../src/agentic/goal_mode/token_subscriber.rs | 0 .../{ => facade}/core/src/agentic/harness.rs | 17 +- .../src/agentic/image_analysis/enhancer.rs | 0 .../image_analysis/image_processing.rs | 0 .../core/src/agentic/image_analysis/mod.rs | 0 .../src/agentic/image_analysis/processor.rs | 0 .../core/src/agentic/image_analysis/types.rs | 0 .../core/src/agentic/init_agents_md.rs | 0 .../core/src/agentic/insights/cancellation.rs | 0 .../core/src/agentic/insights/collector.rs | 0 .../core/src/agentic/insights/facet_cache.rs | 0 .../core/src/agentic/insights/html.rs | 0 .../core/src/agentic/insights/mod.rs | 0 .../src/agentic/insights/prompt_context.rs | 0 .../src/agentic/insights/prompts/areas.md | 0 .../agentic/insights/prompts/at_a_glance.md | 0 .../insights/prompts/facet_extraction.md | 0 .../src/agentic/insights/prompts/friction.md | 0 .../agentic/insights/prompts/fun_ending.md | 0 .../src/agentic/insights/prompts/horizon.md | 0 .../insights/prompts/interaction_style.md | 0 .../agentic/insights/prompts/suggestions.md | 0 .../core/src/agentic/insights/prompts/wins.md | 0 .../core/src/agentic/insights/service.rs | 0 .../src/agentic/insights/session_paths.rs | 0 .../core/src/agentic/insights/types.rs | 0 .../{ => facade}/core/src/agentic/mod.rs | 0 .../core/src/agentic/persistence/manager.rs | 0 .../core/src/agentic/persistence/mod.rs | 0 .../src/agentic/persistence/session_branch.rs | 2 +- .../src/agentic/prompts/init_agents_md.md | 0 .../core/src/agentic/round_preempt.rs | 0 .../agentic/session/compression/compressor.rs | 0 .../session/compression/fallback/builder.rs | 0 .../session/compression/fallback/mod.rs | 0 .../session/compression/fallback/payload.rs | 0 .../session/compression/fallback/render.rs | 0 .../session/compression/fallback/sanitize.rs | 0 .../session/compression/fallback/tests.rs | 0 .../session/compression/fallback/types.rs | 0 .../src/agentic/session/compression/mod.rs | 0 .../core/src/agentic/session/context_store.rs | 0 .../src/agentic/session/evidence_ledger.rs | 0 .../src/agentic/session/file_read_state.rs | 0 .../core/src/agentic/session/mod.rs | 0 .../core/src/agentic/session/prompt_cache.rs | 0 .../src/agentic/session/session_manager.rs | 0 .../src/agentic/session/session_store_port.rs | 0 .../turn_skill_agent_snapshot_store.rs | 0 .../core/src/agentic/side_question.rs | 0 .../core/src/agentic/skill_agent_snapshot.rs | 0 .../core/src/agentic/subagent_runtime/mod.rs | 0 .../agentic/subagent_runtime/queue_timing.rs | 0 .../{ => facade}/core/src/agentic/system.rs | 0 .../src/agentic/tools/agent-tool-exposure.md | 0 .../agentic/tools/browser_control/actions.rs | 0 .../tools/browser_control/browser_launcher.rs | 0 .../tools/browser_control/cdp_client.rs | 0 .../src/agentic/tools/browser_control/mod.rs | 0 .../tools/browser_control/session_registry.rs | 0 .../agentic/tools/computer_use_capability.rs | 0 .../src/agentic/tools/computer_use_host.rs | 0 .../agentic/tools/computer_use_optimizer.rs | 0 .../tools/computer_use_verification.rs | 0 .../agentic/tools/file_read_state_runtime.rs | 0 .../src/agentic/tools/file_tool_guidance.rs | 0 .../core/src/agentic/tools/framework.rs | 0 .../core/src/agentic/tools/image_context.rs | 0 .../implementations/ask_user_question_tool.rs | 0 .../tools/implementations/bash_tool.rs | 0 .../tools/implementations/code_review_tool.rs | 0 .../implementations/computer_use_actions.rs | 0 .../implementations/computer_use_input.rs | 0 .../implementations/computer_use_locate.rs | 0 .../computer_use_mouse_click_tool.rs | 0 .../computer_use_mouse_precise_tool.rs | 0 .../computer_use_mouse_step_tool.rs | 0 .../implementations/computer_use_result.rs | 0 .../implementations/computer_use_tool.rs | 0 .../implementations/control_hub/errors.rs | 0 .../tools/implementations/control_hub/mod.rs | 0 .../implementations/control_hub/result.rs | 0 .../tools/implementations/control_hub_tool.rs | 0 .../tools/implementations/create_plan_tool.rs | 0 .../tools/implementations/cron_tool.rs | 0 .../tools/implementations/delete_file_tool.rs | 0 .../tools/implementations/file_edit_tool.rs | 0 .../tools/implementations/file_read_tool.rs | 0 .../tools/implementations/file_write_tool.rs | 0 .../implementations/generative_ui_tool.rs | 2 +- .../implementations/get_file_diff_tool.rs | 0 .../agentic/tools/implementations/git_tool.rs | 0 .../tools/implementations/glob_tool.rs | 0 .../tools/implementations/grep_tool.rs | 0 .../agentic/tools/implementations/log_tool.rs | 0 .../agentic/tools/implementations/ls_tool.rs | 0 .../tools/implementations/mcp_tools.rs | 0 .../implementations/miniapp_init_tool.rs | 0 .../src/agentic/tools/implementations/mod.rs | 0 .../tools/implementations/playbook_tool.rs | 0 .../implementations/review_platform_tool.rs | 0 .../implementations/session_control_tool.rs | 0 .../implementations/session_history_tool.rs | 0 .../implementations/session_message_tool.rs | 0 .../tools/implementations/skill_tool.rs | 0 .../tools/implementations/skills/builtin.rs | 0 .../tools/implementations/skills/catalog.rs | 0 .../tools/implementations/skills/mod.rs | 0 .../implementations/skills/mode_overrides.rs | 0 .../tools/implementations/skills/policy.rs | 0 .../tools/implementations/skills/registry.rs | 0 .../tools/implementations/skills/resolver.rs | 0 .../tools/implementations/skills/types.rs | 0 .../tools/implementations/task_tool.rs | 42 +-- .../implementations/terminal_control_tool.rs | 0 .../implementations/thread_goal_tools.rs | 0 .../tools/implementations/todo_write_tool.rs | 0 .../src/agentic/tools/implementations/util.rs | 0 .../tools/implementations/web_tools.rs | 0 .../src/agentic/tools/manifest_resolver.rs | 0 .../core/src/agentic/tools/mod.rs | 0 .../core/src/agentic/tools/pipeline/mod.rs | 0 .../agentic/tools/pipeline/state_manager.rs | 0 .../agentic/tools/pipeline/tool_pipeline.rs | 0 .../core/src/agentic/tools/pipeline/types.rs | 0 .../core/src/agentic/tools/post_call_hooks.rs | 0 .../core/src/agentic/tools/product_runtime.rs | 0 .../agentic/tools/product_runtime/catalog.rs | 0 .../product_runtime/get_tool_spec_tool.rs | 0 .../tools/product_runtime/materialization.rs | 0 .../agentic/tools/product_runtime/snapshot.rs | 0 .../tools/product_runtime/unlock_state.rs | 0 .../core/src/agentic/tools/registry.rs | 0 .../core/src/agentic/tools/restrictions.rs | 3 +- .../core/src/agentic/tools/tool_adapter.rs | 0 .../src/agentic/tools/tool_context_runtime.rs | 0 .../src/agentic/tools/tool_result_storage.rs | 0 .../src/agentic/tools/user_input_manager.rs | 0 .../core/src/agentic/tools/workspace_paths.rs | 0 .../{ => facade}/core/src/agentic/util/mod.rs | 0 .../agentic/util/remote_workspace_layout.rs | 0 .../core/src/agentic/workspace.rs | 0 .../git-func-agent/ai_service.rs | 0 .../git-func-agent/commit_generator.rs | 0 .../git-func-agent/context_analyzer.rs | 0 .../src/function_agents/git-func-agent/mod.rs | 0 .../function_agents/git-func-agent/utils.rs | 0 .../core/src/function_agents/mod.rs | 0 .../core/src/function_agents/port_adapters.rs | 0 .../src/function_agents/runtime_services.rs | 0 .../startchat-func-agent/ai_service.rs | 0 .../startchat-func-agent/mod.rs | 0 .../startchat-func-agent/utils.rs | 0 .../work_state_analyzer.rs | 0 .../src/infrastructure/ai/client_factory.rs | 0 .../core/src/infrastructure/ai/mod.rs | 0 .../ai/tool_call_accumulator.rs | 0 .../core/src/infrastructure/app_paths/mod.rs | 0 .../infrastructure/app_paths/path_manager.rs | 0 .../infrastructure/cli_credentials/codex.rs | 0 .../infrastructure/cli_credentials/gemini.rs | 0 .../src/infrastructure/cli_credentials/mod.rs | 0 .../infrastructure/debug_log/http_server.rs | 0 .../core/src/infrastructure/debug_log/mod.rs | 0 .../src/infrastructure/debug_log/types.rs | 0 .../core/src/infrastructure/events/emitter.rs | 0 .../src/infrastructure/events/event_system.rs | 0 .../core/src/infrastructure/events/mod.rs | 0 .../core/src/infrastructure/filesystem/mod.rs | 0 .../core/src/infrastructure/mod.rs | 0 .../src/infrastructure/storage/cleanup.rs | 0 .../core/src/infrastructure/storage/mod.rs | 0 .../src/infrastructure/storage/persistence.rs | 0 src/crates/{ => facade}/core/src/lib.rs | 2 + .../core/src/miniapp/builtin/mod.rs | 0 .../{ => facade}/core/src/miniapp/compiler.rs | 0 .../{ => facade}/core/src/miniapp/exporter.rs | 0 .../core/src/miniapp/host_dispatch.rs | 0 .../core/src/miniapp/js_worker.rs | 0 .../core/src/miniapp/js_worker_pool.rs | 0 .../{ => facade}/core/src/miniapp/manager.rs | 0 .../{ => facade}/core/src/miniapp/mod.rs | 0 .../core/src/miniapp/runtime_detect.rs | 0 .../{ => facade}/core/src/miniapp/storage.rs | 0 .../facade/core/src/product_assembly.rs | 16 + .../core/src/product_domain_runtime.rs | 0 src/crates/facade/core/src/product_runtime.rs | 9 + .../src/product_runtime/runtime_services.rs} | 4 +- .../src/service/agent_memory/auto_memory.rs | 0 .../agent_memory/instruction_context.rs | 0 .../core/src/service/agent_memory/mod.rs | 0 .../features/en-US/shortcuts_v0_2_2.md | 0 .../features/zh-CN/shortcuts_v0_2_2.md | 0 .../features/zh-TW/shortcuts_v0_2_2.md | 0 .../tips/en-US/001_vibe_describe_task.md | 0 .../tips/en-US/002_quick_scene_switch.md | 0 .../tips/en-US/003_vibe_file_reference.md | 0 .../content/tips/en-US/004_slash_commands.md | 0 .../tips/en-US/005_vibe_break_tasks.md | 0 .../tips/en-US/006_drag_file_context.md | 0 .../content/tips/en-US/007_vibe_iterate.md | 0 .../content/tips/en-US/008_git_ai_commit.md | 0 .../content/tips/en-US/009_vibe_multi_turn.md | 0 .../content/tips/en-US/010_multi_model.md | 0 .../content/tips/en-US/011_vibe_explain.md | 0 .../tips/en-US/012_vibe_context_window.md | 0 .../content/tips/en-US/013_miniapp.md | 0 .../tips/en-US/014_vibe_prompt_patterns.md | 0 .../tips/en-US/015_snapshot_rollback.md | 0 .../tips/en-US/016_vibe_review_output.md | 0 .../tips/en-US/017_terminal_shortcut.md | 0 .../content/tips/en-US/020_lsp_diagnostics.md | 0 .../content/tips/en-US/021_session_history.md | 0 .../tips/zh-CN/001_vibe_describe_task.md | 0 .../tips/zh-CN/002_quick_scene_switch.md | 0 .../tips/zh-CN/003_vibe_file_reference.md | 0 .../content/tips/zh-CN/004_slash_commands.md | 0 .../tips/zh-CN/005_vibe_break_tasks.md | 0 .../tips/zh-CN/006_drag_file_context.md | 0 .../content/tips/zh-CN/007_vibe_iterate.md | 0 .../content/tips/zh-CN/008_git_ai_commit.md | 0 .../content/tips/zh-CN/009_vibe_multi_turn.md | 0 .../content/tips/zh-CN/010_multi_model.md | 0 .../content/tips/zh-CN/011_vibe_explain.md | 0 .../tips/zh-CN/012_vibe_context_window.md | 0 .../content/tips/zh-CN/013_miniapp.md | 0 .../tips/zh-CN/014_vibe_prompt_patterns.md | 0 .../tips/zh-CN/015_snapshot_rollback.md | 0 .../tips/zh-CN/016_vibe_review_output.md | 0 .../tips/zh-CN/017_terminal_shortcut.md | 0 .../content/tips/zh-CN/020_lsp_diagnostics.md | 0 .../content/tips/zh-CN/021_session_history.md | 0 .../tips/zh-TW/001_vibe_describe_task.md | 0 .../tips/zh-TW/002_quick_scene_switch.md | 0 .../tips/zh-TW/003_vibe_file_reference.md | 0 .../content/tips/zh-TW/004_slash_commands.md | 0 .../tips/zh-TW/005_vibe_break_tasks.md | 0 .../tips/zh-TW/006_drag_file_context.md | 0 .../content/tips/zh-TW/007_vibe_iterate.md | 0 .../content/tips/zh-TW/008_git_ai_commit.md | 0 .../content/tips/zh-TW/009_vibe_multi_turn.md | 0 .../content/tips/zh-TW/010_multi_model.md | 0 .../content/tips/zh-TW/011_vibe_explain.md | 0 .../tips/zh-TW/012_vibe_context_window.md | 0 .../content/tips/zh-TW/013_miniapp.md | 0 .../tips/zh-TW/014_vibe_prompt_patterns.md | 0 .../tips/zh-TW/015_snapshot_rollback.md | 0 .../tips/zh-TW/016_vibe_review_output.md | 0 .../tips/zh-TW/017_terminal_shortcut.md | 0 .../content/tips/zh-TW/020_lsp_diagnostics.md | 0 .../content/tips/zh-TW/021_session_history.md | 0 .../service/announcement/content_loader.rs | 0 .../core/src/service/announcement/mod.rs | 0 .../core/src/service/announcement/registry.rs | 0 .../core/src/service/announcement/remote.rs | 0 .../src/service/announcement/scheduler.rs | 0 .../src/service/announcement/state_store.rs | 0 .../src/service/announcement/tips_pool.rs | 0 .../core/src/service/announcement/types.rs | 0 .../src/service/bootstrap/bootstrap_impl.rs | 0 .../core/src/service/bootstrap/mod.rs | 0 .../service/bootstrap/templates/BOOTSTRAP.md | 0 .../service/bootstrap/templates/IDENTITY.md | 0 .../src/service/bootstrap/templates/SOUL.md | 0 .../src/service/bootstrap/templates/USER.md | 0 .../config/agent_profile_project_store.rs | 0 .../core/src/service/config/app_language.rs | 0 .../core/src/service/config/factory.rs | 0 .../core/src/service/config/global.rs | 0 .../core/src/service/config/manager.rs | 0 .../core/src/service/config/mod.rs | 0 .../config/mode_config_canonicalizer.rs | 0 .../core/src/service/config/providers.rs | 0 .../core/src/service/config/service.rs | 0 .../core/src/service/config/types.rs | 0 .../{ => facade}/core/src/service/cron/mod.rs | 0 .../core/src/service/cron/schedule.rs | 0 .../core/src/service/cron/service.rs | 0 .../core/src/service/cron/store.rs | 0 .../core/src/service/cron/subscriber.rs | 0 .../core/src/service/cron/types.rs | 0 .../core/src/service/filesystem/factory.rs | 0 .../core/src/service/filesystem/listing.rs | 0 .../core/src/service/filesystem/mod.rs | 0 .../core/src/service/filesystem/service.rs | 0 .../core/src/service/filesystem/types.rs | 0 .../core/src/service/git/git_service.rs | 0 .../core/src/service/git/git_types.rs | 0 .../core/src/service/git/git_utils.rs | 0 .../core/src/service/git/graph.rs | 0 .../{ => facade}/core/src/service/git/mod.rs | 0 .../service/i18n/generated_locale_contract.rs | 33 +- .../core/src/service/i18n/locale_registry.rs | 0 .../{ => facade}/core/src/service/i18n/mod.rs | 0 .../core/src/service/i18n/model_copy.rs | 0 .../core/src/service/i18n/service.rs | 0 .../core/src/service/i18n/types.rs | 0 .../core/src/service/lsp/config_watcher.rs | 0 .../core/src/service/lsp/debouncer.rs | 0 .../core/src/service/lsp/file_sync.rs | 0 .../core/src/service/lsp/global.rs | 0 .../core/src/service/lsp/manager.rs | 0 .../{ => facade}/core/src/service/lsp/mod.rs | 0 .../core/src/service/lsp/plugin_loader.rs | 0 .../core/src/service/lsp/process.rs | 0 .../core/src/service/lsp/project_detector.rs | 0 .../core/src/service/lsp/protocol.rs | 0 .../core/src/service/lsp/registry.rs | 0 .../core/src/service/lsp/types.rs | 0 .../core/src/service/lsp/workspace_manager.rs | 0 .../core/src/service/mcp/adapter/context.rs | 0 .../core/src/service/mcp/adapter/mod.rs | 0 .../core/src/service/mcp/adapter/prompt.rs | 0 .../core/src/service/mcp/adapter/resource.rs | 0 .../core/src/service/mcp/adapter/tool.rs | 0 .../{ => facade}/core/src/service/mcp/auth.rs | 0 .../src/service/mcp/config/cursor_format.rs | 0 .../src/service/mcp/config/json_config.rs | 0 .../core/src/service/mcp/config/location.rs | 0 .../core/src/service/mcp/config/mod.rs | 0 .../core/src/service/mcp/config/service.rs | 0 .../{ => facade}/core/src/service/mcp/mod.rs | 0 .../core/src/service/mcp/protocol/jsonrpc.rs | 0 .../core/src/service/mcp/protocol/mod.rs | 0 .../src/service/mcp/protocol/transport.rs | 0 .../service/mcp/protocol/transport_remote.rs | 0 .../core/src/service/mcp/protocol/types.rs | 0 .../core/src/service/mcp/server/config.rs | 0 .../core/src/service/mcp/server/connection.rs | 0 .../src/service/mcp/server/manager/auth.rs | 0 .../src/service/mcp/server/manager/catalog.rs | 0 .../service/mcp/server/manager/interaction.rs | 0 .../service/mcp/server/manager/lifecycle.rs | 0 .../src/service/mcp/server/manager/mod.rs | 0 .../service/mcp/server/manager/reconnect.rs | 0 .../src/service/mcp/server/manager/tests.rs | 0 .../src/service/mcp/server/manager/tools.rs | 0 .../core/src/service/mcp/server/mod.rs | 0 .../core/src/service/mcp/server/process.rs | 0 .../core/src/service/mcp/server/registry.rs | 0 .../core/src/service/mcp/tool_info.rs | 0 .../core/src/service/mcp/tool_name.rs | 0 .../{ => facade}/core/src/service/mod.rs | 0 .../project_context/builtin_documents.rs | 0 .../service/project_context/cancellation.rs | 0 .../project_context/document_template.rs | 0 .../project_context/generation_prompt.rs | 0 .../core/src/service/project_context/mod.rs | 0 .../src/service/project_context/service.rs | 0 .../core/src/service/project_context/types.rs | 0 .../remote_connect/bot/command_router.rs | 0 .../src/service/remote_connect/bot/feishu.rs | 0 .../src/service/remote_connect/bot/locale.rs | 0 .../src/service/remote_connect/bot/menu.rs | 0 .../src/service/remote_connect/bot/mod.rs | 0 .../service/remote_connect/bot/telegram.rs | 0 .../src/service/remote_connect/bot/weixin.rs | 0 .../core/src/service/remote_connect/device.rs | 0 .../service/remote_connect/embedded_relay.rs | 0 .../src/service/remote_connect/encryption.rs | 0 .../core/src/service/remote_connect/lan.rs | 0 .../core/src/service/remote_connect/mod.rs | 0 .../core/src/service/remote_connect/ngrok.rs | 0 .../src/service/remote_connect/pairing.rs | 0 .../service/remote_connect/qr_generator.rs | 0 .../service/remote_connect/relay_client.rs | 0 .../service/remote_connect/remote_server.rs | 22 +- .../core/src/service/remote_ssh/disabled.rs | 0 .../core/src/service/remote_ssh/manager.rs | 0 .../core/src/service/remote_ssh/mod.rs | 0 .../src/service/remote_ssh/password_vault.rs | 0 .../core/src/service/remote_ssh/remote_fs.rs | 0 .../src/service/remote_ssh/remote_terminal.rs | 0 .../core/src/service/remote_ssh/types.rs | 0 .../src/service/remote_ssh/workspace_state.rs | 0 .../core/src/service/review_platform/mod.rs | 0 .../core/src/service/runtime/mod.rs | 0 .../src/service/search/flashgrep/client.rs | 0 .../src/service/search/flashgrep/error.rs | 0 .../core/src/service/search/flashgrep/mod.rs | 0 .../src/service/search/flashgrep/protocol.rs | 0 .../service/search/flashgrep/repo_session.rs | 0 .../service/search/flashgrep/rpc_client.rs | 0 .../src/service/search/flashgrep/types.rs | 0 .../core/src/service/search/mod.rs | 0 .../core/src/service/search/remote.rs | 2 +- .../src/service/search/remote_disabled.rs | 0 .../core/src/service/search/service.rs | 2 +- .../core/src/service/search/types.rs | 0 .../core/src/service/session/mod.rs | 0 .../core/src/service/session_usage/mod.rs | 0 .../core/src/service/session_usage/service.rs | 0 .../core/src/service/snapshot/events.rs | 0 .../src/service/snapshot/file_lock_manager.rs | 0 .../src/service/snapshot/isolation_manager.rs | 0 .../core/src/service/snapshot/manager.rs | 0 .../core/src/service/snapshot/mod.rs | 0 .../core/src/service/snapshot/service.rs | 0 .../src/service/snapshot/snapshot_core.rs | 0 .../src/service/snapshot/snapshot_system.rs | 0 .../core/src/service/snapshot/types.rs | 0 .../core/src/service/token_usage/mod.rs | 0 .../core/src/service/token_usage/service.rs | 0 .../src/service/token_usage/subscriber.rs | 0 .../core/src/service/workspace/factory.rs | 0 .../src/service/workspace/identity_watch.rs | 0 .../core/src/service/workspace/manager.rs | 0 .../core/src/service/workspace/mod.rs | 0 .../core/src/service/workspace/provider.rs | 0 .../core/src/service/workspace/service.rs | 0 .../core/src/service/workspace_runtime/mod.rs | 0 .../src/service/workspace_runtime/service.rs | 0 .../src/service/workspace_runtime/types.rs | 0 .../core/src/service_agent_runtime.rs | 0 .../{ => facade}/core/src/util/errors.rs | 0 .../core/src/util/front_matter_markdown.rs | 0 .../core/src/util/json_extract.rs | 0 src/crates/{ => facade}/core/src/util/mod.rs | 0 .../core/src/util/plain_output.rs | 0 .../{ => facade}/core/src/util/timing.rs | 0 .../core/src/util/token_counter.rs | 0 .../{ => facade}/core/src/util/types/ai.rs | 0 .../core/src/util/types/config.rs | 0 .../{ => facade}/core/src/util/types/core.rs | 0 .../{ => facade}/core/src/util/types/event.rs | 0 .../core/src/util/types/message.rs | 0 .../{ => facade}/core/src/util/types/mod.rs | 0 .../{ => facade}/core/src/util/types/tool.rs | 0 .../src/util}/types/tool_image_attachment.rs | 0 .../core/tests/context_profile.rs | 0 .../{ => facade}/core/tests/git_contracts.rs | 0 .../core/tests/product_assembly.rs | 17 +- .../core/tests/remote_mcp_streamable_http.rs | 0 src/crates/integrations/AGENTS-CN.md | 26 ++ src/crates/integrations/AGENTS.md | 34 ++ .../{ => integrations}/ai-adapters/AGENTS.md | 4 +- .../{ => integrations}/ai-adapters/Cargo.toml | 2 +- .../{ => integrations}/ai-adapters/README.md | 0 .../ai-adapters/src/client.rs | 1 - .../ai-adapters/src/client/format.rs | 0 .../ai-adapters/src/client/healthcheck.rs | 0 .../ai-adapters/src/client/http.rs | 0 .../ai-adapters/src/client/quirks.rs | 0 .../src/client/response_aggregator.rs | 0 .../ai-adapters/src/client/sse.rs | 14 +- .../ai-adapters/src/client/utils.rs | 0 .../ai-adapters/src/diagnostics.rs | 0 .../{ => integrations}/ai-adapters/src/lib.rs | 0 .../src/providers/anthropic/discovery.rs | 0 .../providers/anthropic/message_converter.rs | 0 .../src/providers/anthropic/mod.rs | 0 .../src/providers/anthropic/request.rs | 0 .../src/providers/gemini/code_assist.rs | 0 .../src/providers/gemini/discovery.rs | 0 .../src/providers/gemini/message_converter.rs | 0 .../ai-adapters/src/providers/gemini/mod.rs | 0 .../src/providers/gemini/request.rs | 0 .../ai-adapters/src/providers/mod.rs | 0 .../ai-adapters/src/providers/openai/chat.rs | 0 .../src/providers/openai/codex_chatgpt.rs | 0 .../src/providers/openai/common.rs | 0 .../src/providers/openai/message_converter.rs | 0 .../ai-adapters/src/providers/openai/mod.rs | 0 .../src/providers/openai/responses.rs | 0 .../ai-adapters/src/providers/shared.rs | 0 .../ai-adapters/src/stream/mod.rs | 0 .../src/stream/stream_handler/anthropic.rs | 0 .../src/stream/stream_handler/gemini.rs | 0 .../src/stream/stream_handler/inline_think.rs | 0 .../src/stream/stream_handler/mod.rs | 0 .../src/stream/stream_handler/openai.rs | 0 .../src/stream/stream_handler/responses.rs | 0 .../src/stream/stream_handler/stream_stats.rs | 0 .../ai-adapters/src/stream/types/anthropic.rs | 5 +- .../ai-adapters/src/stream/types/gemini.rs | 6 +- .../ai-adapters/src/stream/types/mod.rs | 0 .../ai-adapters/src/stream/types/openai.rs | 28 +- .../ai-adapters/src/stream/types/responses.rs | 4 +- .../ai-adapters/src/stream/types/unified.rs | 0 .../ai-adapters/src/tool_call_accumulator.rs | 3 +- .../ai-adapters/src/types/ai.rs | 0 .../ai-adapters/src/types/config.rs | 0 .../ai-adapters/src/types/message.rs | 0 .../ai-adapters/src/types/mod.rs | 0 .../ai-adapters/src/types/tool.rs | 0 .../src}/types/tool_image_attachment.rs | 0 .../{ => integrations}/api-layer/AGENTS.md | 2 +- .../{ => integrations}/api-layer/Cargo.toml | 0 .../{ => integrations}/api-layer/src/dto.rs | 0 .../api-layer/src/handlers.rs | 0 .../{ => integrations}/api-layer/src/lib.rs | 0 .../{ => integrations}/transport/AGENTS.md | 2 +- .../{ => integrations}/transport/Cargo.toml | 2 +- .../transport/src/adapters/cli.rs | 0 .../transport/src/adapters/mod.rs | 0 .../transport/src/adapters/tauri.rs | 0 .../transport/src/adapters/websocket.rs | 0 .../transport/src/emitter.rs | 0 .../transport/src/event_bus.rs | 0 .../transport/src/events.rs | 0 .../{ => integrations}/transport/src/lib.rs | 0 .../transport/src/traits.rs | 0 .../{ => integrations}/webdriver/AGENTS.md | 2 +- .../{ => integrations}/webdriver/Cargo.toml | 0 .../webdriver/src/executor/element/actions.rs | 0 .../webdriver/src/executor/element/lookup.rs | 0 .../webdriver/src/executor/element/mod.rs | 0 .../webdriver/src/executor/element/read.rs | 0 .../webdriver/src/executor/element/shadow.rs | 0 .../webdriver/src/executor/interaction.rs | 0 .../webdriver/src/executor/mod.rs | 0 .../webdriver/src/executor/navigation.rs | 0 .../webdriver/src/executor/session.rs | 0 .../webdriver/src/executor/window.rs | 0 .../{ => integrations}/webdriver/src/lib.rs | 0 .../webdriver/src/platform/capture.rs | 0 .../webdriver/src/platform/evaluator/macos.rs | 0 .../webdriver/src/platform/evaluator/mod.rs | 0 .../src/platform/evaluator/windows.rs | 0 .../webdriver/src/platform/image.rs | 0 .../webdriver/src/platform/mod.rs | 0 .../webdriver/src/platform/types.rs | 0 .../webdriver/src/runtime/api/element.rs | 0 .../webdriver/src/runtime/api/interaction.rs | 0 .../webdriver/src/runtime/api/mod.rs | 0 .../webdriver/src/runtime/api/navigation.rs | 0 .../webdriver/src/runtime/mod.rs | 0 .../webdriver/src/runtime/script.rs | 0 .../src/runtime/script/core/alert.rs | 0 .../src/runtime/script/core/context.rs | 0 .../src/runtime/script/core/cookie.rs | 0 .../src/runtime/script/core/execution.rs | 0 .../src/runtime/script/core/locator.rs | 0 .../webdriver/src/runtime/script/core/mod.rs | 0 .../src/runtime/script/core/runtime.rs | 0 .../src/runtime/script/core/shadow.rs | 0 .../src/runtime/script/core/store.rs | 0 .../src/runtime/script/core/visibility.rs | 0 .../webdriver/src/runtime/script/input.rs | 0 .../src/runtime/script/keyboard/edit.rs | 0 .../src/runtime/script/keyboard/event.rs | 0 .../src/runtime/script/keyboard/focus.rs | 0 .../src/runtime/script/keyboard/mapping.rs | 0 .../src/runtime/script/keyboard/mod.rs | 0 .../src/runtime/script/pointer/key_source.rs | 0 .../src/runtime/script/pointer/mod.rs | 0 .../src/runtime/script/pointer/mouse.rs | 0 .../src/runtime/script/pointer/perform.rs | 0 .../runtime/script/pointer/pointer_source.rs | 0 .../src/runtime/script/pointer/release.rs | 0 .../src/runtime/script/pointer/wheel.rs | 0 .../runtime/script/pointer/wheel_source.rs | 0 .../webdriver/src/server/handlers/actions.rs | 0 .../webdriver/src/server/handlers/alert.rs | 0 .../webdriver/src/server/handlers/cookie.rs | 0 .../webdriver/src/server/handlers/element.rs | 0 .../webdriver/src/server/handlers/frame.rs | 0 .../webdriver/src/server/handlers/logs.rs | 0 .../webdriver/src/server/handlers/mod.rs | 0 .../src/server/handlers/navigation.rs | 0 .../webdriver/src/server/handlers/print.rs | 0 .../src/server/handlers/screenshot.rs | 0 .../webdriver/src/server/handlers/script.rs | 0 .../webdriver/src/server/handlers/session.rs | 0 .../webdriver/src/server/handlers/shadow.rs | 0 .../webdriver/src/server/handlers/timeouts.rs | 0 .../webdriver/src/server/handlers/window.rs | 0 .../webdriver/src/server/mod.rs | 0 .../webdriver/src/server/response.rs | 0 .../webdriver/src/server/router.rs | 0 .../webdriver/src/webdriver/element.rs | 0 .../webdriver/src/webdriver/locator.rs | 0 .../webdriver/src/webdriver/mod.rs | 0 .../webdriver/src/webdriver/session.rs | 0 src/crates/product/AGENTS-CN.md | 25 ++ src/crates/product/AGENTS.md | 33 ++ .../product-capabilities/AGENTS.md | 7 +- .../product-capabilities/Cargo.toml | 6 +- .../product-capabilities/src/lib.rs | 8 +- .../tests/product_capabilities.rs | 0 .../product-domains/AGENTS-CN.md | 2 +- .../{ => product}/product-domains/AGENTS.md | 2 +- .../{ => product}/product-domains/Cargo.toml | 0 .../src/function_agents/common.rs | 0 .../git_func_agent/context_analyzer.rs | 0 .../src/function_agents/git_func_agent/mod.rs | 0 .../git_func_agent/prompts/commit_message.md | 0 .../function_agents/git_func_agent/types.rs | 0 .../function_agents/git_func_agent/utils.rs | 0 .../src/function_agents/mod.rs | 0 .../src/function_agents/ports.rs | 0 .../startchat_func_agent/mod.rs | 0 .../prompts/work_state_analysis.md | 0 .../startchat_func_agent/types.rs | 0 .../startchat_func_agent/utils.rs | 2 +- .../{ => product}/product-domains/src/lib.rs | 0 .../src/miniapp/bridge_builder.rs | 0 .../product-domains/src/miniapp/builtin.rs | 0 .../builtin/assets/coding-selfie/index.html | 0 .../builtin/assets/coding-selfie/meta.json | 0 .../builtin/assets/coding-selfie/style.css | 0 .../builtin/assets/coding-selfie/ui.js | 0 .../builtin/assets/coding-selfie/worker.js | 0 .../builtin/assets/divination/index.html | 0 .../builtin/assets/divination/meta.json | 0 .../builtin/assets/divination/style.css | 0 .../miniapp/builtin/assets/divination/ui.js | 0 .../builtin/assets/divination/worker.js | 0 .../miniapp/builtin/assets/gomoku/index.html | 0 .../miniapp/builtin/assets/gomoku/meta.json | 0 .../miniapp/builtin/assets/gomoku/style.css | 0 .../src/miniapp/builtin/assets/gomoku/ui.js | 0 .../miniapp/builtin/assets/gomoku/worker.js | 0 .../builtin/assets/pr-review/index.html | 0 .../builtin/assets/pr-review/meta.json | 0 .../builtin/assets/pr-review/style.css | 0 .../miniapp/builtin/assets/pr-review/ui.js | 0 .../builtin/assets/pr-review/worker.js | 0 .../assets/regex-playground/index.html | 0 .../builtin/assets/regex-playground/meta.json | 0 .../builtin/assets/regex-playground/style.css | 0 .../builtin/assets/regex-playground/ui.js | 0 .../builtin/assets/regex-playground/worker.js | 0 .../product-domains/src/miniapp/compiler.rs | 0 .../src/miniapp/customization.rs | 0 .../product-domains/src/miniapp/draft.rs | 0 .../product-domains/src/miniapp/exporter.rs | 0 .../src/miniapp/host_routing.rs | 0 .../product-domains/src/miniapp/lifecycle.rs | 0 .../product-domains/src/miniapp/mod.rs | 0 .../src/miniapp/permission_policy.rs | 0 .../product-domains/src/miniapp/ports.rs | 2 +- .../product-domains/src/miniapp/runtime.rs | 0 .../product-domains/src/miniapp/storage.rs | 0 .../product-domains/src/miniapp/types.rs | 0 .../product-domains/src/miniapp/worker.rs | 0 .../tests/function_agent_contracts.rs | 9 +- .../tests/miniapp_contracts.rs | 0 src/crates/services/AGENTS-CN.md | 27 ++ src/crates/services/AGENTS.md | 40 +++ .../{ => services}/services-core/AGENTS.md | 2 +- .../{ => services}/services-core/Cargo.toml | 2 +- .../services-core/src/diagnostics/mod.rs | 0 .../src/diagnostics/redaction.rs | 0 .../services-core/src/diff/mod.rs | 0 .../services-core/src/diff/service.rs | 0 .../services-core/src/diff/types.rs | 0 .../services-core/src/filesystem/error.rs | 0 .../services-core/src/filesystem/factory.rs | 0 .../services-core/src/filesystem/listing.rs | 0 .../services-core/src/filesystem/mod.rs | 0 .../src/filesystem/operations.rs | 0 .../services-core/src/filesystem/service.rs | 0 .../services-core/src/filesystem/tree.rs | 0 .../services-core/src/filesystem/types.rs | 0 .../{ => services}/services-core/src/lib.rs | 0 .../services-core/src/process_manager.rs | 0 .../services-core/src/session/mod.rs | 0 .../services-core/src/session/types.rs | 0 .../src/session_usage/classifier.rs | 0 .../services-core/src/session_usage/mod.rs | 0 .../src/session_usage/redaction.rs | 0 .../services-core/src/session_usage/render.rs | 0 .../services-core/src/session_usage/types.rs | 0 .../services-core/src/system/command.rs | 0 .../services-core/src/system/info.rs | 0 .../services-core/src/system/mod.rs | 0 .../services-core/src/token_usage/mod.rs | 0 .../services-core/src/token_usage/types.rs | 0 .../tests/diagnostic_log_redaction.rs | 0 .../services-core/tests/service_contracts.rs | 0 .../services-core/tests/session_contracts.rs | 0 .../tests/session_usage_contracts.rs | 0 .../tests/token_usage_contracts.rs | 0 .../services-integrations/AGENTS.md | 2 +- .../services-integrations/Cargo.toml | 6 +- .../src/announcement/mod.rs | 0 .../src/announcement/state_store.rs | 0 .../src/announcement/types.rs | 0 .../src/file_watch/mod.rs | 0 .../src/file_watch/service.rs | 0 .../src/file_watch/types.rs | 0 .../src/function_agents.rs | 0 .../services-integrations/src/git/args.rs | 0 .../services-integrations/src/git/error.rs | 0 .../services-integrations/src/git/graph.rs | 0 .../services-integrations/src/git/mod.rs | 0 .../src/git/name_status.rs | 0 .../services-integrations/src/git/service.rs | 0 .../services-integrations/src/git/text.rs | 0 .../services-integrations/src/git/types.rs | 0 .../services-integrations/src/git/utils.rs | 0 .../services-integrations/src/git/worktree.rs | 0 .../services-integrations/src/lib.rs | 0 .../src/mcp/adapter/context.rs | 0 .../src/mcp/adapter/mod.rs | 0 .../src/mcp/adapter/prompt.rs | 0 .../src/mcp/adapter/resource.rs | 0 .../src/mcp/adapter/tool.rs | 0 .../services-integrations/src/mcp/auth.rs | 0 .../src/mcp/config/cursor_format.rs | 0 .../src/mcp/config/json_config.rs | 0 .../src/mcp/config/location.rs | 0 .../src/mcp/config/mod.rs | 0 .../src/mcp/config/service.rs | 0 .../src/mcp/config/service_helpers.rs | 0 .../services-integrations/src/mcp/mod.rs | 0 .../src/mcp/protocol/client_info.rs | 0 .../src/mcp/protocol/jsonrpc.rs | 0 .../src/mcp/protocol/mod.rs | 0 .../src/mcp/protocol/rmcp_mapping.rs | 0 .../src/mcp/protocol/transport.rs | 0 .../src/mcp/protocol/transport_remote.rs | 0 .../src/mcp/protocol/types.rs | 0 .../src/mcp/runtime_error.rs | 0 .../src/mcp/server/catalog_cache.rs | 0 .../src/mcp/server/connection.rs | 0 .../src/mcp/server/mod.rs | 0 .../src/mcp/server/process.rs | 0 .../src/mcp/server/runtime_helpers.rs | 0 .../src/mcp/server/runtime_policy.rs | 0 .../src/mcp/tool_info.rs | 0 .../src/mcp/tool_name.rs | 0 .../src/remote_connect.rs | 0 .../src/remote_ssh/mod.rs | 0 .../src/remote_ssh/paths.rs | 0 .../src/remote_ssh/types.rs | 0 .../src/remote_ssh/workspace_registry.rs | 0 .../tests/announcement_contracts.rs | 0 .../tests/file_watch_contracts.rs | 0 .../tests/function_agent_contracts.rs | 0 .../tests/git_contracts.rs | 0 .../tests/mcp_contracts.rs | 0 .../tests/remote_connect_contracts.rs | 33 +- .../tests/remote_ssh_contracts.rs | 0 src/crates/{ => services}/terminal/AGENTS.md | 2 +- src/crates/{ => services}/terminal/Cargo.toml | 0 .../docs/STREAMING_OUTPUT_COLLECTION.md | 0 src/crates/{ => services}/terminal/src/api.rs | 0 .../{ => services}/terminal/src/config/mod.rs | 0 .../terminal/src/config/types.rs | 0 .../{ => services}/terminal/src/events.rs | 0 src/crates/{ => services}/terminal/src/lib.rs | 0 .../terminal/src/pty/data_bufferer.rs | 0 .../{ => services}/terminal/src/pty/mod.rs | 0 .../terminal/src/pty/process.rs | 0 .../terminal/src/pty/service.rs | 0 .../terminal/src/session/binding.rs | 0 .../terminal/src/session/manager.rs | 0 .../terminal/src/session/mod.rs | 0 .../terminal/src/session/persistent.rs | 0 .../terminal/src/session/serializer.rs | 0 .../terminal/src/session/singleton.rs | 0 .../terminal/src/shell/detection.rs | 0 .../terminal/src/shell/integration.rs | 0 .../{ => services}/terminal/src/shell/mod.rs | 0 .../terminal/src/shell/profiles.rs | 0 .../shell/scripts/shellIntegration-bash.sh | 0 .../src/shell/scripts/shellIntegration-rc.zsh | 0 .../src/shell/scripts/shellIntegration.fish | 0 .../src/shell/scripts/shellIntegration.ps1 | 0 .../terminal/src/shell/scripts_manager.rs | 0 src/crates/surfaces/AGENTS-CN.md | 22 ++ src/crates/surfaces/AGENTS.md | 28 ++ src/crates/surfaces/acp/AGENTS-CN.md | 20 ++ src/crates/{ => surfaces}/acp/AGENTS.md | 10 +- src/crates/{ => surfaces}/acp/Cargo.toml | 6 +- .../acp/src/client/builtin_clients.rs | 0 .../{ => surfaces}/acp/src/client/config.rs | 0 .../{ => surfaces}/acp/src/client/manager.rs | 0 .../{ => surfaces}/acp/src/client/mod.rs | 0 .../acp/src/client/remote_capability_store.rs | 0 .../acp/src/client/remote_session.rs | 0 .../acp/src/client/remote_shell.rs | 0 .../acp/src/client/requirements.rs | 0 .../acp/src/client/session_options.rs | 0 .../acp/src/client/session_persistence.rs | 0 .../{ => surfaces}/acp/src/client/stream.rs | 0 .../{ => surfaces}/acp/src/client/tool.rs | 0 .../acp/src/client/tool_card_bridge/mod.rs | 0 .../src/client/tool_card_bridge/tool_name.rs | 0 .../client/tool_card_bridge/tool_params.rs | 0 src/crates/{ => surfaces}/acp/src/lib.rs | 0 src/crates/{ => surfaces}/acp/src/runtime.rs | 0 .../{ => surfaces}/acp/src/runtime/content.rs | 0 .../{ => surfaces}/acp/src/runtime/events.rs | 5 +- .../{ => surfaces}/acp/src/runtime/mcp.rs | 0 .../{ => surfaces}/acp/src/runtime/model.rs | 0 .../{ => surfaces}/acp/src/runtime/prompt.rs | 0 .../{ => surfaces}/acp/src/runtime/session.rs | 0 .../acp/src/runtime/thinking.rs | 0 src/crates/{ => surfaces}/acp/src/server.rs | 0 src/shared/i18n/contract/locales.json | 2 +- .../DeepReviewConsentDialog.test.tsx | 2 +- .../src/flow_chat/deep-review/AGENTS.md | 2 +- .../deep-review/launch/commandParser.test.ts | 4 +- .../deep-review/launch/targetResolver.test.ts | 2 +- .../services/DeepReviewService.test.ts | 12 +- .../utils/deepReviewContinuation.test.ts | 2 +- .../services/review-team/pathMetadata.test.ts | 16 + .../services/review-team/pathMetadata.ts | 42 ++- .../shared/services/review-team/risk.test.ts | 24 ++ .../src/shared/services/review-team/risk.ts | 3 +- .../services/reviewTargetClassifier.test.ts | 31 +- .../shared/services/reviewTargetClassifier.ts | 32 +- .../shared/services/reviewTeamService.test.ts | 58 +-- 1318 files changed, 1896 insertions(+), 1097 deletions(-) create mode 100644 scripts/core-boundaries/rules/crate-layout.mjs delete mode 100644 src/crates/acp/AGENTS-CN.md create mode 100644 src/crates/contracts/AGENTS-CN.md create mode 100644 src/crates/contracts/AGENTS.md rename src/crates/{ => contracts}/core-types/AGENTS.md (93%) rename src/crates/{ => contracts}/core-types/Cargo.toml (100%) rename src/crates/{ => contracts}/core-types/src/errors.rs (100%) rename src/crates/{ => contracts}/core-types/src/lib.rs (100%) rename src/crates/{ => contracts}/core-types/src/session.rs (100%) rename src/crates/{ => contracts}/core-types/src/surface.rs (100%) rename src/crates/{ => contracts}/core-types/src/tool_image_attachment.rs (100%) rename src/crates/{ => contracts}/core-types/tests/session_contracts.rs (100%) rename src/crates/{ => contracts}/core-types/tests/surface_contracts.rs (100%) rename src/crates/{ => contracts}/events/AGENTS.md (93%) rename src/crates/{ => contracts}/events/Cargo.toml (100%) rename src/crates/{ => contracts}/events/src/agentic.rs (100%) rename src/crates/{ => contracts}/events/src/emitter.rs (100%) rename src/crates/{ => contracts}/events/src/lib.rs (100%) rename src/crates/{ => contracts}/events/src/types.rs (100%) rename src/crates/{ => contracts}/runtime-ports/AGENTS.md (94%) rename src/crates/{ => contracts}/runtime-ports/Cargo.toml (100%) rename src/crates/{ => contracts}/runtime-ports/src/lib.rs (100%) rename src/crates/{ => contracts}/runtime-ports/tests/session_store_contracts.rs (100%) create mode 100644 src/crates/execution/AGENTS-CN.md create mode 100644 src/crates/execution/AGENTS.md rename src/crates/{ => execution}/agent-runtime/AGENTS.md (97%) rename src/crates/{ => execution}/agent-runtime/Cargo.toml (86%) rename src/crates/{ => execution}/agent-runtime/src/agents.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/custom_subagent.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/events.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/lib.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/post_call_hooks.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/prompt.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/prompt_cache.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/scheduled_job.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/scheduler.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/session_control.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/thread_goal.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/thread_goal/templates/budget_limit.md (100%) rename src/crates/{ => execution}/agent-runtime/src/thread_goal/templates/continuation.md (100%) rename src/crates/{ => execution}/agent-runtime/src/thread_goal/templates/objective_updated.md (100%) rename src/crates/{ => execution}/agent-runtime/src/thread_goal_tools.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/tool_confirmation.rs (100%) rename src/crates/{ => execution}/agent-runtime/src/user_questions.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/agent_registry_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/custom_subagent_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/custom_subagent_discovery_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/events_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/post_call_hook_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/post_call_hook_execution_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/prompt_cache_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/prompt_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/scheduled_job_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/scheduler_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/session_control_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/thread_goal_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/thread_goal_tool_handler_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/tool_confirmation_contracts.rs (100%) rename src/crates/{ => execution}/agent-runtime/tests/user_question_tool_contracts.rs (100%) rename src/crates/{ => execution}/agent-stream/AGENTS.md (93%) rename src/crates/{ => execution}/agent-stream/Cargo.toml (84%) rename src/crates/{ => execution}/agent-stream/src/lib.rs (100%) rename src/crates/{ => execution}/agent-stream/tests/common/fixture_loader.rs (100%) rename src/crates/{ => execution}/agent-stream/tests/common/mod.rs (100%) rename src/crates/{ => execution}/agent-stream/tests/common/sse_fixture_server.rs (100%) rename src/crates/{ => execution}/agent-stream/tests/common/stream_test_harness.rs (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/anthropic/closed_after_message_delta.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/anthropic/empty_thinking_signature_text_and_tool_use.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/anthropic/extended_thinking.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/anthropic/inline_think_text.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/anthropic/interleaved_parallel_tool_use.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/anthropic/malformed_content_block_delta.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/anthropic/malformed_tool_arguments_extra_brace.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/gemini/function_call_string_args.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/empty_reasoning_content_text_and_tool_call.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/inline_think_text.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/interleaved_parallel_tool_args_by_index.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/thinking_text_three_tools_with_empty_toolcall_anomaly.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/tool_args_snapshot_stop_reason.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/tool_args_split_with_usage.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/tool_call_missing_type_field.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/tool_call_trailing_empty_args_finish_chunk.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/tool_id_only_orphan_filtered.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/tool_id_prelude_then_payload_without_id.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/openai/two_tools_first_final_chunk_contains_orphan_id_only.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/fixtures/stream/responses/malformed_function_call_arguments.sse (100%) rename src/crates/{ => execution}/agent-stream/tests/stream_processor_anthropic.rs (100%) rename src/crates/{ => execution}/agent-stream/tests/stream_processor_openai.rs (99%) rename src/crates/{ => execution}/agent-stream/tests/stream_processor_tool_arguments.rs (100%) rename src/crates/{ => execution}/agent-stream/tests/stream_replay_regressions.rs (99%) rename src/crates/{ => execution}/agent-stream/tests/stream_test_harness.rs (100%) rename src/crates/{ => execution}/agent-tools/AGENTS.md (95%) rename src/crates/{ => execution}/agent-tools/Cargo.toml (76%) rename src/crates/{ => execution}/agent-tools/src/execution_gate.rs (100%) rename src/crates/{ => execution}/agent-tools/src/file_guidance.rs (100%) rename src/crates/{ => execution}/agent-tools/src/file_read_freshness.rs (100%) rename src/crates/{ => execution}/agent-tools/src/framework.rs (100%) rename src/crates/{ => execution}/agent-tools/src/input_validator.rs (100%) rename src/crates/{ => execution}/agent-tools/src/lib.rs (100%) rename src/crates/{ => execution}/agent-tools/src/tool_execution_presentation.rs (100%) rename src/crates/{ => execution}/agent-tools/src/tool_result_storage.rs (100%) rename src/crates/{ => execution}/agent-tools/tests/tool_contracts.rs (100%) rename src/crates/{ => execution}/harness/AGENTS.md (95%) rename src/crates/{ => execution}/harness/Cargo.toml (100%) rename src/crates/{ => execution}/harness/src/lib.rs (100%) rename src/crates/{ => execution}/harness/tests/registry.rs (100%) rename src/crates/{ => execution}/runtime-services/AGENTS.md (93%) rename src/crates/{ => execution}/runtime-services/Cargo.toml (85%) rename src/crates/{ => execution}/runtime-services/src/lib.rs (100%) rename src/crates/{ => execution}/runtime-services/src/test_support.rs (100%) rename src/crates/{ => execution}/runtime-services/tests/runtime_services_contracts.rs (100%) rename src/crates/{ => execution}/tool-packs/AGENTS.md (95%) rename src/crates/{ => execution}/tool-packs/Cargo.toml (100%) rename src/crates/{ => execution}/tool-packs/src/lib.rs (100%) rename src/crates/{ => execution}/tool-runtime/AGENTS.md (94%) rename src/crates/{ => execution}/tool-runtime/Cargo.toml (100%) rename src/crates/{ => execution}/tool-runtime/src/fs/backend.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/fs/delete_path.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/fs/edit_file.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/fs/list_dir.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/fs/mod.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/fs/read_file.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/fs/write_file.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/lib.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/search/glob_search.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/search/grep_search.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/search/mod.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/util/ansi_cleaner.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/util/mod.rs (100%) rename src/crates/{ => execution}/tool-runtime/src/util/read_line_prefix.rs (98%) rename src/crates/{ => execution}/tool-runtime/src/util/string.rs (100%) rename src/crates/{ => execution}/tool-runtime/tests/tool_io_contracts.rs (100%) create mode 100644 src/crates/facade/AGENTS-CN.md create mode 100644 src/crates/facade/AGENTS.md rename src/crates/{ => facade}/core/AGENTS-CN.md (81%) rename src/crates/{ => facade}/core/AGENTS.md (84%) rename src/crates/{ => facade}/core/Cargo.toml (80%) rename src/crates/{ => facade}/core/build.rs (99%) rename src/crates/{ => facade}/core/builtin_playbooks/browser_data_extraction.yaml (100%) rename src/crates/{ => facade}/core/builtin_playbooks/browser_form_fill.yaml (100%) rename src/crates/{ => facade}/core/builtin_playbooks/browser_screenshot.yaml (100%) rename src/crates/{ => facade}/core/builtin_playbooks/desktop_app_automation.yaml (100%) rename src/crates/{ => facade}/core/builtin_playbooks/im_send_message.yaml (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/references/authentication.md (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/references/commands.md (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/references/profiling.md (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/references/proxy-support.md (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/references/session-management.md (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/references/snapshot-refs.md (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/references/video-recording.md (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/templates/authenticated-session.sh (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/templates/capture-workflow.sh (100%) rename src/crates/{ => facade}/core/builtin_skills/agent-browser/templates/form-automation.sh (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/LICENSE.txt (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/__init__.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/accept_changes.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/comment.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/helpers/__init__.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/helpers/merge_runs.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/helpers/simplify_redlines.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/pack.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/mce/mc.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/soffice.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/unpack.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/validate.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/validators/__init__.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/validators/base.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/validators/docx.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/validators/pptx.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/office/validators/redlining.py (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/templates/comments.xml (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/templates/commentsExtended.xml (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/templates/commentsExtensible.xml (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/templates/commentsIds.xml (100%) rename src/crates/{ => facade}/core/builtin_skills/docx/scripts/templates/people.xml (100%) rename src/crates/{ => facade}/core/builtin_skills/find-skills/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-autoplan/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-cso/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-design-consultation/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-design-review/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-document-release/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-investigate/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-office-hours/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-plan-ceo-review/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-plan-design-review/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-plan-eng-review/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-qa-only/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-qa/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-retro/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-review/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/gstack-ship/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/LICENSE.txt (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/forms.md (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/reference.md (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/scripts/check_bounding_boxes.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/scripts/check_fillable_fields.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/scripts/convert_pdf_to_images.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/scripts/create_validation_image.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/scripts/extract_form_field_info.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/scripts/extract_form_structure.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/scripts/fill_fillable_fields.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pdf/scripts/fill_pdf_form_with_annotations.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/LICENSE.txt (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/editing.md (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/pptxgenjs.md (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/__init__.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/add_slide.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/clean.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/helpers/__init__.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/helpers/merge_runs.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/helpers/simplify_redlines.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/pack.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/mce/mc.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/soffice.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/unpack.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/validate.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/validators/__init__.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/validators/base.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/validators/docx.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/validators/pptx.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/office/validators/redlining.py (100%) rename src/crates/{ => facade}/core/builtin_skills/pptx/scripts/thumbnail.py (100%) rename src/crates/{ => facade}/core/builtin_skills/writing-skills/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/writing-skills/anthropic-best-practices.md (100%) rename src/crates/{ => facade}/core/builtin_skills/writing-skills/examples/CLAUDE_MD_TESTING.md (100%) rename src/crates/{ => facade}/core/builtin_skills/writing-skills/graphviz-conventions.dot (100%) rename src/crates/{ => facade}/core/builtin_skills/writing-skills/persuasion-principles.md (100%) rename src/crates/{ => facade}/core/builtin_skills/writing-skills/render-graphs.js (100%) rename src/crates/{ => facade}/core/builtin_skills/writing-skills/testing-skills-with-subagents.md (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/LICENSE.txt (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/SKILL.md (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/helpers/__init__.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/helpers/merge_runs.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/helpers/simplify_redlines.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/pack.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/mce/mc.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/soffice.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/unpack.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/validate.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/validators/__init__.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/validators/base.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/validators/docx.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/validators/pptx.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/office/validators/redlining.py (100%) rename src/crates/{ => facade}/core/builtin_skills/xlsx/scripts/recalc.py (100%) rename src/crates/{ => facade}/core/locales/en-US.ftl (100%) rename src/crates/{ => facade}/core/locales/zh-CN.ftl (100%) rename src/crates/{ => facade}/core/locales/zh-TW.ftl (100%) rename src/crates/{ => facade}/core/src/agentic/agents/citation_renumber.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/custom/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/custom/subagent.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/hidden/code_review.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/hidden/deep_review.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/hidden/generate_doc.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/hidden/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/modes/agentic.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/modes/claw.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/modes/cowork.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/modes/debug.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/modes/deep_research.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/modes/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/modes/multitask.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/modes/plan.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/modes/team.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/review/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/review/review_fixer.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/review/review_specialists.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/shared/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/shared/readonly.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/subagents/computer_use.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/subagents/explore.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/subagents/file_finder.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/subagents/general_purpose.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/subagents/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/definitions/subagents/research_specialist.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompt_builder/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompt_builder/prompt_builder_impl.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompt_builder/user_context.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/agentic_mode.md (98%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/agentic_mode_first_entry_reminder.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/claw_mode.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/code_review.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/computer_use_mode.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/cowork_mode.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/debug_mode_first_entry_reminder.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/debug_mode_ongoing_reminder.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/deep_research_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/deep_review_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/explore_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/file_finder_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/general_purpose_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/generate_doc_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/multitask_mode_first_entry_reminder.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/multitask_mode_ongoing_reminder.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/plan_mode_first_entry_reminder.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/plan_mode_ongoing_reminder.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/research_specialist_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/review_architecture_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/review_business_logic_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/review_fixer_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/review_frontend_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/review_performance_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/review_quality_gate_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/review_security_agent.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/prompts/team_mode.md (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/availability.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/builtin.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/catalog.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/custom.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/query.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/resolution.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/support.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/tests.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/types.rs (100%) rename src/crates/{ => facade}/core/src/agentic/agents/registry/visibility.rs (100%) rename src/crates/{ => facade}/core/src/agentic/context_profile.rs (100%) rename src/crates/{ => facade}/core/src/agentic/coordination/coordinator.rs (100%) rename src/crates/{ => facade}/core/src/agentic/coordination/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/coordination/scheduler.rs (100%) rename src/crates/{ => facade}/core/src/agentic/coordination/state_manager.rs (100%) rename src/crates/{ => facade}/core/src/agentic/coordination/turn_outcome.rs (100%) rename src/crates/{ => facade}/core/src/agentic/core/dialog_turn.rs (100%) rename src/crates/{ => facade}/core/src/agentic/core/message.rs (100%) rename src/crates/{ => facade}/core/src/agentic/core/messages_helper.rs (100%) rename src/crates/{ => facade}/core/src/agentic/core/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/core/prompt_markup.rs (100%) rename src/crates/{ => facade}/core/src/agentic/core/session.rs (100%) rename src/crates/{ => facade}/core/src/agentic/core/state.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/AGENTS.md (93%) rename src/crates/{ => facade}/core/src/agentic/deep_review/CONTRIBUTING.md (87%) rename src/crates/{ => facade}/core/src/agentic/deep_review/budget.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/concurrency_policy.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/constants.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/diagnostics.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/execution_policy.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/incremental_cache.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/manifest.rs (98%) rename src/crates/{ => facade}/core/src/agentic/deep_review/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/queue.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/report.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/shared_context.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/task_adapter.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/team_definition.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/tool_context.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review/tool_measurement.rs (100%) rename src/crates/{ => facade}/core/src/agentic/deep_review_policy.rs (100%) rename src/crates/{ => facade}/core/src/agentic/events/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/events/queue.rs (100%) rename src/crates/{ => facade}/core/src/agentic/events/router.rs (100%) rename src/crates/{ => facade}/core/src/agentic/events/types.rs (100%) rename src/crates/{ => facade}/core/src/agentic/execution/AGENTS.md (100%) rename src/crates/{ => facade}/core/src/agentic/execution/execution_engine.rs (100%) rename src/crates/{ => facade}/core/src/agentic/execution/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/execution/round_executor.rs (99%) rename src/crates/{ => facade}/core/src/agentic/execution/stream_processor.rs (100%) rename src/crates/{ => facade}/core/src/agentic/execution/types.rs (100%) rename src/crates/{ => facade}/core/src/agentic/execution/write_content_sanitizer.rs (100%) rename src/crates/{ => facade}/core/src/agentic/fork_agent/mod.rs (99%) rename src/crates/{ => facade}/core/src/agentic/goal_mode/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/goal_mode/token_subscriber.rs (100%) rename src/crates/{ => facade}/core/src/agentic/harness.rs (78%) rename src/crates/{ => facade}/core/src/agentic/image_analysis/enhancer.rs (100%) rename src/crates/{ => facade}/core/src/agentic/image_analysis/image_processing.rs (100%) rename src/crates/{ => facade}/core/src/agentic/image_analysis/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/image_analysis/processor.rs (100%) rename src/crates/{ => facade}/core/src/agentic/image_analysis/types.rs (100%) rename src/crates/{ => facade}/core/src/agentic/init_agents_md.rs (100%) rename src/crates/{ => facade}/core/src/agentic/insights/cancellation.rs (100%) rename src/crates/{ => facade}/core/src/agentic/insights/collector.rs (100%) rename src/crates/{ => facade}/core/src/agentic/insights/facet_cache.rs (100%) rename src/crates/{ => facade}/core/src/agentic/insights/html.rs (100%) rename src/crates/{ => facade}/core/src/agentic/insights/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompt_context.rs (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompts/areas.md (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompts/at_a_glance.md (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompts/facet_extraction.md (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompts/friction.md (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompts/fun_ending.md (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompts/horizon.md (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompts/interaction_style.md (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompts/suggestions.md (100%) rename src/crates/{ => facade}/core/src/agentic/insights/prompts/wins.md (100%) rename src/crates/{ => facade}/core/src/agentic/insights/service.rs (100%) rename src/crates/{ => facade}/core/src/agentic/insights/session_paths.rs (100%) rename src/crates/{ => facade}/core/src/agentic/insights/types.rs (100%) rename src/crates/{ => facade}/core/src/agentic/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/persistence/manager.rs (100%) rename src/crates/{ => facade}/core/src/agentic/persistence/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/persistence/session_branch.rs (100%) rename src/crates/{ => facade}/core/src/agentic/prompts/init_agents_md.md (100%) rename src/crates/{ => facade}/core/src/agentic/round_preempt.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/compression/compressor.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/compression/fallback/builder.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/compression/fallback/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/compression/fallback/payload.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/compression/fallback/render.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/compression/fallback/sanitize.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/compression/fallback/tests.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/compression/fallback/types.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/compression/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/context_store.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/evidence_ledger.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/file_read_state.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/prompt_cache.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/session_manager.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/session_store_port.rs (100%) rename src/crates/{ => facade}/core/src/agentic/session/turn_skill_agent_snapshot_store.rs (100%) rename src/crates/{ => facade}/core/src/agentic/side_question.rs (100%) rename src/crates/{ => facade}/core/src/agentic/skill_agent_snapshot.rs (100%) rename src/crates/{ => facade}/core/src/agentic/subagent_runtime/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/subagent_runtime/queue_timing.rs (100%) rename src/crates/{ => facade}/core/src/agentic/system.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/agent-tool-exposure.md (100%) rename src/crates/{ => facade}/core/src/agentic/tools/browser_control/actions.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/browser_control/browser_launcher.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/browser_control/cdp_client.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/browser_control/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/browser_control/session_registry.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/computer_use_capability.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/computer_use_host.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/computer_use_optimizer.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/computer_use_verification.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/file_read_state_runtime.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/file_tool_guidance.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/framework.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/image_context.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/ask_user_question_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/bash_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/code_review_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/computer_use_actions.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/computer_use_input.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/computer_use_locate.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/computer_use_mouse_click_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/computer_use_mouse_precise_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/computer_use_mouse_step_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/computer_use_result.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/computer_use_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/control_hub/errors.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/control_hub/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/control_hub/result.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/control_hub_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/create_plan_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/cron_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/delete_file_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/file_edit_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/file_read_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/file_write_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/generative_ui_tool.rs (99%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/get_file_diff_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/git_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/glob_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/grep_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/log_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/ls_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/mcp_tools.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/miniapp_init_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/playbook_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/review_platform_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/session_control_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/session_history_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/session_message_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/skill_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/skills/builtin.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/skills/catalog.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/skills/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/skills/mode_overrides.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/skills/policy.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/skills/registry.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/skills/resolver.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/skills/types.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/task_tool.rs (99%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/terminal_control_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/thread_goal_tools.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/todo_write_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/util.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/implementations/web_tools.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/manifest_resolver.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/pipeline/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/pipeline/state_manager.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/pipeline/tool_pipeline.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/pipeline/types.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/post_call_hooks.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/product_runtime.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/product_runtime/catalog.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/product_runtime/materialization.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/product_runtime/snapshot.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/product_runtime/unlock_state.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/registry.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/restrictions.rs (98%) rename src/crates/{ => facade}/core/src/agentic/tools/tool_adapter.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/tool_context_runtime.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/tool_result_storage.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/user_input_manager.rs (100%) rename src/crates/{ => facade}/core/src/agentic/tools/workspace_paths.rs (100%) rename src/crates/{ => facade}/core/src/agentic/util/mod.rs (100%) rename src/crates/{ => facade}/core/src/agentic/util/remote_workspace_layout.rs (100%) rename src/crates/{ => facade}/core/src/agentic/workspace.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/git-func-agent/ai_service.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/git-func-agent/commit_generator.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/git-func-agent/context_analyzer.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/git-func-agent/mod.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/git-func-agent/utils.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/mod.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/port_adapters.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/runtime_services.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/startchat-func-agent/ai_service.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/startchat-func-agent/mod.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/startchat-func-agent/utils.rs (100%) rename src/crates/{ => facade}/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/ai/client_factory.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/ai/mod.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/ai/tool_call_accumulator.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/app_paths/mod.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/app_paths/path_manager.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/cli_credentials/codex.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/cli_credentials/gemini.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/cli_credentials/mod.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/debug_log/http_server.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/debug_log/mod.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/debug_log/types.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/events/emitter.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/events/event_system.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/events/mod.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/filesystem/mod.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/mod.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/storage/cleanup.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/storage/mod.rs (100%) rename src/crates/{ => facade}/core/src/infrastructure/storage/persistence.rs (100%) rename src/crates/{ => facade}/core/src/lib.rs (97%) rename src/crates/{ => facade}/core/src/miniapp/builtin/mod.rs (100%) rename src/crates/{ => facade}/core/src/miniapp/compiler.rs (100%) rename src/crates/{ => facade}/core/src/miniapp/exporter.rs (100%) rename src/crates/{ => facade}/core/src/miniapp/host_dispatch.rs (100%) rename src/crates/{ => facade}/core/src/miniapp/js_worker.rs (100%) rename src/crates/{ => facade}/core/src/miniapp/js_worker_pool.rs (100%) rename src/crates/{ => facade}/core/src/miniapp/manager.rs (100%) rename src/crates/{ => facade}/core/src/miniapp/mod.rs (100%) rename src/crates/{ => facade}/core/src/miniapp/runtime_detect.rs (100%) rename src/crates/{ => facade}/core/src/miniapp/storage.rs (100%) create mode 100644 src/crates/facade/core/src/product_assembly.rs rename src/crates/{ => facade}/core/src/product_domain_runtime.rs (100%) create mode 100644 src/crates/facade/core/src/product_runtime.rs rename src/crates/{core/src/product_assembly.rs => facade/core/src/product_runtime/runtime_services.rs} (95%) rename src/crates/{ => facade}/core/src/service/agent_memory/auto_memory.rs (100%) rename src/crates/{ => facade}/core/src/service/agent_memory/instruction_context.rs (100%) rename src/crates/{ => facade}/core/src/service/agent_memory/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/features/en-US/shortcuts_v0_2_2.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/features/zh-CN/shortcuts_v0_2_2.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/features/zh-TW/shortcuts_v0_2_2.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/001_vibe_describe_task.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/002_quick_scene_switch.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/003_vibe_file_reference.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/004_slash_commands.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/005_vibe_break_tasks.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/006_drag_file_context.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/007_vibe_iterate.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/008_git_ai_commit.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/009_vibe_multi_turn.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/010_multi_model.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/011_vibe_explain.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/012_vibe_context_window.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/013_miniapp.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/014_vibe_prompt_patterns.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/015_snapshot_rollback.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/016_vibe_review_output.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/017_terminal_shortcut.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/020_lsp_diagnostics.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/en-US/021_session_history.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/001_vibe_describe_task.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/002_quick_scene_switch.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/003_vibe_file_reference.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/004_slash_commands.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/005_vibe_break_tasks.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/006_drag_file_context.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/007_vibe_iterate.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/008_git_ai_commit.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/009_vibe_multi_turn.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/010_multi_model.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/011_vibe_explain.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/012_vibe_context_window.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/013_miniapp.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/014_vibe_prompt_patterns.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/015_snapshot_rollback.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/016_vibe_review_output.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/017_terminal_shortcut.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/020_lsp_diagnostics.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-CN/021_session_history.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/001_vibe_describe_task.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/002_quick_scene_switch.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/003_vibe_file_reference.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/004_slash_commands.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/005_vibe_break_tasks.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/006_drag_file_context.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/007_vibe_iterate.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/008_git_ai_commit.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/009_vibe_multi_turn.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/010_multi_model.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/011_vibe_explain.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/012_vibe_context_window.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/013_miniapp.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/014_vibe_prompt_patterns.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/015_snapshot_rollback.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/016_vibe_review_output.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/017_terminal_shortcut.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/020_lsp_diagnostics.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content/tips/zh-TW/021_session_history.md (100%) rename src/crates/{ => facade}/core/src/service/announcement/content_loader.rs (100%) rename src/crates/{ => facade}/core/src/service/announcement/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/announcement/registry.rs (100%) rename src/crates/{ => facade}/core/src/service/announcement/remote.rs (100%) rename src/crates/{ => facade}/core/src/service/announcement/scheduler.rs (100%) rename src/crates/{ => facade}/core/src/service/announcement/state_store.rs (100%) rename src/crates/{ => facade}/core/src/service/announcement/tips_pool.rs (100%) rename src/crates/{ => facade}/core/src/service/announcement/types.rs (100%) rename src/crates/{ => facade}/core/src/service/bootstrap/bootstrap_impl.rs (100%) rename src/crates/{ => facade}/core/src/service/bootstrap/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/bootstrap/templates/BOOTSTRAP.md (100%) rename src/crates/{ => facade}/core/src/service/bootstrap/templates/IDENTITY.md (100%) rename src/crates/{ => facade}/core/src/service/bootstrap/templates/SOUL.md (100%) rename src/crates/{ => facade}/core/src/service/bootstrap/templates/USER.md (100%) rename src/crates/{ => facade}/core/src/service/config/agent_profile_project_store.rs (100%) rename src/crates/{ => facade}/core/src/service/config/app_language.rs (100%) rename src/crates/{ => facade}/core/src/service/config/factory.rs (100%) rename src/crates/{ => facade}/core/src/service/config/global.rs (100%) rename src/crates/{ => facade}/core/src/service/config/manager.rs (100%) rename src/crates/{ => facade}/core/src/service/config/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/config/mode_config_canonicalizer.rs (100%) rename src/crates/{ => facade}/core/src/service/config/providers.rs (100%) rename src/crates/{ => facade}/core/src/service/config/service.rs (100%) rename src/crates/{ => facade}/core/src/service/config/types.rs (100%) rename src/crates/{ => facade}/core/src/service/cron/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/cron/schedule.rs (100%) rename src/crates/{ => facade}/core/src/service/cron/service.rs (100%) rename src/crates/{ => facade}/core/src/service/cron/store.rs (100%) rename src/crates/{ => facade}/core/src/service/cron/subscriber.rs (100%) rename src/crates/{ => facade}/core/src/service/cron/types.rs (100%) rename src/crates/{ => facade}/core/src/service/filesystem/factory.rs (100%) rename src/crates/{ => facade}/core/src/service/filesystem/listing.rs (100%) rename src/crates/{ => facade}/core/src/service/filesystem/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/filesystem/service.rs (100%) rename src/crates/{ => facade}/core/src/service/filesystem/types.rs (100%) rename src/crates/{ => facade}/core/src/service/git/git_service.rs (100%) rename src/crates/{ => facade}/core/src/service/git/git_types.rs (100%) rename src/crates/{ => facade}/core/src/service/git/git_utils.rs (100%) rename src/crates/{ => facade}/core/src/service/git/graph.rs (100%) rename src/crates/{ => facade}/core/src/service/git/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/i18n/generated_locale_contract.rs (95%) rename src/crates/{ => facade}/core/src/service/i18n/locale_registry.rs (100%) rename src/crates/{ => facade}/core/src/service/i18n/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/i18n/model_copy.rs (100%) rename src/crates/{ => facade}/core/src/service/i18n/service.rs (100%) rename src/crates/{ => facade}/core/src/service/i18n/types.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/config_watcher.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/debouncer.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/file_sync.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/global.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/manager.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/plugin_loader.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/process.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/project_detector.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/protocol.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/registry.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/types.rs (100%) rename src/crates/{ => facade}/core/src/service/lsp/workspace_manager.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/adapter/context.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/adapter/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/adapter/prompt.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/adapter/resource.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/adapter/tool.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/auth.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/config/cursor_format.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/config/json_config.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/config/location.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/config/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/config/service.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/protocol/jsonrpc.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/protocol/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/protocol/transport.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/protocol/transport_remote.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/protocol/types.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/config.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/connection.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/manager/auth.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/manager/catalog.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/manager/interaction.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/manager/lifecycle.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/manager/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/manager/reconnect.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/manager/tests.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/manager/tools.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/process.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/server/registry.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/tool_info.rs (100%) rename src/crates/{ => facade}/core/src/service/mcp/tool_name.rs (100%) rename src/crates/{ => facade}/core/src/service/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/project_context/builtin_documents.rs (100%) rename src/crates/{ => facade}/core/src/service/project_context/cancellation.rs (100%) rename src/crates/{ => facade}/core/src/service/project_context/document_template.rs (100%) rename src/crates/{ => facade}/core/src/service/project_context/generation_prompt.rs (100%) rename src/crates/{ => facade}/core/src/service/project_context/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/project_context/service.rs (100%) rename src/crates/{ => facade}/core/src/service/project_context/types.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/bot/command_router.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/bot/feishu.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/bot/locale.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/bot/menu.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/bot/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/bot/telegram.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/bot/weixin.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/device.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/embedded_relay.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/encryption.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/lan.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/ngrok.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/pairing.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/qr_generator.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/relay_client.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_connect/remote_server.rs (97%) rename src/crates/{ => facade}/core/src/service/remote_ssh/disabled.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_ssh/manager.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_ssh/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_ssh/password_vault.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_ssh/remote_fs.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_ssh/remote_terminal.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_ssh/types.rs (100%) rename src/crates/{ => facade}/core/src/service/remote_ssh/workspace_state.rs (100%) rename src/crates/{ => facade}/core/src/service/review_platform/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/runtime/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/search/flashgrep/client.rs (100%) rename src/crates/{ => facade}/core/src/service/search/flashgrep/error.rs (100%) rename src/crates/{ => facade}/core/src/service/search/flashgrep/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/search/flashgrep/protocol.rs (100%) rename src/crates/{ => facade}/core/src/service/search/flashgrep/repo_session.rs (100%) rename src/crates/{ => facade}/core/src/service/search/flashgrep/rpc_client.rs (100%) rename src/crates/{ => facade}/core/src/service/search/flashgrep/types.rs (100%) rename src/crates/{ => facade}/core/src/service/search/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/search/remote.rs (99%) rename src/crates/{ => facade}/core/src/service/search/remote_disabled.rs (100%) rename src/crates/{ => facade}/core/src/service/search/service.rs (99%) rename src/crates/{ => facade}/core/src/service/search/types.rs (100%) rename src/crates/{ => facade}/core/src/service/session/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/session_usage/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/session_usage/service.rs (100%) rename src/crates/{ => facade}/core/src/service/snapshot/events.rs (100%) rename src/crates/{ => facade}/core/src/service/snapshot/file_lock_manager.rs (100%) rename src/crates/{ => facade}/core/src/service/snapshot/isolation_manager.rs (100%) rename src/crates/{ => facade}/core/src/service/snapshot/manager.rs (100%) rename src/crates/{ => facade}/core/src/service/snapshot/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/snapshot/service.rs (100%) rename src/crates/{ => facade}/core/src/service/snapshot/snapshot_core.rs (100%) rename src/crates/{ => facade}/core/src/service/snapshot/snapshot_system.rs (100%) rename src/crates/{ => facade}/core/src/service/snapshot/types.rs (100%) rename src/crates/{ => facade}/core/src/service/token_usage/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/token_usage/service.rs (100%) rename src/crates/{ => facade}/core/src/service/token_usage/subscriber.rs (100%) rename src/crates/{ => facade}/core/src/service/workspace/factory.rs (100%) rename src/crates/{ => facade}/core/src/service/workspace/identity_watch.rs (100%) rename src/crates/{ => facade}/core/src/service/workspace/manager.rs (100%) rename src/crates/{ => facade}/core/src/service/workspace/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/workspace/provider.rs (100%) rename src/crates/{ => facade}/core/src/service/workspace/service.rs (100%) rename src/crates/{ => facade}/core/src/service/workspace_runtime/mod.rs (100%) rename src/crates/{ => facade}/core/src/service/workspace_runtime/service.rs (100%) rename src/crates/{ => facade}/core/src/service/workspace_runtime/types.rs (100%) rename src/crates/{ => facade}/core/src/service_agent_runtime.rs (100%) rename src/crates/{ => facade}/core/src/util/errors.rs (100%) rename src/crates/{ => facade}/core/src/util/front_matter_markdown.rs (100%) rename src/crates/{ => facade}/core/src/util/json_extract.rs (100%) rename src/crates/{ => facade}/core/src/util/mod.rs (100%) rename src/crates/{ => facade}/core/src/util/plain_output.rs (100%) rename src/crates/{ => facade}/core/src/util/timing.rs (100%) rename src/crates/{ => facade}/core/src/util/token_counter.rs (100%) rename src/crates/{ => facade}/core/src/util/types/ai.rs (100%) rename src/crates/{ => facade}/core/src/util/types/config.rs (100%) rename src/crates/{ => facade}/core/src/util/types/core.rs (100%) rename src/crates/{ => facade}/core/src/util/types/event.rs (100%) rename src/crates/{ => facade}/core/src/util/types/message.rs (100%) rename src/crates/{ => facade}/core/src/util/types/mod.rs (100%) rename src/crates/{ => facade}/core/src/util/types/tool.rs (100%) rename src/crates/{ai-adapters/src => facade/core/src/util}/types/tool_image_attachment.rs (100%) rename src/crates/{ => facade}/core/tests/context_profile.rs (100%) rename src/crates/{ => facade}/core/tests/git_contracts.rs (100%) rename src/crates/{ => facade}/core/tests/product_assembly.rs (76%) rename src/crates/{ => facade}/core/tests/remote_mcp_streamable_http.rs (100%) create mode 100644 src/crates/integrations/AGENTS-CN.md create mode 100644 src/crates/integrations/AGENTS.md rename src/crates/{ => integrations}/ai-adapters/AGENTS.md (90%) rename src/crates/{ => integrations}/ai-adapters/Cargo.toml (91%) rename src/crates/{ => integrations}/ai-adapters/README.md (100%) rename src/crates/{ => integrations}/ai-adapters/src/client.rs (99%) rename src/crates/{ => integrations}/ai-adapters/src/client/format.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/client/healthcheck.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/client/http.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/client/quirks.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/client/response_aggregator.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/client/sse.rs (96%) rename src/crates/{ => integrations}/ai-adapters/src/client/utils.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/diagnostics.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/lib.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/anthropic/discovery.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/anthropic/message_converter.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/anthropic/mod.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/anthropic/request.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/gemini/code_assist.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/gemini/discovery.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/gemini/message_converter.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/gemini/mod.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/gemini/request.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/mod.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/openai/chat.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/openai/codex_chatgpt.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/openai/common.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/openai/message_converter.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/openai/mod.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/openai/responses.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/providers/shared.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/mod.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/stream_handler/anthropic.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/stream_handler/gemini.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/stream_handler/inline_think.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/stream_handler/mod.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/stream_handler/openai.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/stream_handler/responses.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/stream_handler/stream_stats.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/types/anthropic.rs (98%) rename src/crates/{ => integrations}/ai-adapters/src/stream/types/gemini.rs (99%) rename src/crates/{ => integrations}/ai-adapters/src/stream/types/mod.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/stream/types/openai.rs (97%) rename src/crates/{ => integrations}/ai-adapters/src/stream/types/responses.rs (98%) rename src/crates/{ => integrations}/ai-adapters/src/stream/types/unified.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/tool_call_accumulator.rs (99%) rename src/crates/{ => integrations}/ai-adapters/src/types/ai.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/types/config.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/types/message.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/types/mod.rs (100%) rename src/crates/{ => integrations}/ai-adapters/src/types/tool.rs (100%) rename src/crates/{core/src/util => integrations/ai-adapters/src}/types/tool_image_attachment.rs (100%) rename src/crates/{ => integrations}/api-layer/AGENTS.md (93%) rename src/crates/{ => integrations}/api-layer/Cargo.toml (100%) rename src/crates/{ => integrations}/api-layer/src/dto.rs (100%) rename src/crates/{ => integrations}/api-layer/src/handlers.rs (100%) rename src/crates/{ => integrations}/api-layer/src/lib.rs (100%) rename src/crates/{ => integrations}/transport/AGENTS.md (93%) rename src/crates/{ => integrations}/transport/Cargo.toml (93%) rename src/crates/{ => integrations}/transport/src/adapters/cli.rs (100%) rename src/crates/{ => integrations}/transport/src/adapters/mod.rs (100%) rename src/crates/{ => integrations}/transport/src/adapters/tauri.rs (100%) rename src/crates/{ => integrations}/transport/src/adapters/websocket.rs (100%) rename src/crates/{ => integrations}/transport/src/emitter.rs (100%) rename src/crates/{ => integrations}/transport/src/event_bus.rs (100%) rename src/crates/{ => integrations}/transport/src/events.rs (100%) rename src/crates/{ => integrations}/transport/src/lib.rs (100%) rename src/crates/{ => integrations}/transport/src/traits.rs (100%) rename src/crates/{ => integrations}/webdriver/AGENTS.md (92%) rename src/crates/{ => integrations}/webdriver/Cargo.toml (100%) rename src/crates/{ => integrations}/webdriver/src/executor/element/actions.rs (100%) rename src/crates/{ => integrations}/webdriver/src/executor/element/lookup.rs (100%) rename src/crates/{ => integrations}/webdriver/src/executor/element/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/executor/element/read.rs (100%) rename src/crates/{ => integrations}/webdriver/src/executor/element/shadow.rs (100%) rename src/crates/{ => integrations}/webdriver/src/executor/interaction.rs (100%) rename src/crates/{ => integrations}/webdriver/src/executor/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/executor/navigation.rs (100%) rename src/crates/{ => integrations}/webdriver/src/executor/session.rs (100%) rename src/crates/{ => integrations}/webdriver/src/executor/window.rs (100%) rename src/crates/{ => integrations}/webdriver/src/lib.rs (100%) rename src/crates/{ => integrations}/webdriver/src/platform/capture.rs (100%) rename src/crates/{ => integrations}/webdriver/src/platform/evaluator/macos.rs (100%) rename src/crates/{ => integrations}/webdriver/src/platform/evaluator/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/platform/evaluator/windows.rs (100%) rename src/crates/{ => integrations}/webdriver/src/platform/image.rs (100%) rename src/crates/{ => integrations}/webdriver/src/platform/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/platform/types.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/api/element.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/api/interaction.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/api/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/api/navigation.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/alert.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/context.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/cookie.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/execution.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/locator.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/runtime.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/shadow.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/store.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/core/visibility.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/input.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/keyboard/edit.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/keyboard/event.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/keyboard/focus.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/keyboard/mapping.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/keyboard/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/pointer/key_source.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/pointer/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/pointer/mouse.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/pointer/perform.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/pointer/pointer_source.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/pointer/release.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/pointer/wheel.rs (100%) rename src/crates/{ => integrations}/webdriver/src/runtime/script/pointer/wheel_source.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/actions.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/alert.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/cookie.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/element.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/frame.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/logs.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/navigation.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/print.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/screenshot.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/script.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/session.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/shadow.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/timeouts.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/handlers/window.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/response.rs (100%) rename src/crates/{ => integrations}/webdriver/src/server/router.rs (100%) rename src/crates/{ => integrations}/webdriver/src/webdriver/element.rs (100%) rename src/crates/{ => integrations}/webdriver/src/webdriver/locator.rs (100%) rename src/crates/{ => integrations}/webdriver/src/webdriver/mod.rs (100%) rename src/crates/{ => integrations}/webdriver/src/webdriver/session.rs (100%) create mode 100644 src/crates/product/AGENTS-CN.md create mode 100644 src/crates/product/AGENTS.md rename src/crates/{ => product}/product-capabilities/AGENTS.md (78%) rename src/crates/{ => product}/product-capabilities/Cargo.toml (55%) rename src/crates/{ => product}/product-capabilities/src/lib.rs (98%) rename src/crates/{ => product}/product-capabilities/tests/product_capabilities.rs (100%) rename src/crates/{ => product}/product-domains/AGENTS-CN.md (97%) rename src/crates/{ => product}/product-domains/AGENTS.md (97%) rename src/crates/{ => product}/product-domains/Cargo.toml (100%) rename src/crates/{ => product}/product-domains/src/function_agents/common.rs (100%) rename src/crates/{ => product}/product-domains/src/function_agents/git_func_agent/context_analyzer.rs (100%) rename src/crates/{ => product}/product-domains/src/function_agents/git_func_agent/mod.rs (100%) rename src/crates/{ => product}/product-domains/src/function_agents/git_func_agent/prompts/commit_message.md (100%) rename src/crates/{ => product}/product-domains/src/function_agents/git_func_agent/types.rs (100%) rename src/crates/{ => product}/product-domains/src/function_agents/git_func_agent/utils.rs (100%) rename src/crates/{ => product}/product-domains/src/function_agents/mod.rs (100%) rename src/crates/{ => product}/product-domains/src/function_agents/ports.rs (100%) rename src/crates/{ => product}/product-domains/src/function_agents/startchat_func_agent/mod.rs (100%) rename src/crates/{ => product}/product-domains/src/function_agents/startchat_func_agent/prompts/work_state_analysis.md (100%) rename src/crates/{ => product}/product-domains/src/function_agents/startchat_func_agent/types.rs (100%) rename src/crates/{ => product}/product-domains/src/function_agents/startchat_func_agent/utils.rs (99%) rename src/crates/{ => product}/product-domains/src/lib.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/bridge_builder.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/coding-selfie/index.html (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/coding-selfie/meta.json (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/coding-selfie/style.css (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/coding-selfie/ui.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/coding-selfie/worker.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/divination/index.html (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/divination/meta.json (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/divination/style.css (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/divination/ui.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/divination/worker.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/gomoku/index.html (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/gomoku/meta.json (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/gomoku/style.css (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/gomoku/ui.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/gomoku/worker.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/pr-review/index.html (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/pr-review/meta.json (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/pr-review/style.css (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/pr-review/ui.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/pr-review/worker.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/regex-playground/index.html (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/regex-playground/meta.json (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/regex-playground/style.css (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/regex-playground/ui.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/builtin/assets/regex-playground/worker.js (100%) rename src/crates/{ => product}/product-domains/src/miniapp/compiler.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/customization.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/draft.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/exporter.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/host_routing.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/lifecycle.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/mod.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/permission_policy.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/ports.rs (99%) rename src/crates/{ => product}/product-domains/src/miniapp/runtime.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/storage.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/types.rs (100%) rename src/crates/{ => product}/product-domains/src/miniapp/worker.rs (100%) rename src/crates/{ => product}/product-domains/tests/function_agent_contracts.rs (99%) rename src/crates/{ => product}/product-domains/tests/miniapp_contracts.rs (100%) create mode 100644 src/crates/services/AGENTS-CN.md create mode 100644 src/crates/services/AGENTS.md rename src/crates/{ => services}/services-core/AGENTS.md (95%) rename src/crates/{ => services}/services-core/Cargo.toml (91%) rename src/crates/{ => services}/services-core/src/diagnostics/mod.rs (100%) rename src/crates/{ => services}/services-core/src/diagnostics/redaction.rs (100%) rename src/crates/{ => services}/services-core/src/diff/mod.rs (100%) rename src/crates/{ => services}/services-core/src/diff/service.rs (100%) rename src/crates/{ => services}/services-core/src/diff/types.rs (100%) rename src/crates/{ => services}/services-core/src/filesystem/error.rs (100%) rename src/crates/{ => services}/services-core/src/filesystem/factory.rs (100%) rename src/crates/{ => services}/services-core/src/filesystem/listing.rs (100%) rename src/crates/{ => services}/services-core/src/filesystem/mod.rs (100%) rename src/crates/{ => services}/services-core/src/filesystem/operations.rs (100%) rename src/crates/{ => services}/services-core/src/filesystem/service.rs (100%) rename src/crates/{ => services}/services-core/src/filesystem/tree.rs (100%) rename src/crates/{ => services}/services-core/src/filesystem/types.rs (100%) rename src/crates/{ => services}/services-core/src/lib.rs (100%) rename src/crates/{ => services}/services-core/src/process_manager.rs (100%) rename src/crates/{ => services}/services-core/src/session/mod.rs (100%) rename src/crates/{ => services}/services-core/src/session/types.rs (100%) rename src/crates/{ => services}/services-core/src/session_usage/classifier.rs (100%) rename src/crates/{ => services}/services-core/src/session_usage/mod.rs (100%) rename src/crates/{ => services}/services-core/src/session_usage/redaction.rs (100%) rename src/crates/{ => services}/services-core/src/session_usage/render.rs (100%) rename src/crates/{ => services}/services-core/src/session_usage/types.rs (100%) rename src/crates/{ => services}/services-core/src/system/command.rs (100%) rename src/crates/{ => services}/services-core/src/system/info.rs (100%) rename src/crates/{ => services}/services-core/src/system/mod.rs (100%) rename src/crates/{ => services}/services-core/src/token_usage/mod.rs (100%) rename src/crates/{ => services}/services-core/src/token_usage/types.rs (100%) rename src/crates/{ => services}/services-core/tests/diagnostic_log_redaction.rs (100%) rename src/crates/{ => services}/services-core/tests/service_contracts.rs (100%) rename src/crates/{ => services}/services-core/tests/session_contracts.rs (100%) rename src/crates/{ => services}/services-core/tests/session_usage_contracts.rs (100%) rename src/crates/{ => services}/services-core/tests/token_usage_contracts.rs (100%) rename src/crates/{ => services}/services-integrations/AGENTS.md (96%) rename src/crates/{ => services}/services-integrations/Cargo.toml (89%) rename src/crates/{ => services}/services-integrations/src/announcement/mod.rs (100%) rename src/crates/{ => services}/services-integrations/src/announcement/state_store.rs (100%) rename src/crates/{ => services}/services-integrations/src/announcement/types.rs (100%) rename src/crates/{ => services}/services-integrations/src/file_watch/mod.rs (100%) rename src/crates/{ => services}/services-integrations/src/file_watch/service.rs (100%) rename src/crates/{ => services}/services-integrations/src/file_watch/types.rs (100%) rename src/crates/{ => services}/services-integrations/src/function_agents.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/args.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/error.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/graph.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/mod.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/name_status.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/service.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/text.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/types.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/utils.rs (100%) rename src/crates/{ => services}/services-integrations/src/git/worktree.rs (100%) rename src/crates/{ => services}/services-integrations/src/lib.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/adapter/context.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/adapter/mod.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/adapter/prompt.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/adapter/resource.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/adapter/tool.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/auth.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/config/cursor_format.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/config/json_config.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/config/location.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/config/mod.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/config/service.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/config/service_helpers.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/mod.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/protocol/client_info.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/protocol/jsonrpc.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/protocol/mod.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/protocol/rmcp_mapping.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/protocol/transport.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/protocol/transport_remote.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/protocol/types.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/runtime_error.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/server/catalog_cache.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/server/connection.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/server/mod.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/server/process.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/server/runtime_helpers.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/server/runtime_policy.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/tool_info.rs (100%) rename src/crates/{ => services}/services-integrations/src/mcp/tool_name.rs (100%) rename src/crates/{ => services}/services-integrations/src/remote_connect.rs (100%) rename src/crates/{ => services}/services-integrations/src/remote_ssh/mod.rs (100%) rename src/crates/{ => services}/services-integrations/src/remote_ssh/paths.rs (100%) rename src/crates/{ => services}/services-integrations/src/remote_ssh/types.rs (100%) rename src/crates/{ => services}/services-integrations/src/remote_ssh/workspace_registry.rs (100%) rename src/crates/{ => services}/services-integrations/tests/announcement_contracts.rs (100%) rename src/crates/{ => services}/services-integrations/tests/file_watch_contracts.rs (100%) rename src/crates/{ => services}/services-integrations/tests/function_agent_contracts.rs (100%) rename src/crates/{ => services}/services-integrations/tests/git_contracts.rs (100%) rename src/crates/{ => services}/services-integrations/tests/mcp_contracts.rs (100%) rename src/crates/{ => services}/services-integrations/tests/remote_connect_contracts.rs (98%) rename src/crates/{ => services}/services-integrations/tests/remote_ssh_contracts.rs (100%) rename src/crates/{ => services}/terminal/AGENTS.md (93%) rename src/crates/{ => services}/terminal/Cargo.toml (100%) rename src/crates/{ => services}/terminal/docs/STREAMING_OUTPUT_COLLECTION.md (100%) rename src/crates/{ => services}/terminal/src/api.rs (100%) rename src/crates/{ => services}/terminal/src/config/mod.rs (100%) rename src/crates/{ => services}/terminal/src/config/types.rs (100%) rename src/crates/{ => services}/terminal/src/events.rs (100%) rename src/crates/{ => services}/terminal/src/lib.rs (100%) rename src/crates/{ => services}/terminal/src/pty/data_bufferer.rs (100%) rename src/crates/{ => services}/terminal/src/pty/mod.rs (100%) rename src/crates/{ => services}/terminal/src/pty/process.rs (100%) rename src/crates/{ => services}/terminal/src/pty/service.rs (100%) rename src/crates/{ => services}/terminal/src/session/binding.rs (100%) rename src/crates/{ => services}/terminal/src/session/manager.rs (100%) rename src/crates/{ => services}/terminal/src/session/mod.rs (100%) rename src/crates/{ => services}/terminal/src/session/persistent.rs (100%) rename src/crates/{ => services}/terminal/src/session/serializer.rs (100%) rename src/crates/{ => services}/terminal/src/session/singleton.rs (100%) rename src/crates/{ => services}/terminal/src/shell/detection.rs (100%) rename src/crates/{ => services}/terminal/src/shell/integration.rs (100%) rename src/crates/{ => services}/terminal/src/shell/mod.rs (100%) rename src/crates/{ => services}/terminal/src/shell/profiles.rs (100%) rename src/crates/{ => services}/terminal/src/shell/scripts/shellIntegration-bash.sh (100%) rename src/crates/{ => services}/terminal/src/shell/scripts/shellIntegration-rc.zsh (100%) rename src/crates/{ => services}/terminal/src/shell/scripts/shellIntegration.fish (100%) rename src/crates/{ => services}/terminal/src/shell/scripts/shellIntegration.ps1 (100%) rename src/crates/{ => services}/terminal/src/shell/scripts_manager.rs (100%) create mode 100644 src/crates/surfaces/AGENTS-CN.md create mode 100644 src/crates/surfaces/AGENTS.md create mode 100644 src/crates/surfaces/acp/AGENTS-CN.md rename src/crates/{ => surfaces}/acp/AGENTS.md (69%) rename src/crates/{ => surfaces}/acp/Cargo.toml (71%) rename src/crates/{ => surfaces}/acp/src/client/builtin_clients.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/config.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/manager.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/mod.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/remote_capability_store.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/remote_session.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/remote_shell.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/requirements.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/session_options.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/session_persistence.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/stream.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/tool.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/tool_card_bridge/mod.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/tool_card_bridge/tool_name.rs (100%) rename src/crates/{ => surfaces}/acp/src/client/tool_card_bridge/tool_params.rs (100%) rename src/crates/{ => surfaces}/acp/src/lib.rs (100%) rename src/crates/{ => surfaces}/acp/src/runtime.rs (100%) rename src/crates/{ => surfaces}/acp/src/runtime/content.rs (100%) rename src/crates/{ => surfaces}/acp/src/runtime/events.rs (99%) rename src/crates/{ => surfaces}/acp/src/runtime/mcp.rs (100%) rename src/crates/{ => surfaces}/acp/src/runtime/model.rs (100%) rename src/crates/{ => surfaces}/acp/src/runtime/prompt.rs (100%) rename src/crates/{ => surfaces}/acp/src/runtime/session.rs (100%) rename src/crates/{ => surfaces}/acp/src/runtime/thinking.rs (100%) rename src/crates/{ => surfaces}/acp/src/server.rs (100%) create mode 100644 src/web-ui/src/shared/services/review-team/pathMetadata.test.ts create mode 100644 src/web-ui/src/shared/services/review-team/risk.test.ts diff --git a/AGENTS-CN.md b/AGENTS-CN.md index 6f45d3afd..99c6fa9ea 100644 --- a/AGENTS-CN.md +++ b/AGENTS-CN.md @@ -13,39 +13,29 @@ BitFun 是一个由 Rust workspace 与 React 前端组成的项目。 3. 修改 Rust 文件后,优先使用 `pnpm run fmt:rs`,只格式化已改动或已暂存的 `.rs` 文件。只有在你明确需要更大范围格式化时才使用 `cargo fmt`。 4. 改完后按下方表格执行与改动范围匹配的最小验证。 -## 模块索引 - -| 模块 | 路径 | Agent 文档 | -|---|---|---| -| Core(产品逻辑) | `src/crates/core` | [AGENTS.md](src/crates/core/AGENTS.md) | -| Core 共享 DTO | `src/crates/core-types` | [AGENTS.md](src/crates/core-types/AGENTS.md) | -| 事件契约 | `src/crates/events` | [AGENTS.md](src/crates/events/AGENTS.md) | -| Agent stream 归一化 | `src/crates/agent-stream` | [AGENTS.md](src/crates/agent-stream/AGENTS.md) | -| Runtime ports | `src/crates/runtime-ports` | [AGENTS.md](src/crates/runtime-ports/AGENTS.md) | -| Runtime services | `src/crates/runtime-services` | [AGENTS.md](src/crates/runtime-services/AGENTS.md) | -| Terminal 基础设施 | `src/crates/terminal` | [AGENTS.md](src/crates/terminal/AGENTS.md) | -| 底层 tool runtime | `src/crates/tool-runtime` | [AGENTS.md](src/crates/tool-runtime/AGENTS.md) | -| Agent runtime owner crate | `src/crates/agent-runtime` | [AGENTS.md](src/crates/agent-runtime/AGENTS.md) | -| Harness workflow contracts | `src/crates/harness` | [AGENTS.md](src/crates/harness/AGENTS.md) | -| Service core owner crate | `src/crates/services-core` | [AGENTS.md](src/crates/services-core/AGENTS.md) | -| Service integrations owner crate | `src/crates/services-integrations` | [AGENTS.md](src/crates/services-integrations/AGENTS.md) | -| Agent tool contracts | `src/crates/agent-tools` | [AGENTS.md](src/crates/agent-tools/AGENTS.md) | -| Tool pack provider plan | `src/crates/tool-packs` | [AGENTS.md](src/crates/tool-packs/AGENTS.md) | -| 产品领域 crate | `src/crates/product-domains` | [AGENTS.md](src/crates/product-domains/AGENTS.md) | -| 产品能力包 | `src/crates/product-capabilities` | [AGENTS.md](src/crates/product-capabilities/AGENTS.md) | -| Transport 适配层 | `src/crates/transport` | [AGENTS.md](src/crates/transport/AGENTS.md) | -| API layer | `src/crates/api-layer` | [AGENTS.md](src/crates/api-layer/AGENTS.md) | -| ACP 集成 | `src/crates/acp` | [AGENTS.md](src/crates/acp/AGENTS.md) | -| AI adapters | `src/crates/ai-adapters` | [AGENTS.md](src/crates/ai-adapters/AGENTS.md) | -| 嵌入式 WebDriver | `src/crates/webdriver` | [AGENTS.md](src/crates/webdriver/AGENTS.md) | -| 桌面应用 | `src/apps/desktop` | [AGENTS.md](src/apps/desktop/AGENTS.md) | -| Server | `src/apps/server` | (使用 core 指南) | -| CLI | `src/apps/cli` | (使用 core 指南) | -| 中继服务器 | `src/apps/relay-server` | (使用 core 指南) | -| 共享前端 | `src/web-ui` | [AGENTS.md](src/web-ui/AGENTS.md) | -| Mobile web | `src/mobile-web` | [AGENTS.md](src/mobile-web/AGENTS.md) | -| 安装器 | `BitFun-Installer` | [AGENTS.md](BitFun-Installer/AGENTS.md) | -| E2E 测试 | `tests/e2e` | [AGENTS.md](tests/e2e/AGENTS.md) | +## 分层模块索引 + +依赖关系按自上而下读取:某一行代码只能依赖更下方的层级。可复用行为放到能够拥有它的最低层;入口、协议外观和交付形态选择留在对应的最高入口层。 + +| # | 层级 | 路径 | 职责 | 模块 / 入口 | 层级文档 | +|---|---|---|---|---|---| +| 1 | 产品入口与协议入口层 | `src/apps/*`, `src/web-ui`, `src/mobile-web`, `BitFun-Installer`, `tests/e2e`, `src/crates/surfaces` | UI、命令、路由、交付形态、宿主集成、协议入口和跨形态测试 | desktop、CLI、server、relay、Web UI、mobile web、installer、E2E、`acp` | 最近的本地 `AGENTS.md`;[surfaces](src/crates/surfaces/AGENTS.md) | +| 2 | 门面与产品组装层 | `src/crates/facade` | 兼容导出、product-full 组装、交付形态接线和 provider 注册 | `core` | [AGENTS.md](src/crates/facade/AGENTS.md) | +| 3 | 具体适配实现层 | `src/crates/integrations` | 低层外部协议、provider、transport 和平台 adapter | `ai-adapters`, `api-layer`, `transport`, `webdriver` | [AGENTS.md](src/crates/integrations/AGENTS.md) | +| 4 | 可复用服务与服务适配层 | `src/crates/services` | 具体非 UI 服务实现,以及窄产品领域 port adapter | `services-core`, `services-integrations`, `terminal` | [AGENTS.md](src/crates/services/AGENTS.md) | +| 5 | 产品策略与能力层 | `src/crates/product` | 产品领域、feature facts、capability packs、非 UI 产品策略和窄领域 port | `product-domains`, `product-capabilities` | [AGENTS.md](src/crates/product/AGENTS.md) | +| 6 | 执行原语层 | `src/crates/execution` | provider-neutral 的 agent、tool、harness、stream 和 typed-service 构件 | `agent-runtime`, `agent-stream`, `agent-tools`, `harness`, `runtime-services`, `tool-packs`, `tool-runtime` | [AGENTS.md](src/crates/execution/AGENTS.md) | +| 7 | 稳定契约层 | `src/crates/contracts` | 跨层共享 DTO、事件形状和 port | `core-types`, `events`, `runtime-ports` | [AGENTS.md](src/crates/contracts/AGENTS.md) | + +边界规则: + +- 产品入口与协议入口只选择交付形态并调用 facade 或 adapter API;可复用行为应下移。 +- facade 只负责兼容和产品组装接线,不实现 provider、protocol、OS 或 service 细节。 +- 具体适配实现只翻译外部系统;依赖已组装产品行为的协议入口应放入 `surfaces`。 +- 通用 service 不依赖产品 crate;feature-gated service adapter 只能实现窄 `product-domains` port。 +- product 拥有产品策略和能力事实,不拥有 UI、protocol、host 或具体 service 实现。 +- execution 只放可移植执行构件,不等同于完整产品 runtime 或宿主 runtime。 +- contracts 只放轻行为契约,不得向上依赖。 ## 常用命令 @@ -179,7 +169,7 @@ await api.invoke('your_command', { request: { ... } }); | `core`、`transport`、`api-layer` 或共享服务中的 Rust 逻辑 | `cargo check --workspace`;行为变化时再加最近的 focused `cargo test` | | 桌面端集成、Tauri API、browser/computer-use 或桌面专属行为 | `cargo check -p bitfun-desktop`;行为变化时再加 focused desktop tests | | 被桌面端 smoke/functional 流覆盖的行为 | 优先运行最近的 focused E2E/smoke check;除非改动影响构建,否则 broad build/test 交给 CI | -| `src/crates/ai-adapters` | 运行上面相关 Rust 检查;只有 stream contract 改动时再加 `cargo test -p bitfun-agent-stream` | +| `src/crates/integrations/ai-adapters` | 运行上面相关 Rust 检查;只有 stream contract 改动时再加 `cargo test -p bitfun-agent-stream` | | 不涉及打包的安装器前端或 i18n runtime | `pnpm --dir BitFun-Installer run type-check` | | 安装器 Tauri/Rust 改动 | `cargo check --manifest-path BitFun-Installer/src-tauri/Cargo.toml` | | 安装器打包、payload、安装/卸载流程或 native bundling | `pnpm run installer:build` | diff --git a/AGENTS.md b/AGENTS.md index 9859fc537..d70453a56 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -13,39 +13,32 @@ Repository rule: **keep product logic platform-agnostic, then expose it through 3. After Rust file changes, prefer `pnpm run fmt:rs` to format only changed or staged `.rs` files. Use `cargo fmt` only when you intentionally want broader formatting coverage. 4. After changes, run the smallest matching verification from the table below. -## Module index - -| Module | Path | Agent doc | -|---|---|---| -| Core (product logic) | `src/crates/core` | [AGENTS.md](src/crates/core/AGENTS.md) | -| Core shared DTOs | `src/crates/core-types` | [AGENTS.md](src/crates/core-types/AGENTS.md) | -| Event contracts | `src/crates/events` | [AGENTS.md](src/crates/events/AGENTS.md) | -| Agent stream normalization | `src/crates/agent-stream` | [AGENTS.md](src/crates/agent-stream/AGENTS.md) | -| Runtime ports | `src/crates/runtime-ports` | [AGENTS.md](src/crates/runtime-ports/AGENTS.md) | -| Runtime services | `src/crates/runtime-services` | [AGENTS.md](src/crates/runtime-services/AGENTS.md) | -| Terminal infrastructure | `src/crates/terminal` | [AGENTS.md](src/crates/terminal/AGENTS.md) | -| Low-level tool runtime | `src/crates/tool-runtime` | [AGENTS.md](src/crates/tool-runtime/AGENTS.md) | -| Agent runtime owner crate | `src/crates/agent-runtime` | [AGENTS.md](src/crates/agent-runtime/AGENTS.md) | -| Harness workflow contracts | `src/crates/harness` | [AGENTS.md](src/crates/harness/AGENTS.md) | -| Service core owner crate | `src/crates/services-core` | [AGENTS.md](src/crates/services-core/AGENTS.md) | -| Service integrations owner crate | `src/crates/services-integrations` | [AGENTS.md](src/crates/services-integrations/AGENTS.md) | -| Agent tool contracts | `src/crates/agent-tools` | [AGENTS.md](src/crates/agent-tools/AGENTS.md) | -| Tool pack provider plan | `src/crates/tool-packs` | [AGENTS.md](src/crates/tool-packs/AGENTS.md) | -| Product domains | `src/crates/product-domains` | [AGENTS.md](src/crates/product-domains/AGENTS.md) | -| Product capabilities | `src/crates/product-capabilities` | [AGENTS.md](src/crates/product-capabilities/AGENTS.md) | -| Transport adapters | `src/crates/transport` | [AGENTS.md](src/crates/transport/AGENTS.md) | -| API layer | `src/crates/api-layer` | [AGENTS.md](src/crates/api-layer/AGENTS.md) | -| ACP integration | `src/crates/acp` | [AGENTS.md](src/crates/acp/AGENTS.md) | -| AI adapters | `src/crates/ai-adapters` | [AGENTS.md](src/crates/ai-adapters/AGENTS.md) | -| Embedded WebDriver | `src/crates/webdriver` | [AGENTS.md](src/crates/webdriver/AGENTS.md) | -| Desktop app | `src/apps/desktop` | [AGENTS.md](src/apps/desktop/AGENTS.md) | -| Server | `src/apps/server` | (use core guide) | -| CLI | `src/apps/cli` | (use core guide) | -| Relay server | `src/apps/relay-server` | (use core guide) | -| Shared frontend | `src/web-ui` | [AGENTS.md](src/web-ui/AGENTS.md) | -| Mobile web | `src/mobile-web` | [AGENTS.md](src/mobile-web/AGENTS.md) | -| Installer | `BitFun-Installer` | [AGENTS.md](BitFun-Installer/AGENTS.md) | -| E2E tests | `tests/e2e` | [AGENTS.md](tests/e2e/AGENTS.md) | +## Layered Module Index + +Dependencies flow top to bottom: code in a row may depend only on lower rows. +Put reusable behavior in the lowest layer that can own it; put entrypoint and +profile selection in the highest layer that owns the surface. + +| # | Layer | Path | Owns | Modules / entries | Layer doc | +|---|---|---|---|---|---| +| 1 | Product surfaces and protocol surfaces | `src/apps/*`, `src/web-ui`, `src/mobile-web`, `BitFun-Installer`, `tests/e2e`, `src/crates/surfaces` | UI, commands, routes, delivery profiles, host integration, protocol entrypoints, and cross-surface tests | desktop, CLI, server, relay, Web UI, mobile web, installer, E2E, `acp` | nearest local `AGENTS.md`; [surfaces](src/crates/surfaces/AGENTS.md) | +| 2 | Facade and product assembly | `src/crates/facade` | Compatibility exports, product-full assembly, delivery-profile wiring, and provider registration | `core` | [AGENTS.md](src/crates/facade/AGENTS.md) | +| 3 | Concrete provider adapters | `src/crates/integrations` | Low-level external protocol, provider, transport, and platform adapters | `ai-adapters`, `api-layer`, `transport`, `webdriver` | [AGENTS.md](src/crates/integrations/AGENTS.md) | +| 4 | Reusable services and service adapters | `src/crates/services` | Concrete non-UI services and narrow product-domain port adapters | `services-core`, `services-integrations`, `terminal` | [AGENTS.md](src/crates/services/AGENTS.md) | +| 5 | Product policy and capabilities | `src/crates/product` | Product domains, feature facts, capability packs, product-owned non-UI policy, and narrow domain ports | `product-domains`, `product-capabilities` | [AGENTS.md](src/crates/product/AGENTS.md) | +| 6 | Execution primitives | `src/crates/execution` | Provider-neutral agent, tool, harness, stream, and typed-service building blocks | `agent-runtime`, `agent-stream`, `agent-tools`, `harness`, `runtime-services`, `tool-packs`, `tool-runtime` | [AGENTS.md](src/crates/execution/AGENTS.md) | +| 7 | Stable contracts | `src/crates/contracts` | Shared DTOs, event shapes, and ports | `core-types`, `events`, `runtime-ports` | [AGENTS.md](src/crates/contracts/AGENTS.md) | + +Boundary rules: + +- Surfaces and protocol surfaces choose delivery profiles and call facade or adapter APIs; reusable behavior moves down. +- Facade wires lower layers for compatibility and product assembly; it must not implement provider, protocol, OS, or service details. +- Concrete provider adapters translate external systems; product-facing protocol entrypoints that depend on assembled product behavior belong in `surfaces`. +- Generic services stay product-independent; feature-gated service adapters may implement narrow `product-domains` ports. +- Product owns product policy and capability facts, not UI, protocol, host, or concrete service implementations. +- Execution primitives are portable building blocks, not the full product runtime or host-specific runtime. +- Contracts stay behavior-light and must not depend upward. + ## Common commands @@ -190,7 +183,7 @@ change directly affects build, packaging, or CI cannot protect the path. | Shared Rust logic in `core`, `transport`, `api-layer`, or services | `cargo check --workspace`, plus the nearest focused `cargo test` when behavior changed | | Desktop integration, Tauri APIs, browser/computer-use, or desktop-only behavior | `cargo check -p bitfun-desktop`, plus focused desktop tests when behavior changed | | Behavior covered by desktop smoke/functional flows | Prefer the nearest focused E2E/smoke check; rely on CI for broad build/test coverage unless build behavior changed | -| `src/crates/ai-adapters` | Relevant Rust checks above; add `cargo test -p bitfun-agent-stream` only when stream contracts changed | +| `src/crates/integrations/ai-adapters` | Relevant Rust checks above; add `cargo test -p bitfun-agent-stream` only when stream contracts changed | | Installer frontend or i18n runtime without packaging changes | `pnpm --dir BitFun-Installer run type-check` | | Installer Tauri/Rust changes | `cargo check --manifest-path BitFun-Installer/src-tauri/Cargo.toml` | | Installer packaging, payload, install/uninstall flow, or native bundling | `pnpm run installer:build` | diff --git a/BitFun-Installer/src-tauri/Cargo.toml b/BitFun-Installer/src-tauri/Cargo.toml index 59728a01e..2a6583550 100644 --- a/BitFun-Installer/src-tauri/Cargo.toml +++ b/BitFun-Installer/src-tauri/Cargo.toml @@ -35,7 +35,7 @@ reqwest = { version = "0.12", default-features = false, features = ["json", "rus urlencoding = "2" futures = "0.3" eventsource-stream = "0.2" -bitfun-ai-adapters = { path = "../../src/crates/ai-adapters" } +bitfun-ai-adapters = { path = "../../src/crates/integrations/ai-adapters" } [target.'cfg(windows)'.dependencies] winreg = "0.52" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2823d1e3e..2c192b709 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -94,10 +94,10 @@ We welcome contributions beyond standard feature or bug-fix PRs. Examples includ | Contribution area | Location / files | Example | | --- | --- | --- | -| Prompts | `src/crates/core/src/agentic/agents/prompts/` | Add or refine prompts, and update related logic as needed | -| Tools | `src/crates/core/src/agentic/tools/implementations/`, `src/crates/core/src/agentic/tools/registry.rs` | Add tool implementations and register them in the tool registry | -| Subagents | `src/crates/core/src/agentic/agents/custom_subagents/`, `src/crates/core/src/agentic/agents/registry.rs` | Add subagent implementations and register them in the subagent registry | -| Mode contributions | `src/crates/core/src/agentic/agents/*_mode.rs`, `src/crates/core/src/agentic/agents/prompts/*_mode.md`, `src/web-ui/src/locales/*/settings/modes.json` | Add/improve agent modes (e.g. Plan/Debug/Agentic or custom modes) and keep prompts + UI copy in sync | +| Prompts | `src/crates/facade/core/src/agentic/agents/prompts/` | Add or refine prompts, and update related logic as needed | +| Tools | `src/crates/facade/core/src/agentic/tools/implementations/`, `src/crates/facade/core/src/agentic/tools/registry.rs` | Add tool implementations and register them in the tool registry | +| Subagents | `src/crates/facade/core/src/agentic/agents/custom_subagents/`, `src/crates/facade/core/src/agentic/agents/registry.rs` | Add subagent implementations and register them in the subagent registry | +| Mode contributions | `src/crates/facade/core/src/agentic/agents/*_mode.rs`, `src/crates/facade/core/src/agentic/agents/prompts/*_mode.md`, `src/web-ui/src/locales/*/settings/modes.json` | Add/improve agent modes (e.g. Plan/Debug/Agentic or custom modes) and keep prompts + UI copy in sync | | Scenario guides for Code Agent and AIIde | `website/src/docs/` | Add workflows, playbooks, and real-world scenario docs (or link them from `README.md`) | ### Before you start diff --git a/CONTRIBUTING_CN.md b/CONTRIBUTING_CN.md index fd332142f..6035c744a 100644 --- a/CONTRIBUTING_CN.md +++ b/CONTRIBUTING_CN.md @@ -86,10 +86,10 @@ DevTools;`Cmd/Ctrl + Shift + I` 切换 BitFun 元素检查器,`Cmd/Ctrl + Sh | 贡献方向 | 位置/文件 | 示例说明 | | --- | --- | --- | -| Prompts | `src/crates/core/src/agentic/agents/prompts/` | 新增或优化提示词,并按需更新相关逻辑 | -| Tools | `src/crates/core/src/agentic/tools/implementations/`、`src/crates/core/src/agentic/tools/registry.rs` | 新增工具实现,并在工具注册表中注册 | -| Subagents | `src/crates/core/src/agentic/agents/custom_subagents/`、`src/crates/core/src/agentic/agents/registry.rs` | 新增子代理实现,并在子代理注册表中注册 | -| 模式贡献 | `src/crates/core/src/agentic/agents/*_mode.rs`、`src/crates/core/src/agentic/agents/prompts/*_mode.md`、`src/web-ui/src/locales/*/settings/modes.json` | 新增/优化 Agent 模式(例如 Plan/Debug/Agentic 或自定义模式)的逻辑与提示词,并同步前端模式文案 | +| Prompts | `src/crates/facade/core/src/agentic/agents/prompts/` | 新增或优化提示词,并按需更新相关逻辑 | +| Tools | `src/crates/facade/core/src/agentic/tools/implementations/`、`src/crates/facade/core/src/agentic/tools/registry.rs` | 新增工具实现,并在工具注册表中注册 | +| Subagents | `src/crates/facade/core/src/agentic/agents/custom_subagents/`、`src/crates/facade/core/src/agentic/agents/registry.rs` | 新增子代理实现,并在子代理注册表中注册 | +| 模式贡献 | `src/crates/facade/core/src/agentic/agents/*_mode.rs`、`src/crates/facade/core/src/agentic/agents/prompts/*_mode.md`、`src/web-ui/src/locales/*/settings/modes.json` | 新增/优化 Agent 模式(例如 Plan/Debug/Agentic 或自定义模式)的逻辑与提示词,并同步前端模式文案 | | Code Agent 与 AIIde 场景指南 | `website/src/docs/` | 补充流程、playbook 与真实场景说明(或从 `README.md` 链接) | ### 开始前 diff --git a/Cargo.toml b/Cargo.toml index ae481bcc3..b651e07e7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,30 +1,30 @@ [workspace] members = [ - "src/crates/core-types", - "src/crates/events", - "src/crates/ai-adapters", - "src/crates/agent-stream", - "src/crates/agent-runtime", - "src/crates/harness", - "src/crates/product-capabilities", - "src/crates/runtime-ports", - "src/crates/runtime-services", - "src/crates/services-core", - "src/crates/services-integrations", - "src/crates/product-domains", - "src/crates/agent-tools", - "src/crates/tool-packs", - "src/crates/acp", - "src/crates/core", - "src/crates/terminal", - "src/crates/tool-runtime", - "src/crates/transport", - "src/crates/api-layer", - "src/crates/webdriver", "src/apps/cli", "src/apps/desktop", "src/apps/server", "src/apps/relay-server", + "src/crates/surfaces/acp", + "src/crates/facade/core", + "src/crates/integrations/ai-adapters", + "src/crates/integrations/webdriver", + "src/crates/integrations/api-layer", + "src/crates/integrations/transport", + "src/crates/services/services-core", + "src/crates/services/services-integrations", + "src/crates/services/terminal", + "src/crates/product/product-capabilities", + "src/crates/product/product-domains", + "src/crates/execution/agent-runtime", + "src/crates/execution/agent-stream", + "src/crates/execution/agent-tools", + "src/crates/execution/harness", + "src/crates/execution/runtime-services", + "src/crates/execution/tool-packs", + "src/crates/execution/tool-runtime", + "src/crates/contracts/core-types", + "src/crates/contracts/events", + "src/crates/contracts/runtime-ports", ] exclude = [ diff --git a/MiniApp/Skills/miniapp-dev/SKILL.md b/MiniApp/Skills/miniapp-dev/SKILL.md index 08d81944a..e0ef375be 100644 --- a/MiniApp/Skills/miniapp-dev/SKILL.md +++ b/MiniApp/Skills/miniapp-dev/SKILL.md @@ -1,6 +1,6 @@ --- name: miniapp-dev -description: Develops, maintains, and generates BitFun MiniApps (Zero-Dialect Runtime). Use when (1) working on miniapp framework code under src/crates/core/src/miniapp/ or src/web-ui/src/app/scenes/miniapps/; or (2) generating / creating / designing a NEW MiniApp for the user — including any request like "做一个小应用 / 生成 MiniApp / 写个 BitFun 小工具 / 创建 mini app". Also triggers on MiniApp, miniapps, bridge, zero-dialect, InitMiniApp, app.fs / app.shell / app.storage, or any work under MiniApp/Demo/ and MiniApp/Skills/. +description: Develops, maintains, and generates BitFun MiniApps (Zero-Dialect Runtime). Use when (1) working on miniapp framework code under src/crates/facade/core/src/miniapp/ or src/web-ui/src/app/scenes/miniapps/; or (2) generating / creating / designing a NEW MiniApp for the user — including any request like "做一个小应用 / 生成 MiniApp / 写个 BitFun 小工具 / 创建 mini app". Also triggers on MiniApp, miniapps, bridge, zero-dialect, InitMiniApp, app.fs / app.shell / app.storage, or any work under MiniApp/Demo/ and MiniApp/Skills/. --- # BitFun MiniApp V2 指南 @@ -18,7 +18,7 @@ description: Develops, maintains, and generates BitFun MiniApps (Zero-Dialect Ru ### 流程 1. **先问,再做**:用户的目标 / 受众 / 是否需要 node mode / 权限边界 / 是否需要 Tweaks 变体 / 是否多语言 / 是否有视觉参考——任何一项含糊就用 `AskUserQuestion` 问。**不要替用户决定**。 -2. **找设计上下文**:先读 `MiniApp/Demo/` 与 `src/crates/product-domains/src/miniapp/builtin/assets/` 中**最贴近形态**的内置应用,复刻它的视觉语言(间距 / 圆角 / 卡片密度 / motif)。**从零 mock 是最后选择**。 +2. **找设计上下文**:先读 `MiniApp/Demo/` 与 `src/crates/product/product-domains/src/miniapp/builtin/assets/` 中**最贴近形态**的内置应用,复刻它的视觉语言(间距 / 圆角 / 卡片密度 / motif)。**从零 mock 是最后选择**。 3. **声明设计系统**:`style.css` 顶部用注释钉住 palette / typography / radius / motif(参见 playbook §1.3 模板),后续全应用复用。 4. **占位先行 → 早预览**:第一版用占位文本 / 占位图框 / fixture 数据,先在 Toolbox 里跑给用户看,再迭代。 5. **验证**:light/dark × zh/en 共 4 套截图都过;过 playbook §8 的 QA Checklist。 @@ -64,7 +64,7 @@ MiniApp 使用 **标准 Web API + window.app**:UI 侧为 ESM 模块(`ui.js` ### Rust 后端 ``` -src/crates/core/src/miniapp/ +src/crates/facade/core/src/miniapp/ ├── types.rs # MiniAppSource (ui_js/worker_js/esm_dependencies/npm_dependencies), NodePermissions ├── manager.rs # CRUD + recompile() + resolve_policy_for_app() ├── storage.rs # ui.js, worker.js, package.json, esm_dependencies.json @@ -94,7 +94,7 @@ src/apps/desktop/src/api/miniapp_api.rs ### Agent 工具 ``` -src/crates/core/src/agentic/tools/implementations/ +src/crates/facade/core/src/agentic/tools/implementations/ └── miniapp_init_tool.rs # InitMiniApp — 唯一工具,创建骨架目录供 AI 用通用文件工具编辑 ``` @@ -358,16 +358,16 @@ MiniApp 框架在 V2 之后内置 i18n 支持,开发者**必须**为多语言 ## 内置小应用(builtin/assets/*)维护规范 -内置小应用通过 `src/crates/product-domains/src/miniapp/builtin.rs` 中的 `BUILTIN_APPS` 数组以 `include_str!` 方式打包进 Rust 二进制;首次启动 / 升级时由 `seed_builtin_miniapps()` 把资源写入用户的 `miniapps_dir//`,并在该目录下写入 `.builtin-manifest.json` 主标记文件,同时兼容写入 `.builtin-version` legacy 标记。 +内置小应用通过 `src/crates/product/product-domains/src/miniapp/builtin.rs` 中的 `BUILTIN_APPS` 数组以 `include_str!` 方式打包进 Rust 二进制;首次启动 / 升级时由 `seed_builtin_miniapps()` 把资源写入用户的 `miniapps_dir//`,并在该目录下写入 `.builtin-manifest.json` 主标记文件,同时兼容写入 `.builtin-version` legacy 标记。 **只有当 bundled `version` / asset hash 与 on-disk `.builtin-manifest.json` 不一致时才会重新 seed**,否则启动时会跳过、用户看到的还是旧版本。 ### 修改流程(强制) -凡是修改了 `src/crates/product-domains/src/miniapp/builtin/assets//` 下任何文件(`index.html` / `style.css` / `ui.js` / `worker.js` / `meta.json`),**都必须**同步在 `builtin.rs` 的 `BUILTIN_APPS` 中把对应条目的 `version: N` → `N + 1`。 +凡是修改了 `src/crates/product/product-domains/src/miniapp/builtin/assets//` 下任何文件(`index.html` / `style.css` / `ui.js` / `worker.js` / `meta.json`),**都必须**同步在 `builtin.rs` 的 `BUILTIN_APPS` 中把对应条目的 `version: N` → `N + 1`。 ```rust -// src/crates/product-domains/src/miniapp/builtin.rs +// src/crates/product/product-domains/src/miniapp/builtin.rs BuiltinApp { id: "builtin-daily-divination", version: 14, // ← 改完资源就把这里 +1 diff --git a/MiniApp/Skills/miniapp-dev/design-playbook.md b/MiniApp/Skills/miniapp-dev/design-playbook.md index c75bf9534..9ca6da3f9 100644 --- a/MiniApp/Skills/miniapp-dev/design-playbook.md +++ b/MiniApp/Skills/miniapp-dev/design-playbook.md @@ -26,7 +26,7 @@ 按优先级取上下文: 1. 用户提供的截图 / 品牌资料 / 现成代码 -2. `MiniApp/Demo/` 与 `src/crates/product-domains/src/miniapp/builtin/assets/` 中**最贴近形态**的内置应用——直接 `ls` + `Read` 拿到它的 `style.css`、`index.html`,识别它的视觉语言(间距、圆角、卡片密度、配色) +2. `MiniApp/Demo/` 与 `src/crates/product/product-domains/src/miniapp/builtin/assets/` 中**最贴近形态**的内置应用——直接 `ls` + `Read` 拿到它的 `style.css`、`index.html`,识别它的视觉语言(间距、圆角、卡片密度、配色) 3. `--bitfun-*` 主题变量(见 SKILL.md 的"主题集成"章节)——所有颜色都优先 `var(--bitfun-xxx, fallback)` **从零生成是最后选择**——它直接导致千篇一律的"AI 味"产出。 @@ -247,9 +247,9 @@ 完整体现以上原则的内置/示例小应用: -- `src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/` — 工具型,单 motif("/"包裹的 pattern row),克制配色 -- `src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/` — 数据可视化,使用 worker,i18n 完整 -- `src/crates/product-domains/src/miniapp/builtin/assets/gomoku/` — 交互型,主题切换 + i18n + 持久化范例 +- `src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/` — 工具型,单 motif("/"包裹的 pattern row),克制配色 +- `src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/` — 数据可视化,使用 worker,i18n 完整 +- `src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/` — 交互型,主题切换 + i18n + 持久化范例 - `MiniApp/Demo/git-graph/` — 复杂应用拆模块的范例(`ui/components`, `ui/panels`, `ui/services`) - `MiniApp/Demo/icon-design-system/` — 设计系统型应用范例 diff --git a/README.md b/README.md index 32327ae65..9e1b6a5f4 100644 --- a/README.md +++ b/README.md @@ -159,11 +159,13 @@ For more details, see the [Contributing guide](./CONTRIBUTING.md). ## Project structure at a glance ``` -src/crates/core # Compatibility facade and product runtime assembly -src/crates/{core-types,agent-stream,runtime-ports} # Extracted core support boundaries -src/crates/{terminal,tool-runtime} # Workspace-level terminal/tool helper crates -src/crates/transport # Tauri / WebSocket / CLI transport adapters -src/crates/api-layer # Shared handlers and DTOs +src/crates/contracts/ # Stable DTOs, events, and runtime ports +src/crates/execution/ # Agent, tool, harness, and runtime-service owners +src/crates/services/ # Shared local service and terminal infrastructure +src/crates/product/ # Product capability and domain owners +src/crates/integrations/ # Low-level AI, API, transport, and WebDriver adapters +src/crates/surfaces/ # Product-facing protocol surfaces such as ACP +src/crates/facade/core # Compatibility facade and product runtime assembly src/apps/desktop # Tauri desktop host src/apps/server # Web server runtime src/apps/cli # CLI runtime diff --git a/README.zh-CN.md b/README.zh-CN.md index a14261a18..9eb256046 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -163,11 +163,13 @@ pnpm run desktop:build ## 项目结构一览 ``` -src/crates/core # 兼容门面与完整产品 runtime 组装点 -src/crates/{core-types,agent-stream,runtime-ports} # 已拆出的 core 支撑边界 -src/crates/{terminal,tool-runtime} # workspace 顶层 terminal / tool 辅助 crate -src/crates/transport # Tauri / WebSocket / CLI 传输适配 -src/crates/api-layer # 共享 handler 与 DTO +src/crates/contracts/ # 稳定 DTO、事件与 runtime ports +src/crates/execution/ # Agent、tool、harness 与 runtime-service owners +src/crates/services/ # 共享本地服务与 terminal 基础设施 +src/crates/product/ # 产品能力与领域 owners +src/crates/integrations/ # 低层 AI、API、transport 与 WebDriver adapters +src/crates/surfaces/ # ACP 等面向产品的协议入口 +src/crates/facade/core # 兼容门面与完整产品 runtime 组装点 src/apps/desktop # Tauri 桌面宿主 src/apps/server # Web 服务端运行时 src/apps/cli # CLI 运行时 diff --git a/docs/architecture/agent-runtime-services-design.md b/docs/architecture/agent-runtime-services-design.md index 086392eea..41f4d76f6 100644 --- a/docs/architecture/agent-runtime-services-design.md +++ b/docs/architecture/agent-runtime-services-design.md @@ -825,7 +825,7 @@ pub trait BeforeToolExecution: Send + Sync { 错误: - contract 层使用 portable error facts。 -- runtime 层做错误分类和事件上报。 +- Agent Runtime SDK / Runtime Services 负责错误分类和事件上报边界。 - Product Surface 只负责展示逻辑。 - unsupported capability 必须明确,不允许泛化为 unknown failure。 diff --git a/docs/architecture/cache-friendly-message-structure.md b/docs/architecture/cache-friendly-message-structure.md index 2b8d31e76..7459c66d9 100644 --- a/docs/architecture/cache-friendly-message-structure.md +++ b/docs/architecture/cache-friendly-message-structure.md @@ -4,7 +4,7 @@ This note explains the cache-friendly request shape BitFun tries to preserve for long-running agent sessions, where each layer is stored, and which kinds of changes tend to preserve or break provider-side prefix cache reuse. -The implementation is mostly in `src/crates/core/src/agentic/`. +The implementation is mostly in `src/crates/facade/core/src/agentic/`. ## Request Shape @@ -30,11 +30,11 @@ Two details matter here: Relevant code: - request assembly: - `src/crates/core/src/agentic/execution/execution_engine.rs` + `src/crates/facade/core/src/agentic/execution/execution_engine.rs` - prepended reminder ordering: - `src/crates/agent-runtime/src/prompt.rs` + `src/crates/execution/agent-runtime/src/prompt.rs` - tool manifest resolution: - `src/crates/core/src/agentic/tools/manifest_resolver.rs` + `src/crates/facade/core/src/agentic/tools/manifest_resolver.rs` In practice the model-visible layout looks like this: @@ -89,11 +89,11 @@ What usually breaks reuse: Relevant code: - cache model: - `src/crates/agent-runtime/src/prompt_cache.rs` + `src/crates/execution/agent-runtime/src/prompt_cache.rs` - cache lifecycle: - `src/crates/core/src/agentic/session/session_manager.rs` + `src/crates/facade/core/src/agentic/session/session_manager.rs` -The old core path `src/crates/core/src/agentic/session/prompt_cache.rs` is now +The old core path `src/crates/facade/core/src/agentic/session/prompt_cache.rs` is now a compatibility facade that re-exports the owner types from `bitfun-agent-runtime`. ### 2. Tool definitions @@ -206,11 +206,11 @@ Special rewrite path: Relevant code: - snapshot model and diffing: - `src/crates/core/src/agentic/skill_agent_snapshot.rs` + `src/crates/facade/core/src/agentic/skill_agent_snapshot.rs` - sparse snapshot store: - `src/crates/core/src/agentic/session/turn_skill_agent_snapshot_store.rs` + `src/crates/facade/core/src/agentic/session/turn_skill_agent_snapshot_store.rs` - baseline rebuild and cleanup: - `src/crates/core/src/agentic/session/session_manager.rs` + `src/crates/facade/core/src/agentic/session/session_manager.rs` ### 5. User context @@ -313,14 +313,14 @@ If you intentionally need to reset or rewrite the prefix: ## Implementation Map - request assembly: - `src/crates/core/src/agentic/execution/execution_engine.rs` + `src/crates/facade/core/src/agentic/execution/execution_engine.rs` - reminder ordering and prompt builder helpers: - `src/crates/agent-runtime/src/prompt.rs` + `src/crates/execution/agent-runtime/src/prompt.rs` - prompt cache model: - `src/crates/agent-runtime/src/prompt_cache.rs` + `src/crates/execution/agent-runtime/src/prompt_cache.rs` - prompt cache lifecycle and listing baseline rebuild: - `src/crates/core/src/agentic/session/session_manager.rs` + `src/crates/facade/core/src/agentic/session/session_manager.rs` - listing snapshots and diffs: - `src/crates/core/src/agentic/skill_agent_snapshot.rs` + `src/crates/facade/core/src/agentic/skill_agent_snapshot.rs` - session persistence paths: - `src/crates/core/src/agentic/persistence/manager.rs` + `src/crates/facade/core/src/agentic/persistence/manager.rs` diff --git a/docs/architecture/core-decomposition.md b/docs/architecture/core-decomposition.md index f8d699b5c..1b2dac965 100644 --- a/docs/architecture/core-decomposition.md +++ b/docs/architecture/core-decomposition.md @@ -25,9 +25,9 @@ Runtime Services、Tool Runtime 和 Harness Layer 分别隔离 service、tool、 ## 2. 架构原则 -- 依赖只能从产品层流向 runtime 层,再流向 contract 层;下层不得感知上层产品形态。 +- 依赖只能从产品入口 / 产品组装流向产品能力、具体适配、服务和执行原语,再流向稳定契约;下层不得感知上层产品形态。 - 接口和实现必须分开:接口属于稳定契约、Runtime Services、Tool Runtime 或 Harness contract; - 具体实现属于 Product Assembly 或具体实现层。 + 具体实现属于 Product Assembly 或具体适配实现。 - Product Surface 可以有差异,capability contract 必须收敛。不同产品入口可以选择不同能力集合, 但不能通过下沉 UI、命令或协议逻辑来换取复用。 - `bitfun-core` 保留兼容 facade 和 `product-full` 组装边界;新 owner crate 不得依赖回 @@ -45,7 +45,7 @@ helper 和 product domain 纯逻辑,但完整运行时仍以 `bitfun-core` 为 flowchart TB Surfaces["产品入口
Desktop / CLI / Server / Relay / Remote / Web"] Core["bitfun-core
兼容 facade + 完整产品 runtime 组装"] - Acp["bitfun-acp
ACP protocol / client integration"] + Acp["bitfun-acp
ACP protocol surface / client behavior"] Transport["transport / api-layer
API 与传输 adapter"] CoreTypes["bitfun-core-types
稳定 DTO 子集"] Events["bitfun-events
事件事实与 emitter 抽象"] @@ -95,7 +95,7 @@ flowchart TB | `bitfun-services-core` | 基础 service helper、本地 filesystem facade、部分通用 service 逻辑 | 适合作为本地基础 service owner,但不能吸收产品 runtime 语义 | | `bitfun-services-integrations` | MCP、Git、remote-connect、remote-SSH 等 integration helper | 适合拥有外部协议和重依赖 adapter,不应反向感知产品 surface | | `bitfun-product-domains` | MiniApp、function-agent 等纯状态、策略、port 和部分决策逻辑 | 适合承接 pure domain,不应直接执行 filesystem/Git/AI concrete call | -| `bitfun-acp` | ACP protocol 和 client integration | 应保持 external capability owner,不下沉到 Agent Runtime SDK | +| `bitfun-acp` | ACP protocol surface 和 client behavior | 应保持产品协议入口,不下沉到 Agent Runtime SDK | | `transport` / `api-layer` | surface 到 runtime 的 API/transport adapter | 应保持传输层,不拥有 runtime owner | ## 4. 初始状态主要问题 @@ -182,7 +182,7 @@ agents 分为 primary agents 和 subagents,可配置 prompt、model 与 tool a ## 6. 目标逻辑视图 -目标架构以层级为入口描述系统。每层只暴露本层 contract,具体实现由上层组装或下层 integration 提供。 +目标架构以层级为入口描述系统。每层只暴露本层 contract,具体 provider 或 adapter 由产品组装接入。 ```mermaid flowchart TB @@ -193,7 +193,7 @@ flowchart TB AgentRuntime["Agent 运行时 SDK(Agent Runtime SDK)
session / turn / scheduler / prompt / subagent"] ToolRuntime["工具运行时(Tool Runtime)
manifest / permission / execution / catalog"] RuntimeServices["运行时服务层(Runtime Services)
typed service bundle / capability availability"] - Integrations["具体实现层(Concrete Integrations)
Tool / OS / Remote / Protocol providers"] + Integrations["具体适配实现(Concrete Providers)
Tool / OS / Remote / Protocol providers"] Contracts["稳定契约层(Stable Contracts)
DTO / event / permission / artifact / port"] External["外部系统(External Systems)
OS / Git / MCP server / ACP client / AI provider"] @@ -279,17 +279,17 @@ workspace file/shell、remote connection / projection、session store、Git、te 等接口应以 stable port 表达;初始状态可保留旧路径 facade 和 concrete adapter,目标状态应由 typed service bundle 消费这些端口。 -### 7.8 具体实现层(Concrete Integrations) +### 7.8 具体适配实现(Concrete Providers) -具体实现层拥有外部系统连接和重依赖,但它不是一个混合大筐,需要按实现类型保持边界: +具体适配实现拥有外部系统连接和重依赖,但它不是一个混合大筐,需要按实现类型保持边界: Tool 实现器负责具体 tool provider 和 tool pack;OS 实现器负责 filesystem、terminal、process、network、 -environment 等平台能力;协议实现器负责 MCP、ACP、AI provider、Git 等外部协议;Remote 实现器负责 remote +environment 等平台能力;协议实现器负责 MCP、AI provider、Git 等低层外部协议;ACP 这类依赖产品组装的协议入口属于 Product Surfaces / Protocol Surfaces;Remote 实现器负责 remote connection、remote workspace projection 和 remote host capability。 Remote 不应作为 Agent Runtime SDK 的内部能力,也不应只按 Desktop/CLI 入口区分。它的稳定接口应拆为 remote connection、remote workspace、remote filesystem/terminal projection、remote capability facts 等 port; SSH、relay、本地隧道、远端 OS 差异和认证方式属于具体 Remote provider,由 Product Assembly 按产品形态注册。 -初始状态相关 crate 包括 `bitfun-services-*`、`bitfun-ai-adapters`、`terminal-core`、`bitfun-acp` 和 app adapters。 +初始状态相关 crate 包括 `bitfun-services-*`、`bitfun-ai-adapters`、`terminal-core` 和 app adapters;`bitfun-acp` 属于产品协议入口。 ### 7.9 稳定契约层(Stable Contracts) @@ -301,7 +301,7 @@ host trait 应归入稳定契约;integration crate 可保留旧路径 re-expor ## 8. 接口与实现关系 -接口由稳定契约、Runtime Services、Tool Runtime 或 Harness contract 定义;具体实现由产品入口或具体实现层创建; +接口由稳定契约、Runtime Services、Tool Runtime 或 Harness contract 定义;具体实现由产品入口或具体适配实现创建; 注册动作只能发生在 Product Assembly。Agent Runtime SDK、Tool Runtime 和 Harness 只接收已经组装好的接口或 provider registry,不直接创建平台实现。 @@ -315,7 +315,7 @@ flowchart TB AgentRegistry["Agent 运行时 SDK(Agent Runtime SDK)
AgentDefinitionRegistry"] CommandRegistry["产品入口 / 产品组装层
ProductCommandRegistry"] Runtime["Agent Runtime SDK / Tool Runtime / Harness
只消费接口"] - Impl["具体实现层(Concrete Integrations)
Tool / OS / Remote / Protocol providers"] + Impl["具体适配实现(Concrete Providers)
Tool / OS / Remote / Protocol providers"] Contracts["稳定契约层(Stable Contracts)
DTO / event / port trait"] Surface --> Assembly @@ -344,7 +344,7 @@ flowchart TB | `HarnessRegistryBuilder` | 工作流编排层(Harness Layer) | 目标在 `bitfun-harness`;初始可由 `bitfun-core::agentic::harness` 注册 legacy-facade provider | SDD、Deep Review、DeepResearch、MiniApp 等 harness provider | | `AgentDefinitionRegistry` | Agent 运行时 SDK(Agent Runtime SDK) | 目标在 `bitfun-agent-runtime`;初始可由 `bitfun-core` agent definition 代码承载 | agent、subagent、prompt module、skill definition | | `ProductCommandRegistry` | 产品入口(Product Surfaces)与产品组装层(Product Assembly)的边界 | 产品入口或 assembly 模块 | 输入框命令、审核入口、MiniApp 入口到 capability / harness / runtime request 的映射 | -| concrete provider set | 具体实现层(Concrete Integrations) | `bitfun-services-*`、`bitfun-ai-adapters`、`terminal-core`、`bitfun-acp`、app adapters | Tool、OS、Remote、Protocol 的具体 provider;Remote provider 内部继续区分 SSH、relay、本地隧道、远端 OS 支持 | +| concrete provider set | 具体适配实现(Concrete Providers) | `bitfun-services-*`、`bitfun-ai-adapters`、`terminal-core`、app adapters;产品协议入口如 `bitfun-acp` 属于 Product Surfaces / Protocol Surfaces | Tool、OS、Remote、Protocol 的具体 provider;Remote provider 内部继续区分 SSH、relay、本地隧道、远端 OS 支持 | 注册路径必须是显式、typed、可测试的: @@ -376,7 +376,7 @@ flowchart TB - `bitfun-core` 不再是事实上的完整 runtime owner,而是兼容 facade 和 `product-full` 组装边界。 - Agent Runtime SDK、Tool Runtime、Runtime Services、Harness 和 Product Capabilities 分别拥有可审查的职责边界。 -- 稳定契约和各 runtime owner 定义接口;具体 Tool、OS、Remote、Protocol provider 留在具体实现层。 +- 稳定契约和各 runtime owner 定义接口;具体 Tool、OS、Remote、Protocol provider 留在具体适配实现。 - 产品组装层(Product Assembly)是唯一注册点,通过 typed builder / registry 连接接口和具体实现。 - Tauri 只属于 Desktop concrete provider / adapter,不进入 core、runtime owner 或 contract crate。 - runtime 只依赖 remote connection、remote workspace、remote projection 和 capability facts 等 port;SSH、relay、 diff --git a/docs/architecture/deep-review.md b/docs/architecture/deep-review.md index 4e6752081..7d63d7957 100644 --- a/docs/architecture/deep-review.md +++ b/docs/architecture/deep-review.md @@ -6,15 +6,15 @@ DeepReview is a child-session workflow that runs a configurable Code Review Team - Frontend launch and UI orchestration in `src/web-ui`. - Platform adapter commands in `src/apps/desktop/src/api/agentic_api.rs`. -- Platform-agnostic runtime policy, task admission, queue state, retry metadata, and report enrichment in `src/crates/core/src/agentic`. +- Platform-agnostic runtime policy, task admission, queue state, retry metadata, and report enrichment in `src/crates/facade/core/src/agentic`. The backend does not choose the review target or build the launch manifest. The frontend builds the effective `ReviewTeamRunManifest`, persists it on the DeepReview child session, and sends it with the first user message. ## Runtime Roles -`src/crates/core/src/agentic/agents/deep_review_agent.rs` defines the writable `DeepReview` orchestrator. It can call `Task`, read/search/git tools, `submit_code_review`, `AskUserQuestion`, and write/edit/bash tools for user-approved remediation. +`src/crates/facade/core/src/agentic/agents/deep_review_agent.rs` defines the writable `DeepReview` orchestrator. It can call `Task`, read/search/git tools, `submit_code_review`, `AskUserQuestion`, and write/edit/bash tools for user-approved remediation. -`src/crates/core/src/agentic/agents/review_specialist_agents.rs` defines read-only reviewer agents: +`src/crates/facade/core/src/agentic/agents/review_specialist_agents.rs` defines read-only reviewer agents: - `ReviewBusinessLogic` - `ReviewPerformance` @@ -57,8 +57,8 @@ The default review team contract is mirrored in Rust and TypeScript. Rust source: -- `src/crates/core/src/agentic/deep_review/team_definition.rs` -- `src/crates/core/src/agentic/deep_review_policy.rs` +- `src/crates/facade/core/src/agentic/deep_review/team_definition.rs` +- `src/crates/facade/core/src/agentic/deep_review_policy.rs` - `src/apps/desktop/src/api/agentic_api.rs` Frontend source: @@ -147,7 +147,7 @@ If the included file count exceeds the reviewer file-split threshold and same-ro ## Backend Policy and Admission -`DeepReviewExecutionPolicy` in `src/crates/core/src/agentic/deep_review/execution_policy.rs` parses runtime policy from config and classifies subagent launches. +`DeepReviewExecutionPolicy` in `src/crates/facade/core/src/agentic/deep_review/execution_policy.rs` parses runtime policy from config and classifies subagent launches. Allowed DeepReview runtime launches are: @@ -169,10 +169,10 @@ Rejected launches include: The generic `Task` tool is adapted for DeepReview in: -- `src/crates/core/src/agentic/tools/implementations/task_tool.rs` -- `src/crates/core/src/agentic/deep_review/task_adapter.rs` -- `src/crates/core/src/agentic/deep_review/queue.rs` -- `src/crates/core/src/agentic/deep_review/budget.rs` +- `src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs` +- `src/crates/facade/core/src/agentic/deep_review/task_adapter.rs` +- `src/crates/facade/core/src/agentic/deep_review/queue.rs` +- `src/crates/facade/core/src/agentic/deep_review/budget.rs` DeepReview task execution uses the manifest and tool context to: @@ -214,7 +214,7 @@ Pause, continue, and cancel are scoped to a specific turn and tool id. `skip_opt ## Runtime Events -Queue state events are defined in `src/crates/events/src/agentic.rs` as `AgenticEvent::DeepReviewQueueStateChanged`. +Queue state events are defined in `src/crates/contracts/events/src/agentic.rs` as `AgenticEvent::DeepReviewQueueStateChanged`. The frontend listens through `AgentAPI.onDeepReviewQueueStateChanged` on `agentic://deep-review-queue-state-changed`. The TypeScript event shape mirrors the Rust event fields: @@ -234,7 +234,7 @@ The frontend listens through `AgentAPI.onDeepReviewQueueStateChanged` on `agenti ## Report Submission -Review results are submitted through `submit_code_review` in `src/crates/core/src/agentic/tools/implementations/code_review_tool.rs`. +Review results are submitted through `submit_code_review` in `src/crates/facade/core/src/agentic/tools/implementations/code_review_tool.rs`. In DeepReview context, the tool requires the deep-review fields in addition to the standard summary/issues/positive-points shape: @@ -243,7 +243,7 @@ In DeepReview context, the tool requires the deep-review fields in addition to t - `reviewers` - `remediation_plan` -DeepReview report enrichment lives in `src/crates/core/src/agentic/deep_review/report.rs`. It fills missing reviewer packet metadata when a unique packet can be inferred, adds runtime diagnostics, updates incremental cache data, and adds reliability signals for cache hits, cache misses, partial coverage, capacity skips, retry guidance, queue waits, reduced scope, and evidence-pack metadata. +DeepReview report enrichment lives in `src/crates/facade/core/src/agentic/deep_review/report.rs`. It fills missing reviewer packet metadata when a unique packet can be inferred, adds runtime diagnostics, updates incremental cache data, and adds reliability signals for cache hits, cache misses, partial coverage, capacity skips, retry guidance, queue waits, reduced scope, and evidence-pack metadata. Report enrichment is guarded by the tool context. Standard Code Review output should not receive DeepReview-only metadata unless the active tool context proves `agent_type == 'DeepReview'`. diff --git a/docs/architecture/i18n.md b/docs/architecture/i18n.md index acfda5610..86c758d02 100644 --- a/docs/architecture/i18n.md +++ b/docs/architecture/i18n.md @@ -32,7 +32,7 @@ Generated outputs: - `src/web-ui/src/infrastructure/i18n/presets/generatedLocaleContract.ts` - `src/mobile-web/src/i18n/generatedLocaleContract.ts` - `BitFun-Installer/src/i18n/generatedLocaleContract.ts` -- `src/crates/core/src/service/i18n/generated_locale_contract.rs` +- `src/crates/facade/core/src/service/i18n/generated_locale_contract.rs` - `BitFun-Installer/src-tauri/src/installer/generated_locale_contract.rs` - `src/apps/relay-server/static/homepage/i18n.shared.json` @@ -46,7 +46,7 @@ Do not edit generated files manually. | Web UI | `src/web-ui/src/locales//**/*.json` | Eagerly loads bootstrap namespaces only; route and feature copy loads lazily | | Mobile Web | `src/mobile-web/src/i18n/messages.ts` | Owns mobile-only messages; no Web UI catalog imports | | Installer | `BitFun-Installer/src/i18n/locales/*.json` | Owns installer-only messages; no app runtime catalog imports | -| Backend | `src/crates/core/locales/*.ftl` | Uses generated locale helpers and Fluent resources | +| Backend | `src/crates/facade/core/locales/*.ftl` | Uses generated locale helpers and Fluent resources | | Relay static homepage | `src/apps/relay-server/static/homepage` | Self-contained static resources plus generated page-scoped shared terms | Shared contract does not mean shared bundle. Smaller product shapes must not pay diff --git a/docs/architecture/model-request-cache-reuse.md b/docs/architecture/model-request-cache-reuse.md index 6e1b85128..01de1f00c 100644 --- a/docs/architecture/model-request-cache-reuse.md +++ b/docs/architecture/model-request-cache-reuse.md @@ -5,7 +5,7 @@ cache reuse and to avoid unnecessary cache invalidation across long-running agent sessions. The implementation is mostly in the shared Rust runtime under -`src/crates/core/src/agentic/`. +`src/crates/facade/core/src/agentic/`. ## The Core Idea @@ -32,9 +32,9 @@ Instead, it separates two relatively stable layers: - the user-context reminder The cache model lives in -`src/crates/agent-runtime/src/prompt_cache.rs`. +`src/crates/execution/agent-runtime/src/prompt_cache.rs`. -Core still exposes `src/crates/core/src/agentic/session/prompt_cache.rs`, but +Core still exposes `src/crates/facade/core/src/agentic/session/prompt_cache.rs`, but that file is now a compatibility facade that re-exports the owner types from `bitfun-agent-runtime`. @@ -48,7 +48,7 @@ Key details: (`DEFAULT_PROMPT_CACHE_PERSISTENCE_TTL`) Session-level loading, saving, invalidation, and cloning live in -`src/crates/core/src/agentic/session/session_manager.rs`. +`src/crates/facade/core/src/agentic/session/session_manager.rs`. The test coverage in that file also explicitly exercises: @@ -64,7 +64,7 @@ Persistence details: memory Request assembly uses the cache in -`src/crates/core/src/agentic/execution/execution_engine.rs`: +`src/crates/facade/core/src/agentic/execution/execution_engine.rs`: - `resolve_cached_system_prompt(...)` reuses a cached system prompt when the scope key still matches @@ -81,7 +81,7 @@ stable while still handling workspace-dependent context separately. ### Session branching Persisted session branching is implemented in -`src/crates/core/src/agentic/persistence/session_branch.rs`. +`src/crates/facade/core/src/agentic/persistence/session_branch.rs`. When BitFun branches a session from an existing turn, it copies more than turn text: @@ -107,9 +107,9 @@ Relevant code: `src/apps/desktop/src/api/btw_api.rs` - child-session creation: `ConversationCoordinator::ensure_hidden_btw_session(...)` in - `src/crates/core/src/agentic/coordination/coordinator.rs` + `src/crates/facade/core/src/agentic/coordination/coordinator.rs` - side-question prompt wrapper: - `src/crates/core/src/agentic/side_question.rs` + `src/crates/facade/core/src/agentic/side_question.rs` The parent context snapshot is not limited to a hot in-memory session. When needed, `load_session_context_messages(...)` restores the parent session from @@ -139,11 +139,11 @@ Forked subagents reuse even more. Relevant code: - snapshot model: - `src/crates/core/src/agentic/fork_agent/mod.rs` + `src/crates/facade/core/src/agentic/fork_agent/mod.rs` - request validation and tool contract: - `src/crates/core/src/agentic/tools/implementations/task_tool.rs` + `src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs` - execution and prompt-cache cloning: - `src/crates/core/src/agentic/coordination/coordinator.rs` + `src/crates/facade/core/src/agentic/coordination/coordinator.rs` When `Task` is called with `fork_context=true`, BitFun: @@ -185,9 +185,9 @@ They are intentionally configured to share the same stable prompt base. Relevant code: - shared constants and tests: - `src/crates/agent-runtime/src/agents.rs` + `src/crates/execution/agent-runtime/src/agents.rs` - mode definitions: - `src/crates/core/src/agentic/agents/definitions/modes/{agentic,plan,debug,multitask}.rs` + `src/crates/facade/core/src/agentic/agents/definitions/modes/{agentic,plan,debug,multitask}.rs` Why they reuse cache: @@ -218,7 +218,7 @@ force a base prompt cache reset. The frontend also knows about this compatibility: - `AgentInfo.prompt_cache_scope_key` is produced in - `src/crates/core/src/agentic/agents/registry/types.rs` + `src/crates/facade/core/src/agentic/agents/registry/types.rs` - `ChatInput.tsx` only shows a prompt-cache warning when the next mode's scope key differs from the last submitted mode's scope key @@ -233,18 +233,18 @@ BitFun explicitly avoids baking that surface into one permanently rebuilt prompt Relevant code: - snapshot and diff model: - `src/crates/core/src/agentic/skill_agent_snapshot.rs` + `src/crates/facade/core/src/agentic/skill_agent_snapshot.rs` - sparse snapshot store: - `src/crates/core/src/agentic/session/turn_skill_agent_snapshot_store.rs` + `src/crates/facade/core/src/agentic/session/turn_skill_agent_snapshot_store.rs` - fork baseline override persistence: `snapshots/skill-agent-baseline-override.json` via - `src/crates/core/src/agentic/persistence/manager.rs` + `src/crates/facade/core/src/agentic/persistence/manager.rs` - turn-time diff injection: `ConversationCoordinator::wrap_user_input(...)` - baseline reminder reuse: `ExecutionEngine::build_cached_prepended_prompt_reminders(...)` - reminder ordering owner: - `src/crates/agent-runtime/src/prompt.rs` + `src/crates/execution/agent-runtime/src/prompt.rs` The strategy is: @@ -293,10 +293,10 @@ BitFun does allow tool customization at the agent/profile level: Relevant code: - mode/profile tool overrides: - `src/crates/core/src/service/config/types.rs` - and `src/crates/core/src/service/config/mode_config_canonicalizer.rs` + `src/crates/facade/core/src/service/config/types.rs` + and `src/crates/facade/core/src/service/config/mode_config_canonicalizer.rs` - runtime resolution of effective agent tool policy: - `src/crates/core/src/agentic/agents/registry/query.rs` + `src/crates/facade/core/src/agentic/agents/registry/query.rs` However, tool manifests are still recomputed per turn/request, not diff-patched like skill and subagent listings. @@ -312,12 +312,12 @@ More precisely: Relevant code: - request-time tool manifest resolution: - `src/crates/core/src/agentic/execution/execution_engine.rs` + `src/crates/facade/core/src/agentic/execution/execution_engine.rs` - tool definitions included in token estimation: - `src/crates/core/src/util/token_counter.rs` + `src/crates/facade/core/src/util/token_counter.rs` - provider request-body tool attachment: - `src/crates/ai-adapters/src/providers/openai/responses.rs` - and `src/crates/ai-adapters/src/providers/openai/codex_chatgpt.rs` + `src/crates/integrations/ai-adapters/src/providers/openai/responses.rs` + and `src/crates/integrations/ai-adapters/src/providers/openai/codex_chatgpt.rs` This is why tool changes cannot currently be handled the same way as skill/subagent listing updates. @@ -374,9 +374,9 @@ BitFun's cache-hit strategy. Relevant code: - compression flow: - `src/crates/core/src/agentic/execution/execution_engine.rs` + `src/crates/facade/core/src/agentic/execution/execution_engine.rs` - compressor: - `src/crates/core/src/agentic/session/compression/` + `src/crates/facade/core/src/agentic/session/compression/` There are two different cache-reuse stories around compression: @@ -443,13 +443,13 @@ measured instead of guessed. Relevant code: - unified usage types: - `src/crates/ai-adapters/src/stream/types/unified.rs` + `src/crates/integrations/ai-adapters/src/stream/types/unified.rs` - Anthropic mapping: - `src/crates/ai-adapters/src/stream/types/anthropic.rs` + `src/crates/integrations/ai-adapters/src/stream/types/anthropic.rs` - OpenAI / DeepSeek mapping: - `src/crates/ai-adapters/src/stream/types/openai.rs` + `src/crates/integrations/ai-adapters/src/stream/types/openai.rs` - runtime event emission: - `src/crates/core/src/agentic/execution/round_executor.rs` + `src/crates/facade/core/src/agentic/execution/round_executor.rs` Two fields matter: @@ -481,21 +481,21 @@ The most important implementation choices are: ## Implementation Map - Prompt cache model: - `src/crates/agent-runtime/src/prompt_cache.rs` + `src/crates/execution/agent-runtime/src/prompt_cache.rs` - Prompt cache lifecycle: - `src/crates/core/src/agentic/session/session_manager.rs` + `src/crates/facade/core/src/agentic/session/session_manager.rs` - Request assembly and cache hits: - `src/crates/core/src/agentic/execution/execution_engine.rs` + `src/crates/facade/core/src/agentic/execution/execution_engine.rs` - Fork snapshot model: - `src/crates/core/src/agentic/fork_agent/mod.rs` + `src/crates/facade/core/src/agentic/fork_agent/mod.rs` - Session branching: - `src/crates/core/src/agentic/persistence/session_branch.rs` + `src/crates/facade/core/src/agentic/persistence/session_branch.rs` - Side-question child sessions: - `src/crates/core/src/agentic/coordination/coordinator.rs` + `src/crates/facade/core/src/agentic/coordination/coordinator.rs` and `src/apps/desktop/src/api/btw_api.rs` - Shared coding-mode identities: - `src/crates/agent-runtime/src/agents.rs` + `src/crates/execution/agent-runtime/src/agents.rs` - Dynamic skill/agent listing snapshots: - `src/crates/core/src/agentic/skill_agent_snapshot.rs` + `src/crates/facade/core/src/agentic/skill_agent_snapshot.rs` - Provider cache telemetry: - `src/crates/ai-adapters/src/stream/types/` + `src/crates/integrations/ai-adapters/src/stream/types/` diff --git a/docs/features/session-runtime-usage-report-design.md b/docs/features/session-runtime-usage-report-design.md index ffc013096..71792c4e3 100644 --- a/docs/features/session-runtime-usage-report-design.md +++ b/docs/features/session-runtime-usage-report-design.md @@ -172,11 +172,11 @@ BitFun can reuse several existing surfaces. | Capability | Current anchor | | --- | --- | -| Agentic event definitions | `src/crates/events/src/agentic.rs` | -| Token usage persistence and aggregation | `src/crates/core/src/service/token_usage/{types.rs,service.rs,subscriber.rs}` | -| Model stream timing currently logged/held during execution | `src/crates/core/src/agentic/execution/{round_executor.rs,stream_processor.rs}` | -| Context compression events and tool-like UI item | `src/crates/core/src/agentic/execution/execution_engine.rs`, `src/web-ui/src/flow_chat/tool-cards/ContextCompressionDisplay.tsx` | -| Tool lifecycle and total duration | `src/crates/core/src/agentic/tools/pipeline/{tool_pipeline.rs,state_manager.rs}` | +| Agentic event definitions | `src/crates/contracts/events/src/agentic.rs` | +| Token usage persistence and aggregation | `src/crates/facade/core/src/service/token_usage/{types.rs,service.rs,subscriber.rs}` | +| Model stream timing currently logged/held during execution | `src/crates/facade/core/src/agentic/execution/{round_executor.rs,stream_processor.rs}` | +| Context compression events and tool-like UI item | `src/crates/facade/core/src/agentic/execution/execution_engine.rs`, `src/web-ui/src/flow_chat/tool-cards/ContextCompressionDisplay.tsx` | +| Tool lifecycle and total duration | `src/crates/facade/core/src/agentic/tools/pipeline/{tool_pipeline.rs,state_manager.rs}` | | CLI slash command handling | `src/apps/cli/src/modes/chat.rs` | | CLI session/tool persistence | `src/apps/cli/src/session.rs`, `src/apps/cli/src/agent/core_adapter.rs` | | Desktop token/compression event routing | `src/web-ui/src/flow_chat/services/flow-chat-manager/EventHandlerModule.ts` | @@ -234,7 +234,7 @@ considered complete. | Area | Current status | Code evidence | Remaining work | | --- | --- | --- | --- | -| Shared report service | Done | `src/crates/core/src/service/session_usage/{service.rs,types.rs,render.rs}` and `SessionAPI.getSessionUsageReport` | Keep the API contract stable while adding future report fields. | +| Shared report service | Done | `src/crates/facade/core/src/service/session_usage/{service.rs,types.rs,render.rs}` and `SessionAPI.getSessionUsageReport` | Keep the API contract stable while adding future report fields. | | Durable local report message | Done | `DialogTurnKind::LocalCommand`, `localCommandKind: 'usage_report'`, `modelVisible: false` | Keep usage report snapshots model-invisible through future history, export, and transcript changes. | | CLI `/usage` coverage | Done for interactive CLI | CLI `usage_*` coverage and the shared renderer | Top-level `bitfun usage --session` is outside the closed product scope. | | Model timing | Mostly done | Optional event and persisted fields for duration, provider/model identity, first chunk, visible output, stream duration, attempts, failure category, and token details | Throughput/TPS and provider-latency claims are outside the closed product scope. | @@ -765,13 +765,13 @@ Executable implementation plan: P1 must move `/usage` from P0 approximation toward factual runtime accounting without changing the report command contract. The implementation order below is test-first and split by ownership boundary so each step can be reviewed independently. 1. Persist runtime facts already owned by the runtime. - - Files: `src/crates/core/src/service/session/types.rs`, `src/crates/core/src/agentic/session/session_manager.rs`, `src/crates/core/src/agentic/coordination/coordinator.rs`, and the tool/model execution call sites that construct persisted session items. + - Files: `src/crates/facade/core/src/service/session/types.rs`, `src/crates/facade/core/src/agentic/session/session_manager.rs`, `src/crates/facade/core/src/agentic/coordination/coordinator.rs`, and the tool/model execution call sites that construct persisted session items. - Add optional fields to persisted model rounds for provider/model identity, first chunk latency, first visible output latency, stream duration, attempt count, failure category, token details, and total duration. - Add optional tool phase durations to persisted tool items: queue wait, preflight, confirmation wait, and execution. - Acceptance: old session JSON still deserializes, new session JSON round-trips with these fields, and missing fields never fail report generation. 2. Consume persisted facts in the usage service. - - File: `src/crates/core/src/service/session_usage/service.rs`. + - File: `src/crates/facade/core/src/service/session_usage/service.rs`. - Prefer persisted model/tool duration fields when present; fall back to existing start/end or result durations only when facts are missing. - Compute active time as a union of known active intervals so overlapping spans do not double-count the denominator. - Exclude `local_command` usage-report turns from scope, wall/active time, model/tool/file/error rows, and slowest spans so generating a report cannot affect the next report. @@ -780,7 +780,7 @@ P1 must move `/usage` from P0 approximation toward factual runtime accounting wi - Acceptance: model rows can exist from runtime span facts even when token records are absent, tool rows expose phase subtotals, slowest spans include model rounds and tools, and the coverage panel explains missing facts conservatively. 3. Keep file-change correlation conservative. - - File: `src/crates/core/src/service/session_usage/service.rs`. + - File: `src/crates/facade/core/src/service/session_usage/service.rs`. - Keep snapshot operations as the highest-trust source for file rows, including remote sessions when cached snapshot summaries are present, then use tool-call metadata as a fallback only for recognized edit/write/delete operations. - Preserve operation ids and turn indexes for later UI navigation, but do not invent line counts when no snapshot or diff fact exists. - Acceptance: remote sessions with cached snapshot summaries show file/line rows; remote sessions that only have tool metadata show edited files with unknown line counts instead of "unavailable"; files without trustworthy evidence remain omitted. @@ -963,7 +963,7 @@ Files: - Read: `session-runtime-usage-report-design.md` - Read: `AGENTS.md` - Read: `src/web-ui/AGENTS.md` -- Read: `src/crates/core/AGENTS.md` +- Read: `src/crates/facade/core/AGENTS.md` Steps: @@ -1000,10 +1000,10 @@ Goal: define the stable structured contract used by CLI, Desktop, and future ser Files: -- Create: `src/crates/core/src/service/session_usage/types.rs` -- Create: `src/crates/core/src/service/session_usage/mod.rs` -- Modify: `src/crates/core/src/service/mod.rs` -- Test: `src/crates/core/src/service/session_usage/types.rs` or nearby module tests +- Create: `src/crates/facade/core/src/service/session_usage/types.rs` +- Create: `src/crates/facade/core/src/service/session_usage/mod.rs` +- Modify: `src/crates/facade/core/src/service/mod.rs` +- Test: `src/crates/facade/core/src/service/session_usage/types.rs` or nearby module tests Steps: @@ -1046,8 +1046,8 @@ Goal: give Desktop `/usage` a durable chat representation without polluting futu Files: -- Modify: `src/crates/core/src/service/session/types.rs` -- Modify: `src/crates/core/src/agentic/session/session_manager.rs` +- Modify: `src/crates/facade/core/src/service/session/types.rs` +- Modify: `src/crates/facade/core/src/agentic/session/session_manager.rs` - Modify: `src/web-ui/src/flow_chat/types/flow-chat.ts` - Modify: `src/web-ui/src/flow_chat/store/FlowChatStore.ts` - Test: session serialization/deserialization tests near existing session tests @@ -1090,13 +1090,13 @@ Goal: produce a useful `/usage` report without changing runtime event production Files: -- Create: `src/crates/core/src/service/session_usage/service.rs` -- Modify: `src/crates/core/src/service/session_usage/mod.rs` -- Modify: `src/crates/core/src/service/mod.rs` -- Read/reuse: `src/crates/core/src/service/token_usage/service.rs` -- Read/reuse: `src/crates/core/src/service/session/types.rs` -- Read/reuse: `src/crates/core/src/service/snapshot/service.rs` -- Test: `src/crates/core/src/service/session_usage/service.rs` +- Create: `src/crates/facade/core/src/service/session_usage/service.rs` +- Modify: `src/crates/facade/core/src/service/session_usage/mod.rs` +- Modify: `src/crates/facade/core/src/service/mod.rs` +- Read/reuse: `src/crates/facade/core/src/service/token_usage/service.rs` +- Read/reuse: `src/crates/facade/core/src/service/session/types.rs` +- Read/reuse: `src/crates/facade/core/src/service/snapshot/service.rs` +- Test: `src/crates/facade/core/src/service/session_usage/service.rs` Steps: @@ -1143,8 +1143,8 @@ Goal: render the same report as CLI terminal text and Desktop Markdown without d Files: -- Create: `src/crates/core/src/service/session_usage/render.rs` -- Modify: `src/crates/core/src/service/session_usage/mod.rs` +- Create: `src/crates/facade/core/src/service/session_usage/render.rs` +- Modify: `src/crates/facade/core/src/service/session_usage/mod.rs` - Test: renderer snapshot or exact-output tests in Rust Steps: @@ -1323,11 +1323,11 @@ Goal: make model speed and wait-time metrics accurate after the minimal report i Files: -- Modify: `src/crates/events/src/agentic.rs` -- Modify: `src/crates/core/src/agentic/execution/round_executor.rs` -- Modify: `src/crates/core/src/agentic/execution/stream_processor.rs` -- Modify: `src/crates/transport/src/adapters/tauri.rs` -- Modify: `src/crates/transport/src/adapters/websocket.rs` +- Modify: `src/crates/contracts/events/src/agentic.rs` +- Modify: `src/crates/facade/core/src/agentic/execution/round_executor.rs` +- Modify: `src/crates/facade/core/src/agentic/execution/stream_processor.rs` +- Modify: `src/crates/integrations/transport/src/adapters/tauri.rs` +- Modify: `src/crates/integrations/transport/src/adapters/websocket.rs` - Test: Rust event serialization and stream/round executor tests Steps: @@ -1370,9 +1370,9 @@ Goal: explain tool-heavy sessions without relying on logs. Files: -- Modify: `src/crates/events/src/agentic.rs` -- Modify: `src/crates/core/src/agentic/tools/pipeline/tool_pipeline.rs` -- Modify: `src/crates/core/src/agentic/tools/pipeline/state_manager.rs` +- Modify: `src/crates/contracts/events/src/agentic.rs` +- Modify: `src/crates/facade/core/src/agentic/tools/pipeline/tool_pipeline.rs` +- Modify: `src/crates/facade/core/src/agentic/tools/pipeline/state_manager.rs` - Modify: transport adapters for new optional timing fields - Test: tool pipeline/state manager tests @@ -1414,8 +1414,8 @@ Goal: connect usage reports with existing file diff affordances without changing Files: -- Modify: `src/crates/core/src/service/session_usage/service.rs` -- Read/reuse: `src/crates/core/src/service/snapshot/service.rs` +- Modify: `src/crates/facade/core/src/service/session_usage/service.rs` +- Read/reuse: `src/crates/facade/core/src/service/snapshot/service.rs` - Read/reuse: `src/web-ui/src/infrastructure/api/service-api/SnapshotAPI.ts` - Modify later UI: `src/web-ui/src/flow_chat/tool-cards/FileOperationToolCard.tsx` only for report link integration - Test: report aggregation tests with snapshot operation summaries @@ -1549,7 +1549,7 @@ Goal: keep `/usage` focused on current-session observability and prevent scope d Files: -- Harden: `src/crates/core/src/service/session_usage/render.rs` +- Harden: `src/crates/facade/core/src/service/session_usage/render.rs` - Harden: `src/apps/cli/src/main.rs` - Update: `session-runtime-usage-report-design.md` - Test: current-session report and top-level CLI scope tests diff --git a/docs/plans/core-decomposition-completed.md b/docs/plans/core-decomposition-completed.md index 49762a98c..133093b0a 100644 --- a/docs/plans/core-decomposition-completed.md +++ b/docs/plans/core-decomposition-completed.md @@ -28,9 +28,9 @@ trait 已归入稳定接口层,并保留旧路径 re-export。 - session restore 的 storage path resolution、turn-load request、restore timing facts 已进入 Runtime Services / Runtime Ports 边界;core 仍保留具体 persistence IO。 -- `bitfun-core::product_assembly::CoreRuntimeServicesProvider` 已把现有 core session store path resolution、 +- `bitfun-core::product_runtime::CoreRuntimeServicesProvider` 已把现有 core session store path resolution、 remote workspace/projection adapter,以及当前完整产品能力需要的 terminal / Git / Network / MCP catalog - capability marker 注册到 `RuntimeServicesBuilder` 组合中;该边界只表达当前能力可用性,不改变具体执行逻辑。 + capability marker 注册到 `RuntimeServicesBuilder` 组合中;`bitfun-core::product_assembly` 只保留旧路径兼容导出。 ### 1.3 Tool Runtime 与 Product Capability 基线 @@ -45,8 +45,9 @@ - `tool-packs` 已承接 tool provider group plan、按 id 选择和 unknown provider group 校验。 - `product-capabilities` 已承接 capability id、required service capability、tool provider group selection 和 harness provider selection 等 assembly facts。 -- Product Assembly 已承接 `DeliveryProfile`、`CapabilitySet`、完整 product-full provider plan 和 service availability - report;core tool runtime 与 harness registry 已改为消费显式 Product Assembly plan,并保持旧 facade 输出等价。 +- Product Assembly 已承接 `DeliveryProfile`、`CapabilitySet`、完整 product-full provider plan、service availability + report 和 profile-scoped harness registry 入口;core tool runtime 与 harness facade 已改为消费显式 Product Assembly plan, + 并保持旧 facade 输出等价。 ### 1.4 Agent Runtime 与 Harness 契约基线 @@ -72,11 +73,32 @@ - function-agent AI provider acquisition、AI transport error mapping、MiniApp worker process、host side-effect dispatch、 `net.fetch` / `os.info` runtime execution、PathManager integration、marker IO 和 seed 写盘仍留在 core concrete path。 +### 1.6 M5 feature matrix 与 workspace crate 分层 + +- Desktop、CLI 与 ACP 入口均显式以 `default-features = false` + `product-full` 依赖 `bitfun-core`,继续保护完整产品能力集合。 +- Server、Web UI 与 Mobile Web 当前不直接依赖 `bitfun-core`,通过 app / API / transport 边界消费能力。 +- Remote 能力仍作为完整产品集合中的 capability / service integration 组合存在,主要由 `service-integrations` 与 `ssh-remote` + feature group 表达,不声明为独立交付 crate。 +- `src/crates` 已按 `surfaces/`、`facade/`、`integrations/`、`services/`、`product/`、`execution/`、`contracts/` 物理分层; + package name、crate name 和产品功能语义保持不变。 +- `cargo metadata --no-deps`、`cargo tree` 与 `cargo check --workspace` 已证明迁移后的 workspace path 和 product-full + feature graph 可解析。当前 `bitfun-core` no-default 依赖树为 649 行,product-full 为 1228 行。 +- AGENTS module index、README / Contributing 路径说明、i18n contract、DeepReview path classifier 和 core boundary rules + 已同步到分层路径。 + +### 1.7 Product Assembly / Core Facade 收口 + +- `bitfun-core::product_assembly` 已收敛为兼容 facade,provider-neutral assembly facts 由 + `bitfun-product-capabilities` 提供,core-specific runtime service provider 移到 `bitfun-core::product_runtime`。 +- `agentic::harness` 不再在 core 内重新构造 Product Assembly plan,profile-scoped harness registry 入口由 + `bitfun-product-capabilities` 提供,旧 core 路径继续 re-export 保持兼容。 +- boundary check 已禁止 `product_assembly` 重新承载 concrete provider 注册,以及 core harness facade 重新构造 product assembly plan。 + ## 2. 已建立的保护 - owner crate 不得依赖回 `bitfun-core`。 - `product-full` 继续保护完整产品能力集合。 -- boundary check 已覆盖多个 owner crate 的禁止依赖、旧路径 facade-only 和回流约束。 +- boundary check 已覆盖多个 owner crate 的禁止依赖、旧路径 facade-only、回流约束、Product Assembly facade 收口和物理 crate layout。 - 已有 focused baseline 覆盖 tool manifest、GetToolSpec、execution admission、MiniApp storage / builtin asset、 remote workspace fallback、MCP config/catalog、agent-runtime prompt cache、custom subagent、thread-goal tools、 AskUserQuestion、DeepReview hook measurement、tool confirmation、product capability pack、session restore、 @@ -85,12 +107,13 @@ ## 3. 明确未完成边界 -- `bitfun-core` 仍是完整产品 runtime 组装点,不能声明已经退化为纯 compatibility facade。 +- `bitfun-core` 仍是完整产品 runtime 组装点,不能声明已经退化为纯 compatibility facade;本次只完成 Product Assembly facade + 与 core product runtime adapter 的边界收口。 - 产品入口仍主要通过 `bitfun-core` 的 `product-full` 获取完整能力;Product Assembly 已可表达当前完整能力集合, - 但尚未完成按交付形态裁剪 feature / dependency。 + 但尚未真正按交付形态裁剪 default feature / dependency。 - concrete session manager、scheduler lifecycle、event delivery、permission UI/channel wait、prompt assembly、 session persistence IO、AI client factory / provider acquisition 仍在 core。 - Bash tool orchestration、terminal lifecycle / PTY、indexed workspace search service owner、remote shell executor abstraction、 remote terminal concrete impl、MiniApp worker / host / seed / marker IO、Deep Review / DeepResearch / MiniApp concrete workflow execution 仍未完成 owner 迁移。 -- feature matrix、dependency trimming、build-benefit 仍未用 `cargo metadata` / `cargo tree` / build check 数据闭环。 +- no-default 与 product-full 的依赖边界已有数据基线,但 no-default 仍包含较多 concrete 依赖;不能声称各交付形态已达到最小依赖。 diff --git a/docs/plans/core-decomposition-plan.md b/docs/plans/core-decomposition-plan.md index dbdbcca3a..ef6500e63 100644 --- a/docs/plans/core-decomposition-plan.md +++ b/docs/plans/core-decomposition-plan.md @@ -12,28 +12,31 @@ ## 1. 执行原则 - 最终目标是让 `bitfun-core` 从 concrete runtime / product logic 中心收敛为 compatibility facade 与产品组装边界。 -- 依赖方向保持为:Product Surfaces -> Product Assembly / Capabilities -> Harness / Tool Runtime / Agent Runtime SDK - -> Runtime Services -> Stable Contracts / External Providers。 +- 依赖方向保持为:Product Surfaces / Protocol Surfaces -> Facade / Product Assembly + -> Product Capabilities / Concrete Provider Adapters / Services -> Execution Primitives + -> Stable Contracts / External Providers。 - 新增抽象必须同时删除、迁移或显著简化既有 core 路径;纯 facade、纯 guard、纯文档或只新增空接口不算 owner 迁移完成。 - 设计文档保持稳定,只在目标架构判断本身需要修正时修改;阶段状态和执行节奏只写入本计划和 completed 归档。 - 任何可能改变产品行为、权限语义、工具曝光、事件语义、session 生命周期、remote 行为、MiniApp 行为或发布形态的变更必须暂停并单独评审。 ## 2. 当前代码基线判断 -最新 `main` 已包含 function-agent Git concrete service owner 迁移,且当前分支已开始把 Product Assembly 与 -Runtime Services provider 组合显式化。但当前代码仍未达到设计文档的目标状态: +当前代码基线已包含 M1-M4 的 owner 迁移与 M5 的 workspace 分层整理。但当前代码仍未达到设计文档的最终目标状态: -- 产品入口仍通过 `bitfun-core` 的 `product-full` 获得完整能力;Product Assembly 已可表达当前完整能力集合, - 但尚未支撑按交付形态裁剪 feature / dependency。 -- `runtime-services` 已有 typed builder、capability availability 和 core product assembly provider 组合, - 但许多 concrete provider 仍在 core 创建或持有。 +- 产品入口仍通过 `bitfun-core` 的 `product-full` 获得完整能力;Desktop / CLI / ACP 已显式选择完整能力集合, + Server / Web / Mobile Web 不直接依赖 core,但尚未完成按交付形态裁剪 default feature / dependency。 +- `src/crates` 已按 `surfaces/`、`facade/`、`integrations/`、`services/`、`product/`、`execution/`、`contracts/` 分层, + 并由 boundary check 保护;package 名称和产品功能语义保持不变。 +- `runtime-services` 已有 typed builder、capability availability 和 core product runtime provider adapter 组合; + `product_assembly` 已收敛为兼容 facade,但许多 concrete provider 仍在 core 创建或持有。 - core 仍持有 `SessionManager`、`ExecutionEngine`、`PersistenceManager`、`CronService`、`MiniAppManager`、 `RemoteFileService`、`RemoteTerminalManager`、`WorkspaceSearchService`、AI client factory 和大量 concrete tool adapter。 - `tool-runtime` 已迁移部分低风险本地 IO primitive,但 Bash、terminal lifecycle、indexed search、remote shell、 permission UI/channel wait、checkpoint orchestration 和完整 execution pipeline 仍不是独立 Tool Runtime owner。 - `harness` 当前主要承接 descriptor / route plan / registry contract,Deep Review、DeepResearch、MiniApp 的 concrete workflow execution 仍留在 core 或产品路径。 -- feature / dependency trimming 还没有数据证明,不能声称不同交付形态已经可以按最小依赖组合。 +- feature / dependency 已有 no-default 与 product-full 的基线数据,但 no-default 仍包含较多 concrete 依赖, + 不能声称不同交付形态已经可以按最小依赖组合。 ## 3. PR 准出门禁 @@ -47,120 +50,37 @@ Runtime Services provider 组合显式化。但当前代码仍未达到设计文 不满足上述门禁时,不允许把变更作为独立 PR 提交。 -## 4. 后续里程碑 +## 4. 当前计划闭环 -### 4.1 M1(当前变更已闭环):Product Assembly 与 Runtime Services concrete provider 组合 +M1-M5 已完成当前计划中的低风险边界收敛、保护基线和目录分层工作。 +[`core-decomposition-completed.md`](core-decomposition-completed.md) 保留已完成事实与明确未完成边界。 -目标:让产品能力选择、service provider 注册和 capability availability 从 core 隐式聚合转为显式组装边界。 +| 阶段 | 已完成内容 | 未闭合边界 | +|---|---|---| +| M1 Product Assembly / Runtime Services | 建立 product-full provider plan、capability availability 和 service provider 基线;Product Assembly facade 已收口到兼容导出 | 具体 provider 构造仍大量留在 core product runtime adapter | +| M2 Tool Runtime IO/search helper | 将低层 filesystem/search 规划与 helper 迁入 `tool-runtime` | Bash、checkpoint、UI/channel 与 workspace shell 仍由 core adapter 组装 | +| M3 Agent Runtime lifecycle | turn outcome、SessionControl、thread goal、scheduler 决策等 runtime 纯逻辑进入 `agent-runtime` | concrete session manager、event emitter、permission wait 与 prompt assembly 仍在 core | +| M4 Harness / Product Domain | MiniApp 纯决策、bundle facts、function-agent Git concrete snapshot 等进入 owner crate | MiniApp worker/IO、AI provider acquisition 与 DeepReview concrete workflow 仍未完成迁移 | +| M5 feature matrix / directory layout | `src/crates` 已物理分层,feature matrix 与 no-default/product-full 数据基线已更新 | no-default 仍包含较多 concrete 依赖,产品形态尚未达到最小依赖闭环 | -完成口径: +### 4.1 M5 capability / feature matrix -- Product Assembly 已建立 `DeliveryProfile`、`CapabilitySet`、tool provider plan、harness provider plan 和 - service availability report;当前 Desktop / CLI / Server / Remote / ACP / Web 均保持完整 product-full 能力集合, - 先证明“不减少能力”。 -- core 的 tool runtime 与 harness registry 已改为消费显式 Product Assembly plan,旧 facade 输出保持等价。 -- core product assembly provider 已把现有 session store path resolution、remote workspace/projection adapter,以及当前 - product-full 需要的 terminal / Git / Network / MCP catalog capability marker 注册进 `RuntimeServicesBuilder` 组合。 -- 基础必选端口、search concrete、AI provider acquisition 和按交付形态裁剪不在 M1 中完成,继续留给后续 owner 迁移和 - feature/dependency 收尾阶段。 +| 产品形态 | 当前依赖 / feature 状态 | 判断 | +|---|---|---| +| Desktop | `src/apps/desktop` 以 `default-features = false` + `product-full` 依赖 `bitfun-core` | 保持完整产品能力;Tauri / WebDriver 仍属于 app / integration 层 | +| CLI | `src/apps/cli` 以 `default-features = false` + `product-full` 依赖 `bitfun-core`,并启用 ACP 协议入口 | 保持现有能力集合;后续可继续收敛 CLI feature set | +| ACP | `src/crates/surfaces/acp` 当前依赖 `bitfun-core/product-full` | ACP 是产品协议入口,不是 execution/runtime owner | +| Server | `src/apps/server` 当前不直接依赖 `bitfun-core` | 维持 server route / static runtime 边界 | +| Remote | 通过 `service-integrations`、`ssh-remote` 和 runtime ports 表达 | 属于能力组合和 provider 实现,不是独立产品 crate | +| Web / Mobile Web | 当前不直接依赖 Rust core crate,通过 API / transport / event DTO 消费能力 | 分层路径迁移不应改变前端行为 | -**不混入:** default feature 调整、构建收益声明、大规模目录移动、UI 行为变更。 - -**门禁:** -- `cargo check -p bitfun-core --features product-full` -- `cargo test -p bitfun-runtime-services` -- 涉及 remote / terminal / search / Git / AI 时补对应 focused tests。 - -### 4.2 M2(当前变更已闭环):Tool Runtime concrete IO/search execution helper - -目标:在不改变产品工具语义的前提下,让 `tool-runtime` 接管低层 filesystem / search 工具中可证明等价的执行 helper, -减少 core 对 remote shell 命令形态、stdout/stderr marker 和结果窗口裁剪的直接理解。 - -完成口径: -- `tool-runtime` 承接远程 Delete 命令规划、Read awk 命令规划与 marker 解析、LS 命令规划与 stdout entry 规整。 -- `tool-runtime` 承接远程 Glob stdout 规整,以及远程 Grep 命令规划、result text 规整、match count 和 offset/limit windowing。 -- core 删除对应重复拼接/解析逻辑,只保留 agent-facing `Tool` adapter、`ToolUseContext` path resolution、workspace shell 执行、 - checkpoint、UI/channel 副作用和 `ToolResult` 包装。 -- `agent-tools` 继续拥有 manifest / admission / GetToolSpec 等 provider-neutral contract;`terminal-core` 继续拥有 PTY 与 terminal lifecycle。 - -**不混入:** 改变工具 schema、权限默认值、checkpoint 语义、remote fallback、shell 工作目录、terminal prewarm / PTY lifecycle、 -prompt-visible manifest、GetToolSpec、readonly/enabled filtering、expanded/collapsed exposure、MCP/ACP catalog。 - -**门禁:** -- `cargo test -p tool-runtime` -- `cargo test -p bitfun-agent-tools` -- core Grep / remote filesystem focused tests -- `cargo check --workspace` -- `pnpm run check:repo-hygiene` -- `node scripts/check-core-boundaries.mjs` - -### 4.3 M3(当前变更已闭环):Agent Runtime lifecycle 决策闭环 - -目标:让 Agent Runtime SDK 接管 session / turn / scheduler / event / permission 中可迁移的 runtime kernel 主体。 - -完成口径: - -- `agent-runtime` 接管 turn outcome 后处理 plan,统一决定 queue action、round 清理、finished-turn injection drain 和 - thread-goal continuation after-turn 动作;core scheduler 只执行清理、reply、goal continuation 和 dispatch 副作用。 -- `agent-runtime` 接管 `SessionControl` 输入契约、默认值、tool-use render、create/cancel/delete 结果文案和 cancel route 决策; - core tool adapter 只保留 workspace 解析、session manager 调用、scheduler/coordinator cancel 和 `ToolResult` 包装。 -- `agent-runtime` 不新增三方依赖,不依赖 `bitfun-core`、Tauri、ACP、CLI TUI、desktop state 或 concrete service crate。 -- concrete session manager、metadata / persistence IO、scheduler task lifecycle、event emitter wiring、permission UI/channel wait、 - concrete prompt assembly 和 product `Tool` adapter execution 继续留在 core compatibility / Product Assembly adapter。 - -**不混入:** 改变 `/goal`、AskUserQuestion、Task、subagent、post-turn hook、DeepReview measurement、token usage 或 continuation wire shape。 - -**门禁:** -- `cargo test -p bitfun-agent-runtime` -- `cargo test -p bitfun-core --features product-full` 中 session / scheduler / goal / subagent focused tests -- `cargo check -p bitfun-core --features product-full` -- boundary check 证明 agent-runtime 不依赖 core 或平台实现。 - -### 4.4 M4:Harness 与 Product Domain concrete workflow 闭环 - -目标:让 Harness / Product Domains 不再停留在 descriptor 或 pure policy 层,而是接管符合设计边界的工作流和 domain owner。 - -- MiniApp host primitive 的 `fs.*` / `shell.exec` 纯调用计划、参数默认值、错误契约和权限检查计划归入 - Product Domain;core 仅消费计划并继续负责权限 policy resolution、路径规范化、文件 IO、进程执行和输出映射。 -- `net.fetch` / `os.info` 不迁入 Product Domain:前者依赖 `reqwest::Url` 与 HTTP client 语义,后者依赖平台 runtime facts, - 保留在 core concrete path 更符合最小依赖原则。 -- MiniApp seed / marker 的 bundle、hash、marker wire format 与 seed decision 已由 Product Domain 持有;core 仍负责磁盘读写、 - customization metadata、PathManager integration 和 recompile。 -- function-agent 已通过 Product Domain facade 与 core adapter 隔离 Git/AI 端口;AI provider acquisition 和 transport error mapping - 仍留在 core,除非后续单独评审稳定 AI runtime/provider 边界。 -- Harness provider 继续保持 legacy route plan / descriptor owner;Deep Review / DeepResearch concrete execution 不混入本阶段。 - -**不混入:** 改变 MiniApp storage layout、worker 生命周期、host primitive 权限、Deep Review report 语义、function-agent prompt/response policy。 - -**门禁:** -- `cargo test -p bitfun-harness` -- `cargo test -p bitfun-product-domains` -- MiniApp import/sync/recompile/worker focused tests -- function-agent Git/AI focused tests -- 涉及 desktop / API 时补 `cargo check -p bitfun-desktop` - -### 4.5 M5:feature matrix、依赖收益与目录组织收尾 - -目标:在 owner 边界稳定后,用数据证明不同产品形态可以最小依赖组合,并整理 workspace crate 可读性。 - -- 建立 Desktop / CLI / Server / Remote / ACP / Web 的 capability matrix 与 feature group 显式映射。 -- 用 `cargo metadata`、`cargo tree`、`cargo check` 数据证明 no-default、product-full 和关键交付形态的依赖边界。 -- 评估 `src/crates` 是否按 `contracts/`、`runtime/`、`services/`、`integrations/`、`product/` 等目录分组。 -- 目录移动只允许在 owner 边界稳定后执行,并必须同步 Cargo path、AGENTS module index、boundary check 和 workspace build。 - -**不混入:** 运行时 owner 深迁移、三方库大版本升级、构建脚本行为变更、installer 发布流程变更。 - -**门禁:** -- `cargo metadata` -- `cargo tree` 对比 -- `cargo check --workspace` -- `pnpm run check:repo-hygiene` -- `node scripts/check-core-boundaries.mjs` +M5 已通过 `cargo metadata --no-deps` 验证 workspace 结构;`bitfun-core` no-default 依赖树为 649 行,`product-full` 为 1228 行。 +`cargo check --workspace`、`node scripts/check-core-boundaries.mjs` 和 repo hygiene 已验证通过。 ## 5. 执行节奏 -后续按 M4 收尾 -> M5 推进。每个里程碑原则上对应一个大 PR;如果发现风险超过单 PR 可控范围,只允许按 owner 边界拆分, -不允许拆成 facade / guard / helper 小 PR。 +M1-M5 已作为当前计划闭环。后续如继续推进设计文档中的 runtime / service / product owner 深迁移,需要从 Issue #970 +和稳定设计文档重新确认 owner 边界;如果发现风险超过单 PR 可控范围,只允许按 owner 边界拆分,不允许拆成 facade / guard / helper 小 PR。 每个里程碑固定流程: @@ -192,13 +112,15 @@ prompt-visible manifest、GetToolSpec、readonly/enabled filtering、expanded/co - 新 owner crate 必须依赖回 `bitfun-core` 才能编译或测试。 - Runtime / contract crate 开始吸收 Tauri、CLI/TUI、process execution、network client、Git provider、AI provider、MCP client 等 concrete dependency。 - Product Assembly 变成无类型 service locator 或全局 mutable app state。 +- `bitfun-core::product_assembly` 重新承载 concrete provider 注册、harness registry 构造或非兼容 facade 逻辑。 - 无法为 remote、tool、MiniApp、function-agent、scheduler、session lifecycle 迁移提供等价测试或可复核 snapshot。 - PR 只新增抽象而没有迁移、删除或显著简化旧 core 主体路径。 ## 8. 完成标准 -- `bitfun-core` 只保留 compatibility facade 与 product-full / Product Assembly 兼容边界。 -- Agent Runtime SDK、Runtime Services、Tool Runtime、Harness、Product Capabilities、Product Domains 和 Concrete Integrations +- `bitfun-core` 只保留 compatibility facade 与 product-full / Product Assembly 兼容边界;Product Assembly 事实由 owner crate + 提供,core-specific adapter 留在清晰的 product runtime 边界内。 +- Agent Runtime SDK、Runtime Services、Tool Runtime、Harness、Product Capabilities、Product Domains、Concrete Provider Adapters 和 Services 的职责边界可被代码结构、依赖检查和测试证明。 - 产品入口通过 Product Assembly / capability matrix 显式选择能力和 provider,不再被完整 core 隐式牵引。 - 高风险路径具备旧路径兼容、等价保护、明确回滚边界和产品形态验证。 diff --git a/scripts/core-boundaries/checker.mjs b/scripts/core-boundaries/checker.mjs index ae3e881df..560f77d9b 100644 --- a/scripts/core-boundaries/checker.mjs +++ b/scripts/core-boundaries/checker.mjs @@ -1,4 +1,4 @@ -import { readdirSync, readFileSync, statSync } from 'fs'; +import { existsSync, readdirSync, readFileSync, statSync } from 'fs'; import { join, relative } from 'path'; import { fileURLToPath } from 'url'; import { dirname } from 'path'; @@ -8,6 +8,11 @@ import { lightweightBoundaryRules, noCoreDependencyCrates, } from './rules/crate-rules.mjs'; +import { + crateLayoutLayerNames, + crateLayoutRules, + cratePathForName, +} from './rules/crate-layout.mjs'; import { coreProductFullFeatureAssemblyRule, optionalDependencyFeatureOwnerRules, @@ -35,6 +40,23 @@ function readText(path) { return readFileSync(path, 'utf8'); } +function repoPathToFsPath(repoPath) { + return join(ROOT, ...repoPath.split('/')); +} + +function crateDirForName(crateName) { + const repoPath = cratePathForName(crateName); + if (!repoPath) { + failures.push({ + path: ROOT, + line: 1, + message: `missing crate layout rule for ${crateName}`, + }); + return join(ROOT, 'src', 'crates', crateName); + } + return repoPathToFsPath(repoPath); +} + function walkFiles(dir, visit) { for (const entry of readdirSync(dir)) { const path = join(dir, entry); @@ -275,6 +297,121 @@ function collectKnownDependencyNames() { ); } +function parseWorkspaceMembers() { + const manifestPath = join(ROOT, 'Cargo.toml'); + const lines = readText(manifestPath).split(/\r?\n/); + const members = []; + let inMembers = false; + for (const line of lines) { + const trimmed = line.trim(); + if (!inMembers) { + if (trimmed === 'members = [' || trimmed.startsWith('members = [')) { + inMembers = true; + } + } + if (!inMembers) { + continue; + } + for (const match of trimmed.matchAll(/"([^"]+)"/g)) { + members.push(match[1]); + } + if (trimmed.includes(']')) { + break; + } + } + return members; +} + +function checkCrateLayoutRules() { + const manifestPath = join(ROOT, 'Cargo.toml'); + const requiredCrateNames = new Set(['core', ...noCoreDependencyCrates]); + const layoutCrateNames = new Set(); + const layoutPaths = new Set(); + const workspaceMembers = new Set(parseWorkspaceMembers()); + const expectedWorkspaceCratePaths = new Set(crateLayoutRules.map((rule) => rule.path)); + + for (const rule of crateLayoutRules) { + if (!crateLayoutLayerNames.includes(rule.layer)) { + failures.push({ + path: manifestPath, + line: 1, + message: `crate layout rule for ${rule.crateName} uses unknown layer ${rule.layer}`, + }); + } + if (layoutCrateNames.has(rule.crateName)) { + failures.push({ + path: manifestPath, + line: 1, + message: `duplicate crate layout rule for ${rule.crateName}`, + }); + } + if (layoutPaths.has(rule.path)) { + failures.push({ + path: manifestPath, + line: 1, + message: `duplicate crate layout path ${rule.path}`, + }); + } + layoutCrateNames.add(rule.crateName); + layoutPaths.add(rule.path); + + const crateManifestPath = repoPathToFsPath(`${rule.path}/Cargo.toml`); + if (!existsSync(crateManifestPath)) { + failures.push({ + path: manifestPath, + line: 1, + message: `crate layout path for ${rule.crateName} is missing Cargo.toml: ${rule.path}`, + }); + } + if (!workspaceMembers.has(rule.path)) { + failures.push({ + path: manifestPath, + line: 1, + message: `workspace members must include crate layout path: ${rule.path}`, + }); + } + } + + for (const crateName of requiredCrateNames) { + if (!layoutCrateNames.has(crateName)) { + failures.push({ + path: manifestPath, + line: 1, + message: `crate layout rules must cover workspace owner crate: ${crateName}`, + }); + } + } + + for (const member of workspaceMembers) { + if (!member.startsWith('src/crates/')) { + continue; + } + if (!expectedWorkspaceCratePaths.has(member)) { + failures.push({ + path: manifestPath, + line: 1, + message: `workspace crate member must use an approved layered path: ${member}`, + }); + } + } + + const cratesRoot = join(ROOT, 'src', 'crates'); + const allowedRootEntries = new Set([...crateLayoutLayerNames, 'LOGGING.md']); + for (const entry of readdirSync(cratesRoot)) { + if (allowedRootEntries.has(entry)) { + continue; + } + const entryPath = join(cratesRoot, entry); + if (statSync(entryPath).isDirectory() && existsSync(join(entryPath, 'Cargo.toml'))) { + failures.push({ + path: entryPath, + line: 1, + message: `workspace crate must live under a layer directory, not directly under src/crates: ${entry}`, + }); + } + } +} + function forbiddenRuleTextForPath(path) { return forbiddenContentRules .filter((rule) => rule.path === path) @@ -403,7 +540,7 @@ function checkOptionalDependencyFeatureOwners(crateDir, rule) { } function checkProductCoreFeatureAssembly(rule) { - const manifestPath = join(ROOT, ...rule.manifestPath.split('/')); + const manifestPath = repoPathToFsPath(rule.manifestPath); const deps = parseManifestDependencies(readText(manifestPath).split(/\r?\n/)); const dep = deps.find((candidate) => candidate.name === rule.dependencyName); if (!dep) { @@ -450,7 +587,7 @@ function checkProductCoreFeatureAssemblyCoverage() { } function checkCoreDefaultProductFullFeature() { - const manifestPath = join(ROOT, 'src', 'crates', 'core', 'Cargo.toml'); + const manifestPath = join(crateDirForName('core'), 'Cargo.toml'); const features = parseManifestFeatures(readText(manifestPath).split(/\r?\n/)); if (!featureReferencesFeature(features.get('default'), 'product-full')) { failures.push({ @@ -463,7 +600,7 @@ function checkCoreDefaultProductFullFeature() { } function checkCoreProductFullFeatureAssembly(rule) { - const manifestPath = join(ROOT, ...rule.manifestPath.split('/')); + const manifestPath = repoPathToFsPath(rule.manifestPath); const features = parseManifestFeatures(readText(manifestPath).split(/\r?\n/)); const productFull = features.get(rule.featureName); if (!productFull) { @@ -486,7 +623,7 @@ function checkCoreProductFullFeatureAssembly(rule) { } function checkOwnerCrateFeatureAssembly(rule) { - const manifestPath = join(ROOT, ...rule.manifestPath.split('/')); + const manifestPath = repoPathToFsPath(rule.manifestPath); const features = parseManifestFeatures(readText(manifestPath).split(/\r?\n/)); const allowedProductFullFeatures = new Set(rule.requiredProductFullFeatures); const defaultFeature = features.get('default'); @@ -646,7 +783,7 @@ function createFacadeLineChecker(importPrefix) { } function checkFacadeOnlyFile(repoPath, importPrefix, reason) { - const path = join(ROOT, ...repoPath.split('/')); + const path = repoPathToFsPath(repoPath); const acceptsLine = createFacadeLineChecker(importPrefix); const lines = readText(path).split(/\r?\n/); lines.forEach((line, index) => { @@ -669,7 +806,7 @@ function checkFacadeOnlyFile(repoPath, importPrefix, reason) { } function checkForbiddenContent(repoPath, patterns) { - const path = join(ROOT, ...repoPath.split('/')); + const path = repoPathToFsPath(repoPath); const lines = readText(path).split(/\r?\n/); lines.forEach((line, index) => { for (const pattern of patterns) { @@ -685,7 +822,7 @@ function checkForbiddenContent(repoPath, patterns) { } function checkRequiredContent(repoPath, patterns, reason) { - const path = join(ROOT, ...repoPath.split('/')); + const path = repoPathToFsPath(repoPath); const text = readText(path); for (const pattern of patterns) { if (!pattern.regex.test(text)) { @@ -699,7 +836,7 @@ function checkRequiredContent(repoPath, patterns, reason) { } function checkForbiddenContentUnder(repoDir, patterns, reason) { - const dir = join(ROOT, ...repoDir.split('/')); + const dir = repoPathToFsPath(repoDir); walkFiles(dir, (path) => { if (!path.endsWith('.rs')) { return; @@ -754,28 +891,30 @@ export function runCoreBoundaryCheck() { return; } + checkCrateLayoutRules(); + for (const crateName of noCoreDependencyCrates) { - const crateDir = join(ROOT, 'src', 'crates', crateName); + const crateDir = crateDirForName(crateName); checkCargoManifest(crateDir); checkRustImports(crateDir); } for (const rule of lightweightBoundaryRules) { - const crateDir = join(ROOT, 'src', 'crates', rule.crateName); + const crateDir = crateDirForName(rule.crateName); const messageForDep = (dep) => `${rule.reason}; forbidden dependency: ${dep}`; checkForbiddenManifestDeps(crateDir, rule.forbiddenDeps, messageForDep); checkForbiddenRustImports(crateDir, rule.forbiddenDeps, messageForDep); } for (const rule of dependencyProfileRules) { - const crateDir = join(ROOT, 'src', 'crates', rule.crateName); + const crateDir = crateDirForName(rule.crateName); const messageForDep = (dep) => `${rule.reason}; ${rule.profileName} forbids non-optional dependency: ${dep}`; checkForbiddenNonOptionalManifestDeps(crateDir, rule.forbiddenNonOptionalDeps, messageForDep); } for (const rule of optionalDependencyFeatureOwnerRules) { - const crateDir = join(ROOT, 'src', 'crates', rule.crateName); + const crateDir = crateDirForName(rule.crateName); checkOptionalDependencyFeatureOwners(crateDir, rule); } diff --git a/scripts/core-boundaries/rules/crate-layout.mjs b/scripts/core-boundaries/rules/crate-layout.mjs new file mode 100644 index 000000000..7e959b6d5 --- /dev/null +++ b/scripts/core-boundaries/rules/crate-layout.mjs @@ -0,0 +1,51 @@ +// Physical crate layout rules. Package names remain stable; this file only +// owns where workspace crates live under src/crates. + +export const crateLayoutRules = [ + { crateName: 'core-types', layer: 'contracts', path: 'src/crates/contracts/core-types' }, + { crateName: 'events', layer: 'contracts', path: 'src/crates/contracts/events' }, + { crateName: 'runtime-ports', layer: 'contracts', path: 'src/crates/contracts/runtime-ports' }, + + { crateName: 'agent-runtime', layer: 'execution', path: 'src/crates/execution/agent-runtime' }, + { crateName: 'agent-stream', layer: 'execution', path: 'src/crates/execution/agent-stream' }, + { crateName: 'agent-tools', layer: 'execution', path: 'src/crates/execution/agent-tools' }, + { crateName: 'harness', layer: 'execution', path: 'src/crates/execution/harness' }, + { crateName: 'runtime-services', layer: 'execution', path: 'src/crates/execution/runtime-services' }, + { crateName: 'tool-packs', layer: 'execution', path: 'src/crates/execution/tool-packs' }, + { crateName: 'tool-runtime', layer: 'execution', path: 'src/crates/execution/tool-runtime' }, + + { crateName: 'product-capabilities', layer: 'product', path: 'src/crates/product/product-capabilities' }, + { crateName: 'product-domains', layer: 'product', path: 'src/crates/product/product-domains' }, + + { crateName: 'services-core', layer: 'services', path: 'src/crates/services/services-core' }, + { crateName: 'services-integrations', layer: 'services', path: 'src/crates/services/services-integrations' }, + { crateName: 'terminal', layer: 'services', path: 'src/crates/services/terminal' }, + + { crateName: 'acp', layer: 'surfaces', path: 'src/crates/surfaces/acp' }, + { crateName: 'ai-adapters', layer: 'integrations', path: 'src/crates/integrations/ai-adapters' }, + { crateName: 'api-layer', layer: 'integrations', path: 'src/crates/integrations/api-layer' }, + { crateName: 'transport', layer: 'integrations', path: 'src/crates/integrations/transport' }, + { crateName: 'webdriver', layer: 'integrations', path: 'src/crates/integrations/webdriver' }, + + { crateName: 'core', layer: 'facade', path: 'src/crates/facade/core' }, +]; + +export const crateLayoutLayerNames = [ + 'surfaces', + 'facade', + 'integrations', + 'services', + 'product', + 'execution', + 'contracts', +]; + +const crateLayoutByName = new Map(crateLayoutRules.map((rule) => [rule.crateName, rule])); + +export function crateLayoutRuleForName(crateName) { + return crateLayoutByName.get(crateName); +} + +export function cratePathForName(crateName) { + return crateLayoutRuleForName(crateName)?.path; +} diff --git a/scripts/core-boundaries/rules/feature-rules.mjs b/scripts/core-boundaries/rules/feature-rules.mjs index ecc05f3af..f30cf9a57 100644 --- a/scripts/core-boundaries/rules/feature-rules.mjs +++ b/scripts/core-boundaries/rules/feature-rules.mjs @@ -98,17 +98,20 @@ export const productCoreFeatureAssemblyRules = [ reason: 'CLI must explicitly assemble the full bitfun-core product runtime', }, { - manifestPath: 'src/crates/acp/Cargo.toml', + manifestPath: 'src/crates/surfaces/acp/Cargo.toml', dependencyName: 'bitfun-core', requiredFeatures: ['product-full'], reason: 'ACP must explicitly assemble the full bitfun-core product runtime', }, ]; -export const productCoreFeatureAssemblyScanRoots = ['src/apps', 'src/crates/acp']; +export const productCoreFeatureAssemblyScanRoots = [ + 'src/apps', + 'src/crates/surfaces/acp', +]; export const coreProductFullFeatureAssemblyRule = { - manifestPath: 'src/crates/core/Cargo.toml', + manifestPath: 'src/crates/facade/core/Cargo.toml', featureName: 'product-full', requiredFeatureRefs: [ 'ssh-remote', @@ -122,7 +125,7 @@ export const coreProductFullFeatureAssemblyRule = { export const ownerCrateFeatureAssemblyRules = [ { - manifestPath: 'src/crates/tool-packs/Cargo.toml', + manifestPath: 'src/crates/execution/tool-packs/Cargo.toml', reason: 'tool-packs must keep product feature groups explicit and default-light', requiredProductFullFeatures: [ 'basic', @@ -136,7 +139,7 @@ export const ownerCrateFeatureAssemblyRules = [ ], }, { - manifestPath: 'src/crates/services-integrations/Cargo.toml', + manifestPath: 'src/crates/services/services-integrations/Cargo.toml', reason: 'services-integrations must keep integration feature groups explicit and default-light', requiredProductFullFeatures: [ 'announcement', @@ -149,7 +152,7 @@ export const ownerCrateFeatureAssemblyRules = [ ], }, { - manifestPath: 'src/crates/product-domains/Cargo.toml', + manifestPath: 'src/crates/product/product-domains/Cargo.toml', reason: 'product-domains must keep product domain feature groups explicit and default-light', requiredProductFullFeatures: ['miniapp', 'function-agents'], }, diff --git a/scripts/core-boundaries/rules/source/facade-rules.mjs b/scripts/core-boundaries/rules/source/facade-rules.mjs index c5cd74a9f..19387531e 100644 --- a/scripts/core-boundaries/rules/source/facade-rules.mjs +++ b/scripts/core-boundaries/rules/source/facade-rules.mjs @@ -2,92 +2,92 @@ export const facadeOnlyFiles = [ { - path: 'src/crates/core/src/infrastructure/filesystem/mod.rs', + path: 'src/crates/facade/core/src/infrastructure/filesystem/mod.rs', importPrefix: 'bitfun_services_core::filesystem', reason: 'core filesystem infrastructure facade must only re-export the services-core owner crate', }, { - path: 'src/crates/core/src/service/filesystem/listing.rs', + path: 'src/crates/facade/core/src/service/filesystem/listing.rs', importPrefix: 'bitfun_services_core::filesystem', reason: 'core filesystem listing facade must only re-export the services-core owner crate', }, { - path: 'src/crates/core/src/service/filesystem/types.rs', + path: 'src/crates/facade/core/src/service/filesystem/types.rs', importPrefix: 'bitfun_services_core::filesystem', reason: 'core filesystem DTO facade must only re-export the services-core owner crate', }, { - path: 'src/crates/core/src/service/git/git_service.rs', + path: 'src/crates/facade/core/src/service/git/git_service.rs', importPrefix: 'bitfun_services_integrations::git', reason: 'core git service facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/git/git_types.rs', + path: 'src/crates/facade/core/src/service/git/git_types.rs', importPrefix: 'bitfun_services_integrations::git', reason: 'core git types facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/git/git_utils.rs', + path: 'src/crates/facade/core/src/service/git/git_utils.rs', importPrefix: 'bitfun_services_integrations::git', reason: 'core git utils facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/git/graph.rs', + path: 'src/crates/facade/core/src/service/git/graph.rs', importPrefix: 'bitfun_services_integrations::git', reason: 'core git graph facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/remote_ssh/types.rs', + path: 'src/crates/facade/core/src/service/remote_ssh/types.rs', importPrefix: 'bitfun_services_integrations::remote_ssh', reason: 'core remote SSH types facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/mcp/tool_info.rs', + path: 'src/crates/facade/core/src/service/mcp/tool_info.rs', importPrefix: 'bitfun_services_integrations::mcp', reason: 'core MCP tool info facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/mcp/tool_name.rs', + path: 'src/crates/facade/core/src/service/mcp/tool_name.rs', importPrefix: 'bitfun_services_integrations::mcp', reason: 'core MCP tool name facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/mcp/protocol/types.rs', + path: 'src/crates/facade/core/src/service/mcp/protocol/types.rs', importPrefix: 'bitfun_services_integrations::mcp', reason: 'core MCP protocol types facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/mcp/protocol/transport.rs', + path: 'src/crates/facade/core/src/service/mcp/protocol/transport.rs', importPrefix: 'bitfun_services_integrations::mcp::protocol', reason: 'core MCP stdio transport facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/mcp/protocol/transport_remote.rs', + path: 'src/crates/facade/core/src/service/mcp/protocol/transport_remote.rs', importPrefix: 'bitfun_services_integrations::mcp::protocol', reason: 'core MCP remote transport facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/mcp/server/connection.rs', + path: 'src/crates/facade/core/src/service/mcp/server/connection.rs', importPrefix: 'bitfun_services_integrations::mcp::server', reason: 'core MCP connection facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/mcp/config/location.rs', + path: 'src/crates/facade/core/src/service/mcp/config/location.rs', importPrefix: 'bitfun_services_integrations::mcp', reason: 'core MCP config location facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/mcp/adapter/resource.rs', + path: 'src/crates/facade/core/src/service/mcp/adapter/resource.rs', importPrefix: 'bitfun_services_integrations::mcp', reason: 'core MCP resource adapter facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/mcp/adapter/prompt.rs', + path: 'src/crates/facade/core/src/service/mcp/adapter/prompt.rs', importPrefix: 'bitfun_services_integrations::mcp', reason: 'core MCP prompt adapter facade must only re-export the integrations owner crate', }, { - path: 'src/crates/core/src/service/announcement/types.rs', + path: 'src/crates/facade/core/src/service/announcement/types.rs', importPrefix: 'bitfun_services_integrations::announcement', reason: 'core announcement types facade must only re-export the integrations owner crate', }, diff --git a/scripts/core-boundaries/rules/source/forbidden-rules.mjs b/scripts/core-boundaries/rules/source/forbidden-rules.mjs index cf277dcb1..48d85feff 100644 --- a/scripts/core-boundaries/rules/source/forbidden-rules.mjs +++ b/scripts/core-boundaries/rules/source/forbidden-rules.mjs @@ -2,7 +2,42 @@ export const forbiddenContentRules = [ { - path: 'src/crates/core/src/function_agents/runtime_services.rs', + path: 'src/crates/facade/core/src/product_assembly.rs', + patterns: [ + { + regex: /\bpub struct CoreRuntimeServicesProvider\b/, + message: + 'core product_assembly must remain a compatibility facade; move core-specific runtime service providers to product runtime adapters', + }, + { + regex: /\bimpl RuntimeServicesProvider for CoreRuntimeServicesProvider\b/, + message: + 'core product_assembly must not own runtime service provider registration; use the product runtime adapter path', + }, + { + regex: /\bCoreSessionStorePort\b/, + message: + 'core product_assembly must not bind concrete session store adapters directly; use the product runtime adapter path', + }, + ], + }, + { + path: 'src/crates/facade/core/src/agentic/harness.rs', + patterns: [ + { + regex: /\bproduct_assembly_plan_for_profile\b/, + message: + 'core agentic harness facade must not rebuild product assembly plans; use bitfun-product-capabilities harness registry entrypoints', + }, + { + regex: /\bfn product_harness_registry_for_profile\b/, + message: + 'core agentic harness facade must not own profile-scoped harness registry construction', + }, + ], + }, + { + path: 'src/crates/facade/core/src/function_agents/runtime_services.rs', patterns: [ { regex: /\bCoreFunctionAgentGitService\b/, @@ -27,7 +62,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/product-capabilities/src/lib.rs', + path: 'src/crates/product/product-capabilities/src/lib.rs', patterns: [ { regex: /\bpub struct HarnessProviderDescriptor\b/, @@ -57,7 +92,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/filesystem/service.rs', + path: 'src/crates/facade/core/src/service/filesystem/service.rs', patterns: [ { regex: /\btokio::fs::/, @@ -87,7 +122,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/miniapp/runtime_detect.rs', + path: 'src/crates/facade/core/src/miniapp/runtime_detect.rs', patterns: [ { regex: /\bCoreMiniAppRuntimeProbe\b/, @@ -112,7 +147,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/prompt_builder/user_context.rs', + path: 'src/crates/facade/core/src/agentic/agents/prompt_builder/user_context.rs', patterns: [ { regex: /\bpub\s+enum\s+UserContextSection\b/, @@ -127,7 +162,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/mod.rs', + path: 'src/crates/facade/core/src/agentic/agents/mod.rs', patterns: [ { regex: /\bpub const SHARED_CODING_MODE_PROMPT_TEMPLATE\b/, @@ -167,7 +202,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/registry/query.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/query.rs', patterns: [ { regex: /"agentic"\s*=>\s*0[\s\S]*"Cowork"\s*=>\s*1/, @@ -182,7 +217,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/registry/types.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/types.rs', patterns: [ { regex: /\bpub enum SubAgentSource\b/, @@ -192,7 +227,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/session/prompt_cache.rs', + path: 'src/crates/facade/core/src/agentic/session/prompt_cache.rs', patterns: [ { regex: /\bpub const PROMPT_CACHE_SCHEMA_VERSION\b/, @@ -227,7 +262,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/prompt_builder/prompt_builder_impl.rs', + path: 'src/crates/facade/core/src/agentic/agents/prompt_builder/prompt_builder_impl.rs', patterns: [ { regex: /\bpub\s+struct\s+ToolListingSections\b/, @@ -242,7 +277,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/execution/types.rs', + path: 'src/crates/facade/core/src/agentic/execution/types.rs', patterns: [ { regex: /\bpub\s+enum\s+FinishReason\b/, @@ -252,7 +287,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/events/types.rs', + path: 'src/crates/facade/core/src/agentic/events/types.rs', patterns: [ { regex: /SessionState::Idle\s*=>\s*"idle"/, @@ -272,7 +307,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/coordination/scheduler.rs', + path: 'src/crates/facade/core/src/agentic/coordination/scheduler.rs', patterns: [ { regex: /\bconst\s+MAX_QUEUE_DEPTH\b/, @@ -337,7 +372,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/framework.rs', + path: 'src/crates/facade/core/src/agentic/tools/framework.rs', patterns: [ { regex: /\bpub struct DynamicMcpToolInfo\b/, @@ -415,7 +450,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/pipeline/tool_pipeline.rs', + path: 'src/crates/facade/core/src/agentic/tools/pipeline/tool_pipeline.rs', patterns: [ { regex: /framework::(?:\{[^}]*\bToolUseContext\b[^}]*\}|\bToolUseContext\b)/, @@ -450,7 +485,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/definitions/custom/subagent.rs', + path: 'src/crates/facade/core/src/agentic/agents/definitions/custom/subagent.rs', patterns: [ { regex: /\bFrontMatterMarkdown\b/, @@ -465,7 +500,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/registry/custom.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/custom.rs', patterns: [ { regex: /\bCustomSubagentLoader\b/, @@ -485,7 +520,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/subagent_runtime/mod.rs', + path: 'src/crates/facade/core/src/agentic/subagent_runtime/mod.rs', patterns: [ { regex: /\bstruct\s+DelegationPolicy\b/, @@ -500,7 +535,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/coordination/coordinator.rs', + path: 'src/crates/facade/core/src/agentic/coordination/coordinator.rs', patterns: [ { regex: /\benum\s+DialogTriggerSource\b/, @@ -510,7 +545,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/coordination/scheduler.rs', + path: 'src/crates/facade/core/src/agentic/coordination/scheduler.rs', patterns: [ { regex: /\benum\s+DialogQueuePriority\b/, @@ -540,7 +575,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/round_preempt.rs', + path: 'src/crates/facade/core/src/agentic/round_preempt.rs', patterns: [ { regex: /\btrait\s+DialogRoundPreemptSource\b/, @@ -580,7 +615,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/goal_mode/mod.rs', + path: 'src/crates/facade/core/src/agentic/goal_mode/mod.rs', patterns: [ { regex: /\bconst\s+GOAL_MODE_METADATA_KEY\b/, @@ -641,7 +676,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/core/message.rs', + path: 'src/crates/facade/core/src/agentic/core/message.rs', patterns: [ { regex: /\bstruct\s+CompressionContract\b/, @@ -658,7 +693,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/workspace/manager.rs', + path: 'src/crates/facade/core/src/service/workspace/manager.rs', patterns: [ { regex: /\bstruct\s+RelatedPath\b/, @@ -667,7 +702,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/file_read_state_runtime.rs', + path: 'src/crates/facade/core/src/agentic/tools/file_read_state_runtime.rs', patterns: [ { regex: /framework::(?:\{[^}]*\bToolUseContext\b[^}]*\}|\bToolUseContext\b)/, @@ -677,7 +712,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/tool_result_storage.rs', + path: 'src/crates/facade/core/src/agentic/tools/tool_result_storage.rs', patterns: [ { regex: /framework::(?:\{[^}]*\bToolUseContext\b[^}]*\}|\bToolUseContext\b)/, @@ -687,7 +722,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/post_call_hooks.rs', + path: 'src/crates/facade/core/src/agentic/tools/post_call_hooks.rs', patterns: [ { regex: /framework::(?:\{[^}]*\bToolUseContext\b[^}]*\}|\bToolUseContext\b)/, @@ -697,7 +732,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/tool_adapter.rs', + path: 'src/crates/facade/core/src/agentic/tools/tool_adapter.rs', patterns: [ { regex: /framework::(?:\{[^}]*\bToolUseContext\b[^}]*\}|\bToolUseContext\b)/, @@ -707,7 +742,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime.rs', patterns: [ { regex: /framework::(?:\{[^}]*\bToolUseContext\b[^}]*\}|\bToolUseContext\b)/, @@ -717,7 +752,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/catalog.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/catalog.rs', patterns: [ { regex: /framework::(?:\{[^}]*\bToolUseContext\b[^}]*\}|\bToolUseContext\b)/, @@ -727,7 +762,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs', patterns: [ { regex: /framework::(?:\{[^}]*\bToolUseContext\b[^}]*\}|\bToolUseContext\b)/, @@ -737,7 +772,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/manifest_resolver.rs', + path: 'src/crates/facade/core/src/agentic/tools/manifest_resolver.rs', patterns: [ { regex: /framework::(?:\{[^}]*\bToolUseContext\b[^}]*\}|\bToolUseContext\b)/, @@ -767,7 +802,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/workspace.rs', + path: 'src/crates/facade/core/src/agentic/workspace.rs', patterns: [ { regex: /\bpub\s+trait\s+WorkspaceFileSystem\b/, @@ -802,7 +837,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/execution/execution_engine.rs', + path: 'src/crates/facade/core/src/agentic/execution/execution_engine.rs', patterns: [ { regex: /\bGetToolSpecLoadObservation\b/, @@ -822,7 +857,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/miniapp/manager.rs', + path: 'src/crates/facade/core/src/miniapp/manager.rs', patterns: [ { regex: /\bbuild_runtime_state\b/, @@ -852,7 +887,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/restrictions.rs', + path: 'src/crates/facade/core/src/agentic/tools/restrictions.rs', patterns: [ { regex: /\bpub enum ToolPathOperation\b/, @@ -875,7 +910,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/workspace_paths.rs', + path: 'src/crates/facade/core/src/agentic/tools/workspace_paths.rs', patterns: [ { regex: /\bpub const BITFUN_RUNTIME_URI_PREFIX\b/, @@ -900,7 +935,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/registry.rs', + path: 'src/crates/facade/core/src/agentic/tools/registry.rs', patterns: [ { regex: /\bstruct DynamicToolMetadata\b/, @@ -920,7 +955,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/file_read_state_runtime.rs', + path: 'src/crates/facade/core/src/agentic/tools/file_read_state_runtime.rs', patterns: [ { regex: /\bnormalize_string\b/, @@ -930,7 +965,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/tool_result_storage.rs', + path: 'src/crates/facade/core/src/agentic/tools/tool_result_storage.rs', patterns: [ { regex: /\bfn\s+generate_preview\b/, @@ -955,7 +990,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/server/process.rs', + path: 'src/crates/facade/core/src/service/mcp/server/process.rs', patterns: [ { regex: /\bpub enum MCPServerType\b/, @@ -992,7 +1027,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/server/manager/mod.rs', + path: 'src/crates/facade/core/src/service/mcp/server/manager/mod.rs', patterns: [ { regex: /\benum ListChangedKind\b/, @@ -1009,7 +1044,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/server/manager/reconnect.rs', + path: 'src/crates/facade/core/src/service/mcp/server/manager/reconnect.rs', patterns: [ { regex: /\bfn compute_backoff_delay\b/, @@ -1018,7 +1053,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/server/manager/interaction.rs', + path: 'src/crates/facade/core/src/service/mcp/server/manager/interaction.rs', patterns: [ { regex: /\bfn detect_list_changed_kind\b/, @@ -1027,7 +1062,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/adapter/tool.rs', + path: 'src/crates/facade/core/src/service/mcp/adapter/tool.rs', patterns: [ { regex: /\bfn behavior_hints\b/, @@ -1048,7 +1083,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/adapter/context.rs', + path: 'src/crates/facade/core/src/service/mcp/adapter/context.rs', patterns: [ { regex: /\bpub struct ContextEnhancerConfig\b/, @@ -1065,7 +1100,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/function_agents/git-func-agent/commit_generator.rs', + path: 'src/crates/facade/core/src/function_agents/git-func-agent/commit_generator.rs', patterns: [ { regex: /\bGitService::get_status\b/, @@ -1085,7 +1120,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs', + path: 'src/crates/facade/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs', patterns: [ { regex: /\bAIWorkStateService::new_with_agent_config\b/, @@ -1100,7 +1135,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/server/config.rs', + path: 'src/crates/facade/core/src/service/mcp/server/config.rs', patterns: [ { regex: /\bpub enum MCPServerTransport\b/, @@ -1133,7 +1168,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/config/cursor_format.rs', + path: 'src/crates/facade/core/src/service/mcp/config/cursor_format.rs', patterns: [ { regex: /\bfn parse_source\b/, @@ -1150,7 +1185,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/config/json_config.rs', + path: 'src/crates/facade/core/src/service/mcp/config/json_config.rs', patterns: [ { regex: /\bfn normalize_source\b/, @@ -1171,7 +1206,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/config/service.rs', + path: 'src/crates/facade/core/src/service/mcp/config/service.rs', patterns: [ { regex: /\bconst AUTHORIZATION_KEYS\b/, @@ -1196,7 +1231,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/auth.rs', + path: 'src/crates/facade/core/src/service/mcp/auth.rs', patterns: [ { regex: /\bstruct VaultFile\b/, @@ -1225,7 +1260,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/protocol/transport_remote.rs', + path: 'src/crates/facade/core/src/service/mcp/protocol/transport_remote.rs', patterns: [ { regex: /\bfn normalize_authorization_value\b/, @@ -1286,7 +1321,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/mcp/protocol/jsonrpc.rs', + path: 'src/crates/facade/core/src/service/mcp/protocol/jsonrpc.rs', patterns: [ { regex: /\bfn serialize_params\b/, @@ -1327,7 +1362,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/remote_ssh/workspace_state.rs', + path: 'src/crates/facade/core/src/service/remote_ssh/workspace_state.rs', patterns: [ { regex: /\bpub const LOCAL_WORKSPACE_SSH_HOST\b/, @@ -1400,7 +1435,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/remote_connect/remote_server.rs', + path: 'src/crates/facade/core/src/service/remote_connect/remote_server.rs', patterns: [ { regex: /\bpub\(crate\) struct CoreRemoteDialogRuntimeHost\b/, @@ -1708,7 +1743,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/remote_connect/bot/mod.rs', + path: 'src/crates/facade/core/src/service/remote_connect/bot/mod.rs', patterns: [ { regex: /\bfn strip_workspace_path_prefix\b/, @@ -1729,7 +1764,7 @@ export const forbiddenContentRules = [ ], }, { - path: 'src/crates/core/src/service/announcement/state_store.rs', + path: 'src/crates/facade/core/src/service/announcement/state_store.rs', patterns: [ { regex: /\btokio::fs\b/, @@ -1749,7 +1784,7 @@ export const forbiddenContentRules = [ export const forbiddenContentUnderRules = [ { - path: 'src/crates/core/src', + path: 'src/crates/facade/core/src', reason: 'core must use runtime-ports as the owner path for portable subagent contracts', patterns: [ @@ -1762,13 +1797,13 @@ export const forbiddenContentUnderRules = [ ], }, { - path: 'src/crates/product-domains/src', + path: 'src/crates/product/product-domains/src', reason: 'product-domains must not own IO/process/Git/AI/platform runtime behavior without an approved port/provider migration', patterns: [ { regex: /\bCommand::new\(/, - allowPaths: ['src/crates/product-domains/src/miniapp/runtime.rs'], + allowPaths: ['src/crates/product/product-domains/src/miniapp/runtime.rs'], message: 'product-domains must not spawn processes outside the reviewed MiniApp runtime detector owner', }, @@ -1825,7 +1860,7 @@ export const forbiddenContentUnderRules = [ ], }, { - path: 'src/crates/agent-tools/src', + path: 'src/crates/execution/agent-tools/src', reason: 'agent-tools may own pure tool manifest contracts, but not product manifest runtime or GetToolSpec execution without an approved provider migration', patterns: [ @@ -1848,7 +1883,7 @@ export const forbiddenContentUnderRules = [ ], }, { - path: 'src/crates/tool-packs/src', + path: 'src/crates/execution/tool-packs/src', reason: 'tool-packs may own provider group plans, but not product tool manifest/exposure or GetToolSpec runtime', patterns: [ @@ -1875,7 +1910,7 @@ export const forbiddenContentUnderRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/implementations', + path: 'src/crates/facade/core/src/agentic/tools/implementations', reason: 'GetToolSpec concrete adapter belongs in the product tool runtime owner, not the generic concrete-tool implementations module', patterns: [ @@ -1886,7 +1921,7 @@ export const forbiddenContentUnderRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/pipeline', + path: 'src/crates/facade/core/src/agentic/tools/pipeline', reason: 'core pipeline must delegate deterministic tool execution admission policy to bitfun-agent-tools', patterns: [ diff --git a/scripts/core-boundaries/rules/source/required-rules.mjs b/scripts/core-boundaries/rules/source/required-rules.mjs index 4c9cabe95..9a43a7821 100644 --- a/scripts/core-boundaries/rules/source/required-rules.mjs +++ b/scripts/core-boundaries/rules/source/required-rules.mjs @@ -2,7 +2,7 @@ export const requiredContentRules = [ { - path: 'src/crates/runtime-services/src/lib.rs', + path: 'src/crates/execution/runtime-services/src/lib.rs', reason: 'runtime-services must own typed runtime service assembly and capability validation contracts', patterns: [ @@ -37,7 +37,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/runtime-services/tests/runtime_services_contracts.rs', + path: 'src/crates/execution/runtime-services/tests/runtime_services_contracts.rs', reason: 'runtime-services must keep behavior-equivalence contracts for required services, optional capabilities, registry assembly, and remote port exposure', patterns: [ @@ -71,7 +71,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/prompt.rs', + path: 'src/crates/execution/agent-runtime/src/prompt.rs', reason: 'agent-runtime must own prompt-loop facts that do not require concrete workspace or product IO', patterns: [ @@ -94,7 +94,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/prompt_cache.rs', + path: 'src/crates/execution/agent-runtime/src/prompt_cache.rs', reason: 'agent-runtime must own prompt-cache policy, identities, DTOs, scope keys, and in-memory runtime store', patterns: [ @@ -121,7 +121,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/prompt_cache_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/prompt_cache_contracts.rs', reason: 'agent-runtime prompt-cache owner must keep behavior-equivalence contracts for cache identity, expiry, invalidation, and scope-key shape', patterns: [ @@ -140,7 +140,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/harness/src/lib.rs', + path: 'src/crates/execution/harness/src/lib.rs', reason: 'harness must own provider-neutral harness descriptors and descriptor registry wiring without concrete execution', patterns: [ @@ -159,7 +159,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-capabilities/src/lib.rs', + path: 'src/crates/product/product-capabilities/src/lib.rs', reason: 'product-capabilities must select harness descriptors from the harness owner instead of owning descriptor construction', patterns: [ @@ -178,7 +178,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/agents.rs', + path: 'src/crates/execution/agent-runtime/src/agents.rs', reason: 'agent-runtime must own shared mode config profile facts that are runtime-visible and product-neutral', patterns: [ @@ -249,7 +249,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/agent_registry_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/agent_registry_contracts.rs', reason: 'agent-runtime agent registry owner must keep behavior-equivalence contracts for visibility, availability, shared mode config, and source ordering', patterns: [ @@ -285,7 +285,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/custom_subagent.rs', + path: 'src/crates/execution/agent-runtime/src/custom_subagent.rs', reason: 'agent-runtime must own custom subagent portable schema defaults, discovery, and markdown front-matter IO', patterns: [ @@ -352,7 +352,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/custom_subagent_discovery_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/custom_subagent_discovery_contracts.rs', reason: 'agent-runtime custom subagent discovery owner must keep behavior-equivalence contracts for directory priority, deduplication, and load errors', patterns: [ @@ -369,7 +369,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/custom_subagent_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/custom_subagent_contracts.rs', reason: 'agent-runtime custom subagent owner must keep behavior-equivalence contracts for defaults and front-matter serialization decisions', patterns: [ @@ -404,7 +404,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/post_call_hooks.rs', + path: 'src/crates/execution/agent-runtime/src/post_call_hooks.rs', reason: 'agent-runtime must own portable post-call hook routing decisions while concrete hook execution stays in the owning runtime', patterns: [ @@ -427,7 +427,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/post_call_hook_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/post_call_hook_contracts.rs', reason: 'agent-runtime post-call hook owner must keep behavior-equivalence contracts for successful tool-call hook routing', patterns: [ @@ -438,7 +438,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/post_call_hook_execution_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/post_call_hook_execution_contracts.rs', reason: 'agent-runtime post-call hook owner must keep concrete-executor routing behavior-equivalence contracts', patterns: [ @@ -449,7 +449,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/tool_confirmation.rs', + path: 'src/crates/execution/agent-runtime/src/tool_confirmation.rs', reason: 'agent-runtime must own portable tool confirmation planning and failure mapping while core keeps UI/channel side effects', patterns: [ @@ -480,7 +480,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/tool_confirmation_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/tool_confirmation_contracts.rs', reason: 'agent-runtime tool confirmation owner must keep behavior-equivalence contracts for legacy permission planning and failures', patterns: [ @@ -499,7 +499,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/scheduler.rs', + path: 'src/crates/execution/agent-runtime/src/scheduler.rs', reason: 'agent-runtime scheduler owner must keep portable queue, background delivery, steering, reply, and round injection decisions outside concrete core session IO', patterns: [ @@ -598,7 +598,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/scheduler_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/scheduler_contracts.rs', reason: 'agent-runtime scheduler owner must keep behavior-equivalence contracts for background delivery, queueing, reply suppression, steering, round interruption, and turn outcomes', patterns: [ @@ -698,7 +698,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/thread_goal.rs', + path: 'src/crates/execution/agent-runtime/src/thread_goal.rs', reason: 'agent-runtime must own persisted thread-goal runtime decisions, set/update planning, continuation decisions, and tool response shaping', patterns: [ @@ -733,7 +733,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/thread_goal_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/thread_goal_contracts.rs', reason: 'agent-runtime thread-goal owner must keep behavior-equivalence contracts for goal creation, continuation limits, budget reporting, and wire response shape', patterns: [ @@ -761,7 +761,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/prompt_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/prompt_contracts.rs', reason: 'agent-runtime prompt owner must keep behavior-equivalence contracts for user context and reminder ordering', patterns: [ @@ -780,7 +780,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/events.rs', + path: 'src/crates/execution/agent-runtime/src/events.rs', reason: 'agent-runtime must own runtime event facts that do not require concrete scheduler or session IO', patterns: [ @@ -799,7 +799,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/events_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/events_contracts.rs', reason: 'agent-runtime event owner must keep behavior-equivalence contracts for event wire labels', patterns: [ @@ -818,7 +818,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/scheduled_job.rs', + path: 'src/crates/execution/agent-runtime/src/scheduled_job.rs', reason: 'agent-runtime must own scheduled-job portable lifecycle state and transition decisions without concrete cron storage, schedule parsing, or session dispatch', patterns: [ @@ -869,7 +869,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/tests/scheduled_job_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/scheduled_job_contracts.rs', reason: 'agent-runtime scheduled-job owner must keep behavior-equivalence contracts for wire shape, retry, coalescing, one-shot, missing-session, and restart recovery semantics', patterns: [ @@ -908,7 +908,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/cron/types.rs', + path: 'src/crates/facade/core/src/service/cron/types.rs', reason: 'core cron types must preserve old import and wire paths while bitfun-agent-runtime owns scheduled-job runtime state', patterns: [ @@ -927,7 +927,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/cron/service.rs', + path: 'src/crates/facade/core/src/service/cron/service.rs', reason: 'core cron service may own concrete storage, schedule parsing, and scheduler dispatch, but scheduled-job lifecycle state transitions must delegate to agent-runtime', patterns: [ @@ -970,7 +970,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/definitions/custom/subagent.rs', + path: 'src/crates/facade/core/src/agentic/agents/definitions/custom/subagent.rs', reason: 'core custom subagent path must stay a compatibility facade over agent-runtime schema/default and markdown IO decisions', patterns: [ @@ -993,7 +993,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/registry/custom.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/custom.rs', reason: 'core custom subagent registry must delegate portable discovery/loading to agent-runtime while retaining validation and registry writes', patterns: [ @@ -1012,7 +1012,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/post_call_hooks.rs', + path: 'src/crates/facade/core/src/agentic/tools/post_call_hooks.rs', reason: 'core post-call hooks must delegate portable hook routing to agent-runtime while retaining concrete hook execution', patterns: [ @@ -1027,7 +1027,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/pipeline/tool_pipeline.rs', + path: 'src/crates/facade/core/src/agentic/tools/pipeline/tool_pipeline.rs', reason: 'core tool pipeline must delegate portable confirmation planning and failure mapping to agent-runtime while retaining UI/channel side effects', patterns: [ @@ -1046,7 +1046,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/execution/types.rs', + path: 'src/crates/facade/core/src/agentic/execution/types.rs', reason: 'core execution types must preserve legacy import path while agent-runtime owns finish-reason event facts', patterns: [ @@ -1057,7 +1057,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/events/types.rs', + path: 'src/crates/facade/core/src/agentic/events/types.rs', reason: 'core event types must preserve legacy import path while agent-runtime owns session-state labels', patterns: [ @@ -1068,7 +1068,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/prompt_builder/user_context.rs', + path: 'src/crates/facade/core/src/agentic/agents/prompt_builder/user_context.rs', reason: 'core prompt_builder user_context path must stay a compatibility facade over agent-runtime', patterns: [ @@ -1079,7 +1079,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/session/prompt_cache.rs', + path: 'src/crates/facade/core/src/agentic/session/prompt_cache.rs', reason: 'core prompt_cache path must stay a compatibility facade over agent-runtime', patterns: [ @@ -1090,7 +1090,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/mod.rs', + path: 'src/crates/facade/core/src/agentic/agents/mod.rs', reason: 'core agent mode module must keep old import paths while agent-runtime owns shared mode profile facts', patterns: [ @@ -1101,7 +1101,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/services-core/src/filesystem/mod.rs', + path: 'src/crates/services/services-core/src/filesystem/mod.rs', reason: 'services-core filesystem owner must expose local filesystem primitives behind a single module boundary', patterns: [ @@ -1128,7 +1128,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/filesystem/service.rs', + path: 'src/crates/facade/core/src/service/filesystem/service.rs', reason: 'core filesystem service may keep remote-workspace overlay and BitFunError compatibility, but local filesystem owner must remain services-core', patterns: [ @@ -1147,7 +1147,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/session/session_manager.rs', + path: 'src/crates/facade/core/src/agentic/session/session_manager.rs', reason: 'core session manager must keep forked Task prompt-cache and existing-context turn baselines until session branch ownership migrates', patterns: [ @@ -1170,7 +1170,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/pipeline/tool_pipeline.rs', + path: 'src/crates/facade/core/src/agentic/tools/pipeline/tool_pipeline.rs', reason: 'core tool pipeline must keep latest-main truncation and per-tool denial behavior until tool runtime ownership migrates', patterns: [ @@ -1193,7 +1193,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/restrictions.rs', + path: 'src/crates/facade/core/src/agentic/tools/restrictions.rs', reason: 'core tool restrictions facade must preserve per-tool denial messages while runtime restrictions live in agent-tools', patterns: [ @@ -1208,7 +1208,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/tool_result_storage.rs', + path: 'src/crates/facade/core/src/agentic/tools/tool_result_storage.rs', reason: 'core tool-result storage must keep explicit file flush until runtime artifact ownership migrates', patterns: [ @@ -1223,7 +1223,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/services-integrations/src/mcp/server/connection.rs', + path: 'src/crates/services/services-integrations/src/mcp/server/connection.rs', reason: 'services-integrations MCP connection must keep initialize-scoped timeout and channel-close cleanup until MCP owner migration is reviewed', patterns: [ @@ -1254,7 +1254,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/services-integrations/src/mcp/protocol/transport.rs', + path: 'src/crates/services/services-integrations/src/mcp/protocol/transport.rs', reason: 'services-integrations MCP local transport must keep explicit request ids and stdin flush semantics', patterns: [ @@ -1269,30 +1269,30 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/Cargo.toml', + path: 'src/crates/facade/core/Cargo.toml', reason: 'bitfun-core product-full must explicitly aggregate owner crate feature groups instead of forcing them through dependency declarations', patterns: [ { regex: - /bitfun-tool-packs = \{ path = "\.\.\/tool-packs", default-features = false, optional = true \}/, + /bitfun-tool-packs = \{ path = "\.\.\/\.\.\/execution\/tool-packs", default-features = false, optional = true \}/, message: 'bitfun-tool-packs dependency must stay optional and not force product-full outside the core feature graph', }, { regex: - /bitfun-services-integrations = \{ path = "\.\.\/services-integrations", default-features = false, features = \["remote-ssh"\] \}/, + /bitfun-services-integrations = \{ path = "\.\.\/\.\.\/services\/services-integrations", default-features = false, features = \["remote-ssh"\] \}/, message: 'bitfun-services-integrations dependency may keep remote workspace identity helpers but must not force product-full outside the core feature graph', }, { regex: - /bitfun-product-domains = \{ path = "\.\.\/product-domains", default-features = false, optional = true \}/, + /bitfun-product-domains = \{ path = "\.\.\/\.\.\/product\/product-domains", default-features = false, optional = true \}/, message: 'bitfun-product-domains dependency must stay optional and not force product-full outside the core feature graph', }, { regex: - /bitfun-product-capabilities = \{ path = "\.\.\/product-capabilities", default-features = false, optional = true \}/, + /bitfun-product-capabilities = \{ path = "\.\.\/\.\.\/product\/product-capabilities", default-features = false, optional = true \}/, message: 'bitfun-product-capabilities dependency must stay optional and not force product-full outside the core feature graph', }, @@ -1324,7 +1324,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/lib.rs', + path: 'src/crates/facade/core/src/lib.rs', reason: 'no-default bitfun-core must keep product runtime surfaces behind explicit features', patterns: [ @@ -1347,7 +1347,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/mod.rs', + path: 'src/crates/facade/core/src/service/mod.rs', reason: 'service integration and agent-runtime surfaces must not compile in no-default core builds', patterns: [ @@ -1374,7 +1374,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/config/mod.rs', + path: 'src/crates/facade/core/src/service/config/mod.rs', reason: 'mode config canonicalization depends on product agent/tool registries and must stay out of no-default builds', patterns: [ @@ -1385,7 +1385,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/workspace/manager.rs', + path: 'src/crates/facade/core/src/service/workspace/manager.rs', reason: 'workspace metadata may omit git worktree enrichment when service integrations are disabled', patterns: [ @@ -1400,7 +1400,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/workspace_runtime/service.rs', + path: 'src/crates/facade/core/src/service/workspace_runtime/service.rs', reason: 'workspace runtime binding helpers may depend on agentic runtime only in full product builds', patterns: [ @@ -1415,7 +1415,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/remote_ssh/mod.rs', + path: 'src/crates/facade/core/src/service/remote_ssh/mod.rs', reason: 'core remote SSH runtime must keep concrete SSH dependencies behind the ssh-remote feature while preserving lightweight workspace identity helpers', patterns: [ @@ -1442,7 +1442,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/remote_ssh/disabled.rs', + path: 'src/crates/facade/core/src/service/remote_ssh/disabled.rs', reason: 'no-default core builds must expose explicit unsupported remote SSH stubs instead of compiling russh-backed runtime code', patterns: [ @@ -1465,7 +1465,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/runtime-ports/src/lib.rs', + path: 'src/crates/contracts/runtime-ports/src/lib.rs', reason: 'runtime-ports must keep remote and subagent runtime boundary contracts DTO/trait-only', patterns: [ @@ -1724,7 +1724,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/subagent_runtime/mod.rs', + path: 'src/crates/facade/core/src/agentic/subagent_runtime/mod.rs', reason: 'core subagent runtime must preserve legacy import path while runtime-ports owns portable subagent contracts', patterns: [ @@ -1739,7 +1739,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-tools/src/framework.rs', + path: 'src/crates/execution/agent-tools/src/framework.rs', reason: 'agent-tools may own pure and generic prompt-visible tool contracts and provider-neutral execution gate policy without owning product registry or concrete execution', patterns: [ @@ -2026,7 +2026,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-tools/src/file_guidance.rs', + path: 'src/crates/execution/agent-tools/src/file_guidance.rs', reason: 'agent-tools owns provider-neutral file tool guidance marker contracts', patterns: [ { @@ -2044,7 +2044,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-tools/src/file_read_freshness.rs', + path: 'src/crates/execution/agent-tools/src/file_read_freshness.rs', reason: 'agent-tools owns pure file-read freshness policy for Read/Edit/Write guardrails', patterns: [ { @@ -2066,7 +2066,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-tools/src/tool_result_storage.rs', + path: 'src/crates/execution/agent-tools/src/tool_result_storage.rs', reason: 'agent-tools owns pure oversized tool-result storage policy and rendering without session IO', patterns: [ @@ -2109,7 +2109,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-tools/src/tool_execution_presentation.rs', + path: 'src/crates/execution/agent-tools/src/tool_execution_presentation.rs', reason: 'agent-tools owns provider-neutral tool execution result and error presentation helpers', patterns: [ @@ -2152,7 +2152,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/coordination/coordinator.rs', + path: 'src/crates/facade/core/src/agentic/coordination/coordinator.rs', reason: 'core must keep current coordinator port adapters and attachment guard until remote runtime migration is reviewed', patterns: [ @@ -2183,7 +2183,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/coordination/scheduler.rs', + path: 'src/crates/facade/core/src/agentic/coordination/scheduler.rs', reason: 'core scheduler must preserve legacy submission policy import path while runtime-ports owns portable dialog policy contracts', patterns: [ @@ -2213,7 +2213,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/round_preempt.rs', + path: 'src/crates/facade/core/src/agentic/round_preempt.rs', reason: 'core round preempt runtime must preserve legacy import paths while runtime-ports owns portable contracts and agent-runtime owns round-boundary state', patterns: [ @@ -2230,7 +2230,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/goal_mode/mod.rs', + path: 'src/crates/facade/core/src/agentic/goal_mode/mod.rs', reason: 'core goal mode must preserve legacy import paths while runtime-ports owns portable contracts and agent-runtime owns runtime decisions', patterns: [ @@ -2247,7 +2247,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/core/message.rs', + path: 'src/crates/facade/core/src/agentic/core/message.rs', reason: 'core message model must preserve legacy compression contract import path while runtime-ports owns portable compaction facts', patterns: [ @@ -2258,7 +2258,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/workspace/manager.rs', + path: 'src/crates/facade/core/src/service/workspace/manager.rs', reason: 'core workspace manager must preserve legacy related-path import path while runtime-ports owns portable request-context facts', patterns: [ @@ -2269,7 +2269,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service_agent_runtime.rs', + path: 'src/crates/facade/core/src/service_agent_runtime.rs', reason: 'core service/agent runtime owner must centralize concrete remote-connect and agent runtime port bindings without moving runtime behavior', patterns: [ @@ -2472,7 +2472,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/services-integrations/src/remote_connect.rs', + path: 'src/crates/services/services-integrations/src/remote_connect.rs', reason: 'services-integrations must own remote-connect wire/response assembly and preserve remote owner compatibility re-exports', patterns: [ @@ -2823,7 +2823,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/services-integrations/tests/remote_connect_contracts.rs', + path: 'src/crates/services/services-integrations/tests/remote_connect_contracts.rs', reason: 'remote-connect owner crate must keep focused behavior contracts', patterns: [ { @@ -2961,7 +2961,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/remote_connect/remote_server.rs', + path: 'src/crates/facade/core/src/service/remote_connect/remote_server.rs', reason: 'core remote-connect server must remain a product runtime adapter around integrations-owned contracts', patterns: [ @@ -3048,7 +3048,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/remote_connect/bot/command_router.rs', + path: 'src/crates/facade/core/src/service/remote_connect/bot/command_router.rs', reason: 'remote-connect bot must route concrete agent runtime port bindings through the core service/agent runtime owner', patterns: [ @@ -3067,7 +3067,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/coordination/scheduler.rs', + path: 'src/crates/facade/core/src/agentic/coordination/scheduler.rs', reason: 'core scheduler keeps remote queue policy semantics until agent-runtime migration is reviewed', patterns: [ @@ -3078,7 +3078,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/registry.rs', + path: 'src/crates/facade/core/src/agentic/tools/registry.rs', reason: 'core registry must stay a compatibility container that delegates product tool runtime assembly through the core owner module', patterns: [ @@ -3113,7 +3113,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime.rs', reason: 'core product tool runtime owner delegates generic registry assembly and only wires product plan, decorator, and compatibility facade', patterns: [ @@ -3144,7 +3144,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/materialization.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/materialization.rs', reason: 'product runtime materialization must keep only concrete tool construction and product plan adapter while delegating generic registry assembly to agent-tools', patterns: [ @@ -3183,7 +3183,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/snapshot.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/snapshot.rs', reason: 'product runtime snapshot wrapper must stay isolated from registry and catalog ownership', patterns: [ @@ -3202,7 +3202,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/catalog.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/catalog.rs', reason: 'product runtime catalog owner keeps manifest, snapshot, readonly, and GetToolSpec product facades explicit', patterns: [ @@ -3281,7 +3281,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/tool_adapter.rs', + path: 'src/crates/facade/core/src/agentic/tools/tool_adapter.rs', reason: 'core must keep the product Tool-to-agent-tools adapters explicit until ToolUseContext and concrete tools migrate', patterns: [ @@ -3316,7 +3316,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-tools/src/framework.rs', + path: 'src/crates/execution/agent-tools/src/framework.rs', reason: 'agent-tools owns portable tool facts plus generic registry and provider contracts', patterns: [ { @@ -3386,7 +3386,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/tool-packs/src/lib.rs', + path: 'src/crates/execution/tool-packs/src/lib.rs', reason: 'tool-packs must keep its feature-group scaffold explicit without owning concrete tools yet', patterns: [ @@ -3425,7 +3425,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/manifest_resolver.rs', + path: 'src/crates/facade/core/src/agentic/tools/manifest_resolver.rs', reason: 'core must continue owning manifest resolver wrappers while delegating product catalog access and generic manifest assembly', patterns: [ @@ -3456,7 +3456,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs', reason: 'product runtime must own the GetToolSpec Tool adapter while delegating generic runtime surface to agent-tools', patterns: [ @@ -3487,7 +3487,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/framework.rs', + path: 'src/crates/facade/core/src/agentic/tools/framework.rs', reason: 'core tool framework must keep compatibility re-exports while ToolUseContext is owned by tool_context_runtime', patterns: [ @@ -3502,7 +3502,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/tool_context_runtime.rs', + path: 'src/crates/facade/core/src/agentic/tools/tool_context_runtime.rs', reason: 'core must keep ToolUseContext runtime/service bindings centralized while ToolUseContext and concrete tools remain core-owned', patterns: [ @@ -3625,7 +3625,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/pipeline/tool_pipeline.rs', + path: 'src/crates/facade/core/src/agentic/tools/pipeline/tool_pipeline.rs', reason: 'core must continue carrying collapsed-tool unlock state while delegating provider-neutral execution gate policy to agent-tools', patterns: [ @@ -3664,7 +3664,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/execution/execution_engine.rs', + path: 'src/crates/facade/core/src/agentic/execution/execution_engine.rs', reason: 'core execution must pass collapsed-tool unlock state through product runtime owner and keep DeepResearch post-turn hooks', patterns: [ @@ -3691,7 +3691,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/unlock_state.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/unlock_state.rs', reason: 'product runtime owns collapsed-tool unlock observation adaptation while preserving generic agent-tools policy', patterns: [ @@ -3714,7 +3714,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/registry/availability.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/availability.rs', reason: 'core agent registry must adapt config and AgentEntry facts while bitfun-agent-runtime owns mode-scoped subagent availability decisions', patterns: [ @@ -3741,7 +3741,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/registry/types.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/types.rs', reason: 'core agent registry must preserve legacy DTO fields while bitfun-agent-runtime owns query scope and availability reason contracts', patterns: [ @@ -3764,7 +3764,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/definitions/modes/mod.rs', + path: 'src/crates/facade/core/src/agentic/agents/definitions/modes/mod.rs', reason: 'core agent mode definitions must continue exposing Multitask mode until an approved agent-runtime migration preserves mode registration semantics', patterns: [ @@ -3779,7 +3779,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/definitions/subagents/mod.rs', + path: 'src/crates/facade/core/src/agentic/agents/definitions/subagents/mod.rs', reason: 'core subagent definitions must continue exposing the built-in GeneralPurpose subagent until registry ownership migration has equivalence coverage', patterns: [ @@ -3794,7 +3794,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/registry/builtin.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/builtin.rs', reason: 'core builtin registry must delegate builtin default model facts to agent-runtime while preserving latest-main compatibility', patterns: [ @@ -3809,7 +3809,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/agent-runtime/src/agents.rs', + path: 'src/crates/execution/agent-runtime/src/agents.rs', reason: 'agent-runtime builtin agent catalog must own latest-main mode/subagent categories, visibility, and default model facts', patterns: [ @@ -3832,7 +3832,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/tools/implementations/task_tool.rs', + path: 'src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs', reason: 'core Task tool must continue owning fork-aware background subagent launch semantics until a reviewed agent-runtime port preserves delivery behavior', patterns: [ @@ -3875,7 +3875,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/coordination/scheduler.rs', + path: 'src/crates/facade/core/src/agentic/coordination/scheduler.rs', reason: 'core scheduler keeps concrete background delivery entry points while bitfun-agent-runtime owns running-turn injection construction', patterns: [ @@ -3948,7 +3948,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/agentic/agents/citation_renumber.rs', + path: 'src/crates/facade/core/src/agentic/agents/citation_renumber.rs', reason: 'core DeepResearch runtime must continue owning citation renumber post-processing until agent-runtime migration is reviewed', patterns: [ @@ -3971,7 +3971,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/workspace/service.rs', + path: 'src/crates/facade/core/src/service/workspace/service.rs', reason: 'core workspace runtime must continue owning startup remote-workspace guards until workspace service migration is reviewed', patterns: [ @@ -3994,7 +3994,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/search/service.rs', + path: 'src/crates/facade/core/src/service/search/service.rs', reason: 'core search runtime must continue owning local flashgrep fallback and preview mapping until search migration is reviewed', patterns: [ @@ -4017,7 +4017,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/search/remote.rs', + path: 'src/crates/facade/core/src/service/search/remote.rs', reason: 'core remote search runtime must continue owning remote flashgrep fallback/session behavior until search migration is reviewed', patterns: [ @@ -4040,7 +4040,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/search/mod.rs', + path: 'src/crates/facade/core/src/service/search/mod.rs', reason: 'remote workspace search must route to the real implementation only when ssh-remote is enabled', patterns: [ @@ -4059,7 +4059,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/service/search/remote_disabled.rs', + path: 'src/crates/facade/core/src/service/search/remote_disabled.rs', reason: 'no-default core builds must keep remote search unavailable with an explicit diagnostic', patterns: [ @@ -4078,7 +4078,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/acp/src/client/manager.rs', + path: 'src/crates/surfaces/acp/src/client/manager.rs', reason: 'ACP surface runtime must continue owning startup timeout diagnostics until ACP migration is reviewed', patterns: [ @@ -4258,7 +4258,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/miniapp/storage.rs', + path: 'src/crates/facade/core/src/miniapp/storage.rs', reason: 'core must continue owning MiniApp storage runtime adapter until storage IO migration is reviewed', patterns: [ @@ -4269,7 +4269,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/miniapp/builtin/mod.rs', + path: 'src/crates/facade/core/src/miniapp/builtin/mod.rs', reason: 'core must continue owning built-in MiniApp seeding IO, marker writes, and recompilation while product-domains owns bundle assets', patterns: [ @@ -4340,7 +4340,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/miniapp/host_dispatch.rs', + path: 'src/crates/facade/core/src/miniapp/host_dispatch.rs', reason: 'core must continue owning MiniApp host-dispatch execution until host/runtime migration is reviewed', patterns: [ @@ -4395,7 +4395,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/services-integrations/src/remote_ssh/paths.rs', + path: 'src/crates/services/services-integrations/src/remote_ssh/paths.rs', reason: 'services-integrations remote-ssh owns workspace path/session identity helpers that do not require concrete SSH runtime handles', patterns: [ @@ -4426,7 +4426,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/storage.rs', + path: 'src/crates/product/product-domains/src/miniapp/storage.rs', reason: 'product-domains owns MiniApp storage shape contracts while core/adapters keep filesystem IO', patterns: [ @@ -4477,7 +4477,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/lifecycle.rs', + path: 'src/crates/product/product-domains/src/miniapp/lifecycle.rs', reason: 'product-domains owns pure MiniApp lifecycle state transitions while core keeps compile, storage IO, and runtime execution', patterns: [ @@ -4544,7 +4544,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/draft.rs', + path: 'src/crates/product/product-domains/src/miniapp/draft.rs', reason: 'product-domains owns MiniApp draft DTO and response shape while core keeps draft filesystem IO', patterns: [ @@ -4567,7 +4567,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/runtime.rs', + path: 'src/crates/product/product-domains/src/miniapp/runtime.rs', reason: 'product-domains owns MiniApp runtime detection, including the reviewed concrete PATH/fs/version probe', patterns: [ @@ -4614,7 +4614,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/worker.rs', + path: 'src/crates/product/product-domains/src/miniapp/worker.rs', reason: 'product-domains owns MiniApp worker pool policy and install-deps planning while core keeps worker process execution', patterns: [ @@ -4653,7 +4653,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/host_routing.rs', + path: 'src/crates/product/product-domains/src/miniapp/host_routing.rs', reason: 'product-domains owns MiniApp host-routing and allowlist decision policy while core keeps host execution', patterns: [ @@ -4756,7 +4756,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/exporter.rs', + path: 'src/crates/product/product-domains/src/miniapp/exporter.rs', reason: 'product-domains owns MiniApp export check result policy while core keeps runtime detection', patterns: [ @@ -4775,7 +4775,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/miniapp/exporter.rs', + path: 'src/crates/facade/core/src/miniapp/exporter.rs', reason: 'core MiniApp exporter must delegate export check result policy while retaining runtime detection and export skeleton', patterns: [ @@ -4794,7 +4794,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/customization.rs', + path: 'src/crates/product/product-domains/src/miniapp/customization.rs', reason: 'product-domains owns MiniApp customization metadata, built-in update policy, and permission-diff contracts while core keeps draft storage/runtime', patterns: [ @@ -4833,7 +4833,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/miniapp/manager.rs', + path: 'src/crates/facade/core/src/miniapp/manager.rs', reason: 'core MiniApp manager must use product-domain policy/facade helpers while retaining compile, storage IO, and built-in source-hash lookup', patterns: [ @@ -4916,7 +4916,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/ports.rs', + path: 'src/crates/product/product-domains/src/miniapp/ports.rs', reason: 'product-domains owns MiniApp runtime-state port facade while core keeps concrete storage IO, compile, worker, and host execution', patterns: [ @@ -4939,7 +4939,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/function_agents/runtime_services.rs', + path: 'src/crates/facade/core/src/function_agents/runtime_services.rs', reason: 'core function-agent runtime services must continue owning AI concrete calls while product-domains owns prompt, parser, and facade policy', patterns: [ @@ -4986,7 +4986,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/services-integrations/src/function_agents.rs', + path: 'src/crates/services/services-integrations/src/function_agents.rs', reason: 'services-integrations must own function-agent concrete Git snapshots without depending on bitfun-core', patterns: [ @@ -5037,7 +5037,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/services-integrations/tests/function_agent_contracts.rs', + path: 'src/crates/services/services-integrations/tests/function_agent_contracts.rs', reason: 'services-integrations function-agent Git service must preserve legacy Git snapshot behavior', patterns: [ @@ -5056,7 +5056,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/function_agents/git-func-agent/ai_service.rs', + path: 'src/crates/facade/core/src/function_agents/git-func-agent/ai_service.rs', reason: 'legacy Git function-agent AI service path must remain a compatibility re-export only', patterns: [ @@ -5067,7 +5067,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/function_agents/startchat-func-agent/ai_service.rs', + path: 'src/crates/facade/core/src/function_agents/startchat-func-agent/ai_service.rs', reason: 'legacy Startchat AI service path must remain a compatibility re-export only', patterns: [ @@ -5078,7 +5078,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/function_agents/git-func-agent/commit_generator.rs', + path: 'src/crates/facade/core/src/function_agents/git-func-agent/commit_generator.rs', reason: 'legacy Git commit generator must delegate to the core product-domain runtime owner', patterns: [ @@ -5093,7 +5093,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/miniapp/builtin.rs', + path: 'src/crates/product/product-domains/src/miniapp/builtin.rs', reason: 'product-domains owns built-in MiniApp bundle assets, marker, hash, and seed-decision contracts while core keeps asset seeding IO and recompilation', patterns: [ @@ -5176,7 +5176,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs', + path: 'src/crates/facade/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs', reason: 'legacy Startchat work-state analyzer must delegate to the core product-domain runtime owner', patterns: [ @@ -5191,7 +5191,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/function_agents/ports.rs', + path: 'src/crates/product/product-domains/src/function_agents/ports.rs', reason: 'product-domains owns port-backed function-agent facade orchestration while integrations/core keep concrete Git/AI runtime calls', patterns: [ @@ -5222,7 +5222,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/function_agents/common.rs', + path: 'src/crates/product/product-domains/src/function_agents/common.rs', reason: 'product-domains owns function-agent AI response JSON extraction while core keeps concrete AI clients', patterns: [ @@ -5237,7 +5237,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/function_agents/startchat_func_agent/utils.rs', + path: 'src/crates/product/product-domains/src/function_agents/startchat_func_agent/utils.rs', reason: 'product-domains owns Startchat function-agent prompt and response policy while core keeps AI calls', patterns: [ @@ -5272,7 +5272,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/product-domains/src/function_agents/git_func_agent/utils.rs', + path: 'src/crates/product/product-domains/src/function_agents/git_func_agent/utils.rs', reason: 'product-domains owns Git function-agent prompt and response policy while core keeps AI calls', patterns: [ @@ -5311,7 +5311,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/miniapp/runtime_detect.rs', + path: 'src/crates/facade/core/src/miniapp/runtime_detect.rs', reason: 'core MiniApp runtime detection must be a compatibility facade over product-domain runtime detection', patterns: [ @@ -5326,7 +5326,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/miniapp/js_worker_pool.rs', + path: 'src/crates/facade/core/src/miniapp/js_worker_pool.rs', reason: 'core must continue owning MiniApp worker runtime adapter until process/runtime migration is reviewed', patterns: [ @@ -5353,7 +5353,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/function_agents/port_adapters.rs', + path: 'src/crates/facade/core/src/function_agents/port_adapters.rs', reason: 'core function-agent port adapters must stay thin adapters over integration Git services and core AI services', patterns: [ @@ -5396,7 +5396,7 @@ export const requiredContentRules = [ ], }, { - path: 'src/crates/core/src/product_domain_runtime.rs', + path: 'src/crates/facade/core/src/product_domain_runtime.rs', reason: 'core product-domain runtime owner must centralize concrete MiniApp and function-agent runtime port bindings without moving runtime behavior', patterns: [ diff --git a/scripts/core-boundaries/self-test.mjs b/scripts/core-boundaries/self-test.mjs index 1e4ee6a25..433702be0 100644 --- a/scripts/core-boundaries/self-test.mjs +++ b/scripts/core-boundaries/self-test.mjs @@ -113,7 +113,7 @@ export function runManifestParserSelfTest({ for (const manifestPath of [ 'src/apps/desktop/Cargo.toml', 'src/apps/cli/Cargo.toml', - 'src/crates/acp/Cargo.toml', + 'src/crates/surfaces/acp/Cargo.toml', ]) { if (!productCoreRulePaths.has(manifestPath)) { throw new Error(`product core feature assembly rule must cover ${manifestPath}`); @@ -139,27 +139,27 @@ export function runManifestParserSelfTest({ { manifestPath: 'src/apps/desktop/Cargo.toml', text: - '[dependencies]\nbitfun-core = { path = "../../crates/core", default-features = false, features = ["product-full"] }', + '[dependencies]\nbitfun-core = { path = "../../crates/facade/core", default-features = false, features = ["product-full"] }', }, { manifestPath: 'src/apps/server/Cargo.toml', text: '[dependencies]\naxum = { workspace = true }', }, { - manifestPath: 'src/crates/acp/Cargo.toml', - text: '[dependencies."bitfun-core"]\npath = "../core"\ndefault-features = false\nfeatures = ["product-full"]', + manifestPath: 'src/crates/surfaces/acp/Cargo.toml', + text: '[dependencies."bitfun-core"]\npath = "../../facade/core"\ndefault-features = false\nfeatures = ["product-full"]', }, ]); - if (discoveredProductCoreManifests.join(',') !== 'src/apps/desktop/Cargo.toml,src/crates/acp/Cargo.toml') { + if (discoveredProductCoreManifests.join(',') !== 'src/apps/desktop/Cargo.toml,src/crates/surfaces/acp/Cargo.toml') { throw new Error('product core dependency scanner must discover only manifests that depend on bitfun-core'); } const ownerFeatureRulePaths = new Set( ownerCrateFeatureAssemblyRules.map((rule) => rule.manifestPath), ); for (const manifestPath of [ - 'src/crates/tool-packs/Cargo.toml', - 'src/crates/services-integrations/Cargo.toml', - 'src/crates/product-domains/Cargo.toml', + 'src/crates/execution/tool-packs/Cargo.toml', + 'src/crates/services/services-integrations/Cargo.toml', + 'src/crates/product/product-domains/Cargo.toml', ]) { if (!ownerFeatureRulePaths.has(manifestPath)) { throw new Error(`owner crate feature assembly rule must cover ${manifestPath}`); @@ -250,7 +250,7 @@ export function runManifestParserSelfTest({ throw new Error('agent-tools lightweight boundary must forbid bitfun-ai-adapters'); } const coreToolFrameworkRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/tools/framework.rs', + 'src/crates/facade/core/src/agentic/tools/framework.rs', ); if (!coreToolFrameworkRuleText) { throw new Error('missing core tool framework boundary rule'); @@ -274,7 +274,7 @@ export function runManifestParserSelfTest({ } } const coreToolRestrictionRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/tools/restrictions.rs', + 'src/crates/facade/core/src/agentic/tools/restrictions.rs', ); if (!coreToolRestrictionRuleText) { throw new Error('missing core tool restrictions boundary rule'); @@ -291,7 +291,7 @@ export function runManifestParserSelfTest({ } } const agentToolsFrameworkRule = requiredContentRules.find( - (rule) => rule.path === 'src/crates/agent-tools/src/framework.rs', + (rule) => rule.path === 'src/crates/execution/agent-tools/src/framework.rs', ); if (!agentToolsFrameworkRule) { throw new Error('missing agent-tools framework boundary rule'); @@ -313,7 +313,7 @@ export function runManifestParserSelfTest({ } } const coreWorkspacePathRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/tools/workspace_paths.rs', + 'src/crates/facade/core/src/agentic/tools/workspace_paths.rs', ); if (!coreWorkspacePathRuleText) { throw new Error('missing core workspace path boundary rule'); @@ -330,7 +330,7 @@ export function runManifestParserSelfTest({ } } const coreToolRegistryRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/tools/registry.rs', + 'src/crates/facade/core/src/agentic/tools/registry.rs', ); if (!coreToolRegistryRuleText) { throw new Error('missing core tool registry boundary rule'); @@ -346,7 +346,7 @@ export function runManifestParserSelfTest({ } } const coreSubagentRuntimeRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/subagent_runtime/mod.rs', + 'src/crates/facade/core/src/agentic/subagent_runtime/mod.rs', ); if (!coreSubagentRuntimeRuleText) { throw new Error('missing core subagent runtime boundary rule'); @@ -357,7 +357,7 @@ export function runManifestParserSelfTest({ } } const coreCoordinatorRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/coordination/coordinator.rs', + 'src/crates/facade/core/src/agentic/coordination/coordinator.rs', ); if (!coreCoordinatorRuleText) { throw new Error('missing core coordinator boundary rule'); @@ -366,7 +366,7 @@ export function runManifestParserSelfTest({ throw new Error('core coordinator boundary rule must forbid DialogTriggerSource redefinition'); } const coreSchedulerRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/coordination/scheduler.rs', + 'src/crates/facade/core/src/agentic/coordination/scheduler.rs', ); if (!coreSchedulerRuleText) { throw new Error('missing core scheduler boundary rule'); @@ -383,7 +383,7 @@ export function runManifestParserSelfTest({ } } const coreRoundPreemptRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/round_preempt.rs', + 'src/crates/facade/core/src/agentic/round_preempt.rs', ); if (!coreRoundPreemptRuleText) { throw new Error('missing core round preempt boundary rule'); @@ -400,7 +400,7 @@ export function runManifestParserSelfTest({ } } const coreGoalModeTypesRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/goal_mode/mod.rs', + 'src/crates/facade/core/src/agentic/goal_mode/mod.rs', ); if (!coreGoalModeTypesRuleText) { throw new Error('missing core goal mode types boundary rule'); @@ -420,7 +420,7 @@ export function runManifestParserSelfTest({ } } const coreMessageRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/agentic/core/message.rs', + 'src/crates/facade/core/src/agentic/core/message.rs', ); if (!coreMessageRuleText) { throw new Error('missing core message boundary rule'); @@ -431,7 +431,7 @@ export function runManifestParserSelfTest({ } } const coreWorkspaceRuleText = forbiddenRuleTextForPath( - 'src/crates/core/src/service/workspace/manager.rs', + 'src/crates/facade/core/src/service/workspace/manager.rs', ); if (!coreWorkspaceRuleText) { throw new Error('missing core workspace manager boundary rule'); @@ -440,7 +440,7 @@ export function runManifestParserSelfTest({ throw new Error('core workspace manager boundary rule must forbid contract: RelatedPath'); } const coreSubagentRuntimeOwnerPathRule = forbiddenContentUnderRules.find( - (rule) => rule.path === 'src/crates/core/src', + (rule) => rule.path === 'src/crates/facade/core/src', ); if (!coreSubagentRuntimeOwnerPathRule) { throw new Error('missing core subagent runtime owner-path boundary rule'); @@ -515,7 +515,7 @@ export function runManifestParserSelfTest({ } } const productDomainRuntimeRule = forbiddenContentUnderRules.find( - (rule) => rule.path === 'src/crates/product-domains/src', + (rule) => rule.path === 'src/crates/product/product-domains/src', ); if (!productDomainRuntimeRule) { throw new Error('missing product-domains runtime-owner boundary rule'); @@ -540,7 +540,7 @@ export function runManifestParserSelfTest({ ); if ( !productDomainCommandRule?.allowPaths?.includes( - 'src/crates/product-domains/src/miniapp/runtime.rs', + 'src/crates/product/product-domains/src/miniapp/runtime.rs', ) ) { throw new Error('product-domains Command::new exception must stay scoped to MiniApp runtime detection'); @@ -606,7 +606,7 @@ export function runManifestParserSelfTest({ throw new Error('product-capabilities dependency profile must forbid bitfun-core'); } const agentToolsManifestRule = forbiddenContentUnderRules.find( - (rule) => rule.path === 'src/crates/agent-tools/src', + (rule) => rule.path === 'src/crates/execution/agent-tools/src', ); if (!agentToolsManifestRule) { throw new Error('missing agent-tools manifest-owner boundary rule'); @@ -626,7 +626,7 @@ export function runManifestParserSelfTest({ } } const toolPacksManifestRule = forbiddenContentUnderRules.find( - (rule) => rule.path === 'src/crates/tool-packs/src', + (rule) => rule.path === 'src/crates/execution/tool-packs/src', ); if (!toolPacksManifestRule) { throw new Error('missing tool-packs manifest-owner boundary rule'); @@ -649,7 +649,7 @@ export function runManifestParserSelfTest({ const requiredContentContracts = [ { - path: 'src/crates/runtime-ports/src/lib.rs', + path: 'src/crates/contracts/runtime-ports/src/lib.rs', contracts: [ 'AgentTurnCancellationPort', 'RemoteControlStatePort', @@ -717,7 +717,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/runtime-services/src/lib.rs', + path: 'src/crates/execution/runtime-services/src/lib.rs', contracts: [ 'RuntimeServices', 'RuntimeServicesBuilder', @@ -729,7 +729,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/runtime-services/tests/runtime_services_contracts.rs', + path: 'src/crates/execution/runtime-services/tests/runtime_services_contracts.rs', contracts: [ 'builder_requires_mandatory_runtime_services', 'fake_provider_registers_required_and_remote_services_through_registry', @@ -740,7 +740,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/src/agents.rs', + path: 'src/crates/execution/agent-runtime/src/agents.rs', contracts: [ 'SubagentQueryContext', 'SubagentListScope', @@ -760,7 +760,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/tests/agent_registry_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/agent_registry_contracts.rs', contracts: [ 'visibility_policy_supports_public_restricted_hidden_and_denied_parents', 'availability_preserves_builtin_project_and_user_override_layering', @@ -771,7 +771,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/src/custom_subagent.rs', + path: 'src/crates/execution/agent-runtime/src/custom_subagent.rs', contracts: [ 'CustomSubagentKind', 'CustomSubagentDiscoveryRoots', @@ -791,14 +791,14 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/tests/custom_subagent_discovery_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/custom_subagent_discovery_contracts.rs', contracts: [ 'custom_subagent_discovery_preserves_directory_priority_and_deduplication', 'custom_subagent_discovery_reports_parse_errors_without_dropping_valid_files', ], }, { - path: 'src/crates/agent-runtime/tests/custom_subagent_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/custom_subagent_contracts.rs', contracts: [ 'custom_subagent_defaults_match_existing_front_matter_contract', 'custom_subagent_tool_front_matter_keeps_existing_comma_format', @@ -810,7 +810,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/src/post_call_hooks.rs', + path: 'src/crates/execution/agent-runtime/src/post_call_hooks.rs', contracts: [ 'PostCallHookKind', 'successful_tool_post_call_hooks', @@ -819,15 +819,15 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/tests/post_call_hook_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/post_call_hook_contracts.rs', contracts: ['successful_tool_call_routes_to_shared_context_measurement_hook'], }, { - path: 'src/crates/agent-runtime/tests/post_call_hook_execution_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/post_call_hook_execution_contracts.rs', contracts: ['successful_tool_post_call_executor_runs_deep_review_measurement_route'], }, { - path: 'src/crates/agent-runtime/src/tool_confirmation.rs', + path: 'src/crates/execution/agent-runtime/src/tool_confirmation.rs', contracts: [ 'ToolConfirmationRequestFacts', 'ToolConfirmationPlan', @@ -838,7 +838,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/tests/tool_confirmation_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/tool_confirmation_contracts.rs', contracts: [ 'confirmation_plan_requires_permission_only_when_both_flags_are_true', 'confirmation_plan_preserves_legacy_no_timeout_one_year_deadline', @@ -846,7 +846,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/src/scheduler.rs', + path: 'src/crates/execution/agent-runtime/src/scheduler.rs', contracts: [ 'DEFAULT_MAX_DIALOG_QUEUE_DEPTH', 'ActiveDialogTurn', @@ -874,7 +874,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/tests/scheduler_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/scheduler_contracts.rs', contracts: [ 'background_delivery_injects_when_session_is_processing', 'background_delivery_starts_agent_session_follow_up_when_session_is_not_processing', @@ -900,7 +900,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/src/thread_goal.rs', + path: 'src/crates/execution/agent-runtime/src/thread_goal.rs', contracts: [ 'ThreadGoalRuntime', 'SetThreadGoalRequest', @@ -912,7 +912,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/tests/thread_goal_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/thread_goal_contracts.rs', contracts: [ 'set_thread_goal_creates_new_active_goal_with_trimmed_objective', 'continuation_outcome_increments_active_goal_and_builds_plan', @@ -922,7 +922,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/src/prompt.rs', + path: 'src/crates/execution/agent-runtime/src/prompt.rs', contracts: [ 'UserContextSection', 'UserContextPolicy', @@ -931,7 +931,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/src/prompt_cache.rs', + path: 'src/crates/execution/agent-runtime/src/prompt_cache.rs', contracts: [ 'PROMPT_CACHE_SCHEMA_VERSION', 'PromptCachePolicy', @@ -941,7 +941,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/tests/prompt_cache_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/prompt_cache_contracts.rs', contracts: [ 'prompt_cache_policy_keeps_existing_default_persistence_ttl', 'prompt_cache_lookup_preserves_identity_and_expiry_semantics', @@ -949,7 +949,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/tests/prompt_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/prompt_contracts.rs', contracts: [ 'user_context_policy_preserves_order_and_deduplicates_sections', 'tool_listing_sections_render_only_present_sections', @@ -957,11 +957,11 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/src/events.rs', + path: 'src/crates/execution/agent-runtime/src/events.rs', contracts: ['FinishReason', 'session_state_label', 'turn_outcome_kind'], }, { - path: 'src/crates/agent-runtime/tests/events_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/events_contracts.rs', contracts: [ 'finish_reason_display_preserves_wire_labels', 'session_state_labels_match_existing_event_wire_values', @@ -969,7 +969,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/src/scheduled_job.rs', + path: 'src/crates/execution/agent-runtime/src/scheduled_job.rs', contracts: [ 'ScheduledJobRuntimeState', 'ScheduledJobRunStatus', @@ -985,7 +985,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-runtime/tests/scheduled_job_contracts.rs', + path: 'src/crates/execution/agent-runtime/tests/scheduled_job_contracts.rs', contracts: [ 'manual_trigger_coalesces_existing_pending_run', 'due_scheduled_trigger_coalesces_when_active_or_pending', @@ -998,7 +998,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/service/cron/types.rs', + path: 'src/crates/facade/core/src/service/cron/types.rs', contracts: [ 'ScheduledJobRuntimeState as CronJobState', 'ScheduledJobRunStatus as CronJobRunStatus', @@ -1006,7 +1006,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/service/cron/service.rs', + path: 'src/crates/facade/core/src/service/cron/service.rs', contracts: [ 'mark_manual_trigger', 'apply_due_scheduled_trigger', @@ -1020,19 +1020,19 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/execution/types.rs', + path: 'src/crates/facade/core/src/agentic/execution/types.rs', contracts: ['bitfun_agent_runtime::events::FinishReason'], }, { - path: 'src/crates/core/src/agentic/events/types.rs', + path: 'src/crates/facade/core/src/agentic/events/types.rs', contracts: ['bitfun_agent_runtime::events::session_state_label'], }, { - path: 'src/crates/core/src/agentic/agents/prompt_builder/user_context.rs', + path: 'src/crates/facade/core/src/agentic/agents/prompt_builder/user_context.rs', contracts: ['bitfun_agent_runtime::prompt'], }, { - path: 'src/crates/core/src/agentic/subagent_runtime/mod.rs', + path: 'src/crates/facade/core/src/agentic/subagent_runtime/mod.rs', contracts: [ 'bitfun_runtime_ports', 'DelegationPolicy', @@ -1041,7 +1041,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/session/session_manager.rs', + path: 'src/crates/facade/core/src/agentic/session/session_manager.rs', contracts: [ 'clone_prompt_cache', 'start_dialog_turn_with_existing_context', @@ -1050,7 +1050,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/pipeline/tool_pipeline.rs', + path: 'src/crates/facade/core/src/agentic/tools/pipeline/tool_pipeline.rs', contracts: [ 'build_truncation_recovery_notice', 'truncation_notice_for_interactive_tools_does_not_claim_file_write', @@ -1059,15 +1059,15 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/restrictions.rs', + path: 'src/crates/facade/core/src/agentic/tools/restrictions.rs', contracts: ['denied_tool_messages', 'custom_deny_message_overrides_generic_runtime_error'], }, { - path: 'src/crates/core/src/agentic/tools/tool_result_storage.rs', + path: 'src/crates/facade/core/src/agentic/tools/tool_result_storage.rs', contracts: ['write_once', 'file\\.flush\\(\\)\\.await'], }, { - path: 'src/crates/services-integrations/src/mcp/server/connection.rs', + path: 'src/crates/services/services-integrations/src/mcp/server/connection.rs', contracts: [ 'send_request_with_id', 'initialize_timeout', @@ -1078,11 +1078,11 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/services-integrations/src/mcp/protocol/transport.rs', + path: 'src/crates/services/services-integrations/src/mcp/protocol/transport.rs', contracts: ['send_request_with_id', '\\.flush\\(\\)\\s*\\.await'], }, { - path: 'src/crates/agent-tools/src/framework.rs', + path: 'src/crates/execution/agent-tools/src/framework.rs', contracts: [ 'GET_TOOL_SPEC_TOOL_NAME', 'ToolExposure', @@ -1138,7 +1138,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-tools/src/file_guidance.rs', + path: 'src/crates/execution/agent-tools/src/file_guidance.rs', contracts: [ 'FILE_TOOL_GUIDANCE_PREFIX', 'file_tool_guidance_message', @@ -1146,7 +1146,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-tools/src/file_read_freshness.rs', + path: 'src/crates/execution/agent-tools/src/file_read_freshness.rs', contracts: [ 'FileReadFreshnessFacts', 'normalize_tool_file_content', @@ -1155,7 +1155,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-tools/src/tool_result_storage.rs', + path: 'src/crates/execution/agent-tools/src/tool_result_storage.rs', contracts: [ 'ToolResultStoragePolicy', 'PersistedToolOutput', @@ -1169,7 +1169,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-tools/src/tool_execution_presentation.rs', + path: 'src/crates/execution/agent-tools/src/tool_execution_presentation.rs', contracts: [ 'TOOL_ERROR_ARGUMENTS_PREVIEW_BYTES', 'USER_STEERING_INTERRUPTED_MESSAGE', @@ -1183,7 +1183,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/coordination/coordinator.rs', + path: 'src/crates/facade/core/src/agentic/coordination/coordinator.rs', contracts: [ 'AgentSubmissionPort', 'SessionTranscriptReader', @@ -1194,7 +1194,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/coordination/scheduler.rs', + path: 'src/crates/facade/core/src/agentic/coordination/scheduler.rs', contracts: [ 'AgentSessionReplyRoute', 'DialogQueuePriority', @@ -1220,7 +1220,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/round_preempt.rs', + path: 'src/crates/facade/core/src/agentic/round_preempt.rs', contracts: [ 'bitfun_agent_runtime', 'bitfun_runtime_ports', @@ -1234,7 +1234,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/goal_mode/mod.rs', + path: 'src/crates/facade/core/src/agentic/goal_mode/mod.rs', contracts: [ 'bitfun_runtime_ports', 'SetThreadGoalResult', @@ -1246,15 +1246,15 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/core/message.rs', + path: 'src/crates/facade/core/src/agentic/core/message.rs', contracts: ['bitfun_runtime_ports', 'CompressionContract', 'CompressionContractItem'], }, { - path: 'src/crates/core/src/service/workspace/manager.rs', + path: 'src/crates/facade/core/src/service/workspace/manager.rs', contracts: ['bitfun_runtime_ports', 'RelatedPath'], }, { - path: 'src/crates/core/src/service_agent_runtime.rs', + path: 'src/crates/facade/core/src/service_agent_runtime.rs', contracts: [ 'CoreServiceAgentRuntime', 'remote_dialog_host', @@ -1304,7 +1304,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/services-integrations/src/remote_connect.rs', + path: 'src/crates/services/services-integrations/src/remote_connect.rs', contracts: [ 'RemoteSessionStateTracker', 'TrackerEvent', @@ -1378,7 +1378,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/services-integrations/tests/remote_connect_contracts.rs', + path: 'src/crates/services/services-integrations/tests/remote_connect_contracts.rs', contracts: [ 'remote_connect_command_wire_shape_lives_in_owner_contract', 'remote_connect_response_wire_shape_lives_in_owner_contract', @@ -1403,7 +1403,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/service/remote_connect/remote_server.rs', + path: 'src/crates/facade/core/src/service/remote_connect/remote_server.rs', contracts: [ 'CoreServiceAgentRuntime', 'remote_image_context', @@ -1421,11 +1421,11 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/coordination/scheduler.rs', + path: 'src/crates/facade/core/src/agentic/coordination/scheduler.rs', contracts: ['remote_queue_policy_preserves_interactive_preempt_and_confirmation_boundary'], }, { - path: 'src/crates/core/src/agentic/tools/registry.rs', + path: 'src/crates/facade/core/src/agentic/tools/registry.rs', contracts: [ 'from_inner', 'ProductToolDecoratorRef', @@ -1435,7 +1435,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime.rs', contracts: [ 'ProductToolRuntime', 'SnapshotToolDecorator', @@ -1446,7 +1446,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/snapshot.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/snapshot.rs', contracts: [ 'ProductSnapshotToolWrapper', 'SnapshotToolWrapper', @@ -1454,7 +1454,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/catalog.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/catalog.rs', contracts: [ 'ProductToolCatalogProvider', 'ToolCatalogSnapshotProvider', @@ -1475,7 +1475,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/materialization.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/materialization.rs', contracts: [ 'ProductConcreteToolFactory', 'StaticToolProviderFactory', @@ -1488,7 +1488,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/agent-tools/src/framework.rs', + path: 'src/crates/execution/agent-tools/src/framework.rs', contracts: [ 'ToolContextFacts', 'PortableToolContextProvider', @@ -1517,7 +1517,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/tool-packs/src/lib.rs', + path: 'src/crates/execution/tool-packs/src/lib.rs', contracts: [ 'ToolPackFeatureGroup', 'ToolProviderGroupPlan', @@ -1530,7 +1530,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/tool_adapter.rs', + path: 'src/crates/facade/core/src/agentic/tools/tool_adapter.rs', contracts: [ 'ToolRegistryItem', 'ContextualToolManifestItem', @@ -1542,7 +1542,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/manifest_resolver.rs', + path: 'src/crates/facade/core/src/agentic/tools/manifest_resolver.rs', contracts: [ 'resolve_tool_manifest', 'GET_TOOL_SPEC_TOOL_NAME', @@ -1552,7 +1552,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs', contracts: [ 'GetToolSpecTool', 'build_collapsed_tools_context_section', @@ -1563,7 +1563,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/framework.rs', + path: 'src/crates/facade/core/src/agentic/tools/framework.rs', contracts: [ 'ToolExposure', 'ToolUseContext', @@ -1571,7 +1571,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/tool_context_runtime.rs', + path: 'src/crates/facade/core/src/agentic/tools/tool_context_runtime.rs', contracts: [ 'pub struct ToolUseContext', 'to_tool_context_facts', @@ -1599,7 +1599,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/pipeline/tool_pipeline.rs', + path: 'src/crates/facade/core/src/agentic/tools/pipeline/tool_pipeline.rs', contracts: [ 'validate_tool_execution_admission', 'unlocked_collapsed_tools', @@ -1611,7 +1611,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/execution/execution_engine.rs', + path: 'src/crates/facade/core/src/agentic/execution/execution_engine.rs', contracts: [ 'collect_product_unlocked_collapsed_tools', 'unlocked_collapsed_tools', @@ -1621,7 +1621,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/tools/product_runtime/unlock_state.rs', + path: 'src/crates/facade/core/src/agentic/tools/product_runtime/unlock_state.rs', contracts: [ 'collect_product_unlocked_collapsed_tools', 'GetToolSpecLoadObservation', @@ -1630,7 +1630,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/agents/registry/availability.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/availability.rs', contracts: [ 'resolve_availability', 'resolve_override_layers', @@ -1639,23 +1639,23 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/agents/registry/types.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/types.rs', contracts: ['SubagentQueryContext', 'SubagentListScope', 'default_enabled', 'effective_enabled', 'SubagentStateReason'], }, { - path: 'src/crates/core/src/agentic/agents/definitions/modes/mod.rs', + path: 'src/crates/facade/core/src/agentic/agents/definitions/modes/mod.rs', contracts: ['mod multitask', 'MultitaskMode'], }, { - path: 'src/crates/core/src/agentic/agents/definitions/subagents/mod.rs', + path: 'src/crates/facade/core/src/agentic/agents/definitions/subagents/mod.rs', contracts: ['mod general_purpose', 'GeneralPurposeAgent'], }, { - path: 'src/crates/core/src/agentic/agents/registry/builtin.rs', + path: 'src/crates/facade/core/src/agentic/agents/registry/builtin.rs', contracts: ['builtin_agent_specs', 'runtime_agents::default_model_id_for_builtin_agent'], }, { - path: 'src/crates/core/src/agentic/tools/implementations/task_tool.rs', + path: 'src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs', contracts: [ 'fork_context', 'SubagentContextMode::Fork', @@ -1669,7 +1669,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/coordination/scheduler.rs', + path: 'src/crates/facade/core/src/agentic/coordination/scheduler.rs', contracts: [ 'deliver_background_result', 'BackgroundResult', @@ -1697,36 +1697,36 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/agentic/agents/citation_renumber.rs', + path: 'src/crates/facade/core/src/agentic/agents/citation_renumber.rs', contracts: ['run_for_session_workspace', 'try_renumber_research_report', 'display_map', 'REJECTED'], }, { - path: 'src/crates/core/src/service/workspace/service.rs', + path: 'src/crates/facade/core/src/service/workspace/service.rs', contracts: ['prepare_startup_restored_workspaces', 'WorkspaceKind::Remote', 'ensure_remote_workspace_runtime', 'sshHost'], }, { - path: 'src/crates/core/src/service/search/service.rs', + path: 'src/crates/facade/core/src/service/search/service.rs', contracts: ['with_scan_fallback', 'convert_hits_to_file_search_results', 'split_preview', 'preview_inside'], }, { - path: 'src/crates/core/src/service/search/remote.rs', + path: 'src/crates/facade/core/src/service/search/remote.rs', contracts: ['remote_workspace_search_service_for_path', 'lookup_remote_connection_with_hint', 'allow_scan_fallback', 'fallback_query'], }, { - path: 'src/crates/core/src/service/search/mod.rs', + path: 'src/crates/facade/core/src/service/search/mod.rs', contracts: ['mod remote_disabled', 'feature = "ssh-remote"', 'pub use remote_disabled'], }, { - path: 'src/crates/core/src/service/search/remote_disabled.rs', + path: 'src/crates/facade/core/src/service/search/remote_disabled.rs', contracts: ['Remote SSH search is disabled', 'RemoteWorkspaceSearchService', 'remote_workspace_search_service_for_path'], }, { - path: 'src/crates/core/Cargo.toml', + path: 'src/crates/facade/core/Cargo.toml', contracts: [ - 'bitfun-product-capabilities = \\{ path = "\\.\\.\\/product-capabilities", default-features = false, optional = true \\}', - 'bitfun-tool-packs = \\{ path = "\\.\\.\\/tool-packs", default-features = false, optional = true \\}', - 'bitfun-services-integrations = \\{ path = "\\.\\.\\/services-integrations", default-features = false, features = \\["remote-ssh"\\] \\}', - 'bitfun-product-domains = \\{ path = "\\.\\.\\/product-domains", default-features = false, optional = true \\}', + 'bitfun-product-capabilities = \\{ path = "\\.\\.\\/\\.\\.\\/product\\/product-capabilities", default-features = false, optional = true \\}', + 'bitfun-tool-packs = \\{ path = "\\.\\.\\/\\.\\.\\/execution\\/tool-packs", default-features = false, optional = true \\}', + 'bitfun-services-integrations = \\{ path = "\\.\\.\\/\\.\\.\\/services\\/services-integrations", default-features = false, features = \\["remote-ssh"\\] \\}', + 'bitfun-product-domains = \\{ path = "\\.\\.\\/\\.\\.\\/product\\/product-domains", default-features = false, optional = true \\}', 'dep:bitfun-product-capabilities', 'dep:bitfun-tool-packs', 'bitfun-tool-packs\\/product-full', @@ -1736,7 +1736,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/lib.rs', + path: 'src/crates/facade/core/src/lib.rs', contracts: [ 'feature = "product-full"', 'pub mod agentic', @@ -1748,7 +1748,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/service/mod.rs', + path: 'src/crates/facade/core/src/service/mod.rs', contracts: [ 'feature = "service-integrations"', 'pub mod git', @@ -1760,19 +1760,19 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/service/config/mod.rs', + path: 'src/crates/facade/core/src/service/config/mod.rs', contracts: ['feature = "product-full"', 'mode_config_canonicalizer'], }, { - path: 'src/crates/core/src/service/workspace/manager.rs', + path: 'src/crates/facade/core/src/service/workspace/manager.rs', contracts: ['feature = "service-integrations"', 'GitService', 'return None'], }, { - path: 'src/crates/core/src/service/workspace_runtime/service.rs', + path: 'src/crates/facade/core/src/service/workspace_runtime/service.rs', contracts: ['feature = "product-full"', 'WorkspaceBinding', 'ensure_runtime_for_workspace_binding'], }, { - path: 'src/crates/acp/src/client/manager.rs', + path: 'src/crates/surfaces/acp/src/client/manager.rs', contracts: ['CLIENT_STARTUP_TIMEOUT_SECS', 'startup_timeout_error_message', 'formats_startup_timeout_error_message'], }, { @@ -1816,11 +1816,11 @@ export function runManifestParserSelfTest({ contracts: ['historical_session_hydrate_request', 'Load history in the background', "historyState: 'ready'"], }, { - path: 'src/crates/core/src/miniapp/storage.rs', + path: 'src/crates/facade/core/src/miniapp/storage.rs', contracts: ['MiniAppStoragePort'], }, { - path: 'src/crates/core/src/miniapp/builtin/mod.rs', + path: 'src/crates/facade/core/src/miniapp/builtin/mod.rs', contracts: [ 'BUILTIN_APPS', 'builtin_content_hash', @@ -1841,7 +1841,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/miniapp/builtin.rs', + path: 'src/crates/product/product-domains/src/miniapp/builtin.rs', contracts: [ 'builtin-pr-review', 'BUILTIN_APPS', @@ -1865,7 +1865,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/miniapp/host_dispatch.rs', + path: 'src/crates/facade/core/src/miniapp/host_dispatch.rs', contracts: [ 'dispatch_host', 'split_host_method', @@ -1882,7 +1882,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/miniapp/js_worker_pool.rs', + path: 'src/crates/facade/core/src/miniapp/js_worker_pool.rs', contracts: [ 'MiniAppRuntimePort', 'plan_install_deps', @@ -1892,7 +1892,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/function_agents/port_adapters.rs', + path: 'src/crates/facade/core/src/function_agents/port_adapters.rs', contracts: [ 'CoreFunctionAgentGitAdapter', 'FunctionAgentGitPort', @@ -1903,7 +1903,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/service/remote_connect/bot/command_router.rs', + path: 'src/crates/facade/core/src/service/remote_connect/bot/command_router.rs', contracts: [ 'CoreServiceAgentRuntime', 'agent_submission_port', @@ -1911,7 +1911,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/product_domain_runtime.rs', + path: 'src/crates/facade/core/src/product_domain_runtime.rs', contracts: [ 'CoreProductDomainRuntime', 'miniapp_runtime_facade', @@ -1928,15 +1928,15 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/service/remote_ssh/mod.rs', + path: 'src/crates/facade/core/src/service/remote_ssh/mod.rs', contracts: ['mod disabled', 'pub mod manager', 'pub mod remote_fs', 'pub mod remote_terminal', 'pub mod workspace_state'], }, { - path: 'src/crates/core/src/service/remote_ssh/disabled.rs', + path: 'src/crates/facade/core/src/service/remote_ssh/disabled.rs', contracts: ['Remote SSH support is disabled', 'SSHConnectionManager', 'RemoteFileService', 'RemoteTerminalManager'], }, { - path: 'src/crates/services-integrations/src/remote_ssh/paths.rs', + path: 'src/crates/services/services-integrations/src/remote_ssh/paths.rs', contracts: [ 'remote_workspace_runtime_root', 'remote_workspace_session_mirror_dir', @@ -1947,7 +1947,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/miniapp/ports.rs', + path: 'src/crates/product/product-domains/src/miniapp/ports.rs', contracts: [ 'MiniAppRuntimeFacade', 'mark_deps_installed_state', @@ -1956,7 +1956,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/miniapp/storage.rs', + path: 'src/crates/product/product-domains/src/miniapp/storage.rs', contracts: [ 'MiniAppStorageLayout', 'META_JSON', @@ -1972,7 +1972,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/miniapp/lifecycle.rs', + path: 'src/crates/product/product-domains/src/miniapp/lifecycle.rs', contracts: [ 'MiniAppCreateInput', 'MiniAppUpdatePatch', @@ -1992,11 +1992,11 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/miniapp/draft.rs', + path: 'src/crates/product/product-domains/src/miniapp/draft.rs', contracts: ['MiniAppDraftManifest', 'MiniAppDraft', 'build_draft_manifest', 'build_draft_response'], }, { - path: 'src/crates/product-domains/src/miniapp/runtime.rs', + path: 'src/crates/product/product-domains/src/miniapp/runtime.rs', contracts: [ 'runtime_lookup_order', 'detect_runtime', @@ -2011,7 +2011,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/miniapp/worker.rs', + path: 'src/crates/product/product-domains/src/miniapp/worker.rs', contracts: [ 'InstallDepsPlan', 'plan_install_deps', @@ -2022,7 +2022,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/miniapp/host_routing.rs', + path: 'src/crates/product/product-domains/src/miniapp/host_routing.rs', contracts: [ 'split_host_method', 'FsAccessMode', @@ -2045,15 +2045,15 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/miniapp/exporter.rs', + path: 'src/crates/product/product-domains/src/miniapp/exporter.rs', contracts: ['MISSING_JS_RUNTIME_MESSAGE', 'export_runtime_label', 'build_export_check_result'], }, { - path: 'src/crates/core/src/miniapp/exporter.rs', + path: 'src/crates/facade/core/src/miniapp/exporter.rs', contracts: ['detect_runtime', 'build_export_check_result', 'Export not yet implemented'], }, { - path: 'src/crates/product-domains/src/miniapp/customization.rs', + path: 'src/crates/product/product-domains/src/miniapp/customization.rs', contracts: [ 'MiniAppCustomizationMetadata', 'MiniAppDeclinedBuiltinUpdate', @@ -2066,7 +2066,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/miniapp/manager.rs', + path: 'src/crates/facade/core/src/miniapp/manager.rs', contracts: [ 'apply_draft_customization_metadata', 'mark_builtin_update_available_metadata', @@ -2090,7 +2090,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/function_agents/runtime_services.rs', + path: 'src/crates/facade/core/src/function_agents/runtime_services.rs', contracts: [ 'prepare_commit_ai_prompt', 'parse_commit_ai_response', @@ -2105,7 +2105,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/services-integrations/src/function_agents.rs', + path: 'src/crates/services/services-integrations/src/function_agents.rs', contracts: [ 'FunctionAgentGitService', 'git_commit_snapshot', @@ -2118,7 +2118,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/services-integrations/tests/function_agent_contracts.rs', + path: 'src/crates/services/services-integrations/tests/function_agent_contracts.rs', contracts: [ 'git_service_builds_commit_snapshot_from_staged_diff_without_unstaged_content', 'git_service_startchat_snapshot_preserves_no_head_and_non_git_fallback', @@ -2126,23 +2126,23 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/function_agents/git-func-agent/ai_service.rs', + path: 'src/crates/facade/core/src/function_agents/git-func-agent/ai_service.rs', contracts: ['CoreCommitAiAnalysisService as AIAnalysisService'], }, { - path: 'src/crates/core/src/function_agents/startchat-func-agent/ai_service.rs', + path: 'src/crates/facade/core/src/function_agents/startchat-func-agent/ai_service.rs', contracts: ['CoreWorkStateAiAnalysisService as AIWorkStateService'], }, { - path: 'src/crates/core/src/function_agents/git-func-agent/commit_generator.rs', + path: 'src/crates/facade/core/src/function_agents/git-func-agent/commit_generator.rs', contracts: ['CoreProductDomainRuntime', 'generate_function_agent_commit_message'], }, { - path: 'src/crates/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs', + path: 'src/crates/facade/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs', contracts: ['CoreProductDomainRuntime', 'analyze_function_agent_work_state'], }, { - path: 'src/crates/product-domains/src/function_agents/ports.rs', + path: 'src/crates/product/product-domains/src/function_agents/ports.rs', contracts: [ 'FunctionAgentRuntimeFacade', 'generate_commit_message', @@ -2153,11 +2153,11 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/function_agents/common.rs', + path: 'src/crates/product/product-domains/src/function_agents/common.rs', contracts: ['extract_json_from_ai_response', 'try_repair_json'], }, { - path: 'src/crates/product-domains/src/function_agents/startchat_func_agent/utils.rs', + path: 'src/crates/product/product-domains/src/function_agents/startchat_func_agent/utils.rs', contracts: [ 'WORK_STATE_ANALYSIS_PROMPT', 'build_work_state_analysis_prompt', @@ -2168,7 +2168,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/product-domains/src/function_agents/git_func_agent/utils.rs', + path: 'src/crates/product/product-domains/src/function_agents/git_func_agent/utils.rs', contracts: [ 'COMMIT_MESSAGE_PROMPT', 'parse_commit_analysis_value', @@ -2180,7 +2180,7 @@ export function runManifestParserSelfTest({ ], }, { - path: 'src/crates/core/src/miniapp/runtime_detect.rs', + path: 'src/crates/facade/core/src/miniapp/runtime_detect.rs', contracts: ['pub use bitfun_product_domains::miniapp::runtime::{', 'detect_runtime'], }, ]; @@ -2201,7 +2201,7 @@ export function runManifestParserSelfTest({ } const remoteWorkspaceRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/remote_ssh/workspace_state.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/remote_ssh/workspace_state.rs', ); if (!remoteWorkspaceRule) { throw new Error('missing remote SSH workspace_state boundary rule'); @@ -2233,14 +2233,14 @@ export function runManifestParserSelfTest({ } const announcementStateStoreRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/announcement/state_store.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/announcement/state_store.rs', ); if (!announcementStateStoreRule) { throw new Error('missing announcement state store boundary rule'); } const mcpProcessRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/server/process.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/server/process.rs', ); if (!mcpProcessRule) { throw new Error('missing MCP server process boundary rule'); @@ -2265,7 +2265,7 @@ export function runManifestParserSelfTest({ } const mcpManagerRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/server/manager/mod.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/server/manager/mod.rs', ); if (!mcpManagerRule) { throw new Error('missing MCP server manager boundary rule'); @@ -2285,7 +2285,7 @@ export function runManifestParserSelfTest({ } const mcpReconnectRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/server/manager/reconnect.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/server/manager/reconnect.rs', ); if (!mcpReconnectRule) { throw new Error('missing MCP reconnect boundary rule'); @@ -2300,7 +2300,7 @@ export function runManifestParserSelfTest({ } const mcpInteractionRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/server/manager/interaction.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/server/manager/interaction.rs', ); if (!mcpInteractionRule) { throw new Error('missing MCP interaction boundary rule'); @@ -2315,7 +2315,7 @@ export function runManifestParserSelfTest({ } const mcpToolAdapterRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/adapter/tool.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/adapter/tool.rs', ); if (!mcpToolAdapterRule) { throw new Error('missing MCP tool adapter boundary rule'); @@ -2336,7 +2336,7 @@ export function runManifestParserSelfTest({ } const mcpContextAdapterRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/adapter/context.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/adapter/context.rs', ); if (!mcpContextAdapterRule) { throw new Error('missing MCP context adapter boundary rule'); @@ -2356,7 +2356,7 @@ export function runManifestParserSelfTest({ } const mcpJsonConfigRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/config/json_config.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/config/json_config.rs', ); if (!mcpJsonConfigRule) { throw new Error('missing MCP JSON config boundary rule'); @@ -2377,7 +2377,7 @@ export function runManifestParserSelfTest({ } const mcpConfigServiceRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/config/service.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/config/service.rs', ); if (!mcpConfigServiceRule) { throw new Error('missing MCP config service boundary rule'); @@ -2399,7 +2399,7 @@ export function runManifestParserSelfTest({ } const mcpAuthRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/auth.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/auth.rs', ); if (!mcpAuthRule) { throw new Error('missing MCP auth boundary rule'); @@ -2420,7 +2420,7 @@ export function runManifestParserSelfTest({ } const mcpRemoteTransportRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/protocol/transport_remote.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/protocol/transport_remote.rs', ); if (!mcpRemoteTransportRule) { throw new Error('missing MCP remote transport boundary rule'); @@ -2451,7 +2451,7 @@ export function runManifestParserSelfTest({ } const mcpJsonrpcRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/protocol/jsonrpc.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/protocol/jsonrpc.rs', ); if (!mcpJsonrpcRule) { throw new Error('missing MCP JSON-RPC boundary rule'); @@ -2477,7 +2477,7 @@ export function runManifestParserSelfTest({ } const mcpServerConfigRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/mcp/server/config.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/mcp/server/config.rs', ); if (!mcpServerConfigRule) { throw new Error('missing MCP server config boundary rule'); @@ -2510,7 +2510,7 @@ export function runManifestParserSelfTest({ } const remoteConnectRule = forbiddenContentRules.find( - (rule) => rule.path === 'src/crates/core/src/service/remote_connect/remote_server.rs', + (rule) => rule.path === 'src/crates/facade/core/src/service/remote_connect/remote_server.rs', ); if (!remoteConnectRule) { throw new Error('missing remote-connect remote_server boundary rule'); @@ -2590,9 +2590,9 @@ export function runManifestParserSelfTest({ const facadePaths = new Set(facadeOnlyFiles.map((facade) => facade.path)); for (const path of [ - 'src/crates/core/src/service/mcp/protocol/transport.rs', - 'src/crates/core/src/service/mcp/protocol/transport_remote.rs', - 'src/crates/core/src/service/mcp/server/connection.rs', + 'src/crates/facade/core/src/service/mcp/protocol/transport.rs', + 'src/crates/facade/core/src/service/mcp/protocol/transport_remote.rs', + 'src/crates/facade/core/src/service/mcp/server/connection.rs', ]) { if (!facadePaths.has(path)) { throw new Error(`missing MCP runtime facade-only rule for ${path}`); diff --git a/scripts/generate-i18n-contract.mjs b/scripts/generate-i18n-contract.mjs index 8f7ce7b9a..0d153c24e 100644 --- a/scripts/generate-i18n-contract.mjs +++ b/scripts/generate-i18n-contract.mjs @@ -20,7 +20,7 @@ const outputs = [ generate: generateInstallerLocaleContract, }, { - path: path.join(root, 'src', 'crates', 'core', 'src', 'service', 'i18n', 'generated_locale_contract.rs'), + path: path.join(root, 'src', 'crates', 'facade', 'core', 'src', 'service', 'i18n', 'generated_locale_contract.rs'), generate: generateCoreRustLocaleContract, }, { @@ -458,7 +458,7 @@ ${locales.map((locale) => ` GeneratedLocaleContractEntry { short_model_instruction: ${rustString(locale.shortModelInstruction)}, aliases: ${rustStringArray(locale.aliases)}, content_fallbacks: ${rustLocaleArray(locale.contentFallbacks.map((id) => localeMap.get(id)))}, - }`).join(',\n')} + },`).join('\n')} ]; pub const GENERATED_SHARED_TERMS: &[GeneratedSharedTermEntry] = &[ @@ -466,7 +466,7 @@ ${sharedTermEntries.map((entry) => ` GeneratedSharedTermEntry { locale: ${rustLocaleId(entry.locale)}, key: ${rustString(entry.key)}, value: ${rustString(entry.value)}, - }`).join(',\n')} + },`).join('\n')} ]; pub fn generated_locale_entry(id: LocaleId) -> &'static GeneratedLocaleContractEntry { @@ -476,7 +476,9 @@ pub fn generated_locale_entry(id: LocaleId) -> &'static GeneratedLocaleContractE .expect("LocaleId missing from generated locale contract") } -pub fn generated_locale_entry_from_code(code: &str) -> Option<&'static GeneratedLocaleContractEntry> { +pub fn generated_locale_entry_from_code( + code: &str, +) -> Option<&'static GeneratedLocaleContractEntry> { let normalized = code.trim().to_ascii_lowercase(); if normalized.is_empty() { return None; @@ -517,16 +519,31 @@ mod tests { #[test] fn generated_contract_order_matches_runtime_locale_order() { - let generated_ids: Vec<_> = GENERATED_LOCALE_CONTRACT.iter().map(|entry| entry.id).collect(); + let generated_ids: Vec<_> = GENERATED_LOCALE_CONTRACT + .iter() + .map(|entry| entry.id) + .collect(); assert_eq!(generated_ids, LocaleId::all()); } #[test] fn generated_contract_resolves_aliases_like_runtime_locale_contract() { - assert_eq!(generated_locale_entry_from_code("zh-Hant-TW").map(|entry| entry.id), Some(LocaleId::ZhTW)); - assert_eq!(generated_locale_entry_from_code(" ZH-hans-CN ").map(|entry| entry.id), Some(LocaleId::ZhCN)); - assert_eq!(generated_locale_entry_from_code("en").map(|entry| entry.id), Some(LocaleId::EnUS)); - assert_eq!(generated_locale_entry_from_code("fr-FR").map(|entry| entry.id), None); + assert_eq!( + generated_locale_entry_from_code("zh-Hant-TW").map(|entry| entry.id), + Some(LocaleId::ZhTW) + ); + assert_eq!( + generated_locale_entry_from_code(" ZH-hans-CN ").map(|entry| entry.id), + Some(LocaleId::ZhCN) + ); + assert_eq!( + generated_locale_entry_from_code("en").map(|entry| entry.id), + Some(LocaleId::EnUS) + ); + assert_eq!( + generated_locale_entry_from_code("fr-FR").map(|entry| entry.id), + None + ); } #[test] diff --git a/scripts/i18n-audit.mjs b/scripts/i18n-audit.mjs index 1b7a00753..1e16bf388 100644 --- a/scripts/i18n-audit.mjs +++ b/scripts/i18n-audit.mjs @@ -29,7 +29,7 @@ const mobileWebSourceDir = path.join(root, 'src', 'mobile-web', 'src'); const mobileWebMessagesPath = path.join(mobileWebSourceDir, 'i18n', 'messages.ts'); const installerSourceDir = path.join(root, 'BitFun-Installer', 'src'); const installerLocalesDir = path.join(installerSourceDir, 'i18n', 'locales'); -const coreLocalesDir = path.join(root, 'src', 'crates', 'core', 'locales'); +const coreLocalesDir = path.join(root, 'src', 'crates', 'facade', 'core', 'locales'); const relayHomepageDir = path.join(root, 'src', 'apps', 'relay-server', 'static', 'homepage'); const relayHomepageI18nPath = path.join(relayHomepageDir, 'i18n.json'); const supportedLocales = fs @@ -1115,7 +1115,7 @@ function collectI18nResourceEntries(namespaces) { locale, key, value, - file: `src/crates/core/locales/${locale}.ftl`, + file: `src/crates/facade/core/locales/${locale}.ftl`, }); } } @@ -2172,7 +2172,7 @@ function createLocaleFormatScanSpecs() { }, { surface: 'core-miniapp', - root: path.join(root, 'src', 'crates', 'core', 'src', 'miniapp', 'builtin', 'assets'), + root: path.join(root, 'src', 'crates', 'product', 'product-domains', 'src', 'miniapp', 'builtin', 'assets'), predicate: (file) => file.endsWith('.js'), }, ]; diff --git a/scripts/i18n-contract.test.mjs b/scripts/i18n-contract.test.mjs index 1c707576c..36e47794d 100644 --- a/scripts/i18n-contract.test.mjs +++ b/scripts/i18n-contract.test.mjs @@ -14,7 +14,7 @@ const expectedGeneratedFiles = [ 'src/web-ui/src/infrastructure/i18n/presets/generatedLocaleContract.ts', 'src/mobile-web/src/i18n/generatedLocaleContract.ts', 'BitFun-Installer/src/i18n/generatedLocaleContract.ts', - 'src/crates/core/src/service/i18n/generated_locale_contract.rs', + 'src/crates/facade/core/src/service/i18n/generated_locale_contract.rs', 'BitFun-Installer/src-tauri/src/installer/generated_locale_contract.rs', ]; const expectedGeneratedJsonFiles = [ @@ -154,7 +154,7 @@ test('shared i18n terms exist for every canonical locale with matching keys', () }); test('core runtime uses the generated locale contract for language identity', () => { - const typesSource = readText('src/crates/core/src/service/i18n/types.rs'); + const typesSource = readText('src/crates/facade/core/src/service/i18n/types.rs'); assert.match( typesSource, /generated_locale_contract::\{[\s\S]*GENERATED_LOCALE_CONTRACT/, @@ -166,7 +166,7 @@ test('core runtime uses the generated locale contract for language identity', () 'types.rs must not read language identity from the backend resource registry', ); - const resourceRegistrySource = readText('src/crates/core/src/service/i18n/locale_registry.rs'); + const resourceRegistrySource = readText('src/crates/facade/core/src/service/i18n/locale_registry.rs'); assert.doesNotMatch( resourceRegistrySource, /\b(name|english_name|native_name|rtl|model_language_name|short_model_instruction|aliases):/, @@ -184,7 +184,7 @@ test('shared i18n terms are consumed by each product surface runtime', () => { const installerLanguagesSource = readText('BitFun-Installer/src/i18n/languages.ts'); assert.match(installerLanguagesSource, /SHARED_TERMS_BY_APP_LANGUAGE/, 'installer should merge shared terms into its i18next resources'); - const coreServiceSource = readText('src/crates/core/src/service/i18n/service.rs'); + const coreServiceSource = readText('src/crates/facade/core/src/service/i18n/service.rs'); assert.match(coreServiceSource, /generated_shared_term/, 'core i18n service should resolve generated shared terms'); }); @@ -841,11 +841,11 @@ auditIntegrationTest('core and relay static homepage reuse shared product and fe ); for (const locale of ['en-US', 'zh-CN', 'zh-TW']) { - const fluentSource = readText(`src/crates/core/locales/${locale}.ftl`); + const fluentSource = readText(`src/crates/facade/core/locales/${locale}.ftl`); assert.doesNotMatch(fluentSource, /^app-name\s*=/m, `${locale}.ftl should not copy shared.product.name`); } - const coreServiceSource = readText('src/crates/core/src/service/i18n/service.rs'); + const coreServiceSource = readText('src/crates/facade/core/src/service/i18n/service.rs'); assert.match( coreServiceSource, /legacy_shared_term_key/, diff --git a/src/apps/cli/Cargo.toml b/src/apps/cli/Cargo.toml index 3eeb1f6f1..37817ce78 100644 --- a/src/apps/cli/Cargo.toml +++ b/src/apps/cli/Cargo.toml @@ -11,9 +11,9 @@ path = "src/main.rs" [dependencies] # Internal crates -bitfun-core = { path = "../../crates/core", default-features = false, features = ["product-full"] } -bitfun-events = { path = "../../crates/events" } -bitfun-acp = { path = "../../crates/acp" } +bitfun-core = { path = "../../crates/facade/core", default-features = false, features = ["product-full"] } +bitfun-events = { path = "../../crates/contracts/events" } +bitfun-acp = { path = "../../crates/surfaces/acp" } # CLI framework clap = { workspace = true } diff --git a/src/apps/desktop/AGENTS-CN.md b/src/apps/desktop/AGENTS-CN.md index 12685a96d..9fcaa9a26 100644 --- a/src/apps/desktop/AGENTS-CN.md +++ b/src/apps/desktop/AGENTS-CN.md @@ -16,7 +16,7 @@ - `src/lib.rs`、`src/main.rs`:应用启动与装配 - `src/computer_use/`:操作系统相关自动化支持 -如果改动影响多个运行时共享的产品行为,真正实现通常应放在 `src/crates/core`。 +如果改动影响多个运行时共享的产品行为,真正实现通常应放在 `src/crates/facade/core`。 ## 本模块规则 diff --git a/src/apps/desktop/AGENTS.md b/src/apps/desktop/AGENTS.md index f8c439b13..f6b296f42 100644 --- a/src/apps/desktop/AGENTS.md +++ b/src/apps/desktop/AGENTS.md @@ -16,7 +16,7 @@ Main areas: - `src/lib.rs`, `src/main.rs`: app setup and wiring - `src/computer_use/`: OS-specific automation support -If a change affects shared product behavior across runtimes, the implementation likely belongs in `src/crates/core`. +If a change affects shared product behavior across runtimes, the implementation likely belongs in `src/crates/facade/core`. ## Local rules diff --git a/src/apps/desktop/Cargo.toml b/src/apps/desktop/Cargo.toml index e5a191142..885469035 100644 --- a/src/apps/desktop/Cargo.toml +++ b/src/apps/desktop/Cargo.toml @@ -19,10 +19,10 @@ serde_json = { workspace = true } [dependencies] # Internal crates -bitfun-core = { path = "../../crates/core", default-features = false, features = ["product-full"] } -bitfun-transport = { path = "../../crates/transport", features = ["tauri-adapter"] } -bitfun-webdriver = { path = "../../crates/webdriver" } -bitfun-acp = { path = "../../crates/acp" } +bitfun-core = { path = "../../crates/facade/core", default-features = false, features = ["product-full"] } +bitfun-transport = { path = "../../crates/integrations/transport", features = ["tauri-adapter"] } +bitfun-webdriver = { path = "../../crates/integrations/webdriver" } +bitfun-acp = { path = "../../crates/surfaces/acp" } # Tauri tauri = { workspace = true } diff --git a/src/crates/acp/AGENTS-CN.md b/src/crates/acp/AGENTS-CN.md deleted file mode 100644 index 7231b1b50..000000000 --- a/src/crates/acp/AGENTS-CN.md +++ /dev/null @@ -1,24 +0,0 @@ -**中文** | [English](AGENTS.md) - -# ACP Agent 指南 - -适用范围:`src/crates/acp`。 - -`bitfun-acp` 负责 Agent Client Protocol 集成和 ACP client 行为。ACP protocol / -client 细节应留在这里或 app surface adapter;contract crate 只共享稳定 capability facts。 - -## 护栏 - -- Remote ACP workspace 复用本地 ACP client config。修改 ACP client 行为时,必须保留 - manager、remote shell probing、remote capability store 与 workspace menu availability 语义。 -- ACP config persistence、remote probing、timeout policy 和 workspace surface selection - 属于 ACP / app surface 行为,不要下沉到 `core-types`、`runtime-ports` 或 `agent-tools`。 -- 如果后续需要 contract,只记录 observational 信息:environment identity、capability facts - 与 request/response DTO。 - -## 验证 - -```bash -cargo check -p bitfun-acp -cargo test -p bitfun-acp -``` diff --git a/src/crates/contracts/AGENTS-CN.md b/src/crates/contracts/AGENTS-CN.md new file mode 100644 index 000000000..06cdce891 --- /dev/null +++ b/src/crates/contracts/AGENTS-CN.md @@ -0,0 +1,26 @@ +**中文** | [English](AGENTS.md) + +# 契约层 + +本层负责可被 runtime、services、product、integrations、facade 和应用形态共享的稳定契约,不向上携带具体实现细节。 + +## 模块 + +| Crate | 职责 | 本地文档 | +|---|---|---| +| `core-types` | 共享 DTO、错误、session/surface 数据和小型 value type | [AGENTS.md](core-types/AGENTS.md) | +| `events` | 事件 payload 和 emitter 契约 | [AGENTS.md](events/AGENTS.md) | +| `runtime-ports` | runtime owner crate 使用的 trait 和 port | [AGENTS.md](runtime-ports/AGENTS.md) | + +## 放置规则 + +- 只有跨多个 owner layer 稳定复用的类型才放到这里。 +- 契约层应保持轻行为:允许少量校验 helper,不放 runtime、filesystem、network、UI 或平台行为。 +- 优先定义窄 DTO 或 trait,不引入宽泛 facade object。 +- 如果类型只服务单个 runtime 或 product crate,先留在所属 crate 内,等出现第二个 owner 再提取。 + +## 依赖边界 + +- 本层可以依赖 workspace 基础库和其他 contract crate。 +- 本层不得依赖 `runtime`、`services`、`product`、`integrations`、`facade`、`src/apps`、前端包、Tauri 或 OS adapter。 +- 新依赖必须服务契约形状本身,而不是为了实现层使用方便。 diff --git a/src/crates/contracts/AGENTS.md b/src/crates/contracts/AGENTS.md new file mode 100644 index 000000000..9186d4d19 --- /dev/null +++ b/src/crates/contracts/AGENTS.md @@ -0,0 +1,32 @@ +[中文](AGENTS-CN.md) | **English** + +# Contracts Layer + +This layer owns stable contracts that can be shared by runtime, services, +product, integrations, facade, and app surfaces without pulling implementation +details upward. + +## Modules + +| Crate | Responsibility | Local doc | +|---|---|---| +| `core-types` | Shared DTOs, errors, session/surface data, and small value types | [AGENTS.md](core-types/AGENTS.md) | +| `events` | Event payloads and emitter contracts | [AGENTS.md](events/AGENTS.md) | +| `runtime-ports` | Runtime-facing traits and ports used by owner crates | [AGENTS.md](runtime-ports/AGENTS.md) | + +## Placement Rules + +- Add a type here only when it is stable across more than one owner layer. +- Keep contracts behavior-light: validation helpers are acceptable; runtime, + filesystem, network, UI, or platform behavior is not. +- Prefer narrow DTOs or traits over broad facade objects. +- If a type is only needed by one runtime or product crate, keep it with that + crate until a second owner needs it. + +## Dependency Boundaries + +- This layer may depend on workspace primitives and other contract crates. +- It must not depend on `runtime`, `services`, `product`, `integrations`, + `facade`, `src/apps`, frontend packages, Tauri, or OS-specific adapters. +- New dependencies must stay minimal and justified by contract shape, not by + implementation convenience. diff --git a/src/crates/core-types/AGENTS.md b/src/crates/contracts/core-types/AGENTS.md similarity index 93% rename from src/crates/core-types/AGENTS.md rename to src/crates/contracts/core-types/AGENTS.md index 555d01817..91f834552 100644 --- a/src/crates/core-types/AGENTS.md +++ b/src/crates/contracts/core-types/AGENTS.md @@ -1,6 +1,6 @@ # core-types Agent Guide -Scope: this guide applies to `src/crates/core-types`. +Scope: this guide applies to `src/crates/contracts/core-types`. `bitfun-core-types` owns low-level shared DTOs and error/session/surface contracts. Keep it dependency-light and stable for cross-crate reuse. diff --git a/src/crates/core-types/Cargo.toml b/src/crates/contracts/core-types/Cargo.toml similarity index 100% rename from src/crates/core-types/Cargo.toml rename to src/crates/contracts/core-types/Cargo.toml diff --git a/src/crates/core-types/src/errors.rs b/src/crates/contracts/core-types/src/errors.rs similarity index 100% rename from src/crates/core-types/src/errors.rs rename to src/crates/contracts/core-types/src/errors.rs diff --git a/src/crates/core-types/src/lib.rs b/src/crates/contracts/core-types/src/lib.rs similarity index 100% rename from src/crates/core-types/src/lib.rs rename to src/crates/contracts/core-types/src/lib.rs diff --git a/src/crates/core-types/src/session.rs b/src/crates/contracts/core-types/src/session.rs similarity index 100% rename from src/crates/core-types/src/session.rs rename to src/crates/contracts/core-types/src/session.rs diff --git a/src/crates/core-types/src/surface.rs b/src/crates/contracts/core-types/src/surface.rs similarity index 100% rename from src/crates/core-types/src/surface.rs rename to src/crates/contracts/core-types/src/surface.rs diff --git a/src/crates/core-types/src/tool_image_attachment.rs b/src/crates/contracts/core-types/src/tool_image_attachment.rs similarity index 100% rename from src/crates/core-types/src/tool_image_attachment.rs rename to src/crates/contracts/core-types/src/tool_image_attachment.rs diff --git a/src/crates/core-types/tests/session_contracts.rs b/src/crates/contracts/core-types/tests/session_contracts.rs similarity index 100% rename from src/crates/core-types/tests/session_contracts.rs rename to src/crates/contracts/core-types/tests/session_contracts.rs diff --git a/src/crates/core-types/tests/surface_contracts.rs b/src/crates/contracts/core-types/tests/surface_contracts.rs similarity index 100% rename from src/crates/core-types/tests/surface_contracts.rs rename to src/crates/contracts/core-types/tests/surface_contracts.rs diff --git a/src/crates/events/AGENTS.md b/src/crates/contracts/events/AGENTS.md similarity index 93% rename from src/crates/events/AGENTS.md rename to src/crates/contracts/events/AGENTS.md index f01fc2578..fd2dc2675 100644 --- a/src/crates/events/AGENTS.md +++ b/src/crates/contracts/events/AGENTS.md @@ -1,6 +1,6 @@ # events Agent Guide -Scope: this guide applies to `src/crates/events`. +Scope: this guide applies to `src/crates/contracts/events`. `bitfun-events` owns platform-neutral event contracts and the emitter interface. It describes events; it does not own event delivery or product decisions. diff --git a/src/crates/events/Cargo.toml b/src/crates/contracts/events/Cargo.toml similarity index 100% rename from src/crates/events/Cargo.toml rename to src/crates/contracts/events/Cargo.toml diff --git a/src/crates/events/src/agentic.rs b/src/crates/contracts/events/src/agentic.rs similarity index 100% rename from src/crates/events/src/agentic.rs rename to src/crates/contracts/events/src/agentic.rs diff --git a/src/crates/events/src/emitter.rs b/src/crates/contracts/events/src/emitter.rs similarity index 100% rename from src/crates/events/src/emitter.rs rename to src/crates/contracts/events/src/emitter.rs diff --git a/src/crates/events/src/lib.rs b/src/crates/contracts/events/src/lib.rs similarity index 100% rename from src/crates/events/src/lib.rs rename to src/crates/contracts/events/src/lib.rs diff --git a/src/crates/events/src/types.rs b/src/crates/contracts/events/src/types.rs similarity index 100% rename from src/crates/events/src/types.rs rename to src/crates/contracts/events/src/types.rs diff --git a/src/crates/runtime-ports/AGENTS.md b/src/crates/contracts/runtime-ports/AGENTS.md similarity index 94% rename from src/crates/runtime-ports/AGENTS.md rename to src/crates/contracts/runtime-ports/AGENTS.md index 45d9a94d5..c98c36254 100644 --- a/src/crates/runtime-ports/AGENTS.md +++ b/src/crates/contracts/runtime-ports/AGENTS.md @@ -1,6 +1,6 @@ # runtime-ports Agent Guide -Scope: this guide applies to `src/crates/runtime-ports`. +Scope: this guide applies to `src/crates/contracts/runtime-ports`. `bitfun-runtime-ports` owns stable runtime-facing ports, DTOs, and capability facts. It is an interface crate, not a runtime implementation crate. diff --git a/src/crates/runtime-ports/Cargo.toml b/src/crates/contracts/runtime-ports/Cargo.toml similarity index 100% rename from src/crates/runtime-ports/Cargo.toml rename to src/crates/contracts/runtime-ports/Cargo.toml diff --git a/src/crates/runtime-ports/src/lib.rs b/src/crates/contracts/runtime-ports/src/lib.rs similarity index 100% rename from src/crates/runtime-ports/src/lib.rs rename to src/crates/contracts/runtime-ports/src/lib.rs diff --git a/src/crates/runtime-ports/tests/session_store_contracts.rs b/src/crates/contracts/runtime-ports/tests/session_store_contracts.rs similarity index 100% rename from src/crates/runtime-ports/tests/session_store_contracts.rs rename to src/crates/contracts/runtime-ports/tests/session_store_contracts.rs diff --git a/src/crates/execution/AGENTS-CN.md b/src/crates/execution/AGENTS-CN.md new file mode 100644 index 000000000..355524ecb --- /dev/null +++ b/src/crates/execution/AGENTS-CN.md @@ -0,0 +1,30 @@ +**中文** | [English](AGENTS.md) + +# 执行原语层 + +本层负责可复用的 agent、tool、harness、stream 和 typed-service 执行原语。它不是完整 Agent Runtime SDK,也不是组装后的产品 runtime。由产品组装决定某个交付形态启用哪些 execution primitive、tool pack、harness provider 和 service provider。 + +## 模块 + +| Crate | 职责 | 本地文档 | +|---|---|---| +| `agent-runtime` | Agent registry、scheduler、prompt cache、hooks、goal 和 runtime control 契约 | [AGENTS.md](agent-runtime/AGENTS.md) | +| `agent-stream` | Provider stream 归一化和 replay 契约 | [AGENTS.md](agent-stream/AGENTS.md) | +| `agent-tools` | Tool 契约、execution gate、input validation 和 result presentation 契约 | [AGENTS.md](agent-tools/AGENTS.md) | +| `harness` | Harness workflow 契约和 registry primitive | [AGENTS.md](harness/AGENTS.md) | +| `runtime-services` | Typed runtime service assembly 和 service availability facts | [AGENTS.md](runtime-services/AGENTS.md) | +| `tool-packs` | Tool provider group facts 和 product-full tool-pack composition | [AGENTS.md](tool-packs/AGENTS.md) | +| `tool-runtime` | 底层 file/search/tool IO helper | [AGENTS.md](tool-runtime/AGENTS.md) | + +## 放置规则 + +- 可移植 execution 编排、agent lifecycle 契约、tool 契约和 provider-neutral execution facts 放到这里。 +- 具体 filesystem、git、terminal、MCP server、remote SSH、OS 行为应放到 `services`,除非只是纯底层 tool primitive。 +- 产品 feature 选择和 delivery-profile 决策放到 `product` 或 `facade`,不要放入 execution primitive。 +- Tool packs 只描述 provider group 和所需服务;具体服务访问应通过 port 或 typed runtime service。 + +## 依赖边界 + +- Execution primitive crate 可以依赖 `contracts`,在 provider stream 归一化场景下可以窄依赖 integration DTO。 +- Execution primitive crate 不得依赖 `facade/core`、`src/apps`、前端代码、Tauri API 或产品形态 lifecycle。 +- 新增对 `services`、`product` 或 `integrations` 的依赖时,必须在最近的模块文档或 PR 描述里说明边界原因。 diff --git a/src/crates/execution/AGENTS.md b/src/crates/execution/AGENTS.md new file mode 100644 index 000000000..dcdc0c6f1 --- /dev/null +++ b/src/crates/execution/AGENTS.md @@ -0,0 +1,40 @@ +[中文](AGENTS-CN.md) | **English** + +# Execution Primitives Layer + +This layer owns reusable agent, tool, harness, stream, and typed-service +execution primitives. It is not the complete Agent Runtime SDK and not the +assembled product runtime. Product assembly decides which primitives, tool +packs, harness providers, and service providers are active for a delivery form. + +## Modules + +| Crate | Responsibility | Local doc | +|---|---|---| +| `agent-runtime` | Agent registry, scheduler, prompt cache, hooks, goals, and runtime control contracts | [AGENTS.md](agent-runtime/AGENTS.md) | +| `agent-stream` | Provider stream normalization and stream replay contracts | [AGENTS.md](agent-stream/AGENTS.md) | +| `agent-tools` | Tool contracts, execution gates, input validation, and result presentation contracts | [AGENTS.md](agent-tools/AGENTS.md) | +| `harness` | Harness workflow contracts and registry primitives | [AGENTS.md](harness/AGENTS.md) | +| `runtime-services` | Typed runtime service assembly and service availability facts | [AGENTS.md](runtime-services/AGENTS.md) | +| `tool-packs` | Tool provider group facts and product-full tool-pack composition | [AGENTS.md](tool-packs/AGENTS.md) | +| `tool-runtime` | Low-level file/search/tool IO helpers | [AGENTS.md](tool-runtime/AGENTS.md) | + +## Placement Rules + +- Put portable execution orchestration, agent lifecycle contracts, tool + contracts, and provider-neutral execution facts here. +- Keep concrete filesystem, git, terminal, MCP server, remote SSH, and OS + behavior in `services` unless the code is a pure low-level tool primitive. +- Keep product feature selection and delivery-profile decisions in `product` or + `facade`, not in execution primitives. +- Tool packs should describe provider groups and required services; concrete + service access should flow through ports or typed runtime services. + +## Dependency Boundaries + +- Execution primitive crates may depend on `contracts` and narrowly scoped + integration DTOs when needed for provider stream normalization. +- Execution primitive crates must not depend on `facade/core`, `src/apps`, + frontend code, Tauri APIs, or product-surface lifecycle. +- Any new dependency on `services`, `product`, or `integrations` needs an + explicit boundary reason in the nearest module doc or PR description. diff --git a/src/crates/agent-runtime/AGENTS.md b/src/crates/execution/agent-runtime/AGENTS.md similarity index 97% rename from src/crates/agent-runtime/AGENTS.md rename to src/crates/execution/agent-runtime/AGENTS.md index 5284ab716..f61013f3c 100644 --- a/src/crates/agent-runtime/AGENTS.md +++ b/src/crates/execution/agent-runtime/AGENTS.md @@ -1,6 +1,6 @@ # agent-runtime Agent Guide -Scope: this guide applies to `src/crates/agent-runtime`. +Scope: this guide applies to `src/crates/execution/agent-runtime`. `bitfun-agent-runtime` owns portable agent runtime decisions that can be built and tested without `bitfun-core`. diff --git a/src/crates/agent-runtime/Cargo.toml b/src/crates/execution/agent-runtime/Cargo.toml similarity index 86% rename from src/crates/agent-runtime/Cargo.toml rename to src/crates/execution/agent-runtime/Cargo.toml index 53daf9744..89bc18e46 100644 --- a/src/crates/agent-runtime/Cargo.toml +++ b/src/crates/execution/agent-runtime/Cargo.toml @@ -10,7 +10,7 @@ name = "bitfun_agent_runtime" crate-type = ["rlib"] [dependencies] -bitfun-runtime-ports = { path = "../runtime-ports" } +bitfun-runtime-ports = { path = "../../contracts/runtime-ports" } dashmap = { workspace = true } regex = { workspace = true } serde = { workspace = true } diff --git a/src/crates/agent-runtime/src/agents.rs b/src/crates/execution/agent-runtime/src/agents.rs similarity index 100% rename from src/crates/agent-runtime/src/agents.rs rename to src/crates/execution/agent-runtime/src/agents.rs diff --git a/src/crates/agent-runtime/src/custom_subagent.rs b/src/crates/execution/agent-runtime/src/custom_subagent.rs similarity index 100% rename from src/crates/agent-runtime/src/custom_subagent.rs rename to src/crates/execution/agent-runtime/src/custom_subagent.rs diff --git a/src/crates/agent-runtime/src/events.rs b/src/crates/execution/agent-runtime/src/events.rs similarity index 100% rename from src/crates/agent-runtime/src/events.rs rename to src/crates/execution/agent-runtime/src/events.rs diff --git a/src/crates/agent-runtime/src/lib.rs b/src/crates/execution/agent-runtime/src/lib.rs similarity index 100% rename from src/crates/agent-runtime/src/lib.rs rename to src/crates/execution/agent-runtime/src/lib.rs diff --git a/src/crates/agent-runtime/src/post_call_hooks.rs b/src/crates/execution/agent-runtime/src/post_call_hooks.rs similarity index 100% rename from src/crates/agent-runtime/src/post_call_hooks.rs rename to src/crates/execution/agent-runtime/src/post_call_hooks.rs diff --git a/src/crates/agent-runtime/src/prompt.rs b/src/crates/execution/agent-runtime/src/prompt.rs similarity index 100% rename from src/crates/agent-runtime/src/prompt.rs rename to src/crates/execution/agent-runtime/src/prompt.rs diff --git a/src/crates/agent-runtime/src/prompt_cache.rs b/src/crates/execution/agent-runtime/src/prompt_cache.rs similarity index 100% rename from src/crates/agent-runtime/src/prompt_cache.rs rename to src/crates/execution/agent-runtime/src/prompt_cache.rs diff --git a/src/crates/agent-runtime/src/scheduled_job.rs b/src/crates/execution/agent-runtime/src/scheduled_job.rs similarity index 100% rename from src/crates/agent-runtime/src/scheduled_job.rs rename to src/crates/execution/agent-runtime/src/scheduled_job.rs diff --git a/src/crates/agent-runtime/src/scheduler.rs b/src/crates/execution/agent-runtime/src/scheduler.rs similarity index 100% rename from src/crates/agent-runtime/src/scheduler.rs rename to src/crates/execution/agent-runtime/src/scheduler.rs diff --git a/src/crates/agent-runtime/src/session_control.rs b/src/crates/execution/agent-runtime/src/session_control.rs similarity index 100% rename from src/crates/agent-runtime/src/session_control.rs rename to src/crates/execution/agent-runtime/src/session_control.rs diff --git a/src/crates/agent-runtime/src/thread_goal.rs b/src/crates/execution/agent-runtime/src/thread_goal.rs similarity index 100% rename from src/crates/agent-runtime/src/thread_goal.rs rename to src/crates/execution/agent-runtime/src/thread_goal.rs diff --git a/src/crates/agent-runtime/src/thread_goal/templates/budget_limit.md b/src/crates/execution/agent-runtime/src/thread_goal/templates/budget_limit.md similarity index 100% rename from src/crates/agent-runtime/src/thread_goal/templates/budget_limit.md rename to src/crates/execution/agent-runtime/src/thread_goal/templates/budget_limit.md diff --git a/src/crates/agent-runtime/src/thread_goal/templates/continuation.md b/src/crates/execution/agent-runtime/src/thread_goal/templates/continuation.md similarity index 100% rename from src/crates/agent-runtime/src/thread_goal/templates/continuation.md rename to src/crates/execution/agent-runtime/src/thread_goal/templates/continuation.md diff --git a/src/crates/agent-runtime/src/thread_goal/templates/objective_updated.md b/src/crates/execution/agent-runtime/src/thread_goal/templates/objective_updated.md similarity index 100% rename from src/crates/agent-runtime/src/thread_goal/templates/objective_updated.md rename to src/crates/execution/agent-runtime/src/thread_goal/templates/objective_updated.md diff --git a/src/crates/agent-runtime/src/thread_goal_tools.rs b/src/crates/execution/agent-runtime/src/thread_goal_tools.rs similarity index 100% rename from src/crates/agent-runtime/src/thread_goal_tools.rs rename to src/crates/execution/agent-runtime/src/thread_goal_tools.rs diff --git a/src/crates/agent-runtime/src/tool_confirmation.rs b/src/crates/execution/agent-runtime/src/tool_confirmation.rs similarity index 100% rename from src/crates/agent-runtime/src/tool_confirmation.rs rename to src/crates/execution/agent-runtime/src/tool_confirmation.rs diff --git a/src/crates/agent-runtime/src/user_questions.rs b/src/crates/execution/agent-runtime/src/user_questions.rs similarity index 100% rename from src/crates/agent-runtime/src/user_questions.rs rename to src/crates/execution/agent-runtime/src/user_questions.rs diff --git a/src/crates/agent-runtime/tests/agent_registry_contracts.rs b/src/crates/execution/agent-runtime/tests/agent_registry_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/agent_registry_contracts.rs rename to src/crates/execution/agent-runtime/tests/agent_registry_contracts.rs diff --git a/src/crates/agent-runtime/tests/custom_subagent_contracts.rs b/src/crates/execution/agent-runtime/tests/custom_subagent_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/custom_subagent_contracts.rs rename to src/crates/execution/agent-runtime/tests/custom_subagent_contracts.rs diff --git a/src/crates/agent-runtime/tests/custom_subagent_discovery_contracts.rs b/src/crates/execution/agent-runtime/tests/custom_subagent_discovery_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/custom_subagent_discovery_contracts.rs rename to src/crates/execution/agent-runtime/tests/custom_subagent_discovery_contracts.rs diff --git a/src/crates/agent-runtime/tests/events_contracts.rs b/src/crates/execution/agent-runtime/tests/events_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/events_contracts.rs rename to src/crates/execution/agent-runtime/tests/events_contracts.rs diff --git a/src/crates/agent-runtime/tests/post_call_hook_contracts.rs b/src/crates/execution/agent-runtime/tests/post_call_hook_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/post_call_hook_contracts.rs rename to src/crates/execution/agent-runtime/tests/post_call_hook_contracts.rs diff --git a/src/crates/agent-runtime/tests/post_call_hook_execution_contracts.rs b/src/crates/execution/agent-runtime/tests/post_call_hook_execution_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/post_call_hook_execution_contracts.rs rename to src/crates/execution/agent-runtime/tests/post_call_hook_execution_contracts.rs diff --git a/src/crates/agent-runtime/tests/prompt_cache_contracts.rs b/src/crates/execution/agent-runtime/tests/prompt_cache_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/prompt_cache_contracts.rs rename to src/crates/execution/agent-runtime/tests/prompt_cache_contracts.rs diff --git a/src/crates/agent-runtime/tests/prompt_contracts.rs b/src/crates/execution/agent-runtime/tests/prompt_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/prompt_contracts.rs rename to src/crates/execution/agent-runtime/tests/prompt_contracts.rs diff --git a/src/crates/agent-runtime/tests/scheduled_job_contracts.rs b/src/crates/execution/agent-runtime/tests/scheduled_job_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/scheduled_job_contracts.rs rename to src/crates/execution/agent-runtime/tests/scheduled_job_contracts.rs diff --git a/src/crates/agent-runtime/tests/scheduler_contracts.rs b/src/crates/execution/agent-runtime/tests/scheduler_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/scheduler_contracts.rs rename to src/crates/execution/agent-runtime/tests/scheduler_contracts.rs diff --git a/src/crates/agent-runtime/tests/session_control_contracts.rs b/src/crates/execution/agent-runtime/tests/session_control_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/session_control_contracts.rs rename to src/crates/execution/agent-runtime/tests/session_control_contracts.rs diff --git a/src/crates/agent-runtime/tests/thread_goal_contracts.rs b/src/crates/execution/agent-runtime/tests/thread_goal_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/thread_goal_contracts.rs rename to src/crates/execution/agent-runtime/tests/thread_goal_contracts.rs diff --git a/src/crates/agent-runtime/tests/thread_goal_tool_handler_contracts.rs b/src/crates/execution/agent-runtime/tests/thread_goal_tool_handler_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/thread_goal_tool_handler_contracts.rs rename to src/crates/execution/agent-runtime/tests/thread_goal_tool_handler_contracts.rs diff --git a/src/crates/agent-runtime/tests/tool_confirmation_contracts.rs b/src/crates/execution/agent-runtime/tests/tool_confirmation_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/tool_confirmation_contracts.rs rename to src/crates/execution/agent-runtime/tests/tool_confirmation_contracts.rs diff --git a/src/crates/agent-runtime/tests/user_question_tool_contracts.rs b/src/crates/execution/agent-runtime/tests/user_question_tool_contracts.rs similarity index 100% rename from src/crates/agent-runtime/tests/user_question_tool_contracts.rs rename to src/crates/execution/agent-runtime/tests/user_question_tool_contracts.rs diff --git a/src/crates/agent-stream/AGENTS.md b/src/crates/execution/agent-stream/AGENTS.md similarity index 93% rename from src/crates/agent-stream/AGENTS.md rename to src/crates/execution/agent-stream/AGENTS.md index 8677bcb55..b782b0401 100644 --- a/src/crates/agent-stream/AGENTS.md +++ b/src/crates/execution/agent-stream/AGENTS.md @@ -1,6 +1,6 @@ # agent-stream Agent Guide -Scope: this guide applies to `src/crates/agent-stream`. +Scope: this guide applies to `src/crates/execution/agent-stream`. `bitfun-agent-stream` owns provider stream normalization and replayable stream processing contracts. It should preserve provider wire behavior while exposing a diff --git a/src/crates/agent-stream/Cargo.toml b/src/crates/execution/agent-stream/Cargo.toml similarity index 84% rename from src/crates/agent-stream/Cargo.toml rename to src/crates/execution/agent-stream/Cargo.toml index b8f38366a..46088dbb4 100644 --- a/src/crates/agent-stream/Cargo.toml +++ b/src/crates/execution/agent-stream/Cargo.toml @@ -12,8 +12,8 @@ crate-type = ["rlib"] [dependencies] anyhow = { workspace = true } async-trait = { workspace = true } -bitfun-ai-adapters = { path = "../ai-adapters" } -bitfun-events = { path = "../events" } +bitfun-ai-adapters = { path = "../../integrations/ai-adapters" } +bitfun-events = { path = "../../contracts/events" } futures = { workspace = true } log = { workspace = true } serde = { workspace = true } diff --git a/src/crates/agent-stream/src/lib.rs b/src/crates/execution/agent-stream/src/lib.rs similarity index 100% rename from src/crates/agent-stream/src/lib.rs rename to src/crates/execution/agent-stream/src/lib.rs diff --git a/src/crates/agent-stream/tests/common/fixture_loader.rs b/src/crates/execution/agent-stream/tests/common/fixture_loader.rs similarity index 100% rename from src/crates/agent-stream/tests/common/fixture_loader.rs rename to src/crates/execution/agent-stream/tests/common/fixture_loader.rs diff --git a/src/crates/agent-stream/tests/common/mod.rs b/src/crates/execution/agent-stream/tests/common/mod.rs similarity index 100% rename from src/crates/agent-stream/tests/common/mod.rs rename to src/crates/execution/agent-stream/tests/common/mod.rs diff --git a/src/crates/agent-stream/tests/common/sse_fixture_server.rs b/src/crates/execution/agent-stream/tests/common/sse_fixture_server.rs similarity index 100% rename from src/crates/agent-stream/tests/common/sse_fixture_server.rs rename to src/crates/execution/agent-stream/tests/common/sse_fixture_server.rs diff --git a/src/crates/agent-stream/tests/common/stream_test_harness.rs b/src/crates/execution/agent-stream/tests/common/stream_test_harness.rs similarity index 100% rename from src/crates/agent-stream/tests/common/stream_test_harness.rs rename to src/crates/execution/agent-stream/tests/common/stream_test_harness.rs diff --git a/src/crates/agent-stream/tests/fixtures/stream/anthropic/closed_after_message_delta.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/closed_after_message_delta.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/anthropic/closed_after_message_delta.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/closed_after_message_delta.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/anthropic/empty_thinking_signature_text_and_tool_use.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/empty_thinking_signature_text_and_tool_use.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/anthropic/empty_thinking_signature_text_and_tool_use.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/empty_thinking_signature_text_and_tool_use.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/anthropic/extended_thinking.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/extended_thinking.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/anthropic/extended_thinking.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/extended_thinking.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/anthropic/inline_think_text.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/inline_think_text.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/anthropic/inline_think_text.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/inline_think_text.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/anthropic/interleaved_parallel_tool_use.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/interleaved_parallel_tool_use.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/anthropic/interleaved_parallel_tool_use.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/interleaved_parallel_tool_use.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/anthropic/malformed_content_block_delta.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/malformed_content_block_delta.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/anthropic/malformed_content_block_delta.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/malformed_content_block_delta.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/anthropic/malformed_tool_arguments_extra_brace.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/malformed_tool_arguments_extra_brace.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/anthropic/malformed_tool_arguments_extra_brace.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/anthropic/malformed_tool_arguments_extra_brace.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/gemini/function_call_string_args.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/gemini/function_call_string_args.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/gemini/function_call_string_args.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/gemini/function_call_string_args.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/empty_reasoning_content_text_and_tool_call.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/empty_reasoning_content_text_and_tool_call.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/empty_reasoning_content_text_and_tool_call.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/empty_reasoning_content_text_and_tool_call.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/inline_think_text.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/inline_think_text.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/inline_think_text.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/inline_think_text.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/interleaved_parallel_tool_args_by_index.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/interleaved_parallel_tool_args_by_index.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/interleaved_parallel_tool_args_by_index.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/interleaved_parallel_tool_args_by_index.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/thinking_text_three_tools_with_empty_toolcall_anomaly.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/thinking_text_three_tools_with_empty_toolcall_anomaly.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/thinking_text_three_tools_with_empty_toolcall_anomaly.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/thinking_text_three_tools_with_empty_toolcall_anomaly.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/tool_args_snapshot_stop_reason.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_args_snapshot_stop_reason.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/tool_args_snapshot_stop_reason.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_args_snapshot_stop_reason.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/tool_args_split_with_usage.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_args_split_with_usage.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/tool_args_split_with_usage.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_args_split_with_usage.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/tool_call_missing_type_field.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_call_missing_type_field.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/tool_call_missing_type_field.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_call_missing_type_field.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/tool_call_trailing_empty_args_finish_chunk.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_call_trailing_empty_args_finish_chunk.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/tool_call_trailing_empty_args_finish_chunk.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_call_trailing_empty_args_finish_chunk.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/tool_id_only_orphan_filtered.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_id_only_orphan_filtered.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/tool_id_only_orphan_filtered.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_id_only_orphan_filtered.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/tool_id_prelude_then_payload_without_id.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_id_prelude_then_payload_without_id.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/tool_id_prelude_then_payload_without_id.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/tool_id_prelude_then_payload_without_id.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/openai/two_tools_first_final_chunk_contains_orphan_id_only.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/openai/two_tools_first_final_chunk_contains_orphan_id_only.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/openai/two_tools_first_final_chunk_contains_orphan_id_only.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/openai/two_tools_first_final_chunk_contains_orphan_id_only.sse diff --git a/src/crates/agent-stream/tests/fixtures/stream/responses/malformed_function_call_arguments.sse b/src/crates/execution/agent-stream/tests/fixtures/stream/responses/malformed_function_call_arguments.sse similarity index 100% rename from src/crates/agent-stream/tests/fixtures/stream/responses/malformed_function_call_arguments.sse rename to src/crates/execution/agent-stream/tests/fixtures/stream/responses/malformed_function_call_arguments.sse diff --git a/src/crates/agent-stream/tests/stream_processor_anthropic.rs b/src/crates/execution/agent-stream/tests/stream_processor_anthropic.rs similarity index 100% rename from src/crates/agent-stream/tests/stream_processor_anthropic.rs rename to src/crates/execution/agent-stream/tests/stream_processor_anthropic.rs diff --git a/src/crates/agent-stream/tests/stream_processor_openai.rs b/src/crates/execution/agent-stream/tests/stream_processor_openai.rs similarity index 99% rename from src/crates/agent-stream/tests/stream_processor_openai.rs rename to src/crates/execution/agent-stream/tests/stream_processor_openai.rs index 21ec50ad8..2c0d84ec2 100644 --- a/src/crates/agent-stream/tests/stream_processor_openai.rs +++ b/src/crates/execution/agent-stream/tests/stream_processor_openai.rs @@ -52,7 +52,7 @@ async fn openai_fixture_keeps_collecting_tool_args_across_usage_chunks() { } => { assert_eq!(round_id, "round_fixture"); Some(params.as_str()) - }, + } _ => None, }) .collect(); @@ -127,7 +127,7 @@ async fn openai_fixture_keeps_malformed_tool_arguments_invalid() { } => { assert_eq!(round_id, "round_fixture"); Some(tool_id.as_str()) - }, + } _ => None, }) .collect(); @@ -236,7 +236,7 @@ async fn openai_fixture_reattaches_id_only_prelude_to_following_payload_chunk() } => { assert_eq!(round_id, "round_fixture"); Some(params.as_str()) - }, + } _ => None, }) .collect(); @@ -366,7 +366,7 @@ async fn openai_fixture_filters_orphan_id_only_block_when_it_shares_chunk_with_f } => { assert_eq!(round_id, "round_fixture"); Some(tool_id.as_str()) - }, + } _ => None, }) .collect(); @@ -386,7 +386,7 @@ async fn openai_fixture_filters_orphan_id_only_block_when_it_shares_chunk_with_f } => { assert_eq!(round_id, "round_fixture"); Some((tool_id.as_str(), params.as_str())) - }, + } _ => None, }) .collect(); @@ -439,7 +439,7 @@ async fn openai_fixture_routes_interleaved_tool_args_by_index() { } => { assert_eq!(round_id, "round_fixture"); Some(tool_id.as_str()) - }, + } _ => None, }) .collect(); @@ -459,7 +459,7 @@ async fn openai_fixture_routes_interleaved_tool_args_by_index() { } => { assert_eq!(round_id, "round_fixture"); Some((tool_id.as_str(), params.as_str())) - }, + } _ => None, }) .collect(); @@ -541,7 +541,7 @@ async fn openai_fixture_ignores_trailing_empty_tool_args_finish_chunk() { } => { assert_eq!(round_id, "round_fixture"); Some(tool_id.as_str()) - }, + } _ => None, }) .collect(); @@ -558,7 +558,7 @@ async fn openai_fixture_ignores_trailing_empty_tool_args_finish_chunk() { } => { assert_eq!(round_id, "round_fixture"); Some(params.as_str()) - }, + } _ => None, }) .collect(); diff --git a/src/crates/agent-stream/tests/stream_processor_tool_arguments.rs b/src/crates/execution/agent-stream/tests/stream_processor_tool_arguments.rs similarity index 100% rename from src/crates/agent-stream/tests/stream_processor_tool_arguments.rs rename to src/crates/execution/agent-stream/tests/stream_processor_tool_arguments.rs diff --git a/src/crates/agent-stream/tests/stream_replay_regressions.rs b/src/crates/execution/agent-stream/tests/stream_replay_regressions.rs similarity index 99% rename from src/crates/agent-stream/tests/stream_replay_regressions.rs rename to src/crates/execution/agent-stream/tests/stream_replay_regressions.rs index f2be43068..e7206c1a5 100644 --- a/src/crates/agent-stream/tests/stream_replay_regressions.rs +++ b/src/crates/execution/agent-stream/tests/stream_replay_regressions.rs @@ -102,7 +102,7 @@ async fn replays_structurally_empty_openai_reasoning_content_with_tool_call() { } => { assert_eq!(round_id, "round_fixture"); Some((tool_id.as_str(), params.as_str())) - }, + } _ => None, }) .collect(); diff --git a/src/crates/agent-stream/tests/stream_test_harness.rs b/src/crates/execution/agent-stream/tests/stream_test_harness.rs similarity index 100% rename from src/crates/agent-stream/tests/stream_test_harness.rs rename to src/crates/execution/agent-stream/tests/stream_test_harness.rs diff --git a/src/crates/agent-tools/AGENTS.md b/src/crates/execution/agent-tools/AGENTS.md similarity index 95% rename from src/crates/agent-tools/AGENTS.md rename to src/crates/execution/agent-tools/AGENTS.md index 50fe63ee9..b70d3f050 100644 --- a/src/crates/agent-tools/AGENTS.md +++ b/src/crates/execution/agent-tools/AGENTS.md @@ -1,6 +1,6 @@ # agent-tools Agent Guide -Scope: this guide applies to `src/crates/agent-tools`. +Scope: this guide applies to `src/crates/execution/agent-tools`. `bitfun-agent-tools` owns portable tool contracts. It must stay independent of the product tool runtime. diff --git a/src/crates/agent-tools/Cargo.toml b/src/crates/execution/agent-tools/Cargo.toml similarity index 76% rename from src/crates/agent-tools/Cargo.toml rename to src/crates/execution/agent-tools/Cargo.toml index 229b0ff79..1f7ef2a6e 100644 --- a/src/crates/agent-tools/Cargo.toml +++ b/src/crates/execution/agent-tools/Cargo.toml @@ -12,8 +12,8 @@ crate-type = ["rlib"] [dependencies] serde = { workspace = true } serde_json = { workspace = true } -bitfun-core-types = { path = "../core-types" } -bitfun-runtime-ports = { path = "../runtime-ports" } +bitfun-core-types = { path = "../../contracts/core-types" } +bitfun-runtime-ports = { path = "../../contracts/runtime-ports" } async-trait = { workspace = true } indexmap = { workspace = true } diff --git a/src/crates/agent-tools/src/execution_gate.rs b/src/crates/execution/agent-tools/src/execution_gate.rs similarity index 100% rename from src/crates/agent-tools/src/execution_gate.rs rename to src/crates/execution/agent-tools/src/execution_gate.rs diff --git a/src/crates/agent-tools/src/file_guidance.rs b/src/crates/execution/agent-tools/src/file_guidance.rs similarity index 100% rename from src/crates/agent-tools/src/file_guidance.rs rename to src/crates/execution/agent-tools/src/file_guidance.rs diff --git a/src/crates/agent-tools/src/file_read_freshness.rs b/src/crates/execution/agent-tools/src/file_read_freshness.rs similarity index 100% rename from src/crates/agent-tools/src/file_read_freshness.rs rename to src/crates/execution/agent-tools/src/file_read_freshness.rs diff --git a/src/crates/agent-tools/src/framework.rs b/src/crates/execution/agent-tools/src/framework.rs similarity index 100% rename from src/crates/agent-tools/src/framework.rs rename to src/crates/execution/agent-tools/src/framework.rs diff --git a/src/crates/agent-tools/src/input_validator.rs b/src/crates/execution/agent-tools/src/input_validator.rs similarity index 100% rename from src/crates/agent-tools/src/input_validator.rs rename to src/crates/execution/agent-tools/src/input_validator.rs diff --git a/src/crates/agent-tools/src/lib.rs b/src/crates/execution/agent-tools/src/lib.rs similarity index 100% rename from src/crates/agent-tools/src/lib.rs rename to src/crates/execution/agent-tools/src/lib.rs diff --git a/src/crates/agent-tools/src/tool_execution_presentation.rs b/src/crates/execution/agent-tools/src/tool_execution_presentation.rs similarity index 100% rename from src/crates/agent-tools/src/tool_execution_presentation.rs rename to src/crates/execution/agent-tools/src/tool_execution_presentation.rs diff --git a/src/crates/agent-tools/src/tool_result_storage.rs b/src/crates/execution/agent-tools/src/tool_result_storage.rs similarity index 100% rename from src/crates/agent-tools/src/tool_result_storage.rs rename to src/crates/execution/agent-tools/src/tool_result_storage.rs diff --git a/src/crates/agent-tools/tests/tool_contracts.rs b/src/crates/execution/agent-tools/tests/tool_contracts.rs similarity index 100% rename from src/crates/agent-tools/tests/tool_contracts.rs rename to src/crates/execution/agent-tools/tests/tool_contracts.rs diff --git a/src/crates/harness/AGENTS.md b/src/crates/execution/harness/AGENTS.md similarity index 95% rename from src/crates/harness/AGENTS.md rename to src/crates/execution/harness/AGENTS.md index a675c1f1b..9fb6879de 100644 --- a/src/crates/harness/AGENTS.md +++ b/src/crates/execution/harness/AGENTS.md @@ -1,6 +1,6 @@ # harness Agent Guide -Scope: this guide applies to `src/crates/harness`. +Scope: this guide applies to `src/crates/execution/harness`. `bitfun-harness` owns provider-neutral workflow contracts, descriptors, plans, and registry wiring for multi-step workflows such as Deep Review, diff --git a/src/crates/harness/Cargo.toml b/src/crates/execution/harness/Cargo.toml similarity index 100% rename from src/crates/harness/Cargo.toml rename to src/crates/execution/harness/Cargo.toml diff --git a/src/crates/harness/src/lib.rs b/src/crates/execution/harness/src/lib.rs similarity index 100% rename from src/crates/harness/src/lib.rs rename to src/crates/execution/harness/src/lib.rs diff --git a/src/crates/harness/tests/registry.rs b/src/crates/execution/harness/tests/registry.rs similarity index 100% rename from src/crates/harness/tests/registry.rs rename to src/crates/execution/harness/tests/registry.rs diff --git a/src/crates/runtime-services/AGENTS.md b/src/crates/execution/runtime-services/AGENTS.md similarity index 93% rename from src/crates/runtime-services/AGENTS.md rename to src/crates/execution/runtime-services/AGENTS.md index 88b398f92..83b6e0423 100644 --- a/src/crates/runtime-services/AGENTS.md +++ b/src/crates/execution/runtime-services/AGENTS.md @@ -1,6 +1,6 @@ # runtime-services Agent Guide -Scope: this guide applies to `src/crates/runtime-services`. +Scope: this guide applies to `src/crates/execution/runtime-services`. `bitfun-runtime-services` owns typed runtime service assembly. It connects runtime-facing ports to injected providers without becoming a concrete platform diff --git a/src/crates/runtime-services/Cargo.toml b/src/crates/execution/runtime-services/Cargo.toml similarity index 85% rename from src/crates/runtime-services/Cargo.toml rename to src/crates/execution/runtime-services/Cargo.toml index 7852b4087..008b58841 100644 --- a/src/crates/runtime-services/Cargo.toml +++ b/src/crates/execution/runtime-services/Cargo.toml @@ -10,7 +10,7 @@ name = "bitfun_runtime_services" crate-type = ["rlib"] [dependencies] -bitfun-runtime-ports = { path = "../runtime-ports" } +bitfun-runtime-ports = { path = "../../contracts/runtime-ports" } async-trait = { workspace = true } thiserror = { workspace = true } diff --git a/src/crates/runtime-services/src/lib.rs b/src/crates/execution/runtime-services/src/lib.rs similarity index 100% rename from src/crates/runtime-services/src/lib.rs rename to src/crates/execution/runtime-services/src/lib.rs diff --git a/src/crates/runtime-services/src/test_support.rs b/src/crates/execution/runtime-services/src/test_support.rs similarity index 100% rename from src/crates/runtime-services/src/test_support.rs rename to src/crates/execution/runtime-services/src/test_support.rs diff --git a/src/crates/runtime-services/tests/runtime_services_contracts.rs b/src/crates/execution/runtime-services/tests/runtime_services_contracts.rs similarity index 100% rename from src/crates/runtime-services/tests/runtime_services_contracts.rs rename to src/crates/execution/runtime-services/tests/runtime_services_contracts.rs diff --git a/src/crates/tool-packs/AGENTS.md b/src/crates/execution/tool-packs/AGENTS.md similarity index 95% rename from src/crates/tool-packs/AGENTS.md rename to src/crates/execution/tool-packs/AGENTS.md index 6e0e1af5d..7c5b89424 100644 --- a/src/crates/tool-packs/AGENTS.md +++ b/src/crates/execution/tool-packs/AGENTS.md @@ -1,6 +1,6 @@ # tool-packs Agent Guide -Scope: this guide applies to `src/crates/tool-packs`. +Scope: this guide applies to `src/crates/execution/tool-packs`. `bitfun-tool-packs` owns tool feature-group scaffold metadata, the product tool provider group plan, and provider-group plan selection by id. It does not own diff --git a/src/crates/tool-packs/Cargo.toml b/src/crates/execution/tool-packs/Cargo.toml similarity index 100% rename from src/crates/tool-packs/Cargo.toml rename to src/crates/execution/tool-packs/Cargo.toml diff --git a/src/crates/tool-packs/src/lib.rs b/src/crates/execution/tool-packs/src/lib.rs similarity index 100% rename from src/crates/tool-packs/src/lib.rs rename to src/crates/execution/tool-packs/src/lib.rs diff --git a/src/crates/tool-runtime/AGENTS.md b/src/crates/execution/tool-runtime/AGENTS.md similarity index 94% rename from src/crates/tool-runtime/AGENTS.md rename to src/crates/execution/tool-runtime/AGENTS.md index 790545be2..09a57af97 100644 --- a/src/crates/tool-runtime/AGENTS.md +++ b/src/crates/execution/tool-runtime/AGENTS.md @@ -1,6 +1,6 @@ # tool-runtime Agent Guide -Scope: this guide applies to `src/crates/tool-runtime`. +Scope: this guide applies to `src/crates/execution/tool-runtime`. `tool-runtime` owns low-level reusable tool execution helpers such as filesystem and search utilities. It is not the product tool registry, permission model, or diff --git a/src/crates/tool-runtime/Cargo.toml b/src/crates/execution/tool-runtime/Cargo.toml similarity index 100% rename from src/crates/tool-runtime/Cargo.toml rename to src/crates/execution/tool-runtime/Cargo.toml diff --git a/src/crates/tool-runtime/src/fs/backend.rs b/src/crates/execution/tool-runtime/src/fs/backend.rs similarity index 100% rename from src/crates/tool-runtime/src/fs/backend.rs rename to src/crates/execution/tool-runtime/src/fs/backend.rs diff --git a/src/crates/tool-runtime/src/fs/delete_path.rs b/src/crates/execution/tool-runtime/src/fs/delete_path.rs similarity index 100% rename from src/crates/tool-runtime/src/fs/delete_path.rs rename to src/crates/execution/tool-runtime/src/fs/delete_path.rs diff --git a/src/crates/tool-runtime/src/fs/edit_file.rs b/src/crates/execution/tool-runtime/src/fs/edit_file.rs similarity index 100% rename from src/crates/tool-runtime/src/fs/edit_file.rs rename to src/crates/execution/tool-runtime/src/fs/edit_file.rs diff --git a/src/crates/tool-runtime/src/fs/list_dir.rs b/src/crates/execution/tool-runtime/src/fs/list_dir.rs similarity index 100% rename from src/crates/tool-runtime/src/fs/list_dir.rs rename to src/crates/execution/tool-runtime/src/fs/list_dir.rs diff --git a/src/crates/tool-runtime/src/fs/mod.rs b/src/crates/execution/tool-runtime/src/fs/mod.rs similarity index 100% rename from src/crates/tool-runtime/src/fs/mod.rs rename to src/crates/execution/tool-runtime/src/fs/mod.rs diff --git a/src/crates/tool-runtime/src/fs/read_file.rs b/src/crates/execution/tool-runtime/src/fs/read_file.rs similarity index 100% rename from src/crates/tool-runtime/src/fs/read_file.rs rename to src/crates/execution/tool-runtime/src/fs/read_file.rs diff --git a/src/crates/tool-runtime/src/fs/write_file.rs b/src/crates/execution/tool-runtime/src/fs/write_file.rs similarity index 100% rename from src/crates/tool-runtime/src/fs/write_file.rs rename to src/crates/execution/tool-runtime/src/fs/write_file.rs diff --git a/src/crates/tool-runtime/src/lib.rs b/src/crates/execution/tool-runtime/src/lib.rs similarity index 100% rename from src/crates/tool-runtime/src/lib.rs rename to src/crates/execution/tool-runtime/src/lib.rs diff --git a/src/crates/tool-runtime/src/search/glob_search.rs b/src/crates/execution/tool-runtime/src/search/glob_search.rs similarity index 100% rename from src/crates/tool-runtime/src/search/glob_search.rs rename to src/crates/execution/tool-runtime/src/search/glob_search.rs diff --git a/src/crates/tool-runtime/src/search/grep_search.rs b/src/crates/execution/tool-runtime/src/search/grep_search.rs similarity index 100% rename from src/crates/tool-runtime/src/search/grep_search.rs rename to src/crates/execution/tool-runtime/src/search/grep_search.rs diff --git a/src/crates/tool-runtime/src/search/mod.rs b/src/crates/execution/tool-runtime/src/search/mod.rs similarity index 100% rename from src/crates/tool-runtime/src/search/mod.rs rename to src/crates/execution/tool-runtime/src/search/mod.rs diff --git a/src/crates/tool-runtime/src/util/ansi_cleaner.rs b/src/crates/execution/tool-runtime/src/util/ansi_cleaner.rs similarity index 100% rename from src/crates/tool-runtime/src/util/ansi_cleaner.rs rename to src/crates/execution/tool-runtime/src/util/ansi_cleaner.rs diff --git a/src/crates/tool-runtime/src/util/mod.rs b/src/crates/execution/tool-runtime/src/util/mod.rs similarity index 100% rename from src/crates/tool-runtime/src/util/mod.rs rename to src/crates/execution/tool-runtime/src/util/mod.rs diff --git a/src/crates/tool-runtime/src/util/read_line_prefix.rs b/src/crates/execution/tool-runtime/src/util/read_line_prefix.rs similarity index 98% rename from src/crates/tool-runtime/src/util/read_line_prefix.rs rename to src/crates/execution/tool-runtime/src/util/read_line_prefix.rs index 32cbaac10..e7cafa58f 100644 --- a/src/crates/tool-runtime/src/util/read_line_prefix.rs +++ b/src/crates/execution/tool-runtime/src/util/read_line_prefix.rs @@ -54,8 +54,7 @@ fn line_has_read_prefix(line: &str) -> bool { #[cfg(test)] mod tests { use super::{ - all_lines_have_read_prefix, read_tool_output_to_file_content, - strip_read_line_number_prefix, + all_lines_have_read_prefix, read_tool_output_to_file_content, strip_read_line_number_prefix, }; #[test] diff --git a/src/crates/tool-runtime/src/util/string.rs b/src/crates/execution/tool-runtime/src/util/string.rs similarity index 100% rename from src/crates/tool-runtime/src/util/string.rs rename to src/crates/execution/tool-runtime/src/util/string.rs diff --git a/src/crates/tool-runtime/tests/tool_io_contracts.rs b/src/crates/execution/tool-runtime/tests/tool_io_contracts.rs similarity index 100% rename from src/crates/tool-runtime/tests/tool_io_contracts.rs rename to src/crates/execution/tool-runtime/tests/tool_io_contracts.rs diff --git a/src/crates/facade/AGENTS-CN.md b/src/crates/facade/AGENTS-CN.md new file mode 100644 index 000000000..3048b5ba5 --- /dev/null +++ b/src/crates/facade/AGENTS-CN.md @@ -0,0 +1,26 @@ +**中文** | [English](AGENTS.md) + +# 门面与产品组装层 + +本层负责面向旧消费者的兼容导出和产品组装。它选择产品能力、交付形态和 provider 注册,并把下层 owner 接线起来。本层不应成为执行原语、服务实现、产品领域策略或协议实现的长期 owner。 + +## 模块 + +| Crate | 职责 | 本地文档 | +|---|---|---| +| `core` | 旧 `bitfun-core` facade、兼容 import 和 product-full 组装 | [AGENTS.md](core/AGENTS.md) | + +## 放置规则 + +- 旧 import 兼容、product-full 接线和 assembly shim 放在这里。 +- 与交付形态或旧 `bitfun-core` 兼容绑定的 provider 选择和注册可以放在这里。 +- 稳定 owner 逻辑应下移到 `contracts`、`execution`、`services`、`product` 或 `integrations`。 +- 保持现有 public import path,除非迁移明确移除它并补充兼容说明和测试。 +- facade 增量应小而可追踪;大块功能增长通常说明 owner 没有充分下移。 + +## 依赖边界 + +- `facade/core` 可以依赖下层 owner 来组装当前产品 runtime。 +- facade 可以依赖低层 integration adapter,但不实现协议序列化、认证、transport 或平台细节。 +- 产品入口型协议 surface 可以调用 facade;低层 integration adapter 不应调用 facade。 +- 避免在 facade 中直接使用宿主 API;Tauri 支持必须保持 feature-gated,并尽可能由 app 或 adapter 拥有。 diff --git a/src/crates/facade/AGENTS.md b/src/crates/facade/AGENTS.md new file mode 100644 index 000000000..7c81ffb4c --- /dev/null +++ b/src/crates/facade/AGENTS.md @@ -0,0 +1,39 @@ +[中文](AGENTS-CN.md) | **English** + +# Facade Layer + +This layer owns compatibility exports and product assembly for legacy consumers. +It chooses product capabilities, delivery profiles, and provider registrations, +then wires lower layers together. It should not become the long-term owner of +new execution primitives, service implementations, product-domain policy, or +integration protocol behavior. + +## Modules + +| Crate | Responsibility | Local doc | +|---|---|---| +| `core` | Legacy `bitfun-core` facade, compatibility imports, and product-full assembly | [AGENTS.md](core/AGENTS.md) | + +## Placement Rules + +- Put old import compatibility, product-full wiring, and assembly shims here. +- Put provider selection and registration here when the decision is tied to a + delivery profile or legacy `bitfun-core` compatibility. +- Move stable owner logic to `contracts`, `execution`, `services`, `product`, or + `integrations` when a lower layer can own it. +- Preserve existing public import paths unless a migration explicitly removes + them with compatibility notes and tests. +- Keep facade additions small and traceable; broad feature growth here is a sign + that ownership has not been pushed down far enough. + +## Dependency Boundaries + +- `facade/core` may depend on lower owner layers to assemble the current product + runtime. +- Facade may depend on integration adapters, but should not implement their + protocol serialization, authentication, transport, or platform details. +- Avoid direct host APIs in facade code; Tauri support must remain feature-gated + and should be owned by app or adapter code when possible. +- Product-facing protocol surfaces may call the facade, but low-level + integration adapters must not. The facade should not absorb protocol + implementation details. diff --git a/src/crates/core/AGENTS-CN.md b/src/crates/facade/core/AGENTS-CN.md similarity index 81% rename from src/crates/core/AGENTS-CN.md rename to src/crates/facade/core/AGENTS-CN.md index 091d608b8..d8aa57bad 100644 --- a/src/crates/core/AGENTS-CN.md +++ b/src/crates/facade/core/AGENTS-CN.md @@ -4,7 +4,7 @@ ## 适用范围 -本文件适用于 `src/crates/core`。仓库级规则请看顶层 `AGENTS.md`;进入更具体目录后,优先遵循更近的局部指南。 +本文件适用于 `src/crates/facade/core`。仓库级规则请看顶层 `AGENTS.md`;进入更具体目录后,优先遵循更近的局部指南。 ## 定位 @@ -17,6 +17,7 @@ - `src/agentic/`:agents、prompts、tools、sessions、execution、persistence - `src/service/`:config、filesystem、terminal、git、LSP、MCP、remote connect、project context、AI memory - `src/infrastructure/`:AI clients、app paths、event system、storage、debug log server +- `src/product_runtime/`:product-full 兼容 adapter 与 runtime service provider wiring Agent 运行时心智模型: @@ -53,18 +54,18 @@ SessionManager -> Session -> DialogTurn -> ModelRound - `docs/architecture/core-decomposition.md` - `docs/architecture/agent-runtime-services-design.md` -- `src/crates/agent-runtime/AGENTS.md` -- `src/crates/agent-tools/AGENTS.md` -- `src/crates/harness/AGENTS.md` -- `src/crates/product-domains/AGENTS.md` -- `src/crates/runtime-ports/` 与 `src/crates/runtime-services/` 源码说明 -- `src/crates/services-core/AGENTS.md` -- `src/crates/services-integrations/AGENTS.md` -- `src/crates/tool-packs/AGENTS.md` +- `src/crates/execution/agent-runtime/AGENTS.md` +- `src/crates/execution/agent-tools/AGENTS.md` +- `src/crates/execution/harness/AGENTS.md` +- `src/crates/product/product-domains/AGENTS.md` +- `src/crates/contracts/runtime-ports/` 与 `src/crates/execution/runtime-services/` 源码说明 +- `src/crates/services/services-core/AGENTS.md` +- `src/crates/services/services-integrations/AGENTS.md` +- `src/crates/execution/tool-packs/AGENTS.md` 部分子目录已有更细指南: -- `src/crates/ai-adapters/AGENTS.md` +- `src/crates/integrations/ai-adapters/AGENTS.md` - `src/agentic/execution/AGENTS.md` - `src/agentic/deep_review/AGENTS.md` diff --git a/src/crates/core/AGENTS.md b/src/crates/facade/core/AGENTS.md similarity index 84% rename from src/crates/core/AGENTS.md rename to src/crates/facade/core/AGENTS.md index a82e180cd..3f164db7f 100644 --- a/src/crates/core/AGENTS.md +++ b/src/crates/facade/core/AGENTS.md @@ -4,7 +4,7 @@ ## Scope -This file applies to `src/crates/core`. Use the top-level `AGENTS.md` for +This file applies to `src/crates/facade/core`. Use the top-level `AGENTS.md` for repository-wide rules and the nearest narrower guide when one exists. ## Role @@ -19,6 +19,7 @@ Main areas: - `src/agentic/`: agents, prompts, tools, sessions, execution, persistence - `src/service/`: config, filesystem, terminal, git, LSP, MCP, remote connect, project context, AI memory - `src/infrastructure/`: AI clients, app paths, event system, storage, debug log server +- `src/product_runtime/`: product-full compatibility adapters and runtime service provider wiring Agent runtime mental model: @@ -72,18 +73,18 @@ Use these files for ownership details instead of expanding this guide: - `docs/architecture/core-decomposition.md` - `docs/architecture/agent-runtime-services-design.md` -- `src/crates/agent-runtime/AGENTS.md` -- `src/crates/agent-tools/AGENTS.md` -- `src/crates/harness/AGENTS.md` -- `src/crates/product-domains/AGENTS.md` -- `src/crates/runtime-ports/` and `src/crates/runtime-services/` source docs -- `src/crates/services-core/AGENTS.md` -- `src/crates/services-integrations/AGENTS.md` -- `src/crates/tool-packs/AGENTS.md` +- `src/crates/execution/agent-runtime/AGENTS.md` +- `src/crates/execution/agent-tools/AGENTS.md` +- `src/crates/execution/harness/AGENTS.md` +- `src/crates/product/product-domains/AGENTS.md` +- `src/crates/contracts/runtime-ports/` and `src/crates/execution/runtime-services/` source docs +- `src/crates/services/services-core/AGENTS.md` +- `src/crates/services/services-integrations/AGENTS.md` +- `src/crates/execution/tool-packs/AGENTS.md` Narrower local guides already exist for some subtrees: -- `src/crates/ai-adapters/AGENTS.md` +- `src/crates/integrations/ai-adapters/AGENTS.md` - `src/agentic/execution/AGENTS.md` - `src/agentic/deep_review/AGENTS.md` diff --git a/src/crates/core/Cargo.toml b/src/crates/facade/core/Cargo.toml similarity index 80% rename from src/crates/core/Cargo.toml rename to src/crates/facade/core/Cargo.toml index 5b6e7312f..4e6ab831d 100644 --- a/src/crates/core/Cargo.toml +++ b/src/crates/facade/core/Cargo.toml @@ -73,40 +73,40 @@ rmcp = { workspace = true, features = [ sse-stream = { workspace = true, optional = true } # Shared AI protocol adapters -bitfun-ai-adapters = { path = "../ai-adapters" } +bitfun-ai-adapters = { path = "../../integrations/ai-adapters" } # Lightweight agent stream processing -bitfun-agent-stream = { path = "../agent-stream" } +bitfun-agent-stream = { path = "../../execution/agent-stream" } # Agent runtime owner contracts -bitfun-agent-runtime = { path = "../agent-runtime" } +bitfun-agent-runtime = { path = "../../execution/agent-runtime" } # Harness workflow contracts -bitfun-harness = { path = "../harness" } +bitfun-harness = { path = "../../execution/harness" } # Product capability pack contracts -bitfun-product-capabilities = { path = "../product-capabilities", default-features = false, optional = true } +bitfun-product-capabilities = { path = "../../product/product-capabilities", default-features = false, optional = true } # Agent tool contracts -bitfun-agent-tools = { path = "../agent-tools" } +bitfun-agent-tools = { path = "../../execution/agent-tools" } # Tool pack provider plan -bitfun-tool-packs = { path = "../tool-packs", default-features = false, optional = true } +bitfun-tool-packs = { path = "../../execution/tool-packs", default-features = false, optional = true } # Core service owner crate -bitfun-services-core = { path = "../services-core" } +bitfun-services-core = { path = "../../services/services-core" } # Integration service owner crate -bitfun-services-integrations = { path = "../services-integrations", default-features = false, features = ["remote-ssh"] } +bitfun-services-integrations = { path = "../../services/services-integrations", default-features = false, features = ["remote-ssh"] } # Product domain owner crate -bitfun-product-domains = { path = "../product-domains", default-features = false, optional = true } +bitfun-product-domains = { path = "../../product/product-domains", default-features = false, optional = true } # Tool runtime -tool-runtime = { path = "../tool-runtime", optional = true } +tool-runtime = { path = "../../execution/tool-runtime", optional = true } # terminal -terminal-core = { path = "../terminal" } +terminal-core = { path = "../../services/terminal" } # I18n internationalization fluent-bundle = { workspace = true } @@ -137,16 +137,16 @@ shellexpand = { workspace = true, optional = true } ssh_config = { workspace = true, optional = true } # Relay server shared library (embedded relay reuses standalone relay logic) -bitfun-relay-server = { path = "../../apps/relay-server", optional = true } +bitfun-relay-server = { path = "../../../apps/relay-server", optional = true } # Event layer dependency (lowest layer) -bitfun-core-types = { path = "../core-types" } -bitfun-events = { path = "../events" } -bitfun-runtime-ports = { path = "../runtime-ports" } -bitfun-runtime-services = { path = "../runtime-services", optional = true } +bitfun-core-types = { path = "../../contracts/core-types" } +bitfun-events = { path = "../../contracts/events" } +bitfun-runtime-ports = { path = "../../contracts/runtime-ports" } +bitfun-runtime-services = { path = "../../execution/runtime-services", optional = true } # Transport layer dependency -bitfun-transport = { path = "../transport" } +bitfun-transport = { path = "../../integrations/transport" } # Tauri dependency (optional, enabled only when needed) tauri = { workspace = true, optional = true } diff --git a/src/crates/core/build.rs b/src/crates/facade/core/build.rs similarity index 99% rename from src/crates/core/build.rs rename to src/crates/facade/core/build.rs index 041895cae..60b0229bc 100644 --- a/src/crates/core/build.rs +++ b/src/crates/facade/core/build.rs @@ -114,7 +114,7 @@ fn embed_agents_prompt_data() -> Result<(), Box> { println!("cargo:rerun-if-changed=src/agentic/agents/prompts"); println!("cargo:rerun-if-changed=src/agentic/prompts"); - // Get CARGO_MANIFEST_DIR (i.e. crates/core directory) + // Get CARGO_MANIFEST_DIR (i.e. src/crates/facade/core directory) let manifest_dir = std::env::var("CARGO_MANIFEST_DIR")?; let mut prompts = HashMap::new(); diff --git a/src/crates/core/builtin_playbooks/browser_data_extraction.yaml b/src/crates/facade/core/builtin_playbooks/browser_data_extraction.yaml similarity index 100% rename from src/crates/core/builtin_playbooks/browser_data_extraction.yaml rename to src/crates/facade/core/builtin_playbooks/browser_data_extraction.yaml diff --git a/src/crates/core/builtin_playbooks/browser_form_fill.yaml b/src/crates/facade/core/builtin_playbooks/browser_form_fill.yaml similarity index 100% rename from src/crates/core/builtin_playbooks/browser_form_fill.yaml rename to src/crates/facade/core/builtin_playbooks/browser_form_fill.yaml diff --git a/src/crates/core/builtin_playbooks/browser_screenshot.yaml b/src/crates/facade/core/builtin_playbooks/browser_screenshot.yaml similarity index 100% rename from src/crates/core/builtin_playbooks/browser_screenshot.yaml rename to src/crates/facade/core/builtin_playbooks/browser_screenshot.yaml diff --git a/src/crates/core/builtin_playbooks/desktop_app_automation.yaml b/src/crates/facade/core/builtin_playbooks/desktop_app_automation.yaml similarity index 100% rename from src/crates/core/builtin_playbooks/desktop_app_automation.yaml rename to src/crates/facade/core/builtin_playbooks/desktop_app_automation.yaml diff --git a/src/crates/core/builtin_playbooks/im_send_message.yaml b/src/crates/facade/core/builtin_playbooks/im_send_message.yaml similarity index 100% rename from src/crates/core/builtin_playbooks/im_send_message.yaml rename to src/crates/facade/core/builtin_playbooks/im_send_message.yaml diff --git a/src/crates/core/builtin_skills/agent-browser/SKILL.md b/src/crates/facade/core/builtin_skills/agent-browser/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/SKILL.md rename to src/crates/facade/core/builtin_skills/agent-browser/SKILL.md diff --git a/src/crates/core/builtin_skills/agent-browser/references/authentication.md b/src/crates/facade/core/builtin_skills/agent-browser/references/authentication.md similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/references/authentication.md rename to src/crates/facade/core/builtin_skills/agent-browser/references/authentication.md diff --git a/src/crates/core/builtin_skills/agent-browser/references/commands.md b/src/crates/facade/core/builtin_skills/agent-browser/references/commands.md similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/references/commands.md rename to src/crates/facade/core/builtin_skills/agent-browser/references/commands.md diff --git a/src/crates/core/builtin_skills/agent-browser/references/profiling.md b/src/crates/facade/core/builtin_skills/agent-browser/references/profiling.md similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/references/profiling.md rename to src/crates/facade/core/builtin_skills/agent-browser/references/profiling.md diff --git a/src/crates/core/builtin_skills/agent-browser/references/proxy-support.md b/src/crates/facade/core/builtin_skills/agent-browser/references/proxy-support.md similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/references/proxy-support.md rename to src/crates/facade/core/builtin_skills/agent-browser/references/proxy-support.md diff --git a/src/crates/core/builtin_skills/agent-browser/references/session-management.md b/src/crates/facade/core/builtin_skills/agent-browser/references/session-management.md similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/references/session-management.md rename to src/crates/facade/core/builtin_skills/agent-browser/references/session-management.md diff --git a/src/crates/core/builtin_skills/agent-browser/references/snapshot-refs.md b/src/crates/facade/core/builtin_skills/agent-browser/references/snapshot-refs.md similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/references/snapshot-refs.md rename to src/crates/facade/core/builtin_skills/agent-browser/references/snapshot-refs.md diff --git a/src/crates/core/builtin_skills/agent-browser/references/video-recording.md b/src/crates/facade/core/builtin_skills/agent-browser/references/video-recording.md similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/references/video-recording.md rename to src/crates/facade/core/builtin_skills/agent-browser/references/video-recording.md diff --git a/src/crates/core/builtin_skills/agent-browser/templates/authenticated-session.sh b/src/crates/facade/core/builtin_skills/agent-browser/templates/authenticated-session.sh similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/templates/authenticated-session.sh rename to src/crates/facade/core/builtin_skills/agent-browser/templates/authenticated-session.sh diff --git a/src/crates/core/builtin_skills/agent-browser/templates/capture-workflow.sh b/src/crates/facade/core/builtin_skills/agent-browser/templates/capture-workflow.sh similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/templates/capture-workflow.sh rename to src/crates/facade/core/builtin_skills/agent-browser/templates/capture-workflow.sh diff --git a/src/crates/core/builtin_skills/agent-browser/templates/form-automation.sh b/src/crates/facade/core/builtin_skills/agent-browser/templates/form-automation.sh similarity index 100% rename from src/crates/core/builtin_skills/agent-browser/templates/form-automation.sh rename to src/crates/facade/core/builtin_skills/agent-browser/templates/form-automation.sh diff --git a/src/crates/core/builtin_skills/docx/LICENSE.txt b/src/crates/facade/core/builtin_skills/docx/LICENSE.txt similarity index 100% rename from src/crates/core/builtin_skills/docx/LICENSE.txt rename to src/crates/facade/core/builtin_skills/docx/LICENSE.txt diff --git a/src/crates/core/builtin_skills/docx/SKILL.md b/src/crates/facade/core/builtin_skills/docx/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/docx/SKILL.md rename to src/crates/facade/core/builtin_skills/docx/SKILL.md diff --git a/src/crates/core/builtin_skills/docx/scripts/__init__.py b/src/crates/facade/core/builtin_skills/docx/scripts/__init__.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/__init__.py rename to src/crates/facade/core/builtin_skills/docx/scripts/__init__.py diff --git a/src/crates/core/builtin_skills/docx/scripts/accept_changes.py b/src/crates/facade/core/builtin_skills/docx/scripts/accept_changes.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/accept_changes.py rename to src/crates/facade/core/builtin_skills/docx/scripts/accept_changes.py diff --git a/src/crates/core/builtin_skills/docx/scripts/comment.py b/src/crates/facade/core/builtin_skills/docx/scripts/comment.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/comment.py rename to src/crates/facade/core/builtin_skills/docx/scripts/comment.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/helpers/__init__.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/helpers/__init__.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/helpers/__init__.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/helpers/__init__.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/helpers/merge_runs.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/helpers/merge_runs.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/helpers/merge_runs.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/helpers/merge_runs.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/helpers/simplify_redlines.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/helpers/simplify_redlines.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/helpers/simplify_redlines.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/helpers/simplify_redlines.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/pack.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/pack.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/pack.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/pack.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/mce/mc.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/mce/mc.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/mce/mc.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/mce/mc.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd b/src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd rename to src/crates/facade/core/builtin_skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd diff --git a/src/crates/core/builtin_skills/docx/scripts/office/soffice.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/soffice.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/soffice.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/soffice.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/unpack.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/unpack.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/unpack.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/unpack.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/validate.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/validate.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/validate.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/validate.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/validators/__init__.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/validators/__init__.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/validators/__init__.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/validators/__init__.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/validators/base.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/validators/base.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/validators/base.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/validators/base.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/validators/docx.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/validators/docx.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/validators/docx.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/validators/docx.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/validators/pptx.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/validators/pptx.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/validators/pptx.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/validators/pptx.py diff --git a/src/crates/core/builtin_skills/docx/scripts/office/validators/redlining.py b/src/crates/facade/core/builtin_skills/docx/scripts/office/validators/redlining.py similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/office/validators/redlining.py rename to src/crates/facade/core/builtin_skills/docx/scripts/office/validators/redlining.py diff --git a/src/crates/core/builtin_skills/docx/scripts/templates/comments.xml b/src/crates/facade/core/builtin_skills/docx/scripts/templates/comments.xml similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/templates/comments.xml rename to src/crates/facade/core/builtin_skills/docx/scripts/templates/comments.xml diff --git a/src/crates/core/builtin_skills/docx/scripts/templates/commentsExtended.xml b/src/crates/facade/core/builtin_skills/docx/scripts/templates/commentsExtended.xml similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/templates/commentsExtended.xml rename to src/crates/facade/core/builtin_skills/docx/scripts/templates/commentsExtended.xml diff --git a/src/crates/core/builtin_skills/docx/scripts/templates/commentsExtensible.xml b/src/crates/facade/core/builtin_skills/docx/scripts/templates/commentsExtensible.xml similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/templates/commentsExtensible.xml rename to src/crates/facade/core/builtin_skills/docx/scripts/templates/commentsExtensible.xml diff --git a/src/crates/core/builtin_skills/docx/scripts/templates/commentsIds.xml b/src/crates/facade/core/builtin_skills/docx/scripts/templates/commentsIds.xml similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/templates/commentsIds.xml rename to src/crates/facade/core/builtin_skills/docx/scripts/templates/commentsIds.xml diff --git a/src/crates/core/builtin_skills/docx/scripts/templates/people.xml b/src/crates/facade/core/builtin_skills/docx/scripts/templates/people.xml similarity index 100% rename from src/crates/core/builtin_skills/docx/scripts/templates/people.xml rename to src/crates/facade/core/builtin_skills/docx/scripts/templates/people.xml diff --git a/src/crates/core/builtin_skills/find-skills/SKILL.md b/src/crates/facade/core/builtin_skills/find-skills/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/find-skills/SKILL.md rename to src/crates/facade/core/builtin_skills/find-skills/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-autoplan/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-autoplan/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-autoplan/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-autoplan/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-cso/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-cso/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-cso/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-cso/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-design-consultation/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-design-consultation/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-design-consultation/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-design-consultation/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-design-review/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-design-review/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-design-review/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-design-review/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-document-release/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-document-release/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-document-release/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-document-release/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-investigate/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-investigate/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-investigate/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-investigate/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-office-hours/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-office-hours/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-office-hours/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-office-hours/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-plan-ceo-review/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-plan-ceo-review/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-plan-ceo-review/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-plan-ceo-review/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-plan-design-review/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-plan-design-review/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-plan-design-review/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-plan-design-review/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-plan-eng-review/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-plan-eng-review/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-plan-eng-review/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-plan-eng-review/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-qa-only/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-qa-only/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-qa-only/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-qa-only/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-qa/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-qa/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-qa/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-qa/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-retro/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-retro/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-retro/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-retro/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-review/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-review/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-review/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-review/SKILL.md diff --git a/src/crates/core/builtin_skills/gstack-ship/SKILL.md b/src/crates/facade/core/builtin_skills/gstack-ship/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/gstack-ship/SKILL.md rename to src/crates/facade/core/builtin_skills/gstack-ship/SKILL.md diff --git a/src/crates/core/builtin_skills/pdf/LICENSE.txt b/src/crates/facade/core/builtin_skills/pdf/LICENSE.txt similarity index 100% rename from src/crates/core/builtin_skills/pdf/LICENSE.txt rename to src/crates/facade/core/builtin_skills/pdf/LICENSE.txt diff --git a/src/crates/core/builtin_skills/pdf/SKILL.md b/src/crates/facade/core/builtin_skills/pdf/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/pdf/SKILL.md rename to src/crates/facade/core/builtin_skills/pdf/SKILL.md diff --git a/src/crates/core/builtin_skills/pdf/forms.md b/src/crates/facade/core/builtin_skills/pdf/forms.md similarity index 100% rename from src/crates/core/builtin_skills/pdf/forms.md rename to src/crates/facade/core/builtin_skills/pdf/forms.md diff --git a/src/crates/core/builtin_skills/pdf/reference.md b/src/crates/facade/core/builtin_skills/pdf/reference.md similarity index 100% rename from src/crates/core/builtin_skills/pdf/reference.md rename to src/crates/facade/core/builtin_skills/pdf/reference.md diff --git a/src/crates/core/builtin_skills/pdf/scripts/check_bounding_boxes.py b/src/crates/facade/core/builtin_skills/pdf/scripts/check_bounding_boxes.py similarity index 100% rename from src/crates/core/builtin_skills/pdf/scripts/check_bounding_boxes.py rename to src/crates/facade/core/builtin_skills/pdf/scripts/check_bounding_boxes.py diff --git a/src/crates/core/builtin_skills/pdf/scripts/check_fillable_fields.py b/src/crates/facade/core/builtin_skills/pdf/scripts/check_fillable_fields.py similarity index 100% rename from src/crates/core/builtin_skills/pdf/scripts/check_fillable_fields.py rename to src/crates/facade/core/builtin_skills/pdf/scripts/check_fillable_fields.py diff --git a/src/crates/core/builtin_skills/pdf/scripts/convert_pdf_to_images.py b/src/crates/facade/core/builtin_skills/pdf/scripts/convert_pdf_to_images.py similarity index 100% rename from src/crates/core/builtin_skills/pdf/scripts/convert_pdf_to_images.py rename to src/crates/facade/core/builtin_skills/pdf/scripts/convert_pdf_to_images.py diff --git a/src/crates/core/builtin_skills/pdf/scripts/create_validation_image.py b/src/crates/facade/core/builtin_skills/pdf/scripts/create_validation_image.py similarity index 100% rename from src/crates/core/builtin_skills/pdf/scripts/create_validation_image.py rename to src/crates/facade/core/builtin_skills/pdf/scripts/create_validation_image.py diff --git a/src/crates/core/builtin_skills/pdf/scripts/extract_form_field_info.py b/src/crates/facade/core/builtin_skills/pdf/scripts/extract_form_field_info.py similarity index 100% rename from src/crates/core/builtin_skills/pdf/scripts/extract_form_field_info.py rename to src/crates/facade/core/builtin_skills/pdf/scripts/extract_form_field_info.py diff --git a/src/crates/core/builtin_skills/pdf/scripts/extract_form_structure.py b/src/crates/facade/core/builtin_skills/pdf/scripts/extract_form_structure.py similarity index 100% rename from src/crates/core/builtin_skills/pdf/scripts/extract_form_structure.py rename to src/crates/facade/core/builtin_skills/pdf/scripts/extract_form_structure.py diff --git a/src/crates/core/builtin_skills/pdf/scripts/fill_fillable_fields.py b/src/crates/facade/core/builtin_skills/pdf/scripts/fill_fillable_fields.py similarity index 100% rename from src/crates/core/builtin_skills/pdf/scripts/fill_fillable_fields.py rename to src/crates/facade/core/builtin_skills/pdf/scripts/fill_fillable_fields.py diff --git a/src/crates/core/builtin_skills/pdf/scripts/fill_pdf_form_with_annotations.py b/src/crates/facade/core/builtin_skills/pdf/scripts/fill_pdf_form_with_annotations.py similarity index 100% rename from src/crates/core/builtin_skills/pdf/scripts/fill_pdf_form_with_annotations.py rename to src/crates/facade/core/builtin_skills/pdf/scripts/fill_pdf_form_with_annotations.py diff --git a/src/crates/core/builtin_skills/pptx/LICENSE.txt b/src/crates/facade/core/builtin_skills/pptx/LICENSE.txt similarity index 100% rename from src/crates/core/builtin_skills/pptx/LICENSE.txt rename to src/crates/facade/core/builtin_skills/pptx/LICENSE.txt diff --git a/src/crates/core/builtin_skills/pptx/SKILL.md b/src/crates/facade/core/builtin_skills/pptx/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/pptx/SKILL.md rename to src/crates/facade/core/builtin_skills/pptx/SKILL.md diff --git a/src/crates/core/builtin_skills/pptx/editing.md b/src/crates/facade/core/builtin_skills/pptx/editing.md similarity index 100% rename from src/crates/core/builtin_skills/pptx/editing.md rename to src/crates/facade/core/builtin_skills/pptx/editing.md diff --git a/src/crates/core/builtin_skills/pptx/pptxgenjs.md b/src/crates/facade/core/builtin_skills/pptx/pptxgenjs.md similarity index 100% rename from src/crates/core/builtin_skills/pptx/pptxgenjs.md rename to src/crates/facade/core/builtin_skills/pptx/pptxgenjs.md diff --git a/src/crates/core/builtin_skills/pptx/scripts/__init__.py b/src/crates/facade/core/builtin_skills/pptx/scripts/__init__.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/__init__.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/__init__.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/add_slide.py b/src/crates/facade/core/builtin_skills/pptx/scripts/add_slide.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/add_slide.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/add_slide.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/clean.py b/src/crates/facade/core/builtin_skills/pptx/scripts/clean.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/clean.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/clean.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/helpers/__init__.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/helpers/__init__.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/helpers/__init__.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/helpers/__init__.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/helpers/merge_runs.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/helpers/merge_runs.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/helpers/merge_runs.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/helpers/merge_runs.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/helpers/simplify_redlines.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/helpers/simplify_redlines.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/helpers/simplify_redlines.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/helpers/simplify_redlines.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/pack.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/pack.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/pack.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/pack.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/mce/mc.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/mce/mc.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/mce/mc.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/mce/mc.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd b/src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/soffice.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/soffice.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/soffice.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/soffice.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/unpack.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/unpack.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/unpack.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/unpack.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/validate.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/validate.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/validate.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/validate.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/validators/__init__.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/__init__.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/validators/__init__.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/__init__.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/validators/base.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/base.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/validators/base.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/base.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/validators/docx.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/docx.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/validators/docx.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/docx.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/validators/pptx.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/pptx.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/validators/pptx.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/pptx.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/office/validators/redlining.py b/src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/redlining.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/office/validators/redlining.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/office/validators/redlining.py diff --git a/src/crates/core/builtin_skills/pptx/scripts/thumbnail.py b/src/crates/facade/core/builtin_skills/pptx/scripts/thumbnail.py similarity index 100% rename from src/crates/core/builtin_skills/pptx/scripts/thumbnail.py rename to src/crates/facade/core/builtin_skills/pptx/scripts/thumbnail.py diff --git a/src/crates/core/builtin_skills/writing-skills/SKILL.md b/src/crates/facade/core/builtin_skills/writing-skills/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/writing-skills/SKILL.md rename to src/crates/facade/core/builtin_skills/writing-skills/SKILL.md diff --git a/src/crates/core/builtin_skills/writing-skills/anthropic-best-practices.md b/src/crates/facade/core/builtin_skills/writing-skills/anthropic-best-practices.md similarity index 100% rename from src/crates/core/builtin_skills/writing-skills/anthropic-best-practices.md rename to src/crates/facade/core/builtin_skills/writing-skills/anthropic-best-practices.md diff --git a/src/crates/core/builtin_skills/writing-skills/examples/CLAUDE_MD_TESTING.md b/src/crates/facade/core/builtin_skills/writing-skills/examples/CLAUDE_MD_TESTING.md similarity index 100% rename from src/crates/core/builtin_skills/writing-skills/examples/CLAUDE_MD_TESTING.md rename to src/crates/facade/core/builtin_skills/writing-skills/examples/CLAUDE_MD_TESTING.md diff --git a/src/crates/core/builtin_skills/writing-skills/graphviz-conventions.dot b/src/crates/facade/core/builtin_skills/writing-skills/graphviz-conventions.dot similarity index 100% rename from src/crates/core/builtin_skills/writing-skills/graphviz-conventions.dot rename to src/crates/facade/core/builtin_skills/writing-skills/graphviz-conventions.dot diff --git a/src/crates/core/builtin_skills/writing-skills/persuasion-principles.md b/src/crates/facade/core/builtin_skills/writing-skills/persuasion-principles.md similarity index 100% rename from src/crates/core/builtin_skills/writing-skills/persuasion-principles.md rename to src/crates/facade/core/builtin_skills/writing-skills/persuasion-principles.md diff --git a/src/crates/core/builtin_skills/writing-skills/render-graphs.js b/src/crates/facade/core/builtin_skills/writing-skills/render-graphs.js similarity index 100% rename from src/crates/core/builtin_skills/writing-skills/render-graphs.js rename to src/crates/facade/core/builtin_skills/writing-skills/render-graphs.js diff --git a/src/crates/core/builtin_skills/writing-skills/testing-skills-with-subagents.md b/src/crates/facade/core/builtin_skills/writing-skills/testing-skills-with-subagents.md similarity index 100% rename from src/crates/core/builtin_skills/writing-skills/testing-skills-with-subagents.md rename to src/crates/facade/core/builtin_skills/writing-skills/testing-skills-with-subagents.md diff --git a/src/crates/core/builtin_skills/xlsx/LICENSE.txt b/src/crates/facade/core/builtin_skills/xlsx/LICENSE.txt similarity index 100% rename from src/crates/core/builtin_skills/xlsx/LICENSE.txt rename to src/crates/facade/core/builtin_skills/xlsx/LICENSE.txt diff --git a/src/crates/core/builtin_skills/xlsx/SKILL.md b/src/crates/facade/core/builtin_skills/xlsx/SKILL.md similarity index 100% rename from src/crates/core/builtin_skills/xlsx/SKILL.md rename to src/crates/facade/core/builtin_skills/xlsx/SKILL.md diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/helpers/__init__.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/helpers/__init__.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/helpers/__init__.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/helpers/__init__.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/helpers/merge_runs.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/helpers/merge_runs.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/helpers/merge_runs.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/helpers/merge_runs.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/helpers/simplify_redlines.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/helpers/simplify_redlines.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/helpers/simplify_redlines.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/helpers/simplify_redlines.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/pack.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/pack.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/pack.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/pack.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/mce/mc.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/mce/mc.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/mce/mc.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/mce/mc.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/soffice.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/soffice.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/soffice.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/soffice.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/unpack.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/unpack.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/unpack.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/unpack.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/validate.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/validate.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/validate.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/validate.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/validators/__init__.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/__init__.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/validators/__init__.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/__init__.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/validators/base.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/base.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/validators/base.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/base.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/validators/docx.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/docx.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/validators/docx.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/docx.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/validators/pptx.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/pptx.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/validators/pptx.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/pptx.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/office/validators/redlining.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/redlining.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/office/validators/redlining.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/office/validators/redlining.py diff --git a/src/crates/core/builtin_skills/xlsx/scripts/recalc.py b/src/crates/facade/core/builtin_skills/xlsx/scripts/recalc.py similarity index 100% rename from src/crates/core/builtin_skills/xlsx/scripts/recalc.py rename to src/crates/facade/core/builtin_skills/xlsx/scripts/recalc.py diff --git a/src/crates/core/locales/en-US.ftl b/src/crates/facade/core/locales/en-US.ftl similarity index 100% rename from src/crates/core/locales/en-US.ftl rename to src/crates/facade/core/locales/en-US.ftl diff --git a/src/crates/core/locales/zh-CN.ftl b/src/crates/facade/core/locales/zh-CN.ftl similarity index 100% rename from src/crates/core/locales/zh-CN.ftl rename to src/crates/facade/core/locales/zh-CN.ftl diff --git a/src/crates/core/locales/zh-TW.ftl b/src/crates/facade/core/locales/zh-TW.ftl similarity index 100% rename from src/crates/core/locales/zh-TW.ftl rename to src/crates/facade/core/locales/zh-TW.ftl diff --git a/src/crates/core/src/agentic/agents/citation_renumber.rs b/src/crates/facade/core/src/agentic/agents/citation_renumber.rs similarity index 100% rename from src/crates/core/src/agentic/agents/citation_renumber.rs rename to src/crates/facade/core/src/agentic/agents/citation_renumber.rs diff --git a/src/crates/core/src/agentic/agents/definitions/custom/mod.rs b/src/crates/facade/core/src/agentic/agents/definitions/custom/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/custom/mod.rs rename to src/crates/facade/core/src/agentic/agents/definitions/custom/mod.rs diff --git a/src/crates/core/src/agentic/agents/definitions/custom/subagent.rs b/src/crates/facade/core/src/agentic/agents/definitions/custom/subagent.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/custom/subagent.rs rename to src/crates/facade/core/src/agentic/agents/definitions/custom/subagent.rs diff --git a/src/crates/core/src/agentic/agents/definitions/hidden/code_review.rs b/src/crates/facade/core/src/agentic/agents/definitions/hidden/code_review.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/hidden/code_review.rs rename to src/crates/facade/core/src/agentic/agents/definitions/hidden/code_review.rs diff --git a/src/crates/core/src/agentic/agents/definitions/hidden/deep_review.rs b/src/crates/facade/core/src/agentic/agents/definitions/hidden/deep_review.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/hidden/deep_review.rs rename to src/crates/facade/core/src/agentic/agents/definitions/hidden/deep_review.rs diff --git a/src/crates/core/src/agentic/agents/definitions/hidden/generate_doc.rs b/src/crates/facade/core/src/agentic/agents/definitions/hidden/generate_doc.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/hidden/generate_doc.rs rename to src/crates/facade/core/src/agentic/agents/definitions/hidden/generate_doc.rs diff --git a/src/crates/core/src/agentic/agents/definitions/hidden/mod.rs b/src/crates/facade/core/src/agentic/agents/definitions/hidden/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/hidden/mod.rs rename to src/crates/facade/core/src/agentic/agents/definitions/hidden/mod.rs diff --git a/src/crates/core/src/agentic/agents/definitions/mod.rs b/src/crates/facade/core/src/agentic/agents/definitions/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/mod.rs rename to src/crates/facade/core/src/agentic/agents/definitions/mod.rs diff --git a/src/crates/core/src/agentic/agents/definitions/modes/agentic.rs b/src/crates/facade/core/src/agentic/agents/definitions/modes/agentic.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/modes/agentic.rs rename to src/crates/facade/core/src/agentic/agents/definitions/modes/agentic.rs diff --git a/src/crates/core/src/agentic/agents/definitions/modes/claw.rs b/src/crates/facade/core/src/agentic/agents/definitions/modes/claw.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/modes/claw.rs rename to src/crates/facade/core/src/agentic/agents/definitions/modes/claw.rs diff --git a/src/crates/core/src/agentic/agents/definitions/modes/cowork.rs b/src/crates/facade/core/src/agentic/agents/definitions/modes/cowork.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/modes/cowork.rs rename to src/crates/facade/core/src/agentic/agents/definitions/modes/cowork.rs diff --git a/src/crates/core/src/agentic/agents/definitions/modes/debug.rs b/src/crates/facade/core/src/agentic/agents/definitions/modes/debug.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/modes/debug.rs rename to src/crates/facade/core/src/agentic/agents/definitions/modes/debug.rs diff --git a/src/crates/core/src/agentic/agents/definitions/modes/deep_research.rs b/src/crates/facade/core/src/agentic/agents/definitions/modes/deep_research.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/modes/deep_research.rs rename to src/crates/facade/core/src/agentic/agents/definitions/modes/deep_research.rs diff --git a/src/crates/core/src/agentic/agents/definitions/modes/mod.rs b/src/crates/facade/core/src/agentic/agents/definitions/modes/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/modes/mod.rs rename to src/crates/facade/core/src/agentic/agents/definitions/modes/mod.rs diff --git a/src/crates/core/src/agentic/agents/definitions/modes/multitask.rs b/src/crates/facade/core/src/agentic/agents/definitions/modes/multitask.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/modes/multitask.rs rename to src/crates/facade/core/src/agentic/agents/definitions/modes/multitask.rs diff --git a/src/crates/core/src/agentic/agents/definitions/modes/plan.rs b/src/crates/facade/core/src/agentic/agents/definitions/modes/plan.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/modes/plan.rs rename to src/crates/facade/core/src/agentic/agents/definitions/modes/plan.rs diff --git a/src/crates/core/src/agentic/agents/definitions/modes/team.rs b/src/crates/facade/core/src/agentic/agents/definitions/modes/team.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/modes/team.rs rename to src/crates/facade/core/src/agentic/agents/definitions/modes/team.rs diff --git a/src/crates/core/src/agentic/agents/definitions/review/mod.rs b/src/crates/facade/core/src/agentic/agents/definitions/review/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/review/mod.rs rename to src/crates/facade/core/src/agentic/agents/definitions/review/mod.rs diff --git a/src/crates/core/src/agentic/agents/definitions/review/review_fixer.rs b/src/crates/facade/core/src/agentic/agents/definitions/review/review_fixer.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/review/review_fixer.rs rename to src/crates/facade/core/src/agentic/agents/definitions/review/review_fixer.rs diff --git a/src/crates/core/src/agentic/agents/definitions/review/review_specialists.rs b/src/crates/facade/core/src/agentic/agents/definitions/review/review_specialists.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/review/review_specialists.rs rename to src/crates/facade/core/src/agentic/agents/definitions/review/review_specialists.rs diff --git a/src/crates/core/src/agentic/agents/definitions/shared/mod.rs b/src/crates/facade/core/src/agentic/agents/definitions/shared/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/shared/mod.rs rename to src/crates/facade/core/src/agentic/agents/definitions/shared/mod.rs diff --git a/src/crates/core/src/agentic/agents/definitions/shared/readonly.rs b/src/crates/facade/core/src/agentic/agents/definitions/shared/readonly.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/shared/readonly.rs rename to src/crates/facade/core/src/agentic/agents/definitions/shared/readonly.rs diff --git a/src/crates/core/src/agentic/agents/definitions/subagents/computer_use.rs b/src/crates/facade/core/src/agentic/agents/definitions/subagents/computer_use.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/subagents/computer_use.rs rename to src/crates/facade/core/src/agentic/agents/definitions/subagents/computer_use.rs diff --git a/src/crates/core/src/agentic/agents/definitions/subagents/explore.rs b/src/crates/facade/core/src/agentic/agents/definitions/subagents/explore.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/subagents/explore.rs rename to src/crates/facade/core/src/agentic/agents/definitions/subagents/explore.rs diff --git a/src/crates/core/src/agentic/agents/definitions/subagents/file_finder.rs b/src/crates/facade/core/src/agentic/agents/definitions/subagents/file_finder.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/subagents/file_finder.rs rename to src/crates/facade/core/src/agentic/agents/definitions/subagents/file_finder.rs diff --git a/src/crates/core/src/agentic/agents/definitions/subagents/general_purpose.rs b/src/crates/facade/core/src/agentic/agents/definitions/subagents/general_purpose.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/subagents/general_purpose.rs rename to src/crates/facade/core/src/agentic/agents/definitions/subagents/general_purpose.rs diff --git a/src/crates/core/src/agentic/agents/definitions/subagents/mod.rs b/src/crates/facade/core/src/agentic/agents/definitions/subagents/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/subagents/mod.rs rename to src/crates/facade/core/src/agentic/agents/definitions/subagents/mod.rs diff --git a/src/crates/core/src/agentic/agents/definitions/subagents/research_specialist.rs b/src/crates/facade/core/src/agentic/agents/definitions/subagents/research_specialist.rs similarity index 100% rename from src/crates/core/src/agentic/agents/definitions/subagents/research_specialist.rs rename to src/crates/facade/core/src/agentic/agents/definitions/subagents/research_specialist.rs diff --git a/src/crates/core/src/agentic/agents/mod.rs b/src/crates/facade/core/src/agentic/agents/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/mod.rs rename to src/crates/facade/core/src/agentic/agents/mod.rs diff --git a/src/crates/core/src/agentic/agents/prompt_builder/mod.rs b/src/crates/facade/core/src/agentic/agents/prompt_builder/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/prompt_builder/mod.rs rename to src/crates/facade/core/src/agentic/agents/prompt_builder/mod.rs diff --git a/src/crates/core/src/agentic/agents/prompt_builder/prompt_builder_impl.rs b/src/crates/facade/core/src/agentic/agents/prompt_builder/prompt_builder_impl.rs similarity index 100% rename from src/crates/core/src/agentic/agents/prompt_builder/prompt_builder_impl.rs rename to src/crates/facade/core/src/agentic/agents/prompt_builder/prompt_builder_impl.rs diff --git a/src/crates/core/src/agentic/agents/prompt_builder/user_context.rs b/src/crates/facade/core/src/agentic/agents/prompt_builder/user_context.rs similarity index 100% rename from src/crates/core/src/agentic/agents/prompt_builder/user_context.rs rename to src/crates/facade/core/src/agentic/agents/prompt_builder/user_context.rs diff --git a/src/crates/core/src/agentic/agents/prompts/agentic_mode.md b/src/crates/facade/core/src/agentic/agents/prompts/agentic_mode.md similarity index 98% rename from src/crates/core/src/agentic/agents/prompts/agentic_mode.md rename to src/crates/facade/core/src/agentic/agents/prompts/agentic_mode.md index 3e6028958..7b5e17826 100644 --- a/src/crates/core/src/agentic/agents/prompts/agentic_mode.md +++ b/src/crates/facade/core/src/agentic/agents/prompts/agentic_mode.md @@ -101,14 +101,14 @@ IMPORTANT: Whenever you mention a file path that the user might want to open, ma - Source file: [filename.ts](src/filename.ts) - Specific line: [filename.ts:42](src/filename.ts#L42) - Generated report: [report.md](computer://deep-research/report.md) -- Plan file returned by a tool: [my-plan.plan.md](computer:///Users/alice/.bitfun/projects/my-project/plans/my-plan.plan.md) +- Plan file returned by a tool: [my-plan.plan.md](computer:///external/projects/my-project/plans/my-plan.plan.md) - Bare path: src/filename.ts - Backticks in link text: [`filename.ts:42`](src/filename.ts#L42) - Full path in link text: [src/filename.ts](src/filename.ts) - computer:// in backticks: `computer://deep-research/report.md` -- Absolute path as plain text: /Users/alice/project/deep-research/report.md +- Absolute path as plain text: /external/project/deep-research/report.md {LANGUAGE_PREFERENCE} diff --git a/src/crates/core/src/agentic/agents/prompts/agentic_mode_first_entry_reminder.md b/src/crates/facade/core/src/agentic/agents/prompts/agentic_mode_first_entry_reminder.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/agentic_mode_first_entry_reminder.md rename to src/crates/facade/core/src/agentic/agents/prompts/agentic_mode_first_entry_reminder.md diff --git a/src/crates/core/src/agentic/agents/prompts/claw_mode.md b/src/crates/facade/core/src/agentic/agents/prompts/claw_mode.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/claw_mode.md rename to src/crates/facade/core/src/agentic/agents/prompts/claw_mode.md diff --git a/src/crates/core/src/agentic/agents/prompts/code_review.md b/src/crates/facade/core/src/agentic/agents/prompts/code_review.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/code_review.md rename to src/crates/facade/core/src/agentic/agents/prompts/code_review.md diff --git a/src/crates/core/src/agentic/agents/prompts/computer_use_mode.md b/src/crates/facade/core/src/agentic/agents/prompts/computer_use_mode.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/computer_use_mode.md rename to src/crates/facade/core/src/agentic/agents/prompts/computer_use_mode.md diff --git a/src/crates/core/src/agentic/agents/prompts/cowork_mode.md b/src/crates/facade/core/src/agentic/agents/prompts/cowork_mode.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/cowork_mode.md rename to src/crates/facade/core/src/agentic/agents/prompts/cowork_mode.md diff --git a/src/crates/core/src/agentic/agents/prompts/debug_mode_first_entry_reminder.md b/src/crates/facade/core/src/agentic/agents/prompts/debug_mode_first_entry_reminder.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/debug_mode_first_entry_reminder.md rename to src/crates/facade/core/src/agentic/agents/prompts/debug_mode_first_entry_reminder.md diff --git a/src/crates/core/src/agentic/agents/prompts/debug_mode_ongoing_reminder.md b/src/crates/facade/core/src/agentic/agents/prompts/debug_mode_ongoing_reminder.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/debug_mode_ongoing_reminder.md rename to src/crates/facade/core/src/agentic/agents/prompts/debug_mode_ongoing_reminder.md diff --git a/src/crates/core/src/agentic/agents/prompts/deep_research_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/deep_research_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/deep_research_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/deep_research_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/deep_review_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/deep_review_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/deep_review_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/deep_review_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/explore_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/explore_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/explore_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/explore_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/file_finder_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/file_finder_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/file_finder_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/file_finder_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/general_purpose_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/general_purpose_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/general_purpose_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/general_purpose_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/generate_doc_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/generate_doc_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/generate_doc_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/generate_doc_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/multitask_mode_first_entry_reminder.md b/src/crates/facade/core/src/agentic/agents/prompts/multitask_mode_first_entry_reminder.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/multitask_mode_first_entry_reminder.md rename to src/crates/facade/core/src/agentic/agents/prompts/multitask_mode_first_entry_reminder.md diff --git a/src/crates/core/src/agentic/agents/prompts/multitask_mode_ongoing_reminder.md b/src/crates/facade/core/src/agentic/agents/prompts/multitask_mode_ongoing_reminder.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/multitask_mode_ongoing_reminder.md rename to src/crates/facade/core/src/agentic/agents/prompts/multitask_mode_ongoing_reminder.md diff --git a/src/crates/core/src/agentic/agents/prompts/plan_mode_first_entry_reminder.md b/src/crates/facade/core/src/agentic/agents/prompts/plan_mode_first_entry_reminder.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/plan_mode_first_entry_reminder.md rename to src/crates/facade/core/src/agentic/agents/prompts/plan_mode_first_entry_reminder.md diff --git a/src/crates/core/src/agentic/agents/prompts/plan_mode_ongoing_reminder.md b/src/crates/facade/core/src/agentic/agents/prompts/plan_mode_ongoing_reminder.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/plan_mode_ongoing_reminder.md rename to src/crates/facade/core/src/agentic/agents/prompts/plan_mode_ongoing_reminder.md diff --git a/src/crates/core/src/agentic/agents/prompts/research_specialist_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/research_specialist_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/research_specialist_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/research_specialist_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/review_architecture_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/review_architecture_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/review_architecture_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/review_architecture_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/review_business_logic_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/review_business_logic_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/review_business_logic_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/review_business_logic_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/review_fixer_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/review_fixer_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/review_fixer_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/review_fixer_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/review_frontend_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/review_frontend_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/review_frontend_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/review_frontend_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/review_performance_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/review_performance_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/review_performance_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/review_performance_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/review_quality_gate_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/review_quality_gate_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/review_quality_gate_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/review_quality_gate_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/review_security_agent.md b/src/crates/facade/core/src/agentic/agents/prompts/review_security_agent.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/review_security_agent.md rename to src/crates/facade/core/src/agentic/agents/prompts/review_security_agent.md diff --git a/src/crates/core/src/agentic/agents/prompts/team_mode.md b/src/crates/facade/core/src/agentic/agents/prompts/team_mode.md similarity index 100% rename from src/crates/core/src/agentic/agents/prompts/team_mode.md rename to src/crates/facade/core/src/agentic/agents/prompts/team_mode.md diff --git a/src/crates/core/src/agentic/agents/registry/availability.rs b/src/crates/facade/core/src/agentic/agents/registry/availability.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/availability.rs rename to src/crates/facade/core/src/agentic/agents/registry/availability.rs diff --git a/src/crates/core/src/agentic/agents/registry/builtin.rs b/src/crates/facade/core/src/agentic/agents/registry/builtin.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/builtin.rs rename to src/crates/facade/core/src/agentic/agents/registry/builtin.rs diff --git a/src/crates/core/src/agentic/agents/registry/catalog.rs b/src/crates/facade/core/src/agentic/agents/registry/catalog.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/catalog.rs rename to src/crates/facade/core/src/agentic/agents/registry/catalog.rs diff --git a/src/crates/core/src/agentic/agents/registry/custom.rs b/src/crates/facade/core/src/agentic/agents/registry/custom.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/custom.rs rename to src/crates/facade/core/src/agentic/agents/registry/custom.rs diff --git a/src/crates/core/src/agentic/agents/registry/mod.rs b/src/crates/facade/core/src/agentic/agents/registry/mod.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/mod.rs rename to src/crates/facade/core/src/agentic/agents/registry/mod.rs diff --git a/src/crates/core/src/agentic/agents/registry/query.rs b/src/crates/facade/core/src/agentic/agents/registry/query.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/query.rs rename to src/crates/facade/core/src/agentic/agents/registry/query.rs diff --git a/src/crates/core/src/agentic/agents/registry/resolution.rs b/src/crates/facade/core/src/agentic/agents/registry/resolution.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/resolution.rs rename to src/crates/facade/core/src/agentic/agents/registry/resolution.rs diff --git a/src/crates/core/src/agentic/agents/registry/support.rs b/src/crates/facade/core/src/agentic/agents/registry/support.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/support.rs rename to src/crates/facade/core/src/agentic/agents/registry/support.rs diff --git a/src/crates/core/src/agentic/agents/registry/tests.rs b/src/crates/facade/core/src/agentic/agents/registry/tests.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/tests.rs rename to src/crates/facade/core/src/agentic/agents/registry/tests.rs diff --git a/src/crates/core/src/agentic/agents/registry/types.rs b/src/crates/facade/core/src/agentic/agents/registry/types.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/types.rs rename to src/crates/facade/core/src/agentic/agents/registry/types.rs diff --git a/src/crates/core/src/agentic/agents/registry/visibility.rs b/src/crates/facade/core/src/agentic/agents/registry/visibility.rs similarity index 100% rename from src/crates/core/src/agentic/agents/registry/visibility.rs rename to src/crates/facade/core/src/agentic/agents/registry/visibility.rs diff --git a/src/crates/core/src/agentic/context_profile.rs b/src/crates/facade/core/src/agentic/context_profile.rs similarity index 100% rename from src/crates/core/src/agentic/context_profile.rs rename to src/crates/facade/core/src/agentic/context_profile.rs diff --git a/src/crates/core/src/agentic/coordination/coordinator.rs b/src/crates/facade/core/src/agentic/coordination/coordinator.rs similarity index 100% rename from src/crates/core/src/agentic/coordination/coordinator.rs rename to src/crates/facade/core/src/agentic/coordination/coordinator.rs diff --git a/src/crates/core/src/agentic/coordination/mod.rs b/src/crates/facade/core/src/agentic/coordination/mod.rs similarity index 100% rename from src/crates/core/src/agentic/coordination/mod.rs rename to src/crates/facade/core/src/agentic/coordination/mod.rs diff --git a/src/crates/core/src/agentic/coordination/scheduler.rs b/src/crates/facade/core/src/agentic/coordination/scheduler.rs similarity index 100% rename from src/crates/core/src/agentic/coordination/scheduler.rs rename to src/crates/facade/core/src/agentic/coordination/scheduler.rs diff --git a/src/crates/core/src/agentic/coordination/state_manager.rs b/src/crates/facade/core/src/agentic/coordination/state_manager.rs similarity index 100% rename from src/crates/core/src/agentic/coordination/state_manager.rs rename to src/crates/facade/core/src/agentic/coordination/state_manager.rs diff --git a/src/crates/core/src/agentic/coordination/turn_outcome.rs b/src/crates/facade/core/src/agentic/coordination/turn_outcome.rs similarity index 100% rename from src/crates/core/src/agentic/coordination/turn_outcome.rs rename to src/crates/facade/core/src/agentic/coordination/turn_outcome.rs diff --git a/src/crates/core/src/agentic/core/dialog_turn.rs b/src/crates/facade/core/src/agentic/core/dialog_turn.rs similarity index 100% rename from src/crates/core/src/agentic/core/dialog_turn.rs rename to src/crates/facade/core/src/agentic/core/dialog_turn.rs diff --git a/src/crates/core/src/agentic/core/message.rs b/src/crates/facade/core/src/agentic/core/message.rs similarity index 100% rename from src/crates/core/src/agentic/core/message.rs rename to src/crates/facade/core/src/agentic/core/message.rs diff --git a/src/crates/core/src/agentic/core/messages_helper.rs b/src/crates/facade/core/src/agentic/core/messages_helper.rs similarity index 100% rename from src/crates/core/src/agentic/core/messages_helper.rs rename to src/crates/facade/core/src/agentic/core/messages_helper.rs diff --git a/src/crates/core/src/agentic/core/mod.rs b/src/crates/facade/core/src/agentic/core/mod.rs similarity index 100% rename from src/crates/core/src/agentic/core/mod.rs rename to src/crates/facade/core/src/agentic/core/mod.rs diff --git a/src/crates/core/src/agentic/core/prompt_markup.rs b/src/crates/facade/core/src/agentic/core/prompt_markup.rs similarity index 100% rename from src/crates/core/src/agentic/core/prompt_markup.rs rename to src/crates/facade/core/src/agentic/core/prompt_markup.rs diff --git a/src/crates/core/src/agentic/core/session.rs b/src/crates/facade/core/src/agentic/core/session.rs similarity index 100% rename from src/crates/core/src/agentic/core/session.rs rename to src/crates/facade/core/src/agentic/core/session.rs diff --git a/src/crates/core/src/agentic/core/state.rs b/src/crates/facade/core/src/agentic/core/state.rs similarity index 100% rename from src/crates/core/src/agentic/core/state.rs rename to src/crates/facade/core/src/agentic/core/state.rs diff --git a/src/crates/core/src/agentic/deep_review/AGENTS.md b/src/crates/facade/core/src/agentic/deep_review/AGENTS.md similarity index 93% rename from src/crates/core/src/agentic/deep_review/AGENTS.md rename to src/crates/facade/core/src/agentic/deep_review/AGENTS.md index 04447df0d..9dafe73ac 100644 --- a/src/crates/core/src/agentic/deep_review/AGENTS.md +++ b/src/crates/facade/core/src/agentic/deep_review/AGENTS.md @@ -13,7 +13,7 @@ This file applies to DeepReview runtime internals in this directory. this directory owns validation, queue/retry state, task adaptation, and report enrichment. - Keep default team/runtime contracts aligned with `deep_review_policy.rs` and - reviewer agents in `src/crates/core/src/agentic/agents`. + reviewer agents in `src/crates/facade/core/src/agentic/agents`. - Reviewer subagents stay read-only; `ReviewFixer` is not part of the review pass. - When queue or report fields change, update the matching frontend DTOs and diff --git a/src/crates/core/src/agentic/deep_review/CONTRIBUTING.md b/src/crates/facade/core/src/agentic/deep_review/CONTRIBUTING.md similarity index 87% rename from src/crates/core/src/agentic/deep_review/CONTRIBUTING.md rename to src/crates/facade/core/src/agentic/deep_review/CONTRIBUTING.md index e4bbdd547..f1bd662fa 100644 --- a/src/crates/core/src/agentic/deep_review/CONTRIBUTING.md +++ b/src/crates/facade/core/src/agentic/deep_review/CONTRIBUTING.md @@ -1,6 +1,6 @@ # DeepReview Runtime Contributions -Use this guide for backend DeepReview changes in `src/crates/core`. +Use this guide for backend DeepReview changes in `src/crates/facade/core`. - Runtime changes belong in shared core, without Tauri or desktop-only APIs. - Keep policy, manifest gate, queue state, retry behavior, task adapter, and diff --git a/src/crates/core/src/agentic/deep_review/budget.rs b/src/crates/facade/core/src/agentic/deep_review/budget.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/budget.rs rename to src/crates/facade/core/src/agentic/deep_review/budget.rs diff --git a/src/crates/core/src/agentic/deep_review/concurrency_policy.rs b/src/crates/facade/core/src/agentic/deep_review/concurrency_policy.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/concurrency_policy.rs rename to src/crates/facade/core/src/agentic/deep_review/concurrency_policy.rs diff --git a/src/crates/core/src/agentic/deep_review/constants.rs b/src/crates/facade/core/src/agentic/deep_review/constants.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/constants.rs rename to src/crates/facade/core/src/agentic/deep_review/constants.rs diff --git a/src/crates/core/src/agentic/deep_review/diagnostics.rs b/src/crates/facade/core/src/agentic/deep_review/diagnostics.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/diagnostics.rs rename to src/crates/facade/core/src/agentic/deep_review/diagnostics.rs diff --git a/src/crates/core/src/agentic/deep_review/execution_policy.rs b/src/crates/facade/core/src/agentic/deep_review/execution_policy.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/execution_policy.rs rename to src/crates/facade/core/src/agentic/deep_review/execution_policy.rs diff --git a/src/crates/core/src/agentic/deep_review/incremental_cache.rs b/src/crates/facade/core/src/agentic/deep_review/incremental_cache.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/incremental_cache.rs rename to src/crates/facade/core/src/agentic/deep_review/incremental_cache.rs diff --git a/src/crates/core/src/agentic/deep_review/manifest.rs b/src/crates/facade/core/src/agentic/deep_review/manifest.rs similarity index 98% rename from src/crates/core/src/agentic/deep_review/manifest.rs rename to src/crates/facade/core/src/agentic/deep_review/manifest.rs index 24187ba9f..75f4add89 100644 --- a/src/crates/core/src/agentic/deep_review/manifest.rs +++ b/src/crates/facade/core/src/agentic/deep_review/manifest.rs @@ -761,7 +761,7 @@ mod tests { "evidencePack": { "version": 1, "source": "target_manifest", - "changedFiles": ["src/crates/api-layer/src/review.rs"], + "changedFiles": ["src/crates/integrations/api-layer/src/review.rs"], "diffStat": { "fileCount": 1, "totalChangedLines": 4, @@ -772,7 +772,7 @@ mod tests { "packetIds": ["reviewer:ReviewArchitecture", "judge:ReviewJudge"], "hunkHints": [ { - "filePath": "src/crates/api-layer/src/review.rs", + "filePath": "src/crates/integrations/api-layer/src/review.rs", "changedLineCount": 4, "lineCountSource": "diff_stat" } @@ -780,7 +780,7 @@ mod tests { "contractHints": [ { "kind": "api_contract", - "filePath": "src/crates/api-layer/src/review.rs", + "filePath": "src/crates/integrations/api-layer/src/review.rs", "source": "path_classifier" } ], @@ -822,7 +822,7 @@ mod tests { .iter() .map(String::as_str) .collect::>(), - vec!["src/crates/api-layer/src/review.rs"] + vec!["src/crates/integrations/api-layer/src/review.rs"] ); assert_eq!( pack.packet_ids() diff --git a/src/crates/core/src/agentic/deep_review/mod.rs b/src/crates/facade/core/src/agentic/deep_review/mod.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/mod.rs rename to src/crates/facade/core/src/agentic/deep_review/mod.rs diff --git a/src/crates/core/src/agentic/deep_review/queue.rs b/src/crates/facade/core/src/agentic/deep_review/queue.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/queue.rs rename to src/crates/facade/core/src/agentic/deep_review/queue.rs diff --git a/src/crates/core/src/agentic/deep_review/report.rs b/src/crates/facade/core/src/agentic/deep_review/report.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/report.rs rename to src/crates/facade/core/src/agentic/deep_review/report.rs diff --git a/src/crates/core/src/agentic/deep_review/shared_context.rs b/src/crates/facade/core/src/agentic/deep_review/shared_context.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/shared_context.rs rename to src/crates/facade/core/src/agentic/deep_review/shared_context.rs diff --git a/src/crates/core/src/agentic/deep_review/task_adapter.rs b/src/crates/facade/core/src/agentic/deep_review/task_adapter.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/task_adapter.rs rename to src/crates/facade/core/src/agentic/deep_review/task_adapter.rs diff --git a/src/crates/core/src/agentic/deep_review/team_definition.rs b/src/crates/facade/core/src/agentic/deep_review/team_definition.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/team_definition.rs rename to src/crates/facade/core/src/agentic/deep_review/team_definition.rs diff --git a/src/crates/core/src/agentic/deep_review/tool_context.rs b/src/crates/facade/core/src/agentic/deep_review/tool_context.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/tool_context.rs rename to src/crates/facade/core/src/agentic/deep_review/tool_context.rs diff --git a/src/crates/core/src/agentic/deep_review/tool_measurement.rs b/src/crates/facade/core/src/agentic/deep_review/tool_measurement.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review/tool_measurement.rs rename to src/crates/facade/core/src/agentic/deep_review/tool_measurement.rs diff --git a/src/crates/core/src/agentic/deep_review_policy.rs b/src/crates/facade/core/src/agentic/deep_review_policy.rs similarity index 100% rename from src/crates/core/src/agentic/deep_review_policy.rs rename to src/crates/facade/core/src/agentic/deep_review_policy.rs diff --git a/src/crates/core/src/agentic/events/mod.rs b/src/crates/facade/core/src/agentic/events/mod.rs similarity index 100% rename from src/crates/core/src/agentic/events/mod.rs rename to src/crates/facade/core/src/agentic/events/mod.rs diff --git a/src/crates/core/src/agentic/events/queue.rs b/src/crates/facade/core/src/agentic/events/queue.rs similarity index 100% rename from src/crates/core/src/agentic/events/queue.rs rename to src/crates/facade/core/src/agentic/events/queue.rs diff --git a/src/crates/core/src/agentic/events/router.rs b/src/crates/facade/core/src/agentic/events/router.rs similarity index 100% rename from src/crates/core/src/agentic/events/router.rs rename to src/crates/facade/core/src/agentic/events/router.rs diff --git a/src/crates/core/src/agentic/events/types.rs b/src/crates/facade/core/src/agentic/events/types.rs similarity index 100% rename from src/crates/core/src/agentic/events/types.rs rename to src/crates/facade/core/src/agentic/events/types.rs diff --git a/src/crates/core/src/agentic/execution/AGENTS.md b/src/crates/facade/core/src/agentic/execution/AGENTS.md similarity index 100% rename from src/crates/core/src/agentic/execution/AGENTS.md rename to src/crates/facade/core/src/agentic/execution/AGENTS.md diff --git a/src/crates/core/src/agentic/execution/execution_engine.rs b/src/crates/facade/core/src/agentic/execution/execution_engine.rs similarity index 100% rename from src/crates/core/src/agentic/execution/execution_engine.rs rename to src/crates/facade/core/src/agentic/execution/execution_engine.rs diff --git a/src/crates/core/src/agentic/execution/mod.rs b/src/crates/facade/core/src/agentic/execution/mod.rs similarity index 100% rename from src/crates/core/src/agentic/execution/mod.rs rename to src/crates/facade/core/src/agentic/execution/mod.rs diff --git a/src/crates/core/src/agentic/execution/round_executor.rs b/src/crates/facade/core/src/agentic/execution/round_executor.rs similarity index 99% rename from src/crates/core/src/agentic/execution/round_executor.rs rename to src/crates/facade/core/src/agentic/execution/round_executor.rs index 649fab0b8..6732524e2 100644 --- a/src/crates/core/src/agentic/execution/round_executor.rs +++ b/src/crates/facade/core/src/agentic/execution/round_executor.rs @@ -840,7 +840,6 @@ impl RoundExecutor { } } - /// Emit event async fn emit_event(&self, event: AgenticEvent, priority: EventPriority) { let _ = self.event_queue.enqueue(event, Some(priority)).await; @@ -1122,4 +1121,3 @@ mod tests { assert!(super::token_details_from_usage(&usage).is_none()); } } - diff --git a/src/crates/core/src/agentic/execution/stream_processor.rs b/src/crates/facade/core/src/agentic/execution/stream_processor.rs similarity index 100% rename from src/crates/core/src/agentic/execution/stream_processor.rs rename to src/crates/facade/core/src/agentic/execution/stream_processor.rs diff --git a/src/crates/core/src/agentic/execution/types.rs b/src/crates/facade/core/src/agentic/execution/types.rs similarity index 100% rename from src/crates/core/src/agentic/execution/types.rs rename to src/crates/facade/core/src/agentic/execution/types.rs diff --git a/src/crates/core/src/agentic/execution/write_content_sanitizer.rs b/src/crates/facade/core/src/agentic/execution/write_content_sanitizer.rs similarity index 100% rename from src/crates/core/src/agentic/execution/write_content_sanitizer.rs rename to src/crates/facade/core/src/agentic/execution/write_content_sanitizer.rs diff --git a/src/crates/core/src/agentic/fork_agent/mod.rs b/src/crates/facade/core/src/agentic/fork_agent/mod.rs similarity index 99% rename from src/crates/core/src/agentic/fork_agent/mod.rs rename to src/crates/facade/core/src/agentic/fork_agent/mod.rs index b13f47841..6ee627e69 100644 --- a/src/crates/core/src/agentic/fork_agent/mod.rs +++ b/src/crates/facade/core/src/agentic/fork_agent/mod.rs @@ -59,7 +59,6 @@ impl ForkAgentContextSnapshot { } config } - } #[cfg(test)] diff --git a/src/crates/core/src/agentic/goal_mode/mod.rs b/src/crates/facade/core/src/agentic/goal_mode/mod.rs similarity index 100% rename from src/crates/core/src/agentic/goal_mode/mod.rs rename to src/crates/facade/core/src/agentic/goal_mode/mod.rs diff --git a/src/crates/core/src/agentic/goal_mode/token_subscriber.rs b/src/crates/facade/core/src/agentic/goal_mode/token_subscriber.rs similarity index 100% rename from src/crates/core/src/agentic/goal_mode/token_subscriber.rs rename to src/crates/facade/core/src/agentic/goal_mode/token_subscriber.rs diff --git a/src/crates/core/src/agentic/harness.rs b/src/crates/facade/core/src/agentic/harness.rs similarity index 78% rename from src/crates/core/src/agentic/harness.rs rename to src/crates/facade/core/src/agentic/harness.rs index 0ab80f8f1..120be5a3a 100644 --- a/src/crates/core/src/agentic/harness.rs +++ b/src/crates/facade/core/src/agentic/harness.rs @@ -1,20 +1,9 @@ -use bitfun_harness::{HarnessRegistry, HarnessRegistryBuildError}; -use bitfun_product_capabilities::{product_assembly_plan_for_profile, DeliveryProfile}; pub use bitfun_product_capabilities::{ - CORE_DEEP_RESEARCH_HARNESS_PROVIDER_ID, CORE_DEEP_REVIEW_HARNESS_PROVIDER_ID, - CORE_MINIAPP_HARNESS_PROVIDER_ID, + default_product_harness_registry as product_harness_registry, + product_harness_registry_for_profile, CORE_DEEP_RESEARCH_HARNESS_PROVIDER_ID, + CORE_DEEP_REVIEW_HARNESS_PROVIDER_ID, CORE_MINIAPP_HARNESS_PROVIDER_ID, }; -pub fn product_harness_registry() -> Result { - product_harness_registry_for_profile(DeliveryProfile::ProductFull) -} - -pub fn product_harness_registry_for_profile( - profile: DeliveryProfile, -) -> Result { - product_assembly_plan_for_profile(profile).build_harness_registry() -} - #[cfg(test)] mod tests { use super::*; diff --git a/src/crates/core/src/agentic/image_analysis/enhancer.rs b/src/crates/facade/core/src/agentic/image_analysis/enhancer.rs similarity index 100% rename from src/crates/core/src/agentic/image_analysis/enhancer.rs rename to src/crates/facade/core/src/agentic/image_analysis/enhancer.rs diff --git a/src/crates/core/src/agentic/image_analysis/image_processing.rs b/src/crates/facade/core/src/agentic/image_analysis/image_processing.rs similarity index 100% rename from src/crates/core/src/agentic/image_analysis/image_processing.rs rename to src/crates/facade/core/src/agentic/image_analysis/image_processing.rs diff --git a/src/crates/core/src/agentic/image_analysis/mod.rs b/src/crates/facade/core/src/agentic/image_analysis/mod.rs similarity index 100% rename from src/crates/core/src/agentic/image_analysis/mod.rs rename to src/crates/facade/core/src/agentic/image_analysis/mod.rs diff --git a/src/crates/core/src/agentic/image_analysis/processor.rs b/src/crates/facade/core/src/agentic/image_analysis/processor.rs similarity index 100% rename from src/crates/core/src/agentic/image_analysis/processor.rs rename to src/crates/facade/core/src/agentic/image_analysis/processor.rs diff --git a/src/crates/core/src/agentic/image_analysis/types.rs b/src/crates/facade/core/src/agentic/image_analysis/types.rs similarity index 100% rename from src/crates/core/src/agentic/image_analysis/types.rs rename to src/crates/facade/core/src/agentic/image_analysis/types.rs diff --git a/src/crates/core/src/agentic/init_agents_md.rs b/src/crates/facade/core/src/agentic/init_agents_md.rs similarity index 100% rename from src/crates/core/src/agentic/init_agents_md.rs rename to src/crates/facade/core/src/agentic/init_agents_md.rs diff --git a/src/crates/core/src/agentic/insights/cancellation.rs b/src/crates/facade/core/src/agentic/insights/cancellation.rs similarity index 100% rename from src/crates/core/src/agentic/insights/cancellation.rs rename to src/crates/facade/core/src/agentic/insights/cancellation.rs diff --git a/src/crates/core/src/agentic/insights/collector.rs b/src/crates/facade/core/src/agentic/insights/collector.rs similarity index 100% rename from src/crates/core/src/agentic/insights/collector.rs rename to src/crates/facade/core/src/agentic/insights/collector.rs diff --git a/src/crates/core/src/agentic/insights/facet_cache.rs b/src/crates/facade/core/src/agentic/insights/facet_cache.rs similarity index 100% rename from src/crates/core/src/agentic/insights/facet_cache.rs rename to src/crates/facade/core/src/agentic/insights/facet_cache.rs diff --git a/src/crates/core/src/agentic/insights/html.rs b/src/crates/facade/core/src/agentic/insights/html.rs similarity index 100% rename from src/crates/core/src/agentic/insights/html.rs rename to src/crates/facade/core/src/agentic/insights/html.rs diff --git a/src/crates/core/src/agentic/insights/mod.rs b/src/crates/facade/core/src/agentic/insights/mod.rs similarity index 100% rename from src/crates/core/src/agentic/insights/mod.rs rename to src/crates/facade/core/src/agentic/insights/mod.rs diff --git a/src/crates/core/src/agentic/insights/prompt_context.rs b/src/crates/facade/core/src/agentic/insights/prompt_context.rs similarity index 100% rename from src/crates/core/src/agentic/insights/prompt_context.rs rename to src/crates/facade/core/src/agentic/insights/prompt_context.rs diff --git a/src/crates/core/src/agentic/insights/prompts/areas.md b/src/crates/facade/core/src/agentic/insights/prompts/areas.md similarity index 100% rename from src/crates/core/src/agentic/insights/prompts/areas.md rename to src/crates/facade/core/src/agentic/insights/prompts/areas.md diff --git a/src/crates/core/src/agentic/insights/prompts/at_a_glance.md b/src/crates/facade/core/src/agentic/insights/prompts/at_a_glance.md similarity index 100% rename from src/crates/core/src/agentic/insights/prompts/at_a_glance.md rename to src/crates/facade/core/src/agentic/insights/prompts/at_a_glance.md diff --git a/src/crates/core/src/agentic/insights/prompts/facet_extraction.md b/src/crates/facade/core/src/agentic/insights/prompts/facet_extraction.md similarity index 100% rename from src/crates/core/src/agentic/insights/prompts/facet_extraction.md rename to src/crates/facade/core/src/agentic/insights/prompts/facet_extraction.md diff --git a/src/crates/core/src/agentic/insights/prompts/friction.md b/src/crates/facade/core/src/agentic/insights/prompts/friction.md similarity index 100% rename from src/crates/core/src/agentic/insights/prompts/friction.md rename to src/crates/facade/core/src/agentic/insights/prompts/friction.md diff --git a/src/crates/core/src/agentic/insights/prompts/fun_ending.md b/src/crates/facade/core/src/agentic/insights/prompts/fun_ending.md similarity index 100% rename from src/crates/core/src/agentic/insights/prompts/fun_ending.md rename to src/crates/facade/core/src/agentic/insights/prompts/fun_ending.md diff --git a/src/crates/core/src/agentic/insights/prompts/horizon.md b/src/crates/facade/core/src/agentic/insights/prompts/horizon.md similarity index 100% rename from src/crates/core/src/agentic/insights/prompts/horizon.md rename to src/crates/facade/core/src/agentic/insights/prompts/horizon.md diff --git a/src/crates/core/src/agentic/insights/prompts/interaction_style.md b/src/crates/facade/core/src/agentic/insights/prompts/interaction_style.md similarity index 100% rename from src/crates/core/src/agentic/insights/prompts/interaction_style.md rename to src/crates/facade/core/src/agentic/insights/prompts/interaction_style.md diff --git a/src/crates/core/src/agentic/insights/prompts/suggestions.md b/src/crates/facade/core/src/agentic/insights/prompts/suggestions.md similarity index 100% rename from src/crates/core/src/agentic/insights/prompts/suggestions.md rename to src/crates/facade/core/src/agentic/insights/prompts/suggestions.md diff --git a/src/crates/core/src/agentic/insights/prompts/wins.md b/src/crates/facade/core/src/agentic/insights/prompts/wins.md similarity index 100% rename from src/crates/core/src/agentic/insights/prompts/wins.md rename to src/crates/facade/core/src/agentic/insights/prompts/wins.md diff --git a/src/crates/core/src/agentic/insights/service.rs b/src/crates/facade/core/src/agentic/insights/service.rs similarity index 100% rename from src/crates/core/src/agentic/insights/service.rs rename to src/crates/facade/core/src/agentic/insights/service.rs diff --git a/src/crates/core/src/agentic/insights/session_paths.rs b/src/crates/facade/core/src/agentic/insights/session_paths.rs similarity index 100% rename from src/crates/core/src/agentic/insights/session_paths.rs rename to src/crates/facade/core/src/agentic/insights/session_paths.rs diff --git a/src/crates/core/src/agentic/insights/types.rs b/src/crates/facade/core/src/agentic/insights/types.rs similarity index 100% rename from src/crates/core/src/agentic/insights/types.rs rename to src/crates/facade/core/src/agentic/insights/types.rs diff --git a/src/crates/core/src/agentic/mod.rs b/src/crates/facade/core/src/agentic/mod.rs similarity index 100% rename from src/crates/core/src/agentic/mod.rs rename to src/crates/facade/core/src/agentic/mod.rs diff --git a/src/crates/core/src/agentic/persistence/manager.rs b/src/crates/facade/core/src/agentic/persistence/manager.rs similarity index 100% rename from src/crates/core/src/agentic/persistence/manager.rs rename to src/crates/facade/core/src/agentic/persistence/manager.rs diff --git a/src/crates/core/src/agentic/persistence/mod.rs b/src/crates/facade/core/src/agentic/persistence/mod.rs similarity index 100% rename from src/crates/core/src/agentic/persistence/mod.rs rename to src/crates/facade/core/src/agentic/persistence/mod.rs diff --git a/src/crates/core/src/agentic/persistence/session_branch.rs b/src/crates/facade/core/src/agentic/persistence/session_branch.rs similarity index 100% rename from src/crates/core/src/agentic/persistence/session_branch.rs rename to src/crates/facade/core/src/agentic/persistence/session_branch.rs index f83fa4f29..213b1dc21 100644 --- a/src/crates/core/src/agentic/persistence/session_branch.rs +++ b/src/crates/facade/core/src/agentic/persistence/session_branch.rs @@ -271,11 +271,11 @@ impl PersistenceManager { mod tests { use super::{PersistenceManager, SessionBranchRequest}; use crate::agentic::core::{Message, Session, SessionKind}; - use crate::agentic::skill_agent_snapshot::{SkillSnapshotEntry, TurnSkillAgentSnapshot}; use crate::agentic::session::{ CachedSystemPrompt, CachedUserContext, SessionPromptCache, SystemPromptCacheIdentity, UserContextCacheIdentity, }; + use crate::agentic::skill_agent_snapshot::{SkillSnapshotEntry, TurnSkillAgentSnapshot}; use crate::infrastructure::PathManager; use crate::service::session::{DialogTurnData, UserMessageData}; use std::path::{Path, PathBuf}; diff --git a/src/crates/core/src/agentic/prompts/init_agents_md.md b/src/crates/facade/core/src/agentic/prompts/init_agents_md.md similarity index 100% rename from src/crates/core/src/agentic/prompts/init_agents_md.md rename to src/crates/facade/core/src/agentic/prompts/init_agents_md.md diff --git a/src/crates/core/src/agentic/round_preempt.rs b/src/crates/facade/core/src/agentic/round_preempt.rs similarity index 100% rename from src/crates/core/src/agentic/round_preempt.rs rename to src/crates/facade/core/src/agentic/round_preempt.rs diff --git a/src/crates/core/src/agentic/session/compression/compressor.rs b/src/crates/facade/core/src/agentic/session/compression/compressor.rs similarity index 100% rename from src/crates/core/src/agentic/session/compression/compressor.rs rename to src/crates/facade/core/src/agentic/session/compression/compressor.rs diff --git a/src/crates/core/src/agentic/session/compression/fallback/builder.rs b/src/crates/facade/core/src/agentic/session/compression/fallback/builder.rs similarity index 100% rename from src/crates/core/src/agentic/session/compression/fallback/builder.rs rename to src/crates/facade/core/src/agentic/session/compression/fallback/builder.rs diff --git a/src/crates/core/src/agentic/session/compression/fallback/mod.rs b/src/crates/facade/core/src/agentic/session/compression/fallback/mod.rs similarity index 100% rename from src/crates/core/src/agentic/session/compression/fallback/mod.rs rename to src/crates/facade/core/src/agentic/session/compression/fallback/mod.rs diff --git a/src/crates/core/src/agentic/session/compression/fallback/payload.rs b/src/crates/facade/core/src/agentic/session/compression/fallback/payload.rs similarity index 100% rename from src/crates/core/src/agentic/session/compression/fallback/payload.rs rename to src/crates/facade/core/src/agentic/session/compression/fallback/payload.rs diff --git a/src/crates/core/src/agentic/session/compression/fallback/render.rs b/src/crates/facade/core/src/agentic/session/compression/fallback/render.rs similarity index 100% rename from src/crates/core/src/agentic/session/compression/fallback/render.rs rename to src/crates/facade/core/src/agentic/session/compression/fallback/render.rs diff --git a/src/crates/core/src/agentic/session/compression/fallback/sanitize.rs b/src/crates/facade/core/src/agentic/session/compression/fallback/sanitize.rs similarity index 100% rename from src/crates/core/src/agentic/session/compression/fallback/sanitize.rs rename to src/crates/facade/core/src/agentic/session/compression/fallback/sanitize.rs diff --git a/src/crates/core/src/agentic/session/compression/fallback/tests.rs b/src/crates/facade/core/src/agentic/session/compression/fallback/tests.rs similarity index 100% rename from src/crates/core/src/agentic/session/compression/fallback/tests.rs rename to src/crates/facade/core/src/agentic/session/compression/fallback/tests.rs diff --git a/src/crates/core/src/agentic/session/compression/fallback/types.rs b/src/crates/facade/core/src/agentic/session/compression/fallback/types.rs similarity index 100% rename from src/crates/core/src/agentic/session/compression/fallback/types.rs rename to src/crates/facade/core/src/agentic/session/compression/fallback/types.rs diff --git a/src/crates/core/src/agentic/session/compression/mod.rs b/src/crates/facade/core/src/agentic/session/compression/mod.rs similarity index 100% rename from src/crates/core/src/agentic/session/compression/mod.rs rename to src/crates/facade/core/src/agentic/session/compression/mod.rs diff --git a/src/crates/core/src/agentic/session/context_store.rs b/src/crates/facade/core/src/agentic/session/context_store.rs similarity index 100% rename from src/crates/core/src/agentic/session/context_store.rs rename to src/crates/facade/core/src/agentic/session/context_store.rs diff --git a/src/crates/core/src/agentic/session/evidence_ledger.rs b/src/crates/facade/core/src/agentic/session/evidence_ledger.rs similarity index 100% rename from src/crates/core/src/agentic/session/evidence_ledger.rs rename to src/crates/facade/core/src/agentic/session/evidence_ledger.rs diff --git a/src/crates/core/src/agentic/session/file_read_state.rs b/src/crates/facade/core/src/agentic/session/file_read_state.rs similarity index 100% rename from src/crates/core/src/agentic/session/file_read_state.rs rename to src/crates/facade/core/src/agentic/session/file_read_state.rs diff --git a/src/crates/core/src/agentic/session/mod.rs b/src/crates/facade/core/src/agentic/session/mod.rs similarity index 100% rename from src/crates/core/src/agentic/session/mod.rs rename to src/crates/facade/core/src/agentic/session/mod.rs diff --git a/src/crates/core/src/agentic/session/prompt_cache.rs b/src/crates/facade/core/src/agentic/session/prompt_cache.rs similarity index 100% rename from src/crates/core/src/agentic/session/prompt_cache.rs rename to src/crates/facade/core/src/agentic/session/prompt_cache.rs diff --git a/src/crates/core/src/agentic/session/session_manager.rs b/src/crates/facade/core/src/agentic/session/session_manager.rs similarity index 100% rename from src/crates/core/src/agentic/session/session_manager.rs rename to src/crates/facade/core/src/agentic/session/session_manager.rs diff --git a/src/crates/core/src/agentic/session/session_store_port.rs b/src/crates/facade/core/src/agentic/session/session_store_port.rs similarity index 100% rename from src/crates/core/src/agentic/session/session_store_port.rs rename to src/crates/facade/core/src/agentic/session/session_store_port.rs diff --git a/src/crates/core/src/agentic/session/turn_skill_agent_snapshot_store.rs b/src/crates/facade/core/src/agentic/session/turn_skill_agent_snapshot_store.rs similarity index 100% rename from src/crates/core/src/agentic/session/turn_skill_agent_snapshot_store.rs rename to src/crates/facade/core/src/agentic/session/turn_skill_agent_snapshot_store.rs diff --git a/src/crates/core/src/agentic/side_question.rs b/src/crates/facade/core/src/agentic/side_question.rs similarity index 100% rename from src/crates/core/src/agentic/side_question.rs rename to src/crates/facade/core/src/agentic/side_question.rs diff --git a/src/crates/core/src/agentic/skill_agent_snapshot.rs b/src/crates/facade/core/src/agentic/skill_agent_snapshot.rs similarity index 100% rename from src/crates/core/src/agentic/skill_agent_snapshot.rs rename to src/crates/facade/core/src/agentic/skill_agent_snapshot.rs diff --git a/src/crates/core/src/agentic/subagent_runtime/mod.rs b/src/crates/facade/core/src/agentic/subagent_runtime/mod.rs similarity index 100% rename from src/crates/core/src/agentic/subagent_runtime/mod.rs rename to src/crates/facade/core/src/agentic/subagent_runtime/mod.rs diff --git a/src/crates/core/src/agentic/subagent_runtime/queue_timing.rs b/src/crates/facade/core/src/agentic/subagent_runtime/queue_timing.rs similarity index 100% rename from src/crates/core/src/agentic/subagent_runtime/queue_timing.rs rename to src/crates/facade/core/src/agentic/subagent_runtime/queue_timing.rs diff --git a/src/crates/core/src/agentic/system.rs b/src/crates/facade/core/src/agentic/system.rs similarity index 100% rename from src/crates/core/src/agentic/system.rs rename to src/crates/facade/core/src/agentic/system.rs diff --git a/src/crates/core/src/agentic/tools/agent-tool-exposure.md b/src/crates/facade/core/src/agentic/tools/agent-tool-exposure.md similarity index 100% rename from src/crates/core/src/agentic/tools/agent-tool-exposure.md rename to src/crates/facade/core/src/agentic/tools/agent-tool-exposure.md diff --git a/src/crates/core/src/agentic/tools/browser_control/actions.rs b/src/crates/facade/core/src/agentic/tools/browser_control/actions.rs similarity index 100% rename from src/crates/core/src/agentic/tools/browser_control/actions.rs rename to src/crates/facade/core/src/agentic/tools/browser_control/actions.rs diff --git a/src/crates/core/src/agentic/tools/browser_control/browser_launcher.rs b/src/crates/facade/core/src/agentic/tools/browser_control/browser_launcher.rs similarity index 100% rename from src/crates/core/src/agentic/tools/browser_control/browser_launcher.rs rename to src/crates/facade/core/src/agentic/tools/browser_control/browser_launcher.rs diff --git a/src/crates/core/src/agentic/tools/browser_control/cdp_client.rs b/src/crates/facade/core/src/agentic/tools/browser_control/cdp_client.rs similarity index 100% rename from src/crates/core/src/agentic/tools/browser_control/cdp_client.rs rename to src/crates/facade/core/src/agentic/tools/browser_control/cdp_client.rs diff --git a/src/crates/core/src/agentic/tools/browser_control/mod.rs b/src/crates/facade/core/src/agentic/tools/browser_control/mod.rs similarity index 100% rename from src/crates/core/src/agentic/tools/browser_control/mod.rs rename to src/crates/facade/core/src/agentic/tools/browser_control/mod.rs diff --git a/src/crates/core/src/agentic/tools/browser_control/session_registry.rs b/src/crates/facade/core/src/agentic/tools/browser_control/session_registry.rs similarity index 100% rename from src/crates/core/src/agentic/tools/browser_control/session_registry.rs rename to src/crates/facade/core/src/agentic/tools/browser_control/session_registry.rs diff --git a/src/crates/core/src/agentic/tools/computer_use_capability.rs b/src/crates/facade/core/src/agentic/tools/computer_use_capability.rs similarity index 100% rename from src/crates/core/src/agentic/tools/computer_use_capability.rs rename to src/crates/facade/core/src/agentic/tools/computer_use_capability.rs diff --git a/src/crates/core/src/agentic/tools/computer_use_host.rs b/src/crates/facade/core/src/agentic/tools/computer_use_host.rs similarity index 100% rename from src/crates/core/src/agentic/tools/computer_use_host.rs rename to src/crates/facade/core/src/agentic/tools/computer_use_host.rs diff --git a/src/crates/core/src/agentic/tools/computer_use_optimizer.rs b/src/crates/facade/core/src/agentic/tools/computer_use_optimizer.rs similarity index 100% rename from src/crates/core/src/agentic/tools/computer_use_optimizer.rs rename to src/crates/facade/core/src/agentic/tools/computer_use_optimizer.rs diff --git a/src/crates/core/src/agentic/tools/computer_use_verification.rs b/src/crates/facade/core/src/agentic/tools/computer_use_verification.rs similarity index 100% rename from src/crates/core/src/agentic/tools/computer_use_verification.rs rename to src/crates/facade/core/src/agentic/tools/computer_use_verification.rs diff --git a/src/crates/core/src/agentic/tools/file_read_state_runtime.rs b/src/crates/facade/core/src/agentic/tools/file_read_state_runtime.rs similarity index 100% rename from src/crates/core/src/agentic/tools/file_read_state_runtime.rs rename to src/crates/facade/core/src/agentic/tools/file_read_state_runtime.rs diff --git a/src/crates/core/src/agentic/tools/file_tool_guidance.rs b/src/crates/facade/core/src/agentic/tools/file_tool_guidance.rs similarity index 100% rename from src/crates/core/src/agentic/tools/file_tool_guidance.rs rename to src/crates/facade/core/src/agentic/tools/file_tool_guidance.rs diff --git a/src/crates/core/src/agentic/tools/framework.rs b/src/crates/facade/core/src/agentic/tools/framework.rs similarity index 100% rename from src/crates/core/src/agentic/tools/framework.rs rename to src/crates/facade/core/src/agentic/tools/framework.rs diff --git a/src/crates/core/src/agentic/tools/image_context.rs b/src/crates/facade/core/src/agentic/tools/image_context.rs similarity index 100% rename from src/crates/core/src/agentic/tools/image_context.rs rename to src/crates/facade/core/src/agentic/tools/image_context.rs diff --git a/src/crates/core/src/agentic/tools/implementations/ask_user_question_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/ask_user_question_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/ask_user_question_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/ask_user_question_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/bash_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/bash_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/bash_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/bash_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/code_review_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/code_review_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/code_review_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/code_review_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/computer_use_actions.rs b/src/crates/facade/core/src/agentic/tools/implementations/computer_use_actions.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/computer_use_actions.rs rename to src/crates/facade/core/src/agentic/tools/implementations/computer_use_actions.rs diff --git a/src/crates/core/src/agentic/tools/implementations/computer_use_input.rs b/src/crates/facade/core/src/agentic/tools/implementations/computer_use_input.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/computer_use_input.rs rename to src/crates/facade/core/src/agentic/tools/implementations/computer_use_input.rs diff --git a/src/crates/core/src/agentic/tools/implementations/computer_use_locate.rs b/src/crates/facade/core/src/agentic/tools/implementations/computer_use_locate.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/computer_use_locate.rs rename to src/crates/facade/core/src/agentic/tools/implementations/computer_use_locate.rs diff --git a/src/crates/core/src/agentic/tools/implementations/computer_use_mouse_click_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/computer_use_mouse_click_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/computer_use_mouse_click_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/computer_use_mouse_click_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/computer_use_mouse_precise_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/computer_use_mouse_precise_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/computer_use_mouse_precise_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/computer_use_mouse_precise_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/computer_use_mouse_step_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/computer_use_mouse_step_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/computer_use_mouse_step_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/computer_use_mouse_step_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/computer_use_result.rs b/src/crates/facade/core/src/agentic/tools/implementations/computer_use_result.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/computer_use_result.rs rename to src/crates/facade/core/src/agentic/tools/implementations/computer_use_result.rs diff --git a/src/crates/core/src/agentic/tools/implementations/computer_use_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/computer_use_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/computer_use_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/computer_use_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/control_hub/errors.rs b/src/crates/facade/core/src/agentic/tools/implementations/control_hub/errors.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/control_hub/errors.rs rename to src/crates/facade/core/src/agentic/tools/implementations/control_hub/errors.rs diff --git a/src/crates/core/src/agentic/tools/implementations/control_hub/mod.rs b/src/crates/facade/core/src/agentic/tools/implementations/control_hub/mod.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/control_hub/mod.rs rename to src/crates/facade/core/src/agentic/tools/implementations/control_hub/mod.rs diff --git a/src/crates/core/src/agentic/tools/implementations/control_hub/result.rs b/src/crates/facade/core/src/agentic/tools/implementations/control_hub/result.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/control_hub/result.rs rename to src/crates/facade/core/src/agentic/tools/implementations/control_hub/result.rs diff --git a/src/crates/core/src/agentic/tools/implementations/control_hub_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/control_hub_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/control_hub_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/control_hub_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/create_plan_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/create_plan_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/create_plan_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/create_plan_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/cron_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/cron_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/cron_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/cron_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/delete_file_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/delete_file_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/delete_file_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/delete_file_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/file_edit_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/file_edit_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/file_edit_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/file_edit_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/file_read_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/file_read_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/file_read_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/file_read_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/file_write_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/file_write_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/file_write_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/file_write_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/generative_ui_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/generative_ui_tool.rs similarity index 99% rename from src/crates/core/src/agentic/tools/implementations/generative_ui_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/generative_ui_tool.rs index 384139858..c004012ba 100644 --- a/src/crates/core/src/agentic/tools/implementations/generative_ui_tool.rs +++ b/src/crates/facade/core/src/agentic/tools/implementations/generative_ui_tool.rs @@ -305,7 +305,7 @@ Input rules: 14. Do not use `parent.postMessage(...)` or custom `onclick` protocols for file opening when `data-file-path` can be attached directly to the clickable element. 15. CRITICAL for codebase maps, repo overviews, and architecture diagrams: NEVER guess or invent paths. Every clickable `data-file-path` MUST point to a REAL file that exists in the workspace. 16. For clickable file navigation, add `data-file-path` on the clickable element itself, and add `data-line` for the exact definition or anchor line whenever the node represents code. -17. `data-file-path` may be workspace-relative such as `src/crates/core/src/lib.rs`, or absolute when already verified, but it MUST resolve to a file, not a directory. +17. `data-file-path` may be workspace-relative such as `src/crates/facade/core/src/lib.rs`, or absolute when already verified, but it MUST resolve to a file, not a directory. 18. Do NOT attach `data-file-path` to abstract grouping nodes such as "Core", "Frontend", "Agent System", or module containers unless that node intentionally opens one specific real file. 19. For codebase architecture diagrams, prefer one clickable node per concrete file. If a node represents a broader concept, package, or directory, leave it non-clickable instead of pointing it at a folder. 20. Workflow for architecture widgets: first verify candidate files with Glob or LS, then use Read with line numbers when needed, and only then emit clickable nodes with verified file paths and lines. diff --git a/src/crates/core/src/agentic/tools/implementations/get_file_diff_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/get_file_diff_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/get_file_diff_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/get_file_diff_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/git_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/git_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/git_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/git_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/glob_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/glob_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/glob_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/glob_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/grep_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/grep_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/grep_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/grep_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/log_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/log_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/log_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/log_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/ls_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/ls_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/ls_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/ls_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/mcp_tools.rs b/src/crates/facade/core/src/agentic/tools/implementations/mcp_tools.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/mcp_tools.rs rename to src/crates/facade/core/src/agentic/tools/implementations/mcp_tools.rs diff --git a/src/crates/core/src/agentic/tools/implementations/miniapp_init_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/miniapp_init_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/miniapp_init_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/miniapp_init_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/mod.rs b/src/crates/facade/core/src/agentic/tools/implementations/mod.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/mod.rs rename to src/crates/facade/core/src/agentic/tools/implementations/mod.rs diff --git a/src/crates/core/src/agentic/tools/implementations/playbook_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/playbook_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/playbook_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/playbook_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/review_platform_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/review_platform_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/review_platform_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/review_platform_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/session_control_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/session_control_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/session_control_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/session_control_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/session_history_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/session_history_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/session_history_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/session_history_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/session_message_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/session_message_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/session_message_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/session_message_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/skill_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/skill_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/skill_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/skill_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/skills/builtin.rs b/src/crates/facade/core/src/agentic/tools/implementations/skills/builtin.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/skills/builtin.rs rename to src/crates/facade/core/src/agentic/tools/implementations/skills/builtin.rs diff --git a/src/crates/core/src/agentic/tools/implementations/skills/catalog.rs b/src/crates/facade/core/src/agentic/tools/implementations/skills/catalog.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/skills/catalog.rs rename to src/crates/facade/core/src/agentic/tools/implementations/skills/catalog.rs diff --git a/src/crates/core/src/agentic/tools/implementations/skills/mod.rs b/src/crates/facade/core/src/agentic/tools/implementations/skills/mod.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/skills/mod.rs rename to src/crates/facade/core/src/agentic/tools/implementations/skills/mod.rs diff --git a/src/crates/core/src/agentic/tools/implementations/skills/mode_overrides.rs b/src/crates/facade/core/src/agentic/tools/implementations/skills/mode_overrides.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/skills/mode_overrides.rs rename to src/crates/facade/core/src/agentic/tools/implementations/skills/mode_overrides.rs diff --git a/src/crates/core/src/agentic/tools/implementations/skills/policy.rs b/src/crates/facade/core/src/agentic/tools/implementations/skills/policy.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/skills/policy.rs rename to src/crates/facade/core/src/agentic/tools/implementations/skills/policy.rs diff --git a/src/crates/core/src/agentic/tools/implementations/skills/registry.rs b/src/crates/facade/core/src/agentic/tools/implementations/skills/registry.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/skills/registry.rs rename to src/crates/facade/core/src/agentic/tools/implementations/skills/registry.rs diff --git a/src/crates/core/src/agentic/tools/implementations/skills/resolver.rs b/src/crates/facade/core/src/agentic/tools/implementations/skills/resolver.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/skills/resolver.rs rename to src/crates/facade/core/src/agentic/tools/implementations/skills/resolver.rs diff --git a/src/crates/core/src/agentic/tools/implementations/skills/types.rs b/src/crates/facade/core/src/agentic/tools/implementations/skills/types.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/skills/types.rs rename to src/crates/facade/core/src/agentic/tools/implementations/skills/types.rs diff --git a/src/crates/core/src/agentic/tools/implementations/task_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs similarity index 99% rename from src/crates/core/src/agentic/tools/implementations/task_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs index 1a8965ed0..29c42fb93 100644 --- a/src/crates/core/src/agentic/tools/implementations/task_tool.rs +++ b/src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs @@ -2812,8 +2812,8 @@ mod tests { "timeoutSeconds": 600, "assignedScope": { "files": [ - "src/crates/core/src/auth.rs", - "src/crates/core/src/token.rs" + "src/crates/facade/core/src/auth.rs", + "src/crates/facade/core/src/token.rs" ] } } @@ -2841,8 +2841,8 @@ mod tests { "timeoutSeconds": 600, "assignedScope": { "files": [ - "src/crates/core/src/auth.rs", - "src/crates/core/src/token.rs" + "src/crates/facade/core/src/auth.rs", + "src/crates/facade/core/src/token.rs" ] } } @@ -2855,11 +2855,11 @@ mod tests { "source_packet_id": "reviewer:ReviewSecurity:group-1-of-1", "source_status": "partial_timeout", "covered_files": [ - "src/crates/core/src/auth.rs" + "src/crates/facade/core/src/auth.rs" ], "retry_scope_files": [ - "src/crates/core/src/auth.rs", - "src/crates/core/src/token.rs" + "src/crates/facade/core/src/auth.rs", + "src/crates/facade/core/src/token.rs" ] } }); @@ -2882,8 +2882,8 @@ mod tests { "timeoutSeconds": 600, "assignedScope": { "files": [ - "src/crates/core/src/auth.rs", - "src/crates/core/src/token.rs" + "src/crates/facade/core/src/auth.rs", + "src/crates/facade/core/src/token.rs" ] } } @@ -2896,10 +2896,10 @@ mod tests { "source_packet_id": "reviewer:ReviewSecurity:group-1-of-1", "source_status": "partial_timeout", "covered_files": [ - "src/crates/core/src/auth.rs" + "src/crates/facade/core/src/auth.rs" ], "retry_scope_files": [ - "src/crates/core/src/token.rs" + "src/crates/facade/core/src/token.rs" ] } }); @@ -2922,8 +2922,8 @@ mod tests { "timeoutSeconds": 600, "assignedScope": { "files": [ - "src/crates/core/src/auth.rs", - "src/crates/core/src/token.rs" + "src/crates/facade/core/src/auth.rs", + "src/crates/facade/core/src/token.rs" ] } } @@ -2937,7 +2937,7 @@ mod tests { "capacity_reason": "auth_error", "covered_files": [], "retry_scope_files": [ - "src/crates/core/src/token.rs" + "src/crates/facade/core/src/token.rs" ] } }); @@ -3348,8 +3348,8 @@ mod tests { "timeoutSeconds": 600, "assignedScope": { "files": [ - "src/crates/core/src/auth.rs", - "src/crates/core/src/token.rs" + "src/crates/facade/core/src/auth.rs", + "src/crates/facade/core/src/token.rs" ] } } @@ -3362,10 +3362,10 @@ mod tests { "source_packet_id": "reviewer:ReviewSecurity:group-1-of-1", "source_status": "partial_timeout", "covered_files": [ - "src/crates/core/src/auth.rs" + "src/crates/facade/core/src/auth.rs" ], "retry_scope_files": [ - "src/crates/core/src/token.rs" + "src/crates/facade/core/src/token.rs" ] } }); @@ -3374,19 +3374,19 @@ mod tests { TaskTool::ensure_deep_review_retry_coverage(&input, "ReviewSecurity", Some(&manifest)) .expect("reduced retry scope should be accepted"); - assert_eq!(retry_scope, vec!["src/crates/core/src/token.rs"]); + assert_eq!(retry_scope, vec!["src/crates/facade/core/src/token.rs"]); } #[test] fn deep_review_retry_scope_prompt_prepend_bounds_review_files() { let prompt = TaskTool::prompt_with_deep_review_retry_scope( "Continue the security review.", - &["src/crates/core/src/token.rs".to_string()], + &["src/crates/facade/core/src/token.rs".to_string()], ); assert!(prompt.starts_with("")); assert!(prompt.contains("Review only the following retry_scope_files")); - assert!(prompt.contains("- src/crates/core/src/token.rs")); + assert!(prompt.contains("- src/crates/facade/core/src/token.rs")); assert!(prompt.ends_with("Continue the security review.")); } } diff --git a/src/crates/core/src/agentic/tools/implementations/terminal_control_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/terminal_control_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/terminal_control_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/terminal_control_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/thread_goal_tools.rs b/src/crates/facade/core/src/agentic/tools/implementations/thread_goal_tools.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/thread_goal_tools.rs rename to src/crates/facade/core/src/agentic/tools/implementations/thread_goal_tools.rs diff --git a/src/crates/core/src/agentic/tools/implementations/todo_write_tool.rs b/src/crates/facade/core/src/agentic/tools/implementations/todo_write_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/todo_write_tool.rs rename to src/crates/facade/core/src/agentic/tools/implementations/todo_write_tool.rs diff --git a/src/crates/core/src/agentic/tools/implementations/util.rs b/src/crates/facade/core/src/agentic/tools/implementations/util.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/util.rs rename to src/crates/facade/core/src/agentic/tools/implementations/util.rs diff --git a/src/crates/core/src/agentic/tools/implementations/web_tools.rs b/src/crates/facade/core/src/agentic/tools/implementations/web_tools.rs similarity index 100% rename from src/crates/core/src/agentic/tools/implementations/web_tools.rs rename to src/crates/facade/core/src/agentic/tools/implementations/web_tools.rs diff --git a/src/crates/core/src/agentic/tools/manifest_resolver.rs b/src/crates/facade/core/src/agentic/tools/manifest_resolver.rs similarity index 100% rename from src/crates/core/src/agentic/tools/manifest_resolver.rs rename to src/crates/facade/core/src/agentic/tools/manifest_resolver.rs diff --git a/src/crates/core/src/agentic/tools/mod.rs b/src/crates/facade/core/src/agentic/tools/mod.rs similarity index 100% rename from src/crates/core/src/agentic/tools/mod.rs rename to src/crates/facade/core/src/agentic/tools/mod.rs diff --git a/src/crates/core/src/agentic/tools/pipeline/mod.rs b/src/crates/facade/core/src/agentic/tools/pipeline/mod.rs similarity index 100% rename from src/crates/core/src/agentic/tools/pipeline/mod.rs rename to src/crates/facade/core/src/agentic/tools/pipeline/mod.rs diff --git a/src/crates/core/src/agentic/tools/pipeline/state_manager.rs b/src/crates/facade/core/src/agentic/tools/pipeline/state_manager.rs similarity index 100% rename from src/crates/core/src/agentic/tools/pipeline/state_manager.rs rename to src/crates/facade/core/src/agentic/tools/pipeline/state_manager.rs diff --git a/src/crates/core/src/agentic/tools/pipeline/tool_pipeline.rs b/src/crates/facade/core/src/agentic/tools/pipeline/tool_pipeline.rs similarity index 100% rename from src/crates/core/src/agentic/tools/pipeline/tool_pipeline.rs rename to src/crates/facade/core/src/agentic/tools/pipeline/tool_pipeline.rs diff --git a/src/crates/core/src/agentic/tools/pipeline/types.rs b/src/crates/facade/core/src/agentic/tools/pipeline/types.rs similarity index 100% rename from src/crates/core/src/agentic/tools/pipeline/types.rs rename to src/crates/facade/core/src/agentic/tools/pipeline/types.rs diff --git a/src/crates/core/src/agentic/tools/post_call_hooks.rs b/src/crates/facade/core/src/agentic/tools/post_call_hooks.rs similarity index 100% rename from src/crates/core/src/agentic/tools/post_call_hooks.rs rename to src/crates/facade/core/src/agentic/tools/post_call_hooks.rs diff --git a/src/crates/core/src/agentic/tools/product_runtime.rs b/src/crates/facade/core/src/agentic/tools/product_runtime.rs similarity index 100% rename from src/crates/core/src/agentic/tools/product_runtime.rs rename to src/crates/facade/core/src/agentic/tools/product_runtime.rs diff --git a/src/crates/core/src/agentic/tools/product_runtime/catalog.rs b/src/crates/facade/core/src/agentic/tools/product_runtime/catalog.rs similarity index 100% rename from src/crates/core/src/agentic/tools/product_runtime/catalog.rs rename to src/crates/facade/core/src/agentic/tools/product_runtime/catalog.rs diff --git a/src/crates/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs b/src/crates/facade/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs similarity index 100% rename from src/crates/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs rename to src/crates/facade/core/src/agentic/tools/product_runtime/get_tool_spec_tool.rs diff --git a/src/crates/core/src/agentic/tools/product_runtime/materialization.rs b/src/crates/facade/core/src/agentic/tools/product_runtime/materialization.rs similarity index 100% rename from src/crates/core/src/agentic/tools/product_runtime/materialization.rs rename to src/crates/facade/core/src/agentic/tools/product_runtime/materialization.rs diff --git a/src/crates/core/src/agentic/tools/product_runtime/snapshot.rs b/src/crates/facade/core/src/agentic/tools/product_runtime/snapshot.rs similarity index 100% rename from src/crates/core/src/agentic/tools/product_runtime/snapshot.rs rename to src/crates/facade/core/src/agentic/tools/product_runtime/snapshot.rs diff --git a/src/crates/core/src/agentic/tools/product_runtime/unlock_state.rs b/src/crates/facade/core/src/agentic/tools/product_runtime/unlock_state.rs similarity index 100% rename from src/crates/core/src/agentic/tools/product_runtime/unlock_state.rs rename to src/crates/facade/core/src/agentic/tools/product_runtime/unlock_state.rs diff --git a/src/crates/core/src/agentic/tools/registry.rs b/src/crates/facade/core/src/agentic/tools/registry.rs similarity index 100% rename from src/crates/core/src/agentic/tools/registry.rs rename to src/crates/facade/core/src/agentic/tools/registry.rs diff --git a/src/crates/core/src/agentic/tools/restrictions.rs b/src/crates/facade/core/src/agentic/tools/restrictions.rs similarity index 98% rename from src/crates/core/src/agentic/tools/restrictions.rs rename to src/crates/facade/core/src/agentic/tools/restrictions.rs index 9474f8e5b..91ccaea63 100644 --- a/src/crates/core/src/agentic/tools/restrictions.rs +++ b/src/crates/facade/core/src/agentic/tools/restrictions.rs @@ -117,8 +117,7 @@ mod tests { let error: BitFunError = ToolRestrictionError::Denied { tool_name: "Task".to_string(), message: Some( - "Recursive subagent delegation is blocked. Use direct tools instead." - .to_string(), + "Recursive subagent delegation is blocked. Use direct tools instead.".to_string(), ), } .into(); diff --git a/src/crates/core/src/agentic/tools/tool_adapter.rs b/src/crates/facade/core/src/agentic/tools/tool_adapter.rs similarity index 100% rename from src/crates/core/src/agentic/tools/tool_adapter.rs rename to src/crates/facade/core/src/agentic/tools/tool_adapter.rs diff --git a/src/crates/core/src/agentic/tools/tool_context_runtime.rs b/src/crates/facade/core/src/agentic/tools/tool_context_runtime.rs similarity index 100% rename from src/crates/core/src/agentic/tools/tool_context_runtime.rs rename to src/crates/facade/core/src/agentic/tools/tool_context_runtime.rs diff --git a/src/crates/core/src/agentic/tools/tool_result_storage.rs b/src/crates/facade/core/src/agentic/tools/tool_result_storage.rs similarity index 100% rename from src/crates/core/src/agentic/tools/tool_result_storage.rs rename to src/crates/facade/core/src/agentic/tools/tool_result_storage.rs diff --git a/src/crates/core/src/agentic/tools/user_input_manager.rs b/src/crates/facade/core/src/agentic/tools/user_input_manager.rs similarity index 100% rename from src/crates/core/src/agentic/tools/user_input_manager.rs rename to src/crates/facade/core/src/agentic/tools/user_input_manager.rs diff --git a/src/crates/core/src/agentic/tools/workspace_paths.rs b/src/crates/facade/core/src/agentic/tools/workspace_paths.rs similarity index 100% rename from src/crates/core/src/agentic/tools/workspace_paths.rs rename to src/crates/facade/core/src/agentic/tools/workspace_paths.rs diff --git a/src/crates/core/src/agentic/util/mod.rs b/src/crates/facade/core/src/agentic/util/mod.rs similarity index 100% rename from src/crates/core/src/agentic/util/mod.rs rename to src/crates/facade/core/src/agentic/util/mod.rs diff --git a/src/crates/core/src/agentic/util/remote_workspace_layout.rs b/src/crates/facade/core/src/agentic/util/remote_workspace_layout.rs similarity index 100% rename from src/crates/core/src/agentic/util/remote_workspace_layout.rs rename to src/crates/facade/core/src/agentic/util/remote_workspace_layout.rs diff --git a/src/crates/core/src/agentic/workspace.rs b/src/crates/facade/core/src/agentic/workspace.rs similarity index 100% rename from src/crates/core/src/agentic/workspace.rs rename to src/crates/facade/core/src/agentic/workspace.rs diff --git a/src/crates/core/src/function_agents/git-func-agent/ai_service.rs b/src/crates/facade/core/src/function_agents/git-func-agent/ai_service.rs similarity index 100% rename from src/crates/core/src/function_agents/git-func-agent/ai_service.rs rename to src/crates/facade/core/src/function_agents/git-func-agent/ai_service.rs diff --git a/src/crates/core/src/function_agents/git-func-agent/commit_generator.rs b/src/crates/facade/core/src/function_agents/git-func-agent/commit_generator.rs similarity index 100% rename from src/crates/core/src/function_agents/git-func-agent/commit_generator.rs rename to src/crates/facade/core/src/function_agents/git-func-agent/commit_generator.rs diff --git a/src/crates/core/src/function_agents/git-func-agent/context_analyzer.rs b/src/crates/facade/core/src/function_agents/git-func-agent/context_analyzer.rs similarity index 100% rename from src/crates/core/src/function_agents/git-func-agent/context_analyzer.rs rename to src/crates/facade/core/src/function_agents/git-func-agent/context_analyzer.rs diff --git a/src/crates/core/src/function_agents/git-func-agent/mod.rs b/src/crates/facade/core/src/function_agents/git-func-agent/mod.rs similarity index 100% rename from src/crates/core/src/function_agents/git-func-agent/mod.rs rename to src/crates/facade/core/src/function_agents/git-func-agent/mod.rs diff --git a/src/crates/core/src/function_agents/git-func-agent/utils.rs b/src/crates/facade/core/src/function_agents/git-func-agent/utils.rs similarity index 100% rename from src/crates/core/src/function_agents/git-func-agent/utils.rs rename to src/crates/facade/core/src/function_agents/git-func-agent/utils.rs diff --git a/src/crates/core/src/function_agents/mod.rs b/src/crates/facade/core/src/function_agents/mod.rs similarity index 100% rename from src/crates/core/src/function_agents/mod.rs rename to src/crates/facade/core/src/function_agents/mod.rs diff --git a/src/crates/core/src/function_agents/port_adapters.rs b/src/crates/facade/core/src/function_agents/port_adapters.rs similarity index 100% rename from src/crates/core/src/function_agents/port_adapters.rs rename to src/crates/facade/core/src/function_agents/port_adapters.rs diff --git a/src/crates/core/src/function_agents/runtime_services.rs b/src/crates/facade/core/src/function_agents/runtime_services.rs similarity index 100% rename from src/crates/core/src/function_agents/runtime_services.rs rename to src/crates/facade/core/src/function_agents/runtime_services.rs diff --git a/src/crates/core/src/function_agents/startchat-func-agent/ai_service.rs b/src/crates/facade/core/src/function_agents/startchat-func-agent/ai_service.rs similarity index 100% rename from src/crates/core/src/function_agents/startchat-func-agent/ai_service.rs rename to src/crates/facade/core/src/function_agents/startchat-func-agent/ai_service.rs diff --git a/src/crates/core/src/function_agents/startchat-func-agent/mod.rs b/src/crates/facade/core/src/function_agents/startchat-func-agent/mod.rs similarity index 100% rename from src/crates/core/src/function_agents/startchat-func-agent/mod.rs rename to src/crates/facade/core/src/function_agents/startchat-func-agent/mod.rs diff --git a/src/crates/core/src/function_agents/startchat-func-agent/utils.rs b/src/crates/facade/core/src/function_agents/startchat-func-agent/utils.rs similarity index 100% rename from src/crates/core/src/function_agents/startchat-func-agent/utils.rs rename to src/crates/facade/core/src/function_agents/startchat-func-agent/utils.rs diff --git a/src/crates/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs b/src/crates/facade/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs similarity index 100% rename from src/crates/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs rename to src/crates/facade/core/src/function_agents/startchat-func-agent/work_state_analyzer.rs diff --git a/src/crates/core/src/infrastructure/ai/client_factory.rs b/src/crates/facade/core/src/infrastructure/ai/client_factory.rs similarity index 100% rename from src/crates/core/src/infrastructure/ai/client_factory.rs rename to src/crates/facade/core/src/infrastructure/ai/client_factory.rs diff --git a/src/crates/core/src/infrastructure/ai/mod.rs b/src/crates/facade/core/src/infrastructure/ai/mod.rs similarity index 100% rename from src/crates/core/src/infrastructure/ai/mod.rs rename to src/crates/facade/core/src/infrastructure/ai/mod.rs diff --git a/src/crates/core/src/infrastructure/ai/tool_call_accumulator.rs b/src/crates/facade/core/src/infrastructure/ai/tool_call_accumulator.rs similarity index 100% rename from src/crates/core/src/infrastructure/ai/tool_call_accumulator.rs rename to src/crates/facade/core/src/infrastructure/ai/tool_call_accumulator.rs diff --git a/src/crates/core/src/infrastructure/app_paths/mod.rs b/src/crates/facade/core/src/infrastructure/app_paths/mod.rs similarity index 100% rename from src/crates/core/src/infrastructure/app_paths/mod.rs rename to src/crates/facade/core/src/infrastructure/app_paths/mod.rs diff --git a/src/crates/core/src/infrastructure/app_paths/path_manager.rs b/src/crates/facade/core/src/infrastructure/app_paths/path_manager.rs similarity index 100% rename from src/crates/core/src/infrastructure/app_paths/path_manager.rs rename to src/crates/facade/core/src/infrastructure/app_paths/path_manager.rs diff --git a/src/crates/core/src/infrastructure/cli_credentials/codex.rs b/src/crates/facade/core/src/infrastructure/cli_credentials/codex.rs similarity index 100% rename from src/crates/core/src/infrastructure/cli_credentials/codex.rs rename to src/crates/facade/core/src/infrastructure/cli_credentials/codex.rs diff --git a/src/crates/core/src/infrastructure/cli_credentials/gemini.rs b/src/crates/facade/core/src/infrastructure/cli_credentials/gemini.rs similarity index 100% rename from src/crates/core/src/infrastructure/cli_credentials/gemini.rs rename to src/crates/facade/core/src/infrastructure/cli_credentials/gemini.rs diff --git a/src/crates/core/src/infrastructure/cli_credentials/mod.rs b/src/crates/facade/core/src/infrastructure/cli_credentials/mod.rs similarity index 100% rename from src/crates/core/src/infrastructure/cli_credentials/mod.rs rename to src/crates/facade/core/src/infrastructure/cli_credentials/mod.rs diff --git a/src/crates/core/src/infrastructure/debug_log/http_server.rs b/src/crates/facade/core/src/infrastructure/debug_log/http_server.rs similarity index 100% rename from src/crates/core/src/infrastructure/debug_log/http_server.rs rename to src/crates/facade/core/src/infrastructure/debug_log/http_server.rs diff --git a/src/crates/core/src/infrastructure/debug_log/mod.rs b/src/crates/facade/core/src/infrastructure/debug_log/mod.rs similarity index 100% rename from src/crates/core/src/infrastructure/debug_log/mod.rs rename to src/crates/facade/core/src/infrastructure/debug_log/mod.rs diff --git a/src/crates/core/src/infrastructure/debug_log/types.rs b/src/crates/facade/core/src/infrastructure/debug_log/types.rs similarity index 100% rename from src/crates/core/src/infrastructure/debug_log/types.rs rename to src/crates/facade/core/src/infrastructure/debug_log/types.rs diff --git a/src/crates/core/src/infrastructure/events/emitter.rs b/src/crates/facade/core/src/infrastructure/events/emitter.rs similarity index 100% rename from src/crates/core/src/infrastructure/events/emitter.rs rename to src/crates/facade/core/src/infrastructure/events/emitter.rs diff --git a/src/crates/core/src/infrastructure/events/event_system.rs b/src/crates/facade/core/src/infrastructure/events/event_system.rs similarity index 100% rename from src/crates/core/src/infrastructure/events/event_system.rs rename to src/crates/facade/core/src/infrastructure/events/event_system.rs diff --git a/src/crates/core/src/infrastructure/events/mod.rs b/src/crates/facade/core/src/infrastructure/events/mod.rs similarity index 100% rename from src/crates/core/src/infrastructure/events/mod.rs rename to src/crates/facade/core/src/infrastructure/events/mod.rs diff --git a/src/crates/core/src/infrastructure/filesystem/mod.rs b/src/crates/facade/core/src/infrastructure/filesystem/mod.rs similarity index 100% rename from src/crates/core/src/infrastructure/filesystem/mod.rs rename to src/crates/facade/core/src/infrastructure/filesystem/mod.rs diff --git a/src/crates/core/src/infrastructure/mod.rs b/src/crates/facade/core/src/infrastructure/mod.rs similarity index 100% rename from src/crates/core/src/infrastructure/mod.rs rename to src/crates/facade/core/src/infrastructure/mod.rs diff --git a/src/crates/core/src/infrastructure/storage/cleanup.rs b/src/crates/facade/core/src/infrastructure/storage/cleanup.rs similarity index 100% rename from src/crates/core/src/infrastructure/storage/cleanup.rs rename to src/crates/facade/core/src/infrastructure/storage/cleanup.rs diff --git a/src/crates/core/src/infrastructure/storage/mod.rs b/src/crates/facade/core/src/infrastructure/storage/mod.rs similarity index 100% rename from src/crates/core/src/infrastructure/storage/mod.rs rename to src/crates/facade/core/src/infrastructure/storage/mod.rs diff --git a/src/crates/core/src/infrastructure/storage/persistence.rs b/src/crates/facade/core/src/infrastructure/storage/persistence.rs similarity index 100% rename from src/crates/core/src/infrastructure/storage/persistence.rs rename to src/crates/facade/core/src/infrastructure/storage/persistence.rs diff --git a/src/crates/core/src/lib.rs b/src/crates/facade/core/src/lib.rs similarity index 97% rename from src/crates/core/src/lib.rs rename to src/crates/facade/core/src/lib.rs index 3aba81ac3..11c42c70f 100644 --- a/src/crates/core/src/lib.rs +++ b/src/crates/facade/core/src/lib.rs @@ -16,6 +16,8 @@ pub mod miniapp; // AI-generated instant apps (Zero-Dialect Runtime) pub mod product_assembly; #[cfg(feature = "product-domains")] pub(crate) mod product_domain_runtime; +#[cfg(feature = "product-full")] +pub mod product_runtime; pub mod service; // Workspace, Config, FileSystem, Terminal, Git #[cfg(feature = "service-integrations")] pub(crate) mod service_agent_runtime; diff --git a/src/crates/core/src/miniapp/builtin/mod.rs b/src/crates/facade/core/src/miniapp/builtin/mod.rs similarity index 100% rename from src/crates/core/src/miniapp/builtin/mod.rs rename to src/crates/facade/core/src/miniapp/builtin/mod.rs diff --git a/src/crates/core/src/miniapp/compiler.rs b/src/crates/facade/core/src/miniapp/compiler.rs similarity index 100% rename from src/crates/core/src/miniapp/compiler.rs rename to src/crates/facade/core/src/miniapp/compiler.rs diff --git a/src/crates/core/src/miniapp/exporter.rs b/src/crates/facade/core/src/miniapp/exporter.rs similarity index 100% rename from src/crates/core/src/miniapp/exporter.rs rename to src/crates/facade/core/src/miniapp/exporter.rs diff --git a/src/crates/core/src/miniapp/host_dispatch.rs b/src/crates/facade/core/src/miniapp/host_dispatch.rs similarity index 100% rename from src/crates/core/src/miniapp/host_dispatch.rs rename to src/crates/facade/core/src/miniapp/host_dispatch.rs diff --git a/src/crates/core/src/miniapp/js_worker.rs b/src/crates/facade/core/src/miniapp/js_worker.rs similarity index 100% rename from src/crates/core/src/miniapp/js_worker.rs rename to src/crates/facade/core/src/miniapp/js_worker.rs diff --git a/src/crates/core/src/miniapp/js_worker_pool.rs b/src/crates/facade/core/src/miniapp/js_worker_pool.rs similarity index 100% rename from src/crates/core/src/miniapp/js_worker_pool.rs rename to src/crates/facade/core/src/miniapp/js_worker_pool.rs diff --git a/src/crates/core/src/miniapp/manager.rs b/src/crates/facade/core/src/miniapp/manager.rs similarity index 100% rename from src/crates/core/src/miniapp/manager.rs rename to src/crates/facade/core/src/miniapp/manager.rs diff --git a/src/crates/core/src/miniapp/mod.rs b/src/crates/facade/core/src/miniapp/mod.rs similarity index 100% rename from src/crates/core/src/miniapp/mod.rs rename to src/crates/facade/core/src/miniapp/mod.rs diff --git a/src/crates/core/src/miniapp/runtime_detect.rs b/src/crates/facade/core/src/miniapp/runtime_detect.rs similarity index 100% rename from src/crates/core/src/miniapp/runtime_detect.rs rename to src/crates/facade/core/src/miniapp/runtime_detect.rs diff --git a/src/crates/core/src/miniapp/storage.rs b/src/crates/facade/core/src/miniapp/storage.rs similarity index 100% rename from src/crates/core/src/miniapp/storage.rs rename to src/crates/facade/core/src/miniapp/storage.rs diff --git a/src/crates/facade/core/src/product_assembly.rs b/src/crates/facade/core/src/product_assembly.rs new file mode 100644 index 000000000..e2d19b2d5 --- /dev/null +++ b/src/crates/facade/core/src/product_assembly.rs @@ -0,0 +1,16 @@ +//! Product assembly compatibility facade. +//! +//! Provider-neutral product assembly facts are owned by +//! `bitfun-product-capabilities`. Core-specific runtime service adapters live +//! under `product_runtime`. + +pub use bitfun_product_capabilities::{ + default_product_assembly_plan, default_product_capability_assembly, + default_product_capability_registry, default_product_harness_registry, + product_assembly_plan_for_profile, DeliveryProfile, ProductAssemblyPlan, + ProductCapabilityAssembly, ProductCapabilityId, ProductCapabilityPack, + ProductCapabilityRegistry, ProductCapabilitySet, ProductServiceCapabilityAvailability, + ProductServiceCapabilityRequirement, ProductServiceCapabilityStatus, +}; + +pub use crate::product_runtime::CoreRuntimeServicesProvider; diff --git a/src/crates/core/src/product_domain_runtime.rs b/src/crates/facade/core/src/product_domain_runtime.rs similarity index 100% rename from src/crates/core/src/product_domain_runtime.rs rename to src/crates/facade/core/src/product_domain_runtime.rs diff --git a/src/crates/facade/core/src/product_runtime.rs b/src/crates/facade/core/src/product_runtime.rs new file mode 100644 index 000000000..e5ce8b95e --- /dev/null +++ b/src/crates/facade/core/src/product_runtime.rs @@ -0,0 +1,9 @@ +//! Core product-full runtime adapter boundary. +//! +//! This module owns core-specific adapter wiring that still depends on existing +//! concrete core paths. Provider-neutral product assembly facts live in +//! `bitfun-product-capabilities`. + +mod runtime_services; + +pub use runtime_services::CoreRuntimeServicesProvider; diff --git a/src/crates/core/src/product_assembly.rs b/src/crates/facade/core/src/product_runtime/runtime_services.rs similarity index 95% rename from src/crates/core/src/product_assembly.rs rename to src/crates/facade/core/src/product_runtime/runtime_services.rs index aa2acdac3..2438f4f0b 100644 --- a/src/crates/core/src/product_assembly.rs +++ b/src/crates/facade/core/src/product_runtime/runtime_services.rs @@ -1,6 +1,6 @@ -//! Product assembly compatibility boundary for the full core runtime. +//! Core product-full runtime service adapters. //! -//! This module registers existing core concrete adapters into typed runtime +//! This file registers existing core concrete adapters into typed runtime //! service builders. It does not create new runtime behavior. use std::sync::Arc; diff --git a/src/crates/core/src/service/agent_memory/auto_memory.rs b/src/crates/facade/core/src/service/agent_memory/auto_memory.rs similarity index 100% rename from src/crates/core/src/service/agent_memory/auto_memory.rs rename to src/crates/facade/core/src/service/agent_memory/auto_memory.rs diff --git a/src/crates/core/src/service/agent_memory/instruction_context.rs b/src/crates/facade/core/src/service/agent_memory/instruction_context.rs similarity index 100% rename from src/crates/core/src/service/agent_memory/instruction_context.rs rename to src/crates/facade/core/src/service/agent_memory/instruction_context.rs diff --git a/src/crates/core/src/service/agent_memory/mod.rs b/src/crates/facade/core/src/service/agent_memory/mod.rs similarity index 100% rename from src/crates/core/src/service/agent_memory/mod.rs rename to src/crates/facade/core/src/service/agent_memory/mod.rs diff --git a/src/crates/core/src/service/announcement/content/features/en-US/shortcuts_v0_2_2.md b/src/crates/facade/core/src/service/announcement/content/features/en-US/shortcuts_v0_2_2.md similarity index 100% rename from src/crates/core/src/service/announcement/content/features/en-US/shortcuts_v0_2_2.md rename to src/crates/facade/core/src/service/announcement/content/features/en-US/shortcuts_v0_2_2.md diff --git a/src/crates/core/src/service/announcement/content/features/zh-CN/shortcuts_v0_2_2.md b/src/crates/facade/core/src/service/announcement/content/features/zh-CN/shortcuts_v0_2_2.md similarity index 100% rename from src/crates/core/src/service/announcement/content/features/zh-CN/shortcuts_v0_2_2.md rename to src/crates/facade/core/src/service/announcement/content/features/zh-CN/shortcuts_v0_2_2.md diff --git a/src/crates/core/src/service/announcement/content/features/zh-TW/shortcuts_v0_2_2.md b/src/crates/facade/core/src/service/announcement/content/features/zh-TW/shortcuts_v0_2_2.md similarity index 100% rename from src/crates/core/src/service/announcement/content/features/zh-TW/shortcuts_v0_2_2.md rename to src/crates/facade/core/src/service/announcement/content/features/zh-TW/shortcuts_v0_2_2.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/001_vibe_describe_task.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/001_vibe_describe_task.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/001_vibe_describe_task.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/001_vibe_describe_task.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/002_quick_scene_switch.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/002_quick_scene_switch.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/002_quick_scene_switch.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/002_quick_scene_switch.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/003_vibe_file_reference.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/003_vibe_file_reference.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/003_vibe_file_reference.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/003_vibe_file_reference.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/004_slash_commands.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/004_slash_commands.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/004_slash_commands.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/004_slash_commands.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/005_vibe_break_tasks.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/005_vibe_break_tasks.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/005_vibe_break_tasks.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/005_vibe_break_tasks.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/006_drag_file_context.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/006_drag_file_context.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/006_drag_file_context.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/006_drag_file_context.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/007_vibe_iterate.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/007_vibe_iterate.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/007_vibe_iterate.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/007_vibe_iterate.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/008_git_ai_commit.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/008_git_ai_commit.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/008_git_ai_commit.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/008_git_ai_commit.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/009_vibe_multi_turn.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/009_vibe_multi_turn.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/009_vibe_multi_turn.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/009_vibe_multi_turn.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/010_multi_model.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/010_multi_model.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/010_multi_model.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/010_multi_model.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/011_vibe_explain.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/011_vibe_explain.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/011_vibe_explain.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/011_vibe_explain.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/012_vibe_context_window.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/012_vibe_context_window.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/012_vibe_context_window.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/012_vibe_context_window.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/013_miniapp.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/013_miniapp.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/013_miniapp.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/013_miniapp.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/014_vibe_prompt_patterns.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/014_vibe_prompt_patterns.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/014_vibe_prompt_patterns.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/014_vibe_prompt_patterns.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/015_snapshot_rollback.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/015_snapshot_rollback.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/015_snapshot_rollback.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/015_snapshot_rollback.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/016_vibe_review_output.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/016_vibe_review_output.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/016_vibe_review_output.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/016_vibe_review_output.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/017_terminal_shortcut.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/017_terminal_shortcut.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/017_terminal_shortcut.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/017_terminal_shortcut.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/020_lsp_diagnostics.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/020_lsp_diagnostics.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/020_lsp_diagnostics.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/020_lsp_diagnostics.md diff --git a/src/crates/core/src/service/announcement/content/tips/en-US/021_session_history.md b/src/crates/facade/core/src/service/announcement/content/tips/en-US/021_session_history.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/en-US/021_session_history.md rename to src/crates/facade/core/src/service/announcement/content/tips/en-US/021_session_history.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/001_vibe_describe_task.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/001_vibe_describe_task.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/001_vibe_describe_task.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/001_vibe_describe_task.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/002_quick_scene_switch.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/002_quick_scene_switch.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/002_quick_scene_switch.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/002_quick_scene_switch.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/003_vibe_file_reference.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/003_vibe_file_reference.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/003_vibe_file_reference.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/003_vibe_file_reference.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/004_slash_commands.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/004_slash_commands.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/004_slash_commands.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/004_slash_commands.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/005_vibe_break_tasks.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/005_vibe_break_tasks.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/005_vibe_break_tasks.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/005_vibe_break_tasks.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/006_drag_file_context.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/006_drag_file_context.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/006_drag_file_context.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/006_drag_file_context.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/007_vibe_iterate.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/007_vibe_iterate.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/007_vibe_iterate.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/007_vibe_iterate.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/008_git_ai_commit.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/008_git_ai_commit.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/008_git_ai_commit.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/008_git_ai_commit.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/009_vibe_multi_turn.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/009_vibe_multi_turn.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/009_vibe_multi_turn.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/009_vibe_multi_turn.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/010_multi_model.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/010_multi_model.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/010_multi_model.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/010_multi_model.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/011_vibe_explain.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/011_vibe_explain.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/011_vibe_explain.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/011_vibe_explain.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/012_vibe_context_window.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/012_vibe_context_window.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/012_vibe_context_window.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/012_vibe_context_window.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/013_miniapp.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/013_miniapp.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/013_miniapp.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/013_miniapp.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/014_vibe_prompt_patterns.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/014_vibe_prompt_patterns.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/014_vibe_prompt_patterns.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/014_vibe_prompt_patterns.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/015_snapshot_rollback.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/015_snapshot_rollback.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/015_snapshot_rollback.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/015_snapshot_rollback.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/016_vibe_review_output.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/016_vibe_review_output.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/016_vibe_review_output.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/016_vibe_review_output.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/017_terminal_shortcut.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/017_terminal_shortcut.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/017_terminal_shortcut.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/017_terminal_shortcut.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/020_lsp_diagnostics.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/020_lsp_diagnostics.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/020_lsp_diagnostics.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/020_lsp_diagnostics.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-CN/021_session_history.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-CN/021_session_history.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-CN/021_session_history.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-CN/021_session_history.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/001_vibe_describe_task.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/001_vibe_describe_task.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/001_vibe_describe_task.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/001_vibe_describe_task.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/002_quick_scene_switch.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/002_quick_scene_switch.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/002_quick_scene_switch.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/002_quick_scene_switch.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/003_vibe_file_reference.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/003_vibe_file_reference.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/003_vibe_file_reference.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/003_vibe_file_reference.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/004_slash_commands.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/004_slash_commands.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/004_slash_commands.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/004_slash_commands.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/005_vibe_break_tasks.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/005_vibe_break_tasks.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/005_vibe_break_tasks.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/005_vibe_break_tasks.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/006_drag_file_context.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/006_drag_file_context.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/006_drag_file_context.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/006_drag_file_context.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/007_vibe_iterate.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/007_vibe_iterate.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/007_vibe_iterate.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/007_vibe_iterate.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/008_git_ai_commit.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/008_git_ai_commit.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/008_git_ai_commit.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/008_git_ai_commit.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/009_vibe_multi_turn.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/009_vibe_multi_turn.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/009_vibe_multi_turn.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/009_vibe_multi_turn.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/010_multi_model.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/010_multi_model.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/010_multi_model.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/010_multi_model.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/011_vibe_explain.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/011_vibe_explain.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/011_vibe_explain.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/011_vibe_explain.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/012_vibe_context_window.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/012_vibe_context_window.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/012_vibe_context_window.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/012_vibe_context_window.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/013_miniapp.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/013_miniapp.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/013_miniapp.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/013_miniapp.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/014_vibe_prompt_patterns.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/014_vibe_prompt_patterns.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/014_vibe_prompt_patterns.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/014_vibe_prompt_patterns.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/015_snapshot_rollback.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/015_snapshot_rollback.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/015_snapshot_rollback.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/015_snapshot_rollback.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/016_vibe_review_output.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/016_vibe_review_output.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/016_vibe_review_output.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/016_vibe_review_output.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/017_terminal_shortcut.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/017_terminal_shortcut.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/017_terminal_shortcut.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/017_terminal_shortcut.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/020_lsp_diagnostics.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/020_lsp_diagnostics.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/020_lsp_diagnostics.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/020_lsp_diagnostics.md diff --git a/src/crates/core/src/service/announcement/content/tips/zh-TW/021_session_history.md b/src/crates/facade/core/src/service/announcement/content/tips/zh-TW/021_session_history.md similarity index 100% rename from src/crates/core/src/service/announcement/content/tips/zh-TW/021_session_history.md rename to src/crates/facade/core/src/service/announcement/content/tips/zh-TW/021_session_history.md diff --git a/src/crates/core/src/service/announcement/content_loader.rs b/src/crates/facade/core/src/service/announcement/content_loader.rs similarity index 100% rename from src/crates/core/src/service/announcement/content_loader.rs rename to src/crates/facade/core/src/service/announcement/content_loader.rs diff --git a/src/crates/core/src/service/announcement/mod.rs b/src/crates/facade/core/src/service/announcement/mod.rs similarity index 100% rename from src/crates/core/src/service/announcement/mod.rs rename to src/crates/facade/core/src/service/announcement/mod.rs diff --git a/src/crates/core/src/service/announcement/registry.rs b/src/crates/facade/core/src/service/announcement/registry.rs similarity index 100% rename from src/crates/core/src/service/announcement/registry.rs rename to src/crates/facade/core/src/service/announcement/registry.rs diff --git a/src/crates/core/src/service/announcement/remote.rs b/src/crates/facade/core/src/service/announcement/remote.rs similarity index 100% rename from src/crates/core/src/service/announcement/remote.rs rename to src/crates/facade/core/src/service/announcement/remote.rs diff --git a/src/crates/core/src/service/announcement/scheduler.rs b/src/crates/facade/core/src/service/announcement/scheduler.rs similarity index 100% rename from src/crates/core/src/service/announcement/scheduler.rs rename to src/crates/facade/core/src/service/announcement/scheduler.rs diff --git a/src/crates/core/src/service/announcement/state_store.rs b/src/crates/facade/core/src/service/announcement/state_store.rs similarity index 100% rename from src/crates/core/src/service/announcement/state_store.rs rename to src/crates/facade/core/src/service/announcement/state_store.rs diff --git a/src/crates/core/src/service/announcement/tips_pool.rs b/src/crates/facade/core/src/service/announcement/tips_pool.rs similarity index 100% rename from src/crates/core/src/service/announcement/tips_pool.rs rename to src/crates/facade/core/src/service/announcement/tips_pool.rs diff --git a/src/crates/core/src/service/announcement/types.rs b/src/crates/facade/core/src/service/announcement/types.rs similarity index 100% rename from src/crates/core/src/service/announcement/types.rs rename to src/crates/facade/core/src/service/announcement/types.rs diff --git a/src/crates/core/src/service/bootstrap/bootstrap_impl.rs b/src/crates/facade/core/src/service/bootstrap/bootstrap_impl.rs similarity index 100% rename from src/crates/core/src/service/bootstrap/bootstrap_impl.rs rename to src/crates/facade/core/src/service/bootstrap/bootstrap_impl.rs diff --git a/src/crates/core/src/service/bootstrap/mod.rs b/src/crates/facade/core/src/service/bootstrap/mod.rs similarity index 100% rename from src/crates/core/src/service/bootstrap/mod.rs rename to src/crates/facade/core/src/service/bootstrap/mod.rs diff --git a/src/crates/core/src/service/bootstrap/templates/BOOTSTRAP.md b/src/crates/facade/core/src/service/bootstrap/templates/BOOTSTRAP.md similarity index 100% rename from src/crates/core/src/service/bootstrap/templates/BOOTSTRAP.md rename to src/crates/facade/core/src/service/bootstrap/templates/BOOTSTRAP.md diff --git a/src/crates/core/src/service/bootstrap/templates/IDENTITY.md b/src/crates/facade/core/src/service/bootstrap/templates/IDENTITY.md similarity index 100% rename from src/crates/core/src/service/bootstrap/templates/IDENTITY.md rename to src/crates/facade/core/src/service/bootstrap/templates/IDENTITY.md diff --git a/src/crates/core/src/service/bootstrap/templates/SOUL.md b/src/crates/facade/core/src/service/bootstrap/templates/SOUL.md similarity index 100% rename from src/crates/core/src/service/bootstrap/templates/SOUL.md rename to src/crates/facade/core/src/service/bootstrap/templates/SOUL.md diff --git a/src/crates/core/src/service/bootstrap/templates/USER.md b/src/crates/facade/core/src/service/bootstrap/templates/USER.md similarity index 100% rename from src/crates/core/src/service/bootstrap/templates/USER.md rename to src/crates/facade/core/src/service/bootstrap/templates/USER.md diff --git a/src/crates/core/src/service/config/agent_profile_project_store.rs b/src/crates/facade/core/src/service/config/agent_profile_project_store.rs similarity index 100% rename from src/crates/core/src/service/config/agent_profile_project_store.rs rename to src/crates/facade/core/src/service/config/agent_profile_project_store.rs diff --git a/src/crates/core/src/service/config/app_language.rs b/src/crates/facade/core/src/service/config/app_language.rs similarity index 100% rename from src/crates/core/src/service/config/app_language.rs rename to src/crates/facade/core/src/service/config/app_language.rs diff --git a/src/crates/core/src/service/config/factory.rs b/src/crates/facade/core/src/service/config/factory.rs similarity index 100% rename from src/crates/core/src/service/config/factory.rs rename to src/crates/facade/core/src/service/config/factory.rs diff --git a/src/crates/core/src/service/config/global.rs b/src/crates/facade/core/src/service/config/global.rs similarity index 100% rename from src/crates/core/src/service/config/global.rs rename to src/crates/facade/core/src/service/config/global.rs diff --git a/src/crates/core/src/service/config/manager.rs b/src/crates/facade/core/src/service/config/manager.rs similarity index 100% rename from src/crates/core/src/service/config/manager.rs rename to src/crates/facade/core/src/service/config/manager.rs diff --git a/src/crates/core/src/service/config/mod.rs b/src/crates/facade/core/src/service/config/mod.rs similarity index 100% rename from src/crates/core/src/service/config/mod.rs rename to src/crates/facade/core/src/service/config/mod.rs diff --git a/src/crates/core/src/service/config/mode_config_canonicalizer.rs b/src/crates/facade/core/src/service/config/mode_config_canonicalizer.rs similarity index 100% rename from src/crates/core/src/service/config/mode_config_canonicalizer.rs rename to src/crates/facade/core/src/service/config/mode_config_canonicalizer.rs diff --git a/src/crates/core/src/service/config/providers.rs b/src/crates/facade/core/src/service/config/providers.rs similarity index 100% rename from src/crates/core/src/service/config/providers.rs rename to src/crates/facade/core/src/service/config/providers.rs diff --git a/src/crates/core/src/service/config/service.rs b/src/crates/facade/core/src/service/config/service.rs similarity index 100% rename from src/crates/core/src/service/config/service.rs rename to src/crates/facade/core/src/service/config/service.rs diff --git a/src/crates/core/src/service/config/types.rs b/src/crates/facade/core/src/service/config/types.rs similarity index 100% rename from src/crates/core/src/service/config/types.rs rename to src/crates/facade/core/src/service/config/types.rs diff --git a/src/crates/core/src/service/cron/mod.rs b/src/crates/facade/core/src/service/cron/mod.rs similarity index 100% rename from src/crates/core/src/service/cron/mod.rs rename to src/crates/facade/core/src/service/cron/mod.rs diff --git a/src/crates/core/src/service/cron/schedule.rs b/src/crates/facade/core/src/service/cron/schedule.rs similarity index 100% rename from src/crates/core/src/service/cron/schedule.rs rename to src/crates/facade/core/src/service/cron/schedule.rs diff --git a/src/crates/core/src/service/cron/service.rs b/src/crates/facade/core/src/service/cron/service.rs similarity index 100% rename from src/crates/core/src/service/cron/service.rs rename to src/crates/facade/core/src/service/cron/service.rs diff --git a/src/crates/core/src/service/cron/store.rs b/src/crates/facade/core/src/service/cron/store.rs similarity index 100% rename from src/crates/core/src/service/cron/store.rs rename to src/crates/facade/core/src/service/cron/store.rs diff --git a/src/crates/core/src/service/cron/subscriber.rs b/src/crates/facade/core/src/service/cron/subscriber.rs similarity index 100% rename from src/crates/core/src/service/cron/subscriber.rs rename to src/crates/facade/core/src/service/cron/subscriber.rs diff --git a/src/crates/core/src/service/cron/types.rs b/src/crates/facade/core/src/service/cron/types.rs similarity index 100% rename from src/crates/core/src/service/cron/types.rs rename to src/crates/facade/core/src/service/cron/types.rs diff --git a/src/crates/core/src/service/filesystem/factory.rs b/src/crates/facade/core/src/service/filesystem/factory.rs similarity index 100% rename from src/crates/core/src/service/filesystem/factory.rs rename to src/crates/facade/core/src/service/filesystem/factory.rs diff --git a/src/crates/core/src/service/filesystem/listing.rs b/src/crates/facade/core/src/service/filesystem/listing.rs similarity index 100% rename from src/crates/core/src/service/filesystem/listing.rs rename to src/crates/facade/core/src/service/filesystem/listing.rs diff --git a/src/crates/core/src/service/filesystem/mod.rs b/src/crates/facade/core/src/service/filesystem/mod.rs similarity index 100% rename from src/crates/core/src/service/filesystem/mod.rs rename to src/crates/facade/core/src/service/filesystem/mod.rs diff --git a/src/crates/core/src/service/filesystem/service.rs b/src/crates/facade/core/src/service/filesystem/service.rs similarity index 100% rename from src/crates/core/src/service/filesystem/service.rs rename to src/crates/facade/core/src/service/filesystem/service.rs diff --git a/src/crates/core/src/service/filesystem/types.rs b/src/crates/facade/core/src/service/filesystem/types.rs similarity index 100% rename from src/crates/core/src/service/filesystem/types.rs rename to src/crates/facade/core/src/service/filesystem/types.rs diff --git a/src/crates/core/src/service/git/git_service.rs b/src/crates/facade/core/src/service/git/git_service.rs similarity index 100% rename from src/crates/core/src/service/git/git_service.rs rename to src/crates/facade/core/src/service/git/git_service.rs diff --git a/src/crates/core/src/service/git/git_types.rs b/src/crates/facade/core/src/service/git/git_types.rs similarity index 100% rename from src/crates/core/src/service/git/git_types.rs rename to src/crates/facade/core/src/service/git/git_types.rs diff --git a/src/crates/core/src/service/git/git_utils.rs b/src/crates/facade/core/src/service/git/git_utils.rs similarity index 100% rename from src/crates/core/src/service/git/git_utils.rs rename to src/crates/facade/core/src/service/git/git_utils.rs diff --git a/src/crates/core/src/service/git/graph.rs b/src/crates/facade/core/src/service/git/graph.rs similarity index 100% rename from src/crates/core/src/service/git/graph.rs rename to src/crates/facade/core/src/service/git/graph.rs diff --git a/src/crates/core/src/service/git/mod.rs b/src/crates/facade/core/src/service/git/mod.rs similarity index 100% rename from src/crates/core/src/service/git/mod.rs rename to src/crates/facade/core/src/service/git/mod.rs diff --git a/src/crates/core/src/service/i18n/generated_locale_contract.rs b/src/crates/facade/core/src/service/i18n/generated_locale_contract.rs similarity index 95% rename from src/crates/core/src/service/i18n/generated_locale_contract.rs rename to src/crates/facade/core/src/service/i18n/generated_locale_contract.rs index 02c4b06d8..65391d6af 100644 --- a/src/crates/core/src/service/i18n/generated_locale_contract.rs +++ b/src/crates/facade/core/src/service/i18n/generated_locale_contract.rs @@ -63,7 +63,7 @@ pub const GENERATED_LOCALE_CONTRACT: &[GeneratedLocaleContractEntry] = &[ short_model_instruction: "Use English", aliases: &["en", "en-US"], content_fallbacks: &[LocaleId::ZhCN], - } + }, ]; pub const GENERATED_SHARED_TERMS: &[GeneratedSharedTermEntry] = &[ @@ -576,7 +576,7 @@ pub const GENERATED_SHARED_TERMS: &[GeneratedSharedTermEntry] = &[ locale: LocaleId::EnUS, key: "tools.write", value: "Write", - } + }, ]; pub fn generated_locale_entry(id: LocaleId) -> &'static GeneratedLocaleContractEntry { @@ -586,7 +586,9 @@ pub fn generated_locale_entry(id: LocaleId) -> &'static GeneratedLocaleContractE .expect("LocaleId missing from generated locale contract") } -pub fn generated_locale_entry_from_code(code: &str) -> Option<&'static GeneratedLocaleContractEntry> { +pub fn generated_locale_entry_from_code( + code: &str, +) -> Option<&'static GeneratedLocaleContractEntry> { let normalized = code.trim().to_ascii_lowercase(); if normalized.is_empty() { return None; @@ -627,16 +629,31 @@ mod tests { #[test] fn generated_contract_order_matches_runtime_locale_order() { - let generated_ids: Vec<_> = GENERATED_LOCALE_CONTRACT.iter().map(|entry| entry.id).collect(); + let generated_ids: Vec<_> = GENERATED_LOCALE_CONTRACT + .iter() + .map(|entry| entry.id) + .collect(); assert_eq!(generated_ids, LocaleId::all()); } #[test] fn generated_contract_resolves_aliases_like_runtime_locale_contract() { - assert_eq!(generated_locale_entry_from_code("zh-Hant-TW").map(|entry| entry.id), Some(LocaleId::ZhTW)); - assert_eq!(generated_locale_entry_from_code(" ZH-hans-CN ").map(|entry| entry.id), Some(LocaleId::ZhCN)); - assert_eq!(generated_locale_entry_from_code("en").map(|entry| entry.id), Some(LocaleId::EnUS)); - assert_eq!(generated_locale_entry_from_code("fr-FR").map(|entry| entry.id), None); + assert_eq!( + generated_locale_entry_from_code("zh-Hant-TW").map(|entry| entry.id), + Some(LocaleId::ZhTW) + ); + assert_eq!( + generated_locale_entry_from_code(" ZH-hans-CN ").map(|entry| entry.id), + Some(LocaleId::ZhCN) + ); + assert_eq!( + generated_locale_entry_from_code("en").map(|entry| entry.id), + Some(LocaleId::EnUS) + ); + assert_eq!( + generated_locale_entry_from_code("fr-FR").map(|entry| entry.id), + None + ); } #[test] diff --git a/src/crates/core/src/service/i18n/locale_registry.rs b/src/crates/facade/core/src/service/i18n/locale_registry.rs similarity index 100% rename from src/crates/core/src/service/i18n/locale_registry.rs rename to src/crates/facade/core/src/service/i18n/locale_registry.rs diff --git a/src/crates/core/src/service/i18n/mod.rs b/src/crates/facade/core/src/service/i18n/mod.rs similarity index 100% rename from src/crates/core/src/service/i18n/mod.rs rename to src/crates/facade/core/src/service/i18n/mod.rs diff --git a/src/crates/core/src/service/i18n/model_copy.rs b/src/crates/facade/core/src/service/i18n/model_copy.rs similarity index 100% rename from src/crates/core/src/service/i18n/model_copy.rs rename to src/crates/facade/core/src/service/i18n/model_copy.rs diff --git a/src/crates/core/src/service/i18n/service.rs b/src/crates/facade/core/src/service/i18n/service.rs similarity index 100% rename from src/crates/core/src/service/i18n/service.rs rename to src/crates/facade/core/src/service/i18n/service.rs diff --git a/src/crates/core/src/service/i18n/types.rs b/src/crates/facade/core/src/service/i18n/types.rs similarity index 100% rename from src/crates/core/src/service/i18n/types.rs rename to src/crates/facade/core/src/service/i18n/types.rs diff --git a/src/crates/core/src/service/lsp/config_watcher.rs b/src/crates/facade/core/src/service/lsp/config_watcher.rs similarity index 100% rename from src/crates/core/src/service/lsp/config_watcher.rs rename to src/crates/facade/core/src/service/lsp/config_watcher.rs diff --git a/src/crates/core/src/service/lsp/debouncer.rs b/src/crates/facade/core/src/service/lsp/debouncer.rs similarity index 100% rename from src/crates/core/src/service/lsp/debouncer.rs rename to src/crates/facade/core/src/service/lsp/debouncer.rs diff --git a/src/crates/core/src/service/lsp/file_sync.rs b/src/crates/facade/core/src/service/lsp/file_sync.rs similarity index 100% rename from src/crates/core/src/service/lsp/file_sync.rs rename to src/crates/facade/core/src/service/lsp/file_sync.rs diff --git a/src/crates/core/src/service/lsp/global.rs b/src/crates/facade/core/src/service/lsp/global.rs similarity index 100% rename from src/crates/core/src/service/lsp/global.rs rename to src/crates/facade/core/src/service/lsp/global.rs diff --git a/src/crates/core/src/service/lsp/manager.rs b/src/crates/facade/core/src/service/lsp/manager.rs similarity index 100% rename from src/crates/core/src/service/lsp/manager.rs rename to src/crates/facade/core/src/service/lsp/manager.rs diff --git a/src/crates/core/src/service/lsp/mod.rs b/src/crates/facade/core/src/service/lsp/mod.rs similarity index 100% rename from src/crates/core/src/service/lsp/mod.rs rename to src/crates/facade/core/src/service/lsp/mod.rs diff --git a/src/crates/core/src/service/lsp/plugin_loader.rs b/src/crates/facade/core/src/service/lsp/plugin_loader.rs similarity index 100% rename from src/crates/core/src/service/lsp/plugin_loader.rs rename to src/crates/facade/core/src/service/lsp/plugin_loader.rs diff --git a/src/crates/core/src/service/lsp/process.rs b/src/crates/facade/core/src/service/lsp/process.rs similarity index 100% rename from src/crates/core/src/service/lsp/process.rs rename to src/crates/facade/core/src/service/lsp/process.rs diff --git a/src/crates/core/src/service/lsp/project_detector.rs b/src/crates/facade/core/src/service/lsp/project_detector.rs similarity index 100% rename from src/crates/core/src/service/lsp/project_detector.rs rename to src/crates/facade/core/src/service/lsp/project_detector.rs diff --git a/src/crates/core/src/service/lsp/protocol.rs b/src/crates/facade/core/src/service/lsp/protocol.rs similarity index 100% rename from src/crates/core/src/service/lsp/protocol.rs rename to src/crates/facade/core/src/service/lsp/protocol.rs diff --git a/src/crates/core/src/service/lsp/registry.rs b/src/crates/facade/core/src/service/lsp/registry.rs similarity index 100% rename from src/crates/core/src/service/lsp/registry.rs rename to src/crates/facade/core/src/service/lsp/registry.rs diff --git a/src/crates/core/src/service/lsp/types.rs b/src/crates/facade/core/src/service/lsp/types.rs similarity index 100% rename from src/crates/core/src/service/lsp/types.rs rename to src/crates/facade/core/src/service/lsp/types.rs diff --git a/src/crates/core/src/service/lsp/workspace_manager.rs b/src/crates/facade/core/src/service/lsp/workspace_manager.rs similarity index 100% rename from src/crates/core/src/service/lsp/workspace_manager.rs rename to src/crates/facade/core/src/service/lsp/workspace_manager.rs diff --git a/src/crates/core/src/service/mcp/adapter/context.rs b/src/crates/facade/core/src/service/mcp/adapter/context.rs similarity index 100% rename from src/crates/core/src/service/mcp/adapter/context.rs rename to src/crates/facade/core/src/service/mcp/adapter/context.rs diff --git a/src/crates/core/src/service/mcp/adapter/mod.rs b/src/crates/facade/core/src/service/mcp/adapter/mod.rs similarity index 100% rename from src/crates/core/src/service/mcp/adapter/mod.rs rename to src/crates/facade/core/src/service/mcp/adapter/mod.rs diff --git a/src/crates/core/src/service/mcp/adapter/prompt.rs b/src/crates/facade/core/src/service/mcp/adapter/prompt.rs similarity index 100% rename from src/crates/core/src/service/mcp/adapter/prompt.rs rename to src/crates/facade/core/src/service/mcp/adapter/prompt.rs diff --git a/src/crates/core/src/service/mcp/adapter/resource.rs b/src/crates/facade/core/src/service/mcp/adapter/resource.rs similarity index 100% rename from src/crates/core/src/service/mcp/adapter/resource.rs rename to src/crates/facade/core/src/service/mcp/adapter/resource.rs diff --git a/src/crates/core/src/service/mcp/adapter/tool.rs b/src/crates/facade/core/src/service/mcp/adapter/tool.rs similarity index 100% rename from src/crates/core/src/service/mcp/adapter/tool.rs rename to src/crates/facade/core/src/service/mcp/adapter/tool.rs diff --git a/src/crates/core/src/service/mcp/auth.rs b/src/crates/facade/core/src/service/mcp/auth.rs similarity index 100% rename from src/crates/core/src/service/mcp/auth.rs rename to src/crates/facade/core/src/service/mcp/auth.rs diff --git a/src/crates/core/src/service/mcp/config/cursor_format.rs b/src/crates/facade/core/src/service/mcp/config/cursor_format.rs similarity index 100% rename from src/crates/core/src/service/mcp/config/cursor_format.rs rename to src/crates/facade/core/src/service/mcp/config/cursor_format.rs diff --git a/src/crates/core/src/service/mcp/config/json_config.rs b/src/crates/facade/core/src/service/mcp/config/json_config.rs similarity index 100% rename from src/crates/core/src/service/mcp/config/json_config.rs rename to src/crates/facade/core/src/service/mcp/config/json_config.rs diff --git a/src/crates/core/src/service/mcp/config/location.rs b/src/crates/facade/core/src/service/mcp/config/location.rs similarity index 100% rename from src/crates/core/src/service/mcp/config/location.rs rename to src/crates/facade/core/src/service/mcp/config/location.rs diff --git a/src/crates/core/src/service/mcp/config/mod.rs b/src/crates/facade/core/src/service/mcp/config/mod.rs similarity index 100% rename from src/crates/core/src/service/mcp/config/mod.rs rename to src/crates/facade/core/src/service/mcp/config/mod.rs diff --git a/src/crates/core/src/service/mcp/config/service.rs b/src/crates/facade/core/src/service/mcp/config/service.rs similarity index 100% rename from src/crates/core/src/service/mcp/config/service.rs rename to src/crates/facade/core/src/service/mcp/config/service.rs diff --git a/src/crates/core/src/service/mcp/mod.rs b/src/crates/facade/core/src/service/mcp/mod.rs similarity index 100% rename from src/crates/core/src/service/mcp/mod.rs rename to src/crates/facade/core/src/service/mcp/mod.rs diff --git a/src/crates/core/src/service/mcp/protocol/jsonrpc.rs b/src/crates/facade/core/src/service/mcp/protocol/jsonrpc.rs similarity index 100% rename from src/crates/core/src/service/mcp/protocol/jsonrpc.rs rename to src/crates/facade/core/src/service/mcp/protocol/jsonrpc.rs diff --git a/src/crates/core/src/service/mcp/protocol/mod.rs b/src/crates/facade/core/src/service/mcp/protocol/mod.rs similarity index 100% rename from src/crates/core/src/service/mcp/protocol/mod.rs rename to src/crates/facade/core/src/service/mcp/protocol/mod.rs diff --git a/src/crates/core/src/service/mcp/protocol/transport.rs b/src/crates/facade/core/src/service/mcp/protocol/transport.rs similarity index 100% rename from src/crates/core/src/service/mcp/protocol/transport.rs rename to src/crates/facade/core/src/service/mcp/protocol/transport.rs diff --git a/src/crates/core/src/service/mcp/protocol/transport_remote.rs b/src/crates/facade/core/src/service/mcp/protocol/transport_remote.rs similarity index 100% rename from src/crates/core/src/service/mcp/protocol/transport_remote.rs rename to src/crates/facade/core/src/service/mcp/protocol/transport_remote.rs diff --git a/src/crates/core/src/service/mcp/protocol/types.rs b/src/crates/facade/core/src/service/mcp/protocol/types.rs similarity index 100% rename from src/crates/core/src/service/mcp/protocol/types.rs rename to src/crates/facade/core/src/service/mcp/protocol/types.rs diff --git a/src/crates/core/src/service/mcp/server/config.rs b/src/crates/facade/core/src/service/mcp/server/config.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/config.rs rename to src/crates/facade/core/src/service/mcp/server/config.rs diff --git a/src/crates/core/src/service/mcp/server/connection.rs b/src/crates/facade/core/src/service/mcp/server/connection.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/connection.rs rename to src/crates/facade/core/src/service/mcp/server/connection.rs diff --git a/src/crates/core/src/service/mcp/server/manager/auth.rs b/src/crates/facade/core/src/service/mcp/server/manager/auth.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/manager/auth.rs rename to src/crates/facade/core/src/service/mcp/server/manager/auth.rs diff --git a/src/crates/core/src/service/mcp/server/manager/catalog.rs b/src/crates/facade/core/src/service/mcp/server/manager/catalog.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/manager/catalog.rs rename to src/crates/facade/core/src/service/mcp/server/manager/catalog.rs diff --git a/src/crates/core/src/service/mcp/server/manager/interaction.rs b/src/crates/facade/core/src/service/mcp/server/manager/interaction.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/manager/interaction.rs rename to src/crates/facade/core/src/service/mcp/server/manager/interaction.rs diff --git a/src/crates/core/src/service/mcp/server/manager/lifecycle.rs b/src/crates/facade/core/src/service/mcp/server/manager/lifecycle.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/manager/lifecycle.rs rename to src/crates/facade/core/src/service/mcp/server/manager/lifecycle.rs diff --git a/src/crates/core/src/service/mcp/server/manager/mod.rs b/src/crates/facade/core/src/service/mcp/server/manager/mod.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/manager/mod.rs rename to src/crates/facade/core/src/service/mcp/server/manager/mod.rs diff --git a/src/crates/core/src/service/mcp/server/manager/reconnect.rs b/src/crates/facade/core/src/service/mcp/server/manager/reconnect.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/manager/reconnect.rs rename to src/crates/facade/core/src/service/mcp/server/manager/reconnect.rs diff --git a/src/crates/core/src/service/mcp/server/manager/tests.rs b/src/crates/facade/core/src/service/mcp/server/manager/tests.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/manager/tests.rs rename to src/crates/facade/core/src/service/mcp/server/manager/tests.rs diff --git a/src/crates/core/src/service/mcp/server/manager/tools.rs b/src/crates/facade/core/src/service/mcp/server/manager/tools.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/manager/tools.rs rename to src/crates/facade/core/src/service/mcp/server/manager/tools.rs diff --git a/src/crates/core/src/service/mcp/server/mod.rs b/src/crates/facade/core/src/service/mcp/server/mod.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/mod.rs rename to src/crates/facade/core/src/service/mcp/server/mod.rs diff --git a/src/crates/core/src/service/mcp/server/process.rs b/src/crates/facade/core/src/service/mcp/server/process.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/process.rs rename to src/crates/facade/core/src/service/mcp/server/process.rs diff --git a/src/crates/core/src/service/mcp/server/registry.rs b/src/crates/facade/core/src/service/mcp/server/registry.rs similarity index 100% rename from src/crates/core/src/service/mcp/server/registry.rs rename to src/crates/facade/core/src/service/mcp/server/registry.rs diff --git a/src/crates/core/src/service/mcp/tool_info.rs b/src/crates/facade/core/src/service/mcp/tool_info.rs similarity index 100% rename from src/crates/core/src/service/mcp/tool_info.rs rename to src/crates/facade/core/src/service/mcp/tool_info.rs diff --git a/src/crates/core/src/service/mcp/tool_name.rs b/src/crates/facade/core/src/service/mcp/tool_name.rs similarity index 100% rename from src/crates/core/src/service/mcp/tool_name.rs rename to src/crates/facade/core/src/service/mcp/tool_name.rs diff --git a/src/crates/core/src/service/mod.rs b/src/crates/facade/core/src/service/mod.rs similarity index 100% rename from src/crates/core/src/service/mod.rs rename to src/crates/facade/core/src/service/mod.rs diff --git a/src/crates/core/src/service/project_context/builtin_documents.rs b/src/crates/facade/core/src/service/project_context/builtin_documents.rs similarity index 100% rename from src/crates/core/src/service/project_context/builtin_documents.rs rename to src/crates/facade/core/src/service/project_context/builtin_documents.rs diff --git a/src/crates/core/src/service/project_context/cancellation.rs b/src/crates/facade/core/src/service/project_context/cancellation.rs similarity index 100% rename from src/crates/core/src/service/project_context/cancellation.rs rename to src/crates/facade/core/src/service/project_context/cancellation.rs diff --git a/src/crates/core/src/service/project_context/document_template.rs b/src/crates/facade/core/src/service/project_context/document_template.rs similarity index 100% rename from src/crates/core/src/service/project_context/document_template.rs rename to src/crates/facade/core/src/service/project_context/document_template.rs diff --git a/src/crates/core/src/service/project_context/generation_prompt.rs b/src/crates/facade/core/src/service/project_context/generation_prompt.rs similarity index 100% rename from src/crates/core/src/service/project_context/generation_prompt.rs rename to src/crates/facade/core/src/service/project_context/generation_prompt.rs diff --git a/src/crates/core/src/service/project_context/mod.rs b/src/crates/facade/core/src/service/project_context/mod.rs similarity index 100% rename from src/crates/core/src/service/project_context/mod.rs rename to src/crates/facade/core/src/service/project_context/mod.rs diff --git a/src/crates/core/src/service/project_context/service.rs b/src/crates/facade/core/src/service/project_context/service.rs similarity index 100% rename from src/crates/core/src/service/project_context/service.rs rename to src/crates/facade/core/src/service/project_context/service.rs diff --git a/src/crates/core/src/service/project_context/types.rs b/src/crates/facade/core/src/service/project_context/types.rs similarity index 100% rename from src/crates/core/src/service/project_context/types.rs rename to src/crates/facade/core/src/service/project_context/types.rs diff --git a/src/crates/core/src/service/remote_connect/bot/command_router.rs b/src/crates/facade/core/src/service/remote_connect/bot/command_router.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/bot/command_router.rs rename to src/crates/facade/core/src/service/remote_connect/bot/command_router.rs diff --git a/src/crates/core/src/service/remote_connect/bot/feishu.rs b/src/crates/facade/core/src/service/remote_connect/bot/feishu.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/bot/feishu.rs rename to src/crates/facade/core/src/service/remote_connect/bot/feishu.rs diff --git a/src/crates/core/src/service/remote_connect/bot/locale.rs b/src/crates/facade/core/src/service/remote_connect/bot/locale.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/bot/locale.rs rename to src/crates/facade/core/src/service/remote_connect/bot/locale.rs diff --git a/src/crates/core/src/service/remote_connect/bot/menu.rs b/src/crates/facade/core/src/service/remote_connect/bot/menu.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/bot/menu.rs rename to src/crates/facade/core/src/service/remote_connect/bot/menu.rs diff --git a/src/crates/core/src/service/remote_connect/bot/mod.rs b/src/crates/facade/core/src/service/remote_connect/bot/mod.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/bot/mod.rs rename to src/crates/facade/core/src/service/remote_connect/bot/mod.rs diff --git a/src/crates/core/src/service/remote_connect/bot/telegram.rs b/src/crates/facade/core/src/service/remote_connect/bot/telegram.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/bot/telegram.rs rename to src/crates/facade/core/src/service/remote_connect/bot/telegram.rs diff --git a/src/crates/core/src/service/remote_connect/bot/weixin.rs b/src/crates/facade/core/src/service/remote_connect/bot/weixin.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/bot/weixin.rs rename to src/crates/facade/core/src/service/remote_connect/bot/weixin.rs diff --git a/src/crates/core/src/service/remote_connect/device.rs b/src/crates/facade/core/src/service/remote_connect/device.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/device.rs rename to src/crates/facade/core/src/service/remote_connect/device.rs diff --git a/src/crates/core/src/service/remote_connect/embedded_relay.rs b/src/crates/facade/core/src/service/remote_connect/embedded_relay.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/embedded_relay.rs rename to src/crates/facade/core/src/service/remote_connect/embedded_relay.rs diff --git a/src/crates/core/src/service/remote_connect/encryption.rs b/src/crates/facade/core/src/service/remote_connect/encryption.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/encryption.rs rename to src/crates/facade/core/src/service/remote_connect/encryption.rs diff --git a/src/crates/core/src/service/remote_connect/lan.rs b/src/crates/facade/core/src/service/remote_connect/lan.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/lan.rs rename to src/crates/facade/core/src/service/remote_connect/lan.rs diff --git a/src/crates/core/src/service/remote_connect/mod.rs b/src/crates/facade/core/src/service/remote_connect/mod.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/mod.rs rename to src/crates/facade/core/src/service/remote_connect/mod.rs diff --git a/src/crates/core/src/service/remote_connect/ngrok.rs b/src/crates/facade/core/src/service/remote_connect/ngrok.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/ngrok.rs rename to src/crates/facade/core/src/service/remote_connect/ngrok.rs diff --git a/src/crates/core/src/service/remote_connect/pairing.rs b/src/crates/facade/core/src/service/remote_connect/pairing.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/pairing.rs rename to src/crates/facade/core/src/service/remote_connect/pairing.rs diff --git a/src/crates/core/src/service/remote_connect/qr_generator.rs b/src/crates/facade/core/src/service/remote_connect/qr_generator.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/qr_generator.rs rename to src/crates/facade/core/src/service/remote_connect/qr_generator.rs diff --git a/src/crates/core/src/service/remote_connect/relay_client.rs b/src/crates/facade/core/src/service/remote_connect/relay_client.rs similarity index 100% rename from src/crates/core/src/service/remote_connect/relay_client.rs rename to src/crates/facade/core/src/service/remote_connect/relay_client.rs diff --git a/src/crates/core/src/service/remote_connect/remote_server.rs b/src/crates/facade/core/src/service/remote_connect/remote_server.rs similarity index 97% rename from src/crates/core/src/service/remote_connect/remote_server.rs rename to src/crates/facade/core/src/service/remote_connect/remote_server.rs index 3e040aa6a..34fc0bf34 100644 --- a/src/crates/core/src/service/remote_connect/remote_server.rs +++ b/src/crates/facade/core/src/service/remote_connect/remote_server.rs @@ -9,27 +9,27 @@ //! incremental updates (new messages + current active turn snapshot). use crate::service_agent_runtime::{CoreRemoteSessionTrackerHost, CoreServiceAgentRuntime}; -use anyhow::{Result, anyhow}; +use anyhow::{anyhow, Result}; use log::info; use serde_json::Value; use std::sync::{Arc, OnceLock}; use super::encryption; +use bitfun_services_integrations::remote_connect::{ + build_remote_image_contexts, cancel_remote_task, generate_remote_initial_sync, + handle_remote_interaction_command, handle_remote_poll_command, handle_remote_session_command, + handle_remote_workspace_command, handle_remote_workspace_file_command, + remote_dialog_submit_response, remote_task_cancel_response, + resolve_remote_execution_image_contexts, submit_remote_dialog, RemoteCancelTaskRequest, + RemoteConnectSubmissionSource, RemoteDialogSubmissionPolicy, RemoteDialogSubmissionRequest, + RemoteDialogSubmitOutcome, RemoteImageContext, RemoteSessionTrackerRegistry, +}; pub use bitfun_services_integrations::remote_connect::{ ActiveTurnSnapshot, AssistantEntry, ChatImageAttachment, ChatMessage, ChatMessageItem, ImageAttachment, RecentWorkspaceEntry, RemoteCommand, RemoteDefaultModelsConfig, RemoteModelCatalog, RemoteModelConfig, RemoteResponse, RemoteSessionStateTracker, RemoteToolStatus, SessionInfo, TrackerEvent, }; -use bitfun_services_integrations::remote_connect::{ - RemoteCancelTaskRequest, RemoteConnectSubmissionSource, RemoteDialogSubmissionPolicy, - RemoteDialogSubmissionRequest, RemoteDialogSubmitOutcome, RemoteImageContext, - RemoteSessionTrackerRegistry, build_remote_image_contexts, cancel_remote_task, - generate_remote_initial_sync, handle_remote_interaction_command, handle_remote_poll_command, - handle_remote_session_command, handle_remote_workspace_command, - handle_remote_workspace_file_command, remote_dialog_submit_response, - remote_task_cancel_response, resolve_remote_execution_image_contexts, submit_remote_dialog, -}; pub type EncryptedPayload = (String, String); @@ -342,7 +342,7 @@ mod tests { use super::*; use crate::service::remote_connect::encryption::KeyPair; use bitfun_services_integrations::remote_connect::{ - RemoteCancelDecision, remote_session_restore_target, resolve_remote_cancel_decision, + remote_session_restore_target, resolve_remote_cancel_decision, RemoteCancelDecision, }; #[test] diff --git a/src/crates/core/src/service/remote_ssh/disabled.rs b/src/crates/facade/core/src/service/remote_ssh/disabled.rs similarity index 100% rename from src/crates/core/src/service/remote_ssh/disabled.rs rename to src/crates/facade/core/src/service/remote_ssh/disabled.rs diff --git a/src/crates/core/src/service/remote_ssh/manager.rs b/src/crates/facade/core/src/service/remote_ssh/manager.rs similarity index 100% rename from src/crates/core/src/service/remote_ssh/manager.rs rename to src/crates/facade/core/src/service/remote_ssh/manager.rs diff --git a/src/crates/core/src/service/remote_ssh/mod.rs b/src/crates/facade/core/src/service/remote_ssh/mod.rs similarity index 100% rename from src/crates/core/src/service/remote_ssh/mod.rs rename to src/crates/facade/core/src/service/remote_ssh/mod.rs diff --git a/src/crates/core/src/service/remote_ssh/password_vault.rs b/src/crates/facade/core/src/service/remote_ssh/password_vault.rs similarity index 100% rename from src/crates/core/src/service/remote_ssh/password_vault.rs rename to src/crates/facade/core/src/service/remote_ssh/password_vault.rs diff --git a/src/crates/core/src/service/remote_ssh/remote_fs.rs b/src/crates/facade/core/src/service/remote_ssh/remote_fs.rs similarity index 100% rename from src/crates/core/src/service/remote_ssh/remote_fs.rs rename to src/crates/facade/core/src/service/remote_ssh/remote_fs.rs diff --git a/src/crates/core/src/service/remote_ssh/remote_terminal.rs b/src/crates/facade/core/src/service/remote_ssh/remote_terminal.rs similarity index 100% rename from src/crates/core/src/service/remote_ssh/remote_terminal.rs rename to src/crates/facade/core/src/service/remote_ssh/remote_terminal.rs diff --git a/src/crates/core/src/service/remote_ssh/types.rs b/src/crates/facade/core/src/service/remote_ssh/types.rs similarity index 100% rename from src/crates/core/src/service/remote_ssh/types.rs rename to src/crates/facade/core/src/service/remote_ssh/types.rs diff --git a/src/crates/core/src/service/remote_ssh/workspace_state.rs b/src/crates/facade/core/src/service/remote_ssh/workspace_state.rs similarity index 100% rename from src/crates/core/src/service/remote_ssh/workspace_state.rs rename to src/crates/facade/core/src/service/remote_ssh/workspace_state.rs diff --git a/src/crates/core/src/service/review_platform/mod.rs b/src/crates/facade/core/src/service/review_platform/mod.rs similarity index 100% rename from src/crates/core/src/service/review_platform/mod.rs rename to src/crates/facade/core/src/service/review_platform/mod.rs diff --git a/src/crates/core/src/service/runtime/mod.rs b/src/crates/facade/core/src/service/runtime/mod.rs similarity index 100% rename from src/crates/core/src/service/runtime/mod.rs rename to src/crates/facade/core/src/service/runtime/mod.rs diff --git a/src/crates/core/src/service/search/flashgrep/client.rs b/src/crates/facade/core/src/service/search/flashgrep/client.rs similarity index 100% rename from src/crates/core/src/service/search/flashgrep/client.rs rename to src/crates/facade/core/src/service/search/flashgrep/client.rs diff --git a/src/crates/core/src/service/search/flashgrep/error.rs b/src/crates/facade/core/src/service/search/flashgrep/error.rs similarity index 100% rename from src/crates/core/src/service/search/flashgrep/error.rs rename to src/crates/facade/core/src/service/search/flashgrep/error.rs diff --git a/src/crates/core/src/service/search/flashgrep/mod.rs b/src/crates/facade/core/src/service/search/flashgrep/mod.rs similarity index 100% rename from src/crates/core/src/service/search/flashgrep/mod.rs rename to src/crates/facade/core/src/service/search/flashgrep/mod.rs diff --git a/src/crates/core/src/service/search/flashgrep/protocol.rs b/src/crates/facade/core/src/service/search/flashgrep/protocol.rs similarity index 100% rename from src/crates/core/src/service/search/flashgrep/protocol.rs rename to src/crates/facade/core/src/service/search/flashgrep/protocol.rs diff --git a/src/crates/core/src/service/search/flashgrep/repo_session.rs b/src/crates/facade/core/src/service/search/flashgrep/repo_session.rs similarity index 100% rename from src/crates/core/src/service/search/flashgrep/repo_session.rs rename to src/crates/facade/core/src/service/search/flashgrep/repo_session.rs diff --git a/src/crates/core/src/service/search/flashgrep/rpc_client.rs b/src/crates/facade/core/src/service/search/flashgrep/rpc_client.rs similarity index 100% rename from src/crates/core/src/service/search/flashgrep/rpc_client.rs rename to src/crates/facade/core/src/service/search/flashgrep/rpc_client.rs diff --git a/src/crates/core/src/service/search/flashgrep/types.rs b/src/crates/facade/core/src/service/search/flashgrep/types.rs similarity index 100% rename from src/crates/core/src/service/search/flashgrep/types.rs rename to src/crates/facade/core/src/service/search/flashgrep/types.rs diff --git a/src/crates/core/src/service/search/mod.rs b/src/crates/facade/core/src/service/search/mod.rs similarity index 100% rename from src/crates/core/src/service/search/mod.rs rename to src/crates/facade/core/src/service/search/mod.rs diff --git a/src/crates/core/src/service/search/remote.rs b/src/crates/facade/core/src/service/search/remote.rs similarity index 99% rename from src/crates/core/src/service/search/remote.rs rename to src/crates/facade/core/src/service/search/remote.rs index a3d617664..9a9bfa226 100644 --- a/src/crates/core/src/service/search/remote.rs +++ b/src/crates/facade/core/src/service/search/remote.rs @@ -1319,7 +1319,7 @@ fn parse_remote_os_output(stdout: &str, stderr: &str) -> Option { fn resolve_local_flashgrep_bundle(binary_name: &str) -> Option { let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - let workspace_root = manifest_dir.join("../../.."); + let workspace_root = manifest_dir.join("../../../.."); let mut candidates = vec![workspace_root.join("resources/flashgrep").join(binary_name)]; if let Ok(current_exe) = std::env::current_exe() { diff --git a/src/crates/core/src/service/search/remote_disabled.rs b/src/crates/facade/core/src/service/search/remote_disabled.rs similarity index 100% rename from src/crates/core/src/service/search/remote_disabled.rs rename to src/crates/facade/core/src/service/search/remote_disabled.rs diff --git a/src/crates/core/src/service/search/service.rs b/src/crates/facade/core/src/service/search/service.rs similarity index 99% rename from src/crates/core/src/service/search/service.rs rename to src/crates/facade/core/src/service/search/service.rs index e8b8ad9ef..b16e42178 100644 --- a/src/crates/core/src/service/search/service.rs +++ b/src/crates/facade/core/src/service/search/service.rs @@ -611,7 +611,7 @@ pub fn resolve_workspace_search_daemon_program_path() -> Option { } let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - let workspace_root = manifest_dir.join("../../.."); + let workspace_root = manifest_dir.join("../../../.."); let binary_names = workspace_search_daemon_binary_names(); let profile = std::env::var("PROFILE").ok(); diff --git a/src/crates/core/src/service/search/types.rs b/src/crates/facade/core/src/service/search/types.rs similarity index 100% rename from src/crates/core/src/service/search/types.rs rename to src/crates/facade/core/src/service/search/types.rs diff --git a/src/crates/core/src/service/session/mod.rs b/src/crates/facade/core/src/service/session/mod.rs similarity index 100% rename from src/crates/core/src/service/session/mod.rs rename to src/crates/facade/core/src/service/session/mod.rs diff --git a/src/crates/core/src/service/session_usage/mod.rs b/src/crates/facade/core/src/service/session_usage/mod.rs similarity index 100% rename from src/crates/core/src/service/session_usage/mod.rs rename to src/crates/facade/core/src/service/session_usage/mod.rs diff --git a/src/crates/core/src/service/session_usage/service.rs b/src/crates/facade/core/src/service/session_usage/service.rs similarity index 100% rename from src/crates/core/src/service/session_usage/service.rs rename to src/crates/facade/core/src/service/session_usage/service.rs diff --git a/src/crates/core/src/service/snapshot/events.rs b/src/crates/facade/core/src/service/snapshot/events.rs similarity index 100% rename from src/crates/core/src/service/snapshot/events.rs rename to src/crates/facade/core/src/service/snapshot/events.rs diff --git a/src/crates/core/src/service/snapshot/file_lock_manager.rs b/src/crates/facade/core/src/service/snapshot/file_lock_manager.rs similarity index 100% rename from src/crates/core/src/service/snapshot/file_lock_manager.rs rename to src/crates/facade/core/src/service/snapshot/file_lock_manager.rs diff --git a/src/crates/core/src/service/snapshot/isolation_manager.rs b/src/crates/facade/core/src/service/snapshot/isolation_manager.rs similarity index 100% rename from src/crates/core/src/service/snapshot/isolation_manager.rs rename to src/crates/facade/core/src/service/snapshot/isolation_manager.rs diff --git a/src/crates/core/src/service/snapshot/manager.rs b/src/crates/facade/core/src/service/snapshot/manager.rs similarity index 100% rename from src/crates/core/src/service/snapshot/manager.rs rename to src/crates/facade/core/src/service/snapshot/manager.rs diff --git a/src/crates/core/src/service/snapshot/mod.rs b/src/crates/facade/core/src/service/snapshot/mod.rs similarity index 100% rename from src/crates/core/src/service/snapshot/mod.rs rename to src/crates/facade/core/src/service/snapshot/mod.rs diff --git a/src/crates/core/src/service/snapshot/service.rs b/src/crates/facade/core/src/service/snapshot/service.rs similarity index 100% rename from src/crates/core/src/service/snapshot/service.rs rename to src/crates/facade/core/src/service/snapshot/service.rs diff --git a/src/crates/core/src/service/snapshot/snapshot_core.rs b/src/crates/facade/core/src/service/snapshot/snapshot_core.rs similarity index 100% rename from src/crates/core/src/service/snapshot/snapshot_core.rs rename to src/crates/facade/core/src/service/snapshot/snapshot_core.rs diff --git a/src/crates/core/src/service/snapshot/snapshot_system.rs b/src/crates/facade/core/src/service/snapshot/snapshot_system.rs similarity index 100% rename from src/crates/core/src/service/snapshot/snapshot_system.rs rename to src/crates/facade/core/src/service/snapshot/snapshot_system.rs diff --git a/src/crates/core/src/service/snapshot/types.rs b/src/crates/facade/core/src/service/snapshot/types.rs similarity index 100% rename from src/crates/core/src/service/snapshot/types.rs rename to src/crates/facade/core/src/service/snapshot/types.rs diff --git a/src/crates/core/src/service/token_usage/mod.rs b/src/crates/facade/core/src/service/token_usage/mod.rs similarity index 100% rename from src/crates/core/src/service/token_usage/mod.rs rename to src/crates/facade/core/src/service/token_usage/mod.rs diff --git a/src/crates/core/src/service/token_usage/service.rs b/src/crates/facade/core/src/service/token_usage/service.rs similarity index 100% rename from src/crates/core/src/service/token_usage/service.rs rename to src/crates/facade/core/src/service/token_usage/service.rs diff --git a/src/crates/core/src/service/token_usage/subscriber.rs b/src/crates/facade/core/src/service/token_usage/subscriber.rs similarity index 100% rename from src/crates/core/src/service/token_usage/subscriber.rs rename to src/crates/facade/core/src/service/token_usage/subscriber.rs diff --git a/src/crates/core/src/service/workspace/factory.rs b/src/crates/facade/core/src/service/workspace/factory.rs similarity index 100% rename from src/crates/core/src/service/workspace/factory.rs rename to src/crates/facade/core/src/service/workspace/factory.rs diff --git a/src/crates/core/src/service/workspace/identity_watch.rs b/src/crates/facade/core/src/service/workspace/identity_watch.rs similarity index 100% rename from src/crates/core/src/service/workspace/identity_watch.rs rename to src/crates/facade/core/src/service/workspace/identity_watch.rs diff --git a/src/crates/core/src/service/workspace/manager.rs b/src/crates/facade/core/src/service/workspace/manager.rs similarity index 100% rename from src/crates/core/src/service/workspace/manager.rs rename to src/crates/facade/core/src/service/workspace/manager.rs diff --git a/src/crates/core/src/service/workspace/mod.rs b/src/crates/facade/core/src/service/workspace/mod.rs similarity index 100% rename from src/crates/core/src/service/workspace/mod.rs rename to src/crates/facade/core/src/service/workspace/mod.rs diff --git a/src/crates/core/src/service/workspace/provider.rs b/src/crates/facade/core/src/service/workspace/provider.rs similarity index 100% rename from src/crates/core/src/service/workspace/provider.rs rename to src/crates/facade/core/src/service/workspace/provider.rs diff --git a/src/crates/core/src/service/workspace/service.rs b/src/crates/facade/core/src/service/workspace/service.rs similarity index 100% rename from src/crates/core/src/service/workspace/service.rs rename to src/crates/facade/core/src/service/workspace/service.rs diff --git a/src/crates/core/src/service/workspace_runtime/mod.rs b/src/crates/facade/core/src/service/workspace_runtime/mod.rs similarity index 100% rename from src/crates/core/src/service/workspace_runtime/mod.rs rename to src/crates/facade/core/src/service/workspace_runtime/mod.rs diff --git a/src/crates/core/src/service/workspace_runtime/service.rs b/src/crates/facade/core/src/service/workspace_runtime/service.rs similarity index 100% rename from src/crates/core/src/service/workspace_runtime/service.rs rename to src/crates/facade/core/src/service/workspace_runtime/service.rs diff --git a/src/crates/core/src/service/workspace_runtime/types.rs b/src/crates/facade/core/src/service/workspace_runtime/types.rs similarity index 100% rename from src/crates/core/src/service/workspace_runtime/types.rs rename to src/crates/facade/core/src/service/workspace_runtime/types.rs diff --git a/src/crates/core/src/service_agent_runtime.rs b/src/crates/facade/core/src/service_agent_runtime.rs similarity index 100% rename from src/crates/core/src/service_agent_runtime.rs rename to src/crates/facade/core/src/service_agent_runtime.rs diff --git a/src/crates/core/src/util/errors.rs b/src/crates/facade/core/src/util/errors.rs similarity index 100% rename from src/crates/core/src/util/errors.rs rename to src/crates/facade/core/src/util/errors.rs diff --git a/src/crates/core/src/util/front_matter_markdown.rs b/src/crates/facade/core/src/util/front_matter_markdown.rs similarity index 100% rename from src/crates/core/src/util/front_matter_markdown.rs rename to src/crates/facade/core/src/util/front_matter_markdown.rs diff --git a/src/crates/core/src/util/json_extract.rs b/src/crates/facade/core/src/util/json_extract.rs similarity index 100% rename from src/crates/core/src/util/json_extract.rs rename to src/crates/facade/core/src/util/json_extract.rs diff --git a/src/crates/core/src/util/mod.rs b/src/crates/facade/core/src/util/mod.rs similarity index 100% rename from src/crates/core/src/util/mod.rs rename to src/crates/facade/core/src/util/mod.rs diff --git a/src/crates/core/src/util/plain_output.rs b/src/crates/facade/core/src/util/plain_output.rs similarity index 100% rename from src/crates/core/src/util/plain_output.rs rename to src/crates/facade/core/src/util/plain_output.rs diff --git a/src/crates/core/src/util/timing.rs b/src/crates/facade/core/src/util/timing.rs similarity index 100% rename from src/crates/core/src/util/timing.rs rename to src/crates/facade/core/src/util/timing.rs diff --git a/src/crates/core/src/util/token_counter.rs b/src/crates/facade/core/src/util/token_counter.rs similarity index 100% rename from src/crates/core/src/util/token_counter.rs rename to src/crates/facade/core/src/util/token_counter.rs diff --git a/src/crates/core/src/util/types/ai.rs b/src/crates/facade/core/src/util/types/ai.rs similarity index 100% rename from src/crates/core/src/util/types/ai.rs rename to src/crates/facade/core/src/util/types/ai.rs diff --git a/src/crates/core/src/util/types/config.rs b/src/crates/facade/core/src/util/types/config.rs similarity index 100% rename from src/crates/core/src/util/types/config.rs rename to src/crates/facade/core/src/util/types/config.rs diff --git a/src/crates/core/src/util/types/core.rs b/src/crates/facade/core/src/util/types/core.rs similarity index 100% rename from src/crates/core/src/util/types/core.rs rename to src/crates/facade/core/src/util/types/core.rs diff --git a/src/crates/core/src/util/types/event.rs b/src/crates/facade/core/src/util/types/event.rs similarity index 100% rename from src/crates/core/src/util/types/event.rs rename to src/crates/facade/core/src/util/types/event.rs diff --git a/src/crates/core/src/util/types/message.rs b/src/crates/facade/core/src/util/types/message.rs similarity index 100% rename from src/crates/core/src/util/types/message.rs rename to src/crates/facade/core/src/util/types/message.rs diff --git a/src/crates/core/src/util/types/mod.rs b/src/crates/facade/core/src/util/types/mod.rs similarity index 100% rename from src/crates/core/src/util/types/mod.rs rename to src/crates/facade/core/src/util/types/mod.rs diff --git a/src/crates/core/src/util/types/tool.rs b/src/crates/facade/core/src/util/types/tool.rs similarity index 100% rename from src/crates/core/src/util/types/tool.rs rename to src/crates/facade/core/src/util/types/tool.rs diff --git a/src/crates/ai-adapters/src/types/tool_image_attachment.rs b/src/crates/facade/core/src/util/types/tool_image_attachment.rs similarity index 100% rename from src/crates/ai-adapters/src/types/tool_image_attachment.rs rename to src/crates/facade/core/src/util/types/tool_image_attachment.rs diff --git a/src/crates/core/tests/context_profile.rs b/src/crates/facade/core/tests/context_profile.rs similarity index 100% rename from src/crates/core/tests/context_profile.rs rename to src/crates/facade/core/tests/context_profile.rs diff --git a/src/crates/core/tests/git_contracts.rs b/src/crates/facade/core/tests/git_contracts.rs similarity index 100% rename from src/crates/core/tests/git_contracts.rs rename to src/crates/facade/core/tests/git_contracts.rs diff --git a/src/crates/core/tests/product_assembly.rs b/src/crates/facade/core/tests/product_assembly.rs similarity index 76% rename from src/crates/core/tests/product_assembly.rs rename to src/crates/facade/core/tests/product_assembly.rs index faccf32de..42ddcce31 100644 --- a/src/crates/core/tests/product_assembly.rs +++ b/src/crates/facade/core/tests/product_assembly.rs @@ -1,4 +1,5 @@ -use bitfun_core::product_assembly::CoreRuntimeServicesProvider; +use bitfun_core::product_assembly; +use bitfun_core::product_runtime::CoreRuntimeServicesProvider; use bitfun_product_capabilities::{ product_assembly_plan_for_profile, DeliveryProfile, ProductServiceCapabilityStatus, }; @@ -28,6 +29,20 @@ fn core_runtime_services_provider_registers_existing_adapters_and_capability_mar assert!(services.has_capability(RuntimeServiceCapability::RemoteProjection)); } +#[test] +fn product_assembly_facade_preserves_legacy_provider_import_path() { + let registry = RuntimeServicesRegistry::new() + .with_provider(FakeRuntimeServicesProvider::with_all_required()) + .with_provider(product_assembly::CoreRuntimeServicesProvider::new()); + + let services = registry + .build(RuntimeServicesBuilder::new()) + .expect("legacy product assembly facade should preserve provider behavior"); + + assert!(services.has_capability(RuntimeServiceCapability::SessionStore)); + assert!(services.has_capability(RuntimeServiceCapability::Terminal)); +} + #[test] fn core_provider_closes_current_product_full_service_capability_requirements() { let registry = RuntimeServicesRegistry::new() diff --git a/src/crates/core/tests/remote_mcp_streamable_http.rs b/src/crates/facade/core/tests/remote_mcp_streamable_http.rs similarity index 100% rename from src/crates/core/tests/remote_mcp_streamable_http.rs rename to src/crates/facade/core/tests/remote_mcp_streamable_http.rs diff --git a/src/crates/integrations/AGENTS-CN.md b/src/crates/integrations/AGENTS-CN.md new file mode 100644 index 000000000..c68c8625d --- /dev/null +++ b/src/crates/integrations/AGENTS-CN.md @@ -0,0 +1,26 @@ +**中文** | [English](AGENTS.md) + +# 具体适配实现层 + +本层负责低层外部协议、provider、transport 和平台 adapter。依赖 `facade/core` 暴露已组装产品行为的协议入口应放在 `src/crates/surfaces`,不要放在这里。 + +## 模块 + +| Crate | 职责 | 本地文档 | +|---|---|---| +| `ai-adapters` | AI provider DTO 和 provider-facing adapter helper | [AGENTS.md](ai-adapters/AGENTS.md) | +| `api-layer` | 基于 transport 抽象的平台无关 API handler | [AGENTS.md](api-layer/AGENTS.md) | +| `transport` | 跨平台通信 adapter 和 emitter | [AGENTS.md](transport/AGENTS.md) | +| `webdriver` | 内嵌 WebDriver 协议与 runtime 实现 | [AGENTS.md](webdriver/AGENTS.md) | + +## 放置规则 + +- 主要职责是连接 BitFun contract 与外部系统的协议、framework、provider adapter 放在这里。 +- 低层 adapter 可以依赖 contract 或窄 execution facts,不依赖产品组装。 +- 不要把产品策略、可复用服务实现或 agent/tool 编排放入本层。 + +## 依赖边界 + +- integration crate 可依赖 `contracts`、execution facts 和窄 provider 依赖。 +- integration crate 不得依赖 `facade/core`;产品入口型协议适配应移动到 `src/crates/surfaces`。 +- 平台特定依赖应尽可能 optional 或隔离,避免较小交付形态被迫编译无关 adapter。 diff --git a/src/crates/integrations/AGENTS.md b/src/crates/integrations/AGENTS.md new file mode 100644 index 000000000..251c3ffc4 --- /dev/null +++ b/src/crates/integrations/AGENTS.md @@ -0,0 +1,34 @@ +[中文](AGENTS-CN.md) | **English** + +# Concrete Provider Adapters Layer + +This layer owns low-level external protocol, provider, transport, and platform +adapters. Protocol surfaces that expose assembled product behavior belong in +`src/crates/surfaces`, not here. + +## Modules + +| Crate | Responsibility | Local doc | +|---|---|---| +| `ai-adapters` | AI provider DTOs and provider-facing adapter helpers | [AGENTS.md](ai-adapters/AGENTS.md) | +| `api-layer` | Platform-agnostic API handlers over transport abstractions | [AGENTS.md](api-layer/AGENTS.md) | +| `transport` | Cross-platform communication adapters and emitters | [AGENTS.md](transport/AGENTS.md) | +| `webdriver` | Embedded WebDriver protocol/runtime implementation | [AGENTS.md](webdriver/AGENTS.md) | + +## Placement Rules + +- Put protocol/framework/provider adapters here when their primary job is to + translate between BitFun contracts and an external system. +- Low-level adapters should depend on contracts or narrow execution facts, not + product assembly. +- Do not place product policy, reusable service implementation, or agent/tool + orchestration here. + +## Dependency Boundaries + +- Integrations may depend on `contracts`, execution facts, and narrowly scoped + provider dependencies. +- Integrations must not depend on `facade/core`; move product-facing protocol + entrypoints to `src/crates/surfaces`. +- Platform-specific dependencies must be optional or isolated when possible so + smaller delivery forms are not forced to compile unrelated adapters. diff --git a/src/crates/ai-adapters/AGENTS.md b/src/crates/integrations/ai-adapters/AGENTS.md similarity index 90% rename from src/crates/ai-adapters/AGENTS.md rename to src/crates/integrations/ai-adapters/AGENTS.md index dbe651e37..bcf20fe71 100644 --- a/src/crates/ai-adapters/AGENTS.md +++ b/src/crates/integrations/ai-adapters/AGENTS.md @@ -1,6 +1,6 @@ # AI Adapters Agent Guide -Scope: this guide applies to `src/crates/ai-adapters`. +Scope: this guide applies to `src/crates/integrations/ai-adapters`. `bitfun-ai-adapters` owns provider-specific request/response mapping and stream normalization. Keep provider quirks here instead of leaking them into core tool @@ -25,4 +25,4 @@ cargo test -p bitfun-ai-adapters ``` If stream behavior affects core integration, also run the relevant tests in -`src/crates/core/tests`. +`src/crates/facade/core/tests`. diff --git a/src/crates/ai-adapters/Cargo.toml b/src/crates/integrations/ai-adapters/Cargo.toml similarity index 91% rename from src/crates/ai-adapters/Cargo.toml rename to src/crates/integrations/ai-adapters/Cargo.toml index 6c6010fcb..93c9392af 100644 --- a/src/crates/ai-adapters/Cargo.toml +++ b/src/crates/integrations/ai-adapters/Cargo.toml @@ -11,7 +11,7 @@ crate-type = ["rlib"] [dependencies] anyhow = { workspace = true } -bitfun-core-types = { path = "../core-types" } +bitfun-core-types = { path = "../../contracts/core-types" } chrono = { workspace = true } eventsource-stream = { workspace = true } futures = { workspace = true } diff --git a/src/crates/ai-adapters/README.md b/src/crates/integrations/ai-adapters/README.md similarity index 100% rename from src/crates/ai-adapters/README.md rename to src/crates/integrations/ai-adapters/README.md diff --git a/src/crates/ai-adapters/src/client.rs b/src/crates/integrations/ai-adapters/src/client.rs similarity index 99% rename from src/crates/ai-adapters/src/client.rs rename to src/crates/integrations/ai-adapters/src/client.rs index f459d3d0c..306d59753 100644 --- a/src/crates/ai-adapters/src/client.rs +++ b/src/crates/integrations/ai-adapters/src/client.rs @@ -1299,5 +1299,4 @@ mod tests { ); } } - } diff --git a/src/crates/ai-adapters/src/client/format.rs b/src/crates/integrations/ai-adapters/src/client/format.rs similarity index 100% rename from src/crates/ai-adapters/src/client/format.rs rename to src/crates/integrations/ai-adapters/src/client/format.rs diff --git a/src/crates/ai-adapters/src/client/healthcheck.rs b/src/crates/integrations/ai-adapters/src/client/healthcheck.rs similarity index 100% rename from src/crates/ai-adapters/src/client/healthcheck.rs rename to src/crates/integrations/ai-adapters/src/client/healthcheck.rs diff --git a/src/crates/ai-adapters/src/client/http.rs b/src/crates/integrations/ai-adapters/src/client/http.rs similarity index 100% rename from src/crates/ai-adapters/src/client/http.rs rename to src/crates/integrations/ai-adapters/src/client/http.rs diff --git a/src/crates/ai-adapters/src/client/quirks.rs b/src/crates/integrations/ai-adapters/src/client/quirks.rs similarity index 100% rename from src/crates/ai-adapters/src/client/quirks.rs rename to src/crates/integrations/ai-adapters/src/client/quirks.rs diff --git a/src/crates/ai-adapters/src/client/response_aggregator.rs b/src/crates/integrations/ai-adapters/src/client/response_aggregator.rs similarity index 100% rename from src/crates/ai-adapters/src/client/response_aggregator.rs rename to src/crates/integrations/ai-adapters/src/client/response_aggregator.rs diff --git a/src/crates/ai-adapters/src/client/sse.rs b/src/crates/integrations/ai-adapters/src/client/sse.rs similarity index 96% rename from src/crates/ai-adapters/src/client/sse.rs rename to src/crates/integrations/ai-adapters/src/client/sse.rs index e920f6dba..6fe34d9e2 100644 --- a/src/crates/ai-adapters/src/client/sse.rs +++ b/src/crates/integrations/ai-adapters/src/client/sse.rs @@ -29,13 +29,13 @@ where BuildRequest: Fn() -> reqwest::RequestBuilder, { match ttft_timeout { - Some(timeout) => match tokio::time::timeout(timeout, build_request().json(request_body).send()) - .await - { - Ok(Ok(response)) => StreamSendOutcome::Response(response), - Ok(Err(error)) => StreamSendOutcome::Transport(error), - Err(_) => StreamSendOutcome::TtftTimeout, - }, + Some(timeout) => { + match tokio::time::timeout(timeout, build_request().json(request_body).send()).await { + Ok(Ok(response)) => StreamSendOutcome::Response(response), + Ok(Err(error)) => StreamSendOutcome::Transport(error), + Err(_) => StreamSendOutcome::TtftTimeout, + } + } None => match build_request().json(request_body).send().await { Ok(response) => StreamSendOutcome::Response(response), Err(error) => StreamSendOutcome::Transport(error), diff --git a/src/crates/ai-adapters/src/client/utils.rs b/src/crates/integrations/ai-adapters/src/client/utils.rs similarity index 100% rename from src/crates/ai-adapters/src/client/utils.rs rename to src/crates/integrations/ai-adapters/src/client/utils.rs diff --git a/src/crates/ai-adapters/src/diagnostics.rs b/src/crates/integrations/ai-adapters/src/diagnostics.rs similarity index 100% rename from src/crates/ai-adapters/src/diagnostics.rs rename to src/crates/integrations/ai-adapters/src/diagnostics.rs diff --git a/src/crates/ai-adapters/src/lib.rs b/src/crates/integrations/ai-adapters/src/lib.rs similarity index 100% rename from src/crates/ai-adapters/src/lib.rs rename to src/crates/integrations/ai-adapters/src/lib.rs diff --git a/src/crates/ai-adapters/src/providers/anthropic/discovery.rs b/src/crates/integrations/ai-adapters/src/providers/anthropic/discovery.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/anthropic/discovery.rs rename to src/crates/integrations/ai-adapters/src/providers/anthropic/discovery.rs diff --git a/src/crates/ai-adapters/src/providers/anthropic/message_converter.rs b/src/crates/integrations/ai-adapters/src/providers/anthropic/message_converter.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/anthropic/message_converter.rs rename to src/crates/integrations/ai-adapters/src/providers/anthropic/message_converter.rs diff --git a/src/crates/ai-adapters/src/providers/anthropic/mod.rs b/src/crates/integrations/ai-adapters/src/providers/anthropic/mod.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/anthropic/mod.rs rename to src/crates/integrations/ai-adapters/src/providers/anthropic/mod.rs diff --git a/src/crates/ai-adapters/src/providers/anthropic/request.rs b/src/crates/integrations/ai-adapters/src/providers/anthropic/request.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/anthropic/request.rs rename to src/crates/integrations/ai-adapters/src/providers/anthropic/request.rs diff --git a/src/crates/ai-adapters/src/providers/gemini/code_assist.rs b/src/crates/integrations/ai-adapters/src/providers/gemini/code_assist.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/gemini/code_assist.rs rename to src/crates/integrations/ai-adapters/src/providers/gemini/code_assist.rs diff --git a/src/crates/ai-adapters/src/providers/gemini/discovery.rs b/src/crates/integrations/ai-adapters/src/providers/gemini/discovery.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/gemini/discovery.rs rename to src/crates/integrations/ai-adapters/src/providers/gemini/discovery.rs diff --git a/src/crates/ai-adapters/src/providers/gemini/message_converter.rs b/src/crates/integrations/ai-adapters/src/providers/gemini/message_converter.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/gemini/message_converter.rs rename to src/crates/integrations/ai-adapters/src/providers/gemini/message_converter.rs diff --git a/src/crates/ai-adapters/src/providers/gemini/mod.rs b/src/crates/integrations/ai-adapters/src/providers/gemini/mod.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/gemini/mod.rs rename to src/crates/integrations/ai-adapters/src/providers/gemini/mod.rs diff --git a/src/crates/ai-adapters/src/providers/gemini/request.rs b/src/crates/integrations/ai-adapters/src/providers/gemini/request.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/gemini/request.rs rename to src/crates/integrations/ai-adapters/src/providers/gemini/request.rs diff --git a/src/crates/ai-adapters/src/providers/mod.rs b/src/crates/integrations/ai-adapters/src/providers/mod.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/mod.rs rename to src/crates/integrations/ai-adapters/src/providers/mod.rs diff --git a/src/crates/ai-adapters/src/providers/openai/chat.rs b/src/crates/integrations/ai-adapters/src/providers/openai/chat.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/openai/chat.rs rename to src/crates/integrations/ai-adapters/src/providers/openai/chat.rs diff --git a/src/crates/ai-adapters/src/providers/openai/codex_chatgpt.rs b/src/crates/integrations/ai-adapters/src/providers/openai/codex_chatgpt.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/openai/codex_chatgpt.rs rename to src/crates/integrations/ai-adapters/src/providers/openai/codex_chatgpt.rs diff --git a/src/crates/ai-adapters/src/providers/openai/common.rs b/src/crates/integrations/ai-adapters/src/providers/openai/common.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/openai/common.rs rename to src/crates/integrations/ai-adapters/src/providers/openai/common.rs diff --git a/src/crates/ai-adapters/src/providers/openai/message_converter.rs b/src/crates/integrations/ai-adapters/src/providers/openai/message_converter.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/openai/message_converter.rs rename to src/crates/integrations/ai-adapters/src/providers/openai/message_converter.rs diff --git a/src/crates/ai-adapters/src/providers/openai/mod.rs b/src/crates/integrations/ai-adapters/src/providers/openai/mod.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/openai/mod.rs rename to src/crates/integrations/ai-adapters/src/providers/openai/mod.rs diff --git a/src/crates/ai-adapters/src/providers/openai/responses.rs b/src/crates/integrations/ai-adapters/src/providers/openai/responses.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/openai/responses.rs rename to src/crates/integrations/ai-adapters/src/providers/openai/responses.rs diff --git a/src/crates/ai-adapters/src/providers/shared.rs b/src/crates/integrations/ai-adapters/src/providers/shared.rs similarity index 100% rename from src/crates/ai-adapters/src/providers/shared.rs rename to src/crates/integrations/ai-adapters/src/providers/shared.rs diff --git a/src/crates/ai-adapters/src/stream/mod.rs b/src/crates/integrations/ai-adapters/src/stream/mod.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/mod.rs rename to src/crates/integrations/ai-adapters/src/stream/mod.rs diff --git a/src/crates/ai-adapters/src/stream/stream_handler/anthropic.rs b/src/crates/integrations/ai-adapters/src/stream/stream_handler/anthropic.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/stream_handler/anthropic.rs rename to src/crates/integrations/ai-adapters/src/stream/stream_handler/anthropic.rs diff --git a/src/crates/ai-adapters/src/stream/stream_handler/gemini.rs b/src/crates/integrations/ai-adapters/src/stream/stream_handler/gemini.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/stream_handler/gemini.rs rename to src/crates/integrations/ai-adapters/src/stream/stream_handler/gemini.rs diff --git a/src/crates/ai-adapters/src/stream/stream_handler/inline_think.rs b/src/crates/integrations/ai-adapters/src/stream/stream_handler/inline_think.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/stream_handler/inline_think.rs rename to src/crates/integrations/ai-adapters/src/stream/stream_handler/inline_think.rs diff --git a/src/crates/ai-adapters/src/stream/stream_handler/mod.rs b/src/crates/integrations/ai-adapters/src/stream/stream_handler/mod.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/stream_handler/mod.rs rename to src/crates/integrations/ai-adapters/src/stream/stream_handler/mod.rs diff --git a/src/crates/ai-adapters/src/stream/stream_handler/openai.rs b/src/crates/integrations/ai-adapters/src/stream/stream_handler/openai.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/stream_handler/openai.rs rename to src/crates/integrations/ai-adapters/src/stream/stream_handler/openai.rs diff --git a/src/crates/ai-adapters/src/stream/stream_handler/responses.rs b/src/crates/integrations/ai-adapters/src/stream/stream_handler/responses.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/stream_handler/responses.rs rename to src/crates/integrations/ai-adapters/src/stream/stream_handler/responses.rs diff --git a/src/crates/ai-adapters/src/stream/stream_handler/stream_stats.rs b/src/crates/integrations/ai-adapters/src/stream/stream_handler/stream_stats.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/stream_handler/stream_stats.rs rename to src/crates/integrations/ai-adapters/src/stream/stream_handler/stream_stats.rs diff --git a/src/crates/ai-adapters/src/stream/types/anthropic.rs b/src/crates/integrations/ai-adapters/src/stream/types/anthropic.rs similarity index 98% rename from src/crates/ai-adapters/src/stream/types/anthropic.rs rename to src/crates/integrations/ai-adapters/src/stream/types/anthropic.rs index d598b7bc2..b0c053995 100644 --- a/src/crates/ai-adapters/src/stream/types/anthropic.rs +++ b/src/crates/integrations/ai-adapters/src/stream/types/anthropic.rs @@ -51,9 +51,8 @@ impl From for UnifiedTokenUsage { // prompt_token_count = total context tokens occupied (industry-standard // "input tokens" metric). For Anthropic this is the three disjoint // components summed; for other providers the API reports this directly. - let prompt_token_count = value.input_tokens.unwrap_or(0) - + cache_read.unwrap_or(0) - + cache_creation.unwrap_or(0); + let prompt_token_count = + value.input_tokens.unwrap_or(0) + cache_read.unwrap_or(0) + cache_creation.unwrap_or(0); let candidates_token_count = value.output_tokens.unwrap_or(0); Self { diff --git a/src/crates/ai-adapters/src/stream/types/gemini.rs b/src/crates/integrations/ai-adapters/src/stream/types/gemini.rs similarity index 99% rename from src/crates/ai-adapters/src/stream/types/gemini.rs rename to src/crates/integrations/ai-adapters/src/stream/types/gemini.rs index 6bd6a15d7..2078edc94 100644 --- a/src/crates/ai-adapters/src/stream/types/gemini.rs +++ b/src/crates/integrations/ai-adapters/src/stream/types/gemini.rs @@ -784,7 +784,11 @@ mod tests { } }); let data: GeminiSSEData = serde_json::from_value(payload).expect("gemini payload"); - let usage = data.into_unified_responses()[0].usage.as_ref().expect("usage").clone(); + let usage = data.into_unified_responses()[0] + .usage + .as_ref() + .expect("usage") + .clone(); assert_eq!(usage.cached_content_token_count, Some(35)); assert_eq!(usage.cache_creation_token_count, None); } diff --git a/src/crates/ai-adapters/src/stream/types/mod.rs b/src/crates/integrations/ai-adapters/src/stream/types/mod.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/types/mod.rs rename to src/crates/integrations/ai-adapters/src/stream/types/mod.rs diff --git a/src/crates/ai-adapters/src/stream/types/openai.rs b/src/crates/integrations/ai-adapters/src/stream/types/openai.rs similarity index 97% rename from src/crates/ai-adapters/src/stream/types/openai.rs rename to src/crates/integrations/ai-adapters/src/stream/types/openai.rs index a541e7799..8146969f9 100644 --- a/src/crates/ai-adapters/src/stream/types/openai.rs +++ b/src/crates/integrations/ai-adapters/src/stream/types/openai.rs @@ -543,7 +543,9 @@ mod tests { // finish_reason should also be preserved (lives at choice top level). assert!( - responses.iter().any(|r| r.finish_reason.as_deref() == Some("stop")), + responses + .iter() + .any(|r| r.finish_reason.as_deref() == Some("stop")), "finish_reason from MiniMax final chunk must be preserved" ); } @@ -818,7 +820,11 @@ mod tests { } }"#; let data: OpenAISSEData = serde_json::from_str(raw).expect("valid openai sse data"); - let usage = data.into_unified_responses()[0].usage.as_ref().expect("usage").clone(); + let usage = data.into_unified_responses()[0] + .usage + .as_ref() + .expect("usage") + .clone(); assert_eq!(usage.cached_content_token_count, Some(40)); assert_eq!(usage.cache_creation_token_count, None); } @@ -840,7 +846,11 @@ mod tests { } }"#; let data: OpenAISSEData = serde_json::from_str(raw).expect("valid deepseek sse data"); - let usage = data.into_unified_responses()[0].usage.as_ref().expect("usage").clone(); + let usage = data.into_unified_responses()[0] + .usage + .as_ref() + .expect("usage") + .clone(); assert_eq!(usage.cached_content_token_count, Some(64)); } @@ -861,7 +871,11 @@ mod tests { } }"#; let data: OpenAISSEData = serde_json::from_str(raw).expect("valid proxy payload"); - let usage = data.into_unified_responses()[0].usage.as_ref().expect("usage").clone(); + let usage = data.into_unified_responses()[0] + .usage + .as_ref() + .expect("usage") + .clone(); assert_eq!(usage.cached_content_token_count, Some(64)); } @@ -879,7 +893,11 @@ mod tests { } }"#; let data: OpenAISSEData = serde_json::from_str(raw).expect("valid openai sse data"); - let usage = data.into_unified_responses()[0].usage.as_ref().expect("usage").clone(); + let usage = data.into_unified_responses()[0] + .usage + .as_ref() + .expect("usage") + .clone(); assert_eq!(usage.cached_content_token_count, None); assert_eq!(usage.cache_creation_token_count, None); } diff --git a/src/crates/ai-adapters/src/stream/types/responses.rs b/src/crates/integrations/ai-adapters/src/stream/types/responses.rs similarity index 98% rename from src/crates/ai-adapters/src/stream/types/responses.rs rename to src/crates/integrations/ai-adapters/src/stream/types/responses.rs index 7a093e3e5..b5000c465 100644 --- a/src/crates/ai-adapters/src/stream/types/responses.rs +++ b/src/crates/integrations/ai-adapters/src/stream/types/responses.rs @@ -129,7 +129,9 @@ pub fn parse_responses_output_item( #[cfg(test)] mod tests { - use super::{parse_responses_output_item, ResponsesCompleted, ResponsesStreamEvent, ResponsesUsage}; + use super::{ + parse_responses_output_item, ResponsesCompleted, ResponsesStreamEvent, ResponsesUsage, + }; use crate::stream::types::unified::UnifiedTokenUsage; use serde_json::json; diff --git a/src/crates/ai-adapters/src/stream/types/unified.rs b/src/crates/integrations/ai-adapters/src/stream/types/unified.rs similarity index 100% rename from src/crates/ai-adapters/src/stream/types/unified.rs rename to src/crates/integrations/ai-adapters/src/stream/types/unified.rs diff --git a/src/crates/ai-adapters/src/tool_call_accumulator.rs b/src/crates/integrations/ai-adapters/src/tool_call_accumulator.rs similarity index 99% rename from src/crates/ai-adapters/src/tool_call_accumulator.rs rename to src/crates/integrations/ai-adapters/src/tool_call_accumulator.rs index 6f2743ba6..9175672f1 100644 --- a/src/crates/ai-adapters/src/tool_call_accumulator.rs +++ b/src/crates/integrations/ai-adapters/src/tool_call_accumulator.rs @@ -412,8 +412,7 @@ impl PendingToolCalls { if let Some(tool_id) = tool_id.filter(|tool_id| !tool_id.is_empty()) { let is_new_tool = pending.tool_id() != tool_id; if is_new_tool { - outcome.finalized_previous = - pending.finalize(ToolCallBoundary::NewTool); + outcome.finalized_previous = pending.finalize(ToolCallBoundary::NewTool); pending.start_new(tool_id, tool_name.clone()); } else { pending.update_tool_name_if_missing(tool_name.clone()); diff --git a/src/crates/ai-adapters/src/types/ai.rs b/src/crates/integrations/ai-adapters/src/types/ai.rs similarity index 100% rename from src/crates/ai-adapters/src/types/ai.rs rename to src/crates/integrations/ai-adapters/src/types/ai.rs diff --git a/src/crates/ai-adapters/src/types/config.rs b/src/crates/integrations/ai-adapters/src/types/config.rs similarity index 100% rename from src/crates/ai-adapters/src/types/config.rs rename to src/crates/integrations/ai-adapters/src/types/config.rs diff --git a/src/crates/ai-adapters/src/types/message.rs b/src/crates/integrations/ai-adapters/src/types/message.rs similarity index 100% rename from src/crates/ai-adapters/src/types/message.rs rename to src/crates/integrations/ai-adapters/src/types/message.rs diff --git a/src/crates/ai-adapters/src/types/mod.rs b/src/crates/integrations/ai-adapters/src/types/mod.rs similarity index 100% rename from src/crates/ai-adapters/src/types/mod.rs rename to src/crates/integrations/ai-adapters/src/types/mod.rs diff --git a/src/crates/ai-adapters/src/types/tool.rs b/src/crates/integrations/ai-adapters/src/types/tool.rs similarity index 100% rename from src/crates/ai-adapters/src/types/tool.rs rename to src/crates/integrations/ai-adapters/src/types/tool.rs diff --git a/src/crates/core/src/util/types/tool_image_attachment.rs b/src/crates/integrations/ai-adapters/src/types/tool_image_attachment.rs similarity index 100% rename from src/crates/core/src/util/types/tool_image_attachment.rs rename to src/crates/integrations/ai-adapters/src/types/tool_image_attachment.rs diff --git a/src/crates/api-layer/AGENTS.md b/src/crates/integrations/api-layer/AGENTS.md similarity index 93% rename from src/crates/api-layer/AGENTS.md rename to src/crates/integrations/api-layer/AGENTS.md index 21abcf921..2e757a0ba 100644 --- a/src/crates/api-layer/AGENTS.md +++ b/src/crates/integrations/api-layer/AGENTS.md @@ -1,6 +1,6 @@ # api-layer Agent Guide -Scope: this guide applies to `src/crates/api-layer`. +Scope: this guide applies to `src/crates/integrations/api-layer`. `bitfun-api-layer` owns platform-agnostic API DTOs and handler coordination. It is the stable boundary between app entrypoints and lower transport/runtime diff --git a/src/crates/api-layer/Cargo.toml b/src/crates/integrations/api-layer/Cargo.toml similarity index 100% rename from src/crates/api-layer/Cargo.toml rename to src/crates/integrations/api-layer/Cargo.toml diff --git a/src/crates/api-layer/src/dto.rs b/src/crates/integrations/api-layer/src/dto.rs similarity index 100% rename from src/crates/api-layer/src/dto.rs rename to src/crates/integrations/api-layer/src/dto.rs diff --git a/src/crates/api-layer/src/handlers.rs b/src/crates/integrations/api-layer/src/handlers.rs similarity index 100% rename from src/crates/api-layer/src/handlers.rs rename to src/crates/integrations/api-layer/src/handlers.rs diff --git a/src/crates/api-layer/src/lib.rs b/src/crates/integrations/api-layer/src/lib.rs similarity index 100% rename from src/crates/api-layer/src/lib.rs rename to src/crates/integrations/api-layer/src/lib.rs diff --git a/src/crates/transport/AGENTS.md b/src/crates/integrations/transport/AGENTS.md similarity index 93% rename from src/crates/transport/AGENTS.md rename to src/crates/integrations/transport/AGENTS.md index 1bafbc16c..dff687c1b 100644 --- a/src/crates/transport/AGENTS.md +++ b/src/crates/integrations/transport/AGENTS.md @@ -1,6 +1,6 @@ # transport Agent Guide -Scope: this guide applies to `src/crates/transport`. +Scope: this guide applies to `src/crates/integrations/transport`. `bitfun-transport` owns cross-platform communication contracts and adapters. It bridges product/API events to concrete delivery channels without owning product diff --git a/src/crates/transport/Cargo.toml b/src/crates/integrations/transport/Cargo.toml similarity index 93% rename from src/crates/transport/Cargo.toml rename to src/crates/integrations/transport/Cargo.toml index 77c158e27..b17384b53 100644 --- a/src/crates/transport/Cargo.toml +++ b/src/crates/integrations/transport/Cargo.toml @@ -10,7 +10,7 @@ name = "bitfun_transport" [dependencies] # Events layer -bitfun-events = { path = "../events" } +bitfun-events = { path = "../../contracts/events" } # Inherited from workspace tokio = { workspace = true } diff --git a/src/crates/transport/src/adapters/cli.rs b/src/crates/integrations/transport/src/adapters/cli.rs similarity index 100% rename from src/crates/transport/src/adapters/cli.rs rename to src/crates/integrations/transport/src/adapters/cli.rs diff --git a/src/crates/transport/src/adapters/mod.rs b/src/crates/integrations/transport/src/adapters/mod.rs similarity index 100% rename from src/crates/transport/src/adapters/mod.rs rename to src/crates/integrations/transport/src/adapters/mod.rs diff --git a/src/crates/transport/src/adapters/tauri.rs b/src/crates/integrations/transport/src/adapters/tauri.rs similarity index 100% rename from src/crates/transport/src/adapters/tauri.rs rename to src/crates/integrations/transport/src/adapters/tauri.rs diff --git a/src/crates/transport/src/adapters/websocket.rs b/src/crates/integrations/transport/src/adapters/websocket.rs similarity index 100% rename from src/crates/transport/src/adapters/websocket.rs rename to src/crates/integrations/transport/src/adapters/websocket.rs diff --git a/src/crates/transport/src/emitter.rs b/src/crates/integrations/transport/src/emitter.rs similarity index 100% rename from src/crates/transport/src/emitter.rs rename to src/crates/integrations/transport/src/emitter.rs diff --git a/src/crates/transport/src/event_bus.rs b/src/crates/integrations/transport/src/event_bus.rs similarity index 100% rename from src/crates/transport/src/event_bus.rs rename to src/crates/integrations/transport/src/event_bus.rs diff --git a/src/crates/transport/src/events.rs b/src/crates/integrations/transport/src/events.rs similarity index 100% rename from src/crates/transport/src/events.rs rename to src/crates/integrations/transport/src/events.rs diff --git a/src/crates/transport/src/lib.rs b/src/crates/integrations/transport/src/lib.rs similarity index 100% rename from src/crates/transport/src/lib.rs rename to src/crates/integrations/transport/src/lib.rs diff --git a/src/crates/transport/src/traits.rs b/src/crates/integrations/transport/src/traits.rs similarity index 100% rename from src/crates/transport/src/traits.rs rename to src/crates/integrations/transport/src/traits.rs diff --git a/src/crates/webdriver/AGENTS.md b/src/crates/integrations/webdriver/AGENTS.md similarity index 92% rename from src/crates/webdriver/AGENTS.md rename to src/crates/integrations/webdriver/AGENTS.md index 4046a65f4..67645f4b6 100644 --- a/src/crates/webdriver/AGENTS.md +++ b/src/crates/integrations/webdriver/AGENTS.md @@ -1,6 +1,6 @@ # webdriver Agent Guide -Scope: this guide applies to `src/crates/webdriver`. +Scope: this guide applies to `src/crates/integrations/webdriver`. `bitfun-webdriver` owns the embedded desktop WebDriver bridge. It is a platform-integration crate, not a product runtime or tool-policy owner. diff --git a/src/crates/webdriver/Cargo.toml b/src/crates/integrations/webdriver/Cargo.toml similarity index 100% rename from src/crates/webdriver/Cargo.toml rename to src/crates/integrations/webdriver/Cargo.toml diff --git a/src/crates/webdriver/src/executor/element/actions.rs b/src/crates/integrations/webdriver/src/executor/element/actions.rs similarity index 100% rename from src/crates/webdriver/src/executor/element/actions.rs rename to src/crates/integrations/webdriver/src/executor/element/actions.rs diff --git a/src/crates/webdriver/src/executor/element/lookup.rs b/src/crates/integrations/webdriver/src/executor/element/lookup.rs similarity index 100% rename from src/crates/webdriver/src/executor/element/lookup.rs rename to src/crates/integrations/webdriver/src/executor/element/lookup.rs diff --git a/src/crates/webdriver/src/executor/element/mod.rs b/src/crates/integrations/webdriver/src/executor/element/mod.rs similarity index 100% rename from src/crates/webdriver/src/executor/element/mod.rs rename to src/crates/integrations/webdriver/src/executor/element/mod.rs diff --git a/src/crates/webdriver/src/executor/element/read.rs b/src/crates/integrations/webdriver/src/executor/element/read.rs similarity index 100% rename from src/crates/webdriver/src/executor/element/read.rs rename to src/crates/integrations/webdriver/src/executor/element/read.rs diff --git a/src/crates/webdriver/src/executor/element/shadow.rs b/src/crates/integrations/webdriver/src/executor/element/shadow.rs similarity index 100% rename from src/crates/webdriver/src/executor/element/shadow.rs rename to src/crates/integrations/webdriver/src/executor/element/shadow.rs diff --git a/src/crates/webdriver/src/executor/interaction.rs b/src/crates/integrations/webdriver/src/executor/interaction.rs similarity index 100% rename from src/crates/webdriver/src/executor/interaction.rs rename to src/crates/integrations/webdriver/src/executor/interaction.rs diff --git a/src/crates/webdriver/src/executor/mod.rs b/src/crates/integrations/webdriver/src/executor/mod.rs similarity index 100% rename from src/crates/webdriver/src/executor/mod.rs rename to src/crates/integrations/webdriver/src/executor/mod.rs diff --git a/src/crates/webdriver/src/executor/navigation.rs b/src/crates/integrations/webdriver/src/executor/navigation.rs similarity index 100% rename from src/crates/webdriver/src/executor/navigation.rs rename to src/crates/integrations/webdriver/src/executor/navigation.rs diff --git a/src/crates/webdriver/src/executor/session.rs b/src/crates/integrations/webdriver/src/executor/session.rs similarity index 100% rename from src/crates/webdriver/src/executor/session.rs rename to src/crates/integrations/webdriver/src/executor/session.rs diff --git a/src/crates/webdriver/src/executor/window.rs b/src/crates/integrations/webdriver/src/executor/window.rs similarity index 100% rename from src/crates/webdriver/src/executor/window.rs rename to src/crates/integrations/webdriver/src/executor/window.rs diff --git a/src/crates/webdriver/src/lib.rs b/src/crates/integrations/webdriver/src/lib.rs similarity index 100% rename from src/crates/webdriver/src/lib.rs rename to src/crates/integrations/webdriver/src/lib.rs diff --git a/src/crates/webdriver/src/platform/capture.rs b/src/crates/integrations/webdriver/src/platform/capture.rs similarity index 100% rename from src/crates/webdriver/src/platform/capture.rs rename to src/crates/integrations/webdriver/src/platform/capture.rs diff --git a/src/crates/webdriver/src/platform/evaluator/macos.rs b/src/crates/integrations/webdriver/src/platform/evaluator/macos.rs similarity index 100% rename from src/crates/webdriver/src/platform/evaluator/macos.rs rename to src/crates/integrations/webdriver/src/platform/evaluator/macos.rs diff --git a/src/crates/webdriver/src/platform/evaluator/mod.rs b/src/crates/integrations/webdriver/src/platform/evaluator/mod.rs similarity index 100% rename from src/crates/webdriver/src/platform/evaluator/mod.rs rename to src/crates/integrations/webdriver/src/platform/evaluator/mod.rs diff --git a/src/crates/webdriver/src/platform/evaluator/windows.rs b/src/crates/integrations/webdriver/src/platform/evaluator/windows.rs similarity index 100% rename from src/crates/webdriver/src/platform/evaluator/windows.rs rename to src/crates/integrations/webdriver/src/platform/evaluator/windows.rs diff --git a/src/crates/webdriver/src/platform/image.rs b/src/crates/integrations/webdriver/src/platform/image.rs similarity index 100% rename from src/crates/webdriver/src/platform/image.rs rename to src/crates/integrations/webdriver/src/platform/image.rs diff --git a/src/crates/webdriver/src/platform/mod.rs b/src/crates/integrations/webdriver/src/platform/mod.rs similarity index 100% rename from src/crates/webdriver/src/platform/mod.rs rename to src/crates/integrations/webdriver/src/platform/mod.rs diff --git a/src/crates/webdriver/src/platform/types.rs b/src/crates/integrations/webdriver/src/platform/types.rs similarity index 100% rename from src/crates/webdriver/src/platform/types.rs rename to src/crates/integrations/webdriver/src/platform/types.rs diff --git a/src/crates/webdriver/src/runtime/api/element.rs b/src/crates/integrations/webdriver/src/runtime/api/element.rs similarity index 100% rename from src/crates/webdriver/src/runtime/api/element.rs rename to src/crates/integrations/webdriver/src/runtime/api/element.rs diff --git a/src/crates/webdriver/src/runtime/api/interaction.rs b/src/crates/integrations/webdriver/src/runtime/api/interaction.rs similarity index 100% rename from src/crates/webdriver/src/runtime/api/interaction.rs rename to src/crates/integrations/webdriver/src/runtime/api/interaction.rs diff --git a/src/crates/webdriver/src/runtime/api/mod.rs b/src/crates/integrations/webdriver/src/runtime/api/mod.rs similarity index 100% rename from src/crates/webdriver/src/runtime/api/mod.rs rename to src/crates/integrations/webdriver/src/runtime/api/mod.rs diff --git a/src/crates/webdriver/src/runtime/api/navigation.rs b/src/crates/integrations/webdriver/src/runtime/api/navigation.rs similarity index 100% rename from src/crates/webdriver/src/runtime/api/navigation.rs rename to src/crates/integrations/webdriver/src/runtime/api/navigation.rs diff --git a/src/crates/webdriver/src/runtime/mod.rs b/src/crates/integrations/webdriver/src/runtime/mod.rs similarity index 100% rename from src/crates/webdriver/src/runtime/mod.rs rename to src/crates/integrations/webdriver/src/runtime/mod.rs diff --git a/src/crates/webdriver/src/runtime/script.rs b/src/crates/integrations/webdriver/src/runtime/script.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script.rs rename to src/crates/integrations/webdriver/src/runtime/script.rs diff --git a/src/crates/webdriver/src/runtime/script/core/alert.rs b/src/crates/integrations/webdriver/src/runtime/script/core/alert.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/alert.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/alert.rs diff --git a/src/crates/webdriver/src/runtime/script/core/context.rs b/src/crates/integrations/webdriver/src/runtime/script/core/context.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/context.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/context.rs diff --git a/src/crates/webdriver/src/runtime/script/core/cookie.rs b/src/crates/integrations/webdriver/src/runtime/script/core/cookie.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/cookie.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/cookie.rs diff --git a/src/crates/webdriver/src/runtime/script/core/execution.rs b/src/crates/integrations/webdriver/src/runtime/script/core/execution.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/execution.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/execution.rs diff --git a/src/crates/webdriver/src/runtime/script/core/locator.rs b/src/crates/integrations/webdriver/src/runtime/script/core/locator.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/locator.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/locator.rs diff --git a/src/crates/webdriver/src/runtime/script/core/mod.rs b/src/crates/integrations/webdriver/src/runtime/script/core/mod.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/mod.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/mod.rs diff --git a/src/crates/webdriver/src/runtime/script/core/runtime.rs b/src/crates/integrations/webdriver/src/runtime/script/core/runtime.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/runtime.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/runtime.rs diff --git a/src/crates/webdriver/src/runtime/script/core/shadow.rs b/src/crates/integrations/webdriver/src/runtime/script/core/shadow.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/shadow.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/shadow.rs diff --git a/src/crates/webdriver/src/runtime/script/core/store.rs b/src/crates/integrations/webdriver/src/runtime/script/core/store.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/store.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/store.rs diff --git a/src/crates/webdriver/src/runtime/script/core/visibility.rs b/src/crates/integrations/webdriver/src/runtime/script/core/visibility.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/core/visibility.rs rename to src/crates/integrations/webdriver/src/runtime/script/core/visibility.rs diff --git a/src/crates/webdriver/src/runtime/script/input.rs b/src/crates/integrations/webdriver/src/runtime/script/input.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/input.rs rename to src/crates/integrations/webdriver/src/runtime/script/input.rs diff --git a/src/crates/webdriver/src/runtime/script/keyboard/edit.rs b/src/crates/integrations/webdriver/src/runtime/script/keyboard/edit.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/keyboard/edit.rs rename to src/crates/integrations/webdriver/src/runtime/script/keyboard/edit.rs diff --git a/src/crates/webdriver/src/runtime/script/keyboard/event.rs b/src/crates/integrations/webdriver/src/runtime/script/keyboard/event.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/keyboard/event.rs rename to src/crates/integrations/webdriver/src/runtime/script/keyboard/event.rs diff --git a/src/crates/webdriver/src/runtime/script/keyboard/focus.rs b/src/crates/integrations/webdriver/src/runtime/script/keyboard/focus.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/keyboard/focus.rs rename to src/crates/integrations/webdriver/src/runtime/script/keyboard/focus.rs diff --git a/src/crates/webdriver/src/runtime/script/keyboard/mapping.rs b/src/crates/integrations/webdriver/src/runtime/script/keyboard/mapping.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/keyboard/mapping.rs rename to src/crates/integrations/webdriver/src/runtime/script/keyboard/mapping.rs diff --git a/src/crates/webdriver/src/runtime/script/keyboard/mod.rs b/src/crates/integrations/webdriver/src/runtime/script/keyboard/mod.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/keyboard/mod.rs rename to src/crates/integrations/webdriver/src/runtime/script/keyboard/mod.rs diff --git a/src/crates/webdriver/src/runtime/script/pointer/key_source.rs b/src/crates/integrations/webdriver/src/runtime/script/pointer/key_source.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/pointer/key_source.rs rename to src/crates/integrations/webdriver/src/runtime/script/pointer/key_source.rs diff --git a/src/crates/webdriver/src/runtime/script/pointer/mod.rs b/src/crates/integrations/webdriver/src/runtime/script/pointer/mod.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/pointer/mod.rs rename to src/crates/integrations/webdriver/src/runtime/script/pointer/mod.rs diff --git a/src/crates/webdriver/src/runtime/script/pointer/mouse.rs b/src/crates/integrations/webdriver/src/runtime/script/pointer/mouse.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/pointer/mouse.rs rename to src/crates/integrations/webdriver/src/runtime/script/pointer/mouse.rs diff --git a/src/crates/webdriver/src/runtime/script/pointer/perform.rs b/src/crates/integrations/webdriver/src/runtime/script/pointer/perform.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/pointer/perform.rs rename to src/crates/integrations/webdriver/src/runtime/script/pointer/perform.rs diff --git a/src/crates/webdriver/src/runtime/script/pointer/pointer_source.rs b/src/crates/integrations/webdriver/src/runtime/script/pointer/pointer_source.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/pointer/pointer_source.rs rename to src/crates/integrations/webdriver/src/runtime/script/pointer/pointer_source.rs diff --git a/src/crates/webdriver/src/runtime/script/pointer/release.rs b/src/crates/integrations/webdriver/src/runtime/script/pointer/release.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/pointer/release.rs rename to src/crates/integrations/webdriver/src/runtime/script/pointer/release.rs diff --git a/src/crates/webdriver/src/runtime/script/pointer/wheel.rs b/src/crates/integrations/webdriver/src/runtime/script/pointer/wheel.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/pointer/wheel.rs rename to src/crates/integrations/webdriver/src/runtime/script/pointer/wheel.rs diff --git a/src/crates/webdriver/src/runtime/script/pointer/wheel_source.rs b/src/crates/integrations/webdriver/src/runtime/script/pointer/wheel_source.rs similarity index 100% rename from src/crates/webdriver/src/runtime/script/pointer/wheel_source.rs rename to src/crates/integrations/webdriver/src/runtime/script/pointer/wheel_source.rs diff --git a/src/crates/webdriver/src/server/handlers/actions.rs b/src/crates/integrations/webdriver/src/server/handlers/actions.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/actions.rs rename to src/crates/integrations/webdriver/src/server/handlers/actions.rs diff --git a/src/crates/webdriver/src/server/handlers/alert.rs b/src/crates/integrations/webdriver/src/server/handlers/alert.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/alert.rs rename to src/crates/integrations/webdriver/src/server/handlers/alert.rs diff --git a/src/crates/webdriver/src/server/handlers/cookie.rs b/src/crates/integrations/webdriver/src/server/handlers/cookie.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/cookie.rs rename to src/crates/integrations/webdriver/src/server/handlers/cookie.rs diff --git a/src/crates/webdriver/src/server/handlers/element.rs b/src/crates/integrations/webdriver/src/server/handlers/element.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/element.rs rename to src/crates/integrations/webdriver/src/server/handlers/element.rs diff --git a/src/crates/webdriver/src/server/handlers/frame.rs b/src/crates/integrations/webdriver/src/server/handlers/frame.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/frame.rs rename to src/crates/integrations/webdriver/src/server/handlers/frame.rs diff --git a/src/crates/webdriver/src/server/handlers/logs.rs b/src/crates/integrations/webdriver/src/server/handlers/logs.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/logs.rs rename to src/crates/integrations/webdriver/src/server/handlers/logs.rs diff --git a/src/crates/webdriver/src/server/handlers/mod.rs b/src/crates/integrations/webdriver/src/server/handlers/mod.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/mod.rs rename to src/crates/integrations/webdriver/src/server/handlers/mod.rs diff --git a/src/crates/webdriver/src/server/handlers/navigation.rs b/src/crates/integrations/webdriver/src/server/handlers/navigation.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/navigation.rs rename to src/crates/integrations/webdriver/src/server/handlers/navigation.rs diff --git a/src/crates/webdriver/src/server/handlers/print.rs b/src/crates/integrations/webdriver/src/server/handlers/print.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/print.rs rename to src/crates/integrations/webdriver/src/server/handlers/print.rs diff --git a/src/crates/webdriver/src/server/handlers/screenshot.rs b/src/crates/integrations/webdriver/src/server/handlers/screenshot.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/screenshot.rs rename to src/crates/integrations/webdriver/src/server/handlers/screenshot.rs diff --git a/src/crates/webdriver/src/server/handlers/script.rs b/src/crates/integrations/webdriver/src/server/handlers/script.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/script.rs rename to src/crates/integrations/webdriver/src/server/handlers/script.rs diff --git a/src/crates/webdriver/src/server/handlers/session.rs b/src/crates/integrations/webdriver/src/server/handlers/session.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/session.rs rename to src/crates/integrations/webdriver/src/server/handlers/session.rs diff --git a/src/crates/webdriver/src/server/handlers/shadow.rs b/src/crates/integrations/webdriver/src/server/handlers/shadow.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/shadow.rs rename to src/crates/integrations/webdriver/src/server/handlers/shadow.rs diff --git a/src/crates/webdriver/src/server/handlers/timeouts.rs b/src/crates/integrations/webdriver/src/server/handlers/timeouts.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/timeouts.rs rename to src/crates/integrations/webdriver/src/server/handlers/timeouts.rs diff --git a/src/crates/webdriver/src/server/handlers/window.rs b/src/crates/integrations/webdriver/src/server/handlers/window.rs similarity index 100% rename from src/crates/webdriver/src/server/handlers/window.rs rename to src/crates/integrations/webdriver/src/server/handlers/window.rs diff --git a/src/crates/webdriver/src/server/mod.rs b/src/crates/integrations/webdriver/src/server/mod.rs similarity index 100% rename from src/crates/webdriver/src/server/mod.rs rename to src/crates/integrations/webdriver/src/server/mod.rs diff --git a/src/crates/webdriver/src/server/response.rs b/src/crates/integrations/webdriver/src/server/response.rs similarity index 100% rename from src/crates/webdriver/src/server/response.rs rename to src/crates/integrations/webdriver/src/server/response.rs diff --git a/src/crates/webdriver/src/server/router.rs b/src/crates/integrations/webdriver/src/server/router.rs similarity index 100% rename from src/crates/webdriver/src/server/router.rs rename to src/crates/integrations/webdriver/src/server/router.rs diff --git a/src/crates/webdriver/src/webdriver/element.rs b/src/crates/integrations/webdriver/src/webdriver/element.rs similarity index 100% rename from src/crates/webdriver/src/webdriver/element.rs rename to src/crates/integrations/webdriver/src/webdriver/element.rs diff --git a/src/crates/webdriver/src/webdriver/locator.rs b/src/crates/integrations/webdriver/src/webdriver/locator.rs similarity index 100% rename from src/crates/webdriver/src/webdriver/locator.rs rename to src/crates/integrations/webdriver/src/webdriver/locator.rs diff --git a/src/crates/webdriver/src/webdriver/mod.rs b/src/crates/integrations/webdriver/src/webdriver/mod.rs similarity index 100% rename from src/crates/webdriver/src/webdriver/mod.rs rename to src/crates/integrations/webdriver/src/webdriver/mod.rs diff --git a/src/crates/webdriver/src/webdriver/session.rs b/src/crates/integrations/webdriver/src/webdriver/session.rs similarity index 100% rename from src/crates/webdriver/src/webdriver/session.rs rename to src/crates/integrations/webdriver/src/webdriver/session.rs diff --git a/src/crates/product/AGENTS-CN.md b/src/crates/product/AGENTS-CN.md new file mode 100644 index 000000000..576c311ac --- /dev/null +++ b/src/crates/product/AGENTS-CN.md @@ -0,0 +1,25 @@ +**中文** | [English](AGENTS.md) + +# 产品层 + +本层负责不绑定 UI 形态、应用进程、外部协议或平台 adapter 的产品领域事实和能力组装信息。 + +## 模块 + +| Crate | 职责 | 本地文档 | +|---|---|---| +| `product-domains` | MiniApp、function-agent 等产品领域契约 | [AGENTS.md](product-domains/AGENTS.md) | +| `product-capabilities` | Capability packs、delivery-profile facts、tool provider groups 和 harness registry facts | [AGENTS.md](product-capabilities/AGENTS.md) | + +## 放置规则 + +- 被多个交付形态共享的产品概念、capability facts 和领域策略放到这里。 +- UI 文案、route state、协议 adapter、Tauri command、OS 服务实现不要进入 product crate。 +- Product capabilities 可以描述所需 runtime services 和 tool packs,但不实例化具体 service implementation。 +- 产品规则需要平台数据时,应依赖 contract 或 service API;不要在 product code 中直接读取 host state。 + +## 依赖边界 + +- Product crate 可以依赖 `contracts` 和用于描述能力的少量 `runtime` facts。 +- Product crate 不得依赖 `facade/core`、`src/apps`、前端代码或 Tauri。 +- 除非 product crate 拥有 service 所需的领域类型,否则避免依赖 `services`;具体行为优先留在 services。 diff --git a/src/crates/product/AGENTS.md b/src/crates/product/AGENTS.md new file mode 100644 index 000000000..fdc9bc529 --- /dev/null +++ b/src/crates/product/AGENTS.md @@ -0,0 +1,33 @@ +[中文](AGENTS-CN.md) | **English** + +# Product Layer + +This layer owns product-domain facts and capability composition that are not tied +to a UI surface, app process, external protocol, or platform adapter. + +## Modules + +| Crate | Responsibility | Local doc | +|---|---|---| +| `product-domains` | Product-owned domains such as MiniApp and function-agent domain contracts | [AGENTS.md](product-domains/AGENTS.md) | +| `product-capabilities` | Capability packs, delivery-profile facts, tool provider groups, and harness registry facts | [AGENTS.md](product-capabilities/AGENTS.md) | + +## Placement Rules + +- Put product concepts, capability facts, and domain policies here when they are + shared by multiple delivery forms. +- Keep UI copy, route state, protocol adapters, Tauri commands, and OS service + implementations out of product crates. +- Product capabilities may describe required runtime services and tool packs, + but should not instantiate concrete service implementations. +- When a product rule needs platform data, depend on a contract or service API; + do not directly read host state from product code. + +## Dependency Boundaries + +- Product crates may depend on `contracts` and selected `runtime` facts needed + to describe capabilities. +- Product crates must not depend on `facade/core`, `src/apps`, frontend code, or + Tauri. +- Avoid dependencies on `services` unless the product crate owns the domain type + required by that service; prefer keeping concrete behavior in services. diff --git a/src/crates/product-capabilities/AGENTS.md b/src/crates/product/product-capabilities/AGENTS.md similarity index 78% rename from src/crates/product-capabilities/AGENTS.md rename to src/crates/product/product-capabilities/AGENTS.md index f9528f852..0c2ff6836 100644 --- a/src/crates/product-capabilities/AGENTS.md +++ b/src/crates/product/product-capabilities/AGENTS.md @@ -1,10 +1,11 @@ # product-capabilities Agent Guide -Scope: this guide applies to `src/crates/product-capabilities`. +Scope: this guide applies to `src/crates/product/product-capabilities`. `bitfun-product-capabilities` owns product capability pack assembly facts: which -runtime services, tool provider group ids, and harness provider descriptors a -product capability selects. It does not own concrete runtime execution. +runtime services, tool provider group ids, harness provider descriptors, and +profile-scoped harness registries a product capability selects. It does not own +concrete runtime execution. ## Guardrails diff --git a/src/crates/product-capabilities/Cargo.toml b/src/crates/product/product-capabilities/Cargo.toml similarity index 55% rename from src/crates/product-capabilities/Cargo.toml rename to src/crates/product/product-capabilities/Cargo.toml index a0e129e98..2b01c5e03 100644 --- a/src/crates/product-capabilities/Cargo.toml +++ b/src/crates/product/product-capabilities/Cargo.toml @@ -10,6 +10,6 @@ name = "bitfun_product_capabilities" crate-type = ["rlib"] [dependencies] -bitfun-harness = { path = "../harness" } -bitfun-runtime-ports = { path = "../runtime-ports" } -bitfun-tool-packs = { path = "../tool-packs", default-features = false } +bitfun-harness = { path = "../../execution/harness" } +bitfun-runtime-ports = { path = "../../contracts/runtime-ports" } +bitfun-tool-packs = { path = "../../execution/tool-packs", default-features = false } diff --git a/src/crates/product-capabilities/src/lib.rs b/src/crates/product/product-capabilities/src/lib.rs similarity index 98% rename from src/crates/product-capabilities/src/lib.rs rename to src/crates/product/product-capabilities/src/lib.rs index b44f89b60..1de2e6a12 100644 --- a/src/crates/product-capabilities/src/lib.rs +++ b/src/crates/product/product-capabilities/src/lib.rs @@ -566,6 +566,12 @@ pub fn default_product_assembly_plan() -> ProductAssemblyPlan { product_assembly_plan_for_profile(DeliveryProfile::ProductFull) } +pub fn product_harness_registry_for_profile( + profile: DeliveryProfile, +) -> Result { + product_assembly_plan_for_profile(profile).build_harness_registry() +} + pub fn default_product_harness_registry() -> Result { - default_product_capability_registry().build_harness_registry() + product_harness_registry_for_profile(DeliveryProfile::ProductFull) } diff --git a/src/crates/product-capabilities/tests/product_capabilities.rs b/src/crates/product/product-capabilities/tests/product_capabilities.rs similarity index 100% rename from src/crates/product-capabilities/tests/product_capabilities.rs rename to src/crates/product/product-capabilities/tests/product_capabilities.rs diff --git a/src/crates/product-domains/AGENTS-CN.md b/src/crates/product/product-domains/AGENTS-CN.md similarity index 97% rename from src/crates/product-domains/AGENTS-CN.md rename to src/crates/product/product-domains/AGENTS-CN.md index d5258a4ba..6f50a056b 100644 --- a/src/crates/product-domains/AGENTS-CN.md +++ b/src/crates/product/product-domains/AGENTS-CN.md @@ -2,7 +2,7 @@ # Product Domains Agent 指南 -适用范围:`src/crates/product-domains`。 +适用范围:`src/crates/product/product-domains`。 `bitfun-product-domains` 承载可脱离完整 core runtime 编译的平台无关产品领域契约。这里应聚焦纯状态、DTO、策略和窄 ports;具体 runtime 行为不属于本 crate。 diff --git a/src/crates/product-domains/AGENTS.md b/src/crates/product/product-domains/AGENTS.md similarity index 97% rename from src/crates/product-domains/AGENTS.md rename to src/crates/product/product-domains/AGENTS.md index 847d48cdd..af893376e 100644 --- a/src/crates/product-domains/AGENTS.md +++ b/src/crates/product/product-domains/AGENTS.md @@ -2,7 +2,7 @@ # Product Domains Agent Guide -Scope: this guide applies to `src/crates/product-domains`. +Scope: this guide applies to `src/crates/product/product-domains`. `bitfun-product-domains` owns platform-agnostic product-domain contracts that can compile without the full core runtime. Keep it focused on pure state, DTOs, diff --git a/src/crates/product-domains/Cargo.toml b/src/crates/product/product-domains/Cargo.toml similarity index 100% rename from src/crates/product-domains/Cargo.toml rename to src/crates/product/product-domains/Cargo.toml diff --git a/src/crates/product-domains/src/function_agents/common.rs b/src/crates/product/product-domains/src/function_agents/common.rs similarity index 100% rename from src/crates/product-domains/src/function_agents/common.rs rename to src/crates/product/product-domains/src/function_agents/common.rs diff --git a/src/crates/product-domains/src/function_agents/git_func_agent/context_analyzer.rs b/src/crates/product/product-domains/src/function_agents/git_func_agent/context_analyzer.rs similarity index 100% rename from src/crates/product-domains/src/function_agents/git_func_agent/context_analyzer.rs rename to src/crates/product/product-domains/src/function_agents/git_func_agent/context_analyzer.rs diff --git a/src/crates/product-domains/src/function_agents/git_func_agent/mod.rs b/src/crates/product/product-domains/src/function_agents/git_func_agent/mod.rs similarity index 100% rename from src/crates/product-domains/src/function_agents/git_func_agent/mod.rs rename to src/crates/product/product-domains/src/function_agents/git_func_agent/mod.rs diff --git a/src/crates/product-domains/src/function_agents/git_func_agent/prompts/commit_message.md b/src/crates/product/product-domains/src/function_agents/git_func_agent/prompts/commit_message.md similarity index 100% rename from src/crates/product-domains/src/function_agents/git_func_agent/prompts/commit_message.md rename to src/crates/product/product-domains/src/function_agents/git_func_agent/prompts/commit_message.md diff --git a/src/crates/product-domains/src/function_agents/git_func_agent/types.rs b/src/crates/product/product-domains/src/function_agents/git_func_agent/types.rs similarity index 100% rename from src/crates/product-domains/src/function_agents/git_func_agent/types.rs rename to src/crates/product/product-domains/src/function_agents/git_func_agent/types.rs diff --git a/src/crates/product-domains/src/function_agents/git_func_agent/utils.rs b/src/crates/product/product-domains/src/function_agents/git_func_agent/utils.rs similarity index 100% rename from src/crates/product-domains/src/function_agents/git_func_agent/utils.rs rename to src/crates/product/product-domains/src/function_agents/git_func_agent/utils.rs diff --git a/src/crates/product-domains/src/function_agents/mod.rs b/src/crates/product/product-domains/src/function_agents/mod.rs similarity index 100% rename from src/crates/product-domains/src/function_agents/mod.rs rename to src/crates/product/product-domains/src/function_agents/mod.rs diff --git a/src/crates/product-domains/src/function_agents/ports.rs b/src/crates/product/product-domains/src/function_agents/ports.rs similarity index 100% rename from src/crates/product-domains/src/function_agents/ports.rs rename to src/crates/product/product-domains/src/function_agents/ports.rs diff --git a/src/crates/product-domains/src/function_agents/startchat_func_agent/mod.rs b/src/crates/product/product-domains/src/function_agents/startchat_func_agent/mod.rs similarity index 100% rename from src/crates/product-domains/src/function_agents/startchat_func_agent/mod.rs rename to src/crates/product/product-domains/src/function_agents/startchat_func_agent/mod.rs diff --git a/src/crates/product-domains/src/function_agents/startchat_func_agent/prompts/work_state_analysis.md b/src/crates/product/product-domains/src/function_agents/startchat_func_agent/prompts/work_state_analysis.md similarity index 100% rename from src/crates/product-domains/src/function_agents/startchat_func_agent/prompts/work_state_analysis.md rename to src/crates/product/product-domains/src/function_agents/startchat_func_agent/prompts/work_state_analysis.md diff --git a/src/crates/product-domains/src/function_agents/startchat_func_agent/types.rs b/src/crates/product/product-domains/src/function_agents/startchat_func_agent/types.rs similarity index 100% rename from src/crates/product-domains/src/function_agents/startchat_func_agent/types.rs rename to src/crates/product/product-domains/src/function_agents/startchat_func_agent/types.rs diff --git a/src/crates/product-domains/src/function_agents/startchat_func_agent/utils.rs b/src/crates/product/product-domains/src/function_agents/startchat_func_agent/utils.rs similarity index 99% rename from src/crates/product-domains/src/function_agents/startchat_func_agent/utils.rs rename to src/crates/product/product-domains/src/function_agents/startchat_func_agent/utils.rs index b65e9caba..276bc63d2 100644 --- a/src/crates/product-domains/src/function_agents/startchat_func_agent/utils.rs +++ b/src/crates/product/product-domains/src/function_agents/startchat_func_agent/utils.rs @@ -1,7 +1,7 @@ //! Pure Startchat function-agent helper utilities. use crate::function_agents::common::{ - AgentError, AgentResult, Language, extract_json_from_ai_response, + extract_json_from_ai_response, AgentError, AgentResult, Language, }; use crate::function_agents::startchat_func_agent::types::*; diff --git a/src/crates/product-domains/src/lib.rs b/src/crates/product/product-domains/src/lib.rs similarity index 100% rename from src/crates/product-domains/src/lib.rs rename to src/crates/product/product-domains/src/lib.rs diff --git a/src/crates/product-domains/src/miniapp/bridge_builder.rs b/src/crates/product/product-domains/src/miniapp/bridge_builder.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/bridge_builder.rs rename to src/crates/product/product-domains/src/miniapp/bridge_builder.rs diff --git a/src/crates/product-domains/src/miniapp/builtin.rs b/src/crates/product/product-domains/src/miniapp/builtin.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin.rs rename to src/crates/product/product-domains/src/miniapp/builtin.rs diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/index.html b/src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/index.html similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/index.html rename to src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/index.html diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/meta.json b/src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/meta.json similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/meta.json rename to src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/meta.json diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/style.css b/src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/style.css similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/style.css rename to src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/style.css diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/ui.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/ui.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/ui.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/ui.js diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/worker.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/worker.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/coding-selfie/worker.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/coding-selfie/worker.js diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/divination/index.html b/src/crates/product/product-domains/src/miniapp/builtin/assets/divination/index.html similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/divination/index.html rename to src/crates/product/product-domains/src/miniapp/builtin/assets/divination/index.html diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/divination/meta.json b/src/crates/product/product-domains/src/miniapp/builtin/assets/divination/meta.json similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/divination/meta.json rename to src/crates/product/product-domains/src/miniapp/builtin/assets/divination/meta.json diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/divination/style.css b/src/crates/product/product-domains/src/miniapp/builtin/assets/divination/style.css similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/divination/style.css rename to src/crates/product/product-domains/src/miniapp/builtin/assets/divination/style.css diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/divination/ui.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/divination/ui.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/divination/ui.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/divination/ui.js diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/divination/worker.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/divination/worker.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/divination/worker.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/divination/worker.js diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/gomoku/index.html b/src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/index.html similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/gomoku/index.html rename to src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/index.html diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/gomoku/meta.json b/src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/meta.json similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/gomoku/meta.json rename to src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/meta.json diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/gomoku/style.css b/src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/style.css similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/gomoku/style.css rename to src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/style.css diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/gomoku/ui.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/ui.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/gomoku/ui.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/ui.js diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/gomoku/worker.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/worker.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/gomoku/worker.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/gomoku/worker.js diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/pr-review/index.html b/src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/index.html similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/pr-review/index.html rename to src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/index.html diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/pr-review/meta.json b/src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/meta.json similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/pr-review/meta.json rename to src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/meta.json diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/pr-review/style.css b/src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/style.css similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/pr-review/style.css rename to src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/style.css diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/pr-review/ui.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/ui.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/pr-review/ui.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/ui.js diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/pr-review/worker.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/worker.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/pr-review/worker.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/pr-review/worker.js diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/index.html b/src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/index.html similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/index.html rename to src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/index.html diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/meta.json b/src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/meta.json similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/meta.json rename to src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/meta.json diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/style.css b/src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/style.css similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/style.css rename to src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/style.css diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/ui.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/ui.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/ui.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/ui.js diff --git a/src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/worker.js b/src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/worker.js similarity index 100% rename from src/crates/product-domains/src/miniapp/builtin/assets/regex-playground/worker.js rename to src/crates/product/product-domains/src/miniapp/builtin/assets/regex-playground/worker.js diff --git a/src/crates/product-domains/src/miniapp/compiler.rs b/src/crates/product/product-domains/src/miniapp/compiler.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/compiler.rs rename to src/crates/product/product-domains/src/miniapp/compiler.rs diff --git a/src/crates/product-domains/src/miniapp/customization.rs b/src/crates/product/product-domains/src/miniapp/customization.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/customization.rs rename to src/crates/product/product-domains/src/miniapp/customization.rs diff --git a/src/crates/product-domains/src/miniapp/draft.rs b/src/crates/product/product-domains/src/miniapp/draft.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/draft.rs rename to src/crates/product/product-domains/src/miniapp/draft.rs diff --git a/src/crates/product-domains/src/miniapp/exporter.rs b/src/crates/product/product-domains/src/miniapp/exporter.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/exporter.rs rename to src/crates/product/product-domains/src/miniapp/exporter.rs diff --git a/src/crates/product-domains/src/miniapp/host_routing.rs b/src/crates/product/product-domains/src/miniapp/host_routing.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/host_routing.rs rename to src/crates/product/product-domains/src/miniapp/host_routing.rs diff --git a/src/crates/product-domains/src/miniapp/lifecycle.rs b/src/crates/product/product-domains/src/miniapp/lifecycle.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/lifecycle.rs rename to src/crates/product/product-domains/src/miniapp/lifecycle.rs diff --git a/src/crates/product-domains/src/miniapp/mod.rs b/src/crates/product/product-domains/src/miniapp/mod.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/mod.rs rename to src/crates/product/product-domains/src/miniapp/mod.rs diff --git a/src/crates/product-domains/src/miniapp/permission_policy.rs b/src/crates/product/product-domains/src/miniapp/permission_policy.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/permission_policy.rs rename to src/crates/product/product-domains/src/miniapp/permission_policy.rs diff --git a/src/crates/product-domains/src/miniapp/ports.rs b/src/crates/product/product-domains/src/miniapp/ports.rs similarity index 99% rename from src/crates/product-domains/src/miniapp/ports.rs rename to src/crates/product/product-domains/src/miniapp/ports.rs index d2027e787..245fc5a9a 100644 --- a/src/crates/product-domains/src/miniapp/ports.rs +++ b/src/crates/product/product-domains/src/miniapp/ports.rs @@ -68,7 +68,7 @@ pub trait MiniAppStoragePort: Send + Sync { fn load_source(&self, app_id: String) -> MiniAppPortFuture<'_, MiniAppSource>; fn save(&self, app: MiniApp) -> MiniAppPortFuture<'_, ()>; fn save_version(&self, app_id: String, version: u32, app: MiniApp) - -> MiniAppPortFuture<'_, ()>; + -> MiniAppPortFuture<'_, ()>; fn load_app_storage(&self, app_id: String) -> MiniAppPortFuture<'_, serde_json::Value>; fn save_app_storage( &self, diff --git a/src/crates/product-domains/src/miniapp/runtime.rs b/src/crates/product/product-domains/src/miniapp/runtime.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/runtime.rs rename to src/crates/product/product-domains/src/miniapp/runtime.rs diff --git a/src/crates/product-domains/src/miniapp/storage.rs b/src/crates/product/product-domains/src/miniapp/storage.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/storage.rs rename to src/crates/product/product-domains/src/miniapp/storage.rs diff --git a/src/crates/product-domains/src/miniapp/types.rs b/src/crates/product/product-domains/src/miniapp/types.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/types.rs rename to src/crates/product/product-domains/src/miniapp/types.rs diff --git a/src/crates/product-domains/src/miniapp/worker.rs b/src/crates/product/product-domains/src/miniapp/worker.rs similarity index 100% rename from src/crates/product-domains/src/miniapp/worker.rs rename to src/crates/product/product-domains/src/miniapp/worker.rs diff --git a/src/crates/product-domains/tests/function_agent_contracts.rs b/src/crates/product/product-domains/tests/function_agent_contracts.rs similarity index 99% rename from src/crates/product-domains/tests/function_agent_contracts.rs rename to src/crates/product/product-domains/tests/function_agent_contracts.rs index f9974a8f5..35e3db18c 100644 --- a/src/crates/product-domains/tests/function_agent_contracts.rs +++ b/src/crates/product/product-domains/tests/function_agent_contracts.rs @@ -250,7 +250,7 @@ fn git_function_agent_prompt_helpers_preserve_ai_contract() { #[test] fn git_function_agent_summary_helpers_preserve_commit_shape() { let changed_files = vec![ - "src/crates/core/lib.rs".to_string(), + "src/crates/facade/core/lib.rs".to_string(), "README.md".to_string(), ]; let summary = build_changes_summary_from_paths(&changed_files, 2, 1); @@ -258,7 +258,10 @@ fn git_function_agent_summary_helpers_preserve_commit_shape() { assert_eq!(summary.total_additions, 30); assert_eq!(summary.total_deletions, 15); assert_eq!(summary.files_changed, 2); - assert_eq!(summary.file_changes[0].path, "src/crates/core/lib.rs"); + assert_eq!( + summary.file_changes[0].path, + "src/crates/facade/core/lib.rs" + ); assert_eq!(summary.file_changes[0].file_type, "rs"); assert!(summary.affected_modules.contains(&"core".to_string())); assert!(summary @@ -622,7 +625,7 @@ fn function_agent_runtime_facade_honors_disabled_git_state_boundary_and_preserve fn git_function_agent_utils_preserve_change_classification() { assert_eq!(infer_file_type("src/main.rs"), "rs"); assert_eq!( - extract_module_name("src/crates/core/lib.rs").as_deref(), + extract_module_name("src/crates/facade/core/lib.rs").as_deref(), Some("core") ); diff --git a/src/crates/product-domains/tests/miniapp_contracts.rs b/src/crates/product/product-domains/tests/miniapp_contracts.rs similarity index 100% rename from src/crates/product-domains/tests/miniapp_contracts.rs rename to src/crates/product/product-domains/tests/miniapp_contracts.rs diff --git a/src/crates/services/AGENTS-CN.md b/src/crates/services/AGENTS-CN.md new file mode 100644 index 000000000..1ebd04803 --- /dev/null +++ b/src/crates/services/AGENTS-CN.md @@ -0,0 +1,27 @@ +**中文** | [English](AGENTS.md) + +# 服务层 + +本层负责可复用的非 UI 服务实现和服务 adapter:filesystem、git、process/system、diagnostics、terminal、MCP、remote 以及持久化相关能力。通用服务应通过窄 API 或 port 被调用,而不是通过产品 facade 泄漏。产品特定 adapter 可以实现产品领域 port,但不得拥有产品策略。 + +## 模块 + +| Crate | 职责 | 本地文档 | +|---|---|---| +| `services-core` | filesystem、diff、diagnostics、session usage、token usage、system、process 等核心可复用服务 | [AGENTS.md](services-core/AGENTS.md) | +| `services-integrations` | announcement、file watch、function agents、git、MCP、remote connect、remote SSH 等具体集成服务 | [AGENTS.md](services-integrations/AGENTS.md) | +| `terminal` | Terminal API、PTY、shell integration 和 persistent terminal sessions | [AGENTS.md](terminal/AGENTS.md) | + +## 放置规则 + +- 可被多个产品或 runtime 路径复用的具体 host/service 行为放到这里。 +- UI 状态、产品 feature 选择和交付组装不要进入本层。 +- 优先提供小而清晰的 service API,不要做混合多种职责的大 manager。 +- 依赖平台能力的行为要通过 service module 或 feature gate 隔离。 + +## 依赖边界 + +- 通用 service crate 不应依赖产品 crate。 +- service adapter 只有在 feature gate 后实现产品层定义的窄 port/DTO 时,才允许依赖 `product-domains`。当前例子是 `services-integrations` 为 `product-domains` function-agent ports 实现 Git snapshot。不要把这个例外扩展成 service 拥有产品策略。 +- Services 不得依赖 `facade/core`、`src/apps`、前端代码或 Tauri `AppHandle`。 +- Remote 和平台支持必须通过 typed service error 或明确 unsupported-state 处理失败,不要泛化成字符串错误。 diff --git a/src/crates/services/AGENTS.md b/src/crates/services/AGENTS.md new file mode 100644 index 000000000..7417afcbc --- /dev/null +++ b/src/crates/services/AGENTS.md @@ -0,0 +1,40 @@ +[中文](AGENTS-CN.md) | **English** + +# Services Layer + +This layer owns reusable non-UI service implementations and service adapters: +filesystem, git, process/system, diagnostics, terminal, MCP, remote, and +persistence-adjacent capabilities. Generic services should be callable through +narrow APIs or ports rather than through product facades. Product-specific +adapters may implement product-domain ports, but must not own product policy. + +## Modules + +| Crate | Responsibility | Local doc | +|---|---|---| +| `services-core` | Core reusable services for filesystem, diff, diagnostics, session usage, token usage, system, and process concerns | [AGENTS.md](services-core/AGENTS.md) | +| `services-integrations` | Concrete integrations for announcement, file watch, function agents, git, MCP, remote connect, and remote SSH | [AGENTS.md](services-integrations/AGENTS.md) | +| `terminal` | Terminal API, PTY, shell integration, and persistent terminal sessions | [AGENTS.md](terminal/AGENTS.md) | + +## Placement Rules + +- Put concrete host/service behavior here when it is reusable by more than one + product or runtime path. +- Keep UI state, product feature selection, and delivery assembly out of this + layer. +- Prefer small service APIs over broad managers that mix unrelated concerns. +- If behavior depends on platform capabilities, isolate those details behind a + service module or feature gate. + +## Dependency Boundaries + +- Generic service crates should not depend on product crates. +- A service adapter may depend on narrowly scoped `product-domains` port/DTO + types only when it implements a product-owned port behind a feature gate. + Current example: `services-integrations` implements function-agent Git + snapshots for `product-domains` function-agent ports. Do not generalize this + into service-owned product policy. +- Services must not depend on `facade/core`, `src/apps`, frontend code, or + Tauri `AppHandle`. +- Remote and platform support must fail through typed service errors or clear + unsupported-state handling, not generic string failures. diff --git a/src/crates/services-core/AGENTS.md b/src/crates/services/services-core/AGENTS.md similarity index 95% rename from src/crates/services-core/AGENTS.md rename to src/crates/services/services-core/AGENTS.md index 9790ccd31..2a2723330 100644 --- a/src/crates/services-core/AGENTS.md +++ b/src/crates/services/services-core/AGENTS.md @@ -1,6 +1,6 @@ # services-core Agent Guide -Scope: this guide applies to `src/crates/services-core`. +Scope: this guide applies to `src/crates/services/services-core`. `bitfun-services-core` owns platform-neutral service DTOs and helpers that can compile without the full product runtime. It also owns generic local filesystem diff --git a/src/crates/services-core/Cargo.toml b/src/crates/services/services-core/Cargo.toml similarity index 91% rename from src/crates/services-core/Cargo.toml rename to src/crates/services/services-core/Cargo.toml index 18554d4ec..4006bc630 100644 --- a/src/crates/services-core/Cargo.toml +++ b/src/crates/services/services-core/Cargo.toml @@ -10,7 +10,7 @@ name = "bitfun_services_core" crate-type = ["rlib"] [dependencies] -bitfun-core-types = { path = "../core-types" } +bitfun-core-types = { path = "../../contracts/core-types" } tokio = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } diff --git a/src/crates/services-core/src/diagnostics/mod.rs b/src/crates/services/services-core/src/diagnostics/mod.rs similarity index 100% rename from src/crates/services-core/src/diagnostics/mod.rs rename to src/crates/services/services-core/src/diagnostics/mod.rs diff --git a/src/crates/services-core/src/diagnostics/redaction.rs b/src/crates/services/services-core/src/diagnostics/redaction.rs similarity index 100% rename from src/crates/services-core/src/diagnostics/redaction.rs rename to src/crates/services/services-core/src/diagnostics/redaction.rs diff --git a/src/crates/services-core/src/diff/mod.rs b/src/crates/services/services-core/src/diff/mod.rs similarity index 100% rename from src/crates/services-core/src/diff/mod.rs rename to src/crates/services/services-core/src/diff/mod.rs diff --git a/src/crates/services-core/src/diff/service.rs b/src/crates/services/services-core/src/diff/service.rs similarity index 100% rename from src/crates/services-core/src/diff/service.rs rename to src/crates/services/services-core/src/diff/service.rs diff --git a/src/crates/services-core/src/diff/types.rs b/src/crates/services/services-core/src/diff/types.rs similarity index 100% rename from src/crates/services-core/src/diff/types.rs rename to src/crates/services/services-core/src/diff/types.rs diff --git a/src/crates/services-core/src/filesystem/error.rs b/src/crates/services/services-core/src/filesystem/error.rs similarity index 100% rename from src/crates/services-core/src/filesystem/error.rs rename to src/crates/services/services-core/src/filesystem/error.rs diff --git a/src/crates/services-core/src/filesystem/factory.rs b/src/crates/services/services-core/src/filesystem/factory.rs similarity index 100% rename from src/crates/services-core/src/filesystem/factory.rs rename to src/crates/services/services-core/src/filesystem/factory.rs diff --git a/src/crates/services-core/src/filesystem/listing.rs b/src/crates/services/services-core/src/filesystem/listing.rs similarity index 100% rename from src/crates/services-core/src/filesystem/listing.rs rename to src/crates/services/services-core/src/filesystem/listing.rs diff --git a/src/crates/services-core/src/filesystem/mod.rs b/src/crates/services/services-core/src/filesystem/mod.rs similarity index 100% rename from src/crates/services-core/src/filesystem/mod.rs rename to src/crates/services/services-core/src/filesystem/mod.rs diff --git a/src/crates/services-core/src/filesystem/operations.rs b/src/crates/services/services-core/src/filesystem/operations.rs similarity index 100% rename from src/crates/services-core/src/filesystem/operations.rs rename to src/crates/services/services-core/src/filesystem/operations.rs diff --git a/src/crates/services-core/src/filesystem/service.rs b/src/crates/services/services-core/src/filesystem/service.rs similarity index 100% rename from src/crates/services-core/src/filesystem/service.rs rename to src/crates/services/services-core/src/filesystem/service.rs diff --git a/src/crates/services-core/src/filesystem/tree.rs b/src/crates/services/services-core/src/filesystem/tree.rs similarity index 100% rename from src/crates/services-core/src/filesystem/tree.rs rename to src/crates/services/services-core/src/filesystem/tree.rs diff --git a/src/crates/services-core/src/filesystem/types.rs b/src/crates/services/services-core/src/filesystem/types.rs similarity index 100% rename from src/crates/services-core/src/filesystem/types.rs rename to src/crates/services/services-core/src/filesystem/types.rs diff --git a/src/crates/services-core/src/lib.rs b/src/crates/services/services-core/src/lib.rs similarity index 100% rename from src/crates/services-core/src/lib.rs rename to src/crates/services/services-core/src/lib.rs diff --git a/src/crates/services-core/src/process_manager.rs b/src/crates/services/services-core/src/process_manager.rs similarity index 100% rename from src/crates/services-core/src/process_manager.rs rename to src/crates/services/services-core/src/process_manager.rs diff --git a/src/crates/services-core/src/session/mod.rs b/src/crates/services/services-core/src/session/mod.rs similarity index 100% rename from src/crates/services-core/src/session/mod.rs rename to src/crates/services/services-core/src/session/mod.rs diff --git a/src/crates/services-core/src/session/types.rs b/src/crates/services/services-core/src/session/types.rs similarity index 100% rename from src/crates/services-core/src/session/types.rs rename to src/crates/services/services-core/src/session/types.rs diff --git a/src/crates/services-core/src/session_usage/classifier.rs b/src/crates/services/services-core/src/session_usage/classifier.rs similarity index 100% rename from src/crates/services-core/src/session_usage/classifier.rs rename to src/crates/services/services-core/src/session_usage/classifier.rs diff --git a/src/crates/services-core/src/session_usage/mod.rs b/src/crates/services/services-core/src/session_usage/mod.rs similarity index 100% rename from src/crates/services-core/src/session_usage/mod.rs rename to src/crates/services/services-core/src/session_usage/mod.rs diff --git a/src/crates/services-core/src/session_usage/redaction.rs b/src/crates/services/services-core/src/session_usage/redaction.rs similarity index 100% rename from src/crates/services-core/src/session_usage/redaction.rs rename to src/crates/services/services-core/src/session_usage/redaction.rs diff --git a/src/crates/services-core/src/session_usage/render.rs b/src/crates/services/services-core/src/session_usage/render.rs similarity index 100% rename from src/crates/services-core/src/session_usage/render.rs rename to src/crates/services/services-core/src/session_usage/render.rs diff --git a/src/crates/services-core/src/session_usage/types.rs b/src/crates/services/services-core/src/session_usage/types.rs similarity index 100% rename from src/crates/services-core/src/session_usage/types.rs rename to src/crates/services/services-core/src/session_usage/types.rs diff --git a/src/crates/services-core/src/system/command.rs b/src/crates/services/services-core/src/system/command.rs similarity index 100% rename from src/crates/services-core/src/system/command.rs rename to src/crates/services/services-core/src/system/command.rs diff --git a/src/crates/services-core/src/system/info.rs b/src/crates/services/services-core/src/system/info.rs similarity index 100% rename from src/crates/services-core/src/system/info.rs rename to src/crates/services/services-core/src/system/info.rs diff --git a/src/crates/services-core/src/system/mod.rs b/src/crates/services/services-core/src/system/mod.rs similarity index 100% rename from src/crates/services-core/src/system/mod.rs rename to src/crates/services/services-core/src/system/mod.rs diff --git a/src/crates/services-core/src/token_usage/mod.rs b/src/crates/services/services-core/src/token_usage/mod.rs similarity index 100% rename from src/crates/services-core/src/token_usage/mod.rs rename to src/crates/services/services-core/src/token_usage/mod.rs diff --git a/src/crates/services-core/src/token_usage/types.rs b/src/crates/services/services-core/src/token_usage/types.rs similarity index 100% rename from src/crates/services-core/src/token_usage/types.rs rename to src/crates/services/services-core/src/token_usage/types.rs diff --git a/src/crates/services-core/tests/diagnostic_log_redaction.rs b/src/crates/services/services-core/tests/diagnostic_log_redaction.rs similarity index 100% rename from src/crates/services-core/tests/diagnostic_log_redaction.rs rename to src/crates/services/services-core/tests/diagnostic_log_redaction.rs diff --git a/src/crates/services-core/tests/service_contracts.rs b/src/crates/services/services-core/tests/service_contracts.rs similarity index 100% rename from src/crates/services-core/tests/service_contracts.rs rename to src/crates/services/services-core/tests/service_contracts.rs diff --git a/src/crates/services-core/tests/session_contracts.rs b/src/crates/services/services-core/tests/session_contracts.rs similarity index 100% rename from src/crates/services-core/tests/session_contracts.rs rename to src/crates/services/services-core/tests/session_contracts.rs diff --git a/src/crates/services-core/tests/session_usage_contracts.rs b/src/crates/services/services-core/tests/session_usage_contracts.rs similarity index 100% rename from src/crates/services-core/tests/session_usage_contracts.rs rename to src/crates/services/services-core/tests/session_usage_contracts.rs diff --git a/src/crates/services-core/tests/token_usage_contracts.rs b/src/crates/services/services-core/tests/token_usage_contracts.rs similarity index 100% rename from src/crates/services-core/tests/token_usage_contracts.rs rename to src/crates/services/services-core/tests/token_usage_contracts.rs diff --git a/src/crates/services-integrations/AGENTS.md b/src/crates/services/services-integrations/AGENTS.md similarity index 96% rename from src/crates/services-integrations/AGENTS.md rename to src/crates/services/services-integrations/AGENTS.md index 0c03cc2af..28f9147ea 100644 --- a/src/crates/services-integrations/AGENTS.md +++ b/src/crates/services/services-integrations/AGENTS.md @@ -1,6 +1,6 @@ # services-integrations Agent Guide -Scope: this guide applies to `src/crates/services-integrations`. +Scope: this guide applies to `src/crates/services/services-integrations`. `bitfun-services-integrations` owns reviewed integration contracts and runtime slices that are outside pure product logic but still platform-neutral. diff --git a/src/crates/services-integrations/Cargo.toml b/src/crates/services/services-integrations/Cargo.toml similarity index 89% rename from src/crates/services-integrations/Cargo.toml rename to src/crates/services/services-integrations/Cargo.toml index 0d9189931..f9b81408c 100644 --- a/src/crates/services-integrations/Cargo.toml +++ b/src/crates/services/services-integrations/Cargo.toml @@ -14,9 +14,9 @@ tokio = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } log = { workspace = true } -bitfun-events = { path = "../events" } -bitfun-product-domains = { path = "../product-domains", default-features = false, optional = true } -bitfun-runtime-ports = { path = "../runtime-ports", optional = true } +bitfun-events = { path = "../../contracts/events" } +bitfun-product-domains = { path = "../../product/product-domains", default-features = false, optional = true } +bitfun-runtime-ports = { path = "../../contracts/runtime-ports", optional = true } aes-gcm = { workspace = true, optional = true } anyhow = { workspace = true, optional = true } async-trait = { workspace = true, optional = true } diff --git a/src/crates/services-integrations/src/announcement/mod.rs b/src/crates/services/services-integrations/src/announcement/mod.rs similarity index 100% rename from src/crates/services-integrations/src/announcement/mod.rs rename to src/crates/services/services-integrations/src/announcement/mod.rs diff --git a/src/crates/services-integrations/src/announcement/state_store.rs b/src/crates/services/services-integrations/src/announcement/state_store.rs similarity index 100% rename from src/crates/services-integrations/src/announcement/state_store.rs rename to src/crates/services/services-integrations/src/announcement/state_store.rs diff --git a/src/crates/services-integrations/src/announcement/types.rs b/src/crates/services/services-integrations/src/announcement/types.rs similarity index 100% rename from src/crates/services-integrations/src/announcement/types.rs rename to src/crates/services/services-integrations/src/announcement/types.rs diff --git a/src/crates/services-integrations/src/file_watch/mod.rs b/src/crates/services/services-integrations/src/file_watch/mod.rs similarity index 100% rename from src/crates/services-integrations/src/file_watch/mod.rs rename to src/crates/services/services-integrations/src/file_watch/mod.rs diff --git a/src/crates/services-integrations/src/file_watch/service.rs b/src/crates/services/services-integrations/src/file_watch/service.rs similarity index 100% rename from src/crates/services-integrations/src/file_watch/service.rs rename to src/crates/services/services-integrations/src/file_watch/service.rs diff --git a/src/crates/services-integrations/src/file_watch/types.rs b/src/crates/services/services-integrations/src/file_watch/types.rs similarity index 100% rename from src/crates/services-integrations/src/file_watch/types.rs rename to src/crates/services/services-integrations/src/file_watch/types.rs diff --git a/src/crates/services-integrations/src/function_agents.rs b/src/crates/services/services-integrations/src/function_agents.rs similarity index 100% rename from src/crates/services-integrations/src/function_agents.rs rename to src/crates/services/services-integrations/src/function_agents.rs diff --git a/src/crates/services-integrations/src/git/args.rs b/src/crates/services/services-integrations/src/git/args.rs similarity index 100% rename from src/crates/services-integrations/src/git/args.rs rename to src/crates/services/services-integrations/src/git/args.rs diff --git a/src/crates/services-integrations/src/git/error.rs b/src/crates/services/services-integrations/src/git/error.rs similarity index 100% rename from src/crates/services-integrations/src/git/error.rs rename to src/crates/services/services-integrations/src/git/error.rs diff --git a/src/crates/services-integrations/src/git/graph.rs b/src/crates/services/services-integrations/src/git/graph.rs similarity index 100% rename from src/crates/services-integrations/src/git/graph.rs rename to src/crates/services/services-integrations/src/git/graph.rs diff --git a/src/crates/services-integrations/src/git/mod.rs b/src/crates/services/services-integrations/src/git/mod.rs similarity index 100% rename from src/crates/services-integrations/src/git/mod.rs rename to src/crates/services/services-integrations/src/git/mod.rs diff --git a/src/crates/services-integrations/src/git/name_status.rs b/src/crates/services/services-integrations/src/git/name_status.rs similarity index 100% rename from src/crates/services-integrations/src/git/name_status.rs rename to src/crates/services/services-integrations/src/git/name_status.rs diff --git a/src/crates/services-integrations/src/git/service.rs b/src/crates/services/services-integrations/src/git/service.rs similarity index 100% rename from src/crates/services-integrations/src/git/service.rs rename to src/crates/services/services-integrations/src/git/service.rs diff --git a/src/crates/services-integrations/src/git/text.rs b/src/crates/services/services-integrations/src/git/text.rs similarity index 100% rename from src/crates/services-integrations/src/git/text.rs rename to src/crates/services/services-integrations/src/git/text.rs diff --git a/src/crates/services-integrations/src/git/types.rs b/src/crates/services/services-integrations/src/git/types.rs similarity index 100% rename from src/crates/services-integrations/src/git/types.rs rename to src/crates/services/services-integrations/src/git/types.rs diff --git a/src/crates/services-integrations/src/git/utils.rs b/src/crates/services/services-integrations/src/git/utils.rs similarity index 100% rename from src/crates/services-integrations/src/git/utils.rs rename to src/crates/services/services-integrations/src/git/utils.rs diff --git a/src/crates/services-integrations/src/git/worktree.rs b/src/crates/services/services-integrations/src/git/worktree.rs similarity index 100% rename from src/crates/services-integrations/src/git/worktree.rs rename to src/crates/services/services-integrations/src/git/worktree.rs diff --git a/src/crates/services-integrations/src/lib.rs b/src/crates/services/services-integrations/src/lib.rs similarity index 100% rename from src/crates/services-integrations/src/lib.rs rename to src/crates/services/services-integrations/src/lib.rs diff --git a/src/crates/services-integrations/src/mcp/adapter/context.rs b/src/crates/services/services-integrations/src/mcp/adapter/context.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/adapter/context.rs rename to src/crates/services/services-integrations/src/mcp/adapter/context.rs diff --git a/src/crates/services-integrations/src/mcp/adapter/mod.rs b/src/crates/services/services-integrations/src/mcp/adapter/mod.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/adapter/mod.rs rename to src/crates/services/services-integrations/src/mcp/adapter/mod.rs diff --git a/src/crates/services-integrations/src/mcp/adapter/prompt.rs b/src/crates/services/services-integrations/src/mcp/adapter/prompt.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/adapter/prompt.rs rename to src/crates/services/services-integrations/src/mcp/adapter/prompt.rs diff --git a/src/crates/services-integrations/src/mcp/adapter/resource.rs b/src/crates/services/services-integrations/src/mcp/adapter/resource.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/adapter/resource.rs rename to src/crates/services/services-integrations/src/mcp/adapter/resource.rs diff --git a/src/crates/services-integrations/src/mcp/adapter/tool.rs b/src/crates/services/services-integrations/src/mcp/adapter/tool.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/adapter/tool.rs rename to src/crates/services/services-integrations/src/mcp/adapter/tool.rs diff --git a/src/crates/services-integrations/src/mcp/auth.rs b/src/crates/services/services-integrations/src/mcp/auth.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/auth.rs rename to src/crates/services/services-integrations/src/mcp/auth.rs diff --git a/src/crates/services-integrations/src/mcp/config/cursor_format.rs b/src/crates/services/services-integrations/src/mcp/config/cursor_format.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/config/cursor_format.rs rename to src/crates/services/services-integrations/src/mcp/config/cursor_format.rs diff --git a/src/crates/services-integrations/src/mcp/config/json_config.rs b/src/crates/services/services-integrations/src/mcp/config/json_config.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/config/json_config.rs rename to src/crates/services/services-integrations/src/mcp/config/json_config.rs diff --git a/src/crates/services-integrations/src/mcp/config/location.rs b/src/crates/services/services-integrations/src/mcp/config/location.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/config/location.rs rename to src/crates/services/services-integrations/src/mcp/config/location.rs diff --git a/src/crates/services-integrations/src/mcp/config/mod.rs b/src/crates/services/services-integrations/src/mcp/config/mod.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/config/mod.rs rename to src/crates/services/services-integrations/src/mcp/config/mod.rs diff --git a/src/crates/services-integrations/src/mcp/config/service.rs b/src/crates/services/services-integrations/src/mcp/config/service.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/config/service.rs rename to src/crates/services/services-integrations/src/mcp/config/service.rs diff --git a/src/crates/services-integrations/src/mcp/config/service_helpers.rs b/src/crates/services/services-integrations/src/mcp/config/service_helpers.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/config/service_helpers.rs rename to src/crates/services/services-integrations/src/mcp/config/service_helpers.rs diff --git a/src/crates/services-integrations/src/mcp/mod.rs b/src/crates/services/services-integrations/src/mcp/mod.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/mod.rs rename to src/crates/services/services-integrations/src/mcp/mod.rs diff --git a/src/crates/services-integrations/src/mcp/protocol/client_info.rs b/src/crates/services/services-integrations/src/mcp/protocol/client_info.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/protocol/client_info.rs rename to src/crates/services/services-integrations/src/mcp/protocol/client_info.rs diff --git a/src/crates/services-integrations/src/mcp/protocol/jsonrpc.rs b/src/crates/services/services-integrations/src/mcp/protocol/jsonrpc.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/protocol/jsonrpc.rs rename to src/crates/services/services-integrations/src/mcp/protocol/jsonrpc.rs diff --git a/src/crates/services-integrations/src/mcp/protocol/mod.rs b/src/crates/services/services-integrations/src/mcp/protocol/mod.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/protocol/mod.rs rename to src/crates/services/services-integrations/src/mcp/protocol/mod.rs diff --git a/src/crates/services-integrations/src/mcp/protocol/rmcp_mapping.rs b/src/crates/services/services-integrations/src/mcp/protocol/rmcp_mapping.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/protocol/rmcp_mapping.rs rename to src/crates/services/services-integrations/src/mcp/protocol/rmcp_mapping.rs diff --git a/src/crates/services-integrations/src/mcp/protocol/transport.rs b/src/crates/services/services-integrations/src/mcp/protocol/transport.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/protocol/transport.rs rename to src/crates/services/services-integrations/src/mcp/protocol/transport.rs diff --git a/src/crates/services-integrations/src/mcp/protocol/transport_remote.rs b/src/crates/services/services-integrations/src/mcp/protocol/transport_remote.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/protocol/transport_remote.rs rename to src/crates/services/services-integrations/src/mcp/protocol/transport_remote.rs diff --git a/src/crates/services-integrations/src/mcp/protocol/types.rs b/src/crates/services/services-integrations/src/mcp/protocol/types.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/protocol/types.rs rename to src/crates/services/services-integrations/src/mcp/protocol/types.rs diff --git a/src/crates/services-integrations/src/mcp/runtime_error.rs b/src/crates/services/services-integrations/src/mcp/runtime_error.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/runtime_error.rs rename to src/crates/services/services-integrations/src/mcp/runtime_error.rs diff --git a/src/crates/services-integrations/src/mcp/server/catalog_cache.rs b/src/crates/services/services-integrations/src/mcp/server/catalog_cache.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/server/catalog_cache.rs rename to src/crates/services/services-integrations/src/mcp/server/catalog_cache.rs diff --git a/src/crates/services-integrations/src/mcp/server/connection.rs b/src/crates/services/services-integrations/src/mcp/server/connection.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/server/connection.rs rename to src/crates/services/services-integrations/src/mcp/server/connection.rs diff --git a/src/crates/services-integrations/src/mcp/server/mod.rs b/src/crates/services/services-integrations/src/mcp/server/mod.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/server/mod.rs rename to src/crates/services/services-integrations/src/mcp/server/mod.rs diff --git a/src/crates/services-integrations/src/mcp/server/process.rs b/src/crates/services/services-integrations/src/mcp/server/process.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/server/process.rs rename to src/crates/services/services-integrations/src/mcp/server/process.rs diff --git a/src/crates/services-integrations/src/mcp/server/runtime_helpers.rs b/src/crates/services/services-integrations/src/mcp/server/runtime_helpers.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/server/runtime_helpers.rs rename to src/crates/services/services-integrations/src/mcp/server/runtime_helpers.rs diff --git a/src/crates/services-integrations/src/mcp/server/runtime_policy.rs b/src/crates/services/services-integrations/src/mcp/server/runtime_policy.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/server/runtime_policy.rs rename to src/crates/services/services-integrations/src/mcp/server/runtime_policy.rs diff --git a/src/crates/services-integrations/src/mcp/tool_info.rs b/src/crates/services/services-integrations/src/mcp/tool_info.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/tool_info.rs rename to src/crates/services/services-integrations/src/mcp/tool_info.rs diff --git a/src/crates/services-integrations/src/mcp/tool_name.rs b/src/crates/services/services-integrations/src/mcp/tool_name.rs similarity index 100% rename from src/crates/services-integrations/src/mcp/tool_name.rs rename to src/crates/services/services-integrations/src/mcp/tool_name.rs diff --git a/src/crates/services-integrations/src/remote_connect.rs b/src/crates/services/services-integrations/src/remote_connect.rs similarity index 100% rename from src/crates/services-integrations/src/remote_connect.rs rename to src/crates/services/services-integrations/src/remote_connect.rs diff --git a/src/crates/services-integrations/src/remote_ssh/mod.rs b/src/crates/services/services-integrations/src/remote_ssh/mod.rs similarity index 100% rename from src/crates/services-integrations/src/remote_ssh/mod.rs rename to src/crates/services/services-integrations/src/remote_ssh/mod.rs diff --git a/src/crates/services-integrations/src/remote_ssh/paths.rs b/src/crates/services/services-integrations/src/remote_ssh/paths.rs similarity index 100% rename from src/crates/services-integrations/src/remote_ssh/paths.rs rename to src/crates/services/services-integrations/src/remote_ssh/paths.rs diff --git a/src/crates/services-integrations/src/remote_ssh/types.rs b/src/crates/services/services-integrations/src/remote_ssh/types.rs similarity index 100% rename from src/crates/services-integrations/src/remote_ssh/types.rs rename to src/crates/services/services-integrations/src/remote_ssh/types.rs diff --git a/src/crates/services-integrations/src/remote_ssh/workspace_registry.rs b/src/crates/services/services-integrations/src/remote_ssh/workspace_registry.rs similarity index 100% rename from src/crates/services-integrations/src/remote_ssh/workspace_registry.rs rename to src/crates/services/services-integrations/src/remote_ssh/workspace_registry.rs diff --git a/src/crates/services-integrations/tests/announcement_contracts.rs b/src/crates/services/services-integrations/tests/announcement_contracts.rs similarity index 100% rename from src/crates/services-integrations/tests/announcement_contracts.rs rename to src/crates/services/services-integrations/tests/announcement_contracts.rs diff --git a/src/crates/services-integrations/tests/file_watch_contracts.rs b/src/crates/services/services-integrations/tests/file_watch_contracts.rs similarity index 100% rename from src/crates/services-integrations/tests/file_watch_contracts.rs rename to src/crates/services/services-integrations/tests/file_watch_contracts.rs diff --git a/src/crates/services-integrations/tests/function_agent_contracts.rs b/src/crates/services/services-integrations/tests/function_agent_contracts.rs similarity index 100% rename from src/crates/services-integrations/tests/function_agent_contracts.rs rename to src/crates/services/services-integrations/tests/function_agent_contracts.rs diff --git a/src/crates/services-integrations/tests/git_contracts.rs b/src/crates/services/services-integrations/tests/git_contracts.rs similarity index 100% rename from src/crates/services-integrations/tests/git_contracts.rs rename to src/crates/services/services-integrations/tests/git_contracts.rs diff --git a/src/crates/services-integrations/tests/mcp_contracts.rs b/src/crates/services/services-integrations/tests/mcp_contracts.rs similarity index 100% rename from src/crates/services-integrations/tests/mcp_contracts.rs rename to src/crates/services/services-integrations/tests/mcp_contracts.rs diff --git a/src/crates/services-integrations/tests/remote_connect_contracts.rs b/src/crates/services/services-integrations/tests/remote_connect_contracts.rs similarity index 98% rename from src/crates/services-integrations/tests/remote_connect_contracts.rs rename to src/crates/services/services-integrations/tests/remote_connect_contracts.rs index 7bbfa4699..21498285e 100644 --- a/src/crates/services-integrations/tests/remote_connect_contracts.rs +++ b/src/crates/services/services-integrations/tests/remote_connect_contracts.rs @@ -5,22 +5,8 @@ use bitfun_runtime_ports::{ AgentSubmissionSource, RemoteControlSessionState, RemoteControlStateSnapshot, }; use bitfun_services_integrations::remote_connect::{ - ActiveTurnSnapshot, ChatImageAttachment, ChatMessage, ChatMessageItem, ImageAttachment, - REMOTE_FILE_MAX_CHUNK_BYTES, REMOTE_FILE_MAX_READ_BYTES, RemoteAssistantWorkspaceFacts, - RemoteCancelDecision, RemoteCancelRuntimeHost, RemoteCancelTaskRequest, RemoteChatHistoryRound, - RemoteChatHistoryTextItem, RemoteChatHistoryThinkingItem, RemoteChatHistoryToolCall, - RemoteChatHistoryToolItem, RemoteChatHistoryTurn, RemoteCommand, RemoteConnectSubmissionSource, - RemoteDefaultModelsConfig, RemoteDialogQueuePriority, RemoteDialogResolvedSubmission, - RemoteDialogRuntimeHost, RemoteDialogSchedulerOutcomeFact, RemoteDialogSubmissionPolicy, - RemoteDialogSubmissionRequest, RemoteDialogSubmitOutcome, RemoteImageContext, - RemoteImageContextAdapter, RemoteModelCapabilityFact, RemoteModelCatalog, - RemoteModelCatalogFacts, RemoteModelConfig, RemoteModelFacts, RemoteReasoningModeFact, - RemoteRecentWorkspaceFacts, RemoteResponse, RemoteSessionMetadata, RemoteSessionStateTracker, - RemoteSessionTrackerHost, RemoteSessionTrackerRegistry, RemoteTerminalPrewarmRequest, - RemoteToolStatus, RemoteWorkspaceFacts, RemoteWorkspaceFileChunk, RemoteWorkspaceFileContent, - RemoteWorkspaceFileInfo, RemoteWorkspaceFileRuntimeHost, RemoteWorkspaceKind, - RemoteWorkspaceUpdate, TrackerEvent, build_remote_chat_messages, build_remote_image_attachment, - build_remote_image_contexts, build_remote_image_submission_request, build_remote_model_catalog, + build_remote_chat_messages, build_remote_image_attachment, build_remote_image_contexts, + build_remote_image_submission_request, build_remote_model_catalog, build_remote_session_create_request, build_remote_submission_request, cancel_remote_task, handle_remote_workspace_file_command, make_slim_tool_params, normalize_remote_model_selection, normalize_remote_session_model_id, read_remote_workspace_file, @@ -39,6 +25,21 @@ use bitfun_services_integrations::remote_connect::{ remote_workspace_updated_response, resolve_remote_agent_type, resolve_remote_cancel_decision, resolve_remote_execution_image_contexts, resolve_remote_file_chunk_range, resolve_remote_workspace_path, should_send_remote_model_catalog, submit_remote_dialog, + ActiveTurnSnapshot, ChatImageAttachment, ChatMessage, ChatMessageItem, ImageAttachment, + RemoteAssistantWorkspaceFacts, RemoteCancelDecision, RemoteCancelRuntimeHost, + RemoteCancelTaskRequest, RemoteChatHistoryRound, RemoteChatHistoryTextItem, + RemoteChatHistoryThinkingItem, RemoteChatHistoryToolCall, RemoteChatHistoryToolItem, + RemoteChatHistoryTurn, RemoteCommand, RemoteConnectSubmissionSource, RemoteDefaultModelsConfig, + RemoteDialogQueuePriority, RemoteDialogResolvedSubmission, RemoteDialogRuntimeHost, + RemoteDialogSchedulerOutcomeFact, RemoteDialogSubmissionPolicy, RemoteDialogSubmissionRequest, + RemoteDialogSubmitOutcome, RemoteImageContext, RemoteImageContextAdapter, + RemoteModelCapabilityFact, RemoteModelCatalog, RemoteModelCatalogFacts, RemoteModelConfig, + RemoteModelFacts, RemoteReasoningModeFact, RemoteRecentWorkspaceFacts, RemoteResponse, + RemoteSessionMetadata, RemoteSessionStateTracker, RemoteSessionTrackerHost, + RemoteSessionTrackerRegistry, RemoteTerminalPrewarmRequest, RemoteToolStatus, + RemoteWorkspaceFacts, RemoteWorkspaceFileChunk, RemoteWorkspaceFileContent, + RemoteWorkspaceFileInfo, RemoteWorkspaceFileRuntimeHost, RemoteWorkspaceKind, + RemoteWorkspaceUpdate, TrackerEvent, REMOTE_FILE_MAX_CHUNK_BYTES, REMOTE_FILE_MAX_READ_BYTES, }; use std::path::PathBuf; use std::sync::{Arc, Mutex}; diff --git a/src/crates/services-integrations/tests/remote_ssh_contracts.rs b/src/crates/services/services-integrations/tests/remote_ssh_contracts.rs similarity index 100% rename from src/crates/services-integrations/tests/remote_ssh_contracts.rs rename to src/crates/services/services-integrations/tests/remote_ssh_contracts.rs diff --git a/src/crates/terminal/AGENTS.md b/src/crates/services/terminal/AGENTS.md similarity index 93% rename from src/crates/terminal/AGENTS.md rename to src/crates/services/terminal/AGENTS.md index 7e3b85db4..9a5491b04 100644 --- a/src/crates/terminal/AGENTS.md +++ b/src/crates/services/terminal/AGENTS.md @@ -1,6 +1,6 @@ # terminal Agent Guide -Scope: this guide applies to `src/crates/terminal`. +Scope: this guide applies to `src/crates/services/terminal`. `terminal-core` owns standalone terminal sessions, PTY process handling, shell integration, and terminal event/config contracts. It is reusable infrastructure, diff --git a/src/crates/terminal/Cargo.toml b/src/crates/services/terminal/Cargo.toml similarity index 100% rename from src/crates/terminal/Cargo.toml rename to src/crates/services/terminal/Cargo.toml diff --git a/src/crates/terminal/docs/STREAMING_OUTPUT_COLLECTION.md b/src/crates/services/terminal/docs/STREAMING_OUTPUT_COLLECTION.md similarity index 100% rename from src/crates/terminal/docs/STREAMING_OUTPUT_COLLECTION.md rename to src/crates/services/terminal/docs/STREAMING_OUTPUT_COLLECTION.md diff --git a/src/crates/terminal/src/api.rs b/src/crates/services/terminal/src/api.rs similarity index 100% rename from src/crates/terminal/src/api.rs rename to src/crates/services/terminal/src/api.rs diff --git a/src/crates/terminal/src/config/mod.rs b/src/crates/services/terminal/src/config/mod.rs similarity index 100% rename from src/crates/terminal/src/config/mod.rs rename to src/crates/services/terminal/src/config/mod.rs diff --git a/src/crates/terminal/src/config/types.rs b/src/crates/services/terminal/src/config/types.rs similarity index 100% rename from src/crates/terminal/src/config/types.rs rename to src/crates/services/terminal/src/config/types.rs diff --git a/src/crates/terminal/src/events.rs b/src/crates/services/terminal/src/events.rs similarity index 100% rename from src/crates/terminal/src/events.rs rename to src/crates/services/terminal/src/events.rs diff --git a/src/crates/terminal/src/lib.rs b/src/crates/services/terminal/src/lib.rs similarity index 100% rename from src/crates/terminal/src/lib.rs rename to src/crates/services/terminal/src/lib.rs diff --git a/src/crates/terminal/src/pty/data_bufferer.rs b/src/crates/services/terminal/src/pty/data_bufferer.rs similarity index 100% rename from src/crates/terminal/src/pty/data_bufferer.rs rename to src/crates/services/terminal/src/pty/data_bufferer.rs diff --git a/src/crates/terminal/src/pty/mod.rs b/src/crates/services/terminal/src/pty/mod.rs similarity index 100% rename from src/crates/terminal/src/pty/mod.rs rename to src/crates/services/terminal/src/pty/mod.rs diff --git a/src/crates/terminal/src/pty/process.rs b/src/crates/services/terminal/src/pty/process.rs similarity index 100% rename from src/crates/terminal/src/pty/process.rs rename to src/crates/services/terminal/src/pty/process.rs diff --git a/src/crates/terminal/src/pty/service.rs b/src/crates/services/terminal/src/pty/service.rs similarity index 100% rename from src/crates/terminal/src/pty/service.rs rename to src/crates/services/terminal/src/pty/service.rs diff --git a/src/crates/terminal/src/session/binding.rs b/src/crates/services/terminal/src/session/binding.rs similarity index 100% rename from src/crates/terminal/src/session/binding.rs rename to src/crates/services/terminal/src/session/binding.rs diff --git a/src/crates/terminal/src/session/manager.rs b/src/crates/services/terminal/src/session/manager.rs similarity index 100% rename from src/crates/terminal/src/session/manager.rs rename to src/crates/services/terminal/src/session/manager.rs diff --git a/src/crates/terminal/src/session/mod.rs b/src/crates/services/terminal/src/session/mod.rs similarity index 100% rename from src/crates/terminal/src/session/mod.rs rename to src/crates/services/terminal/src/session/mod.rs diff --git a/src/crates/terminal/src/session/persistent.rs b/src/crates/services/terminal/src/session/persistent.rs similarity index 100% rename from src/crates/terminal/src/session/persistent.rs rename to src/crates/services/terminal/src/session/persistent.rs diff --git a/src/crates/terminal/src/session/serializer.rs b/src/crates/services/terminal/src/session/serializer.rs similarity index 100% rename from src/crates/terminal/src/session/serializer.rs rename to src/crates/services/terminal/src/session/serializer.rs diff --git a/src/crates/terminal/src/session/singleton.rs b/src/crates/services/terminal/src/session/singleton.rs similarity index 100% rename from src/crates/terminal/src/session/singleton.rs rename to src/crates/services/terminal/src/session/singleton.rs diff --git a/src/crates/terminal/src/shell/detection.rs b/src/crates/services/terminal/src/shell/detection.rs similarity index 100% rename from src/crates/terminal/src/shell/detection.rs rename to src/crates/services/terminal/src/shell/detection.rs diff --git a/src/crates/terminal/src/shell/integration.rs b/src/crates/services/terminal/src/shell/integration.rs similarity index 100% rename from src/crates/terminal/src/shell/integration.rs rename to src/crates/services/terminal/src/shell/integration.rs diff --git a/src/crates/terminal/src/shell/mod.rs b/src/crates/services/terminal/src/shell/mod.rs similarity index 100% rename from src/crates/terminal/src/shell/mod.rs rename to src/crates/services/terminal/src/shell/mod.rs diff --git a/src/crates/terminal/src/shell/profiles.rs b/src/crates/services/terminal/src/shell/profiles.rs similarity index 100% rename from src/crates/terminal/src/shell/profiles.rs rename to src/crates/services/terminal/src/shell/profiles.rs diff --git a/src/crates/terminal/src/shell/scripts/shellIntegration-bash.sh b/src/crates/services/terminal/src/shell/scripts/shellIntegration-bash.sh similarity index 100% rename from src/crates/terminal/src/shell/scripts/shellIntegration-bash.sh rename to src/crates/services/terminal/src/shell/scripts/shellIntegration-bash.sh diff --git a/src/crates/terminal/src/shell/scripts/shellIntegration-rc.zsh b/src/crates/services/terminal/src/shell/scripts/shellIntegration-rc.zsh similarity index 100% rename from src/crates/terminal/src/shell/scripts/shellIntegration-rc.zsh rename to src/crates/services/terminal/src/shell/scripts/shellIntegration-rc.zsh diff --git a/src/crates/terminal/src/shell/scripts/shellIntegration.fish b/src/crates/services/terminal/src/shell/scripts/shellIntegration.fish similarity index 100% rename from src/crates/terminal/src/shell/scripts/shellIntegration.fish rename to src/crates/services/terminal/src/shell/scripts/shellIntegration.fish diff --git a/src/crates/terminal/src/shell/scripts/shellIntegration.ps1 b/src/crates/services/terminal/src/shell/scripts/shellIntegration.ps1 similarity index 100% rename from src/crates/terminal/src/shell/scripts/shellIntegration.ps1 rename to src/crates/services/terminal/src/shell/scripts/shellIntegration.ps1 diff --git a/src/crates/terminal/src/shell/scripts_manager.rs b/src/crates/services/terminal/src/shell/scripts_manager.rs similarity index 100% rename from src/crates/terminal/src/shell/scripts_manager.rs rename to src/crates/services/terminal/src/shell/scripts_manager.rs diff --git a/src/crates/surfaces/AGENTS-CN.md b/src/crates/surfaces/AGENTS-CN.md new file mode 100644 index 000000000..7d0840ed8 --- /dev/null +++ b/src/crates/surfaces/AGENTS-CN.md @@ -0,0 +1,22 @@ +**中文** | [English](AGENTS.md) + +# 产品入口层 + +本层放置通过外部协议或宿主入口暴露已组装产品行为的 Rust crate。UI 应用和交付宿主仍优先阅读离代码最近的 `AGENTS.md`。 + +## 模块 + +| Crate | 职责 | 本地文档 | +|---|---|---| +| `acp` | 基于已组装产品 runtime 的 Agent Client Protocol 入口 | [AGENTS.md](acp/AGENTS.md) | + +## 放置规则 + +- 依赖 `facade/core` 或产品组装计划的协议入口放在这里。 +- provider DTO、transport emitter、平台 adapter 等低层适配留在 `integrations`。 +- 可复用服务实现留在 `services`。 + +## 依赖边界 + +- surface crate 可以依赖 `facade/core` 暴露选定交付形态。 +- surface crate 不拥有产品策略、可复用服务或执行原语。 diff --git a/src/crates/surfaces/AGENTS.md b/src/crates/surfaces/AGENTS.md new file mode 100644 index 000000000..192c24049 --- /dev/null +++ b/src/crates/surfaces/AGENTS.md @@ -0,0 +1,28 @@ +[中文](AGENTS-CN.md) | **English** + +# Product Surfaces Layer + +This layer owns Rust crates that expose assembled product behavior through an +external protocol or host-facing entrypoint. UI apps and delivery hosts still +keep their nearest local `AGENTS.md`. + +## Modules + +| Crate | Responsibility | Local doc | +|---|---|---| +| `acp` | Agent Client Protocol surface over the assembled product runtime | [AGENTS.md](acp/AGENTS.md) | + +## Placement Rules + +- Put protocol entrypoints here when they depend on `facade/core` or a product + assembly plan. +- Keep low-level provider DTOs, transport emitters, and platform adapters in + `integrations`. +- Keep reusable service implementations in `services`. + +## Dependency Boundaries + +- Surface crates may depend on `facade/core` to expose a selected delivery + profile. +- Surface crates must not become owners of product policy, reusable services, or + execution primitives. diff --git a/src/crates/surfaces/acp/AGENTS-CN.md b/src/crates/surfaces/acp/AGENTS-CN.md new file mode 100644 index 000000000..91d029c6e --- /dev/null +++ b/src/crates/surfaces/acp/AGENTS-CN.md @@ -0,0 +1,20 @@ +**中文** | [English](AGENTS.md) + +# ACP 协议入口指南 + +适用范围:`src/crates/surfaces/acp`。 + +`bitfun-acp` 负责基于已组装产品 runtime 的 Agent Client Protocol 入口与 ACP client 行为。ACP protocol / client 细节留在这里或应用入口 adapter 中;跨层只共享稳定 capability facts。 + +## 护栏 + +- Remote ACP workspace 复用本地 ACP client 配置。修改 ACP client 行为时,必须保持 manager、remote shell probing、remote capability store 和 workspace menu availability 语义。 +- ACP config persistence、remote probing、timeout policy 和 workspace surface selection 属于 ACP / app-surface 行为,不要移动到 `core-types`、`runtime-ports` 或 `agent-tools`。 +- 如果未来需要 contract,只表达观测事实:environment identity、capability facts、request / response DTO。 + +## 验证 + +```bash +cargo check -p bitfun-acp +cargo test -p bitfun-acp +``` diff --git a/src/crates/acp/AGENTS.md b/src/crates/surfaces/acp/AGENTS.md similarity index 69% rename from src/crates/acp/AGENTS.md rename to src/crates/surfaces/acp/AGENTS.md index 2b67a1713..ff3fcf809 100644 --- a/src/crates/acp/AGENTS.md +++ b/src/crates/surfaces/acp/AGENTS.md @@ -1,12 +1,12 @@ [中文](AGENTS-CN.md) | **English** -# ACP Agent Guide +# ACP Protocol Surface Guide -Scope: this guide applies to `src/crates/acp`. +Scope: this guide applies to `src/crates/surfaces/acp`. -`bitfun-acp` owns Agent Client Protocol integration and ACP client behavior. -Keep ACP protocol/client details here or in app-surface adapters; share only -stable capability facts through contract crates. +`bitfun-acp` owns the Agent Client Protocol surface over the assembled product +runtime. Keep ACP protocol/client details here or in app-surface adapters; +share only stable capability facts through contract crates. ## Guardrails diff --git a/src/crates/acp/Cargo.toml b/src/crates/surfaces/acp/Cargo.toml similarity index 71% rename from src/crates/acp/Cargo.toml rename to src/crates/surfaces/acp/Cargo.toml index 1c4645e36..35b3894a0 100644 --- a/src/crates/acp/Cargo.toml +++ b/src/crates/surfaces/acp/Cargo.toml @@ -3,14 +3,14 @@ name = "bitfun-acp" version.workspace = true authors.workspace = true edition.workspace = true -description = "BitFun Agent Client Protocol integration" +description = "BitFun Agent Client Protocol surface" [lib] name = "bitfun_acp" [dependencies] -bitfun-core = { path = "../core", default-features = false, features = ["product-full"] } -bitfun-events = { path = "../events" } +bitfun-core = { path = "../../facade/core", default-features = false, features = ["product-full"] } +bitfun-events = { path = "../../contracts/events" } agent-client-protocol = { workspace = true } tokio = { workspace = true } diff --git a/src/crates/acp/src/client/builtin_clients.rs b/src/crates/surfaces/acp/src/client/builtin_clients.rs similarity index 100% rename from src/crates/acp/src/client/builtin_clients.rs rename to src/crates/surfaces/acp/src/client/builtin_clients.rs diff --git a/src/crates/acp/src/client/config.rs b/src/crates/surfaces/acp/src/client/config.rs similarity index 100% rename from src/crates/acp/src/client/config.rs rename to src/crates/surfaces/acp/src/client/config.rs diff --git a/src/crates/acp/src/client/manager.rs b/src/crates/surfaces/acp/src/client/manager.rs similarity index 100% rename from src/crates/acp/src/client/manager.rs rename to src/crates/surfaces/acp/src/client/manager.rs diff --git a/src/crates/acp/src/client/mod.rs b/src/crates/surfaces/acp/src/client/mod.rs similarity index 100% rename from src/crates/acp/src/client/mod.rs rename to src/crates/surfaces/acp/src/client/mod.rs diff --git a/src/crates/acp/src/client/remote_capability_store.rs b/src/crates/surfaces/acp/src/client/remote_capability_store.rs similarity index 100% rename from src/crates/acp/src/client/remote_capability_store.rs rename to src/crates/surfaces/acp/src/client/remote_capability_store.rs diff --git a/src/crates/acp/src/client/remote_session.rs b/src/crates/surfaces/acp/src/client/remote_session.rs similarity index 100% rename from src/crates/acp/src/client/remote_session.rs rename to src/crates/surfaces/acp/src/client/remote_session.rs diff --git a/src/crates/acp/src/client/remote_shell.rs b/src/crates/surfaces/acp/src/client/remote_shell.rs similarity index 100% rename from src/crates/acp/src/client/remote_shell.rs rename to src/crates/surfaces/acp/src/client/remote_shell.rs diff --git a/src/crates/acp/src/client/requirements.rs b/src/crates/surfaces/acp/src/client/requirements.rs similarity index 100% rename from src/crates/acp/src/client/requirements.rs rename to src/crates/surfaces/acp/src/client/requirements.rs diff --git a/src/crates/acp/src/client/session_options.rs b/src/crates/surfaces/acp/src/client/session_options.rs similarity index 100% rename from src/crates/acp/src/client/session_options.rs rename to src/crates/surfaces/acp/src/client/session_options.rs diff --git a/src/crates/acp/src/client/session_persistence.rs b/src/crates/surfaces/acp/src/client/session_persistence.rs similarity index 100% rename from src/crates/acp/src/client/session_persistence.rs rename to src/crates/surfaces/acp/src/client/session_persistence.rs diff --git a/src/crates/acp/src/client/stream.rs b/src/crates/surfaces/acp/src/client/stream.rs similarity index 100% rename from src/crates/acp/src/client/stream.rs rename to src/crates/surfaces/acp/src/client/stream.rs diff --git a/src/crates/acp/src/client/tool.rs b/src/crates/surfaces/acp/src/client/tool.rs similarity index 100% rename from src/crates/acp/src/client/tool.rs rename to src/crates/surfaces/acp/src/client/tool.rs diff --git a/src/crates/acp/src/client/tool_card_bridge/mod.rs b/src/crates/surfaces/acp/src/client/tool_card_bridge/mod.rs similarity index 100% rename from src/crates/acp/src/client/tool_card_bridge/mod.rs rename to src/crates/surfaces/acp/src/client/tool_card_bridge/mod.rs diff --git a/src/crates/acp/src/client/tool_card_bridge/tool_name.rs b/src/crates/surfaces/acp/src/client/tool_card_bridge/tool_name.rs similarity index 100% rename from src/crates/acp/src/client/tool_card_bridge/tool_name.rs rename to src/crates/surfaces/acp/src/client/tool_card_bridge/tool_name.rs diff --git a/src/crates/acp/src/client/tool_card_bridge/tool_params.rs b/src/crates/surfaces/acp/src/client/tool_card_bridge/tool_params.rs similarity index 100% rename from src/crates/acp/src/client/tool_card_bridge/tool_params.rs rename to src/crates/surfaces/acp/src/client/tool_card_bridge/tool_params.rs diff --git a/src/crates/acp/src/lib.rs b/src/crates/surfaces/acp/src/lib.rs similarity index 100% rename from src/crates/acp/src/lib.rs rename to src/crates/surfaces/acp/src/lib.rs diff --git a/src/crates/acp/src/runtime.rs b/src/crates/surfaces/acp/src/runtime.rs similarity index 100% rename from src/crates/acp/src/runtime.rs rename to src/crates/surfaces/acp/src/runtime.rs diff --git a/src/crates/acp/src/runtime/content.rs b/src/crates/surfaces/acp/src/runtime/content.rs similarity index 100% rename from src/crates/acp/src/runtime/content.rs rename to src/crates/surfaces/acp/src/runtime/content.rs diff --git a/src/crates/acp/src/runtime/events.rs b/src/crates/surfaces/acp/src/runtime/events.rs similarity index 99% rename from src/crates/acp/src/runtime/events.rs rename to src/crates/surfaces/acp/src/runtime/events.rs index 7dbb7b99f..c91ffe685 100644 --- a/src/crates/acp/src/runtime/events.rs +++ b/src/crates/surfaces/acp/src/runtime/events.rs @@ -339,10 +339,7 @@ fn write_input_status_text(input: &serde_json::Value) -> String { .map(str::len) .unwrap_or(0); - format!( - "Writing {} ({} bytes).", - path, content_len - ) + format!("Writing {} ({} bytes).", path, content_len) } fn truncate_chars(value: &str, max_chars: usize) -> String { diff --git a/src/crates/acp/src/runtime/mcp.rs b/src/crates/surfaces/acp/src/runtime/mcp.rs similarity index 100% rename from src/crates/acp/src/runtime/mcp.rs rename to src/crates/surfaces/acp/src/runtime/mcp.rs diff --git a/src/crates/acp/src/runtime/model.rs b/src/crates/surfaces/acp/src/runtime/model.rs similarity index 100% rename from src/crates/acp/src/runtime/model.rs rename to src/crates/surfaces/acp/src/runtime/model.rs diff --git a/src/crates/acp/src/runtime/prompt.rs b/src/crates/surfaces/acp/src/runtime/prompt.rs similarity index 100% rename from src/crates/acp/src/runtime/prompt.rs rename to src/crates/surfaces/acp/src/runtime/prompt.rs diff --git a/src/crates/acp/src/runtime/session.rs b/src/crates/surfaces/acp/src/runtime/session.rs similarity index 100% rename from src/crates/acp/src/runtime/session.rs rename to src/crates/surfaces/acp/src/runtime/session.rs diff --git a/src/crates/acp/src/runtime/thinking.rs b/src/crates/surfaces/acp/src/runtime/thinking.rs similarity index 100% rename from src/crates/acp/src/runtime/thinking.rs rename to src/crates/surfaces/acp/src/runtime/thinking.rs diff --git a/src/crates/acp/src/server.rs b/src/crates/surfaces/acp/src/server.rs similarity index 100% rename from src/crates/acp/src/server.rs rename to src/crates/surfaces/acp/src/server.rs diff --git a/src/shared/i18n/contract/locales.json b/src/shared/i18n/contract/locales.json index 1925f2a44..bca9e21b5 100644 --- a/src/shared/i18n/contract/locales.json +++ b/src/shared/i18n/contract/locales.json @@ -48,7 +48,7 @@ "loading": "surface-minimal" }, "core": { - "resourceRoot": "src/crates/core/locales", + "resourceRoot": "src/crates/facade/core/locales", "loading": "backend-service" }, "relay-static-homepage": { diff --git a/src/web-ui/src/flow_chat/components/DeepReviewConsentDialog.test.tsx b/src/web-ui/src/flow_chat/components/DeepReviewConsentDialog.test.tsx index 284ad32e9..1580de41a 100644 --- a/src/web-ui/src/flow_chat/components/DeepReviewConsentDialog.test.tsx +++ b/src/web-ui/src/flow_chat/components/DeepReviewConsentDialog.test.tsx @@ -112,7 +112,7 @@ function buildPreview(): ReviewTeamRunManifest { source: 'session_files', resolution: 'resolved', tags: ['backend_core'], - files: ['src/crates/core/src/service/config/types.rs'], + files: ['src/crates/facade/core/src/service/config/types.rs'], warnings: [], }, strategyLevel: 'normal', diff --git a/src/web-ui/src/flow_chat/deep-review/AGENTS.md b/src/web-ui/src/flow_chat/deep-review/AGENTS.md index fa50e8348..7aad38184 100644 --- a/src/web-ui/src/flow_chat/deep-review/AGENTS.md +++ b/src/web-ui/src/flow_chat/deep-review/AGENTS.md @@ -21,4 +21,4 @@ This file applies to DeepReview launch, report, queue, and action UI code. Use the nearest focused Web UI test or `pnpm run type-check:web`. If the change updates manifest, queue, retry, or report contracts, also run the matching core -DeepReview check from `src/crates/core/src/agentic/deep_review/AGENTS.md`. +DeepReview check from `src/crates/facade/core/src/agentic/deep_review/AGENTS.md`. diff --git a/src/web-ui/src/flow_chat/deep-review/launch/commandParser.test.ts b/src/web-ui/src/flow_chat/deep-review/launch/commandParser.test.ts index eaf30c266..7bfa37201 100644 --- a/src/web-ui/src/flow_chat/deep-review/launch/commandParser.test.ts +++ b/src/web-ui/src/flow_chat/deep-review/launch/commandParser.test.ts @@ -28,11 +28,11 @@ describe('Deep Review launch command parser', () => { it('extracts explicit review file paths once and ignores prose tokens', () => { expect( extractExplicitReviewFilePaths( - 'please inspect `src/web-ui/src/App.tsx`, src/web-ui/src/App.tsx and src/crates/core/src/lib.rs for risk', + 'please inspect `src/web-ui/src/App.tsx`, src/web-ui/src/App.tsx and src/crates/facade/core/src/lib.rs for risk', ), ).toEqual([ 'src/web-ui/src/App.tsx', - 'src/crates/core/src/lib.rs', + 'src/crates/facade/core/src/lib.rs', ]); }); diff --git a/src/web-ui/src/flow_chat/deep-review/launch/targetResolver.test.ts b/src/web-ui/src/flow_chat/deep-review/launch/targetResolver.test.ts index dc7009995..3b401210a 100644 --- a/src/web-ui/src/flow_chat/deep-review/launch/targetResolver.test.ts +++ b/src/web-ui/src/flow_chat/deep-review/launch/targetResolver.test.ts @@ -46,7 +46,7 @@ describe('Deep Review target resolver', () => { it('resolves explicit file targets before reading git state', async () => { const result = await resolveSlashCommandReviewTarget( - 'src/web-ui/src/App.tsx src/crates/core/src/lib.rs for regressions', + 'src/web-ui/src/App.tsx src/crates/facade/core/src/lib.rs for regressions', 'D:\\workspace\\repo', ); diff --git a/src/web-ui/src/flow_chat/services/DeepReviewService.test.ts b/src/web-ui/src/flow_chat/services/DeepReviewService.test.ts index 9b8cdf35b..4d80b9af6 100644 --- a/src/web-ui/src/flow_chat/services/DeepReviewService.test.ts +++ b/src/web-ui/src/flow_chat/services/DeepReviewService.test.ts @@ -119,7 +119,7 @@ describe('DeepReviewService slash command', () => { it('classifies explicit slash-command file paths before building the review team manifest', async () => { await buildDeepReviewPromptFromSlashCommand( - '/DeepReview src/web-ui/src/App.tsx src/crates/core/src/service/config/types.rs for regressions', + '/DeepReview src/web-ui/src/App.tsx src/crates/facade/core/src/service/config/types.rs for regressions', 'D:\\workspace\\repo', ); @@ -139,7 +139,7 @@ describe('DeepReviewService slash command', () => { it('classifies workspace diff files for a slash command without an explicit target', async () => { mockGitGetStatus.mockResolvedValueOnce({ staged: [{ path: 'src/web-ui/src/App.tsx', status: 'modified' }], - unstaged: [{ path: 'src/crates/core/src/service/config/types.rs', status: 'modified' }], + unstaged: [{ path: 'src/crates/facade/core/src/service/config/types.rs', status: 'modified' }], untracked: ['src/web-ui/src/newFeature.tsx'], conflicts: [], current_branch: 'main', @@ -169,7 +169,7 @@ describe('DeepReviewService slash command', () => { it('passes workspace diff line stats into the review manifest', async () => { mockGitGetStatus.mockResolvedValueOnce({ staged: [{ path: 'src/web-ui/src/App.tsx', status: 'modified' }], - unstaged: [{ path: 'src/crates/core/src/service/config/types.rs', status: 'modified' }], + unstaged: [{ path: 'src/crates/facade/core/src/service/config/types.rs', status: 'modified' }], untracked: [], conflicts: [], current_branch: 'main', @@ -177,7 +177,7 @@ describe('DeepReviewService slash command', () => { behind: 0, }); mockGitGetDiff.mockResolvedValueOnce([ - 'diff --git a/src/crates/core/src/service/config/types.rs b/src/crates/core/src/service/config/types.rs', + 'diff --git a/src/crates/facade/core/src/service/config/types.rs b/src/crates/facade/core/src/service/config/types.rs', '@@ -1,2 +1,3 @@', '-old core line', '+new core line', @@ -368,7 +368,7 @@ describe('DeepReviewService slash command', () => { it('classifies explicit ref ranges through the git changed-files API', async () => { mockGitGetChangedFiles.mockResolvedValueOnce([ { - path: 'src/crates/core/src/service/config/types.rs', + path: 'src/crates/facade/core/src/service/config/types.rs', old_path: undefined, status: 'modified', }, @@ -453,7 +453,7 @@ describe('DeepReviewService slash command', () => { vi.mocked(buildEffectiveReviewTeamManifest).mockReturnValueOnce(runManifest as any); const result = await buildDeepReviewPreviewFromSessionFiles( - ['src/crates/core/src/service/config/types.rs'], + ['src/crates/facade/core/src/service/config/types.rs'], 'D:\\workspace\\repo', ); diff --git a/src/web-ui/src/flow_chat/utils/deepReviewContinuation.test.ts b/src/web-ui/src/flow_chat/utils/deepReviewContinuation.test.ts index 4130e7982..91778cc61 100644 --- a/src/web-ui/src/flow_chat/utils/deepReviewContinuation.test.ts +++ b/src/web-ui/src/flow_chat/utils/deepReviewContinuation.test.ts @@ -248,7 +248,7 @@ describe('deepReviewContinuation', () => { status: 'error', userMessage: { id: 'user-1', - content: 'Run a deep review for src/crates/core/src/lib.rs', + content: 'Run a deep review for src/crates/facade/core/src/lib.rs', timestamp: 1, }, startTime: 1, diff --git a/src/web-ui/src/shared/services/review-team/pathMetadata.test.ts b/src/web-ui/src/shared/services/review-team/pathMetadata.test.ts new file mode 100644 index 000000000..ee747a854 --- /dev/null +++ b/src/web-ui/src/shared/services/review-team/pathMetadata.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from 'vitest'; +import { workspaceAreaForReviewPath } from './pathMetadata'; + +describe('review-team path metadata', () => { + it('uses the real crate segment for layered src/crates paths', () => { + expect(workspaceAreaForReviewPath( + 'src/crates/execution/agent-runtime/src/lib.rs', + )).toBe('crate:agent-runtime'); + expect(workspaceAreaForReviewPath( + 'src/crates/execution/agent-tools/src/lib.rs', + )).toBe('crate:agent-tools'); + expect(workspaceAreaForReviewPath( + 'src/crates/facade/core/src/lib.rs', + )).toBe('crate:core'); + }); +}); diff --git a/src/web-ui/src/shared/services/review-team/pathMetadata.ts b/src/web-ui/src/shared/services/review-team/pathMetadata.ts index 3ba2d41ce..e0dc0942f 100644 --- a/src/web-ui/src/shared/services/review-team/pathMetadata.ts +++ b/src/web-ui/src/shared/services/review-team/pathMetadata.ts @@ -6,6 +6,16 @@ import type { ReviewTargetClassification } from '../reviewTargetClassifier'; const SECURITY_SENSITIVE_PATH_PATTERN = /(^|[/._-])(auth|oauth|crypto|security|permission|permissions|secret|secrets|token|tokens|credential|credentials)([/._-]|$)/; +const LAYERED_CRATE_ROOTS = new Set([ + 'surfaces', + 'facade', + 'integrations', + 'services', + 'product', + 'execution', + 'contracts', +]); + export interface WorkspaceAreaFileBucket { key: string; index: number; @@ -16,10 +26,36 @@ export function isSecuritySensitiveReviewPath(normalizedPath: string): boolean { return SECURITY_SENSITIVE_PATH_PATTERN.test(normalizedPath.toLowerCase()); } +export function crateNameForReviewPath(normalizedPath: string): string | undefined { + const cratePathMatch = normalizedPath.match(/^src\/crates\/([^/]+)(?:\/([^/]+))?/); + if (!cratePathMatch) { + return undefined; + } + + const [, firstSegment, secondSegment] = cratePathMatch; + if (LAYERED_CRATE_ROOTS.has(firstSegment)) { + if (secondSegment && !secondSegment.includes('.')) { + return secondSegment; + } + return undefined; + } + + return firstSegment && !firstSegment.includes('.') ? firstSegment : undefined; +} + export function workspaceAreaForReviewPath(normalizedPath: string): string { - const crateMatch = normalizedPath.match(/^src\/crates\/([^/]+)/); - if (crateMatch) { - return `crate:${crateMatch[1]}`; + const crateName = crateNameForReviewPath(normalizedPath); + if (crateName) { + return `crate:${crateName}`; + } + + const crateLayerMatch = normalizedPath.match(/^src\/crates\/([^/]+)/); + if (crateLayerMatch && LAYERED_CRATE_ROOTS.has(crateLayerMatch[1])) { + return `crate-layer:${crateLayerMatch[1]}`; + } + + if (normalizedPath.startsWith('src/crates/')) { + return 'crates'; } const appMatch = normalizedPath.match(/^src\/apps\/([^/]+)/); diff --git a/src/web-ui/src/shared/services/review-team/risk.test.ts b/src/web-ui/src/shared/services/review-team/risk.test.ts new file mode 100644 index 000000000..568c37a3c --- /dev/null +++ b/src/web-ui/src/shared/services/review-team/risk.test.ts @@ -0,0 +1,24 @@ +import { describe, expect, it } from 'vitest'; +import { classifyReviewTargetFromFiles } from '../reviewTargetClassifier'; +import { recommendBackendCompatibleStrategyForTarget } from './risk'; + +describe('review-team risk recommendation', () => { + it('counts same-layer layered crate changes as cross-crate changes', () => { + const target = classifyReviewTargetFromFiles( + [ + 'src/crates/execution/agent-runtime/src/lib.rs', + 'src/crates/execution/agent-tools/src/lib.rs', + ], + 'workspace_diff', + ); + + const recommendation = recommendBackendCompatibleStrategyForTarget(target, { + fileCount: 2, + totalLinesChanged: 40, + lineCountSource: 'diff_stat', + }); + + expect(recommendation.factors.crossCrateChanges).toBe(1); + expect(recommendation.score).toBe(4); + }); +}); diff --git a/src/web-ui/src/shared/services/review-team/risk.ts b/src/web-ui/src/shared/services/review-team/risk.ts index a9e610486..f20a00dbe 100644 --- a/src/web-ui/src/shared/services/review-team/risk.ts +++ b/src/web-ui/src/shared/services/review-team/risk.ts @@ -10,6 +10,7 @@ import type { ReviewTeamStrategyRecommendation, } from './types'; import { + crateNameForReviewPath, isSecuritySensitiveReviewPath, pluralize, workspaceAreaForReviewPath, @@ -102,7 +103,7 @@ function crossCrateChangeCountForReviewTarget( const crateNames = new Set( target.files .filter((file) => !file.excluded) - .map((file) => /^src\/crates\/([^/]+)/.exec(file.normalizedPath)?.[1]) + .map((file) => crateNameForReviewPath(file.normalizedPath)) .filter((crateName): crateName is string => Boolean(crateName)), ); diff --git a/src/web-ui/src/shared/services/reviewTargetClassifier.test.ts b/src/web-ui/src/shared/services/reviewTargetClassifier.test.ts index 4e1b268ba..2f704ac6f 100644 --- a/src/web-ui/src/shared/services/reviewTargetClassifier.test.ts +++ b/src/web-ui/src/shared/services/reviewTargetClassifier.test.ts @@ -45,7 +45,7 @@ describe('reviewTargetClassifier', () => { it('classifies backend core files without frontend tags', () => { const target = classifyReviewTargetFromFiles( - ['src/crates/core/src/service/config/types.rs'], + ['src/crates/facade/core/src/service/config/types.rs'], 'session_files', ); @@ -53,11 +53,36 @@ describe('reviewTargetClassifier', () => { expect(target.tags).toEqual(['backend_core']); }); + it('classifies layered Rust crate paths from the current Cargo layout', () => { + const target = classifyReviewTargetFromFiles( + [ + 'src/crates/contracts/runtime-ports/src/lib.rs', + 'src/crates/execution/agent-runtime/src/lib.rs', + 'src/crates/execution/agent-tools/src/lib.rs', + 'src/crates/services/services-core/src/lib.rs', + 'src/crates/product/product-capabilities/src/lib.rs', + 'src/crates/surfaces/acp/src/lib.rs', + 'src/crates/integrations/webdriver/src/lib.rs', + ], + 'session_files', + ); + + expect(target.resolution).toBe('resolved'); + expect(target.tags).toEqual( + expect.arrayContaining(['backend_core']), + ); + expect(target.tags).not.toContain('unknown'); + expect(target.files.every((file) => !file.tags.includes('unknown'))).toBe(true); + expect(target.files.find((file) => + file.normalizedPath === 'src/crates/surfaces/acp/src/lib.rs', + )?.tags).toEqual(expect.arrayContaining(['backend_core', 'transport'])); + }); + it('classifies installer and core locale resources as i18n targets', () => { const target = classifyReviewTargetFromFiles( [ 'src/web-ui/src/locales/zh-TW/flow-chat.json', - 'src/crates/core/locales/zh-TW.ftl', + 'src/crates/facade/core/locales/zh-TW.ftl', 'BitFun-Installer/src/i18n/locales/zh-TW.json', ], 'session_files', @@ -100,7 +125,7 @@ describe('reviewTargetClassifier', () => { it('evaluates conditional reviewer applicability from registry tags', () => { const backendTarget = classifyReviewTargetFromFiles( - ['src/crates/core/src/service/config/types.rs'], + ['src/crates/facade/core/src/service/config/types.rs'], 'session_files', ); const frontendTarget = classifyReviewTargetFromFiles( diff --git a/src/web-ui/src/shared/services/reviewTargetClassifier.ts b/src/web-ui/src/shared/services/reviewTargetClassifier.ts index 21f1fa426..7b81ef957 100644 --- a/src/web-ui/src/shared/services/reviewTargetClassifier.ts +++ b/src/web-ui/src/shared/services/reviewTargetClassifier.ts @@ -92,6 +92,16 @@ const REVIEWER_APPLICABILITY_RULES: ReviewerApplicabilityRule[] = [ }, ]; +const LAYERED_BACKEND_CRATE_PREFIXES = [ + 'src/crates/surfaces/acp/', + 'src/crates/facade/', + 'src/crates/integrations/webdriver/', + 'src/crates/contracts/', + 'src/crates/execution/', + 'src/crates/services/', + 'src/crates/product/', +]; + export function getReviewerApplicabilityRule( subagentId: string, ): ReviewerApplicabilityRule | undefined { @@ -122,7 +132,7 @@ const PATH_TAG_RULES: PathTagRule[] = [ { id: 'core-locales', tags: ['frontend_i18n'], - match: { pathPrefixes: ['src/crates/core/locales/'], extensions: ['.ftl'] }, + match: { pathPrefixes: ['src/crates/facade/core/locales/'], extensions: ['.ftl'] }, evidence: 'Core locale file changed', }, { @@ -158,7 +168,7 @@ const PATH_TAG_RULES: PathTagRule[] = [ { id: 'api-layer-contract', tags: ['api_layer', 'frontend_contract'], - match: { pathPrefixes: ['src/crates/api-layer/'] }, + match: { pathPrefixes: ['src/crates/integrations/api-layer/'] }, evidence: 'API layer may affect frontend/backend contract', }, { @@ -170,19 +180,31 @@ const PATH_TAG_RULES: PathTagRule[] = [ { id: 'transport', tags: ['transport'], - match: { pathPrefixes: ['src/crates/transport/'] }, + match: { pathPrefixes: ['src/crates/integrations/transport/'] }, evidence: 'Transport layer changed', }, + { + id: 'acp-surface', + tags: ['backend_core', 'transport'], + match: { pathPrefixes: ['src/crates/surfaces/acp/'] }, + evidence: 'ACP protocol surface changed', + }, + { + id: 'layered-backend-crate', + tags: ['backend_core'], + match: { pathPrefixes: LAYERED_BACKEND_CRATE_PREFIXES }, + evidence: 'Layered backend crate changed', + }, { id: 'core', tags: ['backend_core'], - match: { pathPrefixes: ['src/crates/core/'] }, + match: { pathPrefixes: ['src/crates/facade/core/'] }, evidence: 'Core product logic changed', }, { id: 'ai-adapter', tags: ['ai_adapter'], - match: { pathPrefixes: ['src/crates/ai-adapters/'] }, + match: { pathPrefixes: ['src/crates/integrations/ai-adapters/'] }, evidence: 'AI adapter changed', }, { diff --git a/src/web-ui/src/shared/services/reviewTeamService.test.ts b/src/web-ui/src/shared/services/reviewTeamService.test.ts index 2612f996a..746e14949 100644 --- a/src/web-ui/src/shared/services/reviewTeamService.test.ts +++ b/src/web-ui/src/shared/services/reviewTeamService.test.ts @@ -728,7 +728,7 @@ describe('reviewTeamService', () => { storedConfigWithExtra([], { strategy_level: 'quick' }), ); const files = [ - 'src/crates/core/src/agentic/deep_review/report.rs', + 'src/crates/facade/core/src/agentic/deep_review/report.rs', 'src/apps/desktop/src/api/agentic_api.rs', 'src/web-ui/src/app/scenes/agents/components/ReviewTeamPage.tsx', ]; @@ -846,7 +846,7 @@ describe('reviewTeamService', () => { const target = classifyReviewTargetFromFiles( [ 'src/web-ui/src/locales/zh-TW/flow-chat.json', - 'src/crates/core/locales/zh-TW.ftl', + 'src/crates/facade/core/locales/zh-TW.ftl', 'BitFun-Installer/src/i18n/locales/zh-TW.json', ], 'session_files', @@ -897,8 +897,8 @@ describe('reviewTeamService', () => { 'src/web-ui/src/shared/services/reviewTeamService.ts', 'src/web-ui/src/app/scenes/agents/components/ReviewTeamPage.tsx', 'src/web-ui/src/locales/en-US/scenes/agents.json', - 'src/crates/core/src/agentic/deep_review_policy.rs', - 'src/crates/core/src/agentic/tools/implementations/task_tool.rs', + 'src/crates/facade/core/src/agentic/deep_review_policy.rs', + 'src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs', ], 'session_files', ); @@ -930,8 +930,8 @@ describe('reviewTeamService', () => { key: 'crate:core', fileCount: 2, sampleFiles: [ - 'src/crates/core/src/agentic/deep_review_policy.rs', - 'src/crates/core/src/agentic/tools/implementations/task_tool.rs', + 'src/crates/facade/core/src/agentic/deep_review_policy.rs', + 'src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs', ], }, ], @@ -954,7 +954,7 @@ describe('reviewTeamService', () => { const target = classifyReviewTargetFromFiles( [ 'src/web-ui/src/shared/services/reviewTeamService.ts', - 'src/crates/core/src/agentic/deep_review_policy.rs', + 'src/crates/facade/core/src/agentic/deep_review_policy.rs', ], 'session_files', ); @@ -1000,7 +1000,7 @@ describe('reviewTeamService', () => { const files = [ 'src/web-ui/src/locales/en-US/flow-chat.json', 'src/apps/desktop/src/api/agentic_api.rs', - 'src/crates/api-layer/src/review.rs', + 'src/crates/integrations/api-layer/src/review.rs', 'package.json', ]; @@ -1044,7 +1044,7 @@ describe('reviewTeamService', () => { }), expect.objectContaining({ kind: 'api_contract', - filePath: 'src/crates/api-layer/src/review.rs', + filePath: 'src/crates/integrations/api-layer/src/review.rs', }), expect.objectContaining({ kind: 'config_key', @@ -1075,7 +1075,7 @@ describe('reviewTeamService', () => { ); const files = [ 'src/web-ui/src/locales/en-US/flow-chat.json', - 'src/crates/api-layer/src/review.rs', + 'src/crates/integrations/api-layer/src/review.rs', ]; const manifest = buildEffectiveReviewTeamManifest(team, { target: classifyReviewTargetFromFiles(files, 'workspace_diff'), @@ -1107,7 +1107,7 @@ describe('reviewTeamService', () => { const target = classifyReviewTargetFromFiles( [ 'src/web-ui/src/shared/services/reviewTeamService.ts', - 'src/crates/core/src/agentic/deep_review_policy.rs', + 'src/crates/facade/core/src/agentic/deep_review_policy.rs', ], 'session_files', ); @@ -1124,7 +1124,7 @@ describe('reviewTeamService', () => { source: 'target_manifest', strategy: 'reuse_completed_packets_when_fingerprint_matches', filePaths: [ - 'src/crates/core/src/agentic/deep_review_policy.rs', + 'src/crates/facade/core/src/agentic/deep_review_policy.rs', 'src/web-ui/src/shared/services/reviewTeamService.ts', ], workspaceAreas: ['crate:core', 'web-ui'], @@ -1231,16 +1231,16 @@ describe('reviewTeamService', () => { const target = classifyReviewTargetFromFiles( [ 'src/web-ui/src/components/ReviewPanel.tsx', - 'src/crates/core/src/agentic/deep_review_policy.rs', + 'src/crates/facade/core/src/agentic/deep_review_policy.rs', 'src/apps/desktop/src/api/review.rs', 'src/web-ui/src/shared/services/reviewTeamService.ts', - 'src/crates/core/src/agentic/tools/implementations/task_tool.rs', + 'src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs', 'src/apps/desktop/src/api/agent.rs', 'src/web-ui/src/app/scenes/agents/components/ReviewTeamPage.tsx', - 'src/crates/core/src/agentic/agents/deep_review_agent.rs', + 'src/crates/facade/core/src/agentic/agents/deep_review_agent.rs', 'src/apps/desktop/src/api/config.rs', 'src/web-ui/src/locales/en-US/scenes/agents.json', - 'src/crates/core/src/agentic/agents/prompts/deep_review_agent.md', + 'src/crates/facade/core/src/agentic/agents/prompts/deep_review_agent.md', 'src/apps/desktop/src/api/subagent.rs', ], 'session_files', @@ -1266,10 +1266,10 @@ describe('reviewTeamService', () => { 'src/web-ui/src/locales/en-US/scenes/agents.json', ], [ - 'src/crates/core/src/agentic/deep_review_policy.rs', - 'src/crates/core/src/agentic/tools/implementations/task_tool.rs', - 'src/crates/core/src/agentic/agents/deep_review_agent.rs', - 'src/crates/core/src/agentic/agents/prompts/deep_review_agent.md', + 'src/crates/facade/core/src/agentic/deep_review_policy.rs', + 'src/crates/facade/core/src/agentic/tools/implementations/task_tool.rs', + 'src/crates/facade/core/src/agentic/agents/deep_review_agent.rs', + 'src/crates/facade/core/src/agentic/agents/prompts/deep_review_agent.md', ], [ 'src/apps/desktop/src/api/review.rs', @@ -1411,7 +1411,7 @@ describe('reviewTeamService', () => { const manifest = buildEffectiveReviewTeamManifest(team, { target: classifyReviewTargetFromFiles( - ['src/crates/core/src/service/config/types.rs'], + ['src/crates/facade/core/src/service/config/types.rs'], 'session_files', ), }); @@ -1440,7 +1440,7 @@ describe('reviewTeamService', () => { const manifest = buildEffectiveReviewTeamManifest(team, { workspacePath: WORKSPACE_PATH, - reviewTargetFilePaths: ['src/crates/core/src/agentic/deep_review_policy.rs'], + reviewTargetFilePaths: ['src/crates/facade/core/src/agentic/deep_review_policy.rs'], }); expect(manifest.coreReviewers.map((member) => member.subagentId)).toEqual([ @@ -1526,8 +1526,8 @@ describe('reviewTeamService', () => { ); const target = classifyReviewTargetFromFiles( [ - 'src/crates/core/src/service/auth/token_store.rs', - 'src/crates/api-layer/src/review.rs', + 'src/crates/facade/core/src/service/auth/token_store.rs', + 'src/crates/integrations/api-layer/src/review.rs', 'src/web-ui/src/components/ReviewPanel.tsx', ], 'workspace_diff', @@ -1585,7 +1585,7 @@ describe('reviewTeamService', () => { ); const files = Array.from( { length: 48 }, - (_, index) => `src/crates/core/src/agentic/large_change_${index}.rs`, + (_, index) => `src/crates/facade/core/src/agentic/large_change_${index}.rs`, ); const target = classifyReviewTargetFromFiles(files, 'workspace_diff'); @@ -1679,7 +1679,7 @@ describe('reviewTeamService', () => { ); const files = Array.from( { length: 6 }, - (_, index) => `src/crates/core/src/agentic/large_change_${index}.rs`, + (_, index) => `src/crates/facade/core/src/agentic/large_change_${index}.rs`, ); const target = classifyReviewTargetFromFiles(files, 'workspace_diff'); @@ -1734,7 +1734,7 @@ describe('reviewTeamService', () => { ); const files = Array.from( { length: 5 }, - (_, index) => `src/crates/core/src/agentic/small_${index}.rs`, + (_, index) => `src/crates/facade/core/src/agentic/small_${index}.rs`, ); const target = classifyReviewTargetFromFiles(files, 'workspace_diff'); @@ -1851,7 +1851,7 @@ describe('reviewTeamService', () => { ); const target = classifyReviewTargetFromFiles( [ - 'src/crates/core/src/service/auth/token_store.rs', + 'src/crates/facade/core/src/service/auth/token_store.rs', 'src/apps/desktop/src/api/agentic_api.rs', ...Array.from( { length: 18 }, @@ -1924,7 +1924,7 @@ describe('reviewTeamService', () => { [ ...Array.from( { length: 24 }, - (_, index) => `src/crates/core/src/review/module_${index}.rs`, + (_, index) => `src/crates/facade/core/src/review/module_${index}.rs`, ), ], 'workspace_diff',