@noir-ai/cli 1.6.0 → 1.7.0-beta.1
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 +1 -1
- package/dist/bin.js +81 -8
- package/dist/bin.js.map +1 -1
- package/dist/{chunk-SVFQGAOF.js → chunk-3E7ZT5OG.js} +5 -3
- package/dist/{chunk-SVFQGAOF.js.map → chunk-3E7ZT5OG.js.map} +1 -1
- package/dist/chunk-47ITYQ3A.js +203 -0
- package/dist/chunk-47ITYQ3A.js.map +1 -0
- package/dist/chunk-DQXQQDJN.js +310 -0
- package/dist/chunk-DQXQQDJN.js.map +1 -0
- package/dist/chunk-RYE3BUGP.js +174 -0
- package/dist/chunk-RYE3BUGP.js.map +1 -0
- package/dist/{chunk-YES5UCU5.js → chunk-WS7K4NKA.js} +59 -311
- package/dist/chunk-WS7K4NKA.js.map +1 -0
- package/dist/{create-7ERBL42K.js → create-P4M52LZZ.js} +6 -4
- package/dist/{create-7ERBL42K.js.map → create-P4M52LZZ.js.map} +1 -1
- package/dist/index.js +3 -2
- package/dist/install-XACGZ235.js +13 -0
- package/dist/install-XACGZ235.js.map +1 -0
- package/dist/{sync-SCAF6Z5H.js → sync-35DR6DNN.js} +5 -3
- package/dist/{sync-SCAF6Z5H.js.map → sync-35DR6DNN.js.map} +1 -1
- package/dist/tui/chunk-63KFZH6T.js +202 -0
- package/dist/tui/chunk-63KFZH6T.js.map +1 -0
- package/dist/tui/{chunk-YNEBQJXA.js → chunk-BDFQ5S3K.js} +59 -311
- package/dist/tui/chunk-BDFQ5S3K.js.map +1 -0
- package/dist/tui/chunk-CMGOOU7L.js +173 -0
- package/dist/tui/chunk-CMGOOU7L.js.map +1 -0
- package/dist/tui/chunk-L5ZKEOQV.js +309 -0
- package/dist/tui/chunk-L5ZKEOQV.js.map +1 -0
- package/dist/tui/{chunk-OMF7XZMN.js → chunk-LHT7M6DO.js} +5 -3
- package/dist/tui/{chunk-OMF7XZMN.js.map → chunk-LHT7M6DO.js.map} +1 -1
- package/dist/tui/{create-U2YJH5QC.js → create-IZSOFSO7.js} +6 -4
- package/dist/tui/{create-U2YJH5QC.js.map → create-IZSOFSO7.js.map} +1 -1
- package/dist/tui/index.js +86 -13
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/install-357OEHOZ.js +12 -0
- package/dist/tui/install-357OEHOZ.js.map +1 -0
- package/dist/tui/{sync-VYRXCGK4.js → sync-32TP7XB6.js} +5 -3
- package/dist/tui/{sync-VYRXCGK4.js.map → sync-32TP7XB6.js.map} +1 -1
- package/dist/tui/update-7HWOY55V.js +15 -0
- package/dist/tui/update-7HWOY55V.js.map +1 -0
- package/dist/update-J3TAORFX.js +16 -0
- package/dist/update-J3TAORFX.js.map +1 -0
- package/package.json +9 -9
- package/dist/chunk-YES5UCU5.js.map +0 -1
- package/dist/tui/chunk-YNEBQJXA.js.map +0 -1
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ This package is the CLI shell. Noir is a pnpm monorepo of 11 `@noir-ai/*` packag
|
|
|
45
45
|
- **Full toolkit overview:** [root README](../../README.md)
|
|
46
46
|
- **Getting-started walkthrough:** [docs/getting-started.md](../../docs/getting-started.md)
|
|
47
47
|
- **Command reference + config schema:** [docs/usage.md](../../docs/reference/cli.md)
|
|
48
|
-
- **Roadmap & status:** [docs/roadmap
|
|
48
|
+
- **Roadmap & status:** [docs/roadmap/](../../docs/roadmap/)
|
|
49
49
|
- **Releasing (npm token + provenance):** [docs/releasing.md](../../docs/how-to/releasing.md)
|
|
50
50
|
|
|
51
51
|
MIT © agaaaptr
|
package/dist/bin.js
CHANGED
|
@@ -2,9 +2,17 @@
|
|
|
2
2
|
import {
|
|
3
3
|
serve
|
|
4
4
|
} from "./chunk-A5W2E3X2.js";
|
|
5
|
+
import {
|
|
6
|
+
DEFAULT_UPDATE_CONFIG,
|
|
7
|
+
runAsyncUpdateCheck
|
|
8
|
+
} from "./chunk-RYE3BUGP.js";
|
|
9
|
+
import "./chunk-47ITYQ3A.js";
|
|
5
10
|
import {
|
|
6
11
|
init
|
|
7
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-3E7ZT5OG.js";
|
|
13
|
+
import {
|
|
14
|
+
doctor
|
|
15
|
+
} from "./chunk-WS7K4NKA.js";
|
|
8
16
|
import {
|
|
9
17
|
EXIT,
|
|
10
18
|
NoirCliError,
|
|
@@ -12,7 +20,6 @@ import {
|
|
|
12
20
|
badge,
|
|
13
21
|
c,
|
|
14
22
|
definitionList,
|
|
15
|
-
doctor,
|
|
16
23
|
fail,
|
|
17
24
|
handleError,
|
|
18
25
|
inferExitCode,
|
|
@@ -25,13 +32,13 @@ import {
|
|
|
25
32
|
tip,
|
|
26
33
|
useColor,
|
|
27
34
|
warn
|
|
28
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-DQXQQDJN.js";
|
|
29
36
|
|
|
30
37
|
// src/bin.ts
|
|
31
38
|
import { realpathSync } from "fs";
|
|
32
39
|
import { pathToFileURL } from "url";
|
|
33
40
|
import { SUPPORTED_HOSTS } from "@noir-ai/adapters";
|
|
34
|
-
import { NOIR_VERSION as
|
|
41
|
+
import { NOIR_VERSION as NOIR_VERSION4 } from "@noir-ai/core";
|
|
35
42
|
import { Command, Option } from "commander";
|
|
36
43
|
|
|
37
44
|
// src/daemon-client.ts
|
|
@@ -617,6 +624,18 @@ async function gatherStatusPayload(opts) {
|
|
|
617
624
|
return buildPayload(project, probe, host, store, context, workflow, memory);
|
|
618
625
|
}
|
|
619
626
|
async function status(opts) {
|
|
627
|
+
void runAsyncUpdateCheck({
|
|
628
|
+
env: process.env,
|
|
629
|
+
configUpdate: (() => {
|
|
630
|
+
try {
|
|
631
|
+
const info2 = loadProjectInfo3(process.cwd());
|
|
632
|
+
return info2.config.update ?? DEFAULT_UPDATE_CONFIG;
|
|
633
|
+
} catch {
|
|
634
|
+
return DEFAULT_UPDATE_CONFIG;
|
|
635
|
+
}
|
|
636
|
+
})(),
|
|
637
|
+
quiet: opts.json === true || opts.quiet === true || !process.stdout.isTTY
|
|
638
|
+
});
|
|
620
639
|
const payload = await gatherStatusPayload(opts);
|
|
621
640
|
if (opts.json === true) {
|
|
622
641
|
process.stdout.write(`${JSON.stringify({ ok: true, data: payload })}
|
|
@@ -952,7 +971,11 @@ async function handoff(opts) {
|
|
|
952
971
|
|
|
953
972
|
// src/commands/home.ts
|
|
954
973
|
import { hostLaunchDirective as hostLaunchDirective2 } from "@noir-ai/adapters";
|
|
955
|
-
import {
|
|
974
|
+
import {
|
|
975
|
+
loadProjectInfo as loadProjectInfo5,
|
|
976
|
+
NOIR_VERSION as NOIR_VERSION3,
|
|
977
|
+
readInstallRecord
|
|
978
|
+
} from "@noir-ai/core";
|
|
956
979
|
|
|
957
980
|
// src/banner.ts
|
|
958
981
|
import gradient from "gradient-string";
|
|
@@ -995,6 +1018,11 @@ function tryProject() {
|
|
|
995
1018
|
return null;
|
|
996
1019
|
}
|
|
997
1020
|
}
|
|
1021
|
+
function shouldShowMigrationBanner(rec, currentVersion) {
|
|
1022
|
+
if (rec.method === "native") return false;
|
|
1023
|
+
if (rec.dismissedVersions?.includes(currentVersion)) return false;
|
|
1024
|
+
return true;
|
|
1025
|
+
}
|
|
998
1026
|
var COMMANDS_HINT = "Commands: init \xB7 create \xB7 sync \xB7 status \xB7 context \xB7 memory \xB7 skills \xB7 task \xB7 daemon \xB7 doctor";
|
|
999
1027
|
async function home(opts, deps) {
|
|
1000
1028
|
if (isInteractive(opts) && opts.tui !== false) {
|
|
@@ -1010,6 +1038,18 @@ async function home(opts, deps) {
|
|
|
1010
1038
|
async function runMenu(opts, deps) {
|
|
1011
1039
|
const clack = await import("@clack/prompts");
|
|
1012
1040
|
const project = tryProject();
|
|
1041
|
+
void runAsyncUpdateCheck({
|
|
1042
|
+
env: process.env,
|
|
1043
|
+
configUpdate: (() => {
|
|
1044
|
+
try {
|
|
1045
|
+
const info2 = loadProjectInfo5(process.cwd());
|
|
1046
|
+
return info2.config.update ?? DEFAULT_UPDATE_CONFIG;
|
|
1047
|
+
} catch {
|
|
1048
|
+
return DEFAULT_UPDATE_CONFIG;
|
|
1049
|
+
}
|
|
1050
|
+
})(),
|
|
1051
|
+
quiet: opts.json === true || opts.quiet === true || !process.stdout.isTTY
|
|
1052
|
+
});
|
|
1013
1053
|
if (shouldShowBanner(opts)) {
|
|
1014
1054
|
const host = project?.host ?? "claude";
|
|
1015
1055
|
process.stderr.write(
|
|
@@ -1020,6 +1060,15 @@ ${NOIR_TAGLINE}
|
|
|
1020
1060
|
${hostLaunchDirective2(host)}
|
|
1021
1061
|
${COMMANDS_HINT}
|
|
1022
1062
|
|
|
1063
|
+
`
|
|
1064
|
+
);
|
|
1065
|
+
}
|
|
1066
|
+
const rec = readInstallRecord();
|
|
1067
|
+
if (rec && shouldShowMigrationBanner(rec, NOIR_VERSION3)) {
|
|
1068
|
+
process.stderr.write(
|
|
1069
|
+
`
|
|
1070
|
+
${c.warn(`noir installed via ${rec.method}`)} \u2014 consider \`noir install\` for the native path (auto-update, no npm prefix/PATH issues). Dismiss with: \`noir install --dismiss\` (persisted per version).
|
|
1071
|
+
|
|
1023
1072
|
`
|
|
1024
1073
|
);
|
|
1025
1074
|
}
|
|
@@ -1500,7 +1549,7 @@ function emitDeprecationHintsFor(cmd, opts) {
|
|
|
1500
1549
|
}
|
|
1501
1550
|
function createProgram() {
|
|
1502
1551
|
const program2 = new Command();
|
|
1503
|
-
program2.name("noir").description("Noir \u2014 discipline, context, and memory layer for agentic CLIs.").version(
|
|
1552
|
+
program2.name("noir").description("Noir \u2014 discipline, context, and memory layer for agentic CLIs.").version(NOIR_VERSION4, "-v, --version").addOption(new Option("--json", "emit machine-readable JSON to stdout")).addOption(new Option("--no-input", "never prompt; error if input is required")).addOption(new Option("--quiet", "suppress non-essential diagnostics")).addOption(new Option("--verbose", "show additional diagnostic detail")).addOption(new Option("--cwd <path>", "run as if started in <path>")).addOption(
|
|
1504
1553
|
new Option("--tui", "prefer the interactive home menu for bare `noir` (advisory; TTY-only)")
|
|
1505
1554
|
).addOption(
|
|
1506
1555
|
new Option(
|
|
@@ -1575,7 +1624,7 @@ function createProgram() {
|
|
|
1575
1624
|
const transport = opts.transport === "streamable-http" ? "streamable-http" : "stdio";
|
|
1576
1625
|
const force = opts.force === true;
|
|
1577
1626
|
const host = parseHost(opts.host);
|
|
1578
|
-
const { create } = await import("./create-
|
|
1627
|
+
const { create } = await import("./create-P4M52LZZ.js");
|
|
1579
1628
|
const result = await create(dir, {
|
|
1580
1629
|
transport,
|
|
1581
1630
|
url: opts.url,
|
|
@@ -1613,7 +1662,7 @@ function createProgram() {
|
|
|
1613
1662
|
).choices(SUPPORTED_HOSTS)
|
|
1614
1663
|
).action(
|
|
1615
1664
|
async (opts, cmd) => {
|
|
1616
|
-
const { sync } = await import("./sync-
|
|
1665
|
+
const { sync } = await import("./sync-35DR6DNN.js");
|
|
1617
1666
|
const host = parseHost(opts.host);
|
|
1618
1667
|
const force = opts.force === true;
|
|
1619
1668
|
const merge = opts.merge === true;
|
|
@@ -1804,6 +1853,30 @@ function createProgram() {
|
|
|
1804
1853
|
taskGrp.action(() => {
|
|
1805
1854
|
throw new NoirCliError(EXIT.USAGE, "Usage: noir task new|status|advance|next");
|
|
1806
1855
|
});
|
|
1856
|
+
const installCmd = program2.command("install").description(
|
|
1857
|
+
"install Noir via the native managed-Node path (or migrate from another install method)"
|
|
1858
|
+
).option("--list", "list detected install methods").option("--uninstall-prev", "after a successful migrate, uninstall the previous install method").option(
|
|
1859
|
+
"--dismiss",
|
|
1860
|
+
"dismiss the migration banner for the current version (persists in install.json)"
|
|
1861
|
+
).argument("[spec]", "channel ('latest'|'beta') or exact version (default: latest)").action(
|
|
1862
|
+
async (spec, opts, cmd) => {
|
|
1863
|
+
const { install } = await import("./install-XACGZ235.js");
|
|
1864
|
+
const cli = cmd.optsWithGlobals();
|
|
1865
|
+
await install({
|
|
1866
|
+
...cli,
|
|
1867
|
+
spec,
|
|
1868
|
+
list: opts.list === true,
|
|
1869
|
+
uninstallPrev: opts.uninstallPrev === true,
|
|
1870
|
+
dismiss: opts.dismiss === true
|
|
1871
|
+
});
|
|
1872
|
+
}
|
|
1873
|
+
);
|
|
1874
|
+
installCmd.alias("migrate");
|
|
1875
|
+
program2.command("update").description("update Noir to the latest version via the active install method").option("--check", "check for a new version without changing anything").argument("[spec]", "channel ('latest'|'beta') or exact version (default: latest)").action(async (spec, opts, cmd) => {
|
|
1876
|
+
const { update } = await import("./update-J3TAORFX.js");
|
|
1877
|
+
const cli = cmd.optsWithGlobals();
|
|
1878
|
+
await update({ ...cli, spec, check: opts.check === true });
|
|
1879
|
+
});
|
|
1807
1880
|
function buildHandoffOptions(g) {
|
|
1808
1881
|
return { ...toCliOptions(g), ...g.write === true ? { write: true } : {} };
|
|
1809
1882
|
}
|