@nocoo/pew 0.6.1 → 0.7.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 (60) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +179 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/init.d.ts +38 -0
  5. package/dist/commands/init.d.ts.map +1 -0
  6. package/dist/commands/init.js +73 -0
  7. package/dist/commands/init.js.map +1 -0
  8. package/dist/commands/notify.d.ts +11 -0
  9. package/dist/commands/notify.d.ts.map +1 -0
  10. package/dist/commands/notify.js +28 -0
  11. package/dist/commands/notify.js.map +1 -0
  12. package/dist/commands/status.d.ts +4 -0
  13. package/dist/commands/status.d.ts.map +1 -1
  14. package/dist/commands/status.js +1 -0
  15. package/dist/commands/status.js.map +1 -1
  16. package/dist/commands/uninstall.d.ts +39 -0
  17. package/dist/commands/uninstall.d.ts.map +1 -0
  18. package/dist/commands/uninstall.js +107 -0
  19. package/dist/commands/uninstall.js.map +1 -0
  20. package/dist/notifier/claude-hook.d.ts +18 -0
  21. package/dist/notifier/claude-hook.d.ts.map +1 -0
  22. package/dist/notifier/claude-hook.js +226 -0
  23. package/dist/notifier/claude-hook.js.map +1 -0
  24. package/dist/notifier/codex-notifier.d.ts +19 -0
  25. package/dist/notifier/codex-notifier.d.ts.map +1 -0
  26. package/dist/notifier/codex-notifier.js +258 -0
  27. package/dist/notifier/codex-notifier.js.map +1 -0
  28. package/dist/notifier/coordinator.d.ts +29 -0
  29. package/dist/notifier/coordinator.d.ts.map +1 -0
  30. package/dist/notifier/coordinator.js +176 -0
  31. package/dist/notifier/coordinator.js.map +1 -0
  32. package/dist/notifier/gemini-hook.d.ts +18 -0
  33. package/dist/notifier/gemini-hook.d.ts.map +1 -0
  34. package/dist/notifier/gemini-hook.js +243 -0
  35. package/dist/notifier/gemini-hook.js.map +1 -0
  36. package/dist/notifier/notify-handler.d.ts +41 -0
  37. package/dist/notifier/notify-handler.d.ts.map +1 -0
  38. package/dist/notifier/notify-handler.js +172 -0
  39. package/dist/notifier/notify-handler.js.map +1 -0
  40. package/dist/notifier/openclaw-hook.d.ts +28 -0
  41. package/dist/notifier/openclaw-hook.d.ts.map +1 -0
  42. package/dist/notifier/openclaw-hook.js +272 -0
  43. package/dist/notifier/openclaw-hook.js.map +1 -0
  44. package/dist/notifier/opencode-plugin.d.ts +20 -0
  45. package/dist/notifier/opencode-plugin.d.ts.map +1 -0
  46. package/dist/notifier/opencode-plugin.js +106 -0
  47. package/dist/notifier/opencode-plugin.js.map +1 -0
  48. package/dist/notifier/paths.d.ts +21 -0
  49. package/dist/notifier/paths.d.ts.map +1 -0
  50. package/dist/notifier/paths.js +36 -0
  51. package/dist/notifier/paths.js.map +1 -0
  52. package/dist/notifier/registry.d.ts +21 -0
  53. package/dist/notifier/registry.d.ts.map +1 -0
  54. package/dist/notifier/registry.js +145 -0
  55. package/dist/notifier/registry.js.map +1 -0
  56. package/dist/utils/paths.d.ts +4 -0
  57. package/dist/utils/paths.d.ts.map +1 -1
  58. package/dist/utils/paths.js +4 -0
  59. package/dist/utils/paths.js.map +1 -1
  60. package/package.json +1 -1
@@ -0,0 +1,36 @@
1
+ import { join, resolve } from "node:path";
2
+ function normalizeEnvPath(value) {
3
+ const trimmed = typeof value === "string" ? value.trim() : "";
4
+ return trimmed ? resolve(trimmed) : null;
5
+ }
6
+ export function resolveNotifierPaths(home, env = process.env) {
7
+ const stateDir = join(home, ".config", "pew");
8
+ const binDir = join(stateDir, "bin");
9
+ const claudeDir = join(home, ".claude");
10
+ const geminiDir = normalizeEnvPath(env.GEMINI_HOME) ?? join(home, ".gemini");
11
+ const opencodeConfigDir = normalizeEnvPath(env.OPENCODE_CONFIG_DIR) ??
12
+ join(normalizeEnvPath(env.XDG_CONFIG_HOME) ?? join(home, ".config"), "opencode");
13
+ const openclawHome = normalizeEnvPath(env.OPENCLAW_STATE_DIR) ?? join(home, ".openclaw");
14
+ const codexHome = normalizeEnvPath(env.CODEX_HOME) ?? join(home, ".codex");
15
+ return {
16
+ stateDir,
17
+ binDir,
18
+ notifyPath: join(binDir, "notify.cjs"),
19
+ lockPath: join(stateDir, "sync.lock"),
20
+ signalPath: join(stateDir, "notify.signal"),
21
+ claudeDir,
22
+ claudeSettingsPath: join(claudeDir, "settings.json"),
23
+ geminiDir,
24
+ geminiSettingsPath: join(geminiDir, "settings.json"),
25
+ opencodeConfigDir,
26
+ opencodePluginDir: join(opencodeConfigDir, "plugin"),
27
+ openclawHome,
28
+ openclawConfigPath: normalizeEnvPath(env.OPENCLAW_CONFIG_PATH) ??
29
+ join(openclawHome, "openclaw.json"),
30
+ openclawPluginDir: join(stateDir, "openclaw-plugin"),
31
+ codexHome,
32
+ codexConfigPath: join(codexHome, "config.toml"),
33
+ codexNotifyOriginalPath: join(stateDir, "codex_notify_original.json"),
34
+ };
35
+ }
36
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/notifier/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsB1C,SAAS,gBAAgB,CAAC,KAAyB;IACjD,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,IAAY,EACZ,MAA0C,OAAO,CAAC,GAAG;IAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAE7E,MAAM,iBAAiB,GACrB,gBAAgB,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACzC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,UAAU,CAAC,CAAC;IAEnF,MAAM,YAAY,GAChB,gBAAgB,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAEtE,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE3E,OAAO;QACL,QAAQ;QACR,MAAM;QACN,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;QACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;QACrC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC;QAC3C,SAAS;QACT,kBAAkB,EAAE,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;QACpD,SAAS;QACT,kBAAkB,EAAE,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC;QACpD,iBAAiB;QACjB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC;QACpD,YAAY;QACZ,kBAAkB,EAChB,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAC1C,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC;QACrC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC;QACpD,SAAS;QACT,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;QAC/C,uBAAuB,EAAE,IAAI,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { NotifierOperationResult, NotifierStatus, Source } from "@pew/core";
2
+ import type { NotifierPaths } from "./paths.js";
3
+ interface RegistryDeps {
4
+ spawn?: (cmd: string, args: string[], opts?: object) => {
5
+ status: number | null;
6
+ };
7
+ }
8
+ export interface NotifierDriver {
9
+ source: Source;
10
+ displayName: string;
11
+ install(paths: NotifierPaths, deps?: RegistryDeps): Promise<NotifierOperationResult>;
12
+ uninstall(paths: NotifierPaths, deps?: RegistryDeps): Promise<NotifierOperationResult>;
13
+ status(paths: NotifierPaths): Promise<NotifierStatus>;
14
+ }
15
+ export declare function getAllDrivers(): NotifierDriver[];
16
+ export declare function getDriver(source: Source): NotifierDriver | undefined;
17
+ export declare function installAll(paths: NotifierPaths, deps?: RegistryDeps): Promise<NotifierOperationResult[]>;
18
+ export declare function uninstallAll(paths: NotifierPaths, deps?: RegistryDeps): Promise<NotifierOperationResult[]>;
19
+ export declare function statusAll(paths: NotifierPaths): Promise<Record<Source, NotifierStatus>>;
20
+ export {};
21
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/notifier/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAmBhD,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CACnF;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACrF,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACvF,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD;AA4GD,wBAAgB,aAAa,IAAI,cAAc,EAAE,CAEhD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEpE;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE,aAAa,EACpB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAgBpC;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,aAAa,EACpB,IAAI,CAAC,EAAE,YAAY,GAClB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAgBpC;AAED,wBAAsB,SAAS,CAC7B,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAYzC"}
@@ -0,0 +1,145 @@
1
+ import { installClaudeHook, uninstallClaudeHook, getClaudeHookStatus } from "./claude-hook.js";
2
+ import { installGeminiHook, uninstallGeminiHook, getGeminiHookStatus } from "./gemini-hook.js";
3
+ import { installOpenCodePlugin, uninstallOpenCodePlugin, getOpenCodePluginStatus, } from "./opencode-plugin.js";
4
+ import { installOpenClawHook, uninstallOpenClawHook, getOpenClawHookStatus, } from "./openclaw-hook.js";
5
+ import { installCodexNotifier, uninstallCodexNotifier, getCodexNotifierStatus, } from "./codex-notifier.js";
6
+ const DRIVERS = [
7
+ {
8
+ source: "claude-code",
9
+ displayName: "Claude Code",
10
+ install: (paths) => installClaudeHook({
11
+ settingsPath: paths.claudeSettingsPath,
12
+ notifyPath: paths.notifyPath,
13
+ }),
14
+ uninstall: (paths) => uninstallClaudeHook({
15
+ settingsPath: paths.claudeSettingsPath,
16
+ notifyPath: paths.notifyPath,
17
+ }),
18
+ status: (paths) => getClaudeHookStatus({
19
+ settingsPath: paths.claudeSettingsPath,
20
+ notifyPath: paths.notifyPath,
21
+ }),
22
+ },
23
+ {
24
+ source: "gemini-cli",
25
+ displayName: "Gemini CLI",
26
+ install: (paths) => installGeminiHook({
27
+ settingsPath: paths.geminiSettingsPath,
28
+ notifyPath: paths.notifyPath,
29
+ }),
30
+ uninstall: (paths) => uninstallGeminiHook({
31
+ settingsPath: paths.geminiSettingsPath,
32
+ notifyPath: paths.notifyPath,
33
+ }),
34
+ status: (paths) => getGeminiHookStatus({
35
+ settingsPath: paths.geminiSettingsPath,
36
+ notifyPath: paths.notifyPath,
37
+ }),
38
+ },
39
+ {
40
+ source: "opencode",
41
+ displayName: "OpenCode",
42
+ install: (paths) => installOpenCodePlugin({
43
+ pluginDir: paths.opencodePluginDir,
44
+ notifyPath: paths.notifyPath,
45
+ }),
46
+ uninstall: (paths) => uninstallOpenCodePlugin({
47
+ pluginDir: paths.opencodePluginDir,
48
+ notifyPath: paths.notifyPath,
49
+ }),
50
+ status: (paths) => getOpenCodePluginStatus({
51
+ pluginDir: paths.opencodePluginDir,
52
+ notifyPath: paths.notifyPath,
53
+ }),
54
+ },
55
+ {
56
+ source: "openclaw",
57
+ displayName: "OpenClaw",
58
+ install: (paths, deps) => installOpenClawHook({
59
+ pluginBaseDir: paths.openclawPluginDir,
60
+ notifyPath: paths.notifyPath,
61
+ openclawConfigPath: paths.openclawConfigPath,
62
+ spawn: deps?.spawn,
63
+ }),
64
+ uninstall: (paths, deps) => uninstallOpenClawHook({
65
+ pluginBaseDir: paths.openclawPluginDir,
66
+ notifyPath: paths.notifyPath,
67
+ openclawConfigPath: paths.openclawConfigPath,
68
+ spawn: deps?.spawn,
69
+ }),
70
+ status: (paths) => getOpenClawHookStatus({
71
+ pluginBaseDir: paths.openclawPluginDir,
72
+ notifyPath: paths.notifyPath,
73
+ openclawConfigPath: paths.openclawConfigPath,
74
+ }),
75
+ },
76
+ {
77
+ source: "codex",
78
+ displayName: "Codex",
79
+ install: (paths) => installCodexNotifier({
80
+ configPath: paths.codexConfigPath,
81
+ notifyPath: paths.notifyPath,
82
+ originalBackupPath: paths.codexNotifyOriginalPath,
83
+ }),
84
+ uninstall: (paths) => uninstallCodexNotifier({
85
+ configPath: paths.codexConfigPath,
86
+ notifyPath: paths.notifyPath,
87
+ originalBackupPath: paths.codexNotifyOriginalPath,
88
+ }),
89
+ status: (paths) => getCodexNotifierStatus({
90
+ configPath: paths.codexConfigPath,
91
+ notifyPath: paths.notifyPath,
92
+ originalBackupPath: paths.codexNotifyOriginalPath,
93
+ }),
94
+ },
95
+ ];
96
+ export function getAllDrivers() {
97
+ return DRIVERS.slice();
98
+ }
99
+ export function getDriver(source) {
100
+ return DRIVERS.find((driver) => driver.source === source);
101
+ }
102
+ export async function installAll(paths, deps) {
103
+ return Promise.all(DRIVERS.map(async (driver) => {
104
+ try {
105
+ return await driver.install(paths, deps);
106
+ }
107
+ catch (error) {
108
+ return {
109
+ source: driver.source,
110
+ action: "skip",
111
+ changed: false,
112
+ detail: error instanceof Error ? error.message : String(error),
113
+ warnings: ["Driver install failed"],
114
+ };
115
+ }
116
+ }));
117
+ }
118
+ export async function uninstallAll(paths, deps) {
119
+ return Promise.all(DRIVERS.map(async (driver) => {
120
+ try {
121
+ return await driver.uninstall(paths, deps);
122
+ }
123
+ catch (error) {
124
+ return {
125
+ source: driver.source,
126
+ action: "skip",
127
+ changed: false,
128
+ detail: error instanceof Error ? error.message : String(error),
129
+ warnings: ["Driver uninstall failed"],
130
+ };
131
+ }
132
+ }));
133
+ }
134
+ export async function statusAll(paths) {
135
+ const entries = await Promise.all(DRIVERS.map(async (driver) => {
136
+ try {
137
+ return [driver.source, await driver.status(paths)];
138
+ }
139
+ catch {
140
+ return [driver.source, "error"];
141
+ }
142
+ }));
143
+ return Object.fromEntries(entries);
144
+ }
145
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/notifier/registry.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,10 @@
5
5
  export declare function resolveDefaultPaths(home?: string): {
6
6
  /** Pew state directory: ~/.config/pew/ */
7
7
  stateDir: string;
8
+ /** Pew bin directory: ~/.config/pew/bin/ */
9
+ binDir: string;
10
+ /** notify.cjs path: ~/.config/pew/bin/notify.cjs */
11
+ notifyPath: string;
8
12
  /** Claude Code data: ~/.claude */
9
13
  claudeDir: string;
10
14
  /** Codex CLI sessions: ~/.codex/sessions (or $CODEX_HOME/sessions) */
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAY;IAGhD,0CAA0C;;IAE1C,kCAAkC;;IAElC,sEAAsE;;IAEtE,iCAAiC;;IAEjC,wEAAwE;;IASxE,oEAAoE;;IAEpE,iCAAiC;;EAGpC"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAY;IAGhD,0CAA0C;;IAE1C,4CAA4C;;IAE5C,oDAAoD;;IAEpD,kCAAkC;;IAElC,sEAAsE;;IAEtE,iCAAiC;;IAEjC,wEAAwE;;IASxE,oEAAoE;;IAEpE,iCAAiC;;EAGpC"}
@@ -9,6 +9,10 @@ export function resolveDefaultPaths(home = homedir()) {
9
9
  return {
10
10
  /** Pew state directory: ~/.config/pew/ */
11
11
  stateDir: join(home, ".config", "pew"),
12
+ /** Pew bin directory: ~/.config/pew/bin/ */
13
+ binDir: join(home, ".config", "pew", "bin"),
14
+ /** notify.cjs path: ~/.config/pew/bin/notify.cjs */
15
+ notifyPath: join(home, ".config", "pew", "bin", "notify.cjs"),
12
16
  /** Claude Code data: ~/.claude */
13
17
  claudeDir: join(home, ".claude"),
14
18
  /** Codex CLI sessions: ~/.codex/sessions (or $CODEX_HOME/sessions) */
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAI,GAAG,OAAO,EAAE;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO;QACL,0CAA0C;QAC1C,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;QACtC,kCAAkC;QAClC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAChC,sEAAsE;QACtE,gBAAgB,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;QAC7C,iCAAiC;QACjC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAChC,wEAAwE;QACxE,kBAAkB,EAAE,IAAI,CACtB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,CACV;QACD,oEAAoE;QACpE,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC;QACxE,iCAAiC;QACjC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;KACrC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAI,GAAG,OAAO,EAAE;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjE,OAAO;QACL,0CAA0C;QAC1C,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC;QACtC,4CAA4C;QAC5C,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;QAC3C,oDAAoD;QACpD,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC;QAC7D,kCAAkC;QAClC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAChC,sEAAsE;QACtE,gBAAgB,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;QAC7C,iCAAiC;QACjC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAChC,wEAAwE;QACxE,kBAAkB,EAAE,IAAI,CACtB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,CACV;QACD,oEAAoE;QACpE,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC;QACxE,iCAAiC;QACjC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;KACrC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocoo/pew",
3
- "version": "0.6.1",
3
+ "version": "0.7.0",
4
4
  "description": "Track token usage from your local AI coding tools",
5
5
  "type": "module",
6
6
  "bin": {