agenticdome-python-sdk 1.2.18__tar.gz → 1.2.21__tar.gz

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.
Files changed (108) hide show
  1. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/MANIFEST.in +1 -1
  2. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/PKG-INFO +22 -22
  3. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_python_sdk.egg-info/PKG-INFO +22 -22
  4. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_python_sdk.egg-info/SOURCES.txt +4 -23
  5. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_python_sdk.egg-info/requires.txt +21 -21
  6. agenticdome_python_sdk-1.2.21/agenticdome_sdk/copilot_ir.py +294 -0
  7. agenticdome_python_sdk-1.2.21/agenticdome_sdk/copilot_ir_collector.cjs +110 -0
  8. agenticdome_python_sdk-1.2.21/agenticdome_sdk/hook_catalog.py +593 -0
  9. agenticdome_python_sdk-1.2.21/agenticdome_sdk/onboarding_cli.py +1213 -0
  10. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/customer-onboarding.md +23 -9
  11. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/pyproject.toml +25 -22
  12. agenticdome_python_sdk-1.2.18/agenticdome_sdk/onboarding_cli.py +0 -649
  13. agenticdome_python_sdk-1.2.18/tests/test_agno_integration.py +0 -334
  14. agenticdome_python_sdk-1.2.18/tests/test_attack_demo.py +0 -49
  15. agenticdome_python_sdk-1.2.18/tests/test_autogen_integration.py +0 -319
  16. agenticdome_python_sdk-1.2.18/tests/test_aws_bedrock_integration.py +0 -405
  17. agenticdome_python_sdk-1.2.18/tests/test_claude_integration.py +0 -243
  18. agenticdome_python_sdk-1.2.18/tests/test_client.py +0 -448
  19. agenticdome_python_sdk-1.2.18/tests/test_crewai_integration.py +0 -254
  20. agenticdome_python_sdk-1.2.18/tests/test_execution_broker.py +0 -92
  21. agenticdome_python_sdk-1.2.18/tests/test_framework_guides.py +0 -187
  22. agenticdome_python_sdk-1.2.18/tests/test_google_adk_integration.py +0 -296
  23. agenticdome_python_sdk-1.2.18/tests/test_identity_context.py +0 -40
  24. agenticdome_python_sdk-1.2.18/tests/test_langgraph_integration.py +0 -349
  25. agenticdome_python_sdk-1.2.18/tests/test_llamaindex_integration.py +0 -227
  26. agenticdome_python_sdk-1.2.18/tests/test_local_simulation.py +0 -306
  27. agenticdome_python_sdk-1.2.18/tests/test_mcp_host_integration.py +0 -393
  28. agenticdome_python_sdk-1.2.18/tests/test_mcp_launch_example.py +0 -31
  29. agenticdome_python_sdk-1.2.18/tests/test_microsoft_agent_framework_integration.py +0 -321
  30. agenticdome_python_sdk-1.2.18/tests/test_microsoft_ai_foundry_integration.py +0 -344
  31. agenticdome_python_sdk-1.2.18/tests/test_onboarding_cli.py +0 -209
  32. agenticdome_python_sdk-1.2.18/tests/test_openai_agents_integration.py +0 -313
  33. agenticdome_python_sdk-1.2.18/tests/test_pydanticai_integration.py +0 -259
  34. agenticdome_python_sdk-1.2.18/tests/test_smolagents_integration.py +0 -181
  35. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/CONTRIBUTING.md +0 -0
  36. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/LICENSE +0 -0
  37. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/NOTICE +0 -0
  38. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/README.md +0 -0
  39. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/SECURITY.md +0 -0
  40. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_python_sdk.egg-info/dependency_links.txt +0 -0
  41. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_python_sdk.egg-info/entry_points.txt +0 -0
  42. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_python_sdk.egg-info/top_level.txt +0 -0
  43. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/__init__.py +0 -0
  44. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/_framework_firewall.py +0 -0
  45. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/_mode.py +0 -0
  46. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/agno.py +0 -0
  47. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/autogen.py +0 -0
  48. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/aws_bedrock.py +0 -0
  49. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/claude.py +0 -0
  50. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/client.py +0 -0
  51. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/crewai.py +0 -0
  52. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/demo.py +0 -0
  53. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/google_adk.py +0 -0
  54. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/identity.py +0 -0
  55. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/langgraph.py +0 -0
  56. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/llamaindex.py +0 -0
  57. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/mcp_host.py +0 -0
  58. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/microsoft_agent_framework.py +0 -0
  59. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/microsoft_ai_foundry.py +0 -0
  60. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/openai_agents.py +0 -0
  61. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/proof.py +0 -0
  62. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/pydantic.py +0 -0
  63. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/simulation.py +0 -0
  64. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/agenticdome_sdk/smolagents.py +0 -0
  65. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/README.md +0 -0
  66. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/agno.md +0 -0
  67. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/autogen.md +0 -0
  68. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/aws-bedrock.md +0 -0
  69. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/claude-agent-sdk.md +0 -0
  70. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/crewai.md +0 -0
  71. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/custom-python.md +0 -0
  72. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/google-adk.md +0 -0
  73. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/langgraph.md +0 -0
  74. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/llamaindex.md +0 -0
  75. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/microsoft-agent-framework.md +0 -0
  76. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/microsoft-ai-foundry.md +0 -0
  77. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/openai-agents.md +0 -0
  78. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/pydanticai.md +0 -0
  79. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/frameworks/smolagents.md +0 -0
  80. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/mcp-integration.md +0 -0
  81. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/performance-evidence.md +0 -0
  82. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/docs/runtime-deployment.md +0 -0
  83. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/PRODUCTION_INTEGRATION.md +0 -0
  84. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/README.md +0 -0
  85. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/attack_demo.py +0 -0
  86. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/crewai_agenticdome_firewall.py +0 -0
  87. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/README.md +0 -0
  88. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/_shared.py +0 -0
  89. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/agno.py +0 -0
  90. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/autogen.py +0 -0
  91. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/aws_bedrock.py +0 -0
  92. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/claude_agent_sdk.py +0 -0
  93. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/crewai.py +0 -0
  94. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/custom_python.py +0 -0
  95. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/google_adk.py +0 -0
  96. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/langgraph.py +0 -0
  97. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/llamaindex.py +0 -0
  98. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/mcp.py +0 -0
  99. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/microsoft_agent_framework.py +0 -0
  100. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/microsoft_ai_foundry.py +0 -0
  101. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/openai_agents.py +0 -0
  102. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/pydanticai.py +0 -0
  103. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/frameworks/smolagents.py +0 -0
  104. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/langgraph_agenticdome_firewall.py +0 -0
  105. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/local_simulation_gallery.py +0 -0
  106. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/examples/mcp_gateway_action_firewall.py +0 -0
  107. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/setup.cfg +0 -0
  108. {agenticdome_python_sdk-1.2.18 → agenticdome_python_sdk-1.2.21}/setup.py +0 -0
@@ -9,7 +9,7 @@ include setup.py
9
9
  recursive-include examples *.py
10
10
  recursive-include examples *.md
11
11
  recursive-include docs *.md
12
- recursive-include tests *.py
12
+ prune tests
13
13
  global-exclude __pycache__
14
14
  global-exclude *.py[cod]
15
15
  global-exclude .DS_Store
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agenticdome-python-sdk
3
- Version: 1.2.18
3
+ Version: 1.2.21
4
4
  Summary: Official Python SDK for AgenticDome security guardrails, DLP, tool authorization, and multi-agent delegation enforcement.
5
5
  Author: AgenticDome
6
6
  License-Expression: Apache-2.0
@@ -32,20 +32,20 @@ License-File: NOTICE
32
32
  Requires-Dist: requests>=2.31.0
33
33
  Requires-Dist: urllib3>=2.0.0
34
34
  Provides-Extra: crewai
35
- Requires-Dist: crewai<=1.15.16,>=1.15.5; extra == "crewai"
35
+ Requires-Dist: crewai<=1.15.17,>=1.15.5; extra == "crewai"
36
36
  Provides-Extra: redis
37
37
  Requires-Dist: redis>=4.5.0; extra == "redis"
38
38
  Provides-Extra: pop
39
39
  Requires-Dist: cryptography>=42.0.0; extra == "pop"
40
40
  Provides-Extra: pydanticai
41
- Requires-Dist: pydantic-ai<=2.31.0,>=2.16.0; extra == "pydanticai"
41
+ Requires-Dist: pydantic-ai<=2.32.1,>=2.16.0; extra == "pydanticai"
42
42
  Requires-Dist: anyio>=4.0.0; extra == "pydanticai"
43
43
  Provides-Extra: pydantic
44
- Requires-Dist: pydantic-ai<=2.31.0,>=2.16.0; extra == "pydantic"
44
+ Requires-Dist: pydantic-ai<=2.32.1,>=2.16.0; extra == "pydantic"
45
45
  Requires-Dist: anyio>=4.0.0; extra == "pydantic"
46
46
  Provides-Extra: langgraph
47
47
  Requires-Dist: langgraph<=1.2.11,>=1.2.9; extra == "langgraph"
48
- Requires-Dist: langchain-core<=1.5.5,>=1.5.0; extra == "langgraph"
48
+ Requires-Dist: langchain-core<=1.6.0,>=1.5.0; extra == "langgraph"
49
49
  Requires-Dist: langchain-openai==1.3.5; extra == "langgraph"
50
50
  Requires-Dist: anyio>=4.0.0; extra == "langgraph"
51
51
  Provides-Extra: microsoft
@@ -59,46 +59,46 @@ Requires-Dist: azure-identity==1.25.3; extra == "foundry"
59
59
  Provides-Extra: agno
60
60
  Requires-Dist: agno<=2.9.0,>=2.8.0; extra == "agno"
61
61
  Provides-Extra: openai-agents
62
- Requires-Dist: openai-agents<=0.21.0,>=0.18.3; extra == "openai-agents"
62
+ Requires-Dist: openai-agents<=0.22.0,>=0.18.3; extra == "openai-agents"
63
63
  Provides-Extra: mcp
64
64
  Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "mcp"
65
65
  Provides-Extra: bedrock
66
- Requires-Dist: boto3<=1.43.72,>=1.43.54; extra == "bedrock"
66
+ Requires-Dist: boto3<=1.43.75,>=1.43.54; extra == "bedrock"
67
67
  Provides-Extra: aws-bedrock
68
- Requires-Dist: boto3<=1.43.72,>=1.43.54; extra == "aws-bedrock"
68
+ Requires-Dist: boto3<=1.43.75,>=1.43.54; extra == "aws-bedrock"
69
69
  Provides-Extra: llamaindex
70
- Requires-Dist: llama-index==0.14.23; extra == "llamaindex"
70
+ Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "llamaindex"
71
71
  Provides-Extra: llama-index
72
- Requires-Dist: llama-index==0.14.23; extra == "llama-index"
72
+ Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "llama-index"
73
73
  Provides-Extra: google-adk
74
- Requires-Dist: google-adk<=2.7.0,>=2.5.0; extra == "google-adk"
74
+ Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "google-adk"
75
75
  Provides-Extra: adk
76
- Requires-Dist: google-adk<=2.7.0,>=2.5.0; extra == "adk"
76
+ Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "adk"
77
77
  Provides-Extra: claude
78
- Requires-Dist: claude-agent-sdk<=0.2.139,>=0.2.126; extra == "claude"
78
+ Requires-Dist: claude-agent-sdk<=0.2.142,>=0.2.126; extra == "claude"
79
79
  Provides-Extra: claude-agent-sdk
80
- Requires-Dist: claude-agent-sdk<=0.2.139,>=0.2.126; extra == "claude-agent-sdk"
80
+ Requires-Dist: claude-agent-sdk<=0.2.142,>=0.2.126; extra == "claude-agent-sdk"
81
81
  Provides-Extra: smolagents
82
82
  Requires-Dist: smolagents==1.26.0; extra == "smolagents"
83
83
  Provides-Extra: all
84
- Requires-Dist: crewai<=1.15.16,>=1.15.5; extra == "all"
84
+ Requires-Dist: crewai<=1.15.17,>=1.15.5; extra == "all"
85
85
  Requires-Dist: redis>=4.5.0; extra == "all"
86
86
  Requires-Dist: cryptography>=42.0.0; extra == "all"
87
- Requires-Dist: pydantic-ai<=2.31.0,>=2.16.0; extra == "all"
87
+ Requires-Dist: pydantic-ai<=2.32.1,>=2.16.0; extra == "all"
88
88
  Requires-Dist: anyio>=4.0.0; extra == "all"
89
89
  Requires-Dist: langgraph<=1.2.11,>=1.2.9; extra == "all"
90
- Requires-Dist: langchain-core<=1.5.5,>=1.5.0; extra == "all"
90
+ Requires-Dist: langchain-core<=1.6.0,>=1.5.0; extra == "all"
91
91
  Requires-Dist: langchain-openai==1.3.5; extra == "all"
92
92
  Requires-Dist: autogen-agentchat==0.7.5; extra == "all"
93
93
  Requires-Dist: agno<=2.9.0,>=2.8.0; extra == "all"
94
94
  Requires-Dist: azure-ai-projects<=2.4.0,>=2.3.0; extra == "all"
95
95
  Requires-Dist: azure-identity==1.25.3; extra == "all"
96
- Requires-Dist: openai-agents<=0.21.0,>=0.18.3; extra == "all"
96
+ Requires-Dist: openai-agents<=0.22.0,>=0.18.3; extra == "all"
97
97
  Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "all"
98
- Requires-Dist: boto3<=1.43.72,>=1.43.54; extra == "all"
99
- Requires-Dist: llama-index==0.14.23; extra == "all"
100
- Requires-Dist: google-adk<=2.7.0,>=2.5.0; extra == "all"
101
- Requires-Dist: claude-agent-sdk<=0.2.139,>=0.2.126; extra == "all"
98
+ Requires-Dist: boto3<=1.43.75,>=1.43.54; extra == "all"
99
+ Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "all"
100
+ Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "all"
101
+ Requires-Dist: claude-agent-sdk<=0.2.142,>=0.2.126; extra == "all"
102
102
  Requires-Dist: smolagents==1.26.0; extra == "all"
103
103
  Provides-Extra: dev
104
104
  Requires-Dist: pytest>=8.0.0; extra == "dev"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agenticdome-python-sdk
3
- Version: 1.2.18
3
+ Version: 1.2.21
4
4
  Summary: Official Python SDK for AgenticDome security guardrails, DLP, tool authorization, and multi-agent delegation enforcement.
5
5
  Author: AgenticDome
6
6
  License-Expression: Apache-2.0
@@ -32,20 +32,20 @@ License-File: NOTICE
32
32
  Requires-Dist: requests>=2.31.0
33
33
  Requires-Dist: urllib3>=2.0.0
34
34
  Provides-Extra: crewai
35
- Requires-Dist: crewai<=1.15.16,>=1.15.5; extra == "crewai"
35
+ Requires-Dist: crewai<=1.15.17,>=1.15.5; extra == "crewai"
36
36
  Provides-Extra: redis
37
37
  Requires-Dist: redis>=4.5.0; extra == "redis"
38
38
  Provides-Extra: pop
39
39
  Requires-Dist: cryptography>=42.0.0; extra == "pop"
40
40
  Provides-Extra: pydanticai
41
- Requires-Dist: pydantic-ai<=2.31.0,>=2.16.0; extra == "pydanticai"
41
+ Requires-Dist: pydantic-ai<=2.32.1,>=2.16.0; extra == "pydanticai"
42
42
  Requires-Dist: anyio>=4.0.0; extra == "pydanticai"
43
43
  Provides-Extra: pydantic
44
- Requires-Dist: pydantic-ai<=2.31.0,>=2.16.0; extra == "pydantic"
44
+ Requires-Dist: pydantic-ai<=2.32.1,>=2.16.0; extra == "pydantic"
45
45
  Requires-Dist: anyio>=4.0.0; extra == "pydantic"
46
46
  Provides-Extra: langgraph
47
47
  Requires-Dist: langgraph<=1.2.11,>=1.2.9; extra == "langgraph"
48
- Requires-Dist: langchain-core<=1.5.5,>=1.5.0; extra == "langgraph"
48
+ Requires-Dist: langchain-core<=1.6.0,>=1.5.0; extra == "langgraph"
49
49
  Requires-Dist: langchain-openai==1.3.5; extra == "langgraph"
50
50
  Requires-Dist: anyio>=4.0.0; extra == "langgraph"
51
51
  Provides-Extra: microsoft
@@ -59,46 +59,46 @@ Requires-Dist: azure-identity==1.25.3; extra == "foundry"
59
59
  Provides-Extra: agno
60
60
  Requires-Dist: agno<=2.9.0,>=2.8.0; extra == "agno"
61
61
  Provides-Extra: openai-agents
62
- Requires-Dist: openai-agents<=0.21.0,>=0.18.3; extra == "openai-agents"
62
+ Requires-Dist: openai-agents<=0.22.0,>=0.18.3; extra == "openai-agents"
63
63
  Provides-Extra: mcp
64
64
  Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "mcp"
65
65
  Provides-Extra: bedrock
66
- Requires-Dist: boto3<=1.43.72,>=1.43.54; extra == "bedrock"
66
+ Requires-Dist: boto3<=1.43.75,>=1.43.54; extra == "bedrock"
67
67
  Provides-Extra: aws-bedrock
68
- Requires-Dist: boto3<=1.43.72,>=1.43.54; extra == "aws-bedrock"
68
+ Requires-Dist: boto3<=1.43.75,>=1.43.54; extra == "aws-bedrock"
69
69
  Provides-Extra: llamaindex
70
- Requires-Dist: llama-index==0.14.23; extra == "llamaindex"
70
+ Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "llamaindex"
71
71
  Provides-Extra: llama-index
72
- Requires-Dist: llama-index==0.14.23; extra == "llama-index"
72
+ Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "llama-index"
73
73
  Provides-Extra: google-adk
74
- Requires-Dist: google-adk<=2.7.0,>=2.5.0; extra == "google-adk"
74
+ Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "google-adk"
75
75
  Provides-Extra: adk
76
- Requires-Dist: google-adk<=2.7.0,>=2.5.0; extra == "adk"
76
+ Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "adk"
77
77
  Provides-Extra: claude
78
- Requires-Dist: claude-agent-sdk<=0.2.139,>=0.2.126; extra == "claude"
78
+ Requires-Dist: claude-agent-sdk<=0.2.142,>=0.2.126; extra == "claude"
79
79
  Provides-Extra: claude-agent-sdk
80
- Requires-Dist: claude-agent-sdk<=0.2.139,>=0.2.126; extra == "claude-agent-sdk"
80
+ Requires-Dist: claude-agent-sdk<=0.2.142,>=0.2.126; extra == "claude-agent-sdk"
81
81
  Provides-Extra: smolagents
82
82
  Requires-Dist: smolagents==1.26.0; extra == "smolagents"
83
83
  Provides-Extra: all
84
- Requires-Dist: crewai<=1.15.16,>=1.15.5; extra == "all"
84
+ Requires-Dist: crewai<=1.15.17,>=1.15.5; extra == "all"
85
85
  Requires-Dist: redis>=4.5.0; extra == "all"
86
86
  Requires-Dist: cryptography>=42.0.0; extra == "all"
87
- Requires-Dist: pydantic-ai<=2.31.0,>=2.16.0; extra == "all"
87
+ Requires-Dist: pydantic-ai<=2.32.1,>=2.16.0; extra == "all"
88
88
  Requires-Dist: anyio>=4.0.0; extra == "all"
89
89
  Requires-Dist: langgraph<=1.2.11,>=1.2.9; extra == "all"
90
- Requires-Dist: langchain-core<=1.5.5,>=1.5.0; extra == "all"
90
+ Requires-Dist: langchain-core<=1.6.0,>=1.5.0; extra == "all"
91
91
  Requires-Dist: langchain-openai==1.3.5; extra == "all"
92
92
  Requires-Dist: autogen-agentchat==0.7.5; extra == "all"
93
93
  Requires-Dist: agno<=2.9.0,>=2.8.0; extra == "all"
94
94
  Requires-Dist: azure-ai-projects<=2.4.0,>=2.3.0; extra == "all"
95
95
  Requires-Dist: azure-identity==1.25.3; extra == "all"
96
- Requires-Dist: openai-agents<=0.21.0,>=0.18.3; extra == "all"
96
+ Requires-Dist: openai-agents<=0.22.0,>=0.18.3; extra == "all"
97
97
  Requires-Dist: mcp<=1.28.1,>=1.26.0; extra == "all"
98
- Requires-Dist: boto3<=1.43.72,>=1.43.54; extra == "all"
99
- Requires-Dist: llama-index==0.14.23; extra == "all"
100
- Requires-Dist: google-adk<=2.7.0,>=2.5.0; extra == "all"
101
- Requires-Dist: claude-agent-sdk<=0.2.139,>=0.2.126; extra == "all"
98
+ Requires-Dist: boto3<=1.43.75,>=1.43.54; extra == "all"
99
+ Requires-Dist: llama-index<=0.14.24,>=0.14.23; extra == "all"
100
+ Requires-Dist: google-adk<=2.7.1,>=2.5.0; extra == "all"
101
+ Requires-Dist: claude-agent-sdk<=0.2.142,>=0.2.126; extra == "all"
102
102
  Requires-Dist: smolagents==1.26.0; extra == "all"
103
103
  Provides-Extra: dev
104
104
  Requires-Dist: pytest>=8.0.0; extra == "dev"
@@ -20,9 +20,12 @@ agenticdome_sdk/autogen.py
20
20
  agenticdome_sdk/aws_bedrock.py
21
21
  agenticdome_sdk/claude.py
22
22
  agenticdome_sdk/client.py
23
+ agenticdome_sdk/copilot_ir.py
24
+ agenticdome_sdk/copilot_ir_collector.cjs
23
25
  agenticdome_sdk/crewai.py
24
26
  agenticdome_sdk/demo.py
25
27
  agenticdome_sdk/google_adk.py
28
+ agenticdome_sdk/hook_catalog.py
26
29
  agenticdome_sdk/identity.py
27
30
  agenticdome_sdk/langgraph.py
28
31
  agenticdome_sdk/llamaindex.py
@@ -77,26 +80,4 @@ examples/frameworks/microsoft_agent_framework.py
77
80
  examples/frameworks/microsoft_ai_foundry.py
78
81
  examples/frameworks/openai_agents.py
79
82
  examples/frameworks/pydanticai.py
80
- examples/frameworks/smolagents.py
81
- tests/test_agno_integration.py
82
- tests/test_attack_demo.py
83
- tests/test_autogen_integration.py
84
- tests/test_aws_bedrock_integration.py
85
- tests/test_claude_integration.py
86
- tests/test_client.py
87
- tests/test_crewai_integration.py
88
- tests/test_execution_broker.py
89
- tests/test_framework_guides.py
90
- tests/test_google_adk_integration.py
91
- tests/test_identity_context.py
92
- tests/test_langgraph_integration.py
93
- tests/test_llamaindex_integration.py
94
- tests/test_local_simulation.py
95
- tests/test_mcp_host_integration.py
96
- tests/test_mcp_launch_example.py
97
- tests/test_microsoft_agent_framework_integration.py
98
- tests/test_microsoft_ai_foundry_integration.py
99
- tests/test_onboarding_cli.py
100
- tests/test_openai_agents_integration.py
101
- tests/test_pydanticai_integration.py
102
- tests/test_smolagents_integration.py
83
+ examples/frameworks/smolagents.py
@@ -2,49 +2,49 @@ requests>=2.31.0
2
2
  urllib3>=2.0.0
3
3
 
4
4
  [adk]
5
- google-adk<=2.7.0,>=2.5.0
5
+ google-adk<=2.7.1,>=2.5.0
6
6
 
7
7
  [agno]
8
8
  agno<=2.9.0,>=2.8.0
9
9
 
10
10
  [all]
11
- crewai<=1.15.16,>=1.15.5
11
+ crewai<=1.15.17,>=1.15.5
12
12
  redis>=4.5.0
13
13
  cryptography>=42.0.0
14
- pydantic-ai<=2.31.0,>=2.16.0
14
+ pydantic-ai<=2.32.1,>=2.16.0
15
15
  anyio>=4.0.0
16
16
  langgraph<=1.2.11,>=1.2.9
17
- langchain-core<=1.5.5,>=1.5.0
17
+ langchain-core<=1.6.0,>=1.5.0
18
18
  langchain-openai==1.3.5
19
19
  autogen-agentchat==0.7.5
20
20
  agno<=2.9.0,>=2.8.0
21
21
  azure-ai-projects<=2.4.0,>=2.3.0
22
22
  azure-identity==1.25.3
23
- openai-agents<=0.21.0,>=0.18.3
23
+ openai-agents<=0.22.0,>=0.18.3
24
24
  mcp<=1.28.1,>=1.26.0
25
- boto3<=1.43.72,>=1.43.54
26
- llama-index==0.14.23
27
- google-adk<=2.7.0,>=2.5.0
28
- claude-agent-sdk<=0.2.139,>=0.2.126
25
+ boto3<=1.43.75,>=1.43.54
26
+ llama-index<=0.14.24,>=0.14.23
27
+ google-adk<=2.7.1,>=2.5.0
28
+ claude-agent-sdk<=0.2.142,>=0.2.126
29
29
  smolagents==1.26.0
30
30
 
31
31
  [autogen]
32
32
  autogen-agentchat==0.7.5
33
33
 
34
34
  [aws-bedrock]
35
- boto3<=1.43.72,>=1.43.54
35
+ boto3<=1.43.75,>=1.43.54
36
36
 
37
37
  [bedrock]
38
- boto3<=1.43.72,>=1.43.54
38
+ boto3<=1.43.75,>=1.43.54
39
39
 
40
40
  [claude]
41
- claude-agent-sdk<=0.2.139,>=0.2.126
41
+ claude-agent-sdk<=0.2.142,>=0.2.126
42
42
 
43
43
  [claude-agent-sdk]
44
- claude-agent-sdk<=0.2.139,>=0.2.126
44
+ claude-agent-sdk<=0.2.142,>=0.2.126
45
45
 
46
46
  [crewai]
47
- crewai<=1.15.16,>=1.15.5
47
+ crewai<=1.15.17,>=1.15.5
48
48
 
49
49
  [dev]
50
50
  pytest>=8.0.0
@@ -62,19 +62,19 @@ azure-ai-projects<=2.4.0,>=2.3.0
62
62
  azure-identity==1.25.3
63
63
 
64
64
  [google-adk]
65
- google-adk<=2.7.0,>=2.5.0
65
+ google-adk<=2.7.1,>=2.5.0
66
66
 
67
67
  [langgraph]
68
68
  langgraph<=1.2.11,>=1.2.9
69
- langchain-core<=1.5.5,>=1.5.0
69
+ langchain-core<=1.6.0,>=1.5.0
70
70
  langchain-openai==1.3.5
71
71
  anyio>=4.0.0
72
72
 
73
73
  [llama-index]
74
- llama-index==0.14.23
74
+ llama-index<=0.14.24,>=0.14.23
75
75
 
76
76
  [llamaindex]
77
- llama-index==0.14.23
77
+ llama-index<=0.14.24,>=0.14.23
78
78
 
79
79
  [mcp]
80
80
  mcp<=1.28.1,>=1.26.0
@@ -85,17 +85,17 @@ mcp<=1.28.1,>=1.26.0
85
85
  autogen-agentchat==0.7.5
86
86
 
87
87
  [openai-agents]
88
- openai-agents<=0.21.0,>=0.18.3
88
+ openai-agents<=0.22.0,>=0.18.3
89
89
 
90
90
  [pop]
91
91
  cryptography>=42.0.0
92
92
 
93
93
  [pydantic]
94
- pydantic-ai<=2.31.0,>=2.16.0
94
+ pydantic-ai<=2.32.1,>=2.16.0
95
95
  anyio>=4.0.0
96
96
 
97
97
  [pydanticai]
98
- pydantic-ai<=2.31.0,>=2.16.0
98
+ pydantic-ai<=2.32.1,>=2.16.0
99
99
  anyio>=4.0.0
100
100
 
101
101
  [redis]
@@ -0,0 +1,294 @@
1
+ """Generic, source-free AST collection for the AgenticDome Integration Copilot.
2
+
3
+ This public module deliberately performs no placement ranking, guard-dominance
4
+ reasoning, bypass scoring or compatibility decisions. Those protectable
5
+ capabilities live in the private Copilot Core. The collector emits bounded
6
+ structural metadata and never emits source text, literals or absolute paths.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import ast
12
+ import json
13
+ import re
14
+ import shutil
15
+ import subprocess
16
+ from pathlib import Path
17
+ from typing import Any, Dict, List, Sequence, Tuple
18
+
19
+
20
+ IR_SCHEMA = "agenticdome.copilot-ir.v1"
21
+ MAX_IR_FILES = 1_000
22
+
23
+
24
+ def _relative(path: Path, root: Path) -> str:
25
+ try:
26
+ return path.resolve().relative_to(root.resolve()).as_posix()
27
+ except (OSError, ValueError):
28
+ return path.name
29
+
30
+
31
+ def _dotted_name(node: ast.AST) -> str:
32
+ if isinstance(node, ast.Name):
33
+ return node.id.lower()
34
+ if isinstance(node, ast.Attribute):
35
+ left = _dotted_name(node.value)
36
+ return (left + "." if left else "") + node.attr.lower()
37
+ if isinstance(node, ast.Call):
38
+ return _dotted_name(node.func)
39
+ return ""
40
+
41
+
42
+ def _tail(value: str) -> str:
43
+ return str(value or "").rsplit(".", 1)[-1].lower()
44
+
45
+
46
+ def _literal_enum(node: ast.AST | None, allowed: set[str]) -> str:
47
+ if isinstance(node, ast.Constant) and isinstance(node.value, str):
48
+ value = node.value.strip().lower()
49
+ return value if value in allowed else ""
50
+ return ""
51
+
52
+
53
+ def _call_hints(node: ast.Call) -> Dict[str, Any]:
54
+ hints: Dict[str, Any] = {}
55
+ has_tool_binding = False
56
+ for keyword in node.keywords:
57
+ if keyword.arg == "direction":
58
+ direction = _literal_enum(keyword.value, {"input", "inbound", "output", "outbound"})
59
+ if direction:
60
+ hints["direction"] = direction
61
+ elif keyword.arg in {"tool_name", "tool_args"}:
62
+ has_tool_binding = True
63
+ elif keyword.arg == "policy_context" and isinstance(keyword.value, ast.Dict):
64
+ for key, value in zip(keyword.value.keys, keyword.value.values):
65
+ if _literal_enum(key, {"request_purpose"}) != "request_purpose":
66
+ continue
67
+ purpose = _literal_enum(
68
+ value,
69
+ {"prompt_input", "tool_execution", "output_review", "sdk_onboarding_verification"},
70
+ )
71
+ if purpose:
72
+ hints["request_purpose"] = purpose
73
+ if has_tool_binding:
74
+ hints["has_tool_binding"] = True
75
+ return hints
76
+
77
+
78
+ class _PythonIRVisitor(ast.NodeVisitor):
79
+ def __init__(self, path: str) -> None:
80
+ self.path = path
81
+ self.stack: List[str] = ["<module>"]
82
+ self.flow_stack: List[str] = []
83
+ self.functions: Dict[str, Dict[str, Any]] = {
84
+ "<module>": {
85
+ "symbol": "<module>",
86
+ "path": path,
87
+ "line": 1,
88
+ "hints": {"entrypoint": True, "parameters": [], "decorators": []},
89
+ "events": [],
90
+ }
91
+ }
92
+ self.features = {"functions": 0, "calls": 0, "returns": 0}
93
+
94
+ @property
95
+ def current(self) -> Dict[str, Any]:
96
+ return self.functions[self.stack[-1]]
97
+
98
+ def _visit_function(self, node: ast.AST) -> None:
99
+ name = str(getattr(node, "name", "anonymous"))
100
+ parent = self.stack[-1]
101
+ symbol = name if parent == "<module>" else parent + "." + name
102
+ decorators = [_dotted_name(item) for item in getattr(node, "decorator_list", [])]
103
+ parameters = [arg.arg.lower() for arg in getattr(getattr(node, "args", None), "args", [])]
104
+ self.functions[symbol] = {
105
+ "symbol": symbol,
106
+ "path": self.path,
107
+ "line": int(getattr(node, "lineno", 1)),
108
+ "hints": {"parameters": parameters[:100], "decorators": decorators[:50]},
109
+ "events": [],
110
+ }
111
+ self.features["functions"] += 1
112
+ self.stack.append(symbol)
113
+ for statement in getattr(node, "body", []):
114
+ self.visit(statement)
115
+ self.stack.pop()
116
+
117
+ def visit_FunctionDef(self, node: ast.FunctionDef) -> None: # noqa: N802
118
+ self._visit_function(node)
119
+
120
+ def visit_AsyncFunctionDef(self, node: ast.AsyncFunctionDef) -> None: # noqa: N802
121
+ self._visit_function(node)
122
+
123
+ def visit_Call(self, node: ast.Call) -> None: # noqa: N802
124
+ self.features["calls"] += 1
125
+ self.current["events"].append({
126
+ "event": "call",
127
+ "callee": _dotted_name(node.func),
128
+ "line": int(getattr(node, "lineno", self.current["line"])),
129
+ "flow_scope": list(self.flow_stack),
130
+ "hints": _call_hints(node),
131
+ })
132
+ self.generic_visit(node)
133
+
134
+ def visit_Return(self, node: ast.Return) -> None: # noqa: N802
135
+ self.features["returns"] += 1
136
+ if node.value is not None:
137
+ self.visit(node.value)
138
+ self.current["events"].append({
139
+ "event": "return",
140
+ "callee": "return",
141
+ "line": int(getattr(node, "lineno", self.current["line"])),
142
+ "flow_scope": list(self.flow_stack),
143
+ })
144
+
145
+ def visit_Assign(self, node: ast.Assign) -> None: # noqa: N802
146
+ role = "user_input" if any(_tail(_dotted_name(target)) in {"user_input", "user_query", "user_message"} for target in node.targets) else ""
147
+ if role:
148
+ self.current["events"].append({
149
+ "event": "assignment",
150
+ "assignment_role": role,
151
+ "callee": "assignment",
152
+ "line": int(getattr(node, "lineno", self.current["line"])),
153
+ "flow_scope": list(self.flow_stack),
154
+ })
155
+ self.generic_visit(node)
156
+
157
+ def _visit_branch(self, node: ast.AST, arms: Sequence[Tuple[str, Sequence[ast.stmt]]]) -> None:
158
+ test = getattr(node, "test", None)
159
+ if isinstance(test, ast.AST):
160
+ self.visit(test)
161
+ marker = node.__class__.__name__.lower() + "@" + str(getattr(node, "lineno", 1))
162
+ for arm, statements in arms:
163
+ self.flow_stack.append(marker + ":" + arm)
164
+ for statement in statements:
165
+ self.visit(statement)
166
+ self.flow_stack.pop()
167
+
168
+ def visit_If(self, node: ast.If) -> None: # noqa: N802
169
+ self._visit_branch(node, (("body", node.body), ("else", node.orelse)))
170
+
171
+ def visit_For(self, node: ast.For) -> None: # noqa: N802
172
+ self.visit(node.iter)
173
+ self._visit_branch(node, (("body", node.body), ("else", node.orelse)))
174
+
175
+ def visit_AsyncFor(self, node: ast.AsyncFor) -> None: # noqa: N802
176
+ self.visit_For(node)
177
+
178
+ def visit_While(self, node: ast.While) -> None: # noqa: N802
179
+ self._visit_branch(node, (("body", node.body), ("else", node.orelse)))
180
+
181
+ def visit_Try(self, node: ast.Try) -> None: # noqa: N802
182
+ arms: List[Tuple[str, Sequence[ast.stmt]]] = [("body", node.body)]
183
+ arms.extend(("except" + str(index), handler.body) for index, handler in enumerate(node.handlers))
184
+ arms.extend((("else", node.orelse), ("finally", node.finalbody)))
185
+ self._visit_branch(node, arms)
186
+
187
+
188
+ def _collect_python(root: Path, paths: Sequence[Path]) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
189
+ functions: List[Dict[str, Any]] = []
190
+ parsed = 0
191
+ parse_errors = 0
192
+ features = {"functions": 0, "calls": 0, "returns": 0}
193
+ for path in paths[:MAX_IR_FILES]:
194
+ try:
195
+ tree = ast.parse(path.read_text(encoding="utf-8", errors="ignore"), filename=path.name)
196
+ except (OSError, SyntaxError, ValueError):
197
+ parse_errors += 1
198
+ continue
199
+ visitor = _PythonIRVisitor(_relative(path, root))
200
+ visitor.visit(tree)
201
+ parsed += 1
202
+ functions.extend(visitor.functions.values())
203
+ for key, value in visitor.features.items():
204
+ features[key] += value
205
+ return functions, {
206
+ "engine": "python-ast",
207
+ "available": True,
208
+ "files_parsed": parsed,
209
+ "parse_errors": parse_errors,
210
+ "features": features,
211
+ "claim": "Generic AST structure collection; private reasoning is performed by the assigned Copilot service",
212
+ }
213
+
214
+
215
+ def _collect_typescript(root: Path, paths: Sequence[Path]) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
216
+ if not paths:
217
+ return [], {"engine": "typescript-compiler-api", "available": False, "files_parsed": 0, "reason": "No TypeScript or JavaScript source was found."}
218
+ node = shutil.which("node")
219
+ helper = Path(__file__).with_name("copilot_ir_collector.cjs")
220
+ if not node or not helper.exists():
221
+ return _typescript_fallback(root, paths, "Node.js or the packaged IR collector is unavailable.")
222
+ try:
223
+ completed = subprocess.run(
224
+ [node, str(helper)],
225
+ input=json.dumps({"root": str(root), "files": [str(path) for path in paths[:MAX_IR_FILES]]}),
226
+ text=True,
227
+ stdout=subprocess.PIPE,
228
+ stderr=subprocess.DEVNULL,
229
+ check=False,
230
+ timeout=20,
231
+ cwd=root,
232
+ )
233
+ result = json.loads(completed.stdout or "{}") if completed.returncode == 0 else {}
234
+ except (OSError, subprocess.TimeoutExpired, json.JSONDecodeError):
235
+ result = {}
236
+ if not isinstance(result, dict) or not result.get("available"):
237
+ return _typescript_fallback(root, paths, str(result.get("reason", "The TypeScript compiler is unavailable."))[:160] if isinstance(result, dict) else "The TypeScript compiler is unavailable.")
238
+ functions = result.get("functions") if isinstance(result.get("functions"), list) else []
239
+ return [item for item in functions if isinstance(item, dict)], {
240
+ "engine": "typescript-compiler-api",
241
+ "available": True,
242
+ "files_parsed": max(0, int(result.get("files_parsed", 0))),
243
+ "parse_errors": max(0, int(result.get("parse_errors", 0))),
244
+ "typescript_version": str(result.get("typescript_version", ""))[:40],
245
+ "claim": "Generic compiler AST structure collection; private reasoning is performed by the assigned Copilot service",
246
+ }
247
+
248
+
249
+ def _typescript_fallback(root: Path, paths: Sequence[Path], reason: str) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
250
+ functions: List[Dict[str, Any]] = []
251
+ parsed = 0
252
+ call_pattern = re.compile(r"\b([A-Za-z_$][\w$]*(?:\s*\.\s*[A-Za-z_$][\w$]*)*)\s*\(")
253
+ for path in paths[:MAX_IR_FILES]:
254
+ try:
255
+ lines = path.read_text(encoding="utf-8", errors="ignore").splitlines()
256
+ except OSError:
257
+ continue
258
+ events = []
259
+ for line_number, line in enumerate(lines, start=1):
260
+ for match in call_pattern.finditer(line):
261
+ events.append({"event": "call", "callee": re.sub(r"\s+", "", match.group(1)).lower(), "line": line_number, "flow_scope": []})
262
+ if re.search(r"\breturn\b", line):
263
+ events.append({"event": "return", "callee": "return", "line": line_number, "flow_scope": []})
264
+ functions.append({"symbol": "<module>", "path": _relative(path, root), "line": 1, "hints": {"entrypoint": True, "parameters": [], "decorators": []}, "events": events[:500]})
265
+ parsed += 1
266
+ return functions, {
267
+ "engine": "typescript-structural-fallback",
268
+ "available": False,
269
+ "files_parsed": parsed,
270
+ "parse_errors": 0,
271
+ "reason": reason,
272
+ "claim": "Generic structural collection only; install TypeScript for compiler AST evidence",
273
+ }
274
+
275
+
276
+ def collect_repository_ir(root: Path, paths: Sequence[Path]) -> Dict[str, Any]:
277
+ """Collect bounded metadata for private reasoning without emitting source."""
278
+ python_paths = [path for path in paths if path.suffix.lower() in {".py", ".pyi"}]
279
+ typescript_paths = [path for path in paths if path.suffix.lower() in {".js", ".jsx", ".ts", ".tsx"}]
280
+ python_functions, python_engine = _collect_python(root, python_paths)
281
+ typescript_functions, typescript_engine = _collect_typescript(root, typescript_paths)
282
+ return {
283
+ "schema": IR_SCHEMA,
284
+ "source_upload": False,
285
+ "collector_mode": "generic_ast_metadata_only",
286
+ "engines": {"python": python_engine, "typescript": typescript_engine},
287
+ "functions": (python_functions + typescript_functions)[:20_000],
288
+ "privacy": {
289
+ "source_text": False,
290
+ "string_literals": False,
291
+ "absolute_paths": False,
292
+ "environment_values": False,
293
+ },
294
+ }