@misterhuydo/sentinel 1.5.22 → 1.5.24

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-04-08T16:10:00.639Z
1
+ 2026-04-08T16:40:44.178Z
@@ -1,6 +1,6 @@
1
1
  {
2
- "message": "Auto-checkpoint at 2026-04-08T16:25:50.723Z",
3
- "checkpoint_at": "2026-04-08T16:25:50.825Z",
2
+ "message": "Auto-checkpoint at 2026-04-08T16:47:13.880Z",
3
+ "checkpoint_at": "2026-04-08T16:47:13.973Z",
4
4
  "active_files": [
5
5
  "J:\\Projects\\Sentinel\\cli\\bin\\sentinel.js",
6
6
  "J:\\Projects\\Sentinel\\cli\\lib\\test.js",
@@ -32,7 +32,12 @@
32
32
  "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 41 ++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 48 +++++---\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 43 ++++---\n sentinel/state_store.py | 37 ++++++\n 17 files changed, 517 insertions(+), 131 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/state_store.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py",
33
33
  "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 42 ++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 48 +++++---\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 43 ++++---\n sentinel/state_store.py | 37 ++++++\n 17 files changed, 518 insertions(+), 131 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/state_store.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py",
34
34
  "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 43 ++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/dev_watcher.py | 8 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 67 ++++++----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 44 ++++---\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 19 files changed, 540 insertions(+), 146 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/dev_watcher.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/state_store.py\n M ../tests/test_config_loader.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py",
35
- "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 44 ++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 44 ++++---\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 19 files changed, 578 insertions(+), 152 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/dev_watcher.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/state_store.py\n M ../tests/test_config_loader.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py"
35
+ "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 44 ++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 44 ++++---\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 19 files changed, 578 insertions(+), 152 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/dev_watcher.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/state_store.py\n M ../tests/test_config_loader.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py",
36
+ "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 45 ++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/lib/generate.js | 6 +-\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 44 ++++---\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 20 files changed, 584 insertions(+), 153 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M lib/generate.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/dev_watcher.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/state_store.py\n M ../tests/test_config_loader.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py",
37
+ "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 46 ++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/lib/generate.js | 6 +-\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 44 ++++---\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 20 files changed, 585 insertions(+), 153 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M lib/generate.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/dev_watcher.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/state_store.py\n M ../tests/test_config_loader.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py",
38
+ "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 47 ++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/lib/generate.js | 6 +-\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 44 ++++---\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 20 files changed, 586 insertions(+), 153 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M lib/generate.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/dev_watcher.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/state_store.py\n M ../tests/test_config_loader.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py",
39
+ "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 48 +++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/lib/generate.js | 6 +-\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 44 ++++---\n sentinel/slack_bot.py | 135 +++++++++++++++++++++\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 21 files changed, 722 insertions(+), 153 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M lib/generate.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/dev_watcher.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/slack_bot.py\n M ../sentinel/state_store.py\n M ../tests/test_config_loader.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py",
40
+ "[2026-04-08] git-snapshot: .cairn/session.json | 29 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 49 +++++++-\n cli/.cairn/views/62a614_bundle.js | 6 +-\n cli/lib/.cairn/minify-map.json | 6 +\n cli/lib/.cairn/views/fb78ac_upgrade.js | 37 +++++-\n cli/lib/.cairn/views/fc4a1a_add.js | 215 +++++++++++++++++++++++++--------\n cli/lib/generate.js | 6 +-\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 4 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 22 ++--\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 44 ++++---\n sentinel/slack_bot.py | 135 +++++++++++++++++++++\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 21 files changed, 723 insertions(+), 153 deletions(-) | status: M ../.cairn/session.json\n M ../.claude/settings.local.json\n M .cairn/.hint-lock\n M .cairn/minify-map.json\n M .cairn/session.json\n M .cairn/views/62a614_bundle.js\n M lib/.cairn/minify-map.json\n M lib/.cairn/views/fb78ac_upgrade.js\n M lib/.cairn/views/fc4a1a_add.js\n M lib/generate.js\n M package.json\n M ../sentinel/config_loader.py\n M ../sentinel/dependency_manager.py\n M ../sentinel/dev_watcher.py\n M ../sentinel/git_manager.py\n M ../sentinel/main.py\n M ../sentinel/repo_task_engine.py\n M ../sentinel/sentinel_boss.py\n M ../sentinel/slack_bot.py\n M ../sentinel/state_store.py\n M ../tests/test_config_loader.py\n?? ../.cairn/.cairn-project\n?? ../.cairn/memory/\n?? ../.cairn/minify-map.json\n?? ../.cairn/views/\n?? .cairn/views/23edf4_sentinel_boss.py\n?? .cairn/views/7802b9_cicd_trigger.py\n?? .cairn/views/ac3df4_repo_task_engine.py\n?? lib/.cairn/views/2a85cc_init.js\n?? lib/.cairn/views/e26996_slack-setup.js\n?? ../scripts/fix_ask_codebase_context.py\n?? ../scripts/fix_ask_codebase_stdin.py\n?? ../scripts/fix_chain_slack.py\n?? ../scripts/fix_fstring.py\n?? ../scripts/fix_knowledge_cache.py\n?? ../scripts/fix_knowledge_cache_staleness.py\n?? ../scripts/fix_merge_confirm.py\n?? ../scripts/fix_permission_messages.py\n?? ../scripts/fix_pr_check_head_detect.py\n?? ../scripts/fix_pr_msg_newlines.py\n?? ../scripts/fix_pr_tracking_boss.py\n?? ../scripts/fix_pr_tracking_db.py\n?? ../scripts/fix_pr_tracking_main.py\n?? ../scripts/fix_project_isolation.py\n?? ../scripts/fix_system_prompt.py\n?? ../scripts/fix_two_bugs.py\n?? ../scripts/patch_chain_release.py"
36
41
  ],
37
42
  "mtime_snapshot": {
38
43
  "J:\\Projects\\Sentinel\\cli\\bin\\sentinel.js": 1774252515044.4768,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@misterhuydo/sentinel",
3
- "version": "1.5.22",
3
+ "version": "1.5.24",
4
4
  "description": "Sentinel — Autonomous DevOps Agent installer and manager",
5
5
  "bin": {
6
6
  "sentinel": "./bin/sentinel.js"
@@ -1 +1 @@
1
- __version__ = "1.5.22"
1
+ __version__ = "1.5.24"
@@ -347,6 +347,137 @@ async def _fetch_attachments(event: dict, client, workspace_dir: str) -> list[di
347
347
  return results
348
348
 
349
349
 
350
+ # ── Nexus credential handler ──────────────────────────────────────────────────
351
+
352
+ def _drop_nexus_patch_task(cfg_loader, settings_xml: str, user_id: str, channel: str) -> bool:
353
+ """
354
+ Drop a Patch dev-task that writes the provided settings.xml to ~/.m2/settings.xml.
355
+ Returns True if the task was successfully queued.
356
+ """
357
+ from pathlib import Path as _P
358
+ import time as _time, uuid as _uuid
359
+ from datetime import datetime as _dt, timezone as _tz
360
+
361
+ sentinel = cfg_loader.sentinel
362
+ if not sentinel.sentinel_dev_repo_path:
363
+ return False
364
+
365
+ project_dir = _P(sentinel.sentinel_dev_repo_path).parent
366
+ dev_tasks_dir = project_dir / "dev-tasks"
367
+ dev_tasks_dir.mkdir(exist_ok=True)
368
+
369
+ # Escape backticks inside the XML so the heredoc stays intact
370
+ safe_xml = settings_xml.replace("\\", "\\\\").replace("`", "\\`")
371
+
372
+ fname = f"slack-nexus-{_uuid.uuid4().hex[:8]}-{int(_time.time())}.txt"
373
+ lines = [
374
+ "TYPE: fix",
375
+ f"SUBMITTED_BY: <@{user_id}> ({user_id})",
376
+ "SOURCE: boss",
377
+ f"SUBMITTED_AT: {_dt.now(_tz.utc).isoformat()}",
378
+ f"ORIGIN_CHANNEL: {channel}",
379
+ "",
380
+ "Install Maven Nexus credentials into ~/.m2/settings.xml on this server.",
381
+ "",
382
+ "Steps:",
383
+ "1. Create the directory: mkdir -p ~/.m2",
384
+ "2. Write the following content exactly to ~/.m2/settings.xml:",
385
+ "",
386
+ f"```xml\n{safe_xml}\n```",
387
+ "",
388
+ "3. Verify the file was written correctly: confirm it contains the expected <servers> block.",
389
+ "4. Do NOT modify any source code or commit anything — this is a server config change only.",
390
+ ]
391
+ (_P(dev_tasks_dir) / fname).write_text("\n".join(lines), encoding="utf-8")
392
+ logger.info("Nexus credentials patch task queued: %s (user=%s)", fname, user_id)
393
+ return True
394
+
395
+
396
+ async def _handle_nexus_input(
397
+ text: str, user_id: str, channel: str, client, cfg_loader, is_admin: bool
398
+ ) -> bool:
399
+ """
400
+ Intercept nexus credential messages before they reach the Boss LLM.
401
+ Returns True if the message was handled (caller should skip Boss turn).
402
+
403
+ Accepted formats:
404
+ nexus settings <XML> — full settings.xml paste
405
+ nexus creds <id> <user> <pw> — single server entry
406
+ <?xml...>...<servers>... — raw settings.xml paste (no prefix needed)
407
+ """
408
+ import re as _re
409
+ import html as _html
410
+
411
+ # Slack HTML-encodes < > & in message text — decode before any XML checks
412
+ text = _html.unescape(text)
413
+ lower = text.lower().lstrip()
414
+ raw_xml: str | None = None
415
+
416
+ # Format 1: explicit "nexus settings" prefix
417
+ if lower.startswith("nexus settings"):
418
+ xml_part = text[len("nexus settings"):].strip()
419
+ # Strip code fences if present
420
+ xml_part = _re.sub(r"^```[a-z]*\n?", "", xml_part).rstrip("`").strip()
421
+ if "<servers>" in xml_part or "<?xml" in xml_part:
422
+ raw_xml = xml_part
423
+ else:
424
+ await client.chat_postMessage(
425
+ channel=channel,
426
+ text=":x: Couldn't find `<servers>` block in what you sent. Paste the full `settings.xml` content after `nexus settings`.",
427
+ )
428
+ return True
429
+
430
+ # Format 2: raw XML paste (contains <?xml and <servers>)
431
+ elif "<?xml" in text and "<servers>" in text:
432
+ raw_xml = _re.sub(r"^```[a-z]*\n?", "", text).rstrip("`").strip()
433
+
434
+ # Format 3: "nexus creds <server-id> <username> <password>"
435
+ elif lower.startswith("nexus creds"):
436
+ parts = text.split(None, 4) # ["nexus", "creds", id, user, pw]
437
+ if len(parts) < 5:
438
+ await client.chat_postMessage(
439
+ channel=channel,
440
+ text=":x: Usage: `nexus creds <server-id> <username> <password>`\nExample: `nexus creds snapshots myuser mypass`",
441
+ )
442
+ return True
443
+ server_id, username, password = parts[2], parts[3], parts[4]
444
+ raw_xml = f"""<?xml version="1.0" encoding="UTF-8"?>
445
+ <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
446
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
447
+ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
448
+ <servers>
449
+ <server>
450
+ <id>{server_id}</id>
451
+ <username>{username}</username>
452
+ <password>{password}</password>
453
+ </server>
454
+ </servers>
455
+ </settings>"""
456
+ else:
457
+ return False # not a nexus command — let Boss handle it
458
+
459
+ # Admin only for security
460
+ if not is_admin:
461
+ await client.chat_postMessage(
462
+ channel=channel,
463
+ text=":lock: Only admins can update Nexus credentials.",
464
+ )
465
+ return True
466
+
467
+ queued = _drop_nexus_patch_task(cfg_loader, raw_xml, user_id, channel)
468
+ if queued:
469
+ await client.chat_postMessage(
470
+ channel=channel,
471
+ text=":white_check_mark: Got it — queued a Patch task to install the credentials into `~/.m2/settings.xml` on the server. I'll @mention you when it's done.",
472
+ )
473
+ else:
474
+ await client.chat_postMessage(
475
+ channel=channel,
476
+ text=":warning: Patch (dev agent) is not configured on this instance — cannot auto-install. Please write the file manually to `~/.m2/settings.xml` on the Sentinel server.",
477
+ )
478
+ return True
479
+
480
+
350
481
  # ── Dispatcher ────────────────────────────────────────────────────────────────
351
482
 
352
483
  async def _dispatch(event: dict, client, cfg_loader, store) -> None:
@@ -393,6 +524,13 @@ async def _dispatch(event: dict, client, cfg_loader, store) -> None:
393
524
  pass # silently drop — no orphaned message
394
525
  return
395
526
 
527
+ # ── Nexus credentials shortcut (intercept before Boss LLM turn) ─────────────
528
+ # Handles: "nexus settings <XML>", "nexus creds <host> <user> <pass>",
529
+ # or a raw paste that contains <?xml and <servers> (settings.xml without prefix).
530
+ _nexus_handled = await _handle_nexus_input(text, user_id, channel, client, cfg_loader, is_admin)
531
+ if _nexus_handled:
532
+ return
533
+
396
534
  # Fetch any attached files (screenshots, logs, docs)
397
535
  attachments: list[dict] = []
398
536
  if event.get("files"):