@jeger-ai/opengantry 2.3.0 → 2.3.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 +60 -59
- package/dist/cli/commands/context-request.d.ts +2 -2
- package/dist/cli/commands/context-request.d.ts.map +1 -1
- package/dist/cli/commands/context-request.js +13 -13
- package/dist/cli/commands/context-request.js.map +1 -1
- package/dist/cli/commands/init.js +2 -2
- package/dist/cli/commands/onboarding.js +4 -4
- package/dist/cli/commands/onboarding.js.map +1 -1
- package/dist/cli/commands/planner.d.ts +11 -0
- package/dist/cli/commands/{teacher.d.ts.map → planner.d.ts.map} +1 -1
- package/dist/cli/commands/{teacher.js → planner.js} +11 -11
- package/dist/cli/commands/{teacher.js.map → planner.js.map} +1 -1
- package/dist/cli/commands/runtime.d.ts +1 -1
- package/dist/cli/commands/runtime.d.ts.map +1 -1
- package/dist/cli/commands/runtime.js +4 -4
- package/dist/cli/commands/runtime.js.map +1 -1
- package/dist/cli/lib/audience-output.d.ts +1 -1
- package/dist/cli/lib/audience-output.d.ts.map +1 -1
- package/dist/cli/lib/audience-output.js +16 -16
- package/dist/cli/lib/audience-output.js.map +1 -1
- package/dist/cli/lib/break-glass.js +1 -1
- package/dist/cli/lib/command-reporter.d.ts.map +1 -1
- package/dist/cli/lib/command-reporter.js +9 -4
- package/dist/cli/lib/command-reporter.js.map +1 -1
- package/dist/cli/lib/config-namespace.d.ts +2 -2
- package/dist/cli/lib/config-namespace.js +2 -2
- package/dist/cli/lib/constants.d.ts +8 -8
- package/dist/cli/lib/constants.d.ts.map +1 -1
- package/dist/cli/lib/constants.js +8 -8
- package/dist/cli/lib/constants.js.map +1 -1
- package/dist/cli/lib/context-request.d.ts +4 -4
- package/dist/cli/lib/context-request.d.ts.map +1 -1
- package/dist/cli/lib/context-request.js +11 -11
- package/dist/cli/lib/context-request.js.map +1 -1
- package/dist/cli/lib/doctor-core.d.ts.map +1 -1
- package/dist/cli/lib/doctor-core.js +49 -22
- package/dist/cli/lib/doctor-core.js.map +1 -1
- package/dist/cli/lib/doctor-types.d.ts +2 -2
- package/dist/cli/lib/errors.js +6 -6
- package/dist/cli/lib/errors.js.map +1 -1
- package/dist/cli/lib/executor-log-integrity.d.ts +4 -0
- package/dist/cli/lib/executor-log-integrity.d.ts.map +1 -0
- package/dist/cli/lib/{worker-log-integrity.js → executor-log-integrity.js} +8 -8
- package/dist/cli/lib/executor-log-integrity.js.map +1 -0
- package/dist/cli/lib/{worker-log-line-map.d.ts → executor-log-line-map.d.ts} +4 -4
- package/dist/cli/lib/executor-log-line-map.d.ts.map +1 -0
- package/dist/cli/lib/{worker-log-line-map.js → executor-log-line-map.js} +4 -4
- package/dist/cli/lib/executor-log-line-map.js.map +1 -0
- package/dist/cli/lib/file-merge-gxt.js +1 -1
- package/dist/cli/lib/file-merge-gxt.js.map +1 -1
- package/dist/cli/lib/fix-hints.d.ts +6 -6
- package/dist/cli/lib/fix-hints.d.ts.map +1 -1
- package/dist/cli/lib/fix-hints.js +36 -30
- package/dist/cli/lib/fix-hints.js.map +1 -1
- package/dist/cli/lib/git-metrics.js +10 -10
- package/dist/cli/lib/git-metrics.js.map +1 -1
- package/dist/cli/lib/git-proof.d.ts +7 -5
- package/dist/cli/lib/git-proof.d.ts.map +1 -1
- package/dist/cli/lib/git-proof.js +42 -19
- package/dist/cli/lib/git-proof.js.map +1 -1
- package/dist/cli/lib/gxt-config.d.ts +9 -0
- package/dist/cli/lib/gxt-config.d.ts.map +1 -0
- package/dist/cli/lib/gxt-config.js +20 -0
- package/dist/cli/lib/gxt-config.js.map +1 -0
- 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 +7 -3
- package/dist/cli/lib/gxt-error-codes.js.map +1 -1
- package/dist/cli/lib/init-compose.js +1 -1
- package/dist/cli/lib/init-interactive.js +1 -1
- package/dist/cli/lib/init-interactive.js.map +1 -1
- package/dist/cli/lib/init-tutorial.js +14 -14
- package/dist/cli/lib/init-tutorial.js.map +1 -1
- package/dist/cli/lib/kpi-engine.d.ts +1 -1
- package/dist/cli/lib/kpi-engine.d.ts.map +1 -1
- package/dist/cli/lib/kpi-engine.js +11 -11
- package/dist/cli/lib/kpi-engine.js.map +1 -1
- package/dist/cli/lib/legislate-forbidden-zone.d.ts +1 -1
- package/dist/cli/lib/legislate-forbidden-zone.js +1 -1
- package/dist/cli/lib/legislate.js +4 -4
- package/dist/cli/lib/mcp-governance.d.ts +2 -2
- package/dist/cli/lib/mcp-governance.d.ts.map +1 -1
- package/dist/cli/lib/mcp-governance.js +40 -10
- package/dist/cli/lib/mcp-governance.js.map +1 -1
- package/dist/cli/lib/mcp-tools-register.js +3 -3
- package/dist/cli/lib/mcp-tools-register.js.map +1 -1
- package/dist/cli/lib/mcp-upgrade.d.ts.map +1 -1
- package/dist/cli/lib/mcp-upgrade.js +8 -0
- package/dist/cli/lib/mcp-upgrade.js.map +1 -1
- package/dist/cli/lib/mcp-write-guard.d.ts +20 -0
- package/dist/cli/lib/mcp-write-guard.d.ts.map +1 -0
- package/dist/cli/lib/mcp-write-guard.js +82 -0
- package/dist/cli/lib/mcp-write-guard.js.map +1 -0
- package/dist/cli/lib/missions/formatter.d.ts +1 -1
- package/dist/cli/lib/missions/formatter.js +1 -1
- package/dist/cli/lib/onboarding-flow.js +1 -1
- package/dist/cli/lib/out-of-scope-hint.js +1 -1
- package/dist/cli/lib/perimeter.d.ts +1 -1
- package/dist/cli/lib/perimeter.js +10 -10
- package/dist/cli/lib/planner-identity.d.ts +23 -0
- package/dist/cli/lib/{teacher-identity.d.ts.map → planner-identity.d.ts.map} +1 -1
- package/dist/cli/lib/{teacher-identity.js → planner-identity.js} +34 -34
- package/dist/cli/lib/{teacher-identity.js.map → planner-identity.js.map} +1 -1
- package/dist/cli/lib/planner-signature.d.ts +11 -0
- package/dist/cli/lib/planner-signature.d.ts.map +1 -0
- package/dist/cli/lib/planner-signature.js +17 -0
- package/dist/cli/lib/planner-signature.js.map +1 -0
- package/dist/cli/lib/program-audience-hook.js +1 -1
- package/dist/cli/lib/program-audience-hook.js.map +1 -1
- package/dist/cli/lib/register-proposals.js +1 -1
- package/dist/cli/lib/runtime-env.d.ts +3 -3
- package/dist/cli/lib/runtime-env.d.ts.map +1 -1
- package/dist/cli/lib/runtime-env.js +4 -4
- package/dist/cli/lib/runtime-env.js.map +1 -1
- package/dist/cli/lib/runtime-exec.d.ts +4 -4
- package/dist/cli/lib/runtime-exec.d.ts.map +1 -1
- package/dist/cli/lib/runtime-exec.js +14 -14
- package/dist/cli/lib/runtime-exec.js.map +1 -1
- package/dist/cli/lib/staged-tmvc-guard.js +1 -1
- package/dist/cli/lib/staged-tmvc-guard.js.map +1 -1
- package/dist/cli/lib/start-orchestration.js +7 -7
- package/dist/cli/lib/start-orchestration.js.map +1 -1
- package/dist/cli/lib/status-report.d.ts +1 -1
- package/dist/cli/lib/status-report.js +7 -7
- package/dist/cli/lib/status-report.js.map +1 -1
- package/dist/cli/lib/surgeon.d.ts +3 -3
- package/dist/cli/lib/surgeon.d.ts.map +1 -1
- package/dist/cli/lib/surgeon.js +7 -7
- package/dist/cli/lib/surgeon.js.map +1 -1
- package/dist/cli/lib/surgeons/registry.d.ts +1 -1
- package/dist/cli/lib/surgeons/registry.d.ts.map +1 -1
- package/dist/cli/lib/telemetry-log.d.ts +1 -1
- package/dist/cli/lib/telemetry-log.d.ts.map +1 -1
- package/dist/cli/lib/telemetry-log.js +4 -4
- package/dist/cli/lib/telemetry-log.js.map +1 -1
- package/dist/cli/lib/tmvc-path.d.ts +1 -1
- package/dist/cli/lib/tmvc-path.d.ts.map +1 -1
- package/dist/cli/lib/tmvc-path.js +1 -1
- package/dist/cli/lib/tmvc-path.js.map +1 -1
- package/dist/cli/lib/trace.d.ts +8 -8
- package/dist/cli/lib/trace.d.ts.map +1 -1
- package/dist/cli/lib/trace.js +21 -21
- package/dist/cli/lib/trace.js.map +1 -1
- package/dist/cli/lib/triage-logic.js +1 -1
- package/dist/cli/lib/types.d.ts +1 -1
- package/dist/cli/lib/upgrade-apply.d.ts.map +1 -1
- package/dist/cli/lib/upgrade-apply.js +14 -2
- package/dist/cli/lib/upgrade-apply.js.map +1 -1
- package/dist/cli/lib/upgrade-plan.js +3 -3
- package/dist/cli/lib/verify-engine.d.ts +6 -5
- package/dist/cli/lib/verify-engine.d.ts.map +1 -1
- package/dist/cli/lib/verify-engine.js +40 -30
- package/dist/cli/lib/verify-engine.js.map +1 -1
- package/dist/cli/lib/verify-failure-normalize-phases.js +1 -1
- package/dist/cli/lib/verify-failure-normalize-phases.js.map +1 -1
- package/dist/cli/lib/verify-hints.d.ts +1 -1
- package/dist/cli/lib/verify-hints.d.ts.map +1 -1
- package/dist/cli/lib/verify-hints.js +16 -16
- package/dist/cli/lib/verify-hints.js.map +1 -1
- package/dist/cli/lib/verify-payload-types.d.ts +1 -0
- package/dist/cli/lib/verify-payload-types.d.ts.map +1 -1
- package/dist/cli/lib/verify-payload.d.ts.map +1 -1
- package/dist/cli/lib/verify-payload.js +3 -0
- package/dist/cli/lib/verify-payload.js.map +1 -1
- package/dist/cli/lib/verify-presenters.js +3 -3
- package/dist/cli/lib/verify-presenters.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-core.js +4 -4
- package/dist/cli/program-core.js.map +1 -1
- package/dist/cli/program-mission.js +15 -15
- package/dist/cli/program-mission.js.map +1 -1
- package/dist/cli/program-planner.d.ts +3 -0
- package/dist/cli/program-planner.d.ts.map +1 -0
- package/dist/cli/program-planner.js +19 -0
- package/dist/cli/{program-teacher.js.map → program-planner.js.map} +1 -1
- package/dist/cli/program-workflow.js +7 -7
- package/dist/cli/program-workflow.js.map +1 -1
- package/dist/cli/program.js +3 -3
- package/dist/cli/program.js.map +1 -1
- package/package.json +1 -1
- package/templates/.cursor/hooks/gxt-before-shell.sh +4 -4
- package/templates/.cursor/hooks/gxt-session-start.sh +2 -2
- package/templates/.cursor/rules/opengantry-gxt-substrate.mdc +4 -4
- package/templates/.gitagent/ARCHITECTURE.pointer.json +2 -2
- package/templates/.gitagent/foreman/MANIFEST.json +3 -3
- package/templates/.gitagent/foreman/PLANNER.allowlist.example +4 -0
- package/templates/.gitagent/missions/README.md +1 -1
- package/templates/.gitagent/{teacher → planner}/ARCHITECTURE-ACCESS.md +3 -3
- package/templates/.gitagent/{teacher → planner}/ARCHITECTURE-DISCOVERY.md +2 -2
- package/templates/.gitagent/{teacher/WORKER_LOG.template.md → planner/EXECUTOR_LOG.template.md} +2 -2
- package/templates/.gitagent/{teacher → planner}/MISSION-ARCHITECT.md +11 -11
- package/templates/.gitagent/{teacher → planner}/RULES.md +4 -4
- package/templates/.githooks/post-checkout +4 -4
- package/templates/.githooks/pre-push +1 -1
- package/templates/.github/workflows/gxt-validate.yml +1 -1
- package/templates/.gitignore.gxt +1 -1
- package/templates/.prettierignore.gxt +1 -1
- package/templates/AGENTS.md +6 -6
- package/templates/docs/ARCHITECTURE.md +2 -2
- package/templates/integrations/aider/.aider.conf.yml +1 -1
- package/templates/integrations/antigravity/.agent/rules/gxt.md +1 -1
- package/templates/integrations/asset-catalog.json +7 -7
- package/templates/integrations/claude-code/CLAUDE.md +1 -1
- package/templates/integrations/cline/.clinerules/gxt.md +1 -1
- package/templates/integrations/compatibility.json +1 -1
- package/templates/integrations/junie/.junie/guidelines.md +1 -1
- package/templates/integrations/opencode/opencode.json +1 -1
- package/templates/integrations/openhands/.openhands/microagents/gxt.md +1 -1
- package/templates/integrations/recipes/_footer.md +7 -7
- package/templates/integrations/recipes/_preamble.md +7 -7
- package/templates/integrations/recipes/claude-code.md +1 -1
- package/templates/integrations/recipes/cursor.md +2 -2
- package/templates/scripts/gxt-manifest-lib.mjs +1 -1
- package/templates/scripts/gxt-runtime-env.sh +1 -1
- package/templates/skills/gantry.md +1 -1
- package/templates/skills/substrate.md +1 -1
- package/dist/cli/commands/teacher.d.ts +0 -11
- package/dist/cli/lib/teacher-identity.d.ts +0 -23
- package/dist/cli/lib/worker-log-integrity.d.ts +0 -4
- package/dist/cli/lib/worker-log-integrity.d.ts.map +0 -1
- package/dist/cli/lib/worker-log-integrity.js.map +0 -1
- package/dist/cli/lib/worker-log-line-map.d.ts.map +0 -1
- package/dist/cli/lib/worker-log-line-map.js.map +0 -1
- package/dist/cli/program-teacher.d.ts +0 -3
- package/dist/cli/program-teacher.d.ts.map +0 -1
- package/dist/cli/program-teacher.js +0 -19
- package/templates/.gitagent/foreman/TEACHER.allowlist.example +0 -4
- /package/templates/.gitagent/{teacher → planner}/KPI-REPORT.schema.yaml +0 -0
- /package/templates/.gitagent/{teacher → planner}/MISSION.schema.yaml +0 -0
|
@@ -30,7 +30,7 @@ export function resolveSkillKeyForLegislation(opts) {
|
|
|
30
30
|
return {
|
|
31
31
|
ok: false,
|
|
32
32
|
triage,
|
|
33
|
-
reason: `triage escalation — ${triage.reason}. Pass --skill-key <manifest skill> after
|
|
33
|
+
reason: `triage escalation — ${triage.reason}. Pass --skill-key <manifest skill> after Planner assigns scope.`,
|
|
34
34
|
kind: "escalated",
|
|
35
35
|
};
|
|
36
36
|
}
|
|
@@ -60,7 +60,7 @@ function buildYamlMissionBody(opts) {
|
|
|
60
60
|
doc.gate_success_substring = opts.gate_success_substring;
|
|
61
61
|
}
|
|
62
62
|
return buildMissionYamlScaffold({
|
|
63
|
-
header: `# OpenGantry mission scaffold (
|
|
63
|
+
header: `# OpenGantry mission scaffold (Planner: fill gate, TMVC narrowing, trace rows).\n` +
|
|
64
64
|
`# Legislated intent: ${opts.intent.trim().replace(/\n/g, " ")}\n`,
|
|
65
65
|
doc,
|
|
66
66
|
});
|
|
@@ -150,7 +150,7 @@ export function runLegislate(options) {
|
|
|
150
150
|
if (!skill_key)
|
|
151
151
|
return { ok: false, exitCode: 2 };
|
|
152
152
|
for (const zone of findForbiddenZoneHits(manifest, skill_key, options.intent)) {
|
|
153
|
-
logWarn(`legislate: intent may touch forbidden zone ${zone} for skill ${skill_key} — narrow TMVC in mission or confirm
|
|
153
|
+
logWarn(`legislate: intent may touch forbidden zone ${zone} for skill ${skill_key} — narrow TMVC in mission or confirm Planner override`);
|
|
154
154
|
}
|
|
155
155
|
const absolute = resolveLegislateOutputPath(root, options, msnId);
|
|
156
156
|
if (!absolute)
|
|
@@ -172,7 +172,7 @@ export function runLegislate(options) {
|
|
|
172
172
|
const missionRel = formatRepoRelative(root, absolute);
|
|
173
173
|
if (!options.silent) {
|
|
174
174
|
logInfo(`${CLI_NAME} legislate: wrote ${missionRel}`);
|
|
175
|
-
logInfo(`
|
|
175
|
+
logInfo(`Planner: git commit modifying this mission with subject starting [${msnId}] from an allowlisted Planner email (gantry planner show).`);
|
|
176
176
|
}
|
|
177
177
|
return { ok: true, missionAbs: absolute, missionRel };
|
|
178
178
|
}
|
|
@@ -19,7 +19,7 @@ export interface DraftLegislationResult {
|
|
|
19
19
|
draft_token: string;
|
|
20
20
|
chat_message_to_user: string;
|
|
21
21
|
expires_at: string;
|
|
22
|
-
|
|
22
|
+
requires_planner_commit: true;
|
|
23
23
|
}
|
|
24
24
|
export interface ExecuteLegislationResult {
|
|
25
25
|
status: "pending_signature";
|
|
@@ -28,7 +28,7 @@ export interface ExecuteLegislationResult {
|
|
|
28
28
|
suggested_human_action: string;
|
|
29
29
|
commit_message: string;
|
|
30
30
|
commit_target: string;
|
|
31
|
-
|
|
31
|
+
requires_planner_commit: true;
|
|
32
32
|
next_tool: "gxt_check_signature";
|
|
33
33
|
}
|
|
34
34
|
export interface CheckSignatureResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-governance.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/mcp-governance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAMrD,OAAO,EAAoB,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAI9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-governance.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/mcp-governance.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,18 +3,34 @@ import path from "node:path";
|
|
|
3
3
|
import { formatRepoRelative } from "./cli-io.js";
|
|
4
4
|
import { MSN_ID_PATTERN } from "./constants.js";
|
|
5
5
|
import { createDraftToken, DraftTokenError, verifyDraftToken } from "./draft-token.js";
|
|
6
|
-
import {
|
|
6
|
+
import { assertPlannerMissionProof } from "./git-proof.js";
|
|
7
7
|
import { runLegislate } from "./legislate.js";
|
|
8
8
|
import { handleRuntimeEnv } from "./mcp-runtime.js";
|
|
9
9
|
import { pinMissionFile, resolveMissionFilePath } from "./missions/parser.js";
|
|
10
10
|
import { resolvePinnedMission } from "./missions/parser.js";
|
|
11
11
|
import { runStartOrchestration } from "./start-orchestration.js";
|
|
12
12
|
import { GapmanUserError } from "./errors.js";
|
|
13
|
+
import { GXT_ERROR } from "./gxt-error-codes.js";
|
|
13
14
|
import { manifestHasSkill, resolveManifestSkillKey } from "./skill-key.js";
|
|
14
15
|
import { loadWorkspace } from "./workspace.js";
|
|
16
|
+
import { assertMcpMissionWritePath, McpWriteDeniedError } from "./mcp-write-guard.js";
|
|
15
17
|
export function mcpError(code, message, retryable) {
|
|
16
18
|
return { status: "error", error: { code, message, retryable } };
|
|
17
19
|
}
|
|
20
|
+
function mcpWriteDenied(err) {
|
|
21
|
+
return mcpError(GXT_ERROR.MCP_WRITE_DENIED, err.message, false);
|
|
22
|
+
}
|
|
23
|
+
function resolveGuardedMissionAbs(root, missionFilePath) {
|
|
24
|
+
try {
|
|
25
|
+
assertMcpMissionWritePath(missionFilePath);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
if (err instanceof McpWriteDeniedError)
|
|
29
|
+
return mcpWriteDenied(err);
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
return resolveMissionFilePath(root, missionFilePath);
|
|
33
|
+
}
|
|
18
34
|
function buildDraftChatMessage(input, manifestSkillDesc) {
|
|
19
35
|
const lines = [
|
|
20
36
|
"## Proposed GXT mission (draft — not yet written)",
|
|
@@ -69,7 +85,7 @@ export function handleDraftLegislation(input) {
|
|
|
69
85
|
draft_token: token.draft_token,
|
|
70
86
|
chat_message_to_user: buildDraftChatMessage(input, manifest.skills[resolveManifestSkillKey(manifest, skillKey)]?.desc),
|
|
71
87
|
expires_at: token.expires_at,
|
|
72
|
-
|
|
88
|
+
requires_planner_commit: true,
|
|
73
89
|
};
|
|
74
90
|
}
|
|
75
91
|
export function handleExecuteLegislation(draftToken) {
|
|
@@ -96,6 +112,14 @@ export function handleExecuteLegislation(draftToken) {
|
|
|
96
112
|
return mcpError("LEGISLATE_FAILED", "gantry legislate failed; check skill_key, msn, or output path", true);
|
|
97
113
|
}
|
|
98
114
|
const missionRel = formatRepoRelative(root, result.missionAbs);
|
|
115
|
+
try {
|
|
116
|
+
assertMcpMissionWritePath(missionRel);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
if (err instanceof McpWriteDeniedError)
|
|
120
|
+
return mcpWriteDenied(err);
|
|
121
|
+
throw err;
|
|
122
|
+
}
|
|
99
123
|
const escapedTitle = payload.title.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
100
124
|
const commitMessage = `[${payload.msn_id}] Legislate ${escapedTitle}`;
|
|
101
125
|
const suggestedHumanAction = `git add ${missionRel} && git commit -m "${commitMessage}"`;
|
|
@@ -106,24 +130,27 @@ export function handleExecuteLegislation(draftToken) {
|
|
|
106
130
|
suggested_human_action: suggestedHumanAction,
|
|
107
131
|
commit_message: commitMessage,
|
|
108
132
|
commit_target: missionRel,
|
|
109
|
-
|
|
133
|
+
requires_planner_commit: true,
|
|
110
134
|
next_tool: "gxt_check_signature",
|
|
111
135
|
};
|
|
112
136
|
}
|
|
113
137
|
export function handleCheckSignature(missionFilePath) {
|
|
114
138
|
const { root } = loadWorkspace();
|
|
115
|
-
const
|
|
139
|
+
const missionAbsOrErr = resolveGuardedMissionAbs(root, missionFilePath);
|
|
140
|
+
if (typeof missionAbsOrErr !== "string")
|
|
141
|
+
return missionAbsOrErr;
|
|
142
|
+
const missionAbs = missionAbsOrErr;
|
|
116
143
|
if (!fs.existsSync(missionAbs)) {
|
|
117
144
|
return mcpError("MISSION_NOT_FOUND", `mission file not found: ${missionFilePath}`, true);
|
|
118
145
|
}
|
|
119
146
|
try {
|
|
120
|
-
const msnId =
|
|
147
|
+
const msnId = assertPlannerMissionProof(root, missionAbs);
|
|
121
148
|
const rel = formatRepoRelative(root, missionAbs);
|
|
122
149
|
return {
|
|
123
150
|
status: "signature_valid",
|
|
124
151
|
msn_id: msnId,
|
|
125
152
|
mission_file_path: rel,
|
|
126
|
-
message: `
|
|
153
|
+
message: `Planner signature valid for ${msnId}. You may pin the mission and begin executor execution.`,
|
|
127
154
|
next_tools: ["gxt_pin_mission", "gxt_runtime_env"],
|
|
128
155
|
};
|
|
129
156
|
}
|
|
@@ -142,7 +169,10 @@ export function handleCheckSignature(missionFilePath) {
|
|
|
142
169
|
}
|
|
143
170
|
export function handlePinMission(missionFilePath) {
|
|
144
171
|
const { root } = loadWorkspace();
|
|
145
|
-
const
|
|
172
|
+
const missionAbsOrErr = resolveGuardedMissionAbs(root, missionFilePath);
|
|
173
|
+
if (typeof missionAbsOrErr !== "string")
|
|
174
|
+
return missionAbsOrErr;
|
|
175
|
+
const missionAbs = missionAbsOrErr;
|
|
146
176
|
if (!fs.existsSync(missionAbs)) {
|
|
147
177
|
return mcpError("MISSION_NOT_FOUND", `mission file not found: ${missionFilePath}`, true);
|
|
148
178
|
}
|
|
@@ -217,9 +247,9 @@ export function handleStartOrchestration(input) {
|
|
|
217
247
|
};
|
|
218
248
|
if (input.pin_if_needed === true && result.mission_file_path) {
|
|
219
249
|
const { root } = loadWorkspace();
|
|
220
|
-
const
|
|
221
|
-
if (fs.existsSync(
|
|
222
|
-
payload.pinned_mission = pinMissionFile(root,
|
|
250
|
+
const missionAbsOrErr = resolveGuardedMissionAbs(root, result.mission_file_path);
|
|
251
|
+
if (typeof missionAbsOrErr === "string" && fs.existsSync(missionAbsOrErr)) {
|
|
252
|
+
payload.pinned_mission = pinMissionFile(root, missionAbsOrErr);
|
|
223
253
|
}
|
|
224
254
|
}
|
|
225
255
|
if (input.emit_runtime_env === true && result.mission_file_path) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-governance.js","sourceRoot":"","sources":["../../../src/cli/lib/mcp-governance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAyB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAA4B,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-governance.js","sourceRoot":"","sources":["../../../src/cli/lib/mcp-governance.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ function registerLegislationTools(server) {
|
|
|
18
18
|
server.tool("gxt_execute_legislation", "Execute gantry legislate using a valid draft_token after explicit human chat approval.", {
|
|
19
19
|
draft_token: z.string().describe("Token from gxt_draft_legislation"),
|
|
20
20
|
}, async (args) => jsonText(handleExecuteLegislation(args.draft_token)));
|
|
21
|
-
server.tool("gxt_check_signature", "Check whether
|
|
21
|
+
server.tool("gxt_check_signature", "Check whether Planner git signature exists for a mission file.", {
|
|
22
22
|
mission_file_path: z.string().describe("Repo-relative mission YAML path"),
|
|
23
23
|
}, async (args) => jsonText(handleCheckSignature(args.mission_file_path)));
|
|
24
24
|
server.tool("gxt_pin_mission", "Pin active mission for runtime env and Cursor sessionStart hooks.", {
|
|
@@ -39,9 +39,9 @@ function registerRuntimeTools(server) {
|
|
|
39
39
|
mission_file_path: z.string().describe("Repo-relative mission path"),
|
|
40
40
|
cwd: z.string().optional().describe("Working directory for verifier commands"),
|
|
41
41
|
}, async (args) => jsonText(handleScan(args.mission_file_path, args.cwd)));
|
|
42
|
-
server.tool("gxt_runtime_exec", "Run
|
|
42
|
+
server.tool("gxt_runtime_exec", "Run executor command with mission env + forbidden-zone enforcement.", {
|
|
43
43
|
mission_file_path: z.string().describe("Repo-relative mission path"),
|
|
44
|
-
command: z.array(z.string()).describe("
|
|
44
|
+
command: z.array(z.string()).describe("Executor argv (after --)"),
|
|
45
45
|
cwd: z.string().optional(),
|
|
46
46
|
timeout_ms: z.number().int().positive().optional(),
|
|
47
47
|
}, async (args) => jsonText(await handleRuntimeExec({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tools-register.js","sourceRoot":"","sources":["../../../src/cli/lib/mcp-tools-register.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mcp-tools-register.js","sourceRoot":"","sources":["../../../src/cli/lib/mcp-tools-register.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/mcp-upgrade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/mcp-upgrade.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,2BAA2B,CAAC;AAKnC,MAAM,MAAM,oBAAoB,GAC5B,0BAA0B,GAC1B;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAE7C,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAElG,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAqBD,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,mBAAwB,GAAG,oBAAoB,CAevF;AAED,wBAAsB,kBAAkB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAWjG"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import { errorMessage } from "./cli-io.js";
|
|
2
2
|
import { getRepoRoot } from "./git.js";
|
|
3
|
+
import { GXT_ERROR } from "./gxt-error-codes.js";
|
|
4
|
+
import { McpWriteDeniedError } from "./mcp-write-guard.js";
|
|
3
5
|
import { assertStableUpgradePlanPayloadV1, toStableUpgradePlanPayloadV1, } from "./upgrade-plan-payload.js";
|
|
4
6
|
import { runUpgradeApply } from "./upgrade-apply.js";
|
|
5
7
|
import { runUpgradePlan } from "./upgrade-plan.js";
|
|
6
8
|
import { GapmanUserError } from "./errors.js";
|
|
7
9
|
function mcpErrorBody(e) {
|
|
10
|
+
if (e instanceof McpWriteDeniedError) {
|
|
11
|
+
return {
|
|
12
|
+
status: "error",
|
|
13
|
+
error: { code: GXT_ERROR.MCP_WRITE_DENIED, message: e.message, retryable: false },
|
|
14
|
+
};
|
|
15
|
+
}
|
|
8
16
|
if (e instanceof GapmanUserError) {
|
|
9
17
|
return {
|
|
10
18
|
status: "error",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-upgrade.js","sourceRoot":"","sources":["../../../src/cli/lib/mcp-upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-upgrade.js","sourceRoot":"","sources":["../../../src/cli/lib/mcp-upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EACL,gCAAgC,EAChC,4BAA4B,GAE7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAa9C,SAAS,YAAY,CAAC,CAAU;IAC9B,IAAI,CAAC,YAAY,mBAAmB,EAAE,CAAC;QACrC,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE;SAClF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,YAAY,eAAe,EAAE,CAAC;QACjC,OAAO;YACL,MAAM,EAAE,OAAO;YACf,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE;SAC9D,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAA6B,EAAE;IAC/D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC;YAC5B,QAAQ;YACR,GAAG,EAAE,KAAK,CAAC,MAAM;YACjB,MAAM,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI;YAC9B,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;QACrD,gCAAgC,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,eAAwB;IAC/D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,MAAM,eAAe,CAAC;YAC3B,QAAQ;YACR,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { GapmanUserError } from "./errors.js";
|
|
2
|
+
import type { Manifest } from "./types.js";
|
|
3
|
+
export declare const MCP_WRITE_DENIED: "MCP_WRITE_DENIED";
|
|
4
|
+
export declare class McpWriteDeniedError extends GapmanUserError {
|
|
5
|
+
readonly repoRelPath: string;
|
|
6
|
+
constructor(repoRelPath: string, reason: string);
|
|
7
|
+
}
|
|
8
|
+
/** Mission file writes via MCP must stay under `.gitagent/missions/`. */
|
|
9
|
+
export declare function assertMcpMissionWritePath(repoRelPath: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* Validate a repo-relative write target for a skill-scoped MCP mutation.
|
|
12
|
+
* Governance transport paths (EXECUTOR_LOG, active-mission pin) are always allowed.
|
|
13
|
+
*/
|
|
14
|
+
export declare function assertMcpSkillWritePath(manifest: Manifest, skillKey: string, repoRelPath: string): void;
|
|
15
|
+
/**
|
|
16
|
+
* Tier-3 substrate upgrade: each `planned_writes` entry is Planner-authorized via signed mission.
|
|
17
|
+
* Deny forbidden-zone targets not explicitly listed in `planned_writes`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function assertMcpSubstrateUpgradeWritePaths(manifest: Manifest, plannedWrites: readonly string[]): void;
|
|
20
|
+
//# sourceMappingURL=mcp-write-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-write-guard.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/mcp-write-guard.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,eAAO,MAAM,gBAAgB,EAAG,kBAA2B,CAAC;AAE5D,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAKhD;AASD,yEAAyE;AACzE,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CASnE;AAoBD;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,IAAI,CAiBN;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,IAAI,CAYN"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { REL_MISSIONS_PREFIX } from "./git-proof.js";
|
|
2
|
+
import { classifyRepoRelativePath, forbiddenZonesForSkill, isGovernanceTransportPath, isPathUnderRoot, normalizeRepoRelativePath, tmvcRootsForSkill, } from "./tmvc-path.js";
|
|
3
|
+
import { GapmanUserError } from "./errors.js";
|
|
4
|
+
import { resolveManifestSkillKey } from "./skill-key.js";
|
|
5
|
+
export const MCP_WRITE_DENIED = "MCP_WRITE_DENIED";
|
|
6
|
+
export class McpWriteDeniedError extends GapmanUserError {
|
|
7
|
+
repoRelPath;
|
|
8
|
+
constructor(repoRelPath, reason) {
|
|
9
|
+
const norm = normalizeRepoRelativePath(repoRelPath);
|
|
10
|
+
super(MCP_WRITE_DENIED, `MCP write denied: ${reason} (${norm})`);
|
|
11
|
+
this.repoRelPath = norm;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function assertNoPathTraversal(repoRel) {
|
|
15
|
+
const norm = normalizeRepoRelativePath(repoRel);
|
|
16
|
+
if (norm.includes("..") || norm.startsWith("/")) {
|
|
17
|
+
throw new McpWriteDeniedError(norm, "path must be repo-relative without traversal");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/** Mission file writes via MCP must stay under `.gitagent/missions/`. */
|
|
21
|
+
export function assertMcpMissionWritePath(repoRelPath) {
|
|
22
|
+
assertNoPathTraversal(repoRelPath);
|
|
23
|
+
const norm = normalizeRepoRelativePath(repoRelPath);
|
|
24
|
+
if (!norm.startsWith(REL_MISSIONS_PREFIX)) {
|
|
25
|
+
throw new McpWriteDeniedError(norm, `mission writes must stay under ${REL_MISSIONS_PREFIX}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function allManifestForbiddenZones(manifest) {
|
|
29
|
+
const zones = new Set();
|
|
30
|
+
for (const skill of Object.values(manifest.skills)) {
|
|
31
|
+
for (const fz of skill.forbidden_zones ?? []) {
|
|
32
|
+
zones.add(fz);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return [...zones];
|
|
36
|
+
}
|
|
37
|
+
function pathHitsForbiddenZone(repoRel, forbiddenZones) {
|
|
38
|
+
const norm = normalizeRepoRelativePath(repoRel);
|
|
39
|
+
for (const fz of forbiddenZones) {
|
|
40
|
+
if (isPathUnderRoot(norm, fz))
|
|
41
|
+
return fz;
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Validate a repo-relative write target for a skill-scoped MCP mutation.
|
|
47
|
+
* Governance transport paths (EXECUTOR_LOG, active-mission pin) are always allowed.
|
|
48
|
+
*/
|
|
49
|
+
export function assertMcpSkillWritePath(manifest, skillKey, repoRelPath) {
|
|
50
|
+
assertNoPathTraversal(repoRelPath);
|
|
51
|
+
const norm = normalizeRepoRelativePath(repoRelPath);
|
|
52
|
+
if (isGovernanceTransportPath(norm))
|
|
53
|
+
return;
|
|
54
|
+
const resolvedSkill = resolveManifestSkillKey(manifest, skillKey);
|
|
55
|
+
const forbidden = forbiddenZonesForSkill(manifest, resolvedSkill);
|
|
56
|
+
const hit = pathHitsForbiddenZone(norm, forbidden);
|
|
57
|
+
if (hit) {
|
|
58
|
+
throw new McpWriteDeniedError(norm, `path in forbidden zone ${hit}`);
|
|
59
|
+
}
|
|
60
|
+
const tmvc = tmvcRootsForSkill(manifest, resolvedSkill);
|
|
61
|
+
const classification = classifyRepoRelativePath(norm, tmvc, forbidden);
|
|
62
|
+
if (classification === "inside_tmvc" || classification === "governance_transport")
|
|
63
|
+
return;
|
|
64
|
+
throw new McpWriteDeniedError(norm, `path outside TMVC roots for skill ${resolvedSkill}`);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Tier-3 substrate upgrade: each `planned_writes` entry is Planner-authorized via signed mission.
|
|
68
|
+
* Deny forbidden-zone targets not explicitly listed in `planned_writes`.
|
|
69
|
+
*/
|
|
70
|
+
export function assertMcpSubstrateUpgradeWritePaths(manifest, plannedWrites) {
|
|
71
|
+
const authorized = new Set(plannedWrites.map((p) => normalizeRepoRelativePath(p)));
|
|
72
|
+
const allForbidden = allManifestForbiddenZones(manifest);
|
|
73
|
+
for (const relPath of plannedWrites) {
|
|
74
|
+
assertNoPathTraversal(relPath);
|
|
75
|
+
const norm = normalizeRepoRelativePath(relPath);
|
|
76
|
+
const hit = pathHitsForbiddenZone(norm, allForbidden);
|
|
77
|
+
if (hit && !authorized.has(norm)) {
|
|
78
|
+
throw new McpWriteDeniedError(norm, `forbidden zone ${hit} not authorized by upgrade mission`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=mcp-write-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-write-guard.js","sourceRoot":"","sources":["../../../src/cli/lib/mcp-write-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export interface EmitMissionOptions {
|
|
|
10
10
|
}
|
|
11
11
|
export declare function emitActiveMissionFromTemplate(repoRoot: string, options: EmitMissionOptions): string;
|
|
12
12
|
/**
|
|
13
|
-
* True when the mission file represents
|
|
13
|
+
* True when the mission file represents Planner legislation only — no worker
|
|
14
14
|
* execution evidence claimed yet. Pre-push may pass after git-proof alone.
|
|
15
15
|
*/
|
|
16
16
|
export declare function isLegislativeStub(mission: ParsedMission): boolean;
|
|
@@ -118,7 +118,7 @@ function isPlaceholderQuote(quote) {
|
|
|
118
118
|
return quote.trim() === LEGISLATE_TRACE_PLACEHOLDER;
|
|
119
119
|
}
|
|
120
120
|
/**
|
|
121
|
-
* True when the mission file represents
|
|
121
|
+
* True when the mission file represents Planner legislation only — no worker
|
|
122
122
|
* execution evidence claimed yet. Pre-push may pass after git-proof alone.
|
|
123
123
|
*/
|
|
124
124
|
export function isLegislativeStub(mission) {
|
|
@@ -7,7 +7,7 @@ export function tutorialTeacherStampBlock(missionPath, msnId) {
|
|
|
7
7
|
return [
|
|
8
8
|
`git add ${missionPath}`,
|
|
9
9
|
`git commit -m "[${msnId}] legislate mission"`,
|
|
10
|
-
"gantry
|
|
10
|
+
"gantry planner set \"$(git config user.email)\" # if not already configured",
|
|
11
11
|
].join("\n ");
|
|
12
12
|
}
|
|
13
13
|
export function onboardingRuntimeEnvHint(missionPath) {
|
|
@@ -71,7 +71,7 @@ export function collectOutOfScopeAdrHints(root, intentNorm) {
|
|
|
71
71
|
hints.push({
|
|
72
72
|
id: meta.id,
|
|
73
73
|
title: meta.title,
|
|
74
|
-
note: `Intent may relate to ADR ${meta.id} (match_terms overlap);
|
|
74
|
+
note: `Intent may relate to ADR ${meta.id} (match_terms overlap); Planner must confirm or reject during legislation.`,
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
return hints;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Manifest } from "./types.js";
|
|
2
|
-
export declare const DEFAULT_PERIMETER_PROTECTED: readonly ["**/.gxt-skill.yaml", ".gitagent/foreman/MANIFEST.json", ".gitagent/
|
|
2
|
+
export declare const DEFAULT_PERIMETER_PROTECTED: readonly ["**/.gxt-skill.yaml", ".gitagent/foreman/MANIFEST.json", ".gitagent/planner/RULES.md"];
|
|
3
3
|
export interface PerimeterViolation {
|
|
4
4
|
path: string;
|
|
5
5
|
commit: string;
|
|
@@ -3,11 +3,11 @@ import { GXT_ERROR } from "./gxt-error-codes.js";
|
|
|
3
3
|
import { toPosixRel } from "./cli-io.js";
|
|
4
4
|
import { gitRevParse, gitRun, gitRunOk } from "./git.js";
|
|
5
5
|
import { commitSubjectHasMsnPrefix, listCommitChangedPaths, listMsnSubjectCommits, } from "./git-proof.js";
|
|
6
|
-
import {
|
|
6
|
+
import { resolvePlannerEmails } from "./planner-identity.js";
|
|
7
7
|
export const DEFAULT_PERIMETER_PROTECTED = [
|
|
8
8
|
"**/.gxt-skill.yaml",
|
|
9
9
|
".gitagent/foreman/MANIFEST.json",
|
|
10
|
-
".gitagent/
|
|
10
|
+
".gitagent/planner/RULES.md",
|
|
11
11
|
];
|
|
12
12
|
const SHALLOW_HISTORY_HINT = "Configure CI checkout with fetch-depth: 0 or fetch the base ref explicitly before running gantry perimeter --ci.";
|
|
13
13
|
function perimeterGlobs(manifest) {
|
|
@@ -103,10 +103,10 @@ function signatureStatus(repoRoot, hash) {
|
|
|
103
103
|
function isGoodSignature(status) {
|
|
104
104
|
return status === "G" || status === "U";
|
|
105
105
|
}
|
|
106
|
-
function findTeacherStampForPath(repoRoot, msnId, repoRelPath,
|
|
106
|
+
function findTeacherStampForPath(repoRoot, msnId, repoRelPath, plannerEmails) {
|
|
107
107
|
const rows = listMsnSubjectCommits(repoRoot, msnId);
|
|
108
108
|
for (const row of rows) {
|
|
109
|
-
if (!
|
|
109
|
+
if (!plannerEmails.includes(row.authorEmail.trim().toLowerCase()))
|
|
110
110
|
continue;
|
|
111
111
|
const changed = listCommitChangedPaths(repoRoot, row.hash);
|
|
112
112
|
if (changed.some((p) => p.replace(/\\/g, "/") === repoRelPath.replace(/\\/g, "/"))) {
|
|
@@ -159,7 +159,7 @@ function checkProtectedPathCi(repoRoot, baseRef, filePath, violations, advisorie
|
|
|
159
159
|
advisories.push(`perimeter: ${filePath} — all ${String(range.commits.length)} commit(s) in range are signed`);
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
|
-
function checkProtectedPathLocal(repoRoot, filePath,
|
|
162
|
+
function checkProtectedPathLocal(repoRoot, filePath, plannerEmails, violations, advisories) {
|
|
163
163
|
const commit = lastCommitTouchingPath(repoRoot, filePath);
|
|
164
164
|
if (!commit) {
|
|
165
165
|
violations.push({
|
|
@@ -182,11 +182,11 @@ function checkProtectedPathLocal(repoRoot, filePath, teacherEmails, violations,
|
|
|
182
182
|
}
|
|
183
183
|
const msnId = extractMsnFromRecentCommits(repoRoot, commit);
|
|
184
184
|
const emailMatch = row.authorEmail.trim().toLowerCase() &&
|
|
185
|
-
|
|
185
|
+
plannerEmails.includes(row.authorEmail.trim().toLowerCase());
|
|
186
186
|
const subjectMatch = msnId !== null && commitSubjectHasMsnPrefix(row.subject, msnId);
|
|
187
|
-
const stamp = msnId !== null ? findTeacherStampForPath(repoRoot, msnId, filePath,
|
|
187
|
+
const stamp = msnId !== null ? findTeacherStampForPath(repoRoot, msnId, filePath, plannerEmails) : null;
|
|
188
188
|
if (stamp) {
|
|
189
|
-
advisories.push(`perimeter (advisory): ${filePath} —
|
|
189
|
+
advisories.push(`perimeter (advisory): ${filePath} — Planner email + MSN stamp hint matched ${stamp.hash.slice(0, 7)} (forgeable locally; CI verifies signature)`);
|
|
190
190
|
return;
|
|
191
191
|
}
|
|
192
192
|
advisories.push(`perimeter (advisory): ${filePath} modified in ${commit.slice(0, 7)} — ` +
|
|
@@ -216,7 +216,7 @@ export function checkPerimeter(repoRoot, manifest, options) {
|
|
|
216
216
|
if (protectedChanged.length === 0) {
|
|
217
217
|
return { ok: true, violations: [], advisories: [] };
|
|
218
218
|
}
|
|
219
|
-
const
|
|
219
|
+
const plannerEmails = resolvePlannerEmails(repoRoot).emails;
|
|
220
220
|
const violations = [];
|
|
221
221
|
const advisories = [];
|
|
222
222
|
for (const filePath of protectedChanged) {
|
|
@@ -224,7 +224,7 @@ export function checkPerimeter(repoRoot, manifest, options) {
|
|
|
224
224
|
checkProtectedPathCi(repoRoot, options.baseRef, filePath, violations, advisories);
|
|
225
225
|
}
|
|
226
226
|
else {
|
|
227
|
-
checkProtectedPathLocal(repoRoot, filePath,
|
|
227
|
+
checkProtectedPathLocal(repoRoot, filePath, plannerEmails, violations, advisories);
|
|
228
228
|
}
|
|
229
229
|
}
|
|
230
230
|
const hardFailures = violations.filter((v) => !v.advisoryOnly);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export { ENV_PLANNER_EMAILS } from "./config-namespace.js";
|
|
2
|
+
export declare const REL_PLANNER_ALLOWLIST: ".gitagent/foreman/PLANNER.allowlist";
|
|
3
|
+
export declare const REL_PLANNER_ALLOWLIST_LOCAL: ".gitagent/foreman/PLANNER.allowlist.local";
|
|
4
|
+
export type PlannerIdentitySource = "allowlist_file" | "allowlist_local" | "git_config" | "env" | "git_user_email" | "unset";
|
|
5
|
+
export interface ResolvedPlannerIdentity {
|
|
6
|
+
emails: string[];
|
|
7
|
+
source: PlannerIdentitySource;
|
|
8
|
+
/** Human-readable detail for doctor / errors */
|
|
9
|
+
detail: string;
|
|
10
|
+
}
|
|
11
|
+
/** Legacy env-only parser (tests / explicit CI override). */
|
|
12
|
+
export declare function parsePlannerEmailsFromEnv(): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Resolve Planner legislation allowlist for a repository.
|
|
15
|
+
* Repo-local sources win over shell env so multi-project developers are not cross-contaminated.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolvePlannerEmails(repoRoot: string): ResolvedPlannerIdentity;
|
|
18
|
+
export declare function serializePlannerAllowlist(emails: string[]): string;
|
|
19
|
+
export declare function writePlannerAllowlistLocal(repoRoot: string, emails: string[]): void;
|
|
20
|
+
/** Create gitignored local allowlist from repo git user.email when missing. */
|
|
21
|
+
export declare function ensurePlannerAllowlistOnInit(repoRoot: string): boolean;
|
|
22
|
+
export declare function plannerIdentitySetupHint(_repoRoot: string): string;
|
|
23
|
+
//# sourceMappingURL=planner-identity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"planner-identity.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/planner-identity.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,eAAO,MAAM,qBAAqB,EAAG,qCAA8C,CAAC;AACpF,eAAO,MAAM,2BAA2B,EAAG,2CAAoD,CAAC;AAEhG,MAAM,MAAM,qBAAqB,GAC7B,gBAAgB,GAChB,iBAAiB,GACjB,YAAY,GACZ,KAAK,GACL,gBAAgB,GAChB,OAAO,CAAC;AAEZ,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AA8BD,6DAA6D;AAC7D,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAIpD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,uBAAuB,CA2C9E;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAGlE;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAInF;AAED,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAStE;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAOlE"}
|