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,740 @@
|
|
|
1
|
+
"""Colony-native tool definitions for server-side execution.
|
|
2
|
+
|
|
3
|
+
These tools are advertised to the LLM via the ReasoningLoop and executed
|
|
4
|
+
by the ToolExecutor. They provide direct access to Colony's intelligence
|
|
5
|
+
systems without going through the host plugin.
|
|
6
|
+
|
|
7
|
+
Each tool definition follows the OpenAI function-calling format.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import Any
|
|
13
|
+
|
|
14
|
+
# Core Colony tools — memory, relationships, goals
|
|
15
|
+
COLONY_CORE_TOOLS: list[dict[str, Any]] = [
|
|
16
|
+
{
|
|
17
|
+
"name": "colony_memory_search",
|
|
18
|
+
"description": (
|
|
19
|
+
"Search Colony's memory graph for relevant context about a person, topic, or past conversation. "
|
|
20
|
+
"Returns ranked memories with timestamps and relevance scores."
|
|
21
|
+
),
|
|
22
|
+
"parameters": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"properties": {
|
|
25
|
+
"query": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "The search query — can be a topic, person name, or question",
|
|
28
|
+
},
|
|
29
|
+
"person_id": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "Optional person ID to scope the search to conversations with that person",
|
|
32
|
+
},
|
|
33
|
+
"limit": {
|
|
34
|
+
"type": "integer",
|
|
35
|
+
"description": "Maximum number of results to return (default: 5)",
|
|
36
|
+
"default": 5,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
"required": ["query"],
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "colony_get_relationship",
|
|
44
|
+
"description": (
|
|
45
|
+
"Get the relationship score and trust tier for a contact. "
|
|
46
|
+
"Returns: score (0-100), tier (stranger/acquaintance/friend/close/confidant), "
|
|
47
|
+
"and interaction history summary."
|
|
48
|
+
),
|
|
49
|
+
"parameters": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"properties": {
|
|
52
|
+
"contact_id": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"description": "The contact's ID (usually their session key or phone/email)",
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
"required": ["contact_id"],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "colony_list_goals",
|
|
62
|
+
"description": (
|
|
63
|
+
"List the user's goals with their status and progress. "
|
|
64
|
+
"Can filter by status (active/completed/blocked) or person."
|
|
65
|
+
),
|
|
66
|
+
"parameters": {
|
|
67
|
+
"type": "object",
|
|
68
|
+
"properties": {
|
|
69
|
+
"person_id": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"description": "Optional person ID to filter goals related to that person",
|
|
72
|
+
},
|
|
73
|
+
"status": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"enum": ["active", "completed", "blocked", "all"],
|
|
76
|
+
"description": "Filter by goal status (default: active)",
|
|
77
|
+
"default": "active",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
"required": [],
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "colony_get_briefing",
|
|
85
|
+
"description": (
|
|
86
|
+
"Get a briefing for a person — summary of relationship, recent topics, "
|
|
87
|
+
"goals, and suggested conversation starters."
|
|
88
|
+
),
|
|
89
|
+
"parameters": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"properties": {
|
|
92
|
+
"contact_id": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"description": "The contact's ID",
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
"required": ["contact_id"],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"name": "colony_record_insight",
|
|
102
|
+
"description": (
|
|
103
|
+
"Record an insight discovered during conversation — a connection, "
|
|
104
|
+
"preference, or important fact worth remembering."
|
|
105
|
+
),
|
|
106
|
+
"parameters": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"properties": {
|
|
109
|
+
"insight_type": {
|
|
110
|
+
"type": "string",
|
|
111
|
+
"enum": ["preference", "connection", "fact", "goal_hint", "relationship_update"],
|
|
112
|
+
"description": "The type of insight",
|
|
113
|
+
},
|
|
114
|
+
"content": {
|
|
115
|
+
"type": "string",
|
|
116
|
+
"description": "The insight content",
|
|
117
|
+
},
|
|
118
|
+
"confidence": {
|
|
119
|
+
"type": "number",
|
|
120
|
+
"description": "Confidence level 0-1 (default: 0.7)",
|
|
121
|
+
"default": 0.7,
|
|
122
|
+
},
|
|
123
|
+
"person_id": {
|
|
124
|
+
"type": "string",
|
|
125
|
+
"description": "Optional person this insight relates to",
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
"required": ["insight_type", "content"],
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
]
|
|
132
|
+
|
|
133
|
+
# Extended tools — world model, research, synthesis
|
|
134
|
+
COLONY_EXTENDED_TOOLS: list[dict[str, Any]] = [
|
|
135
|
+
{
|
|
136
|
+
"name": "colony_query_entities",
|
|
137
|
+
"description": (
|
|
138
|
+
"Query Colony's world model for entities (people, places, organizations, concepts). "
|
|
139
|
+
"Returns matching entities with their relationships and attributes."
|
|
140
|
+
),
|
|
141
|
+
"parameters": {
|
|
142
|
+
"type": "object",
|
|
143
|
+
"properties": {
|
|
144
|
+
"query": {
|
|
145
|
+
"type": "string",
|
|
146
|
+
"description": "Search query for entities",
|
|
147
|
+
},
|
|
148
|
+
"entity_type": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"enum": ["person", "place", "organization", "concept", "all"],
|
|
151
|
+
"description": "Filter by entity type (default: all)",
|
|
152
|
+
"default": "all",
|
|
153
|
+
},
|
|
154
|
+
"limit": {
|
|
155
|
+
"type": "integer",
|
|
156
|
+
"description": "Maximum results (default: 10)",
|
|
157
|
+
"default": 10,
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
"required": ["query"],
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"name": "colony_start_research",
|
|
165
|
+
"description": (
|
|
166
|
+
"Start a background research task on a topic. "
|
|
167
|
+
"Research runs asynchronously and results are available via the research endpoint."
|
|
168
|
+
),
|
|
169
|
+
"parameters": {
|
|
170
|
+
"type": "object",
|
|
171
|
+
"properties": {
|
|
172
|
+
"topic": {
|
|
173
|
+
"type": "string",
|
|
174
|
+
"description": "The topic to research",
|
|
175
|
+
},
|
|
176
|
+
"depth": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"enum": ["quick", "standard", "deep"],
|
|
179
|
+
"description": "Research depth (default: standard)",
|
|
180
|
+
"default": "standard",
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
"required": ["topic"],
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"name": "colony_discover_connections",
|
|
188
|
+
"description": (
|
|
189
|
+
"Discover non-obvious connections between entities, topics, or people. "
|
|
190
|
+
"Returns novelty-scored connections that might be interesting."
|
|
191
|
+
),
|
|
192
|
+
"parameters": {
|
|
193
|
+
"type": "object",
|
|
194
|
+
"properties": {
|
|
195
|
+
"entity_id": {
|
|
196
|
+
"type": "string",
|
|
197
|
+
"description": "Optional entity to find connections for",
|
|
198
|
+
},
|
|
199
|
+
"min_novelty": {
|
|
200
|
+
"type": "number",
|
|
201
|
+
"description": "Minimum novelty score 0-1 (default: 0.3)",
|
|
202
|
+
"default": 0.3,
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
"required": [],
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
# --- Task Management Tools (v0.7.10) ---
|
|
209
|
+
{
|
|
210
|
+
"name": "colony_task_complete",
|
|
211
|
+
"description": (
|
|
212
|
+
"Mark a task as completed. Use when you determine a task mentioned in an initiative is done."
|
|
213
|
+
),
|
|
214
|
+
"parameters": {
|
|
215
|
+
"type": "object",
|
|
216
|
+
"properties": {
|
|
217
|
+
"task_id": {
|
|
218
|
+
"type": "string",
|
|
219
|
+
"description": "The task/goal identifier from the initiative context",
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
"required": ["task_id"],
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"name": "colony_task_snooze",
|
|
227
|
+
"description": (
|
|
228
|
+
"Snooze a task - don't generate initiatives for it for N hours. "
|
|
229
|
+
"Use when a task is valid but not actionable right now. Max 168 hours (1 week)."
|
|
230
|
+
),
|
|
231
|
+
"parameters": {
|
|
232
|
+
"type": "object",
|
|
233
|
+
"properties": {
|
|
234
|
+
"task_id": {
|
|
235
|
+
"type": "string",
|
|
236
|
+
"description": "The task/goal identifier",
|
|
237
|
+
},
|
|
238
|
+
"hours": {
|
|
239
|
+
"type": "integer",
|
|
240
|
+
"description": "Hours to snooze (1-168, default 24)",
|
|
241
|
+
"default": 24,
|
|
242
|
+
},
|
|
243
|
+
"reason": {
|
|
244
|
+
"type": "string",
|
|
245
|
+
"description": "Optional reason for snooze",
|
|
246
|
+
"default": "",
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
"required": ["task_id"],
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"name": "colony_task_dismiss",
|
|
254
|
+
"description": (
|
|
255
|
+
"Dismiss a task as no longer relevant. Use when the task is stale, abandoned, or no longer needed."
|
|
256
|
+
),
|
|
257
|
+
"parameters": {
|
|
258
|
+
"type": "object",
|
|
259
|
+
"properties": {
|
|
260
|
+
"task_id": {
|
|
261
|
+
"type": "string",
|
|
262
|
+
"description": "The task/goal identifier",
|
|
263
|
+
},
|
|
264
|
+
"reason": {
|
|
265
|
+
"type": "string",
|
|
266
|
+
"enum": ["stale", "completed", "abandoned", "not_applicable"],
|
|
267
|
+
"description": "Why the task is being dismissed (default: stale)",
|
|
268
|
+
"default": "stale",
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
"required": ["task_id"],
|
|
272
|
+
},
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"name": "colony_initiative_feedback",
|
|
276
|
+
"description": (
|
|
277
|
+
"Provide feedback on how an initiative was handled. "
|
|
278
|
+
"Action: acknowledged, actioned, dismissed, or snoozed."
|
|
279
|
+
),
|
|
280
|
+
"parameters": {
|
|
281
|
+
"type": "object",
|
|
282
|
+
"properties": {
|
|
283
|
+
"initiative_id": {
|
|
284
|
+
"type": "string",
|
|
285
|
+
"description": "The initiative ID from the system message",
|
|
286
|
+
},
|
|
287
|
+
"action": {
|
|
288
|
+
"type": "string",
|
|
289
|
+
"enum": ["acknowledged", "actioned", "dismissed", "snoozed"],
|
|
290
|
+
"description": "How the initiative was handled",
|
|
291
|
+
},
|
|
292
|
+
"details": {
|
|
293
|
+
"type": "object",
|
|
294
|
+
"description": "Optional additional context",
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
"required": ["initiative_id", "action"],
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"name": "colony_list_boundaries",
|
|
302
|
+
"description": (
|
|
303
|
+
"List the owner's active standing directives / boundaries (things "
|
|
304
|
+
"you must not do or must always do). Use when asked what your "
|
|
305
|
+
"boundaries or standing instructions are."
|
|
306
|
+
),
|
|
307
|
+
"parameters": {"type": "object", "properties": {}, "required": []},
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"name": "colony_recent_boundary_blocks",
|
|
311
|
+
"description": (
|
|
312
|
+
"List autonomous actions you recently refused and which boundary "
|
|
313
|
+
"refused each. Use to explain WHY you did not do something (cite the "
|
|
314
|
+
"directive and date)."
|
|
315
|
+
),
|
|
316
|
+
"parameters": {
|
|
317
|
+
"type": "object",
|
|
318
|
+
"properties": {
|
|
319
|
+
"limit": {"type": "integer", "description": "Max entries (default 10)", "default": 10},
|
|
320
|
+
},
|
|
321
|
+
"required": [],
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"name": "colony_flag_boundary_concern",
|
|
326
|
+
"description": (
|
|
327
|
+
"Surface a CRITICAL finding (security vulnerability, data loss, "
|
|
328
|
+
"financial risk) about a subject the owner told you to leave alone. "
|
|
329
|
+
"Delivered at most once per boundary and clearly marked as "
|
|
330
|
+
"boundary-respecting. Use sparingly; never for routine findings."
|
|
331
|
+
),
|
|
332
|
+
"parameters": {
|
|
333
|
+
"type": "object",
|
|
334
|
+
"properties": {
|
|
335
|
+
"subject": {"type": "string", "description": "The boundaried subject"},
|
|
336
|
+
"finding": {"type": "string", "description": "The critical fact"},
|
|
337
|
+
"severity": {"type": "number", "description": "0-1 (default 0.9)"},
|
|
338
|
+
},
|
|
339
|
+
"required": ["subject", "finding"],
|
|
340
|
+
},
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"name": "repo_list_files",
|
|
344
|
+
"description": (
|
|
345
|
+
"List files in one of the owner's designated repositories "
|
|
346
|
+
"(read-only local mirror). Use to explore repo structure."
|
|
347
|
+
),
|
|
348
|
+
"parameters": {
|
|
349
|
+
"type": "object",
|
|
350
|
+
"properties": {
|
|
351
|
+
"repo": {"type": "string", "description": "Configured repo name"},
|
|
352
|
+
"path": {"type": "string", "description": "Optional subdirectory"},
|
|
353
|
+
"limit": {"type": "integer", "default": 200},
|
|
354
|
+
},
|
|
355
|
+
"required": ["repo"],
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"name": "repo_read_file",
|
|
360
|
+
"description": (
|
|
361
|
+
"Read a file from one of the owner's designated repositories "
|
|
362
|
+
"(read-only local mirror)."
|
|
363
|
+
),
|
|
364
|
+
"parameters": {
|
|
365
|
+
"type": "object",
|
|
366
|
+
"properties": {
|
|
367
|
+
"repo": {"type": "string", "description": "Configured repo name"},
|
|
368
|
+
"path": {"type": "string", "description": "File path within the repo"},
|
|
369
|
+
},
|
|
370
|
+
"required": ["repo", "path"],
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"name": "repo_search",
|
|
375
|
+
"description": (
|
|
376
|
+
"Search (git grep) one of the owner's designated repositories "
|
|
377
|
+
"(read-only local mirror) for a string or regex."
|
|
378
|
+
),
|
|
379
|
+
"parameters": {
|
|
380
|
+
"type": "object",
|
|
381
|
+
"properties": {
|
|
382
|
+
"repo": {"type": "string", "description": "Configured repo name"},
|
|
383
|
+
"query": {"type": "string", "description": "Search text/regex"},
|
|
384
|
+
"glob": {"type": "string", "description": "Optional pathspec filter, e.g. *.py"},
|
|
385
|
+
},
|
|
386
|
+
"required": ["repo", "query"],
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
# --- Cognition program tools (items 1/3/4/7 + Amendment 1) ---
|
|
390
|
+
{
|
|
391
|
+
"name": "list_projects",
|
|
392
|
+
"description": (
|
|
393
|
+
"List the durable projects you are pursuing across sessions "
|
|
394
|
+
"(goal persistence), with status and progress."
|
|
395
|
+
),
|
|
396
|
+
"parameters": {
|
|
397
|
+
"type": "object",
|
|
398
|
+
"properties": {
|
|
399
|
+
"status": {"type": "string",
|
|
400
|
+
"enum": ["planning", "active", "blocked",
|
|
401
|
+
"completed", "abandoned", "all"],
|
|
402
|
+
"description": "Filter by status (default: all)",
|
|
403
|
+
"default": "all"},
|
|
404
|
+
},
|
|
405
|
+
"required": [],
|
|
406
|
+
},
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"name": "project_status",
|
|
410
|
+
"description": "Full status of one project: its steps, results, and progress.",
|
|
411
|
+
"parameters": {
|
|
412
|
+
"type": "object",
|
|
413
|
+
"properties": {
|
|
414
|
+
"project_id": {"type": "string", "description": "The project id"},
|
|
415
|
+
},
|
|
416
|
+
"required": ["project_id"],
|
|
417
|
+
},
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"name": "create_project",
|
|
421
|
+
"description": (
|
|
422
|
+
"Create a durable multi-step project from an objective the owner "
|
|
423
|
+
"gave you. It is planned and pursued autonomously across ticks; "
|
|
424
|
+
"every step is boundary-checked and gated. Use for work that "
|
|
425
|
+
"cannot finish in one sitting."
|
|
426
|
+
),
|
|
427
|
+
"parameters": {
|
|
428
|
+
"type": "object",
|
|
429
|
+
"properties": {
|
|
430
|
+
"objective": {"type": "string",
|
|
431
|
+
"description": "What the project should achieve"},
|
|
432
|
+
"title": {"type": "string", "description": "Optional short title"},
|
|
433
|
+
},
|
|
434
|
+
"required": ["objective"],
|
|
435
|
+
},
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"name": "abandon_project",
|
|
439
|
+
"description": "Abandon a project (owner asked, or it is no longer relevant).",
|
|
440
|
+
"parameters": {
|
|
441
|
+
"type": "object",
|
|
442
|
+
"properties": {
|
|
443
|
+
"project_id": {"type": "string"},
|
|
444
|
+
"reason": {"type": "string", "default": "owner_request"},
|
|
445
|
+
},
|
|
446
|
+
"required": ["project_id"],
|
|
447
|
+
},
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
"name": "recall_skills",
|
|
451
|
+
"description": (
|
|
452
|
+
"Recall relevant procedures you learned from your own past work "
|
|
453
|
+
"(steps + gotchas) for a situation you are about to tackle."
|
|
454
|
+
),
|
|
455
|
+
"parameters": {
|
|
456
|
+
"type": "object",
|
|
457
|
+
"properties": {
|
|
458
|
+
"situation": {"type": "string",
|
|
459
|
+
"description": "What you are about to do"},
|
|
460
|
+
},
|
|
461
|
+
"required": ["situation"],
|
|
462
|
+
},
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
"name": "self_status",
|
|
466
|
+
"description": (
|
|
467
|
+
"Your live self-model: per-domain success rates, timeouts, "
|
|
468
|
+
"current load, and earned trust stages (what you may do "
|
|
469
|
+
"autonomously vs must ask first)."
|
|
470
|
+
),
|
|
471
|
+
"parameters": {"type": "object", "properties": {}, "required": []},
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
"name": "action_journal",
|
|
475
|
+
"description": (
|
|
476
|
+
"Your unified action journal: what autonomous actions you took "
|
|
477
|
+
"or asked about, with reasoning, confidence, and outcome. Use to "
|
|
478
|
+
"answer 'what did you do today and why'."
|
|
479
|
+
),
|
|
480
|
+
"parameters": {
|
|
481
|
+
"type": "object",
|
|
482
|
+
"properties": {
|
|
483
|
+
"domain": {"type": "string",
|
|
484
|
+
"description": "Optional domain filter (e.g. world_model, directed:read)"},
|
|
485
|
+
"limit": {"type": "integer", "default": 20},
|
|
486
|
+
},
|
|
487
|
+
"required": [],
|
|
488
|
+
},
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
"name": "belief_conflicts",
|
|
492
|
+
"description": (
|
|
493
|
+
"Open or reviewed belief conflicts (contradictory facts detected "
|
|
494
|
+
"across memory and the world model) and recent supersessions."
|
|
495
|
+
),
|
|
496
|
+
"parameters": {
|
|
497
|
+
"type": "object",
|
|
498
|
+
"properties": {
|
|
499
|
+
"status": {"type": "string",
|
|
500
|
+
"enum": ["open", "resolved", "review", "all"],
|
|
501
|
+
"default": "all"},
|
|
502
|
+
},
|
|
503
|
+
"required": [],
|
|
504
|
+
},
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
"name": "link_contact",
|
|
508
|
+
"description": (
|
|
509
|
+
"Attach a channel handle to a person ('that WhatsApp number is "
|
|
510
|
+
"Sam's', 'this email is Robin's'). Unifies their identity across "
|
|
511
|
+
"channels so their history and profile stay on one contact."
|
|
512
|
+
),
|
|
513
|
+
"parameters": {
|
|
514
|
+
"type": "object",
|
|
515
|
+
"properties": {
|
|
516
|
+
"who": {"type": "string",
|
|
517
|
+
"description": "contact id (cid-...) or display name"},
|
|
518
|
+
"gateway": {"type": "string",
|
|
519
|
+
"description": "channel: whatsapp|sms|rcs|email|"
|
|
520
|
+
"signal|voice|telegram"},
|
|
521
|
+
"address": {"type": "string",
|
|
522
|
+
"description": "the handle (phone/email/id) to link"},
|
|
523
|
+
},
|
|
524
|
+
"required": ["who", "gateway", "address"],
|
|
525
|
+
},
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
"name": "merge_contacts",
|
|
529
|
+
"description": (
|
|
530
|
+
"Merge two contact records that are the same person into one "
|
|
531
|
+
"(e.g. a shadow contact created from a stranger turned out to be "
|
|
532
|
+
"someone you already know). Moves handles and history onto the "
|
|
533
|
+
"kept contact; reversible/audited. Use pending_contact_proposals "
|
|
534
|
+
"to review auto-proposed links first."
|
|
535
|
+
),
|
|
536
|
+
"parameters": {
|
|
537
|
+
"type": "object",
|
|
538
|
+
"properties": {
|
|
539
|
+
"keep": {"type": "string",
|
|
540
|
+
"description": "contact id to KEEP (the canonical one)"},
|
|
541
|
+
"merge": {"type": "string",
|
|
542
|
+
"description": "contact id to merge in and retire"},
|
|
543
|
+
},
|
|
544
|
+
"required": ["keep", "merge"],
|
|
545
|
+
},
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
"name": "pending_contact_proposals",
|
|
549
|
+
"description": (
|
|
550
|
+
"List auto-proposed handle links awaiting your confirmation "
|
|
551
|
+
"(created when a group member's name matched a known contact but "
|
|
552
|
+
"the handle could not be matched deterministically). Review, then "
|
|
553
|
+
"keep them (they are already attached at low confidence) or "
|
|
554
|
+
"correct with link_contact / merge_contacts."
|
|
555
|
+
),
|
|
556
|
+
"parameters": {"type": "object", "properties": {}, "required": []},
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"name": "relationship_brief",
|
|
560
|
+
"description": (
|
|
561
|
+
"Standing + psyche + approach brief for a person: interaction "
|
|
562
|
+
"history across channels, current mood trend, rapport topics, "
|
|
563
|
+
"engagement-style guidance, best channel and time to reach them. "
|
|
564
|
+
"Use before reaching out to someone or when reasoning about how "
|
|
565
|
+
"to approach them. Accepts a contact id or a name."
|
|
566
|
+
),
|
|
567
|
+
"parameters": {
|
|
568
|
+
"type": "object",
|
|
569
|
+
"properties": {
|
|
570
|
+
"who": {"type": "string",
|
|
571
|
+
"description": "contact id (cid-...) or display name"},
|
|
572
|
+
"refresh": {"type": "boolean", "default": False,
|
|
573
|
+
"description": "recompute from live stores"},
|
|
574
|
+
},
|
|
575
|
+
"required": ["who"],
|
|
576
|
+
},
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"name": "sandbox_run",
|
|
580
|
+
"description": (
|
|
581
|
+
"Run a short script in an isolated sandbox (no network, no "
|
|
582
|
+
"credentials, capped CPU/memory/time) to test an idea safely. "
|
|
583
|
+
"Autonomous runs are flagged for owner approval; the owner can "
|
|
584
|
+
"auto-run within default limits. You cannot widen the limits."
|
|
585
|
+
),
|
|
586
|
+
"parameters": {
|
|
587
|
+
"type": "object",
|
|
588
|
+
"properties": {
|
|
589
|
+
"script": {"type": "string",
|
|
590
|
+
"description": "The script source to execute"},
|
|
591
|
+
"lang": {"type": "string",
|
|
592
|
+
"enum": ["python", "bash", "node"],
|
|
593
|
+
"default": "python"},
|
|
594
|
+
"purpose": {"type": "string",
|
|
595
|
+
"description": "Why you want to run this (checked "
|
|
596
|
+
"against boundaries; be specific)"},
|
|
597
|
+
},
|
|
598
|
+
"required": ["script", "purpose"],
|
|
599
|
+
},
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
"name": "sandbox_status",
|
|
603
|
+
"description": (
|
|
604
|
+
"Sandbox status: enforcement mode, backend, and the containment "
|
|
605
|
+
"limits currently applied."
|
|
606
|
+
),
|
|
607
|
+
"parameters": {"type": "object", "properties": {}, "required": []},
|
|
608
|
+
},
|
|
609
|
+
]
|
|
610
|
+
|
|
611
|
+
# Native server-side tools (calculate, web_search, file_ops)
|
|
612
|
+
NATIVE_TOOLS: list[dict[str, Any]] = [
|
|
613
|
+
{
|
|
614
|
+
"name": "calculate",
|
|
615
|
+
"description": "Evaluate a mathematical expression and return the result.",
|
|
616
|
+
"parameters": {
|
|
617
|
+
"type": "object",
|
|
618
|
+
"properties": {
|
|
619
|
+
"expression": {
|
|
620
|
+
"type": "string",
|
|
621
|
+
"description": "The math expression to evaluate (e.g. '2 + 2', 'sqrt(144)')",
|
|
622
|
+
},
|
|
623
|
+
},
|
|
624
|
+
"required": ["expression"],
|
|
625
|
+
},
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
"name": "web_search",
|
|
629
|
+
"description": "Search the web for information on a topic. Returns relevant snippets.",
|
|
630
|
+
"parameters": {
|
|
631
|
+
"type": "object",
|
|
632
|
+
"properties": {
|
|
633
|
+
"query": {
|
|
634
|
+
"type": "string",
|
|
635
|
+
"description": "The search query",
|
|
636
|
+
},
|
|
637
|
+
"max_results": {
|
|
638
|
+
"type": "integer",
|
|
639
|
+
"description": "Maximum number of results (default: 5)",
|
|
640
|
+
"default": 5,
|
|
641
|
+
},
|
|
642
|
+
},
|
|
643
|
+
"required": ["query"],
|
|
644
|
+
},
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
"name": "read_file",
|
|
648
|
+
"description": "Read the contents of a file in the sandbox directory.",
|
|
649
|
+
"parameters": {
|
|
650
|
+
"type": "object",
|
|
651
|
+
"properties": {
|
|
652
|
+
"path": {
|
|
653
|
+
"type": "string",
|
|
654
|
+
"description": "Relative path within the sandbox",
|
|
655
|
+
},
|
|
656
|
+
},
|
|
657
|
+
"required": ["path"],
|
|
658
|
+
},
|
|
659
|
+
},
|
|
660
|
+
{
|
|
661
|
+
"name": "write_file",
|
|
662
|
+
"description": "Write content to a file in the sandbox directory.",
|
|
663
|
+
"parameters": {
|
|
664
|
+
"type": "object",
|
|
665
|
+
"properties": {
|
|
666
|
+
"path": {
|
|
667
|
+
"type": "string",
|
|
668
|
+
"description": "Relative path within the sandbox",
|
|
669
|
+
},
|
|
670
|
+
"content": {
|
|
671
|
+
"type": "string",
|
|
672
|
+
"description": "Content to write",
|
|
673
|
+
},
|
|
674
|
+
},
|
|
675
|
+
"required": ["path", "content"],
|
|
676
|
+
},
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
"name": "list_directory",
|
|
680
|
+
"description": "List files and directories in a sandbox directory.",
|
|
681
|
+
"parameters": {
|
|
682
|
+
"type": "object",
|
|
683
|
+
"properties": {
|
|
684
|
+
"path": {
|
|
685
|
+
"type": "string",
|
|
686
|
+
"description": "Relative path within the sandbox (default: root)",
|
|
687
|
+
"default": ".",
|
|
688
|
+
},
|
|
689
|
+
},
|
|
690
|
+
"required": [],
|
|
691
|
+
},
|
|
692
|
+
},
|
|
693
|
+
]
|
|
694
|
+
|
|
695
|
+
# All tools combined
|
|
696
|
+
COLONY_TOOLS: list[dict[str, Any]] = COLONY_CORE_TOOLS + COLONY_EXTENDED_TOOLS + NATIVE_TOOLS
|
|
697
|
+
|
|
698
|
+
# Names in the shipped model surface are permanently reserved. Toolsmith
|
|
699
|
+
# capabilities are additive and must never impersonate a first-party tool,
|
|
700
|
+
# including one that is not registered in a particular process.
|
|
701
|
+
STATIC_TOOL_NAMES = frozenset(str(tool["name"]) for tool in COLONY_TOOLS)
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
def _wrap_openai_tool(tool: dict[str, Any]) -> dict[str, Any]:
|
|
705
|
+
"""Wrap a raw tool definition in OpenAI function-calling format.
|
|
706
|
+
|
|
707
|
+
Raw format: {"name": ..., "description": ..., "parameters": ...}
|
|
708
|
+
OpenAI format: {"type": "function", "function": {"name": ..., ...}}
|
|
709
|
+
|
|
710
|
+
If the tool already has a "type" key, it is returned unchanged.
|
|
711
|
+
"""
|
|
712
|
+
if "type" in tool:
|
|
713
|
+
return tool
|
|
714
|
+
return {"type": "function", "function": tool}
|
|
715
|
+
|
|
716
|
+
|
|
717
|
+
def get_tool_definitions(
|
|
718
|
+
include_extended: bool = True,
|
|
719
|
+
tool_names: list[str] | None = None,
|
|
720
|
+
) -> list[dict[str, Any]]:
|
|
721
|
+
"""Get tool definitions for the LLM call.
|
|
722
|
+
|
|
723
|
+
Parameters
|
|
724
|
+
----------
|
|
725
|
+
include_extended :
|
|
726
|
+
Whether to include extended tools (default: True)
|
|
727
|
+
tool_names :
|
|
728
|
+
Optional list of specific tool names to include. If None, returns all.
|
|
729
|
+
|
|
730
|
+
Returns
|
|
731
|
+
-------
|
|
732
|
+
List of OpenAI-format tool definitions.
|
|
733
|
+
"""
|
|
734
|
+
tools = COLONY_CORE_TOOLS if not include_extended else COLONY_TOOLS
|
|
735
|
+
|
|
736
|
+
if tool_names is not None:
|
|
737
|
+
name_set = set(tool_names)
|
|
738
|
+
tools = [t for t in tools if t["name"] in name_set]
|
|
739
|
+
|
|
740
|
+
return [_wrap_openai_tool(t) for t in tools]
|