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.
- bench/__init__.py +5 -0
- bench/cli.py +69 -0
- bench/harness/__init__.py +66 -0
- bench/harness/client.py +692 -0
- bench/harness/config.py +397 -0
- bench/harness/csv_writer.py +109 -0
- bench/harness/evaluate.py +512 -0
- bench/harness/metrics.py +283 -0
- bench/harness/runner.py +899 -0
- bench/py.typed +0 -0
- bench/reporter.py +629 -0
- bench/run.py +487 -0
- bench/secrets.py +101 -0
- bench/utils.py +16 -0
- onetool/__init__.py +4 -0
- onetool/cli.py +391 -0
- onetool/py.typed +0 -0
- onetool_mcp-1.0.0b1.dist-info/METADATA +163 -0
- onetool_mcp-1.0.0b1.dist-info/RECORD +132 -0
- onetool_mcp-1.0.0b1.dist-info/WHEEL +4 -0
- onetool_mcp-1.0.0b1.dist-info/entry_points.txt +3 -0
- onetool_mcp-1.0.0b1.dist-info/licenses/LICENSE.txt +687 -0
- onetool_mcp-1.0.0b1.dist-info/licenses/NOTICE.txt +64 -0
- ot/__init__.py +37 -0
- ot/__main__.py +6 -0
- ot/_cli.py +107 -0
- ot/_tui.py +53 -0
- ot/config/__init__.py +46 -0
- ot/config/defaults/bench.yaml +4 -0
- ot/config/defaults/diagram-templates/api-flow.mmd +33 -0
- ot/config/defaults/diagram-templates/c4-context.puml +30 -0
- ot/config/defaults/diagram-templates/class-diagram.mmd +87 -0
- ot/config/defaults/diagram-templates/feature-mindmap.mmd +70 -0
- ot/config/defaults/diagram-templates/microservices.d2 +81 -0
- ot/config/defaults/diagram-templates/project-gantt.mmd +37 -0
- ot/config/defaults/diagram-templates/state-machine.mmd +42 -0
- ot/config/defaults/onetool.yaml +25 -0
- ot/config/defaults/prompts.yaml +97 -0
- ot/config/defaults/servers.yaml +7 -0
- ot/config/defaults/snippets.yaml +4 -0
- ot/config/defaults/tool_templates/__init__.py +7 -0
- ot/config/defaults/tool_templates/extension.py +52 -0
- ot/config/defaults/tool_templates/isolated.py +61 -0
- ot/config/dynamic.py +121 -0
- ot/config/global_templates/__init__.py +2 -0
- ot/config/global_templates/bench-secrets-template.yaml +6 -0
- ot/config/global_templates/bench.yaml +9 -0
- ot/config/global_templates/onetool.yaml +27 -0
- ot/config/global_templates/secrets-template.yaml +44 -0
- ot/config/global_templates/servers.yaml +18 -0
- ot/config/global_templates/snippets.yaml +235 -0
- ot/config/loader.py +1087 -0
- ot/config/mcp.py +145 -0
- ot/config/secrets.py +190 -0
- ot/config/tool_config.py +125 -0
- ot/decorators.py +116 -0
- ot/executor/__init__.py +35 -0
- ot/executor/base.py +16 -0
- ot/executor/fence_processor.py +83 -0
- ot/executor/linter.py +142 -0
- ot/executor/pack_proxy.py +260 -0
- ot/executor/param_resolver.py +140 -0
- ot/executor/pep723.py +288 -0
- ot/executor/result_store.py +369 -0
- ot/executor/runner.py +496 -0
- ot/executor/simple.py +163 -0
- ot/executor/tool_loader.py +396 -0
- ot/executor/validator.py +398 -0
- ot/executor/worker_pool.py +388 -0
- ot/executor/worker_proxy.py +189 -0
- ot/http_client.py +145 -0
- ot/logging/__init__.py +37 -0
- ot/logging/config.py +315 -0
- ot/logging/entry.py +213 -0
- ot/logging/format.py +188 -0
- ot/logging/span.py +349 -0
- ot/meta.py +1555 -0
- ot/paths.py +453 -0
- ot/prompts.py +218 -0
- ot/proxy/__init__.py +21 -0
- ot/proxy/manager.py +396 -0
- ot/py.typed +0 -0
- ot/registry/__init__.py +189 -0
- ot/registry/models.py +57 -0
- ot/registry/parser.py +269 -0
- ot/registry/registry.py +413 -0
- ot/server.py +315 -0
- ot/shortcuts/__init__.py +15 -0
- ot/shortcuts/aliases.py +87 -0
- ot/shortcuts/snippets.py +258 -0
- ot/stats/__init__.py +35 -0
- ot/stats/html.py +250 -0
- ot/stats/jsonl_writer.py +283 -0
- ot/stats/reader.py +354 -0
- ot/stats/timing.py +57 -0
- ot/support.py +63 -0
- ot/tools.py +114 -0
- ot/utils/__init__.py +81 -0
- ot/utils/batch.py +161 -0
- ot/utils/cache.py +120 -0
- ot/utils/deps.py +403 -0
- ot/utils/exceptions.py +23 -0
- ot/utils/factory.py +179 -0
- ot/utils/format.py +65 -0
- ot/utils/http.py +202 -0
- ot/utils/platform.py +45 -0
- ot/utils/sanitize.py +130 -0
- ot/utils/truncate.py +69 -0
- ot_tools/__init__.py +4 -0
- ot_tools/_convert/__init__.py +12 -0
- ot_tools/_convert/excel.py +279 -0
- ot_tools/_convert/pdf.py +254 -0
- ot_tools/_convert/powerpoint.py +268 -0
- ot_tools/_convert/utils.py +358 -0
- ot_tools/_convert/word.py +283 -0
- ot_tools/brave_search.py +604 -0
- ot_tools/code_search.py +736 -0
- ot_tools/context7.py +495 -0
- ot_tools/convert.py +614 -0
- ot_tools/db.py +415 -0
- ot_tools/diagram.py +1604 -0
- ot_tools/diagram.yaml +167 -0
- ot_tools/excel.py +1372 -0
- ot_tools/file.py +1348 -0
- ot_tools/firecrawl.py +732 -0
- ot_tools/grounding_search.py +646 -0
- ot_tools/package.py +604 -0
- ot_tools/py.typed +0 -0
- ot_tools/ripgrep.py +544 -0
- ot_tools/scaffold.py +471 -0
- ot_tools/transform.py +213 -0
- 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
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,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
|