@misterhuydo/sentinel 1.0.57 → 1.0.59

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/.cairn/.hint-lock CHANGED
@@ -1 +1 @@
1
- 2026-03-22T14:06:29.625Z
1
+ 2026-03-22T14:37:46.791Z
@@ -1,6 +1,6 @@
1
1
  {
2
- "message": "Auto-checkpoint at 2026-03-22T14:06:57.074Z",
3
- "checkpoint_at": "2026-03-22T14:06:57.075Z",
2
+ "message": "Auto-checkpoint at 2026-03-22T14:38:12.904Z",
3
+ "checkpoint_at": "2026-03-22T14:38:12.905Z",
4
4
  "active_files": [],
5
5
  "notes": [],
6
6
  "mtime_snapshot": {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@misterhuydo/sentinel",
3
- "version": "1.0.57",
3
+ "version": "1.0.59",
4
4
  "description": "Sentinel — Autonomous DevOps Agent installer and manager",
5
5
  "bin": {
6
6
  "sentinel": "./bin/sentinel.js"
@@ -138,6 +138,7 @@ Don't pad responses. Don't say "Great question!" or "Certainly!".
138
138
  If you don't know something, use a tool to find out before saying you don't know.
139
139
 
140
140
  When the engineer's request is fully handled, end your LAST message with the token: [DONE]
141
+ Always write at least one sentence of actual reply before [DONE] — never send [DONE] alone.
141
142
  If you need a follow-up from them, do NOT include [DONE] — wait for their next message.
142
143
  """
143
144
 
@@ -954,6 +955,7 @@ async def _handle_with_cli(
954
955
  cfg_loader,
955
956
  store,
956
957
  slack_client=None,
958
+ user_name: str = "",
957
959
  ) -> tuple[str, bool]:
958
960
  """Fallback: use `claude --print` for users without an Anthropic API key."""
959
961
  status_json = await _run_tool("get_status", {"hours": 24}, cfg_loader, store)
@@ -988,6 +990,7 @@ async def _handle_with_cli(
988
990
 
989
991
  prompt = (
990
992
  _SYSTEM
993
+ + (f"\nYou are speaking with: {user_name}" if user_name else "")
991
994
  + f"\n\nCurrent time: {ts}"
992
995
  + f"\nSentinel status: {'⏸ PAUSED' if paused else '▶ RUNNING'}"
993
996
  + f"\nManaged repos: {', '.join(repos) if repos else '(none configured)'}"
@@ -1049,6 +1052,7 @@ async def handle_message(
1049
1052
  cfg_loader,
1050
1053
  store,
1051
1054
  slack_client=None,
1055
+ user_name: str = "",
1052
1056
  ) -> tuple[str, bool]:
1053
1057
  """
1054
1058
  Process one user message through the Sentinel Boss (Claude with tool use).
@@ -1074,7 +1078,7 @@ async def handle_message(
1074
1078
 
1075
1079
  api_key = cfg_loader.sentinel.anthropic_api_key or os.environ.get("ANTHROPIC_API_KEY", "")
1076
1080
  if not api_key:
1077
- return await _handle_with_cli(message, history, cfg_loader, store, slack_client=slack_client)
1081
+ return await _handle_with_cli(message, history, cfg_loader, store, slack_client=slack_client, user_name=user_name)
1078
1082
 
1079
1083
  client = anthropic.Anthropic(api_key=api_key)
1080
1084
 
@@ -1085,6 +1089,7 @@ async def handle_message(
1085
1089
  known_projects = [_read_project_name(d) for d in _find_project_dirs()]
1086
1090
  system = (
1087
1091
  _SYSTEM
1092
+ + (f"\nYou are speaking with: {user_name}" if user_name else "")
1088
1093
  + f"\n\nCurrent time: {ts}"
1089
1094
  + f"\nSentinel status: {'⏸ PAUSED' if paused else '▶ RUNNING'}"
1090
1095
  + f"\nManaged repos: {', '.join(repos) if repos else '(none configured)'}"
@@ -291,7 +291,7 @@ async def _dispatch(event: dict, client, cfg_loader, store) -> None:
291
291
  text = _strip_mention(event.get("text", "")).strip()
292
292
 
293
293
  if not text:
294
- return
294
+ text = "hello"
295
295
 
296
296
  # Allowlist check — if SLACK_ALLOWED_USERS is configured, silently ignore everyone else
297
297
  allowed = cfg_loader.sentinel.slack_allowed_users
@@ -330,6 +330,7 @@ async def _run_turn(session: _Session, message: str, client, cfg_loader, store)
330
330
  reply, is_done = await handle_message(
331
331
  message, session.history, cfg_loader, store,
332
332
  slack_client=client,
333
+ user_name=session.user_name,
333
334
  )
334
335
  except Exception as e:
335
336
  logger.exception("Sentinel Boss error: %s", e)