aiel-cli 0.1.2__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.
- aiel/__init__.py +2 -0
- aiel/cli.py +141 -0
- aiel/roadmap.py +52 -0
- aiel_cli-0.1.2.dist-info/METADATA +59 -0
- aiel_cli-0.1.2.dist-info/RECORD +8 -0
- aiel_cli-0.1.2.dist-info/WHEEL +4 -0
- aiel_cli-0.1.2.dist-info/entry_points.txt +2 -0
- aiel_cli-0.1.2.dist-info/licenses/LICENSE +24 -0
aiel/__init__.py
ADDED
aiel/cli.py
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typer
|
|
4
|
+
from rich.console import Console
|
|
5
|
+
from rich.panel import Panel
|
|
6
|
+
from rich.table import Table
|
|
7
|
+
|
|
8
|
+
from . import __version__
|
|
9
|
+
from .roadmap import PLAN, by_sprint
|
|
10
|
+
|
|
11
|
+
app = typer.Typer(no_args_is_help=True, add_completion=True)
|
|
12
|
+
auth_app = typer.Typer(no_args_is_help=True)
|
|
13
|
+
ctx_app = typer.Typer(no_args_is_help=True)
|
|
14
|
+
ws_app = typer.Typer(no_args_is_help=True)
|
|
15
|
+
proj_app = typer.Typer(no_args_is_help=True)
|
|
16
|
+
file_app = typer.Typer(no_args_is_help=True)
|
|
17
|
+
sdk_app = typer.Typer(no_args_is_help=True)
|
|
18
|
+
|
|
19
|
+
app.add_typer(auth_app, name="auth")
|
|
20
|
+
app.add_typer(ctx_app, name="context")
|
|
21
|
+
app.add_typer(ws_app, name="workspace")
|
|
22
|
+
app.add_typer(proj_app, name="project")
|
|
23
|
+
app.add_typer(file_app, name="file")
|
|
24
|
+
app.add_typer(sdk_app, name="sdk")
|
|
25
|
+
|
|
26
|
+
console = Console()
|
|
27
|
+
|
|
28
|
+
def coming_soon(cmd: str) -> None:
|
|
29
|
+
plan = PLAN.get(cmd)
|
|
30
|
+
if not plan:
|
|
31
|
+
console.print(Panel.fit(f"[yellow]Planned[/yellow]\ncommand: [bold]{cmd}[/bold]\nsprint: [bold]TBD[/bold]\nintent: TBD"))
|
|
32
|
+
raise typer.Exit(code=0)
|
|
33
|
+
|
|
34
|
+
console.print(
|
|
35
|
+
Panel.fit(
|
|
36
|
+
f"[yellow]Planned (not implemented yet)[/yellow]\n"
|
|
37
|
+
f"command: [bold]{plan.command}[/bold]\n"
|
|
38
|
+
f"sprint: [bold]Sprint {plan.sprint}[/bold]\n"
|
|
39
|
+
f"intent: {plan.intent}"
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
raise typer.Exit(code=0)
|
|
43
|
+
|
|
44
|
+
@app.command()
|
|
45
|
+
def roadmap() -> None:
|
|
46
|
+
"""Show the command roadmap and sprint plan."""
|
|
47
|
+
groups = by_sprint()
|
|
48
|
+
for sprint, items in groups.items():
|
|
49
|
+
table = Table(title=f"Sprint {sprint}")
|
|
50
|
+
table.add_column("Command", style="bold")
|
|
51
|
+
table.add_column("Intent")
|
|
52
|
+
for p in items:
|
|
53
|
+
table.add_row(p.command, p.intent)
|
|
54
|
+
console.print(table)
|
|
55
|
+
|
|
56
|
+
@app.command()
|
|
57
|
+
def version() -> None:
|
|
58
|
+
"""Print CLI version."""
|
|
59
|
+
console.print(Panel.fit(f"[green]aiel[/green] version [bold]{__version__}[/bold]"))
|
|
60
|
+
# Requirement: every command returns a sprint plan too
|
|
61
|
+
coming_soon("aiel version")
|
|
62
|
+
|
|
63
|
+
# ----- Sprint 1 -----
|
|
64
|
+
@app.command()
|
|
65
|
+
def init() -> None:
|
|
66
|
+
coming_soon("aiel init")
|
|
67
|
+
|
|
68
|
+
@auth_app.command("login")
|
|
69
|
+
def auth_login() -> None:
|
|
70
|
+
coming_soon("aiel auth login")
|
|
71
|
+
|
|
72
|
+
@auth_app.command("status")
|
|
73
|
+
def auth_status() -> None:
|
|
74
|
+
coming_soon("aiel auth status")
|
|
75
|
+
|
|
76
|
+
@auth_app.command("logout")
|
|
77
|
+
def auth_logout() -> None:
|
|
78
|
+
coming_soon("aiel auth logout")
|
|
79
|
+
|
|
80
|
+
@ctx_app.command("show")
|
|
81
|
+
def context_show() -> None:
|
|
82
|
+
coming_soon("aiel context show")
|
|
83
|
+
|
|
84
|
+
@ctx_app.command("set")
|
|
85
|
+
def context_set() -> None:
|
|
86
|
+
coming_soon("aiel context set")
|
|
87
|
+
|
|
88
|
+
# ----- Sprint 2 -----
|
|
89
|
+
@ws_app.command("ls")
|
|
90
|
+
def workspace_ls() -> None:
|
|
91
|
+
coming_soon("aiel workspace ls")
|
|
92
|
+
|
|
93
|
+
@ws_app.command("use")
|
|
94
|
+
def workspace_use() -> None:
|
|
95
|
+
coming_soon("aiel workspace use")
|
|
96
|
+
|
|
97
|
+
@proj_app.command("ls")
|
|
98
|
+
def project_ls() -> None:
|
|
99
|
+
coming_soon("aiel project ls")
|
|
100
|
+
|
|
101
|
+
@proj_app.command("create")
|
|
102
|
+
def project_create() -> None:
|
|
103
|
+
coming_soon("aiel project create")
|
|
104
|
+
|
|
105
|
+
# ----- Sprint 3 -----
|
|
106
|
+
@file_app.command("ls")
|
|
107
|
+
def file_ls() -> None:
|
|
108
|
+
coming_soon("aiel file ls")
|
|
109
|
+
|
|
110
|
+
@file_app.command("cat")
|
|
111
|
+
def file_cat() -> None:
|
|
112
|
+
coming_soon("aiel file cat")
|
|
113
|
+
|
|
114
|
+
@file_app.command("write")
|
|
115
|
+
def file_write() -> None:
|
|
116
|
+
coming_soon("aiel file write")
|
|
117
|
+
|
|
118
|
+
@file_app.command("rm")
|
|
119
|
+
def file_rm() -> None:
|
|
120
|
+
coming_soon("aiel file rm")
|
|
121
|
+
|
|
122
|
+
@sdk_app.command("pin")
|
|
123
|
+
def sdk_pin() -> None:
|
|
124
|
+
coming_soon("aiel sdk pin")
|
|
125
|
+
|
|
126
|
+
@sdk_app.command("status")
|
|
127
|
+
def sdk_status() -> None:
|
|
128
|
+
coming_soon("aiel sdk status")
|
|
129
|
+
|
|
130
|
+
# ----- Sprint 4 -----
|
|
131
|
+
@app.command()
|
|
132
|
+
def run() -> None:
|
|
133
|
+
coming_soon("aiel run")
|
|
134
|
+
|
|
135
|
+
@app.command()
|
|
136
|
+
def logs() -> None:
|
|
137
|
+
coming_soon("aiel logs")
|
|
138
|
+
|
|
139
|
+
@app.command()
|
|
140
|
+
def doctor() -> None:
|
|
141
|
+
coming_soon("aiel doctor")
|
aiel/roadmap.py
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing import Dict, List
|
|
5
|
+
|
|
6
|
+
@dataclass(frozen=True)
|
|
7
|
+
class CommandPlan:
|
|
8
|
+
command: str # e.g. "aiel file ls"
|
|
9
|
+
sprint: int # e.g. 3
|
|
10
|
+
intent: str # what it will do
|
|
11
|
+
|
|
12
|
+
# Update sprint numbers / wording here only.
|
|
13
|
+
PLAN: Dict[str, CommandPlan] = {
|
|
14
|
+
# Sprint 0
|
|
15
|
+
"aiel roadmap": CommandPlan("aiel roadmap", 0, "Show the command roadmap and sprint plan."),
|
|
16
|
+
"aiel version": CommandPlan("aiel version", 0, "Print CLI version and build info."),
|
|
17
|
+
|
|
18
|
+
# Sprint 1
|
|
19
|
+
"aiel init": CommandPlan("aiel init", 1, "Initialize local context file (aiel.toml) with base_url/tenant/workspace/project."),
|
|
20
|
+
"aiel auth login": CommandPlan("aiel auth login", 1, "Authenticate and store token securely (env/keychain/file fallback)."),
|
|
21
|
+
"aiel auth status": CommandPlan("aiel auth status", 1, "Show whether auth is configured and valid."),
|
|
22
|
+
"aiel auth logout": CommandPlan("aiel auth logout", 1, "Remove stored credentials."),
|
|
23
|
+
"aiel context show": CommandPlan("aiel context show", 1, "Show current tenant/workspace/project context."),
|
|
24
|
+
"aiel context set": CommandPlan("aiel context set", 1, "Set default tenant/workspace/project context."),
|
|
25
|
+
|
|
26
|
+
# Sprint 2
|
|
27
|
+
"aiel workspace ls": CommandPlan("aiel workspace ls", 2, "List available workspaces for the authenticated user."),
|
|
28
|
+
"aiel workspace use": CommandPlan("aiel workspace use", 2, "Set active workspace in the project context."),
|
|
29
|
+
"aiel project ls": CommandPlan("aiel project ls", 2, "List projects in the current workspace."),
|
|
30
|
+
"aiel project create": CommandPlan("aiel project create", 2, "Create a new project in the current workspace."),
|
|
31
|
+
|
|
32
|
+
# Sprint 3
|
|
33
|
+
"aiel file ls": CommandPlan("aiel file ls", 3, "List remote files stored in the workspace (backed by GCS)."),
|
|
34
|
+
"aiel file cat": CommandPlan("aiel file cat", 3, "Print the contents of a remote file."),
|
|
35
|
+
"aiel file write": CommandPlan("aiel file write", 3, "Write/update a remote file (via stdin/text)."),
|
|
36
|
+
"aiel file rm": CommandPlan("aiel file rm", 3, "Delete a remote file."),
|
|
37
|
+
"aiel sdk pin": CommandPlan("aiel sdk pin", 3, "Pin a remote SDK artifact (GCS URI + sha256) for reproducible runs."),
|
|
38
|
+
"aiel sdk status": CommandPlan("aiel sdk status", 3, "Show the pinned SDK and verification status."),
|
|
39
|
+
|
|
40
|
+
# Sprint 4
|
|
41
|
+
"aiel run": CommandPlan("aiel run", 4, "Trigger remote execution via POST /sandbox/flows/run."),
|
|
42
|
+
"aiel logs": CommandPlan("aiel logs", 4, "Stream logs for a run (SSE/WebSocket; polling fallback)."),
|
|
43
|
+
"aiel doctor": CommandPlan("aiel doctor", 4, "Connectivity/auth/context diagnostics + actionable fixes."),
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
def by_sprint() -> dict[int, list[CommandPlan]]:
|
|
47
|
+
out: dict[int, list[CommandPlan]] = {}
|
|
48
|
+
for p in PLAN.values():
|
|
49
|
+
out.setdefault(p.sprint, []).append(p)
|
|
50
|
+
for s in out:
|
|
51
|
+
out[s] = sorted(out[s], key=lambda x: x.command)
|
|
52
|
+
return dict(sorted(out.items(), key=lambda kv: kv[0]))
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: aiel-cli
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: AI Execution Layer CLI
|
|
5
|
+
Author-email: Aldenir Flauzino <aldenirsrv@gmail.com>
|
|
6
|
+
License:
|
|
7
|
+
```text
|
|
8
|
+
MIT License
|
|
9
|
+
|
|
10
|
+
Copyright (c) 2025 <Aldenir Flauzino>
|
|
11
|
+
|
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
+
in the Software without restriction, including without limitation the rights
|
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
+
furnished to do so, subject to the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be included in all
|
|
20
|
+
copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
+
SOFTWARE.
|
|
29
|
+
```
|
|
30
|
+
License-File: LICENSE
|
|
31
|
+
Requires-Python: >=3.10
|
|
32
|
+
Requires-Dist: httpx>=0.27.0
|
|
33
|
+
Requires-Dist: rich>=13.7.1
|
|
34
|
+
Requires-Dist: typer>=0.12.3
|
|
35
|
+
Description-Content-Type: text/markdown
|
|
36
|
+
|
|
37
|
+
# aiel — AI Execution Layer CLI
|
|
38
|
+
|
|
39
|
+
`aiel` is the command-line interface for the AI Execution Layer: a platform that centralizes and standardizes automation and AI actions in a controlled enterprise environment.
|
|
40
|
+
|
|
41
|
+
This initial release ships the CLI contract and roadmap (stub commands). Each command prints the sprint in which it will be implemented.
|
|
42
|
+
|
|
43
|
+
## Install
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pip install aiel
|
|
47
|
+
```
|
|
48
|
+
## Quick start
|
|
49
|
+
```bash
|
|
50
|
+
aiel roadmap
|
|
51
|
+
aiel init
|
|
52
|
+
aiel auth login
|
|
53
|
+
aiel file ls
|
|
54
|
+
aiel run
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Status
|
|
58
|
+
Current version: 0.1.1
|
|
59
|
+
Backend integration: not implemented yet (planned per sprint output)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
aiel/__init__.py,sha256=XySee34RJ-Tk1c-yvsmOiEbfNEKqXopov7Enaws6bm8,47
|
|
2
|
+
aiel/cli.py,sha256=CpdrIl9RwVHgWqM8elPyiS2xD1KpFVZxYt9iXCvQXTc,3628
|
|
3
|
+
aiel/roadmap.py,sha256=p3XLMSXsN3_jBU1PSaHfZazegDK78n-47hPL5O1vOPU,2982
|
|
4
|
+
aiel_cli-0.1.2.dist-info/METADATA,sha256=FpaYisDrO5A2Qonlx05o0uClPxKHYXi8B3v1DcqllDI,2174
|
|
5
|
+
aiel_cli-0.1.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
6
|
+
aiel_cli-0.1.2.dist-info/entry_points.txt,sha256=8_098BRELSYzEYF6jM2zQ3tqSJyFjfKbcYoa-t0XDrY,38
|
|
7
|
+
aiel_cli-0.1.2.dist-info/licenses/LICENSE,sha256=3K7y9MLSZqXPg85qZKE48wQFlJJl-pJylFnrflJGk-8,1087
|
|
8
|
+
aiel_cli-0.1.2.dist-info/RECORD,,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
```text
|
|
3
|
+
MIT License
|
|
4
|
+
|
|
5
|
+
Copyright (c) 2025 <Aldenir Flauzino>
|
|
6
|
+
|
|
7
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
in the Software without restriction, including without limitation the rights
|
|
10
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
furnished to do so, subject to the following conditions:
|
|
13
|
+
|
|
14
|
+
The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
copies or substantial portions of the Software.
|
|
16
|
+
|
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
SOFTWARE.
|
|
24
|
+
```
|