Skip to content

Commit be14b80

Browse files
committed
refactor(remote-connect): move service agent runtime assembly
1 parent 589fb4b commit be14b80

6 files changed

Lines changed: 374 additions & 68 deletions

File tree

docs/architecture/core-decomposition.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,18 @@ owner 边界,否则不要把一个 feature group 继续拆成更小的 crate
9797
- remote runtime port baseline 当前只提供契约和 core-owned adapter:`AgentSubmissionPort`
9898
仍拒绝 generic attachments;remote image DTO、turn cancellation、remote state 和 event facts
9999
不等于 remote-connect runtime 或多模态执行路径已经迁移。
100-
- remote-connect command/response wire DTO、remote model catalog DTO、poll response assembly /
101-
model catalog poll delta、
100+
- remote-connect command/response wire DTO、remote model catalog DTO / config-shape assembly、
101+
poll response assembly / model catalog poll delta、
102102
tracker state / registry lifecycle、remote tool preview slimming、remote model selection policy、legacy image context fallback /
103103
preference、restore target decision、cancel decision、cancel-task orchestration、
104-
RemoteRelay/Bot dialog submission orchestration port/provider、remote workspace path/MIME/full-read/chunk/info helper、
104+
RemoteRelay/Bot dialog submission orchestration port/provider、dialog scheduler outcome assembly、
105+
remote workspace path/MIME/full-read/chunk/info helper、
105106
remote file command / response assembly、dialog/cancel/execution accepted response helper 与 remote file transfer
106107
size/chunk/name policy、workspace/session response assembly helper、remote chat history presentation assembly helper 可由
107108
`bitfun-services-integrations` 拥有;core 只保留 tracker host adapter、
108109
global dispatcher compatibility wrapper、session restore 执行、terminal pre-warm adapter、
109-
concrete scheduler submit adapter、workspace-root source、persistence/workspace service reads、remote chat history projection / image compression / enhanced-input cleanup 与
110+
concrete scheduler submit adapter、workspace-root source、persistence/workspace service reads、
111+
model config loading / model-reference resolver injection、remote chat history projection / image compression / enhanced-input cleanup 与
110112
`ImageContextData` concrete adapter implementation。
111113
不要把 tracker state、wire DTO、dialog orchestration 或纯策略 helper 回写到 core。
112114
- remote-connect runtime owner 进一步外移前必须保持迁移前快照:remote command/response
@@ -334,6 +336,7 @@ owner 边界,否则不要把一个 feature group 继续拆成更小的 crate
334336
presentation assembly 迁入 `bitfun-services-integrations`;core 只把已持久化的
335337
`DialogTurnData` 投影为 owner DTO,并继续持有 persistence read、mobile image
336338
compression 和 enhanced remote user input cleanup。
339+
remote model catalog 的 config-shape assembly、dialog scheduler outcome assembly 以及
337340
remote session/model selection 的 alias/config-reference 归一策略也迁入
338341
`bitfun-services-integrations`;core 继续负责读取 `AIConfig` 并注入 model reference
339342
resolver。

docs/plans/core-decomposition-plan.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,8 +1083,8 @@ product-full = ["git", "mcp", "remote-ssh", "remote-connect", "announcement", "f
10831083
- [x] 已补齐 remote runtime 迁移前的第一层 port baseline:`SessionTranscriptReader``AgentTurnCancellationPort``RemoteControlStatePort``RuntimeEventSink` 与 remote image attachment/request DTO;完整 `remote-connect` runtime 仍需后续单独迁移并补 queue/event/image 行为等价测试。
10841084
- [x] `RemoteSessionStateTracker``TrackerEvent`、tracker registry lifecycle 与 remote tool preview slimming helper 已迁入 `bitfun-services-integrations`;core 只保留 tracker host adapter、dispatcher、session restore、terminal pre-warm 与实际 dialog submission routing。
10851085
- [x] 已补齐 remote-connect runtime 迁移前快照:remote command/response wire shape、session restore target、active turn poll snapshot、cancel decision、legacy image fallback / unified image context preference、tracker completion/fanout 与 RemoteRelay/Bot queue policy 均有 focused regression。
1086-
- [x] 已将 remote-connect wire / poll 边界与纯运行时策略 helper 迁入 `bitfun-services-integrations`:command/response wire DTO、remote model catalog DTO、poll response assembly / model catalog poll delta、remote model selection policy、legacy image context fallback / explicit context preference、restore target decision、cancel decision、remote workspace file IO/path helper、remote file command / response assembly、dialog/cancel/interaction response helper、workspace/session response assembly helper、remote chat history presentation assembly、image-context adapter contract 与 remote file transfer size/chunk/name policy 由 owner crate 提供;core 仅保留 dispatcher、session restore 执行、workspace-root source、persistence/workspace service reads、model config loading / resolver injection、remote chat history projection / image compression / enhanced-input cleanup、`ImageContextData` concrete impl、terminal pre-warm adapter 与实际 dialog submission routing。
1087-
- [x] H3 remote-connect closure:RemoteRelay/Bot dialog submission orchestration、agent type normalization、turn id resolution、restore decision、terminal pre-warm decision、queue policy、remote model selection policy、remote workspace file IO/path helper、remote file command / response assembly、dialog/cancel/interaction response helper、remote chat history presentation assembly 与 image-context adapter contract 归属 `bitfun-services-integrations`;core 继续作为 concrete scheduler/session restore/terminal adapter、workspace-root source、workspace/session response adapter、model config resolver adapter 与 persisted history projection adapter,不改变产品行为。
1086+
- [x] 已将 remote-connect wire / poll 边界与纯运行时策略 helper 迁入 `bitfun-services-integrations`:command/response wire DTO、remote model catalog DTO / config-shape assembly、poll response assembly / model catalog poll delta、remote model selection policy、legacy image context fallback / explicit context preference、restore target decision、cancel decision、dialog scheduler outcome assembly、remote workspace file IO/path helper、remote file command / response assembly、dialog/cancel/interaction response helper、workspace/session response assembly helper、remote chat history presentation assembly、image-context adapter contract 与 remote file transfer size/chunk/name policy 由 owner crate 提供;core 仅保留 dispatcher、session restore 执行、workspace-root source、persistence/workspace service reads、model config loading / resolver injection、remote chat history projection / image compression / enhanced-input cleanup、`ImageContextData` concrete impl、terminal pre-warm adapter 与实际 dialog submission routing。
1087+
- [x] H3 remote-connect closure:RemoteRelay/Bot dialog submission orchestration、agent type normalization、turn id resolution、restore decision、terminal pre-warm decision、queue policy、dialog scheduler outcome assembly、remote model catalog config-shape assembly、remote model selection policy、remote workspace file IO/path helper、remote file command / response assembly、dialog/cancel/interaction response helper、remote chat history presentation assembly 与 image-context adapter contract 归属 `bitfun-services-integrations`;core 继续作为 concrete scheduler/session restore/terminal adapter、workspace-root source、workspace/session response adapter、model config resolver adapter 与 persisted history projection adapter,不改变产品行为。
10881088
- [x] 已迁移的集成能力保持 core 旧路径 re-export。
10891089
- [x] 产品完整 runtime 通过 `services-integrations/product-full` 启用已迁移集成能力。
10901090

@@ -1794,6 +1794,15 @@ HR3:service / agent runtime deep owner migration 的主要风险和控制点
17941794
default/auto、primary/fast 与 config-reference 归一策略已迁入 `bitfun-services-integrations`
17951795
core 继续负责读取 `AIConfig` 并注入 `resolve_model_reference`,保留缺失 config service
17961796
的既有错误边界。
1797+
- 当前 service/agent 深迁移新增完成项:remote model catalog 的 config-shape assembly
1798+
已迁入 `bitfun-services-integrations`。core 只投影 model capability / reasoning mode
1799+
等 owner facts,并继续持有 config service 读取与 session model resolver 注入;catalog
1800+
version 裁剪、capability/reasoning wire 字段和默认模型/session 模型字段装配由 owner crate
1801+
的 contract test 保护。
1802+
- 当前 service/agent 深迁移新增完成项:dialog scheduler outcome assembly 已迁入
1803+
`bitfun-services-integrations`。core 只投影 concrete `DialogSubmitOutcome` 为 owner fact,
1804+
scheduler submit、queue policy 映射和 terminal pre-warm 仍留在 core adapter,避免改变
1805+
restore -> prewarm -> submit 的执行顺序。
17971806
- 当前 HR-C 结论:portable contract closure 已完成,新增迁移范围限于
17981807
runtime-ports 可承载的 DTO/trait/fact;concrete remote/runtime 执行路径仍按上方 HR3
17991808
风险门禁作为后续可选深迁移主题处理。

scripts/check-core-boundaries.mjs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3008,6 +3008,22 @@ const requiredContentRules = [
30083008
regex: /\bfn load_remote_model_catalog\b/,
30093009
message: 'missing remote model catalog owner adapter',
30103010
},
3011+
{
3012+
regex: /\bRemoteModelCatalogFacts\b/,
3013+
message: 'missing remote model catalog fact projection',
3014+
},
3015+
{
3016+
regex: /\bRemoteModelCapabilityFact\b/,
3017+
message: 'missing remote model capability fact projection',
3018+
},
3019+
{
3020+
regex: /\bRemoteReasoningModeFact\b/,
3021+
message: 'missing remote reasoning mode fact projection',
3022+
},
3023+
{
3024+
regex: /\bbuild_remote_model_catalog\b/,
3025+
message: 'missing remote model catalog assembly delegation',
3026+
},
30113027
{
30123028
regex: /\bfn update_remote_session_model\b/,
30133029
message: 'missing remote session model update owner adapter',
@@ -3032,6 +3048,14 @@ const requiredContentRules = [
30323048
regex: /\bfn remote_chat_messages_from_turns\b/,
30333049
message: 'missing remote chat history conversion owner adapter',
30343050
},
3051+
{
3052+
regex: /\bRemoteDialogSchedulerOutcomeFact\b/,
3053+
message: 'missing remote dialog scheduler outcome fact projection',
3054+
},
3055+
{
3056+
regex: /\bremote_dialog_submit_outcome_from_scheduler\b/,
3057+
message: 'missing remote dialog submit outcome assembly delegation',
3058+
},
30353059
{
30363060
regex: /\bRemoteChatHistoryTurn\b/,
30373061
message: 'missing remote chat history owner DTO projection',
@@ -3363,6 +3387,26 @@ const requiredContentRules = [
33633387
regex: /\bpub struct RemoteModelCatalog\b/,
33643388
message: 'missing remote model catalog DTO',
33653389
},
3390+
{
3391+
regex: /\bpub enum RemoteModelCapabilityFact\b/,
3392+
message: 'missing remote model capability owner fact',
3393+
},
3394+
{
3395+
regex: /\bpub enum RemoteReasoningModeFact\b/,
3396+
message: 'missing remote reasoning mode owner fact',
3397+
},
3398+
{
3399+
regex: /\bpub struct RemoteModelFacts\b/,
3400+
message: 'missing remote model owner facts',
3401+
},
3402+
{
3403+
regex: /\bpub struct RemoteModelCatalogFacts\b/,
3404+
message: 'missing remote model catalog owner facts',
3405+
},
3406+
{
3407+
regex: /\bpub fn build_remote_model_catalog\b/,
3408+
message: 'missing remote model catalog assembly owner',
3409+
},
33663410
{
33673411
regex: /\bpub struct RemoteModelCatalogPollDelta\b/,
33683412
message: 'missing remote model catalog poll delta',
@@ -3383,6 +3427,14 @@ const requiredContentRules = [
33833427
regex: /\bpub enum RemoteCommand\b/,
33843428
message: 'missing remote command wire contract',
33853429
},
3430+
{
3431+
regex: /\bpub enum RemoteDialogSchedulerOutcomeFact\b/,
3432+
message: 'missing remote dialog scheduler outcome fact',
3433+
},
3434+
{
3435+
regex: /\bpub fn remote_dialog_submit_outcome_from_scheduler\b/,
3436+
message: 'missing remote dialog submit outcome assembly owner',
3437+
},
33863438
{
33873439
regex: /\bpub enum RemoteResponse\b/,
33883440
message: 'missing remote response wire contract',
@@ -3425,6 +3477,10 @@ const requiredContentRules = [
34253477
regex: /\bremote_connect_model_catalog_delta_preserves_poll_invalidation_policy\b/,
34263478
message: 'missing remote model catalog delta contract test',
34273479
},
3480+
{
3481+
regex: /\bremote_connect_model_catalog_builder_preserves_config_shape\b/,
3482+
message: 'missing remote model catalog builder contract test',
3483+
},
34283484
{
34293485
regex: /\bremote_connect_model_selection_policy_owns_alias_and_config_reference_rules\b/,
34303486
message: 'missing remote model selection policy contract test',
@@ -3457,6 +3513,10 @@ const requiredContentRules = [
34573513
regex: /\bremote_connect_dialog_runtime_preserves_explicit_turn_without_restore\b/,
34583514
message: 'missing dialog explicit-turn test',
34593515
},
3516+
{
3517+
regex: /\bremote_connect_dialog_submit_outcome_builder_preserves_scheduler_shape\b/,
3518+
message: 'missing remote dialog outcome builder contract test',
3519+
},
34603520
{
34613521
regex: /\bremote_connect_dialog_runtime_keeps_legacy_restore_failure_tolerance\b/,
34623522
message: 'missing restore failure tolerance test',
@@ -6953,12 +7013,18 @@ function runManifestParserSelfTest() {
69537013
'remote_cancel_host',
69547014
'remote_image_context',
69557015
'load_remote_model_catalog',
7016+
'RemoteModelCatalogFacts',
7017+
'RemoteModelCapabilityFact',
7018+
'RemoteReasoningModeFact',
7019+
'build_remote_model_catalog',
69567020
'update_remote_session_model',
69577021
'normalize_remote_session_model_id',
69587022
'normalize_remote_session_model_id_contract',
69597023
'normalize_remote_model_selection',
69607024
'normalize_remote_model_selection_contract',
69617025
'remote_chat_messages_from_turns',
7026+
'RemoteDialogSchedulerOutcomeFact',
7027+
'remote_dialog_submit_outcome_from_scheduler',
69627028
'RemoteChatHistoryTurn',
69637029
'build_remote_chat_messages',
69647030
'strip_remote_user_input_tags',
@@ -7024,10 +7090,17 @@ function runManifestParserSelfTest() {
70247090
'RemoteDefaultModelsConfig',
70257091
'RemoteModelConfig',
70267092
'RemoteModelCatalog',
7093+
'RemoteModelCapabilityFact',
7094+
'RemoteReasoningModeFact',
7095+
'RemoteModelFacts',
7096+
'RemoteModelCatalogFacts',
7097+
'build_remote_model_catalog',
70277098
'RemoteModelCatalogPollDelta',
70287099
'normalize_remote_session_model_id',
70297100
'normalize_remote_model_selection',
70307101
'remote_model_selection_needs_config',
7102+
'RemoteDialogSchedulerOutcomeFact',
7103+
'remote_dialog_submit_outcome_from_scheduler',
70317104
'RemoteCommand',
70327105
'RemoteResponse',
70337106
'should_send_remote_model_catalog',
@@ -7043,11 +7116,13 @@ function runManifestParserSelfTest() {
70437116
'remote_connect_command_wire_shape_lives_in_owner_contract',
70447117
'remote_connect_response_wire_shape_lives_in_owner_contract',
70457118
'remote_connect_model_catalog_delta_preserves_poll_invalidation_policy',
7119+
'remote_connect_model_catalog_builder_preserves_config_shape',
70467120
'remote_connect_model_selection_policy_owns_alias_and_config_reference_rules',
70477121
'remote_connect_poll_helpers_preserve_delta_and_completion_policy',
70487122
'remote_connect_image_context_policy_preserves_legacy_fallback_shape',
70497123
'remote_connect_image_context_policy_prefers_explicit_contexts',
70507124
'remote_connect_cancel_and_restore_policy_preserve_runtime_decisions',
7125+
'remote_connect_dialog_submit_outcome_builder_preserves_scheduler_shape',
70517126
'remote_chat_history_assembly_preserves_message_shape_and_item_order',
70527127
'remote_chat_history_assembly_skips_in_progress_assistant_history',
70537128
'remote_connect_file_transfer_policy_preserves_limits_and_chunk_ranges',

0 commit comments

Comments
 (0)