@scotthamilton77/sidekick 0.1.5 → 0.1.7
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/features/reminders.defaults.yaml +6 -4
- package/assets/sidekick/defaults/features/statusline.defaults.yaml +26 -5
- package/assets/sidekick/personas/adama.yaml +50 -0
- package/assets/sidekick/personas/arnold.yaml +51 -0
- package/assets/sidekick/personas/arthur-dent.yaml +51 -0
- package/assets/sidekick/personas/borg-queen.yaml +51 -0
- package/assets/sidekick/personas/chandler.yaml +51 -0
- package/assets/sidekick/personas/freud.yaml +51 -0
- package/assets/sidekick/personas/gowron.yaml +51 -0
- package/assets/sidekick/personas/groucho.yaml +51 -0
- package/assets/sidekick/personas/joey.yaml +51 -0
- package/assets/sidekick/personas/monica.yaml +51 -0
- package/assets/sidekick/personas/phoebe.yaml +52 -0
- package/assets/sidekick/personas/q.yaml +51 -0
- package/assets/sidekick/personas/quark.yaml +50 -0
- package/assets/sidekick/personas/rachel.yaml +51 -0
- package/assets/sidekick/personas/ross.yaml +51 -0
- package/assets/sidekick/reminders/remember-your-persona.yaml +2 -1
- package/assets/sidekick/reminders/user-prompt-submit.yaml +1 -0
- package/dist/bin.js +521 -161
- package/dist/daemon.js +200 -83
- package/package.json +1 -1
package/dist/daemon.js
CHANGED
|
@@ -54,6 +54,7 @@ var require_events = __commonJS({
|
|
|
54
54
|
"../types/dist/events.js"(exports2) {
|
|
55
55
|
"use strict";
|
|
56
56
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
57
|
+
exports2.HOOK_NAMES = void 0;
|
|
57
58
|
exports2.isHookEvent = isHookEvent;
|
|
58
59
|
exports2.isTranscriptEvent = isTranscriptEvent;
|
|
59
60
|
exports2.isSessionStartEvent = isSessionStartEvent;
|
|
@@ -67,6 +68,15 @@ var require_events = __commonJS({
|
|
|
67
68
|
exports2.isCLILoggingEvent = isCLILoggingEvent;
|
|
68
69
|
exports2.isDaemonLoggingEvent = isDaemonLoggingEvent;
|
|
69
70
|
exports2.isTranscriptLoggingEvent = isTranscriptLoggingEvent;
|
|
71
|
+
exports2.HOOK_NAMES = [
|
|
72
|
+
"SessionStart",
|
|
73
|
+
"SessionEnd",
|
|
74
|
+
"UserPromptSubmit",
|
|
75
|
+
"PreToolUse",
|
|
76
|
+
"PostToolUse",
|
|
77
|
+
"Stop",
|
|
78
|
+
"PreCompact"
|
|
79
|
+
];
|
|
70
80
|
function isHookEvent(event) {
|
|
71
81
|
return event.kind === "hook";
|
|
72
82
|
}
|
|
@@ -16227,6 +16237,7 @@ var require_staging = __commonJS({
|
|
|
16227
16237
|
userMessage: zod_1.z.string().optional(),
|
|
16228
16238
|
additionalContext: zod_1.z.string().optional(),
|
|
16229
16239
|
reason: zod_1.z.string().optional(),
|
|
16240
|
+
throttle: zod_1.z.boolean().optional(),
|
|
16230
16241
|
stagedAt: exports2.StagingMetricsSchema.optional()
|
|
16231
16242
|
});
|
|
16232
16243
|
}
|
|
@@ -16237,9 +16248,10 @@ var require_state = __commonJS({
|
|
|
16237
16248
|
"../types/dist/services/state.js"(exports2) {
|
|
16238
16249
|
"use strict";
|
|
16239
16250
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
16240
|
-
exports2.DEFAULT_LATENCY_STATS = exports2.LLMMetricsStateSchema = exports2.LLMSessionTotalsSchema = exports2.LLMProviderMetricsSchema = exports2.LLMModelMetricsSchema = exports2.LLMLatencyStatsSchema = exports2.DEFAULT_PROJECT_METRICS = exports2.DEFAULT_BASE_METRICS = exports2.SessionContextMetricsSchema = exports2.ProjectContextMetricsSchema = exports2.BaseTokenMetricsStateSchema = exports2.
|
|
16251
|
+
exports2.DEFAULT_LATENCY_STATS = exports2.LLMMetricsStateSchema = exports2.LLMSessionTotalsSchema = exports2.LLMProviderMetricsSchema = exports2.LLMModelMetricsSchema = exports2.LLMLatencyStatsSchema = exports2.DEFAULT_PROJECT_METRICS = exports2.DEFAULT_BASE_METRICS = exports2.SessionContextMetricsSchema = exports2.ProjectContextMetricsSchema = exports2.BaseTokenMetricsStateSchema = exports2.ReminderThrottleStateSchema = exports2.ReminderThrottleEntrySchema = exports2.CachedReminderSchema = exports2.VerificationToolsStateSchema = exports2.VerificationToolStatusSchema = exports2.VCUnverifiedStateSchema = exports2.PRBaselineStateSchema = exports2.EMPTY_LOG_METRICS = exports2.LogMetricsStateSchema = exports2.TranscriptMetricsStateSchema = exports2.ResumeMessageStateSchema = exports2.SnarkyMessageStateSchema = exports2.SummaryCountdownStateSchema = exports2.LastStagedPersonaSchema = exports2.SessionPersonaStateSchema = exports2.SESSION_SUMMARY_PLACEHOLDERS = exports2.SessionSummaryStateSchema = void 0;
|
|
16241
16252
|
exports2.createDefaultLLMMetrics = createDefaultLLMMetrics;
|
|
16242
16253
|
var zod_1 = require_zod();
|
|
16254
|
+
var events_js_1 = require_events();
|
|
16243
16255
|
exports2.SessionSummaryStateSchema = zod_1.z.object({
|
|
16244
16256
|
/** Session identifier */
|
|
16245
16257
|
session_id: zod_1.z.string(),
|
|
@@ -16401,10 +16413,25 @@ var require_state = __commonJS({
|
|
|
16401
16413
|
lastMatchedScope: zod_1.z.enum(["project", "package", "file"]).nullable().optional()
|
|
16402
16414
|
});
|
|
16403
16415
|
exports2.VerificationToolsStateSchema = zod_1.z.record(zod_1.z.string(), exports2.VerificationToolStatusSchema);
|
|
16404
|
-
exports2.
|
|
16416
|
+
exports2.CachedReminderSchema = zod_1.z.object({
|
|
16417
|
+
name: zod_1.z.string(),
|
|
16418
|
+
blocking: zod_1.z.boolean(),
|
|
16419
|
+
priority: zod_1.z.number(),
|
|
16420
|
+
persistent: zod_1.z.boolean(),
|
|
16421
|
+
throttle: zod_1.z.boolean().optional(),
|
|
16422
|
+
userMessage: zod_1.z.string().optional(),
|
|
16423
|
+
additionalContext: zod_1.z.string().optional(),
|
|
16424
|
+
reason: zod_1.z.string().optional()
|
|
16425
|
+
});
|
|
16426
|
+
exports2.ReminderThrottleEntrySchema = zod_1.z.object({
|
|
16405
16427
|
/** Number of conversation messages since the reminder was last staged */
|
|
16406
|
-
messagesSinceLastStaging: zod_1.z.number()
|
|
16428
|
+
messagesSinceLastStaging: zod_1.z.number().int().nonnegative(),
|
|
16429
|
+
/** Hook to re-stage the reminder for */
|
|
16430
|
+
targetHook: zod_1.z.enum(events_js_1.HOOK_NAMES),
|
|
16431
|
+
/** Cached resolved reminder content for re-staging */
|
|
16432
|
+
cachedReminder: exports2.CachedReminderSchema
|
|
16407
16433
|
});
|
|
16434
|
+
exports2.ReminderThrottleStateSchema = zod_1.z.record(zod_1.z.string(), exports2.ReminderThrottleEntrySchema);
|
|
16408
16435
|
exports2.BaseTokenMetricsStateSchema = zod_1.z.object({
|
|
16409
16436
|
/** System prompt tokens (~3.2k) */
|
|
16410
16437
|
systemPromptTokens: zod_1.z.number(),
|
|
@@ -69802,6 +69829,7 @@ var require_reminder_utils = __commonJS({
|
|
|
69802
69829
|
blocking: zod_1.z.boolean(),
|
|
69803
69830
|
priority: zod_1.z.number(),
|
|
69804
69831
|
persistent: zod_1.z.boolean(),
|
|
69832
|
+
throttle: zod_1.z.boolean().optional(),
|
|
69805
69833
|
userMessage: zod_1.z.string().optional(),
|
|
69806
69834
|
additionalContext: zod_1.z.string().optional(),
|
|
69807
69835
|
reason: zod_1.z.string().optional()
|
|
@@ -69852,6 +69880,7 @@ var require_reminder_utils = __commonJS({
|
|
|
69852
69880
|
blocking: def.blocking,
|
|
69853
69881
|
priority: def.priority,
|
|
69854
69882
|
persistent: def.persistent,
|
|
69883
|
+
throttle: def.throttle,
|
|
69855
69884
|
userMessage: def.userMessage ? interpolateTemplate(def.userMessage, context) : void 0,
|
|
69856
69885
|
additionalContext: def.additionalContext ? interpolateTemplate(def.additionalContext, context) : void 0,
|
|
69857
69886
|
reason: def.reason ? interpolateTemplate(def.reason, context) : void 0
|
|
@@ -70148,7 +70177,10 @@ var require_types2 = __commonJS({
|
|
|
70148
70177
|
max_verification_cycles: -1,
|
|
70149
70178
|
// -1 = unlimited, 0 = disabled
|
|
70150
70179
|
verification_tools: exports2.DEFAULT_VERIFICATION_TOOLS,
|
|
70151
|
-
|
|
70180
|
+
reminder_thresholds: {
|
|
70181
|
+
"user-prompt-submit": 10,
|
|
70182
|
+
"remember-your-persona": 5
|
|
70183
|
+
}
|
|
70152
70184
|
};
|
|
70153
70185
|
exports2.ReminderIds = {
|
|
70154
70186
|
USER_PROMPT_SUBMIT: "user-prompt-submit",
|
|
@@ -70192,8 +70224,8 @@ var require_state3 = __commonJS({
|
|
|
70192
70224
|
defaultValue: {},
|
|
70193
70225
|
trackHistory: false
|
|
70194
70226
|
});
|
|
70195
|
-
var
|
|
70196
|
-
defaultValue: {
|
|
70227
|
+
var ReminderThrottleDescriptor = (0, core_1.sessionState)("reminder-throttle.json", types_1.ReminderThrottleStateSchema, {
|
|
70228
|
+
defaultValue: {},
|
|
70197
70229
|
trackHistory: false
|
|
70198
70230
|
});
|
|
70199
70231
|
function createRemindersState(stateService) {
|
|
@@ -70201,8 +70233,40 @@ var require_state3 = __commonJS({
|
|
|
70201
70233
|
prBaseline: new core_1.SessionStateAccessor(stateService, PRBaselineDescriptor),
|
|
70202
70234
|
vcUnverified: new core_1.SessionStateAccessor(stateService, VCUnverifiedDescriptor),
|
|
70203
70235
|
verificationTools: new core_1.SessionStateAccessor(stateService, VerificationToolsDescriptor),
|
|
70204
|
-
|
|
70236
|
+
reminderThrottle: new core_1.SessionStateAccessor(stateService, ReminderThrottleDescriptor)
|
|
70237
|
+
};
|
|
70238
|
+
}
|
|
70239
|
+
}
|
|
70240
|
+
});
|
|
70241
|
+
|
|
70242
|
+
// ../feature-reminders/dist/handlers/staging/throttle-utils.js
|
|
70243
|
+
var require_throttle_utils = __commonJS({
|
|
70244
|
+
"../feature-reminders/dist/handlers/staging/throttle-utils.js"(exports2) {
|
|
70245
|
+
"use strict";
|
|
70246
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
70247
|
+
exports2.registerThrottledReminder = registerThrottledReminder;
|
|
70248
|
+
exports2.resetThrottleCounters = resetThrottleCounters;
|
|
70249
|
+
var state_js_1 = require_state3();
|
|
70250
|
+
async function registerThrottledReminder(ctx, sessionId, reminderId, targetHook, resolvedReminder) {
|
|
70251
|
+
const remindersState = (0, state_js_1.createRemindersState)(ctx.stateService);
|
|
70252
|
+
const result = await remindersState.reminderThrottle.read(sessionId);
|
|
70253
|
+
const state = { ...result.data };
|
|
70254
|
+
const { stagedAt: _stagedAt, ...cachedReminder } = resolvedReminder;
|
|
70255
|
+
state[reminderId] = {
|
|
70256
|
+
messagesSinceLastStaging: 0,
|
|
70257
|
+
targetHook,
|
|
70258
|
+
cachedReminder
|
|
70205
70259
|
};
|
|
70260
|
+
await remindersState.reminderThrottle.write(sessionId, state);
|
|
70261
|
+
}
|
|
70262
|
+
async function resetThrottleCounters(ctx, sessionId) {
|
|
70263
|
+
const remindersState = (0, state_js_1.createRemindersState)(ctx.stateService);
|
|
70264
|
+
const result = await remindersState.reminderThrottle.read(sessionId);
|
|
70265
|
+
const state = { ...result.data };
|
|
70266
|
+
for (const key of Object.keys(state)) {
|
|
70267
|
+
state[key] = { ...state[key], messagesSinceLastStaging: 0 };
|
|
70268
|
+
}
|
|
70269
|
+
await remindersState.reminderThrottle.write(sessionId, state);
|
|
70206
70270
|
}
|
|
70207
70271
|
}
|
|
70208
70272
|
});
|
|
@@ -70218,6 +70282,7 @@ var require_stage_default_user_prompt = __commonJS({
|
|
|
70218
70282
|
var types_js_1 = require_types2();
|
|
70219
70283
|
var reminder_utils_js_1 = require_reminder_utils();
|
|
70220
70284
|
var state_js_1 = require_state3();
|
|
70285
|
+
var throttle_utils_js_1 = require_throttle_utils();
|
|
70221
70286
|
function registerStageDefaultUserPrompt(context) {
|
|
70222
70287
|
(0, staging_handler_utils_js_1.createStagingHandler)(context, {
|
|
70223
70288
|
id: "reminders:stage-default-user-prompt",
|
|
@@ -70235,23 +70300,6 @@ var require_stage_default_user_prompt = __commonJS({
|
|
|
70235
70300
|
};
|
|
70236
70301
|
}
|
|
70237
70302
|
});
|
|
70238
|
-
if ((0, types_1.isDaemonContext)(context)) {
|
|
70239
|
-
const startCtx = context;
|
|
70240
|
-
context.handlers.register({
|
|
70241
|
-
id: "reminders:ups-throttle-reset-session-start",
|
|
70242
|
-
priority: 49,
|
|
70243
|
-
filter: { kind: "hook", hooks: ["SessionStart"] },
|
|
70244
|
-
handler: async (event) => {
|
|
70245
|
-
if (!(0, types_1.isHookEvent)(event) || !(0, types_1.isSessionStartEvent)(event))
|
|
70246
|
-
return;
|
|
70247
|
-
const sessionId = event.context.sessionId;
|
|
70248
|
-
if (!sessionId)
|
|
70249
|
-
return;
|
|
70250
|
-
const remindersState = (0, state_js_1.createRemindersState)(startCtx.stateService);
|
|
70251
|
-
await remindersState.upsThrottle.write(sessionId, { messagesSinceLastStaging: 0 });
|
|
70252
|
-
}
|
|
70253
|
-
});
|
|
70254
|
-
}
|
|
70255
70303
|
(0, staging_handler_utils_js_1.createStagingHandler)(context, {
|
|
70256
70304
|
id: "reminders:stage-default-user-prompt-after-bulk",
|
|
70257
70305
|
priority: 50,
|
|
@@ -70268,65 +70316,120 @@ var require_stage_default_user_prompt = __commonJS({
|
|
|
70268
70316
|
};
|
|
70269
70317
|
}
|
|
70270
70318
|
});
|
|
70271
|
-
if ((0, types_1.isDaemonContext)(context)) {
|
|
70272
|
-
const bulkCtx = context;
|
|
70273
|
-
context.handlers.register({
|
|
70274
|
-
id: "reminders:ups-throttle-reset-bulk",
|
|
70275
|
-
priority: 49,
|
|
70276
|
-
filter: { kind: "transcript", eventTypes: ["BulkProcessingComplete"] },
|
|
70277
|
-
handler: async (event) => {
|
|
70278
|
-
if (!(0, types_1.isTranscriptEvent)(event))
|
|
70279
|
-
return;
|
|
70280
|
-
if (event.metadata.isBulkProcessing)
|
|
70281
|
-
return;
|
|
70282
|
-
const sessionId = event.context?.sessionId;
|
|
70283
|
-
if (!sessionId)
|
|
70284
|
-
return;
|
|
70285
|
-
const remindersState = (0, state_js_1.createRemindersState)(bulkCtx.stateService);
|
|
70286
|
-
await remindersState.upsThrottle.write(sessionId, { messagesSinceLastStaging: 0 });
|
|
70287
|
-
}
|
|
70288
|
-
});
|
|
70289
|
-
}
|
|
70290
70319
|
if (!(0, types_1.isDaemonContext)(context))
|
|
70291
70320
|
return;
|
|
70292
70321
|
context.handlers.register({
|
|
70293
|
-
id: "reminders:ups-
|
|
70294
|
-
priority:
|
|
70295
|
-
filter: { kind: "
|
|
70322
|
+
id: "reminders:throttle-register-ups-session-start",
|
|
70323
|
+
priority: 49,
|
|
70324
|
+
filter: { kind: "hook", hooks: ["SessionStart"] },
|
|
70296
70325
|
handler: async (event, ctx) => {
|
|
70297
|
-
if (!(0, types_1.
|
|
70326
|
+
if (!(0, types_1.isHookEvent)(event) || !(0, types_1.isSessionStartEvent)(event))
|
|
70327
|
+
return;
|
|
70328
|
+
if (!(0, types_1.isDaemonContext)(ctx))
|
|
70329
|
+
return;
|
|
70330
|
+
const handlerCtx = ctx;
|
|
70331
|
+
const sessionId = event.context.sessionId;
|
|
70332
|
+
if (!sessionId)
|
|
70333
|
+
return;
|
|
70334
|
+
const reminder = (0, reminder_utils_js_1.resolveReminder)(types_js_1.ReminderIds.USER_PROMPT_SUBMIT, {
|
|
70335
|
+
context: { sessionId },
|
|
70336
|
+
assets: handlerCtx.assets
|
|
70337
|
+
});
|
|
70338
|
+
if (reminder) {
|
|
70339
|
+
await (0, throttle_utils_js_1.registerThrottledReminder)(handlerCtx, sessionId, types_js_1.ReminderIds.USER_PROMPT_SUBMIT, "UserPromptSubmit", reminder);
|
|
70340
|
+
}
|
|
70341
|
+
}
|
|
70342
|
+
});
|
|
70343
|
+
context.handlers.register({
|
|
70344
|
+
id: "reminders:throttle-reset-session-start",
|
|
70345
|
+
priority: 48,
|
|
70346
|
+
filter: { kind: "hook", hooks: ["SessionStart"] },
|
|
70347
|
+
handler: async (event, ctx) => {
|
|
70348
|
+
if (!(0, types_1.isHookEvent)(event) || !(0, types_1.isSessionStartEvent)(event))
|
|
70298
70349
|
return;
|
|
70299
70350
|
if (!(0, types_1.isDaemonContext)(ctx))
|
|
70300
70351
|
return;
|
|
70352
|
+
const handlerCtx = ctx;
|
|
70353
|
+
const sessionId = event.context.sessionId;
|
|
70354
|
+
if (!sessionId)
|
|
70355
|
+
return;
|
|
70356
|
+
await (0, throttle_utils_js_1.resetThrottleCounters)(handlerCtx, sessionId);
|
|
70357
|
+
}
|
|
70358
|
+
});
|
|
70359
|
+
context.handlers.register({
|
|
70360
|
+
id: "reminders:throttle-reset-bulk",
|
|
70361
|
+
priority: 49,
|
|
70362
|
+
filter: { kind: "transcript", eventTypes: ["BulkProcessingComplete"] },
|
|
70363
|
+
handler: async (event, ctx) => {
|
|
70364
|
+
if (!(0, types_1.isTranscriptEvent)(event))
|
|
70365
|
+
return;
|
|
70301
70366
|
if (event.metadata.isBulkProcessing)
|
|
70302
70367
|
return;
|
|
70368
|
+
if (!(0, types_1.isDaemonContext)(ctx))
|
|
70369
|
+
return;
|
|
70370
|
+
const handlerCtx = ctx;
|
|
70303
70371
|
const sessionId = event.context?.sessionId;
|
|
70304
70372
|
if (!sessionId)
|
|
70305
70373
|
return;
|
|
70374
|
+
await (0, throttle_utils_js_1.resetThrottleCounters)(handlerCtx, sessionId);
|
|
70375
|
+
}
|
|
70376
|
+
});
|
|
70377
|
+
context.handlers.register({
|
|
70378
|
+
id: "reminders:throttle-restage",
|
|
70379
|
+
priority: 50,
|
|
70380
|
+
filter: { kind: "transcript", eventTypes: ["UserPrompt", "AssistantMessage"] },
|
|
70381
|
+
handler: async (event, ctx) => {
|
|
70382
|
+
if (!(0, types_1.isTranscriptEvent)(event))
|
|
70383
|
+
return;
|
|
70384
|
+
if (event.metadata.isBulkProcessing)
|
|
70385
|
+
return;
|
|
70386
|
+
if (!(0, types_1.isDaemonContext)(ctx))
|
|
70387
|
+
return;
|
|
70306
70388
|
const handlerCtx = ctx;
|
|
70389
|
+
const sessionId = event.context?.sessionId;
|
|
70390
|
+
if (!sessionId)
|
|
70391
|
+
return;
|
|
70307
70392
|
const remindersState = (0, state_js_1.createRemindersState)(handlerCtx.stateService);
|
|
70308
|
-
const result = await remindersState.
|
|
70309
|
-
const
|
|
70393
|
+
const result = await remindersState.reminderThrottle.read(sessionId);
|
|
70394
|
+
const state = { ...result.data };
|
|
70395
|
+
if (Object.keys(state).length === 0)
|
|
70396
|
+
return;
|
|
70310
70397
|
const featureConfig = handlerCtx.config.getFeature("reminders");
|
|
70311
70398
|
const config = { ...types_js_1.DEFAULT_REMINDERS_SETTINGS, ...featureConfig.settings };
|
|
70312
|
-
const
|
|
70313
|
-
|
|
70314
|
-
|
|
70315
|
-
const
|
|
70316
|
-
|
|
70317
|
-
|
|
70318
|
-
|
|
70319
|
-
|
|
70320
|
-
|
|
70321
|
-
|
|
70399
|
+
const thresholds = config.reminder_thresholds ?? {};
|
|
70400
|
+
let changed = false;
|
|
70401
|
+
for (const [reminderId, entry] of Object.entries(state)) {
|
|
70402
|
+
const typedEntry = entry;
|
|
70403
|
+
const threshold = thresholds[reminderId];
|
|
70404
|
+
if (threshold === void 0)
|
|
70405
|
+
continue;
|
|
70406
|
+
const newCount = typedEntry.messagesSinceLastStaging + 1;
|
|
70407
|
+
if (newCount >= threshold) {
|
|
70408
|
+
const metrics = event.metadata.metrics;
|
|
70409
|
+
const stagedAt = {
|
|
70410
|
+
timestamp: Date.now(),
|
|
70411
|
+
turnCount: metrics.turnCount,
|
|
70412
|
+
toolsThisTurn: metrics.toolsThisTurn,
|
|
70413
|
+
toolCount: metrics.toolCount
|
|
70414
|
+
};
|
|
70415
|
+
await (0, reminder_utils_js_1.stageReminder)(handlerCtx, typedEntry.targetHook, {
|
|
70416
|
+
...typedEntry.cachedReminder,
|
|
70417
|
+
stagedAt
|
|
70418
|
+
});
|
|
70419
|
+
state[reminderId] = { ...typedEntry, messagesSinceLastStaging: 0 };
|
|
70420
|
+
handlerCtx.logger.debug("Throttle: re-staged reminder", {
|
|
70322
70421
|
sessionId,
|
|
70422
|
+
reminderId,
|
|
70323
70423
|
messageCount: newCount,
|
|
70324
70424
|
threshold
|
|
70325
70425
|
});
|
|
70426
|
+
} else {
|
|
70427
|
+
state[reminderId] = { ...typedEntry, messagesSinceLastStaging: newCount };
|
|
70326
70428
|
}
|
|
70327
|
-
|
|
70328
|
-
}
|
|
70329
|
-
|
|
70429
|
+
changed = true;
|
|
70430
|
+
}
|
|
70431
|
+
if (changed) {
|
|
70432
|
+
await remindersState.reminderThrottle.write(sessionId, state);
|
|
70330
70433
|
}
|
|
70331
70434
|
}
|
|
70332
70435
|
});
|
|
@@ -72029,27 +72132,33 @@ var require_track_verification_tools = __commonJS({
|
|
|
72029
72132
|
continue;
|
|
72030
72133
|
const current = toolsState[toolName];
|
|
72031
72134
|
if (!current || current.status === "staged") {
|
|
72032
|
-
|
|
72033
|
-
|
|
72034
|
-
|
|
72035
|
-
|
|
72036
|
-
|
|
72037
|
-
|
|
72038
|
-
|
|
72135
|
+
const staged = await ensureToolReminderStaged(daemonCtx, reminderId, stagedNames);
|
|
72136
|
+
if (staged) {
|
|
72137
|
+
if (!current) {
|
|
72138
|
+
toolsState[toolName] = {
|
|
72139
|
+
status: "staged",
|
|
72140
|
+
editsSinceVerified: 0,
|
|
72141
|
+
lastVerifiedAt: null,
|
|
72142
|
+
lastStagedAt: Date.now()
|
|
72143
|
+
};
|
|
72144
|
+
}
|
|
72145
|
+
stagedNames.add(reminderId);
|
|
72146
|
+
anyStaged = true;
|
|
72039
72147
|
}
|
|
72040
|
-
await stageToolReminderIfNeeded(daemonCtx, reminderId, stagedNames);
|
|
72041
|
-
anyStaged = true;
|
|
72042
72148
|
} else {
|
|
72043
72149
|
const newEdits = current.editsSinceVerified + 1;
|
|
72044
72150
|
if (newEdits >= toolConfig.clearing_threshold) {
|
|
72045
|
-
|
|
72046
|
-
|
|
72047
|
-
|
|
72048
|
-
|
|
72049
|
-
|
|
72050
|
-
|
|
72051
|
-
|
|
72052
|
-
|
|
72151
|
+
const staged = await ensureToolReminderStaged(daemonCtx, reminderId, stagedNames);
|
|
72152
|
+
if (staged) {
|
|
72153
|
+
toolsState[toolName] = {
|
|
72154
|
+
...current,
|
|
72155
|
+
status: "staged",
|
|
72156
|
+
editsSinceVerified: 0,
|
|
72157
|
+
lastStagedAt: Date.now()
|
|
72158
|
+
};
|
|
72159
|
+
stagedNames.add(reminderId);
|
|
72160
|
+
anyStaged = true;
|
|
72161
|
+
}
|
|
72053
72162
|
} else {
|
|
72054
72163
|
toolsState[toolName] = {
|
|
72055
72164
|
...current,
|
|
@@ -72061,7 +72170,10 @@ var require_track_verification_tools = __commonJS({
|
|
|
72061
72170
|
}
|
|
72062
72171
|
}
|
|
72063
72172
|
if (anyStaged) {
|
|
72064
|
-
await
|
|
72173
|
+
const wrapperStaged = await ensureToolReminderStaged(daemonCtx, types_js_1.ReminderIds.VERIFY_COMPLETION, stagedNames);
|
|
72174
|
+
if (!wrapperStaged) {
|
|
72175
|
+
daemonCtx.logger.warn("Failed to stage verify-completion wrapper reminder", { sessionId });
|
|
72176
|
+
}
|
|
72065
72177
|
}
|
|
72066
72178
|
await remindersState.verificationTools.write(sessionId, toolsState);
|
|
72067
72179
|
return anyStaged;
|
|
@@ -72117,21 +72229,22 @@ var require_track_verification_tools = __commonJS({
|
|
|
72117
72229
|
await remindersState.verificationTools.write(sessionId, toolsState);
|
|
72118
72230
|
}
|
|
72119
72231
|
}
|
|
72120
|
-
async function
|
|
72232
|
+
async function ensureToolReminderStaged(daemonCtx, reminderId, stagedNames) {
|
|
72121
72233
|
if (stagedNames.has(reminderId))
|
|
72122
|
-
return;
|
|
72234
|
+
return true;
|
|
72123
72235
|
const reminder = (0, reminder_utils_js_1.resolveReminder)(reminderId, {
|
|
72124
72236
|
context: {},
|
|
72125
72237
|
assets: daemonCtx.assets
|
|
72126
72238
|
});
|
|
72127
72239
|
if (!reminder) {
|
|
72128
72240
|
daemonCtx.logger.warn("Failed to resolve VC tool reminder", { reminderId });
|
|
72129
|
-
return;
|
|
72241
|
+
return false;
|
|
72130
72242
|
}
|
|
72131
72243
|
await (0, reminder_utils_js_1.stageReminder)(daemonCtx, "Stop", {
|
|
72132
72244
|
...reminder,
|
|
72133
72245
|
stagedAt: { timestamp: Date.now(), turnCount: 0, toolsThisTurn: 0, toolCount: 0 }
|
|
72134
72246
|
});
|
|
72247
|
+
return true;
|
|
72135
72248
|
}
|
|
72136
72249
|
}
|
|
72137
72250
|
});
|
|
@@ -72386,6 +72499,7 @@ var require_stage_persona_reminders = __commonJS({
|
|
|
72386
72499
|
var types_1 = require_dist();
|
|
72387
72500
|
var reminder_utils_js_1 = require_reminder_utils();
|
|
72388
72501
|
var types_js_1 = require_types2();
|
|
72502
|
+
var throttle_utils_js_1 = require_throttle_utils();
|
|
72389
72503
|
async function restagePersonaRemindersForActiveSessions(ctxFactory, sessionIds, logger) {
|
|
72390
72504
|
logger.info("Re-staging persona reminders for active sessions", { count: sessionIds.length });
|
|
72391
72505
|
for (const sessionId of sessionIds) {
|
|
@@ -72468,6 +72582,9 @@ var require_stage_persona_reminders = __commonJS({
|
|
|
72468
72582
|
if (reminder) {
|
|
72469
72583
|
for (const targetHook of PERSONA_REMINDER_HOOKS) {
|
|
72470
72584
|
await (0, reminder_utils_js_1.stageReminder)(ctx, targetHook, reminder);
|
|
72585
|
+
if (targetHook === "UserPromptSubmit") {
|
|
72586
|
+
await (0, throttle_utils_js_1.registerThrottledReminder)(ctx, sessionId, types_js_1.ReminderIds.REMEMBER_YOUR_PERSONA, "UserPromptSubmit", reminder);
|
|
72587
|
+
}
|
|
72471
72588
|
}
|
|
72472
72589
|
} else {
|
|
72473
72590
|
ctx.logger.warn("Failed to resolve persona reminder", {
|