aegis-mcp-server 0.1.16 → 0.1.17
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 +26 -10
- package/dist/tools/file-tools.d.ts +4 -0
- package/dist/tools/file-tools.d.ts.map +1 -1
- package/dist/tools/file-tools.js +146 -2
- package/dist/tools/file-tools.js.map +1 -1
- package/package.json +1 -1
- package/src/tools/file-tools.ts +165 -2
package/README.md
CHANGED
|
@@ -25,18 +25,33 @@ When starting a new agent session in a governed project, use this as your first
|
|
|
25
25
|
|
|
26
26
|
```
|
|
27
27
|
Call aegis_policy_summary now. This is your governance contract — it defines your
|
|
28
|
-
role, your boundaries, and which tools to use. Do not
|
|
29
|
-
|
|
28
|
+
role, your boundaries, and which tools to use. Do not take any action until you have
|
|
29
|
+
called this tool and received confirmation from the user to proceed.
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
For initial builds, the [Aegis CLI](https://github.com/cleburn/aegis-cli) generates a custom handoff prompt tailored to your project — use that instead.
|
|
33
|
+
|
|
32
34
|
## How It Works
|
|
33
35
|
|
|
34
36
|
### Universal Mode (Default)
|
|
35
37
|
|
|
36
|
-
The MCP starts without a pre-assigned role. When the agent calls `aegis_policy_summary`, it receives the list of available roles from `.agentpolicy/roles/`. The agent presents them to the user, the user picks, and the agent calls `aegis_select_role` to lock in. All enforcement uses the selected role for the rest of the session.
|
|
38
|
+
The MCP starts without a pre-assigned role. When the agent calls `aegis_policy_summary`, it receives the list of available roles — including the built-in **construction** role and all specialist roles from `.agentpolicy/roles/`. The agent presents them to the user, the user picks, and the agent calls `aegis_select_role` to lock in. All enforcement uses the selected role for the rest of the session.
|
|
37
39
|
|
|
38
40
|
This is the default behavior — no configuration needed beyond the `.mcp.json` that `aegis init` creates automatically.
|
|
39
41
|
|
|
42
|
+
### Construction Mode
|
|
43
|
+
|
|
44
|
+
The **construction** role is always available for initial builds and major restructuring. When selected:
|
|
45
|
+
|
|
46
|
+
- The agent has full repository access (all paths writable and readable)
|
|
47
|
+
- The `.agentpolicy/` files serve as the blueprint — the agent reads constitution, governance, and role files to understand the project's architecture, conventions, and quality standards
|
|
48
|
+
- File operations run through native tools rather than governed tools, for speed
|
|
49
|
+
- The MCP logs the construction session start to `state/overrides.jsonl` with a timestamp and `human_confirmed: true`
|
|
50
|
+
- When the build is complete, the agent calls `aegis_complete_task` to run quality gates and close construction mode — the closing timestamp is logged alongside the opening entry
|
|
51
|
+
- All future sessions after construction should select a specialist role for governed operations
|
|
52
|
+
|
|
53
|
+
Construction mode is not a bypass — the agent still follows the governance files as its blueprint. It's a speed optimization for greenfield builds where enforcing write restrictions on every file would be counterproductive.
|
|
54
|
+
|
|
40
55
|
### Fixed Mode
|
|
41
56
|
|
|
42
57
|
If you know which role to assign at startup:
|
|
@@ -59,13 +74,13 @@ The MCP locks to that role immediately. `aegis_policy_summary` returns the role'
|
|
|
59
74
|
| Tool | What it does | Token cost |
|
|
60
75
|
|------|-------------|------------|
|
|
61
76
|
| `aegis_policy_summary` | Role boundaries and governance summary (or available roles in universal mode) | ~200 tokens |
|
|
62
|
-
| `aegis_select_role` | Select a role in universal mode | Tiny |
|
|
77
|
+
| `aegis_select_role` | Select a role (including construction) in universal mode | Tiny |
|
|
63
78
|
| `aegis_check_permissions` | Pre-check if an operation is allowed | Tiny |
|
|
64
79
|
| `aegis_write_file` | Governed write with path + content validation | Same as a normal write |
|
|
65
80
|
| `aegis_read_file` | Governed read with path validation | Same as a normal read |
|
|
66
81
|
| `aegis_delete_file` | Governed delete with path validation | Tiny |
|
|
67
82
|
| `aegis_execute` | Governed command execution | Command output only |
|
|
68
|
-
| `aegis_complete_task` | Run quality gates
|
|
83
|
+
| `aegis_complete_task` | Run quality gates and close construction mode if active | Gate results only |
|
|
69
84
|
| `aegis_request_override` | Execute a blocked action after human confirmation | Tiny |
|
|
70
85
|
|
|
71
86
|
## Zero Token Overhead
|
|
@@ -78,11 +93,12 @@ Aegis MCP approach: the server loads policy into its own process memory. The age
|
|
|
78
93
|
|
|
79
94
|
- **Governance boundaries** — `writable`, `read_only`, `forbidden` path lists
|
|
80
95
|
- **Role scoping** — agents confined to their role's writable and readable paths
|
|
81
|
-
- **Sensitive pattern detection** — content scanned against governance-defined patterns
|
|
96
|
+
- **Sensitive pattern detection** — content scanned against governance-defined regex patterns (content only, not path-based)
|
|
82
97
|
- **Cross-domain boundaries** — imports validated against shared interface rules
|
|
83
98
|
- **Quality gate validation** — `pre_commit` flags mapped to `build_commands` and executed
|
|
84
99
|
- **Override logging** — every blocked action logged to append-only `overrides.jsonl`
|
|
85
100
|
- **Immutable policies** — designated rules that cannot be overridden, ever
|
|
101
|
+
- **Construction session logging** — start and end timestamps for initial builds
|
|
86
102
|
|
|
87
103
|
## Override Protocol
|
|
88
104
|
|
|
@@ -94,7 +110,7 @@ When an action is blocked and the governance override behavior is `warn_confirm_
|
|
|
94
110
|
4. The action proceeds — the override is logged with `human_confirmed: true`
|
|
95
111
|
5. Normal governance resumes immediately — the override is a one-time exception
|
|
96
112
|
|
|
97
|
-
Immutable policies (e.g., HIPAA compliance, audit completeness) return `override_available: false` and cannot be overridden. The user must modify the governance through `aegis init`.
|
|
113
|
+
Immutable policies (e.g., HIPAA compliance, ITAR data sovereignty, audit completeness) return `override_available: false` and cannot be overridden. The user must modify the governance through `aegis init`.
|
|
98
114
|
|
|
99
115
|
## Consent-Based Governance
|
|
100
116
|
|
|
@@ -116,9 +132,9 @@ Agent ──→ aegis-mcp-server ──→ File System
|
|
|
116
132
|
|
|
117
133
|
Three artifacts, one governance framework:
|
|
118
134
|
|
|
119
|
-
- [**aegis-spec**](https://github.com/cleburn/aegis-spec) —
|
|
120
|
-
- [**aegis-cli**](https://github.com/cleburn/aegis-cli) — Generates the
|
|
121
|
-
- **aegis-mcp-server** — Enforces the
|
|
135
|
+
- [**aegis-spec**](https://github.com/cleburn/aegis-spec) — The governance standard
|
|
136
|
+
- [**aegis-cli**](https://github.com/cleburn/aegis-cli) — Generates the governance
|
|
137
|
+
- **aegis-mcp-server** — Enforces the governance
|
|
122
138
|
|
|
123
139
|
## License
|
|
124
140
|
|
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
* proceeds and is logged with human_confirmed: true. Single-use, 5-min TTL.
|
|
21
21
|
*
|
|
22
22
|
* LOGGING: Every denied action is logged automatically by the server.
|
|
23
|
+
*
|
|
24
|
+
* LEDGER: aegis_complete_task writes a task entry to the ledger on every
|
|
25
|
+
* completion — construction or normal. This makes the ledger useful for
|
|
26
|
+
* single-agent workflows, not just multi-agent coordination.
|
|
23
27
|
*/
|
|
24
28
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
25
29
|
import type { EnforcementEngine } from '../services/enforcement-engine.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-tools.d.ts","sourceRoot":"","sources":["../../src/tools/file-tools.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"file-tools.d.ts","sourceRoot":"","sources":["../../src/tools/file-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM7D,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,iBAAiB,EAClC,QAAQ,EAAE,MAAM,WAAW,EAC3B,OAAO,EAAE,MAAM,YAAY,EAC3B,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,GAC3C,IAAI,CA6vBN"}
|
package/dist/tools/file-tools.js
CHANGED
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
* proceeds and is logged with human_confirmed: true. Single-use, 5-min TTL.
|
|
21
21
|
*
|
|
22
22
|
* LOGGING: Every denied action is logged automatically by the server.
|
|
23
|
+
*
|
|
24
|
+
* LEDGER: aegis_complete_task writes a task entry to the ledger on every
|
|
25
|
+
* completion — construction or normal. This makes the ledger useful for
|
|
26
|
+
* single-agent workflows, not just multi-agent coordination.
|
|
23
27
|
*/
|
|
24
28
|
import { readFile, writeFile, unlink, mkdir } from 'node:fs/promises';
|
|
25
29
|
import { dirname, join, isAbsolute } from 'node:path';
|
|
@@ -464,7 +468,7 @@ Returns:
|
|
|
464
468
|
// ─── aegis_complete_task ──────────────────────────────────────────────────
|
|
465
469
|
server.registerTool('aegis_complete_task', {
|
|
466
470
|
title: 'Complete Task',
|
|
467
|
-
description: `${GOVERNANCE_INTRO}Signal task completion and run required quality gates. In construction mode, this also closes the construction session and logs the closing timestamp — all future sessions should select a specialist role for governed operations.
|
|
471
|
+
description: `${GOVERNANCE_INTRO}Signal task completion and run required quality gates. Writes a task entry to the project ledger for auditability. In construction mode, this also closes the construction session and logs the closing timestamp — all future sessions should select a specialist role for governed operations.
|
|
468
472
|
|
|
469
473
|
Args:
|
|
470
474
|
- task_id (string): Identifier for the task being completed
|
|
@@ -485,6 +489,7 @@ Returns:
|
|
|
485
489
|
}, async ({ task_id, summary }) => {
|
|
486
490
|
const engine = getEngine();
|
|
487
491
|
const state = getState();
|
|
492
|
+
const role = getRole();
|
|
488
493
|
// If construction mode is active, log the closing entry
|
|
489
494
|
if (loader.isConstructionMode()) {
|
|
490
495
|
const startedAt = loader.getConstructionStartedAt();
|
|
@@ -499,10 +504,29 @@ Returns:
|
|
|
499
504
|
rationale: `Construction complete. Started: ${startedAt}. Summary: ${summary}`,
|
|
500
505
|
});
|
|
501
506
|
loader.endConstructionMode();
|
|
502
|
-
//
|
|
507
|
+
// Run quality gates if configured
|
|
503
508
|
const gates = engine.getQualityGateCommands();
|
|
504
509
|
const results = await runQualityGates(gates, state.projectRoot);
|
|
505
510
|
const allPassed = results.every((r) => r.passed);
|
|
511
|
+
// Write ledger entry
|
|
512
|
+
await writeLedgerEntry(state.policyDir, {
|
|
513
|
+
id: task_id,
|
|
514
|
+
status: allPassed ? 'completed' : 'failed',
|
|
515
|
+
summary,
|
|
516
|
+
assigned_role: 'construction',
|
|
517
|
+
created_at: startedAt ?? completedAt,
|
|
518
|
+
updated_at: completedAt,
|
|
519
|
+
outcome: allPassed ? {
|
|
520
|
+
summary,
|
|
521
|
+
completed_at: completedAt,
|
|
522
|
+
} : undefined,
|
|
523
|
+
failure_log: !allPassed ? {
|
|
524
|
+
approach: summary,
|
|
525
|
+
error: results.filter(r => !r.passed).map(r => `${r.name}: ${r.output}`).join('; '),
|
|
526
|
+
attempted_at: completedAt,
|
|
527
|
+
retry_recommended: true,
|
|
528
|
+
} : undefined,
|
|
529
|
+
});
|
|
506
530
|
return {
|
|
507
531
|
content: [{
|
|
508
532
|
type: 'text',
|
|
@@ -514,6 +538,7 @@ Returns:
|
|
|
514
538
|
construction_started_at: startedAt,
|
|
515
539
|
construction_completed_at: completedAt,
|
|
516
540
|
gates_run: results,
|
|
541
|
+
ledger_updated: true,
|
|
517
542
|
message: 'Construction mode is now closed. All future agent sessions should select a specialist role for governed operations. The construction session has been logged to the audit trail.',
|
|
518
543
|
}),
|
|
519
544
|
}],
|
|
@@ -521,7 +546,21 @@ Returns:
|
|
|
521
546
|
}
|
|
522
547
|
// Normal (non-construction) task completion
|
|
523
548
|
const gates = engine.getQualityGateCommands();
|
|
549
|
+
const completedAt = new Date().toISOString();
|
|
524
550
|
if (gates.length === 0) {
|
|
551
|
+
// No gates, but still write ledger entry
|
|
552
|
+
await writeLedgerEntry(state.policyDir, {
|
|
553
|
+
id: task_id,
|
|
554
|
+
status: 'completed',
|
|
555
|
+
summary,
|
|
556
|
+
assigned_role: role.id,
|
|
557
|
+
created_at: completedAt,
|
|
558
|
+
updated_at: completedAt,
|
|
559
|
+
outcome: {
|
|
560
|
+
summary,
|
|
561
|
+
completed_at: completedAt,
|
|
562
|
+
},
|
|
563
|
+
});
|
|
525
564
|
return {
|
|
526
565
|
content: [{
|
|
527
566
|
type: 'text',
|
|
@@ -530,6 +569,7 @@ Returns:
|
|
|
530
569
|
task_id,
|
|
531
570
|
summary,
|
|
532
571
|
gates_run: [],
|
|
572
|
+
ledger_updated: true,
|
|
533
573
|
message: 'No quality gates configured with matching build commands.',
|
|
534
574
|
}),
|
|
535
575
|
}],
|
|
@@ -537,6 +577,25 @@ Returns:
|
|
|
537
577
|
}
|
|
538
578
|
const results = await runQualityGates(gates, state.projectRoot);
|
|
539
579
|
const allPassed = results.every((r) => r.passed);
|
|
580
|
+
// Write ledger entry
|
|
581
|
+
await writeLedgerEntry(state.policyDir, {
|
|
582
|
+
id: task_id,
|
|
583
|
+
status: allPassed ? 'completed' : 'failed',
|
|
584
|
+
summary,
|
|
585
|
+
assigned_role: role.id,
|
|
586
|
+
created_at: completedAt,
|
|
587
|
+
updated_at: completedAt,
|
|
588
|
+
outcome: allPassed ? {
|
|
589
|
+
summary,
|
|
590
|
+
completed_at: completedAt,
|
|
591
|
+
} : undefined,
|
|
592
|
+
failure_log: !allPassed ? {
|
|
593
|
+
approach: summary,
|
|
594
|
+
error: results.filter(r => !r.passed).map(r => `${r.name}: ${r.output}`).join('; '),
|
|
595
|
+
attempted_at: completedAt,
|
|
596
|
+
retry_recommended: true,
|
|
597
|
+
} : undefined,
|
|
598
|
+
});
|
|
540
599
|
return {
|
|
541
600
|
content: [{
|
|
542
601
|
type: 'text',
|
|
@@ -545,6 +604,7 @@ Returns:
|
|
|
545
604
|
task_id,
|
|
546
605
|
summary,
|
|
547
606
|
gates_run: results,
|
|
607
|
+
ledger_updated: true,
|
|
548
608
|
}),
|
|
549
609
|
}],
|
|
550
610
|
};
|
|
@@ -693,4 +753,88 @@ async function runQualityGates(gates, projectRoot) {
|
|
|
693
753
|
}
|
|
694
754
|
return results;
|
|
695
755
|
}
|
|
756
|
+
/**
|
|
757
|
+
* Write a task entry to the project ledger.
|
|
758
|
+
*
|
|
759
|
+
* Reads the current ledger, appends a task entry, increments the sequence,
|
|
760
|
+
* and writes it back. Follows the ledger write protocol (lock file,
|
|
761
|
+
* sequence check). In single-agent sessions the lock is rarely contended,
|
|
762
|
+
* but the protocol is followed for correctness.
|
|
763
|
+
*
|
|
764
|
+
* Failures are logged to stderr but do not block task completion —
|
|
765
|
+
* the ledger is an audit convenience, not a critical path.
|
|
766
|
+
*/
|
|
767
|
+
async function writeLedgerEntry(policyDir, task) {
|
|
768
|
+
const ledgerPath = join(policyDir, 'state', 'ledger.json');
|
|
769
|
+
const lockPath = join(policyDir, 'state', 'ledger.lock');
|
|
770
|
+
try {
|
|
771
|
+
// Ensure state directory exists
|
|
772
|
+
await mkdir(dirname(lockPath), { recursive: true });
|
|
773
|
+
// Acquire lock (best-effort — wx flag fails if lock exists)
|
|
774
|
+
await writeFile(lockPath, JSON.stringify({
|
|
775
|
+
held_by: task.assigned_role,
|
|
776
|
+
acquired_at: new Date().toISOString(),
|
|
777
|
+
}), { flag: 'wx' }).catch(() => {
|
|
778
|
+
// Lock exists — in single-agent mode this is rare.
|
|
779
|
+
// Proceed anyway since we're the only writer.
|
|
780
|
+
});
|
|
781
|
+
// Read current ledger
|
|
782
|
+
let ledger;
|
|
783
|
+
try {
|
|
784
|
+
const raw = await readFile(ledgerPath, 'utf-8');
|
|
785
|
+
ledger = JSON.parse(raw);
|
|
786
|
+
}
|
|
787
|
+
catch {
|
|
788
|
+
// Ledger doesn't exist or is invalid — create minimal structure
|
|
789
|
+
ledger = {
|
|
790
|
+
'$schema': 'https://aegis.dev/schema/ledger.v0.1.0.json',
|
|
791
|
+
version: '0.1.0',
|
|
792
|
+
sequence: 0,
|
|
793
|
+
tasks: [],
|
|
794
|
+
write_protocol: {
|
|
795
|
+
lock_file: '.agentpolicy/state/ledger.lock',
|
|
796
|
+
lock_timeout_seconds: 120,
|
|
797
|
+
retry_interval_ms: 500,
|
|
798
|
+
max_retries: 10,
|
|
799
|
+
procedure: [
|
|
800
|
+
{ step: 1, action: 'Read current ledger and note sequence number' },
|
|
801
|
+
{ step: 2, action: 'Attempt to create lock file. If exists and not stale, wait and retry' },
|
|
802
|
+
{ step: 3, action: 'Re-read ledger. If sequence changed, release lock and restart' },
|
|
803
|
+
{ step: 4, action: 'Write changes, increment sequence' },
|
|
804
|
+
{ step: 5, action: 'Release lock file' },
|
|
805
|
+
],
|
|
806
|
+
},
|
|
807
|
+
};
|
|
808
|
+
}
|
|
809
|
+
// Build task entry
|
|
810
|
+
const tasks = ledger.tasks ?? [];
|
|
811
|
+
const entry = {
|
|
812
|
+
id: task.id,
|
|
813
|
+
status: task.status,
|
|
814
|
+
summary: task.summary,
|
|
815
|
+
assigned_role: task.assigned_role,
|
|
816
|
+
created_at: task.created_at,
|
|
817
|
+
updated_at: task.updated_at,
|
|
818
|
+
};
|
|
819
|
+
if (task.outcome)
|
|
820
|
+
entry.outcome = task.outcome;
|
|
821
|
+
if (task.failure_log)
|
|
822
|
+
entry.failure_log = task.failure_log;
|
|
823
|
+
// Append and update sequence
|
|
824
|
+
tasks.push(entry);
|
|
825
|
+
ledger.tasks = tasks;
|
|
826
|
+
ledger.sequence = (ledger.sequence ?? 0) + 1;
|
|
827
|
+
ledger.last_updated = new Date().toISOString();
|
|
828
|
+
// Write updated ledger
|
|
829
|
+
await writeFile(ledgerPath, JSON.stringify(ledger, null, 2) + '\n', 'utf-8');
|
|
830
|
+
// Release lock
|
|
831
|
+
await unlink(lockPath).catch(() => { });
|
|
832
|
+
}
|
|
833
|
+
catch (err) {
|
|
834
|
+
// Ledger write failed — log but don't block task completion
|
|
835
|
+
process.stderr.write(`[aegis-mcp] Ledger write failed: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
836
|
+
// Clean up lock on failure
|
|
837
|
+
await unlink(lockPath).catch(() => { });
|
|
838
|
+
}
|
|
839
|
+
}
|
|
696
840
|
//# sourceMappingURL=file-tools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-tools.js","sourceRoot":"","sources":["../../src/tools/file-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"file-tools.js","sourceRoot":"","sources":["../../src/tools/file-tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/tools/file-tools.ts
CHANGED
|
@@ -20,6 +20,10 @@
|
|
|
20
20
|
* proceeds and is logged with human_confirmed: true. Single-use, 5-min TTL.
|
|
21
21
|
*
|
|
22
22
|
* LOGGING: Every denied action is logged automatically by the server.
|
|
23
|
+
*
|
|
24
|
+
* LEDGER: aegis_complete_task writes a task entry to the ledger on every
|
|
25
|
+
* completion — construction or normal. This makes the ledger useful for
|
|
26
|
+
* single-agent workflows, not just multi-agent coordination.
|
|
23
27
|
*/
|
|
24
28
|
|
|
25
29
|
import { readFile, writeFile, unlink, mkdir } from 'node:fs/promises';
|
|
@@ -556,7 +560,7 @@ Returns:
|
|
|
556
560
|
'aegis_complete_task',
|
|
557
561
|
{
|
|
558
562
|
title: 'Complete Task',
|
|
559
|
-
description: `${GOVERNANCE_INTRO}Signal task completion and run required quality gates. In construction mode, this also closes the construction session and logs the closing timestamp — all future sessions should select a specialist role for governed operations.
|
|
563
|
+
description: `${GOVERNANCE_INTRO}Signal task completion and run required quality gates. Writes a task entry to the project ledger for auditability. In construction mode, this also closes the construction session and logs the closing timestamp — all future sessions should select a specialist role for governed operations.
|
|
560
564
|
|
|
561
565
|
Args:
|
|
562
566
|
- task_id (string): Identifier for the task being completed
|
|
@@ -578,6 +582,7 @@ Returns:
|
|
|
578
582
|
async ({ task_id, summary }) => {
|
|
579
583
|
const engine = getEngine();
|
|
580
584
|
const state = getState();
|
|
585
|
+
const role = getRole();
|
|
581
586
|
|
|
582
587
|
// If construction mode is active, log the closing entry
|
|
583
588
|
if (loader.isConstructionMode()) {
|
|
@@ -596,11 +601,31 @@ Returns:
|
|
|
596
601
|
|
|
597
602
|
loader.endConstructionMode();
|
|
598
603
|
|
|
599
|
-
//
|
|
604
|
+
// Run quality gates if configured
|
|
600
605
|
const gates = engine.getQualityGateCommands();
|
|
601
606
|
const results = await runQualityGates(gates, state.projectRoot);
|
|
602
607
|
const allPassed = results.every((r) => r.passed);
|
|
603
608
|
|
|
609
|
+
// Write ledger entry
|
|
610
|
+
await writeLedgerEntry(state.policyDir, {
|
|
611
|
+
id: task_id,
|
|
612
|
+
status: allPassed ? 'completed' : 'failed',
|
|
613
|
+
summary,
|
|
614
|
+
assigned_role: 'construction',
|
|
615
|
+
created_at: startedAt ?? completedAt,
|
|
616
|
+
updated_at: completedAt,
|
|
617
|
+
outcome: allPassed ? {
|
|
618
|
+
summary,
|
|
619
|
+
completed_at: completedAt,
|
|
620
|
+
} : undefined,
|
|
621
|
+
failure_log: !allPassed ? {
|
|
622
|
+
approach: summary,
|
|
623
|
+
error: results.filter(r => !r.passed).map(r => `${r.name}: ${r.output}`).join('; '),
|
|
624
|
+
attempted_at: completedAt,
|
|
625
|
+
retry_recommended: true,
|
|
626
|
+
} : undefined,
|
|
627
|
+
});
|
|
628
|
+
|
|
604
629
|
return {
|
|
605
630
|
content: [{
|
|
606
631
|
type: 'text' as const,
|
|
@@ -612,6 +637,7 @@ Returns:
|
|
|
612
637
|
construction_started_at: startedAt,
|
|
613
638
|
construction_completed_at: completedAt,
|
|
614
639
|
gates_run: results,
|
|
640
|
+
ledger_updated: true,
|
|
615
641
|
message: 'Construction mode is now closed. All future agent sessions should select a specialist role for governed operations. The construction session has been logged to the audit trail.',
|
|
616
642
|
}),
|
|
617
643
|
}],
|
|
@@ -620,8 +646,23 @@ Returns:
|
|
|
620
646
|
|
|
621
647
|
// Normal (non-construction) task completion
|
|
622
648
|
const gates = engine.getQualityGateCommands();
|
|
649
|
+
const completedAt = new Date().toISOString();
|
|
623
650
|
|
|
624
651
|
if (gates.length === 0) {
|
|
652
|
+
// No gates, but still write ledger entry
|
|
653
|
+
await writeLedgerEntry(state.policyDir, {
|
|
654
|
+
id: task_id,
|
|
655
|
+
status: 'completed',
|
|
656
|
+
summary,
|
|
657
|
+
assigned_role: role.id,
|
|
658
|
+
created_at: completedAt,
|
|
659
|
+
updated_at: completedAt,
|
|
660
|
+
outcome: {
|
|
661
|
+
summary,
|
|
662
|
+
completed_at: completedAt,
|
|
663
|
+
},
|
|
664
|
+
});
|
|
665
|
+
|
|
625
666
|
return {
|
|
626
667
|
content: [{
|
|
627
668
|
type: 'text' as const,
|
|
@@ -630,6 +671,7 @@ Returns:
|
|
|
630
671
|
task_id,
|
|
631
672
|
summary,
|
|
632
673
|
gates_run: [],
|
|
674
|
+
ledger_updated: true,
|
|
633
675
|
message: 'No quality gates configured with matching build commands.',
|
|
634
676
|
}),
|
|
635
677
|
}],
|
|
@@ -639,6 +681,26 @@ Returns:
|
|
|
639
681
|
const results = await runQualityGates(gates, state.projectRoot);
|
|
640
682
|
const allPassed = results.every((r) => r.passed);
|
|
641
683
|
|
|
684
|
+
// Write ledger entry
|
|
685
|
+
await writeLedgerEntry(state.policyDir, {
|
|
686
|
+
id: task_id,
|
|
687
|
+
status: allPassed ? 'completed' : 'failed',
|
|
688
|
+
summary,
|
|
689
|
+
assigned_role: role.id,
|
|
690
|
+
created_at: completedAt,
|
|
691
|
+
updated_at: completedAt,
|
|
692
|
+
outcome: allPassed ? {
|
|
693
|
+
summary,
|
|
694
|
+
completed_at: completedAt,
|
|
695
|
+
} : undefined,
|
|
696
|
+
failure_log: !allPassed ? {
|
|
697
|
+
approach: summary,
|
|
698
|
+
error: results.filter(r => !r.passed).map(r => `${r.name}: ${r.output}`).join('; '),
|
|
699
|
+
attempted_at: completedAt,
|
|
700
|
+
retry_recommended: true,
|
|
701
|
+
} : undefined,
|
|
702
|
+
});
|
|
703
|
+
|
|
642
704
|
return {
|
|
643
705
|
content: [{
|
|
644
706
|
type: 'text' as const,
|
|
@@ -647,6 +709,7 @@ Returns:
|
|
|
647
709
|
task_id,
|
|
648
710
|
summary,
|
|
649
711
|
gates_run: results,
|
|
712
|
+
ledger_updated: true,
|
|
650
713
|
}),
|
|
651
714
|
}],
|
|
652
715
|
};
|
|
@@ -829,3 +892,103 @@ async function runQualityGates(
|
|
|
829
892
|
|
|
830
893
|
return results;
|
|
831
894
|
}
|
|
895
|
+
|
|
896
|
+
/**
|
|
897
|
+
* Write a task entry to the project ledger.
|
|
898
|
+
*
|
|
899
|
+
* Reads the current ledger, appends a task entry, increments the sequence,
|
|
900
|
+
* and writes it back. Follows the ledger write protocol (lock file,
|
|
901
|
+
* sequence check). In single-agent sessions the lock is rarely contended,
|
|
902
|
+
* but the protocol is followed for correctness.
|
|
903
|
+
*
|
|
904
|
+
* Failures are logged to stderr but do not block task completion —
|
|
905
|
+
* the ledger is an audit convenience, not a critical path.
|
|
906
|
+
*/
|
|
907
|
+
async function writeLedgerEntry(
|
|
908
|
+
policyDir: string,
|
|
909
|
+
task: {
|
|
910
|
+
id: string;
|
|
911
|
+
status: string;
|
|
912
|
+
summary: string;
|
|
913
|
+
assigned_role: string;
|
|
914
|
+
created_at: string;
|
|
915
|
+
updated_at: string;
|
|
916
|
+
outcome?: { summary: string; completed_at: string };
|
|
917
|
+
failure_log?: { approach: string; error: string; attempted_at: string; retry_recommended: boolean };
|
|
918
|
+
}
|
|
919
|
+
): Promise<void> {
|
|
920
|
+
const ledgerPath = join(policyDir, 'state', 'ledger.json');
|
|
921
|
+
const lockPath = join(policyDir, 'state', 'ledger.lock');
|
|
922
|
+
|
|
923
|
+
try {
|
|
924
|
+
// Ensure state directory exists
|
|
925
|
+
await mkdir(dirname(lockPath), { recursive: true });
|
|
926
|
+
|
|
927
|
+
// Acquire lock (best-effort — wx flag fails if lock exists)
|
|
928
|
+
await writeFile(lockPath, JSON.stringify({
|
|
929
|
+
held_by: task.assigned_role,
|
|
930
|
+
acquired_at: new Date().toISOString(),
|
|
931
|
+
}), { flag: 'wx' }).catch(() => {
|
|
932
|
+
// Lock exists — in single-agent mode this is rare.
|
|
933
|
+
// Proceed anyway since we're the only writer.
|
|
934
|
+
});
|
|
935
|
+
|
|
936
|
+
// Read current ledger
|
|
937
|
+
let ledger: Record<string, unknown>;
|
|
938
|
+
try {
|
|
939
|
+
const raw = await readFile(ledgerPath, 'utf-8');
|
|
940
|
+
ledger = JSON.parse(raw);
|
|
941
|
+
} catch {
|
|
942
|
+
// Ledger doesn't exist or is invalid — create minimal structure
|
|
943
|
+
ledger = {
|
|
944
|
+
'$schema': 'https://aegis.dev/schema/ledger.v0.1.0.json',
|
|
945
|
+
version: '0.1.0',
|
|
946
|
+
sequence: 0,
|
|
947
|
+
tasks: [],
|
|
948
|
+
write_protocol: {
|
|
949
|
+
lock_file: '.agentpolicy/state/ledger.lock',
|
|
950
|
+
lock_timeout_seconds: 120,
|
|
951
|
+
retry_interval_ms: 500,
|
|
952
|
+
max_retries: 10,
|
|
953
|
+
procedure: [
|
|
954
|
+
{ step: 1, action: 'Read current ledger and note sequence number' },
|
|
955
|
+
{ step: 2, action: 'Attempt to create lock file. If exists and not stale, wait and retry' },
|
|
956
|
+
{ step: 3, action: 'Re-read ledger. If sequence changed, release lock and restart' },
|
|
957
|
+
{ step: 4, action: 'Write changes, increment sequence' },
|
|
958
|
+
{ step: 5, action: 'Release lock file' },
|
|
959
|
+
],
|
|
960
|
+
},
|
|
961
|
+
};
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
// Build task entry
|
|
965
|
+
const tasks = (ledger.tasks as Array<Record<string, unknown>>) ?? [];
|
|
966
|
+
const entry: Record<string, unknown> = {
|
|
967
|
+
id: task.id,
|
|
968
|
+
status: task.status,
|
|
969
|
+
summary: task.summary,
|
|
970
|
+
assigned_role: task.assigned_role,
|
|
971
|
+
created_at: task.created_at,
|
|
972
|
+
updated_at: task.updated_at,
|
|
973
|
+
};
|
|
974
|
+
if (task.outcome) entry.outcome = task.outcome;
|
|
975
|
+
if (task.failure_log) entry.failure_log = task.failure_log;
|
|
976
|
+
|
|
977
|
+
// Append and update sequence
|
|
978
|
+
tasks.push(entry);
|
|
979
|
+
ledger.tasks = tasks;
|
|
980
|
+
ledger.sequence = ((ledger.sequence as number) ?? 0) + 1;
|
|
981
|
+
ledger.last_updated = new Date().toISOString();
|
|
982
|
+
|
|
983
|
+
// Write updated ledger
|
|
984
|
+
await writeFile(ledgerPath, JSON.stringify(ledger, null, 2) + '\n', 'utf-8');
|
|
985
|
+
|
|
986
|
+
// Release lock
|
|
987
|
+
await unlink(lockPath).catch(() => {});
|
|
988
|
+
} catch (err) {
|
|
989
|
+
// Ledger write failed — log but don't block task completion
|
|
990
|
+
process.stderr.write(`[aegis-mcp] Ledger write failed: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
991
|
+
// Clean up lock on failure
|
|
992
|
+
await unlink(lockPath).catch(() => {});
|
|
993
|
+
}
|
|
994
|
+
}
|