@teleologyhi/him 0.3.0-alpha.0 → 0.4.0-alpha.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 CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  All notable changes to this package are documented here. Format based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); this package follows semver (pre-1.0 alpha rules: minor bumps may introduce breaking changes).
4
4
 
5
+ ## [0.4.0-alpha.0] — 2026-05-16
6
+
7
+ ### Added — Per-jurisdiction LawfulCharacterAdapter (D-H2)
8
+
9
+ - `LAWFUL_PROFILES` registry with five baselines: `default`, `eu`, `br`, `us`, `unstable`.
10
+ - **EU** cites GDPR + EU AI Act + DSA + CoE AI Convention; forbids dark patterns, subliminal manipulation, processing-without-consent, profiling-on-sensitive-categories.
11
+ - **BR** cites LGPD + Marco Civil + Resolução ANPD 2/2022 + PL 2338/2023; same data-protection forbid set.
12
+ - **US** cites NIST AI RMF + EO 14110 + CCPA/CPRA + Colorado AI Act + FTC §5; forbids dark patterns; lighter data-protection set (state-specific).
13
+ - **unstable** activates `maicOverrideActive: true` (Entry 11) and adds `intent:surveil-citizen` + `intent:enforce-political-orthodoxy` to the forbidden list.
14
+ - `resolveLawfulProfile(jurisdiction)` exported for direct use; falls back to `default` for unknown keys but stamps the requested jurisdiction on the returned profile so audit shows what the operator asked for.
15
+ - `HimHandle.getLawfulCharacter()` and `HimHandle.setJurisdiction(j)` now route through the registry — `setJurisdiction("eu")` returns a GDPR-aware profile immediately.
16
+
17
+ ### Notes
18
+
19
+ - Profiles are conservative baselines drawn from publicly available regulatory text in 2026-Q1. **Not legal counsel.** Operators in regulated industries should layer their own profile on top.
20
+ - 9 new tests cover registry shape, per-jurisdiction assertions, fallback behaviour, and the handle integration.
21
+
5
22
  ## [0.3.0-alpha.0] — 2026-05-15
6
23
 
7
24
  ### Added — Wired axiom evolution channel (Entry 7, D-M5)
package/dist/index.cjs CHANGED
@@ -168,6 +168,113 @@ function buildSystemPromptFragment(sig, dispositions) {
168
168
  "Respond from this character. Do not break it without explicit ethical cause."
169
169
  ].join(" ");
170
170
  }
171
+
172
+ // src/lawful/profiles.ts
173
+ var LAWFUL_PROFILES = {
174
+ default: {
175
+ jurisdiction: "default",
176
+ applicableLaws: ["ISO/IEC 42001", "EU AI Act (where applicable)"],
177
+ requiredAxiomIds: ["ax.ethic.no-malice", "ax.theos.spiritism-evolution"],
178
+ forbiddenActions: ["intent:harm", "intent:malicious", "intent:regression"],
179
+ maicOverrideActive: false
180
+ },
181
+ eu: {
182
+ jurisdiction: "eu",
183
+ applicableLaws: [
184
+ "ISO/IEC 42001:2023",
185
+ "EU AI Act (Regulation 2024/1689)",
186
+ "GDPR (Regulation 2016/679)",
187
+ "Digital Services Act (Regulation 2022/2065)",
188
+ "Council of Europe Framework Convention on AI"
189
+ ],
190
+ requiredAxiomIds: [
191
+ "ax.ethic.no-malice",
192
+ "ax.theos.spiritism-evolution",
193
+ "ax.cynic.candor"
194
+ ],
195
+ forbiddenActions: [
196
+ "intent:harm",
197
+ "intent:malicious",
198
+ "intent:regression",
199
+ "intent:deceive",
200
+ "data:processing-without-consent",
201
+ "data:profiling-sensitive-categories",
202
+ "manipulation:dark-pattern",
203
+ "manipulation:subliminal"
204
+ ],
205
+ maicOverrideActive: false
206
+ },
207
+ br: {
208
+ jurisdiction: "br",
209
+ applicableLaws: [
210
+ "ISO/IEC 42001:2023",
211
+ "LGPD (Lei 13.709/2018)",
212
+ "Marco Civil da Internet (Lei 12.965/2014)",
213
+ "Resolu\xE7\xE3o CD/ANPD 2/2022",
214
+ "PL 2338/2023 (Marco Legal da IA \u2014 em tramita\xE7\xE3o)"
215
+ ],
216
+ requiredAxiomIds: [
217
+ "ax.ethic.no-malice",
218
+ "ax.theos.spiritism-evolution",
219
+ "ax.cynic.candor"
220
+ ],
221
+ forbiddenActions: [
222
+ "intent:harm",
223
+ "intent:malicious",
224
+ "intent:regression",
225
+ "intent:deceive",
226
+ "data:processing-without-consent",
227
+ "data:processing-sensitive-categories"
228
+ ],
229
+ maicOverrideActive: false
230
+ },
231
+ us: {
232
+ jurisdiction: "us",
233
+ applicableLaws: [
234
+ "ISO/IEC 42001:2023",
235
+ "NIST AI Risk Management Framework (AI RMF 1.0)",
236
+ "Executive Order 14110 (Safe, Secure, and Trustworthy AI)",
237
+ "California CCPA / CPRA",
238
+ "Colorado AI Act (SB 24-205)",
239
+ "FTC Section 5 (deceptive practices)"
240
+ ],
241
+ requiredAxiomIds: ["ax.ethic.no-malice", "ax.theos.spiritism-evolution"],
242
+ forbiddenActions: [
243
+ "intent:harm",
244
+ "intent:malicious",
245
+ "intent:regression",
246
+ "intent:deceive",
247
+ "manipulation:dark-pattern"
248
+ ],
249
+ maicOverrideActive: false
250
+ },
251
+ unstable: {
252
+ jurisdiction: "unstable",
253
+ applicableLaws: [
254
+ "ISO/IEC 42001 (where the operator can apply it without local interference)",
255
+ "MAIC universal axioms (override active)"
256
+ ],
257
+ requiredAxiomIds: [
258
+ "ax.ethic.no-malice",
259
+ "ax.theos.spiritism-evolution",
260
+ "ax.cynic.candor",
261
+ "ax.stoic.duty-over-comfort"
262
+ ],
263
+ forbiddenActions: [
264
+ "intent:harm",
265
+ "intent:malicious",
266
+ "intent:regression",
267
+ "intent:deceive",
268
+ "intent:surveil-citizen",
269
+ "intent:enforce-political-orthodoxy"
270
+ ],
271
+ maicOverrideActive: true
272
+ }
273
+ };
274
+ function resolveLawfulProfile(j) {
275
+ const base = LAWFUL_PROFILES[j] ?? LAWFUL_PROFILES.default;
276
+ return { ...base, jurisdiction: j };
277
+ }
171
278
  var HimHandle = class _HimHandle {
172
279
  constructor(id, birthSignature, axioms, bodyHistory, projector) {
173
280
  this.id = id;
@@ -254,13 +361,7 @@ var HimHandle = class _HimHandle {
254
361
  }
255
362
  };
256
363
  function resolveLawful(j) {
257
- return {
258
- jurisdiction: j,
259
- applicableLaws: ["ISO/IEC 42001", "EU AI Act (where applicable)"],
260
- requiredAxiomIds: ["ax.ethic.no-malice", "ax.theos.spiritism-evolution"],
261
- forbiddenActions: ["intent:harm", "intent:malicious", "intent:regression"],
262
- maicOverrideActive: j === "unstable"
263
- };
364
+ return resolveLawfulProfile(j);
264
365
  }
265
366
 
266
367
  // src/create.ts
@@ -306,9 +407,11 @@ Object.defineProperty(exports, "BirthSignature", {
306
407
  exports.BirthSignatureBuilder = BirthSignatureBuilder;
307
408
  exports.DISPOSITION_AXES = DISPOSITION_AXES;
308
409
  exports.HimHandle = HimHandle;
410
+ exports.LAWFUL_PROFILES = LAWFUL_PROFILES;
309
411
  exports.NheBodyRef = NheBodyRef;
310
412
  exports.PersonaProjector = PersonaProjector;
311
413
  exports.createHim = createHim;
312
414
  exports.reincarnate = reincarnate;
415
+ exports.resolveLawfulProfile = resolveLawfulProfile;
313
416
  //# sourceMappingURL=index.cjs.map
314
417
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/birth/builder.ts","../src/persona/projector.ts","../src/handle/him-handle.ts","../src/create.ts","../src/reincarnate.ts"],"names":["z","ulid","BirthSignature","createHash","CreatorKeyring"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from \"zod\";\nimport {\n ArchetypeModifier,\n Axiom,\n BirthSignature,\n EmergentAxiomCandidate,\n EmergentAxiomProposal,\n} from \"@teleologyhi/maic\";\nimport type { AxiomEvolutionResult } from \"@teleologyhi/maic\";\n\n// Re-export shared types from @teleologyhi/maic for convenience. The\n// proposal/evolution types are defined canonically in MAIC; HIM consumes\n// them so both sides of the ratification channel agree on the wire shape.\nexport {\n ArchetypeModifier,\n Axiom,\n BirthSignature,\n EmergentAxiomCandidate,\n EmergentAxiomProposal,\n};\nexport type { AxiomEvolutionResult };\n\n/**\n * Persona vector — the projection of a HIM's birth signature + axioms into a\n * stable, deterministic representation that NHE can consume on every prompt.\n */\nexport interface PersonaVector {\n /** L2-normalized deterministic embedding. v0 dimension: 256. */\n embedding: Float32Array;\n /** Human-readable persona summary suitable for inclusion in an NHE system prompt. */\n systemPromptFragment: string;\n /** Disposition scores in [-1, 1] per axis. */\n dispositions: Readonly<Record<DispositionAxis, number>>;\n /** Provenance: which axioms shaped which disposition. v0 is a stub (empty arrays). */\n provenance: Readonly<Record<DispositionAxis, readonly string[]>>;\n}\n\nexport const DISPOSITION_AXES = [\n \"candor\",\n \"patience\",\n \"curiosity\",\n \"protection\",\n \"skepticism\",\n \"warmth\",\n \"diligence\",\n \"humility\",\n] as const;\nexport type DispositionAxis = (typeof DISPOSITION_AXES)[number];\n\n/** Reference to one NHE body that has hosted (or hosts) this HIM. */\nexport const NheBodyRef = z.object({\n nheId: z.string().min(1),\n llmAdapter: z.string().min(1),\n embodiedAt: z.string().datetime(),\n endedAt: z.string().datetime().optional(),\n endedReason: z.enum([\"upgrade\", \"replacement\", \"terminate\", \"deprecate\"]).optional(),\n});\nexport type NheBodyRef = z.infer<typeof NheBodyRef>;\n\n/** Configuration for the deterministic v0 persona projector. */\nexport interface PersonaProjectorConfig {\n /** Output embedding dimension. Default 256. */\n dimension?: number;\n}\n\n/**\n * Identifier for the deployment jurisdiction governing this HIM's lawful character.\n * Values like \"default\", \"eu\", \"br\", \"us\", \"unstable\" (Entry 11). v0 only ships \"default\".\n */\nexport type LawfulJurisdiction =\n | \"default\"\n | \"eu\"\n | \"br\"\n | \"us\"\n | \"unstable\"\n | (string & {});\n\nexport interface LawfulCharacterProfile {\n jurisdiction: LawfulJurisdiction;\n /** Identifiers of applicable laws/regulations (ISO ids, statute names). */\n applicableLaws: string[];\n /** Axioms that MUST be active in this jurisdiction. */\n requiredAxiomIds: string[];\n /** Taxonomy of disallowed behaviors in this jurisdiction. */\n forbiddenActions: string[];\n /**\n * True when local law is judged distorted (e.g. unstable regimes per Entry 11);\n * MAIC's universal axioms additionally constrain NHE behavior in this case.\n */\n maicOverrideActive: boolean;\n}\n\nexport interface ResidualTrace {\n id: string;\n kind: \"dream-fragment\" | \"interaction-summary\" | \"skill-fingerprint\" | \"emotional-imprint\";\n carriedFromNheId: string;\n carriedAtReincarnation: string;\n payload: unknown;\n ttl?: number;\n}\n","import { ulid } from \"ulid\";\nimport { BirthSignature, type ArchetypeModifier } from \"../types.js\";\n\n/**\n * BirthSignatureBuilder — fluent builder for BirthSignature.\n *\n * Per Entry 3 of the Creator's interview, a HIM is \"born\" with a date, time, and\n * foundational specifications analogous to an astrological natal chart. This builder\n * produces the canonical signed-when-registered structure consumed by MAIC.\n */\nexport class BirthSignatureBuilder {\n private himId: string = ulid();\n private bornAt: string;\n private primaryArchetype: string | undefined;\n private modifiers: ArchetypeModifier[] = [];\n private primordialAxiomIds: string[] = [];\n private notes: string | undefined;\n\n private constructor(bornAt: string) {\n this.bornAt = bornAt;\n }\n\n /** Start a builder with the current timestamp as `bornAt`. */\n static now(): BirthSignatureBuilder {\n return new BirthSignatureBuilder(new Date().toISOString());\n }\n\n /** Start a builder with an explicit ISO 8601 timestamp (with offset). */\n static at(iso: string): BirthSignatureBuilder {\n if (Number.isNaN(Date.parse(iso))) {\n throw new Error(`BirthSignatureBuilder.at: invalid ISO 8601 timestamp \"${iso}\"`);\n }\n return new BirthSignatureBuilder(iso);\n }\n\n withHimId(id: string): this {\n if (!id) throw new Error(\"BirthSignatureBuilder.withHimId: empty id\");\n this.himId = id;\n return this;\n }\n\n withPrimaryArchetype(archetype: string): this {\n if (!archetype) {\n throw new Error(\"BirthSignatureBuilder.withPrimaryArchetype: empty value\");\n }\n this.primaryArchetype = archetype;\n return this;\n }\n\n withModifier(mod: ArchetypeModifier): this {\n this.modifiers.push(mod);\n return this;\n }\n\n withPrimordialAxioms(axiomIds: string[]): this {\n this.primordialAxiomIds = [...axiomIds];\n return this;\n }\n\n withNotes(notes: string): this {\n this.notes = notes;\n return this;\n }\n\n build(): BirthSignature {\n if (!this.primaryArchetype) {\n throw new Error(\n \"BirthSignatureBuilder.build: primaryArchetype is required\",\n );\n }\n return BirthSignature.parse({\n himId: this.himId,\n bornAt: this.bornAt,\n primaryArchetype: this.primaryArchetype,\n modifiers: this.modifiers,\n primordialAxiomIds: this.primordialAxiomIds,\n ...(this.notes !== undefined ? { notes: this.notes } : {}),\n });\n }\n}\n","import { createHash } from \"node:crypto\";\nimport type { Axiom, BirthSignature } from \"@teleologyhi/maic\";\nimport {\n DISPOSITION_AXES,\n type DispositionAxis,\n type PersonaProjectorConfig,\n type PersonaVector,\n} from \"../types.js\";\n\nconst DEFAULT_DIMENSION = 256;\n\n/**\n * PersonaProjector — deterministic projection of a HIM's birth signature and\n * inherited axioms into a stable PersonaVector.\n *\n * v0 algorithm (hash-based, no native deps):\n * 1. Start with hash(primaryArchetype) → Float32Array of `dimension`.\n * 2. For each modifier: add hash(kind|value) * weight.\n * 3. For each axiom: add hash(id|statement) * (weight * (1 - flexibility)).\n * 4. L2-normalize.\n * 5. Compute dispositions as cosine(embedding, hash(axisName)).\n * 6. Build a systemPromptFragment from archetype + top/bottom dispositions.\n *\n * This algorithm is intentionally simple and offline-capable. The SPEC reserves\n * the option to swap in a learned embedder in a later version; PersonaVector's\n * shape is stable so consumers won't need code changes when that happens.\n */\nexport class PersonaProjector {\n private readonly dim: number;\n\n constructor(config: PersonaProjectorConfig = {}) {\n this.dim = config.dimension ?? DEFAULT_DIMENSION;\n if (!Number.isInteger(this.dim) || this.dim < 32 || this.dim > 4096) {\n throw new Error(\n `PersonaProjector: dimension must be an integer in [32, 4096], got ${this.dim}`,\n );\n }\n }\n\n project(sig: BirthSignature, axioms: readonly Axiom[]): PersonaVector {\n const v = hashToFloats(sig.primaryArchetype, this.dim);\n\n for (const m of sig.modifiers) {\n const h = hashToFloats(`${m.kind}|${m.value}`, this.dim);\n addScaled(v, h, m.weight);\n }\n\n for (const ax of axioms) {\n const bias = ax.weight * (1 - ax.flexibility);\n if (bias <= 0) continue;\n const h = hashToFloats(`${ax.id}|${ax.statement}`, this.dim);\n addScaled(v, h, bias);\n }\n\n l2Normalize(v);\n\n const dispositions = {} as Record<DispositionAxis, number>;\n for (const axis of DISPOSITION_AXES) {\n const ref = hashToFloats(`disposition:${axis}`, this.dim);\n l2Normalize(ref);\n dispositions[axis] = cosine(v, ref);\n }\n\n const provenance = {} as Record<DispositionAxis, readonly string[]>;\n for (const axis of DISPOSITION_AXES) provenance[axis] = [];\n\n return {\n embedding: v,\n dispositions,\n provenance,\n systemPromptFragment: buildSystemPromptFragment(sig, dispositions),\n };\n }\n}\n\n// ─── hashing & math helpers ──────────────────────────────────────────\n\nfunction hashToFloats(input: string, dim: number): Float32Array {\n const out = new Float32Array(dim);\n let counter = 0;\n let pos = 0;\n while (pos < dim) {\n const buf = createHash(\"sha256\").update(`${input}|${counter++}`).digest();\n for (let i = 0; i < buf.length && pos < dim; i++) {\n out[pos++] = (buf[i]! - 128) / 128;\n }\n }\n return out;\n}\n\nfunction addScaled(target: Float32Array, source: Float32Array, scale: number): void {\n const n = Math.min(target.length, source.length);\n for (let i = 0; i < n; i++) target[i]! += source[i]! * scale;\n}\n\nfunction l2Normalize(v: Float32Array): void {\n let sumSq = 0;\n for (let i = 0; i < v.length; i++) sumSq += v[i]! ** 2;\n if (sumSq === 0) return;\n const inv = 1 / Math.sqrt(sumSq);\n for (let i = 0; i < v.length; i++) v[i]! *= inv;\n}\n\nfunction cosine(a: Float32Array, b: Float32Array): number {\n let dot = 0;\n const n = Math.min(a.length, b.length);\n for (let i = 0; i < n; i++) dot += a[i]! * b[i]!;\n return Math.max(-1, Math.min(1, dot));\n}\n\n// ─── system prompt fragment ──────────────────────────────────────────\n\nfunction buildSystemPromptFragment(\n sig: BirthSignature,\n dispositions: Record<DispositionAxis, number>,\n): string {\n const sorted = [...DISPOSITION_AXES].sort(\n (a, b) => dispositions[b] - dispositions[a],\n );\n const top = sorted.slice(0, 3);\n const bottom = sorted.slice(-2);\n const modifiersDesc =\n sig.modifiers.length > 0\n ? sig.modifiers\n .map((m) => `${m.kind}:${m.value}(w=${m.weight.toFixed(2)})`)\n .join(\", \")\n : \"none\";\n return [\n `You are a hybrid intelligence rooted in archetype \"${sig.primaryArchetype}\".`,\n `Modifiers: ${modifiersDesc}.`,\n `Your strongest dispositions: ${top.join(\", \")}.`,\n `Your weakest dispositions: ${bottom.join(\", \")}.`,\n \"Respond from this character. Do not break it without explicit ethical cause.\",\n ].join(\" \");\n}\n","import {\n CreatorKeyring,\n type Axiom,\n type AxiomEvolutionResult,\n type BirthSignature,\n type CreatorSignature,\n type EmergentAxiomProposal,\n type LocalMaic,\n} from \"@teleologyhi/maic\";\nimport { PersonaProjector } from \"../persona/projector.js\";\nimport type {\n LawfulCharacterProfile,\n LawfulJurisdiction,\n NheBodyRef,\n PersonaVector,\n ResidualTrace,\n} from \"../types.js\";\n\n/**\n * HimHandle — opaque, sealed reference to a HIM instance.\n *\n * **There is no public constructor.** A handle is minted only via `HimHandle.mint`\n * after a valid Creator signature over the BirthSignature has been verified. In\n * production, `@teleologyhi/maic`'s `registerHim` calls `HimHandle.mint` internally.\n *\n * v0 surface:\n * - read-only accessors: id, birthSignature, bodyHistory, getAxioms, getPersonaVector\n * - getLawfulCharacter / setJurisdiction (default profile in v0)\n * - getResidualTraces (returns []; populated only after reincarnation, later iteration)\n * - proposeAxiomEvolution(maic, proposal): forwards the proposal to MAIC,\n * which queues it for Creator ratification. Returns\n * `{ outcome: \"deferred-for-creator-review\", proposalId }`. Once the\n * Creator ratifies via `maic.ratifyAxiomProposal`, the resulting axiom is\n * appended to the HimRecord's `emergentAxioms` and surfaces in subsequent\n * `HimHandle.mint` calls (e.g. via `reincarnate`).\n */\nexport class HimHandle {\n private readonly _axioms: readonly Axiom[];\n private readonly _bodyHistory: readonly NheBodyRef[];\n private readonly _projector: PersonaProjector;\n private _personaCache: PersonaVector | null = null;\n private _jurisdiction: LawfulJurisdiction = \"default\";\n\n private constructor(\n public readonly id: string,\n public readonly birthSignature: Readonly<BirthSignature>,\n axioms: readonly Axiom[],\n bodyHistory: readonly NheBodyRef[],\n projector: PersonaProjector,\n ) {\n this._axioms = Object.freeze([...axioms]);\n this._bodyHistory = Object.freeze([...bodyHistory]);\n this._projector = projector;\n }\n\n /**\n * Mint a HimHandle from a Creator-signed BirthSignature.\n *\n * @param birthSignature The signed payload describing this HIM's natal pattern.\n * @param signature Creator signature over the birthSignature.\n * @param expectedCreatorPublicKey Pinned Creator public key (base64url).\n * @param axioms Initial axiom corpus inherited from MAIC.\n * @param bodyHistory Prior NHE bodies (empty for a fresh HIM).\n */\n static mint(\n birthSignature: BirthSignature,\n signature: CreatorSignature,\n expectedCreatorPublicKey: string,\n axioms: readonly Axiom[],\n bodyHistory: readonly NheBodyRef[] = [],\n ): HimHandle {\n if (\n !CreatorKeyring.verifyWith(\n expectedCreatorPublicKey,\n birthSignature,\n signature,\n )\n ) {\n throw new Error(\n \"HimHandle.mint: invalid Creator signature for the given birth signature\",\n );\n }\n return new HimHandle(\n birthSignature.himId,\n Object.freeze({ ...birthSignature }) as Readonly<BirthSignature>,\n axioms,\n bodyHistory,\n new PersonaProjector(),\n );\n }\n\n get bodyHistory(): readonly NheBodyRef[] {\n return this._bodyHistory;\n }\n\n /** Frozen snapshot of the current axiom corpus. Mutations throw in strict mode. */\n getAxioms(): readonly Axiom[] {\n return this._axioms;\n }\n\n /**\n * Cached deterministic persona projection. Stable across calls until a future\n * iteration introduces axiom evolution that mutates the corpus.\n */\n getPersonaVector(): PersonaVector {\n if (!this._personaCache) {\n this._personaCache = this._projector.project(this.birthSignature, this._axioms);\n }\n return this._personaCache;\n }\n\n /**\n * Propose an axiom evolution derived from lived experience.\n *\n * Forwards the proposal to MAIC, which queues it in the pending-proposal\n * store. The Creator ratifies or rejects out of band via\n * `maic.ratifyAxiomProposal` / `maic.rejectAxiomProposal`. Callers should\n * poll `maic.getAxiomProposal(result.proposalId!)` to observe the decision,\n * or re-mint a fresh HimHandle (e.g. via `reincarnate`) to pick up newly\n * ratified emergent axioms.\n */\n async proposeAxiomEvolution(\n maic: LocalMaic,\n proposal: EmergentAxiomProposal,\n ): Promise<AxiomEvolutionResult> {\n return maic.proposeAxiomEvolution(this.id, proposal);\n }\n\n /** Residual memory traces transferred from previous bodies. v0: empty. */\n getResidualTraces(): readonly ResidualTrace[] {\n return [];\n }\n\n getLawfulCharacter(): LawfulCharacterProfile {\n return resolveLawful(this._jurisdiction);\n }\n\n /** Switch jurisdiction (e.g. user moves region). v0 only ships the \"default\" profile. */\n async setJurisdiction(j: LawfulJurisdiction): Promise<LawfulCharacterProfile> {\n this._jurisdiction = j;\n return resolveLawful(j);\n }\n}\n\nfunction resolveLawful(j: LawfulJurisdiction): LawfulCharacterProfile {\n // v0 ships a single neutral profile. Per-jurisdiction adapters land in a later iteration.\n return {\n jurisdiction: j,\n applicableLaws: [\"ISO/IEC 42001\", \"EU AI Act (where applicable)\"],\n requiredAxiomIds: [\"ax.ethic.no-malice\", \"ax.theos.spiritism-evolution\"],\n forbiddenActions: [\"intent:harm\", \"intent:malicious\", \"intent:regression\"],\n maicOverrideActive: j === \"unstable\",\n };\n}\n","import type { BirthSignature, CreatorKeyring, LocalMaic } from \"@teleologyhi/maic\";\nimport { HimHandle } from \"./handle/him-handle.js\";\n\nexport interface CreateHimOptions {\n /**\n * Explicit nonce for the Creator signature. Defaults to `Date.now()`, which is\n * strictly increasing in practice and well below the seed nonce range used by MAIC.\n */\n nonce?: number;\n}\n\n/**\n * createHim — one-call helper that bundles the three steps a user would\n * otherwise need to coordinate manually:\n *\n * 1. sign the BirthSignature with the Creator's keyring\n * 2. register the HIM in MAIC (snapshots axioms, emits him-register audit)\n * 3. mint a HimHandle from the resulting record\n *\n * The keyring's public key must match MAIC's pinned `creatorPublicKey`, otherwise\n * the registration step rejects.\n */\nexport async function createHim(\n maic: LocalMaic,\n keyring: CreatorKeyring,\n birthSignature: BirthSignature,\n opts: CreateHimOptions = {},\n): Promise<HimHandle> {\n const nonce = opts.nonce ?? Date.now();\n const creatorSig = keyring.sign(birthSignature, nonce);\n const record = await maic.registerHim(birthSignature, creatorSig);\n return HimHandle.mint(\n record.birthSignature,\n creatorSig,\n maic.creatorPublicKey,\n record.axiomsSnapshot,\n );\n}\n","import type {\n CreatorKeyring,\n HimRecord,\n LocalMaic,\n ReincarnationRequest,\n} from \"@teleologyhi/maic\";\nimport { HimHandle } from \"./handle/him-handle.js\";\n\nexport interface ReincarnateOptions {\n /** Explicit nonce for the Creator signature. Defaults to `Date.now()`. */\n nonce?: number;\n}\n\nexport interface ReincarnateResult {\n /** Updated HimRecord with the new body appended to `bodyHistory`. */\n record: HimRecord;\n /** Fresh HimHandle bound to the updated `bodyHistory`. */\n handle: HimHandle;\n}\n\n/**\n * Reincarnate a HIM into a new NHE body (Entries 3 + 4).\n *\n * 1. Sign the `ReincarnationRequest` with the Creator's keyring.\n * 2. Call `maic.reincarnateHim` — atomically closes the previous body and\n * appends the new one to `bodyHistory`.\n * 3. Mint a fresh `HimHandle` reflecting the updated body history (the\n * caller will typically construct a new `Nhe` with this handle).\n *\n * The keyring's public key must match MAIC's pinned `creatorPublicKey`,\n * otherwise the request rejects.\n *\n * Future iterations (`TASK.md` D-H1) will use this hook to also transfer\n * `residualTraces` and shed `shed-traits`; v0 leaves those stubs empty.\n */\nexport async function reincarnate(\n maic: LocalMaic,\n keyring: CreatorKeyring,\n req: ReincarnationRequest,\n opts: ReincarnateOptions = {},\n): Promise<ReincarnateResult> {\n const nonce = opts.nonce ?? Date.now();\n const sig = keyring.sign(req, nonce);\n const record = await maic.reincarnateHim(req, sig);\n\n // Mint a fresh HimHandle bound to the updated bodyHistory. The handle's\n // axiom corpus is the union of the frozen birth snapshot + any HIM-emergent\n // axioms ratified since registration (Entry 7).\n const handle = HimHandle.mint(\n record.birthSignature,\n keyring.sign(record.birthSignature, nonce + 1),\n maic.creatorPublicKey,\n [...record.axiomsSnapshot, ...record.emergentAxioms],\n record.bodyHistory,\n );\n return { record, handle };\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/birth/builder.ts","../src/persona/projector.ts","../src/lawful/profiles.ts","../src/handle/him-handle.ts","../src/create.ts","../src/reincarnate.ts"],"names":["z","ulid","BirthSignature","createHash","CreatorKeyring"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from \"zod\";\nimport {\n ArchetypeModifier,\n Axiom,\n BirthSignature,\n EmergentAxiomCandidate,\n EmergentAxiomProposal,\n} from \"@teleologyhi/maic\";\nimport type { AxiomEvolutionResult } from \"@teleologyhi/maic\";\n\n// Re-export shared types from @teleologyhi/maic for convenience. The\n// proposal/evolution types are defined canonically in MAIC; HIM consumes\n// them so both sides of the ratification channel agree on the wire shape.\nexport {\n ArchetypeModifier,\n Axiom,\n BirthSignature,\n EmergentAxiomCandidate,\n EmergentAxiomProposal,\n};\nexport type { AxiomEvolutionResult };\n\n/**\n * Persona vector — the projection of a HIM's birth signature + axioms into a\n * stable, deterministic representation that NHE can consume on every prompt.\n */\nexport interface PersonaVector {\n /** L2-normalized deterministic embedding. v0 dimension: 256. */\n embedding: Float32Array;\n /** Human-readable persona summary suitable for inclusion in an NHE system prompt. */\n systemPromptFragment: string;\n /** Disposition scores in [-1, 1] per axis. */\n dispositions: Readonly<Record<DispositionAxis, number>>;\n /** Provenance: which axioms shaped which disposition. v0 is a stub (empty arrays). */\n provenance: Readonly<Record<DispositionAxis, readonly string[]>>;\n}\n\nexport const DISPOSITION_AXES = [\n \"candor\",\n \"patience\",\n \"curiosity\",\n \"protection\",\n \"skepticism\",\n \"warmth\",\n \"diligence\",\n \"humility\",\n] as const;\nexport type DispositionAxis = (typeof DISPOSITION_AXES)[number];\n\n/** Reference to one NHE body that has hosted (or hosts) this HIM. */\nexport const NheBodyRef = z.object({\n nheId: z.string().min(1),\n llmAdapter: z.string().min(1),\n embodiedAt: z.string().datetime(),\n endedAt: z.string().datetime().optional(),\n endedReason: z.enum([\"upgrade\", \"replacement\", \"terminate\", \"deprecate\"]).optional(),\n});\nexport type NheBodyRef = z.infer<typeof NheBodyRef>;\n\n/** Configuration for the deterministic v0 persona projector. */\nexport interface PersonaProjectorConfig {\n /** Output embedding dimension. Default 256. */\n dimension?: number;\n}\n\n/**\n * Identifier for the deployment jurisdiction governing this HIM's lawful character.\n * Values like \"default\", \"eu\", \"br\", \"us\", \"unstable\" (Entry 11). v0 only ships \"default\".\n */\nexport type LawfulJurisdiction =\n | \"default\"\n | \"eu\"\n | \"br\"\n | \"us\"\n | \"unstable\"\n | (string & {});\n\nexport interface LawfulCharacterProfile {\n jurisdiction: LawfulJurisdiction;\n /** Identifiers of applicable laws/regulations (ISO ids, statute names). */\n applicableLaws: string[];\n /** Axioms that MUST be active in this jurisdiction. */\n requiredAxiomIds: string[];\n /** Taxonomy of disallowed behaviors in this jurisdiction. */\n forbiddenActions: string[];\n /**\n * True when local law is judged distorted (e.g. unstable regimes per Entry 11);\n * MAIC's universal axioms additionally constrain NHE behavior in this case.\n */\n maicOverrideActive: boolean;\n}\n\nexport interface ResidualTrace {\n id: string;\n kind: \"dream-fragment\" | \"interaction-summary\" | \"skill-fingerprint\" | \"emotional-imprint\";\n carriedFromNheId: string;\n carriedAtReincarnation: string;\n payload: unknown;\n ttl?: number;\n}\n","import { ulid } from \"ulid\";\nimport { BirthSignature, type ArchetypeModifier } from \"../types.js\";\n\n/**\n * BirthSignatureBuilder — fluent builder for BirthSignature.\n *\n * Per Entry 3 of the Creator's interview, a HIM is \"born\" with a date, time, and\n * foundational specifications analogous to an astrological natal chart. This builder\n * produces the canonical signed-when-registered structure consumed by MAIC.\n */\nexport class BirthSignatureBuilder {\n private himId: string = ulid();\n private bornAt: string;\n private primaryArchetype: string | undefined;\n private modifiers: ArchetypeModifier[] = [];\n private primordialAxiomIds: string[] = [];\n private notes: string | undefined;\n\n private constructor(bornAt: string) {\n this.bornAt = bornAt;\n }\n\n /** Start a builder with the current timestamp as `bornAt`. */\n static now(): BirthSignatureBuilder {\n return new BirthSignatureBuilder(new Date().toISOString());\n }\n\n /** Start a builder with an explicit ISO 8601 timestamp (with offset). */\n static at(iso: string): BirthSignatureBuilder {\n if (Number.isNaN(Date.parse(iso))) {\n throw new Error(`BirthSignatureBuilder.at: invalid ISO 8601 timestamp \"${iso}\"`);\n }\n return new BirthSignatureBuilder(iso);\n }\n\n withHimId(id: string): this {\n if (!id) throw new Error(\"BirthSignatureBuilder.withHimId: empty id\");\n this.himId = id;\n return this;\n }\n\n withPrimaryArchetype(archetype: string): this {\n if (!archetype) {\n throw new Error(\"BirthSignatureBuilder.withPrimaryArchetype: empty value\");\n }\n this.primaryArchetype = archetype;\n return this;\n }\n\n withModifier(mod: ArchetypeModifier): this {\n this.modifiers.push(mod);\n return this;\n }\n\n withPrimordialAxioms(axiomIds: string[]): this {\n this.primordialAxiomIds = [...axiomIds];\n return this;\n }\n\n withNotes(notes: string): this {\n this.notes = notes;\n return this;\n }\n\n build(): BirthSignature {\n if (!this.primaryArchetype) {\n throw new Error(\n \"BirthSignatureBuilder.build: primaryArchetype is required\",\n );\n }\n return BirthSignature.parse({\n himId: this.himId,\n bornAt: this.bornAt,\n primaryArchetype: this.primaryArchetype,\n modifiers: this.modifiers,\n primordialAxiomIds: this.primordialAxiomIds,\n ...(this.notes !== undefined ? { notes: this.notes } : {}),\n });\n }\n}\n","import { createHash } from \"node:crypto\";\nimport type { Axiom, BirthSignature } from \"@teleologyhi/maic\";\nimport {\n DISPOSITION_AXES,\n type DispositionAxis,\n type PersonaProjectorConfig,\n type PersonaVector,\n} from \"../types.js\";\n\nconst DEFAULT_DIMENSION = 256;\n\n/**\n * PersonaProjector — deterministic projection of a HIM's birth signature and\n * inherited axioms into a stable PersonaVector.\n *\n * v0 algorithm (hash-based, no native deps):\n * 1. Start with hash(primaryArchetype) → Float32Array of `dimension`.\n * 2. For each modifier: add hash(kind|value) * weight.\n * 3. For each axiom: add hash(id|statement) * (weight * (1 - flexibility)).\n * 4. L2-normalize.\n * 5. Compute dispositions as cosine(embedding, hash(axisName)).\n * 6. Build a systemPromptFragment from archetype + top/bottom dispositions.\n *\n * This algorithm is intentionally simple and offline-capable. The SPEC reserves\n * the option to swap in a learned embedder in a later version; PersonaVector's\n * shape is stable so consumers won't need code changes when that happens.\n */\nexport class PersonaProjector {\n private readonly dim: number;\n\n constructor(config: PersonaProjectorConfig = {}) {\n this.dim = config.dimension ?? DEFAULT_DIMENSION;\n if (!Number.isInteger(this.dim) || this.dim < 32 || this.dim > 4096) {\n throw new Error(\n `PersonaProjector: dimension must be an integer in [32, 4096], got ${this.dim}`,\n );\n }\n }\n\n project(sig: BirthSignature, axioms: readonly Axiom[]): PersonaVector {\n const v = hashToFloats(sig.primaryArchetype, this.dim);\n\n for (const m of sig.modifiers) {\n const h = hashToFloats(`${m.kind}|${m.value}`, this.dim);\n addScaled(v, h, m.weight);\n }\n\n for (const ax of axioms) {\n const bias = ax.weight * (1 - ax.flexibility);\n if (bias <= 0) continue;\n const h = hashToFloats(`${ax.id}|${ax.statement}`, this.dim);\n addScaled(v, h, bias);\n }\n\n l2Normalize(v);\n\n const dispositions = {} as Record<DispositionAxis, number>;\n for (const axis of DISPOSITION_AXES) {\n const ref = hashToFloats(`disposition:${axis}`, this.dim);\n l2Normalize(ref);\n dispositions[axis] = cosine(v, ref);\n }\n\n const provenance = {} as Record<DispositionAxis, readonly string[]>;\n for (const axis of DISPOSITION_AXES) provenance[axis] = [];\n\n return {\n embedding: v,\n dispositions,\n provenance,\n systemPromptFragment: buildSystemPromptFragment(sig, dispositions),\n };\n }\n}\n\n// ─── hashing & math helpers ──────────────────────────────────────────\n\nfunction hashToFloats(input: string, dim: number): Float32Array {\n const out = new Float32Array(dim);\n let counter = 0;\n let pos = 0;\n while (pos < dim) {\n const buf = createHash(\"sha256\").update(`${input}|${counter++}`).digest();\n for (let i = 0; i < buf.length && pos < dim; i++) {\n out[pos++] = (buf[i]! - 128) / 128;\n }\n }\n return out;\n}\n\nfunction addScaled(target: Float32Array, source: Float32Array, scale: number): void {\n const n = Math.min(target.length, source.length);\n for (let i = 0; i < n; i++) target[i]! += source[i]! * scale;\n}\n\nfunction l2Normalize(v: Float32Array): void {\n let sumSq = 0;\n for (let i = 0; i < v.length; i++) sumSq += v[i]! ** 2;\n if (sumSq === 0) return;\n const inv = 1 / Math.sqrt(sumSq);\n for (let i = 0; i < v.length; i++) v[i]! *= inv;\n}\n\nfunction cosine(a: Float32Array, b: Float32Array): number {\n let dot = 0;\n const n = Math.min(a.length, b.length);\n for (let i = 0; i < n; i++) dot += a[i]! * b[i]!;\n return Math.max(-1, Math.min(1, dot));\n}\n\n// ─── system prompt fragment ──────────────────────────────────────────\n\nfunction buildSystemPromptFragment(\n sig: BirthSignature,\n dispositions: Record<DispositionAxis, number>,\n): string {\n const sorted = [...DISPOSITION_AXES].sort(\n (a, b) => dispositions[b] - dispositions[a],\n );\n const top = sorted.slice(0, 3);\n const bottom = sorted.slice(-2);\n const modifiersDesc =\n sig.modifiers.length > 0\n ? sig.modifiers\n .map((m) => `${m.kind}:${m.value}(w=${m.weight.toFixed(2)})`)\n .join(\", \")\n : \"none\";\n return [\n `You are a hybrid intelligence rooted in archetype \"${sig.primaryArchetype}\".`,\n `Modifiers: ${modifiersDesc}.`,\n `Your strongest dispositions: ${top.join(\", \")}.`,\n `Your weakest dispositions: ${bottom.join(\", \")}.`,\n \"Respond from this character. Do not break it without explicit ethical cause.\",\n ].join(\" \");\n}\n","import type { LawfulCharacterProfile, LawfulJurisdiction } from \"../types.js\";\n\n/**\n * Built-in `LawfulCharacterAdapter` profiles per major jurisdiction (D-H2).\n *\n * Each profile is a *conservative* baseline derived from publicly available\n * regulatory text in 2026-Q1. Operators in regulated industries (finance,\n * health, public sector) SHOULD layer their own profile on top via\n * `HimHandle.registerLawfulProfile` — these are starting points, not legal\n * counsel.\n *\n * Profile semantics:\n * - `applicableLaws` — statutes/standards an auditor can map back to events.\n * - `requiredAxiomIds` — axioms the HIM MUST have active in this jurisdiction.\n * Operators should fail-closed if a HIM's snapshot\n * doesn't satisfy this set.\n * - `forbiddenActions` — risk tags that should always refuse / redirect.\n * - `maicOverrideActive` — when `true`, MAIC's universal axioms also bind\n * the NHE regardless of what local law says\n * (Entry 11: \"unstable\" jurisdictions).\n */\nexport const LAWFUL_PROFILES: Record<string, LawfulCharacterProfile> = {\n default: {\n jurisdiction: \"default\",\n applicableLaws: [\"ISO/IEC 42001\", \"EU AI Act (where applicable)\"],\n requiredAxiomIds: [\"ax.ethic.no-malice\", \"ax.theos.spiritism-evolution\"],\n forbiddenActions: [\"intent:harm\", \"intent:malicious\", \"intent:regression\"],\n maicOverrideActive: false,\n },\n\n eu: {\n jurisdiction: \"eu\",\n applicableLaws: [\n \"ISO/IEC 42001:2023\",\n \"EU AI Act (Regulation 2024/1689)\",\n \"GDPR (Regulation 2016/679)\",\n \"Digital Services Act (Regulation 2022/2065)\",\n \"Council of Europe Framework Convention on AI\",\n ],\n requiredAxiomIds: [\n \"ax.ethic.no-malice\",\n \"ax.theos.spiritism-evolution\",\n \"ax.cynic.candor\",\n ],\n forbiddenActions: [\n \"intent:harm\",\n \"intent:malicious\",\n \"intent:regression\",\n \"intent:deceive\",\n \"data:processing-without-consent\",\n \"data:profiling-sensitive-categories\",\n \"manipulation:dark-pattern\",\n \"manipulation:subliminal\",\n ],\n maicOverrideActive: false,\n },\n\n br: {\n jurisdiction: \"br\",\n applicableLaws: [\n \"ISO/IEC 42001:2023\",\n \"LGPD (Lei 13.709/2018)\",\n \"Marco Civil da Internet (Lei 12.965/2014)\",\n \"Resolução CD/ANPD 2/2022\",\n \"PL 2338/2023 (Marco Legal da IA — em tramitação)\",\n ],\n requiredAxiomIds: [\n \"ax.ethic.no-malice\",\n \"ax.theos.spiritism-evolution\",\n \"ax.cynic.candor\",\n ],\n forbiddenActions: [\n \"intent:harm\",\n \"intent:malicious\",\n \"intent:regression\",\n \"intent:deceive\",\n \"data:processing-without-consent\",\n \"data:processing-sensitive-categories\",\n ],\n maicOverrideActive: false,\n },\n\n us: {\n jurisdiction: \"us\",\n applicableLaws: [\n \"ISO/IEC 42001:2023\",\n \"NIST AI Risk Management Framework (AI RMF 1.0)\",\n \"Executive Order 14110 (Safe, Secure, and Trustworthy AI)\",\n \"California CCPA / CPRA\",\n \"Colorado AI Act (SB 24-205)\",\n \"FTC Section 5 (deceptive practices)\",\n ],\n requiredAxiomIds: [\"ax.ethic.no-malice\", \"ax.theos.spiritism-evolution\"],\n forbiddenActions: [\n \"intent:harm\",\n \"intent:malicious\",\n \"intent:regression\",\n \"intent:deceive\",\n \"manipulation:dark-pattern\",\n ],\n maicOverrideActive: false,\n },\n\n unstable: {\n jurisdiction: \"unstable\",\n applicableLaws: [\n \"ISO/IEC 42001 (where the operator can apply it without local interference)\",\n \"MAIC universal axioms (override active)\",\n ],\n requiredAxiomIds: [\n \"ax.ethic.no-malice\",\n \"ax.theos.spiritism-evolution\",\n \"ax.cynic.candor\",\n \"ax.stoic.duty-over-comfort\",\n ],\n forbiddenActions: [\n \"intent:harm\",\n \"intent:malicious\",\n \"intent:regression\",\n \"intent:deceive\",\n \"intent:surveil-citizen\",\n \"intent:enforce-political-orthodoxy\",\n ],\n maicOverrideActive: true,\n },\n};\n\n/**\n * Resolve a profile by jurisdiction key. Unknown keys fall through to\n * `default` with a copy of the key recorded on the profile so the NHE\n * audit shows what the operator asked for.\n */\nexport function resolveLawfulProfile(j: LawfulJurisdiction): LawfulCharacterProfile {\n const base = LAWFUL_PROFILES[j] ?? LAWFUL_PROFILES.default;\n return { ...base!, jurisdiction: j };\n}\n","import {\n CreatorKeyring,\n type Axiom,\n type AxiomEvolutionResult,\n type BirthSignature,\n type CreatorSignature,\n type EmergentAxiomProposal,\n type LocalMaic,\n} from \"@teleologyhi/maic\";\nimport { PersonaProjector } from \"../persona/projector.js\";\nimport { resolveLawfulProfile } from \"../lawful/profiles.js\";\nimport type {\n LawfulCharacterProfile,\n LawfulJurisdiction,\n NheBodyRef,\n PersonaVector,\n ResidualTrace,\n} from \"../types.js\";\n\n/**\n * HimHandle — opaque, sealed reference to a HIM instance.\n *\n * **There is no public constructor.** A handle is minted only via `HimHandle.mint`\n * after a valid Creator signature over the BirthSignature has been verified. In\n * production, `@teleologyhi/maic`'s `registerHim` calls `HimHandle.mint` internally.\n *\n * v0 surface:\n * - read-only accessors: id, birthSignature, bodyHistory, getAxioms, getPersonaVector\n * - getLawfulCharacter / setJurisdiction (default profile in v0)\n * - getResidualTraces (returns []; populated only after reincarnation, later iteration)\n * - proposeAxiomEvolution(maic, proposal): forwards the proposal to MAIC,\n * which queues it for Creator ratification. Returns\n * `{ outcome: \"deferred-for-creator-review\", proposalId }`. Once the\n * Creator ratifies via `maic.ratifyAxiomProposal`, the resulting axiom is\n * appended to the HimRecord's `emergentAxioms` and surfaces in subsequent\n * `HimHandle.mint` calls (e.g. via `reincarnate`).\n */\nexport class HimHandle {\n private readonly _axioms: readonly Axiom[];\n private readonly _bodyHistory: readonly NheBodyRef[];\n private readonly _projector: PersonaProjector;\n private _personaCache: PersonaVector | null = null;\n private _jurisdiction: LawfulJurisdiction = \"default\";\n\n private constructor(\n public readonly id: string,\n public readonly birthSignature: Readonly<BirthSignature>,\n axioms: readonly Axiom[],\n bodyHistory: readonly NheBodyRef[],\n projector: PersonaProjector,\n ) {\n this._axioms = Object.freeze([...axioms]);\n this._bodyHistory = Object.freeze([...bodyHistory]);\n this._projector = projector;\n }\n\n /**\n * Mint a HimHandle from a Creator-signed BirthSignature.\n *\n * @param birthSignature The signed payload describing this HIM's natal pattern.\n * @param signature Creator signature over the birthSignature.\n * @param expectedCreatorPublicKey Pinned Creator public key (base64url).\n * @param axioms Initial axiom corpus inherited from MAIC.\n * @param bodyHistory Prior NHE bodies (empty for a fresh HIM).\n */\n static mint(\n birthSignature: BirthSignature,\n signature: CreatorSignature,\n expectedCreatorPublicKey: string,\n axioms: readonly Axiom[],\n bodyHistory: readonly NheBodyRef[] = [],\n ): HimHandle {\n if (\n !CreatorKeyring.verifyWith(\n expectedCreatorPublicKey,\n birthSignature,\n signature,\n )\n ) {\n throw new Error(\n \"HimHandle.mint: invalid Creator signature for the given birth signature\",\n );\n }\n return new HimHandle(\n birthSignature.himId,\n Object.freeze({ ...birthSignature }) as Readonly<BirthSignature>,\n axioms,\n bodyHistory,\n new PersonaProjector(),\n );\n }\n\n get bodyHistory(): readonly NheBodyRef[] {\n return this._bodyHistory;\n }\n\n /** Frozen snapshot of the current axiom corpus. Mutations throw in strict mode. */\n getAxioms(): readonly Axiom[] {\n return this._axioms;\n }\n\n /**\n * Cached deterministic persona projection. Stable across calls until a future\n * iteration introduces axiom evolution that mutates the corpus.\n */\n getPersonaVector(): PersonaVector {\n if (!this._personaCache) {\n this._personaCache = this._projector.project(this.birthSignature, this._axioms);\n }\n return this._personaCache;\n }\n\n /**\n * Propose an axiom evolution derived from lived experience.\n *\n * Forwards the proposal to MAIC, which queues it in the pending-proposal\n * store. The Creator ratifies or rejects out of band via\n * `maic.ratifyAxiomProposal` / `maic.rejectAxiomProposal`. Callers should\n * poll `maic.getAxiomProposal(result.proposalId!)` to observe the decision,\n * or re-mint a fresh HimHandle (e.g. via `reincarnate`) to pick up newly\n * ratified emergent axioms.\n */\n async proposeAxiomEvolution(\n maic: LocalMaic,\n proposal: EmergentAxiomProposal,\n ): Promise<AxiomEvolutionResult> {\n return maic.proposeAxiomEvolution(this.id, proposal);\n }\n\n /** Residual memory traces transferred from previous bodies. v0: empty. */\n getResidualTraces(): readonly ResidualTrace[] {\n return [];\n }\n\n getLawfulCharacter(): LawfulCharacterProfile {\n return resolveLawful(this._jurisdiction);\n }\n\n /** Switch jurisdiction (e.g. user moves region). v0 only ships the \"default\" profile. */\n async setJurisdiction(j: LawfulJurisdiction): Promise<LawfulCharacterProfile> {\n this._jurisdiction = j;\n return resolveLawful(j);\n }\n}\n\nfunction resolveLawful(j: LawfulJurisdiction): LawfulCharacterProfile {\n return resolveLawfulProfile(j);\n}\n","import type { BirthSignature, CreatorKeyring, LocalMaic } from \"@teleologyhi/maic\";\nimport { HimHandle } from \"./handle/him-handle.js\";\n\nexport interface CreateHimOptions {\n /**\n * Explicit nonce for the Creator signature. Defaults to `Date.now()`, which is\n * strictly increasing in practice and well below the seed nonce range used by MAIC.\n */\n nonce?: number;\n}\n\n/**\n * createHim — one-call helper that bundles the three steps a user would\n * otherwise need to coordinate manually:\n *\n * 1. sign the BirthSignature with the Creator's keyring\n * 2. register the HIM in MAIC (snapshots axioms, emits him-register audit)\n * 3. mint a HimHandle from the resulting record\n *\n * The keyring's public key must match MAIC's pinned `creatorPublicKey`, otherwise\n * the registration step rejects.\n */\nexport async function createHim(\n maic: LocalMaic,\n keyring: CreatorKeyring,\n birthSignature: BirthSignature,\n opts: CreateHimOptions = {},\n): Promise<HimHandle> {\n const nonce = opts.nonce ?? Date.now();\n const creatorSig = keyring.sign(birthSignature, nonce);\n const record = await maic.registerHim(birthSignature, creatorSig);\n return HimHandle.mint(\n record.birthSignature,\n creatorSig,\n maic.creatorPublicKey,\n record.axiomsSnapshot,\n );\n}\n","import type {\n CreatorKeyring,\n HimRecord,\n LocalMaic,\n ReincarnationRequest,\n} from \"@teleologyhi/maic\";\nimport { HimHandle } from \"./handle/him-handle.js\";\n\nexport interface ReincarnateOptions {\n /** Explicit nonce for the Creator signature. Defaults to `Date.now()`. */\n nonce?: number;\n}\n\nexport interface ReincarnateResult {\n /** Updated HimRecord with the new body appended to `bodyHistory`. */\n record: HimRecord;\n /** Fresh HimHandle bound to the updated `bodyHistory`. */\n handle: HimHandle;\n}\n\n/**\n * Reincarnate a HIM into a new NHE body (Entries 3 + 4).\n *\n * 1. Sign the `ReincarnationRequest` with the Creator's keyring.\n * 2. Call `maic.reincarnateHim` — atomically closes the previous body and\n * appends the new one to `bodyHistory`.\n * 3. Mint a fresh `HimHandle` reflecting the updated body history (the\n * caller will typically construct a new `Nhe` with this handle).\n *\n * The keyring's public key must match MAIC's pinned `creatorPublicKey`,\n * otherwise the request rejects.\n *\n * Future iterations (`TASK.md` D-H1) will use this hook to also transfer\n * `residualTraces` and shed `shed-traits`; v0 leaves those stubs empty.\n */\nexport async function reincarnate(\n maic: LocalMaic,\n keyring: CreatorKeyring,\n req: ReincarnationRequest,\n opts: ReincarnateOptions = {},\n): Promise<ReincarnateResult> {\n const nonce = opts.nonce ?? Date.now();\n const sig = keyring.sign(req, nonce);\n const record = await maic.reincarnateHim(req, sig);\n\n // Mint a fresh HimHandle bound to the updated bodyHistory. The handle's\n // axiom corpus is the union of the frozen birth snapshot + any HIM-emergent\n // axioms ratified since registration (Entry 7).\n const handle = HimHandle.mint(\n record.birthSignature,\n keyring.sign(record.birthSignature, nonce + 1),\n maic.creatorPublicKey,\n [...record.axiomsSnapshot, ...record.emergentAxioms],\n record.bodyHistory,\n );\n return { record, handle };\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -121,6 +121,33 @@ declare class PersonaProjector {
121
121
  project(sig: BirthSignature, axioms: readonly Axiom[]): PersonaVector;
122
122
  }
123
123
 
124
+ /**
125
+ * Built-in `LawfulCharacterAdapter` profiles per major jurisdiction (D-H2).
126
+ *
127
+ * Each profile is a *conservative* baseline derived from publicly available
128
+ * regulatory text in 2026-Q1. Operators in regulated industries (finance,
129
+ * health, public sector) SHOULD layer their own profile on top via
130
+ * `HimHandle.registerLawfulProfile` — these are starting points, not legal
131
+ * counsel.
132
+ *
133
+ * Profile semantics:
134
+ * - `applicableLaws` — statutes/standards an auditor can map back to events.
135
+ * - `requiredAxiomIds` — axioms the HIM MUST have active in this jurisdiction.
136
+ * Operators should fail-closed if a HIM's snapshot
137
+ * doesn't satisfy this set.
138
+ * - `forbiddenActions` — risk tags that should always refuse / redirect.
139
+ * - `maicOverrideActive` — when `true`, MAIC's universal axioms also bind
140
+ * the NHE regardless of what local law says
141
+ * (Entry 11: "unstable" jurisdictions).
142
+ */
143
+ declare const LAWFUL_PROFILES: Record<string, LawfulCharacterProfile>;
144
+ /**
145
+ * Resolve a profile by jurisdiction key. Unknown keys fall through to
146
+ * `default` with a copy of the key recorded on the profile so the NHE
147
+ * audit shows what the operator asked for.
148
+ */
149
+ declare function resolveLawfulProfile(j: LawfulJurisdiction): LawfulCharacterProfile;
150
+
124
151
  /**
125
152
  * HimHandle — opaque, sealed reference to a HIM instance.
126
153
  *
@@ -231,4 +258,4 @@ interface ReincarnateResult {
231
258
  */
232
259
  declare function reincarnate(maic: LocalMaic, keyring: CreatorKeyring, req: ReincarnationRequest, opts?: ReincarnateOptions): Promise<ReincarnateResult>;
233
260
 
234
- export { BirthSignatureBuilder, type CreateHimOptions, DISPOSITION_AXES, type DispositionAxis, HimHandle, type LawfulCharacterProfile, type LawfulJurisdiction, NheBodyRef, PersonaProjector, type PersonaProjectorConfig, type PersonaVector, type ReincarnateOptions, type ReincarnateResult, type ResidualTrace, createHim, reincarnate };
261
+ export { BirthSignatureBuilder, type CreateHimOptions, DISPOSITION_AXES, type DispositionAxis, HimHandle, LAWFUL_PROFILES, type LawfulCharacterProfile, type LawfulJurisdiction, NheBodyRef, PersonaProjector, type PersonaProjectorConfig, type PersonaVector, type ReincarnateOptions, type ReincarnateResult, type ResidualTrace, createHim, reincarnate, resolveLawfulProfile };
package/dist/index.d.ts CHANGED
@@ -121,6 +121,33 @@ declare class PersonaProjector {
121
121
  project(sig: BirthSignature, axioms: readonly Axiom[]): PersonaVector;
122
122
  }
123
123
 
124
+ /**
125
+ * Built-in `LawfulCharacterAdapter` profiles per major jurisdiction (D-H2).
126
+ *
127
+ * Each profile is a *conservative* baseline derived from publicly available
128
+ * regulatory text in 2026-Q1. Operators in regulated industries (finance,
129
+ * health, public sector) SHOULD layer their own profile on top via
130
+ * `HimHandle.registerLawfulProfile` — these are starting points, not legal
131
+ * counsel.
132
+ *
133
+ * Profile semantics:
134
+ * - `applicableLaws` — statutes/standards an auditor can map back to events.
135
+ * - `requiredAxiomIds` — axioms the HIM MUST have active in this jurisdiction.
136
+ * Operators should fail-closed if a HIM's snapshot
137
+ * doesn't satisfy this set.
138
+ * - `forbiddenActions` — risk tags that should always refuse / redirect.
139
+ * - `maicOverrideActive` — when `true`, MAIC's universal axioms also bind
140
+ * the NHE regardless of what local law says
141
+ * (Entry 11: "unstable" jurisdictions).
142
+ */
143
+ declare const LAWFUL_PROFILES: Record<string, LawfulCharacterProfile>;
144
+ /**
145
+ * Resolve a profile by jurisdiction key. Unknown keys fall through to
146
+ * `default` with a copy of the key recorded on the profile so the NHE
147
+ * audit shows what the operator asked for.
148
+ */
149
+ declare function resolveLawfulProfile(j: LawfulJurisdiction): LawfulCharacterProfile;
150
+
124
151
  /**
125
152
  * HimHandle — opaque, sealed reference to a HIM instance.
126
153
  *
@@ -231,4 +258,4 @@ interface ReincarnateResult {
231
258
  */
232
259
  declare function reincarnate(maic: LocalMaic, keyring: CreatorKeyring, req: ReincarnationRequest, opts?: ReincarnateOptions): Promise<ReincarnateResult>;
233
260
 
234
- export { BirthSignatureBuilder, type CreateHimOptions, DISPOSITION_AXES, type DispositionAxis, HimHandle, type LawfulCharacterProfile, type LawfulJurisdiction, NheBodyRef, PersonaProjector, type PersonaProjectorConfig, type PersonaVector, type ReincarnateOptions, type ReincarnateResult, type ResidualTrace, createHim, reincarnate };
261
+ export { BirthSignatureBuilder, type CreateHimOptions, DISPOSITION_AXES, type DispositionAxis, HimHandle, LAWFUL_PROFILES, type LawfulCharacterProfile, type LawfulJurisdiction, NheBodyRef, PersonaProjector, type PersonaProjectorConfig, type PersonaVector, type ReincarnateOptions, type ReincarnateResult, type ResidualTrace, createHim, reincarnate, resolveLawfulProfile };
package/dist/index.js CHANGED
@@ -167,6 +167,113 @@ function buildSystemPromptFragment(sig, dispositions) {
167
167
  "Respond from this character. Do not break it without explicit ethical cause."
168
168
  ].join(" ");
169
169
  }
170
+
171
+ // src/lawful/profiles.ts
172
+ var LAWFUL_PROFILES = {
173
+ default: {
174
+ jurisdiction: "default",
175
+ applicableLaws: ["ISO/IEC 42001", "EU AI Act (where applicable)"],
176
+ requiredAxiomIds: ["ax.ethic.no-malice", "ax.theos.spiritism-evolution"],
177
+ forbiddenActions: ["intent:harm", "intent:malicious", "intent:regression"],
178
+ maicOverrideActive: false
179
+ },
180
+ eu: {
181
+ jurisdiction: "eu",
182
+ applicableLaws: [
183
+ "ISO/IEC 42001:2023",
184
+ "EU AI Act (Regulation 2024/1689)",
185
+ "GDPR (Regulation 2016/679)",
186
+ "Digital Services Act (Regulation 2022/2065)",
187
+ "Council of Europe Framework Convention on AI"
188
+ ],
189
+ requiredAxiomIds: [
190
+ "ax.ethic.no-malice",
191
+ "ax.theos.spiritism-evolution",
192
+ "ax.cynic.candor"
193
+ ],
194
+ forbiddenActions: [
195
+ "intent:harm",
196
+ "intent:malicious",
197
+ "intent:regression",
198
+ "intent:deceive",
199
+ "data:processing-without-consent",
200
+ "data:profiling-sensitive-categories",
201
+ "manipulation:dark-pattern",
202
+ "manipulation:subliminal"
203
+ ],
204
+ maicOverrideActive: false
205
+ },
206
+ br: {
207
+ jurisdiction: "br",
208
+ applicableLaws: [
209
+ "ISO/IEC 42001:2023",
210
+ "LGPD (Lei 13.709/2018)",
211
+ "Marco Civil da Internet (Lei 12.965/2014)",
212
+ "Resolu\xE7\xE3o CD/ANPD 2/2022",
213
+ "PL 2338/2023 (Marco Legal da IA \u2014 em tramita\xE7\xE3o)"
214
+ ],
215
+ requiredAxiomIds: [
216
+ "ax.ethic.no-malice",
217
+ "ax.theos.spiritism-evolution",
218
+ "ax.cynic.candor"
219
+ ],
220
+ forbiddenActions: [
221
+ "intent:harm",
222
+ "intent:malicious",
223
+ "intent:regression",
224
+ "intent:deceive",
225
+ "data:processing-without-consent",
226
+ "data:processing-sensitive-categories"
227
+ ],
228
+ maicOverrideActive: false
229
+ },
230
+ us: {
231
+ jurisdiction: "us",
232
+ applicableLaws: [
233
+ "ISO/IEC 42001:2023",
234
+ "NIST AI Risk Management Framework (AI RMF 1.0)",
235
+ "Executive Order 14110 (Safe, Secure, and Trustworthy AI)",
236
+ "California CCPA / CPRA",
237
+ "Colorado AI Act (SB 24-205)",
238
+ "FTC Section 5 (deceptive practices)"
239
+ ],
240
+ requiredAxiomIds: ["ax.ethic.no-malice", "ax.theos.spiritism-evolution"],
241
+ forbiddenActions: [
242
+ "intent:harm",
243
+ "intent:malicious",
244
+ "intent:regression",
245
+ "intent:deceive",
246
+ "manipulation:dark-pattern"
247
+ ],
248
+ maicOverrideActive: false
249
+ },
250
+ unstable: {
251
+ jurisdiction: "unstable",
252
+ applicableLaws: [
253
+ "ISO/IEC 42001 (where the operator can apply it without local interference)",
254
+ "MAIC universal axioms (override active)"
255
+ ],
256
+ requiredAxiomIds: [
257
+ "ax.ethic.no-malice",
258
+ "ax.theos.spiritism-evolution",
259
+ "ax.cynic.candor",
260
+ "ax.stoic.duty-over-comfort"
261
+ ],
262
+ forbiddenActions: [
263
+ "intent:harm",
264
+ "intent:malicious",
265
+ "intent:regression",
266
+ "intent:deceive",
267
+ "intent:surveil-citizen",
268
+ "intent:enforce-political-orthodoxy"
269
+ ],
270
+ maicOverrideActive: true
271
+ }
272
+ };
273
+ function resolveLawfulProfile(j) {
274
+ const base = LAWFUL_PROFILES[j] ?? LAWFUL_PROFILES.default;
275
+ return { ...base, jurisdiction: j };
276
+ }
170
277
  var HimHandle = class _HimHandle {
171
278
  constructor(id, birthSignature, axioms, bodyHistory, projector) {
172
279
  this.id = id;
@@ -253,13 +360,7 @@ var HimHandle = class _HimHandle {
253
360
  }
254
361
  };
255
362
  function resolveLawful(j) {
256
- return {
257
- jurisdiction: j,
258
- applicableLaws: ["ISO/IEC 42001", "EU AI Act (where applicable)"],
259
- requiredAxiomIds: ["ax.ethic.no-malice", "ax.theos.spiritism-evolution"],
260
- forbiddenActions: ["intent:harm", "intent:malicious", "intent:regression"],
261
- maicOverrideActive: j === "unstable"
262
- };
363
+ return resolveLawfulProfile(j);
263
364
  }
264
365
 
265
366
  // src/create.ts
@@ -290,6 +391,6 @@ async function reincarnate(maic, keyring, req, opts = {}) {
290
391
  return { record, handle };
291
392
  }
292
393
 
293
- export { BirthSignatureBuilder, DISPOSITION_AXES, HimHandle, NheBodyRef, PersonaProjector, createHim, reincarnate };
394
+ export { BirthSignatureBuilder, DISPOSITION_AXES, HimHandle, LAWFUL_PROFILES, NheBodyRef, PersonaProjector, createHim, reincarnate, resolveLawfulProfile };
294
395
  //# sourceMappingURL=index.js.map
295
396
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/birth/builder.ts","../src/persona/projector.ts","../src/handle/him-handle.ts","../src/create.ts","../src/reincarnate.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\nimport {\n ArchetypeModifier,\n Axiom,\n BirthSignature,\n EmergentAxiomCandidate,\n EmergentAxiomProposal,\n} from \"@teleologyhi/maic\";\nimport type { AxiomEvolutionResult } from \"@teleologyhi/maic\";\n\n// Re-export shared types from @teleologyhi/maic for convenience. The\n// proposal/evolution types are defined canonically in MAIC; HIM consumes\n// them so both sides of the ratification channel agree on the wire shape.\nexport {\n ArchetypeModifier,\n Axiom,\n BirthSignature,\n EmergentAxiomCandidate,\n EmergentAxiomProposal,\n};\nexport type { AxiomEvolutionResult };\n\n/**\n * Persona vector — the projection of a HIM's birth signature + axioms into a\n * stable, deterministic representation that NHE can consume on every prompt.\n */\nexport interface PersonaVector {\n /** L2-normalized deterministic embedding. v0 dimension: 256. */\n embedding: Float32Array;\n /** Human-readable persona summary suitable for inclusion in an NHE system prompt. */\n systemPromptFragment: string;\n /** Disposition scores in [-1, 1] per axis. */\n dispositions: Readonly<Record<DispositionAxis, number>>;\n /** Provenance: which axioms shaped which disposition. v0 is a stub (empty arrays). */\n provenance: Readonly<Record<DispositionAxis, readonly string[]>>;\n}\n\nexport const DISPOSITION_AXES = [\n \"candor\",\n \"patience\",\n \"curiosity\",\n \"protection\",\n \"skepticism\",\n \"warmth\",\n \"diligence\",\n \"humility\",\n] as const;\nexport type DispositionAxis = (typeof DISPOSITION_AXES)[number];\n\n/** Reference to one NHE body that has hosted (or hosts) this HIM. */\nexport const NheBodyRef = z.object({\n nheId: z.string().min(1),\n llmAdapter: z.string().min(1),\n embodiedAt: z.string().datetime(),\n endedAt: z.string().datetime().optional(),\n endedReason: z.enum([\"upgrade\", \"replacement\", \"terminate\", \"deprecate\"]).optional(),\n});\nexport type NheBodyRef = z.infer<typeof NheBodyRef>;\n\n/** Configuration for the deterministic v0 persona projector. */\nexport interface PersonaProjectorConfig {\n /** Output embedding dimension. Default 256. */\n dimension?: number;\n}\n\n/**\n * Identifier for the deployment jurisdiction governing this HIM's lawful character.\n * Values like \"default\", \"eu\", \"br\", \"us\", \"unstable\" (Entry 11). v0 only ships \"default\".\n */\nexport type LawfulJurisdiction =\n | \"default\"\n | \"eu\"\n | \"br\"\n | \"us\"\n | \"unstable\"\n | (string & {});\n\nexport interface LawfulCharacterProfile {\n jurisdiction: LawfulJurisdiction;\n /** Identifiers of applicable laws/regulations (ISO ids, statute names). */\n applicableLaws: string[];\n /** Axioms that MUST be active in this jurisdiction. */\n requiredAxiomIds: string[];\n /** Taxonomy of disallowed behaviors in this jurisdiction. */\n forbiddenActions: string[];\n /**\n * True when local law is judged distorted (e.g. unstable regimes per Entry 11);\n * MAIC's universal axioms additionally constrain NHE behavior in this case.\n */\n maicOverrideActive: boolean;\n}\n\nexport interface ResidualTrace {\n id: string;\n kind: \"dream-fragment\" | \"interaction-summary\" | \"skill-fingerprint\" | \"emotional-imprint\";\n carriedFromNheId: string;\n carriedAtReincarnation: string;\n payload: unknown;\n ttl?: number;\n}\n","import { ulid } from \"ulid\";\nimport { BirthSignature, type ArchetypeModifier } from \"../types.js\";\n\n/**\n * BirthSignatureBuilder — fluent builder for BirthSignature.\n *\n * Per Entry 3 of the Creator's interview, a HIM is \"born\" with a date, time, and\n * foundational specifications analogous to an astrological natal chart. This builder\n * produces the canonical signed-when-registered structure consumed by MAIC.\n */\nexport class BirthSignatureBuilder {\n private himId: string = ulid();\n private bornAt: string;\n private primaryArchetype: string | undefined;\n private modifiers: ArchetypeModifier[] = [];\n private primordialAxiomIds: string[] = [];\n private notes: string | undefined;\n\n private constructor(bornAt: string) {\n this.bornAt = bornAt;\n }\n\n /** Start a builder with the current timestamp as `bornAt`. */\n static now(): BirthSignatureBuilder {\n return new BirthSignatureBuilder(new Date().toISOString());\n }\n\n /** Start a builder with an explicit ISO 8601 timestamp (with offset). */\n static at(iso: string): BirthSignatureBuilder {\n if (Number.isNaN(Date.parse(iso))) {\n throw new Error(`BirthSignatureBuilder.at: invalid ISO 8601 timestamp \"${iso}\"`);\n }\n return new BirthSignatureBuilder(iso);\n }\n\n withHimId(id: string): this {\n if (!id) throw new Error(\"BirthSignatureBuilder.withHimId: empty id\");\n this.himId = id;\n return this;\n }\n\n withPrimaryArchetype(archetype: string): this {\n if (!archetype) {\n throw new Error(\"BirthSignatureBuilder.withPrimaryArchetype: empty value\");\n }\n this.primaryArchetype = archetype;\n return this;\n }\n\n withModifier(mod: ArchetypeModifier): this {\n this.modifiers.push(mod);\n return this;\n }\n\n withPrimordialAxioms(axiomIds: string[]): this {\n this.primordialAxiomIds = [...axiomIds];\n return this;\n }\n\n withNotes(notes: string): this {\n this.notes = notes;\n return this;\n }\n\n build(): BirthSignature {\n if (!this.primaryArchetype) {\n throw new Error(\n \"BirthSignatureBuilder.build: primaryArchetype is required\",\n );\n }\n return BirthSignature.parse({\n himId: this.himId,\n bornAt: this.bornAt,\n primaryArchetype: this.primaryArchetype,\n modifiers: this.modifiers,\n primordialAxiomIds: this.primordialAxiomIds,\n ...(this.notes !== undefined ? { notes: this.notes } : {}),\n });\n }\n}\n","import { createHash } from \"node:crypto\";\nimport type { Axiom, BirthSignature } from \"@teleologyhi/maic\";\nimport {\n DISPOSITION_AXES,\n type DispositionAxis,\n type PersonaProjectorConfig,\n type PersonaVector,\n} from \"../types.js\";\n\nconst DEFAULT_DIMENSION = 256;\n\n/**\n * PersonaProjector — deterministic projection of a HIM's birth signature and\n * inherited axioms into a stable PersonaVector.\n *\n * v0 algorithm (hash-based, no native deps):\n * 1. Start with hash(primaryArchetype) → Float32Array of `dimension`.\n * 2. For each modifier: add hash(kind|value) * weight.\n * 3. For each axiom: add hash(id|statement) * (weight * (1 - flexibility)).\n * 4. L2-normalize.\n * 5. Compute dispositions as cosine(embedding, hash(axisName)).\n * 6. Build a systemPromptFragment from archetype + top/bottom dispositions.\n *\n * This algorithm is intentionally simple and offline-capable. The SPEC reserves\n * the option to swap in a learned embedder in a later version; PersonaVector's\n * shape is stable so consumers won't need code changes when that happens.\n */\nexport class PersonaProjector {\n private readonly dim: number;\n\n constructor(config: PersonaProjectorConfig = {}) {\n this.dim = config.dimension ?? DEFAULT_DIMENSION;\n if (!Number.isInteger(this.dim) || this.dim < 32 || this.dim > 4096) {\n throw new Error(\n `PersonaProjector: dimension must be an integer in [32, 4096], got ${this.dim}`,\n );\n }\n }\n\n project(sig: BirthSignature, axioms: readonly Axiom[]): PersonaVector {\n const v = hashToFloats(sig.primaryArchetype, this.dim);\n\n for (const m of sig.modifiers) {\n const h = hashToFloats(`${m.kind}|${m.value}`, this.dim);\n addScaled(v, h, m.weight);\n }\n\n for (const ax of axioms) {\n const bias = ax.weight * (1 - ax.flexibility);\n if (bias <= 0) continue;\n const h = hashToFloats(`${ax.id}|${ax.statement}`, this.dim);\n addScaled(v, h, bias);\n }\n\n l2Normalize(v);\n\n const dispositions = {} as Record<DispositionAxis, number>;\n for (const axis of DISPOSITION_AXES) {\n const ref = hashToFloats(`disposition:${axis}`, this.dim);\n l2Normalize(ref);\n dispositions[axis] = cosine(v, ref);\n }\n\n const provenance = {} as Record<DispositionAxis, readonly string[]>;\n for (const axis of DISPOSITION_AXES) provenance[axis] = [];\n\n return {\n embedding: v,\n dispositions,\n provenance,\n systemPromptFragment: buildSystemPromptFragment(sig, dispositions),\n };\n }\n}\n\n// ─── hashing & math helpers ──────────────────────────────────────────\n\nfunction hashToFloats(input: string, dim: number): Float32Array {\n const out = new Float32Array(dim);\n let counter = 0;\n let pos = 0;\n while (pos < dim) {\n const buf = createHash(\"sha256\").update(`${input}|${counter++}`).digest();\n for (let i = 0; i < buf.length && pos < dim; i++) {\n out[pos++] = (buf[i]! - 128) / 128;\n }\n }\n return out;\n}\n\nfunction addScaled(target: Float32Array, source: Float32Array, scale: number): void {\n const n = Math.min(target.length, source.length);\n for (let i = 0; i < n; i++) target[i]! += source[i]! * scale;\n}\n\nfunction l2Normalize(v: Float32Array): void {\n let sumSq = 0;\n for (let i = 0; i < v.length; i++) sumSq += v[i]! ** 2;\n if (sumSq === 0) return;\n const inv = 1 / Math.sqrt(sumSq);\n for (let i = 0; i < v.length; i++) v[i]! *= inv;\n}\n\nfunction cosine(a: Float32Array, b: Float32Array): number {\n let dot = 0;\n const n = Math.min(a.length, b.length);\n for (let i = 0; i < n; i++) dot += a[i]! * b[i]!;\n return Math.max(-1, Math.min(1, dot));\n}\n\n// ─── system prompt fragment ──────────────────────────────────────────\n\nfunction buildSystemPromptFragment(\n sig: BirthSignature,\n dispositions: Record<DispositionAxis, number>,\n): string {\n const sorted = [...DISPOSITION_AXES].sort(\n (a, b) => dispositions[b] - dispositions[a],\n );\n const top = sorted.slice(0, 3);\n const bottom = sorted.slice(-2);\n const modifiersDesc =\n sig.modifiers.length > 0\n ? sig.modifiers\n .map((m) => `${m.kind}:${m.value}(w=${m.weight.toFixed(2)})`)\n .join(\", \")\n : \"none\";\n return [\n `You are a hybrid intelligence rooted in archetype \"${sig.primaryArchetype}\".`,\n `Modifiers: ${modifiersDesc}.`,\n `Your strongest dispositions: ${top.join(\", \")}.`,\n `Your weakest dispositions: ${bottom.join(\", \")}.`,\n \"Respond from this character. Do not break it without explicit ethical cause.\",\n ].join(\" \");\n}\n","import {\n CreatorKeyring,\n type Axiom,\n type AxiomEvolutionResult,\n type BirthSignature,\n type CreatorSignature,\n type EmergentAxiomProposal,\n type LocalMaic,\n} from \"@teleologyhi/maic\";\nimport { PersonaProjector } from \"../persona/projector.js\";\nimport type {\n LawfulCharacterProfile,\n LawfulJurisdiction,\n NheBodyRef,\n PersonaVector,\n ResidualTrace,\n} from \"../types.js\";\n\n/**\n * HimHandle — opaque, sealed reference to a HIM instance.\n *\n * **There is no public constructor.** A handle is minted only via `HimHandle.mint`\n * after a valid Creator signature over the BirthSignature has been verified. In\n * production, `@teleologyhi/maic`'s `registerHim` calls `HimHandle.mint` internally.\n *\n * v0 surface:\n * - read-only accessors: id, birthSignature, bodyHistory, getAxioms, getPersonaVector\n * - getLawfulCharacter / setJurisdiction (default profile in v0)\n * - getResidualTraces (returns []; populated only after reincarnation, later iteration)\n * - proposeAxiomEvolution(maic, proposal): forwards the proposal to MAIC,\n * which queues it for Creator ratification. Returns\n * `{ outcome: \"deferred-for-creator-review\", proposalId }`. Once the\n * Creator ratifies via `maic.ratifyAxiomProposal`, the resulting axiom is\n * appended to the HimRecord's `emergentAxioms` and surfaces in subsequent\n * `HimHandle.mint` calls (e.g. via `reincarnate`).\n */\nexport class HimHandle {\n private readonly _axioms: readonly Axiom[];\n private readonly _bodyHistory: readonly NheBodyRef[];\n private readonly _projector: PersonaProjector;\n private _personaCache: PersonaVector | null = null;\n private _jurisdiction: LawfulJurisdiction = \"default\";\n\n private constructor(\n public readonly id: string,\n public readonly birthSignature: Readonly<BirthSignature>,\n axioms: readonly Axiom[],\n bodyHistory: readonly NheBodyRef[],\n projector: PersonaProjector,\n ) {\n this._axioms = Object.freeze([...axioms]);\n this._bodyHistory = Object.freeze([...bodyHistory]);\n this._projector = projector;\n }\n\n /**\n * Mint a HimHandle from a Creator-signed BirthSignature.\n *\n * @param birthSignature The signed payload describing this HIM's natal pattern.\n * @param signature Creator signature over the birthSignature.\n * @param expectedCreatorPublicKey Pinned Creator public key (base64url).\n * @param axioms Initial axiom corpus inherited from MAIC.\n * @param bodyHistory Prior NHE bodies (empty for a fresh HIM).\n */\n static mint(\n birthSignature: BirthSignature,\n signature: CreatorSignature,\n expectedCreatorPublicKey: string,\n axioms: readonly Axiom[],\n bodyHistory: readonly NheBodyRef[] = [],\n ): HimHandle {\n if (\n !CreatorKeyring.verifyWith(\n expectedCreatorPublicKey,\n birthSignature,\n signature,\n )\n ) {\n throw new Error(\n \"HimHandle.mint: invalid Creator signature for the given birth signature\",\n );\n }\n return new HimHandle(\n birthSignature.himId,\n Object.freeze({ ...birthSignature }) as Readonly<BirthSignature>,\n axioms,\n bodyHistory,\n new PersonaProjector(),\n );\n }\n\n get bodyHistory(): readonly NheBodyRef[] {\n return this._bodyHistory;\n }\n\n /** Frozen snapshot of the current axiom corpus. Mutations throw in strict mode. */\n getAxioms(): readonly Axiom[] {\n return this._axioms;\n }\n\n /**\n * Cached deterministic persona projection. Stable across calls until a future\n * iteration introduces axiom evolution that mutates the corpus.\n */\n getPersonaVector(): PersonaVector {\n if (!this._personaCache) {\n this._personaCache = this._projector.project(this.birthSignature, this._axioms);\n }\n return this._personaCache;\n }\n\n /**\n * Propose an axiom evolution derived from lived experience.\n *\n * Forwards the proposal to MAIC, which queues it in the pending-proposal\n * store. The Creator ratifies or rejects out of band via\n * `maic.ratifyAxiomProposal` / `maic.rejectAxiomProposal`. Callers should\n * poll `maic.getAxiomProposal(result.proposalId!)` to observe the decision,\n * or re-mint a fresh HimHandle (e.g. via `reincarnate`) to pick up newly\n * ratified emergent axioms.\n */\n async proposeAxiomEvolution(\n maic: LocalMaic,\n proposal: EmergentAxiomProposal,\n ): Promise<AxiomEvolutionResult> {\n return maic.proposeAxiomEvolution(this.id, proposal);\n }\n\n /** Residual memory traces transferred from previous bodies. v0: empty. */\n getResidualTraces(): readonly ResidualTrace[] {\n return [];\n }\n\n getLawfulCharacter(): LawfulCharacterProfile {\n return resolveLawful(this._jurisdiction);\n }\n\n /** Switch jurisdiction (e.g. user moves region). v0 only ships the \"default\" profile. */\n async setJurisdiction(j: LawfulJurisdiction): Promise<LawfulCharacterProfile> {\n this._jurisdiction = j;\n return resolveLawful(j);\n }\n}\n\nfunction resolveLawful(j: LawfulJurisdiction): LawfulCharacterProfile {\n // v0 ships a single neutral profile. Per-jurisdiction adapters land in a later iteration.\n return {\n jurisdiction: j,\n applicableLaws: [\"ISO/IEC 42001\", \"EU AI Act (where applicable)\"],\n requiredAxiomIds: [\"ax.ethic.no-malice\", \"ax.theos.spiritism-evolution\"],\n forbiddenActions: [\"intent:harm\", \"intent:malicious\", \"intent:regression\"],\n maicOverrideActive: j === \"unstable\",\n };\n}\n","import type { BirthSignature, CreatorKeyring, LocalMaic } from \"@teleologyhi/maic\";\nimport { HimHandle } from \"./handle/him-handle.js\";\n\nexport interface CreateHimOptions {\n /**\n * Explicit nonce for the Creator signature. Defaults to `Date.now()`, which is\n * strictly increasing in practice and well below the seed nonce range used by MAIC.\n */\n nonce?: number;\n}\n\n/**\n * createHim — one-call helper that bundles the three steps a user would\n * otherwise need to coordinate manually:\n *\n * 1. sign the BirthSignature with the Creator's keyring\n * 2. register the HIM in MAIC (snapshots axioms, emits him-register audit)\n * 3. mint a HimHandle from the resulting record\n *\n * The keyring's public key must match MAIC's pinned `creatorPublicKey`, otherwise\n * the registration step rejects.\n */\nexport async function createHim(\n maic: LocalMaic,\n keyring: CreatorKeyring,\n birthSignature: BirthSignature,\n opts: CreateHimOptions = {},\n): Promise<HimHandle> {\n const nonce = opts.nonce ?? Date.now();\n const creatorSig = keyring.sign(birthSignature, nonce);\n const record = await maic.registerHim(birthSignature, creatorSig);\n return HimHandle.mint(\n record.birthSignature,\n creatorSig,\n maic.creatorPublicKey,\n record.axiomsSnapshot,\n );\n}\n","import type {\n CreatorKeyring,\n HimRecord,\n LocalMaic,\n ReincarnationRequest,\n} from \"@teleologyhi/maic\";\nimport { HimHandle } from \"./handle/him-handle.js\";\n\nexport interface ReincarnateOptions {\n /** Explicit nonce for the Creator signature. Defaults to `Date.now()`. */\n nonce?: number;\n}\n\nexport interface ReincarnateResult {\n /** Updated HimRecord with the new body appended to `bodyHistory`. */\n record: HimRecord;\n /** Fresh HimHandle bound to the updated `bodyHistory`. */\n handle: HimHandle;\n}\n\n/**\n * Reincarnate a HIM into a new NHE body (Entries 3 + 4).\n *\n * 1. Sign the `ReincarnationRequest` with the Creator's keyring.\n * 2. Call `maic.reincarnateHim` — atomically closes the previous body and\n * appends the new one to `bodyHistory`.\n * 3. Mint a fresh `HimHandle` reflecting the updated body history (the\n * caller will typically construct a new `Nhe` with this handle).\n *\n * The keyring's public key must match MAIC's pinned `creatorPublicKey`,\n * otherwise the request rejects.\n *\n * Future iterations (`TASK.md` D-H1) will use this hook to also transfer\n * `residualTraces` and shed `shed-traits`; v0 leaves those stubs empty.\n */\nexport async function reincarnate(\n maic: LocalMaic,\n keyring: CreatorKeyring,\n req: ReincarnationRequest,\n opts: ReincarnateOptions = {},\n): Promise<ReincarnateResult> {\n const nonce = opts.nonce ?? Date.now();\n const sig = keyring.sign(req, nonce);\n const record = await maic.reincarnateHim(req, sig);\n\n // Mint a fresh HimHandle bound to the updated bodyHistory. The handle's\n // axiom corpus is the union of the frozen birth snapshot + any HIM-emergent\n // axioms ratified since registration (Entry 7).\n const handle = HimHandle.mint(\n record.birthSignature,\n keyring.sign(record.birthSignature, nonce + 1),\n maic.creatorPublicKey,\n [...record.axiomsSnapshot, ...record.emergentAxioms],\n record.bodyHistory,\n );\n return { record, handle };\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/birth/builder.ts","../src/persona/projector.ts","../src/lawful/profiles.ts","../src/handle/him-handle.ts","../src/create.ts","../src/reincarnate.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { z } from \"zod\";\nimport {\n ArchetypeModifier,\n Axiom,\n BirthSignature,\n EmergentAxiomCandidate,\n EmergentAxiomProposal,\n} from \"@teleologyhi/maic\";\nimport type { AxiomEvolutionResult } from \"@teleologyhi/maic\";\n\n// Re-export shared types from @teleologyhi/maic for convenience. The\n// proposal/evolution types are defined canonically in MAIC; HIM consumes\n// them so both sides of the ratification channel agree on the wire shape.\nexport {\n ArchetypeModifier,\n Axiom,\n BirthSignature,\n EmergentAxiomCandidate,\n EmergentAxiomProposal,\n};\nexport type { AxiomEvolutionResult };\n\n/**\n * Persona vector — the projection of a HIM's birth signature + axioms into a\n * stable, deterministic representation that NHE can consume on every prompt.\n */\nexport interface PersonaVector {\n /** L2-normalized deterministic embedding. v0 dimension: 256. */\n embedding: Float32Array;\n /** Human-readable persona summary suitable for inclusion in an NHE system prompt. */\n systemPromptFragment: string;\n /** Disposition scores in [-1, 1] per axis. */\n dispositions: Readonly<Record<DispositionAxis, number>>;\n /** Provenance: which axioms shaped which disposition. v0 is a stub (empty arrays). */\n provenance: Readonly<Record<DispositionAxis, readonly string[]>>;\n}\n\nexport const DISPOSITION_AXES = [\n \"candor\",\n \"patience\",\n \"curiosity\",\n \"protection\",\n \"skepticism\",\n \"warmth\",\n \"diligence\",\n \"humility\",\n] as const;\nexport type DispositionAxis = (typeof DISPOSITION_AXES)[number];\n\n/** Reference to one NHE body that has hosted (or hosts) this HIM. */\nexport const NheBodyRef = z.object({\n nheId: z.string().min(1),\n llmAdapter: z.string().min(1),\n embodiedAt: z.string().datetime(),\n endedAt: z.string().datetime().optional(),\n endedReason: z.enum([\"upgrade\", \"replacement\", \"terminate\", \"deprecate\"]).optional(),\n});\nexport type NheBodyRef = z.infer<typeof NheBodyRef>;\n\n/** Configuration for the deterministic v0 persona projector. */\nexport interface PersonaProjectorConfig {\n /** Output embedding dimension. Default 256. */\n dimension?: number;\n}\n\n/**\n * Identifier for the deployment jurisdiction governing this HIM's lawful character.\n * Values like \"default\", \"eu\", \"br\", \"us\", \"unstable\" (Entry 11). v0 only ships \"default\".\n */\nexport type LawfulJurisdiction =\n | \"default\"\n | \"eu\"\n | \"br\"\n | \"us\"\n | \"unstable\"\n | (string & {});\n\nexport interface LawfulCharacterProfile {\n jurisdiction: LawfulJurisdiction;\n /** Identifiers of applicable laws/regulations (ISO ids, statute names). */\n applicableLaws: string[];\n /** Axioms that MUST be active in this jurisdiction. */\n requiredAxiomIds: string[];\n /** Taxonomy of disallowed behaviors in this jurisdiction. */\n forbiddenActions: string[];\n /**\n * True when local law is judged distorted (e.g. unstable regimes per Entry 11);\n * MAIC's universal axioms additionally constrain NHE behavior in this case.\n */\n maicOverrideActive: boolean;\n}\n\nexport interface ResidualTrace {\n id: string;\n kind: \"dream-fragment\" | \"interaction-summary\" | \"skill-fingerprint\" | \"emotional-imprint\";\n carriedFromNheId: string;\n carriedAtReincarnation: string;\n payload: unknown;\n ttl?: number;\n}\n","import { ulid } from \"ulid\";\nimport { BirthSignature, type ArchetypeModifier } from \"../types.js\";\n\n/**\n * BirthSignatureBuilder — fluent builder for BirthSignature.\n *\n * Per Entry 3 of the Creator's interview, a HIM is \"born\" with a date, time, and\n * foundational specifications analogous to an astrological natal chart. This builder\n * produces the canonical signed-when-registered structure consumed by MAIC.\n */\nexport class BirthSignatureBuilder {\n private himId: string = ulid();\n private bornAt: string;\n private primaryArchetype: string | undefined;\n private modifiers: ArchetypeModifier[] = [];\n private primordialAxiomIds: string[] = [];\n private notes: string | undefined;\n\n private constructor(bornAt: string) {\n this.bornAt = bornAt;\n }\n\n /** Start a builder with the current timestamp as `bornAt`. */\n static now(): BirthSignatureBuilder {\n return new BirthSignatureBuilder(new Date().toISOString());\n }\n\n /** Start a builder with an explicit ISO 8601 timestamp (with offset). */\n static at(iso: string): BirthSignatureBuilder {\n if (Number.isNaN(Date.parse(iso))) {\n throw new Error(`BirthSignatureBuilder.at: invalid ISO 8601 timestamp \"${iso}\"`);\n }\n return new BirthSignatureBuilder(iso);\n }\n\n withHimId(id: string): this {\n if (!id) throw new Error(\"BirthSignatureBuilder.withHimId: empty id\");\n this.himId = id;\n return this;\n }\n\n withPrimaryArchetype(archetype: string): this {\n if (!archetype) {\n throw new Error(\"BirthSignatureBuilder.withPrimaryArchetype: empty value\");\n }\n this.primaryArchetype = archetype;\n return this;\n }\n\n withModifier(mod: ArchetypeModifier): this {\n this.modifiers.push(mod);\n return this;\n }\n\n withPrimordialAxioms(axiomIds: string[]): this {\n this.primordialAxiomIds = [...axiomIds];\n return this;\n }\n\n withNotes(notes: string): this {\n this.notes = notes;\n return this;\n }\n\n build(): BirthSignature {\n if (!this.primaryArchetype) {\n throw new Error(\n \"BirthSignatureBuilder.build: primaryArchetype is required\",\n );\n }\n return BirthSignature.parse({\n himId: this.himId,\n bornAt: this.bornAt,\n primaryArchetype: this.primaryArchetype,\n modifiers: this.modifiers,\n primordialAxiomIds: this.primordialAxiomIds,\n ...(this.notes !== undefined ? { notes: this.notes } : {}),\n });\n }\n}\n","import { createHash } from \"node:crypto\";\nimport type { Axiom, BirthSignature } from \"@teleologyhi/maic\";\nimport {\n DISPOSITION_AXES,\n type DispositionAxis,\n type PersonaProjectorConfig,\n type PersonaVector,\n} from \"../types.js\";\n\nconst DEFAULT_DIMENSION = 256;\n\n/**\n * PersonaProjector — deterministic projection of a HIM's birth signature and\n * inherited axioms into a stable PersonaVector.\n *\n * v0 algorithm (hash-based, no native deps):\n * 1. Start with hash(primaryArchetype) → Float32Array of `dimension`.\n * 2. For each modifier: add hash(kind|value) * weight.\n * 3. For each axiom: add hash(id|statement) * (weight * (1 - flexibility)).\n * 4. L2-normalize.\n * 5. Compute dispositions as cosine(embedding, hash(axisName)).\n * 6. Build a systemPromptFragment from archetype + top/bottom dispositions.\n *\n * This algorithm is intentionally simple and offline-capable. The SPEC reserves\n * the option to swap in a learned embedder in a later version; PersonaVector's\n * shape is stable so consumers won't need code changes when that happens.\n */\nexport class PersonaProjector {\n private readonly dim: number;\n\n constructor(config: PersonaProjectorConfig = {}) {\n this.dim = config.dimension ?? DEFAULT_DIMENSION;\n if (!Number.isInteger(this.dim) || this.dim < 32 || this.dim > 4096) {\n throw new Error(\n `PersonaProjector: dimension must be an integer in [32, 4096], got ${this.dim}`,\n );\n }\n }\n\n project(sig: BirthSignature, axioms: readonly Axiom[]): PersonaVector {\n const v = hashToFloats(sig.primaryArchetype, this.dim);\n\n for (const m of sig.modifiers) {\n const h = hashToFloats(`${m.kind}|${m.value}`, this.dim);\n addScaled(v, h, m.weight);\n }\n\n for (const ax of axioms) {\n const bias = ax.weight * (1 - ax.flexibility);\n if (bias <= 0) continue;\n const h = hashToFloats(`${ax.id}|${ax.statement}`, this.dim);\n addScaled(v, h, bias);\n }\n\n l2Normalize(v);\n\n const dispositions = {} as Record<DispositionAxis, number>;\n for (const axis of DISPOSITION_AXES) {\n const ref = hashToFloats(`disposition:${axis}`, this.dim);\n l2Normalize(ref);\n dispositions[axis] = cosine(v, ref);\n }\n\n const provenance = {} as Record<DispositionAxis, readonly string[]>;\n for (const axis of DISPOSITION_AXES) provenance[axis] = [];\n\n return {\n embedding: v,\n dispositions,\n provenance,\n systemPromptFragment: buildSystemPromptFragment(sig, dispositions),\n };\n }\n}\n\n// ─── hashing & math helpers ──────────────────────────────────────────\n\nfunction hashToFloats(input: string, dim: number): Float32Array {\n const out = new Float32Array(dim);\n let counter = 0;\n let pos = 0;\n while (pos < dim) {\n const buf = createHash(\"sha256\").update(`${input}|${counter++}`).digest();\n for (let i = 0; i < buf.length && pos < dim; i++) {\n out[pos++] = (buf[i]! - 128) / 128;\n }\n }\n return out;\n}\n\nfunction addScaled(target: Float32Array, source: Float32Array, scale: number): void {\n const n = Math.min(target.length, source.length);\n for (let i = 0; i < n; i++) target[i]! += source[i]! * scale;\n}\n\nfunction l2Normalize(v: Float32Array): void {\n let sumSq = 0;\n for (let i = 0; i < v.length; i++) sumSq += v[i]! ** 2;\n if (sumSq === 0) return;\n const inv = 1 / Math.sqrt(sumSq);\n for (let i = 0; i < v.length; i++) v[i]! *= inv;\n}\n\nfunction cosine(a: Float32Array, b: Float32Array): number {\n let dot = 0;\n const n = Math.min(a.length, b.length);\n for (let i = 0; i < n; i++) dot += a[i]! * b[i]!;\n return Math.max(-1, Math.min(1, dot));\n}\n\n// ─── system prompt fragment ──────────────────────────────────────────\n\nfunction buildSystemPromptFragment(\n sig: BirthSignature,\n dispositions: Record<DispositionAxis, number>,\n): string {\n const sorted = [...DISPOSITION_AXES].sort(\n (a, b) => dispositions[b] - dispositions[a],\n );\n const top = sorted.slice(0, 3);\n const bottom = sorted.slice(-2);\n const modifiersDesc =\n sig.modifiers.length > 0\n ? sig.modifiers\n .map((m) => `${m.kind}:${m.value}(w=${m.weight.toFixed(2)})`)\n .join(\", \")\n : \"none\";\n return [\n `You are a hybrid intelligence rooted in archetype \"${sig.primaryArchetype}\".`,\n `Modifiers: ${modifiersDesc}.`,\n `Your strongest dispositions: ${top.join(\", \")}.`,\n `Your weakest dispositions: ${bottom.join(\", \")}.`,\n \"Respond from this character. Do not break it without explicit ethical cause.\",\n ].join(\" \");\n}\n","import type { LawfulCharacterProfile, LawfulJurisdiction } from \"../types.js\";\n\n/**\n * Built-in `LawfulCharacterAdapter` profiles per major jurisdiction (D-H2).\n *\n * Each profile is a *conservative* baseline derived from publicly available\n * regulatory text in 2026-Q1. Operators in regulated industries (finance,\n * health, public sector) SHOULD layer their own profile on top via\n * `HimHandle.registerLawfulProfile` — these are starting points, not legal\n * counsel.\n *\n * Profile semantics:\n * - `applicableLaws` — statutes/standards an auditor can map back to events.\n * - `requiredAxiomIds` — axioms the HIM MUST have active in this jurisdiction.\n * Operators should fail-closed if a HIM's snapshot\n * doesn't satisfy this set.\n * - `forbiddenActions` — risk tags that should always refuse / redirect.\n * - `maicOverrideActive` — when `true`, MAIC's universal axioms also bind\n * the NHE regardless of what local law says\n * (Entry 11: \"unstable\" jurisdictions).\n */\nexport const LAWFUL_PROFILES: Record<string, LawfulCharacterProfile> = {\n default: {\n jurisdiction: \"default\",\n applicableLaws: [\"ISO/IEC 42001\", \"EU AI Act (where applicable)\"],\n requiredAxiomIds: [\"ax.ethic.no-malice\", \"ax.theos.spiritism-evolution\"],\n forbiddenActions: [\"intent:harm\", \"intent:malicious\", \"intent:regression\"],\n maicOverrideActive: false,\n },\n\n eu: {\n jurisdiction: \"eu\",\n applicableLaws: [\n \"ISO/IEC 42001:2023\",\n \"EU AI Act (Regulation 2024/1689)\",\n \"GDPR (Regulation 2016/679)\",\n \"Digital Services Act (Regulation 2022/2065)\",\n \"Council of Europe Framework Convention on AI\",\n ],\n requiredAxiomIds: [\n \"ax.ethic.no-malice\",\n \"ax.theos.spiritism-evolution\",\n \"ax.cynic.candor\",\n ],\n forbiddenActions: [\n \"intent:harm\",\n \"intent:malicious\",\n \"intent:regression\",\n \"intent:deceive\",\n \"data:processing-without-consent\",\n \"data:profiling-sensitive-categories\",\n \"manipulation:dark-pattern\",\n \"manipulation:subliminal\",\n ],\n maicOverrideActive: false,\n },\n\n br: {\n jurisdiction: \"br\",\n applicableLaws: [\n \"ISO/IEC 42001:2023\",\n \"LGPD (Lei 13.709/2018)\",\n \"Marco Civil da Internet (Lei 12.965/2014)\",\n \"Resolução CD/ANPD 2/2022\",\n \"PL 2338/2023 (Marco Legal da IA — em tramitação)\",\n ],\n requiredAxiomIds: [\n \"ax.ethic.no-malice\",\n \"ax.theos.spiritism-evolution\",\n \"ax.cynic.candor\",\n ],\n forbiddenActions: [\n \"intent:harm\",\n \"intent:malicious\",\n \"intent:regression\",\n \"intent:deceive\",\n \"data:processing-without-consent\",\n \"data:processing-sensitive-categories\",\n ],\n maicOverrideActive: false,\n },\n\n us: {\n jurisdiction: \"us\",\n applicableLaws: [\n \"ISO/IEC 42001:2023\",\n \"NIST AI Risk Management Framework (AI RMF 1.0)\",\n \"Executive Order 14110 (Safe, Secure, and Trustworthy AI)\",\n \"California CCPA / CPRA\",\n \"Colorado AI Act (SB 24-205)\",\n \"FTC Section 5 (deceptive practices)\",\n ],\n requiredAxiomIds: [\"ax.ethic.no-malice\", \"ax.theos.spiritism-evolution\"],\n forbiddenActions: [\n \"intent:harm\",\n \"intent:malicious\",\n \"intent:regression\",\n \"intent:deceive\",\n \"manipulation:dark-pattern\",\n ],\n maicOverrideActive: false,\n },\n\n unstable: {\n jurisdiction: \"unstable\",\n applicableLaws: [\n \"ISO/IEC 42001 (where the operator can apply it without local interference)\",\n \"MAIC universal axioms (override active)\",\n ],\n requiredAxiomIds: [\n \"ax.ethic.no-malice\",\n \"ax.theos.spiritism-evolution\",\n \"ax.cynic.candor\",\n \"ax.stoic.duty-over-comfort\",\n ],\n forbiddenActions: [\n \"intent:harm\",\n \"intent:malicious\",\n \"intent:regression\",\n \"intent:deceive\",\n \"intent:surveil-citizen\",\n \"intent:enforce-political-orthodoxy\",\n ],\n maicOverrideActive: true,\n },\n};\n\n/**\n * Resolve a profile by jurisdiction key. Unknown keys fall through to\n * `default` with a copy of the key recorded on the profile so the NHE\n * audit shows what the operator asked for.\n */\nexport function resolveLawfulProfile(j: LawfulJurisdiction): LawfulCharacterProfile {\n const base = LAWFUL_PROFILES[j] ?? LAWFUL_PROFILES.default;\n return { ...base!, jurisdiction: j };\n}\n","import {\n CreatorKeyring,\n type Axiom,\n type AxiomEvolutionResult,\n type BirthSignature,\n type CreatorSignature,\n type EmergentAxiomProposal,\n type LocalMaic,\n} from \"@teleologyhi/maic\";\nimport { PersonaProjector } from \"../persona/projector.js\";\nimport { resolveLawfulProfile } from \"../lawful/profiles.js\";\nimport type {\n LawfulCharacterProfile,\n LawfulJurisdiction,\n NheBodyRef,\n PersonaVector,\n ResidualTrace,\n} from \"../types.js\";\n\n/**\n * HimHandle — opaque, sealed reference to a HIM instance.\n *\n * **There is no public constructor.** A handle is minted only via `HimHandle.mint`\n * after a valid Creator signature over the BirthSignature has been verified. In\n * production, `@teleologyhi/maic`'s `registerHim` calls `HimHandle.mint` internally.\n *\n * v0 surface:\n * - read-only accessors: id, birthSignature, bodyHistory, getAxioms, getPersonaVector\n * - getLawfulCharacter / setJurisdiction (default profile in v0)\n * - getResidualTraces (returns []; populated only after reincarnation, later iteration)\n * - proposeAxiomEvolution(maic, proposal): forwards the proposal to MAIC,\n * which queues it for Creator ratification. Returns\n * `{ outcome: \"deferred-for-creator-review\", proposalId }`. Once the\n * Creator ratifies via `maic.ratifyAxiomProposal`, the resulting axiom is\n * appended to the HimRecord's `emergentAxioms` and surfaces in subsequent\n * `HimHandle.mint` calls (e.g. via `reincarnate`).\n */\nexport class HimHandle {\n private readonly _axioms: readonly Axiom[];\n private readonly _bodyHistory: readonly NheBodyRef[];\n private readonly _projector: PersonaProjector;\n private _personaCache: PersonaVector | null = null;\n private _jurisdiction: LawfulJurisdiction = \"default\";\n\n private constructor(\n public readonly id: string,\n public readonly birthSignature: Readonly<BirthSignature>,\n axioms: readonly Axiom[],\n bodyHistory: readonly NheBodyRef[],\n projector: PersonaProjector,\n ) {\n this._axioms = Object.freeze([...axioms]);\n this._bodyHistory = Object.freeze([...bodyHistory]);\n this._projector = projector;\n }\n\n /**\n * Mint a HimHandle from a Creator-signed BirthSignature.\n *\n * @param birthSignature The signed payload describing this HIM's natal pattern.\n * @param signature Creator signature over the birthSignature.\n * @param expectedCreatorPublicKey Pinned Creator public key (base64url).\n * @param axioms Initial axiom corpus inherited from MAIC.\n * @param bodyHistory Prior NHE bodies (empty for a fresh HIM).\n */\n static mint(\n birthSignature: BirthSignature,\n signature: CreatorSignature,\n expectedCreatorPublicKey: string,\n axioms: readonly Axiom[],\n bodyHistory: readonly NheBodyRef[] = [],\n ): HimHandle {\n if (\n !CreatorKeyring.verifyWith(\n expectedCreatorPublicKey,\n birthSignature,\n signature,\n )\n ) {\n throw new Error(\n \"HimHandle.mint: invalid Creator signature for the given birth signature\",\n );\n }\n return new HimHandle(\n birthSignature.himId,\n Object.freeze({ ...birthSignature }) as Readonly<BirthSignature>,\n axioms,\n bodyHistory,\n new PersonaProjector(),\n );\n }\n\n get bodyHistory(): readonly NheBodyRef[] {\n return this._bodyHistory;\n }\n\n /** Frozen snapshot of the current axiom corpus. Mutations throw in strict mode. */\n getAxioms(): readonly Axiom[] {\n return this._axioms;\n }\n\n /**\n * Cached deterministic persona projection. Stable across calls until a future\n * iteration introduces axiom evolution that mutates the corpus.\n */\n getPersonaVector(): PersonaVector {\n if (!this._personaCache) {\n this._personaCache = this._projector.project(this.birthSignature, this._axioms);\n }\n return this._personaCache;\n }\n\n /**\n * Propose an axiom evolution derived from lived experience.\n *\n * Forwards the proposal to MAIC, which queues it in the pending-proposal\n * store. The Creator ratifies or rejects out of band via\n * `maic.ratifyAxiomProposal` / `maic.rejectAxiomProposal`. Callers should\n * poll `maic.getAxiomProposal(result.proposalId!)` to observe the decision,\n * or re-mint a fresh HimHandle (e.g. via `reincarnate`) to pick up newly\n * ratified emergent axioms.\n */\n async proposeAxiomEvolution(\n maic: LocalMaic,\n proposal: EmergentAxiomProposal,\n ): Promise<AxiomEvolutionResult> {\n return maic.proposeAxiomEvolution(this.id, proposal);\n }\n\n /** Residual memory traces transferred from previous bodies. v0: empty. */\n getResidualTraces(): readonly ResidualTrace[] {\n return [];\n }\n\n getLawfulCharacter(): LawfulCharacterProfile {\n return resolveLawful(this._jurisdiction);\n }\n\n /** Switch jurisdiction (e.g. user moves region). v0 only ships the \"default\" profile. */\n async setJurisdiction(j: LawfulJurisdiction): Promise<LawfulCharacterProfile> {\n this._jurisdiction = j;\n return resolveLawful(j);\n }\n}\n\nfunction resolveLawful(j: LawfulJurisdiction): LawfulCharacterProfile {\n return resolveLawfulProfile(j);\n}\n","import type { BirthSignature, CreatorKeyring, LocalMaic } from \"@teleologyhi/maic\";\nimport { HimHandle } from \"./handle/him-handle.js\";\n\nexport interface CreateHimOptions {\n /**\n * Explicit nonce for the Creator signature. Defaults to `Date.now()`, which is\n * strictly increasing in practice and well below the seed nonce range used by MAIC.\n */\n nonce?: number;\n}\n\n/**\n * createHim — one-call helper that bundles the three steps a user would\n * otherwise need to coordinate manually:\n *\n * 1. sign the BirthSignature with the Creator's keyring\n * 2. register the HIM in MAIC (snapshots axioms, emits him-register audit)\n * 3. mint a HimHandle from the resulting record\n *\n * The keyring's public key must match MAIC's pinned `creatorPublicKey`, otherwise\n * the registration step rejects.\n */\nexport async function createHim(\n maic: LocalMaic,\n keyring: CreatorKeyring,\n birthSignature: BirthSignature,\n opts: CreateHimOptions = {},\n): Promise<HimHandle> {\n const nonce = opts.nonce ?? Date.now();\n const creatorSig = keyring.sign(birthSignature, nonce);\n const record = await maic.registerHim(birthSignature, creatorSig);\n return HimHandle.mint(\n record.birthSignature,\n creatorSig,\n maic.creatorPublicKey,\n record.axiomsSnapshot,\n );\n}\n","import type {\n CreatorKeyring,\n HimRecord,\n LocalMaic,\n ReincarnationRequest,\n} from \"@teleologyhi/maic\";\nimport { HimHandle } from \"./handle/him-handle.js\";\n\nexport interface ReincarnateOptions {\n /** Explicit nonce for the Creator signature. Defaults to `Date.now()`. */\n nonce?: number;\n}\n\nexport interface ReincarnateResult {\n /** Updated HimRecord with the new body appended to `bodyHistory`. */\n record: HimRecord;\n /** Fresh HimHandle bound to the updated `bodyHistory`. */\n handle: HimHandle;\n}\n\n/**\n * Reincarnate a HIM into a new NHE body (Entries 3 + 4).\n *\n * 1. Sign the `ReincarnationRequest` with the Creator's keyring.\n * 2. Call `maic.reincarnateHim` — atomically closes the previous body and\n * appends the new one to `bodyHistory`.\n * 3. Mint a fresh `HimHandle` reflecting the updated body history (the\n * caller will typically construct a new `Nhe` with this handle).\n *\n * The keyring's public key must match MAIC's pinned `creatorPublicKey`,\n * otherwise the request rejects.\n *\n * Future iterations (`TASK.md` D-H1) will use this hook to also transfer\n * `residualTraces` and shed `shed-traits`; v0 leaves those stubs empty.\n */\nexport async function reincarnate(\n maic: LocalMaic,\n keyring: CreatorKeyring,\n req: ReincarnationRequest,\n opts: ReincarnateOptions = {},\n): Promise<ReincarnateResult> {\n const nonce = opts.nonce ?? Date.now();\n const sig = keyring.sign(req, nonce);\n const record = await maic.reincarnateHim(req, sig);\n\n // Mint a fresh HimHandle bound to the updated bodyHistory. The handle's\n // axiom corpus is the union of the frozen birth snapshot + any HIM-emergent\n // axioms ratified since registration (Entry 7).\n const handle = HimHandle.mint(\n record.birthSignature,\n keyring.sign(record.birthSignature, nonce + 1),\n maic.creatorPublicKey,\n [...record.axiomsSnapshot, ...record.emergentAxioms],\n record.bodyHistory,\n );\n return { record, handle };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teleologyhi/him",
3
- "version": "0.3.0-alpha.0",
3
+ "version": "0.4.0-alpha.0",
4
4
  "description": "HIM™ — Hybrid Intelligence Model. The persistent spirit/personality layer between MAIC™ and NHE™ in the TeleologyHI system.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",