apsimo 1.3.0__py3-none-any.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.
- apsimo/__init__.py +38 -0
- apsimo/__main__.py +6 -0
- apsimo/agent/__init__.py +6 -0
- apsimo/agent/client.py +276 -0
- apsimo/agent/models.py +46 -0
- apsimo/agents/__init__.py +20 -0
- apsimo/agents/models.py +264 -0
- apsimo/agents/store.py +861 -0
- apsimo/agents/websocket.py +522 -0
- apsimo/api/__init__.py +1 -0
- apsimo/api/auth_telemetry.py +287 -0
- apsimo/api/authority.py +1203 -0
- apsimo/api/contact_grants.py +347 -0
- apsimo/api/middleware.py +483 -0
- apsimo/api/routers/__init__.py +1 -0
- apsimo/api/routers/commitment_work.py +265 -0
- apsimo/api/routers/context_gate.py +123 -0
- apsimo/api/routers/executions.py +140 -0
- apsimo/api/routers/followup_plans.py +147 -0
- apsimo/api/routers/governed_actions.py +162 -0
- apsimo/api/routers/host.py +14473 -0
- apsimo/api/routers/initiative_work.py +115 -0
- apsimo/api/routers/mining.py +104 -0
- apsimo/api/routers/observations.py +110 -0
- apsimo/api/routers/social_state.py +225 -0
- apsimo/api/routers/task_queue.py +2715 -0
- apsimo/api/routers/temporal_followups.py +251 -0
- apsimo/api/routers/transport.py +110 -0
- apsimo/api/routers/transport_ingress_api.py +240 -0
- apsimo/api/schemas/__init__.py +1 -0
- apsimo/api/schemas/host.py +1949 -0
- apsimo/autonomy/cli.py +110 -0
- apsimo/autonomy/condition_worker.py +437 -0
- apsimo/autonomy/config.py +424 -0
- apsimo/autonomy/loop.py +4316 -0
- apsimo/autonomy/registry.py +339 -0
- apsimo/autonomy/scheduler.py +1822 -0
- apsimo/autonomy/synthesis.py +449 -0
- apsimo/backup.py +962 -0
- apsimo/beliefs/__init__.py +23 -0
- apsimo/beliefs/contradictions.py +109 -0
- apsimo/beliefs/decay.py +61 -0
- apsimo/beliefs/engine.py +479 -0
- apsimo/beliefs/models.py +67 -0
- apsimo/beliefs/promotion.py +41 -0
- apsimo/beliefs/resolve.py +58 -0
- apsimo/beliefs/source_claims.py +690 -0
- apsimo/beliefs/source_projection.py +883 -0
- apsimo/beliefs/source_time.py +208 -0
- apsimo/beliefs/store.py +133 -0
- apsimo/briefings/aggregators.py +824 -0
- apsimo/briefings/composer.py +420 -0
- apsimo/briefings/config.py +55 -0
- apsimo/briefings/delivery.py +439 -0
- apsimo/briefings/engagement.py +97 -0
- apsimo/briefings/engine.py +274 -0
- apsimo/briefings/enhancer.py +99 -0
- apsimo/briefings/models.py +183 -0
- apsimo/briefings/scheduler.py +382 -0
- apsimo/briefings/store.py +435 -0
- apsimo/chain/__init__.py +48 -0
- apsimo/chain/block.py +100 -0
- apsimo/chain/cli.py +704 -0
- apsimo/chain/genesis.py +443 -0
- apsimo/chain/identity.py +416 -0
- apsimo/chain/keys.py +1025 -0
- apsimo/chain/local_keys.py +187 -0
- apsimo/chain/manager.py +290 -0
- apsimo/chain/node.py +163 -0
- apsimo/chain/plugin_transactions.py +371 -0
- apsimo/chain/protocol.py +220 -0
- apsimo/chain/state_machine.py +676 -0
- apsimo/chain/storage.py +503 -0
- apsimo/chain/transactions.py +250 -0
- apsimo/chain/validation.py +397 -0
- apsimo/channels/__init__.py +1 -0
- apsimo/channels/manifest.py +31 -0
- apsimo/channels/migrations/001_channels_schema.sql +12 -0
- apsimo/channels/phone_gateways.py +42 -0
- apsimo/channels/presence.py +188 -0
- apsimo/channels/router.py +235 -0
- apsimo/channels/store.py +231 -0
- apsimo/cli.py +2688 -0
- apsimo/cognition/__init__.py +11 -0
- apsimo/cognition/charter.py +398 -0
- apsimo/cognition/drive_governance.py +3530 -0
- apsimo/cognition/evidence_pipeline.py +1627 -0
- apsimo/cognition/external_events.py +932 -0
- apsimo/cognition/goal_spine.py +3488 -0
- apsimo/cognition/introspection.py +214 -0
- apsimo/cognition/prompt.py +150 -0
- apsimo/cognition/runtime.py +108 -0
- apsimo/cognition/trigger.py +154 -0
- apsimo/commitments/__init__.py +18 -0
- apsimo/commitments/local_work.py +355 -0
- apsimo/commitments/store.py +1052 -0
- apsimo/commitments/work.py +91 -0
- apsimo/compat.py +53 -0
- apsimo/compression/__init__.py +467 -0
- apsimo/connectors/__init__.py +21 -0
- apsimo/connectors/base.py +152 -0
- apsimo/connectors/caldav_calendar.py +125 -0
- apsimo/connectors/fs_documents.py +85 -0
- apsimo/connectors/imap_email.py +138 -0
- apsimo/connectors/manager.py +218 -0
- apsimo/connectors/webhook_pull.py +88 -0
- apsimo/contacts/__init__.py +33 -0
- apsimo/contacts/comms.py +357 -0
- apsimo/contacts/config.py +79 -0
- apsimo/contacts/exporters/__init__.py +1 -0
- apsimo/contacts/exporters/vcard.py +71 -0
- apsimo/contacts/identity_links.py +251 -0
- apsimo/contacts/importer.py +280 -0
- apsimo/contacts/importers/__init__.py +1 -0
- apsimo/contacts/importers/batch.py +43 -0
- apsimo/contacts/importers/macos_contacts.py +101 -0
- apsimo/contacts/migrations/001_contacts_schema.sql +141 -0
- apsimo/contacts/migrations/002_trust_scopes.sql +36 -0
- apsimo/contacts/migrations/003_open_gateway_enum.sql +32 -0
- apsimo/contacts/migrations/004_contact_provision_operations.sql +18 -0
- apsimo/contacts/migrations/005_identity_links.sql +27 -0
- apsimo/contacts/models.py +308 -0
- apsimo/contacts/scoring.py +16 -0
- apsimo/contacts/store.py +1623 -0
- apsimo/contacts/transport_ingress.py +252 -0
- apsimo/contacts/world_bridge.py +314 -0
- apsimo/contextgate/__init__.py +69 -0
- apsimo/contextgate/chunker.py +169 -0
- apsimo/contextgate/estimate.py +54 -0
- apsimo/contextgate/gate.py +313 -0
- apsimo/contextgate/retrieve.py +115 -0
- apsimo/delivery/__init__.py +16 -0
- apsimo/delivery/bridge.py +1260 -0
- apsimo/delivery/channels.py +526 -0
- apsimo/delivery/classification.py +50 -0
- apsimo/delivery/rate_limiter.py +268 -0
- apsimo/delivery/reachout_policy.py +206 -0
- apsimo/directed/__init__.py +22 -0
- apsimo/directed/audit.py +167 -0
- apsimo/directed/intake.py +95 -0
- apsimo/directed/models.py +191 -0
- apsimo/directed/service.py +509 -0
- apsimo/directives/__init__.py +25 -0
- apsimo/directives/evidence.py +87 -0
- apsimo/directives/extractor.py +188 -0
- apsimo/directives/guard.py +364 -0
- apsimo/directives/models.py +206 -0
- apsimo/directives/service.py +372 -0
- apsimo/directives/store.py +167 -0
- apsimo/doctor.py +2173 -0
- apsimo/environment.py +43 -0
- apsimo/events/__init__.py +33 -0
- apsimo/events/broadcaster.py +98 -0
- apsimo/events/bus.py +217 -0
- apsimo/events/journal.py +863 -0
- apsimo/events/stream.py +131 -0
- apsimo/events/types.py +150 -0
- apsimo/execution_results.py +357 -0
- apsimo/feedback/__init__.py +5 -0
- apsimo/feedback/store.py +76 -0
- apsimo/feeds/__init__.py +19 -0
- apsimo/feeds/cli.py +84 -0
- apsimo/feeds/engine.py +437 -0
- apsimo/feeds/example-feed.yaml +77 -0
- apsimo/feeds/hermes_cron.py +126 -0
- apsimo/feeds/manager.py +235 -0
- apsimo/feeds/spec.py +250 -0
- apsimo/feeds/template.py +202 -0
- apsimo/gate/__init__.py +18 -0
- apsimo/gate/audit.py +61 -0
- apsimo/gate/communication_policy.py +166 -0
- apsimo/gate/config.py +72 -0
- apsimo/gate/context_provenance.py +170 -0
- apsimo/gate/env_risk.py +226 -0
- apsimo/gate/guard_audit.py +353 -0
- apsimo/gate/layers/__init__.py +1 -0
- apsimo/gate/layers/base.py +15 -0
- apsimo/gate/layers/l1_recipient.py +66 -0
- apsimo/gate/layers/l2_pii.py +134 -0
- apsimo/gate/layers/l3_cross_context.py +50 -0
- apsimo/gate/layers/l4_trust_tier.py +78 -0
- apsimo/gate/layers/l5_injection.py +199 -0
- apsimo/gate/layers/l6_review.py +86 -0
- apsimo/gate/layers/l7_delay.py +100 -0
- apsimo/gate/layers/tom2_epistemic.py +185 -0
- apsimo/gate/models.py +64 -0
- apsimo/gate/pending_dispatch.py +5 -0
- apsimo/gate/pipeline.py +206 -0
- apsimo/gate/rejection.py +259 -0
- apsimo/gate/response_guard.py +700 -0
- apsimo/gate/rulesets/injection_v1.yaml +51 -0
- apsimo/gate/surface_policy.py +189 -0
- apsimo/gate/taint.py +226 -0
- apsimo/genesis.json +9 -0
- apsimo/goals/__init__.py +100 -0
- apsimo/goals/config.py +38 -0
- apsimo/goals/decomposer.py +421 -0
- apsimo/goals/engine.py +617 -0
- apsimo/goals/inference.py +354 -0
- apsimo/goals/models.py +302 -0
- apsimo/goals/priority.py +270 -0
- apsimo/goals/queue_bridge.py +149 -0
- apsimo/goals/replan.py +450 -0
- apsimo/goals/schema.sql +89 -0
- apsimo/goals/store.py +692 -0
- apsimo/governed_actions.py +1708 -0
- apsimo/harness_integration/__init__.py +45 -0
- apsimo/harness_integration/context.py +41 -0
- apsimo/harness_integration/skills.py +231 -0
- apsimo/identity/__init__.py +26 -0
- apsimo/identity/participants.py +181 -0
- apsimo/identity/resolver.py +329 -0
- apsimo/identity_bootstrap/__init__.py +5 -0
- apsimo/identity_bootstrap/builder.py +208 -0
- apsimo/identity_bootstrap/corpus.py +443 -0
- apsimo/identity_bootstrap/models.py +54 -0
- apsimo/identity_bootstrap/runner.py +353 -0
- apsimo/identity_bootstrap/seeders/__init__.py +25 -0
- apsimo/identity_bootstrap/seeders/briefings.py +109 -0
- apsimo/identity_bootstrap/seeders/chain.py +57 -0
- apsimo/identity_bootstrap/seeders/goals.py +128 -0
- apsimo/identity_bootstrap/seeders/memory.py +191 -0
- apsimo/identity_bootstrap/seeders/neo4j_cognition.py +79 -0
- apsimo/identity_bootstrap/seeders/relationship.py +152 -0
- apsimo/identity_bootstrap/seeders/sessions.py +67 -0
- apsimo/identity_bootstrap/seeders/skills.py +92 -0
- apsimo/identity_bootstrap/seeders/task_queue.py +72 -0
- apsimo/identity_bootstrap/seeders/world_model.py +143 -0
- apsimo/identity_bootstrap/self_query.py +92 -0
- apsimo/identity_bootstrap/self_reflection.py +155 -0
- apsimo/identity_bootstrap/skill.py +37 -0
- apsimo/identity_bootstrap/verifier.py +436 -0
- apsimo/initiatives/__init__.py +20 -0
- apsimo/initiatives/action_registry.py +454 -0
- apsimo/initiatives/approval_authority.py +2105 -0
- apsimo/initiatives/approval_policy.py +123 -0
- apsimo/initiatives/assignment.py +263 -0
- apsimo/initiatives/backup_evidence.py +100 -0
- apsimo/initiatives/context_freshness.py +103 -0
- apsimo/initiatives/models.py +318 -0
- apsimo/initiatives/native_work.py +270 -0
- apsimo/initiatives/standing_approvals.py +232 -0
- apsimo/initiatives/store.py +1081 -0
- apsimo/initiatives/temporal_followup.py +410 -0
- apsimo/intelligence/__init__.py +1 -0
- apsimo/intelligence/cognition/__init__.py +24 -0
- apsimo/intelligence/cognition/gap_detector.py +148 -0
- apsimo/intelligence/cognition/metalearner.py +547 -0
- apsimo/intelligence/cognition/metrics_collector.py +217 -0
- apsimo/intelligence/cognition/performance_index.py +299 -0
- apsimo/intelligence/cognition/registry.py +192 -0
- apsimo/intelligence/cognition/strategy_adjuster.py +222 -0
- apsimo/intelligence/cognition/types.py +16 -0
- apsimo/intelligence/components/__init__.py +66 -0
- apsimo/intelligence/components/anomaly_detector.py +413 -0
- apsimo/intelligence/components/initiative_engine.py +2643 -0
- apsimo/intelligence/components/preference_learner.py +521 -0
- apsimo/intelligence/components/research_orchestrator.py +358 -0
- apsimo/intelligence/components/self_directed_thinker.py +221 -0
- apsimo/intelligence/components/self_reflector.py +252 -0
- apsimo/intelligence/components/session_continuity.py +154 -0
- apsimo/intelligence/components/task_planner.py +320 -0
- apsimo/intelligence/components/tool_learner.py +217 -0
- apsimo/intelligence/graph/__init__.py +79 -0
- apsimo/intelligence/graph/client.py +2483 -0
- apsimo/intelligence/graph/consolidator.py +405 -0
- apsimo/intelligence/graph/distiller.py +312 -0
- apsimo/intelligence/graph/migrations.py +129 -0
- apsimo/intelligence/graph/queries.py +248 -0
- apsimo/intelligence/graph/recall.py +281 -0
- apsimo/intelligence/graph/reconciler.py +144 -0
- apsimo/intelligence/graph/schema.py +337 -0
- apsimo/intelligence/graph/selection.py +252 -0
- apsimo/intelligence/learning/__init__.py +17 -0
- apsimo/intelligence/learning/continuous_learner.py +245 -0
- apsimo/intelligence/learning/feedback_store.py +321 -0
- apsimo/intelligence/mind_model/__init__.py +1 -0
- apsimo/intelligence/mind_model/graph_baseline.py +136 -0
- apsimo/intelligence/mind_model/signal_collector.py +361 -0
- apsimo/intelligence/relationships/__init__.py +11 -0
- apsimo/intelligence/relationships/profiler.py +389 -0
- apsimo/intelligence/relationships/scorer.py +560 -0
- apsimo/intelligence/relationships/signal_floor.py +66 -0
- apsimo/intelligence/relationships/trust_tiers.py +300 -0
- apsimo/intelligence/synthesis/__init__.py +40 -0
- apsimo/intelligence/synthesis/connection_discoverer.py +379 -0
- apsimo/intelligence/synthesis/cross_domain_analyzer.py +287 -0
- apsimo/intelligence/synthesis/insight_deliverer.py +171 -0
- apsimo/intelligence/synthesis/insight_store.py +79 -0
- apsimo/intelligence/synthesis/insight_validator.py +183 -0
- apsimo/intelligence/synthesis/novelty_scorer.py +267 -0
- apsimo/intelligence/turn_middleware/__init__.py +15 -0
- apsimo/intelligence/turn_middleware/memory_sync.py +119 -0
- apsimo/mcp/__init__.py +41 -0
- apsimo/mcp/__main__.py +6 -0
- apsimo/mcp/config.py +287 -0
- apsimo/mcp/server.py +501 -0
- apsimo/migrations.py +187 -0
- apsimo/mining/__init__.py +27 -0
- apsimo/mining/corpus.py +239 -0
- apsimo/mining/escalations.py +289 -0
- apsimo/mining/models.py +169 -0
- apsimo/mining/store.py +210 -0
- apsimo/models/__init__.py +30 -0
- apsimo/models/memory.py +80 -0
- apsimo/models/mesh.py +72 -0
- apsimo/models/person.py +104 -0
- apsimo/models/signal.py +108 -0
- apsimo/observations/__init__.py +15 -0
- apsimo/observations/store.py +277 -0
- apsimo/patterns/__init__.py +6 -0
- apsimo/patterns/extract.py +187 -0
- apsimo/patterns/store.py +227 -0
- apsimo/persona/__init__.py +1 -0
- apsimo/persona/engine.py +611 -0
- apsimo/persona/manifest.py +140 -0
- apsimo/projects/__init__.py +28 -0
- apsimo/projects/engine.py +1681 -0
- apsimo/projects/event_outbox.py +188 -0
- apsimo/projects/models.py +216 -0
- apsimo/projects/planner.py +181 -0
- apsimo/projects/store.py +1446 -0
- apsimo/proposals/__init__.py +12 -0
- apsimo/proposals/engine.py +114 -0
- apsimo/proposals/models.py +207 -0
- apsimo/qualification/__init__.py +1 -0
- apsimo/qualification/cases.py +75 -0
- apsimo/qualification/cli.py +51 -0
- apsimo/qualification/memory_cases.py +209 -0
- apsimo/qualification/records.py +92 -0
- apsimo/qualification/report.py +87 -0
- apsimo/qualification/runner.py +311 -0
- apsimo/qualification/structured_cases.py +131 -0
- apsimo/reasoning/__init__.py +13 -0
- apsimo/reasoning/executor.py +506 -0
- apsimo/reasoning/loop.py +373 -0
- apsimo/reasoning/native_tools/__init__.py +16 -0
- apsimo/reasoning/native_tools/calculate.py +141 -0
- apsimo/reasoning/native_tools/file_ops.py +150 -0
- apsimo/reasoning/native_tools/web_search.py +49 -0
- apsimo/reasoning/tool_policy.py +182 -0
- apsimo/redact/__init__.py +176 -0
- apsimo/repos/__init__.py +5 -0
- apsimo/repos/mirrors.py +204 -0
- apsimo/research/__init__.py +41 -0
- apsimo/research/artifact.py +482 -0
- apsimo/research/gatherer.py +387 -0
- apsimo/research/pipeline.py +513 -0
- apsimo/research/search/__init__.py +7 -0
- apsimo/research/search/base.py +41 -0
- apsimo/research/search/brave.py +59 -0
- apsimo/research/search/cache.py +51 -0
- apsimo/research/search/duckduckgo.py +103 -0
- apsimo/research/search/orchestrator.py +119 -0
- apsimo/research/search/serpapi.py +59 -0
- apsimo/research/search/tavily.py +59 -0
- apsimo/research/synthesizer.py +309 -0
- apsimo/router/__init__.py +30 -0
- apsimo/router/complexity_scorer.py +148 -0
- apsimo/router/endpoints.py +153 -0
- apsimo/router/fallback.py +58 -0
- apsimo/router/functions.py +243 -0
- apsimo/router/native_policy.py +52 -0
- apsimo/router/router.py +762 -0
- apsimo/router/self_learning.py +174 -0
- apsimo/router/tiers.py +677 -0
- apsimo/sandbox/__init__.py +21 -0
- apsimo/sandbox/backend.py +195 -0
- apsimo/sandbox/manager.py +173 -0
- apsimo/scope_bounds.py +7 -0
- apsimo/secrets/__init__.py +6 -0
- apsimo/secrets/backends/__init__.py +8 -0
- apsimo/secrets/backends/base.py +42 -0
- apsimo/secrets/backends/env.py +110 -0
- apsimo/secrets/backends/keyring.py +72 -0
- apsimo/secrets/backends/onepassword.py +232 -0
- apsimo/secrets/cli.py +191 -0
- apsimo/secrets/manager.py +160 -0
- apsimo/secrets/migration.py +101 -0
- apsimo/secrets/types.py +98 -0
- apsimo/seed.py +41 -0
- apsimo/self_model/__init__.py +37 -0
- apsimo/self_model/appraisals.py +673 -0
- apsimo/self_model/benchmark.py +1314 -0
- apsimo/self_model/brief.py +40 -0
- apsimo/self_model/event_concerns.py +1128 -0
- apsimo/self_model/execution_forecasts.py +353 -0
- apsimo/self_model/expectations.py +1595 -0
- apsimo/self_model/experiments.py +1150 -0
- apsimo/self_model/journal.py +148 -0
- apsimo/self_model/judgments.py +705 -0
- apsimo/self_model/native_outcomes.py +55 -0
- apsimo/self_model/params.py +220 -0
- apsimo/self_model/perspective.py +246 -0
- apsimo/self_model/reconcile.py +183 -0
- apsimo/self_model/reply_forecasts.py +381 -0
- apsimo/self_model/runtime_forecasts.py +296 -0
- apsimo/self_model/runtime_models.py +67 -0
- apsimo/self_model/settlement.py +207 -0
- apsimo/self_model/situation.py +1731 -0
- apsimo/self_model/store.py +883 -0
- apsimo/self_model/supervised.py +137 -0
- apsimo/self_model/thinker.py +99 -0
- apsimo/self_model/trust.py +388 -0
- apsimo/self_model/workspace.py +2388 -0
- apsimo/server.py +4197 -0
- apsimo/services/__init__.py +1 -0
- apsimo/services/agent_bridge.py +474 -0
- apsimo/services/initiative_executor.py +914 -0
- apsimo/services/instance.py +297 -0
- apsimo/sessions/__init__.py +22 -0
- apsimo/sessions/config.py +13 -0
- apsimo/sessions/context_loader.py +88 -0
- apsimo/sessions/federation_session.py +75 -0
- apsimo/sessions/isolated_session.py +98 -0
- apsimo/sessions/reports.py +84 -0
- apsimo/sessions/store.py +148 -0
- apsimo/setup.py +2818 -0
- apsimo/setup_hermes.py +879 -0
- apsimo/setup_local_work.py +218 -0
- apsimo/setup_native_goals.py +134 -0
- apsimo/setup_native_reviews.py +115 -0
- apsimo/skills/__init__.py +10 -0
- apsimo/skills/base.py +108 -0
- apsimo/skills/budget.py +28 -0
- apsimo/skills/executor.py +493 -0
- apsimo/skills/executors/__init__.py +1 -0
- apsimo/skills/executors/behavioral_correction.py +75 -0
- apsimo/skills/executors/capability_gap.py +38 -0
- apsimo/skills/executors/data_quality.py +163 -0
- apsimo/skills/executors/knowledge_acquisition.py +41 -0
- apsimo/skills/executors/operational_hygiene.py +185 -0
- apsimo/skills/executors/subsystem_health.py +169 -0
- apsimo/skills/hermes_export.py +431 -0
- apsimo/skills/index.py +123 -0
- apsimo/skills/learning/__init__.py +21 -0
- apsimo/skills/learning/novelty_detector.py +206 -0
- apsimo/skills/learning/pattern_extractor.py +199 -0
- apsimo/skills/learning/triggers.py +159 -0
- apsimo/skills/loader.py +246 -0
- apsimo/skills/migrations/002_progressive_loading.sql +6 -0
- apsimo/skills/migrations/backfill_triggers.py +20 -0
- apsimo/skills/models.py +202 -0
- apsimo/skills/packager.py +128 -0
- apsimo/skills/protocols.py +70 -0
- apsimo/skills/registry.py +191 -0
- apsimo/skills/runtime.py +58 -0
- apsimo/skills/sandbox_runner.py +229 -0
- apsimo/skills/scheduler.py +129 -0
- apsimo/skills/schema.py +79 -0
- apsimo/skills/security/__init__.py +12 -0
- apsimo/skills/security/guards.py +53 -0
- apsimo/skills/security/scanner.py +223 -0
- apsimo/skills_memory/__init__.py +26 -0
- apsimo/skills_memory/distill.py +159 -0
- apsimo/skills_memory/models.py +85 -0
- apsimo/skills_memory/retrieve.py +62 -0
- apsimo/skills_memory/store.py +172 -0
- apsimo/surprise/__init__.py +6 -0
- apsimo/surprise/accumulation.py +57 -0
- apsimo/surprise/scorer.py +102 -0
- apsimo/surprise/store.py +203 -0
- apsimo/task_queue/__init__.py +69 -0
- apsimo/task_queue/action_receipts.py +148 -0
- apsimo/task_queue/approval_relay_canary.py +108 -0
- apsimo/task_queue/config.py +85 -0
- apsimo/task_queue/contract.py +361 -0
- apsimo/task_queue/events.py +130 -0
- apsimo/task_queue/governor.py +1031 -0
- apsimo/task_queue/handlers/__init__.py +16 -0
- apsimo/task_queue/handlers/base.py +37 -0
- apsimo/task_queue/handlers/inference.py +640 -0
- apsimo/task_queue/handlers/monitoring.py +116 -0
- apsimo/task_queue/handlers/registry.py +75 -0
- apsimo/task_queue/handlers/subtask_handler.py +173 -0
- apsimo/task_queue/handlers/system_maintenance.py +147 -0
- apsimo/task_queue/mesh_integration.py +111 -0
- apsimo/task_queue/models.py +317 -0
- apsimo/task_queue/queue_manager.py +8286 -0
- apsimo/task_queue/routing.py +287 -0
- apsimo/task_queue/scheduler.py +252 -0
- apsimo/task_queue/schema.sql +197 -0
- apsimo/task_queue/work_control.py +342 -0
- apsimo/task_queue/worker.py +993 -0
- apsimo/telemetry.py +145 -0
- apsimo/tom/__init__.py +6 -0
- apsimo/tom/affect.py +387 -0
- apsimo/tom/approvals.py +171 -0
- apsimo/tom/arcs.py +896 -0
- apsimo/tom/asymmetry.py +131 -0
- apsimo/tom/eligibility.py +248 -0
- apsimo/tom/engagement.py +214 -0
- apsimo/tom/exposure.py +214 -0
- apsimo/tom/extractor.py +306 -0
- apsimo/tom/fact_adapters.py +144 -0
- apsimo/tom/facts.py +326 -0
- apsimo/tom/integration.py +592 -0
- apsimo/tom/leveled.py +118 -0
- apsimo/tom/levels.py +247 -0
- apsimo/tom/recipient_audit.py +995 -0
- apsimo/tom/recipient_simulator.py +593 -0
- apsimo/tom/source_lineage.py +93 -0
- apsimo/tom/tom2.py +277 -0
- apsimo/tom/visibility.py +559 -0
- apsimo/tom/visibility_store.py +414 -0
- apsimo/tools/__init__.py +0 -0
- apsimo/tools/definitions.py +740 -0
- apsimo/tools/handlers.py +943 -0
- apsimo/toolsmith/__init__.py +26 -0
- apsimo/toolsmith/authority.py +166 -0
- apsimo/toolsmith/engine.py +559 -0
- apsimo/toolsmith/integrity.py +100 -0
- apsimo/toolsmith/miner.py +145 -0
- apsimo/toolsmith/policy.py +110 -0
- apsimo/toolsmith/registry.py +635 -0
- apsimo/turns/__init__.py +17 -0
- apsimo/turns/audio.py +134 -0
- apsimo/turns/documents.py +235 -0
- apsimo/turns/executions.py +486 -0
- apsimo/turns/hermes_history.py +245 -0
- apsimo/turns/hermes_kanban.py +268 -0
- apsimo/turns/hermes_work.py +96 -0
- apsimo/turns/idempotency.py +752 -0
- apsimo/turns/local_work.py +115 -0
- apsimo/turns/media.py +581 -0
- apsimo/turns/reported_workers.py +196 -0
- apsimo/turns/source_annotations.py +283 -0
- apsimo/turns/source_attribution.py +154 -0
- apsimo/turns/source_read.py +351 -0
- apsimo/turns/source_vectors.py +263 -0
- apsimo/turns/video.py +210 -0
- apsimo/util/autonomy_preset.py +220 -0
- apsimo/util/instance.py +92 -0
- apsimo/util/model_output.py +25 -0
- apsimo/util/quiet_hours.py +27 -0
- apsimo/util/session_safety.py +37 -0
- apsimo/util/temporal.py +343 -0
- apsimo/vector/__init__.py +75 -0
- apsimo/vector/backfill.py +171 -0
- apsimo/vector/caption.py +114 -0
- apsimo/vector/collections.py +51 -0
- apsimo/vector/config.py +102 -0
- apsimo/vector/embedder.py +670 -0
- apsimo/vector/image_preprocess.py +406 -0
- apsimo/vector/image_store.py +296 -0
- apsimo/vector/indexes.py +162 -0
- apsimo/vector/migrate.py +334 -0
- apsimo/vector/multimodal_provider.py +417 -0
- apsimo/vector/multimodal_types.py +87 -0
- apsimo/vector/openai_provider.py +119 -0
- apsimo/vector/query.py +49 -0
- apsimo/vector/reranker.py +565 -0
- apsimo/vector/safety_image.py +159 -0
- apsimo/vector/scanner.py +197 -0
- apsimo/vector/setup.py +289 -0
- apsimo/vector/store.py +533 -0
- apsimo/vector/tiers.py +263 -0
- apsimo/work_orders.py +925 -0
- apsimo/workers/__init__.py +21 -0
- apsimo/workers/agent_bridge.py +640 -0
- apsimo/workers/colony_worker.py +382 -0
- apsimo/workers/queue_worker.py +441 -0
- apsimo/workers/skills_sync.py +152 -0
- apsimo/world_model/__init__.py +71 -0
- apsimo/world_model/causal_maintenance.py +131 -0
- apsimo/world_model/causal_policy.py +43 -0
- apsimo/world_model/causal_query.py +125 -0
- apsimo/world_model/confidence.py +54 -0
- apsimo/world_model/config.py +64 -0
- apsimo/world_model/constants.py +97 -0
- apsimo/world_model/entities.py +145 -0
- apsimo/world_model/expectation_resolvers.py +177 -0
- apsimo/world_model/extraction/__init__.py +7 -0
- apsimo/world_model/extraction/base.py +62 -0
- apsimo/world_model/extraction/conversation_extractor.py +262 -0
- apsimo/world_model/extraction/detector.py +74 -0
- apsimo/world_model/extraction/document_extractor.py +78 -0
- apsimo/world_model/extraction/formats/__init__.py +24 -0
- apsimo/world_model/extraction/formats/csv_fmt.py +68 -0
- apsimo/world_model/extraction/formats/html_fmt.py +72 -0
- apsimo/world_model/extraction/formats/json_fmt.py +68 -0
- apsimo/world_model/extraction/formats/pdf.py +43 -0
- apsimo/world_model/extraction/formats/text.py +27 -0
- apsimo/world_model/extraction/llm_extractor.py +164 -0
- apsimo/world_model/extraction/pipeline.py +73 -0
- apsimo/world_model/integrations/__init__.py +5 -0
- apsimo/world_model/integrations/mind_model_bridge.py +115 -0
- apsimo/world_model/integrations/social_intel_bridge.py +120 -0
- apsimo/world_model/jobs/__init__.py +4 -0
- apsimo/world_model/jobs/extraction_job.py +168 -0
- apsimo/world_model/llm_extract.py +572 -0
- apsimo/world_model/neo4j/__init__.py +5 -0
- apsimo/world_model/neo4j/backend.py +654 -0
- apsimo/world_model/observations.py +155 -0
- apsimo/world_model/populator.py +307 -0
- apsimo/world_model/postgres/__init__.py +1 -0
- apsimo/world_model/postgres/backend.py +683 -0
- apsimo/world_model/relationships.py +25 -0
- apsimo/world_model/resolution/__init__.py +13 -0
- apsimo/world_model/resolution/entity_resolver.py +232 -0
- apsimo/world_model/resolution/merge_audit.py +16 -0
- apsimo/world_model/resolution/merge_workflow.py +117 -0
- apsimo/world_model/source_reports.py +121 -0
- apsimo/world_model/sqlite/__init__.py +4 -0
- apsimo/world_model/sqlite/backend.py +855 -0
- apsimo/world_model/sqlite/schema.sql +132 -0
- apsimo/world_model/store.py +545 -0
- apsimo-1.3.0.dist-info/METADATA +78 -0
- apsimo-1.3.0.dist-info/RECORD +614 -0
- apsimo-1.3.0.dist-info/WHEEL +5 -0
- apsimo-1.3.0.dist-info/entry_points.txt +11 -0
- apsimo-1.3.0.dist-info/licenses/LICENSE +21 -0
- apsimo-1.3.0.dist-info/top_level.txt +2 -0
- colony_sidecar/__init__.py +4 -0
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"""Colony's trust tier system — Colony's own trust levels for people it interacts with.
|
|
2
|
+
|
|
3
|
+
Trust tiers represent how much Colony trusts each person based on Colony's own
|
|
4
|
+
observations of interaction patterns over time. "Inner circle" means Colony has
|
|
5
|
+
developed high trust through consistent, positive engagement — not simply that
|
|
6
|
+
the owner designated them as important.
|
|
7
|
+
|
|
8
|
+
The owner can set manual overrides to inform Colony's initial assessment, but
|
|
9
|
+
tiers are ultimately Colony's independent view of its social world.
|
|
10
|
+
|
|
11
|
+
Two gatekeeping systems
|
|
12
|
+
-----------------------
|
|
13
|
+
TIER_CAPABILITIES governs two distinct concerns that must not be conflated:
|
|
14
|
+
|
|
15
|
+
- ``colony_*`` keys: what Colony will do **autonomously** for this relationship
|
|
16
|
+
(reach out proactively, share full context, propose tier changes).
|
|
17
|
+
- ``contact_*`` keys: what the contact can **request** from Colony
|
|
18
|
+
(reminders, task modifications).
|
|
19
|
+
|
|
20
|
+
Colony's autonomous behaviors are gated by trust tiers. Contact-facing permissions
|
|
21
|
+
are gated by the permissions system (colony.intelligence.relationships.permissions).
|
|
22
|
+
"""
|
|
23
|
+
from dataclasses import dataclass, field
|
|
24
|
+
from datetime import datetime
|
|
25
|
+
from enum import Enum
|
|
26
|
+
from typing import Dict, List, Optional
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class TrustTier(str, Enum):
|
|
30
|
+
"""Colony's trust levels for people it interacts with.
|
|
31
|
+
|
|
32
|
+
Each tier reflects Colony's accumulated assessment of a person based on
|
|
33
|
+
interaction patterns observed across connected gateways. Tiers gate what
|
|
34
|
+
Colony is willing to do autonomously on behalf of or in relation to each person.
|
|
35
|
+
"""
|
|
36
|
+
INNER_CIRCLE = "inner_circle"
|
|
37
|
+
TRUSTED = "trusted"
|
|
38
|
+
REGULAR = "regular"
|
|
39
|
+
# group_guest: trust granted WITHIN a shared context (a group) only, never 1:1.
|
|
40
|
+
# Sits below regular; gated as strictly as peripheral for disclosure.
|
|
41
|
+
GROUP_GUEST = "group_guest"
|
|
42
|
+
PERIPHERAL = "peripheral"
|
|
43
|
+
SILENCED = "silenced"
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
TIER_CAPABILITIES = {
|
|
47
|
+
TrustTier.INNER_CIRCLE: {
|
|
48
|
+
# What Colony does autonomously for this relationship
|
|
49
|
+
"colony_proactive_reach_out": True,
|
|
50
|
+
"colony_priority_notifications": True,
|
|
51
|
+
"colony_full_context_sharing": True,
|
|
52
|
+
"colony_proposes_tier_changes": True,
|
|
53
|
+
|
|
54
|
+
# What the contact can request from Colony
|
|
55
|
+
"contact_can_request_reminders": True,
|
|
56
|
+
"contact_can_modify_tasks": True,
|
|
57
|
+
},
|
|
58
|
+
TrustTier.TRUSTED: {
|
|
59
|
+
"colony_proactive_reach_out": False, # Colony waits; doesn't initiate
|
|
60
|
+
"colony_priority_notifications": True,
|
|
61
|
+
"colony_full_context_sharing": True,
|
|
62
|
+
"colony_proposes_tier_changes": True,
|
|
63
|
+
|
|
64
|
+
"contact_can_request_reminders": True,
|
|
65
|
+
"contact_can_modify_tasks": False,
|
|
66
|
+
},
|
|
67
|
+
TrustTier.REGULAR: {
|
|
68
|
+
"colony_proactive_reach_out": False,
|
|
69
|
+
"colony_priority_notifications": False,
|
|
70
|
+
"colony_full_context_sharing": False,
|
|
71
|
+
"colony_proposes_tier_changes": False,
|
|
72
|
+
|
|
73
|
+
"contact_can_request_reminders": False,
|
|
74
|
+
"contact_can_modify_tasks": False,
|
|
75
|
+
},
|
|
76
|
+
TrustTier.GROUP_GUEST: {
|
|
77
|
+
# Converses only within the shared group; Colony does nothing autonomously for
|
|
78
|
+
# them and they cannot drive Colony. Granted by group membership, never 1:1.
|
|
79
|
+
"colony_proactive_reach_out": False,
|
|
80
|
+
"colony_priority_notifications": False,
|
|
81
|
+
"colony_full_context_sharing": False,
|
|
82
|
+
"colony_proposes_tier_changes": False,
|
|
83
|
+
|
|
84
|
+
"contact_can_request_reminders": False,
|
|
85
|
+
"contact_can_modify_tasks": False,
|
|
86
|
+
},
|
|
87
|
+
TrustTier.PERIPHERAL: {
|
|
88
|
+
"colony_proactive_reach_out": False,
|
|
89
|
+
"colony_priority_notifications": False,
|
|
90
|
+
"colony_full_context_sharing": False,
|
|
91
|
+
"colony_proposes_tier_changes": False,
|
|
92
|
+
|
|
93
|
+
"contact_can_request_reminders": False,
|
|
94
|
+
"contact_can_modify_tasks": False,
|
|
95
|
+
},
|
|
96
|
+
TrustTier.SILENCED: {
|
|
97
|
+
"colony_proactive_reach_out": False,
|
|
98
|
+
"colony_priority_notifications": False,
|
|
99
|
+
"colony_full_context_sharing": False,
|
|
100
|
+
"colony_proposes_tier_changes": False,
|
|
101
|
+
"colony_excluded_from_digests": True,
|
|
102
|
+
|
|
103
|
+
"contact_can_request_reminders": False,
|
|
104
|
+
"contact_can_modify_tasks": False,
|
|
105
|
+
},
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
@dataclass
|
|
110
|
+
class TierChangeProposalRecord:
|
|
111
|
+
"""A pending tier-change proposal awaiting owner approval."""
|
|
112
|
+
person_id: str
|
|
113
|
+
current_tier: TrustTier
|
|
114
|
+
proposed_tier: TrustTier
|
|
115
|
+
direction: str # "upward" | "downward"
|
|
116
|
+
evidence_score: float
|
|
117
|
+
reasoning: str
|
|
118
|
+
created_at: datetime = field(default_factory=datetime.now)
|
|
119
|
+
approved: Optional[bool] = None
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
class TrustTierManager:
|
|
123
|
+
"""Manage Colony's trust tiers and the capabilities they gate.
|
|
124
|
+
|
|
125
|
+
Colony independently maintains trust tiers for each person it interacts with.
|
|
126
|
+
Manual overrides allow the owner to inform Colony's initial assessment (e.g.
|
|
127
|
+
elevating a new contact Colony hasn't yet observed), but Colony's evidence-based
|
|
128
|
+
scoring is the default path for tier assignment.
|
|
129
|
+
|
|
130
|
+
Colony MAY propose tier changes upward or downward based on its own observations.
|
|
131
|
+
Proposals require owner approval and are tracked via pending_proposals.
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
def __init__(self):
|
|
135
|
+
self._manual_overrides: Dict[str, TrustTier] = {}
|
|
136
|
+
self._pending_proposals: Dict[str, TierChangeProposalRecord] = {}
|
|
137
|
+
|
|
138
|
+
def get_tier(self, score: float, person_id: Optional[str] = None) -> TrustTier:
|
|
139
|
+
"""Get tier from score, respecting manual overrides."""
|
|
140
|
+
# Check for manual override
|
|
141
|
+
if person_id and person_id in self._manual_overrides:
|
|
142
|
+
return self._manual_overrides[person_id]
|
|
143
|
+
|
|
144
|
+
# Score-based tier
|
|
145
|
+
if score >= 80:
|
|
146
|
+
return TrustTier.INNER_CIRCLE
|
|
147
|
+
elif score >= 60:
|
|
148
|
+
return TrustTier.TRUSTED
|
|
149
|
+
elif score >= 30:
|
|
150
|
+
return TrustTier.REGULAR
|
|
151
|
+
else:
|
|
152
|
+
return TrustTier.PERIPHERAL
|
|
153
|
+
|
|
154
|
+
def set_manual_tier(self, person_id: str, tier: TrustTier) -> None:
|
|
155
|
+
"""Override Colony's assessed tier for a person.
|
|
156
|
+
|
|
157
|
+
Used when the owner wants to inform Colony's trust level for someone
|
|
158
|
+
before Colony has built its own evidence base (e.g. a new contact).
|
|
159
|
+
Colony's score-based assessment will resume if the override is cleared.
|
|
160
|
+
"""
|
|
161
|
+
self._manual_overrides[person_id] = tier
|
|
162
|
+
|
|
163
|
+
def clear_manual_tier(self, person_id: str) -> None:
|
|
164
|
+
"""Remove manual override, restoring Colony's evidence-based tier."""
|
|
165
|
+
self._manual_overrides.pop(person_id, None)
|
|
166
|
+
|
|
167
|
+
def has_manual_override(self, person_id: str) -> bool:
|
|
168
|
+
"""Return True if a manual override is set for this person."""
|
|
169
|
+
return person_id in self._manual_overrides
|
|
170
|
+
|
|
171
|
+
def get_capabilities(self, tier: TrustTier) -> Dict[str, bool]:
|
|
172
|
+
"""Get capabilities for a tier."""
|
|
173
|
+
return TIER_CAPABILITIES.get(tier, TIER_CAPABILITIES[TrustTier.REGULAR])
|
|
174
|
+
|
|
175
|
+
def can(self, tier: TrustTier, capability: str) -> bool:
|
|
176
|
+
"""Check if tier has a capability."""
|
|
177
|
+
caps = self.get_capabilities(tier)
|
|
178
|
+
return caps.get(capability, False)
|
|
179
|
+
|
|
180
|
+
def persons_by_tier(
|
|
181
|
+
self,
|
|
182
|
+
persons: Dict[str, float]
|
|
183
|
+
) -> Dict[TrustTier, List[str]]:
|
|
184
|
+
"""Group persons by their tier."""
|
|
185
|
+
result = {tier: [] for tier in TrustTier}
|
|
186
|
+
for person_id, score in persons.items():
|
|
187
|
+
tier = self.get_tier(score, person_id)
|
|
188
|
+
result[tier].append(person_id)
|
|
189
|
+
return result
|
|
190
|
+
|
|
191
|
+
def tier_change_proposal(
|
|
192
|
+
self,
|
|
193
|
+
person_id: str,
|
|
194
|
+
evidence_score: float,
|
|
195
|
+
days_at_score: int = 0,
|
|
196
|
+
interaction_count: int = 0,
|
|
197
|
+
) -> Optional[TierChangeProposalRecord]:
|
|
198
|
+
"""Generate a tier-change proposal based on Colony's evidence.
|
|
199
|
+
|
|
200
|
+
Colony MAY propose tier changes upward or downward. Proposals are
|
|
201
|
+
surfaced via the briefing system and require owner approval.
|
|
202
|
+
|
|
203
|
+
Upward: score above threshold for 30+ days with ≥20 interactions.
|
|
204
|
+
Downward: score below threshold for 21+ days; no manual override required.
|
|
205
|
+
|
|
206
|
+
Colony MUST NOT change tiers automatically — proposals only.
|
|
207
|
+
"""
|
|
208
|
+
current_tier = self.get_tier(evidence_score, person_id)
|
|
209
|
+
# Get what the tier would be without override
|
|
210
|
+
score_tier = self._score_to_tier(evidence_score)
|
|
211
|
+
|
|
212
|
+
if person_id in self._manual_overrides:
|
|
213
|
+
override_tier = self._manual_overrides[person_id]
|
|
214
|
+
tier_order = [
|
|
215
|
+
TrustTier.PERIPHERAL,
|
|
216
|
+
TrustTier.REGULAR,
|
|
217
|
+
TrustTier.TRUSTED,
|
|
218
|
+
TrustTier.INNER_CIRCLE,
|
|
219
|
+
]
|
|
220
|
+
try:
|
|
221
|
+
override_idx = tier_order.index(override_tier)
|
|
222
|
+
score_idx = tier_order.index(score_tier)
|
|
223
|
+
except ValueError:
|
|
224
|
+
return None
|
|
225
|
+
|
|
226
|
+
if score_idx == override_idx:
|
|
227
|
+
return None
|
|
228
|
+
|
|
229
|
+
direction = "upward" if score_idx > override_idx else "downward"
|
|
230
|
+
|
|
231
|
+
if direction == "upward":
|
|
232
|
+
if days_at_score < 30 or interaction_count < 20:
|
|
233
|
+
return None
|
|
234
|
+
reasoning = (
|
|
235
|
+
f"Colony has observed consistent engagement "
|
|
236
|
+
f"(score {evidence_score:.0f}, {interaction_count} interactions "
|
|
237
|
+
f"over {days_at_score} days). Consider promoting from "
|
|
238
|
+
f"{override_tier.value} to {score_tier.value}. Approve?"
|
|
239
|
+
)
|
|
240
|
+
else:
|
|
241
|
+
if days_at_score < 21:
|
|
242
|
+
return None
|
|
243
|
+
reasoning = (
|
|
244
|
+
f"Colony observes reduced engagement "
|
|
245
|
+
f"(score {evidence_score:.0f} for {days_at_score} days). "
|
|
246
|
+
f"Score suggests {score_tier.value}; override holds at "
|
|
247
|
+
f"{override_tier.value}. Suggest clearing override?"
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
proposal = TierChangeProposalRecord(
|
|
251
|
+
person_id=person_id,
|
|
252
|
+
current_tier=override_tier,
|
|
253
|
+
proposed_tier=score_tier,
|
|
254
|
+
direction=direction,
|
|
255
|
+
evidence_score=evidence_score,
|
|
256
|
+
reasoning=reasoning,
|
|
257
|
+
)
|
|
258
|
+
else:
|
|
259
|
+
# Natural score movement — no override in place
|
|
260
|
+
# Only propose if we've been at a boundary score for a while
|
|
261
|
+
return None
|
|
262
|
+
|
|
263
|
+
self._pending_proposals[person_id] = proposal
|
|
264
|
+
return proposal
|
|
265
|
+
|
|
266
|
+
def approve_proposal(self, person_id: str) -> bool:
|
|
267
|
+
"""Apply a pending proposal. Returns True if proposal existed."""
|
|
268
|
+
proposal = self._pending_proposals.get(person_id)
|
|
269
|
+
if not proposal:
|
|
270
|
+
return False
|
|
271
|
+
proposal.approved = True
|
|
272
|
+
# Apply the tier change
|
|
273
|
+
self._manual_overrides[person_id] = proposal.proposed_tier
|
|
274
|
+
del self._pending_proposals[person_id]
|
|
275
|
+
return True
|
|
276
|
+
|
|
277
|
+
def reject_proposal(self, person_id: str) -> bool:
|
|
278
|
+
"""Reject a pending proposal. Returns True if proposal existed."""
|
|
279
|
+
proposal = self._pending_proposals.get(person_id)
|
|
280
|
+
if not proposal:
|
|
281
|
+
return False
|
|
282
|
+
proposal.approved = False
|
|
283
|
+
del self._pending_proposals[person_id]
|
|
284
|
+
return True
|
|
285
|
+
|
|
286
|
+
@property
|
|
287
|
+
def pending_proposals(self) -> Dict[str, TierChangeProposalRecord]:
|
|
288
|
+
"""All pending tier-change proposals awaiting owner decision."""
|
|
289
|
+
return dict(self._pending_proposals)
|
|
290
|
+
|
|
291
|
+
def _score_to_tier(self, score: float) -> TrustTier:
|
|
292
|
+
"""Score to tier without checking overrides."""
|
|
293
|
+
if score >= 80:
|
|
294
|
+
return TrustTier.INNER_CIRCLE
|
|
295
|
+
elif score >= 60:
|
|
296
|
+
return TrustTier.TRUSTED
|
|
297
|
+
elif score >= 30:
|
|
298
|
+
return TrustTier.REGULAR
|
|
299
|
+
else:
|
|
300
|
+
return TrustTier.PERIPHERAL
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Synthesis package — cross-domain insight engine.
|
|
2
|
+
|
|
3
|
+
Discovers connections across domains (health, work, relationships),
|
|
4
|
+
scores them for novelty, validates quality, and routes insights
|
|
5
|
+
to appropriate delivery channels.
|
|
6
|
+
|
|
7
|
+
Public API:
|
|
8
|
+
- ``ConnectionDiscoverer`` — find patterns across domains
|
|
9
|
+
- ``Connection`` / ``ConnectionType`` — connection models
|
|
10
|
+
- ``NoveltyScorer`` / ``NoveltyScore`` — score insight novelty
|
|
11
|
+
- ``CrossDomainAnalyzer`` / ``DomainInsight`` — multi-domain analysis
|
|
12
|
+
- ``InsightValidator`` / ``ValidationResult`` — quality gates
|
|
13
|
+
- ``InsightDeliverer`` / ``DeliveryDecision`` / ``DeliveryChannel`` — routing
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from .connection_discoverer import Connection, ConnectionDiscoverer, ConnectionType
|
|
17
|
+
from .cross_domain_analyzer import CrossDomainAnalyzer, DomainInsight
|
|
18
|
+
from .insight_deliverer import DeliveryChannel, DeliveryDecision, InsightDeliverer
|
|
19
|
+
from .insight_validator import InsightValidator, ValidationResult
|
|
20
|
+
from .novelty_scorer import NoveltyScore, NoveltyScorer
|
|
21
|
+
|
|
22
|
+
__all__ = [
|
|
23
|
+
# Connection discovery
|
|
24
|
+
"ConnectionDiscoverer",
|
|
25
|
+
"Connection",
|
|
26
|
+
"ConnectionType",
|
|
27
|
+
# Novelty scoring
|
|
28
|
+
"NoveltyScorer",
|
|
29
|
+
"NoveltyScore",
|
|
30
|
+
# Cross-domain analysis
|
|
31
|
+
"CrossDomainAnalyzer",
|
|
32
|
+
"DomainInsight",
|
|
33
|
+
# Validation
|
|
34
|
+
"InsightValidator",
|
|
35
|
+
"ValidationResult",
|
|
36
|
+
# Delivery
|
|
37
|
+
"InsightDeliverer",
|
|
38
|
+
"DeliveryDecision",
|
|
39
|
+
"DeliveryChannel",
|
|
40
|
+
]
|