@jeger-ai/opengantry 1.1.0 → 1.1.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 +4 -3
- package/dist/cli/commands/legislate.d.ts +1 -20
- package/dist/cli/commands/legislate.d.ts.map +1 -1
- package/dist/cli/commands/legislate.js +1 -142
- package/dist/cli/commands/legislate.js.map +1 -1
- package/dist/cli/commands/onboarding.d.ts.map +1 -1
- package/dist/cli/commands/onboarding.js +5 -3
- package/dist/cli/commands/onboarding.js.map +1 -1
- package/dist/cli/commands/verify.d.ts.map +1 -1
- package/dist/cli/commands/verify.js +20 -72
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/lib/audience-output.d.ts +1 -0
- package/dist/cli/lib/audience-output.d.ts.map +1 -1
- package/dist/cli/lib/audience-output.js +13 -0
- package/dist/cli/lib/audience-output.js.map +1 -1
- package/dist/cli/lib/break-glass-flow.d.ts +18 -0
- package/dist/cli/lib/break-glass-flow.d.ts.map +1 -0
- package/dist/cli/lib/break-glass-flow.js +29 -0
- package/dist/cli/lib/break-glass-flow.js.map +1 -0
- package/dist/cli/lib/cli-io.d.ts +6 -1
- package/dist/cli/lib/cli-io.d.ts.map +1 -1
- package/dist/cli/lib/cli-io.js +13 -2
- package/dist/cli/lib/cli-io.js.map +1 -1
- package/dist/cli/lib/command-reporter.d.ts +24 -0
- package/dist/cli/lib/command-reporter.d.ts.map +1 -0
- package/dist/cli/lib/command-reporter.js +55 -0
- package/dist/cli/lib/command-reporter.js.map +1 -0
- package/dist/cli/lib/fix-hints.d.ts +4 -7
- package/dist/cli/lib/fix-hints.d.ts.map +1 -1
- package/dist/cli/lib/fix-hints.js +32 -0
- package/dist/cli/lib/fix-hints.js.map +1 -1
- package/dist/cli/lib/forbidden-scan.d.ts.map +1 -1
- package/dist/cli/lib/forbidden-scan.js +2 -2
- package/dist/cli/lib/forbidden-scan.js.map +1 -1
- package/dist/cli/lib/git-proof.d.ts.map +1 -1
- package/dist/cli/lib/git-proof.js +2 -1
- package/dist/cli/lib/git-proof.js.map +1 -1
- package/dist/cli/lib/git-repo.d.ts +9 -2
- package/dist/cli/lib/git-repo.d.ts.map +1 -1
- package/dist/cli/lib/git-repo.js +5 -4
- package/dist/cli/lib/git-repo.js.map +1 -1
- package/dist/cli/lib/gxt-error-codes.d.ts +1 -0
- package/dist/cli/lib/gxt-error-codes.d.ts.map +1 -1
- package/dist/cli/lib/gxt-error-codes.js +2 -0
- package/dist/cli/lib/gxt-error-codes.js.map +1 -1
- package/dist/cli/lib/init-tutorial.d.ts.map +1 -1
- package/dist/cli/lib/init-tutorial.js +8 -13
- package/dist/cli/lib/init-tutorial.js.map +1 -1
- package/dist/cli/lib/legislate-core.d.ts +21 -0
- package/dist/cli/lib/legislate-core.d.ts.map +1 -0
- package/dist/cli/lib/legislate-core.js +144 -0
- package/dist/cli/lib/legislate-core.js.map +1 -0
- package/dist/cli/lib/mcp-legislation-draft.d.ts +6 -0
- package/dist/cli/lib/mcp-legislation-draft.d.ts.map +1 -0
- package/dist/cli/lib/mcp-legislation-draft.js +62 -0
- package/dist/cli/lib/mcp-legislation-draft.js.map +1 -0
- package/dist/cli/lib/mcp-legislation-execute.d.ts +6 -0
- package/dist/cli/lib/mcp-legislation-execute.d.ts.map +1 -0
- package/dist/cli/lib/mcp-legislation-execute.js +43 -0
- package/dist/cli/lib/mcp-legislation-execute.js.map +1 -0
- package/dist/cli/lib/mcp-legislation-mission.d.ts +12 -0
- package/dist/cli/lib/mcp-legislation-mission.d.ts.map +1 -0
- package/dist/cli/lib/mcp-legislation-mission.js +82 -0
- package/dist/cli/lib/mcp-legislation-mission.js.map +1 -0
- package/dist/cli/lib/mcp-legislation-types.d.ts +68 -0
- package/dist/cli/lib/mcp-legislation-types.d.ts.map +1 -0
- package/dist/cli/lib/mcp-legislation-types.js +4 -0
- package/dist/cli/lib/mcp-legislation-types.js.map +1 -0
- package/dist/cli/lib/mcp-legislation.d.ts +4 -81
- package/dist/cli/lib/mcp-legislation.d.ts.map +1 -1
- package/dist/cli/lib/mcp-legislation.js +3 -180
- package/dist/cli/lib/mcp-legislation.js.map +1 -1
- package/dist/cli/lib/mcp-runtime.d.ts +3 -3
- package/dist/cli/lib/mcp-runtime.d.ts.map +1 -1
- package/dist/cli/lib/mission-legislative-stub.d.ts.map +1 -1
- package/dist/cli/lib/mission-legislative-stub.js +3 -2
- package/dist/cli/lib/mission-legislative-stub.js.map +1 -1
- package/dist/cli/lib/mission-yaml.d.ts +6 -0
- package/dist/cli/lib/mission-yaml.d.ts.map +1 -1
- package/dist/cli/lib/mission-yaml.js +4 -0
- package/dist/cli/lib/mission-yaml.js.map +1 -1
- package/dist/cli/lib/runtime-env.d.ts.map +1 -1
- package/dist/cli/lib/runtime-env.js +3 -2
- package/dist/cli/lib/runtime-env.js.map +1 -1
- package/dist/cli/lib/start-orchestration.js +1 -1
- package/dist/cli/lib/start-orchestration.js.map +1 -1
- package/dist/cli/lib/trace-evidence.d.ts +2 -11
- package/dist/cli/lib/trace-evidence.d.ts.map +1 -1
- package/dist/cli/lib/trace-evidence.js +19 -49
- package/dist/cli/lib/trace-evidence.js.map +1 -1
- package/dist/cli/lib/trace-status.d.ts +7 -0
- package/dist/cli/lib/trace-status.d.ts.map +1 -0
- package/dist/cli/lib/trace-status.js +20 -0
- package/dist/cli/lib/trace-status.js.map +1 -0
- package/dist/cli/lib/trace.d.ts +9 -0
- package/dist/cli/lib/trace.d.ts.map +1 -1
- package/dist/cli/lib/trace.js +47 -4
- package/dist/cli/lib/trace.js.map +1 -1
- package/dist/cli/lib/upgrade-plan.d.ts.map +1 -1
- package/dist/cli/lib/upgrade-plan.js +9 -7
- package/dist/cli/lib/upgrade-plan.js.map +1 -1
- package/dist/cli/lib/verify-engine.d.ts.map +1 -1
- package/dist/cli/lib/verify-engine.js +28 -16
- package/dist/cli/lib/verify-engine.js.map +1 -1
- package/dist/cli/lib/verify-failure-presentation.d.ts +1 -2
- package/dist/cli/lib/verify-failure-presentation.d.ts.map +1 -1
- package/dist/cli/lib/verify-failure-presentation.js +13 -21
- package/dist/cli/lib/verify-failure-presentation.js.map +1 -1
- package/dist/cli/lib/verify-flow.d.ts +3 -3
- package/dist/cli/lib/verify-flow.d.ts.map +1 -1
- package/dist/cli/lib/verify-flow.js +29 -49
- package/dist/cli/lib/verify-flow.js.map +1 -1
- package/dist/cli/lib/verify-remediation.d.ts +17 -0
- package/dist/cli/lib/verify-remediation.d.ts.map +1 -0
- package/dist/cli/lib/verify-remediation.js +5 -0
- package/dist/cli/lib/verify-remediation.js.map +1 -0
- package/dist/cli/lib/verify-repair.d.ts +2 -2
- package/dist/cli/lib/verify-repair.d.ts.map +1 -1
- package/dist/cli/lib/verify-repair.js +15 -20
- package/dist/cli/lib/verify-repair.js.map +1 -1
- package/dist/cli/lib/verify-result-payload.d.ts +2 -2
- package/dist/cli/lib/verify-result-payload.d.ts.map +1 -1
- package/dist/cli/lib/verify-result-payload.js +22 -4
- package/dist/cli/lib/verify-result-payload.js.map +1 -1
- package/dist/cli/lib/verify-run.d.ts +16 -0
- package/dist/cli/lib/verify-run.d.ts.map +1 -0
- package/dist/cli/lib/verify-run.js +62 -0
- package/dist/cli/lib/verify-run.js.map +1 -0
- package/dist/cli/lib/version.gen.d.ts +1 -1
- package/dist/cli/lib/version.gen.js +1 -1
- package/dist/cli/program-workflow.js +2 -2
- package/dist/cli/program-workflow.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ Developing this repository from source: `npm ci && npm run build` — see [gapma
|
|
|
37
37
|
| **Regulated / ISO-aligned workflows** | SOD, mission authorization, and Git-native trace — see [`docs/COMPLIANCE-ISO.md`](docs/COMPLIANCE-ISO.md) (27001 change control, 42001 AI governance) |
|
|
38
38
|
| **Faster recovery from failure** | Stable `GXT_*` error codes, `gapman verify --fix`, role output via `--audience worker\|teacher\|verifier` |
|
|
39
39
|
|
|
40
|
-
**Protocol maturity:** substrate law **v0.5.0**; **`gapman` v1.1.
|
|
40
|
+
**Protocol maturity:** substrate law **v0.5.0**; **`gapman` v1.1.1** — maintainability hardening (lib/command boundary, unified verify core, CommandReporter). See [.gitagent/teacher/RUNTIME.md](.gitagent/teacher/RUNTIME.md).
|
|
41
41
|
|
|
42
42
|
## v1.0 adoption release
|
|
43
43
|
|
|
@@ -47,6 +47,7 @@ Developing this repository from source: `npm ci && npm run build` — see [gapma
|
|
|
47
47
|
|---------|------------|
|
|
48
48
|
| **v0.9.0** | `gapman start`, `verify --fix`, `status --json`, `onboarding`, GXT error codes |
|
|
49
49
|
| **v1.0.0** | `gapman init --tutorial`, global `--audience` / `GXT_AUDIENCE`, adoption-first README + runbook |
|
|
50
|
+
| **v1.1.1** | Lib/command boundary, unified `runVerifyCore`, typed remediation, CommandReporter, mission YAML emitter |
|
|
50
51
|
| **v1.1.0** | Stale trace evidence, mission purity PR lock, CI target lock, `verify --json`, doctor substrate drift warn |
|
|
51
52
|
|
|
52
53
|
## What you get
|
|
@@ -178,7 +179,7 @@ Requires **Node.js 24+** (Active LTS line). Published as **`@jeger-ai/opengantry
|
|
|
178
179
|
| `gapman mission snapshot --file <path>` | Write start-state JSON under `.gitagent/history/` (git HEAD, branch, dirty flag, manifest hash, hashes of files under the mission skill's `tmvc_roots`). |
|
|
179
180
|
| `gapman runtime env --mission <path>` | Worker Runtime Contract: emit `GXT_REPO_ROOT`, `GXT_MISSION_FILE`, `GXT_MSN_ID`, `GXT_SKILL_KEY`, `GXT_TMVC_ROOTS`, `GXT_FORBIDDEN_ZONES`, `GXT_WORKER_LOG`. Default: POSIX `export …` lines; `--json` for scripts. [.gitagent/teacher/RUNTIME.md](.gitagent/teacher/RUNTIME.md). |
|
|
180
181
|
| `gapman runtime exec --mission <path> -- <cmd…>` | Run worker command with mission env, telemetry capture, and forbidden-zone scan (strongest TMVC trap). |
|
|
181
|
-
| `gapman mcp serve` | Stdio MCP server exposing `gxt_*` tools (legislation, pin, runtime env, verify with `fix_hints`, `gxt_start_orchestration`, exec). Configure via `.cursor/mcp.json`. |
|
|
182
|
+
| `gapman mcp serve` | Stdio MCP server exposing `gxt_*` tools (legislation, pin, runtime env, verify with `fix_hints`, `gxt_start_orchestration`, exec). `gxt_verify` uses the flat `--json` envelope — see [ADOPTION.md § MCP verify envelope](docs/ADOPTION.md). Configure via `.cursor/mcp.json`. |
|
|
182
183
|
| `gapman verify --mission <path>` | Teacher-approved mission commit + gate + trace. **`--json`** structured output (`status`, `phase`, `error_code`, `fix_hints`). **`--fix`** guided repair. CI: `--audience verifier` (errors only). Failures emit **`GXT_*`** codes. |
|
|
183
184
|
| `gapman arch pointer` | Print architecture pointer summary for agents (`.gitagent/ARCHITECTURE.pointer.json`). |
|
|
184
185
|
| `gapman arch cred status\|set\|unset` | Git-ignored credential slots for authenticated external architecture sources (secrets via stdin only). |
|
|
@@ -330,7 +331,7 @@ GXT deliberately trades "always-on improvisation" for a **narrow, inspectable en
|
|
|
330
331
|
|
|
331
332
|
## Relationship to this repository
|
|
332
333
|
|
|
333
|
-
**jeger-ai/opengantry** is the **canonical reference tree** for **GXT** (manifest `schema_version` **v0.5.0** law + **`gapman` v1.1.
|
|
334
|
+
**jeger-ai/opengantry** is the **canonical reference tree** for **GXT** (manifest `schema_version` **v0.5.0** law + **`gapman` v1.1.1** CLI). Install the CLI with `npm install -g @jeger-ai/opengantry`, or fork this repo and run `gapman init` in your project.
|
|
334
335
|
|
|
335
336
|
## Security
|
|
336
337
|
|
|
@@ -1,21 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
intent: string;
|
|
3
|
-
msn?: string;
|
|
4
|
-
skillKey?: string;
|
|
5
|
-
out?: string;
|
|
6
|
-
allowDuplicate?: boolean;
|
|
7
|
-
gateCommand?: string;
|
|
8
|
-
gateSuccessSubstring?: string;
|
|
9
|
-
/** When true, skip stdout info messages (MCP / structured JSON callers). */
|
|
10
|
-
silent?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export type LegislateResult = {
|
|
13
|
-
ok: true;
|
|
14
|
-
missionAbs: string;
|
|
15
|
-
missionRel: string;
|
|
16
|
-
} | {
|
|
17
|
-
ok: false;
|
|
18
|
-
exitCode: 2;
|
|
19
|
-
};
|
|
20
|
-
export declare function runLegislate(options: LegislateOptions): LegislateResult;
|
|
1
|
+
export { runLegislate, type LegislateOptions, type LegislateResult, } from "../lib/legislate-core.js";
|
|
21
2
|
//# sourceMappingURL=legislate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legislate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/legislate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"legislate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/legislate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,0BAA0B,CAAC"}
|
|
@@ -1,143 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { CLI_NAME } from "../lib/constants.js";
|
|
4
|
-
import { buildLegislativeTraceRows } from "../lib/mission-yaml.js";
|
|
5
|
-
import { formatRepoRelative, logError, logInfo, logWarn, } from "../lib/cli-io.js";
|
|
6
|
-
import { isValidMsnId } from "../lib/msn.js";
|
|
7
|
-
import { extractMsnIdFromMissionPath } from "../lib/mission-msn.js";
|
|
8
|
-
import { resolveSkillKeyForLegislation } from "../lib/legislate-skill.js";
|
|
9
|
-
import { loadWorkspace } from "../lib/workspace.js";
|
|
10
|
-
import YAML from "yaml";
|
|
11
|
-
/** Slug for filename: alphanumeric + hyphen, capped length */
|
|
12
|
-
function intentSlug(intent, maxLen) {
|
|
13
|
-
const s = intent
|
|
14
|
-
.trim()
|
|
15
|
-
.toLowerCase()
|
|
16
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
17
|
-
.replace(/^-+|-+$/g, "")
|
|
18
|
-
.slice(0, maxLen);
|
|
19
|
-
return s || "mission";
|
|
20
|
-
}
|
|
21
|
-
function buildYamlMissionBody(opts) {
|
|
22
|
-
const doc = {
|
|
23
|
-
msn_id: opts.msn_id,
|
|
24
|
-
skill_key: opts.skill_key,
|
|
25
|
-
gate_command: opts.gate_command,
|
|
26
|
-
trace_rows: buildLegislativeTraceRows(),
|
|
27
|
-
};
|
|
28
|
-
if (opts.gate_success_substring !== null) {
|
|
29
|
-
doc.gate_success_substring = opts.gate_success_substring;
|
|
30
|
-
}
|
|
31
|
-
const header = `# OpenGantry mission scaffold (Teacher: fill gate, TMVC narrowing, trace rows).\n` +
|
|
32
|
-
`# Legislated intent: ${opts.intent.trim().replace(/\n/g, " ")}\n`;
|
|
33
|
-
return `${header}${YAML.stringify(doc)}`;
|
|
34
|
-
}
|
|
35
|
-
function resolveLegislateSkillKey(options, root, manifest) {
|
|
36
|
-
const resolved = resolveSkillKeyForLegislation({
|
|
37
|
-
root,
|
|
38
|
-
manifest,
|
|
39
|
-
intent: options.intent,
|
|
40
|
-
skillKey: options.skillKey,
|
|
41
|
-
});
|
|
42
|
-
if (!resolved.ok) {
|
|
43
|
-
logError(`legislate: ${resolved.reason}`);
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
return resolved.skillKey;
|
|
47
|
-
}
|
|
48
|
-
function resolveLegislateOutputPath(root, options, msnId) {
|
|
49
|
-
const slug = intentSlug(options.intent, 48);
|
|
50
|
-
const defaultFilename = `.gitagent/missions/${msnId}.${slug}.yaml`;
|
|
51
|
-
const outRel = options.out?.trim() || defaultFilename;
|
|
52
|
-
const absolute = path.isAbsolute(outRel)
|
|
53
|
-
? path.resolve(outRel)
|
|
54
|
-
: path.join(root, outRel.replace(/\\/g, path.sep));
|
|
55
|
-
const normRel = path.relative(root, path.resolve(absolute)).split(path.sep).join("/");
|
|
56
|
-
if (!normRel || normRel.startsWith("..")) {
|
|
57
|
-
logError(`legislate: output path outside repository (${absolute})`);
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
if (!normRel.startsWith(".gitagent/missions/")) {
|
|
61
|
-
logError(`legislate: mission path must stay under .gitagent/missions/ for gapman verify (got ${normRel})`);
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
if (fs.existsSync(absolute)) {
|
|
65
|
-
logError(`legislate: output already exists ${absolute}`);
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
return absolute;
|
|
69
|
-
}
|
|
70
|
-
function findDuplicateMsnMissionPaths(root, msnId) {
|
|
71
|
-
const dupes = [];
|
|
72
|
-
const missionsDir = path.join(root, ".gitagent", "missions");
|
|
73
|
-
if (!fs.existsSync(missionsDir))
|
|
74
|
-
return dupes;
|
|
75
|
-
for (const ent of fs.readdirSync(missionsDir, { withFileTypes: true })) {
|
|
76
|
-
if (!ent.isFile())
|
|
77
|
-
continue;
|
|
78
|
-
const abs = path.join(missionsDir, ent.name);
|
|
79
|
-
try {
|
|
80
|
-
if (extractMsnIdFromMissionPath(abs) === msnId) {
|
|
81
|
-
dupes.push(formatRepoRelative(root, abs));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
// ignore malformed mission files during advisory scan
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return dupes;
|
|
89
|
-
}
|
|
90
|
-
function assertLegislateDuplicatePolicy(options, msnId, existingMissionDupes) {
|
|
91
|
-
if (existingMissionDupes.length === 0)
|
|
92
|
-
return true;
|
|
93
|
-
if (options.allowDuplicate === true) {
|
|
94
|
-
logWarn(`legislate: allowing duplicate msn ${msnId} for migration flow; existing mission file(s): ${existingMissionDupes.join(", ")}`);
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
logError(`legislate: duplicate msn ${msnId} already appears in ${existingMissionDupes.length} mission file(s): ${existingMissionDupes.join(", ")}. Re-run with --allow-duplicate only for intentional branch migrations.`);
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
function resolveLegislateGateOptions(options) {
|
|
101
|
-
const gateCommand = options.gateCommand?.trim() || "echo OK";
|
|
102
|
-
const gateSuccessSubstring = options.gateSuccessSubstring !== undefined
|
|
103
|
-
? options.gateSuccessSubstring.trim() || null
|
|
104
|
-
: gateCommand === "echo OK"
|
|
105
|
-
? "OK"
|
|
106
|
-
: null;
|
|
107
|
-
return { gateCommand, gateSuccessSubstring };
|
|
108
|
-
}
|
|
109
|
-
export function runLegislate(options) {
|
|
110
|
-
const { root, manifest } = loadWorkspace();
|
|
111
|
-
const msnId = (options.msn ?? "").trim();
|
|
112
|
-
if (!isValidMsnId(msnId)) {
|
|
113
|
-
logError('legislate: --msn must match "MSN-0007" exactly');
|
|
114
|
-
return { ok: false, exitCode: 2 };
|
|
115
|
-
}
|
|
116
|
-
const skill_key = resolveLegislateSkillKey(options, root, manifest);
|
|
117
|
-
if (!skill_key)
|
|
118
|
-
return { ok: false, exitCode: 2 };
|
|
119
|
-
const absolute = resolveLegislateOutputPath(root, options, msnId);
|
|
120
|
-
if (!absolute)
|
|
121
|
-
return { ok: false, exitCode: 2 };
|
|
122
|
-
const existingMissionDupes = findDuplicateMsnMissionPaths(root, msnId);
|
|
123
|
-
if (!assertLegislateDuplicatePolicy(options, msnId, existingMissionDupes)) {
|
|
124
|
-
return { ok: false, exitCode: 2 };
|
|
125
|
-
}
|
|
126
|
-
const { gateCommand, gateSuccessSubstring } = resolveLegislateGateOptions(options);
|
|
127
|
-
const body = buildYamlMissionBody({
|
|
128
|
-
msn_id: msnId,
|
|
129
|
-
skill_key,
|
|
130
|
-
intent: options.intent,
|
|
131
|
-
gate_command: gateCommand,
|
|
132
|
-
gate_success_substring: gateSuccessSubstring,
|
|
133
|
-
});
|
|
134
|
-
fs.mkdirSync(path.dirname(absolute), { recursive: true });
|
|
135
|
-
fs.writeFileSync(absolute, body, "utf8");
|
|
136
|
-
const missionRel = formatRepoRelative(root, absolute);
|
|
137
|
-
if (!options.silent) {
|
|
138
|
-
logInfo(`${CLI_NAME} legislate: wrote ${missionRel}`);
|
|
139
|
-
logInfo(`Teacher: git commit modifying this mission with subject starting [${msnId}] from an allowlisted Teacher email (gapman teacher show).`);
|
|
140
|
-
}
|
|
141
|
-
return { ok: true, missionAbs: absolute, missionRel };
|
|
142
|
-
}
|
|
1
|
+
export { runLegislate, } from "../lib/legislate-core.js";
|
|
143
2
|
//# sourceMappingURL=legislate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legislate.js","sourceRoot":"","sources":["../../../src/cli/commands/legislate.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"legislate.js","sourceRoot":"","sources":["../../../src/cli/commands/legislate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,0BAA0B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/onboarding.ts"],"names":[],"mappings":"AAcA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/onboarding.ts"],"names":[],"mappings":"AAcA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAuFnD"}
|
|
@@ -3,7 +3,7 @@ import { ONBOARDING_ADOPTION_DOC, onboardingRuntimeEnvHint, onboardingStatusHint
|
|
|
3
3
|
import { logError, logInfo, setExitCode } from "../lib/cli-io.js";
|
|
4
4
|
import { loadWorkspace } from "../lib/workspace.js";
|
|
5
5
|
import { runStartOrchestration } from "../lib/start-orchestration.js";
|
|
6
|
-
import {
|
|
6
|
+
import { executeVerifyMission } from "../lib/verify-run.js";
|
|
7
7
|
const EXAMPLE_MISSION = ".gitagent/missions/example.verify.yaml";
|
|
8
8
|
export async function runOnboarding() {
|
|
9
9
|
const p = await import("@clack/prompts");
|
|
@@ -72,12 +72,14 @@ export async function runOnboarding() {
|
|
|
72
72
|
initialValue: true,
|
|
73
73
|
});
|
|
74
74
|
if (!p.isCancel(runNow) && runNow) {
|
|
75
|
-
|
|
76
|
-
await runVerify({
|
|
75
|
+
const result = await executeVerifyMission({
|
|
77
76
|
mission: EXAMPLE_MISSION,
|
|
78
77
|
fix: true,
|
|
79
78
|
fixNonInteractive: true,
|
|
80
79
|
});
|
|
80
|
+
if (!result.ok) {
|
|
81
|
+
setExitCode(result.exitCode);
|
|
82
|
+
}
|
|
81
83
|
}
|
|
82
84
|
}
|
|
83
85
|
p.outro(`Onboarding complete — see ${ONBOARDING_ADOPTION_DOC} for the full loop`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../../src/cli/commands/onboarding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../../src/cli/commands/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAM5D,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAa5D,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBrE;AAED,+EAA+E;AAC/E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,aAAa,uDAI9D"}
|
|
@@ -1,88 +1,36 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { emitVerifyJson, runVerifyBreakGlass, runVerifyPhasesFromEngine } from "../lib/verify-flow.js";
|
|
5
|
-
import { runVerifyWithFix } from "../lib/verify-repair.js";
|
|
6
|
-
import { buildVerifyResultPayload, buildVerifyResultPayloadFromOptions, initFailurePayload, } from "../lib/verify-result-payload.js";
|
|
1
|
+
import { parseMissionFile } from "../lib/mission-parser.js";
|
|
2
|
+
import { initFailurePayload } from "../lib/verify-result-payload.js";
|
|
3
|
+
import { emitVerifyJson } from "../lib/verify-flow.js";
|
|
7
4
|
import { evaluateVerifyPhases } from "../lib/verify-engine.js";
|
|
8
5
|
import { loadWorkspace } from "../lib/workspace.js";
|
|
9
|
-
import { reportUserFacingError } from "../lib/user-error.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const missionRel = path.relative(root, path.resolve(mission.rawPath)).split(path.sep).join("/");
|
|
15
|
-
const commitSha = runBreakGlassAudit(root, {
|
|
16
|
-
reason,
|
|
17
|
-
msnId: mission.msnId,
|
|
18
|
-
missionFile: missionRel,
|
|
19
|
-
commit: options.breakGlassCommit,
|
|
20
|
-
auditCommit: options.auditCommit === true,
|
|
21
|
-
});
|
|
22
|
-
const payload = {
|
|
23
|
-
status: "passed",
|
|
24
|
-
phase: "break_glass",
|
|
25
|
-
exit_code: 0,
|
|
26
|
-
msn_id: mission.msnId ?? undefined,
|
|
27
|
-
mission_file_path: missionRel,
|
|
28
|
-
message: reason,
|
|
29
|
-
audit_commit: commitSha,
|
|
30
|
-
};
|
|
31
|
-
emitVerifyJson(payload);
|
|
32
|
-
}
|
|
33
|
-
catch (e) {
|
|
34
|
-
emitVerifyJson(initFailurePayload(e));
|
|
6
|
+
import { GapmanUserError, reportUserFacingError } from "../lib/user-error.js";
|
|
7
|
+
import { runVerifyCore } from "../lib/verify-run.js";
|
|
8
|
+
function assertVerifyOptionsCompatible(options) {
|
|
9
|
+
if (options.json === true && options.fix === true) {
|
|
10
|
+
throw new GapmanUserError("INVALID_ARGUMENT", "The --fix flag cannot be used with --json. Automated repair is not supported in structured output mode.", undefined, 2);
|
|
35
11
|
}
|
|
36
12
|
}
|
|
37
13
|
export async function runVerify(options) {
|
|
38
|
-
if (options.json === true) {
|
|
39
|
-
if (options.breakGlass === true) {
|
|
40
|
-
try {
|
|
41
|
-
const { root } = loadWorkspace();
|
|
42
|
-
const mission = parseMissionFile(root, options.mission);
|
|
43
|
-
runVerifyBreakGlassJson(root, mission, options);
|
|
44
|
-
}
|
|
45
|
-
catch (e) {
|
|
46
|
-
emitVerifyJson(initFailurePayload(e));
|
|
47
|
-
}
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
const fixOptions = options.fix === true ? { ...options, fixNonInteractive: true } : options;
|
|
51
|
-
if (fixOptions.fix === true) {
|
|
52
|
-
await runVerifyWithFixJson(fixOptions);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
emitVerifyJson(buildVerifyResultPayloadFromOptions(options));
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
14
|
try {
|
|
59
|
-
|
|
60
|
-
const mission = parseMissionFile(root, options.mission);
|
|
61
|
-
const missionArg = options.mission;
|
|
62
|
-
if (options.breakGlass === true) {
|
|
63
|
-
runVerifyBreakGlass(root, mission, options);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
assertMissionGatePresent(mission);
|
|
67
|
-
if (options.fix === true) {
|
|
68
|
-
await runVerifyWithFix(root, mission, missionArg, options);
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
runVerifyPhasesFromEngine(root, mission, missionArg, options);
|
|
15
|
+
assertVerifyOptionsCompatible(options);
|
|
72
16
|
}
|
|
73
17
|
catch (e) {
|
|
18
|
+
if (options.json) {
|
|
19
|
+
emitVerifyJson(initFailurePayload(e));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
74
22
|
reportUserFacingError(e);
|
|
23
|
+
return;
|
|
75
24
|
}
|
|
76
|
-
}
|
|
77
|
-
async function runVerifyWithFixJson(options) {
|
|
78
25
|
try {
|
|
79
|
-
|
|
80
|
-
const mission = parseMissionFile(root, options.mission);
|
|
81
|
-
assertMissionGatePresent(mission);
|
|
82
|
-
emitVerifyJson(buildVerifyResultPayload(root, manifest, mission, options.mission, options));
|
|
26
|
+
await runVerifyCore(options);
|
|
83
27
|
}
|
|
84
28
|
catch (e) {
|
|
85
|
-
|
|
29
|
+
if (options.json) {
|
|
30
|
+
emitVerifyJson(initFailurePayload(e));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
reportUserFacingError(e);
|
|
86
34
|
}
|
|
87
35
|
}
|
|
88
36
|
/** Exposed for tests that need silent phase evaluation without fix wrapper. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/cli/commands/verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,SAAS,6BAA6B,CAAC,OAAsB;IAC3D,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,eAAe,CACvB,kBAAkB,EAClB,yGAAyG,EACzG,SAAS,EACT,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAsB;IACpD,IAAI,CAAC;QACH,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QACD,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,wBAAwB,CAAC,OAAsB;IAC7D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,OAAO,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -13,6 +13,7 @@ export interface AudienceNextStep {
|
|
|
13
13
|
audience: OutputAudience;
|
|
14
14
|
step: string;
|
|
15
15
|
}
|
|
16
|
+
export declare function filterTaggedStepsForAudience(audience: OutputAudience | undefined, tagged: AudienceNextStep[]): string[];
|
|
16
17
|
export declare function filterNextStepsForAudience(audience: OutputAudience | undefined, steps: string[]): string[];
|
|
17
18
|
export declare function audienceSectionTitle(audience: OutputAudience | undefined): string | null;
|
|
18
19
|
//# sourceMappingURL=audience-output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audience-output.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/audience-output.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAS5E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAOjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,gBAAgB,CAQlB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CASjG;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;
|
|
1
|
+
{"version":3,"file":"audience-output.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/audience-output.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAS5E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAOjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,gBAAgB,CAQlB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CASjG;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AA4BD,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,MAAM,EAAE,gBAAgB,EAAE,GACzB,MAAM,EAAE,CAMV;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,KAAK,EAAE,MAAM,EAAE,GACd,MAAM,EAAE,CAQV;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CASxF"}
|
|
@@ -53,8 +53,21 @@ function stepMatchesAudience(step, audience) {
|
|
|
53
53
|
return /gapman verify/i.test(step);
|
|
54
54
|
case "platform":
|
|
55
55
|
return /hooksPath|gapman doctor|gapman init/i.test(step);
|
|
56
|
+
default: {
|
|
57
|
+
const _exhaustive = audience;
|
|
58
|
+
return _exhaustive;
|
|
59
|
+
}
|
|
56
60
|
}
|
|
57
61
|
}
|
|
62
|
+
export function filterTaggedStepsForAudience(audience, tagged) {
|
|
63
|
+
if (!audience)
|
|
64
|
+
return tagged.map((t) => t.step);
|
|
65
|
+
const filtered = [...new Set(tagged.filter((t) => t.audience === audience).map((t) => t.step))];
|
|
66
|
+
if (filtered.length > 0)
|
|
67
|
+
return filtered;
|
|
68
|
+
const roleDefaults = DEFAULT_NEXT_STEPS.filter((s) => s.audience === audience).map((s) => s.step);
|
|
69
|
+
return roleDefaults.length > 0 ? roleDefaults : tagged.map((t) => t.step);
|
|
70
|
+
}
|
|
58
71
|
export function filterNextStepsForAudience(audience, steps) {
|
|
59
72
|
if (!audience)
|
|
60
73
|
return steps;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audience-output.js","sourceRoot":"","sources":["../../../src/cli/lib/audience-output.ts"],"names":[],"mappings":"AAGA,MAAM,eAAe,GAA8B;IACjD,QAAQ;IACR,SAAS;IACT,UAAU;IACV,UAAU;CACX,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,GAAuB;IACnD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACnC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAmB,CAAC,EAAE,CAAC;QAClD,OAAO,CAAmB,CAAC;IAC7B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAC7B,MAAe,EACf,MAAe;IAEf,MAAM,GAAG,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC;IAC3B,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,QAAoC;IACvF,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAOD,MAAM,kBAAkB,GAAuB;IAC7C,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,8DAA8D,EAAE;IAC7F,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,0EAA0E,EAAE;IACzG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,yEAAyE,EAAE;IACvG,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,uCAAuC,EAAE;IACrE,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,wDAAwD,EAAE;IACxF,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,sDAAsD,EAAE;CACvF,CAAC;AAEF,SAAS,mBAAmB,CAAC,IAAY,EAAE,QAAwB;IACjE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,KAAK,QAAQ;YACX,OAAO,+EAA+E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpG,KAAK,UAAU;YACb,OAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,UAAU;YACb,OAAO,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"audience-output.js","sourceRoot":"","sources":["../../../src/cli/lib/audience-output.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ParsedMission } from "./types.js";
|
|
2
|
+
import type { VerifyOptions } from "./verify-types.js";
|
|
3
|
+
export interface BreakGlassAuditOk {
|
|
4
|
+
kind: "ok";
|
|
5
|
+
missionRel: string;
|
|
6
|
+
commitSha: string;
|
|
7
|
+
reason: string;
|
|
8
|
+
msnId?: string;
|
|
9
|
+
auditCommit: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface BreakGlassAuditFail {
|
|
12
|
+
kind: "fail";
|
|
13
|
+
error: unknown;
|
|
14
|
+
}
|
|
15
|
+
export type BreakGlassAuditOutcome = BreakGlassAuditOk | BreakGlassAuditFail;
|
|
16
|
+
/** Single break-glass audit path shared by human and JSON presenters. */
|
|
17
|
+
export declare function runBreakGlassAuditFlow(root: string, mission: ParsedMission, options: VerifyOptions): BreakGlassAuditOutcome;
|
|
18
|
+
//# sourceMappingURL=break-glass-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"break-glass-flow.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/break-glass-flow.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAE7E,yEAAyE;AACzE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,aAAa,GACrB,sBAAsB,CAuBxB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { assertBypassSecretAuthorized, runBreakGlassAudit, validateBreakGlassReason, } from "./break-glass.js";
|
|
2
|
+
import { toPosixRel } from "./cli-io.js";
|
|
3
|
+
/** Single break-glass audit path shared by human and JSON presenters. */
|
|
4
|
+
export function runBreakGlassAuditFlow(root, mission, options) {
|
|
5
|
+
try {
|
|
6
|
+
const reason = validateBreakGlassReason(options.breakGlassReason);
|
|
7
|
+
assertBypassSecretAuthorized(root);
|
|
8
|
+
const missionRel = toPosixRel(root, mission.rawPath);
|
|
9
|
+
const commitSha = runBreakGlassAudit(root, {
|
|
10
|
+
reason,
|
|
11
|
+
msnId: mission.msnId,
|
|
12
|
+
missionFile: missionRel,
|
|
13
|
+
commit: options.breakGlassCommit,
|
|
14
|
+
auditCommit: options.auditCommit === true,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
kind: "ok",
|
|
18
|
+
missionRel,
|
|
19
|
+
commitSha,
|
|
20
|
+
reason,
|
|
21
|
+
msnId: mission.msnId ?? undefined,
|
|
22
|
+
auditCommit: options.auditCommit === true,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return { kind: "fail", error };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=break-glass-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"break-glass-flow.js","sourceRoot":"","sources":["../../../src/cli/lib/break-glass-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAoBzC,yEAAyE;AACzE,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,OAAsB,EACtB,OAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAClE,4BAA4B,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,EAAE;YACzC,MAAM;YACN,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,WAAW,EAAE,UAAU;YACvB,MAAM,EAAE,OAAO,CAAC,gBAAgB;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW,KAAK,IAAI;SAC1C,CAAC,CAAC;QACH,OAAO;YACL,IAAI,EAAE,IAAI;YACV,UAAU;YACV,SAAS;YACT,MAAM;YACN,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,SAAS;YACjC,WAAW,EAAE,OAAO,CAAC,WAAW,KAAK,IAAI;SAC1C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;AACH,CAAC"}
|
package/dist/cli/lib/cli-io.d.ts
CHANGED
|
@@ -3,7 +3,12 @@ export declare function logWarn(message: string): void;
|
|
|
3
3
|
export declare function logError(message: string): void;
|
|
4
4
|
/** Red stderr for existing managed-asset conflicts (respects NO_COLOR). */
|
|
5
5
|
export declare function logManagedAssetConflicts(conflicts: string[]): void;
|
|
6
|
-
/**
|
|
6
|
+
/** POSIX repo-relative path (stable across platforms). */
|
|
7
|
+
export declare function toPosixRel(repoRoot: string, absolutePath: string): string;
|
|
8
|
+
/** Convert a POSIX repo-relative path to native separators. */
|
|
9
|
+
export declare function fromPosix(posixPath: string): string;
|
|
10
|
+
/** Relative path for user-facing messages (POSIX-normalized). */
|
|
7
11
|
export declare function formatRepoRelative(repoRoot: string, absolutePath: string): string;
|
|
12
|
+
export declare function errorMessage(e: unknown): string;
|
|
8
13
|
export declare function setExitCode(code: number): void;
|
|
9
14
|
//# sourceMappingURL=cli-io.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-io.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/cli-io.ts"],"names":[],"mappings":"AAIA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAWlE;AAED,
|
|
1
|
+
{"version":3,"file":"cli-io.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/cli-io.ts"],"names":[],"mappings":"AAIA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG9C;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAWlE;AAED,0DAA0D;AAC1D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzE;AAED,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C"}
|
package/dist/cli/lib/cli-io.js
CHANGED
|
@@ -28,9 +28,20 @@ export function logManagedAssetConflicts(conflicts) {
|
|
|
28
28
|
console.error(`${red} - ${rel}${reset}`);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/** POSIX repo-relative path (stable across platforms). */
|
|
32
|
+
export function toPosixRel(repoRoot, absolutePath) {
|
|
33
|
+
return path.relative(repoRoot, absolutePath).split(path.sep).join("/");
|
|
34
|
+
}
|
|
35
|
+
/** Convert a POSIX repo-relative path to native separators. */
|
|
36
|
+
export function fromPosix(posixPath) {
|
|
37
|
+
return posixPath.split("/").join(path.sep);
|
|
38
|
+
}
|
|
39
|
+
/** Relative path for user-facing messages (POSIX-normalized). */
|
|
32
40
|
export function formatRepoRelative(repoRoot, absolutePath) {
|
|
33
|
-
return
|
|
41
|
+
return toPosixRel(repoRoot, absolutePath);
|
|
42
|
+
}
|
|
43
|
+
export function errorMessage(e) {
|
|
44
|
+
return e instanceof Error ? e.message : String(e);
|
|
34
45
|
}
|
|
35
46
|
export function setExitCode(code) {
|
|
36
47
|
process.exitCode = code;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-io.js","sourceRoot":"","sources":["../../../src/cli/lib/cli-io.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEtF,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO;IAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO;IAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,cAAc,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QAAE,OAAO;IACtC,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB,CAAC,SAAmB;IAC1D,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,KAAK,CACX,GAAG,GAAG,GAAG,QAAQ,oEAAoE,KAAK,EAAE,CAC7F,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"cli-io.js","sourceRoot":"","sources":["../../../src/cli/lib/cli-io.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEtF,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO;IAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO;IAC9B,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,cAAc,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QAAE,OAAO;IACtC,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB,CAAC,SAAmB;IAC1D,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO;IAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,CAAC,KAAK,CACX,GAAG,GAAG,GAAG,QAAQ,oEAAoE,KAAK,EAAE,CAC7F,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,YAAoB;IAC/D,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzE,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,OAAO,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,YAAoB;IACvE,OAAO,UAAU,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type OutputAudience } from "./audience-output.js";
|
|
2
|
+
import type { AudienceTaggedStep } from "./verify-remediation.js";
|
|
3
|
+
export type CommandReporterChannel = "human" | "json" | "silent";
|
|
4
|
+
export interface CommandReporterOptions {
|
|
5
|
+
channel?: CommandReporterChannel;
|
|
6
|
+
audience?: OutputAudience;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Unified output reporter for json / silent / audience channels.
|
|
10
|
+
* Verify sinks are the first consumer; other commands can adopt over time.
|
|
11
|
+
*/
|
|
12
|
+
export declare class CommandReporter {
|
|
13
|
+
readonly channel: CommandReporterChannel;
|
|
14
|
+
readonly audience: OutputAudience | undefined;
|
|
15
|
+
constructor(options?: CommandReporterOptions);
|
|
16
|
+
static forVerify(options: {
|
|
17
|
+
json?: boolean;
|
|
18
|
+
audience?: OutputAudience;
|
|
19
|
+
}): CommandReporter;
|
|
20
|
+
emitInfo(message: string): void;
|
|
21
|
+
emitJson(payload: unknown): void;
|
|
22
|
+
emitNextSteps(steps: string[], tagged?: AudienceTaggedStep[]): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=command-reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-reporter.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/command-reporter.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,sBAAsB,CAAC;IACjC,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,CAAC;gBAElC,OAAO,GAAE,sBAA2B;IAKhD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,eAAe;IAUzF,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK/B,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKhC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,kBAAkB,EAAE,GAAG,IAAI;CAiBpE"}
|