cccc-pair 0.4.34__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cccc/__init__.py +16 -0
- cccc/_native/__init__.py +1 -0
- cccc/_native/cccc-rust.exe +0 -0
- cccc/cli/__init__.py +43 -0
- cccc/cli/__main__.py +7 -0
- cccc/cli/actor_cmds.py +478 -0
- cccc/cli/common.py +671 -0
- cccc/cli/daemon_lifecycle.py +172 -0
- cccc/cli/group_cmds.py +354 -0
- cccc/cli/im_cmds.py +841 -0
- cccc/cli/installation_diagnostics.py +117 -0
- cccc/cli/main.py +612 -0
- cccc/cli/messaging_cmds.py +490 -0
- cccc/cli/runtime_hook_cmd.py +61 -0
- cccc/cli/space_cmds.py +488 -0
- cccc/cli/system_cmds.py +645 -0
- cccc/contracts/__init__.py +2 -0
- cccc/contracts/v1/__init__.py +148 -0
- cccc/contracts/v1/actor.py +85 -0
- cccc/contracts/v1/actor_profile.py +56 -0
- cccc/contracts/v1/assistant.py +117 -0
- cccc/contracts/v1/async_result.py +40 -0
- cccc/contracts/v1/automation.py +111 -0
- cccc/contracts/v1/event.py +334 -0
- cccc/contracts/v1/group_bridge.py +105 -0
- cccc/contracts/v1/group_space.py +109 -0
- cccc/contracts/v1/ipc.py +31 -0
- cccc/contracts/v1/message.py +140 -0
- cccc/contracts/v1/notify.py +76 -0
- cccc/contracts/v1/presentation.py +60 -0
- cccc/daemon/__init__.py +2 -0
- cccc/daemon/actor_runtime_cache.py +38 -0
- cccc/daemon/actors/__init__.py +3 -0
- cccc/daemon/actors/actor_add_ops.py +402 -0
- cccc/daemon/actors/actor_exit_ops.py +75 -0
- cccc/daemon/actors/actor_lifecycle_ops.py +741 -0
- cccc/daemon/actors/actor_membership_ops.py +192 -0
- cccc/daemon/actors/actor_ops.py +336 -0
- cccc/daemon/actors/actor_profile_ops.py +507 -0
- cccc/daemon/actors/actor_profile_runtime.py +319 -0
- cccc/daemon/actors/actor_profile_store.py +735 -0
- cccc/daemon/actors/actor_runtime_ops.py +546 -0
- cccc/daemon/actors/actor_update_ops.py +408 -0
- cccc/daemon/actors/private_env_ops.py +271 -0
- cccc/daemon/actors/runner_ops.py +176 -0
- cccc/daemon/actors/web_model_actor_policy.py +88 -0
- cccc/daemon/actors/web_model_browser_delivery.py +1556 -0
- cccc/daemon/actors/web_model_browser_launch_policy.py +21 -0
- cccc/daemon/actors/web_model_browser_ops.py +89 -0
- cccc/daemon/actors/web_model_browser_recovery_watcher.py +420 -0
- cccc/daemon/actors/web_model_browser_session.py +572 -0
- cccc/daemon/actors/web_model_runtime_ops.py +775 -0
- cccc/daemon/assistants/__init__.py +1 -0
- cccc/daemon/assistants/assistant_ops.py +6902 -0
- cccc/daemon/assistants/assistant_state_views.py +50 -0
- cccc/daemon/assistants/local_asr_model_selection.py +121 -0
- cccc/daemon/assistants/local_streaming_asr.py +127 -0
- cccc/daemon/assistants/sense_voice_text.py +12 -0
- cccc/daemon/assistants/sherpa_diarization.py +345 -0
- cccc/daemon/assistants/sherpa_diarization_worker.py +178 -0
- cccc/daemon/assistants/sherpa_offline_asr.py +285 -0
- cccc/daemon/assistants/sherpa_offline_worker.py +108 -0
- cccc/daemon/assistants/sherpa_streaming_asr.py +280 -0
- cccc/daemon/assistants/sherpa_streaming_worker.py +134 -0
- cccc/daemon/assistants/sherpa_vad_segments.py +205 -0
- cccc/daemon/assistants/sherpa_vad_worker.py +105 -0
- cccc/daemon/assistants/voice_direct_dictation.py +21 -0
- cccc/daemon/assistants/voice_final_asr.py +377 -0
- cccc/daemon/assistants/voice_final_asr_debug.py +52 -0
- cccc/daemon/assistants/voice_final_document_apply.py +240 -0
- cccc/daemon/assistants/voice_idle_review_scheduler.py +62 -0
- cccc/daemon/assistants/voice_models.py +1255 -0
- cccc/daemon/assistants/voice_pcm_segments.py +182 -0
- cccc/daemon/assistants/voice_prompt_refine.py +85 -0
- cccc/daemon/assistants/voice_runtime_deps.py +654 -0
- cccc/daemon/assistants/voice_secretary_output_completion.py +198 -0
- cccc/daemon/assistants/voice_secretary_runtime_ops.py +288 -0
- cccc/daemon/assistants/voice_secretary_service.py +477 -0
- cccc/daemon/assistants/voice_service_runtime.py +319 -0
- cccc/daemon/assistants/voice_speaker_identity.py +952 -0
- cccc/daemon/assistants/voice_speaker_transcript_windows.py +155 -0
- cccc/daemon/assistants/voice_speaker_transcripts.py +77 -0
- cccc/daemon/assistive_jobs.py +604 -0
- cccc/daemon/automation/__init__.py +4 -0
- cccc/daemon/automation/automation_ops.py +712 -0
- cccc/daemon/automation/engine.py +2274 -0
- cccc/daemon/browser/__init__.py +2 -0
- cccc/daemon/browser/projected_browser_runtime.py +2177 -0
- cccc/daemon/claude_app_sessions.py +1955 -0
- cccc/daemon/client_ops.py +303 -0
- cccc/daemon/codex_app_sessions.py +2333 -0
- cccc/daemon/codex_app_thread_ops.py +155 -0
- cccc/daemon/codex_config_ops.py +63 -0
- cccc/daemon/context/__init__.py +3 -0
- cccc/daemon/context/context_ops.py +1429 -0
- cccc/daemon/group/__init__.py +3 -0
- cccc/daemon/group/bootstrap_actor_ops.py +310 -0
- cccc/daemon/group/group_bootstrap_ops.py +90 -0
- cccc/daemon/group/group_creation_ops.py +191 -0
- cccc/daemon/group/group_lifecycle_ops.py +447 -0
- cccc/daemon/group/group_ops.py +824 -0
- cccc/daemon/group/group_settings_ops.py +245 -0
- cccc/daemon/group/group_state_ops.py +89 -0
- cccc/daemon/group/presentation_browser_ops.py +115 -0
- cccc/daemon/group/presentation_browser_runtime.py +126 -0
- cccc/daemon/group/presentation_ops.py +706 -0
- cccc/daemon/group_bridge/__init__.py +6 -0
- cccc/daemon/group_bridge/cross_group_receipt_projection.py +126 -0
- cccc/daemon/group_bridge/identity.py +117 -0
- cccc/daemon/group_bridge/ops.py +380 -0
- cccc/daemon/group_bridge/peer_address_sync.py +32 -0
- cccc/daemon/group_bridge/receiver.py +308 -0
- cccc/daemon/group_bridge/remote_attachments.py +121 -0
- cccc/daemon/group_bridge/remote_dispatch.py +357 -0
- cccc/daemon/group_bridge/remote_outbox_worker.py +166 -0
- cccc/daemon/group_bridge/remote_payloads.py +49 -0
- cccc/daemon/group_bridge/reply_relay.py +199 -0
- cccc/daemon/group_bridge/route_lookup.py +76 -0
- cccc/daemon/group_bridge/transports/__init__.py +34 -0
- cccc/daemon/group_bridge/transports/base.py +105 -0
- cccc/daemon/group_bridge/transports/group_bridge_session.py +166 -0
- cccc/daemon/group_bridge/ws_auth.py +51 -0
- cccc/daemon/group_bridge/ws_client.py +258 -0
- cccc/daemon/group_bridge/ws_endpoint.py +195 -0
- cccc/daemon/group_bridge/ws_manager.py +92 -0
- cccc/daemon/group_bridge/ws_peer.py +75 -0
- cccc/daemon/group_bridge/ws_session.py +163 -0
- cccc/daemon/im/__init__.py +3 -0
- cccc/daemon/im/bootstrap_im_ops.py +79 -0
- cccc/daemon/im/im_bridge_ops.py +261 -0
- cccc/daemon/im/im_ops.py +127 -0
- cccc/daemon/mcp_install.py +951 -0
- cccc/daemon/memory/__init__.py +3 -0
- cccc/daemon/memory/memory_ops.py +1117 -0
- cccc/daemon/memory/memory_sdk_ops.py +327 -0
- cccc/daemon/messaging/__init__.py +3 -0
- cccc/daemon/messaging/actor_delivery_planner.py +161 -0
- cccc/daemon/messaging/actor_turn_rendering.py +371 -0
- cccc/daemon/messaging/chat_delivery_ops.py +311 -0
- cccc/daemon/messaging/chat_diagnostics.py +106 -0
- cccc/daemon/messaging/chat_ops.py +1322 -0
- cccc/daemon/messaging/chat_side_effects.py +15 -0
- cccc/daemon/messaging/chat_support_ops.py +313 -0
- cccc/daemon/messaging/delegation_contract.py +214 -0
- cccc/daemon/messaging/delegation_relay_ops.py +163 -0
- cccc/daemon/messaging/delegation_targets.py +44 -0
- cccc/daemon/messaging/delivery.py +1740 -0
- cccc/daemon/messaging/inbound_rendering.py +73 -0
- cccc/daemon/messaging/inbox_ack_ops.py +143 -0
- cccc/daemon/messaging/inbox_read_ops.py +137 -0
- cccc/daemon/messaging/install_slash_command.py +80 -0
- cccc/daemon/messaging/local_group_route.py +28 -0
- cccc/daemon/messaging/message_request_lanes.py +223 -0
- cccc/daemon/messaging/post_commit.py +55 -0
- cccc/daemon/messaging/post_commit_lanes.py +84 -0
- cccc/daemon/messaging/slash_skill_dispatch_ops.py +211 -0
- cccc/daemon/messaging/streaming.py +372 -0
- cccc/daemon/messaging/system_notify_ops.py +138 -0
- cccc/daemon/ops/__init__.py +12 -0
- cccc/daemon/ops/capability_ops/__init__.py +310 -0
- cccc/daemon/ops/capability_ops/_common.py +198 -0
- cccc/daemon/ops/capability_ops/_documents.py +517 -0
- cccc/daemon/ops/capability_ops/_github_skills.py +161 -0
- cccc/daemon/ops/capability_ops/_handlers.py +2387 -0
- cccc/daemon/ops/capability_ops/_import_sources.py +200 -0
- cccc/daemon/ops/capability_ops/_install.py +1453 -0
- cccc/daemon/ops/capability_ops/_install_visibility.py +38 -0
- cccc/daemon/ops/capability_ops/_policy.py +550 -0
- cccc/daemon/ops/capability_ops/_remote.py +1191 -0
- cccc/daemon/ops/capability_ops/_removed.py +47 -0
- cccc/daemon/ops/capability_ops/_runtime.py +310 -0
- cccc/daemon/ops/capability_ops/_search.py +2152 -0
- cccc/daemon/ops/capability_ops/_skillsmp.py +78 -0
- cccc/daemon/ops/capability_ops/_source_instances.py +101 -0
- cccc/daemon/ops/capability_ops/_state.py +1749 -0
- cccc/daemon/ops/capability_ops/_state_views.py +44 -0
- cccc/daemon/ops/daemon_core_ops.py +93 -0
- cccc/daemon/ops/diagnostics_ops.py +800 -0
- cccc/daemon/ops/execution_queues.py +210 -0
- cccc/daemon/ops/group_copy_files.py +174 -0
- cccc/daemon/ops/group_copy_ops.py +1023 -0
- cccc/daemon/ops/hermes_runtime_ops.py +52 -0
- cccc/daemon/ops/maintenance_ops.py +434 -0
- cccc/daemon/ops/registry_ops.py +130 -0
- cccc/daemon/ops/remote_access_ops.py +668 -0
- cccc/daemon/ops/socket_accept_ops.py +116 -0
- cccc/daemon/ops/socket_special_ops.py +386 -0
- cccc/daemon/ops/terminal_attach_ops.py +174 -0
- cccc/daemon/pty_activity_probe.py +44 -0
- cccc/daemon/pty_app_server_exit.py +17 -0
- cccc/daemon/request_dispatch_ops.py +447 -0
- cccc/daemon/request_queue_policy.py +50 -0
- cccc/daemon/runner_state_ops.py +178 -0
- cccc/daemon/runtime_hooks/__init__.py +1 -0
- cccc/daemon/runtime_hooks/claude.py +166 -0
- cccc/daemon/runtime_hooks/codex.py +211 -0
- cccc/daemon/runtime_hooks/input_observer.py +131 -0
- cccc/daemon/runtime_hooks/launch.py +363 -0
- cccc/daemon/runtime_hooks/provider_command.py +38 -0
- cccc/daemon/runtime_hooks/pty_launch.py +130 -0
- cccc/daemon/runtime_log_diagnostics.py +27 -0
- cccc/daemon/runtime_session_ops.py +1291 -0
- cccc/daemon/serve_ops.py +588 -0
- cccc/daemon/server.py +1355 -0
- cccc/daemon/socket_protocol_ops.py +97 -0
- cccc/daemon/space/__init__.py +3 -0
- cccc/daemon/space/group_space_memory_sync.py +678 -0
- cccc/daemon/space/group_space_ops.py +2683 -0
- cccc/daemon/space/group_space_paths.py +82 -0
- cccc/daemon/space/group_space_projection.py +171 -0
- cccc/daemon/space/group_space_provider.py +909 -0
- cccc/daemon/space/group_space_runtime.py +317 -0
- cccc/daemon/space/group_space_store.py +1509 -0
- cccc/daemon/space/group_space_sync.py +2292 -0
- cccc/daemon/space/notebooklm_auth_browser_runtime.py +96 -0
- cccc/daemon/space/notebooklm_auth_flow.py +1122 -0
- cccc/daemon/voice_secretary_control_turns.py +596 -0
- cccc/daemon_launcher.py +16 -0
- cccc/daemon_main.py +137 -0
- cccc/implementation.py +218 -0
- cccc/kernel/__init__.py +2 -0
- cccc/kernel/access_tokens.py +274 -0
- cccc/kernel/active.py +45 -0
- cccc/kernel/actor_avatar_assets.py +90 -0
- cccc/kernel/actor_runtime_projection.py +26 -0
- cccc/kernel/actors.py +588 -0
- cccc/kernel/agent_state_hygiene.py +227 -0
- cccc/kernel/blobs.py +111 -0
- cccc/kernel/capabilities.py +1204 -0
- cccc/kernel/chat_idempotency.py +48 -0
- cccc/kernel/context.py +804 -0
- cccc/kernel/delivery_policy.py +17 -0
- cccc/kernel/events.py +54 -0
- cccc/kernel/git.py +66 -0
- cccc/kernel/group.py +985 -0
- cccc/kernel/group_bridge/__init__.py +6 -0
- cccc/kernel/group_bridge/auth.py +71 -0
- cccc/kernel/group_bridge/credentials.py +180 -0
- cccc/kernel/group_bridge/pairing.py +972 -0
- cccc/kernel/group_bridge/pairing_outbound_sync.py +138 -0
- cccc/kernel/group_bridge/pairing_remote.py +429 -0
- cccc/kernel/group_bridge/pairing_remote_transport.py +76 -0
- cccc/kernel/group_bridge/peer_addresses.py +69 -0
- cccc/kernel/group_bridge/receipts.py +137 -0
- cccc/kernel/group_bridge/registration.py +231 -0
- cccc/kernel/group_bridge/state_lock.py +63 -0
- cccc/kernel/group_space.py +74 -0
- cccc/kernel/headless_events.py +118 -0
- cccc/kernel/help_markdown.py +298 -0
- cccc/kernel/hermes_runtime.py +567 -0
- cccc/kernel/im_state.py +112 -0
- cccc/kernel/inbox.py +1574 -0
- cccc/kernel/install_capability.py +67 -0
- cccc/kernel/internal_assistant_runtime.py +42 -0
- cccc/kernel/ledger.py +236 -0
- cccc/kernel/ledger_index.py +1026 -0
- cccc/kernel/ledger_retention.py +186 -0
- cccc/kernel/ledger_segments.py +377 -0
- cccc/kernel/ledger_state_snapshot.py +86 -0
- cccc/kernel/ledger_status_cache.py +433 -0
- cccc/kernel/memory.py +35 -0
- cccc/kernel/memory_export.py +31 -0
- cccc/kernel/memory_guide.py +58 -0
- cccc/kernel/memory_reme/__init__.py +38 -0
- cccc/kernel/memory_reme/adapter.py +274 -0
- cccc/kernel/memory_reme/layout.py +111 -0
- cccc/kernel/memory_reme/runtime.py +312 -0
- cccc/kernel/memory_reme/writer.py +192 -0
- cccc/kernel/message_sender_snapshot.py +66 -0
- cccc/kernel/messaging.py +129 -0
- cccc/kernel/nomcp_sessions.py +885 -0
- cccc/kernel/peer_insight.py +204 -0
- cccc/kernel/permissions.py +135 -0
- cccc/kernel/prompt_files.py +126 -0
- cccc/kernel/pty_terminal_state.py +125 -0
- cccc/kernel/query_projections.py +151 -0
- cccc/kernel/recipient_syntax.py +46 -0
- cccc/kernel/registry.py +125 -0
- cccc/kernel/runtime.py +412 -0
- cccc/kernel/runtime_hooks/__init__.py +5 -0
- cccc/kernel/runtime_hooks/activity.py +265 -0
- cccc/kernel/runtime_hooks/activity_projection.py +142 -0
- cccc/kernel/runtime_hooks/committed_io.py +57 -0
- cccc/kernel/runtime_hooks/contracts.py +170 -0
- cccc/kernel/runtime_hooks/projection.py +241 -0
- cccc/kernel/runtime_hooks/state_machine.py +270 -0
- cccc/kernel/runtime_hooks/store.py +242 -0
- cccc/kernel/runtime_state_source.py +97 -0
- cccc/kernel/scope.py +39 -0
- cccc/kernel/settings.py +686 -0
- cccc/kernel/system_prompt.py +179 -0
- cccc/kernel/task_types.py +40 -0
- cccc/kernel/terminal_transcript.py +83 -0
- cccc/kernel/terminal_transcript_filter.py +18 -0
- cccc/kernel/voice_secretary_actor.py +142 -0
- cccc/kernel/voice_secretary_prompt.py +60 -0
- cccc/kernel/web_model_connectors.py +526 -0
- cccc/kernel/working_state.py +146 -0
- cccc/launcher.py +240 -0
- cccc/paths.py +18 -0
- cccc/ports/__init__.py +2 -0
- cccc/ports/im/__init__.py +20 -0
- cccc/ports/im/__main__.py +44 -0
- cccc/ports/im/adapters/__init__.py +28 -0
- cccc/ports/im/adapters/base.py +305 -0
- cccc/ports/im/adapters/dingtalk.py +1101 -0
- cccc/ports/im/adapters/dingtalk_api.py +153 -0
- cccc/ports/im/adapters/dingtalk_card.py +291 -0
- cccc/ports/im/adapters/dingtalk_media.py +267 -0
- cccc/ports/im/adapters/dingtalk_messages.py +147 -0
- cccc/ports/im/adapters/dingtalk_reactions.py +89 -0
- cccc/ports/im/adapters/dingtalk_sender.py +196 -0
- cccc/ports/im/adapters/dingtalk_session.py +173 -0
- cccc/ports/im/adapters/discord.py +509 -0
- cccc/ports/im/adapters/feishu/__init__.py +12 -0
- cccc/ports/im/adapters/feishu/adapter.py +575 -0
- cccc/ports/im/adapters/feishu/attachments.py +29 -0
- cccc/ports/im/adapters/feishu/chats.py +29 -0
- cccc/ports/im/adapters/feishu/client.py +193 -0
- cccc/ports/im/adapters/feishu/domain.py +19 -0
- cccc/ports/im/adapters/feishu/events.py +66 -0
- cccc/ports/im/adapters/feishu/files.py +23 -0
- cccc/ports/im/adapters/feishu/identity.py +37 -0
- cccc/ports/im/adapters/feishu/mapper.py +142 -0
- cccc/ports/im/adapters/feishu/mentions.py +60 -0
- cccc/ports/im/adapters/feishu/outbound.py +56 -0
- cccc/ports/im/adapters/feishu/queue.py +26 -0
- cccc/ports/im/adapters/feishu/rate_limiter.py +40 -0
- cccc/ports/im/adapters/feishu/reactions.py +35 -0
- cccc/ports/im/adapters/feishu/text.py +21 -0
- cccc/ports/im/adapters/feishu/webhook.py +30 -0
- cccc/ports/im/adapters/feishu/ws.py +110 -0
- cccc/ports/im/adapters/outbound_text.py +136 -0
- cccc/ports/im/adapters/slack.py +474 -0
- cccc/ports/im/adapters/telegram.py +685 -0
- cccc/ports/im/adapters/wecom.py +1453 -0
- cccc/ports/im/adapters/weixin.py +448 -0
- cccc/ports/im/auth.py +306 -0
- cccc/ports/im/bridge.py +1957 -0
- cccc/ports/im/commands.py +423 -0
- cccc/ports/im/config_schema.py +170 -0
- cccc/ports/im/inbound_content.py +219 -0
- cccc/ports/im/lifecycle.py +163 -0
- cccc/ports/im/subscribers.py +290 -0
- cccc/ports/mcp/__init__.py +2 -0
- cccc/ports/mcp/common.py +565 -0
- cccc/ports/mcp/group_bridge.py +691 -0
- cccc/ports/mcp/handlers/__init__.py +2 -0
- cccc/ports/mcp/handlers/cccc_automation.py +144 -0
- cccc/ports/mcp/handlers/cccc_capability.py +628 -0
- cccc/ports/mcp/handlers/cccc_core.py +982 -0
- cccc/ports/mcp/handlers/cccc_group_actor.py +366 -0
- cccc/ports/mcp/handlers/cccc_im.py +18 -0
- cccc/ports/mcp/handlers/cccc_messaging.py +568 -0
- cccc/ports/mcp/handlers/cccc_repo.py +1216 -0
- cccc/ports/mcp/handlers/cccc_space.py +377 -0
- cccc/ports/mcp/handlers/code_mode.py +635 -0
- cccc/ports/mcp/handlers/context.py +710 -0
- cccc/ports/mcp/handlers/debug.py +103 -0
- cccc/ports/mcp/handlers/group_bridge_client.py +336 -0
- cccc/ports/mcp/handlers/headless.py +69 -0
- cccc/ports/mcp/handlers/memory.py +132 -0
- cccc/ports/mcp/handlers/notify.py +84 -0
- cccc/ports/mcp/handlers/presentation.py +64 -0
- cccc/ports/mcp/main.py +348 -0
- cccc/ports/mcp/server.py +1544 -0
- cccc/ports/mcp/task_types.py +11 -0
- cccc/ports/mcp/toolspecs.py +22 -0
- cccc/ports/mcp/utils/__init__.py +2 -0
- cccc/ports/mcp/utils/help_markdown.py +15 -0
- cccc/ports/mcp/utils/space_args.py +119 -0
- cccc/ports/web/__init__.py +2 -0
- cccc/ports/web/actor_avatar.py +28 -0
- cccc/ports/web/app.py +549 -0
- cccc/ports/web/bind_preflight.py +152 -0
- cccc/ports/web/branding.py +173 -0
- cccc/ports/web/dist/assets/ActorProfilesTab-DQvtFvjb.js +4 -0
- cccc/ports/web/dist/assets/AgentTab-DngAJlJQ.js +7 -0
- cccc/ports/web/dist/assets/AppModals-DBObXV-G.js +461 -0
- cccc/ports/web/dist/assets/AssistantsTab-Ba-8o725.js +2 -0
- cccc/ports/web/dist/assets/AutomationTab-xR2tdbPB.js +2 -0
- cccc/ports/web/dist/assets/BrandingTab-io6436sk.js +1 -0
- cccc/ports/web/dist/assets/CapabilitiesTab-BnmVa19x.js +2 -0
- cccc/ports/web/dist/assets/CapabilitiesTab-Bnu6pcJ6.js +1 -0
- cccc/ports/web/dist/assets/CapabilityCenterWorkspace-D2oL8Qo3.js +2 -0
- cccc/ports/web/dist/assets/ContextModal-CU9V6jmA.js +12 -0
- cccc/ports/web/dist/assets/CopyGroupsTab-BDCafTLB.js +1 -0
- cccc/ports/web/dist/assets/DeliveryTab-Devz0TzR.js +8 -0
- cccc/ports/web/dist/assets/DeveloperTab-CTG3ONXq.js +1 -0
- cccc/ports/web/dist/assets/GroupBridgeConnectionsSection-CKVhqq4Z.js +1 -0
- cccc/ports/web/dist/assets/GroupSpaceTab-BAWlhO7B.js +1 -0
- cccc/ports/web/dist/assets/GuidanceTab-BrTJnsyA.js +1 -0
- cccc/ports/web/dist/assets/HoverTooltip-DKwGea7S.js +1 -0
- cccc/ports/web/dist/assets/IMBridgeTab-Dpwyg_5P.js +1 -0
- cccc/ports/web/dist/assets/MarkdownRenderer-DyiJdjuM.js +2 -0
- cccc/ports/web/dist/assets/MessagingTab-By3pdxBo.js +1 -0
- cccc/ports/web/dist/assets/ModalFrame-CLW3tTch.js +1 -0
- cccc/ports/web/dist/assets/PresentationRail-piqz-cxJ.js +1 -0
- cccc/ports/web/dist/assets/PresentationViewerModal-BsXPtHIA.js +1 -0
- cccc/ports/web/dist/assets/ProjectedBrowserSurfacePanel-BTZh5Ak3.js +2 -0
- cccc/ports/web/dist/assets/SettingsModal-bBT4FDJe.js +5 -0
- cccc/ports/web/dist/assets/SetupChecklist-CQX-2XRv.js +1 -0
- cccc/ports/web/dist/assets/TranscriptTab-B7aClBaZ.js +1 -0
- cccc/ports/web/dist/assets/WebAccessTab-0oT0unj3.js +1 -0
- cccc/ports/web/dist/assets/WebModelConnectorsTab-ip0kP3uQ.js +1 -0
- cccc/ports/web/dist/assets/abnfDiagram-N423BO3Z-ovRSEl_k.js +1 -0
- cccc/ports/web/dist/assets/app-chrome-6lvXKxNW.js +1 -0
- cccc/ports/web/dist/assets/arc-BjSQqbzd.js +1 -0
- cccc/ports/web/dist/assets/architecture-TIHT7OUA-DtXO_UzA.js +1 -0
- cccc/ports/web/dist/assets/architectureDiagram-T3A2C74G-B-Gs6kkF.js +36 -0
- cccc/ports/web/dist/assets/array-BifhSqXX.js +1 -0
- cccc/ports/web/dist/assets/blockDiagram-VBNYF7ZC-Dm6fMUws.js +132 -0
- cccc/ports/web/dist/assets/button-BxhsGAD_.js +1 -0
- cccc/ports/web/dist/assets/button-variants-DhV76Q6H.js +1 -0
- cccc/ports/web/dist/assets/c4Diagram-5PPSVZJV-CZBfNRRr.js +10 -0
- cccc/ports/web/dist/assets/capabilityAutoload-BR_RvptK.js +2 -0
- cccc/ports/web/dist/assets/capabilityCenterRoute-BPL2wPpV.js +1 -0
- cccc/ports/web/dist/assets/capabilityManagementModel-DBTWCftP.js +1 -0
- cccc/ports/web/dist/assets/channel-B8UkxqdQ.js +1 -0
- cccc/ports/web/dist/assets/chat-core-33UBkWW7.js +80 -0
- cccc/ports/web/dist/assets/chunk-2GRJ4B5K-B-GIKU9Q.js +1 -0
- cccc/ports/web/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- cccc/ports/web/dist/assets/chunk-3NCLNEKW-BKmS1Qkn.js +1 -0
- cccc/ports/web/dist/assets/chunk-4I5QYGJK-BhmhhY8s.js +1 -0
- cccc/ports/web/dist/assets/chunk-5FCAYU7R-Dh_mDa6z.js +1 -0
- cccc/ports/web/dist/assets/chunk-5HE753X5-zPGfIu1R.js +1 -0
- cccc/ports/web/dist/assets/chunk-5JV3BV7I-BoO0HlT9.js +1 -0
- cccc/ports/web/dist/assets/chunk-5RXB4S5H-BDyDhBcP.js +231 -0
- cccc/ports/web/dist/assets/chunk-5TONJI2A-nyszRqSb.js +2 -0
- cccc/ports/web/dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- cccc/ports/web/dist/assets/chunk-6Q2QTUOP-B_SIcBou.js +88 -0
- cccc/ports/web/dist/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
- cccc/ports/web/dist/assets/chunk-7Z6QIM7H-ChQLHkzp.js +10 -0
- cccc/ports/web/dist/assets/chunk-BIQX33UG-DkWRPZMF.js +1 -0
- cccc/ports/web/dist/assets/chunk-CQNSW5MT-Bjw5MV47.js +1 -0
- cccc/ports/web/dist/assets/chunk-CYSBUYHQ-C9Ut2Srr.js +1 -0
- cccc/ports/web/dist/assets/chunk-EMLP6XTP-DwDm8B2J.js +1 -0
- cccc/ports/web/dist/assets/chunk-GF5L2VYU-EGYHut8Z.js +206 -0
- cccc/ports/web/dist/assets/chunk-I66GZJ75-DwpT4b-3.js +127 -0
- cccc/ports/web/dist/assets/chunk-J7OUQ5F2-Qezf35JH.js +2 -0
- cccc/ports/web/dist/assets/chunk-JG7HCLWE-Dn3i7DI-.js +2 -0
- cccc/ports/web/dist/assets/chunk-JQJVKLGR-DaWop5hO.js +156 -0
- cccc/ports/web/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- cccc/ports/web/dist/assets/chunk-KBJHAD2P-m21WkH6G.js +1 -0
- cccc/ports/web/dist/assets/chunk-KEIR6QF5-BfrZ3jm6.js +161 -0
- cccc/ports/web/dist/assets/chunk-MOZMSUNE-CVBq1RNG.js +1 -0
- cccc/ports/web/dist/assets/chunk-NSK5VX7P-CN6oWWa7.js +2 -0
- cccc/ports/web/dist/assets/chunk-OSBZ3O6U-Bf3gOl9M.js +1 -0
- cccc/ports/web/dist/assets/chunk-QBLGF6JB-BKUDNNEu.js +1 -0
- cccc/ports/web/dist/assets/chunk-QR6OTTB3-B2UngO3S.js +62 -0
- cccc/ports/web/dist/assets/chunk-R7FJI6CG-CxpPJvAz.js +1 -0
- cccc/ports/web/dist/assets/chunk-RYQCIY6F-CZ4ia6G4.js +1 -0
- cccc/ports/web/dist/assets/chunk-U6XO7XAA-CGdP5BIs.js +2 -0
- cccc/ports/web/dist/assets/chunk-UBXNYLIW-CBiIXgg8.js +1 -0
- cccc/ports/web/dist/assets/chunk-W5SLKNZC-C0LrkHON.js +1 -0
- cccc/ports/web/dist/assets/chunk-WRU74C26-CJhKVSCy.js +70 -0
- cccc/ports/web/dist/assets/chunk-XXDRQBXY-BuE3VzE_.js +1 -0
- cccc/ports/web/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- cccc/ports/web/dist/assets/chunk-YOTPTUD7-BGu72LlA.js +1 -0
- cccc/ports/web/dist/assets/chunk-ZIRB5QZD-C6fEPe3t.js +32 -0
- cccc/ports/web/dist/assets/classDiagram-JCYQIIEL-ZX71vPVh.js +1 -0
- cccc/ports/web/dist/assets/classDiagram-v2-OCEON4UE-ZX71vPVh.js +1 -0
- cccc/ports/web/dist/assets/cose-bilkent-JH36ORCC-CU59zlcZ.js +1 -0
- cccc/ports/web/dist/assets/cynefin-VYW2F7L2-CeOrb5B6.js +1 -0
- cccc/ports/web/dist/assets/cynefinDiagram-MW4NZA55-CHDRTg1V.js +62 -0
- cccc/ports/web/dist/assets/cytoscape.esm-B3I8pqwA.js +321 -0
- cccc/ports/web/dist/assets/dagre-CXRCoUWR.js +1 -0
- cccc/ports/web/dist/assets/dagre-VZM6K2ZE-B8gy7yJL.js +4 -0
- cccc/ports/web/dist/assets/defaultLocale-C8Fc0cco.js +1 -0
- cccc/ports/web/dist/assets/diagnostics-Ct4yPJfS.js +1 -0
- cccc/ports/web/dist/assets/diagram-7IWD3JNH-DKM2eoSp.js +30 -0
- cccc/ports/web/dist/assets/diagram-B4RE2ZJO-knaPckg7.js +3 -0
- cccc/ports/web/dist/assets/diagram-LBJQPF4R-C27fkN12.js +24 -0
- cccc/ports/web/dist/assets/diagram-Q27KOJAE-B8HcXuB1.js +24 -0
- cccc/ports/web/dist/assets/diagram-UB23O5K3-D3FLmAbW.js +41 -0
- cccc/ports/web/dist/assets/dist-D9sYb5Oa.js +1 -0
- cccc/ports/web/dist/assets/dnd-CC-hAtiu.js +5 -0
- cccc/ports/web/dist/assets/ebnfDiagram-BXEA7PRR-Gw_RD65m.js +1 -0
- cccc/ports/web/dist/assets/erDiagram-JOGREHBK-DJv2DSkK.js +85 -0
- cccc/ports/web/dist/assets/eventmodeling-45OFAUF4-Cb9JFwTS.js +1 -0
- cccc/ports/web/dist/assets/flowDiagram-UKHOOZJN-Zekxh4MI.js +1 -0
- cccc/ports/web/dist/assets/ganttDiagram-PKOTCBZU-DQkZaGWw.js +292 -0
- cccc/ports/web/dist/assets/gitGraph-TEB2WS4Q-B4lsv2BE.js +1 -0
- cccc/ports/web/dist/assets/gitGraphDiagram-DS77QQ5N-jRhXRdRx.js +106 -0
- cccc/ports/web/dist/assets/graphlib-B8gBHxth.js +1 -0
- cccc/ports/web/dist/assets/helpMarkdown-ehGjPvgU.js +15 -0
- cccc/ports/web/dist/assets/i18n-CTgBbY9e.js +1 -0
- cccc/ports/web/dist/assets/imBridgeConfig-eyN4pycq.js +1 -0
- cccc/ports/web/dist/assets/index-CK0ZiSqW.css +2 -0
- cccc/ports/web/dist/assets/index-EliRm0dW.js +2 -0
- cccc/ports/web/dist/assets/info-DKCQHKI2-tMxezh8p.js +1 -0
- cccc/ports/web/dist/assets/infoDiagram-6WML65LV-C383Xkvz.js +2 -0
- cccc/ports/web/dist/assets/init-D6jRqBbL.js +1 -0
- cccc/ports/web/dist/assets/ishikawaDiagram-WSZJBQD7-DTdVEjEF.js +70 -0
- cccc/ports/web/dist/assets/journeyDiagram-NVQOT4AX-BqTUrJxw.js +139 -0
- cccc/ports/web/dist/assets/kanban-definition-27J2QSJJ-DDoG5jcc.js +89 -0
- cccc/ports/web/dist/assets/katex-CddkPoXu.js +257 -0
- cccc/ports/web/dist/assets/line-rBFuhW2C.js +1 -0
- cccc/ports/web/dist/assets/linear-B7l8qgEw.js +1 -0
- cccc/ports/web/dist/assets/map-DsCK-0Cs.js +1 -0
- cccc/ports/web/dist/assets/markdown-DrXoryfG.js +14 -0
- cccc/ports/web/dist/assets/mermaid-parser.core-DhXghlfV.js +4 -0
- cccc/ports/web/dist/assets/mermaid.core-rx66Ji3_.js +11 -0
- cccc/ports/web/dist/assets/mindmap-definition-FAOFIHXS-D8UHnUbv.js +96 -0
- cccc/ports/web/dist/assets/ordinal-hYBb2elL.js +1 -0
- cccc/ports/web/dist/assets/packet-7NZHBO7P-B_kwytRC.js +1 -0
- cccc/ports/web/dist/assets/path-BWPyau1x.js +1 -0
- cccc/ports/web/dist/assets/pegDiagram-VL7TDLO6-j0-nm32K.js +1 -0
- cccc/ports/web/dist/assets/pie-RZYD4A2V-j1buGlhT.js +1 -0
- cccc/ports/web/dist/assets/pieDiagram-7S7Q4E2Y-Ckz82nfV.js +39 -0
- cccc/ports/web/dist/assets/privateEnvInput-ph9Bj98y.js +4 -0
- cccc/ports/web/dist/assets/quadrantDiagram-CIZ2JOQS-CvOkHjIf.js +7 -0
- cccc/ports/web/dist/assets/radar-I7S5WNFK-Cn0ataFo.js +1 -0
- cccc/ports/web/dist/assets/railroad-3IZDKUUU-DFg6iiGT.js +1 -0
- cccc/ports/web/dist/assets/railroad-abnf-AHOZXSZD-CZvN6irW.js +1 -0
- cccc/ports/web/dist/assets/railroad-ebnf-EBAXGLYW-C97iLB9Y.js +1 -0
- cccc/ports/web/dist/assets/railroad-peg-LSFZ7HO6-C9sIJ2kQ.js +1 -0
- cccc/ports/web/dist/assets/railroadDiagram-AXF67PYL-0RArkcmq.js +1 -0
- cccc/ports/web/dist/assets/react-vendor-BzymHuLu.js +61 -0
- cccc/ports/web/dist/assets/requirementDiagram-LRYGKXZP-nT3_Z_C2.js +84 -0
- cccc/ports/web/dist/assets/rfb-DVNK4U0c.js +1 -0
- cccc/ports/web/dist/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- cccc/ports/web/dist/assets/rough.esm-CSKSodPl.js +1 -0
- cccc/ports/web/dist/assets/sankeyDiagram-W5VNT64P-bLAI1OvA.js +40 -0
- cccc/ports/web/dist/assets/sequenceDiagram-SI44F4Z6-DXoVQhop.js +162 -0
- cccc/ports/web/dist/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
- cccc/ports/web/dist/assets/src-_wZywoZs.js +1 -0
- cccc/ports/web/dist/assets/stateDiagram-OKZ733FA-Du4OlgOT.js +1 -0
- cccc/ports/web/dist/assets/stateDiagram-v2-UEYNNEHI-S8dP2B3j.js +1 -0
- cccc/ports/web/dist/assets/swimlanes-SLNWSIFB-bGPWBnRt.js +2 -0
- cccc/ports/web/dist/assets/swimlanesDiagram-ULZ7WXOC-tF5SQIeK.js +8 -0
- cccc/ports/web/dist/assets/system-BnECq6C1.js +1 -0
- cccc/ports/web/dist/assets/timeline-definition-Z64GVDOM-BxtYG0UC.js +120 -0
- cccc/ports/web/dist/assets/treeView-QDETBFTQ-DWaHinax.js +1 -0
- cccc/ports/web/dist/assets/treemap-6X3UGDF4-BfSjF-Kv.js +1 -0
- cccc/ports/web/dist/assets/types-CBYqP1BE.js +1 -0
- cccc/ports/web/dist/assets/useSSE-sN7bmWBr.js +73 -0
- cccc/ports/web/dist/assets/useTheme-CzTU1034.js +1 -0
- cccc/ports/web/dist/assets/vendor-CLOuHXQ2.js +12 -0
- cccc/ports/web/dist/assets/vennDiagram-T6HMQDX7-D0qj92MT.js +34 -0
- cccc/ports/web/dist/assets/wardley-OPB4EBWU-DjIsTrje.js +1 -0
- cccc/ports/web/dist/assets/wardleyDiagram-T6FBY63Y-C6pvDB7y.js +78 -0
- cccc/ports/web/dist/assets/webModelConnector-Cs5koZ16.js +1 -0
- cccc/ports/web/dist/assets/xterm-CHOd7Rch.css +1 -0
- cccc/ports/web/dist/assets/xterm-D0rjqrls.js +20 -0
- cccc/ports/web/dist/assets/xychartDiagram-ELKLHX3M-BvXgmLcx.js +7 -0
- cccc/ports/web/dist/favicon.ico +0 -0
- cccc/ports/web/dist/favicon.png +0 -0
- cccc/ports/web/dist/index.html +39 -0
- cccc/ports/web/dist/logo-512.png +0 -0
- cccc/ports/web/dist/logo-dark.svg +24 -0
- cccc/ports/web/dist/logo.png +0 -0
- cccc/ports/web/dist/logo.svg +24 -0
- cccc/ports/web/dist/logos/amp.png +0 -0
- cccc/ports/web/dist/logos/antigravity.svg +1 -0
- cccc/ports/web/dist/logos/auggie.png +0 -0
- cccc/ports/web/dist/logos/claude.png +0 -0
- cccc/ports/web/dist/logos/cline.svg +5 -0
- cccc/ports/web/dist/logos/codex.png +0 -0
- cccc/ports/web/dist/logos/copilot.svg +1 -0
- cccc/ports/web/dist/logos/cursor.svg +1 -0
- cccc/ports/web/dist/logos/devin.svg +5 -0
- cccc/ports/web/dist/logos/droid.png +0 -0
- cccc/ports/web/dist/logos/grok.svg +3 -0
- cccc/ports/web/dist/logos/hermes.svg +11 -0
- cccc/ports/web/dist/logos/kilo.svg +13 -0
- cccc/ports/web/dist/logos/kimi.png +0 -0
- cccc/ports/web/dist/logos/kiro.svg +1 -0
- cccc/ports/web/dist/logos/opencode.svg +11 -0
- cccc/ports/web/dist/manifest.webmanifest +12 -0
- cccc/ports/web/main.py +157 -0
- cccc/ports/web/middleware.py +220 -0
- cccc/ports/web/routes/__init__.py +3 -0
- cccc/ports/web/routes/access_tokens.py +221 -0
- cccc/ports/web/routes/actors.py +1547 -0
- cccc/ports/web/routes/base.py +2197 -0
- cccc/ports/web/routes/browser_surface_proxy.py +78 -0
- cccc/ports/web/routes/group_bridge.py +519 -0
- cccc/ports/web/routes/group_copy_uploads.py +83 -0
- cccc/ports/web/routes/groups.py +4360 -0
- cccc/ports/web/routes/im.py +1300 -0
- cccc/ports/web/routes/messaging.py +459 -0
- cccc/ports/web/routes/nomcp.py +258 -0
- cccc/ports/web/routes/runtime_activity.py +109 -0
- cccc/ports/web/routes/space.py +548 -0
- cccc/ports/web/routes/voice_transcription_upload.py +138 -0
- cccc/ports/web/runtime_control.py +400 -0
- cccc/ports/web/schemas.py +797 -0
- cccc/ports/web/stream_close.py +20 -0
- cccc/ports/web/streams.py +428 -0
- cccc/ports/web/web_banner.py +62 -0
- cccc/ports/web_model_browser_sidecar.py +2965 -0
- cccc/providers/__init__.py +2 -0
- cccc/providers/notebooklm/__init__.py +11 -0
- cccc/providers/notebooklm/_vendor/LICENSE +21 -0
- cccc/providers/notebooklm/_vendor/VENDORED_FROM.md +27 -0
- cccc/providers/notebooklm/_vendor/notebooklm/__init__.py +12 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/__init__.py +25 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/_download_client.py +80 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/_redirect_guard.py +70 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/downloads.py +989 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/formatters.py +267 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/generation.py +596 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/listing.py +357 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/payloads.py +564 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/polling.py +526 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifact/validation.py +52 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_artifacts.py +1000 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_atomic_io.py +387 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/__init__.py +5 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/account.py +494 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/browser_capture.py +926 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/cookie_policy.py +608 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/cookies.py +645 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/extraction.py +286 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/headers.py +41 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/headless_reauth.py +693 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/keepalive.py +355 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/master_token.py +305 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/paths.py +68 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/psidts_recovery.py +690 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/refresh.py +925 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/session.py +280 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/storage.py +717 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth/tokens.py +307 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_auth_refresh_retry.py +168 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_backoff.py +59 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_callbacks.py +14 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_chat/__init__.py +31 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_chat/api.py +984 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_chat/deleted_tracker.py +43 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_chat/notes.py +362 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_chat/transport.py +170 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_chat/wire.py +782 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_client_assembly.py +397 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_client_composed.py +165 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_client_metrics.py +147 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_client_seams.py +74 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_conversation_cache.py +120 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_cookie_persistence.py +126 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_curl_cffi_transport.py +538 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_deadline.py +66 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_deprecation.py +109 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_env.py +99 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_error_injection.py +140 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_idempotency.py +506 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_idempotency_policy.py +516 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_kernel.py +165 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_label/params.py +88 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_labels.py +367 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_logging.py +617 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_lookup.py +47 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_loop_affinity.py +62 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_loop_bound.py +73 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/__init__.py +91 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/auth_refresh.py +364 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/chain.py +144 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/chain_host.py +138 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/context.py +70 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/core.py +279 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/drain.py +109 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/error_injection.py +234 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/metrics.py +143 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/retry.py +391 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/semaphore.py +100 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_middleware/tracing.py +143 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_mind_map.py +86 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_mind_maps_api.py +651 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_note_service.py +453 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_notebook_metadata.py +92 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_notebook_payloads.py +106 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_notebooks.py +949 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_notes.py +310 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_polling_registry.py +71 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_redact.py +80 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_reqid_counter.py +182 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_request_types.py +116 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_research.py +985 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_research_import.py +207 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_research_task_parser.py +299 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_row_adapters/__init__.py +21 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_row_adapters/artifacts.py +710 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_row_adapters/chat.py +974 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_row_adapters/labels.py +77 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_row_adapters/notebooks.py +158 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_row_adapters/notes.py +358 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_row_adapters/research.py +448 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_row_adapters/sources.py +910 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_rpc_executor.py +596 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_runtime/__init__.py +87 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_runtime/auth.py +375 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_runtime/config.py +86 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_runtime/contracts.py +99 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_runtime/helpers.py +196 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_runtime/init.py +611 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_runtime/lifecycle.py +605 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_runtime/transport.py +382 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_secrets.py +161 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_settings.py +281 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_sharing.py +251 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_sharing_manager.py +63 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_source/__init__.py +37 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_source/_upload_decode.py +468 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_source/add.py +489 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_source/content.py +177 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_source/drive_import.py +658 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_source/listing.py +198 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_source/polling.py +293 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_source/upload.py +952 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_source/upload_payloads.py +86 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_sources.py +1000 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_streaming_post.py +102 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_transport_drain.py +324 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_transport_errors.py +158 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/__init__.py +1 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/artifacts.py +566 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/chat.py +166 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/common.py +180 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/labels.py +48 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/mind_maps.py +55 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/notebooks.py +250 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/notes.py +27 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/research.py +283 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/sharing.py +188 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_types/sources.py +357 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_url_utils.py +178 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_version_check.py +20 -0
- cccc/providers/notebooklm/_vendor/notebooklm/_version_info.py +66 -0
- cccc/providers/notebooklm/_vendor/notebooklm/artifacts.py +185 -0
- cccc/providers/notebooklm/_vendor/notebooklm/auth.py +337 -0
- cccc/providers/notebooklm/_vendor/notebooklm/client.py +945 -0
- cccc/providers/notebooklm/_vendor/notebooklm/config.py +24 -0
- cccc/providers/notebooklm/_vendor/notebooklm/exceptions.py +1524 -0
- cccc/providers/notebooklm/_vendor/notebooklm/io.py +10 -0
- cccc/providers/notebooklm/_vendor/notebooklm/log.py +9 -0
- cccc/providers/notebooklm/_vendor/notebooklm/migration.py +233 -0
- cccc/providers/notebooklm/_vendor/notebooklm/paths.py +503 -0
- cccc/providers/notebooklm/_vendor/notebooklm/py.typed +1 -0
- cccc/providers/notebooklm/_vendor/notebooklm/research.py +149 -0
- cccc/providers/notebooklm/_vendor/notebooklm/rpc/__init__.py +107 -0
- cccc/providers/notebooklm/_vendor/notebooklm/rpc/_safe_index.py +116 -0
- cccc/providers/notebooklm/_vendor/notebooklm/rpc/decoder.py +756 -0
- cccc/providers/notebooklm/_vendor/notebooklm/rpc/encoder.py +109 -0
- cccc/providers/notebooklm/_vendor/notebooklm/rpc/overrides.py +152 -0
- cccc/providers/notebooklm/_vendor/notebooklm/rpc/types.py +462 -0
- cccc/providers/notebooklm/_vendor/notebooklm/types.py +277 -0
- cccc/providers/notebooklm/_vendor/notebooklm/urls.py +13 -0
- cccc/providers/notebooklm/_vendor/notebooklm/utils.py +111 -0
- cccc/providers/notebooklm/adapter.py +1553 -0
- cccc/providers/notebooklm/compat.py +38 -0
- cccc/providers/notebooklm/errors.py +15 -0
- cccc/providers/notebooklm/health.py +155 -0
- cccc/resources/__init__.py +2 -0
- cccc/resources/capability-allowlist.default.yaml +686 -0
- cccc/resources/cccc-help.md +125 -0
- cccc/resources/code_mode_metadata.json +293 -0
- cccc/resources/code_mode_runtime.js +429 -0
- cccc/resources/mcp_tools.json +3429 -0
- cccc/resources/voice-models.default.json +99 -0
- cccc/runners/__init__.py +22 -0
- cccc/runners/headless.py +248 -0
- cccc/runners/platform_support.py +98 -0
- cccc/runners/pty.py +1338 -0
- cccc/runners/pty_lifecycle.py +138 -0
- cccc/runners/pty_snapshot.py +177 -0
- cccc/runners/pty_stub.py +153 -0
- cccc/runners/pty_win.py +1388 -0
- cccc/util/__init__.py +2 -0
- cccc/util/conv.py +39 -0
- cccc/util/file_lock.py +110 -0
- cccc/util/fs.py +129 -0
- cccc/util/node_env.py +52 -0
- cccc/util/obslog.py +142 -0
- cccc/util/process.py +402 -0
- cccc/util/terminal_render.py +405 -0
- cccc/util/time.py +23 -0
- cccc/vendor/reme/__init__.py +1 -0
- cccc/vendor/reme/core/__init__.py +1 -0
- cccc/vendor/reme/core/embedding/__init__.py +3 -0
- cccc/vendor/reme/core/embedding/base_embedding_model.py +24 -0
- cccc/vendor/reme/core/enumeration/__init__.py +4 -0
- cccc/vendor/reme/core/enumeration/memory_source.py +11 -0
- cccc/vendor/reme/core/enumeration/role.py +19 -0
- cccc/vendor/reme/core/file_store/__init__.py +4 -0
- cccc/vendor/reme/core/file_store/base_file_store.py +195 -0
- cccc/vendor/reme/core/file_store/local_file_store.py +506 -0
- cccc/vendor/reme/core/file_watcher/__init__.py +4 -0
- cccc/vendor/reme/core/file_watcher/base_file_watcher.py +204 -0
- cccc/vendor/reme/core/file_watcher/full_file_watcher.py +78 -0
- cccc/vendor/reme/core/schema/__init__.py +7 -0
- cccc/vendor/reme/core/schema/cut_point_result.py +21 -0
- cccc/vendor/reme/core/schema/file_metadata.py +15 -0
- cccc/vendor/reme/core/schema/memory_chunk.py +19 -0
- cccc/vendor/reme/core/schema/memory_search_result.py +23 -0
- cccc/vendor/reme/core/schema/message.py +12 -0
- cccc/vendor/reme/core/utils/__init__.py +4 -0
- cccc/vendor/reme/core/utils/chunking_utils.py +124 -0
- cccc/vendor/reme/core/utils/common_utils.py +35 -0
- cccc/vendor/reme/memory/__init__.py +1 -0
- cccc/vendor/reme/memory/file_based/__init__.py +1 -0
- cccc/vendor/reme/memory/file_based/fb_compactor.py +114 -0
- cccc/vendor/reme/memory/file_based/fb_context_checker.py +161 -0
- cccc/vendor/reme/memory/file_based/fb_summarizer.py +89 -0
- cccc/vendor/reme/memory/tools/__init__.py +1 -0
- cccc/vendor/reme/memory/tools/chunk/__init__.py +1 -0
- cccc/vendor/reme/memory/tools/chunk/memory_get.py +113 -0
- cccc/vendor/reme/memory/tools/chunk/memory_search.py +112 -0
- cccc_pair-0.4.34.dist-info/METADATA +647 -0
- cccc_pair-0.4.34.dist-info/RECORD +813 -0
- cccc_pair-0.4.34.dist-info/WHEEL +5 -0
- cccc_pair-0.4.34.dist-info/entry_points.txt +3 -0
- cccc_pair-0.4.34.dist-info/licenses/LICENSE +201 -0
- cccc_pair-0.4.34.dist-info/top_level.txt +1 -0
cccc/__init__.py
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def _detect_version() -> str:
|
|
7
|
+
for dist_name in ("cccc-pair", "cccc"):
|
|
8
|
+
try:
|
|
9
|
+
return version(dist_name)
|
|
10
|
+
except PackageNotFoundError:
|
|
11
|
+
continue
|
|
12
|
+
return "0.0.0"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
__version__ = _detect_version()
|
|
16
|
+
|
cccc/_native/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Private native payloads bundled by platform-specific CCCC wheels."""
|
|
Binary file
|
cccc/cli/__init__.py
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
"""CCCC CLI package entrypoint."""
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
import types
|
|
7
|
+
|
|
8
|
+
# Re-export everything from submodules (mirroring main.py's imports).
|
|
9
|
+
# common.__all__ includes underscore names like _ensure_daemon_running.
|
|
10
|
+
from .common import * # noqa: F401,F403
|
|
11
|
+
from .group_cmds import * # noqa: F401,F403
|
|
12
|
+
from .actor_cmds import * # noqa: F401,F403
|
|
13
|
+
from .messaging_cmds import * # noqa: F401,F403
|
|
14
|
+
from .space_cmds import * # noqa: F401,F403
|
|
15
|
+
from .im_cmds import * # noqa: F401,F403
|
|
16
|
+
from .system_cmds import * # noqa: F401,F403
|
|
17
|
+
from .main import build_parser, main # noqa: F401
|
|
18
|
+
|
|
19
|
+
_PATCH_FORWARD_MODULES = (
|
|
20
|
+
"cccc.cli.common",
|
|
21
|
+
"cccc.cli.group_cmds",
|
|
22
|
+
"cccc.cli.actor_cmds",
|
|
23
|
+
"cccc.cli.messaging_cmds",
|
|
24
|
+
"cccc.cli.space_cmds",
|
|
25
|
+
"cccc.cli.im_cmds",
|
|
26
|
+
"cccc.cli.system_cmds",
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class _CliModule(types.ModuleType):
|
|
31
|
+
"""Forward patched attrs on cccc.cli to split command modules."""
|
|
32
|
+
|
|
33
|
+
def __setattr__(self, name: str, value: object) -> None:
|
|
34
|
+
super().__setattr__(name, value)
|
|
35
|
+
for mod_name in _PATCH_FORWARD_MODULES:
|
|
36
|
+
mod = sys.modules.get(mod_name)
|
|
37
|
+
if mod is None:
|
|
38
|
+
continue
|
|
39
|
+
if name in mod.__dict__:
|
|
40
|
+
mod.__dict__[name] = value
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
sys.modules[__name__].__class__ = _CliModule
|
cccc/cli/__main__.py
ADDED
cccc/cli/actor_cmds.py
ADDED
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
"""Actor related CLI command handlers."""
|
|
4
|
+
|
|
5
|
+
from .common import * # noqa: F401,F403
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"cmd_actor_list",
|
|
9
|
+
"cmd_actor_add",
|
|
10
|
+
"cmd_actor_remove",
|
|
11
|
+
"cmd_actor_start",
|
|
12
|
+
"cmd_actor_stop",
|
|
13
|
+
"cmd_actor_restart",
|
|
14
|
+
"cmd_actor_update",
|
|
15
|
+
"cmd_actor_secrets",
|
|
16
|
+
"cmd_runtime_list",
|
|
17
|
+
"cmd_runtime_hermes",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
def cmd_actor_list(args: argparse.Namespace) -> int:
|
|
21
|
+
group_id = _resolve_group_id(getattr(args, "group", ""))
|
|
22
|
+
if not group_id:
|
|
23
|
+
_print_json({"ok": False, "error": {"code": "missing_group_id", "message": "missing group_id (no active group?)"}})
|
|
24
|
+
return 2
|
|
25
|
+
|
|
26
|
+
if _ensure_daemon_running():
|
|
27
|
+
resp = call_daemon({"op": "actor_list", "args": {"group_id": group_id}})
|
|
28
|
+
if resp.get("ok"):
|
|
29
|
+
_print_json(resp)
|
|
30
|
+
return 0
|
|
31
|
+
|
|
32
|
+
group = load_group(group_id)
|
|
33
|
+
if group is None:
|
|
34
|
+
_print_json({"ok": False, "error": {"code": "group_not_found", "message": f"group not found: {group_id}"}})
|
|
35
|
+
return 2
|
|
36
|
+
_print_json({"ok": True, "result": {"actors": list_actors(group)}})
|
|
37
|
+
return 0
|
|
38
|
+
|
|
39
|
+
def cmd_actor_add(args: argparse.Namespace) -> int:
|
|
40
|
+
group_id = _resolve_group_id(getattr(args, "group", ""))
|
|
41
|
+
if not group_id:
|
|
42
|
+
_print_json({"ok": False, "error": {"code": "missing_group_id", "message": "missing group_id (no active group?)"}})
|
|
43
|
+
return 2
|
|
44
|
+
group = load_group(group_id)
|
|
45
|
+
if group is None:
|
|
46
|
+
_print_json({"ok": False, "error": {"code": "group_not_found", "message": f"group not found: {group_id}"}})
|
|
47
|
+
return 2
|
|
48
|
+
|
|
49
|
+
actor_id = str(args.actor_id or "").strip()
|
|
50
|
+
title = str(args.title or "").strip()
|
|
51
|
+
by = str(args.by or "user").strip()
|
|
52
|
+
submit = str(args.submit or "enter").strip() or "enter"
|
|
53
|
+
runner = str(getattr(args, "runner", "") or "pty").strip() or "pty"
|
|
54
|
+
runtime = str(getattr(args, "runtime", "") or "codex").strip() or "codex"
|
|
55
|
+
command: list[str] = []
|
|
56
|
+
if args.command:
|
|
57
|
+
try:
|
|
58
|
+
command = shlex.split(str(args.command), posix=(os.name != "nt"))
|
|
59
|
+
except Exception:
|
|
60
|
+
command = [str(args.command)]
|
|
61
|
+
|
|
62
|
+
# Auto-set command based on runtime if not provided
|
|
63
|
+
if not command:
|
|
64
|
+
from ..kernel.runtime import get_runtime_command_with_flags
|
|
65
|
+
command = get_runtime_command_with_flags(runtime)
|
|
66
|
+
if runtime == "custom" and not command:
|
|
67
|
+
_print_json({
|
|
68
|
+
"ok": False,
|
|
69
|
+
"error": {"code": "missing_command", "message": "custom runtime requires a command (PTY runner)"},
|
|
70
|
+
})
|
|
71
|
+
return 2
|
|
72
|
+
|
|
73
|
+
env: dict[str, str] = {}
|
|
74
|
+
if isinstance(args.env, list):
|
|
75
|
+
for item in args.env:
|
|
76
|
+
if not isinstance(item, str) or "=" not in item:
|
|
77
|
+
continue
|
|
78
|
+
k, v = item.split("=", 1)
|
|
79
|
+
k = k.strip()
|
|
80
|
+
if not k:
|
|
81
|
+
continue
|
|
82
|
+
env[k] = v
|
|
83
|
+
default_scope_key = ""
|
|
84
|
+
if args.scope:
|
|
85
|
+
default_scope_key = detect_scope(Path(args.scope)).scope_key
|
|
86
|
+
scopes = group.doc.get("scopes") if isinstance(group.doc.get("scopes"), list) else []
|
|
87
|
+
attached = any(isinstance(s, dict) and s.get("scope_key") == default_scope_key for s in scopes)
|
|
88
|
+
if not attached:
|
|
89
|
+
_print_json({"ok": False, "error": {"code": "scope_not_attached", "message": f"scope not attached: {default_scope_key}"}})
|
|
90
|
+
return 2
|
|
91
|
+
|
|
92
|
+
if _ensure_daemon_running():
|
|
93
|
+
resp = call_daemon(
|
|
94
|
+
{
|
|
95
|
+
"op": "actor_add",
|
|
96
|
+
"args": {
|
|
97
|
+
"group_id": group_id,
|
|
98
|
+
"actor_id": actor_id,
|
|
99
|
+
"title": title,
|
|
100
|
+
"submit": submit,
|
|
101
|
+
"runner": runner,
|
|
102
|
+
"runtime": runtime,
|
|
103
|
+
"by": by,
|
|
104
|
+
"command": command,
|
|
105
|
+
"env": env,
|
|
106
|
+
"default_scope_key": default_scope_key,
|
|
107
|
+
},
|
|
108
|
+
}
|
|
109
|
+
)
|
|
110
|
+
if resp.get("ok"):
|
|
111
|
+
_print_json(resp)
|
|
112
|
+
return 0
|
|
113
|
+
if not _daemon_response_allows_local_fallback(resp):
|
|
114
|
+
return _return_daemon_rejection(resp)
|
|
115
|
+
|
|
116
|
+
try:
|
|
117
|
+
require_actor_permission(group, by=by, action="actor.add")
|
|
118
|
+
# Note: role is auto-determined by stable position (first visible actor = foreman)
|
|
119
|
+
if runtime == "web_model":
|
|
120
|
+
runner = "headless"
|
|
121
|
+
command = []
|
|
122
|
+
elif runner != "pty":
|
|
123
|
+
raise ValueError("invalid runner (must be 'pty')")
|
|
124
|
+
if runtime not in (
|
|
125
|
+
"amp",
|
|
126
|
+
"antigravity",
|
|
127
|
+
"auggie",
|
|
128
|
+
"claude",
|
|
129
|
+
"cline",
|
|
130
|
+
"codex",
|
|
131
|
+
"copilot",
|
|
132
|
+
"cursor",
|
|
133
|
+
"devin",
|
|
134
|
+
"kiro",
|
|
135
|
+
"kilo",
|
|
136
|
+
"droid",
|
|
137
|
+
"grok",
|
|
138
|
+
"hermes",
|
|
139
|
+
"kimi",
|
|
140
|
+
"opencode",
|
|
141
|
+
"web_model",
|
|
142
|
+
"custom",
|
|
143
|
+
):
|
|
144
|
+
raise ValueError("invalid runtime")
|
|
145
|
+
if runtime == "custom" and not command:
|
|
146
|
+
raise ValueError("custom runtime requires a command (PTY runner)")
|
|
147
|
+
actor = add_actor(
|
|
148
|
+
group,
|
|
149
|
+
actor_id=actor_id,
|
|
150
|
+
title=title,
|
|
151
|
+
command=command,
|
|
152
|
+
env=env,
|
|
153
|
+
default_scope_key=default_scope_key,
|
|
154
|
+
submit=submit,
|
|
155
|
+
runner=runner, # type: ignore
|
|
156
|
+
runtime=runtime, # type: ignore
|
|
157
|
+
)
|
|
158
|
+
except Exception as e:
|
|
159
|
+
_print_json({"ok": False, "error": {"code": "actor_add_failed", "message": str(e)}})
|
|
160
|
+
return 2
|
|
161
|
+
ev = append_event(group.ledger_path, kind="actor.add", group_id=group.group_id, scope_key="", by=by, data={"actor": actor})
|
|
162
|
+
_print_json({"ok": True, "result": {"actor": actor, "event": ev}})
|
|
163
|
+
return 0
|
|
164
|
+
|
|
165
|
+
def cmd_actor_remove(args: argparse.Namespace) -> int:
|
|
166
|
+
group_id = _resolve_group_id(getattr(args, "group", ""))
|
|
167
|
+
if not group_id:
|
|
168
|
+
_print_json({"ok": False, "error": {"code": "missing_group_id", "message": "missing group_id (no active group?)"}})
|
|
169
|
+
return 2
|
|
170
|
+
actor_id = str(args.actor_id or "").strip()
|
|
171
|
+
by = str(args.by or "user").strip()
|
|
172
|
+
|
|
173
|
+
if _ensure_daemon_running():
|
|
174
|
+
resp = call_daemon({"op": "actor_remove", "args": {"group_id": group_id, "actor_id": actor_id, "by": by}})
|
|
175
|
+
if resp.get("ok"):
|
|
176
|
+
_print_json(resp)
|
|
177
|
+
return 0
|
|
178
|
+
if not _daemon_response_allows_local_fallback(resp):
|
|
179
|
+
return _return_daemon_rejection(resp)
|
|
180
|
+
|
|
181
|
+
group = load_group(group_id)
|
|
182
|
+
if group is None:
|
|
183
|
+
_print_json({"ok": False, "error": {"code": "group_not_found", "message": f"group not found: {group_id}"}})
|
|
184
|
+
return 2
|
|
185
|
+
try:
|
|
186
|
+
require_actor_permission(group, by=by, action="actor.remove", target_actor_id=actor_id)
|
|
187
|
+
remove_actor(group, actor_id)
|
|
188
|
+
except Exception as e:
|
|
189
|
+
_print_json({"ok": False, "error": {"code": "actor_remove_failed", "message": str(e)}})
|
|
190
|
+
return 2
|
|
191
|
+
ev = append_event(group.ledger_path, kind="actor.remove", group_id=group.group_id, scope_key="", by=by, data={"actor_id": actor_id})
|
|
192
|
+
_print_json({"ok": True, "result": {"actor_id": actor_id, "event": ev}})
|
|
193
|
+
return 0
|
|
194
|
+
|
|
195
|
+
def cmd_actor_start(args: argparse.Namespace) -> int:
|
|
196
|
+
group_id = _resolve_group_id(getattr(args, "group", ""))
|
|
197
|
+
if not group_id:
|
|
198
|
+
_print_json({"ok": False, "error": {"code": "missing_group_id", "message": "missing group_id (no active group?)"}})
|
|
199
|
+
return 2
|
|
200
|
+
actor_id = str(args.actor_id or "").strip()
|
|
201
|
+
by = str(args.by or "user").strip()
|
|
202
|
+
|
|
203
|
+
if _ensure_daemon_running():
|
|
204
|
+
resp = call_daemon({"op": "actor_start", "args": {"group_id": group_id, "actor_id": actor_id, "by": by}})
|
|
205
|
+
if resp.get("ok"):
|
|
206
|
+
_print_json(resp)
|
|
207
|
+
return 0
|
|
208
|
+
if not _daemon_response_allows_local_fallback(resp):
|
|
209
|
+
return _return_daemon_rejection(resp)
|
|
210
|
+
|
|
211
|
+
group = load_group(group_id)
|
|
212
|
+
if group is None:
|
|
213
|
+
_print_json({"ok": False, "error": {"code": "group_not_found", "message": f"group not found: {group_id}"}})
|
|
214
|
+
return 2
|
|
215
|
+
try:
|
|
216
|
+
require_actor_permission(group, by=by, action="actor.start", target_actor_id=actor_id)
|
|
217
|
+
actor = update_actor(group, actor_id, {"enabled": True})
|
|
218
|
+
except Exception as e:
|
|
219
|
+
_print_json({"ok": False, "error": {"code": "actor_start_failed", "message": str(e)}})
|
|
220
|
+
return 2
|
|
221
|
+
ev = append_event(group.ledger_path, kind="actor.start", group_id=group.group_id, scope_key="", by=by, data={"actor_id": actor_id})
|
|
222
|
+
_print_json({"ok": True, "result": {"actor": actor, "event": ev}})
|
|
223
|
+
return 0
|
|
224
|
+
|
|
225
|
+
def cmd_actor_stop(args: argparse.Namespace) -> int:
|
|
226
|
+
group_id = _resolve_group_id(getattr(args, "group", ""))
|
|
227
|
+
if not group_id:
|
|
228
|
+
_print_json({"ok": False, "error": {"code": "missing_group_id", "message": "missing group_id (no active group?)"}})
|
|
229
|
+
return 2
|
|
230
|
+
actor_id = str(args.actor_id or "").strip()
|
|
231
|
+
by = str(args.by or "user").strip()
|
|
232
|
+
|
|
233
|
+
if _ensure_daemon_running():
|
|
234
|
+
resp = call_daemon({"op": "actor_stop", "args": {"group_id": group_id, "actor_id": actor_id, "by": by}})
|
|
235
|
+
if resp.get("ok"):
|
|
236
|
+
_print_json(resp)
|
|
237
|
+
return 0
|
|
238
|
+
if not _daemon_response_allows_local_fallback(resp):
|
|
239
|
+
return _return_daemon_rejection(resp)
|
|
240
|
+
|
|
241
|
+
group = load_group(group_id)
|
|
242
|
+
if group is None:
|
|
243
|
+
_print_json({"ok": False, "error": {"code": "group_not_found", "message": f"group not found: {group_id}"}})
|
|
244
|
+
return 2
|
|
245
|
+
try:
|
|
246
|
+
require_actor_permission(group, by=by, action="actor.stop", target_actor_id=actor_id)
|
|
247
|
+
actor = update_actor(group, actor_id, {"enabled": False})
|
|
248
|
+
except Exception as e:
|
|
249
|
+
_print_json({"ok": False, "error": {"code": "actor_stop_failed", "message": str(e)}})
|
|
250
|
+
return 2
|
|
251
|
+
ev = append_event(group.ledger_path, kind="actor.stop", group_id=group.group_id, scope_key="", by=by, data={"actor_id": actor_id})
|
|
252
|
+
_print_json({"ok": True, "result": {"actor": actor, "event": ev}})
|
|
253
|
+
return 0
|
|
254
|
+
|
|
255
|
+
def cmd_actor_restart(args: argparse.Namespace) -> int:
|
|
256
|
+
group_id = _resolve_group_id(getattr(args, "group", ""))
|
|
257
|
+
if not group_id:
|
|
258
|
+
_print_json({"ok": False, "error": {"code": "missing_group_id", "message": "missing group_id (no active group?)"}})
|
|
259
|
+
return 2
|
|
260
|
+
actor_id = str(args.actor_id or "").strip()
|
|
261
|
+
by = str(args.by or "user").strip()
|
|
262
|
+
|
|
263
|
+
if _ensure_daemon_running():
|
|
264
|
+
resp = call_daemon({"op": "actor_restart", "args": {"group_id": group_id, "actor_id": actor_id, "by": by}})
|
|
265
|
+
if resp.get("ok"):
|
|
266
|
+
_print_json(resp)
|
|
267
|
+
return 0
|
|
268
|
+
if not _daemon_response_allows_local_fallback(resp):
|
|
269
|
+
return _return_daemon_rejection(resp)
|
|
270
|
+
|
|
271
|
+
group = load_group(group_id)
|
|
272
|
+
if group is None:
|
|
273
|
+
_print_json({"ok": False, "error": {"code": "group_not_found", "message": f"group not found: {group_id}"}})
|
|
274
|
+
return 2
|
|
275
|
+
try:
|
|
276
|
+
require_actor_permission(group, by=by, action="actor.restart", target_actor_id=actor_id)
|
|
277
|
+
actor = update_actor(group, actor_id, {"enabled": True})
|
|
278
|
+
except Exception as e:
|
|
279
|
+
_print_json({"ok": False, "error": {"code": "actor_restart_failed", "message": str(e)}})
|
|
280
|
+
return 2
|
|
281
|
+
ev = append_event(group.ledger_path, kind="actor.restart", group_id=group.group_id, scope_key="", by=by, data={"actor_id": actor_id})
|
|
282
|
+
_print_json({"ok": True, "result": {"actor": actor, "event": ev}})
|
|
283
|
+
return 0
|
|
284
|
+
|
|
285
|
+
def cmd_actor_update(args: argparse.Namespace) -> int:
|
|
286
|
+
group_id = _resolve_group_id(getattr(args, "group", ""))
|
|
287
|
+
if not group_id:
|
|
288
|
+
_print_json({"ok": False, "error": {"code": "missing_group_id", "message": "missing group_id (no active group?)"}})
|
|
289
|
+
return 2
|
|
290
|
+
|
|
291
|
+
actor_id = str(args.actor_id or "").strip()
|
|
292
|
+
by = str(args.by or "user").strip()
|
|
293
|
+
|
|
294
|
+
group = load_group(group_id)
|
|
295
|
+
if group is None:
|
|
296
|
+
_print_json({"ok": False, "error": {"code": "group_not_found", "message": f"group not found: {group_id}"}})
|
|
297
|
+
return 2
|
|
298
|
+
|
|
299
|
+
patch: dict[str, Any] = {}
|
|
300
|
+
if args.title is not None:
|
|
301
|
+
patch["title"] = str(args.title or "")
|
|
302
|
+
role = getattr(args, "role", None)
|
|
303
|
+
if role:
|
|
304
|
+
patch["role"] = str(role)
|
|
305
|
+
if args.command is not None:
|
|
306
|
+
cmd: list[str] = []
|
|
307
|
+
if str(args.command).strip():
|
|
308
|
+
try:
|
|
309
|
+
cmd = shlex.split(str(args.command), posix=(os.name != "nt"))
|
|
310
|
+
except Exception:
|
|
311
|
+
cmd = [str(args.command)]
|
|
312
|
+
patch["command"] = cmd
|
|
313
|
+
if isinstance(args.env, list) and args.env:
|
|
314
|
+
env: dict[str, str] = {}
|
|
315
|
+
for item in args.env:
|
|
316
|
+
if not isinstance(item, str) or "=" not in item:
|
|
317
|
+
continue
|
|
318
|
+
k, v = item.split("=", 1)
|
|
319
|
+
k = k.strip()
|
|
320
|
+
if not k:
|
|
321
|
+
continue
|
|
322
|
+
env[k] = v
|
|
323
|
+
patch["env"] = env
|
|
324
|
+
if args.scope:
|
|
325
|
+
scope_key = detect_scope(Path(args.scope)).scope_key
|
|
326
|
+
scopes = group.doc.get("scopes") if isinstance(group.doc.get("scopes"), list) else []
|
|
327
|
+
attached = any(isinstance(s, dict) and s.get("scope_key") == scope_key for s in scopes)
|
|
328
|
+
if not attached:
|
|
329
|
+
_print_json({"ok": False, "error": {"code": "scope_not_attached", "message": f"scope not attached: {scope_key}"}})
|
|
330
|
+
return 2
|
|
331
|
+
patch["default_scope_key"] = scope_key
|
|
332
|
+
if args.submit is not None:
|
|
333
|
+
patch["submit"] = str(args.submit)
|
|
334
|
+
if getattr(args, "runner", None) is not None:
|
|
335
|
+
patch["runner"] = str(args.runner)
|
|
336
|
+
if getattr(args, "runtime", None) is not None:
|
|
337
|
+
patch["runtime"] = str(args.runtime)
|
|
338
|
+
if getattr(args, "runtime_state_source", None) is not None:
|
|
339
|
+
patch["runtime_state_source"] = str(args.runtime_state_source)
|
|
340
|
+
if args.enabled is not None:
|
|
341
|
+
patch["enabled"] = bool(args.enabled)
|
|
342
|
+
|
|
343
|
+
if not patch:
|
|
344
|
+
_print_json({"ok": False, "error": {"code": "empty_patch", "message": "nothing to update"}})
|
|
345
|
+
return 2
|
|
346
|
+
|
|
347
|
+
if _ensure_daemon_running():
|
|
348
|
+
resp = call_daemon({"op": "actor_update", "args": {"group_id": group_id, "actor_id": actor_id, "patch": patch, "by": by}})
|
|
349
|
+
_print_json(resp)
|
|
350
|
+
return 0 if resp.get("ok") else 2
|
|
351
|
+
|
|
352
|
+
try:
|
|
353
|
+
require_actor_permission(group, by=by, action="actor.update", target_actor_id=actor_id)
|
|
354
|
+
actor = update_actor(group, actor_id, patch)
|
|
355
|
+
except Exception as e:
|
|
356
|
+
_print_json({"ok": False, "error": {"code": "actor_update_failed", "message": str(e)}})
|
|
357
|
+
return 2
|
|
358
|
+
ev = append_event(group.ledger_path, kind="actor.update", group_id=group.group_id, scope_key="", by=by, data={"actor_id": actor_id, "patch": patch})
|
|
359
|
+
_print_json({"ok": True, "result": {"actor": actor, "event": ev}})
|
|
360
|
+
return 0
|
|
361
|
+
|
|
362
|
+
def cmd_actor_secrets(args: argparse.Namespace) -> int:
|
|
363
|
+
"""Manage per-actor runtime-only secrets env (stored under CCCC_HOME/state, not in ledger)."""
|
|
364
|
+
group_id = _resolve_group_id(getattr(args, "group", ""))
|
|
365
|
+
if not group_id:
|
|
366
|
+
_print_json({"ok": False, "error": {"code": "missing_group_id", "message": "missing group_id (no active group?)"}})
|
|
367
|
+
return 2
|
|
368
|
+
|
|
369
|
+
actor_id = str(args.actor_id or "").strip()
|
|
370
|
+
by = str(args.by or "user").strip() or "user"
|
|
371
|
+
|
|
372
|
+
if not _ensure_daemon_running():
|
|
373
|
+
_print_json({"ok": False, "error": {"code": "daemon_unavailable", "message": "daemon unavailable"}})
|
|
374
|
+
return 2
|
|
375
|
+
|
|
376
|
+
if getattr(args, "keys", False):
|
|
377
|
+
resp = call_daemon({"op": "actor_env_private_keys", "args": {"group_id": group_id, "actor_id": actor_id, "by": by}})
|
|
378
|
+
_print_json(resp)
|
|
379
|
+
return 0 if resp.get("ok") else 2
|
|
380
|
+
|
|
381
|
+
set_vars: dict[str, str] = {}
|
|
382
|
+
for item in (args.set or []):
|
|
383
|
+
if not isinstance(item, str) or "=" not in item:
|
|
384
|
+
continue
|
|
385
|
+
k, v = item.split("=", 1)
|
|
386
|
+
k = k.strip()
|
|
387
|
+
if not k:
|
|
388
|
+
continue
|
|
389
|
+
set_vars[k] = v
|
|
390
|
+
|
|
391
|
+
unset_keys: list[str] = []
|
|
392
|
+
for item in (args.unset or []):
|
|
393
|
+
k = str(item or "").strip()
|
|
394
|
+
if k:
|
|
395
|
+
unset_keys.append(k)
|
|
396
|
+
|
|
397
|
+
clear = bool(getattr(args, "clear", False))
|
|
398
|
+
restart = bool(getattr(args, "restart", False))
|
|
399
|
+
|
|
400
|
+
resp = call_daemon(
|
|
401
|
+
{
|
|
402
|
+
"op": "actor_env_private_update",
|
|
403
|
+
"args": {
|
|
404
|
+
"group_id": group_id,
|
|
405
|
+
"actor_id": actor_id,
|
|
406
|
+
"by": by,
|
|
407
|
+
"set": set_vars,
|
|
408
|
+
"unset": unset_keys,
|
|
409
|
+
"clear": clear,
|
|
410
|
+
},
|
|
411
|
+
}
|
|
412
|
+
)
|
|
413
|
+
if not resp.get("ok"):
|
|
414
|
+
_print_json(resp)
|
|
415
|
+
return 2
|
|
416
|
+
|
|
417
|
+
if restart:
|
|
418
|
+
r = call_daemon({"op": "actor_restart", "args": {"group_id": group_id, "actor_id": actor_id, "by": by}})
|
|
419
|
+
if not r.get("ok"):
|
|
420
|
+
_print_json(r)
|
|
421
|
+
return 2
|
|
422
|
+
_print_json({"ok": True, "result": {"secrets": resp.get("result", {}), "restart": r.get("result", {})}})
|
|
423
|
+
return 0
|
|
424
|
+
|
|
425
|
+
_print_json(resp)
|
|
426
|
+
return 0
|
|
427
|
+
|
|
428
|
+
def cmd_runtime_list(args: argparse.Namespace) -> int:
|
|
429
|
+
"""List available agent runtimes."""
|
|
430
|
+
from ..kernel.runtime import detect_all_runtimes
|
|
431
|
+
|
|
432
|
+
all_runtimes = args.all if hasattr(args, 'all') else False
|
|
433
|
+
runtimes = detect_all_runtimes(primary_only=not all_runtimes)
|
|
434
|
+
|
|
435
|
+
result = {
|
|
436
|
+
"runtimes": [
|
|
437
|
+
{
|
|
438
|
+
"name": rt.name,
|
|
439
|
+
"display_name": rt.display_name,
|
|
440
|
+
"command": rt.command,
|
|
441
|
+
"available": rt.available,
|
|
442
|
+
"path": rt.path,
|
|
443
|
+
"capabilities": rt.capabilities,
|
|
444
|
+
}
|
|
445
|
+
for rt in runtimes
|
|
446
|
+
],
|
|
447
|
+
"available": [rt.name for rt in runtimes if rt.available],
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
_print_json({"ok": True, "result": result})
|
|
451
|
+
return 0
|
|
452
|
+
|
|
453
|
+
def cmd_runtime_hermes(args: argparse.Namespace) -> int:
|
|
454
|
+
"""Probe or prepare Hermes runtime MCP wiring."""
|
|
455
|
+
from ..kernel.hermes_runtime import hermes_runtime_status, prepare_hermes_runtime, run_hermes_mcp_test
|
|
456
|
+
|
|
457
|
+
action = str(getattr(args, "hermes_action", "") or "").strip()
|
|
458
|
+
if action == "status":
|
|
459
|
+
_print_json({"ok": True, "result": hermes_runtime_status()})
|
|
460
|
+
return 0
|
|
461
|
+
if action == "prepare":
|
|
462
|
+
result = prepare_hermes_runtime(
|
|
463
|
+
cwd=Path(str(getattr(args, "path", "") or ".")).resolve(),
|
|
464
|
+
auto_enable_tools=bool(getattr(args, "yes", False)),
|
|
465
|
+
force_mcp=bool(getattr(args, "force", False)),
|
|
466
|
+
)
|
|
467
|
+
_print_json({"ok": bool(result.get("ok")), "result": result})
|
|
468
|
+
return 0 if result.get("ok") else 2
|
|
469
|
+
if action == "mcp-test":
|
|
470
|
+
result = run_hermes_mcp_test(
|
|
471
|
+
cwd=Path(str(getattr(args, "path", "") or ".")).resolve(),
|
|
472
|
+
group_id=str(getattr(args, "group_id", "") or "g_probe"),
|
|
473
|
+
actor_id=str(getattr(args, "actor_id", "") or "hermes-probe"),
|
|
474
|
+
)
|
|
475
|
+
_print_json({"ok": bool(result.get("ok")), "result": result})
|
|
476
|
+
return 0 if result.get("ok") else 2
|
|
477
|
+
_print_json({"ok": False, "error": {"code": "invalid_action", "message": f"unknown Hermes runtime action: {action}"}})
|
|
478
|
+
return 2
|