#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
Week of Oct 26, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
729d5f52869c → 729d5f52869c
swift/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
729d5f52869c → 729d5f52869c
Week of Oct 26, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
729d5f52869c → 729d5f52869c
typescript/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
729d5f52869c → 729d5f52869c
Week of Oct 26, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
729d5f52869c → 729d5f52869c
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
Individual skills in this repository
- agent-squad-python
python - agent-squad-swift
swift - agent-squad-typescript
typescript
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 tokensAlways available to the agent
SKILL.md
4,697 tokensWhen the skill is activated
Reference documents
3,548 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use what
- How to install
- How a turn works
- The pieces
- Custom implementations
- Gotchas
- Go deeper
Scripts executed separately
Makefilesetup.pysrc/agent_squad/__init__.pysrc/agent_squad/agent_overlap_analyzer.pysrc/agent_squad/agents/__init__.pysrc/agent_squad/agents/agent.pysrc/agent_squad/agents/amazon_bedrock_agent.pysrc/agent_squad/agents/anthropic_agent.pysrc/agent_squad/agents/bedrock_flows_agent.pysrc/agent_squad/agents/bedrock_inline_agent.pysrc/agent_squad/agents/bedrock_llm_agent.pysrc/agent_squad/agents/bedrock_translator_agent.pysrc/agent_squad/agents/chain_agent.pysrc/agent_squad/agents/comprehend_filter_agent.pysrc/agent_squad/agents/grounded_agent.pysrc/agent_squad/agents/lambda_agent.pysrc/agent_squad/agents/lex_bot_agent.pysrc/agent_squad/agents/openai_agent.pysrc/agent_squad/agents/strands_agent.pysrc/agent_squad/agents/supervisor_agent.pysrc/agent_squad/classifier_test_tool.pysrc/agent_squad/classifiers/__init__.pysrc/agent_squad/classifiers/anthropic_classifier.pysrc/agent_squad/classifiers/bedrock_classifier.pysrc/agent_squad/classifiers/classifier.pysrc/agent_squad/classifiers/jev_classifier.pysrc/agent_squad/classifiers/openai_classifier.pysrc/agent_squad/orchestrator.pysrc/agent_squad/retrievers/__init__.pysrc/agent_squad/retrievers/amazon_kb_retriever.pysrc/agent_squad/retrievers/dakera_retriever.pysrc/agent_squad/retrievers/retriever.pysrc/agent_squad/shared/__init__.pysrc/agent_squad/shared/user_agent.pysrc/agent_squad/shared/version.pysrc/agent_squad/storage/__init__.pysrc/agent_squad/storage/chat_storage.pysrc/agent_squad/storage/dynamodb_chat_storage.pysrc/agent_squad/storage/in_memory_chat_storage.pysrc/agent_squad/storage/sql_chat_storage.pysrc/agent_squad/storage/summarizing_chat_storage.pysrc/agent_squad/tools/__init__.pysrc/agent_squad/tools/mcp_tool_provider.pysrc/agent_squad/types/__init__.pysrc/agent_squad/types/types.pysrc/agent_squad/utils/__init__.pysrc/agent_squad/utils/helpers.pysrc/agent_squad/utils/logger.pysrc/agent_squad/utils/tool.pysrc/agent_squad/utils/ui.pysrc/tests/__init__.pysrc/tests/agents/__init__.pysrc/tests/agents/test_agent.pysrc/tests/agents/test_amazon_bedrock_agent.pysrc/tests/agents/test_anthropic_agent.pysrc/tests/agents/test_bedrock_flows_agent.pysrc/tests/agents/test_bedrock_inline_agent.pysrc/tests/agents/test_bedrock_llm_agent.pysrc/tests/agents/test_chain_agent.pysrc/tests/agents/test_comprehend_agent.pysrc/tests/agents/test_grounded_agent.pysrc/tests/agents/test_lambda_agent.pysrc/tests/agents/test_lex_bot_agent.pysrc/tests/agents/test_openai_agent.pysrc/tests/agents/test_openai_usage_stream.pysrc/tests/agents/test_strands_agent.pysrc/tests/agents/test_supervisor_agent.pysrc/tests/classifier_test_tool/test_classifier_test_tool.pysrc/tests/classifiers/__init__.pysrc/tests/classifiers/test_anthropic_classifier.pysrc/tests/classifiers/test_bedrock_classifier.pysrc/tests/classifiers/test_classifier.pysrc/tests/classifiers/test_jev_classifier.pysrc/tests/retrievers/test_dakera_retriever.pysrc/tests/retrievers/test_retriever.pysrc/tests/storage/__init__.pysrc/tests/storage/test_chat_storage.pysrc/tests/storage/test_dynamodb_chat_storage.pysrc/tests/storage/test_in_memory_chat_storage.pysrc/tests/storage/test_sql_chat_storage.pysrc/tests/storage/test_summarizing_chat_storage.pysrc/tests/test_agent_overlap_analyzer.pysrc/tests/test_orchestrator.pysrc/tests/tools/__init__.pysrc/tests/tools/test_mcp_tool_provider.pysrc/tests/utils/test_helpers.pysrc/tests/utils/test_logger.pysrc/tests/utils/test_tool.py
Files
.gitignoreasset3,258 bytesCONTRIBUTING.mddoc2,363 bytesMakefileruns237 bytesREADME.mddoc12,791 bytesSKILL.mdcore18,999 bytesSKILL.mdcore18,999 bytesSKILL.mdcore18,999 bytesSKILL.mdcore18,999 bytesSKILL.mdcore18,999 bytesSKILL.mdcore18,999 bytesSKILL.mdcore18,999 bytesSKILL.mdcore18,999 bytesSKILL.mdcore18,999 bytesSKILL.mdcore18,999 bytespyproject.tomlasset92 bytesruff.tomlasset3,428 bytessetup.cfgasset1,022 bytessetup.pyruns37 bytessrc/agent_squad/__init__.pyruns224 bytessrc/agent_squad/agent_overlap_analyzer.pyruns5,734 bytessrc/agent_squad/agents/__init__.pyruns2,931 bytessrc/agent_squad/agents/agent.pyruns10,960 bytessrc/agent_squad/agents/amazon_bedrock_agent.pyruns7,431 bytessrc/agent_squad/agents/anthropic_agent.pyruns20,372 bytessrc/agent_squad/agents/bedrock_flows_agent.pyruns4,440 bytessrc/agent_squad/agents/bedrock_inline_agent.pyruns14,832 bytessrc/agent_squad/agents/bedrock_llm_agent.pyruns24,992 bytessrc/agent_squad/agents/bedrock_translator_agent.pyruns5,775 bytessrc/agent_squad/agents/chain_agent.pyruns3,804 bytessrc/agent_squad/agents/comprehend_filter_agent.pyruns6,638 bytessrc/agent_squad/agents/grounded_agent.pyruns14,613 bytessrc/agent_squad/agents/lambda_agent.pyruns3,717 bytessrc/agent_squad/agents/lex_bot_agent.pyruns2,569 bytessrc/agent_squad/agents/openai_agent.pyruns8,418 bytessrc/agent_squad/agents/strands_agent.pyruns17,634 bytessrc/agent_squad/agents/supervisor_agent.pyruns14,118 bytessrc/agent_squad/classifier_test_tool.pyruns10,575 bytessrc/agent_squad/classifiers/__init__.pyruns1,205 bytessrc/agent_squad/classifiers/anthropic_classifier.pyruns5,123 bytessrc/agent_squad/classifiers/bedrock_classifier.pyruns6,587 bytessrc/agent_squad/classifiers/classifier.pyruns8,357 bytessrc/agent_squad/classifiers/jev_classifier.pyruns12,370 bytessrc/agent_squad/classifiers/openai_classifier.pyruns4,208 bytessrc/agent_squad/orchestrator.pyruns16,802 bytessrc/agent_squad/retrievers/__init__.pyruns369 bytessrc/agent_squad/retrievers/amazon_kb_retriever.pyruns2,123 bytessrc/agent_squad/retrievers/dakera_retriever.pyruns3,758 bytessrc/agent_squad/retrievers/retriever.pyruns1,905 bytessrc/agent_squad/shared/__init__.pyruns0 bytessrc/agent_squad/shared/user_agent.pyruns6,985 bytessrc/agent_squad/shared/version.pyruns50 bytessrc/agent_squad/storage/__init__.pyruns759 bytessrc/agent_squad/storage/chat_storage.pyruns4,644 bytessrc/agent_squad/storage/dynamodb_chat_storage.pyruns8,252 bytessrc/agent_squad/storage/in_memory_chat_storage.pyruns4,633 bytessrc/agent_squad/storage/sql_chat_storage.pyruns11,753 bytessrc/agent_squad/storage/summarizing_chat_storage.pyruns6,726 bytessrc/agent_squad/tools/__init__.pyruns211 bytessrc/agent_squad/tools/mcp_tool_provider.pyruns24,349 bytessrc/agent_squad/types/__init__.pyruns928 bytessrc/agent_squad/types/types.pyruns2,797 bytessrc/agent_squad/utils/__init__.pyruns468 bytessrc/agent_squad/utils/helpers.pyruns1,157 bytessrc/agent_squad/utils/logger.pyruns3,980 bytessrc/agent_squad/utils/tool.pyruns11,385 bytessrc/agent_squad/utils/ui.pyruns1,906 bytessrc/tests/__init__.pyruns0 bytessrc/tests/agents/__init__.pyruns0 bytessrc/tests/agents/test_agent.pyruns7,518 bytessrc/tests/agents/test_amazon_bedrock_agent.pyruns6,755 bytessrc/tests/agents/test_anthropic_agent.pyruns32,648 bytessrc/tests/agents/test_bedrock_flows_agent.pyruns11,083 bytessrc/tests/agents/test_bedrock_inline_agent.pyruns8,282 bytessrc/tests/agents/test_bedrock_llm_agent.pyruns32,632 bytessrc/tests/agents/test_chain_agent.pyruns3,437 bytessrc/tests/agents/test_comprehend_agent.pyruns7,695 bytessrc/tests/agents/test_grounded_agent.pyruns16,771 bytessrc/tests/agents/test_lambda_agent.pyruns6,036 bytessrc/tests/agents/test_lex_bot_agent.pyruns3,169 bytessrc/tests/agents/test_openai_agent.pyruns5,641 bytessrc/tests/agents/test_openai_usage_stream.pyruns2,674 bytessrc/tests/agents/test_strands_agent.pyruns29,714 bytessrc/tests/agents/test_supervisor_agent.pyruns19,003 bytessrc/tests/classifier_test_tool/sample_config.jsonasset1,058 bytessrc/tests/classifier_test_tool/test_classifier_test_tool.pyruns6,842 bytessrc/tests/classifiers/__init__.pyruns0 bytessrc/tests/classifiers/test_anthropic_classifier.pyruns17,535 bytessrc/tests/classifiers/test_bedrock_classifier.pyruns3,589 bytessrc/tests/classifiers/test_classifier.pyruns5,308 bytessrc/tests/classifiers/test_jev_classifier.pyruns16,910 bytessrc/tests/pytest.iniasset44 bytessrc/tests/retrievers/test_dakera_retriever.pyruns3,742 bytessrc/tests/retrievers/test_retriever.pyruns1,665 bytessrc/tests/storage/__init__.pyruns0 bytessrc/tests/storage/test_chat_storage.pyruns4,748 bytessrc/tests/storage/test_dynamodb_chat_storage.pyruns7,907 bytessrc/tests/storage/test_in_memory_chat_storage.pyruns5,756 bytessrc/tests/storage/test_sql_chat_storage.pyruns12,228 bytessrc/tests/storage/test_summarizing_chat_storage.pyruns8,463 bytessrc/tests/test_agent_overlap_analyzer.pyruns4,977 bytessrc/tests/test_orchestrator.pyruns10,914 bytessrc/tests/tools/__init__.pyruns0 bytessrc/tests/tools/test_mcp_tool_provider.pyruns38,366 bytessrc/tests/utils/test_helpers.pyruns2,308 bytessrc/tests/utils/test_logger.pyruns5,329 bytessrc/tests/utils/test_tool.pyruns22,163 bytestest_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 gathererView the complete source on GitHubagent-squad-swift
When your agent uses it
Use when building or modifying a Swift app that uses the AgentSquad Swift framework — on-device multi-agent orchestration for iOS 16+ / macOS 14+: orchestrator, agents (Agent, GroundedAgent), classifier routing, LLM clients (OpenAI-compatible), tools (native + MCP), tool UIs/widgets, on-device storage, tracing, and realtime voice — built-in types and custom implementations.
What it loads into context
Frontmatter
102 tokensAlways available to the agent
SKILL.md
3,648 tokensWhen the skill is activated
Reference documents
4,348 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use what
- Modules (import only what you use)
- How a turn works
- The pieces
- Custom implementations
- Gotchas
- Go deeper
Files
.gitignoreasset206 bytesREADME.mddoc17,748 bytesSKILL.mdcore13,969 bytesSources/AgentSquad/Agents/Agent.swiftasset9,532 bytesSources/AgentSquad/Agents/GroundedAgent.swiftasset6,741 bytesSources/AgentSquad/Core/AgentProtocol.swiftasset2,719 bytesSources/AgentSquad/Core/Classifier/Classifier.swiftasset1,481 bytesSources/AgentSquad/Core/Classifier/LLMClassifier.swiftasset6,741 bytesSources/AgentSquad/Core/JSONValue.swiftasset5,190 bytesSources/AgentSquad/Core/LLM/ChatCompletionsClient.swiftasset7,784 bytesSources/AgentSquad/Core/LLM/ChatCompletionsTransport.swiftasset1,833 bytesSources/AgentSquad/Core/LLM/ChatCompletionsWire.swiftasset6,556 bytesSources/AgentSquad/Core/LLMClient.swiftasset1,870 bytesSources/AgentSquad/Core/Message.swiftasset1,731 bytesSources/AgentSquad/Core/Presenter/Grounding.swiftasset1,546 bytesSources/AgentSquad/Core/Presenter/PresenterPrompt.swiftasset1,674 bytesSources/AgentSquad/Core/Presenter/ToolOutputCurator.swiftasset3,742 bytesSources/AgentSquad/Core/Slugify.swiftasset390 bytesSources/AgentSquad/Core/Storage/ChatStorage.swiftasset3,279 bytesSources/AgentSquad/Core/Tooling/AgentTool.swiftasset1,630 bytesSources/AgentSquad/Core/Tooling/AggregateToolProvider.swiftasset2,890 bytesSources/AgentSquad/Core/Tooling/CapturingToolProvider.swiftasset777 bytesSources/AgentSquad/Core/Tooling/HTTPToolGroup.swiftasset8,396 bytesSources/AgentSquad/Core/Tooling/HTTPToolSpec.swiftasset14,674 bytesSources/AgentSquad/Core/Tooling/Tool.swiftasset1,415 bytesSources/AgentSquad/Core/Tooling/ToolKit.swiftasset1,393 bytesSources/AgentSquad/Core/Tooling/ToolParameter.swiftasset3,201 bytesSources/AgentSquad/Core/Tooling/ToolProvider.swiftasset2,093 bytesSources/AgentSquad/Core/Tracing/BatchSpanProcessor.swiftasset7,704 bytesSources/AgentSquad/Core/Tracing/OSLogTracer.swiftasset2,791 bytesSources/AgentSquad/Core/Tracing/OTLP/OTLPExporter.swiftasset2,865 bytesSources/AgentSquad/Core/Tracing/OTLP/OTLPModel.swiftasset8,622 bytesSources/AgentSquad/Core/Tracing/ProcessingTracer.swiftasset3,894 bytesSources/AgentSquad/Core/Tracing/Redaction.swiftasset2,775 bytesSources/AgentSquad/Core/Tracing/TraceEvent.swiftasset2,899 bytesSources/AgentSquad/Core/Tracing/Tracing.swiftasset6,854 bytesSources/AgentSquad/Core/UIPayload.swiftasset2,688 bytesSources/AgentSquad/Core/Version.swiftasset228 bytesSources/AgentSquad/Orchestrator.swiftasset6,005 bytesSources/AgentSquad/Retrieval/DakeraRetriever.swiftasset11,109 bytesSources/AgentSquad/Runtimes/Realtime/AudioIO.swiftasset1,552 bytesSources/AgentSquad/Runtimes/Realtime/AudioTruncation.swiftasset2,286 bytesSources/AgentSquad/Runtimes/Realtime/OpenAIGroundedVoiceAssistant.swiftasset20,716 bytesSources/AgentSquad/Runtimes/Realtime/OpenAIRealtimeSession.swiftasset11,601 bytesSources/AgentSquad/Runtimes/Realtime/OpenAIVoiceAssistant.swiftasset18,131 bytesSources/AgentSquad/Runtimes/Realtime/RealtimeRuntime.swiftasset5,005 bytesSources/AgentSquad/Runtimes/Realtime/RealtimeSessionError.swiftasset1,518 bytesSources/AgentSquad/Runtimes/Realtime/RealtimeTransport.swiftasset1,392 bytesSources/AgentSquad/Runtimes/Realtime/RealtimeWire.swiftasset21,256 bytesSources/AgentSquad/Runtimes/Realtime/URLSessionWebSocketTransport.swiftasset3,687 bytesSources/AgentSquad/Runtimes/Realtime/VoiceAssistant.swiftasset6,393 bytesSources/AgentSquad/Storage/DeviceChatStorage.swiftasset9,561 bytesSources/AgentSquad/Storage/FileChatStorage.swiftasset5,554 bytesSources/AgentSquad/Storage/InMemoryChatStorage.swiftasset2,597 bytesSources/AgentSquad/Storage/SummarizingChatStorage.swiftasset6,178 bytesSources/AgentSquad/Storage/TransformingChatStorage.swiftasset3,616 bytesSources/AgentSquadAudio/AudioConfiguration.swiftasset2,020 bytesSources/AgentSquadAudio/AudioPlayback.swiftasset4,617 bytesSources/AgentSquadAudio/MicCapture.swiftasset6,249 bytesSources/AgentSquadAudio/PCM16.swiftasset2,499 bytesSources/AgentSquadAudio/PlaybackClock.swiftasset2,753 bytesSources/AgentSquadAudio/VoiceAudioSession.swiftasset838 bytesSources/AgentSquadAudio/VoiceProcessedAudioIO.swiftasset8,200 bytesSources/AgentSquadMCP/Bridging.swiftasset4,039 bytesSources/AgentSquadMCP/MCPClient.swiftasset2,958 bytesSources/AgentSquadMCP/MCPToolProvider+SDK.swiftasset2,698 bytesSources/AgentSquadMCP/MCPToolProvider.swiftasset8,052 bytesSources/AgentSquadMCP/SDKMCPClient.swiftasset6,060 bytesTests/AgentSquadAudioTests/AudioIOSmokeTests.swiftasset7,197 bytesTests/AgentSquadMCPTests/BridgingTests.swiftasset2,914 bytesTests/AgentSquadMCPTests/MCPToolProviderTests.swiftasset18,687 bytesTests/AgentSquadTests/AgentContractsTests.swiftasset2,223 bytesTests/AgentSquadTests/AgentTests.swiftasset8,975 bytesTests/AgentSquadTests/AggregateToolProviderTests.swiftasset4,078 bytesTests/AgentSquadTests/ChatCompletionsClientTests.swiftasset14,143 bytesTests/AgentSquadTests/ChatStorageTests.swiftasset2,794 bytesTests/AgentSquadTests/ClassifierTests.swiftasset2,081 bytesTests/AgentSquadTests/DakeraRetrieverTests.swiftasset7,714 bytesTests/AgentSquadTests/DeviceChatStorageTests.swiftasset5,742 bytesTests/AgentSquadTests/FileChatStorageTests.swiftasset8,523 bytesTests/AgentSquadTests/GroundedAgentTests.swiftasset15,703 bytesTests/AgentSquadTests/GroundedComponentContractsTests.swiftasset6,534 bytesTests/AgentSquadTests/HTTPToolTests.swiftasset7,821 bytesTests/AgentSquadTests/InMemoryChatStorageTests.swiftasset5,272 bytesTests/AgentSquadTests/JSONValueTests.swiftasset3,539 bytesTests/AgentSquadTests/LLMClassifierTests.swiftasset10,440 bytesTests/AgentSquadTests/MessageTests.swiftasset2,486 bytesTests/AgentSquadTests/MockLLMClient.swiftasset1,226 bytesTests/AgentSquadTests/OSLogTracerTests.swiftasset1,159 bytesTests/AgentSquadTests/OTLPExporterTests.swiftasset15,936 bytesTests/AgentSquadTests/OpenAIGroundedVoiceAssistantTests.swiftasset35,652 bytesTests/AgentSquadTests/OpenAIVoiceAssistantTests.swiftasset36,777 bytesTests/AgentSquadTests/OrchestratorTests.swiftasset11,954 bytesTests/AgentSquadTests/ProcessingTracerTests.swiftasset21,345 bytesTests/AgentSquadTests/RealtimeRuntimeTests.swiftasset9,811 bytesTests/AgentSquadTests/RealtimeTestSupport.swiftasset13,955 bytesTests/AgentSquadTests/RealtimeWireTests.swiftasset17,942 bytesTests/AgentSquadTests/SummarizingChatStorageTests.swiftasset12,450 bytesTests/AgentSquadTests/TestSupport.swiftasset3,254 bytesTests/AgentSquadTests/ToolBuilderTests.swiftasset4,908 bytesTests/AgentSquadTests/ToolKitTests.swiftasset2,021 bytesTests/AgentSquadTests/ToolingTests.swiftasset2,546 bytesTests/AgentSquadTests/TracingTests.swiftasset2,932 bytesTests/AgentSquadTests/TransformingChatStorageTests.swiftasset7,407 bytesTests/AgentSquadTests/URLSessionWebSocketTransportTests.swiftasset936 bytesTests/AgentSquadTests/VoiceAssistantContractTests.swiftasset2,632 bytes
Read SKILL.md
# AgentSquad Swift — assistant guide
Protocol-driven, on-device multi-agent framework (Swift 6.2, iOS 16+ / macOS 14+; persistence via
`FileChatStorage` on iOS 16+, `DeviceChatStorage` on iOS 17+). This is guidance and
a map — **not an API reference**. Read the exact signatures from the source (`swift/Sources/AgentSquad/`)
and the worked recipes from the docs site sources (`docs/src/content/docs/swift/`); this file tells
you *what to use, when, and what to watch out for*.
## When to use what
- **One assistant** → an `Agent` (or `GroundedAgent`) + an `Orchestrator` with no classifier. No routing hop.
- **Several specialists** → multiple agents + an `LLMClassifier`; the orchestrator routes each turn.
- **Answers must not drift from data** (prices, stock, balances) → `GroundedAgent`: a Brain calls
tools, an isolated Presenter speaks only from the curated results (it can be a smaller/local model).View the complete source on GitHubagent-squad-typescript
When your agent uses it
Use when building or modifying a Node.js / TypeScript app that uses the agent-squad npm package — multi-agent orchestration: orchestrator, agents (all built-in types + GroundedAgent), classifier routing (Bedrock / Anthropic / OpenAI), storage (in-memory / DynamoDB / SQL), retrievers (Amazon KB / Dakera), and tools (AgentTools + MCPToolProvider).
What it loads into context
Frontmatter
99 tokensAlways available to the agent
SKILL.md
4,310 tokensWhen the skill is activated
Reference documents
2,307 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use what
- How to install
- How a turn works
- The pieces
- Custom implementations
- Gotchas
- Go deeper
Scripts executed separately
eslint.config.mjsjest.config.jspackage.jsonsrc/agentOverlapAnalyzer.tssrc/agents/agent.tssrc/agents/amazonBedrockAgent.tssrc/agents/anthropicAgent.tssrc/agents/bedrockFlowsAgent.tssrc/agents/bedrockInlineAgent.tssrc/agents/bedrockLLMAgent.tssrc/agents/bedrockTranslatorAgent.tssrc/agents/chainAgent.tssrc/agents/comprehendFilterAgent.tssrc/agents/groundedAgent.tssrc/agents/lambdaAgent.tssrc/agents/lexBotAgent.tssrc/agents/openAIAgent.tssrc/agents/supervisorAgent.tssrc/classifiers/anthropicClassifier.tssrc/classifiers/bedrockClassifier.tssrc/classifiers/classifier.tssrc/classifiers/jevClassifier.tssrc/classifiers/openAIClassifier.tssrc/common/src/awsSdkUtils.tssrc/common/src/types/awsSdk.tssrc/common/src/version.tssrc/index.tssrc/orchestrator.tssrc/retrievers/AmazonKBRetriever.tssrc/retrievers/DakeraRetriever.tssrc/retrievers/retriever.tssrc/storage/chatStorage.tssrc/storage/dynamoDbChatStorage.tssrc/storage/memoryChatStorage.tssrc/storage/sqlChatStorage.tssrc/storage/summarizingChatStorage.tssrc/tools/mcpToolProvider.tssrc/types/index.tssrc/utils/chatUtils.tssrc/utils/helpers.tssrc/utils/logger.tssrc/utils/tool.tssrc/utils/ui.tstests/Orchestrator.test.tstests/agents/Agents.test.tstests/agents/LambdaAgent.test.tstests/agents/OpenAi.test.tstests/agents/groundedAgent.test.tstests/classifiers/AnthropicClassifier.test.tstests/classifiers/BedrockClassifier.test.tstests/classifiers/Classifier.test.tstests/classifiers/JevClassifier.test.tstests/classifiers/OpenAIClassifier.test.tstests/mcpToolProvider.test.tstests/mcpToolProviderV2.test.tstests/mcpToolProviderV2Partial.test.tstests/mock/mockAgent.tstests/retrievers/DakeraRetriever.test.tstests/retrievers/Retriever.test.tstests/storage/ChatStorage.test.tstests/storage/SummarizingChatStorage.test.tstests/utils/Utils.test.tstests/utils/helpers.test.tstests/utils/tool.test.ts
Files
.npmignoreasset659 bytesREADME.mddoc10,168 bytesSKILL.mdcore17,088 bytesSKILL.mdcore17,088 byteseslint.config.mjsruns949 bytesjest.config.jsruns200 bytespackage-lock.jsonasset281,673 bytespackage.jsonruns2,362 bytessrc/agentOverlapAnalyzer.tsruns5,044 bytessrc/agents/agent.tsruns9,752 bytessrc/agents/amazonBedrockAgent.tsruns5,540 bytessrc/agents/anthropicAgent.tsruns17,894 bytessrc/agents/bedrockFlowsAgent.tsruns4,487 bytessrc/agents/bedrockInlineAgent.tsruns14,445 bytessrc/agents/bedrockLLMAgent.tsruns18,602 bytessrc/agents/bedrockTranslatorAgent.tsruns5,474 bytessrc/agents/chainAgent.tsruns4,090 bytessrc/agents/comprehendFilterAgent.tsruns9,832 bytessrc/agents/groundedAgent.tsruns12,332 bytessrc/agents/lambdaAgent.tsruns2,719 bytessrc/agents/lexBotAgent.tsruns3,500 bytessrc/agents/openAIAgent.tsruns7,279 bytessrc/agents/supervisorAgent.tsruns10,988 bytessrc/classifiers/anthropicClassifier.tsruns4,506 bytessrc/classifiers/bedrockClassifier.tsruns6,793 bytessrc/classifiers/classifier.tsruns11,317 bytessrc/classifiers/jevClassifier.tsruns12,245 bytessrc/classifiers/openAIClassifier.tsruns4,694 bytessrc/common/src/awsSdkUtils.tsruns3,800 bytessrc/common/src/types/awsSdk.tsruns553 bytessrc/common/src/version.tsruns84 bytessrc/index.tsruns3,183 bytessrc/orchestrator.tsruns19,070 bytessrc/retrievers/AmazonKBRetriever.tsruns4,981 bytessrc/retrievers/DakeraRetriever.tsruns4,594 bytessrc/retrievers/retriever.tsruns1,815 bytessrc/storage/chatStorage.tsruns1,226 bytessrc/storage/dynamoDbChatStorage.tsruns4,981 bytessrc/storage/memoryChatStorage.tsruns2,860 bytessrc/storage/sqlChatStorage.tsruns6,190 bytessrc/storage/summarizingChatStorage.tsruns4,288 bytessrc/tools/mcpToolProvider.tsruns19,786 bytessrc/types/index.tsruns1,879 bytessrc/utils/chatUtils.tsruns816 bytessrc/utils/helpers.tsruns2,085 bytessrc/utils/logger.tsruns3,516 bytessrc/utils/tool.tsruns7,769 bytessrc/utils/ui.tsruns1,471 bytestests/Orchestrator.test.tsruns9,412 bytestests/agents/Agents.test.tsruns3,538 bytestests/agents/LambdaAgent.test.tsruns6,955 bytestests/agents/OpenAi.test.tsruns4,140 bytestests/agents/groundedAgent.test.tsruns16,420 bytestests/classifiers/AnthropicClassifier.test.tsruns4,835 bytestests/classifiers/BedrockClassifier.test.tsruns3,985 bytestests/classifiers/Classifier.test.tsruns7,978 bytestests/classifiers/JevClassifier.test.tsruns16,327 bytestests/classifiers/OpenAIClassifier.test.tsruns6,429 bytestests/mcpToolProvider.test.tsruns26,351 bytestests/mcpToolProviderV2.test.tsruns6,489 bytestests/mcpToolProviderV2Partial.test.tsruns1,538 bytestests/mock/mockAgent.tsruns1,409 bytestests/retrievers/DakeraRetriever.test.tsruns2,808 bytestests/retrievers/Retriever.test.tsruns3,242 bytestests/storage/ChatStorage.test.tsruns16,698 bytestests/storage/SummarizingChatStorage.test.tsruns7,422 bytestests/utils/Utils.test.tsruns4,957 bytestests/utils/helpers.test.tsruns2,133 bytestests/utils/tool.test.tsruns2,000 bytestsconfig.jsonasset721 bytes
Read SKILL.md
# agent-squad TypeScript — assistant guide
Node.js / TypeScript multi-agent orchestration framework (npm package `agent-squad`). All public
symbols are exported from a single barrel `typescript/src/index.ts`. This file is guidance and a
map — **not an API reference**. Read exact signatures from
`typescript/src/` and worked recipes from `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 + `AgentSquad` with no routing. Or skip the
orchestrator entirely and call `agent.processRequest(...)` directly.
- **Several specialists** → multiple agents registered with `orchestrator.addAgent(agent)`, a
classifier routes each turn.View the complete source on GitHubSkills 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
- #181 from Oct 28 to Oct 29
- #182 on Oct 30
- #183 on Oct 31
- #184 from Nov 1 to Nov 2
- #185 from Nov 3 to Nov 5
- #188 since Nov 6
44 earlier periods
- #139 on Aug 2
- #142 on Aug 6
- #141 on Aug 8
- #145 from Aug 10 to Aug 11
- #146 on Aug 13
- #148 on Aug 14
- #147 on Aug 16
- #148 on Aug 18
- #149 on Aug 19
- #149 on Aug 21
- #151 from Aug 23 to Aug 25
- #152 on Aug 27
- #152 on Aug 29
- #153 on Sep 1
- #153 on Sep 3
- #151 on Sep 4
- #153 on Sep 5
- #156 on Sep 8
- #157 from Sep 9 to Sep 10
- #158 on Sep 12
- #159 on Sep 13
- #160 from Sep 15 to Sep 16
- #161 from Sep 20 to Sep 21
- #160 on Sep 22
- #161 on Sep 23
- #160 on Sep 25
- #162 from Sep 26 to Sep 27
- #163 from Sep 28 to Sep 29
- #161 on Sep 30
- #164 on Oct 2
- #162 on Oct 3
- #161 on Oct 4
- #162 on Oct 5
- #163 on Oct 6
- #165 on Oct 7
- #165 on Oct 9
- #167 on Oct 12
- #169 on Oct 13
- #169 on Oct 16
- #171 on Oct 17
- #173 from Oct 18 to Oct 19
- #175 on Oct 21
- #175 on Oct 24
- #177 on Oct 25
Before you install
Network or broad shellAutomated 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:1Analysis incomplete: Referenced executable target unavailable; not analyzedpython/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedpython/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedpython/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedpython/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedpython/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedpython/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedpython/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedpython/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedtypescript/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedtypescript/package-lock.json:10132Analysis incomplete: regex work limit reached
- No broad tool permissions
- 5 dangerous shell commandsin 2 files: python/CONTRIBUTING.md:15 python/README.md:274
- 872 network referencesin 57 files: typescript/package-lock.json:1682 python/ruff.toml:1 python/src/tests/classifiers/test_jev_classifier.py:48 and 54 more
- 1 obfuscation signalin 1 file: python/src/agent_squad/tools/mcp_tool_provider.py:506
- No instruction overrides
- 152 executable scriptsin 152 files: python/Makefile:1 python/setup.py:1 python/src/agent_squad/__init__.py:1 and 149 more
- 140 references to secretsin 34 files: python/src/tests/agents/test_anthropic_agent.py:35 python/src/tests/classifiers/test_anthropic_classifier.py:30 python/src/tests/classifiers/test_jev_classifier.py:83 and 31 more
- No requests to vote in Hot
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
 - 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
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
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
python/src/agent_squad/agents/bedrock_inline_agent.py
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
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
python/src/agent_squad/agents/openai_agent.py
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
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
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
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
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
python/src/tests/agents/test_openai_usage_stream.py
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
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
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
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
 - 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
 - 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
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
- Contacts api.typesafe.ai, which SKILL.md, the README and the plugin manifest do not mentionpython/src/agent_squad/classifiers/jev_classifier.py:13High confidence
- Contacts api.typesafe.ai, which SKILL.md, the README and the plugin manifest do not mentiontypescript/src/types/index.ts:7High confidence
Signal confidence: 498 facts
- Network access in prose of documentationpython/CONTRIBUTING.md:8Low confidence
- Network access in prose of documentationpython/CONTRIBUTING.md:9Low confidence
- Network access in prose of documentationpython/CONTRIBUTING.md:10Low confidence
- Network access in prose of documentationpython/CONTRIBUTING.md:11Low confidence
- Dangerous shell operation in code of documentationpython/CONTRIBUTING.md:15Low confidence
- Dangerous shell operation in code of documentationpython/CONTRIBUTING.md:16Low confidence
- Dangerous shell operation in code of documentationpython/CONTRIBUTING.md:17Low confidence
- Network access in code of documentationpython/CONTRIBUTING.md:24Low confidence
- Dangerous shell operation in code of documentationpython/CONTRIBUTING.md:108Low confidence
- Executable script in a comment of a file that runspython/Makefile:1Low confidence
- Network access in prose of documentationpython/README.md:6Low confidence
- Network access in prose of documentationpython/README.md:7Low confidence
- Network access in prose of documentationpython/README.md:8Low confidence
- Network access in prose of documentationpython/README.md:9Low confidence
- Network access in prose of documentationpython/README.md:12Low confidence
- Network access in prose of documentationpython/README.md:13Low confidence
- Network access in prose of documentationpython/README.md:14Low confidence
- Network access in prose of documentationpython/README.md:15Low confidence
- Network access in prose of documentationpython/README.md:16Low confidence
- Network access in prose of documentationpython/README.md:19Low confidence
- Network access in prose of documentationpython/README.md:20Low confidence
- Network access in prose of documentationpython/README.md:21Low confidence
- Network access in prose of documentationpython/README.md:22Low confidence
- Network access in prose of documentationpython/README.md:23Low confidence
- Network access in prose of documentationpython/README.md:26Low confidence
- Network access in prose of documentationpython/README.md:27Low confidence
- Network access in prose of documentationpython/README.md:28Low confidence
- Network access in prose of documentationpython/README.md:29Low confidence
- Network access in prose of documentationpython/README.md:45Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuepython/README.md:51Low confidence
- Network access in prose of documentationpython/README.md:54Low confidence
- Network access in prose of documentationpython/README.md:69Low confidence
- Network access in prose of documentationpython/README.md:82Low confidence
- Network access in prose of documentationpython/README.md:99Low confidence
- Network access in prose of documentationpython/README.md:100Low confidence
- Network access in prose of documentationpython/README.md:101Low confidence
- Network access in prose of documentationpython/README.md:108Low confidence
- Dangerous shell operation in prose of documentationpython/README.md:274Low confidence
- Network access in prose of documentationpython/README.md:290Low confidence
- Network access in prose of documentationpython/README.md:294Low confidence
- Network access in prose of documentationpython/README.md:296Low confidence
- Network access in prose of documentationpython/README.md:298Low confidence
- Access to secrets in prose of the SKILL.mdpython/SKILL.md:239Low confidence
- Network access in code of the SKILL.mdpython/SKILL.md:270High confidence
- Network access in code of the SKILL.mdpython/SKILL.md:271High confidence
- Network access in code of the SKILL.mdpython/SKILL.md:272High confidence
- Executable script in code of a file that runspython/setup.py:1High confidence
- Executable script in code of a file that runspython/src/agent_squad/__init__.py:1High confidence
- Executable script in code of a file that runspython/src/agent_squad/agent_overlap_analyzer.py:1High confidence
- Executable script in prose of a file that runspython/src/agent_squad/agents/__init__.py:1Low confidence
and 448 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md python/SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md python/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md python/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md python/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md python/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard 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.
[](https://hotskills.dev/skill/2fastlabs-agent-squad/)