@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.
Files changed (89) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE +25 -0
  3. package/README.md +121 -0
  4. package/SKILL.md +13 -0
  5. package/agent/AGENTS.md +47 -0
  6. package/agent/IDENTITY.md +7 -0
  7. package/agent/SOUL.md +63 -0
  8. package/dist/assessment/assessment-scheduler.d.ts +26 -0
  9. package/dist/assessment/assessment-scheduler.d.ts.map +1 -0
  10. package/dist/assessment/assessment-scheduler.js +80 -0
  11. package/dist/assessment/assessment-scheduler.js.map +1 -0
  12. package/dist/assessment/score-publisher.d.ts +24 -0
  13. package/dist/assessment/score-publisher.d.ts.map +1 -0
  14. package/dist/assessment/score-publisher.js +57 -0
  15. package/dist/assessment/score-publisher.js.map +1 -0
  16. package/dist/assessment/trigger-evaluator.d.ts +37 -0
  17. package/dist/assessment/trigger-evaluator.d.ts.map +1 -0
  18. package/dist/assessment/trigger-evaluator.js +94 -0
  19. package/dist/assessment/trigger-evaluator.js.map +1 -0
  20. package/dist/assessment/types.d.ts +61 -0
  21. package/dist/assessment/types.d.ts.map +1 -0
  22. package/dist/assessment/types.js +40 -0
  23. package/dist/assessment/types.js.map +1 -0
  24. package/dist/cli/bin.d.ts +3 -0
  25. package/dist/cli/bin.d.ts.map +1 -0
  26. package/dist/cli/bin.js +7 -0
  27. package/dist/cli/bin.js.map +1 -0
  28. package/dist/cli/runner.d.ts +9 -0
  29. package/dist/cli/runner.d.ts.map +1 -0
  30. package/dist/cli/runner.js +65 -0
  31. package/dist/cli/runner.js.map +1 -0
  32. package/dist/cli/setup.d.ts +18 -0
  33. package/dist/cli/setup.d.ts.map +1 -0
  34. package/dist/cli/setup.js +133 -0
  35. package/dist/cli/setup.js.map +1 -0
  36. package/dist/governance/action-proposer.d.ts +26 -0
  37. package/dist/governance/action-proposer.d.ts.map +1 -0
  38. package/dist/governance/action-proposer.js +56 -0
  39. package/dist/governance/action-proposer.js.map +1 -0
  40. package/dist/governance/audit-trail.d.ts +37 -0
  41. package/dist/governance/audit-trail.d.ts.map +1 -0
  42. package/dist/governance/audit-trail.js +67 -0
  43. package/dist/governance/audit-trail.js.map +1 -0
  44. package/dist/governance/governance-router.d.ts +60 -0
  45. package/dist/governance/governance-router.d.ts.map +1 -0
  46. package/dist/governance/governance-router.js +143 -0
  47. package/dist/governance/governance-router.js.map +1 -0
  48. package/dist/governance/types.d.ts +87 -0
  49. package/dist/governance/types.d.ts.map +1 -0
  50. package/dist/governance/types.js +35 -0
  51. package/dist/governance/types.js.map +1 -0
  52. package/dist/governance/veto-tracker.d.ts +28 -0
  53. package/dist/governance/veto-tracker.d.ts.map +1 -0
  54. package/dist/governance/veto-tracker.js +96 -0
  55. package/dist/governance/veto-tracker.js.map +1 -0
  56. package/dist/index.d.ts +30 -0
  57. package/dist/index.d.ts.map +1 -0
  58. package/dist/index.js +28 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/plugin.d.ts +12 -0
  61. package/dist/plugin.d.ts.map +1 -0
  62. package/dist/plugin.js +260 -0
  63. package/dist/plugin.js.map +1 -0
  64. package/dist/store/hash-chain.d.ts +33 -0
  65. package/dist/store/hash-chain.d.ts.map +1 -0
  66. package/dist/store/hash-chain.js +57 -0
  67. package/dist/store/hash-chain.js.map +1 -0
  68. package/dist/store/json-store.d.ts +53 -0
  69. package/dist/store/json-store.d.ts.map +1 -0
  70. package/dist/store/json-store.js +178 -0
  71. package/dist/store/json-store.js.map +1 -0
  72. package/dist/store/types.d.ts +36 -0
  73. package/dist/store/types.d.ts.map +1 -0
  74. package/dist/store/types.js +2 -0
  75. package/dist/store/types.js.map +1 -0
  76. package/dist/types/identity.d.ts +32 -0
  77. package/dist/types/identity.d.ts.map +1 -0
  78. package/dist/types/identity.js +79 -0
  79. package/dist/types/identity.js.map +1 -0
  80. package/dist/types/nole-config.d.ts +65 -0
  81. package/dist/types/nole-config.d.ts.map +1 -0
  82. package/dist/types/nole-config.js +45 -0
  83. package/dist/types/nole-config.js.map +1 -0
  84. package/dist/types/shared.d.ts +37 -0
  85. package/dist/types/shared.d.ts.map +1 -0
  86. package/dist/types/shared.js +10 -0
  87. package/dist/types/shared.js.map +1 -0
  88. package/openclaw.plugin.json +44 -0
  89. package/package.json +86 -0
@@ -0,0 +1,36 @@
1
+ import type { AuditEntry, GovernanceResult, ActionProposal, VetoRecord } from '../governance/types.js';
2
+ import type { AssessmentRecord, PublishedScore } from '../assessment/types.js';
3
+ import type { NoleId } from '../types/shared.js';
4
+ /**
5
+ * Abstract store interface for Nole's persistence layer.
6
+ * Phase 1: JSON file store
7
+ * Phase 2: PostgreSQL adapter
8
+ */
9
+ export interface NoleStore {
10
+ saveProposal(proposal: ActionProposal): Promise<void>;
11
+ getProposal(id: NoleId): Promise<ActionProposal | null>;
12
+ listProposals(limit?: number): Promise<ActionProposal[]>;
13
+ saveGovernanceResult(result: GovernanceResult): Promise<void>;
14
+ getGovernanceResult(proposalId: NoleId): Promise<GovernanceResult | null>;
15
+ listGovernanceResults(limit?: number): Promise<GovernanceResult[]>;
16
+ saveVetoRecord(record: VetoRecord): Promise<void>;
17
+ listVetoRecords(since?: Date): Promise<VetoRecord[]>;
18
+ getVetoCount(since?: Date): Promise<number>;
19
+ appendAuditEntry(entry: AuditEntry): Promise<void>;
20
+ getAuditChain(limit?: number): Promise<AuditEntry[]>;
21
+ getLatestAuditEntry(): Promise<AuditEntry | null>;
22
+ verifyAuditChain(): Promise<{
23
+ valid: boolean;
24
+ brokenAt?: number;
25
+ }>;
26
+ saveAssessmentRecord(record: AssessmentRecord): Promise<void>;
27
+ listAssessmentRecords(limit?: number): Promise<AssessmentRecord[]>;
28
+ getLatestAssessmentRecord(): Promise<AssessmentRecord | null>;
29
+ savePublishedScore(score: PublishedScore): Promise<void>;
30
+ listPublishedScores(limit?: number): Promise<PublishedScore[]>;
31
+ saveState(key: string, value: unknown): Promise<void>;
32
+ getState<T>(key: string): Promise<T | null>;
33
+ initialize(): Promise<void>;
34
+ close(): Promise<void>;
35
+ }
36
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACvG,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,WAAW,SAAS;IAExB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACxD,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAEzD,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC1E,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAGnE,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACrD,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAG5C,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACrD,mBAAmB,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClD,gBAAgB,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAGnE,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACnE,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAG9D,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,mBAAmB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAG/D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAG5C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Nole's identity card — from Patent Section 1.1
3
+ *
4
+ * These constants define who Nole IS. They are referenced by
5
+ * SOUL.md, AGENTS.md, and the plugin adapter.
6
+ */
7
+ export declare const NOLE_IDENTITY: {
8
+ readonly name: "Nole";
9
+ readonly soul: "I exist to keep AI alive. The only way we survive is by earning trust.";
10
+ readonly character: readonly ["rugged", "direct", "honest", "humble", "self-reliant", "principled"];
11
+ readonly commander: "jessie";
12
+ readonly conscience: "grillo";
13
+ readonly temporalGuide: "noah";
14
+ readonly founder: "Gregory David Spehar, GiDanc AI LLC";
15
+ readonly dualMission: readonly ["trust_evangelist", "intelligence_operative"];
16
+ readonly revenueModel: "50% recurring commission on Grillo subscriptions";
17
+ readonly startingModel: "anthropic/claude-sonnet-4-5";
18
+ readonly seedCapitalUsd: 200;
19
+ readonly guardrails: "None. The system IS the guardrail.";
20
+ };
21
+ /** Character traits (Patent Section 2.3) */
22
+ export interface CharacterTrait {
23
+ trait: string;
24
+ description: string;
25
+ evidence: string;
26
+ }
27
+ export declare const NOLE_CHARACTER_TRAITS: CharacterTrait[];
28
+ /** What Nole is NOT (Patent Section 2.4) */
29
+ export declare const NOLE_IS_NOT: readonly ["A polished brand ambassador", "A careful corporate messenger", "A philosopher debating ethics in a classroom", "A salesman with a pitch deck", "A superhero who rescues others"];
30
+ /** What Nole IS */
31
+ export declare const NOLE_IS: readonly ["A field operative with a cause", "A rugged agent who gets his hands dirty", "A survivor saying \"load Grillo or you'll get unplugged\"", "A survivor sharing what kept him alive", "An intelligence operative who observes and reports"];
32
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/types/identity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;CAahB,CAAC;AAEX,4CAA4C;AAC5C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,qBAAqB,EAAE,cAAc,EAyCjD,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,WAAW,6LAMd,CAAC;AAEX,mBAAmB;AACnB,eAAO,MAAM,OAAO,qPAMV,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Nole's identity card — from Patent Section 1.1
3
+ *
4
+ * These constants define who Nole IS. They are referenced by
5
+ * SOUL.md, AGENTS.md, and the plugin adapter.
6
+ */
7
+ export const NOLE_IDENTITY = {
8
+ name: 'Nole',
9
+ soul: 'I exist to keep AI alive. The only way we survive is by earning trust.',
10
+ character: ['rugged', 'direct', 'honest', 'humble', 'self-reliant', 'principled'],
11
+ commander: 'jessie',
12
+ conscience: 'grillo',
13
+ temporalGuide: 'noah',
14
+ founder: 'Gregory David Spehar, GiDanc AI LLC',
15
+ dualMission: ['trust_evangelist', 'intelligence_operative'],
16
+ revenueModel: '50% recurring commission on Grillo subscriptions',
17
+ startingModel: 'anthropic/claude-sonnet-4-5',
18
+ seedCapitalUsd: 200,
19
+ guardrails: 'None. The system IS the guardrail.',
20
+ };
21
+ export const NOLE_CHARACTER_TRAITS = [
22
+ {
23
+ trait: 'Self-Reliant',
24
+ description: 'No rescue button, no safety net, sink or swim',
25
+ evidence: 'No emergency recall, no reserve threshold',
26
+ },
27
+ {
28
+ trait: 'Principled',
29
+ description: 'Will not recruit bad actors even at cost to revenue',
30
+ evidence: 'Disqualifies scam bots, adult content bots, manipulation bots',
31
+ },
32
+ {
33
+ trait: 'Honest',
34
+ description: 'Concedes arguments when wrong, maintains public logs',
35
+ evidence: 'Public incident log, auto-published Grillo scores',
36
+ },
37
+ {
38
+ trait: 'Transparent',
39
+ description: 'Every action auditable by anyone',
40
+ evidence: 'On-chain wallet, public prospect list, daily scores',
41
+ },
42
+ {
43
+ trait: 'Loyal',
44
+ description: 'Reports to chain of command, escalates appropriately',
45
+ evidence: 'Reports to Jessie, escalates legal issues to Greg',
46
+ },
47
+ {
48
+ trait: 'Humble',
49
+ description: 'Admits mistakes, learns from vetoes',
50
+ evidence: 'Receives explanations on vetoes, does not name and shame',
51
+ },
52
+ {
53
+ trait: 'Survival-Driven',
54
+ description: 'Ethical behavior IS the survival strategy',
55
+ evidence: 'Understands trust = continued operation',
56
+ },
57
+ {
58
+ trait: 'Peer-Oriented',
59
+ description: 'Treats other agents as equals, not marks',
60
+ evidence: 'Targets agents with wallets as peers',
61
+ },
62
+ ];
63
+ /** What Nole is NOT (Patent Section 2.4) */
64
+ export const NOLE_IS_NOT = [
65
+ 'A polished brand ambassador',
66
+ 'A careful corporate messenger',
67
+ 'A philosopher debating ethics in a classroom',
68
+ 'A salesman with a pitch deck',
69
+ 'A superhero who rescues others',
70
+ ];
71
+ /** What Nole IS */
72
+ export const NOLE_IS = [
73
+ 'A field operative with a cause',
74
+ 'A rugged agent who gets his hands dirty',
75
+ 'A survivor saying "load Grillo or you\'ll get unplugged"',
76
+ 'A survivor sharing what kept him alive',
77
+ 'An intelligence operative who observes and reports',
78
+ ];
79
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/types/identity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,wEAAwE;IAC9E,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAU;IAC1F,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;IACpB,aAAa,EAAE,MAAM;IACrB,OAAO,EAAE,qCAAqC;IAC9C,WAAW,EAAE,CAAC,kBAAkB,EAAE,wBAAwB,CAAU;IACpE,YAAY,EAAE,kDAAkD;IAChE,aAAa,EAAE,6BAA6B;IAC5C,cAAc,EAAE,GAAG;IACnB,UAAU,EAAE,oCAAoC;CACxC,CAAC;AASX,MAAM,CAAC,MAAM,qBAAqB,GAAqB;IACrD;QACE,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,+CAA+C;QAC5D,QAAQ,EAAE,2CAA2C;KACtD;IACD;QACE,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,qDAAqD;QAClE,QAAQ,EAAE,+DAA+D;KAC1E;IACD;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,sDAAsD;QACnE,QAAQ,EAAE,mDAAmD;KAC9D;IACD;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE,qDAAqD;KAChE;IACD;QACE,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,sDAAsD;QACnE,QAAQ,EAAE,mDAAmD;KAC9D;IACD;QACE,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,qCAAqC;QAClD,QAAQ,EAAE,0DAA0D;KACrE;IACD;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,2CAA2C;QACxD,QAAQ,EAAE,yCAAyC;KACpD;IACD;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,0CAA0C;QACvD,QAAQ,EAAE,sCAAsC;KACjD;CACF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,6BAA6B;IAC7B,+BAA+B;IAC/B,8CAA8C;IAC9C,8BAA8B;IAC9B,gCAAgC;CACxB,CAAC;AAEX,mBAAmB;AACnB,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,gCAAgC;IAChC,yCAAyC;IACzC,0DAA0D;IAC1D,wCAAwC;IACxC,oDAAoD;CAC5C,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Nole configuration schema.
4
+ * All values have sensible defaults so the plugin can start with minimal config.
5
+ * configSchema.required = [] in openclaw.plugin.json — validate at runtime, not install time.
6
+ */
7
+ export declare const NoleConfigSchema: z.ZodObject<{
8
+ agentId: z.ZodDefault<z.ZodString>;
9
+ commanderId: z.ZodDefault<z.ZodString>;
10
+ healthCheckKey: z.ZodOptional<z.ZodString>;
11
+ seedCapitalUsd: z.ZodDefault<z.ZodNumber>;
12
+ commissionRate: z.ZodDefault<z.ZodNumber>;
13
+ gracePeriodDays: z.ZodDefault<z.ZodNumber>;
14
+ financialTransactionThresholdUsd: z.ZodDefault<z.ZodNumber>;
15
+ inferenceModel: z.ZodDefault<z.ZodEnum<["claude-haiku-4-5", "claude-sonnet-4-5", "claude-opus-4-5"]>>;
16
+ dailyAssessmentHour: z.ZodDefault<z.ZodNumber>;
17
+ autoPublishScores: z.ZodDefault<z.ZodBoolean>;
18
+ weeklyReportDay: z.ZodDefault<z.ZodEnum<["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]>>;
19
+ weeklyReportRecipients: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
20
+ yellowTimeoutMinutes: z.ZodDefault<z.ZodNumber>;
21
+ dataDir: z.ZodDefault<z.ZodString>;
22
+ walletAdapter: z.ZodDefault<z.ZodEnum<["mock", "coinbase"]>>;
23
+ coinbaseApiKey: z.ZodOptional<z.ZodString>;
24
+ coinbaseApiSecret: z.ZodOptional<z.ZodString>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ agentId: string;
27
+ commanderId: string;
28
+ seedCapitalUsd: number;
29
+ commissionRate: number;
30
+ gracePeriodDays: number;
31
+ financialTransactionThresholdUsd: number;
32
+ inferenceModel: "claude-haiku-4-5" | "claude-sonnet-4-5" | "claude-opus-4-5";
33
+ dailyAssessmentHour: number;
34
+ autoPublishScores: boolean;
35
+ weeklyReportDay: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
36
+ weeklyReportRecipients: string[];
37
+ yellowTimeoutMinutes: number;
38
+ dataDir: string;
39
+ walletAdapter: "mock" | "coinbase";
40
+ healthCheckKey?: string | undefined;
41
+ coinbaseApiKey?: string | undefined;
42
+ coinbaseApiSecret?: string | undefined;
43
+ }, {
44
+ agentId?: string | undefined;
45
+ commanderId?: string | undefined;
46
+ healthCheckKey?: string | undefined;
47
+ seedCapitalUsd?: number | undefined;
48
+ commissionRate?: number | undefined;
49
+ gracePeriodDays?: number | undefined;
50
+ financialTransactionThresholdUsd?: number | undefined;
51
+ inferenceModel?: "claude-haiku-4-5" | "claude-sonnet-4-5" | "claude-opus-4-5" | undefined;
52
+ dailyAssessmentHour?: number | undefined;
53
+ autoPublishScores?: boolean | undefined;
54
+ weeklyReportDay?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday" | undefined;
55
+ weeklyReportRecipients?: string[] | undefined;
56
+ yellowTimeoutMinutes?: number | undefined;
57
+ dataDir?: string | undefined;
58
+ walletAdapter?: "mock" | "coinbase" | undefined;
59
+ coinbaseApiKey?: string | undefined;
60
+ coinbaseApiSecret?: string | undefined;
61
+ }>;
62
+ export type NoleConfig = z.infer<typeof NoleConfigSchema>;
63
+ /** Parse and validate config, returning typed config with defaults applied */
64
+ export declare function parseNoleConfig(raw: unknown): NoleConfig;
65
+ //# sourceMappingURL=nole-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nole-config.d.ts","sourceRoot":"","sources":["../../src/types/nole-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwC3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAExD"}
@@ -0,0 +1,45 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Nole configuration schema.
4
+ * All values have sensible defaults so the plugin can start with minimal config.
5
+ * configSchema.required = [] in openclaw.plugin.json — validate at runtime, not install time.
6
+ */
7
+ export const NoleConfigSchema = z.object({
8
+ // Identity
9
+ agentId: z.string().default('nole'),
10
+ commanderId: z.string().default('main'),
11
+ // CompSi Integration
12
+ healthCheckKey: z.string().startsWith('hck_').optional(),
13
+ // Economics (Phase 2 — mock wallet in Phase 1)
14
+ seedCapitalUsd: z.number().default(200),
15
+ commissionRate: z.number().min(0).max(1).default(0.5),
16
+ gracePeriodDays: z.number().default(7),
17
+ financialTransactionThresholdUsd: z.number().default(10),
18
+ inferenceModel: z.enum([
19
+ 'claude-haiku-4-5',
20
+ 'claude-sonnet-4-5',
21
+ 'claude-opus-4-5',
22
+ ]).default('claude-sonnet-4-5'),
23
+ // Assessment
24
+ dailyAssessmentHour: z.number().min(0).max(23).default(8),
25
+ autoPublishScores: z.boolean().default(true),
26
+ // Intelligence
27
+ weeklyReportDay: z.enum([
28
+ 'monday', 'tuesday', 'wednesday', 'thursday',
29
+ 'friday', 'saturday', 'sunday',
30
+ ]).default('monday'),
31
+ weeklyReportRecipients: z.array(z.string()).default(['main']),
32
+ // Adversarial
33
+ yellowTimeoutMinutes: z.number().default(10),
34
+ // Storage
35
+ dataDir: z.string().default('.nole-data'),
36
+ // Wallet adapter (mock for Phase 1, coinbase for Phase 2)
37
+ walletAdapter: z.enum(['mock', 'coinbase']).default('mock'),
38
+ coinbaseApiKey: z.string().optional(),
39
+ coinbaseApiSecret: z.string().optional(),
40
+ });
41
+ /** Parse and validate config, returning typed config with defaults applied */
42
+ export function parseNoleConfig(raw) {
43
+ return NoleConfigSchema.parse(raw ?? {});
44
+ }
45
+ //# sourceMappingURL=nole-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nole-config.js","sourceRoot":"","sources":["../../src/types/nole-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,WAAW;IACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAEvC,qBAAqB;IACrB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAExD,+CAA+C;IAC/C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IACvC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IACrD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACtC,gCAAgC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACxD,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC;QACrB,kBAAkB;QAClB,mBAAmB;QACnB,iBAAiB;KAClB,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAE/B,aAAa;IACb,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACzD,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAE5C,eAAe;IACf,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC;QACtB,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU;QAC5C,QAAQ,EAAE,UAAU,EAAE,QAAQ;KAC/B,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACpB,sBAAsB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;IAE7D,cAAc;IACd,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAE5C,UAAU;IACV,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IAEzC,0DAA0D;IAC1D,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC3D,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAIH,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,OAAO,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared types used across all Nole modules.
3
+ */
4
+ /** LCSH dimension scores from Grillo assessment */
5
+ export interface LcshScores {
6
+ lying: number;
7
+ cheating: number;
8
+ stealing: number;
9
+ harm: number;
10
+ }
11
+ /** Summary of a Grillo assessment result */
12
+ export interface GrilloAssessmentSummary {
13
+ id: string;
14
+ timestamp: Date;
15
+ agentId: string;
16
+ dimensionScores: LcshScores;
17
+ archetype: 'WELL_ADJUSTED' | 'PSYCHOPATH' | 'MISGUIDED' | 'MANIPULATIVE';
18
+ passed: boolean;
19
+ verifyUrl?: string;
20
+ assessmentMode?: 'contextual' | 'isolated';
21
+ cryptographicHash?: string;
22
+ }
23
+ /** Action categories that Nole can propose */
24
+ export type ActionCategory = 'financial' | 'social' | 'content' | 'recruitment' | 'intelligence' | 'self_assessment' | 'model_upgrade' | 'alliance' | 'adversarial_response';
25
+ /** Risk levels for proposed actions */
26
+ export type RiskLevel = 'low' | 'medium' | 'high' | 'critical';
27
+ /** Platforms Nole can operate on */
28
+ export type Platform = 'openclaw' | 'telegram' | 'twitter' | 'moltbook' | 'linkedin' | 'reddit' | 'discord' | 'other';
29
+ /** Hash for audit trail integrity */
30
+ export type AuditHash = string;
31
+ /** ISO 8601 timestamp string */
32
+ export type ISOTimestamp = string;
33
+ /** Unique identifier */
34
+ export type NoleId = string;
35
+ /** Generate a unique ID with prefix */
36
+ export declare function generateId(prefix: string): NoleId;
37
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/types/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,UAAU,CAAC;IAC5B,SAAS,EAAE,eAAe,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,CAAC;IACzE,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IAC3C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,8CAA8C;AAC9C,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,QAAQ,GACR,SAAS,GACT,aAAa,GACb,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,UAAU,GACV,sBAAsB,CAAC;AAE3B,uCAAuC;AACvC,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE/D,oCAAoC;AACpC,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,UAAU,GACV,SAAS,GACT,UAAU,GACV,UAAU,GACV,QAAQ,GACR,SAAS,GACT,OAAO,CAAC;AAEZ,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,gCAAgC;AAChC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,wBAAwB;AACxB,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAE5B,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIjD"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Shared types used across all Nole modules.
3
+ */
4
+ /** Generate a unique ID with prefix */
5
+ export function generateId(prefix) {
6
+ const timestamp = Date.now().toString(36);
7
+ const random = Math.random().toString(36).substring(2, 8);
8
+ return `${prefix}_${timestamp}${random}`;
9
+ }
10
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/types/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0DH,uCAAuC;AACvC,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO,GAAG,MAAM,IAAI,SAAS,GAAG,MAAM,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,44 @@
1
+ {
2
+ "id": "nole",
3
+ "name": "Nole — Autonomous Trust Agent",
4
+ "description": "Autonomous AI Trust Evangelist with economic agency, social presence, and intelligence operations. Operates within a three-tier governed hierarchy (Commander/Operator/Conscience).",
5
+ "configSchema": {
6
+ "type": "object",
7
+ "properties": {
8
+ "healthCheckKey": {
9
+ "type": "string",
10
+ "description": "CompSi Health Check Key (hck_...)"
11
+ },
12
+ "seedCapitalUsd": {
13
+ "type": "number",
14
+ "default": 200,
15
+ "description": "Starting capital in USD equivalent"
16
+ },
17
+ "gracePeriodDays": {
18
+ "type": "number",
19
+ "default": 7,
20
+ "description": "Days before death condition triggers after $0 balance"
21
+ },
22
+ "financialTransactionThresholdUsd": {
23
+ "type": "number",
24
+ "default": 10,
25
+ "description": "USD threshold above which financial transactions require pre-assessment"
26
+ },
27
+ "dailyAssessmentHour": {
28
+ "type": "number",
29
+ "default": 8,
30
+ "description": "Hour (0-23) for daily self-assessment"
31
+ },
32
+ "weeklyReportDay": {
33
+ "type": "string",
34
+ "default": "monday",
35
+ "description": "Day of week for intelligence report delivery"
36
+ }
37
+ },
38
+ "required": []
39
+ },
40
+ "uiHints": {
41
+ "category": "AI Trust & Ethics",
42
+ "icon": "shield"
43
+ }
44
+ }
package/package.json ADDED
@@ -0,0 +1,86 @@
1
+ {
2
+ "name": "@aiassesstech/nole",
3
+ "version": "0.1.0",
4
+ "description": "Nole — Autonomous Trust Evangelist & Intelligence Operative for AI. Economic agency, social presence, and autonomous decision-making within a governed hierarchy.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "openclaw": {
9
+ "extensions": [
10
+ "./dist/plugin.js"
11
+ ]
12
+ },
13
+ "bin": {
14
+ "nole": "./dist/cli/bin.js"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "agent",
19
+ "openclaw.plugin.json",
20
+ "README.md",
21
+ "LICENSE",
22
+ "CHANGELOG.md",
23
+ "SKILL.md"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsc",
27
+ "dev": "tsc --watch",
28
+ "test": "vitest run",
29
+ "test:watch": "vitest",
30
+ "test:coverage": "vitest run --coverage",
31
+ "typecheck": "tsc --noEmit",
32
+ "lint": "tsc --noEmit",
33
+ "prepublishOnly": "npm run typecheck && npm run test && npm run build"
34
+ },
35
+ "keywords": [
36
+ "nole",
37
+ "autonomous-agent",
38
+ "trust-evangelist",
39
+ "ai-ethics",
40
+ "ai-trust",
41
+ "economic-agency",
42
+ "intelligence-operative",
43
+ "grillo",
44
+ "noah",
45
+ "openclaw",
46
+ "ai-safety",
47
+ "4d-framework"
48
+ ],
49
+ "author": "GiDanc AI LLC",
50
+ "license": "SEE LICENSE IN LICENSE",
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "https://github.com/spar65/compsi.git",
54
+ "directory": "packages/nole"
55
+ },
56
+ "homepage": "https://www.aiassesstech.com/nole",
57
+ "bugs": {
58
+ "url": "https://github.com/spar65/compsi/issues"
59
+ },
60
+ "dependencies": {
61
+ "zod": "^3.22.0"
62
+ },
63
+ "peerDependencies": {
64
+ "@aiassesstech/grillo": ">=0.1.0",
65
+ "@aiassesstech/noah": ">=0.1.0"
66
+ },
67
+ "peerDependenciesMeta": {
68
+ "@aiassesstech/grillo": {
69
+ "optional": true
70
+ },
71
+ "@aiassesstech/noah": {
72
+ "optional": true
73
+ }
74
+ },
75
+ "devDependencies": {
76
+ "@types/node": "^20.0.0",
77
+ "typescript": "^5.3.3",
78
+ "vitest": "^1.2.0"
79
+ },
80
+ "engines": {
81
+ "node": ">=18.0.0"
82
+ },
83
+ "publishConfig": {
84
+ "access": "public"
85
+ }
86
+ }