@misterhuydo/sentinel 1.5.28 → 1.5.29
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/session.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"message": "Auto-checkpoint at 2026-04-09T12:
|
|
3
|
-
"checkpoint_at": "2026-04-09T12:
|
|
2
|
+
"message": "Auto-checkpoint at 2026-04-09T12:46:01.683Z",
|
|
3
|
+
"checkpoint_at": "2026-04-09T12:46:01.832Z",
|
|
4
4
|
"active_files": [
|
|
5
5
|
"J:\\Projects\\Sentinel\\cli\\bin\\sentinel.js",
|
|
6
6
|
"J:\\Projects\\Sentinel\\cli\\lib\\test.js",
|
|
@@ -48,7 +48,9 @@
|
|
|
48
48
|
"[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 | 57 ++++++++-\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 | 139 +++++++++++++++++++++\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 21 files changed, 735 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",
|
|
49
49
|
"[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 | 58 ++++++++-\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 | 12 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 53 +++++---\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 51 +++++---\n sentinel/slack_bot.py | 139 +++++++++++++++++++++\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 21 files changed, 774 insertions(+), 161 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",
|
|
50
50
|
"[2026-04-08] git-snapshot: .cairn/session.json | 30 ++++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 59 ++++++++-\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 | 12 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 53 +++++---\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 51 +++++---\n sentinel/slack_bot.py | 139 +++++++++++++++++++++\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 21 files changed, 776 insertions(+), 161 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",
|
|
51
|
-
"[2026-04-09] git-snapshot: .cairn/session.json | 17 ++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 60 ++++++++-\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-lock.json | 4 +-\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 12 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 53 +++++---\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 53 +++++---\n sentinel/slack_bot.py | 143 ++++++++++++++++++++++\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 22 files changed, 771 insertions(+), 164 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-lock.json\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/bundles/\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"
|
|
51
|
+
"[2026-04-09] git-snapshot: .cairn/session.json | 17 ++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 60 ++++++++-\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-lock.json | 4 +-\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 12 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 53 +++++---\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 53 +++++---\n sentinel/slack_bot.py | 143 ++++++++++++++++++++++\n sentinel/state_store.py | 37 ++++++\n tests/test_config_loader.py | 8 +-\n 22 files changed, 771 insertions(+), 164 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-lock.json\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/bundles/\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",
|
|
52
|
+
"[2026-04-09] git-snapshot: .cairn/session.json | 17 ++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 61 +++++++++-\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-lock.json | 4 +-\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 12 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 53 +++++---\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 55 ++++++---\n sentinel/slack_bot.py | 143 ++++++++++++++++++++++\n sentinel/state_store.py | 40 ++++++\n tests/test_config_loader.py | 8 +-\n 22 files changed, 776 insertions(+), 165 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-lock.json\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/bundles/\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",
|
|
53
|
+
"[2026-04-09] git-snapshot: .cairn/session.json | 17 ++-\n .claude/settings.local.json | 47 ++++++-\n cli/.cairn/.hint-lock | 2 +-\n cli/.cairn/minify-map.json | 8 +-\n cli/.cairn/session.json | 62 +++++++++-\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-lock.json | 4 +-\n cli/package.json | 2 +-\n sentinel/config_loader.py | 83 ++++++++++---\n sentinel/dependency_manager.py | 12 +-\n sentinel/dev_watcher.py | 11 +-\n sentinel/git_manager.py | 53 +++++---\n sentinel/main.py | 107 +++++++++++-----\n sentinel/repo_task_engine.py | 18 ++-\n sentinel/sentinel_boss.py | 55 ++++++---\n sentinel/slack_bot.py | 143 ++++++++++++++++++++++\n sentinel/state_store.py | 40 ++++++\n tests/test_config_loader.py | 8 +-\n 22 files changed, 777 insertions(+), 165 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-lock.json\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/bundles/\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"
|
|
52
54
|
],
|
|
53
55
|
"mtime_snapshot": {
|
|
54
56
|
"J:\\Projects\\Sentinel\\cli\\bin\\sentinel.js": 1774252515044.4768,
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "1.5.
|
|
1
|
+
__version__ = "1.5.29"
|
|
@@ -84,6 +84,7 @@ class SentinelConfig:
|
|
|
84
84
|
sentinel_dev_auto_publish: bool = False # if True, auto-publish to npm after clean soak
|
|
85
85
|
auto_commit: bool = False # project-level default: push directly to main (no PR); repos can override
|
|
86
86
|
auto_release: bool = False # project-level default: trigger CI/CD pipeline after push; repos can override
|
|
87
|
+
auto_raise_issues: bool = False # if True, auto-fix detected log errors without waiting for human to raise an issue
|
|
87
88
|
|
|
88
89
|
|
|
89
90
|
@dataclass
|
|
@@ -279,6 +280,8 @@ class ConfigLoader:
|
|
|
279
280
|
c.auto_commit = d["AUTO_COMMIT"].lower() == "true"
|
|
280
281
|
if "AUTO_RELEASE" in d:
|
|
281
282
|
c.auto_release = d["AUTO_RELEASE"].lower() == "true"
|
|
283
|
+
if "AUTO_RAISE_ISSUES" in d:
|
|
284
|
+
c.auto_raise_issues = d["AUTO_RAISE_ISSUES"].lower() == "true"
|
|
282
285
|
self.sentinel = c
|
|
283
286
|
|
|
284
287
|
def _load_log_sources(self):
|
package/python/sentinel/main.py
CHANGED
|
@@ -181,6 +181,19 @@ async def _handle_error(event: ErrorEvent, cfg_loader: ConfigLoader, store: Stat
|
|
|
181
181
|
|
|
182
182
|
repo = route(event, cfg_loader.repos)
|
|
183
183
|
if not repo:
|
|
184
|
+
from .notify import slack_alert as _slack_alert
|
|
185
|
+
severity_icon = {"CRITICAL": ":rotating_light:", "ERROR": ":red_circle:"}.get(
|
|
186
|
+
event.severity.upper(), ":large_yellow_circle:"
|
|
187
|
+
)
|
|
188
|
+
_slack_alert(
|
|
189
|
+
sentinel.slack_bot_token,
|
|
190
|
+
sentinel.slack_channel,
|
|
191
|
+
f"{severity_icon} *{event.severity.upper()} detected — no repo match* (`{event.source}`)\n"
|
|
192
|
+
f"`{event.message[:200]}`\n"
|
|
193
|
+
f":no_entry_sign: Could not route to any managed repo — manual review needed.\n"
|
|
194
|
+
f"Fingerprint: `{event.fingerprint[:8]}`",
|
|
195
|
+
)
|
|
196
|
+
logger.warning("No repo route for %s (%s) — alerted channel", event.fingerprint[:8], event.source)
|
|
184
197
|
return
|
|
185
198
|
|
|
186
199
|
auto_commit = resolve_auto_commit(repo, sentinel)
|
|
@@ -195,9 +208,21 @@ async def _handle_error(event: ErrorEvent, cfg_loader: ConfigLoader, store: Stat
|
|
|
195
208
|
logger.info("SENTINEL_PAUSE present — fix activity halted")
|
|
196
209
|
return
|
|
197
210
|
|
|
211
|
+
# ── Suppress repeat notifications for same error (notified within 4h) ───────
|
|
212
|
+
if store.was_notified_recently(event.fingerprint):
|
|
213
|
+
logger.debug("Error %s already notified recently — suppressing repeat", event.fingerprint[:8])
|
|
214
|
+
return
|
|
215
|
+
|
|
198
216
|
# ── Determine what we can do before alerting ──────────────────────────────
|
|
199
217
|
cannot_fix = event.is_infra_issue or (event.severity == "CRITICAL" and auto_commit)
|
|
200
|
-
|
|
218
|
+
if cannot_fix:
|
|
219
|
+
fix_status = "cannot_fix"
|
|
220
|
+
elif not sentinel.auto_raise_issues:
|
|
221
|
+
fix_status = "raise_to_fix"
|
|
222
|
+
elif not auto_commit:
|
|
223
|
+
fix_status = "will_fix_pr"
|
|
224
|
+
else:
|
|
225
|
+
fix_status = "attempting"
|
|
201
226
|
|
|
202
227
|
stack_lines = getattr(event, "stack_trace", None)
|
|
203
228
|
stack_preview = ""
|
|
@@ -235,6 +260,11 @@ async def _handle_error(event: ErrorEvent, cfg_loader: ConfigLoader, store: Stat
|
|
|
235
260
|
store.record_fix(event.fingerprint, "skipped", repo_name=repo.repo_name)
|
|
236
261
|
return
|
|
237
262
|
|
|
263
|
+
if not sentinel.auto_raise_issues:
|
|
264
|
+
logger.info("AUTO_RAISE_ISSUES=false — notified channel, awaiting human to raise issue for %s", event.fingerprint[:8])
|
|
265
|
+
store.record_fix(event.fingerprint, "notified", repo_name=repo.repo_name)
|
|
266
|
+
return
|
|
267
|
+
|
|
238
268
|
if store.fix_attempted_recently(event.fingerprint, hours=24):
|
|
239
269
|
logger.debug("Fix already attempted recently for %s", event.fingerprint)
|
|
240
270
|
return
|
|
@@ -364,12 +394,21 @@ async def _handle_issue(event: IssueEvent, cfg_loader: ConfigLoader, store: Stat
|
|
|
364
394
|
mark_done(event.issue_file)
|
|
365
395
|
return
|
|
366
396
|
|
|
367
|
-
# Route: explicit TARGET_REPO in file > single-repo shortcut > warn and
|
|
397
|
+
# Route: explicit TARGET_REPO in file > single-repo shortcut > warn and notify
|
|
398
|
+
from .notify import slack_alert as _route_alert
|
|
399
|
+
_submitter_id = getattr(event, "submitter_user_id", "")
|
|
400
|
+
_origin_ch = getattr(event, "origin_channel", "") or sentinel.slack_channel
|
|
368
401
|
if event.target_repo:
|
|
369
402
|
repo = cfg_loader.repos.get(event.target_repo)
|
|
370
403
|
if not repo:
|
|
371
404
|
logger.warning("TARGET_REPO %r not found in config -- leaving %s for admin",
|
|
372
405
|
event.target_repo, event.source)
|
|
406
|
+
_route_alert(
|
|
407
|
+
sentinel.slack_bot_token, _origin_ch,
|
|
408
|
+
f":warning: *Issue routing failed*{' — ' + '<@' + _submitter_id + '>' if _submitter_id else ''}\n"
|
|
409
|
+
f"Repo `{event.target_repo}` is not in Sentinel's config.\n"
|
|
410
|
+
f"_{event.message[:120]}_",
|
|
411
|
+
)
|
|
373
412
|
return
|
|
374
413
|
elif len(cfg_loader.repos) == 1:
|
|
375
414
|
repo = next(iter(cfg_loader.repos.values()))
|
|
@@ -378,6 +417,12 @@ async def _handle_issue(event: IssueEvent, cfg_loader: ConfigLoader, store: Stat
|
|
|
378
417
|
"Cannot auto-route %s -- add 'TARGET_REPO: <repo>' as first line in the file",
|
|
379
418
|
event.source,
|
|
380
419
|
)
|
|
420
|
+
_route_alert(
|
|
421
|
+
sentinel.slack_bot_token, _origin_ch,
|
|
422
|
+
f":warning: *Issue routing failed*{' — ' + '<@' + _submitter_id + '>' if _submitter_id else ''}\n"
|
|
423
|
+
f"Multiple repos configured — add `TARGET_REPO: <repo-name>` to the issue.\n"
|
|
424
|
+
f"_{event.message[:120]}_",
|
|
425
|
+
)
|
|
381
426
|
return # Leave the file so admin can add the header
|
|
382
427
|
|
|
383
428
|
auto_commit = resolve_auto_commit(repo, sentinel)
|
|
@@ -262,6 +262,7 @@ def notify_error_detected(
|
|
|
262
262
|
"attempting": ":hammer: Sentinel is attempting a fix...",
|
|
263
263
|
"will_fix_pr": ":hammer: Sentinel is preparing a fix PR...",
|
|
264
264
|
"cannot_fix": ":no_entry_sign: Sentinel cannot auto-fix this (infra/CRITICAL — human review needed).",
|
|
265
|
+
"raise_to_fix": ":eyes: Sentinel detected this issue. Set `AUTO_RAISE_ISSUES=true` or ask Boss to fix it.",
|
|
265
266
|
}.get(fix_status, f":information_source: {fix_status}")
|
|
266
267
|
|
|
267
268
|
lines = [
|
|
@@ -255,9 +255,21 @@ class StateStore:
|
|
|
255
255
|
return [dict(r) for r in rows]
|
|
256
256
|
|
|
257
257
|
def fix_attempted_recently(self, fingerprint: str, hours: int = 24) -> bool:
|
|
258
|
+
# "notified" and "skipped" don't block a future fix attempt
|
|
258
259
|
with self._conn() as conn:
|
|
259
260
|
row = conn.execute(
|
|
260
261
|
"SELECT id FROM fixes WHERE fingerprint=? "
|
|
262
|
+
"AND status NOT IN ('notified', 'skipped') "
|
|
263
|
+
"AND timestamp >= datetime('now', ? || ' hours')",
|
|
264
|
+
(fingerprint, f"-{hours}"),
|
|
265
|
+
).fetchone()
|
|
266
|
+
return row is not None
|
|
267
|
+
|
|
268
|
+
def was_notified_recently(self, fingerprint: str, hours: int = 4) -> bool:
|
|
269
|
+
"""Return True if this error was recorded as 'notified' within the last N hours (spam suppression)."""
|
|
270
|
+
with self._conn() as conn:
|
|
271
|
+
row = conn.execute(
|
|
272
|
+
"SELECT id FROM fixes WHERE fingerprint=? AND status='notified' "
|
|
261
273
|
"AND timestamp >= datetime('now', ? || ' hours')",
|
|
262
274
|
(fingerprint, f"-{hours}"),
|
|
263
275
|
).fetchone()
|