@runcore-sh/runcore 0.1.9 → 0.1.10

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 (63) hide show
  1. package/dist/cli.js +232 -11
  2. package/dist/cli.js.map +1 -1
  3. package/dist/files/deep-index.d.ts +59 -0
  4. package/dist/files/deep-index.d.ts.map +1 -0
  5. package/dist/files/deep-index.js +337 -0
  6. package/dist/files/deep-index.js.map +1 -0
  7. package/dist/files/import.d.ts +44 -0
  8. package/dist/files/import.d.ts.map +1 -0
  9. package/dist/files/import.js +213 -0
  10. package/dist/files/import.js.map +1 -0
  11. package/dist/files/index-local.d.ts +37 -0
  12. package/dist/files/index-local.d.ts.map +1 -0
  13. package/dist/files/index-local.js +198 -0
  14. package/dist/files/index-local.js.map +1 -0
  15. package/dist/nerve/state.d.ts +1 -1
  16. package/dist/nerve/state.d.ts.map +1 -1
  17. package/dist/nerve/state.js +1 -1
  18. package/dist/nerve/state.js.map +1 -1
  19. package/dist/posture/engine.d.ts +41 -0
  20. package/dist/posture/engine.d.ts.map +1 -0
  21. package/dist/posture/engine.js +217 -0
  22. package/dist/posture/engine.js.map +1 -0
  23. package/dist/posture/index.d.ts +11 -0
  24. package/dist/posture/index.d.ts.map +1 -0
  25. package/dist/posture/index.js +10 -0
  26. package/dist/posture/index.js.map +1 -0
  27. package/dist/posture/middleware.d.ts +30 -0
  28. package/dist/posture/middleware.d.ts.map +1 -0
  29. package/dist/posture/middleware.js +92 -0
  30. package/dist/posture/middleware.js.map +1 -0
  31. package/dist/posture/types.d.ts +61 -0
  32. package/dist/posture/types.d.ts.map +1 -0
  33. package/dist/posture/types.js +48 -0
  34. package/dist/posture/types.js.map +1 -0
  35. package/dist/server.d.ts +3 -1
  36. package/dist/server.d.ts.map +1 -1
  37. package/dist/server.js +191 -45
  38. package/dist/server.js.map +1 -1
  39. package/dist/tier/bond.d.ts +51 -0
  40. package/dist/tier/bond.d.ts.map +1 -0
  41. package/dist/tier/bond.js +154 -0
  42. package/dist/tier/bond.js.map +1 -0
  43. package/dist/tier/freeze.d.ts +21 -0
  44. package/dist/tier/freeze.d.ts.map +1 -0
  45. package/dist/tier/freeze.js +73 -0
  46. package/dist/tier/freeze.js.map +1 -0
  47. package/dist/tier/gate.d.ts +11 -0
  48. package/dist/tier/gate.d.ts.map +1 -0
  49. package/dist/tier/gate.js +25 -0
  50. package/dist/tier/gate.js.map +1 -0
  51. package/dist/tier/heartbeat.d.ts +22 -0
  52. package/dist/tier/heartbeat.d.ts.map +1 -0
  53. package/dist/tier/heartbeat.js +128 -0
  54. package/dist/tier/heartbeat.js.map +1 -0
  55. package/dist/tier/token.d.ts +22 -0
  56. package/dist/tier/token.d.ts.map +1 -0
  57. package/dist/tier/token.js +100 -0
  58. package/dist/tier/token.js.map +1 -0
  59. package/dist/tier/types.d.ts +44 -0
  60. package/dist/tier/types.d.ts.map +1 -0
  61. package/dist/tier/types.js +61 -0
  62. package/dist/tier/types.js.map +1 -0
  63. package/package.json +1 -1
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Local indexing — process imported files through Ollama for semantic retrieval.
3
+ *
4
+ * All processing runs on-device. The membrane guarantees that if any content
5
+ * accidentally reaches a cloud LLM, sensitive data is replaced with typed
6
+ * placeholders before network egress.
7
+ *
8
+ * Pipeline:
9
+ * 1. Read imported files from brain/
10
+ * 2. Scan for sensitive terms → auto-register with SensitiveRegistry
11
+ * 3. Generate summaries via local Ollama (never cloud)
12
+ * 4. Store summaries as semantic memory entries (brain/memory/semantic.jsonl)
13
+ *
14
+ * The import manifest (brain/.core/import-manifest.json) tracks what's been
15
+ * indexed so we don't re-process files.
16
+ */
17
+ /** Scan text for potential sensitive content and auto-register with the registry. */
18
+ export declare function detectSensitiveTerms(text: string, fileName: string): {
19
+ category: string;
20
+ hint: string;
21
+ }[];
22
+ /**
23
+ * Index imported files locally using Ollama.
24
+ * Generates summaries and stores as semantic memory.
25
+ * All processing stays on-device.
26
+ */
27
+ export declare function indexImportedFiles(options: {
28
+ /** Force local-only (Ollama). If false, uses whatever provider is configured. */
29
+ localOnly?: boolean;
30
+ /** Max files to index per run */
31
+ batchSize?: number;
32
+ }): Promise<{
33
+ indexed: number;
34
+ sensitive: number;
35
+ skipped: number;
36
+ }>;
37
+ //# sourceMappingURL=index-local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-local.d.ts","sourceRoot":"","sources":["../../src/files/index-local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA8BH,qFAAqF;AACrF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAoCtC;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAChD,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAoHnE"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * Local indexing — process imported files through Ollama for semantic retrieval.
3
+ *
4
+ * All processing runs on-device. The membrane guarantees that if any content
5
+ * accidentally reaches a cloud LLM, sensitive data is replaced with typed
6
+ * placeholders before network egress.
7
+ *
8
+ * Pipeline:
9
+ * 1. Read imported files from brain/
10
+ * 2. Scan for sensitive terms → auto-register with SensitiveRegistry
11
+ * 3. Generate summaries via local Ollama (never cloud)
12
+ * 4. Store summaries as semantic memory entries (brain/memory/semantic.jsonl)
13
+ *
14
+ * The import manifest (brain/.core/import-manifest.json) tracks what's been
15
+ * indexed so we don't re-process files.
16
+ */
17
+ import { readFile, writeFile } from "node:fs/promises";
18
+ import { join, resolve, extname } from "node:path";
19
+ import { existsSync } from "node:fs";
20
+ import { createLogger } from "../utils/logger.js";
21
+ const log = createLogger("index-local");
22
+ const BRAIN_DIR = resolve(process.cwd(), "brain");
23
+ const INDEX_MANIFEST_PATH = join(BRAIN_DIR, ".core", "index-manifest.json");
24
+ async function loadIndexManifest() {
25
+ try {
26
+ const raw = await readFile(INDEX_MANIFEST_PATH, "utf-8");
27
+ return JSON.parse(raw);
28
+ }
29
+ catch {
30
+ return { indexed: [], lastRun: "" };
31
+ }
32
+ }
33
+ async function saveIndexManifest(manifest) {
34
+ await writeFile(INDEX_MANIFEST_PATH, JSON.stringify(manifest, null, 2), "utf-8");
35
+ }
36
+ /** Scan text for potential sensitive content and auto-register with the registry. */
37
+ export function detectSensitiveTerms(text, fileName) {
38
+ const found = [];
39
+ // Email addresses
40
+ const emails = text.match(/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g);
41
+ if (emails) {
42
+ for (const email of new Set(emails)) {
43
+ found.push({ category: "EMAIL", hint: email });
44
+ }
45
+ }
46
+ // Phone numbers
47
+ const phones = text.match(/\b(?:\+?1[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}\b/g);
48
+ if (phones) {
49
+ for (const phone of new Set(phones)) {
50
+ found.push({ category: "PHONE", hint: phone });
51
+ }
52
+ }
53
+ // Physical addresses (simple heuristic: number + street name + type)
54
+ const addresses = text.match(/\b\d{1,5}\s+[A-Za-z]+\s+(?:St|Ave|Rd|Dr|Blvd|Ln|Way|Ct|Pl|Cir)\.?\b/gi);
55
+ if (addresses) {
56
+ for (const addr of new Set(addresses)) {
57
+ found.push({ category: "ADDRESS", hint: addr });
58
+ }
59
+ }
60
+ // Dates of birth context (e.g., "born on", "DOB:", "date of birth")
61
+ const dobContext = text.match(/(?:born\s+(?:on\s+)?|DOB[:\s]+|date\s+of\s+birth[:\s]+)\d{1,2}[/\-\.]\d{1,2}[/\-\.]\d{2,4}/gi);
62
+ if (dobContext) {
63
+ for (const dob of new Set(dobContext)) {
64
+ found.push({ category: "DOB", hint: dob });
65
+ }
66
+ }
67
+ return found;
68
+ }
69
+ /**
70
+ * Index imported files locally using Ollama.
71
+ * Generates summaries and stores as semantic memory.
72
+ * All processing stays on-device.
73
+ */
74
+ export async function indexImportedFiles(options) {
75
+ const { localOnly = true, batchSize = 20 } = options;
76
+ // Load import manifest to know what files exist
77
+ const importManifestPath = join(BRAIN_DIR, ".core", "import-manifest.json");
78
+ if (!existsSync(importManifestPath)) {
79
+ return { indexed: 0, sensitive: 0, skipped: 0 };
80
+ }
81
+ const importManifest = JSON.parse(await readFile(importManifestPath, "utf-8"));
82
+ const importedFiles = importManifest.files || [];
83
+ // Load index manifest to know what's already indexed
84
+ const indexManifest = await loadIndexManifest();
85
+ const alreadyIndexed = new Set(indexManifest.indexed);
86
+ // Filter to unindexed text files
87
+ const textExts = new Set([".md", ".txt", ".yaml", ".yml", ".json", ".csv"]);
88
+ const toIndex = importedFiles
89
+ .filter(f => !alreadyIndexed.has(f.destination))
90
+ .filter(f => textExts.has(extname(f.destination).toLowerCase()))
91
+ .slice(0, batchSize);
92
+ if (toIndex.length === 0) {
93
+ return { indexed: 0, sensitive: 0, skipped: 0 };
94
+ }
95
+ let indexed = 0;
96
+ let sensitiveCount = 0;
97
+ const { appendBrainLine, ensureBrainJsonl } = await import("../lib/brain-io.js");
98
+ const semanticPath = join(BRAIN_DIR, "memory", "semantic.jsonl");
99
+ await ensureBrainJsonl(semanticPath, JSON.stringify({ _schema: "semantic", _version: "1.0" }));
100
+ // Auto-detect sensitive terms and write to sensitive.yaml
101
+ const newSensitiveTerms = [];
102
+ for (const file of toIndex) {
103
+ const fullPath = join(BRAIN_DIR, file.destination);
104
+ if (!existsSync(fullPath)) {
105
+ indexManifest.indexed.push(file.destination);
106
+ continue;
107
+ }
108
+ try {
109
+ const content = await readFile(fullPath, "utf-8");
110
+ if (!content.trim())
111
+ continue;
112
+ // Detect sensitive terms
113
+ const sensitive = detectSensitiveTerms(content, file.destination);
114
+ for (const term of sensitive) {
115
+ newSensitiveTerms.push({ value: term.hint, category: term.category });
116
+ sensitiveCount++;
117
+ }
118
+ // Generate summary locally
119
+ let summary = "";
120
+ if (localOnly) {
121
+ try {
122
+ const { streamChatLocal } = await import("../llm/ollama.js");
123
+ const chunks = [];
124
+ // Truncate content to avoid overloading small models
125
+ const truncated = content.length > 4000 ? content.slice(0, 4000) + "\n...[truncated]" : content;
126
+ await new Promise((res, rej) => {
127
+ streamChatLocal({
128
+ messages: [
129
+ { role: "system", content: "Summarize this document in 2-3 sentences. Focus on key facts, decisions, and actionable information. Be concise." },
130
+ { role: "user", content: truncated },
131
+ ],
132
+ model: "auto",
133
+ onToken: (t) => { chunks.push(t); },
134
+ onDone: () => res(),
135
+ onError: (e) => rej(e),
136
+ });
137
+ });
138
+ summary = chunks.join("");
139
+ }
140
+ catch {
141
+ // Ollama not available — store raw first line as summary
142
+ summary = content.split("\n").filter(l => l.trim())[0]?.slice(0, 200) || file.destination;
143
+ }
144
+ }
145
+ else {
146
+ // Fallback: first meaningful line as summary (membrane protects if cloud is used)
147
+ summary = content.split("\n").filter(l => l.trim())[0]?.slice(0, 200) || file.destination;
148
+ }
149
+ // Store as semantic memory entry
150
+ const entry = {
151
+ id: `import_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 6)}`,
152
+ type: "semantic",
153
+ content: summary,
154
+ meta: {
155
+ source: file.destination,
156
+ category: file.category,
157
+ importedFrom: "local-import",
158
+ },
159
+ createdAt: new Date().toISOString(),
160
+ };
161
+ await appendBrainLine(semanticPath, JSON.stringify(entry));
162
+ indexManifest.indexed.push(file.destination);
163
+ indexed++;
164
+ }
165
+ catch (err) {
166
+ log.warn(`Failed to index ${file.destination}: ${err instanceof Error ? err.message : String(err)}`);
167
+ }
168
+ }
169
+ // Append new sensitive terms to sensitive.yaml
170
+ if (newSensitiveTerms.length > 0) {
171
+ await appendSensitiveTerms(newSensitiveTerms);
172
+ log.info(`Auto-detected ${newSensitiveTerms.length} sensitive terms from imported files`);
173
+ }
174
+ // Save index manifest
175
+ indexManifest.lastRun = new Date().toISOString();
176
+ await saveIndexManifest(indexManifest);
177
+ log.info(`Indexed ${indexed} files, detected ${sensitiveCount} sensitive terms`);
178
+ return { indexed, sensitive: sensitiveCount, skipped: toIndex.length - indexed };
179
+ }
180
+ /** Append auto-detected sensitive terms to brain/knowledge/sensitive.yaml */
181
+ async function appendSensitiveTerms(terms) {
182
+ const filePath = join(BRAIN_DIR, "knowledge", "sensitive.yaml");
183
+ let existing = "";
184
+ try {
185
+ existing = await readFile(filePath, "utf-8");
186
+ }
187
+ catch { /* new file */ }
188
+ // Deduplicate against existing content
189
+ const newEntries = terms
190
+ .filter(t => !existing.includes(t.value))
191
+ .map(t => `- value: "${t.value.replace(/"/g, '\\"')}"\n category: ${t.category}`)
192
+ .join("\n");
193
+ if (newEntries) {
194
+ const header = existing ? "\n# Auto-detected from imported files\n" : "# Sensitive terms — auto-detected + manual\n# The membrane replaces these with <<CATEGORY_N>> before any LLM API call.\n\n";
195
+ await writeFile(filePath, existing + header + newEntries + "\n", "utf-8");
196
+ }
197
+ }
198
+ //# sourceMappingURL=index-local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-local.js","sourceRoot":"","sources":["../../src/files/index-local.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,6 @@ export interface NerveState {
30
30
  joy: DotState;
31
31
  timestamp: string;
32
32
  }
33
- /** Get the full nerve state — three dots of goo. */
33
+ /** Get the full nerve state — three dots of field. */
34
34
  export declare function getNerveState(): Promise<NerveState>;
35
35
  //# sourceMappingURL=state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/nerve/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEhF;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AA8ND,oDAAoD;AACpD,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAazD"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/nerve/state.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEhF;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,WAAW,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,QAAQ,CAAC;IACf,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AA8ND,sDAAsD;AACtD,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAazD"}
@@ -240,7 +240,7 @@ async function computeJoy() {
240
240
  : items.map(i => i.text).join(". ");
241
241
  return { color, label, detail, items };
242
242
  }
243
- /** Get the full nerve state — three dots of goo. */
243
+ /** Get the full nerve state — three dots of field. */
244
244
  export async function getNerveState() {
245
245
  const [sense, work, joy] = await Promise.all([
246
246
  computeSense(),
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/nerve/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/nerve/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Posture Engine — observes interaction patterns and adapts UI surface.
3
+ *
4
+ * The UI assembles itself around the user:
5
+ * - No interaction → silent mode, Core reaches out proactively
6
+ * - Light touches (pulse checks) → pulse mode
7
+ * - Deep dives (pages, agent logs, settings) → board mode
8
+ *
9
+ * Transitions happen automatically based on intent accumulation.
10
+ * The user can also pin a posture to lock it.
11
+ * Posture decays toward silent over time — if you stop looking, the UI fades.
12
+ */
13
+ import type { PostureName, PostureState, PostureSurface, InteractionSignal } from "./types.js";
14
+ /** Get current posture. */
15
+ export declare function getPosture(): PostureName;
16
+ /** Get current posture state (full details). */
17
+ export declare function getPostureState(): PostureState;
18
+ /** Get the surface map for the current posture. */
19
+ export declare function getSurface(): PostureSurface;
20
+ /** Check if a specific surface is available. */
21
+ export declare function hasSurface(surface: keyof PostureSurface): boolean;
22
+ /**
23
+ * Record an interaction signal. This is the primary input to the posture engine.
24
+ * Called by route handlers, middleware, or UI events.
25
+ */
26
+ export declare function recordInteraction(signal: InteractionSignal): void;
27
+ /**
28
+ * Pin the current posture — locks auto-transitions until unpinned.
29
+ * User explicitly chose this level. Respect it.
30
+ */
31
+ export declare function pinPosture(posture: PostureName): void;
32
+ /** Unpin — allow auto-transitions again. */
33
+ export declare function unpinPosture(): void;
34
+ /** Check for decay — called on a timer or at startup. */
35
+ export declare function evaluateDecay(): void;
36
+ /** Load posture state from brain/settings.json. */
37
+ export declare function loadPosture(): Promise<void>;
38
+ /** Start the decay check timer — runs hourly. */
39
+ export declare function startDecayTimer(): void;
40
+ export declare function stopDecayTimer(): void;
41
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/posture/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAyCpB,2BAA2B;AAC3B,wBAAgB,UAAU,IAAI,WAAW,CAExC;AAED,gDAAgD;AAChD,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED,mDAAmD;AACnD,wBAAgB,UAAU,IAAI,cAAc,CAE3C;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,cAAc,GAAG,OAAO,CAEjE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAgBjE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAMrD;AAED,4CAA4C;AAC5C,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAiCD,yDAAyD;AACzD,wBAAgB,aAAa,IAAI,IAAI,CAgBpC;AAoBD,mDAAmD;AACnD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBjD;AA8BD,iDAAiD;AACjD,wBAAgB,eAAe,IAAI,IAAI,CAItC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Posture Engine — observes interaction patterns and adapts UI surface.
3
+ *
4
+ * The UI assembles itself around the user:
5
+ * - No interaction → silent mode, Core reaches out proactively
6
+ * - Light touches (pulse checks) → pulse mode
7
+ * - Deep dives (pages, agent logs, settings) → board mode
8
+ *
9
+ * Transitions happen automatically based on intent accumulation.
10
+ * The user can also pin a posture to lock it.
11
+ * Posture decays toward silent over time — if you stop looking, the UI fades.
12
+ */
13
+ import { readFile, writeFile } from "node:fs/promises";
14
+ import { join, resolve } from "node:path";
15
+ import { createLogger } from "../utils/logger.js";
16
+ import { POSTURE_SURFACE } from "./types.js";
17
+ const log = createLogger("posture");
18
+ const BRAIN_DIR = resolve(process.cwd(), "brain");
19
+ const STATE_PATH = join(BRAIN_DIR, "settings.json");
20
+ // ── In-memory state ─────────────────────────────────────────────────────────
21
+ const DEFAULT_STATE = {
22
+ current: "silent",
23
+ changedAt: new Date().toISOString(),
24
+ pinned: false,
25
+ interactions: {},
26
+ windowStart: new Date().toISOString(),
27
+ };
28
+ let state = { ...DEFAULT_STATE };
29
+ // ── Thresholds ──────────────────────────────────────────────────────────────
30
+ /** Interactions in a 24h window to trigger escalation */
31
+ const ESCALATION_THRESHOLDS = {
32
+ /** Any interaction at all → at least pulse */
33
+ toPulse: 1,
34
+ /** Deep interactions (pages, agents, settings) → board */
35
+ toBoard: 5,
36
+ };
37
+ /** Hours of silence before decay */
38
+ const DECAY_HOURS = {
39
+ /** Board → pulse after this many hours of no interaction */
40
+ boardToPulse: 48,
41
+ /** Pulse → silent after this many hours of no interaction */
42
+ pulseToSilent: 168, // 1 week
43
+ };
44
+ const WINDOW_MS = 24 * 60 * 60 * 1000; // 24h rolling window
45
+ // ── Core API ────────────────────────────────────────────────────────────────
46
+ /** Get current posture. */
47
+ export function getPosture() {
48
+ return state.current;
49
+ }
50
+ /** Get current posture state (full details). */
51
+ export function getPostureState() {
52
+ return { ...state };
53
+ }
54
+ /** Get the surface map for the current posture. */
55
+ export function getSurface() {
56
+ return POSTURE_SURFACE[state.current];
57
+ }
58
+ /** Check if a specific surface is available. */
59
+ export function hasSurface(surface) {
60
+ return POSTURE_SURFACE[state.current][surface];
61
+ }
62
+ /**
63
+ * Record an interaction signal. This is the primary input to the posture engine.
64
+ * Called by route handlers, middleware, or UI events.
65
+ */
66
+ export function recordInteraction(signal) {
67
+ // Reset window if expired
68
+ const windowAge = Date.now() - new Date(state.windowStart).getTime();
69
+ if (windowAge > WINDOW_MS) {
70
+ state.interactions = {};
71
+ state.windowStart = new Date().toISOString();
72
+ }
73
+ // Increment counter for this surface
74
+ const key = signal.detail ? `${signal.surface}:${signal.detail}` : signal.surface;
75
+ state.interactions[key] = (state.interactions[key] || 0) + 1;
76
+ // Evaluate transition
77
+ if (!state.pinned) {
78
+ evaluateEscalation(signal);
79
+ }
80
+ }
81
+ /**
82
+ * Pin the current posture — locks auto-transitions until unpinned.
83
+ * User explicitly chose this level. Respect it.
84
+ */
85
+ export function pinPosture(posture) {
86
+ state.current = posture;
87
+ state.pinned = true;
88
+ state.changedAt = new Date().toISOString();
89
+ log.info(`Posture pinned: ${posture}`);
90
+ saveState();
91
+ }
92
+ /** Unpin — allow auto-transitions again. */
93
+ export function unpinPosture() {
94
+ state.pinned = false;
95
+ log.info("Posture unpinned — auto-transitions enabled");
96
+ saveState();
97
+ }
98
+ // ── Transition logic ────────────────────────────────────────────────────────
99
+ function evaluateEscalation(signal) {
100
+ const prev = state.current;
101
+ const deepSurfaces = ["pages", "agents", "settings", "page-view"];
102
+ const isDeep = deepSurfaces.includes(signal.surface);
103
+ // Count deep interactions in current window
104
+ const deepCount = Object.entries(state.interactions)
105
+ .filter(([k]) => deepSurfaces.some(s => k.startsWith(s)))
106
+ .reduce((sum, [, v]) => sum + v, 0);
107
+ const totalCount = Object.values(state.interactions)
108
+ .reduce((sum, v) => sum + v, 0);
109
+ if (state.current === "silent") {
110
+ if (totalCount >= ESCALATION_THRESHOLDS.toPulse) {
111
+ transition("pulse");
112
+ }
113
+ }
114
+ else if (state.current === "pulse") {
115
+ if (isDeep && deepCount >= ESCALATION_THRESHOLDS.toBoard) {
116
+ transition("board");
117
+ }
118
+ }
119
+ // Board doesn't escalate further — it's the max
120
+ if (state.current !== prev) {
121
+ log.info(`Posture escalated: ${prev} → ${state.current} (${signal.surface})`);
122
+ }
123
+ }
124
+ /** Check for decay — called on a timer or at startup. */
125
+ export function evaluateDecay() {
126
+ if (state.pinned)
127
+ return;
128
+ const hoursSinceChange = (Date.now() - new Date(state.changedAt).getTime()) / (60 * 60 * 1000);
129
+ const hoursSinceInteraction = getHoursSinceLastInteraction();
130
+ const prev = state.current;
131
+ if (state.current === "board" && hoursSinceInteraction >= DECAY_HOURS.boardToPulse) {
132
+ transition("pulse");
133
+ }
134
+ else if (state.current === "pulse" && hoursSinceInteraction >= DECAY_HOURS.pulseToSilent) {
135
+ transition("silent");
136
+ }
137
+ if (state.current !== prev) {
138
+ log.info(`Posture decayed: ${prev} → ${state.current} (${hoursSinceInteraction.toFixed(0)}h silent)`);
139
+ }
140
+ }
141
+ function getHoursSinceLastInteraction() {
142
+ // Use window start + max interaction timestamp
143
+ const windowAge = Date.now() - new Date(state.windowStart).getTime();
144
+ if (Object.keys(state.interactions).length === 0) {
145
+ return (Date.now() - new Date(state.changedAt).getTime()) / (60 * 60 * 1000);
146
+ }
147
+ // If there are interactions in the window, consider the window recent
148
+ return windowAge / (60 * 60 * 1000);
149
+ }
150
+ function transition(to) {
151
+ state.current = to;
152
+ state.changedAt = new Date().toISOString();
153
+ saveState();
154
+ }
155
+ // ── Persistence ─────────────────────────────────────────────────────────────
156
+ /** Load posture state from brain/settings.json. */
157
+ export async function loadPosture() {
158
+ try {
159
+ const raw = await readFile(STATE_PATH, "utf-8");
160
+ const settings = JSON.parse(raw);
161
+ if (settings.posture) {
162
+ state = {
163
+ current: settings.posture.current || "silent",
164
+ changedAt: settings.posture.changedAt || new Date().toISOString(),
165
+ pinned: settings.posture.pinned || false,
166
+ interactions: settings.posture.interactions || {},
167
+ windowStart: settings.posture.windowStart || new Date().toISOString(),
168
+ };
169
+ log.info(`Posture loaded: ${state.current}${state.pinned ? " (pinned)" : ""}`);
170
+ }
171
+ }
172
+ catch {
173
+ // No settings yet — start silent
174
+ state = { ...DEFAULT_STATE };
175
+ }
176
+ // Check for decay on load
177
+ evaluateDecay();
178
+ }
179
+ async function saveState() {
180
+ try {
181
+ let settings = {};
182
+ try {
183
+ const raw = await readFile(STATE_PATH, "utf-8");
184
+ settings = JSON.parse(raw);
185
+ }
186
+ catch { /* new file */ }
187
+ settings.posture = {
188
+ current: state.current,
189
+ changedAt: state.changedAt,
190
+ pinned: state.pinned,
191
+ interactions: state.interactions,
192
+ windowStart: state.windowStart,
193
+ };
194
+ await writeFile(STATE_PATH, JSON.stringify(settings, null, 2), "utf-8");
195
+ }
196
+ catch (err) {
197
+ log.warn("Failed to save posture state", {
198
+ error: err instanceof Error ? err.message : String(err),
199
+ });
200
+ }
201
+ }
202
+ // ── Decay timer ─────────────────────────────────────────────────────────────
203
+ let decayTimer = null;
204
+ /** Start the decay check timer — runs hourly. */
205
+ export function startDecayTimer() {
206
+ if (decayTimer)
207
+ return;
208
+ decayTimer = setInterval(() => evaluateDecay(), 60 * 60 * 1000);
209
+ log.info("Posture decay timer started (1h interval)");
210
+ }
211
+ export function stopDecayTimer() {
212
+ if (decayTimer) {
213
+ clearInterval(decayTimer);
214
+ decayTimer = null;
215
+ }
216
+ }
217
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/posture/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Posture module — UI surface assembly around the user.
3
+ *
4
+ * Three modes: silent → pulse → board.
5
+ * Driven by intent accumulation, not configuration.
6
+ */
7
+ export { getPosture, getPostureState, getSurface, hasSurface, recordInteraction, pinPosture, unpinPosture, evaluateDecay, loadPosture, startDecayTimer, stopDecayTimer, } from "./engine.js";
8
+ export { postureTracker, pageViewTracker, requireSurface, postureHeader, } from "./middleware.js";
9
+ export type { PostureName, PostureState, PostureSurface, InteractionSignal, } from "./types.js";
10
+ export { POSTURE_SURFACE, POSTURE_LEVEL } from "./types.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/posture/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,UAAU,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Posture module — UI surface assembly around the user.
3
+ *
4
+ * Three modes: silent → pulse → board.
5
+ * Driven by intent accumulation, not configuration.
6
+ */
7
+ export { getPosture, getPostureState, getSurface, hasSurface, recordInteraction, pinPosture, unpinPosture, evaluateDecay, loadPosture, startDecayTimer, stopDecayTimer, } from "./engine.js";
8
+ export { postureTracker, pageViewTracker, requireSurface, postureHeader, } from "./middleware.js";
9
+ export { POSTURE_SURFACE, POSTURE_LEVEL } from "./types.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/posture/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,UAAU,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,eAAe,EACf,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AASzB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}