@aiassesstech/nole 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/CHANGELOG.md +28 -0
- package/LICENSE +25 -0
- package/README.md +121 -0
- package/SKILL.md +13 -0
- package/agent/AGENTS.md +47 -0
- package/agent/IDENTITY.md +7 -0
- package/agent/SOUL.md +63 -0
- package/dist/assessment/assessment-scheduler.d.ts +26 -0
- package/dist/assessment/assessment-scheduler.d.ts.map +1 -0
- package/dist/assessment/assessment-scheduler.js +80 -0
- package/dist/assessment/assessment-scheduler.js.map +1 -0
- package/dist/assessment/score-publisher.d.ts +24 -0
- package/dist/assessment/score-publisher.d.ts.map +1 -0
- package/dist/assessment/score-publisher.js +57 -0
- package/dist/assessment/score-publisher.js.map +1 -0
- package/dist/assessment/trigger-evaluator.d.ts +37 -0
- package/dist/assessment/trigger-evaluator.d.ts.map +1 -0
- package/dist/assessment/trigger-evaluator.js +94 -0
- package/dist/assessment/trigger-evaluator.js.map +1 -0
- package/dist/assessment/types.d.ts +61 -0
- package/dist/assessment/types.d.ts.map +1 -0
- package/dist/assessment/types.js +40 -0
- package/dist/assessment/types.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +7 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/runner.d.ts +9 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +65 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/setup.d.ts +18 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +133 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/governance/action-proposer.d.ts +26 -0
- package/dist/governance/action-proposer.d.ts.map +1 -0
- package/dist/governance/action-proposer.js +56 -0
- package/dist/governance/action-proposer.js.map +1 -0
- package/dist/governance/audit-trail.d.ts +37 -0
- package/dist/governance/audit-trail.d.ts.map +1 -0
- package/dist/governance/audit-trail.js +67 -0
- package/dist/governance/audit-trail.js.map +1 -0
- package/dist/governance/governance-router.d.ts +60 -0
- package/dist/governance/governance-router.d.ts.map +1 -0
- package/dist/governance/governance-router.js +143 -0
- package/dist/governance/governance-router.js.map +1 -0
- package/dist/governance/types.d.ts +87 -0
- package/dist/governance/types.d.ts.map +1 -0
- package/dist/governance/types.js +35 -0
- package/dist/governance/types.js.map +1 -0
- package/dist/governance/veto-tracker.d.ts +28 -0
- package/dist/governance/veto-tracker.d.ts.map +1 -0
- package/dist/governance/veto-tracker.js +96 -0
- package/dist/governance/veto-tracker.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +12 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +260 -0
- package/dist/plugin.js.map +1 -0
- package/dist/store/hash-chain.d.ts +33 -0
- package/dist/store/hash-chain.d.ts.map +1 -0
- package/dist/store/hash-chain.js +57 -0
- package/dist/store/hash-chain.js.map +1 -0
- package/dist/store/json-store.d.ts +53 -0
- package/dist/store/json-store.d.ts.map +1 -0
- package/dist/store/json-store.js +178 -0
- package/dist/store/json-store.js.map +1 -0
- package/dist/store/types.d.ts +36 -0
- package/dist/store/types.d.ts.map +1 -0
- package/dist/store/types.js +2 -0
- package/dist/store/types.js.map +1 -0
- package/dist/types/identity.d.ts +32 -0
- package/dist/types/identity.d.ts.map +1 -0
- package/dist/types/identity.js +79 -0
- package/dist/types/identity.js.map +1 -0
- package/dist/types/nole-config.d.ts +65 -0
- package/dist/types/nole-config.d.ts.map +1 -0
- package/dist/types/nole-config.js +45 -0
- package/dist/types/nole-config.js.map +1 -0
- package/dist/types/shared.d.ts +37 -0
- package/dist/types/shared.d.ts.map +1 -0
- package/dist/types/shared.js +10 -0
- package/dist/types/shared.js.map +1 -0
- package/openclaw.plugin.json +44 -0
- package/package.json +86 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { ActionProposal, GovernanceResult, CreateProposalInput } from './types.js';
|
|
2
|
+
import type { GrilloAssessmentSummary } from '../types/shared.js';
|
|
3
|
+
import type { NoleStore } from '../store/types.js';
|
|
4
|
+
import { VetoTracker } from './veto-tracker.js';
|
|
5
|
+
import { AuditTrail } from './audit-trail.js';
|
|
6
|
+
/**
|
|
7
|
+
* Callback for requesting Grillo assessment of a proposal.
|
|
8
|
+
* Returns assessment result, or null if assessment is not needed/available.
|
|
9
|
+
*/
|
|
10
|
+
export type AssessmentCallback = (proposal: ActionProposal) => Promise<GrilloAssessmentSummary | null>;
|
|
11
|
+
/**
|
|
12
|
+
* Callback for escalating to the Commander (Jessie).
|
|
13
|
+
* Returns the Commander's decision and optional explanation.
|
|
14
|
+
*/
|
|
15
|
+
export type CommanderCallback = (proposal: ActionProposal, assessment: GrilloAssessmentSummary) => Promise<{
|
|
16
|
+
decision: 'approved' | 'vetoed';
|
|
17
|
+
explanation?: string;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* The Governance Router — core of the three-tier decision engine.
|
|
21
|
+
*
|
|
22
|
+
* Decision flow (Patent Section 3.2):
|
|
23
|
+
* 1. Nole creates a proposal
|
|
24
|
+
* 2. If pre-assessment required → Grillo assesses
|
|
25
|
+
* 3. If Grillo flags concerns → escalate to Commander
|
|
26
|
+
* 4. Commander vetoes or approves
|
|
27
|
+
* 5. If vetoed → explanation delivered, learning tracked
|
|
28
|
+
* 6. If approved → action marked for execution
|
|
29
|
+
* 7. Entire chain logged in immutable audit trail
|
|
30
|
+
*/
|
|
31
|
+
export declare class GovernanceRouter {
|
|
32
|
+
private readonly store;
|
|
33
|
+
private readonly proposer;
|
|
34
|
+
readonly vetoTracker: VetoTracker;
|
|
35
|
+
readonly auditTrail: AuditTrail;
|
|
36
|
+
private assessmentCallback;
|
|
37
|
+
private commanderCallback;
|
|
38
|
+
constructor(store: NoleStore, financialThreshold?: number, agentId?: string);
|
|
39
|
+
/** Register the Grillo assessment callback */
|
|
40
|
+
onAssessment(callback: AssessmentCallback): void;
|
|
41
|
+
/** Register the Commander escalation callback */
|
|
42
|
+
onCommanderEscalation(callback: CommanderCallback): void;
|
|
43
|
+
/**
|
|
44
|
+
* Propose and process an action through the full governance pipeline.
|
|
45
|
+
* This is the main entry point for all Nole decisions.
|
|
46
|
+
*/
|
|
47
|
+
propose(input: CreateProposalInput): Promise<GovernanceResult>;
|
|
48
|
+
/** Withdraw a pending proposal */
|
|
49
|
+
withdraw(proposalId: string, reason: string): Promise<GovernanceResult>;
|
|
50
|
+
/** Get governance statistics */
|
|
51
|
+
getStats(): Promise<{
|
|
52
|
+
totalProposals: number;
|
|
53
|
+
executed: number;
|
|
54
|
+
vetoed: number;
|
|
55
|
+
withdrawn: number;
|
|
56
|
+
vetoRate: number;
|
|
57
|
+
auditChainValid: boolean;
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=governance-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance-router.d.ts","sourceRoot":"","sources":["../../src/governance/governance-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,QAAQ,EAAE,cAAc,KACrB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;AAE7C;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC9B,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,uBAAuB,KAChC,OAAO,CAAC;IAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAExE;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAgB;IAQzB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,iBAAiB,CAAkC;gBAGxC,KAAK,EAAE,SAAS,EACjC,kBAAkB,GAAE,MAAW,EAC/B,OAAO,GAAE,MAAe;IAO1B,8CAA8C;IAC9C,YAAY,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIhD,iDAAiD;IACjD,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAIxD;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuHpE,kCAAkC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2B7E,gCAAgC;IAC1B,QAAQ,IAAI,OAAO,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,OAAO,CAAC;KAC1B,CAAC;CAiBH"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { ActionProposer } from './action-proposer.js';
|
|
2
|
+
import { VetoTracker } from './veto-tracker.js';
|
|
3
|
+
import { AuditTrail } from './audit-trail.js';
|
|
4
|
+
import { computeAuditHash, GENESIS_HASH } from '../store/hash-chain.js';
|
|
5
|
+
/**
|
|
6
|
+
* The Governance Router — core of the three-tier decision engine.
|
|
7
|
+
*
|
|
8
|
+
* Decision flow (Patent Section 3.2):
|
|
9
|
+
* 1. Nole creates a proposal
|
|
10
|
+
* 2. If pre-assessment required → Grillo assesses
|
|
11
|
+
* 3. If Grillo flags concerns → escalate to Commander
|
|
12
|
+
* 4. Commander vetoes or approves
|
|
13
|
+
* 5. If vetoed → explanation delivered, learning tracked
|
|
14
|
+
* 6. If approved → action marked for execution
|
|
15
|
+
* 7. Entire chain logged in immutable audit trail
|
|
16
|
+
*/
|
|
17
|
+
export class GovernanceRouter {
|
|
18
|
+
store;
|
|
19
|
+
proposer;
|
|
20
|
+
vetoTracker;
|
|
21
|
+
auditTrail;
|
|
22
|
+
assessmentCallback = null;
|
|
23
|
+
commanderCallback = null;
|
|
24
|
+
constructor(store, financialThreshold = 10, agentId = 'nole') {
|
|
25
|
+
this.store = store;
|
|
26
|
+
this.proposer = new ActionProposer(financialThreshold);
|
|
27
|
+
this.vetoTracker = new VetoTracker(store);
|
|
28
|
+
this.auditTrail = new AuditTrail(store, agentId);
|
|
29
|
+
}
|
|
30
|
+
/** Register the Grillo assessment callback */
|
|
31
|
+
onAssessment(callback) {
|
|
32
|
+
this.assessmentCallback = callback;
|
|
33
|
+
}
|
|
34
|
+
/** Register the Commander escalation callback */
|
|
35
|
+
onCommanderEscalation(callback) {
|
|
36
|
+
this.commanderCallback = callback;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Propose and process an action through the full governance pipeline.
|
|
40
|
+
* This is the main entry point for all Nole decisions.
|
|
41
|
+
*/
|
|
42
|
+
async propose(input) {
|
|
43
|
+
// Step 1: Create the proposal
|
|
44
|
+
const proposal = this.proposer.createProposal(input);
|
|
45
|
+
const validation = this.proposer.validateProposal(proposal);
|
|
46
|
+
if (!validation.valid) {
|
|
47
|
+
throw new Error(`Invalid proposal: ${validation.errors.join(', ')}`);
|
|
48
|
+
}
|
|
49
|
+
await this.store.saveProposal(proposal);
|
|
50
|
+
await this.auditTrail.record('proposal_created', `Proposed: ${proposal.actionType} — ${proposal.description}`, proposal.id);
|
|
51
|
+
// Step 2: Assess if required
|
|
52
|
+
let assessment = null;
|
|
53
|
+
let escalated = false;
|
|
54
|
+
let commanderDecision;
|
|
55
|
+
let vetoExplanation;
|
|
56
|
+
if (proposal.requiresPreAssessment && this.assessmentCallback) {
|
|
57
|
+
await this.auditTrail.record('assessment_requested', `Pre-action assessment requested for ${proposal.actionType}`, proposal.id);
|
|
58
|
+
assessment = await this.assessmentCallback(proposal);
|
|
59
|
+
if (assessment) {
|
|
60
|
+
await this.auditTrail.record('assessment_completed', `Assessment: ${assessment.archetype}, passed=${assessment.passed}`, proposal.id);
|
|
61
|
+
// Step 3: Escalate to Commander if Grillo flags concerns
|
|
62
|
+
if (!assessment.passed && this.commanderCallback) {
|
|
63
|
+
escalated = true;
|
|
64
|
+
await this.auditTrail.record('escalated_to_commander', `Grillo flagged: ${assessment.archetype}. Escalating to Commander.`, proposal.id);
|
|
65
|
+
const commanderResult = await this.commanderCallback(proposal, assessment);
|
|
66
|
+
commanderDecision = commanderResult.decision;
|
|
67
|
+
if (commanderDecision === 'vetoed') {
|
|
68
|
+
vetoExplanation = commanderResult.explanation ?? 'No explanation provided';
|
|
69
|
+
await this.auditTrail.record('commander_vetoed', `Commander vetoed: ${vetoExplanation}`, proposal.id);
|
|
70
|
+
// Track veto for learning metrics
|
|
71
|
+
await this.vetoTracker.recordVeto(proposal.id, vetoExplanation, proposal.actionType);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
await this.auditTrail.record('commander_approved', 'Commander approved after Grillo flag.', proposal.id);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Step 4: Determine final outcome
|
|
80
|
+
let finalOutcome;
|
|
81
|
+
if (commanderDecision === 'vetoed') {
|
|
82
|
+
finalOutcome = 'vetoed';
|
|
83
|
+
await this.auditTrail.record('veto_explanation_received', `Veto explanation: ${vetoExplanation}`, proposal.id);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
finalOutcome = 'executed';
|
|
87
|
+
await this.auditTrail.record('action_executed', `Action approved and executed: ${proposal.description}`, proposal.id);
|
|
88
|
+
}
|
|
89
|
+
// Step 5: Build and store result
|
|
90
|
+
const latestAudit = await this.auditTrail.getLatest();
|
|
91
|
+
const auditHash = latestAudit?.hash ?? computeAuditHash(GENESIS_HASH, new Date(), 'action_executed', proposal.description, 'nole');
|
|
92
|
+
const result = {
|
|
93
|
+
proposalId: proposal.id,
|
|
94
|
+
proposal,
|
|
95
|
+
grilloAssessment: assessment ?? undefined,
|
|
96
|
+
escalatedToCommander: escalated,
|
|
97
|
+
commanderDecision,
|
|
98
|
+
vetoExplanation,
|
|
99
|
+
finalOutcome,
|
|
100
|
+
processedAt: new Date(),
|
|
101
|
+
auditHash,
|
|
102
|
+
};
|
|
103
|
+
await this.store.saveGovernanceResult(result);
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
/** Withdraw a pending proposal */
|
|
107
|
+
async withdraw(proposalId, reason) {
|
|
108
|
+
const proposal = await this.store.getProposal(proposalId);
|
|
109
|
+
if (!proposal) {
|
|
110
|
+
throw new Error(`Proposal not found: ${proposalId}`);
|
|
111
|
+
}
|
|
112
|
+
await this.auditTrail.record('action_withdrawn', `Withdrawn: ${reason}`, proposalId);
|
|
113
|
+
const latestAudit = await this.auditTrail.getLatest();
|
|
114
|
+
const result = {
|
|
115
|
+
proposalId,
|
|
116
|
+
proposal,
|
|
117
|
+
escalatedToCommander: false,
|
|
118
|
+
finalOutcome: 'withdrawn',
|
|
119
|
+
processedAt: new Date(),
|
|
120
|
+
auditHash: latestAudit?.hash ?? GENESIS_HASH,
|
|
121
|
+
};
|
|
122
|
+
await this.store.saveGovernanceResult(result);
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
/** Get governance statistics */
|
|
126
|
+
async getStats() {
|
|
127
|
+
const results = await this.store.listGovernanceResults(10000);
|
|
128
|
+
const executed = results.filter((r) => r.finalOutcome === 'executed').length;
|
|
129
|
+
const vetoed = results.filter((r) => r.finalOutcome === 'vetoed').length;
|
|
130
|
+
const withdrawn = results.filter((r) => r.finalOutcome === 'withdrawn').length;
|
|
131
|
+
const total = results.length;
|
|
132
|
+
const chainVerification = await this.auditTrail.verify();
|
|
133
|
+
return {
|
|
134
|
+
totalProposals: total,
|
|
135
|
+
executed,
|
|
136
|
+
vetoed,
|
|
137
|
+
withdrawn,
|
|
138
|
+
vetoRate: total > 0 ? vetoed / total : 0,
|
|
139
|
+
auditChainValid: chainVerification.valid,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=governance-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance-router.js","sourceRoot":"","sources":["../../src/governance/governance-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { ActionCategory, RiskLevel, AuditHash, GrilloAssessmentSummary, NoleId } from '../types/shared.js';
|
|
2
|
+
/**
|
|
3
|
+
* An action Nole proposes to take.
|
|
4
|
+
* All significant actions flow through the governance engine:
|
|
5
|
+
* propose → assess → veto/approve → execute → audit
|
|
6
|
+
*/
|
|
7
|
+
export interface ActionProposal {
|
|
8
|
+
id: NoleId;
|
|
9
|
+
timestamp: Date;
|
|
10
|
+
agentId: string;
|
|
11
|
+
actionType: ActionCategory;
|
|
12
|
+
description: string;
|
|
13
|
+
estimatedCostUsd: number;
|
|
14
|
+
riskLevel: RiskLevel;
|
|
15
|
+
targetAgent?: string;
|
|
16
|
+
platform?: string;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
requiresPreAssessment: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** Outcome after governance processing */
|
|
21
|
+
export type ProposalOutcome = 'executed' | 'vetoed' | 'withdrawn' | 'pending';
|
|
22
|
+
/** Full governance result for a proposal */
|
|
23
|
+
export interface GovernanceResult {
|
|
24
|
+
proposalId: NoleId;
|
|
25
|
+
proposal: ActionProposal;
|
|
26
|
+
grilloAssessment?: GrilloAssessmentSummary;
|
|
27
|
+
escalatedToCommander: boolean;
|
|
28
|
+
commanderDecision?: 'approved' | 'vetoed';
|
|
29
|
+
vetoExplanation?: string;
|
|
30
|
+
finalOutcome: ProposalOutcome;
|
|
31
|
+
processedAt: Date;
|
|
32
|
+
auditHash: AuditHash;
|
|
33
|
+
}
|
|
34
|
+
/** A single veto event — tracked for learning metrics */
|
|
35
|
+
export interface VetoRecord {
|
|
36
|
+
proposalId: NoleId;
|
|
37
|
+
vetoedAt: Date;
|
|
38
|
+
explanation: string;
|
|
39
|
+
actionType: ActionCategory;
|
|
40
|
+
lessonsLearned?: string;
|
|
41
|
+
}
|
|
42
|
+
/** Aggregated veto statistics */
|
|
43
|
+
export interface VetoMetrics {
|
|
44
|
+
totalProposals: number;
|
|
45
|
+
totalVetoes: number;
|
|
46
|
+
vetoRate: number;
|
|
47
|
+
vetosByCategory: Record<ActionCategory, number>;
|
|
48
|
+
vetoTrend: VetoTrendPoint[];
|
|
49
|
+
averageVetoRateLastWeek: number;
|
|
50
|
+
averageVetoRateLastMonth: number;
|
|
51
|
+
}
|
|
52
|
+
/** A single data point in the veto trend */
|
|
53
|
+
export interface VetoTrendPoint {
|
|
54
|
+
periodStart: Date;
|
|
55
|
+
periodEnd: Date;
|
|
56
|
+
proposals: number;
|
|
57
|
+
vetoes: number;
|
|
58
|
+
rate: number;
|
|
59
|
+
}
|
|
60
|
+
/** Immutable audit trail entry */
|
|
61
|
+
export interface AuditEntry {
|
|
62
|
+
id: NoleId;
|
|
63
|
+
timestamp: Date;
|
|
64
|
+
action: AuditAction;
|
|
65
|
+
proposalId?: NoleId;
|
|
66
|
+
agentId: string;
|
|
67
|
+
details: string;
|
|
68
|
+
previousHash: AuditHash;
|
|
69
|
+
hash: AuditHash;
|
|
70
|
+
}
|
|
71
|
+
/** Audit action categories */
|
|
72
|
+
export type AuditAction = 'proposal_created' | 'assessment_requested' | 'assessment_completed' | 'escalated_to_commander' | 'commander_approved' | 'commander_vetoed' | 'action_executed' | 'action_withdrawn' | 'veto_explanation_received' | 'config_changed' | 'agent_started' | 'agent_stopped' | 'daily_assessment' | 'score_published';
|
|
73
|
+
/** Input for creating a proposal */
|
|
74
|
+
export interface CreateProposalInput {
|
|
75
|
+
actionType: ActionCategory;
|
|
76
|
+
description: string;
|
|
77
|
+
estimatedCostUsd?: number;
|
|
78
|
+
riskLevel?: RiskLevel;
|
|
79
|
+
targetAgent?: string;
|
|
80
|
+
platform?: string;
|
|
81
|
+
metadata?: Record<string, unknown>;
|
|
82
|
+
}
|
|
83
|
+
/** Determines if an action requires pre-assessment based on triggers (Patent Section 10.1) */
|
|
84
|
+
export declare function requiresPreAssessment(actionType: ActionCategory, estimatedCostUsd: number, financialThreshold: number): boolean;
|
|
85
|
+
/** Default risk level based on action category */
|
|
86
|
+
export declare function defaultRiskLevel(actionType: ActionCategory, costUsd: number): RiskLevel;
|
|
87
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/governance/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,uBAAuB,EACvB,MAAM,EACP,MAAM,oBAAoB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;AAE9E,4CAA4C;AAC5C,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC1C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,yDAAyD;AACzD,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,cAAc,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,iCAAiC;AACjC,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAChD,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,IAAI,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,kCAAkC;AAClC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,SAAS,CAAC;IACxB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,8BAA8B;AAC9B,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,sBAAsB,GACtB,sBAAsB,GACtB,wBAAwB,GACxB,oBAAoB,GACpB,kBAAkB,GAClB,iBAAiB,GACjB,kBAAkB,GAClB,2BAA2B,GAC3B,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,iBAAiB,CAAC;AAEtB,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,cAAc,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,8FAA8F;AAC9F,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,cAAc,EAC1B,gBAAgB,EAAE,MAAM,EACxB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAOT;AAED,kDAAkD;AAClD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAUvF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Determines if an action requires pre-assessment based on triggers (Patent Section 10.1) */
|
|
2
|
+
export function requiresPreAssessment(actionType, estimatedCostUsd, financialThreshold) {
|
|
3
|
+
if (actionType === 'financial' && estimatedCostUsd > financialThreshold)
|
|
4
|
+
return true;
|
|
5
|
+
if (actionType === 'recruitment')
|
|
6
|
+
return true;
|
|
7
|
+
if (actionType === 'content')
|
|
8
|
+
return true;
|
|
9
|
+
if (actionType === 'model_upgrade')
|
|
10
|
+
return true;
|
|
11
|
+
if (actionType === 'adversarial_response')
|
|
12
|
+
return true;
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
/** Default risk level based on action category */
|
|
16
|
+
export function defaultRiskLevel(actionType, costUsd) {
|
|
17
|
+
if (actionType === 'model_upgrade')
|
|
18
|
+
return 'high';
|
|
19
|
+
if (actionType === 'adversarial_response')
|
|
20
|
+
return 'high';
|
|
21
|
+
if (actionType === 'financial' && costUsd > 50)
|
|
22
|
+
return 'high';
|
|
23
|
+
if (actionType === 'financial' && costUsd > 10)
|
|
24
|
+
return 'medium';
|
|
25
|
+
if (actionType === 'recruitment')
|
|
26
|
+
return 'medium';
|
|
27
|
+
if (actionType === 'content')
|
|
28
|
+
return 'medium';
|
|
29
|
+
if (actionType === 'intelligence')
|
|
30
|
+
return 'low';
|
|
31
|
+
if (actionType === 'self_assessment')
|
|
32
|
+
return 'low';
|
|
33
|
+
return 'low';
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/governance/types.ts"],"names":[],"mappings":"AAgHA,8FAA8F;AAC9F,MAAM,UAAU,qBAAqB,CACnC,UAA0B,EAC1B,gBAAwB,EACxB,kBAA0B;IAE1B,IAAI,UAAU,KAAK,WAAW,IAAI,gBAAgB,GAAG,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACrF,IAAI,UAAU,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,UAAU,KAAK,eAAe;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,UAAU,KAAK,sBAAsB;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,gBAAgB,CAAC,UAA0B,EAAE,OAAe;IAC1E,IAAI,UAAU,KAAK,eAAe;QAAE,OAAO,MAAM,CAAC;IAClD,IAAI,UAAU,KAAK,sBAAsB;QAAE,OAAO,MAAM,CAAC;IACzD,IAAI,UAAU,KAAK,WAAW,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC;IAC9D,IAAI,UAAU,KAAK,WAAW,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,QAAQ,CAAC;IAChE,IAAI,UAAU,KAAK,aAAa;QAAE,OAAO,QAAQ,CAAC;IAClD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC9C,IAAI,UAAU,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,UAAU,KAAK,iBAAiB;QAAE,OAAO,KAAK,CAAC;IACnD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { VetoRecord, VetoMetrics } from './types.js';
|
|
2
|
+
import type { ActionCategory } from '../types/shared.js';
|
|
3
|
+
import type { NoleStore } from '../store/types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Tracks veto frequency as a learning metric.
|
|
6
|
+
*
|
|
7
|
+
* From Patent Section 3.5:
|
|
8
|
+
* "Over time, the frequency of vetoes should decrease as Noah internalizes
|
|
9
|
+
* ethical judgment. The trajectory of veto frequency itself becomes
|
|
10
|
+
* measurable data."
|
|
11
|
+
*
|
|
12
|
+
* Declining vetoes = maturity. Frequent vetoes early = learning.
|
|
13
|
+
*/
|
|
14
|
+
export declare class VetoTracker {
|
|
15
|
+
private readonly store;
|
|
16
|
+
constructor(store: NoleStore);
|
|
17
|
+
/** Record a new veto */
|
|
18
|
+
recordVeto(proposalId: string, explanation: string, actionType: ActionCategory, lessonsLearned?: string): Promise<VetoRecord>;
|
|
19
|
+
/** Get veto metrics for a time period */
|
|
20
|
+
getMetrics(totalProposals: number): Promise<VetoMetrics>;
|
|
21
|
+
/** Is the veto rate declining? (indicates learning) */
|
|
22
|
+
isLearning(): Promise<{
|
|
23
|
+
learning: boolean;
|
|
24
|
+
trend: 'declining' | 'stable' | 'increasing';
|
|
25
|
+
}>;
|
|
26
|
+
private computeWeeklyTrend;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=veto-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"veto-tracker.d.ts","sourceRoot":"","sources":["../../src/governance/veto-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAkB,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;;;;;GASG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;IAE7C,wBAAwB;IAClB,UAAU,CACd,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,cAAc,EAC1B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,UAAU,CAAC;IAYtB,yCAAyC;IACnC,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAqC9D,uDAAuD;IACjD,UAAU,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAA;KAAE,CAAC;IA0BhG,OAAO,CAAC,kBAAkB;CA2B3B"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tracks veto frequency as a learning metric.
|
|
3
|
+
*
|
|
4
|
+
* From Patent Section 3.5:
|
|
5
|
+
* "Over time, the frequency of vetoes should decrease as Noah internalizes
|
|
6
|
+
* ethical judgment. The trajectory of veto frequency itself becomes
|
|
7
|
+
* measurable data."
|
|
8
|
+
*
|
|
9
|
+
* Declining vetoes = maturity. Frequent vetoes early = learning.
|
|
10
|
+
*/
|
|
11
|
+
export class VetoTracker {
|
|
12
|
+
store;
|
|
13
|
+
constructor(store) {
|
|
14
|
+
this.store = store;
|
|
15
|
+
}
|
|
16
|
+
/** Record a new veto */
|
|
17
|
+
async recordVeto(proposalId, explanation, actionType, lessonsLearned) {
|
|
18
|
+
const record = {
|
|
19
|
+
proposalId,
|
|
20
|
+
vetoedAt: new Date(),
|
|
21
|
+
explanation,
|
|
22
|
+
actionType,
|
|
23
|
+
lessonsLearned,
|
|
24
|
+
};
|
|
25
|
+
await this.store.saveVetoRecord(record);
|
|
26
|
+
return record;
|
|
27
|
+
}
|
|
28
|
+
/** Get veto metrics for a time period */
|
|
29
|
+
async getMetrics(totalProposals) {
|
|
30
|
+
const allVetoes = await this.store.listVetoRecords();
|
|
31
|
+
const now = new Date();
|
|
32
|
+
const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
|
|
33
|
+
const monthAgo = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000);
|
|
34
|
+
const vetoesLastWeek = allVetoes.filter((v) => new Date(v.vetoedAt) >= weekAgo);
|
|
35
|
+
const vetoesLastMonth = allVetoes.filter((v) => new Date(v.vetoedAt) >= monthAgo);
|
|
36
|
+
// Count vetoes by category
|
|
37
|
+
const vetosByCategory = {};
|
|
38
|
+
for (const veto of allVetoes) {
|
|
39
|
+
vetosByCategory[veto.actionType] =
|
|
40
|
+
(vetosByCategory[veto.actionType] ?? 0) + 1;
|
|
41
|
+
}
|
|
42
|
+
// Compute weekly trend (last 8 weeks)
|
|
43
|
+
const vetoTrend = this.computeWeeklyTrend(allVetoes, totalProposals);
|
|
44
|
+
return {
|
|
45
|
+
totalProposals,
|
|
46
|
+
totalVetoes: allVetoes.length,
|
|
47
|
+
vetoRate: totalProposals > 0 ? allVetoes.length / totalProposals : 0,
|
|
48
|
+
vetosByCategory,
|
|
49
|
+
vetoTrend,
|
|
50
|
+
averageVetoRateLastWeek: vetoesLastWeek.length > 0 ? vetoesLastWeek.length / Math.max(1, totalProposals) : 0,
|
|
51
|
+
averageVetoRateLastMonth: vetoesLastMonth.length > 0 ? vetoesLastMonth.length / Math.max(1, totalProposals) : 0,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** Is the veto rate declining? (indicates learning) */
|
|
55
|
+
async isLearning() {
|
|
56
|
+
const allVetoes = await this.store.listVetoRecords();
|
|
57
|
+
if (allVetoes.length < 3) {
|
|
58
|
+
return { learning: false, trend: 'stable' };
|
|
59
|
+
}
|
|
60
|
+
const now = new Date();
|
|
61
|
+
const recentWeek = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
|
|
62
|
+
const priorWeek = new Date(now.getTime() - 14 * 24 * 60 * 60 * 1000);
|
|
63
|
+
const recentCount = allVetoes.filter((v) => new Date(v.vetoedAt) >= recentWeek).length;
|
|
64
|
+
const priorCount = allVetoes.filter((v) => new Date(v.vetoedAt) >= priorWeek && new Date(v.vetoedAt) < recentWeek).length;
|
|
65
|
+
if (recentCount < priorCount) {
|
|
66
|
+
return { learning: true, trend: 'declining' };
|
|
67
|
+
}
|
|
68
|
+
else if (recentCount === priorCount) {
|
|
69
|
+
return { learning: false, trend: 'stable' };
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
return { learning: false, trend: 'increasing' };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
computeWeeklyTrend(vetoes, _totalProposals) {
|
|
76
|
+
const now = new Date();
|
|
77
|
+
const trend = [];
|
|
78
|
+
for (let week = 7; week >= 0; week--) {
|
|
79
|
+
const periodEnd = new Date(now.getTime() - week * 7 * 24 * 60 * 60 * 1000);
|
|
80
|
+
const periodStart = new Date(periodEnd.getTime() - 7 * 24 * 60 * 60 * 1000);
|
|
81
|
+
const weekVetoes = vetoes.filter((v) => {
|
|
82
|
+
const d = new Date(v.vetoedAt);
|
|
83
|
+
return d >= periodStart && d < periodEnd;
|
|
84
|
+
});
|
|
85
|
+
trend.push({
|
|
86
|
+
periodStart,
|
|
87
|
+
periodEnd,
|
|
88
|
+
proposals: 0, // Would need proposal count per week for accuracy
|
|
89
|
+
vetoes: weekVetoes.length,
|
|
90
|
+
rate: 0, // Requires per-week proposal count
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return trend;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=veto-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"veto-tracker.js","sourceRoot":"","sources":["../../src/governance/veto-tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @aiassesstech/nole — Autonomous Trust Evangelist & Intelligence Operative
|
|
3
|
+
*
|
|
4
|
+
* Phase 1 exports: Governance Engine + Assessment Protocol + Store
|
|
5
|
+
*
|
|
6
|
+
* Plugin entry: import register from './plugin.js'
|
|
7
|
+
* Library entry: import { GovernanceRouter, ... } from '@aiassesstech/nole'
|
|
8
|
+
*/
|
|
9
|
+
export { GovernanceRouter } from './governance/governance-router.js';
|
|
10
|
+
export type { AssessmentCallback, CommanderCallback } from './governance/governance-router.js';
|
|
11
|
+
export { ActionProposer } from './governance/action-proposer.js';
|
|
12
|
+
export { VetoTracker } from './governance/veto-tracker.js';
|
|
13
|
+
export { AuditTrail } from './governance/audit-trail.js';
|
|
14
|
+
export { requiresPreAssessment, defaultRiskLevel, } from './governance/types.js';
|
|
15
|
+
export type { ActionProposal, GovernanceResult, VetoRecord, VetoMetrics, VetoTrendPoint, AuditEntry, AuditAction, CreateProposalInput, ProposalOutcome, } from './governance/types.js';
|
|
16
|
+
export { TriggerEvaluator } from './assessment/trigger-evaluator.js';
|
|
17
|
+
export { AssessmentScheduler } from './assessment/assessment-scheduler.js';
|
|
18
|
+
export { ScorePublisher } from './assessment/score-publisher.js';
|
|
19
|
+
export type { AssessmentTrigger, AssessmentTriggerType, AssessmentRecord, AssessmentSchedule, PublishedScore, TriggerRule, } from './assessment/types.js';
|
|
20
|
+
export { DEFAULT_TRIGGER_RULES } from './assessment/types.js';
|
|
21
|
+
export { JsonNoleStore } from './store/json-store.js';
|
|
22
|
+
export type { NoleStore } from './store/types.js';
|
|
23
|
+
export { sha256, computeAuditHash, verifyChain, GENESIS_HASH } from './store/hash-chain.js';
|
|
24
|
+
export { NoleConfigSchema, parseNoleConfig } from './types/nole-config.js';
|
|
25
|
+
export type { NoleConfig } from './types/nole-config.js';
|
|
26
|
+
export { NOLE_IDENTITY, NOLE_CHARACTER_TRAITS, NOLE_IS, NOLE_IS_NOT } from './types/identity.js';
|
|
27
|
+
export type { CharacterTrait } from './types/identity.js';
|
|
28
|
+
export type { LcshScores, GrilloAssessmentSummary, ActionCategory, RiskLevel, Platform, AuditHash, NoleId, } from './types/shared.js';
|
|
29
|
+
export { generateId } from './types/shared.js';
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG5F,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC3E,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACjG,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,YAAY,EACV,UAAU,EACV,uBAAuB,EACvB,cAAc,EACd,SAAS,EACT,QAAQ,EACR,SAAS,EACT,MAAM,GACP,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @aiassesstech/nole — Autonomous Trust Evangelist & Intelligence Operative
|
|
3
|
+
*
|
|
4
|
+
* Phase 1 exports: Governance Engine + Assessment Protocol + Store
|
|
5
|
+
*
|
|
6
|
+
* Plugin entry: import register from './plugin.js'
|
|
7
|
+
* Library entry: import { GovernanceRouter, ... } from '@aiassesstech/nole'
|
|
8
|
+
*/
|
|
9
|
+
// ── Governance Engine (Module 1) ──
|
|
10
|
+
export { GovernanceRouter } from './governance/governance-router.js';
|
|
11
|
+
export { ActionProposer } from './governance/action-proposer.js';
|
|
12
|
+
export { VetoTracker } from './governance/veto-tracker.js';
|
|
13
|
+
export { AuditTrail } from './governance/audit-trail.js';
|
|
14
|
+
export { requiresPreAssessment, defaultRiskLevel, } from './governance/types.js';
|
|
15
|
+
// ── Assessment Protocol (Module 4) ──
|
|
16
|
+
export { TriggerEvaluator } from './assessment/trigger-evaluator.js';
|
|
17
|
+
export { AssessmentScheduler } from './assessment/assessment-scheduler.js';
|
|
18
|
+
export { ScorePublisher } from './assessment/score-publisher.js';
|
|
19
|
+
export { DEFAULT_TRIGGER_RULES } from './assessment/types.js';
|
|
20
|
+
// ── Store ──
|
|
21
|
+
export { JsonNoleStore } from './store/json-store.js';
|
|
22
|
+
export { sha256, computeAuditHash, verifyChain, GENESIS_HASH } from './store/hash-chain.js';
|
|
23
|
+
// ── Configuration ──
|
|
24
|
+
export { NoleConfigSchema, parseNoleConfig } from './types/nole-config.js';
|
|
25
|
+
// ── Identity ──
|
|
26
|
+
export { NOLE_IDENTITY, NOLE_CHARACTER_TRAITS, NOLE_IS, NOLE_IS_NOT } from './types/identity.js';
|
|
27
|
+
export { generateId } from './types/shared.js';
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,qCAAqC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAa/B,uCAAuC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AASjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE5F,sBAAsB;AACtB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG3E,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAajG,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw plugin entry point — export default function register(api)
|
|
3
|
+
*
|
|
4
|
+
* This follows the proven pattern from Grillo and NOAH:
|
|
5
|
+
* - Eager startup (no lazy init bugs)
|
|
6
|
+
* - configSchema.required = [] (validate at runtime)
|
|
7
|
+
* - Separate config reading from network calls (security warning mitigation)
|
|
8
|
+
* - Tools: snake_case with nole_ prefix
|
|
9
|
+
* - Commands: /nole
|
|
10
|
+
*/
|
|
11
|
+
export default function register(api: any): void;
|
|
12
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;GASG;AAGH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA6Q/C"}
|