mneme-ai 2.85.0 → 2.86.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/dist/commands/heph.d.ts +23 -0
- package/dist/commands/heph.d.ts.map +1 -0
- package/dist/commands/heph.js +97 -0
- package/dist/commands/heph.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.86.0 — `mneme heph <action>` (alias `hephaestus`) · GEPHYRA's OS lane.
|
|
3
|
+
*
|
|
4
|
+
* heph cross --command "..." --agent X [--host H] [--cosign]
|
|
5
|
+
* decide (ALLOW/NEEDS_COSIGN/BLOCK) — risk + policy + immune + signed provenance.
|
|
6
|
+
* heph run --command "..." --agent X [--cosign] cross THEN execute IF allowed (guarded).
|
|
7
|
+
* heph polyglot --intent "list listening ports" translate to THIS OS's shell.
|
|
8
|
+
* heph policy --set "destructive must co-sign; prod is read-only" show parsed policy.
|
|
9
|
+
* heph status crossings + blocked + chain intact.
|
|
10
|
+
*/
|
|
11
|
+
export interface HephOpts {
|
|
12
|
+
cwd: string;
|
|
13
|
+
action: string;
|
|
14
|
+
command?: string;
|
|
15
|
+
agent?: string;
|
|
16
|
+
host?: string;
|
|
17
|
+
cosign?: boolean;
|
|
18
|
+
intent?: string;
|
|
19
|
+
policyText?: string;
|
|
20
|
+
json?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function hephCommand(o: HephOpts): Promise<number>;
|
|
23
|
+
//# sourceMappingURL=heph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heph.d.ts","sourceRoot":"","sources":["../../src/commands/heph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAClE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;CACtD;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAkD9D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.86.0 — `mneme heph <action>` (alias `hephaestus`) · GEPHYRA's OS lane.
|
|
3
|
+
*
|
|
4
|
+
* heph cross --command "..." --agent X [--host H] [--cosign]
|
|
5
|
+
* decide (ALLOW/NEEDS_COSIGN/BLOCK) — risk + policy + immune + signed provenance.
|
|
6
|
+
* heph run --command "..." --agent X [--cosign] cross THEN execute IF allowed (guarded).
|
|
7
|
+
* heph polyglot --intent "list listening ports" translate to THIS OS's shell.
|
|
8
|
+
* heph policy --set "destructive must co-sign; prod is read-only" show parsed policy.
|
|
9
|
+
* heph status crossings + blocked + chain intact.
|
|
10
|
+
*/
|
|
11
|
+
import { writeSync } from "node:fs";
|
|
12
|
+
import * as core from "@mneme-ai/core";
|
|
13
|
+
function out(s) { try {
|
|
14
|
+
writeSync(1, s);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
process.stdout.write(s);
|
|
18
|
+
} }
|
|
19
|
+
export async function hephCommand(o) {
|
|
20
|
+
const h = core.hephaestus;
|
|
21
|
+
const policy = o.policyText ? h.parsePolicy(o.policyText) : undefined;
|
|
22
|
+
if (o.action === "cross" || o.action === "run") {
|
|
23
|
+
if (!o.command || !o.agent) {
|
|
24
|
+
out("✗ requires --command and --agent\n");
|
|
25
|
+
return 2;
|
|
26
|
+
}
|
|
27
|
+
const r = await h.crossCommand(o.cwd, { command: o.command, agent: o.agent, host: o.host, cosigned: !!o.cosign }, { policy });
|
|
28
|
+
const icon = r.disposition === "ALLOW" ? "🟢" : r.disposition === "NEEDS_COSIGN" ? "🟡" : "🔴";
|
|
29
|
+
if (o.action === "run") {
|
|
30
|
+
const ex = await h.executeGuarded(o.cwd, { command: o.command, agent: o.agent, disposition: r.disposition });
|
|
31
|
+
if (o.json) {
|
|
32
|
+
out(JSON.stringify({ crossing: r, exec: ex }, null, 2) + "\n");
|
|
33
|
+
return ex.ran ? (ex.exitCode ?? 0) : 1;
|
|
34
|
+
}
|
|
35
|
+
out(`🔨 HEPHAESTUS run — ${icon} ${r.disposition} (${r.risk})\n`);
|
|
36
|
+
for (const x of r.reasons)
|
|
37
|
+
out(` • ${x}\n`);
|
|
38
|
+
if (ex.ran) {
|
|
39
|
+
out(` ▸ executed (exit ${ex.exitCode})\n`);
|
|
40
|
+
if (ex.stdout.trim())
|
|
41
|
+
out(ex.stdout.trimEnd() + "\n");
|
|
42
|
+
if (ex.outputThreats.length)
|
|
43
|
+
out(` 🛑 output had ${ex.outputThreats.length} injection signature(s) — NOT fed back blindly\n`);
|
|
44
|
+
}
|
|
45
|
+
else
|
|
46
|
+
out(` ▸ NOT executed (${ex.reason})\n`);
|
|
47
|
+
return ex.ran ? (ex.exitCode ?? 0) : 1;
|
|
48
|
+
}
|
|
49
|
+
if (o.json) {
|
|
50
|
+
out(JSON.stringify(r, null, 2) + "\n");
|
|
51
|
+
return r.disposition === "BLOCK" ? 1 : 0;
|
|
52
|
+
}
|
|
53
|
+
out(`🔨 HEPHAESTUS crossing — ${icon} ${r.disposition} (${r.risk}) · by ${r.origin}:${r.agent}${r.host ? ` @ ${r.host}` : ""}\n`);
|
|
54
|
+
for (const x of r.reasons)
|
|
55
|
+
out(` • ${x}\n`);
|
|
56
|
+
for (const t of r.threats)
|
|
57
|
+
out(` 🛑 ${t.kind}: "${t.match}"\n`);
|
|
58
|
+
if (r.tribunal)
|
|
59
|
+
out(` ⚖ tribunal: ${r.tribunal.consensus} (${r.tribunal.verdicts.map((v) => `${v.vendor}=${v.verdict}`).join(", ")})\n`);
|
|
60
|
+
out(` stamp: ${r.receipt ? r.receipt.receiptId.slice(0, 16) + "… (verifies offline)" : "(unsigned)"}\n`);
|
|
61
|
+
return r.disposition === "BLOCK" ? 1 : 0;
|
|
62
|
+
}
|
|
63
|
+
if (o.action === "polyglot") {
|
|
64
|
+
if (!o.intent) {
|
|
65
|
+
out(`✗ requires --intent. Known: ${h.polyglotIntents().join(" · ")}\n`);
|
|
66
|
+
return 2;
|
|
67
|
+
}
|
|
68
|
+
const t = h.polyglot(o.intent);
|
|
69
|
+
if (!t) {
|
|
70
|
+
out(`✗ unknown intent "${o.intent}". Known: ${h.polyglotIntents().join(" · ")}\n`);
|
|
71
|
+
return 2;
|
|
72
|
+
}
|
|
73
|
+
if (o.json) {
|
|
74
|
+
out(JSON.stringify(t, null, 2) + "\n");
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
out(`🌐 ${t.intent} → [${t.platform}] ${t.command}\n`);
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
if (o.action === "policy") {
|
|
81
|
+
const p = policy ?? h.DEFAULT_POLICY;
|
|
82
|
+
out(JSON.stringify(p, null, 2) + "\n");
|
|
83
|
+
return 0;
|
|
84
|
+
}
|
|
85
|
+
if (o.action === "status") {
|
|
86
|
+
const s = h.hephaestusStatus(o.cwd);
|
|
87
|
+
if (o.json) {
|
|
88
|
+
out(JSON.stringify(s, null, 2) + "\n");
|
|
89
|
+
return 0;
|
|
90
|
+
}
|
|
91
|
+
out(`🔨 HEPHAESTUS status\n crossings: ${s.crossings} (🟢 ${s.allowed} allowed · 🟡 ${s.needsCosign} need co-sign · 🔴 ${s.blocked} blocked)\n black box: ${s.chainValid ? "INTACT ✓" : "TAMPERED ✗"}\n`);
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
out(`✗ Unknown heph action "${o.action}". Try: cross | run | polyglot | policy | status\n`);
|
|
95
|
+
return 2;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=heph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heph.js","sourceRoot":"","sources":["../../src/commands/heph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAEvC,SAAS,GAAG,CAAC,CAAS,IAAU,IAAI,CAAC;IAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAAC,CAAC;AAAC,MAAM,CAAC;IAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAAC,CAAC,CAAC,CAAC;AAQ7F,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,CAAW;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC/C,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACpF,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9H,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/F,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7G,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YACvH,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;YAClE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;gBAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC;gBAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC,QAAQ,KAAK,CAAC,CAAC;gBAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;oBAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;gBAAC,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM;oBAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC,aAAa,CAAC,MAAM,kDAAkD,CAAC,CAAC;YAAC,CAAC;;gBAChP,GAAG,CAAC,sBAAsB,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;YAC/C,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QACjG,GAAG,CAAC,4BAA4B,IAAI,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;YAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;YAAE,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,CAAC,QAAQ;YAAE,GAAG,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,SAAS,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3I,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QAC3G,OAAO,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACrG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACzG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACjE,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,cAAc,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QACjE,GAAG,CAAC,sCAAsC,CAAC,CAAC,SAAS,SAAS,CAAC,CAAC,OAAO,iBAAiB,CAAC,CAAC,WAAW,sBAAsB,CAAC,CAAC,OAAO,2BAA2B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;QAC7M,OAAO,CAAC,CAAC;IACX,CAAC;IAED,GAAG,CAAC,0BAA0B,CAAC,CAAC,MAAM,oDAAoD,CAAC,CAAC;IAC5F,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuIA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuIA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAi+MvD"}
|
package/dist/index.js
CHANGED
|
@@ -4326,6 +4326,24 @@ export async function run(argv) {
|
|
|
4326
4326
|
const { gephyraCommand } = await import("./commands/gephyra.js");
|
|
4327
4327
|
process.exit(await gephyraCommand({ cwd: process.cwd(), action, claim: o.claim, from: o.from, to: o.to, frameAction: o.action, port: o.port, json: !!o.json }));
|
|
4328
4328
|
});
|
|
4329
|
+
// v2.86.0 — HEPHAESTUS (GEPHYRA's OS lane). The neutral substrate a shell + AI
|
|
4330
|
+
// run ON: a command CROSSES it (risk → policy → tribunal → immune → signed
|
|
4331
|
+
// provenance) before touching the machine. Decision-first, execution-optional.
|
|
4332
|
+
program
|
|
4333
|
+
.command("heph <action>")
|
|
4334
|
+
.aliases(["hephaestus"])
|
|
4335
|
+
.description("🔨 HEPHAESTUS — GEPHYRA's OS lane: a command crosses the bridge (risk-classify · policy · cross-vendor tribunal · output immune-scan · signed provenance) before it touches the machine. `cross --command \"...\" --agent X` decides ALLOW/NEEDS_COSIGN/BLOCK; `run` executes IF allowed (guarded); `polyglot --intent \"...\"` translates to this OS's shell; `status`. Destructive is NEVER allowed without a human co-sign.")
|
|
4336
|
+
.option("--command <c>", "the command crossing into the OS")
|
|
4337
|
+
.option("--agent <a>", "who is asking — 'human' or an AI id (claude/grok/…)")
|
|
4338
|
+
.option("--host <h>", "host/context tag (a 'prod' substring triggers prod read-only)")
|
|
4339
|
+
.option("--cosign", "a human co-sign is provided for a destructive op", false)
|
|
4340
|
+
.option("--intent <i>", "canonical intent for polyglot translation")
|
|
4341
|
+
.option("--set <policy>", "plain-language policy for `policy` (e.g. 'destructive must co-sign; prod is read-only')")
|
|
4342
|
+
.option("--json", "machine-readable output", false)
|
|
4343
|
+
.action(async (action, o) => {
|
|
4344
|
+
const { hephCommand } = await import("./commands/heph.js");
|
|
4345
|
+
process.exit(await hephCommand({ cwd: process.cwd(), action, command: o.command, agent: o.agent, host: o.host, cosign: !!o.cosign, intent: o.intent, policyText: o.set, json: !!o.json }));
|
|
4346
|
+
});
|
|
4329
4347
|
program
|
|
4330
4348
|
.command("atlas")
|
|
4331
4349
|
.description("🗺 ATLAS HELP — six-layer discovery (TASTE · BLOOM · HOT · TAGS · INTENT · FULL). AI agents read 200 bytes here instead of 14 KB from --help.")
|