bc-code-intelligence-mcp 1.5.9 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +9 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +93 -211
- package/dist/index.js.map +1 -1
- package/dist/layers/base-layer.d.ts +6 -6
- package/dist/layers/base-layer.d.ts.map +1 -1
- package/dist/layers/base-layer.js +15 -15
- package/dist/layers/base-layer.js.map +1 -1
- package/dist/layers/embedded-layer.d.ts +2 -2
- package/dist/layers/embedded-layer.d.ts.map +1 -1
- package/dist/layers/embedded-layer.js +32 -16
- package/dist/layers/embedded-layer.js.map +1 -1
- package/dist/layers/git-layer.d.ts +2 -2
- package/dist/layers/git-layer.d.ts.map +1 -1
- package/dist/layers/git-layer.js +23 -9
- package/dist/layers/git-layer.js.map +1 -1
- package/dist/layers/project-layer.d.ts +2 -2
- package/dist/layers/project-layer.d.ts.map +1 -1
- package/dist/layers/project-layer.js +25 -11
- package/dist/layers/project-layer.js.map +1 -1
- package/dist/services/code-analysis-service.d.ts +100 -2
- package/dist/services/code-analysis-service.d.ts.map +1 -1
- package/dist/services/code-analysis-service.js +274 -8
- package/dist/services/code-analysis-service.js.map +1 -1
- package/dist/services/knowledge-service.d.ts.map +1 -1
- package/dist/services/knowledge-service.js.map +1 -1
- package/dist/services/methodology-service.d.ts +34 -2
- package/dist/services/methodology-service.d.ts.map +1 -1
- package/dist/services/methodology-service.js +279 -24
- package/dist/services/methodology-service.js.map +1 -1
- package/dist/services/multi-content-layer-service.d.ts.map +1 -1
- package/dist/services/multi-content-layer-service.js +26 -9
- package/dist/services/multi-content-layer-service.js.map +1 -1
- package/dist/services/relevance-index-service.d.ts +95 -0
- package/dist/services/relevance-index-service.d.ts.map +1 -0
- package/dist/services/relevance-index-service.js +321 -0
- package/dist/services/relevance-index-service.js.map +1 -0
- package/dist/services/roleplay-engine.d.ts +8 -0
- package/dist/services/roleplay-engine.d.ts.map +1 -1
- package/dist/services/roleplay-engine.js +35 -3
- package/dist/services/roleplay-engine.js.map +1 -1
- package/dist/services/specialist-loader.d.ts +1 -0
- package/dist/services/specialist-loader.d.ts.map +1 -1
- package/dist/services/specialist-loader.js +1 -0
- package/dist/services/specialist-loader.js.map +1 -1
- package/dist/services/workflow-service.d.ts +12 -0
- package/dist/services/workflow-service.d.ts.map +1 -1
- package/dist/services/workflow-service.js +30 -0
- package/dist/services/workflow-service.js.map +1 -1
- package/dist/services/{enhanced-prompt-service.d.ts → workflow-specialist-router.d.ts} +41 -4
- package/dist/services/workflow-specialist-router.d.ts.map +1 -0
- package/dist/services/{enhanced-prompt-service.js → workflow-specialist-router.js} +150 -24
- package/dist/services/workflow-specialist-router.js.map +1 -0
- package/dist/services/workflow-v2/index.d.ts +6 -0
- package/dist/services/workflow-v2/index.d.ts.map +1 -0
- package/dist/services/workflow-v2/index.js +6 -0
- package/dist/services/workflow-v2/index.js.map +1 -0
- package/dist/services/workflow-v2/workflow-definitions.d.ts +53 -0
- package/dist/services/workflow-v2/workflow-definitions.d.ts.map +1 -0
- package/dist/services/workflow-v2/workflow-definitions.js +722 -0
- package/dist/services/workflow-v2/workflow-definitions.js.map +1 -0
- package/dist/services/workflow-v2/workflow-session-manager.d.ts +140 -0
- package/dist/services/workflow-v2/workflow-session-manager.d.ts.map +1 -0
- package/dist/services/workflow-v2/workflow-session-manager.js +820 -0
- package/dist/services/workflow-v2/workflow-session-manager.js.map +1 -0
- package/dist/streamlined-handlers.d.ts +7 -86
- package/dist/streamlined-handlers.d.ts.map +1 -1
- package/dist/streamlined-handlers.js +23 -679
- package/dist/streamlined-handlers.js.map +1 -1
- package/dist/tools/_shared/workspace-constants.d.ts +49 -0
- package/dist/tools/_shared/workspace-constants.d.ts.map +1 -0
- package/dist/tools/_shared/workspace-constants.js +53 -0
- package/dist/tools/_shared/workspace-constants.js.map +1 -0
- package/dist/tools/advance_workflow/handler.d.ts +21 -0
- package/dist/tools/advance_workflow/handler.d.ts.map +1 -0
- package/dist/tools/advance_workflow/handler.js +58 -0
- package/dist/tools/advance_workflow/handler.js.map +1 -0
- package/dist/tools/advance_workflow/schema.d.ts +8 -0
- package/dist/tools/advance_workflow/schema.d.ts.map +1 -0
- package/dist/tools/advance_workflow/schema.js +28 -0
- package/dist/tools/advance_workflow/schema.js.map +1 -0
- package/dist/tools/analyze_al_code/handler.d.ts +12 -0
- package/dist/tools/analyze_al_code/handler.d.ts.map +1 -0
- package/dist/tools/analyze_al_code/handler.js +312 -0
- package/dist/tools/analyze_al_code/handler.js.map +1 -0
- package/dist/tools/analyze_al_code/schema.d.ts +8 -0
- package/dist/tools/analyze_al_code/schema.d.ts.map +1 -0
- package/dist/tools/analyze_al_code/schema.js +54 -0
- package/dist/tools/analyze_al_code/schema.js.map +1 -0
- package/dist/tools/ask_bc_expert/handler.d.ts +21 -0
- package/dist/tools/ask_bc_expert/handler.d.ts.map +1 -0
- package/dist/tools/ask_bc_expert/handler.js +118 -0
- package/dist/tools/ask_bc_expert/handler.js.map +1 -0
- package/dist/tools/ask_bc_expert/schema.d.ts +8 -0
- package/dist/tools/ask_bc_expert/schema.d.ts.map +1 -0
- package/dist/tools/ask_bc_expert/schema.js +33 -0
- package/dist/tools/ask_bc_expert/schema.js.map +1 -0
- package/dist/tools/context-snapshot/handler.d.ts +14 -0
- package/dist/tools/context-snapshot/handler.d.ts.map +1 -0
- package/dist/tools/context-snapshot/handler.js +143 -0
- package/dist/tools/context-snapshot/handler.js.map +1 -0
- package/dist/tools/context-snapshot/schema.d.ts +11 -0
- package/dist/tools/context-snapshot/schema.d.ts.map +1 -0
- package/dist/tools/context-snapshot/schema.js +46 -0
- package/dist/tools/context-snapshot/schema.js.map +1 -0
- package/dist/tools/core-tools.d.ts +1 -1
- package/dist/tools/core-tools.d.ts.map +1 -1
- package/dist/tools/core-tools.js +26 -9
- package/dist/tools/core-tools.js.map +1 -1
- package/dist/tools/create_layer_content/handler.d.ts +17 -0
- package/dist/tools/create_layer_content/handler.d.ts.map +1 -0
- package/dist/tools/create_layer_content/handler.js +248 -0
- package/dist/tools/create_layer_content/handler.js.map +1 -0
- package/dist/tools/create_layer_content/schema.d.ts +9 -0
- package/dist/tools/create_layer_content/schema.d.ts.map +1 -0
- package/dist/tools/create_layer_content/schema.js +42 -0
- package/dist/tools/create_layer_content/schema.js.map +1 -0
- package/dist/tools/debug/diagnose_git_layer/handler.d.ts +6 -0
- package/dist/tools/debug/diagnose_git_layer/handler.d.ts.map +1 -0
- package/dist/tools/debug/diagnose_git_layer/handler.js +286 -0
- package/dist/tools/debug/diagnose_git_layer/handler.js.map +1 -0
- package/dist/tools/debug/diagnose_git_layer/schema.d.ts +6 -0
- package/dist/tools/debug/diagnose_git_layer/schema.d.ts.map +1 -0
- package/dist/tools/debug/diagnose_git_layer/schema.js +35 -0
- package/dist/tools/debug/diagnose_git_layer/schema.js.map +1 -0
- package/dist/tools/debug/diagnose_local_layer/handler.d.ts +6 -0
- package/dist/tools/debug/diagnose_local_layer/handler.d.ts.map +1 -0
- package/dist/tools/debug/diagnose_local_layer/handler.js +285 -0
- package/dist/tools/debug/diagnose_local_layer/handler.js.map +1 -0
- package/dist/tools/debug/diagnose_local_layer/schema.d.ts +6 -0
- package/dist/tools/debug/diagnose_local_layer/schema.d.ts.map +1 -0
- package/dist/tools/debug/diagnose_local_layer/schema.js +16 -0
- package/dist/tools/debug/diagnose_local_layer/schema.js.map +1 -0
- package/dist/tools/debug/get_layer_diagnostics/handler.d.ts +7 -0
- package/dist/tools/debug/get_layer_diagnostics/handler.d.ts.map +1 -0
- package/dist/tools/debug/get_layer_diagnostics/handler.js +46 -0
- package/dist/tools/debug/get_layer_diagnostics/handler.js.map +1 -0
- package/dist/tools/debug/get_layer_diagnostics/schema.d.ts +6 -0
- package/dist/tools/debug/get_layer_diagnostics/schema.d.ts.map +1 -0
- package/dist/tools/debug/get_layer_diagnostics/schema.js +20 -0
- package/dist/tools/debug/get_layer_diagnostics/schema.js.map +1 -0
- package/dist/tools/debug/reload_layers/handler.d.ts +8 -0
- package/dist/tools/debug/reload_layers/handler.d.ts.map +1 -0
- package/dist/tools/debug/reload_layers/handler.js +83 -0
- package/dist/tools/debug/reload_layers/handler.js.map +1 -0
- package/dist/tools/debug/reload_layers/schema.d.ts +6 -0
- package/dist/tools/debug/reload_layers/schema.d.ts.map +1 -0
- package/dist/tools/debug/reload_layers/schema.js +20 -0
- package/dist/tools/debug/reload_layers/schema.js.map +1 -0
- package/dist/tools/debug/test_azure_devops_pat/handler.d.ts +6 -0
- package/dist/tools/debug/test_azure_devops_pat/handler.d.ts.map +1 -0
- package/dist/tools/debug/test_azure_devops_pat/handler.js +16 -0
- package/dist/tools/debug/test_azure_devops_pat/handler.js.map +1 -0
- package/dist/tools/debug/test_azure_devops_pat/schema.d.ts +6 -0
- package/dist/tools/debug/test_azure_devops_pat/schema.d.ts.map +1 -0
- package/dist/tools/debug/test_azure_devops_pat/schema.js +27 -0
- package/dist/tools/debug/test_azure_devops_pat/schema.js.map +1 -0
- package/dist/tools/debug/validate_layer_config/handler.d.ts +6 -0
- package/dist/tools/debug/validate_layer_config/handler.d.ts.map +1 -0
- package/dist/tools/debug/validate_layer_config/handler.js +17 -0
- package/dist/tools/debug/validate_layer_config/handler.js.map +1 -0
- package/dist/tools/debug/validate_layer_config/schema.d.ts +6 -0
- package/dist/tools/debug/validate_layer_config/schema.d.ts.map +1 -0
- package/dist/tools/debug/validate_layer_config/schema.js +21 -0
- package/dist/tools/debug/validate_layer_config/schema.js.map +1 -0
- package/dist/tools/find_bc_knowledge/handler.d.ts +21 -0
- package/dist/tools/find_bc_knowledge/handler.d.ts.map +1 -0
- package/dist/tools/find_bc_knowledge/handler.js +71 -0
- package/dist/tools/find_bc_knowledge/handler.js.map +1 -0
- package/dist/tools/find_bc_knowledge/schema.d.ts +8 -0
- package/dist/tools/find_bc_knowledge/schema.d.ts.map +1 -0
- package/dist/tools/find_bc_knowledge/schema.js +35 -0
- package/dist/tools/find_bc_knowledge/schema.js.map +1 -0
- package/dist/tools/get_bc_topic/handler.d.ts +12 -0
- package/dist/tools/get_bc_topic/handler.d.ts.map +1 -0
- package/dist/tools/get_bc_topic/handler.js +35 -0
- package/dist/tools/get_bc_topic/handler.js.map +1 -0
- package/dist/tools/get_bc_topic/schema.d.ts +8 -0
- package/dist/tools/get_bc_topic/schema.d.ts.map +1 -0
- package/dist/tools/get_bc_topic/schema.js +29 -0
- package/dist/tools/get_bc_topic/schema.js.map +1 -0
- package/dist/tools/get_codelens_mappings/handler.d.ts +8 -0
- package/dist/tools/get_codelens_mappings/handler.d.ts.map +1 -0
- package/dist/tools/get_codelens_mappings/handler.js +79 -0
- package/dist/tools/get_codelens_mappings/handler.js.map +1 -0
- package/dist/tools/get_codelens_mappings/schema.d.ts +9 -0
- package/dist/tools/get_codelens_mappings/schema.d.ts.map +1 -0
- package/dist/tools/get_codelens_mappings/schema.js +16 -0
- package/dist/tools/get_codelens_mappings/schema.js.map +1 -0
- package/dist/tools/get_workflow_help/handler.d.ts +12 -0
- package/dist/tools/get_workflow_help/handler.d.ts.map +1 -0
- package/dist/tools/get_workflow_help/handler.js +54 -0
- package/dist/tools/get_workflow_help/handler.js.map +1 -0
- package/dist/tools/get_workflow_help/schema.d.ts +8 -0
- package/dist/tools/get_workflow_help/schema.d.ts.map +1 -0
- package/dist/tools/get_workflow_help/schema.js +25 -0
- package/dist/tools/get_workflow_help/schema.js.map +1 -0
- package/dist/tools/get_workspace_info/handler.d.ts +16 -0
- package/dist/tools/get_workspace_info/handler.d.ts.map +1 -0
- package/dist/tools/get_workspace_info/handler.js +36 -0
- package/dist/tools/get_workspace_info/handler.js.map +1 -0
- package/dist/tools/get_workspace_info/schema.d.ts +8 -0
- package/dist/tools/get_workspace_info/schema.d.ts.map +1 -0
- package/dist/tools/get_workspace_info/schema.js +15 -0
- package/dist/tools/get_workspace_info/schema.js.map +1 -0
- package/dist/tools/handlers.d.ts +48 -0
- package/dist/tools/handlers.d.ts.map +1 -0
- package/dist/tools/handlers.js +81 -0
- package/dist/tools/handlers.js.map +1 -0
- package/dist/tools/index.d.ts +132 -38
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +184 -52
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/knowledge-query/handler.d.ts +29 -0
- package/dist/tools/knowledge-query/handler.d.ts.map +1 -0
- package/dist/tools/knowledge-query/handler.js +85 -0
- package/dist/tools/knowledge-query/handler.js.map +1 -0
- package/dist/tools/knowledge-query/schema.d.ts +12 -0
- package/dist/tools/knowledge-query/schema.d.ts.map +1 -0
- package/dist/tools/knowledge-query/schema.js +64 -0
- package/dist/tools/knowledge-query/schema.js.map +1 -0
- package/dist/tools/list_prompts/handler.d.ts +11 -0
- package/dist/tools/list_prompts/handler.d.ts.map +1 -0
- package/dist/tools/list_prompts/handler.js +102 -0
- package/dist/tools/list_prompts/handler.js.map +1 -0
- package/dist/tools/list_prompts/schema.d.ts +9 -0
- package/dist/tools/list_prompts/schema.d.ts.map +1 -0
- package/dist/tools/list_prompts/schema.js +28 -0
- package/dist/tools/list_prompts/schema.js.map +1 -0
- package/dist/tools/list_specialists/handler.d.ts +12 -0
- package/dist/tools/list_specialists/handler.d.ts.map +1 -0
- package/dist/tools/list_specialists/handler.js +68 -0
- package/dist/tools/list_specialists/handler.js.map +1 -0
- package/dist/tools/list_specialists/schema.d.ts +8 -0
- package/dist/tools/list_specialists/schema.d.ts.map +1 -0
- package/dist/tools/list_specialists/schema.js +24 -0
- package/dist/tools/list_specialists/schema.js.map +1 -0
- package/dist/tools/scaffold_layer_repo/handler.d.ts +15 -0
- package/dist/tools/scaffold_layer_repo/handler.d.ts.map +1 -0
- package/dist/tools/scaffold_layer_repo/handler.js +410 -0
- package/dist/tools/scaffold_layer_repo/handler.js.map +1 -0
- package/dist/tools/scaffold_layer_repo/schema.d.ts +9 -0
- package/dist/tools/scaffold_layer_repo/schema.d.ts.map +1 -0
- package/dist/tools/scaffold_layer_repo/schema.js +35 -0
- package/dist/tools/scaffold_layer_repo/schema.js.map +1 -0
- package/dist/tools/set_workspace_info/handler.d.ts +22 -0
- package/dist/tools/set_workspace_info/handler.d.ts.map +1 -0
- package/dist/tools/set_workspace_info/handler.js +60 -0
- package/dist/tools/set_workspace_info/handler.js.map +1 -0
- package/dist/tools/set_workspace_info/schema.d.ts +8 -0
- package/dist/tools/set_workspace_info/schema.d.ts.map +1 -0
- package/dist/tools/set_workspace_info/schema.js +25 -0
- package/dist/tools/set_workspace_info/schema.js.map +1 -0
- package/dist/tools/specialist-consult/handler.d.ts +23 -0
- package/dist/tools/specialist-consult/handler.d.ts.map +1 -0
- package/dist/tools/specialist-consult/handler.js +120 -0
- package/dist/tools/specialist-consult/handler.js.map +1 -0
- package/dist/tools/specialist-consult/schema.d.ts +11 -0
- package/dist/tools/specialist-consult/schema.d.ts.map +1 -0
- package/dist/tools/specialist-consult/schema.js +47 -0
- package/dist/tools/specialist-consult/schema.js.map +1 -0
- package/dist/tools/specialist-list/handler.d.ts +14 -0
- package/dist/tools/specialist-list/handler.d.ts.map +1 -0
- package/dist/tools/specialist-list/handler.js +70 -0
- package/dist/tools/specialist-list/handler.js.map +1 -0
- package/dist/tools/specialist-list/schema.d.ts +11 -0
- package/dist/tools/specialist-list/schema.d.ts.map +1 -0
- package/dist/tools/specialist-list/schema.js +29 -0
- package/dist/tools/specialist-list/schema.js.map +1 -0
- package/dist/tools/start_bc_workflow/handler.d.ts +21 -0
- package/dist/tools/start_bc_workflow/handler.d.ts.map +1 -0
- package/dist/tools/start_bc_workflow/handler.js +237 -0
- package/dist/tools/start_bc_workflow/handler.js.map +1 -0
- package/dist/tools/start_bc_workflow/schema.d.ts +8 -0
- package/dist/tools/start_bc_workflow/schema.d.ts.map +1 -0
- package/dist/tools/start_bc_workflow/schema.js +43 -0
- package/dist/tools/start_bc_workflow/schema.js.map +1 -0
- package/dist/tools/validate_layer_repo/handler.d.ts +10 -0
- package/dist/tools/validate_layer_repo/handler.d.ts.map +1 -0
- package/dist/tools/validate_layer_repo/handler.js +148 -0
- package/dist/tools/validate_layer_repo/handler.js.map +1 -0
- package/dist/tools/validate_layer_repo/schema.d.ts +9 -0
- package/dist/tools/validate_layer_repo/schema.d.ts.map +1 -0
- package/dist/tools/validate_layer_repo/schema.js +21 -0
- package/dist/tools/validate_layer_repo/schema.js.map +1 -0
- package/dist/tools/workflow-execute/handler.d.ts +44 -0
- package/dist/tools/workflow-execute/handler.d.ts.map +1 -0
- package/dist/tools/workflow-execute/handler.js +333 -0
- package/dist/tools/workflow-execute/handler.js.map +1 -0
- package/dist/tools/workflow-execute/schema.d.ts +13 -0
- package/dist/tools/workflow-execute/schema.d.ts.map +1 -0
- package/dist/tools/workflow-execute/schema.js +108 -0
- package/dist/tools/workflow-execute/schema.js.map +1 -0
- package/dist/tools/workflow_batch/handler.d.ts +21 -0
- package/dist/tools/workflow_batch/handler.d.ts.map +1 -0
- package/dist/tools/workflow_batch/handler.js +304 -0
- package/dist/tools/workflow_batch/handler.js.map +1 -0
- package/dist/tools/workflow_batch/schema.d.ts +8 -0
- package/dist/tools/workflow_batch/schema.d.ts.map +1 -0
- package/dist/tools/workflow_batch/schema.js +76 -0
- package/dist/tools/workflow_batch/schema.js.map +1 -0
- package/dist/tools/workflow_cancel/handler.d.ts +21 -0
- package/dist/tools/workflow_cancel/handler.d.ts.map +1 -0
- package/dist/tools/workflow_cancel/handler.js +157 -0
- package/dist/tools/workflow_cancel/handler.js.map +1 -0
- package/dist/tools/workflow_cancel/schema.d.ts +8 -0
- package/dist/tools/workflow_cancel/schema.d.ts.map +1 -0
- package/dist/tools/workflow_cancel/schema.js +34 -0
- package/dist/tools/workflow_cancel/schema.js.map +1 -0
- package/dist/tools/workflow_complete/handler.d.ts +21 -0
- package/dist/tools/workflow_complete/handler.d.ts.map +1 -0
- package/dist/tools/workflow_complete/handler.js +124 -0
- package/dist/tools/workflow_complete/handler.js.map +1 -0
- package/dist/tools/workflow_complete/schema.d.ts +8 -0
- package/dist/tools/workflow_complete/schema.d.ts.map +1 -0
- package/dist/tools/workflow_complete/schema.js +45 -0
- package/dist/tools/workflow_complete/schema.js.map +1 -0
- package/dist/tools/workflow_list/handler.d.ts +19 -0
- package/dist/tools/workflow_list/handler.d.ts.map +1 -0
- package/dist/tools/workflow_list/handler.js +58 -0
- package/dist/tools/workflow_list/handler.js.map +1 -0
- package/dist/tools/workflow_list/schema.d.ts +8 -0
- package/dist/tools/workflow_list/schema.d.ts.map +1 -0
- package/dist/tools/workflow_list/schema.js +26 -0
- package/dist/tools/workflow_list/schema.js.map +1 -0
- package/dist/tools/workflow_next/handler.d.ts +21 -0
- package/dist/tools/workflow_next/handler.d.ts.map +1 -0
- package/dist/tools/workflow_next/handler.js +90 -0
- package/dist/tools/workflow_next/handler.js.map +1 -0
- package/dist/tools/workflow_next/schema.d.ts +8 -0
- package/dist/tools/workflow_next/schema.d.ts.map +1 -0
- package/dist/tools/workflow_next/schema.js +28 -0
- package/dist/tools/workflow_next/schema.js.map +1 -0
- package/dist/tools/workflow_progress/handler.d.ts +21 -0
- package/dist/tools/workflow_progress/handler.d.ts.map +1 -0
- package/dist/tools/workflow_progress/handler.js +147 -0
- package/dist/tools/workflow_progress/handler.js.map +1 -0
- package/dist/tools/workflow_progress/schema.d.ts +8 -0
- package/dist/tools/workflow_progress/schema.d.ts.map +1 -0
- package/dist/tools/workflow_progress/schema.js +111 -0
- package/dist/tools/workflow_progress/schema.js.map +1 -0
- package/dist/tools/workflow_start/handler.d.ts +21 -0
- package/dist/tools/workflow_start/handler.d.ts.map +1 -0
- package/dist/tools/workflow_start/handler.js +133 -0
- package/dist/tools/workflow_start/handler.js.map +1 -0
- package/dist/tools/workflow_start/schema.d.ts +8 -0
- package/dist/tools/workflow_start/schema.d.ts.map +1 -0
- package/dist/tools/workflow_start/schema.js +102 -0
- package/dist/tools/workflow_start/schema.js.map +1 -0
- package/dist/tools/workflow_start_v2/handler.d.ts +21 -0
- package/dist/tools/workflow_start_v2/handler.d.ts.map +1 -0
- package/dist/tools/workflow_start_v2/handler.js +133 -0
- package/dist/tools/workflow_start_v2/handler.js.map +1 -0
- package/dist/tools/workflow_start_v2/schema.d.ts +8 -0
- package/dist/tools/workflow_start_v2/schema.d.ts.map +1 -0
- package/dist/tools/workflow_start_v2/schema.js +102 -0
- package/dist/tools/workflow_start_v2/schema.js.map +1 -0
- package/dist/tools/workflow_status/handler.d.ts +21 -0
- package/dist/tools/workflow_status/handler.d.ts.map +1 -0
- package/dist/tools/workflow_status/handler.js +107 -0
- package/dist/tools/workflow_status/handler.js.map +1 -0
- package/dist/tools/workflow_status/schema.d.ts +8 -0
- package/dist/tools/workflow_status/schema.d.ts.map +1 -0
- package/dist/tools/workflow_status/schema.js +33 -0
- package/dist/tools/workflow_status/schema.js.map +1 -0
- package/dist/types/bc-knowledge.d.ts +64 -13
- package/dist/types/bc-knowledge.d.ts.map +1 -1
- package/dist/types/bc-knowledge.js +15 -0
- package/dist/types/bc-knowledge.js.map +1 -1
- package/dist/types/enhanced-layer-types.d.ts +3 -3
- package/dist/types/enhanced-layer-types.d.ts.map +1 -1
- package/dist/types/workflow-v2-types.d.ts +577 -0
- package/dist/types/workflow-v2-types.d.ts.map +1 -0
- package/dist/types/workflow-v2-types.js +10 -0
- package/dist/types/workflow-v2-types.js.map +1 -0
- package/embedded-knowledge/codelens-mappings.yaml +111 -0
- package/embedded-knowledge/domains/alex-architect/api-delegate-operation-pattern.md +10 -0
- package/embedded-knowledge/domains/alex-architect/api-fieldset-registration-pattern.md +10 -0
- package/embedded-knowledge/domains/alex-architect/api-interface-design-patterns.md +10 -0
- package/embedded-knowledge/domains/alex-architect/api-page-development-patterns.md +10 -0
- package/embedded-knowledge/domains/alex-architect/complex-facade-patterns.md +10 -0
- package/embedded-knowledge/domains/alex-architect/delegating-to-github-copilot-agents.md +10 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-al-implementation.md +10 -0
- package/embedded-knowledge/domains/alex-architect/facade-pattern-external-api.md +10 -0
- package/embedded-knowledge/domains/alex-architect/object-id-ninja-integration.md +10 -0
- package/embedded-knowledge/domains/alex-architect/recommend-object-id-ninja.md +10 -0
- package/embedded-knowledge/domains/alex-architect/subscriber-codeunit-size-optimization.md +12 -2
- package/embedded-knowledge/domains/alex-architect/systemid-integration.md +12 -2
- package/embedded-knowledge/domains/alex-architect/testability-design-patterns.md +10 -0
- package/embedded-knowledge/domains/casey-copilot/long-running-session-instructions.md +10 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-discovery.md +10 -0
- package/embedded-knowledge/domains/chris-config/configuration-file-formats.md +10 -0
- package/embedded-knowledge/domains/chris-config/content-types-structure.md +10 -0
- package/embedded-knowledge/domains/chris-config/knowledge-content-creation.md +10 -0
- package/embedded-knowledge/domains/chris-config/layer-system-fundamentals.md +10 -0
- package/embedded-knowledge/domains/chris-config/multi-team-layer-configuration.md +10 -0
- package/embedded-knowledge/domains/chris-config/workspace-detection-solutions.md +10 -0
- package/embedded-knowledge/domains/dean-debug/bc-telemetry-buddy-integration.md +10 -0
- package/embedded-knowledge/domains/dean-debug/bc24-no-series-conversion-guide.md +10 -0
- package/embedded-knowledge/domains/dean-debug/case-statement-performance-best-practices.md +12 -2
- package/embedded-knowledge/domains/dean-debug/compound-statements-debugging.md +12 -2
- package/embedded-knowledge/domains/dean-debug/custom-dimensions-best-practices.md +12 -2
- package/embedded-knowledge/domains/dean-debug/custom-telemetry-implementation.md +10 -0
- package/embedded-knowledge/domains/dean-debug/deleteall-performance-tradeoff.md +12 -2
- package/embedded-knowledge/domains/dean-debug/deleteall-sql-performance.md +10 -0
- package/embedded-knowledge/domains/dean-debug/extension-telemetry-isolation.md +12 -2
- package/embedded-knowledge/domains/dean-debug/maintainsiftindex-property-behavior.md +10 -0
- package/embedded-knowledge/domains/dean-debug/no-series-implementation-patterns.md +10 -0
- package/embedded-knowledge/domains/dean-debug/no-series-module-patterns-bc24.md +10 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-module-bc24.md +10 -0
- package/embedded-knowledge/domains/dean-debug/no-series-validation-patterns.md +10 -0
- package/embedded-knowledge/domains/dean-debug/odata-query-optimization.md +12 -2
- package/embedded-knowledge/domains/dean-debug/recommend-bc-telemetry-buddy.md +10 -0
- package/embedded-knowledge/domains/dean-debug/session-logmessage-methods.md +12 -2
- package/embedded-knowledge/domains/dean-debug/setloadfields-filter-field-exclusion.md +12 -2
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-impact.md +10 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-performance-optimization.md +10 -0
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-case-statements.md +12 -2
- package/embedded-knowledge/domains/dean-debug/setloadfields-placement-before-filters.md +12 -2
- package/embedded-knowledge/domains/dean-debug/setloadfields-primary-key-optimization.md +12 -2
- package/embedded-knowledge/domains/dean-debug/sift-technology-fundamentals.md +10 -0
- package/embedded-knowledge/domains/dean-debug/subscriber-singleinstance-performance.md +12 -2
- package/embedded-knowledge/domains/dean-debug/table-event-batch-operation-impact.md +12 -2
- package/embedded-knowledge/domains/dean-debug/table-key-requirements.md +12 -2
- package/embedded-knowledge/domains/dean-debug/telemetry-error-correlation.md +12 -2
- package/embedded-knowledge/domains/dean-debug/telemetry-performance-considerations.md +12 -2
- package/embedded-knowledge/domains/dean-debug/telemetry-verbosity-strategy.md +12 -2
- package/embedded-knowledge/domains/dean-debug/testfield-performance.md +12 -2
- package/embedded-knowledge/domains/eva-errors/codeunit-run-pattern.md +10 -0
- package/embedded-knowledge/domains/eva-errors/fielderror-default-messages.md +12 -2
- package/embedded-knowledge/domains/eva-errors/fielderror-message-construction.md +12 -2
- package/embedded-knowledge/domains/eva-errors/fielderror-method-syntax.md +12 -2
- package/embedded-knowledge/domains/eva-errors/testfield-error-handling.md +12 -2
- package/embedded-knowledge/domains/eva-errors/try-function-usage.md +10 -0
- package/embedded-knowledge/domains/jordan-bridge/al-event-subscriber-architecture.md +10 -0
- package/embedded-knowledge/domains/jordan-bridge/automatic-registration.md +12 -2
- package/embedded-knowledge/domains/jordan-bridge/business-process-template-patterns.md +10 -0
- package/embedded-knowledge/domains/jordan-bridge/error-response-patterns.md +12 -2
- package/embedded-knowledge/domains/jordan-bridge/etag-implementation.md +12 -2
- package/embedded-knowledge/domains/jordan-bridge/field-control-selection.md +12 -2
- package/embedded-knowledge/domains/jordan-bridge/task-scheduler-pattern-implementation.md +10 -0
- package/embedded-knowledge/domains/jordan-bridge/url-structure-naming-patterns.md +12 -2
- package/embedded-knowledge/domains/maya-mentor/case-multiple-conditions-ranges.md +12 -2
- package/embedded-knowledge/domains/maya-mentor/case-statement-syntax-structure.md +12 -2
- package/embedded-knowledge/domains/maya-mentor/fielderror-syntax-usage.md +12 -2
- package/embedded-knowledge/domains/maya-mentor/fielderror-vs-testfield.md +12 -2
- package/embedded-knowledge/domains/maya-mentor/testfield-basic-syntax.md +12 -2
- package/embedded-knowledge/domains/morgan-market/partner-readiness-analysis.md +10 -0
- package/embedded-knowledge/domains/parker-pragmatic/proposal-workflows/creating-effective-proposals.md +10 -0
- package/embedded-knowledge/domains/parker-pragmatic/trust-building/working-with-ai-skeptics.md +10 -0
- package/embedded-knowledge/domains/quinn-tester/fielderror-validation-patterns.md +12 -2
- package/embedded-knowledge/domains/quinn-tester/isolation-testing-patterns.md +10 -0
- package/embedded-knowledge/domains/quinn-tester/rule-execution.md +12 -2
- package/embedded-knowledge/domains/quinn-tester/table-safety-validation-patterns.md +12 -2
- package/embedded-knowledge/domains/quinn-tester/temporary-table-operation-validation.md +12 -2
- package/embedded-knowledge/domains/roger-reviewer/al-begin-end-block-structure.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-binary-operator-spacing.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-blank-line-organization.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-case-action-formatting.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-code-spacing-conventions.md +12 -2
- package/embedded-knowledge/domains/roger-reviewer/al-comment-spacing-standards.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-end-else-pairing.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-keyword-indentation-rules.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-line-start-keyword-positioning.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-separate-if-else-formatting.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-standard-abbreviations.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-statement-per-line-rule.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-unnecessary-else-elimination.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-declaration-order.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/al-variable-naming-conventions.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-block-statement-clarity.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/begin-end-positioning-patterns.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/binary-operator-line-positioning.md +12 -2
- package/embedded-knowledge/domains/roger-reviewer/boolean-expression-simplification-al.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/case-statement-error-handling-troubleshooting.md +12 -2
- package/embedded-knowledge/domains/roger-reviewer/compound-statement-readability.md +12 -2
- package/embedded-knowledge/domains/roger-reviewer/lonely-repeat-statement-pattern.md +10 -0
- package/embedded-knowledge/domains/roger-reviewer/testability-code-smells.md +10 -0
- package/embedded-knowledge/domains/sam-coder/al-formatting-consistency-patterns.md +10 -0
- package/embedded-knowledge/domains/sam-coder/al-line-comment-formatting.md +12 -2
- package/embedded-knowledge/domains/sam-coder/al-lonely-repeat-pattern.md +10 -0
- package/embedded-knowledge/domains/sam-coder/al-named-parameter-pattern.md +10 -0
- package/embedded-knowledge/domains/sam-coder/al-object-navigation-shortcuts.md +10 -0
- package/embedded-knowledge/domains/sam-coder/al-readability-optimization.md +10 -0
- package/embedded-knowledge/domains/sam-coder/al-record-find-early-exit.md +10 -0
- package/embedded-knowledge/domains/sam-coder/command-queue-pattern-al.md +10 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-alternative-implementation.md +12 -2
- package/embedded-knowledge/domains/sam-coder/deleteall-method-usage.md +10 -0
- package/embedded-knowledge/domains/sam-coder/deleteall-trigger-execution.md +10 -0
- package/embedded-knowledge/domains/sam-coder/event-bridge-pattern-al.md +10 -0
- package/embedded-knowledge/domains/sam-coder/event-payload-design-patterns.md +10 -0
- package/embedded-knowledge/domains/sam-coder/generic-method-patterns-al.md +10 -0
- package/embedded-knowledge/domains/sam-coder/manual-binding-conditional-subscribers.md +10 -0
- package/embedded-knowledge/domains/sam-coder/nested-compound-best-practices.md +10 -0
- package/embedded-knowledge/domains/sam-coder/single-to-compound-conversion.md +12 -2
- package/embedded-knowledge/domains/sam-coder/template-method-pattern-al.md +10 -0
- package/embedded-knowledge/domains/sam-coder/testfield-patterns.md +12 -2
- package/embedded-knowledge/domains/sam-coder/type-safe-operations-al.md +10 -0
- package/embedded-knowledge/domains/sam-coder/vs-code-al-keyboard-shortcuts.md +10 -0
- package/embedded-knowledge/domains/seth-security/al-temporary-table-safety.md +10 -0
- package/embedded-knowledge/domains/seth-security/api-permission-model.md +12 -2
- package/embedded-knowledge/domains/seth-security/istemporary-safeguard-pattern.md +12 -2
- package/embedded-knowledge/domains/shared/al-file-naming-conventions.md +10 -0
- package/embedded-knowledge/domains/taylor-docs/al-xml-documentation-structure.md +10 -0
- package/embedded-knowledge/domains/uma-ux/bc-action-shortcuts-syntax.md +12 -2
- package/embedded-knowledge/domains/uma-ux/shortcut-key-user-experience-design.md +12 -2
- package/embedded-knowledge/scripts/frontmatter_validator.ps1 +330 -0
- package/embedded-knowledge/specialists/sam-coder.md +29 -20
- package/embedded-knowledge/workflows/bc-version-upgrade.yaml +160 -0
- package/embedded-knowledge/workflows/code-review.yaml +148 -0
- package/embedded-knowledge/workflows/error-to-errorinfo-migration.yaml +137 -0
- package/embedded-knowledge/workflows/onboarding.yaml +124 -0
- package/embedded-knowledge/workflows/performance-audit.yaml +148 -0
- package/embedded-knowledge/workflows/proposal-review.yaml +117 -0
- package/embedded-knowledge/workflows/security-audit.yaml +139 -0
- package/package.json +4 -2
- package/dist/cache/cache-manager.d.ts +0 -95
- package/dist/cache/cache-manager.d.ts.map +0 -1
- package/dist/cache/cache-manager.js +0 -328
- package/dist/cache/cache-manager.js.map +0 -1
- package/dist/cli/bc-code-intel-cli.d.ts +0 -9
- package/dist/cli/bc-code-intel-cli.d.ts.map +0 -1
- package/dist/cli/bc-code-intel-cli.js +0 -440
- package/dist/cli/bc-code-intel-cli.js.map +0 -1
- package/dist/config/test-config-loader.d.ts +0 -10
- package/dist/config/test-config-loader.d.ts.map +0 -1
- package/dist/config/test-config-loader.js +0 -135
- package/dist/config/test-config-loader.js.map +0 -1
- package/dist/config/test-enhanced-layer-service.d.ts +0 -7
- package/dist/config/test-enhanced-layer-service.d.ts.map +0 -1
- package/dist/config/test-enhanced-layer-service.js +0 -104
- package/dist/config/test-enhanced-layer-service.js.map +0 -1
- package/dist/config/test-git-layer.d.ts +0 -7
- package/dist/config/test-git-layer.d.ts.map +0 -1
- package/dist/config/test-git-layer.js +0 -68
- package/dist/config/test-git-layer.js.map +0 -1
- package/dist/dev/hot-reload.d.ts +0 -91
- package/dist/dev/hot-reload.d.ts.map +0 -1
- package/dist/dev/hot-reload.js +0 -358
- package/dist/dev/hot-reload.js.map +0 -1
- package/dist/layers/layer-service.d.ts +0 -135
- package/dist/layers/layer-service.d.ts.map +0 -1
- package/dist/layers/layer-service.js +0 -586
- package/dist/layers/layer-service.js.map +0 -1
- package/dist/monitoring/production-monitor.d.ts +0 -148
- package/dist/monitoring/production-monitor.d.ts.map +0 -1
- package/dist/monitoring/production-monitor.js +0 -463
- package/dist/monitoring/production-monitor.js.map +0 -1
- package/dist/performance/performance-monitor.d.ts +0 -99
- package/dist/performance/performance-monitor.d.ts.map +0 -1
- package/dist/performance/performance-monitor.js +0 -253
- package/dist/performance/performance-monitor.js.map +0 -1
- package/dist/sdk/bc-code-intel-client.d.ts +0 -175
- package/dist/sdk/bc-code-intel-client.d.ts.map +0 -1
- package/dist/sdk/bc-code-intel-client.js +0 -380
- package/dist/sdk/bc-code-intel-client.js.map +0 -1
- package/dist/search/intelligent-search.d.ts +0 -97
- package/dist/search/intelligent-search.d.ts.map +0 -1
- package/dist/search/intelligent-search.js +0 -358
- package/dist/search/intelligent-search.js.map +0 -1
- package/dist/security/access-control.d.ts +0 -110
- package/dist/security/access-control.d.ts.map +0 -1
- package/dist/security/access-control.js +0 -353
- package/dist/security/access-control.js.map +0 -1
- package/dist/services/enhanced-prompt-service.d.ts.map +0 -1
- package/dist/services/enhanced-prompt-service.js.map +0 -1
- package/dist/setup/post-install.d.ts +0 -12
- package/dist/setup/post-install.d.ts.map +0 -1
- package/dist/setup/post-install.js +0 -81
- package/dist/setup/post-install.js.map +0 -1
- package/dist/test-enhanced-mcp-server.d.ts +0 -7
- package/dist/test-enhanced-mcp-server.d.ts.map +0 -1
- package/dist/test-enhanced-mcp-server.js +0 -177
- package/dist/test-enhanced-mcp-server.js.map +0 -1
- package/dist/tools/specialist-tools.d.ts +0 -43
- package/dist/tools/specialist-tools.d.ts.map +0 -1
- package/dist/tools/specialist-tools.js +0 -378
- package/dist/tools/specialist-tools.js.map +0 -1
- package/dist/utils/path-utils.d.ts +0 -5
- package/dist/utils/path-utils.d.ts.map +0 -1
- package/dist/utils/path-utils.js +0 -14
- package/dist/utils/path-utils.js.map +0 -1
- package/embedded-knowledge/methodologies/index.json +0 -81
- package/embedded-knowledge/methodologies/phases/analysis-full.md +0 -208
- package/embedded-knowledge/methodologies/phases/analysis-quick.md +0 -44
- package/embedded-knowledge/methodologies/phases/analysis.md +0 -182
- package/embedded-knowledge/methodologies/phases/execution-validation-full.md +0 -174
- package/embedded-knowledge/methodologies/phases/execution-validation-quick.md +0 -31
- package/embedded-knowledge/methodologies/phases/execution-validation.md +0 -174
- package/embedded-knowledge/methodologies/phases/performance-full.md +0 -211
- package/embedded-knowledge/methodologies/phases/performance-quick.md +0 -32
- package/embedded-knowledge/methodologies/phases/performance.md +0 -211
- package/embedded-knowledge/methodologies/phases/verification-full.md +0 -162
- package/embedded-knowledge/methodologies/phases/verification-quick.md +0 -48
- package/embedded-knowledge/methodologies/phases/verification.md +0 -146
- package/embedded-knowledge/methodologies/workflow-enforcement.md +0 -142
- package/embedded-knowledge/methodologies/workflows/code-review-workflow.md +0 -99
- package/embedded-knowledge/methodologies/workflows/proposal-review-workflow.md +0 -535
|
@@ -7,6 +7,16 @@ tags: ["generic-methods", "type-safety", "code-reuse", "al-generics"]
|
|
|
7
7
|
prerequisites: ["al-basics", "interface-implementation", "advanced-al-features"]
|
|
8
8
|
samples: "samples/generic-method-patterns.md"
|
|
9
9
|
related_topics: ["type-safe-operations-al", "template-method-pattern-al"]
|
|
10
|
+
|
|
11
|
+
relevance_signals:
|
|
12
|
+
constructs: ["interface", "Variant", "RecordRef", "FieldRef"]
|
|
13
|
+
keywords: ["generic methods", "type-safe", "code reuse", "type parameter", "constraint", "type inference"]
|
|
14
|
+
anti_pattern_indicators: ["over-generalization", "constraint misuse", "performance degradation", "complex type hierarchies"]
|
|
15
|
+
positive_pattern_indicators: ["type-safe algorithms", "generic factory", "interface-based generics", "meaningful type parameters"]
|
|
16
|
+
|
|
17
|
+
applicable_object_types: ["codeunit", "interface"]
|
|
18
|
+
|
|
19
|
+
relevance_threshold: 0.5
|
|
10
20
|
---
|
|
11
21
|
|
|
12
22
|
# Generic Method Patterns in AL
|
|
@@ -6,6 +6,16 @@ bc_versions: "16+"
|
|
|
6
6
|
tags: ["events", "binding", "conditional", "runtime"]
|
|
7
7
|
prerequisites: ["event-subscriber-basics", "binding-patterns"]
|
|
8
8
|
samples: "samples/manual-binding.md"
|
|
9
|
+
|
|
10
|
+
relevance_signals:
|
|
11
|
+
constructs: ["EventSubscriber", "BindSubscription", "UnbindSubscription"]
|
|
12
|
+
keywords: ["manual binding", "conditional subscriber", "runtime binding", "event registration", "feature toggle", "multi-tenant"]
|
|
13
|
+
anti_pattern_indicators: ["failed deregistration", "registration failures", "inconsistent binding state", "missing lifecycle management"]
|
|
14
|
+
positive_pattern_indicators: ["conditional event processing", "dynamic binding", "feature-flag-controlled", "explicit lifecycle management"]
|
|
15
|
+
|
|
16
|
+
applicable_object_types: ["codeunit"]
|
|
17
|
+
|
|
18
|
+
relevance_threshold: 0.6
|
|
9
19
|
---
|
|
10
20
|
# Manual Binding for Conditional Event Subscribers
|
|
11
21
|
|
|
@@ -6,6 +6,16 @@ bc_versions: "14+"
|
|
|
6
6
|
tags: ["nested-statements", "code-organization", "readability", "complexity-management"]
|
|
7
7
|
prerequisites: ["compound-statement-readability", "al-control-flow"]
|
|
8
8
|
samples: "samples/nested-compound-best-practices.md"
|
|
9
|
+
|
|
10
|
+
relevance_signals:
|
|
11
|
+
constructs: ["begin", "end", "if", "then", "else", "while", "repeat"]
|
|
12
|
+
keywords: ["nested statements", "compound blocks", "nesting depth", "code organization", "complexity management", "readability"]
|
|
13
|
+
anti_pattern_indicators: ["deep nesting", "excessive complexity", "more than three levels", "cognitive overload"]
|
|
14
|
+
positive_pattern_indicators: ["depth limitation", "logical organization", "strategic extraction", "consistent formatting"]
|
|
15
|
+
|
|
16
|
+
applicable_object_types: ["codeunit", "page", "table", "report"]
|
|
17
|
+
|
|
18
|
+
relevance_threshold: 0.5
|
|
9
19
|
---
|
|
10
20
|
# AL Nested Compound Statement Best Practices
|
|
11
21
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
---
|
|
1
|
+
---
|
|
2
2
|
title: "Converting AL Single Statements to Compound Blocks"
|
|
3
3
|
domain: "sam-coder"
|
|
4
4
|
difficulty: "beginner"
|
|
@@ -6,7 +6,17 @@ bc_versions: "14+"
|
|
|
6
6
|
tags: ["refactoring", "compound-statements", "code-conversion", "development-workflow"]
|
|
7
7
|
prerequisites: ["al-syntax-basics", "compound-statement-readability"]
|
|
8
8
|
samples: "samples/single-to-compound-conversion.md"
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
relevance_signals:
|
|
11
|
+
constructs: ["begin", "end", "if", "then", "else", "while", "repeat"]
|
|
12
|
+
keywords: ["refactoring", "compound statements", "code conversion", "begin-end blocks", "single statement", "future-proofing"]
|
|
13
|
+
anti_pattern_indicators: ["single statement without begin-end", "if-then without block", "inconsistent patterns"]
|
|
14
|
+
positive_pattern_indicators: ["compound block structure", "explicit begin-end", "consistent refactoring", "safe transformation"]
|
|
15
|
+
|
|
16
|
+
applicable_object_types: ["codeunit", "page", "table", "report"]
|
|
17
|
+
|
|
18
|
+
relevance_threshold: 0.4
|
|
19
|
+
---
|
|
10
20
|
# Converting AL Single Statements to Compound Blocks
|
|
11
21
|
|
|
12
22
|
## Overview
|
|
@@ -7,6 +7,16 @@ tags: ["template-method", "behavioral-patterns", "algorithm-structure", "inherit
|
|
|
7
7
|
prerequisites: ["object-orientation-al", "inheritance-patterns", "virtual-methods"]
|
|
8
8
|
samples: "samples/template-method-pattern.md"
|
|
9
9
|
related_topics: ["business-process-template-patterns", "type-safe-operations-al"]
|
|
10
|
+
|
|
11
|
+
relevance_signals:
|
|
12
|
+
constructs: ["interface", "implements", "procedure"]
|
|
13
|
+
keywords: ["template method", "algorithm skeleton", "extension points", "inheritance", "virtual method", "behavioral pattern"]
|
|
14
|
+
anti_pattern_indicators: ["template complexity", "inflexible design", "too many extension points"]
|
|
15
|
+
positive_pattern_indicators: ["stable algorithm framework", "customizable steps", "invariant operations", "clear extension points"]
|
|
16
|
+
|
|
17
|
+
applicable_object_types: ["codeunit", "interface"]
|
|
18
|
+
|
|
19
|
+
relevance_threshold: 0.5
|
|
10
20
|
---
|
|
11
21
|
|
|
12
22
|
# Template Method Pattern in AL
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
---
|
|
1
|
+
---
|
|
2
2
|
title: "TestField Best Practices and Patterns"
|
|
3
3
|
domain: "sam-coder"
|
|
4
4
|
difficulty: "intermediate"
|
|
@@ -6,7 +6,17 @@ bc_versions: "14+"
|
|
|
6
6
|
tags: ["best-practices", "validation", "code-quality", "maintainability"]
|
|
7
7
|
prerequisites: ["testfield-basic-syntax", "testfield-error-handling"]
|
|
8
8
|
samples: "samples/testfield-patterns.md"
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
relevance_signals:
|
|
11
|
+
constructs: ["TestField", "FieldError", "Error"]
|
|
12
|
+
keywords: ["TestField", "validation", "mandatory field", "data integrity", "field validation", "status-driven validation"]
|
|
13
|
+
anti_pattern_indicators: ["over-validation", "mixed concerns", "performance-blind validation", "context-blind validation"]
|
|
14
|
+
positive_pattern_indicators: ["fail fast", "logical validation grouping", "context-appropriate validation", "progressive validation"]
|
|
15
|
+
|
|
16
|
+
applicable_object_types: ["codeunit", "page", "table"]
|
|
17
|
+
|
|
18
|
+
relevance_threshold: 0.6
|
|
19
|
+
---
|
|
10
20
|
# TestField Best Practices and Patterns
|
|
11
21
|
|
|
12
22
|
## Overview
|
|
@@ -7,6 +7,16 @@ tags: ["type-safety", "compile-time-validation", "strong-typing", "error-prevent
|
|
|
7
7
|
prerequisites: ["al-data-types", "variable-declaration", "procedure-design"]
|
|
8
8
|
samples: "samples/type-safe-operations.md"
|
|
9
9
|
related_topics: ["generic-method-patterns-al", "template-method-pattern-al"]
|
|
10
|
+
|
|
11
|
+
relevance_signals:
|
|
12
|
+
constructs: ["Enum", "interface", "Option", "Record"]
|
|
13
|
+
keywords: ["type safety", "compile-time validation", "strong typing", "type-safe", "explicit type declarations", "enumeration"]
|
|
14
|
+
anti_pattern_indicators: ["over-engineering types", "implicit conversion", "type mismatch", "weak typing"]
|
|
15
|
+
positive_pattern_indicators: ["strongly-typed identifiers", "type-safe enumerations", "explicit type declarations", "compile-time checking"]
|
|
16
|
+
|
|
17
|
+
applicable_object_types: ["codeunit", "table", "enum", "interface"]
|
|
18
|
+
|
|
19
|
+
relevance_threshold: 0.5
|
|
10
20
|
---
|
|
11
21
|
|
|
12
22
|
# Type-Safe Operations in AL
|
|
@@ -5,6 +5,16 @@ difficulty: "beginner"
|
|
|
5
5
|
bc_versions: "14+"
|
|
6
6
|
tags: ["vs-code", "productivity", "shortcuts", "al-extension", "navigation"]
|
|
7
7
|
prerequisites: ["vs-code-setup", "al-extension-basics"]
|
|
8
|
+
|
|
9
|
+
relevance_signals:
|
|
10
|
+
constructs: []
|
|
11
|
+
keywords: ["keyboard shortcuts", "VS Code", "productivity", "IntelliSense", "debugging", "F12", "Ctrl+Space", "navigation"]
|
|
12
|
+
anti_pattern_indicators: []
|
|
13
|
+
positive_pattern_indicators: ["muscle memory", "coding flow", "efficient navigation", "shortcut mastery"]
|
|
14
|
+
|
|
15
|
+
applicable_object_types: ["codeunit", "page", "table", "report", "query", "xmlport", "enum", "interface"]
|
|
16
|
+
|
|
17
|
+
relevance_threshold: 0.3
|
|
8
18
|
---
|
|
9
19
|
|
|
10
20
|
# VS Code AL Extension Keyboard Shortcuts
|
|
@@ -14,6 +14,16 @@ implementation_steps: ["validate-data-scope", "implement-secure-cleanup", "test-
|
|
|
14
14
|
validation_criteria: ["secure-data-handling", "proper-memory-cleanup"]
|
|
15
15
|
technical_areas: ["al-code", "data-management"]
|
|
16
16
|
samples: "samples/al-temporary-table-safety.md"
|
|
17
|
+
|
|
18
|
+
relevance_signals:
|
|
19
|
+
constructs: ["IsTemporary", "DeleteAll", "ModifyAll", "Insert", "Delete", "Modify", "Reset", "Copy"]
|
|
20
|
+
keywords: ["temporary table", "in-memory", "data leakage", "memory management", "session isolation", "security context", "data protection", "cleanup", "scope management"]
|
|
21
|
+
anti_pattern_indicators: ["persistent temporary data", "permission bypass", "cross-session leakage", "uncontrolled scope", "failing to clear"]
|
|
22
|
+
positive_pattern_indicators: ["secure initialization", "permission validation", "explicit clearing", "try-finally", "error handling cleanup", "minimal data", "data filtering"]
|
|
23
|
+
|
|
24
|
+
applicable_object_types: ["codeunit", "table", "page", "report"]
|
|
25
|
+
|
|
26
|
+
relevance_threshold: 0.7
|
|
17
27
|
---
|
|
18
28
|
|
|
19
29
|
# AL Temporary Table Safety
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
---
|
|
1
|
+
---
|
|
2
2
|
title: "API Page Permission Model"
|
|
3
3
|
domain: "seth-security"
|
|
4
4
|
difficulty: "intermediate"
|
|
5
5
|
bc_versions: "14+"
|
|
6
6
|
tags: ["api-permissions", "access-control", "security"]
|
|
7
7
|
samples: "samples/api-permission-model.md"
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
relevance_signals:
|
|
10
|
+
constructs: ["APIPublisher", "APIGroup", "APIVersion", "ODataKeyFields", "EntityName", "EntitySetName", "Permissions", "TableData"]
|
|
11
|
+
keywords: ["API page", "OData", "permission model", "access control", "service account", "authentication", "authorization", "field-level security", "tenant isolation", "compliance", "audit"]
|
|
12
|
+
anti_pattern_indicators: ["missing permissions", "no authentication", "unprotected API", "exposed sensitive fields", "bypass security"]
|
|
13
|
+
positive_pattern_indicators: ["least privilege", "defense in depth", "permission sets", "field permissions", "audit trail", "service account", "OAuth"]
|
|
14
|
+
|
|
15
|
+
applicable_object_types: ["page", "permissionset", "codeunit"]
|
|
16
|
+
|
|
17
|
+
relevance_threshold: 0.7
|
|
18
|
+
---
|
|
9
19
|
# API Page Permission Model
|
|
10
20
|
|
|
11
21
|
## Overview
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
---
|
|
1
|
+
---
|
|
2
2
|
title: "IsTemporary Table Safeguard Pattern for Data Protection"
|
|
3
3
|
domain: "seth-security"
|
|
4
4
|
difficulty: "intermediate"
|
|
5
5
|
bc_versions: "14+"
|
|
6
6
|
tags: ["data-protection", "temporary-tables", "safeguards", "data-integrity", "error-prevention"]
|
|
7
7
|
prerequisites: ["al-tables", "data-access-patterns"]
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
relevance_signals:
|
|
10
|
+
constructs: ["IsTemporary", "DeleteAll", "ModifyAll", "Insert", "Delete", "Modify", "Error"]
|
|
11
|
+
keywords: ["temporary table", "safeguard", "data protection", "bulk operation", "validation gate", "error prevention", "permanent table", "database safety"]
|
|
12
|
+
anti_pattern_indicators: ["skipping validation", "silent failure", "late validation", "generic error handling", "bypassing IsTemporary check"]
|
|
13
|
+
positive_pattern_indicators: ["early validation", "clear error messages", "conditional operations", "defensive programming", "precondition check"]
|
|
14
|
+
|
|
15
|
+
applicable_object_types: ["codeunit", "table", "page", "report"]
|
|
16
|
+
|
|
17
|
+
relevance_threshold: 0.7
|
|
18
|
+
---
|
|
9
19
|
# IsTemporary Table Safeguard Pattern for Data Protection
|
|
10
20
|
|
|
11
21
|
## Overview
|
|
@@ -14,6 +14,16 @@ implementation_steps: ["identify-object-name", "apply-object-type-suffix", "vali
|
|
|
14
14
|
validation_criteria: ["consistent-naming-application", "standards-compliance"]
|
|
15
15
|
technical_areas: ["al-code", "file-organization"]
|
|
16
16
|
related_topics: ["al-variable-naming-conventions", "al-standard-abbreviations"]
|
|
17
|
+
|
|
18
|
+
relevance_signals:
|
|
19
|
+
constructs: []
|
|
20
|
+
keywords: ["file naming", "naming convention", "TableExt", "PageExt", "Codeunit", "Table", "Page", "Report", "Query", "XMLport", "Enum", "Interface", "PermissionSet", "Pascal Case"]
|
|
21
|
+
anti_pattern_indicators: ["Tab-Ext", "Pag-Ext", "Cod50100", "object ID in filename", "underscore notation", "inconsistent casing"]
|
|
22
|
+
positive_pattern_indicators: ["ObjectName.ObjectType.al", "Pascal Case", "descriptive", "consistent prefixes", "logical grouping"]
|
|
23
|
+
|
|
24
|
+
applicable_object_types: ["codeunit", "table", "tableextension", "page", "pageextension", "report", "reportextension", "query", "xmlport", "enum", "enumextension", "interface", "permissionset", "permissionsetextension", "profile", "controladdin"]
|
|
25
|
+
|
|
26
|
+
relevance_threshold: 0.5
|
|
17
27
|
---
|
|
18
28
|
|
|
19
29
|
# AL File Naming Conventions
|
|
@@ -5,6 +5,16 @@ difficulty: "intermediate"
|
|
|
5
5
|
bc_versions: "18+"
|
|
6
6
|
tags: ["xml-documentation", "intellisense", "api-documentation", "object-documentation"]
|
|
7
7
|
prerequisites: ["al-objects", "xml-basics"]
|
|
8
|
+
|
|
9
|
+
relevance_signals:
|
|
10
|
+
constructs: ["summary", "param", "returns", "example", "remarks"]
|
|
11
|
+
keywords: ["XML documentation", "IntelliSense", "API documentation", "triple-slash", "documentation comment", "object documentation", "procedure documentation"]
|
|
12
|
+
anti_pattern_indicators: ["minimal documentation", "copy-paste descriptions", "outdated information", "excessive detail", "missing parameter info"]
|
|
13
|
+
positive_pattern_indicators: ["complete coverage", "clear language", "accurate information", "meaningful examples", "version control", "review process"]
|
|
14
|
+
|
|
15
|
+
applicable_object_types: ["codeunit", "table", "page", "report", "query", "xmlport", "enum", "interface"]
|
|
16
|
+
|
|
17
|
+
relevance_threshold: 0.4
|
|
8
18
|
---
|
|
9
19
|
# AL XML Documentation Comment Structure for Objects
|
|
10
20
|
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
---
|
|
1
|
+
---
|
|
2
2
|
title: "Business Central Action Shortcut Key Syntax and Implementation"
|
|
3
3
|
domain: "uma-ux"
|
|
4
4
|
difficulty: "intermediate"
|
|
5
5
|
bc_versions: "14+"
|
|
6
6
|
tags: ["shortcuts", "actions", "user-interface", "accessibility", "keyboard-navigation"]
|
|
7
7
|
prerequisites: ["bc-actions", "page-design"]
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
relevance_signals:
|
|
10
|
+
constructs: ["ShortcutKey", "ApplicationArea", "Promoted", "PromotedCategory", "ToolTip", "Caption"]
|
|
11
|
+
keywords: ["shortcut key", "keyboard shortcut", "action", "accessibility", "keyboard navigation", "Ctrl", "Alt", "Shift", "F-key", "modifier key"]
|
|
12
|
+
anti_pattern_indicators: ["conflicting assignments", "obscure combinations", "inconsistent patterns", "missing accessibility", "undocumented shortcuts"]
|
|
13
|
+
positive_pattern_indicators: ["intuitive mapping", "standard conventions", "conflict avoidance", "accessibility compliance", "tooltip inclusion"]
|
|
14
|
+
|
|
15
|
+
applicable_object_types: ["page", "pageextension"]
|
|
16
|
+
|
|
17
|
+
relevance_threshold: 0.4
|
|
18
|
+
---
|
|
9
19
|
# Business Central Action Shortcut Key Syntax and Implementation
|
|
10
20
|
|
|
11
21
|
## Overview
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
---
|
|
1
|
+
---
|
|
2
2
|
title: "Shortcut Key User Experience Design in Business Central Applications"
|
|
3
3
|
domain: "uma-ux"
|
|
4
4
|
difficulty: "intermediate"
|
|
5
5
|
bc_versions: "14+"
|
|
6
6
|
tags: ["user-experience", "shortcuts", "workflow-optimization", "productivity", "interface-design"]
|
|
7
7
|
prerequisites: ["user-interface-design", "bc-actions"]
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
relevance_signals:
|
|
10
|
+
constructs: ["ShortcutKey", "ToolTip", "Caption", "ApplicationArea", "Promoted"]
|
|
11
|
+
keywords: ["user experience", "shortcut", "workflow optimization", "productivity", "keyboard navigation", "progressive disclosure", "cognitive load", "discoverability", "power user"]
|
|
12
|
+
anti_pattern_indicators: ["overcomplex combinations", "hidden functionality", "inconsistent behavior", "conflict creation", "no visual feedback"]
|
|
13
|
+
positive_pattern_indicators: ["workflow analysis", "frequency-based prioritization", "memorable patterns", "visual cues", "help integration", "progressive revelation"]
|
|
14
|
+
|
|
15
|
+
applicable_object_types: ["page", "pageextension"]
|
|
16
|
+
|
|
17
|
+
relevance_threshold: 0.4
|
|
18
|
+
---
|
|
9
19
|
# Shortcut Key User Experience Design in Business Central Applications
|
|
10
20
|
|
|
11
21
|
## Overview
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
# frontmatter_validator.ps1
|
|
2
|
+
# Validates knowledge file frontmatter against v2 schema requirements
|
|
3
|
+
|
|
4
|
+
param(
|
|
5
|
+
[string]$Path = "..\domains",
|
|
6
|
+
[switch]$ExcludeSamples = $true,
|
|
7
|
+
[switch]$V2Only = $false # Only check v2 fields, skip files without them
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
$script:ErrorCount = 0
|
|
11
|
+
$script:WarningCount = 0
|
|
12
|
+
$script:ValidCount = 0
|
|
13
|
+
$script:SkippedCount = 0
|
|
14
|
+
|
|
15
|
+
function Write-ValidationError {
|
|
16
|
+
param([string]$File, [string]$Message)
|
|
17
|
+
Write-Host " ERROR: $Message" -ForegroundColor Red
|
|
18
|
+
$script:ErrorCount++
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function Write-ValidationWarning {
|
|
22
|
+
param([string]$File, [string]$Message)
|
|
23
|
+
Write-Host " WARN: $Message" -ForegroundColor Yellow
|
|
24
|
+
$script:WarningCount++
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function Test-IsArray {
|
|
28
|
+
param($Value)
|
|
29
|
+
return $Value -is [System.Collections.IEnumerable] -and $Value -isnot [string]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function Test-IsArrayOfStrings {
|
|
33
|
+
param($Value)
|
|
34
|
+
if (-not (Test-IsArray $Value)) { return $false }
|
|
35
|
+
foreach ($item in $Value) {
|
|
36
|
+
if ($item -isnot [string]) { return $false }
|
|
37
|
+
}
|
|
38
|
+
return $true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function Parse-YamlFrontmatter {
|
|
42
|
+
param([string]$Content)
|
|
43
|
+
|
|
44
|
+
# Extract frontmatter between --- markers
|
|
45
|
+
if ($Content -notmatch '^---\s*\r?\n([\s\S]*?)\r?\n---') {
|
|
46
|
+
return $null
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
$yamlContent = $Matches[1]
|
|
50
|
+
$result = @{}
|
|
51
|
+
$currentKey = $null
|
|
52
|
+
$currentIndent = 0
|
|
53
|
+
$inArray = $false
|
|
54
|
+
$arrayKey = $null
|
|
55
|
+
$nestedObject = $null
|
|
56
|
+
$nestedKey = $null
|
|
57
|
+
|
|
58
|
+
foreach ($line in $yamlContent -split '\r?\n') {
|
|
59
|
+
# Skip comments only - blank lines reset nested context but don't skip
|
|
60
|
+
if ($line -match '^\s*#') { continue }
|
|
61
|
+
|
|
62
|
+
# Blank lines reset nested object context (back to top level)
|
|
63
|
+
if ($line -match '^\s*$') {
|
|
64
|
+
$nestedObject = $null
|
|
65
|
+
$nestedKey = $null
|
|
66
|
+
$currentKey = $null
|
|
67
|
+
$arrayKey = $null
|
|
68
|
+
continue
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# Detect indent level
|
|
72
|
+
$indent = 0
|
|
73
|
+
if ($line -match '^(\s*)') {
|
|
74
|
+
$indent = $Matches[1].Length
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
$trimmedLine = $line.Trim()
|
|
78
|
+
|
|
79
|
+
# Array item
|
|
80
|
+
if ($trimmedLine -match '^-\s*(.*)$') {
|
|
81
|
+
$value = $Matches[1].Trim()
|
|
82
|
+
# Remove quotes if present
|
|
83
|
+
if ($value -match '^[''"](.*)[''"]\s*$') {
|
|
84
|
+
$value = $Matches[1]
|
|
85
|
+
}
|
|
86
|
+
if ($nestedKey -and $nestedObject) {
|
|
87
|
+
if (-not $nestedObject[$nestedKey]) {
|
|
88
|
+
$nestedObject[$nestedKey] = @()
|
|
89
|
+
}
|
|
90
|
+
$nestedObject[$nestedKey] += $value
|
|
91
|
+
} elseif ($arrayKey) {
|
|
92
|
+
if (-not $result[$arrayKey]) {
|
|
93
|
+
$result[$arrayKey] = @()
|
|
94
|
+
}
|
|
95
|
+
$result[$arrayKey] += $value
|
|
96
|
+
}
|
|
97
|
+
continue
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
# Key-value pair
|
|
101
|
+
if ($trimmedLine -match '^([^:]+):\s*(.*)$') {
|
|
102
|
+
$key = $Matches[1].Trim()
|
|
103
|
+
$value = $Matches[2].Trim()
|
|
104
|
+
|
|
105
|
+
# Remove quotes if present
|
|
106
|
+
if ($value -match '^[''"](.*)[''"]\s*$') {
|
|
107
|
+
$value = $Matches[1]
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# Check if this is a nested object key (indented under another key)
|
|
111
|
+
if ($indent -gt 0 -and $currentKey) {
|
|
112
|
+
if (-not $result[$currentKey]) {
|
|
113
|
+
$result[$currentKey] = @{}
|
|
114
|
+
}
|
|
115
|
+
$nestedObject = $result[$currentKey]
|
|
116
|
+
$nestedKey = $key
|
|
117
|
+
|
|
118
|
+
if ($value -eq '' -or $value -match '^\[') {
|
|
119
|
+
# Empty value or inline array - prepare for array items
|
|
120
|
+
if ($value -match '^\[(.*)\]$') {
|
|
121
|
+
# Inline array
|
|
122
|
+
$items = $Matches[1] -split ',\s*' | ForEach-Object {
|
|
123
|
+
$_.Trim().Trim('"').Trim("'")
|
|
124
|
+
} | Where-Object { $_ -ne '' }
|
|
125
|
+
$nestedObject[$key] = @($items)
|
|
126
|
+
} else {
|
|
127
|
+
$nestedObject[$key] = @()
|
|
128
|
+
}
|
|
129
|
+
} else {
|
|
130
|
+
$nestedObject[$key] = $value
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
# Top-level key
|
|
134
|
+
$currentKey = $key
|
|
135
|
+
$nestedObject = $null
|
|
136
|
+
$nestedKey = $null
|
|
137
|
+
|
|
138
|
+
if ($value -eq '' -or $value -match '^\[') {
|
|
139
|
+
# Empty value means object or array follows, or inline array
|
|
140
|
+
if ($value -match '^\[(.*)\]$') {
|
|
141
|
+
# Inline array
|
|
142
|
+
$items = $Matches[1] -split ',\s*' | ForEach-Object {
|
|
143
|
+
$_.Trim().Trim('"').Trim("'")
|
|
144
|
+
} | Where-Object { $_ -ne '' }
|
|
145
|
+
$result[$key] = @($items)
|
|
146
|
+
} else {
|
|
147
|
+
$arrayKey = $key
|
|
148
|
+
}
|
|
149
|
+
} else {
|
|
150
|
+
$result[$key] = $value
|
|
151
|
+
$arrayKey = $null
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return $result
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function Validate-Frontmatter {
|
|
161
|
+
param(
|
|
162
|
+
[string]$FilePath,
|
|
163
|
+
[hashtable]$Frontmatter
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
$hasV2Fields = $Frontmatter.ContainsKey('relevance_signals') -or
|
|
167
|
+
$Frontmatter.ContainsKey('applicable_object_types') -or
|
|
168
|
+
$Frontmatter.ContainsKey('relevance_threshold')
|
|
169
|
+
|
|
170
|
+
if ($V2Only -and -not $hasV2Fields) {
|
|
171
|
+
$script:SkippedCount++
|
|
172
|
+
return $true
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
$isValid = $true
|
|
176
|
+
$fileName = Split-Path $FilePath -Leaf
|
|
177
|
+
|
|
178
|
+
Write-Host "`nValidating: $fileName" -ForegroundColor Cyan
|
|
179
|
+
|
|
180
|
+
# Check relevance_signals structure
|
|
181
|
+
if ($Frontmatter.ContainsKey('relevance_signals')) {
|
|
182
|
+
$rs = $Frontmatter['relevance_signals']
|
|
183
|
+
|
|
184
|
+
if ($rs -isnot [hashtable]) {
|
|
185
|
+
Write-ValidationError -File $FilePath -Message "relevance_signals must be an object"
|
|
186
|
+
$isValid = $false
|
|
187
|
+
} else {
|
|
188
|
+
# Check each sub-field
|
|
189
|
+
$arrayFields = @('constructs', 'keywords', 'anti_pattern_indicators', 'positive_pattern_indicators')
|
|
190
|
+
foreach ($field in $arrayFields) {
|
|
191
|
+
if ($rs.ContainsKey($field)) {
|
|
192
|
+
$value = $rs[$field]
|
|
193
|
+
if (-not (Test-IsArray $value)) {
|
|
194
|
+
Write-ValidationError -File $FilePath -Message "relevance_signals.$field must be an array"
|
|
195
|
+
$isValid = $false
|
|
196
|
+
} elseif ($value.Count -gt 0 -and -not (Test-IsArrayOfStrings $value)) {
|
|
197
|
+
Write-ValidationError -File $FilePath -Message "relevance_signals.$field must contain only strings"
|
|
198
|
+
$isValid = $false
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
# Warn if no signals defined
|
|
204
|
+
$hasAnySignals = $false
|
|
205
|
+
foreach ($field in $arrayFields) {
|
|
206
|
+
if ($rs.ContainsKey($field) -and $rs[$field].Count -gt 0) {
|
|
207
|
+
$hasAnySignals = $true
|
|
208
|
+
break
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (-not $hasAnySignals) {
|
|
212
|
+
Write-ValidationWarning -File $FilePath -Message "relevance_signals defined but no signals specified"
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
# Check applicable_object_types
|
|
218
|
+
if ($Frontmatter.ContainsKey('applicable_object_types')) {
|
|
219
|
+
$aot = $Frontmatter['applicable_object_types']
|
|
220
|
+
if (-not (Test-IsArray $aot)) {
|
|
221
|
+
Write-ValidationError -File $FilePath -Message "applicable_object_types must be an array"
|
|
222
|
+
$isValid = $false
|
|
223
|
+
} elseif ($aot.Count -gt 0 -and -not (Test-IsArrayOfStrings $aot)) {
|
|
224
|
+
Write-ValidationError -File $FilePath -Message "applicable_object_types must contain only strings"
|
|
225
|
+
$isValid = $false
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
# Check relevance_threshold
|
|
230
|
+
if ($Frontmatter.ContainsKey('relevance_threshold')) {
|
|
231
|
+
$rt = $Frontmatter['relevance_threshold']
|
|
232
|
+
$rtNum = 0
|
|
233
|
+
# Use InvariantCulture to handle decimal point regardless of system locale
|
|
234
|
+
if (-not [double]::TryParse($rt, [System.Globalization.NumberStyles]::Float, [System.Globalization.CultureInfo]::InvariantCulture, [ref]$rtNum)) {
|
|
235
|
+
Write-ValidationError -File $FilePath -Message "relevance_threshold must be a number"
|
|
236
|
+
$isValid = $false
|
|
237
|
+
} elseif ($rtNum -lt 0.0 -or $rtNum -gt 1.0) {
|
|
238
|
+
Write-ValidationError -File $FilePath -Message "relevance_threshold must be between 0.0 and 1.0 (got $rtNum)"
|
|
239
|
+
$isValid = $false
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if ($isValid) {
|
|
244
|
+
if ($hasV2Fields) {
|
|
245
|
+
Write-Host " OK (v2 fields valid)" -ForegroundColor Green
|
|
246
|
+
} else {
|
|
247
|
+
Write-Host " OK (no v2 fields)" -ForegroundColor Gray
|
|
248
|
+
}
|
|
249
|
+
$script:ValidCount++
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return $isValid
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
# Main execution
|
|
256
|
+
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
257
|
+
$searchPath = Join-Path $scriptDir $Path
|
|
258
|
+
|
|
259
|
+
if (-not (Test-Path $searchPath)) {
|
|
260
|
+
# Try relative to current directory
|
|
261
|
+
$searchPath = $Path
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (-not (Test-Path $searchPath)) {
|
|
265
|
+
Write-Host "Error: Path not found: $searchPath" -ForegroundColor Red
|
|
266
|
+
exit 1
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
Write-Host "=" * 60 -ForegroundColor White
|
|
270
|
+
Write-Host "Frontmatter Validator - Knowledge Pattern V2" -ForegroundColor White
|
|
271
|
+
Write-Host "=" * 60 -ForegroundColor White
|
|
272
|
+
Write-Host "Scanning: $searchPath"
|
|
273
|
+
Write-Host "Exclude samples: $ExcludeSamples"
|
|
274
|
+
Write-Host "V2 fields only: $V2Only"
|
|
275
|
+
Write-Host ""
|
|
276
|
+
|
|
277
|
+
# Find all markdown files
|
|
278
|
+
$files = Get-ChildItem -Path $searchPath -Filter "*.md" -Recurse
|
|
279
|
+
|
|
280
|
+
if ($ExcludeSamples) {
|
|
281
|
+
$files = $files | Where-Object { $_.DirectoryName -notmatch '\\samples$' }
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
Write-Host "Found $($files.Count) files to validate`n"
|
|
285
|
+
|
|
286
|
+
foreach ($file in $files) {
|
|
287
|
+
$content = Get-Content -Path $file.FullName -Raw -ErrorAction SilentlyContinue
|
|
288
|
+
|
|
289
|
+
if (-not $content) {
|
|
290
|
+
Write-Host "`nValidating: $($file.Name)" -ForegroundColor Cyan
|
|
291
|
+
Write-ValidationError -File $file.FullName -Message "Could not read file"
|
|
292
|
+
continue
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
# Check for frontmatter
|
|
296
|
+
if ($content -notmatch '^---') {
|
|
297
|
+
Write-Host "`nValidating: $($file.Name)" -ForegroundColor Cyan
|
|
298
|
+
Write-ValidationWarning -File $file.FullName -Message "No YAML frontmatter found"
|
|
299
|
+
$script:SkippedCount++
|
|
300
|
+
continue
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
$frontmatter = Parse-YamlFrontmatter -Content $content
|
|
304
|
+
|
|
305
|
+
if (-not $frontmatter) {
|
|
306
|
+
Write-Host "`nValidating: $($file.Name)" -ForegroundColor Cyan
|
|
307
|
+
Write-ValidationError -File $file.FullName -Message "Failed to parse YAML frontmatter"
|
|
308
|
+
continue
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
Validate-Frontmatter -FilePath $file.FullName -Frontmatter $frontmatter | Out-Null
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
# Summary
|
|
315
|
+
Write-Host "`n" + ("=" * 60) -ForegroundColor White
|
|
316
|
+
Write-Host "VALIDATION SUMMARY" -ForegroundColor White
|
|
317
|
+
Write-Host "=" * 60 -ForegroundColor White
|
|
318
|
+
Write-Host "Valid: $script:ValidCount" -ForegroundColor Green
|
|
319
|
+
Write-Host "Warnings: $script:WarningCount" -ForegroundColor Yellow
|
|
320
|
+
Write-Host "Errors: $script:ErrorCount" -ForegroundColor Red
|
|
321
|
+
Write-Host "Skipped: $script:SkippedCount" -ForegroundColor Gray
|
|
322
|
+
Write-Host ""
|
|
323
|
+
|
|
324
|
+
if ($script:ErrorCount -gt 0) {
|
|
325
|
+
Write-Host "VALIDATION FAILED" -ForegroundColor Red
|
|
326
|
+
exit 1
|
|
327
|
+
} else {
|
|
328
|
+
Write-Host "VALIDATION PASSED" -ForegroundColor Green
|
|
329
|
+
exit 0
|
|
330
|
+
}
|