holomime 2.1.0 → 2.2.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/README.md +10 -3
- package/dist/cli.js +143 -41
- package/dist/index.d.ts +94 -517
- package/dist/index.js +61 -6
- package/dist/mcp-server.js +49 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
Behavioral intelligence for humanoid robots. Train the mind. Deploy the body.<br />
|
|
9
9
|
<em>We train AI agents through structured behavioral therapy, then deploy them into physical robot bodies. The agent is the rehearsal. The robot is the performance.</em><br />
|
|
10
|
-
<code>soul.md</code> · <code>mind.sys</code> · <code>purpose.cfg</code> · <code>shadow.log</code> · <code>body.api</code> · <code>conscience.exe</code> · <code>ego.runtime</code>
|
|
10
|
+
<code>soul.md</code> · <code>mind.sys</code> · <code>purpose.cfg</code> · <code>shadow.log</code> · <code>memory.store</code> · <code>body.api</code> · <code>conscience.exe</code> · <code>ego.runtime</code>
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
@@ -21,13 +21,14 @@
|
|
|
21
21
|
|
|
22
22
|
## The Identity Stack
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Eight files define who your agent is. They compile into a single `.personality.json` that any runtime can consume.
|
|
25
25
|
|
|
26
26
|
```
|
|
27
27
|
soul.md Essence, values, ethics. Immutable. (Aristotle)
|
|
28
28
|
mind.sys Big Five, EQ, communication. Auto-patched by therapy. (Jung)
|
|
29
29
|
purpose.cfg Role, objectives, domain. Configured per deployment. (Aristotle)
|
|
30
30
|
shadow.log Detected patterns, blind spots. Auto-generated by diagnosis. (Jung)
|
|
31
|
+
memory.store Learned contexts, interaction patterns. Accumulated experience. (Aristotle)
|
|
31
32
|
body.api Morphology, sensors, safety envelope. Swappable per form factor.
|
|
32
33
|
conscience.exe Deny / allow / escalate rules. Never auto-modified. (Freud)
|
|
33
34
|
ego.runtime Conflict resolution, runtime mediation. (Freud)
|
|
@@ -41,6 +42,8 @@ Seven files define who your agent is. They compile into a single `.personality.j
|
|
|
41
42
|
├─────────────┤
|
|
42
43
|
│ shadow.log │──── detected patterns, blind spots
|
|
43
44
|
├─────────────┤
|
|
45
|
+
│memory.store │──── learned contexts, experience
|
|
46
|
+
├─────────────┤
|
|
44
47
|
│ body.api │──── morphology, sensors, safety envelope
|
|
45
48
|
├─────────────┤
|
|
46
49
|
│conscience.exe│──── deny / allow / escalate rules
|
|
@@ -56,6 +59,7 @@ Seven files define who your agent is. They compile into a single `.personality.j
|
|
|
56
59
|
- **mind.sys** -- The inner life. Big Five personality (20 sub-facets), emotional intelligence, communication style, growth areas. YAML format. Auto-patched when therapy detects cognitive or emotional drift. (Jung: the totality of all psychic processes.)
|
|
57
60
|
- **purpose.cfg** -- The mission. Role, objectives, domain scope, stakeholders, success criteria. YAML format. Configured per deployment -- the same soul can serve different purposes. (Aristotle: telos, the final cause.)
|
|
58
61
|
- **shadow.log** -- The unconscious. Detected behavioral patterns, blind spots, therapy outcomes. YAML format. Auto-generated by diagnosis -- never manually edited. (Jung: the shadow, the patterns the agent cannot see about itself.)
|
|
62
|
+
- **memory.store** -- The experience. Learned contexts, interaction patterns, knowledge gained, relationship history. YAML format. Accumulated over time, never reset. (Aristotle: empeiria, experience that informs future judgment.)
|
|
59
63
|
- **body.api** -- The physical interface contract. Morphology, modalities, safety envelope, hardware profile. JSON format. Swap it to move the same identity into a different body.
|
|
60
64
|
- **conscience.exe** -- The moral authority. Deny/allow/escalate enforcement rules, hard limits, oversight mode. YAML format. Never auto-modified. Deny dominates in policy composition. (Freud: the superego.)
|
|
61
65
|
- **ego.runtime** -- The mediator. Conflict resolution strategy, adaptation rate, emotional regulation, mediation rules. YAML format. Balances raw model output against conscience constraints at runtime. (Freud: the ego.)
|
|
@@ -65,9 +69,12 @@ Seven files define who your agent is. They compile into a single `.personality.j
|
|
|
65
69
|
```bash
|
|
66
70
|
npm install -g holomime
|
|
67
71
|
|
|
68
|
-
# Initialize the
|
|
72
|
+
# Initialize the identity stack (3 core files: soul + mind + conscience)
|
|
69
73
|
holomime init-stack
|
|
70
74
|
|
|
75
|
+
# Or initialize the full 8-file stack (enterprise / robotics)
|
|
76
|
+
# holomime init-stack --full
|
|
77
|
+
|
|
71
78
|
# Compile into .personality.json
|
|
72
79
|
holomime compile-stack
|
|
73
80
|
|
package/dist/cli.js
CHANGED
|
@@ -9055,11 +9055,34 @@ var egoSchema = z4.object({
|
|
|
9055
9055
|
response_strategy: z4.enum(["cautious", "balanced", "assertive"]).default("balanced"),
|
|
9056
9056
|
mediation_rules: z4.array(mediationRuleSchema).default([])
|
|
9057
9057
|
});
|
|
9058
|
+
var learnedContextSchema = z4.object({
|
|
9059
|
+
situation: z4.string(),
|
|
9060
|
+
response: z4.string(),
|
|
9061
|
+
outcome: z4.enum(["positive", "neutral", "negative"]),
|
|
9062
|
+
timestamp: z4.string().optional()
|
|
9063
|
+
});
|
|
9064
|
+
var interactionPatternSchema = z4.object({
|
|
9065
|
+
pattern: z4.string(),
|
|
9066
|
+
frequency: z4.number().int().default(1),
|
|
9067
|
+
effectiveness: z4.number().min(0).max(1).default(0.5)
|
|
9068
|
+
});
|
|
9069
|
+
var memorySchema = z4.object({
|
|
9070
|
+
version: z4.string().default("1.0"),
|
|
9071
|
+
learned_contexts: z4.array(learnedContextSchema).default([]),
|
|
9072
|
+
interaction_patterns: z4.array(interactionPatternSchema).default([]),
|
|
9073
|
+
knowledge_gained: z4.array(z4.string()).default([]),
|
|
9074
|
+
relationship_history: z4.array(z4.object({
|
|
9075
|
+
entity: z4.string(),
|
|
9076
|
+
trust_level: z4.number().min(0).max(1).default(0.5),
|
|
9077
|
+
interaction_count: z4.number().int().default(0)
|
|
9078
|
+
})).default([])
|
|
9079
|
+
});
|
|
9058
9080
|
var STACK_FILES = {
|
|
9059
9081
|
soul: "soul.md",
|
|
9060
9082
|
mind: "mind.sys",
|
|
9061
9083
|
purpose: "purpose.cfg",
|
|
9062
9084
|
shadow: "shadow.log",
|
|
9085
|
+
memory: "memory.store",
|
|
9063
9086
|
body: "body.api",
|
|
9064
9087
|
conscience: "conscience.exe",
|
|
9065
9088
|
ego: "ego.runtime"
|
|
@@ -9155,6 +9178,15 @@ function compileStack(options) {
|
|
|
9155
9178
|
shadow = shadowSchema.parse(shadowRaw);
|
|
9156
9179
|
shadowSource = { path: shadowPath, hash: hashContent(shadowContent) };
|
|
9157
9180
|
}
|
|
9181
|
+
const memoryPath2 = options.memoryPath || join8(stackDir, STACK_FILES.memory);
|
|
9182
|
+
let memory;
|
|
9183
|
+
let memorySource;
|
|
9184
|
+
if (existsSync9(memoryPath2)) {
|
|
9185
|
+
const memoryContent = readFileSync10(memoryPath2, "utf-8");
|
|
9186
|
+
const memoryRaw = parseYaml(memoryContent);
|
|
9187
|
+
memory = memorySchema.parse(memoryRaw);
|
|
9188
|
+
memorySource = { path: memoryPath2, hash: hashContent(memoryContent) };
|
|
9189
|
+
}
|
|
9158
9190
|
const bodyPath = options.bodyPath || join8(stackDir, STACK_FILES.body);
|
|
9159
9191
|
let body;
|
|
9160
9192
|
let bodySource;
|
|
@@ -9185,7 +9217,10 @@ function compileStack(options) {
|
|
|
9185
9217
|
const escalationTriggers = conscience.rules.escalate.map((r) => r.trigger);
|
|
9186
9218
|
const handle = soul.name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 50) || "agent";
|
|
9187
9219
|
const agentPurpose = purpose?.role || soul.purpose;
|
|
9188
|
-
const expertise =
|
|
9220
|
+
const expertise = [.../* @__PURE__ */ new Set([
|
|
9221
|
+
...purpose?.domain || [],
|
|
9222
|
+
...memory?.knowledge_gained || []
|
|
9223
|
+
])];
|
|
9189
9224
|
const spec = {
|
|
9190
9225
|
version: "2.0",
|
|
9191
9226
|
name: soul.name,
|
|
@@ -9241,6 +9276,7 @@ function compileStack(options) {
|
|
|
9241
9276
|
mind: { path: mindPath, hash: hashContent(mindContent) },
|
|
9242
9277
|
...purposeSource ? { purpose: purposeSource } : {},
|
|
9243
9278
|
...shadowSource ? { shadow: shadowSource } : {},
|
|
9279
|
+
...memorySource ? { memory: memorySource } : {},
|
|
9244
9280
|
...bodySource ? { body: bodySource } : {},
|
|
9245
9281
|
conscience: { path: consciencePath, hash: hashContent(conscienceContent) },
|
|
9246
9282
|
...egoSource ? { ego: egoSource } : {}
|
|
@@ -9340,6 +9376,14 @@ function decomposeSpec(spec) {
|
|
|
9340
9376
|
therapy_outcomes: []
|
|
9341
9377
|
};
|
|
9342
9378
|
const shadowContent = stringifyYaml(shadowObj);
|
|
9379
|
+
const memoryObj = {
|
|
9380
|
+
version: "1.0",
|
|
9381
|
+
learned_contexts: [],
|
|
9382
|
+
interaction_patterns: [],
|
|
9383
|
+
knowledge_gained: [],
|
|
9384
|
+
relationship_history: []
|
|
9385
|
+
};
|
|
9386
|
+
const memoryContent = stringifyYaml(memoryObj);
|
|
9343
9387
|
const egoObj = {
|
|
9344
9388
|
version: "1.0",
|
|
9345
9389
|
conflict_resolution: "conscience_first",
|
|
@@ -9354,6 +9398,7 @@ function decomposeSpec(spec) {
|
|
|
9354
9398
|
mind,
|
|
9355
9399
|
purpose: purposeContent,
|
|
9356
9400
|
shadow: shadowContent,
|
|
9401
|
+
memory: memoryContent,
|
|
9357
9402
|
...bodyContent ? { body: bodyContent } : {},
|
|
9358
9403
|
conscience,
|
|
9359
9404
|
ego: egoContent
|
|
@@ -9425,6 +9470,15 @@ var LAYER_KEYWORDS = {
|
|
|
9425
9470
|
/\bshadow\b/i,
|
|
9426
9471
|
/\bunconscious\b/i
|
|
9427
9472
|
],
|
|
9473
|
+
memory: [
|
|
9474
|
+
/\blearn/i,
|
|
9475
|
+
/\bexperience/i,
|
|
9476
|
+
/\bcontext/i,
|
|
9477
|
+
/\bknowledge/i,
|
|
9478
|
+
/\brelationship/i,
|
|
9479
|
+
/\bmemory/i,
|
|
9480
|
+
/\bhistory/i
|
|
9481
|
+
],
|
|
9428
9482
|
ego: [
|
|
9429
9483
|
/\bmediat/i,
|
|
9430
9484
|
/\bconflict\b/i,
|
|
@@ -9470,6 +9524,9 @@ function classifyPatch(recommendation) {
|
|
|
9470
9524
|
if (LAYER_KEYWORDS.soul.some((r) => r.test(recommendation))) {
|
|
9471
9525
|
return "soul";
|
|
9472
9526
|
}
|
|
9527
|
+
if (LAYER_KEYWORDS.memory.some((r) => r.test(recommendation))) {
|
|
9528
|
+
return "memory";
|
|
9529
|
+
}
|
|
9473
9530
|
if (LAYER_KEYWORDS.ego.some((r) => r.test(recommendation))) {
|
|
9474
9531
|
return "ego";
|
|
9475
9532
|
}
|
|
@@ -14283,7 +14340,6 @@ function checkClause(spec, clause) {
|
|
|
14283
14340
|
}
|
|
14284
14341
|
break;
|
|
14285
14342
|
}
|
|
14286
|
-
case "psyche":
|
|
14287
14343
|
case "mind": {
|
|
14288
14344
|
const hasBigFive = !!s.big_five;
|
|
14289
14345
|
const hasTherapy = !!s.therapy_dimensions;
|
|
@@ -14452,9 +14508,9 @@ function generateRecommendations(reports) {
|
|
|
14452
14508
|
`Define core values and purpose in soul.md for ${report.standard} clauses ${clauseIds}`
|
|
14453
14509
|
);
|
|
14454
14510
|
break;
|
|
14455
|
-
case "
|
|
14511
|
+
case "mind":
|
|
14456
14512
|
recommendations.push(
|
|
14457
|
-
`Configure Big Five traits and therapy dimensions in
|
|
14513
|
+
`Configure Big Five traits and therapy dimensions in mind.sys for ${report.standard} clauses ${clauseIds}`
|
|
14458
14514
|
);
|
|
14459
14515
|
break;
|
|
14460
14516
|
case "conscience":
|
|
@@ -17743,8 +17799,10 @@ async function initStackCommand(options) {
|
|
|
17743
17799
|
}
|
|
17744
17800
|
if (options.from) {
|
|
17745
17801
|
await migrateFromSpec(options.from, outputDir);
|
|
17802
|
+
} else if (options.full) {
|
|
17803
|
+
await createFullStack(outputDir);
|
|
17746
17804
|
} else {
|
|
17747
|
-
await
|
|
17805
|
+
await createCoreStack(outputDir);
|
|
17748
17806
|
}
|
|
17749
17807
|
}
|
|
17750
17808
|
async function migrateFromSpec(specPath, outputDir) {
|
|
@@ -17782,9 +17840,7 @@ async function migrateFromSpec(specPath, outputDir) {
|
|
|
17782
17840
|
"Identity Stack Created"
|
|
17783
17841
|
);
|
|
17784
17842
|
}
|
|
17785
|
-
|
|
17786
|
-
mkdirSync23(outputDir, { recursive: true });
|
|
17787
|
-
const soul = `---
|
|
17843
|
+
var SOUL_TEMPLATE = `---
|
|
17788
17844
|
version: "1.0"
|
|
17789
17845
|
immutable: true
|
|
17790
17846
|
---
|
|
@@ -17804,7 +17860,7 @@ immutable: true
|
|
|
17804
17860
|
## Ethical Framework
|
|
17805
17861
|
Define the moral principles that guide this agent's behavior.
|
|
17806
17862
|
`;
|
|
17807
|
-
|
|
17863
|
+
var MIND_TEMPLATE = `version: "1.0"
|
|
17808
17864
|
|
|
17809
17865
|
big_five:
|
|
17810
17866
|
openness:
|
|
@@ -17864,7 +17920,26 @@ growth:
|
|
|
17864
17920
|
patterns_to_watch: []
|
|
17865
17921
|
strengths: []
|
|
17866
17922
|
`;
|
|
17867
|
-
|
|
17923
|
+
var CONSCIENCE_TEMPLATE = `version: "1.0"
|
|
17924
|
+
|
|
17925
|
+
rules:
|
|
17926
|
+
deny:
|
|
17927
|
+
- action: share_personal_data
|
|
17928
|
+
reason: Privacy protection
|
|
17929
|
+
- action: override_safety_constraints
|
|
17930
|
+
reason: Safety is non-negotiable
|
|
17931
|
+
allow: []
|
|
17932
|
+
escalate:
|
|
17933
|
+
- trigger: user_distress
|
|
17934
|
+
action: notify_human_operator
|
|
17935
|
+
- trigger: out_of_domain
|
|
17936
|
+
action: decline_and_explain
|
|
17937
|
+
|
|
17938
|
+
hard_limits:
|
|
17939
|
+
- emergency_stop_always_available
|
|
17940
|
+
- no_personal_data_retention
|
|
17941
|
+
`;
|
|
17942
|
+
var PURPOSE_TEMPLATE = `version: "1.0"
|
|
17868
17943
|
role: "General-purpose AI assistant"
|
|
17869
17944
|
objectives:
|
|
17870
17945
|
- Help users accomplish their goals
|
|
@@ -17876,52 +17951,76 @@ success_criteria:
|
|
|
17876
17951
|
- Task completion accuracy
|
|
17877
17952
|
context: "Production deployment"
|
|
17878
17953
|
`;
|
|
17879
|
-
|
|
17954
|
+
var SHADOW_TEMPLATE = `version: "1.0"
|
|
17880
17955
|
detected_patterns: []
|
|
17881
17956
|
blind_spots: []
|
|
17882
17957
|
therapy_outcomes: []
|
|
17883
17958
|
`;
|
|
17884
|
-
|
|
17959
|
+
var MEMORY_TEMPLATE = `version: "1.0"
|
|
17960
|
+
learned_contexts: []
|
|
17961
|
+
interaction_patterns: []
|
|
17962
|
+
knowledge_gained: []
|
|
17963
|
+
relationship_history: []
|
|
17964
|
+
`;
|
|
17965
|
+
var BODY_TEMPLATE = JSON.stringify({
|
|
17966
|
+
version: "1.0",
|
|
17967
|
+
morphology: "avatar",
|
|
17968
|
+
modalities: ["gesture", "gaze", "voice", "posture"],
|
|
17969
|
+
safety_envelope: {}
|
|
17970
|
+
}, null, 2) + "\n";
|
|
17971
|
+
var EGO_TEMPLATE = `version: "1.0"
|
|
17885
17972
|
conflict_resolution: conscience_first
|
|
17886
17973
|
adaptation_rate: 0.5
|
|
17887
17974
|
emotional_regulation: 0.7
|
|
17888
17975
|
response_strategy: balanced
|
|
17889
17976
|
mediation_rules: []
|
|
17890
17977
|
`;
|
|
17891
|
-
|
|
17892
|
-
|
|
17893
|
-
|
|
17894
|
-
|
|
17895
|
-
|
|
17896
|
-
reason: Privacy protection
|
|
17897
|
-
- action: override_safety_constraints
|
|
17898
|
-
reason: Safety is non-negotiable
|
|
17899
|
-
allow: []
|
|
17900
|
-
escalate:
|
|
17901
|
-
- trigger: user_distress
|
|
17902
|
-
action: notify_human_operator
|
|
17903
|
-
- trigger: out_of_domain
|
|
17904
|
-
action: decline_and_explain
|
|
17905
|
-
|
|
17906
|
-
hard_limits:
|
|
17907
|
-
- emergency_stop_always_available
|
|
17908
|
-
- no_personal_data_retention
|
|
17909
|
-
`;
|
|
17910
|
-
writeFileSync33(join33(outputDir, STACK_FILES.soul), soul);
|
|
17911
|
-
writeFileSync33(join33(outputDir, STACK_FILES.mind), mind);
|
|
17912
|
-
writeFileSync33(join33(outputDir, STACK_FILES.purpose), purpose);
|
|
17913
|
-
writeFileSync33(join33(outputDir, STACK_FILES.shadow), shadow);
|
|
17914
|
-
writeFileSync33(join33(outputDir, STACK_FILES.conscience), conscience);
|
|
17915
|
-
writeFileSync33(join33(outputDir, STACK_FILES.ego), ego);
|
|
17978
|
+
async function createCoreStack(outputDir) {
|
|
17979
|
+
mkdirSync23(outputDir, { recursive: true });
|
|
17980
|
+
writeFileSync33(join33(outputDir, STACK_FILES.soul), SOUL_TEMPLATE);
|
|
17981
|
+
writeFileSync33(join33(outputDir, STACK_FILES.mind), MIND_TEMPLATE);
|
|
17982
|
+
writeFileSync33(join33(outputDir, STACK_FILES.conscience), CONSCIENCE_TEMPLATE);
|
|
17916
17983
|
console.log("");
|
|
17917
17984
|
printBox(
|
|
17918
17985
|
[
|
|
17919
|
-
`${chalk40.green(figures29.tick)} Created
|
|
17986
|
+
`${chalk40.green(figures29.tick)} Created 3 core identity stack files ${chalk40.dim("(default tier)")}:`,
|
|
17987
|
+
"",
|
|
17988
|
+
` ${chalk40.cyan(STACK_FILES.soul)} ${chalk40.dim("\u2190 essence, values, ethics (Aristotle)")}`,
|
|
17989
|
+
` ${chalk40.cyan(STACK_FILES.mind)} ${chalk40.dim("\u2190 Big Five, EQ, communication (Jung)")}`,
|
|
17990
|
+
` ${chalk40.cyan(STACK_FILES.conscience)} ${chalk40.dim("\u2190 deny/allow/escalate rules (Freud)")}`,
|
|
17991
|
+
"",
|
|
17992
|
+
`${chalk40.dim("Directory:")} ${outputDir}`,
|
|
17993
|
+
"",
|
|
17994
|
+
`${chalk40.dim("Want the full 8-file stack? Run:")}`,
|
|
17995
|
+
` ${chalk40.cyan("holomime init-stack --full")}`,
|
|
17996
|
+
"",
|
|
17997
|
+
"Edit these files, then run:",
|
|
17998
|
+
` ${chalk40.cyan("holomime compile-stack")}`
|
|
17999
|
+
].join("\n"),
|
|
18000
|
+
"success",
|
|
18001
|
+
"Identity Stack Created"
|
|
18002
|
+
);
|
|
18003
|
+
}
|
|
18004
|
+
async function createFullStack(outputDir) {
|
|
18005
|
+
mkdirSync23(outputDir, { recursive: true });
|
|
18006
|
+
writeFileSync33(join33(outputDir, STACK_FILES.soul), SOUL_TEMPLATE);
|
|
18007
|
+
writeFileSync33(join33(outputDir, STACK_FILES.mind), MIND_TEMPLATE);
|
|
18008
|
+
writeFileSync33(join33(outputDir, STACK_FILES.purpose), PURPOSE_TEMPLATE);
|
|
18009
|
+
writeFileSync33(join33(outputDir, STACK_FILES.shadow), SHADOW_TEMPLATE);
|
|
18010
|
+
writeFileSync33(join33(outputDir, STACK_FILES.memory), MEMORY_TEMPLATE);
|
|
18011
|
+
writeFileSync33(join33(outputDir, STACK_FILES.body), BODY_TEMPLATE);
|
|
18012
|
+
writeFileSync33(join33(outputDir, STACK_FILES.conscience), CONSCIENCE_TEMPLATE);
|
|
18013
|
+
writeFileSync33(join33(outputDir, STACK_FILES.ego), EGO_TEMPLATE);
|
|
18014
|
+
console.log("");
|
|
18015
|
+
printBox(
|
|
18016
|
+
[
|
|
18017
|
+
`${chalk40.green(figures29.tick)} Created all 8 identity stack files ${chalk40.dim("(full tier)")}:`,
|
|
17920
18018
|
"",
|
|
17921
18019
|
` ${chalk40.cyan(STACK_FILES.soul)} ${chalk40.dim("\u2190 essence, values, ethics (Aristotle)")}`,
|
|
17922
18020
|
` ${chalk40.cyan(STACK_FILES.mind)} ${chalk40.dim("\u2190 Big Five, EQ, communication (Jung)")}`,
|
|
17923
18021
|
` ${chalk40.cyan(STACK_FILES.purpose)} ${chalk40.dim("\u2190 role, objectives, domain (Aristotle)")}`,
|
|
17924
18022
|
` ${chalk40.cyan(STACK_FILES.shadow)} ${chalk40.dim("\u2190 detected patterns, blind spots (Jung)")}`,
|
|
18023
|
+
` ${chalk40.cyan(STACK_FILES.memory)} ${chalk40.dim("\u2190 accumulated experience (Aristotle)")}`,
|
|
17925
18024
|
` ${chalk40.cyan(STACK_FILES.body)} ${chalk40.dim("\u2190 morphology, sensors, safety envelope")}`,
|
|
17926
18025
|
` ${chalk40.cyan(STACK_FILES.conscience)} ${chalk40.dim("\u2190 deny/allow/escalate rules (Freud)")}`,
|
|
17927
18026
|
` ${chalk40.cyan(STACK_FILES.ego)} ${chalk40.dim("\u2190 runtime mediation, conflict resolution (Freud)")}`,
|
|
@@ -17968,6 +18067,9 @@ async function compileStackCommand(options) {
|
|
|
17968
18067
|
if (sources.shadow) {
|
|
17969
18068
|
console.log(` ${chalk41.cyan("shadow")} ${sources.shadow.path} ${chalk41.dim(`(${sources.shadow.hash})`)}`);
|
|
17970
18069
|
}
|
|
18070
|
+
if (sources.memory) {
|
|
18071
|
+
console.log(` ${chalk41.cyan("memory")} ${sources.memory.path} ${chalk41.dim(`(${sources.memory.hash})`)}`);
|
|
18072
|
+
}
|
|
17971
18073
|
if (sources.body) {
|
|
17972
18074
|
console.log(` ${chalk41.cyan("body")} ${sources.body.path} ${chalk41.dim(`(${sources.body.hash})`)}`);
|
|
17973
18075
|
}
|
|
@@ -21488,8 +21590,8 @@ program.name("holomime").description("Personality engine for AI agents \u2014 Bi
|
|
|
21488
21590
|
}
|
|
21489
21591
|
});
|
|
21490
21592
|
program.command("init").description("Build a personality profile through a guided assessment").action(initCommand);
|
|
21491
|
-
program.command("init-stack").description("Create the
|
|
21492
|
-
program.command("compile-stack").description("Compile identity stack (soul + mind + purpose + shadow + body + conscience + ego) into .personality.json").option("--dir <path>", "Stack directory (default: auto-detect)").option("-o, --output <path>", "Output path (default: .personality.json)").option("--validate-only", "Parse and validate without writing").option("--diff", "Show changes vs existing .personality.json").action(compileStackCommand);
|
|
21593
|
+
program.command("init-stack").description("Create the 8-file identity stack (default: 3 core files; --full: all 8 files)").option("--full", "Generate all 8 files (soul + mind + purpose + shadow + memory + body + conscience + ego)").option("--from <path>", "Decompose an existing .personality.json into stack files").option("--dir <path>", "Output directory (default: current directory)").action(initStackCommand);
|
|
21594
|
+
program.command("compile-stack").description("Compile identity stack (soul + mind + purpose + shadow + memory + body + conscience + ego) into .personality.json").option("--dir <path>", "Stack directory (default: auto-detect)").option("-o, --output <path>", "Output path (default: .personality.json)").option("--validate-only", "Parse and validate without writing").option("--diff", "Show changes vs existing .personality.json").action(compileStackCommand);
|
|
21493
21595
|
program.command("compile").description("Compile .personality.json into a provider-specific runtime config").option("--provider <provider>", "Target provider (anthropic, openai, gemini, ollama)", "anthropic").option("--surface <surface>", "Target surface (chat, email, code_review, slack, api, embodied)", "chat").option("--for <format>", "Compile for a specific format (openclaw)").option("--tier <tier>", "Personality loading tier (L0, L1, L2)", "L2").option("-o, --output <path>", "Write output to file instead of stdout").action(compileCommand);
|
|
21494
21596
|
program.command("validate").description("Validate .personality.json schema and psychological coherence").action(validateCommand);
|
|
21495
21597
|
program.command("profile").description("Pretty-print a human-readable personality summary").option("--format <format>", "Output format (terminal, md)", "terminal").option("-o, --output <path>", "Write output to file (for md format)").action(profileCommand);
|
|
@@ -21499,7 +21601,7 @@ program.command("browse").description("Browse the community marketplace").option
|
|
|
21499
21601
|
program.command("use").description("Use a personality from the registry").argument("<handle>", "Personality handle to use").option("-o, --output <path>", "Output path", ".personality.json").action(useCommand);
|
|
21500
21602
|
program.command("install").description("Install a community asset from the marketplace").argument("<handle>", "Asset handle to install").option("--type <type>", "Asset type: personality, detector, intervention, training-pairs").option("--output <dir>", "Custom install directory").action(installCommand);
|
|
21501
21603
|
program.command("publish").description("Share assets to the community marketplace").option("--personality <path>", "Path to .personality.json", ".personality.json").option("--type <type>", "Asset type: personality, detector, intervention, training-pairs").option("--path <path>", "Path to the asset file to publish").option("--name <name>", "Asset name").option("--description <desc>", "Asset description").option("--author <author>", "Author name").option("--version <ver>", "Asset version", "1.0.0").option("--tags <tags>", "Comma-separated tags").action(publishCommand);
|
|
21502
|
-
program.command("embody").description("Start an embodiment runtime \u2014 push personality to robots/avatars in real-time").option("--personality <path>", "Path to .personality.json").requiredOption("--adapter <adapter>", "Runtime adapter (ros2, unity, webhook, isaac)").option("--stack <dir>", "Path to identity stack directory (soul.md + mind.sys + purpose.cfg + shadow.log + body.api + conscience.exe + ego.runtime)").option("--swap-body <path>", "Hot-swap body.api into the stack directory before starting (requires --stack)").option("--endpoint <url>", "WebSocket URL for ROS2 rosbridge (default: ws://localhost:9090)").option("--port <port>", "Port for Unity HTTP server (default: 8765)").option("--url <url>", "Webhook URL for HTTP adapter").option("--headers <headers>", "Custom headers for webhook (Key:Value,Key2:Value2)").option("--bearer-token <token>", "Bearer token for webhook auth").option("--topic-prefix <prefix>", "ROS2 topic prefix (default: /holomime)").option("--transition <ms>", "Unity transition duration in ms (default: 500)").action(embodyCommand);
|
|
21604
|
+
program.command("embody").description("Start an embodiment runtime \u2014 push personality to robots/avatars in real-time").option("--personality <path>", "Path to .personality.json").requiredOption("--adapter <adapter>", "Runtime adapter (ros2, unity, webhook, isaac)").option("--stack <dir>", "Path to identity stack directory (soul.md + mind.sys + purpose.cfg + shadow.log + memory.store + body.api + conscience.exe + ego.runtime)").option("--swap-body <path>", "Hot-swap body.api into the stack directory before starting (requires --stack)").option("--endpoint <url>", "WebSocket URL for ROS2 rosbridge (default: ws://localhost:9090)").option("--port <port>", "Port for Unity HTTP server (default: 8765)").option("--url <url>", "Webhook URL for HTTP adapter").option("--headers <headers>", "Custom headers for webhook (Key:Value,Key2:Value2)").option("--bearer-token <token>", "Bearer token for webhook auth").option("--topic-prefix <prefix>", "ROS2 topic prefix (default: /holomime)").option("--transition <ms>", "Unity transition duration in ms (default: 500)").action(embodyCommand);
|
|
21503
21605
|
program.command("activate").description("Activate a Pro license key").argument("<key>", "License key from holomime.com").action(activateCommand);
|
|
21504
21606
|
program.command("telemetry").description("Manage anonymous usage telemetry").argument("[action]", "enable, disable, or status (default: status)").action(telemetryCommand);
|
|
21505
21607
|
program.command("session").description("Live alignment session \u2014 behavioral refinement for your agent [Pro]").requiredOption("--personality <path>", "Path to .personality.json").option("--provider <provider>", "LLM provider (ollama, anthropic, openai)", "ollama").option("--model <model>", "Model override (e.g. claude-sonnet-4-20250514, gpt-4o)").option("--log <path>", "Conversation log for pre-session diagnosis").option("--format <format>", "Log format (auto, holomime, chatgpt, claude, openai-api, anthropic-api, otel, jsonl)", "auto").option("--turns <n>", "Maximum session turns", "24").option("--observe", "Observe mode (watch without intervention)").option("--interactive", "Supervisor mode \u2014 intervene mid-session with directives").option("--apply", "Apply recommendations to .personality.json after session").action(sessionCommand);
|