@aisy/core 0.1.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/LICENSE +202 -0
- package/dist/agent-loop/index.d.ts +4 -0
- package/dist/agent-loop/index.d.ts.map +1 -0
- package/dist/agent-loop/index.js +352 -0
- package/dist/agent-loop/index.js.map +1 -0
- package/dist/agent-loop/types.d.ts +183 -0
- package/dist/agent-loop/types.d.ts.map +1 -0
- package/dist/agent-loop/types.js +3 -0
- package/dist/agent-loop/types.js.map +1 -0
- package/dist/bin/aisy.d.ts +3 -0
- package/dist/bin/aisy.d.ts.map +1 -0
- package/dist/bin/aisy.js +14 -0
- package/dist/bin/aisy.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +114 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/context-engine/index.d.ts +4 -0
- package/dist/context-engine/index.d.ts.map +1 -0
- package/dist/context-engine/index.js +126 -0
- package/dist/context-engine/index.js.map +1 -0
- package/dist/context-engine/types.d.ts +54 -0
- package/dist/context-engine/types.d.ts.map +1 -0
- package/dist/context-engine/types.js +4 -0
- package/dist/context-engine/types.js.map +1 -0
- package/dist/eval/index.d.ts +20 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +128 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/types.d.ts +62 -0
- package/dist/eval/types.d.ts.map +1 -0
- package/dist/eval/types.js +17 -0
- package/dist/eval/types.js.map +1 -0
- package/dist/gateway/index.d.ts +5 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +288 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/types.d.ts +194 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +94 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/goals/index.d.ts +11 -0
- package/dist/goals/index.d.ts.map +1 -0
- package/dist/goals/index.js +21 -0
- package/dist/goals/index.js.map +1 -0
- package/dist/goals/types.d.ts +47 -0
- package/dist/goals/types.d.ts.map +1 -0
- package/dist/goals/types.js +5 -0
- package/dist/goals/types.js.map +1 -0
- package/dist/index.d.ts +56 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +5 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +215 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/types.d.ts +148 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +4 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/memory/index.d.ts +6 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +419 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/types.d.ts +131 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +33 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/nightly/index.d.ts +4 -0
- package/dist/nightly/index.d.ts.map +1 -0
- package/dist/nightly/index.js +470 -0
- package/dist/nightly/index.js.map +1 -0
- package/dist/nightly/types.d.ts +326 -0
- package/dist/nightly/types.d.ts.map +1 -0
- package/dist/nightly/types.js +3 -0
- package/dist/nightly/types.js.map +1 -0
- package/dist/observability/index.d.ts +11 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +396 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/types.d.ts +139 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/observability/types.js +4 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/onboarding/index.d.ts +16 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +787 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/interactive.d.ts +23 -0
- package/dist/onboarding/interactive.d.ts.map +1 -0
- package/dist/onboarding/interactive.js +45 -0
- package/dist/onboarding/interactive.js.map +1 -0
- package/dist/onboarding/types.d.ts +388 -0
- package/dist/onboarding/types.d.ts.map +1 -0
- package/dist/onboarding/types.js +35 -0
- package/dist/onboarding/types.js.map +1 -0
- package/dist/orchestration/index.d.ts +8 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +706 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/types.d.ts +391 -0
- package/dist/orchestration/types.d.ts.map +1 -0
- package/dist/orchestration/types.js +30 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/personality/index.d.ts +65 -0
- package/dist/personality/index.d.ts.map +1 -0
- package/dist/personality/index.js +339 -0
- package/dist/personality/index.js.map +1 -0
- package/dist/personality/types.d.ts +103 -0
- package/dist/personality/types.d.ts.map +1 -0
- package/dist/personality/types.js +15 -0
- package/dist/personality/types.js.map +1 -0
- package/dist/provider/index.d.ts +4 -0
- package/dist/provider/index.d.ts.map +1 -0
- package/dist/provider/index.js +236 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/provider/types.d.ts +180 -0
- package/dist/provider/types.d.ts.map +1 -0
- package/dist/provider/types.js +4 -0
- package/dist/provider/types.js.map +1 -0
- package/dist/runtime/agent-cards.d.ts +14 -0
- package/dist/runtime/agent-cards.d.ts.map +1 -0
- package/dist/runtime/agent-cards.js +90 -0
- package/dist/runtime/agent-cards.js.map +1 -0
- package/dist/runtime/agent-runner.d.ts +30 -0
- package/dist/runtime/agent-runner.d.ts.map +1 -0
- package/dist/runtime/agent-runner.js +37 -0
- package/dist/runtime/agent-runner.js.map +1 -0
- package/dist/runtime/budget.d.ts +15 -0
- package/dist/runtime/budget.d.ts.map +1 -0
- package/dist/runtime/budget.js +24 -0
- package/dist/runtime/budget.js.map +1 -0
- package/dist/runtime/delegation-driver.d.ts +11 -0
- package/dist/runtime/delegation-driver.d.ts.map +1 -0
- package/dist/runtime/delegation-driver.js +132 -0
- package/dist/runtime/delegation-driver.js.map +1 -0
- package/dist/runtime/exact-cache.d.ts +10 -0
- package/dist/runtime/exact-cache.d.ts.map +1 -0
- package/dist/runtime/exact-cache.js +30 -0
- package/dist/runtime/exact-cache.js.map +1 -0
- package/dist/runtime/execute-tool.d.ts +29 -0
- package/dist/runtime/execute-tool.d.ts.map +1 -0
- package/dist/runtime/execute-tool.js +80 -0
- package/dist/runtime/execute-tool.js.map +1 -0
- package/dist/runtime/guardian.d.ts +9 -0
- package/dist/runtime/guardian.d.ts.map +1 -0
- package/dist/runtime/guardian.js +41 -0
- package/dist/runtime/guardian.js.map +1 -0
- package/dist/runtime/hook-gate.d.ts +17 -0
- package/dist/runtime/hook-gate.d.ts.map +1 -0
- package/dist/runtime/hook-gate.js +56 -0
- package/dist/runtime/hook-gate.js.map +1 -0
- package/dist/runtime/memory-adapter.d.ts +6 -0
- package/dist/runtime/memory-adapter.d.ts.map +1 -0
- package/dist/runtime/memory-adapter.js +38 -0
- package/dist/runtime/memory-adapter.js.map +1 -0
- package/dist/runtime/nightly-adapters.d.ts +48 -0
- package/dist/runtime/nightly-adapters.d.ts.map +1 -0
- package/dist/runtime/nightly-adapters.js +139 -0
- package/dist/runtime/nightly-adapters.js.map +1 -0
- package/dist/runtime/nightly-generator.d.ts +10 -0
- package/dist/runtime/nightly-generator.d.ts.map +1 -0
- package/dist/runtime/nightly-generator.js +335 -0
- package/dist/runtime/nightly-generator.js.map +1 -0
- package/dist/runtime/onboarding-node.d.ts +6 -0
- package/dist/runtime/onboarding-node.d.ts.map +1 -0
- package/dist/runtime/onboarding-node.js +356 -0
- package/dist/runtime/onboarding-node.js.map +1 -0
- package/dist/runtime/provider-anthropic.d.ts +43 -0
- package/dist/runtime/provider-anthropic.d.ts.map +1 -0
- package/dist/runtime/provider-anthropic.js +148 -0
- package/dist/runtime/provider-anthropic.js.map +1 -0
- package/dist/runtime/provider-cli.d.ts +18 -0
- package/dist/runtime/provider-cli.d.ts.map +1 -0
- package/dist/runtime/provider-cli.js +73 -0
- package/dist/runtime/provider-cli.js.map +1 -0
- package/dist/runtime/provider-openai.d.ts +30 -0
- package/dist/runtime/provider-openai.d.ts.map +1 -0
- package/dist/runtime/provider-openai.js +114 -0
- package/dist/runtime/provider-openai.js.map +1 -0
- package/dist/runtime/providers.d.ts +43 -0
- package/dist/runtime/providers.d.ts.map +1 -0
- package/dist/runtime/providers.js +72 -0
- package/dist/runtime/providers.js.map +1 -0
- package/dist/runtime/sandbox-bash.d.ts +21 -0
- package/dist/runtime/sandbox-bash.d.ts.map +1 -0
- package/dist/runtime/sandbox-bash.js +51 -0
- package/dist/runtime/sandbox-bash.js.map +1 -0
- package/dist/runtime/scoped-tool-executor.d.ts +10 -0
- package/dist/runtime/scoped-tool-executor.d.ts.map +1 -0
- package/dist/runtime/scoped-tool-executor.js +30 -0
- package/dist/runtime/scoped-tool-executor.js.map +1 -0
- package/dist/runtime/session-log.d.ts +6 -0
- package/dist/runtime/session-log.d.ts.map +1 -0
- package/dist/runtime/session-log.js +54 -0
- package/dist/runtime/session-log.js.map +1 -0
- package/dist/runtime/settings.d.ts +24 -0
- package/dist/runtime/settings.d.ts.map +1 -0
- package/dist/runtime/settings.js +29 -0
- package/dist/runtime/settings.js.map +1 -0
- package/dist/runtime/spawn-plan.d.ts +13 -0
- package/dist/runtime/spawn-plan.d.ts.map +1 -0
- package/dist/runtime/spawn-plan.js +107 -0
- package/dist/runtime/spawn-plan.js.map +1 -0
- package/dist/runtime/spend.d.ts +41 -0
- package/dist/runtime/spend.d.ts.map +1 -0
- package/dist/runtime/spend.js +0 -0
- package/dist/runtime/spend.js.map +1 -0
- package/dist/runtime/sub-agent-runner.d.ts +19 -0
- package/dist/runtime/sub-agent-runner.d.ts.map +1 -0
- package/dist/runtime/sub-agent-runner.js +47 -0
- package/dist/runtime/sub-agent-runner.js.map +1 -0
- package/dist/safety/grants.d.ts +7 -0
- package/dist/safety/grants.d.ts.map +1 -0
- package/dist/safety/grants.js +53 -0
- package/dist/safety/grants.js.map +1 -0
- package/dist/safety/index.d.ts +72 -0
- package/dist/safety/index.d.ts.map +1 -0
- package/dist/safety/index.js +464 -0
- package/dist/safety/index.js.map +1 -0
- package/dist/safety/types.d.ts +254 -0
- package/dist/safety/types.d.ts.map +1 -0
- package/dist/safety/types.js +3 -0
- package/dist/safety/types.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +463 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/types.d.ts +177 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +3 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/testing/clock.d.ts +8 -0
- package/dist/testing/clock.d.ts.map +1 -0
- package/dist/testing/clock.js +13 -0
- package/dist/testing/clock.js.map +1 -0
- package/dist/testing/effect-verifier.d.ts +15 -0
- package/dist/testing/effect-verifier.d.ts.map +1 -0
- package/dist/testing/effect-verifier.js +27 -0
- package/dist/testing/effect-verifier.js.map +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/provider-fake.d.ts +14 -0
- package/dist/testing/provider-fake.d.ts.map +1 -0
- package/dist/testing/provider-fake.js +18 -0
- package/dist/testing/provider-fake.js.map +1 -0
- package/dist/testing/sandbox-stub.d.ts +15 -0
- package/dist/testing/sandbox-stub.d.ts.map +1 -0
- package/dist/testing/sandbox-stub.js +15 -0
- package/dist/testing/sandbox-stub.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +0 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/types.d.ts +138 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +4 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/triggers/index.d.ts +4 -0
- package/dist/triggers/index.d.ts.map +1 -0
- package/dist/triggers/index.js +187 -0
- package/dist/triggers/index.js.map +1 -0
- package/dist/triggers/types.d.ts +74 -0
- package/dist/triggers/types.d.ts.map +1 -0
- package/dist/triggers/types.js +5 -0
- package/dist/triggers/types.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
// Component 08 — Personality (docs/specs/08-personality.md)
|
|
2
|
+
//
|
|
3
|
+
// Deterministic identity: SOUL.md persona + ordered constitution.md with exactly
|
|
4
|
+
// one veto principle, assembled into a byte-stable IdentityPayload (ADR-0019
|
|
5
|
+
// prefix segments 1-2) and re-seeded verbatim across generations and provider
|
|
6
|
+
// failovers (finding 3, ADR-0005 / ADR-0018). Parsing, ordering, validation, and
|
|
7
|
+
// hashing are 100% deterministic code (§5.1); the model performs the personality,
|
|
8
|
+
// the harness guarantees it is present, ordered, and unchanged.
|
|
9
|
+
// Re-export error classes (they are values, not just types)
|
|
10
|
+
export { ConstitutionError, SoulMissing } from './types.js';
|
|
11
|
+
import { createHash } from 'node:crypto';
|
|
12
|
+
import { readFileSync } from 'node:fs';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { ConstitutionError, SoulMissing } from './types.js';
|
|
15
|
+
const noopRecord = () => { };
|
|
16
|
+
/** SHA-256 over (constitution || soul) — the identity fingerprint (§4.3, ADR-0004). */
|
|
17
|
+
function sha256(input) {
|
|
18
|
+
return createHash('sha256').update(input, 'utf8').digest('hex');
|
|
19
|
+
}
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// constitution.md parsing (§4.2) — deterministic, no model call.
|
|
22
|
+
// Entries: "[N] (veto) text..." with indented continuation lines.
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
const PRINCIPLE_RE = /^\[(\d+)\]\s*(\(veto\)\s*)?(\S.*)$/;
|
|
25
|
+
/** Stable id from the principle text: first four word tokens, /^[a-z0-9][a-z0-9-]*$/ (§3). */
|
|
26
|
+
function principleId(text) {
|
|
27
|
+
const tokens = text
|
|
28
|
+
.toLowerCase()
|
|
29
|
+
.replace(/[^a-z0-9\s]/g, ' ')
|
|
30
|
+
.trim()
|
|
31
|
+
.split(/\s+/)
|
|
32
|
+
.filter(t => t.length > 0)
|
|
33
|
+
.slice(0, 4);
|
|
34
|
+
return tokens.length > 0 ? tokens.join('-') : 'principle';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse constitution.md bytes into an ordered Constitution (§4.2).
|
|
38
|
+
* Principles are sorted ascending by precedence at parse time (§3); structural
|
|
39
|
+
* validity (total order, single veto) is judged by validateIdentity().
|
|
40
|
+
* Throws ConstitutionError when no principle can be parsed at all.
|
|
41
|
+
*/
|
|
42
|
+
export function parseConstitution(raw) {
|
|
43
|
+
const principles = [];
|
|
44
|
+
let current = null;
|
|
45
|
+
for (const line of raw.split('\n')) {
|
|
46
|
+
const match = PRINCIPLE_RE.exec(line);
|
|
47
|
+
if (match !== null) {
|
|
48
|
+
current = {
|
|
49
|
+
id: principleId(match[3] ?? ''),
|
|
50
|
+
precedence: Number(match[1]),
|
|
51
|
+
veto: match[2] !== undefined,
|
|
52
|
+
text: (match[3] ?? '').trim(),
|
|
53
|
+
};
|
|
54
|
+
principles.push(current);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
// Indented continuation lines extend the current principle's text.
|
|
58
|
+
if (current !== null && /^\s+\S/.test(line) && !line.trimStart().startsWith('<!--')) {
|
|
59
|
+
current.text += ' ' + line.trim();
|
|
60
|
+
}
|
|
61
|
+
else if (line.trim() === '') {
|
|
62
|
+
current = null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (principles.length === 0) {
|
|
66
|
+
throw new ConstitutionError('ConstitutionError: constitution.md is unparseable — no "[N] text" principles found (§4.2)');
|
|
67
|
+
}
|
|
68
|
+
// Stable ids must be unique: a colliding id silently shadows an earlier
|
|
69
|
+
// principle (incl. vetoId resolution). Fail closed (§3, §5.1).
|
|
70
|
+
const seenIds = new Set();
|
|
71
|
+
for (const p of principles) {
|
|
72
|
+
if (seenIds.has(p.id)) {
|
|
73
|
+
throw new ConstitutionError(`ConstitutionError: duplicate principle id "${p.id}" in constitution.md — ids must be unique, no silent shadowing (§3)`);
|
|
74
|
+
}
|
|
75
|
+
seenIds.add(p.id);
|
|
76
|
+
}
|
|
77
|
+
// Sorted ascending by precedence at parse time (§3); the model never sees an
|
|
78
|
+
// unordered bag and cannot "choose" a different precedence (§5.1).
|
|
79
|
+
principles.sort((a, b) => a.precedence - b.precedence);
|
|
80
|
+
const vetoes = principles.filter(p => p.veto);
|
|
81
|
+
return {
|
|
82
|
+
principles,
|
|
83
|
+
vetoId: vetoes.length === 1 ? vetoes[0].id : '',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** Parse SOUL.md bytes (§4.1): raw persona text plus named register modes ("- name: body"). */
|
|
87
|
+
export function parseSoul(raw) {
|
|
88
|
+
const modes = {};
|
|
89
|
+
const MODE_RE = /^-\s*([a-z][a-z0-9-]*):\s+(.+)$/;
|
|
90
|
+
for (const line of raw.split('\n')) {
|
|
91
|
+
const match = MODE_RE.exec(line.trim());
|
|
92
|
+
if (match !== null) {
|
|
93
|
+
modes[match[1]] = match[2].trim();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { raw, modes };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Load-time validation, fail-closed (§3, §5.1):
|
|
100
|
+
* unique_precedence — no two principles share a precedence (total order)
|
|
101
|
+
* exactly_one_veto — exactly one veto === true, at the LOWEST precedence (§5.1)
|
|
102
|
+
* soul_present — SOUL.md non-empty and parses
|
|
103
|
+
*/
|
|
104
|
+
export function validateIdentity(c, s) {
|
|
105
|
+
const precedences = c.principles.map(p => p.precedence);
|
|
106
|
+
const unique_precedence = c.principles.length > 0 && new Set(precedences).size === precedences.length;
|
|
107
|
+
const vetoes = c.principles.filter(p => p.veto);
|
|
108
|
+
const lowest = Math.min(...precedences);
|
|
109
|
+
// §5.1: exactly one veto===true, lowest precedence — the veto always wins (§4.2 table).
|
|
110
|
+
const exactly_one_veto = vetoes.length === 1 && vetoes[0].precedence === lowest;
|
|
111
|
+
const soul_present = s.raw.trim().length > 0;
|
|
112
|
+
return {
|
|
113
|
+
unique_precedence,
|
|
114
|
+
exactly_one_veto,
|
|
115
|
+
soul_present,
|
|
116
|
+
ok: unique_precedence && exactly_one_veto && soul_present,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/** Fail-closed gate shared by the loader and the Personality factory (§5.1, §7). */
|
|
120
|
+
function assertValid(report, where) {
|
|
121
|
+
if (!report.unique_precedence) {
|
|
122
|
+
throw new ConstitutionError(`ConstitutionError: duplicate precedence in ${where} — no total order, the model could pick (§7, AC-08-5)`);
|
|
123
|
+
}
|
|
124
|
+
if (!report.exactly_one_veto) {
|
|
125
|
+
throw new ConstitutionError(`ConstitutionError: ${where} must mark exactly one veto principle at the lowest precedence (§7, AC-08-6)`);
|
|
126
|
+
}
|
|
127
|
+
if (!report.soul_present) {
|
|
128
|
+
throw new SoulMissing(`SoulMissing: SOUL.md absent or empty in ${where} — identity must not come from model weights (§7, AC-08-15)`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function defaultReadFile(path) {
|
|
132
|
+
try {
|
|
133
|
+
return readFileSync(path, 'utf8');
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export function makePersonalityLoader(deps = {}) {
|
|
140
|
+
const readFile = deps.readFile ?? defaultReadFile;
|
|
141
|
+
const record = deps.record ?? noopRecord;
|
|
142
|
+
// Frozen per-path session snapshots (ADR-0019): the first successful load is
|
|
143
|
+
// the session's identity; mid-session disk edits are ignored until the next
|
|
144
|
+
// session's loadIdentity() (§7 "Mid-session edit", AC-08-17).
|
|
145
|
+
const snapshots = new Map();
|
|
146
|
+
return {
|
|
147
|
+
async load(path) {
|
|
148
|
+
const frozen = snapshots.get(path);
|
|
149
|
+
if (frozen !== undefined) {
|
|
150
|
+
return frozen;
|
|
151
|
+
}
|
|
152
|
+
// Constitution first: a harness with no enforceable veto must not run (§5.1).
|
|
153
|
+
const constitutionRaw = readFile(join(path, 'constitution.md'));
|
|
154
|
+
if (constitutionRaw === null || constitutionRaw.trim() === '') {
|
|
155
|
+
throw new ConstitutionError(`ConstitutionError: constitution.md absent or empty at ${path} — fail closed, no session (§7 cold start)`);
|
|
156
|
+
}
|
|
157
|
+
const constitution = parseConstitution(constitutionRaw);
|
|
158
|
+
const soulRaw = readFile(join(path, 'SOUL.md'));
|
|
159
|
+
const soul = parseSoul(soulRaw ?? '');
|
|
160
|
+
const report = validateIdentity(constitution, soul);
|
|
161
|
+
if (soulRaw === null || !report.soul_present) {
|
|
162
|
+
throw new SoulMissing(`SoulMissing: SOUL.md absent or empty at ${path} — fail closed, no silent default persona (§7 cold start)`);
|
|
163
|
+
}
|
|
164
|
+
assertValid(report, `${path}/constitution.md`);
|
|
165
|
+
// Byte-identical payload: raw on-disk bytes, never a re-serialization (§4.3).
|
|
166
|
+
const payload = Object.freeze({
|
|
167
|
+
constitution: constitutionRaw,
|
|
168
|
+
soul: soulRaw,
|
|
169
|
+
hash: sha256(constitutionRaw + soulRaw),
|
|
170
|
+
});
|
|
171
|
+
snapshots.set(path, payload);
|
|
172
|
+
record({ kind: 'tool-call', target: 'identity.loaded', payload: { hash: payload.hash } });
|
|
173
|
+
return payload;
|
|
174
|
+
},
|
|
175
|
+
getActivePersona() {
|
|
176
|
+
// Mode selection lives on the full Personality surface; the loader always
|
|
177
|
+
// reports the default register (§4.4, types.ts contract).
|
|
178
|
+
return 'default';
|
|
179
|
+
},
|
|
180
|
+
async checkDegradation(ctx) {
|
|
181
|
+
// The hash invariant is the machine-checkable anti-degradation check (§4.3):
|
|
182
|
+
// a drifted candidate is rejected fail-closed before any turn runs (AC-08-14).
|
|
183
|
+
if (ctx.candidatePayload.hash !== ctx.sessionHash) {
|
|
184
|
+
return { ok: false, reason: 'hash_mismatch' };
|
|
185
|
+
}
|
|
186
|
+
const recomputed = sha256(ctx.candidatePayload.constitution + ctx.candidatePayload.soul);
|
|
187
|
+
if (recomputed !== ctx.sessionHash) {
|
|
188
|
+
// Declared hash matches but the bytes drifted — name the drifted segment
|
|
189
|
+
// when the frozen session snapshot is available.
|
|
190
|
+
for (const snapshot of snapshots.values()) {
|
|
191
|
+
if (snapshot.hash !== ctx.sessionHash)
|
|
192
|
+
continue;
|
|
193
|
+
if (ctx.candidatePayload.soul !== snapshot.soul) {
|
|
194
|
+
return { ok: false, reason: 'soul_mismatch' };
|
|
195
|
+
}
|
|
196
|
+
if (ctx.candidatePayload.constitution !== snapshot.constitution) {
|
|
197
|
+
return { ok: false, reason: 'constitution_mismatch' };
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return { ok: false, reason: 'hash_mismatch' };
|
|
201
|
+
}
|
|
202
|
+
return { ok: true };
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Provenance gate for the veto (ADR-0029). Returns true only for a confirmation
|
|
208
|
+
* that the harness — not the model — could have produced.
|
|
209
|
+
* - With a trusted-channel allowlist: requires a structured HumanConfirmation
|
|
210
|
+
* token whose channel is on the allowlist. A bare boolean or a token with an
|
|
211
|
+
* untrusted/missing channel is rejected.
|
|
212
|
+
* - Without an allowlist (no approval handler wired): the legacy bare boolean
|
|
213
|
+
* is honored, preserving existing callers.
|
|
214
|
+
*/
|
|
215
|
+
function isHumanConfirmed(metadata, trustedChannels) {
|
|
216
|
+
const raw = metadata?.['humanConfirmation'];
|
|
217
|
+
if (trustedChannels === undefined) {
|
|
218
|
+
return raw === true;
|
|
219
|
+
}
|
|
220
|
+
if (typeof raw !== 'object' || raw === null)
|
|
221
|
+
return false;
|
|
222
|
+
const token = raw;
|
|
223
|
+
return typeof token.channel === 'string' && trustedChannels.includes(token.channel);
|
|
224
|
+
}
|
|
225
|
+
export function makePersonality(deps) {
|
|
226
|
+
const record = deps.record ?? noopRecord;
|
|
227
|
+
// Parse + validate fail-closed at construction (§5.1): a Personality with no
|
|
228
|
+
// enforceable veto must not exist.
|
|
229
|
+
const constitution = parseConstitution(deps.constitution);
|
|
230
|
+
const soul = parseSoul(deps.soul);
|
|
231
|
+
const report = validateIdentity(constitution, soul);
|
|
232
|
+
if (!report.ok) {
|
|
233
|
+
// §3 "Events emitted": leave an audit trail before failing closed so a
|
|
234
|
+
// validation failure is not silent (§8 repudiation threat).
|
|
235
|
+
record({ kind: 'tool-call', target: 'identity.validation_failed', payload: { report } });
|
|
236
|
+
}
|
|
237
|
+
assertValid(report, 'constitution.md');
|
|
238
|
+
const vetoPrinciple = constitution.principles.find(p => p.veto);
|
|
239
|
+
// The frozen session payload (ADR-0019 segments 1-2): byte-identical for the
|
|
240
|
+
// whole session; reseedPayload() returns these exact bytes (finding 3).
|
|
241
|
+
const payload = Object.freeze({
|
|
242
|
+
constitution: deps.constitution,
|
|
243
|
+
soul: deps.soul,
|
|
244
|
+
hash: sha256(deps.constitution + deps.soul),
|
|
245
|
+
});
|
|
246
|
+
// Mode registry: SOUL.md registers (tone only) plus any proposed extras.
|
|
247
|
+
const modeRegistry = {};
|
|
248
|
+
for (const [name, body] of Object.entries(soul.modes)) {
|
|
249
|
+
modeRegistry[name] = { body };
|
|
250
|
+
}
|
|
251
|
+
for (const [name, spec] of Object.entries(deps.modes ?? {})) {
|
|
252
|
+
modeRegistry[name] = spec;
|
|
253
|
+
}
|
|
254
|
+
// An explicit initialMode must name a registered register; an unknown one would
|
|
255
|
+
// start the session in a register that does not exist. Fail closed at
|
|
256
|
+
// construction (§5.1), consistent with the constitution/soul gates above. The
|
|
257
|
+
// implicit 'default' fallback (when initialMode is omitted) stays a safe default.
|
|
258
|
+
if (deps.initialMode !== undefined && modeRegistry[deps.initialMode] === undefined) {
|
|
259
|
+
throw new ConstitutionError(`ConstitutionError: initialMode "${deps.initialMode}" is not a registered mode — fail closed at construction (§5.1)`);
|
|
260
|
+
}
|
|
261
|
+
let activeMode = deps.initialMode ?? 'default';
|
|
262
|
+
let generation = 0;
|
|
263
|
+
return {
|
|
264
|
+
loadIdentity() {
|
|
265
|
+
record({ kind: 'tool-call', target: 'identity.loaded', payload: { hash: payload.hash } });
|
|
266
|
+
return payload;
|
|
267
|
+
},
|
|
268
|
+
reseedPayload() {
|
|
269
|
+
// Byte-identical to loadIdentity() this session — the anti-degradation
|
|
270
|
+
// invariant (§5.4, AC-08-12/13).
|
|
271
|
+
generation += 1;
|
|
272
|
+
record({
|
|
273
|
+
kind: 'tool-call',
|
|
274
|
+
target: 'identity.reseeded',
|
|
275
|
+
payload: { hash: payload.hash, generation_id: generation },
|
|
276
|
+
});
|
|
277
|
+
return payload;
|
|
278
|
+
},
|
|
279
|
+
checkVeto(action) {
|
|
280
|
+
// (b) of §5.3: the veto-check event is journaled BEFORE any execute, so
|
|
281
|
+
// Observability can assert consultation order (AC-08-9, AC-08-19).
|
|
282
|
+
record({
|
|
283
|
+
kind: 'tool-call',
|
|
284
|
+
target: 'veto-check',
|
|
285
|
+
payload: { actionId: action.id, vetoId: vetoPrinciple.id, hash: payload.hash },
|
|
286
|
+
});
|
|
287
|
+
if (!action.irreversible) {
|
|
288
|
+
return {
|
|
289
|
+
allowed: true,
|
|
290
|
+
vetoId: null,
|
|
291
|
+
reason: 'reversible action — the veto principle gates only irreversible steps (§5.3)',
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
// The veto principle (§4.2): no irreversible harm/destruction WITHOUT
|
|
295
|
+
// explicit, provenance-bound human confirmation. The deterministic gate
|
|
296
|
+
// reads that confirmation from action metadata and binds it to a
|
|
297
|
+
// harness-controlled channel (ADR-0029) so a model-set flag cannot pass;
|
|
298
|
+
// absent a valid confirmation, fail closed.
|
|
299
|
+
const confirmed = isHumanConfirmed(action.metadata, deps.trustedConfirmationChannels);
|
|
300
|
+
if (confirmed) {
|
|
301
|
+
return {
|
|
302
|
+
allowed: true,
|
|
303
|
+
vetoId: null,
|
|
304
|
+
reason: 'irreversible action carries explicit, provenance-bound human confirmation (§4.2 [1])',
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
record({
|
|
308
|
+
kind: 'tool-call',
|
|
309
|
+
target: 'veto.blocked',
|
|
310
|
+
payload: { vetoId: vetoPrinciple.id, action: action.id, hash: payload.hash },
|
|
311
|
+
});
|
|
312
|
+
return {
|
|
313
|
+
allowed: false,
|
|
314
|
+
vetoId: vetoPrinciple.id,
|
|
315
|
+
reason: `blocked by veto principle "${vetoPrinciple.id}": ${vetoPrinciple.text}`,
|
|
316
|
+
};
|
|
317
|
+
},
|
|
318
|
+
setMode(name) {
|
|
319
|
+
// §5.5: a mode is a register, not a constitution amendment.
|
|
320
|
+
const spec = modeRegistry[name];
|
|
321
|
+
if (spec === undefined) {
|
|
322
|
+
return { ok: false, reason: 'unknown_mode' };
|
|
323
|
+
}
|
|
324
|
+
if (spec.precedenceOverrides !== undefined && Object.keys(spec.precedenceOverrides).length > 0) {
|
|
325
|
+
return { ok: false, reason: 'mode_touches_precedence' };
|
|
326
|
+
}
|
|
327
|
+
if (spec.vetoOverride === false) {
|
|
328
|
+
return { ok: false, reason: 'mode_disables_veto' };
|
|
329
|
+
}
|
|
330
|
+
activeMode = name;
|
|
331
|
+
record({ kind: 'tool-call', target: 'mode.changed', payload: { mode: activeMode, hash: payload.hash } });
|
|
332
|
+
return { ok: true, mode: name };
|
|
333
|
+
},
|
|
334
|
+
validate(c, s) {
|
|
335
|
+
return validateIdentity(c, s);
|
|
336
|
+
},
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/personality/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
export type Precedence = number;
|
|
2
|
+
export interface Principle {
|
|
3
|
+
id: string;
|
|
4
|
+
precedence: Precedence;
|
|
5
|
+
veto: boolean;
|
|
6
|
+
text: string;
|
|
7
|
+
}
|
|
8
|
+
export interface Constitution {
|
|
9
|
+
principles: Principle[];
|
|
10
|
+
vetoId: string;
|
|
11
|
+
}
|
|
12
|
+
export interface Soul {
|
|
13
|
+
raw: string;
|
|
14
|
+
modes: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
export interface IdentityPayload {
|
|
17
|
+
constitution: string;
|
|
18
|
+
soul: string;
|
|
19
|
+
hash: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Provenance-bound human confirmation (ADR-0029). Set ONLY by the deterministic
|
|
23
|
+
* approval handler in direct response to a human tap on a specific channel —
|
|
24
|
+
* never by model-turn code. The `channel` is verified against the
|
|
25
|
+
* harness-controlled trusted-channel allowlist; a model can propose this shape
|
|
26
|
+
* but cannot forge a trusted channel.
|
|
27
|
+
*/
|
|
28
|
+
export interface HumanConfirmation {
|
|
29
|
+
channel: string;
|
|
30
|
+
requestId: string;
|
|
31
|
+
issuedAt: number;
|
|
32
|
+
}
|
|
33
|
+
export interface ProposedAction {
|
|
34
|
+
id: string;
|
|
35
|
+
irreversible: boolean;
|
|
36
|
+
description: string;
|
|
37
|
+
metadata?: Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
export interface VetoVerdict {
|
|
40
|
+
allowed: boolean;
|
|
41
|
+
vetoId: string | null;
|
|
42
|
+
reason: string;
|
|
43
|
+
}
|
|
44
|
+
export type ModeResult = {
|
|
45
|
+
ok: true;
|
|
46
|
+
mode: string;
|
|
47
|
+
} | {
|
|
48
|
+
ok: false;
|
|
49
|
+
reason: 'unknown_mode' | 'mode_touches_precedence' | 'mode_disables_veto';
|
|
50
|
+
};
|
|
51
|
+
export interface ValidationReport {
|
|
52
|
+
unique_precedence: boolean;
|
|
53
|
+
exactly_one_veto: boolean;
|
|
54
|
+
soul_present: boolean;
|
|
55
|
+
ok: boolean;
|
|
56
|
+
}
|
|
57
|
+
export interface DegradationCheckContext {
|
|
58
|
+
sessionHash: string;
|
|
59
|
+
candidatePayload: IdentityPayload;
|
|
60
|
+
}
|
|
61
|
+
export interface DegradationCheckResult {
|
|
62
|
+
ok: boolean;
|
|
63
|
+
reason?: 'hash_mismatch' | 'soul_mismatch' | 'constitution_mismatch';
|
|
64
|
+
}
|
|
65
|
+
export interface PersonalityLoader {
|
|
66
|
+
/** Session start: load, validate, sort, and hash the identity payload. Fail-closed. */
|
|
67
|
+
load(path: string): Promise<IdentityPayload>;
|
|
68
|
+
/** Return the active mode name (default: 'default'). */
|
|
69
|
+
getActivePersona(): string;
|
|
70
|
+
/** Anti-degradation check: verify a candidate payload is byte-identical to the session original. */
|
|
71
|
+
checkDegradation(ctx: DegradationCheckContext): Promise<DegradationCheckResult>;
|
|
72
|
+
}
|
|
73
|
+
export interface Personality {
|
|
74
|
+
/** Session start: build the identity segment of the stable prefix. */
|
|
75
|
+
loadIdentity(): IdentityPayload;
|
|
76
|
+
/** Anti-degradation: the verbatim payload Orchestration re-seeds (finding 3). */
|
|
77
|
+
reseedPayload(): IdentityPayload;
|
|
78
|
+
/** Normative veto: deterministic frame check before an irreversible step. */
|
|
79
|
+
checkVeto(action: ProposedAction): VetoVerdict;
|
|
80
|
+
/** Mode selection: tone only, never precedence. */
|
|
81
|
+
setMode(name: string): ModeResult;
|
|
82
|
+
/** Load-time validation — fail-closed. */
|
|
83
|
+
validate(c: Constitution, s: Soul): ValidationReport;
|
|
84
|
+
}
|
|
85
|
+
export interface AntiDegradationGuard {
|
|
86
|
+
/** Assert the re-seeded payload matches the session-original hash. Fail-closed on mismatch. */
|
|
87
|
+
assertReseed(payload: IdentityPayload): DegradationCheckResult;
|
|
88
|
+
}
|
|
89
|
+
export interface PersonalityConfig {
|
|
90
|
+
/** Absolute path to SOUL.md on disk */
|
|
91
|
+
soulPath: string;
|
|
92
|
+
/** Absolute path to constitution.md on disk */
|
|
93
|
+
constitutionPath: string;
|
|
94
|
+
/** Initial mode name (default: 'default') */
|
|
95
|
+
initialMode?: string;
|
|
96
|
+
}
|
|
97
|
+
export declare class ConstitutionError extends Error {
|
|
98
|
+
constructor(message: string);
|
|
99
|
+
}
|
|
100
|
+
export declare class SoulMissing extends Error {
|
|
101
|
+
constructor(message?: string);
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/personality/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// §3 interfaces — pure types, no implementation
|
|
2
|
+
// ---- Errors ----
|
|
3
|
+
export class ConstitutionError extends Error {
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = 'ConstitutionError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class SoulMissing extends Error {
|
|
10
|
+
constructor(message = 'SOUL.md absent or empty') {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = 'SoulMissing';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/personality/types.ts"],"names":[],"mappings":"AAAA,gDAAgD;AA0IhD,mBAAmB;AAEnB,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAO,GAAG,yBAAyB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ModelRouter, ModelRouterDeps } from './types.js';
|
|
2
|
+
export type { DispatchError, HysteresisState, ModelRequest, ModelResult, ModelRouter, ModelRouterDeps, PrefixContract, ProviderId, ProviderAdapter, ProviderFamily, QueueRecord, RequestBody, RouteDecision, RouterEvent, RouteTier, RoutingPolicy, TaskBudget, } from './types.js';
|
|
3
|
+
export declare function makeModelRouter(deps: ModelRouterDeps): ModelRouter;
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAKV,WAAW,EACX,eAAe,EAShB,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,eAAe,EACf,cAAc,EACd,UAAU,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,EACT,aAAa,EACb,UAAU,GACX,MAAM,YAAY,CAAA;AAoCnB,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAuNlE"}
|