@felan-ai/felan 0.21.16 → 0.22.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 (67) hide show
  1. package/README.md +4 -0
  2. package/dist/dependencies.js +1 -1
  3. package/dist/dependencies.js.map +1 -1
  4. package/dist/extensions.d.ts +1 -1
  5. package/dist/extensions.d.ts.map +1 -1
  6. package/dist/extensions.js +2 -2
  7. package/dist/extensions.js.map +1 -1
  8. package/dist/herdr.d.ts +22 -0
  9. package/dist/herdr.d.ts.map +1 -0
  10. package/dist/herdr.js +208 -0
  11. package/dist/herdr.js.map +1 -0
  12. package/dist/insights.d.ts +1 -1
  13. package/dist/insights.d.ts.map +1 -1
  14. package/dist/insights.js +11 -8
  15. package/dist/insights.js.map +1 -1
  16. package/dist/memory/control.d.ts +1 -1
  17. package/dist/memory/control.d.ts.map +1 -1
  18. package/dist/memory/control.js +90 -34
  19. package/dist/memory/control.js.map +1 -1
  20. package/dist/memory/coordinator.d.ts +13 -2
  21. package/dist/memory/coordinator.d.ts.map +1 -1
  22. package/dist/memory/coordinator.js +416 -67
  23. package/dist/memory/coordinator.js.map +1 -1
  24. package/dist/memory/dreamer.d.ts +7 -1
  25. package/dist/memory/dreamer.d.ts.map +1 -1
  26. package/dist/memory/dreamer.js +145 -59
  27. package/dist/memory/dreamer.js.map +1 -1
  28. package/dist/memory/history-view.d.ts +26 -0
  29. package/dist/memory/history-view.d.ts.map +1 -0
  30. package/dist/memory/history-view.js +192 -0
  31. package/dist/memory/history-view.js.map +1 -0
  32. package/dist/memory/history.d.ts +33 -0
  33. package/dist/memory/history.d.ts.map +1 -0
  34. package/dist/memory/history.js +314 -0
  35. package/dist/memory/history.js.map +1 -0
  36. package/dist/memory/run-retention.d.ts +12 -0
  37. package/dist/memory/run-retention.d.ts.map +1 -0
  38. package/dist/memory/run-retention.js +294 -0
  39. package/dist/memory/run-retention.js.map +1 -0
  40. package/dist/memory/run.d.ts +67 -0
  41. package/dist/memory/run.d.ts.map +1 -0
  42. package/dist/memory/run.js +417 -0
  43. package/dist/memory/run.js.map +1 -0
  44. package/dist/memory/store.d.ts +67 -3
  45. package/dist/memory/store.d.ts.map +1 -1
  46. package/dist/memory/store.js +517 -110
  47. package/dist/memory/store.js.map +1 -1
  48. package/dist/resume.d.ts.map +1 -1
  49. package/dist/resume.js +12 -7
  50. package/dist/resume.js.map +1 -1
  51. package/dist/runtime.d.ts +1 -0
  52. package/dist/runtime.d.ts.map +1 -1
  53. package/dist/runtime.js +27 -18
  54. package/dist/runtime.js.map +1 -1
  55. package/dist/session-picker.d.ts +8 -1
  56. package/dist/session-picker.d.ts.map +1 -1
  57. package/dist/session-picker.js +7 -4
  58. package/dist/session-picker.js.map +1 -1
  59. package/dist/settings.d.ts +0 -3
  60. package/dist/settings.d.ts.map +1 -1
  61. package/dist/settings.js +0 -22
  62. package/dist/settings.js.map +1 -1
  63. package/dist/subagents/agent-transcript.d.ts +4 -1
  64. package/dist/subagents/agent-transcript.d.ts.map +1 -1
  65. package/dist/subagents/agent-transcript.js +16 -4
  66. package/dist/subagents/agent-transcript.js.map +1 -1
  67. package/package.json +24 -23
@@ -1,12 +1,15 @@
1
1
  import open from 'open';
2
- import { setLocalMemoryProcessingEnabled } from '../settings.js';
3
- import { LocalMemoryCoordinator } from './coordinator.js';
2
+ import { safeMemoryText, validMemoryRunId } from './history.js';
3
+ import { showMemoryHistory } from './history-view.js';
4
4
  export function createLocalMemoryControlExtension(options) {
5
5
  return (pi) => {
6
6
  let activeContext;
7
7
  let activeSessionId;
8
+ let activeCwd;
8
9
  let unsubscribeStatus;
9
10
  let statusRefresh = 0;
11
+ let lifecycle = 0;
12
+ let startupWarningPending = false;
10
13
  const refreshActiveStatus = async () => {
11
14
  const refresh = ++statusRefresh;
12
15
  const ctx = activeContext;
@@ -16,29 +19,56 @@ export function createLocalMemoryControlExtension(options) {
16
19
  if (activeContext !== ctx || refresh !== statusRefresh)
17
20
  return;
18
21
  updateStatus(ctx, status);
22
+ if (startupWarningPending) {
23
+ if (ctx.hasUI && ctx.mode === 'tui' && status.autoDisabled) {
24
+ startupWarningPending = false;
25
+ notify(ctx, autoDisabledWarning(status), 'warning');
26
+ }
27
+ else if (status.memoryFingerprint !== undefined)
28
+ startupWarningPending = false;
29
+ }
19
30
  };
20
31
  pi.registerCommand('memory', {
21
- description: 'Inspect, run, enable, disable, or open local project memory',
32
+ description: 'Inspect memory runs, retry project processing, or open local memory',
22
33
  handler: async (args, ctx) => {
23
- const command = args.trim().toLowerCase() || 'status';
24
- if (command === 'status') {
25
- await showStatus(options.coordinator, ctx.cwd, ctx);
34
+ const [action, ...parameters] = args.trim().split(/\s+/u);
35
+ const command = action?.toLowerCase() || 'status';
36
+ const generation = lifecycle;
37
+ const refresh = ++statusRefresh;
38
+ const isCurrent = () => generation === lifecycle;
39
+ const report = (status) => {
40
+ if (!isCurrent())
41
+ return;
42
+ if (refresh === statusRefresh)
43
+ updateStatus(ctx, status);
44
+ notify(ctx, formatStatus(status));
45
+ };
46
+ const start = (operation, message) => {
47
+ notify(ctx, message, 'info');
48
+ void operation.then(report).catch(() => {
49
+ if (!isCurrent())
50
+ return;
51
+ notify(ctx, 'Memory processing request failed; inspect /memory status.', 'warning');
52
+ });
53
+ };
54
+ if (command === 'runs' && parameters.length <= 1) {
55
+ await showMemoryHistory(ctx, options.agentDir, parameters[0]);
26
56
  return;
27
57
  }
28
- if (command === 'run' || command === 'process') {
29
- const status = await options.coordinator.runNow(ctx.cwd);
30
- updateStatus(ctx, status);
31
- notify(ctx, formatStatus(status));
58
+ if (parameters.length > 0) {
59
+ notify(ctx, 'Usage: /memory status|run|runs [id|latest]|retry|open', 'warning');
32
60
  return;
33
61
  }
34
- if (command === 'enable' || command === 'on') {
35
- await setMemoryEnabled(options, true);
36
- notify(ctx, 'Local memory processing enabled.');
62
+ if (command === 'status') {
63
+ report(await options.coordinator.status(ctx.cwd));
37
64
  return;
38
65
  }
39
- if (command === 'disable' || command === 'off') {
40
- await setMemoryEnabled(options, false);
41
- notify(ctx, 'Local memory processing disabled. Existing memory remains readable.');
66
+ if (command === 'run' || command === 'process') {
67
+ start(options.coordinator.runNow(ctx.cwd), 'Memory processing requested.');
68
+ return;
69
+ }
70
+ if (command === 'retry') {
71
+ start(options.coordinator.retryProject(ctx.cwd), 'Memory retry requested.');
42
72
  return;
43
73
  }
44
74
  if (command === 'open') {
@@ -47,18 +77,31 @@ export function createLocalMemoryControlExtension(options) {
47
77
  return;
48
78
  }
49
79
  const directory = await options.coordinator.canonicalDirectory(ctx.cwd);
80
+ if (!isCurrent())
81
+ return;
50
82
  await open(directory);
51
- notify(ctx, 'Opened canonical local memory.', 'info');
83
+ if (isCurrent())
84
+ notify(ctx, 'Opened canonical local memory.', 'info');
52
85
  return;
53
86
  }
54
- notify(ctx, 'Usage: /memory status|run|enable|disable|open', 'warning');
87
+ notify(ctx, 'Usage: /memory status|run|runs [id|latest]|retry|open', 'warning');
55
88
  },
56
89
  });
57
90
  pi.on('session_start', async (_event, ctx) => {
91
+ const sessionId = ctx.sessionManager.getSessionId();
92
+ const replacement = activeSessionId !== sessionId || activeCwd !== ctx.cwd;
93
+ if (replacement) {
94
+ lifecycle += 1;
95
+ startupWarningPending = true;
96
+ }
58
97
  activeContext = ctx;
59
- activeSessionId = ctx.sessionManager.getSessionId();
98
+ activeSessionId = sessionId;
99
+ activeCwd = ctx.cwd;
100
+ const generation = lifecycle;
60
101
  unsubscribeStatus?.();
61
102
  unsubscribeStatus = options.coordinator.subscribeStatusChanges(() => {
103
+ if (generation !== lifecycle)
104
+ return;
62
105
  void refreshActiveStatus().catch(() => { });
63
106
  });
64
107
  try {
@@ -67,11 +110,14 @@ export function createLocalMemoryControlExtension(options) {
67
110
  catch { }
68
111
  });
69
112
  pi.on('session_shutdown', (_event, ctx) => {
70
- if (activeSessionId !== ctx.sessionManager.getSessionId())
113
+ if (activeSessionId !== ctx.sessionManager.getSessionId() || activeCwd !== ctx.cwd)
71
114
  return;
115
+ lifecycle += 1;
72
116
  statusRefresh += 1;
73
117
  activeContext = undefined;
74
118
  activeSessionId = undefined;
119
+ activeCwd = undefined;
120
+ startupWarningPending = false;
75
121
  unsubscribeStatus?.();
76
122
  unsubscribeStatus = undefined;
77
123
  ctx.ui.setStatus('memory', undefined);
@@ -81,24 +127,34 @@ export function createLocalMemoryControlExtension(options) {
81
127
  });
82
128
  };
83
129
  }
84
- async function setMemoryEnabled(options, enabled) {
85
- options.coordinator.setEnabled(enabled);
86
- await setLocalMemoryProcessingEnabled(options.agentDir, enabled);
87
- }
88
- async function showStatus(coordinator, cwd, ctx, quiet = false) {
89
- const status = await coordinator.status(cwd);
90
- const message = formatStatus(status);
91
- updateStatus(ctx, status);
92
- if (!quiet)
93
- notify(ctx, message);
94
- }
95
130
  function updateStatus(ctx, status) {
96
- ctx.ui.setStatus('memory', status.pendingCheckpoints > 0 ? `Memory: ${status.pendingCheckpoints} pending` : undefined);
131
+ const pending = status.pendingCheckpoints > 0 ? `${status.pendingCheckpoints} pending` : undefined;
132
+ const activity = status.state === 'processing' ? 'processing'
133
+ : status.nextRetryAt && Date.parse(status.nextRetryAt) > Date.now() ? 'backoff' : undefined;
134
+ ctx.ui.setStatus('memory', !status.enabled ? 'Memory: disabled'
135
+ : activity ? `Memory: ${[activity, pending].filter(Boolean).join(' · ')}`
136
+ : pending ? `Memory: ${pending}` : undefined);
97
137
  }
98
138
  function formatStatus(status) {
99
139
  const enabled = status.enabled ? 'enabled' : 'disabled';
100
- const pending = `${status.pendingCheckpoints} pending`;
101
- return `Local memory: ${enabled}, ${status.state}, ${pending}${status.message ? ` — ${status.message}` : ''}`;
140
+ const details = [`Local memory: ${enabled}`, status.state, `${status.pendingCheckpoints} pending`];
141
+ if (status.consecutiveFailures)
142
+ details.push(`${status.consecutiveFailures} consecutive failures`);
143
+ if (status.nextRetryAt)
144
+ details.push(`retry at ${safeMemoryText(status.nextRetryAt)}`);
145
+ if (status.lastRunId && validMemoryRunId(status.lastRunId))
146
+ details.push(`run ${status.lastRunId}`);
147
+ if (status.autoDisabled)
148
+ details.push(autoDisabledWarning(status));
149
+ if (status.message)
150
+ details.push(safeMemoryText(status.message));
151
+ return details.join(' · ');
152
+ }
153
+ function autoDisabledWarning(status) {
154
+ const disabled = status.autoDisabled;
155
+ const run = validMemoryRunId(disabled.runId) ? ` Run: ${disabled.runId}.` : '';
156
+ const reason = safeMemoryText(disabled.reason) || 'repeated failures';
157
+ return `Memory processing automatically disabled for this project: ${reason}.${run} Inspect /memory runs; use /memory retry to recover.`;
102
158
  }
103
159
  function notify(ctx, message, level = 'info') {
104
160
  ctx.ui.notify(message, level);
@@ -1 +1 @@
1
- {"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/memory/control.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../src/memory/control.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { type MemoryHost, type MemorySnapshot, type MemoryStatus, type SessionCh
2
2
  import { ModelRuntime, type Api, type Model } from '@felan-ai/agent-core';
3
3
  import { type LocalMemoryLeaseOptions } from './lease.js';
4
4
  import { type LocalMemoryDreamRunner } from './dreamer.js';
5
+ import { type LocalMemoryControl } from './store.js';
5
6
  export interface LocalMemoryCoordinatorOptions {
6
7
  readonly agentDir: string;
7
8
  readonly modelRuntime: ModelRuntime;
@@ -15,6 +16,15 @@ export interface LocalMemoryCoordinatorOptions {
15
16
  readonly dreamRunner?: LocalMemoryDreamRunner;
16
17
  readonly selectedModel?: Model<Api>;
17
18
  readonly leaseOptions?: LocalMemoryLeaseOptions;
19
+ readonly retryDelaysMs?: readonly [number, number];
20
+ readonly monitorIntervalMs?: number;
21
+ readonly now?: () => number;
22
+ }
23
+ export interface LocalMemoryStatus extends MemoryStatus {
24
+ readonly consecutiveFailures?: number;
25
+ readonly nextRetryAt?: string;
26
+ readonly autoDisabled?: LocalMemoryControl['autoDisabled'];
27
+ readonly lastRunId?: string;
18
28
  }
19
29
  export interface LocalMemorySessionHostOptions {
20
30
  readonly cwd: string;
@@ -28,10 +38,11 @@ export declare class LocalMemoryCoordinator {
28
38
  subscribeStatusChanges(listener: () => void): () => void;
29
39
  setSelectedModel(model: Model<Api> | undefined): void;
30
40
  setEnabled(enabled: boolean): void;
31
- status(cwd: string): Promise<MemoryStatus>;
41
+ status(cwd: string): Promise<LocalMemoryStatus>;
32
42
  readCurrent(cwd: string, sessionStorageRoot: string): Promise<MemorySnapshot>;
33
43
  recordCheckpoint(cwd: string, checkpoint: SessionCheckpoint): Promise<void>;
34
- runNow(cwd: string): Promise<MemoryStatus>;
44
+ runNow(cwd: string): Promise<LocalMemoryStatus>;
45
+ retryProject(cwd: string): Promise<LocalMemoryStatus>;
35
46
  canonicalDirectory(cwd: string): Promise<string>;
36
47
  dispose(): Promise<void>;
37
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/memory/coordinator.ts"],"names":[],"mappings":"AAEA,OAAO,EAQL,KAAK,UAAU,EAEf,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EAGZ,KAAK,GAAG,EACR,KAAK,KAAK,EACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,YAAY,CAAC;AAEpB,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAC;AA6BtB,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAC;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,uBAAuB,CAAC;CACjD;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,qBAAa,sBAAsB;;gBAUrB,OAAO,EAAE,6BAA6B;IAOlD,iBAAiB,CAAC,OAAO,EAAE,6BAA6B,GAAG,UAAU;IAIrE,SAAS,IAAI,OAAO;IAIpB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAMxD,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI;IAIrD,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAiB5B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA2B1C,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAa7E,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0B1C,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAkP/B"}
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/memory/coordinator.ts"],"names":[],"mappings":"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"}