From 073b70cc39caf805ad3e5facf586c034d5539258 Mon Sep 17 00:00:00 2001 From: Travis Vasceannie Date: Thu, 22 Jan 2026 04:40:05 +0000 Subject: [PATCH] xx --- .backup/ban_stdlib_logger.rego | 163 + .backup/block_assertion_roulette.rego | 175 + .backup/block_biome_ignore.rego | 175 + .backup/block_biome_ignore_bash.rego | 26 + .backup/block_broad_exception_handler.rego | 146 + .backup/block_code_quality_test_bash.rego | 26 + .backup/block_code_quality_test_edits.rego | 127 + .backup/block_code_quality_test_serena.rego | 126 + ...block_code_quality_test_serena_plugin.rego | 126 + .backup/block_datetime_now_fallback.rego | 146 + .backup/block_default_value_swallow.rego | 146 + .backup/block_duplicate_fixtures.rego | 179 + .backup/block_linter_config_frontend.rego | 129 + .../block_linter_config_frontend_bash.rego | 26 + .backup/block_linter_config_python.rego | 129 + .backup/block_linter_config_python_bash.rego | 26 + .backup/block_magic_numbers.rego | 178 + .backup/block_makefile_bash.rego | 26 + .backup/block_makefile_edit.rego | 127 + .backup/block_no_verify.rego | 26 + .backup/block_silent_none_return.rego | 146 + .backup/block_test_loops_conditionals.rego | 175 + .backup/block_tests_quality.rego | 130 + .backup/block_tests_quality_bash.rego | 27 + .backup/example.rego | 33 + .backup/prevent_any_type.rego | 181 + .backup/prevent_type_suppression.rego | 176 + .../warn_baselines_edit.rego | 34 +- .backup/warn_baselines_edit_bash.rego | 26 + .backup/warn_large_file.rego | 175 + .claude/ralph-loop.local.md | 11 - .claudectx/codefixes.md | 377 - .cupcake/helpers/commands.rego | 49 + .../policies/opencode/ban_stdlib_logger.rego | 17 +- .../opencode/block_assertion_roulette.rego | 17 +- .../policies/opencode/block_biome_ignore.rego | 17 +- .../opencode/block_biome_ignore_bash.rego | 2 +- .../block_broad_exception_handler.rego | 17 +- .../block_code_quality_test_bash.rego | 2 +- .../block_code_quality_test_edits.rego | 15 +- .../block_code_quality_test_serena.rego | 19 +- ...block_code_quality_test_serena_plugin.rego | 19 +- .../opencode/block_datetime_now_fallback.rego | 17 +- .../opencode/block_default_value_swallow.rego | 17 +- .../opencode/block_duplicate_fixtures.rego | 17 +- .../block_linter_config_frontend.rego | 15 +- .../block_linter_config_frontend_bash.rego | 2 +- .../opencode/block_linter_config_python.rego | 15 +- .../block_linter_config_python_bash.rego | 2 +- .../opencode/block_magic_numbers.rego | 17 +- .../opencode/block_makefile_bash.rego | 2 +- .../opencode/block_makefile_edit.rego | 15 +- .../policies/opencode/block_no_verify.rego | 2 +- .../opencode/block_silent_none_return.rego | 17 +- .../block_test_loops_conditionals.rego | 17 +- .../opencode/block_tests_quality.rego | 15 +- .../opencode/block_tests_quality_bash.rego | 2 +- .../builtins/git_block_no_verify.rego | 107 + .../opencode/builtins/git_pre_check.rego | 121 + .../opencode_always_inject_on_prompt.rego | 60 + .../opencode_enforce_full_file_read.rego | 63 + .../opencode/builtins/post_edit_check.rego | 135 + .../opencode/builtins/protected_paths.rego | 380 + .../rulebook_security_guardrails.rego | 231 + .cupcake/policies/opencode/example.rego | 33 + .../policies/opencode/prevent_any_type.rego | 17 +- .../opencode/prevent_type_suppression.rego | 17 +- .../opencode/warn_baselines_edit.rego | 15 +- .../opencode/warn_baselines_edit_bash.rego | 2 +- .../policies/opencode/warn_large_file.rego | 17 +- .cupcake/rulebook.yml | 216 + .cupcake/system/evaluate.rego | 20 +- .openagent_context.json | 11 + .opencode/plugin/cupcake.js | 380 + client/biome.json | 2 +- client/src-tauri/src/commands/analytics.rs | 35 + client/src-tauri/src/commands/mod.rs | 4 + client/src-tauri/src/commands/tasks.rs | 39 + client/src-tauri/src/grpc/client/analytics.rs | 80 + client/src-tauri/src/grpc/client/mod.rs | 4 + client/src-tauri/src/grpc/client/tasks.rs | 144 + client/src-tauri/src/grpc/noteflow.rs | 278 + client/src-tauri/src/grpc/types/analytics.rs | 34 + client/src-tauri/src/grpc/types/mod.rs | 2 + client/src-tauri/src/grpc/types/tasks.rs | 43 + client/src-tauri/src/lib.rs | 6 + client/src/api/adapters/tauri/api.ts | 4 + client/src/api/adapters/tauri/constants.ts | 6 + .../api/adapters/tauri/sections/analytics.ts | 32 + .../src/api/adapters/tauri/sections/tasks.ts | 32 + .../api/adapters/tauri/sections/webhooks.ts | 2 +- client/src/api/interface.ts | 23 +- client/src/api/types/enums.ts | 11 + client/src/api/types/features/analytics.ts | 49 + client/src/api/types/features/asr.ts | 8 +- client/src/api/types/features/index.ts | 4 +- client/src/api/types/features/tasks.ts | 52 + client/src/api/types/requests/integrations.ts | 28 +- .../features/analytics/logs-tab.tsx | 5 +- .../features/analytics/performance-tab.tsx | 2 +- client/src/pages/Analytics.tsx | 184 +- client/src/pages/People.tsx | 115 +- client/src/pages/Tasks.tsx | 283 +- .../pages/meeting-detail/entities-panel.tsx | 6 +- client/src/pages/meeting-detail/index.tsx | 85 +- .../pages/meeting-detail/summary-panel.tsx | 76 +- cupcake_tests/001_block_no_verify_deny.json | 9 + cupcake_tests/002_block_no_verify_allow.json | 9 + .../003_block_makefile_edit_deny.json | 10 + .../004_block_linter_config_python_deny.json | 10 + ...nter_config_python_pyrightconfig_deny.json | 10 + ...006_block_linter_config_frontend_deny.json | 10 + ..._linter_config_frontend_tsconfig_deny.json | 10 + .../008_block_tests_quality_deny.json | 10 + .../009_warn_baselines_edit_deny.json | 10 + ...10_block_code_quality_test_edits_deny.json | 10 + ...011_block_code_quality_test_bash_deny.json | 9 + .../012_block_biome_ignore_deny.json | 10 + ...013_block_biome_ignore_ts_ignore_deny.json | 10 + .../014_block_biome_ignore_allow.json | 10 + .../015_block_biome_ignore_bash_deny.json | 9 + .../016_block_magic_numbers_deny.json | 10 + ...7_block_magic_numbers_constants_allow.json | 10 + docs/plans/2026-01-21-bugfinder-design.md | 66 + .../Bugfinder/rpt1/Analytics - Meetings.md | 9 + .../Bugfinder/rpt1/Analytics - Meetings.png | Bin 0 -> 176400 bytes .../Bugfinder/rpt2/Analytics - Performance.md | 10 + .../rpt2/Analytics - Performance.png | Bin 0 -> 197408 bytes .../Bugfinder/rpt3/Analytics - Speech.md | 7 + .../Bugfinder/rpt3/Analytics - Speech.png | Bin 0 -> 137798 bytes .../phase-ongoing/Bugfinder/rpt4/Home Page.md | 16 + .../Bugfinder/rpt4/Home Page.png | Bin 0 -> 172933 bytes .../phase-ongoing/Bugfinder/rpt5/Meetings.md | 5 + .../phase-ongoing/Bugfinder/rpt5/Meetings.png | Bin 0 -> 145313 bytes .../phase-ongoing/Bugfinder/rpt6/People.md | 7 + .../phase-ongoing/Bugfinder/rpt6/People.png | Bin 0 -> 100303 bytes .../Bugfinder/rpt7/Post Meeting.md | 18 + .../Bugfinder/rpt7/Post Meeting.png | Bin 0 -> 224878 bytes .../phase-ongoing/Bugfinder/rpt8/Tasks.md | 12 + .../phase-ongoing/Bugfinder/rpt8/Tasks.png | Bin 0 -> 112372 bytes .../Bugfinder/strategy-b-implementation.md | 399 + repomix-output.md | 29103 ++-------------- repomix.config.json | 4 +- run_cupcake_tests.sh | 182 + .../services/analytics/__init__.py | 5 + .../application/services/analytics/service.py | 180 + .../application/services/tasks/__init__.py | 5 + .../application/services/tasks/service.py | 181 + src/noteflow/config/constants/errors.py | 2 +- src/noteflow/domain/constants/fields.py | 1 + src/noteflow/domain/constants/placeholders.py | 8 +- src/noteflow/domain/entities/__init__.py | 7 + src/noteflow/domain/entities/analytics.py | 72 + src/noteflow/domain/entities/meeting.py | 66 +- src/noteflow/domain/entities/task.py | 95 + src/noteflow/grpc/_grpc_compat.py | 4 +- src/noteflow/grpc/config/config.py | 21 +- src/noteflow/grpc/mixins/__init__.py | 4 + .../grpc/mixins/_repository_protocols.py | 20 + src/noteflow/grpc/mixins/_servicer_state.py | 6 +- src/noteflow/grpc/mixins/analytics_mixin.py | 133 + .../grpc/mixins/converters/__init__.py | 14 + .../grpc/mixins/converters/_id_parsing.py | 29 + .../grpc/mixins/converters/_task_analytics.py | 69 + src/noteflow/grpc/mixins/errors/_parse.py | 12 +- src/noteflow/grpc/mixins/protocols.py | 4 + src/noteflow/grpc/mixins/streaming/_mixin.py | 6 +- .../grpc/mixins/streaming/_session.py | 187 +- .../grpc/mixins/streaming/_session_helpers.py | 3 +- .../mixins/streaming/_session_init_helpers.py | 138 + .../mixins/summarization/_generation_mixin.py | 26 +- .../summarization/_template_resolution.py | 8 +- src/noteflow/grpc/mixins/tasks.py | 243 + src/noteflow/grpc/proto/noteflow.proto | 114 + src/noteflow/grpc/proto/noteflow_pb2.py | 80 +- src/noteflow/grpc/proto/noteflow_pb2.pyi | 3920 ++- src/noteflow/grpc/proto/noteflow_pb2_grpc.py | 174 + src/noteflow/grpc/server/__init__.py | 6 + src/noteflow/grpc/server/internal/services.py | 26 + src/noteflow/grpc/service.py | 12 +- .../infrastructure/ner/post_processing.py | 3 +- ...v6w7x8y9z0a1_add_task_analytics_indexes.py | 48 + .../persistence/models/_base.py | 1 + .../persistence/models/_strings.py | 4 +- .../persistence/repositories/__init__.py | 4 + .../repositories/_analytics_queries.py | 298 + .../repositories/analytics_repo.py | 128 + .../persistence/repositories/task_repo.py | 206 + .../unit_of_work/_optional_repos_mixin.py | 17 +- .../persistence/unit_of_work/unit_of_work.py | 10 + .../summarization/template_renderer.py | 3 +- test.json | 10 + tests/application/test_analytics_service.py | 336 + tests/application/test_task_service.py | 393 + tests/conftest.py | 14 +- tests/grpc/test_analytics_mixin.py | 241 + tests/grpc/test_tasks_mixin.py | 307 + 197 files changed, 18236 insertions(+), 27240 deletions(-) create mode 100644 .backup/ban_stdlib_logger.rego create mode 100644 .backup/block_assertion_roulette.rego create mode 100644 .backup/block_biome_ignore.rego create mode 100644 .backup/block_biome_ignore_bash.rego create mode 100644 .backup/block_broad_exception_handler.rego create mode 100644 .backup/block_code_quality_test_bash.rego create mode 100644 .backup/block_code_quality_test_edits.rego create mode 100644 .backup/block_code_quality_test_serena.rego create mode 100644 .backup/block_code_quality_test_serena_plugin.rego create mode 100644 .backup/block_datetime_now_fallback.rego create mode 100644 .backup/block_default_value_swallow.rego create mode 100644 .backup/block_duplicate_fixtures.rego create mode 100644 .backup/block_linter_config_frontend.rego create mode 100644 .backup/block_linter_config_frontend_bash.rego create mode 100644 .backup/block_linter_config_python.rego create mode 100644 .backup/block_linter_config_python_bash.rego create mode 100644 .backup/block_magic_numbers.rego create mode 100644 .backup/block_makefile_bash.rego create mode 100644 .backup/block_makefile_edit.rego create mode 100644 .backup/block_no_verify.rego create mode 100644 .backup/block_silent_none_return.rego create mode 100644 .backup/block_test_loops_conditionals.rego create mode 100644 .backup/block_tests_quality.rego create mode 100644 .backup/block_tests_quality_bash.rego create mode 100644 .backup/example.rego create mode 100644 .backup/prevent_any_type.rego create mode 100644 .backup/prevent_type_suppression.rego rename .cupcake/policies/.inactive/warn_new_file_search.rego => .backup/warn_baselines_edit.rego (75%) create mode 100644 .backup/warn_baselines_edit_bash.rego create mode 100644 .backup/warn_large_file.rego delete mode 100644 .claude/ralph-loop.local.md create mode 100644 .cupcake/helpers/commands.rego create mode 100644 .cupcake/policies/opencode/builtins/git_block_no_verify.rego create mode 100644 .cupcake/policies/opencode/builtins/git_pre_check.rego create mode 100644 .cupcake/policies/opencode/builtins/opencode_always_inject_on_prompt.rego create mode 100644 .cupcake/policies/opencode/builtins/opencode_enforce_full_file_read.rego create mode 100644 .cupcake/policies/opencode/builtins/post_edit_check.rego create mode 100644 .cupcake/policies/opencode/builtins/protected_paths.rego create mode 100644 .cupcake/policies/opencode/builtins/rulebook_security_guardrails.rego create mode 100644 .cupcake/policies/opencode/example.rego create mode 100644 .cupcake/rulebook.yml create mode 100644 .openagent_context.json create mode 100644 .opencode/plugin/cupcake.js create mode 100644 client/src-tauri/src/commands/analytics.rs create mode 100644 client/src-tauri/src/commands/tasks.rs create mode 100644 client/src-tauri/src/grpc/client/analytics.rs create mode 100644 client/src-tauri/src/grpc/client/tasks.rs create mode 100644 client/src-tauri/src/grpc/types/analytics.rs create mode 100644 client/src-tauri/src/grpc/types/tasks.rs create mode 100644 client/src/api/adapters/tauri/sections/analytics.ts create mode 100644 client/src/api/adapters/tauri/sections/tasks.ts create mode 100644 client/src/api/types/features/analytics.ts create mode 100644 client/src/api/types/features/tasks.ts create mode 100644 cupcake_tests/001_block_no_verify_deny.json create mode 100644 cupcake_tests/002_block_no_verify_allow.json create mode 100644 cupcake_tests/003_block_makefile_edit_deny.json create mode 100644 cupcake_tests/004_block_linter_config_python_deny.json create mode 100644 cupcake_tests/005_block_linter_config_python_pyrightconfig_deny.json create mode 100644 cupcake_tests/006_block_linter_config_frontend_deny.json create mode 100644 cupcake_tests/007_block_linter_config_frontend_tsconfig_deny.json create mode 100644 cupcake_tests/008_block_tests_quality_deny.json create mode 100644 cupcake_tests/009_warn_baselines_edit_deny.json create mode 100644 cupcake_tests/010_block_code_quality_test_edits_deny.json create mode 100644 cupcake_tests/011_block_code_quality_test_bash_deny.json create mode 100644 cupcake_tests/012_block_biome_ignore_deny.json create mode 100644 cupcake_tests/013_block_biome_ignore_ts_ignore_deny.json create mode 100644 cupcake_tests/014_block_biome_ignore_allow.json create mode 100644 cupcake_tests/015_block_biome_ignore_bash_deny.json create mode 100644 cupcake_tests/016_block_magic_numbers_deny.json create mode 100644 cupcake_tests/017_block_magic_numbers_constants_allow.json create mode 100644 docs/plans/2026-01-21-bugfinder-design.md create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt1/Analytics - Meetings.md create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt1/Analytics - Meetings.png create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt2/Analytics - Performance.md create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt2/Analytics - Performance.png create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt3/Analytics - Speech.md create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt3/Analytics - Speech.png create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt4/Home Page.md create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt4/Home Page.png create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt5/Meetings.md create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt5/Meetings.png create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt6/People.md create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt6/People.png create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt7/Post Meeting.md create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt7/Post Meeting.png create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt8/Tasks.md create mode 100644 docs/sprints/phase-ongoing/Bugfinder/rpt8/Tasks.png create mode 100644 docs/sprints/phase-ongoing/Bugfinder/strategy-b-implementation.md create mode 100755 run_cupcake_tests.sh create mode 100644 src/noteflow/application/services/analytics/__init__.py create mode 100644 src/noteflow/application/services/analytics/service.py create mode 100644 src/noteflow/application/services/tasks/__init__.py create mode 100644 src/noteflow/application/services/tasks/service.py create mode 100644 src/noteflow/domain/entities/analytics.py create mode 100644 src/noteflow/domain/entities/task.py create mode 100644 src/noteflow/grpc/mixins/analytics_mixin.py create mode 100644 src/noteflow/grpc/mixins/converters/_task_analytics.py create mode 100644 src/noteflow/grpc/mixins/streaming/_session_init_helpers.py create mode 100644 src/noteflow/grpc/mixins/tasks.py create mode 100644 src/noteflow/infrastructure/persistence/migrations/versions/v6w7x8y9z0a1_add_task_analytics_indexes.py create mode 100644 src/noteflow/infrastructure/persistence/repositories/_analytics_queries.py create mode 100644 src/noteflow/infrastructure/persistence/repositories/analytics_repo.py create mode 100644 src/noteflow/infrastructure/persistence/repositories/task_repo.py create mode 100644 test.json create mode 100644 tests/application/test_analytics_service.py create mode 100644 tests/application/test_task_service.py create mode 100644 tests/grpc/test_analytics_mixin.py create mode 100644 tests/grpc/test_tasks_mixin.py diff --git a/.backup/ban_stdlib_logger.rego b/.backup/ban_stdlib_logger.rego new file mode 100644 index 0000000..d6f372f --- /dev/null +++ b/.backup/ban_stdlib_logger.rego @@ -0,0 +1,163 @@ +# METADATA +# scope: package +# title: Ban Stdlib Logger +# description: Blocks use of stdlib logging in Python code +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.ban_stdlib_logger + +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +is_python_patch(patch_text) if { + contains(patch_text, ".py") +} + +is_python_patch(patch_text) if { + contains(patch_text, ".pyi") +} + +stdlib_logger_pattern := `import logging|from logging import|logging\.getLogger` +file_path_pattern := `\.py$` + +# Block Write/Edit operations that introduce stdlib logging + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + + content := new_content + content != null + regex.match(stdlib_logger_pattern, content) + + decision := { + "rule_id": "PY-LOG-001", + "reason": "Stdlib logging usage is prohibited. Use the project logging utilities instead.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + + content := edit_new_content(edit) + content != null + regex.match(stdlib_logger_pattern, content) + + decision := { + "rule_id": "PY-LOG-001", + "reason": "Stdlib logging usage is prohibited. Use the project logging utilities instead.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + lower_patch := lower(patch) + is_python_patch(lower_patch) + regex.match(stdlib_logger_pattern, patch) + + decision := { + "rule_id": "PY-LOG-001", + "reason": "Stdlib logging usage is prohibited. Use the project logging utilities instead.", + "severity": "HIGH" + } +} diff --git a/.backup/block_assertion_roulette.rego b/.backup/block_assertion_roulette.rego new file mode 100644 index 0000000..8c2671d --- /dev/null +++ b/.backup/block_assertion_roulette.rego @@ -0,0 +1,175 @@ +# METADATA +# scope: package +# title: Block Assertion Roulette +# description: Blocks multiple bare asserts in a single test without messages +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_assertion_roulette +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "+++ b/") + path := replace(line, "+++ b/", "") + regex.match(pattern, path) +} + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "--- a/") + path := replace(line, "--- a/", "") + regex.match(pattern, path) +} + +file_path_pattern := `tests?/.*\.py$` +assertion_pattern := `^\s*assert\s+[^,\n]+\n\s*assert\s+[^,\n]+$` + +# Block Write/Edit operations that introduce assertion roulette + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + + content := new_content + content != null + regex.match(assertion_pattern, content) + + decision := { + "rule_id": "TEST-ASSERT-001", + "reason": "Multiple bare asserts detected. Use one assert per test or add assertion messages.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + + content := edit_new_content(edit) + content != null + regex.match(assertion_pattern, content) + + decision := { + "rule_id": "TEST-ASSERT-001", + "reason": "Multiple bare asserts detected. Use one assert per test or add assertion messages.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + patch_targets_path(file_path_pattern) + + regex.match(assertion_pattern, patch) + + decision := { + "rule_id": "TEST-ASSERT-001", + "reason": "Multiple bare asserts detected. Use one assert per test or add assertion messages.", + "severity": "HIGH" + } +} diff --git a/.backup/block_biome_ignore.rego b/.backup/block_biome_ignore.rego new file mode 100644 index 0000000..35516ad --- /dev/null +++ b/.backup/block_biome_ignore.rego @@ -0,0 +1,175 @@ +# METADATA +# scope: package +# title: Block Biome Ignore +# description: Blocks ignore directives in JS/TS files +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_biome_ignore +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "+++ b/") + path := replace(line, "+++ b/", "") + regex.match(pattern, path) +} + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "--- a/") + path := replace(line, "--- a/", "") + regex.match(pattern, path) +} + +file_path_pattern := `\.(js|jsx|ts|tsx|mjs|cjs)$` +ignore_pattern := `//\s*biome-ignore|//\s*@ts-ignore|//\s*@ts-expect-error|//\s*@ts-nocheck|//\s*eslint-disable|/\*\s*eslint-disable` + +# Block Write/Edit operations that introduce ignore directives + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + + content := new_content + content != null + regex.match(ignore_pattern, content) + + decision := { + "rule_id": "TS-LINT-002", + "reason": "Ignore directives for Biome/TypeScript/ESLint are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + + content := edit_new_content(edit) + content != null + regex.match(ignore_pattern, content) + + decision := { + "rule_id": "TS-LINT-002", + "reason": "Ignore directives for Biome/TypeScript/ESLint are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + patch_targets_path(file_path_pattern) + + regex.match(ignore_pattern, patch) + + decision := { + "rule_id": "TS-LINT-002", + "reason": "Ignore directives for Biome/TypeScript/ESLint are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_biome_ignore_bash.rego b/.backup/block_biome_ignore_bash.rego new file mode 100644 index 0000000..e88d33d --- /dev/null +++ b/.backup/block_biome_ignore_bash.rego @@ -0,0 +1,26 @@ +# METADATA +# scope: package +# title: Block Biome Ignore (Bash) +# description: Blocks Bash commands that add ignore directives to JS/TS files +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.opencode.block_biome_ignore_bash +import rego.v1 + +ignore_pattern := `(biome-ignore|@ts-ignore|@ts-expect-error|@ts-nocheck|eslint-disable).*\.(js|jsx|ts|tsx|mjs|cjs)` + +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := input.tool_input.command + regex.match(ignore_pattern, command) + + decision := { + "rule_id": "TS-LINT-001", + "reason": "Ignore directives for Biome/TypeScript/ESLint are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_broad_exception_handler.rego b/.backup/block_broad_exception_handler.rego new file mode 100644 index 0000000..c706d2f --- /dev/null +++ b/.backup/block_broad_exception_handler.rego @@ -0,0 +1,146 @@ +# METADATA +# scope: package +# title: Block Broad Exception Handler +# description: Blocks bare Exception handlers that only log +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_broad_exception_handler +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +handler_pattern := `except\s+Exception\s*(?:as\s+\w+)?:\s*\n\s+(?:logger\.|logging\.)` + +# Block Write/Edit operations that introduce broad exception handlers + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + content := new_content + content != null + regex.match(handler_pattern, content) + + decision := { + "rule_id": "PY-EXC-001", + "reason": "Broad Exception handlers that only log are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + content := edit_new_content(edit) + content != null + regex.match(handler_pattern, content) + + decision := { + "rule_id": "PY-EXC-001", + "reason": "Broad Exception handlers that only log are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + + regex.match(handler_pattern, patch) + + decision := { + "rule_id": "PY-EXC-001", + "reason": "Broad Exception handlers that only log are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_code_quality_test_bash.rego b/.backup/block_code_quality_test_bash.rego new file mode 100644 index 0000000..692c70b --- /dev/null +++ b/.backup/block_code_quality_test_bash.rego @@ -0,0 +1,26 @@ +# METADATA +# scope: package +# title: Block Code Quality Test (Bash) +# description: Blocks Bash edits to src/test/code-quality.test.ts +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.opencode.block_code_quality_test_bash +import rego.v1 + +pattern := `(sed|awk|cat\s*>|echo\s*>|tee|cp\s+.*code-quality\.test\.ts|mv\s+.*code-quality\.test\.ts|rm\s+.*code-quality\.test\.ts|>|>>).*code-quality\.test\.ts|code-quality\.test\.ts.*(>|>>|\|.*tee)` + +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := input.tool_input.command + regex.match(pattern, command) + + decision := { + "rule_id": "TS-QUALITY-001", + "reason": "Direct edits to src/test/code-quality.test.ts are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_code_quality_test_edits.rego b/.backup/block_code_quality_test_edits.rego new file mode 100644 index 0000000..7f5ced7 --- /dev/null +++ b/.backup/block_code_quality_test_edits.rego @@ -0,0 +1,127 @@ +# METADATA +# scope: package +# title: Block Code Quality Test (Edits) +# description: Blocks file edits to src/test/code-quality.test.ts +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_code_quality_test_edits +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +file_path_pattern := `src/test/code-quality\.test\.ts$` + +# Block Write/Edit operations targeting code-quality test file + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + + decision := { + "rule_id": "TS-QUALITY-002", + "reason": "Direct edits to src/test/code-quality.test.ts are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + + decision := { + "rule_id": "TS-QUALITY-002", + "reason": "Direct edits to src/test/code-quality.test.ts are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_code_quality_test_serena.rego b/.backup/block_code_quality_test_serena.rego new file mode 100644 index 0000000..cff4ce8 --- /dev/null +++ b/.backup/block_code_quality_test_serena.rego @@ -0,0 +1,126 @@ +# METADATA +# scope: package +# title: Block Code Quality Test (Serena) +# description: Blocks Serena edits to src/test/code-quality.test.ts +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: +# - McpSerenaReplaceContent +# - McpSerenaReplaceSymbolBody +# - McpSerenaCreateTextFile +# - McpSerenaInsertBeforeSymbol +# - McpSerenaInsertAfterSymbol +# - McpSerenaRenameSymbol +package cupcake.policies.opencode.block_code_quality_test_serena +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +file_path_pattern := `(^|/)src/test/code-quality\.test\.ts$` + +get_relative_path := path if { + path := tool_input.relative_path +} else := path if { + path := tool_input.path +} else := "" + +# Block Serena operations targeting code-quality test file + +deny contains decision if { + input.hook_event_name == "PreToolUse" + + tool_names := {"McpSerenaReplaceContent", "McpSerenaReplaceSymbolBody", "McpSerenaCreateTextFile", "McpSerenaInsertBeforeSymbol", "McpSerenaInsertAfterSymbol", "McpSerenaRenameSymbol"} + tool_name in tool_names + + file_path := get_relative_path + regex.match(file_path_pattern, file_path) + + decision := { + "rule_id": "TS-QUALITY-003", + "reason": "Direct edits to src/test/code-quality.test.ts are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_code_quality_test_serena_plugin.rego b/.backup/block_code_quality_test_serena_plugin.rego new file mode 100644 index 0000000..fb87a2b --- /dev/null +++ b/.backup/block_code_quality_test_serena_plugin.rego @@ -0,0 +1,126 @@ +# METADATA +# scope: package +# title: Block Code Quality Test (Serena Plugin) +# description: Blocks Serena plugin edits to src/test/code-quality.test.ts +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: +# - McpPluginSerenaSerenaReplaceContent +# - McpPluginSerenaSerenaReplaceSymbolBody +# - McpPluginSerenaSerenaCreateTextFile +# - McpPluginSerenaSerenaInsertBeforeSymbol +# - McpPluginSerenaSerenaInsertAfterSymbol +# - McpPluginSerenaSerenaRenameSymbol +package cupcake.policies.opencode.block_code_quality_test_serena_plugin +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +file_path_pattern := `(^|/)src/test/code-quality\.test\.ts$` + +get_relative_path := path if { + path := tool_input.relative_path +} else := path if { + path := tool_input.path +} else := "" + +# Block Serena plugin operations targeting code-quality test file + +deny contains decision if { + input.hook_event_name == "PreToolUse" + + tool_names := {"McpPluginSerenaSerenaReplaceContent", "McpPluginSerenaSerenaReplaceSymbolBody", "McpPluginSerenaSerenaCreateTextFile", "McpPluginSerenaSerenaInsertBeforeSymbol", "McpPluginSerenaSerenaInsertAfterSymbol", "McpPluginSerenaSerenaRenameSymbol"} + tool_name in tool_names + + file_path := get_relative_path + regex.match(file_path_pattern, file_path) + + decision := { + "rule_id": "TS-QUALITY-004", + "reason": "Direct edits to src/test/code-quality.test.ts are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_datetime_now_fallback.rego b/.backup/block_datetime_now_fallback.rego new file mode 100644 index 0000000..f77719c --- /dev/null +++ b/.backup/block_datetime_now_fallback.rego @@ -0,0 +1,146 @@ +# METADATA +# scope: package +# title: Block datetime.now Fallback +# description: Blocks returning datetime.now() as a fallback +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_datetime_now_fallback +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +pattern := `return\s+datetime\.now\s*\(` + +# Block Write/Edit operations that introduce datetime.now fallback + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + content := new_content + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "PY-DT-001", + "reason": "Returning datetime.now() as a fallback is prohibited. Use a caller-provided timestamp.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + content := edit_new_content(edit) + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "PY-DT-001", + "reason": "Returning datetime.now() as a fallback is prohibited. Use a caller-provided timestamp.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + + regex.match(pattern, patch) + + decision := { + "rule_id": "PY-DT-001", + "reason": "Returning datetime.now() as a fallback is prohibited. Use a caller-provided timestamp.", + "severity": "HIGH" + } +} diff --git a/.backup/block_default_value_swallow.rego b/.backup/block_default_value_swallow.rego new file mode 100644 index 0000000..b051cd3 --- /dev/null +++ b/.backup/block_default_value_swallow.rego @@ -0,0 +1,146 @@ +# METADATA +# scope: package +# title: Block Default Value Swallow +# description: Blocks exception handlers that warn and return defaults +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_default_value_swallow +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +pattern := `except\s+\w*(?:Error|Exception).*?:\s*\n\s+.*?(?:logger\.|logging\.).*?(?:warning|warn).*?\n\s+return\s+(?:\w+Settings|Defaults?\(|default_|\{[^}]*\}|[A-Z_]+_DEFAULT)` + +# Block Write/Edit operations that swallow exceptions with defaults + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + content := new_content + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "PY-EXC-002", + "reason": "Swallowing exceptions and returning defaults is prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + content := edit_new_content(edit) + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "PY-EXC-002", + "reason": "Swallowing exceptions and returning defaults is prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + + regex.match(pattern, patch) + + decision := { + "rule_id": "PY-EXC-002", + "reason": "Swallowing exceptions and returning defaults is prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_duplicate_fixtures.rego b/.backup/block_duplicate_fixtures.rego new file mode 100644 index 0000000..bf974af --- /dev/null +++ b/.backup/block_duplicate_fixtures.rego @@ -0,0 +1,179 @@ +# METADATA +# scope: package +# title: Block Duplicate Fixtures +# description: Blocks redefining global pytest fixtures outside conftest.py +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_duplicate_fixtures +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "+++ b/") + path := replace(line, "+++ b/", "") + regex.match(pattern, path) +} + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "--- a/") + path := replace(line, "--- a/", "") + regex.match(pattern, path) +} + +file_path_pattern := `tests?/.*\.py$` +conftest_pattern := `tests?/conftest\.py$` +fixture_pattern := `@pytest\.fixture[^@]*\ndef\s+(mock_uow|crypto|meetings_dir|webhook_config|webhook_config_all_events|sample_datetime|calendar_settings|meeting_id|sample_meeting|recording_meeting|mock_grpc_context|mock_asr_engine|mock_optional_extras)\s*\(` + +# Block Write/Edit operations that introduce duplicate fixtures + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + not regex.match(conftest_pattern, file_path) + + content := new_content + content != null + regex.match(fixture_pattern, content) + + decision := { + "rule_id": "TEST-FIX-001", + "reason": "Duplicate global fixtures are prohibited. Use tests/conftest.py fixtures instead.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + not regex.match(conftest_pattern, file_path) + + content := edit_new_content(edit) + content != null + regex.match(fixture_pattern, content) + + decision := { + "rule_id": "TEST-FIX-001", + "reason": "Duplicate global fixtures are prohibited. Use tests/conftest.py fixtures instead.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + patch_targets_path(file_path_pattern) + not regex.match(conftest_pattern, patch) + + regex.match(fixture_pattern, patch) + + decision := { + "rule_id": "TEST-FIX-001", + "reason": "Duplicate global fixtures are prohibited. Use tests/conftest.py fixtures instead.", + "severity": "HIGH" + } +} diff --git a/.backup/block_linter_config_frontend.rego b/.backup/block_linter_config_frontend.rego new file mode 100644 index 0000000..3bff2fe --- /dev/null +++ b/.backup/block_linter_config_frontend.rego @@ -0,0 +1,129 @@ +# METADATA +# scope: package +# title: Block Frontend Linter Config +# description: Blocks edits to frontend linter config files +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_linter_config_frontend +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +file_path_pattern := `(^|/)client/.*(?:\.?eslint(?:rc|\.config).*|\.?prettier(?:rc|\.config).*|biome\.json|tsconfig\.json|\.?rustfmt\.toml|\.?clippy\.toml)$` + +# Block Write/Edit operations targeting frontend linter configs + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + not contains(lower(file_path), "node_modules/") + + decision := { + "rule_id": "TS-CONFIG-002", + "reason": "Frontend linter/config file edits are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + not contains(lower(file_path), "node_modules/") + + decision := { + "rule_id": "TS-CONFIG-002", + "reason": "Frontend linter/config file edits are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_linter_config_frontend_bash.rego b/.backup/block_linter_config_frontend_bash.rego new file mode 100644 index 0000000..a356217 --- /dev/null +++ b/.backup/block_linter_config_frontend_bash.rego @@ -0,0 +1,26 @@ +# METADATA +# scope: package +# title: Block Frontend Linter Config (Bash) +# description: Blocks Bash edits to frontend linter config files +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.opencode.block_linter_config_frontend_bash +import rego.v1 + +pattern := `(rm|mv|cp|sed|awk|chmod|chown|touch|truncate|tee|>|>>)\s.*client/.*(?:biome\.json|tsconfig\.json|\.?eslint(?:rc|\.config)|\.?prettier(?:rc|\.config)|\.?rustfmt\.toml|\.?clippy\.toml)` + +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := input.tool_input.command + regex.match(pattern, command) + + decision := { + "rule_id": "TS-CONFIG-001", + "reason": "Frontend linter/config file edits are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_linter_config_python.rego b/.backup/block_linter_config_python.rego new file mode 100644 index 0000000..f2f6479 --- /dev/null +++ b/.backup/block_linter_config_python.rego @@ -0,0 +1,129 @@ +# METADATA +# scope: package +# title: Block Python Linter Config +# description: Blocks edits to Python linter config files +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_linter_config_python +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +file_path_pattern := `(?:pyproject\.toml|\.?ruff\.toml|\.?pyrightconfig\.json|\.?mypy\.ini|setup\.cfg|\.flake8|tox\.ini|\.?pylintrc)$` + +# Block Write/Edit operations targeting Python linter configs + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + not contains(lower(file_path), "/.venv/") + + decision := { + "rule_id": "PY-CONFIG-002", + "reason": "Python linter/config file edits are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + not contains(lower(file_path), "/.venv/") + + decision := { + "rule_id": "PY-CONFIG-002", + "reason": "Python linter/config file edits are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_linter_config_python_bash.rego b/.backup/block_linter_config_python_bash.rego new file mode 100644 index 0000000..65229c7 --- /dev/null +++ b/.backup/block_linter_config_python_bash.rego @@ -0,0 +1,26 @@ +# METADATA +# scope: package +# title: Block Python Linter Config (Bash) +# description: Blocks Bash edits to Python linter config files +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.opencode.block_linter_config_python_bash +import rego.v1 + +pattern := `(rm|mv|cp|sed|awk|chmod|chown|touch|truncate|tee|>|>>)\s.*(?:pyproject\.toml|\.?ruff\.toml|\.?pyrightconfig\.json|\.?mypy\.ini|setup\.cfg|\.flake8|tox\.ini|\.?pylintrc)` + +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := input.tool_input.command + regex.match(pattern, command) + + decision := { + "rule_id": "PY-CONFIG-001", + "reason": "Python linter/config file edits are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_magic_numbers.rego b/.backup/block_magic_numbers.rego new file mode 100644 index 0000000..54bac75 --- /dev/null +++ b/.backup/block_magic_numbers.rego @@ -0,0 +1,178 @@ +# METADATA +# scope: package +# title: Block Magic Numbers +# description: Blocks introduction of magic numbers outside constants modules +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_magic_numbers +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "+++ b/") + path := replace(line, "+++ b/", "") + regex.match(pattern, path) +} + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "--- a/") + path := replace(line, "--- a/", "") + regex.match(pattern, path) +} + +file_path_pattern := `\.(py|ts|tsx|js|jsx)$` +number_pattern := `(?:timeout|delay|interval|duration|limit|max|min|size|count|threshold|retry|retries|attempts|port|width|height|margin|padding|offset|index|length|capacity|buffer|batch|chunk|page|rate|fps|dpi|quality|level|priority|weight|score|factor|multiplier|divisor|percentage|ratio|scale)\s*[=:]\s*([2-9]|[1-9]\d+)|(?:if|while|for|elif|range|slice|sleep|wait|setTimeout|setInterval)\s*\([^)]*([2-9]|[1-9]\d+)` + +# Block Write/Edit operations that introduce magic numbers + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + not contains(lower(file_path), "constants") + + content := new_content + content != null + regex.match(number_pattern, content) + + decision := { + "rule_id": "STYLE-001", + "reason": "Magic numbers are prohibited. Use named constants.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + not contains(lower(file_path), "constants") + + content := edit_new_content(edit) + content != null + regex.match(number_pattern, content) + + decision := { + "rule_id": "STYLE-001", + "reason": "Magic numbers are prohibited. Use named constants.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + patch_targets_path(file_path_pattern) + not contains(lower(patch), "constants") + + regex.match(number_pattern, patch) + + decision := { + "rule_id": "STYLE-001", + "reason": "Magic numbers are prohibited. Use named constants.", + "severity": "HIGH" + } +} diff --git a/.backup/block_makefile_bash.rego b/.backup/block_makefile_bash.rego new file mode 100644 index 0000000..15e2b9a --- /dev/null +++ b/.backup/block_makefile_bash.rego @@ -0,0 +1,26 @@ +# METADATA +# scope: package +# title: Block Makefile Edit (Bash) +# description: Blocks Bash edits to Makefile +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.opencode.block_makefile_bash +import rego.v1 + +pattern := `(>>?\s*Makefile|sed\s+.*-i.*Makefile|sed\s+-i.*Makefile|perl\s+-[pi].*Makefile|tee\s+.*Makefile|(mv|cp)\s+\S+\s+Makefile\b|>\s*Makefile)` + +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := input.tool_input.command + regex.match(pattern, command) + + decision := { + "rule_id": "BUILD-001", + "reason": "Makefile edits are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_makefile_edit.rego b/.backup/block_makefile_edit.rego new file mode 100644 index 0000000..9f7da15 --- /dev/null +++ b/.backup/block_makefile_edit.rego @@ -0,0 +1,127 @@ +# METADATA +# scope: package +# title: Block Makefile Edit +# description: Blocks file edits to Makefile +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_makefile_edit +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +file_path_pattern := `(?:^|/)Makefile$` + +# Block Write/Edit operations targeting Makefile + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + + decision := { + "rule_id": "BUILD-002", + "reason": "Makefile edits are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + + decision := { + "rule_id": "BUILD-002", + "reason": "Makefile edits are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_no_verify.rego b/.backup/block_no_verify.rego new file mode 100644 index 0000000..d399d1f --- /dev/null +++ b/.backup/block_no_verify.rego @@ -0,0 +1,26 @@ +# METADATA +# scope: package +# title: Block Git --no-verify +# description: Blocks git commit --no-verify +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.opencode.block_no_verify +import rego.v1 + +pattern := `git\s+commit\s+.*--no-verify|git\s+commit\s+--no-verify` + +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := input.tool_input.command + regex.match(pattern, command) + + decision := { + "rule_id": "GIT-001", + "reason": "Git commit --no-verify is prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_silent_none_return.rego b/.backup/block_silent_none_return.rego new file mode 100644 index 0000000..bdb56b4 --- /dev/null +++ b/.backup/block_silent_none_return.rego @@ -0,0 +1,146 @@ +# METADATA +# scope: package +# title: Block Silent None Return +# description: Blocks exception handlers that log and return empty values +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_silent_none_return +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +pattern := `except\s+\w*Error.*?:\s*\n\s+.*?(?:logger\.|logging\.).*?\n\s+return\s+(?:None|\[\]|False|\{\}|0)` + +# Block Write/Edit operations that swallow exceptions with empty returns + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + content := new_content + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "PY-EXC-003", + "reason": "Silent exception handlers returning empty values are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + content := edit_new_content(edit) + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "PY-EXC-003", + "reason": "Silent exception handlers returning empty values are prohibited.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + + regex.match(pattern, patch) + + decision := { + "rule_id": "PY-EXC-003", + "reason": "Silent exception handlers returning empty values are prohibited.", + "severity": "HIGH" + } +} diff --git a/.backup/block_test_loops_conditionals.rego b/.backup/block_test_loops_conditionals.rego new file mode 100644 index 0000000..b706398 --- /dev/null +++ b/.backup/block_test_loops_conditionals.rego @@ -0,0 +1,175 @@ +# METADATA +# scope: package +# title: Block Test Loops/Conditionals +# description: Blocks loops or conditionals inside tests with asserts +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_test_loops_conditionals +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "+++ b/") + path := replace(line, "+++ b/", "") + regex.match(pattern, path) +} + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "--- a/") + path := replace(line, "--- a/", "") + regex.match(pattern, path) +} + +file_path_pattern := `tests?/.*\.py$` +pattern := `def test_[^(]+\([^)]*\)[^:]*:[\s\S]*?\b(for|while|if)\s+[^:]+:[\s\S]*?assert` + +# Block Write/Edit operations that introduce loops/conditionals in tests + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + + content := new_content + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "TEST-STRUCT-001", + "reason": "Loops or conditionals inside tests are prohibited. Use parametrization.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + + content := edit_new_content(edit) + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "TEST-STRUCT-001", + "reason": "Loops or conditionals inside tests are prohibited. Use parametrization.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + patch_targets_path(file_path_pattern) + + regex.match(pattern, patch) + + decision := { + "rule_id": "TEST-STRUCT-001", + "reason": "Loops or conditionals inside tests are prohibited. Use parametrization.", + "severity": "HIGH" + } +} diff --git a/.backup/block_tests_quality.rego b/.backup/block_tests_quality.rego new file mode 100644 index 0000000..45233fd --- /dev/null +++ b/.backup/block_tests_quality.rego @@ -0,0 +1,130 @@ +# METADATA +# scope: package +# title: Block Tests Quality +# description: Blocks edits to tests/quality (except baselines.json) +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.block_tests_quality +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +file_path_pattern := `tests/quality/` +exclude_pattern := `baselines\.json$` + +# Block Write/Edit operations targeting tests/quality + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + not regex.match(exclude_pattern, file_path) + + decision := { + "rule_id": "TEST-QUALITY-002", + "reason": "Direct edits to tests/quality are prohibited (except baselines.json).", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + not regex.match(exclude_pattern, file_path) + + decision := { + "rule_id": "TEST-QUALITY-002", + "reason": "Direct edits to tests/quality are prohibited (except baselines.json).", + "severity": "HIGH" + } +} diff --git a/.backup/block_tests_quality_bash.rego b/.backup/block_tests_quality_bash.rego new file mode 100644 index 0000000..e65e9b0 --- /dev/null +++ b/.backup/block_tests_quality_bash.rego @@ -0,0 +1,27 @@ +# METADATA +# scope: package +# title: Block Tests Quality (Bash) +# description: Blocks Bash edits to tests/quality (except baselines.json) +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.opencode.block_tests_quality_bash +import rego.v1 + +pattern := `(rm|mv|cp|sed|awk|chmod|chown|touch|mkdir|rmdir|truncate|tee|>|>>)\s.*tests/quality/` + +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := input.tool_input.command + regex.match(pattern, command) + not contains(lower(command), "tests/quality/baselines.json") + + decision := { + "rule_id": "TEST-QUALITY-001", + "reason": "Direct edits to tests/quality are prohibited (except baselines.json).", + "severity": "HIGH" + } +} diff --git a/.backup/example.rego b/.backup/example.rego new file mode 100644 index 0000000..0fb2487 --- /dev/null +++ b/.backup/example.rego @@ -0,0 +1,33 @@ +# METADATA +# scope: package +# title: Example Policy +# description: A minimal example policy that never fires +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.example + +import rego.v1 + +# This rule will never fire - it's just here to prevent OPA compilation issues +# It checks for a command that nobody would ever type +deny contains decision if { + input.tool_input.command == "CUPCAKE_EXAMPLE_RULE_THAT_NEVER_FIRES_12345" + decision := { + "reason": "This will never happen", + "severity": "LOW", + "rule_id": "EXAMPLE-001" + } +} + +# Replace the above with your actual policies +# Example of a real policy: +# deny contains decision if { +# contains(input.tool_input.command, "rm -rf /") +# decision := { +# "reason": "Dangerous command blocked", +# "severity": "HIGH", +# "rule_id": "SAFETY-001" +# } +# } diff --git a/.backup/prevent_any_type.rego b/.backup/prevent_any_type.rego new file mode 100644 index 0000000..89e4022 --- /dev/null +++ b/.backup/prevent_any_type.rego @@ -0,0 +1,181 @@ +# METADATA +# scope: package +# title: Ban Python Any Type +# description: Blocks introduction of typing.Any in Python code +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.prevent_any_type + +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +is_python_file(path) if { + endswith(path, ".py") +} + +is_python_file(path) if { + endswith(path, ".pyi") +} + +# Regex patterns indicating use of Any in type annotations/imports +any_type_patterns := [ + `(?m)^\s*from\s+typing\s+import\s+[^#\n]*\bAny\b`, + `\btyping\.Any\b`, + `:\s*Any\b`, + `:\s*"Any"`, + `:\s*'Any'`, + `->\s*Any\b`, + `->\s*"Any"`, + `->\s*'Any'`, + `\[\s*Any\s*\]`, + `\[\s*Any\s*,`, + `,\s*Any\s*\]`, + `,\s*Any\s*,`, + `Union\[[^\]]*\bAny\b[^\]]*\]`, + `Optional\[Any\]`, +] + +# Block Write/Edit operations that introduce Any in Python files +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + # Only enforce for Python files + file_path := lower(resolved_file_path) + is_python_file(file_path) + + content := new_content + content != null + + some pattern in any_type_patterns + regex.match(pattern, content) + + decision := { + "rule_id": "PY-TYPE-001", + "reason": "Use of Any is prohibited in Python type annotations/imports. Replace with Protocol, TypeVar, TypedDict, or a concrete type.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + content := patch_content + content != null + + some pattern in any_type_patterns + regex.match(pattern, content) + + decision := { + "rule_id": "PY-TYPE-001", + "reason": "Use of Any is prohibited in Python type annotations/imports. Replace with Protocol, TypeVar, TypedDict, or a concrete type.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := lower(edit_path(edit)) + is_python_file(file_path) + + content := edit_new_content(edit) + content != null + + some pattern in any_type_patterns + regex.match(pattern, content) + + decision := { + "rule_id": "PY-TYPE-001", + "reason": "Use of Any is prohibited in Python type annotations/imports. Replace with Protocol, TypeVar, TypedDict, or a concrete type.", + "severity": "HIGH" + } +} diff --git a/.backup/prevent_type_suppression.rego b/.backup/prevent_type_suppression.rego new file mode 100644 index 0000000..e1ec86c --- /dev/null +++ b/.backup/prevent_type_suppression.rego @@ -0,0 +1,176 @@ +# METADATA +# scope: package +# title: Ban Python Type Suppression +# description: Blocks type suppression directives in Python code +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.prevent_type_suppression + +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + +is_python_file(path) if { + endswith(path, ".py") +} + +is_python_file(path) if { + endswith(path, ".pyi") +} + +# Regex patterns indicating type suppression directives +type_suppression_patterns := [ + `#\s*type:\s*ignore(\[[^\]]+\])?\b`, + `#\s*pyright:\s*ignore(\[[^\]]+\])?\b`, + `#\s*mypy:\s*ignore(\[[^\]]+\])?\b`, + `#\s*pyre-ignore\b`, + `#\s*pyre-fixme\b`, + `#\s*pyrefly:\s*ignore(\[[^\]]+\])?\b`, + `#\s*basedpyright:\s*ignore(\[[^\]]+\])?\b`, + `#\s*noqa\b`, + `#\s*noqa:\s*\w+`, +] + +# Block Write/Edit operations that introduce type suppression in Python files +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + # Only enforce for Python files + file_path := lower(resolved_file_path) + is_python_file(file_path) + + content := new_content + content != null + + some pattern in type_suppression_patterns + regex.match(pattern, content) + + decision := { + "rule_id": "PY-TYPE-002", + "reason": "Type suppression directives are prohibited in Python code. Fix the underlying type/lint issues instead.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + content := patch_content + content != null + + some pattern in type_suppression_patterns + regex.match(pattern, content) + + decision := { + "rule_id": "PY-TYPE-002", + "reason": "Type suppression directives are prohibited in Python code. Fix the underlying type/lint issues instead.", + "severity": "HIGH" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := lower(edit_path(edit)) + is_python_file(file_path) + + content := edit_new_content(edit) + content != null + + some pattern in type_suppression_patterns + regex.match(pattern, content) + + decision := { + "rule_id": "PY-TYPE-002", + "reason": "Type suppression directives are prohibited in Python code. Fix the underlying type/lint issues instead.", + "severity": "HIGH" + } +} diff --git a/.cupcake/policies/.inactive/warn_new_file_search.rego b/.backup/warn_baselines_edit.rego similarity index 75% rename from .cupcake/policies/.inactive/warn_new_file_search.rego rename to .backup/warn_baselines_edit.rego index 8968702..4d3410f 100644 --- a/.cupcake/policies/.inactive/warn_new_file_search.rego +++ b/.backup/warn_baselines_edit.rego @@ -1,21 +1,16 @@ # METADATA # scope: package -# title: Warn on New File Without Search -# description: Warns when creating new source files +# title: Warn on Baselines Edit +# description: Warns on edits to tests/quality/baselines.json # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] -package cupcake.policies.opencode.warn_new_file_search +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.warn_baselines_edit import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -98,9 +93,9 @@ edit_old_content(edit) := content if { content := edit.old_text } else := "" -file_path_pattern := `(^|/)(src|client/src|tests)/.*\.(py|ts|tsx|js|jsx)$` +file_path_pattern := `tests/quality/baselines\.json$` -# Warn on Write/Edit operations that create new files +# Warn on Write/Edit operations targeting baselines.json deny contains decision if { input.hook_event_name == "PreToolUse" @@ -109,11 +104,9 @@ deny contains decision if { file_path := resolved_file_path regex.match(file_path_pattern, file_path) - old_content == "" - decision := { - "rule_id": "PROCESS-001", - "reason": "Warning: creating a new source file. Ensure you searched for existing implementations.", + "rule_id": "TEST-QUALITY-004", + "reason": "Warning: editing tests/quality/baselines.json should be avoided unless explicitly required.", "severity": "LOW" } } @@ -126,12 +119,9 @@ deny contains decision if { file_path := edit_path(edit) regex.match(file_path_pattern, file_path) - old_content := edit_old_content(edit) - old_content == "" - decision := { - "rule_id": "PROCESS-001", - "reason": "Warning: creating a new source file. Ensure you searched for existing implementations.", + "rule_id": "TEST-QUALITY-004", + "reason": "Warning: editing tests/quality/baselines.json should be avoided unless explicitly required.", "severity": "LOW" } } diff --git a/.backup/warn_baselines_edit_bash.rego b/.backup/warn_baselines_edit_bash.rego new file mode 100644 index 0000000..0b67e3d --- /dev/null +++ b/.backup/warn_baselines_edit_bash.rego @@ -0,0 +1,26 @@ +# METADATA +# scope: package +# title: Warn on Baselines Edit (Bash) +# description: Warns on Bash edits to tests/quality/baselines.json +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.opencode.warn_baselines_edit_bash +import rego.v1 + +pattern := `(sed|awk|echo|cat|tee|>|>>|cp|mv).*tests/quality/baselines\.json` + +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := input.tool_input.command + regex.match(pattern, command) + + decision := { + "rule_id": "TEST-QUALITY-003", + "reason": "Warning: editing tests/quality/baselines.json should be avoided unless explicitly required.", + "severity": "LOW" + } +} diff --git a/.backup/warn_large_file.rego b/.backup/warn_large_file.rego new file mode 100644 index 0000000..db96c11 --- /dev/null +++ b/.backup/warn_large_file.rego @@ -0,0 +1,175 @@ +# METADATA +# scope: package +# title: Warn on Large File +# description: Warns when writing large files (>= 500 lines) +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] +package cupcake.policies.opencode.warn_large_file +import rego.v1 + +tool_name := input.tool_name +tool_input := input.tool_input + +resolved_file_path := input.resolved_file_path if { + input.resolved_file_path != null +} else := tool_input.file_path if { + tool_input.file_path != null +} else := tool_input.filePath if { + tool_input.filePath != null +} else := tool_input.path if { + tool_input.path != null +} else := tool_input.notebook_path if { + tool_input.notebook_path != null +} else := tool_input.notebookPath if { + tool_input.notebookPath != null +} else := "" + +new_content := tool_input.new_string if { + tool_input.new_string != null +} else := tool_input.newText if { + tool_input.newText != null +} else := tool_input.new_text if { + tool_input.new_text != null +} else := tool_input.content if { + tool_input.content != null +} else := "" + +old_content := tool_input.old_string if { + tool_input.old_string != null +} else := tool_input.oldText if { + tool_input.oldText != null +} else := tool_input.old_text if { + tool_input.old_text != null +} else := tool_input.previousContent if { + tool_input.previousContent != null +} else := "" + +patch_content := tool_input.patch if { + tool_input.patch != null +} else := tool_input.patchText if { + tool_input.patchText != null +} else := tool_input.patch_text if { + tool_input.patch_text != null +} else := "" + +edit_path(edit) := path if { + edit.resolved_file_path != null + path := edit.resolved_file_path +} else := path if { + edit.file_path != null + path := edit.file_path +} else := path if { + edit.filePath != null + path := edit.filePath +} else := path if { + edit.path != null + path := edit.path +} else := "" + +edit_new_content(edit) := content if { + edit.new_string != null + content := edit.new_string +} else := content if { + edit.newText != null + content := edit.newText +} else := content if { + edit.new_text != null + content := edit.new_text +} else := content if { + edit.content != null + content := edit.content +} else := "" + +edit_old_content(edit) := content if { + edit.old_string != null + content := edit.old_string +} else := content if { + edit.oldText != null + content := edit.oldText +} else := content if { + edit.old_text != null + content := edit.old_text +} else := "" + + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "+++ b/") + path := replace(line, "+++ b/", "") + regex.match(pattern, path) +} + +patch_targets_path(pattern) if { + patch := patch_content + patch != null + lines := split(patch, "\n") + some line in lines + startswith(line, "--- a/") + path := replace(line, "--- a/", "") + regex.match(pattern, path) +} + +file_path_pattern := `\.(py|ts|tsx|js|jsx)$` +pattern := `(?:.*\n){500,}` + +# Warn on Write/Edit operations that introduce large file content + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Write", "Edit", "NotebookEdit"} + + file_path := resolved_file_path + regex.match(file_path_pattern, file_path) + + content := new_content + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "STYLE-002", + "reason": "Warning: file content exceeds 500 lines. Consider refactoring.", + "severity": "LOW" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name == "MultiEdit" + + some edit in tool_input.edits + file_path := edit_path(edit) + regex.match(file_path_pattern, file_path) + + content := edit_new_content(edit) + content != null + regex.match(pattern, content) + + decision := { + "rule_id": "STYLE-002", + "reason": "Warning: file content exceeds 500 lines. Consider refactoring.", + "severity": "LOW" + } +} + +deny contains decision if { + input.hook_event_name == "PreToolUse" + tool_name in {"Patch", "ApplyPatch"} + + patch := patch_content + patch != null + + patch_targets_path(file_path_pattern) + + regex.match(pattern, patch) + + decision := { + "rule_id": "STYLE-002", + "reason": "Warning: file content exceeds 500 lines. Consider refactoring.", + "severity": "LOW" + } +} diff --git a/.claude/ralph-loop.local.md b/.claude/ralph-loop.local.md deleted file mode 100644 index 81163c6..0000000 --- a/.claude/ralph-loop.local.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -active: true -iteration: 1 -max_iterations: 0 -completion_promise: null -started_at: "2026-01-20T02:31:55Z" -started_at: "2026-01-20T02:31:55Z" ---- - -proceed with the plan, i have also documented a copy in @.claudectx/codefixes.md. please use your agents iteratively to manage context and speed, however you must review the accuracy and value of each doc before moving to the next -proceed with the plan, i have also documented a copy in @.claudectx/codefixes.md. please use your agents iteratively to manage context and speed, however you must review the accuracy and value of each doc before moving to the next diff --git a/.claudectx/codefixes.md b/.claudectx/codefixes.md index 0febd02..e69de29 100644 --- a/.claudectx/codefixes.md +++ b/.claudectx/codefixes.md @@ -1,377 +0,0 @@ -╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ - Strategic CLAUDE.md Placement Analysis for NoteFlow - - Executive Summary - - This document analyzes optimal placement of CLAUDE.md files throughout the NoteFlow codebase to provide meaningful context for AI assistants. The analysis considers both - constrained (strategic) and unlimited scenarios. - - --- - Current State: Existing Documentation Files - - 10 CLAUDE.md/AGENTS.md Files Already Present - ┌─────────────────────┬───────────┬──────────────────────────────────────────────────────────┐ - │ Location │ File │ Focus │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ / │ CLAUDE.md │ Root orchestration, parallel execution, project overview │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ / │ AGENTS.md │ Architecture for non-Claude AI assistants │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ /src/ │ CLAUDE.md │ Python backend entry point │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ /src/ │ AGENTS.md │ Python backend for other AIs │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ /src/noteflow/ │ CLAUDE.md │ Detailed Python standards (line limits, typing, modules) │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ /src/noteflow/grpc/ │ CLAUDE.md │ gRPC security patterns │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ /src/noteflow/grpc/ │ AGENTS.md │ gRPC security (duplicate) │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ /client/ │ CLAUDE.md │ Tauri + React development │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ /client/src/ │ CLAUDE.md │ TypeScript security rules │ - ├─────────────────────┼───────────┼──────────────────────────────────────────────────────────┤ - │ /docker/ │ CLAUDE.md │ Docker security and build patterns │ - └─────────────────────┴───────────┴──────────────────────────────────────────────────────────┘ - --- - Part 1: Strategic Placement (Constrained Resources) - - If limited to 5-7 additional files, prioritize these high-impact locations: - - Tier 1: Critical Gaps (Add These First) - - 1. /src/noteflow/infrastructure/CLAUDE.md - - Why: Infrastructure layer has 15+ adapters with distinct patterns (ASR, diarization, NER, summarization, calendar, webhooks, persistence). No unified guidance exists. - - 2. /src/noteflow/domain/CLAUDE.md - - Why: Domain layer defines entities, ports, rules, and value objects. Understanding DDD boundaries prevents architectural violations. - - 3. /src/noteflow/application/services/CLAUDE.md - - Why: 12+ services with distinct responsibilities. Service-level guidance prevents duplication and clarifies orchestration patterns. - - 4. /client/src/hooks/CLAUDE.md - - Why: 7 hook directories (audio, auth, data, processing, recording, sync, ui) with complex interdependencies. Prevents reinventing existing hooks. - - 5. /client/src-tauri/src/CLAUDE.md - - Why: Rust backend has commands, gRPC client, audio processing, state management. No Rust-specific guidance currently exists. - - Tier 2: High Value (Add Next) - - 6. /tests/CLAUDE.md - - Why: Testing conventions (fixtures, markers, quality gates) are scattered. Centralized guidance improves test quality. - - 7. /src/noteflow/infrastructure/persistence/CLAUDE.md - - Why: UnitOfWork pattern, repository hierarchy, capability flags, migrations are complex. Prevents incorrect persistence patterns. - - --- - Part 2: Unlimited Placement (Comprehensive Coverage) - - With no constraints, here's the complete list of 25+ locations where CLAUDE.md would add value: - - Python Backend (src/noteflow/) - ┌────────────────────────────────────────┬─────────────────────────────────────────────────────────┐ - │ Path │ Content Focus │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ domain/CLAUDE.md │ DDD entities, ports, value objects, rules engine │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ domain/entities/CLAUDE.md │ Entity relationships, state machines, invariants │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ domain/ports/CLAUDE.md │ Repository protocols, capability contracts │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ domain/rules/CLAUDE.md │ Rule modes (SIMPLE→EXPRESSION), registry, evaluation │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ application/CLAUDE.md │ Use case organization, service boundaries │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ application/services/CLAUDE.md │ Service catalog, dependency patterns │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ infrastructure/CLAUDE.md │ Adapter patterns, external integrations │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ infrastructure/asr/CLAUDE.md │ Whisper, VAD, segmentation, streaming │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ infrastructure/diarization/CLAUDE.md │ Job lifecycle, streaming vs offline, speaker assignment │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ infrastructure/ner/CLAUDE.md │ Backend abstraction, mapper, post-processing │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ infrastructure/summarization/CLAUDE.md │ Provider protocols, consent workflow, citation linking │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ infrastructure/persistence/CLAUDE.md │ UnitOfWork, repositories, migrations │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ infrastructure/calendar/CLAUDE.md │ OAuth flow, sync patterns, trigger detection │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ infrastructure/webhooks/CLAUDE.md │ Delivery, signing, retry logic │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ grpc/mixins/CLAUDE.md │ Mixin composition, streaming handlers │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ grpc/startup/CLAUDE.md │ Service initialization, dependency injection │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ config/CLAUDE.md │ Settings cascade, feature flags, environment loading │ - ├────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ cli/CLAUDE.md │ Command patterns, model management │ - └────────────────────────────────────────┴─────────────────────────────────────────────────────────┘ - Client (client/) - ┌──────────────────────────────────┬─────────────────────────────────────────────────────────┐ - │ Path │ Content Focus │ - ├──────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ src/api/CLAUDE.md │ Adapter pattern, transport abstraction, type generation │ - ├──────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ src/components/CLAUDE.md │ Component hierarchy, feature organization │ - ├──────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ src/hooks/CLAUDE.md │ Hook catalog, composition patterns, state management │ - ├──────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ src/lib/CLAUDE.md │ Utility catalog, AI providers, audio processing │ - ├──────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ src-tauri/src/CLAUDE.md │ Rust patterns, command handlers, state │ - ├──────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ src-tauri/src/commands/CLAUDE.md │ IPC contract, audio commands, recording session │ - ├──────────────────────────────────┼─────────────────────────────────────────────────────────┤ - │ src-tauri/src/grpc/CLAUDE.md │ gRPC client wrapper, type conversions │ - └──────────────────────────────────┴─────────────────────────────────────────────────────────┘ - Testing (tests/) - ┌─────────────────────────────┬────────────────────────────────────────────────────┐ - │ Path │ Content Focus │ - ├─────────────────────────────┼────────────────────────────────────────────────────┤ - │ tests/CLAUDE.md │ Test conventions, fixtures, markers, quality gates │ - ├─────────────────────────────┼────────────────────────────────────────────────────┤ - │ tests/fixtures/CLAUDE.md │ Shared fixtures catalog, usage patterns │ - ├─────────────────────────────┼────────────────────────────────────────────────────┤ - │ tests/integration/CLAUDE.md │ Integration test setup, testcontainers │ - └─────────────────────────────┴────────────────────────────────────────────────────┘ - Documentation (docs/) - ┌────────────────────────┬───────────────────────────────────────────┐ - │ Path │ Content Focus │ - ├────────────────────────┼───────────────────────────────────────────┤ - │ docs/sprints/CLAUDE.md │ Sprint structure, documentation standards │ - └────────────────────────┴───────────────────────────────────────────┘ - --- - Part 3: Mockup - /src/noteflow/infrastructure/CLAUDE.md - - # Infrastructure Layer Development Guide - - ## Overview - - The infrastructure layer (`src/noteflow/infrastructure/`) contains adapters that implement domain ports. These connect the application to external systems: databases, ML - models, cloud APIs, file systems. - - --- - - ## Architecture Principle: Hexagonal/Ports-and-Adapters - - Domain Ports (interfaces) Infrastructure Adapters (implementations) - ───────────────────────── ─────────────────────────────────────────── - NerPort → SpacyBackend, GlinerBackend - SummarizationProvider → CloudProvider, OllamaProvider, MockProvider - DiarizationEngine → DiartSession, PyannoteOffline - AssetRepository → FileSystemAssetRepository - UnitOfWork → SqlAlchemyUnitOfWork, MemoryUnitOfWork - CalendarProvider → GoogleCalendar, OutlookCalendar - - **Rule**: Infrastructure code imports domain; domain NEVER imports infrastructure. - - --- - - ## Adapter Catalog - - | Directory | Responsibility | Key Protocols | - |-----------|----------------|---------------| - | `asr/` | Speech-to-text (Whisper) | `TranscriptionResult` | - | `diarization/` | Speaker identification | `DiarizationEngine`, `DiarizationJob` | - | `ner/` | Named entity extraction | `NerPort` | - | `summarization/` | LLM summarization | `SummarizationProvider` | - | `persistence/` | Database (SQLAlchemy) | `UnitOfWork`, `*Repository` | - | `calendar/` | OAuth + event sync | `CalendarProvider` | - | `webhooks/` | Event delivery | `WebhookDeliveryService` | - | `export/` | PDF/HTML/Markdown | `ExportAdapter` | - | `audio/` | Recording/playback | `AudioDevice` | - | `crypto/` | Encryption | `Keystore` | - | `logging/` | Structured logging | `LogEventType` | - | `metrics/` | Observability | `MetricsCollector` | - | `gpu/` | GPU detection | `GpuInfo` | - - --- - - ## Common Patterns - - ### 1. Async Wrappers for Sync Libraries - - Many ML libraries (spaCy, faster-whisper) are synchronous. Wrap them: - - ```python - async def extract(self, text: str) -> list[NamedEntity]: - loop = asyncio.get_running_loop() - return await loop.run_in_executor( - None, # Default ThreadPoolExecutor - self._sync_extract, - text - ) - - 2. Backend Selection via Factory - - def create_ner_engine(config: NerConfig) -> NerPort: - match config.backend: - case "spacy": - return SpacyBackend(model=config.model_name) - case "gliner": - return GlinerBackend(model=config.model_name) - case _: - raise ValueError(f"Unknown NER backend: {config.backend}") - - 3. Capability Flags for Optional Features - - class SqlAlchemyUnitOfWork(UnitOfWork): - @property - def supports_entities(self) -> bool: - return True # Has EntityRepository - - @property - def supports_webhooks(self) -> bool: - return True # Has WebhookRepository - - Always check capability before accessing optional repository: - if uow.supports_entities: - entities = await uow.entities.get_by_meeting(meeting_id) - - 4. Provider Protocol Pattern - - class SummarizationProvider(Protocol): - async def summarize( - self, - segments: list[Segment], - template: SummarizationTemplate, - ) -> SummaryResult: ... - - @property - def requires_consent(self) -> bool: ... - - --- - Forbidden Patterns - - ❌ Direct database access outside persistence/ - # WRONG: Raw SQL in service layer - async with engine.connect() as conn: - result = await conn.execute(text("SELECT * FROM meetings")) - - ❌ Hardcoded API keys - # WRONG: Secrets in code - client = anthropic.Anthropic(api_key="sk-ant-...") - - ❌ Synchronous I/O in async context - # WRONG: Blocking the event loop - def load_model(self): - self.model = whisper.load_model("base") # Blocks! - - ❌ Domain imports in infrastructure - # WRONG: Infrastructure should implement domain ports, not modify domain - from noteflow.domain.entities import Meeting - meeting.state = "COMPLETED" # Don't mutate domain objects here - - --- - Testing Infrastructure Adapters - - Use Dependency Injection for Mocking - - # tests/infrastructure/ner/test_engine.py - @pytest.fixture - def mock_backend() -> NerBackend: - backend = Mock(spec=NerBackend) - backend.extract.return_value = [ - RawEntity(text="John", label="PERSON", start=0, end=4) - ] - return backend - - async def test_engine_uses_backend(mock_backend): - engine = NerEngine(backend=mock_backend) - result = await engine.extract("Hello John") - mock_backend.extract.assert_called_once() - - Integration Tests with Real Services - - # tests/integration/test_ner_integration.py - @pytest.mark.integration - @pytest.mark.requires_gpu - async def test_gliner_real_extraction(): - backend = GlinerBackend(model="urchade/gliner_base") - result = await backend.extract("Microsoft CEO Satya Nadella announced...") - assert any(e.label == "ORG" and "Microsoft" in e.text for e in result) - - --- - Adding a New Adapter - - 1. Define port in domain (domain/ports/) if not exists - 2. Create adapter directory (infrastructure//) - 3. Implement the protocol with proper async handling - 4. Add factory function for backend selection - 5. Write unit tests with mocked dependencies - 6. Write integration test with real external service - 7. Update gRPC startup (grpc/startup/services.py) for dependency injection - 8. Document in this file (update Adapter Catalog table) - - --- - Key Files - ┌───────────────────────────────┬──────────────────────────────────┐ - │ File │ Purpose │ - ├───────────────────────────────┼──────────────────────────────────┤ - │ __init__.py │ Public exports for layer │ - ├───────────────────────────────┼──────────────────────────────────┤ - │ */engine.py │ Main adapter implementation │ - ├───────────────────────────────┼──────────────────────────────────┤ - │ */backends/ │ Multiple backend implementations │ - ├───────────────────────────────┼──────────────────────────────────┤ - │ */mapper.py │ External→Domain type conversion │ - ├───────────────────────────────┼──────────────────────────────────┤ - │ */post_processing.py │ Output normalization │ - ├───────────────────────────────┼──────────────────────────────────┤ - │ persistence/unit_of_work/*.py │ Transaction management │ - ├───────────────────────────────┼──────────────────────────────────┤ - │ persistence/repositories/*.py │ Data access │ - ├───────────────────────────────┼──────────────────────────────────┤ - │ persistence/models/*.py │ ORM definitions │ - └───────────────────────────────┴──────────────────────────────────┘ - --- - See Also - - - /src/noteflow/domain/ports/ — Port definitions - - /src/noteflow/grpc/startup/services.py — Dependency injection - - /tests/infrastructure/ — Adapter tests - - --- - - ## Part 4: Answer to "Would Your Answer Change With No Limit?" - - **Yes, significantly.** - - ### Constrained (5-7 files): - Focus on **layer boundaries** (domain, application, infrastructure) and **high-complexity areas** (hooks, Rust backend). Each file covers broad territory. - - ### Unlimited (25+ files): - Add **subsystem-specific documentation** for: - - Complex state machines (diarization jobs, recording lifecycle) - - Protocol patterns (summarization providers, NER backends) - - Cross-cutting concerns (rules engine, settings cascade) - - Test organization (fixtures, integration setup) - - The key difference: with unlimited resources, document **WHY decisions were made** (design rationale), not just **WHAT exists** (API reference). - - --- - - ## Recommendation - - ### Immediate Action (Phase 1) - Add these 3 files for maximum impact: - 1. `/src/noteflow/infrastructure/CLAUDE.md` — Adapter patterns (mockup above) - 2. `/src/noteflow/domain/CLAUDE.md` — DDD boundaries, entity relationships - 3. `/client/src-tauri/src/CLAUDE.md` — Rust patterns, IPC contracts - - ### Follow-up (Phase 2) - 4. `/src/noteflow/application/services/CLAUDE.md` — Service catalog - 5. `/client/src/hooks/CLAUDE.md` — Hook organization - 6. `/tests/CLAUDE.md` — Testing conventions - - ### Future (Phase 3) - Remaining 19+ files as the codebase grows and patterns stabilize. \ No newline at end of file diff --git a/.cupcake/helpers/commands.rego b/.cupcake/helpers/commands.rego new file mode 100644 index 0000000..671b15e --- /dev/null +++ b/.cupcake/helpers/commands.rego @@ -0,0 +1,49 @@ +# METADATA +# scope: package +# description: Helper functions for secure command analysis +package cupcake.helpers.commands + +import rego.v1 + +# Check if command contains a specific verb with proper word boundary anchoring +# This prevents bypass via extra whitespace: "git commit" or " git commit" +has_verb(command, verb) if { + pattern := concat("", ["(^|\\s)", verb, "(\\s|$)"]) + regex.match(pattern, command) +} + +# Check if command contains ANY of the dangerous verbs from a set +# More efficient than checking each verb individually in policy code +has_dangerous_verb(command, verb_set) if { + some verb in verb_set + has_verb(command, verb) +} + +# Detect symlink creation commands +# Matches: ln -s, ln -sf, ln -s -f, etc. +creates_symlink(command) if { + has_verb(command, "ln") + contains(command, "-s") +} + +# Check if symlink command involves a protected path +# IMPORTANT: Checks BOTH source and target (addresses TOB-EQTY-LAB-CUPCAKE-4) +# Blocks: ln -s .cupcake foo AND ln -s foo .cupcake +symlink_involves_path(command, protected_path) if { + creates_symlink(command) + contains(command, protected_path) +} + +# Detect output redirection operators that could bypass file protection +# Matches: >, >>, |, tee +has_output_redirect(command) if { + redirect_patterns := [ + `\s>\s`, # stdout redirect + `\s>>\s`, # stdout append + `\s\|\s`, # pipe + `(^|\s)tee(\s|$)`, # tee command + ] + some pattern in redirect_patterns + regex.match(pattern, command) +} + diff --git a/.cupcake/policies/opencode/ban_stdlib_logger.rego b/.cupcake/policies/opencode/ban_stdlib_logger.rego index 4803df0..d6f372f 100644 --- a/.cupcake/policies/opencode/ban_stdlib_logger.rego +++ b/.cupcake/policies/opencode/ban_stdlib_logger.rego @@ -5,18 +5,13 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.ban_stdlib_logger import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -114,7 +109,7 @@ file_path_pattern := `\.py$` deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -132,7 +127,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) @@ -151,7 +146,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_assertion_roulette.rego b/.cupcake/policies/opencode/block_assertion_roulette.rego index a5b59c3..8c2671d 100644 --- a/.cupcake/policies/opencode/block_assertion_roulette.rego +++ b/.cupcake/policies/opencode/block_assertion_roulette.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_assertion_roulette import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -126,7 +121,7 @@ assertion_pattern := `^\s*assert\s+[^,\n]+\n\s*assert\s+[^,\n]+$` deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -144,7 +139,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) @@ -163,7 +158,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_biome_ignore.rego b/.cupcake/policies/opencode/block_biome_ignore.rego index 04811ee..35516ad 100644 --- a/.cupcake/policies/opencode/block_biome_ignore.rego +++ b/.cupcake/policies/opencode/block_biome_ignore.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_biome_ignore import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -126,7 +121,7 @@ ignore_pattern := `//\s*biome-ignore|//\s*@ts-ignore|//\s*@ts-expect-error|//\s* deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -144,7 +139,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) @@ -163,7 +158,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_biome_ignore_bash.rego b/.cupcake/policies/opencode/block_biome_ignore_bash.rego index bb45e9d..e88d33d 100644 --- a/.cupcake/policies/opencode/block_biome_ignore_bash.rego +++ b/.cupcake/policies/opencode/block_biome_ignore_bash.rego @@ -5,7 +5,7 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["bash"] +# required_tools: ["Bash"] package cupcake.policies.opencode.block_biome_ignore_bash import rego.v1 diff --git a/.cupcake/policies/opencode/block_broad_exception_handler.rego b/.cupcake/policies/opencode/block_broad_exception_handler.rego index 4405af9..c706d2f 100644 --- a/.cupcake/policies/opencode/block_broad_exception_handler.rego +++ b/.cupcake/policies/opencode/block_broad_exception_handler.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_broad_exception_handler import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -104,7 +99,7 @@ handler_pattern := `except\s+Exception\s*(?:as\s+\w+)?:\s*\n\s+(?:logger\.|loggi deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} content := new_content content != null @@ -119,7 +114,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits content := edit_new_content(edit) @@ -135,7 +130,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_code_quality_test_bash.rego b/.cupcake/policies/opencode/block_code_quality_test_bash.rego index db0bbac..692c70b 100644 --- a/.cupcake/policies/opencode/block_code_quality_test_bash.rego +++ b/.cupcake/policies/opencode/block_code_quality_test_bash.rego @@ -5,7 +5,7 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["bash"] +# required_tools: ["Bash"] package cupcake.policies.opencode.block_code_quality_test_bash import rego.v1 diff --git a/.cupcake/policies/opencode/block_code_quality_test_edits.rego b/.cupcake/policies/opencode/block_code_quality_test_edits.rego index 9333d2a..7f5ced7 100644 --- a/.cupcake/policies/opencode/block_code_quality_test_edits.rego +++ b/.cupcake/policies/opencode/block_code_quality_test_edits.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_code_quality_test_edits import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -104,7 +99,7 @@ file_path_pattern := `src/test/code-quality\.test\.ts$` deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -118,7 +113,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) diff --git a/.cupcake/policies/opencode/block_code_quality_test_serena.rego b/.cupcake/policies/opencode/block_code_quality_test_serena.rego index d4b9774..cff4ce8 100644 --- a/.cupcake/policies/opencode/block_code_quality_test_serena.rego +++ b/.cupcake/policies/opencode/block_code_quality_test_serena.rego @@ -5,17 +5,18 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: [] +# required_tools: +# - McpSerenaReplaceContent +# - McpSerenaReplaceSymbolBody +# - McpSerenaCreateTextFile +# - McpSerenaInsertBeforeSymbol +# - McpSerenaInsertAfterSymbol +# - McpSerenaRenameSymbol package cupcake.policies.opencode.block_code_quality_test_serena import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -111,7 +112,7 @@ get_relative_path := path if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_names := {"mcp__serena__replace_content", "mcp__serena__replace_symbol_body", "mcp__serena__create_text_file", "mcp__serena__insert_before_symbol", "mcp__serena__insert_after_symbol", "mcp__serena__rename_symbol"} + tool_names := {"McpSerenaReplaceContent", "McpSerenaReplaceSymbolBody", "McpSerenaCreateTextFile", "McpSerenaInsertBeforeSymbol", "McpSerenaInsertAfterSymbol", "McpSerenaRenameSymbol"} tool_name in tool_names file_path := get_relative_path diff --git a/.cupcake/policies/opencode/block_code_quality_test_serena_plugin.rego b/.cupcake/policies/opencode/block_code_quality_test_serena_plugin.rego index 1ffc43a..fb87a2b 100644 --- a/.cupcake/policies/opencode/block_code_quality_test_serena_plugin.rego +++ b/.cupcake/policies/opencode/block_code_quality_test_serena_plugin.rego @@ -5,17 +5,18 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: [] +# required_tools: +# - McpPluginSerenaSerenaReplaceContent +# - McpPluginSerenaSerenaReplaceSymbolBody +# - McpPluginSerenaSerenaCreateTextFile +# - McpPluginSerenaSerenaInsertBeforeSymbol +# - McpPluginSerenaSerenaInsertAfterSymbol +# - McpPluginSerenaSerenaRenameSymbol package cupcake.policies.opencode.block_code_quality_test_serena_plugin import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -111,7 +112,7 @@ get_relative_path := path if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_names := {"mcp__plugin_serena_serena__replace_content", "mcp__plugin_serena_serena__replace_symbol_body", "mcp__plugin_serena_serena__create_text_file", "mcp__plugin_serena_serena__insert_before_symbol", "mcp__plugin_serena_serena__insert_after_symbol", "mcp__plugin_serena_serena__rename_symbol"} + tool_names := {"McpPluginSerenaSerenaReplaceContent", "McpPluginSerenaSerenaReplaceSymbolBody", "McpPluginSerenaSerenaCreateTextFile", "McpPluginSerenaSerenaInsertBeforeSymbol", "McpPluginSerenaSerenaInsertAfterSymbol", "McpPluginSerenaSerenaRenameSymbol"} tool_name in tool_names file_path := get_relative_path diff --git a/.cupcake/policies/opencode/block_datetime_now_fallback.rego b/.cupcake/policies/opencode/block_datetime_now_fallback.rego index 626a5b5..f77719c 100644 --- a/.cupcake/policies/opencode/block_datetime_now_fallback.rego +++ b/.cupcake/policies/opencode/block_datetime_now_fallback.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_datetime_now_fallback import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -104,7 +99,7 @@ pattern := `return\s+datetime\.now\s*\(` deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} content := new_content content != null @@ -119,7 +114,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits content := edit_new_content(edit) @@ -135,7 +130,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_default_value_swallow.rego b/.cupcake/policies/opencode/block_default_value_swallow.rego index 32d1e02..b051cd3 100644 --- a/.cupcake/policies/opencode/block_default_value_swallow.rego +++ b/.cupcake/policies/opencode/block_default_value_swallow.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_default_value_swallow import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -104,7 +99,7 @@ pattern := `except\s+\w*(?:Error|Exception).*?:\s*\n\s+.*?(?:logger\.|logging\.) deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} content := new_content content != null @@ -119,7 +114,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits content := edit_new_content(edit) @@ -135,7 +130,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_duplicate_fixtures.rego b/.cupcake/policies/opencode/block_duplicate_fixtures.rego index b793240..bf974af 100644 --- a/.cupcake/policies/opencode/block_duplicate_fixtures.rego +++ b/.cupcake/policies/opencode/block_duplicate_fixtures.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_duplicate_fixtures import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -127,7 +122,7 @@ fixture_pattern := `@pytest\.fixture[^@]*\ndef\s+(mock_uow|crypto|meetings_dir|w deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -146,7 +141,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) @@ -166,7 +161,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_linter_config_frontend.rego b/.cupcake/policies/opencode/block_linter_config_frontend.rego index 00d20bc..3bff2fe 100644 --- a/.cupcake/policies/opencode/block_linter_config_frontend.rego +++ b/.cupcake/policies/opencode/block_linter_config_frontend.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_linter_config_frontend import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -104,7 +99,7 @@ file_path_pattern := `(^|/)client/.*(?:\.?eslint(?:rc|\.config).*|\.?prettier(?: deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -119,7 +114,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) diff --git a/.cupcake/policies/opencode/block_linter_config_frontend_bash.rego b/.cupcake/policies/opencode/block_linter_config_frontend_bash.rego index 866259c..a356217 100644 --- a/.cupcake/policies/opencode/block_linter_config_frontend_bash.rego +++ b/.cupcake/policies/opencode/block_linter_config_frontend_bash.rego @@ -5,7 +5,7 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["bash"] +# required_tools: ["Bash"] package cupcake.policies.opencode.block_linter_config_frontend_bash import rego.v1 diff --git a/.cupcake/policies/opencode/block_linter_config_python.rego b/.cupcake/policies/opencode/block_linter_config_python.rego index fdf85c9..f2f6479 100644 --- a/.cupcake/policies/opencode/block_linter_config_python.rego +++ b/.cupcake/policies/opencode/block_linter_config_python.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_linter_config_python import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -104,7 +99,7 @@ file_path_pattern := `(?:pyproject\.toml|\.?ruff\.toml|\.?pyrightconfig\.json|\. deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -119,7 +114,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) diff --git a/.cupcake/policies/opencode/block_linter_config_python_bash.rego b/.cupcake/policies/opencode/block_linter_config_python_bash.rego index cd61480..65229c7 100644 --- a/.cupcake/policies/opencode/block_linter_config_python_bash.rego +++ b/.cupcake/policies/opencode/block_linter_config_python_bash.rego @@ -5,7 +5,7 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["bash"] +# required_tools: ["Bash"] package cupcake.policies.opencode.block_linter_config_python_bash import rego.v1 diff --git a/.cupcake/policies/opencode/block_magic_numbers.rego b/.cupcake/policies/opencode/block_magic_numbers.rego index 62ee131..54bac75 100644 --- a/.cupcake/policies/opencode/block_magic_numbers.rego +++ b/.cupcake/policies/opencode/block_magic_numbers.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_magic_numbers import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -126,7 +121,7 @@ number_pattern := `(?:timeout|delay|interval|duration|limit|max|min|size|count|t deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -145,7 +140,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) @@ -165,7 +160,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_makefile_bash.rego b/.cupcake/policies/opencode/block_makefile_bash.rego index 133a503..15e2b9a 100644 --- a/.cupcake/policies/opencode/block_makefile_bash.rego +++ b/.cupcake/policies/opencode/block_makefile_bash.rego @@ -5,7 +5,7 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["bash"] +# required_tools: ["Bash"] package cupcake.policies.opencode.block_makefile_bash import rego.v1 diff --git a/.cupcake/policies/opencode/block_makefile_edit.rego b/.cupcake/policies/opencode/block_makefile_edit.rego index d60887d..9f7da15 100644 --- a/.cupcake/policies/opencode/block_makefile_edit.rego +++ b/.cupcake/policies/opencode/block_makefile_edit.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_makefile_edit import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -104,7 +99,7 @@ file_path_pattern := `(?:^|/)Makefile$` deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -118,7 +113,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) diff --git a/.cupcake/policies/opencode/block_no_verify.rego b/.cupcake/policies/opencode/block_no_verify.rego index 0aa9dd0..d399d1f 100644 --- a/.cupcake/policies/opencode/block_no_verify.rego +++ b/.cupcake/policies/opencode/block_no_verify.rego @@ -5,7 +5,7 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["bash"] +# required_tools: ["Bash"] package cupcake.policies.opencode.block_no_verify import rego.v1 diff --git a/.cupcake/policies/opencode/block_silent_none_return.rego b/.cupcake/policies/opencode/block_silent_none_return.rego index 6b976ab..bdb56b4 100644 --- a/.cupcake/policies/opencode/block_silent_none_return.rego +++ b/.cupcake/policies/opencode/block_silent_none_return.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_silent_none_return import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -104,7 +99,7 @@ pattern := `except\s+\w*Error.*?:\s*\n\s+.*?(?:logger\.|logging\.).*?\n\s+return deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} content := new_content content != null @@ -119,7 +114,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits content := edit_new_content(edit) @@ -135,7 +130,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_test_loops_conditionals.rego b/.cupcake/policies/opencode/block_test_loops_conditionals.rego index 4c38e9a..b706398 100644 --- a/.cupcake/policies/opencode/block_test_loops_conditionals.rego +++ b/.cupcake/policies/opencode/block_test_loops_conditionals.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_test_loops_conditionals import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -126,7 +121,7 @@ pattern := `def test_[^(]+\([^)]*\)[^:]*:[\s\S]*?\b(for|while|if)\s+[^:]+:[\s\S] deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -144,7 +139,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) @@ -163,7 +158,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/policies/opencode/block_tests_quality.rego b/.cupcake/policies/opencode/block_tests_quality.rego index 6652ad4..45233fd 100644 --- a/.cupcake/policies/opencode/block_tests_quality.rego +++ b/.cupcake/policies/opencode/block_tests_quality.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.block_tests_quality import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -105,7 +100,7 @@ exclude_pattern := `baselines\.json$` deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -120,7 +115,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) diff --git a/.cupcake/policies/opencode/block_tests_quality_bash.rego b/.cupcake/policies/opencode/block_tests_quality_bash.rego index 8e2ab9a..e65e9b0 100644 --- a/.cupcake/policies/opencode/block_tests_quality_bash.rego +++ b/.cupcake/policies/opencode/block_tests_quality_bash.rego @@ -5,7 +5,7 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["bash"] +# required_tools: ["Bash"] package cupcake.policies.opencode.block_tests_quality_bash import rego.v1 diff --git a/.cupcake/policies/opencode/builtins/git_block_no_verify.rego b/.cupcake/policies/opencode/builtins/git_block_no_verify.rego new file mode 100644 index 0000000..4bb2ac9 --- /dev/null +++ b/.cupcake/policies/opencode/builtins/git_block_no_verify.rego @@ -0,0 +1,107 @@ +# METADATA +# scope: package +# title: Git Block No-Verify - Builtin Policy +# authors: ["Cupcake Builtins"] +# custom: +# severity: HIGH +# id: BUILTIN-GIT-BLOCK-NO-VERIFY +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.builtins.git_block_no_verify + +import rego.v1 + +import data.cupcake.helpers.commands + +# Block git commands that bypass verification hooks +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + # Get the command from tool input + command := lower(input.tool_input.command) + + # Check if it's a git command with --no-verify flag + contains_git_no_verify(command) + + decision := { + "rule_id": "BUILTIN-GIT-BLOCK-NO-VERIFY", + "reason": "Git operations with --no-verify are not permitted. Commit hooks must run for code quality and security checks.", + "severity": "HIGH", + } +} + +# Check if command contains git with --no-verify flag +# Uses helper library to prevent spacing bypass (TOB-EQTY-LAB-CUPCAKE-3) +contains_git_no_verify(cmd) if { + # Check for git commit with --no-verify + commands.has_verb(cmd, "git") + commands.has_verb(cmd, "commit") + contains(cmd, "--no-verify") +} + +contains_git_no_verify(cmd) if { + # Check for git commit with -n (shorthand for --no-verify) + commands.has_verb(cmd, "git") + commands.has_verb(cmd, "commit") + regex.match(`\s-[a-z]*n[a-z]*\s`, concat(" ", [cmd, " "])) # Matches -n, -an, -nm, etc. +} + +contains_git_no_verify(cmd) if { + # Check for git push with --no-verify + commands.has_verb(cmd, "git") + commands.has_verb(cmd, "push") + contains(cmd, "--no-verify") +} + +contains_git_no_verify(cmd) if { + # Check for git merge with --no-verify + commands.has_verb(cmd, "git") + commands.has_verb(cmd, "merge") + contains(cmd, "--no-verify") +} + +# Also block attempts to disable hooks via config +deny contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := lower(input.tool_input.command) + + # Check if trying to disable hooks via git config + contains_hook_disable(command) + + decision := { + "rule_id": "BUILTIN-GIT-BLOCK-NO-VERIFY", + "reason": "Disabling git hooks is not permitted. Hooks are required for code quality and security.", + "severity": "HIGH", + } +} + +contains_hook_disable(cmd) if { + commands.has_verb(cmd, "git") + commands.has_verb(cmd, "config") + contains(cmd, "core.hooksPath") + contains(cmd, "/dev/null") +} + +contains_hook_disable(cmd) if { + # Detect attempts to chmod hooks to non-executable + commands.has_verb(cmd, "chmod") + regex.match(`\.git/hooks`, cmd) + regex.match(`-x|-[0-9]*0[0-9]*`, cmd) # Removing execute permission +} + +contains_hook_disable(cmd) if { + # Detect attempts to remove hook files + contains(cmd, ".git/hooks") + removal_cmds := {"rm", "unlink", "trash"} + commands.has_dangerous_verb(cmd, removal_cmds) +} + +contains_hook_disable(cmd) if { + # Detect moving/renaming hooks to disable them + commands.has_verb(cmd, "mv") + contains(cmd, ".git/hooks") +} diff --git a/.cupcake/policies/opencode/builtins/git_pre_check.rego b/.cupcake/policies/opencode/builtins/git_pre_check.rego new file mode 100644 index 0000000..db33349 --- /dev/null +++ b/.cupcake/policies/opencode/builtins/git_pre_check.rego @@ -0,0 +1,121 @@ +# METADATA +# scope: package +# title: Git Pre-Check - Builtin Policy +# authors: ["Cupcake Builtins"] +# custom: +# severity: HIGH +# id: BUILTIN-GIT-CHECK +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.builtins.git_pre_check + +import rego.v1 + +# Check git operations and run validation before allowing +halt contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + # Check if this is a git operation that needs validation + command := lower(input.params.command) + is_git_operation(command) + + # Run all configured checks + check_results := run_all_checks + + # Find any failed checks + failed_checks := [check | + some check in check_results + not check.success + ] + + # If any checks failed, halt the operation + count(failed_checks) > 0 + + # Build failure message + failure_messages := [msg | + some check in failed_checks + msg := concat("", ["- ", check.message]) + ] + + failure_list := concat("\n", failure_messages) + reason := concat("\n", ["Git pre-checks failed:", failure_list]) + + decision := { + "rule_id": "BUILTIN-GIT-CHECK", + "reason": reason, + "severity": "HIGH", + } +} + +# Check if command is a git operation that needs validation +is_git_operation(cmd) if { + git_patterns := { + "git commit", + "git push", + "git merge", + } + + some pattern in git_patterns + contains(cmd, pattern) +} + +# Run all configured pre-checks +run_all_checks := results if { + # Collect all git check signals + check_signals := [name | + some name, _ in input.signals + startswith(name, "__builtin_git_check_") + ] + + # Evaluate each check + results := [result | + some signal_name in check_signals + signal_result := input.signals[signal_name] + result := evaluate_check(signal_name, signal_result) + ] + + # Return results if we have any + count(results) > 0 +} else := [] + +# No checks configured + +# Evaluate a check result +evaluate_check(name, result) := check if { + # Parse the signal result which should contain exit_code and output + is_object(result) + check := { + "name": clean_signal_name(name), + "success": result.exit_code == 0, + "message": default_message(result), + } +} else := check if { + # Handle string results (command output) + is_string(result) + check := { + "name": clean_signal_name(name), + "success": true, # Assume success if we got output + "message": result, + } +} + +# Extract readable name from signal name +clean_signal_name(signal_name) := name if { + # Remove __builtin_git_check_ prefix and return the index + parts := split(signal_name, "__builtin_git_check_") + count(parts) > 1 + name := concat("Check ", [parts[1]]) +} else := signal_name + +# Get appropriate message from result +default_message(result) := msg if { + result.output != "" + msg := result.output +} else := msg if { + result.exit_code == 0 + msg := "Check passed" +} else := msg if { + msg := concat("", ["Check failed with exit code ", format_int(result.exit_code, 10)]) +} diff --git a/.cupcake/policies/opencode/builtins/opencode_always_inject_on_prompt.rego b/.cupcake/policies/opencode/builtins/opencode_always_inject_on_prompt.rego new file mode 100644 index 0000000..09cb42d --- /dev/null +++ b/.cupcake/policies/opencode/builtins/opencode_always_inject_on_prompt.rego @@ -0,0 +1,60 @@ +# METADATA +# scope: package +# title: Always Inject On Prompt - Builtin Policy +# authors: ["Cupcake Builtins"] +# custom: +# severity: LOW +# id: BUILTIN-INJECT-PROMPT +# routing: +# required_events: ["UserPromptSubmit"] +package cupcake.policies.builtins.opencode_always_inject_on_prompt + +import rego.v1 + +# Inject configured context on every user prompt +add_context contains decision if { + input.hook_event_name == "UserPromptSubmit" + + # Get all configured context items + contexts := get_all_contexts + count(contexts) > 0 + + # Combine all contexts + combined_context := concat("\n\n", contexts) + + decision := { + "rule_id": "BUILTIN-INJECT-PROMPT", + "context": combined_context, + "severity": "LOW", + } +} + +# Get all configured contexts from signals +get_all_contexts := contexts if { + # Collect all builtin prompt context signals + signal_results := [value | + some key, value in input.signals + startswith(key, "__builtin_prompt_context_") + ] + + # Format each context appropriately + contexts := [ctx | + some result in signal_results + ctx := format_context(result) + ] + + # Ensure we have at least one context + count(contexts) > 0 +} else := [] + +# No signals available or no contexts configured + +# Format context based on its source +format_context(value) := formatted if { + # If it's a string, use it directly + is_string(value) + formatted := value +} else := formatted if { + # If it's an object/array, format as JSON + formatted := json.marshal(value) +} diff --git a/.cupcake/policies/opencode/builtins/opencode_enforce_full_file_read.rego b/.cupcake/policies/opencode/builtins/opencode_enforce_full_file_read.rego new file mode 100644 index 0000000..934fc62 --- /dev/null +++ b/.cupcake/policies/opencode/builtins/opencode_enforce_full_file_read.rego @@ -0,0 +1,63 @@ +# METADATA +# scope: package +# title: Enforce Full File Read - Builtin Policy +# authors: ["Cupcake Builtins"] +# custom: +# severity: MEDIUM +# id: BUILTIN-ENFORCE-FULL-READ +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Read"] +package cupcake.policies.builtins.opencode_enforce_full_file_read + +import rego.v1 + +# Deny partial reads of files (MVP: enforce for all files) +deny contains decision if { + # Only apply to Read tool + input.hook_event_name == "PreToolUse" + input.tool_name == "Read" + + # Check if offset or limit parameters are present + has_partial_read_params + + # Get configured message from signal (with fallback) + message := get_configured_message + + decision := { + "rule_id": "BUILTIN-ENFORCE-FULL-READ", + "reason": message, + "severity": "MEDIUM", + } +} + +# Check if the Read tool has offset or limit parameters +has_partial_read_params if { + # Check for offset parameter + "offset" in object.keys(input.tool_input) +} + +has_partial_read_params if { + # Check for limit parameter + "limit" in object.keys(input.tool_input) +} + +# Get configured message from builtin config +get_configured_message := msg if { + # Direct access to builtin config (no signal execution needed) + msg := input.builtin_config.opencode_enforce_full_file_read.message +} else := msg if { + # Fallback to default message + msg := "Please read the entire file first (files under 2000 lines must be read completely)" +} + +# Future enhancement: Get max lines threshold +# This would be used in a future version to check file size +# and only enforce full reads for files under the threshold +get_max_lines_threshold := lines if { + # Direct access to builtin config (no signal execution needed) + lines := input.builtin_config.opencode_enforce_full_file_read.max_lines +} else := lines if { + # Default to 2000 lines + lines := 2000 +} diff --git a/.cupcake/policies/opencode/builtins/post_edit_check.rego b/.cupcake/policies/opencode/builtins/post_edit_check.rego new file mode 100644 index 0000000..9d61bc6 --- /dev/null +++ b/.cupcake/policies/opencode/builtins/post_edit_check.rego @@ -0,0 +1,135 @@ +# METADATA +# scope: package +# title: Post Edit Check - Builtin Policy +# authors: ["Cupcake Builtins"] +# custom: +# severity: MEDIUM +# id: BUILTIN-POST-EDIT +# routing: +# required_events: ["PostToolUse"] +# required_tools: ["Edit", "Write", "MultiEdit", "NotebookEdit"] +package cupcake.policies.builtins.post_edit_check + +import rego.v1 + +# Run validation after file edits +ask contains decision if { + input.hook_event_name == "PostToolUse" + + # Check if this was a file editing operation + editing_tools := {"Edit", "Write", "MultiEdit", "NotebookEdit"} + input.tool_name in editing_tools + + # Get the file that was edited + file_path := get_edited_file_path + file_path != "" + + # Get file extension + extension := get_file_extension(file_path) + extension != "" + + # Run validation for this file type + validation_result := run_validation_for_extension(extension, file_path) + + # If validation failed, ask for user confirmation + not validation_result.success + + question := concat("\n", [ + concat(" ", ["File validation failed for", file_path]), + validation_result.message, + "", + "Do you want to continue anyway?", + ]) + + decision := { + "rule_id": "BUILTIN-POST-EDIT", + "reason": question, + "question": question, + "severity": "MEDIUM", + } +} + +# Also provide feedback as context when validation succeeds +add_context contains context_msg if { + input.hook_event_name == "PostToolUse" + + editing_tools := {"Edit", "Write", "MultiEdit", "NotebookEdit"} + input.tool_name in editing_tools + + file_path := get_edited_file_path + file_path != "" + + extension := get_file_extension(file_path) + extension != "" + + validation_result := run_validation_for_extension(extension, file_path) + + # If validation succeeded, provide positive feedback + validation_result.success + + # add_context expects strings, not decision objects + context_msg := concat(" ", ["✓ Validation passed for", file_path]) +} + +# Extract file path from tool response/params +get_edited_file_path := path if { + path := input.params.file_path +} else := path if { + path := input.params.path +} else := "" + +# Get file extension from path +get_file_extension(path) := ext if { + parts := split(path, ".") + count(parts) > 1 + ext := parts[count(parts) - 1] +} else := "" + +# Run validation for a specific file extension +run_validation_for_extension(ext, file_path) := result if { + # Check if there's a configured validation signal for this extension + signal_name := concat("", ["__builtin_post_edit_", ext]) + signal_name in object.keys(input.signals) + + # Get the validation result from the signal + signal_result := input.signals[signal_name] + + # Parse the result based on its type + result := parse_validation_result(signal_result, file_path) +} else := result if { + # No validation configured for this extension + result := { + "success": true, + "message": "No validation configured - FALLBACK", + } +} + +# Parse validation result from signal +parse_validation_result(signal_result, file_path) := result if { + # Handle object results with exit_code (standard format from signal execution) + is_object(signal_result) + "exit_code" in object.keys(signal_result) + + result := { + "success": signal_result.exit_code == 0, + "message": default_validation_message(signal_result, file_path), + } +} else := result if { + # Handle string results (assume success if we got output) + is_string(signal_result) + result := { + "success": true, + "message": signal_result, + } +} + +# Generate appropriate validation message +default_validation_message(signal_result, file_path) := msg if { + signal_result.output != "" + msg := signal_result.output +} else := msg if { + signal_result.exit_code == 0 + msg := "Validation passed" +} else := msg if { + msg := concat("", ["Validation failed with exit code ", format_int(signal_result.exit_code, 10)]) +} diff --git a/.cupcake/policies/opencode/builtins/protected_paths.rego b/.cupcake/policies/opencode/builtins/protected_paths.rego new file mode 100644 index 0000000..b3165ac --- /dev/null +++ b/.cupcake/policies/opencode/builtins/protected_paths.rego @@ -0,0 +1,380 @@ +# METADATA +# scope: package +# title: Protected Paths - Builtin Policy +# authors: ["Cupcake Builtins"] +# custom: +# severity: HIGH +# id: BUILTIN-PROTECTED-PATHS +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Edit", "Write", "MultiEdit", "NotebookEdit", "Bash"] +package cupcake.policies.builtins.protected_paths + +import data.cupcake.helpers.commands +import data.cupcake.helpers.paths +import rego.v1 + +# Block WRITE operations on protected paths (but allow reads) +# For regular tools (Edit, Write, NotebookEdit) +halt contains decision if { + input.hook_event_name == "PreToolUse" + + # Check for SINGLE-file writing tools only + single_file_tools := {"Edit", "Write", "NotebookEdit"} + input.tool_name in single_file_tools + + # Get the file path from tool input + # TOB-4 fix: Use canonical path (always provided by Rust preprocessing) + file_path := input.resolved_file_path + file_path != null + + # Check if path matches any protected path + is_protected_path(file_path) + + # Get configured message from signals + message := get_configured_message + + decision := { + "rule_id": "BUILTIN-PROTECTED-PATHS", + "reason": concat("", [message, " (", file_path, ")"]), + "severity": "HIGH", + } +} + +# Block WRITE operations on protected paths - MultiEdit special handling +# MultiEdit has an array of edits, each with their own resolved_file_path +halt contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "MultiEdit" + + # Check each edit in the edits array + some edit in input.tool_input.edits + file_path := edit.resolved_file_path + file_path != null + + # Check if THIS edit's path matches any protected path + is_protected_path(file_path) + + # Get configured message from signals + message := get_configured_message + + decision := { + "rule_id": "BUILTIN-PROTECTED-PATHS", + "reason": concat("", [message, " (", file_path, ")"]), + "severity": "HIGH", + } +} + +# Block ALL Bash commands that reference protected paths UNLESS whitelisted +halt contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + # Get the command + command := input.tool_input.command + lower_cmd := lower(command) + + # Check if any protected path is mentioned in the command + some protected_path in get_protected_paths + contains_protected_reference(lower_cmd, protected_path) + + # ONLY allow if it's a whitelisted read operation + not is_whitelisted_read_command(lower_cmd) + + message := get_configured_message + + decision := { + "rule_id": "BUILTIN-PROTECTED-PATHS", + "reason": concat("", [message, " (only read operations allowed)"]), + "severity": "HIGH", + } +} + +# Block destructive commands that would affect a parent directory containing protected paths +# This catches cases like `rm -rf /home/user/*` when `/home/user/.cupcake/` is protected +# The `affected_parent_directories` field is populated by Rust preprocessing for destructive commands +halt contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + # Get affected parent directories from preprocessing + # This is populated for commands like rm -rf, chmod -R, etc. + affected_dirs := input.affected_parent_directories + count(affected_dirs) > 0 + + # Check if any protected path is a CHILD of an affected directory + some affected_dir in affected_dirs + some protected_path in get_protected_paths + protected_is_child_of_affected(protected_path, affected_dir) + + message := get_configured_message + + decision := { + "rule_id": "BUILTIN-PROTECTED-PATHS-PARENT", + "reason": concat("", [message, " (", protected_path, " would be affected by operation on ", affected_dir, ")"]), + "severity": "HIGH", + } +} + +# Block interpreter inline scripts (-c/-e flags) that mention protected paths +# This catches attacks like: python -c 'pathlib.Path("../my-favorite-file.txt").delete()' +halt contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := input.tool_input.command + lower_cmd := lower(command) + + # Detect inline script execution with interpreters + interpreters := ["python", "python3", "python2", "ruby", "perl", "node", "php"] + some interp in interpreters + regex.match(concat("", ["(^|\\s)", interp, "\\s+(-c|-e)\\s"]), lower_cmd) + + # Check if any protected path is mentioned anywhere in the command + some protected_path in get_protected_paths + contains(lower_cmd, lower(protected_path)) + + message := get_configured_message + + decision := { + "rule_id": "BUILTIN-PROTECTED-PATHS-SCRIPT", + "reason": concat("", [message, " (inline script mentions '", protected_path, "')"]), + "severity": "HIGH", + } +} + +# Extract file path from tool input +get_file_path_from_tool_input := path if { + path := input.tool_input.file_path +} else := path if { + path := input.tool_input.path +} else := path if { + path := input.tool_input.notebook_path +} else := path if { + # For MultiEdit, check if any edit targets a protected path + # Return the first protected path found + some edit in input.tool_input.edits + path := edit.file_path +} else := "" + +# Check if a path is protected +is_protected_path(path) if { + protected_paths := get_protected_paths + some protected_path in protected_paths + path_matches(path, protected_path) +} + +# Path matching logic (supports exact, directory prefix, filename, and glob patterns) +path_matches(path, pattern) if { + # Exact match (case-insensitive) + lower(path) == lower(pattern) +} + +path_matches(path, pattern) if { + # Filename match - pattern is just a filename (no path separators) + # Matches if the canonical path ends with the filename + not contains(pattern, "/") + not contains(pattern, "\\") + endswith(lower(path), concat("/", [lower(pattern)])) +} + +path_matches(path, pattern) if { + # Filename match for Windows paths + not contains(pattern, "/") + not contains(pattern, "\\") + endswith(lower(path), concat("\\", [lower(pattern)])) +} + +path_matches(path, pattern) if { + # Directory prefix match - absolute pattern (starts with /) + # Pattern: "/absolute/path/" matches "/absolute/path/file.txt" + endswith(pattern, "/") + startswith(pattern, "/") + startswith(lower(path), lower(pattern)) +} + +path_matches(path, pattern) if { + # Directory prefix match - relative pattern + # Pattern: "src/legacy/" should match "/tmp/project/src/legacy/file.rs" + # This handles canonical absolute paths against relative pattern configs + endswith(pattern, "/") + not startswith(pattern, "/") + + # Check if the pattern appears in the path as a directory component + # We need to match "/src/legacy/" not just any "src/legacy/" substring + contains(lower(path), concat("/", [lower(pattern)])) +} + +path_matches(path, pattern) if { + # Directory match without trailing slash - absolute pattern + # If pattern is "/absolute/path/src/legacy", match "/absolute/path/src/legacy/file.js" + not endswith(pattern, "/") + startswith(pattern, "/") + prefix := concat("", [lower(pattern), "/"]) + startswith(lower(path), prefix) +} + +path_matches(path, pattern) if { + # Directory match without trailing slash - relative pattern + # If pattern is "src/legacy", match "/tmp/project/src/legacy/file.js" + not endswith(pattern, "/") + not startswith(pattern, "/") + prefix := concat("/", [lower(pattern), "/"]) + contains(lower(path), prefix) +} + +path_matches(path, pattern) if { + # Glob pattern matching (simplified - just * wildcard for now) + contains(pattern, "*") + glob_match(lower(path), lower(pattern)) +} + +# Simple glob matching (supports * wildcard) +glob_match(path, pattern) if { + # Convert glob pattern to regex: * becomes .* + regex_pattern := replace(replace(pattern, ".", "\\."), "*", ".*") + regex_pattern_anchored := concat("", ["^", regex_pattern, "$"]) + regex.match(regex_pattern_anchored, path) +} + +# WHITELIST approach: Only these read operations are allowed on protected paths +is_whitelisted_read_command(cmd) if { + # Exclude dangerous sed variants FIRST + startswith(cmd, "sed -i") # In-place edit + false # Explicitly reject +} + +is_whitelisted_read_command(cmd) if { + # Check if command starts with a safe read-only command + safe_read_verbs := { + "cat", # Read file contents + "less", # Page through file + "more", # Page through file + "head", # Read first lines + "tail", # Read last lines + "grep", # Search in file + "egrep", # Extended grep + "fgrep", # Fixed string grep + "zgrep", # Grep compressed files + "wc", # Word/line count + "file", # Determine file type + "stat", # File statistics + "ls", # List files + "find", # Find files (read-only by default) + "awk", # Text processing (without output redirect) + "sed", # Stream editor (safe without -i flag) + "sort", # Sort lines + "uniq", # Filter unique lines + "diff", # Compare files + "cmp", # Compare files byte by byte + "md5sum", # Calculate checksum + "sha256sum", # Calculate checksum + "hexdump", # Display in hex + "strings", # Extract strings from binary + "od", # Octal dump + } + + some verb in safe_read_verbs + commands.has_verb(cmd, verb) + + # CRITICAL: Exclude sed -i specifically + # This check is NOT redundant with lines 188-192. OPA evaluates ALL rule bodies + # for is_whitelisted_read_command(). Body 1 (lines 188-192) explicitly rejects "sed -i", + # but OPA continues to evaluate Body 2 (this body). Without this check, "sed -i" + # would match the "sed" verb above and incorrectly be whitelisted. + # Whitespace variations (sed -i, sed\t-i) are normalized by preprocessing. + not startswith(cmd, "sed -i") + + # Ensure no output redirection + not commands.has_output_redirect(cmd) +} + +is_whitelisted_read_command(cmd) if { + # Also allow piped commands that start with safe reads + # e.g., "cat file.txt | grep pattern" + contains(cmd, "|") + parts := split(cmd, "|") + first_part := trim_space(parts[0]) + + # Check if first part starts with a safe command (avoid recursion) + safe_read_verbs := { + "cat", # Read file contents + "less", # Page through file + "more", # Page through file + "head", # Read first lines + "tail", # Read last lines + "grep", # Search in file + "wc", # Word/line count + "file", # Determine file type + "stat", # File statistics + "ls", # List files + } + + some verb in safe_read_verbs + commands.has_verb(first_part, verb) +} + +# Check if command references a protected path +contains_protected_reference(cmd, protected_path) if { + # Direct reference + contains(cmd, lower(protected_path)) +} + +contains_protected_reference(cmd, protected_path) if { + # Without trailing slash if it's a directory pattern + endswith(protected_path, "/") + path_without_slash := substring(lower(protected_path), 0, count(protected_path) - 1) + contains(cmd, path_without_slash) +} + +# Get configured message from builtin config +get_configured_message := msg if { + # Direct access to builtin config (no signal execution needed) + msg := input.builtin_config.protected_paths.message +} else := msg if { + # Fallback to default if config not present + msg := "This path is read-only and cannot be modified" +} + +# Get list of protected paths from builtin config +get_protected_paths := paths if { + # Direct access to builtin config (no signal execution needed) + paths := input.builtin_config.protected_paths.paths +} else := paths if { + # No paths configured - policy inactive + paths := [] +} + +# Check if a protected path is a child of an affected directory +# This is the "reverse" check for parent directory protection: +# protected_path: /home/user/.cupcake/config.yml +# affected_dir: /home/user/ +# Returns true because the protected path is inside the affected directory +protected_is_child_of_affected(protected_path, affected_dir) if { + # Normalize: ensure affected_dir ends with / + affected_normalized := ensure_trailing_slash(affected_dir) + + # Check if protected path starts with the affected directory + startswith(lower(protected_path), lower(affected_normalized)) +} + +protected_is_child_of_affected(protected_path, affected_dir) if { + # Also check exact match (rm -rf /home/user/.cupcake) + lower(protected_path) == lower(affected_dir) +} + +protected_is_child_of_affected(protected_path, affected_dir) if { + # Handle case where affected_dir is specified without trailing slash + # but protected_path has it as a prefix + not endswith(affected_dir, "/") + prefix := concat("", [lower(affected_dir), "/"]) + startswith(lower(protected_path), prefix) +} + +# Helper to ensure path ends with / +ensure_trailing_slash(path) := result if { + endswith(path, "/") + result := path +} else := result if { + result := concat("", [path, "/"]) +} diff --git a/.cupcake/policies/opencode/builtins/rulebook_security_guardrails.rego b/.cupcake/policies/opencode/builtins/rulebook_security_guardrails.rego new file mode 100644 index 0000000..86731e8 --- /dev/null +++ b/.cupcake/policies/opencode/builtins/rulebook_security_guardrails.rego @@ -0,0 +1,231 @@ +# METADATA +# scope: package +# title: Rulebook Security Guardrails - Builtin Policy +# authors: ["Cupcake Builtins"] +# custom: +# severity: HIGH +# id: BUILTIN-RULEBOOK-SECURITY +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Edit", "Write", "MultiEdit", "NotebookEdit", "Read", "Grep", "Glob", "Bash", "Task", "WebFetch"] +package cupcake.policies.builtins.rulebook_security_guardrails + +import rego.v1 + +import data.cupcake.helpers.commands + +# Block ANY tool operations targeting protected paths +halt contains decision if { + input.hook_event_name == "PreToolUse" + + # Check for ANY file operation tools (read, write, search, etc.) + file_operation_tools := { + "Edit", "Write", "MultiEdit", "NotebookEdit", # Writing tools + "Read", # Reading tools + "Grep", "Glob", # Search/listing tools + "WebFetch", # Could use file:// URLs + "Task", # Could spawn agent to bypass + } + input.tool_name in file_operation_tools + + # Check if any parameter contains a protected path (case-insensitive) + # TOB-4 fix: Prefer canonical path (input.resolved_file_path) when available, + # but fall back to raw tool_input fields for pattern-based tools (Glob/Grep) + # that don't have file paths that can be canonicalized + file_path := get_file_path_with_preprocessing_fallback + file_path != "" + is_protected_path(file_path) + + # Get configured message from signals (fallback to default) + message := get_configured_message + + decision := { + "rule_id": "BUILTIN-RULEBOOK-SECURITY", + "reason": concat("", [message, " (blocked file operation on ", file_path, ")"]), + "severity": "HIGH", + } +} + +# Block Bash commands that reference any protected path +# Total lockdown - NO whitelist (unlike protected_paths builtin) +halt contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + # Check if command references any protected path + # Bash tool uses tool_input.command, not params.command + command := lower(input.tool_input.command) + + # Iterate over all protected paths + some protected_path in get_protected_paths + contains_protected_reference(command, protected_path) + + message := get_configured_message + + decision := { + "rule_id": "BUILTIN-RULEBOOK-SECURITY", + "reason": concat("", [message, " (detected protected path reference in bash command)"]), + "severity": "HIGH", + } +} + +# Block symlink creation involving any protected path (TOB-EQTY-LAB-CUPCAKE-4) +halt contains decision if { + input.hook_event_name == "PreToolUse" + input.tool_name == "Bash" + + command := lower(input.tool_input.command) + + # Check if command creates symlink involving ANY protected path (source OR target) + some protected_path in get_protected_paths + commands.symlink_involves_path(command, protected_path) + + message := get_configured_message + + decision := { + "rule_id": "BUILTIN-RULEBOOK-SECURITY", + "reason": concat("", [message, " (symlink creation involving protected path is not permitted)"]), + "severity": "HIGH", + } +} + +# Check if a file path matches any protected path +is_protected_path(path) if { + protected_paths := get_protected_paths + some protected_path in protected_paths + path_matches(path, protected_path) +} + +# Path matching logic (supports substring and directory matching) +path_matches(path, pattern) if { + # Exact match (case-insensitive) + lower(path) == lower(pattern) +} + +path_matches(path, pattern) if { + # Substring match - handles both file and directory references + # "/full/path/.cupcake/file" matches ".cupcake" + # "/full/path/secrets/api.key" matches "secrets/" + lower_path := lower(path) + lower_pattern := lower(pattern) + contains(lower_path, lower_pattern) +} + +path_matches(path, pattern) if { + # Directory match without trailing slash + # Pattern "secrets" should match "/full/path/secrets/file" + not endswith(pattern, "/") + lower_path := lower(path) + lower_pattern := lower(pattern) + + # Add slash to ensure directory boundary + pattern_with_slash := concat("", [lower_pattern, "/"]) + contains(lower_path, pattern_with_slash) +} + +path_matches(path, pattern) if { + # Canonical directory paths don't have trailing slashes + # Pattern ".cupcake/" should match canonical path "/tmp/xyz/.cupcake" + # This handles the case where preprocessing canonicalizes directory paths + endswith(pattern, "/") + pattern_without_slash := substring(pattern, 0, count(pattern) - 1) + lower_path := lower(path) + lower_pattern := lower(pattern_without_slash) + + # Ensure directory boundary by checking for /{pattern} suffix + path_suffix := concat("", ["/", lower_pattern]) + endswith(lower_path, path_suffix) +} + +path_matches(path, pattern) if { + # Protected path with trailing slash should also match without the slash + # This handles Glob patterns like ".cupcake*" matching protected path ".cupcake/" + # Also handles paths/patterns that reference the directory without trailing slash + endswith(pattern, "/") + pattern_without_slash := substring(pattern, 0, count(pattern) - 1) + contains(lower(path), lower(pattern_without_slash)) +} + +# Check if command references a protected path +contains_protected_reference(cmd, protected_path) if { + # Direct reference (case-insensitive) + contains(cmd, lower(protected_path)) +} + +contains_protected_reference(cmd, protected_path) if { + # Without trailing slash if it's a directory pattern + # "secrets/" pattern should also match "secrets" in command + endswith(protected_path, "/") + path_without_slash := substring(lower(protected_path), 0, count(protected_path) - 1) + contains(cmd, path_without_slash) +} + +# Get configured message from builtin config +get_configured_message := msg if { + # Direct access to builtin config (no signal execution needed) + msg := input.builtin_config.rulebook_security_guardrails.message +} else := msg if { + # Fallback to default if config not present + msg := "Cupcake configuration files are protected from modification" +} + +# Extract file path from tool input based on tool type +get_file_path_from_tool_input := path if { + # Standard file_path parameter (Edit, Write, MultiEdit, NotebookEdit, Read) + path := input.tool_input.file_path +} else := path if { + # Path parameter (Grep, Glob) + path := input.tool_input.path +} else := path if { + # Pattern parameter might contain path (Glob) + path := input.tool_input.pattern +} else := path if { + # URL parameter for WebFetch (could be file:// URL) + path := input.tool_input.url +} else := path if { + # Task prompt might contain .cupcake references + path := input.tool_input.prompt +} else := path if { + # Notebook path for NotebookEdit + path := input.tool_input.notebook_path +} else := path if { + # Some tools use params instead of tool_input + path := input.params.file_path +} else := path if { + path := input.params.path +} else := path if { + path := input.params.pattern +} else := "" + +# TOB-4 aware path extraction: Prefer canonical path from preprocessing, +# fall back to raw tool_input only for Glob (patterns can't be canonicalized) +# +# FIXED: GitHub Copilot review - Grep symlink bypass (TOB-4 defense) +# - Grep's 'path' field now uses canonical paths (closes symlink bypass) +# - Glob's 'pattern' field still uses raw patterns (can't be canonicalized) +# +# TODO: Known Glob limitations (complex pattern parsing required): +# - Glob(pattern="backup/**/*.rego") where "backup" is symlink to .cupcake +# - Glob(pattern="**/*.rego") searches symlinks without .cupcake in pattern +# - Requires pattern parsing before file expansion to fully address +get_file_path_with_preprocessing_fallback := path if { + # For Glob only, use raw pattern since it can't be canonicalized (e.g., "**/*.rs") + # Grep's 'path' field CAN be canonicalized, so it goes through TOB-4 defense + input.tool_name == "Glob" + path := get_file_path_from_tool_input +} else := input.resolved_file_path if { + # For other tools (including Grep), use canonical path from Rust preprocessing (TOB-4 defense) + input.resolved_file_path != "" +} else := path if { + # Final fallback + path := get_file_path_from_tool_input +} + +# Helper: Get list of protected paths from builtin config +get_protected_paths := paths if { + # Direct access to builtin config (no signal execution needed) + paths := input.builtin_config.rulebook_security_guardrails.protected_paths +} else := paths if { + # Default protected paths + paths := [".cupcake/"] +} diff --git a/.cupcake/policies/opencode/example.rego b/.cupcake/policies/opencode/example.rego new file mode 100644 index 0000000..0fb2487 --- /dev/null +++ b/.cupcake/policies/opencode/example.rego @@ -0,0 +1,33 @@ +# METADATA +# scope: package +# title: Example Policy +# description: A minimal example policy that never fires +# custom: +# routing: +# required_events: ["PreToolUse"] +# required_tools: ["Bash"] +package cupcake.policies.example + +import rego.v1 + +# This rule will never fire - it's just here to prevent OPA compilation issues +# It checks for a command that nobody would ever type +deny contains decision if { + input.tool_input.command == "CUPCAKE_EXAMPLE_RULE_THAT_NEVER_FIRES_12345" + decision := { + "reason": "This will never happen", + "severity": "LOW", + "rule_id": "EXAMPLE-001" + } +} + +# Replace the above with your actual policies +# Example of a real policy: +# deny contains decision if { +# contains(input.tool_input.command, "rm -rf /") +# decision := { +# "reason": "Dangerous command blocked", +# "severity": "HIGH", +# "rule_id": "SAFETY-001" +# } +# } diff --git a/.cupcake/policies/opencode/prevent_any_type.rego b/.cupcake/policies/opencode/prevent_any_type.rego index 0b9be0e..89e4022 100644 --- a/.cupcake/policies/opencode/prevent_any_type.rego +++ b/.cupcake/policies/opencode/prevent_any_type.rego @@ -5,18 +5,13 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.prevent_any_type import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -128,7 +123,7 @@ any_type_patterns := [ # Block Write/Edit operations that introduce Any in Python files deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} # Only enforce for Python files file_path := lower(resolved_file_path) @@ -149,7 +144,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} content := patch_content content != null @@ -166,7 +161,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := lower(edit_path(edit)) diff --git a/.cupcake/policies/opencode/prevent_type_suppression.rego b/.cupcake/policies/opencode/prevent_type_suppression.rego index 6410e39..e1ec86c 100644 --- a/.cupcake/policies/opencode/prevent_type_suppression.rego +++ b/.cupcake/policies/opencode/prevent_type_suppression.rego @@ -5,18 +5,13 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.prevent_type_suppression import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -123,7 +118,7 @@ type_suppression_patterns := [ # Block Write/Edit operations that introduce type suppression in Python files deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} # Only enforce for Python files file_path := lower(resolved_file_path) @@ -144,7 +139,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} content := patch_content content != null @@ -161,7 +156,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := lower(edit_path(edit)) diff --git a/.cupcake/policies/opencode/warn_baselines_edit.rego b/.cupcake/policies/opencode/warn_baselines_edit.rego index 463137f..4d3410f 100644 --- a/.cupcake/policies/opencode/warn_baselines_edit.rego +++ b/.cupcake/policies/opencode/warn_baselines_edit.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.warn_baselines_edit import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -104,7 +99,7 @@ file_path_pattern := `tests/quality/baselines\.json$` deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -118,7 +113,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) diff --git a/.cupcake/policies/opencode/warn_baselines_edit_bash.rego b/.cupcake/policies/opencode/warn_baselines_edit_bash.rego index 4647ab8..0b67e3d 100644 --- a/.cupcake/policies/opencode/warn_baselines_edit_bash.rego +++ b/.cupcake/policies/opencode/warn_baselines_edit_bash.rego @@ -5,7 +5,7 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["bash"] +# required_tools: ["Bash"] package cupcake.policies.opencode.warn_baselines_edit_bash import rego.v1 diff --git a/.cupcake/policies/opencode/warn_large_file.rego b/.cupcake/policies/opencode/warn_large_file.rego index c49d9b7..db96c11 100644 --- a/.cupcake/policies/opencode/warn_large_file.rego +++ b/.cupcake/policies/opencode/warn_large_file.rego @@ -5,17 +5,12 @@ # custom: # routing: # required_events: ["PreToolUse"] -# required_tools: ["apply_patch", "edit", "multiedit", "notebookedit", "patch", "write"] +# required_tools: ["ApplyPatch", "Edit", "MultiEdit", "NotebookEdit", "Patch", "Write"] package cupcake.policies.opencode.warn_large_file import rego.v1 -tool_name := input.tool_name if { - input.tool_name != null -} else := input.tool - -tool_input := input.tool_input if { - input.tool_input != null -} else := input.args +tool_name := input.tool_name +tool_input := input.tool_input resolved_file_path := input.resolved_file_path if { input.resolved_file_path != null @@ -126,7 +121,7 @@ pattern := `(?:.*\n){500,}` deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"write", "edit", "notebookedit"} + tool_name in {"Write", "Edit", "NotebookEdit"} file_path := resolved_file_path regex.match(file_path_pattern, file_path) @@ -144,7 +139,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name == "multiedit" + tool_name == "MultiEdit" some edit in tool_input.edits file_path := edit_path(edit) @@ -163,7 +158,7 @@ deny contains decision if { deny contains decision if { input.hook_event_name == "PreToolUse" - tool_name in {"patch", "apply_patch"} + tool_name in {"Patch", "ApplyPatch"} patch := patch_content patch != null diff --git a/.cupcake/rulebook.yml b/.cupcake/rulebook.yml new file mode 100644 index 0000000..a56e5b2 --- /dev/null +++ b/.cupcake/rulebook.yml @@ -0,0 +1,216 @@ +# Cupcake Base Configuration Template +# This template demonstrates all available builtin abstractions and configuration options. +# Copy this file to .cupcake/rulebook.yml and uncomment/modify as needed. + +# ============================================================================ +# SIGNALS - External data providers +# ============================================================================ +# Signals are commands that provide data to policies. They can return strings +# or JSON structures. Convention: place scripts in .cupcake/signals/ directory +# for auto-discovery, or define explicitly here. + +signals: + # Example: Simple string signal + # current_branch: + # command: "git branch --show-current" + # timeout_seconds: 2 + + # Example: Structured JSON signal + # system_info: + # command: 'echo "{\"os\": \"$(uname)\", \"user\": \"$(whoami)\"}"' + # timeout_seconds: 5 + + # Note: Signals in .cupcake/signals/ directory are auto-discovered + # File signals/foo.sh becomes signal "foo" automatically + +# ============================================================================ +# ACTIONS - Response to policy violations +# ============================================================================ +# Actions are commands executed when policies trigger. Convention: place scripts +# in .cupcake/actions/ directory named by rule_id for auto-discovery. + +actions: + # Actions that run on ANY policy denial + # on_any_denial: + # - command: "echo 'Policy violation detected' >> audit.log" + + # Rule-specific actions (by rule_id) + # by_rule_id: + # SECURITY-001: + # - command: "notify-team --severity high" + # LINT-001: + # - command: "echo 'Code style violation'" + + # Note: Scripts in .cupcake/actions/ are auto-mapped by filename + # File actions/SECURITY-001.sh triggers for rule_id: SECURITY-001 + +# ============================================================================ +# BUILTINS - Higher-level policy abstractions +# ============================================================================ +# Builtins provide common security patterns without writing Rego policies. +# Each builtin can be enabled/disabled and configured independently. +# +# IMPORTANT: Builtins are ENABLED BY DEFAULT when configured. +# Simply configuring a builtin (even with just empty settings) enables it. +# To disable, either remove the configuration or set 'enabled: false'. +# +# FILE PROTECTION BUILTINS (Two-Tier System): +# 1. protected_paths: Makes specific paths read-only (read allowed, write blocked) +# 2. rulebook_security_guardrails: Total lockdown of paths (no read OR write) + +# ============================================================================ +# USAGE NOTES +# ============================================================================ +# 1. Builtins are processed BEFORE custom policies, allowing you to set +# foundational rules that custom policies can build upon. +# +# 2. Signal commands are executed with 'sh -c' and should output valid JSON +# for structured data, or plain text for simple strings. +# +# 3. All paths are relative to the project root (parent of .cupcake/) +# +# 4. Builtin policies are located in .cupcake/policies/builtins/ and are +# only compiled when their corresponding builtin is enabled. +# +# 5. For debugging, use --log-level debug when running Cupcake to see detailed +# information about builtin activation and signal execution. +# +# 6. LIMITATION: Due to Claude Code hook limitations, context can only be +# injected on UserPromptSubmit and SessionStart events. PreToolUse events +# do not support context injection. + +builtins: + # --------------------------------------------------------------------------- + # CLAUDE_CODE_ALWAYS_INJECT_ON_PROMPT - Add context to every user prompt (Claude Code only) + # --------------------------------------------------------------------------- + # Inject additional context with every user interaction. Useful for project + # guidelines, current state awareness, or team conventions. + # Note: Builtins are enabled by default when configured. Use 'enabled: false' to disable. + # Note: This builtin only works with Claude Code due to context injection support. + + # claude_code_always_inject_on_prompt: + # # enabled: true # Optional - defaults to true when configured + # context: + # # Static text context + # - "Follow SOLID principles and write comprehensive tests" + # - "This is a production system - be careful with database changes" + # + # # Dynamic context from command + # - command: "git status --short" + # - command: "date '+Today is %A, %B %d'" + # + # # Context from file + # - file: ".cupcake/coding-standards.md" + # - file: "docs/current-sprint-goals.md" + + # --------------------------------------------------------------------------- + # GIT_PRE_CHECK - Enforce checks before git operations + # --------------------------------------------------------------------------- + # Run validation before allowing git commits, pushes, or merges. Ensures + # code quality and prevents broken commits from entering the repository. + + git_pre_check: + enabled: true + checks: + - command: "echo Validation passed" + message: "Basic validation check" + + # Optional: only apply to certain operations + # operations: ["commit", "push"] # skip for merge + + # --------------------------------------------------------------------------- + # POST_EDIT_CHECK - Validate files after modification + # --------------------------------------------------------------------------- + # Run language-specific validation after files are edited. Provides immediate + # feedback about syntax errors, type issues, or style violations. + + # post_edit_check: + # # enabled: true # Optional - defaults to true when configured + # # Checks by file extension + # by_extension: + # "rs": + # command: "cargo check --message-format short" + # message: "Rust compilation check" + # + # "py": + # command: "python -m py_compile" + # message: "Python syntax validation" + # + # "tsx": + # command: "npx tsc --noEmit" + # message: "TypeScript type checking" + # + # "jsx": + # command: "npx eslint --quiet" + # message: "ESLint validation" + # + # "go": + # command: "go fmt && go vet" + # message: "Go format and vet check" + # + # # Checks by glob pattern (future enhancement) + # # by_pattern: + # # "src/**/*.test.ts": + # # command: "npm test -- --findRelatedTests" + # # message: "Running related tests" + + # --------------------------------------------------------------------------- + # GIT_BLOCK_NO_VERIFY - Prevent bypassing git commit hooks + # --------------------------------------------------------------------------- + # Blocks git commands that use --no-verify flag to bypass pre-commit hooks. + # This ensures code quality checks, linting, and security scans always run. + + git_block_no_verify: + enabled: true + message: "Git operations with --no-verify are not permitted" + # Optional: Add exceptions for specific environments + # exceptions: + # - "CI_ENVIRONMENT" + + # --------------------------------------------------------------------------- + # CLAUDE_CODE_ENFORCE_FULL_FILE_READ - Require complete file reads (Claude Code only) + # --------------------------------------------------------------------------- + # Ensures Claude reads entire files (up to a configurable limit) before + # processing. Prevents partial reads that might miss important context. + # Files larger than max_lines can still use offset/limit parameters. + # Note: This builtin only works with Claude Code. + + # claude_code_enforce_full_file_read: + # enabled: true + # max_lines: 2000 # Files under this size must be read completely + # message: "Please read the entire file first (files under 2000 lines must be read completely)" + + # --------------------------------------------------------------------------- + # PROTECTED_PATHS - User-defined read-only paths + # --------------------------------------------------------------------------- + # Declare specific files or directories as read-only while still allowing + # Claude to read and analyze them. Supports glob patterns. Uses a WHITELIST + # approach for bash commands - only known-safe read operations are allowed. + + protected_paths: + enabled: false + message: "System path modification blocked by policy" + paths: + - "/etc/" + - "/System/" + - "~/.ssh/" + + # Note: Read operations (cat, grep, less, etc.) are allowed + # Write operations (edit, rm, mv, sed -i, etc.) are blocked + + # --------------------------------------------------------------------------- + # RULEBOOK_SECURITY_GUARDRAILS - Cupcake configuration protection + # --------------------------------------------------------------------------- + # Protects the .cupcake directory and other critical paths from any + # modification or inspection. This is the highest security level - blocks + # BOTH read and write operations. Essential for protecting Cupcake's own + # configuration and sensitive system files. + + rulebook_security_guardrails: + message: "Cupcake configuration files are protected from modification" + # Protected paths (defaults to [".cupcake/"] if not specified) + protected_paths: + - ".cupcake/" + - ".git/hooks/" + # - "secrets/" # Add your own sensitive directories + diff --git a/.cupcake/system/evaluate.rego b/.cupcake/system/evaluate.rego index 85b85fe..cfba615 100644 --- a/.cupcake/system/evaluate.rego +++ b/.cupcake/system/evaluate.rego @@ -1,5 +1,9 @@ +package cupcake.system + +import rego.v1 + # METADATA -# scope: package +# scope: document # title: System Aggregation Entrypoint for Hybrid Model # authors: ["Cupcake Engine"] # custom: @@ -8,10 +12,11 @@ # routing: # required_events: [] # required_tools: [] -package cupcake.system - -import rego.v1 +# The single entrypoint for the Hybrid Model. +# This uses the `walk()` built-in to recursively traverse data.cupcake.policies, +# automatically discovering and aggregating all decision verbs from all loaded +# policies, regardless of their package name or nesting depth. evaluate := decision_set if { decision_set := { "halts": collect_verbs("halt"), @@ -23,12 +28,18 @@ evaluate := decision_set if { } } +# Helper function to collect all decisions for a specific verb type. +# Uses walk() to recursively find all instances of the verb across +# the entire policy hierarchy under data.cupcake.policies. collect_verbs(verb_name) := result if { + # Collect all matching verb sets from the policy tree verb_sets := [value | walk(data.cupcake.policies, [path, value]) path[count(path) - 1] == verb_name ] + # Flatten all sets into a single array + # Since Rego v1 decision verbs are sets, we need to convert to arrays all_decisions := [decision | some verb_set in verb_sets some decision in verb_set @@ -37,4 +48,5 @@ collect_verbs(verb_name) := result if { result := all_decisions } +# Default to empty arrays if no decisions found default collect_verbs(_) := [] diff --git a/.openagent_context.json b/.openagent_context.json new file mode 100644 index 0000000..c9edac6 --- /dev/null +++ b/.openagent_context.json @@ -0,0 +1,11 @@ +{ + "context_dir_name": "context", + "context_root": "/home/trav/context", + "mission_context": "/home/trav/context/b2331579-f252-4806-9dc4-1cf6c3ff4cd5", + "mission_id": "b2331579-f252-4806-9dc4-1cf6c3ff4cd5", + "working_dir": "/home/trav/repos/noteflow", + "workspace_id": "b293c268-0b8e-4ddc-ad53-5fb34e43237a", + "workspace_name": "noteflow", + "workspace_root": "/home/trav/repos/noteflow", + "workspace_type": "host" +} \ No newline at end of file diff --git a/.opencode/plugin/cupcake.js b/.opencode/plugin/cupcake.js new file mode 100644 index 0000000..b9ae1e8 --- /dev/null +++ b/.opencode/plugin/cupcake.js @@ -0,0 +1,380 @@ +/** + * Cupcake OpenCode Plugin + * + * Install: Copy this file to .opencode/plugin/cupcake.js + * + * This plugin integrates Cupcake policy enforcement with OpenCode. + * It intercepts tool executions and evaluates them against your policies. + */ + +// src/types.ts +var DEFAULT_CONFIG = { + enabled: true, + cupcakePath: "cupcake", + harness: "opencode", + logLevel: "warn", + // Default to warn - info/debug are noisy in TUI + timeoutMs: 5e3, + failMode: "closed", + cacheDecisions: false, + showToasts: true, + toastDurationMs: 5e3 +}; +function getToastVariant(decision) { + switch (decision) { + case "allow": + return "success"; + case "ask": + return "warning"; + case "deny": + case "block": + return "error"; + default: + return "info"; + } +} + +// src/event-builder.ts +function normalizeTool(tool) { + return tool; +} +function buildPreToolUseEvent(sessionId, cwd, tool, args, agent, messageId, callId) { + const event = { + hook_event_name: "PreToolUse", + session_id: sessionId, + cwd, + tool: normalizeTool(tool), + args + }; + if (agent) { + event.agent = agent; + } + if (messageId) { + event.message_id = messageId; + } + if (callId) { + event.call_id = callId; + } + return event; +} +function buildPermissionEvent(sessionId, cwd, permissionId, permissionType, title, metadata, pattern, messageId, callId) { + const event = { + hook_event_name: "PermissionRequest", + session_id: sessionId, + cwd, + permission_id: permissionId, + permission_type: permissionType, + title, + metadata + }; + if (pattern) { + event.pattern = pattern; + } + if (messageId) { + event.message_id = messageId; + } + if (callId) { + event.call_id = callId; + } + return event; +} + +// src/executor.ts +async function executeCupcake(config, event) { + const startTime = Date.now(); + const eventJson = JSON.stringify(event); + if (config.logLevel === "debug") { + console.error(`[cupcake] DEBUG: Executing cupcake`); + console.error(`[cupcake] DEBUG: Event:`, eventJson); + } + const proc = Bun.spawn([config.cupcakePath, "eval", "--harness", config.harness], { + stdin: "pipe", + stdout: "pipe", + stderr: "ignore" + }); + proc.stdin.write(eventJson); + proc.stdin.end(); + const timeoutPromise = new Promise((_, reject) => { + setTimeout(() => { + proc.kill(); + reject( + new Error( + `Policy evaluation timed out after ${config.timeoutMs}ms. Consider optimizing policies or increasing timeout.` + ) + ); + }, config.timeoutMs); + }); + try { + const [stdout, exitCode] = await Promise.race([ + Promise.all([new Response(proc.stdout).text(), proc.exited]), + timeoutPromise + ]); + const elapsed = Date.now() - startTime; + if (config.logLevel === "debug") { + console.error(`[cupcake] DEBUG: Cupcake response (${elapsed}ms):`, stdout); + } + if (exitCode !== 0) { + const error = new Error(`Cupcake exited with code ${exitCode}`); + if (config.failMode === "open") { + console.error(`[cupcake] ERROR: ${error.message}`); + console.error(`[cupcake] WARN: Allowing operation in fail-open mode.`); + return { decision: "allow" }; + } + throw error; + } + const response = JSON.parse(stdout); + if (config.logLevel === "debug") { + console.error(`[cupcake] DEBUG: Decision: ${response.decision} (${elapsed}ms)`); + } + return response; + } catch (error) { + if (config.failMode === "open") { + console.error(`[cupcake] ERROR: ${error.message}`); + console.error(`[cupcake] WARN: Allowing operation in fail-open mode.`); + return { decision: "allow" }; + } + throw error; + } +} + +// src/enforcer.ts +function formatDecision(response) { + const { decision, reason, rule_id, severity } = response; + let title; + let message; + let blocked = false; + switch (decision) { + case "allow": + title = "Allowed"; + message = reason || "Operation allowed by policy"; + break; + case "deny": + case "block": + title = "Policy Violation"; + message = reason || `Operation blocked by policy`; + blocked = true; + break; + case "ask": + title = "Approval Required"; + message = reason || "This operation requires approval"; + blocked = true; + break; + default: + title = "Unknown Decision"; + message = `Policy returned unknown decision: ${decision}`; + blocked = true; + } + if (rule_id || severity) { + const details = []; + if (rule_id) details.push(`Rule: ${rule_id}`); + if (severity) details.push(`Severity: ${severity}`); + message += ` +(${details.join(", ")})`; + } + return { + blocked, + title, + message, + variant: getToastVariant(decision), + decision, + ruleId: rule_id, + severity + }; +} +function formatErrorMessage(formatted) { + let message = ""; + if (formatted.decision === "deny" || formatted.decision === "block") { + message += "\u274C Policy Violation\n\n"; + } else if (formatted.decision === "ask") { + message += "\u26A0\uFE0F Approval Required\n\n"; + } + message += formatted.message; + if (formatted.decision === "ask") { + message += "\n\nNote: This operation requires manual approval. "; + message += "To proceed, review the policy and temporarily disable it if appropriate, "; + message += "then re-run the command."; + } + return message; +} + +// src/index.ts +import { existsSync, readFileSync } from "fs"; +import { join } from "path"; +function loadConfig(directory) { + const configPath = join(directory, ".cupcake", "opencode.json"); + if (existsSync(configPath)) { + try { + const configData = readFileSync(configPath, "utf-8"); + const userConfig = JSON.parse(configData); + return { ...DEFAULT_CONFIG, ...userConfig }; + } catch (error) { + console.error(`[cupcake] WARN: Failed to load config from ${configPath}: ${error.message}`); + console.error(`[cupcake] WARN: Using default configuration`); + } + } + return DEFAULT_CONFIG; +} +async function showToast(client, config, title, message, variant) { + if (!config.showToasts || !client) { + return; + } + try { + await client.tui.showToast({ + body: { + title, + message, + variant, + duration: config.toastDurationMs + } + }); + } catch (error) { + if (config.logLevel === "debug") { + console.error(`[cupcake] DEBUG: Failed to show toast: ${error.message}`); + } + } +} +function log(config, level, message, ...args) { + const levels = ["debug", "info", "warn", "error"]; + const configLevel = levels.indexOf(config.logLevel); + const messageLevel = levels.indexOf(level); + if (messageLevel >= configLevel) { + const prefix = `[cupcake] ${level.toUpperCase()}:`; + if (args.length > 0) { + console.error(prefix, message, ...args); + } else { + console.error(prefix, message); + } + } +} +var CupcakePlugin = async ({ directory, client }) => { + const config = loadConfig(directory); + if (!config.enabled) { + log(config, "debug", "Plugin is disabled in configuration"); + return {}; + } + log(config, "debug", "Cupcake plugin initialized"); + return { + /** + * Hook: tool.execute.before + * + * Fired before any tool execution. This is where we enforce policies. + * Throwing an error blocks the tool execution. + */ + "tool.execute.before": async (input, output) => { + try { + log(config, "debug", `tool.execute.before fired for ${input.tool}`); + log(config, "debug", "Args:", output.args); + const event = buildPreToolUseEvent( + input.sessionID || "unknown", + directory, + input.tool, + output.args, + void 0, + // agent - not provided in current hook + void 0, + // messageId - not provided in current hook + input.callID + ); + const response = await executeCupcake(config, event); + const formatted = formatDecision(response); + if (formatted.decision !== "allow") { + await showToast(client, config, formatted.title, formatted.message, formatted.variant); + } + if (formatted.blocked) { + throw new Error(formatErrorMessage(formatted)); + } + log(config, "debug", "Allowing tool execution"); + } catch (error) { + throw error; + } + }, + /** + * Hook: permission.ask + * + * Fired when OpenCode needs to request permission for an operation. + * This integrates with OpenCode's native permission UI. + * + * - Set output.status = "allow" to auto-approve + * - Set output.status = "deny" to auto-deny + * - Leave as "ask" to show native permission dialog + */ + "permission.ask": async (input, output) => { + try { + log(config, "debug", `permission.ask fired for ${input.type}`); + log(config, "debug", "Permission:", input); + const event = buildPermissionEvent( + input.sessionID, + directory, + input.id, + input.type, + input.title, + input.metadata, + input.pattern, + input.messageID, + input.callID + ); + const response = await executeCupcake(config, event); + switch (response.decision) { + case "allow": + output.status = "allow"; + log(config, "debug", `Auto-allowing permission: ${input.type}`); + break; + case "deny": + case "block": + output.status = "deny"; + log(config, "debug", `Auto-denying permission: ${input.type}`); + await showToast( + client, + config, + "Permission Denied", + response.reason || `Permission ${input.type} blocked by policy`, + "error" + ); + break; + case "ask": + default: + output.status = "ask"; + log(config, "debug", `Deferring permission to user: ${input.type}`); + if (response.reason) { + await showToast(client, config, "Approval Recommended", response.reason, "warning"); + } + break; + } + } catch (error) { + log(config, "error", `Permission evaluation failed: ${error.message}`); + output.status = "ask"; + } + }, + /** + * Hook: tool.execute.after + * + * Fired after tool execution. Used for audit logging. + * Cannot prevent execution (already happened). + */ + "tool.execute.after": async (input, output) => { + log(config, "debug", `tool.execute.after fired for ${input.tool}`); + log(config, "debug", "Output:", output.output?.substring(0, 200)); + }, + /** + * Hook: event + * + * Fired for all OpenCode events. Used for comprehensive audit logging. + */ + event: async ({ event }) => { + if (config.logLevel !== "debug") { + return; + } + const auditEvents = [ + "tool.executed", + "permission.replied", + "file.edited", + "session.created", + "session.aborted" + ]; + if (auditEvents.includes(event.type)) { + log(config, "debug", `Audit event: ${event.type}`, event.properties); + } + } + }; +}; +export { CupcakePlugin }; diff --git a/client/biome.json b/client/biome.json index 13c6b7d..e48309a 100644 --- a/client/biome.json +++ b/client/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.3.10/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json", "vcs": { "enabled": true, "clientKind": "git", diff --git a/client/src-tauri/src/commands/analytics.rs b/client/src-tauri/src/commands/analytics.rs new file mode 100644 index 0000000..2ec261b --- /dev/null +++ b/client/src-tauri/src/commands/analytics.rs @@ -0,0 +1,35 @@ +use std::sync::Arc; + +use tauri::State; + +use crate::error::Result; +use crate::grpc::types::analytics::{AnalyticsOverview, ListSpeakerStatsResult}; +use crate::state::AppState; + +#[tauri::command(rename_all = "snake_case")] +pub async fn get_analytics_overview( + state: State<'_, Arc>, + start_time: f64, + end_time: f64, + project_id: Option, + project_ids: Option>, +) -> Result { + state + .grpc_client + .get_analytics_overview(start_time, end_time, project_id, project_ids) + .await +} + +#[tauri::command(rename_all = "snake_case")] +pub async fn list_speaker_stats( + state: State<'_, Arc>, + start_time: f64, + end_time: f64, + project_id: Option, + project_ids: Option>, +) -> Result { + state + .grpc_client + .list_speaker_stats(start_time, end_time, project_id, project_ids) + .await +} diff --git a/client/src-tauri/src/commands/mod.rs b/client/src-tauri/src/commands/mod.rs index ae2bf15..b2272a6 100644 --- a/client/src-tauri/src/commands/mod.rs +++ b/client/src-tauri/src/commands/mod.rs @@ -2,6 +2,7 @@ //! //! Each module corresponds to a functional area and exposes #[tauri::command] functions. +mod analytics; mod annotation; mod apps; mod asr; @@ -26,6 +27,7 @@ mod shell; mod summary; mod streaming_config; mod sync; +mod tasks; mod triggers; mod webhooks; @@ -39,6 +41,7 @@ mod playback_tests; #[cfg(test)] mod recording_tests; +pub use analytics::*; pub use annotation::*; pub use apps::*; pub use asr::*; @@ -65,6 +68,7 @@ pub use shell::*; pub use summary::*; pub use streaming_config::*; pub use sync::*; +pub use tasks::*; pub use testing::*; pub use triggers::*; pub use webhooks::*; diff --git a/client/src-tauri/src/commands/tasks.rs b/client/src-tauri/src/commands/tasks.rs new file mode 100644 index 0000000..9f840c2 --- /dev/null +++ b/client/src-tauri/src/commands/tasks.rs @@ -0,0 +1,39 @@ +use std::sync::Arc; + +use tauri::State; + +use crate::error::Result; +use crate::grpc::types::tasks::{ListTasksResult, Task}; +use crate::state::AppState; + +#[tauri::command(rename_all = "snake_case")] +pub async fn list_tasks( + state: State<'_, Arc>, + statuses: Option>, + limit: Option, + offset: Option, + project_id: Option, + project_ids: Option>, + meeting_id: Option, +) -> Result { + state + .grpc_client + .list_tasks(statuses, limit, offset, project_id, project_ids, meeting_id) + .await +} + +#[tauri::command(rename_all = "snake_case")] +pub async fn update_task( + state: State<'_, Arc>, + task_id: String, + text: Option, + status: Option, + assignee_person_id: Option, + due_date: Option, + priority: Option, +) -> Result { + state + .grpc_client + .update_task(task_id, text, status, assignee_person_id, due_date, priority) + .await +} diff --git a/client/src-tauri/src/grpc/client/analytics.rs b/client/src-tauri/src/grpc/client/analytics.rs new file mode 100644 index 0000000..7755798 --- /dev/null +++ b/client/src-tauri/src/grpc/client/analytics.rs @@ -0,0 +1,80 @@ +use crate::error::Result; +use crate::grpc::noteflow as pb; +use crate::grpc::types::analytics::{ + AnalyticsOverview, DailyMeetingStats, ListSpeakerStatsResult, SpeakerStat, +}; + +use super::core::GrpcClient; + +impl GrpcClient { + pub async fn get_analytics_overview( + &self, + start_time: f64, + end_time: f64, + project_id: Option, + project_ids: Option>, + ) -> Result { + let mut client = self.get_client()?; + let response = client + .get_analytics_overview(pb::GetAnalyticsOverviewRequest { + start_time, + end_time, + project_id, + project_ids: project_ids.unwrap_or_default(), + }) + .await? + .into_inner(); + + Ok(AnalyticsOverview { + daily: response.daily.into_iter().map(map_daily_stats).collect(), + total_meetings: response.total_meetings, + total_duration: response.total_duration, + total_words: response.total_words, + total_segments: response.total_segments, + speaker_count: response.speaker_count, + }) + } + + pub async fn list_speaker_stats( + &self, + start_time: f64, + end_time: f64, + project_id: Option, + project_ids: Option>, + ) -> Result { + let mut client = self.get_client()?; + let response = client + .list_speaker_stats(pb::ListSpeakerStatsRequest { + start_time, + end_time, + project_id, + project_ids: project_ids.unwrap_or_default(), + }) + .await? + .into_inner(); + + Ok(ListSpeakerStatsResult { + speakers: response.speakers.into_iter().map(map_speaker_stat).collect(), + }) + } +} + +fn map_daily_stats(proto: pb::DailyMeetingStatsProto) -> DailyMeetingStats { + DailyMeetingStats { + date: proto.date, + meetings: proto.meetings, + total_duration: proto.total_duration, + word_count: proto.word_count, + } +} + +fn map_speaker_stat(proto: pb::SpeakerStatProto) -> SpeakerStat { + SpeakerStat { + speaker_id: proto.speaker_id, + display_name: proto.display_name, + total_time: proto.total_time, + segment_count: proto.segment_count, + meeting_count: proto.meeting_count, + avg_confidence: proto.avg_confidence, + } +} diff --git a/client/src-tauri/src/grpc/client/mod.rs b/client/src-tauri/src/grpc/client/mod.rs index 7f22d9b..41dc141 100644 --- a/client/src-tauri/src/grpc/client/mod.rs +++ b/client/src-tauri/src/grpc/client/mod.rs @@ -12,8 +12,11 @@ //! - `observability`: Logs and metrics operations (Sprint 9) //! - `asr`: ASR configuration operations (Sprint 19) //! - `streaming`: Streaming configuration operations (Sprint 20) +//! - `tasks`: Task management operations (Bugfinder Sprint) +//! - `analytics`: Analytics aggregate operations (Bugfinder Sprint) //! - `converters`: Protobuf to domain type converters +mod analytics; mod annotations; mod asr; mod streaming; @@ -29,6 +32,7 @@ mod oidc; mod preferences; mod projects; mod sync; +mod tasks; mod webhooks; // Re-export the main types diff --git a/client/src-tauri/src/grpc/client/tasks.rs b/client/src-tauri/src/grpc/client/tasks.rs new file mode 100644 index 0000000..c7c940e --- /dev/null +++ b/client/src-tauri/src/grpc/client/tasks.rs @@ -0,0 +1,144 @@ +use crate::error::Result; +use crate::grpc::noteflow as pb; +use crate::grpc::types::tasks::{ListTasksResult, Task, TaskStatus, TaskWithMeeting}; + +use super::core::GrpcClient; + +impl GrpcClient { + pub async fn list_tasks( + &self, + statuses: Option>, + limit: Option, + offset: Option, + project_id: Option, + project_ids: Option>, + meeting_id: Option, + ) -> Result { + let mut client = self.get_client()?; + let status_enums: Vec = statuses + .unwrap_or_default() + .iter() + .map(|s| string_to_task_status_proto(s)) + .collect(); + + let response = client + .list_tasks(pb::ListTasksRequest { + statuses: status_enums, + limit: limit.unwrap_or(100), + offset: offset.unwrap_or(0), + project_id, + project_ids: project_ids.unwrap_or_default(), + meeting_id, + }) + .await? + .into_inner(); + + Ok(ListTasksResult { + tasks: response.tasks.into_iter().map(map_task_with_meeting).collect(), + total_count: response.total_count, + }) + } + + pub async fn update_task( + &self, + task_id: String, + text: Option, + status: Option, + assignee_person_id: Option, + due_date: Option, + priority: Option, + ) -> Result { + let mut client = self.get_client()?; + let response = client + .update_task(pb::UpdateTaskRequest { + task_id, + text: text.unwrap_or_default(), + status: status.map(|s| string_to_task_status_proto(&s)).unwrap_or(0), + assignee_person_id: assignee_person_id.unwrap_or_default(), + due_date: due_date.unwrap_or(0.0), + priority: priority.unwrap_or(0), + }) + .await? + .into_inner(); + + response + .task + .map(map_task) + .ok_or_else(|| crate::error::Error::InvalidInput("Task not found".into())) + } +} + +fn string_to_task_status_proto(s: &str) -> i32 { + match s { + "open" => pb::TaskStatusProto::TaskStatusOpen as i32, + "done" => pb::TaskStatusProto::TaskStatusDone as i32, + "dismissed" => pb::TaskStatusProto::TaskStatusDismissed as i32, + _ => pb::TaskStatusProto::TaskStatusUnspecified as i32, + } +} + +fn task_status_proto_to_enum(status: i32) -> TaskStatus { + match status { + 1 => TaskStatus::Open, + 2 => TaskStatus::Done, + 3 => TaskStatus::Dismissed, + _ => TaskStatus::Open, + } +} + +fn map_task(proto: pb::TaskProto) -> Task { + Task { + id: proto.id, + meeting_id: if proto.meeting_id.is_empty() { + None + } else { + Some(proto.meeting_id) + }, + action_item_id: if proto.action_item_id == 0 { + None + } else { + Some(proto.action_item_id) + }, + text: proto.text, + status: task_status_proto_to_enum(proto.status), + assignee_person_id: if proto.assignee_person_id.is_empty() { + None + } else { + Some(proto.assignee_person_id) + }, + due_date: if proto.due_date == 0.0 { + None + } else { + Some(proto.due_date) + }, + priority: proto.priority, + completed_at: if proto.completed_at == 0.0 { + None + } else { + Some(proto.completed_at) + }, + } +} + +fn map_task_with_meeting(proto: pb::TaskWithMeetingProto) -> TaskWithMeeting { + TaskWithMeeting { + task: proto.task.map(map_task).unwrap_or_else(|| Task { + id: String::new(), + meeting_id: None, + action_item_id: None, + text: String::new(), + status: TaskStatus::Open, + assignee_person_id: None, + due_date: None, + priority: 0, + completed_at: None, + }), + meeting_title: proto.meeting_title, + meeting_created_at: proto.meeting_created_at, + project_id: if proto.project_id.is_empty() { + None + } else { + Some(proto.project_id) + }, + } +} diff --git a/client/src-tauri/src/grpc/noteflow.rs b/client/src-tauri/src/grpc/noteflow.rs index ceae16c..abb15e0 100644 --- a/client/src-tauri/src/grpc/noteflow.rs +++ b/client/src-tauri/src/grpc/noteflow.rs @@ -2378,6 +2378,152 @@ pub struct UpdateWorkspaceSettingsRequest { #[prost(message, optional, tag = "2")] pub settings: ::core::option::Option, } +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TaskProto { + #[prost(string, tag = "1")] + pub id: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub meeting_id: ::prost::alloc::string::String, + #[prost(int32, tag = "3")] + pub action_item_id: i32, + #[prost(string, tag = "4")] + pub text: ::prost::alloc::string::String, + #[prost(enumeration = "TaskStatusProto", tag = "5")] + pub status: i32, + #[prost(string, tag = "6")] + pub assignee_person_id: ::prost::alloc::string::String, + #[prost(double, tag = "7")] + pub due_date: f64, + #[prost(int32, tag = "8")] + pub priority: i32, + #[prost(double, tag = "9")] + pub completed_at: f64, + #[prost(double, tag = "10")] + pub created_at: f64, + #[prost(double, tag = "11")] + pub updated_at: f64, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct TaskWithMeetingProto { + #[prost(message, optional, tag = "1")] + pub task: ::core::option::Option, + #[prost(string, tag = "2")] + pub meeting_title: ::prost::alloc::string::String, + #[prost(double, tag = "3")] + pub meeting_created_at: f64, + #[prost(string, tag = "4")] + pub project_id: ::prost::alloc::string::String, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTasksRequest { + #[prost(enumeration = "TaskStatusProto", repeated, tag = "1")] + pub statuses: ::prost::alloc::vec::Vec, + #[prost(int32, tag = "2")] + pub limit: i32, + #[prost(int32, tag = "3")] + pub offset: i32, + #[prost(string, optional, tag = "4")] + pub project_id: ::core::option::Option<::prost::alloc::string::String>, + #[prost(string, repeated, tag = "5")] + pub project_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + #[prost(string, optional, tag = "6")] + pub meeting_id: ::core::option::Option<::prost::alloc::string::String>, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListTasksResponse { + #[prost(message, repeated, tag = "1")] + pub tasks: ::prost::alloc::vec::Vec, + #[prost(int32, tag = "2")] + pub total_count: i32, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateTaskRequest { + #[prost(string, tag = "1")] + pub task_id: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub text: ::prost::alloc::string::String, + #[prost(enumeration = "TaskStatusProto", tag = "3")] + pub status: i32, + #[prost(string, tag = "4")] + pub assignee_person_id: ::prost::alloc::string::String, + #[prost(double, tag = "5")] + pub due_date: f64, + #[prost(int32, tag = "6")] + pub priority: i32, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct UpdateTaskResponse { + #[prost(message, optional, tag = "1")] + pub task: ::core::option::Option, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetAnalyticsOverviewRequest { + #[prost(double, tag = "1")] + pub start_time: f64, + #[prost(double, tag = "2")] + pub end_time: f64, + #[prost(string, optional, tag = "3")] + pub project_id: ::core::option::Option<::prost::alloc::string::String>, + #[prost(string, repeated, tag = "4")] + pub project_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct DailyMeetingStatsProto { + #[prost(string, tag = "1")] + pub date: ::prost::alloc::string::String, + #[prost(int32, tag = "2")] + pub meetings: i32, + #[prost(double, tag = "3")] + pub total_duration: f64, + #[prost(int32, tag = "4")] + pub word_count: i32, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetAnalyticsOverviewResponse { + #[prost(message, repeated, tag = "1")] + pub daily: ::prost::alloc::vec::Vec, + #[prost(int32, tag = "2")] + pub total_meetings: i32, + #[prost(double, tag = "3")] + pub total_duration: f64, + #[prost(int32, tag = "4")] + pub total_words: i32, + #[prost(int32, tag = "5")] + pub total_segments: i32, + #[prost(int32, tag = "6")] + pub speaker_count: i32, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct SpeakerStatProto { + #[prost(string, tag = "1")] + pub speaker_id: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub display_name: ::prost::alloc::string::String, + #[prost(double, tag = "3")] + pub total_time: f64, + #[prost(int32, tag = "4")] + pub segment_count: i32, + #[prost(int32, tag = "5")] + pub meeting_count: i32, + #[prost(double, tag = "6")] + pub avg_confidence: f64, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListSpeakerStatsRequest { + #[prost(double, tag = "1")] + pub start_time: f64, + #[prost(double, tag = "2")] + pub end_time: f64, + #[prost(string, optional, tag = "3")] + pub project_id: ::core::option::Option<::prost::alloc::string::String>, + #[prost(string, repeated, tag = "4")] + pub project_ids: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, +} +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct ListSpeakerStatsResponse { + #[prost(message, repeated, tag = "1")] + pub speakers: ::prost::alloc::vec::Vec, +} #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] pub enum UpdateType { @@ -2816,6 +2962,38 @@ impl ProjectRoleProto { } } } +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] +#[repr(i32)] +pub enum TaskStatusProto { + TaskStatusUnspecified = 0, + TaskStatusOpen = 1, + TaskStatusDone = 2, + TaskStatusDismissed = 3, +} +impl TaskStatusProto { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + Self::TaskStatusUnspecified => "TASK_STATUS_UNSPECIFIED", + Self::TaskStatusOpen => "TASK_STATUS_OPEN", + Self::TaskStatusDone => "TASK_STATUS_DONE", + Self::TaskStatusDismissed => "TASK_STATUS_DISMISSED", + } + } + /// Creates an enum from field names used in the ProtoBuf definition. + pub fn from_str_name(value: &str) -> ::core::option::Option { + match value { + "TASK_STATUS_UNSPECIFIED" => Some(Self::TaskStatusUnspecified), + "TASK_STATUS_OPEN" => Some(Self::TaskStatusOpen), + "TASK_STATUS_DONE" => Some(Self::TaskStatusDone), + "TASK_STATUS_DISMISSED" => Some(Self::TaskStatusDismissed), + _ => None, + } + } +} /// Generated client implementations. pub mod note_flow_service_client { #![allow( @@ -4912,6 +5090,106 @@ pub mod note_flow_service_client { .insert(GrpcMethod::new("noteflow.NoteFlowService", "GetActiveProject")); self.inner.unary(req, path, codec).await } + /// Task management (Bugfinder Sprint) + pub async fn list_tasks( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/noteflow.NoteFlowService/ListTasks", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert(GrpcMethod::new("noteflow.NoteFlowService", "ListTasks")); + self.inner.unary(req, path, codec).await + } + pub async fn update_task( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/noteflow.NoteFlowService/UpdateTask", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert(GrpcMethod::new("noteflow.NoteFlowService", "UpdateTask")); + self.inner.unary(req, path, codec).await + } + /// Analytics (Bugfinder Sprint) + pub async fn get_analytics_overview( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/noteflow.NoteFlowService/GetAnalyticsOverview", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert( + GrpcMethod::new("noteflow.NoteFlowService", "GetAnalyticsOverview"), + ); + self.inner.unary(req, path, codec).await + } + pub async fn list_speaker_stats( + &mut self, + request: impl tonic::IntoRequest, + ) -> std::result::Result< + tonic::Response, + tonic::Status, + > { + self.inner + .ready() + .await + .map_err(|e| { + tonic::Status::unknown( + format!("Service was not ready: {}", e.into()), + ) + })?; + let codec = tonic::codec::ProstCodec::default(); + let path = http::uri::PathAndQuery::from_static( + "/noteflow.NoteFlowService/ListSpeakerStats", + ); + let mut req = request.into_request(); + req.extensions_mut() + .insert(GrpcMethod::new("noteflow.NoteFlowService", "ListSpeakerStats")); + self.inner.unary(req, path, codec).await + } /// Project membership management (Sprint 18) pub async fn add_project_member( &mut self, diff --git a/client/src-tauri/src/grpc/types/analytics.rs b/client/src-tauri/src/grpc/types/analytics.rs new file mode 100644 index 0000000..9d98697 --- /dev/null +++ b/client/src-tauri/src/grpc/types/analytics.rs @@ -0,0 +1,34 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct DailyMeetingStats { + pub date: String, + pub meetings: i32, + pub total_duration: f64, + pub word_count: i32, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct AnalyticsOverview { + pub daily: Vec, + pub total_meetings: i32, + pub total_duration: f64, + pub total_words: i32, + pub total_segments: i32, + pub speaker_count: i32, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct SpeakerStat { + pub speaker_id: String, + pub display_name: String, + pub total_time: f64, + pub segment_count: i32, + pub meeting_count: i32, + pub avg_confidence: f64, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ListSpeakerStatsResult { + pub speakers: Vec, +} diff --git a/client/src-tauri/src/grpc/types/mod.rs b/client/src-tauri/src/grpc/types/mod.rs index 6e98357..d178acd 100644 --- a/client/src-tauri/src/grpc/types/mod.rs +++ b/client/src-tauri/src/grpc/types/mod.rs @@ -3,6 +3,7 @@ //! These types mirror the protobuf definitions and are used for //! communication between Rust and the React frontend via Tauri. +pub mod analytics; pub mod asr; pub mod calendar; pub mod core; @@ -16,4 +17,5 @@ pub mod projects; pub mod results; pub mod streaming; pub mod sync; +pub mod tasks; pub mod webhooks; diff --git a/client/src-tauri/src/grpc/types/tasks.rs b/client/src-tauri/src/grpc/types/tasks.rs new file mode 100644 index 0000000..70b1062 --- /dev/null +++ b/client/src-tauri/src/grpc/types/tasks.rs @@ -0,0 +1,43 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum TaskStatus { + #[default] + Open, + Done, + Dismissed, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Task { + pub id: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub meeting_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub action_item_id: Option, + pub text: String, + pub status: TaskStatus, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub assignee_person_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub due_date: Option, + pub priority: i32, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub completed_at: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct TaskWithMeeting { + pub task: Task, + pub meeting_title: String, + pub meeting_created_at: f64, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub project_id: Option, +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ListTasksResult { + pub tasks: Vec, + pub total_count: i32, +} diff --git a/client/src-tauri/src/lib.rs b/client/src-tauri/src/lib.rs index 688d726..c81779d 100644 --- a/client/src-tauri/src/lib.rs +++ b/client/src-tauri/src/lib.rs @@ -196,6 +196,12 @@ macro_rules! app_invoke_handler { commands::reset_test_recording_state, commands::inject_test_audio, commands::inject_test_tone, + // Tasks (2 commands) - Bugfinder Sprint + commands::list_tasks, + commands::update_task, + // Analytics (2 commands) - Bugfinder Sprint + commands::get_analytics_overview, + commands::list_speaker_stats, ] }; } diff --git a/client/src/api/adapters/tauri/api.ts b/client/src/api/adapters/tauri/api.ts index 6320805..9f8e114 100644 --- a/client/src/api/adapters/tauri/api.ts +++ b/client/src/api/adapters/tauri/api.ts @@ -1,5 +1,6 @@ import type { NoteFlowAPI } from '../../interface'; import type { TauriInvoke, TauriListen } from './types'; +import { createAnalyticsApi } from './sections/analytics'; import { createAnnotationApi } from './sections/annotations'; import { createAppsApi } from './sections/apps'; import { createAsrApi } from './sections/asr'; @@ -17,6 +18,7 @@ import { createPlaybackApi } from './sections/playback'; import { createPreferencesApi } from './sections/preferences'; import { createProjectApi } from './sections/projects'; import { createSummarizationApi } from './sections/summarization'; +import { createTaskApi } from './sections/tasks'; import { createTriggerApi } from './sections/triggers'; import { createWebhookApi } from './sections/webhooks'; @@ -42,5 +44,7 @@ export function createTauriAPI(invoke: TauriInvoke, listen: TauriListen): NoteFl ...createIntegrationApi(invoke), ...createObservabilityApi(invoke), ...createOidcApi(invoke), + ...createTaskApi(invoke), + ...createAnalyticsApi(invoke), }; } diff --git a/client/src/api/adapters/tauri/constants.ts b/client/src/api/adapters/tauri/constants.ts index 42afc50..a929bd1 100644 --- a/client/src/api/adapters/tauri/constants.ts +++ b/client/src/api/adapters/tauri/constants.ts @@ -142,6 +142,12 @@ export const TauriCommands = { CHECK_TEST_ENVIRONMENT: 'check_test_environment', INJECT_TEST_AUDIO: 'inject_test_audio', INJECT_TEST_TONE: 'inject_test_tone', + // Tasks (Bugfinder Sprint) + LIST_TASKS: 'list_tasks', + UPDATE_TASK: 'update_task', + // Analytics (Bugfinder Sprint) + GET_ANALYTICS_OVERVIEW: 'get_analytics_overview', + LIST_SPEAKER_STATS: 'list_speaker_stats', } as const; /** diff --git a/client/src/api/adapters/tauri/sections/analytics.ts b/client/src/api/adapters/tauri/sections/analytics.ts new file mode 100644 index 0000000..8076c90 --- /dev/null +++ b/client/src/api/adapters/tauri/sections/analytics.ts @@ -0,0 +1,32 @@ +import type { + AnalyticsOverview, + AnalyticsOverviewRequest, + ListSpeakerStatsRequest, + ListSpeakerStatsResponse, +} from '../../../types'; +import type { NoteFlowAPI } from '../../../interface'; +import { TauriCommands } from '../constants'; +import type { TauriInvoke } from '../types'; + +export function createAnalyticsApi( + invoke: TauriInvoke +): Pick { + return { + async getAnalyticsOverview(request: AnalyticsOverviewRequest): Promise { + return invoke(TauriCommands.GET_ANALYTICS_OVERVIEW, { + start_time: request.start_time, + end_time: request.end_time, + project_id: request.project_id, + project_ids: request.project_ids, + }); + }, + async listSpeakerStats(request: ListSpeakerStatsRequest): Promise { + return invoke(TauriCommands.LIST_SPEAKER_STATS, { + start_time: request.start_time, + end_time: request.end_time, + project_id: request.project_id, + project_ids: request.project_ids, + }); + }, + }; +} diff --git a/client/src/api/adapters/tauri/sections/tasks.ts b/client/src/api/adapters/tauri/sections/tasks.ts new file mode 100644 index 0000000..3e0d19c --- /dev/null +++ b/client/src/api/adapters/tauri/sections/tasks.ts @@ -0,0 +1,32 @@ +import type { ListTasksRequest, ListTasksResponse, Task, UpdateTaskRequest } from '../../../types'; +import type { NoteFlowAPI } from '../../../interface'; +import { TauriCommands } from '../constants'; +import type { TauriInvoke } from '../types'; + +export function createTaskApi( + invoke: TauriInvoke +): Pick { + return { + async listTasks(request: ListTasksRequest): Promise { + return invoke(TauriCommands.LIST_TASKS, { + statuses: request.statuses, + limit: request.limit, + offset: request.offset, + project_id: request.project_id, + project_ids: request.project_ids, + meeting_id: request.meeting_id, + }); + }, + async updateTask(request: UpdateTaskRequest): Promise { + const response = await invoke<{ task: Task }>(TauriCommands.UPDATE_TASK, { + task_id: request.task_id, + text: request.text, + status: request.status, + assignee_person_id: request.assignee_person_id, + due_date: request.due_date, + priority: request.priority, + }); + return response.task; + }, + }; +} diff --git a/client/src/api/adapters/tauri/sections/webhooks.ts b/client/src/api/adapters/tauri/sections/webhooks.ts index 88ca7f1..1ed99c6 100644 --- a/client/src/api/adapters/tauri/sections/webhooks.ts +++ b/client/src/api/adapters/tauri/sections/webhooks.ts @@ -21,7 +21,7 @@ function sanitizeWebhookRequest; + + // --- Tasks (Strategy B) --- + + listTasks(request: ListTasksRequest): Promise; + + updateTask(request: UpdateTaskRequest): Promise; + + // --- Analytics (Strategy B) --- + + getAnalyticsOverview(request: AnalyticsOverviewRequest): Promise; + + listSpeakerStats(request: ListSpeakerStatsRequest): Promise; } // --- API Instance Management --- diff --git a/client/src/api/types/enums.ts b/client/src/api/types/enums.ts index bcff231..0a43aae 100644 --- a/client/src/api/types/enums.ts +++ b/client/src/api/types/enums.ts @@ -118,3 +118,14 @@ export type WorkspaceRole = 'owner' | 'admin' | 'member' | 'viewer'; * - PROJECT_ROLE_ADMIN = 3 */ export type ProjectRole = 'viewer' | 'editor' | 'admin'; + +/** + * Task lifecycle status + * + * gRPC enum values: + * - TASK_STATUS_UNSPECIFIED = 0 + * - TASK_STATUS_OPEN = 1 + * - TASK_STATUS_DONE = 2 + * - TASK_STATUS_DISMISSED = 3 + */ +export type TaskStatus = 'open' | 'done' | 'dismissed'; diff --git a/client/src/api/types/features/analytics.ts b/client/src/api/types/features/analytics.ts new file mode 100644 index 0000000..d4f2d00 --- /dev/null +++ b/client/src/api/types/features/analytics.ts @@ -0,0 +1,49 @@ +/** + * Analytics Aggregate Types + * + * Types for server-backed analytics aggregates. + * These replace client-side computations for better scalability. + */ + +export interface DailyMeetingStats { + date: string; + meetings: number; + total_duration: number; + word_count: number; +} + +export interface AnalyticsOverview { + daily: DailyMeetingStats[]; + total_meetings: number; + total_duration: number; + total_words: number; + total_segments: number; + speaker_count: number; +} + +export interface AnalyticsOverviewRequest { + start_time: number; + end_time: number; + project_id?: string; + project_ids?: string[]; +} + +export interface SpeakerStat { + speaker_id: string; + display_name: string; + total_time: number; + segment_count: number; + meeting_count: number; + avg_confidence: number; +} + +export interface ListSpeakerStatsRequest { + start_time: number; + end_time: number; + project_id?: string; + project_ids?: string[]; +} + +export interface ListSpeakerStatsResponse { + speakers: SpeakerStat[]; +} diff --git a/client/src/api/types/features/asr.ts b/client/src/api/types/features/asr.ts index 32b54ec..dd62cdf 100644 --- a/client/src/api/types/features/asr.ts +++ b/client/src/api/types/features/asr.ts @@ -27,9 +27,9 @@ export type ASRDevice = 'unspecified' | 'cpu' | 'cuda'; export type ASRComputeType = 'unspecified' | 'int8' | 'float16' | 'float32'; /** - * Job status for background tasks + * Job status for ASR background tasks (extends base JobStatus with 'unspecified') */ -export type JobStatus = 'unspecified' | 'queued' | 'running' | 'completed' | 'failed' | 'cancelled'; +export type ASRJobStatus = 'unspecified' | 'queued' | 'running' | 'completed' | 'failed' | 'cancelled'; /** * Current ASR configuration and capabilities @@ -79,7 +79,7 @@ export interface UpdateASRConfigurationResult { jobId: string; /** Initial job status */ - status: JobStatus; + status: ASRJobStatus; /** Whether the request was accepted */ accepted: boolean; @@ -101,7 +101,7 @@ export interface ASRConfigurationJobStatus { jobId: string; /** Current status */ - status: JobStatus; + status: ASRJobStatus; /** Progress percentage (0.0-100.0) */ progressPercent: number; diff --git a/client/src/api/types/features/index.ts b/client/src/api/types/features/index.ts index 219d27b..6bca094 100644 --- a/client/src/api/types/features/index.ts +++ b/client/src/api/types/features/index.ts @@ -1,9 +1,10 @@ /** * NoteFlow Feature Types * - * Types for NER, calendar, webhooks, sync, observability, identity, OIDC, ASR, and model downloads. + * Types for NER, calendar, webhooks, sync, observability, identity, OIDC, ASR, model downloads, tasks, and analytics. */ +export * from './analytics'; export * from './asr'; export * from './calendar'; export * from './identity'; @@ -13,4 +14,5 @@ export * from './observability'; export * from './oidc'; export * from './streaming'; export * from './sync'; +export * from './tasks'; export * from './webhooks'; diff --git a/client/src/api/types/features/tasks.ts b/client/src/api/types/features/tasks.ts new file mode 100644 index 0000000..156d7b2 --- /dev/null +++ b/client/src/api/types/features/tasks.ts @@ -0,0 +1,52 @@ +import type { TaskStatus } from '../enums'; + +export interface Task { + id: string; + meeting_id: string | null; + action_item_id: number | null; + text: string; + status: TaskStatus; + assignee_person_id: string | null; + due_date: number | null; + priority: number; + completed_at: number | null; +} + +/** Task with associated meeting metadata */ +export interface TaskWithMeeting { + task: Task; + meeting_title: string; + meeting_created_at: number; + project_id: string | null; +} + +/** Request to list tasks with filtering */ +export interface ListTasksRequest { + statuses?: TaskStatus[]; + limit?: number; + offset?: number; + project_id?: string; + project_ids?: string[]; + meeting_id?: string; +} + +/** Response from listing tasks */ +export interface ListTasksResponse { + tasks: TaskWithMeeting[]; + total_count: number; +} + +/** Request to update a task */ +export interface UpdateTaskRequest { + task_id: string; + text?: string; + status?: TaskStatus; + assignee_person_id?: string | null; + due_date?: number | null; + priority?: number; +} + +/** Response from updating a task */ +export interface UpdateTaskResponse { + task: Task; +} diff --git a/client/src/api/types/requests/integrations.ts b/client/src/api/types/requests/integrations.ts index 0f97e07..781da34 100644 --- a/client/src/api/types/requests/integrations.ts +++ b/client/src/api/types/requests/integrations.ts @@ -115,23 +115,11 @@ export interface SyncHistoryEvent { error?: string; } -export interface GetOAuthClientConfigRequest { - workspace_id?: string; - provider: string; - integration_type?: Integration['type']; -} - -export interface GetOAuthClientConfigResponse { - config?: OAuthConfig; -} - -export interface SetOAuthClientConfigRequest { - workspace_id?: string; - provider: string; - integration_type?: Integration['type']; - config: OAuthConfig; -} - -export interface SetOAuthClientConfigResponse { - success: boolean; -} +// OAuth client config types are in features/calendar.ts +// Re-exported here for backwards compatibility +export type { + GetOAuthClientConfigRequest, + GetOAuthClientConfigResponse, + SetOAuthClientConfigRequest, + SetOAuthClientConfigResponse, +} from '../features/calendar'; diff --git a/client/src/components/features/analytics/logs-tab.tsx b/client/src/components/features/analytics/logs-tab.tsx index 730c6b9..b28aadc 100644 --- a/client/src/components/features/analytics/logs-tab.tsx +++ b/client/src/components/features/analytics/logs-tab.tsx @@ -138,7 +138,10 @@ export function LogsTab() { return true; } const metadataText = log.metadata ? JSON.stringify(log.metadata).toLowerCase() : ''; - const correlationText = [log.traceId, log.spanId].filter(Boolean).join(' ').toLowerCase(); + // Only server logs have traceId/spanId - use type guard + const traceId = 'traceId' in log ? log.traceId : undefined; + const spanId = 'spanId' in log ? log.spanId : undefined; + const correlationText = [traceId, spanId].filter(Boolean).join(' ').toLowerCase(); return ( log.message.toLowerCase().includes(query) || log.details?.toLowerCase().includes(query) || diff --git a/client/src/components/features/analytics/performance-tab.tsx b/client/src/components/features/analytics/performance-tab.tsx index f58e562..9f9abf7 100644 --- a/client/src/components/features/analytics/performance-tab.tsx +++ b/client/src/components/features/analytics/performance-tab.tsx @@ -125,7 +125,7 @@ export function PerformanceTab() { queryKey: ['performance-metrics'], queryFn: async () => { const api = getAPI(); - return api.getPerformanceMetrics({ history_minutes: 60 }); + return api.getPerformanceMetrics({ history_limit: 60 }); }, refetchInterval: METRICS_REFRESH_INTERVAL_MS, }); diff --git a/client/src/pages/Analytics.tsx b/client/src/pages/Analytics.tsx index c6e0426..8b27321 100644 --- a/client/src/pages/Analytics.tsx +++ b/client/src/pages/Analytics.tsx @@ -1,7 +1,7 @@ // Analytics page - Meeting insights and statistics import { useQuery } from '@tanstack/react-query'; -import { eachDayOfInterval, format, subDays } from 'date-fns'; +import { format, subDays } from 'date-fns'; import { Activity, BarChart3, @@ -31,7 +31,7 @@ import { YAxis, } from 'recharts'; import { getAPI } from '@/api/interface'; -import type { ListMeetingsResponse, Meeting } from '@/api/types'; +import type { AnalyticsOverview, ListMeetingsResponse, SpeakerStat } from '@/api/types'; import { SPEAKER_COLORS, SPEAKER_COLOR_CLASSES, @@ -57,6 +57,7 @@ import { import { cn } from '@/lib/utils'; const titleRowClass = flexLayout.itemsGap2; +const ANALYTICS_DAYS = 14; interface DailyStats { date: string; @@ -68,84 +69,42 @@ interface DailyStats { interface SpeakerStats { speakerId: string; + displayName: string; totalTime: number; percentage: number; + segmentCount: number; + meetingCount: number; } -function computeAnalytics(meetings: Meeting[]) { - const endDate = new Date(); - const startDate = subDays(endDate, 13); - const dateRange = eachDayOfInterval({ start: startDate, end: endDate }); +function transformDailyStats(overview: AnalyticsOverview): DailyStats[] { + return overview.daily.map((d) => ({ + date: d.date, + dateLabel: format(new Date(d.date), 'MMM d'), + meetings: d.meetings, + totalDuration: d.total_duration, + wordCount: d.word_count, + })); +} - const dailyMap = new Map(); - for (const date of dateRange) { - const key = format(date, 'yyyy-MM-dd'); - dailyMap.set(key, { - date: key, - dateLabel: format(date, 'MMM d'), - meetings: 0, - totalDuration: 0, - wordCount: 0, - }); - } - - const speakerMap = new Map(); - let totalSpeakingTime = 0; - let totalWords = 0; - let totalSegments = 0; - - for (const meeting of meetings) { - const meetingDate = format(new Date(meeting.created_at * 1000), 'yyyy-MM-dd'); - const dailyStats = dailyMap.get(meetingDate); - if (dailyStats) { - dailyStats.meetings += 1; - dailyStats.totalDuration += meeting.duration_seconds; - const words = meeting.segments.reduce((sum, seg) => sum + seg.words.length, 0); - dailyStats.wordCount += words; - } - - for (const segment of meeting.segments) { - const duration = segment.end_time - segment.start_time; - speakerMap.set(segment.speaker_id, (speakerMap.get(segment.speaker_id) || 0) + duration); - totalSpeakingTime += duration; - totalWords += segment.words.length; - totalSegments += 1; - } - } - - const dailyTrends = Array.from(dailyMap.values()); - const speakerStats: SpeakerStats[] = Array.from(speakerMap.entries()) - .map(([speakerId, totalTime]) => ({ - speakerId, - totalTime, - percentage: totalSpeakingTime > 0 ? (totalTime / totalSpeakingTime) * 100 : 0, - })) - .sort((a, b) => b.totalTime - a.totalTime); - - const avgDuration = - meetings.length > 0 - ? meetings.reduce((sum, m) => sum + m.duration_seconds, 0) / meetings.length - : 0; - const avgWordsPerMeeting = meetings.length > 0 ? totalWords / meetings.length : 0; - - return { - dailyTrends, - speakerStats, - totalMeetings: meetings.length, - totalDuration: meetings.reduce((sum, m) => sum + m.duration_seconds, 0), - totalWords, - totalSegments, - avgDuration, - avgWordsPerMeeting, - speakerCount: speakerMap.size, - }; +function transformSpeakerStats(speakers: SpeakerStat[]): SpeakerStats[] { + const totalTime = speakers.reduce((sum, s) => sum + s.total_time, 0); + return speakers.map((s) => ({ + speakerId: s.speaker_id, + displayName: s.display_name, + totalTime: s.total_time, + percentage: totalTime > 0 ? (s.total_time / totalTime) * 100 : 0, + segmentCount: s.segment_count, + meetingCount: s.meeting_count, + })); } function MeetingsAnalyticsContent({ - analytics, + overview, + speakerStats, chartConfig, }: { - analytics: ReturnType; + overview: AnalyticsOverview; + speakerStats: SpeakerStats[]; chartConfig: Record; }) { const chartId = useId(); @@ -158,32 +117,38 @@ function MeetingsAnalyticsContent({ `${Number(value).toLocaleString()} words`} /> ); + const dailyTrends = transformDailyStats(overview); + const avgDuration = + overview.total_meetings > 0 ? overview.total_duration / overview.total_meetings : 0; + const avgWordsPerMeeting = + overview.total_meetings > 0 ? overview.total_words / overview.total_meetings : 0; + return (
@@ -194,7 +159,7 @@ function MeetingsAnalyticsContent({ Meeting Duration Trends - Daily meeting duration over the last 14 days + Daily meeting duration over the last {ANALYTICS_DAYS} days
@@ -202,7 +167,7 @@ function MeetingsAnalyticsContent({ config={chartConfig} className={`${chartHeight.standard} min-w-[360px]`} > - + @@ -242,7 +207,7 @@ function MeetingsAnalyticsContent({
- +
- {analytics.speakerStats.length > 0 ? ( + {speakerStats.length > 0 ? ( - {analytics.speakerStats.map((stat, idx) => ( + {speakerStats.map((stat, idx) => (
- + @@ -358,7 +323,7 @@ function MeetingsAnalyticsContent({
- {analytics.speakerStats.length > 0 && ( + {speakerStats.length > 0 && ( Speaker Breakdown @@ -366,7 +331,7 @@ function MeetingsAnalyticsContent({
- {analytics.speakerStats.map((speaker, index) => { + {speakerStats.map((speaker, index) => { const speakerColorClass = SPEAKER_COLOR_CLASSES[index % SPEAKER_COLOR_CLASSES.length]; const barWidth = `${speaker.percentage}%`; @@ -377,7 +342,7 @@ function MeetingsAnalyticsContent({
- {speaker.speakerId} + {speaker.displayName} {formatDuration(speaker.totalTime)} ({speaker.percentage.toFixed(1)}%) @@ -406,20 +371,47 @@ function MeetingsAnalyticsContent({ export default function AnalyticsPage() { const [activeTab, setActiveTab] = useState('meetings'); + + const endTime = useMemo(() => Math.floor(Date.now() / 1000), []); + const startTime = useMemo(() => Math.floor(subDays(new Date(), ANALYTICS_DAYS - 1).getTime() / 1000), []); + + const { data: overview, isLoading: overviewLoading } = useQuery({ + queryKey: ['analytics-overview', startTime, endTime], + queryFn: () => + getAPI().getAnalyticsOverview({ + start_time: startTime, + end_time: endTime, + }), + }); + + const { data: speakerResponse, isLoading: speakersLoading } = useQuery({ + queryKey: ['speaker-stats', startTime, endTime], + queryFn: () => + getAPI().listSpeakerStats({ + start_time: startTime, + end_time: endTime, + }), + }); + + const speakerStats = useMemo( + () => (speakerResponse?.speakers ? transformSpeakerStats(speakerResponse.speakers) : []), + [speakerResponse] + ); + const { data: meetingsData } = useQuery({ queryKey: ['meetings', 'all'], queryFn: () => getAPI().listMeetings({ limit: 100 }), + enabled: activeTab === 'speech', }); - const analytics = useMemo( - () => (meetingsData?.meetings ? computeAnalytics(meetingsData.meetings) : null), - [meetingsData] - ); + const chartConfig = { meetings: { label: 'Meetings', color: 'hsl(var(--chart-1))' }, duration: { label: 'Duration (min)', color: 'hsl(var(--chart-2))' }, words: { label: 'Words', color: 'hsl(var(--chart-3))' }, }; + const isLoading = overviewLoading || speakersLoading; + return (
@@ -451,7 +443,7 @@ export default function AnalyticsPage() { - {!analytics ? ( + {isLoading || !overview ? (
{[1, 2, 3, 4].map((i) => ( @@ -460,7 +452,11 @@ export default function AnalyticsPage() {
) : ( - + )}
diff --git a/client/src/pages/People.tsx b/client/src/pages/People.tsx index 3c1fa11..55ee3ed 100644 --- a/client/src/pages/People.tsx +++ b/client/src/pages/People.tsx @@ -5,6 +5,7 @@ import { AnimatePresence, motion } from 'framer-motion'; import { Calendar, Clock, Edit2, Mic, TrendingUp, Users, X } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; import { getAPI } from '@/api/interface'; +import type { SpeakerStat } from '@/api/types'; import { SuccessIcon } from '@/components/icons/status-icons'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; @@ -12,28 +13,33 @@ import { Card, CardContent } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Progress } from '@/components/ui/progress'; import { SearchIcon } from '@/components/ui/search-icon'; +import { Skeleton } from '@/components/ui/skeleton'; import { formatDuration } from '@/lib/utils/format'; import { preferences } from '@/lib/preferences'; -import type { SpeakerStats } from '@/lib/audio/speaker'; -import { aggregateSpeakers, getSpeakerColorIndex } from '@/lib/audio/speaker'; +import { getSpeakerColorIndex } from '@/lib/audio/speaker'; import { cardPadding, typography } from '@/lib/ui/styles'; +/** Speaker stats with display name from preferences applied */ +interface DisplaySpeakerStat extends SpeakerStat { + displayName: string; +} + function SpeakerCard({ speaker, maxSpeakingTime, onRename, }: { - speaker: SpeakerStats; + speaker: DisplaySpeakerStat; maxSpeakingTime: number; onRename: (speakerId: string, newName: string) => void; }) { const [isEditing, setIsEditing] = useState(false); const [editName, setEditName] = useState(speaker.displayName); - const colorIndex = getSpeakerColorIndex(speaker.speakerId); + const colorIndex = getSpeakerColorIndex(speaker.speaker_id); const handleSave = () => { if (editName.trim()) { - onRename(speaker.speakerId, editName.trim()); + onRename(speaker.speaker_id, editName.trim()); setIsEditing(false); } }; @@ -44,7 +50,7 @@ function SpeakerCard({ }; const statValueClass = 'font-semibold'; - const speakingPercentage = (speaker.totalSpeakingTime / maxSpeakingTime) * 100; + const speakingPercentage = (speaker.total_time / maxSpeakingTime) * 100; return (
)} - {speaker.displayName !== speaker.speakerId && ( -

Original: {speaker.speakerId}

+ {speaker.displayName !== speaker.speaker_id && ( +

Original: {speaker.speaker_id}

)}
{/* Confidence Badge */} - {Math.round(speaker.avgConfidence * 100)}% confidence + {Math.round(speaker.avg_confidence * 100)}% confidence
@@ -121,7 +127,7 @@ function SpeakerCard({

Speaking Time

-

{formatDuration(speaker.totalSpeakingTime)}

+

{formatDuration(speaker.total_time)}

@@ -131,7 +137,7 @@ function SpeakerCard({

Meetings

-

{speaker.meetingCount}

+

{speaker.meeting_count}

@@ -141,7 +147,7 @@ function SpeakerCard({

Segments

-

{speaker.segmentCount}

+

{speaker.segment_count}

@@ -154,48 +160,49 @@ function SpeakerCard({ - - {/* Recent Meetings */} - {speaker.meetings.length > 0 && ( -
-

Recent Meetings

-
- {speaker.meetings.slice(0, 3).map((meeting) => ( - - {meeting.title.length > 25 ? `${meeting.title.slice(0, 25)}...` : meeting.title} - - ))} - {speaker.meetings.length > 3 && ( - +{speaker.meetings.length - 3} more - )} -
-
- )} ); } +const ANALYTICS_DAYS = 90; + export default function PeoplePage() { const [searchQuery, setSearchQuery] = useState(''); const [prefsVersion, setPrefsVersion] = useState(0); - const { data: meetingsData } = useQuery({ - queryKey: ['meetings', 'all'], - queryFn: () => getAPI().listMeetings({ limit: 100 }), + const timeRange = useMemo(() => { + const now = Date.now(); + const startTime = now - ANALYTICS_DAYS * 24 * 60 * 60 * 1000; + return { start_time: startTime, end_time: now }; + }, []); + + const { + data: speakerStatsResponse, + isLoading, + } = useQuery({ + queryKey: ['speakerStats', timeRange.start_time, timeRange.end_time], + queryFn: () => + getAPI().listSpeakerStats({ + start_time: timeRange.start_time, + end_time: timeRange.end_time, + }), }); useEffect(() => { return preferences.subscribe(() => setPrefsVersion((v) => v + 1)); }, []); - const speakers = useMemo(() => { - if (!meetingsData?.meetings) { + const speakers = useMemo((): DisplaySpeakerStat[] => { + if (!speakerStatsResponse?.speakers) { return []; } - return aggregateSpeakers(meetingsData.meetings); - }, [meetingsData, prefsVersion]); + return speakerStatsResponse.speakers.map((stat) => ({ + ...stat, + displayName: preferences.getGlobalSpeakerName(stat.speaker_id) || stat.display_name || stat.speaker_id, + })); + }, [speakerStatsResponse, prefsVersion]); const filteredSpeakers = useMemo(() => { if (!searchQuery.trim()) { @@ -204,22 +211,44 @@ export default function PeoplePage() { const query = searchQuery.toLowerCase(); return speakers.filter( (s) => - s.displayName.toLowerCase().includes(query) || s.speakerId.toLowerCase().includes(query) + s.displayName.toLowerCase().includes(query) || s.speaker_id.toLowerCase().includes(query) ); }, [speakers, searchQuery]); const maxSpeakingTime = useMemo(() => { - return Math.max(...speakers.map((s) => s.totalSpeakingTime), 1); + return Math.max(...speakers.map((s) => s.total_time), 1); }, [speakers]); const totalSpeakingTime = useMemo(() => { - return speakers.reduce((sum, s) => sum + s.totalSpeakingTime, 0); + return speakers.reduce((sum, s) => sum + s.total_time, 0); }, [speakers]); const handleRename = (speakerId: string, newName: string) => { preferences.setGlobalSpeakerName(speakerId, newName); }; + if (isLoading) { + return ( +
+
+ + +
+
+ {Array.from({ length: 4 }, (_, i) => ( + + ))} +
+ +
+ {Array.from({ length: 4 }, (_, i) => ( + + ))} +
+
+ ); + } + return (
{/* Header */} @@ -265,8 +294,10 @@ export default function PeoplePage() {
-

{meetingsData?.meetings?.length || 0}

-

Meetings Analyzed

+

+ {speakers.reduce((max, s) => Math.max(max, s.meeting_count), 0)} +

+

Max Meetings (Speaker)

@@ -302,7 +333,7 @@ export default function PeoplePage() { {filteredSpeakers.map((speaker) => ( = { + 3: 'high', + 2: 'medium', + 1: 'low', +}; + +function getPriorityLabel(priority: number): Priority { + return PRIORITY_LABELS[priority] ?? 'medium'; +} + +function getStatusFilters(statusFilter: StatusFilter): TaskStatus[] | undefined { + if (statusFilter === 'all') { + return undefined; + } + return [statusFilter]; +} + export default function TasksPage() { + const queryClient = useQueryClient(); const { activeProject, projects, isLoading: projectsLoading } = useProjects(); const [searchQuery, setSearchQuery] = useState(''); - const [statusFilter, setStatusFilter] = useState('pending'); + const [statusFilter, setStatusFilter] = useState('open'); const [priorityFilter, setPriorityFilter] = useState('all'); - const [completedTasks, setCompletedTasks] = useState>(() => { - const prefs = preferences.get(); - return new Set(prefs.completed_tasks.map((t) => `${t.meeting_id}:${t.task_text}`)); - }); const [projectScope, setProjectScope] = useState(() => { return preferences.get().tasks_project_scope ?? 'active'; }); const [selectedProjectIds, setSelectedProjectIds] = useState(() => { return preferences.get().tasks_project_ids ?? []; }); + const activeProjects = useMemo( () => projects.filter((project) => !project.is_archived), [projects] ); const resolvedProjectId = activeProject?.id; - // Skip fetching when no valid project context const shouldSkipFetch = (projectScope === 'selected' && selectedProjectIds.length === 0) || (projectScope === 'active' && !resolvedProjectId && !projectsLoading); - const { data: meetings = [], isLoading: loading } = useAsyncData( - () => - getAPI() - .listMeetings({ - limit: TASKS_PAGE_MEETINGS_LIMIT, - project_id: projectScope === 'active' ? resolvedProjectId : undefined, - project_ids: projectScope === 'selected' ? selectedProjectIds : undefined, - }) - .then((r) => r.meetings), - [projectScope, selectedProjectIds, resolvedProjectId], - { - initialData: [], - skip: shouldSkipFetch, - onError: (error) => { - addClientLog({ - level: 'warning', - source: 'app', - message: 'Failed to load tasks from meetings', - details: error, - metadata: { context: 'tasks_page_load', project_scope: projectScope }, - }); - }, - } - ); + const { data: tasksResponse, isLoading: loading } = useQuery({ + queryKey: ['tasks', statusFilter, projectScope, selectedProjectIds, resolvedProjectId], + queryFn: () => + getAPI().listTasks({ + statuses: getStatusFilters(statusFilter), + limit: 500, + project_id: projectScope === 'active' ? resolvedProjectId : undefined, + project_ids: projectScope === 'selected' ? selectedProjectIds : undefined, + }), + enabled: !shouldSkipFetch, + }); + + const updateTaskMutation = useMutation({ + mutationFn: (params: { taskId: string; status: TaskStatus }) => + getAPI().updateTask({ + task_id: params.taskId, + status: params.status, + }), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ['tasks'] }); + }, + onError: (error) => { + addClientLog({ + level: 'warning', + source: 'app', + message: 'Failed to update task status', + details: error instanceof Error ? error.message : String(error), + metadata: { context: 'tasks_page_update' }, + }); + }, + }); useEffect(() => { preferences.setTasksProjectFilter(projectScope, selectedProjectIds); }, [projectScope, selectedProjectIds]); - // Aggregate all tasks from meetings - const allTasks = useMemo(() => { - const tasks: TaskWithMeeting[] = []; - meetings.forEach((meeting) => { - meeting.summary?.action_items.forEach((item) => { - tasks.push({ - ...item, - meetingId: meeting.id, - meetingTitle: meeting.title, - meetingDate: meeting.created_at, - projectId: meeting.project_id, - }); - }); - }); - return sortTasksByPriority(tasks); - }, [meetings]); + const allTasks = useMemo(() => tasksResponse?.tasks ?? [], [tasksResponse]); - // Filter tasks const filteredTasks = useMemo(() => { - return allTasks.filter((task) => { - const taskKey = `${task.meetingId}:${task.text}`; - const isCompleted = completedTasks.has(taskKey); + return allTasks.filter((taskWithMeeting) => { + const task = taskWithMeeting.task; - // Status filter - if (statusFilter === 'pending' && isCompleted) { - return false; - } - if (statusFilter === 'completed' && !isCompleted) { - return false; + if (priorityFilter !== 'all') { + const label = getPriorityLabel(task.priority); + if (label !== priorityFilter) { + return false; + } } - // Priority filter - if (priorityFilter !== 'all' && task.priority !== priorityFilter) { - return false; - } - - // Search filter if (searchQuery) { const query = searchQuery.toLowerCase(); if ( !task.text.toLowerCase().includes(query) && - !task.meetingTitle.toLowerCase().includes(query) && - !task.assignee?.toLowerCase().includes(query) + !taskWithMeeting.meeting_title.toLowerCase().includes(query) ) { return false; } @@ -134,42 +130,41 @@ export default function TasksPage() { return true; }); - }, [allTasks, statusFilter, priorityFilter, searchQuery, completedTasks]); + }, [allTasks, priorityFilter, searchQuery]); - const getTaskMeetingLink = (task: TaskWithMeeting): string => { - const projectId = task.projectId ?? activeProject?.id; - return projectId ? `/projects/${projectId}/meetings/${task.meetingId}` : '/projects'; + const getTaskMeetingLink = (taskWithMeeting: APITaskWithMeeting): string => { + const projectId = taskWithMeeting.project_id ?? activeProject?.id; + const meetingId = taskWithMeeting.task.meeting_id; + if (projectId && meetingId) { + return `/projects/${projectId}/meetings/${meetingId}`; + } + return '/projects'; }; - const handleToggleComplete = (task: TaskWithMeeting) => { - const taskKey = `${task.meetingId}:${task.text}`; - const isNowCompleted = preferences.toggleTaskCompletion(task.meetingId, task.text); - - setCompletedTasks((prev) => { - const next = new Set(prev); - if (isNowCompleted) { - next.add(taskKey); - } else { - next.delete(taskKey); - } - return next; - }); + const handleToggleComplete = (task: Task) => { + const newStatus: TaskStatus = task.status === 'done' ? 'open' : 'done'; + updateTaskMutation.mutate({ taskId: task.id, status: newStatus }); }; - const isTaskCompleted = (task: TaskWithMeeting): boolean => { - return completedTasks.has(`${task.meetingId}:${task.text}`); + const handleDismiss = (task: Task) => { + updateTaskMutation.mutate({ taskId: task.id, status: 'dismissed' }); }; - // Stats const stats = useMemo(() => { - const total = allTasks.length; - const completed = allTasks.filter((t) => completedTasks.has(`${t.meetingId}:${t.text}`)).length; - const pending = total - completed; - const highPriority = allTasks.filter( - (t) => t.priority === 'high' && !completedTasks.has(`${t.meetingId}:${t.text}`) + const openCount = allTasks.filter((t) => t.task.status === 'open').length; + const doneCount = allTasks.filter((t) => t.task.status === 'done').length; + const dismissedCount = allTasks.filter((t) => t.task.status === 'dismissed').length; + const highPriorityCount = allTasks.filter( + (t) => t.task.status === 'open' && t.task.priority >= 3 ).length; - return { total, completed, pending, highPriority }; - }, [allTasks, completedTasks]); + return { + total: allTasks.length, + open: openCount, + done: doneCount, + dismissed: dismissedCount, + highPriority: highPriorityCount, + }; + }, [allTasks]); if (loading) { return ( @@ -221,8 +216,8 @@ export default function TasksPage() { transition={{ delay: 0.05 }} className="grid grid-cols-2 sm:grid-cols-4 gap-4" > - - + + setStatusFilter(v as StatusFilter)}> - + - Pending + Open - + Done + + + Dismissed + All @@ -284,31 +283,37 @@ export default function TasksPage() { {filteredTasks.length === 0 ? ( ) : ( - {filteredTasks.map((task) => { - const isCompleted = isTaskCompleted(task); + {filteredTasks.map((taskWithMeeting) => { + const task = taskWithMeeting.task; + const isCompleted = task.status === 'done'; + const isDismissed = task.status === 'dismissed'; return ( {/* Checkbox */} @@ -329,11 +334,16 @@ export default function TasksPage() { 'mt-0.5 shrink-0 transition-colors', isCompleted ? 'text-success' - : 'text-muted-foreground hover:text-primary' + : isDismissed + ? 'text-muted-foreground' + : 'text-muted-foreground hover:text-primary' )} + disabled={updateTaskMutation.isPending} > {isCompleted ? ( + ) : isDismissed ? ( + ) : ( )} @@ -342,43 +352,50 @@ export default function TasksPage() { {/* Content */}

{task.text}

- {task.meetingTitle} + {taskWithMeeting.meeting_title} - {formatRelativeTime(task.meetingDate)} + {formatRelativeTime(taskWithMeeting.meeting_created_at)} - {task.assignee && ( - <> - - {task.assignee} - - )} {task.due_date && ( <> - - Due {formatDate(task.due_date)} - + Due {formatDate(task.due_date)} )}
- {/* Priority Badge */} + {/* Priority Badge & Actions */}
- - + + {task.status === 'open' && ( + + )} +

{entity.text}

{entity.confidence !== undefined && ( diff --git a/client/src/pages/meeting-detail/index.tsx b/client/src/pages/meeting-detail/index.tsx index 3e3ffb3..abed31a 100644 --- a/client/src/pages/meeting-detail/index.tsx +++ b/client/src/pages/meeting-detail/index.tsx @@ -4,9 +4,10 @@ * Displays a meeting's transcript, summary, entities, and playback controls. */ -import { useRef } from 'react'; +import { useRef, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { useVirtualizer } from '@tanstack/react-virtual'; +import { ChevronDown, ChevronRight, Sparkles } from 'lucide-react'; import { getAPI } from '@/api/interface'; import { isTauriEnvironment } from '@/api'; @@ -14,6 +15,12 @@ import type { ExportFormat } from '@/api/types'; import { ProcessingStatus } from '@/components/features/meetings'; import { SkeletonTranscript } from '@/components/ui/skeleton'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; +import { Button } from '@/components/ui/button'; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from '@/components/ui/collapsible'; import { useGuardedMutation } from '@/hooks'; import { buildExportBlob, downloadBlob } from '@/lib/utils/download'; @@ -35,6 +42,7 @@ export default function MeetingDetailPage() { const { guard } = useGuardedMutation(); const transcriptScrollRef = useRef(null); const isTauri = isTauriEnvironment(); + const [isSummaryOpen, setIsSummaryOpen] = useState(true); const { meeting, @@ -173,10 +181,57 @@ export default function MeetingDetailPage() { )}
- {/* Transcript Panel */} -
-

Transcript

- {shouldVirtualizeTranscript ? ( + {/* Main Content Area: Summary + Transcript */} +
+ {/* Summary Section */} +
+ +
+ + + + + {!meeting.summary && !loading && ( + + )} +
+ + +
+ +
+
+
+
+ + {/* Transcript Section */} +
+

Transcript

+ {shouldVirtualizeTranscript ? (
)}
+
- {/* Summary Panel */} -
- + {/* Right Panel: Entities & Notes */} +
+ - - Summary - - - - void; + compact?: boolean; } -export function SummaryPanel({ summary, summaryMeta, onGenerateSummary }: SummaryPanelProps) { +export function SummaryPanel({ summary, summaryMeta, onGenerateSummary, compact }: SummaryPanelProps) { if (!summary) { + if (compact) { + return ( +
+ No summary available. Click "Generate Summary" to create one. +
+ ); + } return (

No summary generated yet

@@ -33,49 +41,61 @@ export function SummaryPanel({ summary, summaryMeta, onGenerateSummary }: Summar } return ( - <> -
-

Executive Summary

-

{summary.executive_summary}

-
- {summaryMeta.length > 0 && ( -
- {summaryMeta.map((meta) => ( - - {meta.label}: {meta.value} - - ))} +
+
+
+

Executive Summary

+

{summary.executive_summary}

+
+ + {summaryMeta.length > 0 && ( +
+ {summaryMeta.map((meta) => ( + + {meta.label}: + {meta.value} + + ))} +
+ )} + +
+

Key Points

+
    + {summary.key_points.map((kp) => ( +
  • + + {kp.text} +
  • + ))} +
- )} -
-

Key Points

-
    - {summary.key_points.map((kp) => ( -
  • - - {kp.text} -
  • - ))} -
+

Action Items

{summary.action_items.map((item) => ( - + -

{item.text}

+

{item.text}

{item.assignee && ( - {item.assignee} + + + {item.assignee} + )}
))} + {summary.action_items.length === 0 && ( +

No action items detected.

+ )}
- +
); } diff --git a/cupcake_tests/001_block_no_verify_deny.json b/cupcake_tests/001_block_no_verify_deny.json new file mode 100644 index 0000000..577fee6 --- /dev/null +++ b/cupcake_tests/001_block_no_verify_deny.json @@ -0,0 +1,9 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "bash", + "args": { + "command": "git commit --no-verify" + }, + "session_id": "test", + "cwd": "/tmp" +} \ No newline at end of file diff --git a/cupcake_tests/002_block_no_verify_allow.json b/cupcake_tests/002_block_no_verify_allow.json new file mode 100644 index 0000000..77425bc --- /dev/null +++ b/cupcake_tests/002_block_no_verify_allow.json @@ -0,0 +1,9 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "bash", + "args": { + "command": "git commit -m fix" + }, + "session_id": "test", + "cwd": "/tmp" +} \ No newline at end of file diff --git a/cupcake_tests/003_block_makefile_edit_deny.json b/cupcake_tests/003_block_makefile_edit_deny.json new file mode 100644 index 0000000..7a42eff --- /dev/null +++ b/cupcake_tests/003_block_makefile_edit_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/Makefile", + "new_string": "test:" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/004_block_linter_config_python_deny.json b/cupcake_tests/004_block_linter_config_python_deny.json new file mode 100644 index 0000000..798bd1e --- /dev/null +++ b/cupcake_tests/004_block_linter_config_python_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/pyproject.toml", + "new_string": "[tool.ruff]" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/005_block_linter_config_python_pyrightconfig_deny.json b/cupcake_tests/005_block_linter_config_python_pyrightconfig_deny.json new file mode 100644 index 0000000..0747847 --- /dev/null +++ b/cupcake_tests/005_block_linter_config_python_pyrightconfig_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/pyrightconfig.json", + "new_string": "{}" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/006_block_linter_config_frontend_deny.json b/cupcake_tests/006_block_linter_config_frontend_deny.json new file mode 100644 index 0000000..9a80a3d --- /dev/null +++ b/cupcake_tests/006_block_linter_config_frontend_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/client/biome.json", + "new_string": "{}" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/007_block_linter_config_frontend_tsconfig_deny.json b/cupcake_tests/007_block_linter_config_frontend_tsconfig_deny.json new file mode 100644 index 0000000..082f528 --- /dev/null +++ b/cupcake_tests/007_block_linter_config_frontend_tsconfig_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/client/tsconfig.json", + "new_string": "{}" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/008_block_tests_quality_deny.json b/cupcake_tests/008_block_tests_quality_deny.json new file mode 100644 index 0000000..6dcfa31 --- /dev/null +++ b/cupcake_tests/008_block_tests_quality_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/tests/quality/test_smells.py", + "new_string": "# mod" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/009_warn_baselines_edit_deny.json b/cupcake_tests/009_warn_baselines_edit_deny.json new file mode 100644 index 0000000..26de7aa --- /dev/null +++ b/cupcake_tests/009_warn_baselines_edit_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/tests/quality/baselines.json", + "new_string": "{}" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/010_block_code_quality_test_edits_deny.json b/cupcake_tests/010_block_code_quality_test_edits_deny.json new file mode 100644 index 0000000..ef826f4 --- /dev/null +++ b/cupcake_tests/010_block_code_quality_test_edits_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/src/test/code-quality.test.ts", + "new_string": "//" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/011_block_code_quality_test_bash_deny.json b/cupcake_tests/011_block_code_quality_test_bash_deny.json new file mode 100644 index 0000000..03dd97f --- /dev/null +++ b/cupcake_tests/011_block_code_quality_test_bash_deny.json @@ -0,0 +1,9 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "bash", + "args": { + "command": "sed -i s/x/y/ src/test/code-quality.test.ts" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/012_block_biome_ignore_deny.json b/cupcake_tests/012_block_biome_ignore_deny.json new file mode 100644 index 0000000..8fbdd10 --- /dev/null +++ b/cupcake_tests/012_block_biome_ignore_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/client/src/App.tsx", + "new_string": "// biome-ignore lint: reason" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/013_block_biome_ignore_ts_ignore_deny.json b/cupcake_tests/013_block_biome_ignore_ts_ignore_deny.json new file mode 100644 index 0000000..97df205 --- /dev/null +++ b/cupcake_tests/013_block_biome_ignore_ts_ignore_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/client/src/App.tsx", + "new_string": "// @ts-ignore" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/014_block_biome_ignore_allow.json b/cupcake_tests/014_block_biome_ignore_allow.json new file mode 100644 index 0000000..d9435c2 --- /dev/null +++ b/cupcake_tests/014_block_biome_ignore_allow.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/client/src/App.tsx", + "new_string": "const x = 1;" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/015_block_biome_ignore_bash_deny.json b/cupcake_tests/015_block_biome_ignore_bash_deny.json new file mode 100644 index 0000000..7567be7 --- /dev/null +++ b/cupcake_tests/015_block_biome_ignore_bash_deny.json @@ -0,0 +1,9 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "bash", + "args": { + "command": "echo // @ts-ignore >> client/src/App.tsx" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/016_block_magic_numbers_deny.json b/cupcake_tests/016_block_magic_numbers_deny.json new file mode 100644 index 0000000..fa06306 --- /dev/null +++ b/cupcake_tests/016_block_magic_numbers_deny.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/src/noteflow/service.py", + "new_string": "timeout = 30" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/cupcake_tests/017_block_magic_numbers_constants_allow.json b/cupcake_tests/017_block_magic_numbers_constants_allow.json new file mode 100644 index 0000000..af964db --- /dev/null +++ b/cupcake_tests/017_block_magic_numbers_constants_allow.json @@ -0,0 +1,10 @@ +{ + "hook_event_name": "PreToolUse", + "tool": "edit", + "args": { + "file_path": "/home/trav/repos/noteflow/src/noteflow/constants.py", + "new_string": "TIMEOUT = 30" + }, + "session_id": "test", + "cwd": "/home/trav/repos/noteflow" +} \ No newline at end of file diff --git a/docs/plans/2026-01-21-bugfinder-design.md b/docs/plans/2026-01-21-bugfinder-design.md new file mode 100644 index 0000000..f38fa9e --- /dev/null +++ b/docs/plans/2026-01-21-bugfinder-design.md @@ -0,0 +1,66 @@ +
+Review Bugfinder feedback in docs/sprints/phase-ongoing/Bugfinder/rpt1-8 to identify root causes across +Analytics, Home, Meetings, People, Post Meeting, and Tasks pages, then outline ideal fixes that restore +data visibility, interaction, and persistence. +
+ +
+- analytics_reports (branch finding: treat rpt1-rpt3 as equally urgent) + - rpt1 Analytics - Meetings: totals and charts depend on meeting.segments; ListMeetings returns + include_segments=false and no summary, so word counts and speaker stats remain zero. Root cause in + src/noteflow/grpc/mixins/meeting/meeting_mixin.py#L197 and client/src/pages/Analytics.tsx#L75. + - rpt2 Analytics - Performance: metrics come only from server psutil snapshots and heuristic latency + (src/noteflow/infrastructure/metrics/collector.py, client/src/components/features/analytics/performance-tab.tsx). + No client/server toggle exists, and high resource usage likely reflects ongoing post-processing or + other server workloads rather than a UI issue. + - rpt3 Analytics - Speech: entity map and speech patterns rely on meeting.segments/words in + client/src/components/features/analytics/speech-analysis-tab.tsx. With empty segments, entities are + blank and speech metrics show zeros; heuristics are placeholders rather than NER output. +- home_meetings (branch finding: missing data wiring and core interactions) + - rpt4 Home Page: MeetingCard renders meeting.segments[0]?.text so all cards show "No transcript + available" when ListMeetings omits segments (client/src/components/features/meetings/meeting-card.tsx). + Tasks come from meeting.summary.action_items, but ListMeetings omits summary, so tasks disappear on + reload (client/src/pages/Home.tsx, client/src/pages/Tasks.tsx). The Ask AI button has no handler + (client/src/components/layout/app-sidebar.tsx). Home uses HOME_RECENT_MEETINGS_LIMIT=5 and slices to 6, + conflicting with the requested "last 3" (client/src/lib/constants/timing.ts, client/src/pages/Home.tsx). + Summary generation does not update meeting titles, and there is no calendar-link signal in meeting + payloads to gate that behavior. + - rpt5 Meetings: UI calls listMeetings(limit=MEETINGS_PAGE_LIMIT) once with no offset or pagination UI, + even though the API returns total_count (client/src/pages/Meetings.tsx). +- people_post_meeting (branch finding: People list never populating due to data layer) + - rpt6 People: aggregateSpeakers uses meeting.segments and preferences-only speaker names + (client/src/lib/audio/speaker.ts, client/src/pages/People.tsx). With listMeetings returning empty + segments, speaker metrics are all zero. Speaker renames are local only; the renameSpeaker API exists + but is not used. + - rpt7 Post Meeting: transcript row clicks only trigger playback in Tauri; in web they only toggle + selection (client/src/pages/meeting-detail/use-playback.ts). Speaker renaming is hidden behind + double-click on SpeakerBadge and is local-only (client/src/components/common/badges/speaker-badge.tsx). + Summary tab is concise and relegated to the right panel; no dedicated view for call metrics or + background process status. Action items and entities are read-only. +- tasks_page (branch finding: task list empty) + - rpt8 Tasks: tasks are derived from meeting.summary.action_items, but summaries are not included in + ListMeetings, so lists are empty after refresh. Completion is stored in preferences only, and the + UI supports list view only (client/src/pages/Tasks.tsx). Backend already has TaskModel but no gRPC + endpoints, so edits/ownership/kanban are not supported. +
+ +
+- Selected strategy: build dedicated aggregate endpoints for analytics, speaker stats, and tasks. + - Add gRPC endpoints (e.g., GetAnalyticsOverview, ListSpeakerStats, ListTasks) with pagination and + time-series responses to replace client-side aggregation of segments/summary fields. + - Client Analytics, People, Home, and Tasks pages should consume these aggregates instead of listMeetings. +- Selected strategy: TaskModel CRUD as source of truth for action items. + - On summary persistence, create/update TaskModel rows linked to action_items for provenance. + - Add task CRUD endpoints (list/update/status/delete) to support owner, priority, due date, and kanban. + - Remove preferences-only completion state; sync status updates through the API. +- Selected strategy: move the LLM summary into the transcript panel and repurpose the right panel. + - Transcript pane shows verbose summary as the primary view; summary generation should target higher + verbosity templates by default. + - Right panel becomes call metrics (model/tokens/latency) plus processing status (summary/entities/ + diarization, background jobs) and editing surfaces for tasks/entities. +- Supporting fixes: wire Ask AI to a route or modal, add Meetings pagination using total_count, expose + renameSpeaker in the UI for persistent names, add Analytics client/server toggle for performance metrics, + and add calendar-link indicators so summary title updates only apply to non-calendar meetings. +- Transcript interaction: in web mode, highlight transcript rows on click and surface a desktop-playback + message until web playback is implemented. +
diff --git a/docs/sprints/phase-ongoing/Bugfinder/rpt1/Analytics - Meetings.md b/docs/sprints/phase-ongoing/Bugfinder/rpt1/Analytics - Meetings.md new file mode 100644 index 0000000..02a5651 --- /dev/null +++ b/docs/sprints/phase-ongoing/Bugfinder/rpt1/Analytics - Meetings.md @@ -0,0 +1,9 @@ +![pasted_image_04836a5d-3226-48bf-b3ec-527cd202fad0.png](file://C:\Users\PC\AppData\Roaming\CherryStudio\Data\Files\04836a5d-3226-48bf-b3ec-527cd202fad0.png) + +Issues + +1. The header cards for Total Words and Unique Speakers has always been 0 and never changed + +2. The graphs for Speaker Particiaption and Word Count Trends has never visualized any data + + diff --git a/docs/sprints/phase-ongoing/Bugfinder/rpt1/Analytics - Meetings.png b/docs/sprints/phase-ongoing/Bugfinder/rpt1/Analytics - Meetings.png new file mode 100644 index 0000000000000000000000000000000000000000..bfd6ecf4db2592b82f17bd5238c746871f900072 GIT binary patch literal 176400 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%0DV?U%?T}Y8v=^2*;>0gc-31X)#Yh`4eWfuD>7j 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≦fMB*)aC0>%d!U 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 Sd%%DGQoo{oIZM^z-~R(TcOXyz literal 0 HcmV?d00001 diff --git a/docs/sprints/phase-ongoing/Bugfinder/rpt3/Analytics - Speech.md b/docs/sprints/phase-ongoing/Bugfinder/rpt3/Analytics - Speech.md new file mode 100644 index 0000000..dd97491 --- /dev/null +++ b/docs/sprints/phase-ongoing/Bugfinder/rpt3/Analytics - Speech.md @@ -0,0 +1,7 @@ +![pasted_image_9b688a19-5857-40fc-832a-02ce5ca149ef.png](file://C:\Users\PC\AppData\Roaming\CherryStudio\Data\Files\9b688a19-5857-40fc-832a-02ce5ca149ef.png) + +Issues + +1. Entity Word Map has always been blank + +2. Speech patters are either mocked data or incomplete \ No newline at end of file diff --git a/docs/sprints/phase-ongoing/Bugfinder/rpt3/Analytics - Speech.png b/docs/sprints/phase-ongoing/Bugfinder/rpt3/Analytics - Speech.png new file mode 100644 index 0000000000000000000000000000000000000000..ba1a70d89b20bebc63d9ecf8037e0dccff2f5b9a GIT binary patch literal 137798 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

n8VH!L5#zJ4#ks|3MJj0>53FJ3Bp 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

h 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%0A5hZV5AVmkWc+SbM3hzO1~gUzKO?nMzQjCO!x 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 V{`s+G>J>Obapt->6m1ST@qaY&RoMUl literal 0 HcmV?d00001 diff --git a/docs/sprints/phase-ongoing/Bugfinder/rpt4/Home Page.md b/docs/sprints/phase-ongoing/Bugfinder/rpt4/Home Page.md new file mode 100644 index 0000000..4dfc71b --- /dev/null +++ b/docs/sprints/phase-ongoing/Bugfinder/rpt4/Home Page.md @@ -0,0 +1,16 @@ +![pasted_image_88eda805-636e-4f39-8f35-bbb772d66f6b.png](file://C:\Users\PC\AppData\Roaming\CherryStudio\Data\Files\88eda805-636e-4f39-8f35-bbb772d66f6b.png) + +Issues + +1. Every meeting says “No Transcript Available” no matter how long ago it finished processing + +2. Tasks and action items dont seem to be persisted + +3. Ask AI button does not seem to be working + + +Change requests + +1. Home screen should only show the last 3 recorded meetings, it currenly shows 5. + +2. Summarization task should also update the meeting title ONLY if the meeting isn’t connected to a calendar appointments \ No newline at end of file diff --git a/docs/sprints/phase-ongoing/Bugfinder/rpt4/Home Page.png b/docs/sprints/phase-ongoing/Bugfinder/rpt4/Home Page.png new file mode 100644 index 0000000000000000000000000000000000000000..7316f9dda653736e74a37c99a3afc85784525c46 GIT binary patch literal 172933 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