@misterhuydo/sentinel 1.5.21 → 1.5.23

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:14:09.624Z",
3
- "checkpoint_at": "2026-04-08T16:14:09.729Z",
2
+ "message": "Auto-checkpoint at 2026-04-08T16:39:19.544Z",
3
+ "checkpoint_at": "2026-04-08T16:39:19.646Z",
4
4
  "active_files": [
5
5
  "J:\\Projects\\Sentinel\\cli\\bin\\sentinel.js",
6
6
  "J:\\Projects\\Sentinel\\cli\\lib\\test.js",
@@ -31,7 +31,11 @@
31
31
  "[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 | 40 +++++-\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 | 42 +++++--\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, 476 insertions(+), 130 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",
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
- "[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"
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",
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"
35
39
  ],
36
40
  "mtime_snapshot": {
37
41
  "J:\\Projects\\Sentinel\\cli\\bin\\sentinel.js": 1774252515044.4768,
package/lib/generate.js CHANGED
@@ -79,7 +79,11 @@ cd "$DIR"
79
79
  for _jdk in "$HOME"/jdk-* "$HOME"/.jdk /usr/lib/jvm/java-21-openjdk /usr/lib/jvm/java-11-openjdk; do
80
80
  if [[ -d "$_jdk" ]] && [[ -x "$_jdk/bin/java" ]]; then export JAVA_HOME="$_jdk"; break; fi
81
81
  done
82
- # Ensure npm-global bin (cairn-mcp, claude), ~/.local/bin (auto-installed tools), and JAVA_HOME on PATH
82
+ # Auto-detect Maven home
83
+ for _mvn_bin in "$HOME"/apache-maven-*/bin "$HOME"/.maven/bin /usr/local/maven/bin /opt/maven/bin; do
84
+ if [[ -x "$_mvn_bin/mvn" ]]; then export PATH="$_mvn_bin:$PATH"; break; fi
85
+ done
86
+ # Ensure npm-global bin (cairn-mcp, claude), ~/.local/bin (auto-installed tools), JAVA_HOME and Maven on PATH
83
87
  export PATH="$HOME/.npm-global/bin:$HOME/.local/bin:$PATH"
84
88
  [[ -n "\${JAVA_HOME:-}" ]] && export PATH="\${JAVA_HOME:-}/bin:\$PATH"
85
89
  PYTHONPATH="${codeDir}" "${codeDir}/.venv/bin/python3" -m sentinel.main --config ./config \\
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@misterhuydo/sentinel",
3
- "version": "1.5.21",
3
+ "version": "1.5.23",
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.21"
1
+ __version__ = "1.5.23"
@@ -347,6 +347,134 @@ 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
+
410
+ lower = text.lower().lstrip()
411
+ raw_xml: str | None = None
412
+
413
+ # Format 1: explicit "nexus settings" prefix
414
+ if lower.startswith("nexus settings"):
415
+ xml_part = text[len("nexus settings"):].strip()
416
+ # Strip code fences if present
417
+ xml_part = _re.sub(r"^```[a-z]*\n?", "", xml_part).rstrip("`").strip()
418
+ if "<servers>" in xml_part or "<?xml" in xml_part:
419
+ raw_xml = xml_part
420
+ else:
421
+ await client.chat_postMessage(
422
+ channel=channel,
423
+ text=":x: Couldn't find `<servers>` block in what you sent. Paste the full `settings.xml` content after `nexus settings`.",
424
+ )
425
+ return True
426
+
427
+ # Format 2: raw XML paste (contains <?xml and <servers>)
428
+ elif "<?xml" in text and "<servers>" in text:
429
+ raw_xml = _re.sub(r"^```[a-z]*\n?", "", text).rstrip("`").strip()
430
+
431
+ # Format 3: "nexus creds <server-id> <username> <password>"
432
+ elif lower.startswith("nexus creds"):
433
+ parts = text.split(None, 4) # ["nexus", "creds", id, user, pw]
434
+ if len(parts) < 5:
435
+ await client.chat_postMessage(
436
+ channel=channel,
437
+ text=":x: Usage: `nexus creds <server-id> <username> <password>`\nExample: `nexus creds snapshots myuser mypass`",
438
+ )
439
+ return True
440
+ server_id, username, password = parts[2], parts[3], parts[4]
441
+ raw_xml = f"""<?xml version="1.0" encoding="UTF-8"?>
442
+ <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
443
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
444
+ xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
445
+ <servers>
446
+ <server>
447
+ <id>{server_id}</id>
448
+ <username>{username}</username>
449
+ <password>{password}</password>
450
+ </server>
451
+ </servers>
452
+ </settings>"""
453
+ else:
454
+ return False # not a nexus command — let Boss handle it
455
+
456
+ # Admin only for security
457
+ if not is_admin:
458
+ await client.chat_postMessage(
459
+ channel=channel,
460
+ text=":lock: Only admins can update Nexus credentials.",
461
+ )
462
+ return True
463
+
464
+ queued = _drop_nexus_patch_task(cfg_loader, raw_xml, user_id, channel)
465
+ if queued:
466
+ await client.chat_postMessage(
467
+ channel=channel,
468
+ 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.",
469
+ )
470
+ else:
471
+ await client.chat_postMessage(
472
+ channel=channel,
473
+ 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.",
474
+ )
475
+ return True
476
+
477
+
350
478
  # ── Dispatcher ────────────────────────────────────────────────────────────────
351
479
 
352
480
  async def _dispatch(event: dict, client, cfg_loader, store) -> None:
@@ -393,6 +521,13 @@ async def _dispatch(event: dict, client, cfg_loader, store) -> None:
393
521
  pass # silently drop — no orphaned message
394
522
  return
395
523
 
524
+ # ── Nexus credentials shortcut (intercept before Boss LLM turn) ─────────────
525
+ # Handles: "nexus settings <XML>", "nexus creds <host> <user> <pass>",
526
+ # or a raw paste that contains <?xml and <servers> (settings.xml without prefix).
527
+ _nexus_handled = await _handle_nexus_input(text, user_id, channel, client, cfg_loader, is_admin)
528
+ if _nexus_handled:
529
+ return
530
+
396
531
  # Fetch any attached files (screenshots, logs, docs)
397
532
  attachments: list[dict] = []
398
533
  if event.get("files"):