fable-engine 1.3.3__tar.gz → 1.3.5__tar.gz
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.
- {fable_engine-1.3.3/fable_engine.egg-info → fable_engine-1.3.5}/PKG-INFO +5 -5
- {fable_engine-1.3.3 → fable_engine-1.3.5}/README.md +4 -4
- {fable_engine-1.3.3 → fable_engine-1.3.5}/docs/stop-ai-agents-writing-too-early.md +4 -4
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/fable_session.json +130 -33
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/schema.py +60 -12
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/scrapers/base.py +1 -1
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/server.py +3 -1
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/session.py +1 -1
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/test_server.py +14 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5/fable_engine.egg-info}/PKG-INFO +5 -5
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode/__init__.py +1 -1
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode/manifest.py +1 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode/resources.json +1 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/pyproject.toml +1 -1
- {fable_engine-1.3.3 → fable_engine-1.3.5}/setup.py +1 -1
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_packaging_runtime.py +14 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_stealth_browser.py +20 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/LICENSE +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/MANIFEST.in +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/docs/fable-v1-v2-migration.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/docs/fable-v2-architecture.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/docs/system3-architecture.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_compressor.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/__init__.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/actions/__init__.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/actions/cas.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/actions/deliberation.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/actions/fleet.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/actions/lifecycle.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/actions/scrapers.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/actions/system3.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/browser.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/cas.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/guards.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/scrapers/__init__.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/scrapers/arxiv.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/scrapers/github.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/scrapers/reddit.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/scrapers/web.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/scrapers/x.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/scrapers/youtube.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine/updater.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine.egg-info/SOURCES.txt +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine.egg-info/dependency_links.txt +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine.egg-info/entry_points.txt +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_engine.egg-info/top_level.txt +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode/__main__.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode/adapters.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode/installer.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode/launcher.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode/safety.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode/skill_bundle.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_mode_entry.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/__init__.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/adapters.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/__init__.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/ast_tools.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/compute.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/design_engine.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/diagnostics.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/fleet_dispatcher.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/mock_auditor.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/mutation.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/property_oracle.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/receipt_attestor.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/red_team_swarm.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/test_harness.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/vector_engine.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/visual.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/coder_fleet/workspace.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/cortical/__init__.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/cortical/plasticity_engine.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/execution_broker.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/proof_engine.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/protocol.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/runtime.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/__init__.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/causal.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/dialectical.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/evolution.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/executive.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/free_energy.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/hyperbolic.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/induction.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/kripke.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/system3/oracle.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/fable_v2/verifiers.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/rules/AGENTS.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/rules/GEMINI.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/rules/fable-mode.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/setup.cfg +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/SKILL.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/concurrency.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/design_3d.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/frontend_design.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/process.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/python.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/research.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/rust.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/security.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/synaptic_matrix.json +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/system.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/cortex/target.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/examples/autonomous-agentic-migration.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/examples/breakthrough-algorithm-synthesis.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/examples/deepthink-analysis-proof.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/examples/distributed-system-design.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/examples/swe-bench-pro-debugging.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/examples/weak_model_ollama_setup.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/aaa-threejs-game-engine.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/adversarial-code-review-swarm.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/agentic-execution.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/anti-slop-frontend-architecture.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/architectural-blueprinting.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/cinematic-design-engine.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/cognitive-protocol.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/deepthink-mode.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/design-tokens-and-typographies.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/goal-rubric-and-pipeline-automation.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/hebbian-cortical-plasticity.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/innovation-engine.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/interleaved-verification.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/model-velocity-calibration.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/prompt-scaffolds.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/proof-architecture.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/svg-craft-and-vector-design.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/system2-session-engine.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/system3-meta-cognition.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/visual-imagination-engine.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/skills/fable-mode/references/weak-model-frontier-uplift.md +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/__init__.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_anti_loop_circuit_breaker.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_auto_updater.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_coder_fleet.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_delegation_compiler.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_descriptor_boundaries.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_design_engine.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_epistemic_evidence_validator.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_execution_broker.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_fable_v2.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_fleet_transitions.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_fsm_redteam_evolution.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_goal_rubric_and_pipeline.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_hebbian_plasticity.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_proof_engine.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_red_team_swarm.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_redteam_remediation.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_registration_transaction.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_requested_regressions.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_scrapers.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_server_actions.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_server_frontier_actions.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_server_protocol.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_skill_distribution.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_system3.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_system3_deep_integration.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_system3_frontier.py +0 -0
- {fable_engine-1.3.3 → fable_engine-1.3.5}/tests/test_vector_engine.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: fable-engine
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.5
|
|
4
4
|
Summary: Independent deterministic System 2 cognitive engine and mechanical time-lock MCP server
|
|
5
5
|
Author: REX-codebase
|
|
6
6
|
License: MIT License
|
|
@@ -116,7 +116,7 @@ pip install fable-engine
|
|
|
116
116
|
|
|
117
117
|
Or install the MCP server in your editor:
|
|
118
118
|
|
|
119
|
-
[](vscode:mcp/install?%7B%22name%22%3A%22fable-engine%22%2C%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22--from%22%2C%22fable-engine%3D%3D1.3.
|
|
119
|
+
[](vscode:mcp/install?%7B%22name%22%3A%22fable-engine%22%2C%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22--from%22%2C%22fable-engine%3D%3D1.3.5%22%2C%22fable-engine%22%5D%7D)
|
|
120
120
|
[](cursor://anysphere.cursor-deeplink/mcp/install?name=fable-engine&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyItLWZyb20iLCJmYWJsZS1lbmdpbmU9PTEuMy4zIiwiZmFibGUtZW5naW5lIl19)
|
|
121
121
|
|
|
122
122
|
These links configure Fable Engine for AI agents in VS Code Chat or Cursor. They do not install a standalone editor extension. Both use `uvx`, which downloads and runs the pinned PyPI release in an isolated environment.
|
|
@@ -124,13 +124,13 @@ These links configure Fable Engine for AI agents in VS Code Chat or Cursor. They
|
|
|
124
124
|
Point your agent at the MCP server manually:
|
|
125
125
|
|
|
126
126
|
```jsonc
|
|
127
|
-
// Claude Code: claude mcp add fable-engine -- uvx --from fable-engine==1.3.
|
|
127
|
+
// Claude Code: claude mcp add fable-engine -- uvx --from fable-engine==1.3.5 fable-engine
|
|
128
128
|
// Cursor: ~/.cursor/mcp.json
|
|
129
129
|
{
|
|
130
130
|
"mcpServers": {
|
|
131
131
|
"fable-engine": {
|
|
132
132
|
"command": "uvx",
|
|
133
|
-
"args": ["--from", "fable-engine==1.3.
|
|
133
|
+
"args": ["--from", "fable-engine==1.3.5", "fable-engine"]
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
}
|
|
@@ -152,7 +152,7 @@ The complete skill tree ships inside the wheel. To install it into your
|
|
|
152
152
|
project's skills directory (the cross-client `.agents/skills/` convention):
|
|
153
153
|
|
|
154
154
|
```bash
|
|
155
|
-
uvx --from fable-engine==1.3.
|
|
155
|
+
uvx --from fable-engine==1.3.5 fable-mode install-skill --yes
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
This copies the skill to `.agents/skills/fable-mode`. Preview first with
|
|
@@ -73,7 +73,7 @@ pip install fable-engine
|
|
|
73
73
|
|
|
74
74
|
Or install the MCP server in your editor:
|
|
75
75
|
|
|
76
|
-
[](vscode:mcp/install?%7B%22name%22%3A%22fable-engine%22%2C%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22--from%22%2C%22fable-engine%3D%3D1.3.
|
|
76
|
+
[](vscode:mcp/install?%7B%22name%22%3A%22fable-engine%22%2C%22command%22%3A%22uvx%22%2C%22args%22%3A%5B%22--from%22%2C%22fable-engine%3D%3D1.3.5%22%2C%22fable-engine%22%5D%7D)
|
|
77
77
|
[](cursor://anysphere.cursor-deeplink/mcp/install?name=fable-engine&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyItLWZyb20iLCJmYWJsZS1lbmdpbmU9PTEuMy4zIiwiZmFibGUtZW5naW5lIl19)
|
|
78
78
|
|
|
79
79
|
These links configure Fable Engine for AI agents in VS Code Chat or Cursor. They do not install a standalone editor extension. Both use `uvx`, which downloads and runs the pinned PyPI release in an isolated environment.
|
|
@@ -81,13 +81,13 @@ These links configure Fable Engine for AI agents in VS Code Chat or Cursor. They
|
|
|
81
81
|
Point your agent at the MCP server manually:
|
|
82
82
|
|
|
83
83
|
```jsonc
|
|
84
|
-
// Claude Code: claude mcp add fable-engine -- uvx --from fable-engine==1.3.
|
|
84
|
+
// Claude Code: claude mcp add fable-engine -- uvx --from fable-engine==1.3.5 fable-engine
|
|
85
85
|
// Cursor: ~/.cursor/mcp.json
|
|
86
86
|
{
|
|
87
87
|
"mcpServers": {
|
|
88
88
|
"fable-engine": {
|
|
89
89
|
"command": "uvx",
|
|
90
|
-
"args": ["--from", "fable-engine==1.3.
|
|
90
|
+
"args": ["--from", "fable-engine==1.3.5", "fable-engine"]
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
}
|
|
@@ -109,7 +109,7 @@ The complete skill tree ships inside the wheel. To install it into your
|
|
|
109
109
|
project's skills directory (the cross-client `.agents/skills/` convention):
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
|
-
uvx --from fable-engine==1.3.
|
|
112
|
+
uvx --from fable-engine==1.3.5 fable-mode install-skill --yes
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
This copies the skill to `.agents/skills/fable-mode`. Preview first with
|
|
@@ -18,13 +18,13 @@ Fable Mode separates research from authority. A session begins with execution lo
|
|
|
18
18
|
Install [uv](https://docs.astral.sh/uv/getting-started/installation/) so your MCP client can run the package without changing your global Python environment.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
uvx --from fable-engine==1.3.
|
|
21
|
+
uvx --from fable-engine==1.3.5 fable-engine
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
For Claude Code:
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
claude mcp add fable-engine -- uvx --from fable-engine==1.3.
|
|
27
|
+
claude mcp add fable-engine -- uvx --from fable-engine==1.3.5 fable-engine
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
For an MCP client that uses JSON configuration:
|
|
@@ -34,7 +34,7 @@ For an MCP client that uses JSON configuration:
|
|
|
34
34
|
"mcpServers": {
|
|
35
35
|
"fable-engine": {
|
|
36
36
|
"command": "uvx",
|
|
37
|
-
"args": ["--from", "fable-engine==1.3.
|
|
37
|
+
"args": ["--from", "fable-engine==1.3.5", "fable-engine"]
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
@@ -68,7 +68,7 @@ It is not a guarantee of correct code. It makes the path to write access explici
|
|
|
68
68
|
The package has no runtime dependencies. You can confirm the pinned release and inspect its MCP initialization response in an isolated environment before adding it to an editor or agent:
|
|
69
69
|
|
|
70
70
|
```bash
|
|
71
|
-
uvx --from fable-engine==1.3.
|
|
71
|
+
uvx --from fable-engine==1.3.5 fable-engine
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
The server communicates over standard input and output. MCP clients start and manage that process for you after configuration.
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fable_session",
|
|
3
|
-
"description": "Fable
|
|
3
|
+
"description": "Runs one Fable operation selected by action. Use it for Fable sessions, gates, evidence and proofs, review rubrics, checkpoints, compression, design audits, research scrapers, and experimental System 3 operations; use browser tools for web-page interaction. Start stateful workflows with create_session and session_name, then reuse that name. Only the selected action's fields apply. Read-only status, list, telemetry, get, view, and check actions do not persist state; create, log, record, set, advance, checkpoint, restore, track, evaluate, register, compression, generation, evolution, scraper, and update actions can persist state or artifacts. unlock_execution blocks until its gates pass, and apply_auto_update can replace installed files. Results are action-specific text; failures begin with Error:.",
|
|
4
4
|
"parameters": {
|
|
5
5
|
"properties": {
|
|
6
6
|
"a_matrix": {
|
|
7
7
|
"description": "Observation likelihood matrix A [O x S] for Active Inference.",
|
|
8
|
-
"type": [
|
|
8
|
+
"type": [
|
|
9
|
+
"array",
|
|
10
|
+
"string"
|
|
11
|
+
]
|
|
9
12
|
},
|
|
10
13
|
"actions": {
|
|
11
14
|
"description": "List of control action identifiers for Active Inference POMDP.",
|
|
12
|
-
"type": [
|
|
15
|
+
"type": [
|
|
16
|
+
"array",
|
|
17
|
+
"string"
|
|
18
|
+
]
|
|
13
19
|
},
|
|
14
20
|
"action": {
|
|
15
21
|
"description": "The Fable session action to perform.",
|
|
@@ -88,11 +94,17 @@
|
|
|
88
94
|
},
|
|
89
95
|
"axioms": {
|
|
90
96
|
"description": "List of reference axiom names or strings for proof oracle.",
|
|
91
|
-
"type": [
|
|
97
|
+
"type": [
|
|
98
|
+
"array",
|
|
99
|
+
"string"
|
|
100
|
+
]
|
|
92
101
|
},
|
|
93
102
|
"b_matrices": {
|
|
94
103
|
"description": "State transition matrices B [Action -> S x S] for Active Inference.",
|
|
95
|
-
"type": [
|
|
104
|
+
"type": [
|
|
105
|
+
"object",
|
|
106
|
+
"string"
|
|
107
|
+
]
|
|
96
108
|
},
|
|
97
109
|
"base_step": {
|
|
98
110
|
"description": "Base geodesic step distance for hyperbolic tree embedding (default 1.0).",
|
|
@@ -100,7 +112,10 @@
|
|
|
100
112
|
},
|
|
101
113
|
"c_preferences": {
|
|
102
114
|
"description": "Prior preference distribution C over observations for Active Inference.",
|
|
103
|
-
"type": [
|
|
115
|
+
"type": [
|
|
116
|
+
"array",
|
|
117
|
+
"string"
|
|
118
|
+
]
|
|
104
119
|
},
|
|
105
120
|
"cas_ref": {
|
|
106
121
|
"description": "CAS reference URI (cas://<sha256_hex>) or 64-char hash to retrieve, slice, or decompress.",
|
|
@@ -116,7 +131,10 @@
|
|
|
116
131
|
},
|
|
117
132
|
"context": {
|
|
118
133
|
"description": "Hypothesis typing context dictionary {name: type} for proof oracle.",
|
|
119
|
-
"type": [
|
|
134
|
+
"type": [
|
|
135
|
+
"object",
|
|
136
|
+
"string"
|
|
137
|
+
]
|
|
120
138
|
},
|
|
121
139
|
"contradiction_density": {
|
|
122
140
|
"description": "Contradiction density index [0.0, 1.0] for System 3 cognitive gear shifting.",
|
|
@@ -124,7 +142,10 @@
|
|
|
124
142
|
},
|
|
125
143
|
"contradictions": {
|
|
126
144
|
"description": "List of parameter trade-offs / contradictions to resolve with TRIZ principles.",
|
|
127
|
-
"type": [
|
|
145
|
+
"type": [
|
|
146
|
+
"array",
|
|
147
|
+
"string"
|
|
148
|
+
]
|
|
128
149
|
},
|
|
129
150
|
"critique_or_bottleneck": {
|
|
130
151
|
"description": "Critical flaw, vulnerability, edge case, memory/latency bottleneck, or assumption scrutinized.",
|
|
@@ -135,15 +156,18 @@
|
|
|
135
156
|
"type": "number"
|
|
136
157
|
},
|
|
137
158
|
"curvature": {
|
|
138
|
-
"description": "Sectional curvature c > 0 of
|
|
159
|
+
"description": "Sectional curvature c > 0 of Poincar\u00e9 manifold (default 1.0).",
|
|
139
160
|
"type": "number"
|
|
140
161
|
},
|
|
141
162
|
"d_prior": {
|
|
142
163
|
"description": "Prior initial state belief distribution D for Active Inference.",
|
|
143
|
-
"type": [
|
|
164
|
+
"type": [
|
|
165
|
+
"array",
|
|
166
|
+
"string"
|
|
167
|
+
]
|
|
144
168
|
},
|
|
145
169
|
"dimension": {
|
|
146
|
-
"description": "Dimension of
|
|
170
|
+
"description": "Dimension of Poincar\u00e9 ball manifold (default 2).",
|
|
147
171
|
"type": "integer"
|
|
148
172
|
},
|
|
149
173
|
"domain": {
|
|
@@ -152,7 +176,10 @@
|
|
|
152
176
|
},
|
|
153
177
|
"edges": {
|
|
154
178
|
"description": "List of directed edge dictionaries for Causal DAG construction.",
|
|
155
|
-
"type": [
|
|
179
|
+
"type": [
|
|
180
|
+
"array",
|
|
181
|
+
"string"
|
|
182
|
+
]
|
|
156
183
|
},
|
|
157
184
|
"end_line": {
|
|
158
185
|
"description": "Ending line number (1-indexed inclusive) for windowed line slice viewing.",
|
|
@@ -172,7 +199,10 @@
|
|
|
172
199
|
},
|
|
173
200
|
"failure_modes": {
|
|
174
201
|
"description": "List of adversarial failure modes identified in critique.",
|
|
175
|
-
"type": [
|
|
202
|
+
"type": [
|
|
203
|
+
"array",
|
|
204
|
+
"string"
|
|
205
|
+
]
|
|
176
206
|
},
|
|
177
207
|
"focus_area": {
|
|
178
208
|
"description": "Specific subsystem, component, algorithm, or interface being critically re-evaluated.",
|
|
@@ -208,7 +238,10 @@
|
|
|
208
238
|
},
|
|
209
239
|
"interventions": {
|
|
210
240
|
"description": "Dictionary of Pearl's do-operator interventions: {node_id: value}.",
|
|
211
|
-
"type": [
|
|
241
|
+
"type": [
|
|
242
|
+
"object",
|
|
243
|
+
"string"
|
|
244
|
+
]
|
|
212
245
|
},
|
|
213
246
|
"invariant_name": {
|
|
214
247
|
"description": "Identifier or title of the formal invariant (e.g., 'INV-01: Zero-Deadlock Ring Buffer').",
|
|
@@ -248,11 +281,17 @@
|
|
|
248
281
|
},
|
|
249
282
|
"node_labels": {
|
|
250
283
|
"description": "Optional mapping of node IDs to readable labels.",
|
|
251
|
-
"type": [
|
|
284
|
+
"type": [
|
|
285
|
+
"object",
|
|
286
|
+
"string"
|
|
287
|
+
]
|
|
252
288
|
},
|
|
253
289
|
"nodes": {
|
|
254
290
|
"description": "List of node dictionaries for Causal DAG construction.",
|
|
255
|
-
"type": [
|
|
291
|
+
"type": [
|
|
292
|
+
"array",
|
|
293
|
+
"string"
|
|
294
|
+
]
|
|
256
295
|
},
|
|
257
296
|
"objective": {
|
|
258
297
|
"description": "High-level goal or problem statement for the reasoning session.",
|
|
@@ -260,7 +299,10 @@
|
|
|
260
299
|
},
|
|
261
300
|
"objective_weights": {
|
|
262
301
|
"description": "Optional dictionary of weights across the 10 Pareto dimensions.",
|
|
263
|
-
"type": [
|
|
302
|
+
"type": [
|
|
303
|
+
"object",
|
|
304
|
+
"string"
|
|
305
|
+
]
|
|
264
306
|
},
|
|
265
307
|
"observation": {
|
|
266
308
|
"description": "Current sensory observation for Active Inference belief updating.",
|
|
@@ -268,7 +310,10 @@
|
|
|
268
310
|
},
|
|
269
311
|
"observations": {
|
|
270
312
|
"description": "List of observation identifiers for Active Inference POMDP.",
|
|
271
|
-
"type": [
|
|
313
|
+
"type": [
|
|
314
|
+
"array",
|
|
315
|
+
"string"
|
|
316
|
+
]
|
|
272
317
|
},
|
|
273
318
|
"payload": {
|
|
274
319
|
"description": "Micro-payload text for adaptive batch accumulator or CAS storage.",
|
|
@@ -280,7 +325,10 @@
|
|
|
280
325
|
},
|
|
281
326
|
"policies": {
|
|
282
327
|
"description": "List of candidate action sequence policies for Expected Free Energy evaluation.",
|
|
283
|
-
"type": [
|
|
328
|
+
"type": [
|
|
329
|
+
"array",
|
|
330
|
+
"string"
|
|
331
|
+
]
|
|
284
332
|
},
|
|
285
333
|
"population_size": {
|
|
286
334
|
"description": "Population size for evolutionary gene pool (default 12).",
|
|
@@ -304,7 +352,10 @@
|
|
|
304
352
|
},
|
|
305
353
|
"seed_paradigms": {
|
|
306
354
|
"description": "Optional list of initial paradigm definitions to seed the gene pool.",
|
|
307
|
-
"type": [
|
|
355
|
+
"type": [
|
|
356
|
+
"array",
|
|
357
|
+
"string"
|
|
358
|
+
]
|
|
308
359
|
},
|
|
309
360
|
"session_name": {
|
|
310
361
|
"description": "Unique identifier / name for the Fable session.",
|
|
@@ -316,7 +367,10 @@
|
|
|
316
367
|
},
|
|
317
368
|
"states": {
|
|
318
369
|
"description": "List of hidden state identifiers for Active Inference POMDP.",
|
|
319
|
-
"type": [
|
|
370
|
+
"type": [
|
|
371
|
+
"array",
|
|
372
|
+
"string"
|
|
373
|
+
]
|
|
320
374
|
},
|
|
321
375
|
"subagent_prompt": {
|
|
322
376
|
"description": "The delegation prompt or contract text for the subagent to validate.",
|
|
@@ -361,23 +415,42 @@
|
|
|
361
415
|
},
|
|
362
416
|
"transitions": {
|
|
363
417
|
"description": "List of transitions or adjacency dictionary for Kripke structure.",
|
|
364
|
-
"type": [
|
|
418
|
+
"type": [
|
|
419
|
+
"array",
|
|
420
|
+
"object",
|
|
421
|
+
"string"
|
|
422
|
+
]
|
|
365
423
|
},
|
|
366
424
|
"tree": {
|
|
367
425
|
"description": "Tree hierarchy adjacency list or nested dict for hyperbolic embedding.",
|
|
368
|
-
"type": [
|
|
426
|
+
"type": [
|
|
427
|
+
"object",
|
|
428
|
+
"array",
|
|
429
|
+
"string"
|
|
430
|
+
]
|
|
369
431
|
},
|
|
370
432
|
"worlds": {
|
|
371
433
|
"description": "List of world/state definitions for Kripke structure.",
|
|
372
|
-
"type": [
|
|
434
|
+
"type": [
|
|
435
|
+
"array",
|
|
436
|
+
"string"
|
|
437
|
+
]
|
|
373
438
|
},
|
|
374
439
|
"affected_invariants": {
|
|
375
440
|
"description": "List or string of invariant names affected by this file change.",
|
|
376
|
-
"type": [
|
|
441
|
+
"type": [
|
|
442
|
+
"array",
|
|
443
|
+
"string"
|
|
444
|
+
]
|
|
377
445
|
},
|
|
378
446
|
"change_type": {
|
|
379
447
|
"description": "Classification of file change ('modified', 'created', 'deleted', 'slated').",
|
|
380
|
-
"enum": [
|
|
448
|
+
"enum": [
|
|
449
|
+
"modified",
|
|
450
|
+
"created",
|
|
451
|
+
"deleted",
|
|
452
|
+
"slated"
|
|
453
|
+
],
|
|
381
454
|
"type": "string"
|
|
382
455
|
},
|
|
383
456
|
"diff_summary": {
|
|
@@ -390,11 +463,20 @@
|
|
|
390
463
|
},
|
|
391
464
|
"mockups": {
|
|
392
465
|
"description": "List of concept dictionaries for visual mockup recording.",
|
|
393
|
-
"type": [
|
|
466
|
+
"type": [
|
|
467
|
+
"array",
|
|
468
|
+
"string"
|
|
469
|
+
]
|
|
394
470
|
},
|
|
395
471
|
"proof_type": {
|
|
396
472
|
"description": "Deterministic proof type ('ast', 'receipt', 'file_sha256', 'formal_logic', 'vector_coordinates').",
|
|
397
|
-
"enum": [
|
|
473
|
+
"enum": [
|
|
474
|
+
"ast",
|
|
475
|
+
"receipt",
|
|
476
|
+
"file_sha256",
|
|
477
|
+
"formal_logic",
|
|
478
|
+
"vector_coordinates"
|
|
479
|
+
],
|
|
398
480
|
"type": "string"
|
|
399
481
|
},
|
|
400
482
|
"selected_concept": {
|
|
@@ -407,7 +489,10 @@
|
|
|
407
489
|
},
|
|
408
490
|
"criteria": {
|
|
409
491
|
"description": "List of criteria dictionaries or pointer strings for goal scoring rubric.",
|
|
410
|
-
"type": [
|
|
492
|
+
"type": [
|
|
493
|
+
"array",
|
|
494
|
+
"string"
|
|
495
|
+
]
|
|
411
496
|
},
|
|
412
497
|
"rubric_id": {
|
|
413
498
|
"description": "Identifier for the goal scoring rubric contract.",
|
|
@@ -419,7 +504,10 @@
|
|
|
419
504
|
},
|
|
420
505
|
"evaluations": {
|
|
421
506
|
"description": "List of criterion evaluation dictionaries or score updates for evaluate_goal_rubric.",
|
|
422
|
-
"type": [
|
|
507
|
+
"type": [
|
|
508
|
+
"array",
|
|
509
|
+
"string"
|
|
510
|
+
]
|
|
423
511
|
},
|
|
424
512
|
"pipeline_name": {
|
|
425
513
|
"description": "Name or identifier of the autonomous closed-loop pipeline.",
|
|
@@ -455,11 +543,17 @@
|
|
|
455
543
|
},
|
|
456
544
|
"custom_hypotheses": {
|
|
457
545
|
"description": "List or JSON string of custom adversarial hypotheses / attack vectors.",
|
|
458
|
-
"type": [
|
|
546
|
+
"type": [
|
|
547
|
+
"array",
|
|
548
|
+
"string"
|
|
549
|
+
]
|
|
459
550
|
},
|
|
460
551
|
"broken_scenarios": {
|
|
461
552
|
"description": "List or JSON string of broken attack scenarios found during red-team review.",
|
|
462
|
-
"type": [
|
|
553
|
+
"type": [
|
|
554
|
+
"array",
|
|
555
|
+
"string"
|
|
556
|
+
]
|
|
463
557
|
},
|
|
464
558
|
"remediated_code": {
|
|
465
559
|
"description": "Remediated code submitted to verify against broken scenarios.",
|
|
@@ -467,7 +561,10 @@
|
|
|
467
561
|
},
|
|
468
562
|
"prior_report": {
|
|
469
563
|
"description": "Prior red-team breakage report dictionary or JSON string to verify remediation against.",
|
|
470
|
-
"type": [
|
|
564
|
+
"type": [
|
|
565
|
+
"object",
|
|
566
|
+
"string"
|
|
567
|
+
]
|
|
471
568
|
},
|
|
472
569
|
"task_id": {
|
|
473
570
|
"description": "Task identifier for cortical plasticity consolidation or session lineage.",
|
|
@@ -13,13 +13,40 @@ from fable_engine.session import PHASES
|
|
|
13
13
|
|
|
14
14
|
TOOL_SCHEMA = {
|
|
15
15
|
"name": "fable_session",
|
|
16
|
+
"title": "Fable session, evidence, and review workflow",
|
|
16
17
|
"description": (
|
|
17
|
-
"Fable
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"and
|
|
18
|
+
"Runs one Fable operation selected by `action`. Use it for Fable sessions, gates, "
|
|
19
|
+
"evidence/proofs, review rubrics, checkpoints, compression, design audits, research "
|
|
20
|
+
"scrapers, and explicitly experimental System 3 operations; use browser_* tools for "
|
|
21
|
+
"web-page navigation and interaction. Start stateful workflows with `create_session` "
|
|
22
|
+
"and a `session_name`; later session actions reuse that name. Only fields documented "
|
|
23
|
+
"for the selected action are read, and missing or invalid inputs return an `Error:` "
|
|
24
|
+
"message without raising an MCP transport error. Status/list/telemetry/get/view/check "
|
|
25
|
+
"operations are read-only. Create, log, record, set, advance, checkpoint, restore, "
|
|
26
|
+
"track, evaluate, register, compress/accumulate, evolve, generate, and scraper "
|
|
27
|
+
"operations can persist Fable state or artifacts. `unlock_execution` remains blocked "
|
|
28
|
+
"until its time and rationale gates pass; `apply_auto_update` can replace installed "
|
|
29
|
+
"Fable files. The result is action-specific human-readable text in `result`; inspect "
|
|
30
|
+
"that text for success or `Error:` before continuing."
|
|
22
31
|
),
|
|
32
|
+
"annotations": {
|
|
33
|
+
"title": "Fable session, evidence, and review workflow",
|
|
34
|
+
"readOnlyHint": False,
|
|
35
|
+
"destructiveHint": True,
|
|
36
|
+
"idempotentHint": False,
|
|
37
|
+
"openWorldHint": True,
|
|
38
|
+
},
|
|
39
|
+
"outputSchema": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"properties": {
|
|
42
|
+
"result": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"description": "Action-specific result text. Failures begin with `Error:`."
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"required": ["result"],
|
|
48
|
+
"additionalProperties": False,
|
|
49
|
+
},
|
|
23
50
|
"inputSchema": {
|
|
24
51
|
"type": "object",
|
|
25
52
|
"properties": {
|
|
@@ -571,7 +598,10 @@ BROWSER_TOOL_SCHEMAS = [
|
|
|
571
598
|
},
|
|
572
599
|
{
|
|
573
600
|
"name": "browser_navigate",
|
|
574
|
-
"
|
|
601
|
+
"title": "Navigate current browser session",
|
|
602
|
+
"annotations": {"title": "Navigate current browser session", "readOnlyHint": False, "destructiveHint": False, "idempotentHint": False, "openWorldHint": True},
|
|
603
|
+
"outputSchema": {"type": "object", "additionalProperties": True},
|
|
604
|
+
"description": "Loads `url` into an existing browser session, replacing its current document and adding a history entry. Use this instead of browser_open when continuing in a known session; if `session_id` is omitted, the active session is reused or a default session is created. It waits up to `timeout` seconds and returns the resulting URL, title, viewport, scroll position, and indexed elements; network, timeout, size, and parse failures return an error object without changing committed page state.",
|
|
575
605
|
"inputSchema": {
|
|
576
606
|
"type": "object",
|
|
577
607
|
"properties": {
|
|
@@ -602,7 +632,10 @@ BROWSER_TOOL_SCHEMAS = [
|
|
|
602
632
|
},
|
|
603
633
|
{
|
|
604
634
|
"name": "browser_type",
|
|
605
|
-
"
|
|
635
|
+
"title": "Replace text field value",
|
|
636
|
+
"annotations": {"title": "Replace text field value", "readOnlyHint": False, "destructiveHint": False, "idempotentHint": False, "openWorldHint": False},
|
|
637
|
+
"outputSchema": {"type": "object", "additionalProperties": True},
|
|
638
|
+
"description": "Replaces the full value of a text-like input or textarea identified by `element_id`; it does not submit the form. Use browser_press for single-key edits or activation. An omitted `session_id` targets the active/default session. Returns status `typed`, the element ID, and the supplied text; missing or non-editable elements return an error object and are not changed.",
|
|
606
639
|
"inputSchema": {
|
|
607
640
|
"type": "object",
|
|
608
641
|
"properties": {
|
|
@@ -627,7 +660,10 @@ BROWSER_TOOL_SCHEMAS = [
|
|
|
627
660
|
},
|
|
628
661
|
{
|
|
629
662
|
"name": "browser_snapshot_layers",
|
|
630
|
-
"
|
|
663
|
+
"title": "Capture layered page snapshots",
|
|
664
|
+
"annotations": {"title": "Capture layered page snapshots", "readOnlyHint": True, "destructiveHint": False, "idempotentHint": False, "openWorldHint": False},
|
|
665
|
+
"outputSchema": {"type": "object", "additionalProperties": True},
|
|
666
|
+
"description": "Captures up to `max_layers` PNGs from the top of the current document, one 1280x800 viewport per layer, without changing the session scroll position. Use this for multi-viewport page coverage; use browser_screenshot for only the current viewport. An omitted `session_id` targets the active/default session. Returns layer count, offsets, dimensions, and base64 PNG data; `max_layers` defaults to 3 and is capped at 10.",
|
|
631
667
|
"inputSchema": {
|
|
632
668
|
"type": "object",
|
|
633
669
|
"properties": {
|
|
@@ -638,7 +674,10 @@ BROWSER_TOOL_SCHEMAS = [
|
|
|
638
674
|
},
|
|
639
675
|
{
|
|
640
676
|
"name": "browser_screenshot",
|
|
641
|
-
"
|
|
677
|
+
"title": "Capture current viewport",
|
|
678
|
+
"annotations": {"title": "Capture current viewport", "readOnlyHint": True, "destructiveHint": False, "idempotentHint": False, "openWorldHint": False},
|
|
679
|
+
"outputSchema": {"type": "object", "additionalProperties": True},
|
|
680
|
+
"description": "Captures one 1280x800 PNG of the current viewport without navigation or scroll changes. Use this for the visible region; use browser_snapshot_layers for multi-viewport coverage. An omitted `session_id` targets the active/default session. Returns one layer with its offset, dimensions, and base64 PNG data.",
|
|
642
681
|
"inputSchema": {
|
|
643
682
|
"type": "object",
|
|
644
683
|
"properties": {
|
|
@@ -648,7 +687,10 @@ BROWSER_TOOL_SCHEMAS = [
|
|
|
648
687
|
},
|
|
649
688
|
{
|
|
650
689
|
"name": "browser_close",
|
|
651
|
-
"
|
|
690
|
+
"title": "Close browser session",
|
|
691
|
+
"annotations": {"title": "Close browser session", "readOnlyHint": False, "destructiveHint": True, "idempotentHint": False, "openWorldHint": False},
|
|
692
|
+
"outputSchema": {"type": "object", "additionalProperties": True},
|
|
693
|
+
"description": "Closes and permanently discards one in-memory browser session, including its current document and history; persistent profile cookies remain saved. Use it when that tab is no longer needed. `session_id` targets a specific session; if omitted, the active session is closed. Returns `closed`, or `not_found` without changing another session.",
|
|
652
694
|
"inputSchema": {
|
|
653
695
|
"type": "object",
|
|
654
696
|
"properties": {
|
|
@@ -658,7 +700,10 @@ BROWSER_TOOL_SCHEMAS = [
|
|
|
658
700
|
},
|
|
659
701
|
{
|
|
660
702
|
"name": "browser_back",
|
|
661
|
-
"
|
|
703
|
+
"title": "Go back in browser history",
|
|
704
|
+
"annotations": {"title": "Go back in browser history", "readOnlyHint": False, "destructiveHint": False, "idempotentHint": False, "openWorldHint": True},
|
|
705
|
+
"outputSchema": {"type": "object", "additionalProperties": True},
|
|
706
|
+
"description": "Loads the previous history entry in the active or named browser session without adding a new history entry. Use it for history traversal rather than browser_navigate. If history is already at its first entry, it is a no-op that returns current page status. A navigation failure returns an error and preserves the history index; omitting `session_id` reuses or creates the active/default session.",
|
|
662
707
|
"inputSchema": {
|
|
663
708
|
"type": "object",
|
|
664
709
|
"properties": {
|
|
@@ -668,7 +713,10 @@ BROWSER_TOOL_SCHEMAS = [
|
|
|
668
713
|
},
|
|
669
714
|
{
|
|
670
715
|
"name": "browser_forward",
|
|
671
|
-
"
|
|
716
|
+
"title": "Go forward in browser history",
|
|
717
|
+
"annotations": {"title": "Go forward in browser history", "readOnlyHint": False, "destructiveHint": False, "idempotentHint": False, "openWorldHint": True},
|
|
718
|
+
"outputSchema": {"type": "object", "additionalProperties": True},
|
|
719
|
+
"description": "Loads the next history entry in the active or named browser session without adding a new history entry. Use it after browser_back rather than browser_navigate. If no forward entry exists, it is a no-op that returns current page status. A navigation failure returns an error and preserves the history index; omitting `session_id` reuses or creates the active/default session.",
|
|
672
720
|
"inputSchema": {
|
|
673
721
|
"type": "object",
|
|
674
722
|
"properties": {
|
|
@@ -25,7 +25,7 @@ from typing import Any, Dict, List, Optional, Tuple
|
|
|
25
25
|
|
|
26
26
|
logger = logging.getLogger("fable-engine.scrapers.base")
|
|
27
27
|
|
|
28
|
-
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 FableResearch/1.3.
|
|
28
|
+
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 FableResearch/1.3.5"
|
|
29
29
|
|
|
30
30
|
MAX_RETRY_DELAY_SECONDS = 10.0
|
|
31
31
|
|
|
@@ -237,7 +237,7 @@ def main():
|
|
|
237
237
|
},
|
|
238
238
|
"serverInfo": {
|
|
239
239
|
"name": "fable-engine",
|
|
240
|
-
"version": "1.3.
|
|
240
|
+
"version": "1.3.5"
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
243
|
})
|
|
@@ -282,6 +282,7 @@ def main():
|
|
|
282
282
|
"text": result_text
|
|
283
283
|
}
|
|
284
284
|
],
|
|
285
|
+
"structuredContent": {"result": result_text},
|
|
285
286
|
"isError": False
|
|
286
287
|
}
|
|
287
288
|
})
|
|
@@ -370,6 +371,7 @@ def main():
|
|
|
370
371
|
"text": json.dumps(res, indent=2)
|
|
371
372
|
}
|
|
372
373
|
],
|
|
374
|
+
"structuredContent": res if isinstance(res, dict) else {"result": res},
|
|
373
375
|
"isError": is_error
|
|
374
376
|
}
|
|
375
377
|
})
|
|
@@ -1530,7 +1530,7 @@ class FableSession:
|
|
|
1530
1530
|
def to_dict(self) -> Dict[str, Any]:
|
|
1531
1531
|
"""Serializes session to dictionary."""
|
|
1532
1532
|
return {
|
|
1533
|
-
"version": "1.3.
|
|
1533
|
+
"version": "1.3.5",
|
|
1534
1534
|
"session_name": self.session_name,
|
|
1535
1535
|
"session_id": self.session_id,
|
|
1536
1536
|
"objective": self.objective,
|