paracosm 0.7.455 → 0.7.458

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/cli/run-dashboard.d.ts +8 -5
  2. package/dist/cli/run-dashboard.d.ts.map +1 -1
  3. package/dist/cli/run-dashboard.js +8 -5
  4. package/dist/cli/run-dashboard.js.map +1 -1
  5. package/dist/cli/run.js +8 -1
  6. package/dist/cli/run.js.map +1 -1
  7. package/dist/engine/index.d.ts +8 -1
  8. package/dist/engine/index.d.ts.map +1 -1
  9. package/dist/engine/index.js +11 -1
  10. package/dist/engine/index.js.map +1 -1
  11. package/dist/engine/schema/artifact.d.ts +4 -4
  12. package/dist/engine/schema/primitives.d.ts +7 -7
  13. package/dist/engine/trait-models/ai-agent.d.ts +24 -0
  14. package/dist/engine/trait-models/ai-agent.d.ts.map +1 -0
  15. package/dist/engine/trait-models/ai-agent.js +160 -0
  16. package/dist/engine/trait-models/ai-agent.js.map +1 -0
  17. package/dist/engine/trait-models/builtins.d.ts +17 -0
  18. package/dist/engine/trait-models/builtins.d.ts.map +1 -0
  19. package/dist/engine/trait-models/builtins.js +32 -0
  20. package/dist/engine/trait-models/builtins.js.map +1 -0
  21. package/dist/engine/trait-models/cue-translator.d.ts +58 -0
  22. package/dist/engine/trait-models/cue-translator.d.ts.map +1 -0
  23. package/dist/engine/trait-models/cue-translator.js +73 -0
  24. package/dist/engine/trait-models/cue-translator.js.map +1 -0
  25. package/dist/engine/trait-models/drift.d.ts +53 -0
  26. package/dist/engine/trait-models/drift.d.ts.map +1 -0
  27. package/dist/engine/trait-models/drift.js +88 -0
  28. package/dist/engine/trait-models/drift.js.map +1 -0
  29. package/dist/engine/trait-models/hexaco.d.ts +22 -0
  30. package/dist/engine/trait-models/hexaco.d.ts.map +1 -0
  31. package/dist/engine/trait-models/hexaco.js +168 -0
  32. package/dist/engine/trait-models/hexaco.js.map +1 -0
  33. package/dist/engine/trait-models/index.d.ts +162 -0
  34. package/dist/engine/trait-models/index.d.ts.map +1 -0
  35. package/dist/engine/trait-models/index.js +156 -0
  36. package/dist/engine/trait-models/index.js.map +1 -0
  37. package/dist/runtime/schemas/department.d.ts +6 -6
  38. package/package.json +1 -1
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Trait Model Registry. Pluggable interface for leader / agent
3
+ * personality (or, for non-human leaders, decision-tendency) models.
4
+ *
5
+ * Today paracosm ships two built-in models:
6
+ * - 'hexaco' six-axis Ashton-Lee personality (the historical default)
7
+ * - 'ai-agent' six-axis AI-system tendency model
8
+ *
9
+ * Adding a third model post-hoc is a single `traitModelRegistry.register(...)`
10
+ * call. See `docs/superpowers/specs/2026-04-26-trait-model-generalization-design.md`.
11
+ *
12
+ * @module paracosm/engine/trait-models
13
+ */
14
+ /* ─────────────────────────── registry ─────────────────────────── */
15
+ /**
16
+ * Thrown when a TraitProfile references an unregistered modelId.
17
+ */
18
+ export class UnknownTraitModelError extends Error {
19
+ modelId;
20
+ registered;
21
+ constructor(modelId, registered) {
22
+ const list = registered.length > 0 ? registered.join(', ') : '(none)';
23
+ super(`Unknown trait model id: '${modelId}'. ` +
24
+ `Registered models: ${list}. ` +
25
+ `If this artifact was created by a newer paracosm version, upgrade. ` +
26
+ `If you registered a custom model, ensure paracosm/engine/trait-models loads first.`);
27
+ this.modelId = modelId;
28
+ this.registered = registered;
29
+ this.name = 'UnknownTraitModelError';
30
+ }
31
+ }
32
+ /**
33
+ * In-memory map of TraitModel by id. The runtime singleton lives at
34
+ * `traitModelRegistry`; tests and isolated callers can construct
35
+ * their own via `new TraitModelRegistry()`.
36
+ */
37
+ export class TraitModelRegistry {
38
+ models = new Map();
39
+ /**
40
+ * Register a model. Throws if a model with the same id is already
41
+ * registered (registration-time-only; no live re-binding).
42
+ */
43
+ register(model) {
44
+ if (this.models.has(model.id)) {
45
+ throw new Error(`TraitModelRegistry.register: id '${model.id}' is already registered. ` +
46
+ `Re-registration is not supported; use a unique id.`);
47
+ }
48
+ this.assertValid(model);
49
+ this.models.set(model.id, model);
50
+ }
51
+ /** Return the model or `undefined` if not registered. */
52
+ get(modelId) {
53
+ return this.models.get(modelId);
54
+ }
55
+ /** Return the model or throw `UnknownTraitModelError`. */
56
+ require(modelId) {
57
+ const model = this.models.get(modelId);
58
+ if (!model)
59
+ throw new UnknownTraitModelError(modelId, this.list().map(m => m.id));
60
+ return model;
61
+ }
62
+ /** All registered models in registration order. */
63
+ list() {
64
+ return Array.from(this.models.values());
65
+ }
66
+ /**
67
+ * Validate model shape: axes match defaults + drift + cues, ids are
68
+ * kebab-case, defaults are in [0, 1].
69
+ */
70
+ assertValid(model) {
71
+ if (!/^[a-z0-9-]+$/.test(model.id)) {
72
+ throw new Error(`TraitModel.id must be kebab-case: '${model.id}'`);
73
+ }
74
+ if (model.axes.length < 2 || model.axes.length > 12) {
75
+ throw new Error(`TraitModel.axes count must be 2..12, got ${model.axes.length}`);
76
+ }
77
+ const axisIds = new Set();
78
+ for (const axis of model.axes) {
79
+ // Axis ids accept kebab-case OR camelCase identifier-safe strings.
80
+ // The hexaco model's `honestyHumility` axis is camelCase to match
81
+ // the legacy LeaderConfig.hexaco.honestyHumility field name so the
82
+ // back-compat resolver can synthesize TraitProfile.traits from
83
+ // the legacy field without renaming. New models should still
84
+ // prefer kebab-case for new axes.
85
+ if (!/^[a-zA-Z0-9_-]+$/.test(axis.id)) {
86
+ throw new Error(`TraitAxis.id must be identifier-safe: '${axis.id}' (model: ${model.id})`);
87
+ }
88
+ if (axisIds.has(axis.id)) {
89
+ throw new Error(`Duplicate axis id '${axis.id}' in model '${model.id}'`);
90
+ }
91
+ axisIds.add(axis.id);
92
+ const def = model.defaults[axis.id];
93
+ if (typeof def !== 'number' || def < 0 || def > 1 || Number.isNaN(def)) {
94
+ throw new Error(`TraitModel '${model.id}' axis '${axis.id}': defaults must be a number in [0, 1], got ${def}`);
95
+ }
96
+ }
97
+ // Sanity check drift / cues only reference declared axes; missing
98
+ // axes are tolerated (treated as zero / no cue).
99
+ for (const axisId of Object.keys(model.drift.outcomes)) {
100
+ if (!axisIds.has(axisId)) {
101
+ throw new Error(`TraitModel '${model.id}' drift.outcomes references unknown axis '${axisId}'`);
102
+ }
103
+ }
104
+ for (const axisId of Object.keys(model.cues)) {
105
+ if (!axisIds.has(axisId)) {
106
+ throw new Error(`TraitModel '${model.id}' cues references unknown axis '${axisId}'`);
107
+ }
108
+ }
109
+ }
110
+ }
111
+ /**
112
+ * Process-wide singleton registry. The hexaco + ai-agent built-ins
113
+ * register on import via `engine/trait-models/builtins.ts` (which is
114
+ * imported by `engine/index.ts`). External consumers should `import
115
+ * { traitModelRegistry } from 'paracosm/engine/trait-models'`.
116
+ */
117
+ export const traitModelRegistry = new TraitModelRegistry();
118
+ /* ─────────────────────────── helpers ─────────────────────────── */
119
+ /**
120
+ * Clamp a numeric trait value to [0, 1]. Used by the drift dispatcher
121
+ * after applying outcome / leader-pull / role-activation deltas.
122
+ */
123
+ export function clampTrait(value) {
124
+ if (Number.isNaN(value))
125
+ return 0.5;
126
+ if (value < 0)
127
+ return 0;
128
+ if (value > 1)
129
+ return 1;
130
+ return value;
131
+ }
132
+ /**
133
+ * Compute the zone for a trait value: 'low' when <= 0.35, 'high' when
134
+ * >= 0.65, 'mid' otherwise. Used by the cue translator.
135
+ */
136
+ export function traitZone(value) {
137
+ if (value <= 0.35)
138
+ return 'low';
139
+ if (value >= 0.65)
140
+ return 'high';
141
+ return 'mid';
142
+ }
143
+ /**
144
+ * Fill a partial trait map with model defaults so every axis has a
145
+ * value. Idempotent: existing keys are preserved.
146
+ */
147
+ export function withDefaults(partial, model) {
148
+ const out = { ...model.defaults };
149
+ for (const axis of model.axes) {
150
+ if (axis.id in partial) {
151
+ out[axis.id] = clampTrait(partial[axis.id]);
152
+ }
153
+ }
154
+ return out;
155
+ }
156
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/engine/trait-models/index.ts"],"names":[],"mappings":"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"}
@@ -17,18 +17,18 @@ export declare const CitationSchema: z.ZodObject<{
17
17
  }, z.core.$strip>;
18
18
  export declare const RiskSchema: z.ZodObject<{
19
19
  severity: z.ZodEnum<{
20
- critical: "critical";
21
20
  low: "low";
22
- medium: "medium";
23
21
  high: "high";
22
+ critical: "critical";
23
+ medium: "medium";
24
24
  }>;
25
25
  description: z.ZodString;
26
26
  }, z.core.$strip>;
27
27
  export declare const OpportunitySchema: z.ZodObject<{
28
28
  impact: z.ZodEnum<{
29
29
  low: "low";
30
- medium: "medium";
31
30
  high: "high";
31
+ medium: "medium";
32
32
  }>;
33
33
  description: z.ZodString;
34
34
  }, z.core.$strip>;
@@ -82,18 +82,18 @@ export declare const DepartmentReportSchema: z.ZodObject<{
82
82
  }, z.core.$strip>>>;
83
83
  risks: z.ZodDefault<z.ZodArray<z.ZodObject<{
84
84
  severity: z.ZodEnum<{
85
- critical: "critical";
86
85
  low: "low";
87
- medium: "medium";
88
86
  high: "high";
87
+ critical: "critical";
88
+ medium: "medium";
89
89
  }>;
90
90
  description: z.ZodString;
91
91
  }, z.core.$strip>>>;
92
92
  opportunities: z.ZodDefault<z.ZodArray<z.ZodObject<{
93
93
  impact: z.ZodEnum<{
94
94
  low: "low";
95
- medium: "medium";
96
95
  high: "high";
96
+ medium: "medium";
97
97
  }>;
98
98
  description: z.ZodString;
99
99
  }, z.core.$strip>>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "paracosm",
3
- "version": "0.7.455",
3
+ "version": "0.7.458",
4
4
  "description": "Prompt/document/URL-grounded structured world model for AI agents: typed ScenarioPackages, deterministic kernels, HEXACO leaders, LLM events, runtime tool forging, and reproducible counterfactual RunArtifacts. Built on AgentOS.",
5
5
  "type": "module",
6
6
  "main": "dist/engine/index.js",