@slenderbuilds/niti 0.4.2 → 0.4.4
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/README.md +9 -13
- package/bin/niti-core.js +2 -3
- package/bin/niti.js +2 -3
- package/bin/resolve.js +17 -0
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -130,18 +130,14 @@ model or message it mid-task. Approvals can be answered here too.
|
|
|
130
130
|
|
|
131
131
|
`/graph` maps your project's imports — or, in **Models** mode, the team talking in real time.
|
|
132
132
|
|
|
133
|
-
<
|
|
134
|
-
<
|
|
135
|
-
|
|
136
|
-
<
|
|
137
|
-
<
|
|
138
|
-
|
|
139
|
-
<
|
|
140
|
-
<
|
|
141
|
-
<td align="center"><sub>Hover to trace a file's imports</sub></td>
|
|
142
|
-
<td align="center"><sub>Models mode: the team, live</sub></td>
|
|
143
|
-
</tr>
|
|
144
|
-
</table>
|
|
133
|
+
<img src="readme_images/graph-project.png" alt="project mode: every file, colored by directory" width="100%">
|
|
134
|
+
<p align="center"><sub><b>Project mode</b> — every file, colored by directory</sub></p>
|
|
135
|
+
|
|
136
|
+
<img src="readme_images/graph-focus.png" alt="hovering a file highlights what it imports and what imports it" width="100%">
|
|
137
|
+
<p align="center"><sub><b>Hover</b> — trace what a file imports and what imports it</sub></p>
|
|
138
|
+
|
|
139
|
+
<img src="readme_images/graph-models.png" alt="models mode: each agent, colored by status" width="100%">
|
|
140
|
+
<p align="center"><sub><b>Models mode</b> — the team talking, live</sub></p>
|
|
145
141
|
|
|
146
142
|
Both pages follow the theme you pick in the terminal.
|
|
147
143
|
|
|
@@ -180,7 +176,7 @@ Both pages follow the theme you pick in the terminal.
|
|
|
180
176
|
- **Guarded tools** — `read_file`, `write_file`, `edit`, `shell` and read-only search, gated per
|
|
181
177
|
agent and by a permission policy; paths are jailed to the project; dangerous commands always ask.
|
|
182
178
|
- **Picks up where you left off** — every turn checkpoints to SQLite; `niti-core resume` continues
|
|
183
|
-
unfinished work, and `/
|
|
179
|
+
unfinished work, and `/rewind [n]` reverts the last n file writes.
|
|
184
180
|
- **Extensible** — MCP servers and language servers join the same tool loop, under the same gates.
|
|
185
181
|
|
|
186
182
|
The full architecture record, the verification history and what is deliberately out of scope live
|
package/bin/niti-core.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// The headless engine/scripting CLI (`niti-core "task"`, `serve`, `auth`, …). Same handover as
|
|
3
3
|
// bin/niti.js — the TUI spawns this binary directly as a sibling, without going through Node.
|
|
4
|
-
import {
|
|
5
|
-
import { binPath } from "./resolve.js";
|
|
4
|
+
import { run } from "./resolve.js";
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
run("niti-core");
|
package/bin/niti.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// The interactive TUI. Node runs this shim; everything after the handover is Go and Bun.
|
|
3
|
-
import {
|
|
4
|
-
import { binPath } from "./resolve.js";
|
|
3
|
+
import { run } from "./resolve.js";
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
run("niti");
|
package/bin/resolve.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { createRequire } from "node:module";
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { constants } from "node:os";
|
|
2
4
|
|
|
3
5
|
const require = createRequire(import.meta.url);
|
|
4
6
|
|
|
@@ -30,3 +32,18 @@ export function binPath(exe) {
|
|
|
30
32
|
process.exit(1);
|
|
31
33
|
}
|
|
32
34
|
}
|
|
35
|
+
|
|
36
|
+
// Hand over to the real binary and mirror how it ended. The shims used to exit with `status ?? 1`,
|
|
37
|
+
// which turned "could not execute it" (missing exec bit, bad architecture, antivirus quarantine)
|
|
38
|
+
// into a silent exit 1 — no output at all — and a crash by signal into an unexplained 1.
|
|
39
|
+
export function run(exe) {
|
|
40
|
+
const path = binPath(exe);
|
|
41
|
+
const r = spawnSync(path, process.argv.slice(2), { stdio: "inherit" });
|
|
42
|
+
if (r.error) {
|
|
43
|
+
console.error(`niti: could not run ${path}: ${r.error.message}`);
|
|
44
|
+
if (r.error.code === "EACCES") console.error(` try: chmod +x "${path}"`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
if (r.signal) process.exit(128 + (constants.signals[r.signal] ?? 0));
|
|
48
|
+
process.exit(r.status ?? 1);
|
|
49
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@slenderbuilds/niti",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"description": "A terminal CLI that runs multiple AI coding agents from different LLM providers concurrently on one project.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -54,11 +54,11 @@
|
|
|
54
54
|
"access": "public"
|
|
55
55
|
},
|
|
56
56
|
"optionalDependencies": {
|
|
57
|
-
"niti-darwin-arm64": "0.4.
|
|
58
|
-
"niti-darwin-x64": "0.4.
|
|
59
|
-
"niti-linux-arm64": "0.4.
|
|
60
|
-
"niti-linux-x64": "0.4.
|
|
61
|
-
"niti-win32-x64": "0.4.
|
|
57
|
+
"niti-darwin-arm64": "0.4.4",
|
|
58
|
+
"niti-darwin-x64": "0.4.4",
|
|
59
|
+
"niti-linux-arm64": "0.4.4",
|
|
60
|
+
"niti-linux-x64": "0.4.4",
|
|
61
|
+
"niti-win32-x64": "0.4.4"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@anthropic-ai/sdk": "^0.115.0",
|