Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
417ef36
fix: handle A2A pipeline cancel handoff
guima-why Jun 16, 2026
75ef643
docs: describe A2A pipeline cancel handoff fix
guima-why Jun 16, 2026
d469dbf
Add generated VSwitch templates
guima-why Jun 17, 2026
4353e96
Handle pipeline rollback cleanup recovery
guima-why Jun 18, 2026
fe476c0
test: add real REPL pipeline e2e coverage
guima-why Jun 20, 2026
d1f2ed4
test: document repl e2e merge and isolate tiktoken
guima-why Jun 20, 2026
a3bb08d
feat: support pipeline image inputs
guima-why Jun 22, 2026
1e9536e
fix: refine pipeline memory policy
guima-why Jun 22, 2026
c904dae
fix: expose pipeline docs in website navigation
guima-why Jun 22, 2026
be6139d
fix: remove static pipeline rollback rules
guima-why Jun 22, 2026
891f352
fix: resolve pipeline skill reference paths
guima-why Jun 22, 2026
521d027
docs: record fix-misc cherry-pick
guima-why Jun 22, 2026
c4f9714
fix: refine aliyun selling pipeline skills
guima-why Jun 22, 2026
ab87483
feat: add pipeline surface prompt overrides
guima-why Jun 22, 2026
a1c2cb8
fix: enforce ROS stack completion guard
guima-why Jun 23, 2026
efad1e0
fix: require unique ROS stack names
guima-why Jun 23, 2026
e928d0c
fix: restrict ROS TemplateBody in pipeline mode
guima-why Jun 23, 2026
858b594
docs: record fix-skill cherry-pick
guima-why Jun 23, 2026
5b2d5bf
feat: add selling pipeline console
guima-why Jun 23, 2026
f4bc7f9
docs: record selling console cherry-pick
guima-why Jun 23, 2026
a2a9c42
docs: add review fixes design
guima-why Jun 23, 2026
cd1b647
docs: cover review fix edge cases in design
guima-why Jun 23, 2026
ec0bdd2
docs: tighten review fixes durability design
guima-why Jun 23, 2026
0516c8a
docs: clarify review fixes design gaps
guima-why Jun 23, 2026
dbf9f74
docs: add review fixes implementation plan
guima-why Jun 23, 2026
031ad15
fix: add durable state file helpers
guima-why Jun 23, 2026
48839fa
fix: tighten durable state io edge cases
guima-why Jun 23, 2026
411172d
fix: harden session storage writes
guima-why Jun 23, 2026
e6835a9
fix: tighten cleanup prompt compatibility
guima-why Jun 23, 2026
61f8944
fix: decouple session services from pipeline engine
guima-why Jun 23, 2026
7fdb960
fix: narrow legacy cleanup prompt detection
guima-why Jun 23, 2026
7df10d3
fix: make A2A recovery events durable
guima-why Jun 23, 2026
2b5e1a9
fix: harden A2A durable recovery events
guima-why Jun 23, 2026
21fc788
fix: preserve A2A recoverable pipeline state
guima-why Jun 23, 2026
814fde4
fix: preserve recoverable A2A compatibility errors
guima-why Jun 23, 2026
0c88d15
fix: preserve cleanup ledger state
guima-why Jun 23, 2026
483a512
fix: reject cleanup result mismatches
guima-why Jun 23, 2026
3d2b622
fix: sanitize cleanup mismatch logs
guima-why Jun 23, 2026
b62418f
fix: stop on pipeline state persistence failure
guima-why Jun 23, 2026
3d3d0d5
fix: harden pipeline persistence failure handling
guima-why Jun 23, 2026
2a08dd3
fix: persist candidate failures before emission
guima-why Jun 23, 2026
0964db0
fix: close pipeline persistence failure gaps
guima-why Jun 23, 2026
27803b8
fix: keep pipeline on handoff persistence failure
guima-why Jun 23, 2026
a26716a
fix: avoid false successful handoff metadata
guima-why Jun 23, 2026
adfaedf
fix: stop on parallel and cleanup persistence failures
guima-why Jun 23, 2026
8813890
fix: persist rollback state before event log
guima-why Jun 23, 2026
7334027
fix: close pipeline persistence edge cases
guima-why Jun 23, 2026
1cd3668
fix: handle pipeline metadata append failures
guima-why Jun 23, 2026
33a365f
fix: close Windows i18n and compatibility gaps
guima-why Jun 23, 2026
86df76a
docs: document review fix closure
guima-why Jun 23, 2026
94bf131
fix: complete review fix verification
guima-why Jun 23, 2026
62f1ecf
fix: address final review findings
guima-why Jun 23, 2026
d0132c7
docs: add review2 fixes design
guima-why Jun 24, 2026
f5f4f61
chore: remove generated docs and templates
guima-why Jun 24, 2026
83da92b
fix: translate pipeline i18n messages
guima-why Jun 24, 2026
cdc03ee
fix: address pipeline review findings
guima-why Jun 24, 2026
a36fae7
fix: complete translations after main rebase
guima-why Jun 24, 2026
1b0d49d
Fix CI failures after selling console updates
guima-why Jun 24, 2026
5b4c53c
Decode selling console frontend test output as UTF-8
guima-why Jun 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ dev = [
"setuptools>=68.0",
"wheel",
"tomli>=2.0; python_version<\"3.11\"",
"pexpect>=4.9.0",
]

[build-system]
Expand Down
14 changes: 14 additions & 0 deletions scripts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ repository root with `uv run python ...` unless a script-specific README says ot
| --- | --- |
| `a2a/debugger.py` | Web debugger/client for A2A pipeline streams. |
| `a2a/debugger.md` | Manual usage notes for the A2A debugger. |
| `a2a/selling_console.py` | Selling pipeline console local HTTP server; proxies text-only UI requests to an A2A server. |
| `a2a/selling_console_web/` | Static Selling Console frontend. It renders pipeline progress, candidate cards, chat, and debug panels; image input coverage belongs to `a2a/debugger.py`. |
| `a2a/e2e/` | A2A session recovery end-to-end scenario runner, shared helpers, and result notes. |
| `a2a/smoke/test_a2a_vpc.py` | Small manual smoke script for A2A VPC/pipeline behavior. |
| `acp/smoke/test_acp_vpc.py` | Small manual smoke script for ACP VPC behavior. |
Expand All @@ -17,14 +19,26 @@ repository root with `uv run python ...` unless a script-specific README says ot
| `observability/local_observe/` | Local observe server implementation and static web UI. |
| `observability/local_observe.md` | Manual usage notes for the local observe tool. |
| `rendering/test_diagram_render.py` | Manual diagram rendering check. |
| `repl/e2e/` | Real PTY-driven REPL pipeline end-to-end scenario runner. POSIX-only because it uses `pexpect`. |

## Common Commands

```bash
uv run python scripts/a2a/debugger.py --help
PATH="$HOME/.local/bin:$PATH" \
uv run python scripts/a2a/selling_console.py --port 41980 \
--default-server-url http://127.0.0.1:41299 \
--default-cwd "$PWD"
uv run python scripts/a2a/e2e/run_recovery_scenarios.py --help
uv run python scripts/observability/local_observe.py --help
uv run python scripts/repl/e2e/run_pipeline_scenarios.py --help
```

`scripts/repl/e2e/run_pipeline_scenarios.py` writes artifacts under the system temporary directory by default and is intended for manual or smoke validation. It is not part of `make test`; the unit tests only cover helper behavior. The real PTY runner depends on the POSIX-only `pexpect` development dependency.

The root `conftest.py` includes a tiktoken isolation fixture so tests do not read or write the developer's real encoding cache. Keep new tests on that fixture path rather than using the user cache directly.

Cleanup ledger temporary files use a leading dot in their generated names only as a cosmetic convention. Correctness relies on atomic replace, retries, and ledger validation, not on Unix hidden-file behavior.

Pytest tests for these helpers live under `tests/`; the executable scripts here are kept for local debugging,
manual validation, and real end-to-end runs.
31 changes: 31 additions & 0 deletions scripts/a2a/debugger.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,33 @@ uv run python scripts/a2a/debugger.py --port 41880 \
--default-cwd "$PWD"
```

`--default-cwd` is sent to the A2A server as `metadata.iac_code.cwd` on each
message. It is the server-side workspace for the task, not merely the debugger's
own working directory.

The A2A server validates this path before running the agent. By default, the
server accepts its own startup directory and Python's temp directory. If
`--default-cwd` points inside an allowed root and the directory does not exist
yet, the server may create it. The request is rejected with
`Invalid A2A workspace metadata.` when the resolved path escapes the allowed
root, cannot be created, or cannot be used as a directory.

Use one of these patterns:

```bash
# Start the debugger with a cwd accepted by the already-running server.
uv run python scripts/a2a/debugger.py --port 41880 \
--default-server-url http://127.0.0.1:41299 \
--default-cwd "/path/to/server/workspace"
```

```bash
# Or explicitly allow the debugger/client workspace when starting the server.
IACCODE_A2A_ALLOWED_CWDS="/path/to/server/workspace:/path/to/client/workspace" \
IAC_CODE_MODE=pipeline \
uv run iac-code a2a --transport http --host 127.0.0.1 --port 41299
```

Open:

```text
Expand Down Expand Up @@ -67,3 +94,7 @@ uv run python scripts/a2a/debugger.py --port 41880 \
- The debugger is a local development tool and does not provide authentication.
- `contextId` identifies the conversation; `taskId` identifies one A2A task.
- After `pipeline_handoff_ready`, follow-up messages normally start a new normal-chat task in the same context.
- Image input accepts supported image MIME types only: `image/png`, `image/jpeg`, `image/webp`, and `image/gif`.
- A2A part parser limits: text inline/raw and text `file://` parts are limited to 1 MiB; binary inline/raw/data parts are limited to 5 MiB; binary `file://` parts are limited to 25 MiB. Debugger uploads are limited to 5 MiB per image.
- `file://` image inputs must resolve to an existing local file that is both under the request cwd and under a configured A2A allowed cwd root. Local URLs outside either boundary are rejected.
- The A2A debugger sends image parts. The Selling Console web UI currently sends text input only.
Loading
Loading