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.
- package/README.md +69 -0
- package/dist/bridge/index.d.ts +8 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +8 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/json-interchange.d.ts +94 -0
- package/dist/bridge/json-interchange.d.ts.map +1 -0
- package/dist/bridge/json-interchange.js +301 -0
- package/dist/bridge/json-interchange.js.map +1 -0
- package/dist/cli/commands/amend.d.ts +12 -0
- package/dist/cli/commands/amend.d.ts.map +1 -0
- package/dist/cli/commands/amend.js +205 -0
- package/dist/cli/commands/amend.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +12 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +60 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/dispatch.d.ts +12 -0
- package/dist/cli/commands/dispatch.d.ts.map +1 -0
- package/dist/cli/commands/dispatch.js +207 -0
- package/dist/cli/commands/dispatch.js.map +1 -0
- package/dist/cli/commands/handoff.d.ts +31 -0
- package/dist/cli/commands/handoff.d.ts.map +1 -0
- package/dist/cli/commands/handoff.js +273 -0
- package/dist/cli/commands/handoff.js.map +1 -0
- package/dist/cli/commands/init.d.ts +12 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +301 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/status.d.ts +12 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +206 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +148 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/handoff/encryption.d.ts +85 -0
- package/dist/handoff/encryption.d.ts.map +1 -0
- package/dist/handoff/encryption.js +308 -0
- package/dist/handoff/encryption.js.map +1 -0
- package/dist/handoff/index.d.ts +8 -0
- package/dist/handoff/index.d.ts.map +1 -0
- package/dist/handoff/index.js +10 -0
- package/dist/handoff/index.js.map +1 -0
- package/dist/handoff/mycelium-arc.d.ts +116 -0
- package/dist/handoff/mycelium-arc.d.ts.map +1 -0
- package/dist/handoff/mycelium-arc.js +410 -0
- package/dist/handoff/mycelium-arc.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +71 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/index.d.ts +10 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +12 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/plan-parser.d.ts +29 -0
- package/dist/parsers/plan-parser.d.ts.map +1 -0
- package/dist/parsers/plan-parser.js +503 -0
- package/dist/parsers/plan-parser.js.map +1 -0
- package/dist/parsers/spec-parser.d.ts +10 -0
- package/dist/parsers/spec-parser.d.ts.map +1 -0
- package/dist/parsers/spec-parser.js +382 -0
- package/dist/parsers/spec-parser.js.map +1 -0
- package/dist/parsers/state-parser.d.ts +21 -0
- package/dist/parsers/state-parser.d.ts.map +1 -0
- package/dist/parsers/state-parser.js +378 -0
- package/dist/parsers/state-parser.js.map +1 -0
- package/dist/parsers/types.d.ts +190 -0
- package/dist/parsers/types.d.ts.map +1 -0
- package/dist/parsers/types.js +7 -0
- package/dist/parsers/types.js.map +1 -0
- package/dist/schemas/cognitive-state.d.ts +1523 -0
- package/dist/schemas/cognitive-state.d.ts.map +1 -0
- package/dist/schemas/cognitive-state.js +328 -0
- package/dist/schemas/cognitive-state.js.map +1 -0
- package/dist/schemas/enums.d.ts +124 -0
- package/dist/schemas/enums.d.ts.map +1 -0
- package/dist/schemas/enums.js +108 -0
- package/dist/schemas/enums.js.map +1 -0
- package/dist/schemas/index.d.ts +9 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +9 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/sync/adhd-continuity.d.ts +91 -0
- package/dist/sync/adhd-continuity.d.ts.map +1 -0
- package/dist/sync/adhd-continuity.js +302 -0
- package/dist/sync/adhd-continuity.js.map +1 -0
- package/dist/sync/convergence-tracker.d.ts +111 -0
- package/dist/sync/convergence-tracker.d.ts.map +1 -0
- package/dist/sync/convergence-tracker.js +299 -0
- package/dist/sync/convergence-tracker.js.map +1 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +15 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/state-sync.d.ts +105 -0
- package/dist/sync/state-sync.d.ts.map +1 -0
- package/dist/sync/state-sync.js +403 -0
- package/dist/sync/state-sync.js.map +1 -0
- package/dist/sync/watcher.d.ts +90 -0
- package/dist/sync/watcher.d.ts.map +1 -0
- package/dist/sync/watcher.js +281 -0
- package/dist/sync/watcher.js.map +1 -0
- package/dist/utils/atomic-write.d.ts +31 -0
- package/dist/utils/atomic-write.d.ts.map +1 -0
- package/dist/utils/atomic-write.js +69 -0
- package/dist/utils/atomic-write.js.map +1 -0
- package/dist/utils/error-handling.d.ts +70 -0
- package/dist/utils/error-handling.d.ts.map +1 -0
- package/dist/utils/error-handling.js +109 -0
- package/dist/utils/error-handling.js.map +1 -0
- package/dist/utils/file-lock.d.ts +46 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +117 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/rlm-navigator.d.ts +160 -0
- package/dist/utils/rlm-navigator.d.ts.map +1 -0
- package/dist/utils/rlm-navigator.js +368 -0
- package/dist/utils/rlm-navigator.js.map +1 -0
- package/dist/utils/safe-path.d.ts +44 -0
- package/dist/utils/safe-path.d.ts.map +1 -0
- package/dist/utils/safe-path.js +96 -0
- package/dist/utils/safe-path.js.map +1 -0
- package/dist/utils/timed-io.d.ts +51 -0
- package/dist/utils/timed-io.d.ts.map +1 -0
- package/dist/utils/timed-io.js +128 -0
- package/dist/utils/timed-io.js.map +1 -0
- 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"}
|