diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 1ddcee04..2bea69d8 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "aimock", - "version": "1.13.0", + "version": "1.16.0", "description": "Fixture authoring guidance for @copilotkit/aimock — LLM, multimedia, MCP, A2A, AG-UI, vector, and service mocking", "author": { "name": "CopilotKit" diff --git a/CHANGELOG.md b/CHANGELOG.md index e5f051d1..c5acbabf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # @copilotkit/aimock +## 1.16.0 + +### Added + +- **`turnIndex` match criterion**: Stateless conversation-depth matching — counts `role: "assistant"` messages in the request's message array. Use for multi-turn conversation flows in shared/deployed instances where `sequenceIndex` counters break under concurrency. `turnIndex: 0` matches the first turn (no prior assistant messages), `turnIndex: 1` the second, etc. +- **`hasToolResult` match criterion**: Stateless boolean — `true` when any `role: "tool"` message exists in the request, `false` when none do. Simplest option for 2-step HITL flows (tool call → tool result → follow-up). +- `onTurn(turn, pattern, response, opts)` convenience method on the programmatic API. + ## 1.15.1 ### Fixed diff --git a/README.md b/README.md index f85b19d1..561d185f 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Run them all on one port with `npx @copilotkit/aimock --config aimock.json`, or ## Features - **[Record & Replay](https://aimock.copilotkit.dev/record-replay)** — Proxy real APIs, save as fixtures, replay deterministically forever -- **[Multi-turn Conversations](https://aimock.copilotkit.dev/multi-turn)** — Record and replay multi-turn traces with tool rounds; match distinct turns via `toolCallId`, `sequenceIndex`, or custom predicates +- **[Multi-turn Conversations](https://aimock.copilotkit.dev/multi-turn)** — Record and replay multi-turn traces with tool rounds; match distinct turns via `turnIndex`, `hasToolResult`, `toolCallId`, `sequenceIndex`, or custom predicates - **[11 LLM Providers](https://aimock.copilotkit.dev/docs)** — OpenAI Chat, OpenAI Responses, OpenAI Realtime, Claude, Gemini, Gemini Live, Azure, Bedrock, Vertex AI, Ollama, Cohere — full streaming support - **Multimedia APIs** — [image generation](https://aimock.copilotkit.dev/images) (DALL-E, Imagen), [text-to-speech](https://aimock.copilotkit.dev/speech), [audio transcription](https://aimock.copilotkit.dev/transcription), [video generation](https://aimock.copilotkit.dev/video) - **[MCP](https://aimock.copilotkit.dev/mcp-mock) / [A2A](https://aimock.copilotkit.dev/a2a-mock) / [AG-UI](https://aimock.copilotkit.dev/agui-mock) / [Vector](https://aimock.copilotkit.dev/vector-mock)** — Mock every protocol your AI agents use diff --git a/docs/index.html b/docs/index.html index 2e32da81..3763d7a9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1069,6 +1069,66 @@ text-decoration: none; } + /* --- Cross-Nav Footer -------------------------------------------- */ + .cross-nav-footer { + padding: 2rem 0; + border-top: 1px solid var(--border); + } + .cross-nav-toolbar { + max-width: 1120px; + margin: 0 auto; + padding: 0 2rem; + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; + flex-wrap: wrap; + } + .cn-label { + font-family: "JetBrains Mono", "SF Mono", "Fira Code", monospace; + font-size: 0.8rem; + color: var(--text-dim); + margin-right: 0.25rem; + white-space: nowrap; + } + .cn-pill { + display: inline-flex; + align-items: center; + gap: 0.4rem; + padding: 0.35rem 0.85rem; + border: 1px solid var(--border); + border-radius: 100px; + font-family: "JetBrains Mono", "SF Mono", "Fira Code", monospace; + font-size: 0.75rem; + font-weight: 500; + color: var(--text-secondary); + text-decoration: none; + transition: + border-color 0.2s, + background 0.2s, + color 0.2s; + white-space: nowrap; + } + .cn-pill:hover { + border-color: #3a3a50; + color: var(--text-primary); + text-decoration: none; + background: rgba(255, 255, 255, 0.03); + } + .cn-pill.active { + border-color: var(--accent); + background: var(--accent-glow); + color: var(--text-primary); + cursor: default; + pointer-events: none; + } + .cn-dot { + width: 6px; + height: 6px; + border-radius: 50%; + flex-shrink: 0; + } + /* ─── Mobile ──────────────────────────────────────────────────── */ @media (max-width: 768px) { .nav-links { @@ -1111,6 +1171,16 @@ } } + @media (max-width: 640px) { + .cross-nav-toolbar { + gap: 0.4rem; + } + .cn-pill { + font-size: 0.7rem; + padding: 0.3rem 0.7rem; + } + } + @media (max-width: 480px) { .hero { padding: 8rem 0 4rem; @@ -1121,6 +1191,9 @@ .nav-brand .powered-by { display: none; } + .cn-label { + display: none; + } } @@ -1922,6 +1995,28 @@

Built for production

+ + +