@scotthamilton77/sidekick 0.1.7 → 0.1.9
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/assets/sidekick/defaults/core.defaults.yaml +4 -0
- package/assets/sidekick/prompts/resume-message.prompt.txt +1 -1
- package/assets/sidekick/prompts/snarky-message.prompt.txt +1 -1
- package/assets/sidekick/reminders/remember-your-persona.yaml +1 -1
- package/assets/sidekick/reminders/user-prompt-submit.yaml +0 -1
- package/dist/bin.js +722 -222
- package/dist/daemon.js +771 -201
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -1030,7 +1030,7 @@ var require_events = __commonJS({
|
|
|
1030
1030
|
"../types/dist/events.js"(exports2) {
|
|
1031
1031
|
"use strict";
|
|
1032
1032
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
1033
|
-
exports2.HOOK_NAMES = void 0;
|
|
1033
|
+
exports2.UI_EVENT_VISIBILITY = exports2.UI_EVENT_TYPES = exports2.HOOK_NAMES = void 0;
|
|
1034
1034
|
exports2.isHookEvent = isHookEvent;
|
|
1035
1035
|
exports2.isTranscriptEvent = isTranscriptEvent;
|
|
1036
1036
|
exports2.isSessionStartEvent = isSessionStartEvent;
|
|
@@ -1092,6 +1092,90 @@ var require_events = __commonJS({
|
|
|
1092
1092
|
function isTranscriptLoggingEvent(event) {
|
|
1093
1093
|
return event.source === "transcript";
|
|
1094
1094
|
}
|
|
1095
|
+
exports2.UI_EVENT_TYPES = [
|
|
1096
|
+
// Reminder events
|
|
1097
|
+
"reminder:staged",
|
|
1098
|
+
"reminder:unstaged",
|
|
1099
|
+
"reminder:consumed",
|
|
1100
|
+
"reminder:cleared",
|
|
1101
|
+
// Decision events
|
|
1102
|
+
"decision:recorded",
|
|
1103
|
+
// Session summary events
|
|
1104
|
+
"session-summary:start",
|
|
1105
|
+
"session-summary:finish",
|
|
1106
|
+
// Session state change events
|
|
1107
|
+
"session-title:changed",
|
|
1108
|
+
"intent:changed",
|
|
1109
|
+
// Snarky message events
|
|
1110
|
+
"snarky-message:start",
|
|
1111
|
+
"snarky-message:finish",
|
|
1112
|
+
// Resume message events
|
|
1113
|
+
"resume-message:start",
|
|
1114
|
+
"resume-message:finish",
|
|
1115
|
+
// Persona events
|
|
1116
|
+
"persona:selected",
|
|
1117
|
+
"persona:changed",
|
|
1118
|
+
// Statusline events
|
|
1119
|
+
"statusline:rendered",
|
|
1120
|
+
// Hook lifecycle events
|
|
1121
|
+
"hook:received",
|
|
1122
|
+
"hook:completed",
|
|
1123
|
+
// Daemon event processing
|
|
1124
|
+
"event:received",
|
|
1125
|
+
"event:processed",
|
|
1126
|
+
// Daemon lifecycle events
|
|
1127
|
+
"daemon:starting",
|
|
1128
|
+
"daemon:started",
|
|
1129
|
+
"ipc:started",
|
|
1130
|
+
"config:watcher-started",
|
|
1131
|
+
"session:eviction-started",
|
|
1132
|
+
// Skipped operation events
|
|
1133
|
+
"session-summary:skipped",
|
|
1134
|
+
"resume-message:skipped",
|
|
1135
|
+
// Error events
|
|
1136
|
+
"statusline:error",
|
|
1137
|
+
// Transcript events
|
|
1138
|
+
"transcript:emitted",
|
|
1139
|
+
"transcript:pre-compact",
|
|
1140
|
+
// General error
|
|
1141
|
+
"error:occurred"
|
|
1142
|
+
];
|
|
1143
|
+
exports2.UI_EVENT_VISIBILITY = {
|
|
1144
|
+
// Timeline events (user-visible state changes)
|
|
1145
|
+
"reminder:staged": "timeline",
|
|
1146
|
+
"reminder:unstaged": "timeline",
|
|
1147
|
+
"reminder:consumed": "timeline",
|
|
1148
|
+
"reminder:cleared": "timeline",
|
|
1149
|
+
"decision:recorded": "timeline",
|
|
1150
|
+
"session-summary:start": "timeline",
|
|
1151
|
+
"session-summary:finish": "timeline",
|
|
1152
|
+
"session-title:changed": "timeline",
|
|
1153
|
+
"intent:changed": "timeline",
|
|
1154
|
+
"snarky-message:start": "timeline",
|
|
1155
|
+
"snarky-message:finish": "timeline",
|
|
1156
|
+
"resume-message:start": "timeline",
|
|
1157
|
+
"resume-message:finish": "timeline",
|
|
1158
|
+
"persona:selected": "timeline",
|
|
1159
|
+
"persona:changed": "timeline",
|
|
1160
|
+
"statusline:rendered": "timeline",
|
|
1161
|
+
// Both (timeline + log viewer)
|
|
1162
|
+
"hook:received": "both",
|
|
1163
|
+
"hook:completed": "both",
|
|
1164
|
+
"statusline:error": "both",
|
|
1165
|
+
"error:occurred": "both",
|
|
1166
|
+
// Log-only (internal machinery)
|
|
1167
|
+
"event:received": "log",
|
|
1168
|
+
"event:processed": "log",
|
|
1169
|
+
"daemon:starting": "log",
|
|
1170
|
+
"daemon:started": "log",
|
|
1171
|
+
"ipc:started": "log",
|
|
1172
|
+
"config:watcher-started": "log",
|
|
1173
|
+
"session:eviction-started": "log",
|
|
1174
|
+
"session-summary:skipped": "log",
|
|
1175
|
+
"resume-message:skipped": "log",
|
|
1176
|
+
"transcript:emitted": "log",
|
|
1177
|
+
"transcript:pre-compact": "log"
|
|
1178
|
+
};
|
|
1095
1179
|
}
|
|
1096
1180
|
});
|
|
1097
1181
|
|
|
@@ -17228,6 +17312,7 @@ var require_state = __commonJS({
|
|
|
17228
17312
|
exports2.createDefaultLLMMetrics = createDefaultLLMMetrics;
|
|
17229
17313
|
var zod_1 = require_zod();
|
|
17230
17314
|
var events_js_1 = require_events();
|
|
17315
|
+
var staging_js_1 = require_staging();
|
|
17231
17316
|
exports2.SessionSummaryStateSchema = zod_1.z.object({
|
|
17232
17317
|
/** Session identifier */
|
|
17233
17318
|
session_id: zod_1.z.string(),
|
|
@@ -17389,16 +17474,7 @@ var require_state = __commonJS({
|
|
|
17389
17474
|
lastMatchedScope: zod_1.z.enum(["project", "package", "file"]).nullable().optional()
|
|
17390
17475
|
});
|
|
17391
17476
|
exports2.VerificationToolsStateSchema = zod_1.z.record(zod_1.z.string(), exports2.VerificationToolStatusSchema);
|
|
17392
|
-
exports2.CachedReminderSchema =
|
|
17393
|
-
name: zod_1.z.string(),
|
|
17394
|
-
blocking: zod_1.z.boolean(),
|
|
17395
|
-
priority: zod_1.z.number(),
|
|
17396
|
-
persistent: zod_1.z.boolean(),
|
|
17397
|
-
throttle: zod_1.z.boolean().optional(),
|
|
17398
|
-
userMessage: zod_1.z.string().optional(),
|
|
17399
|
-
additionalContext: zod_1.z.string().optional(),
|
|
17400
|
-
reason: zod_1.z.string().optional()
|
|
17401
|
-
});
|
|
17477
|
+
exports2.CachedReminderSchema = staging_js_1.StagedReminderSchema.omit({ stagedAt: true });
|
|
17402
17478
|
exports2.ReminderThrottleEntrySchema = zod_1.z.object({
|
|
17403
17479
|
/** Number of conversation messages since the reminder was last staged */
|
|
17404
17480
|
messagesSinceLastStaging: zod_1.z.number().int().nonnegative(),
|
|
@@ -17979,6 +18055,24 @@ var require_setup_status = __commonJS({
|
|
|
17979
18055
|
}
|
|
17980
18056
|
});
|
|
17981
18057
|
|
|
18058
|
+
// ../types/dist/state.js
|
|
18059
|
+
var require_state2 = __commonJS({
|
|
18060
|
+
"../types/dist/state.js"(exports2) {
|
|
18061
|
+
"use strict";
|
|
18062
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
18063
|
+
exports2.ProjectRegistryEntrySchema = void 0;
|
|
18064
|
+
var zod_1 = require_zod();
|
|
18065
|
+
exports2.ProjectRegistryEntrySchema = zod_1.z.object({
|
|
18066
|
+
/** Absolute filesystem path to the project root */
|
|
18067
|
+
path: zod_1.z.string(),
|
|
18068
|
+
/** Human-readable project name (derived from directory name) */
|
|
18069
|
+
displayName: zod_1.z.string(),
|
|
18070
|
+
/** ISO 8601 timestamp of last daemon activity */
|
|
18071
|
+
lastActive: zod_1.z.iso.datetime()
|
|
18072
|
+
});
|
|
18073
|
+
}
|
|
18074
|
+
});
|
|
18075
|
+
|
|
17982
18076
|
// ../types/dist/index.js
|
|
17983
18077
|
var require_dist = __commonJS({
|
|
17984
18078
|
"../types/dist/index.js"(exports2) {
|
|
@@ -18010,6 +18104,7 @@ var require_dist = __commonJS({
|
|
|
18010
18104
|
__exportStar(require_tasks(), exports2);
|
|
18011
18105
|
__exportStar(require_hook_input(), exports2);
|
|
18012
18106
|
__exportStar(require_setup_status(), exports2);
|
|
18107
|
+
__exportStar(require_state2(), exports2);
|
|
18013
18108
|
}
|
|
18014
18109
|
});
|
|
18015
18110
|
|
|
@@ -27755,9 +27850,13 @@ var require_config2 = __commonJS({
|
|
|
27755
27850
|
state: v4_1.z.string(),
|
|
27756
27851
|
assets: v4_1.z.string().optional()
|
|
27757
27852
|
}).strict();
|
|
27853
|
+
var ProjectsSchema = v4_1.z.object({
|
|
27854
|
+
retentionDays: v4_1.z.number().min(1)
|
|
27855
|
+
}).strict();
|
|
27758
27856
|
var DaemonSchema = v4_1.z.object({
|
|
27759
27857
|
idleTimeoutMs: v4_1.z.number().min(0),
|
|
27760
|
-
shutdownTimeoutMs: v4_1.z.number().min(0)
|
|
27858
|
+
shutdownTimeoutMs: v4_1.z.number().min(0),
|
|
27859
|
+
projects: ProjectsSchema.default({ retentionDays: 30 })
|
|
27761
27860
|
}).strict();
|
|
27762
27861
|
var IpcSchema = v4_1.z.object({
|
|
27763
27862
|
connectTimeoutMs: v4_1.z.number().min(0),
|
|
@@ -45661,7 +45760,7 @@ var require_structured_logging = __commonJS({
|
|
|
45661
45760
|
*/
|
|
45662
45761
|
hookReceived(context, metadata) {
|
|
45663
45762
|
return {
|
|
45664
|
-
type: "
|
|
45763
|
+
type: "hook:received",
|
|
45665
45764
|
time: Date.now(),
|
|
45666
45765
|
source: "cli",
|
|
45667
45766
|
context: {
|
|
@@ -45671,7 +45770,9 @@ var require_structured_logging = __commonJS({
|
|
|
45671
45770
|
hook: context.hook
|
|
45672
45771
|
},
|
|
45673
45772
|
payload: {
|
|
45674
|
-
|
|
45773
|
+
hook: context.hook,
|
|
45774
|
+
cwd: metadata.cwd,
|
|
45775
|
+
mode: metadata.mode
|
|
45675
45776
|
}
|
|
45676
45777
|
};
|
|
45677
45778
|
},
|
|
@@ -45680,7 +45781,7 @@ var require_structured_logging = __commonJS({
|
|
|
45680
45781
|
*/
|
|
45681
45782
|
hookCompleted(context, metadata, state) {
|
|
45682
45783
|
return {
|
|
45683
|
-
type: "
|
|
45784
|
+
type: "hook:completed",
|
|
45684
45785
|
time: Date.now(),
|
|
45685
45786
|
source: "cli",
|
|
45686
45787
|
context: {
|
|
@@ -45690,8 +45791,10 @@ var require_structured_logging = __commonJS({
|
|
|
45690
45791
|
hook: context.hook
|
|
45691
45792
|
},
|
|
45692
45793
|
payload: {
|
|
45693
|
-
|
|
45694
|
-
metadata
|
|
45794
|
+
hook: context.hook,
|
|
45795
|
+
durationMs: metadata.durationMs,
|
|
45796
|
+
reminderReturned: state?.reminderReturned,
|
|
45797
|
+
responseType: state?.responseType
|
|
45695
45798
|
}
|
|
45696
45799
|
};
|
|
45697
45800
|
},
|
|
@@ -45701,7 +45804,7 @@ var require_structured_logging = __commonJS({
|
|
|
45701
45804
|
*/
|
|
45702
45805
|
eventReceived(context, metadata) {
|
|
45703
45806
|
return {
|
|
45704
|
-
type: "
|
|
45807
|
+
type: "event:received",
|
|
45705
45808
|
time: Date.now(),
|
|
45706
45809
|
source: "daemon",
|
|
45707
45810
|
context: {
|
|
@@ -45712,7 +45815,9 @@ var require_structured_logging = __commonJS({
|
|
|
45712
45815
|
taskId: context.taskId
|
|
45713
45816
|
},
|
|
45714
45817
|
payload: {
|
|
45715
|
-
metadata
|
|
45818
|
+
eventKind: metadata.eventKind,
|
|
45819
|
+
...metadata.eventType !== void 0 && { eventType: metadata.eventType },
|
|
45820
|
+
...metadata.hook !== void 0 && { hook: metadata.hook }
|
|
45716
45821
|
}
|
|
45717
45822
|
};
|
|
45718
45823
|
},
|
|
@@ -45722,7 +45827,7 @@ var require_structured_logging = __commonJS({
|
|
|
45722
45827
|
*/
|
|
45723
45828
|
eventProcessed(context, state, metadata) {
|
|
45724
45829
|
return {
|
|
45725
|
-
type: "
|
|
45830
|
+
type: "event:processed",
|
|
45726
45831
|
time: Date.now(),
|
|
45727
45832
|
source: "daemon",
|
|
45728
45833
|
context: {
|
|
@@ -45733,17 +45838,19 @@ var require_structured_logging = __commonJS({
|
|
|
45733
45838
|
taskId: context.taskId
|
|
45734
45839
|
},
|
|
45735
45840
|
payload: {
|
|
45736
|
-
state,
|
|
45737
|
-
|
|
45841
|
+
handlerId: state.handlerId,
|
|
45842
|
+
success: state.success,
|
|
45843
|
+
durationMs: metadata.durationMs,
|
|
45844
|
+
error: metadata.error
|
|
45738
45845
|
}
|
|
45739
45846
|
};
|
|
45740
45847
|
},
|
|
45741
45848
|
/**
|
|
45742
45849
|
* Create a ReminderStaged event (logged when Daemon stages a reminder file).
|
|
45743
45850
|
*/
|
|
45744
|
-
reminderStaged(context, state,
|
|
45851
|
+
reminderStaged(context, state, _metadata) {
|
|
45745
45852
|
return {
|
|
45746
|
-
type: "
|
|
45853
|
+
type: "reminder:staged",
|
|
45747
45854
|
time: Date.now(),
|
|
45748
45855
|
source: "daemon",
|
|
45749
45856
|
context: {
|
|
@@ -45754,8 +45861,11 @@ var require_structured_logging = __commonJS({
|
|
|
45754
45861
|
taskId: context.taskId
|
|
45755
45862
|
},
|
|
45756
45863
|
payload: {
|
|
45757
|
-
state,
|
|
45758
|
-
|
|
45864
|
+
reminderName: state.reminderName,
|
|
45865
|
+
hookName: state.hookName,
|
|
45866
|
+
blocking: state.blocking,
|
|
45867
|
+
priority: state.priority,
|
|
45868
|
+
persistent: state.persistent
|
|
45759
45869
|
}
|
|
45760
45870
|
};
|
|
45761
45871
|
},
|
|
@@ -45765,14 +45875,15 @@ var require_structured_logging = __commonJS({
|
|
|
45765
45875
|
*/
|
|
45766
45876
|
daemonStarting(metadata) {
|
|
45767
45877
|
return {
|
|
45768
|
-
type: "
|
|
45878
|
+
type: "daemon:starting",
|
|
45769
45879
|
time: Date.now(),
|
|
45770
45880
|
source: "daemon",
|
|
45771
45881
|
context: {
|
|
45772
45882
|
sessionId: ""
|
|
45773
45883
|
},
|
|
45774
45884
|
payload: {
|
|
45775
|
-
metadata
|
|
45885
|
+
projectDir: metadata.projectDir,
|
|
45886
|
+
pid: metadata.pid
|
|
45776
45887
|
}
|
|
45777
45888
|
};
|
|
45778
45889
|
},
|
|
@@ -45781,14 +45892,14 @@ var require_structured_logging = __commonJS({
|
|
|
45781
45892
|
*/
|
|
45782
45893
|
daemonStarted(metadata) {
|
|
45783
45894
|
return {
|
|
45784
|
-
type: "
|
|
45895
|
+
type: "daemon:started",
|
|
45785
45896
|
time: Date.now(),
|
|
45786
45897
|
source: "daemon",
|
|
45787
45898
|
context: {
|
|
45788
45899
|
sessionId: ""
|
|
45789
45900
|
},
|
|
45790
45901
|
payload: {
|
|
45791
|
-
metadata
|
|
45902
|
+
startupDurationMs: metadata.startupDurationMs
|
|
45792
45903
|
}
|
|
45793
45904
|
};
|
|
45794
45905
|
},
|
|
@@ -45797,14 +45908,14 @@ var require_structured_logging = __commonJS({
|
|
|
45797
45908
|
*/
|
|
45798
45909
|
ipcServerStarted(metadata) {
|
|
45799
45910
|
return {
|
|
45800
|
-
type: "
|
|
45911
|
+
type: "ipc:started",
|
|
45801
45912
|
time: Date.now(),
|
|
45802
45913
|
source: "daemon",
|
|
45803
45914
|
context: {
|
|
45804
45915
|
sessionId: ""
|
|
45805
45916
|
},
|
|
45806
45917
|
payload: {
|
|
45807
|
-
metadata
|
|
45918
|
+
socketPath: metadata.socketPath
|
|
45808
45919
|
}
|
|
45809
45920
|
};
|
|
45810
45921
|
},
|
|
@@ -45813,14 +45924,15 @@ var require_structured_logging = __commonJS({
|
|
|
45813
45924
|
*/
|
|
45814
45925
|
configWatcherStarted(metadata) {
|
|
45815
45926
|
return {
|
|
45816
|
-
type: "
|
|
45927
|
+
type: "config:watcher-started",
|
|
45817
45928
|
time: Date.now(),
|
|
45818
45929
|
source: "daemon",
|
|
45819
45930
|
context: {
|
|
45820
45931
|
sessionId: ""
|
|
45821
45932
|
},
|
|
45822
45933
|
payload: {
|
|
45823
|
-
metadata
|
|
45934
|
+
projectDir: metadata.projectDir,
|
|
45935
|
+
watchedFiles: metadata.watchedFiles
|
|
45824
45936
|
}
|
|
45825
45937
|
};
|
|
45826
45938
|
},
|
|
@@ -45829,14 +45941,14 @@ var require_structured_logging = __commonJS({
|
|
|
45829
45941
|
*/
|
|
45830
45942
|
sessionEvictionStarted(metadata) {
|
|
45831
45943
|
return {
|
|
45832
|
-
type: "
|
|
45944
|
+
type: "session:eviction-started",
|
|
45833
45945
|
time: Date.now(),
|
|
45834
45946
|
source: "daemon",
|
|
45835
45947
|
context: {
|
|
45836
45948
|
sessionId: ""
|
|
45837
45949
|
},
|
|
45838
45950
|
payload: {
|
|
45839
|
-
metadata
|
|
45951
|
+
intervalMs: metadata.intervalMs
|
|
45840
45952
|
}
|
|
45841
45953
|
};
|
|
45842
45954
|
},
|
|
@@ -45847,7 +45959,7 @@ var require_structured_logging = __commonJS({
|
|
|
45847
45959
|
*/
|
|
45848
45960
|
statuslineRendered(context, state, metadata) {
|
|
45849
45961
|
return {
|
|
45850
|
-
type: "
|
|
45962
|
+
type: "statusline:rendered",
|
|
45851
45963
|
time: Date.now(),
|
|
45852
45964
|
source: "cli",
|
|
45853
45965
|
context: {
|
|
@@ -45858,8 +45970,11 @@ var require_structured_logging = __commonJS({
|
|
|
45858
45970
|
taskId: context.taskId
|
|
45859
45971
|
},
|
|
45860
45972
|
payload: {
|
|
45861
|
-
state,
|
|
45862
|
-
|
|
45973
|
+
displayMode: state.displayMode,
|
|
45974
|
+
staleData: state.staleData,
|
|
45975
|
+
model: metadata.model,
|
|
45976
|
+
tokens: metadata.tokens,
|
|
45977
|
+
durationMs: metadata.durationMs
|
|
45863
45978
|
}
|
|
45864
45979
|
};
|
|
45865
45980
|
},
|
|
@@ -45869,7 +45984,7 @@ var require_structured_logging = __commonJS({
|
|
|
45869
45984
|
*/
|
|
45870
45985
|
statuslineError(context, reason, metadata) {
|
|
45871
45986
|
return {
|
|
45872
|
-
type: "
|
|
45987
|
+
type: "statusline:error",
|
|
45873
45988
|
time: Date.now(),
|
|
45874
45989
|
source: "cli",
|
|
45875
45990
|
context: {
|
|
@@ -45881,7 +45996,9 @@ var require_structured_logging = __commonJS({
|
|
|
45881
45996
|
},
|
|
45882
45997
|
payload: {
|
|
45883
45998
|
reason,
|
|
45884
|
-
metadata
|
|
45999
|
+
file: metadata.file,
|
|
46000
|
+
fallbackUsed: metadata.fallbackUsed,
|
|
46001
|
+
error: metadata.error
|
|
45885
46002
|
}
|
|
45886
46003
|
};
|
|
45887
46004
|
},
|
|
@@ -45892,7 +46009,7 @@ var require_structured_logging = __commonJS({
|
|
|
45892
46009
|
*/
|
|
45893
46010
|
resumeGenerating(context, metadata) {
|
|
45894
46011
|
return {
|
|
45895
|
-
type: "
|
|
46012
|
+
type: "resume-message:start",
|
|
45896
46013
|
time: Date.now(),
|
|
45897
46014
|
source: "daemon",
|
|
45898
46015
|
context: {
|
|
@@ -45903,8 +46020,8 @@ var require_structured_logging = __commonJS({
|
|
|
45903
46020
|
taskId: context.taskId
|
|
45904
46021
|
},
|
|
45905
46022
|
payload: {
|
|
45906
|
-
metadata,
|
|
45907
|
-
|
|
46023
|
+
title_confidence: metadata.title_confidence,
|
|
46024
|
+
intent_confidence: metadata.intent_confidence
|
|
45908
46025
|
}
|
|
45909
46026
|
};
|
|
45910
46027
|
},
|
|
@@ -45914,7 +46031,7 @@ var require_structured_logging = __commonJS({
|
|
|
45914
46031
|
*/
|
|
45915
46032
|
resumeUpdated(context, state) {
|
|
45916
46033
|
return {
|
|
45917
|
-
type: "
|
|
46034
|
+
type: "resume-message:finish",
|
|
45918
46035
|
time: Date.now(),
|
|
45919
46036
|
source: "daemon",
|
|
45920
46037
|
context: {
|
|
@@ -45925,8 +46042,8 @@ var require_structured_logging = __commonJS({
|
|
|
45925
46042
|
taskId: context.taskId
|
|
45926
46043
|
},
|
|
45927
46044
|
payload: {
|
|
45928
|
-
state,
|
|
45929
|
-
|
|
46045
|
+
snarky_comment: state.snarky_comment,
|
|
46046
|
+
timestamp: state.timestamp
|
|
45930
46047
|
}
|
|
45931
46048
|
};
|
|
45932
46049
|
},
|
|
@@ -45936,7 +46053,7 @@ var require_structured_logging = __commonJS({
|
|
|
45936
46053
|
*/
|
|
45937
46054
|
resumeSkipped(context, metadata, reason) {
|
|
45938
46055
|
return {
|
|
45939
|
-
type: "
|
|
46056
|
+
type: "resume-message:skipped",
|
|
45940
46057
|
time: Date.now(),
|
|
45941
46058
|
source: "daemon",
|
|
45942
46059
|
context: {
|
|
@@ -45947,11 +46064,50 @@ var require_structured_logging = __commonJS({
|
|
|
45947
46064
|
taskId: context.taskId
|
|
45948
46065
|
},
|
|
45949
46066
|
payload: {
|
|
45950
|
-
metadata,
|
|
46067
|
+
title_confidence: metadata.title_confidence,
|
|
46068
|
+
intent_confidence: metadata.intent_confidence,
|
|
46069
|
+
min_confidence: metadata.min_confidence,
|
|
45951
46070
|
reason
|
|
45952
46071
|
}
|
|
45953
46072
|
};
|
|
45954
46073
|
},
|
|
46074
|
+
// --- Persona Events ---
|
|
46075
|
+
/**
|
|
46076
|
+
* Create a PersonaSelected event (logged when a persona is selected for a session).
|
|
46077
|
+
*/
|
|
46078
|
+
personaSelected(context, payload) {
|
|
46079
|
+
return {
|
|
46080
|
+
type: "persona:selected",
|
|
46081
|
+
time: Date.now(),
|
|
46082
|
+
source: "daemon",
|
|
46083
|
+
context: {
|
|
46084
|
+
sessionId: context.sessionId,
|
|
46085
|
+
correlationId: context.correlationId,
|
|
46086
|
+
traceId: context.traceId,
|
|
46087
|
+
hook: context.hook,
|
|
46088
|
+
taskId: context.taskId
|
|
46089
|
+
},
|
|
46090
|
+
payload
|
|
46091
|
+
};
|
|
46092
|
+
},
|
|
46093
|
+
/**
|
|
46094
|
+
* Create a PersonaChanged event (logged when persona changes mid-session).
|
|
46095
|
+
*/
|
|
46096
|
+
personaChanged(context, payload) {
|
|
46097
|
+
return {
|
|
46098
|
+
type: "persona:changed",
|
|
46099
|
+
time: Date.now(),
|
|
46100
|
+
source: "daemon",
|
|
46101
|
+
context: {
|
|
46102
|
+
sessionId: context.sessionId,
|
|
46103
|
+
correlationId: context.correlationId,
|
|
46104
|
+
traceId: context.traceId,
|
|
46105
|
+
hook: context.hook,
|
|
46106
|
+
taskId: context.taskId
|
|
46107
|
+
},
|
|
46108
|
+
payload
|
|
46109
|
+
};
|
|
46110
|
+
},
|
|
45955
46111
|
// --- Transcript Events (logged to transcript-events.log) ---
|
|
45956
46112
|
/**
|
|
45957
46113
|
* Create a TranscriptEventEmitted event (logged when TranscriptService emits an event).
|
|
@@ -45959,7 +46115,7 @@ var require_structured_logging = __commonJS({
|
|
|
45959
46115
|
*/
|
|
45960
46116
|
transcriptEventEmitted(context, state, metadata) {
|
|
45961
46117
|
return {
|
|
45962
|
-
type: "
|
|
46118
|
+
type: "transcript:emitted",
|
|
45963
46119
|
time: Date.now(),
|
|
45964
46120
|
source: "transcript",
|
|
45965
46121
|
context: {
|
|
@@ -45970,8 +46126,13 @@ var require_structured_logging = __commonJS({
|
|
|
45970
46126
|
taskId: context.taskId
|
|
45971
46127
|
},
|
|
45972
46128
|
payload: {
|
|
45973
|
-
state,
|
|
45974
|
-
|
|
46129
|
+
eventType: state.eventType,
|
|
46130
|
+
lineNumber: state.lineNumber,
|
|
46131
|
+
uuid: state.uuid,
|
|
46132
|
+
toolName: state.toolName,
|
|
46133
|
+
transcriptPath: metadata.transcriptPath,
|
|
46134
|
+
contentPreview: metadata.contentPreview,
|
|
46135
|
+
metrics: metadata.metrics
|
|
45975
46136
|
}
|
|
45976
46137
|
};
|
|
45977
46138
|
},
|
|
@@ -45981,7 +46142,7 @@ var require_structured_logging = __commonJS({
|
|
|
45981
46142
|
*/
|
|
45982
46143
|
preCompactCaptured(context, state, metadata) {
|
|
45983
46144
|
return {
|
|
45984
|
-
type: "
|
|
46145
|
+
type: "transcript:pre-compact",
|
|
45985
46146
|
time: Date.now(),
|
|
45986
46147
|
source: "transcript",
|
|
45987
46148
|
context: {
|
|
@@ -45992,18 +46153,45 @@ var require_structured_logging = __commonJS({
|
|
|
45992
46153
|
taskId: context.taskId
|
|
45993
46154
|
},
|
|
45994
46155
|
payload: {
|
|
45995
|
-
state,
|
|
45996
|
-
|
|
45997
|
-
|
|
46156
|
+
snapshotPath: state.snapshotPath,
|
|
46157
|
+
lineCount: state.lineCount,
|
|
46158
|
+
transcriptPath: metadata.transcriptPath,
|
|
46159
|
+
metrics: metadata.metrics
|
|
46160
|
+
}
|
|
46161
|
+
};
|
|
46162
|
+
},
|
|
46163
|
+
// --- Error Events ---
|
|
46164
|
+
/**
|
|
46165
|
+
* Create an ErrorOccurred event (logged when error/fatal level log is emitted).
|
|
46166
|
+
* Emitted automatically by HookableLogger hook — no manual call-site changes needed.
|
|
46167
|
+
*/
|
|
46168
|
+
daemonErrorOccurred(context, state) {
|
|
46169
|
+
return {
|
|
46170
|
+
type: "error:occurred",
|
|
46171
|
+
time: Date.now(),
|
|
46172
|
+
source: "daemon",
|
|
46173
|
+
context: {
|
|
46174
|
+
sessionId: context.sessionId,
|
|
46175
|
+
correlationId: context.correlationId,
|
|
46176
|
+
traceId: context.traceId,
|
|
46177
|
+
hook: context.hook,
|
|
46178
|
+
taskId: context.taskId
|
|
46179
|
+
},
|
|
46180
|
+
payload: {
|
|
46181
|
+
errorMessage: state.errorMessage,
|
|
46182
|
+
errorStack: state.errorStack
|
|
45998
46183
|
}
|
|
45999
46184
|
};
|
|
46000
46185
|
}
|
|
46001
46186
|
};
|
|
46002
46187
|
function logEvent(logger, event) {
|
|
46003
|
-
|
|
46188
|
+
const payload = event.payload;
|
|
46189
|
+
const meta = payload != null && typeof payload === "object" ? payload : {};
|
|
46190
|
+
const reason = "reason" in meta ? String(meta.reason) : void 0;
|
|
46191
|
+
logger.info(reason ?? `${event.type}`, {
|
|
46004
46192
|
type: event.type,
|
|
46005
46193
|
source: event.source,
|
|
46006
|
-
...
|
|
46194
|
+
...meta
|
|
46007
46195
|
});
|
|
46008
46196
|
}
|
|
46009
46197
|
function setupGlobalErrorHandlers(logger) {
|
|
@@ -61136,7 +61324,7 @@ var require_log_metrics_descriptors = __commonJS({
|
|
|
61136
61324
|
});
|
|
61137
61325
|
|
|
61138
61326
|
// ../sidekick-core/dist/state/index.js
|
|
61139
|
-
var
|
|
61327
|
+
var require_state3 = __commonJS({
|
|
61140
61328
|
"../sidekick-core/dist/state/index.js"(exports2) {
|
|
61141
61329
|
"use strict";
|
|
61142
61330
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -61235,7 +61423,7 @@ var require_transcript_service = __commonJS({
|
|
|
61235
61423
|
var node_readline_12 = require("node:readline");
|
|
61236
61424
|
var node_path_1 = require("node:path");
|
|
61237
61425
|
var structured_logging_js_1 = require_structured_logging();
|
|
61238
|
-
var index_js_1 =
|
|
61426
|
+
var index_js_1 = require_state3();
|
|
61239
61427
|
var EXCLUDED_BUILTIN_COMMANDS = /* @__PURE__ */ new Set([
|
|
61240
61428
|
"/add-dir",
|
|
61241
61429
|
"/agents",
|
|
@@ -63205,6 +63393,120 @@ var require_hookable_logger = __commonJS({
|
|
|
63205
63393
|
}
|
|
63206
63394
|
});
|
|
63207
63395
|
|
|
63396
|
+
// ../sidekick-core/dist/project-registry.js
|
|
63397
|
+
var require_project_registry = __commonJS({
|
|
63398
|
+
"../sidekick-core/dist/project-registry.js"(exports2) {
|
|
63399
|
+
"use strict";
|
|
63400
|
+
var __importDefault2 = exports2 && exports2.__importDefault || function(mod) {
|
|
63401
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
63402
|
+
};
|
|
63403
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
63404
|
+
exports2.ProjectRegistryService = void 0;
|
|
63405
|
+
exports2.encodeProjectDir = encodeProjectDir;
|
|
63406
|
+
var node_fs_1 = require("node:fs");
|
|
63407
|
+
var promises_12 = __importDefault2(require("node:fs/promises"));
|
|
63408
|
+
var node_crypto_1 = require("node:crypto");
|
|
63409
|
+
var node_path_1 = require("node:path");
|
|
63410
|
+
var types_1 = require_dist();
|
|
63411
|
+
function encodeProjectDir(absPath) {
|
|
63412
|
+
return absPath.replace(/\//g, "-");
|
|
63413
|
+
}
|
|
63414
|
+
var REGISTRY_FILE = "registry.json";
|
|
63415
|
+
var ProjectRegistryService = class {
|
|
63416
|
+
registryRoot;
|
|
63417
|
+
constructor(registryRoot) {
|
|
63418
|
+
this.registryRoot = registryRoot;
|
|
63419
|
+
}
|
|
63420
|
+
/**
|
|
63421
|
+
* Register or update a project in the registry.
|
|
63422
|
+
* Creates the directory and writes registry.json with current timestamp.
|
|
63423
|
+
*/
|
|
63424
|
+
async register(projectDir) {
|
|
63425
|
+
const encoded = encodeProjectDir(projectDir);
|
|
63426
|
+
const entryDir = (0, node_path_1.join)(this.registryRoot, encoded);
|
|
63427
|
+
const entryFile = (0, node_path_1.join)(entryDir, REGISTRY_FILE);
|
|
63428
|
+
await promises_12.default.mkdir(entryDir, { recursive: true });
|
|
63429
|
+
const entry = {
|
|
63430
|
+
path: projectDir,
|
|
63431
|
+
displayName: (0, node_path_1.basename)(projectDir),
|
|
63432
|
+
lastActive: (/* @__PURE__ */ new Date()).toISOString()
|
|
63433
|
+
};
|
|
63434
|
+
const tmpPath = `${entryFile}.${(0, node_crypto_1.randomBytes)(6).toString("hex")}.tmp`;
|
|
63435
|
+
try {
|
|
63436
|
+
await promises_12.default.writeFile(tmpPath, JSON.stringify(entry, null, 2), "utf-8");
|
|
63437
|
+
await promises_12.default.rename(tmpPath, entryFile);
|
|
63438
|
+
} catch (err) {
|
|
63439
|
+
await promises_12.default.unlink(tmpPath).catch(() => {
|
|
63440
|
+
});
|
|
63441
|
+
throw err;
|
|
63442
|
+
}
|
|
63443
|
+
}
|
|
63444
|
+
/**
|
|
63445
|
+
* List all valid registered projects.
|
|
63446
|
+
* Skips entries with missing/invalid registry.json.
|
|
63447
|
+
*/
|
|
63448
|
+
async list() {
|
|
63449
|
+
if (!(0, node_fs_1.existsSync)(this.registryRoot)) {
|
|
63450
|
+
return [];
|
|
63451
|
+
}
|
|
63452
|
+
const entries = [];
|
|
63453
|
+
const dirents = await promises_12.default.readdir(this.registryRoot, { withFileTypes: true });
|
|
63454
|
+
for (const dirent of dirents) {
|
|
63455
|
+
if (!dirent.isDirectory())
|
|
63456
|
+
continue;
|
|
63457
|
+
const entryFile = (0, node_path_1.join)(this.registryRoot, dirent.name, REGISTRY_FILE);
|
|
63458
|
+
try {
|
|
63459
|
+
const raw = await promises_12.default.readFile(entryFile, "utf-8");
|
|
63460
|
+
const parsed = types_1.ProjectRegistryEntrySchema.parse(JSON.parse(raw));
|
|
63461
|
+
entries.push(parsed);
|
|
63462
|
+
} catch {
|
|
63463
|
+
}
|
|
63464
|
+
}
|
|
63465
|
+
return entries;
|
|
63466
|
+
}
|
|
63467
|
+
/**
|
|
63468
|
+
* Prune stale registry entries.
|
|
63469
|
+
* Removes entries where the project path no longer exists
|
|
63470
|
+
* or lastActive is older than retentionDays.
|
|
63471
|
+
*/
|
|
63472
|
+
async prune(options) {
|
|
63473
|
+
if (!(0, node_fs_1.existsSync)(this.registryRoot)) {
|
|
63474
|
+
return [];
|
|
63475
|
+
}
|
|
63476
|
+
const pruned = [];
|
|
63477
|
+
const cutoff = Date.now() - options.retentionDays * 24 * 60 * 60 * 1e3;
|
|
63478
|
+
const dirents = await promises_12.default.readdir(this.registryRoot, { withFileTypes: true });
|
|
63479
|
+
for (const dirent of dirents) {
|
|
63480
|
+
if (!dirent.isDirectory())
|
|
63481
|
+
continue;
|
|
63482
|
+
const entryDir = (0, node_path_1.join)(this.registryRoot, dirent.name);
|
|
63483
|
+
const entryFile = (0, node_path_1.join)(entryDir, REGISTRY_FILE);
|
|
63484
|
+
let entry;
|
|
63485
|
+
try {
|
|
63486
|
+
const raw = await promises_12.default.readFile(entryFile, "utf-8");
|
|
63487
|
+
entry = types_1.ProjectRegistryEntrySchema.parse(JSON.parse(raw));
|
|
63488
|
+
} catch {
|
|
63489
|
+
await promises_12.default.rm(entryDir, { recursive: true, force: true });
|
|
63490
|
+
continue;
|
|
63491
|
+
}
|
|
63492
|
+
let reason = null;
|
|
63493
|
+
if (!(0, node_fs_1.existsSync)(entry.path)) {
|
|
63494
|
+
reason = "path-missing";
|
|
63495
|
+
} else if (new Date(entry.lastActive).getTime() < cutoff) {
|
|
63496
|
+
reason = "age-exceeded";
|
|
63497
|
+
}
|
|
63498
|
+
if (reason) {
|
|
63499
|
+
await promises_12.default.rm(entryDir, { recursive: true, force: true });
|
|
63500
|
+
pruned.push({ path: entry.path, reason });
|
|
63501
|
+
}
|
|
63502
|
+
}
|
|
63503
|
+
return pruned;
|
|
63504
|
+
}
|
|
63505
|
+
};
|
|
63506
|
+
exports2.ProjectRegistryService = ProjectRegistryService;
|
|
63507
|
+
}
|
|
63508
|
+
});
|
|
63509
|
+
|
|
63208
63510
|
// ../sidekick-core/dist/daemon-health.js
|
|
63209
63511
|
var require_daemon_health = __commonJS({
|
|
63210
63512
|
"../sidekick-core/dist/daemon-health.js"(exports2) {
|
|
@@ -63448,7 +63750,7 @@ var require_dist4 = __commonJS({
|
|
|
63448
63750
|
};
|
|
63449
63751
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
63450
63752
|
exports2.SIDEKICK_SECTION_START = exports2.detectGitignoreStatus = exports2.removeGitignoreSection = exports2.installGitignoreSection = exports2.validateOpenAIKey = exports2.validateOpenRouterKey = exports2.createSetupStatusService = exports2.SetupStatusService = exports2.DaemonClient = exports2.findZombieDaemons = exports2.killZombieDaemons = exports2.killAllDaemons = exports2.logEvent = exports2.LogEvents = exports2.DEFAULT_MAX_FILES = exports2.DEFAULT_ROTATE_SIZE_BYTES = exports2.getComponentLogLevel = exports2.setupGlobalErrorHandlers = exports2.createLoggerFacade = exports2.createLogManager = exports2.createConsoleLogger = exports2.getUserDaemonsDir = exports2.getUserPidPath = exports2.getTokenPath = exports2.getSocketPath = exports2.getProjectHash = exports2.getPidPath = exports2.getLockPath = exports2.IpcService = exports2.IpcServer = exports2.loadPersonaFile = exports2.getDefaultPersonasDir = exports2.discoverPersonas = exports2.createPersonaLoader = exports2.reconstructTranscriptPath = exports2.encodeProjectPath = exports2.isPreCompactEvent = exports2.isStopEvent = exports2.isPostToolUseEvent = exports2.isPreToolUseEvent = exports2.isUserPromptSubmitEvent = exports2.isSessionEndEvent = exports2.isSessionStartEvent = exports2.isTranscriptEvent = exports2.isHookEvent = exports2.MetricsPersistPayloadSchema = exports2.CleanupPayloadSchema = exports2.ResumeGenerationPayloadSchema = exports2.SessionSummaryPayloadSchema = exports2.TaskTypes = void 0;
|
|
63451
|
-
exports2.loadUserProfile = exports2.parseGitStatusOutput = exports2.getGitFileStatus = exports2.isInSandbox = exports2.updateDaemonHealth = exports2.readDaemonHealth = exports2.DaemonGlobalLogMetricsDescriptor = exports2.CliLogMetricsDescriptor = exports2.DaemonLogMetricsDescriptor = exports2.CompactionHistoryDescriptor = exports2.TranscriptMetricsDescriptor = exports2.GlobalStateAccessor = exports2.SessionStateAccessor = exports2.globalState = exports2.sessionState = exports2.StateCorruptError = exports2.StateNotFoundError = exports2.StateService = exports2.createHookableLogger = exports2.InstrumentedProfileProviderFactory = exports2.InstrumentedLLMProvider = exports2.ServiceFactoryImpl = exports2.TranscriptServiceImpl = exports2.createDefaultTokenUsage = exports2.createDefaultMetrics = exports2.copyWithTimestampSync = exports2.renameWithTimestampSync = exports2.renameWithTimestamp = exports2.copyWithTimestamp = exports2.getTimestampedPath = exports2.extractToolResultPreview = exports2.extractToolCallPreview = exports2.extractTextFromContent = exports2.extractContentPreview = exports2.HandlerRegistryImpl = exports2.extractConsumedTimestamp = exports2.createConsumedFilePattern = exports2.CONSUMED_FILE_PATTERN = exports2.filterActiveReminderFiles = exports2.validatePathSegment = exports2.isValidPathSegment = exports2.getReminderPath = exports2.getHookDir = exports2.getStagingRoot = exports2.SessionScopedStagingService = exports2.StagingServiceCore = exports2.GITIGNORE_ENTRIES = exports2.SIDEKICK_SECTION_END = void 0;
|
|
63753
|
+
exports2.loadUserProfile = exports2.parseGitStatusOutput = exports2.getGitFileStatus = exports2.isInSandbox = exports2.updateDaemonHealth = exports2.readDaemonHealth = exports2.ProjectRegistryService = exports2.encodeProjectDir = exports2.DaemonGlobalLogMetricsDescriptor = exports2.CliLogMetricsDescriptor = exports2.DaemonLogMetricsDescriptor = exports2.CompactionHistoryDescriptor = exports2.TranscriptMetricsDescriptor = exports2.GlobalStateAccessor = exports2.SessionStateAccessor = exports2.globalState = exports2.sessionState = exports2.StateCorruptError = exports2.StateNotFoundError = exports2.StateService = exports2.createHookableLogger = exports2.InstrumentedProfileProviderFactory = exports2.InstrumentedLLMProvider = exports2.ServiceFactoryImpl = exports2.TranscriptServiceImpl = exports2.createDefaultTokenUsage = exports2.createDefaultMetrics = exports2.copyWithTimestampSync = exports2.renameWithTimestampSync = exports2.renameWithTimestamp = exports2.copyWithTimestamp = exports2.getTimestampedPath = exports2.extractToolResultPreview = exports2.extractToolCallPreview = exports2.extractTextFromContent = exports2.extractContentPreview = exports2.HandlerRegistryImpl = exports2.extractConsumedTimestamp = exports2.createConsumedFilePattern = exports2.CONSUMED_FILE_PATTERN = exports2.filterActiveReminderFiles = exports2.validatePathSegment = exports2.isValidPathSegment = exports2.getReminderPath = exports2.getHookDir = exports2.getStagingRoot = exports2.SessionScopedStagingService = exports2.StagingServiceCore = exports2.GITIGNORE_ENTRIES = exports2.SIDEKICK_SECTION_END = void 0;
|
|
63452
63754
|
var types_1 = require_dist();
|
|
63453
63755
|
Object.defineProperty(exports2, "TaskTypes", { enumerable: true, get: function() {
|
|
63454
63756
|
return types_1.TaskTypes;
|
|
@@ -63721,7 +64023,7 @@ var require_dist4 = __commonJS({
|
|
|
63721
64023
|
Object.defineProperty(exports2, "createHookableLogger", { enumerable: true, get: function() {
|
|
63722
64024
|
return hookable_logger_1.createHookableLogger;
|
|
63723
64025
|
} });
|
|
63724
|
-
var index_js_1 =
|
|
64026
|
+
var index_js_1 = require_state3();
|
|
63725
64027
|
Object.defineProperty(exports2, "StateService", { enumerable: true, get: function() {
|
|
63726
64028
|
return index_js_1.StateService;
|
|
63727
64029
|
} });
|
|
@@ -63758,6 +64060,13 @@ var require_dist4 = __commonJS({
|
|
|
63758
64060
|
Object.defineProperty(exports2, "DaemonGlobalLogMetricsDescriptor", { enumerable: true, get: function() {
|
|
63759
64061
|
return index_js_1.DaemonGlobalLogMetricsDescriptor;
|
|
63760
64062
|
} });
|
|
64063
|
+
var project_registry_1 = require_project_registry();
|
|
64064
|
+
Object.defineProperty(exports2, "encodeProjectDir", { enumerable: true, get: function() {
|
|
64065
|
+
return project_registry_1.encodeProjectDir;
|
|
64066
|
+
} });
|
|
64067
|
+
Object.defineProperty(exports2, "ProjectRegistryService", { enumerable: true, get: function() {
|
|
64068
|
+
return project_registry_1.ProjectRegistryService;
|
|
64069
|
+
} });
|
|
63761
64070
|
var daemon_health_1 = require_daemon_health();
|
|
63762
64071
|
Object.defineProperty(exports2, "readDaemonHealth", { enumerable: true, get: function() {
|
|
63763
64072
|
return daemon_health_1.readDaemonHealth;
|
|
@@ -70982,7 +71291,6 @@ var require_reminder_utils = __commonJS({
|
|
|
70982
71291
|
blocking: zod_1.z.boolean(),
|
|
70983
71292
|
priority: zod_1.z.number(),
|
|
70984
71293
|
persistent: zod_1.z.boolean(),
|
|
70985
|
-
throttle: zod_1.z.boolean().optional(),
|
|
70986
71294
|
userMessage: zod_1.z.string().optional(),
|
|
70987
71295
|
additionalContext: zod_1.z.string().optional(),
|
|
70988
71296
|
reason: zod_1.z.string().optional()
|
|
@@ -71033,7 +71341,6 @@ var require_reminder_utils = __commonJS({
|
|
|
71033
71341
|
blocking: def.blocking,
|
|
71034
71342
|
priority: def.priority,
|
|
71035
71343
|
persistent: def.persistent,
|
|
71036
|
-
throttle: def.throttle,
|
|
71037
71344
|
userMessage: def.userMessage ? interpolateTemplate(def.userMessage, context) : void 0,
|
|
71038
71345
|
additionalContext: def.additionalContext ? interpolateTemplate(def.additionalContext, context) : void 0,
|
|
71039
71346
|
reason: def.reason ? interpolateTemplate(def.reason, context) : void 0
|
|
@@ -71358,7 +71665,7 @@ var require_types2 = __commonJS({
|
|
|
71358
71665
|
});
|
|
71359
71666
|
|
|
71360
71667
|
// ../feature-reminders/dist/state.js
|
|
71361
|
-
var
|
|
71668
|
+
var require_state4 = __commonJS({
|
|
71362
71669
|
"../feature-reminders/dist/state.js"(exports2) {
|
|
71363
71670
|
"use strict";
|
|
71364
71671
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -71399,7 +71706,7 @@ var require_throttle_utils = __commonJS({
|
|
|
71399
71706
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
71400
71707
|
exports2.registerThrottledReminder = registerThrottledReminder;
|
|
71401
71708
|
exports2.resetThrottleCounters = resetThrottleCounters;
|
|
71402
|
-
var state_js_1 =
|
|
71709
|
+
var state_js_1 = require_state4();
|
|
71403
71710
|
async function registerThrottledReminder(ctx, sessionId, reminderId, targetHook, resolvedReminder) {
|
|
71404
71711
|
const remindersState = (0, state_js_1.createRemindersState)(ctx.stateService);
|
|
71405
71712
|
const result = await remindersState.reminderThrottle.read(sessionId);
|
|
@@ -71434,7 +71741,7 @@ var require_stage_default_user_prompt = __commonJS({
|
|
|
71434
71741
|
var staging_handler_utils_js_1 = require_staging_handler_utils();
|
|
71435
71742
|
var types_js_1 = require_types2();
|
|
71436
71743
|
var reminder_utils_js_1 = require_reminder_utils();
|
|
71437
|
-
var state_js_1 =
|
|
71744
|
+
var state_js_1 = require_state4();
|
|
71438
71745
|
var throttle_utils_js_1 = require_throttle_utils();
|
|
71439
71746
|
function registerStageDefaultUserPrompt(context) {
|
|
71440
71747
|
(0, staging_handler_utils_js_1.createStagingHandler)(context, {
|
|
@@ -71599,7 +71906,7 @@ var require_stage_pause_and_reflect = __commonJS({
|
|
|
71599
71906
|
var types_1 = require_dist();
|
|
71600
71907
|
var staging_handler_utils_js_1 = require_staging_handler_utils();
|
|
71601
71908
|
var types_js_1 = require_types2();
|
|
71602
|
-
var state_js_1 =
|
|
71909
|
+
var state_js_1 = require_state4();
|
|
71603
71910
|
function registerStagePauseAndReflect(context) {
|
|
71604
71911
|
(0, staging_handler_utils_js_1.createStagingHandler)(context, {
|
|
71605
71912
|
id: "reminders:stage-pause-and-reflect",
|
|
@@ -73165,6 +73472,86 @@ var require_picomatch2 = __commonJS({
|
|
|
73165
73472
|
}
|
|
73166
73473
|
});
|
|
73167
73474
|
|
|
73475
|
+
// ../feature-reminders/dist/events.js
|
|
73476
|
+
var require_events2 = __commonJS({
|
|
73477
|
+
"../feature-reminders/dist/events.js"(exports2) {
|
|
73478
|
+
"use strict";
|
|
73479
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
73480
|
+
exports2.ReminderEvents = void 0;
|
|
73481
|
+
exports2.ReminderEvents = {
|
|
73482
|
+
/**
|
|
73483
|
+
* Create a ReminderConsumed event (logged when CLI returns a staged reminder).
|
|
73484
|
+
*/
|
|
73485
|
+
reminderConsumed(context, state, _metadata) {
|
|
73486
|
+
return {
|
|
73487
|
+
type: "reminder:consumed",
|
|
73488
|
+
time: Date.now(),
|
|
73489
|
+
source: "cli",
|
|
73490
|
+
context: {
|
|
73491
|
+
sessionId: context.sessionId,
|
|
73492
|
+
correlationId: context.correlationId,
|
|
73493
|
+
traceId: context.traceId,
|
|
73494
|
+
hook: context.hook,
|
|
73495
|
+
taskId: context.taskId
|
|
73496
|
+
},
|
|
73497
|
+
payload: {
|
|
73498
|
+
reminderName: state.reminderName,
|
|
73499
|
+
reminderReturned: state.reminderReturned,
|
|
73500
|
+
blocking: state.blocking,
|
|
73501
|
+
priority: state.priority,
|
|
73502
|
+
persistent: state.persistent
|
|
73503
|
+
}
|
|
73504
|
+
};
|
|
73505
|
+
},
|
|
73506
|
+
// Note: reminderStaged stays in @sidekick/core (used by staging-service.ts, circular dep)
|
|
73507
|
+
/**
|
|
73508
|
+
* Create a ReminderUnstaged event (logged when a reminder is removed from staging).
|
|
73509
|
+
*/
|
|
73510
|
+
reminderUnstaged(context, state) {
|
|
73511
|
+
return {
|
|
73512
|
+
type: "reminder:unstaged",
|
|
73513
|
+
time: Date.now(),
|
|
73514
|
+
source: "daemon",
|
|
73515
|
+
context: {
|
|
73516
|
+
sessionId: context.sessionId,
|
|
73517
|
+
correlationId: context.correlationId,
|
|
73518
|
+
traceId: context.traceId,
|
|
73519
|
+
hook: context.hook,
|
|
73520
|
+
taskId: context.taskId
|
|
73521
|
+
},
|
|
73522
|
+
payload: {
|
|
73523
|
+
reminderName: state.reminderName,
|
|
73524
|
+
hookName: state.hookName,
|
|
73525
|
+
reason: state.reason
|
|
73526
|
+
}
|
|
73527
|
+
};
|
|
73528
|
+
},
|
|
73529
|
+
/**
|
|
73530
|
+
* Create a RemindersCleared event (logged when staging directory is cleaned).
|
|
73531
|
+
*/
|
|
73532
|
+
remindersCleared(context, state, reason) {
|
|
73533
|
+
return {
|
|
73534
|
+
type: "reminder:cleared",
|
|
73535
|
+
time: Date.now(),
|
|
73536
|
+
source: "daemon",
|
|
73537
|
+
context: {
|
|
73538
|
+
sessionId: context.sessionId,
|
|
73539
|
+
correlationId: context.correlationId,
|
|
73540
|
+
traceId: context.traceId,
|
|
73541
|
+
hook: context.hook,
|
|
73542
|
+
taskId: context.taskId
|
|
73543
|
+
},
|
|
73544
|
+
payload: {
|
|
73545
|
+
clearedCount: state.clearedCount,
|
|
73546
|
+
hookNames: state.hookNames,
|
|
73547
|
+
reason
|
|
73548
|
+
}
|
|
73549
|
+
};
|
|
73550
|
+
}
|
|
73551
|
+
};
|
|
73552
|
+
}
|
|
73553
|
+
});
|
|
73554
|
+
|
|
73168
73555
|
// ../feature-reminders/dist/tool-pattern-matcher.js
|
|
73169
73556
|
var require_tool_pattern_matcher = __commonJS({
|
|
73170
73557
|
"../feature-reminders/dist/tool-pattern-matcher.js"(exports2) {
|
|
@@ -73217,12 +73604,14 @@ var require_track_verification_tools = __commonJS({
|
|
|
73217
73604
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
73218
73605
|
exports2.registerTrackVerificationTools = registerTrackVerificationTools;
|
|
73219
73606
|
exports2.stageToolsForFiles = stageToolsForFiles;
|
|
73607
|
+
var core_1 = require_dist4();
|
|
73608
|
+
var events_js_1 = require_events2();
|
|
73220
73609
|
var types_1 = require_dist();
|
|
73221
73610
|
var picomatch_1 = __importDefault2(require_picomatch2());
|
|
73222
73611
|
var tool_pattern_matcher_js_1 = require_tool_pattern_matcher();
|
|
73223
73612
|
var reminder_utils_js_1 = require_reminder_utils();
|
|
73224
73613
|
var types_js_1 = require_types2();
|
|
73225
|
-
var state_js_1 =
|
|
73614
|
+
var state_js_1 = require_state4();
|
|
73226
73615
|
var FILE_EDIT_TOOLS = ["Write", "Edit", "MultiEdit"];
|
|
73227
73616
|
var TOOL_REMINDER_MAP = {
|
|
73228
73617
|
build: types_js_1.ReminderIds.VC_BUILD,
|
|
@@ -73363,6 +73752,7 @@ var require_track_verification_tools = __commonJS({
|
|
|
73363
73752
|
lastMatchedScope: match.scope
|
|
73364
73753
|
};
|
|
73365
73754
|
await daemonCtx.staging.deleteReminder("Stop", reminderId);
|
|
73755
|
+
(0, core_1.logEvent)(daemonCtx.logger, events_js_1.ReminderEvents.reminderUnstaged({ sessionId }, { reminderName: reminderId, hookName: "Stop", reason: "tool_verified" }));
|
|
73366
73756
|
anyUnstaged = true;
|
|
73367
73757
|
daemonCtx.logger.debug("VC tool verified", {
|
|
73368
73758
|
toolName,
|
|
@@ -73377,6 +73767,7 @@ var require_track_verification_tools = __commonJS({
|
|
|
73377
73767
|
const hasPerToolReminders = remaining.some((r) => VC_TOOL_NAME_SET.has(r.name));
|
|
73378
73768
|
if (!hasPerToolReminders) {
|
|
73379
73769
|
await daemonCtx.staging.deleteReminder("Stop", types_js_1.ReminderIds.VERIFY_COMPLETION);
|
|
73770
|
+
(0, core_1.logEvent)(daemonCtx.logger, events_js_1.ReminderEvents.reminderUnstaged({ sessionId }, { reminderName: types_js_1.ReminderIds.VERIFY_COMPLETION, hookName: "Stop", reason: "all_tools_verified" }));
|
|
73380
73771
|
daemonCtx.logger.info("All VC tools verified, unstaged wrapper", { sessionId });
|
|
73381
73772
|
}
|
|
73382
73773
|
await remindersState.verificationTools.write(sessionId, toolsState);
|
|
@@ -73416,7 +73807,7 @@ var require_stage_stop_bash_changes = __commonJS({
|
|
|
73416
73807
|
var picomatch_1 = __importDefault2(require_picomatch2());
|
|
73417
73808
|
var track_verification_tools_js_1 = require_track_verification_tools();
|
|
73418
73809
|
var types_js_1 = require_types2();
|
|
73419
|
-
var state_js_1 =
|
|
73810
|
+
var state_js_1 = require_state4();
|
|
73420
73811
|
var GIT_STATUS_TIMEOUT_MS = 200;
|
|
73421
73812
|
var MAX_BASELINES = 50;
|
|
73422
73813
|
function registerStageBashChanges(context) {
|
|
@@ -73528,10 +73919,12 @@ var require_unstage_verify_completion = __commonJS({
|
|
|
73528
73919
|
"use strict";
|
|
73529
73920
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
73530
73921
|
exports2.registerUnstageVerifyCompletion = registerUnstageVerifyCompletion;
|
|
73922
|
+
var core_1 = require_dist4();
|
|
73923
|
+
var events_js_1 = require_events2();
|
|
73531
73924
|
var types_1 = require_dist();
|
|
73532
73925
|
var types_js_1 = require_types2();
|
|
73533
73926
|
var reminder_utils_js_1 = require_reminder_utils();
|
|
73534
|
-
var state_js_1 =
|
|
73927
|
+
var state_js_1 = require_state4();
|
|
73535
73928
|
function registerUnstageVerifyCompletion(context) {
|
|
73536
73929
|
if (!(0, types_1.isDaemonContext)(context))
|
|
73537
73930
|
return;
|
|
@@ -73550,6 +73943,7 @@ var require_unstage_verify_completion = __commonJS({
|
|
|
73550
73943
|
if (!sessionId) {
|
|
73551
73944
|
daemonCtx.logger.warn("No sessionId in UserPromptSubmit event");
|
|
73552
73945
|
await daemonCtx.staging.deleteReminder("Stop", types_js_1.ReminderIds.VERIFY_COMPLETION);
|
|
73946
|
+
(0, core_1.logEvent)(daemonCtx.logger, events_js_1.ReminderEvents.reminderUnstaged({ sessionId: "" }, { reminderName: types_js_1.ReminderIds.VERIFY_COMPLETION, hookName: "Stop", reason: "no_session_id" }));
|
|
73553
73947
|
return;
|
|
73554
73948
|
}
|
|
73555
73949
|
const remindersState = (0, state_js_1.createRemindersState)(daemonCtx.stateService);
|
|
@@ -73630,8 +74024,11 @@ var require_unstage_verify_completion = __commonJS({
|
|
|
73630
74024
|
hadState: unverifiedState !== null
|
|
73631
74025
|
});
|
|
73632
74026
|
}
|
|
74027
|
+
const eventContext = { sessionId };
|
|
74028
|
+
const reason = unverifiedState?.hasUnverifiedChanges ? "cycle_limit_reached" : "no_unverified_changes";
|
|
73633
74029
|
for (const vcId of types_js_1.ALL_VC_REMINDER_IDS) {
|
|
73634
74030
|
await daemonCtx.staging.deleteReminder("Stop", vcId);
|
|
74031
|
+
(0, core_1.logEvent)(daemonCtx.logger, events_js_1.ReminderEvents.reminderUnstaged(eventContext, { reminderName: vcId, hookName: "Stop", reason }));
|
|
73635
74032
|
}
|
|
73636
74033
|
daemonCtx.logger.debug("VC unstage: deleted all VC reminders");
|
|
73637
74034
|
}
|
|
@@ -73649,6 +74046,7 @@ var require_stage_persona_reminders = __commonJS({
|
|
|
73649
74046
|
exports2.stagePersonaRemindersForSession = stagePersonaRemindersForSession;
|
|
73650
74047
|
exports2.registerStagePersonaReminders = registerStagePersonaReminders;
|
|
73651
74048
|
var core_1 = require_dist4();
|
|
74049
|
+
var events_js_1 = require_events2();
|
|
73652
74050
|
var types_1 = require_dist();
|
|
73653
74051
|
var reminder_utils_js_1 = require_reminder_utils();
|
|
73654
74052
|
var types_js_1 = require_types2();
|
|
@@ -73669,10 +74067,21 @@ var require_stage_persona_reminders = __commonJS({
|
|
|
73669
74067
|
}
|
|
73670
74068
|
var PERSONA_REMINDER_HOOKS = ["UserPromptSubmit", "SessionStart"];
|
|
73671
74069
|
async function clearPersonaReminders(ctx, sessionId) {
|
|
74070
|
+
const eventContext = { sessionId };
|
|
73672
74071
|
for (const hook of PERSONA_REMINDER_HOOKS) {
|
|
73673
74072
|
await ctx.staging.deleteReminder(hook, types_js_1.ReminderIds.REMEMBER_YOUR_PERSONA);
|
|
74073
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.ReminderEvents.reminderUnstaged(eventContext, {
|
|
74074
|
+
reminderName: types_js_1.ReminderIds.REMEMBER_YOUR_PERSONA,
|
|
74075
|
+
hookName: hook,
|
|
74076
|
+
reason: "persona_cleared"
|
|
74077
|
+
}));
|
|
73674
74078
|
}
|
|
73675
74079
|
await ctx.staging.deleteReminder("UserPromptSubmit", types_js_1.ReminderIds.PERSONA_CHANGED);
|
|
74080
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.ReminderEvents.reminderUnstaged(eventContext, {
|
|
74081
|
+
reminderName: types_js_1.ReminderIds.PERSONA_CHANGED,
|
|
74082
|
+
hookName: "UserPromptSubmit",
|
|
74083
|
+
reason: "persona_cleared"
|
|
74084
|
+
}));
|
|
73676
74085
|
const lastStaged = await readLastStagedPersona(ctx, sessionId);
|
|
73677
74086
|
if (lastStaged !== null) {
|
|
73678
74087
|
await writeLastStagedPersona(ctx, sessionId, null);
|
|
@@ -73751,6 +74160,11 @@ var require_stage_persona_reminders = __commonJS({
|
|
|
73751
74160
|
const isGenuineChange = lastStaged !== null && // null = never staged (initialization) → skip
|
|
73752
74161
|
lastStaged.personaId !== persona.id;
|
|
73753
74162
|
if (isGenuineChange) {
|
|
74163
|
+
(0, core_1.logEvent)(ctx.logger, core_1.LogEvents.personaChanged({ sessionId }, {
|
|
74164
|
+
personaFrom: lastStaged.personaId ?? "none",
|
|
74165
|
+
personaTo: persona.id,
|
|
74166
|
+
reason: "mid_session_change"
|
|
74167
|
+
}));
|
|
73754
74168
|
const changedReminder = (0, reminder_utils_js_1.resolveReminder)(types_js_1.ReminderIds.PERSONA_CHANGED, {
|
|
73755
74169
|
context: templateContext,
|
|
73756
74170
|
assets: ctx.assets
|
|
@@ -73808,6 +74222,7 @@ var require_stage_user_profile_reminders = __commonJS({
|
|
|
73808
74222
|
exports2.stageUserProfileRemindersForSession = stageUserProfileRemindersForSession;
|
|
73809
74223
|
exports2.registerStageUserProfileReminders = registerStageUserProfileReminders;
|
|
73810
74224
|
var core_1 = require_dist4();
|
|
74225
|
+
var events_js_1 = require_events2();
|
|
73811
74226
|
var types_1 = require_dist();
|
|
73812
74227
|
var reminder_utils_js_1 = require_reminder_utils();
|
|
73813
74228
|
var types_js_1 = require_types2();
|
|
@@ -73815,8 +74230,14 @@ var require_stage_user_profile_reminders = __commonJS({
|
|
|
73815
74230
|
async function stageUserProfileRemindersForSession(ctx, sessionId) {
|
|
73816
74231
|
const profile = (0, core_1.loadUserProfile)({ logger: ctx.logger });
|
|
73817
74232
|
if (!profile) {
|
|
74233
|
+
const eventContext = { sessionId };
|
|
73818
74234
|
for (const hook of USER_PROFILE_REMINDER_HOOKS) {
|
|
73819
74235
|
await ctx.staging.deleteReminder(hook, types_js_1.ReminderIds.USER_PROFILE);
|
|
74236
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.ReminderEvents.reminderUnstaged(eventContext, {
|
|
74237
|
+
reminderName: types_js_1.ReminderIds.USER_PROFILE,
|
|
74238
|
+
hookName: hook,
|
|
74239
|
+
reason: "no_user_profile"
|
|
74240
|
+
}));
|
|
73820
74241
|
}
|
|
73821
74242
|
return;
|
|
73822
74243
|
}
|
|
@@ -73885,60 +74306,6 @@ var require_staging2 = __commonJS({
|
|
|
73885
74306
|
}
|
|
73886
74307
|
});
|
|
73887
74308
|
|
|
73888
|
-
// ../feature-reminders/dist/events.js
|
|
73889
|
-
var require_events2 = __commonJS({
|
|
73890
|
-
"../feature-reminders/dist/events.js"(exports2) {
|
|
73891
|
-
"use strict";
|
|
73892
|
-
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
73893
|
-
exports2.ReminderEvents = void 0;
|
|
73894
|
-
exports2.ReminderEvents = {
|
|
73895
|
-
/**
|
|
73896
|
-
* Create a ReminderConsumed event (logged when CLI returns a staged reminder).
|
|
73897
|
-
*/
|
|
73898
|
-
reminderConsumed(context, state, metadata) {
|
|
73899
|
-
return {
|
|
73900
|
-
type: "ReminderConsumed",
|
|
73901
|
-
time: Date.now(),
|
|
73902
|
-
source: "cli",
|
|
73903
|
-
context: {
|
|
73904
|
-
sessionId: context.sessionId,
|
|
73905
|
-
correlationId: context.correlationId,
|
|
73906
|
-
traceId: context.traceId,
|
|
73907
|
-
hook: context.hook,
|
|
73908
|
-
taskId: context.taskId
|
|
73909
|
-
},
|
|
73910
|
-
payload: {
|
|
73911
|
-
state,
|
|
73912
|
-
metadata
|
|
73913
|
-
}
|
|
73914
|
-
};
|
|
73915
|
-
},
|
|
73916
|
-
// Note: reminderStaged stays in @sidekick/core (used by staging-service.ts, circular dep)
|
|
73917
|
-
/**
|
|
73918
|
-
* Create a RemindersCleared event (logged when staging directory is cleaned).
|
|
73919
|
-
*/
|
|
73920
|
-
remindersCleared(context, state, reason) {
|
|
73921
|
-
return {
|
|
73922
|
-
type: "RemindersCleared",
|
|
73923
|
-
time: Date.now(),
|
|
73924
|
-
source: "daemon",
|
|
73925
|
-
context: {
|
|
73926
|
-
sessionId: context.sessionId,
|
|
73927
|
-
correlationId: context.correlationId,
|
|
73928
|
-
traceId: context.traceId,
|
|
73929
|
-
hook: context.hook,
|
|
73930
|
-
taskId: context.taskId
|
|
73931
|
-
},
|
|
73932
|
-
payload: {
|
|
73933
|
-
state,
|
|
73934
|
-
reason
|
|
73935
|
-
}
|
|
73936
|
-
};
|
|
73937
|
-
}
|
|
73938
|
-
};
|
|
73939
|
-
}
|
|
73940
|
-
});
|
|
73941
|
-
|
|
73942
74309
|
// ../feature-reminders/dist/cli-staging-reader.js
|
|
73943
74310
|
var require_cli_staging_reader = __commonJS({
|
|
73944
74311
|
"../feature-reminders/dist/cli-staging-reader.js"(exports2) {
|
|
@@ -74481,7 +74848,7 @@ var require_reminder_consumed = __commonJS({
|
|
|
74481
74848
|
"use strict";
|
|
74482
74849
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
74483
74850
|
exports2.handleReminderConsumed = handleReminderConsumed;
|
|
74484
|
-
var state_js_1 =
|
|
74851
|
+
var state_js_1 = require_state4();
|
|
74485
74852
|
var types_js_1 = require_types2();
|
|
74486
74853
|
async function handleReminderConsumed(params, ctx) {
|
|
74487
74854
|
const { sessionId, reminderName, metrics } = params;
|
|
@@ -74506,7 +74873,7 @@ var require_vc_unverified = __commonJS({
|
|
|
74506
74873
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
74507
74874
|
exports2.handleVCUnverifiedSet = handleVCUnverifiedSet;
|
|
74508
74875
|
exports2.handleVCUnverifiedClear = handleVCUnverifiedClear;
|
|
74509
|
-
var state_js_1 =
|
|
74876
|
+
var state_js_1 = require_state4();
|
|
74510
74877
|
async function handleVCUnverifiedSet(params, ctx) {
|
|
74511
74878
|
const { sessionId, classification, metrics } = params;
|
|
74512
74879
|
const remindersState = (0, state_js_1.createRemindersState)(ctx.stateService);
|
|
@@ -74569,7 +74936,9 @@ var require_orchestrator = __commonJS({
|
|
|
74569
74936
|
"use strict";
|
|
74570
74937
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
74571
74938
|
exports2.ReminderOrchestrator = void 0;
|
|
74572
|
-
var
|
|
74939
|
+
var core_1 = require_dist4();
|
|
74940
|
+
var events_js_1 = require_events2();
|
|
74941
|
+
var state_js_1 = require_state4();
|
|
74573
74942
|
var types_js_1 = require_types2();
|
|
74574
74943
|
var ReminderOrchestrator = class {
|
|
74575
74944
|
deps;
|
|
@@ -74588,8 +74957,14 @@ var require_orchestrator = __commonJS({
|
|
|
74588
74957
|
if (reminder.name === types_js_1.ReminderIds.PAUSE_AND_REFLECT) {
|
|
74589
74958
|
try {
|
|
74590
74959
|
const staging = this.deps.getStagingService(sessionId);
|
|
74960
|
+
const eventContext = { sessionId };
|
|
74591
74961
|
for (const vcId of types_js_1.ALL_VC_REMINDER_IDS) {
|
|
74592
74962
|
await staging.deleteReminder("Stop", vcId);
|
|
74963
|
+
(0, core_1.logEvent)(this.deps.logger, events_js_1.ReminderEvents.reminderUnstaged(eventContext, {
|
|
74964
|
+
reminderName: vcId,
|
|
74965
|
+
hookName: "Stop",
|
|
74966
|
+
reason: "pause_and_reflect_cascade"
|
|
74967
|
+
}));
|
|
74593
74968
|
}
|
|
74594
74969
|
this.deps.logger.debug("Unstaged all VC reminders after P&R staged", { sessionId });
|
|
74595
74970
|
} catch (err) {
|
|
@@ -74625,6 +75000,7 @@ var require_orchestrator = __commonJS({
|
|
|
74625
75000
|
try {
|
|
74626
75001
|
const staging = this.deps.getStagingService(sessionId);
|
|
74627
75002
|
await staging.deleteReminder("PreToolUse", types_js_1.ReminderIds.PAUSE_AND_REFLECT);
|
|
75003
|
+
(0, core_1.logEvent)(this.deps.logger, events_js_1.ReminderEvents.reminderUnstaged({ sessionId }, { reminderName: types_js_1.ReminderIds.PAUSE_AND_REFLECT, hookName: "PreToolUse", reason: "vc_consumed_cascade" }));
|
|
74628
75004
|
this.deps.logger.debug("Unstaged P&R after VC consumed", { sessionId });
|
|
74629
75005
|
} catch (err) {
|
|
74630
75006
|
this.deps.logger.warn("Failed to unstage P&R after VC consumed", {
|
|
@@ -74750,7 +75126,7 @@ var require_dist5 = __commonJS({
|
|
|
74750
75126
|
Object.defineProperty(exports2, "ReminderOrchestrator", { enumerable: true, get: function() {
|
|
74751
75127
|
return orchestrator_js_1.ReminderOrchestrator;
|
|
74752
75128
|
} });
|
|
74753
|
-
var state_js_1 =
|
|
75129
|
+
var state_js_1 = require_state4();
|
|
74754
75130
|
Object.defineProperty(exports2, "createRemindersState", { enumerable: true, get: function() {
|
|
74755
75131
|
return state_js_1.createRemindersState;
|
|
74756
75132
|
} });
|
|
@@ -75777,7 +76153,7 @@ var require_truncation = __commonJS({
|
|
|
75777
76153
|
});
|
|
75778
76154
|
|
|
75779
76155
|
// ../feature-session-summary/dist/state.js
|
|
75780
|
-
var
|
|
76156
|
+
var require_state5 = __commonJS({
|
|
75781
76157
|
"../feature-session-summary/dist/state.js"(exports2) {
|
|
75782
76158
|
"use strict";
|
|
75783
76159
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
@@ -75882,7 +76258,7 @@ var require_persona_selection = __commonJS({
|
|
|
75882
76258
|
exports2.selectPersonaForSession = selectPersonaForSession;
|
|
75883
76259
|
exports2.ensurePersonaForSession = ensurePersonaForSession;
|
|
75884
76260
|
var core_1 = require_dist4();
|
|
75885
|
-
var state_js_1 =
|
|
76261
|
+
var state_js_1 = require_state5();
|
|
75886
76262
|
var types_js_1 = require_types4();
|
|
75887
76263
|
function parsePersonaList(list) {
|
|
75888
76264
|
if (!list || !list.trim()) {
|
|
@@ -75965,11 +76341,11 @@ var require_persona_selection = __commonJS({
|
|
|
75965
76341
|
};
|
|
75966
76342
|
const summaryState2 = (0, state_js_1.createSessionSummaryState)(ctx.stateService);
|
|
75967
76343
|
await summaryState2.sessionPersona.write(sessionId, personaState2);
|
|
75968
|
-
ctx.logger.
|
|
75969
|
-
sessionId,
|
|
76344
|
+
(0, core_1.logEvent)(ctx.logger, core_1.LogEvents.personaSelected({ sessionId }, {
|
|
75970
76345
|
personaId: pinned.id,
|
|
75971
|
-
|
|
75972
|
-
|
|
76346
|
+
selectionMethod: "pinned",
|
|
76347
|
+
poolSize: 1
|
|
76348
|
+
}));
|
|
75973
76349
|
return pinned.id;
|
|
75974
76350
|
}
|
|
75975
76351
|
ctx.logger.warn("Pinned persona not found, falling back to random selection", {
|
|
@@ -75979,13 +76355,18 @@ var require_persona_selection = __commonJS({
|
|
|
75979
76355
|
});
|
|
75980
76356
|
}
|
|
75981
76357
|
const persistThroughClear = personaConfig.persistThroughClear ?? true;
|
|
75982
|
-
ctx.logger.
|
|
76358
|
+
ctx.logger.info("[persona-lifecycle] ClearHandoff: checking clear cache", {
|
|
76359
|
+
sessionId,
|
|
75983
76360
|
persistThroughClear,
|
|
75984
76361
|
startType: options?.startType,
|
|
75985
76362
|
hasClearCache: !!ctx.personaClearCache
|
|
75986
76363
|
});
|
|
75987
76364
|
if (persistThroughClear && options?.startType === "clear" && ctx.personaClearCache) {
|
|
75988
76365
|
const cachedPersonaId = ctx.personaClearCache.consume();
|
|
76366
|
+
ctx.logger.info("[persona-lifecycle] ClearHandoff: consumed cache", {
|
|
76367
|
+
sessionId,
|
|
76368
|
+
cachedPersonaId: cachedPersonaId ?? null
|
|
76369
|
+
});
|
|
75989
76370
|
if (cachedPersonaId) {
|
|
75990
76371
|
const cachedPersona = allPersonas.get(cachedPersonaId);
|
|
75991
76372
|
if (cachedPersona) {
|
|
@@ -75996,11 +76377,11 @@ var require_persona_selection = __commonJS({
|
|
|
75996
76377
|
};
|
|
75997
76378
|
const summaryState2 = (0, state_js_1.createSessionSummaryState)(ctx.stateService);
|
|
75998
76379
|
await summaryState2.sessionPersona.write(sessionId, personaState2);
|
|
75999
|
-
ctx.logger.
|
|
76000
|
-
sessionId,
|
|
76380
|
+
(0, core_1.logEvent)(ctx.logger, core_1.LogEvents.personaSelected({ sessionId }, {
|
|
76001
76381
|
personaId: cachedPersona.id,
|
|
76002
|
-
|
|
76003
|
-
|
|
76382
|
+
selectionMethod: "handoff",
|
|
76383
|
+
poolSize: 1
|
|
76384
|
+
}));
|
|
76004
76385
|
return cachedPersona.id;
|
|
76005
76386
|
} else {
|
|
76006
76387
|
ctx.logger.warn("Cached persona from clear not found in available personas, falling back to selection", {
|
|
@@ -76038,12 +76419,11 @@ var require_persona_selection = __commonJS({
|
|
|
76038
76419
|
};
|
|
76039
76420
|
const summaryState = (0, state_js_1.createSessionSummaryState)(ctx.stateService);
|
|
76040
76421
|
await summaryState.sessionPersona.write(sessionId, personaState);
|
|
76041
|
-
ctx.logger.
|
|
76042
|
-
sessionId,
|
|
76422
|
+
(0, core_1.logEvent)(ctx.logger, core_1.LogEvents.personaSelected({ sessionId }, {
|
|
76043
76423
|
personaId: selected.id,
|
|
76044
|
-
|
|
76424
|
+
selectionMethod: "random",
|
|
76045
76425
|
poolSize: eligiblePersonas.length
|
|
76046
|
-
});
|
|
76426
|
+
}));
|
|
76047
76427
|
return selected.id;
|
|
76048
76428
|
}
|
|
76049
76429
|
async function ensurePersonaForSession(sessionId, ctx) {
|
|
@@ -76073,7 +76453,7 @@ var require_create_first_summary = __commonJS({
|
|
|
76073
76453
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
76074
76454
|
exports2.createFirstSessionSummary = createFirstSessionSummary;
|
|
76075
76455
|
var types_1 = require_dist();
|
|
76076
|
-
var state_js_1 =
|
|
76456
|
+
var state_js_1 = require_state5();
|
|
76077
76457
|
var persona_selection_js_1 = require_persona_selection();
|
|
76078
76458
|
var types_js_1 = require_types4();
|
|
76079
76459
|
async function createFirstSessionSummary(event, ctx) {
|
|
@@ -76106,15 +76486,12 @@ var require_events3 = __commonJS({
|
|
|
76106
76486
|
"../feature-session-summary/dist/events.js"(exports2) {
|
|
76107
76487
|
"use strict";
|
|
76108
76488
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
76109
|
-
exports2.SessionSummaryEvents = void 0;
|
|
76489
|
+
exports2.DecisionEvents = exports2.SessionSummaryEvents = void 0;
|
|
76110
76490
|
exports2.SessionSummaryEvents = {
|
|
76111
|
-
/**
|
|
76112
|
-
|
|
76113
|
-
* @see docs/design/FEATURE-SESSION-SUMMARY.md §3.4
|
|
76114
|
-
*/
|
|
76115
|
-
summaryUpdated(context, state, metadata, reason) {
|
|
76491
|
+
/** Emitted when summary generation begins. */
|
|
76492
|
+
summaryStart(context, payload) {
|
|
76116
76493
|
return {
|
|
76117
|
-
type: "
|
|
76494
|
+
type: "session-summary:start",
|
|
76118
76495
|
time: Date.now(),
|
|
76119
76496
|
source: "daemon",
|
|
76120
76497
|
context: {
|
|
@@ -76124,11 +76501,87 @@ var require_events3 = __commonJS({
|
|
|
76124
76501
|
hook: context.hook,
|
|
76125
76502
|
taskId: context.taskId
|
|
76126
76503
|
},
|
|
76127
|
-
payload
|
|
76128
|
-
|
|
76129
|
-
|
|
76130
|
-
|
|
76131
|
-
|
|
76504
|
+
payload
|
|
76505
|
+
};
|
|
76506
|
+
},
|
|
76507
|
+
/** Emitted when summary generation completes. */
|
|
76508
|
+
summaryFinish(context, payload) {
|
|
76509
|
+
return {
|
|
76510
|
+
type: "session-summary:finish",
|
|
76511
|
+
time: Date.now(),
|
|
76512
|
+
source: "daemon",
|
|
76513
|
+
context: {
|
|
76514
|
+
sessionId: context.sessionId,
|
|
76515
|
+
correlationId: context.correlationId,
|
|
76516
|
+
traceId: context.traceId,
|
|
76517
|
+
hook: context.hook,
|
|
76518
|
+
taskId: context.taskId
|
|
76519
|
+
},
|
|
76520
|
+
payload
|
|
76521
|
+
};
|
|
76522
|
+
},
|
|
76523
|
+
/** Emitted when session title changes. */
|
|
76524
|
+
titleChanged(context, payload) {
|
|
76525
|
+
return {
|
|
76526
|
+
type: "session-title:changed",
|
|
76527
|
+
time: Date.now(),
|
|
76528
|
+
source: "daemon",
|
|
76529
|
+
context: {
|
|
76530
|
+
sessionId: context.sessionId,
|
|
76531
|
+
correlationId: context.correlationId,
|
|
76532
|
+
traceId: context.traceId,
|
|
76533
|
+
hook: context.hook,
|
|
76534
|
+
taskId: context.taskId
|
|
76535
|
+
},
|
|
76536
|
+
payload
|
|
76537
|
+
};
|
|
76538
|
+
},
|
|
76539
|
+
/** Emitted when latest intent changes. */
|
|
76540
|
+
intentChanged(context, payload) {
|
|
76541
|
+
return {
|
|
76542
|
+
type: "intent:changed",
|
|
76543
|
+
time: Date.now(),
|
|
76544
|
+
source: "daemon",
|
|
76545
|
+
context: {
|
|
76546
|
+
sessionId: context.sessionId,
|
|
76547
|
+
correlationId: context.correlationId,
|
|
76548
|
+
traceId: context.traceId,
|
|
76549
|
+
hook: context.hook,
|
|
76550
|
+
taskId: context.taskId
|
|
76551
|
+
},
|
|
76552
|
+
payload
|
|
76553
|
+
};
|
|
76554
|
+
},
|
|
76555
|
+
/** Emitted when snarky message generation begins. */
|
|
76556
|
+
snarkyMessageStart(context, payload) {
|
|
76557
|
+
return {
|
|
76558
|
+
type: "snarky-message:start",
|
|
76559
|
+
time: Date.now(),
|
|
76560
|
+
source: "daemon",
|
|
76561
|
+
context: {
|
|
76562
|
+
sessionId: context.sessionId,
|
|
76563
|
+
correlationId: context.correlationId,
|
|
76564
|
+
traceId: context.traceId,
|
|
76565
|
+
hook: context.hook,
|
|
76566
|
+
taskId: context.taskId
|
|
76567
|
+
},
|
|
76568
|
+
payload
|
|
76569
|
+
};
|
|
76570
|
+
},
|
|
76571
|
+
/** Emitted when snarky message generation completes. */
|
|
76572
|
+
snarkyMessageFinish(context, payload) {
|
|
76573
|
+
return {
|
|
76574
|
+
type: "snarky-message:finish",
|
|
76575
|
+
time: Date.now(),
|
|
76576
|
+
source: "daemon",
|
|
76577
|
+
context: {
|
|
76578
|
+
sessionId: context.sessionId,
|
|
76579
|
+
correlationId: context.correlationId,
|
|
76580
|
+
traceId: context.traceId,
|
|
76581
|
+
hook: context.hook,
|
|
76582
|
+
taskId: context.taskId
|
|
76583
|
+
},
|
|
76584
|
+
payload
|
|
76132
76585
|
};
|
|
76133
76586
|
},
|
|
76134
76587
|
/**
|
|
@@ -76137,7 +76590,7 @@ var require_events3 = __commonJS({
|
|
|
76137
76590
|
*/
|
|
76138
76591
|
summarySkipped(context, metadata) {
|
|
76139
76592
|
return {
|
|
76140
|
-
type: "
|
|
76593
|
+
type: "session-summary:skipped",
|
|
76141
76594
|
time: Date.now(),
|
|
76142
76595
|
source: "daemon",
|
|
76143
76596
|
context: {
|
|
@@ -76148,12 +76601,31 @@ var require_events3 = __commonJS({
|
|
|
76148
76601
|
taskId: context.taskId
|
|
76149
76602
|
},
|
|
76150
76603
|
payload: {
|
|
76151
|
-
metadata,
|
|
76604
|
+
countdown: metadata.countdown,
|
|
76605
|
+
countdown_threshold: metadata.countdown_threshold,
|
|
76152
76606
|
reason: "countdown_active"
|
|
76153
76607
|
}
|
|
76154
76608
|
};
|
|
76155
76609
|
}
|
|
76156
76610
|
};
|
|
76611
|
+
exports2.DecisionEvents = {
|
|
76612
|
+
/** Emitted when an LLM decision is recorded. */
|
|
76613
|
+
decisionRecorded(context, payload) {
|
|
76614
|
+
return {
|
|
76615
|
+
type: "decision:recorded",
|
|
76616
|
+
time: Date.now(),
|
|
76617
|
+
source: "daemon",
|
|
76618
|
+
context: {
|
|
76619
|
+
sessionId: context.sessionId,
|
|
76620
|
+
correlationId: context.correlationId,
|
|
76621
|
+
traceId: context.traceId,
|
|
76622
|
+
hook: context.hook,
|
|
76623
|
+
taskId: context.taskId
|
|
76624
|
+
},
|
|
76625
|
+
payload
|
|
76626
|
+
};
|
|
76627
|
+
}
|
|
76628
|
+
};
|
|
76157
76629
|
}
|
|
76158
76630
|
});
|
|
76159
76631
|
|
|
@@ -76173,7 +76645,7 @@ var require_persona_utils = __commonJS({
|
|
|
76173
76645
|
exports2.mergePersonaConfig = mergePersonaConfig;
|
|
76174
76646
|
exports2.getEffectiveProfile = getEffectiveProfile;
|
|
76175
76647
|
var core_1 = require_dist4();
|
|
76176
|
-
var state_js_1 =
|
|
76648
|
+
var state_js_1 = require_state5();
|
|
76177
76649
|
var types_js_1 = require_types4();
|
|
76178
76650
|
var DEFAULT_PERSONA_SITUATION = "You are watching over the shoulder of a software developer as they work.";
|
|
76179
76651
|
function buildUserProfileContext(profile) {
|
|
@@ -76315,7 +76787,7 @@ var require_update_summary = __commonJS({
|
|
|
76315
76787
|
var events_js_1 = require_events3();
|
|
76316
76788
|
var zod_1 = require_zod();
|
|
76317
76789
|
var types_js_1 = require_types4();
|
|
76318
|
-
var state_js_1 =
|
|
76790
|
+
var state_js_1 = require_state5();
|
|
76319
76791
|
var persona_utils_js_1 = require_persona_utils();
|
|
76320
76792
|
var persona_selection_js_1 = require_persona_selection();
|
|
76321
76793
|
var PROMPT_FILE = "prompts/session-summary.prompt.txt";
|
|
@@ -76368,47 +76840,47 @@ var require_update_summary = __commonJS({
|
|
|
76368
76840
|
await (0, persona_selection_js_1.ensurePersonaForSession)(sessionId, ctx);
|
|
76369
76841
|
const metrics = ctx.transcript.getMetrics();
|
|
76370
76842
|
if (metrics.turnCount === 0) {
|
|
76371
|
-
ctx.logger.
|
|
76372
|
-
sessionId,
|
|
76843
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.DecisionEvents.decisionRecorded(event.context, {
|
|
76373
76844
|
decision: "skipped",
|
|
76374
|
-
reason: "BulkProcessingComplete with no user turns (turnCount=0)"
|
|
76375
|
-
|
|
76845
|
+
reason: "BulkProcessingComplete with no user turns (turnCount=0)",
|
|
76846
|
+
detail: "session-summary analysis"
|
|
76847
|
+
}));
|
|
76376
76848
|
return;
|
|
76377
76849
|
}
|
|
76378
|
-
ctx.logger.
|
|
76379
|
-
sessionId,
|
|
76850
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.DecisionEvents.decisionRecorded(event.context, {
|
|
76380
76851
|
decision: "calling",
|
|
76381
|
-
reason: "BulkProcessingComplete - analyzing full transcript"
|
|
76382
|
-
|
|
76852
|
+
reason: "BulkProcessingComplete - analyzing full transcript",
|
|
76853
|
+
detail: "session-summary analysis"
|
|
76854
|
+
}));
|
|
76383
76855
|
const countdown2 = await loadCountdownState(summaryState, sessionId);
|
|
76384
76856
|
void performAnalysis(event, ctx, summaryState, countdown2, "user_prompt_forced");
|
|
76385
76857
|
return;
|
|
76386
76858
|
}
|
|
76387
76859
|
const countdown = await loadCountdownState(summaryState, sessionId);
|
|
76388
76860
|
if (isUserPrompt) {
|
|
76389
|
-
ctx.logger.
|
|
76390
|
-
sessionId,
|
|
76861
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.DecisionEvents.decisionRecorded(event.context, {
|
|
76391
76862
|
decision: "calling",
|
|
76392
|
-
reason: "UserPrompt event forces immediate analysis"
|
|
76393
|
-
|
|
76863
|
+
reason: "UserPrompt event forces immediate analysis",
|
|
76864
|
+
detail: "session-summary analysis"
|
|
76865
|
+
}));
|
|
76394
76866
|
void performAnalysis(event, ctx, summaryState, countdown, "user_prompt_forced");
|
|
76395
76867
|
return;
|
|
76396
76868
|
}
|
|
76397
76869
|
if (countdown.countdown > 0) {
|
|
76398
|
-
ctx.logger.
|
|
76399
|
-
sessionId,
|
|
76870
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.DecisionEvents.decisionRecorded(event.context, {
|
|
76400
76871
|
decision: "skipped",
|
|
76401
|
-
reason: `countdown not reached (${countdown.countdown} tool results remaining)
|
|
76402
|
-
|
|
76872
|
+
reason: `countdown not reached (${countdown.countdown} tool results remaining)`,
|
|
76873
|
+
detail: "session-summary analysis"
|
|
76874
|
+
}));
|
|
76403
76875
|
countdown.countdown--;
|
|
76404
76876
|
await saveCountdownState(summaryState, sessionId, countdown);
|
|
76405
76877
|
return;
|
|
76406
76878
|
}
|
|
76407
|
-
ctx.logger.
|
|
76408
|
-
sessionId,
|
|
76879
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.DecisionEvents.decisionRecorded(event.context, {
|
|
76409
76880
|
decision: "calling",
|
|
76410
|
-
reason: "countdown reached zero after ToolResult"
|
|
76411
|
-
|
|
76881
|
+
reason: "countdown reached zero after ToolResult",
|
|
76882
|
+
detail: "session-summary analysis"
|
|
76883
|
+
}));
|
|
76412
76884
|
void performAnalysis(event, ctx, summaryState, countdown, "countdown_reached");
|
|
76413
76885
|
}
|
|
76414
76886
|
async function loadCountdownState(summaryState, sessionId) {
|
|
@@ -76442,6 +76914,10 @@ var require_update_summary = __commonJS({
|
|
|
76442
76914
|
const { sessionId } = event.context;
|
|
76443
76915
|
try {
|
|
76444
76916
|
const startTime = Date.now();
|
|
76917
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.SessionSummaryEvents.summaryStart(event.context, {
|
|
76918
|
+
reason,
|
|
76919
|
+
countdown: countdown.countdown
|
|
76920
|
+
}));
|
|
76445
76921
|
const featureConfig = ctx.config.getFeature("session-summary");
|
|
76446
76922
|
const config = { ...types_js_1.DEFAULT_SESSION_SUMMARY_CONFIG, ...featureConfig.settings };
|
|
76447
76923
|
const currentSummary = await loadCurrentSummary(summaryState, sessionId);
|
|
@@ -76545,19 +77021,28 @@ var require_update_summary = __commonJS({
|
|
|
76545
77021
|
if (sideEffects.length > 0) {
|
|
76546
77022
|
await Promise.all(sideEffects);
|
|
76547
77023
|
}
|
|
76548
|
-
(0, core_1.logEvent)(ctx.logger, events_js_1.SessionSummaryEvents.
|
|
77024
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.SessionSummaryEvents.summaryFinish(event.context, {
|
|
76549
77025
|
session_title: updatedSummary.session_title,
|
|
76550
77026
|
session_title_confidence: updatedSummary.session_title_confidence,
|
|
76551
77027
|
latest_intent: updatedSummary.latest_intent,
|
|
76552
|
-
latest_intent_confidence: updatedSummary.latest_intent_confidence
|
|
76553
|
-
}, {
|
|
76554
|
-
countdown_reset_to: newCountdown,
|
|
76555
|
-
tokens_used: tokensUsed,
|
|
77028
|
+
latest_intent_confidence: updatedSummary.latest_intent_confidence,
|
|
76556
77029
|
processing_time_ms: updatedSummary.stats?.processing_time_ms ?? 0,
|
|
76557
|
-
pivot_detected: updatedSummary.pivot_detected ?? false
|
|
76558
|
-
|
|
76559
|
-
|
|
76560
|
-
|
|
77030
|
+
pivot_detected: updatedSummary.pivot_detected ?? false
|
|
77031
|
+
}));
|
|
77032
|
+
if (currentSummary && updatedSummary.session_title !== currentSummary.session_title) {
|
|
77033
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.SessionSummaryEvents.titleChanged(event.context, {
|
|
77034
|
+
previousValue: currentSummary.session_title,
|
|
77035
|
+
newValue: updatedSummary.session_title,
|
|
77036
|
+
confidence: updatedSummary.session_title_confidence
|
|
77037
|
+
}));
|
|
77038
|
+
}
|
|
77039
|
+
if (currentSummary && updatedSummary.latest_intent !== currentSummary.latest_intent) {
|
|
77040
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.SessionSummaryEvents.intentChanged(event.context, {
|
|
77041
|
+
previousValue: currentSummary.latest_intent,
|
|
77042
|
+
newValue: updatedSummary.latest_intent,
|
|
77043
|
+
confidence: updatedSummary.latest_intent_confidence
|
|
77044
|
+
}));
|
|
77045
|
+
}
|
|
76561
77046
|
ctx.logger.info("Updated session summary", {
|
|
76562
77047
|
sessionId,
|
|
76563
77048
|
reason,
|
|
@@ -76623,6 +77108,7 @@ var require_update_summary = __commonJS({
|
|
|
76623
77108
|
return;
|
|
76624
77109
|
}
|
|
76625
77110
|
const provider = ctx.profileFactory.createForProfile(profileResult.profileId, llmConfig.fallbackProfile);
|
|
77111
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.SessionSummaryEvents.snarkyMessageStart({ sessionId }, { sessionId }));
|
|
76626
77112
|
try {
|
|
76627
77113
|
const response = await provider.complete({
|
|
76628
77114
|
messages: [{ role: "user", content: prompt }]
|
|
@@ -76633,6 +77119,7 @@ var require_update_summary = __commonJS({
|
|
|
76633
77119
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
76634
77120
|
};
|
|
76635
77121
|
await summaryState.snarkyMessage.write(sessionId, snarkyState);
|
|
77122
|
+
(0, core_1.logEvent)(ctx.logger, events_js_1.SessionSummaryEvents.snarkyMessageFinish({ sessionId }, { generatedMessage: snarkyMessage }));
|
|
76636
77123
|
ctx.logger.debug("Generated snarky message", {
|
|
76637
77124
|
sessionId,
|
|
76638
77125
|
personaId: persona?.id ?? "none",
|
|
@@ -76741,8 +77228,10 @@ var require_on_demand_generation = __commonJS({
|
|
|
76741
77228
|
exports2.generateSnarkyMessageOnDemand = generateSnarkyMessageOnDemand;
|
|
76742
77229
|
exports2.generateResumeMessageOnDemand = generateResumeMessageOnDemand;
|
|
76743
77230
|
var types_js_1 = require_types4();
|
|
76744
|
-
var state_js_1 =
|
|
77231
|
+
var state_js_1 = require_state5();
|
|
76745
77232
|
var core_1 = require_dist4();
|
|
77233
|
+
var core_2 = require_dist4();
|
|
77234
|
+
var events_js_1 = require_events3();
|
|
76746
77235
|
var update_summary_js_1 = require_update_summary();
|
|
76747
77236
|
var persona_utils_js_1 = require_persona_utils();
|
|
76748
77237
|
var SNARKY_PROMPT_FILE = "prompts/snarky-message.prompt.txt";
|
|
@@ -76819,6 +77308,7 @@ var require_on_demand_generation = __commonJS({
|
|
|
76819
77308
|
return { success: false, error: profileResult.errorMessage };
|
|
76820
77309
|
}
|
|
76821
77310
|
const provider = ctx.profileFactory.createForProfile(profileResult.profileId, llmConfig.fallbackProfile);
|
|
77311
|
+
(0, core_2.logEvent)(ctx.logger, events_js_1.SessionSummaryEvents.snarkyMessageStart({ sessionId }, { sessionId }));
|
|
76822
77312
|
try {
|
|
76823
77313
|
const response = await provider.complete({
|
|
76824
77314
|
messages: [{ role: "user", content: prompt }]
|
|
@@ -76829,6 +77319,7 @@ var require_on_demand_generation = __commonJS({
|
|
|
76829
77319
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
76830
77320
|
};
|
|
76831
77321
|
await summaryState.snarkyMessage.write(sessionId, snarkyState);
|
|
77322
|
+
(0, core_2.logEvent)(ctx.logger, events_js_1.SessionSummaryEvents.snarkyMessageFinish({ sessionId }, { generatedMessage: snarkyMessage }));
|
|
76832
77323
|
ctx.logger.info("Generated snarky message on-demand", {
|
|
76833
77324
|
sessionId,
|
|
76834
77325
|
personaId: persona?.id ?? "none"
|
|
@@ -77035,7 +77526,7 @@ var require_dist6 = __commonJS({
|
|
|
77035
77526
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
|
|
77036
77527
|
};
|
|
77037
77528
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
77038
|
-
exports2.SessionSummaryEvents = exports2.manifest = void 0;
|
|
77529
|
+
exports2.DecisionEvents = exports2.SessionSummaryEvents = exports2.manifest = void 0;
|
|
77039
77530
|
exports2.register = register;
|
|
77040
77531
|
var index_js_1 = require_handlers();
|
|
77041
77532
|
exports2.manifest = {
|
|
@@ -77052,11 +77543,14 @@ var require_dist6 = __commonJS({
|
|
|
77052
77543
|
exports2.default = feature;
|
|
77053
77544
|
__exportStar(require_types4(), exports2);
|
|
77054
77545
|
__exportStar(require_handlers(), exports2);
|
|
77055
|
-
__exportStar(
|
|
77546
|
+
__exportStar(require_state5(), exports2);
|
|
77056
77547
|
var events_js_1 = require_events3();
|
|
77057
77548
|
Object.defineProperty(exports2, "SessionSummaryEvents", { enumerable: true, get: function() {
|
|
77058
77549
|
return events_js_1.SessionSummaryEvents;
|
|
77059
77550
|
} });
|
|
77551
|
+
Object.defineProperty(exports2, "DecisionEvents", { enumerable: true, get: function() {
|
|
77552
|
+
return events_js_1.DecisionEvents;
|
|
77553
|
+
} });
|
|
77060
77554
|
}
|
|
77061
77555
|
});
|
|
77062
77556
|
|
|
@@ -79135,6 +79629,20 @@ var require_persona2 = __commonJS({
|
|
|
79135
79629
|
stdout.write(output + "\n");
|
|
79136
79630
|
return { exitCode, output };
|
|
79137
79631
|
}
|
|
79632
|
+
function validatePersonaExists(personaId, opts) {
|
|
79633
|
+
const personas = (0, core_1.discoverPersonas)({
|
|
79634
|
+
defaultPersonasDir: (0, core_1.getDefaultPersonasDir)(),
|
|
79635
|
+
projectRoot: opts.projectRoot,
|
|
79636
|
+
logger: opts.logger
|
|
79637
|
+
});
|
|
79638
|
+
if (!personas.has(personaId)) {
|
|
79639
|
+
const availableIds = Array.from(personas.keys()).join(", ");
|
|
79640
|
+
const errorMsg = `Persona "${personaId}" not found. Available: ${availableIds}`;
|
|
79641
|
+
opts.logger.error("Persona not found", { personaId, available: availableIds });
|
|
79642
|
+
return { result: writeJsonResponse(opts.stdout, { success: false, error: errorMsg }, 1) };
|
|
79643
|
+
}
|
|
79644
|
+
return { personas };
|
|
79645
|
+
}
|
|
79138
79646
|
function handlePersonaList(projectRoot, logger, stdout, options) {
|
|
79139
79647
|
const format3 = options.format ?? "json";
|
|
79140
79648
|
const tableWidth = options.width ?? 100;
|
|
@@ -79191,17 +79699,10 @@ var require_persona2 = __commonJS({
|
|
|
79191
79699
|
return { exitCode: 1, output: error };
|
|
79192
79700
|
}
|
|
79193
79701
|
logger.info("Setting persona", { personaId, sessionId });
|
|
79194
|
-
const
|
|
79195
|
-
|
|
79196
|
-
|
|
79197
|
-
|
|
79198
|
-
});
|
|
79199
|
-
if (!personas.has(personaId)) {
|
|
79200
|
-
const availableIds = Array.from(personas.keys()).join(", ");
|
|
79201
|
-
const errorMsg = `Persona "${personaId}" not found. Available: ${availableIds}`;
|
|
79202
|
-
logger.error("Persona not found", { personaId, available: availableIds });
|
|
79203
|
-
return writeJsonResponse(stdout, { success: false, error: errorMsg }, 1);
|
|
79204
|
-
}
|
|
79702
|
+
const validation = validatePersonaExists(personaId, { projectRoot, logger, stdout });
|
|
79703
|
+
if (validation.result)
|
|
79704
|
+
return validation.result;
|
|
79705
|
+
const personas = validation.personas;
|
|
79205
79706
|
const stateService = new core_1.StateService(projectRoot, { cache: false, logger });
|
|
79206
79707
|
const personaAccessor = new core_1.SessionStateAccessor(stateService, SessionPersonaDescriptor);
|
|
79207
79708
|
try {
|
|
@@ -79213,10 +79714,16 @@ var require_persona2 = __commonJS({
|
|
|
79213
79714
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
79214
79715
|
};
|
|
79215
79716
|
await personaAccessor.write(sessionId, newState);
|
|
79717
|
+
const personaFilePath = stateService.sessionStatePath(sessionId, "session-persona.json");
|
|
79216
79718
|
if (previousPersonaId) {
|
|
79217
|
-
logger.info("
|
|
79719
|
+
logger.info("[persona-lifecycle] PersonaSet: persona changed", {
|
|
79720
|
+
sessionId,
|
|
79721
|
+
from: previousPersonaId,
|
|
79722
|
+
to: personaId,
|
|
79723
|
+
filePath: personaFilePath
|
|
79724
|
+
});
|
|
79218
79725
|
} else {
|
|
79219
|
-
logger.info("
|
|
79726
|
+
logger.info("[persona-lifecycle] PersonaSet: persona set", { sessionId, personaId, filePath: personaFilePath });
|
|
79220
79727
|
}
|
|
79221
79728
|
return writeJsonResponse(stdout, { success: true, personaId, previousPersonaId }, 0);
|
|
79222
79729
|
} catch (err) {
|
|
@@ -79299,17 +79806,9 @@ var require_persona2 = __commonJS({
|
|
|
79299
79806
|
function handlePersonaPin(personaId, projectRoot, logger, stdout, options) {
|
|
79300
79807
|
const scope = options.scope ?? "project";
|
|
79301
79808
|
logger.info("Pinning persona", { personaId, scope });
|
|
79302
|
-
const
|
|
79303
|
-
|
|
79304
|
-
|
|
79305
|
-
logger
|
|
79306
|
-
});
|
|
79307
|
-
if (!personas.has(personaId)) {
|
|
79308
|
-
const availableIds = Array.from(personas.keys()).join(", ");
|
|
79309
|
-
const errorMsg = `Persona "${personaId}" not found. Available: ${availableIds}`;
|
|
79310
|
-
logger.error("Persona not found", { personaId, available: availableIds });
|
|
79311
|
-
return writeJsonResponse(stdout, { success: false, error: errorMsg }, 1);
|
|
79312
|
-
}
|
|
79809
|
+
const validation = validatePersonaExists(personaId, { projectRoot, logger, stdout });
|
|
79810
|
+
if (validation.result)
|
|
79811
|
+
return validation.result;
|
|
79313
79812
|
try {
|
|
79314
79813
|
const result = (0, core_1.configSet)("features.session-summary.settings.personas.pinnedPersona", personaId, {
|
|
79315
79814
|
scope,
|
|
@@ -79354,7 +79853,7 @@ var require_persona2 = __commonJS({
|
|
|
79354
79853
|
return writeJsonResponse(stdout, { success: false, error: errorMsg }, 1);
|
|
79355
79854
|
}
|
|
79356
79855
|
}
|
|
79357
|
-
function showPersonaHelp(stdout) {
|
|
79856
|
+
function showPersonaHelp(stdout, exitCode = 0) {
|
|
79358
79857
|
stdout.write(`Usage: sidekick persona <subcommand> [options]
|
|
79359
79858
|
|
|
79360
79859
|
Subcommands:
|
|
@@ -79383,7 +79882,7 @@ Examples:
|
|
|
79383
79882
|
sidekick persona clear --session-id=abc123
|
|
79384
79883
|
sidekick persona test skippy --session-id=abc123 --type=snarky
|
|
79385
79884
|
`);
|
|
79386
|
-
return { exitCode
|
|
79885
|
+
return { exitCode, output: "" };
|
|
79387
79886
|
}
|
|
79388
79887
|
async function handlePersonaCommand(subcommand, args, projectRoot, logger, stdout, options) {
|
|
79389
79888
|
const personaId = args[0];
|
|
@@ -79424,12 +79923,12 @@ Examples:
|
|
|
79424
79923
|
return showPersonaHelp(stdout);
|
|
79425
79924
|
case void 0:
|
|
79426
79925
|
stdout.write("Error: persona command requires a subcommand\n\n");
|
|
79427
|
-
return showPersonaHelp(stdout);
|
|
79926
|
+
return showPersonaHelp(stdout, 1);
|
|
79428
79927
|
default:
|
|
79429
79928
|
stdout.write(`Error: Unknown persona subcommand: ${subcommand}
|
|
79430
79929
|
|
|
79431
79930
|
`);
|
|
79432
|
-
return showPersonaHelp(stdout);
|
|
79931
|
+
return showPersonaHelp(stdout, 1);
|
|
79433
79932
|
}
|
|
79434
79933
|
}
|
|
79435
79934
|
}
|
|
@@ -83041,7 +83540,7 @@ var require_cli = __commonJS({
|
|
|
83041
83540
|
var promises_12 = require("node:fs/promises");
|
|
83042
83541
|
var node_stream_1 = require("node:stream");
|
|
83043
83542
|
var yargs_parser_1 = __importDefault2(require_build());
|
|
83044
|
-
var VERSION = true ? "0.1.
|
|
83543
|
+
var VERSION = true ? "0.1.9" : "dev";
|
|
83045
83544
|
var SANDBOX_ERROR_MESSAGE = `Error: Daemon commands cannot run in sandbox mode.
|
|
83046
83545
|
|
|
83047
83546
|
Claude Code's sandbox blocks Unix socket operations required for daemon IPC.
|
|
@@ -83537,6 +84036,7 @@ Run 'sidekick --help' for available options.
|
|
|
83537
84036
|
if (sessionId) {
|
|
83538
84037
|
await persistCliLogMetrics(runtime.stateService, sessionId, runtime.getLogCounts(), runtime.logger);
|
|
83539
84038
|
}
|
|
84039
|
+
await runtime.logger.flush();
|
|
83540
84040
|
return result;
|
|
83541
84041
|
}
|
|
83542
84042
|
}
|