dailybot-cli 3.7.1__tar.gz → 3.7.3__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.
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/PKG-INFO +1 -1
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/kudos.py +2 -17
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/display.py +106 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli.egg-info/PKG-INFO +1 -1
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/pyproject.toml +1 -1
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/LICENSE +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/README.md +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/__init__.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/api_client.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/__init__.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/agent.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/ask.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/auth.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/authoring_helpers.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/channels.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/chat.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/checkin.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/config.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/conversation.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/env.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/form.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/hook.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/identity.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/interactive.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/interactive_chat.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/public_api_helpers.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/query_options.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/status.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/team.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/uninstall.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/update.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/upgrade.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/user.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/user_scoped_actions.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/version.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/commands/workflow.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/config.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/install_method.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/ledger.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/main.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/tui/__init__.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/tui/app.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/tui/commands.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/tui/conversation.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli/tui/intents.py +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli.egg-info/SOURCES.txt +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli.egg-info/dependency_links.txt +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli.egg-info/entry_points.txt +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli.egg-info/requires.txt +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/dailybot_cli.egg-info/top_level.txt +0 -0
- {dailybot_cli-3.7.1 → dailybot_cli-3.7.3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dailybot-cli
|
|
3
|
-
Version: 3.7.
|
|
3
|
+
Version: 3.7.3
|
|
4
4
|
Summary: Dailybot CLI - The command-line bridge between humans and agents. Progress reports, observability, and workflow automation for modern teams across Slack, Google Chat, Discord, MS Teams, and more.
|
|
5
5
|
Author-email: Dailybot <support@dailybot.com>
|
|
6
6
|
License: MIT
|
|
@@ -20,10 +20,10 @@ from dailybot_cli.commands.public_api_helpers import (
|
|
|
20
20
|
from dailybot_cli.commands.query_options import build_query_params, query_options, resolve_fetch_all
|
|
21
21
|
from dailybot_cli.display import (
|
|
22
22
|
console,
|
|
23
|
-
print_detail_panel,
|
|
24
23
|
print_error,
|
|
25
24
|
print_kudos_result,
|
|
26
25
|
print_kudos_table,
|
|
26
|
+
print_kudos_wall_of_fame,
|
|
27
27
|
print_pagination_footer,
|
|
28
28
|
)
|
|
29
29
|
|
|
@@ -394,19 +394,4 @@ def kudos_wall_of_fame(limit: int | None, json_mode: bool) -> None:
|
|
|
394
394
|
if json_mode:
|
|
395
395
|
emit_json(data)
|
|
396
396
|
return
|
|
397
|
-
|
|
398
|
-
fields: list[tuple[str, str]] = [
|
|
399
|
-
("Top receiver", "top_receiver"),
|
|
400
|
-
("Top giver", "top_giver"),
|
|
401
|
-
("Leaderboard entries", "leaderboard_summary"),
|
|
402
|
-
]
|
|
403
|
-
summary: dict[str, Any] = {
|
|
404
|
-
"top_receiver": (data.get("top_receiver") or {}).get("full_name")
|
|
405
|
-
if isinstance(data.get("top_receiver"), dict)
|
|
406
|
-
else data.get("top_receiver"),
|
|
407
|
-
"top_giver": (data.get("top_giver") or {}).get("full_name")
|
|
408
|
-
if isinstance(data.get("top_giver"), dict)
|
|
409
|
-
else data.get("top_giver"),
|
|
410
|
-
"leaderboard_summary": len(leaderboard),
|
|
411
|
-
}
|
|
412
|
-
print_detail_panel("Kudos — Wall of Fame", summary, fields)
|
|
397
|
+
print_kudos_wall_of_fame(data)
|
|
@@ -64,6 +64,112 @@ def print_kudos_table(kudos: list[dict[str, Any]]) -> None:
|
|
|
64
64
|
console.print(table)
|
|
65
65
|
|
|
66
66
|
|
|
67
|
+
def _kudos_person_name(entry: Any) -> str | None:
|
|
68
|
+
"""Extract a display name from a wall-of-fame person entry.
|
|
69
|
+
|
|
70
|
+
The API nests the person under ``user`` (``{"user": {"full_name": ...},
|
|
71
|
+
"kudos_received": ...}``); a top-level ``full_name`` is accepted as a
|
|
72
|
+
fallback so partial payloads degrade to a dash instead of crashing.
|
|
73
|
+
"""
|
|
74
|
+
if not isinstance(entry, dict):
|
|
75
|
+
return None
|
|
76
|
+
user: Any = entry.get("user")
|
|
77
|
+
if isinstance(user, dict) and user.get("full_name"):
|
|
78
|
+
return str(user["full_name"])
|
|
79
|
+
name: Any = entry.get("full_name")
|
|
80
|
+
return str(name) if name else None
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def print_kudos_wall_of_fame(data: dict[str, Any]) -> None:
|
|
84
|
+
"""Render the kudos wall of fame: top receiver/giver, caller position,
|
|
85
|
+
company-values distribution, and the ranked leaderboard.
|
|
86
|
+
|
|
87
|
+
``GET /v1/kudos/wall-of-fame/`` returns ``top_receiver`` / ``top_giver``
|
|
88
|
+
with the person nested under ``user``, the leaderboard wrapped in a
|
|
89
|
+
``{count, next, previous, results}`` envelope, and the caller's own
|
|
90
|
+
standing in ``leaderboard_summary`` (``{position, total}``).
|
|
91
|
+
"""
|
|
92
|
+
top_receiver: Any = data.get("top_receiver")
|
|
93
|
+
top_giver: Any = data.get("top_giver")
|
|
94
|
+
receiver_name: str | None = _kudos_person_name(top_receiver)
|
|
95
|
+
giver_name: str | None = _kudos_person_name(top_giver)
|
|
96
|
+
if receiver_name and isinstance(top_receiver, dict):
|
|
97
|
+
received: Any = top_receiver.get("kudos_received")
|
|
98
|
+
if received is not None:
|
|
99
|
+
receiver_name = f"{receiver_name} ({received} received)"
|
|
100
|
+
if giver_name and isinstance(top_giver, dict):
|
|
101
|
+
given: Any = top_giver.get("kudos_given")
|
|
102
|
+
if given is not None:
|
|
103
|
+
giver_name = f"{giver_name} ({given} given)"
|
|
104
|
+
|
|
105
|
+
summary_raw: Any = data.get("leaderboard_summary")
|
|
106
|
+
position: str | None = None
|
|
107
|
+
if isinstance(summary_raw, dict) and summary_raw.get("position") is not None:
|
|
108
|
+
total_ranked: Any = summary_raw.get("total")
|
|
109
|
+
position = (
|
|
110
|
+
f"{summary_raw['position']} of {total_ranked}"
|
|
111
|
+
if total_ranked
|
|
112
|
+
else str(summary_raw["position"])
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
print_detail_panel(
|
|
116
|
+
"Kudos — Wall of Fame",
|
|
117
|
+
{"top_receiver": receiver_name, "top_giver": giver_name, "position": position},
|
|
118
|
+
[
|
|
119
|
+
("Top receiver", "top_receiver"),
|
|
120
|
+
("Top giver", "top_giver"),
|
|
121
|
+
("Your position", "position"),
|
|
122
|
+
],
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
dna: Any = data.get("dna_distribution")
|
|
126
|
+
if isinstance(dna, list) and dna:
|
|
127
|
+
dna_table: Table = Table(title="Company values (kudos DNA)")
|
|
128
|
+
dna_table.add_column("Value", style="cyan")
|
|
129
|
+
dna_table.add_column("Kudos", justify="right")
|
|
130
|
+
dna_table.add_column("%", justify="right", style="dim")
|
|
131
|
+
for item in dna:
|
|
132
|
+
value_raw: Any = item.get("company_value") if isinstance(item, dict) else None
|
|
133
|
+
value: dict[str, Any] = value_raw if isinstance(value_raw, dict) else {}
|
|
134
|
+
label: str = f"{value.get('emoji', '')} {value.get('value', '—')}".strip()
|
|
135
|
+
dna_table.add_row(label, str(item.get("count", "—")), str(item.get("percentage", "—")))
|
|
136
|
+
console.print(dna_table)
|
|
137
|
+
|
|
138
|
+
board_raw: Any = data.get("leaderboard")
|
|
139
|
+
if isinstance(board_raw, dict):
|
|
140
|
+
entries: list[Any] = list(board_raw.get("results") or [])
|
|
141
|
+
total: int | None = (
|
|
142
|
+
board_raw.get("count") if isinstance(board_raw.get("count"), int) else None
|
|
143
|
+
)
|
|
144
|
+
else:
|
|
145
|
+
entries = list(board_raw or [])
|
|
146
|
+
total = len(entries)
|
|
147
|
+
if not entries:
|
|
148
|
+
console.print("[dim]No leaderboard entries.[/dim]")
|
|
149
|
+
return
|
|
150
|
+
table: Table = Table(title="Leaderboard")
|
|
151
|
+
table.add_column("#", justify="right", style="dim")
|
|
152
|
+
table.add_column("Name", style="cyan")
|
|
153
|
+
table.add_column("Kudos", justify="right")
|
|
154
|
+
table.add_column("+Kudos", justify="right")
|
|
155
|
+
for entry in entries:
|
|
156
|
+
if not isinstance(entry, dict):
|
|
157
|
+
continue
|
|
158
|
+
table.add_row(
|
|
159
|
+
str(entry.get("position", "—")),
|
|
160
|
+
_kudos_person_name(entry) or "—",
|
|
161
|
+
str(entry.get("score", "—")),
|
|
162
|
+
str(entry.get("total_plus_kudos", "—")),
|
|
163
|
+
)
|
|
164
|
+
console.print(table)
|
|
165
|
+
print_pagination_footer(
|
|
166
|
+
len(entries),
|
|
167
|
+
total,
|
|
168
|
+
has_more=total is not None and total > len(entries),
|
|
169
|
+
more_hint="raise --limit to fetch more",
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
|
|
67
173
|
def print_workflows_table(workflows: list[dict[str, Any]]) -> None:
|
|
68
174
|
"""Render a compact table of workflows (name, trigger, active, runs)."""
|
|
69
175
|
if not workflows:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dailybot-cli
|
|
3
|
-
Version: 3.7.
|
|
3
|
+
Version: 3.7.3
|
|
4
4
|
Summary: Dailybot CLI - The command-line bridge between humans and agents. Progress reports, observability, and workflow automation for modern teams across Slack, Google Chat, Discord, MS Teams, and more.
|
|
5
5
|
Author-email: Dailybot <support@dailybot.com>
|
|
6
6
|
License: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dailybot-cli"
|
|
7
|
-
version = "3.7.
|
|
7
|
+
version = "3.7.3"
|
|
8
8
|
description = "Dailybot CLI - The command-line bridge between humans and agents. Progress reports, observability, and workflow automation for modern teams across Slack, Google Chat, Discord, MS Teams, and more."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|