Commit graph

6 commits

Author SHA1 Message Date
b6c66877f5 fix(ws1): harden HTTP API + declare fastapi/uvicorn deps
Security follow-ups from the per-PR review (non-blocking MEDIUMs):
- Eager _get_token() at make_app build time so a missing AGENT_TEAM_API_TOKEN
  fails fast instead of serving requests first (matches the docstring contract).
- Disable /docs, /redoc, /openapi.json (no auth dependency in FastAPI) — the
  API is VPN-only/127.0.0.1 and should not expose its schema unauthenticated.
- Scrub raw exception text and subprocess stderr from 500 response bodies;
  log server-side instead (avoid internal-path/state disclosure).
- Bound /orchestrator/invoke concurrency with a semaphore (429 over the cap)
  so an authenticated caller cannot exhaust the box via many 600s subprocesses.

Also pin fastapi/uvicorn in requirements.txt (WS1 dep). With fastapi now
installed in CI, the previously skip-guarded TestClient tests run for real;
the importorskip guard stays as a no-op safety net.

Tests: 23 pass (adds docs-disabled + concurrency-429 cases).
2026-06-23 12:27:23 -04:00
dependabot[bot]
f5a20ffe73
build(deps): bump langgraph (#24)
Bumps the minor-and-patch group with 1 update in the / directory: [langgraph](https://github.com/langchain-ai/langgraph).


Updates `langgraph` from 1.2.5 to 1.2.6
- [Release notes](https://github.com/langchain-ai/langgraph/releases)
- [Commits](https://github.com/langchain-ai/langgraph/compare/1.2.5...1.2.6)

---
updated-dependencies:
- dependency-name: langgraph
  dependency-version: 1.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-22 16:19:01 -04:00
dependabot[bot]
75d9d6c3d4
build(deps): bump the minor-and-patch group across 1 directory with 6 updates (#11)
Bumps the minor-and-patch group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [langgraph](https://github.com/langchain-ai/langgraph) | `1.1.10` | `1.2.5` |
| [langchain-anthropic](https://github.com/langchain-ai/langchain) | `1.4.3` | `1.4.6` |
| [langchain-openai](https://github.com/langchain-ai/langchain) | `1.2.1` | `1.3.2` |
| [langchain-google-genai](https://github.com/langchain-ai/langchain-google) | `4.2.2` | `4.2.5` |
| [langchain-community](https://github.com/langchain-ai/langchain-community) | `0.4.1` | `0.4.2` |
| [composio-langgraph](https://github.com/ComposioHQ/composio) | `0.13.0` | `0.15.0` |



Updates `langgraph` from 1.1.10 to 1.2.5
- [Release notes](https://github.com/langchain-ai/langgraph/releases)
- [Commits](https://github.com/langchain-ai/langgraph/compare/1.1.10...1.2.5)

Updates `langchain-anthropic` from 1.4.3 to 1.4.6
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-anthropic==1.4.3...langchain-anthropic==1.4.6)

Updates `langchain-openai` from 1.2.1 to 1.3.2
- [Release notes](https://github.com/langchain-ai/langchain/releases)
- [Commits](https://github.com/langchain-ai/langchain/compare/langchain-openai==1.2.1...langchain-openai==1.3.2)

Updates `langchain-google-genai` from 4.2.2 to 4.2.5
- [Release notes](https://github.com/langchain-ai/langchain-google/releases)
- [Commits](https://github.com/langchain-ai/langchain-google/compare/libs/genai/v4.2.2...libs/genai/v4.2.5)

Updates `langchain-community` from 0.4.1 to 0.4.2
- [Release notes](https://github.com/langchain-ai/langchain-community/releases)
- [Commits](https://github.com/langchain-ai/langchain-community/compare/libs/community/v0.4.1...libs/community/v0.4.2)

Updates `composio-langgraph` from 0.13.0 to 0.15.0
- [Release notes](https://github.com/ComposioHQ/composio/releases)
- [Commits](https://github.com/ComposioHQ/composio/compare/py@0.13.0...py@0.15.0)

---
updated-dependencies:
- dependency-name: composio-langgraph
  dependency-version: 0.13.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: langchain-anthropic
  dependency-version: 1.4.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: langchain-community
  dependency-version: 0.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: langchain-google-genai
  dependency-version: 4.2.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: langchain-openai
  dependency-version: 1.3.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: langgraph
  dependency-version: 1.2.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-18 14:44:46 -04:00
0eae5dbfc3 Prove P1 exit criteria against the real LangGraph graph; fix question_id stability
Reworks the P1 sim so the four §7.1 exit criteria are demonstrated against the
ACTUAL mechanic, not a model (resolves the verifier's "sim models the ledger,
not the LangGraph integration" finding).

- New tests/sim/test_p1_graph_integration.py drives the real agent_team.graph
  StateGraph (interrupt/Command(resume)) + the real langgraph SqliteSaver
  checkpointer + the committed pending_questions compare-and-set, proving:
  (a) suspend survives a simulated restart (drop saver/conn, rebuild over the
  same checkpoint DB) and resumes; (b) duplicate answer loses the CAS and the
  graph never double-advances; (c) a post-deadline answer loses to expire and
  the task is not resumed; (d) two concurrent tasks resume to the correct
  thread, with a turn-guarded no-double-apply check.
- graph.py: derive a STABLE question_id from uuid5(thread_id, turn). The
  clarifier node replays on resume, so the prior fresh-uuid id changed between
  the delivered/ledgered question and the qa_history entry — breaking the
  §3.3.1 identity contract. Now the delivered id == ledger key == history entry
  (unit-tested in test_graph.py).
- harness._connect() now uses the committed schema.connect() (WAL + busy_timeout)
  instead of a raw sqlite3.connect, so concurrent responders genuinely serialize;
  the criterion-(d) concurrency test no longer swallows OperationalError (it
  asserts zero errors + exactly one CAS winner).
- requirements.txt: pin langgraph-checkpoint-sqlite==3.1.0 (design D9 durable
  checkpointer), now exercised by the integration test.

Full suite: 564 passed; ruff + format clean.
2026-06-17 15:16:12 -04:00
86ad29dcc2 Pin direct dependencies to exact versions
requirements.txt used loose >= ranges; pin the 7 direct deps to the known-good installed
versions (Python 3.12.13) for a reproducible venv.
2026-06-16 15:55:01 -04:00
Adam Moussa
02e29495c0 Initial LangGraph + Composio orchestration graph
Multi-model agent routing with 7 agent nodes (Sonnet, Haiku,
GPT-4.1, Gemini, DeepSeek) and 15 pre-loaded Composio tools
for Slack, Notion, GitHub, and Google Drive integration.
2026-05-08 12:54:00 -04:00