@uzukko/agentpm 0.1.2 → 0.2.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.
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Builtin manifest fallback.
3
+ * Used when: no cache, server unreachable, or CLI < minCliVersion.
4
+ * Contains a minimal subset of core commands for basic operation.
5
+ */
6
+ import type { Manifest } from './manifest-validator.js';
7
+ export declare const BUILTIN_MANIFEST: Manifest;
@@ -0,0 +1,114 @@
1
+ const spaceOpt = {
2
+ flags: '-s, --space-id <uuid>',
3
+ description: 'Space UUID',
4
+ param: 'spaceId',
5
+ resolve: 'spaceId',
6
+ };
7
+ export const BUILTIN_MANIFEST = {
8
+ version: '0.0.0-builtin',
9
+ minCliVersion: '0.0.0',
10
+ generatedAt: '1970-01-01T00:00:00Z',
11
+ checksum: '',
12
+ commands: [
13
+ {
14
+ name: 'task',
15
+ description: 'Task management',
16
+ subcommands: [
17
+ {
18
+ name: 'list',
19
+ description: 'List tasks',
20
+ tool: 'task_list',
21
+ options: [
22
+ spaceOpt,
23
+ { flags: '--ball <side>', description: 'Filter: client|internal', param: 'ball' },
24
+ { flags: '--status <status>', description: 'Filter by status', param: 'status' },
25
+ { flags: '--limit <n>', description: 'Max results', param: 'limit', type: 'int', default: '50' },
26
+ ],
27
+ },
28
+ {
29
+ name: 'get',
30
+ description: 'Get task details',
31
+ tool: 'task_get',
32
+ options: [
33
+ spaceOpt,
34
+ { flags: '--task-id <uuid>', description: 'Task UUID', param: 'taskId', required: true },
35
+ ],
36
+ },
37
+ {
38
+ name: 'create',
39
+ description: 'Create a task',
40
+ tool: 'task_create',
41
+ options: [
42
+ spaceOpt,
43
+ { flags: '--title <title>', description: 'Task title', param: 'title', required: true },
44
+ { flags: '--description <desc>', description: 'Description', param: 'description' },
45
+ { flags: '--type <type>', description: 'task|spec', param: 'type', default: 'task' },
46
+ { flags: '--ball <side>', description: 'client|internal', param: 'ball', default: 'internal' },
47
+ ],
48
+ },
49
+ {
50
+ name: 'update',
51
+ description: 'Update a task',
52
+ tool: 'task_update',
53
+ options: [
54
+ spaceOpt,
55
+ { flags: '--task-id <uuid>', description: 'Task UUID', param: 'taskId', required: true },
56
+ { flags: '--title <title>', description: 'New title', param: 'title' },
57
+ { flags: '--status <status>', description: 'New status', param: 'status' },
58
+ ],
59
+ },
60
+ ],
61
+ },
62
+ {
63
+ name: 'ball',
64
+ description: 'Ball ownership management',
65
+ subcommands: [
66
+ {
67
+ name: 'pass',
68
+ description: 'Pass ball ownership',
69
+ tool: 'ball_pass',
70
+ options: [
71
+ spaceOpt,
72
+ { flags: '--task-id <uuid>', description: 'Task UUID', param: 'taskId', required: true },
73
+ { flags: '--ball <side>', description: 'New owner', param: 'ball', required: true },
74
+ ],
75
+ },
76
+ {
77
+ name: 'query',
78
+ description: 'Query tasks by ball side',
79
+ tool: 'ball_query',
80
+ options: [
81
+ spaceOpt,
82
+ { flags: '--ball <side>', description: 'Ball side', param: 'ball', required: true },
83
+ { flags: '--limit <n>', description: 'Max results', param: 'limit', type: 'int', default: '50' },
84
+ ],
85
+ },
86
+ ],
87
+ },
88
+ {
89
+ name: 'dashboard',
90
+ description: 'Get project dashboard',
91
+ tool: 'dashboard_get',
92
+ options: [spaceOpt],
93
+ },
94
+ {
95
+ name: 'space',
96
+ description: 'Space management',
97
+ subcommands: [
98
+ {
99
+ name: 'list',
100
+ description: 'List spaces',
101
+ tool: 'space_list',
102
+ options: [],
103
+ },
104
+ {
105
+ name: 'get',
106
+ description: 'Get space details',
107
+ tool: 'space_get',
108
+ options: [spaceOpt],
109
+ },
110
+ ],
111
+ },
112
+ ],
113
+ };
114
+ //# sourceMappingURL=builtin-manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-manifest.js","sourceRoot":"","sources":["../src/builtin-manifest.ts"],"names":[],"mappings":"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"}
@@ -36,18 +36,23 @@ export function registerConfigCommand(program) {
36
36
  const existing = loadExisting();
37
37
  console.error('AgentPM CLI Login');
38
38
  console.error('─'.repeat(40));
39
- console.error('Get your API Key from: Settings → APIキー管理\n');
40
39
  const config = { ...existing };
40
+ const apiUrl = await prompt('API URL', existing.apiUrl || undefined);
41
+ if (apiUrl)
42
+ config.apiUrl = apiUrl;
43
+ console.error('\nPaste your API Key from Web UI → Settings → API Keys:');
41
44
  const apiKey = await prompt('API Key', existing.apiKey ? maskSecret(existing.apiKey) : undefined);
42
45
  if (apiKey && !apiKey.includes('...')) {
43
46
  config.apiKey = apiKey;
44
47
  }
45
- if (!config.apiUrl) {
46
- config.apiUrl = 'https://agentpm.app';
47
- }
48
+ const defaultSpaceId = await prompt('Default Space ID (optional, press Enter to skip)', existing.defaultSpaceId);
49
+ if (defaultSpaceId)
50
+ config.defaultSpaceId = defaultSpaceId;
48
51
  writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
49
52
  console.error(`\n✓ Config saved to ${configPath}`);
50
- console.error('✓ Run `agentpm space list` to verify your setup');
53
+ if (config.apiKey || existing.apiKey) {
54
+ console.error('✓ Run `agentpm space list` to verify your setup');
55
+ }
51
56
  });
52
57
  // agentpm config — advanced config management
53
58
  const cfg = program.command('config').description('CLI configuration');
@@ -1 +1 @@
1
- {"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../src/commands/config-cmd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../../src/commands/config-cmd.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,8 +1,15 @@
1
+ export declare class ConfigError extends Error {
2
+ constructor(message: string);
3
+ }
1
4
  export declare function getConfigPath(): string;
2
5
  export declare function loadCliConfig(cliOpts: {
3
6
  apiKey?: string;
4
7
  spaceId?: string;
5
8
  }): void;
9
+ export declare function getApiConfig(): {
10
+ apiUrl: string;
11
+ apiKey: string;
12
+ };
6
13
  export declare function resolveSpaceId(opts: {
7
14
  spaceId?: string;
8
15
  }): string;
package/dist/config.js CHANGED
@@ -3,6 +3,15 @@ import { join } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  import { setApiConfig } from './api-client.js';
5
5
  const CONFIG_PATH = join(homedir(), '.taskapprc.json');
6
+ export class ConfigError extends Error {
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = 'ConfigError';
10
+ }
11
+ }
12
+ // Store resolved config for getApiConfig()
13
+ let _resolvedApiUrl = '';
14
+ let _resolvedApiKey = '';
6
15
  export function getConfigPath() {
7
16
  return CONFIG_PATH;
8
17
  }
@@ -16,13 +25,14 @@ export function loadCliConfig(cliOpts) {
16
25
  // ignore invalid config file
17
26
  }
18
27
  }
19
- // Priority: CLI flags > env vars > config file > default
20
- const apiUrl = process.env.TASKAPP_API_URL || fileConfig.apiUrl || 'https://agentpm.app';
28
+ // Priority: CLI flags > env vars > config file
29
+ const apiUrl = process.env.TASKAPP_API_URL || fileConfig.apiUrl;
21
30
  const apiKey = cliOpts.apiKey || process.env.TASKAPP_API_KEY || fileConfig.apiKey;
22
- if (!apiKey) {
23
- console.error('Error: Not configured. Run: agentpm login');
24
- process.exit(1);
31
+ if (!apiUrl || !apiKey) {
32
+ throw new ConfigError('Not configured. Run: agentpm login');
25
33
  }
34
+ _resolvedApiUrl = apiUrl;
35
+ _resolvedApiKey = apiKey;
26
36
  setApiConfig(apiUrl, apiKey);
27
37
  // Set space ID for resolveSpaceId
28
38
  const spaceId = cliOpts.spaceId || process.env.TASKAPP_SPACE_ID || fileConfig.defaultSpaceId;
@@ -30,6 +40,9 @@ export function loadCliConfig(cliOpts) {
30
40
  process.env.TASKAPP_SPACE_ID = spaceId;
31
41
  }
32
42
  }
43
+ export function getApiConfig() {
44
+ return { apiUrl: _resolvedApiUrl, apiKey: _resolvedApiKey };
45
+ }
33
46
  export function resolveSpaceId(opts) {
34
47
  const spaceId = opts.spaceId || process.env.TASKAPP_SPACE_ID;
35
48
  if (!spaceId) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAA;AAQtD,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAG7B;IACC,IAAI,UAAU,GAAc,EAAE,CAAA;IAC9B,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,MAAM,IAAI,qBAAqB,CAAA;IACxF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,MAAM,CAAA;IAEjF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE5B,kCAAkC;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU,CAAC,cAAc,CAAA;IAC5F,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAA;IACxC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAA0B;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAA;QAC9G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,CAAC,CAAA;AAQtD,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;AAED,2CAA2C;AAC3C,IAAI,eAAe,GAAG,EAAE,CAAA;AACxB,IAAI,eAAe,GAAG,EAAE,CAAA;AAExB,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAG7B;IACC,IAAI,UAAU,GAAc,EAAE,CAAA;IAC9B,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,MAAM,CAAA;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,CAAC,MAAM,CAAA;IAEjF,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,WAAW,CAAC,oCAAoC,CAAC,CAAA;IAC7D,CAAC;IAED,eAAe,GAAG,MAAM,CAAA;IACxB,eAAe,GAAG,MAAM,CAAA;IACxB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE5B,kCAAkC;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,UAAU,CAAC,cAAc,CAAA;IAC5F,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAA;IACxC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAA0B;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAA;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAA;QAC9G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Dynamic command registration from manifest JSON.
3
+ * Converts manifest definitions → Commander.js commands at runtime.
4
+ */
5
+ import { Command } from 'commander';
6
+ import type { Manifest } from './manifest-validator.js';
7
+ /**
8
+ * Register all commands from a manifest onto the program.
9
+ */
10
+ export declare function registerDynamicCommands(program: Command, manifest: Manifest): void;
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Dynamic command registration from manifest JSON.
3
+ * Converts manifest definitions → Commander.js commands at runtime.
4
+ */
5
+ import { Option } from 'commander';
6
+ import { resolveSpaceId } from './config.js';
7
+ import { callTool } from './api-client.js';
8
+ import { output, outputError } from './output.js';
9
+ import { sanitize } from './manifest-validator.js';
10
+ import chalk from 'chalk';
11
+ /**
12
+ * Extract the long flag name from a flags string.
13
+ * e.g., "-s, --space-id <uuid>" → "space-id"
14
+ * "--task-id <uuid>" → "task-id"
15
+ * "--no-dry-run" → "no-dry-run"
16
+ */
17
+ function extractLongFlag(flags) {
18
+ const match = flags.match(/--([a-z][a-z0-9-]*)/);
19
+ return match ? match[1] : '';
20
+ }
21
+ /**
22
+ * Convert kebab-case to camelCase (Commander.js convention).
23
+ * e.g., "space-id" → "spaceId", "no-dry-run" → "noDryRun"
24
+ */
25
+ function camelCase(str) {
26
+ return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
27
+ }
28
+ /**
29
+ * Convert option value based on type definition.
30
+ */
31
+ function convertType(value, type) {
32
+ if (type === 'bool' || type === 'negatable') {
33
+ return typeof value === 'boolean' ? value : value === 'true';
34
+ }
35
+ if (typeof value !== 'string')
36
+ return value;
37
+ switch (type) {
38
+ case 'int': {
39
+ const n = parseInt(value, 10);
40
+ if (Number.isNaN(n))
41
+ throw new Error(`Invalid integer: ${value}`);
42
+ return n;
43
+ }
44
+ case 'float': {
45
+ const n = parseFloat(value);
46
+ if (Number.isNaN(n))
47
+ throw new Error(`Invalid number: ${value}`);
48
+ return n;
49
+ }
50
+ case 'json':
51
+ return JSON.parse(value);
52
+ default:
53
+ return value;
54
+ }
55
+ }
56
+ /**
57
+ * Build API params from Commander options + manifest option definitions.
58
+ */
59
+ function buildParams(optionDefs, opts) {
60
+ const params = {};
61
+ for (const def of optionDefs) {
62
+ // Determine the Commander key for this option
63
+ const longFlag = extractLongFlag(def.flags);
64
+ const key = camelCase(longFlag);
65
+ // For negatable options (--no-xxx), Commander stores as the positive key
66
+ // e.g., --no-dry-run → opts.dryRun = false, --no-include-invites → opts.includeInvites = false
67
+ let value = opts[key];
68
+ // Skip stdin pseudo-option (handled separately)
69
+ if (def.param === 'stdin')
70
+ continue;
71
+ if (value === undefined)
72
+ continue;
73
+ // Special resolver: spaceId
74
+ if (def.resolve === 'spaceId') {
75
+ params[def.param] = resolveSpaceId(opts);
76
+ continue;
77
+ }
78
+ // Type conversion
79
+ if (def.type === 'string[]') {
80
+ // Commander already provides arrays for variadic options
81
+ params[def.param] = Array.isArray(value) ? value : [value];
82
+ }
83
+ else if (def.type === 'negatable') {
84
+ // Commander stores boolean for --no-xxx
85
+ params[def.param] = value;
86
+ }
87
+ else {
88
+ params[def.param] = convertType(value, def.type);
89
+ }
90
+ }
91
+ return params;
92
+ }
93
+ /**
94
+ * Resolve a constraint key to a Commander opts key.
95
+ * Handles negatable flags: "no-dry-run" → Commander stores as "dryRun" (boolean false).
96
+ */
97
+ function resolveConstraintKey(flagRef, optionDefs) {
98
+ // Check if flagRef references a negatable option (--no-xxx)
99
+ if (flagRef.startsWith('no-')) {
100
+ const positiveFlag = flagRef.slice(3); // "no-dry-run" → "dry-run"
101
+ const positiveKey = camelCase(positiveFlag); // "dry-run" → "dryRun"
102
+ // Check if the option is actually negatable
103
+ const matchingOpt = optionDefs.find((o) => o.type === 'negatable' && extractLongFlag(o.flags) === `no-${positiveFlag}`);
104
+ if (matchingOpt) {
105
+ return { key: positiveKey, isNegatable: true };
106
+ }
107
+ }
108
+ return { key: camelCase(flagRef), isNegatable: false };
109
+ }
110
+ /**
111
+ * Validate dependsOn / conflictsWith constraints.
112
+ * Returns error message or null if valid.
113
+ */
114
+ function validateConstraints(optionDefs, opts) {
115
+ for (const def of optionDefs) {
116
+ const selfKey = camelCase(extractLongFlag(def.flags));
117
+ if (opts[selfKey] === undefined)
118
+ continue;
119
+ // dependsOn: requires another option
120
+ if (def.dependsOn) {
121
+ const { key: depKey, isNegatable } = resolveConstraintKey(def.dependsOn, optionDefs);
122
+ // For negatable: "dryRun" will be false when --no-dry-run is passed
123
+ const depPresent = isNegatable
124
+ ? opts[depKey] === false // --no-xxx explicitly passed
125
+ : opts[depKey] !== undefined;
126
+ if (!depPresent) {
127
+ return `--${extractLongFlag(def.flags)} requires --${def.dependsOn}`;
128
+ }
129
+ }
130
+ // conflictsWith: mutually exclusive
131
+ if (def.conflictsWith) {
132
+ const { key: conflictKey, isNegatable } = resolveConstraintKey(def.conflictsWith, optionDefs);
133
+ const conflictPresent = isNegatable
134
+ ? opts[conflictKey] === false
135
+ : opts[conflictKey] !== undefined;
136
+ if (conflictPresent) {
137
+ return `--${extractLongFlag(def.flags)} conflicts with --${def.conflictsWith}`;
138
+ }
139
+ }
140
+ }
141
+ return null;
142
+ }
143
+ /**
144
+ * Read stdin as JSON (for scheduling create/respond).
145
+ */
146
+ async function readStdin() {
147
+ const chunks = [];
148
+ for await (const chunk of process.stdin) {
149
+ chunks.push(chunk);
150
+ }
151
+ return JSON.parse(Buffer.concat(chunks).toString('utf-8'));
152
+ }
153
+ /**
154
+ * Create an action handler for a subcommand.
155
+ */
156
+ function createAction(sub, program) {
157
+ return async (opts) => {
158
+ const jsonMode = program.opts().json;
159
+ // Deprecation warning
160
+ if (sub.deprecated) {
161
+ console.error(chalk.yellow(`Warning: "${sub.name}" is deprecated`));
162
+ }
163
+ // Constraint validation
164
+ const error = validateConstraints(sub.options, opts);
165
+ if (error) {
166
+ outputError(new Error(error), jsonMode);
167
+ return;
168
+ }
169
+ try {
170
+ // stdin mode (scheduling create/respond)
171
+ if (sub.stdinMode && opts.stdin) {
172
+ const stdinParams = await readStdin();
173
+ // Merge CLI options into stdin params (CLI takes precedence for spaceId)
174
+ const spaceOpt = sub.options.find((o) => o.resolve === 'spaceId');
175
+ if (spaceOpt && !stdinParams.spaceId) {
176
+ try {
177
+ stdinParams.spaceId = resolveSpaceId(opts);
178
+ }
179
+ catch {
180
+ // spaceId not required for all commands
181
+ }
182
+ }
183
+ // Merge other required CLI options
184
+ for (const def of sub.options) {
185
+ if (def.param === 'stdin')
186
+ continue;
187
+ const key = camelCase(extractLongFlag(def.flags));
188
+ if (opts[key] !== undefined && stdinParams[def.param] === undefined) {
189
+ stdinParams[def.param] = opts[key];
190
+ }
191
+ }
192
+ const result = await callTool(sub.tool, stdinParams);
193
+ output(result, jsonMode);
194
+ return;
195
+ }
196
+ // stdin required but not provided
197
+ if (sub.stdinMode && !opts.stdin) {
198
+ console.error(`Error: ${sub.name} requires --stdin with JSON input.`);
199
+ console.error(`Example: echo '{"key":"value"}' | agentpm ... --stdin`);
200
+ process.exit(1);
201
+ }
202
+ // Normal mode
203
+ const params = buildParams(sub.options, opts);
204
+ const result = await callTool(sub.tool, params);
205
+ output(result, jsonMode);
206
+ }
207
+ catch (e) {
208
+ outputError(e, jsonMode);
209
+ }
210
+ };
211
+ }
212
+ /**
213
+ * Register a single option on a Commander command.
214
+ */
215
+ function registerOption(cmd, opt) {
216
+ const desc = sanitize(opt.description || '');
217
+ const option = new Option(opt.flags, desc);
218
+ if (opt.required)
219
+ option.makeOptionMandatory(true);
220
+ if (opt.default !== undefined)
221
+ option.default(opt.default);
222
+ if (opt.choices)
223
+ option.choices(opt.choices);
224
+ cmd.addOption(option);
225
+ }
226
+ /**
227
+ * Register a subcommand on a parent command group.
228
+ */
229
+ function registerSubcommand(parent, sub, program) {
230
+ const subCmd = parent.command(sub.name).description(sanitize(sub.description));
231
+ if (sub.aliases) {
232
+ for (const alias of sub.aliases)
233
+ subCmd.alias(alias);
234
+ }
235
+ if (sub.hidden)
236
+ subCmd.hideHelp();
237
+ if (sub.examples?.length) {
238
+ subCmd.addHelpText('after', '\nExamples:\n' + sub.examples.map((e) => ` $ ${sanitize(e)}`).join('\n'));
239
+ }
240
+ for (const opt of sub.options) {
241
+ registerOption(subCmd, opt);
242
+ }
243
+ subCmd.action(createAction(sub, program));
244
+ }
245
+ /**
246
+ * Register all commands from a manifest onto the program.
247
+ */
248
+ export function registerDynamicCommands(program, manifest) {
249
+ for (const cmd of manifest.commands) {
250
+ // Top-level command with direct tool (e.g., dashboard)
251
+ if (cmd.tool && !cmd.subcommands) {
252
+ const topCmd = program.command(cmd.name).description(sanitize(cmd.description));
253
+ if (cmd.aliases) {
254
+ for (const alias of cmd.aliases)
255
+ topCmd.alias(alias);
256
+ }
257
+ if (cmd.options) {
258
+ for (const opt of cmd.options) {
259
+ registerOption(topCmd, opt);
260
+ }
261
+ }
262
+ // Create a pseudo-subcommand definition for the action handler
263
+ const pseudoSub = {
264
+ name: cmd.name,
265
+ description: cmd.description,
266
+ tool: cmd.tool,
267
+ options: cmd.options || [],
268
+ };
269
+ topCmd.action(createAction(pseudoSub, program));
270
+ continue;
271
+ }
272
+ // Command group with subcommands
273
+ if (cmd.subcommands) {
274
+ const group = program.command(cmd.name).description(sanitize(cmd.description));
275
+ if (cmd.aliases) {
276
+ for (const alias of cmd.aliases)
277
+ group.alias(alias);
278
+ }
279
+ for (const sub of cmd.subcommands) {
280
+ registerSubcommand(group, sub, program);
281
+ }
282
+ }
283
+ }
284
+ }
285
+ //# sourceMappingURL=dynamic-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-loader.js","sourceRoot":"","sources":["../src/dynamic-loader.ts"],"names":[],"mappings":"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"}