standout 0.1.0 → 0.5.15
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.
- package/README.md +2 -1
- package/dist/ai-usage.d.ts +164 -0
- package/dist/ai-usage.js +1303 -0
- package/dist/api.d.ts +10 -0
- package/dist/api.js +86 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +351 -0
- package/dist/cursor.d.ts +54 -0
- package/dist/cursor.js +487 -0
- package/dist/dev-env.d.ts +28 -0
- package/dist/dev-env.js +264 -0
- package/dist/gather.d.ts +81 -0
- package/dist/gather.js +885 -0
- package/dist/mcp.d.ts +1 -0
- package/dist/mcp.js +25 -0
- package/dist/prompt.d.ts +1 -0
- package/dist/prompt.js +247 -0
- package/dist/redact.d.ts +1 -0
- package/dist/redact.js +37 -0
- package/dist/tools.d.ts +4 -0
- package/dist/tools.js +182 -0
- package/dist/twitter-scrape.d.ts +1 -0
- package/dist/twitter-scrape.js +267 -0
- package/dist/wrapped/aggregate.d.ts +6 -0
- package/dist/wrapped/aggregate.js +792 -0
- package/dist/wrapped/chrono-critters.d.ts +8 -0
- package/dist/wrapped/chrono-critters.js +32 -0
- package/dist/wrapped/index.d.ts +3 -0
- package/dist/wrapped/index.js +2 -0
- package/dist/wrapped/mascots.d.ts +2 -0
- package/dist/wrapped/mascots.js +35 -0
- package/dist/wrapped/preview.d.ts +1 -0
- package/dist/wrapped/preview.js +93 -0
- package/dist/wrapped/render.d.ts +14 -0
- package/dist/wrapped/render.js +996 -0
- package/dist/wrapped/tiers.d.ts +9 -0
- package/dist/wrapped/tiers.js +73 -0
- package/dist/wrapped/types.d.ts +184 -0
- package/dist/wrapped/types.js +4 -0
- package/dist/wrapped-client.d.ts +10 -0
- package/dist/wrapped-client.js +36 -0
- package/dist/wrapped-share.d.ts +3 -0
- package/dist/wrapped-share.js +27 -0
- package/package.json +35 -8
- package/bin/cli.mjs +0 -30
package/README.md
CHANGED
|
@@ -9,4 +9,5 @@ npx standout
|
|
|
9
9
|
Discover your Claude Code, Codex, and Cursor stats, then see how you rank — and
|
|
10
10
|
get matched with roles through [Standout](https://standout.work).
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Optional: pass a job slug to apply directly (`npx standout <job>`), or `--chat`
|
|
13
|
+
to build a full profile interactively.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { type CursorStats } from "./cursor.js";
|
|
2
|
+
export interface UsageMonthlyBucket {
|
|
3
|
+
month: string;
|
|
4
|
+
sessions: number;
|
|
5
|
+
duration_hours: number;
|
|
6
|
+
input_tokens: number;
|
|
7
|
+
output_tokens: number;
|
|
8
|
+
cache_read_tokens: number;
|
|
9
|
+
cache_write_tokens: number;
|
|
10
|
+
cache_tokens: number;
|
|
11
|
+
primary_model: string | null;
|
|
12
|
+
}
|
|
13
|
+
export interface UsageSummary {
|
|
14
|
+
total_sessions: number;
|
|
15
|
+
active_days: number;
|
|
16
|
+
first_session: string | null;
|
|
17
|
+
last_session: string | null;
|
|
18
|
+
total_duration_hours: number;
|
|
19
|
+
total_input_tokens: number;
|
|
20
|
+
total_output_tokens: number;
|
|
21
|
+
total_cache_read_tokens: number;
|
|
22
|
+
total_cache_write_tokens: number;
|
|
23
|
+
monthly_buckets: UsageMonthlyBucket[];
|
|
24
|
+
hour_buckets: number[];
|
|
25
|
+
peak_hour: number | null;
|
|
26
|
+
longest_streak_days: number;
|
|
27
|
+
}
|
|
28
|
+
export interface PromptFrequency {
|
|
29
|
+
text: string;
|
|
30
|
+
count: number;
|
|
31
|
+
}
|
|
32
|
+
export interface ConversationExchange {
|
|
33
|
+
user: string;
|
|
34
|
+
assistant: string;
|
|
35
|
+
}
|
|
36
|
+
export interface InteractionSignals {
|
|
37
|
+
user_turns: number;
|
|
38
|
+
correction_turns: number;
|
|
39
|
+
tool_calls: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ConcurrencyStats {
|
|
42
|
+
open_tab_avg: number;
|
|
43
|
+
open_tab_peak: number;
|
|
44
|
+
longest_session_hours: number;
|
|
45
|
+
active_juggle_pct: number;
|
|
46
|
+
}
|
|
47
|
+
export interface ConversationStats {
|
|
48
|
+
total_prompts: number;
|
|
49
|
+
question_ratio: number;
|
|
50
|
+
avg_prompt_chars: number;
|
|
51
|
+
}
|
|
52
|
+
export interface ToolUsageStats {
|
|
53
|
+
total_sessions: number;
|
|
54
|
+
active_days: number;
|
|
55
|
+
first_session: string | null;
|
|
56
|
+
last_session: string | null;
|
|
57
|
+
total_duration_hours: number;
|
|
58
|
+
tool_call_counts: Record<string, number>;
|
|
59
|
+
projects: {
|
|
60
|
+
cwd: string;
|
|
61
|
+
session_count: number;
|
|
62
|
+
}[];
|
|
63
|
+
models: string[];
|
|
64
|
+
versions: string[];
|
|
65
|
+
peak_hour: number | null;
|
|
66
|
+
hour_buckets: number[];
|
|
67
|
+
weekend_ratio: number;
|
|
68
|
+
longest_streak_days: number;
|
|
69
|
+
current_streak_days: number;
|
|
70
|
+
conductor_workspaces: number;
|
|
71
|
+
conductor_session_count: number;
|
|
72
|
+
parallel_workspaces: number;
|
|
73
|
+
languages: Record<string, number>;
|
|
74
|
+
frameworks: string[];
|
|
75
|
+
framework_counts: Record<string, number>;
|
|
76
|
+
prompt_samples: string[];
|
|
77
|
+
conversation_samples: string[];
|
|
78
|
+
conversation: ConversationStats;
|
|
79
|
+
concurrency: ConcurrencyStats;
|
|
80
|
+
total_input_tokens: number;
|
|
81
|
+
total_output_tokens: number;
|
|
82
|
+
total_cache_read_tokens: number;
|
|
83
|
+
total_cache_write_tokens: number;
|
|
84
|
+
model_session_counts: Record<string, number>;
|
|
85
|
+
monthly_buckets: UsageMonthlyBucket[];
|
|
86
|
+
prompt_frequency: PromptFrequency[];
|
|
87
|
+
exchanges: ConversationExchange[];
|
|
88
|
+
interaction: InteractionSignals;
|
|
89
|
+
all_time?: UsageSummary;
|
|
90
|
+
previous_30d?: UsageSummary;
|
|
91
|
+
}
|
|
92
|
+
export interface AiUsage {
|
|
93
|
+
claude_code: ToolUsageStats | null;
|
|
94
|
+
codex: ToolUsageStats | null;
|
|
95
|
+
cursor: CursorStats | null;
|
|
96
|
+
}
|
|
97
|
+
export declare function isLowSignalAsk(sample: string): boolean;
|
|
98
|
+
export type RawStats = {
|
|
99
|
+
sessions: Map<string, {
|
|
100
|
+
firstTs: number;
|
|
101
|
+
lastTs: number;
|
|
102
|
+
eventTimestamps: number[];
|
|
103
|
+
cwd: string | null;
|
|
104
|
+
models: Set<string>;
|
|
105
|
+
modelTurnCounts: Map<string, number>;
|
|
106
|
+
inputTokens: number;
|
|
107
|
+
outputTokens: number;
|
|
108
|
+
cacheReadTokens: number;
|
|
109
|
+
cacheWriteTokens: number;
|
|
110
|
+
version: string | null;
|
|
111
|
+
}>;
|
|
112
|
+
toolCounts: Map<string, number>;
|
|
113
|
+
filePaths: Set<string>;
|
|
114
|
+
hourCounts: number[];
|
|
115
|
+
weekendEvents: number;
|
|
116
|
+
totalEvents: number;
|
|
117
|
+
userMessageEvents: number;
|
|
118
|
+
userMessageWeekendEvents: number;
|
|
119
|
+
promptSamples: string[];
|
|
120
|
+
promptSamplesSeen: Set<string>;
|
|
121
|
+
activeDays: Set<string>;
|
|
122
|
+
promptCounts: Map<string, PromptFrequency>;
|
|
123
|
+
exchanges: ConversationExchange[];
|
|
124
|
+
userTurns: number;
|
|
125
|
+
correctionTurns: number;
|
|
126
|
+
convoSamples: {
|
|
127
|
+
text: string;
|
|
128
|
+
ts: number;
|
|
129
|
+
session: string;
|
|
130
|
+
}[];
|
|
131
|
+
convoTurns: number;
|
|
132
|
+
questionTurns: number;
|
|
133
|
+
promptCharsTotal: number;
|
|
134
|
+
seenMessageIds: Set<string>;
|
|
135
|
+
};
|
|
136
|
+
interface ParseOptions {
|
|
137
|
+
windowStartMs?: number;
|
|
138
|
+
windowEndMs?: number;
|
|
139
|
+
}
|
|
140
|
+
export declare function emptyRaw(): RawStats;
|
|
141
|
+
export declare function dedupeByRealpath(files: {
|
|
142
|
+
path: string;
|
|
143
|
+
mtime: number;
|
|
144
|
+
}[]): string[];
|
|
145
|
+
export declare function parseClaudeCodeFile(filePath: string, raw: RawStats, opts?: ParseOptions): Promise<void>;
|
|
146
|
+
type TargetInput = {
|
|
147
|
+
raw: RawStats;
|
|
148
|
+
opts?: ParseOptions;
|
|
149
|
+
collectConversation?: boolean;
|
|
150
|
+
};
|
|
151
|
+
export declare function parseClaudeCodeFileTargets(filePath: string, targetInputs: TargetInput[]): Promise<void>;
|
|
152
|
+
export declare function parseCodexFile(filePath: string, raw: RawStats, opts?: ParseOptions): Promise<void>;
|
|
153
|
+
/**
|
|
154
|
+
* Compute longest historical streak + current streak from a set of YYYY-MM-DD
|
|
155
|
+
* day strings. Current streak counts consecutive days ending today or yesterday;
|
|
156
|
+
* older trailing streaks count as 0 (broken).
|
|
157
|
+
*/
|
|
158
|
+
export declare function computeStreaks(activeDays: Set<string>): {
|
|
159
|
+
longest: number;
|
|
160
|
+
current: number;
|
|
161
|
+
};
|
|
162
|
+
export declare function finalize(raw: RawStats): ToolUsageStats | null;
|
|
163
|
+
export declare function gatherAiUsage(): Promise<AiUsage>;
|
|
164
|
+
export {};
|