crowdtime-cli 0.6.0__tar.gz → 0.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/PKG-INFO +1 -1
  2. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/pyproject.toml +1 -1
  3. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/__init__.py +1 -1
  4. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/org_cmd.py +27 -0
  5. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/skills/crowdtime/SKILL.md +3 -2
  6. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/skills/crowdtime/references/commands.md +11 -2
  7. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/skills/crowdtime/references/workflows.md +1 -3
  8. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/.gitignore +0 -0
  9. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/LICENSE +0 -0
  10. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/README.md +0 -0
  11. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/auth.py +0 -0
  12. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/client.py +0 -0
  13. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/__init__.py +0 -0
  14. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/ai_cmd.py +0 -0
  15. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/auth_cmd.py +0 -0
  16. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/billing_cmd.py +0 -0
  17. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/clients_cmd.py +0 -0
  18. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/config_cmd.py +0 -0
  19. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/expense_cmd.py +0 -0
  20. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/favorites_cmd.py +0 -0
  21. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/invoice_cmd.py +0 -0
  22. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/log_cmd.py +0 -0
  23. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/payroll_cmd.py +0 -0
  24. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/projects_cmd.py +0 -0
  25. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/report_cmd.py +0 -0
  26. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/skill_cmd.py +0 -0
  27. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/tasks_cmd.py +0 -0
  28. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/timer_cmd.py +0 -0
  29. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/commands/timesheet_cmd.py +0 -0
  30. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/config.py +0 -0
  31. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/formatters.py +0 -0
  32. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/main.py +0 -0
  33. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/models.py +0 -0
  34. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/oauth.py +0 -0
  35. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/resolvers.py +0 -0
  36. {crowdtime_cli-0.6.0 → crowdtime_cli-0.7.0}/src/crowdtime_cli/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crowdtime-cli
3
- Version: 0.6.0
3
+ Version: 0.7.0
4
4
  Summary: AI-powered time tracking CLI — a modern, developer-friendly alternative to Harvest
5
5
  Project-URL: Homepage, https://crowdtime.lat
6
6
  Project-URL: Documentation, https://crowdtime.lat/docs
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "crowdtime-cli"
3
- version = "0.6.0"
3
+ version = "0.7.0"
4
4
  description = "AI-powered time tracking CLI — a modern, developer-friendly alternative to Harvest"
5
5
  readme = "README.md"
6
6
  license = {text = "Proprietary"}
@@ -1,3 +1,3 @@
1
1
  """CrowdTime CLI - AI-powered time tracking from the command line."""
2
2
 
3
- __version__ = "0.6.0"
3
+ __version__ = "0.7.0"
@@ -64,6 +64,33 @@ def list_orgs(
64
64
  raise typer.Exit(1)
65
65
 
66
66
 
67
+ @app.command("create")
68
+ def create_org(
69
+ name: str = typer.Argument(..., help="Name for the new organization."),
70
+ output_json: bool = typer.Option(False, "--json", help="Output as JSON."),
71
+ ) -> None:
72
+ """Create a new organization."""
73
+ client = CrowdTimeClient(require_auth=True, require_org=False)
74
+
75
+ try:
76
+ data = client.post(
77
+ "/api/v1/organizations/create-personal/",
78
+ data={"name": name},
79
+ org_scoped=False,
80
+ )
81
+ org = data.get("organization", {})
82
+
83
+ if output_json:
84
+ print_json(data)
85
+ else:
86
+ slug = org.get("slug", "")
87
+ format_success(f"Organization '{org.get('name', name)}' created (slug: {slug})")
88
+ console.print(f"[dim]Switch to it with: ct org switch {slug}[/dim]")
89
+ except APIError as e:
90
+ format_error(e.message)
91
+ raise typer.Exit(1)
92
+
93
+
67
94
  @app.command("switch")
68
95
  def switch_org(
69
96
  slug: str = typer.Argument(..., help="Organization slug to switch to."),
@@ -246,7 +246,7 @@ ct payroll payments # List all payments
246
246
  ct payroll payments --period 2026-03 --status paid
247
247
  ```
248
248
 
249
- **Access**: Only HR managers (`is_hr_manager=True`), admins, and owners can access payroll. Regular members cannot see any payroll data.
249
+ **Access**: Only admins and owners can access payroll. Regular members cannot see any payroll data.
250
250
 
251
251
  **Compensation types**: `hourly` (gross = hours × rate) or `salary` (fixed monthly amount, no proration).
252
252
 
@@ -255,8 +255,9 @@ ct payroll payments --period 2026-03 --status paid
255
255
  ### Organizations
256
256
  ```bash
257
257
  ct org list # List your organizations
258
+ ct org create "My Company" # Create a new organization
258
259
  ct org switch <slug> # Switch active organization
259
- ct org members # List members
260
+ ct org members # List members (manager+ only)
260
261
  ct org invitations # List pending invitations
261
262
  ct org invite user@example.com -r member
262
263
  ct org invite client@acme.com -r viewer # External client stakeholder (read-only)
@@ -580,7 +580,7 @@ Endpoint: `GET /billing/events/`
580
580
 
581
581
  ## ct payroll
582
582
 
583
- Access restricted to HR managers (`is_hr_manager=True`), admins, and owners.
583
+ Access restricted to admins and owners.
584
584
 
585
585
  ### ct payroll (bare / summary)
586
586
 
@@ -984,6 +984,15 @@ ct org list [--json]
984
984
  Lists organizations you belong to. Marks current with `*`. Non-org-scoped.
985
985
  Endpoint: `GET /api/v1/organizations/`
986
986
 
987
+ ### ct org create
988
+
989
+ ```
990
+ ct org create NAME [--json]
991
+ ```
992
+
993
+ Creates a new organization with the given name. Max 10 organizations per user. Non-org-scoped.
994
+ Endpoint: `POST /api/v1/organizations/create-personal/`
995
+
987
996
  ### ct org switch
988
997
 
989
998
  ```
@@ -998,7 +1007,7 @@ Switches active organization. Saves to config `defaults.organization`.
998
1007
  ct org members [--json]
999
1008
  ```
1000
1009
 
1001
- Shows: Name, Email, Role, Status. Endpoint: `GET /members/`
1010
+ Shows: Name, Email, Role, Status. Requires manager+ role. Endpoint: `GET /members/`
1002
1011
 
1003
1012
  ### ct org invite
1004
1013
 
@@ -700,9 +700,7 @@ ct payroll payments --member alice@company.com
700
700
 
701
701
  ### Payroll Access Control
702
702
 
703
- Only HR managers, admins, and owners can access payroll data. To grant HR access:
704
- - Use the web admin or API to set `is_hr_manager=True` on a member's membership
705
- - Admins and owners can do this via `PATCH /api/v1/organizations/<slug>/members/<id>/`
703
+ Only admins and owners can access payroll data.
706
704
 
707
705
  ---
708
706
 
File without changes
File without changes
File without changes