@eat-pray-ai/wingman 0.1.0

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 (62) hide show
  1. package/.github/dependabot.yml +11 -0
  2. package/.github/workflows/codeql.yml +103 -0
  3. package/.github/workflows/publish.yml +23 -0
  4. package/.github/workflows/release.yml +52 -0
  5. package/.github/workflows/test.yml +32 -0
  6. package/.idea/workspace.xml +125 -0
  7. package/AGENTS.md +34 -0
  8. package/README.md +145 -0
  9. package/bin/wingman.ts +2 -0
  10. package/dist/bin/wingman.mjs +3 -0
  11. package/dist/src/cli.mjs +2229 -0
  12. package/dist/src/cli.mjs.map +1 -0
  13. package/docs/AGENTS.md +172 -0
  14. package/docs/resume.yaml +68 -0
  15. package/docs/wingman.pdf +2544 -1
  16. package/docs/wingman.png +0 -0
  17. package/docs/wingman.svg +376 -0
  18. package/package.json +51 -0
  19. package/scripts/generate-demo.ts +265 -0
  20. package/src/AGENTS.md +50 -0
  21. package/src/agents/AGENTS.md +52 -0
  22. package/src/agents/claude-code.ts +160 -0
  23. package/src/agents/codex.ts +174 -0
  24. package/src/agents/gemini-cli.ts +100 -0
  25. package/src/agents/opencode.ts +117 -0
  26. package/src/agents/registry.ts +12 -0
  27. package/src/agents/skills.ts +51 -0
  28. package/src/aggregator.ts +142 -0
  29. package/src/cli.ts +194 -0
  30. package/src/inventory.ts +84 -0
  31. package/src/pricing/AGENTS.md +36 -0
  32. package/src/pricing/__tests__/model-info.test.ts +135 -0
  33. package/src/pricing/engine.ts +86 -0
  34. package/src/pricing/models-dev.ts +253 -0
  35. package/src/resume/AGENTS.md +34 -0
  36. package/src/resume/__tests__/renderer.test.ts +286 -0
  37. package/src/resume/renderer.ts +286 -0
  38. package/src/svg/AGENTS.md +22 -0
  39. package/src/svg/components.ts +266 -0
  40. package/src/svg/icons.ts +83 -0
  41. package/src/themes/AGENTS.md +60 -0
  42. package/src/themes/__tests__/themes.test.ts +187 -0
  43. package/src/themes/github-dark/index.ts +46 -0
  44. package/src/themes/github-dark/palette.ts +19 -0
  45. package/src/themes/github-light/index.ts +46 -0
  46. package/src/themes/github-light/palette.ts +19 -0
  47. package/src/themes/onedark/index.ts +46 -0
  48. package/src/themes/onedark/palette.ts +19 -0
  49. package/src/themes/registry.ts +18 -0
  50. package/src/themes/shared/charts.ts +112 -0
  51. package/src/themes/shared/context.ts +47 -0
  52. package/src/themes/shared/footer.ts +52 -0
  53. package/src/themes/shared/header.ts +29 -0
  54. package/src/themes/shared/heatmap.ts +229 -0
  55. package/src/themes/shared/helpers.ts +103 -0
  56. package/src/themes/shared/inventory.ts +105 -0
  57. package/src/themes/shared/legend.ts +91 -0
  58. package/src/themes/shared/sections.ts +20 -0
  59. package/src/themes/shared/stats.ts +60 -0
  60. package/src/types.ts +106 -0
  61. package/tsconfig.json +18 -0
  62. package/tsdown.config.ts +10 -0
package/src/types.ts ADDED
@@ -0,0 +1,106 @@
1
+ export interface UsageRecord {
2
+ agent: string;
3
+ model: string;
4
+ provider?: string;
5
+ timestamp: Date;
6
+ tokens: {
7
+ input: number;
8
+ output: number;
9
+ cacheRead?: number;
10
+ cacheWrite?: number;
11
+ reasoning?: number;
12
+ };
13
+ sessionId?: string;
14
+ }
15
+
16
+ export interface AgentConfig {
17
+ mcpServers: string[];
18
+ plugins: PluginInfo[];
19
+ models: string[];
20
+ skills: string[];
21
+ }
22
+
23
+ export interface PluginInfo {
24
+ name: string;
25
+ version?: string;
26
+ skills: string[];
27
+ agents: string[];
28
+ commands: string[];
29
+ sources: string[]; // which agent adapters have this plugin
30
+ }
31
+
32
+ export interface InventoryItem {
33
+ name: string;
34
+ sources: string[]; // which agent adapters have this item
35
+ }
36
+
37
+ export interface AgentAdapter {
38
+ name: string;
39
+ displayName: string;
40
+ detect(): Promise<boolean>;
41
+ collect(since: Date, until: Date): Promise<UsageRecord[]>;
42
+ config(): Promise<AgentConfig>;
43
+ }
44
+
45
+ export interface ModelPricing {
46
+ modelId: string;
47
+ provider: string;
48
+ inputPerMillion: number;
49
+ outputPerMillion: number;
50
+ cacheReadPerMillion?: number;
51
+ cacheWritePerMillion?: number;
52
+ }
53
+
54
+ export interface PricingEngine {
55
+ resolve(modelId: string, provider?: string): ModelPricing | null;
56
+ calculateCost(record: UsageRecord): number;
57
+ }
58
+
59
+ export interface AgentSummary {
60
+ agent: string;
61
+ displayName: string;
62
+ totalTokens: number;
63
+ totalCost: number;
64
+ unknownCost: boolean;
65
+ sessionCount: number;
66
+ models: Record<string, { tokens: number; cost: number }>;
67
+ dailyActivity: Record<string, number>;
68
+ config: AgentConfig;
69
+ }
70
+
71
+ export interface ShowcaseData {
72
+ period: { since: Date; until: Date };
73
+ agents: AgentSummary[];
74
+ totals: {
75
+ tokens: number;
76
+ inputTokens: number;
77
+ outputTokens: number;
78
+ cacheReadTokens: number;
79
+ cacheWriteTokens: number;
80
+ cost: number;
81
+ sessions: number;
82
+ };
83
+ /** Per-model daily activity: modelId → date → token count */
84
+ modelDailyActivity: Record<string, Record<string, number>>;
85
+ inventory: Inventory;
86
+ }
87
+
88
+ export interface Inventory {
89
+ plugins: PluginInfo[];
90
+ mcpServers: InventoryItem[]; // dangling (not bundled by a plugin)
91
+ skills: InventoryItem[]; // dangling (not bundled by a plugin)
92
+ }
93
+
94
+ export interface RenderOptions {
95
+ sections?: string[];
96
+ }
97
+
98
+ export interface ThemeRenderer {
99
+ name: string;
100
+ render(data: ShowcaseData, opts?: RenderOptions): string;
101
+ }
102
+
103
+ export interface SectionResult {
104
+ svg: string;
105
+ height: number;
106
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "strict": true,
7
+ "types": ["node"],
8
+ "skipLibCheck": true,
9
+ "outDir": "dist",
10
+ "rootDir": ".",
11
+ "declaration": true,
12
+ "sourceMap": true,
13
+ "resolveJsonModule": true,
14
+ "forceConsistentCasingInFileNames": true
15
+ },
16
+ "include": ["src/**/*", "bin/**/*"],
17
+ "exclude": ["node_modules", "dist"]
18
+ }
@@ -0,0 +1,10 @@
1
+ import { defineConfig } from "tsdown";
2
+
3
+ export default defineConfig({
4
+ entry: ["src/cli.ts", "bin/wingman.ts"],
5
+ format: "esm",
6
+ target: "node22",
7
+ clean: true,
8
+ sourcemap: true,
9
+ deps: { neverBundle: ["better-sqlite3"] },
10
+ });