@capagents/forgeqe 2.3.10 → 2.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/HOW_TO_USE.md +69 -0
- package/LICENSE +1 -1
- package/README.md +8 -0
- package/dist/forgeqe.js +907 -900
- package/docs/ARCHITECTURE.md +1 -1
- package/package.json +1 -1
- package/py/forgeqe_mobile/maestro.py +3 -1
package/docs/ARCHITECTURE.md
CHANGED
|
@@ -182,7 +182,7 @@ Tools take structured arguments. `run_test_cases` and `find_test_cases` get a li
|
|
|
182
182
|
|
|
183
183
|
**Permissions.** The agent's bash is allowed except `git push*`, `git * push*` (so `git -C . push` is caught too), and `gh repo delete*`, each also with a leading `*` so a push wrapped in another command (`env git push`, `sh -c 'git push'`) is caught; the agent runtime matches each command of a chain on its own and applies the last matching rule. These rules are guard rails, not a sandbox. `forgeqe_*` tools are allowed. `external_directory` allows only the run and memory folders. Tool calls to `forgeqe_*` are hidden from the `⚙` lines because their `ToolEvent`s already render richer output (browser steps, suite cards).
|
|
184
184
|
|
|
185
|
-
**Callers.** The TUI opens the brain on the first message and keeps it for the session, so follow-up answers and "write a test for that run" have context; `/profile` (or Tab) closes it and keeps the turns so far: the next agent session's first prompt is `carryOver(turns, text)`, the last 20 turns with remembered secrets redacted, so switching models does not lose the conversation. It renders `card` events as result panels and `agent` events as `⚙` and test lines with their own token counter, and its `waitForUser` pushes the prompt into the transcript and opens a **Your turn** dialog (Done, continue / Cancel); opening another dialog or Esc settles it as cancelled. `forgeqe run` opens the brain for one request, prints tool events (cards as `cardText`) and the reply as plain lines, waits for Enter in `waitForUser` when stdin is a terminal, and exits 0 done, 1 failed, 2 stopped, 3 needs input. `forgeqe run --direct` and a missing agent runtime run `browser_run` directly. `forgeqe mcp` serves the same `TOOLS` on stdio and logs `ToolEvent`s to stderr; it has no `waitForUser`. `forgeqe
|
|
185
|
+
**Callers.** The TUI opens the brain on the first message and keeps it for the session, so follow-up answers and "write a test for that run" have context; `/profile` (or Tab) closes it and keeps the turns so far: the next agent session's first prompt is `carryOver(turns, text)`, the last 20 turns with remembered secrets redacted, so switching models does not lose the conversation. It renders `card` events as result panels and `agent` events as `⚙` and test lines with their own token counter, and its `waitForUser` pushes the prompt into the transcript and opens a **Your turn** dialog (Done, continue / Cancel); opening another dialog or Esc settles it as cancelled. `forgeqe run` opens the brain for one request, prints tool events (cards as `cardText`) and the reply as plain lines, waits for Enter in `waitForUser` when stdin is a terminal, and exits 0 done, 1 failed, 2 stopped, 3 needs input. `forgeqe run --direct` and a missing agent runtime run `browser_run` directly. `forgeqe mcp` serves the same `TOOLS` on stdio and logs `ToolEvent`s to stderr; it has no `waitForUser`. `forgeqe chat --jsonl` (`src/chat/jsonl.ts`) is the TUI's agent for a program: like the TUI, it opens the brain on the first message, keeps it for every message, runs with `session: "shell"`, runs Tier 0 requests as recorded before asking the agent, and continues an earlier conversation with `carryOver` (`--carry-over FILE`, with its own reason sentence); like `forgeqe run`, it takes its flags (`repoFlag`, `memoryFlags`, …) and writes one session log; like `forgeqe mcp`, it is a machine interface, with stdout claimed for the protocol and every other print sent to stderr. It writes each `CodeEvent` and `ToolEvent` unchanged as a JSON line (`agent`, `tool`), turns `ask` and `waitForUser` into `ask` and `wait` lines answered on stdin, ends every turn with one `turn_done`, and passes every outgoing string through `redactSecrets` and the values of `privateEnvNames` and profile keys. The protocol is in HOW_TO_USE.md. `forgeqe start`, `forgeqe mcp`, and `forgeqe chat` stop background monitors when they return, because `src/index.ts` calls `process.exit`.
|
|
186
186
|
|
|
187
187
|
## Tool scope (`src/mcp/scope.ts`, `src/capabilities`)
|
|
188
188
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capagents/forgeqe",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.12",
|
|
4
4
|
"description": "ForgeQE: a browser agent CLI that runs goals and test cases in local Chrome or Chromium, or BrowserStack and TestMu AI/LambdaTest when configured, and turns passing runs into tests in your repo",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"repository": {
|
|
@@ -15,6 +15,7 @@ from __future__ import annotations
|
|
|
15
15
|
import json
|
|
16
16
|
import os
|
|
17
17
|
import re
|
|
18
|
+
import shutil
|
|
18
19
|
import subprocess
|
|
19
20
|
import xml.etree.ElementTree as ET
|
|
20
21
|
from pathlib import Path
|
|
@@ -303,7 +304,8 @@ def run_maestro(
|
|
|
303
304
|
out_dir.mkdir(parents=True, exist_ok=True)
|
|
304
305
|
junit = out_dir / "maestro-junit.xml"
|
|
305
306
|
debug = out_dir / "maestro-debug"
|
|
306
|
-
|
|
307
|
+
resolved = shutil.which(command[0]) or command[0]
|
|
308
|
+
args = [resolved, *command[1:], *(["--device", device] if device else []), "test", "--format", "junit", "--output", str(junit), "--debug-output", str(debug), *flows]
|
|
307
309
|
try:
|
|
308
310
|
proc = run(args, env=dict(env), capture_output=True, text=True, timeout=timeout, shell=False)
|
|
309
311
|
except FileNotFoundError:
|