onetool-mcp 1.0.0b1__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 (132) hide show
  1. bench/__init__.py +5 -0
  2. bench/cli.py +69 -0
  3. bench/harness/__init__.py +66 -0
  4. bench/harness/client.py +692 -0
  5. bench/harness/config.py +397 -0
  6. bench/harness/csv_writer.py +109 -0
  7. bench/harness/evaluate.py +512 -0
  8. bench/harness/metrics.py +283 -0
  9. bench/harness/runner.py +899 -0
  10. bench/py.typed +0 -0
  11. bench/reporter.py +629 -0
  12. bench/run.py +487 -0
  13. bench/secrets.py +101 -0
  14. bench/utils.py +16 -0
  15. onetool/__init__.py +4 -0
  16. onetool/cli.py +391 -0
  17. onetool/py.typed +0 -0
  18. onetool_mcp-1.0.0b1.dist-info/METADATA +163 -0
  19. onetool_mcp-1.0.0b1.dist-info/RECORD +132 -0
  20. onetool_mcp-1.0.0b1.dist-info/WHEEL +4 -0
  21. onetool_mcp-1.0.0b1.dist-info/entry_points.txt +3 -0
  22. onetool_mcp-1.0.0b1.dist-info/licenses/LICENSE.txt +687 -0
  23. onetool_mcp-1.0.0b1.dist-info/licenses/NOTICE.txt +64 -0
  24. ot/__init__.py +37 -0
  25. ot/__main__.py +6 -0
  26. ot/_cli.py +107 -0
  27. ot/_tui.py +53 -0
  28. ot/config/__init__.py +46 -0
  29. ot/config/defaults/bench.yaml +4 -0
  30. ot/config/defaults/diagram-templates/api-flow.mmd +33 -0
  31. ot/config/defaults/diagram-templates/c4-context.puml +30 -0
  32. ot/config/defaults/diagram-templates/class-diagram.mmd +87 -0
  33. ot/config/defaults/diagram-templates/feature-mindmap.mmd +70 -0
  34. ot/config/defaults/diagram-templates/microservices.d2 +81 -0
  35. ot/config/defaults/diagram-templates/project-gantt.mmd +37 -0
  36. ot/config/defaults/diagram-templates/state-machine.mmd +42 -0
  37. ot/config/defaults/onetool.yaml +25 -0
  38. ot/config/defaults/prompts.yaml +97 -0
  39. ot/config/defaults/servers.yaml +7 -0
  40. ot/config/defaults/snippets.yaml +4 -0
  41. ot/config/defaults/tool_templates/__init__.py +7 -0
  42. ot/config/defaults/tool_templates/extension.py +52 -0
  43. ot/config/defaults/tool_templates/isolated.py +61 -0
  44. ot/config/dynamic.py +121 -0
  45. ot/config/global_templates/__init__.py +2 -0
  46. ot/config/global_templates/bench-secrets-template.yaml +6 -0
  47. ot/config/global_templates/bench.yaml +9 -0
  48. ot/config/global_templates/onetool.yaml +27 -0
  49. ot/config/global_templates/secrets-template.yaml +44 -0
  50. ot/config/global_templates/servers.yaml +18 -0
  51. ot/config/global_templates/snippets.yaml +235 -0
  52. ot/config/loader.py +1087 -0
  53. ot/config/mcp.py +145 -0
  54. ot/config/secrets.py +190 -0
  55. ot/config/tool_config.py +125 -0
  56. ot/decorators.py +116 -0
  57. ot/executor/__init__.py +35 -0
  58. ot/executor/base.py +16 -0
  59. ot/executor/fence_processor.py +83 -0
  60. ot/executor/linter.py +142 -0
  61. ot/executor/pack_proxy.py +260 -0
  62. ot/executor/param_resolver.py +140 -0
  63. ot/executor/pep723.py +288 -0
  64. ot/executor/result_store.py +369 -0
  65. ot/executor/runner.py +496 -0
  66. ot/executor/simple.py +163 -0
  67. ot/executor/tool_loader.py +396 -0
  68. ot/executor/validator.py +398 -0
  69. ot/executor/worker_pool.py +388 -0
  70. ot/executor/worker_proxy.py +189 -0
  71. ot/http_client.py +145 -0
  72. ot/logging/__init__.py +37 -0
  73. ot/logging/config.py +315 -0
  74. ot/logging/entry.py +213 -0
  75. ot/logging/format.py +188 -0
  76. ot/logging/span.py +349 -0
  77. ot/meta.py +1555 -0
  78. ot/paths.py +453 -0
  79. ot/prompts.py +218 -0
  80. ot/proxy/__init__.py +21 -0
  81. ot/proxy/manager.py +396 -0
  82. ot/py.typed +0 -0
  83. ot/registry/__init__.py +189 -0
  84. ot/registry/models.py +57 -0
  85. ot/registry/parser.py +269 -0
  86. ot/registry/registry.py +413 -0
  87. ot/server.py +315 -0
  88. ot/shortcuts/__init__.py +15 -0
  89. ot/shortcuts/aliases.py +87 -0
  90. ot/shortcuts/snippets.py +258 -0
  91. ot/stats/__init__.py +35 -0
  92. ot/stats/html.py +250 -0
  93. ot/stats/jsonl_writer.py +283 -0
  94. ot/stats/reader.py +354 -0
  95. ot/stats/timing.py +57 -0
  96. ot/support.py +63 -0
  97. ot/tools.py +114 -0
  98. ot/utils/__init__.py +81 -0
  99. ot/utils/batch.py +161 -0
  100. ot/utils/cache.py +120 -0
  101. ot/utils/deps.py +403 -0
  102. ot/utils/exceptions.py +23 -0
  103. ot/utils/factory.py +179 -0
  104. ot/utils/format.py +65 -0
  105. ot/utils/http.py +202 -0
  106. ot/utils/platform.py +45 -0
  107. ot/utils/sanitize.py +130 -0
  108. ot/utils/truncate.py +69 -0
  109. ot_tools/__init__.py +4 -0
  110. ot_tools/_convert/__init__.py +12 -0
  111. ot_tools/_convert/excel.py +279 -0
  112. ot_tools/_convert/pdf.py +254 -0
  113. ot_tools/_convert/powerpoint.py +268 -0
  114. ot_tools/_convert/utils.py +358 -0
  115. ot_tools/_convert/word.py +283 -0
  116. ot_tools/brave_search.py +604 -0
  117. ot_tools/code_search.py +736 -0
  118. ot_tools/context7.py +495 -0
  119. ot_tools/convert.py +614 -0
  120. ot_tools/db.py +415 -0
  121. ot_tools/diagram.py +1604 -0
  122. ot_tools/diagram.yaml +167 -0
  123. ot_tools/excel.py +1372 -0
  124. ot_tools/file.py +1348 -0
  125. ot_tools/firecrawl.py +732 -0
  126. ot_tools/grounding_search.py +646 -0
  127. ot_tools/package.py +604 -0
  128. ot_tools/py.typed +0 -0
  129. ot_tools/ripgrep.py +544 -0
  130. ot_tools/scaffold.py +471 -0
  131. ot_tools/transform.py +213 -0
  132. ot_tools/web_fetch.py +384 -0
@@ -0,0 +1,64 @@
1
+ OneTool
2
+ Copyright 2024-present, OneTool Authors
3
+
4
+ This product includes software developed by third parties.
5
+
6
+ ================================================================================
7
+ trafilatura
8
+ ================================================================================
9
+ Copyright 2019-present, Adrien Barbaresi and contributors
10
+ Licensed under the Apache License, Version 2.0
11
+ https://github.com/adbar/trafilatura
12
+
13
+ Used in: tools/web_fetch.py
14
+
15
+ ================================================================================
16
+ brave-search-mcp-server
17
+ ================================================================================
18
+ Copyright (c) 2024 Anthropic, PBC
19
+ Copyright (c) 2025 Brave Software, Inc
20
+ Licensed under the MIT License
21
+ https://github.com/brave/brave-search-mcp-server
22
+
23
+ Used in: tools/brave_search.py (API integration patterns)
24
+
25
+ ================================================================================
26
+ context7
27
+ ================================================================================
28
+ Copyright (c) 2021 Upstash, Inc.
29
+ Licensed under the MIT License
30
+ https://github.com/upstash/context7
31
+
32
+ Used in: tools/context7.py (API integration patterns)
33
+
34
+ ================================================================================
35
+ ChunkHound
36
+ ================================================================================
37
+ Copyright (c) 2025 Ofri Wolfus
38
+ Licensed under the MIT License
39
+ https://github.com/chunkhound/chunkhound
40
+
41
+ Used in: tools/code_search.py (LanceDB schema and indexing patterns)
42
+
43
+ ================================================================================
44
+ mcp-alchemy
45
+ ================================================================================
46
+ Copyright (c) 2024 Rune Kaagaard
47
+ Licensed under the Mozilla Public License, v. 2.0
48
+ https://github.com/runekaagaard/mcp-alchemy
49
+
50
+ Used in: ot_tools/db.py (database introspection and query patterns)
51
+
52
+ ================================================================================
53
+ firecrawl
54
+ ================================================================================
55
+ Copyright (c) 2024 Mendable.ai
56
+ Licensed under the AGPL-3.0 License (SDK and server)
57
+ https://github.com/firecrawl/firecrawl
58
+
59
+ Used in: ot_tools/firecrawl.py (API client SDK)
60
+ Note: We use the SDK to call Firecrawl's cloud API. No server code is distributed.
61
+
62
+ ================================================================================
63
+
64
+ Full license texts are available in the licenses/ directory.
ot/__init__.py ADDED
@@ -0,0 +1,37 @@
1
+ """OneTool - MCP server with single 'run' tool for LLM code generation.
2
+
3
+ Features:
4
+ - Single 'run' tool for Python code execution
5
+ - Tool discovery from src/ot_tools/ directory
6
+ - Configurable prompts and instructions
7
+ - Namespaces, aliases, and snippets for shortcuts
8
+
9
+ Usage:
10
+ # Start MCP server (stdio transport)
11
+ onetool
12
+
13
+ # With config
14
+ onetool --config config/onetool.yaml
15
+
16
+ # Run benchmarks
17
+ bench run harness.yaml
18
+ """
19
+
20
+ from importlib.metadata import PackageNotFoundError, version
21
+ from typing import Any
22
+
23
+ try:
24
+ __version__ = version("onetool-mcp")
25
+ except PackageNotFoundError:
26
+ __version__ = "0.0.0-dev" # Running from source or in worker subprocess
27
+
28
+ __all__ = ["__version__", "main"]
29
+
30
+
31
+ def __getattr__(name: str) -> Any:
32
+ """Lazy import for server module to avoid loading config at import time."""
33
+ if name == "main":
34
+ from ot.server import main
35
+
36
+ return main
37
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
ot/__main__.py ADDED
@@ -0,0 +1,6 @@
1
+ """Run OneTool MCP server when executed as a module."""
2
+
3
+ from ot.server import main
4
+
5
+ if __name__ == "__main__":
6
+ main()
ot/_cli.py ADDED
@@ -0,0 +1,107 @@
1
+ """Shared CLI utilities for OneTool CLIs.
2
+
3
+ Provides common patterns used across onetool and bench CLIs.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from pathlib import Path
9
+ from typing import TYPE_CHECKING
10
+
11
+ import typer
12
+ from rich.console import Console
13
+
14
+ if TYPE_CHECKING:
15
+ from collections.abc import Callable
16
+
17
+ __all__ = ["console", "create_cli", "version_callback"]
18
+
19
+
20
+ def _is_debug_tracebacks() -> bool:
21
+ """Check if verbose tracebacks are enabled.
22
+
23
+ Reads debug_tracebacks from ~/.onetool/onetool.yaml.
24
+ Returns False on any error (fail-safe for broken configs).
25
+ """
26
+ try:
27
+ import yaml
28
+
29
+ config_path = Path.home() / ".onetool" / "onetool.yaml"
30
+ if not config_path.exists():
31
+ return False
32
+ with config_path.open() as f:
33
+ data = yaml.safe_load(f)
34
+ return bool(data.get("debug_tracebacks", False)) if data else False
35
+ except Exception:
36
+ return False
37
+
38
+ # Shared console instance for consistent output
39
+ console = Console(highlight=False)
40
+
41
+
42
+ def version_callback(name: str, version: str) -> Callable[[bool], None]:
43
+ """Create a version callback for Typer CLI.
44
+
45
+ Args:
46
+ name: CLI name to display (e.g., "ot", "bench")
47
+ version: Version string to display
48
+
49
+ Returns:
50
+ Callback function for --version option
51
+
52
+ Example:
53
+ @app.callback()
54
+ def main(
55
+ version: bool | None = typer.Option(
56
+ None,
57
+ "--version", "-v",
58
+ callback=version_callback("ot", __version__),
59
+ is_eager=True,
60
+ help="Show version and exit.",
61
+ ),
62
+ ) -> None:
63
+ ...
64
+ """
65
+
66
+ def callback(value: bool) -> None:
67
+ if value:
68
+ console.print(f"{name} version {version}")
69
+ raise typer.Exit()
70
+
71
+ return callback
72
+
73
+
74
+ def create_cli(
75
+ name: str,
76
+ help_text: str,
77
+ *,
78
+ no_args_is_help: bool = False,
79
+ ) -> typer.Typer:
80
+ """Create a Typer CLI app with standard configuration.
81
+
82
+ Args:
83
+ name: CLI name
84
+ help_text: Help text for the CLI
85
+ no_args_is_help: Show help when no args provided (default: False)
86
+
87
+ Returns:
88
+ Configured Typer app
89
+
90
+ Note:
91
+ Set debug_tracebacks: true in ~/.onetool/onetool.yaml for Rich
92
+ formatted tracebacks with local variables and syntax highlighting.
93
+
94
+ Example:
95
+ app = create_cli(
96
+ "bench",
97
+ "OneTool benchmark harness.",
98
+ no_args_is_help=True,
99
+ )
100
+ """
101
+ debug = _is_debug_tracebacks()
102
+ return typer.Typer(
103
+ name=name,
104
+ help=help_text,
105
+ no_args_is_help=no_args_is_help,
106
+ pretty_exceptions_enable=debug,
107
+ )
ot/_tui.py ADDED
@@ -0,0 +1,53 @@
1
+ """Shared TUI primitives for interactive CLI tools.
2
+
3
+ Used by bench for interactive selection prompts.
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ import questionary
9
+ from questionary import Style
10
+
11
+ # Consistent style across all prompts
12
+ APP_STYLE = Style(
13
+ [
14
+ ("qmark", "fg:#5c9aff bold"),
15
+ ("question", "fg:#e0e0e0 bold"),
16
+ ("answer", "fg:#7dd3a8"),
17
+ ("pointer", "fg:#5c9aff bold"),
18
+ ("highlighted", "fg:#ffffff bg:#3d5a80"),
19
+ ("selected", "fg:#7dd3a8"),
20
+ ]
21
+ )
22
+
23
+
24
+ async def safe_ask(question: questionary.Question) -> str | None:
25
+ """Wrap questionary ask with graceful cancellation."""
26
+ try:
27
+ result = await question.ask_async()
28
+ return str(result) if result is not None else None
29
+ except KeyboardInterrupt:
30
+ return None
31
+
32
+
33
+ async def ask_select(
34
+ prompt: str,
35
+ choices: list[questionary.Choice],
36
+ ) -> str | None:
37
+ """Prompt for selection with shortcuts."""
38
+ return await safe_ask(
39
+ questionary.select(
40
+ prompt,
41
+ choices=choices,
42
+ style=APP_STYLE,
43
+ use_shortcuts=True,
44
+ use_arrow_keys=True,
45
+ instruction="",
46
+ )
47
+ )
48
+
49
+
50
+ async def ask_text(prompt: str, default: str = "") -> str | None:
51
+ """Prompt for text input. Ctrl+C to cancel, empty = None."""
52
+ result = await safe_ask(questionary.text(prompt, default=default, style=APP_STYLE))
53
+ return result if result else None
ot/config/__init__.py ADDED
@@ -0,0 +1,46 @@
1
+ """Centralized configuration for OneTool.
2
+
3
+ This module provides a single source of truth for all configuration settings
4
+ via YAML configuration for tool discovery and settings.
5
+
6
+ Usage:
7
+ from ot.config import get_config, load_config
8
+
9
+ config = get_config()
10
+ print(config.log_level)
11
+ print(config.tools_dir)
12
+
13
+ # For tools to access their configuration:
14
+ from ot.config import get_tool_config
15
+
16
+ class Config(BaseModel):
17
+ timeout: float = 60.0
18
+
19
+ config = get_tool_config("brave", Config)
20
+ """
21
+
22
+ from ot.config.loader import (
23
+ OneToolConfig,
24
+ SnippetDef,
25
+ SnippetParam,
26
+ get_config,
27
+ is_log_verbose,
28
+ load_config,
29
+ )
30
+ from ot.config.mcp import McpServerConfig
31
+ from ot.config.secrets import get_secret, get_secrets, load_secrets
32
+ from ot.config.tool_config import get_tool_config
33
+
34
+ __all__ = [
35
+ "McpServerConfig",
36
+ "OneToolConfig",
37
+ "SnippetDef",
38
+ "SnippetParam",
39
+ "get_config",
40
+ "get_secret",
41
+ "get_secrets",
42
+ "get_tool_config",
43
+ "is_log_verbose",
44
+ "load_config",
45
+ "load_secrets",
46
+ ]
@@ -0,0 +1,4 @@
1
+ # Benchmark Harness configuration
2
+ # Run benchmarks to test OneTool performance and tool behavior
3
+
4
+ log_level: INFO
@@ -0,0 +1,33 @@
1
+ %% API Flow Template - Sequence Diagram
2
+ %% Replace placeholders with actual service names and operations
3
+
4
+ sequenceDiagram
5
+ participant C as Client
6
+ participant GW as API Gateway
7
+ participant S as Service
8
+ participant DB as Database
9
+
10
+ Note over C,DB: Request Flow
11
+
12
+ C->>GW: POST /api/resource
13
+ activate GW
14
+
15
+ GW->>GW: Validate token
16
+ alt Invalid token
17
+ GW-->>C: 401 Unauthorized
18
+ else Valid token
19
+ GW->>S: Forward request
20
+ activate S
21
+
22
+ S->>DB: Query data
23
+ activate DB
24
+ DB-->>S: Result set
25
+ deactivate DB
26
+
27
+ S-->>GW: Response payload
28
+ deactivate S
29
+
30
+ GW-->>C: 200 OK + data
31
+ end
32
+
33
+ deactivate GW
@@ -0,0 +1,30 @@
1
+ @startuml C4 Context Diagram
2
+ !include <C4/C4_Context>
3
+
4
+ title System Context Diagram - [System Name]
5
+
6
+ ' Actors
7
+ Person(user, "User", "A user of the system who needs to accomplish tasks")
8
+ Person(admin, "Administrator", "Manages system configuration and users")
9
+
10
+ ' Core system
11
+ System(system, "My System", "Provides the main functionality that users need")
12
+
13
+ ' External systems
14
+ System_Ext(email, "Email System", "Sends notifications and alerts")
15
+ System_Ext(payment, "Payment Provider", "Handles payment processing")
16
+ System_Ext(identity, "Identity Provider", "Manages authentication via SSO")
17
+
18
+ ' Relationships
19
+ Rel(user, system, "Uses", "HTTPS")
20
+ Rel(admin, system, "Administers", "HTTPS")
21
+
22
+ Rel(system, email, "Sends emails using", "SMTP")
23
+ Rel(system, payment, "Processes payments via", "HTTPS/REST")
24
+ Rel(system, identity, "Authenticates users with", "OIDC")
25
+
26
+ ' Layout hints
27
+ Lay_D(user, system)
28
+ Lay_R(system, email)
29
+
30
+ @enduml
@@ -0,0 +1,87 @@
1
+ %% Class Diagram Template
2
+ %% Replace with your actual data model
3
+
4
+ classDiagram
5
+ class User {
6
+ +String id
7
+ +String email
8
+ +String name
9
+ +DateTime createdAt
10
+ +DateTime updatedAt
11
+ +login() bool
12
+ +logout() void
13
+ +updateProfile(data) User
14
+ }
15
+
16
+ class Organisation {
17
+ +String id
18
+ +String name
19
+ +String slug
20
+ +Plan plan
21
+ +getMembers() List~User~
22
+ +addMember(user) void
23
+ +removeMember(user) void
24
+ }
25
+
26
+ class Project {
27
+ +String id
28
+ +String name
29
+ +String description
30
+ +Status status
31
+ +DateTime deadline
32
+ +getTasks() List~Task~
33
+ +addTask(task) void
34
+ +archive() void
35
+ }
36
+
37
+ class Task {
38
+ +String id
39
+ +String title
40
+ +String description
41
+ +Priority priority
42
+ +Status status
43
+ +User assignee
44
+ +assign(user) void
45
+ +complete() void
46
+ }
47
+
48
+ class Comment {
49
+ +String id
50
+ +String content
51
+ +User author
52
+ +DateTime createdAt
53
+ +edit(content) void
54
+ +delete() void
55
+ }
56
+
57
+ %% Relationships
58
+ User "1" --> "*" Organisation : belongs to
59
+ Organisation "1" --> "*" Project : owns
60
+ Project "1" --> "*" Task : contains
61
+ User "1" --> "*" Task : assigned to
62
+ Task "1" --> "*" Comment : has
63
+ User "1" --> "*" Comment : writes
64
+
65
+ %% Enums
66
+ class Status {
67
+ <<enumeration>>
68
+ DRAFT
69
+ ACTIVE
70
+ COMPLETED
71
+ ARCHIVED
72
+ }
73
+
74
+ class Priority {
75
+ <<enumeration>>
76
+ LOW
77
+ MEDIUM
78
+ HIGH
79
+ CRITICAL
80
+ }
81
+
82
+ class Plan {
83
+ <<enumeration>>
84
+ FREE
85
+ PRO
86
+ ENTERPRISE
87
+ }
@@ -0,0 +1,70 @@
1
+ %% Feature Mindmap Template
2
+ %% Replace with your actual feature breakdown
3
+
4
+ mindmap
5
+ root((Product))
6
+ Authentication
7
+ Login
8
+ Email/Password
9
+ Social OAuth
10
+ SSO/SAML
11
+ Registration
12
+ Email verification
13
+ Onboarding flow
14
+ Security
15
+ 2FA/MFA
16
+ Session management
17
+ Password policies
18
+ User Management
19
+ Profiles
20
+ Avatar upload
21
+ Preferences
22
+ Notifications
23
+ Organisations
24
+ Team creation
25
+ Role assignment
26
+ Invitations
27
+ Permissions
28
+ Role-based access
29
+ Resource sharing
30
+ Audit logging
31
+ Core Features
32
+ Dashboard
33
+ Analytics widgets
34
+ Quick actions
35
+ Recent activity
36
+ Projects
37
+ CRUD operations
38
+ Collaboration
39
+ Version history
40
+ Tasks
41
+ Assignment
42
+ Due dates
43
+ Comments
44
+ Attachments
45
+ Integrations
46
+ APIs
47
+ REST endpoints
48
+ GraphQL
49
+ Webhooks
50
+ Third-party
51
+ Slack
52
+ GitHub
53
+ Jira
54
+ Import/Export
55
+ CSV
56
+ JSON
57
+ PDF reports
58
+ Infrastructure
59
+ Performance
60
+ Caching
61
+ CDN
62
+ Database optimisation
63
+ Reliability
64
+ Backups
65
+ Monitoring
66
+ Alerting
67
+ Scalability
68
+ Load balancing
69
+ Auto-scaling
70
+ Multi-region
@@ -0,0 +1,81 @@
1
+ # Microservices Architecture Template
2
+ # Replace placeholders with actual service names
3
+
4
+ direction: right
5
+
6
+ # External actors
7
+ user: "User" {
8
+ shape: person
9
+ }
10
+
11
+ # Frontend layer
12
+ frontend: "Frontend" {
13
+ style.fill: "#e3f2fd"
14
+
15
+ web: "Web App"
16
+ mobile: "Mobile App"
17
+ }
18
+
19
+ # API layer
20
+ gateway: "API Gateway" {
21
+ style.fill: "#fff3e0"
22
+
23
+ auth: "Auth"
24
+ routing: "Router"
25
+ rate_limit: "Rate Limiter"
26
+ }
27
+
28
+ # Services layer
29
+ services: "Services" {
30
+ style.fill: "#e8f5e9"
31
+
32
+ user_svc: "User Service"
33
+ order_svc: "Order Service"
34
+ notification_svc: "Notification Service"
35
+ }
36
+
37
+ # Data layer
38
+ data: "Data Stores" {
39
+ style.fill: "#fce4ec"
40
+
41
+ postgres: "PostgreSQL" {
42
+ shape: cylinder
43
+ }
44
+ redis: "Redis" {
45
+ shape: cylinder
46
+ }
47
+ queue: "Message Queue" {
48
+ shape: queue
49
+ }
50
+ }
51
+
52
+ # External services
53
+ external: "External" {
54
+ style.stroke-dash: 3
55
+
56
+ email: "Email Provider"
57
+ payment: "Payment Gateway"
58
+ }
59
+
60
+ # Connections
61
+ user -> frontend.web
62
+ user -> frontend.mobile
63
+
64
+ frontend.web -> gateway.routing
65
+ frontend.mobile -> gateway.routing
66
+
67
+ gateway.routing -> gateway.auth
68
+ gateway.auth -> services.user_svc
69
+ gateway.routing -> services.order_svc
70
+ gateway.routing -> services.notification_svc
71
+
72
+ services.user_svc -> data.postgres
73
+ services.order_svc -> data.postgres
74
+ services.order_svc -> data.queue
75
+
76
+ services.notification_svc -> data.queue
77
+ services.notification_svc -> external.email
78
+
79
+ services.order_svc -> external.payment
80
+
81
+ data.redis <- gateway.rate_limit: "Rate limits"
@@ -0,0 +1,37 @@
1
+ %% Project Gantt Chart Template
2
+ %% Replace with your actual project timeline
3
+
4
+ gantt
5
+ title Project Timeline
6
+ dateFormat YYYY-MM-DD
7
+ excludes weekends
8
+
9
+ section Planning
10
+ Requirements gathering :a1, 2024-01-08, 5d
11
+ Technical design :a2, after a1, 5d
12
+ Architecture review :milestone, m1, after a2, 0d
13
+
14
+ section Development
15
+ Core infrastructure :b1, after m1, 10d
16
+ Feature A implementation :b2, after b1, 8d
17
+ Feature B implementation :b3, after b1, 12d
18
+ Integration :b4, after b2, 5d
19
+ Development complete :milestone, m2, after b4, 0d
20
+
21
+ section Testing
22
+ Unit testing :c1, after b2, 5d
23
+ Integration testing :c2, after m2, 5d
24
+ Performance testing :c3, after c2, 3d
25
+ UAT :c4, after c3, 5d
26
+ Testing complete :milestone, m3, after c4, 0d
27
+
28
+ section Deployment
29
+ Staging deployment :d1, after m3, 2d
30
+ Production preparation :d2, after d1, 2d
31
+ Go-live :milestone, m4, after d2, 0d
32
+ Post-launch support :d3, after m4, 5d
33
+
34
+ section Documentation
35
+ API documentation :e1, after b1, 15d
36
+ User guide :e2, after c2, 10d
37
+ Release notes :e3, after m3, 3d