@jeger-ai/opengantry 2.3.1 → 2.5.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/README.md +7 -3
- package/dist/cli/commands/arch.d.ts +9 -0
- package/dist/cli/commands/arch.d.ts.map +1 -1
- package/dist/cli/commands/arch.js +69 -0
- package/dist/cli/commands/arch.js.map +1 -1
- package/dist/cli/lib/arch-override.d.ts +4 -0
- package/dist/cli/lib/arch-override.d.ts.map +1 -0
- package/dist/cli/lib/arch-override.js +8 -0
- package/dist/cli/lib/arch-override.js.map +1 -0
- package/dist/cli/lib/architecture-fetch.d.ts +24 -0
- package/dist/cli/lib/architecture-fetch.d.ts.map +1 -0
- package/dist/cli/lib/architecture-fetch.js +88 -0
- package/dist/cli/lib/architecture-fetch.js.map +1 -0
- package/dist/cli/lib/cli-io.d.ts +2 -0
- package/dist/cli/lib/cli-io.d.ts.map +1 -1
- package/dist/cli/lib/cli-io.js +14 -0
- package/dist/cli/lib/cli-io.js.map +1 -1
- package/dist/cli/lib/command-reporter.d.ts +1 -0
- package/dist/cli/lib/command-reporter.d.ts.map +1 -1
- package/dist/cli/lib/command-reporter.js +1 -1
- package/dist/cli/lib/command-reporter.js.map +1 -1
- package/dist/cli/lib/defensive-guard.d.ts +11 -0
- package/dist/cli/lib/defensive-guard.d.ts.map +1 -0
- package/dist/cli/lib/defensive-guard.js +84 -0
- package/dist/cli/lib/defensive-guard.js.map +1 -0
- package/dist/cli/lib/defensive-profile.d.ts +24 -0
- package/dist/cli/lib/defensive-profile.d.ts.map +1 -0
- package/dist/cli/lib/defensive-profile.js +66 -0
- package/dist/cli/lib/defensive-profile.js.map +1 -0
- package/dist/cli/lib/doctor-core.d.ts.map +1 -1
- package/dist/cli/lib/doctor-core.js +2 -0
- package/dist/cli/lib/doctor-core.js.map +1 -1
- package/dist/cli/lib/gate.d.ts +5 -0
- package/dist/cli/lib/gate.d.ts.map +1 -1
- package/dist/cli/lib/gate.js +5 -0
- package/dist/cli/lib/gate.js.map +1 -1
- package/dist/cli/lib/git-proof.d.ts.map +1 -1
- package/dist/cli/lib/git-proof.js +6 -0
- package/dist/cli/lib/git-proof.js.map +1 -1
- package/dist/cli/lib/gxt-config.d.ts +2 -0
- package/dist/cli/lib/gxt-config.d.ts.map +1 -1
- package/dist/cli/lib/gxt-config.js +6 -1
- package/dist/cli/lib/gxt-config.js.map +1 -1
- package/dist/cli/lib/gxt-error-codes.d.ts +2 -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/kpi-engine.d.ts.map +1 -1
- package/dist/cli/lib/kpi-engine.js +6 -0
- package/dist/cli/lib/kpi-engine.js.map +1 -1
- package/dist/cli/lib/kpi-scan.js +1 -1
- package/dist/cli/lib/kpi-scan.js.map +1 -1
- package/dist/cli/lib/program-stdin.d.ts +1 -2
- package/dist/cli/lib/program-stdin.d.ts.map +1 -1
- package/dist/cli/lib/program-stdin.js +1 -14
- package/dist/cli/lib/program-stdin.js.map +1 -1
- package/dist/cli/lib/target-architecture-doctor.d.ts +4 -0
- package/dist/cli/lib/target-architecture-doctor.d.ts.map +1 -0
- package/dist/cli/lib/target-architecture-doctor.js +32 -0
- package/dist/cli/lib/target-architecture-doctor.js.map +1 -0
- package/dist/cli/lib/target-architecture.d.ts +52 -0
- package/dist/cli/lib/target-architecture.d.ts.map +1 -0
- package/dist/cli/lib/target-architecture.js +233 -0
- package/dist/cli/lib/target-architecture.js.map +1 -0
- package/dist/cli/lib/types.d.ts +1 -0
- package/dist/cli/lib/types.d.ts.map +1 -1
- package/dist/cli/lib/verify-engine.d.ts +9 -1
- package/dist/cli/lib/verify-engine.d.ts.map +1 -1
- package/dist/cli/lib/verify-engine.js +29 -2
- package/dist/cli/lib/verify-engine.js.map +1 -1
- package/dist/cli/lib/verify-export.d.ts +6 -0
- package/dist/cli/lib/verify-export.d.ts.map +1 -0
- package/dist/cli/lib/verify-export.js +106 -0
- package/dist/cli/lib/verify-export.js.map +1 -0
- package/dist/cli/lib/verify-failure-normalize-phases.d.ts +1 -0
- package/dist/cli/lib/verify-failure-normalize-phases.d.ts.map +1 -1
- package/dist/cli/lib/verify-failure-normalize-phases.js +14 -0
- package/dist/cli/lib/verify-failure-normalize-phases.js.map +1 -1
- package/dist/cli/lib/verify-failure-normalize.d.ts.map +1 -1
- package/dist/cli/lib/verify-failure-normalize.js +3 -1
- package/dist/cli/lib/verify-failure-normalize.js.map +1 -1
- package/dist/cli/lib/verify-hints.d.ts +1 -0
- package/dist/cli/lib/verify-hints.d.ts.map +1 -1
- package/dist/cli/lib/verify-hints.js +14 -0
- package/dist/cli/lib/verify-hints.js.map +1 -1
- package/dist/cli/lib/verify-presentation.d.ts +2 -2
- package/dist/cli/lib/verify-presentation.d.ts.map +1 -1
- package/dist/cli/lib/verify-presentation.js +1 -1
- package/dist/cli/lib/verify-presentation.js.map +1 -1
- package/dist/cli/lib/verify-presenters.d.ts +2 -0
- package/dist/cli/lib/verify-presenters.d.ts.map +1 -1
- package/dist/cli/lib/verify-presenters.js +20 -3
- package/dist/cli/lib/verify-presenters.js.map +1 -1
- package/dist/cli/lib/verify-run.d.ts +1 -1
- package/dist/cli/lib/verify-run.d.ts.map +1 -1
- package/dist/cli/lib/verify-run.js +1 -1
- package/dist/cli/lib/verify-run.js.map +1 -1
- package/dist/cli/lib/version.gen.d.ts +1 -1
- package/dist/cli/lib/version.gen.js +1 -1
- package/dist/cli/program-arch.d.ts.map +1 -1
- package/dist/cli/program-arch.js +16 -1
- package/dist/cli/program-arch.js.map +1 -1
- package/dist/cli/program-workflow.d.ts.map +1 -1
- package/dist/cli/program-workflow.js +12 -1
- package/dist/cli/program-workflow.js.map +1 -1
- package/dist/cli/program.js +1 -1
- package/dist/cli/program.js.map +1 -1
- package/package.json +1 -1
- package/templates/.gitagent/config.json +9 -0
- package/templates/.gitagent/foreman/SUBSTRATE.version.json +1 -1
- package/templates/.gitagent/planner/ARCHITECTURE_RUBRIC.template.md +25 -0
- package/templates/.githooks/pre-commit +3 -3
- package/templates/TARGET_ARCHITECTURE.yaml +20 -0
- package/templates/integrations/asset-catalog.json +2 -1
- package/templates/integrations/compatibility.json +1 -1
- package/dist/cli/lib/gate-work-dir.d.ts +0 -6
- package/dist/cli/lib/gate-work-dir.d.ts.map +0 -1
- package/dist/cli/lib/gate-work-dir.js +0 -6
- package/dist/cli/lib/gate-work-dir.js.map +0 -1
- package/dist/cli/lib/verify-sinks.d.ts +0 -4
- package/dist/cli/lib/verify-sinks.d.ts.map +0 -1
- package/dist/cli/lib/verify-sinks.js +0 -12
- package/dist/cli/lib/verify-sinks.js.map +0 -1
package/README.md
CHANGED
|
@@ -74,14 +74,16 @@ Developing this repository from source: `npm ci && npm run build` — see [gantr
|
|
|
74
74
|
| **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) |
|
|
75
75
|
| **Faster recovery from failure** | Stable `GXT_*` error codes, `gantry verify --fix`, role output via `--audience executor\|planner\|verifier` |
|
|
76
76
|
|
|
77
|
-
**Protocol maturity:** substrate law **v0.5.0**; **`gantry` v2.
|
|
77
|
+
**Protocol maturity:** substrate law **v0.5.0**; **`gantry` v2.5.0** — unified CLI naming (`gantry` primary; legacy `gapman` alias). Current npm publish: **v2.5.0**. See [.gitagent/planner/RUNTIME.md](.gitagent/planner/RUNTIME.md).
|
|
78
78
|
|
|
79
79
|
## Release timeline (latest first)
|
|
80
80
|
|
|
81
|
-
Current npm release in this repository: **`gantry` v2.
|
|
81
|
+
Current npm release in this repository: **`gantry` v2.5.0**. Use [`docs/ADOPTION.md`](docs/ADOPTION.md) for the ordered runbook.
|
|
82
82
|
|
|
83
83
|
| Release | Highlights |
|
|
84
84
|
|---------|------------|
|
|
85
|
+
| **v2.5.0** | Adopter-ready cage — generic `arch check` roots ([#114](https://github.com/jeger-ai/opengantry/issues/114)), `TARGET_ARCHITECTURE.yaml` init scaffold ([#115](https://github.com/jeger-ai/opengantry/issues/115)), schema 0.2.0 ([#116](https://github.com/jeger-ai/opengantry/issues/116)), defensive profile + net LOC guard ([#87](https://github.com/jeger-ai/opengantry/issues/87), [#90](https://github.com/jeger-ai/opengantry/issues/90)) |
|
|
86
|
+
| **v2.4.0** | Architecture cage — `gantry arch fetch` ([#34](https://github.com/jeger-ai/opengantry/issues/34)), `verify --format sarif\|junit` ([#36](https://github.com/jeger-ai/opengantry/issues/36)), `TARGET_ARCHITECTURE.yaml` + `gantry arch check` ([#15](https://github.com/jeger-ai/opengantry/issues/15)), `ARCHITECTURE_RUBRIC` advisory judge ([#16](https://github.com/jeger-ai/opengantry/issues/16)) |
|
|
85
87
|
| **v2.3.1** | **Breaking:** Planner/Executor rename ([#110](https://github.com/jeger-ai/opengantry/issues/110)) — `gantry planner`, `.gitagent/planner/`, `EXECUTOR_LOG.md`, `GXT_PLANNER_*` / `GXT_EXECUTOR_*` env vars (no aliases). ADR-gated cage: MCP write guard ([#14](https://github.com/jeger-ai/opengantry/issues/14)), break-glass ADR ([#17](https://github.com/jeger-ai/opengantry/issues/17)), optional `planner_signature` tier ([#37](https://github.com/jeger-ai/opengantry/issues/37)) |
|
|
86
88
|
| **v2.3.0** | Cage hardening — `gen:dogfood` ([#105](https://github.com/jeger-ai/opengantry/issues/105)), typed `kpiKind` ([#103](https://github.com/jeger-ai/opengantry/issues/103)), audience-tagged start ([#104](https://github.com/jeger-ai/opengantry/issues/104)), doctor EXECUTOR_LOG checks ([#38](https://github.com/jeger-ai/opengantry/issues/38)), TS/mjs parity ([#106](https://github.com/jeger-ai/opengantry/issues/106)), verify failure contract ([#102](https://github.com/jeger-ai/opengantry/issues/102)), legislate forbidden-zone warn ([#35](https://github.com/jeger-ai/opengantry/issues/35)); removed deprecated `upgrade --apply`/`--dry-run` parent flags |
|
|
87
89
|
| **v2.2.5** | Quality remediation — recursive test glob ([#99](https://github.com/jeger-ai/opengantry/issues/99)), dead verify code prune ([#100](https://github.com/jeger-ai/opengantry/issues/100)–[#101](https://github.com/jeger-ai/opengantry/issues/101)), mechanical cleanups ([#107](https://github.com/jeger-ai/opengantry/issues/107)) |
|
|
@@ -238,6 +240,8 @@ Requires **Node.js 24+** (Active LTS line). Published as **`@jeger-ai/opengantry
|
|
|
238
240
|
| `gantry check-imports <dir> --ban <spec…>` | Deterministic banned-import scan (usable as `gate_command`; no LLM). |
|
|
239
241
|
| `gantry perimeter [--base-ref <ref>] [--ci]` | Protected governance paths: local advisory; **`--ci`** requires verified commit signatures. |
|
|
240
242
|
| `gantry arch pointer` | Print architecture pointer summary for agents (`.gitagent/ARCHITECTURE.pointer.json`). |
|
|
243
|
+
| `gantry arch fetch` | Fetch `kind=external` architecture docs into a local cache (doctor stays offline). |
|
|
244
|
+
| `gantry arch check` | Evaluate `TARGET_ARCHITECTURE.yaml` import/layer rules for TypeScript paths under configured roots. |
|
|
241
245
|
| `gantry arch cred status\|set\|unset` | Git-ignored credential slots for authenticated external architecture sources (secrets via stdin only). |
|
|
242
246
|
| `gantry metrics [--json] [--ref main]` | Git-native governance rollup (`--json` includes `gxt_extension_metadata`). See [`docs/ADOPTION.md`](docs/ADOPTION.md). |
|
|
243
247
|
| `gantry context-feed [--json] [--clear]` | Read or atomically clear the latest verify remediation snapshot (`.gitagent/tmp/NEXT_REMEDIATION.json`) for IDE repair loops. |
|
|
@@ -390,7 +394,7 @@ GXT deliberately trades "always-on improvisation" for a **narrow, inspectable en
|
|
|
390
394
|
|
|
391
395
|
## Relationship to this repository
|
|
392
396
|
|
|
393
|
-
**jeger-ai/opengantry** is the **canonical reference tree** for **GXT** (manifest `schema_version` **v0.5.0** law + **`gantry` v2.
|
|
397
|
+
**jeger-ai/opengantry** is the **canonical reference tree** for **GXT** (manifest `schema_version` **v0.5.0** law + **`gantry` v2.5.0** CLI). Install the CLI with `npm install -g @jeger-ai/opengantry`, or fork this repo and run `gantry init` in your project.
|
|
394
398
|
|
|
395
399
|
## Security
|
|
396
400
|
|
|
@@ -12,8 +12,17 @@ export interface ArchCredUnsetOptions extends ArchOptions {
|
|
|
12
12
|
export interface ArchCredStatusOptions extends ArchOptions {
|
|
13
13
|
slot?: string;
|
|
14
14
|
}
|
|
15
|
+
export interface ArchFetchOptions extends ArchOptions {
|
|
16
|
+
json?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ArchCheckOptions extends ArchOptions {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
files?: string[];
|
|
21
|
+
}
|
|
15
22
|
export declare function runArchPointer(options?: ArchOptions): void;
|
|
16
23
|
export declare function runArchCredSet(options: ArchCredSetOptions): Promise<void>;
|
|
17
24
|
export declare function runArchCredUnset(options: ArchCredUnsetOptions): void;
|
|
18
25
|
export declare function runArchCredStatus(options?: ArchCredStatusOptions): void;
|
|
26
|
+
export declare function runArchFetch(options?: ArchFetchOptions): Promise<void>;
|
|
27
|
+
export declare function runArchCheckCommand(options?: ArchCheckOptions): void;
|
|
19
28
|
//# sourceMappingURL=arch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/arch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"arch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/arch.ts"],"names":[],"mappings":"AAYA,OAAO,EAOL,KAAK,0BAA0B,EAChC,MAAM,mCAAmC,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,0BAA0B,CAAC;CAClC;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,WAAgB,GAAG,IAAI,CAgB9D;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B/E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAgBpE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,qBAA0B,GAAG,IAAI,CAW3E;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,gBAAqB,GAAG,IAAI,CAgCxE"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { getRepoRoot } from "../lib/git.js";
|
|
2
2
|
import { logError, logInfo, setExitCode, errorMessage } from "../lib/cli-io.js";
|
|
3
|
+
import { fetchExternalArchitecture } from "../lib/architecture-fetch.js";
|
|
4
|
+
import { loadWorkspace } from "../lib/workspace.js";
|
|
5
|
+
import { formatArchCheckHuman, runArchCheck, } from "../lib/target-architecture.js";
|
|
3
6
|
import { loadArchitecturePointer, summarizeArchitecturePointer, } from "../lib/architecture-pointer.js";
|
|
4
7
|
import { logCredentialStatus, parseCredentialValuesFromStdin, readStdinCredentialPayload, removeArchitectureCredential, validateCredentialSlot, writeArchitectureCredential, } from "../lib/architecture-credential.js";
|
|
5
8
|
export function runArchPointer(options = {}) {
|
|
@@ -83,4 +86,70 @@ export function runArchCredStatus(options = {}) {
|
|
|
83
86
|
}
|
|
84
87
|
logCredentialStatus(repoRoot, options.slot);
|
|
85
88
|
}
|
|
89
|
+
export async function runArchFetch(options = {}) {
|
|
90
|
+
let repoRoot;
|
|
91
|
+
try {
|
|
92
|
+
repoRoot = getRepoRoot(options.cwd);
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
logError(e instanceof Error ? e.message.replace("gantry: ", "") : String(e));
|
|
96
|
+
setExitCode(2);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const result = await fetchExternalArchitecture({ repoRoot });
|
|
101
|
+
if (options.json) {
|
|
102
|
+
logInfo(JSON.stringify(result, null, 2));
|
|
103
|
+
}
|
|
104
|
+
else if (result.status === "fetched" && result.body !== undefined) {
|
|
105
|
+
process.stdout.write(result.body);
|
|
106
|
+
if (!result.body.endsWith("\n"))
|
|
107
|
+
process.stdout.write("\n");
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
logInfo(result.message);
|
|
111
|
+
}
|
|
112
|
+
if (result.status === "fallback")
|
|
113
|
+
setExitCode(1);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
logError(errorMessage(e));
|
|
117
|
+
setExitCode(2);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export function runArchCheckCommand(options = {}) {
|
|
121
|
+
let repoRoot;
|
|
122
|
+
try {
|
|
123
|
+
repoRoot = getRepoRoot(options.cwd);
|
|
124
|
+
}
|
|
125
|
+
catch (e) {
|
|
126
|
+
logError(e instanceof Error ? e.message.replace("gantry: ", "") : String(e));
|
|
127
|
+
setExitCode(2);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const files = options.files?.length ? options.files : [];
|
|
131
|
+
if (files.length === 0) {
|
|
132
|
+
logError("gantry arch check: pass one or more .ts file paths");
|
|
133
|
+
setExitCode(2);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const { manifest } = loadWorkspace();
|
|
138
|
+
const skill = manifest.skills.gantry ?? Object.values(manifest.skills)[0];
|
|
139
|
+
const manifestTmvcRoots = skill?.tmvc_roots;
|
|
140
|
+
const result = runArchCheck(repoRoot, files, { manifestTmvcRoots });
|
|
141
|
+
if (options.json) {
|
|
142
|
+
logInfo(JSON.stringify({ schema_version: 1, ok: result.ok, violations: result.violations }, null, 2));
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
logInfo(formatArchCheckHuman(result));
|
|
146
|
+
}
|
|
147
|
+
if (!result.ok)
|
|
148
|
+
setExitCode(1);
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
logError(errorMessage(e));
|
|
152
|
+
setExitCode(2);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
86
155
|
//# sourceMappingURL=arch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arch.js","sourceRoot":"","sources":["../../../src/cli/commands/arch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EACL,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,0BAA0B,EAC1B,4BAA4B,EAC5B,sBAAsB,EACtB,2BAA2B,GAE5B,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"arch.js","sourceRoot":"","sources":["../../../src/cli/commands/arch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const ARCH_OVERRIDE_TOKEN: "[GXT-ARCH-OVERRIDE]";
|
|
2
|
+
export declare function commitSubjectHasArchOverride(subject: string): boolean;
|
|
3
|
+
export declare function archOverrideAdvisoryMessage(msnId: string, stampHash: string): string;
|
|
4
|
+
//# sourceMappingURL=arch-override.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arch-override.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/arch-override.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,EAAG,qBAA8B,CAAC;AAElE,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAErE;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const ARCH_OVERRIDE_TOKEN = "[GXT-ARCH-OVERRIDE]";
|
|
2
|
+
export function commitSubjectHasArchOverride(subject) {
|
|
3
|
+
return subject.includes(ARCH_OVERRIDE_TOKEN);
|
|
4
|
+
}
|
|
5
|
+
export function archOverrideAdvisoryMessage(msnId, stampHash) {
|
|
6
|
+
return `gantry verify: advisory — Planner stamp ${stampHash} for [${msnId}] includes ${ARCH_OVERRIDE_TOKEN}`;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=arch-override.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arch-override.js","sourceRoot":"","sources":["../../../src/cli/lib/arch-override.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,qBAA8B,CAAC;AAElE,MAAM,UAAU,4BAA4B,CAAC,OAAe;IAC1D,OAAO,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAa,EAAE,SAAiB;IAC1E,OAAO,2CAA2C,SAAS,SAAS,KAAK,cAAc,mBAAmB,EAAE,CAAC;AAC/G,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ArchitectureCredentialRecord } from "./architecture-credential.js";
|
|
2
|
+
export type ArchFetchStatus = "fetched" | "fallback";
|
|
3
|
+
export interface ArchFetchResult {
|
|
4
|
+
status: ArchFetchStatus;
|
|
5
|
+
url?: string;
|
|
6
|
+
body?: string;
|
|
7
|
+
content_type?: string;
|
|
8
|
+
status_code?: number;
|
|
9
|
+
message: string;
|
|
10
|
+
discovery_skill: string;
|
|
11
|
+
}
|
|
12
|
+
export type HttpFetcher = (url: string, init?: RequestInit) => Promise<{
|
|
13
|
+
status: number;
|
|
14
|
+
body: string;
|
|
15
|
+
contentType: string | null;
|
|
16
|
+
}>;
|
|
17
|
+
export declare const defaultHttpFetcher: HttpFetcher;
|
|
18
|
+
export declare function buildAuthHeaders(credential: ArchitectureCredentialRecord): Record<string, string>;
|
|
19
|
+
export interface FetchExternalArchitectureOptions {
|
|
20
|
+
repoRoot: string;
|
|
21
|
+
fetcher?: HttpFetcher;
|
|
22
|
+
}
|
|
23
|
+
export declare function fetchExternalArchitecture(options: FetchExternalArchitectureOptions): Promise<ArchFetchResult>;
|
|
24
|
+
//# sourceMappingURL=architecture-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture-fetch.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/architecture-fetch.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,8BAA8B,CAAC;AAOtC,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,eAAe,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAI3E,eAAO,MAAM,kBAAkB,EAAE,WAYhC,CAAC;AAMF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,4BAA4B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBjG;AAWD,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,gCAAgC,GACxC,OAAO,CAAC,eAAe,CAAC,CAyD1B"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { CLI_NAME } from "./constants.js";
|
|
2
|
+
import { loadArchitectureCredential, } from "./architecture-credential.js";
|
|
3
|
+
import { loadArchitecturePointer, resolveArchitectureDiscoverySkill, } from "./architecture-pointer.js";
|
|
4
|
+
const DEFAULT_MAX_BYTES = 2 * 1024 * 1024;
|
|
5
|
+
export const defaultHttpFetcher = async (url, init) => {
|
|
6
|
+
const response = await fetch(url, init);
|
|
7
|
+
const buf = await response.arrayBuffer();
|
|
8
|
+
if (buf.byteLength > DEFAULT_MAX_BYTES) {
|
|
9
|
+
throw new Error(`response exceeds ${String(DEFAULT_MAX_BYTES)} byte limit`);
|
|
10
|
+
}
|
|
11
|
+
const contentType = response.headers.get("content-type");
|
|
12
|
+
return {
|
|
13
|
+
status: response.status,
|
|
14
|
+
body: new TextDecoder("utf-8", { fatal: false }).decode(buf),
|
|
15
|
+
contentType,
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
function isHttpUrl(location) {
|
|
19
|
+
return /^https?:\/\//i.test(location.trim());
|
|
20
|
+
}
|
|
21
|
+
export function buildAuthHeaders(credential) {
|
|
22
|
+
switch (credential.kind) {
|
|
23
|
+
case "bearer":
|
|
24
|
+
return { Authorization: `Bearer ${credential.values.token}` };
|
|
25
|
+
case "api_key": {
|
|
26
|
+
const header = credential.values.header_name ?? "X-API-Key";
|
|
27
|
+
return { [header]: credential.values.api_key };
|
|
28
|
+
}
|
|
29
|
+
case "basic": {
|
|
30
|
+
const encoded = Buffer.from(`${credential.values.username}:${credential.values.password}`, "utf8").toString("base64");
|
|
31
|
+
return { Authorization: `Basic ${encoded}` };
|
|
32
|
+
}
|
|
33
|
+
case "custom":
|
|
34
|
+
return { ...credential.values };
|
|
35
|
+
default:
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function fallbackResult(pointer, message) {
|
|
40
|
+
const discovery = resolveArchitectureDiscoverySkill(pointer);
|
|
41
|
+
return {
|
|
42
|
+
status: "fallback",
|
|
43
|
+
message: `${message} Follow ${discovery} for manual discovery.`,
|
|
44
|
+
discovery_skill: discovery,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export async function fetchExternalArchitecture(options) {
|
|
48
|
+
const pointer = loadArchitecturePointer(options.repoRoot);
|
|
49
|
+
const fetcher = options.fetcher ?? defaultHttpFetcher;
|
|
50
|
+
if (pointer.kind !== "external") {
|
|
51
|
+
return fallbackResult(pointer, `${CLI_NAME} arch fetch: pointer kind is ${pointer.kind}, not external.`);
|
|
52
|
+
}
|
|
53
|
+
if (!isHttpUrl(pointer.location)) {
|
|
54
|
+
return fallbackResult(pointer, `${CLI_NAME} arch fetch: external location is not an http(s) URL (${pointer.location}).`);
|
|
55
|
+
}
|
|
56
|
+
const headers = { Accept: "text/plain, text/html, application/json" };
|
|
57
|
+
const slot = pointer.access?.credential_slot;
|
|
58
|
+
if (slot) {
|
|
59
|
+
const cred = loadArchitectureCredential(options.repoRoot, slot);
|
|
60
|
+
if (!cred) {
|
|
61
|
+
return fallbackResult(pointer, `${CLI_NAME} arch fetch: credential slot ${slot} not configured — run gantry arch cred set.`);
|
|
62
|
+
}
|
|
63
|
+
Object.assign(headers, buildAuthHeaders(cred));
|
|
64
|
+
}
|
|
65
|
+
else if (pointer.access?.required) {
|
|
66
|
+
return fallbackResult(pointer, `${CLI_NAME} arch fetch: access.required but no credential_slot on pointer.`);
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const response = await fetcher(pointer.location, { headers, method: "GET" });
|
|
70
|
+
if (response.status < 200 || response.status >= 300) {
|
|
71
|
+
return fallbackResult(pointer, `${CLI_NAME} arch fetch: HTTP ${String(response.status)} from ${pointer.location}.`);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
status: "fetched",
|
|
75
|
+
url: pointer.location,
|
|
76
|
+
body: response.body,
|
|
77
|
+
content_type: response.contentType ?? undefined,
|
|
78
|
+
status_code: response.status,
|
|
79
|
+
message: `Fetched ${pointer.location}`,
|
|
80
|
+
discovery_skill: resolveArchitectureDiscoverySkill(pointer),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
const detail = e instanceof Error ? e.message : String(e);
|
|
85
|
+
return fallbackResult(pointer, `${CLI_NAME} arch fetch failed: ${detail}.`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=architecture-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architecture-fetch.js","sourceRoot":"","sources":["../../../src/cli/lib/architecture-fetch.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/lib/cli-io.d.ts
CHANGED
|
@@ -21,4 +21,6 @@ export declare function parseOptionalTimeoutMs(raw: string | undefined): {
|
|
|
21
21
|
ok: false;
|
|
22
22
|
message: string;
|
|
23
23
|
};
|
|
24
|
+
/** Shared stdin drain for Commander commands that accept piped intent text. */
|
|
25
|
+
export declare function readStdinIfEmpty(text: string): Promise<string>;
|
|
24
26
|
//# 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,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,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAYvE"}
|
|
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,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,oFAAoF;AACpF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAYvE;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9D"}
|
package/dist/cli/lib/cli-io.js
CHANGED
|
@@ -66,4 +66,18 @@ export function parseOptionalTimeoutMs(raw) {
|
|
|
66
66
|
const n = Number.parseInt(t, 10);
|
|
67
67
|
return { ok: true, ms: Number.isFinite(n) ? n : undefined };
|
|
68
68
|
}
|
|
69
|
+
/** Shared stdin drain for Commander commands that accept piped intent text. */
|
|
70
|
+
export function readStdinIfEmpty(text) {
|
|
71
|
+
if (text.trim())
|
|
72
|
+
return Promise.resolve(text);
|
|
73
|
+
return new Promise((resolve, reject) => {
|
|
74
|
+
let data = "";
|
|
75
|
+
process.stdin.setEncoding("utf8");
|
|
76
|
+
process.stdin.on("data", (chunk) => {
|
|
77
|
+
data += chunk;
|
|
78
|
+
});
|
|
79
|
+
process.stdin.on("end", () => resolve(data.trim()));
|
|
80
|
+
process.stdin.on("error", reject);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
69
83
|
//# sourceMappingURL=cli-io.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-io.js","sourceRoot":"","sources":["../../../src/cli/lib/cli-io.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli-io.js","sourceRoot":"","sources":["../../../src/cli/lib/cli-io.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;AAI9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,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;
|
|
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;AAI9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,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,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,GAAG,eAAe;IAU1G,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK/B,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKhC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/B,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAKnD,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAkCxE,uBAAuB,CAAC,YAAY,EAAE,yBAAyB,GAAG,IAAI;IAatE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,kBAAkB,EAAE,GAAG,IAAI;CAiBpE"}
|
|
@@ -15,7 +15,7 @@ export class CommandReporter {
|
|
|
15
15
|
this.audience = options.audience;
|
|
16
16
|
}
|
|
17
17
|
static forVerify(options) {
|
|
18
|
-
if (options.json) {
|
|
18
|
+
if (options.json || options.format) {
|
|
19
19
|
return new CommandReporter({ channel: "json", audience: options.audience });
|
|
20
20
|
}
|
|
21
21
|
return new CommandReporter({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-reporter.js","sourceRoot":"","sources":["../../../src/cli/lib/command-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,sBAAsB,GAEvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAa5C;;;GAGG;AACH,MAAM,OAAO,eAAe;IACjB,OAAO,CAAyB;IAChC,QAAQ,CAA6B;IAE9C,YAAY,UAAkC,EAAE;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"command-reporter.js","sourceRoot":"","sources":["../../../src/cli/lib/command-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Manifest } from "./types.js";
|
|
2
|
+
export interface DefensiveGuardResult {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
net_loc?: number;
|
|
5
|
+
max_net_loc?: number;
|
|
6
|
+
reason?: string;
|
|
7
|
+
}
|
|
8
|
+
/** Net LOC across worktree + staged diffs for the given repo-relative paths. */
|
|
9
|
+
export declare function computeNetLocForFiles(repoRoot: string, files: readonly string[]): number;
|
|
10
|
+
export declare function evaluateNetLocBudgetGuard(repoRoot: string, manifest: Manifest, skillKey: string): DefensiveGuardResult;
|
|
11
|
+
//# sourceMappingURL=defensive-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defensive-guard.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/defensive-guard.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA+CD,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAIxF;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,GACf,oBAAoB,CA2BtB"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { gitRunOk } from "./git.js";
|
|
2
|
+
import { normalizeRepoRelativePath } from "./tmvc-path.js";
|
|
3
|
+
import { loadGxtConfig } from "./gxt-config.js";
|
|
4
|
+
import { resolveDefensiveProfile } from "./defensive-profile.js";
|
|
5
|
+
import { resolveManifestSkillKey } from "./skill-key.js";
|
|
6
|
+
function gitNumstat(repoRoot, args) {
|
|
7
|
+
const { ok, stdout } = gitRunOk(repoRoot, args);
|
|
8
|
+
if (!ok)
|
|
9
|
+
return 0;
|
|
10
|
+
let total = 0;
|
|
11
|
+
for (const line of stdout.split("\n")) {
|
|
12
|
+
const parts = line.split("\t");
|
|
13
|
+
if (parts.length < 2)
|
|
14
|
+
continue;
|
|
15
|
+
const add = parts[0] === "-" ? 0 : Number.parseInt(parts[0] ?? "0", 10);
|
|
16
|
+
const del = parts[1] === "-" ? 0 : Number.parseInt(parts[1] ?? "0", 10);
|
|
17
|
+
total += (Number.isFinite(add) ? add : 0) + (Number.isFinite(del) ? del : 0);
|
|
18
|
+
}
|
|
19
|
+
return total;
|
|
20
|
+
}
|
|
21
|
+
function pathMatchesTmvcRoot(filePath, roots) {
|
|
22
|
+
const norm = normalizeRepoRelativePath(filePath);
|
|
23
|
+
return roots.some((root) => {
|
|
24
|
+
const r = normalizeRepoRelativePath(root);
|
|
25
|
+
return norm === r || norm.startsWith(`${r.replace(/\/$/, "")}/`);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function listChangedFilesInTmvc(repoRoot, tmvcRoots) {
|
|
29
|
+
const { ok, stdout } = gitRunOk(repoRoot, ["diff", "--name-only", "HEAD"]);
|
|
30
|
+
if (!ok)
|
|
31
|
+
return [];
|
|
32
|
+
const staged = gitRunOk(repoRoot, ["diff", "--name-only", "--cached"]);
|
|
33
|
+
const lines = new Set();
|
|
34
|
+
for (const chunk of [stdout, staged.ok ? staged.stdout : ""]) {
|
|
35
|
+
for (const line of chunk.split("\n")) {
|
|
36
|
+
const trimmed = line.trim();
|
|
37
|
+
if (!trimmed)
|
|
38
|
+
continue;
|
|
39
|
+
if (pathMatchesTmvcRoot(trimmed, tmvcRoots))
|
|
40
|
+
lines.add(trimmed);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return [...lines];
|
|
44
|
+
}
|
|
45
|
+
function netLocForPaths(repoRoot, files) {
|
|
46
|
+
if (files.length === 0)
|
|
47
|
+
return 0;
|
|
48
|
+
const pathArgs = files.flatMap((f) => ["--", f]);
|
|
49
|
+
const worktree = gitNumstat(repoRoot, ["diff", "--numstat", "HEAD", ...pathArgs]);
|
|
50
|
+
const staged = gitNumstat(repoRoot, ["diff", "--numstat", "--cached", ...pathArgs]);
|
|
51
|
+
return worktree + staged;
|
|
52
|
+
}
|
|
53
|
+
/** Net LOC across worktree + staged diffs for the given repo-relative paths. */
|
|
54
|
+
export function computeNetLocForFiles(repoRoot, files) {
|
|
55
|
+
if (files.length === 0)
|
|
56
|
+
return 0;
|
|
57
|
+
const relFiles = files.map((f) => normalizeRepoRelativePath(f));
|
|
58
|
+
return netLocForPaths(repoRoot, relFiles);
|
|
59
|
+
}
|
|
60
|
+
export function evaluateNetLocBudgetGuard(repoRoot, manifest, skillKey) {
|
|
61
|
+
const profile = resolveDefensiveProfile(loadGxtConfig(repoRoot));
|
|
62
|
+
if (!profile.enabled || !profile.net_loc_budget) {
|
|
63
|
+
return { ok: true };
|
|
64
|
+
}
|
|
65
|
+
const resolvedKey = resolveManifestSkillKey(manifest, skillKey);
|
|
66
|
+
const skill = manifest.skills[resolvedKey];
|
|
67
|
+
if (!skill) {
|
|
68
|
+
return { ok: false, reason: `defensive guard: unknown skill ${skillKey}` };
|
|
69
|
+
}
|
|
70
|
+
const tmvcRoots = skill.tmvc_roots ?? [];
|
|
71
|
+
const changed = listChangedFilesInTmvc(repoRoot, tmvcRoots);
|
|
72
|
+
const netLoc = computeNetLocForFiles(repoRoot, changed);
|
|
73
|
+
const max = profile.net_loc_budget.max_net_loc;
|
|
74
|
+
if (netLoc > max) {
|
|
75
|
+
return {
|
|
76
|
+
ok: false,
|
|
77
|
+
net_loc: netLoc,
|
|
78
|
+
max_net_loc: max,
|
|
79
|
+
reason: `net_loc ${netLoc} exceeds defensive_profile max_net_loc ${max}`,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return { ok: true, net_loc: netLoc, max_net_loc: max };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=defensive-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defensive-guard.js","sourceRoot":"","sources":["../../../src/cli/lib/defensive-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { GxtConfig } from "./gxt-config.js";
|
|
2
|
+
export interface NetLocBudgetGuard {
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
max_net_loc?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface DefensiveProfileGuards {
|
|
7
|
+
net_loc_budget?: NetLocBudgetGuard;
|
|
8
|
+
}
|
|
9
|
+
export interface DefensiveProfileConfig {
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
guards?: DefensiveProfileGuards;
|
|
12
|
+
}
|
|
13
|
+
export interface ResolvedNetLocBudgetGuard {
|
|
14
|
+
enabled: true;
|
|
15
|
+
max_net_loc: number;
|
|
16
|
+
}
|
|
17
|
+
export interface ResolvedDefensiveProfile {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
net_loc_budget: ResolvedNetLocBudgetGuard | null;
|
|
20
|
+
}
|
|
21
|
+
export declare function validateDefensiveProfile(raw: unknown): DefensiveProfileConfig;
|
|
22
|
+
/** Fail-closed resolution: profile must be explicitly enabled; guards opt-in per guard. */
|
|
23
|
+
export declare function resolveDefensiveProfile(config: GxtConfig): ResolvedDefensiveProfile;
|
|
24
|
+
//# sourceMappingURL=defensive-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defensive-profile.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/defensive-profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,iBAAiB,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,sBAAsB,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,IAAI,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,yBAAyB,GAAG,IAAI,CAAC;CAClD;AAWD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAsC7E;AAED,2FAA2F;AAC3F,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,wBAAwB,CAgBnF"}
|