rigorrun 0.1.0
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/LICENSE +21 -0
- package/README.md +87 -0
- package/bin/rigorrun.mjs +47 -0
- package/dist/rigorrun.mjs +16217 -0
- package/package.json +46 -0
- package/ui/assets/DemoPage-B1s79hcz.js +295 -0
- package/ui/assets/Proof-Doh3bIfF.js +1 -0
- package/ui/assets/index-CR8r1ZFu.css +2 -0
- package/ui/assets/index-DAiDcuMt.js +14 -0
- package/ui/index.html +22 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 RigorRun
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# RigorRun
|
|
2
|
+
|
|
3
|
+
**Acceptance testing for tool-using AI agents.**
|
|
4
|
+
|
|
5
|
+
Connect your system. Show RigorRun how one job is done. Connect your agent.
|
|
6
|
+
RigorRun proves whether the agent can do that job safely — by reading the
|
|
7
|
+
system it changed, never by trusting what it says about itself.
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx rigorrun
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Open the URL it prints. That is the whole install.
|
|
14
|
+
|
|
15
|
+
**Early Access · v0.1.** It does what this page says and it is young. The
|
|
16
|
+
limits are written down and marked one by one, rather than left for you to
|
|
17
|
+
find: [the v1 gap audit](https://github.com/Konuktor/rigorrun/blob/master/docs/V1_GAP_AUDIT.md).
|
|
18
|
+
|
|
19
|
+
## What it does
|
|
20
|
+
|
|
21
|
+
You have an agent that calls tools. You need to know whether it can do a real
|
|
22
|
+
job in your real system without doing something unsafe — and you need to know
|
|
23
|
+
again next week, after somebody changes a prompt.
|
|
24
|
+
|
|
25
|
+
RigorRun watches a person do that job once, reads the system before and after,
|
|
26
|
+
works out what the rules must be, asks about what it can only guess, and turns
|
|
27
|
+
the answers into an executable acceptance suite. Then it runs your agent against
|
|
28
|
+
it and reads your system to find out what actually happened.
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
most tools: you write the tests → the tool runs them
|
|
32
|
+
RigorRun: you do the job once → RigorRun writes the tests
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Why it runs locally
|
|
36
|
+
|
|
37
|
+
Your MCP server, your internal API and your staging box are usually not
|
|
38
|
+
reachable from the public internet, and a page served over `https` cannot fetch
|
|
39
|
+
`http://127.0.0.1`. So RigorRun's interface is served by this process, on your
|
|
40
|
+
machine. Your credentials, recordings and systems never touch anybody's
|
|
41
|
+
infrastructure, because there is no path by which they could.
|
|
42
|
+
|
|
43
|
+
## What you need
|
|
44
|
+
|
|
45
|
+
- **Node 20.11 or newer.**
|
|
46
|
+
- **A way in to the system you want to test**: an MCP server, or an OpenAPI
|
|
47
|
+
document and the address it is served from. Ideally staging or a scratch
|
|
48
|
+
instance, with a way to reset it.
|
|
49
|
+
- **An agent.** If it speaks MCP it works unchanged; RigorRun hands it a URL —
|
|
50
|
+
whether your agent listens on an address or is a command RigorRun runs. If it
|
|
51
|
+
does not speak MCP, about ten lines of the agent SDK.
|
|
52
|
+
|
|
53
|
+
## Commands
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npx rigorrun # start the runner and open the interface
|
|
57
|
+
npx rigorrun doctor # check this machine and every project
|
|
58
|
+
npx rigorrun projects # what is on this machine
|
|
59
|
+
npx rigorrun run --project <id> # run the suite
|
|
60
|
+
npx rigorrun gate --project <id> # run it, and exit non-zero if it misses the bar
|
|
61
|
+
npx rigorrun compare-runs --project <id> <runId>
|
|
62
|
+
npx rigorrun feedback export # a sanitised bundle for a bug report
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## This is early access
|
|
66
|
+
|
|
67
|
+
It connects to MCP servers, to HTTP APIs with an OpenAPI document, and to web
|
|
68
|
+
applications through a browser — though a browser cannot verify itself, so a
|
|
69
|
+
verdict from one is OBSERVATIONAL unless something readable is attached.
|
|
70
|
+
Setting a project up needs the interface; running and gating it does not. It has
|
|
71
|
+
been used successfully by the people who wrote it and is now looking for people
|
|
72
|
+
who did not.
|
|
73
|
+
|
|
74
|
+
Every capability is marked WORKING, PARTIAL or MISSING in
|
|
75
|
+
[the v1 gap audit](https://github.com/Konuktor/rigorrun/blob/master/docs/V1_GAP_AUDIT.md),
|
|
76
|
+
with how each one was checked. Read it before you rely on this for anything
|
|
77
|
+
that matters.
|
|
78
|
+
|
|
79
|
+
If it goes wrong, `npx rigorrun feedback export` produces a bundle that contains
|
|
80
|
+
no credentials, no tool arguments and no results — only what is needed to work
|
|
81
|
+
out where it broke.
|
|
82
|
+
|
|
83
|
+
## Documentation
|
|
84
|
+
|
|
85
|
+
<https://github.com/Konuktor/rigorrun/tree/master/docs>
|
|
86
|
+
|
|
87
|
+
MIT licensed.
|
package/bin/rigorrun.mjs
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* The executable, and nothing else.
|
|
4
|
+
*
|
|
5
|
+
* This file exists to be *parseable by every Node that might run it*. `engines`
|
|
6
|
+
* in package.json produces a warning that npm prints and nobody reads, and if
|
|
7
|
+
* the real bundle is loaded directly on an old runtime the failure is a syntax
|
|
8
|
+
* error pointing at a minified line — which tells somebody nothing about what
|
|
9
|
+
* to do.
|
|
10
|
+
*
|
|
11
|
+
* So: no optional chaining, no nullish coalescing, no top-level await, and the
|
|
12
|
+
* bundle is reached through a dynamic import that only happens after the check
|
|
13
|
+
* has passed.
|
|
14
|
+
*/
|
|
15
|
+
var MINIMUM = [20, 11];
|
|
16
|
+
|
|
17
|
+
function tooOld() {
|
|
18
|
+
var parts = String(process.versions.node).split('.');
|
|
19
|
+
var major = parseInt(parts[0], 10);
|
|
20
|
+
var minor = parseInt(parts[1], 10);
|
|
21
|
+
if (isNaN(major)) return false;
|
|
22
|
+
if (major > MINIMUM[0]) return false;
|
|
23
|
+
if (major < MINIMUM[0]) return true;
|
|
24
|
+
return isNaN(minor) ? false : minor < MINIMUM[1];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (tooOld()) {
|
|
28
|
+
process.stderr.write(
|
|
29
|
+
'\nRigorRun needs Node ' +
|
|
30
|
+
MINIMUM.join('.') +
|
|
31
|
+
' or newer, and this is Node ' +
|
|
32
|
+
process.versions.node +
|
|
33
|
+
'.\n\n' +
|
|
34
|
+
'Node 20 is the oldest release still receiving security fixes, and\n' +
|
|
35
|
+
'RigorRun uses its built-in test-friendly fetch and stream APIs.\n\n' +
|
|
36
|
+
'Install a newer Node from https://nodejs.org, or with a version manager:\n' +
|
|
37
|
+
' nvm install 22 && nvm use 22\n' +
|
|
38
|
+
' fnm install 22 && fnm use 22\n\n',
|
|
39
|
+
);
|
|
40
|
+
process.exit(2);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
import('../dist/rigorrun.mjs').catch(function (error) {
|
|
44
|
+
process.stderr.write('\nRigorRun could not start: ' + error.message + '\n');
|
|
45
|
+
if (process.env.RIGORRUN_DEBUG) console.error(error);
|
|
46
|
+
process.exit(2);
|
|
47
|
+
});
|