crowdtime-cli 0.17.0__tar.gz → 0.17.1__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 (43) hide show
  1. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/PKG-INFO +1 -1
  2. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/pyproject.toml +1 -1
  3. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/__init__.py +1 -1
  4. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/skills/crowdtime/SKILL.md +8 -5
  5. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/skills/crowdtime/references/commands.md +6 -4
  6. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/skills/crowdtime/references/workflows.md +4 -2
  7. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/.gitignore +0 -0
  8. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/LICENSE +0 -0
  9. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/README.md +0 -0
  10. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/auth.py +0 -0
  11. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/client.py +0 -0
  12. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/__init__.py +0 -0
  13. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/ai_cmd.py +0 -0
  14. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/auth_cmd.py +0 -0
  15. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/billing_cmd.py +0 -0
  16. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/calendar_cmd.py +0 -0
  17. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/clients_cmd.py +0 -0
  18. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/config_cmd.py +0 -0
  19. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/expense_cmd.py +0 -0
  20. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/favorites_cmd.py +0 -0
  21. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/insights_cmd.py +0 -0
  22. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/invoice_cmd.py +0 -0
  23. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/log_cmd.py +0 -0
  24. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/org_cmd.py +0 -0
  25. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/payroll_cmd.py +0 -0
  26. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/projects_cmd.py +0 -0
  27. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/pto_cmd.py +0 -0
  28. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/report_cmd.py +0 -0
  29. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/skill_cmd.py +0 -0
  30. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/tasks_cmd.py +0 -0
  31. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/team_cmd.py +0 -0
  32. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/timer_cmd.py +0 -0
  33. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/timesheet_cmd.py +0 -0
  34. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/commands/version_cmd.py +0 -0
  35. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/config.py +0 -0
  36. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/formatters.py +0 -0
  37. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/main.py +0 -0
  38. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/models.py +0 -0
  39. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/oauth.py +0 -0
  40. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/resolvers.py +0 -0
  41. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/skills/crowdtime/references/pto.md +0 -0
  42. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/utils.py +0 -0
  43. {crowdtime_cli-0.17.0 → crowdtime_cli-0.17.1}/src/crowdtime_cli/version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crowdtime-cli
3
- Version: 0.17.0
3
+ Version: 0.17.1
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.17.0"
3
+ version = "0.17.1"
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.17.0"
3
+ __version__ = "0.17.1"
@@ -99,7 +99,7 @@ Other log commands:
99
99
  ct log list --week # This week's entries
100
100
  ct log list --task "Design" --billable # Filter by task + billable
101
101
  ct log list --user <user-id> # See team member's entries (manager+)
102
- ct log list --format csv # CSV with financial columns
102
+ ct log list --format csv # CSV (rate/amount columns are empty below manager)
103
103
  ct log edit <entry-id> --duration 3h # Edit an entry
104
104
  ct log edit <entry-id> --task "Research" # Change task
105
105
  ct log delete <entry-id> # Delete an entry
@@ -165,8 +165,8 @@ ct p -a # include archived
165
165
  #### Project Members
166
166
  ```bash
167
167
  ct projects assignable-users <project-id> # Who can still be added (gives you the user IDs)
168
- ct projects update-member <project-id> <user-id> --role project_manager --rate 150 # Set per-project role & rate
169
- ct projects add-members <project-id> --user <uid1> --user <uid2> --role member --rate 120 # Bulk add
168
+ ct projects update-member <project-id> <user-id> --role project_manager --rate 150 # Set per-project role & rate (--rate: manager+)
169
+ ct projects add-members <project-id> --user <uid1> --user <uid2> --role member --rate 120 # Bulk add (--rate: manager+)
170
170
  ```
171
171
 
172
172
  **Adding someone to a project:** run `assignable-users` first to get the user
@@ -186,6 +186,8 @@ ct projects add-tasks <project-id> --task <tid1> --task <tid2> # Bulk assign ta
186
186
 
187
187
  **Note:** `--client` on `projects create` accepts a client name. If the client doesn't exist yet, it will be auto-created.
188
188
 
189
+ **Rates and money are manager+ only.** Hourly rates, budgets, fixed fees, billing types/modes, billable amounts, invoices and retainers are visible and editable only by account managers, admins and owners. For viewers, members and project managers the API returns these fields as `null`, silently ignores them on writes, and returns 403 on invoice/retainer endpoints. Don't offer rate or money operations to those roles, and never try to infer rates from other data.
190
+
189
191
  **Billing types** (*what* is charged): `time_and_materials` (default) or `fixed_fee` (an agreed price via `--fixed-fee`, billed instead of logged hours).
190
192
 
191
193
  **Billing modes** (*how* an hourly rate resolves, T&M only): `custom` (default), `per_task` (rate per task), `per_person` (rate per person).
@@ -567,5 +569,6 @@ Read `references/commands.md` for the full reference of every command, subcomman
567
569
  14. **Expenses** — when the user mentions expenses, receipts, or purchases, use the `ct expense` commands. Always suggest a category and ask if the expense is billable. If recording a billable expense for a client project, always set `--project` and `--billable` so it gets included automatically when the client is invoiced
568
570
  15. **Invoices include expenses** — when creating invoices with `ct invoice create --period`, billable expenses from the same period are automatically included as line items. Mention this to users so they know their expenses will appear on the invoice. Invoices can be grouped by `project`, `task`, `user`, `date`, or `none` via `--group-by`. Line items support discounts (`--discount-type fixed|percent|hours --discount-value N`)
569
571
  16. **Client contacts** — use `ct clients contacts` and `ct clients add-contact` to manage multiple contacts per client. Set `--primary` for the main point of contact. Use `--receives-invoices` to flag contacts who should receive invoice emails
570
- 17. **Payroll** — payroll data is strictly confidential. Only HR managers, admins, and owners can access it. When the user asks about payroll, always use the `ct payroll` commands. Compensation types are `hourly` (rate × hours) or `salary` (fixed monthly). Rate changes are always effective from the 1st of a month. The payroll workflow is: configure compensation → run liquidation → approve → mark paid
571
- 18. **PTO / Time Off** — always construct explicit `ct pto ...` commands. Never use magic routing or `ct ai parse` for PTO. Before requesting PTO, always confirm the exact date range with the user — date ambiguity is the most common source of mistakes. Use `YYYY-MM-DD` for a single day or `YYYY-MM-DD:YYYY-MM-DD` for a range. `ct pto request` creates a pending entry (the requester's approvers are notified by email); `ct pto add <user>` requires project manager+ with the subject in their scope, and creates an auto-approved entry. When reconciling missing hours for a user, always check `ct pto summary --user <email> --from X --to Y` before assuming the hours are missing. See `references/pto.md` for the full status lifecycle, kind definitions, and LLM guidance.
572
+ 17. **Rate confidentiality** — rates, budgets, amounts, invoices and retainers are manager+ only (see Projects). If a member, viewer or project manager asks about rates or billed amounts, tell them it's restricted to account managers instead of trying workarounds
573
+ 18. **Payroll** — payroll data is strictly confidential. Only HR managers, admins, and owners can access it. When the user asks about payroll, always use the `ct payroll` commands. Compensation types are `hourly` (rate × hours) or `salary` (fixed monthly). Rate changes are always effective from the 1st of a month. The payroll workflow is: configure compensation → run liquidation → approve → mark paid
574
+ 19. **PTO / Time Off** — always construct explicit `ct pto ...` commands. Never use magic routing or `ct ai parse` for PTO. Before requesting PTO, always confirm the exact date range with the user — date ambiguity is the most common source of mistakes. Use `YYYY-MM-DD` for a single day or `YYYY-MM-DD:YYYY-MM-DD` for a range. `ct pto request` creates a pending entry (the requester's approvers are notified by email); `ct pto add <user>` requires project manager+ with the subject in their scope, and creates an auto-approved entry. When reconciling missing hours for a user, always check `ct pto summary --user <email> --from X --to Y` before assuming the hours are missing. See `references/pto.md` for the full status lifecycle, kind definitions, and LLM guidance.
@@ -383,7 +383,7 @@ ct log list [options]
383
383
  | `--format` | string | Output: `table`, `json`, `csv` |
384
384
  | `--json` | flag | JSON output |
385
385
 
386
- CSV output includes financial columns: `hourly_rate`, `billable_amount`.
386
+ CSV output includes financial columns: `hourly_rate`, `billable_amount`. They are empty for viewers, members and project managers (rates and amounts are manager+ only).
387
387
 
388
388
  Endpoint: `GET /time/`
389
389
 
@@ -969,6 +969,8 @@ ct projects create NAME [options]
969
969
  >
970
970
  > When the fee is billed, that project's hours in the period are linked to the fee line and marked invoiced, so they stop showing as outstanding work without ever being charged twice. Until then they stay uninvoiced and available.
971
971
 
972
+ > **Confidentiality:** rates, budgets, fixed fees, billing settings, billable amounts, invoices and retainers are manager+ only. For viewers, members and project managers these fields come back `null`, are ignored on writes, and invoice/retainer endpoints return 403.
973
+
972
974
  **Billing modes** — *how* an hourly rate is resolved (T&M only):
973
975
  | Mode | Description |
974
976
  |------|-------------|
@@ -1064,7 +1066,7 @@ ct projects members PROJECT_ID [--json]
1064
1066
  | `PROJECT_ID` | string (required) | Project slug or UUID |
1065
1067
  | `--json` | flag | Output as JSON |
1066
1068
 
1067
- Lists all members assigned to a project with their project role, org role, hourly rate, and user ID.
1069
+ Lists all members assigned to a project with their project role, org role, hourly rate, and user ID. Rates are `null` below manager.
1068
1070
 
1069
1071
  **Usage examples:**
1070
1072
  ```bash
@@ -1106,7 +1108,7 @@ ct projects update-member PROJECT_ID USER_ID [options]
1106
1108
  | `PROJECT_ID` | string (required) | Project slug or UUID |
1107
1109
  | `USER_ID` | string (required) | User UUID or email |
1108
1110
  | `--role` | string | Project-level role override (e.g. `project_manager`, `member`, `viewer`) |
1109
- | `--rate` | float | Hourly rate override for this project member |
1111
+ | `--rate` | float | Hourly rate override for this project member (manager+; ignored for other roles) |
1110
1112
  | `--json` | flag | JSON output |
1111
1113
 
1112
1114
  Updates a member's project-specific role and/or rate. The `--role` sets a `project_role` that overrides the member's org-level role for this project only. Response includes `effective_role`, `org_role`, and `org_hourly_rate` for context.
@@ -1144,7 +1146,7 @@ ct projects add-members PROJECT_ID --user USER_ID [--user USER_ID ...] [--role R
1144
1146
  | `PROJECT_ID` | string (required) | Project slug or UUID |
1145
1147
  | `--user` | string (repeatable, required) | User UUID or email (specify multiple times) |
1146
1148
  | `--role` | string | Project role for all added members |
1147
- | `--rate` | float | Hourly rate for all added members |
1149
+ | `--rate` | float | Hourly rate for all added members (manager+; ignored for other roles) |
1148
1150
  | `--json` | flag | JSON output |
1149
1151
 
1150
1152
  Bulk-adds multiple members to a project in a single operation.
@@ -241,6 +241,8 @@ ct favorites start <id> -n "Sprint 42 planning"
241
241
 
242
242
  Set up a complete project with billing configuration, task presets, and team members in one go.
243
243
 
244
+ > Rates, budgets and billing settings are manager+ only. For project managers and below, `--rate`, `--budget`, `--fixed-fee` and `--billing-mode` are ignored by the API — omit them.
245
+
244
246
  ```bash
245
247
  # 1. Create the project with a billing mode
246
248
  ct projects create "Website Redesign" --client "Acme Corp" --budget 200 --code WR -b --billing-mode per_person
@@ -264,7 +266,7 @@ ct projects switch website-redesign
264
266
 
265
267
  ### Configure Per-Person Billing
266
268
 
267
- When using `per_person` billing mode, each team member can have their own rate on the project.
269
+ When using `per_person` billing mode, each team member can have their own rate on the project. Requires manager+.
268
270
 
269
271
  ```bash
270
272
  # Create project with per-person billing
@@ -406,7 +408,7 @@ ct org revoke-invite <invitation-id>
406
408
  # Change a member's role
407
409
  ct org update-member <user-id> --role project_manager
408
410
 
409
- # Update hourly rate
411
+ # Update hourly rate (admin+; rates are never shown to members, viewers or project managers)
410
412
  ct org update-member <user-id> --rate 150
411
413
 
412
414
  # Update weekly capacity
File without changes
File without changes