@scotthamilton77/sidekick 0.1.5 → 0.1.6
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/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 +195 -88
- package/dist/daemon.js +194 -87
- 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(),
|
|
@@ -55901,7 +55928,8 @@ var require_gitignore = __commonJS({
|
|
|
55901
55928
|
".sidekick/.env.local",
|
|
55902
55929
|
".sidekick/sidekick*.pid",
|
|
55903
55930
|
".sidekick/sidekick*.token",
|
|
55904
|
-
".sidekick/*.local.yaml"
|
|
55931
|
+
".sidekick/*.local.yaml",
|
|
55932
|
+
".sidekick/features.yaml"
|
|
55905
55933
|
];
|
|
55906
55934
|
async function installGitignoreSection(projectDir2) {
|
|
55907
55935
|
const gitignorePath = path.join(projectDir2, ".gitignore");
|
|
@@ -69802,6 +69830,7 @@ var require_reminder_utils = __commonJS({
|
|
|
69802
69830
|
blocking: zod_1.z.boolean(),
|
|
69803
69831
|
priority: zod_1.z.number(),
|
|
69804
69832
|
persistent: zod_1.z.boolean(),
|
|
69833
|
+
throttle: zod_1.z.boolean().optional(),
|
|
69805
69834
|
userMessage: zod_1.z.string().optional(),
|
|
69806
69835
|
additionalContext: zod_1.z.string().optional(),
|
|
69807
69836
|
reason: zod_1.z.string().optional()
|
|
@@ -69852,6 +69881,7 @@ var require_reminder_utils = __commonJS({
|
|
|
69852
69881
|
blocking: def.blocking,
|
|
69853
69882
|
priority: def.priority,
|
|
69854
69883
|
persistent: def.persistent,
|
|
69884
|
+
throttle: def.throttle,
|
|
69855
69885
|
userMessage: def.userMessage ? interpolateTemplate(def.userMessage, context) : void 0,
|
|
69856
69886
|
additionalContext: def.additionalContext ? interpolateTemplate(def.additionalContext, context) : void 0,
|
|
69857
69887
|
reason: def.reason ? interpolateTemplate(def.reason, context) : void 0
|
|
@@ -70148,7 +70178,10 @@ var require_types2 = __commonJS({
|
|
|
70148
70178
|
max_verification_cycles: -1,
|
|
70149
70179
|
// -1 = unlimited, 0 = disabled
|
|
70150
70180
|
verification_tools: exports2.DEFAULT_VERIFICATION_TOOLS,
|
|
70151
|
-
|
|
70181
|
+
reminder_thresholds: {
|
|
70182
|
+
"user-prompt-submit": 10,
|
|
70183
|
+
"remember-your-persona": 5
|
|
70184
|
+
}
|
|
70152
70185
|
};
|
|
70153
70186
|
exports2.ReminderIds = {
|
|
70154
70187
|
USER_PROMPT_SUBMIT: "user-prompt-submit",
|
|
@@ -70192,8 +70225,8 @@ var require_state3 = __commonJS({
|
|
|
70192
70225
|
defaultValue: {},
|
|
70193
70226
|
trackHistory: false
|
|
70194
70227
|
});
|
|
70195
|
-
var
|
|
70196
|
-
defaultValue: {
|
|
70228
|
+
var ReminderThrottleDescriptor = (0, core_1.sessionState)("reminder-throttle.json", types_1.ReminderThrottleStateSchema, {
|
|
70229
|
+
defaultValue: {},
|
|
70197
70230
|
trackHistory: false
|
|
70198
70231
|
});
|
|
70199
70232
|
function createRemindersState(stateService) {
|
|
@@ -70201,12 +70234,44 @@ var require_state3 = __commonJS({
|
|
|
70201
70234
|
prBaseline: new core_1.SessionStateAccessor(stateService, PRBaselineDescriptor),
|
|
70202
70235
|
vcUnverified: new core_1.SessionStateAccessor(stateService, VCUnverifiedDescriptor),
|
|
70203
70236
|
verificationTools: new core_1.SessionStateAccessor(stateService, VerificationToolsDescriptor),
|
|
70204
|
-
|
|
70237
|
+
reminderThrottle: new core_1.SessionStateAccessor(stateService, ReminderThrottleDescriptor)
|
|
70205
70238
|
};
|
|
70206
70239
|
}
|
|
70207
70240
|
}
|
|
70208
70241
|
});
|
|
70209
70242
|
|
|
70243
|
+
// ../feature-reminders/dist/handlers/staging/throttle-utils.js
|
|
70244
|
+
var require_throttle_utils = __commonJS({
|
|
70245
|
+
"../feature-reminders/dist/handlers/staging/throttle-utils.js"(exports2) {
|
|
70246
|
+
"use strict";
|
|
70247
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
70248
|
+
exports2.registerThrottledReminder = registerThrottledReminder;
|
|
70249
|
+
exports2.resetThrottleCounters = resetThrottleCounters;
|
|
70250
|
+
var state_js_1 = require_state3();
|
|
70251
|
+
async function registerThrottledReminder(ctx, sessionId, reminderId, targetHook, resolvedReminder) {
|
|
70252
|
+
const remindersState = (0, state_js_1.createRemindersState)(ctx.stateService);
|
|
70253
|
+
const result = await remindersState.reminderThrottle.read(sessionId);
|
|
70254
|
+
const state = { ...result.data };
|
|
70255
|
+
const { stagedAt: _stagedAt, ...cachedReminder } = resolvedReminder;
|
|
70256
|
+
state[reminderId] = {
|
|
70257
|
+
messagesSinceLastStaging: 0,
|
|
70258
|
+
targetHook,
|
|
70259
|
+
cachedReminder
|
|
70260
|
+
};
|
|
70261
|
+
await remindersState.reminderThrottle.write(sessionId, state);
|
|
70262
|
+
}
|
|
70263
|
+
async function resetThrottleCounters(ctx, sessionId) {
|
|
70264
|
+
const remindersState = (0, state_js_1.createRemindersState)(ctx.stateService);
|
|
70265
|
+
const result = await remindersState.reminderThrottle.read(sessionId);
|
|
70266
|
+
const state = { ...result.data };
|
|
70267
|
+
for (const key of Object.keys(state)) {
|
|
70268
|
+
state[key] = { ...state[key], messagesSinceLastStaging: 0 };
|
|
70269
|
+
}
|
|
70270
|
+
await remindersState.reminderThrottle.write(sessionId, state);
|
|
70271
|
+
}
|
|
70272
|
+
}
|
|
70273
|
+
});
|
|
70274
|
+
|
|
70210
70275
|
// ../feature-reminders/dist/handlers/staging/stage-default-user-prompt.js
|
|
70211
70276
|
var require_stage_default_user_prompt = __commonJS({
|
|
70212
70277
|
"../feature-reminders/dist/handlers/staging/stage-default-user-prompt.js"(exports2) {
|
|
@@ -70218,6 +70283,7 @@ var require_stage_default_user_prompt = __commonJS({
|
|
|
70218
70283
|
var types_js_1 = require_types2();
|
|
70219
70284
|
var reminder_utils_js_1 = require_reminder_utils();
|
|
70220
70285
|
var state_js_1 = require_state3();
|
|
70286
|
+
var throttle_utils_js_1 = require_throttle_utils();
|
|
70221
70287
|
function registerStageDefaultUserPrompt(context) {
|
|
70222
70288
|
(0, staging_handler_utils_js_1.createStagingHandler)(context, {
|
|
70223
70289
|
id: "reminders:stage-default-user-prompt",
|
|
@@ -70235,23 +70301,6 @@ var require_stage_default_user_prompt = __commonJS({
|
|
|
70235
70301
|
};
|
|
70236
70302
|
}
|
|
70237
70303
|
});
|
|
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
70304
|
(0, staging_handler_utils_js_1.createStagingHandler)(context, {
|
|
70256
70305
|
id: "reminders:stage-default-user-prompt-after-bulk",
|
|
70257
70306
|
priority: 50,
|
|
@@ -70268,65 +70317,109 @@ var require_stage_default_user_prompt = __commonJS({
|
|
|
70268
70317
|
};
|
|
70269
70318
|
}
|
|
70270
70319
|
});
|
|
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
70320
|
if (!(0, types_1.isDaemonContext)(context))
|
|
70291
70321
|
return;
|
|
70322
|
+
const daemonCtx = context;
|
|
70323
|
+
context.handlers.register({
|
|
70324
|
+
id: "reminders:throttle-register-ups-session-start",
|
|
70325
|
+
priority: 49,
|
|
70326
|
+
filter: { kind: "hook", hooks: ["SessionStart"] },
|
|
70327
|
+
handler: async (event) => {
|
|
70328
|
+
if (!(0, types_1.isHookEvent)(event) || !(0, types_1.isSessionStartEvent)(event))
|
|
70329
|
+
return;
|
|
70330
|
+
const sessionId = event.context.sessionId;
|
|
70331
|
+
if (!sessionId)
|
|
70332
|
+
return;
|
|
70333
|
+
const reminder = (0, reminder_utils_js_1.resolveReminder)(types_js_1.ReminderIds.USER_PROMPT_SUBMIT, {
|
|
70334
|
+
context: { sessionId },
|
|
70335
|
+
assets: daemonCtx.assets
|
|
70336
|
+
});
|
|
70337
|
+
if (reminder) {
|
|
70338
|
+
await (0, throttle_utils_js_1.registerThrottledReminder)(daemonCtx, sessionId, types_js_1.ReminderIds.USER_PROMPT_SUBMIT, "UserPromptSubmit", reminder);
|
|
70339
|
+
}
|
|
70340
|
+
}
|
|
70341
|
+
});
|
|
70342
|
+
context.handlers.register({
|
|
70343
|
+
id: "reminders:throttle-reset-session-start",
|
|
70344
|
+
priority: 48,
|
|
70345
|
+
filter: { kind: "hook", hooks: ["SessionStart"] },
|
|
70346
|
+
handler: async (event) => {
|
|
70347
|
+
if (!(0, types_1.isHookEvent)(event) || !(0, types_1.isSessionStartEvent)(event))
|
|
70348
|
+
return;
|
|
70349
|
+
const sessionId = event.context.sessionId;
|
|
70350
|
+
if (!sessionId)
|
|
70351
|
+
return;
|
|
70352
|
+
await (0, throttle_utils_js_1.resetThrottleCounters)(daemonCtx, sessionId);
|
|
70353
|
+
}
|
|
70354
|
+
});
|
|
70292
70355
|
context.handlers.register({
|
|
70293
|
-
id: "reminders:
|
|
70356
|
+
id: "reminders:throttle-reset-bulk",
|
|
70357
|
+
priority: 49,
|
|
70358
|
+
filter: { kind: "transcript", eventTypes: ["BulkProcessingComplete"] },
|
|
70359
|
+
handler: async (event) => {
|
|
70360
|
+
if (!(0, types_1.isTranscriptEvent)(event))
|
|
70361
|
+
return;
|
|
70362
|
+
if (event.metadata.isBulkProcessing)
|
|
70363
|
+
return;
|
|
70364
|
+
const sessionId = event.context?.sessionId;
|
|
70365
|
+
if (!sessionId)
|
|
70366
|
+
return;
|
|
70367
|
+
await (0, throttle_utils_js_1.resetThrottleCounters)(daemonCtx, sessionId);
|
|
70368
|
+
}
|
|
70369
|
+
});
|
|
70370
|
+
context.handlers.register({
|
|
70371
|
+
id: "reminders:throttle-restage",
|
|
70294
70372
|
priority: 50,
|
|
70295
70373
|
filter: { kind: "transcript", eventTypes: ["UserPrompt", "AssistantMessage"] },
|
|
70296
|
-
handler: async (event
|
|
70374
|
+
handler: async (event) => {
|
|
70297
70375
|
if (!(0, types_1.isTranscriptEvent)(event))
|
|
70298
70376
|
return;
|
|
70299
|
-
if (!(0, types_1.isDaemonContext)(ctx))
|
|
70300
|
-
return;
|
|
70301
70377
|
if (event.metadata.isBulkProcessing)
|
|
70302
70378
|
return;
|
|
70303
70379
|
const sessionId = event.context?.sessionId;
|
|
70304
70380
|
if (!sessionId)
|
|
70305
70381
|
return;
|
|
70306
|
-
const
|
|
70307
|
-
const
|
|
70308
|
-
const
|
|
70309
|
-
|
|
70310
|
-
|
|
70382
|
+
const remindersState = (0, state_js_1.createRemindersState)(daemonCtx.stateService);
|
|
70383
|
+
const result = await remindersState.reminderThrottle.read(sessionId);
|
|
70384
|
+
const state = { ...result.data };
|
|
70385
|
+
if (Object.keys(state).length === 0)
|
|
70386
|
+
return;
|
|
70387
|
+
const featureConfig = daemonCtx.config.getFeature("reminders");
|
|
70311
70388
|
const config = { ...types_js_1.DEFAULT_REMINDERS_SETTINGS, ...featureConfig.settings };
|
|
70312
|
-
const
|
|
70313
|
-
|
|
70314
|
-
|
|
70315
|
-
const
|
|
70316
|
-
|
|
70317
|
-
|
|
70318
|
-
|
|
70319
|
-
|
|
70320
|
-
|
|
70321
|
-
|
|
70389
|
+
const thresholds = config.reminder_thresholds ?? {};
|
|
70390
|
+
let changed = false;
|
|
70391
|
+
for (const [reminderId, entry] of Object.entries(state)) {
|
|
70392
|
+
const typedEntry = entry;
|
|
70393
|
+
const threshold = thresholds[reminderId];
|
|
70394
|
+
if (threshold === void 0)
|
|
70395
|
+
continue;
|
|
70396
|
+
const newCount = typedEntry.messagesSinceLastStaging + 1;
|
|
70397
|
+
if (newCount >= threshold) {
|
|
70398
|
+
const metrics = event.metadata.metrics;
|
|
70399
|
+
const stagedAt = {
|
|
70400
|
+
timestamp: Date.now(),
|
|
70401
|
+
turnCount: metrics.turnCount,
|
|
70402
|
+
toolsThisTurn: metrics.toolsThisTurn,
|
|
70403
|
+
toolCount: metrics.toolCount
|
|
70404
|
+
};
|
|
70405
|
+
await (0, reminder_utils_js_1.stageReminder)(daemonCtx, typedEntry.targetHook, {
|
|
70406
|
+
...typedEntry.cachedReminder,
|
|
70407
|
+
stagedAt
|
|
70408
|
+
});
|
|
70409
|
+
state[reminderId] = { ...typedEntry, messagesSinceLastStaging: 0 };
|
|
70410
|
+
daemonCtx.logger.debug("Throttle: re-staged reminder", {
|
|
70322
70411
|
sessionId,
|
|
70412
|
+
reminderId,
|
|
70323
70413
|
messageCount: newCount,
|
|
70324
70414
|
threshold
|
|
70325
70415
|
});
|
|
70416
|
+
} else {
|
|
70417
|
+
state[reminderId] = { ...typedEntry, messagesSinceLastStaging: newCount };
|
|
70326
70418
|
}
|
|
70327
|
-
|
|
70328
|
-
}
|
|
70329
|
-
|
|
70419
|
+
changed = true;
|
|
70420
|
+
}
|
|
70421
|
+
if (changed) {
|
|
70422
|
+
await remindersState.reminderThrottle.write(sessionId, state);
|
|
70330
70423
|
}
|
|
70331
70424
|
}
|
|
70332
70425
|
});
|
|
@@ -72029,27 +72122,33 @@ var require_track_verification_tools = __commonJS({
|
|
|
72029
72122
|
continue;
|
|
72030
72123
|
const current = toolsState[toolName];
|
|
72031
72124
|
if (!current || current.status === "staged") {
|
|
72032
|
-
|
|
72033
|
-
|
|
72034
|
-
|
|
72035
|
-
|
|
72036
|
-
|
|
72037
|
-
|
|
72038
|
-
|
|
72125
|
+
const staged = await ensureToolReminderStaged(daemonCtx, reminderId, stagedNames);
|
|
72126
|
+
if (staged) {
|
|
72127
|
+
if (!current) {
|
|
72128
|
+
toolsState[toolName] = {
|
|
72129
|
+
status: "staged",
|
|
72130
|
+
editsSinceVerified: 0,
|
|
72131
|
+
lastVerifiedAt: null,
|
|
72132
|
+
lastStagedAt: Date.now()
|
|
72133
|
+
};
|
|
72134
|
+
}
|
|
72135
|
+
stagedNames.add(reminderId);
|
|
72136
|
+
anyStaged = true;
|
|
72039
72137
|
}
|
|
72040
|
-
await stageToolReminderIfNeeded(daemonCtx, reminderId, stagedNames);
|
|
72041
|
-
anyStaged = true;
|
|
72042
72138
|
} else {
|
|
72043
72139
|
const newEdits = current.editsSinceVerified + 1;
|
|
72044
72140
|
if (newEdits >= toolConfig.clearing_threshold) {
|
|
72045
|
-
|
|
72046
|
-
|
|
72047
|
-
|
|
72048
|
-
|
|
72049
|
-
|
|
72050
|
-
|
|
72051
|
-
|
|
72052
|
-
|
|
72141
|
+
const staged = await ensureToolReminderStaged(daemonCtx, reminderId, stagedNames);
|
|
72142
|
+
if (staged) {
|
|
72143
|
+
toolsState[toolName] = {
|
|
72144
|
+
...current,
|
|
72145
|
+
status: "staged",
|
|
72146
|
+
editsSinceVerified: 0,
|
|
72147
|
+
lastStagedAt: Date.now()
|
|
72148
|
+
};
|
|
72149
|
+
stagedNames.add(reminderId);
|
|
72150
|
+
anyStaged = true;
|
|
72151
|
+
}
|
|
72053
72152
|
} else {
|
|
72054
72153
|
toolsState[toolName] = {
|
|
72055
72154
|
...current,
|
|
@@ -72061,7 +72160,10 @@ var require_track_verification_tools = __commonJS({
|
|
|
72061
72160
|
}
|
|
72062
72161
|
}
|
|
72063
72162
|
if (anyStaged) {
|
|
72064
|
-
await
|
|
72163
|
+
const wrapperStaged = await ensureToolReminderStaged(daemonCtx, types_js_1.ReminderIds.VERIFY_COMPLETION, stagedNames);
|
|
72164
|
+
if (!wrapperStaged) {
|
|
72165
|
+
daemonCtx.logger.warn("Failed to stage verify-completion wrapper reminder", { sessionId });
|
|
72166
|
+
}
|
|
72065
72167
|
}
|
|
72066
72168
|
await remindersState.verificationTools.write(sessionId, toolsState);
|
|
72067
72169
|
return anyStaged;
|
|
@@ -72117,21 +72219,22 @@ var require_track_verification_tools = __commonJS({
|
|
|
72117
72219
|
await remindersState.verificationTools.write(sessionId, toolsState);
|
|
72118
72220
|
}
|
|
72119
72221
|
}
|
|
72120
|
-
async function
|
|
72222
|
+
async function ensureToolReminderStaged(daemonCtx, reminderId, stagedNames) {
|
|
72121
72223
|
if (stagedNames.has(reminderId))
|
|
72122
|
-
return;
|
|
72224
|
+
return true;
|
|
72123
72225
|
const reminder = (0, reminder_utils_js_1.resolveReminder)(reminderId, {
|
|
72124
72226
|
context: {},
|
|
72125
72227
|
assets: daemonCtx.assets
|
|
72126
72228
|
});
|
|
72127
72229
|
if (!reminder) {
|
|
72128
72230
|
daemonCtx.logger.warn("Failed to resolve VC tool reminder", { reminderId });
|
|
72129
|
-
return;
|
|
72231
|
+
return false;
|
|
72130
72232
|
}
|
|
72131
72233
|
await (0, reminder_utils_js_1.stageReminder)(daemonCtx, "Stop", {
|
|
72132
72234
|
...reminder,
|
|
72133
72235
|
stagedAt: { timestamp: Date.now(), turnCount: 0, toolsThisTurn: 0, toolCount: 0 }
|
|
72134
72236
|
});
|
|
72237
|
+
return true;
|
|
72135
72238
|
}
|
|
72136
72239
|
}
|
|
72137
72240
|
});
|
|
@@ -72386,6 +72489,7 @@ var require_stage_persona_reminders = __commonJS({
|
|
|
72386
72489
|
var types_1 = require_dist();
|
|
72387
72490
|
var reminder_utils_js_1 = require_reminder_utils();
|
|
72388
72491
|
var types_js_1 = require_types2();
|
|
72492
|
+
var throttle_utils_js_1 = require_throttle_utils();
|
|
72389
72493
|
async function restagePersonaRemindersForActiveSessions(ctxFactory, sessionIds, logger) {
|
|
72390
72494
|
logger.info("Re-staging persona reminders for active sessions", { count: sessionIds.length });
|
|
72391
72495
|
for (const sessionId of sessionIds) {
|
|
@@ -72468,6 +72572,9 @@ var require_stage_persona_reminders = __commonJS({
|
|
|
72468
72572
|
if (reminder) {
|
|
72469
72573
|
for (const targetHook of PERSONA_REMINDER_HOOKS) {
|
|
72470
72574
|
await (0, reminder_utils_js_1.stageReminder)(ctx, targetHook, reminder);
|
|
72575
|
+
if (targetHook === "UserPromptSubmit") {
|
|
72576
|
+
await (0, throttle_utils_js_1.registerThrottledReminder)(ctx, sessionId, types_js_1.ReminderIds.REMEMBER_YOUR_PERSONA, "UserPromptSubmit", reminder);
|
|
72577
|
+
}
|
|
72471
72578
|
}
|
|
72472
72579
|
} else {
|
|
72473
72580
|
ctx.logger.warn("Failed to resolve persona reminder", {
|