feat: merge claude modifications and fixes#1
Open
pranaysb wants to merge 23 commits into
Open
Conversation
These were committed before .gitignore covered them, so git kept tracking them. apiforge.db had grown to 20MB of local job history. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Includes schema validator node, test linter, SSE checkpoint audit logging, reliability parsing-error fallback, and frontend timeline tweaks that were in the working tree before the audit fixes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Large vendor specs (github 12MB, stripe 7.5MB, discord 1.1MB) are gitignored with fetch instructions in benchmarks/README.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The schema validator regenerated scripts blind on every retry: diagnoser feedback, the previous failed script, and its stderr were never fed back into the prompt, so failures repeated identically until max retries. Observed failing 5/5 attempts on a 2-endpoint spec. - Feed diagnostic_feedback + previous script + previous stderr into the schema validator prompt - Lint schema-validation scripts before execution (syntax, pytest ban, MockTransport enforcement in SYNTHETIC mode) via a shared lint_test_script() helper also used by test_linter_node - Guard the diagnoser against misdiagnosis: a SyntaxError raised by the test script itself can never be an SDK bug, so never patch the SDK for it (observed: it patched models.py for a one-line script error) - Declare the endpoint/state fields actually used (schema_validated, validation_mode, execution_stdout/stderr, auth_credentials) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ccess - Iterate the synchronous LangGraph stream in a worker thread; multi-second LLM/executor calls were blocking the event loop, stalling every other request during a job run (health check now responds in ~3ms mid-run) - Final SDK integrity gate now injects httpx.MockTransport instead of calling the real base_url; petstore jobs failed with ConnectionRefused even after all 20 endpoint tests passed - Treat ValidationError from the mocked empty payload as a pass (proves the method runs Pydantic validation), and accept plain dict/scalar returns for free-form map schemas - Add explicit success:true/false to SSE 'complete' events - Clean up job_locks entries after completion (unbounded growth) - Extract normalize_base_url() so tests exercise the real logic - reliability: recognize Groq tool_use_failed errors explicitly as retryable parsing failures (previously matched by string luck) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Any parseable YAML/JSON (e.g. 'hello: world') previously created a job. Now requires an openapi/swagger version field and non-empty paths (422 otherwise), and extract_endpoints tolerates malformed path items. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces the stub: runs generated code in an isolated E2B cloud sandbox (fresh sandbox per execution) instead of the host machine. Enabled via USE_E2B_EXECUTOR=true + E2B_API_KEY. LocalExecutor remains the default. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Drops unused SDKOutput model and LLM imports from sdk_builder, the unused determine_dependencies() stub, and duplicated imports in config. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ggraph - pytest previously failed to collect (ModuleNotFoundError: app); add pythonpath/testpaths config so 'poetry run pytest' works - Rewrite test_relative_url to import the real normalize_base_url instead of duplicating the logic inline - New tests: openapi parser + spec validation, test-script linter, SDK consistency validator, graph routing, sdk_builder zip packaging, upload API (with isolated in-memory DB), ReliabilityManager failover with a mocked LLM (key rotation, model fallback, exhaustion) - Upgrade langgraph 0.2 -> 0.4 to resolve the checkpoint-postgres incompatibility warning; all tests and E2E pass on 0.4.10 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Job status no longer inferred by substring-matching 'failed' in the message (kept only as fallback for older backends). Replaces the 'any' cast with an EndpointInfo interface — eslint is clean again. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
petstore: FAILED (22 retries) -> SUCCESS in 723s (3 retries, 20/20 endpoints) jsonplaceholder: FAILED (15 retries) -> SUCCESS in 32s (0 retries) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
An unhandled exception (e.g. the DB-schema mismatch this surfaced) produced
a 500 with no Access-Control-Allow-Origin header, so the browser reported
it to JS as an opaque 'Failed to fetch' instead of a readable error.
Two wrong fixes tried and rejected before this one (see main.py comments
and tests/test_error_handling.py for the regression coverage):
1. @app.exception_handler(Exception) - routes through Starlette's
ServerErrorMiddleware, which sits outside every add_middleware() layer
including CORS, regardless of registration order.
2. An @app.middleware("http") handler registered AFTER CORSMiddleware -
Starlette's add_middleware() prepends (insert(0, ...)), so the LAST
registered middleware ends up OUTERMOST. Registering after CORS put it
outside CORS, same bypass.
Fix: register the exception-catching middleware BEFORE CORSMiddleware, so
CORS ends up outermost and wraps its responses too. Verified against the
live uvicorn process (not just TestClient) with a temporary crash route.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A spec with a non-empty 'paths' object but no GET/POST/etc. under any of them (e.g. only a path-level 'parameters' key) passed validation and created a job with 0 endpoints - confirmed live via curl. Reject with 422 instead, matching the empty-paths case already handled. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… preview - Drag-and-drop zone plus project name field - Client-side spec preview: parses JSON specs immediately to show title, endpoint count, and method/path chips before upload; validates YAML by shape. Blocks submit on oversized files, malformed JSON, missing openapi/swagger field, empty paths, or paths with no HTTP operations - mirrors the backend's validation so users get instant feedback instead of a round trip - Upload error messages now include a hint keyed off the HTTP status (413/422/429/400) instead of a generic failure message - Add a 'How it works' pipeline explainer (7 agent nodes) and a shared Nav component used across all pages - Fix globals.css: an unconditional prefers-color-scheme dark override was flipping body text to near-white, making the nav logo unreadable in dark-mode browsers, despite the whole UI being an explicitly light-only design. Removed the override. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…/lib/ The generic Python-template 'lib/' and 'lib64/' entries matched any directory with that name anywhere in the repo, including the frontend's src/lib/ — meaning any new file added there (e.g. lib/pipeline.ts, added in this branch) would never show up in git status and could be silently lost. Scope both entries to backend/ (poetry installs the venv outside the repo anyway, so nothing here currently relies on the old pattern). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Overall progress bar and stat cards (succeeded/failed/retries/model/ failovers) aggregated client-side from the execution log history - Per-endpoint status grid (method + path + color-coded status + retry count) - Collapsible glossary explaining what each of the 7 pipeline nodes does (shared PIPELINE_NODES data in lib/pipeline.ts, also used on the home page) - Added explanatory rendering for sdk_validator, schema_validator, and test_linter nodes, which previously showed only a bare header with no content - Explicit success/failure banner text surfaced from the SSE stream Note: NODE_DOT_COLOR (Tailwind classes like bg-indigo-500) is intentionally kept in each consuming .tsx file rather than centralized in pipeline.ts — classes referenced only from a .ts file were silently dropped by the build's content scanner (confirmed empirically: identical classes defined in a .tsx file compiled fine, the .ts-only ones did not). Keep any future per-node Tailwind classes colocated in the .tsx files, not lib/pipeline.ts. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Skeleton loading states for projects and jobs lists - Empty states with a CTA to upload when there are no projects/jobs - Unified status badge colors (adds PENDING), job duration display - Whole job row is now a Link (was a separate button) - Fixed a react-hooks/set-state-in-effect lint error: loading state is now derived (jobsLoadedFor vs selectedProjectId) instead of a synchronous setState() call at the top of the jobs-fetch effect Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Unused (not imported anywhere) and its SSE URL was wrong (missing /jobs/ prefix), so it could never have worked as written. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Backend (uvicorn :8000) and frontend (next dev :3000) configs so preview_start can launch both for local testing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR merges the improvements from the claude-code-modification branch into main. Features and fixes include: