@parkercto/cli 0.1.0 → 0.2.2

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 (95) hide show
  1. package/dist/src/bin/preuninstall.d.ts +10 -0
  2. package/dist/src/bin/preuninstall.d.ts.map +1 -0
  3. package/dist/src/bin/preuninstall.js +51 -0
  4. package/dist/src/bin/preuninstall.js.map +1 -0
  5. package/dist/src/cli.js +7 -3
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/client/api-client.d.ts +22 -0
  8. package/dist/src/client/api-client.d.ts.map +1 -1
  9. package/dist/src/client/api-client.js +50 -10
  10. package/dist/src/client/api-client.js.map +1 -1
  11. package/dist/src/client/auth.d.ts.map +1 -1
  12. package/dist/src/client/auth.js +14 -5
  13. package/dist/src/client/auth.js.map +1 -1
  14. package/dist/src/commands/auth.js +1 -1
  15. package/dist/src/commands/auth.js.map +1 -1
  16. package/dist/src/commands/connect.d.ts +2 -2
  17. package/dist/src/commands/connect.d.ts.map +1 -1
  18. package/dist/src/commands/connect.js +93 -8
  19. package/dist/src/commands/connect.js.map +1 -1
  20. package/dist/src/commands/disable.d.ts +3 -0
  21. package/dist/src/commands/disable.d.ts.map +1 -0
  22. package/dist/src/commands/disable.js +8 -0
  23. package/dist/src/commands/disable.js.map +1 -0
  24. package/dist/src/commands/enable.d.ts +3 -0
  25. package/dist/src/commands/enable.d.ts.map +1 -0
  26. package/dist/src/commands/enable.js +207 -0
  27. package/dist/src/commands/enable.js.map +1 -0
  28. package/dist/src/commands/hook.d.ts +3 -0
  29. package/dist/src/commands/hook.d.ts.map +1 -0
  30. package/dist/src/commands/hook.js +214 -0
  31. package/dist/src/commands/hook.js.map +1 -0
  32. package/dist/src/commands/join.d.ts +2 -2
  33. package/dist/src/commands/join.d.ts.map +1 -1
  34. package/dist/src/commands/join.js +17 -33
  35. package/dist/src/commands/join.js.map +1 -1
  36. package/dist/src/commands/update.js +1 -1
  37. package/dist/src/commands/update.js.map +1 -1
  38. package/dist/src/constants.d.ts +14 -1
  39. package/dist/src/constants.d.ts.map +1 -1
  40. package/dist/src/constants.js +14 -1
  41. package/dist/src/constants.js.map +1 -1
  42. package/dist/src/lib/auto-update.d.ts +4 -0
  43. package/dist/src/lib/auto-update.d.ts.map +1 -1
  44. package/dist/src/lib/auto-update.js +15 -2
  45. package/dist/src/lib/auto-update.js.map +1 -1
  46. package/dist/src/lib/auto-update_tests.d.ts +2 -0
  47. package/dist/src/lib/auto-update_tests.d.ts.map +1 -0
  48. package/dist/src/lib/auto-update_tests.js +36 -0
  49. package/dist/src/lib/auto-update_tests.js.map +1 -0
  50. package/dist/src/lib/claude-settings.d.ts +38 -0
  51. package/dist/src/lib/claude-settings.d.ts.map +1 -0
  52. package/dist/src/lib/claude-settings.js +66 -0
  53. package/dist/src/lib/claude-settings.js.map +1 -0
  54. package/dist/src/lib/claude-settings_tests.d.ts +2 -0
  55. package/dist/src/lib/claude-settings_tests.d.ts.map +1 -0
  56. package/dist/src/lib/claude-settings_tests.js +117 -0
  57. package/dist/src/lib/claude-settings_tests.js.map +1 -0
  58. package/dist/src/lib/local-git.d.ts.map +1 -1
  59. package/dist/src/lib/local-git.js +4 -1
  60. package/dist/src/lib/local-git.js.map +1 -1
  61. package/dist/src/lib/project-registry.d.ts +13 -0
  62. package/dist/src/lib/project-registry.d.ts.map +1 -0
  63. package/dist/src/lib/project-registry.js +115 -0
  64. package/dist/src/lib/project-registry.js.map +1 -0
  65. package/dist/src/lib/project-registry_tests.d.ts +2 -0
  66. package/dist/src/lib/project-registry_tests.d.ts.map +1 -0
  67. package/dist/src/lib/project-registry_tests.js +75 -0
  68. package/dist/src/lib/project-registry_tests.js.map +1 -0
  69. package/dist/src/lib/redact.d.ts +13 -0
  70. package/dist/src/lib/redact.d.ts.map +1 -0
  71. package/dist/src/lib/redact.js +33 -0
  72. package/dist/src/lib/redact.js.map +1 -0
  73. package/dist/src/lib/redact_tests.d.ts +2 -0
  74. package/dist/src/lib/redact_tests.d.ts.map +1 -0
  75. package/dist/src/lib/redact_tests.js +75 -0
  76. package/dist/src/lib/redact_tests.js.map +1 -0
  77. package/dist/src/lib/repo-config.d.ts +1 -0
  78. package/dist/src/lib/repo-config.d.ts.map +1 -1
  79. package/dist/src/lib/repo-config.js +6 -2
  80. package/dist/src/lib/repo-config.js.map +1 -1
  81. package/dist/src/lib/session-state.d.ts +20 -0
  82. package/dist/src/lib/session-state.d.ts.map +1 -0
  83. package/dist/src/lib/session-state.js +50 -0
  84. package/dist/src/lib/session-state.js.map +1 -0
  85. package/dist/src/lib/session-state_tests.d.ts +2 -0
  86. package/dist/src/lib/session-state_tests.d.ts.map +1 -0
  87. package/dist/src/lib/session-state_tests.js +34 -0
  88. package/dist/src/lib/session-state_tests.js.map +1 -0
  89. package/dist/src/render/help.js +2 -2
  90. package/dist/src/render/help.js.map +1 -1
  91. package/package.json +7 -3
  92. package/dist/src/commands/init.d.ts +0 -3
  93. package/dist/src/commands/init.d.ts.map +0 -1
  94. package/dist/src/commands/init.js +0 -130
  95. package/dist/src/commands/init.js.map +0 -1
@@ -0,0 +1,207 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import readline from "readline/promises";
4
+ import { ParkerClient, ApiError } from "../client/api-client.js";
5
+ import { saveAuth, getApiUrl } from "../client/auth.js";
6
+ import { loadRepoConfig, saveRepoConfig } from "../lib/repo-config.js";
7
+ import { OAUTH_CALLBACK_PORT, OAUTH_CALLBACK_PATH, SIGNUP_URL } from "../constants.js";
8
+ import { installClaudeIntegration } from "./connect.js";
9
+ import open from "open";
10
+ import http from "http";
11
+ import url from "url";
12
+ const TEAM_ACTION_SIGNUP = "1";
13
+ const TEAM_ACTION_JOIN = "2";
14
+ /**
15
+ * Safely extracts a string value from a parsed query parameter.
16
+ * Returns undefined if the value is missing, empty, or an array.
17
+ */
18
+ function parseStringParam(value) {
19
+ if (typeof value === "string" && value.length > 0) {
20
+ return value;
21
+ }
22
+ return undefined;
23
+ }
24
+ /**
25
+ * Completes the enable flow after authentication:
26
+ * joins the team, writes repo config, and auto-installs Claude Code integration.
27
+ */
28
+ async function completeEnableFlow(auth, teamCode) {
29
+ const client = new ParkerClient(auth.apiUrl, auth.token);
30
+ const result = await client.joinTeam(teamCode.toUpperCase());
31
+ await saveRepoConfig({ teamCode: result.team.teamCode });
32
+ console.log(chalk.green(`Joined team "${result.team.name}" as ${result.role}`));
33
+ console.log(chalk.dim(`Team code: ${result.team.teamCode}`));
34
+ console.log("");
35
+ await installClaudeIntegration();
36
+ }
37
+ /**
38
+ * Authenticates the user via dev auth (username prompt, no OAuth).
39
+ */
40
+ async function authenticateDev(apiUrl) {
41
+ const client = new ParkerClient(apiUrl, "");
42
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
43
+ const username = await rl.question("GitHub username: ");
44
+ rl.close();
45
+ const result = await client.authDev(username);
46
+ const auth = {
47
+ token: result.token,
48
+ userId: result.user.id,
49
+ githubUsername: result.user.githubUsername,
50
+ apiUrl,
51
+ };
52
+ await saveAuth(auth);
53
+ console.log(chalk.green("Logged in as " + result.user.githubUsername));
54
+ console.log("");
55
+ return auth;
56
+ }
57
+ /**
58
+ * Authenticates the user via GitHub OAuth (opens browser, waits for callback).
59
+ */
60
+ function authenticateOAuth(apiUrl) {
61
+ return new Promise((resolve, reject) => {
62
+ console.log("Opening browser for GitHub authentication...");
63
+ const server = http.createServer();
64
+ const port = OAUTH_CALLBACK_PORT;
65
+ server.listen(port, () => {
66
+ const authUrl = `${apiUrl}/auth/github?cli_port=${port}`;
67
+ open(authUrl);
68
+ });
69
+ server.on("request", async (req, res) => {
70
+ if (!req.url)
71
+ return;
72
+ const parsedUrl = url.parse(req.url, true);
73
+ if (parsedUrl.pathname !== OAUTH_CALLBACK_PATH)
74
+ return;
75
+ const token = parseStringParam(parsedUrl.query.token);
76
+ const userId = parseStringParam(parsedUrl.query.user_id);
77
+ const username = parseStringParam(parsedUrl.query.username);
78
+ if (token && userId && username) {
79
+ const auth = { token, userId, githubUsername: username, apiUrl };
80
+ await saveAuth(auth);
81
+ res.writeHead(200, { "Content-Type": "text/html" });
82
+ res.end("<html><body><h1>Success!</h1><p>You can close this window.</p></body></html>");
83
+ server.close();
84
+ console.log(chalk.green("Logged in as " + username));
85
+ console.log("");
86
+ resolve(auth);
87
+ }
88
+ else {
89
+ res.writeHead(400, { "Content-Type": "text/html" });
90
+ res.end("<html><body><h1>Error</h1><p>Authentication failed — missing token.</p></body></html>");
91
+ server.close();
92
+ reject(new Error("Login failed: missing token in callback"));
93
+ }
94
+ });
95
+ });
96
+ }
97
+ /**
98
+ * Prompts the user for a team code, verifies it, authenticates, joins, and installs hooks.
99
+ */
100
+ async function joinTeamFlow(apiUrl, isDev) {
101
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
102
+ const teamCode = (await rl.question("Team code: ")).trim();
103
+ rl.close();
104
+ if (!teamCode) {
105
+ console.error(chalk.red("Team code is required."));
106
+ console.log(chalk.dim("Ask your team admin for the join code (e.g., XKCD-LAMP-FISH)"));
107
+ process.exit(1);
108
+ }
109
+ // Verify team exists
110
+ const client = new ParkerClient(apiUrl, "");
111
+ try {
112
+ const verified = await client.verifyTeamCode(teamCode);
113
+ console.log(chalk.green(`Found team "${verified.name}"`));
114
+ console.log("");
115
+ }
116
+ catch (error) {
117
+ if (error instanceof ApiError && error.status === 404) {
118
+ console.error(chalk.red("Team not found. Double-check the code and try again."));
119
+ }
120
+ else {
121
+ const message = error instanceof Error ? error.message : String(error);
122
+ console.error(chalk.red(`Could not verify team: ${message}`));
123
+ }
124
+ process.exit(1);
125
+ }
126
+ // Authenticate
127
+ let auth;
128
+ try {
129
+ if (isDev) {
130
+ auth = await authenticateDev(apiUrl);
131
+ }
132
+ else {
133
+ auth = await authenticateOAuth(apiUrl);
134
+ }
135
+ }
136
+ catch (error) {
137
+ const message = error instanceof Error ? error.message : String(error);
138
+ console.error(chalk.red(`Login failed: ${message}`));
139
+ process.exit(1);
140
+ }
141
+ // Join and install
142
+ try {
143
+ await completeEnableFlow(auth, teamCode);
144
+ }
145
+ catch (error) {
146
+ const message = error instanceof Error ? error.message : String(error);
147
+ console.error(chalk.red(`Failed to join team: ${message}`));
148
+ process.exit(1);
149
+ }
150
+ }
151
+ export const enableCommand = new Command("enable")
152
+ .description("Enable Parker — authenticate, join a team, and set up Claude Code integration")
153
+ .option("--dev", "Use dev auth (no GitHub OAuth)")
154
+ .action(async (options) => {
155
+ const apiUrl = await getApiUrl();
156
+ // If repo already has a team code, authenticate and join directly
157
+ const repoConfig = await loadRepoConfig();
158
+ if (repoConfig?.teamCode) {
159
+ console.log(chalk.dim(`Found team code in .parker/config.json: ${repoConfig.teamCode}`));
160
+ let auth;
161
+ try {
162
+ if (options.dev) {
163
+ auth = await authenticateDev(apiUrl);
164
+ }
165
+ else {
166
+ auth = await authenticateOAuth(apiUrl);
167
+ }
168
+ }
169
+ catch (error) {
170
+ const message = error instanceof Error ? error.message : String(error);
171
+ console.error(chalk.red(`Login failed: ${message}`));
172
+ process.exit(1);
173
+ }
174
+ try {
175
+ await completeEnableFlow(auth, repoConfig.teamCode);
176
+ }
177
+ catch (error) {
178
+ const message = error instanceof Error ? error.message : String(error);
179
+ console.error(chalk.red(`Failed to join team: ${message}`));
180
+ process.exit(1);
181
+ }
182
+ return;
183
+ }
184
+ // No existing config — prompt the user
185
+ console.log(chalk.bold("Welcome to Parker!"));
186
+ console.log("");
187
+ console.log(` ${TEAM_ACTION_SIGNUP}) I need to create a team`);
188
+ console.log(` ${TEAM_ACTION_JOIN}) I have a team code`);
189
+ console.log("");
190
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
191
+ const action = (await rl.question("Choose (1 or 2): ")).trim();
192
+ rl.close();
193
+ if (action === TEAM_ACTION_SIGNUP) {
194
+ console.log("");
195
+ console.log(`Sign up and create your team at: ${chalk.cyan(SIGNUP_URL)}`);
196
+ console.log("");
197
+ console.log(chalk.dim("Once your team is created, run `parker enable` again with your team code."));
198
+ return;
199
+ }
200
+ if (action === TEAM_ACTION_JOIN) {
201
+ await joinTeamFlow(apiUrl, !!options.dev);
202
+ return;
203
+ }
204
+ console.error(chalk.red("Invalid choice."));
205
+ process.exit(1);
206
+ });
207
+ //# sourceMappingURL=enable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable.js","sourceRoot":"","sources":["../../../src/commands/enable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAoB,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B;;;GAGG;AACH,SAAS,gBAAgB,CAAC,KAA6B;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAAC,IAAiB,EAAE,QAAgB;IACnE,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAE7D,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IACxD,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE9C,MAAM,IAAI,GAAgB;QACxB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;QACtB,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc;QAC1C,MAAM;KACP,CAAC;IACF,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAEjC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACvB,MAAM,OAAO,GAAG,GAAG,MAAM,yBAAyB,IAAI,EAAE,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACtC,IAAI,CAAC,GAAG,CAAC,GAAG;gBAAE,OAAO;YAErB,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC3C,IAAI,SAAS,CAAC,QAAQ,KAAK,mBAAmB;gBAAE,OAAO;YAEvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAE5D,IAAI,KAAK,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;gBAC9E,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAErB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;gBACxF,MAAM,CAAC,KAAK,EAAE,CAAC;gBAEf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,uFAAuF,CAAC,CAAC;gBACjG,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,MAAc,EAAE,KAAc;IACxD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB;IACrB,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,eAAe;IACf,IAAI,IAAiB,CAAC;IACtB,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,+EAA+E,CAAC;KAC5F,MAAM,CAAC,OAAO,EAAE,gCAAgC,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IAEjC,kEAAkE;IAClE,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAC1C,IAAI,UAAU,EAAE,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEzF,IAAI,IAAiB,CAAC;QACtB,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAChB,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,uCAAuC;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,kBAAkB,2BAA2B,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,KAAK,gBAAgB,sBAAsB,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/D,EAAE,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,oCAAoC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC,CAAC;QACpG,OAAO;IACT,CAAC;IAED,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAChC,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const hookCommand: Command;
3
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/commands/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8OpC,eAAO,MAAM,WAAW,SAKC,CAAC"}
@@ -0,0 +1,214 @@
1
+ import { Command } from "commander";
2
+ import { readdirSync } from "fs";
3
+ import { loadAuth } from "../client/auth.js";
4
+ import { loadRepoConfig } from "../lib/repo-config.js";
5
+ import { saveSessionState, loadSessionState, clearSessionState, } from "../lib/session-state.js";
6
+ import { ParkerClient } from "../client/api-client.js";
7
+ import { getGitRoot } from "../lib/local-git.js";
8
+ import { redactSecrets } from "../lib/redact.js";
9
+ const MAX_CONTEXT_CARDS = 3;
10
+ const MAX_FILES_TO_LIST = 100;
11
+ const UNKNOWN_TOOL_NAME = "unknown";
12
+ /**
13
+ * Reads all of stdin as a string. Returns empty string if stdin is not piped.
14
+ */
15
+ async function readStdin() {
16
+ if (process.stdin.isTTY) {
17
+ return "";
18
+ }
19
+ const chunks = [];
20
+ for await (const chunk of process.stdin) {
21
+ chunks.push(Buffer.from(chunk));
22
+ }
23
+ return Buffer.concat(chunks).toString("utf-8");
24
+ }
25
+ /**
26
+ * Parse stdin JSON, returning null on any failure.
27
+ */
28
+ async function parseStdinJson() {
29
+ try {
30
+ const raw = await readStdin();
31
+ if (!raw.trim())
32
+ return null;
33
+ return JSON.parse(raw);
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ /**
40
+ * Extracts a file path from a Claude Code tool input object.
41
+ */
42
+ function extractFilePath(toolInput) {
43
+ // Common tool_input shapes: { file_path: "..." }, { path: "..." }, { command: "..." }
44
+ if (typeof toolInput.file_path === "string")
45
+ return toolInput.file_path;
46
+ if (typeof toolInput.path === "string")
47
+ return toolInput.path;
48
+ return null;
49
+ }
50
+ /**
51
+ * Formats context cards into a concise string for additionalContext injection.
52
+ */
53
+ function formatCardsForContext(cards) {
54
+ if (cards.length === 0)
55
+ return "";
56
+ const lines = cards.map((card) => `[${card.kind}] ${card.headline}: ${card.summary}`);
57
+ return `Parker context for this file:\n${lines.join("\n")}`;
58
+ }
59
+ // ---------- Subcommands ----------
60
+ const sessionStart = new Command("session-start")
61
+ .description("Hook: called when a Claude Code session starts")
62
+ .action(async () => {
63
+ try {
64
+ const input = await parseStdinJson();
65
+ const claudeSessionId = input?.session_id ?? `fallback-${Date.now()}`;
66
+ const auth = await loadAuth();
67
+ if (!auth) {
68
+ process.stdout.write("{}");
69
+ return;
70
+ }
71
+ const repoConfig = await loadRepoConfig();
72
+ if (!repoConfig) {
73
+ process.stdout.write("{}");
74
+ return;
75
+ }
76
+ const client = new ParkerClient(auth.apiUrl, auth.token);
77
+ // Resolve team and engineer
78
+ let teamInfo = null;
79
+ try {
80
+ teamInfo = await client.getTeam(repoConfig.teamCode);
81
+ }
82
+ catch (err) {
83
+ process.stderr.write(`parker hook session-start: failed to resolve team: ${err}\n`);
84
+ process.stdout.write("{}");
85
+ return;
86
+ }
87
+ // List top-level files in working directory for card matching
88
+ let filesInWorkingDir = [];
89
+ try {
90
+ const gitRoot = await getGitRoot();
91
+ filesInWorkingDir = readdirSync(gitRoot, { withFileTypes: true })
92
+ .filter((d) => d.isFile())
93
+ .map((d) => d.name)
94
+ .slice(0, MAX_FILES_TO_LIST);
95
+ }
96
+ catch {
97
+ // Non-critical
98
+ }
99
+ const result = await client.createSession(teamInfo.id, new Date().toISOString(), filesInWorkingDir);
100
+ await saveSessionState(claudeSessionId, {
101
+ sessionId: result.sessionId,
102
+ teamId: teamInfo.id,
103
+ engineerId: auth.userId,
104
+ apiUrl: auth.apiUrl,
105
+ token: auth.token,
106
+ });
107
+ // Return context cards if any exist
108
+ if (result.cards && result.cards.length > 0) {
109
+ const contextStr = formatCardsForContext(result.cards);
110
+ process.stdout.write(JSON.stringify({ additionalContext: contextStr }));
111
+ }
112
+ else {
113
+ process.stdout.write("{}");
114
+ }
115
+ }
116
+ catch (err) {
117
+ process.stderr.write(`parker hook session-start error: ${err}\n`);
118
+ process.stdout.write("{}");
119
+ }
120
+ });
121
+ const event = new Command("event")
122
+ .description("Hook: called after a tool use during a Claude Code session")
123
+ .action(async () => {
124
+ try {
125
+ const input = await parseStdinJson();
126
+ if (!input)
127
+ return;
128
+ const claudeSessionId = input.session_id ?? "";
129
+ const state = await loadSessionState(claudeSessionId);
130
+ if (!state)
131
+ return;
132
+ const toolName = input.tool_name ?? UNKNOWN_TOOL_NAME;
133
+ const toolInput = input.tool_input ?? {};
134
+ const filePath = extractFilePath(toolInput);
135
+ const eventData = redactSecrets({
136
+ toolName,
137
+ filePath,
138
+ success: input.tool_error === undefined || input.tool_error === null,
139
+ timestamp: new Date().toISOString(),
140
+ });
141
+ const client = new ParkerClient(state.apiUrl, state.token);
142
+ // Fire-and-forget — swallow all errors
143
+ client.sendEvents(state.sessionId, [eventData]).catch((err) => {
144
+ process.stderr.write(`parker hook event send error: ${err}\n`);
145
+ });
146
+ }
147
+ catch (err) {
148
+ process.stderr.write(`parker hook event error: ${err}\n`);
149
+ }
150
+ });
151
+ const context = new Command("context")
152
+ .description("Hook: called before a tool use to inject context")
153
+ .action(async () => {
154
+ try {
155
+ const input = await parseStdinJson();
156
+ if (!input) {
157
+ process.stdout.write("{}");
158
+ return;
159
+ }
160
+ const claudeSessionId = input.session_id ?? "";
161
+ const state = await loadSessionState(claudeSessionId);
162
+ if (!state) {
163
+ process.stdout.write("{}");
164
+ return;
165
+ }
166
+ const toolInput = input.tool_input ?? {};
167
+ const filePath = extractFilePath(toolInput);
168
+ if (!filePath) {
169
+ process.stdout.write("{}");
170
+ return;
171
+ }
172
+ const client = new ParkerClient(state.apiUrl, state.token);
173
+ const result = await client.getContext(state.teamId, filePath);
174
+ if (result.cards && result.cards.length > 0) {
175
+ const contextStr = formatCardsForContext(result.cards.slice(0, MAX_CONTEXT_CARDS));
176
+ process.stdout.write(JSON.stringify({ additionalContext: contextStr }));
177
+ }
178
+ else {
179
+ process.stdout.write("{}");
180
+ }
181
+ }
182
+ catch (err) {
183
+ process.stderr.write(`parker hook context error: ${err}\n`);
184
+ process.stdout.write("{}");
185
+ }
186
+ });
187
+ const sessionEnd = new Command("session-end")
188
+ .description("Hook: called when a Claude Code session ends")
189
+ .action(async () => {
190
+ try {
191
+ const input = await parseStdinJson();
192
+ const claudeSessionId = input?.session_id ?? "";
193
+ const state = await loadSessionState(claudeSessionId);
194
+ if (!state)
195
+ return;
196
+ const client = new ParkerClient(state.apiUrl, state.token);
197
+ await client.endSession(state.sessionId, {
198
+ endedAt: new Date().toISOString(),
199
+ filesRead: [],
200
+ filesModified: [],
201
+ });
202
+ await clearSessionState(claudeSessionId);
203
+ }
204
+ catch (err) {
205
+ process.stderr.write(`parker hook session-end error: ${err}\n`);
206
+ }
207
+ });
208
+ export const hookCommand = new Command("hook")
209
+ .description("Claude Code hook handlers (internal)")
210
+ .addCommand(sessionStart)
211
+ .addCommand(event)
212
+ .addCommand(context)
213
+ .addCommand(sessionEnd);
214
+ //# sourceMappingURL=hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.js","sourceRoot":"","sources":["../../../src/commands/hook.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { Command } from "commander";
2
2
  import { type AuthContext } from "../client/auth.js";
3
3
  /**
4
- * Joins a team by code, writes repo config, and optionally connects to Claude Code.
5
- * Shared between `parker join <code>` and the post-init interactive flow.
4
+ * Joins a team by code, writes repo config, and auto-installs Claude Code integration.
5
+ * Shared between `parker join <code>` and the `parker enable` flow.
6
6
  */
7
7
  export declare function joinTeamInteractive(auth: AuthContext, teamCode: string): Promise<void>;
8
8
  export declare const joinCommand: Command;
@@ -1 +1 @@
1
- {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../../src/commands/join.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIlE;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC5F;AAED,eAAO,MAAM,WAAW,SAgCpB,CAAC"}
1
+ {"version":3,"file":"join.d.ts","sourceRoot":"","sources":["../../../src/commands/join.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIlE;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAa5F;AAED,eAAO,MAAM,WAAW,SAqCpB,CAAC"}
@@ -1,13 +1,12 @@
1
1
  import { Command } from "commander";
2
2
  import chalk from "chalk";
3
- import readline from "readline/promises";
4
- import { ParkerClient } from "../client/api-client.js";
3
+ import { ParkerClient, ApiError } from "../client/api-client.js";
5
4
  import { requireAuth } from "../client/auth.js";
6
5
  import { loadRepoConfig, saveRepoConfig } from "../lib/repo-config.js";
7
6
  import { installClaudeIntegration } from "./connect.js";
8
7
  /**
9
- * Joins a team by code, writes repo config, and optionally connects to Claude Code.
10
- * Shared between `parker join <code>` and the post-init interactive flow.
8
+ * Joins a team by code, writes repo config, and auto-installs Claude Code integration.
9
+ * Shared between `parker join <code>` and the `parker enable` flow.
11
10
  */
12
11
  export async function joinTeamInteractive(auth, teamCode) {
13
12
  const client = new ParkerClient(auth.apiUrl, auth.token);
@@ -16,29 +15,8 @@ export async function joinTeamInteractive(auth, teamCode) {
16
15
  console.log(chalk.green(`✓ Joined team "${result.team.name}" as ${result.role}`));
17
16
  console.log(chalk.dim(`Team code: ${result.team.teamCode}`));
18
17
  console.log("");
19
- const rl = readline.createInterface({
20
- input: process.stdin,
21
- output: process.stdout,
22
- });
23
- console.log("Which AI coding assistant do you use?");
24
- console.log(` ${chalk.bold("1.")} Claude Code`);
25
- console.log(` ${chalk.dim("2.")} ${chalk.dim("More integrations coming soon")}`);
26
- console.log(` ${chalk.bold("3.")} Skip`);
27
- console.log("");
28
- const answer = await rl.question("Choose (1-3): ");
29
- rl.close();
30
- switch (answer.trim()) {
31
- case "1":
32
- console.log("");
33
- await installClaudeIntegration();
34
- break;
35
- case "2":
36
- console.log(chalk.yellow("\nMore integrations are coming soon. Run 'parker connect' when they're available."));
37
- break;
38
- default:
39
- console.log(chalk.dim("\nYou can connect later with 'parker connect claude'"));
40
- break;
41
- }
18
+ // Auto-install Claude Code skills and hooks
19
+ await installClaudeIntegration();
42
20
  }
43
21
  export const joinCommand = new Command("join")
44
22
  .description("Join a team")
@@ -62,14 +40,20 @@ export const joinCommand = new Command("join")
62
40
  await joinTeamInteractive(auth, teamCode);
63
41
  }
64
42
  catch (error) {
65
- if (error.status === 400) {
66
- console.error(chalk.red("Invalid team code"));
67
- }
68
- else if (error.status === 404) {
69
- console.error(chalk.red("Team not found"));
43
+ if (error instanceof ApiError) {
44
+ if (error.status === 400) {
45
+ console.error(chalk.red("Invalid team code"));
46
+ }
47
+ else if (error.status === 404) {
48
+ console.error(chalk.red("Team not found"));
49
+ }
50
+ else {
51
+ console.error(chalk.red(`Failed to join team: ${error.message}`));
52
+ }
70
53
  }
71
54
  else {
72
- console.error(chalk.red("Failed to join team:", error.message));
55
+ const message = error instanceof Error ? error.message : String(error);
56
+ console.error(chalk.red(`Failed to join team: ${message}`));
73
57
  }
74
58
  process.exit(1);
75
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"join.js","sourceRoot":"","sources":["../../../src/commands/join.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"join.js","sourceRoot":"","sources":["../../../src/commands/join.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAiB,EAAE,QAAgB;IAC3E,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAE7D,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,IAAI,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,4CAA4C;IAC5C,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,aAAa,CAAC;KAC1B,QAAQ,CAAC,QAAQ,EAAE,uCAAuC,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,IAAa,EAAE,EAAE;IAC9B,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,CAAC;IAEjC,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;QAC1C,IAAI,UAAU,EAAE,QAAQ,EAAE,CAAC;YACzB,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -12,7 +12,7 @@ export const updateCommand = new Command("update")
12
12
  console.log(chalk.cyan("Checking for updates..."));
13
13
  try {
14
14
  const require = createRequire(import.meta.url);
15
- const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../../../");
15
+ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
16
16
  const packageJson = require(resolve(packageRoot, "package.json"));
17
17
  // Force a fresh check (bypass cache) for manual updates.
18
18
  const notifier = updateNotifier({ pkg: packageJson, updateCheckInterval: 0 });
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAG/D,CAAC;QAEF,yDAAyD;QACzD,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;QAE3B,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE/E,QAAQ,CAAC,kBAAkB,YAAY,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAExE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,YAAY,SAAS,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAG/D,CAAC;QAEF,yDAAyD;QACzD,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC;QAE3B,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE/E,QAAQ,CAAC,kBAAkB,YAAY,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAExE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,YAAY,SAAS,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -10,6 +10,19 @@ export declare const PARKER_REPO_DIR = ".parker";
10
10
  export declare const PARKER_REPO_CONFIG_FILE = "config.json";
11
11
  /** npm package name for the CLI. */
12
12
  export declare const PACKAGE_NAME = "@parkercto/cli";
13
- /** Local port used for the OAuth callback server during `parker init`. */
13
+ /** Local port used for the OAuth callback server during `parker enable`. */
14
14
  export declare const OAUTH_CALLBACK_PORT = 9999;
15
+ /** Path the OAuth callback server listens on for the redirect. */
16
+ export declare const OAUTH_CALLBACK_PATH = "/callback";
17
+ /** Hook command strings for Claude Code session hooks. */
18
+ export declare const HOOK_SESSION_START_COMMAND = "parker hook session-start";
19
+ export declare const HOOK_EVENT_COMMAND = "parker hook event";
20
+ export declare const HOOK_CONTEXT_COMMAND = "parker hook context";
21
+ export declare const HOOK_SESSION_END_COMMAND = "parker hook session-end";
22
+ /** Prefix used to identify Parker-owned hooks when filtering .claude/settings.json. */
23
+ export declare const PARKER_HOOK_PREFIX = "parker ";
24
+ /** Names of bundled skill directories to install/remove. */
25
+ export declare const BUNDLED_SKILLS: string[];
26
+ /** URL where users sign up and create teams. */
27
+ export declare const SIGNUP_URL = "https://app.parkercto.com";
15
28
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA,qEAAqE;AACrE,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAE3D,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,QAAqC,CAAC;AAEpE,qEAAqE;AACrE,eAAO,MAAM,cAAc,QAA4C,CAAC;AAExE,+CAA+C;AAC/C,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD,oCAAoC;AACpC,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,0EAA0E;AAC1E,eAAO,MAAM,mBAAmB,OAAO,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA,qEAAqE;AACrE,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAE3D,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,QAAqC,CAAC;AAEpE,qEAAqE;AACrE,eAAO,MAAM,cAAc,QAA4C,CAAC;AAExE,+CAA+C;AAC/C,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD,oCAAoC;AACpC,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,0DAA0D;AAC1D,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AACtE,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AACtD,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAElE,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,4DAA4D;AAC5D,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,gDAAgD;AAChD,eAAO,MAAM,UAAU,8BAA8B,CAAC"}
@@ -12,6 +12,19 @@ export const PARKER_REPO_DIR = ".parker";
12
12
  export const PARKER_REPO_CONFIG_FILE = "config.json";
13
13
  /** npm package name for the CLI. */
14
14
  export const PACKAGE_NAME = "@parkercto/cli";
15
- /** Local port used for the OAuth callback server during `parker init`. */
15
+ /** Local port used for the OAuth callback server during `parker enable`. */
16
16
  export const OAUTH_CALLBACK_PORT = 9999;
17
+ /** Path the OAuth callback server listens on for the redirect. */
18
+ export const OAUTH_CALLBACK_PATH = "/callback";
19
+ /** Hook command strings for Claude Code session hooks. */
20
+ export const HOOK_SESSION_START_COMMAND = "parker hook session-start";
21
+ export const HOOK_EVENT_COMMAND = "parker hook event";
22
+ export const HOOK_CONTEXT_COMMAND = "parker hook context";
23
+ export const HOOK_SESSION_END_COMMAND = "parker hook session-end";
24
+ /** Prefix used to identify Parker-owned hooks when filtering .claude/settings.json. */
25
+ export const PARKER_HOOK_PREFIX = "parker ";
26
+ /** Names of bundled skill directories to install/remove. */
27
+ export const BUNDLED_SKILLS = ["prp"];
28
+ /** URL where users sign up and create teams. */
29
+ export const SIGNUP_URL = "https://app.parkercto.com";
17
30
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,qEAAqE;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAE3D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAEpE,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAExE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,gEAAgE;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAErD,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE7C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,qEAAqE;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAE3D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAEpE,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAExE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,gEAAgE;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAErD,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE7C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,kEAAkE;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE/C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,2BAA2B,CAAC;AACtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAElE,uFAAuF;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC;AAEtC,gDAAgD;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG,2BAA2B,CAAC"}