conductor-bridge 1.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 (134) hide show
  1. package/README.md +69 -0
  2. package/dist/bridge/index.d.ts +8 -0
  3. package/dist/bridge/index.d.ts.map +1 -0
  4. package/dist/bridge/index.js +8 -0
  5. package/dist/bridge/index.js.map +1 -0
  6. package/dist/bridge/json-interchange.d.ts +94 -0
  7. package/dist/bridge/json-interchange.d.ts.map +1 -0
  8. package/dist/bridge/json-interchange.js +301 -0
  9. package/dist/bridge/json-interchange.js.map +1 -0
  10. package/dist/cli/commands/amend.d.ts +12 -0
  11. package/dist/cli/commands/amend.d.ts.map +1 -0
  12. package/dist/cli/commands/amend.js +205 -0
  13. package/dist/cli/commands/amend.js.map +1 -0
  14. package/dist/cli/commands/daemon.d.ts +12 -0
  15. package/dist/cli/commands/daemon.d.ts.map +1 -0
  16. package/dist/cli/commands/daemon.js +60 -0
  17. package/dist/cli/commands/daemon.js.map +1 -0
  18. package/dist/cli/commands/dispatch.d.ts +12 -0
  19. package/dist/cli/commands/dispatch.d.ts.map +1 -0
  20. package/dist/cli/commands/dispatch.js +207 -0
  21. package/dist/cli/commands/dispatch.js.map +1 -0
  22. package/dist/cli/commands/handoff.d.ts +31 -0
  23. package/dist/cli/commands/handoff.d.ts.map +1 -0
  24. package/dist/cli/commands/handoff.js +273 -0
  25. package/dist/cli/commands/handoff.js.map +1 -0
  26. package/dist/cli/commands/init.d.ts +12 -0
  27. package/dist/cli/commands/init.d.ts.map +1 -0
  28. package/dist/cli/commands/init.js +301 -0
  29. package/dist/cli/commands/init.js.map +1 -0
  30. package/dist/cli/commands/status.d.ts +12 -0
  31. package/dist/cli/commands/status.d.ts.map +1 -0
  32. package/dist/cli/commands/status.js +206 -0
  33. package/dist/cli/commands/status.js.map +1 -0
  34. package/dist/cli/index.d.ts +17 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +148 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/handoff/encryption.d.ts +85 -0
  39. package/dist/handoff/encryption.d.ts.map +1 -0
  40. package/dist/handoff/encryption.js +308 -0
  41. package/dist/handoff/encryption.js.map +1 -0
  42. package/dist/handoff/index.d.ts +8 -0
  43. package/dist/handoff/index.d.ts.map +1 -0
  44. package/dist/handoff/index.js +10 -0
  45. package/dist/handoff/index.js.map +1 -0
  46. package/dist/handoff/mycelium-arc.d.ts +116 -0
  47. package/dist/handoff/mycelium-arc.d.ts.map +1 -0
  48. package/dist/handoff/mycelium-arc.js +410 -0
  49. package/dist/handoff/mycelium-arc.js.map +1 -0
  50. package/dist/index.d.ts +38 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +71 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/parsers/index.d.ts +10 -0
  55. package/dist/parsers/index.d.ts.map +1 -0
  56. package/dist/parsers/index.js +12 -0
  57. package/dist/parsers/index.js.map +1 -0
  58. package/dist/parsers/plan-parser.d.ts +29 -0
  59. package/dist/parsers/plan-parser.d.ts.map +1 -0
  60. package/dist/parsers/plan-parser.js +503 -0
  61. package/dist/parsers/plan-parser.js.map +1 -0
  62. package/dist/parsers/spec-parser.d.ts +10 -0
  63. package/dist/parsers/spec-parser.d.ts.map +1 -0
  64. package/dist/parsers/spec-parser.js +382 -0
  65. package/dist/parsers/spec-parser.js.map +1 -0
  66. package/dist/parsers/state-parser.d.ts +21 -0
  67. package/dist/parsers/state-parser.d.ts.map +1 -0
  68. package/dist/parsers/state-parser.js +378 -0
  69. package/dist/parsers/state-parser.js.map +1 -0
  70. package/dist/parsers/types.d.ts +190 -0
  71. package/dist/parsers/types.d.ts.map +1 -0
  72. package/dist/parsers/types.js +7 -0
  73. package/dist/parsers/types.js.map +1 -0
  74. package/dist/schemas/cognitive-state.d.ts +1523 -0
  75. package/dist/schemas/cognitive-state.d.ts.map +1 -0
  76. package/dist/schemas/cognitive-state.js +328 -0
  77. package/dist/schemas/cognitive-state.js.map +1 -0
  78. package/dist/schemas/enums.d.ts +124 -0
  79. package/dist/schemas/enums.d.ts.map +1 -0
  80. package/dist/schemas/enums.js +108 -0
  81. package/dist/schemas/enums.js.map +1 -0
  82. package/dist/schemas/index.d.ts +9 -0
  83. package/dist/schemas/index.d.ts.map +1 -0
  84. package/dist/schemas/index.js +9 -0
  85. package/dist/schemas/index.js.map +1 -0
  86. package/dist/sync/adhd-continuity.d.ts +91 -0
  87. package/dist/sync/adhd-continuity.d.ts.map +1 -0
  88. package/dist/sync/adhd-continuity.js +302 -0
  89. package/dist/sync/adhd-continuity.js.map +1 -0
  90. package/dist/sync/convergence-tracker.d.ts +111 -0
  91. package/dist/sync/convergence-tracker.d.ts.map +1 -0
  92. package/dist/sync/convergence-tracker.js +299 -0
  93. package/dist/sync/convergence-tracker.js.map +1 -0
  94. package/dist/sync/index.d.ts +11 -0
  95. package/dist/sync/index.d.ts.map +1 -0
  96. package/dist/sync/index.js +15 -0
  97. package/dist/sync/index.js.map +1 -0
  98. package/dist/sync/state-sync.d.ts +105 -0
  99. package/dist/sync/state-sync.d.ts.map +1 -0
  100. package/dist/sync/state-sync.js +403 -0
  101. package/dist/sync/state-sync.js.map +1 -0
  102. package/dist/sync/watcher.d.ts +90 -0
  103. package/dist/sync/watcher.d.ts.map +1 -0
  104. package/dist/sync/watcher.js +281 -0
  105. package/dist/sync/watcher.js.map +1 -0
  106. package/dist/utils/atomic-write.d.ts +31 -0
  107. package/dist/utils/atomic-write.d.ts.map +1 -0
  108. package/dist/utils/atomic-write.js +69 -0
  109. package/dist/utils/atomic-write.js.map +1 -0
  110. package/dist/utils/error-handling.d.ts +70 -0
  111. package/dist/utils/error-handling.d.ts.map +1 -0
  112. package/dist/utils/error-handling.js +109 -0
  113. package/dist/utils/error-handling.js.map +1 -0
  114. package/dist/utils/file-lock.d.ts +46 -0
  115. package/dist/utils/file-lock.d.ts.map +1 -0
  116. package/dist/utils/file-lock.js +117 -0
  117. package/dist/utils/file-lock.js.map +1 -0
  118. package/dist/utils/index.d.ts +10 -0
  119. package/dist/utils/index.d.ts.map +1 -0
  120. package/dist/utils/index.js +12 -0
  121. package/dist/utils/index.js.map +1 -0
  122. package/dist/utils/rlm-navigator.d.ts +160 -0
  123. package/dist/utils/rlm-navigator.d.ts.map +1 -0
  124. package/dist/utils/rlm-navigator.js +368 -0
  125. package/dist/utils/rlm-navigator.js.map +1 -0
  126. package/dist/utils/safe-path.d.ts +44 -0
  127. package/dist/utils/safe-path.d.ts.map +1 -0
  128. package/dist/utils/safe-path.js +96 -0
  129. package/dist/utils/safe-path.js.map +1 -0
  130. package/dist/utils/timed-io.d.ts +51 -0
  131. package/dist/utils/timed-io.d.ts.map +1 -0
  132. package/dist/utils/timed-io.js +128 -0
  133. package/dist/utils/timed-io.js.map +1 -0
  134. package/package.json +88 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * ADHD Continuity Module
3
+ *
4
+ * Handles session breaks, momentum penalties, and context restoration.
5
+ * Critical for ADHD users who need seamless session resumption.
6
+ *
7
+ * Break Types:
8
+ * - CONTINUOUS: < 5 min, resume seamlessly
9
+ * - SHORT_BREAK: 5-30 min, brief recap
10
+ * - LONG_BREAK: 30min - 4hr, momentum penalty
11
+ * - NEW_SESSION: > 4hr or new day, fresh context
12
+ */
13
+ import type { ParsedPlan, ParsedState } from '../parsers/types.js';
14
+ import type { SessionState } from '../schemas/cognitive-state.js';
15
+ import { MomentumPhase, EnergyLevel } from '../schemas/enums.js';
16
+ export declare enum SessionBreakType {
17
+ CONTINUOUS = "continuous",
18
+ SHORT_BREAK = "short_break",
19
+ LONG_BREAK = "long_break",
20
+ NEW_SESSION = "new_session"
21
+ }
22
+ export interface BreakAnalysis {
23
+ type: SessionBreakType;
24
+ durationMinutes: number;
25
+ momentumPenalty: number;
26
+ recommendation: string;
27
+ contextStale: boolean;
28
+ }
29
+ export interface ResumeSummary {
30
+ /** Short ADHD-friendly summary */
31
+ summary: string;
32
+ /** Current track/task */
33
+ whereYouWere: string;
34
+ /** What was accomplished */
35
+ whatYouDid: string;
36
+ /** What comes next */
37
+ whatComesNext: string;
38
+ /** Any parked ideas */
39
+ parkedIdeas: string[];
40
+ /** Warnings or blockers */
41
+ warnings: string[];
42
+ /** Suggested first action */
43
+ firstAction: string;
44
+ }
45
+ export interface MomentumState {
46
+ phase: MomentumPhase;
47
+ penaltyApplied: boolean;
48
+ originalPhase: MomentumPhase;
49
+ recoveryEstimate: string;
50
+ }
51
+ /**
52
+ * Detect the type of session break based on duration.
53
+ */
54
+ export declare function detectBreakType(lastActivityTimestamp: string): BreakAnalysis;
55
+ /**
56
+ * Apply momentum penalty based on break duration.
57
+ */
58
+ export declare function applyMomentumPenalty(currentPhase: MomentumPhase, penaltyLevels: number): MomentumState;
59
+ /**
60
+ * Generate an ADHD-friendly resume summary.
61
+ *
62
+ * Designed for quick context restoration:
63
+ * - Short, scannable format
64
+ * - Key information first
65
+ * - Clear next action
66
+ */
67
+ export declare function generateResumeSummary(plan: ParsedPlan, state: ParsedState, breakAnalysis: BreakAnalysis): ResumeSummary;
68
+ /**
69
+ * Create a session handoff for cross-agent transfer.
70
+ *
71
+ * Safety constraints:
72
+ * - Never persist RED burnout
73
+ * - Auto-expire after 24 hours
74
+ * - Include momentum penalty info
75
+ */
76
+ export declare function createSessionHandoff(sessionState: SessionState, conductorState: ParsedState, plan: ParsedPlan): {
77
+ canHandoff: boolean;
78
+ reason?: string;
79
+ handoffData?: {
80
+ sessionState: SessionState;
81
+ resumeSummary: string;
82
+ parkedIdeas: string[];
83
+ momentum: MomentumState;
84
+ expiresAt: string;
85
+ };
86
+ };
87
+ /**
88
+ * Get recovery recommendations based on current state.
89
+ */
90
+ export declare function getRecoveryRecommendations(energy: EnergyLevel, momentum: MomentumPhase, blockedCount: number): string[];
91
+ //# sourceMappingURL=adhd-continuity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adhd-continuity.d.ts","sourceRoot":"","sources":["../../src/sync/adhd-continuity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMjE,oBAAY,gBAAgB;IAC1B,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,WAAW,gBAAgB;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,aAAa,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,qBAAqB,EAAE,MAAM,GAC5B,aAAa,CA8Cf;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,aAAa,EAC3B,aAAa,EAAE,MAAM,GACpB,aAAa,CAgCf;AAMD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,aAAa,GAC3B,aAAa,CAkFf;AAsBD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,WAAW,EAC3B,IAAI,EAAE,UAAU,GACf;IACD,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE;QACZ,YAAY,EAAE,YAAY,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,EAAE,aAAa,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CA6CA;AAMD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAiCV"}
@@ -0,0 +1,302 @@
1
+ /**
2
+ * ADHD Continuity Module
3
+ *
4
+ * Handles session breaks, momentum penalties, and context restoration.
5
+ * Critical for ADHD users who need seamless session resumption.
6
+ *
7
+ * Break Types:
8
+ * - CONTINUOUS: < 5 min, resume seamlessly
9
+ * - SHORT_BREAK: 5-30 min, brief recap
10
+ * - LONG_BREAK: 30min - 4hr, momentum penalty
11
+ * - NEW_SESSION: > 4hr or new day, fresh context
12
+ */
13
+ import { MomentumPhase, EnergyLevel } from '../schemas/enums.js';
14
+ // ============================================================================
15
+ // Types
16
+ // ============================================================================
17
+ export var SessionBreakType;
18
+ (function (SessionBreakType) {
19
+ SessionBreakType["CONTINUOUS"] = "continuous";
20
+ SessionBreakType["SHORT_BREAK"] = "short_break";
21
+ SessionBreakType["LONG_BREAK"] = "long_break";
22
+ SessionBreakType["NEW_SESSION"] = "new_session";
23
+ })(SessionBreakType || (SessionBreakType = {}));
24
+ // ============================================================================
25
+ // Break Detection
26
+ // ============================================================================
27
+ /**
28
+ * Detect the type of session break based on duration.
29
+ */
30
+ export function detectBreakType(lastActivityTimestamp) {
31
+ const lastTime = new Date(lastActivityTimestamp);
32
+ const now = new Date();
33
+ const durationMs = now.getTime() - lastTime.getTime();
34
+ const durationMinutes = Math.round(durationMs / (1000 * 60));
35
+ // Check if new day
36
+ const isNewDay = lastTime.getDate() !== now.getDate() ||
37
+ lastTime.getMonth() !== now.getMonth() ||
38
+ lastTime.getFullYear() !== now.getFullYear();
39
+ let type;
40
+ let momentumPenalty;
41
+ let recommendation;
42
+ let contextStale;
43
+ if (durationMinutes < 5) {
44
+ type = SessionBreakType.CONTINUOUS;
45
+ momentumPenalty = 0;
46
+ recommendation = 'Resume seamlessly - you were just here!';
47
+ contextStale = false;
48
+ }
49
+ else if (durationMinutes < 30) {
50
+ type = SessionBreakType.SHORT_BREAK;
51
+ momentumPenalty = 1;
52
+ recommendation = 'Quick recap of where you left off';
53
+ contextStale = false;
54
+ }
55
+ else if (durationMinutes < 240 && !isNewDay) {
56
+ type = SessionBreakType.LONG_BREAK;
57
+ momentumPenalty = 2;
58
+ recommendation = 'Start with an easy win to rebuild momentum';
59
+ contextStale = true;
60
+ }
61
+ else {
62
+ type = SessionBreakType.NEW_SESSION;
63
+ momentumPenalty = 3;
64
+ recommendation = 'Fresh start - review goals before diving in';
65
+ contextStale = true;
66
+ }
67
+ return {
68
+ type,
69
+ durationMinutes,
70
+ momentumPenalty,
71
+ recommendation,
72
+ contextStale,
73
+ };
74
+ }
75
+ // ============================================================================
76
+ // Momentum Penalties
77
+ // ============================================================================
78
+ /**
79
+ * Apply momentum penalty based on break duration.
80
+ */
81
+ export function applyMomentumPenalty(currentPhase, penaltyLevels) {
82
+ const phases = [
83
+ MomentumPhase.CRASHED,
84
+ MomentumPhase.COLD_START,
85
+ MomentumPhase.BUILDING,
86
+ MomentumPhase.ROLLING,
87
+ MomentumPhase.PEAK,
88
+ ];
89
+ const currentIndex = phases.indexOf(currentPhase);
90
+ const newIndex = Math.max(0, currentIndex - penaltyLevels);
91
+ const newPhase = phases[newIndex];
92
+ let recoveryEstimate;
93
+ const levelsLost = currentIndex - newIndex;
94
+ if (levelsLost === 0) {
95
+ recoveryEstimate = 'No recovery needed';
96
+ }
97
+ else if (levelsLost === 1) {
98
+ recoveryEstimate = '1-2 tasks to recover';
99
+ }
100
+ else if (levelsLost === 2) {
101
+ recoveryEstimate = '3-5 tasks to recover';
102
+ }
103
+ else {
104
+ recoveryEstimate = 'Full warm-up needed';
105
+ }
106
+ return {
107
+ phase: newPhase,
108
+ penaltyApplied: penaltyLevels > 0 && levelsLost > 0,
109
+ originalPhase: currentPhase,
110
+ recoveryEstimate,
111
+ };
112
+ }
113
+ // ============================================================================
114
+ // Resume Summary Generation
115
+ // ============================================================================
116
+ /**
117
+ * Generate an ADHD-friendly resume summary.
118
+ *
119
+ * Designed for quick context restoration:
120
+ * - Short, scannable format
121
+ * - Key information first
122
+ * - Clear next action
123
+ */
124
+ export function generateResumeSummary(plan, state, breakAnalysis) {
125
+ // Where you were
126
+ const whereYouWere = state.currentAssignment
127
+ ? `Track: ${state.currentAssignment.track}, Task: ${state.currentAssignment.task}`
128
+ : 'No active assignment';
129
+ // What you did (completed tasks in current track)
130
+ const currentTrack = state.currentAssignment?.track;
131
+ const track = plan.tracks.find((t) => t.name === currentTrack);
132
+ const completedTasks = track?.tasks.filter((t) => t.state === 'complete').length ?? 0;
133
+ const totalTasks = track?.tasks.length ?? 0;
134
+ const whatYouDid = track
135
+ ? `Completed ${completedTasks}/${totalTasks} tasks in "${track.name}"`
136
+ : 'No tasks completed in current session';
137
+ // What comes next
138
+ const nextPending = track?.tasks.find((t) => t.state === 'pending');
139
+ const whatComesNext = nextPending
140
+ ? nextPending.content
141
+ : 'All tasks complete or blocked';
142
+ // Parked ideas from scratchpad
143
+ const parkedIdeas = [];
144
+ if (state.scratchpad) {
145
+ const parkedMatch = state.scratchpad.match(/PARKED?:?\s*\n?([\s\S]*?)(?=\n[A-Z]+:|$)/i);
146
+ if (parkedMatch?.[1]) {
147
+ parkedIdeas.push(...parkedMatch[1]
148
+ .split('\n')
149
+ .map((l) => l.replace(/^[-*]\s*/, '').trim())
150
+ .filter((l) => l.length > 0));
151
+ }
152
+ }
153
+ // Warnings
154
+ const warnings = [...state.warnings];
155
+ if (breakAnalysis.contextStale) {
156
+ warnings.push('Context may be stale - review recent activity');
157
+ }
158
+ // Blocked tasks
159
+ const blockedTasks = track?.tasks.filter((t) => t.state === 'blocked');
160
+ if (blockedTasks && blockedTasks.length > 0) {
161
+ warnings.push(`${blockedTasks.length} blocked task(s) need attention`);
162
+ }
163
+ // First action based on break type
164
+ let firstAction;
165
+ switch (breakAnalysis.type) {
166
+ case SessionBreakType.CONTINUOUS:
167
+ firstAction = nextPending
168
+ ? `Continue: ${nextPending.content}`
169
+ : 'Check for next available task';
170
+ break;
171
+ case SessionBreakType.SHORT_BREAK:
172
+ firstAction = 'Review current task, then continue';
173
+ break;
174
+ case SessionBreakType.LONG_BREAK:
175
+ firstAction = 'Start with a small, easy win to rebuild momentum';
176
+ break;
177
+ case SessionBreakType.NEW_SESSION:
178
+ firstAction = 'Review goals and plan before starting';
179
+ break;
180
+ }
181
+ // Build summary
182
+ const summaryParts = [
183
+ `Break: ${formatDuration(breakAnalysis.durationMinutes)}`,
184
+ `Progress: ${plan.metrics.progress}%`,
185
+ breakAnalysis.recommendation,
186
+ ];
187
+ return {
188
+ summary: summaryParts.join(' | '),
189
+ whereYouWere,
190
+ whatYouDid,
191
+ whatComesNext,
192
+ parkedIdeas,
193
+ warnings,
194
+ firstAction,
195
+ };
196
+ }
197
+ /**
198
+ * Format duration in human-readable form.
199
+ */
200
+ function formatDuration(minutes) {
201
+ if (minutes < 60) {
202
+ return `${minutes}min`;
203
+ }
204
+ else if (minutes < 1440) {
205
+ const hours = Math.floor(minutes / 60);
206
+ const mins = minutes % 60;
207
+ return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`;
208
+ }
209
+ else {
210
+ const days = Math.floor(minutes / 1440);
211
+ return `${days} day(s)`;
212
+ }
213
+ }
214
+ // ============================================================================
215
+ // Session Handoff
216
+ // ============================================================================
217
+ /**
218
+ * Create a session handoff for cross-agent transfer.
219
+ *
220
+ * Safety constraints:
221
+ * - Never persist RED burnout
222
+ * - Auto-expire after 24 hours
223
+ * - Include momentum penalty info
224
+ */
225
+ export function createSessionHandoff(sessionState, conductorState, plan) {
226
+ // Safety: Never handoff RED burnout
227
+ if (sessionState.burnout_level === 'RED') {
228
+ return {
229
+ canHandoff: false,
230
+ reason: 'Cannot create handoff with RED burnout level. User should recover first.',
231
+ };
232
+ }
233
+ // Detect break (using current time as "last activity")
234
+ const breakAnalysis = detectBreakType(new Date().toISOString());
235
+ // Generate resume summary
236
+ const resumeSummary = generateResumeSummary(plan, conductorState, breakAnalysis);
237
+ // Apply momentum penalty (assume some penalty for handoff)
238
+ const momentumState = applyMomentumPenalty(sessionState.momentum_phase, 1 // Handoffs always have at least 1 level penalty
239
+ );
240
+ // Set expiry (24 hours)
241
+ const expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString();
242
+ return {
243
+ canHandoff: true,
244
+ handoffData: {
245
+ sessionState: {
246
+ ...sessionState,
247
+ momentum_phase: momentumState.phase,
248
+ },
249
+ resumeSummary: [
250
+ resumeSummary.summary,
251
+ '',
252
+ `Where you were: ${resumeSummary.whereYouWere}`,
253
+ `What you did: ${resumeSummary.whatYouDid}`,
254
+ `Next: ${resumeSummary.whatComesNext}`,
255
+ '',
256
+ `First action: ${resumeSummary.firstAction}`,
257
+ ].join('\n'),
258
+ parkedIdeas: resumeSummary.parkedIdeas,
259
+ momentum: momentumState,
260
+ expiresAt,
261
+ },
262
+ };
263
+ }
264
+ // ============================================================================
265
+ // Recovery Recommendations
266
+ // ============================================================================
267
+ /**
268
+ * Get recovery recommendations based on current state.
269
+ */
270
+ export function getRecoveryRecommendations(energy, momentum, blockedCount) {
271
+ const recommendations = [];
272
+ // Energy-based recommendations
273
+ if (energy === EnergyLevel.DEPLETED) {
274
+ recommendations.push('Take a real break - rest is productive');
275
+ recommendations.push('Consider calling it a day');
276
+ recommendations.push("If continuing: only easy, familiar tasks");
277
+ }
278
+ else if (energy === EnergyLevel.LOW) {
279
+ recommendations.push('Switch to easier tasks');
280
+ recommendations.push('Consider a 15-minute break');
281
+ recommendations.push('Avoid starting complex new work');
282
+ }
283
+ // Momentum-based recommendations
284
+ if (momentum === MomentumPhase.CRASHED) {
285
+ recommendations.push('No judgment - momentum crashes happen');
286
+ recommendations.push("Tomorrow is fine if today isn't working");
287
+ recommendations.push('If continuing: start with smallest possible task');
288
+ }
289
+ else if (momentum === MomentumPhase.COLD_START) {
290
+ recommendations.push('Pick one small, clear task to start');
291
+ recommendations.push('Avoid context-heavy work until warmed up');
292
+ }
293
+ // Blocker-based recommendations
294
+ if (blockedCount > 0) {
295
+ recommendations.push(`${blockedCount} blocked task(s) - document blockers clearly`);
296
+ if (blockedCount > 2) {
297
+ recommendations.push('Consider if blockers indicate scope issues');
298
+ }
299
+ }
300
+ return recommendations;
301
+ }
302
+ //# sourceMappingURL=adhd-continuity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adhd-continuity.js","sourceRoot":"","sources":["../../src/sync/adhd-continuity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Convergence Tracker
3
+ *
4
+ * Tracks RC^+xi convergence in the Conductor context.
5
+ * Measures epistemic tension and detects attractor basins.
6
+ *
7
+ * Formula: xi_n = ||A_{n+1} - A_n||_2 (epistemic tension)
8
+ * Epsilon: 0.1 (convergence threshold)
9
+ * Stable: 3 exchanges at xi < epsilon = CONVERGED
10
+ *
11
+ * DETERMINISM GUARANTEES (ThinkingMachines [He2025] compliance):
12
+ *
13
+ * 1. FIXED STATE VECTOR ORDER: The 6-dimensional state vector is computed
14
+ * in a hardcoded order: [progress, blocked, active, trackCompletion,
15
+ * momentum, energy]. This order never changes.
16
+ *
17
+ * 2. FIXED REDUCTION SEQUENCE: L2 norm uses Array.reduce() which processes
18
+ * elements left-to-right per ECMAScript spec. Same inputs → same output.
19
+ *
20
+ * 3. FIXED ATTRACTOR PRIORITY: Attractor detection evaluates conditions in
21
+ * fixed order: RECOVERY > EXPLORING > TEACHING > FOCUSED.
22
+ * First match wins, no dynamic reordering.
23
+ *
24
+ * 4. CONSTANT THRESHOLDS: EPSILON (0.1), STABLE_EXCHANGES_REQUIRED (3),
25
+ * normalization divisors (5, 3) are compile-time constants.
26
+ *
27
+ * Reference: [He2025] "Defeating Nondeterminism in LLM Inference"
28
+ * https://thinkingmachines.ai/blog/defeating-nondeterminism-in-llm-inference/
29
+ */
30
+ import type { ParsedPlan } from '../parsers/types.js';
31
+ import type { SessionState, ConvergenceRecord } from '../schemas/cognitive-state.js';
32
+ import { ConvergenceAttractor, ConvergenceStability } from '../schemas/enums.js';
33
+ export interface StateVector {
34
+ /** Progress ratio (0-1) */
35
+ progress: number;
36
+ /** Blocked ratio (0-1) */
37
+ blocked: number;
38
+ /** Active ratio (0-1) */
39
+ active: number;
40
+ /** Track completion ratio (0-1) */
41
+ trackCompletion: number;
42
+ /** Momentum numeric (0-5) */
43
+ momentum: number;
44
+ /** Energy numeric (0-3) */
45
+ energy: number;
46
+ }
47
+ export interface ConvergenceState {
48
+ xi_n: number;
49
+ attractor: ConvergenceAttractor;
50
+ stability: ConvergenceStability;
51
+ stableExchangeCount: number;
52
+ isConverged: boolean;
53
+ trajectory: number[];
54
+ }
55
+ /**
56
+ * Extract state vector from plan and cognitive state.
57
+ */
58
+ export declare function extractStateVector(plan: ParsedPlan, cognitiveState?: SessionState): StateVector;
59
+ /**
60
+ * Compute L2 norm between two state vectors.
61
+ */
62
+ export declare function computeL2Norm(v1: StateVector, v2: StateVector): number;
63
+ /**
64
+ * Detect which attractor basin the current state is in.
65
+ *
66
+ * Attractors:
67
+ * - focused: High progress, low blocked, steady momentum
68
+ * - exploring: Active work, building momentum
69
+ * - recovery: Low energy, crashed momentum
70
+ * - teaching: (Not derived from tasks, set explicitly)
71
+ */
72
+ export declare function detectAttractor(vector: StateVector, cognitiveState?: SessionState): ConvergenceAttractor;
73
+ /**
74
+ * Convergence tracker class.
75
+ *
76
+ * Maintains state across exchanges and detects convergence.
77
+ */
78
+ export declare class ConductorConvergenceTracker {
79
+ private previousVector;
80
+ private trajectory;
81
+ private stableCount;
82
+ private currentAttractor;
83
+ /**
84
+ * Record an exchange and compute convergence metrics.
85
+ */
86
+ recordExchange(plan: ParsedPlan, cognitiveState?: SessionState): ConvergenceState;
87
+ /**
88
+ * Get RC^+xi glyph for display.
89
+ *
90
+ * Format: RC^+xi[attractor:stability:xi]
91
+ * Example: RC^+xi[focused:stable:0.05]
92
+ */
93
+ getGlyph(): string;
94
+ /**
95
+ * Create a convergence record for persistence.
96
+ */
97
+ createRecord(sessionId: string, exchangeNumber: number, cognitiveState?: SessionState): ConvergenceRecord;
98
+ /**
99
+ * Reset tracker state.
100
+ */
101
+ reset(): void;
102
+ }
103
+ /**
104
+ * Analyze convergence trajectory for insights.
105
+ */
106
+ export declare function analyzeTrajectory(trajectory: number[]): {
107
+ trend: 'improving' | 'stable' | 'degrading';
108
+ averageXi: number;
109
+ volatility: number;
110
+ };
111
+ //# sourceMappingURL=convergence-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convergence-tracker.d.ts","sourceRoot":"","sources":["../../src/sync/convergence-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAiB,MAAM,qBAAqB,CAAC;AAMhG,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,oBAAoB,CAAC;IAChC,SAAS,EAAE,oBAAoB,CAAC;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAgCD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,EAChB,cAAc,CAAC,EAAE,YAAY,GAC5B,WAAW,CAsCb;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,MAAM,CAYtE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,cAAc,CAAC,EAAE,YAAY,GAC5B,oBAAoB,CA2BtB;AAMD;;;;GAIG;AACH,qBAAa,2BAA2B;IACtC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,gBAAgB,CAAsD;IAE9E;;OAEG;IACH,cAAc,CACZ,IAAI,EAAE,UAAU,EAChB,cAAc,CAAC,EAAE,YAAY,GAC5B,gBAAgB;IAwDnB;;;;;OAKG;IACH,QAAQ,IAAI,MAAM;IAWlB;;OAEG;IACH,YAAY,CACV,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,cAAc,CAAC,EAAE,YAAY,GAC5B,iBAAiB;IAsBpB;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG;IACvD,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAqCA"}