@agendapanda/cli 0.3.2 → 0.4.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 (44) hide show
  1. package/dist/bin/ap.js +32 -0
  2. package/dist/bin/ap.js.map +1 -1
  3. package/dist/src/commands/alias.d.ts +2 -0
  4. package/dist/src/commands/alias.js +84 -0
  5. package/dist/src/commands/alias.js.map +1 -0
  6. package/dist/src/commands/auth.d.ts +4 -0
  7. package/dist/src/commands/auth.js +224 -20
  8. package/dist/src/commands/auth.js.map +1 -1
  9. package/dist/src/commands/calendar.js +8 -3
  10. package/dist/src/commands/calendar.js.map +1 -1
  11. package/dist/src/commands/completion.d.ts +2 -0
  12. package/dist/src/commands/completion.js +197 -0
  13. package/dist/src/commands/completion.js.map +1 -0
  14. package/dist/src/commands/connections.js +171 -26
  15. package/dist/src/commands/connections.js.map +1 -1
  16. package/dist/src/commands/context.js +10 -2
  17. package/dist/src/commands/context.js.map +1 -1
  18. package/dist/src/commands/init.d.ts +2 -0
  19. package/dist/src/commands/init.js +249 -0
  20. package/dist/src/commands/init.js.map +1 -0
  21. package/dist/src/commands/post.js +253 -9
  22. package/dist/src/commands/post.js.map +1 -1
  23. package/dist/src/commands/projects.js +8 -2
  24. package/dist/src/commands/projects.js.map +1 -1
  25. package/dist/src/index.js +24 -2
  26. package/dist/src/index.js.map +1 -1
  27. package/dist/src/lib/config.d.ts +18 -0
  28. package/dist/src/lib/config.js +48 -0
  29. package/dist/src/lib/config.js.map +1 -1
  30. package/dist/src/lib/errors.d.ts +4 -0
  31. package/dist/src/lib/errors.js +5 -0
  32. package/dist/src/lib/errors.js.map +1 -0
  33. package/dist/src/lib/platform-rules.js +2 -0
  34. package/dist/src/lib/platform-rules.js.map +1 -1
  35. package/dist/src/lib/poll.d.ts +11 -0
  36. package/dist/src/lib/poll.js +42 -0
  37. package/dist/src/lib/poll.js.map +1 -0
  38. package/dist/src/lib/update-check.d.ts +2 -0
  39. package/dist/src/lib/update-check.js +66 -0
  40. package/dist/src/lib/update-check.js.map +1 -0
  41. package/dist/src/lib/utils.d.ts +2 -0
  42. package/dist/src/lib/utils.js +27 -0
  43. package/dist/src/lib/utils.js.map +1 -0
  44. package/package.json +1 -1
package/dist/bin/ap.js CHANGED
@@ -1,7 +1,29 @@
1
1
  #!/usr/bin/env node
2
2
  import { CommanderError } from 'commander';
3
+ import { getAliases } from '../src/lib/config.js';
3
4
  import { program, earlyJsonMode } from '../src/index.js';
4
5
  import { outputError } from '../src/lib/output.js';
6
+ import { checkForUpdate, printUpdateBanner } from '../src/lib/update-check.js';
7
+ /**
8
+ * Expand aliases: if argv[2] matches a known alias, replace it with expanded tokens.
9
+ * Handles quoted arguments in the expansion string (e.g. 'post create --content "hello world"').
10
+ */
11
+ function expandAlias(argv) {
12
+ const aliases = getAliases();
13
+ const firstArg = argv[2];
14
+ if (!firstArg || !aliases[firstArg])
15
+ return argv;
16
+ const expansion = aliases[firstArg];
17
+ const expandedTokens = expansion.match(/[^\s"']+|"([^"]*)"|'([^']*)'/g) || [];
18
+ // Strip surrounding quotes from matched tokens
19
+ const cleaned = expandedTokens.map((t) => t.startsWith('"') && t.endsWith('"') ? t.slice(1, -1) :
20
+ t.startsWith("'") && t.endsWith("'") ? t.slice(1, -1) : t);
21
+ const remainingArgs = argv.slice(3);
22
+ return [argv[0], argv[1], ...cleaned, ...remainingArgs];
23
+ }
24
+ process.argv = expandAlias(process.argv);
25
+ // Fire off update check without blocking startup
26
+ const updatePromise = checkForUpdate();
5
27
  try {
6
28
  await program.parseAsync();
7
29
  }
@@ -18,4 +40,14 @@ catch (err) {
18
40
  throw err;
19
41
  }
20
42
  }
43
+ // After command completes, check if an update is available
44
+ try {
45
+ const latestVersion = await updatePromise;
46
+ if (latestVersion) {
47
+ printUpdateBanner(latestVersion);
48
+ }
49
+ }
50
+ catch {
51
+ // Never block exit for update check failures
52
+ }
21
53
  //# sourceMappingURL=ap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ap.js","sourceRoot":"","sources":["../../bin/ap.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,IAAI,CAAC;IACJ,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACd,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QACnC,yEAAyE;QACzE,+EAA+E;QAC/E,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YACzC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"ap.js","sourceRoot":"","sources":["../../bin/ap.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/E;;;GAGG;AACH,SAAS,WAAW,CAAC,IAAc;IAClC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,+BAA+B,CAAC,IAAI,EAAE,CAAC;IAC9E,+CAA+C;IAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACzD,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,aAAa,CAAC,CAAC;AACzD,CAAC;AAED,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzC,iDAAiD;AACjD,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC;AAEvC,IAAI,CAAC;IACJ,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACd,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QACnC,yEAAyE;QACzE,+EAA+E;QAC/E,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YACzC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC;AAED,2DAA2D;AAC3D,IAAI,CAAC;IACJ,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC;IAC1C,IAAI,aAAa,EAAE,CAAC;QACnB,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;AACF,CAAC;AAAC,MAAM,CAAC;IACR,6CAA6C;AAC9C,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAliasCommands(program: Command): void;
@@ -0,0 +1,84 @@
1
+ import chalk from 'chalk';
2
+ import { getAliases, setAlias, deleteAlias } from '../lib/config.js';
3
+ import { initJsonMode, isJsonMode, outputJson, outputTable, outputError, } from '../lib/output.js';
4
+ const ALIAS_NAME_RE = /^[a-z0-9_-]+$/;
5
+ // Commands that cannot be shadowed by aliases
6
+ const RESERVED_COMMANDS = [
7
+ 'auth', 'projects', 'connections', 'post', 'media', 'calendar',
8
+ 'context', 'whoami', 'init', 'completion', 'alias', 'help', 'version',
9
+ ];
10
+ export function registerAliasCommands(program) {
11
+ const alias = program.command('alias').description('Manage command aliases');
12
+ // ap alias set <name> <expansion>
13
+ alias
14
+ .command('set <name> <expansion>')
15
+ .description('Create or update an alias')
16
+ .option('--json', 'Output as JSON')
17
+ .addHelpText('after', `
18
+ Examples:
19
+ ap alias set tw "post create --connection abc123 --now"
20
+ ap alias set mypage "post create --connection xyz789"
21
+ ap tw --content "hello" # expands to: ap post create --connection abc123 --now --content "hello"`)
22
+ .action((name, expansion, options) => {
23
+ initJsonMode(options);
24
+ if (!ALIAS_NAME_RE.test(name)) {
25
+ outputError('Alias name must contain only lowercase letters, numbers, hyphens, and underscores.', 'INVALID_ALIAS_NAME');
26
+ process.exit(1);
27
+ }
28
+ if (RESERVED_COMMANDS.includes(name)) {
29
+ outputError(`"${name}" is a built-in command and cannot be used as an alias.`, 'RESERVED_ALIAS_NAME');
30
+ process.exit(1);
31
+ }
32
+ const existing = getAliases()[name];
33
+ setAlias(name, expansion);
34
+ if (isJsonMode(options)) {
35
+ outputJson({ success: true, item: { name, expansion, overwritten: !!existing } });
36
+ }
37
+ else {
38
+ if (existing) {
39
+ console.log(chalk.yellow('⚠') + ` Overwrote alias ${chalk.bold(name)} (was: ${chalk.dim(`ap ${existing}`)})`);
40
+ }
41
+ console.log(chalk.green('✓') + ` Alias ${chalk.bold(name)} → ${chalk.dim(`ap ${expansion}`)}`);
42
+ }
43
+ });
44
+ // ap alias list
45
+ alias
46
+ .command('list')
47
+ .description('List all aliases')
48
+ .option('--json', 'Output as JSON')
49
+ .action((options) => {
50
+ initJsonMode(options);
51
+ const aliases = getAliases();
52
+ const entries = Object.entries(aliases);
53
+ if (isJsonMode(options)) {
54
+ outputJson({ items: entries.map(([name, expansion]) => ({ name, expansion })) });
55
+ }
56
+ else {
57
+ if (entries.length === 0) {
58
+ console.log(chalk.dim('No aliases defined. Use `ap alias set <name> "<expansion>"` to create one.'));
59
+ return;
60
+ }
61
+ outputTable(['ALIAS', 'EXPANSION'], entries.map(([name, expansion]) => [name, `ap ${expansion}`]));
62
+ }
63
+ });
64
+ // ap alias delete <name>
65
+ alias
66
+ .command('delete <name>')
67
+ .description('Delete an alias')
68
+ .option('--json', 'Output as JSON')
69
+ .action((name, options) => {
70
+ initJsonMode(options);
71
+ const removed = deleteAlias(name);
72
+ if (!removed) {
73
+ outputError(`Alias "${name}" not found.`, 'ALIAS_NOT_FOUND');
74
+ process.exit(1);
75
+ }
76
+ if (isJsonMode(options)) {
77
+ outputJson({ success: true });
78
+ }
79
+ else {
80
+ console.log(chalk.green('✓') + ` Alias ${chalk.bold(name)} deleted.`);
81
+ }
82
+ });
83
+ }
84
+ //# sourceMappingURL=alias.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias.js","sourceRoot":"","sources":["../../../src/commands/alias.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,6 @@
1
1
  import { Command } from 'commander';
2
+ /** Shared handler for `ap auth status` and `ap whoami` */
3
+ export declare function authStatusHandler(options: {
4
+ json?: boolean;
5
+ }): Promise<void>;
2
6
  export declare function registerAuthCommands(program: Command): void;
@@ -1,7 +1,55 @@
1
1
  import chalk from 'chalk';
2
2
  import { api, ApiError } from '../lib/api.js';
3
- import { getApiKey, setApiKey, clearConfig, getConfigPath, getActiveProject, } from '../lib/config.js';
3
+ import { getApiKey, setApiKey, setApiUrl, clearConfig, getConfigPath, getActiveProject, getActiveProfile, setActiveProfile, getProfiles, setProfile, deleteProfile, } from '../lib/config.js';
4
4
  import { initJsonMode, isJsonMode, outputJson, outputTable, outputError, outputItems, outputMutation, } from '../lib/output.js';
5
+ import { openInBrowser } from '../lib/utils.js';
6
+ import { API_KEY_URL_SUFFIX } from '../lib/errors.js';
7
+ /** Shared handler for `ap auth status` and `ap whoami` */
8
+ export async function authStatusHandler(options) {
9
+ initJsonMode(options);
10
+ try {
11
+ const me = await api.get('/api/auth/me');
12
+ if (isJsonMode(options)) {
13
+ outputJson({
14
+ user: me.user,
15
+ active_projects_count: me.active_projects_count,
16
+ active_project: getActiveProject() || null,
17
+ active_profile: getActiveProfile() || null,
18
+ });
19
+ }
20
+ else {
21
+ console.log(chalk.bold('User:'));
22
+ console.log(` Name: ${me.user.name}`);
23
+ console.log(` Email: ${me.user.email}`);
24
+ console.log(` Plan: ${me.user.plan}`);
25
+ console.log(` Projects: ${me.active_projects_count}`);
26
+ const profile = getActiveProfile();
27
+ if (profile) {
28
+ console.log(` Profile: ${profile}`);
29
+ }
30
+ const proj = getActiveProject();
31
+ if (proj) {
32
+ console.log(` Active project: ${proj}`);
33
+ }
34
+ else {
35
+ console.log(chalk.dim(' No active project set. Run `ap projects use <id>`.'));
36
+ }
37
+ }
38
+ }
39
+ catch (err) {
40
+ if (err instanceof ApiError) {
41
+ let msg = err.message;
42
+ if (err.code === 'INVALID_KEY' || msg.includes('Invalid API key')) {
43
+ msg += API_KEY_URL_SUFFIX;
44
+ }
45
+ outputError(msg, err.code);
46
+ }
47
+ else {
48
+ outputError(String(err));
49
+ }
50
+ process.exit(1);
51
+ }
52
+ }
5
53
  export function registerAuthCommands(program) {
6
54
  const auth = program.command('auth').description('Authentication and API key management');
7
55
  // ap auth login
@@ -9,10 +57,22 @@ export function registerAuthCommands(program) {
9
57
  .command('login')
10
58
  .description('Store API key for authentication')
11
59
  .option('--key <key>', 'API key (or set AP_API_KEY env var)')
60
+ .option('--browser', 'Open agendapanda.com to copy your API key')
61
+ .addHelpText('after', `
62
+ Examples:
63
+ ap auth login --key ap_abc123 # store API key directly
64
+ ap auth login --browser # open browser to copy key, then prompt
65
+ ap auth login # interactive prompt for API key`)
12
66
  .action(async (options) => {
13
67
  initJsonMode({});
14
68
  try {
15
69
  let key = options.key;
70
+ if (!key && options.browser) {
71
+ if (process.stdout.isTTY) {
72
+ console.log('Opening agendapanda.com → Settings → Security → API Keys...');
73
+ }
74
+ await openInBrowser('https://agendapanda.com/settings?tab=security');
75
+ }
16
76
  if (!key) {
17
77
  if (!process.stdin.isTTY) {
18
78
  outputError('No --key provided and stdin is not interactive', 'MISSING_KEY');
@@ -29,7 +89,7 @@ export function registerAuthCommands(program) {
29
89
  });
30
90
  }
31
91
  if (!key || !key.startsWith('ap_')) {
32
- outputError('Invalid API key format. Keys start with "ap_"', 'INVALID_KEY');
92
+ outputError('Invalid API key format. Keys start with "ap_"' + API_KEY_URL_SUFFIX, 'INVALID_KEY');
33
93
  process.exit(1);
34
94
  }
35
95
  // Validate key against API
@@ -60,7 +120,11 @@ export function registerAuthCommands(program) {
60
120
  }
61
121
  catch (err) {
62
122
  if (err instanceof ApiError) {
63
- outputError(err.message, err.code);
123
+ let msg = err.message;
124
+ if (err.code === 'INVALID_KEY' || msg.includes('Invalid API key')) {
125
+ msg += API_KEY_URL_SUFFIX;
126
+ }
127
+ outputError(msg, err.code);
64
128
  }
65
129
  else {
66
130
  outputError(String(err));
@@ -87,31 +151,171 @@ export function registerAuthCommands(program) {
87
151
  .command('status')
88
152
  .description('Show current user info and active project')
89
153
  .option('--json', 'Output as JSON')
154
+ .action(authStatusHandler);
155
+ // ap auth switch
156
+ const switchCmd = auth
157
+ .command('switch')
158
+ .description('Switch between saved API key profiles')
159
+ .option('--add', 'Add a new profile')
160
+ .option('--delete', 'Delete a saved profile')
161
+ .option('--name <name>', 'Profile name')
162
+ .option('--key <key>', 'API key for the profile')
163
+ .option('--list', 'List all saved profiles')
164
+ .option('--json', 'Output as JSON')
165
+ .addHelpText('after', `
166
+ Examples:
167
+ ap auth switch --add --name work --key ap_abc123 # save a new profile
168
+ ap auth switch --name work # switch to a saved profile
169
+ ap auth switch --delete --name work # delete a saved profile
170
+ ap auth switch --list # show all saved profiles
171
+ ap auth switch # interactive profile picker`)
90
172
  .action(async (options) => {
91
173
  initJsonMode(options);
92
174
  try {
93
- const me = await api.get('/api/auth/me');
94
- if (isJsonMode(options)) {
95
- outputJson({
96
- user: me.user,
97
- active_projects_count: me.active_projects_count,
98
- active_project: getActiveProject() || null,
99
- });
175
+ const profiles = getProfiles();
176
+ // --list: show all profiles
177
+ if (options.list) {
178
+ const entries = Object.entries(profiles);
179
+ if (isJsonMode(options)) {
180
+ const activeProfile = getActiveProfile();
181
+ outputJson({
182
+ items: entries.map(([name, p]) => ({
183
+ name,
184
+ label: p.label,
185
+ url: p.url,
186
+ active: name === activeProfile,
187
+ })),
188
+ });
189
+ return;
190
+ }
191
+ if (entries.length === 0) {
192
+ console.log(chalk.dim('No saved profiles. Use `ap auth switch --add --name <name> --key <key>` to add one.'));
193
+ return;
194
+ }
195
+ const activeProfile = getActiveProfile();
196
+ outputTable(['NAME', 'LABEL', 'URL', 'ACTIVE'], entries.map(([name, p]) => [
197
+ name,
198
+ p.label,
199
+ p.url,
200
+ name === activeProfile ? chalk.green('✓') : '',
201
+ ]));
202
+ return;
100
203
  }
101
- else {
102
- console.log(chalk.bold('User:'));
103
- console.log(` Name: ${me.user.name}`);
104
- console.log(` Email: ${me.user.email}`);
105
- console.log(` Plan: ${me.user.plan}`);
106
- console.log(` Projects: ${me.active_projects_count}`);
107
- const proj = getActiveProject();
108
- if (proj) {
109
- console.log(` Active project: ${proj}`);
204
+ // --add: save a new profile
205
+ if (options.add) {
206
+ if (!options.name) {
207
+ outputError('--name is required when adding a profile', 'MISSING_NAME');
208
+ process.exit(1);
209
+ }
210
+ if (!options.key) {
211
+ outputError('--key is required when adding a profile', 'MISSING_KEY');
212
+ process.exit(1);
213
+ }
214
+ if (!options.key.startsWith('ap_')) {
215
+ outputError('Invalid API key format. Keys start with "ap_"' + API_KEY_URL_SUFFIX, 'INVALID_KEY');
216
+ process.exit(1);
217
+ }
218
+ // Validate key by calling the API
219
+ const originalKey = getApiKey();
220
+ setApiKey(options.key);
221
+ let label;
222
+ try {
223
+ const me = await api.get('/api/auth/me');
224
+ label = `${me.user.name} (${me.user.email})`;
225
+ }
226
+ catch {
227
+ outputError('Could not validate API key' + API_KEY_URL_SUFFIX, 'INVALID_KEY');
228
+ process.exit(1);
229
+ }
230
+ finally {
231
+ // Restore key — we're just saving, not switching
232
+ setApiKey(originalKey);
233
+ }
234
+ const url = process.env.AP_API_URL || 'https://agendapanda.com';
235
+ setProfile(options.name, { key: options.key, url, label });
236
+ if (process.stdout.isTTY) {
237
+ console.log(chalk.green('✓') + ` Profile ${chalk.bold(options.name)} saved (${label})`);
238
+ }
239
+ else {
240
+ outputJson({ success: true, profile: options.name, label });
241
+ }
242
+ return;
243
+ }
244
+ // --delete: remove a saved profile
245
+ if (options.delete) {
246
+ if (!options.name) {
247
+ outputError('--name is required when deleting a profile', 'MISSING_NAME');
248
+ process.exit(1);
249
+ }
250
+ if (!profiles[options.name]) {
251
+ outputError(`Profile "${options.name}" not found. Run \`ap auth switch --list\` to see saved profiles.`, 'PROFILE_NOT_FOUND');
252
+ process.exit(1);
253
+ }
254
+ deleteProfile(options.name);
255
+ // If the deleted profile was active, clear the active profile
256
+ if (getActiveProfile() === options.name) {
257
+ setActiveProfile('');
258
+ }
259
+ if (process.stdout.isTTY) {
260
+ console.log(chalk.green('✓') + ` Profile ${chalk.bold(options.name)} deleted.`);
110
261
  }
111
262
  else {
112
- console.log(chalk.dim(' No active project set. Run `ap projects use <id>`.'));
263
+ outputJson({ success: true });
113
264
  }
265
+ return;
266
+ }
267
+ // --name <name>: switch directly to a named profile
268
+ if (options.name) {
269
+ const profile = profiles[options.name];
270
+ if (!profile) {
271
+ outputError(`Profile "${options.name}" not found. Run \`ap auth switch --list\` to see saved profiles.`, 'PROFILE_NOT_FOUND');
272
+ process.exit(1);
273
+ }
274
+ setApiKey(profile.key);
275
+ setApiUrl(profile.url);
276
+ setActiveProfile(options.name);
277
+ if (process.stdout.isTTY) {
278
+ console.log(chalk.green('✓') + ` Switched to profile ${chalk.bold(options.name)} (${profile.label})`);
279
+ }
280
+ else {
281
+ outputJson({ success: true, profile: options.name, label: profile.label });
282
+ }
283
+ return;
284
+ }
285
+ // No flags: interactive menu
286
+ const entries = Object.entries(profiles);
287
+ if (entries.length === 0) {
288
+ console.log(chalk.dim('No saved profiles. Use `ap auth switch --add --name <name> --key <key>` to add one.'));
289
+ return;
290
+ }
291
+ if (!process.stdin.isTTY) {
292
+ outputError('No --name provided and stdin is not interactive. Use `ap auth switch --name <name>`.', 'MISSING_NAME');
293
+ process.exit(1);
294
+ }
295
+ const activeProfile = getActiveProfile();
296
+ console.log(chalk.bold('Select a profile:'));
297
+ entries.forEach(([name, p], i) => {
298
+ const marker = name === activeProfile ? chalk.green(' (active)') : '';
299
+ console.log(` ${i + 1}) ${name} — ${p.label}${marker}`);
300
+ });
301
+ const readline = await import('readline');
302
+ const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
303
+ const answer = await new Promise((resolve) => {
304
+ rl.question('Enter number: ', (ans) => {
305
+ rl.close();
306
+ resolve(ans.trim());
307
+ });
308
+ });
309
+ const idx = parseInt(answer, 10) - 1;
310
+ if (isNaN(idx) || idx < 0 || idx >= entries.length) {
311
+ outputError('Invalid selection', 'INVALID_SELECTION');
312
+ process.exit(1);
114
313
  }
314
+ const [selectedName, selectedProfile] = entries[idx];
315
+ setApiKey(selectedProfile.key);
316
+ setApiUrl(selectedProfile.url);
317
+ setActiveProfile(selectedName);
318
+ console.log(chalk.green('✓') + ` Switched to profile ${chalk.bold(selectedName)} (${selectedProfile.label})`);
115
319
  }
116
320
  catch (err) {
117
321
  if (err instanceof ApiError) {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { api, ApiError } from '../lib/api.js';
5
5
  import { getActiveProject } from '../lib/config.js';
6
6
  import { filenameFromPath, guessMimeTypeFromPath } from '../lib/media.js';
7
7
  import { initJsonMode, isJsonMode, outputJson, outputTable, outputError } from '../lib/output.js';
8
+ import { MISSING_PROJECT_MSG } from '../lib/errors.js';
8
9
  function computeIdempotencyKey(projectId, connectionId, content, scheduledAt) {
9
10
  const normalized = [
10
11
  projectId,
@@ -77,13 +78,17 @@ export function registerCalendarCommands(program) {
77
78
  .option('--project <id>', 'Override active project')
78
79
  .option('--dry-run', 'Show what would be created without actually creating')
79
80
  .option('--json', 'Output as JSON')
81
+ .addHelpText('after', `
82
+ Examples:
83
+ ap calendar import --file posts.json # import posts from file
84
+ ap calendar import --file posts.json --dry-run # preview without creating`)
80
85
  .action(async (options) => {
81
86
  initJsonMode(options);
82
87
  try {
83
88
  // Resolve project
84
89
  const projectId = options.project || getActiveProject();
85
90
  if (!projectId) {
86
- outputError('No project set. Use --project, AP_PROJECT env, or `ap projects use <id>`.', 'MISSING_PROJECT');
91
+ outputError(MISSING_PROJECT_MSG, 'MISSING_PROJECT');
87
92
  process.exit(1);
88
93
  }
89
94
  // Read and parse file
@@ -268,7 +273,7 @@ export function registerCalendarCommands(program) {
268
273
  // Resolve project
269
274
  const projectId = options.project || getActiveProject();
270
275
  if (!projectId) {
271
- outputError('No project set. Use --project, AP_PROJECT env, or `ap projects use <id>`.', 'MISSING_PROJECT');
276
+ outputError(MISSING_PROJECT_MSG, 'MISSING_PROJECT');
272
277
  process.exit(1);
273
278
  }
274
279
  // Permission check — fetch project and verify editor+ role
@@ -818,7 +823,7 @@ export function registerCalendarCommands(program) {
818
823
  try {
819
824
  const projectId = options.project || getActiveProject();
820
825
  if (!projectId) {
821
- outputError('No project set. Use --project, AP_PROJECT env, or `ap projects use <id>`.', 'MISSING_PROJECT');
826
+ outputError(MISSING_PROJECT_MSG, 'MISSING_PROJECT');
822
827
  process.exit(1);
823
828
  }
824
829
  // Validate date filters