#188 by GitHub stars

2FastLabs/agent-squad

Flexible and powerful framework for managing multiple AI agents and handling complex conversations

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

python/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

729d5f52869c → 729d5f52869c

Compare on GitHub

Week of Oct 26, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

729d5f52869c → 729d5f52869c

Compare on GitHub

swift/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

729d5f52869c → 729d5f52869c

Compare on GitHub

Week of Oct 26, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

729d5f52869c → 729d5f52869c

Compare on GitHub

typescript/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

729d5f52869c → 729d5f52869c

Compare on GitHub

Week of Oct 26, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

729d5f52869c → 729d5f52869c

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 729d5f52869c8280f599a9fa5cf27fc1df445602

7.8kGitHub stars
3stars in 7 days
3skills in this repository
0commits in 30 days

Heat

2.4
  • Star growth, last 7 daysAhead of 35% of tracked repositories
  • Star growth, last 24 hoursAhead of 3% of tracked repositories
  • Rank movement, last 7 daysAhead of 52% of tracked repositories
  • Commits, last 30 daysAhead of 0% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 2, 2026Nov 5, 20267,799

Individual skills in this repository

How it works

agent-squad-python

When your agent uses it

Use when building or modifying a Python app that uses the agent-squad Python package — async multi-agent orchestration for Python 3.11+: orchestrator, agents (BedrockLLMAgent, AnthropicAgent, OpenAIAgent, SupervisorAgent, GroundedAgent, ChainAgent, and more), classifier routing (Bedrock, Anthropic, OpenAI), storage (in-memory, DynamoDB, SQL/Turso), retrievers (Amazon KB, Dakera), tools (AgentTools, MCPToolProvider), and custom implementations.

What it loads into context

Frontmatter

127 tokens

Always available to the agent

SKILL.md

4,697 tokens

When the skill is activated

Reference documents

3,548 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. When to use what
  2. How to install
  3. How a turn works
  4. The pieces
  5. Custom implementations
  6. Gotchas
  7. Go deeper

Scripts executed separately

  • Makefile
  • setup.py
  • src/agent_squad/__init__.py
  • src/agent_squad/agent_overlap_analyzer.py
  • src/agent_squad/agents/__init__.py
  • src/agent_squad/agents/agent.py
  • src/agent_squad/agents/amazon_bedrock_agent.py
  • src/agent_squad/agents/anthropic_agent.py
  • src/agent_squad/agents/bedrock_flows_agent.py
  • src/agent_squad/agents/bedrock_inline_agent.py
  • src/agent_squad/agents/bedrock_llm_agent.py
  • src/agent_squad/agents/bedrock_translator_agent.py
  • src/agent_squad/agents/chain_agent.py
  • src/agent_squad/agents/comprehend_filter_agent.py
  • src/agent_squad/agents/grounded_agent.py
  • src/agent_squad/agents/lambda_agent.py
  • src/agent_squad/agents/lex_bot_agent.py
  • src/agent_squad/agents/openai_agent.py
  • src/agent_squad/agents/strands_agent.py
  • src/agent_squad/agents/supervisor_agent.py
  • src/agent_squad/classifier_test_tool.py
  • src/agent_squad/classifiers/__init__.py
  • src/agent_squad/classifiers/anthropic_classifier.py
  • src/agent_squad/classifiers/bedrock_classifier.py
  • src/agent_squad/classifiers/classifier.py
  • src/agent_squad/classifiers/jev_classifier.py
  • src/agent_squad/classifiers/openai_classifier.py
  • src/agent_squad/orchestrator.py
  • src/agent_squad/retrievers/__init__.py
  • src/agent_squad/retrievers/amazon_kb_retriever.py
  • src/agent_squad/retrievers/dakera_retriever.py
  • src/agent_squad/retrievers/retriever.py
  • src/agent_squad/shared/__init__.py
  • src/agent_squad/shared/user_agent.py
  • src/agent_squad/shared/version.py
  • src/agent_squad/storage/__init__.py
  • src/agent_squad/storage/chat_storage.py
  • src/agent_squad/storage/dynamodb_chat_storage.py
  • src/agent_squad/storage/in_memory_chat_storage.py
  • src/agent_squad/storage/sql_chat_storage.py
  • src/agent_squad/storage/summarizing_chat_storage.py
  • src/agent_squad/tools/__init__.py
  • src/agent_squad/tools/mcp_tool_provider.py
  • src/agent_squad/types/__init__.py
  • src/agent_squad/types/types.py
  • src/agent_squad/utils/__init__.py
  • src/agent_squad/utils/helpers.py
  • src/agent_squad/utils/logger.py
  • src/agent_squad/utils/tool.py
  • src/agent_squad/utils/ui.py
  • src/tests/__init__.py
  • src/tests/agents/__init__.py
  • src/tests/agents/test_agent.py
  • src/tests/agents/test_amazon_bedrock_agent.py
  • src/tests/agents/test_anthropic_agent.py
  • src/tests/agents/test_bedrock_flows_agent.py
  • src/tests/agents/test_bedrock_inline_agent.py
  • src/tests/agents/test_bedrock_llm_agent.py
  • src/tests/agents/test_chain_agent.py
  • src/tests/agents/test_comprehend_agent.py
  • src/tests/agents/test_grounded_agent.py
  • src/tests/agents/test_lambda_agent.py
  • src/tests/agents/test_lex_bot_agent.py
  • src/tests/agents/test_openai_agent.py
  • src/tests/agents/test_openai_usage_stream.py
  • src/tests/agents/test_strands_agent.py
  • src/tests/agents/test_supervisor_agent.py
  • src/tests/classifier_test_tool/test_classifier_test_tool.py
  • src/tests/classifiers/__init__.py
  • src/tests/classifiers/test_anthropic_classifier.py
  • src/tests/classifiers/test_bedrock_classifier.py
  • src/tests/classifiers/test_classifier.py
  • src/tests/classifiers/test_jev_classifier.py
  • src/tests/retrievers/test_dakera_retriever.py
  • src/tests/retrievers/test_retriever.py
  • src/tests/storage/__init__.py
  • src/tests/storage/test_chat_storage.py
  • src/tests/storage/test_dynamodb_chat_storage.py
  • src/tests/storage/test_in_memory_chat_storage.py
  • src/tests/storage/test_sql_chat_storage.py
  • src/tests/storage/test_summarizing_chat_storage.py
  • src/tests/test_agent_overlap_analyzer.py
  • src/tests/test_orchestrator.py
  • src/tests/tools/__init__.py
  • src/tests/tools/test_mcp_tool_provider.py
  • src/tests/utils/test_helpers.py
  • src/tests/utils/test_logger.py
  • src/tests/utils/test_tool.py

Files

  • .gitignoreasset3,258 bytes
  • CONTRIBUTING.mddoc2,363 bytes
  • Makefileruns237 bytes
  • README.mddoc12,791 bytes
  • SKILL.mdcore18,999 bytes
  • SKILL.mdcore18,999 bytes
  • SKILL.mdcore18,999 bytes
  • SKILL.mdcore18,999 bytes
  • SKILL.mdcore18,999 bytes
  • SKILL.mdcore18,999 bytes
  • SKILL.mdcore18,999 bytes
  • SKILL.mdcore18,999 bytes
  • SKILL.mdcore18,999 bytes
  • SKILL.mdcore18,999 bytes
  • pyproject.tomlasset92 bytes
  • ruff.tomlasset3,428 bytes
  • setup.cfgasset1,022 bytes
  • setup.pyruns37 bytes
  • src/agent_squad/__init__.pyruns224 bytes
  • src/agent_squad/agent_overlap_analyzer.pyruns5,734 bytes
  • src/agent_squad/agents/__init__.pyruns2,931 bytes
  • src/agent_squad/agents/agent.pyruns10,960 bytes
  • src/agent_squad/agents/amazon_bedrock_agent.pyruns7,431 bytes
  • src/agent_squad/agents/anthropic_agent.pyruns20,372 bytes
  • src/agent_squad/agents/bedrock_flows_agent.pyruns4,440 bytes
  • src/agent_squad/agents/bedrock_inline_agent.pyruns14,832 bytes
  • src/agent_squad/agents/bedrock_llm_agent.pyruns24,992 bytes
  • src/agent_squad/agents/bedrock_translator_agent.pyruns5,775 bytes
  • src/agent_squad/agents/chain_agent.pyruns3,804 bytes
  • src/agent_squad/agents/comprehend_filter_agent.pyruns6,638 bytes
  • src/agent_squad/agents/grounded_agent.pyruns14,613 bytes
  • src/agent_squad/agents/lambda_agent.pyruns3,717 bytes
  • src/agent_squad/agents/lex_bot_agent.pyruns2,569 bytes
  • src/agent_squad/agents/openai_agent.pyruns8,418 bytes
  • src/agent_squad/agents/strands_agent.pyruns17,634 bytes
  • src/agent_squad/agents/supervisor_agent.pyruns14,118 bytes
  • src/agent_squad/classifier_test_tool.pyruns10,575 bytes
  • src/agent_squad/classifiers/__init__.pyruns1,205 bytes
  • src/agent_squad/classifiers/anthropic_classifier.pyruns5,123 bytes
  • src/agent_squad/classifiers/bedrock_classifier.pyruns6,587 bytes
  • src/agent_squad/classifiers/classifier.pyruns8,357 bytes
  • src/agent_squad/classifiers/jev_classifier.pyruns12,370 bytes
  • src/agent_squad/classifiers/openai_classifier.pyruns4,208 bytes
  • src/agent_squad/orchestrator.pyruns16,802 bytes
  • src/agent_squad/retrievers/__init__.pyruns369 bytes
  • src/agent_squad/retrievers/amazon_kb_retriever.pyruns2,123 bytes
  • src/agent_squad/retrievers/dakera_retriever.pyruns3,758 bytes
  • src/agent_squad/retrievers/retriever.pyruns1,905 bytes
  • src/agent_squad/shared/__init__.pyruns0 bytes
  • src/agent_squad/shared/user_agent.pyruns6,985 bytes
  • src/agent_squad/shared/version.pyruns50 bytes
  • src/agent_squad/storage/__init__.pyruns759 bytes
  • src/agent_squad/storage/chat_storage.pyruns4,644 bytes
  • src/agent_squad/storage/dynamodb_chat_storage.pyruns8,252 bytes
  • src/agent_squad/storage/in_memory_chat_storage.pyruns4,633 bytes
  • src/agent_squad/storage/sql_chat_storage.pyruns11,753 bytes
  • src/agent_squad/storage/summarizing_chat_storage.pyruns6,726 bytes
  • src/agent_squad/tools/__init__.pyruns211 bytes
  • src/agent_squad/tools/mcp_tool_provider.pyruns24,349 bytes
  • src/agent_squad/types/__init__.pyruns928 bytes
  • src/agent_squad/types/types.pyruns2,797 bytes
  • src/agent_squad/utils/__init__.pyruns468 bytes
  • src/agent_squad/utils/helpers.pyruns1,157 bytes
  • src/agent_squad/utils/logger.pyruns3,980 bytes
  • src/agent_squad/utils/tool.pyruns11,385 bytes
  • src/agent_squad/utils/ui.pyruns1,906 bytes
  • src/tests/__init__.pyruns0 bytes
  • src/tests/agents/__init__.pyruns0 bytes
  • src/tests/agents/test_agent.pyruns7,518 bytes
  • src/tests/agents/test_amazon_bedrock_agent.pyruns6,755 bytes
  • src/tests/agents/test_anthropic_agent.pyruns32,648 bytes
  • src/tests/agents/test_bedrock_flows_agent.pyruns11,083 bytes
  • src/tests/agents/test_bedrock_inline_agent.pyruns8,282 bytes
  • src/tests/agents/test_bedrock_llm_agent.pyruns32,632 bytes
  • src/tests/agents/test_chain_agent.pyruns3,437 bytes
  • src/tests/agents/test_comprehend_agent.pyruns7,695 bytes
  • src/tests/agents/test_grounded_agent.pyruns16,771 bytes
  • src/tests/agents/test_lambda_agent.pyruns6,036 bytes
  • src/tests/agents/test_lex_bot_agent.pyruns3,169 bytes
  • src/tests/agents/test_openai_agent.pyruns5,641 bytes
  • src/tests/agents/test_openai_usage_stream.pyruns2,674 bytes
  • src/tests/agents/test_strands_agent.pyruns29,714 bytes
  • src/tests/agents/test_supervisor_agent.pyruns19,003 bytes
  • src/tests/classifier_test_tool/sample_config.jsonasset1,058 bytes
  • src/tests/classifier_test_tool/test_classifier_test_tool.pyruns6,842 bytes
  • src/tests/classifiers/__init__.pyruns0 bytes
  • src/tests/classifiers/test_anthropic_classifier.pyruns17,535 bytes
  • src/tests/classifiers/test_bedrock_classifier.pyruns3,589 bytes
  • src/tests/classifiers/test_classifier.pyruns5,308 bytes
  • src/tests/classifiers/test_jev_classifier.pyruns16,910 bytes
  • src/tests/pytest.iniasset44 bytes
  • src/tests/retrievers/test_dakera_retriever.pyruns3,742 bytes
  • src/tests/retrievers/test_retriever.pyruns1,665 bytes
  • src/tests/storage/__init__.pyruns0 bytes
  • src/tests/storage/test_chat_storage.pyruns4,748 bytes
  • src/tests/storage/test_dynamodb_chat_storage.pyruns7,907 bytes
  • src/tests/storage/test_in_memory_chat_storage.pyruns5,756 bytes
  • src/tests/storage/test_sql_chat_storage.pyruns12,228 bytes
  • src/tests/storage/test_summarizing_chat_storage.pyruns8,463 bytes
  • src/tests/test_agent_overlap_analyzer.pyruns4,977 bytes
  • src/tests/test_orchestrator.pyruns10,914 bytes
  • src/tests/tools/__init__.pyruns0 bytes
  • src/tests/tools/test_mcp_tool_provider.pyruns38,366 bytes
  • src/tests/utils/test_helpers.pyruns2,308 bytes
  • src/tests/utils/test_logger.pyruns5,329 bytes
  • src/tests/utils/test_tool.pyruns22,163 bytes
  • test_requirements.txtdoc120 bytes
Read SKILL.md

# agent-squad Python — assistant guide

Async-first, dependency-optional multi-agent orchestration framework (Python 3.11+). This is a
guide and a map — **not an API reference**. Read exact signatures from the source
(`python/src/agent_squad/`) and the docs site (`docs/src/content/docs/`); this file tells you
*what to use, when, and what to watch out for*.

## When to use what

- **One assistant** — a single `Agent` subclass; no orchestrator needed, call `process_request`
  directly.
- **Several specialists** — multiple agents + an `AgentSquad` orchestrator; the classifier routes
  each turn to the right agent automatically.
- **Answers must not drift from data** (prices, balances, live stock) — `GroundedAgent`: a gatherer
View the complete source on GitHub

Skills included

  • agent-squad-python
  • agent-squad-swift
  • agent-squad-typescript

Repository facts

License
Apache-2.0
Created
Jul 23, 2024
Last pushed
Oct 8, 2026
Forks
747
Open issues
39
Project activity
Active

Rank over the last 12 weeks

Now #188 · best #147 · down 23 in 30 days

  1. #181 from Oct 28 to Oct 29
  2. #182 on Oct 30
  3. #183 on Oct 31
  4. #184 from Nov 1 to Nov 2
  5. #185 from Nov 3 to Nov 5
  6. #188 since Nov 6
44 earlier periods
  1. #139 on Aug 2
  2. #142 on Aug 6
  3. #141 on Aug 8
  4. #145 from Aug 10 to Aug 11
  5. #146 on Aug 13
  6. #148 on Aug 14
  7. #147 on Aug 16
  8. #148 on Aug 18
  9. #149 on Aug 19
  10. #149 on Aug 21
  11. #151 from Aug 23 to Aug 25
  12. #152 on Aug 27
  13. #152 on Aug 29
  14. #153 on Sep 1
  15. #153 on Sep 3
  16. #151 on Sep 4
  17. #153 on Sep 5
  18. #156 on Sep 8
  19. #157 from Sep 9 to Sep 10
  20. #158 on Sep 12
  21. #159 on Sep 13
  22. #160 from Sep 15 to Sep 16
  23. #161 from Sep 20 to Sep 21
  24. #160 on Sep 22
  25. #161 on Sep 23
  26. #160 on Sep 25
  27. #162 from Sep 26 to Sep 27
  28. #163 from Sep 28 to Sep 29
  29. #161 on Sep 30
  30. #164 on Oct 2
  31. #162 on Oct 3
  32. #161 on Oct 4
  33. #162 on Oct 5
  34. #163 on Oct 6
  35. #165 on Oct 7
  36. #165 on Oct 9
  37. #167 on Oct 12
  38. #169 on Oct 13
  39. #169 on Oct 16
  40. #171 on Oct 17
  41. #173 from Oct 18 to Oct 19
  42. #175 on Oct 21
  43. #175 on Oct 24
  44. #177 on Oct 25

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 2, 2026

Changed on Oct 27, 2026

No longer found: Dangerous shell operation, Access to secrets

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 11 notes
  • python/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • python/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • python/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • python/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • python/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • python/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • python/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • python/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • python/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • typescript/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • typescript/package-lock.json:10132 Analysis incomplete: regex work limit reached
Show all 1,170 signals by file

python/.gitignore

  • Network accessline 99
    #   This is especially recommended for binary packages to ensure reproducibility, and is more #   commonly ignored for libraries. #   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
  • Network accessline 100
    #   commonly ignored for libraries. #   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock
  • Network accessline 101
    #   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
  • Network accessline 107
    #   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it #   in version control. #   https://pdm.fming.dev/#use-with-ide
  • Network accessline 108
    #   in version control. #   https://pdm.fming.dev/#use-with-ide .pdm.toml
  • Network accessline 109
    #   https://pdm.fming.dev/#use-with-ide
  • Access to secretsline 123
    [Credential-related source omitted]
  • Network accessline 155
    # PyCharm #  JetBrains specific template is maintained in a separate JetBrains.gitignore that can #  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
  • Network accessline 156
    #  JetBrains specific template is maintained in a separate JetBrains.gitignore that can #  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore #  and can be added to the global gitignore or merged into this 
  • Network accessline 157
    #  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore

python/CONTRIBUTING.md

  • Network accessline 8
    #### Installation Options: - Windows: [Python Official Website](https://www.python.org/downloads/windows/)
  • Network accessline 9
    - Windows: [Python Official Website](https://www.python.org/downloads/windows/)
  • Network accessline 10
    - macOS:   - [Python Official Website](https://www.python.org/downloads/macos/)   - Homebrew: `brew install python@3.11`
  • Network accessline 11
    - [Python Official Website](https://www.python.org/downloads/macos/)
  • Dangerous shell operationline 15
    sudo add-apt-repository ppa:deadsnakes/ppa
  • Dangerous shell operationline 16
    sudo apt update
  • Dangerous shell operationline 17
    sudo apt install python3.11 python3.11-venv python3.11-dev
  • Network accessline 24
    git clone https://github.com/YOUR_USERNAME/REPOSITORY_NAME.git
  • Dangerous shell operationline 108
    rm -rf .venv

python/Makefile

  • Executable scriptline 1
    Executable file

python/README.md

  • Network accessline 6
    <p align="center">   <a href="https://github.com/2fastlabs/agent-squad"><img alt="GitHub Repo" src="https://img.shields.io/badge/GitHub-Repo-green.svg" /></a>
  • Network accessline 7
    <a href="https://github.com/2fastlabs/agent-squad"><img alt="GitHub Repo" src="https://img.shields.io/badge/GitHub-Repo-green.svg" /></a>
  • Network accessline 8
    <a href="https://pypi.org/project/agent-squad/"><img alt="PyPI" src="https://img.shields.io/pypi/v/agent-squad.svg?style=flat-square"></a>
  • Network accessline 9
    <a href="https://2fastlabs.github.io/agent-squad/"><img alt="Documentation" src="https://img.shields.io/badge/docs-book-blue.svg?style=flat-square"></a>
  • Network accessline 12
    <p align="center">   <!-- GitHub Stats -->   <img src="https://img.shields.io/github/stars/2fastlabs/agent-squad?style=social" alt="GitHub stars">
  • Network accessline 13
    <!-- GitHub Stats -->   <img src="https://img.shields.io/github/stars/2fastlabs/agent-squad?style=social" alt="GitHub stars">   <img src="https://img.shields.io/github/forks/2fastlabs/agent-squad?style=social" alt="GitHub forks">
  • Network accessline 14
    <img src="https://img.shields.io/github/stars/2fastlabs/agent-squad?style=social" alt="GitHub stars">
  • Network accessline 15
    <img src="https://img.shields.io/github/forks/2fastlabs/agent-squad?style=social" alt="GitHub forks">
  • Network accessline 16
    <img src="https://img.shields.io/github/watchers/2fastlabs/agent-squad?style=social" alt="GitHub watchers">
  • Network accessline 19
    <p align="center">   <!-- Repository Info -->   <img src="https://img.shields.io/github/last-commit/2fastlabs/agent-squad" alt="Last Commit">
  • Network accessline 20
    <!-- Repository Info -->   <img src="https://img.shields.io/github/last-commit/2fastlabs/agent-squad" alt="Last Commit">   <img src="https://img.shields.io/github/issues/2fastlabs/agent-squad" alt="Issues">
  • Network accessline 21
    <img src="https://img.shields.io/github/last-commit/2fastlabs/agent-squad" alt="Last Commit">   <img src="https://img.shields.io/github/issues/2fastlabs/agent-squad" alt="Issues">   <img src="https://img.shields.io/github/issues-pr/2fastlab
  • Network accessline 22
    <img src="https://img.shields.io/github/issues/2fastlabs/agent-squad" alt="Issues">   <img src="https://img.shields.io/github/issues-pr/2fastlabs/agent-squad" alt="Pull Requests"> </p>
  • Network accessline 23
    <img src="https://img.shields.io/github/issues-pr/2fastlabs/agent-squad" alt="Pull Requests">
  • Network accessline 26
    <p align="center">   <!-- Package Stats -->   <a href="https://pypi.org/project/agent-squad/"><img src="https://img.shields.io/pypi/dm/agent-squad?label=pypi%20downloads" alt="PyPI Monthly Downloads"></a>
  • Network accessline 27
    <!-- Package Stats -->   <a href="https://pypi.org/project/agent-squad/"><img src="https://img.shields.io/pypi/dm/agent-squad?label=pypi%20downloads" alt="PyPI Monthly Downloads"></a>   <img src="https://img.shields.io/static/v1?label=pytho
  • Network accessline 28
    <a href="https://pypi.org/project/agent-squad/"><img src="https://img.shields.io/pypi/dm/agent-squad?label=pypi%20downloads" alt="PyPI Monthly Downloads"></a>
  • Network accessline 29
    <img src="https://img.shields.io/static/v1?label=python&message=%203.11|%203.12|%203.13&color=blue?style=flat-square&logo=python" alt="Python versions">
  • Network accessline 45
    Route requests with [Jev](https://docs.typesafe.ai/introduction), TypeSafe AI's decision model, instead of an LLM. Your agents become a typed `choice` question, and Jev returns the chosen agent plus a calibrated confidence. There's no outpu
  • Access to secretsline 51
    [Credential-related source omitted]
  • Network accessline 54
    [JevClassifier docs](https://2fastlabs.github.io/agent-squad/classifiers/built-in/jev-classifier) · [demos](https://github.com/2fastlabs/agent-squad/tree/main/examples/jev-demo/python)
  • Network accessline 69
    ![High-level architecture flow diagram](https://raw.githubusercontent.com/2fastlabs/agent-squad/main/img/flow.jpg)
  • Network accessline 82
    To quickly get a feel for the Agent Squad, we've provided a Demo App with a few basic agents. This interactive demo showcases the orchestrator's capabilities in a user-friendly interface. To learn more about setting up and running the demo 
  • Network accessline 99
    Click on the image below to see a screen recording of the demo app on the GitHub repository of the project: <a href="https://github.com/2fastlabs/agent-squad" target="_blank">
  • Network accessline 100
    <a href="https://github.com/2fastlabs/agent-squad" target="_blank">
  • Network accessline 101
    <img src="https://raw.githubusercontent.com/2fastlabs/agent-squad/main/img/demo-app.jpg" alt="Demo App Screen Recording" style="max-width: 100%; height: auto;">
  • Network accessline 108
    Check out our [documentation](https://2fastlabs.github.io/agent-squad/) for comprehensive guides on setting up and using the Agent Squad!
  • Dangerous shell operationline 274
    - Clean the `dist` directory before rebuilding if you encounter issues: `rm -rf python/dist/*`
  • Network accessline 290
    We welcome contributions! Please see our [Contributing Guide](https://raw.githubusercontent.com/2fastlabs/agent-squad/main/CONTRIBUTING.md) for more details.
  • Network accessline 294
    This project is licensed under the Apache 2.0 licence - see the [LICENSE](https://raw.githubusercontent.com/2fastlabs/agent-squad/main/LICENSE) file for details.
  • Network accessline 296
    ## 📄 Font License This project uses the JetBrainsMono NF font, licensed under the SIL Open Font License 1.1. For full license details, see [FONT-LICENSE.md](https://github.com/JetBrains/JetBrainsMono/blob/master/OFL.txt).
  • Network accessline 298
    For full license details, see [FONT-LICENSE.md](https://github.com/JetBrains/JetBrainsMono/blob/master/OFL.txt).

python/SKILL.md

  • Access to secretsline 239
    [Credential-related source omitted]
  • Network accessline 270
    provider = await MCPToolProvider.create([     MCPServerConfig(type="stdio", command="uvx", args=["my-mcp-server"]),     MCPServerConfig(type="sse", url="http://localhost:3000/sse"),
  • Network accessline 271
    MCPServerConfig(type="stdio", command="uvx", args=["my-mcp-server"]),     MCPServerConfig(type="sse", url="http://localhost:3000/sse"), ])
  • Network accessline 272
    MCPServerConfig(type="sse", url="http://localhost:3000/sse"),

python/ruff.toml

  • Network accessline 1
    # Enable rules. lint.select = [     "A",   # flake8-builtins - https://docs.astral.sh/ruff/rules/#flake8-builtins-a
  • Network accessline 2
    lint.select = [     "A",   # flake8-builtins - https://docs.astral.sh/ruff/rules/#flake8-builtins-a     "B",   # flake8-bugbear-b - https://docs.astral.sh/ruff/rules/#flake8-bugbear-b
  • Network accessline 3
    "A",   # flake8-builtins - https://docs.astral.sh/ruff/rules/#flake8-builtins-a
  • Network accessline 4
    "B",   # flake8-bugbear-b - https://docs.astral.sh/ruff/rules/#flake8-bugbear-b
  • Network accessline 5
    #"C4",  # flake8-comprehensions - https://docs.astral.sh/ruff/rules/#flake8-comprehensions-c4
  • Network accessline 6
    #"C90", # mccabe - https://docs.astral.sh/ruff/rules/#mccabe-c90
  • Network accessline 7
    #"COM", # flak8-commas - https://docs.astral.sh/ruff/rules/#flake8-commas-com
  • Network accessline 8
    #"D", # pydocstyle - https://docs.astral.sh/ruff/rules/#pydocstyle-d
  • Network accessline 9
    #"E",   # pycodestyle error - https://docs.astral.sh/ruff/rules/#error-e
  • Network accessline 10
    #"ERA", # flake8-eradicate - https://docs.astral.sh/ruff/rules/#eradicate-era
  • Network accessline 11
    #"FA",  # flake8-future-annotations - https://docs.astral.sh/ruff/rules/#flake8-future-annotations-fa
  • Network accessline 12
    #"FIX", # flake8-fixme - https://docs.astral.sh/ruff/rules/#flake8-fixme-fix
  • Network accessline 13
    #"F",   # pyflakes - https://docs.astral.sh/ruff/rules/#pyflakes-f
  • Network accessline 14
    #"I",   # isort - https://docs.astral.sh/ruff/rules/#isort-i
  • Network accessline 15
    #"ICN", # flake8-import-conventions - https://docs.astral.sh/ruff/rules/#flake8-import-conventions-icn
  • Network accessline 16
    #"ISC", # flake8-implicit-str-concat - https://docs.astral.sh/ruff/rules/#flake8-implicit-str-concat-isc
  • Network accessline 17
    #"PLE", # pylint error - https://docs.astral.sh/ruff/rules/#error-ple
  • Network accessline 18
    #"PLC", # pylint convention - https://docs.astral.sh/ruff/rules/#convention-plc
  • Network accessline 19
    #"PLR", # pylint refactoring - https://docs.astral.sh/ruff/rules/#refactor-plr
  • Network accessline 20
    #"PLW", # pylint warning - https://docs.astral.sh/ruff/rules/#warning-plw
  • Network accessline 21
    #"PL",  # pylint - https://docs.astral.sh/ruff/rules/#pylint-pl
  • Network accessline 22
    #"PYI", # flake8-pyi - https://docs.astral.sh/ruff/rules/#flake8-pyi-pyi
  • Network accessline 23
    #"Q",   # flake8-quotes - https://docs.astral.sh/ruff/rules/#flake8-quotes-q
  • Network accessline 24
    #"PTH", # flake8-use-pathlib - https://docs.astral.sh/ruff/rules/#flake8-use-pathlib-pth
  • Network accessline 25
    #"T10", # flake8-debugger https://docs.astral.sh/ruff/rules/#flake8-debugger-t10
  • Network accessline 26
    #"TCH", # flake8-type-checking - https://docs.astral.sh/ruff/rules/#flake8-type-checking-tch
  • Network accessline 27
    #"TD",  # flake8-todo - https://docs.astral.sh/ruff/rules/#flake8-todos-td
  • Network accessline 28
    #"UP",  # pyupgrade - https://docs.astral.sh/ruff/rules/#pyupgrade-up
  • Network accessline 29
    #"W",   # pycodestyle warning - https://docs.astral.sh/ruff/rules/#warning-w
  • Network accessline 32
    # Ignore specific rules lint.ignore = [     #"W291",    # https://docs.astral.sh/ruff/rules/trailing-whitespace/
  • Network accessline 33
    lint.ignore = [     #"W291",    # https://docs.astral.sh/ruff/rules/trailing-whitespace/     #"PLR0913", # https://docs.astral.sh/ruff/rules/too-many-arguments/
  • Network accessline 34
    #"W291",    # https://docs.astral.sh/ruff/rules/trailing-whitespace/
  • Network accessline 35
    #"PLR0913", # https://docs.astral.sh/ruff/rules/too-many-arguments/
  • Network accessline 36
    #"PLR2004", #https://docs.astral.sh/ruff/rules/magic-value-comparison/
  • Network accessline 37
    #"PLW0603", #https://docs.astral.sh/ruff/rules/global-statement/
  • Network accessline 40
    #"PYI024",     #"A005",     #"TC006" # https://docs.astral.sh/ruff/rules/runtime-cast-value/
  • Network accessline 41
    #"A005",     #"TC006" # https://docs.astral.sh/ruff/rules/runtime-cast-value/ ]
  • Network accessline 42
    #"TC006" # https://docs.astral.sh/ruff/rules/runtime-cast-value/

python/setup.cfg

  • Network accessline 9
    license = Apache License 2.0 license_files = LICENSE url = https://github.com/2fastlabs/agent-squad
  • Network accessline 10
    license_files = LICENSE url = https://github.com/2fastlabs/agent-squad classifiers =
  • Network accessline 11
    url = https://github.com/2fastlabs/agent-squad

python/setup.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/__init__.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agent_overlap_analyzer.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agents/__init__.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agents/agent.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agents/amazon_bedrock_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 74
    [Credential-related source omitted]

python/src/agent_squad/agents/anthropic_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 44
    [Credential-related source omitted]
  • Access to secretsline 57
    [Credential-related source omitted]
  • Access to secretsline 59
    [Credential-related source omitted]

python/src/agent_squad/agents/bedrock_flows_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 33
    [Credential-related source omitted]

python/src/agent_squad/agents/bedrock_inline_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 71
    [Credential-related source omitted]
  • Access to secretsline 85
    [Credential-related source omitted]

python/src/agent_squad/agents/bedrock_llm_agent.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agents/bedrock_translator_agent.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agents/chain_agent.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agents/comprehend_filter_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 36
    [Credential-related source omitted]

python/src/agent_squad/agents/grounded_agent.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agents/lambda_agent.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agents/lex_bot_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 23
    [Credential-related source omitted]

python/src/agent_squad/agents/openai_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 22
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]
  • Access to secretsline 41
    [Credential-related source omitted]

python/src/agent_squad/agents/strands_agent.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/agents/supervisor_agent.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/classifier_test_tool.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/classifiers/__init__.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/classifiers/anthropic_classifier.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 13
    [Credential-related source omitted]
  • Access to secretsline 18
    [Credential-related source omitted]
  • Access to secretsline 27
    [Credential-related source omitted]
  • Access to secretsline 30
    [Credential-related source omitted]

python/src/agent_squad/classifiers/bedrock_classifier.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 30
    [Credential-related source omitted]
  • Network accessline 89
    # ToolChoice is only supported by Anthropic Claude 3 models and by Mistral AI Mistral Large.         # https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolChoice.html
  • Network accessline 90
    # https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolChoice.html

python/src/agent_squad/classifiers/classifier.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/classifiers/jev_classifier.py

  • Executable scriptline 1
    Executable file
  • Network accessline 12
    # Official TypeSafe System One endpoint: https://docs.typesafe.ai/api
  • Network accessline 13
    JEV_API_URL = "https://api.typesafe.ai/v1/systemone"
  • Access to secretsline 16
    [Credential-related source omitted]
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]
  • Access to secretsline 68
    [Credential-related source omitted]
  • Access to secretsline 69
    [Credential-related source omitted]
  • Access to secretsline 97
    [Credential-related source omitted]
  • Access to secretsline 98
    [Credential-related source omitted]
  • Access to secretsline 100
    [Credential-related source omitted]
  • Access to secretsline 104
    [Credential-related source omitted]
  • Network accessline 195
    def _post(self, request: urllib.request.Request) -> Any:
  • Network accessline 197
    try:             with urllib.request.urlopen(request, timeout=self.timeout) as response:
  • Network accessline 198
    with urllib.request.urlopen(request, timeout=self.timeout) as response:
  • Network accessline 209
    async def _send(self, request_body: dict[str, Any]) -> Any:         request = urllib.request.Request(
  • Network accessline 210
    request = urllib.request.Request(
  • Access to secretsline 215
    [Credential-related source omitted]

python/src/agent_squad/classifiers/openai_classifier.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 13
    [Credential-related source omitted]
  • Access to secretsline 16
    [Credential-related source omitted]
  • Access to secretsline 24
    [Credential-related source omitted]
  • Access to secretsline 27
    [Credential-related source omitted]

python/src/agent_squad/orchestrator.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/retrievers/__init__.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/retrievers/amazon_kb_retriever.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/retrievers/dakera_retriever.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 14
    [Credential-related source omitted]
  • Network accessline 15
    [Credential-related source omitted]
  • Access to secretsline 15
    [Credential-related source omitted]
  • Network accessline 16
    url: Base URL of the Dakera server. Falls back to the ``DAKERA_URL`             environment variable and finally to ``http://localhost:3000``.
  • Network accessline 17
    environment variable and finally to ``http://localhost:3000``.
  • Access to secretsline 23
    [Credential-related source omitted]
  • Network accessline 30
    """Retriever backed by a self-hosted `Dakera <https://dakera.ai>`_ memory server.
  • Access to secretsline 44
    [Credential-related source omitted]
  • Network accessline 45
    [Credential-related source omitted]
  • Access to secretsline 45
    [Credential-related source omitted]
  • Access to secretsline 46
    [Credential-related source omitted]
  • Network accessline 47
    url = self.options.url or os.getenv("DAKERA_URL") or "http://localhost:3000"
  • Access to secretsline 57
    [Credential-related source omitted]

python/src/agent_squad/retrievers/retriever.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/shared/__init__.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/shared/user_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 17
    [Credential-related source omitted]
  • Network accessline 25
    """     This function is used to add an extra header for the User-Agent in the Botocore session,     as described in the pull request: https://github.com/boto/botocore/pull/2682
  • Network accessline 27
    as described in the pull request: https://github.com/boto/botocore/pull/2682
  • Network accessline 206
    # Customize botocore session to inject Boto3 header         # See: https://github.com/boto/botocore/pull/2682
  • Network accessline 207
    # See: https://github.com/boto/botocore/pull/2682

python/src/agent_squad/shared/version.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/storage/__init__.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/storage/chat_storage.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/storage/dynamodb_chat_storage.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/storage/in_memory_chat_storage.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/storage/sql_chat_storage.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 15
    [Credential-related source omitted]
  • Access to secretsline 21
    [Credential-related source omitted]
  • Access to secretsline 26
    [Credential-related source omitted]

python/src/agent_squad/storage/summarizing_chat_storage.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/tools/__init__.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/tools/mcp_tool_provider.py

  • Executable scriptline 1
    Executable file
  • Network accessline 11
    provider = await MCPToolProvider.create([         MCPServerConfig(type="stdio", command="uvx", args=["my-mcp-server"]),         MCPServerConfig(type="streamable-http", url="http://localhost:3000/mcp"),
  • Network accessline 12
    MCPServerConfig(type="stdio", command="uvx", args=["my-mcp-server"]),         MCPServerConfig(type="streamable-http", url="http://localhost:3000/mcp"),         MCPServerConfig(type="sse", url="http://localhost:3000/sse"),
  • Network accessline 13
    MCPServerConfig(type="streamable-http", url="http://localhost:3000/mcp"),
  • Network accessline 14
    MCPServerConfig(type="sse", url="http://localhost:3000/sse"),
  • Network accessline 176
    provider = await MCPToolProvider.create([             MCPServerConfig(type="stdio", command="uvx", args=["my-server"]),             MCPServerConfig(type="streamable-http", url="http://localhost:3000/mcp"),
  • Network accessline 177
    MCPServerConfig(type="stdio", command="uvx", args=["my-server"]),             MCPServerConfig(type="streamable-http", url="http://localhost:3000/mcp"),         ])
  • Network accessline 178
    MCPServerConfig(type="streamable-http", url="http://localhost:3000/mcp"),
  • Network accessline 482
    """Fetch (and cache) a UI template resource by URI. Returns ``(mime_type, body)`` or ``None``.
  • Possible obfuscationline 506
    body = base64.b64decode(blob).decode("utf-8")

python/src/agent_squad/types/__init__.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/types/types.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/utils/__init__.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/utils/helpers.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/utils/logger.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/utils/tool.py

  • Executable scriptline 1
    Executable file

python/src/agent_squad/utils/ui.py

  • Executable scriptline 1
    Executable file

python/src/tests/__init__.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/__init__.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_amazon_bedrock_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_anthropic_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 35
    [Credential-related source omitted]
  • Access to secretsline 133
    [Credential-related source omitted]
  • Access to secretsline 147
    [Credential-related source omitted]
  • Access to secretsline 171
    [Credential-related source omitted]
  • Access to secretsline 201
    [Credential-related source omitted]
  • Access to secretsline 215
    [Credential-related source omitted]
  • Access to secretsline 229
    [Credential-related source omitted]
  • Access to secretsline 250
    [Credential-related source omitted]
  • Access to secretsline 265
    [Credential-related source omitted]
  • Access to secretsline 297
    [Credential-related source omitted]
  • Access to secretsline 317
    [Credential-related source omitted]
  • Access to secretsline 332
    [Credential-related source omitted]
  • Access to secretsline 344
    [Credential-related source omitted]
  • Access to secretsline 384
    [Credential-related source omitted]
  • Access to secretsline 400
    [Credential-related source omitted]
  • Access to secretsline 420
    [Credential-related source omitted]
  • Access to secretsline 437
    [Credential-related source omitted]
  • Access to secretsline 458
    [Credential-related source omitted]
  • Access to secretsline 514
    [Credential-related source omitted]
  • Access to secretsline 553
    [Credential-related source omitted]
  • Access to secretsline 601
    [Credential-related source omitted]
  • Access to secretsline 673
    [Credential-related source omitted]
  • Access to secretsline 693
    [Credential-related source omitted]
  • Access to secretsline 778
    [Credential-related source omitted]
  • Access to secretsline 844
    [Credential-related source omitted]
  • Access to secretsline 855
    [Credential-related source omitted]

python/src/tests/agents/test_bedrock_flows_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 53
    [Credential-related source omitted]

python/src/tests/agents/test_bedrock_inline_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_bedrock_llm_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_chain_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_comprehend_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_grounded_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_lambda_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_lex_bot_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/agents/test_openai_agent.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 23
    [Credential-related source omitted]
  • Access to secretsline 43
    [Credential-related source omitted]

python/src/tests/agents/test_openai_usage_stream.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 58
    [Credential-related source omitted]

python/src/tests/agents/test_strands_agent.py

  • Executable scriptline 1
    Executable file
  • Network accessline 194
    ConversationMessage(                 role=ParticipantRole.USER.value,                 content=[{"text": "Hello"}, {"image_url": "http://example.com/image.jpg"}]
  • Network accessline 195
    role=ParticipantRole.USER.value,                 content=[{"text": "Hello"}, {"image_url": "http://example.com/image.jpg"}]             )
  • Network accessline 196
    content=[{"text": "Hello"}, {"image_url": "http://example.com/image.jpg"}]
  • Network accessline 205
    assert len(result[0]["content"]) == 2         assert result[0]["content"][0] == {"text": "Hello"}         assert result[0]["content"][1] == {"image_url": "http://example.com/image.jpg"}
  • Network accessline 207
    assert result[0]["content"][1] == {"image_url": "http://example.com/image.jpg"}
  • Network accessline 236
    content=[                     {"text": "Hello"},                     {"image_url": "http://example.com/image.jpg"},
  • Network accessline 237
    {"text": "Hello"},                     {"image_url": "http://example.com/image.jpg"},                     {"tool_call": {"name": "weather", "parameters": {"location": "Seattle"}}}
  • Network accessline 238
    {"image_url": "http://example.com/image.jpg"},
  • Network accessline 249
    assert len(result[0]["content"]) == 3         assert result[0]["content"][0] == {"text": "Hello"}         assert result[0]["content"][1] == {"image_url": "http://example.com/image.jpg"}
  • Network accessline 250
    assert result[0]["content"][0] == {"text": "Hello"}         assert result[0]["content"][1] == {"image_url": "http://example.com/image.jpg"}         assert result[0]["content"][2] == {"tool_call": {"name": "weather", "parameters": {"location
  • Network accessline 251
    assert result[0]["content"][1] == {"image_url": "http://example.com/image.jpg"}
  • Network accessline 304
    "content": [                 {"text": "Here's an image: "},                 {"image_url": "http://example.com/image.jpg"},
  • Network accessline 305
    {"text": "Here's an image: "},                 {"image_url": "http://example.com/image.jpg"},                 {"text": " And some more text."}
  • Network accessline 306
    {"image_url": "http://example.com/image.jpg"},

python/src/tests/agents/test_supervisor_agent.py

  • Executable scriptline 1
    Executable file

python/src/tests/classifier_test_tool/test_classifier_test_tool.py

  • Executable scriptline 1
    Executable file

python/src/tests/classifiers/__init__.py

  • Executable scriptline 1
    Executable file

python/src/tests/classifiers/test_anthropic_classifier.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 30
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 48
    [Credential-related source omitted]
  • Access to secretsline 54
    [Credential-related source omitted]
  • Access to secretsline 64
    [Credential-related source omitted]
  • Access to secretsline 71
    [Credential-related source omitted]
  • Access to secretsline 81
    [Credential-related source omitted]
  • Access to secretsline 83
    [Credential-related source omitted]
  • Access to secretsline 85
    [Credential-related source omitted]
  • Access to secretsline 90
    [Credential-related source omitted]
  • Access to secretsline 92
    [Credential-related source omitted]
  • Access to secretsline 101
    [Credential-related source omitted]
  • Access to secretsline 118
    [Credential-related source omitted]
  • Access to secretsline 134
    [Credential-related source omitted]
  • Access to secretsline 286
    [Credential-related source omitted]
  • Access to secretsline 398
    [Credential-related source omitted]

python/src/tests/classifiers/test_bedrock_classifier.py

  • Executable scriptline 1
    Executable file

python/src/tests/classifiers/test_classifier.py

  • Executable scriptline 1
    Executable file

python/src/tests/classifiers/test_jev_classifier.py

  • Executable scriptline 1
    Executable file
  • Network accessline 48
    """Context-manager mock mimicking urllib.request.urlopen's response."""
  • Access to secretsline 83
    [Credential-related source omitted]
  • Network accessline 91
    [Credential-related source omitted]
  • Network accessline 92
    [Credential-related source omitted]
  • Access to secretsline 92
    [Credential-related source omitted]
  • Network accessline 93
    base_url='https://gateway.example.com/v1/systemone',
  • Network accessline 98
    [Credential-related source omitted]
  • Network accessline 99
    [Credential-related source omitted]
  • Access to secretsline 99
    [Credential-related source omitted]
  • Network accessline 100
    assert options.base_url == 'https://gateway.example.com/v1/systemone'
  • Access to secretsline 109
    [Credential-related source omitted]
  • Network accessline 118
    def test_defaults_to_official_endpoint(self):         assert JEV_API_URL == 'https://api.typesafe.ai/v1/systemone'
  • Network accessline 119
    assert JEV_API_URL == 'https://api.typesafe.ai/v1/systemone'
  • Access to secretsline 123
    [Credential-related source omitted]
  • Access to secretsline 127
    [Credential-related source omitted]
  • Access to secretsline 129
    [Credential-related source omitted]
  • Access to secretsline 132
    [Credential-related source omitted]
  • Access to secretsline 133
    [Credential-related source omitted]
  • Access to secretsline 134
    [Credential-related source omitted]
  • Access to secretsline 137
    [Credential-related source omitted]
  • Network accessline 145
    with patch('urllib.request.urlopen', return_value=ok_response(CHOICE_PAYLOAD)) \
  • Network accessline 174
    with patch('urllib.request.urlopen', return_value=ok_response(CHOICE_PAYLOAD)) \
  • Network accessline 194
    async def _sent_state(self, classifier):         classifier.set_agents(mock_agents())         with patch('urllib.request.urlopen', return_value=ok_response(CHOICE_PAYLOAD)) \
  • Network accessline 195
    classifier.set_agents(mock_agents())         with patch('urllib.request.urlopen', return_value=ok_response(CHOICE_PAYLOAD)) \                 as mock_urlopen:
  • Network accessline 196
    with patch('urllib.request.urlopen', return_value=ok_response(CHOICE_PAYLOAD)) \
  • Access to secretsline 211
    [Credential-related source omitted]
  • Access to secretsline 218
    [Credential-related source omitted]
  • Access to secretsline 224
    [Credential-related source omitted]
  • Network accessline 232
    with patch('urllib.request.urlopen', return_value=ok_response(CHOICE_PAYLOAD)) \
  • Network accessline 243
    with patch('urllib.request.urlopen') as mock_urlopen:
  • Network accessline 252
    with patch('urllib.request.urlopen', return_value=ok_response(CHOICE_PAYLOAD)):
  • Network accessline 265
    with patch('urllib.request.urlopen', return_value=ok_response(CHOICE_PAYLOAD)):
  • Network accessline 280
    with patch('urllib.request.urlopen', return_value=ok_response(payload)):
  • Network accessline 286
    @pytest.mark.asyncio     async def test_no_agents_registered_raises_before_network_call(self):         with patch('urllib.request.urlopen') as mock_urlopen:
  • Network accessline 287
    async def test_no_agents_registered_raises_before_network_call(self):         with patch('urllib.request.urlopen') as mock_urlopen:             with pytest.raises(ValueError, match="No agents registered"):
  • Network accessline 288
    with patch('urllib.request.urlopen') as mock_urlopen:
  • Network accessline 298
    with patch('urllib.request.urlopen', return_value=ok_response(payload)):
  • Network accessline 308
    with patch('urllib.request.urlopen',
  • Network accessline 318
    with patch('urllib.request.urlopen', side_effect=[
  • Network accessline 332
    with patch('urllib.request.urlopen', side_effect=[
  • Network accessline 345
    with patch('urllib.request.urlopen',
  • Network accessline 358
    with patch('urllib.request.urlopen', side_effect=[
  • Network accessline 371
    with patch('urllib.request.urlopen',
  • Network accessline 382
    with patch('urllib.request.urlopen',
  • Network accessline 391
    with patch('urllib.request.urlopen', side_effect=TimeoutError('timed out')):
  • Network accessline 399
    with patch('urllib.request.urlopen',
  • Network accessline 406
    [Credential-related source omitted]
  • Network accessline 407
    [Credential-related source omitted]
  • Access to secretsline 407
    [Credential-related source omitted]
  • Network accessline 408
    base_url='https://gateway.example.com/v1/systemone',
  • Network accessline 413
    with patch('urllib.request.urlopen', return_value=ok_response(CHOICE_PAYLOAD)) \
  • Network accessline 417
    request = mock_urlopen.call_args[0][0]         assert request.full_url == 'https://gateway.example.com/v1/systemone'
  • Network accessline 418
    assert request.full_url == 'https://gateway.example.com/v1/systemone'

python/src/tests/retrievers/test_dakera_retriever.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 22
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 31
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 33
    [Credential-related source omitted]
  • Network accessline 38
    module, _ = dakera_client     monkeypatch.setenv("DAKERA_API_KEY", "dk-env")     monkeypatch.setenv("DAKERA_URL", "http://env-host:9999")
  • Network accessline 39
    [Credential-related source omitted]
  • Access to secretsline 39
    [Credential-related source omitted]
  • Network accessline 40
    monkeypatch.setenv("DAKERA_URL", "http://env-host:9999")
  • Network accessline 41
    [Credential-related source omitted]
  • Network accessline 42
    [Credential-related source omitted]
  • Network accessline 43
    [Credential-related source omitted]
  • Access to secretsline 43
    [Credential-related source omitted]
  • Network accessline 50
    [Credential-related source omitted]
  • Network accessline 51
    [Credential-related source omitted]
  • Network accessline 52
    [Credential-related source omitted]
  • Access to secretsline 52
    [Credential-related source omitted]

python/src/tests/retrievers/test_retriever.py

  • Executable scriptline 1
    Executable file

python/src/tests/storage/__init__.py

  • Executable scriptline 1
    Executable file

python/src/tests/storage/test_chat_storage.py

  • Executable scriptline 1
    Executable file

python/src/tests/storage/test_dynamodb_chat_storage.py

  • Executable scriptline 1
    Executable file

python/src/tests/storage/test_in_memory_chat_storage.py

  • Executable scriptline 1
    Executable file

python/src/tests/storage/test_sql_chat_storage.py

  • Executable scriptline 1
    Executable file

python/src/tests/storage/test_summarizing_chat_storage.py

  • Executable scriptline 1
    Executable file

python/src/tests/test_agent_overlap_analyzer.py

  • Executable scriptline 1
    Executable file

python/src/tests/test_orchestrator.py

  • Executable scriptline 1
    Executable file

python/src/tests/tools/__init__.py

  • Executable scriptline 1
    Executable file

python/src/tests/tools/test_mcp_tool_provider.py

  • Executable scriptline 1
    Executable file
  • Network accessline 92
    cfg = MCPServerConfig(type="stdio", command="uvx", args=["my-server"])     else:         cfg = MCPServerConfig(type="sse", url="http://localhost:3000/sse")
  • Network accessline 94
    cfg = MCPServerConfig(type="sse", url="http://localhost:3000/sse")
  • Network accessline 399
    provider = MCPToolProvider(         [MCPServerConfig(type="sse", url="http://localhost:9000/sse")]
  • Network accessline 400
    [MCPServerConfig(type="sse", url="http://localhost:9000/sse")]
  • Network accessline 406
    assert "search" in provider._tool_map     mock_mcp_modules["sse_client"].assert_called_once_with(         "http://localhost:9000/sse", headers={}
  • Network accessline 407
    mock_mcp_modules["sse_client"].assert_called_once_with(         "http://localhost:9000/sse", headers={}     )
  • Network accessline 408
    "http://localhost:9000/sse", headers={}
  • Network accessline 438
    [MCPServerConfig(             type="streamable-http",             url="http://localhost:9000/mcp",
  • Network accessline 439
    [Credential-related source omitted]
  • Network accessline 440
    url="http://localhost:9000/mcp",
  • Network accessline 448
    [Credential-related source omitted]
  • Network accessline 449
    [Credential-related source omitted]
  • Network accessline 450
    [Credential-related source omitted]
  • Network accessline 469
    provider = MCPToolProvider(         [MCPServerConfig(type="streamable-http", url="http://localhost:9000/mcp")]
  • Network accessline 470
    [MCPServerConfig(type="streamable-http", url="http://localhost:9000/mcp")]
  • Network accessline 837
    tool = _make_mcp_tool_v2("search", "Search")     provider = MCPToolProvider([         MCPServerConfig(type="streamable-http", url="http://h/mcp", headers={"x-k": "v"})
  • Network accessline 838
    provider = MCPToolProvider([         MCPServerConfig(type="streamable-http", url="http://h/mcp", headers={"x-k": "v"})     ])
  • Network accessline 839
    MCPServerConfig(type="streamable-http", url="http://h/mcp", headers={"x-k": "v"})
  • Network accessline 846
    http_client = mock_mcp_v2_modules["create_mcp_http_client"].return_value     mock_mcp_v2_modules["streamable_http_client"].assert_called_once_with(         "http://h/mcp", http_client=http_client
  • Network accessline 847
    mock_mcp_v2_modules["streamable_http_client"].assert_called_once_with(         "http://h/mcp", http_client=http_client     )
  • Network accessline 848
    "http://h/mcp", http_client=http_client
  • Network accessline 946
    provider = MCPToolProvider([         MCPServerConfig(type="streamable-http", url="http://h/mcp", headers={"x-k": "v"})
  • Network accessline 947
    MCPServerConfig(type="streamable-http", url="http://h/mcp", headers={"x-k": "v"})

python/src/tests/utils/test_helpers.py

  • Executable scriptline 1
    Executable file

python/src/tests/utils/test_logger.py

  • Executable scriptline 1
    Executable file

python/src/tests/utils/test_tool.py

  • Executable scriptline 1
    Executable file

swift/README.md

  • Network accessline 5
    <p align="center">   <img alt="Swift" src="https://img.shields.io/badge/Swift-6.2%2B-orange.svg?style=flat-square">
  • Network accessline 6
    <img alt="Swift" src="https://img.shields.io/badge/Swift-6.2%2B-orange.svg?style=flat-square">
  • Network accessline 7
    <img alt="Platforms" src="https://img.shields.io/badge/platforms-iOS%2016%20%C2%B7%20macOS%2014-blue.svg?style=flat-square">
  • Network accessline 8
    <img alt="Status" src="https://img.shields.io/badge/status-WIP-yellow.svg?style=flat-square">
  • Network accessline 140
    platforms: [.macOS(.v14)],     dependencies: [         .package(url: "https://github.com/2FastLabs/agent-squad", branch: "main")
  • Network accessline 141
    dependencies: [         .package(url: "https://github.com/2FastLabs/agent-squad", branch: "main")     ],
  • Network accessline 142
    .package(url: "https://github.com/2FastLabs/agent-squad", branch: "main")
  • Access to secretsline 158
    [Credential-related source omitted]
  • Access to secretsline 179
    [Credential-related source omitted]
  • Network accessline 214
    |---|---|---|---| | **`AgentSquad`** (core) | `import AgentSquad` | **nothing external** | protocols, agents, orchestrator, native tools (`ToolKit`, `Tool.local`/`.http`, `HTTPToolGroup`, `AggregateToolProvider`), `DakeraRetriever` (Dakera 
  • Network accessline 215
    | **`AgentSquad`** (core) | `import AgentSquad` | **nothing external** | protocols, agents, orchestrator, native tools (`ToolKit`, `Tool.local`/`.http`, `HTTPToolGroup`, `AggregateToolProvider`), `DakeraRetriever` (Dakera memory retriever),
  • Network accessline 216
    | **`AgentSquadMCP`** | `import AgentSquadMCP` | the official [MCP Swift SDK](https://github.com/modelcontextprotocol/swift-sdk) | `MCPServer` (alias of `MCPToolProvider`) — connect any MCP server with `MCPServer(url:)`, with MCP Apps UI su

swift/SKILL.md

  • Network accessline 38
    SwiftPM: `.package(url: "https://github.com/2FastLabs/agent-squad", branch: "main")`.
  • Network accessline 71
    config once, then one line per endpoint; **`MCPServer(url:)`** connects an MCP server; and   **`AggregateToolProvider`** composes any mix behind one seam; **`DakeraRetriever(namespace:…)`** is a   `ToolProvider` backed by a self-hosted [Dak
  • Network accessline 72
    **`AggregateToolProvider`** composes any mix behind one seam; **`DakeraRetriever(namespace:…)`** is a   `ToolProvider` backed by a self-hosted [Dakera](https://dakera.ai) memory server — it exposes a   `search_memory` tool for grounding (an
  • Network accessline 73
    `ToolProvider` backed by a self-hosted [Dakera](https://dakera.ai) memory server — it exposes a

swift/Sources/AgentSquad/Core/LLM/ChatCompletionsClient.swift

  • Network accessline 17
    public init(         baseURL: URL = URL(string: "https://api.openai.com/v1")!,
  • Network accessline 18
    baseURL: URL = URL(string: "https://api.openai.com/v1")!,

swift/Sources/AgentSquad/Core/Storage/ChatStorage.swift

  • Network accessline 8
    /// A persistent store must pin a stable `JSONEncoder.dateEncodingStrategy` (see `ConversationMessage.timestamp`). public protocol ChatStorage: Sendable {     func fetch(
  • Network accessline 9
    public protocol ChatStorage: Sendable {     func fetch(         userId: String,
  • Network accessline 10
    func fetch(

swift/Sources/AgentSquad/Core/Tooling/HTTPToolGroup.swift

  • Network accessline 137
    /// Join `baseURL` and `path`, normalizing trailing/leading slashes so the result always has     /// exactly one separator (e.g. avoids `"https://api.test//users"` or `"https://api.testusers"`).
  • Network accessline 138
    /// exactly one separator (e.g. avoids `"https://api.test//users"` or `"https://api.testusers"`).

swift/Sources/AgentSquad/Orchestrator.swift

  • Network accessline 68
    do {             let agent = try await selectAgent(input, userId: userId, sessionId: sessionId)             let history = try await store.fetch(userId: userId, sessionId: sessionId, agentId: agent.id, maxMessages: maxMessages)
  • Network accessline 69
    let agent = try await selectAgent(input, userId: userId, sessionId: sessionId)             let history = try await store.fetch(userId: userId, sessionId: sessionId, agentId: agent.id, maxMessages: maxMessages)             // Stamped before 
  • Network accessline 70
    let history = try await store.fetch(userId: userId, sessionId: sessionId, agentId: agent.id, maxMessages: maxMessages)

swift/Sources/AgentSquad/Retrieval/DakeraRetriever.swift

  • Network accessline 32
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Network accessline 33
    [Credential-related source omitted]
  • Network accessline 34
    /// Base URL of the Dakera server. Falls back to `DAKERA_URL`, then `http://localhost:3000`
  • Network accessline 61
    [Credential-related source omitted]
  • Network accessline 62
    [Credential-related source omitted]
  • Access to secretsline 62
    [Credential-related source omitted]
  • Network accessline 63
    self.url = url ?? ProcessInfo.processInfo.environment["DAKERA_URL"] ?? "http://localhost:3000"
  • Access to secretsline 77
    [Credential-related source omitted]
  • Network accessline 87
    /// Retriever backed by a self-hosted [Dakera](https://dakera.ai) memory server. /// /// It uses Dakera's text-query endpoint (server-side embedding) to fetch the documents most

swift/Sources/AgentSquad/Runtimes/Realtime/OpenAIRealtimeSession.swift

  • Network accessline 168
    func seedHistory() async {         guard let store else { return }         let history = (try? await store.fetch(userId: userId, sessionId: sessionId,
  • Network accessline 169
    guard let store else { return }         let history = (try? await store.fetch(userId: userId, sessionId: sessionId,                                               agentId: slugify(name), maxMessages: maxMessages)) ?? []
  • Network accessline 170
    let history = (try? await store.fetch(userId: userId, sessionId: sessionId,

swift/Sources/AgentSquad/Storage/DeviceChatStorage.swift

  • Network accessline 68
    public func fetch(
  • Network accessline 116
    sortBy: [SortDescriptor(\.timestamp), SortDescriptor(\.seq)]         )         return try modelContext.fetch(descriptor).map { row in
  • Network accessline 117
    )         return try modelContext.fetch(descriptor).map { row in             try decode(row.payload).attributed(agentId: row.agentId)
  • Network accessline 118
    return try modelContext.fetch(descriptor).map { row in
  • Network accessline 138
    sortBy: [SortDescriptor(\.seq)]         )         return try modelContext.fetch(descriptor)
  • Network accessline 139
    )         return try modelContext.fetch(descriptor)     }
  • Network accessline 140
    return try modelContext.fetch(descriptor)
  • Network accessline 149
    )         descriptor.fetchLimit = 1         return try modelContext.fetch(descriptor).first?.role
  • Network accessline 150
    descriptor.fetchLimit = 1         return try modelContext.fetch(descriptor).first?.role     }
  • Network accessline 151
    return try modelContext.fetch(descriptor).first?.role
  • Network accessline 156
    var descriptor = FetchDescriptor<StoredMessage>(sortBy: [SortDescriptor(\.seq, order: .reverse)])         descriptor.fetchLimit = 1         return (try modelContext.fetch(descriptor).first?.seq ?? 0) + 1
  • Network accessline 157
    descriptor.fetchLimit = 1         return (try modelContext.fetch(descriptor).first?.seq ?? 0) + 1     }
  • Network accessline 158
    return (try modelContext.fetch(descriptor).first?.seq ?? 0) + 1

swift/Sources/AgentSquad/Storage/FileChatStorage.swift

  • Network accessline 40
    public func fetch(

swift/Sources/AgentSquad/Storage/InMemoryChatStorage.swift

  • Network accessline 27
    public func fetch(

swift/Sources/AgentSquad/Storage/SummarizingChatStorage.swift

  • Network accessline 94
    public func fetch(
  • Network accessline 107
    // Cold start: load raw history from the base store.         let history = try await base.fetch(
  • Network accessline 108
    let history = try await base.fetch(

swift/Sources/AgentSquad/Storage/TransformingChatStorage.swift

  • Network accessline 30
    public func fetch(
  • Network accessline 31
    userId: String, sessionId: String, agentId: String, maxMessages: Int?     ) async throws -> [ConversationMessage] {         try await base.fetch(userId: userId, sessionId: sessionId, agentId: agentId, maxMessages: maxMessages)
  • Network accessline 32
    ) async throws -> [ConversationMessage] {         try await base.fetch(userId: userId, sessionId: sessionId, agentId: agentId, maxMessages: maxMessages)     }
  • Network accessline 33
    try await base.fetch(userId: userId, sessionId: sessionId, agentId: agentId, maxMessages: maxMessages)

swift/Sources/AgentSquadMCP/MCPToolProvider+SDK.swift

  • Network accessline 9
    extension MCPToolProvider {     /// Connect to an MCP server at the given URL string: `MCPServer(url: "https://…")`. An invalid
  • Network accessline 10
    /// Connect to an MCP server at the given URL string: `MCPServer(url: "https://…")`. An invalid

swift/Tests/AgentSquadMCPTests/MCPToolProviderTests.swift

  • Network accessline 48
    // connecting — the one-liner the consumer wants instead of nesting `SDKMCPClient`. The string         // form parses the URL internally.         let viaString: any ToolProvider = MCPServer(url: "https://example.test/mcp",
  • Network accessline 49
    // form parses the URL internally.         let viaString: any ToolProvider = MCPServer(url: "https://example.test/mcp",                                                     hostArguments: ["session_id": .string("S1")])
  • Network accessline 50
    let viaString: any ToolProvider = MCPServer(url: "https://example.test/mcp",
  • Network accessline 61
    // Compile-time + construction smoke: both URL overloads accept headers and forward them.         let viaString: any ToolProvider = MCPServer(             url: "https://example.test/mcp",
  • Network accessline 62
    [Credential-related source omitted]
  • Network accessline 63
    url: "https://example.test/mcp",
  • Network accessline 68
    let viaURL: any ToolProvider = MCPServer(             url: URL(string: "https://example.test/mcp")!,
  • Network accessline 69
    url: URL(string: "https://example.test/mcp")!,
  • Network accessline 110
    let client = SDKMCPClient(             endpoint: URL(string: "https://example.test/mcp")!,
  • Network accessline 111
    endpoint: URL(string: "https://example.test/mcp")!,
  • Network accessline 349
    callResults: ["link": MCPCallResult(), "blobbed": MCPCallResult()],             resources: [                 "ui://link": MCPResourceContents(mimeType: "text/uri-list", text: "https://example.com/widget"),
  • Network accessline 350
    resources: [                 "ui://link": MCPResourceContents(mimeType: "text/uri-list", text: "https://example.com/widget"),                 "ui://blob": MCPResourceContents(mimeType: "text/html;profile=mcp-app", blob: Data("<b/>".utf8)),
  • Network accessline 351
    "ui://link": MCPResourceContents(mimeType: "text/uri-list", text: "https://example.com/widget"),
  • Network accessline 355
    let provider = MCPToolProvider(client: mock)         _ = try await provider.listTools()         #expect(try await provider.call("link", arguments: .object([:])).ui?.template == .url(URL(string: "https://example.com/widget")!))
  • Network accessline 356
    _ = try await provider.listTools()         #expect(try await provider.call("link", arguments: .object([:])).ui?.template == .url(URL(string: "https://example.com/widget")!))         #expect(try await provider.call("blobbed", arguments: .obj
  • Network accessline 357
    #expect(try await provider.call("link", arguments: .object([:])).ui?.template == .url(URL(string: "https://example.com/widget")!))

swift/Tests/AgentSquadTests/ChatCompletionsClientTests.swift

  • Network accessline 244
    @Test func joinsBaseURLPathWithOrWithoutTrailingSlash() async throws {         for base in ["https://host/v1", "https://host/v1/"] {
  • Network accessline 245
    for base in ["https://host/v1", "https://host/v1/"] {
  • Network accessline 247
    let client = ChatCompletionsClient(baseURL: URL(string: base)!, model: "gpt", transport: transport)             _ = try await collect(client)             #expect(transport.requests.first?.url?.absoluteString == "https://host/v1/chat/complet
  • Network accessline 248
    _ = try await collect(client)             #expect(transport.requests.first?.url?.absoluteString == "https://host/v1/chat/completions")         }
  • Network accessline 249
    #expect(transport.requests.first?.url?.absoluteString == "https://host/v1/chat/completions")

swift/Tests/AgentSquadTests/ChatStorageTests.swift

  • Network accessline 7
    // Minimal conformer so the protocol-extension defaults can be exercised without a backend.     private struct StubStore: ChatStorage {         func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -
  • Network accessline 8
    private struct StubStore: ChatStorage {         func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -> [ConversationMessage] { [] }         func save(_ message: ConversationMessage, userId: String,
  • Network accessline 9
    func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -> [ConversationMessage] { [] }

swift/Tests/AgentSquadTests/DakeraRetrieverTests.swift

  • Network accessline 38
    [Credential-related source omitted]
  • Network accessline 39
    [Credential-related source omitted]
  • Network accessline 40
    [Credential-related source omitted]
  • Network accessline 52
    let request = invoker.request         #expect(request?.httpMethod == "POST")         #expect(request?.url?.absoluteString == "http://localhost:3000/v1/namespaces/agent-mem/query-text")
  • Network accessline 53
    #expect(request?.httpMethod == "POST")         #expect(request?.url?.absoluteString == "http://localhost:3000/v1/namespaces/agent-mem/query-text")         #expect(request?.value(forHTTPHeaderField: "X-API-Key") == "dk-test")
  • Network accessline 54
    #expect(request?.url?.absoluteString == "http://localhost:3000/v1/namespaces/agent-mem/query-text")
  • Network accessline 73
    [Credential-related source omitted]
  • Network accessline 74
    [Credential-related source omitted]
  • Network accessline 75
    [Credential-related source omitted]
  • Network accessline 76
    )         _ = try await retriever.retrieve("q")         #expect(invoker.request?.url?.absoluteString == "http://host:3000/v1/namespaces/ns/query-text")
  • Network accessline 77
    _ = try await retriever.retrieve("q")         #expect(invoker.request?.url?.absoluteString == "http://host:3000/v1/namespaces/ns/query-text")     }
  • Network accessline 78
    #expect(invoker.request?.url?.absoluteString == "http://host:3000/v1/namespaces/ns/query-text")
  • Network accessline 115
    [Credential-related source omitted]
  • Network accessline 116
    [Credential-related source omitted]
  • Network accessline 117
    [Credential-related source omitted]
  • Network accessline 123
    [Credential-related source omitted]
  • Network accessline 124
    [Credential-related source omitted]
  • Network accessline 125
    [Credential-related source omitted]

swift/Tests/AgentSquadTests/DeviceChatStorageTests.swift

  • Network accessline 12
    let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)
  • Network accessline 26
    }         let second = try DeviceChatStorage(userId: "u", baseURL: dir)         let fetched = try await second.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 27
    let second = try DeviceChatStorage(userId: "u", baseURL: dir)         let fetched = try await second.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)         #expect(fetched.map(\.parts) == [[.text("persist me")]])
  • Network accessline 28
    let fetched = try await second.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 34
    try await store.save(.init(role: .user, text: "one"), userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)         try await store.save(.init(role: .user, text: "two"), userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)  /
  • Network accessline 35
    try await store.save(.init(role: .user, text: "two"), userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)  // dropped         let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)         
  • Network accessline 36
    let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 45
    try await store.save(.init(role: role, text: "\(index)"), userId: "u", sessionId: "s", agentId: "a", maxMessages: 3)         }         let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 46
    }         let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)         #expect(fetched.map(\.parts) == [[.text("3")], [.text("4")]])   // last even-count, most recent
  • Network accessline 47
    let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 56
    let sports = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)
  • Network accessline 60
    @Test func fetchMissingReturnsEmpty() async throws {         let store = try DeviceChatStorage(userId: "u", inMemory: true)         let fetched = try await store.fetch(userId: "u", sessionId: "none", agentId: "x", maxMessages: 100)
  • Network accessline 61
    let store = try DeviceChatStorage(userId: "u", inMemory: true)         let fetched = try await store.fetch(userId: "u", sessionId: "none", agentId: "x", maxMessages: 100)         #expect(fetched.isEmpty)
  • Network accessline 62
    let fetched = try await store.fetch(userId: "u", sessionId: "none", agentId: "x", maxMessages: 100)
  • Network accessline 97
    try await store.save(.init(role: .user, text: "hi"), userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)         try await store.clear()         let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMess
  • Network accessline 98
    try await store.clear()         let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)         #expect(fetched.isEmpty)
  • Network accessline 99
    let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)

swift/Tests/AgentSquadTests/FileChatStorageTests.swift

  • Network accessline 17
    let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)
  • Network accessline 29
    let second = FileChatStorage(baseURL: dir)         let fetched = try await second.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 30
    let fetched = try await second.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 39
    try await store.save(.init(role: .user, text: "one"), userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)         try await store.save(.init(role: .user, text: "two"), userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)  /
  • Network accessline 40
    try await store.save(.init(role: .user, text: "two"), userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)  // dropped         let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)         
  • Network accessline 41
    let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 53
    try await store.save(.init(role: role, text: "\(index)"), userId: "u", sessionId: "s", agentId: "a", maxMessages: 3)         }         let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 54
    }         let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)         #expect(fetched.map(\.parts) == [[.text("3")], [.text("4")]])   // last even-count, most recent
  • Network accessline 55
    let fetched = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 100)
  • Network accessline 67
    let sports = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)
  • Network accessline 80
    let a = try await store.fetch(userId: "u", sessionId: "matchA", agentId: "companion", maxMessages: 100)
  • Network accessline 81
    let b = try await store.fetch(userId: "u", sessionId: "matchB", agentId: "companion", maxMessages: 100)
  • Network accessline 91
    let fetched = try await store.fetch(userId: "u", sessionId: "none", agentId: "x", maxMessages: 100)
  • Network accessline 101
    try await store.save(.init(role: .user, text: "ok"), userId: "a/b", sessionId: "x/y", agentId: "c d", maxMessages: 100)         let fetched = try await store.fetch(userId: "a/b", sessionId: "x/y", agentId: "c d", maxMessages: 100)
  • Network accessline 102
    let fetched = try await store.fetch(userId: "a/b", sessionId: "x/y", agentId: "c d", maxMessages: 100)

swift/Tests/AgentSquadTests/HTTPToolTests.swift

  • Network accessline 33
    @Test func templateKeysAreExtractedInOrder() {         #expect(HTTPToolSpec.templateKeys(in: "https://api/{a}/x/{b}") == ["a", "b"])
  • Network accessline 34
    #expect(HTTPToolSpec.templateKeys(in: "https://api/{a}/x/{b}") == ["a", "b"])
  • Network accessline 35
    #expect(HTTPToolSpec.templateKeys(in: "https://api/none").isEmpty)
  • Network accessline 38
    @Test func pathTemplatingFillsAndConsumesArgs() throws {         let spec = HTTPToolSpec(method: .get, url: "https://api.test/odds/{matchId}")
  • Network accessline 39
    let spec = HTTPToolSpec(method: .get, url: "https://api.test/odds/{matchId}")
  • Network accessline 48
    @Test func pathPlaceholderEncodesSlash() throws {         // A value containing '/' must not create extra path segments.         let spec = HTTPToolSpec(method: .get, url: "https://api.test/users/{id}/profile")
  • Network accessline 49
    // A value containing '/' must not create extra path segments.         let spec = HTTPToolSpec(method: .get, url: "https://api.test/users/{id}/profile")         let request = try spec.makeRequest(arguments: ["id": "foo/bar"])
  • Network accessline 50
    let spec = HTTPToolSpec(method: .get, url: "https://api.test/users/{id}/profile")
  • Network accessline 55
    @Test func queryPlaceholderEncodesDelimiters() throws {         // A value containing '&' or '=' must not create extra query parameters.         let spec = HTTPToolSpec(method: .get, url: "https://api.test/search?q={query}")
  • Network accessline 56
    // A value containing '&' or '=' must not create extra query parameters.         let spec = HTTPToolSpec(method: .get, url: "https://api.test/search?q={query}")         let request = try spec.makeRequest(arguments: ["query": "a&b=c"])
  • Network accessline 57
    let spec = HTTPToolSpec(method: .get, url: "https://api.test/search?q={query}")
  • Network accessline 69
    @Test func postSendsJSONBodyWithContentType() throws {         let spec = HTTPToolSpec(method: .post, url: "https://api.test/bets")
  • Network accessline 70
    let spec = HTTPToolSpec(method: .post, url: "https://api.test/bets")
  • Network accessline 79
    let spec = HTTPToolSpec(             method: .get,             url: "https://api.test/x",
  • Network accessline 80
    method: .get,             url: "https://api.test/x",             headers: ["Accept": "application/json"],
  • Network accessline 81
    url: "https://api.test/x",
  • Network accessline 93
    // baseURL trailing '/' + path leading '/' must not produce a double slash.         let invoker = MockInvoker(status: 200, body: "{}")         let group = HTTPToolGroup(baseURL: "https://api.test/", invoker: invoker)
  • Network accessline 94
    let invoker = MockInvoker(status: 200, body: "{}")         let group = HTTPToolGroup(baseURL: "https://api.test/", invoker: invoker)         let tool = group.get("users", "/users", "")
  • Network accessline 95
    let group = HTTPToolGroup(baseURL: "https://api.test/", invoker: invoker)
  • Network accessline 96
    let tool = group.get("users", "/users", "")         _ = try await tool.run(.object([:]))         #expect(invoker.request?.url?.absoluteString == "https://api.test/users")
  • Network accessline 97
    _ = try await tool.run(.object([:]))         #expect(invoker.request?.url?.absoluteString == "https://api.test/users")     }
  • Network accessline 98
    #expect(invoker.request?.url?.absoluteString == "https://api.test/users")
  • Network accessline 102
    // Neither baseURL nor path has a separator — a '/' must be inserted.         let invoker = MockInvoker(status: 200, body: "{}")         let group = HTTPToolGroup(baseURL: "https://api.test", invoker: invoker)
  • Network accessline 103
    let invoker = MockInvoker(status: 200, body: "{}")         let group = HTTPToolGroup(baseURL: "https://api.test", invoker: invoker)         let tool = group.get("items", "items", "")
  • Network accessline 104
    let group = HTTPToolGroup(baseURL: "https://api.test", invoker: invoker)
  • Network accessline 105
    let tool = group.get("items", "items", "")         _ = try await tool.run(.object([:]))         #expect(invoker.request?.url?.absoluteString == "https://api.test/items")
  • Network accessline 106
    _ = try await tool.run(.object([:]))         #expect(invoker.request?.url?.absoluteString == "https://api.test/items")     }
  • Network accessline 107
    #expect(invoker.request?.url?.absoluteString == "https://api.test/items")
  • Network accessline 122
    spec: HTTPToolSpec(                 method: .get,                 url: "https://api.test/odds/{matchId}",
  • Network accessline 123
    method: .get,                 url: "https://api.test/odds/{matchId}",                 hostArguments: ["session_id": "s-1"],
  • Network accessline 124
    url: "https://api.test/odds/{matchId}",
  • Network accessline 168
    name: "weather",             description: "",             spec: HTTPToolSpec(method: .get, url: "https://api.test/weather", invoker: invoker)
  • Network accessline 169
    description: "",             spec: HTTPToolSpec(method: .get, url: "https://api.test/weather", invoker: invoker)         )
  • Network accessline 170
    spec: HTTPToolSpec(method: .get, url: "https://api.test/weather", invoker: invoker)

swift/Tests/AgentSquadTests/InMemoryChatStorageTests.swift

  • Network accessline 13
    @Test func emptyByDefault() async throws {         let store = InMemoryChatStorage()         #expect(try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil).isEmpty)
  • Network accessline 14
    let store = InMemoryChatStorage()         #expect(try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil).isEmpty)     }
  • Network accessline 15
    #expect(try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil).isEmpty)
  • Network accessline 19
    // The point of the type: hand it a conversation at init and a consumer fetches it as history.         let store = InMemoryChatStorage([user("what are the odds?"), assistant("PSG 2.5")])         let history = try await store.fetch(userId: "
  • Network accessline 20
    let store = InMemoryChatStorage([user("what are the odds?"), assistant("PSG 2.5")])         let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)         #expect(texts(history) == ["what are the od
  • Network accessline 21
    let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 27
    // without knowing the consumer's agentId.         let store = InMemoryChatStorage([user("hi"), assistant("hello")])         let a = try await store.fetch(userId: "u1", sessionId: "s1", agentId: "agent-x", maxMessages: nil)
  • Network accessline 28
    let store = InMemoryChatStorage([user("hi"), assistant("hello")])         let a = try await store.fetch(userId: "u1", sessionId: "s1", agentId: "agent-x", maxMessages: nil)         let b = try await store.fetch(userId: "u2", sessionId: "s2"
  • Network accessline 29
    let a = try await store.fetch(userId: "u1", sessionId: "s1", agentId: "agent-x", maxMessages: nil)
  • Network accessline 30
    let b = try await store.fetch(userId: "u2", sessionId: "s2", agentId: "agent-y", maxMessages: nil)
  • Network accessline 35
    let store = InMemoryChatStorage([user("q1"), assistant("a1")])         try await store.saveMessages([user("q2"), assistant("a2")], userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)         #expect(texts(try await store.fetch(user
  • Network accessline 36
    try await store.saveMessages([user("q2"), assistant("a2")], userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)         #expect(texts(try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)) == ["q1", "a1
  • Network accessline 37
    #expect(texts(try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)) == ["q1", "a1", "q2", "a2"])
  • Network accessline 42
    // Last stored is .assistant; a second .assistant save is dropped to keep roles alternating.         try await store.save(assistant("a1-dup"), userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)         #expect(texts(try await stor
  • Network accessline 43
    try await store.save(assistant("a1-dup"), userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)         #expect(texts(try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)) == ["q1", "a1"])     }
  • Network accessline 44
    #expect(texts(try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)) == ["q1", "a1"])
  • Network accessline 48
    let store = InMemoryChatStorage([user("q1"), assistant("a1"), user("q2"), assistant("a2")])         // maxMessages counts messages, rounding down to an even pair — keep the most recent 2.         let history = try await store.fetch(userId: 
  • Network accessline 49
    // maxMessages counts messages, rounding down to an even pair — keep the most recent 2.         let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 2)         #expect(texts(history) == ["q2", "a2"])
  • Network accessline 50
    let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 2)
  • Network accessline 58
    let store = InMemoryChatStorage(seed)         try await store.saveMessages([user("q4"), assistant("a4")], userId: "u", sessionId: "s", agentId: "a", maxMessages: 4)         #expect((try await store.fetch(userId: "u", sessionId: "s", agentId
  • Network accessline 59
    try await store.saveMessages([user("q4"), assistant("a4")], userId: "u", sessionId: "s", agentId: "a", maxMessages: 4)         #expect((try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 4)).count == 4)    // view
  • Network accessline 60
    #expect((try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: 4)).count == 4)    // view is trimmed…
  • Network accessline 61
    #expect((try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)).count == 8)  // …but all 8 are kept

swift/Tests/AgentSquadTests/OTLPExporterTests.swift

  • Network accessline 28
    private let endpoint = URL(string: "https://collector.example/v1/traces")!

swift/Tests/AgentSquadTests/OrchestratorTests.swift

  • Network accessline 91
    let persisted = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)
  • Network accessline 165
    let agent = Agent(name: "sports", model: MockLLMClient([.textDelta("hi"), .done(reason: .stop, usage: nil)]), saveChat: false)         _ = try await collect(Orchestrator(agents: [agent], store: store).route(.text("q"), userId: "u", sessionI
  • Network accessline 166
    _ = try await collect(Orchestrator(agents: [agent], store: store).route(.text("q"), userId: "u", sessionId: "s"))         let persisted = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)         #expec
  • Network accessline 167
    let persisted = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)
  • Network accessline 199
    try await run("q1")         try await run("q2")         let persisted = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)
  • Network accessline 200
    try await run("q2")         let persisted = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)         #expect(persisted.map(\.role) == [.user, .assistant, .user, .assistant])
  • Network accessline 201
    let persisted = try await store.fetch(userId: "u", sessionId: "s", agentId: "sports", maxMessages: 100)

swift/Tests/AgentSquadTests/RealtimeTestSupport.swift

  • Network accessline 163
    init(seed: [ConversationMessage] = []) { self.seed = seed }     var saved: [ConversationMessage] { lock.withLock { _saved } }     func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -> [Conversatio
  • Network accessline 164
    var saved: [ConversationMessage] { lock.withLock { _saved } }     func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -> [ConversationMessage] { seed }     func save(_ message: ConversationMessage,
  • Network accessline 165
    func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -> [ConversationMessage] { seed }

swift/Tests/AgentSquadTests/SummarizingChatStorageTests.swift

  • Network accessline 41
    func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -> [ConversationMessage] {
  • Network accessline 70
    let result = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 85
    let result = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 99
    _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 113
    _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 126
    _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 136
    let result = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 149
    _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 163
    _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 164
    _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 207
    // Activate the buffer.         _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 208
    _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 213
    // Fetch from buffer — must contain the saved message.         let result = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 214
    let result = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 231
    // Activate buffer with first summarization (callCount → 1).         _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 232
    _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 253
    // Activate buffer.         _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 254
    _ = try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 273
    await #expect(throws: SummarizationFailed.self) {             try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 274
    try await storage.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)

swift/Tests/AgentSquadTests/ToolBuilderTests.swift

  • Network accessline 53
    let invoker = RecordingInvoker(status: 200, body: #"{"ok":true}"#)         let tool = Tool.get(             "search", "https://api.test/search", "Search.",
  • Network accessline 54
    let tool = Tool.get(             "search", "https://api.test/search", "Search.",             .string("q", required: true),
  • Network accessline 55
    "search", "https://api.test/search", "Search.",
  • Network accessline 70
    let invoker = RecordingInvoker(status: 200, body: "{}")         let api = HTTPToolGroup(             baseURL: "https://api.test",
  • Network accessline 71
    let api = HTTPToolGroup(             baseURL: "https://api.test",             headers: ["X-Match-Id": "42"],
  • Network accessline 72
    baseURL: "https://api.test",
  • Network accessline 82
    _ = try await tool.run(["matchId": "777"])         #expect(invoker.request?.url?.absoluteString.contains("https://api.test/odds/777") == true)
  • Network accessline 83
    #expect(invoker.request?.url?.absoluteString.contains("https://api.test/odds/777") == true)
  • Network accessline 89
    // Group default would treat the body as success; the per-call override flags it as an error.         let invoker = RecordingInvoker(status: 200, body: #"{"error_code":"NOPE","error":"bad"}"#)         let api = HTTPToolGroup(baseURL: "https
  • Network accessline 90
    let invoker = RecordingInvoker(status: 200, body: #"{"error_code":"NOPE","error":"bad"}"#)         let api = HTTPToolGroup(baseURL: "https://api.test", invoker: invoker)         let tool = api.get("x", "/x", "X.", response: .jsonEnvelopeErr
  • Network accessline 91
    let api = HTTPToolGroup(baseURL: "https://api.test", invoker: invoker)
  • Network accessline 109
    @Test func outputSchemaIsCarriedButNotInInput() {         let out: JSONValue = ["type": "object", "properties": ["sum": ["type": "integer"]]]         let tool = Tool.get("add", "https://api.test/add", "Add.", .integer("a", required: true), 
  • Network accessline 110
    let out: JSONValue = ["type": "object", "properties": ["sum": ["type": "integer"]]]         let tool = Tool.get("add", "https://api.test/add", "Add.", .integer("a", required: true), outputSchema: out)         #expect(tool.definition.outputS
  • Network accessline 111
    let tool = Tool.get("add", "https://api.test/add", "Add.", .integer("a", required: true), outputSchema: out)

swift/Tests/AgentSquadTests/TransformingChatStorageTests.swift

  • Network accessline 20
    let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 31
    let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 44
    let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 50
    private actor SpyStorage: ChatStorage {         private(set) var saveBatches: [[ConversationMessage]] = []         func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -> [ConversationMessage] { [] 
  • Network accessline 51
    private(set) var saveBatches: [[ConversationMessage]] = []         func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -> [ConversationMessage] { [] }         func save(_ message: ConversationMessa
  • Network accessline 52
    func fetch(userId: String, sessionId: String, agentId: String, maxMessages: Int?) async throws -> [ConversationMessage] { [] }
  • Network accessline 115
    userId: "u", sessionId: "s", agentId: "a", maxMessages: nil         )         let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 116
    )         let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)         #expect(texts(history) == ["pay [IBAN] or [CARD], mail [EMAIL]"])
  • Network accessline 117
    let history = try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)
  • Network accessline 122
    let store = TransformingChatStorage(wrapping: InMemoryChatStorage([user("q"), assistant("a")])) { _ in nil }         // A drop-everything transform must not affect what fetch/fetchAllChats return.         #expect(texts(try await store.fetch
  • Network accessline 123
    // A drop-everything transform must not affect what fetch/fetchAllChats return.         #expect(texts(try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)) == ["q", "a"])         #expect(texts(try await store.f
  • Network accessline 124
    #expect(texts(try await store.fetch(userId: "u", sessionId: "s", agentId: "a", maxMessages: nil)) == ["q", "a"])

typescript/.npmignore

  • Access to secretsline 48
    [Credential-related source omitted]

typescript/README.md

  • Network accessline 6
    <p align="center">   <a href="https://github.com/2fastlabs/agent-squad"><img alt="GitHub Repo" src="https://img.shields.io/badge/GitHub-Repo-green.svg" /></a>
  • Network accessline 7
    <a href="https://github.com/2fastlabs/agent-squad"><img alt="GitHub Repo" src="https://img.shields.io/badge/GitHub-Repo-green.svg" /></a>
  • Network accessline 8
    <a href="https://www.npmjs.com/package/agent-squad"><img alt="npm" src="https://img.shields.io/npm/v/agent-squad.svg?style=flat-square"></a>
  • Network accessline 9
    <a href="https://2fastlabs.github.io/agent-squad/"><img alt="Documentation" src="https://img.shields.io/badge/docs-book-blue.svg?style=flat-square"></a>
  • Network accessline 12
    <p align="center">   <!-- GitHub Stats -->   <img src="https://img.shields.io/github/stars/2fastlabs/agent-squad?style=social" alt="GitHub stars">
  • Network accessline 13
    <!-- GitHub Stats -->   <img src="https://img.shields.io/github/stars/2fastlabs/agent-squad?style=social" alt="GitHub stars">   <img src="https://img.shields.io/github/forks/2fastlabs/agent-squad?style=social" alt="GitHub forks">
  • Network accessline 14
    <img src="https://img.shields.io/github/stars/2fastlabs/agent-squad?style=social" alt="GitHub stars">
  • Network accessline 15
    <img src="https://img.shields.io/github/forks/2fastlabs/agent-squad?style=social" alt="GitHub forks">
  • Network accessline 16
    <img src="https://img.shields.io/github/watchers/2fastlabs/agent-squad?style=social" alt="GitHub watchers">
  • Network accessline 19
    <p align="center">   <!-- Repository Info -->   <img src="https://img.shields.io/github/last-commit/2fastlabs/agent-squad" alt="Last Commit">
  • Network accessline 20
    <!-- Repository Info -->   <img src="https://img.shields.io/github/last-commit/2fastlabs/agent-squad" alt="Last Commit">   <img src="https://img.shields.io/github/issues/2fastlabs/agent-squad" alt="Issues">
  • Network accessline 21
    <img src="https://img.shields.io/github/last-commit/2fastlabs/agent-squad" alt="Last Commit">   <img src="https://img.shields.io/github/issues/2fastlabs/agent-squad" alt="Issues">   <img src="https://img.shields.io/github/issues-pr/2fastlab
  • Network accessline 22
    <img src="https://img.shields.io/github/issues/2fastlabs/agent-squad" alt="Issues">   <img src="https://img.shields.io/github/issues-pr/2fastlabs/agent-squad" alt="Pull Requests"> </p>
  • Network accessline 23
    <img src="https://img.shields.io/github/issues-pr/2fastlabs/agent-squad" alt="Pull Requests">
  • Network accessline 26
    <p align="center">   <!-- Package Stats -->   <a href="https://www.npmjs.com/package/agent-squad"><img src="https://img.shields.io/npm/dm/agent-squad?label=npm%20downloads" alt="npm Monthly Downloads"></a>
  • Network accessline 27
    <!-- Package Stats -->   <a href="https://www.npmjs.com/package/agent-squad"><img src="https://img.shields.io/npm/dm/agent-squad?label=npm%20downloads" alt="npm Monthly Downloads"></a> </p>
  • Network accessline 28
    <a href="https://www.npmjs.com/package/agent-squad"><img src="https://img.shields.io/npm/dm/agent-squad?label=npm%20downloads" alt="npm Monthly Downloads"></a>
  • Network accessline 43
    Route requests with [Jev](https://docs.typesafe.ai/introduction), TypeSafe AI's decision model, instead of an LLM. Your agents become a typed `choice` question, and Jev returns the chosen agent plus a calibrated confidence. There's no outpu
  • Access to secretsline 48
    [Credential-related source omitted]
  • Network accessline 51
    [JevClassifier docs](https://2fastlabs.github.io/agent-squad/classifiers/built-in/jev-classifier) · [demos](https://github.com/2fastlabs/agent-squad/tree/main/examples/jev-demo/typescript)
  • Network accessline 66
    ![High-level architecture flow diagram](https://raw.githubusercontent.com/2fastlabs/agent-squad/main/img/flow.jpg)
  • Network accessline 79
    To quickly get a feel for the Agent Squad, we've provided a Demo App with a few basic agents. This interactive demo showcases the orchestrator's capabilities in a user-friendly interface. To learn more about setting up and running the demo 
  • Network accessline 96
    ![](https://raw.githubusercontent.com/2fastlabs/agent-squad/main/img/demo-app.gif?raw=true)
  • Network accessline 100
    Check out our [documentation](https://2fastlabs.github.io/agent-squad/) for comprehensive guides on setting up and using the Agent Squad!
  • Network accessline 204
    We welcome contributions! Please see our [Contributing Guide](https://raw.githubusercontent.com/2fastlabs/agent-squad/main/CONTRIBUTING.md) for more details.
  • Network accessline 208
    This project is licensed under the Apache 2.0 licence - see the [LICENSE](https://raw.githubusercontent.com/2fastlabs/agent-squad/main/LICENSE) file for details.
  • Network accessline 210
    ## 📄 Font License This project uses the JetBrainsMono NF font, licensed under the SIL Open Font License 1.1. For full license details, see [FONT-LICENSE.md](https://github.com/JetBrains/JetBrainsMono/blob/master/OFL.txt).
  • Network accessline 212
    For full license details, see [FONT-LICENSE.md](https://github.com/JetBrains/JetBrainsMono/blob/master/OFL.txt).

typescript/SKILL.md

  • Network accessline 219
    [Credential-related source omitted]
  • Access to secretsline 219
    [Credential-related source omitted]
  • Network accessline 220
    `url?` (falls back to `DAKERA_URL` then `http://localhost:3000`), `topK?` (default 10), `filter?`.
  • Network accessline 254
    [Credential-related source omitted]
  • Network accessline 255
    [Credential-related source omitted]
  • Network accessline 256
    [Credential-related source omitted]

typescript/eslint.config.mjs

  • Executable scriptline 1
    Executable file

typescript/jest.config.js

  • Executable scriptline 1
    Executable file

typescript/package-lock.json

  • Network accessline 1682
    {           "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 1683
    "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"         }
  • Network accessline 1684
    "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 1698
    {           "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 1699
    "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"         }
  • Network accessline 1700
    "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 3512
    {           "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 3513
    "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"         }
  • Network accessline 3514
    "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 3528
    {           "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 3529
    "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"         }
  • Network accessline 3530
    "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 3774
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/babel"
  • Network accessline 3775
    "type": "opencollective",         "url": "https://opencollective.com/babel"       }
  • Network accessline 3776
    "url": "https://opencollective.com/babel"
  • Network accessline 4186
    "node_modules/@dakera-ai/dakera": {       "version": "0.11.102",       "resolved": "https://registry.npmjs.org/@dakera-ai/dakera/-/dakera-0.11.102.tgz",
  • Network accessline 4187
    "version": "0.11.102",       "resolved": "https://registry.npmjs.org/@dakera-ai/dakera/-/dakera-0.11.102.tgz",       "integrity": "sha512-7jhUFBWx6vn/l8xMbmbCYxHra77YnoE/YjMkWMzAtGd1g28xUWsHE3Ax5/5D3Xm7NqFMD7lpSTZxttg7v4rH8w==",
  • Network accessline 4188
    "resolved": "https://registry.npmjs.org/@dakera-ai/dakera/-/dakera-0.11.102.tgz",
  • Network accessline 4204
    },       "funding": {         "url": "https://opencollective.com/eslint"
  • Network accessline 4205
    "funding": {         "url": "https://opencollective.com/eslint"       },
  • Network accessline 4206
    "url": "https://opencollective.com/eslint"
  • Network accessline 4267
    },       "funding": {         "url": "https://opencollective.com/eslint"
  • Network accessline 4268
    "funding": {         "url": "https://opencollective.com/eslint"       }
  • Network accessline 4269
    "url": "https://opencollective.com/eslint"
  • Network accessline 4281
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 4282
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 4283
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 4308
    },       "funding": {         "url": "https://eslint.org/donate"
  • Network accessline 4309
    "funding": {         "url": "https://eslint.org/donate"       }
  • Network accessline 4310
    "url": "https://eslint.org/donate"
  • Network accessline 4355
    "funding": {         "type": "github",         "url": "https://github.com/sponsors/nzakas"
  • Network accessline 4356
    "type": "github",         "url": "https://github.com/sponsors/nzakas"       }
  • Network accessline 4357
    "url": "https://github.com/sponsors/nzakas"
  • Network accessline 4366
    "funding": {         "type": "github",         "url": "https://github.com/sponsors/nzakas"
  • Network accessline 4367
    "type": "github",         "url": "https://github.com/sponsors/nzakas"       }
  • Network accessline 4368
    "url": "https://github.com/sponsors/nzakas"
  • Network accessline 4766
    "node_modules/@libsql/darwin-x64": {       "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.4.7.tgz",
  • Network accessline 4767
    "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.4.7.tgz",       "integrity": "sha512-ezc7V75+eoyyH07BO9tIyJdqXXcRfZMbKcLCeF8+qWK5nP8wWuMcfOVywecsXGRbT99zc5eNra4NEx6z5PkSsA==",
  • Network accessline 4768
    "resolved": "https://registry.npmjs.org/@libsql/darwin-x64/-/darwin-x64-0.4.7.tgz",
  • Network accessline 4800
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/node-fetch"
  • Network accessline 4801
    "type": "opencollective",         "url": "https://opencollective.com/node-fetch"       }
  • Network accessline 4802
    "url": "https://opencollective.com/node-fetch"
  • Network accessline 4820
    "node_modules/@libsql/linux-arm64-gnu": {       "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.4.7.tgz",
  • Network accessline 4821
    "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.4.7.tgz",       "integrity": "sha512-WlX2VYB5diM4kFfNaYcyhw5y+UJAI3xcMkEUJZPtRDEIu85SsSFrQ+gvoKfcVh76B//ztSeEX2wl9yrjF7BBCA==",
  • Network accessline 4822
    "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-gnu/-/linux-arm64-gnu-0.4.7.tgz",
  • Network accessline 4833
    "node_modules/@libsql/linux-arm64-musl": {       "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.4.7.tgz",
  • Network accessline 4834
    "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.4.7.tgz",       "integrity": "sha512-6kK9xAArVRlTCpWeqnNMCoXW1pe7WITI378n4NpvU5EJ0Ok3aNTIC2nRPRjhro90QcnmLL1jPcrVwO4WD1U0xw==",
  • Network accessline 4835
    "resolved": "https://registry.npmjs.org/@libsql/linux-arm64-musl/-/linux-arm64-musl-0.4.7.tgz",
  • Network accessline 4846
    "node_modules/@libsql/linux-x64-gnu": {       "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.4.7.tgz",
  • Network accessline 4847
    "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.4.7.tgz",       "integrity": "sha512-CMnNRCmlWQqqzlTw6NeaZXzLWI8bydaXDke63JTUCvu8R+fj/ENsLrVBtPDlxQ0wGsYdXGlrUCH8Qi9gJep0yQ==",
  • Network accessline 4848
    "resolved": "https://registry.npmjs.org/@libsql/linux-x64-gnu/-/linux-x64-gnu-0.4.7.tgz",
  • Network accessline 4859
    "node_modules/@libsql/linux-x64-musl": {       "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.4.7.tgz",
  • Network accessline 4860
    "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.4.7.tgz",       "integrity": "sha512-nI6tpS1t6WzGAt1Kx1n1HsvtBbZ+jHn0m7ogNNT6pQHZQj7AFFTIMeDQw/i/Nt5H38np1GVRNsFe99eSIMs9XA==",
  • Network accessline 4861
    "resolved": "https://registry.npmjs.org/@libsql/linux-x64-musl/-/linux-x64-musl-0.4.7.tgz",
  • Network accessline 4872
    "node_modules/@libsql/win32-x64-msvc": {       "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.4.7.tgz",
  • Network accessline 4873
    "version": "0.4.7",       "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.4.7.tgz",       "integrity": "sha512-7pJzOWzPm6oJUxml+PCDRzYQ4A1hTMHAciTAHfFK4fkbDZX33nWPVG7Y3vqdKtslcwAzwmrNDc6sXy2nwWnbiw==",
  • Network accessline 4874
    "resolved": "https://registry.npmjs.org/@libsql/win32-x64-msvc/-/win32-x64-msvc-0.4.7.tgz",
  • Network accessline 5735
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5736
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       },
  • Network accessline 5737
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5759
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5760
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       },
  • Network accessline 5761
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5780
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5781
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       },
  • Network accessline 5782
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5799
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5800
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       }
  • Network accessline 5801
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5811
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5812
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       },
  • Network accessline 5813
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5833
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5834
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       },
  • Network accessline 5835
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5849
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5850
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       }
  • Network accessline 5851
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5872
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5873
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       },
  • Network accessline 5874
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5897
    },       "funding": {         "url": "https://github.com/sponsors/isaacs"
  • Network accessline 5898
    "funding": {         "url": "https://github.com/sponsors/isaacs"       }
  • Network accessline 5899
    "url": "https://github.com/sponsors/isaacs"
  • Network accessline 5926
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5927
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       },
  • Network accessline 5928
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5946
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5947
    "type": "opencollective",         "url": "https://opencollective.com/typescript-eslint"       }
  • Network accessline 5948
    "url": "https://opencollective.com/typescript-eslint"
  • Network accessline 5957
    },       "funding": {         "url": "https://opencollective.com/eslint"
  • Network accessline 5958
    "funding": {         "url": "https://opencollective.com/eslint"       }
  • Network accessline 5959
    "url": "https://opencollective.com/eslint"
  • Network accessline 6003
    "funding": {         "type": "github",         "url": "https://github.com/sponsors/wooorm"
  • Network accessline 6004
    "type": "github",         "url": "https://github.com/sponsors/wooorm"       }
  • Network accessline 6005
    "url": "https://github.com/sponsors/wooorm"
  • Network accessline 6011
    "funding": {         "type": "github",         "url": "https://github.com/sponsors/wooorm"
  • Network accessline 6012
    "type": "github",         "url": "https://github.com/sponsors/wooorm"       }
  • Network accessline 6013
    "url": "https://github.com/sponsors/wooorm"
  • Network accessline 6035
    "funding": {         "type": "github",         "url": "https://github.com/sponsors/epoberezkin"
  • Network accessline 6036
    "type": "github",         "url": "https://github.com/sponsors/epoberezkin"       }
  • Network accessline 6037
    "url": "https://github.com/sponsors/epoberezkin"
  • Network accessline 6049
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6050
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 6051
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6070
    },       "funding": {         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
  • Network accessline 6071
    "funding": {         "url": "https://github.com/chalk/ansi-styles?sponsor=1"       }
  • Network accessline 6072
    "url": "https://github.com/chalk/ansi-styles?sponsor=1"
  • Network accessline 6294
    {           "type": "opencollective",           "url": "https://opencollective.com/browserslist"
  • Network accessline 6295
    "type": "opencollective",           "url": "https://opencollective.com/browserslist"         },
  • Network accessline 6296
    "url": "https://opencollective.com/browserslist"
  • Network accessline 6298
    {           "type": "tidelift",           "url": "https://tidelift.com/funding/github/npm/browserslist"
  • Network accessline 6299
    "type": "tidelift",           "url": "https://tidelift.com/funding/github/npm/browserslist"         },
  • Network accessline 6300
    "url": "https://tidelift.com/funding/github/npm/browserslist"
  • Network accessline 6302
    {           "type": "github",           "url": "https://github.com/sponsors/ai"
  • Network accessline 6303
    "type": "github",           "url": "https://github.com/sponsors/ai"         }
  • Network accessline 6304
    "url": "https://github.com/sponsors/ai"
  • Network accessline 6364
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 6365
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 6366
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 6399
    {           "type": "opencollective",           "url": "https://opencollective.com/browserslist"
  • Network accessline 6400
    "type": "opencollective",           "url": "https://opencollective.com/browserslist"         },
  • Network accessline 6401
    "url": "https://opencollective.com/browserslist"
  • Network accessline 6403
    {           "type": "tidelift",           "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
  • Network accessline 6404
    "type": "tidelift",           "url": "https://tidelift.com/funding/github/npm/caniuse-lite"         },
  • Network accessline 6405
    "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
  • Network accessline 6407
    {           "type": "github",           "url": "https://github.com/sponsors/ai"
  • Network accessline 6408
    "type": "github",           "url": "https://github.com/sponsors/ai"         }
  • Network accessline 6409
    "url": "https://github.com/sponsors/ai"
  • Network accessline 6423
    },       "funding": {         "url": "https://github.com/chalk/chalk?sponsor=1"
  • Network accessline 6424
    "funding": {         "url": "https://github.com/chalk/chalk?sponsor=1"       }
  • Network accessline 6425
    "url": "https://github.com/chalk/chalk?sponsor=1"
  • Network accessline 6440
    {           "type": "github",           "url": "https://github.com/sponsors/sibiraj-s"
  • Network accessline 6441
    "type": "github",           "url": "https://github.com/sponsors/sibiraj-s"         }
  • Network accessline 6442
    "url": "https://github.com/sponsors/sibiraj-s"
  • Network accessline 6623
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 6624
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 6625
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 6671
    },       "funding": {         "url": "https://dotenvx.com"
  • Network accessline 6672
    "funding": {         "url": "https://dotenvx.com"       }
  • Network accessline 6673
    "url": "https://dotenvx.com"
  • Network accessline 6713
    },       "funding": {         "url": "https://github.com/sindresorhus/emittery?sponsor=1"
  • Network accessline 6714
    "funding": {         "url": "https://github.com/sindresorhus/emittery?sponsor=1"       }
  • Network accessline 6715
    "url": "https://github.com/sindresorhus/emittery?sponsor=1"
  • Network accessline 6828
    },       "funding": {         "url": "https://eslint.org/donate"
  • Network accessline 6829
    "funding": {         "url": "https://eslint.org/donate"       },
  • Network accessline 6830
    "url": "https://eslint.org/donate"
  • Network accessline 6860
    },       "funding": {         "url": "https://opencollective.com/eslint"
  • Network accessline 6861
    "funding": {         "url": "https://opencollective.com/eslint"       }
  • Network accessline 6862
    "url": "https://opencollective.com/eslint"
  • Network accessline 6870
    },       "funding": {         "url": "https://opencollective.com/eslint"
  • Network accessline 6871
    "funding": {         "url": "https://opencollective.com/eslint"       }
  • Network accessline 6872
    "url": "https://opencollective.com/eslint"
  • Network accessline 6880
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6881
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 6882
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6890
    },       "funding": {         "url": "https://opencollective.com/eslint"
  • Network accessline 6891
    "funding": {         "url": "https://opencollective.com/eslint"       }
  • Network accessline 6892
    "url": "https://opencollective.com/eslint"
  • Network accessline 6904
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6905
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 6906
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6924
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6925
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 6926
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6937
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6938
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 6939
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 6952
    },       "funding": {         "url": "https://opencollective.com/eslint"
  • Network accessline 6953
    "funding": {         "url": "https://opencollective.com/eslint"       }
  • Network accessline 6954
    "url": "https://opencollective.com/eslint"
  • Network accessline 6962
    },       "funding": {         "url": "https://opencollective.com/eslint"
  • Network accessline 6963
    "funding": {         "url": "https://opencollective.com/eslint"       }
  • Network accessline 6964
    "url": "https://opencollective.com/eslint"
  • Network accessline 7041
    },       "funding": {         "url": "https://github.com/sindresorhus/execa?sponsor=1"
  • Network accessline 7042
    "funding": {         "url": "https://github.com/sindresorhus/execa?sponsor=1"       }
  • Network accessline 7043
    "url": "https://github.com/sindresorhus/execa?sponsor=1"
  • Network accessline 7083
    {           "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 7084
    "type": "github",           "url": "https://github.com/sponsors/NaturalIntelligence"         },
  • Network accessline 7085
    "url": "https://github.com/sponsors/NaturalIntelligence"
  • Network accessline 7087
    {           "type": "paypal",           "url": "https://paypal.me/naturalintelligence"
  • Network accessline 7088
    "type": "paypal",           "url": "https://paypal.me/naturalintelligence"         }
  • Network accessline 7089
    "url": "https://paypal.me/naturalintelligence"
  • Network accessline 7111
    {           "type": "github",           "url": "https://github.com/sponsors/jimmywarting"
  • Network accessline 7112
    "type": "github",           "url": "https://github.com/sponsors/jimmywarting"         },
  • Network accessline 7113
    "url": "https://github.com/sponsors/jimmywarting"
  • Network accessline 7115
    {           "type": "paypal",           "url": "https://paypal.me/jimmywarting"
  • Network accessline 7116
    "type": "paypal",           "url": "https://paypal.me/jimmywarting"         }
  • Network accessline 7117
    "url": "https://paypal.me/jimmywarting"
  • Network accessline 7207
    {           "type": "individual",           "url": "https://github.com/sponsors/RubenVerborgh"
  • Network accessline 7208
    "type": "individual",           "url": "https://github.com/sponsors/RubenVerborgh"         }
  • Network accessline 7209
    "url": "https://github.com/sponsors/RubenVerborgh"
  • Network accessline 7287
    "license": "MIT",       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7288
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 7289
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7332
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7333
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 7334
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7362
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 7363
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 7364
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 7381
    },       "funding": {         "url": "https://github.com/sponsors/isaacs"
  • Network accessline 7382
    "funding": {         "url": "https://github.com/sponsors/isaacs"       }
  • Network accessline 7383
    "url": "https://github.com/sponsors/isaacs"
  • Network accessline 7409
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7410
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 7411
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7431
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7432
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 7433
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7441
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7442
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 7443
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7454
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7455
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 7456
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7570
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 7571
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 7572
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 7595
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 7596
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 7597
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 7635
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7636
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 7637
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 7687
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 7688
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 7689
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8277
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8278
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 8279
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8323
    },       "funding": {         "url": "https://github.com/chalk/supports-color?sponsor=1"
  • Network accessline 8324
    "funding": {         "url": "https://github.com/chalk/supports-color?sponsor=1"       }
  • Network accessline 8325
    "url": "https://github.com/chalk/supports-color?sponsor=1"
  • Network accessline 8517
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8518
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 8519
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8628
    "license": "MIT",       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 8629
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 8630
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 8717
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/mongoose"
  • Network accessline 8718
    "type": "opencollective",         "url": "https://opencollective.com/mongoose"       }
  • Network accessline 8719
    "url": "https://opencollective.com/mongoose"
  • Network accessline 8794
    {           "type": "github",           "url": "https://github.com/sponsors/jimmywarting"
  • Network accessline 8795
    "type": "github",           "url": "https://github.com/sponsors/jimmywarting"         },
  • Network accessline 8796
    "url": "https://github.com/sponsors/jimmywarting"
  • Network accessline 8798
    {           "type": "github",           "url": "https://paypal.me/jimmywarting"
  • Network accessline 8799
    "type": "github",           "url": "https://paypal.me/jimmywarting"         }
  • Network accessline 8800
    "url": "https://paypal.me/jimmywarting"
  • Network accessline 8876
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 8877
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 8878
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 8902
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8903
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 8904
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8961
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8962
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 8963
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8986
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 8987
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 8988
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 9021
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 9022
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 9023
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 9142
    },       "funding": {         "url": "https://github.com/sponsors/jonschlinkert"
  • Network accessline 9143
    "funding": {         "url": "https://github.com/sponsors/jonschlinkert"       }
  • Network accessline 9144
    "url": "https://github.com/sponsors/jonschlinkert"
  • Network accessline 9231
    },       "funding": {         "url": "https://github.com/prettier/prettier?sponsor=1"
  • Network accessline 9232
    "funding": {         "url": "https://github.com/prettier/prettier?sponsor=1"       }
  • Network accessline 9233
    "url": "https://github.com/prettier/prettier?sponsor=1"
  • Network accessline 9255
    },       "funding": {         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
  • Network accessline 9256
    "funding": {         "url": "https://github.com/chalk/ansi-styles?sponsor=1"       }
  • Network accessline 9257
    "url": "https://github.com/chalk/ansi-styles?sponsor=1"
  • Network accessline 9291
    {           "type": "individual",           "url": "https://github.com/sponsors/dubzzz"
  • Network accessline 9292
    "type": "individual",           "url": "https://github.com/sponsors/dubzzz"         },
  • Network accessline 9293
    "url": "https://github.com/sponsors/dubzzz"
  • Network accessline 9295
    {           "type": "opencollective",           "url": "https://opencollective.com/fast-check"
  • Network accessline 9296
    "type": "opencollective",           "url": "https://opencollective.com/fast-check"         }
  • Network accessline 9297
    "url": "https://opencollective.com/fast-check"
  • Network accessline 9310
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 9311
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 9312
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 9358
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 9359
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 9360
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 9460
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 9461
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 9462
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 9486
    "funding": {         "type": "opencollective",         "url": "https://opencollective.com/sinon"
  • Network accessline 9487
    "type": "opencollective",         "url": "https://opencollective.com/sinon"       }
  • Network accessline 9488
    "url": "https://opencollective.com/sinon"
  • Network accessline 9627
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 9628
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 9629
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 9652
    },       "funding": {         "url": "https://github.com/sponsors/ljharb"
  • Network accessline 9653
    "funding": {         "url": "https://github.com/sponsors/ljharb"       }
  • Network accessline 9654
    "url": "https://github.com/sponsors/ljharb"
  • Network accessline 9686
    },       "funding": {         "url": "https://github.com/sponsors/SuperchupuDev"
  • Network accessline 9687
    "funding": {         "url": "https://github.com/sponsors/SuperchupuDev"       }
  • Network accessline 9688
    "url": "https://github.com/sponsors/SuperchupuDev"
  • Network accessline 9713
    },       "funding": {         "url": "https://github.com/sponsors/jonschlinkert"
  • Network accessline 9714
    "funding": {         "url": "https://github.com/sponsors/jonschlinkert"       }
  • Network accessline 9715
    "url": "https://github.com/sponsors/jonschlinkert"
  • Network accessline 9883
    },       "funding": {         "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 9884
    "funding": {         "url": "https://github.com/sponsors/sindresorhus"       }
  • Network accessline 9885
    "url": "https://github.com/sponsors/sindresorhus"
  • Network accessline 9921
    {           "type": "opencollective",           "url": "https://opencollective.com/browserslist"
  • Network accessline 9922
    "type": "opencollective",           "url": "https://opencollective.com/browserslist"         },
  • Network accessline 9923
    "url": "https://opencollective.com/browserslist"
  • Network accessline 9925
    {           "type": "tidelift",           "url": "https://tidelift.com/funding/github/npm/browserslist"
  • Network accessline 9926
    "type": "tidelift",           "url": "https://tidelift.com/funding/github/npm/browserslist"         },
  • Network accessline 9927
    "url": "https://tidelift.com/funding/github/npm/browserslist"
  • Network accessline 9929
    {           "type": "github",           "url": "https://github.com/sponsors/ai"
  • Network accessline 9930
    "type": "github",           "url": "https://github.com/sponsors/ai"         }
  • Network accessline 9931
    "url": "https://github.com/sponsors/ai"
  • Network accessline 9958
    "version": "9.0.1",       "funding": [         "https://github.com/sponsors/broofa",
  • Network accessline 9959
    "funding": [         "https://github.com/sponsors/broofa",         "https://github.com/sponsors/ctavan"
  • Network accessline 9960
    "https://github.com/sponsors/broofa",
  • Network accessline 9961
    "https://github.com/sponsors/ctavan"
  • Network accessline 10076
    },       "funding": {         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
  • Network accessline 10077
    "funding": {         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"       }
  • Network accessline 10078
    "url": "https://github.com/chalk/wrap-ansi?sponsor=1"

typescript/package.json

  • Executable scriptline 1
    Executable file
  • Network accessline 10
    "author": {     "name": "2FastLabs",     "url": "https://github.com/2fastlabs"
  • Network accessline 11
    "name": "2FastLabs",     "url": "https://github.com/2fastlabs"   },
  • Network accessline 12
    "url": "https://github.com/2fastlabs"
  • Network accessline 14
    "repository": {     "type": "git",     "url": "https://github.com/2fastlabs/agent-squad"
  • Network accessline 15
    "type": "git",     "url": "https://github.com/2fastlabs/agent-squad"   },
  • Network accessline 16
    "url": "https://github.com/2fastlabs/agent-squad"
  • Network accessline 17
    },   "bugs": {     "url": "https://github.com/2fastlabs/agent-squad/issues"
  • Network accessline 18
    "bugs": {     "url": "https://github.com/2fastlabs/agent-squad/issues"   },
  • Network accessline 19
    "url": "https://github.com/2fastlabs/agent-squad/issues"
  • Network accessline 20
    },   "homepage": "https://github.com/2fastlabs/agent-squad",   "scripts": {
  • Network accessline 21
    "homepage": "https://github.com/2fastlabs/agent-squad",

typescript/src/agentOverlapAnalyzer.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/agent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/amazonBedrockAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/anthropicAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/bedrockFlowsAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/bedrockInlineAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/bedrockLLMAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/bedrockTranslatorAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/chainAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/comprehendFilterAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/groundedAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/lambdaAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/lexBotAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/openAIAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/agents/supervisorAgent.ts

  • Executable scriptline 1
    Executable file

typescript/src/classifiers/anthropicClassifier.ts

  • Executable scriptline 1
    Executable file

typescript/src/classifiers/bedrockClassifier.ts

  • Executable scriptline 1
    Executable file
  • Network accessline 139
    // ToolChoice is only supported by Anthropic Claude 3 models and by Mistral AI Mistral Large.     // https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolChoice.html
  • Network accessline 140
    // https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolChoice.html

typescript/src/classifiers/classifier.ts

  • Executable scriptline 1
    Executable file

typescript/src/classifiers/jevClassifier.ts

  • Executable scriptline 1
    Executable file
  • Access to secretsline 17
    [Credential-related source omitted]
  • Access to secretsline 52
    [Credential-related source omitted]
  • Network accessline 288
    try {         const response = await fetch(this.baseUrl, {
  • Network accessline 289
    const response = await fetch(this.baseUrl, {

typescript/src/classifiers/openAIClassifier.ts

  • Executable scriptline 1
    Executable file

typescript/src/common/src/awsSdkUtils.ts

  • Executable scriptline 1
    Executable file

typescript/src/common/src/types/awsSdk.ts

  • Executable scriptline 1
    Executable file

typescript/src/common/src/version.ts

  • Executable scriptline 1
    Executable file

typescript/src/index.ts

  • Executable scriptline 1
    Executable file

typescript/src/orchestrator.ts

  • Executable scriptline 1
    Executable file

typescript/src/retrievers/AmazonKBRetriever.ts

  • Executable scriptline 1
    Executable file

typescript/src/retrievers/DakeraRetriever.ts

  • Executable scriptline 1
    Executable file
  • Access to secretsline 13
    [Credential-related source omitted]
  • Network accessline 15
    /** Base URL of the Dakera server. Falls back to `DAKERA_URL`, then `http://localhost:3000`. */
  • Network accessline 23
    /**  * Retriever backed by a self-hosted [Dakera](https://dakera.ai) memory server.
  • Network accessline 24
    * Retriever backed by a self-hosted [Dakera](https://dakera.ai) memory server.  *  * Uses Dakera's text-query API (server-side embedding) to fetch the most relevant
  • Access to secretsline 50
    [Credential-related source omitted]
  • Access to secretsline 53
    [Credential-related source omitted]
  • Network accessline 54
    );     }     const baseUrl = this.options.url || process.env.DAKERA_URL || "http://localhost:3000";
  • Network accessline 56
    const baseUrl = this.options.url || process.env.DAKERA_URL || "http://localhost:3000";

typescript/src/retrievers/retriever.ts

  • Executable scriptline 1
    Executable file

typescript/src/storage/chatStorage.ts

  • Executable scriptline 1
    Executable file

typescript/src/storage/dynamoDbChatStorage.ts

  • Executable scriptline 1
    Executable file

typescript/src/storage/memoryChatStorage.ts

  • Executable scriptline 1
    Executable file

typescript/src/storage/sqlChatStorage.ts

  • Executable scriptline 1
    Executable file

typescript/src/storage/summarizingChatStorage.ts

  • Executable scriptline 1
    Executable file

typescript/src/tools/mcpToolProvider.ts

  • Executable scriptline 1
    Executable file
  • Network accessline 52
    * const provider = await MCPToolProvider.create([  *   { type: "stdio", command: "uvx", args: ["my-mcp-server"] },  *   { type: "streamable-http", url: "http://localhost:3000/mcp" },
  • Network accessline 53
    *   { type: "stdio", command: "uvx", args: ["my-mcp-server"] },  *   { type: "streamable-http", url: "http://localhost:3000/mcp" },  *   { type: "sse", url: "http://localhost:3000/sse" },
  • Network accessline 54
    *   { type: "streamable-http", url: "http://localhost:3000/mcp" },
  • Network accessline 55
    *   { type: "sse", url: "http://localhost:3000/sse" },
  • Network accessline 475
    /** Fetch (and cache, per client) a UI template resource. A resource is text or a base64 blob. */

typescript/src/types/index.ts

  • Executable scriptline 1
    Executable file
  • Network accessline 5
    export const OPENAI_MODEL_ID_GPT_O_MINI = "gpt-4o-mini"; export const ANTHROPIC_MODEL_ID_CLAUDE_3_5_SONNET = "claude-3-5-sonnet-20240620"; export const JEV_API_URL = "https://api.typesafe.ai/v1/systemone";
  • Network accessline 6
    export const ANTHROPIC_MODEL_ID_CLAUDE_3_5_SONNET = "claude-3-5-sonnet-20240620"; export const JEV_API_URL = "https://api.typesafe.ai/v1/systemone"; export const JEV_MODEL_ID_LATEST = "jev-latest";
  • Network accessline 7
    export const JEV_API_URL = "https://api.typesafe.ai/v1/systemone";

typescript/src/utils/chatUtils.ts

  • Executable scriptline 1
    Executable file

typescript/src/utils/helpers.ts

  • Executable scriptline 1
    Executable file

typescript/src/utils/logger.ts

  • Executable scriptline 1
    Executable file

typescript/src/utils/tool.ts

  • Executable scriptline 1
    Executable file

typescript/src/utils/ui.ts

  • Executable scriptline 1
    Executable file

typescript/tests/Orchestrator.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/agents/Agents.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/agents/LambdaAgent.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/agents/OpenAi.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/agents/groundedAgent.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/classifiers/AnthropicClassifier.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/classifiers/BedrockClassifier.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/classifiers/Classifier.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/classifiers/JevClassifier.test.ts

  • Executable scriptline 1
    Executable file
  • Access to secretsline 58
    [Credential-related source omitted]
  • Network accessline 70
    it('should default to the official TypeSafe endpoint', () => {             expect(JEV_API_URL).toBe('https://api.typesafe.ai/v1/systemone');
  • Network accessline 71
    expect(JEV_API_URL).toBe('https://api.typesafe.ai/v1/systemone');
  • Access to secretsline 82
    [Credential-related source omitted]
  • Access to secretsline 83
    [Credential-related source omitted]
  • Access to secretsline 89
    [Credential-related source omitted]
  • Access to secretsline 96
    [Credential-related source omitted]
  • Network accessline 101
    const customClassifier = new JevClassifier({                 ...defaultOptions,                 baseUrl: 'https://gateway.example.com/v1/systemone',
  • Network accessline 102
    ...defaultOptions,                 baseUrl: 'https://gateway.example.com/v1/systemone',                 instructions: 'custom instructions',
  • Network accessline 103
    baseUrl: 'https://gateway.example.com/v1/systemone',
  • Network accessline 106
    maxRetries: 0,             });             expect(customClassifier['baseUrl']).toBe('https://gateway.example.com/v1/systemone');
  • Network accessline 107
    });             expect(customClassifier['baseUrl']).toBe('https://gateway.example.com/v1/systemone');             expect(customClassifier['instructions']).toBe('custom instructions');
  • Network accessline 108
    expect(customClassifier['baseUrl']).toBe('https://gateway.example.com/v1/systemone');

typescript/tests/classifiers/OpenAIClassifier.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/mcpToolProvider.test.ts

  • Executable scriptline 1
    Executable file
  • Network accessline 380
    const multiProvider = new MCPToolProvider([       { type: "stdio", command: "uvx", args: ["weather-server"] },       { type: "sse", url: "http://localhost:3000/sse" },
  • Network accessline 381
    { type: "stdio", command: "uvx", args: ["weather-server"] },       { type: "sse", url: "http://localhost:3000/sse" },     ]);
  • Network accessline 382
    { type: "sse", url: "http://localhost:3000/sse" },
  • Network accessline 432
    [Credential-related source omitted]
  • Network accessline 433
    [Credential-related source omitted]
  • Network accessline 434
    [Credential-related source omitted]
  • Network accessline 447
    [Credential-related source omitted]
  • Network accessline 448
    [Credential-related source omitted]
  • Network accessline 449
    [Credential-related source omitted]
  • Network accessline 453
    expect(mockConnect).toHaveBeenCalled();     expect(streamableHttpInstances).toHaveLength(1);     expect(streamableHttpInstances[0].url.href).toBe("http://localhost:9000/mcp");
  • Network accessline 454
    expect(streamableHttpInstances).toHaveLength(1);     expect(streamableHttpInstances[0].url.href).toBe("http://localhost:9000/mcp");     expect(streamableHttpInstances[0].opts).toEqual({
  • Network accessline 455
    expect(streamableHttpInstances[0].url.href).toBe("http://localhost:9000/mcp");
  • Network accessline 462
    streamableHttpInstances.length = 0;     const provider = new MCPToolProvider([       { type: "streamable-http", url: "http://localhost:9000/mcp" },
  • Network accessline 463
    const provider = new MCPToolProvider([       { type: "streamable-http", url: "http://localhost:9000/mcp" },     ]);
  • Network accessline 464
    { type: "streamable-http", url: "http://localhost:9000/mcp" },

typescript/tests/mcpToolProviderV2.test.ts

  • Executable scriptline 1
    Executable file
  • Access to secretsline 130
    [Credential-related source omitted]
  • Access to secretsline 141
    [Credential-related source omitted]
  • Network accessline 147
    {         type: "streamable-http",         url: "http://localhost:9000/mcp",
  • Network accessline 148
    [Credential-related source omitted]
  • Network accessline 149
    url: "http://localhost:9000/mcp",
  • Network accessline 156
    expect(streamableInstances).toHaveLength(1);     expect(streamableInstances[0].url.href).toBe("http://localhost:9000/mcp");
  • Network accessline 157
    expect(streamableInstances[0].url.href).toBe("http://localhost:9000/mcp");
  • Network accessline 165
    {         type: "sse",         url: "http://localhost:9000/sse",
  • Network accessline 166
    [Credential-related source omitted]
  • Network accessline 167
    url: "http://localhost:9000/sse",
  • Network accessline 180
    it("passes no options to the v2 sse transport when no headers are configured", async () => {     const provider = new MCPToolProvider([       { type: "sse", url: "http://localhost:9000/sse" },
  • Network accessline 181
    const provider = new MCPToolProvider([       { type: "sse", url: "http://localhost:9000/sse" },     ]);
  • Network accessline 182
    { type: "sse", url: "http://localhost:9000/sse" },

typescript/tests/mcpToolProviderV2Partial.test.ts

  • Executable scriptline 1
    Executable file
  • Network accessline 42
    it("still connects streamable-http configs", async () => {     const provider = new MCPToolProvider([       { type: "streamable-http", url: "http://localhost:9000/mcp" },
  • Network accessline 43
    const provider = new MCPToolProvider([       { type: "streamable-http", url: "http://localhost:9000/mcp" },     ]);
  • Network accessline 44
    { type: "streamable-http", url: "http://localhost:9000/mcp" },

typescript/tests/mock/mockAgent.ts

  • Executable scriptline 1
    Executable file

typescript/tests/retrievers/DakeraRetriever.test.ts

  • Executable scriptline 1
    Executable file
  • Access to secretsline 14
    [Credential-related source omitted]
  • Access to secretsline 28
    [Credential-related source omitted]
  • Network accessline 32
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Network accessline 33
    process.env.DAKERA_URL = 'http://env-host:9999';
  • Network accessline 34
    make();     expect(MockedDakeraClient).toHaveBeenCalledWith({       baseUrl: 'http://env-host:9999',
  • Network accessline 35
    [Credential-related source omitted]
  • Network accessline 36
    baseUrl: 'http://env-host:9999',
  • Network accessline 42
    make();     expect(MockedDakeraClient).toHaveBeenCalledWith({       baseUrl: 'http://localhost:3000',
  • Network accessline 43
    [Credential-related source omitted]
  • Network accessline 44
    baseUrl: 'http://localhost:3000',

typescript/tests/retrievers/Retriever.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/storage/ChatStorage.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/storage/SummarizingChatStorage.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/utils/Utils.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/utils/helpers.test.ts

  • Executable scriptline 1
    Executable file

typescript/tests/utils/tool.test.ts

  • Executable scriptline 1
    Executable file

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 2 facts
Signal confidence: 498 facts

and 448 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md python/SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md python/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md python/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md python/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md python/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md python/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Add this badge to your README

It updates every night and links to this page.

2FastLabs/agent-squad: #188 on hotskills, 7.8k stars

[![2FastLabs/agent-squad on hotskills](https://hotskills.dev/badge/2fastlabs-agent-squad.svg)](https://hotskills.dev/skill/2fastlabs-agent-squad/)