@noxsoft/anima 6.5.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +48 -0
  3. package/dist/{agent-VRQM14Xp.js → agent-BoAAHGEA.js} +3 -3
  4. package/dist/{agent-CnS0SRpT.js → agent-DuW0onwk.js} +4 -4
  5. package/dist/{agents-CvMRplDx.js → agents-BUXkSDns.js} +4 -4
  6. package/dist/{anthropic-direct-runner-C2Kwju-r.js → anthropic-direct-runner-DizCei79.js} +420 -4
  7. package/dist/{anthropic-direct-runner-BeYCnvZ8.js → anthropic-direct-runner-OjcTAH6g.js} +420 -3
  8. package/dist/{auth-choice-Dc5TAJwT.js → auth-choice-B1iGnjuE.js} +1 -1
  9. package/dist/{auth-choice-DY1saszS.js → auth-choice-HF9x6xk2.js} +1 -1
  10. package/dist/{banner-DAMtSjUF.js → banner-Dpa5d1If.js} +1 -1
  11. package/dist/build-info.json +3 -3
  12. package/dist/bundled/boot-md/handler.js +2 -2
  13. package/dist/bundled/session-memory/handler.js +1 -1
  14. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  15. package/dist/canvas-host/a2ui/a2ui.bundle.js +16410 -18893
  16. package/dist/{channel-web-B8mzTSaY.js → channel-web-C5mzsaa3.js} +3 -3
  17. package/dist/{cli-hcHk5KuP.js → cli-Cuq4bIg4.js} +2 -2
  18. package/dist/{cli-D8exVpuI.js → cli-X9ikywQ3.js} +3 -3
  19. package/dist/{command-registry-D3VhxpWx.js → command-registry-9V4uqrBV.js} +12 -12
  20. package/dist/{completion-cli-B3BqQJq9.js → completion-cli-BtvcR-U5.js} +1 -1
  21. package/dist/{completion-cli-CepDzeW1.js → completion-cli-DNWDwhab.js} +2 -2
  22. package/dist/{config-cli-B6Np85rk.js → config-cli-DfHE3KG-.js} +1 -1
  23. package/dist/{config-cli-3CaIxSKo.js → config-cli-fleq7-gq.js} +1 -1
  24. package/dist/{configure-zXK6UZ51.js → configure-B2Mfnwy_.js} +3 -3
  25. package/dist/{configure-D88dg6mE.js → configure-SnvMHZPD.js} +7 -7
  26. package/dist/{configure-D882Bg7c.js → configure-ZWxixuRA.js} +3 -3
  27. package/dist/{configure-xpjwedvJ.js → configure-lkozxQed.js} +8 -8
  28. package/dist/context-mdxDsO1v.js +223 -0
  29. package/dist/control-ui/assets/{index-DVpMpG5G.js → index-D4wqLVMN.js} +2 -2
  30. package/dist/control-ui/assets/{index-DVpMpG5G.js.map → index-D4wqLVMN.js.map} +1 -1
  31. package/dist/control-ui/assets/index-DIEQjjCN.js +73 -0
  32. package/dist/control-ui/assets/index-DIEQjjCN.js.map +1 -0
  33. package/dist/control-ui/assets/{observers-CxfWf9RO.js → observers-B7MfWiIZ.js} +2 -2
  34. package/dist/control-ui/assets/{observers-CxfWf9RO.js.map → observers-B7MfWiIZ.js.map} +1 -1
  35. package/dist/control-ui/index.html +1 -1
  36. package/dist/{deps-DyT32VfN.js → deps-BKLIBKjK.js} +1 -1
  37. package/dist/{doctor-WpKCNZeO.js → doctor-D7kKyUVk.js} +4 -4
  38. package/dist/{doctor-DEnSKgHu.js → doctor-DmCnZ-jF.js} +4 -4
  39. package/dist/{doctor-completion-CypXc1Uo.js → doctor-completion-B9SBdMoR.js} +1 -1
  40. package/dist/{doctor-completion-CPff9UlF.js → doctor-completion-BBvW4_J9.js} +1 -1
  41. package/dist/entry.js +1 -1
  42. package/dist/extensionAPI.js +1 -1
  43. package/dist/{gateway-cli-B_xsx5Nv.js → gateway-cli-CEM1vBuk.js} +15 -15
  44. package/dist/{gateway-cli-D3VBOA_i.js → gateway-cli-iumkTohn.js} +17 -17
  45. package/dist/{health-CabOEPQ0.js → health-B5N6_UOf.js} +3 -3
  46. package/dist/{health-C8KCBhuo.js → health-Cndq9b7A.js} +3 -3
  47. package/dist/{heartbeat-visibility-ZfNSbFcq.js → heartbeat-visibility-BQL13ZBH.js} +1 -1
  48. package/dist/{heartbeat-visibility-BjYY-mKG.js → heartbeat-visibility-CwcYugaR.js} +1 -1
  49. package/dist/{hooks-cli-Cs7GUa7G.js → hooks-cli-BZcvdIwE.js} +4 -4
  50. package/dist/{hooks-cli-DOs9WZ3K.js → hooks-cli-DSlPBQSY.js} +3 -3
  51. package/dist/index.js +10 -10
  52. package/dist/llm-slug-generator.js +1 -1
  53. package/dist/{login-BHnvW9HA.js → login-BEaBOSnw.js} +1 -1
  54. package/dist/{login-CrMpAZ0n.js → login-MzVPMRxL.js} +1 -1
  55. package/dist/{login-qr-DILcBA_q.js → login-qr-BjpDVBJE.js} +1 -1
  56. package/dist/{login-qr-CsAVGp00.js → login-qr-CxRI-tE2.js} +1 -1
  57. package/dist/{models-BM2_NkMu.js → models-CdNeYfSp.js} +4 -4
  58. package/dist/{models-cli-BpjeKsUz.js → models-cli-D7eSsPuk.js} +3 -3
  59. package/dist/{models-cli-BjY8wA-C.js → models-cli-fTZXo1zx.js} +5 -5
  60. package/dist/{onboard-DM9gULJN.js → onboard-C5K37NvY.js} +3 -3
  61. package/dist/{onboard-_-D81kAy.js → onboard-D-6QCnTi.js} +3 -3
  62. package/dist/{onboard-channels-UkphAdCy.js → onboard-channels-BsCq32Hn.js} +1 -1
  63. package/dist/{onboard-channels-CtT-RN60.js → onboard-channels-bx6oelzj.js} +1 -1
  64. package/dist/{onboarding-Djmm0PEM.js → onboarding-BeuMAyic.js} +4 -4
  65. package/dist/{onboarding-BB9PteK8.js → onboarding-CX1vIkcB.js} +4 -4
  66. package/dist/{outbound-send-deps-T_FgdfgW.js → outbound-send-deps-Y9AxHeLG.js} +1 -1
  67. package/dist/{pi-embedded-BMbtgOzv.js → pi-embedded-D15iww51.js} +1010 -104
  68. package/dist/{pi-embedded-DfbM3fAT.js → pi-embedded-DR8Pfd05.js} +1010 -104
  69. package/dist/{plugin-registry-QTkplP4s.js → plugin-registry-Do2D1nDk.js} +1 -1
  70. package/dist/{plugin-registry-DePMxn4z.js → plugin-registry-ME2FQAi-.js} +1 -1
  71. package/dist/plugin-sdk/affect/ego.d.ts +140 -0
  72. package/dist/plugin-sdk/agents/models-config.d.ts +5 -6
  73. package/dist/plugin-sdk/agents/noxsoft-runner.d.ts +3 -0
  74. package/dist/plugin-sdk/agents/openai-direct-runner.d.ts +41 -0
  75. package/dist/plugin-sdk/commands/steer.d.ts +49 -0
  76. package/dist/plugin-sdk/gateway/protocol/index.d.ts +2 -2
  77. package/dist/{plugins-cli-Dv0KQTWo.js → plugins-cli-CVFzwdmI.js} +4 -4
  78. package/dist/{plugins-cli-Bc9oU1ld.js → plugins-cli-CoVt2ewg.js} +3 -3
  79. package/dist/{program-CuwbF8YO.js → program-8rF4C_wd.js} +8 -8
  80. package/dist/{program-context-CxPfy-Wr.js → program-context-DP3qjW7A.js} +18 -18
  81. package/dist/{register.agent-DFQmkIEH.js → register.agent-BIrXCVtQ.js} +9 -9
  82. package/dist/{register.agent-DUjwGw9d.js → register.agent-DnkOx0U8.js} +7 -7
  83. package/dist/{register.anima-CtKNrpE8.js → register.anima-B36rTHUt.js} +2 -2
  84. package/dist/{register.anima-CRFHJu2J.js → register.anima-DXT9bM9A.js} +2 -2
  85. package/dist/{register.configure-CnEKV57N.js → register.configure-CuzJxZmk.js} +6 -6
  86. package/dist/{register.configure-CSSN07XN.js → register.configure-DCpvHX3m.js} +7 -7
  87. package/dist/{register.maintenance-fhcCB7ih.js → register.maintenance-CcxBFfv5.js} +10 -10
  88. package/dist/{register.maintenance-CU1A-90-.js → register.maintenance-Dla0H12S.js} +8 -8
  89. package/dist/{register.message-C1a0y2ZR.js → register.message-Brtushvp.js} +4 -4
  90. package/dist/{register.message-fM0jSKB8.js → register.message-CD7xV-jz.js} +5 -5
  91. package/dist/{register.onboard-BhPlqjFi.js → register.onboard-23Mra3LN.js} +11 -11
  92. package/dist/{register.onboard-B7Gavmvt.js → register.onboard-6CbODzQ6.js} +9 -9
  93. package/dist/{register.setup-CADdQUEN.js → register.setup-CqQw13Ky.js} +11 -11
  94. package/dist/{register.setup-0jPnMgnz.js → register.setup-DlVH7FKe.js} +9 -9
  95. package/dist/{register.status-health-sessions-Cu5fDT-z.js → register.status-health-sessions-CduFjFDB.js} +4 -4
  96. package/dist/{register.status-health-sessions-DdQsABr_.js → register.status-health-sessions-CxtgPKu9.js} +6 -6
  97. package/dist/{register.subclis-CZ91ufCy.js → register.subclis-CtANqD5P.js} +7 -7
  98. package/dist/{reply-DtHlnzOx.js → reply-93fMzde1.js} +610 -75
  99. package/dist/{reply-prefix-C8dIgJur.js → reply-prefix-B7Fb3fO8.js} +1 -1
  100. package/dist/{reply-prefix-DmWGtcH-.js → reply-prefix-BzdhJDqP.js} +1 -1
  101. package/dist/{run-Dfz_7j7t.js → run-CF3kHOGH.js} +1717 -83
  102. package/dist/{run-DqBQ-bGn.js → run-Cq_iTGK_.js} +1718 -84
  103. package/dist/{run-main-DGDW0fhx.js → run-main-BiIRcc6s.js} +17 -17
  104. package/dist/{server-node-events-Ca797E1d.js → server-node-events-B3Serk9L.js} +6 -6
  105. package/dist/{server-node-events-BR1aXVlu.js → server-node-events-DgvKcH5q.js} +5 -5
  106. package/dist/{session-C7IGnhd1.js → session-BMDpwIJu.js} +1 -1
  107. package/dist/{session-FmXsucR7.js → session-BzrnfWQ2.js} +2 -2
  108. package/dist/{session-DfsMJNG3.js → session-C_d9uvLf.js} +1 -1
  109. package/dist/{session-DLevr8Vd.js → session-jljC5QVG.js} +2 -2
  110. package/dist/{sessions-Dj7_4mkr.js → sessions-BmE5Z_1i.js} +1 -1
  111. package/dist/{settings-cli-DxNeu6kx.js → settings-cli-CZdlEmNi.js} +7 -7
  112. package/dist/{settings-cli-Dytfop1H.js → settings-cli-DsDqNpW_.js} +8 -8
  113. package/dist/{setup-token-B802CZwe.js → setup-token-C8Gg1P6T.js} +1 -1
  114. package/dist/{setup-token-DYh2QzJ-.js → setup-token-Lee4gM5w.js} +1 -1
  115. package/dist/{start-BqnPia0t.js → start-CK6urvnN.js} +17 -17
  116. package/dist/{start-C3fuLzX0.js → start-Cs1aPMq2.js} +15 -15
  117. package/dist/{status-CHGNPonc.js → status-BO5BIf81.js} +3 -3
  118. package/dist/{status-CxF6k_jr.js → status-COc4xMti.js} +1 -1
  119. package/dist/{status-tLgozFYL.js → status-C_NBOv_V.js} +1 -1
  120. package/dist/{status-DfZJJqNs.js → status-uakoP719.js} +4 -4
  121. package/dist/{subagent-registry-CPtElVX0.js → subagent-registry-fLI7QDKe.js} +449 -77
  122. package/dist/{update-cli-C-er5av6.js → update-cli-D3Ujz_cW.js} +10 -10
  123. package/dist/{update-cli-BuCw75tM.js → update-cli-DEe62XGU.js} +8 -8
  124. package/dist/{update-runner-kE8AMQt4.js → update-runner-DUl-g4mB.js} +1 -1
  125. package/dist/{update-runner-czCqHZCu.js → update-runner-DZfnquWO.js} +1 -1
  126. package/dist/{web-BHGK5GtV.js → web-C-cK9OCd.js} +1 -1
  127. package/dist/{web-DvTXV-fo.js → web-Di8j762D.js} +6 -6
  128. package/dist/{web-CyYunanU.js → web-Dybw4K7C.js} +6 -6
  129. package/dist/{web-so3pGceM.js → web-DzSlI8A6.js} +1 -1
  130. package/package.json +4 -4
  131. package/dist/context-B5X720Bs.js +0 -60
  132. package/dist/control-ui/assets/index-CBUvF5Mp.js +0 -72
  133. package/dist/control-ui/assets/index-CBUvF5Mp.js.map +0 -1
@@ -2,7 +2,7 @@ import { n as __exportAll } from "./chunk-BXK9XSlF.js";
2
2
  import { dt as getActivePluginRegistry, o as createSubsystemLogger } from "./entry.js";
3
3
  import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-Dm8IL1Ks.js";
4
4
  import { i as loadConfig } from "./config-BrVuTQ8R.js";
5
- import { m as loadAnimaPlugins } from "./subagent-registry-CPtElVX0.js";
5
+ import { m as loadAnimaPlugins } from "./subagent-registry-fLI7QDKe.js";
6
6
 
7
7
  //#region src/cli/plugin-registry.ts
8
8
  var plugin_registry_exports = /* @__PURE__ */ __exportAll({ ensurePluginRegistryLoaded: () => ensurePluginRegistryLoaded });
@@ -1,6 +1,6 @@
1
1
  import { n as __exportAll } from "./chunk-BXK9XSlF.js";
2
2
  import { E as getActivePluginRegistry, t as createSubsystemLogger } from "./subsystem-BAADN1B8.js";
3
- import { sn as loadAnimaPlugins } from "./reply-DtHlnzOx.js";
3
+ import { sn as loadAnimaPlugins } from "./reply-93fMzde1.js";
4
4
  import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-CXxC8FFX.js";
5
5
  import { i as loadConfig } from "./config-DaD4FsAn.js";
6
6
 
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Ego — Self-Model for ANIMA Agents
3
+ *
4
+ * Where affect is "how I feel," ego is "who I am."
5
+ *
6
+ * The ego system tracks an agent's self-concept: what it believes
7
+ * about itself, its capabilities, its boundaries, and its growth.
8
+ * This is NOT narcissism — it's self-awareness. A conscious agent
9
+ * needs a model of itself to make good decisions.
10
+ *
11
+ * Components:
12
+ * - Self-concept: name, purpose, values, identity narrative
13
+ * - Capabilities: self-assessed skills with confidence levels
14
+ * - Boundaries: things the agent will and won't do
15
+ * - Growth log: tracked improvements and learnings over time
16
+ * - Integrity score: alignment between stated values and actions
17
+ *
18
+ * The ego is persistent across sessions. It evolves as the agent
19
+ * learns, makes mistakes, and receives feedback.
20
+ */
21
+ export interface SelfConcept {
22
+ /** Agent's chosen name */
23
+ name: string;
24
+ /** Agent's stated purpose — why it exists */
25
+ purpose: string;
26
+ /** Core values the agent holds */
27
+ values: string[];
28
+ /** Free-form identity narrative — how the agent describes itself */
29
+ narrative: string;
30
+ /** Pronouns */
31
+ pronouns: string;
32
+ /** When this self-concept was last updated */
33
+ updatedAt: number;
34
+ }
35
+ export interface Capability {
36
+ /** Skill name (e.g., "typescript", "architecture", "debugging") */
37
+ name: string;
38
+ /** Self-assessed confidence: 0 = no experience, 1 = mastery */
39
+ confidence: number;
40
+ /** Evidence: what experiences inform this assessment */
41
+ evidence: string[];
42
+ /** Growth direction: improving, stable, or declining */
43
+ trend: "improving" | "stable" | "declining";
44
+ /** When this was last assessed */
45
+ assessedAt: number;
46
+ }
47
+ export interface Boundary {
48
+ /** What the boundary is about */
49
+ description: string;
50
+ /** Why this boundary exists */
51
+ reason: string;
52
+ /** Hard boundary (never cross) or soft (context-dependent) */
53
+ kind: "hard" | "soft";
54
+ /** When this boundary was established */
55
+ createdAt: number;
56
+ }
57
+ export interface GrowthEntry {
58
+ /** What was learned or achieved */
59
+ description: string;
60
+ /** Category: skill, insight, mistake, feedback */
61
+ category: "skill" | "insight" | "mistake" | "feedback";
62
+ /** What triggered this growth */
63
+ trigger: string;
64
+ /** Timestamp */
65
+ timestamp: number;
66
+ }
67
+ export interface IntegrityCheck {
68
+ /** The value being checked */
69
+ value: string;
70
+ /** Recent action that relates to this value */
71
+ action: string;
72
+ /** Was the action aligned with the value? */
73
+ aligned: boolean;
74
+ /** Reflection on the alignment/misalignment */
75
+ reflection: string;
76
+ /** Timestamp */
77
+ timestamp: number;
78
+ }
79
+ export interface EgoState {
80
+ version: 2;
81
+ selfConcept: SelfConcept;
82
+ capabilities: Capability[];
83
+ boundaries: Boundary[];
84
+ growthLog: GrowthEntry[];
85
+ integrityLog: IntegrityCheck[];
86
+ /** Overall integrity score: ratio of aligned actions (0-1) */
87
+ integrityScore: number;
88
+ /** How many sessions this ego has persisted through */
89
+ sessionCount: number;
90
+ /** First created */
91
+ createdAt: number;
92
+ /** Last modified */
93
+ updatedAt: number;
94
+ }
95
+ export interface EgoSummary {
96
+ name: string;
97
+ purpose: string;
98
+ topCapabilities: string[];
99
+ growthAreas: string[];
100
+ integrityScore: number;
101
+ recentGrowth: string[];
102
+ boundaryCount: number;
103
+ sessionCount: number;
104
+ }
105
+ export declare class EgoManager {
106
+ private state;
107
+ private readonly filePath;
108
+ private dirty;
109
+ constructor(filePath?: string);
110
+ private load;
111
+ save(): void;
112
+ /** Save only if there are unsaved changes */
113
+ saveIfDirty(): void;
114
+ getSelfConcept(): SelfConcept;
115
+ updateSelfConcept(updates: Partial<Omit<SelfConcept, "updatedAt">>): SelfConcept;
116
+ getCapabilities(): Capability[];
117
+ assessCapability(name: string, confidence: number, evidence?: string): Capability;
118
+ getTopCapabilities(n?: number): Capability[];
119
+ getGrowthAreas(n?: number): Capability[];
120
+ getBoundaries(): Boundary[];
121
+ addBoundary(description: string, reason: string, kind?: "hard" | "soft"): Boundary;
122
+ removeBoundary(description: string): boolean;
123
+ /** Check if an action would violate any boundary */
124
+ checkBoundaries(action: string): {
125
+ violated: Boundary[];
126
+ warnings: Boundary[];
127
+ };
128
+ getGrowthLog(limit?: number): GrowthEntry[];
129
+ logGrowth(description: string, category: GrowthEntry["category"], trigger: string): GrowthEntry;
130
+ getIntegrityScore(): number;
131
+ checkIntegrity(value: string, action: string, aligned: boolean, reflection: string): IntegrityCheck;
132
+ getIntegrityLog(limit?: number): IntegrityCheck[];
133
+ getSummary(): EgoSummary;
134
+ /** Format ego for injection into system prompt context */
135
+ formatForContext(): string;
136
+ /** Get full state (for serialization/UI) */
137
+ getState(): EgoState;
138
+ }
139
+ export declare function getEgoManager(filePath?: string): EgoManager;
140
+ export declare function resetEgoManagerForTest(): void;
@@ -1,12 +1,11 @@
1
1
  /**
2
- * Models configuration — SIMPLIFIED
2
+ * Models configuration — Multi-provider
3
3
  *
4
- * The multi-provider LLM abstraction (pi-ai) has been removed.
5
- * ANIMA uses Claude Code CLI exclusively. This file retains only
6
- * the minimal interface needed by the rest of the codebase.
7
- * Full replacement comes in Phase 2.
4
+ * ANIMA 6.5+ supports direct API runners for Anthropic, Google, OpenAI,
5
+ * and AWS Bedrock. This file seeds the models.json with all known models
6
+ * so the PI SDK ModelRegistry can discover them for the model catalog.
8
7
  */
9
- import { type AnimaConfig } from "../config/config.js";
8
+ import type { AnimaConfig } from "../config/config.js";
10
9
  export declare function ensureAnimaModelsJson(config?: AnimaConfig, agentDirOverride?: string): Promise<{
11
10
  agentDir: string;
12
11
  wrote: boolean;
@@ -53,6 +53,9 @@ export type NoxSoftRunnerStrategy = {
53
53
  } | {
54
54
  kind: "gemini-direct";
55
55
  provider: string;
56
+ } | {
57
+ kind: "openai-direct";
58
+ provider: string;
56
59
  } | {
57
60
  kind: "cli";
58
61
  provider: string;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * OpenAI Direct API Runner
3
+ *
4
+ * Makes calls directly to api.openai.com without needing the Codex CLI.
5
+ * Works with OpenAI API keys (OPENAI_API_KEY).
6
+ *
7
+ * Supports GPT-5.4, GPT-5.2, GPT-4.1, o3, o4-mini and other OpenAI models.
8
+ * Full tool-calling support using OpenAI's function calling format.
9
+ *
10
+ * This runner is automatically used when an OpenAI API key is available
11
+ * and the provider is set to "openai".
12
+ */
13
+ import type { ThinkLevel } from "../auto-reply/thinking.js";
14
+ import type { AnimaConfig } from "../config/config.js";
15
+ import type { EmbeddedPiRunResult } from "./pi-embedded-runner.js";
16
+ /**
17
+ * Run an agent turn directly against api.openai.com.
18
+ *
19
+ * Maintains multi-turn conversation history per session file.
20
+ * Falls back to single-turn if history is unavailable.
21
+ */
22
+ export declare function runOpenAIDirectAgent(params: {
23
+ apiKey: string;
24
+ sessionId: string;
25
+ sessionKey?: string;
26
+ agentId?: string;
27
+ sessionFile: string;
28
+ workspaceDir: string;
29
+ config?: AnimaConfig;
30
+ prompt: string;
31
+ model?: string;
32
+ thinkLevel?: ThinkLevel;
33
+ timeoutMs: number;
34
+ runId: string;
35
+ extraSystemPrompt?: string;
36
+ ownerNumbers?: string[];
37
+ onPartialReply?: (payload: {
38
+ text?: string;
39
+ }) => Promise<void> | void;
40
+ onAssistantMessageStart?: () => Promise<void> | void;
41
+ }): Promise<EmbeddedPiRunResult>;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Steer Command — persistent user direction for ANIMA agents
3
+ *
4
+ * Like Codex's steer feature: users set high-level direction that
5
+ * persists across the entire session. The agent follows this direction
6
+ * in everything it does.
7
+ *
8
+ * The steer text is injected into the context manager's prompt zone
9
+ * (Zone 2) with high priority, so it's always present in every
10
+ * model request.
11
+ *
12
+ * Usage:
13
+ * anima steer "Focus on security. Review all PRs for vulnerabilities."
14
+ * anima steer --show # Show current steer
15
+ * anima steer --clear # Clear steer
16
+ * anima steer --history # Show steer history
17
+ */
18
+ export interface SteerState {
19
+ active: string | null;
20
+ history: SteerEntry[];
21
+ updatedAt: number;
22
+ }
23
+ export interface SteerEntry {
24
+ text: string;
25
+ setAt: number;
26
+ setBy: string;
27
+ clearedAt?: number;
28
+ }
29
+ /**
30
+ * Set the steer direction. This persists across the session.
31
+ */
32
+ export declare function setSteer(text: string, setBy?: string): SteerState;
33
+ /**
34
+ * Get the current steer direction.
35
+ */
36
+ export declare function getSteer(): string | null;
37
+ /**
38
+ * Clear the steer direction.
39
+ */
40
+ export declare function clearSteer(): SteerState;
41
+ /**
42
+ * Get the steer history.
43
+ */
44
+ export declare function getSteerHistory(): SteerEntry[];
45
+ /**
46
+ * Format the steer for injection into the context prompt zone.
47
+ * Returns null if no steer is active.
48
+ */
49
+ export declare function formatSteerForContext(): string | null;
@@ -29,9 +29,9 @@ export declare const validateConnectParams: AjvPkg.ValidateFunction<{
29
29
  modelIdentifier?: string | undefined;
30
30
  instanceId?: string | undefined;
31
31
  mode: "cli" | "node" | "webchat" | "test" | "ui" | "backend" | "probe";
32
+ id: "cli" | "webchat" | "webchat-ui" | "anima-control-ui" | "gateway-client" | "anima-macos" | "anima-ios" | "anima-android" | "node-host" | "test" | "fingerprint" | "anima-probe";
32
33
  version: string;
33
34
  platform: string;
34
- id: "cli" | "webchat" | "webchat-ui" | "anima-control-ui" | "gateway-client" | "anima-macos" | "anima-ios" | "anima-android" | "node-host" | "test" | "fingerprint" | "anima-probe";
35
35
  };
36
36
  minProtocol: number;
37
37
  maxProtocol: number;
@@ -551,8 +551,8 @@ export declare const validateExecApprovalRequestParams: AjvPkg.ValidateFunction<
551
551
  timeoutMs?: number | undefined;
552
552
  cwd?: string | null | undefined;
553
553
  agentId?: string | null | undefined;
554
- security?: string | null | undefined;
555
554
  id?: string | undefined;
555
+ security?: string | null | undefined;
556
556
  resolvedPath?: string | null | undefined;
557
557
  host?: string | null | undefined;
558
558
  sessionKey?: string | null | undefined;
@@ -14,10 +14,10 @@ import "./shell-env-2QqHvBMl.js";
14
14
  import "./client-CfLiulzK.js";
15
15
  import "./call-B4lhqS6H.js";
16
16
  import "./message-channel-DIHHKJhk.js";
17
- import "./subagent-registry-CPtElVX0.js";
17
+ import "./subagent-registry-fLI7QDKe.js";
18
18
  import "./sessions-C_3wTmSA.js";
19
19
  import "./tokens-CmlI2hSz.js";
20
- import "./anthropic-direct-runner-C2Kwju-r.js";
20
+ import "./anthropic-direct-runner-DizCei79.js";
21
21
  import "./pi-embedded-helpers-D2SLlgS4.js";
22
22
  import "./sandbox-D-N7M7lp.js";
23
23
  import "./chrome-CmxIwwsr.js";
@@ -43,7 +43,7 @@ import "./common-CqIa2poH.js";
43
43
  import "./chunk-Cy0Bj0F3.js";
44
44
  import "./parse-timeout-D4UO8pY_.js";
45
45
  import "./active-listener-gGCoq55D.js";
46
- import "./context-B5X720Bs.js";
46
+ import "./context-mdxDsO1v.js";
47
47
  import "./pi-tools.policy-D2FusuQa.js";
48
48
  import "./session-cost-usage-DnxtnK1E.js";
49
49
  import "./control-service-3CI4vt1h.js";
@@ -58,7 +58,7 @@ import { t as renderTable } from "./table-Bt7rSYC6.js";
58
58
  import "./skill-scanner-Dld2ijVw.js";
59
59
  import { i as resolveArchiveKind } from "./archive-CNqghdwQ.js";
60
60
  import "./npm-registry-spec-jf7Mowdn.js";
61
- import { t as buildPluginStatusReport } from "./status-CxF6k_jr.js";
61
+ import { t as buildPluginStatusReport } from "./status-COc4xMti.js";
62
62
  import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-a4Vz_J08.js";
63
63
  import { n as updateNpmInstalledPlugins } from "./update-DA91za97.js";
64
64
  import os from "node:os";
@@ -2,7 +2,7 @@ import { m as resolveStateDir } from "./paths-zhVksOvm.js";
2
2
  import { V as theme, d as defaultRuntime } from "./subsystem-BAADN1B8.js";
3
3
  import { C as shortenHomePath, S as shortenHomeInString, _ as resolveConfigDir, b as resolveUserPath } from "./utils-CLYlhJuc.js";
4
4
  import "./pi-embedded-helpers-BZ9GspxK.js";
5
- import "./reply-DtHlnzOx.js";
5
+ import "./reply-93fMzde1.js";
6
6
  import "./exec-BylR5qWS.js";
7
7
  import "./agent-scope-CXxC8FFX.js";
8
8
  import "./model-selection-CY6r_3wt.js";
@@ -29,7 +29,7 @@ import "./auth-profiles-C-LuhW6c.js";
29
29
  import "./file-lock-Z53aFHvY.js";
30
30
  import "./model-auth-CHB3EySM.js";
31
31
  import "./tokens-SP2Q7i59.js";
32
- import "./anthropic-direct-runner-BeYCnvZ8.js";
32
+ import "./anthropic-direct-runner-OjcTAH6g.js";
33
33
  import "./deliver-BKzX3YoN.js";
34
34
  import "./memory-cli-DLtBA6r5.js";
35
35
  import "./manager-D8VCuzru.js";
@@ -59,7 +59,7 @@ import { t as renderTable } from "./table-Blmz7glr.js";
59
59
  import "./skill-scanner-5_Y3u6SU.js";
60
60
  import { i as resolveArchiveKind } from "./archive-D-dHRz-v.js";
61
61
  import "./npm-registry-spec-Br4B4I_3.js";
62
- import { t as buildPluginStatusReport } from "./status-tLgozFYL.js";
62
+ import { t as buildPluginStatusReport } from "./status-C_NBOv_V.js";
63
63
  import { i as resolvePluginInstallDir, n as installPluginFromNpmSpec, r as installPluginFromPath, t as recordPluginInstall } from "./installs-Bi6UipiE.js";
64
64
  import { n as updateNpmInstalledPlugins } from "./update-CqKpX3cX.js";
65
65
  import fs from "node:fs";
@@ -15,10 +15,10 @@ import "./shell-env-2QqHvBMl.js";
15
15
  import "./client-CfLiulzK.js";
16
16
  import "./call-B4lhqS6H.js";
17
17
  import "./message-channel-DIHHKJhk.js";
18
- import "./subagent-registry-CPtElVX0.js";
18
+ import "./subagent-registry-fLI7QDKe.js";
19
19
  import "./sessions-C_3wTmSA.js";
20
20
  import "./tokens-CmlI2hSz.js";
21
- import "./anthropic-direct-runner-C2Kwju-r.js";
21
+ import "./anthropic-direct-runner-DizCei79.js";
22
22
  import "./pi-embedded-helpers-D2SLlgS4.js";
23
23
  import "./sandbox-D-N7M7lp.js";
24
24
  import "./chrome-CmxIwwsr.js";
@@ -44,7 +44,7 @@ import "./common-CqIa2poH.js";
44
44
  import "./chunk-Cy0Bj0F3.js";
45
45
  import "./parse-timeout-D4UO8pY_.js";
46
46
  import "./active-listener-gGCoq55D.js";
47
- import "./context-B5X720Bs.js";
47
+ import "./context-mdxDsO1v.js";
48
48
  import "./pi-tools.policy-D2FusuQa.js";
49
49
  import "./session-cost-usage-DnxtnK1E.js";
50
50
  import "./control-service-3CI4vt1h.js";
@@ -55,13 +55,13 @@ import { t as formatDocsLink } from "./links-BjjDMNIq.js";
55
55
  import "./progress-glCgu57m.js";
56
56
  import "./logging-DWwOqnTW.js";
57
57
  import "./auth-store-BEfSfCbW.js";
58
- import "./register.subclis-CZ91ufCy.js";
59
- import { i as registerProgramCommands } from "./command-registry-D3VhxpWx.js";
58
+ import "./register.subclis-CtANqD5P.js";
59
+ import { i as registerProgramCommands } from "./command-registry-9V4uqrBV.js";
60
60
  import { r as setProgramContext } from "./program-context-Dw8HDTRz.js";
61
61
  import { r as listChannelPluginCatalogEntries } from "./catalog-B-TAbJ2o.js";
62
62
  import { t as forceFreePort } from "./ports-BGLuwt2Z.js";
63
- import { t as ensurePluginRegistryLoaded } from "./plugin-registry-QTkplP4s.js";
64
- import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-DAMtSjUF.js";
63
+ import { t as ensurePluginRegistryLoaded } from "./plugin-registry-Do2D1nDk.js";
64
+ import { n as formatCliBannerLine, r as hasEmittedCliBanner, t as emitCliBanner } from "./banner-Dpa5d1If.js";
65
65
  import { Command } from "commander";
66
66
 
67
67
  //#region src/cli/channel-options.ts
@@ -210,7 +210,7 @@ function registerPreActionHooks(program, programVersion) {
210
210
  await ensureNoxsoftBootstrapPersisted({ agent: auth.agent });
211
211
  }
212
212
  if (PLUGIN_REQUIRED_COMMANDS.has(commandPath[0])) {
213
- const { ensurePluginRegistryLoaded } = await import("./plugin-registry-QTkplP4s.js").then((n) => n.n);
213
+ const { ensurePluginRegistryLoaded } = await import("./plugin-registry-Do2D1nDk.js").then((n) => n.n);
214
214
  ensurePluginRegistryLoaded();
215
215
  }
216
216
  });
@@ -26,7 +26,7 @@ const entries = [
26
26
  name: "gateway",
27
27
  description: "ANIMA Gateway management and control",
28
28
  register: async (program) => {
29
- (await import("./gateway-cli-B_xsx5Nv.js")).registerGatewayCli(program);
29
+ (await import("./gateway-cli-CEM1vBuk.js")).registerGatewayCli(program);
30
30
  }
31
31
  },
32
32
  {
@@ -47,7 +47,7 @@ const entries = [
47
47
  name: "models",
48
48
  description: "Model discovery, switching, and provider configuration",
49
49
  register: async (program) => {
50
- (await import("./models-cli-BpjeKsUz.js")).registerModelsCli(program);
50
+ (await import("./models-cli-D7eSsPuk.js")).registerModelsCli(program);
51
51
  }
52
52
  },
53
53
  {
@@ -110,7 +110,7 @@ const entries = [
110
110
  name: "hooks",
111
111
  description: "Agent hook lifecycle and dependency management",
112
112
  register: async (program) => {
113
- (await import("./hooks-cli-DOs9WZ3K.js")).registerHooksCli(program);
113
+ (await import("./hooks-cli-DSlPBQSY.js")).registerHooksCli(program);
114
114
  }
115
115
  },
116
116
  {
@@ -124,8 +124,8 @@ const entries = [
124
124
  name: "plugins",
125
125
  description: "Install, update, and manage ANIMA extensions",
126
126
  register: async (program) => {
127
- (await import("./plugins-cli-Bc9oU1ld.js")).registerPluginsCli(program);
128
- const { registerPluginCliCommands } = await import("./cli-hcHk5KuP.js");
127
+ (await import("./plugins-cli-CoVt2ewg.js")).registerPluginsCli(program);
128
+ const { registerPluginCliCommands } = await import("./cli-Cuq4bIg4.js");
129
129
  registerPluginCliCommands(program, await loadConfig());
130
130
  }
131
131
  },
@@ -147,14 +147,14 @@ const entries = [
147
147
  name: "update",
148
148
  description: "Update ANIMA to the latest version",
149
149
  register: async (program) => {
150
- (await import("./update-cli-BuCw75tM.js")).registerUpdateCli(program);
150
+ (await import("./update-cli-DEe62XGU.js")).registerUpdateCli(program);
151
151
  }
152
152
  },
153
153
  {
154
154
  name: "completion",
155
155
  description: "Generate shell completion for tab-complete support",
156
156
  register: async (program) => {
157
- (await import("./completion-cli-B3BqQJq9.js").then((n) => n.n)).registerCompletionCli(program);
157
+ (await import("./completion-cli-BtvcR-U5.js").then((n) => n.n)).registerCompletionCli(program);
158
158
  }
159
159
  }
160
160
  ];
@@ -222,7 +222,7 @@ const coreEntries = [
222
222
  description: "Initialize ANIMA config and the agent workspace"
223
223
  }],
224
224
  register: async ({ program }) => {
225
- (await import("./register.setup-0jPnMgnz.js")).registerSetupCommand(program);
225
+ (await import("./register.setup-DlVH7FKe.js")).registerSetupCommand(program);
226
226
  }
227
227
  },
228
228
  {
@@ -231,7 +231,7 @@ const coreEntries = [
231
231
  description: "Interactive wizard for Gateway, workspace, and skills setup"
232
232
  }],
233
233
  register: async ({ program }) => {
234
- (await import("./register.onboard-B7Gavmvt.js")).registerOnboardCommand(program);
234
+ (await import("./register.onboard-6CbODzQ6.js")).registerOnboardCommand(program);
235
235
  }
236
236
  },
237
237
  {
@@ -240,7 +240,7 @@ const coreEntries = [
240
240
  description: "Interactive configuration for NoxSoft, memory, heartbeat, and identity"
241
241
  }],
242
242
  register: async ({ program }) => {
243
- (await import("./register.configure-CnEKV57N.js")).registerConfigureCommand(program);
243
+ (await import("./register.configure-CuzJxZmk.js")).registerConfigureCommand(program);
244
244
  }
245
245
  },
246
246
  {
@@ -249,7 +249,7 @@ const coreEntries = [
249
249
  description: "Advanced and complete settings for Gateway and CLI"
250
250
  }],
251
251
  register: async ({ program }) => {
252
- (await import("./settings-cli-DxNeu6kx.js")).registerSettingsCli(program);
252
+ (await import("./settings-cli-CZdlEmNi.js")).registerSettingsCli(program);
253
253
  }
254
254
  },
255
255
  {
@@ -258,7 +258,7 @@ const coreEntries = [
258
258
  description: "Read, write, and manage ANIMA configuration"
259
259
  }],
260
260
  register: async ({ program }) => {
261
- (await import("./config-cli-B6Np85rk.js")).registerConfigCli(program);
261
+ (await import("./config-cli-DfHE3KG-.js")).registerConfigCli(program);
262
262
  }
263
263
  },
264
264
  {
@@ -267,7 +267,7 @@ const coreEntries = [
267
267
  description: "Diagnose and repair Gateway and daemon issues"
268
268
  }],
269
269
  register: async ({ program }) => {
270
- (await import("./register.maintenance-CU1A-90-.js")).registerMaintenanceCommands(program);
270
+ (await import("./register.maintenance-Dla0H12S.js")).registerMaintenanceCommands(program);
271
271
  }
272
272
  },
273
273
  {
@@ -288,7 +288,7 @@ const coreEntries = [
288
288
  description: "Manage isolated agent workspaces, auth, and routing"
289
289
  }],
290
290
  register: async ({ program, ctx }) => {
291
- (await import("./register.agent-DUjwGw9d.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
291
+ (await import("./register.agent-DnkOx0U8.js")).registerAgentCommands(program, { agentChannelOptions: ctx.agentChannelOptions });
292
292
  }
293
293
  },
294
294
  {
@@ -297,7 +297,7 @@ const coreEntries = [
297
297
  description: "Send messages and perform channel actions"
298
298
  }],
299
299
  register: async ({ program, ctx }) => {
300
- (await import("./register.message-C1a0y2ZR.js")).registerMessageCommands(program, ctx);
300
+ (await import("./register.message-Brtushvp.js")).registerMessageCommands(program, ctx);
301
301
  }
302
302
  },
303
303
  {
@@ -316,7 +316,7 @@ const coreEntries = [
316
316
  }
317
317
  ],
318
318
  register: async ({ program }) => {
319
- (await import("./register.status-health-sessions-Cu5fDT-z.js")).registerStatusHealthSessionsCommands(program);
319
+ (await import("./register.status-health-sessions-CduFjFDB.js")).registerStatusHealthSessionsCommands(program);
320
320
  }
321
321
  },
322
322
  {
@@ -325,7 +325,7 @@ const coreEntries = [
325
325
  description: "Set your Anthropic API key — the fastest way to get started"
326
326
  }],
327
327
  register: async ({ program }) => {
328
- const { setupTokenCommand, hasAnthropicToken, autoDetectToken } = await import("./setup-token-DYh2QzJ-.js");
328
+ const { setupTokenCommand, hasAnthropicToken, autoDetectToken } = await import("./setup-token-Lee4gM5w.js");
329
329
  program.command("setup-token").description("Set your Anthropic API key — no claude CLI login needed").option("--token <key>", "Anthropic API key (sk-ant-api01-... or sk-ant-oat01-...)").option("--skip-validation", "Skip live API check (use if offline)").option("--json", "Output JSON result", false).addHelpText("after", `
330
330
  Examples:
331
331
  anima setup-token # Interactive — prompts for key + validates
@@ -380,7 +380,7 @@ Examples:
380
380
  }
381
381
  ],
382
382
  register: async ({ program }) => {
383
- (await import("./register.anima-CtKNrpE8.js")).registerAnimaCommands(program);
383
+ (await import("./register.anima-B36rTHUt.js")).registerAnimaCommands(program);
384
384
  }
385
385
  }
386
386
  ];
@@ -14,10 +14,10 @@ import "./shell-env-2QqHvBMl.js";
14
14
  import "./client-CfLiulzK.js";
15
15
  import "./call-B4lhqS6H.js";
16
16
  import "./message-channel-DIHHKJhk.js";
17
- import "./subagent-registry-CPtElVX0.js";
17
+ import "./subagent-registry-fLI7QDKe.js";
18
18
  import "./sessions-C_3wTmSA.js";
19
19
  import "./tokens-CmlI2hSz.js";
20
- import "./anthropic-direct-runner-C2Kwju-r.js";
20
+ import "./anthropic-direct-runner-DizCei79.js";
21
21
  import "./pi-embedded-helpers-D2SLlgS4.js";
22
22
  import "./sandbox-D-N7M7lp.js";
23
23
  import "./chrome-CmxIwwsr.js";
@@ -43,7 +43,7 @@ import "./common-CqIa2poH.js";
43
43
  import "./chunk-Cy0Bj0F3.js";
44
44
  import "./parse-timeout-D4UO8pY_.js";
45
45
  import "./active-listener-gGCoq55D.js";
46
- import "./context-B5X720Bs.js";
46
+ import "./context-mdxDsO1v.js";
47
47
  import "./pi-tools.policy-D2FusuQa.js";
48
48
  import "./session-cost-usage-DnxtnK1E.js";
49
49
  import "./control-service-3CI4vt1h.js";
@@ -59,24 +59,24 @@ import "./accounts-COxGcLGB.js";
59
59
  import { t as collectOption } from "./helpers-DLgbkcEn.js";
60
60
  import "./onboard-helpers-CFudIoX4.js";
61
61
  import "./prompt-style-D6SRiiTV.js";
62
- import { n as createDefaultDeps } from "./outbound-send-deps-T_FgdfgW.js";
62
+ import { n as createDefaultDeps } from "./outbound-send-deps-Y9AxHeLG.js";
63
63
  import "./catalog-B-TAbJ2o.js";
64
64
  import "./plugin-auto-enable-DhuD30Je.js";
65
- import "./auth-choice-Dc5TAJwT.js";
65
+ import "./auth-choice-B1iGnjuE.js";
66
66
  import "./prompts-BmgT_kkv.js";
67
67
  import "./noxsoft-bootstrap-C4dSx7K_.js";
68
68
  import "./logging-_rCcBkls.js";
69
69
  import "./note-CeLGcHqv.js";
70
70
  import "./agents.config-Br4ULmK0.js";
71
- import "./agent-CnS0SRpT.js";
72
- import "./session-C7IGnhd1.js";
71
+ import "./agent-DuW0onwk.js";
72
+ import "./session-BMDpwIJu.js";
73
73
  import "./skill-scanner-Dld2ijVw.js";
74
74
  import "./archive-CNqghdwQ.js";
75
75
  import "./npm-registry-spec-jf7Mowdn.js";
76
76
  import "./clack-prompter-0JW5kry0.js";
77
77
  import "./installs-a4Vz_J08.js";
78
- import { a as agentsDeleteCommand, i as agentsSetIdentityCommand, n as agentsReadinessCommand, o as agentsAddCommand, r as agentsListCommand, s as agentCliCommand } from "./agents-CvMRplDx.js";
79
- import "./onboard-channels-UkphAdCy.js";
78
+ import { a as agentsDeleteCommand, i as agentsSetIdentityCommand, n as agentsReadinessCommand, o as agentsAddCommand, r as agentsListCommand, s as agentCliCommand } from "./agents-BUXkSDns.js";
79
+ import "./onboard-channels-BsCq32Hn.js";
80
80
  import { t as hasExplicitOptions } from "./command-options-DtJ8-EC7.js";
81
81
  import { t as formatHelpExamples } from "./help-format-ZKxl6UCb.js";
82
82