coreason-workspace-env 2.1.0__py3-none-any.whl

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 (88) hide show
  1. coreason_workspace_env-2.1.0.dist-info/METADATA +24 -0
  2. coreason_workspace_env-2.1.0.dist-info/RECORD +88 -0
  3. coreason_workspace_env-2.1.0.dist-info/WHEEL +5 -0
  4. coreason_workspace_env-2.1.0.dist-info/entry_points.txt +2 -0
  5. coreason_workspace_env-2.1.0.dist-info/licenses/LICENSE.txt +57 -0
  6. coreason_workspace_env-2.1.0.dist-info/licenses/NOTICE.txt +8 -0
  7. coreason_workspace_env-2.1.0.dist-info/top_level.txt +1 -0
  8. src/agents/agent_pm/orchestrator.py +9 -0
  9. src/agents/agent_pm/tools/__init__.py +1 -0
  10. src/agents/agent_validator/orchestrator.py +11 -0
  11. src/agents/backend_pm/orchestrator.py +9 -0
  12. src/agents/backend_pm/tools/__init__.py +1 -0
  13. src/agents/context_compressor/orchestrator.py +48 -0
  14. src/agents/database_architect/orchestrator.py +9 -0
  15. src/agents/database_architect/tools/__init__.py +1 -0
  16. src/agents/factory_ceo/orchestrator.py +56 -0
  17. src/agents/factory_ceo/tools/__init__.py +1 -0
  18. src/agents/fastapi_coder/orchestrator.py +9 -0
  19. src/agents/fastapi_coder/tools/__init__.py +1 -0
  20. src/agents/frontend_pm/orchestrator.py +9 -0
  21. src/agents/frontend_pm/tools/__init__.py +1 -0
  22. src/agents/knowledge_archivist/__init__.py +1 -0
  23. src/agents/knowledge_consultant/__init__.py +1 -0
  24. src/agents/legacy_deconstructor/__init__.py +1 -0
  25. src/agents/librarian_pm/__init__.py +1 -0
  26. src/agents/output_sanitizer/orchestrator.py +48 -0
  27. src/agents/prompt_engineer/orchestrator.py +9 -0
  28. src/agents/prompt_engineer/tools/__init__.py +1 -0
  29. src/agents/react_coder/orchestrator.py +9 -0
  30. src/agents/react_coder/tools/__init__.py +1 -0
  31. src/agents/ui_designer/orchestrator.py +9 -0
  32. src/agents/ui_designer/tools/__init__.py +1 -0
  33. src/agents/yaml_compiler/orchestrator.py +52 -0
  34. src/agents/yaml_compiler/tools/fs_tools.py +22 -0
  35. src/api/endpoints/agents.py +59 -0
  36. src/api/endpoints/docs.py +49 -0
  37. src/api/endpoints/mcp.py +36 -0
  38. src/api/endpoints/projects.py +70 -0
  39. src/api/router.py +18 -0
  40. src/api/streaming/__init__.py +1 -0
  41. src/api/streaming/agent_progress.py +42 -0
  42. src/api/streaming/crdt.py +22 -0
  43. src/api/streaming/state_sync.py +30 -0
  44. src/api/streaming/tty.py +16 -0
  45. src/cli/main.py +264 -0
  46. src/core/config.py +45 -0
  47. src/core/db.py +28 -0
  48. src/core/fsm_decoder.py +47 -0
  49. src/core/mcp_client.py +59 -0
  50. src/core/mcp_server.py +52 -0
  51. src/core/queue.py +41 -0
  52. src/core/schemas/__init__.py +1 -0
  53. src/core/schemas/epistemic_firewall.py +13 -0
  54. src/core/schemas/knowledge_receipt.py +28 -0
  55. src/core/schemas/legacy_ir.py +49 -0
  56. src/core/security/audit.py +77 -0
  57. src/core/security/auth.py +56 -0
  58. src/core/security/encryption.py +58 -0
  59. src/core/security/proxy_delegation.py +67 -0
  60. src/core/security/vault.py +79 -0
  61. src/core/services/__init__.py +24 -0
  62. src/core/services/agent_service.py +153 -0
  63. src/core/services/docs_service.py +80 -0
  64. src/core/services/health_service.py +81 -0
  65. src/core/services/mcp_service.py +88 -0
  66. src/core/services/project_service.py +140 -0
  67. src/core/skill_loader.py +146 -0
  68. src/core/skill_registry_schema.py +70 -0
  69. src/core/skills/__init__.py +6 -0
  70. src/core/skills/context_compressor.py +18 -0
  71. src/core/skills/escalate_to_human.py +23 -0
  72. src/core/skills/output_sanitizer.py +14 -0
  73. src/core/tracing/__init__.py +6 -0
  74. src/core/tracing/callbacks.py +143 -0
  75. src/core/tracing/config.py +24 -0
  76. src/core/tracing/langfuse_bridge.py +168 -0
  77. src/core/vfs/crdt_sync.py +51 -0
  78. src/core/vfs/git_backend.py +81 -0
  79. src/core/vfs/terminal_tty.py +49 -0
  80. src/core/ws_backplane.py +66 -0
  81. src/main.py +107 -0
  82. src/mcp/__init__.py +1 -0
  83. src/mcp/memory_server/__init__.py +1 -0
  84. src/mcp/memory_server/server.py +155 -0
  85. src/mcp/server.py +233 -0
  86. src/sdk/__init__.py +13 -0
  87. src/sdk/client.py +170 -0
  88. src/workers/keda_worker.py +45 -0
@@ -0,0 +1,24 @@
1
+ Metadata-Version: 2.4
2
+ Name: coreason-workspace-env
3
+ Version: 2.1.0
4
+ Summary: Scalable, Async, Multi-Tenant LangGraph Platform
5
+ Author-email: "Gowtham A Rao, MD, PhD" <gowtham.rao@coreason.ai>
6
+ License: Prosperity 3.0
7
+ Classifier: Programming Language :: Python :: 3.14
8
+ Classifier: Operating System :: OS Independent
9
+ Requires-Python: >=3.14
10
+ Description-Content-Type: text/markdown
11
+ License-File: LICENSE.txt
12
+ License-File: NOTICE.txt
13
+ Requires-Dist: fastapi>=0.100
14
+ Requires-Dist: uvicorn>=0.20
15
+ Requires-Dist: asyncpg>=0.29.0
16
+ Requires-Dist: redis>=5.0
17
+ Requires-Dist: pydantic-settings>=2.0
18
+ Requires-Dist: langgraph>=0.0.10
19
+ Requires-Dist: alembic>=1.13.0
20
+ Requires-Dist: psycopg2-binary>=2.9.0
21
+ Requires-Dist: coreason-manifest>=0.98.0
22
+ Dynamic: license-file
23
+
24
+ # coreason-workspace-env
@@ -0,0 +1,88 @@
1
+ coreason_workspace_env-2.1.0.dist-info/licenses/LICENSE.txt,sha256=2ljChaa11gIExihm27c-5kfrTK9lKQd0DXvYa9xTElM,3125
2
+ coreason_workspace_env-2.1.0.dist-info/licenses/NOTICE.txt,sha256=mO4ACx6ABS-8ShYPEwturUuD8MbW707u4pjbEjeWDy4,612
3
+ src/main.py,sha256=NlRN8a5FNhTLc8nP3nxGcZ_Qrkdw2QxH6S7PYPVWxGU,3085
4
+ src/agents/agent_pm/orchestrator.py,sha256=bRyQ-MZAfRGDshOdYRnSWvVgoXQ1O6PZQYd6HJcO_ek,263
5
+ src/agents/agent_pm/tools/__init__.py,sha256=1IggZs86m6HXVJRRQd-M1yaXf1IvqrP1ysLVBl2C_eg,32
6
+ src/agents/agent_validator/orchestrator.py,sha256=3OSOI9qkZRKRCOxD4gzfCLuNDuvQsOL2QcmiWjqnENg,371
7
+ src/agents/backend_pm/orchestrator.py,sha256=lqX2dYUgkgmBeiO3MU2rri9NFVix3cVvYMEepSJumac,267
8
+ src/agents/backend_pm/tools/__init__.py,sha256=1IggZs86m6HXVJRRQd-M1yaXf1IvqrP1ysLVBl2C_eg,32
9
+ src/agents/context_compressor/orchestrator.py,sha256=oXO8Jxc1IwSDEiykaBBevcQU80GI2UIGOt5Cww18KvU,1796
10
+ src/agents/database_architect/orchestrator.py,sha256=MV1YCTNs1RWHc78wWsoree1uPZf0gomOvi3C5udp8M4,283
11
+ src/agents/database_architect/tools/__init__.py,sha256=1IggZs86m6HXVJRRQd-M1yaXf1IvqrP1ysLVBl2C_eg,32
12
+ src/agents/factory_ceo/orchestrator.py,sha256=iHUZe_0Ill-YPCoOwEHvTcVWp5rcbN3G8Cn4YusUvDs,1856
13
+ src/agents/factory_ceo/tools/__init__.py,sha256=1IggZs86m6HXVJRRQd-M1yaXf1IvqrP1ysLVBl2C_eg,32
14
+ src/agents/fastapi_coder/orchestrator.py,sha256=owW2djt2YaEZbEam3q71knpEtIDzYXuHi7M9X9p3FrU,273
15
+ src/agents/fastapi_coder/tools/__init__.py,sha256=1IggZs86m6HXVJRRQd-M1yaXf1IvqrP1ysLVBl2C_eg,32
16
+ src/agents/frontend_pm/orchestrator.py,sha256=tBSjxTiD4B2VteZeNiipGtZoNxDRLTxQs_MSJ87GYNI,269
17
+ src/agents/frontend_pm/tools/__init__.py,sha256=1IggZs86m6HXVJRRQd-M1yaXf1IvqrP1ysLVBl2C_eg,32
18
+ src/agents/knowledge_archivist/__init__.py,sha256=_xWQV-zQb-zF6WFH65UJHIF2w_xUYRd5nkxVgLEy6Yc,13
19
+ src/agents/knowledge_consultant/__init__.py,sha256=_xWQV-zQb-zF6WFH65UJHIF2w_xUYRd5nkxVgLEy6Yc,13
20
+ src/agents/legacy_deconstructor/__init__.py,sha256=_xWQV-zQb-zF6WFH65UJHIF2w_xUYRd5nkxVgLEy6Yc,13
21
+ src/agents/librarian_pm/__init__.py,sha256=_xWQV-zQb-zF6WFH65UJHIF2w_xUYRd5nkxVgLEy6Yc,13
22
+ src/agents/output_sanitizer/orchestrator.py,sha256=_onupCSg2BsyvTulp2ptVSXiyXuHJQkvXO2O1u7HE-4,1735
23
+ src/agents/prompt_engineer/orchestrator.py,sha256=0fmEBMpaoTmHH6f9uj7gOtBlViCSfxae5Au4_SeTecI,277
24
+ src/agents/prompt_engineer/tools/__init__.py,sha256=1IggZs86m6HXVJRRQd-M1yaXf1IvqrP1ysLVBl2C_eg,32
25
+ src/agents/react_coder/orchestrator.py,sha256=GIP4xvStQepxtTJjTfGSyQiKSTlzjlCk2d-_zau2lSc,269
26
+ src/agents/react_coder/tools/__init__.py,sha256=1IggZs86m6HXVJRRQd-M1yaXf1IvqrP1ysLVBl2C_eg,32
27
+ src/agents/ui_designer/orchestrator.py,sha256=2EKYQMAYG56G2gW-1Mp7jhSvuQW6H_Sna2uSEGfZYNM,269
28
+ src/agents/ui_designer/tools/__init__.py,sha256=1IggZs86m6HXVJRRQd-M1yaXf1IvqrP1ysLVBl2C_eg,32
29
+ src/agents/yaml_compiler/orchestrator.py,sha256=SbkimZDby-CL1gSWUu2Zx4_QTfCRdZNF4RLostmPtN4,1986
30
+ src/agents/yaml_compiler/tools/fs_tools.py,sha256=C-1aIp3Yok2MUDGtIzlEuN7Qypl2wBWukqwXE226pVk,763
31
+ src/api/router.py,sha256=xuhPN5qwi8aRPBNrmoc8RnXESymNEHEWrmkyYl8_xqI,943
32
+ src/api/endpoints/agents.py,sha256=3PuPMmYgvKBtfyx4IfRws0R6mSbte4KzpH4PyJCFbjE,1906
33
+ src/api/endpoints/docs.py,sha256=q-WfE4d1qy8SDWDFxXQIfTT2BECVwoHfK_kMT3upyxg,1451
34
+ src/api/endpoints/mcp.py,sha256=_QNR-1EPQCR3kGHulrdT6lqHOpHKEygKOzWzzbKK6Uw,1088
35
+ src/api/endpoints/projects.py,sha256=FWIUXenvvkRcpNQXqgWP4edI6IK9bXl3RKF6pohKWx0,2363
36
+ src/api/streaming/__init__.py,sha256=k8UUxCTVmqY6YLwPkzg9DgcLP4pcVYKh5BpKHEp8TlE,81
37
+ src/api/streaming/agent_progress.py,sha256=wGYp3PeSTJXsfdLXWB10ElYDADOZEIzI5Y4iEcaGfrQ,1408
38
+ src/api/streaming/crdt.py,sha256=wgcTsADDvuaVO18NaKof5mcIkaE7TBvqrPRJsmTQUnI,735
39
+ src/api/streaming/state_sync.py,sha256=J695lI9zxE8riSZVyp-jXOwQU97YZrsU6MGHlZ68024,1145
40
+ src/api/streaming/tty.py,sha256=NZPLrvi9S3RV87f1gLcAO2m-DABBMslquD6akawbWko,451
41
+ src/cli/main.py,sha256=mM6MriMRQ37LjKUG1TNBbuXM-1mfLTnafMnwKSvzaoI,10436
42
+ src/core/config.py,sha256=sAgtYrUlZxx_qVKPFlxlpdbek9RjbL-rruTGPGMOytA,1151
43
+ src/core/db.py,sha256=IIQ1SmD8XUFJejjybgvyysMNvbhDLqumLrYcy8bkZb4,910
44
+ src/core/fsm_decoder.py,sha256=2W8-s2pbFuca7vkRSQJjmaioMpVrb8I0AMUFrku6mPI,2139
45
+ src/core/mcp_client.py,sha256=UC7AqoyIP_Zm-wpca2izvDKNXO6GTOI9CfIyAYSX6EQ,2534
46
+ src/core/mcp_server.py,sha256=O_6hDrzmAhJV-Ys9Cj8Du1wmj7WrYCyJRQ0Fc5s2l1Q,1852
47
+ src/core/queue.py,sha256=EIlwHJ-xwZkcRC4EUW3RcsETIiYZofEf35cQF56FBcE,1454
48
+ src/core/skill_loader.py,sha256=l0QL9oUCzJYwUI8K40L3TdgPSYS6v_LEOiNf8menMEE,4729
49
+ src/core/skill_registry_schema.py,sha256=aN2LhXpg_kFRmKbpiLAr58F586J-WVfGoZMRCnR-SrE,2685
50
+ src/core/ws_backplane.py,sha256=pjYB0mpn8IzqRyIL99WxdSy6RyhzI1MR0mO15sDyLVA,2817
51
+ src/core/schemas/__init__.py,sha256=Tnrbl-8FTc3dp-36f2LURcRWFqeY9918ZF58C-WN4E8,33
52
+ src/core/schemas/epistemic_firewall.py,sha256=4wla8_AL17dl5ZfudZsKCpV8zo_iGLM6b-C41yWI7vA,419
53
+ src/core/schemas/knowledge_receipt.py,sha256=7wrCKwrbgOS_JwFdHDiZPvdwjsY7K_G4evKaNIFtBfw,1500
54
+ src/core/schemas/legacy_ir.py,sha256=W4f5Jw-KlQS2KEUSBu85rduN3ffJ6-xOo5W-k39NP94,1673
55
+ src/core/security/audit.py,sha256=jrJHqT3ej1YXlupkZxECymQJDZSrD6EOrbWtEB1TbRo,3198
56
+ src/core/security/auth.py,sha256=1YwBXSSnOhPkFjxzneB65Hy23JLm_0f8wlKl03NmmIw,1970
57
+ src/core/security/encryption.py,sha256=X1bDPFoy37wUNT0skhHGsdAbALPuMJ5gXmg2zKOqQLM,2383
58
+ src/core/security/proxy_delegation.py,sha256=oETOwXQT77GlVXFWKEoEiblEgsEEaroutdeA7umvv_g,2792
59
+ src/core/security/vault.py,sha256=TPPsPbxnpyC3hKHQF56X-W-z0DgZQ6zb0FTX5Nu2d6o,3137
60
+ src/core/services/__init__.py,sha256=6gSPIuK7L2wICgQMtije8fLOaVKoYsjO0rsf15PrIEQ,791
61
+ src/core/services/agent_service.py,sha256=VPYUM2wJ9MQSgXw8Kix-TMACcUnGdkPMo-U7K1m-ucM,5617
62
+ src/core/services/docs_service.py,sha256=xkIDEFdXMGzrMYu_G098yg9bWb3nIz9-h76A413g0Q8,2707
63
+ src/core/services/health_service.py,sha256=z-DdlqXtxS0JtvpPJJbNzaHKdr-D9RA0gJ-xw09oH6I,2729
64
+ src/core/services/mcp_service.py,sha256=DDG9mUeVVoGhljkc5_dy2ZN68S294RRm4g53KT1CSMQ,2833
65
+ src/core/services/project_service.py,sha256=HFgSxbod4yZcG9CFDTpTlwS_Hj1QbRR1pzRhpOtoUdc,4942
66
+ src/core/skills/__init__.py,sha256=xInXtWfDTUc92ziBgakwHakCG1yZ43sKcMMfdcCe4As,293
67
+ src/core/skills/context_compressor.py,sha256=e799QXLAidrQhtSszxofGTVveE0WrKeZVj6Ezr4lfh4,747
68
+ src/core/skills/escalate_to_human.py,sha256=waVipc5uWhU-qP8980jsYLdb9DNMpa93My-TjcEjO-M,1103
69
+ src/core/skills/output_sanitizer.py,sha256=pn9XCzNhFrfkAvfLDq87mC8tfYB3i43ljb5iaeY1bUw,510
70
+ src/core/tracing/__init__.py,sha256=a10q4vuT8uUXtwsqfFvj92gFeWZEjRpQxNlHoOlFPXQ,165
71
+ src/core/tracing/callbacks.py,sha256=uI_B7I2788-V3ujqYe5gaWeKoMZFkgh8sl2y7ADR7MM,4607
72
+ src/core/tracing/config.py,sha256=5JOqxcd6BhjSFDmj6BAHnCwjXylOz5lUE_n0UPSRVkI,780
73
+ src/core/tracing/langfuse_bridge.py,sha256=pzmgmgt40CUAvEhnmdLHJCQnb09ChJTyhF1rGE9mERI,5699
74
+ src/core/vfs/crdt_sync.py,sha256=Dc6ixVBzicacedYjTX08H34FYZbUaDQKBg-WonfKiHs,2280
75
+ src/core/vfs/git_backend.py,sha256=fy605r4JjIo4AX7lN3xae7v1YPmPqDiYlWmw2txneO0,3308
76
+ src/core/vfs/terminal_tty.py,sha256=5y35M_jL0U3QvEK2NPeKvfkGsFEkNIIY6_7TazkzTGA,1941
77
+ src/mcp/__init__.py,sha256=W6cgctc1LQKaV-ljq3UXxVRDQiMeFCKRo1POBroOVts,44
78
+ src/mcp/server.py,sha256=w8aXhpNBVNsR2ovB4pT_H6MtUv-uWMXRtygPRJGUOUo,9059
79
+ src/mcp/memory_server/__init__.py,sha256=_xWQV-zQb-zF6WFH65UJHIF2w_xUYRd5nkxVgLEy6Yc,13
80
+ src/mcp/memory_server/server.py,sha256=LgdIDzGYEAsT0jHXIDaS0Uqv-TUCb87cfYs-SBu0ARU,5460
81
+ src/sdk/__init__.py,sha256=bI1NrJS449jhCJMQFd_oK-hoYsz_yfKhWe1nk2PH0GM,288
82
+ src/sdk/client.py,sha256=_32HtCNakb511Uj-PRpb8HYpg4-1vTNUJ_rYCuVvBi0,5363
83
+ src/workers/keda_worker.py,sha256=KKyDUS7PdIpoVsONWA3BXPEoLqCivd1e30v-iKcmP0o,1709
84
+ coreason_workspace_env-2.1.0.dist-info/METADATA,sha256=89Icly0J0QndNNZQgJ0_IaAhOR0PZk2z5rfWLkYZo0k,771
85
+ coreason_workspace_env-2.1.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
86
+ coreason_workspace_env-2.1.0.dist-info/entry_points.txt,sha256=zMu9d9OVdfupl6TJ8Nk9E_SAo_nmA64OSU8vZF3dmAw,52
87
+ coreason_workspace_env-2.1.0.dist-info/top_level.txt,sha256=74rtVfumQlgAPzR5_2CgYN24MB0XARCg0t-gzk6gTrM,4
88
+ coreason_workspace_env-2.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (83.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ coreason = src.cli.main:cli_entry
@@ -0,0 +1,57 @@
1
+ # The Prosperity Public License 3.0.0
2
+
3
+ Contributor: CoReason, Inc.
4
+
5
+ Source Code: https://github.com/CoReason-AI/coreason-workspace-env
6
+
7
+ ## Purpose
8
+
9
+ This license allows you to use and share this software for noncommercial purposes for free and to try this software for commercial purposes for thirty days.
10
+
11
+ ## Agreement
12
+
13
+ In order to receive this license, you have to agree to its rules. Those rules are both obligations under that agreement and conditions to your license. Don't do anything with this software that triggers a rule you can't or won't follow.
14
+
15
+ ## Notices
16
+
17
+ Make sure everyone who gets a copy of any part of this software from you, with or without changes, also gets the text of this license and the contributor and source code lines above.
18
+
19
+ ## Commercial Trial
20
+
21
+ Limit your use of this software for commercial purposes to a thirty-day trial period. If you use this software for work, your company gets one trial period for all personnel, not one trial per person.
22
+
23
+ ## Contributions Back
24
+
25
+ Developing feedback, changes, or additions that you contribute back to the contributor on the terms of a standardized public software license such as [the Blue Oak Model License 1.0.0](https://blueoakcouncil.org/license/1.0.0), [the Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0.html), [the MIT license](https://spdx.org/licenses/MIT.html), or [the two-clause BSD license](https://spdx.org/licenses/BSD-2-Clause.html) doesn't count as use for a commercial purpose.
26
+
27
+ ## Personal Uses
28
+
29
+ Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious observance, without any anticipated commercial application, doesn't count as use for a commercial purpose.
30
+
31
+ ## Noncommercial Organizations
32
+
33
+ Use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution doesn't count as use for a commercial purpose regardless of the source of funding or obligations resulting from the funding.
34
+
35
+ ## Defense
36
+
37
+ Don't make any legal claim against anyone accusing this software, with or without changes, alone or with other technology, of infringing any patent.
38
+
39
+ ## Copyright
40
+
41
+ The contributor licenses you to do everything with this software that would otherwise infringe their copyright in it.
42
+
43
+ ## Patent
44
+
45
+ The contributor licenses you to do everything with this software that would otherwise infringe any patents they can license or become able to license.
46
+
47
+ ## Reliability
48
+
49
+ The contributor can't revoke this license.
50
+
51
+ ## Excuse
52
+
53
+ You're excused for unknowingly breaking [Notices](#notices) if you take all practical steps to comply within thirty days of learning you broke the rule.
54
+
55
+ ## No Liability
56
+
57
+ ***As far as the law allows, this software comes as is, without any warranty or condition, and the contributor won't be liable to anyone for any damages related to this software or this license, under any kind of legal claim.***
@@ -0,0 +1,8 @@
1
+ Copyright (c) 2026 CoReason, Inc.. All Rights Reserved
2
+
3
+ This software is licensed under the Prosperity Public License 3.0.0.
4
+ The issuer of the Prosperity Public License for this software is CoReason, Inc..
5
+
6
+ For a commercial version of this software, please contact us at gowtham.rao@coreason.ai.
7
+
8
+ GENESIS COMMIT: Initializing repository coreason_gitops per CoReason Clean Room Protocol PIP-001. This repository is established as an independently created De Novo development environment, commencing on 2026-06-11. I, Akshaya M certify that this date is subsequent to my individual Temporal Firewall Date.
@@ -0,0 +1,9 @@
1
+ from deepagents import DeepAgent
2
+
3
+ class AgentPmAgent(DeepAgent):
4
+ """
5
+ Placeholder orchestrator stub for agent_pm.
6
+ LangGraph execution logic will be implemented here.
7
+ """
8
+ def __init__(self, **kwargs):
9
+ super().__init__(**kwargs)
@@ -0,0 +1 @@
1
+ # Placeholder for @tool skills
@@ -0,0 +1,11 @@
1
+ from deepagents import DeepAgent
2
+
3
+
4
+ class AgentValidatorAgent(DeepAgent):
5
+ """
6
+ Unified deterministic Checker for the CoReason Agent Factory.
7
+ Validates all factory artifacts against formal validation standards.
8
+ Operates as a post-build gate in the Maker-Checker-Approver pipeline.
9
+ """
10
+ def __init__(self, **kwargs):
11
+ super().__init__(**kwargs)
@@ -0,0 +1,9 @@
1
+ from deepagents import DeepAgent
2
+
3
+ class BackendPmAgent(DeepAgent):
4
+ """
5
+ Placeholder orchestrator stub for backend_pm.
6
+ LangGraph execution logic will be implemented here.
7
+ """
8
+ def __init__(self, **kwargs):
9
+ super().__init__(**kwargs)
@@ -0,0 +1 @@
1
+ # Placeholder for @tool skills
@@ -0,0 +1,48 @@
1
+ import os
2
+ import yaml
3
+ import logging
4
+ from typing import Dict, Any, List
5
+ from langchain_openai import ChatOpenAI
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+ class ContextCompressorAgent:
10
+ """
11
+ Native DeepAgent Harness for the Context Compressor Sub-Agent.
12
+ """
13
+ def __init__(self, model_override: str = None):
14
+ yaml_path = os.path.join(os.path.dirname(__file__), "agent.yaml")
15
+ with open(yaml_path, "r", encoding="utf-8") as f:
16
+ self.agent_spec = yaml.safe_load(f)
17
+
18
+ self.llm = ChatOpenAI(
19
+ model=model_override or "nvidia/nemotron-3-nano-30b-a3b:free",
20
+ api_key="sovereign-key-placeholder",
21
+ temperature=0.1 # Very low temperature for strict factual extraction
22
+ )
23
+
24
+ self.tools = []
25
+ logger.info(f"Initialized {self.agent_spec.get('name')}")
26
+
27
+ def execute(self, raw_payload: str, compression_goal: str, session_id: str) -> str:
28
+ """
29
+ Executes the DeepAgent compression.
30
+ """
31
+ try:
32
+ from deepagents import create_deep_agent
33
+
34
+ graph = create_deep_agent(
35
+ model=self.llm,
36
+ tools=self.tools,
37
+ system_prompt=self.agent_spec.get("system_prompt")
38
+ )
39
+
40
+ config = {"configurable": {"thread_id": session_id}}
41
+ result = graph.invoke(
42
+ {"messages": [("user", f"Goal: {compression_goal}\n\nPayload:\n{raw_payload}")]},
43
+ config=config
44
+ )
45
+ return result['messages'][-1].content
46
+ except ImportError:
47
+ logger.warning("deepagents package missing, acting as mock execution.")
48
+ return f"[COMPRESSED DATA for '{compression_goal}']: ... (High signal data extracted) ..."
@@ -0,0 +1,9 @@
1
+ from deepagents import DeepAgent
2
+
3
+ class DatabaseArchitectAgent(DeepAgent):
4
+ """
5
+ Placeholder orchestrator stub for database_architect.
6
+ LangGraph execution logic will be implemented here.
7
+ """
8
+ def __init__(self, **kwargs):
9
+ super().__init__(**kwargs)
@@ -0,0 +1 @@
1
+ # Placeholder for @tool skills
@@ -0,0 +1,56 @@
1
+ from typing import Any
2
+ import uuid
3
+ from deepagents import DeepAgent
4
+
5
+ from coreason_manifest.spec.ontology import (
6
+ EpistemicQuarantineSnapshot,
7
+ EpistemicProxyState
8
+ )
9
+ from src.core.schemas.epistemic_firewall import LibrarianRoutingState
10
+
11
+
12
+ class FactoryCeoAgent(DeepAgent):
13
+ """
14
+ Orchestrator for factory_ceo.
15
+ """
16
+ def __init__(self, **kwargs):
17
+ super().__init__(**kwargs)
18
+
19
+ from src.core.db import get_db_pool
20
+
21
+ async def epistemic_interceptor_node(state: dict[str, Any]) -> dict[str, Any]:
22
+ """
23
+ LangGraph Node that physically intercepts large raw human transcripts
24
+ BEFORE they enter the factory_ceo's context window.
25
+ """
26
+ raw_payload = state.get("raw_transcript")
27
+
28
+ if raw_payload:
29
+ snapshot = EpistemicQuarantineSnapshot(
30
+ snapshot_id=str(uuid.uuid7()),
31
+ raw_payload=raw_payload
32
+ )
33
+
34
+ # Persist to WORM Postgres table for enterprise statelessness using global pool
35
+ try:
36
+ pool = await get_db_pool()
37
+ async with pool.acquire() as conn:
38
+ await conn.execute(
39
+ "INSERT INTO epistemic_quarantine_snapshots (snapshot_id, raw_payload) VALUES ($1, $2) ON CONFLICT DO NOTHING",
40
+ snapshot.snapshot_id, snapshot.raw_payload
41
+ )
42
+ except Exception as e:
43
+ # WORM persistence is mandatory for security compliance. Fail closed.
44
+ raise RuntimeError(f"Epistemic Interceptor failed to quarantine transcript: {e}")
45
+
46
+ proxy = EpistemicProxyState(
47
+ proxy_cid=snapshot.snapshot_id,
48
+ structural_type="HumanTranscript"
49
+ )
50
+
51
+ return {
52
+ "raw_transcript": None,
53
+ "epistemic_proxy": proxy
54
+ }
55
+
56
+ return {}
@@ -0,0 +1 @@
1
+ # Placeholder for @tool skills
@@ -0,0 +1,9 @@
1
+ from deepagents import DeepAgent
2
+
3
+ class FastapiCoderAgent(DeepAgent):
4
+ """
5
+ Placeholder orchestrator stub for fastapi_coder.
6
+ LangGraph execution logic will be implemented here.
7
+ """
8
+ def __init__(self, **kwargs):
9
+ super().__init__(**kwargs)
@@ -0,0 +1 @@
1
+ # Placeholder for @tool skills
@@ -0,0 +1,9 @@
1
+ from deepagents import DeepAgent
2
+
3
+ class FrontendPmAgent(DeepAgent):
4
+ """
5
+ Placeholder orchestrator stub for frontend_pm.
6
+ LangGraph execution logic will be implemented here.
7
+ """
8
+ def __init__(self, **kwargs):
9
+ super().__init__(**kwargs)
@@ -0,0 +1 @@
1
+ # Placeholder for @tool skills
@@ -0,0 +1 @@
1
+ # Empty init
@@ -0,0 +1 @@
1
+ # Empty init
@@ -0,0 +1 @@
1
+ # Empty init
@@ -0,0 +1 @@
1
+ # Empty init
@@ -0,0 +1,48 @@
1
+ import os
2
+ import yaml
3
+ import logging
4
+ from typing import Dict, Any, List
5
+ from langchain_openai import ChatOpenAI
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+ class OutputSanitizerAgent:
10
+ """
11
+ Native DeepAgent Harness for the Output Sanitizer Sub-Agent.
12
+ """
13
+ def __init__(self, model_override: str = None):
14
+ yaml_path = os.path.join(os.path.dirname(__file__), "agent.yaml")
15
+ with open(yaml_path, "r", encoding="utf-8") as f:
16
+ self.agent_spec = yaml.safe_load(f)
17
+
18
+ self.llm = ChatOpenAI(
19
+ model=model_override or "nvidia/nemotron-3-nano-30b-a3b:free",
20
+ api_key="sovereign-key-placeholder",
21
+ temperature=0.0 # Zero temperature for strict deterministic formatting
22
+ )
23
+
24
+ self.tools = []
25
+ logger.info(f"Initialized {self.agent_spec.get('name')}")
26
+
27
+ def execute(self, raw_output: str, session_id: str) -> str:
28
+ """
29
+ Executes the DeepAgent sanitization.
30
+ """
31
+ try:
32
+ from deepagents import create_deep_agent
33
+
34
+ graph = create_deep_agent(
35
+ model=self.llm,
36
+ tools=self.tools,
37
+ system_prompt=self.agent_spec.get("system_prompt")
38
+ )
39
+
40
+ config = {"configurable": {"thread_id": session_id}}
41
+ result = graph.invoke(
42
+ {"messages": [("user", f"Sanitize and format this output:\n\n{raw_output}")]},
43
+ config=config
44
+ )
45
+ return result['messages'][-1].content
46
+ except ImportError:
47
+ logger.warning("deepagents package missing, acting as mock execution.")
48
+ return "| Key | Value |\n|---|---|\n| Status | Cleaned |"
@@ -0,0 +1,9 @@
1
+ from deepagents import DeepAgent
2
+
3
+ class PromptEngineerAgent(DeepAgent):
4
+ """
5
+ Placeholder orchestrator stub for prompt_engineer.
6
+ LangGraph execution logic will be implemented here.
7
+ """
8
+ def __init__(self, **kwargs):
9
+ super().__init__(**kwargs)
@@ -0,0 +1 @@
1
+ # Placeholder for @tool skills
@@ -0,0 +1,9 @@
1
+ from deepagents import DeepAgent
2
+
3
+ class ReactCoderAgent(DeepAgent):
4
+ """
5
+ Placeholder orchestrator stub for react_coder.
6
+ LangGraph execution logic will be implemented here.
7
+ """
8
+ def __init__(self, **kwargs):
9
+ super().__init__(**kwargs)
@@ -0,0 +1 @@
1
+ # Placeholder for @tool skills
@@ -0,0 +1,9 @@
1
+ from deepagents import DeepAgent
2
+
3
+ class UiDesignerAgent(DeepAgent):
4
+ """
5
+ Placeholder orchestrator stub for ui_designer.
6
+ LangGraph execution logic will be implemented here.
7
+ """
8
+ def __init__(self, **kwargs):
9
+ super().__init__(**kwargs)
@@ -0,0 +1 @@
1
+ # Placeholder for @tool skills
@@ -0,0 +1,52 @@
1
+ import os
2
+ import yaml
3
+ import logging
4
+ from typing import Dict, Any, List
5
+ from langchain_openai import ChatOpenAI
6
+ from .tools.fs_tools import local_fs_writer, local_fs_reader
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+ class YAMLCompilerAgent:
11
+ """
12
+ Native DeepAgent Harness for the deterministic YAML Compiler.
13
+ Accepts the fully saturated context and scaffolds the project files.
14
+ """
15
+ def __init__(self, model_override: str = None):
16
+ # Updated to point to the encapsulated agent.yaml
17
+ yaml_path = os.path.join(os.path.dirname(__file__), "agent.yaml")
18
+ with open(yaml_path, "r", encoding="utf-8") as f:
19
+ self.agent_spec = yaml.safe_load(f)
20
+
21
+ self.llm = ChatOpenAI(
22
+ model=model_override or "nvidia/nemotron-3-nano-30b-a3b:free",
23
+ api_key="sovereign-key-placeholder",
24
+ temperature=0.0
25
+ )
26
+
27
+ # Bound to encapsulated tools
28
+ self.tools = [local_fs_writer, local_fs_reader]
29
+ logger.info(f"Initialized {self.agent_spec.get('name')}")
30
+
31
+ def execute(self, saturated_context: str, session_id: str) -> str:
32
+ """
33
+ Executes the DeepAgent compilation dynamically via LangGraph.
34
+ """
35
+ try:
36
+ from deepagents import create_deep_agent
37
+
38
+ graph = create_deep_agent(
39
+ model=self.llm,
40
+ tools=self.tools,
41
+ system_prompt=self.agent_spec.get("system_prompt")
42
+ )
43
+
44
+ config = {"configurable": {"thread_id": session_id}}
45
+ result = graph.invoke(
46
+ {"messages": [("user", f"Compile these requirements: {saturated_context}")]},
47
+ config=config
48
+ )
49
+ return result['messages'][-1].content
50
+ except ImportError:
51
+ logger.warning("deepagents package missing, acting as mock execution.")
52
+ return "MOCK_SUCCESS: Compiled project.yaml and orchestrator_agent.yaml"
@@ -0,0 +1,22 @@
1
+ import os
2
+ from langchain_core.tools import tool
3
+
4
+ @tool
5
+ def local_fs_writer(filepath: str, content: str) -> str:
6
+ """Writes the content string to the exact filepath on the local filesystem."""
7
+ try:
8
+ os.makedirs(os.path.dirname(filepath), exist_ok=True)
9
+ with open(filepath, "w", encoding="utf-8") as f:
10
+ f.write(content)
11
+ return f"Successfully wrote to {filepath}"
12
+ except Exception as e:
13
+ return f"Error writing to file: {str(e)}"
14
+
15
+ @tool
16
+ def local_fs_reader(filepath: str) -> str:
17
+ """Reads the content of a file from the local filesystem."""
18
+ try:
19
+ with open(filepath, "r", encoding="utf-8") as f:
20
+ return f.read()
21
+ except Exception as e:
22
+ return f"Error reading file: {str(e)}"
@@ -0,0 +1,59 @@
1
+ """
2
+ REST API — Agents endpoints.
3
+ Thin adapter over src.core.services.agent_service.
4
+ """
5
+ from typing import Optional
6
+
7
+ from fastapi import APIRouter, HTTPException
8
+ from pydantic import BaseModel, Field
9
+
10
+ from src.core.services import agent_service
11
+
12
+ router = APIRouter()
13
+
14
+
15
+ class ExecuteAgentRequest(BaseModel):
16
+ agent_name: str = Field(..., description="Name of the agent to execute")
17
+ user_id: str = Field(..., description="User ID for tenant isolation")
18
+ tenant_id: str = Field(..., description="Tenant ID for sandbox isolation")
19
+ payload: dict = Field(default_factory=dict, description="Context payload for the agent")
20
+ session_id: Optional[str] = Field(None, description="Optional session/job ID")
21
+
22
+
23
+ @router.get("/")
24
+ async def list_agents():
25
+ """List all agents across projects."""
26
+ agents = agent_service.list_agents()
27
+ return {"agents": agents}
28
+
29
+
30
+ @router.get("/{agent_name}")
31
+ async def get_agent(agent_name: str):
32
+ """Get a specific agent's manifest and metadata."""
33
+ agent = agent_service.get_agent(agent_name)
34
+ if not agent:
35
+ raise HTTPException(status_code=404, detail=f"Agent '{agent_name}' not found")
36
+ return {"agent": agent}
37
+
38
+
39
+ @router.post("/execute")
40
+ async def execute_agent(req: ExecuteAgentRequest):
41
+ """Trigger a LangGraph execution flow for the specified agent."""
42
+ agent = agent_service.get_agent(req.agent_name)
43
+ if not agent:
44
+ raise HTTPException(status_code=404, detail=f"Agent '{req.agent_name}' not found")
45
+
46
+ result = await agent_service.execute_agent(
47
+ agent_name=req.agent_name,
48
+ payload=req.payload,
49
+ user_id=req.user_id,
50
+ tenant_id=req.tenant_id,
51
+ session_id=req.session_id,
52
+ )
53
+ return result
54
+
55
+
56
+ @router.get("/jobs/{job_id}")
57
+ async def get_job_status(job_id: str):
58
+ """Check the status of an enqueued agent execution."""
59
+ return agent_service.get_execution_status(job_id)