@scotthamilton77/sidekick 0.0.8-alpha.8 → 0.0.8-alpha.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/dist/bin.js CHANGED
@@ -68828,6 +68828,7 @@ var require_persona_selection = __commonJS({
68828
68828
  exports2.filterPersonasByAllowList = filterPersonasByAllowList;
68829
68829
  exports2.selectRandomPersona = selectRandomPersona;
68830
68830
  exports2.selectPersonaForSession = selectPersonaForSession;
68831
+ exports2.ensurePersonaForSession = ensurePersonaForSession;
68831
68832
  var core_1 = require_dist4();
68832
68833
  var state_js_1 = require_state4();
68833
68834
  var types_js_1 = require_types4();
@@ -68900,6 +68901,23 @@ var require_persona_selection = __commonJS({
68900
68901
  });
68901
68902
  return selected.id;
68902
68903
  }
68904
+ async function ensurePersonaForSession(sessionId, ctx) {
68905
+ try {
68906
+ const summaryState = (0, state_js_1.createSessionSummaryState)(ctx.stateService);
68907
+ const result = await summaryState.sessionPersona.read(sessionId);
68908
+ if (result.data)
68909
+ return;
68910
+ ctx.logger.info("Persona state missing for active session, re-selecting", { sessionId });
68911
+ const featureConfig = ctx.config.getFeature("session-summary");
68912
+ const config = { ...types_js_1.DEFAULT_SESSION_SUMMARY_CONFIG, ...featureConfig.settings };
68913
+ await selectPersonaForSession(sessionId, config, ctx);
68914
+ } catch (err) {
68915
+ ctx.logger.warn("Failed to ensure persona for session", {
68916
+ sessionId,
68917
+ error: err instanceof Error ? err.message : String(err)
68918
+ });
68919
+ }
68920
+ }
68903
68921
  }
68904
68922
  });
68905
68923
 
@@ -69075,6 +69093,7 @@ var require_update_summary = __commonJS({
69075
69093
  var types_js_1 = require_types4();
69076
69094
  var state_js_1 = require_state4();
69077
69095
  var persona_utils_js_1 = require_persona_utils();
69096
+ var persona_selection_js_1 = require_persona_selection();
69078
69097
  var PROMPT_FILE = "prompts/session-summary.prompt.txt";
69079
69098
  var SNARKY_PROMPT_FILE = "prompts/snarky-message.prompt.txt";
69080
69099
  var RESUME_PROMPT_FILE = "prompts/resume-message.prompt.txt";
@@ -69122,6 +69141,7 @@ var require_update_summary = __commonJS({
69122
69141
  return;
69123
69142
  }
69124
69143
  if (event.eventType === "BulkProcessingComplete") {
69144
+ await (0, persona_selection_js_1.ensurePersonaForSession)(sessionId, ctx);
69125
69145
  const metrics = ctx.transcript.getMetrics();
69126
69146
  if (metrics.turnCount === 0) {
69127
69147
  ctx.logger.info("LLM call: session-summary analysis", {
@@ -70544,6 +70564,7 @@ var require_statusline_service = __commonJS({
70544
70564
  Object.defineProperty(exports2, "__esModule", { value: true });
70545
70565
  exports2.StatuslineService = void 0;
70546
70566
  exports2.createStatuslineService = createStatuslineService;
70567
+ exports2.deterministicIndex = deterministicIndex;
70547
70568
  var core_1 = require_dist4();
70548
70569
  var formatter_js_1 = require_formatter();
70549
70570
  var git_provider_js_1 = require_git_provider();
@@ -70630,8 +70651,7 @@ var require_statusline_service = __commonJS({
70630
70651
  return types_js_1.DEFAULT_PLACEHOLDERS.newSession;
70631
70652
  }
70632
70653
  if (persona.statusline_empty_messages && persona.statusline_empty_messages.length > 0) {
70633
- const randomIndex = Math.floor(Math.random() * persona.statusline_empty_messages.length);
70634
- return persona.statusline_empty_messages[randomIndex];
70654
+ return persona.statusline_empty_messages[deterministicIndex(this.sessionId, persona.statusline_empty_messages.length)];
70635
70655
  }
70636
70656
  return this.loadRandomEmptyMessageFromAssets();
70637
70657
  }
@@ -70652,8 +70672,7 @@ var require_statusline_service = __commonJS({
70652
70672
  if (messages.length === 0) {
70653
70673
  return types_js_1.DEFAULT_PLACEHOLDERS.newSession;
70654
70674
  }
70655
- const randomIndex = Math.floor(Math.random() * messages.length);
70656
- return messages[randomIndex];
70675
+ return messages[deterministicIndex(this.sessionId, messages.length)];
70657
70676
  }
70658
70677
  /**
70659
70678
  * Check if resume message is still fresh based on timestamp.
@@ -71029,6 +71048,15 @@ var require_statusline_service = __commonJS({
71029
71048
  function createStatuslineService(config) {
71030
71049
  return new StatuslineService(config);
71031
71050
  }
71051
+ function deterministicIndex(seed, arrayLength) {
71052
+ if (arrayLength <= 1)
71053
+ return 0;
71054
+ let hash = 5381;
71055
+ for (let i = 0; i < seed.length; i++) {
71056
+ hash = (hash << 5) + hash + seed.charCodeAt(i) | 0;
71057
+ }
71058
+ return Math.abs(hash) % arrayLength;
71059
+ }
71032
71060
  }
71033
71061
  });
71034
71062
 
@@ -74367,7 +74395,7 @@ var require_cli = __commonJS({
74367
74395
  var promises_12 = require("node:fs/promises");
74368
74396
  var node_stream_1 = require("node:stream");
74369
74397
  var yargs_parser_1 = __importDefault2(require_build());
74370
- var VERSION = true ? "0.0.8-alpha.8" : "dev";
74398
+ var VERSION = true ? "0.0.8-alpha.9" : "dev";
74371
74399
  var SANDBOX_ERROR_MESSAGE = `Error: Daemon commands cannot run in sandbox mode.
74372
74400
 
74373
74401
  Claude Code's sandbox blocks Unix socket operations required for daemon IPC.
package/dist/daemon.js CHANGED
@@ -66762,6 +66762,7 @@ var require_persona_selection = __commonJS({
66762
66762
  exports2.filterPersonasByAllowList = filterPersonasByAllowList;
66763
66763
  exports2.selectRandomPersona = selectRandomPersona;
66764
66764
  exports2.selectPersonaForSession = selectPersonaForSession;
66765
+ exports2.ensurePersonaForSession = ensurePersonaForSession;
66765
66766
  var core_1 = require_dist4();
66766
66767
  var state_js_1 = require_state4();
66767
66768
  var types_js_1 = require_types3();
@@ -66834,6 +66835,23 @@ var require_persona_selection = __commonJS({
66834
66835
  });
66835
66836
  return selected.id;
66836
66837
  }
66838
+ async function ensurePersonaForSession(sessionId, ctx) {
66839
+ try {
66840
+ const summaryState = (0, state_js_1.createSessionSummaryState)(ctx.stateService);
66841
+ const result = await summaryState.sessionPersona.read(sessionId);
66842
+ if (result.data)
66843
+ return;
66844
+ ctx.logger.info("Persona state missing for active session, re-selecting", { sessionId });
66845
+ const featureConfig = ctx.config.getFeature("session-summary");
66846
+ const config = { ...types_js_1.DEFAULT_SESSION_SUMMARY_CONFIG, ...featureConfig.settings };
66847
+ await selectPersonaForSession(sessionId, config, ctx);
66848
+ } catch (err) {
66849
+ ctx.logger.warn("Failed to ensure persona for session", {
66850
+ sessionId,
66851
+ error: err instanceof Error ? err.message : String(err)
66852
+ });
66853
+ }
66854
+ }
66837
66855
  }
66838
66856
  });
66839
66857
 
@@ -67009,6 +67027,7 @@ var require_update_summary = __commonJS({
67009
67027
  var types_js_1 = require_types3();
67010
67028
  var state_js_1 = require_state4();
67011
67029
  var persona_utils_js_1 = require_persona_utils();
67030
+ var persona_selection_js_1 = require_persona_selection();
67012
67031
  var PROMPT_FILE = "prompts/session-summary.prompt.txt";
67013
67032
  var SNARKY_PROMPT_FILE = "prompts/snarky-message.prompt.txt";
67014
67033
  var RESUME_PROMPT_FILE = "prompts/resume-message.prompt.txt";
@@ -67056,6 +67075,7 @@ var require_update_summary = __commonJS({
67056
67075
  return;
67057
67076
  }
67058
67077
  if (event.eventType === "BulkProcessingComplete") {
67078
+ await (0, persona_selection_js_1.ensurePersonaForSession)(sessionId, ctx);
67059
67079
  const metrics = ctx.transcript.getMetrics();
67060
67080
  if (metrics.turnCount === 0) {
67061
67081
  ctx.logger.info("LLM call: session-summary analysis", {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scotthamilton77/sidekick",
3
- "version": "0.0.8-alpha.8",
3
+ "version": "0.0.8-alpha.9",
4
4
  "description": "AI pair programming assistant with personas, session tracking, and contextual nudges",
5
5
  "bin": {
6
6
  "sidekick": "dist/bin.js"